Skip to content

Commit 2159e97

Browse files
committed
refactor(docs): use navigation components for contents
1 parent d1e810f commit 2159e97

2 files changed

Lines changed: 59 additions & 41 deletions

File tree

packages/stacks-docs/src/components/Contents.svelte

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,18 +81,15 @@
8181
class="layout-toc fl-shrink0 w30 wmn2 wmx3 ff-stack-sans-headline md:d-none"
8282
>
8383
<div class="ps-sticky t0 mt6 py24 px32 overflow-auto hmx-screen">
84-
<nav
85-
id={contentsNavId}
86-
aria-labelledby={contentsHeadingId}
87-
class="bg-white"
88-
>
84+
<div id={contentsNavId} class="bg-white">
8985
<ContentsList
9086
{toc}
9187
{activeId}
9288
headingId={contentsHeadingId}
89+
label="Contents"
9390
onSelect={handleLinkClick}
9491
/>
95-
</nav>
92+
</div>
9693
</div>
9794
</aside>
9895

@@ -112,18 +109,18 @@
112109
</Button>
113110

114111
{#if isMobileTocOpen}
115-
<nav
112+
<div
116113
id={mobileContentsNavId}
117-
aria-label="Contents"
118114
class="contents-mobile-popover bg-white bar-md bs-md overflow-auto p12 w100"
119115
>
120116
<ContentsList
121117
{toc}
122118
{activeId}
119+
label="Contents"
123120
onSelect={handleLinkClick}
124121
showHeading={false}
125122
/>
126-
</nav>
123+
</div>
127124
{/if}
128125
</div>
129126
{/if}
Lines changed: 53 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
<script lang="ts">
2+
import { Navigation, NavigationItem } from "@stackoverflow/stacks-svelte";
3+
24
type Props = {
35
toc: DocsTocItem[];
46
activeId: string | null;
57
headingId?: string;
8+
label?: string;
69
onSelect: (id: string) => void;
710
showHeading?: boolean;
811
};
@@ -11,9 +14,11 @@
1114
toc,
1215
activeId,
1316
headingId,
17+
label = "Contents",
1418
onSelect,
1519
showHeading = true,
1620
}: Props = $props();
21+
1722
</script>
1823

1924
{#if showHeading && headingId}
@@ -22,39 +27,55 @@
2227
</h2>
2328
{/if}
2429

25-
<ul class="s-navigation s-navigation__vertical">
30+
<Navigation {label} orientation="vertical" listClass="contents-list">
2631
{#each toc as item, index (item.id)}
27-
<li>
28-
<a
29-
href="#{item.id}"
30-
onclick={() => onSelect(item.id)}
31-
class="s-navigation--item fs-caption bar0 fw-bold fc-black ai-start"
32-
class:bg-black-100={activeId === item.id}
33-
class:is-active={activeId === item.id}
34-
>
35-
<span class="fl-shrink0 w24 d-flex ai-center fc-theme-primary">
36-
{(index + 1).toString().padStart(2, "0")}
37-
</span>
38-
<span class="truncate">{item.value}</span>
39-
</a>
40-
41-
{#if item.children && item.children.length > 0}
42-
<ul class="s-navigation s-navigation__vertical">
32+
<NavigationItem
33+
href="#{item.id}"
34+
text={item.value}
35+
selected={activeId === item.id}
36+
onclick={() => onSelect(item.id)}
37+
class={`contents-primary-item fs-caption bar0 fw-bold fc-black ai-start ${activeId === item.id ? "bg-black-100" : ""}`}
38+
/>
39+
40+
{#if item.children && item.children.length > 0}
41+
<li>
42+
<Navigation
43+
label={`${item.value} sections`}
44+
orientation="vertical"
45+
>
4346
{#each item.children as child (child.id)}
44-
<li>
45-
<a
46-
href="#{child.id}"
47-
onclick={() => onSelect(child.id)}
48-
class="s-navigation--item fs-caption bar0"
49-
class:bg-black-100={activeId === child.id}
50-
class:is-active={activeId === child.id}
51-
>
52-
{child.value}
53-
</a>
54-
</li>
47+
<NavigationItem
48+
href="#{child.id}"
49+
text={child.value}
50+
selected={activeId === child.id}
51+
onclick={() => onSelect(child.id)}
52+
class={`fs-caption bar0 ${activeId === child.id ? "bg-black-100" : ""}`}
53+
/>
5554
{/each}
56-
</ul>
57-
{/if}
58-
</li>
55+
</Navigation>
56+
</li>
57+
{/if}
5958
{/each}
60-
</ul>
59+
</Navigation>
60+
61+
<style>
62+
:global(.contents-list) {
63+
counter-reset: contents-section;
64+
}
65+
66+
:global(.contents-primary-item .s-navigation--item-text) {
67+
flex-direction: row;
68+
}
69+
70+
:global(.contents-primary-item .s-navigation--item-text::before) {
71+
color: var(--theme-primary);
72+
content: counter(contents-section, decimal-leading-zero);
73+
counter-increment: contents-section;
74+
flex-shrink: 0;
75+
font-weight: var(--fw-bold);
76+
height: auto;
77+
margin-right: var(--su8);
78+
visibility: visible;
79+
width: var(--su24);
80+
}
81+
</style>

0 commit comments

Comments
 (0)