fumadocs-ui 16.1.0 → 16.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/css/black.css +1 -1
- package/css/catppuccin.css +1 -1
- package/css/colors/index.css +51 -0
- package/css/dusk.css +1 -1
- package/css/layouts/docs.css +1 -0
- package/css/layouts/home.css +1 -0
- package/css/layouts/notebook.css +1 -0
- package/css/neutral.css +1 -40
- package/css/ocean.css +1 -1
- package/css/preset.css +21 -28
- package/css/purple.css +1 -1
- package/css/shadcn.css +0 -2
- package/css/shiki.css +1 -3
- package/css/solar.css +49 -18
- package/css/vitepress.css +1 -1
- package/dist/components/image-zoom.d.ts +3 -3
- package/dist/components/image-zoom.d.ts.map +1 -1
- package/dist/components/image-zoom.js +1 -1
- package/dist/components/sidebar/base.d.ts +62 -0
- package/dist/components/sidebar/base.d.ts.map +1 -0
- package/dist/components/sidebar/base.js +174 -0
- package/dist/components/sidebar/link-item.d.ts +11 -0
- package/dist/components/sidebar/link-item.d.ts.map +1 -0
- package/dist/components/sidebar/link-item.js +13 -0
- package/dist/components/sidebar/page-tree.d.ts +19 -0
- package/dist/components/sidebar/page-tree.d.ts.map +1 -0
- package/dist/components/sidebar/page-tree.js +34 -0
- package/dist/components/{layout/root-toggle.d.ts → sidebar/tabs.d.ts} +4 -4
- package/dist/components/sidebar/tabs.d.ts.map +1 -0
- package/dist/components/{layout/root-toggle.js → sidebar/tabs.js} +3 -3
- package/dist/components/tabs.unstyled.d.ts +0 -3
- package/dist/components/tabs.unstyled.d.ts.map +1 -1
- package/dist/components/tabs.unstyled.js +23 -32
- package/dist/components/toc/clerk.d.ts +3 -0
- package/dist/components/toc/clerk.d.ts.map +1 -0
- package/dist/components/{layout/toc-clerk.js → toc/clerk.js} +5 -6
- package/dist/components/toc/default.d.ts +3 -0
- package/dist/components/toc/default.d.ts.map +1 -0
- package/dist/components/{layout/toc.js → toc/default.js} +5 -16
- package/dist/components/{layout/toc.d.ts → toc/index.d.ts} +7 -3
- package/dist/components/toc/index.d.ts.map +1 -0
- package/dist/components/{layout/toc-thumb.js → toc/index.js} +17 -3
- package/dist/contexts/search.js +1 -1
- package/dist/contexts/tree.d.ts +1 -1
- package/dist/contexts/tree.d.ts.map +1 -1
- package/dist/contexts/tree.js +3 -3
- package/dist/layouts/docs/client.d.ts +12 -5
- package/dist/layouts/docs/client.d.ts.map +1 -1
- package/dist/layouts/docs/client.js +31 -22
- package/dist/layouts/docs/index.d.ts +9 -9
- package/dist/layouts/docs/index.d.ts.map +1 -1
- package/dist/layouts/docs/index.js +37 -48
- package/dist/layouts/docs/{page-client.d.ts → page/client.d.ts} +3 -4
- package/dist/layouts/docs/page/client.d.ts.map +1 -0
- package/dist/layouts/docs/{page-client.js → page/client.js} +39 -76
- package/dist/layouts/docs/page/index.d.ts +58 -0
- package/dist/layouts/docs/page/index.d.ts.map +1 -0
- package/dist/layouts/docs/page/index.js +51 -0
- package/dist/layouts/docs/sidebar.d.ts +17 -0
- package/dist/layouts/docs/sidebar.d.ts.map +1 -0
- package/dist/layouts/docs/sidebar.js +82 -0
- package/dist/layouts/home/client.d.ts +2 -20
- package/dist/layouts/home/client.d.ts.map +1 -1
- package/dist/layouts/home/client.js +54 -17
- package/dist/layouts/home/index.d.ts +2 -3
- package/dist/layouts/home/index.d.ts.map +1 -1
- package/dist/layouts/home/index.js +3 -35
- package/dist/layouts/notebook/client.d.ts +20 -8
- package/dist/layouts/notebook/client.d.ts.map +1 -1
- package/dist/layouts/notebook/client.js +59 -33
- package/dist/layouts/notebook/index.d.ts +9 -9
- package/dist/layouts/notebook/index.d.ts.map +1 -1
- package/dist/layouts/notebook/index.js +47 -70
- package/dist/layouts/notebook/page/client.d.ts +24 -0
- package/dist/layouts/notebook/page/client.d.ts.map +1 -0
- package/dist/layouts/notebook/page/client.js +119 -0
- package/dist/layouts/notebook/page/index.d.ts +58 -0
- package/dist/layouts/notebook/page/index.d.ts.map +1 -0
- package/dist/layouts/notebook/page/index.js +51 -0
- package/dist/layouts/notebook/sidebar.d.ts +17 -0
- package/dist/layouts/notebook/sidebar.d.ts.map +1 -0
- package/dist/layouts/notebook/sidebar.js +87 -0
- package/dist/layouts/shared/index.d.ts +12 -78
- package/dist/layouts/shared/index.d.ts.map +1 -1
- package/dist/layouts/shared/index.js +11 -15
- package/dist/layouts/shared/language-toggle.d.ts +5 -0
- package/dist/layouts/shared/language-toggle.d.ts.map +1 -0
- package/dist/layouts/shared/link-item.d.ts +78 -0
- package/dist/layouts/shared/link-item.d.ts.map +1 -0
- package/dist/layouts/shared/{client.js → link-item.js} +1 -1
- package/dist/layouts/shared/search-toggle.d.ts.map +1 -0
- package/dist/{components/layout → layouts/shared}/theme-toggle.d.ts +2 -2
- package/dist/layouts/shared/theme-toggle.d.ts.map +1 -0
- package/dist/{components/layout → layouts/shared}/theme-toggle.js +3 -3
- package/dist/page.d.ts +6 -59
- package/dist/page.d.ts.map +1 -1
- package/dist/page.js +16 -50
- package/dist/provider/base.d.ts.map +1 -1
- package/dist/provider/base.js +2 -3
- package/dist/style.css +187 -160
- package/dist/utils/use-footer-items.d.ts +6 -0
- package/dist/utils/use-footer-items.d.ts.map +1 -0
- package/dist/utils/use-footer-items.js +27 -0
- package/dist/utils/use-is-scroll-top.d.ts +4 -0
- package/dist/utils/use-is-scroll-top.d.ts.map +1 -0
- package/dist/utils/use-is-scroll-top.js +17 -0
- package/package.json +11 -24
- package/css/default.css +0 -34
- package/dist/components/layout/language-toggle.d.ts +0 -5
- package/dist/components/layout/language-toggle.d.ts.map +0 -1
- package/dist/components/layout/root-toggle.d.ts.map +0 -1
- package/dist/components/layout/search-toggle.d.ts.map +0 -1
- package/dist/components/layout/sidebar.d.ts +0 -66
- package/dist/components/layout/sidebar.d.ts.map +0 -1
- package/dist/components/layout/sidebar.js +0 -200
- package/dist/components/layout/theme-toggle.d.ts.map +0 -1
- package/dist/components/layout/toc-clerk.d.ts +0 -3
- package/dist/components/layout/toc-clerk.d.ts.map +0 -1
- package/dist/components/layout/toc-thumb.d.ts +0 -7
- package/dist/components/layout/toc-thumb.d.ts.map +0 -1
- package/dist/components/layout/toc.d.ts.map +0 -1
- package/dist/contexts/layout.d.ts +0 -28
- package/dist/contexts/layout.d.ts.map +0 -1
- package/dist/contexts/layout.js +0 -38
- package/dist/contexts/sidebar.d.ts +0 -18
- package/dist/contexts/sidebar.d.ts.map +0 -1
- package/dist/contexts/sidebar.js +0 -31
- package/dist/layouts/docs/page-client.d.ts.map +0 -1
- package/dist/layouts/docs/page.d.ts +0 -17
- package/dist/layouts/docs/page.d.ts.map +0 -1
- package/dist/layouts/docs/page.js +0 -26
- package/dist/layouts/shared/client.d.ts +0 -6
- package/dist/layouts/shared/client.d.ts.map +0 -1
- package/dist/provider/index.d.ts +0 -11
- package/dist/provider/index.d.ts.map +0 -1
- package/dist/provider/index.js +0 -12
- /package/dist/{components/layout → layouts/shared}/language-toggle.js +0 -0
- /package/dist/{components/layout → layouts/shared}/search-toggle.d.ts +0 -0
- /package/dist/{components/layout → layouts/shared}/search-toggle.js +0 -0
package/css/black.css
CHANGED
package/css/catppuccin.css
CHANGED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
@theme {
|
|
2
|
+
--color-fd-background: hsl(0, 0%, 96%);
|
|
3
|
+
--color-fd-foreground: hsl(0, 0%, 3.9%);
|
|
4
|
+
--color-fd-muted: hsl(0, 0%, 96.1%);
|
|
5
|
+
--color-fd-muted-foreground: hsl(0, 0%, 45.1%);
|
|
6
|
+
--color-fd-popover: hsl(0, 0%, 98%);
|
|
7
|
+
--color-fd-popover-foreground: hsl(0, 0%, 15.1%);
|
|
8
|
+
--color-fd-card: hsl(0, 0%, 94.7%);
|
|
9
|
+
--color-fd-card-foreground: hsl(0, 0%, 3.9%);
|
|
10
|
+
--color-fd-border: hsla(0, 0%, 80%, 50%);
|
|
11
|
+
--color-fd-primary: hsl(0, 0%, 9%);
|
|
12
|
+
--color-fd-primary-foreground: hsl(0, 0%, 98%);
|
|
13
|
+
--color-fd-secondary: hsl(0, 0%, 93.1%);
|
|
14
|
+
--color-fd-secondary-foreground: hsl(0, 0%, 9%);
|
|
15
|
+
--color-fd-accent: hsla(0, 0%, 82%, 50%);
|
|
16
|
+
--color-fd-accent-foreground: hsl(0, 0%, 9%);
|
|
17
|
+
--color-fd-ring: hsl(0, 0%, 63.9%);
|
|
18
|
+
--color-fd-overlay: hsla(0, 0%, 0%, 0.2);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.dark {
|
|
22
|
+
--color-fd-background: hsl(0, 0%, 7.04%);
|
|
23
|
+
--color-fd-foreground: hsl(0, 0%, 92%);
|
|
24
|
+
--color-fd-muted: hsl(0, 0%, 12.9%);
|
|
25
|
+
--color-fd-muted-foreground: hsla(0, 0%, 70%, 0.8);
|
|
26
|
+
--color-fd-popover: hsl(0, 0%, 11.6%);
|
|
27
|
+
--color-fd-popover-foreground: hsl(0, 0%, 86.9%);
|
|
28
|
+
--color-fd-card: hsl(0, 0%, 9.8%);
|
|
29
|
+
--color-fd-card-foreground: hsl(0, 0%, 98%);
|
|
30
|
+
--color-fd-border: hsla(0, 0%, 40%, 20%);
|
|
31
|
+
--color-fd-primary: hsl(0, 0%, 98%);
|
|
32
|
+
--color-fd-primary-foreground: hsl(0, 0%, 9%);
|
|
33
|
+
--color-fd-secondary: hsl(0, 0%, 12.9%);
|
|
34
|
+
--color-fd-secondary-foreground: hsl(0, 0%, 92%);
|
|
35
|
+
--color-fd-accent: hsla(0, 0%, 40.9%, 30%);
|
|
36
|
+
--color-fd-accent-foreground: hsl(0, 0%, 90%);
|
|
37
|
+
--color-fd-ring: hsl(0, 0%, 54.9%);
|
|
38
|
+
--color-fd-overlay: hsla(0, 0%, 0%, 0.2);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@theme static {
|
|
42
|
+
--color-fd-info: oklch(62.3% 0.214 259.815);
|
|
43
|
+
--color-fd-warning: oklch(76.9% 0.188 70.08);
|
|
44
|
+
--color-fd-error: oklch(63.7% 0.237 25.331);
|
|
45
|
+
--color-fd-success: oklch(72.3% 0.219 149.579);
|
|
46
|
+
--color-fd-idea: oklch(70.5% 0.209 60.849);
|
|
47
|
+
--color-fd-diff-remove: rgba(200, 10, 100, 0.12);
|
|
48
|
+
--color-fd-diff-remove-symbol: rgb(230, 10, 100);
|
|
49
|
+
--color-fd-diff-add: rgba(14, 180, 100, 0.1);
|
|
50
|
+
--color-fd-diff-add-symbol: rgb(10, 200, 100);
|
|
51
|
+
}
|
package/css/dusk.css
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@source '../../dist/layouts/docs/**/*.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@source '../../dist/layouts/home/**/*.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@source '../../dist/layouts/notebook/**/*.js';
|
package/css/neutral.css
CHANGED
|
@@ -1,43 +1,4 @@
|
|
|
1
|
-
@import './
|
|
2
|
-
|
|
3
|
-
@theme {
|
|
4
|
-
--color-fd-background: hsl(0, 0%, 96%);
|
|
5
|
-
--color-fd-foreground: hsl(0, 0%, 3.9%);
|
|
6
|
-
--color-fd-muted: hsl(0, 0%, 96.1%);
|
|
7
|
-
--color-fd-muted-foreground: hsl(0, 0%, 45.1%);
|
|
8
|
-
--color-fd-popover: hsl(0, 0%, 98%);
|
|
9
|
-
--color-fd-popover-foreground: hsl(0, 0%, 15.1%);
|
|
10
|
-
--color-fd-card: hsl(0, 0%, 94.7%);
|
|
11
|
-
--color-fd-card-foreground: hsl(0, 0%, 3.9%);
|
|
12
|
-
--color-fd-border: hsla(0, 0%, 80%, 50%);
|
|
13
|
-
--color-fd-primary: hsl(0, 0%, 9%);
|
|
14
|
-
--color-fd-primary-foreground: hsl(0, 0%, 98%);
|
|
15
|
-
--color-fd-secondary: hsl(0, 0%, 93.1%);
|
|
16
|
-
--color-fd-secondary-foreground: hsl(0, 0%, 9%);
|
|
17
|
-
--color-fd-accent: hsla(0, 0%, 82%, 50%);
|
|
18
|
-
--color-fd-accent-foreground: hsl(0, 0%, 9%);
|
|
19
|
-
--color-fd-ring: hsl(0, 0%, 63.9%);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
.dark {
|
|
23
|
-
--color-fd-background: hsl(0, 0%, 7.04%);
|
|
24
|
-
--color-fd-foreground: hsl(0, 0%, 92%);
|
|
25
|
-
--color-fd-muted: hsl(0, 0%, 12.9%);
|
|
26
|
-
--color-fd-muted-foreground: hsla(0, 0%, 70%, 0.8);
|
|
27
|
-
--color-fd-popover: hsl(0, 0%, 11.6%);
|
|
28
|
-
--color-fd-popover-foreground: hsl(0, 0%, 86.9%);
|
|
29
|
-
--color-fd-card: hsl(0, 0%, 9.8%);
|
|
30
|
-
--color-fd-card-foreground: hsl(0, 0%, 98%);
|
|
31
|
-
--color-fd-border: hsla(0, 0%, 40%, 20%);
|
|
32
|
-
--color-fd-primary: hsl(0, 0%, 98%);
|
|
33
|
-
--color-fd-primary-foreground: hsl(0, 0%, 9%);
|
|
34
|
-
--color-fd-secondary: hsl(0, 0%, 12.9%);
|
|
35
|
-
--color-fd-secondary-foreground: hsl(0, 0%, 92%);
|
|
36
|
-
--color-fd-accent: hsla(0, 0%, 40.9%, 30%);
|
|
37
|
-
--color-fd-accent-foreground: hsl(0, 0%, 90%);
|
|
38
|
-
--color-fd-ring: hsl(0, 0%, 54.9%);
|
|
39
|
-
--color-fd-overlay: hsla(0, 0%, 0%, 0.2);
|
|
40
|
-
}
|
|
1
|
+
@import './colors/index.css';
|
|
41
2
|
|
|
42
3
|
.dark #nd-sidebar {
|
|
43
4
|
--color-fd-muted: hsl(0, 0%, 16%);
|
package/css/ocean.css
CHANGED
package/css/preset.css
CHANGED
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
@import './shiki.css';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
/* TODO: remove them on next major */
|
|
4
|
+
@import './layouts/docs.css';
|
|
5
|
+
@import './layouts/home.css';
|
|
6
|
+
@import './layouts/notebook.css';
|
|
7
|
+
|
|
8
|
+
@source '../dist/*.js';
|
|
9
|
+
@source '../dist/{components,contexts,provider,utils}/**/*.js';
|
|
10
|
+
@source '../dist/layouts/shared/**/*.js';
|
|
11
|
+
|
|
4
12
|
@plugin '../dist/theme/typography/index.js';
|
|
5
13
|
|
|
14
|
+
:root {
|
|
15
|
+
--fd-sidebar-drawer-offset: 100%;
|
|
16
|
+
}
|
|
17
|
+
|
|
6
18
|
[dir='rtl'] {
|
|
7
|
-
--fd-sidebar-
|
|
19
|
+
--fd-sidebar-drawer-offset: -100%;
|
|
8
20
|
}
|
|
9
21
|
|
|
10
22
|
@theme {
|
|
11
|
-
--fd-sidebar-mobile-offset: 100%;
|
|
12
|
-
--spacing-fd-container: 1400px;
|
|
13
|
-
--fd-page-width: 1200px;
|
|
14
|
-
--fd-sidebar-width: 0px;
|
|
15
|
-
--fd-toc-width: 0px;
|
|
16
|
-
--fd-layout-width: 1600px;
|
|
17
|
-
--fd-banner-height: 0px;
|
|
18
|
-
--fd-nav-height: 0px;
|
|
19
|
-
--fd-tocnav-height: 0px;
|
|
20
23
|
--animate-fd-fade-in: fd-fade-in 300ms ease;
|
|
21
24
|
--animate-fd-fade-out: fd-fade-out 300ms ease;
|
|
22
25
|
|
|
@@ -48,13 +51,13 @@
|
|
|
48
51
|
|
|
49
52
|
@keyframes fd-sidebar-in {
|
|
50
53
|
from {
|
|
51
|
-
transform: translateX(var(--fd-sidebar-
|
|
54
|
+
transform: translateX(var(--fd-sidebar-drawer-offset));
|
|
52
55
|
}
|
|
53
56
|
}
|
|
54
57
|
|
|
55
58
|
@keyframes fd-sidebar-out {
|
|
56
59
|
to {
|
|
57
|
-
transform: translateX(var(--fd-sidebar-
|
|
60
|
+
transform: translateX(var(--fd-sidebar-drawer-offset));
|
|
58
61
|
}
|
|
59
62
|
}
|
|
60
63
|
|
|
@@ -230,11 +233,6 @@
|
|
|
230
233
|
background-color: var(--color-fd-background);
|
|
231
234
|
color: var(--color-fd-foreground);
|
|
232
235
|
}
|
|
233
|
-
|
|
234
|
-
:root,
|
|
235
|
-
#nd-docs-layout {
|
|
236
|
-
--fd-layout-offset: max(calc(50vw - var(--fd-layout-width) / 2), 0px);
|
|
237
|
-
}
|
|
238
236
|
}
|
|
239
237
|
|
|
240
238
|
@utility fd-scroll-container {
|
|
@@ -295,18 +293,13 @@
|
|
|
295
293
|
initial-value: 0px;
|
|
296
294
|
}
|
|
297
295
|
|
|
298
|
-
@utility container {
|
|
299
|
-
margin-inline: auto;
|
|
300
|
-
padding-inline: 1rem;
|
|
301
|
-
|
|
302
|
-
@apply 2xl:max-w-(--spacing-fd-container);
|
|
303
|
-
}
|
|
304
|
-
|
|
305
296
|
@variant dark (&:where(.dark, .dark *));
|
|
306
297
|
|
|
307
|
-
/*
|
|
308
|
-
@
|
|
309
|
-
:
|
|
298
|
+
/* define/override layout variables */
|
|
299
|
+
@variant layout {
|
|
300
|
+
#nd-docs-layout:has(&),
|
|
301
|
+
#nd-notebook-layout:has(&),
|
|
302
|
+
#nd-home-layout:has(&) {
|
|
310
303
|
@slot;
|
|
311
304
|
}
|
|
312
305
|
}
|
package/css/purple.css
CHANGED
package/css/shadcn.css
CHANGED
package/css/shiki.css
CHANGED
package/css/solar.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
@import './
|
|
1
|
+
@import './colors/index.css';
|
|
2
2
|
|
|
3
3
|
@theme {
|
|
4
4
|
--color-fd-primary: oklch(0.487 0.083 262.691);
|
|
@@ -7,8 +7,6 @@
|
|
|
7
7
|
|
|
8
8
|
:root {
|
|
9
9
|
letter-spacing: -0.25px;
|
|
10
|
-
--fd-layout-width: 1600px;
|
|
11
|
-
--fd-page-width: 1400px;
|
|
12
10
|
}
|
|
13
11
|
|
|
14
12
|
.dark {
|
|
@@ -18,31 +16,64 @@
|
|
|
18
16
|
}
|
|
19
17
|
|
|
20
18
|
@variant md {
|
|
21
|
-
#nd-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
#nd-docs-layout {
|
|
20
|
+
#nd-page {
|
|
21
|
+
@apply relative md:px-9 xl:px-12;
|
|
22
|
+
}
|
|
24
23
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
#nd-page:before {
|
|
25
|
+
content: '';
|
|
26
|
+
@apply absolute inset-0 bg-fd-article rounded-xl border shadow-xl m-4 mb-2 -z-1;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
[data-toc-popover-trigger],
|
|
30
|
+
[data-toc-popover-content] {
|
|
31
|
+
@apply px-4;
|
|
32
|
+
}
|
|
29
33
|
|
|
30
|
-
|
|
31
|
-
|
|
34
|
+
[data-toc-popover] {
|
|
35
|
+
top: calc(var(--fd-docs-row-1) + 2.5 * var(--spacing));
|
|
36
|
+
@apply mx-4 mt-2.5;
|
|
37
|
+
|
|
38
|
+
header {
|
|
39
|
+
transform-origin: top center;
|
|
40
|
+
@apply border rounded-xl shadow-lg transition-[margin] has-data-[active=true]:-mx-2 has-data-[active=true]:bg-fd-popover/80;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
32
43
|
}
|
|
33
44
|
|
|
34
|
-
|
|
35
|
-
|
|
45
|
+
#nd-notebook-layout {
|
|
46
|
+
#nd-page {
|
|
47
|
+
@apply relative md:px-9 xl:px-12;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
#nd-page:before {
|
|
51
|
+
content: '';
|
|
52
|
+
@apply absolute inset-0 bg-fd-article rounded-xl border shadow-xl m-4 mb-2 -z-1;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
[data-toc-popover-trigger],
|
|
56
|
+
[data-toc-popover-content] {
|
|
57
|
+
@apply px-4;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
[data-toc-popover] {
|
|
61
|
+
top: calc(var(--fd-docs-row-2) + 2.5 * var(--spacing));
|
|
62
|
+
@apply mx-4 mt-2.5;
|
|
63
|
+
|
|
64
|
+
header {
|
|
65
|
+
transform-origin: top center;
|
|
66
|
+
@apply border rounded-xl shadow-lg transition-[margin] has-data-[active=true]:-mx-2 has-data-[active=true]:bg-fd-popover/80;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
36
69
|
}
|
|
37
70
|
}
|
|
38
71
|
|
|
39
72
|
#nd-sidebar {
|
|
40
|
-
@apply bg-fd-
|
|
73
|
+
@apply bg-fd-card;
|
|
41
74
|
}
|
|
42
75
|
|
|
43
76
|
#nd-sidebar[data-collapsed='false'] {
|
|
44
77
|
border: none;
|
|
45
|
-
|
|
46
|
-
--color-fd-secondary: inherit;
|
|
47
|
-
--color-fd-muted-foreground: inherit;
|
|
78
|
+
@apply bg-fd-background;
|
|
48
79
|
}
|
package/css/vitepress.css
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { type ImageProps } from 'fumadocs-core/framework';
|
|
2
|
-
import {
|
|
3
|
-
import './image-zoom.css';
|
|
2
|
+
import type { ComponentProps } from 'react';
|
|
4
3
|
import { type UncontrolledProps } from 'react-medium-image-zoom';
|
|
4
|
+
import './image-zoom.css';
|
|
5
5
|
export type ImageZoomProps = ImageProps & {
|
|
6
6
|
/**
|
|
7
7
|
* Image props when zoom in
|
|
8
8
|
*/
|
|
9
|
-
zoomInProps?:
|
|
9
|
+
zoomInProps?: ComponentProps<'img'>;
|
|
10
10
|
/**
|
|
11
11
|
* Props for `react-medium-image-zoom`
|
|
12
12
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-zoom.d.ts","sourceRoot":"","sources":["../../src/components/image-zoom.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"image-zoom.d.ts","sourceRoot":"","sources":["../../src/components/image-zoom.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,kBAAkB,CAAC;AAE1B,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG;IACxC;;OAEG;IACH,WAAW,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;IAEpC;;OAEG;IACH,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B,CAAC;AAeF,wBAAgB,SAAS,CAAC,EACxB,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,cAAc,2CAoBhB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { Image } from 'fumadocs-core/framework';
|
|
4
|
-
import './image-zoom.css';
|
|
5
4
|
import Zoom from 'react-medium-image-zoom';
|
|
5
|
+
import './image-zoom.css';
|
|
6
6
|
function getImageSrc(src) {
|
|
7
7
|
if (typeof src === 'string')
|
|
8
8
|
return src;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { type ComponentProps, type ReactNode, type RefObject } from 'react';
|
|
2
|
+
import { type LinkProps } from 'fumadocs-core/link';
|
|
3
|
+
import { type ScrollAreaProps } from '@radix-ui/react-scroll-area';
|
|
4
|
+
import type { CollapsibleContentProps, CollapsibleTriggerProps } from '@radix-ui/react-collapsible';
|
|
5
|
+
interface SidebarContext {
|
|
6
|
+
open: boolean;
|
|
7
|
+
setOpen: React.Dispatch<React.SetStateAction<boolean>>;
|
|
8
|
+
collapsed: boolean;
|
|
9
|
+
setCollapsed: React.Dispatch<React.SetStateAction<boolean>>;
|
|
10
|
+
/**
|
|
11
|
+
* When set to false, don't close the sidebar when navigate to another page
|
|
12
|
+
*/
|
|
13
|
+
closeOnRedirect: RefObject<boolean>;
|
|
14
|
+
defaultOpenLevel: number;
|
|
15
|
+
prefetch: boolean;
|
|
16
|
+
mode: Mode;
|
|
17
|
+
}
|
|
18
|
+
export interface SidebarProviderProps {
|
|
19
|
+
/**
|
|
20
|
+
* Open folders by default if their level is lower or equal to a specific level
|
|
21
|
+
* (Starting from 1)
|
|
22
|
+
*
|
|
23
|
+
* @defaultValue 0
|
|
24
|
+
*/
|
|
25
|
+
defaultOpenLevel?: number;
|
|
26
|
+
/**
|
|
27
|
+
* Prefetch links
|
|
28
|
+
*
|
|
29
|
+
* @defaultValue true
|
|
30
|
+
*/
|
|
31
|
+
prefetch?: boolean;
|
|
32
|
+
children?: ReactNode;
|
|
33
|
+
}
|
|
34
|
+
type Mode = 'drawer' | 'full';
|
|
35
|
+
declare const SidebarContext: import("react").Context<SidebarContext | null>;
|
|
36
|
+
export declare function SidebarProvider({ defaultOpenLevel, prefetch, children, }: SidebarProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
37
|
+
export declare function useSidebar(): SidebarContext;
|
|
38
|
+
export declare function useFolderDepth(): number;
|
|
39
|
+
export declare function SidebarContent({ children, aside, }: {
|
|
40
|
+
aside?: (state: {
|
|
41
|
+
collapsed: boolean;
|
|
42
|
+
hovered: boolean;
|
|
43
|
+
}) => ComponentProps<'aside'>;
|
|
44
|
+
children: ReactNode;
|
|
45
|
+
}): import("react/jsx-runtime").JSX.Element | undefined;
|
|
46
|
+
export declare function SidebarDrawerOverlay(props: ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element | undefined;
|
|
47
|
+
export declare function SidebarDrawerContent({ className, children, ...props }: ComponentProps<'aside'>): import("react/jsx-runtime").JSX.Element | undefined;
|
|
48
|
+
export declare function SidebarViewport(props: ScrollAreaProps): import("react/jsx-runtime").JSX.Element;
|
|
49
|
+
export declare function SidebarSeparator(props: ComponentProps<'p'>): import("react/jsx-runtime").JSX.Element;
|
|
50
|
+
export declare function SidebarItem({ icon, children, ...props }: LinkProps & {
|
|
51
|
+
icon?: ReactNode;
|
|
52
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
53
|
+
export declare function SidebarFolder({ defaultOpen: defaultOpenOption, ...props }: ComponentProps<'div'> & {
|
|
54
|
+
defaultOpen?: boolean | ((currentDefault: boolean) => boolean);
|
|
55
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
56
|
+
export declare function SidebarFolderTrigger(props: CollapsibleTriggerProps): import("react/jsx-runtime").JSX.Element;
|
|
57
|
+
export declare function SidebarFolderLink(props: LinkProps): import("react/jsx-runtime").JSX.Element;
|
|
58
|
+
export declare function SidebarFolderContent(props: CollapsibleContentProps): import("react/jsx-runtime").JSX.Element;
|
|
59
|
+
export declare function SidebarTrigger({ children, ...props }: ComponentProps<'button'>): import("react/jsx-runtime").JSX.Element;
|
|
60
|
+
export declare function SidebarCollapseTrigger(props: ComponentProps<'button'>): import("react/jsx-runtime").JSX.Element;
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/base.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { ChevronDown, ExternalLink } from '../../icons.js';
|
|
4
|
+
import { createContext, use, useEffect, useMemo, useRef, useState, } from 'react';
|
|
5
|
+
import Link from 'fumadocs-core/link';
|
|
6
|
+
import { useOnChange } from 'fumadocs-core/utils/use-on-change';
|
|
7
|
+
import { cn } from '../../utils/cn.js';
|
|
8
|
+
import { ScrollArea, ScrollViewport } from '../../components/ui/scroll-area.js';
|
|
9
|
+
import { isActive } from '../../utils/is-active.js';
|
|
10
|
+
import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from '../../components/ui/collapsible.js';
|
|
11
|
+
import { useMediaQuery } from 'fumadocs-core/utils/use-media-query';
|
|
12
|
+
import { Presence } from '@radix-ui/react-presence';
|
|
13
|
+
import scrollIntoView from 'scroll-into-view-if-needed';
|
|
14
|
+
import { usePathname } from 'fumadocs-core/framework';
|
|
15
|
+
const SidebarContext = createContext(null);
|
|
16
|
+
const FolderContext = createContext(null);
|
|
17
|
+
export function SidebarProvider({ defaultOpenLevel = 0, prefetch = true, children, }) {
|
|
18
|
+
const closeOnRedirect = useRef(true);
|
|
19
|
+
const [open, setOpen] = useState(false);
|
|
20
|
+
const [collapsed, setCollapsed] = useState(false);
|
|
21
|
+
const pathname = usePathname();
|
|
22
|
+
const mode = useMediaQuery('(width < 768px)') ? 'drawer' : 'full';
|
|
23
|
+
useOnChange(pathname, () => {
|
|
24
|
+
if (closeOnRedirect.current) {
|
|
25
|
+
setOpen(false);
|
|
26
|
+
}
|
|
27
|
+
closeOnRedirect.current = true;
|
|
28
|
+
});
|
|
29
|
+
return (_jsx(SidebarContext, { value: useMemo(() => ({
|
|
30
|
+
open,
|
|
31
|
+
setOpen,
|
|
32
|
+
collapsed,
|
|
33
|
+
setCollapsed,
|
|
34
|
+
closeOnRedirect,
|
|
35
|
+
defaultOpenLevel,
|
|
36
|
+
prefetch,
|
|
37
|
+
mode,
|
|
38
|
+
}), [open, collapsed, defaultOpenLevel, prefetch, mode]), children: children }));
|
|
39
|
+
}
|
|
40
|
+
export function useSidebar() {
|
|
41
|
+
const ctx = use(SidebarContext);
|
|
42
|
+
if (!ctx)
|
|
43
|
+
throw new Error('Missing SidebarContext, make sure you have wrapped the component in <DocsLayout /> and the context is available.');
|
|
44
|
+
return ctx;
|
|
45
|
+
}
|
|
46
|
+
export function useFolderDepth() {
|
|
47
|
+
return use(FolderContext)?.depth ?? 0;
|
|
48
|
+
}
|
|
49
|
+
export function SidebarContent({ children, aside, }) {
|
|
50
|
+
const { collapsed, mode } = useSidebar();
|
|
51
|
+
const [hover, setHover] = useState(false);
|
|
52
|
+
const timerRef = useRef(0);
|
|
53
|
+
const ignoreHoverUntil = useRef(0);
|
|
54
|
+
useOnChange(collapsed, () => {
|
|
55
|
+
if (collapsed) {
|
|
56
|
+
setHover(true);
|
|
57
|
+
ignoreHoverUntil.current = Date.now() + 200;
|
|
58
|
+
setTimeout(() => {
|
|
59
|
+
setHover(false);
|
|
60
|
+
}, 200);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
if (mode !== 'full')
|
|
64
|
+
return;
|
|
65
|
+
return (_jsx("aside", { id: "nd-sidebar", "data-collapsed": collapsed, "data-hovered": collapsed && hover, ...aside?.({ collapsed, hovered: hover }), onPointerEnter: (e) => {
|
|
66
|
+
if (!collapsed ||
|
|
67
|
+
e.pointerType === 'touch' ||
|
|
68
|
+
ignoreHoverUntil.current > Date.now())
|
|
69
|
+
return;
|
|
70
|
+
window.clearTimeout(timerRef.current);
|
|
71
|
+
setHover(true);
|
|
72
|
+
}, onPointerLeave: (e) => {
|
|
73
|
+
if (!collapsed ||
|
|
74
|
+
e.pointerType === 'touch' ||
|
|
75
|
+
ignoreHoverUntil.current > Date.now())
|
|
76
|
+
return;
|
|
77
|
+
window.clearTimeout(timerRef.current);
|
|
78
|
+
timerRef.current = window.setTimeout(() => {
|
|
79
|
+
setHover(false);
|
|
80
|
+
ignoreHoverUntil.current = Date.now() + 200;
|
|
81
|
+
}, Math.min(e.clientX, document.body.clientWidth - e.clientX) > 100
|
|
82
|
+
? 0
|
|
83
|
+
: 500);
|
|
84
|
+
}, children: children }));
|
|
85
|
+
}
|
|
86
|
+
export function SidebarDrawerOverlay(props) {
|
|
87
|
+
const { open, setOpen, mode } = useSidebar();
|
|
88
|
+
if (mode !== 'drawer')
|
|
89
|
+
return;
|
|
90
|
+
return (_jsx(Presence, { present: open, children: _jsx("div", { "data-state": open ? 'open' : 'closed', onClick: () => setOpen(false), ...props }) }));
|
|
91
|
+
}
|
|
92
|
+
export function SidebarDrawerContent({ className, children, ...props }) {
|
|
93
|
+
const { open, mode } = useSidebar();
|
|
94
|
+
const state = open ? 'open' : 'closed';
|
|
95
|
+
if (mode !== 'drawer')
|
|
96
|
+
return;
|
|
97
|
+
return (_jsx(Presence, { present: open, children: ({ present }) => (_jsx("aside", { id: "nd-sidebar-mobile", "data-state": state, className: cn(!present && 'invisible', className), ...props, children: children })) }));
|
|
98
|
+
}
|
|
99
|
+
export function SidebarViewport(props) {
|
|
100
|
+
return (_jsx(ScrollArea, { ...props, className: cn('min-h-0 flex-1', props.className), children: _jsx(ScrollViewport, { className: "p-4 overscroll-contain", style: {
|
|
101
|
+
maskImage: 'linear-gradient(to bottom, transparent, white 12px, white calc(100% - 12px), transparent)',
|
|
102
|
+
}, children: props.children }) }));
|
|
103
|
+
}
|
|
104
|
+
export function SidebarSeparator(props) {
|
|
105
|
+
const depth = useFolderDepth();
|
|
106
|
+
return (_jsx("p", { ...props, className: cn('inline-flex items-center gap-2 mb-1.5 px-2 mt-6 empty:mb-0', depth === 0 && 'first:mt-0', props.className), children: props.children }));
|
|
107
|
+
}
|
|
108
|
+
export function SidebarItem({ icon, children, ...props }) {
|
|
109
|
+
const pathname = usePathname();
|
|
110
|
+
const ref = useRef(null);
|
|
111
|
+
const { prefetch } = useSidebar();
|
|
112
|
+
const active = props.href !== undefined && isActive(props.href, pathname, false);
|
|
113
|
+
useAutoScroll(active, ref);
|
|
114
|
+
return (_jsxs(Link, { ref: ref, "data-active": active, prefetch: prefetch, ...props, children: [icon ?? (props.external ? _jsx(ExternalLink, {}) : null), children] }));
|
|
115
|
+
}
|
|
116
|
+
export function SidebarFolder({ defaultOpen: defaultOpenOption = false, ...props }) {
|
|
117
|
+
const { defaultOpenLevel } = useSidebar();
|
|
118
|
+
const depth = useFolderDepth() + 1;
|
|
119
|
+
const defaultOpen = typeof defaultOpenOption === 'function'
|
|
120
|
+
? defaultOpenOption(defaultOpenLevel >= depth)
|
|
121
|
+
: defaultOpenLevel >= depth || defaultOpenOption;
|
|
122
|
+
const [open, setOpen] = useState(defaultOpen);
|
|
123
|
+
useOnChange(defaultOpen, (v) => {
|
|
124
|
+
if (v)
|
|
125
|
+
setOpen(v);
|
|
126
|
+
});
|
|
127
|
+
return (_jsx(Collapsible, { open: open, onOpenChange: setOpen, ...props, children: _jsx(FolderContext, { value: useMemo(() => ({ open, setOpen, depth }), [depth, open]), children: props.children }) }));
|
|
128
|
+
}
|
|
129
|
+
export function SidebarFolderTrigger(props) {
|
|
130
|
+
const { open } = use(FolderContext);
|
|
131
|
+
return (_jsxs(CollapsibleTrigger, { ...props, children: [props.children, _jsx(ChevronDown, { "data-icon": true, className: cn('ms-auto transition-transform', !open && '-rotate-90') })] }));
|
|
132
|
+
}
|
|
133
|
+
export function SidebarFolderLink(props) {
|
|
134
|
+
const ref = useRef(null);
|
|
135
|
+
const { open, setOpen } = use(FolderContext);
|
|
136
|
+
const { prefetch } = useSidebar();
|
|
137
|
+
const pathname = usePathname();
|
|
138
|
+
const active = props.href !== undefined && isActive(props.href, pathname, false);
|
|
139
|
+
useAutoScroll(active, ref);
|
|
140
|
+
return (_jsxs(Link, { ref: ref, "data-active": active, onClick: (e) => {
|
|
141
|
+
if (e.target instanceof Element &&
|
|
142
|
+
e.target.matches('[data-icon], [data-icon] *')) {
|
|
143
|
+
setOpen(!open);
|
|
144
|
+
e.preventDefault();
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
setOpen(active ? !open : true);
|
|
148
|
+
}
|
|
149
|
+
}, prefetch: prefetch, ...props, children: [props.children, _jsx(ChevronDown, { "data-icon": true, className: cn('ms-auto transition-transform', !open && '-rotate-90') })] }));
|
|
150
|
+
}
|
|
151
|
+
export function SidebarFolderContent(props) {
|
|
152
|
+
return _jsx(CollapsibleContent, { ...props, children: props.children });
|
|
153
|
+
}
|
|
154
|
+
export function SidebarTrigger({ children, ...props }) {
|
|
155
|
+
const { setOpen } = useSidebar();
|
|
156
|
+
return (_jsx("button", { "aria-label": "Open Sidebar", onClick: () => setOpen((prev) => !prev), ...props, children: children }));
|
|
157
|
+
}
|
|
158
|
+
export function SidebarCollapseTrigger(props) {
|
|
159
|
+
const { collapsed, setCollapsed } = useSidebar();
|
|
160
|
+
return (_jsx("button", { type: "button", "aria-label": "Collapse Sidebar", "data-collapsed": collapsed, onClick: () => {
|
|
161
|
+
setCollapsed((prev) => !prev);
|
|
162
|
+
}, ...props, children: props.children }));
|
|
163
|
+
}
|
|
164
|
+
function useAutoScroll(active, ref) {
|
|
165
|
+
const { mode } = useSidebar();
|
|
166
|
+
useEffect(() => {
|
|
167
|
+
if (active && ref.current) {
|
|
168
|
+
scrollIntoView(ref.current, {
|
|
169
|
+
boundary: document.getElementById(mode === 'drawer' ? 'nd-sidebar-mobile' : 'nd-sidebar'),
|
|
170
|
+
scrollMode: 'if-needed',
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}, [active, mode, ref]);
|
|
174
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { HTMLAttributes } from 'react';
|
|
2
|
+
import type * as Base from './base.js';
|
|
3
|
+
import type { LinkItemType } from '../../layouts/shared/link-item.js';
|
|
4
|
+
type InternalComponents = Pick<typeof Base, 'SidebarFolder' | 'SidebarFolderLink' | 'SidebarFolderContent' | 'SidebarFolderTrigger' | 'SidebarItem'>;
|
|
5
|
+
export declare function createLinkItemRenderer({ SidebarFolder, SidebarFolderContent, SidebarFolderLink, SidebarFolderTrigger, SidebarItem, }: InternalComponents): ({ item, ...props }: HTMLAttributes<HTMLElement> & {
|
|
6
|
+
item: Exclude<LinkItemType, {
|
|
7
|
+
type: "icon";
|
|
8
|
+
}>;
|
|
9
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=link-item.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-item.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/link-item.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,KAAK,KAAK,IAAI,MAAM,QAAQ,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,KAAK,kBAAkB,GAAG,IAAI,CAC5B,OAAO,IAAI,EACT,eAAe,GACf,mBAAmB,GACnB,sBAAsB,GACtB,sBAAsB,GACtB,aAAa,CAChB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EACrC,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,GACZ,EAAE,kBAAkB,IAIa,oBAG7B,cAAc,CAAC,WAAW,CAAC,GAAG;IAC/B,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/C,6CAoCF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function createLinkItemRenderer({ SidebarFolder, SidebarFolderContent, SidebarFolderLink, SidebarFolderTrigger, SidebarItem, }) {
|
|
3
|
+
/**
|
|
4
|
+
* Render sidebar items from page tree
|
|
5
|
+
*/
|
|
6
|
+
return function SidebarLinkItem({ item, ...props }) {
|
|
7
|
+
if (item.type === 'custom')
|
|
8
|
+
return _jsx("div", { ...props, children: item.children });
|
|
9
|
+
if (item.type === 'menu')
|
|
10
|
+
return (_jsxs(SidebarFolder, { ...props, children: [item.url ? (_jsxs(SidebarFolderLink, { href: item.url, external: item.external, children: [item.icon, item.text] })) : (_jsxs(SidebarFolderTrigger, { children: [item.icon, item.text] })), _jsx(SidebarFolderContent, { children: item.items.map((child, i) => (_jsx(SidebarLinkItem, { item: child }, i))) })] }));
|
|
11
|
+
return (_jsx(SidebarItem, { href: item.url, icon: item.icon, external: item.external, ...props, children: item.text }));
|
|
12
|
+
};
|
|
13
|
+
}
|