@hanzo/docs-base-ui 16.4.3 → 16.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/css/aspen.css +1 -0
- package/css/black.css +1 -1
- package/css/catppuccin.css +1 -1
- package/css/dusk.css +1 -1
- package/css/emerald.css +1 -0
- package/css/neutral.css +1 -1
- package/css/ocean.css +1 -1
- package/css/preset.css +1 -1
- package/css/purple.css +1 -1
- package/css/ruby.css +1 -0
- package/css/shadcn.css +1 -1
- package/css/solar.css +1 -1
- package/css/vitepress.css +1 -1
- package/dist/components/accordion.d.ts +3 -3
- package/dist/components/accordion.d.ts.map +1 -1
- package/dist/components/banner.d.ts +3 -3
- package/dist/components/banner.d.ts.map +1 -1
- package/dist/components/banner.js.map +1 -1
- package/dist/components/callout.d.ts +5 -5
- package/dist/components/card.d.ts +3 -3
- package/dist/components/codeblock.d.ts +7 -7
- package/dist/components/dialog/search-algolia.d.ts +2 -2
- package/dist/components/dialog/search-default.d.ts +2 -2
- package/dist/components/dialog/search-orama.d.ts +2 -2
- package/dist/components/dialog/search.d.ts +13 -13
- package/dist/components/dialog/search.d.ts.map +1 -1
- package/dist/components/dialog/search.js +14 -6
- package/dist/components/dialog/search.js.map +1 -1
- package/dist/components/dynamic-codeblock.d.ts +2 -2
- package/dist/components/dynamic-codeblock.d.ts.map +1 -1
- package/dist/components/github-info.d.ts +2 -2
- package/dist/components/image-zoom.d.ts +2 -2
- package/dist/components/inline-toc.d.ts +2 -2
- package/dist/components/sidebar/base.d.ts +23 -21
- package/dist/components/sidebar/base.d.ts.map +1 -1
- package/dist/components/sidebar/base.js +7 -3
- package/dist/components/sidebar/base.js.map +1 -1
- package/dist/components/sidebar/link-item.d.ts +3 -3
- package/dist/components/sidebar/link-item.js.map +1 -1
- package/dist/components/sidebar/page-tree.d.ts +2 -2
- package/dist/components/sidebar/tabs/dropdown.d.ts +3 -3
- package/dist/components/sidebar/tabs/dropdown.d.ts.map +1 -1
- package/dist/components/sidebar/tabs/dropdown.js +1 -1
- package/dist/components/sidebar/tabs/dropdown.js.map +1 -1
- package/dist/components/sidebar/tabs/index.js.map +1 -1
- package/dist/components/steps.d.ts +3 -3
- package/dist/components/tabs.d.ts +7 -7
- package/dist/components/tabs.d.ts.map +1 -1
- package/dist/components/toc/clerk.d.ts +1 -1
- package/dist/components/toc/clerk.js +3 -3
- package/dist/components/toc/clerk.js.map +1 -1
- package/dist/components/toc/default.d.ts +1 -1
- package/dist/components/toc/default.js +3 -3
- package/dist/components/toc/default.js.map +1 -1
- package/dist/components/toc/index.d.ts +1 -1
- package/dist/components/toc/index.js +3 -3
- package/dist/components/toc/index.js.map +1 -1
- package/dist/components/type-table.d.ts +2 -2
- package/dist/components/type-table.d.ts.map +1 -1
- package/dist/components/ui/accordion.d.ts +6 -6
- package/dist/components/ui/accordion.d.ts.map +1 -1
- package/dist/components/ui/collapsible.d.ts +6 -6
- package/dist/components/ui/collapsible.d.ts.map +1 -1
- package/dist/components/ui/navigation-menu.d.ts +7 -7
- package/dist/components/ui/navigation-menu.d.ts.map +1 -1
- package/dist/components/ui/popover.d.ts +3 -3
- package/dist/components/ui/popover.d.ts.map +1 -1
- package/dist/components/ui/scroll-area.d.ts +4 -4
- package/dist/components/ui/scroll-area.d.ts.map +1 -1
- package/dist/components/ui/tabs.d.ts +7 -7
- package/dist/components/ui/tabs.d.ts.map +1 -1
- package/dist/components/ui/tabs.js +2 -2
- package/dist/components/ui/tabs.js.map +1 -1
- package/dist/contexts/i18n.d.ts +1 -1
- package/dist/contexts/i18n.js +3 -3
- package/dist/contexts/i18n.js.map +1 -1
- package/dist/contexts/search.d.ts +3 -3
- package/dist/contexts/search.js +3 -3
- package/dist/contexts/search.js.map +1 -1
- package/dist/contexts/tree.d.ts +1 -1
- package/dist/contexts/tree.js +3 -3
- package/dist/contexts/tree.js.map +1 -1
- package/dist/i18n.d.ts +1 -1
- package/dist/i18n.js +1 -1
- package/dist/layouts/docs/client.d.ts +7 -7
- package/dist/layouts/docs/client.d.ts.map +1 -1
- package/dist/layouts/docs/client.js +1 -1
- package/dist/layouts/docs/client.js.map +1 -1
- package/dist/layouts/docs/index.d.ts +2 -2
- package/dist/layouts/docs/index.d.ts.map +1 -1
- package/dist/layouts/docs/index.js +1 -1
- package/dist/layouts/docs/index.js.map +1 -1
- package/dist/layouts/docs/page/client.d.ts +9 -7
- package/dist/layouts/docs/page/client.d.ts.map +1 -1
- package/dist/layouts/docs/page/client.js +14 -14
- package/dist/layouts/docs/page/client.js.map +1 -1
- package/dist/layouts/docs/page/index.d.ts +19 -8
- package/dist/layouts/docs/page/index.d.ts.map +1 -1
- package/dist/layouts/docs/page/index.js +3 -3
- package/dist/layouts/docs/page/index.js.map +1 -1
- package/dist/layouts/docs/sidebar.d.ts +19 -19
- package/dist/layouts/docs/sidebar.d.ts.map +1 -1
- package/dist/layouts/home/client.d.ts +3 -3
- package/dist/layouts/home/client.js +6 -6
- package/dist/layouts/home/client.js.map +1 -1
- package/dist/layouts/home/index.d.ts +2 -2
- package/dist/layouts/home/navbar.d.ts +7 -7
- package/dist/layouts/home/navbar.d.ts.map +1 -1
- package/dist/layouts/notebook/client.d.ts +9 -9
- package/dist/layouts/notebook/client.d.ts.map +1 -1
- package/dist/layouts/notebook/client.js +2 -2
- package/dist/layouts/notebook/client.js.map +1 -1
- package/dist/layouts/notebook/index.d.ts +2 -2
- package/dist/layouts/notebook/index.js +26 -27
- package/dist/layouts/notebook/index.js.map +1 -1
- package/dist/layouts/notebook/page/client.d.ts +9 -7
- package/dist/layouts/notebook/page/client.d.ts.map +1 -1
- package/dist/layouts/notebook/page/client.js +14 -14
- package/dist/layouts/notebook/page/client.js.map +1 -1
- package/dist/layouts/notebook/page/index.d.ts +19 -8
- package/dist/layouts/notebook/page/index.d.ts.map +1 -1
- package/dist/layouts/notebook/page/index.js +3 -3
- package/dist/layouts/notebook/page/index.js.map +1 -1
- package/dist/layouts/notebook/sidebar.d.ts +14 -14
- package/dist/layouts/notebook/sidebar.d.ts.map +1 -1
- package/dist/layouts/shared/index.d.ts +4 -4
- package/dist/layouts/shared/index.js.map +1 -1
- package/dist/layouts/shared/language-toggle.d.ts +2 -2
- package/dist/layouts/shared/search-toggle.d.ts +3 -3
- package/dist/layouts/shared/theme-toggle.d.ts +2 -2
- package/dist/mdx.js.map +1 -1
- package/dist/og.d.ts +1 -1
- package/dist/og.js +1 -1
- package/dist/page.d.ts +3 -3
- package/dist/page.d.ts.map +1 -1
- package/dist/provider/base.d.ts +4 -4
- package/dist/provider/base.d.ts.map +1 -1
- package/dist/provider/base.js +2 -2
- package/dist/provider/base.js.map +1 -1
- package/dist/provider/next.d.ts +2 -2
- package/dist/provider/next.d.ts.map +1 -1
- package/dist/provider/react-router.d.ts +2 -2
- package/dist/provider/tanstack.d.ts +2 -2
- package/dist/provider/waku.d.ts +2 -2
- package/dist/provider/waku.d.ts.map +1 -1
- package/dist/style.css +7 -3
- package/dist/utils/use-footer-items.d.ts +1 -1
- package/dist/utils/use-footer-items.js +1 -1
- package/dist/utils/use-is-scroll-top.d.ts +1 -1
- package/dist/utils/use-is-scroll-top.js +1 -1
- package/package.json +21 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","names":[],"sources":["../../../../src/layouts/docs/page/client.tsx"],"sourcesContent":[],"mappings":";;;;;;iBAiCgB,cAAA;;;;GAAiD,wBAAqB,
|
|
1
|
+
{"version":3,"file":"client.d.ts","names":[],"sources":["../../../../src/layouts/docs/page/client.tsx"],"sourcesContent":[],"mappings":";;;;;;iBAiCgB,cAAA;;;;GAAiD,wBAAqB,mBAAA,CAAA,GAAA,CAAA;iBAsDtE,qBAAA;;;GAA+C,2BAAwB,mBAAA,CAAA,GAAA,CAAA;iBA2GvE,qBAAA,QAA6B,wBAAqB,mBAAA,CAAA,GAAA,CAAA;AAjKlD,iBA6KA,cAAA,CA7Kc;EAAA,IAAA,EA8KtB,KA9KsB;EAAA,GAAA;CAAA,EAgL3B,IAhL2B,CAgLtB,cAhLsB,CAAA,GAAA,CAAA,EAAA,UAAA,CAAA,GAAA;EAAG,IAAA,EAgLkB,IAhLlB;CAAW,CAAA,EAgLa,mBAAA,CAAA,GAAA,CAAA,OAhLb;KAgMvC,IAAA,GAAO,IAhMqD,CAgMhD,QAAA,CAAS,IAhMuC,EAAA,MAAA,GAAA,aAAA,GAAA,KAAA,CAAA;AAAqB,UAiMrE,WAAA,SAAoB,cAjMiD,CAAA,KAAA,CAAA,CAAA;EAAA;AAsDtF;;EAA+D,KAAA,CAAA,EAAA;IAAwB,QAAA,CAAA,EAgJxE,IAhJwE;IAAA,IAAA,CAAA,EAiJ5E,IAjJ4E;EA2GvE,CAAA;AAYhB;AACQ,iBA6BQ,UAAA,CA7BR;EAAA,KAAA;EAAA,QAAA;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EA6B6D,WA7B7D,CAAA,EA6BwE,mBAAA,CAAA,GAAA,CAAA,OA7BxE;AAEA,KAyFI,eAAA,GAAkB,iBAzFtB,GAyF0C,cAzF1C,CAAA,KAAA,CAAA;AAAL,iBA2Fa,cAAA,CA3Fb;EAAA,WAAA;EAAA,gBAAA;EAAA,WAAA;EAAA,GAAA;AAAA,CAAA,EAgGA,eAhGA,CAAA,EAgGe,mBAAA,CAAA,GAAA,CAAA,OAAA,GAhGf,IAAA"}
|
|
@@ -8,13 +8,13 @@ import { LayoutContext } from "../client.js";
|
|
|
8
8
|
import Link from "@hanzo/docs-core/link";
|
|
9
9
|
import { usePathname } from "@hanzo/docs-core/framework";
|
|
10
10
|
import { cn } from "@hanzo/docs-ui/cn";
|
|
11
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
11
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
12
12
|
import { ChevronDown, ChevronLeft, ChevronRight } from "lucide-react";
|
|
13
|
-
import { Fragment as Fragment$1, createContext, use,
|
|
13
|
+
import { Fragment as Fragment$1, createContext, use, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
14
14
|
import { getBreadcrumbItemsFromPath } from "@hanzo/docs-core/breadcrumb";
|
|
15
|
-
import { isActive } from "@hanzo/docs-ui/urls";
|
|
15
|
+
import { isActive } from "@hanzo/docs-radix-ui/urls";
|
|
16
16
|
import { useActiveAnchor } from "@hanzo/docs-core/toc";
|
|
17
|
-
import { useFooterItems } from "@hanzo/docs-ui/hooks/use-footer-items";
|
|
17
|
+
import { useFooterItems } from "@hanzo/docs-radix-ui/hooks/use-footer-items";
|
|
18
18
|
|
|
19
19
|
//#region src/layouts/docs/page/client.tsx
|
|
20
20
|
const TocPopoverContext = createContext(null);
|
|
@@ -22,16 +22,16 @@ function PageTOCPopover({ className, children, ...rest }) {
|
|
|
22
22
|
const ref = useRef(null);
|
|
23
23
|
const [open, setOpen] = useState(false);
|
|
24
24
|
const { isNavTransparent } = use(LayoutContext);
|
|
25
|
-
const onClick =
|
|
25
|
+
const onClick = useCallback((e) => {
|
|
26
26
|
if (!open) return;
|
|
27
27
|
if (ref.current && !ref.current.contains(e.target)) setOpen(false);
|
|
28
|
-
});
|
|
28
|
+
}, [open]);
|
|
29
29
|
useEffect(() => {
|
|
30
30
|
window.addEventListener("click", onClick);
|
|
31
31
|
return () => {
|
|
32
32
|
window.removeEventListener("click", onClick);
|
|
33
33
|
};
|
|
34
|
-
}, []);
|
|
34
|
+
}, [onClick]);
|
|
35
35
|
return /* @__PURE__ */ jsx(TocPopoverContext, {
|
|
36
36
|
value: useMemo(() => ({
|
|
37
37
|
open,
|
|
@@ -145,7 +145,7 @@ function PageLastUpdate({ date: value, ...props }) {
|
|
|
145
145
|
]
|
|
146
146
|
});
|
|
147
147
|
}
|
|
148
|
-
function PageFooter({ items, ...props }) {
|
|
148
|
+
function PageFooter({ items, children, className, ...props }) {
|
|
149
149
|
const footerList = useFooterItems();
|
|
150
150
|
const pathname = usePathname();
|
|
151
151
|
const { previous, next } = useMemo(() => {
|
|
@@ -161,17 +161,17 @@ function PageFooter({ items, ...props }) {
|
|
|
161
161
|
items,
|
|
162
162
|
pathname
|
|
163
163
|
]);
|
|
164
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
164
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("div", {
|
|
165
|
+
className: cn("@container grid gap-4", previous && next ? "grid-cols-2" : "grid-cols-1", className),
|
|
165
166
|
...props,
|
|
166
|
-
|
|
167
|
-
children: [previous ? /* @__PURE__ */ jsx(FooterItem, {
|
|
167
|
+
children: [previous && /* @__PURE__ */ jsx(FooterItem, {
|
|
168
168
|
item: previous,
|
|
169
169
|
index: 0
|
|
170
|
-
})
|
|
170
|
+
}), next && /* @__PURE__ */ jsx(FooterItem, {
|
|
171
171
|
item: next,
|
|
172
172
|
index: 1
|
|
173
|
-
})
|
|
174
|
-
});
|
|
173
|
+
})]
|
|
174
|
+
}), children] });
|
|
175
175
|
}
|
|
176
176
|
function FooterItem({ item, index }) {
|
|
177
177
|
const { text } = (0, i18n_exports.useI18n)();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","names":["Fragment"],"sources":["../../../../src/layouts/docs/page/client.tsx"],"sourcesContent":["'use client';\n\nimport {\n type ComponentProps,\n createContext,\n Fragment,\n use,\n useEffect,\n useEffectEvent,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { ChevronDown, ChevronLeft, ChevronRight } from 'lucide-react';\nimport Link from '@hanzo/docs-core/link';\nimport { cn } from '@hanzo/docs-ui/cn';\nimport { useI18n } from '@/contexts/i18n';\nimport { useTreeContext, useTreePath } from '@/contexts/tree';\nimport type * as PageTree from '@hanzo/docs-core/page-tree';\nimport { usePathname } from '@hanzo/docs-core/framework';\nimport { type BreadcrumbOptions, getBreadcrumbItemsFromPath } from '@hanzo/docs-core/breadcrumb';\nimport { isActive } from '@hanzo/docs-ui/urls';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible';\nimport { useTOCItems } from '@/components/toc';\nimport { useActiveAnchor } from '@hanzo/docs-core/toc';\nimport { LayoutContext } from '../client';\nimport { useFooterItems } from '@hanzo/docs-ui/hooks/use-footer-items';\n\nconst TocPopoverContext = createContext<{\n open: boolean;\n setOpen: (open: boolean) => void;\n} | null>(null);\n\nexport function PageTOCPopover({ className, children, ...rest }: ComponentProps<'div'>) {\n const ref = useRef<HTMLElement>(null);\n const [open, setOpen] = useState(false);\n const { isNavTransparent } = use(LayoutContext)!;\n\n const onClick = useEffectEvent((e: Event) => {\n if (!open) return;\n\n if (ref.current && !ref.current.contains(e.target as HTMLElement)) setOpen(false);\n });\n\n useEffect(() => {\n window.addEventListener('click', onClick);\n\n return () => {\n window.removeEventListener('click', onClick);\n };\n }, []);\n\n return (\n <TocPopoverContext\n value={useMemo(\n () => ({\n open,\n setOpen,\n }),\n [setOpen, open],\n )}\n >\n <Collapsible\n open={open}\n onOpenChange={setOpen}\n data-toc-popover=\"\"\n className={cn(\n 'sticky top-(--fd-docs-row-2) z-10 [grid-area:toc-popover] h-(--fd-toc-popover-height) xl:hidden max-xl:layout:[--fd-toc-popover-height:--spacing(10)]',\n className,\n )}\n {...rest}\n >\n <header\n ref={ref}\n className={cn(\n 'border-b backdrop-blur-sm transition-colors',\n (!isNavTransparent || open) && 'bg-fd-background/80',\n open && 'shadow-lg',\n )}\n >\n {children}\n </header>\n </Collapsible>\n </TocPopoverContext>\n );\n}\n\nexport function PageTOCPopoverTrigger({ className, ...props }: ComponentProps<'button'>) {\n const { text } = useI18n();\n const { open } = use(TocPopoverContext)!;\n const items = useTOCItems();\n const active = useActiveAnchor();\n const selected = useMemo(\n () => items.findIndex((item) => active === item.url.slice(1)),\n [items, active],\n );\n const path = useTreePath().at(-1);\n const showItem = selected !== -1 && !open;\n\n return (\n <CollapsibleTrigger\n className={cn(\n 'flex w-full h-10 items-center text-sm text-fd-muted-foreground gap-2.5 px-4 py-2.5 text-start focus-visible:outline-none [&_svg]:size-4 md:px-6',\n className,\n )}\n data-toc-popover-trigger=\"\"\n {...props}\n >\n <ProgressCircle\n value={(selected + 1) / Math.max(1, items.length)}\n max={1}\n className={cn('shrink-0', open && 'text-fd-primary')}\n />\n <span className=\"grid flex-1 *:my-auto *:row-start-1 *:col-start-1\">\n <span\n className={cn(\n 'truncate transition-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 <div>{props.children}</div>\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, ...props }: FooterProps) {\n const footerList = useFooterItems();\n const pathname = usePathname();\n\n const { previous, next } = useMemo(() => {\n if (items) return items;\n\n const idx = footerList.findIndex((item) => isActive(item.url, pathname, false));\n\n if (idx === -1) return {};\n return {\n previous: footerList[idx - 1],\n next: footerList[idx + 1],\n };\n }, [footerList, items, pathname]);\n\n return (\n <div\n {...props}\n className={cn(\n '@container grid gap-4',\n previous && next ? 'grid-cols-2' : 'grid-cols-1',\n props.className,\n )}\n >\n {previous ? <FooterItem item={previous} index={0} /> : null}\n {next ? <FooterItem item={next} index={1} /> : null}\n </div>\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":["Fragment"],"sources":["../../../../src/layouts/docs/page/client.tsx"],"sourcesContent":["'use client';\n\nimport {\n type ComponentProps,\n createContext,\n Fragment,\n use,\n useEffect,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { ChevronDown, ChevronLeft, ChevronRight } from 'lucide-react';\nimport Link from '@hanzo/docs-core/link';\nimport { cn } from '@hanzo/docs-ui/cn';\nimport { useI18n } from '@/contexts/i18n';\nimport { useTreeContext, useTreePath } from '@/contexts/tree';\nimport type * as PageTree from '@hanzo/docs-core/page-tree';\nimport { usePathname } from '@hanzo/docs-core/framework';\nimport { type BreadcrumbOptions, getBreadcrumbItemsFromPath } from '@hanzo/docs-core/breadcrumb';\nimport { isActive } from '@hanzo/docs-radix-ui/urls';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible';\nimport { useTOCItems } from '@/components/toc';\nimport { useActiveAnchor } from '@hanzo/docs-core/toc';\nimport { LayoutContext } from '../client';\nimport { useFooterItems } from '@hanzo/docs-radix-ui/hooks/use-footer-items';\n\nconst TocPopoverContext = createContext<{\n open: boolean;\n setOpen: (open: boolean) => void;\n} | null>(null);\n\nexport function PageTOCPopover({ className, children, ...rest }: ComponentProps<'div'>) {\n const ref = useRef<HTMLElement>(null);\n const [open, setOpen] = useState(false);\n const { isNavTransparent } = use(LayoutContext)!;\n\n const onClick = useCallback((e: Event) => {\n if (!open) return;\n\n if (ref.current && !ref.current.contains(e.target as HTMLElement)) setOpen(false);\n }, [open]);\n\n useEffect(() => {\n window.addEventListener('click', onClick);\n\n return () => {\n window.removeEventListener('click', onClick);\n };\n }, [onClick]);\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 <div>{props.children}</div>\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\n const { previous, next } = useMemo(() => {\n if (items) return items;\n\n const idx = footerList.findIndex((item) => isActive(item.url, pathname, false));\n\n if (idx === -1) return {};\n return {\n previous: footerList[idx - 1],\n next: footerList[idx + 1],\n };\n }, [footerList, items, pathname]);\n\n return (\n <>\n <div\n className={cn(\n '@container grid gap-4',\n previous && next ? 'grid-cols-2' : 'grid-cols-1',\n className,\n )}\n {...props}\n >\n {previous && <FooterItem item={previous} index={0} />}\n {next && <FooterItem item={next} index={1} />}\n </div>\n {children}\n </>\n );\n}\n\nfunction FooterItem({ item, index }: { item: Item; index: 0 | 1 }) {\n const { text } = useI18n();\n const Icon = index === 0 ? ChevronLeft : ChevronRight;\n\n return (\n <Link\n href={item.url}\n className={cn(\n 'flex flex-col gap-2 rounded-lg border p-4 text-sm transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground @max-lg:col-span-full',\n index === 1 && 'text-end',\n )}\n >\n <div\n className={cn(\n 'inline-flex items-center gap-1.5 font-medium',\n index === 1 && 'flex-row-reverse',\n )}\n >\n <Icon className=\"-mx-1 size-4 shrink-0 rtl:rotate-180\" />\n <p>{item.name}</p>\n </div>\n <p className=\"text-fd-muted-foreground truncate\">\n {item.description ?? (index === 0 ? text.previousPage : text.nextPage)}\n </p>\n </Link>\n );\n}\n\nexport type BreadcrumbProps = BreadcrumbOptions & ComponentProps<'div'>;\n\nexport function PageBreadcrumb({\n includeRoot,\n includeSeparator,\n includePage,\n ...props\n}: BreadcrumbProps) {\n const path = useTreePath();\n const { root } = useTreeContext();\n const items = useMemo(() => {\n return getBreadcrumbItemsFromPath(root, path, {\n includePage,\n includeSeparator,\n includeRoot,\n });\n }, [includePage, includeRoot, includeSeparator, path, root]);\n\n if (items.length === 0) return null;\n\n return (\n <div\n {...props}\n className={cn('flex items-center gap-1.5 text-sm text-fd-muted-foreground', props.className)}\n >\n {items.map((item, i) => {\n const className = cn('truncate', i === items.length - 1 && 'text-fd-primary font-medium');\n\n return (\n <Fragment key={i}>\n {i !== 0 && <ChevronRight className=\"size-3.5 shrink-0\" />}\n {item.url ? (\n <Link\n href={item.url}\n className={cn(className, 'transition-opacity hover:opacity-80')}\n >\n {item.name}\n </Link>\n ) : (\n <span className={className}>{item.name}</span>\n )}\n </Fragment>\n );\n })}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BreadcrumbProps, FooterProps, PageBreadcrumb, PageLastUpdate } from "./client.js";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react_jsx_runtime69 from "react/jsx-runtime";
|
|
3
3
|
import { ComponentProps, ReactNode } from "react";
|
|
4
4
|
import { AnchorProviderProps, TOCItemType } from "@hanzo/docs-core/toc";
|
|
5
5
|
|
|
@@ -27,10 +27,16 @@ interface DocsPageProps {
|
|
|
27
27
|
*/
|
|
28
28
|
breadcrumb?: Partial<BreadcrumbOptions>;
|
|
29
29
|
/**
|
|
30
|
-
* Footer navigation,
|
|
30
|
+
* Footer navigation, located under the page body.
|
|
31
|
+
*
|
|
32
|
+
* You can specify `footer.children` to add extra components under the footer.
|
|
31
33
|
*/
|
|
32
34
|
footer?: Partial<FooterOptions>;
|
|
33
35
|
children?: ReactNode;
|
|
36
|
+
/**
|
|
37
|
+
* Apply class names to the `#nd-page` container.
|
|
38
|
+
*/
|
|
39
|
+
className?: string;
|
|
34
40
|
}
|
|
35
41
|
type TableOfContentOptions = Pick<AnchorProviderProps, 'single'> & {
|
|
36
42
|
/**
|
|
@@ -55,7 +61,11 @@ declare function DocsPage({
|
|
|
55
61
|
component: breadcrumb,
|
|
56
62
|
...breadcrumbProps
|
|
57
63
|
},
|
|
58
|
-
footer
|
|
64
|
+
footer: {
|
|
65
|
+
enabled: footerEnabled,
|
|
66
|
+
component: footerReplace,
|
|
67
|
+
...footerProps
|
|
68
|
+
},
|
|
59
69
|
full,
|
|
60
70
|
tableOfContentPopover: {
|
|
61
71
|
enabled: tocPopoverEnabled,
|
|
@@ -68,9 +78,10 @@ declare function DocsPage({
|
|
|
68
78
|
...tocOptions
|
|
69
79
|
},
|
|
70
80
|
toc,
|
|
71
|
-
children
|
|
81
|
+
children,
|
|
82
|
+
className
|
|
72
83
|
}: DocsPageProps): ReactNode;
|
|
73
|
-
declare function EditOnGitHub(props: ComponentProps<'a'>):
|
|
84
|
+
declare function EditOnGitHub(props: ComponentProps<'a'>): react_jsx_runtime69.JSX.Element;
|
|
74
85
|
/**
|
|
75
86
|
* Add typography styles
|
|
76
87
|
*/
|
|
@@ -78,17 +89,17 @@ declare function DocsBody({
|
|
|
78
89
|
children,
|
|
79
90
|
className,
|
|
80
91
|
...props
|
|
81
|
-
}: ComponentProps<'div'>):
|
|
92
|
+
}: ComponentProps<'div'>): react_jsx_runtime69.JSX.Element;
|
|
82
93
|
declare function DocsDescription({
|
|
83
94
|
children,
|
|
84
95
|
className,
|
|
85
96
|
...props
|
|
86
|
-
}: ComponentProps<'p'>):
|
|
97
|
+
}: ComponentProps<'p'>): react_jsx_runtime69.JSX.Element | null;
|
|
87
98
|
declare function DocsTitle({
|
|
88
99
|
children,
|
|
89
100
|
className,
|
|
90
101
|
...props
|
|
91
|
-
}: ComponentProps<'h1'>):
|
|
102
|
+
}: ComponentProps<'h1'>): react_jsx_runtime69.JSX.Element;
|
|
92
103
|
//#endregion
|
|
93
104
|
export { DocsBody, DocsDescription, DocsPage, DocsPageProps, DocsTitle, EditOnGitHub, PageBreadcrumb, PageLastUpdate };
|
|
94
105
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/layouts/docs/page/index.tsx"],"sourcesContent":[],"mappings":";;;;;;UAmBU,iBAAA,SAA0B;;aAEvB;AAPgE;AAK1B,UAKzC,aAAA,SAAsB,WAEnB,CAFmB;EAKf,OAAA,EAAA,OAAa;EACtB,SAAA,EAJK,SAIL;;AACW,UAFF,aAAA,CAEE;EACe,GAAA,CAAA,EAF1B,WAE0B,EAAA;EAAR,cAAA,CAAA,EADP,OACO,CADC,qBACD,CAAA;EAYH,qBAAA,CAAA,EAZG,OAYH,CAZW,4BAYX,CAAA;EAAR;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/layouts/docs/page/index.tsx"],"sourcesContent":[],"mappings":";;;;;;UAmBU,iBAAA,SAA0B;;aAEvB;AAPgE;AAK1B,UAKzC,aAAA,SAAsB,WAEnB,CAFmB;EAKf,OAAA,EAAA,OAAa;EACtB,SAAA,EAJK,SAIL;;AACW,UAFF,aAAA,CAEE;EACe,GAAA,CAAA,EAF1B,WAE0B,EAAA;EAAR,cAAA,CAAA,EADP,OACO,CADC,qBACD,CAAA;EAYH,qBAAA,CAAA,EAZG,OAYH,CAZW,4BAYX,CAAA;EAAR;;;;;EAiBV,IAAA,CAAA,EAAA,OAAA;EAA6B;;;EASvB,UAAA,CAAA,EA1BI,OA0BJ,CA1BY,iBA0BZ,CAAA;EAGE;;AAAS;AAUtB;;EAC8D,MAAA,CAAA,EAjCnD,OAiCmD,CAjC3C,aAiC2C,CAAA;EACzC,QAAA,CAAA,EAhCR,SAgCQ;EAA0B;;;EAIhC,SAAA,CAAA,EAAA,MAAA;;KA5BV,qBAAA,GAAwB,IA+BuB,CA/BlB,mBA+BkB,EAAA,QAAA,CAAA,GAAA;EAClD;;;EAGC,MAAA,CAAA,EA/BQ,SA+BR;EAAa;;AA4EhB;EA4BgB,MAAA,CAAA,EAlIL,SAkIa;EAAG,OAAA,EAAA,OAAA;EAAU,SAAA,EA/HxB,SA+HwB;EAAuB;;;EAQ5C,KAAA,CAAA,EAAA,QAAA,GAAe,OAAA;CAAG;KA/H7B,4BAAA,GAA+B,IA+HQ,CA/HH,qBA+HG,EAAA,QAAA,CAAA;AAAuB,iBA7HnD,QAAA,CA6HmD;EAAA,UAAA,EAAA;IAAA,OAAA,EA5H1C,iBA4H0C;IAAA,SAAA,EA5HL,UA4HK;IAAA,GAAA;EAAA,CAAA;EAAA,MAAA,EAAA;IAAA,OAAA,EA3H9C,aA2H8C;IAAA,SAAA,EA3HpB,aA2HoB;IAAA,GAAA;EAAA,CAAA;EAAA,IAAA;EAAA,qBAAA,EAAA;IAAA,OAAA,EAxHtD,iBAwHsD;IAAA,SAAA,EAvHpD,UAuHoD;IAAA,GAAA;EAAA,CAAA;EAAA,cAAA,EAAA;IAAA,OAAA,EApHtC,UAoHsC;IAAA,SAAA,EApHf,UAoHe;IAAA,GAAA;EAAA,CAAA;EAAA,GAAA;EAAA,QAAA;EAAA;AAAA,CAAA,EAhHhE,aAgHgE,CAAA,EAhHnD,SAgHmD;AAAmB,iBApCtE,YAAA,CAoCsE,KAAA,EApClD,cAoCkD,CAAA,GAAA,CAAA,CAAA,EApC/B,mBAAA,CAAA,GAAA,CAAA,OAoC+B;;AAWtF;;AAAsC,iBAnBtB,QAAA,CAmBsB;EAAA,QAAA;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EAnBsB,cAmBtB,CAAA,KAAA,CAAA,CAAA,EAnB2C,mBAAA,CAAA,GAAA,CAAA,OAmB3C;AAAuB,iBAX7C,eAAA,CAW6C;EAAA,QAAA;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EAXM,cAWN,CAAA,GAAA,CAAA,CAAA,EAXyB,mBAAA,CAAA,GAAA,CAAA,OAAA,GAWzB,IAAA;AAAoB,iBAAjE,SAAA,CAAiE;EAAA,QAAA;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EAApB,cAAoB,CAAA,IAAA,CAAA,CAAA,EAAA,mBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -19,7 +19,7 @@ var page_exports = /* @__PURE__ */ __exportAll({
|
|
|
19
19
|
PageBreadcrumb: () => PageBreadcrumb,
|
|
20
20
|
PageLastUpdate: () => PageLastUpdate
|
|
21
21
|
});
|
|
22
|
-
function DocsPage({ breadcrumb: { enabled: breadcrumbEnabled = true, component: breadcrumb, ...breadcrumbProps } = {}, footer = {}, full = false, tableOfContentPopover: { enabled: tocPopoverEnabled, component: tocPopover, ...tocPopoverOptions } = {}, tableOfContent: { enabled: tocEnabled, component: tocReplace, ...tocOptions } = {}, toc = [], children }) {
|
|
22
|
+
function DocsPage({ breadcrumb: { enabled: breadcrumbEnabled = true, component: breadcrumb, ...breadcrumbProps } = {}, footer: { enabled: footerEnabled, component: footerReplace, ...footerProps } = {}, full = false, tableOfContentPopover: { enabled: tocPopoverEnabled, component: tocPopover, ...tocPopoverOptions } = {}, tableOfContent: { enabled: tocEnabled, component: tocReplace, ...tocOptions } = {}, toc = [], children, className }) {
|
|
23
23
|
tocEnabled ??= !full && (toc.length > 0 || tocOptions.footer !== void 0 || tocOptions.header !== void 0);
|
|
24
24
|
tocPopoverEnabled ??= toc.length > 0 || tocPopoverOptions.header !== void 0 || tocPopoverOptions.footer !== void 0;
|
|
25
25
|
let wrapper = (children$1) => children$1;
|
|
@@ -37,11 +37,11 @@ function DocsPage({ breadcrumb: { enabled: breadcrumbEnabled = true, component:
|
|
|
37
37
|
/* @__PURE__ */ jsxs("article", {
|
|
38
38
|
id: "nd-page",
|
|
39
39
|
"data-full": full,
|
|
40
|
-
className: cn("flex flex-col w-full max-w-[900px] mx-auto [grid-area:main] px-4 py-6 gap-4 md:px-6 md:pt-8 xl:px-8 xl:pt-14", full ? "max-w-[1200px]" : "xl:layout:[--fd-toc-width:268px]"),
|
|
40
|
+
className: cn("flex flex-col w-full max-w-[900px] mx-auto [grid-area:main] px-4 py-6 gap-4 md:px-6 md:pt-8 xl:px-8 xl:pt-14", full ? "max-w-[1200px]" : "xl:layout:[--fd-toc-width:268px]", className),
|
|
41
41
|
children: [
|
|
42
42
|
breadcrumbEnabled && (breadcrumb ?? /* @__PURE__ */ jsx(PageBreadcrumb, { ...breadcrumbProps })),
|
|
43
43
|
children,
|
|
44
|
-
|
|
44
|
+
footerEnabled !== false && (footerReplace ?? /* @__PURE__ */ jsx(PageFooter, { ...footerProps }))
|
|
45
45
|
]
|
|
46
46
|
}),
|
|
47
47
|
tocEnabled && (tocReplace ?? /* @__PURE__ */ jsxs("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["children","TOCProvider","TOCScrollArea","TocClerk","TocDefault","I18nLabel"],"sources":["../../../../src/layouts/docs/page/index.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\nimport { cn } from '@hanzo/docs-ui/cn';\nimport { buttonVariants } from '@/components/ui/button';\nimport { Edit, Text } from 'lucide-react';\nimport { I18nLabel } from '@/contexts/i18n';\nimport {\n type BreadcrumbProps,\n type FooterProps,\n PageBreadcrumb,\n PageFooter,\n PageTOCPopover,\n PageTOCPopoverContent,\n PageTOCPopoverTrigger,\n} from './client';\nimport type { AnchorProviderProps, TOCItemType } from '@hanzo/docs-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,
|
|
1
|
+
{"version":3,"file":"index.js","names":["children","TOCProvider","TOCScrollArea","TocClerk","TocDefault","I18nLabel"],"sources":["../../../../src/layouts/docs/page/index.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\nimport { cn } from '@hanzo/docs-ui/cn';\nimport { buttonVariants } from '@/components/ui/button';\nimport { Edit, Text } from 'lucide-react';\nimport { I18nLabel } from '@/contexts/i18n';\nimport {\n type BreadcrumbProps,\n type FooterProps,\n PageBreadcrumb,\n PageFooter,\n PageTOCPopover,\n PageTOCPopoverContent,\n PageTOCPopoverTrigger,\n} from './client';\nimport type { AnchorProviderProps, TOCItemType } from '@hanzo/docs-core/toc';\nimport * as TocDefault from '@/components/toc/default';\nimport * as TocClerk from '@/components/toc/clerk';\nimport { TOCProvider, TOCScrollArea } from '@/components/toc';\n\ninterface BreadcrumbOptions extends BreadcrumbProps {\n enabled: boolean;\n component: ReactNode;\n}\n\ninterface FooterOptions extends FooterProps {\n enabled: boolean;\n component: ReactNode;\n}\n\nexport interface DocsPageProps {\n toc?: TOCItemType[];\n tableOfContent?: Partial<TableOfContentOptions>;\n tableOfContentPopover?: Partial<TableOfContentPopoverOptions>;\n\n /**\n * Extend the page to fill all available space\n *\n * @defaultValue false\n */\n full?: boolean;\n\n /**\n * Replace or disable breadcrumb\n */\n breadcrumb?: Partial<BreadcrumbOptions>;\n\n /**\n * Footer navigation, located under the page body.\n *\n * You can specify `footer.children` to add extra components under the footer.\n */\n footer?: Partial<FooterOptions>;\n\n children?: ReactNode;\n\n /**\n * Apply class names to the `#nd-page` container.\n */\n className?: string;\n}\n\ntype TableOfContentOptions = Pick<AnchorProviderProps, 'single'> & {\n /**\n * Custom content in TOC container, before the main TOC\n */\n header?: ReactNode;\n\n /**\n * Custom content in TOC container, after the main TOC\n */\n footer?: ReactNode;\n\n enabled: boolean;\n component: ReactNode;\n\n /**\n * @defaultValue 'normal'\n */\n style?: 'normal' | 'clerk';\n};\n\ntype TableOfContentPopoverOptions = Omit<TableOfContentOptions, 'single'>;\n\nexport function DocsPage({\n breadcrumb: { enabled: breadcrumbEnabled = true, component: breadcrumb, ...breadcrumbProps } = {},\n footer: { enabled: footerEnabled, component: footerReplace, ...footerProps } = {},\n full = false,\n tableOfContentPopover: {\n enabled: tocPopoverEnabled,\n component: tocPopover,\n ...tocPopoverOptions\n } = {},\n tableOfContent: { enabled: tocEnabled, component: tocReplace, ...tocOptions } = {},\n toc = [],\n children,\n className,\n}: DocsPageProps) {\n // disable TOC on full mode, you can still enable it with `enabled` option.\n tocEnabled ??=\n !full && (toc.length > 0 || tocOptions.footer !== undefined || tocOptions.header !== undefined);\n\n tocPopoverEnabled ??=\n toc.length > 0 ||\n tocPopoverOptions.header !== undefined ||\n tocPopoverOptions.footer !== undefined;\n\n let wrapper = (children: ReactNode) => children;\n\n if (tocEnabled || tocPopoverEnabled) {\n wrapper = (children) => (\n <TOCProvider single={tocOptions.single} toc={toc}>\n {children}\n </TOCProvider>\n );\n }\n\n return wrapper(\n <>\n {tocPopoverEnabled &&\n (tocPopover ?? (\n <PageTOCPopover>\n <PageTOCPopoverTrigger />\n <PageTOCPopoverContent>\n {tocPopoverOptions.header}\n <TOCScrollArea>\n {tocPopoverOptions.style === 'clerk' ? (\n <TocClerk.TOCItems />\n ) : (\n <TocDefault.TOCItems />\n )}\n </TOCScrollArea>\n {tocPopoverOptions.footer}\n </PageTOCPopoverContent>\n </PageTOCPopover>\n ))}\n <article\n id=\"nd-page\"\n data-full={full}\n className={cn(\n 'flex flex-col w-full max-w-[900px] mx-auto [grid-area:main] px-4 py-6 gap-4 md:px-6 md:pt-8 xl:px-8 xl:pt-14',\n full ? 'max-w-[1200px]' : 'xl:layout:[--fd-toc-width:268px]',\n className,\n )}\n >\n {breadcrumbEnabled && (breadcrumb ?? <PageBreadcrumb {...breadcrumbProps} />)}\n {children}\n {footerEnabled !== false && (footerReplace ?? <PageFooter {...footerProps} />)}\n </article>\n {tocEnabled &&\n (tocReplace ?? (\n <div\n id=\"nd-toc\"\n className=\"sticky top-(--fd-docs-row-1) h-[calc(var(--fd-docs-height)-var(--fd-docs-row-1))] flex flex-col [grid-area:toc] w-(--fd-toc-width) pt-12 pe-4 pb-2 max-xl:hidden\"\n >\n {tocOptions.header}\n <h3\n id=\"toc-title\"\n className=\"inline-flex items-center gap-1.5 text-sm text-fd-muted-foreground\"\n >\n <Text className=\"size-4\" />\n <I18nLabel label=\"toc\" />\n </h3>\n <TOCScrollArea>\n {tocOptions.style === 'clerk' ? <TocClerk.TOCItems /> : <TocDefault.TOCItems />}\n </TOCScrollArea>\n {tocOptions.footer}\n </div>\n ))}\n </>,\n );\n}\n\nexport function EditOnGitHub(props: ComponentProps<'a'>) {\n return (\n <a\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n {...props}\n className={cn(\n buttonVariants({\n color: 'secondary',\n size: 'sm',\n className: 'gap-1.5 not-prose',\n }),\n props.className,\n )}\n >\n {props.children ?? (\n <>\n <Edit className=\"size-3.5\" />\n <I18nLabel label=\"editOnGithub\" />\n </>\n )}\n </a>\n );\n}\n\n/**\n * Add typography styles\n */\nexport function DocsBody({ children, className, ...props }: ComponentProps<'div'>) {\n return (\n <div {...props} className={cn('prose flex-1', className)}>\n {children}\n </div>\n );\n}\n\nexport function DocsDescription({ children, className, ...props }: ComponentProps<'p'>) {\n // Don't render if no description provided\n if (children === undefined) return null;\n\n return (\n <p {...props} className={cn('mb-8 text-lg text-fd-muted-foreground', className)}>\n {children}\n </p>\n );\n}\n\nexport function DocsTitle({ children, className, ...props }: ComponentProps<'h1'>) {\n return (\n <h1 {...props} className={cn('text-[1.75em] font-semibold', className)}>\n {children}\n </h1>\n );\n}\n\nexport { PageLastUpdate, PageBreadcrumb } from './client';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAmFA,SAAgB,SAAS,EACvB,YAAY,EAAE,SAAS,oBAAoB,MAAM,WAAW,YAAY,GAAG,oBAAoB,EAAE,EACjG,QAAQ,EAAE,SAAS,eAAe,WAAW,eAAe,GAAG,gBAAgB,EAAE,EACjF,OAAO,OACP,uBAAuB,EACrB,SAAS,mBACT,WAAW,YACX,GAAG,sBACD,EAAE,EACN,gBAAgB,EAAE,SAAS,YAAY,WAAW,YAAY,GAAG,eAAe,EAAE,EAClF,MAAM,EAAE,EACR,UACA,aACgB;AAEhB,gBACE,CAAC,SAAS,IAAI,SAAS,KAAK,WAAW,WAAW,UAAa,WAAW,WAAW;AAEvF,uBACE,IAAI,SAAS,KACb,kBAAkB,WAAW,UAC7B,kBAAkB,WAAW;CAE/B,IAAI,WAAW,eAAwBA;AAEvC,KAAI,cAAc,kBAChB,YAAW,eACT,oBAACC;EAAY,QAAQ,WAAW;EAAa;YAC1CD;GACW;AAIlB,QAAO,QACL;EACG,sBACE,cACC,qBAAC,6BACC,oBAAC,0BAAwB,EACzB,qBAAC;GACE,kBAAkB;GACnB,oBAACE,uCACE,kBAAkB,UAAU,UAC3B,oBAACC,cAAS,aAAW,GAErB,oBAACC,gBAAW,aAAW,GAEX;GACf,kBAAkB;MACG,IACT;EAErB,qBAAC;GACC,IAAG;GACH,aAAW;GACX,WAAW,GACT,gHACA,OAAO,mBAAmB,oCAC1B,UACD;;IAEA,sBAAsB,cAAc,oBAAC,kBAAe,GAAI,kBAAmB;IAC3E;IACA,kBAAkB,UAAU,iBAAiB,oBAAC,cAAW,GAAI,cAAe;;IACrE;EACT,eACE,cACC,qBAAC;GACC,IAAG;GACH,WAAU;;IAET,WAAW;IACZ,qBAAC;KACC,IAAG;KACH,WAAU;gBAEV,oBAAC,QAAK,WAAU,WAAW,EAC3B,oBAACC,0BAAU,OAAM,QAAQ;MACtB;IACL,oBAACH,uCACE,WAAW,UAAU,UAAU,oBAACC,cAAS,aAAW,GAAG,oBAACC,gBAAW,aAAW,GACjE;IACf,WAAW;;IACR;KAET,CACJ;;AAGH,SAAgB,aAAa,OAA4B;AACvD,QACE,oBAAC;EACC,QAAO;EACP,KAAI;EACJ,GAAI;EACJ,WAAW,GACT,eAAe;GACb,OAAO;GACP,MAAM;GACN,WAAW;GACZ,CAAC,EACF,MAAM,UACP;YAEA,MAAM,YACL,4CACE,oBAAC,QAAK,WAAU,aAAa,EAC7B,oBAACC,0BAAU,OAAM,iBAAiB,IACjC;GAEH;;;;;AAOR,SAAgB,SAAS,EAAE,UAAU,WAAW,GAAG,SAAgC;AACjF,QACE,oBAAC;EAAI,GAAI;EAAO,WAAW,GAAG,gBAAgB,UAAU;EACrD;GACG;;AAIV,SAAgB,gBAAgB,EAAE,UAAU,WAAW,GAAG,SAA8B;AAEtF,KAAI,aAAa,OAAW,QAAO;AAEnC,QACE,oBAAC;EAAE,GAAI;EAAO,WAAW,GAAG,yCAAyC,UAAU;EAC5E;GACC;;AAIR,SAAgB,UAAU,EAAE,UAAU,WAAW,GAAG,SAA+B;AACjF,QACE,oBAAC;EAAG,GAAI;EAAO,WAAW,GAAG,+BAA+B,UAAU;EACnE;GACE"}
|
|
@@ -1,63 +1,63 @@
|
|
|
1
1
|
import { SidebarCollapseTrigger as SidebarCollapseTrigger$1, SidebarDrawerContent, SidebarFolder as SidebarFolder$1, SidebarFolderContent as SidebarFolderContent$1, SidebarFolderLink as SidebarFolderLink$1, SidebarFolderTrigger as SidebarFolderTrigger$1, SidebarItem as SidebarItem$1, SidebarProvider, SidebarTrigger as SidebarTrigger$1, SidebarViewport as SidebarViewport$1 } from "../../components/sidebar/base.js";
|
|
2
2
|
import { SidebarPageTreeComponents } from "../../components/sidebar/page-tree.js";
|
|
3
|
-
import
|
|
4
|
-
import * as
|
|
3
|
+
import { cn } from "@hanzo/docs-ui/cn";
|
|
4
|
+
import * as react_jsx_runtime115 from "react/jsx-runtime";
|
|
5
|
+
import * as react11 from "react";
|
|
5
6
|
import { ComponentProps } from "react";
|
|
6
|
-
import * as _hanzo_docs_ui_link_item0 from "@hanzo/docs-ui/link-item";
|
|
7
7
|
|
|
8
8
|
//#region src/layouts/docs/sidebar.d.ts
|
|
9
|
-
declare function Sidebar(props: ComponentProps<typeof SidebarProvider>):
|
|
10
|
-
declare function SidebarFolder(props: ComponentProps<typeof SidebarFolder$1>):
|
|
11
|
-
declare function SidebarCollapseTrigger(props: ComponentProps<typeof SidebarCollapseTrigger$1>):
|
|
12
|
-
declare function SidebarViewport(props: ComponentProps<typeof SidebarViewport$1>):
|
|
13
|
-
declare function SidebarTrigger(props: ComponentProps<typeof SidebarTrigger$1>):
|
|
9
|
+
declare function Sidebar(props: ComponentProps<typeof SidebarProvider>): react_jsx_runtime115.JSX.Element;
|
|
10
|
+
declare function SidebarFolder(props: ComponentProps<typeof SidebarFolder$1>): react_jsx_runtime115.JSX.Element;
|
|
11
|
+
declare function SidebarCollapseTrigger(props: ComponentProps<typeof SidebarCollapseTrigger$1>): react_jsx_runtime115.JSX.Element;
|
|
12
|
+
declare function SidebarViewport(props: ComponentProps<typeof SidebarViewport$1>): react_jsx_runtime115.JSX.Element;
|
|
13
|
+
declare function SidebarTrigger(props: ComponentProps<typeof SidebarTrigger$1>): react_jsx_runtime115.JSX.Element;
|
|
14
14
|
declare function SidebarContent({
|
|
15
15
|
ref: refProp,
|
|
16
16
|
className,
|
|
17
17
|
children,
|
|
18
18
|
...props
|
|
19
|
-
}: ComponentProps<'aside'>):
|
|
19
|
+
}: ComponentProps<'aside'>): react_jsx_runtime115.JSX.Element;
|
|
20
20
|
declare function SidebarDrawer({
|
|
21
21
|
children,
|
|
22
22
|
className,
|
|
23
23
|
...props
|
|
24
|
-
}: ComponentProps<typeof SidebarDrawerContent>):
|
|
24
|
+
}: ComponentProps<typeof SidebarDrawerContent>): react_jsx_runtime115.JSX.Element;
|
|
25
25
|
declare function SidebarSeparator({
|
|
26
26
|
className,
|
|
27
27
|
style,
|
|
28
28
|
children,
|
|
29
29
|
...props
|
|
30
|
-
}: ComponentProps<'p'>):
|
|
30
|
+
}: ComponentProps<'p'>): react_jsx_runtime115.JSX.Element;
|
|
31
31
|
declare function SidebarItem({
|
|
32
32
|
className,
|
|
33
33
|
style,
|
|
34
34
|
children,
|
|
35
35
|
...props
|
|
36
|
-
}: ComponentProps<typeof SidebarItem$1>):
|
|
36
|
+
}: ComponentProps<typeof SidebarItem$1>): react_jsx_runtime115.JSX.Element;
|
|
37
37
|
declare function SidebarFolderTrigger({
|
|
38
38
|
className,
|
|
39
39
|
style,
|
|
40
40
|
...props
|
|
41
|
-
}: ComponentProps<typeof SidebarFolderTrigger$1>):
|
|
41
|
+
}: ComponentProps<typeof SidebarFolderTrigger$1>): react_jsx_runtime115.JSX.Element;
|
|
42
42
|
declare function SidebarFolderLink({
|
|
43
43
|
className,
|
|
44
44
|
style,
|
|
45
45
|
...props
|
|
46
|
-
}: ComponentProps<typeof SidebarFolderLink$1>):
|
|
46
|
+
}: ComponentProps<typeof SidebarFolderLink$1>): react_jsx_runtime115.JSX.Element;
|
|
47
47
|
declare function SidebarFolderContent({
|
|
48
48
|
className,
|
|
49
49
|
children,
|
|
50
50
|
...props
|
|
51
|
-
}: ComponentProps<typeof SidebarFolderContent$1>):
|
|
52
|
-
declare const SidebarPageTree: (components: Partial<SidebarPageTreeComponents>) =>
|
|
51
|
+
}: ComponentProps<typeof SidebarFolderContent$1>): react_jsx_runtime115.JSX.Element;
|
|
52
|
+
declare const SidebarPageTree: (components: Partial<SidebarPageTreeComponents>) => react_jsx_runtime115.JSX.Element;
|
|
53
53
|
declare const SidebarLinkItem: ({
|
|
54
54
|
item,
|
|
55
55
|
...props
|
|
56
|
-
}:
|
|
57
|
-
item: Exclude<
|
|
56
|
+
}: react11.HTMLAttributes<HTMLElement> & {
|
|
57
|
+
item: Exclude<cn, {
|
|
58
58
|
type: "icon";
|
|
59
59
|
}>;
|
|
60
|
-
}) =>
|
|
60
|
+
}) => react_jsx_runtime115.JSX.Element;
|
|
61
61
|
//#endregion
|
|
62
62
|
export { Sidebar, SidebarCollapseTrigger, SidebarContent, SidebarDrawer, SidebarFolder, SidebarFolderContent, SidebarFolderLink, SidebarFolderTrigger, SidebarItem, SidebarLinkItem, SidebarPageTree, SidebarSeparator, SidebarTrigger, SidebarViewport };
|
|
63
63
|
//# sourceMappingURL=sidebar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar.d.ts","names":[],"sources":["../../../src/layouts/docs/sidebar.tsx"],"sourcesContent":[],"mappings":";;;;;;;;iBAgCgB,OAAA,QAAe,sBAAsB,mBAAqB,
|
|
1
|
+
{"version":3,"file":"sidebar.d.ts","names":[],"sources":["../../../src/layouts/docs/sidebar.tsx"],"sourcesContent":[],"mappings":";;;;;;;;iBAgCgB,OAAA,QAAe,sBAAsB,mBAAqB,oBAAA,CAAA,GAAA,CAAA;iBAI1D,aAAA,QAAqB,sBAAsB,mBAAmB,oBAAA,CAAA,GAAA,CAAA;iBAI9D,sBAAA,QAA8B,sBAAsB,4BAA4B,oBAAA,CAAA,GAAA,CAAA;iBAIhF,eAAA,QAAuB,sBAAsB,qBAAqB,oBAAA,CAAA,GAAA,CAAA;iBAIlE,cAAA,QAAsB,sBAAsB,oBAAoB,oBAAA,CAAA,GAAA,CAAA;AAhBhE,iBAoBA,cAAA,CApBO;EAAA,GAAA,EAqBhB,OArBgB;EAAA,SAAA;EAAA,QAAA;EAAA,GAAA;AAAA,CAAA,EAyBpB,cAzBoB,CAAA,OAAA,CAAA,CAAA,EAyBG,oBAAA,CAAA,GAAA,CAAA,OAzBH;AAA8B,iBAuFrC,aAAA,CAvFqC;EAAA,QAAA;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EA2FlD,cA3FkD,CAAA,OA2F5B,oBA3F4B,CAAA,CAAA,EA2FF,oBAAA,CAAA,GAAA,CAAA,OA3FE;AAAtB,iBA4Gf,gBAAA,CA5Ge;EAAA,SAAA;EAAA,KAAA;EAAA,QAAA;EAAA,GAAA;AAAA,CAAA,EA4G4C,cA5G5C,CAAA,GAAA,CAAA,CAAA,EA4G+D,oBAAA,CAAA,GAAA,CAAA,OA5G/D;AAA2C,iBA6H1D,WAAA,CA7H0D;EAAA,SAAA;EAAA,KAAA;EAAA,QAAA;EAAA,GAAA;AAAA,CAAA,EAkIvE,cAlIuE,CAAA,OAkIjD,aAlIiD,CAAA,CAAA,EAkIhC,oBAAA,CAAA,GAAA,CAAA,OAlIgC;AAAA,iBAmJ1D,oBAAA,CAnJ0D;EAAA,SAAA;EAAA,KAAA;EAAA,GAAA;AAAA,CAAA,EAuJvE,cAvJuE,CAAA,OAuJjD,sBAvJiD,CAAA,CAAA,EAuJvB,oBAAA,CAAA,GAAA,CAAA,OAvJuB;AAI1D,iBA0KA,iBAAA,CA1Ka;EAAA,SAAA;EAAA,KAAA;EAAA,GAAA;AAAA,CAAA,EA8K1B,cA9K0B,CAAA,OA8KJ,mBA9KI,CAAA,CAAA,EA8KmB,oBAAA,CAAA,GAAA,CAAA,OA9KnB;AAA8B,iBA+L3C,oBAAA,CA/L2C;EAAA,SAAA;EAAA,QAAA;EAAA,GAAA;AAAA,CAAA,EAmMxD,cAnMwD,CAAA,OAmMlC,sBAnMkC,CAAA,CAAA,EAmMR,oBAAA,CAAA,GAAA,CAAA,OAnMQ;AAAtB,cAuNxB,eAvNwB,EAAA,CAAA,UAAA,EAuNT,OAvNS,CA8NnC,yBAAA,CA9NmC,EAAA,GAuNT,oBAAA,CAAA,GAAA,CAAA,OAvNS;AAAyC,cAgOjE,eAhOiE,EAAA,CAAA;EAAA,IAAA;EAAA,GAAA;CAAA,EAgOlD,OAAA,CAAA,cAhOkD,CAgOlD,WAhOkD,CAAA,GAAA;EAAA,IAAA,SAAA,GAAA,EAAA;IAI9D,IAAA,EAAA,MAAA;EAAoD,CAAA,CAAA;CAAtB,EAAA,mCAAA"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { HomeLayoutProps } from "./index.js";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react_jsx_runtime32 from "react/jsx-runtime";
|
|
3
3
|
import * as class_variance_authority_types0 from "class-variance-authority/types";
|
|
4
4
|
|
|
5
5
|
//#region src/layouts/home/client.d.ts
|
|
6
6
|
declare const navItemVariants: (props?: ({
|
|
7
|
-
variant?: "icon" | "
|
|
7
|
+
variant?: "icon" | "button" | "main" | null | undefined;
|
|
8
8
|
} & class_variance_authority_types0.ClassProp) | undefined) => string;
|
|
9
9
|
declare function Header({
|
|
10
10
|
nav,
|
|
@@ -13,7 +13,7 @@ declare function Header({
|
|
|
13
13
|
githubUrl,
|
|
14
14
|
themeSwitch,
|
|
15
15
|
searchToggle
|
|
16
|
-
}: HomeLayoutProps):
|
|
16
|
+
}: HomeLayoutProps): react_jsx_runtime32.JSX.Element;
|
|
17
17
|
//#endregion
|
|
18
18
|
export { Header, navItemVariants };
|
|
19
19
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -11,10 +11,10 @@ import Link from "@hanzo/docs-core/link";
|
|
|
11
11
|
import { cn } from "@hanzo/docs-ui/cn";
|
|
12
12
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
13
13
|
import { ChevronDown, Languages } from "lucide-react";
|
|
14
|
-
import { Fragment as Fragment$1, createContext, use,
|
|
14
|
+
import { Fragment as Fragment$1, createContext, use, useCallback, useEffect, useMemo, useState } from "react";
|
|
15
15
|
import { cva } from "class-variance-authority";
|
|
16
|
-
import { useIsScrollTop } from "@hanzo/docs-ui/hooks/use-is-scroll-top";
|
|
17
|
-
import { LinkItem } from "@hanzo/docs-ui/link-item";
|
|
16
|
+
import { useIsScrollTop } from "@hanzo/docs-radix-ui/hooks/use-is-scroll-top";
|
|
17
|
+
import { LinkItem } from "@hanzo/docs-radix-ui/link-item";
|
|
18
18
|
import { NavigationMenu } from "@base-ui/react";
|
|
19
19
|
|
|
20
20
|
//#region src/layouts/home/client.tsx
|
|
@@ -149,17 +149,17 @@ function Header({ nav = {}, i18n = false, links, githubUrl, themeSwitch = {}, se
|
|
|
149
149
|
}
|
|
150
150
|
function MobileMenuCollapsible(props) {
|
|
151
151
|
const [open, setOpen] = useState(false);
|
|
152
|
-
const onClick =
|
|
152
|
+
const onClick = useCallback((e) => {
|
|
153
153
|
if (!open) return;
|
|
154
154
|
const header = document.getElementById("nd-nav");
|
|
155
155
|
if (header && !header.contains(e.target)) setOpen(false);
|
|
156
|
-
});
|
|
156
|
+
}, [open]);
|
|
157
157
|
useEffect(() => {
|
|
158
158
|
window.addEventListener("click", onClick);
|
|
159
159
|
return () => {
|
|
160
160
|
window.removeEventListener("click", onClick);
|
|
161
161
|
};
|
|
162
|
-
}, []);
|
|
162
|
+
}, [onClick]);
|
|
163
163
|
return /* @__PURE__ */ jsx(MobileMenuContext, {
|
|
164
164
|
value: useMemo(() => ({
|
|
165
165
|
open,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","names":["navItems: LinkItemType[]","menuItems: LinkItemType[]","Fragment"],"sources":["../../../src/layouts/home/client.tsx"],"sourcesContent":["'use client';\nimport {\n type ComponentProps,\n createContext,\n Fragment,\n use,\n useEffect,\n useEffectEvent,\n useMemo,\n useState,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport Link from '@hanzo/docs-core/link';\nimport { cn } from '@hanzo/docs-ui/cn';\nimport {\n type LinkItemType,\n type NavOptions,\n renderTitleNav,\n resolveLinkItems,\n} from '@/layouts/shared';\nimport { LinkItem } from '@hanzo/docs-ui/link-item';\nimport {\n NavigationMenuRoot,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n} from '@/components/ui/navigation-menu';\nimport { buttonVariants } from '@/components/ui/button';\nimport type { HomeLayoutProps } from '.';\nimport { LargeSearchToggle, SearchToggle } from '@/layouts/shared/search-toggle';\nimport { ThemeToggle } from '@/layouts/shared/theme-toggle';\nimport { LanguageToggle, LanguageToggleText } from '@/layouts/shared/language-toggle';\nimport { ChevronDown, Languages } from 'lucide-react';\nimport { useIsScrollTop } from '@hanzo/docs-ui/hooks/use-is-scroll-top';\nimport { NavigationMenu } from '@base-ui/react';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible';\n\nconst MobileMenuContext = createContext<{\n open: boolean;\n setOpen: (open: boolean) => void;\n} | null>(null);\n\nexport const navItemVariants = cva('[&_svg]:size-4', {\n variants: {\n variant: {\n main: 'inline-flex items-center gap-1 p-2 text-fd-muted-foreground transition-colors hover:text-fd-accent-foreground data-[active=true]:text-fd-primary data-[popup-open]:text-fd-primary',\n button: buttonVariants({\n color: 'secondary',\n className: 'gap-1.5',\n }),\n icon: buttonVariants({\n color: 'ghost',\n size: 'icon',\n }),\n },\n },\n defaultVariants: {\n variant: 'main',\n },\n});\n\nexport function Header({\n nav = {},\n i18n = false,\n links,\n githubUrl,\n themeSwitch = {},\n searchToggle = {},\n}: HomeLayoutProps) {\n const { navItems, menuItems } = useMemo(() => {\n const navItems: LinkItemType[] = [];\n const menuItems: LinkItemType[] = [];\n\n for (const item of resolveLinkItems({ links, githubUrl })) {\n switch (item.on ?? 'all') {\n case 'menu':\n menuItems.push(item);\n break;\n case 'nav':\n navItems.push(item);\n break;\n default:\n navItems.push(item);\n menuItems.push(item);\n }\n }\n\n return { navItems, menuItems };\n }, [links, githubUrl]);\n\n return (\n <MobileMenuCollapsible\n render={(_, s) => (\n <HeaderRoot\n transparentMode={nav.transparentMode}\n className={cn(s.open && 'shadow-lg rounded-b-2xl')}\n >\n <NavigationMenuList className=\"flex h-14 w-full items-center px-4\">\n {renderTitleNav(nav, {\n className: 'inline-flex items-center gap-2.5 font-semibold',\n })}\n {nav.children}\n <ul className=\"flex flex-row items-center gap-2 px-6 max-sm:hidden\">\n {navItems\n .filter((item) => !isSecondary(item))\n .map((item, i) => (\n <NavigationMenuLinkItem key={i} item={item} className=\"text-sm\" />\n ))}\n </ul>\n <div className=\"flex flex-row items-center justify-end gap-1.5 flex-1 max-lg:hidden\">\n {searchToggle.enabled !== false &&\n (searchToggle.components?.lg ?? (\n <LargeSearchToggle\n className=\"w-full rounded-full ps-2.5 max-w-[240px]\"\n hideIfDisabled\n />\n ))}\n {themeSwitch.enabled !== false &&\n (themeSwitch.component ?? <ThemeToggle mode={themeSwitch?.mode} />)}\n {i18n && (\n <LanguageToggle>\n <Languages className=\"size-5\" />\n </LanguageToggle>\n )}\n <ul className=\"flex flex-row gap-2 items-center empty:hidden\">\n {navItems.filter(isSecondary).map((item, i) => (\n <NavigationMenuLinkItem\n key={i}\n className={cn(item.type === 'icon' && '-mx-1 first:ms-0 last:me-0')}\n item={item}\n />\n ))}\n </ul>\n </div>\n <ul className=\"flex flex-row items-center ms-auto -me-1.5 lg:hidden\">\n {searchToggle.enabled !== false &&\n (searchToggle.components?.sm ?? <SearchToggle className=\"p-2\" hideIfDisabled />)}\n <CollapsibleTrigger\n aria-label=\"Toggle Menu\"\n className={cn(\n buttonVariants({\n size: 'icon',\n color: 'ghost',\n className: 'group [&_svg]:size-5.5',\n }),\n )}\n >\n <ChevronDown className=\"transition-transform duration-300 group-data-[panel-open]:rotate-180\" />\n </CollapsibleTrigger>\n </ul>\n </NavigationMenuList>\n <CollapsibleContent className=\"flex flex-col px-4\">\n {menuItems\n .filter((item) => !isSecondary(item))\n .map((item, i) => (\n <MobileMenuLinkItem key={i} item={item} className=\"first:mt-4 sm:hidden\" />\n ))}\n <div className=\"-ms-1.5 flex flex-row pt-2 pb-4 items-center justify-end gap-2\">\n {menuItems.filter(isSecondary).map((item, i) => (\n <MobileMenuLinkItem\n key={i}\n item={item}\n className={cn(item.type === 'icon' && '-mx-1 first:ms-0')}\n />\n ))}\n <div role=\"separator\" className=\"flex-1 sm:hidden\" />\n {i18n && (\n <LanguageToggle>\n <Languages className=\"size-5\" />\n <LanguageToggleText />\n <ChevronDown className=\"size-3 text-fd-muted-foreground\" />\n </LanguageToggle>\n )}\n {themeSwitch.enabled !== false &&\n (themeSwitch.component ?? <ThemeToggle mode={themeSwitch?.mode} />)}\n </div>\n </CollapsibleContent>\n <NavigationMenu.Portal>\n <NavigationMenu.Positioner\n sideOffset={10}\n className=\"z-20 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[left,right] duration-(--duration) ease-(--easing) data-[instant]:transition-none\"\n style={{\n ['--duration' as string]: '0.35s',\n ['--easing' as string]: 'cubic-bezier(0.22, 1, 0.36, 1)',\n }}\n >\n <NavigationMenu.Popup className=\"relative w-(--popup-width) h-(--popup-height) max-w-(--fd-layout-width,1400px) origin-(--transform-origin) rounded-xl bg-fd-background/80 border backdrop-blur-lg shadow-lg transition-[opacity,transform,width,height,scale,translate] duration-(--duration) ease-(--easing) data-[ending-style]:scale-90 data-[ending-style]:opacity-0 data-[ending-style]:duration-150 data-[starting-style]:scale-90 data-[starting-style]:opacity-0\">\n <NavigationMenu.Viewport className=\"relative size-full overflow-hidden\" />\n </NavigationMenu.Popup>\n </NavigationMenu.Positioner>\n </NavigationMenu.Portal>\n </HeaderRoot>\n )}\n />\n );\n}\n\nfunction MobileMenuCollapsible(props: ComponentProps<typeof Collapsible>) {\n const [open, setOpen] = useState(false);\n\n const onClick = useEffectEvent((e: Event) => {\n if (!open) return;\n const header = document.getElementById('nd-nav');\n if (header && !header.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 <MobileMenuContext\n value={useMemo(\n () => ({\n open,\n setOpen,\n }),\n [open],\n )}\n >\n <Collapsible open={open} onOpenChange={setOpen} {...props} />\n </MobileMenuContext>\n );\n}\n\nfunction isSecondary(item: LinkItemType): boolean {\n if ('secondary' in item && item.secondary != null) return item.secondary;\n\n return item.type === 'icon';\n}\n\nfunction HeaderRoot({\n transparentMode = 'none',\n children,\n className,\n ...props\n}: ComponentProps<'div'> & {\n transparentMode?: NavOptions['transparentMode'];\n}) {\n const isTop = useIsScrollTop({ enabled: transparentMode === 'top' }) ?? true;\n const isTransparent = transparentMode === 'top' ? isTop : transparentMode === 'always';\n\n return (\n <header id=\"nd-nav\" className=\"sticky h-14 top-0 z-40\">\n <NavigationMenuRoot\n render={(_, s) => (\n <nav\n className={cn(\n 'w-full backdrop-blur-lg border-b transition-colors mx-auto max-w-(--fd-layout-width)',\n (!isTransparent || s.open) && 'bg-fd-background/80',\n className,\n )}\n {...props}\n >\n {children}\n </nav>\n )}\n />\n </header>\n );\n}\n\nfunction NavigationMenuLinkItem({ item, ...props }: { item: LinkItemType; className?: string }) {\n if (item.type === 'custom') return <div {...props}>{item.children}</div>;\n\n if (item.type === 'menu') {\n const children = item.items.map((child, j) => {\n if (child.type === 'custom') {\n return <Fragment key={j}>{child.children}</Fragment>;\n }\n\n const {\n banner = child.icon ? (\n <div className=\"w-fit rounded-md border bg-fd-muted p-1 [&_svg]:size-4\">{child.icon}</div>\n ) : null,\n ...rest\n } = child.menu ?? {};\n\n return (\n <NavigationMenuLink\n key={`${j}-${child.url}`}\n render={\n <Link\n href={child.url}\n external={child.external}\n {...rest}\n className={cn(\n 'flex flex-col gap-2 rounded-lg border bg-fd-card p-3 transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground',\n rest.className,\n )}\n >\n {rest.children ?? (\n <>\n {banner}\n <p className=\"text-base font-medium\">{child.text}</p>\n <p className=\"text-sm text-fd-muted-foreground empty:hidden\">\n {child.description}\n </p>\n </>\n )}\n </Link>\n }\n />\n );\n });\n\n return (\n <NavigationMenuItem {...props}>\n <NavigationMenuTrigger className={cn(navItemVariants(), 'rounded-md')}>\n {item.url ? (\n <Link href={item.url} external={item.external}>\n {item.text}\n </Link>\n ) : (\n item.text\n )}\n </NavigationMenuTrigger>\n <NavigationMenuContent className=\"grid grid-cols-1 gap-2 p-4 md:grid-cols-2 lg:grid-cols-3\">\n {children}\n </NavigationMenuContent>\n </NavigationMenuItem>\n );\n }\n\n return (\n <NavigationMenuItem {...props}>\n <NavigationMenuLink\n render={\n <LinkItem\n item={item}\n aria-label={item.type === 'icon' ? item.label : undefined}\n className={cn(navItemVariants({ variant: item.type }))}\n >\n {item.type === 'icon' ? item.icon : item.text}\n </LinkItem>\n }\n />\n </NavigationMenuItem>\n );\n}\n\nfunction MobileMenuLinkItem({ item, className }: { item: LinkItemType; className?: string }) {\n if (item.type === 'custom') return <div className={cn('grid', className)}>{item.children}</div>;\n const { setOpen } = use(MobileMenuContext)!;\n\n if (item.type === 'menu') {\n const header = (\n <>\n {item.icon}\n {item.text}\n </>\n );\n\n return (\n <div className={cn('mb-4 flex flex-col', className)}>\n <p className=\"mb-1 text-sm text-fd-muted-foreground\">\n {item.url ? (\n <Link href={item.url} external={item.external} onClick={() => setOpen(false)}>\n {header}\n </Link>\n ) : (\n header\n )}\n </p>\n {item.items.map((child, i) => (\n <MobileMenuLinkItem key={i} item={child} />\n ))}\n </div>\n );\n }\n\n return (\n <LinkItem\n item={item}\n className={cn(\n (!item.type || item.type === 'main') &&\n 'inline-flex items-center gap-2 py-1.5 transition-colors hover:text-fd-popover-foreground/50 data-[active=true]:font-medium data-[active=true]:text-fd-primary [&_svg]:size-4',\n item.type === 'icon' &&\n buttonVariants({\n size: 'icon',\n color: 'ghost',\n }),\n item.type === 'button' &&\n buttonVariants({\n color: 'secondary',\n className: 'gap-1.5 [&_svg]:size-4',\n }),\n className,\n )}\n aria-label={item.type === 'icon' ? item.label : undefined}\n onClick={() => setOpen(false)}\n >\n {item.icon}\n {item.type !== 'icon' && item.text}\n </LinkItem>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAuCA,MAAM,oBAAoB,cAGhB,KAAK;AAEf,MAAa,kBAAkB,IAAI,kBAAkB;CACnD,UAAU,EACR,SAAS;EACP,MAAM;EACN,QAAQ,eAAe;GACrB,OAAO;GACP,WAAW;GACZ,CAAC;EACF,MAAM,eAAe;GACnB,OAAO;GACP,MAAM;GACP,CAAC;EACH,EACF;CACD,iBAAiB,EACf,SAAS,QACV;CACF,CAAC;AAEF,SAAgB,OAAO,EACrB,MAAM,EAAE,EACR,OAAO,OACP,OACA,WACA,cAAc,EAAE,EAChB,eAAe,EAAE,IACC;CAClB,MAAM,EAAE,UAAU,cAAc,cAAc;EAC5C,MAAMA,aAA2B,EAAE;EACnC,MAAMC,cAA4B,EAAE;AAEpC,OAAK,MAAM,QAAQ,iBAAiB;GAAE;GAAO;GAAW,CAAC,CACvD,SAAQ,KAAK,MAAM,OAAnB;GACE,KAAK;AACH,gBAAU,KAAK,KAAK;AACpB;GACF,KAAK;AACH,eAAS,KAAK,KAAK;AACnB;GACF;AACE,eAAS,KAAK,KAAK;AACnB,gBAAU,KAAK,KAAK;;AAI1B,SAAO;GAAE;GAAU;GAAW;IAC7B,CAAC,OAAO,UAAU,CAAC;AAEtB,QACE,oBAAC,yBACC,SAAS,GAAG,MACV,qBAAC;EACC,iBAAiB,IAAI;EACrB,WAAW,GAAG,EAAE,QAAQ,0BAA0B;;GAElD,qBAAC;IAAmB,WAAU;;KAC3B,eAAe,KAAK,EACnB,WAAW,kDACZ,CAAC;KACD,IAAI;KACL,oBAAC;MAAG,WAAU;gBACX,SACE,QAAQ,SAAS,CAAC,YAAY,KAAK,CAAC,CACpC,KAAK,MAAM,MACV,oBAAC;OAAqC;OAAM,WAAU;SAAzB,EAAqC,CAClE;OACD;KACL,qBAAC;MAAI,WAAU;;OACZ,aAAa,YAAY,UACvB,aAAa,YAAY,MACxB,oBAAC;QACC,WAAU;QACV;SACA;OAEL,YAAY,YAAY,UACtB,YAAY,aAAa,oBAAC,eAAY,MAAM,aAAa,OAAQ;OACnE,QACC,oBAAC,4BACC,oBAAC,aAAU,WAAU,WAAW,GACjB;OAEnB,oBAAC;QAAG,WAAU;kBACX,SAAS,OAAO,YAAY,CAAC,KAAK,MAAM,MACvC,oBAAC;SAEC,WAAW,GAAG,KAAK,SAAS,UAAU,6BAA6B;SAC7D;WAFD,EAGL,CACF;SACC;;OACD;KACN,qBAAC;MAAG,WAAU;iBACX,aAAa,YAAY,UACvB,aAAa,YAAY,MAAM,oBAAC;OAAa,WAAU;OAAM;QAAiB,GACjF,oBAAC;OACC,cAAW;OACX,WAAW,GACT,eAAe;QACb,MAAM;QACN,OAAO;QACP,WAAW;QACZ,CAAC,CACH;iBAED,oBAAC,eAAY,WAAU,yEAAyE;QAC7E;OAClB;;KACc;GACrB,qBAAC;IAAmB,WAAU;eAC3B,UACE,QAAQ,SAAS,CAAC,YAAY,KAAK,CAAC,CACpC,KAAK,MAAM,MACV,oBAAC;KAAiC;KAAM,WAAU;OAAzB,EAAkD,CAC3E,EACJ,qBAAC;KAAI,WAAU;;MACZ,UAAU,OAAO,YAAY,CAAC,KAAK,MAAM,MACxC,oBAAC;OAEO;OACN,WAAW,GAAG,KAAK,SAAS,UAAU,mBAAmB;SAFpD,EAGL,CACF;MACF,oBAAC;OAAI,MAAK;OAAY,WAAU;QAAqB;MACpD,QACC,qBAAC;OACC,oBAAC,aAAU,WAAU,WAAW;OAChC,oBAAC,uBAAqB;OACtB,oBAAC,eAAY,WAAU,oCAAoC;UAC5C;MAElB,YAAY,YAAY,UACtB,YAAY,aAAa,oBAAC,eAAY,MAAM,aAAa,OAAQ;;MAChE;KACa;GACrB,oBAAC,eAAe,oBACd,oBAAC,eAAe;IACd,YAAY;IACZ,WAAU;IACV,OAAO;MACJ,eAAyB;MACzB,aAAuB;KACzB;cAED,oBAAC,eAAe;KAAM,WAAU;eAC9B,oBAAC,eAAe,YAAS,WAAU,uCAAuC;MACrD;KACG,GACN;;GACb,GAEf;;AAIN,SAAS,sBAAsB,OAA2C;CACxE,MAAM,CAAC,MAAM,WAAW,SAAS,MAAM;CAEvC,MAAM,UAAU,gBAAgB,MAAa;AAC3C,MAAI,CAAC,KAAM;EACX,MAAM,SAAS,SAAS,eAAe,SAAS;AAChD,MAAI,UAAU,CAAC,OAAO,SAAS,EAAE,OAAsB,CAAE,SAAQ,MAAM;GACvE;AAEF,iBAAgB;AACd,SAAO,iBAAiB,SAAS,QAAQ;AAEzC,eAAa;AACX,UAAO,oBAAoB,SAAS,QAAQ;;IAE7C,EAAE,CAAC;AAEN,QACE,oBAAC;EACC,OAAO,eACE;GACL;GACA;GACD,GACD,CAAC,KAAK,CACP;YAED,oBAAC;GAAkB;GAAM,cAAc;GAAS,GAAI;IAAS;GAC3C;;AAIxB,SAAS,YAAY,MAA6B;AAChD,KAAI,eAAe,QAAQ,KAAK,aAAa,KAAM,QAAO,KAAK;AAE/D,QAAO,KAAK,SAAS;;AAGvB,SAAS,WAAW,EAClB,kBAAkB,QAClB,UACA,WACA,GAAG,SAGF;CACD,MAAM,QAAQ,eAAe,EAAE,SAAS,oBAAoB,OAAO,CAAC,IAAI;CACxE,MAAM,gBAAgB,oBAAoB,QAAQ,QAAQ,oBAAoB;AAE9E,QACE,oBAAC;EAAO,IAAG;EAAS,WAAU;YAC5B,oBAAC,sBACC,SAAS,GAAG,MACV,oBAAC;GACC,WAAW,GACT,yFACC,CAAC,iBAAiB,EAAE,SAAS,uBAC9B,UACD;GACD,GAAI;GAEH;IACG,GAER;GACK;;AAIb,SAAS,uBAAuB,EAAE,MAAM,GAAG,SAAqD;AAC9F,KAAI,KAAK,SAAS,SAAU,QAAO,oBAAC;EAAI,GAAI;YAAQ,KAAK;GAAe;AAExE,KAAI,KAAK,SAAS,QAAQ;EACxB,MAAM,WAAW,KAAK,MAAM,KAAK,OAAO,MAAM;AAC5C,OAAI,MAAM,SAAS,SACjB,QAAO,oBAACC,wBAAkB,MAAM,YAAV,EAA8B;GAGtD,MAAM,EACJ,SAAS,MAAM,OACb,oBAAC;IAAI,WAAU;cAA0D,MAAM;KAAW,GACxF,MACJ,GAAG,SACD,MAAM,QAAQ,EAAE;AAEpB,UACE,oBAAC,sBAEC,QACE,oBAAC;IACC,MAAM,MAAM;IACZ,UAAU,MAAM;IAChB,GAAI;IACJ,WAAW,GACT,gIACA,KAAK,UACN;cAEA,KAAK,YACJ;KACG;KACD,oBAAC;MAAE,WAAU;gBAAyB,MAAM;OAAS;KACrD,oBAAC;MAAE,WAAU;gBACV,MAAM;OACL;QACH;KAEA,IApBJ,GAAG,EAAE,GAAG,MAAM,MAsBnB;IAEJ;AAEF,SACE,qBAAC;GAAmB,GAAI;cACtB,oBAAC;IAAsB,WAAW,GAAG,iBAAiB,EAAE,aAAa;cAClE,KAAK,MACJ,oBAAC;KAAK,MAAM,KAAK;KAAK,UAAU,KAAK;eAClC,KAAK;MACD,GAEP,KAAK;KAEe,EACxB,oBAAC;IAAsB,WAAU;IAC9B;KACqB;IACL;;AAIzB,QACE,oBAAC;EAAmB,GAAI;YACtB,oBAAC,sBACC,QACE,oBAAC;GACO;GACN,cAAY,KAAK,SAAS,SAAS,KAAK,QAAQ;GAChD,WAAW,GAAG,gBAAgB,EAAE,SAAS,KAAK,MAAM,CAAC,CAAC;aAErD,KAAK,SAAS,SAAS,KAAK,OAAO,KAAK;IAChC,GAEb;GACiB;;AAIzB,SAAS,mBAAmB,EAAE,MAAM,aAAyD;AAC3F,KAAI,KAAK,SAAS,SAAU,QAAO,oBAAC;EAAI,WAAW,GAAG,QAAQ,UAAU;YAAG,KAAK;GAAe;CAC/F,MAAM,EAAE,YAAY,IAAI,kBAAkB;AAE1C,KAAI,KAAK,SAAS,QAAQ;EACxB,MAAM,SACJ,4CACG,KAAK,MACL,KAAK,QACL;AAGL,SACE,qBAAC;GAAI,WAAW,GAAG,sBAAsB,UAAU;cACjD,oBAAC;IAAE,WAAU;cACV,KAAK,MACJ,oBAAC;KAAK,MAAM,KAAK;KAAK,UAAU,KAAK;KAAU,eAAe,QAAQ,MAAM;eACzE;MACI,GAEP;KAEA,EACH,KAAK,MAAM,KAAK,OAAO,MACtB,oBAAC,sBAA2B,MAAM,SAAT,EAAkB,CAC3C;IACE;;AAIV,QACE,qBAAC;EACO;EACN,WAAW,IACR,CAAC,KAAK,QAAQ,KAAK,SAAS,WAC3B,gLACF,KAAK,SAAS,UACZ,eAAe;GACb,MAAM;GACN,OAAO;GACR,CAAC,EACJ,KAAK,SAAS,YACZ,eAAe;GACb,OAAO;GACP,WAAW;GACZ,CAAC,EACJ,UACD;EACD,cAAY,KAAK,SAAS,SAAS,KAAK,QAAQ;EAChD,eAAe,QAAQ,MAAM;aAE5B,KAAK,MACL,KAAK,SAAS,UAAU,KAAK;GACrB"}
|
|
1
|
+
{"version":3,"file":"client.js","names":["navItems","menuItems","Fragment"],"sources":["../../../src/layouts/home/client.tsx"],"sourcesContent":["'use client';\nimport {\n type ComponentProps,\n createContext,\n Fragment,\n use,\n useEffect,\n useCallback,\n useMemo,\n useState,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport Link from '@hanzo/docs-core/link';\nimport { cn } from '@hanzo/docs-ui/cn';\nimport {\n type LinkItemType,\n type NavOptions,\n renderTitleNav,\n resolveLinkItems,\n} from '@/layouts/shared';\nimport { LinkItem } from '@hanzo/docs-radix-ui/link-item';\nimport {\n NavigationMenuRoot,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n} from '@/components/ui/navigation-menu';\nimport { buttonVariants } from '@/components/ui/button';\nimport type { HomeLayoutProps } from '.';\nimport { LargeSearchToggle, SearchToggle } from '@/layouts/shared/search-toggle';\nimport { ThemeToggle } from '@/layouts/shared/theme-toggle';\nimport { LanguageToggle, LanguageToggleText } from '@/layouts/shared/language-toggle';\nimport { ChevronDown, Languages } from 'lucide-react';\nimport { useIsScrollTop } from '@hanzo/docs-radix-ui/hooks/use-is-scroll-top';\nimport { NavigationMenu } from '@base-ui/react';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible';\n\nconst MobileMenuContext = createContext<{\n open: boolean;\n setOpen: (open: boolean) => void;\n} | null>(null);\n\nexport const navItemVariants = cva('[&_svg]:size-4', {\n variants: {\n variant: {\n main: 'inline-flex items-center gap-1 p-2 text-fd-muted-foreground transition-colors hover:text-fd-accent-foreground data-[active=true]:text-fd-primary data-[popup-open]:text-fd-primary',\n button: buttonVariants({\n color: 'secondary',\n className: 'gap-1.5',\n }),\n icon: buttonVariants({\n color: 'ghost',\n size: 'icon',\n }),\n },\n },\n defaultVariants: {\n variant: 'main',\n },\n});\n\nexport function Header({\n nav = {},\n i18n = false,\n links,\n githubUrl,\n themeSwitch = {},\n searchToggle = {},\n}: HomeLayoutProps) {\n const { navItems, menuItems } = useMemo(() => {\n const navItems: LinkItemType[] = [];\n const menuItems: LinkItemType[] = [];\n\n for (const item of resolveLinkItems({ links, githubUrl })) {\n switch (item.on ?? 'all') {\n case 'menu':\n menuItems.push(item);\n break;\n case 'nav':\n navItems.push(item);\n break;\n default:\n navItems.push(item);\n menuItems.push(item);\n }\n }\n\n return { navItems, menuItems };\n }, [links, githubUrl]);\n\n return (\n <MobileMenuCollapsible\n render={(_, s) => (\n <HeaderRoot\n transparentMode={nav.transparentMode}\n className={cn(s.open && 'shadow-lg rounded-b-2xl')}\n >\n <NavigationMenuList className=\"flex h-14 w-full items-center px-4\">\n {renderTitleNav(nav, {\n className: 'inline-flex items-center gap-2.5 font-semibold',\n })}\n {nav.children}\n <ul className=\"flex flex-row items-center gap-2 px-6 max-sm:hidden\">\n {navItems\n .filter((item) => !isSecondary(item))\n .map((item, i) => (\n <NavigationMenuLinkItem key={i} item={item} className=\"text-sm\" />\n ))}\n </ul>\n <div className=\"flex flex-row items-center justify-end gap-1.5 flex-1 max-lg:hidden\">\n {searchToggle.enabled !== false &&\n (searchToggle.components?.lg ?? (\n <LargeSearchToggle\n className=\"w-full rounded-full ps-2.5 max-w-[240px]\"\n hideIfDisabled\n />\n ))}\n {themeSwitch.enabled !== false &&\n (themeSwitch.component ?? <ThemeToggle mode={themeSwitch?.mode} />)}\n {i18n && (\n <LanguageToggle>\n <Languages className=\"size-5\" />\n </LanguageToggle>\n )}\n <ul className=\"flex flex-row gap-2 items-center empty:hidden\">\n {navItems.filter(isSecondary).map((item, i) => (\n <NavigationMenuLinkItem\n key={i}\n className={cn(item.type === 'icon' && '-mx-1 first:ms-0 last:me-0')}\n item={item}\n />\n ))}\n </ul>\n </div>\n <ul className=\"flex flex-row items-center ms-auto -me-1.5 lg:hidden\">\n {searchToggle.enabled !== false &&\n (searchToggle.components?.sm ?? <SearchToggle className=\"p-2\" hideIfDisabled />)}\n <CollapsibleTrigger\n aria-label=\"Toggle Menu\"\n className={cn(\n buttonVariants({\n size: 'icon',\n color: 'ghost',\n className: 'group [&_svg]:size-5.5',\n }),\n )}\n >\n <ChevronDown className=\"transition-transform duration-300 group-data-[panel-open]:rotate-180\" />\n </CollapsibleTrigger>\n </ul>\n </NavigationMenuList>\n <CollapsibleContent className=\"flex flex-col px-4\">\n {menuItems\n .filter((item) => !isSecondary(item))\n .map((item, i) => (\n <MobileMenuLinkItem key={i} item={item} className=\"first:mt-4 sm:hidden\" />\n ))}\n <div className=\"-ms-1.5 flex flex-row pt-2 pb-4 items-center justify-end gap-2\">\n {menuItems.filter(isSecondary).map((item, i) => (\n <MobileMenuLinkItem\n key={i}\n item={item}\n className={cn(item.type === 'icon' && '-mx-1 first:ms-0')}\n />\n ))}\n <div role=\"separator\" className=\"flex-1 sm:hidden\" />\n {i18n && (\n <LanguageToggle>\n <Languages className=\"size-5\" />\n <LanguageToggleText />\n <ChevronDown className=\"size-3 text-fd-muted-foreground\" />\n </LanguageToggle>\n )}\n {themeSwitch.enabled !== false &&\n (themeSwitch.component ?? <ThemeToggle mode={themeSwitch?.mode} />)}\n </div>\n </CollapsibleContent>\n <NavigationMenu.Portal>\n <NavigationMenu.Positioner\n sideOffset={10}\n className=\"z-20 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[left,right] duration-(--duration) ease-(--easing) data-[instant]:transition-none\"\n style={{\n ['--duration' as string]: '0.35s',\n ['--easing' as string]: 'cubic-bezier(0.22, 1, 0.36, 1)',\n }}\n >\n <NavigationMenu.Popup className=\"relative w-(--popup-width) h-(--popup-height) max-w-(--fd-layout-width,1400px) origin-(--transform-origin) rounded-xl bg-fd-background/80 border backdrop-blur-lg shadow-lg transition-[opacity,transform,width,height,scale,translate] duration-(--duration) ease-(--easing) data-[ending-style]:scale-90 data-[ending-style]:opacity-0 data-[ending-style]:duration-150 data-[starting-style]:scale-90 data-[starting-style]:opacity-0\">\n <NavigationMenu.Viewport className=\"relative size-full overflow-hidden\" />\n </NavigationMenu.Popup>\n </NavigationMenu.Positioner>\n </NavigationMenu.Portal>\n </HeaderRoot>\n )}\n />\n );\n}\n\nfunction MobileMenuCollapsible(props: ComponentProps<typeof Collapsible>) {\n const [open, setOpen] = useState(false);\n\n const onClick = useCallback((e: Event) => {\n if (!open) return;\n const header = document.getElementById('nd-nav');\n if (header && !header.contains(e.target as HTMLElement)) setOpen(false);\n }, [open]);\n\n useEffect(() => {\n window.addEventListener('click', onClick);\n\n return () => {\n window.removeEventListener('click', onClick);\n };\n }, [onClick]);\n\n return (\n <MobileMenuContext\n value={useMemo(\n () => ({\n open,\n setOpen,\n }),\n [open],\n )}\n >\n <Collapsible open={open} onOpenChange={setOpen} {...props} />\n </MobileMenuContext>\n );\n}\n\nfunction isSecondary(item: LinkItemType): boolean {\n if ('secondary' in item && item.secondary != null) return item.secondary;\n\n return item.type === 'icon';\n}\n\nfunction HeaderRoot({\n transparentMode = 'none',\n children,\n className,\n ...props\n}: ComponentProps<'div'> & {\n transparentMode?: NavOptions['transparentMode'];\n}) {\n const isTop = useIsScrollTop({ enabled: transparentMode === 'top' }) ?? true;\n const isTransparent = transparentMode === 'top' ? isTop : transparentMode === 'always';\n\n return (\n <header id=\"nd-nav\" className=\"sticky h-14 top-0 z-40\">\n <NavigationMenuRoot\n render={(_, s) => (\n <nav\n className={cn(\n 'w-full backdrop-blur-lg border-b transition-colors mx-auto max-w-(--fd-layout-width)',\n (!isTransparent || s.open) && 'bg-fd-background/80',\n className,\n )}\n {...props}\n >\n {children}\n </nav>\n )}\n />\n </header>\n );\n}\n\nfunction NavigationMenuLinkItem({ item, ...props }: { item: LinkItemType; className?: string }) {\n if (item.type === 'custom') return <div {...props}>{item.children}</div>;\n\n if (item.type === 'menu') {\n const children = item.items.map((child, j) => {\n if (child.type === 'custom') {\n return <Fragment key={j}>{child.children}</Fragment>;\n }\n\n const {\n banner = child.icon ? (\n <div className=\"w-fit rounded-md border bg-fd-muted p-1 [&_svg]:size-4\">{child.icon}</div>\n ) : null,\n ...rest\n } = child.menu ?? {};\n\n return (\n <NavigationMenuLink\n key={`${j}-${child.url}`}\n render={\n <Link\n href={child.url}\n external={child.external}\n {...rest}\n className={cn(\n 'flex flex-col gap-2 rounded-lg border bg-fd-card p-3 transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground',\n rest.className,\n )}\n >\n {rest.children ?? (\n <>\n {banner}\n <p className=\"text-base font-medium\">{child.text}</p>\n <p className=\"text-sm text-fd-muted-foreground empty:hidden\">\n {child.description}\n </p>\n </>\n )}\n </Link>\n }\n />\n );\n });\n\n return (\n <NavigationMenuItem {...props}>\n <NavigationMenuTrigger className={cn(navItemVariants(), 'rounded-md')}>\n {item.url ? (\n <Link href={item.url} external={item.external}>\n {item.text}\n </Link>\n ) : (\n item.text\n )}\n </NavigationMenuTrigger>\n <NavigationMenuContent className=\"grid grid-cols-1 gap-2 p-4 md:grid-cols-2 lg:grid-cols-3\">\n {children}\n </NavigationMenuContent>\n </NavigationMenuItem>\n );\n }\n\n return (\n <NavigationMenuItem {...props}>\n <NavigationMenuLink\n render={\n <LinkItem\n item={item}\n aria-label={item.type === 'icon' ? item.label : undefined}\n className={cn(navItemVariants({ variant: item.type }))}\n >\n {item.type === 'icon' ? item.icon : item.text}\n </LinkItem>\n }\n />\n </NavigationMenuItem>\n );\n}\n\nfunction MobileMenuLinkItem({ item, className }: { item: LinkItemType; className?: string }) {\n if (item.type === 'custom') return <div className={cn('grid', className)}>{item.children}</div>;\n const { setOpen } = use(MobileMenuContext)!;\n\n if (item.type === 'menu') {\n const header = (\n <>\n {item.icon}\n {item.text}\n </>\n );\n\n return (\n <div className={cn('mb-4 flex flex-col', className)}>\n <p className=\"mb-1 text-sm text-fd-muted-foreground\">\n {item.url ? (\n <Link href={item.url} external={item.external} onClick={() => setOpen(false)}>\n {header}\n </Link>\n ) : (\n header\n )}\n </p>\n {item.items.map((child, i) => (\n <MobileMenuLinkItem key={i} item={child} />\n ))}\n </div>\n );\n }\n\n return (\n <LinkItem\n item={item}\n className={cn(\n (!item.type || item.type === 'main') &&\n 'inline-flex items-center gap-2 py-1.5 transition-colors hover:text-fd-popover-foreground/50 data-[active=true]:font-medium data-[active=true]:text-fd-primary [&_svg]:size-4',\n item.type === 'icon' &&\n buttonVariants({\n size: 'icon',\n color: 'ghost',\n }),\n item.type === 'button' &&\n buttonVariants({\n color: 'secondary',\n className: 'gap-1.5 [&_svg]:size-4',\n }),\n className,\n )}\n aria-label={item.type === 'icon' ? item.label : undefined}\n onClick={() => setOpen(false)}\n >\n {item.icon}\n {item.type !== 'icon' && item.text}\n </LinkItem>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAuCA,MAAM,oBAAoB,cAGhB,KAAK;AAEf,MAAa,kBAAkB,IAAI,kBAAkB;CACnD,UAAU,EACR,SAAS;EACP,MAAM;EACN,QAAQ,eAAe;GACrB,OAAO;GACP,WAAW;GACZ,CAAC;EACF,MAAM,eAAe;GACnB,OAAO;GACP,MAAM;GACP,CAAC;EACH,EACF;CACD,iBAAiB,EACf,SAAS,QACV;CACF,CAAC;AAEF,SAAgB,OAAO,EACrB,MAAM,EAAE,EACR,OAAO,OACP,OACA,WACA,cAAc,EAAE,EAChB,eAAe,EAAE,IACC;CAClB,MAAM,EAAE,UAAU,cAAc,cAAc;EAC5C,MAAMA,aAA2B,EAAE;EACnC,MAAMC,cAA4B,EAAE;AAEpC,OAAK,MAAM,QAAQ,iBAAiB;GAAE;GAAO;GAAW,CAAC,CACvD,SAAQ,KAAK,MAAM,OAAnB;GACE,KAAK;AACH,gBAAU,KAAK,KAAK;AACpB;GACF,KAAK;AACH,eAAS,KAAK,KAAK;AACnB;GACF;AACE,eAAS,KAAK,KAAK;AACnB,gBAAU,KAAK,KAAK;;AAI1B,SAAO;GAAE;GAAU;GAAW;IAC7B,CAAC,OAAO,UAAU,CAAC;AAEtB,QACE,oBAAC,yBACC,SAAS,GAAG,MACV,qBAAC;EACC,iBAAiB,IAAI;EACrB,WAAW,GAAG,EAAE,QAAQ,0BAA0B;;GAElD,qBAAC;IAAmB,WAAU;;KAC3B,eAAe,KAAK,EACnB,WAAW,kDACZ,CAAC;KACD,IAAI;KACL,oBAAC;MAAG,WAAU;gBACX,SACE,QAAQ,SAAS,CAAC,YAAY,KAAK,CAAC,CACpC,KAAK,MAAM,MACV,oBAAC;OAAqC;OAAM,WAAU;SAAzB,EAAqC,CAClE;OACD;KACL,qBAAC;MAAI,WAAU;;OACZ,aAAa,YAAY,UACvB,aAAa,YAAY,MACxB,oBAAC;QACC,WAAU;QACV;SACA;OAEL,YAAY,YAAY,UACtB,YAAY,aAAa,oBAAC,eAAY,MAAM,aAAa,OAAQ;OACnE,QACC,oBAAC,4BACC,oBAAC,aAAU,WAAU,WAAW,GACjB;OAEnB,oBAAC;QAAG,WAAU;kBACX,SAAS,OAAO,YAAY,CAAC,KAAK,MAAM,MACvC,oBAAC;SAEC,WAAW,GAAG,KAAK,SAAS,UAAU,6BAA6B;SAC7D;WAFD,EAGL,CACF;SACC;;OACD;KACN,qBAAC;MAAG,WAAU;iBACX,aAAa,YAAY,UACvB,aAAa,YAAY,MAAM,oBAAC;OAAa,WAAU;OAAM;QAAiB,GACjF,oBAAC;OACC,cAAW;OACX,WAAW,GACT,eAAe;QACb,MAAM;QACN,OAAO;QACP,WAAW;QACZ,CAAC,CACH;iBAED,oBAAC,eAAY,WAAU,yEAAyE;QAC7E;OAClB;;KACc;GACrB,qBAAC;IAAmB,WAAU;eAC3B,UACE,QAAQ,SAAS,CAAC,YAAY,KAAK,CAAC,CACpC,KAAK,MAAM,MACV,oBAAC;KAAiC;KAAM,WAAU;OAAzB,EAAkD,CAC3E,EACJ,qBAAC;KAAI,WAAU;;MACZ,UAAU,OAAO,YAAY,CAAC,KAAK,MAAM,MACxC,oBAAC;OAEO;OACN,WAAW,GAAG,KAAK,SAAS,UAAU,mBAAmB;SAFpD,EAGL,CACF;MACF,oBAAC;OAAI,MAAK;OAAY,WAAU;QAAqB;MACpD,QACC,qBAAC;OACC,oBAAC,aAAU,WAAU,WAAW;OAChC,oBAAC,uBAAqB;OACtB,oBAAC,eAAY,WAAU,oCAAoC;UAC5C;MAElB,YAAY,YAAY,UACtB,YAAY,aAAa,oBAAC,eAAY,MAAM,aAAa,OAAQ;;MAChE;KACa;GACrB,oBAAC,eAAe,oBACd,oBAAC,eAAe;IACd,YAAY;IACZ,WAAU;IACV,OAAO;MACJ,eAAyB;MACzB,aAAuB;KACzB;cAED,oBAAC,eAAe;KAAM,WAAU;eAC9B,oBAAC,eAAe,YAAS,WAAU,uCAAuC;MACrD;KACG,GACN;;GACb,GAEf;;AAIN,SAAS,sBAAsB,OAA2C;CACxE,MAAM,CAAC,MAAM,WAAW,SAAS,MAAM;CAEvC,MAAM,UAAU,aAAa,MAAa;AACxC,MAAI,CAAC,KAAM;EACX,MAAM,SAAS,SAAS,eAAe,SAAS;AAChD,MAAI,UAAU,CAAC,OAAO,SAAS,EAAE,OAAsB,CAAE,SAAQ,MAAM;IACtE,CAAC,KAAK,CAAC;AAEV,iBAAgB;AACd,SAAO,iBAAiB,SAAS,QAAQ;AAEzC,eAAa;AACX,UAAO,oBAAoB,SAAS,QAAQ;;IAE7C,CAAC,QAAQ,CAAC;AAEb,QACE,oBAAC;EACC,OAAO,eACE;GACL;GACA;GACD,GACD,CAAC,KAAK,CACP;YAED,oBAAC;GAAkB;GAAM,cAAc;GAAS,GAAI;IAAS;GAC3C;;AAIxB,SAAS,YAAY,MAA6B;AAChD,KAAI,eAAe,QAAQ,KAAK,aAAa,KAAM,QAAO,KAAK;AAE/D,QAAO,KAAK,SAAS;;AAGvB,SAAS,WAAW,EAClB,kBAAkB,QAClB,UACA,WACA,GAAG,SAGF;CACD,MAAM,QAAQ,eAAe,EAAE,SAAS,oBAAoB,OAAO,CAAC,IAAI;CACxE,MAAM,gBAAgB,oBAAoB,QAAQ,QAAQ,oBAAoB;AAE9E,QACE,oBAAC;EAAO,IAAG;EAAS,WAAU;YAC5B,oBAAC,sBACC,SAAS,GAAG,MACV,oBAAC;GACC,WAAW,GACT,yFACC,CAAC,iBAAiB,EAAE,SAAS,uBAC9B,UACD;GACD,GAAI;GAEH;IACG,GAER;GACK;;AAIb,SAAS,uBAAuB,EAAE,MAAM,GAAG,SAAqD;AAC9F,KAAI,KAAK,SAAS,SAAU,QAAO,oBAAC;EAAI,GAAI;YAAQ,KAAK;GAAe;AAExE,KAAI,KAAK,SAAS,QAAQ;EACxB,MAAM,WAAW,KAAK,MAAM,KAAK,OAAO,MAAM;AAC5C,OAAI,MAAM,SAAS,SACjB,QAAO,oBAACC,wBAAkB,MAAM,YAAV,EAA8B;GAGtD,MAAM,EACJ,SAAS,MAAM,OACb,oBAAC;IAAI,WAAU;cAA0D,MAAM;KAAW,GACxF,MACJ,GAAG,SACD,MAAM,QAAQ,EAAE;AAEpB,UACE,oBAAC,sBAEC,QACE,oBAAC;IACC,MAAM,MAAM;IACZ,UAAU,MAAM;IAChB,GAAI;IACJ,WAAW,GACT,gIACA,KAAK,UACN;cAEA,KAAK,YACJ;KACG;KACD,oBAAC;MAAE,WAAU;gBAAyB,MAAM;OAAS;KACrD,oBAAC;MAAE,WAAU;gBACV,MAAM;OACL;QACH;KAEA,IApBJ,GAAG,EAAE,GAAG,MAAM,MAsBnB;IAEJ;AAEF,SACE,qBAAC;GAAmB,GAAI;cACtB,oBAAC;IAAsB,WAAW,GAAG,iBAAiB,EAAE,aAAa;cAClE,KAAK,MACJ,oBAAC;KAAK,MAAM,KAAK;KAAK,UAAU,KAAK;eAClC,KAAK;MACD,GAEP,KAAK;KAEe,EACxB,oBAAC;IAAsB,WAAU;IAC9B;KACqB;IACL;;AAIzB,QACE,oBAAC;EAAmB,GAAI;YACtB,oBAAC,sBACC,QACE,oBAAC;GACO;GACN,cAAY,KAAK,SAAS,SAAS,KAAK,QAAQ;GAChD,WAAW,GAAG,gBAAgB,EAAE,SAAS,KAAK,MAAM,CAAC,CAAC;aAErD,KAAK,SAAS,SAAS,KAAK,OAAO,KAAK;IAChC,GAEb;GACiB;;AAIzB,SAAS,mBAAmB,EAAE,MAAM,aAAyD;AAC3F,KAAI,KAAK,SAAS,SAAU,QAAO,oBAAC;EAAI,WAAW,GAAG,QAAQ,UAAU;YAAG,KAAK;GAAe;CAC/F,MAAM,EAAE,YAAY,IAAI,kBAAkB;AAE1C,KAAI,KAAK,SAAS,QAAQ;EACxB,MAAM,SACJ,4CACG,KAAK,MACL,KAAK,QACL;AAGL,SACE,qBAAC;GAAI,WAAW,GAAG,sBAAsB,UAAU;cACjD,oBAAC;IAAE,WAAU;cACV,KAAK,MACJ,oBAAC;KAAK,MAAM,KAAK;KAAK,UAAU,KAAK;KAAU,eAAe,QAAQ,MAAM;eACzE;MACI,GAEP;KAEA,EACH,KAAK,MAAM,KAAK,OAAO,MACtB,oBAAC,sBAA2B,MAAM,SAAT,EAAkB,CAC3C;IACE;;AAIV,QACE,qBAAC;EACO;EACN,WAAW,IACR,CAAC,KAAK,QAAQ,KAAK,SAAS,WAC3B,gLACF,KAAK,SAAS,UACZ,eAAe;GACb,MAAM;GACN,OAAO;GACR,CAAC,EACJ,KAAK,SAAS,YACZ,eAAe;GACb,OAAO;GACP,WAAW;GACZ,CAAC,EACJ,UACD;EACD,cAAY,KAAK,SAAS,SAAS,KAAK,QAAQ;EAChD,eAAe,QAAQ,MAAM;aAE5B,KAAK,MACL,KAAK,SAAS,UAAU,KAAK;GACrB"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { BaseLayoutProps, NavOptions } from "../shared/index.js";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react_jsx_runtime42 from "react/jsx-runtime";
|
|
3
3
|
import { ComponentProps } from "react";
|
|
4
4
|
|
|
5
5
|
//#region src/layouts/home/index.d.ts
|
|
6
6
|
interface HomeLayoutProps extends BaseLayoutProps {
|
|
7
7
|
nav?: Partial<NavOptions>;
|
|
8
8
|
}
|
|
9
|
-
declare function HomeLayout(props: HomeLayoutProps & ComponentProps<'main'>):
|
|
9
|
+
declare function HomeLayout(props: HomeLayoutProps & ComponentProps<'main'>): react_jsx_runtime42.JSX.Element;
|
|
10
10
|
//#endregion
|
|
11
11
|
export { HomeLayout, HomeLayoutProps };
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { NavigationMenuContentProps, NavigationMenuTriggerProps } from "../../components/ui/navigation-menu.js";
|
|
2
2
|
import { LinkProps } from "@hanzo/docs-core/link";
|
|
3
|
-
import * as
|
|
4
|
-
import * as
|
|
5
|
-
import * as
|
|
3
|
+
import * as react_jsx_runtime17 from "react/jsx-runtime";
|
|
4
|
+
import * as react0 from "react";
|
|
5
|
+
import * as _base_ui_react0 from "@base-ui/react";
|
|
6
6
|
|
|
7
7
|
//#region src/layouts/home/navbar.d.ts
|
|
8
|
-
declare const NavbarMenu:
|
|
8
|
+
declare const NavbarMenu: react0.ForwardRefExoticComponent<Omit<Omit<_base_ui_react0.NavigationMenuItemProps, "ref"> & react0.RefAttributes<HTMLDivElement>, "ref"> & react0.RefAttributes<HTMLDivElement>>;
|
|
9
9
|
declare function NavbarMenuContent({
|
|
10
10
|
className,
|
|
11
11
|
...props
|
|
12
|
-
}: NavigationMenuContentProps):
|
|
12
|
+
}: NavigationMenuContentProps): react_jsx_runtime17.JSX.Element;
|
|
13
13
|
declare function NavbarMenuTrigger({
|
|
14
14
|
className,
|
|
15
15
|
...props
|
|
16
|
-
}: NavigationMenuTriggerProps):
|
|
17
|
-
declare function NavbarMenuLink(props: LinkProps):
|
|
16
|
+
}: NavigationMenuTriggerProps): react_jsx_runtime17.JSX.Element;
|
|
17
|
+
declare function NavbarMenuLink(props: LinkProps): react_jsx_runtime17.JSX.Element;
|
|
18
18
|
//#endregion
|
|
19
19
|
export { NavbarMenu, NavbarMenuContent, NavbarMenuLink, NavbarMenuTrigger };
|
|
20
20
|
//# sourceMappingURL=navbar.d.ts.map
|