@fumadocs/base-ui 16.6.10 → 16.6.12
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/dist/_virtual/_rolldown/runtime.js +6 -11
- package/dist/components/accordion.js +2 -4
- package/dist/components/accordion.js.map +1 -1
- package/dist/components/banner.js +2 -4
- package/dist/components/banner.js.map +1 -1
- package/dist/components/callout.js +1 -2
- package/dist/components/callout.js.map +1 -1
- package/dist/components/card.js +1 -2
- package/dist/components/card.js.map +1 -1
- package/dist/components/codeblock.js +2 -4
- package/dist/components/codeblock.js.map +1 -1
- package/dist/components/codeblock.rsc.js +5 -6
- package/dist/components/codeblock.rsc.js.map +1 -1
- package/dist/components/dialog/search-algolia.js +2 -4
- package/dist/components/dialog/search-algolia.js.map +1 -1
- package/dist/components/dialog/search-default.js +2 -4
- package/dist/components/dialog/search-default.js.map +1 -1
- package/dist/components/dialog/search-orama.js +2 -4
- package/dist/components/dialog/search-orama.js.map +1 -1
- package/dist/components/dialog/search.js +2 -4
- package/dist/components/dialog/search.js.map +1 -1
- package/dist/components/dynamic-codeblock.core.js +2 -4
- package/dist/components/dynamic-codeblock.core.js.map +1 -1
- package/dist/components/dynamic-codeblock.js +2 -4
- package/dist/components/dynamic-codeblock.js.map +1 -1
- package/dist/components/files.js +2 -4
- package/dist/components/files.js.map +1 -1
- package/dist/components/github-info.js +1 -2
- package/dist/components/github-info.js.map +1 -1
- package/dist/components/heading.js +1 -2
- package/dist/components/heading.js.map +1 -1
- package/dist/components/image-zoom.js +3 -5
- package/dist/components/image-zoom.js.map +1 -1
- package/dist/components/inline-toc.js +2 -4
- package/dist/components/inline-toc.js.map +1 -1
- package/dist/components/sidebar/base.js +2 -4
- package/dist/components/sidebar/base.js.map +1 -1
- package/dist/components/sidebar/link-item.js +2 -4
- package/dist/components/sidebar/link-item.js.map +1 -1
- package/dist/components/sidebar/page-tree.js +1 -2
- package/dist/components/sidebar/page-tree.js.map +1 -1
- package/dist/components/sidebar/tabs/dropdown.js +2 -4
- package/dist/components/sidebar/tabs/dropdown.js.map +1 -1
- package/dist/components/sidebar/tabs/index.js +1 -2
- package/dist/components/sidebar/tabs/index.js.map +1 -1
- package/dist/components/steps.js +1 -2
- package/dist/components/steps.js.map +1 -1
- package/dist/components/tabs.js +2 -4
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/toc/clerk.js +2 -4
- package/dist/components/toc/clerk.js.map +1 -1
- package/dist/components/toc/default.js +2 -4
- package/dist/components/toc/default.js.map +1 -1
- package/dist/components/toc/index.js +2 -4
- package/dist/components/toc/index.js.map +1 -1
- package/dist/components/type-table.js +2 -4
- package/dist/components/type-table.js.map +1 -1
- package/dist/components/ui/accordion.js +2 -4
- package/dist/components/ui/accordion.js.map +1 -1
- package/dist/components/ui/button.d.ts +1 -1
- package/dist/components/ui/button.js +1 -2
- package/dist/components/ui/button.js.map +1 -1
- package/dist/components/ui/collapsible.js +2 -4
- package/dist/components/ui/collapsible.js.map +1 -1
- package/dist/components/ui/navigation-menu.js +2 -4
- package/dist/components/ui/navigation-menu.js.map +1 -1
- package/dist/components/ui/popover.js +2 -4
- package/dist/components/ui/popover.js.map +1 -1
- package/dist/components/ui/scroll-area.js +1 -2
- package/dist/components/ui/scroll-area.js.map +1 -1
- package/dist/components/ui/tabs.js +2 -4
- package/dist/components/ui/tabs.js.map +1 -1
- package/dist/contexts/i18n.js +2 -4
- package/dist/contexts/i18n.js.map +1 -1
- package/dist/contexts/search.js +2 -4
- package/dist/contexts/search.js.map +1 -1
- package/dist/contexts/tree.js +2 -4
- package/dist/contexts/tree.js.map +1 -1
- package/dist/i18n.js +1 -2
- package/dist/i18n.js.map +1 -1
- package/dist/layouts/docs/client.js +2 -4
- package/dist/layouts/docs/client.js.map +1 -1
- package/dist/layouts/docs/index.js +1 -2
- package/dist/layouts/docs/index.js.map +1 -1
- package/dist/layouts/docs/page/client.js +2 -4
- package/dist/layouts/docs/page/client.js.map +1 -1
- package/dist/layouts/docs/page/index.js +1 -2
- package/dist/layouts/docs/page/index.js.map +1 -1
- package/dist/layouts/docs/sidebar.js +2 -4
- package/dist/layouts/docs/sidebar.js.map +1 -1
- package/dist/layouts/flux/index.js +2 -4
- package/dist/layouts/flux/index.js.map +1 -1
- package/dist/layouts/flux/page/client.js +2 -4
- package/dist/layouts/flux/page/client.js.map +1 -1
- package/dist/layouts/flux/page/index.js +1 -2
- package/dist/layouts/flux/page/index.js.map +1 -1
- package/dist/layouts/flux/sidebar.js +2 -4
- package/dist/layouts/flux/sidebar.js.map +1 -1
- package/dist/layouts/flux/tab-dropdown.js +2 -4
- package/dist/layouts/flux/tab-dropdown.js.map +1 -1
- package/dist/layouts/home/client.d.ts +1 -1
- package/dist/layouts/home/client.js +2 -4
- package/dist/layouts/home/client.js.map +1 -1
- package/dist/layouts/home/index.js +1 -2
- package/dist/layouts/home/index.js.map +1 -1
- package/dist/layouts/home/navbar.js +2 -4
- package/dist/layouts/home/navbar.js.map +1 -1
- package/dist/layouts/home/not-found.js +1 -2
- package/dist/layouts/home/not-found.js.map +1 -1
- package/dist/layouts/notebook/client.d.ts +1 -1
- package/dist/layouts/notebook/client.d.ts.map +1 -1
- package/dist/layouts/notebook/client.js +2 -4
- package/dist/layouts/notebook/client.js.map +1 -1
- package/dist/layouts/notebook/index.js +1 -2
- package/dist/layouts/notebook/index.js.map +1 -1
- package/dist/layouts/notebook/page/client.js +2 -4
- package/dist/layouts/notebook/page/client.js.map +1 -1
- package/dist/layouts/notebook/page/index.js +1 -2
- package/dist/layouts/notebook/page/index.js.map +1 -1
- package/dist/layouts/notebook/sidebar.js +2 -4
- package/dist/layouts/notebook/sidebar.js.map +1 -1
- package/dist/layouts/shared/index.d.ts +1 -1
- package/dist/layouts/shared/index.d.ts.map +1 -1
- package/dist/layouts/shared/index.js +1 -2
- package/dist/layouts/shared/index.js.map +1 -1
- package/dist/layouts/shared/language-toggle.js +2 -4
- package/dist/layouts/shared/language-toggle.js.map +1 -1
- package/dist/layouts/shared/search-toggle.js +2 -4
- package/dist/layouts/shared/search-toggle.js.map +1 -1
- package/dist/layouts/shared/theme-toggle.js +2 -4
- package/dist/layouts/shared/theme-toggle.js.map +1 -1
- package/dist/mdx.js +1 -2
- package/dist/mdx.js.map +1 -1
- package/dist/mdx.server.js +1 -2
- package/dist/mdx.server.js.map +1 -1
- package/dist/og/takumi.js +1 -2
- package/dist/og/takumi.js.map +1 -1
- package/dist/og.js +1 -2
- package/dist/og.js.map +1 -1
- package/dist/page.js +2 -4
- package/dist/page.js.map +1 -1
- package/dist/provider/base.js +2 -4
- package/dist/provider/base.js.map +1 -1
- package/dist/provider/next.js +2 -4
- package/dist/provider/next.js.map +1 -1
- package/dist/provider/react-router.js +2 -4
- package/dist/provider/react-router.js.map +1 -1
- package/dist/provider/tanstack.js +2 -4
- package/dist/provider/tanstack.js.map +1 -1
- package/dist/provider/waku.js +2 -4
- package/dist/provider/waku.js.map +1 -1
- package/dist/tailwind/typography.js +1 -2
- package/dist/utils/cn.js +1 -2
- package/dist/utils/link-item.js +2 -4
- package/dist/utils/link-item.js.map +1 -1
- package/dist/utils/merge-refs.js +1 -1
- package/dist/utils/urls.js +1 -1
- package/dist/utils/use-copy-button.js +2 -4
- package/dist/utils/use-copy-button.js.map +1 -1
- package/dist/utils/use-footer-items.js +2 -4
- package/dist/utils/use-footer-items.js.map +1 -1
- package/dist/utils/use-is-scroll-top.js +2 -4
- package/dist/utils/use-is-scroll-top.js.map +1 -1
- package/package.json +5 -5
- package/dist/components/image-zoom-DGvp66QF.css +0 -80
- package/dist/components/image-zoom-DGvp66QF.css.map +0 -1
- package/dist/components/image-zoom2.js +0 -1
|
@@ -3,7 +3,6 @@ import { buttonVariants } from "../../components/ui/button.js";
|
|
|
3
3
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
4
|
import Link from "fumadocs-core/link";
|
|
5
5
|
import { HomeIcon } from "lucide-react";
|
|
6
|
-
|
|
7
6
|
//#region src/layouts/home/not-found.tsx
|
|
8
7
|
/**
|
|
9
8
|
* the default not found page content, please make your own if you want to customise it.
|
|
@@ -35,7 +34,7 @@ function DefaultNotFound() {
|
|
|
35
34
|
]
|
|
36
35
|
});
|
|
37
36
|
}
|
|
38
|
-
|
|
39
37
|
//#endregion
|
|
40
38
|
export { DefaultNotFound };
|
|
39
|
+
|
|
41
40
|
//# sourceMappingURL=not-found.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"not-found.js","names":[],"sources":["../../../src/layouts/home/not-found.tsx"],"sourcesContent":["import { buttonVariants } from '@/components/ui/button';\nimport { cn } from '@/utils/cn';\nimport Link from 'fumadocs-core/link';\nimport { HomeIcon } from 'lucide-react';\n\n/**\n * the default not found page content, please make your own if you want to customise it.\n */\nexport function DefaultNotFound() {\n return (\n <div className=\"flex flex-col px-8 justify-center flex-1 text-center items-center gap-4\">\n <h1 className=\"text-6xl font-bold text-fd-muted-foreground\">404</h1>\n <h2 className=\"text-2xl font-semibold\">Page Not Found</h2>\n <p className=\"text-fd-muted-foreground max-w-md\">\n The page you are looking for might have been removed, had its name changed, or is\n temporarily unavailable.\n </p>\n <Link\n href=\"/\"\n className={cn(\n buttonVariants({\n className: 'mt-4 gap-1.5',\n variant: 'primary',\n }),\n )}\n >\n <HomeIcon className=\"size-4\" />\n Back to Home\n </Link>\n </div>\n );\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"not-found.js","names":[],"sources":["../../../src/layouts/home/not-found.tsx"],"sourcesContent":["import { buttonVariants } from '@/components/ui/button';\nimport { cn } from '@/utils/cn';\nimport Link from 'fumadocs-core/link';\nimport { HomeIcon } from 'lucide-react';\n\n/**\n * the default not found page content, please make your own if you want to customise it.\n */\nexport function DefaultNotFound() {\n return (\n <div className=\"flex flex-col px-8 justify-center flex-1 text-center items-center gap-4\">\n <h1 className=\"text-6xl font-bold text-fd-muted-foreground\">404</h1>\n <h2 className=\"text-2xl font-semibold\">Page Not Found</h2>\n <p className=\"text-fd-muted-foreground max-w-md\">\n The page you are looking for might have been removed, had its name changed, or is\n temporarily unavailable.\n </p>\n <Link\n href=\"/\"\n className={cn(\n buttonVariants({\n className: 'mt-4 gap-1.5',\n variant: 'primary',\n }),\n )}\n >\n <HomeIcon className=\"size-4\" />\n Back to Home\n </Link>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAQA,SAAgB,kBAAkB;AAChC,QACE,qBAAC,OAAD;EAAK,WAAU;YAAf;GACE,oBAAC,MAAD;IAAI,WAAU;cAA8C;IAAQ,CAAA;GACpE,oBAAC,MAAD;IAAI,WAAU;cAAyB;IAAmB,CAAA;GAC1D,oBAAC,KAAD;IAAG,WAAU;cAAoC;IAG7C,CAAA;GACJ,qBAAC,MAAD;IACE,MAAK;IACL,WAAW,GACT,eAAe;KACb,WAAW;KACX,SAAS;KACV,CAAC,CACH;cAPH,CASE,oBAAC,UAAD,EAAU,WAAU,UAAW,CAAA,EAAA,eAE1B;;GACH"}
|
|
@@ -41,7 +41,7 @@ declare function NavbarLinkItem({
|
|
|
41
41
|
...props
|
|
42
42
|
}: {
|
|
43
43
|
item: LinkItemType;
|
|
44
|
-
} & HTMLAttributes<HTMLElement>): string | number | bigint | boolean |
|
|
44
|
+
} & HTMLAttributes<HTMLElement>): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | react_jsx_runtime0.JSX.Element | null | undefined;
|
|
45
45
|
//#endregion
|
|
46
46
|
export { LayoutBody, LayoutContext, LayoutContextProvider, LayoutHeader, LayoutHeaderTabs, LayoutInfo, NavbarLinkItem };
|
|
47
47
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","names":[],"sources":["../../../src/layouts/notebook/client.tsx"],"mappings":";;;;;;;cAuBa,aAAA,EAAa,KAAA,CAAA,OAAA,EAAA,UAAA;;;UAOT,UAAA;EACf,OAAA;EACA,OAAA;AAAA;AAAA,iBAGc,qBAAA,CAAA;EACd,kBAAA;EACA,OAAA;EACA,OAAA;EACA;AAAA,GACC,UAAA;EACD,kBAAA;EACA,QAAA,EAAU,SAAA;AAAA,IACX,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAoBe,YAAA,CAAa,KAAA,EAAO,cAAA,aAAwB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAW5C,UAAA,CAAA;EAAa,SAAA;EAAW,KAAA;EAAO,QAAA;EAAA,GAAa;AAAA,GAAS,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAqC1E,gBAAA,CAAA;EACd,OAAA;EACA,SAAA;EAAA,GACG;AAAA,GACF,cAAA;EACD,OAAA,EAAS,mBAAA;AAAA,IACV,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAgCe,cAAA,CAAA;EACd,IAAA;EACA,SAAA;EAAA,GACG;AAAA;EACA,IAAA,EAAM,YAAA;AAAA,IAAiB,cAAA,CAAe,WAAA,yCAAY,
|
|
1
|
+
{"version":3,"file":"client.d.ts","names":[],"sources":["../../../src/layouts/notebook/client.tsx"],"mappings":";;;;;;;cAuBa,aAAA,EAAa,KAAA,CAAA,OAAA,EAAA,UAAA;;;UAOT,UAAA;EACf,OAAA;EACA,OAAA;AAAA;AAAA,iBAGc,qBAAA,CAAA;EACd,kBAAA;EACA,OAAA;EACA,OAAA;EACA;AAAA,GACC,UAAA;EACD,kBAAA;EACA,QAAA,EAAU,SAAA;AAAA,IACX,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAoBe,YAAA,CAAa,KAAA,EAAO,cAAA,aAAwB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAW5C,UAAA,CAAA;EAAa,SAAA;EAAW,KAAA;EAAO,QAAA;EAAA,GAAa;AAAA,GAAS,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAqC1E,gBAAA,CAAA;EACd,OAAA;EACA,SAAA;EAAA,GACG;AAAA,GACF,cAAA;EACD,OAAA,EAAS,mBAAA;AAAA,IACV,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAgCe,cAAA,CAAA;EACd,IAAA;EACA,SAAA;EAAA,GACG;AAAA;EACA,IAAA,EAAM,YAAA;AAAA,IAAiB,cAAA,CAAe,WAAA,yCAAY,QAAA,CAAA,SAAA,IAAA,OAAA,sCAAA,KAAA,CAAA,WAAA,GAAA,KAAA,CAAA,YAAA,mBAAA,KAAA,CAAA,qBAAA,SAAA,QAAA,CAAA,SAAA,wBAAA,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use client";
|
|
3
2
|
import { cn } from "../../utils/cn.js";
|
|
4
3
|
import { useSidebar } from "../../components/sidebar/base.js";
|
|
5
4
|
import { Popover, PopoverContent, PopoverTrigger } from "../../components/ui/popover.js";
|
|
@@ -11,7 +10,6 @@ import { usePathname } from "fumadocs-core/framework";
|
|
|
11
10
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
12
11
|
import Link from "fumadocs-core/link";
|
|
13
12
|
import { ChevronDown } from "lucide-react";
|
|
14
|
-
|
|
15
13
|
//#region src/layouts/notebook/client.tsx
|
|
16
14
|
const LayoutContext = createContext(null);
|
|
17
15
|
function LayoutContextProvider({ navTransparentMode = "none", navMode, tabMode, children }) {
|
|
@@ -153,7 +151,7 @@ function NavbarLinkItemMenu({ item, hoverDelay = 50, className, ...props }) {
|
|
|
153
151
|
})]
|
|
154
152
|
});
|
|
155
153
|
}
|
|
156
|
-
|
|
157
154
|
//#endregion
|
|
158
155
|
export { LayoutBody, LayoutContext, LayoutContextProvider, LayoutHeader, LayoutHeaderTabs, NavbarLinkItem };
|
|
156
|
+
|
|
159
157
|
//# sourceMappingURL=client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","names":[],"sources":["../../../src/layouts/notebook/client.tsx"],"sourcesContent":["'use client';\nimport { cn } from '@/utils/cn';\nimport {\n type ComponentProps,\n createContext,\n Fragment,\n type HTMLAttributes,\n type PointerEvent,\n type ReactNode,\n use,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useSidebar } from '@/components/sidebar/base';\nimport { ChevronDown } from 'lucide-react';\nimport Link from 'fumadocs-core/link';\nimport { usePathname } from 'fumadocs-core/framework';\nimport { isTabActive, type SidebarTabWithProps } from '@/components/sidebar/tabs/dropdown';\nimport { useIsScrollTop } from '@/utils/use-is-scroll-top';\nimport { LinkItem, type LinkItemType, type MenuItemType } from '@/utils/link-item';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\n\nexport const LayoutContext = createContext<\n | (LayoutInfo & {\n isNavTransparent: boolean;\n })\n | null\n>(null);\n\nexport interface LayoutInfo {\n tabMode: 'sidebar' | 'navbar';\n navMode: 'top' | 'auto';\n}\n\nexport function LayoutContextProvider({\n navTransparentMode = 'none',\n navMode,\n tabMode,\n children,\n}: LayoutInfo & {\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 navMode,\n tabMode,\n }),\n [isNavTransparent, navMode, tabMode],\n )}\n >\n {children}\n </LayoutContext>\n );\n}\n\nexport function LayoutHeader(props: ComponentProps<'header'>) {\n const { open } = useSidebar();\n const { isNavTransparent } = use(LayoutContext)!;\n\n return (\n <header data-transparent={isNavTransparent && !open} {...props}>\n {props.children}\n </header>\n );\n}\n\nexport function LayoutBody({ className, style, children, ...props }: ComponentProps<'div'>) {\n const { navMode } = use(LayoutContext)!;\n const { collapsed } = useSidebar();\n const pageCol =\n 'calc(var(--fd-layout-width,97rem) - var(--fd-sidebar-col) - var(--fd-toc-width))';\n\n return (\n <div\n id=\"nd-notebook-layout\"\n className={cn(\n 'grid overflow-x-clip min-h-(--fd-docs-height) transition-[grid-template-columns] 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 style={\n {\n gridTemplate:\n navMode === 'top'\n ? `\". header header header .\"\n \"sidebar sidebar toc-popover toc-popover .\"\n \"sidebar sidebar main toc .\" 1fr / minmax(min-content, 1fr) var(--fd-sidebar-col) minmax(0, ${pageCol}) var(--fd-toc-width) minmax(min-content, 1fr)`\n : `\"sidebar sidebar header header .\"\n \"sidebar sidebar toc-popover toc-popover .\"\n \"sidebar sidebar main toc .\" 1fr / minmax(min-content, 1fr) var(--fd-sidebar-col) minmax(0, ${pageCol}) 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 LayoutHeaderTabs({\n options,\n className,\n ...props\n}: ComponentProps<'div'> & {\n options: SidebarTabWithProps[];\n}) {\n const pathname = usePathname();\n const selectedIdx = useMemo(() => {\n return options.findLastIndex((option) => isTabActive(option, pathname));\n }, [options, pathname]);\n\n return (\n <div className={cn('flex flex-row items-end gap-6', className)} {...props}>\n {options.map((option, i) => {\n const { title, url, unlisted, props: { className, ...rest } = {} } = option;\n const isSelected = selectedIdx === i;\n\n return (\n <Link\n key={i}\n href={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 unlisted && !isSelected && 'hidden',\n isSelected && 'border-fd-primary text-fd-primary',\n className,\n )}\n {...rest}\n >\n {title}\n </Link>\n );\n })}\n </div>\n );\n}\n\nexport function NavbarLinkItem({\n item,\n className,\n ...props\n}: { item: LinkItemType } & HTMLAttributes<HTMLElement>) {\n if (item.type === 'custom') return item.children;\n\n if (item.type === 'menu') {\n return <NavbarLinkItemMenu item={item} className={className} {...props} />;\n }\n\n return (\n <LinkItem\n item={item}\n className={cn(\n 'text-sm text-fd-muted-foreground transition-colors hover:text-fd-accent-foreground data-[active=true]:text-fd-primary',\n className,\n )}\n {...props}\n >\n {item.text}\n </LinkItem>\n );\n}\n\nfunction NavbarLinkItemMenu({\n item,\n hoverDelay = 50,\n className,\n ...props\n}: { item: MenuItemType; hoverDelay?: number } & HTMLAttributes<HTMLElement>) {\n const [open, setOpen] = useState(false);\n const timeoutRef = useRef<number>(null);\n const freezeUntil = useRef<number>(null);\n\n const delaySetOpen = (value: boolean) => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n\n timeoutRef.current = window.setTimeout(() => {\n setOpen(value);\n freezeUntil.current = Date.now() + 300;\n }, hoverDelay);\n };\n const onPointerEnter = (e: PointerEvent) => {\n if (e.pointerType === 'touch') return;\n delaySetOpen(true);\n };\n const onPointerLeave = (e: PointerEvent) => {\n if (e.pointerType === 'touch') return;\n delaySetOpen(false);\n };\n function isTouchDevice() {\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n }\n\n return (\n <Popover\n open={open}\n onOpenChange={(value) => {\n if (freezeUntil.current === null || Date.now() >= freezeUntil.current) setOpen(value);\n }}\n >\n <PopoverTrigger\n className={cn(\n 'inline-flex items-center gap-1.5 p-1 text-sm text-fd-muted-foreground transition-colors has-data-[active=true]:text-fd-primary data-[state=open]:text-fd-accent-foreground focus-visible:outline-none',\n className,\n )}\n onPointerEnter={onPointerEnter}\n onPointerLeave={onPointerLeave}\n {...props}\n >\n {item.url ? <LinkItem item={item as never}>{item.text}</LinkItem> : item.text}\n <ChevronDown className=\"size-3\" />\n </PopoverTrigger>\n <PopoverContent\n className=\"flex flex-col p-1 text-fd-muted-foreground text-start\"\n onPointerEnter={onPointerEnter}\n onPointerLeave={onPointerLeave}\n >\n {item.items.map((child, i) => {\n if (child.type === 'custom') return <Fragment key={i}>{child.children}</Fragment>;\n\n return (\n <LinkItem\n key={i}\n item={child}\n className=\"inline-flex items-center gap-2 rounded-md p-2 transition-colors hover:bg-fd-accent hover:text-fd-accent-foreground data-[active=true]:text-fd-primary [&_svg]:size-4\"\n onClick={() => {\n if (isTouchDevice()) setOpen(false);\n }}\n >\n {child.icon}\n {child.text}\n </LinkItem>\n );\n })}\n </PopoverContent>\n </Popover>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","names":[],"sources":["../../../src/layouts/notebook/client.tsx"],"sourcesContent":["'use client';\nimport { cn } from '@/utils/cn';\nimport {\n type ComponentProps,\n createContext,\n Fragment,\n type HTMLAttributes,\n type PointerEvent,\n type ReactNode,\n use,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useSidebar } from '@/components/sidebar/base';\nimport { ChevronDown } from 'lucide-react';\nimport Link from 'fumadocs-core/link';\nimport { usePathname } from 'fumadocs-core/framework';\nimport { isTabActive, type SidebarTabWithProps } from '@/components/sidebar/tabs/dropdown';\nimport { useIsScrollTop } from '@/utils/use-is-scroll-top';\nimport { LinkItem, type LinkItemType, type MenuItemType } from '@/utils/link-item';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\n\nexport const LayoutContext = createContext<\n | (LayoutInfo & {\n isNavTransparent: boolean;\n })\n | null\n>(null);\n\nexport interface LayoutInfo {\n tabMode: 'sidebar' | 'navbar';\n navMode: 'top' | 'auto';\n}\n\nexport function LayoutContextProvider({\n navTransparentMode = 'none',\n navMode,\n tabMode,\n children,\n}: LayoutInfo & {\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 navMode,\n tabMode,\n }),\n [isNavTransparent, navMode, tabMode],\n )}\n >\n {children}\n </LayoutContext>\n );\n}\n\nexport function LayoutHeader(props: ComponentProps<'header'>) {\n const { open } = useSidebar();\n const { isNavTransparent } = use(LayoutContext)!;\n\n return (\n <header data-transparent={isNavTransparent && !open} {...props}>\n {props.children}\n </header>\n );\n}\n\nexport function LayoutBody({ className, style, children, ...props }: ComponentProps<'div'>) {\n const { navMode } = use(LayoutContext)!;\n const { collapsed } = useSidebar();\n const pageCol =\n 'calc(var(--fd-layout-width,97rem) - var(--fd-sidebar-col) - var(--fd-toc-width))';\n\n return (\n <div\n id=\"nd-notebook-layout\"\n className={cn(\n 'grid overflow-x-clip min-h-(--fd-docs-height) transition-[grid-template-columns] 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 style={\n {\n gridTemplate:\n navMode === 'top'\n ? `\". header header header .\"\n \"sidebar sidebar toc-popover toc-popover .\"\n \"sidebar sidebar main toc .\" 1fr / minmax(min-content, 1fr) var(--fd-sidebar-col) minmax(0, ${pageCol}) var(--fd-toc-width) minmax(min-content, 1fr)`\n : `\"sidebar sidebar header header .\"\n \"sidebar sidebar toc-popover toc-popover .\"\n \"sidebar sidebar main toc .\" 1fr / minmax(min-content, 1fr) var(--fd-sidebar-col) minmax(0, ${pageCol}) 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 LayoutHeaderTabs({\n options,\n className,\n ...props\n}: ComponentProps<'div'> & {\n options: SidebarTabWithProps[];\n}) {\n const pathname = usePathname();\n const selectedIdx = useMemo(() => {\n return options.findLastIndex((option) => isTabActive(option, pathname));\n }, [options, pathname]);\n\n return (\n <div className={cn('flex flex-row items-end gap-6', className)} {...props}>\n {options.map((option, i) => {\n const { title, url, unlisted, props: { className, ...rest } = {} } = option;\n const isSelected = selectedIdx === i;\n\n return (\n <Link\n key={i}\n href={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 unlisted && !isSelected && 'hidden',\n isSelected && 'border-fd-primary text-fd-primary',\n className,\n )}\n {...rest}\n >\n {title}\n </Link>\n );\n })}\n </div>\n );\n}\n\nexport function NavbarLinkItem({\n item,\n className,\n ...props\n}: { item: LinkItemType } & HTMLAttributes<HTMLElement>) {\n if (item.type === 'custom') return item.children;\n\n if (item.type === 'menu') {\n return <NavbarLinkItemMenu item={item} className={className} {...props} />;\n }\n\n return (\n <LinkItem\n item={item}\n className={cn(\n 'text-sm text-fd-muted-foreground transition-colors hover:text-fd-accent-foreground data-[active=true]:text-fd-primary',\n className,\n )}\n {...props}\n >\n {item.text}\n </LinkItem>\n );\n}\n\nfunction NavbarLinkItemMenu({\n item,\n hoverDelay = 50,\n className,\n ...props\n}: { item: MenuItemType; hoverDelay?: number } & HTMLAttributes<HTMLElement>) {\n const [open, setOpen] = useState(false);\n const timeoutRef = useRef<number>(null);\n const freezeUntil = useRef<number>(null);\n\n const delaySetOpen = (value: boolean) => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n\n timeoutRef.current = window.setTimeout(() => {\n setOpen(value);\n freezeUntil.current = Date.now() + 300;\n }, hoverDelay);\n };\n const onPointerEnter = (e: PointerEvent) => {\n if (e.pointerType === 'touch') return;\n delaySetOpen(true);\n };\n const onPointerLeave = (e: PointerEvent) => {\n if (e.pointerType === 'touch') return;\n delaySetOpen(false);\n };\n function isTouchDevice() {\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n }\n\n return (\n <Popover\n open={open}\n onOpenChange={(value) => {\n if (freezeUntil.current === null || Date.now() >= freezeUntil.current) setOpen(value);\n }}\n >\n <PopoverTrigger\n className={cn(\n 'inline-flex items-center gap-1.5 p-1 text-sm text-fd-muted-foreground transition-colors has-data-[active=true]:text-fd-primary data-[state=open]:text-fd-accent-foreground focus-visible:outline-none',\n className,\n )}\n onPointerEnter={onPointerEnter}\n onPointerLeave={onPointerLeave}\n {...props}\n >\n {item.url ? <LinkItem item={item as never}>{item.text}</LinkItem> : item.text}\n <ChevronDown className=\"size-3\" />\n </PopoverTrigger>\n <PopoverContent\n className=\"flex flex-col p-1 text-fd-muted-foreground text-start\"\n onPointerEnter={onPointerEnter}\n onPointerLeave={onPointerLeave}\n >\n {item.items.map((child, i) => {\n if (child.type === 'custom') return <Fragment key={i}>{child.children}</Fragment>;\n\n return (\n <LinkItem\n key={i}\n item={child}\n className=\"inline-flex items-center gap-2 rounded-md p-2 transition-colors hover:bg-fd-accent hover:text-fd-accent-foreground data-[active=true]:text-fd-primary [&_svg]:size-4\"\n onClick={() => {\n if (isTouchDevice()) setOpen(false);\n }}\n >\n {child.icon}\n {child.text}\n </LinkItem>\n );\n })}\n </PopoverContent>\n </Popover>\n );\n}\n"],"mappings":"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"}
|
|
@@ -13,7 +13,6 @@ import { Sidebar as Sidebar$1, SidebarCollapseTrigger, SidebarContent, SidebarDr
|
|
|
13
13
|
import { useMemo } from "react";
|
|
14
14
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
15
15
|
import { Languages, Sidebar, X } from "lucide-react";
|
|
16
|
-
|
|
17
16
|
//#region src/layouts/notebook/index.tsx
|
|
18
17
|
function DocsLayout(props) {
|
|
19
18
|
const { tabMode = "sidebar", nav = {}, sidebar: { tabs: tabOptions, defaultOpenLevel, prefetch, ...sidebarProps } = {}, i18n = false, themeSwitch = {}, tree } = props;
|
|
@@ -212,7 +211,7 @@ function DocsNavbar({ links, tabs, tabMode = "sidebar", sidebar: { collapsible:
|
|
|
212
211
|
})]
|
|
213
212
|
});
|
|
214
213
|
}
|
|
215
|
-
|
|
216
214
|
//#endregion
|
|
217
215
|
export { DocsLayout };
|
|
216
|
+
|
|
218
217
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["SidebarIcon","Sidebar"],"sources":["../../../src/layouts/notebook/index.tsx"],"sourcesContent":["import { type ComponentProps, type FC, type HTMLAttributes, type ReactNode, useMemo } from 'react';\nimport { type BaseLayoutProps, renderTitleNav, useLinkItems } from '@/layouts/shared';\nimport {\n Sidebar,\n SidebarCollapseTrigger,\n SidebarContent,\n SidebarDrawer,\n SidebarLinkItem,\n SidebarPageTree,\n SidebarTrigger,\n SidebarViewport,\n} from './sidebar';\nimport { TreeContextProvider } from '@/contexts/tree';\nimport { cn } from '@/utils/cn';\nimport { buttonVariants } from '@/components/ui/button';\nimport { Languages, Sidebar as SidebarIcon, X } from 'lucide-react';\nimport { LanguageToggle } from '@/layouts/shared/language-toggle';\nimport { ThemeToggle } from '@/layouts/shared/theme-toggle';\nimport type * as PageTree from 'fumadocs-core/page-tree';\nimport {\n LayoutBody,\n LayoutContextProvider,\n LayoutHeader,\n LayoutHeaderTabs,\n NavbarLinkItem,\n} from '@/layouts/notebook/client';\nimport { LargeSearchToggle, SearchToggle } from '@/layouts/shared/search-toggle';\nimport { LinkItem, type LinkItemType } from '@/utils/link-item';\nimport type { SidebarPageTreeComponents } from '@/components/sidebar/page-tree';\nimport { getSidebarTabs, type GetSidebarTabsOptions } from '@/components/sidebar/tabs';\nimport { SidebarTabsDropdown, type SidebarTabWithProps } from '@/components/sidebar/tabs/dropdown';\n\nexport interface DocsLayoutProps extends BaseLayoutProps {\n tree: PageTree.Root;\n tabMode?: 'sidebar' | 'navbar';\n\n nav?: BaseLayoutProps['nav'] & {\n mode?: 'top' | 'auto';\n };\n\n sidebar?: SidebarOptions;\n\n containerProps?: HTMLAttributes<HTMLDivElement>;\n}\n\ninterface SidebarOptions\n extends\n ComponentProps<'aside'>,\n Pick<ComponentProps<typeof Sidebar>, 'defaultOpenLevel' | 'prefetch'> {\n components?: Partial<SidebarPageTreeComponents>;\n\n /**\n * Root Toggle options\n */\n tabs?: SidebarTabWithProps[] | GetSidebarTabsOptions | false;\n\n banner?: ReactNode | FC<ComponentProps<'div'>>;\n footer?: ReactNode | FC<ComponentProps<'div'>>;\n\n /**\n * Support collapsing the sidebar on desktop mode\n *\n * @defaultValue true\n */\n collapsible?: boolean;\n}\n\nexport function DocsLayout(props: DocsLayoutProps) {\n const {\n tabMode = 'sidebar',\n nav = {},\n sidebar: { tabs: tabOptions, defaultOpenLevel, prefetch, ...sidebarProps } = {},\n i18n = false,\n themeSwitch = {},\n tree,\n } = props;\n\n const navMode = nav.mode ?? 'auto';\n const { menuItems, navItems } = useLinkItems(props);\n const tabs = useMemo(() => {\n if (Array.isArray(tabOptions)) {\n return tabOptions;\n }\n\n if (typeof tabOptions === 'object') {\n return getSidebarTabs(tree, tabOptions);\n }\n\n if (tabOptions !== false) {\n return getSidebarTabs(tree);\n }\n\n return [];\n }, [tabOptions, tree]);\n\n function sidebar() {\n const { banner, footer, components, collapsible = true, ...rest } = sidebarProps;\n\n const iconLinks = menuItems.filter((item) => item.type === 'icon');\n const Header =\n typeof banner === 'function'\n ? banner\n : ({ className, ...props }: ComponentProps<'div'>) => (\n <div className={cn('flex flex-col gap-3 p-4 pb-2 empty:hidden', className)} {...props}>\n {props.children}\n {banner}\n </div>\n );\n const Footer =\n typeof footer === 'function'\n ? footer\n : ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n className={cn(\n 'hidden flex-row text-fd-muted-foreground items-center border-t p-4 pt-2',\n iconLinks.length > 0 && 'max-lg:flex',\n className,\n )}\n {...props}\n >\n {props.children}\n {footer}\n </div>\n );\n const viewport = (\n <SidebarViewport>\n {menuItems\n .filter((item) => item.type !== 'icon')\n .map((item, i, arr) => (\n <SidebarLinkItem\n key={i}\n item={item}\n className={cn('lg:hidden', i === arr.length - 1 && 'mb-4')}\n />\n ))}\n\n <SidebarPageTree {...components} />\n </SidebarViewport>\n );\n\n return (\n <>\n <SidebarContent {...rest}>\n <Header>\n {navMode === 'auto' && (\n <div className=\"flex justify-between\">\n {renderTitleNav(nav, {\n className: 'inline-flex items-center gap-2.5 font-medium',\n })}\n {collapsible && (\n <SidebarCollapseTrigger\n className={cn(\n buttonVariants({\n color: 'ghost',\n size: 'icon-sm',\n className: 'mt-px mb-auto text-fd-muted-foreground',\n }),\n )}\n >\n <SidebarIcon />\n </SidebarCollapseTrigger>\n )}\n </div>\n )}\n {tabs.length > 0 && (\n <SidebarTabsDropdown\n options={tabs}\n className={cn(tabMode === 'navbar' && 'lg:hidden')}\n />\n )}\n </Header>\n {viewport}\n <Footer>\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: 'lg:hidden',\n }),\n )}\n aria-label={item.label}\n >\n {item.icon}\n </LinkItem>\n ))}\n </Footer>\n </SidebarContent>\n <SidebarDrawer {...rest}>\n <Header>\n <SidebarTrigger\n className={cn(\n buttonVariants({\n size: 'icon-sm',\n color: 'ghost',\n className: 'ms-auto text-fd-muted-foreground',\n }),\n )}\n >\n <X />\n </SidebarTrigger>\n {tabs.length > 0 && <SidebarTabsDropdown options={tabs} />}\n </Header>\n {viewport}\n <Footer\n className={cn(\n 'hidden flex-row items-center justify-end',\n (i18n || themeSwitch.enabled !== false) && 'flex',\n iconLinks.length > 0 && 'max-lg:flex',\n )}\n >\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 }),\n 'text-fd-muted-foreground lg:hidden',\n i === iconLinks.length - 1 && 'me-auto',\n )}\n aria-label={item.label}\n >\n {item.icon}\n </LinkItem>\n ))}\n {i18n && (\n <LanguageToggle>\n <Languages className=\"size-4.5 text-fd-muted-foreground\" />\n </LanguageToggle>\n )}\n {themeSwitch.enabled !== false &&\n (themeSwitch.component ?? (\n <ThemeToggle mode={themeSwitch.mode ?? 'light-dark-system'} />\n ))}\n </Footer>\n </SidebarDrawer>\n </>\n );\n }\n\n return (\n <TreeContextProvider tree={tree}>\n <LayoutContextProvider\n navMode={nav.mode ?? 'auto'}\n tabMode={tabMode}\n navTransparentMode={nav.transparentMode}\n >\n <Sidebar defaultOpenLevel={defaultOpenLevel} prefetch={prefetch}>\n <LayoutBody {...props.containerProps}>\n {sidebar()}\n <DocsNavbar {...props} links={navItems} tabs={tabs} />\n {props.children}\n </LayoutBody>\n </Sidebar>\n </LayoutContextProvider>\n </TreeContextProvider>\n );\n}\n\nfunction DocsNavbar({\n links,\n tabs,\n tabMode = 'sidebar',\n sidebar: { collapsible: sidebarCollapsible = true } = {},\n searchToggle = {},\n themeSwitch = {},\n nav = {},\n i18n,\n}: DocsLayoutProps & {\n links: LinkItemType[];\n tabs: SidebarTabWithProps[];\n}) {\n const navMode = nav.mode ?? 'auto';\n const showLayoutTabs = tabMode === 'navbar' && tabs.length > 0;\n\n return (\n <LayoutHeader\n id=\"nd-subnav\"\n className={cn(\n 'sticky [grid-area:header] flex flex-col top-(--fd-docs-row-1) z-10 backdrop-blur-sm transition-colors data-[transparent=false]:bg-fd-background/80 layout:[--fd-header-height:--spacing(14)]',\n showLayoutTabs && 'lg:layout:[--fd-header-height:--spacing(24)]',\n )}\n >\n <div data-header-body=\"\" className=\"flex border-b px-4 gap-2 h-14 md:px-6\">\n <div\n className={cn(\n 'items-center',\n navMode === 'top' && 'flex flex-1',\n navMode === 'auto' && 'hidden has-data-[collapsed=true]:md:flex max-md:flex',\n )}\n >\n {sidebarCollapsible && navMode === 'auto' && (\n <SidebarCollapseTrigger\n className={cn(\n buttonVariants({\n color: 'ghost',\n size: 'icon-sm',\n }),\n 'text-fd-muted-foreground data-[collapsed=false]:hidden max-md:hidden',\n )}\n >\n <SidebarIcon />\n </SidebarCollapseTrigger>\n )}\n {renderTitleNav(nav, {\n className: cn(\n 'inline-flex items-center gap-2.5 font-semibold',\n navMode === 'auto' && 'md:hidden',\n ),\n })}\n {nav.children}\n </div>\n {searchToggle.enabled !== false &&\n (searchToggle.components?.lg ? (\n <div\n className={cn(\n 'w-full my-auto max-md:hidden',\n navMode === 'top' ? 'rounded-xl max-w-sm' : 'max-w-[240px]',\n )}\n >\n {searchToggle.components.lg}\n </div>\n ) : (\n <LargeSearchToggle\n hideIfDisabled\n className={cn(\n 'w-full my-auto max-md:hidden',\n navMode === 'top' ? 'rounded-xl max-w-sm ps-2.5' : 'max-w-[240px]',\n )}\n />\n ))}\n <div className=\"flex flex-1 items-center justify-end md:gap-2\">\n <div className=\"flex items-center gap-6 empty:hidden max-lg:hidden\">\n {links\n .filter((item) => item.type !== 'icon')\n .map((item, i) => (\n <NavbarLinkItem key={i} item={item} />\n ))}\n </div>\n {links\n .filter((item) => item.type === 'icon')\n .map((item, i) => (\n <LinkItem\n key={i}\n item={item}\n className={cn(\n buttonVariants({ size: 'icon-sm', color: 'ghost' }),\n 'text-fd-muted-foreground max-lg:hidden',\n )}\n aria-label={item.label}\n >\n {item.icon}\n </LinkItem>\n ))}\n\n <div className=\"flex items-center md:hidden\">\n {searchToggle.enabled !== false &&\n (searchToggle.components?.sm ?? <SearchToggle hideIfDisabled className=\"p-2\" />)}\n <SidebarTrigger\n className={cn(\n buttonVariants({\n color: 'ghost',\n size: 'icon-sm',\n className: 'p-2 -me-1.5',\n }),\n )}\n >\n <SidebarIcon />\n </SidebarTrigger>\n </div>\n\n <div className=\"flex items-center gap-2 max-md:hidden\">\n {i18n && (\n <LanguageToggle>\n <Languages className=\"size-4.5 text-fd-muted-foreground\" />\n </LanguageToggle>\n )}\n {themeSwitch.enabled !== false &&\n (themeSwitch.component ?? (\n <ThemeToggle mode={themeSwitch.mode ?? 'light-dark-system'} />\n ))}\n {sidebarCollapsible && navMode === 'top' && (\n <SidebarCollapseTrigger\n className={cn(\n buttonVariants({\n color: 'secondary',\n size: 'icon-sm',\n }),\n 'text-fd-muted-foreground rounded-full -me-1.5',\n )}\n >\n <SidebarIcon />\n </SidebarCollapseTrigger>\n )}\n </div>\n </div>\n </div>\n {showLayoutTabs && (\n <LayoutHeaderTabs\n data-header-tabs=\"\"\n className=\"overflow-x-auto border-b px-6 h-10 max-lg:hidden\"\n options={tabs}\n />\n )}\n </LayoutHeader>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["SidebarIcon","Sidebar"],"sources":["../../../src/layouts/notebook/index.tsx"],"sourcesContent":["import { type ComponentProps, type FC, type HTMLAttributes, type ReactNode, useMemo } from 'react';\nimport { type BaseLayoutProps, renderTitleNav, useLinkItems } from '@/layouts/shared';\nimport {\n Sidebar,\n SidebarCollapseTrigger,\n SidebarContent,\n SidebarDrawer,\n SidebarLinkItem,\n SidebarPageTree,\n SidebarTrigger,\n SidebarViewport,\n} from './sidebar';\nimport { TreeContextProvider } from '@/contexts/tree';\nimport { cn } from '@/utils/cn';\nimport { buttonVariants } from '@/components/ui/button';\nimport { Languages, Sidebar as SidebarIcon, X } from 'lucide-react';\nimport { LanguageToggle } from '@/layouts/shared/language-toggle';\nimport { ThemeToggle } from '@/layouts/shared/theme-toggle';\nimport type * as PageTree from 'fumadocs-core/page-tree';\nimport {\n LayoutBody,\n LayoutContextProvider,\n LayoutHeader,\n LayoutHeaderTabs,\n NavbarLinkItem,\n} from '@/layouts/notebook/client';\nimport { LargeSearchToggle, SearchToggle } from '@/layouts/shared/search-toggle';\nimport { LinkItem, type LinkItemType } from '@/utils/link-item';\nimport type { SidebarPageTreeComponents } from '@/components/sidebar/page-tree';\nimport { getSidebarTabs, type GetSidebarTabsOptions } from '@/components/sidebar/tabs';\nimport { SidebarTabsDropdown, type SidebarTabWithProps } from '@/components/sidebar/tabs/dropdown';\n\nexport interface DocsLayoutProps extends BaseLayoutProps {\n tree: PageTree.Root;\n tabMode?: 'sidebar' | 'navbar';\n\n nav?: BaseLayoutProps['nav'] & {\n mode?: 'top' | 'auto';\n };\n\n sidebar?: SidebarOptions;\n\n containerProps?: HTMLAttributes<HTMLDivElement>;\n}\n\ninterface SidebarOptions\n extends\n ComponentProps<'aside'>,\n Pick<ComponentProps<typeof Sidebar>, 'defaultOpenLevel' | 'prefetch'> {\n components?: Partial<SidebarPageTreeComponents>;\n\n /**\n * Root Toggle options\n */\n tabs?: SidebarTabWithProps[] | GetSidebarTabsOptions | false;\n\n banner?: ReactNode | FC<ComponentProps<'div'>>;\n footer?: ReactNode | FC<ComponentProps<'div'>>;\n\n /**\n * Support collapsing the sidebar on desktop mode\n *\n * @defaultValue true\n */\n collapsible?: boolean;\n}\n\nexport function DocsLayout(props: DocsLayoutProps) {\n const {\n tabMode = 'sidebar',\n nav = {},\n sidebar: { tabs: tabOptions, defaultOpenLevel, prefetch, ...sidebarProps } = {},\n i18n = false,\n themeSwitch = {},\n tree,\n } = props;\n\n const navMode = nav.mode ?? 'auto';\n const { menuItems, navItems } = useLinkItems(props);\n const tabs = useMemo(() => {\n if (Array.isArray(tabOptions)) {\n return tabOptions;\n }\n\n if (typeof tabOptions === 'object') {\n return getSidebarTabs(tree, tabOptions);\n }\n\n if (tabOptions !== false) {\n return getSidebarTabs(tree);\n }\n\n return [];\n }, [tabOptions, tree]);\n\n function sidebar() {\n const { banner, footer, components, collapsible = true, ...rest } = sidebarProps;\n\n const iconLinks = menuItems.filter((item) => item.type === 'icon');\n const Header =\n typeof banner === 'function'\n ? banner\n : ({ className, ...props }: ComponentProps<'div'>) => (\n <div className={cn('flex flex-col gap-3 p-4 pb-2 empty:hidden', className)} {...props}>\n {props.children}\n {banner}\n </div>\n );\n const Footer =\n typeof footer === 'function'\n ? footer\n : ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n className={cn(\n 'hidden flex-row text-fd-muted-foreground items-center border-t p-4 pt-2',\n iconLinks.length > 0 && 'max-lg:flex',\n className,\n )}\n {...props}\n >\n {props.children}\n {footer}\n </div>\n );\n const viewport = (\n <SidebarViewport>\n {menuItems\n .filter((item) => item.type !== 'icon')\n .map((item, i, arr) => (\n <SidebarLinkItem\n key={i}\n item={item}\n className={cn('lg:hidden', i === arr.length - 1 && 'mb-4')}\n />\n ))}\n\n <SidebarPageTree {...components} />\n </SidebarViewport>\n );\n\n return (\n <>\n <SidebarContent {...rest}>\n <Header>\n {navMode === 'auto' && (\n <div className=\"flex justify-between\">\n {renderTitleNav(nav, {\n className: 'inline-flex items-center gap-2.5 font-medium',\n })}\n {collapsible && (\n <SidebarCollapseTrigger\n className={cn(\n buttonVariants({\n color: 'ghost',\n size: 'icon-sm',\n className: 'mt-px mb-auto text-fd-muted-foreground',\n }),\n )}\n >\n <SidebarIcon />\n </SidebarCollapseTrigger>\n )}\n </div>\n )}\n {tabs.length > 0 && (\n <SidebarTabsDropdown\n options={tabs}\n className={cn(tabMode === 'navbar' && 'lg:hidden')}\n />\n )}\n </Header>\n {viewport}\n <Footer>\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: 'lg:hidden',\n }),\n )}\n aria-label={item.label}\n >\n {item.icon}\n </LinkItem>\n ))}\n </Footer>\n </SidebarContent>\n <SidebarDrawer {...rest}>\n <Header>\n <SidebarTrigger\n className={cn(\n buttonVariants({\n size: 'icon-sm',\n color: 'ghost',\n className: 'ms-auto text-fd-muted-foreground',\n }),\n )}\n >\n <X />\n </SidebarTrigger>\n {tabs.length > 0 && <SidebarTabsDropdown options={tabs} />}\n </Header>\n {viewport}\n <Footer\n className={cn(\n 'hidden flex-row items-center justify-end',\n (i18n || themeSwitch.enabled !== false) && 'flex',\n iconLinks.length > 0 && 'max-lg:flex',\n )}\n >\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 }),\n 'text-fd-muted-foreground lg:hidden',\n i === iconLinks.length - 1 && 'me-auto',\n )}\n aria-label={item.label}\n >\n {item.icon}\n </LinkItem>\n ))}\n {i18n && (\n <LanguageToggle>\n <Languages className=\"size-4.5 text-fd-muted-foreground\" />\n </LanguageToggle>\n )}\n {themeSwitch.enabled !== false &&\n (themeSwitch.component ?? (\n <ThemeToggle mode={themeSwitch.mode ?? 'light-dark-system'} />\n ))}\n </Footer>\n </SidebarDrawer>\n </>\n );\n }\n\n return (\n <TreeContextProvider tree={tree}>\n <LayoutContextProvider\n navMode={nav.mode ?? 'auto'}\n tabMode={tabMode}\n navTransparentMode={nav.transparentMode}\n >\n <Sidebar defaultOpenLevel={defaultOpenLevel} prefetch={prefetch}>\n <LayoutBody {...props.containerProps}>\n {sidebar()}\n <DocsNavbar {...props} links={navItems} tabs={tabs} />\n {props.children}\n </LayoutBody>\n </Sidebar>\n </LayoutContextProvider>\n </TreeContextProvider>\n );\n}\n\nfunction DocsNavbar({\n links,\n tabs,\n tabMode = 'sidebar',\n sidebar: { collapsible: sidebarCollapsible = true } = {},\n searchToggle = {},\n themeSwitch = {},\n nav = {},\n i18n,\n}: DocsLayoutProps & {\n links: LinkItemType[];\n tabs: SidebarTabWithProps[];\n}) {\n const navMode = nav.mode ?? 'auto';\n const showLayoutTabs = tabMode === 'navbar' && tabs.length > 0;\n\n return (\n <LayoutHeader\n id=\"nd-subnav\"\n className={cn(\n 'sticky [grid-area:header] flex flex-col top-(--fd-docs-row-1) z-10 backdrop-blur-sm transition-colors data-[transparent=false]:bg-fd-background/80 layout:[--fd-header-height:--spacing(14)]',\n showLayoutTabs && 'lg:layout:[--fd-header-height:--spacing(24)]',\n )}\n >\n <div data-header-body=\"\" className=\"flex border-b px-4 gap-2 h-14 md:px-6\">\n <div\n className={cn(\n 'items-center',\n navMode === 'top' && 'flex flex-1',\n navMode === 'auto' && 'hidden has-data-[collapsed=true]:md:flex max-md:flex',\n )}\n >\n {sidebarCollapsible && navMode === 'auto' && (\n <SidebarCollapseTrigger\n className={cn(\n buttonVariants({\n color: 'ghost',\n size: 'icon-sm',\n }),\n 'text-fd-muted-foreground data-[collapsed=false]:hidden max-md:hidden',\n )}\n >\n <SidebarIcon />\n </SidebarCollapseTrigger>\n )}\n {renderTitleNav(nav, {\n className: cn(\n 'inline-flex items-center gap-2.5 font-semibold',\n navMode === 'auto' && 'md:hidden',\n ),\n })}\n {nav.children}\n </div>\n {searchToggle.enabled !== false &&\n (searchToggle.components?.lg ? (\n <div\n className={cn(\n 'w-full my-auto max-md:hidden',\n navMode === 'top' ? 'rounded-xl max-w-sm' : 'max-w-[240px]',\n )}\n >\n {searchToggle.components.lg}\n </div>\n ) : (\n <LargeSearchToggle\n hideIfDisabled\n className={cn(\n 'w-full my-auto max-md:hidden',\n navMode === 'top' ? 'rounded-xl max-w-sm ps-2.5' : 'max-w-[240px]',\n )}\n />\n ))}\n <div className=\"flex flex-1 items-center justify-end md:gap-2\">\n <div className=\"flex items-center gap-6 empty:hidden max-lg:hidden\">\n {links\n .filter((item) => item.type !== 'icon')\n .map((item, i) => (\n <NavbarLinkItem key={i} item={item} />\n ))}\n </div>\n {links\n .filter((item) => item.type === 'icon')\n .map((item, i) => (\n <LinkItem\n key={i}\n item={item}\n className={cn(\n buttonVariants({ size: 'icon-sm', color: 'ghost' }),\n 'text-fd-muted-foreground max-lg:hidden',\n )}\n aria-label={item.label}\n >\n {item.icon}\n </LinkItem>\n ))}\n\n <div className=\"flex items-center md:hidden\">\n {searchToggle.enabled !== false &&\n (searchToggle.components?.sm ?? <SearchToggle hideIfDisabled className=\"p-2\" />)}\n <SidebarTrigger\n className={cn(\n buttonVariants({\n color: 'ghost',\n size: 'icon-sm',\n className: 'p-2 -me-1.5',\n }),\n )}\n >\n <SidebarIcon />\n </SidebarTrigger>\n </div>\n\n <div className=\"flex items-center gap-2 max-md:hidden\">\n {i18n && (\n <LanguageToggle>\n <Languages className=\"size-4.5 text-fd-muted-foreground\" />\n </LanguageToggle>\n )}\n {themeSwitch.enabled !== false &&\n (themeSwitch.component ?? (\n <ThemeToggle mode={themeSwitch.mode ?? 'light-dark-system'} />\n ))}\n {sidebarCollapsible && navMode === 'top' && (\n <SidebarCollapseTrigger\n className={cn(\n buttonVariants({\n color: 'secondary',\n size: 'icon-sm',\n }),\n 'text-fd-muted-foreground rounded-full -me-1.5',\n )}\n >\n <SidebarIcon />\n </SidebarCollapseTrigger>\n )}\n </div>\n </div>\n </div>\n {showLayoutTabs && (\n <LayoutHeaderTabs\n data-header-tabs=\"\"\n className=\"overflow-x-auto border-b px-6 h-10 max-lg:hidden\"\n options={tabs}\n />\n )}\n </LayoutHeader>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use client";
|
|
3
2
|
import { useI18n } from "../../../contexts/i18n.js";
|
|
4
3
|
import { cn } from "../../../utils/cn.js";
|
|
5
4
|
import { useTreeContext, useTreePath } from "../../../contexts/tree.js";
|
|
@@ -15,7 +14,6 @@ import Link from "fumadocs-core/link";
|
|
|
15
14
|
import { ChevronDown, ChevronLeft, ChevronRight } from "lucide-react";
|
|
16
15
|
import { getBreadcrumbItemsFromPath } from "fumadocs-core/breadcrumb";
|
|
17
16
|
import { useActiveAnchor } from "fumadocs-core/toc";
|
|
18
|
-
|
|
19
17
|
//#region src/layouts/notebook/page/client.tsx
|
|
20
18
|
const TocPopoverContext = createContext(null);
|
|
21
19
|
function PageTOCPopover({ className, children, ...rest }) {
|
|
@@ -221,7 +219,7 @@ function PageBreadcrumb({ includeRoot, includeSeparator, includePage, ...props }
|
|
|
221
219
|
})
|
|
222
220
|
});
|
|
223
221
|
}
|
|
224
|
-
|
|
225
222
|
//#endregion
|
|
226
223
|
export { PageBreadcrumb, PageFooter, PageLastUpdate, PageTOCPopover, PageTOCPopoverContent, PageTOCPopoverTrigger };
|
|
224
|
+
|
|
227
225
|
//# sourceMappingURL=client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","names":[],"sources":["../../../../src/layouts/notebook/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 '@/utils/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 '@/utils/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 '@/utils/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-all',\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-all',\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));\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
|
+
{"version":3,"file":"client.js","names":[],"sources":["../../../../src/layouts/notebook/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 '@/utils/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 '@/utils/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 '@/utils/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-all',\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-all',\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));\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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"}
|
|
@@ -8,7 +8,6 @@ import { TOCItems as TOCItems$1 } from "../../../components/toc/clerk.js";
|
|
|
8
8
|
import { PageBreadcrumb, PageFooter, PageLastUpdate, PageTOCPopover, PageTOCPopoverContent, PageTOCPopoverTrigger } from "./client.js";
|
|
9
9
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
10
10
|
import { Edit, Text } from "lucide-react";
|
|
11
|
-
|
|
12
11
|
//#region src/layouts/notebook/page/index.tsx
|
|
13
12
|
var page_exports = /* @__PURE__ */ __exportAll({
|
|
14
13
|
DocsBody: () => DocsBody,
|
|
@@ -98,7 +97,7 @@ function DocsTitle({ children, className, ...props }) {
|
|
|
98
97
|
children
|
|
99
98
|
});
|
|
100
99
|
}
|
|
101
|
-
|
|
102
100
|
//#endregion
|
|
103
101
|
export { DocsBody, DocsDescription, DocsPage, DocsTitle, EditOnGitHub, PageBreadcrumb, PageLastUpdate, page_exports };
|
|
102
|
+
|
|
104
103
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["TocClerk.TOCItems","TocDefault.TOCItems"],"sources":["../../../../src/layouts/notebook/page/index.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\nimport { cn } from '@/utils/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 [grid-area:main] px-4 py-6 gap-4 md:px-6 md:pt-8 xl:px-8 xl:pt-14 *:max-w-[900px]',\n full && '*:max-w-[1285px]',\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-3) [grid-area:toc] h-[calc(var(--fd-docs-height)-var(--fd-docs-row-3))] flex flex-col w-(--fd-toc-width) pt-12 pe-4 pb-2 xl:layout:[--fd-toc-width:268px] 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":"
|
|
1
|
+
{"version":3,"file":"index.js","names":["TocClerk.TOCItems","TocDefault.TOCItems"],"sources":["../../../../src/layouts/notebook/page/index.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\nimport { cn } from '@/utils/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 [grid-area:main] px-4 py-6 gap-4 md:px-6 md:pt-8 xl:px-8 xl:pt-14 *:max-w-[900px]',\n full && '*:max-w-[1285px]',\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-3) [grid-area:toc] h-[calc(var(--fd-docs-height)-var(--fd-docs-row-3))] flex flex-col w-(--fd-toc-width) pt-12 pe-4 pb-2 xl:layout:[--fd-toc-width:268px] 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":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use client";
|
|
3
2
|
import { cn } from "../../utils/cn.js";
|
|
4
3
|
import { mergeRefs } from "../../utils/merge-refs.js";
|
|
5
4
|
import { SidebarContent as SidebarContent$1, SidebarDrawerContent, SidebarDrawerOverlay, SidebarFolderContent as SidebarFolderContent$1, SidebarFolderLink as SidebarFolderLink$1, SidebarFolderTrigger as SidebarFolderTrigger$1, SidebarItem as SidebarItem$1, SidebarSeparator as SidebarSeparator$1, base_exports, useFolder, useFolderDepth } from "../../components/sidebar/base.js";
|
|
@@ -9,7 +8,6 @@ import { createPageTreeRenderer } from "../../components/sidebar/page-tree.js";
|
|
|
9
8
|
import { use, useRef } from "react";
|
|
10
9
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
11
10
|
import { cva } from "class-variance-authority";
|
|
12
|
-
|
|
13
11
|
//#region src/layouts/notebook/sidebar.tsx
|
|
14
12
|
const itemVariants = cva("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", { variants: {
|
|
15
13
|
variant: {
|
|
@@ -127,7 +125,7 @@ const SidebarLinkItem = createLinkItemRenderer({
|
|
|
127
125
|
SidebarFolderTrigger,
|
|
128
126
|
SidebarItem
|
|
129
127
|
});
|
|
130
|
-
|
|
131
128
|
//#endregion
|
|
132
129
|
export { Sidebar, SidebarCollapseTrigger, SidebarContent, SidebarDrawer, SidebarFolder, SidebarFolderContent, SidebarFolderLink, SidebarFolderTrigger, SidebarItem, SidebarLinkItem, SidebarPageTree, SidebarSeparator, SidebarTrigger, SidebarViewport };
|
|
130
|
+
|
|
133
131
|
//# sourceMappingURL=sidebar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar.js","names":["Base","Base.SidebarContent","Base.SidebarDrawerOverlay","Base.SidebarDrawerContent","Base.useFolderDepth","Base.SidebarSeparator","Base.SidebarItem","Base.useFolder","Base.SidebarFolderTrigger","Base.SidebarFolderLink","Base.SidebarFolderContent"],"sources":["../../../src/layouts/notebook/sidebar.tsx"],"sourcesContent":["'use client';\nimport * as Base from '@/components/sidebar/base';\nimport { cn } from '@/utils/cn';\nimport { type ComponentProps, use, useRef } from 'react';\nimport { cva } from 'class-variance-authority';\nimport { LayoutContext } from './client';\nimport { createPageTreeRenderer } from '@/components/sidebar/page-tree';\nimport { createLinkItemRenderer } from '@/components/sidebar/link-item';\nimport { mergeRefs } from '@/utils/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 const {\n SidebarProvider: Sidebar,\n SidebarFolder,\n SidebarCollapseTrigger,\n SidebarViewport,\n SidebarTrigger,\n} = Base;\n\nexport function SidebarContent({\n ref: refProp,\n className,\n children,\n ...props\n}: ComponentProps<'aside'>) {\n const { navMode } = use(LayoutContext)!;\n const ref = useRef<HTMLElement>(null);\n\n return (\n <Base.SidebarContent>\n {({ collapsed, hovered, ref: asideRef, ...rest }) => (\n <div\n data-sidebar-placeholder=\"\"\n className={cn(\n 'sticky z-20 [grid-area:sidebar] pointer-events-none *:pointer-events-auto md:layout:[--fd-sidebar-width:268px] max-md:hidden',\n navMode === 'auto'\n ? 'top-(--fd-docs-row-1) h-[calc(var(--fd-docs-height)-var(--fd-docs-row-1))]'\n : 'top-(--fd-docs-row-2) h-[calc(var(--fd-docs-height)-var(--fd-docs-row-2))]',\n )}\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 text-sm duration-250 *:w-(--fd-sidebar-width)',\n navMode === 'auto' && 'bg-fd-card border-e',\n collapsed && [\n 'inset-y-2 rounded-xl bg-fd-card 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 )}\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={(s) =>\n cn(\n itemVariants({ variant: collapsible ? 'button' : null }),\n 'w-full',\n typeof className === 'function' ? className(s) : className,\n )\n }\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={(s) =>\n 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 typeof className === 'function' ? className(s) : className,\n )\n }\n {...props}\n >\n {children}\n </Base.SidebarFolderContent>\n );\n}\nexport const SidebarPageTree = createPageTreeRenderer({\n SidebarFolder,\n SidebarFolderContent,\n SidebarFolderLink,\n SidebarFolderTrigger,\n SidebarItem,\n SidebarSeparator,\n});\n\nexport const SidebarLinkItem = createLinkItemRenderer({\n SidebarFolder,\n SidebarFolderContent,\n SidebarFolderLink,\n SidebarFolderTrigger,\n SidebarItem,\n});\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"sidebar.js","names":["Base","Base.SidebarContent","Base.SidebarDrawerOverlay","Base.SidebarDrawerContent","Base.useFolderDepth","Base.SidebarSeparator","Base.SidebarItem","Base.useFolder","Base.SidebarFolderTrigger","Base.SidebarFolderLink","Base.SidebarFolderContent"],"sources":["../../../src/layouts/notebook/sidebar.tsx"],"sourcesContent":["'use client';\nimport * as Base from '@/components/sidebar/base';\nimport { cn } from '@/utils/cn';\nimport { type ComponentProps, use, useRef } from 'react';\nimport { cva } from 'class-variance-authority';\nimport { LayoutContext } from './client';\nimport { createPageTreeRenderer } from '@/components/sidebar/page-tree';\nimport { createLinkItemRenderer } from '@/components/sidebar/link-item';\nimport { mergeRefs } from '@/utils/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 const {\n SidebarProvider: Sidebar,\n SidebarFolder,\n SidebarCollapseTrigger,\n SidebarViewport,\n SidebarTrigger,\n} = Base;\n\nexport function SidebarContent({\n ref: refProp,\n className,\n children,\n ...props\n}: ComponentProps<'aside'>) {\n const { navMode } = use(LayoutContext)!;\n const ref = useRef<HTMLElement>(null);\n\n return (\n <Base.SidebarContent>\n {({ collapsed, hovered, ref: asideRef, ...rest }) => (\n <div\n data-sidebar-placeholder=\"\"\n className={cn(\n 'sticky z-20 [grid-area:sidebar] pointer-events-none *:pointer-events-auto md:layout:[--fd-sidebar-width:268px] max-md:hidden',\n navMode === 'auto'\n ? 'top-(--fd-docs-row-1) h-[calc(var(--fd-docs-height)-var(--fd-docs-row-1))]'\n : 'top-(--fd-docs-row-2) h-[calc(var(--fd-docs-height)-var(--fd-docs-row-2))]',\n )}\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 text-sm duration-250 *:w-(--fd-sidebar-width)',\n navMode === 'auto' && 'bg-fd-card border-e',\n collapsed && [\n 'inset-y-2 rounded-xl bg-fd-card 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 )}\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={(s) =>\n cn(\n itemVariants({ variant: collapsible ? 'button' : null }),\n 'w-full',\n typeof className === 'function' ? className(s) : className,\n )\n }\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={(s) =>\n 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 typeof className === 'function' ? className(s) : className,\n )\n }\n {...props}\n >\n {children}\n </Base.SidebarFolderContent>\n );\n}\nexport const SidebarPageTree = createPageTreeRenderer({\n SidebarFolder,\n SidebarFolderContent,\n SidebarFolderLink,\n SidebarFolderTrigger,\n SidebarItem,\n SidebarSeparator,\n});\n\nexport const SidebarLinkItem = createLinkItemRenderer({\n SidebarFolder,\n SidebarFolderContent,\n SidebarFolderLink,\n SidebarFolderTrigger,\n SidebarItem,\n});\n"],"mappings":"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"}
|
|
@@ -62,7 +62,7 @@ declare function resolveLinkItems({
|
|
|
62
62
|
declare function renderTitleNav({
|
|
63
63
|
title,
|
|
64
64
|
url
|
|
65
|
-
}: Partial<NavOptions>, props: ComponentProps<'a'>): string | number | bigint | boolean |
|
|
65
|
+
}: Partial<NavOptions>, props: ComponentProps<'a'>): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | react_jsx_runtime0.JSX.Element | null | undefined;
|
|
66
66
|
declare function useLinkItems({
|
|
67
67
|
githubUrl,
|
|
68
68
|
links
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/layouts/shared/index.tsx"],"mappings":";;;;;;;UAKiB,UAAA;EACf,OAAA;EACA,SAAA,EAAW,SAAA;EAEX,KAAA,GAAQ,SAAA,KAAc,KAAA,EAAO,cAAA,UAAwB,SAAA;EAJtC;;;;EAUf,GAAA;EAN6B;;;;;EAa7B,eAAA;EAEA,QAAA,GAAW,SAAA;AAAA;AAAA,UAGI,eAAA;EACf,WAAA;IACE,OAAA;IACA,SAAA,GAAY,SAAA;IACZ,IAAA;EAAA;EAGF,YAAA,GAAe,OAAA;IACb,OAAA;IACA,UAAA,EAAY,OAAA;MACV,EAAA,EAAI,SAAA;MACJ,EAAA,EAAI,SAAA;IAAA;EAAA;;;;;;EASR,IAAA,aAAiB,UAAA;EAAA;;;EAKjB,SAAA;EAEA,KAAA,GAAQ,YAAA;EAMY;;;EAFpB,GAAA,GAAM,OAAA,CAAQ,UAAA;EAEd,QAAA,GAAW,SAAA;AAAA;;;;iBAMG,gBAAA,CAAA;EACd,KAAA;EACA;AAAA,GACC,IAAA,CAAK,eAAA,2BAA0C,YAAA;AAAA,iBAoBlC,cAAA,CAAA;EACZ,KAAA;EAAO;AAAA,GAAa,OAAA,CAAQ,UAAA,GAC9B,KAAA,EAAO,cAAA,6CAAmB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/layouts/shared/index.tsx"],"mappings":";;;;;;;UAKiB,UAAA;EACf,OAAA;EACA,SAAA,EAAW,SAAA;EAEX,KAAA,GAAQ,SAAA,KAAc,KAAA,EAAO,cAAA,UAAwB,SAAA;EAJtC;;;;EAUf,GAAA;EAN6B;;;;;EAa7B,eAAA;EAEA,QAAA,GAAW,SAAA;AAAA;AAAA,UAGI,eAAA;EACf,WAAA;IACE,OAAA;IACA,SAAA,GAAY,SAAA;IACZ,IAAA;EAAA;EAGF,YAAA,GAAe,OAAA;IACb,OAAA;IACA,UAAA,EAAY,OAAA;MACV,EAAA,EAAI,SAAA;MACJ,EAAA,EAAI,SAAA;IAAA;EAAA;;;;;;EASR,IAAA,aAAiB,UAAA;EAAA;;;EAKjB,SAAA;EAEA,KAAA,GAAQ,YAAA;EAMY;;;EAFpB,GAAA,GAAM,OAAA,CAAQ,UAAA;EAEd,QAAA,GAAW,SAAA;AAAA;;;;iBAMG,gBAAA,CAAA;EACd,KAAA;EACA;AAAA,GACC,IAAA,CAAK,eAAA,2BAA0C,YAAA;AAAA,iBAoBlC,cAAA,CAAA;EACZ,KAAA;EAAO;AAAA,GAAa,OAAA,CAAQ,UAAA,GAC9B,KAAA,EAAO,cAAA,6CAAmB,QAAA,CAAA,SAAA,IAAA,OAAA,sCAAA,KAAA,CAAA,WAAA,GAAA,KAAA,CAAA,YAAA,mBAAA,KAAA,CAAA,qBAAA,SAAA,QAAA,CAAA,SAAA,wBAAA,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAUZ,YAAA,CAAA;EAAe,SAAA;EAAW;AAAA,GAAS,IAAA,CAAK,eAAA"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { useMemo } from "react";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
import Link from "fumadocs-core/link";
|
|
4
|
-
|
|
5
4
|
//#region src/layouts/shared/index.tsx
|
|
6
5
|
/**
|
|
7
6
|
* Get link items with shortcuts
|
|
@@ -60,7 +59,7 @@ function useLinkItems({ githubUrl, links }) {
|
|
|
60
59
|
};
|
|
61
60
|
}, [links, githubUrl]);
|
|
62
61
|
}
|
|
63
|
-
|
|
64
62
|
//#endregion
|
|
65
63
|
export { renderTitleNav, resolveLinkItems, useLinkItems };
|
|
64
|
+
|
|
66
65
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/layouts/shared/index.tsx"],"sourcesContent":["import { useMemo, type ComponentProps, type ReactNode } from 'react';\nimport type { I18nConfig } from 'fumadocs-core/i18n';\nimport type { LinkItemType } from '@/utils/link-item';\nimport Link from 'fumadocs-core/link';\n\nexport interface NavOptions {\n enabled: boolean;\n component: ReactNode;\n\n title?: ReactNode | ((props: ComponentProps<'a'>) => ReactNode);\n\n /**\n * Redirect url of title\n * @defaultValue '/'\n */\n url?: string;\n\n /**\n * Use transparent background\n *\n * @defaultValue none\n */\n transparentMode?: 'always' | 'top' | 'none';\n\n children?: ReactNode;\n}\n\nexport interface BaseLayoutProps {\n themeSwitch?: {\n enabled?: boolean;\n component?: ReactNode;\n mode?: 'light-dark' | 'light-dark-system';\n };\n\n searchToggle?: Partial<{\n enabled: boolean;\n components: Partial<{\n sm: ReactNode;\n lg: ReactNode;\n }>;\n }>;\n\n /**\n * I18n options\n *\n * @defaultValue false\n */\n i18n?: boolean | I18nConfig;\n\n /**\n * GitHub url\n */\n githubUrl?: string;\n\n links?: LinkItemType[];\n /**\n * Replace or disable navbar\n */\n nav?: Partial<NavOptions>;\n\n children?: ReactNode;\n}\n\n/**\n * Get link items with shortcuts\n */\nexport function resolveLinkItems({\n links = [],\n githubUrl,\n}: Pick<BaseLayoutProps, 'links' | 'githubUrl'>): LinkItemType[] {\n const result = [...links];\n\n if (githubUrl)\n result.push({\n type: 'icon',\n url: githubUrl,\n text: 'Github',\n label: 'GitHub',\n icon: (\n <svg role=\"img\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\" />\n </svg>\n ),\n external: true,\n });\n\n return result;\n}\n\nexport function renderTitleNav(\n { title, url = '/' }: Partial<NavOptions>,\n props: ComponentProps<'a'>,\n) {\n if (typeof title === 'function') return title({ href: url, ...props });\n return (\n <Link href={url} {...props}>\n {title}\n </Link>\n );\n}\n\nexport function useLinkItems({ githubUrl, links }: Pick<BaseLayoutProps, 'links' | 'githubUrl'>) {\n return useMemo(() => {\n const all = resolveLinkItems({ links, githubUrl });\n const navItems: LinkItemType[] = [];\n const menuItems: LinkItemType[] = [];\n\n for (const item of all) {\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, all };\n }, [links, githubUrl]);\n}\n\nexport type * from '@/utils/link-item';\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/layouts/shared/index.tsx"],"sourcesContent":["import { useMemo, type ComponentProps, type ReactNode } from 'react';\nimport type { I18nConfig } from 'fumadocs-core/i18n';\nimport type { LinkItemType } from '@/utils/link-item';\nimport Link from 'fumadocs-core/link';\n\nexport interface NavOptions {\n enabled: boolean;\n component: ReactNode;\n\n title?: ReactNode | ((props: ComponentProps<'a'>) => ReactNode);\n\n /**\n * Redirect url of title\n * @defaultValue '/'\n */\n url?: string;\n\n /**\n * Use transparent background\n *\n * @defaultValue none\n */\n transparentMode?: 'always' | 'top' | 'none';\n\n children?: ReactNode;\n}\n\nexport interface BaseLayoutProps {\n themeSwitch?: {\n enabled?: boolean;\n component?: ReactNode;\n mode?: 'light-dark' | 'light-dark-system';\n };\n\n searchToggle?: Partial<{\n enabled: boolean;\n components: Partial<{\n sm: ReactNode;\n lg: ReactNode;\n }>;\n }>;\n\n /**\n * I18n options\n *\n * @defaultValue false\n */\n i18n?: boolean | I18nConfig;\n\n /**\n * GitHub url\n */\n githubUrl?: string;\n\n links?: LinkItemType[];\n /**\n * Replace or disable navbar\n */\n nav?: Partial<NavOptions>;\n\n children?: ReactNode;\n}\n\n/**\n * Get link items with shortcuts\n */\nexport function resolveLinkItems({\n links = [],\n githubUrl,\n}: Pick<BaseLayoutProps, 'links' | 'githubUrl'>): LinkItemType[] {\n const result = [...links];\n\n if (githubUrl)\n result.push({\n type: 'icon',\n url: githubUrl,\n text: 'Github',\n label: 'GitHub',\n icon: (\n <svg role=\"img\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\" />\n </svg>\n ),\n external: true,\n });\n\n return result;\n}\n\nexport function renderTitleNav(\n { title, url = '/' }: Partial<NavOptions>,\n props: ComponentProps<'a'>,\n) {\n if (typeof title === 'function') return title({ href: url, ...props });\n return (\n <Link href={url} {...props}>\n {title}\n </Link>\n );\n}\n\nexport function useLinkItems({ githubUrl, links }: Pick<BaseLayoutProps, 'links' | 'githubUrl'>) {\n return useMemo(() => {\n const all = resolveLinkItems({ links, githubUrl });\n const navItems: LinkItemType[] = [];\n const menuItems: LinkItemType[] = [];\n\n for (const item of all) {\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, all };\n }, [links, githubUrl]);\n}\n\nexport type * from '@/utils/link-item';\n"],"mappings":";;;;;;;AAkEA,SAAgB,iBAAiB,EAC/B,QAAQ,EAAE,EACV,aAC+D;CAC/D,MAAM,SAAS,CAAC,GAAG,MAAM;AAEzB,KAAI,UACF,QAAO,KAAK;EACV,MAAM;EACN,KAAK;EACL,MAAM;EACN,OAAO;EACP,MACE,oBAAC,OAAD;GAAK,MAAK;GAAM,SAAQ;GAAY,MAAK;aACvC,oBAAC,QAAD,EAAM,GAAE,4sBAA6sB,CAAA;GACjtB,CAAA;EAER,UAAU;EACX,CAAC;AAEJ,QAAO;;AAGT,SAAgB,eACd,EAAE,OAAO,MAAM,OACf,OACA;AACA,KAAI,OAAO,UAAU,WAAY,QAAO,MAAM;EAAE,MAAM;EAAK,GAAG;EAAO,CAAC;AACtE,QACE,oBAAC,MAAD;EAAM,MAAM;EAAK,GAAI;YAClB;EACI,CAAA;;AAIX,SAAgB,aAAa,EAAE,WAAW,SAAuD;AAC/F,QAAO,cAAc;EACnB,MAAM,MAAM,iBAAiB;GAAE;GAAO;GAAW,CAAC;EAClD,MAAM,WAA2B,EAAE;EACnC,MAAM,YAA4B,EAAE;AAEpC,OAAK,MAAM,QAAQ,IACjB,SAAQ,KAAK,MAAM,OAAnB;GACE,KAAK;AACH,cAAU,KAAK,KAAK;AACpB;GACF,KAAK;AACH,aAAS,KAAK,KAAK;AACnB;GACF;AACE,aAAS,KAAK,KAAK;AACnB,cAAU,KAAK,KAAK;;AAI1B,SAAO;GAAE;GAAU;GAAW;GAAK;IAClC,CAAC,OAAO,UAAU,CAAC"}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use client";
|
|
3
2
|
import { useI18n } from "../../contexts/i18n.js";
|
|
4
3
|
import { cn } from "../../utils/cn.js";
|
|
5
4
|
import { buttonVariants } from "../../components/ui/button.js";
|
|
6
5
|
import { Popover, PopoverContent, PopoverTrigger } from "../../components/ui/popover.js";
|
|
7
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
-
|
|
9
7
|
//#region src/layouts/shared/language-toggle.tsx
|
|
10
8
|
function LanguageToggle(props) {
|
|
11
9
|
const context = useI18n();
|
|
@@ -41,7 +39,7 @@ function LanguageToggleText(props) {
|
|
|
41
39
|
children: text
|
|
42
40
|
});
|
|
43
41
|
}
|
|
44
|
-
|
|
45
42
|
//#endregion
|
|
46
43
|
export { LanguageToggle, LanguageToggleText };
|
|
44
|
+
|
|
47
45
|
//# sourceMappingURL=language-toggle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language-toggle.js","names":[],"sources":["../../../src/layouts/shared/language-toggle.tsx"],"sourcesContent":["'use client';\nimport type { ComponentProps } from 'react';\nimport { useI18n } from '@/contexts/i18n';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport { cn } from '@/utils/cn';\nimport { buttonVariants } from '@/components/ui/button';\n\nexport type LanguageSelectProps = ComponentProps<'button'>;\n\nexport function LanguageToggle(props: LanguageSelectProps): React.ReactElement {\n const context = useI18n();\n if (!context.locales) throw new Error('Missing `<I18nProvider />`');\n\n return (\n <Popover>\n <PopoverTrigger\n aria-label={context.text.chooseLanguage}\n {...props}\n className={cn(\n buttonVariants({\n color: 'ghost',\n className: 'gap-1.5 p-1.5',\n }),\n props.className,\n )}\n >\n {props.children}\n </PopoverTrigger>\n <PopoverContent className=\"flex flex-col overflow-x-hidden p-0\">\n <p className=\"mb-1 p-2 text-xs font-medium text-fd-muted-foreground\">\n {context.text.chooseLanguage}\n </p>\n {context.locales.map((item) => (\n <button\n key={item.locale}\n type=\"button\"\n className={cn(\n 'p-2 text-start text-sm',\n item.locale === context.locale\n ? 'bg-fd-primary/10 font-medium text-fd-primary'\n : 'hover:bg-fd-accent hover:text-fd-accent-foreground',\n )}\n onClick={() => {\n context.onChange?.(item.locale);\n }}\n >\n {item.name}\n </button>\n ))}\n </PopoverContent>\n </Popover>\n );\n}\n\nexport function LanguageToggleText(props: ComponentProps<'span'>) {\n const context = useI18n();\n const text = context.locales?.find((item) => item.locale === context.locale)?.name;\n\n return <span {...props}>{text}</span>;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"language-toggle.js","names":[],"sources":["../../../src/layouts/shared/language-toggle.tsx"],"sourcesContent":["'use client';\nimport type { ComponentProps } from 'react';\nimport { useI18n } from '@/contexts/i18n';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport { cn } from '@/utils/cn';\nimport { buttonVariants } from '@/components/ui/button';\n\nexport type LanguageSelectProps = ComponentProps<'button'>;\n\nexport function LanguageToggle(props: LanguageSelectProps): React.ReactElement {\n const context = useI18n();\n if (!context.locales) throw new Error('Missing `<I18nProvider />`');\n\n return (\n <Popover>\n <PopoverTrigger\n aria-label={context.text.chooseLanguage}\n {...props}\n className={cn(\n buttonVariants({\n color: 'ghost',\n className: 'gap-1.5 p-1.5',\n }),\n props.className,\n )}\n >\n {props.children}\n </PopoverTrigger>\n <PopoverContent className=\"flex flex-col overflow-x-hidden p-0\">\n <p className=\"mb-1 p-2 text-xs font-medium text-fd-muted-foreground\">\n {context.text.chooseLanguage}\n </p>\n {context.locales.map((item) => (\n <button\n key={item.locale}\n type=\"button\"\n className={cn(\n 'p-2 text-start text-sm',\n item.locale === context.locale\n ? 'bg-fd-primary/10 font-medium text-fd-primary'\n : 'hover:bg-fd-accent hover:text-fd-accent-foreground',\n )}\n onClick={() => {\n context.onChange?.(item.locale);\n }}\n >\n {item.name}\n </button>\n ))}\n </PopoverContent>\n </Popover>\n );\n}\n\nexport function LanguageToggleText(props: ComponentProps<'span'>) {\n const context = useI18n();\n const text = context.locales?.find((item) => item.locale === context.locale)?.name;\n\n return <span {...props}>{text}</span>;\n}\n"],"mappings":";;;;;;;AASA,SAAgB,eAAe,OAAgD;CAC7E,MAAM,UAAU,SAAS;AACzB,KAAI,CAAC,QAAQ,QAAS,OAAM,IAAI,MAAM,6BAA6B;AAEnE,QACE,qBAAC,SAAD,EAAA,UAAA,CACE,oBAAC,gBAAD;EACE,cAAY,QAAQ,KAAK;EACzB,GAAI;EACJ,WAAW,GACT,eAAe;GACb,OAAO;GACP,WAAW;GACZ,CAAC,EACF,MAAM,UACP;YAEA,MAAM;EACQ,CAAA,EACjB,qBAAC,gBAAD;EAAgB,WAAU;YAA1B,CACE,oBAAC,KAAD;GAAG,WAAU;aACV,QAAQ,KAAK;GACZ,CAAA,EACH,QAAQ,QAAQ,KAAK,SACpB,oBAAC,UAAD;GAEE,MAAK;GACL,WAAW,GACT,0BACA,KAAK,WAAW,QAAQ,SACpB,iDACA,qDACL;GACD,eAAe;AACb,YAAQ,WAAW,KAAK,OAAO;;aAGhC,KAAK;GACC,EAbF,KAAK,OAaH,CACT,CACa;IACT,EAAA,CAAA;;AAId,SAAgB,mBAAmB,OAA+B;CAChE,MAAM,UAAU,SAAS;CACzB,MAAM,OAAO,QAAQ,SAAS,MAAM,SAAS,KAAK,WAAW,QAAQ,OAAO,EAAE;AAE9E,QAAO,oBAAC,QAAD;EAAM,GAAI;YAAQ;EAAY,CAAA"}
|