@fumadocs/base-ui 16.6.2 → 16.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/css/generated/docs.css +1 -3
- package/css/generated/shared.css +7 -7
- package/css/lib/shiki.css +25 -22
- package/dist/components/codeblock.js +1 -1
- package/dist/components/codeblock.js.map +1 -1
- package/dist/components/type-table.d.ts +3 -0
- package/dist/components/type-table.d.ts.map +1 -1
- package/dist/components/type-table.js.map +1 -1
- package/dist/components/ui/navigation-menu.js +1 -1
- package/dist/components/ui/navigation-menu.js.map +1 -1
- package/dist/layouts/docs/client.js +4 -4
- package/dist/layouts/docs/client.js.map +1 -1
- package/dist/layouts/docs/page/index.js +1 -1
- package/dist/layouts/docs/page/index.js.map +1 -1
- package/dist/layouts/home/client.js +5 -8
- package/dist/layouts/home/client.js.map +1 -1
- package/dist/layouts/home/navbar.js +1 -1
- package/dist/layouts/home/navbar.js.map +1 -1
- package/dist/style.css +63 -68
- package/package.json +5 -5
package/css/generated/docs.css
CHANGED
|
@@ -50,8 +50,6 @@
|
|
|
50
50
|
@source inline("as");
|
|
51
51
|
@source inline("aside");
|
|
52
52
|
@source inline("auto");
|
|
53
|
-
@source inline("auto-cols-auto");
|
|
54
|
-
@source inline("auto-rows-auto");
|
|
55
53
|
@source inline("available");
|
|
56
54
|
@source inline("backdrop-blur-sm");
|
|
57
55
|
@source inline("backdrop-blur-xs");
|
|
@@ -241,7 +239,7 @@
|
|
|
241
239
|
@source inline("max-h-[50vh]");
|
|
242
240
|
@source inline("max-md:hidden");
|
|
243
241
|
@source inline("max-md:layout:[--fd-header-height:--spacing(14)]");
|
|
244
|
-
@source inline("max-w-[
|
|
242
|
+
@source inline("max-w-[1168px]");
|
|
245
243
|
@source inline("max-w-[380px]");
|
|
246
244
|
@source inline("max-w-[900px]");
|
|
247
245
|
@source inline("max-xl:hidden");
|
package/css/generated/shared.css
CHANGED
|
@@ -215,16 +215,10 @@
|
|
|
215
215
|
@source inline("data-[active]:border-fd-primary");
|
|
216
216
|
@source inline("data-[active]:text-fd-primary");
|
|
217
217
|
@source inline("data-[closed]:animate-fd-popover-out");
|
|
218
|
-
@source inline("data-[ending-style]:data-[activation-direction=left]:translate-x-1/2");
|
|
219
|
-
@source inline("data-[ending-style]:data-[activation-direction=right]:-translate-x-1/2");
|
|
220
218
|
@source inline("data-[ending-style]:h-0");
|
|
221
|
-
@source inline("data-[ending-style]:opacity-0");
|
|
222
219
|
@source inline("data-[inactive]:hidden");
|
|
223
220
|
@source inline("data-[open]:animate-fd-popover-in");
|
|
224
|
-
@source inline("data-[starting-style]:data-[activation-direction=left]:-translate-x-1/2");
|
|
225
|
-
@source inline("data-[starting-style]:data-[activation-direction=right]:translate-x-1/2");
|
|
226
221
|
@source inline("data-[starting-style]:h-0");
|
|
227
|
-
@source inline("data-[starting-style]:opacity-0");
|
|
228
222
|
@source inline("data-accordion-value");
|
|
229
223
|
@source inline("data-active");
|
|
230
224
|
@source inline("data-card");
|
|
@@ -234,6 +228,9 @@
|
|
|
234
228
|
@source inline("data-closed:animate-fd-fade-out");
|
|
235
229
|
@source inline("data-collapsed");
|
|
236
230
|
@source inline("data-empty");
|
|
231
|
+
@source inline("data-ending-style:data-[activation-direction=left]:translate-x-1/2");
|
|
232
|
+
@source inline("data-ending-style:data-[activation-direction=right]:-translate-x-1/2");
|
|
233
|
+
@source inline("data-ending-style:opacity-0");
|
|
237
234
|
@source inline("data-hidden");
|
|
238
235
|
@source inline("data-icon");
|
|
239
236
|
@source inline("data-line-numbers");
|
|
@@ -244,6 +241,9 @@
|
|
|
244
241
|
@source inline("data-open:text-fd-accent-foreground");
|
|
245
242
|
@source inline("data-search");
|
|
246
243
|
@source inline("data-search-full");
|
|
244
|
+
@source inline("data-starting-style:data-[activation-direction=left]:-translate-x-1/2");
|
|
245
|
+
@source inline("data-starting-style:data-[activation-direction=right]:translate-x-1/2");
|
|
246
|
+
@source inline("data-starting-style:opacity-0");
|
|
247
247
|
@source inline("data-state");
|
|
248
248
|
@source inline("data-theme-toggle");
|
|
249
249
|
@source inline("date");
|
|
@@ -392,9 +392,9 @@
|
|
|
392
392
|
@source inline("grid-cols-2");
|
|
393
393
|
@source inline("grid-cols-[1fr_3fr]");
|
|
394
394
|
@source inline("group");
|
|
395
|
-
@source inline("group-data-[active]:bg-fd-primary");
|
|
396
395
|
@source inline("group-data-[open]:rotate-180");
|
|
397
396
|
@source inline("group-data-[panel-open]:rotate-90");
|
|
397
|
+
@source inline("group-data-active:bg-fd-primary");
|
|
398
398
|
@source inline("groupListeners");
|
|
399
399
|
@source inline("guides");
|
|
400
400
|
@source inline("h");
|
package/css/lib/shiki.css
CHANGED
|
@@ -4,42 +4,38 @@
|
|
|
4
4
|
|
|
5
5
|
code span {
|
|
6
6
|
color: var(--shiki-light);
|
|
7
|
+
font-style: var(--shiki-light-font-style);
|
|
7
8
|
}
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
.dark .shiki:not(.not-fumadocs-codeblock *) {
|
|
11
|
-
code span {
|
|
12
|
-
color: var(--shiki-dark);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
9
|
|
|
16
|
-
|
|
17
|
-
.line& {
|
|
10
|
+
.line {
|
|
18
11
|
position: relative;
|
|
19
|
-
min-height: 1lh;
|
|
20
12
|
padding-left: var(--padding-left);
|
|
21
13
|
padding-right: var(--padding-right);
|
|
22
14
|
}
|
|
23
15
|
|
|
24
|
-
.
|
|
16
|
+
.line:empty {
|
|
17
|
+
height: 1lh;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
&.has-focused .line:not(.focused) {
|
|
25
21
|
filter: blur(2px);
|
|
26
22
|
transition: filter 200ms;
|
|
27
23
|
}
|
|
28
24
|
|
|
29
|
-
|
|
25
|
+
&.has-focused:hover .line:not(.focused) {
|
|
30
26
|
filter: blur(0);
|
|
31
27
|
}
|
|
32
28
|
|
|
33
|
-
[data-line-numbers] .twoslash-meta-line
|
|
29
|
+
&[data-line-numbers] .twoslash-meta-line {
|
|
34
30
|
padding-left: calc(var(--padding-left) + 7 * var(--spacing));
|
|
35
31
|
}
|
|
36
32
|
|
|
37
|
-
[data-line-numbers] .line
|
|
33
|
+
&[data-line-numbers] .line {
|
|
38
34
|
counter-increment: line;
|
|
39
35
|
padding-left: calc(var(--padding-left) + 7 * var(--spacing));
|
|
40
36
|
}
|
|
41
37
|
|
|
42
|
-
[data-line-numbers] .line
|
|
38
|
+
&[data-line-numbers] .line::after {
|
|
43
39
|
position: absolute;
|
|
44
40
|
content: counter(line);
|
|
45
41
|
color: color-mix(
|
|
@@ -50,41 +46,48 @@
|
|
|
50
46
|
@apply top-0 left-4;
|
|
51
47
|
}
|
|
52
48
|
|
|
53
|
-
.diff
|
|
49
|
+
.diff::before {
|
|
54
50
|
position: absolute;
|
|
55
51
|
left: calc(var(--spacing) * 1.5);
|
|
56
52
|
}
|
|
57
53
|
|
|
58
|
-
.diff.remove
|
|
54
|
+
.diff.remove {
|
|
59
55
|
opacity: 0.7;
|
|
60
56
|
--fd-counter-color: var(--color-fd-diff-remove-symbol);
|
|
61
57
|
@apply bg-fd-diff-remove;
|
|
62
58
|
}
|
|
63
59
|
|
|
64
|
-
.diff.remove
|
|
60
|
+
.diff.remove::before {
|
|
65
61
|
content: '-';
|
|
66
62
|
@apply text-fd-diff-remove-symbol;
|
|
67
63
|
}
|
|
68
64
|
|
|
69
|
-
.diff.add
|
|
65
|
+
.diff.add {
|
|
70
66
|
--fd-counter-color: var(--color-fd-diff-add-symbol);
|
|
71
67
|
@apply bg-fd-diff-add;
|
|
72
68
|
}
|
|
73
69
|
|
|
74
|
-
.diff.add
|
|
70
|
+
.diff.add::before {
|
|
75
71
|
content: '+';
|
|
76
72
|
@apply text-fd-diff-add-symbol;
|
|
77
73
|
}
|
|
78
74
|
|
|
79
|
-
.highlighted
|
|
75
|
+
.highlighted {
|
|
80
76
|
--fd-counter-color: var(--color-fd-primary);
|
|
81
77
|
padding-left: calc(var(--padding-left) - 2px);
|
|
82
78
|
|
|
83
79
|
@apply border-l-2 border-fd-primary/50 bg-fd-primary/10;
|
|
84
80
|
}
|
|
85
81
|
|
|
86
|
-
.highlighted-word
|
|
82
|
+
.highlighted-word {
|
|
87
83
|
padding: 1px;
|
|
88
84
|
@apply border -my-px border-fd-primary/30 bg-fd-primary/10 rounded-md font-medium;
|
|
89
85
|
}
|
|
90
86
|
}
|
|
87
|
+
|
|
88
|
+
.dark .shiki:not(.not-fumadocs-codeblock *) {
|
|
89
|
+
code span {
|
|
90
|
+
color: var(--shiki-dark);
|
|
91
|
+
font-style: var(--shiki-dark-font-style);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -114,7 +114,7 @@ function CodeBlockTabsTrigger({ children, className, ...props }) {
|
|
|
114
114
|
return /* @__PURE__ */ jsxs(TabsTrigger, {
|
|
115
115
|
...props,
|
|
116
116
|
className: (s) => cn("relative group inline-flex text-sm font-medium text-nowrap items-center transition-colors gap-2 px-2 py-1.5 [&_svg]:size-3.5", s.active ? "text-fd-primary" : "hover:text-fd-accent-foreground", typeof className === "function" ? className(s) : className),
|
|
117
|
-
children: [/* @__PURE__ */ jsx("div", { className: "absolute inset-x-2 bottom-0 h-px group-data-
|
|
117
|
+
children: [/* @__PURE__ */ jsx("div", { className: "absolute inset-x-2 bottom-0 h-px group-data-active:bg-fd-primary" }), children]
|
|
118
118
|
});
|
|
119
119
|
}
|
|
120
120
|
function CodeBlockTab(props) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codeblock.js","names":[],"sources":["../../src/components/codeblock.tsx"],"sourcesContent":["'use client';\nimport { Check, Clipboard } from 'lucide-react';\nimport {\n type ComponentProps,\n createContext,\n type HTMLAttributes,\n type ReactNode,\n type RefObject,\n use,\n useMemo,\n useRef,\n} from 'react';\nimport { cn } from '@/utils/cn';\nimport { useCopyButton } from '@/utils/use-copy-button';\nimport { buttonVariants } from '@/components/ui/button';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\nimport { mergeRefs } from '@/utils/merge-refs';\n\nexport interface CodeBlockProps extends ComponentProps<'figure'> {\n /**\n * Icon of code block\n *\n * When passed as a string, it assumes the value is the HTML of icon\n */\n icon?: ReactNode;\n\n /**\n * Allow to copy code with copy button\n *\n * @defaultValue true\n */\n allowCopy?: boolean;\n\n /**\n * Keep original background color generated by Shiki or Rehype Code\n *\n * @defaultValue false\n */\n keepBackground?: boolean;\n\n viewportProps?: HTMLAttributes<HTMLElement>;\n\n /**\n * show line numbers\n */\n 'data-line-numbers'?: boolean;\n\n /**\n * @defaultValue 1\n */\n 'data-line-numbers-start'?: number;\n\n Actions?: (props: { className?: string; children?: ReactNode }) => ReactNode;\n}\n\nconst TabsContext = createContext<{\n containerRef: RefObject<HTMLDivElement | null>;\n nested: boolean;\n} | null>(null);\n\nexport function Pre(props: ComponentProps<'pre'>) {\n return (\n <pre {...props} className={cn('min-w-full w-max *:flex *:flex-col', props.className)}>\n {props.children}\n </pre>\n );\n}\n\nexport function CodeBlock({\n ref,\n title,\n allowCopy = true,\n keepBackground = false,\n icon,\n viewportProps = {},\n children,\n Actions = (props) => <div {...props} className={cn('empty:hidden', props.className)} />,\n ...props\n}: CodeBlockProps) {\n const inTab = use(TabsContext) !== null;\n const areaRef = useRef<HTMLDivElement>(null);\n\n return (\n <figure\n ref={ref}\n dir=\"ltr\"\n {...props}\n tabIndex={-1}\n className={cn(\n inTab ? 'bg-fd-secondary -mx-px -mb-px last:rounded-b-xl' : 'my-4 bg-fd-card rounded-xl',\n keepBackground && 'bg-(--shiki-light-bg) dark:bg-(--shiki-dark-bg)',\n\n 'shiki relative border shadow-sm not-prose overflow-hidden text-sm',\n props.className,\n )}\n >\n {title ? (\n <div className=\"flex text-fd-muted-foreground items-center gap-2 h-9.5 border-b px-4\">\n {typeof icon === 'string' ? (\n <div\n className=\"[&_svg]:size-3.5\"\n dangerouslySetInnerHTML={{\n __html: icon,\n }}\n />\n ) : (\n icon\n )}\n <figcaption className=\"flex-1 truncate\">{title}</figcaption>\n {Actions({\n className: '-me-2',\n children: allowCopy && <CopyButton containerRef={areaRef} />,\n })}\n </div>\n ) : (\n Actions({\n className:\n 'absolute top-2 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground',\n children: allowCopy && <CopyButton containerRef={areaRef} />,\n })\n )}\n <div\n ref={areaRef}\n {...viewportProps}\n role=\"region\"\n tabIndex={0}\n className={cn(\n 'text-[0.8125rem] py-3.5 overflow-auto max-h-[600px] fd-scroll-container focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-fd-ring',\n viewportProps.className,\n )}\n style={\n {\n // space for toolbar\n '--padding-right': !title ? 'calc(var(--spacing) * 8)' : undefined,\n counterSet: props['data-line-numbers']\n ? `line ${Number(props['data-line-numbers-start'] ?? 1) - 1}`\n : undefined,\n ...viewportProps.style,\n } as object\n }\n >\n {children}\n </div>\n </figure>\n );\n}\n\nfunction CopyButton({\n className,\n containerRef,\n ...props\n}: ComponentProps<'button'> & {\n containerRef: RefObject<HTMLElement | null>;\n}) {\n const [checked, onClick] = useCopyButton(() => {\n const pre = containerRef.current?.getElementsByTagName('pre').item(0);\n if (!pre) return;\n\n const clone = pre.cloneNode(true) as HTMLElement;\n clone.querySelectorAll('.nd-copy-ignore').forEach((node) => {\n node.replaceWith('\\n');\n });\n\n void navigator.clipboard.writeText(clone.textContent ?? '');\n });\n\n return (\n <button\n type=\"button\"\n data-checked={checked || undefined}\n className={cn(\n buttonVariants({\n className: 'hover:text-fd-accent-foreground data-checked:text-fd-accent-foreground',\n size: 'icon-xs',\n }),\n className,\n )}\n aria-label={checked ? 'Copied Text' : 'Copy Text'}\n onClick={onClick}\n {...props}\n >\n {checked ? <Check /> : <Clipboard />}\n </button>\n );\n}\n\nexport function CodeBlockTabs({ ref, className, ...props }: ComponentProps<typeof Tabs>) {\n const containerRef = useRef<HTMLDivElement>(null);\n const nested = use(TabsContext) !== null;\n\n return (\n <Tabs\n ref={mergeRefs(containerRef, ref)}\n {...props}\n className={(s) =>\n cn(\n 'bg-fd-card rounded-xl border',\n !nested && 'my-4',\n typeof className === 'function' ? className(s) : className,\n )\n }\n >\n <TabsContext\n value={useMemo(\n () => ({\n containerRef,\n nested,\n }),\n [nested],\n )}\n >\n {props.children}\n </TabsContext>\n </Tabs>\n );\n}\n\nexport function CodeBlockTabsList({ className, ...props }: ComponentProps<typeof TabsList>) {\n return (\n <TabsList\n {...props}\n className={(s) =>\n cn(\n 'flex flex-row px-2 overflow-x-auto text-fd-muted-foreground',\n typeof className === 'function' ? className(s) : className,\n )\n }\n >\n {props.children}\n </TabsList>\n );\n}\n\nexport function CodeBlockTabsTrigger({\n children,\n className,\n ...props\n}: ComponentProps<typeof TabsTrigger>) {\n return (\n <TabsTrigger\n {...props}\n className={(s) =>\n cn(\n 'relative group inline-flex text-sm font-medium text-nowrap items-center transition-colors gap-2 px-2 py-1.5 [&_svg]:size-3.5',\n s.active ? 'text-fd-primary' : 'hover:text-fd-accent-foreground',\n typeof className === 'function' ? className(s) : className,\n )\n }\n >\n <div className=\"absolute inset-x-2 bottom-0 h-px group-data-
|
|
1
|
+
{"version":3,"file":"codeblock.js","names":[],"sources":["../../src/components/codeblock.tsx"],"sourcesContent":["'use client';\nimport { Check, Clipboard } from 'lucide-react';\nimport {\n type ComponentProps,\n createContext,\n type HTMLAttributes,\n type ReactNode,\n type RefObject,\n use,\n useMemo,\n useRef,\n} from 'react';\nimport { cn } from '@/utils/cn';\nimport { useCopyButton } from '@/utils/use-copy-button';\nimport { buttonVariants } from '@/components/ui/button';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\nimport { mergeRefs } from '@/utils/merge-refs';\n\nexport interface CodeBlockProps extends ComponentProps<'figure'> {\n /**\n * Icon of code block\n *\n * When passed as a string, it assumes the value is the HTML of icon\n */\n icon?: ReactNode;\n\n /**\n * Allow to copy code with copy button\n *\n * @defaultValue true\n */\n allowCopy?: boolean;\n\n /**\n * Keep original background color generated by Shiki or Rehype Code\n *\n * @defaultValue false\n */\n keepBackground?: boolean;\n\n viewportProps?: HTMLAttributes<HTMLElement>;\n\n /**\n * show line numbers\n */\n 'data-line-numbers'?: boolean;\n\n /**\n * @defaultValue 1\n */\n 'data-line-numbers-start'?: number;\n\n Actions?: (props: { className?: string; children?: ReactNode }) => ReactNode;\n}\n\nconst TabsContext = createContext<{\n containerRef: RefObject<HTMLDivElement | null>;\n nested: boolean;\n} | null>(null);\n\nexport function Pre(props: ComponentProps<'pre'>) {\n return (\n <pre {...props} className={cn('min-w-full w-max *:flex *:flex-col', props.className)}>\n {props.children}\n </pre>\n );\n}\n\nexport function CodeBlock({\n ref,\n title,\n allowCopy = true,\n keepBackground = false,\n icon,\n viewportProps = {},\n children,\n Actions = (props) => <div {...props} className={cn('empty:hidden', props.className)} />,\n ...props\n}: CodeBlockProps) {\n const inTab = use(TabsContext) !== null;\n const areaRef = useRef<HTMLDivElement>(null);\n\n return (\n <figure\n ref={ref}\n dir=\"ltr\"\n {...props}\n tabIndex={-1}\n className={cn(\n inTab ? 'bg-fd-secondary -mx-px -mb-px last:rounded-b-xl' : 'my-4 bg-fd-card rounded-xl',\n keepBackground && 'bg-(--shiki-light-bg) dark:bg-(--shiki-dark-bg)',\n\n 'shiki relative border shadow-sm not-prose overflow-hidden text-sm',\n props.className,\n )}\n >\n {title ? (\n <div className=\"flex text-fd-muted-foreground items-center gap-2 h-9.5 border-b px-4\">\n {typeof icon === 'string' ? (\n <div\n className=\"[&_svg]:size-3.5\"\n dangerouslySetInnerHTML={{\n __html: icon,\n }}\n />\n ) : (\n icon\n )}\n <figcaption className=\"flex-1 truncate\">{title}</figcaption>\n {Actions({\n className: '-me-2',\n children: allowCopy && <CopyButton containerRef={areaRef} />,\n })}\n </div>\n ) : (\n Actions({\n className:\n 'absolute top-2 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground',\n children: allowCopy && <CopyButton containerRef={areaRef} />,\n })\n )}\n <div\n ref={areaRef}\n {...viewportProps}\n role=\"region\"\n tabIndex={0}\n className={cn(\n 'text-[0.8125rem] py-3.5 overflow-auto max-h-[600px] fd-scroll-container focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-fd-ring',\n viewportProps.className,\n )}\n style={\n {\n // space for toolbar\n '--padding-right': !title ? 'calc(var(--spacing) * 8)' : undefined,\n counterSet: props['data-line-numbers']\n ? `line ${Number(props['data-line-numbers-start'] ?? 1) - 1}`\n : undefined,\n ...viewportProps.style,\n } as object\n }\n >\n {children}\n </div>\n </figure>\n );\n}\n\nfunction CopyButton({\n className,\n containerRef,\n ...props\n}: ComponentProps<'button'> & {\n containerRef: RefObject<HTMLElement | null>;\n}) {\n const [checked, onClick] = useCopyButton(() => {\n const pre = containerRef.current?.getElementsByTagName('pre').item(0);\n if (!pre) return;\n\n const clone = pre.cloneNode(true) as HTMLElement;\n clone.querySelectorAll('.nd-copy-ignore').forEach((node) => {\n node.replaceWith('\\n');\n });\n\n void navigator.clipboard.writeText(clone.textContent ?? '');\n });\n\n return (\n <button\n type=\"button\"\n data-checked={checked || undefined}\n className={cn(\n buttonVariants({\n className: 'hover:text-fd-accent-foreground data-checked:text-fd-accent-foreground',\n size: 'icon-xs',\n }),\n className,\n )}\n aria-label={checked ? 'Copied Text' : 'Copy Text'}\n onClick={onClick}\n {...props}\n >\n {checked ? <Check /> : <Clipboard />}\n </button>\n );\n}\n\nexport function CodeBlockTabs({ ref, className, ...props }: ComponentProps<typeof Tabs>) {\n const containerRef = useRef<HTMLDivElement>(null);\n const nested = use(TabsContext) !== null;\n\n return (\n <Tabs\n ref={mergeRefs(containerRef, ref)}\n {...props}\n className={(s) =>\n cn(\n 'bg-fd-card rounded-xl border',\n !nested && 'my-4',\n typeof className === 'function' ? className(s) : className,\n )\n }\n >\n <TabsContext\n value={useMemo(\n () => ({\n containerRef,\n nested,\n }),\n [nested],\n )}\n >\n {props.children}\n </TabsContext>\n </Tabs>\n );\n}\n\nexport function CodeBlockTabsList({ className, ...props }: ComponentProps<typeof TabsList>) {\n return (\n <TabsList\n {...props}\n className={(s) =>\n cn(\n 'flex flex-row px-2 overflow-x-auto text-fd-muted-foreground',\n typeof className === 'function' ? className(s) : className,\n )\n }\n >\n {props.children}\n </TabsList>\n );\n}\n\nexport function CodeBlockTabsTrigger({\n children,\n className,\n ...props\n}: ComponentProps<typeof TabsTrigger>) {\n return (\n <TabsTrigger\n {...props}\n className={(s) =>\n cn(\n 'relative group inline-flex text-sm font-medium text-nowrap items-center transition-colors gap-2 px-2 py-1.5 [&_svg]:size-3.5',\n s.active ? 'text-fd-primary' : 'hover:text-fd-accent-foreground',\n typeof className === 'function' ? className(s) : className,\n )\n }\n >\n <div className=\"absolute inset-x-2 bottom-0 h-px group-data-active:bg-fd-primary\" />\n {children}\n </TabsTrigger>\n );\n}\n\nexport function CodeBlockTab(props: ComponentProps<typeof TabsContent>) {\n return <TabsContent {...props} />;\n}\n"],"mappings":";;;;;;;;;;;;AAuDA,MAAM,cAAc,cAGV,KAAK;AAEf,SAAgB,IAAI,OAA8B;AAChD,QACE,oBAAC;EAAI,GAAI;EAAO,WAAW,GAAG,sCAAsC,MAAM,UAAU;YACjF,MAAM;GACH;;AAIV,SAAgB,UAAU,EACxB,KACA,OACA,YAAY,MACZ,iBAAiB,OACjB,MACA,gBAAgB,EAAE,EAClB,UACA,WAAW,UAAU,oBAAC;CAAI,GAAI;CAAO,WAAW,GAAG,gBAAgB,MAAM,UAAU;EAAI,EACvF,GAAG,SACc;CACjB,MAAM,QAAQ,IAAI,YAAY,KAAK;CACnC,MAAM,UAAU,OAAuB,KAAK;AAE5C,QACE,qBAAC;EACM;EACL,KAAI;EACJ,GAAI;EACJ,UAAU;EACV,WAAW,GACT,QAAQ,oDAAoD,8BAC5D,kBAAkB,mDAElB,qEACA,MAAM,UACP;aAEA,QACC,qBAAC;GAAI,WAAU;;IACZ,OAAO,SAAS,WACf,oBAAC;KACC,WAAU;KACV,yBAAyB,EACvB,QAAQ,MACT;MACD,GAEF;IAEF,oBAAC;KAAW,WAAU;eAAmB;MAAmB;IAC3D,QAAQ;KACP,WAAW;KACX,UAAU,aAAa,oBAAC,cAAW,cAAc,UAAW;KAC7D,CAAC;;IACE,GAEN,QAAQ;GACN,WACE;GACF,UAAU,aAAa,oBAAC,cAAW,cAAc,UAAW;GAC7D,CAAC,EAEJ,oBAAC;GACC,KAAK;GACL,GAAI;GACJ,MAAK;GACL,UAAU;GACV,WAAW,GACT,+KACA,cAAc,UACf;GACD,OACE;IAEE,mBAAmB,CAAC,QAAQ,6BAA6B;IACzD,YAAY,MAAM,uBACd,QAAQ,OAAO,MAAM,8BAA8B,EAAE,GAAG,MACxD;IACJ,GAAG,cAAc;IAClB;GAGF;IACG;GACC;;AAIb,SAAS,WAAW,EAClB,WACA,cACA,GAAG,SAGF;CACD,MAAM,CAAC,SAAS,WAAW,oBAAoB;EAC7C,MAAM,MAAM,aAAa,SAAS,qBAAqB,MAAM,CAAC,KAAK,EAAE;AACrE,MAAI,CAAC,IAAK;EAEV,MAAM,QAAQ,IAAI,UAAU,KAAK;AACjC,QAAM,iBAAiB,kBAAkB,CAAC,SAAS,SAAS;AAC1D,QAAK,YAAY,KAAK;IACtB;AAEF,EAAK,UAAU,UAAU,UAAU,MAAM,eAAe,GAAG;GAC3D;AAEF,QACE,oBAAC;EACC,MAAK;EACL,gBAAc,WAAW;EACzB,WAAW,GACT,eAAe;GACb,WAAW;GACX,MAAM;GACP,CAAC,EACF,UACD;EACD,cAAY,UAAU,gBAAgB;EAC7B;EACT,GAAI;YAEH,UAAU,oBAAC,UAAQ,GAAG,oBAAC,cAAY;GAC7B;;AAIb,SAAgB,cAAc,EAAE,KAAK,WAAW,GAAG,SAAsC;CACvF,MAAM,eAAe,OAAuB,KAAK;CACjD,MAAM,SAAS,IAAI,YAAY,KAAK;AAEpC,QACE,oBAAC;EACC,KAAK,UAAU,cAAc,IAAI;EACjC,GAAI;EACJ,YAAY,MACV,GACE,gCACA,CAAC,UAAU,QACX,OAAO,cAAc,aAAa,UAAU,EAAE,GAAG,UAClD;YAGH,oBAAC;GACC,OAAO,eACE;IACL;IACA;IACD,GACD,CAAC,OAAO,CACT;aAEA,MAAM;IACK;GACT;;AAIX,SAAgB,kBAAkB,EAAE,WAAW,GAAG,SAA0C;AAC1F,QACE,oBAAC;EACC,GAAI;EACJ,YAAY,MACV,GACE,+DACA,OAAO,cAAc,aAAa,UAAU,EAAE,GAAG,UAClD;YAGF,MAAM;GACE;;AAIf,SAAgB,qBAAqB,EACnC,UACA,WACA,GAAG,SACkC;AACrC,QACE,qBAAC;EACC,GAAI;EACJ,YAAY,MACV,GACE,gIACA,EAAE,SAAS,oBAAoB,mCAC/B,OAAO,cAAc,aAAa,UAAU,EAAE,GAAG,UAClD;aAGH,oBAAC,SAAI,WAAU,qEAAqE,EACnF;GACW;;AAIlB,SAAgB,aAAa,OAA2C;AACtE,QAAO,oBAAC,eAAY,GAAI,QAAS"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-table.d.ts","names":[],"sources":["../../src/components/type-table.tsx"],"mappings":";;;;UASiB,aAAA;EACf,IAAA;EACA,WAAA,EAAa,SAAA;AAAA;AAAA,UAGE,QAAA;;;;EAIf,WAAA,GAAc,SAAA;EAPD;;;EAYb,IAAA,EAAM,SAAA;EATiB;;;EAcvB,eAAA,GAAkB,SAAA;EAAA;;;EAKlB,mBAAA;EAEA,OAAA,GAAU,SAAA;EAEV,QAAA;EACA,UAAA;
|
|
1
|
+
{"version":3,"file":"type-table.d.ts","names":[],"sources":["../../src/components/type-table.tsx"],"mappings":";;;;UASiB,aAAA;EACf,IAAA;EACA,WAAA,EAAa,SAAA;AAAA;AAAA,UAGE,QAAA;;;;EAIf,WAAA,GAAc,SAAA;EAPD;;;EAYb,IAAA,EAAM,SAAA;EATiB;;;EAcvB,eAAA,GAAkB,SAAA;EAAA;;;EAKlB,mBAAA;EAEA,OAAA,GAAU,SAAA;EAEV,QAAA;EACA,UAAA;EApBc;;;EAyBd,UAAA,GAAa,aAAA;EAEb,OAAA,GAAU,SAAA;AAAA;AAAA,iBAKI,SAAA,CAAA;EACd,EAAA;EACA,IAAA;EACA,SAAA;EAAA,GACG;AAAA;EACA,IAAA,EAAM,MAAA,SAAe,QAAA;AAAA,IAAc,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-table.js","names":[],"sources":["../../src/components/type-table.tsx"],"sourcesContent":["'use client';\n\nimport { ChevronDown } from 'lucide-react';\nimport Link from 'fumadocs-core/link';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '@/utils/cn';\nimport { type ComponentProps, type ReactNode, useEffect, useState } from 'react';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible';\n\nexport interface ParameterNode {\n name: string;\n description: ReactNode;\n}\n\nexport interface TypeNode {\n /**\n * Additional description of the field\n */\n description?: ReactNode;\n\n /**\n * type signature (short)\n */\n type: ReactNode;\n\n /**\n * type signature (full)\n */\n typeDescription?: ReactNode;\n\n /**\n * Optional `href` for the type\n */\n typeDescriptionLink?: string;\n\n default?: ReactNode;\n\n required?: boolean;\n deprecated?: boolean;\n\n parameters?: ParameterNode[];\n\n returns?: ReactNode;\n}\n\nconst fieldVariants = cva('text-fd-muted-foreground not-prose pe-2');\n\nexport function TypeTable({\n id,\n type,\n className,\n ...props\n}: { type: Record<string, TypeNode> } & ComponentProps<'div'>) {\n return (\n <div\n id={id}\n className={cn(\n '@container flex flex-col p-1 bg-fd-card text-fd-card-foreground rounded-2xl border my-6 text-sm overflow-hidden',\n className,\n )}\n {...props}\n >\n <div className=\"flex font-medium items-center px-3 py-1 not-prose text-fd-muted-foreground\">\n <p className=\"w-1/4\">Prop</p>\n <p className=\"@max-xl:hidden\">Type</p>\n </div>\n {Object.entries(type).map(([key, value]) => (\n <Item key={key} parentId={id} name={key} item={value} />\n ))}\n </div>\n );\n}\n\nfunction Item({\n parentId,\n name,\n item: {\n parameters = [],\n description,\n required = false,\n deprecated,\n typeDescription,\n default: defaultValue,\n type,\n typeDescriptionLink,\n returns,\n },\n}: {\n parentId?: string;\n name: string;\n item: TypeNode;\n}) {\n const [open, setOpen] = useState(false);\n const id = parentId ? `${parentId}-${name}` : undefined;\n\n useEffect(() => {\n const hash = window.location.hash;\n if (!id || !hash) return;\n if (`#${id}` === hash) setOpen(true);\n }, [id]);\n\n return (\n <Collapsible\n id={id}\n open={open}\n onOpenChange={(v) => {\n if (v && id) {\n window.history.replaceState(null, '', `#${id}`);\n }\n setOpen(v);\n }}\n className={cn(\n 'rounded-xl border overflow-hidden scroll-m-20 transition-all',\n open ? 'shadow-sm bg-fd-background not-last:mb-2' : 'border-transparent',\n )}\n >\n <CollapsibleTrigger className=\"relative flex flex-row items-center w-full group text-start px-3 py-2 not-prose hover:bg-fd-accent\">\n <code\n className={cn(\n 'text-fd-primary min-w-fit w-1/4 font-mono font-medium pe-2',\n deprecated && 'line-through text-fd-primary/50',\n )}\n >\n {name}\n {!required && '?'}\n </code>\n {typeDescriptionLink ? (\n <Link href={typeDescriptionLink} className=\"underline @max-xl:hidden\">\n {type}\n </Link>\n ) : (\n <span className=\"@max-xl:hidden\">{type}</span>\n )}\n <ChevronDown className=\"absolute end-2 size-4 text-fd-muted-foreground transition-transform group-data-[open]:rotate-180\" />\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div className=\"grid grid-cols-[1fr_3fr] gap-y-4 text-sm p-3 overflow-auto fd-scroll-container border-t\">\n <div className=\"text-sm prose col-span-full prose-no-margin empty:hidden\">\n {description}\n </div>\n {typeDescription && (\n <>\n <p className={cn(fieldVariants())}>Type</p>\n <p className=\"my-auto not-prose\">{typeDescription}</p>\n </>\n )}\n {defaultValue && (\n <>\n <p className={cn(fieldVariants())}>Default</p>\n <p className=\"my-auto not-prose\">{defaultValue}</p>\n </>\n )}\n {parameters.length > 0 && (\n <>\n <p className={cn(fieldVariants())}>Parameters</p>\n <div className=\"flex flex-col gap-2\">\n {parameters.map((param) => (\n <div key={param.name} className=\"inline-flex items-center flex-wrap gap-1\">\n <p className=\"font-medium not-prose text-nowrap\">{param.name} -</p>\n <div className=\"text-sm prose prose-no-margin\">{param.description}</div>\n </div>\n ))}\n </div>\n </>\n )}\n {returns && (\n <>\n <p className={cn(fieldVariants())}>Returns</p>\n <div className=\"my-auto text-sm prose prose-no-margin\">{returns}</div>\n </>\n )}\n </div>\n </CollapsibleContent>\n </Collapsible>\n );\n}\n"],"mappings":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"type-table.js","names":[],"sources":["../../src/components/type-table.tsx"],"sourcesContent":["'use client';\n\nimport { ChevronDown } from 'lucide-react';\nimport Link from 'fumadocs-core/link';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '@/utils/cn';\nimport { type ComponentProps, type ReactNode, useEffect, useState } from 'react';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible';\n\nexport interface ParameterNode {\n name: string;\n description: ReactNode;\n}\n\nexport interface TypeNode {\n /**\n * Additional description of the field\n */\n description?: ReactNode;\n\n /**\n * type signature (short)\n */\n type: ReactNode;\n\n /**\n * type signature (full)\n */\n typeDescription?: ReactNode;\n\n /**\n * Optional `href` for the type\n */\n typeDescriptionLink?: string;\n\n default?: ReactNode;\n\n required?: boolean;\n deprecated?: boolean;\n\n /**\n * a list of parameters info if the type is a function.\n */\n parameters?: ParameterNode[];\n\n returns?: ReactNode;\n}\n\nconst fieldVariants = cva('text-fd-muted-foreground not-prose pe-2');\n\nexport function TypeTable({\n id,\n type,\n className,\n ...props\n}: { type: Record<string, TypeNode> } & ComponentProps<'div'>) {\n return (\n <div\n id={id}\n className={cn(\n '@container flex flex-col p-1 bg-fd-card text-fd-card-foreground rounded-2xl border my-6 text-sm overflow-hidden',\n className,\n )}\n {...props}\n >\n <div className=\"flex font-medium items-center px-3 py-1 not-prose text-fd-muted-foreground\">\n <p className=\"w-1/4\">Prop</p>\n <p className=\"@max-xl:hidden\">Type</p>\n </div>\n {Object.entries(type).map(([key, value]) => (\n <Item key={key} parentId={id} name={key} item={value} />\n ))}\n </div>\n );\n}\n\nfunction Item({\n parentId,\n name,\n item: {\n parameters = [],\n description,\n required = false,\n deprecated,\n typeDescription,\n default: defaultValue,\n type,\n typeDescriptionLink,\n returns,\n },\n}: {\n parentId?: string;\n name: string;\n item: TypeNode;\n}) {\n const [open, setOpen] = useState(false);\n const id = parentId ? `${parentId}-${name}` : undefined;\n\n useEffect(() => {\n const hash = window.location.hash;\n if (!id || !hash) return;\n if (`#${id}` === hash) setOpen(true);\n }, [id]);\n\n return (\n <Collapsible\n id={id}\n open={open}\n onOpenChange={(v) => {\n if (v && id) {\n window.history.replaceState(null, '', `#${id}`);\n }\n setOpen(v);\n }}\n className={cn(\n 'rounded-xl border overflow-hidden scroll-m-20 transition-all',\n open ? 'shadow-sm bg-fd-background not-last:mb-2' : 'border-transparent',\n )}\n >\n <CollapsibleTrigger className=\"relative flex flex-row items-center w-full group text-start px-3 py-2 not-prose hover:bg-fd-accent\">\n <code\n className={cn(\n 'text-fd-primary min-w-fit w-1/4 font-mono font-medium pe-2',\n deprecated && 'line-through text-fd-primary/50',\n )}\n >\n {name}\n {!required && '?'}\n </code>\n {typeDescriptionLink ? (\n <Link href={typeDescriptionLink} className=\"underline @max-xl:hidden\">\n {type}\n </Link>\n ) : (\n <span className=\"@max-xl:hidden\">{type}</span>\n )}\n <ChevronDown className=\"absolute end-2 size-4 text-fd-muted-foreground transition-transform group-data-[open]:rotate-180\" />\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div className=\"grid grid-cols-[1fr_3fr] gap-y-4 text-sm p-3 overflow-auto fd-scroll-container border-t\">\n <div className=\"text-sm prose col-span-full prose-no-margin empty:hidden\">\n {description}\n </div>\n {typeDescription && (\n <>\n <p className={cn(fieldVariants())}>Type</p>\n <p className=\"my-auto not-prose\">{typeDescription}</p>\n </>\n )}\n {defaultValue && (\n <>\n <p className={cn(fieldVariants())}>Default</p>\n <p className=\"my-auto not-prose\">{defaultValue}</p>\n </>\n )}\n {parameters.length > 0 && (\n <>\n <p className={cn(fieldVariants())}>Parameters</p>\n <div className=\"flex flex-col gap-2\">\n {parameters.map((param) => (\n <div key={param.name} className=\"inline-flex items-center flex-wrap gap-1\">\n <p className=\"font-medium not-prose text-nowrap\">{param.name} -</p>\n <div className=\"text-sm prose prose-no-margin\">{param.description}</div>\n </div>\n ))}\n </div>\n </>\n )}\n {returns && (\n <>\n <p className={cn(fieldVariants())}>Returns</p>\n <div className=\"my-auto text-sm prose prose-no-margin\">{returns}</div>\n </>\n )}\n </div>\n </CollapsibleContent>\n </Collapsible>\n );\n}\n"],"mappings":";;;;;;;;;;;AAgDA,MAAM,gBAAgB,IAAI,0CAA0C;AAEpE,SAAgB,UAAU,EACxB,IACA,MACA,WACA,GAAG,SAC0D;AAC7D,QACE,qBAAC;EACK;EACJ,WAAW,GACT,mHACA,UACD;EACD,GAAI;aAEJ,qBAAC;GAAI,WAAU;cACb,oBAAC;IAAE,WAAU;cAAQ;KAAQ,EAC7B,oBAAC;IAAE,WAAU;cAAiB;KAAQ;IAClC,EACL,OAAO,QAAQ,KAAK,CAAC,KAAK,CAAC,KAAK,WAC/B,oBAAC;GAAe,UAAU;GAAI,MAAM;GAAK,MAAM;KAApC,IAA6C,CACxD;GACE;;AAIV,SAAS,KAAK,EACZ,UACA,MACA,MAAM,EACJ,aAAa,EAAE,EACf,aACA,WAAW,OACX,YACA,iBACA,SAAS,cACT,MACA,qBACA,aAMD;CACD,MAAM,CAAC,MAAM,WAAW,SAAS,MAAM;CACvC,MAAM,KAAK,WAAW,GAAG,SAAS,GAAG,SAAS;AAE9C,iBAAgB;EACd,MAAM,OAAO,OAAO,SAAS;AAC7B,MAAI,CAAC,MAAM,CAAC,KAAM;AAClB,MAAI,IAAI,SAAS,KAAM,SAAQ,KAAK;IACnC,CAAC,GAAG,CAAC;AAER,QACE,qBAAC;EACK;EACE;EACN,eAAe,MAAM;AACnB,OAAI,KAAK,GACP,QAAO,QAAQ,aAAa,MAAM,IAAI,IAAI,KAAK;AAEjD,WAAQ,EAAE;;EAEZ,WAAW,GACT,gEACA,OAAO,6CAA6C,qBACrD;aAED,qBAAC;GAAmB,WAAU;;IAC5B,qBAAC;KACC,WAAW,GACT,8DACA,cAAc,kCACf;gBAEA,MACA,CAAC,YAAY;MACT;IACN,sBACC,oBAAC;KAAK,MAAM;KAAqB,WAAU;eACxC;MACI,GAEP,oBAAC;KAAK,WAAU;eAAkB;MAAY;IAEhD,oBAAC,eAAY,WAAU,qGAAqG;;IACzG,EACrB,oBAAC,gCACC,qBAAC;GAAI,WAAU;;IACb,oBAAC;KAAI,WAAU;eACZ;MACG;IACL,mBACC,8CACE,oBAAC;KAAE,WAAW,GAAG,eAAe,CAAC;eAAE;MAAQ,EAC3C,oBAAC;KAAE,WAAU;eAAqB;MAAoB,IACrD;IAEJ,gBACC,8CACE,oBAAC;KAAE,WAAW,GAAG,eAAe,CAAC;eAAE;MAAW,EAC9C,oBAAC;KAAE,WAAU;eAAqB;MAAiB,IAClD;IAEJ,WAAW,SAAS,KACnB,8CACE,oBAAC;KAAE,WAAW,GAAG,eAAe,CAAC;eAAE;MAAc,EACjD,oBAAC;KAAI,WAAU;eACZ,WAAW,KAAK,UACf,qBAAC;MAAqB,WAAU;iBAC9B,qBAAC;OAAE,WAAU;kBAAqC,MAAM,MAAK;QAAM,EACnE,oBAAC;OAAI,WAAU;iBAAiC,MAAM;QAAkB;QAFhE,MAAM,KAGV,CACN;MACE,IACL;IAEJ,WACC,8CACE,oBAAC;KAAE,WAAW,GAAG,eAAe,CAAC;eAAE;MAAW,EAC9C,oBAAC;KAAI,WAAU;eAAyC;MAAc,IACrE;;IAED,GACa;GACT"}
|
|
@@ -23,7 +23,7 @@ const NavigationMenuTrigger = React.forwardRef(({ children, ...props }, ref) =>
|
|
|
23
23
|
NavigationMenuTrigger.displayName = NavigationMenu.Trigger.displayName;
|
|
24
24
|
const NavigationMenuContent = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(NavigationMenu.Content, {
|
|
25
25
|
ref,
|
|
26
|
-
className: (s) => cn("size-full p-4", "transition-[opacity,transform,translate] duration-(--duration) ease-(--easing)", "data-
|
|
26
|
+
className: (s) => cn("size-full p-4", "transition-[opacity,transform,translate] duration-(--duration) ease-(--easing)", "data-starting-style:opacity-0 data-ending-style:opacity-0", "data-starting-style:data-[activation-direction=left]:-translate-x-1/2", "data-starting-style:data-[activation-direction=right]:translate-x-1/2", "data-ending-style:data-[activation-direction=left]:translate-x-1/2", "data-ending-style:data-[activation-direction=right]:-translate-x-1/2", typeof className === "function" ? className(s) : className),
|
|
27
27
|
...props
|
|
28
28
|
}));
|
|
29
29
|
NavigationMenuContent.displayName = NavigationMenu.Content.displayName;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation-menu.js","names":["Primitive"],"sources":["../../../src/components/ui/navigation-menu.tsx"],"sourcesContent":["'use client';\nimport * as React from 'react';\nimport { NavigationMenu as Primitive } from '@base-ui/react/navigation-menu';\nimport { cn } from '@/utils/cn';\n\nexport type NavigationMenuContentProps = Primitive.Content.Props;\nexport type NavigationMenuTriggerProps = Primitive.Trigger.Props;\n\nconst NavigationMenuRoot = Primitive.Root;\n\nconst NavigationMenuList = Primitive.List;\n\nconst NavigationMenuItem = React.forwardRef<\n React.ComponentRef<typeof Primitive.Item>,\n React.ComponentPropsWithoutRef<typeof Primitive.Item>\n>(({ className, children, ...props }, ref) => (\n <Primitive.Item\n ref={ref}\n className={(s) => cn('list-none', typeof className === 'function' ? className(s) : className)}\n {...props}\n >\n {children}\n </Primitive.Item>\n));\n\nNavigationMenuItem.displayName = Primitive.Item.displayName;\n\nconst NavigationMenuTrigger = React.forwardRef<\n React.ComponentRef<typeof Primitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof Primitive.Trigger>\n>(({ children, ...props }, ref) => (\n <Primitive.Trigger ref={ref} {...props}>\n {children}\n </Primitive.Trigger>\n));\nNavigationMenuTrigger.displayName = Primitive.Trigger.displayName;\n\nconst NavigationMenuContent = React.forwardRef<\n React.ComponentRef<typeof Primitive.Content>,\n React.ComponentPropsWithoutRef<typeof Primitive.Content>\n>(({ className, ...props }, ref) => (\n <Primitive.Content\n ref={ref}\n className={(s) =>\n cn(\n 'size-full p-4',\n 'transition-[opacity,transform,translate] duration-(--duration) ease-(--easing)',\n 'data-
|
|
1
|
+
{"version":3,"file":"navigation-menu.js","names":["Primitive"],"sources":["../../../src/components/ui/navigation-menu.tsx"],"sourcesContent":["'use client';\nimport * as React from 'react';\nimport { NavigationMenu as Primitive } from '@base-ui/react/navigation-menu';\nimport { cn } from '@/utils/cn';\n\nexport type NavigationMenuContentProps = Primitive.Content.Props;\nexport type NavigationMenuTriggerProps = Primitive.Trigger.Props;\n\nconst NavigationMenuRoot = Primitive.Root;\n\nconst NavigationMenuList = Primitive.List;\n\nconst NavigationMenuItem = React.forwardRef<\n React.ComponentRef<typeof Primitive.Item>,\n React.ComponentPropsWithoutRef<typeof Primitive.Item>\n>(({ className, children, ...props }, ref) => (\n <Primitive.Item\n ref={ref}\n className={(s) => cn('list-none', typeof className === 'function' ? className(s) : className)}\n {...props}\n >\n {children}\n </Primitive.Item>\n));\n\nNavigationMenuItem.displayName = Primitive.Item.displayName;\n\nconst NavigationMenuTrigger = React.forwardRef<\n React.ComponentRef<typeof Primitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof Primitive.Trigger>\n>(({ children, ...props }, ref) => (\n <Primitive.Trigger ref={ref} {...props}>\n {children}\n </Primitive.Trigger>\n));\nNavigationMenuTrigger.displayName = Primitive.Trigger.displayName;\n\nconst NavigationMenuContent = React.forwardRef<\n React.ComponentRef<typeof Primitive.Content>,\n React.ComponentPropsWithoutRef<typeof Primitive.Content>\n>(({ className, ...props }, ref) => (\n <Primitive.Content\n ref={ref}\n className={(s) =>\n cn(\n 'size-full p-4',\n 'transition-[opacity,transform,translate] duration-(--duration) ease-(--easing)',\n 'data-starting-style:opacity-0 data-ending-style:opacity-0',\n 'data-starting-style:data-[activation-direction=left]:-translate-x-1/2',\n 'data-starting-style:data-[activation-direction=right]:translate-x-1/2',\n 'data-ending-style:data-[activation-direction=left]:translate-x-1/2',\n 'data-ending-style:data-[activation-direction=right]:-translate-x-1/2',\n typeof className === 'function' ? className(s) : className,\n )\n }\n {...props}\n />\n));\nNavigationMenuContent.displayName = Primitive.Content.displayName;\n\nconst NavigationMenuLink = Primitive.Link;\n\nexport {\n NavigationMenuRoot,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n};\n"],"mappings":";;;;;;;;AAQA,MAAM,qBAAqBA,eAAU;AAErC,MAAM,qBAAqBA,eAAU;AAErC,MAAM,qBAAqB,MAAM,YAG9B,EAAE,WAAW,UAAU,GAAG,SAAS,QACpC,oBAACA,eAAU;CACJ;CACL,YAAY,MAAM,GAAG,aAAa,OAAO,cAAc,aAAa,UAAU,EAAE,GAAG,UAAU;CAC7F,GAAI;CAEH;EACc,CACjB;AAEF,mBAAmB,cAAcA,eAAU,KAAK;AAEhD,MAAM,wBAAwB,MAAM,YAGjC,EAAE,UAAU,GAAG,SAAS,QACzB,oBAACA,eAAU;CAAa;CAAK,GAAI;CAC9B;EACiB,CACpB;AACF,sBAAsB,cAAcA,eAAU,QAAQ;AAEtD,MAAM,wBAAwB,MAAM,YAGjC,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAACA,eAAU;CACJ;CACL,YAAY,MACV,GACE,iBACA,kFACA,6DACA,yEACA,yEACA,sEACA,wEACA,OAAO,cAAc,aAAa,UAAU,EAAE,GAAG,UAClD;CAEH,GAAI;EACJ,CACF;AACF,sBAAsB,cAAcA,eAAU,QAAQ;AAEtD,MAAM,qBAAqBA,eAAU"}
|
|
@@ -31,12 +31,12 @@ function LayoutBody({ className, style, children, ...props }) {
|
|
|
31
31
|
const { collapsed } = useSidebar();
|
|
32
32
|
return /* @__PURE__ */ jsx("div", {
|
|
33
33
|
id: "nd-docs-layout",
|
|
34
|
-
className: cn("grid transition-[grid-template-columns] overflow-x-clip min-h-(--fd-docs-height)
|
|
34
|
+
className: cn("grid transition-[grid-template-columns] overflow-x-clip min-h-(--fd-docs-height) [--fd-docs-height:100dvh] [--fd-header-height:0px] [--fd-toc-popover-height:0px] [--fd-sidebar-width:0px] [--fd-toc-width:0px]", className),
|
|
35
35
|
"data-sidebar-collapsed": collapsed,
|
|
36
36
|
style: {
|
|
37
|
-
gridTemplate: `"sidebar header toc"
|
|
38
|
-
"sidebar toc-popover toc"
|
|
39
|
-
"sidebar main toc" 1fr / minmax(var(--fd-sidebar-col)
|
|
37
|
+
gridTemplate: `"sidebar sidebar header toc toc"
|
|
38
|
+
"sidebar sidebar toc-popover toc toc"
|
|
39
|
+
"sidebar sidebar main toc toc" 1fr / minmax(min-content, 1fr) var(--fd-sidebar-col) minmax(0, calc(var(--fd-layout-width,97rem) - var(--fd-sidebar-width) - var(--fd-toc-width))) var(--fd-toc-width) minmax(min-content, 1fr)`,
|
|
40
40
|
"--fd-docs-row-1": "var(--fd-banner-height, 0px)",
|
|
41
41
|
"--fd-docs-row-2": "calc(var(--fd-docs-row-1) + var(--fd-header-height))",
|
|
42
42
|
"--fd-docs-row-3": "calc(var(--fd-docs-row-2) + var(--fd-toc-popover-height))",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","names":[],"sources":["../../../src/layouts/docs/client.tsx"],"sourcesContent":["'use client';\n\nimport { type ComponentProps, createContext, type ReactNode, use, useMemo } from 'react';\nimport { cn } from '@/utils/cn';\nimport { useSidebar } from '@/components/sidebar/base';\nimport { usePathname } from 'fumadocs-core/framework';\nimport { isTabActive } from '@/components/sidebar/tabs/dropdown';\nimport Link from 'fumadocs-core/link';\nimport type { SidebarTab } from '@/components/sidebar/tabs';\nimport { useIsScrollTop } from '@/utils/use-is-scroll-top';\n\nexport const LayoutContext = createContext<{\n isNavTransparent: boolean;\n} | null>(null);\n\nexport function LayoutContextProvider({\n navTransparentMode = 'none',\n children,\n}: {\n navTransparentMode?: 'always' | 'top' | 'none';\n children: ReactNode;\n}) {\n const isTop = useIsScrollTop({ enabled: navTransparentMode === 'top' }) ?? true;\n const isNavTransparent = navTransparentMode === 'top' ? isTop : navTransparentMode === 'always';\n\n return (\n <LayoutContext\n value={useMemo(\n () => ({\n isNavTransparent,\n }),\n [isNavTransparent],\n )}\n >\n {children}\n </LayoutContext>\n );\n}\n\nexport function LayoutHeader(props: ComponentProps<'header'>) {\n const { isNavTransparent } = use(LayoutContext)!;\n\n return (\n <header data-transparent={isNavTransparent} {...props}>\n {props.children}\n </header>\n );\n}\n\nexport function LayoutBody({ className, style, children, ...props }: ComponentProps<'div'>) {\n const { collapsed } = useSidebar();\n\n return (\n <div\n id=\"nd-docs-layout\"\n className={cn(\n 'grid transition-[grid-template-columns] overflow-x-clip min-h-(--fd-docs-height)
|
|
1
|
+
{"version":3,"file":"client.js","names":[],"sources":["../../../src/layouts/docs/client.tsx"],"sourcesContent":["'use client';\n\nimport { type ComponentProps, createContext, type ReactNode, use, useMemo } from 'react';\nimport { cn } from '@/utils/cn';\nimport { useSidebar } from '@/components/sidebar/base';\nimport { usePathname } from 'fumadocs-core/framework';\nimport { isTabActive } from '@/components/sidebar/tabs/dropdown';\nimport Link from 'fumadocs-core/link';\nimport type { SidebarTab } from '@/components/sidebar/tabs';\nimport { useIsScrollTop } from '@/utils/use-is-scroll-top';\n\nexport const LayoutContext = createContext<{\n isNavTransparent: boolean;\n} | null>(null);\n\nexport function LayoutContextProvider({\n navTransparentMode = 'none',\n children,\n}: {\n navTransparentMode?: 'always' | 'top' | 'none';\n children: ReactNode;\n}) {\n const isTop = useIsScrollTop({ enabled: navTransparentMode === 'top' }) ?? true;\n const isNavTransparent = navTransparentMode === 'top' ? isTop : navTransparentMode === 'always';\n\n return (\n <LayoutContext\n value={useMemo(\n () => ({\n isNavTransparent,\n }),\n [isNavTransparent],\n )}\n >\n {children}\n </LayoutContext>\n );\n}\n\nexport function LayoutHeader(props: ComponentProps<'header'>) {\n const { isNavTransparent } = use(LayoutContext)!;\n\n return (\n <header data-transparent={isNavTransparent} {...props}>\n {props.children}\n </header>\n );\n}\n\nexport function LayoutBody({ className, style, children, ...props }: ComponentProps<'div'>) {\n const { collapsed } = useSidebar();\n\n return (\n <div\n id=\"nd-docs-layout\"\n className={cn(\n 'grid transition-[grid-template-columns] overflow-x-clip min-h-(--fd-docs-height) [--fd-docs-height:100dvh] [--fd-header-height:0px] [--fd-toc-popover-height:0px] [--fd-sidebar-width:0px] [--fd-toc-width:0px]',\n className,\n )}\n data-sidebar-collapsed={collapsed}\n style={\n {\n gridTemplate: `\"sidebar sidebar header toc toc\"\n \"sidebar sidebar toc-popover toc toc\"\n \"sidebar sidebar main toc toc\" 1fr / minmax(min-content, 1fr) var(--fd-sidebar-col) minmax(0, calc(var(--fd-layout-width,97rem) - var(--fd-sidebar-width) - var(--fd-toc-width))) var(--fd-toc-width) minmax(min-content, 1fr)`,\n '--fd-docs-row-1': 'var(--fd-banner-height, 0px)',\n '--fd-docs-row-2': 'calc(var(--fd-docs-row-1) + var(--fd-header-height))',\n '--fd-docs-row-3': 'calc(var(--fd-docs-row-2) + var(--fd-toc-popover-height))',\n '--fd-sidebar-col': collapsed ? '0px' : 'var(--fd-sidebar-width)',\n ...style,\n } as object\n }\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport function LayoutTabs({\n options,\n ...props\n}: ComponentProps<'div'> & {\n options: SidebarTab[];\n}) {\n const pathname = usePathname();\n const selected = useMemo(() => {\n return options.findLast((option) => isTabActive(option, pathname));\n }, [options, pathname]);\n\n return (\n <div\n {...props}\n className={cn(\n 'flex flex-row items-end gap-6 overflow-auto [grid-area:main]',\n props.className,\n )}\n >\n {options.map((option, i) => (\n <Link\n key={i}\n href={option.url}\n className={cn(\n 'inline-flex border-b-2 border-transparent transition-colors items-center pb-1.5 font-medium gap-2 text-fd-muted-foreground text-sm text-nowrap hover:text-fd-accent-foreground',\n option.unlisted && selected !== option && 'hidden',\n selected === option && 'border-fd-primary text-fd-primary',\n )}\n >\n {option.title}\n </Link>\n ))}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAWA,MAAa,gBAAgB,cAEnB,KAAK;AAEf,SAAgB,sBAAsB,EACpC,qBAAqB,QACrB,YAIC;CACD,MAAM,QAAQ,eAAe,EAAE,SAAS,uBAAuB,OAAO,CAAC,IAAI;CAC3E,MAAM,mBAAmB,uBAAuB,QAAQ,QAAQ,uBAAuB;AAEvF,QACE,oBAAC;EACC,OAAO,eACE,EACL,kBACD,GACD,CAAC,iBAAiB,CACnB;EAEA;GACa;;AAIpB,SAAgB,aAAa,OAAiC;CAC5D,MAAM,EAAE,qBAAqB,IAAI,cAAc;AAE/C,QACE,oBAAC;EAAO,oBAAkB;EAAkB,GAAI;YAC7C,MAAM;GACA;;AAIb,SAAgB,WAAW,EAAE,WAAW,OAAO,UAAU,GAAG,SAAgC;CAC1F,MAAM,EAAE,cAAc,YAAY;AAElC,QACE,oBAAC;EACC,IAAG;EACH,WAAW,GACT,mNACA,UACD;EACD,0BAAwB;EACxB,OACE;GACE,cAAc;;;GAGd,mBAAmB;GACnB,mBAAmB;GACnB,mBAAmB;GACnB,oBAAoB,YAAY,QAAQ;GACxC,GAAG;GACJ;EAEH,GAAI;EAEH;GACG;;AAIV,SAAgB,WAAW,EACzB,SACA,GAAG,SAGF;CACD,MAAM,WAAW,aAAa;CAC9B,MAAM,WAAW,cAAc;AAC7B,SAAO,QAAQ,UAAU,WAAW,YAAY,QAAQ,SAAS,CAAC;IACjE,CAAC,SAAS,SAAS,CAAC;AAEvB,QACE,oBAAC;EACC,GAAI;EACJ,WAAW,GACT,gEACA,MAAM,UACP;YAEA,QAAQ,KAAK,QAAQ,MACpB,oBAAC;GAEC,MAAM,OAAO;GACb,WAAW,GACT,kLACA,OAAO,YAAY,aAAa,UAAU,UAC1C,aAAa,UAAU,oCACxB;aAEA,OAAO;KARH,EASA,CACP;GACE"}
|
|
@@ -37,7 +37,7 @@ 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-[
|
|
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-[1168px]" : "xl:layout:[--fd-toc-width:268px]", className),
|
|
41
41
|
children: [
|
|
42
42
|
breadcrumbEnabled && (breadcrumb ?? /* @__PURE__ */ jsx(PageBreadcrumb, { ...breadcrumbProps })),
|
|
43
43
|
children,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["TocClerk.TOCItems","TocDefault.TOCItems"],"sources":["../../../../src/layouts/docs/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 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-[
|
|
1
|
+
{"version":3,"file":"index.js","names":["TocClerk.TOCItems","TocDefault.TOCItems"],"sources":["../../../../src/layouts/docs/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 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-[1168px]' : '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,aAAwB;AAEvC,KAAI,cAAc,kBAChB,YAAW,aACT,oBAAC;EAAY,QAAQ,WAAW;EAAa;EAC1C;GACW;AAIlB,QAAO,QACL;EACG,sBACE,cACC,qBAAC,6BACC,oBAAC,0BAAwB,EACzB,qBAAC;GACE,kBAAkB;GACnB,oBAAC,2BACE,kBAAkB,UAAU,UAC3B,oBAACA,eAAoB,GAErB,oBAACC,aAAsB,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,oBAAC,aAAU,OAAM,QAAQ;MACtB;IACL,oBAAC,2BACE,WAAW,UAAU,UAAU,oBAACD,eAAoB,GAAG,oBAACC,aAAsB,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,oBAAC,aAAU,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"}
|
|
@@ -42,12 +42,12 @@ function Header({ nav = {}, i18n = false, links, githubUrl, themeSwitch = {}, se
|
|
|
42
42
|
transparentMode: nav.transparentMode,
|
|
43
43
|
className: cn(s.open && "shadow-lg rounded-b-2xl"),
|
|
44
44
|
children: [
|
|
45
|
-
/* @__PURE__ */ jsxs(
|
|
45
|
+
/* @__PURE__ */ jsxs("div", {
|
|
46
46
|
className: "flex h-14 w-full items-center px-4",
|
|
47
47
|
children: [
|
|
48
48
|
renderTitleNav(nav, { className: "inline-flex items-center gap-2.5 font-semibold" }),
|
|
49
49
|
nav.children,
|
|
50
|
-
/* @__PURE__ */ jsx(
|
|
50
|
+
/* @__PURE__ */ jsx(NavigationMenuList, {
|
|
51
51
|
className: "flex flex-row items-center gap-2 px-6 max-sm:hidden",
|
|
52
52
|
children: navItems.filter((item) => !isSecondary(item)).map((item, i) => /* @__PURE__ */ jsx(NavigationMenuLinkItem, {
|
|
53
53
|
item,
|
|
@@ -63,7 +63,7 @@ function Header({ nav = {}, i18n = false, links, githubUrl, themeSwitch = {}, se
|
|
|
63
63
|
})),
|
|
64
64
|
themeSwitch.enabled !== false && (themeSwitch.component ?? /* @__PURE__ */ jsx(ThemeToggle, { mode: themeSwitch?.mode })),
|
|
65
65
|
i18n && /* @__PURE__ */ jsx(LanguageToggle, { children: /* @__PURE__ */ jsx(Languages, { className: "size-5" }) }),
|
|
66
|
-
/* @__PURE__ */ jsx(
|
|
66
|
+
/* @__PURE__ */ jsx(NavigationMenuList, {
|
|
67
67
|
className: "flex flex-row gap-2 items-center empty:hidden",
|
|
68
68
|
children: navItems.filter(isSecondary).map((item, i) => /* @__PURE__ */ jsx(NavigationMenuLinkItem, {
|
|
69
69
|
className: cn(item.type === "icon" && "-mx-1 first:ms-0 last:me-0"),
|
|
@@ -72,7 +72,7 @@ function Header({ nav = {}, i18n = false, links, githubUrl, themeSwitch = {}, se
|
|
|
72
72
|
})
|
|
73
73
|
]
|
|
74
74
|
}),
|
|
75
|
-
/* @__PURE__ */ jsxs("
|
|
75
|
+
/* @__PURE__ */ jsxs("div", {
|
|
76
76
|
className: "flex flex-row items-center ms-auto -me-1.5 lg:hidden",
|
|
77
77
|
children: [searchToggle.enabled !== false && (searchToggle.components?.sm ?? /* @__PURE__ */ jsx(SearchToggle, {
|
|
78
78
|
className: "p-2",
|
|
@@ -172,10 +172,7 @@ function HeaderRoot({ transparentMode = "none", children, className, ...props })
|
|
|
172
172
|
});
|
|
173
173
|
}
|
|
174
174
|
function NavigationMenuLinkItem({ item, ...props }) {
|
|
175
|
-
if (item.type === "custom") return
|
|
176
|
-
...props,
|
|
177
|
-
children: item.children
|
|
178
|
-
});
|
|
175
|
+
if (item.type === "custom") return item.children;
|
|
179
176
|
if (item.type === "menu") {
|
|
180
177
|
const children = item.items.map((child, j) => {
|
|
181
178
|
if (child.type === "custom") return /* @__PURE__ */ jsx(Fragment, { children: child.children }, j);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","names":[],"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 'fumadocs-core/link';\nimport { cn } from '@/utils/cn';\nimport { type LinkItemType, type NavOptions, renderTitleNav, useLinkItems } from '@/layouts/shared';\nimport { LinkItem } from '@/utils/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 '@/utils/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 { menuItems, navItems } = useLinkItems({ 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":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","names":[],"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 'fumadocs-core/link';\nimport { cn } from '@/utils/cn';\nimport { type LinkItemType, type NavOptions, renderTitleNav, useLinkItems } from '@/layouts/shared';\nimport { LinkItem } from '@/utils/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 '@/utils/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 { menuItems, navItems } = useLinkItems({ 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 <div 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 <NavigationMenuList 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 </NavigationMenuList>\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 <NavigationMenuList 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 </NavigationMenuList>\n </div>\n <div 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 </div>\n </div>\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 item.children;\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":"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"}
|
|
@@ -18,7 +18,7 @@ function NavbarMenuContent({ className, ...props }) {
|
|
|
18
18
|
function NavbarMenuTrigger({ className, ...props }) {
|
|
19
19
|
return /* @__PURE__ */ jsx(NavigationMenuTrigger, {
|
|
20
20
|
...props,
|
|
21
|
-
className: (s) => cn(navItemVariants(), "rounded-md", typeof className === "function" ? className(s) : className),
|
|
21
|
+
className: (s) => cn(navItemVariants(), "text-sm rounded-md", typeof className === "function" ? className(s) : className),
|
|
22
22
|
children: props.children
|
|
23
23
|
});
|
|
24
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navbar.js","names":[],"sources":["../../../src/layouts/home/navbar.tsx"],"sourcesContent":["'use client';\nimport Link, { type LinkProps } from 'fumadocs-core/link';\nimport { cn } from '@/utils/cn';\nimport {\n NavigationMenuContent,\n type NavigationMenuContentProps,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuTrigger,\n type NavigationMenuTriggerProps,\n} from '@/components/ui/navigation-menu';\nimport { navItemVariants } from './client';\n\nexport const NavbarMenu = NavigationMenuItem;\n\nexport function NavbarMenuContent({ className, ...props }: NavigationMenuContentProps) {\n return (\n <NavigationMenuContent\n className={(s) =>\n cn(\n 'grid grid-cols-1 gap-2 p-4 md:grid-cols-2 lg:grid-cols-3',\n typeof className === 'function' ? className(s) : className,\n )\n }\n {...props}\n >\n {props.children}\n </NavigationMenuContent>\n );\n}\n\nexport function NavbarMenuTrigger({ className, ...props }: NavigationMenuTriggerProps) {\n return (\n <NavigationMenuTrigger\n {...props}\n className={(s) =>\n cn(\n navItemVariants(),\n 'rounded-md',\n typeof className === 'function' ? className(s) : className,\n )\n }\n >\n {props.children}\n </NavigationMenuTrigger>\n );\n}\n\nexport function NavbarMenuLink(props: LinkProps) {\n return (\n <NavigationMenuLink\n render={\n <Link\n {...props}\n className={cn(\n 'flex flex-col gap-2 rounded-lg border bg-fd-card p-3 transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground',\n props.className,\n )}\n >\n {props.children}\n </Link>\n }\n />\n );\n}\n"],"mappings":";;;;;;;;;AAaA,MAAa,aAAa;AAE1B,SAAgB,kBAAkB,EAAE,WAAW,GAAG,SAAqC;AACrF,QACE,oBAAC;EACC,YAAY,MACV,GACE,4DACA,OAAO,cAAc,aAAa,UAAU,EAAE,GAAG,UAClD;EAEH,GAAI;YAEH,MAAM;GACe;;AAI5B,SAAgB,kBAAkB,EAAE,WAAW,GAAG,SAAqC;AACrF,QACE,oBAAC;EACC,GAAI;EACJ,YAAY,MACV,GACE,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"navbar.js","names":[],"sources":["../../../src/layouts/home/navbar.tsx"],"sourcesContent":["'use client';\nimport Link, { type LinkProps } from 'fumadocs-core/link';\nimport { cn } from '@/utils/cn';\nimport {\n NavigationMenuContent,\n type NavigationMenuContentProps,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuTrigger,\n type NavigationMenuTriggerProps,\n} from '@/components/ui/navigation-menu';\nimport { navItemVariants } from './client';\n\nexport const NavbarMenu = NavigationMenuItem;\n\nexport function NavbarMenuContent({ className, ...props }: NavigationMenuContentProps) {\n return (\n <NavigationMenuContent\n className={(s) =>\n cn(\n 'grid grid-cols-1 gap-2 p-4 md:grid-cols-2 lg:grid-cols-3',\n typeof className === 'function' ? className(s) : className,\n )\n }\n {...props}\n >\n {props.children}\n </NavigationMenuContent>\n );\n}\n\nexport function NavbarMenuTrigger({ className, ...props }: NavigationMenuTriggerProps) {\n return (\n <NavigationMenuTrigger\n {...props}\n className={(s) =>\n cn(\n navItemVariants(),\n 'text-sm rounded-md',\n typeof className === 'function' ? className(s) : className,\n )\n }\n >\n {props.children}\n </NavigationMenuTrigger>\n );\n}\n\nexport function NavbarMenuLink(props: LinkProps) {\n return (\n <NavigationMenuLink\n render={\n <Link\n {...props}\n className={cn(\n 'flex flex-col gap-2 rounded-lg border bg-fd-card p-3 transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground',\n props.className,\n )}\n >\n {props.children}\n </Link>\n }\n />\n );\n}\n"],"mappings":";;;;;;;;;AAaA,MAAa,aAAa;AAE1B,SAAgB,kBAAkB,EAAE,WAAW,GAAG,SAAqC;AACrF,QACE,oBAAC;EACC,YAAY,MACV,GACE,4DACA,OAAO,cAAc,aAAa,UAAU,EAAE,GAAG,UAClD;EAEH,GAAI;YAEH,MAAM;GACe;;AAI5B,SAAgB,kBAAkB,EAAE,WAAW,GAAG,SAAqC;AACrF,QACE,oBAAC;EACC,GAAI;EACJ,YAAY,MACV,GACE,iBAAiB,EACjB,sBACA,OAAO,cAAc,aAAa,UAAU,EAAE,GAAG,UAClD;YAGF,MAAM;GACe;;AAI5B,SAAgB,eAAe,OAAkB;AAC/C,QACE,oBAAC,sBACC,QACE,oBAAC;EACC,GAAI;EACJ,WAAW,GACT,gIACA,MAAM,UACP;YAEA,MAAM;GACF,GAET"}
|
package/dist/style.css
CHANGED
|
@@ -1085,6 +1085,9 @@
|
|
|
1085
1085
|
.max-w-\[900px\] {
|
|
1086
1086
|
max-width: 900px;
|
|
1087
1087
|
}
|
|
1088
|
+
.max-w-\[1168px\] {
|
|
1089
|
+
max-width: 1168px;
|
|
1090
|
+
}
|
|
1088
1091
|
.max-w-\[1200px\] {
|
|
1089
1092
|
max-width: 1200px;
|
|
1090
1093
|
}
|
|
@@ -1995,16 +1998,16 @@
|
|
|
1995
1998
|
margin-bottom: calc(var(--spacing) * 2);
|
|
1996
1999
|
}
|
|
1997
2000
|
}
|
|
2001
|
+
.group-data-active\:bg-fd-primary {
|
|
2002
|
+
&:is(:where(.group)[data-active] *) {
|
|
2003
|
+
background-color: var(--color-fd-primary);
|
|
2004
|
+
}
|
|
2005
|
+
}
|
|
1998
2006
|
.group-data-panel-open\:rotate-180 {
|
|
1999
2007
|
&:is(:where(.group)[data-panel-open] *) {
|
|
2000
2008
|
rotate: 180deg;
|
|
2001
2009
|
}
|
|
2002
2010
|
}
|
|
2003
|
-
.group-data-\[active\]\:bg-fd-primary {
|
|
2004
|
-
&:is(:where(.group)[data-active] *) {
|
|
2005
|
-
background-color: var(--color-fd-primary);
|
|
2006
|
-
}
|
|
2007
|
-
}
|
|
2008
2011
|
.group-data-\[open\]\:rotate-180 {
|
|
2009
2012
|
&:is(:where(.group)[data-open] *) {
|
|
2010
2013
|
rotate: 180deg;
|
|
@@ -2322,6 +2325,38 @@
|
|
|
2322
2325
|
opacity: 0%;
|
|
2323
2326
|
}
|
|
2324
2327
|
}
|
|
2328
|
+
.data-ending-style\:data-\[activation-direction\=left\]\:translate-x-1\/2 {
|
|
2329
|
+
&[data-ending-style] {
|
|
2330
|
+
&[data-activation-direction="left"] {
|
|
2331
|
+
--tw-translate-x: calc(1/2 * 100%);
|
|
2332
|
+
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
2333
|
+
}
|
|
2334
|
+
}
|
|
2335
|
+
}
|
|
2336
|
+
.data-starting-style\:data-\[activation-direction\=left\]\:-translate-x-1\/2 {
|
|
2337
|
+
&[data-starting-style] {
|
|
2338
|
+
&[data-activation-direction="left"] {
|
|
2339
|
+
--tw-translate-x: calc(calc(1/2 * 100%) * -1);
|
|
2340
|
+
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
2341
|
+
}
|
|
2342
|
+
}
|
|
2343
|
+
}
|
|
2344
|
+
.data-ending-style\:data-\[activation-direction\=right\]\:-translate-x-1\/2 {
|
|
2345
|
+
&[data-ending-style] {
|
|
2346
|
+
&[data-activation-direction="right"] {
|
|
2347
|
+
--tw-translate-x: calc(calc(1/2 * 100%) * -1);
|
|
2348
|
+
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
2349
|
+
}
|
|
2350
|
+
}
|
|
2351
|
+
}
|
|
2352
|
+
.data-starting-style\:data-\[activation-direction\=right\]\:translate-x-1\/2 {
|
|
2353
|
+
&[data-starting-style] {
|
|
2354
|
+
&[data-activation-direction="right"] {
|
|
2355
|
+
--tw-translate-x: calc(1/2 * 100%);
|
|
2356
|
+
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
2357
|
+
}
|
|
2358
|
+
}
|
|
2359
|
+
}
|
|
2325
2360
|
.data-\[active\]\:border-fd-primary {
|
|
2326
2361
|
&[data-active] {
|
|
2327
2362
|
border-color: var(--color-fd-primary);
|
|
@@ -2433,27 +2468,6 @@
|
|
|
2433
2468
|
height: calc(var(--spacing) * 0);
|
|
2434
2469
|
}
|
|
2435
2470
|
}
|
|
2436
|
-
.data-\[ending-style\]\:opacity-0 {
|
|
2437
|
-
&[data-ending-style] {
|
|
2438
|
-
opacity: 0%;
|
|
2439
|
-
}
|
|
2440
|
-
}
|
|
2441
|
-
.data-\[ending-style\]\:data-\[activation-direction\=left\]\:translate-x-1\/2 {
|
|
2442
|
-
&[data-ending-style] {
|
|
2443
|
-
&[data-activation-direction="left"] {
|
|
2444
|
-
--tw-translate-x: calc(1/2 * 100%);
|
|
2445
|
-
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
2446
|
-
}
|
|
2447
|
-
}
|
|
2448
|
-
}
|
|
2449
|
-
.data-\[ending-style\]\:data-\[activation-direction\=right\]\:-translate-x-1\/2 {
|
|
2450
|
-
&[data-ending-style] {
|
|
2451
|
-
&[data-activation-direction="right"] {
|
|
2452
|
-
--tw-translate-x: calc(calc(1/2 * 100%) * -1);
|
|
2453
|
-
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
2454
|
-
}
|
|
2455
|
-
}
|
|
2456
|
-
}
|
|
2457
2471
|
.data-\[inactive\]\:hidden {
|
|
2458
2472
|
&[data-inactive] {
|
|
2459
2473
|
display: none;
|
|
@@ -2469,27 +2483,6 @@
|
|
|
2469
2483
|
height: calc(var(--spacing) * 0);
|
|
2470
2484
|
}
|
|
2471
2485
|
}
|
|
2472
|
-
.data-\[starting-style\]\:opacity-0 {
|
|
2473
|
-
&[data-starting-style] {
|
|
2474
|
-
opacity: 0%;
|
|
2475
|
-
}
|
|
2476
|
-
}
|
|
2477
|
-
.data-\[starting-style\]\:data-\[activation-direction\=left\]\:-translate-x-1\/2 {
|
|
2478
|
-
&[data-starting-style] {
|
|
2479
|
-
&[data-activation-direction="left"] {
|
|
2480
|
-
--tw-translate-x: calc(calc(1/2 * 100%) * -1);
|
|
2481
|
-
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
2482
|
-
}
|
|
2483
|
-
}
|
|
2484
|
-
}
|
|
2485
|
-
.data-\[starting-style\]\:data-\[activation-direction\=right\]\:translate-x-1\/2 {
|
|
2486
|
-
&[data-starting-style] {
|
|
2487
|
-
&[data-activation-direction="right"] {
|
|
2488
|
-
--tw-translate-x: calc(1/2 * 100%);
|
|
2489
|
-
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
2490
|
-
}
|
|
2491
|
-
}
|
|
2492
|
-
}
|
|
2493
2486
|
.data-\[state\=closed\]\:animate-fd-fade-out {
|
|
2494
2487
|
&[data-state="closed"] {
|
|
2495
2488
|
animation: var(--animate-fd-fade-out);
|
|
@@ -2864,35 +2857,31 @@
|
|
|
2864
2857
|
--padding-right: calc(var(--spacing) * 4);
|
|
2865
2858
|
code span {
|
|
2866
2859
|
color: var(--shiki-light);
|
|
2860
|
+
font-style: var(--shiki-light-font-style);
|
|
2867
2861
|
}
|
|
2868
|
-
|
|
2869
|
-
.dark .shiki:not(.not-fumadocs-codeblock *) {
|
|
2870
|
-
code span {
|
|
2871
|
-
color: var(--shiki-dark);
|
|
2872
|
-
}
|
|
2873
|
-
}
|
|
2874
|
-
:is(pre *):is(.shiki *):not(.not-fumadocs-codeblock *) {
|
|
2875
|
-
.line& {
|
|
2862
|
+
.line {
|
|
2876
2863
|
position: relative;
|
|
2877
|
-
min-height: 1lh;
|
|
2878
2864
|
padding-left: var(--padding-left);
|
|
2879
2865
|
padding-right: var(--padding-right);
|
|
2880
2866
|
}
|
|
2881
|
-
.
|
|
2867
|
+
.line:empty {
|
|
2868
|
+
height: 1lh;
|
|
2869
|
+
}
|
|
2870
|
+
&.has-focused .line:not(.focused) {
|
|
2882
2871
|
filter: blur(2px);
|
|
2883
2872
|
transition: filter 200ms;
|
|
2884
2873
|
}
|
|
2885
|
-
|
|
2874
|
+
&.has-focused:hover .line:not(.focused) {
|
|
2886
2875
|
filter: blur(0);
|
|
2887
2876
|
}
|
|
2888
|
-
[data-line-numbers] .twoslash-meta-line
|
|
2877
|
+
&[data-line-numbers] .twoslash-meta-line {
|
|
2889
2878
|
padding-left: calc(var(--padding-left) + 7 * var(--spacing));
|
|
2890
2879
|
}
|
|
2891
|
-
[data-line-numbers] .line
|
|
2880
|
+
&[data-line-numbers] .line {
|
|
2892
2881
|
counter-increment: line;
|
|
2893
2882
|
padding-left: calc(var(--padding-left) + 7 * var(--spacing));
|
|
2894
2883
|
}
|
|
2895
|
-
[data-line-numbers] .line
|
|
2884
|
+
&[data-line-numbers] .line::after {
|
|
2896
2885
|
position: absolute;
|
|
2897
2886
|
content: counter(line);
|
|
2898
2887
|
color: var(--fd-counter-color, hsl(0, 0%, 45.1%));
|
|
@@ -2902,28 +2891,28 @@
|
|
|
2902
2891
|
top: calc(var(--spacing) * 0);
|
|
2903
2892
|
left: calc(var(--spacing) * 4);
|
|
2904
2893
|
}
|
|
2905
|
-
.diff
|
|
2894
|
+
.diff::before {
|
|
2906
2895
|
position: absolute;
|
|
2907
2896
|
left: calc(var(--spacing) * 1.5);
|
|
2908
2897
|
}
|
|
2909
|
-
.diff.remove
|
|
2898
|
+
.diff.remove {
|
|
2910
2899
|
opacity: 0.7;
|
|
2911
2900
|
--fd-counter-color: var(--color-fd-diff-remove-symbol);
|
|
2912
2901
|
background-color: var(--color-fd-diff-remove);
|
|
2913
2902
|
}
|
|
2914
|
-
.diff.remove
|
|
2903
|
+
.diff.remove::before {
|
|
2915
2904
|
content: '-';
|
|
2916
2905
|
color: var(--color-fd-diff-remove-symbol);
|
|
2917
2906
|
}
|
|
2918
|
-
.diff.add
|
|
2907
|
+
.diff.add {
|
|
2919
2908
|
--fd-counter-color: var(--color-fd-diff-add-symbol);
|
|
2920
2909
|
background-color: var(--color-fd-diff-add);
|
|
2921
2910
|
}
|
|
2922
|
-
.diff.add
|
|
2911
|
+
.diff.add::before {
|
|
2923
2912
|
content: '+';
|
|
2924
2913
|
color: var(--color-fd-diff-add-symbol);
|
|
2925
2914
|
}
|
|
2926
|
-
.highlighted
|
|
2915
|
+
.highlighted {
|
|
2927
2916
|
--fd-counter-color: var(--color-fd-primary);
|
|
2928
2917
|
padding-left: calc(var(--padding-left) - 2px);
|
|
2929
2918
|
border-left-style: var(--tw-border-style);
|
|
@@ -2937,7 +2926,7 @@
|
|
|
2937
2926
|
background-color: color-mix(in oklab, var(--color-fd-primary) 10%, transparent);
|
|
2938
2927
|
}
|
|
2939
2928
|
}
|
|
2940
|
-
.highlighted-word
|
|
2929
|
+
.highlighted-word {
|
|
2941
2930
|
padding: 1px;
|
|
2942
2931
|
margin-block: -1px;
|
|
2943
2932
|
border-radius: var(--radius-md);
|
|
@@ -2955,6 +2944,12 @@
|
|
|
2955
2944
|
font-weight: var(--font-weight-medium);
|
|
2956
2945
|
}
|
|
2957
2946
|
}
|
|
2947
|
+
.dark .shiki:not(.not-fumadocs-codeblock *) {
|
|
2948
|
+
code span {
|
|
2949
|
+
color: var(--shiki-dark);
|
|
2950
|
+
font-style: var(--shiki-dark-font-style);
|
|
2951
|
+
}
|
|
2952
|
+
}
|
|
2958
2953
|
:root {
|
|
2959
2954
|
--fd-sidebar-drawer-offset: 100%;
|
|
2960
2955
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fumadocs/base-ui",
|
|
3
|
-
"version": "16.6.
|
|
3
|
+
"version": "16.6.4",
|
|
4
4
|
"description": "The Base UI version of Fumadocs UI",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Docs",
|
|
@@ -96,14 +96,14 @@
|
|
|
96
96
|
"dependencies": {
|
|
97
97
|
"@base-ui/react": "^1.2.0",
|
|
98
98
|
"class-variance-authority": "^0.7.1",
|
|
99
|
-
"lucide-react": "^0.
|
|
99
|
+
"lucide-react": "^0.570.0",
|
|
100
100
|
"motion": "^12.34.0",
|
|
101
101
|
"next-themes": "^0.4.6",
|
|
102
102
|
"react-medium-image-zoom": "^5.4.0",
|
|
103
103
|
"react-remove-scroll": "^2.7.2",
|
|
104
104
|
"rehype-raw": "^7.0.0",
|
|
105
105
|
"scroll-into-view-if-needed": "^3.1.0",
|
|
106
|
-
"tailwind-merge": "^3.4.
|
|
106
|
+
"tailwind-merge": "^3.4.1",
|
|
107
107
|
"unist-util-visit": "^5.1.0",
|
|
108
108
|
"@fumadocs/tailwind": "0.0.2"
|
|
109
109
|
},
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
"unified": "^11.0.5",
|
|
119
119
|
"@fumadocs/cli": "1.2.4",
|
|
120
120
|
"eslint-config-custom": "0.0.0",
|
|
121
|
-
"fumadocs-core": "16.6.
|
|
121
|
+
"fumadocs-core": "16.6.4",
|
|
122
122
|
"tsconfig": "0.0.0"
|
|
123
123
|
},
|
|
124
124
|
"peerDependencies": {
|
|
@@ -127,7 +127,7 @@
|
|
|
127
127
|
"react": "^19.2.0",
|
|
128
128
|
"react-dom": "^19.2.0",
|
|
129
129
|
"tailwindcss": "^4.0.0",
|
|
130
|
-
"fumadocs-core": "16.6.
|
|
130
|
+
"fumadocs-core": "16.6.4"
|
|
131
131
|
},
|
|
132
132
|
"peerDependenciesMeta": {
|
|
133
133
|
"next": {
|