@fumadocs/base-ui 16.5.0 → 16.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/css/aspen.css +39 -1
- package/css/black.css +39 -1
- package/css/catppuccin.css +49 -1
- package/css/dusk.css +47 -1
- package/css/emerald.css +39 -1
- package/css/generated/docs.css +460 -0
- package/css/generated/flux.css +424 -0
- package/css/generated/home.css +202 -0
- package/css/generated/notebook.css +497 -0
- package/css/generated/shared.css +1042 -0
- package/css/lib/base.css +217 -0
- package/css/lib/default-colors.css +51 -0
- package/css/lib/shiki.css +90 -0
- package/css/neutral.css +7 -1
- package/css/ocean.css +44 -1
- package/css/preset.css +6 -7
- package/css/purple.css +39 -1
- package/css/ruby.css +39 -1
- package/css/shadcn.css +36 -1
- package/css/solar.css +75 -1
- package/css/vitepress.css +65 -1
- package/dist/_virtual/_rolldown/runtime.js +18 -0
- package/dist/components/accordion.d.ts +3 -3
- package/dist/components/accordion.d.ts.map +1 -1
- package/dist/components/accordion.js +6 -6
- package/dist/components/accordion.js.map +1 -1
- package/dist/components/banner.d.ts +2 -2
- package/dist/components/banner.d.ts.map +1 -1
- package/dist/components/banner.js +4 -4
- package/dist/components/banner.js.map +1 -1
- package/dist/components/callout.d.ts +5 -5
- package/dist/components/callout.d.ts.map +1 -1
- package/dist/components/callout.js +1 -1
- package/dist/components/callout.js.map +1 -1
- package/dist/components/card.d.ts +3 -3
- package/dist/components/card.d.ts.map +1 -1
- package/dist/components/card.js +2 -2
- package/dist/components/card.js.map +1 -1
- package/dist/components/codeblock.d.ts +7 -7
- package/dist/components/codeblock.d.ts.map +1 -1
- package/dist/components/codeblock.js +7 -7
- package/dist/components/codeblock.js.map +1 -1
- package/dist/components/dialog/search-algolia.d.ts +6 -6
- package/dist/components/dialog/search-algolia.d.ts.map +1 -1
- package/dist/components/dialog/search-algolia.js +7 -7
- package/dist/components/dialog/search-algolia.js.map +1 -1
- package/dist/components/dialog/search-default.d.ts +6 -6
- package/dist/components/dialog/search-default.d.ts.map +1 -1
- package/dist/components/dialog/search-default.js +7 -7
- package/dist/components/dialog/search-default.js.map +1 -1
- package/dist/components/dialog/search-orama.d.ts +6 -6
- package/dist/components/dialog/search-orama.d.ts.map +1 -1
- package/dist/components/dialog/search-orama.js +7 -7
- package/dist/components/dialog/search-orama.js.map +1 -1
- package/dist/components/dialog/search.d.ts +16 -16
- package/dist/components/dialog/search.d.ts.map +1 -1
- package/dist/components/dialog/search.js +14 -14
- package/dist/components/dialog/search.js.map +1 -1
- package/dist/components/dynamic-codeblock.core.d.ts +2 -2
- package/dist/components/dynamic-codeblock.core.d.ts.map +1 -1
- package/dist/components/dynamic-codeblock.core.js +4 -4
- package/dist/components/dynamic-codeblock.core.js.map +1 -1
- package/dist/components/dynamic-codeblock.d.ts +2 -2
- package/dist/components/dynamic-codeblock.d.ts.map +1 -1
- package/dist/components/files.d.ts.map +1 -1
- package/dist/components/files.js +2 -2
- package/dist/components/files.js.map +1 -1
- package/dist/components/github-info.d.ts +2 -2
- package/dist/components/github-info.d.ts.map +1 -1
- package/dist/components/github-info.js +1 -1
- package/dist/components/github-info.js.map +1 -1
- package/dist/components/heading.d.ts.map +1 -1
- package/dist/components/heading.js +1 -1
- package/dist/components/heading.js.map +1 -1
- package/dist/components/{image-zoom-CtfZieBH.css → image-zoom-DGvp66QF.css} +1 -1
- package/dist/components/{image-zoom-CtfZieBH.css.map → image-zoom-DGvp66QF.css.map} +1 -1
- package/dist/components/image-zoom.d.ts +3 -3
- package/dist/components/image-zoom.d.ts.map +1 -1
- package/dist/components/inline-toc.d.ts +2 -2
- package/dist/components/inline-toc.d.ts.map +1 -1
- package/dist/components/inline-toc.js +1 -1
- package/dist/components/inline-toc.js.map +1 -1
- package/dist/components/sidebar/base.d.ts +16 -16
- package/dist/components/sidebar/base.d.ts.map +1 -1
- package/dist/components/sidebar/base.js +5 -5
- package/dist/components/sidebar/base.js.map +1 -1
- package/dist/components/sidebar/link-item.d.ts +3 -3
- package/dist/components/sidebar/link-item.d.ts.map +1 -1
- package/dist/components/sidebar/link-item.js.map +1 -1
- package/dist/components/sidebar/page-tree.d.ts +2 -2
- package/dist/components/sidebar/page-tree.d.ts.map +1 -1
- package/dist/components/sidebar/page-tree.js +5 -5
- package/dist/components/sidebar/page-tree.js.map +1 -1
- package/dist/components/sidebar/tabs/dropdown.d.ts +2 -2
- package/dist/components/sidebar/tabs/dropdown.d.ts.map +1 -1
- package/dist/components/sidebar/tabs/dropdown.js +19 -19
- package/dist/components/sidebar/tabs/dropdown.js.map +1 -1
- package/dist/components/sidebar/tabs/index.d.ts.map +1 -1
- package/dist/components/steps.d.ts +3 -3
- package/dist/components/steps.d.ts.map +1 -1
- package/dist/components/tabs.d.ts +4 -4
- package/dist/components/tabs.d.ts.map +1 -1
- package/dist/components/tabs.js +2 -2
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/toc/clerk.d.ts +12 -1
- package/dist/components/toc/clerk.d.ts.map +1 -0
- package/dist/components/toc/clerk.js +106 -6
- package/dist/components/toc/clerk.js.map +1 -1
- package/dist/components/toc/default.d.ts +12 -1
- package/dist/components/toc/default.d.ts.map +1 -0
- package/dist/components/toc/default.js +34 -6
- package/dist/components/toc/default.js.map +1 -1
- package/dist/components/toc/index.d.ts +26 -1
- package/dist/components/toc/index.d.ts.map +1 -0
- package/dist/components/toc/index.js +76 -6
- package/dist/components/toc/index.js.map +1 -1
- package/dist/components/type-table.d.ts +2 -2
- package/dist/components/type-table.d.ts.map +1 -1
- package/dist/components/type-table.js +7 -7
- package/dist/components/type-table.js.map +1 -1
- package/dist/components/ui/accordion.d.ts +6 -6
- package/dist/components/ui/accordion.d.ts.map +1 -1
- package/dist/components/ui/accordion.js +1 -1
- package/dist/components/ui/accordion.js.map +1 -1
- package/dist/components/ui/button.d.ts.map +1 -1
- package/dist/components/ui/collapsible.d.ts +6 -6
- package/dist/components/ui/collapsible.d.ts.map +1 -1
- package/dist/components/ui/collapsible.js +1 -1
- package/dist/components/ui/collapsible.js.map +1 -1
- package/dist/components/ui/navigation-menu.d.ts +7 -7
- package/dist/components/ui/navigation-menu.d.ts.map +1 -1
- package/dist/components/ui/navigation-menu.js +2 -2
- package/dist/components/ui/navigation-menu.js.map +1 -1
- package/dist/components/ui/popover.d.ts +3 -3
- package/dist/components/ui/popover.d.ts.map +1 -1
- package/dist/components/ui/popover.js +2 -2
- package/dist/components/ui/popover.js.map +1 -1
- package/dist/components/ui/scroll-area.d.ts +4 -4
- package/dist/components/ui/scroll-area.d.ts.map +1 -1
- package/dist/components/ui/scroll-area.js +2 -2
- package/dist/components/ui/scroll-area.js.map +1 -1
- package/dist/components/ui/tabs.d.ts +7 -7
- package/dist/components/ui/tabs.d.ts.map +1 -1
- package/dist/components/ui/tabs.js +4 -4
- package/dist/components/ui/tabs.js.map +1 -1
- package/dist/contexts/i18n.d.ts +60 -1
- package/dist/contexts/i18n.d.ts.map +1 -0
- package/dist/contexts/i18n.js +54 -6
- package/dist/contexts/i18n.js.map +1 -1
- package/dist/contexts/search.d.ts +70 -4
- package/dist/contexts/search.d.ts.map +1 -1
- package/dist/contexts/search.js +62 -6
- package/dist/contexts/search.js.map +1 -1
- package/dist/contexts/tree.d.ts +22 -1
- package/dist/contexts/tree.d.ts.map +1 -0
- package/dist/contexts/tree.js +36 -6
- package/dist/contexts/tree.js.map +1 -1
- package/dist/i18n.d.ts +14 -1
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +19 -2
- package/dist/i18n.js.map +1 -0
- package/dist/layouts/docs/client.d.ts +7 -7
- package/dist/layouts/docs/client.d.ts.map +1 -1
- package/dist/layouts/docs/client.js +4 -4
- package/dist/layouts/docs/client.js.map +1 -1
- package/dist/layouts/docs/index.d.ts +3 -3
- package/dist/layouts/docs/index.d.ts.map +1 -1
- package/dist/layouts/docs/index.js +7 -7
- package/dist/layouts/docs/index.js.map +1 -1
- package/dist/layouts/docs/page/client.d.ts +7 -7
- package/dist/layouts/docs/page/client.d.ts.map +1 -1
- package/dist/layouts/docs/page/client.js +18 -18
- package/dist/layouts/docs/page/client.js.map +1 -1
- package/dist/layouts/docs/page/index.d.ts +5 -5
- package/dist/layouts/docs/page/index.d.ts.map +1 -1
- package/dist/layouts/docs/page/index.js +13 -13
- package/dist/layouts/docs/page/index.js.map +1 -1
- package/dist/layouts/docs/sidebar.d.ts +20 -19
- package/dist/layouts/docs/sidebar.d.ts.map +1 -1
- package/dist/layouts/docs/sidebar.js +6 -6
- package/dist/layouts/docs/sidebar.js.map +1 -1
- package/dist/layouts/flux/index.d.ts +79 -0
- package/dist/layouts/flux/index.d.ts.map +1 -0
- package/dist/layouts/flux/index.js +168 -0
- package/dist/layouts/flux/index.js.map +1 -0
- package/dist/layouts/flux/page/client.d.ts +45 -0
- package/dist/layouts/flux/page/client.d.ts.map +1 -0
- package/dist/layouts/flux/page/client.js +255 -0
- package/dist/layouts/flux/page/client.js.map +1 -0
- package/dist/layouts/flux/page/index.d.ts +98 -0
- package/dist/layouts/flux/page/index.d.ts.map +1 -0
- package/dist/layouts/flux/page/index.js +76 -0
- package/dist/layouts/flux/page/index.js.map +1 -0
- package/dist/layouts/flux/sidebar.d.ts +59 -0
- package/dist/layouts/flux/sidebar.d.ts.map +1 -0
- package/dist/layouts/flux/sidebar.js +197 -0
- package/dist/layouts/flux/sidebar.js.map +1 -0
- package/dist/layouts/flux/tab-dropdown.d.ts +21 -0
- package/dist/layouts/flux/tab-dropdown.d.ts.map +1 -0
- package/dist/layouts/flux/tab-dropdown.js +96 -0
- package/dist/layouts/flux/tab-dropdown.js.map +1 -0
- package/dist/layouts/home/client.d.ts +3 -3
- package/dist/layouts/home/client.d.ts.map +1 -1
- package/dist/layouts/home/client.js +8 -8
- package/dist/layouts/home/client.js.map +1 -1
- package/dist/layouts/home/index.d.ts +2 -2
- package/dist/layouts/home/index.d.ts.map +1 -1
- package/dist/layouts/home/index.js +1 -1
- package/dist/layouts/home/index.js.map +1 -1
- package/dist/layouts/home/navbar.d.ts +7 -7
- package/dist/layouts/home/navbar.d.ts.map +1 -1
- package/dist/layouts/home/navbar.js +2 -2
- package/dist/layouts/home/navbar.js.map +1 -1
- package/dist/layouts/notebook/client.d.ts +9 -9
- package/dist/layouts/notebook/client.d.ts.map +1 -1
- package/dist/layouts/notebook/client.js +8 -8
- package/dist/layouts/notebook/client.js.map +1 -1
- package/dist/layouts/notebook/index.d.ts +2 -2
- package/dist/layouts/notebook/index.d.ts.map +1 -1
- package/dist/layouts/notebook/index.js +13 -13
- package/dist/layouts/notebook/index.js.map +1 -1
- package/dist/layouts/notebook/page/client.d.ts +7 -7
- package/dist/layouts/notebook/page/client.d.ts.map +1 -1
- package/dist/layouts/notebook/page/client.js +18 -18
- package/dist/layouts/notebook/page/client.js.map +1 -1
- package/dist/layouts/notebook/page/index.d.ts +5 -5
- package/dist/layouts/notebook/page/index.d.ts.map +1 -1
- package/dist/layouts/notebook/page/index.js +13 -13
- package/dist/layouts/notebook/page/index.js.map +1 -1
- package/dist/layouts/notebook/sidebar.d.ts +15 -14
- package/dist/layouts/notebook/sidebar.d.ts.map +1 -1
- package/dist/layouts/notebook/sidebar.js +4 -4
- package/dist/layouts/notebook/sidebar.js.map +1 -1
- package/dist/layouts/shared/index.d.ts +5 -6
- package/dist/layouts/shared/index.d.ts.map +1 -1
- package/dist/layouts/shared/index.js +2 -2
- package/dist/layouts/shared/index.js.map +1 -1
- package/dist/layouts/shared/language-toggle.d.ts +2 -2
- package/dist/layouts/shared/language-toggle.d.ts.map +1 -1
- package/dist/layouts/shared/language-toggle.js +4 -4
- package/dist/layouts/shared/language-toggle.js.map +1 -1
- package/dist/layouts/shared/search-toggle.d.ts +3 -3
- package/dist/layouts/shared/search-toggle.d.ts.map +1 -1
- package/dist/layouts/shared/search-toggle.js +6 -6
- package/dist/layouts/shared/search-toggle.js.map +1 -1
- package/dist/layouts/shared/theme-toggle.d.ts +2 -2
- package/dist/layouts/shared/theme-toggle.d.ts.map +1 -1
- package/dist/layouts/shared/theme-toggle.js +7 -7
- package/dist/layouts/shared/theme-toggle.js.map +1 -1
- package/dist/mdx.d.ts +1 -1
- package/dist/mdx.d.ts.map +1 -1
- package/dist/mdx.js +2 -2
- package/dist/mdx.js.map +1 -1
- package/dist/mdx.server.d.ts +0 -1
- package/dist/mdx.server.d.ts.map +1 -1
- package/dist/og.d.ts +23 -1
- package/dist/og.d.ts.map +1 -0
- package/dist/og.js +69 -2
- package/dist/og.js.map +1 -0
- package/dist/page.d.ts +3 -3
- package/dist/page.d.ts.map +1 -1
- package/dist/page.js +5 -5
- package/dist/page.js.map +1 -1
- package/dist/provider/base.d.ts +4 -4
- package/dist/provider/base.d.ts.map +1 -1
- package/dist/provider/base.js +3 -3
- package/dist/provider/base.js.map +1 -1
- package/dist/provider/next.d.ts +3 -3
- package/dist/provider/next.d.ts.map +1 -1
- package/dist/provider/react-router.d.ts +3 -3
- package/dist/provider/react-router.d.ts.map +1 -1
- package/dist/provider/tanstack.d.ts +3 -3
- package/dist/provider/tanstack.d.ts.map +1 -1
- package/dist/provider/waku.d.ts +3 -3
- package/dist/provider/waku.d.ts.map +1 -1
- package/dist/style.css +140 -19
- package/dist/utils/cn.js +3 -0
- package/dist/utils/link-item.d.ts +86 -0
- package/dist/utils/link-item.d.ts.map +1 -0
- package/dist/utils/link-item.js +25 -0
- package/dist/utils/link-item.js.map +1 -0
- package/dist/utils/merge-refs.js +13 -0
- package/dist/utils/merge-refs.js.map +1 -0
- package/dist/utils/urls.js +17 -0
- package/dist/utils/urls.js.map +1 -0
- package/dist/utils/use-copy-button.d.ts +7 -1
- package/dist/utils/use-copy-button.d.ts.map +1 -0
- package/dist/utils/use-copy-button.js +29 -2
- package/dist/utils/use-copy-button.js.map +1 -0
- package/dist/utils/use-footer-items.d.ts +10 -1
- package/dist/utils/use-footer-items.d.ts.map +1 -0
- package/dist/utils/use-footer-items.js +27 -2
- package/dist/utils/use-footer-items.js.map +1 -0
- package/dist/utils/use-is-scroll-top.d.ts +9 -1
- package/dist/utils/use-is-scroll-top.d.ts.map +1 -0
- package/dist/utils/use-is-scroll-top.js +23 -2
- package/dist/utils/use-is-scroll-top.js.map +1 -0
- package/package.json +20 -9
- package/css/layouts/docs.css +0 -1
- package/css/layouts/home.css +0 -1
- package/css/layouts/notebook.css +0 -1
- package/dist/_virtual/rolldown_runtime.js +0 -36
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown.js","names":[
|
|
1
|
+
{"version":3,"file":"dropdown.js","names":[],"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 '@/utils/cn';\nimport { normalize, isActive } from '@/utils/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-open:bg-fd-accent data-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-(--anchor-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,SAAS,YAAY,MAAM,SAAS,CAAC;IAC7D,CAAC,SAAS,SAAS,CAAC;CAEvB,MAAM,gBAAgB;AACpB,kBAAgB,UAAU;AAC1B,UAAQ,MAAM;;CAGhB,MAAM,OAAO,WACX,8CACE,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,4MACA,MAAM,UACP;cAEA,MACD,oBAAC,kBAAe,WAAU,qDAAqD;IAChE,EAEnB,oBAAC;GAAe,WAAU;aACvB,QAAQ,KAAK,SAAS;IACrB,MAAM,WAAW,YAAY,KAAK,QAAQ,SAAS;AACnD,QAAI,CAAC,YAAY,KAAK,SAAU;AAEhC,WACE,qBAAC;KAEC,MAAM,KAAK;KACF;KACT,GAAI,KAAK;KACT,WAAW,GACT,+FACA,KAAK,OAAO,UACb;;MAED,oBAAC;OAAI,WAAU;iBAAqD,KAAK;QAAW;MACpF,qBAAC,oBACC,oBAAC;OAAE,WAAU;iBAAoC,KAAK;QAAU,EAChE,oBAAC;OAAE,WAAU;iBACV,KAAK;QACJ,IACA;MAEN,oBAAC,SACC,WAAW,GACT,6CACA,CAAC,YAAY,YACd,GACD;;OAtBG,KAAK,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/components/sidebar/tabs/index.tsx"],"
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/components/sidebar/tabs/index.tsx"],"mappings":";;;;UAGiB,UAAA;;AAAjB;;EAIE,GAAA;EAEA,IAAA,GAAO,SAAA;EACP,KAAA,EAAO,SAAA;EACP,WAAA,GAAc,SAAA;EAKP;;;EAAP,IAAA,GAAO,GAAA;EACP,QAAA;AAAA;AAAA,UAGe,qBAAA;EACf,SAAA,IAAa,MAAA,EAAQ,UAAA,EAAY,IAAA,EAAM,QAAA,CAAS,MAAA,KAAW,UAAA;AAAA;AAAA,iBAgB7C,cAAA,CACd,IAAA,EAAM,QAAA,CAAS,IAAA;EACb;AAAA,IAAgC,qBAAA,GACjC,UAAA"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import * as react_jsx_runtime16 from "react/jsx-runtime";
|
|
2
1
|
import { ReactNode } from "react";
|
|
2
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
3
3
|
|
|
4
4
|
//#region src/components/steps.d.ts
|
|
5
5
|
declare function Steps({
|
|
6
6
|
children
|
|
7
7
|
}: {
|
|
8
8
|
children: ReactNode;
|
|
9
|
-
}):
|
|
9
|
+
}): react_jsx_runtime0.JSX.Element;
|
|
10
10
|
declare function Step({
|
|
11
11
|
children
|
|
12
12
|
}: {
|
|
13
13
|
children: ReactNode;
|
|
14
|
-
}):
|
|
14
|
+
}): react_jsx_runtime0.JSX.Element;
|
|
15
15
|
//#endregion
|
|
16
16
|
export { Step, Steps };
|
|
17
17
|
//# sourceMappingURL=steps.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steps.d.ts","names":[],"sources":["../../src/components/steps.tsx"],"
|
|
1
|
+
{"version":3,"file":"steps.d.ts","names":[],"sources":["../../src/components/steps.tsx"],"mappings":";;;;iBAEgB,KAAA,CAAA;EAAQ;AAAA;EAAc,QAAA,EAAU,SAAA;AAAA,IAAW,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAI3C,IAAA,CAAA;EAAO;AAAA;EAAc,QAAA,EAAU,SAAA;AAAA,IAAW,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Tabs as Tabs$1, TabsContent as TabsContent$1 } from "./ui/tabs.js";
|
|
2
|
-
import * as react_jsx_runtime30 from "react/jsx-runtime";
|
|
3
2
|
import * as React from "react";
|
|
4
3
|
import { ComponentProps, ReactNode } from "react";
|
|
4
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
5
5
|
import * as _base_ui_react0 from "@base-ui/react";
|
|
6
6
|
|
|
7
7
|
//#region src/components/tabs.d.ts
|
|
@@ -31,7 +31,7 @@ declare function Tabs({
|
|
|
31
31
|
defaultIndex,
|
|
32
32
|
defaultValue,
|
|
33
33
|
...props
|
|
34
|
-
}: TabsProps):
|
|
34
|
+
}: TabsProps): react_jsx_runtime0.JSX.Element;
|
|
35
35
|
interface TabProps extends Omit<ComponentProps<typeof TabsContent$1>, 'value'> {
|
|
36
36
|
/**
|
|
37
37
|
* Value of tab, detect from index if unspecified.
|
|
@@ -41,12 +41,12 @@ interface TabProps extends Omit<ComponentProps<typeof TabsContent$1>, 'value'> {
|
|
|
41
41
|
declare function Tab({
|
|
42
42
|
value,
|
|
43
43
|
...props
|
|
44
|
-
}: TabProps):
|
|
44
|
+
}: TabProps): react_jsx_runtime0.JSX.Element;
|
|
45
45
|
declare function TabsContent({
|
|
46
46
|
value,
|
|
47
47
|
className,
|
|
48
48
|
...props
|
|
49
|
-
}: ComponentProps<typeof TabsContent$1>):
|
|
49
|
+
}: ComponentProps<typeof TabsContent$1>): react_jsx_runtime0.JSX.Element;
|
|
50
50
|
//#endregion
|
|
51
51
|
export { Tab, TabProps, Tabs, TabsContent, TabsList, TabsProps, TabsTrigger };
|
|
52
52
|
//# sourceMappingURL=tabs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs.d.ts","names":[],"sources":["../../src/components/tabs.tsx"],"
|
|
1
|
+
{"version":3,"file":"tabs.d.ts","names":[],"sources":["../../src/components/tabs.tsx"],"mappings":";;;;;;;UAkBiB,SAAA,SAAkB,IAAA,CACjC,cAAA,QAAsB,MAAA;;;;EAMtB,KAAA;EAPyB;;;;;EAczB,YAAA;EAdqC;;;EAmBrC,KAAA,GAAQ,SAAA;AAAA;AAAA,cAcG,QAAA,EAAQ,KAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,IAAA,CAcnB,eAAA,CAdmB,aAAA,WAAA,KAAA,CAAA,aAAA,CAAA,cAAA,YAAA,KAAA,CAAA,aAAA,CAAA,cAAA;AAAA,cAiBR,WAAA,EAAW,KAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,IAAA,CActB,eAAA,CAdsB,YAAA,WAAA,KAAA,CAAA,aAAA,CAAA,WAAA,YAAA,KAAA,CAAA,aAAA,CAAA,WAAA;AAAA,iBAiBR,IAAA,CAAA;EACd,GAAA;EACA,SAAA;EACA,KAAA;EACA,KAAA;EACA,YAAA;EACA,YAAA;EAAA,GACG;AAAA,GACF,SAAA,GAAS,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,UAqCK,QAAA,SAAiB,IAAA,CAAK,cAAA,QAAsB,aAAA;EA7FnD;;;EAiGR,KAAA;AAAA;AAAA,iBAGc,GAAA,CAAA;EAAM,KAAA;EAAA,GAAU;AAAA,GAAS,QAAA,GAAQ,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAkBjC,WAAA,CAAA;EACd,KAAA;EACA,SAAA;EAAA,GACG;AAAA,GACF,cAAA,QAAsB,aAAA,IAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
package/dist/components/tabs.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
+
import { cn } from "../utils/cn.js";
|
|
3
4
|
import { Tabs as Tabs$1, TabsContent as TabsContent$1, TabsList as TabsList$1, TabsTrigger as TabsTrigger$1 } from "./ui/tabs.js";
|
|
4
|
-
import { cn } from "@fumadocs/ui/cn";
|
|
5
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
5
|
import * as React from "react";
|
|
7
6
|
import { createContext, useContext, useEffect, useId, useMemo, useState } from "react";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
8
|
|
|
9
9
|
//#region src/components/tabs.tsx
|
|
10
10
|
const TabsContext = createContext(null);
|
|
@@ -1 +1 @@
|
|
|
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 '
|
|
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 '@/utils/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>(({ className, ...props }, ref) => (\n <Unstyled.TabsList\n ref={ref}\n {...props}\n className={(s) =>\n cn(\n 'flex gap-3.5 text-fd-secondary-foreground overflow-x-auto px-4 not-prose',\n typeof className === 'function' ? className(s) : className,\n )\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>(({ className, ...props }, ref) => (\n <Unstyled.TabsTrigger\n ref={ref}\n {...props}\n className={(s) =>\n 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-[active]:border-fd-primary data-[active]:text-fd-primary',\n typeof className === 'function' ? className(s) : className,\n )\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={(s) =>\n cn(\n 'flex flex-col overflow-hidden rounded-xl border bg-fd-secondary my-4',\n typeof className === 'function' ? className(s) : className,\n )\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 keepMounted\n className={(s) =>\n cn(\n 'p-4 text-[0.9375rem] bg-fd-background rounded-xl outline-none prose-no-margin data-[inactive]:hidden [&>figure:only-child]:-m-4 [&>figure:only-child]:border-none',\n typeof className === 'function' ? className(s) : className,\n )\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,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAACA;CACM;CACL,GAAI;CACJ,YAAY,MACV,GACE,4EACA,OAAO,cAAc,aAAa,UAAU,EAAE,GAAG,UAClD;EAEH,CACF;AACF,SAAS,cAAc;AAEvB,MAAa,cAAc,MAAM,YAG9B,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAACC;CACM;CACL,GAAI;CACJ,YAAY,MACV,GACE,kTACA,OAAO,cAAc,aAAa,UAAU,EAAE,GAAG,UAClD;EAEH,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,YAAY,MACV,GACE,wEACA,OAAO,cAAc,aAAa,UAAU,EAAE,GAAG,UAClD;EAEI;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,YAAY,MACV,GACE,qKACA,OAAO,cAAc,aAAa,UAAU,EAAE,GAAG,UAClD;EAEH,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 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
import { ComponentProps } from "react";
|
|
2
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
3
|
+
|
|
4
|
+
//#region src/components/toc/clerk.d.ts
|
|
5
|
+
declare function TOCItems({
|
|
6
|
+
ref,
|
|
7
|
+
className,
|
|
8
|
+
...props
|
|
9
|
+
}: ComponentProps<'div'>): react_jsx_runtime0.JSX.Element;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { TOCItems };
|
|
12
|
+
//# sourceMappingURL=clerk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clerk.d.ts","names":[],"sources":["../../../src/components/toc/clerk.tsx"],"mappings":";;;;iBAQgB,QAAA,CAAA;EAAW,GAAA;EAAK,SAAA;EAAA,GAAc;AAAA,GAAS,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -1,12 +1,112 @@
|
|
|
1
|
-
|
|
1
|
+
'use client';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
import { useI18n } from "../../contexts/i18n.js";
|
|
4
|
+
import { cn } from "../../utils/cn.js";
|
|
5
|
+
import { mergeRefs } from "../../utils/merge-refs.js";
|
|
6
|
+
import { TocThumb, useTOCItems } from "./index.js";
|
|
7
|
+
import { useEffect, useRef, useState } from "react";
|
|
8
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
import * as Primitive from "fumadocs-core/toc";
|
|
4
10
|
|
|
5
11
|
//#region src/components/toc/clerk.tsx
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
12
|
+
function TOCItems({ ref, className, ...props }) {
|
|
13
|
+
const containerRef = useRef(null);
|
|
14
|
+
const items = useTOCItems();
|
|
15
|
+
const { text } = useI18n();
|
|
16
|
+
const [svg, setSvg] = useState();
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
if (!containerRef.current) return;
|
|
19
|
+
const container = containerRef.current;
|
|
20
|
+
function onResize() {
|
|
21
|
+
if (container.clientHeight === 0) return;
|
|
22
|
+
let w = 0, h = 0;
|
|
23
|
+
const d = [];
|
|
24
|
+
for (let i = 0; i < items.length; i++) {
|
|
25
|
+
const element = container.querySelector(`a[href="#${items[i].url.slice(1)}"]`);
|
|
26
|
+
if (!element) continue;
|
|
27
|
+
const styles = getComputedStyle(element);
|
|
28
|
+
const offset = getLineOffset(items[i].depth) + 1, top = element.offsetTop + parseFloat(styles.paddingTop), bottom = element.offsetTop + element.clientHeight - parseFloat(styles.paddingBottom);
|
|
29
|
+
w = Math.max(offset, w);
|
|
30
|
+
h = Math.max(h, bottom);
|
|
31
|
+
d.push(`${i === 0 ? "M" : "L"}${offset} ${top}`);
|
|
32
|
+
d.push(`L${offset} ${bottom}`);
|
|
33
|
+
}
|
|
34
|
+
setSvg({
|
|
35
|
+
path: d.join(" "),
|
|
36
|
+
width: w + 1,
|
|
37
|
+
height: h
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
const observer = new ResizeObserver(onResize);
|
|
41
|
+
onResize();
|
|
42
|
+
observer.observe(container);
|
|
43
|
+
return () => {
|
|
44
|
+
observer.disconnect();
|
|
45
|
+
};
|
|
46
|
+
}, [items]);
|
|
47
|
+
if (items.length === 0) return /* @__PURE__ */ jsx("div", {
|
|
48
|
+
className: "rounded-lg border bg-fd-card p-3 text-xs text-fd-muted-foreground",
|
|
49
|
+
children: text.tocNoHeadings
|
|
50
|
+
});
|
|
51
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [svg && /* @__PURE__ */ jsx("div", {
|
|
52
|
+
className: "absolute start-0 top-0 rtl:-scale-x-100",
|
|
53
|
+
style: {
|
|
54
|
+
width: svg.width,
|
|
55
|
+
height: svg.height,
|
|
56
|
+
maskImage: `url("data:image/svg+xml,${encodeURIComponent(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${svg.width} ${svg.height}"><path d="${svg.path}" stroke="black" stroke-width="1" fill="none" /></svg>`)}")`
|
|
57
|
+
},
|
|
58
|
+
children: /* @__PURE__ */ jsx(TocThumb, {
|
|
59
|
+
containerRef,
|
|
60
|
+
className: "absolute w-full top-(--fd-top) h-(--fd-height) bg-fd-primary transition-[top,height]"
|
|
61
|
+
})
|
|
62
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
63
|
+
ref: mergeRefs(containerRef, ref),
|
|
64
|
+
className: cn("flex flex-col", className),
|
|
65
|
+
...props,
|
|
66
|
+
children: items.map((item, i) => /* @__PURE__ */ jsx(TOCItem, {
|
|
67
|
+
item,
|
|
68
|
+
upper: items[i - 1]?.depth,
|
|
69
|
+
lower: items[i + 1]?.depth
|
|
70
|
+
}, item.url))
|
|
71
|
+
})] });
|
|
72
|
+
}
|
|
73
|
+
function getItemOffset(depth) {
|
|
74
|
+
if (depth <= 2) return 14;
|
|
75
|
+
if (depth === 3) return 26;
|
|
76
|
+
return 36;
|
|
77
|
+
}
|
|
78
|
+
function getLineOffset(depth) {
|
|
79
|
+
return depth >= 3 ? 10 : 0;
|
|
80
|
+
}
|
|
81
|
+
function TOCItem({ item, upper = item.depth, lower = item.depth }) {
|
|
82
|
+
const offset = getLineOffset(item.depth), upperOffset = getLineOffset(upper), lowerOffset = getLineOffset(lower);
|
|
83
|
+
return /* @__PURE__ */ jsxs(Primitive.TOCItem, {
|
|
84
|
+
href: item.url,
|
|
85
|
+
style: { paddingInlineStart: getItemOffset(item.depth) },
|
|
86
|
+
className: "prose relative py-1.5 text-sm text-fd-muted-foreground hover:text-fd-accent-foreground transition-colors wrap-anywhere first:pt-0 last:pb-0 data-[active=true]:text-fd-primary",
|
|
87
|
+
children: [
|
|
88
|
+
offset !== upperOffset && /* @__PURE__ */ jsx("svg", {
|
|
89
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
90
|
+
viewBox: "0 0 16 16",
|
|
91
|
+
className: "absolute -top-1.5 start-0 size-4 rtl:-scale-x-100",
|
|
92
|
+
children: /* @__PURE__ */ jsx("line", {
|
|
93
|
+
x1: upperOffset,
|
|
94
|
+
y1: "0",
|
|
95
|
+
x2: offset,
|
|
96
|
+
y2: "12",
|
|
97
|
+
className: "stroke-fd-foreground/10",
|
|
98
|
+
strokeWidth: "1"
|
|
99
|
+
})
|
|
100
|
+
}),
|
|
101
|
+
/* @__PURE__ */ jsx("div", {
|
|
102
|
+
className: cn("absolute inset-y-0 w-px bg-fd-foreground/10", offset !== upperOffset && "top-1.5", offset !== lowerOffset && "bottom-1.5"),
|
|
103
|
+
style: { insetInlineStart: offset }
|
|
104
|
+
}),
|
|
105
|
+
item.title
|
|
106
|
+
]
|
|
107
|
+
});
|
|
108
|
+
}
|
|
9
109
|
|
|
10
110
|
//#endregion
|
|
11
|
-
export {
|
|
111
|
+
export { TOCItems };
|
|
12
112
|
//# sourceMappingURL=clerk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clerk.js","names":[],"sources":["../../../src/components/toc/clerk.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"clerk.js","names":[],"sources":["../../../src/components/toc/clerk.tsx"],"sourcesContent":["'use client';\nimport * as Primitive from 'fumadocs-core/toc';\nimport { type ComponentProps, useEffect, useRef, useState } from 'react';\nimport { cn } from '@/utils/cn';\nimport { TocThumb, useTOCItems } from '.';\nimport { mergeRefs } from '@/utils/merge-refs';\nimport { useI18n } from '@/contexts/i18n';\n\nexport function TOCItems({ ref, className, ...props }: ComponentProps<'div'>) {\n const containerRef = useRef<HTMLDivElement>(null);\n const items = useTOCItems();\n const { text } = useI18n();\n\n const [svg, setSvg] = useState<{\n path: string;\n width: number;\n height: number;\n }>();\n\n useEffect(() => {\n if (!containerRef.current) return;\n const container = containerRef.current;\n\n function onResize(): void {\n if (container.clientHeight === 0) return;\n let w = 0,\n h = 0;\n const d: string[] = [];\n for (let i = 0; i < items.length; i++) {\n const element: HTMLElement | null = container.querySelector(\n `a[href=\"#${items[i].url.slice(1)}\"]`,\n );\n if (!element) continue;\n\n const styles = getComputedStyle(element);\n const offset = getLineOffset(items[i].depth) + 1,\n top = element.offsetTop + parseFloat(styles.paddingTop),\n bottom = element.offsetTop + element.clientHeight - parseFloat(styles.paddingBottom);\n\n w = Math.max(offset, w);\n h = Math.max(h, bottom);\n\n d.push(`${i === 0 ? 'M' : 'L'}${offset} ${top}`);\n d.push(`L${offset} ${bottom}`);\n }\n\n setSvg({\n path: d.join(' '),\n width: w + 1,\n height: h,\n });\n }\n\n const observer = new ResizeObserver(onResize);\n onResize();\n\n observer.observe(container);\n return () => {\n observer.disconnect();\n };\n }, [items]);\n\n if (items.length === 0)\n return (\n <div className=\"rounded-lg border bg-fd-card p-3 text-xs text-fd-muted-foreground\">\n {text.tocNoHeadings}\n </div>\n );\n\n return (\n <>\n {svg && (\n <div\n className=\"absolute start-0 top-0 rtl:-scale-x-100\"\n style={{\n width: svg.width,\n height: svg.height,\n maskImage: `url(\"data:image/svg+xml,${\n // Inline SVG\n encodeURIComponent(\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${svg.width} ${svg.height}\"><path d=\"${svg.path}\" stroke=\"black\" stroke-width=\"1\" fill=\"none\" /></svg>`,\n )\n }\")`,\n }}\n >\n <TocThumb\n containerRef={containerRef}\n className=\"absolute w-full top-(--fd-top) h-(--fd-height) bg-fd-primary transition-[top,height]\"\n />\n </div>\n )}\n <div ref={mergeRefs(containerRef, ref)} className={cn('flex flex-col', className)} {...props}>\n {items.map((item, i) => (\n <TOCItem\n key={item.url}\n item={item}\n upper={items[i - 1]?.depth}\n lower={items[i + 1]?.depth}\n />\n ))}\n </div>\n </>\n );\n}\n\nfunction getItemOffset(depth: number): number {\n if (depth <= 2) return 14;\n if (depth === 3) return 26;\n return 36;\n}\n\nfunction getLineOffset(depth: number): number {\n return depth >= 3 ? 10 : 0;\n}\n\nfunction TOCItem({\n item,\n upper = item.depth,\n lower = item.depth,\n}: {\n item: Primitive.TOCItemType;\n upper?: number;\n lower?: number;\n}) {\n const offset = getLineOffset(item.depth),\n upperOffset = getLineOffset(upper),\n lowerOffset = getLineOffset(lower);\n\n return (\n <Primitive.TOCItem\n href={item.url}\n style={{\n paddingInlineStart: getItemOffset(item.depth),\n }}\n className=\"prose relative py-1.5 text-sm text-fd-muted-foreground hover:text-fd-accent-foreground transition-colors wrap-anywhere first:pt-0 last:pb-0 data-[active=true]:text-fd-primary\"\n >\n {offset !== upperOffset && (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 16\"\n className=\"absolute -top-1.5 start-0 size-4 rtl:-scale-x-100\"\n >\n <line\n x1={upperOffset}\n y1=\"0\"\n x2={offset}\n y2=\"12\"\n className=\"stroke-fd-foreground/10\"\n strokeWidth=\"1\"\n />\n </svg>\n )}\n <div\n className={cn(\n 'absolute inset-y-0 w-px bg-fd-foreground/10',\n offset !== upperOffset && 'top-1.5',\n offset !== lowerOffset && 'bottom-1.5',\n )}\n style={{\n insetInlineStart: offset,\n }}\n />\n {item.title}\n </Primitive.TOCItem>\n );\n}\n"],"mappings":";;;;;;;;;;;AAQA,SAAgB,SAAS,EAAE,KAAK,WAAW,GAAG,SAAgC;CAC5E,MAAM,eAAe,OAAuB,KAAK;CACjD,MAAM,QAAQ,aAAa;CAC3B,MAAM,EAAE,SAAS,SAAS;CAE1B,MAAM,CAAC,KAAK,UAAU,UAIlB;AAEJ,iBAAgB;AACd,MAAI,CAAC,aAAa,QAAS;EAC3B,MAAM,YAAY,aAAa;EAE/B,SAAS,WAAiB;AACxB,OAAI,UAAU,iBAAiB,EAAG;GAClC,IAAI,IAAI,GACN,IAAI;GACN,MAAM,IAAc,EAAE;AACtB,QAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;IACrC,MAAM,UAA8B,UAAU,cAC5C,YAAY,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC,IACnC;AACD,QAAI,CAAC,QAAS;IAEd,MAAM,SAAS,iBAAiB,QAAQ;IACxC,MAAM,SAAS,cAAc,MAAM,GAAG,MAAM,GAAG,GAC7C,MAAM,QAAQ,YAAY,WAAW,OAAO,WAAW,EACvD,SAAS,QAAQ,YAAY,QAAQ,eAAe,WAAW,OAAO,cAAc;AAEtF,QAAI,KAAK,IAAI,QAAQ,EAAE;AACvB,QAAI,KAAK,IAAI,GAAG,OAAO;AAEvB,MAAE,KAAK,GAAG,MAAM,IAAI,MAAM,MAAM,OAAO,GAAG,MAAM;AAChD,MAAE,KAAK,IAAI,OAAO,GAAG,SAAS;;AAGhC,UAAO;IACL,MAAM,EAAE,KAAK,IAAI;IACjB,OAAO,IAAI;IACX,QAAQ;IACT,CAAC;;EAGJ,MAAM,WAAW,IAAI,eAAe,SAAS;AAC7C,YAAU;AAEV,WAAS,QAAQ,UAAU;AAC3B,eAAa;AACX,YAAS,YAAY;;IAEtB,CAAC,MAAM,CAAC;AAEX,KAAI,MAAM,WAAW,EACnB,QACE,oBAAC;EAAI,WAAU;YACZ,KAAK;GACF;AAGV,QACE,8CACG,OACC,oBAAC;EACC,WAAU;EACV,OAAO;GACL,OAAO,IAAI;GACX,QAAQ,IAAI;GACZ,WAAW,2BAET,mBACE,wDAAwD,IAAI,MAAM,GAAG,IAAI,OAAO,aAAa,IAAI,KAAK,wDACvG,CACF;GACF;YAED,oBAAC;GACe;GACd,WAAU;IACV;GACE,EAER,oBAAC;EAAI,KAAK,UAAU,cAAc,IAAI;EAAE,WAAW,GAAG,iBAAiB,UAAU;EAAE,GAAI;YACpF,MAAM,KAAK,MAAM,MAChB,oBAAC;GAEO;GACN,OAAO,MAAM,IAAI,IAAI;GACrB,OAAO,MAAM,IAAI,IAAI;KAHhB,KAAK,IAIV,CACF;GACE,IACL;;AAIP,SAAS,cAAc,OAAuB;AAC5C,KAAI,SAAS,EAAG,QAAO;AACvB,KAAI,UAAU,EAAG,QAAO;AACxB,QAAO;;AAGT,SAAS,cAAc,OAAuB;AAC5C,QAAO,SAAS,IAAI,KAAK;;AAG3B,SAAS,QAAQ,EACf,MACA,QAAQ,KAAK,OACb,QAAQ,KAAK,SAKZ;CACD,MAAM,SAAS,cAAc,KAAK,MAAM,EACtC,cAAc,cAAc,MAAM,EAClC,cAAc,cAAc,MAAM;AAEpC,QACE,qBAAC,UAAU;EACT,MAAM,KAAK;EACX,OAAO,EACL,oBAAoB,cAAc,KAAK,MAAM,EAC9C;EACD,WAAU;;GAET,WAAW,eACV,oBAAC;IACC,OAAM;IACN,SAAQ;IACR,WAAU;cAEV,oBAAC;KACC,IAAI;KACJ,IAAG;KACH,IAAI;KACJ,IAAG;KACH,WAAU;KACV,aAAY;MACZ;KACE;GAER,oBAAC;IACC,WAAW,GACT,+CACA,WAAW,eAAe,WAC1B,WAAW,eAAe,aAC3B;IACD,OAAO,EACL,kBAAkB,QACnB;KACD;GACD,KAAK;;GACY"}
|
|
@@ -1 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
import { ComponentProps } from "react";
|
|
2
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
3
|
+
|
|
4
|
+
//#region src/components/toc/default.d.ts
|
|
5
|
+
declare function TOCItems({
|
|
6
|
+
ref,
|
|
7
|
+
className,
|
|
8
|
+
...props
|
|
9
|
+
}: ComponentProps<'div'>): react_jsx_runtime0.JSX.Element;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { TOCItems };
|
|
12
|
+
//# sourceMappingURL=default.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default.d.ts","names":[],"sources":["../../../src/components/toc/default.tsx"],"mappings":";;;;iBAQgB,QAAA,CAAA;EAAW,GAAA;EAAK,SAAA;EAAA,GAAc;AAAA,GAAS,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -1,12 +1,40 @@
|
|
|
1
|
-
|
|
1
|
+
'use client';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
import { useI18n } from "../../contexts/i18n.js";
|
|
4
|
+
import { cn } from "../../utils/cn.js";
|
|
5
|
+
import { mergeRefs } from "../../utils/merge-refs.js";
|
|
6
|
+
import { TocThumb, useTOCItems } from "./index.js";
|
|
7
|
+
import { useRef } from "react";
|
|
8
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
import * as Primitive from "fumadocs-core/toc";
|
|
4
10
|
|
|
5
11
|
//#region src/components/toc/default.tsx
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
12
|
+
function TOCItems({ ref, className, ...props }) {
|
|
13
|
+
const containerRef = useRef(null);
|
|
14
|
+
const items = useTOCItems();
|
|
15
|
+
const { text } = useI18n();
|
|
16
|
+
if (items.length === 0) return /* @__PURE__ */ jsx("div", {
|
|
17
|
+
className: "rounded-lg border bg-fd-card p-3 text-xs text-fd-muted-foreground",
|
|
18
|
+
children: text.tocNoHeadings
|
|
19
|
+
});
|
|
20
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(TocThumb, {
|
|
21
|
+
containerRef,
|
|
22
|
+
className: "absolute top-(--fd-top) h-(--fd-height) w-0.5 rounded-e-sm bg-fd-primary transition-[top,height] ease-linear"
|
|
23
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
24
|
+
ref: mergeRefs(ref, containerRef),
|
|
25
|
+
className: cn("flex flex-col border-s border-fd-foreground/10", className),
|
|
26
|
+
...props,
|
|
27
|
+
children: items.map((item) => /* @__PURE__ */ jsx(TOCItem, { item }, item.url))
|
|
28
|
+
})] });
|
|
29
|
+
}
|
|
30
|
+
function TOCItem({ item }) {
|
|
31
|
+
return /* @__PURE__ */ jsx(Primitive.TOCItem, {
|
|
32
|
+
href: item.url,
|
|
33
|
+
className: cn("prose py-1.5 text-sm text-fd-muted-foreground transition-colors wrap-anywhere first:pt-0 last:pb-0 data-[active=true]:text-fd-primary", item.depth <= 2 && "ps-3", item.depth === 3 && "ps-6", item.depth >= 4 && "ps-8"),
|
|
34
|
+
children: item.title
|
|
35
|
+
});
|
|
36
|
+
}
|
|
9
37
|
|
|
10
38
|
//#endregion
|
|
11
|
-
export {
|
|
39
|
+
export { TOCItems };
|
|
12
40
|
//# sourceMappingURL=default.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default.js","names":[],"sources":["../../../src/components/toc/default.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"default.js","names":[],"sources":["../../../src/components/toc/default.tsx"],"sourcesContent":["'use client';\nimport { useI18n } from '@/contexts/i18n';\nimport { cn } from '@/utils/cn';\nimport { type ComponentProps, useRef } from 'react';\nimport { mergeRefs } from '@/utils/merge-refs';\nimport { TocThumb, useTOCItems } from '.';\nimport * as Primitive from 'fumadocs-core/toc';\n\nexport function TOCItems({ ref, className, ...props }: ComponentProps<'div'>) {\n const containerRef = useRef<HTMLDivElement>(null);\n const items = useTOCItems();\n const { text } = useI18n();\n\n if (items.length === 0)\n return (\n <div className=\"rounded-lg border bg-fd-card p-3 text-xs text-fd-muted-foreground\">\n {text.tocNoHeadings}\n </div>\n );\n\n return (\n <>\n <TocThumb\n containerRef={containerRef}\n className=\"absolute top-(--fd-top) h-(--fd-height) w-0.5 rounded-e-sm bg-fd-primary transition-[top,height] ease-linear\"\n />\n <div\n ref={mergeRefs(ref, containerRef)}\n className={cn('flex flex-col border-s border-fd-foreground/10', className)}\n {...props}\n >\n {items.map((item) => (\n <TOCItem key={item.url} item={item} />\n ))}\n </div>\n </>\n );\n}\n\nfunction TOCItem({ item }: { item: Primitive.TOCItemType }) {\n return (\n <Primitive.TOCItem\n href={item.url}\n className={cn(\n 'prose py-1.5 text-sm text-fd-muted-foreground transition-colors wrap-anywhere first:pt-0 last:pb-0 data-[active=true]:text-fd-primary',\n item.depth <= 2 && 'ps-3',\n item.depth === 3 && 'ps-6',\n item.depth >= 4 && 'ps-8',\n )}\n >\n {item.title}\n </Primitive.TOCItem>\n );\n}\n"],"mappings":";;;;;;;;;;;AAQA,SAAgB,SAAS,EAAE,KAAK,WAAW,GAAG,SAAgC;CAC5E,MAAM,eAAe,OAAuB,KAAK;CACjD,MAAM,QAAQ,aAAa;CAC3B,MAAM,EAAE,SAAS,SAAS;AAE1B,KAAI,MAAM,WAAW,EACnB,QACE,oBAAC;EAAI,WAAU;YACZ,KAAK;GACF;AAGV,QACE,8CACE,oBAAC;EACe;EACd,WAAU;GACV,EACF,oBAAC;EACC,KAAK,UAAU,KAAK,aAAa;EACjC,WAAW,GAAG,kDAAkD,UAAU;EAC1E,GAAI;YAEH,MAAM,KAAK,SACV,oBAAC,WAA6B,QAAhB,KAAK,IAAmB,CACtC;GACE,IACL;;AAIP,SAAS,QAAQ,EAAE,QAAyC;AAC1D,QACE,oBAAC,UAAU;EACT,MAAM,KAAK;EACX,WAAW,GACT,yIACA,KAAK,SAAS,KAAK,QACnB,KAAK,UAAU,KAAK,QACpB,KAAK,SAAS,KAAK,OACpB;YAEA,KAAK;GACY"}
|
|
@@ -1 +1,26 @@
|
|
|
1
|
-
|
|
1
|
+
import { ComponentProps, RefObject } from "react";
|
|
2
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
3
|
+
import * as Primitive from "fumadocs-core/toc";
|
|
4
|
+
|
|
5
|
+
//#region src/components/toc/index.d.ts
|
|
6
|
+
declare function useTOCItems(): Primitive.TOCItemType[];
|
|
7
|
+
declare function TOCProvider({
|
|
8
|
+
toc,
|
|
9
|
+
children,
|
|
10
|
+
...props
|
|
11
|
+
}: ComponentProps<typeof Primitive.AnchorProvider>): react_jsx_runtime0.JSX.Element;
|
|
12
|
+
declare function TOCScrollArea({
|
|
13
|
+
ref,
|
|
14
|
+
className,
|
|
15
|
+
...props
|
|
16
|
+
}: ComponentProps<'div'>): react_jsx_runtime0.JSX.Element;
|
|
17
|
+
interface RefProps {
|
|
18
|
+
containerRef: RefObject<HTMLElement | null>;
|
|
19
|
+
}
|
|
20
|
+
declare function TocThumb({
|
|
21
|
+
containerRef,
|
|
22
|
+
...props
|
|
23
|
+
}: ComponentProps<'div'> & RefProps): react_jsx_runtime0.JSX.Element;
|
|
24
|
+
//#endregion
|
|
25
|
+
export { TOCProvider, TOCScrollArea, TocThumb, useTOCItems };
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/toc/index.tsx"],"mappings":";;;;;iBAiBgB,WAAA,CAAA,GAAe,SAAA,CAAU,WAAA;AAAA,iBAIzB,WAAA,CAAA;EACd,GAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,cAAA,QAAsB,SAAA,CAAU,cAAA,IAAe,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAUlC,aAAA,CAAA;EAAgB,GAAA;EAAK,SAAA;EAAA,GAAc;AAAA,GAAS,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,UAmBvE,QAAA;EACR,YAAA,EAAc,SAAA,CAAU,WAAA;AAAA;AAAA,iBAGV,QAAA,CAAA;EAAW,YAAA;EAAA,GAAiB;AAAA,GAAS,cAAA,UAAwB,QAAA,GAAQ,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -1,12 +1,82 @@
|
|
|
1
|
-
|
|
1
|
+
'use client';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
import { cn } from "../../utils/cn.js";
|
|
4
|
+
import { mergeRefs } from "../../utils/merge-refs.js";
|
|
5
|
+
import { createContext, use, useEffect, useEffectEvent, useRef } from "react";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
import * as Primitive from "fumadocs-core/toc";
|
|
8
|
+
import { useOnChange } from "fumadocs-core/utils/use-on-change";
|
|
4
9
|
|
|
5
10
|
//#region src/components/toc/index.tsx
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
11
|
+
const TOCContext = createContext([]);
|
|
12
|
+
function useTOCItems() {
|
|
13
|
+
return use(TOCContext);
|
|
14
|
+
}
|
|
15
|
+
function TOCProvider({ toc, children, ...props }) {
|
|
16
|
+
return /* @__PURE__ */ jsx(TOCContext, {
|
|
17
|
+
value: toc,
|
|
18
|
+
children: /* @__PURE__ */ jsx(Primitive.AnchorProvider, {
|
|
19
|
+
toc,
|
|
20
|
+
...props,
|
|
21
|
+
children
|
|
22
|
+
})
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
function TOCScrollArea({ ref, className, ...props }) {
|
|
26
|
+
const viewRef = useRef(null);
|
|
27
|
+
return /* @__PURE__ */ jsx("div", {
|
|
28
|
+
ref: mergeRefs(viewRef, ref),
|
|
29
|
+
className: cn("relative min-h-0 text-sm ms-px overflow-auto [scrollbar-width:none] mask-[linear-gradient(to_bottom,transparent,white_16px,white_calc(100%-16px),transparent)] py-3", className),
|
|
30
|
+
...props,
|
|
31
|
+
children: /* @__PURE__ */ jsx(Primitive.ScrollProvider, {
|
|
32
|
+
containerRef: viewRef,
|
|
33
|
+
children: props.children
|
|
34
|
+
})
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function TocThumb({ containerRef, ...props }) {
|
|
38
|
+
const thumbRef = useRef(null);
|
|
39
|
+
const active = Primitive.useActiveAnchors();
|
|
40
|
+
function update(info) {
|
|
41
|
+
const element = thumbRef.current;
|
|
42
|
+
if (!element) return;
|
|
43
|
+
element.style.setProperty("--fd-top", `${info[0]}px`);
|
|
44
|
+
element.style.setProperty("--fd-height", `${info[1]}px`);
|
|
45
|
+
}
|
|
46
|
+
const onPrint = useEffectEvent(() => {
|
|
47
|
+
if (containerRef.current) update(calc(containerRef.current, active));
|
|
48
|
+
});
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
if (!containerRef.current) return;
|
|
51
|
+
const container = containerRef.current;
|
|
52
|
+
const observer = new ResizeObserver(onPrint);
|
|
53
|
+
observer.observe(container);
|
|
54
|
+
return () => {
|
|
55
|
+
observer.disconnect();
|
|
56
|
+
};
|
|
57
|
+
}, [containerRef]);
|
|
58
|
+
useOnChange(active, () => {
|
|
59
|
+
if (containerRef.current) update(calc(containerRef.current, active));
|
|
60
|
+
});
|
|
61
|
+
return /* @__PURE__ */ jsx("div", {
|
|
62
|
+
ref: thumbRef,
|
|
63
|
+
"data-hidden": active.length === 0,
|
|
64
|
+
...props
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
function calc(container, active) {
|
|
68
|
+
if (active.length === 0 || container.clientHeight === 0) return [0, 0];
|
|
69
|
+
let upper = Number.MAX_VALUE, lower = 0;
|
|
70
|
+
for (const item of active) {
|
|
71
|
+
const element = container.querySelector(`a[href="#${item}"]`);
|
|
72
|
+
if (!element) continue;
|
|
73
|
+
const styles = getComputedStyle(element);
|
|
74
|
+
upper = Math.min(upper, element.offsetTop + parseFloat(styles.paddingTop));
|
|
75
|
+
lower = Math.max(lower, element.offsetTop + element.clientHeight - parseFloat(styles.paddingBottom));
|
|
76
|
+
}
|
|
77
|
+
return [upper, lower - upper];
|
|
78
|
+
}
|
|
9
79
|
|
|
10
80
|
//#endregion
|
|
11
|
-
export {
|
|
81
|
+
export { TOCProvider, TOCScrollArea, TocThumb, useTOCItems };
|
|
12
82
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/toc/index.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/toc/index.tsx"],"sourcesContent":["'use client';\nimport * as Primitive from 'fumadocs-core/toc';\nimport {\n type ComponentProps,\n createContext,\n type RefObject,\n use,\n useEffect,\n useEffectEvent,\n useRef,\n} from 'react';\nimport { cn } from '@/utils/cn';\nimport { mergeRefs } from '@/utils/merge-refs';\nimport { useOnChange } from 'fumadocs-core/utils/use-on-change';\n\nconst TOCContext = createContext<Primitive.TOCItemType[]>([]);\n\nexport function useTOCItems(): Primitive.TOCItemType[] {\n return use(TOCContext);\n}\n\nexport function TOCProvider({\n toc,\n children,\n ...props\n}: ComponentProps<typeof Primitive.AnchorProvider>) {\n return (\n <TOCContext value={toc}>\n <Primitive.AnchorProvider toc={toc} {...props}>\n {children}\n </Primitive.AnchorProvider>\n </TOCContext>\n );\n}\n\nexport function TOCScrollArea({ ref, className, ...props }: ComponentProps<'div'>) {\n const viewRef = useRef<HTMLDivElement>(null);\n\n return (\n <div\n ref={mergeRefs(viewRef, ref)}\n className={cn(\n 'relative min-h-0 text-sm ms-px overflow-auto [scrollbar-width:none] mask-[linear-gradient(to_bottom,transparent,white_16px,white_calc(100%-16px),transparent)] py-3',\n className,\n )}\n {...props}\n >\n <Primitive.ScrollProvider containerRef={viewRef}>{props.children}</Primitive.ScrollProvider>\n </div>\n );\n}\n\ntype TocThumbType = [top: number, height: number];\n\ninterface RefProps {\n containerRef: RefObject<HTMLElement | null>;\n}\n\nexport function TocThumb({ containerRef, ...props }: ComponentProps<'div'> & RefProps) {\n const thumbRef = useRef<HTMLDivElement>(null);\n const active = Primitive.useActiveAnchors();\n function update(info: TocThumbType): void {\n const element = thumbRef.current;\n if (!element) return;\n element.style.setProperty('--fd-top', `${info[0]}px`);\n element.style.setProperty('--fd-height', `${info[1]}px`);\n }\n\n const onPrint = useEffectEvent(() => {\n if (containerRef.current) {\n update(calc(containerRef.current, active));\n }\n });\n\n useEffect(() => {\n if (!containerRef.current) return;\n const container = containerRef.current;\n\n const observer = new ResizeObserver(onPrint);\n observer.observe(container);\n\n return () => {\n observer.disconnect();\n };\n }, [containerRef]);\n\n useOnChange(active, () => {\n if (containerRef.current) {\n update(calc(containerRef.current, active));\n }\n });\n\n return <div ref={thumbRef} data-hidden={active.length === 0} {...props} />;\n}\n\nfunction calc(container: HTMLElement, active: string[]): TocThumbType {\n if (active.length === 0 || container.clientHeight === 0) {\n return [0, 0];\n }\n\n let upper = Number.MAX_VALUE,\n lower = 0;\n\n for (const item of active) {\n const element = container.querySelector<HTMLElement>(`a[href=\"#${item}\"]`);\n if (!element) continue;\n\n const styles = getComputedStyle(element);\n upper = Math.min(upper, element.offsetTop + parseFloat(styles.paddingTop));\n lower = Math.max(\n lower,\n element.offsetTop + element.clientHeight - parseFloat(styles.paddingBottom),\n );\n }\n\n return [upper, lower - upper];\n}\n"],"mappings":";;;;;;;;;;AAeA,MAAM,aAAa,cAAuC,EAAE,CAAC;AAE7D,SAAgB,cAAuC;AACrD,QAAO,IAAI,WAAW;;AAGxB,SAAgB,YAAY,EAC1B,KACA,UACA,GAAG,SAC+C;AAClD,QACE,oBAAC;EAAW,OAAO;YACjB,oBAAC,UAAU;GAAoB;GAAK,GAAI;GACrC;IACwB;GAChB;;AAIjB,SAAgB,cAAc,EAAE,KAAK,WAAW,GAAG,SAAgC;CACjF,MAAM,UAAU,OAAuB,KAAK;AAE5C,QACE,oBAAC;EACC,KAAK,UAAU,SAAS,IAAI;EAC5B,WAAW,GACT,uKACA,UACD;EACD,GAAI;YAEJ,oBAAC,UAAU;GAAe,cAAc;aAAU,MAAM;IAAoC;GACxF;;AAUV,SAAgB,SAAS,EAAE,cAAc,GAAG,SAA2C;CACrF,MAAM,WAAW,OAAuB,KAAK;CAC7C,MAAM,SAAS,UAAU,kBAAkB;CAC3C,SAAS,OAAO,MAA0B;EACxC,MAAM,UAAU,SAAS;AACzB,MAAI,CAAC,QAAS;AACd,UAAQ,MAAM,YAAY,YAAY,GAAG,KAAK,GAAG,IAAI;AACrD,UAAQ,MAAM,YAAY,eAAe,GAAG,KAAK,GAAG,IAAI;;CAG1D,MAAM,UAAU,qBAAqB;AACnC,MAAI,aAAa,QACf,QAAO,KAAK,aAAa,SAAS,OAAO,CAAC;GAE5C;AAEF,iBAAgB;AACd,MAAI,CAAC,aAAa,QAAS;EAC3B,MAAM,YAAY,aAAa;EAE/B,MAAM,WAAW,IAAI,eAAe,QAAQ;AAC5C,WAAS,QAAQ,UAAU;AAE3B,eAAa;AACX,YAAS,YAAY;;IAEtB,CAAC,aAAa,CAAC;AAElB,aAAY,cAAc;AACxB,MAAI,aAAa,QACf,QAAO,KAAK,aAAa,SAAS,OAAO,CAAC;GAE5C;AAEF,QAAO,oBAAC;EAAI,KAAK;EAAU,eAAa,OAAO,WAAW;EAAG,GAAI;GAAS;;AAG5E,SAAS,KAAK,WAAwB,QAAgC;AACpE,KAAI,OAAO,WAAW,KAAK,UAAU,iBAAiB,EACpD,QAAO,CAAC,GAAG,EAAE;CAGf,IAAI,QAAQ,OAAO,WACjB,QAAQ;AAEV,MAAK,MAAM,QAAQ,QAAQ;EACzB,MAAM,UAAU,UAAU,cAA2B,YAAY,KAAK,IAAI;AAC1E,MAAI,CAAC,QAAS;EAEd,MAAM,SAAS,iBAAiB,QAAQ;AACxC,UAAQ,KAAK,IAAI,OAAO,QAAQ,YAAY,WAAW,OAAO,WAAW,CAAC;AAC1E,UAAQ,KAAK,IACX,OACA,QAAQ,YAAY,QAAQ,eAAe,WAAW,OAAO,cAAc,CAC5E;;AAGH,QAAO,CAAC,OAAO,QAAQ,MAAM"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as react_jsx_runtime139 from "react/jsx-runtime";
|
|
2
1
|
import { ReactNode } from "react";
|
|
2
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
3
3
|
|
|
4
4
|
//#region src/components/type-table.d.ts
|
|
5
5
|
interface ParameterNode {
|
|
@@ -33,7 +33,7 @@ declare function TypeTable({
|
|
|
33
33
|
type
|
|
34
34
|
}: {
|
|
35
35
|
type: Record<string, TypeNode>;
|
|
36
|
-
}):
|
|
36
|
+
}): react_jsx_runtime0.JSX.Element;
|
|
37
37
|
//#endregion
|
|
38
38
|
export { ParameterNode, TypeNode, TypeTable };
|
|
39
39
|
//# sourceMappingURL=type-table.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-table.d.ts","names":[],"sources":["../../src/components/type-table.tsx"],"
|
|
1
|
+
{"version":3,"file":"type-table.d.ts","names":[],"sources":["../../src/components/type-table.tsx"],"mappings":";;;;UASiB,aAAA;EACf,IAAA;EACA,WAAA,EAAa,SAAA;AAAA;AAAA,UAGE,QAAA;;;;EAIf,WAAA,GAAc,SAAA;EAPD;;;EAYb,IAAA,EAAM,SAAA;EATiB;;;EAcvB,eAAA,GAAkB,SAAA;EAAA;;;EAKlB,mBAAA;EAEA,OAAA,GAAU,SAAA;EAEV,QAAA;EACA,UAAA;EAEA,UAAA,GAAa,aAAA;EAEb,OAAA,GAAU,SAAA;AAAA;AAAA,iBAaI,SAAA,CAAA;EAAY;AAAA;EAAU,IAAA,EAAM,MAAA,SAAe,QAAA;AAAA,IAAW,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
+
import { cn } from "../utils/cn.js";
|
|
3
4
|
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "./ui/collapsible.js";
|
|
5
|
+
import { useState } from "react";
|
|
6
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
4
7
|
import Link from "fumadocs-core/link";
|
|
5
|
-
import { cn } from "@fumadocs/ui/cn";
|
|
6
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
7
8
|
import { ChevronDown } from "lucide-react";
|
|
8
|
-
import { useState } from "react";
|
|
9
9
|
import { cva } from "class-variance-authority";
|
|
10
10
|
|
|
11
11
|
//#region src/components/type-table.tsx
|
|
@@ -62,21 +62,21 @@ function Item({ name, item: { parameters = [], description, required = false, de
|
|
|
62
62
|
className: "text-sm prose col-span-full prose-no-margin empty:hidden",
|
|
63
63
|
children: description
|
|
64
64
|
}),
|
|
65
|
-
typeDescription && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("p", {
|
|
65
|
+
typeDescription && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("p", {
|
|
66
66
|
className: cn(fieldVariants()),
|
|
67
67
|
children: "Type"
|
|
68
68
|
}), /* @__PURE__ */ jsx("p", {
|
|
69
69
|
className: "my-auto not-prose",
|
|
70
70
|
children: typeDescription
|
|
71
71
|
})] }),
|
|
72
|
-
defaultValue && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("p", {
|
|
72
|
+
defaultValue && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("p", {
|
|
73
73
|
className: cn(fieldVariants()),
|
|
74
74
|
children: "Default"
|
|
75
75
|
}), /* @__PURE__ */ jsx("p", {
|
|
76
76
|
className: "my-auto not-prose",
|
|
77
77
|
children: defaultValue
|
|
78
78
|
})] }),
|
|
79
|
-
parameters.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("p", {
|
|
79
|
+
parameters.length > 0 && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("p", {
|
|
80
80
|
className: cn(fieldVariants()),
|
|
81
81
|
children: "Parameters"
|
|
82
82
|
}), /* @__PURE__ */ jsx("div", {
|
|
@@ -92,7 +92,7 @@ function Item({ name, item: { parameters = [], description, required = false, de
|
|
|
92
92
|
})]
|
|
93
93
|
}, param.name))
|
|
94
94
|
})] }),
|
|
95
|
-
returns && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("p", {
|
|
95
|
+
returns && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("p", {
|
|
96
96
|
className: cn(fieldVariants()),
|
|
97
97
|
children: "Returns"
|
|
98
98
|
}), /* @__PURE__ */ jsx("div", {
|