fumadocs-ui 15.2.8 → 16.0.3

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 (202) hide show
  1. package/README.md +1 -1
  2. package/css/black.css +4 -2
  3. package/css/catppuccin.css +2 -0
  4. package/css/default.css +33 -0
  5. package/css/dusk.css +2 -0
  6. package/css/neutral.css +11 -8
  7. package/css/ocean.css +5 -3
  8. package/css/preset.css +237 -16
  9. package/css/purple.css +12 -10
  10. package/css/shadcn.css +31 -0
  11. package/css/shiki.css +78 -51
  12. package/css/solar.css +48 -0
  13. package/css/vitepress.css +3 -4
  14. package/dist/components/accordion.d.ts +6 -3
  15. package/dist/components/accordion.d.ts.map +1 -1
  16. package/dist/components/accordion.js +19 -11
  17. package/dist/components/banner.d.ts +8 -2
  18. package/dist/components/banner.d.ts.map +1 -1
  19. package/dist/components/banner.js +25 -30
  20. package/dist/components/callout.d.ts +2 -2
  21. package/dist/components/callout.d.ts.map +1 -1
  22. package/dist/components/callout.js +15 -18
  23. package/dist/components/card.d.ts.map +1 -1
  24. package/dist/components/card.js +2 -2
  25. package/dist/components/codeblock.d.ts +19 -23
  26. package/dist/components/codeblock.d.ts.map +1 -1
  27. package/dist/components/codeblock.js +55 -24
  28. package/dist/components/dialog/search-algolia.d.ts +5 -4
  29. package/dist/components/dialog/search-algolia.d.ts.map +1 -1
  30. package/dist/components/dialog/search-algolia.js +21 -7
  31. package/dist/components/dialog/search-default.d.ts +4 -2
  32. package/dist/components/dialog/search-default.d.ts.map +1 -1
  33. package/dist/components/dialog/search-default.js +22 -6
  34. package/dist/components/dialog/search-orama.d.ts +5 -3
  35. package/dist/components/dialog/search-orama.d.ts.map +1 -1
  36. package/dist/components/dialog/search-orama.js +21 -6
  37. package/dist/components/dialog/search.d.ts +61 -27
  38. package/dist/components/dialog/search.d.ts.map +1 -1
  39. package/dist/components/dialog/search.js +155 -67
  40. package/dist/components/dynamic-codeblock.d.ts +16 -2
  41. package/dist/components/dynamic-codeblock.d.ts.map +1 -1
  42. package/dist/components/dynamic-codeblock.js +22 -10
  43. package/dist/components/files.d.ts.map +1 -1
  44. package/dist/components/files.js +1 -1
  45. package/dist/components/github-info.js +1 -1
  46. package/dist/components/heading.js +1 -1
  47. package/dist/components/image-zoom.css +4 -0
  48. package/dist/components/inline-toc.d.ts +2 -2
  49. package/dist/components/inline-toc.d.ts.map +1 -1
  50. package/dist/components/inline-toc.js +1 -1
  51. package/dist/components/layout/language-toggle.js +1 -1
  52. package/dist/components/layout/root-toggle.d.ts +5 -15
  53. package/dist/components/layout/root-toggle.d.ts.map +1 -1
  54. package/dist/components/layout/root-toggle.js +10 -12
  55. package/dist/components/layout/search-toggle.d.ts +6 -4
  56. package/dist/components/layout/search-toggle.d.ts.map +1 -1
  57. package/dist/components/layout/search-toggle.js +5 -5
  58. package/dist/components/layout/sidebar.d.ts +21 -13
  59. package/dist/components/layout/sidebar.d.ts.map +1 -1
  60. package/dist/components/layout/sidebar.js +67 -65
  61. package/dist/components/layout/theme-toggle.js +1 -1
  62. package/dist/components/layout/toc-clerk.d.ts +2 -4
  63. package/dist/components/layout/toc-clerk.d.ts.map +1 -1
  64. package/dist/components/layout/toc-clerk.js +9 -5
  65. package/dist/components/layout/toc-thumb.js +1 -1
  66. package/dist/components/layout/toc.d.ts +6 -22
  67. package/dist/components/layout/toc.d.ts.map +1 -1
  68. package/dist/components/layout/toc.js +14 -18
  69. package/dist/components/tabs.d.ts +18 -18
  70. package/dist/components/tabs.d.ts.map +1 -1
  71. package/dist/components/tabs.js +44 -105
  72. package/dist/components/tabs.unstyled.d.ts +24 -0
  73. package/dist/components/tabs.unstyled.d.ts.map +1 -0
  74. package/dist/components/tabs.unstyled.js +89 -0
  75. package/dist/components/type-table.d.ts +19 -10
  76. package/dist/components/type-table.d.ts.map +1 -1
  77. package/dist/components/type-table.js +19 -10
  78. package/dist/components/ui/button.d.ts +2 -1
  79. package/dist/components/ui/button.d.ts.map +1 -1
  80. package/dist/components/ui/button.js +12 -8
  81. package/dist/components/ui/navigation-menu.js +2 -2
  82. package/dist/components/ui/popover.js +1 -1
  83. package/dist/components/ui/scroll-area.d.ts.map +1 -1
  84. package/dist/components/ui/scroll-area.js +1 -1
  85. package/dist/contexts/search.d.ts +10 -2
  86. package/dist/contexts/search.d.ts.map +1 -1
  87. package/dist/contexts/search.js +7 -1
  88. package/dist/contexts/sidebar.d.ts.map +1 -1
  89. package/dist/contexts/sidebar.js +2 -3
  90. package/dist/contexts/tree.d.ts +2 -1
  91. package/dist/contexts/tree.d.ts.map +1 -1
  92. package/dist/contexts/tree.js +9 -2
  93. package/dist/i18n.d.ts +13 -11
  94. package/dist/i18n.d.ts.map +1 -1
  95. package/dist/i18n.js +14 -37
  96. package/dist/icons.d.ts +49 -0
  97. package/dist/icons.d.ts.map +1 -0
  98. package/dist/icons.js +282 -0
  99. package/dist/layouts/docs/client.d.ts +9 -0
  100. package/dist/layouts/docs/client.d.ts.map +1 -0
  101. package/dist/layouts/docs/client.js +46 -0
  102. package/dist/layouts/docs/index.d.ts +36 -0
  103. package/dist/layouts/docs/index.d.ts.map +1 -0
  104. package/dist/layouts/docs/index.js +77 -0
  105. package/dist/layouts/docs/page-client.d.ts +25 -0
  106. package/dist/layouts/docs/page-client.d.ts.map +1 -0
  107. package/dist/layouts/docs/page-client.js +157 -0
  108. package/dist/layouts/docs/page.d.ts +17 -0
  109. package/dist/layouts/docs/page.d.ts.map +1 -0
  110. package/dist/layouts/docs/page.js +26 -0
  111. package/dist/layouts/{home.d.ts → home/index.d.ts} +2 -3
  112. package/dist/layouts/home/index.d.ts.map +1 -0
  113. package/dist/layouts/home/index.js +56 -0
  114. package/dist/layouts/home/menu.d.ts +1 -1
  115. package/dist/layouts/home/menu.d.ts.map +1 -1
  116. package/dist/layouts/home/menu.js +3 -6
  117. package/dist/layouts/home/navbar.d.ts +4 -4
  118. package/dist/layouts/home/navbar.d.ts.map +1 -1
  119. package/dist/layouts/home/navbar.js +3 -4
  120. package/dist/layouts/notebook/client.d.ts +11 -0
  121. package/dist/layouts/notebook/client.d.ts.map +1 -0
  122. package/dist/layouts/notebook/client.js +45 -0
  123. package/dist/layouts/notebook/index.d.ts +34 -0
  124. package/dist/layouts/notebook/index.d.ts.map +1 -0
  125. package/dist/layouts/notebook/index.js +112 -0
  126. package/dist/layouts/shared/client.d.ts +6 -0
  127. package/dist/layouts/shared/client.d.ts.map +1 -0
  128. package/dist/layouts/{links.js → shared/client.js} +4 -6
  129. package/dist/layouts/shared/index.d.ts +122 -0
  130. package/dist/layouts/shared/index.d.ts.map +1 -0
  131. package/dist/layouts/{shared.js → shared/index.js} +1 -15
  132. package/dist/mdx.d.ts +7 -2
  133. package/dist/mdx.d.ts.map +1 -1
  134. package/dist/mdx.js +5 -1
  135. package/dist/mdx.server.d.ts.map +1 -1
  136. package/dist/mdx.server.js +10 -3
  137. package/dist/page.d.ts +33 -35
  138. package/dist/page.d.ts.map +1 -1
  139. package/dist/page.js +28 -32
  140. package/dist/provider/base.d.ts +1 -1
  141. package/dist/provider/base.d.ts.map +1 -1
  142. package/dist/provider/base.js +9 -9
  143. package/dist/provider/index.d.ts +5 -3
  144. package/dist/provider/index.d.ts.map +1 -1
  145. package/dist/provider/index.js +6 -6
  146. package/dist/provider/next.d.ts +4 -0
  147. package/dist/provider/next.d.ts.map +1 -0
  148. package/dist/provider/next.js +7 -0
  149. package/dist/provider/react-router.d.ts +4 -0
  150. package/dist/provider/react-router.d.ts.map +1 -0
  151. package/dist/provider/react-router.js +7 -0
  152. package/dist/provider/tanstack.d.ts +4 -0
  153. package/dist/provider/tanstack.d.ts.map +1 -0
  154. package/dist/provider/tanstack.js +7 -0
  155. package/dist/provider/waku.d.ts +4 -0
  156. package/dist/provider/waku.d.ts.map +1 -0
  157. package/dist/provider/waku.js +7 -0
  158. package/dist/style.css +944 -470
  159. package/dist/utils/get-sidebar-tabs.d.ts +18 -4
  160. package/dist/utils/get-sidebar-tabs.d.ts.map +1 -1
  161. package/dist/utils/get-sidebar-tabs.js +11 -8
  162. package/dist/utils/is-active.d.ts +2 -0
  163. package/dist/utils/is-active.d.ts.map +1 -1
  164. package/dist/utils/is-active.js +12 -4
  165. package/dist/utils/merge-refs.d.ts +3 -0
  166. package/dist/utils/merge-refs.d.ts.map +1 -0
  167. package/dist/utils/merge-refs.js +12 -0
  168. package/dist/utils/use-copy-button.d.ts +1 -1
  169. package/dist/utils/use-copy-button.d.ts.map +1 -1
  170. package/dist/utils/use-copy-button.js +9 -7
  171. package/package.json +76 -32
  172. package/css/animations.css +0 -199
  173. package/dist/components/ui/tabs.d.ts +0 -8
  174. package/dist/components/ui/tabs.d.ts.map +0 -1
  175. package/dist/components/ui/tabs.js +0 -16
  176. package/dist/layouts/docs/shared.d.ts +0 -25
  177. package/dist/layouts/docs/shared.d.ts.map +0 -1
  178. package/dist/layouts/docs/shared.js +0 -24
  179. package/dist/layouts/docs-client.d.ts +0 -5
  180. package/dist/layouts/docs-client.d.ts.map +0 -1
  181. package/dist/layouts/docs-client.js +0 -33
  182. package/dist/layouts/docs.d.ts +0 -30
  183. package/dist/layouts/docs.d.ts.map +0 -1
  184. package/dist/layouts/docs.js +0 -50
  185. package/dist/layouts/home.d.ts.map +0 -1
  186. package/dist/layouts/home.js +0 -44
  187. package/dist/layouts/links.d.ts +0 -79
  188. package/dist/layouts/links.d.ts.map +0 -1
  189. package/dist/layouts/notebook-client.d.ts +0 -12
  190. package/dist/layouts/notebook-client.d.ts.map +0 -1
  191. package/dist/layouts/notebook-client.js +0 -47
  192. package/dist/layouts/notebook.d.ts +0 -17
  193. package/dist/layouts/notebook.d.ts.map +0 -1
  194. package/dist/layouts/notebook.js +0 -68
  195. package/dist/layouts/shared.d.ts +0 -65
  196. package/dist/layouts/shared.d.ts.map +0 -1
  197. package/dist/page-client.d.ts +0 -28
  198. package/dist/page-client.d.ts.map +0 -1
  199. package/dist/page-client.js +0 -150
  200. package/dist/page.server.d.ts +0 -13
  201. package/dist/page.server.d.ts.map +0 -1
  202. package/dist/page.server.js +0 -36
@@ -1,7 +1,21 @@
1
- import type { PageTree } from 'fumadocs-core/server';
2
- import type { Option } from '../components/layout/root-toggle.js';
1
+ import type * as PageTree from 'fumadocs-core/page-tree';
2
+ import type { ReactNode } from 'react';
3
+ export interface SidebarTab {
4
+ /**
5
+ * Redirect URL of the folder, usually the index page
6
+ */
7
+ url: string;
8
+ icon?: ReactNode;
9
+ title: ReactNode;
10
+ description?: ReactNode;
11
+ /**
12
+ * Detect from a list of urls
13
+ */
14
+ urls?: Set<string>;
15
+ unlisted?: boolean;
16
+ }
3
17
  export interface GetSidebarTabsOptions {
4
- transform?: (option: Option, node: PageTree.Folder) => Option | null;
18
+ transform?: (option: SidebarTab, node: PageTree.Folder) => SidebarTab | null;
5
19
  }
6
- export declare function getSidebarTabs(pageTree: PageTree.Root, { transform }?: GetSidebarTabsOptions): Option[];
20
+ export declare function getSidebarTabs(tree: PageTree.Root, { transform }?: GetSidebarTabsOptions): SidebarTab[];
7
21
  //# sourceMappingURL=get-sidebar-tabs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-sidebar-tabs.d.ts","sourceRoot":"","sources":["../../src/utils/get-sidebar-tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAE9D,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CACtE;AAeD,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,QAAQ,CAAC,IAAI,EACvB,EAAE,SAA4B,EAAE,GAAE,qBAA0B,GAC3D,MAAM,EAAE,CA6BV"}
1
+ {"version":3,"file":"get-sidebar-tabs.d.ts","sourceRoot":"","sources":["../../src/utils/get-sidebar-tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB;;OAEG;IACH,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,KAAK,UAAU,GAAG,IAAI,CAAC;CAC9E;AAeD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,QAAQ,CAAC,IAAI,EACnB,EAAE,SAA4B,EAAE,GAAE,qBAA0B,GAC3D,UAAU,EAAE,CAkCd"}
@@ -4,19 +4,20 @@ const defaultTransform = (option, node) => {
4
4
  return option;
5
5
  return {
6
6
  ...option,
7
- icon: (_jsx("div", { className: "rounded-md border bg-fd-secondary p-1 shadow-md [&_svg]:size-5", children: node.icon })),
7
+ icon: (_jsx("div", { className: "size-full [&_svg]:size-full max-md:p-1.5 max-md:rounded-md max-md:border max-md:bg-fd-secondary", children: node.icon })),
8
8
  };
9
9
  };
10
- export function getSidebarTabs(pageTree, { transform = defaultTransform } = {}) {
11
- function findOptions(node) {
12
- const results = [];
13
- if (node.root) {
10
+ export function getSidebarTabs(tree, { transform = defaultTransform } = {}) {
11
+ const results = [];
12
+ function scanOptions(node, unlisted) {
13
+ if ('root' in node && node.root) {
14
14
  const urls = getFolderUrls(node);
15
15
  if (urls.size > 0) {
16
16
  const option = {
17
17
  url: urls.values().next().value ?? '',
18
18
  title: node.name,
19
19
  icon: node.icon,
20
+ unlisted,
20
21
  description: node.description,
21
22
  urls,
22
23
  };
@@ -27,11 +28,13 @@ export function getSidebarTabs(pageTree, { transform = defaultTransform } = {})
27
28
  }
28
29
  for (const child of node.children) {
29
30
  if (child.type === 'folder')
30
- results.push(...findOptions(child));
31
+ scanOptions(child, unlisted);
31
32
  }
32
- return results;
33
33
  }
34
- return findOptions(pageTree);
34
+ scanOptions(tree);
35
+ if (tree.fallback)
36
+ scanOptions(tree.fallback, true);
37
+ return results;
35
38
  }
36
39
  function getFolderUrls(folder, output = new Set()) {
37
40
  if (folder.index)
@@ -1,2 +1,4 @@
1
+ import type { SidebarTab } from '../utils/get-sidebar-tabs.js';
1
2
  export declare function isActive(url: string, pathname: string, nested?: boolean): boolean;
3
+ export declare function isTabActive(tab: SidebarTab, pathname: string): boolean;
2
4
  //# sourceMappingURL=is-active.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"is-active.d.ts","sourceRoot":"","sources":["../../src/utils/is-active.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CACtB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,UAAO,GACZ,OAAO,CAKT"}
1
+ {"version":3,"file":"is-active.d.ts","sourceRoot":"","sources":["../../src/utils/is-active.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAO3D,wBAAgB,QAAQ,CACtB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,UAAO,GACZ,OAAO,CAKT;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAI5D"}
@@ -1,7 +1,15 @@
1
+ function normalize(url) {
2
+ if (url.length > 1 && url.endsWith('/'))
3
+ return url.slice(0, -1);
4
+ return url;
5
+ }
1
6
  export function isActive(url, pathname, nested = true) {
2
- if (url.endsWith('/'))
3
- url = url.slice(0, -1);
4
- if (pathname.endsWith('/'))
5
- pathname = pathname.slice(0, -1);
7
+ url = normalize(url);
8
+ pathname = normalize(pathname);
6
9
  return url === pathname || (nested && pathname.startsWith(`${url}/`));
7
10
  }
11
+ export function isTabActive(tab, pathname) {
12
+ if (tab.urls)
13
+ return tab.urls.has(normalize(pathname));
14
+ return isActive(tab.url, pathname, true);
15
+ }
@@ -0,0 +1,3 @@
1
+ import type * as React from 'react';
2
+ export declare function mergeRefs<T>(...refs: (React.Ref<T> | undefined)[]): React.RefCallback<T>;
3
+ //# sourceMappingURL=merge-refs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-refs.d.ts","sourceRoot":"","sources":["../../src/utils/merge-refs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,wBAAgB,SAAS,CAAC,CAAC,EACzB,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,GACpC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAUtB"}
@@ -0,0 +1,12 @@
1
+ export function mergeRefs(...refs) {
2
+ return (value) => {
3
+ refs.forEach((ref) => {
4
+ if (typeof ref === 'function') {
5
+ ref(value);
6
+ }
7
+ else if (ref) {
8
+ ref.current = value;
9
+ }
10
+ });
11
+ };
12
+ }
@@ -1,3 +1,3 @@
1
1
  import { type MouseEventHandler } from 'react';
2
- export declare function useCopyButton(onCopy: () => void): [checked: boolean, onClick: MouseEventHandler];
2
+ export declare function useCopyButton(onCopy: () => void | Promise<void>): [checked: boolean, onClick: MouseEventHandler];
3
3
  //# sourceMappingURL=use-copy-button.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-copy-button.d.ts","sourceRoot":"","sources":["../../src/utils/use-copy-button.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,OAAO,CAAC;AAEf,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,IAAI,GACjB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAuBhD"}
1
+ {"version":3,"file":"use-copy-button.d.ts","sourceRoot":"","sources":["../../src/utils/use-copy-button.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,iBAAiB,EAKvB,MAAM,OAAO,CAAC;AAEf,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACjC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC,CA2BhD"}
@@ -1,18 +1,20 @@
1
1
  'use client';
2
- import { useState, useRef, useEffect, useCallback, } from 'react';
2
+ import { useCallback, useEffect, useRef, useState, } from 'react';
3
3
  export function useCopyButton(onCopy) {
4
4
  const [checked, setChecked] = useState(false);
5
- const timeoutRef = useRef(null);
6
5
  const callbackRef = useRef(onCopy);
6
+ const timeoutRef = useRef(null);
7
7
  callbackRef.current = onCopy;
8
8
  const onClick = useCallback(() => {
9
9
  if (timeoutRef.current)
10
10
  window.clearTimeout(timeoutRef.current);
11
- timeoutRef.current = window.setTimeout(() => {
12
- setChecked(false);
13
- }, 1500);
14
- callbackRef.current();
15
- setChecked(true);
11
+ const res = Promise.resolve(callbackRef.current());
12
+ void res.then(() => {
13
+ setChecked(true);
14
+ timeoutRef.current = window.setTimeout(() => {
15
+ setChecked(false);
16
+ }, 1500);
17
+ });
16
18
  }, []);
17
19
  // Avoid updates after being unmounted
18
20
  useEffect(() => {
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "fumadocs-ui",
3
- "version": "15.2.8",
3
+ "version": "16.0.3",
4
4
  "description": "The framework for building a documentation website in Next.js",
5
5
  "keywords": [
6
6
  "NextJs",
7
7
  "Docs"
8
8
  ],
9
- "homepage": "https://fumadocs.vercel.app",
9
+ "homepage": "https://fumadocs.dev",
10
10
  "repository": "github:fuma-nama/fumadocs",
11
11
  "license": "MIT",
12
12
  "author": "Fuma Nama",
@@ -24,14 +24,46 @@
24
24
  "import": "./dist/i18n.js",
25
25
  "types": "./dist/i18n.d.ts"
26
26
  },
27
- "./layouts/*": {
28
- "import": "./dist/layouts/*.js",
29
- "types": "./dist/layouts/*.d.ts"
27
+ "./layouts/home": {
28
+ "import": "./dist/layouts/home/index.js",
29
+ "types": "./dist/layouts/home/index.d.ts"
30
+ },
31
+ "./layouts/home/*": {
32
+ "import": "./dist/layouts/home/*.js",
33
+ "types": "./dist/layouts/home/*.d.ts"
34
+ },
35
+ "./layouts/docs": {
36
+ "import": "./dist/layouts/docs/index.js",
37
+ "types": "./dist/layouts/docs/index.d.ts"
38
+ },
39
+ "./layouts/docs/page": {
40
+ "import": "./dist/layouts/docs/page.js",
41
+ "types": "./dist/layouts/docs/page.d.ts"
42
+ },
43
+ "./layouts/docs-client": {
44
+ "import": "./dist/layouts/docs/client.js",
45
+ "types": "./dist/layouts/docs/client.d.ts"
46
+ },
47
+ "./layouts/notebook": {
48
+ "import": "./dist/layouts/notebook/index.js",
49
+ "types": "./dist/layouts/notebook/index.d.ts"
50
+ },
51
+ "./layouts/notebook-client": {
52
+ "import": "./dist/layouts/notebook/client.js",
53
+ "types": "./dist/layouts/notebook/client.d.ts"
54
+ },
55
+ "./layouts/links": {
56
+ "import": "./dist/layouts/shared/index.js",
57
+ "types": "./dist/layouts/shared/index.d.ts"
58
+ },
59
+ "./layouts/shared": {
60
+ "import": "./dist/layouts/shared/index.js",
61
+ "types": "./dist/layouts/shared/index.d.ts"
30
62
  },
31
63
  "./page": {
32
- "node": "./dist/page.server.js",
64
+ "node": "./dist/page.js",
33
65
  "import": "./dist/page.js",
34
- "types": "./dist/page.server.d.ts"
66
+ "types": "./dist/page.d.ts"
35
67
  },
36
68
  "./provider": {
37
69
  "import": "./dist/provider/index.js",
@@ -61,6 +93,10 @@
61
93
  "./utils/*": {
62
94
  "import": "./dist/utils/*.js",
63
95
  "types": "./dist/utils/*.d.ts"
96
+ },
97
+ "./internal/icons": {
98
+ "import": "./dist/icons.js",
99
+ "types": "./dist/icons.d.ts"
64
100
  }
65
101
  },
66
102
  "files": [
@@ -68,45 +104,53 @@
68
104
  "css/*"
69
105
  ],
70
106
  "dependencies": {
71
- "@radix-ui/react-accordion": "^1.2.4",
72
- "@radix-ui/react-collapsible": "^1.1.4",
73
- "@radix-ui/react-dialog": "^1.1.7",
107
+ "@radix-ui/react-accordion": "^1.2.12",
108
+ "@radix-ui/react-collapsible": "^1.1.12",
109
+ "@radix-ui/react-dialog": "^1.1.15",
74
110
  "@radix-ui/react-direction": "^1.1.1",
75
- "@radix-ui/react-navigation-menu": "^1.2.6",
76
- "@radix-ui/react-popover": "^1.1.7",
77
- "@radix-ui/react-scroll-area": "^1.2.4",
78
- "@radix-ui/react-slot": "^1.2.0",
79
- "@radix-ui/react-tabs": "^1.1.4",
111
+ "@radix-ui/react-navigation-menu": "^1.2.14",
112
+ "@radix-ui/react-popover": "^1.1.15",
113
+ "@radix-ui/react-presence": "^1.1.5",
114
+ "@radix-ui/react-scroll-area": "^1.2.10",
115
+ "@radix-ui/react-slot": "^1.2.3",
116
+ "@radix-ui/react-tabs": "^1.1.13",
80
117
  "class-variance-authority": "^0.7.1",
81
118
  "lodash.merge": "^4.6.2",
82
- "lucide-react": "^0.488.0",
83
119
  "next-themes": "^0.4.6",
84
120
  "postcss-selector-parser": "^7.1.0",
85
- "react-medium-image-zoom": "^5.2.14",
86
- "tailwind-merge": "^3.2.0",
87
- "fumadocs-core": "15.2.8"
121
+ "react-medium-image-zoom": "^5.4.0",
122
+ "scroll-into-view-if-needed": "^3.1.0",
123
+ "tailwind-merge": "^3.3.1",
124
+ "fumadocs-core": "16.0.3"
88
125
  },
89
126
  "devDependencies": {
90
- "@next/eslint-plugin-next": "^15.3.1",
91
- "@tailwindcss/cli": "^4.1.4",
127
+ "@next/eslint-plugin-next": "16.0.0",
128
+ "@tailwindcss/cli": "^4.1.15",
92
129
  "@types/lodash.merge": "^4.6.9",
93
- "@types/react": "^19.1.2",
94
- "@types/react-dom": "^19.1.2",
95
- "next": "15.3.1",
96
- "tailwindcss": "^4.1.4",
97
- "tsc-alias": "^1.8.15",
98
- "@fumadocs/cli": "0.1.1",
99
- "fumadocs-core": "15.2.8",
130
+ "@types/react": "^19.2.2",
131
+ "@types/react-dom": "^19.2.2",
132
+ "next": "16.0.0",
133
+ "tailwindcss": "^4.1.15",
134
+ "tsc-alias": "^1.8.16",
135
+ "@fumadocs/cli": "1.0.3",
100
136
  "eslint-config-custom": "0.0.0",
137
+ "fumadocs-core": "16.0.3",
101
138
  "tsconfig": "0.0.0"
102
139
  },
103
140
  "peerDependencies": {
104
- "next": "14.x.x || 15.x.x",
105
- "react": "18.x.x || 19.x.x",
106
- "react-dom": "18.x.x || 19.x.x",
107
- "tailwindcss": "^3.4.14 || ^4.0.0"
141
+ "@types/react": "*",
142
+ "next": "16.x.x",
143
+ "react": "^19.2.0",
144
+ "react-dom": "^19.2.0",
145
+ "tailwindcss": "^4.0.0"
108
146
  },
109
147
  "peerDependenciesMeta": {
148
+ "next": {
149
+ "optional": true
150
+ },
151
+ "@types/react": {
152
+ "optional": true
153
+ },
110
154
  "tailwindcss": {
111
155
  "optional": true
112
156
  }
@@ -1,199 +0,0 @@
1
- @theme {
2
- --animate-fd-fade-in: fd-fade-in 300ms ease;
3
-
4
- --animate-fd-fade-out: fd-fade-out 300ms ease;
5
-
6
- --animate-fd-dialog-in: fd-dialog-in 200ms cubic-bezier(0.32, 0.72, 0, 1);
7
-
8
- --animate-fd-dialog-out: fd-dialog-out 300ms cubic-bezier(0.32, 0.72, 0, 1);
9
-
10
- --animate-fd-popover-in: fd-popover-in 150ms ease;
11
-
12
- --animate-fd-popover-out: fd-popover-out 150ms ease;
13
-
14
- --animate-fd-collapsible-down: fd-collapsible-down 150ms ease-out;
15
-
16
- --animate-fd-collapsible-up: fd-collapsible-up 150ms ease-out;
17
-
18
- --animate-fd-accordion-down: fd-accordion-down 200ms ease-out;
19
-
20
- --animate-fd-accordion-up: fd-accordion-up 200ms ease-out;
21
-
22
- --animate-fd-nav-menu-in: fd-nav-menu-in 200ms ease;
23
-
24
- --animate-fd-nav-menu-out: fd-nav-menu-out 200ms ease;
25
-
26
- --animate-fd-enterFromLeft: fd-enterFromLeft 250ms ease;
27
-
28
- --animate-fd-enterFromRight: fd-enterFromRight 250ms ease;
29
-
30
- --animate-fd-exitToLeft: fd-exitToLeft 250ms ease;
31
-
32
- --animate-fd-exitToRight: fd-exitToRight 250ms ease;
33
-
34
- @keyframes fd-collapsible-down {
35
- from {
36
- height: 0;
37
- opacity: 0;
38
- }
39
- to {
40
- height: var(--radix-collapsible-content-height);
41
- }
42
- }
43
-
44
- @keyframes fd-collapsible-up {
45
- from {
46
- height: var(--radix-collapsible-content-height);
47
- }
48
- to {
49
- height: 0;
50
- opacity: 0;
51
- }
52
- }
53
-
54
- @keyframes fd-accordion-down {
55
- from {
56
- height: 0;
57
- opacity: 0.5;
58
- }
59
- to {
60
- height: var(--radix-accordion-content-height);
61
- }
62
- }
63
-
64
- @keyframes fd-accordion-up {
65
- from {
66
- height: var(--radix-accordion-content-height);
67
- }
68
- to {
69
- height: 0;
70
- opacity: 0.5;
71
- }
72
- }
73
-
74
- @keyframes fd-dialog-in {
75
- from {
76
- transform: scale(0.95);
77
- opacity: 0;
78
- }
79
- to {
80
- transform: scale(1);
81
- }
82
- }
83
-
84
- @keyframes fd-dialog-out {
85
- from {
86
- transform: scale(1);
87
- }
88
- to {
89
- transform: scale(0.95);
90
- opacity: 0;
91
- }
92
- }
93
-
94
- @keyframes fd-popover-in {
95
- from {
96
- opacity: 0;
97
- transform: scale(0.98) translateY(-4px);
98
- }
99
- to {
100
- opacity: 1;
101
- transform: scale(1) translateY(0);
102
- }
103
- }
104
-
105
- @keyframes fd-popover-out {
106
- from {
107
- opacity: 1;
108
- transform: translateY(0);
109
- }
110
- to {
111
- opacity: 0;
112
- transform: translateY(-4px);
113
- }
114
- }
115
-
116
- @keyframes fd-fade-in {
117
- from {
118
- opacity: 0;
119
- }
120
- to {
121
- opacity: 1;
122
- }
123
- }
124
-
125
- @keyframes fd-fade-out {
126
- from {
127
- opacity: 1;
128
- }
129
- to {
130
- opacity: 0;
131
- }
132
- }
133
-
134
- @keyframes fd-enterFromRight {
135
- from {
136
- opacity: 0;
137
- transform: translateX(200px);
138
- }
139
- to {
140
- opacity: 1;
141
- transform: translateX(0);
142
- }
143
- }
144
-
145
- @keyframes fd-enterFromLeft {
146
- from {
147
- opacity: 0;
148
- transform: translateX(-200px);
149
- }
150
- to {
151
- opacity: 1;
152
- transform: translateX(0);
153
- }
154
- }
155
-
156
- @keyframes fd-exitToRight {
157
- from {
158
- opacity: 1;
159
- transform: translateX(0);
160
- }
161
- to {
162
- opacity: 0;
163
- transform: translateX(200px);
164
- }
165
- }
166
-
167
- @keyframes fd-exitToLeft {
168
- from {
169
- opacity: 1;
170
- transform: translateX(0);
171
- }
172
- to {
173
- opacity: 0;
174
- transform: translateX(-200px);
175
- }
176
- }
177
-
178
- @keyframes fd-nav-menu-in {
179
- from {
180
- opacity: 0;
181
- height: 0px;
182
- }
183
- to {
184
- opacity: 1;
185
- height: var(--radix-navigation-menu-viewport-height);
186
- }
187
- }
188
-
189
- @keyframes fd-nav-menu-out {
190
- from {
191
- opacity: 1;
192
- height: var(--radix-navigation-menu-viewport-height);
193
- }
194
- to {
195
- opacity: 0;
196
- height: 0px;
197
- }
198
- }
199
- }
@@ -1,8 +0,0 @@
1
- import * as TabsPrimitive from '@radix-ui/react-tabs';
2
- import * as React from 'react';
3
- declare const Tabs: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
4
- declare const TabsList: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsListProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
5
- declare const TabsTrigger: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
6
- declare const TabsContent: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
- export { Tabs, TabsList, TabsTrigger, TabsContent };
8
- //# sourceMappingURL=tabs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../../src/components/ui/tabs.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,QAAA,MAAM,IAAI,mJAcR,CAAC;AAIH,QAAA,MAAM,QAAQ,uJAYZ,CAAC;AAGH,QAAA,MAAM,WAAW,gKAYf,CAAC;AAGH,QAAA,MAAM,WAAW,0JASf,CAAC;AAGH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC"}
@@ -1,16 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import * as TabsPrimitive from '@radix-ui/react-tabs';
4
- import * as React from 'react';
5
- import { cn } from '../../utils/cn.js';
6
- const Tabs = React.forwardRef((props, ref) => {
7
- return (_jsx(TabsPrimitive.Root, { ref: ref, ...props, className: cn('flex flex-col overflow-hidden rounded-xl border bg-fd-card', props.className) }));
8
- });
9
- Tabs.displayName = 'Tabs';
10
- const TabsList = React.forwardRef((props, ref) => (_jsx(TabsPrimitive.List, { ref: ref, ...props, className: cn('flex flex-row items-end gap-4 overflow-x-auto bg-fd-secondary px-4 text-fd-muted-foreground', props.className) })));
11
- TabsList.displayName = 'TabsList';
12
- const TabsTrigger = React.forwardRef((props, ref) => (_jsx(TabsPrimitive.Trigger, { ref: ref, ...props, className: cn('whitespace-nowrap border-b border-transparent py-2 text-sm font-medium transition-colors hover:text-fd-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=active]:border-fd-primary data-[state=active]:text-fd-primary', props.className) })));
13
- TabsTrigger.displayName = 'TabsTrigger';
14
- const TabsContent = React.forwardRef((props, ref) => (_jsx(TabsPrimitive.Content, { ref: ref, ...props, className: cn('p-4', props.className) })));
15
- TabsContent.displayName = 'TabsContent';
16
- export { Tabs, TabsList, TabsTrigger, TabsContent };
@@ -1,25 +0,0 @@
1
- import type { LinkItemType } from '../../layouts/links.js';
2
- import { type SidebarComponents, type SidebarProps } from '../../components/layout/sidebar.js';
3
- import type { PageTree } from 'fumadocs-core/server';
4
- import type { ReactNode } from 'react';
5
- import type { Option } from '../../components/layout/root-toggle.js';
6
- import { type GetSidebarTabsOptions } from '../../utils/get-sidebar-tabs.js';
7
- export declare const layoutVariables: {
8
- '--fd-layout-offset': string;
9
- };
10
- export interface SidebarOptions extends SidebarProps {
11
- collapsible?: boolean;
12
- components?: Partial<SidebarComponents>;
13
- /**
14
- * Root Toggle options
15
- */
16
- tabs?: Option[] | GetSidebarTabsOptions | false;
17
- banner?: ReactNode;
18
- footer?: ReactNode;
19
- }
20
- export declare function SidebarLinkItem({ item, ...props }: {
21
- item: LinkItemType;
22
- className?: string;
23
- }): import("react/jsx-runtime").JSX.Element;
24
- export declare function getSidebarTabsFromOptions(options: SidebarOptions['tabs'], tree: PageTree.Root): Option[] | undefined;
25
- //# sourceMappingURL=shared.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/layouts/docs/shared.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EACL,KAAK,iBAAiB,EAMtB,KAAK,YAAY,EAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,0BAA0B,CAAC;AAElC,eAAO,MAAM,eAAe;;CAE3B,CAAC;AAEF,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAExC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,qBAAqB,GAAG,KAAK,CAAC;IAEhD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,GAAG,KAAK,EACT,EAAE;IACD,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CAmCA;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,EAC/B,IAAI,EAAE,QAAQ,CAAC,IAAI,wBASpB"}
@@ -1,24 +0,0 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- import { SidebarFolder, SidebarFolderContent, SidebarFolderLink, SidebarFolderTrigger, SidebarItem, } from '../../components/layout/sidebar.js';
3
- import { getSidebarTabs, } from '../../utils/get-sidebar-tabs.js';
4
- export const layoutVariables = {
5
- '--fd-layout-offset': 'max(calc(50vw - var(--fd-layout-width) / 2), 0px)',
6
- };
7
- export function SidebarLinkItem({ item, ...props }) {
8
- if (item.type === 'menu')
9
- return (_jsxs(SidebarFolder, { ...props, children: [item.url ? (_jsxs(SidebarFolderLink, { href: item.url, children: [item.icon, item.text] })) : (_jsxs(SidebarFolderTrigger, { children: [item.icon, item.text] })), _jsx(SidebarFolderContent, { children: item.items.map((child, i) => (_jsx(SidebarLinkItem, { item: child }, i))) })] }));
10
- if (item.type === 'custom')
11
- return _jsx("div", { ...props, children: item.children });
12
- return (_jsx(SidebarItem, { href: item.url, icon: item.icon, external: item.external, ...props, children: item.text }));
13
- }
14
- export function getSidebarTabsFromOptions(options, tree) {
15
- if (Array.isArray(options)) {
16
- return options;
17
- }
18
- else if (typeof options === 'object') {
19
- return getSidebarTabs(tree, options);
20
- }
21
- else if (options !== false) {
22
- return getSidebarTabs(tree);
23
- }
24
- }
@@ -1,5 +0,0 @@
1
- import { type ButtonHTMLAttributes, type HTMLAttributes } from 'react';
2
- export declare function Navbar(props: HTMLAttributes<HTMLElement>): import("react/jsx-runtime").JSX.Element;
3
- export declare function NavbarSidebarTrigger(props: ButtonHTMLAttributes<HTMLButtonElement>): import("react/jsx-runtime").JSX.Element;
4
- export declare function CollapsibleControl(): import("react/jsx-runtime").JSX.Element | undefined;
5
- //# sourceMappingURL=docs-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"docs-client.d.ts","sourceRoot":"","sources":["../../src/layouts/docs-client.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AASvE,wBAAgB,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,2CAiBxD;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,2CAkB/C;AAED,wBAAgB,kBAAkB,wDAyBjC"}