fumadocs-ui 12.5.6 → 13.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/{chunk-VYTHQTZE.js → chunk-2FLZOPQN.js} +2 -2
  2. package/dist/{chunk-R3M2OC5U.js → chunk-34Z7WODD.js} +1 -1
  3. package/dist/{chunk-IIDV3RNQ.js → chunk-AN2Y6MA2.js} +1 -5
  4. package/dist/{chunk-QQAMPLSA.js → chunk-B63IB7CZ.js} +16 -8
  5. package/dist/{chunk-7W3V2Z46.js → chunk-E2FDBE7T.js} +10 -10
  6. package/dist/{chunk-GHKJ6EFT.js → chunk-GLZ6ALZV.js} +1 -1
  7. package/dist/{chunk-FMI5QZTV.js → chunk-HOIRMHZT.js} +1 -1
  8. package/dist/{chunk-YSCK5YFO.js → chunk-IMIWZAMU.js} +6 -6
  9. package/dist/{chunk-TPY3ZIF5.js → chunk-J6TIWNTK.js} +10 -10
  10. package/dist/{chunk-SZGCBNYN.js → chunk-KACGIS2N.js} +10 -7
  11. package/dist/chunk-KWZZNVSY.js +39 -0
  12. package/dist/{chunk-7XPZOMJ2.js → chunk-TQJ6YPJ3.js} +4 -4
  13. package/dist/{chunk-5CZEA2KX.js → chunk-TRYAQONT.js} +6 -5
  14. package/dist/{chunk-KWGNIMEM.js → chunk-U7FLICJE.js} +10 -10
  15. package/dist/{chunk-N3HFQZRE.js → chunk-WLTWFYQA.js} +3 -3
  16. package/dist/components/accordion.js +98 -6
  17. package/dist/components/api.d.ts +2 -38
  18. package/dist/components/api.js +1 -150
  19. package/dist/components/banner.js +3 -3
  20. package/dist/components/callout.d.ts +4 -1
  21. package/dist/components/callout.js +3 -34
  22. package/dist/components/card.d.ts +1 -1
  23. package/dist/components/card.js +1 -1
  24. package/dist/components/codeblock.d.ts +22 -0
  25. package/dist/components/codeblock.js +3 -3
  26. package/dist/components/dialog/search-algolia.js +3 -3
  27. package/dist/components/dialog/search-default.js +2 -2
  28. package/dist/components/dialog/search.js +2 -2
  29. package/dist/components/files.js +3 -3
  30. package/dist/components/heading.js +1 -1
  31. package/dist/components/image-zoom.js +1 -1
  32. package/dist/components/inline-toc.js +4 -4
  33. package/dist/components/layout/language-toggle.js +9 -10
  34. package/dist/components/layout/root-toggle.js +6 -6
  35. package/dist/components/tabs.d.ts +2 -2
  36. package/dist/components/tabs.js +156 -7
  37. package/dist/components/type-table.js +11 -8
  38. package/dist/docs-layout.client.d.ts +3 -3
  39. package/dist/docs-layout.client.js +9 -9
  40. package/dist/{dynamic-sidebar-DNIAMP76.js → dynamic-sidebar-N5DEONM3.js} +9 -9
  41. package/dist/home-layout.client.d.ts +1 -1
  42. package/dist/home-layout.client.js +10 -9
  43. package/dist/home-layout.d.ts +1 -1
  44. package/dist/home-layout.js +2 -2
  45. package/dist/{i18n-DSnJuWoW.d.ts → i18n-BDWFZFLm.d.ts} +4 -6
  46. package/dist/i18n.d.ts +11 -10
  47. package/dist/i18n.js +4 -4
  48. package/dist/image-zoom.css +1 -1
  49. package/dist/layout.d.ts +4 -8
  50. package/dist/layout.js +5 -22
  51. package/dist/{layout.shared-GQuo9xqE.d.ts → layout.shared-C5L62VPM.d.ts} +1 -1
  52. package/dist/mdx.client.d.ts +8 -1
  53. package/dist/mdx.client.js +5 -10
  54. package/dist/mdx.d.ts +7 -1
  55. package/dist/mdx.js +8 -4
  56. package/dist/page.client.d.ts +1 -1
  57. package/dist/page.client.js +22 -20
  58. package/dist/page.d.ts +1 -1
  59. package/dist/page.js +2 -2
  60. package/dist/provider.d.ts +1 -1
  61. package/dist/provider.js +2 -2
  62. package/dist/{sidebar-DN7GLdpV.d.ts → sidebar-CKjkPpjB.d.ts} +1 -1
  63. package/dist/style.css +1 -1
  64. package/dist/tailwind-plugin.d.ts +16 -5
  65. package/dist/tailwind-plugin.js +107 -120
  66. package/dist/twoslash/popup.js +1 -1
  67. package/dist/twoslash.css +1 -1
  68. package/package.json +3 -3
  69. package/dist/chunk-QZBW7643.js +0 -162
  70. package/dist/chunk-YKLVLKDA.js +0 -104
  71. package/dist/components/roll-button.d.ts +0 -14
  72. package/dist/components/roll-button.js +0 -69
  73. package/dist/tailwind-plugin.cjs +0 -621
@@ -36,13 +36,13 @@ var ScrollBar = React.forwardRef(({ className, orientation = "vertical", ...prop
36
36
  ref,
37
37
  orientation,
38
38
  className: twMerge(
39
- "flex select-none data-[state=hidden]:animate-fade-out",
39
+ "flex select-none data-[state=hidden]:animate-fd-fade-out",
40
40
  orientation === "vertical" && "h-full w-1.5",
41
41
  orientation === "horizontal" && "h-1.5 flex-col",
42
42
  className
43
43
  ),
44
44
  ...props,
45
- children: /* @__PURE__ */ jsx(ScrollAreaPrimitive.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border" })
45
+ children: /* @__PURE__ */ jsx(ScrollAreaPrimitive.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-fd-border" })
46
46
  }
47
47
  ));
48
48
  ScrollBar.displayName = ScrollAreaPrimitive.Scrollbar.displayName;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  hasActive
3
- } from "./chunk-IIDV3RNQ.js";
3
+ } from "./chunk-AN2Y6MA2.js";
4
4
 
5
5
  // src/contexts/tree.tsx
6
6
  import { usePathname } from "next/navigation";
@@ -18,14 +18,10 @@ function hasActive(items, url) {
18
18
  return false;
19
19
  });
20
20
  }
21
- function isSecondary(item) {
22
- return "secondary" in item && item.secondary === true || item.type === "secondary" || item.type === "icon";
23
- }
24
21
 
25
22
  export {
26
23
  defaultImageSizes,
27
24
  isActive,
28
25
  replaceOrDefault,
29
- hasActive,
30
- isSecondary
26
+ hasActive
31
27
  };
@@ -2,13 +2,13 @@ import {
2
2
  ScrollArea,
3
3
  ScrollBar,
4
4
  ScrollViewport
5
- } from "./chunk-VYTHQTZE.js";
5
+ } from "./chunk-2FLZOPQN.js";
6
6
  import {
7
7
  useCopyButton
8
8
  } from "./chunk-2KMKNVSN.js";
9
9
  import {
10
10
  buttonVariants
11
- } from "./chunk-YSCK5YFO.js";
11
+ } from "./chunk-IMIWZAMU.js";
12
12
  import {
13
13
  twMerge
14
14
  } from "./chunk-TK3TM3MR.js";
@@ -23,12 +23,19 @@ import {
23
23
  import { jsx, jsxs } from "react/jsx-runtime";
24
24
  var Pre = forwardRef(
25
25
  ({ className, ...props }, ref) => {
26
- return /* @__PURE__ */ jsx("pre", { ref, className: twMerge("nd-codeblock p-4", className), ...props, children: props.children });
26
+ return /* @__PURE__ */ jsx("pre", { ref, className: twMerge("p-4", className), ...props, children: props.children });
27
27
  }
28
28
  );
29
29
  Pre.displayName = "Pre";
30
30
  var CodeBlock = forwardRef(
31
- ({ title, allowCopy = true, icon, className, ...props }, ref) => {
31
+ ({
32
+ title,
33
+ allowCopy = true,
34
+ keepBackground = false,
35
+ icon,
36
+ className,
37
+ ...props
38
+ }, ref) => {
32
39
  const areaRef = useRef(null);
33
40
  const onCopy = useCallback(() => {
34
41
  const pre = areaRef.current?.getElementsByTagName("pre").item(0);
@@ -44,16 +51,17 @@ var CodeBlock = forwardRef(
44
51
  {
45
52
  ref,
46
53
  className: twMerge(
47
- "not-prose group relative my-6 overflow-hidden rounded-lg border bg-secondary/50 text-sm",
54
+ "not-prose group fd-codeblock relative my-6 overflow-hidden rounded-lg border bg-fd-secondary/50 text-sm",
55
+ keepBackground && "fd-codeblock-keep-bg",
48
56
  className
49
57
  ),
50
58
  ...props,
51
59
  children: [
52
- title ? /* @__PURE__ */ jsxs("div", { className: "flex flex-row items-center gap-2 border-b bg-muted px-4 py-1.5", children: [
60
+ title ? /* @__PURE__ */ jsxs("div", { className: "flex flex-row items-center gap-2 border-b bg-fd-muted px-4 py-1.5", children: [
53
61
  icon ? /* @__PURE__ */ jsx(
54
62
  "div",
55
63
  {
56
- className: "text-muted-foreground [&_svg]:size-3.5",
64
+ className: "text-fd-muted-foreground [&_svg]:size-3.5",
57
65
  ...typeof icon === "string" ? {
58
66
  dangerouslySetInnerHTML: { __html: icon }
59
67
  } : {
@@ -61,7 +69,7 @@ var CodeBlock = forwardRef(
61
69
  }
62
70
  }
63
71
  ) : null,
64
- /* @__PURE__ */ jsx("figcaption", { className: "flex-1 truncate text-muted-foreground", children: title }),
72
+ /* @__PURE__ */ jsx("figcaption", { className: "flex-1 truncate text-fd-muted-foreground", children: title }),
65
73
  allowCopy ? /* @__PURE__ */ jsx(CopyButton, { className: "-me-2", onCopy }) : null
66
74
  ] }) : allowCopy && /* @__PURE__ */ jsx(
67
75
  CopyButton,
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-HLGNIWUN.js";
10
10
  import {
11
11
  buttonVariants
12
- } from "./chunk-YSCK5YFO.js";
12
+ } from "./chunk-IMIWZAMU.js";
13
13
  import {
14
14
  twMerge
15
15
  } from "./chunk-TK3TM3MR.js";
@@ -29,13 +29,13 @@ import { Search } from "lucide-react";
29
29
  import * as React from "react";
30
30
  import { jsx, jsxs } from "react/jsx-runtime";
31
31
  var CommandInput = React.forwardRef(({ className, onClose, ...props }, ref) => /* @__PURE__ */ jsxs("div", { className: "flex flex-row items-center gap-2 px-3", children: [
32
- /* @__PURE__ */ jsx(Search, { className: "size-4 text-muted-foreground" }),
32
+ /* @__PURE__ */ jsx(Search, { className: "size-4 text-fd-muted-foreground" }),
33
33
  /* @__PURE__ */ jsx(
34
34
  CommandPrimitive.Input,
35
35
  {
36
36
  ref,
37
37
  className: twMerge(
38
- "w-0 flex-1 bg-transparent py-3 text-base placeholder:text-muted-foreground focus-visible:outline-none",
38
+ "w-0 flex-1 bg-transparent py-3 text-base placeholder:text-fd-muted-foreground focus-visible:outline-none",
39
39
  className
40
40
  ),
41
41
  ...props
@@ -90,7 +90,7 @@ var CommandSeparator = React.forwardRef(({ className, ...props }, ref) => /* @__
90
90
  CommandPrimitive.Separator,
91
91
  {
92
92
  ref,
93
- className: twMerge("h-px bg-border", className),
93
+ className: twMerge("h-px bg-fd-border", className),
94
94
  ...props
95
95
  }
96
96
  ));
@@ -100,7 +100,7 @@ var CommandItem = React.forwardRef(({ className, icon, nested = false, children,
100
100
  {
101
101
  ref,
102
102
  className: twMerge(
103
- "select-none rounded-lg px-2 text-sm aria-disabled:pointer-events-none aria-disabled:opacity-50 aria-selected:bg-accent aria-selected:text-accent-foreground",
103
+ "select-none rounded-lg px-2 text-sm aria-disabled:pointer-events-none aria-disabled:opacity-50 aria-selected:bg-fd-accent aria-selected:text-fd-accent-foreground",
104
104
  className
105
105
  ),
106
106
  ...props,
@@ -112,7 +112,7 @@ var CommandItem = React.forwardRef(({ className, icon, nested = false, children,
112
112
  nested && "ms-2 gap-2 border-s ps-4"
113
113
  ),
114
114
  children: [
115
- /* @__PURE__ */ jsx("div", { className: "text-muted-foreground [&_svg]:size-4", children: icon }),
115
+ /* @__PURE__ */ jsx("div", { className: "text-fd-muted-foreground [&_svg]:size-4", children: icon }),
116
116
  /* @__PURE__ */ jsx("p", { className: "w-0 flex-1 truncate", children })
117
117
  ]
118
118
  }
@@ -126,8 +126,8 @@ var CommandDialog = React.forwardRef(({ footer, children, ...props }, ref) => /*
126
126
  ref,
127
127
  shouldFilter: false,
128
128
  loop: true,
129
- contentClassName: "fixed left-1/2 top-[10vh] z-50 w-[98vw] max-w-screen-sm origin-left -translate-x-1/2 rounded-lg border bg-popover text-popover-foreground shadow-lg data-[state=closed]:animate-dialog-out data-[state=open]:animate-dialog-in",
130
- overlayClassName: "fixed inset-0 z-50 bg-background/50 backdrop-blur-sm data-[state=closed]:animate-fade-out data-[state=open]:animate-fade-in",
129
+ contentClassName: "fixed left-1/2 top-[10vh] z-50 w-[98vw] max-w-screen-sm origin-left -translate-x-1/2 rounded-lg border bg-fd-popover text-fd-popover-foreground shadow-lg data-[state=closed]:animate-fd-dialog-out data-[state=open]:animate-fd-dialog-in",
130
+ overlayClassName: "fixed inset-0 z-50 bg-fd-background/50 backdrop-blur-sm data-[state=closed]:animate-fd-fade-out data-[state=open]:animate-fd-fade-in",
131
131
  ...props,
132
132
  children: [
133
133
  children,
@@ -217,11 +217,11 @@ function Search2({
217
217
  ] });
218
218
  }
219
219
  var itemVariants = cva(
220
- "rounded-md border px-2 py-0.5 text-xs font-medium text-muted-foreground transition-colors",
220
+ "rounded-md border px-2 py-0.5 text-xs font-medium text-fd-muted-foreground transition-colors",
221
221
  {
222
222
  variants: {
223
223
  active: {
224
- true: "bg-accent text-accent-foreground"
224
+ true: "bg-fd-accent text-fd-accent-foreground"
225
225
  }
226
226
  }
227
227
  }
@@ -16,7 +16,7 @@ var PopoverContent = React.forwardRef(({ className, align = "center", sideOffset
16
16
  sideOffset,
17
17
  side: "bottom",
18
18
  className: twMerge(
19
- "z-50 min-w-[220px] max-w-[98vw] rounded-lg border bg-popover p-2 text-sm text-popover-foreground shadow-md outline-none data-[state=closed]:animate-popover-out data-[state=open]:animate-popover-in",
19
+ "z-50 min-w-[220px] max-w-[98vw] rounded-lg border bg-fd-popover p-2 text-sm text-fd-popover-foreground shadow-md outline-none data-[state=closed]:animate-fd-popover-out data-[state=open]:animate-fd-popover-in",
20
20
  className
21
21
  ),
22
22
  ...props
@@ -6,7 +6,7 @@ function getLinks(links, githubUrl) {
6
6
  result = [
7
7
  ...result,
8
8
  {
9
- type: "secondary",
9
+ type: "icon",
10
10
  url: githubUrl,
11
11
  text: "Github",
12
12
  icon: /* @__PURE__ */ jsx("svg", { role: "img", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12" }) }),
@@ -5,9 +5,9 @@ var buttonVariants = cva(
5
5
  {
6
6
  variants: {
7
7
  color: {
8
- outline: "border hover:bg-accent hover:text-accent-foreground",
9
- ghost: "hover:bg-accent hover:text-accent-foreground",
10
- secondary: "border bg-secondary text-secondary-foreground hover:bg-accent hover:text-accent-foreground"
8
+ outline: "border hover:bg-fd-accent hover:text-fd-accent-foreground",
9
+ ghost: "hover:bg-fd-accent hover:text-fd-accent-foreground",
10
+ secondary: "border bg-fd-secondary text-fd-secondary-foreground hover:bg-fd-accent hover:text-fd-accent-foreground"
11
11
  },
12
12
  size: {
13
13
  sm: "gap-1 p-0.5 text-xs",
@@ -17,12 +17,12 @@ var buttonVariants = cva(
17
17
  }
18
18
  );
19
19
  var itemVariants = cva(
20
- "flex w-full flex-row items-center gap-2 rounded-md px-2 py-1.5 text-muted-foreground transition-colors duration-100 [&_svg]:size-4",
20
+ "flex w-full flex-row items-center gap-2 rounded-md px-2 py-1.5 text-fd-muted-foreground transition-colors duration-100 [&_svg]:size-4",
21
21
  {
22
22
  variants: {
23
23
  active: {
24
- true: "bg-primary/10 font-medium text-primary",
25
- false: "hover:bg-accent/50 hover:text-accent-foreground/80 hover:transition-none"
24
+ true: "bg-fd-primary/10 font-medium text-fd-primary",
25
+ false: "hover:bg-fd-accent/50 hover:text-fd-accent-foreground/80 hover:transition-none"
26
26
  }
27
27
  },
28
28
  defaultVariants: {
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  LargeSearchToggle,
3
3
  LinkItem
4
- } from "./chunk-KWGNIMEM.js";
4
+ } from "./chunk-U7FLICJE.js";
5
+ import {
6
+ useTreeContext
7
+ } from "./chunk-34Z7WODD.js";
5
8
  import {
6
9
  ScrollArea,
7
10
  ScrollViewport
8
- } from "./chunk-VYTHQTZE.js";
9
- import {
10
- useTreeContext
11
- } from "./chunk-R3M2OC5U.js";
11
+ } from "./chunk-2FLZOPQN.js";
12
12
  import {
13
13
  hasActive,
14
14
  isActive
15
- } from "./chunk-IIDV3RNQ.js";
15
+ } from "./chunk-AN2Y6MA2.js";
16
16
  import {
17
17
  useSearchContext
18
18
  } from "./chunk-ET4TW6M5.js";
@@ -20,10 +20,10 @@ import {
20
20
  Collapsible,
21
21
  CollapsibleContent,
22
22
  CollapsibleTrigger
23
- } from "./chunk-7XPZOMJ2.js";
23
+ } from "./chunk-TQJ6YPJ3.js";
24
24
  import {
25
25
  itemVariants
26
- } from "./chunk-YSCK5YFO.js";
26
+ } from "./chunk-IMIWZAMU.js";
27
27
  import {
28
28
  twMerge
29
29
  } from "./chunk-TK3TM3MR.js";
@@ -75,8 +75,8 @@ function Sidebar({
75
75
  blockScrollingWidth: 768,
76
76
  ...props.aside,
77
77
  className: twMerge(
78
- "fixed z-30 flex shrink-0 flex-col bg-card text-sm md:sticky md:top-0 md:h-dvh md:w-[240px] md:border-e xl:w-[260px]",
79
- "max-md:inset-0 max-md:bg-background/80 max-md:pt-14 max-md:text-[15px] max-md:backdrop-blur-md max-md:data-[open=false]:hidden",
78
+ "fixed z-30 flex shrink-0 flex-col bg-fd-card text-sm md:sticky md:top-0 md:h-dvh md:w-[240px] md:border-e xl:w-[260px]",
79
+ "max-md:inset-0 max-md:bg-fd-background/80 max-md:pt-14 max-md:text-[15px] max-md:backdrop-blur-md max-md:data-[open=false]:hidden",
80
80
  props.aside?.className
81
81
  ),
82
82
  children: [
@@ -31,7 +31,7 @@ function NavBox({
31
31
  ...props,
32
32
  className: twMerge(
33
33
  "sticky top-0 z-50 border-b transition-colors",
34
- transparent ? "border-transparent" : "border-foreground/10 bg-background/60 backdrop-blur-md",
34
+ transparent ? "border-transparent" : "border-fd-foreground/10 bg-fd-background/60 backdrop-blur-md",
35
35
  props.className
36
36
  )
37
37
  }
@@ -47,14 +47,17 @@ import { Moon, Sun } from "lucide-react";
47
47
  import { useTheme } from "next-themes";
48
48
  import { useCallback } from "react";
49
49
  import { jsx as jsx2, jsxs } from "react/jsx-runtime";
50
- var buttonVariants = cva("size-7 rounded-full p-1.5 text-muted-foreground", {
51
- variants: {
52
- dark: {
53
- true: "dark:bg-accent dark:text-accent-foreground",
54
- false: "bg-accent text-accent-foreground dark:bg-transparent dark:text-muted-foreground"
50
+ var buttonVariants = cva(
51
+ "size-7 rounded-full p-1.5 text-fd-muted-foreground",
52
+ {
53
+ variants: {
54
+ dark: {
55
+ true: "dark:bg-fd-accent dark:text-fd-accent-foreground",
56
+ false: "bg-fd-accent text-fd-accent-foreground dark:bg-transparent dark:text-fd-muted-foreground"
57
+ }
55
58
  }
56
59
  }
57
- });
60
+ );
58
61
  function ThemeToggle({
59
62
  className,
60
63
  ...props
@@ -0,0 +1,39 @@
1
+ import {
2
+ twMerge
3
+ } from "./chunk-TK3TM3MR.js";
4
+
5
+ // src/components/callout.tsx
6
+ import { AlertTriangle, Info, OctagonAlert } from "lucide-react";
7
+ import { forwardRef } from "react";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ var Callout = forwardRef(
10
+ ({ className, children, title, type = "info", icon, ...props }, ref) => {
11
+ return /* @__PURE__ */ jsxs(
12
+ "div",
13
+ {
14
+ ref,
15
+ className: twMerge(
16
+ "my-6 flex flex-row gap-2 rounded-lg border bg-fd-card p-3 text-sm text-fd-card-foreground shadow-md",
17
+ className
18
+ ),
19
+ ...props,
20
+ children: [
21
+ icon ?? {
22
+ info: /* @__PURE__ */ jsx(Info, { className: "size-5 fill-blue-500 text-fd-card" }),
23
+ warn: /* @__PURE__ */ jsx(AlertTriangle, { className: "size-5 fill-orange-500 text-fd-card" }),
24
+ error: /* @__PURE__ */ jsx(OctagonAlert, { className: "size-5 fill-red-500 text-fd-card" })
25
+ }[type],
26
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
27
+ title ? /* @__PURE__ */ jsx("p", { className: "not-prose mb-2 font-medium", children: title }) : null,
28
+ /* @__PURE__ */ jsx("div", { className: "text-fd-muted-foreground prose-no-margin", children })
29
+ ] })
30
+ ]
31
+ }
32
+ );
33
+ }
34
+ );
35
+ Callout.displayName = "Callout";
36
+
37
+ export {
38
+ Callout
39
+ };
@@ -8,16 +8,16 @@ import { forwardRef } from "react";
8
8
  import { jsx } from "react/jsx-runtime";
9
9
  var Collapsible = CollapsiblePrimitive.Root;
10
10
  var CollapsibleTrigger2 = CollapsiblePrimitive.CollapsibleTrigger;
11
- var CollapsibleContent2 = forwardRef(({ className, children, ...props }, ref) => {
11
+ var CollapsibleContent2 = forwardRef(({ children, ...props }, ref) => {
12
12
  return /* @__PURE__ */ jsx(
13
13
  CollapsiblePrimitive.CollapsibleContent,
14
14
  {
15
15
  ref,
16
+ ...props,
16
17
  className: twMerge(
17
- "overflow-hidden data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down",
18
- className
18
+ "overflow-hidden [--radix-collapsible-content-height:0px] data-[state=closed]:animate-fd-collapsible-up data-[state=open]:animate-fd-collapsible-down",
19
+ props.className
19
20
  ),
20
- ...props,
21
21
  children
22
22
  }
23
23
  );
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-TK3TM3MR.js";
4
4
 
5
5
  // src/components/heading.tsx
6
- import { LinkIcon } from "lucide-react";
6
+ import { Link } from "lucide-react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
8
  function Heading({
9
9
  as,
@@ -11,16 +11,17 @@ function Heading({
11
11
  ...props
12
12
  }) {
13
13
  const As = as ?? "h1";
14
- return /* @__PURE__ */ jsx(As, { className: twMerge("scroll-m-20", className), ...props, children: props.id ? /* @__PURE__ */ jsxs("a", { href: `#${props.id}`, className: "group", children: [
14
+ if (!props.id) return /* @__PURE__ */ jsx(As, { className, ...props });
15
+ return /* @__PURE__ */ jsx(As, { className: twMerge("scroll-m-20", className), ...props, children: /* @__PURE__ */ jsxs("a", { href: `#${props.id}`, className: "group inline-flex items-center", children: [
15
16
  props.children,
16
17
  /* @__PURE__ */ jsx(
17
- LinkIcon,
18
+ Link,
18
19
  {
19
20
  "aria-label": "Link to section",
20
- className: "ms-2 inline size-4 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100"
21
+ className: "ms-2 size-4 text-fd-muted-foreground opacity-0 transition-opacity group-hover:opacity-100"
21
22
  }
22
23
  )
23
- ] }) : props.children });
24
+ ] }) });
24
25
  }
25
26
 
26
27
  export {
@@ -2,10 +2,10 @@ import {
2
2
  Popover,
3
3
  PopoverContent,
4
4
  PopoverTrigger
5
- } from "./chunk-GHKJ6EFT.js";
5
+ } from "./chunk-GLZ6ALZV.js";
6
6
  import {
7
7
  isActive
8
- } from "./chunk-IIDV3RNQ.js";
8
+ } from "./chunk-AN2Y6MA2.js";
9
9
  import {
10
10
  useSearchContext
11
11
  } from "./chunk-ET4TW6M5.js";
@@ -16,11 +16,11 @@ import {
16
16
  Collapsible,
17
17
  CollapsibleContent,
18
18
  CollapsibleTrigger
19
- } from "./chunk-7XPZOMJ2.js";
19
+ } from "./chunk-TQJ6YPJ3.js";
20
20
  import {
21
21
  buttonVariants,
22
22
  itemVariants
23
- } from "./chunk-YSCK5YFO.js";
23
+ } from "./chunk-IMIWZAMU.js";
24
24
  import {
25
25
  twMerge
26
26
  } from "./chunk-TK3TM3MR.js";
@@ -34,12 +34,12 @@ import { useState } from "react";
34
34
  import { useOnChange } from "fumadocs-core/utils/use-on-change";
35
35
  import { jsx, jsxs } from "react/jsx-runtime";
36
36
  var linkItemVariants = cva(
37
- "-m-2 inline-flex items-center gap-1 p-2 text-muted-foreground transition-colors [&_svg]:size-4",
37
+ "-m-2 inline-flex items-center gap-1 p-2 text-fd-muted-foreground transition-colors [&_svg]:size-4",
38
38
  {
39
39
  variants: {
40
40
  active: {
41
- true: "text-primary",
42
- false: "hover:text-accent-foreground"
41
+ true: "text-fd-primary",
42
+ false: "hover:text-fd-accent-foreground"
43
43
  }
44
44
  },
45
45
  defaultVariants: {
@@ -108,7 +108,7 @@ function LinkItem({
108
108
  }
109
109
  const activeType = item.active ?? "url";
110
110
  const active = activeType !== "none" && isActive(item.url, pathname, activeType === "nested-url");
111
- if ((item.type === "secondary" || item.type === "icon") && on === "nav") {
111
+ if (item.type === "icon" && on === "nav") {
112
112
  return /* @__PURE__ */ jsx(
113
113
  Link,
114
114
  {
@@ -201,7 +201,7 @@ function LargeSearchToggle(props) {
201
201
  "data-search-full": "",
202
202
  ...props,
203
203
  className: twMerge(
204
- "inline-flex items-center gap-2 rounded-full border bg-secondary/50 p-1.5 text-sm text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground",
204
+ "inline-flex items-center gap-2 rounded-full border bg-fd-secondary/50 p-1.5 text-sm text-fd-muted-foreground transition-colors hover:bg-fd-accent hover:text-fd-accent-foreground",
205
205
  props.className
206
206
  ),
207
207
  onClick: useCallback(() => {
@@ -210,7 +210,7 @@ function LargeSearchToggle(props) {
210
210
  children: [
211
211
  /* @__PURE__ */ jsx2(SearchIcon, { className: "ms-1 size-4" }),
212
212
  text.search,
213
- /* @__PURE__ */ jsx2("div", { className: "ms-auto inline-flex gap-0.5", children: hotKey.map((k, i) => /* @__PURE__ */ jsx2("kbd", { className: "rounded-md border bg-background px-1.5", children: k.display }, i)) })
213
+ /* @__PURE__ */ jsx2("div", { className: "ms-auto inline-flex gap-0.5", children: hotKey.map((k, i) => /* @__PURE__ */ jsx2("kbd", { className: "rounded-md border bg-fd-background px-1.5", children: k.display }, i)) })
214
214
  ]
215
215
  }
216
216
  );
@@ -26,13 +26,13 @@ function Card({
26
26
  {
27
27
  ...props,
28
28
  className: twMerge(
29
- "not-prose block rounded-lg border bg-card p-4 text-sm text-card-foreground shadow-md transition-colors hover:bg-accent/80",
29
+ "not-prose block rounded-lg border bg-fd-card p-4 text-sm text-fd-card-foreground shadow-md transition-colors hover:bg-fd-accent/80",
30
30
  props.className
31
31
  ),
32
32
  children: [
33
- icon ? /* @__PURE__ */ jsx("div", { className: "mb-2 w-fit rounded-md border bg-muted p-2 text-muted-foreground [&_svg]:size-4", children: icon }) : null,
33
+ icon ? /* @__PURE__ */ jsx("div", { className: "mb-2 w-fit rounded-md border bg-fd-muted p-2 text-fd-muted-foreground [&_svg]:size-4", children: icon }) : null,
34
34
  /* @__PURE__ */ jsx("h3", { className: "mb-1 font-medium", children: title }),
35
- /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: description })
35
+ description ? /* @__PURE__ */ jsx("p", { className: "text-fd-muted-foreground", children: description }) : null
36
36
  ]
37
37
  }
38
38
  );
@@ -1,12 +1,104 @@
1
1
  "use client";
2
2
  import {
3
- Accordion,
4
- Accordions
5
- } from "../chunk-YKLVLKDA.js";
6
- import "../chunk-2KMKNVSN.js";
7
- import "../chunk-YSCK5YFO.js";
8
- import "../chunk-TK3TM3MR.js";
3
+ useCopyButton
4
+ } from "../chunk-2KMKNVSN.js";
5
+ import {
6
+ buttonVariants
7
+ } from "../chunk-IMIWZAMU.js";
8
+ import {
9
+ twMerge
10
+ } from "../chunk-TK3TM3MR.js";
9
11
  import "../chunk-MLKGABMK.js";
12
+
13
+ // src/components/accordion.tsx
14
+ import * as AccordionPrimitive from "@radix-ui/react-accordion";
15
+ import { Check, ChevronRight, LinkIcon } from "lucide-react";
16
+ import {
17
+ forwardRef,
18
+ useState,
19
+ useEffect
20
+ } from "react";
21
+ import { jsx, jsxs } from "react/jsx-runtime";
22
+ var Accordions = forwardRef(({ type = "single", className, defaultValue, ...props }, ref) => {
23
+ const [value, setValue] = useState(
24
+ type === "single" ? defaultValue ?? "" : defaultValue ?? []
25
+ );
26
+ useEffect(() => {
27
+ const id = window.location.hash.substring(1);
28
+ if (id.length > 0)
29
+ setValue((prev) => typeof prev === "string" ? id : [id, ...prev]);
30
+ }, []);
31
+ return (
32
+ // @ts-expect-error -- Multiple types
33
+ /* @__PURE__ */ jsx(
34
+ AccordionPrimitive.Root,
35
+ {
36
+ type,
37
+ ref,
38
+ value,
39
+ onValueChange: setValue,
40
+ collapsible: type === "single" ? true : void 0,
41
+ className: twMerge(
42
+ "divide-y divide-fd-border overflow-hidden rounded-lg border bg-fd-card",
43
+ className
44
+ ),
45
+ ...props
46
+ }
47
+ )
48
+ );
49
+ });
50
+ Accordions.displayName = "Accordions";
51
+ var Accordion = forwardRef(({ title, className, id, children, ...props }, ref) => {
52
+ return /* @__PURE__ */ jsxs(
53
+ AccordionPrimitive.Item,
54
+ {
55
+ ref,
56
+ value: id ?? title,
57
+ className: twMerge("group/accordion relative scroll-m-20", className),
58
+ ...props,
59
+ children: [
60
+ /* @__PURE__ */ jsxs(
61
+ AccordionPrimitive.Header,
62
+ {
63
+ id,
64
+ className: "not-prose flex flex-row items-center font-medium text-fd-foreground",
65
+ children: [
66
+ /* @__PURE__ */ jsxs(AccordionPrimitive.Trigger, { className: "flex flex-1 items-center gap-2 p-4 text-start focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring", children: [
67
+ /* @__PURE__ */ jsx(ChevronRight, { className: "-ms-1 size-4 shrink-0 text-fd-muted-foreground transition-transform duration-200 group-data-[state=open]/accordion:rotate-90" }),
68
+ title
69
+ ] }),
70
+ id ? /* @__PURE__ */ jsx(CopyButton, { id }) : null
71
+ ]
72
+ }
73
+ ),
74
+ /* @__PURE__ */ jsx(AccordionPrimitive.Content, { className: "overflow-hidden data-[state=closed]:animate-fd-accordion-up data-[state=open]:animate-fd-accordion-down", children: /* @__PURE__ */ jsx("div", { className: "p-4 pt-0 prose-no-margin", children }) })
75
+ ]
76
+ }
77
+ );
78
+ });
79
+ function CopyButton({ id }) {
80
+ const [checked, onClick] = useCopyButton(() => {
81
+ const url = new URL(window.location.href);
82
+ url.hash = id;
83
+ void navigator.clipboard.writeText(url.toString());
84
+ });
85
+ return /* @__PURE__ */ jsx(
86
+ "button",
87
+ {
88
+ type: "button",
89
+ "aria-label": "Copy Link",
90
+ className: twMerge(
91
+ buttonVariants({
92
+ color: "ghost",
93
+ className: "text-fd-muted-foreground me-2"
94
+ })
95
+ ),
96
+ onClick,
97
+ children: checked ? /* @__PURE__ */ jsx(Check, { className: "size-3.5" }) : /* @__PURE__ */ jsx(LinkIcon, { className: "size-3.5" })
98
+ }
99
+ );
100
+ }
101
+ Accordion.displayName = "Accordion";
10
102
  export {
11
103
  Accordion,
12
104
  Accordions
@@ -1,8 +1,6 @@
1
- import { MouseEventHandler, HTMLAttributes, ReactNode } from 'react';
1
+ import { MouseEventHandler } from 'react';
2
2
  export { twMerge as cn } from 'tailwind-merge';
3
3
  import * as class_variance_authority_types from 'class-variance-authority/types';
4
- import { Tabs, Tab } from './tabs.js';
5
- import '@radix-ui/react-tabs';
6
4
 
7
5
  declare function useCopyButton(onCopy: () => void): [checked: boolean, onClick: MouseEventHandler];
8
6
 
@@ -14,38 +12,4 @@ declare const itemVariants: (props?: ({
14
12
  active?: boolean | null | undefined;
15
13
  } & class_variance_authority_types.ClassProp) | undefined) => string;
16
14
 
17
- declare function Root({ children, className, ...props }: HTMLAttributes<HTMLDivElement>): React.ReactElement;
18
- declare function API({ className, children, ...props }: HTMLAttributes<HTMLDivElement>): React.ReactElement;
19
- interface APIInfoProps extends HTMLAttributes<HTMLDivElement> {
20
- method?: string;
21
- route: string;
22
- }
23
- declare function APIInfo({ children, className, method, route, ...props }: APIInfoProps): React.ReactElement;
24
- interface PropertyProps {
25
- name: string;
26
- type: string;
27
- required: boolean;
28
- deprecated: boolean;
29
- children: ReactNode;
30
- }
31
- declare function Property({ name, type, required, deprecated, children, }: PropertyProps): React.ReactElement;
32
- declare function APIExample({ children, className, ...props }: HTMLAttributes<HTMLDivElement>): React.ReactElement;
33
- declare const Responses: typeof Tabs;
34
- declare const Response: typeof Tab;
35
- declare const Requests: typeof Tabs;
36
- declare const Request: typeof Tab;
37
- declare function ResponseTypes(props: {
38
- children: ReactNode;
39
- }): React.ReactElement;
40
- declare function ExampleResponse(props: {
41
- children: ReactNode;
42
- }): React.ReactElement;
43
- declare function TypeScriptResponse(props: {
44
- children: ReactNode;
45
- }): React.ReactElement;
46
- declare function ObjectCollapsible(props: {
47
- name: string;
48
- children: ReactNode;
49
- }): React.ReactElement;
50
-
51
- export { API, APIExample, APIInfo, type APIInfoProps, ExampleResponse, ObjectCollapsible, Property, Request, Requests, Response, ResponseTypes, Responses, Root, TypeScriptResponse, buttonVariants, itemVariants, useCopyButton };
15
+ export { buttonVariants, itemVariants, useCopyButton };