fumadocs-ui 16.4.6 → 16.4.8

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 (238) hide show
  1. package/dist/components/accordion.d.ts +4 -5
  2. package/dist/components/accordion.js +1 -2
  3. package/dist/components/banner.d.ts +3 -4
  4. package/dist/components/banner.js +1 -2
  5. package/dist/components/callout.d.ts +6 -7
  6. package/dist/components/callout.js +1 -2
  7. package/dist/components/card.d.ts +4 -5
  8. package/dist/components/card.js +1 -2
  9. package/dist/components/codeblock.d.ts +8 -9
  10. package/dist/components/codeblock.js +1 -2
  11. package/dist/components/dialog/search-algolia.d.ts +3 -4
  12. package/dist/components/dialog/search-algolia.js +1 -2
  13. package/dist/components/dialog/search-default.d.ts +3 -4
  14. package/dist/components/dialog/search-default.js +1 -2
  15. package/dist/components/dialog/search-orama.d.ts +3 -4
  16. package/dist/components/dialog/search-orama.js +1 -2
  17. package/dist/components/dialog/search.d.ts +14 -15
  18. package/dist/components/dialog/search.js +1 -2
  19. package/dist/components/dynamic-codeblock.d.ts +3 -4
  20. package/dist/components/dynamic-codeblock.js +1 -2
  21. package/dist/components/files.d.ts +1 -2
  22. package/dist/components/files.js +1 -2
  23. package/dist/components/github-info.d.ts +3 -4
  24. package/dist/components/github-info.js +1 -2
  25. package/dist/components/heading.d.ts +1 -2
  26. package/dist/components/heading.js +1 -2
  27. package/dist/components/image-zoom-CtfZieBH.css +0 -2
  28. package/dist/components/image-zoom.d.ts +3 -4
  29. package/dist/components/image-zoom.js +1 -2
  30. package/dist/components/inline-toc.d.ts +3 -4
  31. package/dist/components/inline-toc.js +1 -2
  32. package/dist/components/sidebar/base.d.ts +16 -17
  33. package/dist/components/sidebar/base.js +1 -2
  34. package/dist/components/sidebar/link-item.d.ts +3 -4
  35. package/dist/components/sidebar/link-item.js +1 -2
  36. package/dist/components/sidebar/page-tree.d.ts +3 -4
  37. package/dist/components/sidebar/page-tree.js +1 -2
  38. package/dist/components/sidebar/tabs/dropdown.d.ts +3 -4
  39. package/dist/components/sidebar/tabs/dropdown.js +1 -2
  40. package/dist/components/sidebar/tabs/index.d.ts +1 -2
  41. package/dist/components/sidebar/tabs/index.js +1 -2
  42. package/dist/components/steps.d.ts +4 -5
  43. package/dist/components/steps.js +1 -2
  44. package/dist/components/tabs.d.ts +5 -6
  45. package/dist/components/tabs.js +1 -2
  46. package/dist/components/toc/clerk.js +1 -2
  47. package/dist/components/toc/default.js +1 -2
  48. package/dist/components/toc/index.js +1 -2
  49. package/dist/components/type-table.d.ts +3 -4
  50. package/dist/components/type-table.js +1 -2
  51. package/dist/components/ui/accordion.d.ts +7 -8
  52. package/dist/components/ui/accordion.js +1 -2
  53. package/dist/components/ui/button.d.ts +2 -3
  54. package/dist/components/ui/button.js +1 -2
  55. package/dist/components/ui/collapsible.d.ts +5 -6
  56. package/dist/components/ui/collapsible.js +1 -2
  57. package/dist/components/ui/navigation-menu.d.ts +1 -2
  58. package/dist/components/ui/navigation-menu.js +1 -2
  59. package/dist/components/ui/popover.d.ts +1 -2
  60. package/dist/components/ui/popover.js +1 -2
  61. package/dist/components/ui/scroll-area.d.ts +1 -2
  62. package/dist/components/ui/scroll-area.js +1 -2
  63. package/dist/components/ui/tabs.d.ts +7 -8
  64. package/dist/components/ui/tabs.js +1 -2
  65. package/dist/contexts/i18n.js +1 -2
  66. package/dist/contexts/search.d.ts +1 -2
  67. package/dist/contexts/search.js +1 -2
  68. package/dist/contexts/tree.js +1 -2
  69. package/dist/layouts/docs/client.d.ts +8 -9
  70. package/dist/layouts/docs/client.js +1 -2
  71. package/dist/layouts/docs/index.d.ts +3 -4
  72. package/dist/layouts/docs/index.js +1 -2
  73. package/dist/layouts/docs/page/client.d.ts +8 -9
  74. package/dist/layouts/docs/page/client.js +1 -2
  75. package/dist/layouts/docs/page/index.d.ts +6 -7
  76. package/dist/layouts/docs/page/index.js +1 -2
  77. package/dist/layouts/docs/sidebar.d.ts +13 -14
  78. package/dist/layouts/docs/sidebar.js +2 -3
  79. package/dist/layouts/home/client.d.ts +3 -4
  80. package/dist/layouts/home/client.js +2 -3
  81. package/dist/layouts/home/index.d.ts +3 -4
  82. package/dist/layouts/home/index.js +1 -2
  83. package/dist/layouts/home/navbar.d.ts +7 -8
  84. package/dist/layouts/home/navbar.js +1 -2
  85. package/dist/layouts/notebook/client.d.ts +9 -10
  86. package/dist/layouts/notebook/client.js +1 -2
  87. package/dist/layouts/notebook/index.d.ts +3 -4
  88. package/dist/layouts/notebook/index.js +1 -2
  89. package/dist/layouts/notebook/page/client.d.ts +8 -9
  90. package/dist/layouts/notebook/page/client.js +1 -2
  91. package/dist/layouts/notebook/page/index.d.ts +6 -7
  92. package/dist/layouts/notebook/page/index.js +1 -2
  93. package/dist/layouts/notebook/sidebar.d.ts +18 -19
  94. package/dist/layouts/notebook/sidebar.js +2 -3
  95. package/dist/layouts/shared/index.d.ts +4 -5
  96. package/dist/layouts/shared/index.js +1 -2
  97. package/dist/layouts/shared/language-toggle.d.ts +3 -4
  98. package/dist/layouts/shared/language-toggle.js +1 -2
  99. package/dist/layouts/shared/search-toggle.d.ts +4 -5
  100. package/dist/layouts/shared/search-toggle.js +1 -2
  101. package/dist/layouts/shared/theme-toggle.d.ts +3 -4
  102. package/dist/layouts/shared/theme-toggle.js +1 -2
  103. package/dist/mdx.d.ts +11 -12
  104. package/dist/mdx.js +1 -2
  105. package/dist/mdx.server.d.ts +1 -2
  106. package/dist/mdx.server.js +1 -2
  107. package/dist/page.d.ts +4 -5
  108. package/dist/page.js +1 -2
  109. package/dist/provider/base.d.ts +3 -4
  110. package/dist/provider/base.js +1 -2
  111. package/dist/provider/next.d.ts +3 -4
  112. package/dist/provider/next.js +1 -2
  113. package/dist/provider/react-router.d.ts +3 -4
  114. package/dist/provider/react-router.js +1 -2
  115. package/dist/provider/tanstack.d.ts +3 -4
  116. package/dist/provider/tanstack.js +1 -2
  117. package/dist/provider/waku.d.ts +3 -4
  118. package/dist/provider/waku.js +1 -2
  119. package/dist/style.css +0 -5
  120. package/package.json +8 -8
  121. package/dist/components/accordion.d.ts.map +0 -1
  122. package/dist/components/accordion.js.map +0 -1
  123. package/dist/components/banner.d.ts.map +0 -1
  124. package/dist/components/banner.js.map +0 -1
  125. package/dist/components/callout.d.ts.map +0 -1
  126. package/dist/components/callout.js.map +0 -1
  127. package/dist/components/card.d.ts.map +0 -1
  128. package/dist/components/card.js.map +0 -1
  129. package/dist/components/codeblock.d.ts.map +0 -1
  130. package/dist/components/codeblock.js.map +0 -1
  131. package/dist/components/dialog/search-algolia.d.ts.map +0 -1
  132. package/dist/components/dialog/search-algolia.js.map +0 -1
  133. package/dist/components/dialog/search-default.d.ts.map +0 -1
  134. package/dist/components/dialog/search-default.js.map +0 -1
  135. package/dist/components/dialog/search-orama.d.ts.map +0 -1
  136. package/dist/components/dialog/search-orama.js.map +0 -1
  137. package/dist/components/dialog/search.d.ts.map +0 -1
  138. package/dist/components/dialog/search.js.map +0 -1
  139. package/dist/components/dynamic-codeblock.d.ts.map +0 -1
  140. package/dist/components/dynamic-codeblock.js.map +0 -1
  141. package/dist/components/files.d.ts.map +0 -1
  142. package/dist/components/files.js.map +0 -1
  143. package/dist/components/github-info.d.ts.map +0 -1
  144. package/dist/components/github-info.js.map +0 -1
  145. package/dist/components/heading.d.ts.map +0 -1
  146. package/dist/components/heading.js.map +0 -1
  147. package/dist/components/image-zoom-CtfZieBH.css.map +0 -1
  148. package/dist/components/image-zoom.d.ts.map +0 -1
  149. package/dist/components/image-zoom.js.map +0 -1
  150. package/dist/components/inline-toc.d.ts.map +0 -1
  151. package/dist/components/inline-toc.js.map +0 -1
  152. package/dist/components/sidebar/base.d.ts.map +0 -1
  153. package/dist/components/sidebar/base.js.map +0 -1
  154. package/dist/components/sidebar/link-item.d.ts.map +0 -1
  155. package/dist/components/sidebar/link-item.js.map +0 -1
  156. package/dist/components/sidebar/page-tree.d.ts.map +0 -1
  157. package/dist/components/sidebar/page-tree.js.map +0 -1
  158. package/dist/components/sidebar/tabs/dropdown.d.ts.map +0 -1
  159. package/dist/components/sidebar/tabs/dropdown.js.map +0 -1
  160. package/dist/components/sidebar/tabs/index.d.ts.map +0 -1
  161. package/dist/components/sidebar/tabs/index.js.map +0 -1
  162. package/dist/components/steps.d.ts.map +0 -1
  163. package/dist/components/steps.js.map +0 -1
  164. package/dist/components/tabs.d.ts.map +0 -1
  165. package/dist/components/tabs.js.map +0 -1
  166. package/dist/components/toc/clerk.js.map +0 -1
  167. package/dist/components/toc/default.js.map +0 -1
  168. package/dist/components/toc/index.js.map +0 -1
  169. package/dist/components/type-table.d.ts.map +0 -1
  170. package/dist/components/type-table.js.map +0 -1
  171. package/dist/components/ui/accordion.d.ts.map +0 -1
  172. package/dist/components/ui/accordion.js.map +0 -1
  173. package/dist/components/ui/button.d.ts.map +0 -1
  174. package/dist/components/ui/button.js.map +0 -1
  175. package/dist/components/ui/collapsible.d.ts.map +0 -1
  176. package/dist/components/ui/collapsible.js.map +0 -1
  177. package/dist/components/ui/navigation-menu.d.ts.map +0 -1
  178. package/dist/components/ui/navigation-menu.js.map +0 -1
  179. package/dist/components/ui/popover.d.ts.map +0 -1
  180. package/dist/components/ui/popover.js.map +0 -1
  181. package/dist/components/ui/scroll-area.d.ts.map +0 -1
  182. package/dist/components/ui/scroll-area.js.map +0 -1
  183. package/dist/components/ui/tabs.d.ts.map +0 -1
  184. package/dist/components/ui/tabs.js.map +0 -1
  185. package/dist/contexts/i18n.js.map +0 -1
  186. package/dist/contexts/search.d.ts.map +0 -1
  187. package/dist/contexts/search.js.map +0 -1
  188. package/dist/contexts/tree.js.map +0 -1
  189. package/dist/layouts/docs/client.d.ts.map +0 -1
  190. package/dist/layouts/docs/client.js.map +0 -1
  191. package/dist/layouts/docs/index.d.ts.map +0 -1
  192. package/dist/layouts/docs/index.js.map +0 -1
  193. package/dist/layouts/docs/page/client.d.ts.map +0 -1
  194. package/dist/layouts/docs/page/client.js.map +0 -1
  195. package/dist/layouts/docs/page/index.d.ts.map +0 -1
  196. package/dist/layouts/docs/page/index.js.map +0 -1
  197. package/dist/layouts/docs/sidebar.d.ts.map +0 -1
  198. package/dist/layouts/docs/sidebar.js.map +0 -1
  199. package/dist/layouts/home/client.d.ts.map +0 -1
  200. package/dist/layouts/home/client.js.map +0 -1
  201. package/dist/layouts/home/index.d.ts.map +0 -1
  202. package/dist/layouts/home/index.js.map +0 -1
  203. package/dist/layouts/home/navbar.d.ts.map +0 -1
  204. package/dist/layouts/home/navbar.js.map +0 -1
  205. package/dist/layouts/notebook/client.d.ts.map +0 -1
  206. package/dist/layouts/notebook/client.js.map +0 -1
  207. package/dist/layouts/notebook/index.d.ts.map +0 -1
  208. package/dist/layouts/notebook/index.js.map +0 -1
  209. package/dist/layouts/notebook/page/client.d.ts.map +0 -1
  210. package/dist/layouts/notebook/page/client.js.map +0 -1
  211. package/dist/layouts/notebook/page/index.d.ts.map +0 -1
  212. package/dist/layouts/notebook/page/index.js.map +0 -1
  213. package/dist/layouts/notebook/sidebar.d.ts.map +0 -1
  214. package/dist/layouts/notebook/sidebar.js.map +0 -1
  215. package/dist/layouts/shared/index.d.ts.map +0 -1
  216. package/dist/layouts/shared/index.js.map +0 -1
  217. package/dist/layouts/shared/language-toggle.d.ts.map +0 -1
  218. package/dist/layouts/shared/language-toggle.js.map +0 -1
  219. package/dist/layouts/shared/search-toggle.d.ts.map +0 -1
  220. package/dist/layouts/shared/search-toggle.js.map +0 -1
  221. package/dist/layouts/shared/theme-toggle.d.ts.map +0 -1
  222. package/dist/layouts/shared/theme-toggle.js.map +0 -1
  223. package/dist/mdx.d.ts.map +0 -1
  224. package/dist/mdx.js.map +0 -1
  225. package/dist/mdx.server.d.ts.map +0 -1
  226. package/dist/mdx.server.js.map +0 -1
  227. package/dist/page.d.ts.map +0 -1
  228. package/dist/page.js.map +0 -1
  229. package/dist/provider/base.d.ts.map +0 -1
  230. package/dist/provider/base.js.map +0 -1
  231. package/dist/provider/next.d.ts.map +0 -1
  232. package/dist/provider/next.js.map +0 -1
  233. package/dist/provider/react-router.d.ts.map +0 -1
  234. package/dist/provider/react-router.js.map +0 -1
  235. package/dist/provider/tanstack.d.ts.map +0 -1
  236. package/dist/provider/tanstack.js.map +0 -1
  237. package/dist/provider/waku.d.ts.map +0 -1
  238. package/dist/provider/waku.js.map +0 -1
@@ -1 +0,0 @@
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, default behaviour depends on your React.js framework.\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,\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\n/**\n * scroll to the element if `active` is true\n */\nexport function useAutoScroll(active: boolean, ref: RefObject<HTMLElement | 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 +0,0 @@
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 +0,0 @@
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 +0,0 @@
1
- {"version":3,"file":"page-tree.d.ts","names":[],"sources":["../../../src/components/sidebar/page-tree.tsx"],"sourcesContent":[],"mappings":";;;;;;UAKiB,yBAAA;QACT;UAAW,QAAA,CAAS;EADX,CAAA,CAAA;EACE,MAAS,EAClB,EADkB,CAAA;IAApB,IAAA,EACa,QAAA,CAAS,MADtB;IACa,QAAS,EAAkB,SAAlB;EAAkB,CAAA,CAAA;EAAtC,SAAA,EACG,EADH,CAAA;IACc,IAAS,EAAT,QAAA,CAAS,SAAA;EAApB,CAAA,CAAA;;AACZ,KAEI,kBAAA,GAAqB,IAAH,CAAA,OACd,cAAA,EAAA,kBADqB,GAAA,eAAA,GAAA,mBAAA,GAAA,sBAAA,GAAA,sBAAA,GAAA,aAAA,CAAA;AAUd,iBAAA,sBAAA,CAAsB;EAAA,aAAA;EAAA,oBAAA;EAAA,iBAAA;EAAA,oBAAA;EAAA,gBAAA;EAAA;AAAA,CAAA,EAOnC,kBAPmC,CAAA,EAAA,CAAA,UAAA,EAoCQ,OApCR,CAoCgB,yBApChB,CAAA,EAAA,GAoC0C,mBAAA,CAAA,GAAA,CAAA,OApC1C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-tree.js","names":["Fragment"],"sources":["../../../src/components/sidebar/page-tree.tsx"],"sourcesContent":["import { useTreeContext, useTreePath } from '@/contexts/tree';\nimport { type FC, type ReactNode, useMemo, Fragment } from 'react';\nimport type * as PageTree from 'fumadocs-core/page-tree';\nimport type * as Base from './base';\n\nexport interface SidebarPageTreeComponents {\n Item: FC<{ item: PageTree.Item }>;\n Folder: FC<{ item: PageTree.Folder; children: ReactNode }>;\n Separator: FC<{ item: PageTree.Separator }>;\n}\n\ntype InternalComponents = Pick<\n typeof Base,\n | 'SidebarSeparator'\n | 'SidebarFolder'\n | 'SidebarFolderLink'\n | 'SidebarFolderContent'\n | 'SidebarFolderTrigger'\n | 'SidebarItem'\n>;\n\nexport function createPageTreeRenderer({\n SidebarFolder,\n SidebarFolderContent,\n SidebarFolderLink,\n SidebarFolderTrigger,\n SidebarSeparator,\n SidebarItem,\n}: InternalComponents) {\n function PageTreeFolder({ item, children }: { item: PageTree.Folder; children: ReactNode }) {\n const path = useTreePath();\n\n return (\n <SidebarFolder\n collapsible={item.collapsible}\n active={path.includes(item)}\n defaultOpen={item.defaultOpen}\n >\n {item.index ? (\n <SidebarFolderLink href={item.index.url} external={item.index.external}>\n {item.icon}\n {item.name}\n </SidebarFolderLink>\n ) : (\n <SidebarFolderTrigger>\n {item.icon}\n {item.name}\n </SidebarFolderTrigger>\n )}\n <SidebarFolderContent>{children}</SidebarFolderContent>\n </SidebarFolder>\n );\n }\n\n /**\n * Render sidebar items from page tree\n */\n return function SidebarPageTree(components: Partial<SidebarPageTreeComponents>) {\n const { root } = useTreeContext();\n const { Separator, Item, Folder = PageTreeFolder } = components;\n\n return useMemo(() => {\n function renderSidebarList(items: PageTree.Node[]) {\n return items.map((item, i) => {\n if (item.type === 'separator') {\n if (Separator) return <Separator key={i} item={item} />;\n return (\n <SidebarSeparator key={i}>\n {item.icon}\n {item.name}\n </SidebarSeparator>\n );\n }\n\n if (item.type === 'folder') {\n return (\n <Folder key={i} item={item}>\n {renderSidebarList(item.children)}\n </Folder>\n );\n }\n\n if (Item) return <Item key={item.url} item={item} />;\n return (\n <SidebarItem key={item.url} href={item.url} external={item.external} icon={item.icon}>\n {item.name}\n </SidebarItem>\n );\n });\n }\n\n return <Fragment key={root.$id}>{renderSidebarList(root.children)}</Fragment>;\n }, [Folder, Item, Separator, root]);\n };\n}\n"],"mappings":";;;;;AAqBA,SAAgB,uBAAuB,EACrC,eACA,sBACA,mBACA,sBACA,kBACA,eACqB;CACrB,SAAS,eAAe,EAAE,MAAM,YAA4D;EAC1F,MAAM,sCAAoB;AAE1B,SACE,qBAAC;GACC,aAAa,KAAK;GAClB,QAAQ,KAAK,SAAS,KAAK;GAC3B,aAAa,KAAK;cAEjB,KAAK,QACJ,qBAAC;IAAkB,MAAM,KAAK,MAAM;IAAK,UAAU,KAAK,MAAM;eAC3D,KAAK,MACL,KAAK;KACY,GAEpB,qBAAC,mCACE,KAAK,MACL,KAAK,QACe,EAEzB,oBAAC,wBAAsB,WAAgC;IACzC;;;;;AAOpB,QAAO,SAAS,gBAAgB,YAAgD;EAC9E,MAAM,EAAE,2CAAyB;EACjC,MAAM,EAAE,WAAW,MAAM,SAAS,mBAAmB;AAErD,SAAO,cAAc;GACnB,SAAS,kBAAkB,OAAwB;AACjD,WAAO,MAAM,KAAK,MAAM,MAAM;AAC5B,SAAI,KAAK,SAAS,aAAa;AAC7B,UAAI,UAAW,QAAO,oBAAC,aAAwB,QAAT,EAAiB;AACvD,aACE,qBAAC,+BACE,KAAK,MACL,KAAK,SAFe,EAGJ;;AAIvB,SAAI,KAAK,SAAS,SAChB,QACE,oBAAC;MAAqB;gBACnB,kBAAkB,KAAK,SAAS;QADtB,EAEJ;AAIb,SAAI,KAAM,QAAO,oBAAC,QAA0B,QAAhB,KAAK,IAAmB;AACpD,YACE,oBAAC;MAA2B,MAAM,KAAK;MAAK,UAAU,KAAK;MAAU,MAAM,KAAK;gBAC7E,KAAK;QADU,KAAK,IAET;MAEhB;;AAGJ,UAAO,oBAACA,wBAAyB,kBAAkB,KAAK,SAAS,IAA3C,KAAK,IAAkD;KAC5E;GAAC;GAAQ;GAAM;GAAW;GAAK,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dropdown.d.ts","names":[],"sources":["../../../../src/components/sidebar/tabs/dropdown.tsx"],"sourcesContent":[],"mappings":";;;;;UAWiB,mBAAA,SAA4B;UACnC;;AADO,iBAID,mBAAA,CAHN;EAAA,OAAA;EADmC,WAAU;EAAA,GAAA;AAMrD,CANqD,EAAA;EAIvC,WAAA,CAAA,EAKA,SALmB;EACjC,OAAA,EAKS,mBALT,EAAA;CACA,GAKE,cALF,CAAA,QAAA,CAAA,CAAA,EAK0B,mBAAA,CAAA,GAAA,CAAA,OAL1B;AAGc,iBAkFA,WAAA,CAlFA,GAAA,EAkFiB,UAlFjB,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,OAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dropdown.js","names":["item","isActive"],"sources":["../../../../src/components/sidebar/tabs/dropdown.tsx"],"sourcesContent":["'use client';\nimport { Check, ChevronsUpDown } from 'lucide-react';\nimport { type ComponentProps, type ReactNode, useMemo, useState } from 'react';\nimport Link from 'fumadocs-core/link';\nimport { usePathname } from 'fumadocs-core/framework';\nimport { cn } from '@fumadocs/ui/cn';\nimport { isActive, normalize } from '@fumadocs/ui/urls';\nimport { useSidebar } from '@/components/sidebar/base';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport type { SidebarTab } from '.';\n\nexport interface SidebarTabWithProps extends SidebarTab {\n props?: ComponentProps<'a'>;\n}\n\nexport function SidebarTabsDropdown({\n options,\n placeholder,\n ...props\n}: {\n placeholder?: ReactNode;\n options: SidebarTabWithProps[];\n} & ComponentProps<'button'>) {\n const [open, setOpen] = useState(false);\n const { closeOnRedirect } = useSidebar();\n const pathname = usePathname();\n\n const selected = useMemo(() => {\n return options.findLast((item) => isTabActive(item, pathname));\n }, [options, pathname]);\n\n const onClick = () => {\n closeOnRedirect.current = false;\n setOpen(false);\n };\n\n const item = selected ? (\n <>\n <div className=\"size-9 shrink-0 empty:hidden md:size-5\">{selected.icon}</div>\n <div>\n <p className=\"text-sm font-medium\">{selected.title}</p>\n <p className=\"text-sm text-fd-muted-foreground empty:hidden md:hidden\">\n {selected.description}\n </p>\n </div>\n </>\n ) : (\n placeholder\n );\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n {item && (\n <PopoverTrigger\n {...props}\n className={cn(\n 'flex items-center gap-2 rounded-lg p-2 border bg-fd-secondary/50 text-start text-fd-secondary-foreground transition-colors hover:bg-fd-accent data-[state=open]:bg-fd-accent data-[state=open]:text-fd-accent-foreground',\n props.className,\n )}\n >\n {item}\n <ChevronsUpDown className=\"shrink-0 ms-auto size-4 text-fd-muted-foreground\" />\n </PopoverTrigger>\n )}\n <PopoverContent className=\"flex flex-col gap-1 w-(--radix-popover-trigger-width) p-1 fd-scroll-container\">\n {options.map((item) => {\n const isActive = selected && item.url === selected.url;\n if (!isActive && item.unlisted) return;\n\n return (\n <Link\n key={item.url}\n href={item.url}\n onClick={onClick}\n {...item.props}\n className={cn(\n 'flex items-center gap-2 rounded-lg p-1.5 hover:bg-fd-accent hover:text-fd-accent-foreground',\n item.props?.className,\n )}\n >\n <div className=\"shrink-0 size-9 md:mb-auto md:size-5 empty:hidden\">{item.icon}</div>\n <div>\n <p className=\"text-sm font-medium leading-none\">{item.title}</p>\n <p className=\"text-[0.8125rem] text-fd-muted-foreground mt-1 empty:hidden\">\n {item.description}\n </p>\n </div>\n\n <Check\n className={cn(\n 'shrink-0 ms-auto size-3.5 text-fd-primary',\n !isActive && 'invisible',\n )}\n />\n </Link>\n );\n })}\n </PopoverContent>\n </Popover>\n );\n}\n\nexport function isTabActive(tab: SidebarTab, pathname: string) {\n if (tab.urls) return tab.urls.has(normalize(pathname));\n\n return isActive(tab.url, pathname, true);\n}\n"],"mappings":";;;;;;;;;;;;;AAeA,SAAgB,oBAAoB,EAClC,SACA,aACA,GAAG,SAIyB;CAC5B,MAAM,CAAC,MAAM,WAAW,SAAS,MAAM;CACvC,MAAM,EAAE,oBAAoB,YAAY;CACxC,MAAM,WAAW,aAAa;CAE9B,MAAM,WAAW,cAAc;AAC7B,SAAO,QAAQ,UAAU,WAAS,YAAYA,QAAM,SAAS,CAAC;IAC7D,CAAC,SAAS,SAAS,CAAC;CAEvB,MAAM,gBAAgB;AACpB,kBAAgB,UAAU;AAC1B,UAAQ,MAAM;;CAGhB,MAAM,OAAO,WACX,4CACE,oBAAC;EAAI,WAAU;YAA0C,SAAS;GAAW,EAC7E,qBAAC,oBACC,oBAAC;EAAE,WAAU;YAAuB,SAAS;GAAU,EACvD,oBAAC;EAAE,WAAU;YACV,SAAS;GACR,IACA,IACL,GAEH;AAGF,QACE,qBAAC;EAAc;EAAM,cAAc;aAChC,QACC,qBAAC;GACC,GAAI;GACJ,WAAW,GACT,4NACA,MAAM,UACP;cAEA,MACD,oBAAC,kBAAe,WAAU,qDAAqD;IAChE,EAEnB,oBAAC;GAAe,WAAU;aACvB,QAAQ,KAAK,WAAS;IACrB,MAAMC,aAAW,YAAYD,OAAK,QAAQ,SAAS;AACnD,QAAI,CAACC,cAAYD,OAAK,SAAU;AAEhC,WACE,qBAAC;KAEC,MAAMA,OAAK;KACF;KACT,GAAIA,OAAK;KACT,WAAW,GACT,+FACAA,OAAK,OAAO,UACb;;MAED,oBAAC;OAAI,WAAU;iBAAqDA,OAAK;QAAW;MACpF,qBAAC,oBACC,oBAAC;OAAE,WAAU;iBAAoCA,OAAK;QAAU,EAChE,oBAAC;OAAE,WAAU;iBACVA,OAAK;QACJ,IACA;MAEN,oBAAC,SACC,WAAW,GACT,6CACA,CAACC,cAAY,YACd,GACD;;OAtBGD,OAAK,IAuBL;KAET;IACa;GACT;;AAId,SAAgB,YAAY,KAAiB,UAAkB;AAC7D,KAAI,IAAI,KAAM,QAAO,IAAI,KAAK,IAAI,UAAU,SAAS,CAAC;AAEtD,QAAO,SAAS,IAAI,KAAK,UAAU,KAAK"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/components/sidebar/tabs/index.tsx"],"sourcesContent":[],"mappings":";;;;UAGiB,UAAA;;AAAjB;;EAOS,GAAA,EAAA,MAAA;EACO,IAAA,CAAA,EAFP,SAEO;EAKP,KAAA,EANA,SAMA;EAAG,WAAA,CAAA,EALI,SAKJ;EAIK;;;EAC4C,IAAA,CAAA,EALpD,GAKoD,CAAA,MAAA,CAAA;EAAU,QAAA,CAAA,EAAA,OAAA;AAgBvE;AACQ,UAlBS,qBAAA,CAkBA;EACb,SAAA,CAAA,EAAA,CAAA,MAAA,EAlBmB,UAkBnB,EAAA,IAAA,EAlBqC,QAAA,CAAS,MAkB9C,EAAA,GAlByD,UAkBzD,GAAA,IAAA;;AACD,iBAHa,cAAA,CAGb,IAAA,EAFK,QAAA,CAAS,IAEd,EAAA;EAAA;AAAA,CAAA,CAAA,EADiC,qBACjC,CAAA,EAAA,UAAA,EAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["defaultTransform: GetSidebarTabsOptions['transform']","results: SidebarTab[]","option: SidebarTab"],"sources":["../../../../src/components/sidebar/tabs/index.tsx"],"sourcesContent":["import type * as PageTree from 'fumadocs-core/page-tree';\nimport type { ReactNode } from 'react';\n\nexport interface SidebarTab {\n /**\n * Redirect URL of the folder, usually the index page\n */\n url: string;\n\n icon?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n\n /**\n * Detect from a list of urls\n */\n urls?: Set<string>;\n unlisted?: boolean;\n}\n\nexport interface GetSidebarTabsOptions {\n transform?: (option: SidebarTab, node: PageTree.Folder) => SidebarTab | null;\n}\n\nconst defaultTransform: GetSidebarTabsOptions['transform'] = (option, node) => {\n if (!node.icon) return option;\n\n return {\n ...option,\n icon: (\n <div className=\"size-full [&_svg]:size-full max-md:p-1.5 max-md:rounded-md max-md:border max-md:bg-fd-secondary\">\n {node.icon}\n </div>\n ),\n };\n};\n\nexport function getSidebarTabs(\n tree: PageTree.Root,\n { transform = defaultTransform }: GetSidebarTabsOptions = {},\n): SidebarTab[] {\n const results: SidebarTab[] = [];\n\n function scanOptions(node: PageTree.Root | PageTree.Folder, unlisted?: boolean) {\n if ('root' in node && node.root) {\n const urls = getFolderUrls(node);\n\n if (urls.size > 0) {\n const option: SidebarTab = {\n url: urls.values().next().value ?? '',\n title: node.name,\n icon: node.icon,\n unlisted,\n description: node.description,\n urls,\n };\n\n const mapped = transform ? transform(option, node) : option;\n if (mapped) results.push(mapped);\n }\n }\n\n for (const child of node.children) {\n if (child.type === 'folder') scanOptions(child, unlisted);\n }\n }\n\n scanOptions(tree);\n if (tree.fallback) scanOptions(tree.fallback, true);\n\n return results;\n}\n\nfunction getFolderUrls(folder: PageTree.Folder, output: Set<string> = new Set()): Set<string> {\n if (folder.index) output.add(folder.index.url);\n\n for (const child of folder.children) {\n if (child.type === 'page' && !child.external) output.add(child.url);\n if (child.type === 'folder') getFolderUrls(child, output);\n }\n\n return output;\n}\n"],"mappings":";;;AAwBA,MAAMA,oBAAwD,QAAQ,SAAS;AAC7E,KAAI,CAAC,KAAK,KAAM,QAAO;AAEvB,QAAO;EACL,GAAG;EACH,MACE,oBAAC;GAAI,WAAU;aACZ,KAAK;IACF;EAET;;AAGH,SAAgB,eACd,MACA,EAAE,YAAY,qBAA4C,EAAE,EAC9C;CACd,MAAMC,UAAwB,EAAE;CAEhC,SAAS,YAAY,MAAuC,UAAoB;AAC9E,MAAI,UAAU,QAAQ,KAAK,MAAM;GAC/B,MAAM,OAAO,cAAc,KAAK;AAEhC,OAAI,KAAK,OAAO,GAAG;IACjB,MAAMC,SAAqB;KACzB,KAAK,KAAK,QAAQ,CAAC,MAAM,CAAC,SAAS;KACnC,OAAO,KAAK;KACZ,MAAM,KAAK;KACX;KACA,aAAa,KAAK;KAClB;KACD;IAED,MAAM,SAAS,YAAY,UAAU,QAAQ,KAAK,GAAG;AACrD,QAAI,OAAQ,SAAQ,KAAK,OAAO;;;AAIpC,OAAK,MAAM,SAAS,KAAK,SACvB,KAAI,MAAM,SAAS,SAAU,aAAY,OAAO,SAAS;;AAI7D,aAAY,KAAK;AACjB,KAAI,KAAK,SAAU,aAAY,KAAK,UAAU,KAAK;AAEnD,QAAO;;AAGT,SAAS,cAAc,QAAyB,yBAAsB,IAAI,KAAK,EAAe;AAC5F,KAAI,OAAO,MAAO,QAAO,IAAI,OAAO,MAAM,IAAI;AAE9C,MAAK,MAAM,SAAS,OAAO,UAAU;AACnC,MAAI,MAAM,SAAS,UAAU,CAAC,MAAM,SAAU,QAAO,IAAI,MAAM,IAAI;AACnE,MAAI,MAAM,SAAS,SAAU,eAAc,OAAO,OAAO;;AAG3D,QAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"steps.d.ts","names":[],"sources":["../../src/components/steps.tsx"],"sourcesContent":[],"mappings":";;;;iBAEgB,KAAA;;;YAAgC;IAAW,mBAAA,CAAA,GAAA,CAAA;AAA3C,iBAIA,IAAA,CAJK;EAAA;CAAA,EAAA;EAAG,QAAA,EAIuB,SAJvB;CAAwB,CAAA,EAIU,mBAAA,CAAA,GAAA,CAAA,OAJV"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"steps.js","names":[],"sources":["../../src/components/steps.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nexport function Steps({ children }: { children: ReactNode }) {\n return <div className=\"fd-steps\">{children}</div>;\n}\n\nexport function Step({ children }: { children: ReactNode }) {\n return <div className=\"fd-step\">{children}</div>;\n}\n"],"mappings":";;;AAEA,SAAgB,MAAM,EAAE,YAAqC;AAC3D,QAAO,oBAAC;EAAI,WAAU;EAAY;GAAe;;AAGnD,SAAgB,KAAK,EAAE,YAAqC;AAC1D,QAAO,oBAAC;EAAI,WAAU;EAAW;GAAe"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tabs.d.ts","names":[],"sources":["../../src/components/tabs.tsx"],"sourcesContent":[],"mappings":";;;;;;;UAkBiB,SAAA,SAAkB,KACjC,sBAAsB;;;;EADP,KAAA,CAAA,EAAA,MAAU,EAAA;EACH;;;;;EAgCX,YAYX,CAAA,EAAA,MAAA;EAAA;;;EAZmB,KAAA,CAAA,EAdX,SAcW;;AAAA,cAAR,QAAQ,EAAA,KAAA,CAAA,yBAAA,CAAA,IAAA,CAYnB,qBAAA,CAZmB,aAAA,GAAA,KAAA,CAAA,aAAA,CAAA,cAAA,CAAA,EAAA,KAAA,CAAA,GAAA,KAAA,CAAA,aAAA,CAAA,cAAA,CAAA,CAAA;AAAA,cAeR,WAfQ,EAeG,KAAA,CAAA,yBAfH,CAeG,IAfH,CA2BnB,qBAAA,CAZsB,gBAAA,GAAA,KAAA,CAAA,aAfH,CAeG,iBAfH,CAAA,EAAA,KAAA,CAAA,GAeG,KAAA,CAAA,aAfH,CAeG,iBAfH,CAAA,CAAA;AAAA,iBA8BL,IAAA,CA9BK;EAAA,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,KAAA;EAAA,YAAA;EAAA,YAAA;EAAA,GAAA;AAAA,CAAA,EAsClB,SAtCkB,CAAA,EAsCT,oBAAA,CAAA,GAAA,CAAA,OAtCS;AAeR,UA0DI,QAAA,SAAiB,IA9ChC,CA8CqC,cA9CrC,CAAA,OA8C2D,aA9C3D,CAAA,EAAA,OAAA,CAAA,CAAA;EAAA;;;EAZsB,KAAA,CAAA,EAAA,MAAA;;AAAA,iBAiER,GAAA,CAjEQ;EAAA,KAAA;EAAA,GAAA;AAAA,CAAA,EAiEiB,QAjEjB,CAAA,EAiEyB,oBAAA,CAAA,GAAA,CAAA,OAjEzB;AAAA,iBAmFR,WAAA,CAnFQ;EAAA,KAAA;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EAuFrB,cAvFqB,CAAA,OAuFC,aAvFD,CAAA,CAAA,EAuFsB,oBAAA,CAAA,GAAA,CAAA,OAvFtB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tabs.js","names":["Unstyled.TabsList","Unstyled.TabsTrigger","Unstyled.Tabs","Unstyled.TabsContent"],"sources":["../../src/components/tabs.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport {\n type ComponentProps,\n createContext,\n type ReactNode,\n useContext,\n useEffect,\n useId,\n useMemo,\n useState,\n} from 'react';\nimport { cn } from '@fumadocs/ui/cn';\nimport * as Unstyled from './ui/tabs';\n\ntype CollectionKey = string | symbol;\n\nexport interface TabsProps extends Omit<\n ComponentProps<typeof Unstyled.Tabs>,\n 'value' | 'onValueChange'\n> {\n /**\n * Use simple mode instead of advanced usage as documented in https://radix-ui.com/primitives/docs/components/tabs.\n */\n items?: string[];\n\n /**\n * Shortcut for `defaultValue` when `items` is provided.\n *\n * @defaultValue 0\n */\n defaultIndex?: number;\n\n /**\n * Additional label in tabs list when `items` is provided.\n */\n label?: ReactNode;\n}\n\nconst TabsContext = createContext<{\n items?: string[];\n collection: CollectionKey[];\n} | null>(null);\n\nfunction useTabContext() {\n const ctx = useContext(TabsContext);\n if (!ctx) throw new Error('You must wrap your component in <Tabs>');\n return ctx;\n}\n\nexport const TabsList = React.forwardRef<\n React.ComponentRef<typeof Unstyled.TabsList>,\n React.ComponentPropsWithoutRef<typeof Unstyled.TabsList>\n>((props, ref) => (\n <Unstyled.TabsList\n ref={ref}\n {...props}\n className={cn(\n 'flex gap-3.5 text-fd-secondary-foreground overflow-x-auto px-4 not-prose',\n props.className,\n )}\n />\n));\nTabsList.displayName = 'TabsList';\n\nexport const TabsTrigger = React.forwardRef<\n React.ComponentRef<typeof Unstyled.TabsTrigger>,\n React.ComponentPropsWithoutRef<typeof Unstyled.TabsTrigger>\n>((props, ref) => (\n <Unstyled.TabsTrigger\n ref={ref}\n {...props}\n className={cn(\n 'inline-flex items-center gap-2 whitespace-nowrap text-fd-muted-foreground border-b border-transparent py-2 text-sm font-medium transition-colors [&_svg]:size-4 hover:text-fd-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=active]:border-fd-primary data-[state=active]:text-fd-primary',\n props.className,\n )}\n />\n));\nTabsTrigger.displayName = 'TabsTrigger';\n\nexport function Tabs({\n ref,\n className,\n items,\n label,\n defaultIndex = 0,\n defaultValue = items ? escapeValue(items[defaultIndex]) : undefined,\n ...props\n}: TabsProps) {\n const [value, setValue] = useState(defaultValue);\n const collection = useMemo<CollectionKey[]>(() => [], []);\n\n return (\n <Unstyled.Tabs\n ref={ref}\n className={cn(\n 'flex flex-col overflow-hidden rounded-xl border bg-fd-secondary my-4',\n className,\n )}\n value={value}\n onValueChange={(v: string) => {\n if (items && !items.some((item) => escapeValue(item) === v)) return;\n setValue(v);\n }}\n {...props}\n >\n {items && (\n <TabsList>\n {label && <span className=\"text-sm font-medium my-auto me-auto\">{label}</span>}\n {items.map((item) => (\n <TabsTrigger key={item} value={escapeValue(item)}>\n {item}\n </TabsTrigger>\n ))}\n </TabsList>\n )}\n <TabsContext.Provider value={useMemo(() => ({ items, collection }), [collection, items])}>\n {props.children}\n </TabsContext.Provider>\n </Unstyled.Tabs>\n );\n}\n\nexport interface TabProps extends Omit<ComponentProps<typeof Unstyled.TabsContent>, 'value'> {\n /**\n * Value of tab, detect from index if unspecified.\n */\n value?: string;\n}\n\nexport function Tab({ value, ...props }: TabProps) {\n const { items } = useTabContext();\n const resolved =\n value ??\n // eslint-disable-next-line react-hooks/rules-of-hooks -- `value` is not supposed to change\n items?.at(useCollectionIndex());\n if (!resolved)\n throw new Error(\n 'Failed to resolve tab `value`, please pass a `value` prop to the Tab component.',\n );\n\n return (\n <TabsContent value={escapeValue(resolved)} {...props}>\n {props.children}\n </TabsContent>\n );\n}\n\nexport function TabsContent({\n value,\n className,\n ...props\n}: ComponentProps<typeof Unstyled.TabsContent>) {\n return (\n <Unstyled.TabsContent\n value={value}\n forceMount\n className={cn(\n 'p-4 text-[0.9375rem] bg-fd-background rounded-xl outline-none prose-no-margin data-[state=inactive]:hidden [&>figure:only-child]:-m-4 [&>figure:only-child]:border-none',\n className,\n )}\n {...props}\n >\n {props.children}\n </Unstyled.TabsContent>\n );\n}\n\n/**\n * Inspired by Headless UI.\n *\n * Return the index of children, this is made possible by registering the order of render from children using React context.\n * This is supposed by work with pre-rendering & pure client-side rendering.\n */\nfunction useCollectionIndex() {\n const key = useId();\n const { collection } = useTabContext();\n\n useEffect(() => {\n return () => {\n const idx = collection.indexOf(key);\n if (idx !== -1) collection.splice(idx, 1);\n };\n }, [key, collection]);\n\n if (!collection.includes(key)) collection.push(key);\n return collection.indexOf(key);\n}\n\n/**\n * only escape whitespaces in values in simple mode\n */\nfunction escapeValue(v: string): string {\n return v.toLowerCase().replace(/\\s/, '-');\n}\n"],"mappings":";;;;;;;;;AAwCA,MAAM,cAAc,cAGV,KAAK;AAEf,SAAS,gBAAgB;CACvB,MAAM,MAAM,WAAW,YAAY;AACnC,KAAI,CAAC,IAAK,OAAM,IAAI,MAAM,yCAAyC;AACnE,QAAO;;AAGT,MAAa,WAAW,MAAM,YAG3B,OAAO,QACR,oBAACA;CACM;CACL,GAAI;CACJ,WAAW,GACT,4EACA,MAAM,UACP;EACD,CACF;AACF,SAAS,cAAc;AAEvB,MAAa,cAAc,MAAM,YAG9B,OAAO,QACR,oBAACC;CACM;CACL,GAAI;CACJ,WAAW,GACT,8TACA,MAAM,UACP;EACD,CACF;AACF,YAAY,cAAc;AAE1B,SAAgB,KAAK,EACnB,KACA,WACA,OACA,OACA,eAAe,GACf,eAAe,QAAQ,YAAY,MAAM,cAAc,GAAG,QAC1D,GAAG,SACS;CACZ,MAAM,CAAC,OAAO,YAAY,SAAS,aAAa;CAChD,MAAM,aAAa,cAA+B,EAAE,EAAE,EAAE,CAAC;AAEzD,QACE,qBAACC;EACM;EACL,WAAW,GACT,wEACA,UACD;EACM;EACP,gBAAgB,MAAc;AAC5B,OAAI,SAAS,CAAC,MAAM,MAAM,SAAS,YAAY,KAAK,KAAK,EAAE,CAAE;AAC7D,YAAS,EAAE;;EAEb,GAAI;aAEH,SACC,qBAAC,uBACE,SAAS,oBAAC;GAAK,WAAU;aAAuC;IAAa,EAC7E,MAAM,KAAK,SACV,oBAAC;GAAuB,OAAO,YAAY,KAAK;aAC7C;KADe,KAEJ,CACd,IACO,EAEb,oBAAC,YAAY;GAAS,OAAO,eAAe;IAAE;IAAO;IAAY,GAAG,CAAC,YAAY,MAAM,CAAC;aACrF,MAAM;IACc;GACT;;AAWpB,SAAgB,IAAI,EAAE,OAAO,GAAG,SAAmB;CACjD,MAAM,EAAE,UAAU,eAAe;CACjC,MAAM,WACJ,SAEA,OAAO,GAAG,oBAAoB,CAAC;AACjC,KAAI,CAAC,SACH,OAAM,IAAI,MACR,kFACD;AAEH,QACE,oBAAC;EAAY,OAAO,YAAY,SAAS;EAAE,GAAI;YAC5C,MAAM;GACK;;AAIlB,SAAgB,YAAY,EAC1B,OACA,WACA,GAAG,SAC2C;AAC9C,QACE,oBAACC;EACQ;EACP;EACA,WAAW,GACT,2KACA,UACD;EACD,GAAI;YAEH,MAAM;GACc;;;;;;;;AAU3B,SAAS,qBAAqB;CAC5B,MAAM,MAAM,OAAO;CACnB,MAAM,EAAE,eAAe,eAAe;AAEtC,iBAAgB;AACd,eAAa;GACX,MAAM,MAAM,WAAW,QAAQ,IAAI;AACnC,OAAI,QAAQ,GAAI,YAAW,OAAO,KAAK,EAAE;;IAE1C,CAAC,KAAK,WAAW,CAAC;AAErB,KAAI,CAAC,WAAW,SAAS,IAAI,CAAE,YAAW,KAAK,IAAI;AACnD,QAAO,WAAW,QAAQ,IAAI;;;;;AAMhC,SAAS,YAAY,GAAmB;AACtC,QAAO,EAAE,aAAa,CAAC,QAAQ,MAAM,IAAI"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"clerk.js","names":[],"sources":["../../../src/components/toc/clerk.tsx"],"sourcesContent":["export * from '@fumadocs/ui/components/toc/clerk';\n"],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"default.js","names":[],"sources":["../../../src/components/toc/default.tsx"],"sourcesContent":["export * from '@fumadocs/ui/components/toc/default';\n"],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/toc/index.tsx"],"sourcesContent":["export * from '@fumadocs/ui/components/toc/index';\n"],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"type-table.d.ts","names":[],"sources":["../../src/components/type-table.tsx"],"sourcesContent":[],"mappings":";;;;UASiB,aAAA;;eAEF;AAFf;AAKiB,UAAA,QAAA,CAAQ;EAIT;;;EAiBJ,WAAA,CAAA,EAjBI,SAiBJ;EAKG;;;EAeC,IAAA,EAhCR,SAgCiB;EAAG;;;EAA0C,eAAA,CAAA,EA3BlD,SA2BkD;EAAA;;;;YApB1D;;;eAKG;YAEH;;iBAaI,SAAA;;;QAA4B,eAAe;IAAW,oBAAA,CAAA,GAAA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"type-table.js","names":[],"sources":["../../src/components/type-table.tsx"],"sourcesContent":["'use client';\n\nimport { ChevronDown } from 'lucide-react';\nimport Link from 'fumadocs-core/link';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '@fumadocs/ui/cn';\nimport { type ReactNode, useState } from 'react';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible';\n\nexport interface ParameterNode {\n name: string;\n description: ReactNode;\n}\n\nexport interface TypeNode {\n /**\n * Additional description of the field\n */\n description?: ReactNode;\n\n /**\n * type signature (short)\n */\n type: ReactNode;\n\n /**\n * type signature (full)\n */\n typeDescription?: ReactNode;\n\n /**\n * Optional `href` for the type\n */\n typeDescriptionLink?: string;\n\n default?: ReactNode;\n\n required?: boolean;\n deprecated?: boolean;\n\n parameters?: ParameterNode[];\n\n returns?: ReactNode;\n}\n\nconst keyVariants = cva('text-fd-primary', {\n variants: {\n deprecated: {\n true: 'line-through text-fd-primary/50',\n },\n },\n});\n\nconst fieldVariants = cva('text-fd-muted-foreground not-prose pe-2');\n\nexport function TypeTable({ type }: { type: Record<string, TypeNode> }) {\n return (\n <div className=\"@container flex flex-col p-1 bg-fd-card text-fd-card-foreground rounded-2xl border my-6 text-sm overflow-hidden\">\n <div className=\"flex font-medium items-center px-3 py-1 not-prose text-fd-muted-foreground\">\n <p className=\"w-[25%]\">Prop</p>\n <p className=\"@max-xl:hidden\">Type</p>\n </div>\n {Object.entries(type).map(([key, value]) => (\n <Item key={key} name={key} item={value} />\n ))}\n </div>\n );\n}\n\nfunction Item({\n name,\n item: {\n parameters = [],\n description,\n required = false,\n deprecated,\n typeDescription,\n default: defaultValue,\n type,\n typeDescriptionLink,\n returns,\n },\n}: {\n name: string;\n item: TypeNode;\n}) {\n const [open, setOpen] = useState(false);\n\n return (\n <Collapsible\n open={open}\n onOpenChange={setOpen}\n className={cn(\n 'rounded-xl border overflow-hidden transition-all',\n open ? 'shadow-sm bg-fd-background not-last:mb-2' : 'border-transparent',\n )}\n >\n <CollapsibleTrigger className=\"relative flex flex-row items-center w-full group text-start px-3 py-2 not-prose hover:bg-fd-accent\">\n <code\n className={cn(\n keyVariants({\n deprecated,\n className: 'min-w-fit w-[25%] font-medium pe-2',\n }),\n )}\n >\n {name}\n {!required && '?'}\n </code>\n {typeDescriptionLink ? (\n <Link href={typeDescriptionLink} className=\"underline @max-xl:hidden\">\n {type}\n </Link>\n ) : (\n <span className=\"@max-xl:hidden\">{type}</span>\n )}\n <ChevronDown className=\"absolute end-2 size-4 text-fd-muted-foreground transition-transform group-data-[state=open]:rotate-180\" />\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div className=\"grid grid-cols-[1fr_3fr] gap-y-4 text-sm p-3 overflow-auto fd-scroll-container border-t\">\n <div className=\"text-sm prose col-span-full prose-no-margin empty:hidden\">\n {description}\n </div>\n {typeDescription && (\n <>\n <p className={cn(fieldVariants())}>Type</p>\n <p className=\"my-auto not-prose\">{typeDescription}</p>\n </>\n )}\n {defaultValue && (\n <>\n <p className={cn(fieldVariants())}>Default</p>\n <p className=\"my-auto not-prose\">{defaultValue}</p>\n </>\n )}\n {parameters.length > 0 && (\n <>\n <p className={cn(fieldVariants())}>Parameters</p>\n <div className=\"flex flex-col gap-2\">\n {parameters.map((param) => (\n <div key={param.name} className=\"inline-flex items-center flex-wrap gap-1\">\n <p className=\"font-medium not-prose text-nowrap\">{param.name} -</p>\n <div className=\"text-sm prose prose-no-margin\">{param.description}</div>\n </div>\n ))}\n </div>\n </>\n )}\n {returns && (\n <>\n <p className={cn(fieldVariants())}>Returns</p>\n <div className=\"my-auto text-sm prose prose-no-margin\">{returns}</div>\n </>\n )}\n </div>\n </CollapsibleContent>\n </Collapsible>\n );\n}\n"],"mappings":";;;;;;;;;;;AA6CA,MAAM,cAAc,IAAI,mBAAmB,EACzC,UAAU,EACR,YAAY,EACV,MAAM,mCACP,EACF,EACF,CAAC;AAEF,MAAM,gBAAgB,IAAI,0CAA0C;AAEpE,SAAgB,UAAU,EAAE,QAA4C;AACtE,QACE,qBAAC;EAAI,WAAU;aACb,qBAAC;GAAI,WAAU;cACb,oBAAC;IAAE,WAAU;cAAU;KAAQ,EAC/B,oBAAC;IAAE,WAAU;cAAiB;KAAQ;IAClC,EACL,OAAO,QAAQ,KAAK,CAAC,KAAK,CAAC,KAAK,WAC/B,oBAAC;GAAe,MAAM;GAAK,MAAM;KAAtB,IAA+B,CAC1C;GACE;;AAIV,SAAS,KAAK,EACZ,MACA,MAAM,EACJ,aAAa,EAAE,EACf,aACA,WAAW,OACX,YACA,iBACA,SAAS,cACT,MACA,qBACA,aAKD;CACD,MAAM,CAAC,MAAM,WAAW,SAAS,MAAM;AAEvC,QACE,qBAAC;EACO;EACN,cAAc;EACd,WAAW,GACT,oDACA,OAAO,6CAA6C,qBACrD;aAED,qBAAC;GAAmB,WAAU;;IAC5B,qBAAC;KACC,WAAW,GACT,YAAY;MACV;MACA,WAAW;MACZ,CAAC,CACH;gBAEA,MACA,CAAC,YAAY;MACT;IACN,sBACC,oBAAC;KAAK,MAAM;KAAqB,WAAU;eACxC;MACI,GAEP,oBAAC;KAAK,WAAU;eAAkB;MAAY;IAEhD,oBAAC,eAAY,WAAU,2GAA2G;;IAC/G,EACrB,oBAAC,gCACC,qBAAC;GAAI,WAAU;;IACb,oBAAC;KAAI,WAAU;eACZ;MACG;IACL,mBACC,4CACE,oBAAC;KAAE,WAAW,GAAG,eAAe,CAAC;eAAE;MAAQ,EAC3C,oBAAC;KAAE,WAAU;eAAqB;MAAoB,IACrD;IAEJ,gBACC,4CACE,oBAAC;KAAE,WAAW,GAAG,eAAe,CAAC;eAAE;MAAW,EAC9C,oBAAC;KAAE,WAAU;eAAqB;MAAiB,IAClD;IAEJ,WAAW,SAAS,KACnB,4CACE,oBAAC;KAAE,WAAW,GAAG,eAAe,CAAC;eAAE;MAAc,EACjD,oBAAC;KAAI,WAAU;eACZ,WAAW,KAAK,UACf,qBAAC;MAAqB,WAAU;iBAC9B,qBAAC;OAAE,WAAU;kBAAqC,MAAM,MAAK;QAAM,EACnE,oBAAC;OAAI,WAAU;iBAAiC,MAAM;QAAkB;QAFhE,MAAM,KAGV,CACN;MACE,IACL;IAEJ,WACC,4CACE,oBAAC;KAAE,WAAW,GAAG,eAAe,CAAC;eAAE;MAAW,EAC9C,oBAAC;KAAI,WAAU;eAAyC;MAAc,IACrE;;IAED,GACa;GACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"accordion.d.ts","names":[],"sources":["../../../src/components/ui/accordion.tsx"],"sourcesContent":[],"mappings":";;;;;iBAOgB,SAAA;;;GAAmC,sBAAsB,SAAA,CAAU,QAAK,mBAAA,CAAA,GAAA,CAAA;iBAYxE,aAAA;;;;GAIb,sBAAsB,SAAA,CAAU,QAAK,mBAAA,CAAA,GAAA,CAAA;iBAQxB,eAAA;;;;GAIb,sBAAsB,SAAA,CAAU,UAAO,mBAAA,CAAA,GAAA,CAAA;AA5B1B,iBA0CA,gBAAA,CA1CS;EAAA,SAAA;EAAA,QAAA;EAAA,GAAA;AAAA,CAAA,EA8CtB,cA9CsB,CAAA,OA8CA,SAAA,CAAU,OA9CV,CAAA,CAAA,EA8CkB,mBAAA,CAAA,GAAA,CAAA,OA9ClB;AAAG,iBA6DZ,gBAAA,CA7DY;EAAA,SAAA;EAAA,QAAA;EAAA,GAAA;AAAA,CAAA,EAiEzB,cAjEyB,CAAA,OAiEH,SAAA,CAAU,OAjEP,CAAA,CAAA,EAiEe,mBAAA,CAAA,GAAA,CAAA,OAjEf"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"accordion.js","names":[],"sources":["../../../src/components/ui/accordion.tsx"],"sourcesContent":["'use client';\n\nimport * as Primitive from '@radix-ui/react-accordion';\nimport { ChevronRight } from 'lucide-react';\nimport { type ComponentProps } from 'react';\nimport { cn } from '@fumadocs/ui/cn';\n\nexport function Accordion({ className, ...props }: ComponentProps<typeof Primitive.Root>) {\n return (\n <Primitive.Root\n className={cn(\n 'divide-y divide-fd-border overflow-hidden rounded-lg border bg-fd-card',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function AccordionItem({\n className,\n children,\n ...props\n}: ComponentProps<typeof Primitive.Item>) {\n return (\n <Primitive.Item className={cn('scroll-m-24', className)} {...props}>\n {children}\n </Primitive.Item>\n );\n}\n\nexport function AccordionHeader({\n className,\n children,\n ...props\n}: ComponentProps<typeof Primitive.Header>) {\n return (\n <Primitive.Header\n className={cn(\n 'not-prose flex flex-row items-center text-fd-card-foreground font-medium has-focus-visible:bg-fd-accent',\n className,\n )}\n {...props}\n >\n {children}\n </Primitive.Header>\n );\n}\n\nexport function AccordionTrigger({\n className,\n children,\n ...props\n}: ComponentProps<typeof Primitive.Trigger>) {\n return (\n <Primitive.Trigger\n className={cn(\n 'group flex flex-1 items-center gap-2 px-3 py-2.5 text-start focus-visible:outline-none',\n className,\n )}\n {...props}\n >\n <ChevronRight className=\"size-4 shrink-0 text-fd-muted-foreground transition-transform duration-200 group-data-[state=open]:rotate-90\" />\n {children}\n </Primitive.Trigger>\n );\n}\n\nexport function AccordionContent({\n className,\n children,\n ...props\n}: ComponentProps<typeof Primitive.Content>) {\n return (\n <Primitive.Content\n className={cn(\n 'overflow-hidden data-[state=closed]:animate-fd-accordion-up data-[state=open]:animate-fd-accordion-down',\n className,\n )}\n {...props}\n >\n {children}\n </Primitive.Content>\n );\n}\n"],"mappings":";;;;;;;;AAOA,SAAgB,UAAU,EAAE,WAAW,GAAG,SAAgD;AACxF,QACE,oBAAC,UAAU;EACT,WAAW,GACT,0EACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAgB,cAAc,EAC5B,WACA,UACA,GAAG,SACqC;AACxC,QACE,oBAAC,UAAU;EAAK,WAAW,GAAG,eAAe,UAAU;EAAE,GAAI;EAC1D;GACc;;AAIrB,SAAgB,gBAAgB,EAC9B,WACA,UACA,GAAG,SACuC;AAC1C,QACE,oBAAC,UAAU;EACT,WAAW,GACT,2GACA,UACD;EACD,GAAI;EAEH;GACgB;;AAIvB,SAAgB,iBAAiB,EAC/B,WACA,UACA,GAAG,SACwC;AAC3C,QACE,qBAAC,UAAU;EACT,WAAW,GACT,0FACA,UACD;EACD,GAAI;aAEJ,oBAAC,gBAAa,WAAU,iHAAiH,EACxI;GACiB;;AAIxB,SAAgB,iBAAiB,EAC/B,WACA,UACA,GAAG,SACwC;AAC3C,QACE,oBAAC,UAAU;EACT,WAAW,GACT,2GACA,UACD;EACD,GAAI;EAEH;GACiB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"button.d.ts","names":[],"sources":["../../../src/components/ui/button.tsx"],"sourcesContent":[],"mappings":";;;;cAUa,sBAiByB;;;EAjBzB,IAAA,CAAA,EAAA,MAAA,GAAA,IAeZ,GAAA,SAAA,GAAA,SAAA,GAAA,IAAA,GAAA,SAAA;AAED,CAAA,GAFC,+BAAA,CAAA,SAEyB,CAAA,GAAA,SAAY,EAAA,GAAA,MAAA;KAA1B,WAAA,GAAc,oBAAoB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"button.js","names":[],"sources":["../../../src/components/ui/button.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\nconst variants = {\n primary: 'bg-fd-primary text-fd-primary-foreground hover:bg-fd-primary/80',\n outline: 'border hover:bg-fd-accent hover:text-fd-accent-foreground',\n ghost: 'hover:bg-fd-accent hover:text-fd-accent-foreground',\n secondary:\n 'border bg-fd-secondary text-fd-secondary-foreground hover:bg-fd-accent hover:text-fd-accent-foreground',\n} as const;\n\nexport const buttonVariants = cva(\n 'inline-flex items-center justify-center rounded-md p-2 text-sm font-medium transition-colors duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring',\n {\n variants: {\n variant: variants,\n // fumadocs use `color` instead of `variant`\n color: variants,\n size: {\n sm: 'gap-1 px-2 py-1.5 text-xs',\n icon: 'p-1.5 [&_svg]:size-5',\n 'icon-sm': 'p-1.5 [&_svg]:size-4.5',\n 'icon-xs': 'p-1 [&_svg]:size-4',\n },\n },\n },\n);\n\nexport type ButtonProps = VariantProps<typeof buttonVariants>;\n"],"mappings":";;;AAEA,MAAM,WAAW;CACf,SAAS;CACT,SAAS;CACT,OAAO;CACP,WACE;CACH;AAED,MAAa,iBAAiB,IAC5B,yOACA,EACE,UAAU;CACR,SAAS;CAET,OAAO;CACP,MAAM;EACJ,IAAI;EACJ,MAAM;EACN,WAAW;EACX,WAAW;EACZ;CACF,EACF,CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"collapsible.d.ts","names":[],"sources":["../../../src/components/ui/collapsible.tsx"],"sourcesContent":[],"mappings":";;;;cAKM,aAAW,MAAA,CAAA,0BAAA,SAAA,CAAA,mBAAA,MAAA,CAAA,cAAA;cAEX,oBAAkB,MAAA,CAAA,0BAAA,SAAA,CAAA,0BAAA,MAAA,CAAA,cAAA;cAElB,oBAAkB,MAAA,CAAA,0BAAA,KAAA,SAAA,CAAA,0BAAA,MAAA,CAAA,cAAA,0BAAA,MAAA,CAAA,cAAA;AAJP,KAkCL,gBAAA,GAAmB,SAAA,CAAU,gBAlCxB;AAAA,KAmCL,uBAAA,GAA0B,SAAA,CAAU,uBAnC/B;AAAA,KAoCL,uBAAA,GAA0B,SAAA,CAAU,uBApC/B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"collapsible.js","names":[],"sources":["../../../src/components/ui/collapsible.tsx"],"sourcesContent":["'use client';\nimport * as Primitive from '@radix-ui/react-collapsible';\nimport { forwardRef, useEffect, useState } from 'react';\nimport { cn } from '@fumadocs/ui/cn';\n\nconst Collapsible = Primitive.Root;\n\nconst CollapsibleTrigger = Primitive.CollapsibleTrigger;\n\nconst CollapsibleContent = forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof Primitive.CollapsibleContent>\n>(({ children, ...props }, ref) => {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n return (\n <Primitive.CollapsibleContent\n ref={ref}\n {...props}\n className={cn(\n 'overflow-hidden',\n mounted &&\n 'data-[state=closed]:animate-fd-collapsible-up data-[state=open]:animate-fd-collapsible-down',\n props.className,\n )}\n >\n {children}\n </Primitive.CollapsibleContent>\n );\n});\n\nCollapsibleContent.displayName = Primitive.CollapsibleContent.displayName;\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n\nexport type CollapsibleProps = Primitive.CollapsibleProps;\nexport type CollapsibleContentProps = Primitive.CollapsibleContentProps;\nexport type CollapsibleTriggerProps = Primitive.CollapsibleTriggerProps;\n"],"mappings":";;;;;;;;AAKA,MAAM,cAAc,UAAU;AAE9B,MAAM,qBAAqB,UAAU;AAErC,MAAM,qBAAqB,YAGxB,EAAE,UAAU,GAAG,SAAS,QAAQ;CACjC,MAAM,CAAC,SAAS,cAAc,SAAS,MAAM;AAE7C,iBAAgB;AACd,aAAW,KAAK;IACf,EAAE,CAAC;AAEN,QACE,oBAAC,UAAU;EACJ;EACL,GAAI;EACJ,WAAW,GACT,mBACA,WACE,+FACF,MAAM,UACP;EAEA;GAC4B;EAEjC;AAEF,mBAAmB,cAAc,UAAU,mBAAmB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"navigation-menu.d.ts","names":[],"sources":["../../../src/components/ui/navigation-menu.tsx"],"sourcesContent":[],"mappings":";;;;KAKY,0BAAA,GAA6B,SAAA,CAAU;KACvC,0BAAA,GAA6B,SAAA,CAAU;AADnD,cAGM,cAHM,EAGQ,KAAA,CAAA,yBAH+B,CAG/B,SAAA,CAAA,mBAHyD,GAGzD,KAAA,CAAA,aAHyD,CAGzD,WAHyD,CAAA,CAAA;AAC7E,cAIM,kBAJM,EAIY,KAAA,CAAA,yBAJ2B,CAI3B,SAAA,CAAA,uBAJqD,GAIrD,KAAA,CAAA,aAJqD,CAIrD,gBAJqD,CAAA,CAAA;AAAC,cAMxE,kBAJ+B,EAIb,KAAA,CAAA,yBAJa,CAIb,IAJa,CAIb,SAAA,CAAA,uBAJa,GAIb,KAAA,CAAA,aAJa,CAIb,aAJa,CAAA,EAAA,KAAA,CAAA,GAIb,KAAA,CAAA,aAJa,CAIb,aAJa,CAAA,CAAA;cAe/B,qBAfc,EAeO,KAAA,CAAA,yBAfP,CAeO,IAfP,CAeO,SAAA,CAAA,0BAfP,GAeO,KAAA,CAAA,aAfP,CAeO,iBAfP,CAAA,EAAA,KAAA,CAAA,GAeO,KAAA,CAAA,aAfP,CAeO,iBAfP,CAAA,CAAA;cA6Bd,qBA7Bc,EA6BO,KAAA,CAAA,yBA7BP,CA6BO,IA7BP,CA6BO,SAAA,CAAA,0BA7BP,GA6BO,KAAA,CAAA,aA7BP,CA6BO,cA7BP,CAAA,EAAA,KAAA,CAAA,GA6BO,KAAA,CAAA,aA7BP,CA6BO,cA7BP,CAAA,CAAA;cA4Cd,kBA5Cc,EA4CI,KAAA,CAAA,yBA5CJ,CA4CI,SAAA,CAAA,uBA5CJ,GA4CI,KAAA,CAAA,aA5CJ,CA4CI,iBA5CJ,CAAA,CAAA;cA8Cd,sBA9Cc,EA8CQ,KAAA,CAAA,yBA9CR,CA8CQ,IA9CR,CA8CQ,SAAA,CAAA,2BA9CR,GA8CQ,KAAA,CAAA,aA9CR,CA8CQ,cA9CR,CAAA,EAAA,KAAA,CAAA,GA8CQ,KAAA,CAAA,aA9CR,CA8CQ,cA9CR,CAAA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"navigation-menu.js","names":[],"sources":["../../../src/components/ui/navigation-menu.tsx"],"sourcesContent":["'use client';\nimport * as React from 'react';\nimport * as Primitive from '@radix-ui/react-navigation-menu';\nimport { cn } from '@fumadocs/ui/cn';\n\nexport type NavigationMenuContentProps = Primitive.NavigationMenuContentProps;\nexport type NavigationMenuTriggerProps = Primitive.NavigationMenuTriggerProps;\n\nconst NavigationMenu = Primitive.Root;\n\nconst NavigationMenuList = Primitive.List;\n\nconst NavigationMenuItem = React.forwardRef<\n React.ComponentRef<typeof Primitive.NavigationMenuItem>,\n React.ComponentPropsWithoutRef<typeof Primitive.NavigationMenuItem>\n>(({ className, children, ...props }, ref) => (\n <Primitive.NavigationMenuItem ref={ref} className={cn('list-none', className)} {...props}>\n {children}\n </Primitive.NavigationMenuItem>\n));\n\nNavigationMenuItem.displayName = Primitive.NavigationMenuItem.displayName;\n\nconst NavigationMenuTrigger = React.forwardRef<\n React.ComponentRef<typeof Primitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof Primitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <Primitive.Trigger\n ref={ref}\n className={cn('data-[state=open]:bg-fd-accent/50', className)}\n {...props}\n >\n {children}\n </Primitive.Trigger>\n));\nNavigationMenuTrigger.displayName = Primitive.Trigger.displayName;\n\nconst NavigationMenuContent = React.forwardRef<\n React.ComponentRef<typeof Primitive.Content>,\n React.ComponentPropsWithoutRef<typeof Primitive.Content>\n>(({ className, ...props }, ref) => (\n <Primitive.Content\n ref={ref}\n className={cn(\n 'absolute inset-x-0 top-0 overflow-auto fd-scroll-container max-h-[80svh] data-[motion=from-end]:animate-fd-enterFromRight data-[motion=from-start]:animate-fd-enterFromLeft data-[motion=to-end]:animate-fd-exitToRight data-[motion=to-start]:animate-fd-exitToLeft',\n className,\n )}\n {...props}\n />\n));\nNavigationMenuContent.displayName = Primitive.Content.displayName;\n\nconst NavigationMenuLink = Primitive.Link;\n\nconst NavigationMenuViewport = React.forwardRef<\n React.ComponentRef<typeof Primitive.Viewport>,\n React.ComponentPropsWithoutRef<typeof Primitive.Viewport>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className=\"flex w-full justify-center\">\n <Primitive.Viewport\n {...props}\n className={cn(\n 'relative h-(--radix-navigation-menu-viewport-height) w-full origin-[top_center] overflow-hidden transition-[width,height] duration-300 data-[state=closed]:animate-fd-nav-menu-out data-[state=open]:animate-fd-nav-menu-in',\n className,\n )}\n />\n </div>\n));\nNavigationMenuViewport.displayName = Primitive.Viewport.displayName;\n\nexport {\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n NavigationMenuViewport,\n};\n"],"mappings":";;;;;;;;AAQA,MAAM,iBAAiB,UAAU;AAEjC,MAAM,qBAAqB,UAAU;AAErC,MAAM,qBAAqB,MAAM,YAG9B,EAAE,WAAW,UAAU,GAAG,SAAS,QACpC,oBAAC,UAAU;CAAwB;CAAK,WAAW,GAAG,aAAa,UAAU;CAAE,GAAI;CAChF;EAC4B,CAC/B;AAEF,mBAAmB,cAAc,UAAU,mBAAmB;AAE9D,MAAM,wBAAwB,MAAM,YAGjC,EAAE,WAAW,UAAU,GAAG,SAAS,QACpC,oBAAC,UAAU;CACJ;CACL,WAAW,GAAG,qCAAqC,UAAU;CAC7D,GAAI;CAEH;EACiB,CACpB;AACF,sBAAsB,cAAc,UAAU,QAAQ;AAEtD,MAAM,wBAAwB,MAAM,YAGjC,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,UAAU;CACJ;CACL,WAAW,GACT,wQACA,UACD;CACD,GAAI;EACJ,CACF;AACF,sBAAsB,cAAc,UAAU,QAAQ;AAEtD,MAAM,qBAAqB,UAAU;AAErC,MAAM,yBAAyB,MAAM,YAGlC,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC;CAAS;CAAK,WAAU;WACvB,oBAAC,UAAU;EACT,GAAI;EACJ,WAAW,GACT,+NACA,UACD;GACD;EACE,CACN;AACF,uBAAuB,cAAc,UAAU,SAAS"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"popover.d.ts","names":[],"sources":["../../../src/components/ui/popover.tsx"],"sourcesContent":[],"mappings":";;;;cAKM,SAAO,KAAA,CAAA,GAAA,gBAAA,CAAA;cAEP,gBAAc,KAAA,CAAA,0BAAA,gBAAA,CAAA,sBAAA,KAAA,CAAA,cAAA;AALW,cAOzB,cAJO,EAIO,KAAA,CAAA,yBAJP,CAIO,IAJP,CAIO,gBAAA,CAAA,mBAJP,GAIO,KAAA,CAAA,aAJP,CAIO,cAJP,CAAA,EAAA,KAAA,CAAA,GAIO,KAAA,CAAA,aAJP,CAIO,cAJP,CAAA,CAAA;AAAA,cAwBP,YAtByC,EAsB7B,KAAA,CAAA,yBAtB6B,CAsB7B,gBAAA,CAAA,iBAtB6B,GAsB7B,KAAA,CAAA,aAtB6B,CAsB7B,iBAtB6B,CAAA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"popover.js","names":[],"sources":["../../../src/components/ui/popover.tsx"],"sourcesContent":["'use client';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport * as React from 'react';\nimport { cn } from '@fumadocs/ui/cn';\n\nconst Popover = PopoverPrimitive.Root;\n\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\nconst PopoverContent = React.forwardRef<\n React.ComponentRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n side=\"bottom\"\n className={cn(\n 'z-50 origin-(--radix-popover-content-transform-origin) overflow-y-auto max-h-(--radix-popover-content-available-height) min-w-[240px] max-w-[98vw] rounded-xl border bg-fd-popover/60 backdrop-blur-lg p-2 text-sm text-fd-popover-foreground shadow-lg focus-visible:outline-none data-[state=closed]:animate-fd-popover-out data-[state=open]:animate-fd-popover-in',\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nconst PopoverClose = PopoverPrimitive.PopoverClose;\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverClose };\n"],"mappings":";;;;;;;;AAKA,MAAM,UAAU,iBAAiB;AAEjC,MAAM,iBAAiB,iBAAiB;AAExC,MAAM,iBAAiB,MAAM,YAG1B,EAAE,WAAW,QAAQ,UAAU,aAAa,GAAG,GAAG,SAAS,QAC5D,oBAAC,iBAAiB,oBAChB,oBAAC,iBAAiB;CACX;CACE;CACK;CACZ,MAAK;CACL,WAAW,GACT,yWACA,UACD;CACD,GAAI;EACJ,GACsB,CAC1B;AACF,eAAe,cAAc,iBAAiB,QAAQ;AAEtD,MAAM,eAAe,iBAAiB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"scroll-area.d.ts","names":[],"sources":["../../../src/components/ui/scroll-area.tsx"],"sourcesContent":[],"mappings":";;;;cAIM,YAAU,KAAA,CAAA,0BAAA,KAAA,SAAA,CAAA,kBAAA,KAAA,CAAA,cAAA,0BAAA,KAAA,CAAA,cAAA;cAaV,gBAAc,KAAA,CAAA,0BAAA,KAAA,SAAA,CAAA,0BAAA,KAAA,CAAA,cAAA,0BAAA,KAAA,CAAA,cAAA;AAhBW,cA2BzB,SAfJ,EAea,KAAA,CAAA,yBAfb,CAea,IAfb,CAea,SAAA,CAAA,wBAfb,GAea,KAAA,CAAA,aAfb,CAea,cAfb,CAAA,EAAA,KAAA,CAAA,GAea,KAAA,CAAA,aAfb,CAea,cAfb,CAAA,CAAA;AATc,KA6CJ,eAAA,GAAkB,SAAA,CAAU,eA7CxB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"scroll-area.js","names":[],"sources":["../../../src/components/ui/scroll-area.tsx"],"sourcesContent":["import * as Primitive from '@radix-ui/react-scroll-area';\nimport * as React from 'react';\nimport { cn } from '@fumadocs/ui/cn';\n\nconst ScrollArea = React.forwardRef<\n React.ComponentRef<typeof Primitive.Root>,\n React.ComponentPropsWithoutRef<typeof Primitive.Root>\n>(({ className, children, ...props }, ref) => (\n <Primitive.Root ref={ref} type=\"scroll\" className={cn('overflow-hidden', className)} {...props}>\n {children}\n <Primitive.Corner />\n <ScrollBar orientation=\"vertical\" />\n </Primitive.Root>\n));\n\nScrollArea.displayName = Primitive.Root.displayName;\n\nconst ScrollViewport = React.forwardRef<\n React.ComponentRef<typeof Primitive.Viewport>,\n React.ComponentPropsWithoutRef<typeof Primitive.Viewport>\n>(({ className, children, ...props }, ref) => (\n <Primitive.Viewport ref={ref} className={cn('size-full rounded-[inherit]', className)} {...props}>\n {children}\n </Primitive.Viewport>\n));\n\nScrollViewport.displayName = Primitive.Viewport.displayName;\n\nconst ScrollBar = React.forwardRef<\n React.ComponentRef<typeof Primitive.Scrollbar>,\n React.ComponentPropsWithoutRef<typeof Primitive.Scrollbar>\n>(({ className, orientation = 'vertical', ...props }, ref) => (\n <Primitive.Scrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n 'flex select-none data-[state=hidden]:animate-fd-fade-out',\n orientation === 'vertical' && 'h-full w-1.5',\n orientation === 'horizontal' && 'h-1.5 flex-col',\n className,\n )}\n {...props}\n >\n <Primitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-fd-border\" />\n </Primitive.Scrollbar>\n));\nScrollBar.displayName = Primitive.Scrollbar.displayName;\n\nexport { ScrollArea, ScrollBar, ScrollViewport };\nexport type ScrollAreaProps = Primitive.ScrollAreaProps;\n"],"mappings":";;;;;;AAIA,MAAM,aAAa,MAAM,YAGtB,EAAE,WAAW,UAAU,GAAG,SAAS,QACpC,qBAAC,UAAU;CAAU;CAAK,MAAK;CAAS,WAAW,GAAG,mBAAmB,UAAU;CAAE,GAAI;;EACtF;EACD,oBAAC,UAAU,WAAS;EACpB,oBAAC,aAAU,aAAY,aAAa;;EACrB,CACjB;AAEF,WAAW,cAAc,UAAU,KAAK;AAExC,MAAM,iBAAiB,MAAM,YAG1B,EAAE,WAAW,UAAU,GAAG,SAAS,QACpC,oBAAC,UAAU;CAAc;CAAK,WAAW,GAAG,+BAA+B,UAAU;CAAE,GAAI;CACxF;EACkB,CACrB;AAEF,eAAe,cAAc,UAAU,SAAS;AAEhD,MAAM,YAAY,MAAM,YAGrB,EAAE,WAAW,cAAc,YAAY,GAAG,SAAS,QACpD,oBAAC,UAAU;CACJ;CACQ;CACb,WAAW,GACT,4DACA,gBAAgB,cAAc,gBAC9B,gBAAgB,gBAAgB,kBAChC,UACD;CACD,GAAI;WAEJ,oBAAC,UAAU,mBAAgB,WAAU,8CAA8C;EAC/D,CACtB;AACF,UAAU,cAAc,UAAU,UAAU"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tabs.d.ts","names":[],"sources":["../../../src/components/ui/tabs.tsx"],"sourcesContent":[],"mappings":";;;;;;UAkBiB,SAAA,SAAkB,sBAAsB,SAAA,CAAU;;;;EAAlD,OAAA,CAAA,EAAA,MAAU;EA2Bd;;;EAAQ,OAAA,CAAA,EAAA,OAAA;EAAA;;AAErB;EAAwB,YAAA,CAAA,EAAA,OAAA;;AAAA,cAFX,QAEW,EAFH,OAAA,CAAA,yBAEG,CAFH,SAAA,CAAA,aAEG,GAFH,OAAA,CAAA,aAEG,CAFH,cAEG,CAAA,CAAA;AAAA,cAAX,WAAW,EAAA,OAAA,CAAA,yBAAA,CAAA,SAAA,CAAA,gBAAA,GAAA,OAAA,CAAA,aAAA,CAAA,iBAAA,CAAA,CAAA;AAAA,iBAER,IAAA,CAFQ;EAAA,GAAA;EAAA,OAAA;EAAA,OAAA;EAAA,YAAA;EAAA,YAAA;EAAA,KAAA,EAQf,MARe;EAAA,aAAA,EASP,cATO;EAAA,GAAA;AAAA,CAAA,EAWrB,SAXqB,CAAA,EAWZ,oBAAA,CAAA,GAAA,CAAA,OAXY;AAER,iBAgFA,WAAA,CAhFI;EAAA,KAAA;EAAA,GAAA;AAAA,CAAA,EAgF6B,cAhF7B,CAAA,OAgFmD,SAAA,CAAU,WAhF7D,CAAA,CAAA,EAgFyE,oBAAA,CAAA,GAAA,CAAA,OAhFzE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tabs.js","names":["value"],"sources":["../../../src/components/ui/tabs.tsx"],"sourcesContent":["'use client';\n\nimport {\n type ComponentProps,\n createContext,\n use,\n useEffectEvent,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport * as Primitive from '@radix-ui/react-tabs';\nimport { mergeRefs } from '@fumadocs/ui/merge-refs';\n\ntype ChangeListener = (v: string) => void;\nconst listeners = new Map<string, Set<ChangeListener>>();\n\nexport interface TabsProps extends ComponentProps<typeof Primitive.Tabs> {\n /**\n * Identifier for Sharing value of tabs\n */\n groupId?: string;\n\n /**\n * Enable persistent\n */\n persist?: boolean;\n\n /**\n * If true, updates the URL hash based on the tab's id\n */\n updateAnchor?: boolean;\n}\n\nconst TabsContext = createContext<{\n valueToIdMap: Map<string, string>;\n} | null>(null);\n\nfunction useTabContext() {\n const ctx = use(TabsContext);\n if (!ctx) throw new Error('You must wrap your component in <Tabs>');\n return ctx;\n}\n\nexport const TabsList = Primitive.TabsList;\n\nexport const TabsTrigger = Primitive.TabsTrigger;\n\nexport function Tabs({\n ref,\n groupId,\n persist = false,\n updateAnchor = false,\n defaultValue,\n value: _value,\n onValueChange: _onValueChange,\n ...props\n}: TabsProps) {\n const tabsRef = useRef<HTMLDivElement>(null);\n const valueToIdMap = useMemo(() => new Map<string, string>(), []);\n const [value, setValue] =\n _value === undefined\n ? // eslint-disable-next-line react-hooks/rules-of-hooks -- not supposed to change controlled/uncontrolled\n useState(defaultValue)\n : // eslint-disable-next-line react-hooks/rules-of-hooks -- not supposed to change controlled/uncontrolled\n [_value, useEffectEvent((v: string) => _onValueChange?.(v))];\n\n useLayoutEffect(() => {\n if (!groupId) return;\n let previous = sessionStorage.getItem(groupId);\n if (persist) previous ??= localStorage.getItem(groupId);\n if (previous) setValue(previous);\n\n const groupListeners = listeners.get(groupId) ?? new Set();\n groupListeners.add(setValue);\n listeners.set(groupId, groupListeners);\n return () => {\n groupListeners.delete(setValue);\n };\n }, [groupId, persist, setValue]);\n\n useLayoutEffect(() => {\n const hash = window.location.hash.slice(1);\n if (!hash) return;\n\n for (const [value, id] of valueToIdMap.entries()) {\n if (id === hash) {\n setValue(value);\n tabsRef.current?.scrollIntoView();\n break;\n }\n }\n }, [setValue, valueToIdMap]);\n\n return (\n <Primitive.Tabs\n ref={mergeRefs(ref, tabsRef)}\n value={value}\n onValueChange={(v: string) => {\n if (updateAnchor) {\n const id = valueToIdMap.get(v);\n\n if (id) {\n window.history.replaceState(null, '', `#${id}`);\n }\n }\n\n if (groupId) {\n const groupListeners = listeners.get(groupId);\n if (groupListeners) {\n for (const listener of groupListeners) listener(v);\n }\n\n sessionStorage.setItem(groupId, v);\n if (persist) localStorage.setItem(groupId, v);\n } else {\n setValue(v);\n }\n }}\n {...props}\n >\n <TabsContext value={useMemo(() => ({ valueToIdMap }), [valueToIdMap])}>\n {props.children}\n </TabsContext>\n </Primitive.Tabs>\n );\n}\n\nexport function TabsContent({ value, ...props }: ComponentProps<typeof Primitive.TabsContent>) {\n const { valueToIdMap } = useTabContext();\n\n if (props.id) {\n valueToIdMap.set(value, props.id);\n }\n\n return (\n <Primitive.TabsContent value={value} {...props}>\n {props.children}\n </Primitive.TabsContent>\n );\n}\n"],"mappings":";;;;;;;;AAgBA,MAAM,4BAAY,IAAI,KAAkC;AAmBxD,MAAM,cAAc,cAEV,KAAK;AAEf,SAAS,gBAAgB;CACvB,MAAM,MAAM,IAAI,YAAY;AAC5B,KAAI,CAAC,IAAK,OAAM,IAAI,MAAM,yCAAyC;AACnE,QAAO;;AAGT,MAAa,WAAW,UAAU;AAElC,MAAa,cAAc,UAAU;AAErC,SAAgB,KAAK,EACnB,KACA,SACA,UAAU,OACV,eAAe,OACf,cACA,OAAO,QACP,eAAe,gBACf,GAAG,SACS;CACZ,MAAM,UAAU,OAAuB,KAAK;CAC5C,MAAM,eAAe,8BAAc,IAAI,KAAqB,EAAE,EAAE,CAAC;CACjE,MAAM,CAAC,OAAO,YACZ,WAAW,SAEP,SAAS,aAAa,GAEtB,CAAC,QAAQ,gBAAgB,MAAc,iBAAiB,EAAE,CAAC,CAAC;AAElE,uBAAsB;AACpB,MAAI,CAAC,QAAS;EACd,IAAI,WAAW,eAAe,QAAQ,QAAQ;AAC9C,MAAI,QAAS,cAAa,aAAa,QAAQ,QAAQ;AACvD,MAAI,SAAU,UAAS,SAAS;EAEhC,MAAM,iBAAiB,UAAU,IAAI,QAAQ,oBAAI,IAAI,KAAK;AAC1D,iBAAe,IAAI,SAAS;AAC5B,YAAU,IAAI,SAAS,eAAe;AACtC,eAAa;AACX,kBAAe,OAAO,SAAS;;IAEhC;EAAC;EAAS;EAAS;EAAS,CAAC;AAEhC,uBAAsB;EACpB,MAAM,OAAO,OAAO,SAAS,KAAK,MAAM,EAAE;AAC1C,MAAI,CAAC,KAAM;AAEX,OAAK,MAAM,CAACA,SAAO,OAAO,aAAa,SAAS,CAC9C,KAAI,OAAO,MAAM;AACf,YAASA,QAAM;AACf,WAAQ,SAAS,gBAAgB;AACjC;;IAGH,CAAC,UAAU,aAAa,CAAC;AAE5B,QACE,oBAAC,UAAU;EACT,KAAK,UAAU,KAAK,QAAQ;EACrB;EACP,gBAAgB,MAAc;AAC5B,OAAI,cAAc;IAChB,MAAM,KAAK,aAAa,IAAI,EAAE;AAE9B,QAAI,GACF,QAAO,QAAQ,aAAa,MAAM,IAAI,IAAI,KAAK;;AAInD,OAAI,SAAS;IACX,MAAM,iBAAiB,UAAU,IAAI,QAAQ;AAC7C,QAAI,eACF,MAAK,MAAM,YAAY,eAAgB,UAAS,EAAE;AAGpD,mBAAe,QAAQ,SAAS,EAAE;AAClC,QAAI,QAAS,cAAa,QAAQ,SAAS,EAAE;SAE7C,UAAS,EAAE;;EAGf,GAAI;YAEJ,oBAAC;GAAY,OAAO,eAAe,EAAE,cAAc,GAAG,CAAC,aAAa,CAAC;aAClE,MAAM;IACK;GACC;;AAIrB,SAAgB,YAAY,EAAE,OAAO,GAAG,SAAuD;CAC7F,MAAM,EAAE,iBAAiB,eAAe;AAExC,KAAI,MAAM,GACR,cAAa,IAAI,OAAO,MAAM,GAAG;AAGnC,QACE,oBAAC,UAAU;EAAmB;EAAO,GAAI;YACtC,MAAM;GACe"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"i18n.js","names":[],"sources":["../../src/contexts/i18n.tsx"],"sourcesContent":["export * from '@fumadocs/ui/contexts/i18n';\n"],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.d.ts","names":[],"sources":["../../src/contexts/search.tsx"],"sourcesContent":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.js","names":[],"sources":["../../src/contexts/search.tsx"],"sourcesContent":["export * from '@fumadocs/ui/contexts/search';\n"],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tree.js","names":[],"sources":["../../src/contexts/tree.tsx"],"sourcesContent":["export * from '@fumadocs/ui/contexts/tree';\n"],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","names":[],"sources":["../../../src/layouts/docs/client.tsx"],"sourcesContent":[],"mappings":";;;;;;cAWa,eAEE,OAAA,CAFW;;;iBAIV,qBAAA;;;;EAJH,kBAEE,CAAA,EAAA,QAAA,GAAA,KAFW,GAAA,MAAA;EAIV,QAAA,EAKJ,SALI;CACd,CAAA,EAKD,oBAAA,CAAA,GAAA,CAAA,OALC;AACA,iBAsBc,YAAA,CAtBd,KAAA,EAsBkC,cAtBlC,CAAA,QAAA,CAAA,CAAA,EAsB0D,oBAAA,CAAA,GAAA,CAAA,OAtB1D;AAGU,iBA6BI,UAAA,CA7BJ;EAAA,SAAA;EAAA,KAAA;EAAA,QAAA;EAAA,GAAA;AAAA,CAAA,EA6ByD,cA7BzD,CAAA,KAAA,CAAA,CAAA,EA6B8E,oBAAA,CAAA,GAAA,CAAA,OA7B9E;AACX,iBA0De,UAAA,CA1Df;EAAA,OAAA;EAAA,GAAA;AAkBD,CAlBC,EA6DE,cA7DF,CAAA,KAAA,CAAA,GAAA;EAAA,OAAA,EA8DU,UA9DV,EAAA;AAkBD,CAAA,CAAA,EA6CC,oBAAA,CAAA,GAAA,CAAA,OA7CmC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","names":[],"sources":["../../../src/layouts/docs/client.tsx"],"sourcesContent":["'use client';\n\nimport { type ComponentProps, createContext, type ReactNode, use, useMemo } from 'react';\nimport { cn } from '@fumadocs/ui/cn';\nimport { useSidebar } from '@/components/sidebar/base';\nimport { usePathname } from 'fumadocs-core/framework';\nimport Link from 'fumadocs-core/link';\nimport type { SidebarTab } from '@/components/sidebar/tabs';\nimport { isTabActive } from '@/components/sidebar/tabs/dropdown';\nimport { useIsScrollTop } from '@fumadocs/ui/hooks/use-is-scroll-top';\n\nexport const LayoutContext = createContext<{\n isNavTransparent: boolean;\n} | null>(null);\n\nexport function LayoutContextProvider({\n navTransparentMode = 'none',\n children,\n}: {\n navTransparentMode?: 'always' | 'top' | 'none';\n children: ReactNode;\n}) {\n const isTop = useIsScrollTop({ enabled: navTransparentMode === 'top' }) ?? true;\n const isNavTransparent = navTransparentMode === 'top' ? isTop : navTransparentMode === 'always';\n\n return (\n <LayoutContext\n value={useMemo(\n () => ({\n isNavTransparent,\n }),\n [isNavTransparent],\n )}\n >\n {children}\n </LayoutContext>\n );\n}\n\nexport function LayoutHeader(props: ComponentProps<'header'>) {\n const { isNavTransparent } = use(LayoutContext)!;\n\n return (\n <header data-transparent={isNavTransparent} {...props}>\n {props.children}\n </header>\n );\n}\n\nexport function LayoutBody({ className, style, children, ...props }: ComponentProps<'div'>) {\n const { collapsed } = useSidebar();\n\n return (\n <div\n id=\"nd-docs-layout\"\n className={cn(\n 'grid transition-[grid-template-columns] overflow-x-clip min-h-(--fd-docs-height) auto-cols-auto auto-rows-auto [--fd-docs-height:100dvh] [--fd-header-height:0px] [--fd-toc-popover-height:0px] [--fd-sidebar-width:0px] [--fd-toc-width:0px]',\n className,\n )}\n data-sidebar-collapsed={collapsed}\n style={\n {\n gridTemplate: `\"sidebar header toc\"\n \"sidebar toc-popover toc\"\n \"sidebar main toc\" 1fr / minmax(var(--fd-sidebar-col), 1fr) minmax(0, calc(var(--fd-layout-width,97rem) - var(--fd-sidebar-width) - var(--fd-toc-width))) minmax(min-content, 1fr)`,\n '--fd-docs-row-1': 'var(--fd-banner-height, 0px)',\n '--fd-docs-row-2': 'calc(var(--fd-docs-row-1) + var(--fd-header-height))',\n '--fd-docs-row-3': 'calc(var(--fd-docs-row-2) + var(--fd-toc-popover-height))',\n '--fd-sidebar-col': collapsed ? '0px' : 'var(--fd-sidebar-width)',\n ...style,\n } as object\n }\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport function LayoutTabs({\n options,\n ...props\n}: ComponentProps<'div'> & {\n options: SidebarTab[];\n}) {\n const pathname = usePathname();\n const selected = useMemo(() => {\n return options.findLast((option) => isTabActive(option, pathname));\n }, [options, pathname]);\n\n return (\n <div\n {...props}\n className={cn(\n 'flex flex-row items-end gap-6 overflow-auto [grid-area:main]',\n props.className,\n )}\n >\n {options.map((option, i) => (\n <Link\n key={i}\n href={option.url}\n className={cn(\n 'inline-flex border-b-2 border-transparent transition-colors items-center pb-1.5 font-medium gap-2 text-fd-muted-foreground text-sm text-nowrap hover:text-fd-accent-foreground',\n option.unlisted && selected !== option && 'hidden',\n selected === option && 'border-fd-primary text-fd-primary',\n )}\n >\n {option.title}\n </Link>\n ))}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAWA,MAAa,gBAAgB,cAEnB,KAAK;AAEf,SAAgB,sBAAsB,EACpC,qBAAqB,QACrB,YAIC;CACD,MAAM,QAAQ,eAAe,EAAE,SAAS,uBAAuB,OAAO,CAAC,IAAI;CAC3E,MAAM,mBAAmB,uBAAuB,QAAQ,QAAQ,uBAAuB;AAEvF,QACE,oBAAC;EACC,OAAO,eACE,EACL,kBACD,GACD,CAAC,iBAAiB,CACnB;EAEA;GACa;;AAIpB,SAAgB,aAAa,OAAiC;CAC5D,MAAM,EAAE,qBAAqB,IAAI,cAAc;AAE/C,QACE,oBAAC;EAAO,oBAAkB;EAAkB,GAAI;YAC7C,MAAM;GACA;;AAIb,SAAgB,WAAW,EAAE,WAAW,OAAO,UAAU,GAAG,SAAgC;CAC1F,MAAM,EAAE,cAAc,YAAY;AAElC,QACE,oBAAC;EACC,IAAG;EACH,WAAW,GACT,iPACA,UACD;EACD,0BAAwB;EACxB,OACE;GACE,cAAc;;;GAGd,mBAAmB;GACnB,mBAAmB;GACnB,mBAAmB;GACnB,oBAAoB,YAAY,QAAQ;GACxC,GAAG;GACJ;EAEH,GAAI;EAEH;GACG;;AAIV,SAAgB,WAAW,EACzB,SACA,GAAG,SAGF;CACD,MAAM,WAAW,aAAa;CAC9B,MAAM,WAAW,cAAc;AAC7B,SAAO,QAAQ,UAAU,WAAW,YAAY,QAAQ,SAAS,CAAC;IACjE,CAAC,SAAS,SAAS,CAAC;AAEvB,QACE,oBAAC;EACC,GAAI;EACJ,WAAW,GACT,gEACA,MAAM,UACP;YAEA,QAAQ,KAAK,QAAQ,MACpB,oBAAC;GAEC,MAAM,OAAO;GACb,WAAW,GACT,kLACA,OAAO,YAAY,aAAa,UAAU,UAC1C,aAAa,UAAU,oCACxB;aAEA,OAAO;KARH,EASA,CACP;GACE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/layouts/docs/index.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;;;UA0BiB,eAAA,SAAwB;QACjC,QAAA,CAAS;YAEL;;EAHK;;;EAUiB,cAAA,CAAA,EAAf,cAAe,CAAA,cAAA,CAAA;;UAGxB,cAAA,SAEN,cAfqC,CAAA,OAAA,CAAA,EAgBrC,IAhBqC,CAgBhC,cAhBgC,CAAA,OAgBV,eAhBU,CAAA,EAAA,kBAAA,GAAA,UAAA,CAAA,CAAA;EAAe,OAAA,CAAA,EAAA,OAAA;EAa9C,SAAA,CAAA,EAKI,SAJZ;EAE6B,UAAA,CAAA,EAGhB,OAHgB,CAGR,yBAHQ,CAAA;EAAtB;;;EAGM,IAAA,CAAA,EAKN,mBALM,EAAA,GAKkB,qBALlB,GAAA,KAAA;EAKN,MAAA,CAAA,EAEE,SAFF;EAAwB,MAAA,CAAA,EAGtB,SAHsB;EAEtB;;;;;EAWK,WAAA,CAAA,EAAU,OAAA;;AAGhB,iBAHM,UAAA,CAGN;EAAA,GAAA,EAAA;IAAA,eAAA;IAAA,GAAA;EAAA,CAAA;EAAA,OAAA,EAAA;IAAA,IAAA,EAAA,WAAA;IAAA,OAAA,EACG,cADH;IAAA,gBAAA;IAAA,QAAA;IAAA,GAAA;EAAA,CAAA;EAAA,YAAA;EAAA,WAAA;EAAA,OAAA;EAAA,IAAA;EAAA,QAAA;EAAA,IAAA;EAAA,GAAA;AAAA,CAAA,EAaP,eAbO,CAAA,EAaQ,oBAAA,CAAA,GAAA,CAAA,OAbR"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["SidebarIcon","TreeContextProvider","Sidebar"],"sources":["../../../src/layouts/docs/index.tsx"],"sourcesContent":["import type * as PageTree from 'fumadocs-core/page-tree';\nimport { type ComponentProps, type HTMLAttributes, type ReactNode, useMemo } from 'react';\nimport { Languages, Sidebar as SidebarIcon } from 'lucide-react';\nimport { cn } from '@fumadocs/ui/cn';\nimport { buttonVariants } from '@/components/ui/button';\nimport {\n Sidebar,\n SidebarCollapseTrigger,\n SidebarContent,\n SidebarDrawer,\n SidebarLinkItem,\n SidebarPageTree,\n SidebarTrigger,\n SidebarViewport,\n} from './sidebar';\nimport { type BaseLayoutProps, renderTitleNav, resolveLinkItems } from '@/layouts/shared';\nimport { LinkItem } from '@fumadocs/ui/link-item';\nimport { LanguageToggle, LanguageToggleText } from '@/layouts/shared/language-toggle';\nimport { LayoutBody, LayoutContextProvider, LayoutHeader, LayoutTabs } from './client';\nimport { TreeContextProvider } from '@/contexts/tree';\nimport { ThemeToggle } from '../shared/theme-toggle';\nimport { LargeSearchToggle, SearchToggle } from '@/layouts/shared/search-toggle';\nimport { getSidebarTabs, type GetSidebarTabsOptions } from '@/components/sidebar/tabs';\nimport type { SidebarPageTreeComponents } from '@/components/sidebar/page-tree';\nimport { SidebarTabsDropdown, type SidebarTabWithProps } from '@/components/sidebar/tabs/dropdown';\n\nexport interface DocsLayoutProps extends BaseLayoutProps {\n tree: PageTree.Root;\n\n sidebar?: SidebarOptions;\n\n tabMode?: 'top' | 'auto';\n\n /**\n * Props for the `div` container\n */\n containerProps?: HTMLAttributes<HTMLDivElement>;\n}\n\ninterface SidebarOptions\n extends\n ComponentProps<'aside'>,\n Pick<ComponentProps<typeof Sidebar>, 'defaultOpenLevel' | 'prefetch'> {\n enabled?: boolean;\n component?: ReactNode;\n components?: Partial<SidebarPageTreeComponents>;\n\n /**\n * Root Toggle options\n */\n tabs?: SidebarTabWithProps[] | GetSidebarTabsOptions | false;\n\n banner?: ReactNode;\n footer?: ReactNode;\n\n /**\n * Support collapsing the sidebar on desktop mode\n *\n * @defaultValue true\n */\n collapsible?: boolean;\n}\n\nexport function DocsLayout({\n nav: { transparentMode, ...nav } = {},\n sidebar: {\n tabs: sidebarTabs,\n enabled: sidebarEnabled = true,\n defaultOpenLevel,\n prefetch,\n ...sidebarProps\n } = {},\n searchToggle = {},\n themeSwitch = {},\n tabMode = 'auto',\n i18n = false,\n children,\n tree,\n ...props\n}: DocsLayoutProps) {\n const tabs = useMemo(() => {\n if (Array.isArray(sidebarTabs)) {\n return sidebarTabs;\n }\n if (typeof sidebarTabs === 'object') {\n return getSidebarTabs(tree, sidebarTabs);\n }\n if (sidebarTabs !== false) {\n return getSidebarTabs(tree);\n }\n return [];\n }, [tree, sidebarTabs]);\n const links = resolveLinkItems(props);\n\n function sidebar() {\n const { footer, banner, collapsible = true, component, components, ...rest } = sidebarProps;\n if (component) return component;\n\n const iconLinks = links.filter((item) => item.type === 'icon');\n const viewport = (\n <SidebarViewport>\n {links\n .filter((v) => v.type !== 'icon')\n .map((item, i, list) => (\n <SidebarLinkItem key={i} item={item} className={cn(i === list.length - 1 && 'mb-4')} />\n ))}\n <SidebarPageTree {...components} />\n </SidebarViewport>\n );\n\n return (\n <>\n <SidebarContent {...rest}>\n <div className=\"flex flex-col gap-3 p-4 pb-2\">\n <div className=\"flex\">\n {renderTitleNav(nav, {\n className: 'inline-flex text-[0.9375rem] items-center gap-2.5 font-medium me-auto',\n })}\n {nav.children}\n {collapsible && (\n <SidebarCollapseTrigger\n className={cn(\n buttonVariants({\n color: 'ghost',\n size: 'icon-sm',\n className: 'mb-auto text-fd-muted-foreground',\n }),\n )}\n >\n <SidebarIcon />\n </SidebarCollapseTrigger>\n )}\n </div>\n {searchToggle.enabled !== false &&\n (searchToggle.components?.lg ?? <LargeSearchToggle hideIfDisabled />)}\n {tabs.length > 0 && tabMode === 'auto' && <SidebarTabsDropdown options={tabs} />}\n {banner}\n </div>\n {viewport}\n {(i18n || iconLinks.length > 0 || themeSwitch?.enabled !== false || footer) && (\n <div className=\"flex flex-col border-t p-4 pt-2 empty:hidden\">\n <div className=\"flex text-fd-muted-foreground items-center empty:hidden\">\n {i18n && (\n <LanguageToggle>\n <Languages className=\"size-4.5\" />\n </LanguageToggle>\n )}\n {iconLinks.map((item, i) => (\n <LinkItem\n key={i}\n item={item}\n className={cn(buttonVariants({ size: 'icon-sm', color: 'ghost' }))}\n aria-label={item.label}\n >\n {item.icon}\n </LinkItem>\n ))}\n {themeSwitch.enabled !== false &&\n (themeSwitch.component ?? (\n <ThemeToggle className=\"ms-auto p-0\" mode={themeSwitch.mode} />\n ))}\n </div>\n {footer}\n </div>\n )}\n </SidebarContent>\n <SidebarDrawer>\n <div className=\"flex flex-col gap-3 p-4 pb-2\">\n <div className=\"flex text-fd-muted-foreground items-center gap-1.5\">\n <div className=\"flex flex-1\">\n {iconLinks.map((item, i) => (\n <LinkItem\n key={i}\n item={item}\n className={cn(\n buttonVariants({\n size: 'icon-sm',\n color: 'ghost',\n className: 'p-2',\n }),\n )}\n aria-label={item.label}\n >\n {item.icon}\n </LinkItem>\n ))}\n </div>\n {i18n && (\n <LanguageToggle>\n <Languages className=\"size-4.5\" />\n <LanguageToggleText />\n </LanguageToggle>\n )}\n {themeSwitch.enabled !== false &&\n (themeSwitch.component ?? <ThemeToggle className=\"p-0\" mode={themeSwitch.mode} />)}\n <SidebarTrigger\n className={cn(\n buttonVariants({\n color: 'ghost',\n size: 'icon-sm',\n className: 'p-2',\n }),\n )}\n >\n <SidebarIcon />\n </SidebarTrigger>\n </div>\n {tabs.length > 0 && <SidebarTabsDropdown options={tabs} />}\n {banner}\n </div>\n {viewport}\n <div className=\"flex flex-col border-t p-4 pt-2 empty:hidden\">{footer}</div>\n </SidebarDrawer>\n </>\n );\n }\n\n return (\n <TreeContextProvider tree={tree}>\n <LayoutContextProvider navTransparentMode={transparentMode}>\n <Sidebar defaultOpenLevel={defaultOpenLevel} prefetch={prefetch}>\n <LayoutBody {...props.containerProps}>\n {nav.enabled !== false &&\n (nav.component ?? (\n <LayoutHeader\n id=\"nd-subnav\"\n className=\"[grid-area:header] sticky top-(--fd-docs-row-1) z-30 flex items-center ps-4 pe-2.5 border-b transition-colors backdrop-blur-sm h-(--fd-header-height) md:hidden max-md:layout:[--fd-header-height:--spacing(14)] data-[transparent=false]:bg-fd-background/80\"\n >\n {renderTitleNav(nav, {\n className: 'inline-flex items-center gap-2.5 font-semibold',\n })}\n <div className=\"flex-1\">{nav.children}</div>\n {searchToggle.enabled !== false &&\n (searchToggle.components?.sm ?? (\n <SearchToggle className=\"p-2\" hideIfDisabled />\n ))}\n {sidebarEnabled && (\n <SidebarTrigger\n className={cn(\n buttonVariants({\n color: 'ghost',\n size: 'icon-sm',\n className: 'p-2',\n }),\n )}\n >\n <SidebarIcon />\n </SidebarTrigger>\n )}\n </LayoutHeader>\n ))}\n {sidebarEnabled && sidebar()}\n {tabMode === 'top' && tabs.length > 0 && (\n <LayoutTabs\n options={tabs}\n className=\"z-10 bg-fd-background border-b px-6 pt-3 xl:px-8 max-md:hidden\"\n />\n )}\n {children}\n </LayoutBody>\n </Sidebar>\n </LayoutContextProvider>\n </TreeContextProvider>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","names":[],"sources":["../../../../src/layouts/docs/page/client.tsx"],"sourcesContent":[],"mappings":";;;;;;iBAiCgB,cAAA;;;;GAAiD,wBAAqB,mBAAA,CAAA,GAAA,CAAA;iBAsDtE,qBAAA;;;GAA+C,2BAAwB,mBAAA,CAAA,GAAA,CAAA;iBA2GvE,qBAAA,QAA6B,wBAAqB,mBAAA,CAAA,GAAA,CAAA;AAjKlD,iBA6KA,cAAA,CA7Kc;EAAA,IAAA,EA8KtB,KA9KsB;EAAA,GAAA;CAAA,EAgL3B,IAhL2B,CAgLtB,cAhLsB,CAAA,GAAA,CAAA,EAAA,UAAA,CAAA,GAAA;EAAG,IAAA,EAgLkB,IAhLlB;CAAW,CAAA,EAgLa,mBAAA,CAAA,GAAA,CAAA,OAhLb;KAgMvC,IAAA,GAAO,IAhMqD,CAgMhD,QAAA,CAAS,IAhMuC,EAAA,MAAA,GAAA,aAAA,GAAA,KAAA,CAAA;AAAqB,UAiMrE,WAAA,SAAoB,cAjMiD,CAAA,KAAA,CAAA,CAAA;EAAA;AAsDtF;;EAA+D,KAAA,CAAA,EAAA;IAAwB,QAAA,CAAA,EAgJxE,IAhJwE;IAAA,IAAA,CAAA,EAiJ5E,IAjJ4E;EA2GvE,CAAA;AAYhB;AACQ,iBA6BQ,UAAA,CA7BR;EAAA,KAAA;EAAA,QAAA;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EA6B6D,WA7B7D,CAAA,EA6BwE,mBAAA,CAAA,GAAA,CAAA,OA7BxE;AAEA,KAwFI,eAAA,GAAkB,iBAxFtB,GAwF0C,cAxF1C,CAAA,KAAA,CAAA;AAAL,iBA0Fa,cAAA,CA1Fb;EAAA,WAAA;EAAA,gBAAA;EAAA,WAAA;EAAA,GAAA;AAAA,CAAA,EA+FA,eA/FA,CAAA,EA+Fe,mBAAA,CAAA,GAAA,CAAA,OAAA,GA/Ff,IAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","names":["Fragment"],"sources":["../../../../src/layouts/docs/page/client.tsx"],"sourcesContent":["'use client';\n\nimport {\n type ComponentProps,\n createContext,\n Fragment,\n use,\n useEffect,\n useEffectEvent,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { ChevronDown, ChevronLeft, ChevronRight } from 'lucide-react';\nimport Link from 'fumadocs-core/link';\nimport { cn } from '@fumadocs/ui/cn';\nimport { useI18n } from '@/contexts/i18n';\nimport { useTreeContext, useTreePath } from '@/contexts/tree';\nimport type * as PageTree from 'fumadocs-core/page-tree';\nimport { usePathname } from 'fumadocs-core/framework';\nimport { type BreadcrumbOptions, getBreadcrumbItemsFromPath } from 'fumadocs-core/breadcrumb';\nimport { isActive } from '@fumadocs/ui/urls';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible';\nimport { useTOCItems } from '@/components/toc';\nimport { useActiveAnchor } from 'fumadocs-core/toc';\nimport { LayoutContext } from '../client';\nimport { useFooterItems } from '@fumadocs/ui/hooks/use-footer-items';\n\nconst TocPopoverContext = createContext<{\n open: boolean;\n setOpen: (open: boolean) => void;\n} | null>(null);\n\nexport function PageTOCPopover({ className, children, ...rest }: ComponentProps<'div'>) {\n const ref = useRef<HTMLElement>(null);\n const [open, setOpen] = useState(false);\n const { isNavTransparent } = use(LayoutContext)!;\n\n const onClick = useEffectEvent((e: Event) => {\n if (!open) return;\n\n if (ref.current && !ref.current.contains(e.target as HTMLElement)) setOpen(false);\n });\n\n useEffect(() => {\n window.addEventListener('click', onClick);\n\n return () => {\n window.removeEventListener('click', onClick);\n };\n }, []);\n\n return (\n <TocPopoverContext\n value={useMemo(\n () => ({\n open,\n setOpen,\n }),\n [setOpen, open],\n )}\n >\n <Collapsible\n open={open}\n onOpenChange={setOpen}\n data-toc-popover=\"\"\n className={cn(\n 'sticky top-(--fd-docs-row-2) z-10 [grid-area:toc-popover] h-(--fd-toc-popover-height) xl:hidden max-xl:layout:[--fd-toc-popover-height:--spacing(10)]',\n className,\n )}\n {...rest}\n >\n <header\n ref={ref}\n className={cn(\n 'border-b backdrop-blur-sm transition-colors',\n (!isNavTransparent || open) && 'bg-fd-background/80',\n open && 'shadow-lg',\n )}\n >\n {children}\n </header>\n </Collapsible>\n </TocPopoverContext>\n );\n}\n\nexport function PageTOCPopoverTrigger({ className, ...props }: ComponentProps<'button'>) {\n const { text } = useI18n();\n const { open } = use(TocPopoverContext)!;\n const items = useTOCItems();\n const active = useActiveAnchor();\n const selected = useMemo(\n () => items.findIndex((item) => active === item.url.slice(1)),\n [items, active],\n );\n const path = useTreePath().at(-1);\n const showItem = selected !== -1 && !open;\n\n return (\n <CollapsibleTrigger\n className={cn(\n 'flex w-full h-10 items-center text-sm text-fd-muted-foreground gap-2.5 px-4 py-2.5 text-start focus-visible:outline-none [&_svg]:size-4 md:px-6',\n className,\n )}\n data-toc-popover-trigger=\"\"\n {...props}\n >\n <ProgressCircle\n value={(selected + 1) / Math.max(1, items.length)}\n max={1}\n className={cn('shrink-0', open && 'text-fd-primary')}\n />\n <span className=\"grid flex-1 *:my-auto *:row-start-1 *:col-start-1\">\n <span\n className={cn(\n 'truncate transition-[opacity,translate,color]',\n open && 'text-fd-foreground',\n showItem && 'opacity-0 -translate-y-full pointer-events-none',\n )}\n >\n {path?.name ?? text.toc}\n </span>\n <span\n className={cn(\n 'truncate transition-[opacity,translate]',\n !showItem && 'opacity-0 translate-y-full pointer-events-none',\n )}\n >\n {items[selected]?.title}\n </span>\n </span>\n <ChevronDown className={cn('shrink-0 transition-transform mx-0.5', open && 'rotate-180')} />\n </CollapsibleTrigger>\n );\n}\n\ninterface ProgressCircleProps extends Omit<React.ComponentProps<'svg'>, 'strokeWidth'> {\n value: number;\n strokeWidth?: number;\n size?: number;\n min?: number;\n max?: number;\n}\n\nfunction clamp(input: number, min: number, max: number): number {\n if (input < min) return min;\n if (input > max) return max;\n return input;\n}\n\nfunction ProgressCircle({\n value,\n strokeWidth = 2,\n size = 24,\n min = 0,\n max = 100,\n ...restSvgProps\n}: ProgressCircleProps) {\n const normalizedValue = clamp(value, min, max);\n const radius = (size - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const progress = (normalizedValue / max) * circumference;\n const circleProps = {\n cx: size / 2,\n cy: size / 2,\n r: radius,\n fill: 'none',\n strokeWidth,\n };\n\n return (\n <svg\n role=\"progressbar\"\n viewBox={`0 0 ${size} ${size}`}\n aria-valuenow={normalizedValue}\n aria-valuemin={min}\n aria-valuemax={max}\n {...restSvgProps}\n >\n <circle {...circleProps} className=\"stroke-current/25\" />\n <circle\n {...circleProps}\n stroke=\"currentColor\"\n strokeDasharray={circumference}\n strokeDashoffset={circumference - progress}\n strokeLinecap=\"round\"\n transform={`rotate(-90 ${size / 2} ${size / 2})`}\n className=\"transition-all\"\n />\n </svg>\n );\n}\n\nexport function PageTOCPopoverContent(props: ComponentProps<'div'>) {\n return (\n <CollapsibleContent\n data-toc-popover-content=\"\"\n {...props}\n className={cn('flex flex-col px-4 max-h-[50vh] md:px-6', props.className)}\n >\n {props.children}\n </CollapsibleContent>\n );\n}\n\nexport function PageLastUpdate({\n date: value,\n ...props\n}: Omit<ComponentProps<'p'>, 'children'> & { date: Date }) {\n const { text } = useI18n();\n const [date, setDate] = useState('');\n\n useEffect(() => {\n // to the timezone of client\n setDate(value.toLocaleDateString());\n }, [value]);\n\n return (\n <p {...props} className={cn('text-sm text-fd-muted-foreground', props.className)}>\n {text.lastUpdate} {date}\n </p>\n );\n}\n\ntype Item = Pick<PageTree.Item, 'name' | 'description' | 'url'>;\nexport interface FooterProps extends ComponentProps<'div'> {\n /**\n * Items including information for the next and previous page\n */\n items?: {\n previous?: Item;\n next?: Item;\n };\n}\n\nexport function PageFooter({ items, children, className, ...props }: FooterProps) {\n const footerList = useFooterItems();\n const pathname = usePathname();\n const { previous, next } = useMemo(() => {\n if (items) return items;\n\n const idx = footerList.findIndex((item) => isActive(item.url, pathname, false));\n\n if (idx === -1) return {};\n return {\n previous: footerList[idx - 1],\n next: footerList[idx + 1],\n };\n }, [footerList, items, pathname]);\n\n return (\n <>\n <div\n className={cn(\n '@container grid gap-4',\n previous && next ? 'grid-cols-2' : 'grid-cols-1',\n className,\n )}\n {...props}\n >\n {previous && <FooterItem item={previous} index={0} />}\n {next && <FooterItem item={next} index={1} />}\n </div>\n {children}\n </>\n );\n}\n\nfunction FooterItem({ item, index }: { item: Item; index: 0 | 1 }) {\n const { text } = useI18n();\n const Icon = index === 0 ? ChevronLeft : ChevronRight;\n\n return (\n <Link\n href={item.url}\n className={cn(\n 'flex flex-col gap-2 rounded-lg border p-4 text-sm transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground @max-lg:col-span-full',\n index === 1 && 'text-end',\n )}\n >\n <div\n className={cn(\n 'inline-flex items-center gap-1.5 font-medium',\n index === 1 && 'flex-row-reverse',\n )}\n >\n <Icon className=\"-mx-1 size-4 shrink-0 rtl:rotate-180\" />\n <p>{item.name}</p>\n </div>\n <p className=\"text-fd-muted-foreground truncate\">\n {item.description ?? (index === 0 ? text.previousPage : text.nextPage)}\n </p>\n </Link>\n );\n}\n\nexport type BreadcrumbProps = BreadcrumbOptions & ComponentProps<'div'>;\n\nexport function PageBreadcrumb({\n includeRoot,\n includeSeparator,\n includePage,\n ...props\n}: BreadcrumbProps) {\n const path = useTreePath();\n const { root } = useTreeContext();\n const items = useMemo(() => {\n return getBreadcrumbItemsFromPath(root, path, {\n includePage,\n includeSeparator,\n includeRoot,\n });\n }, [includePage, includeRoot, includeSeparator, path, root]);\n\n if (items.length === 0) return null;\n\n return (\n <div\n {...props}\n className={cn('flex items-center gap-1.5 text-sm text-fd-muted-foreground', props.className)}\n >\n {items.map((item, i) => {\n const className = cn('truncate', i === items.length - 1 && 'text-fd-primary font-medium');\n\n return (\n <Fragment key={i}>\n {i !== 0 && <ChevronRight className=\"size-3.5 shrink-0\" />}\n {item.url ? (\n <Link\n href={item.url}\n className={cn(className, 'transition-opacity hover:opacity-80')}\n >\n {item.name}\n </Link>\n ) : (\n <span className={className}>{item.name}</span>\n )}\n </Fragment>\n );\n })}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/layouts/docs/page/index.tsx"],"sourcesContent":[],"mappings":";;;;;;UAmBU,iBAAA,SAA0B;;aAEvB;AAP6D;AAKvB,UAKzC,aAAA,SAAsB,WAEnB,CAFmB;EAKf,OAAA,EAAA,OAAa;EACtB,SAAA,EAJK,SAIL;;AACW,UAFF,aAAA,CAEE;EACe,GAAA,CAAA,EAF1B,WAE0B,EAAA;EAAR,cAAA,CAAA,EADP,OACO,CADC,qBACD,CAAA;EAYH,qBAAA,CAAA,EAZG,OAYH,CAZW,4BAYX,CAAA;EAAR;;;;;EAiBV,IAAA,CAAA,EAAA,OAAA;EAA6B;;;EASvB,UAAA,CAAA,EA1BI,OA0BJ,CA1BY,iBA0BZ,CAAA;EAGE;;AAAS;AAUtB;;EAC8D,MAAA,CAAA,EAjCnD,OAiCmD,CAjC3C,aAiC2C,CAAA;EACzC,QAAA,CAAA,EAhCR,SAgCQ;EAA0B;;;EAIhC,SAAA,CAAA,EAAA,MAAA;;KA5BV,qBAAA,GAAwB,IA+BuB,CA/BlB,mBA+BkB,EAAA,QAAA,CAAA,GAAA;EAClD;;;EAGC,MAAA,CAAA,EA/BQ,SA+BR;EAAa;;AA4EhB;EA4BgB,MAAA,CAAA,EAlIL,SAkIa;EAAG,OAAA,EAAA,OAAA;EAAU,SAAA,EA/HxB,SA+HwB;EAAuB;;;EAQ5C,KAAA,CAAA,EAAA,QAAA,GAAe,OAAA;CAAG;KA/H7B,4BAAA,GAA+B,IA+HQ,CA/HH,qBA+HG,EAAA,QAAA,CAAA;AAAuB,iBA7HnD,QAAA,CA6HmD;EAAA,UAAA,EAAA;IAAA,OAAA,EA5H1C,iBA4H0C;IAAA,SAAA,EA5HL,UA4HK;IAAA,GAAA;EAAA,CAAA;EAAA,MAAA,EAAA;IAAA,OAAA,EA3H9C,aA2H8C;IAAA,SAAA,EA3HpB,aA2HoB;IAAA,GAAA;EAAA,CAAA;EAAA,IAAA;EAAA,qBAAA,EAAA;IAAA,OAAA,EAxHtD,iBAwHsD;IAAA,SAAA,EAvHpD,UAuHoD;IAAA,GAAA;EAAA,CAAA;EAAA,cAAA,EAAA;IAAA,OAAA,EApHtC,UAoHsC;IAAA,SAAA,EApHf,UAoHe;IAAA,GAAA;EAAA,CAAA;EAAA,GAAA;EAAA,QAAA;EAAA;AAAA,CAAA,EAhHhE,aAgHgE,CAAA,EAhHnD,SAgHmD;AAAmB,iBApCtE,YAAA,CAoCsE,KAAA,EApClD,cAoCkD,CAAA,GAAA,CAAA,CAAA,EApC/B,mBAAA,CAAA,GAAA,CAAA,OAoC+B;;AAWtF;;AAAsC,iBAnBtB,QAAA,CAmBsB;EAAA,QAAA;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EAnBsB,cAmBtB,CAAA,KAAA,CAAA,CAAA,EAnB2C,mBAAA,CAAA,GAAA,CAAA,OAmB3C;AAAuB,iBAX7C,eAAA,CAW6C;EAAA,QAAA;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EAXM,cAWN,CAAA,GAAA,CAAA,CAAA,EAXyB,mBAAA,CAAA,GAAA,CAAA,OAAA,GAWzB,IAAA;AAAoB,iBAAjE,SAAA,CAAiE;EAAA,QAAA;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EAApB,cAAoB,CAAA,IAAA,CAAA,CAAA,EAAA,mBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["children","TOCProvider","TOCScrollArea","TocClerk","TocDefault","I18nLabel"],"sources":["../../../../src/layouts/docs/page/index.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\nimport { cn } from '@fumadocs/ui/cn';\nimport { buttonVariants } from '@/components/ui/button';\nimport { Edit, Text } from 'lucide-react';\nimport { I18nLabel } from '@/contexts/i18n';\nimport {\n type BreadcrumbProps,\n type FooterProps,\n PageBreadcrumb,\n PageFooter,\n PageTOCPopover,\n PageTOCPopoverContent,\n PageTOCPopoverTrigger,\n} from './client';\nimport type { AnchorProviderProps, TOCItemType } from 'fumadocs-core/toc';\nimport * as TocDefault from '@/components/toc/default';\nimport * as TocClerk from '@/components/toc/clerk';\nimport { TOCProvider, TOCScrollArea } from '@/components/toc';\n\ninterface BreadcrumbOptions extends BreadcrumbProps {\n enabled: boolean;\n component: ReactNode;\n}\n\ninterface FooterOptions extends FooterProps {\n enabled: boolean;\n component: ReactNode;\n}\n\nexport interface DocsPageProps {\n toc?: TOCItemType[];\n tableOfContent?: Partial<TableOfContentOptions>;\n tableOfContentPopover?: Partial<TableOfContentPopoverOptions>;\n\n /**\n * Extend the page to fill all available space\n *\n * @defaultValue false\n */\n full?: boolean;\n\n /**\n * Replace or disable breadcrumb\n */\n breadcrumb?: Partial<BreadcrumbOptions>;\n\n /**\n * Footer navigation, located under the page body.\n *\n * You can specify `footer.children` to add extra components under the footer.\n */\n footer?: Partial<FooterOptions>;\n\n children?: ReactNode;\n\n /**\n * Apply class names to the `#nd-page` container.\n */\n className?: string;\n}\n\ntype TableOfContentOptions = Pick<AnchorProviderProps, 'single'> & {\n /**\n * Custom content in TOC container, before the main TOC\n */\n header?: ReactNode;\n\n /**\n * Custom content in TOC container, after the main TOC\n */\n footer?: ReactNode;\n\n enabled: boolean;\n component: ReactNode;\n\n /**\n * @defaultValue 'normal'\n */\n style?: 'normal' | 'clerk';\n};\n\ntype TableOfContentPopoverOptions = Omit<TableOfContentOptions, 'single'>;\n\nexport function DocsPage({\n breadcrumb: { enabled: breadcrumbEnabled = true, component: breadcrumb, ...breadcrumbProps } = {},\n footer: { enabled: footerEnabled, component: footerReplace, ...footerProps } = {},\n full = false,\n tableOfContentPopover: {\n enabled: tocPopoverEnabled,\n component: tocPopover,\n ...tocPopoverOptions\n } = {},\n tableOfContent: { enabled: tocEnabled, component: tocReplace, ...tocOptions } = {},\n toc = [],\n children,\n className,\n}: DocsPageProps) {\n // disable TOC on full mode, you can still enable it with `enabled` option.\n tocEnabled ??=\n !full && (toc.length > 0 || tocOptions.footer !== undefined || tocOptions.header !== undefined);\n\n tocPopoverEnabled ??=\n toc.length > 0 ||\n tocPopoverOptions.header !== undefined ||\n tocPopoverOptions.footer !== undefined;\n\n let wrapper = (children: ReactNode) => children;\n\n if (tocEnabled || tocPopoverEnabled) {\n wrapper = (children) => (\n <TOCProvider single={tocOptions.single} toc={toc}>\n {children}\n </TOCProvider>\n );\n }\n\n return wrapper(\n <>\n {tocPopoverEnabled &&\n (tocPopover ?? (\n <PageTOCPopover>\n <PageTOCPopoverTrigger />\n <PageTOCPopoverContent>\n {tocPopoverOptions.header}\n <TOCScrollArea>\n {tocPopoverOptions.style === 'clerk' ? (\n <TocClerk.TOCItems />\n ) : (\n <TocDefault.TOCItems />\n )}\n </TOCScrollArea>\n {tocPopoverOptions.footer}\n </PageTOCPopoverContent>\n </PageTOCPopover>\n ))}\n <article\n id=\"nd-page\"\n data-full={full}\n className={cn(\n 'flex flex-col w-full max-w-[900px] mx-auto [grid-area:main] px-4 py-6 gap-4 md:px-6 md:pt-8 xl:px-8 xl:pt-14',\n full ? 'max-w-[1200px]' : 'xl:layout:[--fd-toc-width:268px]',\n className,\n )}\n >\n {breadcrumbEnabled && (breadcrumb ?? <PageBreadcrumb {...breadcrumbProps} />)}\n {children}\n {footerEnabled !== false && (footerReplace ?? <PageFooter {...footerProps} />)}\n </article>\n {tocEnabled &&\n (tocReplace ?? (\n <div\n id=\"nd-toc\"\n className=\"sticky top-(--fd-docs-row-1) h-[calc(var(--fd-docs-height)-var(--fd-docs-row-1))] flex flex-col [grid-area:toc] w-(--fd-toc-width) pt-12 pe-4 pb-2 max-xl:hidden\"\n >\n {tocOptions.header}\n <h3\n id=\"toc-title\"\n className=\"inline-flex items-center gap-1.5 text-sm text-fd-muted-foreground\"\n >\n <Text className=\"size-4\" />\n <I18nLabel label=\"toc\" />\n </h3>\n <TOCScrollArea>\n {tocOptions.style === 'clerk' ? <TocClerk.TOCItems /> : <TocDefault.TOCItems />}\n </TOCScrollArea>\n {tocOptions.footer}\n </div>\n ))}\n </>,\n );\n}\n\nexport function EditOnGitHub(props: ComponentProps<'a'>) {\n return (\n <a\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n {...props}\n className={cn(\n buttonVariants({\n color: 'secondary',\n size: 'sm',\n className: 'gap-1.5 not-prose',\n }),\n props.className,\n )}\n >\n {props.children ?? (\n <>\n <Edit className=\"size-3.5\" />\n <I18nLabel label=\"editOnGithub\" />\n </>\n )}\n </a>\n );\n}\n\n/**\n * Add typography styles\n */\nexport function DocsBody({ children, className, ...props }: ComponentProps<'div'>) {\n return (\n <div {...props} className={cn('prose flex-1', className)}>\n {children}\n </div>\n );\n}\n\nexport function DocsDescription({ children, className, ...props }: ComponentProps<'p'>) {\n // Don't render if no description provided\n if (children === undefined) return null;\n\n return (\n <p {...props} className={cn('mb-8 text-lg text-fd-muted-foreground', className)}>\n {children}\n </p>\n );\n}\n\nexport function DocsTitle({ children, className, ...props }: ComponentProps<'h1'>) {\n return (\n <h1 {...props} className={cn('text-[1.75em] font-semibold', className)}>\n {children}\n </h1>\n );\n}\n\nexport { PageLastUpdate, PageBreadcrumb } from './client';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAmFA,SAAgB,SAAS,EACvB,YAAY,EAAE,SAAS,oBAAoB,MAAM,WAAW,YAAY,GAAG,oBAAoB,EAAE,EACjG,QAAQ,EAAE,SAAS,eAAe,WAAW,eAAe,GAAG,gBAAgB,EAAE,EACjF,OAAO,OACP,uBAAuB,EACrB,SAAS,mBACT,WAAW,YACX,GAAG,sBACD,EAAE,EACN,gBAAgB,EAAE,SAAS,YAAY,WAAW,YAAY,GAAG,eAAe,EAAE,EAClF,MAAM,EAAE,EACR,UACA,aACgB;AAEhB,gBACE,CAAC,SAAS,IAAI,SAAS,KAAK,WAAW,WAAW,UAAa,WAAW,WAAW;AAEvF,uBACE,IAAI,SAAS,KACb,kBAAkB,WAAW,UAC7B,kBAAkB,WAAW;CAE/B,IAAI,WAAW,eAAwBA;AAEvC,KAAI,cAAc,kBAChB,YAAW,eACT,oBAACC;EAAY,QAAQ,WAAW;EAAa;YAC1CD;GACW;AAIlB,QAAO,QACL;EACG,sBACE,cACC,qBAAC,6BACC,oBAAC,0BAAwB,EACzB,qBAAC;GACE,kBAAkB;GACnB,oBAACE,uCACE,kBAAkB,UAAU,UAC3B,oBAACC,cAAS,aAAW,GAErB,oBAACC,gBAAW,aAAW,GAEX;GACf,kBAAkB;MACG,IACT;EAErB,qBAAC;GACC,IAAG;GACH,aAAW;GACX,WAAW,GACT,gHACA,OAAO,mBAAmB,oCAC1B,UACD;;IAEA,sBAAsB,cAAc,oBAAC,kBAAe,GAAI,kBAAmB;IAC3E;IACA,kBAAkB,UAAU,iBAAiB,oBAAC,cAAW,GAAI,cAAe;;IACrE;EACT,eACE,cACC,qBAAC;GACC,IAAG;GACH,WAAU;;IAET,WAAW;IACZ,qBAAC;KACC,IAAG;KACH,WAAU;gBAEV,oBAAC,QAAK,WAAU,WAAW,EAC3B,oBAACC,0BAAU,OAAM,QAAQ;MACtB;IACL,oBAACH,uCACE,WAAW,UAAU,UAAU,oBAACC,cAAS,aAAW,GAAG,oBAACC,gBAAW,aAAW,GACjE;IACf,WAAW;;IACR;KAET,CACJ;;AAGH,SAAgB,aAAa,OAA4B;AACvD,QACE,oBAAC;EACC,QAAO;EACP,KAAI;EACJ,GAAI;EACJ,WAAW,GACT,eAAe;GACb,OAAO;GACP,MAAM;GACN,WAAW;GACZ,CAAC,EACF,MAAM,UACP;YAEA,MAAM,YACL,4CACE,oBAAC,QAAK,WAAU,aAAa,EAC7B,oBAACC,0BAAU,OAAM,iBAAiB,IACjC;GAEH;;;;;AAOR,SAAgB,SAAS,EAAE,UAAU,WAAW,GAAG,SAAgC;AACjF,QACE,oBAAC;EAAI,GAAI;EAAO,WAAW,GAAG,gBAAgB,UAAU;EACrD;GACG;;AAIV,SAAgB,gBAAgB,EAAE,UAAU,WAAW,GAAG,SAA8B;AAEtF,KAAI,aAAa,OAAW,QAAO;AAEnC,QACE,oBAAC;EAAE,GAAI;EAAO,WAAW,GAAG,yCAAyC,UAAU;EAC5E;GACC;;AAIR,SAAgB,UAAU,EAAE,UAAU,WAAW,GAAG,SAA+B;AACjF,QACE,oBAAC;EAAG,GAAI;EAAO,WAAW,GAAG,+BAA+B,UAAU;EACnE;GACE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidebar.d.ts","names":[],"sources":["../../../src/layouts/docs/sidebar.tsx"],"sourcesContent":[],"mappings":";;;;;;;;iBAwCgB,cAAA;OACT;;;;GAIJ,0BAAuB,oBAAA,CAAA,GAAA,CAAA;iBA8DV,aAAA;;;;GAIb,sBAAsB,wBAA0B,oBAAA,CAAA,GAAA,CAAA;iBAiBnC,gBAAA;;;;;GAA2D,sBAAmB,oBAAA,CAAA,GAAA,CAAA;iBAiB9E,WAAA;;;;;GAKb,sBAAsB,iBAAiB,oBAAA,CAAA,GAAA,CAAA;iBAiB1B,oBAAA;;;;GAIb,sBAAsB,0BAA0B,oBAAA,CAAA,GAAA,CAAA;AAnInC,iBAoJA,iBAAA,CApJc;EAAA,SAAA;EAAA,KAAA;EAAA,GAAA;AAAA,CAAA,EAwJ3B,cAxJ2B,CAAA,OAwJL,mBAxJK,CAAA,CAAA,EAwJkB,oBAAA,CAAA,GAAA,CAAA,OAxJlB;AACvB,iBAwKS,oBAAA,CAxKT;EAAA,SAAA;EAAA,QAAA;EAAA,GAAA;AAAA,CAAA,EA4KJ,cA5KI,CAAA,OA4KkB,sBA5KlB,CAAA,CAAA,EA4K4C,oBAAA,CAAA,GAAA,CAAA,OA5K5C;AACL,cA6LW,eA7LX,EAAA,CAAA,UAAA,EA6L0B,OA7L1B,CAoMA,yBAAA,CApMA,EAAA,GA6L0B,oBAAA,CAAA,GAAA,CAAA,OA7L1B;AACA,cAqMW,eArMX,EAAA,CAAA;EAAA,IAAA;EAAA,GAAA;AAgEF,CAhEE,EAqM0B,OAAA,CAAA,cArM1B,CAqM0B,WArM1B,CAAA,GAAA;EAEC,IAAA,SAAA,CAmMyB,uBAAA,CAAA,YAAA,EAnMzB;IAAuB,IAAA,EAAA,MAAA;EAAA,CAAA,CAAA;AA8D1B,CAAA,EAAA,mCAA6B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidebar.js","names":["Base.SidebarContent","Base.SidebarCollapseTrigger","SidebarIcon","Base.SidebarDrawerOverlay","Base.SidebarDrawerContent","Base.useFolderDepth","Base.SidebarSeparator","Base.SidebarItem","Base.useFolder","Base.SidebarFolderTrigger","Base.SidebarFolderLink","Base.SidebarFolderContent","Base.SidebarFolder"],"sources":["../../../src/layouts/docs/sidebar.tsx"],"sourcesContent":["'use client';\nimport * as Base from '@/components/sidebar/base';\nimport { cn } from '@fumadocs/ui/cn';\nimport { type ComponentProps, useRef } from 'react';\nimport { cva } from 'class-variance-authority';\nimport { createPageTreeRenderer } from '@/components/sidebar/page-tree';\nimport { createLinkItemRenderer } from '@/components/sidebar/link-item';\nimport { buttonVariants } from '@/components/ui/button';\nimport { SearchToggle } from '@/layouts/shared/search-toggle';\nimport { Sidebar as SidebarIcon } from 'lucide-react';\nimport { mergeRefs } from '@fumadocs/ui/merge-refs';\n\nconst itemVariants = cva(\n 'relative flex flex-row items-center gap-2 rounded-lg p-2 text-start text-fd-muted-foreground wrap-anywhere [&_svg]:size-4 [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n link: 'transition-colors hover:bg-fd-accent/50 hover:text-fd-accent-foreground/80 hover:transition-none data-[active=true]:bg-fd-primary/10 data-[active=true]:text-fd-primary data-[active=true]:hover:transition-colors',\n button:\n 'transition-colors hover:bg-fd-accent/50 hover:text-fd-accent-foreground/80 hover:transition-none',\n },\n highlight: {\n true: \"data-[active=true]:before:content-[''] data-[active=true]:before:bg-fd-primary data-[active=true]:before:absolute data-[active=true]:before:w-px data-[active=true]:before:inset-y-2.5 data-[active=true]:before:start-2.5\",\n },\n },\n },\n);\n\nfunction getItemOffset(depth: number) {\n return `calc(${2 + 3 * depth} * var(--spacing))`;\n}\n\nexport {\n SidebarProvider as Sidebar,\n SidebarFolder,\n SidebarCollapseTrigger,\n SidebarViewport,\n SidebarTrigger,\n} from '@/components/sidebar/base';\n\nexport function SidebarContent({\n ref: refProp,\n className,\n children,\n ...props\n}: ComponentProps<'aside'>) {\n const ref = useRef<HTMLElement>(null);\n\n return (\n <Base.SidebarContent>\n {({ collapsed, hovered, ref: asideRef, ...rest }) => (\n <>\n <div\n data-sidebar-placeholder=\"\"\n className=\"sticky top-(--fd-docs-row-1) z-20 [grid-area:sidebar] pointer-events-none *:pointer-events-auto h-[calc(var(--fd-docs-height)-var(--fd-docs-row-1))] md:layout:[--fd-sidebar-width:268px] max-md:hidden\"\n >\n {collapsed && <div className=\"absolute start-0 inset-y-0 w-4\" {...rest} />}\n <aside\n id=\"nd-sidebar\"\n ref={mergeRefs(ref, refProp, asideRef)}\n data-collapsed={collapsed}\n data-hovered={collapsed && hovered}\n className={cn(\n 'absolute flex flex-col w-full start-0 inset-y-0 items-end bg-fd-card text-sm border-e duration-250 *:w-(--fd-sidebar-width)',\n collapsed && [\n 'inset-y-2 rounded-xl transition-transform border w-(--fd-sidebar-width)',\n hovered\n ? 'shadow-lg translate-x-2 rtl:-translate-x-2'\n : '-translate-x-(--fd-sidebar-width) rtl:translate-x-full',\n ],\n ref.current &&\n (ref.current.getAttribute('data-collapsed') === 'true') !== collapsed &&\n 'transition-[width,inset-block,translate,background-color]',\n className,\n )}\n {...props}\n {...rest}\n >\n {children}\n </aside>\n </div>\n <div\n data-sidebar-panel=\"\"\n className={cn(\n 'fixed flex top-[calc(--spacing(4)+var(--fd-docs-row-3))] start-4 shadow-lg transition-opacity rounded-xl p-0.5 border bg-fd-muted text-fd-muted-foreground z-10',\n (!collapsed || hovered) && 'pointer-events-none opacity-0',\n )}\n >\n <Base.SidebarCollapseTrigger\n className={cn(\n buttonVariants({\n color: 'ghost',\n size: 'icon-sm',\n className: 'rounded-lg',\n }),\n )}\n >\n <SidebarIcon />\n </Base.SidebarCollapseTrigger>\n <SearchToggle className=\"rounded-lg\" hideIfDisabled />\n </div>\n </>\n )}\n </Base.SidebarContent>\n );\n}\n\nexport function SidebarDrawer({\n children,\n className,\n ...props\n}: ComponentProps<typeof Base.SidebarDrawerContent>) {\n return (\n <>\n <Base.SidebarDrawerOverlay className=\"fixed z-40 inset-0 backdrop-blur-xs data-[state=open]:animate-fd-fade-in data-[state=closed]:animate-fd-fade-out\" />\n <Base.SidebarDrawerContent\n className={cn(\n 'fixed text-[0.9375rem] flex flex-col shadow-lg border-s end-0 inset-y-0 w-[85%] max-w-[380px] z-40 bg-fd-background data-[state=open]:animate-fd-sidebar-in data-[state=closed]:animate-fd-sidebar-out',\n className,\n )}\n {...props}\n >\n {children}\n </Base.SidebarDrawerContent>\n </>\n );\n}\n\nexport function SidebarSeparator({ className, style, children, ...props }: ComponentProps<'p'>) {\n const depth = Base.useFolderDepth();\n\n return (\n <Base.SidebarSeparator\n className={cn('[&_svg]:size-4 [&_svg]:shrink-0', className)}\n style={{\n paddingInlineStart: getItemOffset(depth),\n ...style,\n }}\n {...props}\n >\n {children}\n </Base.SidebarSeparator>\n );\n}\n\nexport function SidebarItem({\n className,\n style,\n children,\n ...props\n}: ComponentProps<typeof Base.SidebarItem>) {\n const depth = Base.useFolderDepth();\n\n return (\n <Base.SidebarItem\n className={cn(itemVariants({ variant: 'link', highlight: depth >= 1 }), className)}\n style={{\n paddingInlineStart: getItemOffset(depth),\n ...style,\n }}\n {...props}\n >\n {children}\n </Base.SidebarItem>\n );\n}\n\nexport function SidebarFolderTrigger({\n className,\n style,\n ...props\n}: ComponentProps<typeof Base.SidebarFolderTrigger>) {\n const { depth, collapsible } = Base.useFolder()!;\n\n return (\n <Base.SidebarFolderTrigger\n className={cn(itemVariants({ variant: collapsible ? 'button' : null }), 'w-full', className)}\n style={{\n paddingInlineStart: getItemOffset(depth - 1),\n ...style,\n }}\n {...props}\n >\n {props.children}\n </Base.SidebarFolderTrigger>\n );\n}\n\nexport function SidebarFolderLink({\n className,\n style,\n ...props\n}: ComponentProps<typeof Base.SidebarFolderLink>) {\n const depth = Base.useFolderDepth();\n\n return (\n <Base.SidebarFolderLink\n className={cn(itemVariants({ variant: 'link', highlight: depth > 1 }), 'w-full', className)}\n style={{\n paddingInlineStart: getItemOffset(depth - 1),\n ...style,\n }}\n {...props}\n >\n {props.children}\n </Base.SidebarFolderLink>\n );\n}\n\nexport function SidebarFolderContent({\n className,\n children,\n ...props\n}: ComponentProps<typeof Base.SidebarFolderContent>) {\n const depth = Base.useFolderDepth();\n\n return (\n <Base.SidebarFolderContent\n className={cn(\n 'relative',\n depth === 1 &&\n \"before:content-[''] before:absolute before:w-px before:inset-y-1 before:bg-fd-border before:start-2.5\",\n className,\n )}\n {...props}\n >\n {children}\n </Base.SidebarFolderContent>\n );\n}\n\nexport const SidebarPageTree = createPageTreeRenderer({\n SidebarFolder: Base.SidebarFolder,\n SidebarFolderContent,\n SidebarFolderLink,\n SidebarFolderTrigger,\n SidebarItem,\n SidebarSeparator,\n});\n\nexport const SidebarLinkItem = createLinkItemRenderer({\n SidebarFolder: Base.SidebarFolder,\n SidebarFolderContent,\n SidebarFolderLink,\n SidebarFolderTrigger,\n SidebarItem,\n});\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","names":[],"sources":["../../../src/layouts/home/client.tsx"],"sourcesContent":[],"mappings":";;;;;cA6Ba;;IAiBX,+BAAA,CAAA;iBAEc,MAAA;;;;;;;GAOb,kBAAe,oBAAA,CAAA,GAAA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","names":["navItems: LinkItemType[]","menuItems: LinkItemType[]","Fragment"],"sources":["../../../src/layouts/home/client.tsx"],"sourcesContent":["'use client';\nimport { type ComponentProps, Fragment, useMemo, useState } from 'react';\nimport { cva } from 'class-variance-authority';\nimport Link from 'fumadocs-core/link';\nimport { cn } from '@fumadocs/ui/cn';\nimport {\n type LinkItemType,\n type NavOptions,\n renderTitleNav,\n resolveLinkItems,\n} from '@/layouts/shared';\nimport { LinkItem } from '@fumadocs/ui/link-item';\nimport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n NavigationMenuViewport,\n} from '@/components/ui/navigation-menu';\nimport { buttonVariants } from '@/components/ui/button';\nimport type { HomeLayoutProps } from '.';\nimport { LargeSearchToggle, SearchToggle } from '@/layouts/shared/search-toggle';\nimport { ThemeToggle } from '@/layouts/shared/theme-toggle';\nimport { LanguageToggle, LanguageToggleText } from '@/layouts/shared/language-toggle';\nimport { ChevronDown, Languages } from 'lucide-react';\nimport { useIsScrollTop } from '@fumadocs/ui/hooks/use-is-scroll-top';\n\nexport const navItemVariants = cva('[&_svg]:size-4', {\n variants: {\n variant: {\n main: 'inline-flex items-center gap-1 p-2 text-fd-muted-foreground transition-colors hover:text-fd-accent-foreground data-[active=true]:text-fd-primary',\n button: buttonVariants({\n color: 'secondary',\n className: 'gap-1.5',\n }),\n icon: buttonVariants({\n color: 'ghost',\n size: 'icon',\n }),\n },\n },\n defaultVariants: {\n variant: 'main',\n },\n});\n\nexport function Header({\n nav = {},\n i18n = false,\n links,\n githubUrl,\n themeSwitch = {},\n searchToggle = {},\n}: HomeLayoutProps) {\n const { navItems, menuItems } = useMemo(() => {\n const navItems: LinkItemType[] = [];\n const menuItems: LinkItemType[] = [];\n\n for (const item of resolveLinkItems({ links, githubUrl })) {\n switch (item.on ?? 'all') {\n case 'menu':\n menuItems.push(item);\n break;\n case 'nav':\n navItems.push(item);\n break;\n default:\n navItems.push(item);\n menuItems.push(item);\n }\n }\n\n return { navItems, menuItems };\n }, [links, githubUrl]);\n\n return (\n <HeaderNavigationMenu transparentMode={nav.transparentMode}>\n {renderTitleNav(nav, {\n className: 'inline-flex items-center gap-2.5 font-semibold',\n })}\n {nav.children}\n <ul className=\"flex flex-row items-center gap-2 px-6 max-sm:hidden\">\n {navItems\n .filter((item) => !isSecondary(item))\n .map((item, i) => (\n <NavigationMenuLinkItem key={i} item={item} className=\"text-sm\" />\n ))}\n </ul>\n <div className=\"flex flex-row items-center justify-end gap-1.5 flex-1 max-lg:hidden\">\n {searchToggle.enabled !== false &&\n (searchToggle.components?.lg ?? (\n <LargeSearchToggle\n className=\"w-full rounded-full ps-2.5 max-w-[240px]\"\n hideIfDisabled\n />\n ))}\n {themeSwitch.enabled !== false &&\n (themeSwitch.component ?? <ThemeToggle mode={themeSwitch?.mode} />)}\n {i18n && (\n <LanguageToggle>\n <Languages className=\"size-5\" />\n </LanguageToggle>\n )}\n <ul className=\"flex flex-row gap-2 items-center empty:hidden\">\n {navItems.filter(isSecondary).map((item, i) => (\n <NavigationMenuLinkItem\n key={i}\n className={cn(item.type === 'icon' && '-mx-1 first:ms-0 last:me-0')}\n item={item}\n />\n ))}\n </ul>\n </div>\n <ul className=\"flex flex-row items-center ms-auto -me-1.5 lg:hidden\">\n {searchToggle.enabled !== false &&\n (searchToggle.components?.sm ?? <SearchToggle className=\"p-2\" hideIfDisabled />)}\n <NavigationMenuItem>\n <NavigationMenuTrigger\n aria-label=\"Toggle Menu\"\n className={cn(\n buttonVariants({\n size: 'icon',\n color: 'ghost',\n className: 'group [&_svg]:size-5.5',\n }),\n )}\n onPointerMove={nav.enableHoverToOpen ? undefined : (e) => e.preventDefault()}\n >\n <ChevronDown className=\"transition-transform duration-300 group-data-[state=open]:rotate-180\" />\n </NavigationMenuTrigger>\n <NavigationMenuContent className=\"flex flex-col p-4 sm:flex-row sm:items-center sm:justify-end\">\n {menuItems\n .filter((item) => !isSecondary(item))\n .map((item, i) => (\n <MobileNavigationMenuLinkItem key={i} item={item} className=\"sm:hidden\" />\n ))}\n <div className=\"-ms-1.5 flex flex-row items-center gap-2 max-sm:mt-2\">\n {menuItems.filter(isSecondary).map((item, i) => (\n <MobileNavigationMenuLinkItem\n key={i}\n item={item}\n className={cn(item.type === 'icon' && '-mx-1 first:ms-0')}\n />\n ))}\n <div role=\"separator\" className=\"flex-1\" />\n {i18n && (\n <LanguageToggle>\n <Languages className=\"size-5\" />\n <LanguageToggleText />\n <ChevronDown className=\"size-3 text-fd-muted-foreground\" />\n </LanguageToggle>\n )}\n {themeSwitch.enabled !== false &&\n (themeSwitch.component ?? <ThemeToggle mode={themeSwitch?.mode} />)}\n </div>\n </NavigationMenuContent>\n </NavigationMenuItem>\n </ul>\n </HeaderNavigationMenu>\n );\n}\n\nfunction isSecondary(item: LinkItemType): boolean {\n if ('secondary' in item && item.secondary != null) return item.secondary;\n\n return item.type === 'icon';\n}\n\nfunction HeaderNavigationMenu({\n transparentMode = 'none',\n ...props\n}: ComponentProps<'div'> & {\n transparentMode?: NavOptions['transparentMode'];\n}) {\n const [value, setValue] = useState('');\n const isTop = useIsScrollTop({ enabled: transparentMode === 'top' }) ?? true;\n const isTransparent = transparentMode === 'top' ? isTop : transparentMode === 'always';\n\n return (\n <NavigationMenu value={value} onValueChange={setValue} asChild>\n <header id=\"nd-nav\" {...props} className={cn('sticky h-14 top-0 z-40', props.className)}>\n <div\n className={cn(\n 'backdrop-blur-lg border-b transition-colors *:mx-auto *:max-w-(--fd-layout-width)',\n value.length > 0 && 'max-lg:shadow-lg max-lg:rounded-b-2xl',\n (!isTransparent || value.length > 0) && 'bg-fd-background/80',\n )}\n >\n <NavigationMenuList className=\"flex h-14 w-full items-center px-4\" asChild>\n <nav>{props.children}</nav>\n </NavigationMenuList>\n\n <NavigationMenuViewport />\n </div>\n </header>\n </NavigationMenu>\n );\n}\n\nfunction NavigationMenuLinkItem({ item, ...props }: { item: LinkItemType; className?: string }) {\n if (item.type === 'custom') return <div {...props}>{item.children}</div>;\n\n if (item.type === 'menu') {\n const children = item.items.map((child, j) => {\n if (child.type === 'custom') {\n return <Fragment key={j}>{child.children}</Fragment>;\n }\n\n const {\n banner = child.icon ? (\n <div className=\"w-fit rounded-md border bg-fd-muted p-1 [&_svg]:size-4\">{child.icon}</div>\n ) : null,\n ...rest\n } = child.menu ?? {};\n\n return (\n <NavigationMenuLink key={`${j}-${child.url}`} asChild>\n <Link\n href={child.url}\n external={child.external}\n {...rest}\n className={cn(\n 'flex flex-col gap-2 rounded-lg border bg-fd-card p-3 transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground',\n rest.className,\n )}\n >\n {rest.children ?? (\n <>\n {banner}\n <p className=\"text-base font-medium\">{child.text}</p>\n <p className=\"text-sm text-fd-muted-foreground empty:hidden\">{child.description}</p>\n </>\n )}\n </Link>\n </NavigationMenuLink>\n );\n });\n\n return (\n <NavigationMenuItem {...props}>\n <NavigationMenuTrigger className={cn(navItemVariants(), 'rounded-md')}>\n {item.url ? (\n <Link href={item.url} external={item.external}>\n {item.text}\n </Link>\n ) : (\n item.text\n )}\n </NavigationMenuTrigger>\n <NavigationMenuContent className=\"grid grid-cols-1 gap-2 p-4 md:grid-cols-2 lg:grid-cols-3\">\n {children}\n </NavigationMenuContent>\n </NavigationMenuItem>\n );\n }\n\n return (\n <NavigationMenuItem {...props}>\n <NavigationMenuLink asChild>\n <LinkItem\n item={item}\n aria-label={item.type === 'icon' ? item.label : undefined}\n className={cn(navItemVariants({ variant: item.type }))}\n >\n {item.type === 'icon' ? item.icon : item.text}\n </LinkItem>\n </NavigationMenuLink>\n </NavigationMenuItem>\n );\n}\n\nfunction MobileNavigationMenuLinkItem({\n item,\n ...props\n}: {\n item: LinkItemType;\n className?: string;\n}) {\n if (item.type === 'custom')\n return <div className={cn('grid', props.className)}>{item.children}</div>;\n\n if (item.type === 'menu') {\n const header = (\n <>\n {item.icon}\n {item.text}\n </>\n );\n\n return (\n <div className={cn('mb-4 flex flex-col', props.className)}>\n <p className=\"mb-1 text-sm text-fd-muted-foreground\">\n {item.url ? (\n <NavigationMenuLink asChild>\n <Link href={item.url} external={item.external}>\n {header}\n </Link>\n </NavigationMenuLink>\n ) : (\n header\n )}\n </p>\n {item.items.map((child, i) => (\n <MobileNavigationMenuLinkItem key={i} item={child} />\n ))}\n </div>\n );\n }\n\n return (\n <NavigationMenuLink asChild>\n <LinkItem\n item={item}\n className={cn(\n {\n main: 'inline-flex items-center gap-2 py-1.5 transition-colors hover:text-fd-popover-foreground/50 data-[active=true]:font-medium data-[active=true]:text-fd-primary [&_svg]:size-4',\n icon: buttonVariants({\n size: 'icon',\n color: 'ghost',\n }),\n button: buttonVariants({\n color: 'secondary',\n className: 'gap-1.5 [&_svg]:size-4',\n }),\n }[item.type ?? 'main'],\n props.className,\n )}\n aria-label={item.type === 'icon' ? item.label : undefined}\n >\n {item.icon}\n {item.type === 'icon' ? undefined : item.text}\n </LinkItem>\n </NavigationMenuLink>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/layouts/home/index.tsx"],"sourcesContent":[],"mappings":";;;;;UAKiB,eAAA,SAAwB;QACjC,QACJ;;AAFJ;;IACQ,iBAAA,CAAA,EAAA,OAAA;EADiC,CAAA,CAAA;;AAWzB,iBAAA,UAAA,CAAU,KAAA,EAAQ,eAAR,GAA0B,cAA1B,CAAA,MAAA,CAAA,CAAA,EAAgD,oBAAA,CAAA,GAAA,CAAA,OAAhD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/layouts/home/index.tsx"],"sourcesContent":["import type { ComponentProps } from 'react';\nimport { cn } from '@fumadocs/ui/cn';\nimport { type BaseLayoutProps, type NavOptions } from '@/layouts/shared';\nimport { Header } from '@/layouts/home/client';\n\nexport interface HomeLayoutProps extends BaseLayoutProps {\n nav?: Partial<\n NavOptions & {\n /**\n * Open mobile menu when hovering the trigger\n */\n enableHoverToOpen?: boolean;\n }\n >;\n}\n\nexport function HomeLayout(props: HomeLayoutProps & ComponentProps<'main'>) {\n const { nav = {}, links, githubUrl, i18n, themeSwitch = {}, searchToggle, ...rest } = props;\n\n return (\n <main\n id=\"nd-home-layout\"\n {...rest}\n className={cn('flex flex-1 flex-col [--fd-layout-width:1400px]', rest.className)}\n >\n {nav.enabled !== false &&\n (nav.component ?? (\n <Header\n links={links}\n nav={nav}\n themeSwitch={themeSwitch}\n searchToggle={searchToggle}\n i18n={i18n}\n githubUrl={githubUrl}\n />\n ))}\n {props.children}\n </main>\n );\n}\n"],"mappings":";;;;;AAgBA,SAAgB,WAAW,OAAiD;CAC1E,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,WAAW,MAAM,cAAc,EAAE,EAAE,cAAc,GAAG,SAAS;AAEtF,QACE,qBAAC;EACC,IAAG;EACH,GAAI;EACJ,WAAW,GAAG,mDAAmD,KAAK,UAAU;aAE/E,IAAI,YAAY,UACd,IAAI,aACH,oBAAC;GACQ;GACF;GACQ;GACC;GACR;GACK;IACX,GAEL,MAAM;GACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"navbar.d.ts","names":[],"sources":["../../../src/layouts/home/navbar.tsx"],"sourcesContent":[],"mappings":";;;;;;;cAaa,YAAU,OAAA,CAAA,0BAAA,KAAqB,gCAAA,CAArB,uBAAA,GAAA,OAAA,CAAA,cAAA,yBAAA,OAAA,CAAA,cAAA;iBAEP,iBAAA,QAAyB,6BAA0B,mBAAA,CAAA,GAAA,CAAA;iBAWnD,iBAAA,QAAyB,6BAA0B,mBAAA,CAAA,GAAA,CAAA;iBAWnD,cAAA,QAAsB,YAAS,mBAAA,CAAA,GAAA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"navbar.js","names":[],"sources":["../../../src/layouts/home/navbar.tsx"],"sourcesContent":["'use client';\nimport Link, { type LinkProps } from 'fumadocs-core/link';\nimport { cn } from '@fumadocs/ui/cn';\nimport {\n NavigationMenuContent,\n type NavigationMenuContentProps,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuTrigger,\n type NavigationMenuTriggerProps,\n} from '@/components/ui/navigation-menu';\nimport { navItemVariants } from './client';\n\nexport const NavbarMenu = NavigationMenuItem;\n\nexport function NavbarMenuContent(props: NavigationMenuContentProps) {\n return (\n <NavigationMenuContent\n {...props}\n className={cn('grid grid-cols-1 gap-2 p-4 md:grid-cols-2 lg:grid-cols-3', props.className)}\n >\n {props.children}\n </NavigationMenuContent>\n );\n}\n\nexport function NavbarMenuTrigger(props: NavigationMenuTriggerProps) {\n return (\n <NavigationMenuTrigger\n {...props}\n className={cn(navItemVariants(), 'rounded-md', props.className)}\n >\n {props.children}\n </NavigationMenuTrigger>\n );\n}\n\nexport function NavbarMenuLink(props: LinkProps) {\n return (\n <NavigationMenuLink asChild>\n <Link\n {...props}\n className={cn(\n 'flex flex-col gap-2 rounded-lg border bg-fd-card p-3 transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground',\n props.className,\n )}\n >\n {props.children}\n </Link>\n </NavigationMenuLink>\n );\n}\n"],"mappings":";;;;;;;;;AAaA,MAAa,aAAa;AAE1B,SAAgB,kBAAkB,OAAmC;AACnE,QACE,oBAAC;EACC,GAAI;EACJ,WAAW,GAAG,4DAA4D,MAAM,UAAU;YAEzF,MAAM;GACe;;AAI5B,SAAgB,kBAAkB,OAAmC;AACnE,QACE,oBAAC;EACC,GAAI;EACJ,WAAW,GAAG,iBAAiB,EAAE,cAAc,MAAM,UAAU;YAE9D,MAAM;GACe;;AAI5B,SAAgB,eAAe,OAAkB;AAC/C,QACE,oBAAC;EAAmB;YAClB,oBAAC;GACC,GAAI;GACJ,WAAW,GACT,gIACA,MAAM,UACP;aAEA,MAAM;IACF;GACY"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","names":[],"sources":["../../../src/layouts/notebook/client.tsx"],"sourcesContent":[],"mappings":";;;;;;;cAuBa,eAAa,MAAA,CAAA,SAAA;;;UAOT,UAAA;EAPJ,OAAA,EAAA,SAKN,GAAA,QALmB;EAOT,OAAA,EAAA,KAAU,GAAA,MAAA;AAK3B;AACE,iBADc,qBAAA,CACd;EAAA,kBAAA;EAAA,OAAA;EAAA,OAAA;EAAA;CAAA,EAIC,UAJD,GAAA;EACA,kBAAA,CAAA,EAAA,QAAA,GAAA,KAAA,GAAA,MAAA;EACA,QAAA,EAIU,SAJV;CACA,CAAA,EAID,mBAAA,CAAA,GAAA,CAAA,OAJC;AACC,iBAuBa,YAAA,CAvBb,KAAA,EAuBiC,cAvBjC,CAAA,QAAA,CAAA,CAAA,EAuByD,mBAAA,CAAA,GAAA,CAAA,OAvBzD;AAES,iBAgCI,UAAA,CAhCJ;EAAA,SAAA;EAAA,KAAA;EAAA,QAAA;EAAA,GAAA;AAAA,CAAA,EAgCyD,cAhCzD,CAAA,KAAA,CAAA,CAAA,EAgC8E,mBAAA,CAAA,GAAA,CAAA,OAhC9E;AACX,iBAoEe,gBAAA,CApEf;EAAA,OAAA;EAAA,SAAA;EAAA,GAAA;AAoBD,CApBC,EAwEE,cAxEF,CAAA,KAAA,CAAA,GAAA;EAAA,OAAA,EAyEU,mBAzEV,EAAA;AAoBD,CAAA,CAAA,EAsDC,mBAAA,CAAA,GAAA,CAAA,OAtDmC;AAWpB,iBA2EA,cAAA,CA3EU;EAAA,IAAA;EAAA,SAAA;EAAA,GAAA;AAAc,CAAd,EAAA;EAAG,IAAA,EA+ElB,YA/EkB;CAAW,GA+EZ,cA/EY,CA+EG,WA/EH,CAAA,CAAA,EAAA,MAAA,GAAA,MAAA,GAAA,MAAA,GAAA,OAAA,GA+Ee,mBAAA,CAAA,GAAA,CAAA,OAAA,GAAA,QA/Ef,CA+Ee,SA/Ef,CAAA,GA+Ee,OA/Ef,CAAA,MAAA,GAAA,MAAA,GAAA,MAAA,GAAA,OAAA,GA+Ee,MAAA,CAAA,WAAA,GAAA,MAAA,CAAA,YA/Ef,CAAA,OAAA,EAAA,MAAA,GA+Ee,MAAA,CAAA,qBA/Ef,CAAA,GAAA,CAAA,CAAA,GA+Ee,QA/Ef,CA+Ee,SA/Ef,CAAA,GAAA,IAAA,GAAA,SAAA,CAAA,GAAA,IAAA,GAAA,SAAA"}