|
1 | 1 | <script lang="ts">
|
2 | 2 | import type { TocItem } from '$lib/layouts/DocsArticle.svelte';
|
3 | 3 | import { classNames } from '$lib/utils/classnames';
|
| 4 | + import { fade } from 'svelte/transition'; |
4 | 5 |
|
5 | 6 | const backToTop = () => {
|
6 | 7 | window.scrollTo({ top: 0 });
|
7 | 8 | };
|
8 | 9 |
|
| 10 | + let isScrolled: boolean = false; |
| 11 | +
|
| 12 | + window.addEventListener('scroll', () => { |
| 13 | + isScrolled = !!window.scrollY; |
| 14 | + }); |
| 15 | +
|
9 | 16 | export let toc: Array<TocItem> = [];
|
| 17 | + export let heading: string = 'Table of Contents'; |
10 | 18 | </script>
|
11 | 19 |
|
12 | 20 | <nav class="sticky top-32 col-span-3 mt-2 -ml-4 hidden h-[800px] flex-col gap-6 lg:flex">
|
13 |
| - <span class="text-micro text-primary ps-6 uppercase tracking-tighter">Table of Contents</span> |
| 21 | + <span class="text-micro tracking-loose text-primary font-aeonik-fono ps-6 uppercase" |
| 22 | + >{heading}</span |
| 23 | + > |
14 | 24 | <div class="relative">
|
15 | 25 | <ul
|
16 |
| - class="border-smooth mask text-caption flex max-h-[600px] flex-col gap-4 overflow-scroll border-b pb-11 [scrollbar-width:none]" |
| 26 | + class="mask text-caption flex max-h-[600px] flex-col gap-4 overflow-scroll pb-11 [scrollbar-width:none]" |
17 | 27 | >
|
18 | 28 | {#each toc as parent (parent.href)}
|
19 | 29 | <li
|
|
24 | 34 | {
|
25 | 35 | 'font-medium': parent.level && parent.level === 1,
|
26 | 36 | 'ps-6': parent.level && parent.level === 2,
|
27 |
| - 'pl-10': parent.level && parent.level >= 3, |
| 37 | + 'ps-12': parent.level && parent.level >= 3, |
28 | 38 | 'before:opacity-100': parent.selected
|
29 | 39 | }
|
30 | 40 | )}
|
|
33 | 43 |
|
34 | 44 | {#if parent.children}
|
35 | 45 | <ul
|
36 |
| - class="border-smooth mt-11 ml-9 flex flex-col gap-7 border-b pb-11 text-xs" |
| 46 | + class="border-smooth text-caption mt-11 ml-9 flex flex-col gap-7 border-b pb-10" |
37 | 47 | >
|
38 | 48 | {#each parent.children as child}
|
39 | 49 | <li
|
|
58 | 68 | </ul>
|
59 | 69 | </div>
|
60 | 70 |
|
61 |
| - <button |
62 |
| - class="text-primary group mt-8 flex cursor-pointer items-center gap-2 pl-7 transition-all active:scale-95" |
63 |
| - on:click={backToTop} |
64 |
| - > |
65 |
| - <span class="web-icon-arrow-up transition group-hover:-translate-y-0.5" /> |
66 |
| - Back to Top |
67 |
| - </button> |
| 71 | + {#if isScrolled} |
| 72 | + <button |
| 73 | + class="text-primary group border-smooth text-caption ms-6 -mt-4 flex cursor-pointer items-center gap-2 border-t pt-10 font-medium transition-all" |
| 74 | + on:click={backToTop} |
| 75 | + out:fade |
| 76 | + in:fade |
| 77 | + > |
| 78 | + <span class="web-icon-arrow-up transition group-hover:-translate-y-0.5" /> |
| 79 | + Back to Top |
| 80 | + </button> |
| 81 | + {/if} |
68 | 82 | </nav>
|
0 commit comments