fumadocs-ui 16.4.0 → 16.4.2

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.
Files changed (266) hide show
  1. package/css/preset.css +2 -4
  2. package/dist/_virtual/rolldown_runtime.js +36 -0
  3. package/dist/components/accordion.d.ts +24 -7
  4. package/dist/components/accordion.d.ts.map +1 -1
  5. package/dist/components/accordion.js +65 -38
  6. package/dist/components/accordion.js.map +1 -0
  7. package/dist/components/banner.d.ts +33 -22
  8. package/dist/components/banner.d.ts.map +1 -1
  9. package/dist/components/banner.js +63 -47
  10. package/dist/components/banner.js.map +1 -0
  11. package/dist/components/callout.d.ts +41 -17
  12. package/dist/components/callout.d.ts.map +1 -1
  13. package/dist/components/callout.js +57 -28
  14. package/dist/components/callout.js.map +1 -0
  15. package/dist/components/card.d.ts +19 -9
  16. package/dist/components/card.d.ts.map +1 -1
  17. package/dist/components/card.js +39 -8
  18. package/dist/components/card.js.map +1 -0
  19. package/dist/components/codeblock.d.ts +61 -40
  20. package/dist/components/codeblock.d.ts.map +1 -1
  21. package/dist/components/codeblock.js +116 -58
  22. package/dist/components/codeblock.js.map +1 -0
  23. package/dist/components/dialog/search-algolia.d.ts +37 -23
  24. package/dist/components/dialog/search-algolia.d.ts.map +1 -1
  25. package/dist/components/dialog/search-algolia.js +64 -31
  26. package/dist/components/dialog/search-algolia.js.map +1 -0
  27. package/dist/components/dialog/search-default.d.ts +42 -27
  28. package/dist/components/dialog/search-default.d.ts.map +1 -1
  29. package/dist/components/dialog/search-default.js +64 -38
  30. package/dist/components/dialog/search-default.js.map +1 -0
  31. package/dist/components/dialog/search-orama.d.ts +41 -25
  32. package/dist/components/dialog/search-orama.d.ts.map +1 -1
  33. package/dist/components/dialog/search-orama.js +68 -35
  34. package/dist/components/dialog/search-orama.js.map +1 -0
  35. package/dist/components/dialog/search.d.ts +103 -64
  36. package/dist/components/dialog/search.d.ts.map +1 -1
  37. package/dist/components/dialog/search.js +264 -185
  38. package/dist/components/dialog/search.js.map +1 -0
  39. package/dist/components/dynamic-codeblock.d.ts +30 -19
  40. package/dist/components/dynamic-codeblock.d.ts.map +1 -1
  41. package/dist/components/dynamic-codeblock.js +60 -27
  42. package/dist/components/dynamic-codeblock.js.map +1 -0
  43. package/dist/components/files.d.ts +32 -16
  44. package/dist/components/files.d.ts.map +1 -1
  45. package/dist/components/files.js +40 -14
  46. package/dist/components/files.js.map +1 -0
  47. package/dist/components/github-info.d.ts +18 -7
  48. package/dist/components/github-info.d.ts.map +1 -1
  49. package/dist/components/github-info.js +63 -48
  50. package/dist/components/github-info.js.map +1 -0
  51. package/dist/components/heading.d.ts +11 -4
  52. package/dist/components/heading.d.ts.map +1 -1
  53. package/dist/components/heading.js +28 -8
  54. package/dist/components/heading.js.map +1 -0
  55. package/dist/components/image-zoom-CtfZieBH.css +80 -0
  56. package/dist/components/image-zoom-CtfZieBH.css.map +1 -0
  57. package/dist/components/image-zoom.d.ts +23 -14
  58. package/dist/components/image-zoom.d.ts.map +1 -1
  59. package/dist/components/image-zoom.js +32 -19
  60. package/dist/components/image-zoom.js.map +1 -0
  61. package/dist/components/image-zoom2.js +1 -0
  62. package/dist/components/inline-toc.d.ts +14 -6
  63. package/dist/components/inline-toc.d.ts.map +1 -1
  64. package/dist/components/inline-toc.js +28 -8
  65. package/dist/components/inline-toc.js.map +1 -0
  66. package/dist/components/sidebar/base.d.ts +102 -65
  67. package/dist/components/sidebar/base.d.ts.map +1 -1
  68. package/dist/components/sidebar/base.js +256 -180
  69. package/dist/components/sidebar/base.js.map +1 -0
  70. package/dist/components/sidebar/link-item.d.ts +23 -10
  71. package/dist/components/sidebar/link-item.d.ts.map +1 -1
  72. package/dist/components/sidebar/link-item.js +32 -12
  73. package/dist/components/sidebar/link-item.js.map +1 -0
  74. package/dist/components/sidebar/page-tree.d.ts +28 -17
  75. package/dist/components/sidebar/page-tree.d.ts.map +1 -1
  76. package/dist/components/sidebar/page-tree.js +57 -33
  77. package/dist/components/sidebar/page-tree.js.map +1 -0
  78. package/dist/components/sidebar/tabs/dropdown.d.ts +18 -9
  79. package/dist/components/sidebar/tabs/dropdown.d.ts.map +1 -1
  80. package/dist/components/sidebar/tabs/dropdown.js +75 -31
  81. package/dist/components/sidebar/tabs/dropdown.js.map +1 -0
  82. package/dist/components/sidebar/tabs/index.d.ts +24 -18
  83. package/dist/components/sidebar/tabs/index.d.ts.map +1 -1
  84. package/dist/components/sidebar/tabs/index.js +45 -45
  85. package/dist/components/sidebar/tabs/index.js.map +1 -0
  86. package/dist/components/steps.d.ts +16 -7
  87. package/dist/components/steps.d.ts.map +1 -1
  88. package/dist/components/steps.js +17 -5
  89. package/dist/components/steps.js.map +1 -0
  90. package/dist/components/tabs.d.ts +49 -28
  91. package/dist/components/tabs.d.ts.map +1 -1
  92. package/dist/components/tabs.js +88 -51
  93. package/dist/components/tabs.js.map +1 -0
  94. package/dist/components/toc/clerk.d.ts +1 -2
  95. package/dist/components/toc/clerk.js +12 -1
  96. package/dist/components/toc/clerk.js.map +1 -0
  97. package/dist/components/toc/default.d.ts +1 -2
  98. package/dist/components/toc/default.js +12 -1
  99. package/dist/components/toc/default.js.map +1 -0
  100. package/dist/components/toc/index.d.ts +1 -2
  101. package/dist/components/toc/index.js +12 -1
  102. package/dist/components/toc/index.js.map +1 -0
  103. package/dist/components/type-table.d.ts +36 -29
  104. package/dist/components/type-table.d.ts.map +1 -1
  105. package/dist/components/type-table.js +106 -25
  106. package/dist/components/type-table.js.map +1 -0
  107. package/dist/components/ui/accordion.d.ts +31 -7
  108. package/dist/components/ui/accordion.d.ts.map +1 -1
  109. package/dist/components/ui/accordion.js +40 -14
  110. package/dist/components/ui/accordion.js.map +1 -0
  111. package/dist/components/ui/button.d.ts +12 -7
  112. package/dist/components/ui/button.d.ts.map +1 -1
  113. package/dist/components/ui/button.js +21 -18
  114. package/dist/components/ui/button.js.map +1 -0
  115. package/dist/components/ui/collapsible.d.ts +12 -8
  116. package/dist/components/ui/collapsible.d.ts.map +1 -1
  117. package/dist/components/ui/collapsible.js +21 -11
  118. package/dist/components/ui/collapsible.js.map +1 -0
  119. package/dist/components/ui/navigation-menu.d.ts +8 -5
  120. package/dist/components/ui/navigation-menu.d.ts.map +1 -1
  121. package/dist/components/ui/navigation-menu.js +36 -9
  122. package/dist/components/ui/navigation-menu.js.map +1 -0
  123. package/dist/components/ui/popover.d.ts +6 -3
  124. package/dist/components/ui/popover.d.ts.map +1 -1
  125. package/dist/components/ui/popover.js +19 -6
  126. package/dist/components/ui/popover.js.map +1 -0
  127. package/dist/components/ui/scroll-area.d.ts +7 -4
  128. package/dist/components/ui/scroll-area.d.ts.map +1 -1
  129. package/dist/components/ui/scroll-area.js +33 -7
  130. package/dist/components/ui/scroll-area.js.map +1 -0
  131. package/dist/components/ui/tabs.d.ts +37 -19
  132. package/dist/components/ui/tabs.d.ts.map +1 -1
  133. package/dist/components/ui/tabs.js +75 -73
  134. package/dist/components/ui/tabs.js.map +1 -0
  135. package/dist/contexts/i18n.d.ts +1 -2
  136. package/dist/contexts/i18n.js +12 -1
  137. package/dist/contexts/i18n.js.map +1 -0
  138. package/dist/contexts/search.d.ts +7 -1
  139. package/dist/contexts/search.d.ts.map +1 -1
  140. package/dist/contexts/search.js +12 -1
  141. package/dist/contexts/search.js.map +1 -0
  142. package/dist/contexts/tree.d.ts +1 -2
  143. package/dist/contexts/tree.js +12 -1
  144. package/dist/contexts/tree.js.map +1 -0
  145. package/dist/i18n.d.ts +1 -2
  146. package/dist/i18n.js +3 -1
  147. package/dist/layouts/docs/client.d.ts +30 -13
  148. package/dist/layouts/docs/client.d.ts.map +1 -1
  149. package/dist/layouts/docs/client.js +61 -34
  150. package/dist/layouts/docs/client.js.map +1 -0
  151. package/dist/layouts/docs/index.d.ts +57 -33
  152. package/dist/layouts/docs/index.d.ts.map +1 -1
  153. package/dist/layouts/docs/index.js +178 -68
  154. package/dist/layouts/docs/index.js.map +1 -0
  155. package/dist/layouts/docs/page/client.d.ts +43 -21
  156. package/dist/layouts/docs/page/client.d.ts.map +1 -1
  157. package/dist/layouts/docs/page/client.js +213 -105
  158. package/dist/layouts/docs/page/client.js.map +1 -0
  159. package/dist/layouts/docs/page/index.d.ts +82 -46
  160. package/dist/layouts/docs/page/index.d.ts.map +1 -1
  161. package/dist/layouts/docs/page/index.js +98 -45
  162. package/dist/layouts/docs/page/index.js.map +1 -0
  163. package/dist/layouts/docs/sidebar.d.ts +57 -16
  164. package/dist/layouts/docs/sidebar.d.ts.map +1 -1
  165. package/dist/layouts/docs/sidebar.js +135 -82
  166. package/dist/layouts/docs/sidebar.js.map +1 -0
  167. package/dist/layouts/home/client.d.ts +18 -5
  168. package/dist/layouts/home/client.d.ts.map +1 -1
  169. package/dist/layouts/home/client.js +252 -103
  170. package/dist/layouts/home/client.js.map +1 -0
  171. package/dist/layouts/home/index.d.ts +15 -10
  172. package/dist/layouts/home/index.d.ts.map +1 -1
  173. package/dist/layouts/home/index.js +24 -7
  174. package/dist/layouts/home/index.js.map +1 -0
  175. package/dist/layouts/home/navbar.d.ts +13 -6
  176. package/dist/layouts/home/navbar.d.ts.map +1 -1
  177. package/dist/layouts/home/navbar.js +34 -12
  178. package/dist/layouts/home/navbar.js.map +1 -0
  179. package/dist/layouts/notebook/client.d.ts +44 -20
  180. package/dist/layouts/notebook/client.d.ts.map +1 -1
  181. package/dist/layouts/notebook/client.js +148 -93
  182. package/dist/layouts/notebook/client.js.map +1 -0
  183. package/dist/layouts/notebook/index.d.ts +34 -30
  184. package/dist/layouts/notebook/index.d.ts.map +1 -1
  185. package/dist/layouts/notebook/index.js +216 -90
  186. package/dist/layouts/notebook/index.js.map +1 -0
  187. package/dist/layouts/notebook/page/client.d.ts +43 -21
  188. package/dist/layouts/notebook/page/client.d.ts.map +1 -1
  189. package/dist/layouts/notebook/page/client.js +213 -105
  190. package/dist/layouts/notebook/page/client.js.map +1 -0
  191. package/dist/layouts/notebook/page/index.d.ts +82 -46
  192. package/dist/layouts/notebook/page/index.d.ts.map +1 -1
  193. package/dist/layouts/notebook/page/index.js +98 -45
  194. package/dist/layouts/notebook/page/index.js.map +1 -0
  195. package/dist/layouts/notebook/sidebar.d.ts +62 -16
  196. package/dist/layouts/notebook/sidebar.d.ts.map +1 -1
  197. package/dist/layouts/notebook/sidebar.js +135 -79
  198. package/dist/layouts/notebook/sidebar.js.map +1 -0
  199. package/dist/layouts/shared/index.d.ts +62 -50
  200. package/dist/layouts/shared/index.d.ts.map +1 -1
  201. package/dist/layouts/shared/index.js +36 -20
  202. package/dist/layouts/shared/index.js.map +1 -0
  203. package/dist/layouts/shared/language-toggle.d.ts +9 -4
  204. package/dist/layouts/shared/language-toggle.d.ts.map +1 -1
  205. package/dist/layouts/shared/language-toggle.js +44 -21
  206. package/dist/layouts/shared/language-toggle.js.map +1 -0
  207. package/dist/layouts/shared/search-toggle.d.ts +20 -8
  208. package/dist/layouts/shared/search-toggle.d.ts.map +1 -1
  209. package/dist/layouts/shared/search-toggle.js +53 -24
  210. package/dist/layouts/shared/search-toggle.js.map +1 -0
  211. package/dist/layouts/shared/theme-toggle.d.ts +13 -4
  212. package/dist/layouts/shared/theme-toggle.d.ts.map +1 -1
  213. package/dist/layouts/shared/theme-toggle.js +58 -34
  214. package/dist/layouts/shared/theme-toggle.js.map +1 -0
  215. package/dist/mdx.d.ts +34 -29
  216. package/dist/mdx.d.ts.map +1 -1
  217. package/dist/mdx.js +68 -34
  218. package/dist/mdx.js.map +1 -0
  219. package/dist/mdx.server.d.ts +9 -5
  220. package/dist/mdx.server.d.ts.map +1 -1
  221. package/dist/mdx.server.js +21 -13
  222. package/dist/mdx.server.js.map +1 -0
  223. package/dist/og.d.ts +1 -2
  224. package/dist/og.js +3 -1
  225. package/dist/page.d.ts +30 -20
  226. package/dist/page.d.ts.map +1 -1
  227. package/dist/page.js +34 -18
  228. package/dist/page.js.map +1 -0
  229. package/dist/provider/base.d.ts +43 -33
  230. package/dist/provider/base.d.ts.map +1 -1
  231. package/dist/provider/base.js +37 -17
  232. package/dist/provider/base.js.map +1 -0
  233. package/dist/provider/next.d.ts +20 -12
  234. package/dist/provider/next.d.ts.map +1 -1
  235. package/dist/provider/next.js +19 -5
  236. package/dist/provider/next.js.map +1 -0
  237. package/dist/provider/react-router.d.ts +20 -12
  238. package/dist/provider/react-router.d.ts.map +1 -1
  239. package/dist/provider/react-router.js +19 -5
  240. package/dist/provider/react-router.js.map +1 -0
  241. package/dist/provider/tanstack.d.ts +20 -12
  242. package/dist/provider/tanstack.d.ts.map +1 -1
  243. package/dist/provider/tanstack.js +19 -5
  244. package/dist/provider/tanstack.js.map +1 -0
  245. package/dist/provider/waku.d.ts +20 -12
  246. package/dist/provider/waku.d.ts.map +1 -1
  247. package/dist/provider/waku.js +19 -5
  248. package/dist/provider/waku.js.map +1 -0
  249. package/dist/style.css +30 -12
  250. package/dist/utils/use-copy-button.d.ts +1 -2
  251. package/dist/utils/use-copy-button.js +3 -1
  252. package/dist/utils/use-footer-items.d.ts +1 -2
  253. package/dist/utils/use-footer-items.js +3 -1
  254. package/dist/utils/use-is-scroll-top.d.ts +1 -2
  255. package/dist/utils/use-is-scroll-top.js +3 -1
  256. package/package.json +51 -52
  257. package/dist/components/toc/clerk.d.ts.map +0 -1
  258. package/dist/components/toc/default.d.ts.map +0 -1
  259. package/dist/components/toc/index.d.ts.map +0 -1
  260. package/dist/contexts/i18n.d.ts.map +0 -1
  261. package/dist/contexts/tree.d.ts.map +0 -1
  262. package/dist/i18n.d.ts.map +0 -1
  263. package/dist/og.d.ts.map +0 -1
  264. package/dist/utils/use-copy-button.d.ts.map +0 -1
  265. package/dist/utils/use-footer-items.d.ts.map +0 -1
  266. package/dist/utils/use-is-scroll-top.d.ts.map +0 -1
@@ -1,186 +1,262 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { ChevronDown, ExternalLink } from '@fumadocs/ui/icons';
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 '@fumadocs/ui/cn';
8
- import { ScrollArea, ScrollViewport, } from '../../components/ui/scroll-area.js';
9
- import { isActive } from '@fumadocs/ui/urls';
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';
2
+
3
+ import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "../ui/collapsible.js";
4
+ import { ScrollArea, ScrollViewport } from "../ui/scroll-area.js";
5
+ import Link from "fumadocs-core/link";
6
+ import { usePathname } from "fumadocs-core/framework";
7
+ import { cn } from "@fumadocs/ui/cn";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ import { ChevronDown, ExternalLink } from "lucide-react";
10
+ import { createContext, use, useEffect, useMemo, useRef, useState } from "react";
11
+ import { isActive } from "@fumadocs/ui/urls";
12
+ import { useOnChange } from "fumadocs-core/utils/use-on-change";
13
+ import { useMediaQuery } from "fumadocs-core/utils/use-media-query";
14
+ import { Presence } from "@radix-ui/react-presence";
15
+ import scrollIntoView from "scroll-into-view-if-needed";
16
+
17
+ //#region src/components/sidebar/base.tsx
15
18
  const SidebarContext = createContext(null);
16
19
  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 useFolder() {
47
- return use(FolderContext);
48
- }
49
- export function useFolderDepth() {
50
- return use(FolderContext)?.depth ?? 0;
51
- }
52
- export function SidebarContent({ children, }) {
53
- const { collapsed, mode } = useSidebar();
54
- const [hover, setHover] = useState(false);
55
- const ref = useRef(null);
56
- const timerRef = useRef(0);
57
- useOnChange(collapsed, () => {
58
- if (collapsed)
59
- setHover(false);
60
- });
61
- if (mode !== 'full')
62
- return;
63
- function shouldIgnoreHover(e) {
64
- const element = ref.current;
65
- if (!element)
66
- return true;
67
- return (!collapsed ||
68
- e.pointerType === 'touch' ||
69
- element.getAnimations().length > 0);
70
- }
71
- return children({
72
- ref,
73
- collapsed,
74
- hovered: hover,
75
- onPointerEnter(e) {
76
- if (shouldIgnoreHover(e))
77
- return;
78
- window.clearTimeout(timerRef.current);
79
- setHover(true);
80
- },
81
- onPointerLeave(e) {
82
- if (shouldIgnoreHover(e))
83
- return;
84
- window.clearTimeout(timerRef.current);
85
- timerRef.current = window.setTimeout(() => setHover(false),
86
- // if mouse is leaving the viewport, add a close delay
87
- Math.min(e.clientX, document.body.clientWidth - e.clientX) > 100
88
- ? 0
89
- : 500);
90
- },
91
- });
92
- }
93
- export function SidebarDrawerOverlay(props) {
94
- const { open, setOpen, mode } = useSidebar();
95
- if (mode !== 'drawer')
96
- return;
97
- return (_jsx(Presence, { present: open, children: _jsx("div", { "data-state": open ? 'open' : 'closed', onClick: () => setOpen(false), ...props }) }));
98
- }
99
- export function SidebarDrawerContent({ className, children, ...props }) {
100
- const { open, mode } = useSidebar();
101
- const state = open ? 'open' : 'closed';
102
- if (mode !== 'drawer')
103
- return;
104
- return (_jsx(Presence, { present: open, children: ({ present }) => (_jsx("aside", { id: "nd-sidebar-mobile", "data-state": state, className: cn(!present && 'invisible', className), ...props, children: children })) }));
105
- }
106
- export function SidebarViewport(props) {
107
- return (_jsx(ScrollArea, { ...props, className: cn('min-h-0 flex-1', props.className), children: _jsx(ScrollViewport, { className: "p-4 overscroll-contain", style: {
108
- maskImage: 'linear-gradient(to bottom, transparent, white 12px, white calc(100% - 12px), transparent)',
109
- }, children: props.children }) }));
110
- }
111
- export function SidebarSeparator(props) {
112
- const depth = useFolderDepth();
113
- 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 }));
114
- }
115
- export function SidebarItem({ icon, children, ...props }) {
116
- const pathname = usePathname();
117
- const ref = useRef(null);
118
- const { prefetch } = useSidebar();
119
- const active = props.href !== undefined && isActive(props.href, pathname, false);
120
- useAutoScroll(active, ref);
121
- return (_jsxs(Link, { ref: ref, "data-active": active, prefetch: prefetch, ...props, children: [icon ?? (props.external ? _jsx(ExternalLink, {}) : null), children] }));
122
- }
123
- export function SidebarFolder({ defaultOpen: defaultOpenProp, collapsible = true, active = false, children, ...props }) {
124
- const { defaultOpenLevel } = useSidebar();
125
- const depth = useFolderDepth() + 1;
126
- const defaultOpen = collapsible === false ||
127
- active ||
128
- (defaultOpenProp ?? defaultOpenLevel >= depth);
129
- const [open, setOpen] = useState(defaultOpen);
130
- useOnChange(defaultOpen, (v) => {
131
- if (v)
132
- setOpen(v);
133
- });
134
- return (_jsx(Collapsible, { open: open, onOpenChange: setOpen, disabled: !collapsible, ...props, children: _jsx(FolderContext, { value: useMemo(() => ({ open, setOpen, depth, collapsible }), [collapsible, depth, open]), children: children }) }));
135
- }
136
- export function SidebarFolderTrigger({ children, ...props }) {
137
- const { open, collapsible } = use(FolderContext);
138
- if (collapsible) {
139
- return (_jsxs(CollapsibleTrigger, { ...props, children: [children, _jsx(ChevronDown, { "data-icon": true, className: cn('ms-auto transition-transform', !open && '-rotate-90') })] }));
140
- }
141
- return _jsx("div", { ...props, children: children });
142
- }
143
- export function SidebarFolderLink({ children, ...props }) {
144
- const ref = useRef(null);
145
- const { open, setOpen, collapsible } = use(FolderContext);
146
- const { prefetch } = useSidebar();
147
- const pathname = usePathname();
148
- const active = props.href !== undefined && isActive(props.href, pathname, false);
149
- useAutoScroll(active, ref);
150
- return (_jsxs(Link, { ref: ref, "data-active": active, onClick: (e) => {
151
- if (!collapsible)
152
- return;
153
- if (e.target instanceof Element &&
154
- e.target.matches('[data-icon], [data-icon] *')) {
155
- setOpen(!open);
156
- e.preventDefault();
157
- }
158
- else {
159
- setOpen(active ? !open : true);
160
- }
161
- }, prefetch: prefetch, ...props, children: [children, collapsible && (_jsx(ChevronDown, { "data-icon": true, className: cn('ms-auto transition-transform', !open && '-rotate-90') }))] }));
162
- }
163
- export function SidebarFolderContent(props) {
164
- return _jsx(CollapsibleContent, { ...props, children: props.children });
165
- }
166
- export function SidebarTrigger({ children, ...props }) {
167
- const { setOpen } = useSidebar();
168
- return (_jsx("button", { "aria-label": "Open Sidebar", onClick: () => setOpen((prev) => !prev), ...props, children: children }));
169
- }
170
- export function SidebarCollapseTrigger(props) {
171
- const { collapsed, setCollapsed } = useSidebar();
172
- return (_jsx("button", { type: "button", "aria-label": "Collapse Sidebar", "data-collapsed": collapsed, onClick: () => {
173
- setCollapsed((prev) => !prev);
174
- }, ...props, children: props.children }));
20
+ function SidebarProvider({ defaultOpenLevel = 0, prefetch = true, children }) {
21
+ const closeOnRedirect = useRef(true);
22
+ const [open, setOpen] = useState(false);
23
+ const [collapsed, setCollapsed] = useState(false);
24
+ const pathname = usePathname();
25
+ const mode = useMediaQuery("(width < 768px)") ? "drawer" : "full";
26
+ useOnChange(pathname, () => {
27
+ if (closeOnRedirect.current) setOpen(false);
28
+ closeOnRedirect.current = true;
29
+ });
30
+ return /* @__PURE__ */ jsx(SidebarContext, {
31
+ value: useMemo(() => ({
32
+ open,
33
+ setOpen,
34
+ collapsed,
35
+ setCollapsed,
36
+ closeOnRedirect,
37
+ defaultOpenLevel,
38
+ prefetch,
39
+ mode
40
+ }), [
41
+ open,
42
+ collapsed,
43
+ defaultOpenLevel,
44
+ prefetch,
45
+ mode
46
+ ]),
47
+ children
48
+ });
49
+ }
50
+ function useSidebar() {
51
+ const ctx = use(SidebarContext);
52
+ if (!ctx) throw new Error("Missing SidebarContext, make sure you have wrapped the component in <DocsLayout /> and the context is available.");
53
+ return ctx;
54
+ }
55
+ function useFolder() {
56
+ return use(FolderContext);
57
+ }
58
+ function useFolderDepth() {
59
+ return use(FolderContext)?.depth ?? 0;
60
+ }
61
+ function SidebarContent({ children }) {
62
+ const { collapsed, mode } = useSidebar();
63
+ const [hover, setHover] = useState(false);
64
+ const ref = useRef(null);
65
+ const timerRef = useRef(0);
66
+ useOnChange(collapsed, () => {
67
+ if (collapsed) setHover(false);
68
+ });
69
+ if (mode !== "full") return;
70
+ function shouldIgnoreHover(e) {
71
+ const element = ref.current;
72
+ if (!element) return true;
73
+ return !collapsed || e.pointerType === "touch" || element.getAnimations().length > 0;
74
+ }
75
+ return children({
76
+ ref,
77
+ collapsed,
78
+ hovered: hover,
79
+ onPointerEnter(e) {
80
+ if (shouldIgnoreHover(e)) return;
81
+ window.clearTimeout(timerRef.current);
82
+ setHover(true);
83
+ },
84
+ onPointerLeave(e) {
85
+ if (shouldIgnoreHover(e)) return;
86
+ window.clearTimeout(timerRef.current);
87
+ timerRef.current = window.setTimeout(() => setHover(false), Math.min(e.clientX, document.body.clientWidth - e.clientX) > 100 ? 0 : 500);
88
+ }
89
+ });
90
+ }
91
+ function SidebarDrawerOverlay(props) {
92
+ const { open, setOpen, mode } = useSidebar();
93
+ if (mode !== "drawer") return;
94
+ return /* @__PURE__ */ jsx(Presence, {
95
+ present: open,
96
+ children: /* @__PURE__ */ jsx("div", {
97
+ "data-state": open ? "open" : "closed",
98
+ onClick: () => setOpen(false),
99
+ ...props
100
+ })
101
+ });
102
+ }
103
+ function SidebarDrawerContent({ className, children, ...props }) {
104
+ const { open, mode } = useSidebar();
105
+ const state = open ? "open" : "closed";
106
+ if (mode !== "drawer") return;
107
+ return /* @__PURE__ */ jsx(Presence, {
108
+ present: open,
109
+ children: ({ present }) => /* @__PURE__ */ jsx("aside", {
110
+ id: "nd-sidebar-mobile",
111
+ "data-state": state,
112
+ className: cn(!present && "invisible", className),
113
+ ...props,
114
+ children
115
+ })
116
+ });
117
+ }
118
+ function SidebarViewport(props) {
119
+ return /* @__PURE__ */ jsx(ScrollArea, {
120
+ ...props,
121
+ className: cn("min-h-0 flex-1", props.className),
122
+ children: /* @__PURE__ */ jsx(ScrollViewport, {
123
+ className: "p-4 overscroll-contain",
124
+ style: { maskImage: "linear-gradient(to bottom, transparent, white 12px, white calc(100% - 12px), transparent)" },
125
+ children: props.children
126
+ })
127
+ });
128
+ }
129
+ function SidebarSeparator(props) {
130
+ const depth = useFolderDepth();
131
+ return /* @__PURE__ */ jsx("p", {
132
+ ...props,
133
+ 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),
134
+ children: props.children
135
+ });
136
+ }
137
+ function SidebarItem({ icon, children, ...props }) {
138
+ const pathname = usePathname();
139
+ const ref = useRef(null);
140
+ const { prefetch } = useSidebar();
141
+ const active = props.href !== void 0 && isActive(props.href, pathname, false);
142
+ useAutoScroll(active, ref);
143
+ return /* @__PURE__ */ jsxs(Link, {
144
+ ref,
145
+ "data-active": active,
146
+ prefetch,
147
+ ...props,
148
+ children: [icon ?? (props.external ? /* @__PURE__ */ jsx(ExternalLink, {}) : null), children]
149
+ });
150
+ }
151
+ function SidebarFolder({ defaultOpen: defaultOpenProp, collapsible = true, active = false, children, ...props }) {
152
+ const { defaultOpenLevel } = useSidebar();
153
+ const depth = useFolderDepth() + 1;
154
+ const defaultOpen = collapsible === false || active || (defaultOpenProp ?? defaultOpenLevel >= depth);
155
+ const [open, setOpen] = useState(defaultOpen);
156
+ useOnChange(defaultOpen, (v) => {
157
+ if (v) setOpen(v);
158
+ });
159
+ return /* @__PURE__ */ jsx(Collapsible, {
160
+ open,
161
+ onOpenChange: setOpen,
162
+ disabled: !collapsible,
163
+ ...props,
164
+ children: /* @__PURE__ */ jsx(FolderContext, {
165
+ value: useMemo(() => ({
166
+ open,
167
+ setOpen,
168
+ depth,
169
+ collapsible
170
+ }), [
171
+ collapsible,
172
+ depth,
173
+ open
174
+ ]),
175
+ children
176
+ })
177
+ });
178
+ }
179
+ function SidebarFolderTrigger({ children, ...props }) {
180
+ const { open, collapsible } = use(FolderContext);
181
+ if (collapsible) return /* @__PURE__ */ jsxs(CollapsibleTrigger, {
182
+ ...props,
183
+ children: [children, /* @__PURE__ */ jsx(ChevronDown, {
184
+ "data-icon": true,
185
+ className: cn("ms-auto transition-transform", !open && "-rotate-90")
186
+ })]
187
+ });
188
+ return /* @__PURE__ */ jsx("div", {
189
+ ...props,
190
+ children
191
+ });
192
+ }
193
+ function SidebarFolderLink({ children, ...props }) {
194
+ const ref = useRef(null);
195
+ const { open, setOpen, collapsible } = use(FolderContext);
196
+ const { prefetch } = useSidebar();
197
+ const pathname = usePathname();
198
+ const active = props.href !== void 0 && isActive(props.href, pathname, false);
199
+ useAutoScroll(active, ref);
200
+ return /* @__PURE__ */ jsxs(Link, {
201
+ ref,
202
+ "data-active": active,
203
+ onClick: (e) => {
204
+ if (!collapsible) return;
205
+ if (e.target instanceof Element && e.target.matches("[data-icon], [data-icon] *")) {
206
+ setOpen(!open);
207
+ e.preventDefault();
208
+ } else setOpen(active ? !open : true);
209
+ },
210
+ prefetch,
211
+ ...props,
212
+ children: [children, collapsible && /* @__PURE__ */ jsx(ChevronDown, {
213
+ "data-icon": true,
214
+ className: cn("ms-auto transition-transform", !open && "-rotate-90")
215
+ })]
216
+ });
217
+ }
218
+ function SidebarFolderContent(props) {
219
+ return /* @__PURE__ */ jsx(CollapsibleContent, {
220
+ ...props,
221
+ children: props.children
222
+ });
223
+ }
224
+ function SidebarTrigger({ children, ...props }) {
225
+ const { setOpen } = useSidebar();
226
+ return /* @__PURE__ */ jsx("button", {
227
+ "aria-label": "Open Sidebar",
228
+ onClick: () => setOpen((prev) => !prev),
229
+ ...props,
230
+ children
231
+ });
232
+ }
233
+ function SidebarCollapseTrigger(props) {
234
+ const { collapsed, setCollapsed } = useSidebar();
235
+ return /* @__PURE__ */ jsx("button", {
236
+ type: "button",
237
+ "aria-label": "Collapse Sidebar",
238
+ "data-collapsed": collapsed,
239
+ onClick: () => {
240
+ setCollapsed((prev) => !prev);
241
+ },
242
+ ...props,
243
+ children: props.children
244
+ });
175
245
  }
176
246
  function useAutoScroll(active, ref) {
177
- const { mode } = useSidebar();
178
- useEffect(() => {
179
- if (active && ref.current) {
180
- scrollIntoView(ref.current, {
181
- boundary: document.getElementById(mode === 'drawer' ? 'nd-sidebar-mobile' : 'nd-sidebar'),
182
- scrollMode: 'if-needed',
183
- });
184
- }
185
- }, [active, mode, ref]);
247
+ const { mode } = useSidebar();
248
+ useEffect(() => {
249
+ if (active && ref.current) scrollIntoView(ref.current, {
250
+ boundary: document.getElementById(mode === "drawer" ? "nd-sidebar-mobile" : "nd-sidebar"),
251
+ scrollMode: "if-needed"
252
+ });
253
+ }, [
254
+ active,
255
+ mode,
256
+ ref
257
+ ]);
186
258
  }
259
+
260
+ //#endregion
261
+ export { SidebarCollapseTrigger, SidebarContent, SidebarDrawerContent, SidebarDrawerOverlay, SidebarFolder, SidebarFolderContent, SidebarFolderLink, SidebarFolderTrigger, SidebarItem, SidebarProvider, SidebarSeparator, SidebarTrigger, SidebarViewport, useFolder, useFolderDepth, useSidebar };
262
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","names":["mode: Mode"],"sources":["../../../src/components/sidebar/base.tsx"],"sourcesContent":["'use client';\nimport { ChevronDown, ExternalLink } from 'lucide-react';\nimport {\n type ComponentProps,\n createContext,\n type PointerEvent,\n type ReactNode,\n type RefObject,\n use,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Link, { type LinkProps } from 'fumadocs-core/link';\nimport { useOnChange } from 'fumadocs-core/utils/use-on-change';\nimport { cn } from '@fumadocs/ui/cn';\nimport { ScrollArea, type ScrollAreaProps, ScrollViewport } from '@/components/ui/scroll-area';\nimport { isActive } from '@fumadocs/ui/urls';\nimport {\n Collapsible,\n CollapsibleContent,\n type CollapsibleContentProps,\n CollapsibleTrigger,\n type CollapsibleTriggerProps,\n} from '@/components/ui/collapsible';\nimport { useMediaQuery } from 'fumadocs-core/utils/use-media-query';\nimport { Presence } from '@radix-ui/react-presence';\nimport scrollIntoView from 'scroll-into-view-if-needed';\nimport { usePathname } from 'fumadocs-core/framework';\n\ninterface SidebarContext {\n open: boolean;\n setOpen: React.Dispatch<React.SetStateAction<boolean>>;\n collapsed: boolean;\n setCollapsed: React.Dispatch<React.SetStateAction<boolean>>;\n\n /**\n * When set to false, don't close the sidebar when navigate to another page\n */\n closeOnRedirect: RefObject<boolean>;\n defaultOpenLevel: number;\n prefetch: boolean;\n mode: Mode;\n}\n\nexport interface SidebarProviderProps {\n /**\n * Open folders by default if their level is lower or equal to a specific level\n * (Starting from 1)\n *\n * @defaultValue 0\n */\n defaultOpenLevel?: number;\n\n /**\n * Prefetch links\n *\n * @defaultValue true\n */\n prefetch?: boolean;\n\n children?: ReactNode;\n}\n\ntype Mode = 'drawer' | 'full';\n\nconst SidebarContext = createContext<SidebarContext | null>(null);\n\nconst FolderContext = createContext<{\n open: boolean;\n setOpen: React.Dispatch<React.SetStateAction<boolean>>;\n depth: number;\n collapsible: boolean;\n} | null>(null);\n\nexport function SidebarProvider({\n defaultOpenLevel = 0,\n prefetch = true,\n children,\n}: SidebarProviderProps) {\n const closeOnRedirect = useRef(true);\n const [open, setOpen] = useState(false);\n const [collapsed, setCollapsed] = useState(false);\n const pathname = usePathname();\n const mode: Mode = useMediaQuery('(width < 768px)') ? 'drawer' : 'full';\n\n useOnChange(pathname, () => {\n if (closeOnRedirect.current) {\n setOpen(false);\n }\n closeOnRedirect.current = true;\n });\n\n return (\n <SidebarContext\n value={useMemo(\n () => ({\n open,\n setOpen,\n collapsed,\n setCollapsed,\n closeOnRedirect,\n defaultOpenLevel,\n prefetch,\n mode,\n }),\n [open, collapsed, defaultOpenLevel, prefetch, mode],\n )}\n >\n {children}\n </SidebarContext>\n );\n}\n\nexport function useSidebar(): SidebarContext {\n const ctx = use(SidebarContext);\n if (!ctx)\n throw new Error(\n 'Missing SidebarContext, make sure you have wrapped the component in <DocsLayout /> and the context is available.',\n );\n\n return ctx;\n}\n\nexport function useFolder() {\n return use(FolderContext);\n}\n\nexport function useFolderDepth() {\n return use(FolderContext)?.depth ?? 0;\n}\n\nexport function SidebarContent({\n children,\n}: {\n children: (state: {\n ref: RefObject<HTMLElement | null>;\n collapsed: boolean;\n hovered: boolean;\n onPointerEnter: (event: PointerEvent) => void;\n onPointerLeave: (event: PointerEvent) => void;\n }) => ReactNode;\n}) {\n const { collapsed, mode } = useSidebar();\n const [hover, setHover] = useState(false);\n const ref = useRef<HTMLElement>(null);\n const timerRef = useRef(0);\n\n useOnChange(collapsed, () => {\n if (collapsed) setHover(false);\n });\n\n if (mode !== 'full') return;\n\n function shouldIgnoreHover(e: PointerEvent): boolean {\n const element = ref.current;\n if (!element) return true;\n\n return !collapsed || e.pointerType === 'touch' || element.getAnimations().length > 0;\n }\n\n return children({\n ref,\n collapsed,\n hovered: hover,\n onPointerEnter(e) {\n if (shouldIgnoreHover(e)) return;\n window.clearTimeout(timerRef.current);\n setHover(true);\n },\n onPointerLeave(e) {\n if (shouldIgnoreHover(e)) return;\n window.clearTimeout(timerRef.current);\n\n timerRef.current = window.setTimeout(\n () => setHover(false),\n // if mouse is leaving the viewport, add a close delay\n Math.min(e.clientX, document.body.clientWidth - e.clientX) > 100 ? 0 : 500,\n );\n },\n });\n}\n\nexport function SidebarDrawerOverlay(props: ComponentProps<'div'>) {\n const { open, setOpen, mode } = useSidebar();\n\n if (mode !== 'drawer') return;\n return (\n <Presence present={open}>\n <div data-state={open ? 'open' : 'closed'} onClick={() => setOpen(false)} {...props} />\n </Presence>\n );\n}\n\nexport function SidebarDrawerContent({ className, children, ...props }: ComponentProps<'aside'>) {\n const { open, mode } = useSidebar();\n const state = open ? 'open' : 'closed';\n\n if (mode !== 'drawer') return;\n return (\n <Presence present={open}>\n {({ present }) => (\n <aside\n id=\"nd-sidebar-mobile\"\n data-state={state}\n className={cn(!present && 'invisible', className)}\n {...props}\n >\n {children}\n </aside>\n )}\n </Presence>\n );\n}\n\nexport function SidebarViewport(props: ScrollAreaProps) {\n return (\n <ScrollArea {...props} className={cn('min-h-0 flex-1', props.className)}>\n <ScrollViewport\n className=\"p-4 overscroll-contain\"\n style={\n {\n maskImage:\n 'linear-gradient(to bottom, transparent, white 12px, white calc(100% - 12px), transparent)',\n } as object\n }\n >\n {props.children}\n </ScrollViewport>\n </ScrollArea>\n );\n}\n\nexport function SidebarSeparator(props: ComponentProps<'p'>) {\n const depth = useFolderDepth();\n return (\n <p\n {...props}\n className={cn(\n 'inline-flex items-center gap-2 mb-1.5 px-2 mt-6 empty:mb-0',\n depth === 0 && 'first:mt-0',\n props.className,\n )}\n >\n {props.children}\n </p>\n );\n}\n\nexport function SidebarItem({\n icon,\n children,\n ...props\n}: LinkProps & {\n icon?: ReactNode;\n}) {\n const pathname = usePathname();\n const ref = useRef<HTMLAnchorElement>(null);\n const { prefetch } = useSidebar();\n const active = props.href !== undefined && isActive(props.href, pathname, false);\n\n useAutoScroll(active, ref);\n\n return (\n <Link ref={ref} data-active={active} prefetch={prefetch} {...props}>\n {icon ?? (props.external ? <ExternalLink /> : null)}\n {children}\n </Link>\n );\n}\n\nexport function SidebarFolder({\n defaultOpen: defaultOpenProp,\n collapsible = true,\n active = false,\n children,\n ...props\n}: ComponentProps<'div'> & {\n active?: boolean;\n defaultOpen?: boolean;\n collapsible?: boolean;\n}) {\n const { defaultOpenLevel } = useSidebar();\n const depth = useFolderDepth() + 1;\n const defaultOpen =\n collapsible === false || active || (defaultOpenProp ?? defaultOpenLevel >= depth);\n const [open, setOpen] = useState(defaultOpen);\n\n useOnChange(defaultOpen, (v) => {\n if (v) setOpen(v);\n });\n\n return (\n <Collapsible open={open} onOpenChange={setOpen} disabled={!collapsible} {...props}>\n <FolderContext\n value={useMemo(() => ({ open, setOpen, depth, collapsible }), [collapsible, depth, open])}\n >\n {children}\n </FolderContext>\n </Collapsible>\n );\n}\n\nexport function SidebarFolderTrigger({ children, ...props }: CollapsibleTriggerProps) {\n const { open, collapsible } = use(FolderContext)!;\n\n if (collapsible) {\n return (\n <CollapsibleTrigger {...props}>\n {children}\n <ChevronDown\n data-icon\n className={cn('ms-auto transition-transform', !open && '-rotate-90')}\n />\n </CollapsibleTrigger>\n );\n }\n\n return <div {...(props as ComponentProps<'div'>)}>{children}</div>;\n}\n\nexport function SidebarFolderLink({ children, ...props }: LinkProps) {\n const ref = useRef<HTMLAnchorElement>(null);\n const { open, setOpen, collapsible } = use(FolderContext)!;\n const { prefetch } = useSidebar();\n const pathname = usePathname();\n const active = props.href !== undefined && isActive(props.href, pathname, false);\n\n useAutoScroll(active, ref);\n\n return (\n <Link\n ref={ref}\n data-active={active}\n onClick={(e) => {\n if (!collapsible) return;\n\n if (e.target instanceof Element && e.target.matches('[data-icon], [data-icon] *')) {\n setOpen(!open);\n e.preventDefault();\n } else {\n setOpen(active ? !open : true);\n }\n }}\n prefetch={prefetch}\n {...props}\n >\n {children}\n {collapsible && (\n <ChevronDown\n data-icon\n className={cn('ms-auto transition-transform', !open && '-rotate-90')}\n />\n )}\n </Link>\n );\n}\n\nexport function SidebarFolderContent(props: CollapsibleContentProps) {\n return <CollapsibleContent {...props}>{props.children}</CollapsibleContent>;\n}\n\nexport function SidebarTrigger({ children, ...props }: ComponentProps<'button'>) {\n const { setOpen } = useSidebar();\n\n return (\n <button aria-label=\"Open Sidebar\" onClick={() => setOpen((prev) => !prev)} {...props}>\n {children}\n </button>\n );\n}\n\nexport function SidebarCollapseTrigger(props: ComponentProps<'button'>) {\n const { collapsed, setCollapsed } = useSidebar();\n\n return (\n <button\n type=\"button\"\n aria-label=\"Collapse Sidebar\"\n data-collapsed={collapsed}\n onClick={() => {\n setCollapsed((prev) => !prev);\n }}\n {...props}\n >\n {props.children}\n </button>\n );\n}\n\nfunction useAutoScroll(active: boolean, ref: RefObject<HTMLAnchorElement | null>) {\n const { mode } = useSidebar();\n\n useEffect(() => {\n if (active && ref.current) {\n scrollIntoView(ref.current, {\n boundary: document.getElementById(mode === 'drawer' ? 'nd-sidebar-mobile' : 'nd-sidebar'),\n scrollMode: 'if-needed',\n });\n }\n }, [active, mode, ref]);\n}\n"],"mappings":"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"}
@@ -1,11 +1,24 @@
1
- import type { HTMLAttributes } from 'react';
2
- import type * as Base from './base.js';
3
- import type { LinkItemType } from '@fumadocs/ui/link-item';
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 {};
1
+ import { base_d_exports } from "./base.js";
2
+ import * as react_jsx_runtime85 from "react/jsx-runtime";
3
+ import { HTMLAttributes } from "react";
4
+ import { LinkItemType } from "@fumadocs/ui/link-item";
5
+
6
+ //#region src/components/sidebar/link-item.d.ts
7
+ type InternalComponents = Pick<typeof base_d_exports, 'SidebarFolder' | 'SidebarFolderLink' | 'SidebarFolderContent' | 'SidebarFolderTrigger' | 'SidebarItem'>;
8
+ declare function createLinkItemRenderer({
9
+ SidebarFolder,
10
+ SidebarFolderContent,
11
+ SidebarFolderLink,
12
+ SidebarFolderTrigger,
13
+ SidebarItem
14
+ }: InternalComponents): ({
15
+ item,
16
+ ...props
17
+ }: HTMLAttributes<HTMLElement> & {
18
+ item: Exclude<LinkItemType, {
19
+ type: "icon";
20
+ }>;
21
+ }) => react_jsx_runtime85.JSX.Element;
22
+ //#endregion
23
+ export { createLinkItemRenderer };
11
24
  //# sourceMappingURL=link-item.d.ts.map
@@ -1 +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,wBAAwB,CAAC;AAE3D,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"}
1
+ {"version":3,"file":"link-item.d.ts","names":[],"sources":["../../../src/components/sidebar/link-item.tsx"],"sourcesContent":[],"mappings":";;;;;;KAIK,kBAAA,GAAqB,YACjB;iBAQO,sBAAA;;;;;;GAMb;;;GAOE,eAAe;QACV,QAAQ;IAvBb,IAAA,EAAA,MAAA;EASW,CAAA,CAAA;CACd,EAAA,GAcC,mBAAA,CAAA,GAAA,CAAA,OAdD"}
@@ -1,13 +1,33 @@
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
- };
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+
3
+ //#region src/components/sidebar/link-item.tsx
4
+ function createLinkItemRenderer({ SidebarFolder, SidebarFolderContent, SidebarFolderLink, SidebarFolderTrigger, SidebarItem }) {
5
+ /**
6
+ * Render sidebar items from page tree
7
+ */
8
+ return function SidebarLinkItem({ item, ...props }) {
9
+ if (item.type === "custom") return /* @__PURE__ */ jsx("div", {
10
+ ...props,
11
+ children: item.children
12
+ });
13
+ if (item.type === "menu") return /* @__PURE__ */ jsxs(SidebarFolder, {
14
+ ...props,
15
+ children: [item.url ? /* @__PURE__ */ jsxs(SidebarFolderLink, {
16
+ href: item.url,
17
+ external: item.external,
18
+ children: [item.icon, item.text]
19
+ }) : /* @__PURE__ */ jsxs(SidebarFolderTrigger, { children: [item.icon, item.text] }), /* @__PURE__ */ jsx(SidebarFolderContent, { children: item.items.map((child, i) => /* @__PURE__ */ jsx(SidebarLinkItem, { item: child }, i)) })]
20
+ });
21
+ return /* @__PURE__ */ jsx(SidebarItem, {
22
+ href: item.url,
23
+ icon: item.icon,
24
+ external: item.external,
25
+ ...props,
26
+ children: item.text
27
+ });
28
+ };
13
29
  }
30
+
31
+ //#endregion
32
+ export { createLinkItemRenderer };
33
+ //# sourceMappingURL=link-item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-item.js","names":[],"sources":["../../../src/components/sidebar/link-item.tsx"],"sourcesContent":["import type { HTMLAttributes } from 'react';\nimport type * as Base from './base';\nimport type { LinkItemType } from '@fumadocs/ui/link-item';\n\ntype InternalComponents = Pick<\n typeof Base,\n | 'SidebarFolder'\n | 'SidebarFolderLink'\n | 'SidebarFolderContent'\n | 'SidebarFolderTrigger'\n | 'SidebarItem'\n>;\n\nexport function createLinkItemRenderer({\n SidebarFolder,\n SidebarFolderContent,\n SidebarFolderLink,\n SidebarFolderTrigger,\n SidebarItem,\n}: InternalComponents) {\n /**\n * Render sidebar items from page tree\n */\n return function SidebarLinkItem({\n item,\n ...props\n }: HTMLAttributes<HTMLElement> & {\n item: Exclude<LinkItemType, { type: 'icon' }>;\n }) {\n if (item.type === 'custom') return <div {...props}>{item.children}</div>;\n\n if (item.type === 'menu')\n return (\n <SidebarFolder {...props}>\n {item.url ? (\n <SidebarFolderLink href={item.url} external={item.external}>\n {item.icon}\n {item.text}\n </SidebarFolderLink>\n ) : (\n <SidebarFolderTrigger>\n {item.icon}\n {item.text}\n </SidebarFolderTrigger>\n )}\n <SidebarFolderContent>\n {item.items.map((child, i) => (\n <SidebarLinkItem key={i} item={child} />\n ))}\n </SidebarFolderContent>\n </SidebarFolder>\n );\n\n return (\n <SidebarItem href={item.url} icon={item.icon} external={item.external} {...props}>\n {item.text}\n </SidebarItem>\n );\n };\n}\n"],"mappings":";;;AAaA,SAAgB,uBAAuB,EACrC,eACA,sBACA,mBACA,sBACA,eACqB;;;;AAIrB,QAAO,SAAS,gBAAgB,EAC9B,MACA,GAAG,SAGF;AACD,MAAI,KAAK,SAAS,SAAU,QAAO,oBAAC;GAAI,GAAI;aAAQ,KAAK;IAAe;AAExE,MAAI,KAAK,SAAS,OAChB,QACE,qBAAC;GAAc,GAAI;cAChB,KAAK,MACJ,qBAAC;IAAkB,MAAM,KAAK;IAAK,UAAU,KAAK;eAC/C,KAAK,MACL,KAAK;KACY,GAEpB,qBAAC,mCACE,KAAK,MACL,KAAK,QACe,EAEzB,oBAAC,kCACE,KAAK,MAAM,KAAK,OAAO,MACtB,oBAAC,mBAAwB,MAAM,SAAT,EAAkB,CACxC,GACmB;IACT;AAGpB,SACE,oBAAC;GAAY,MAAM,KAAK;GAAK,MAAM,KAAK;GAAM,UAAU,KAAK;GAAU,GAAI;aACxE,KAAK;IACM"}
@@ -1,19 +1,30 @@
1
- import { type FC, type ReactNode } from 'react';
2
- import type * as PageTree from 'fumadocs-core/page-tree';
3
- import type * as Base from './base.js';
4
- export interface SidebarPageTreeComponents {
5
- Item: FC<{
6
- item: PageTree.Item;
7
- }>;
8
- Folder: FC<{
9
- item: PageTree.Folder;
10
- children: ReactNode;
11
- }>;
12
- Separator: FC<{
13
- item: PageTree.Separator;
14
- }>;
1
+ import { base_d_exports } from "./base.js";
2
+ import * as react_jsx_runtime84 from "react/jsx-runtime";
3
+ import { FC, ReactNode } from "react";
4
+ import * as PageTree from "fumadocs-core/page-tree";
5
+
6
+ //#region src/components/sidebar/page-tree.d.ts
7
+ interface SidebarPageTreeComponents {
8
+ Item: FC<{
9
+ item: PageTree.Item;
10
+ }>;
11
+ Folder: FC<{
12
+ item: PageTree.Folder;
13
+ children: ReactNode;
14
+ }>;
15
+ Separator: FC<{
16
+ item: PageTree.Separator;
17
+ }>;
15
18
  }
16
- type InternalComponents = Pick<typeof Base, 'SidebarSeparator' | 'SidebarFolder' | 'SidebarFolderLink' | 'SidebarFolderContent' | 'SidebarFolderTrigger' | 'SidebarItem'>;
17
- export declare function createPageTreeRenderer({ SidebarFolder, SidebarFolderContent, SidebarFolderLink, SidebarFolderTrigger, SidebarSeparator, SidebarItem, }: InternalComponents): (components: Partial<SidebarPageTreeComponents>) => import("react/jsx-runtime").JSX.Element;
18
- export {};
19
+ type InternalComponents = Pick<typeof base_d_exports, 'SidebarSeparator' | 'SidebarFolder' | 'SidebarFolderLink' | 'SidebarFolderContent' | 'SidebarFolderTrigger' | 'SidebarItem'>;
20
+ declare function createPageTreeRenderer({
21
+ SidebarFolder,
22
+ SidebarFolderContent,
23
+ SidebarFolderLink,
24
+ SidebarFolderTrigger,
25
+ SidebarSeparator,
26
+ SidebarItem
27
+ }: InternalComponents): (components: Partial<SidebarPageTreeComponents>) => react_jsx_runtime84.JSX.Element;
28
+ //#endregion
29
+ export { SidebarPageTreeComponents, createPageTreeRenderer };
19
30
  //# sourceMappingURL=page-tree.d.ts.map