fumadocs-ui 15.1.2 → 15.2.0

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 (62) hide show
  1. package/css/shiki.css +11 -11
  2. package/dist/components/card.js +1 -1
  3. package/dist/components/dialog/search.d.ts.map +1 -1
  4. package/dist/components/dialog/search.js +1 -1
  5. package/dist/components/dynamic-codeblock.d.ts +1 -1
  6. package/dist/components/dynamic-codeblock.d.ts.map +1 -1
  7. package/dist/components/image-zoom.d.ts +1 -1
  8. package/dist/components/image-zoom.d.ts.map +1 -1
  9. package/dist/components/image-zoom.js +8 -4
  10. package/dist/components/layout/root-toggle.js +4 -4
  11. package/dist/components/layout/sidebar.d.ts.map +1 -1
  12. package/dist/components/layout/sidebar.js +5 -5
  13. package/dist/components/registry.js +5 -5
  14. package/dist/components/type-table.js +1 -1
  15. package/dist/contexts/i18n.d.ts +7 -1
  16. package/dist/contexts/i18n.d.ts.map +1 -1
  17. package/dist/contexts/i18n.js +5 -6
  18. package/dist/contexts/layout.d.ts.map +1 -1
  19. package/dist/contexts/layout.js +6 -5
  20. package/dist/contexts/search.d.ts.map +1 -1
  21. package/dist/contexts/search.js +4 -3
  22. package/dist/contexts/sidebar.d.ts +7 -1
  23. package/dist/contexts/sidebar.d.ts.map +1 -1
  24. package/dist/contexts/sidebar.js +5 -7
  25. package/dist/contexts/tree.d.ts.map +1 -1
  26. package/dist/contexts/tree.js +6 -9
  27. package/dist/layouts/docs/shared.d.ts +0 -2
  28. package/dist/layouts/docs/shared.d.ts.map +1 -1
  29. package/dist/layouts/docs/shared.js +8 -10
  30. package/dist/layouts/{docs.client.d.ts → docs-client.d.ts} +1 -1
  31. package/dist/layouts/{docs.client.d.ts.map → docs-client.d.ts.map} +1 -1
  32. package/dist/layouts/docs.d.ts +17 -4
  33. package/dist/layouts/docs.d.ts.map +1 -1
  34. package/dist/layouts/docs.js +19 -19
  35. package/dist/layouts/links.js +1 -1
  36. package/dist/layouts/{notebook.client.d.ts → notebook-client.d.ts} +4 -2
  37. package/dist/layouts/notebook-client.d.ts.map +1 -0
  38. package/dist/layouts/{notebook.client.js → notebook-client.js} +5 -8
  39. package/dist/layouts/notebook.d.ts +1 -1
  40. package/dist/layouts/notebook.d.ts.map +1 -1
  41. package/dist/layouts/notebook.js +7 -11
  42. package/dist/layouts/shared.d.ts.map +1 -1
  43. package/dist/layouts/shared.js +1 -1
  44. package/dist/mdx.d.ts +3 -1
  45. package/dist/mdx.d.ts.map +1 -1
  46. package/dist/mdx.js +2 -2
  47. package/dist/{page.client.d.ts → page-client.d.ts} +1 -1
  48. package/dist/{page.client.d.ts.map → page-client.d.ts.map} +1 -1
  49. package/dist/{page.client.js → page-client.js} +3 -7
  50. package/dist/page.d.ts +1 -1
  51. package/dist/page.js +1 -1
  52. package/dist/{provider.d.ts → provider/base.d.ts} +4 -8
  53. package/dist/provider/base.d.ts.map +1 -0
  54. package/dist/{provider.js → provider/base.js} +4 -9
  55. package/dist/provider/index.d.ts +9 -0
  56. package/dist/provider/index.d.ts.map +1 -0
  57. package/dist/provider/index.js +12 -0
  58. package/dist/style.css +25 -21
  59. package/package.json +22 -14
  60. package/dist/layouts/notebook.client.d.ts.map +0 -1
  61. package/dist/provider.d.ts.map +0 -1
  62. /package/dist/layouts/{docs.client.js → docs-client.js} +0 -0
@@ -1,25 +1,24 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import Link from 'next/link';
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
3
3
  import { Languages, SidebarIcon } from 'lucide-react';
4
4
  import { cn } from '../utils/cn.js';
5
5
  import { buttonVariants } from '../components/ui/button.js';
6
6
  import { CollapsibleSidebar, Sidebar, SidebarFooter, SidebarHeader, SidebarCollapseTrigger, SidebarViewport, SidebarPageTree, } from '../components/layout/sidebar.js';
7
7
  import { replaceOrDefault } from '../layouts/shared.js';
8
- import { BaseLinkItem } from '../layouts/links.js';
8
+ import { BaseLinkItem, } from '../layouts/links.js';
9
9
  import { RootToggle } from '../components/layout/root-toggle.js';
10
10
  import { getLinks } from './shared.js';
11
11
  import { LanguageToggle, LanguageToggleText, } from '../components/layout/language-toggle.js';
12
- import { CollapsibleControl, Navbar, NavbarSidebarTrigger, } from '../layouts/docs.client.js';
12
+ import { CollapsibleControl, Navbar, NavbarSidebarTrigger, } from '../layouts/docs-client.js';
13
13
  import { TreeContextProvider } from '../contexts/tree.js';
14
14
  import { ThemeToggle } from '../components/layout/theme-toggle.js';
15
15
  import { LargeSearchToggle, SearchToggle, } from '../components/layout/search-toggle.js';
16
16
  import { checkPageTree, getSidebarTabsFromOptions, layoutVariables, SidebarLinkItem, } from '../layouts/docs/shared.js';
17
17
  import { StylesProvider, NavProvider, } from '../contexts/layout.js';
18
- export function DocsLayout({ nav: { enabled: navEnabled = true, component: navReplace, transparentMode, ...nav } = {}, themeSwitch, sidebar: { enabled: sidebarEnabled = true, collapsible = true, component: sidebarReplace, tabs: tabOptions, banner: sidebarBanner, footer: sidebarFooter, components: sidebarComponents, hideSearch: sidebarHideSearch, ...sidebar } = {}, i18n = false, children, ...props }) {
18
+ import Link from 'fumadocs-core/link';
19
+ export function DocsLayout({ nav: { enabled: navEnabled = true, component: navReplace, transparentMode, ...nav } = {}, themeSwitch, sidebar = {}, i18n = false, children, ...props }) {
19
20
  checkPageTree(props.tree);
20
21
  const links = getLinks(props.links ?? [], props.githubUrl);
21
- const Aside = collapsible ? CollapsibleSidebar : Sidebar;
22
- const tabs = getSidebarTabsFromOptions(tabOptions, props.tree) ?? [];
23
22
  const variables = cn('[--fd-tocnav-height:36px] md:[--fd-sidebar-width:268px] lg:[--fd-sidebar-width:286px] xl:[--fd-toc-width:286px] xl:[--fd-tocnav-height:0px]', !navReplace && navEnabled
24
23
  ? '[--fd-nav-height:calc(var(--spacing)*14)] md:[--fd-nav-height:0px]'
25
24
  : undefined);
@@ -30,22 +29,23 @@ export function DocsLayout({ nav: { enabled: navEnabled = true, component: navRe
30
29
  return (_jsx(TreeContextProvider, { tree: props.tree, children: _jsxs(NavProvider, { transparentMode: transparentMode, children: [replaceOrDefault({ enabled: navEnabled, component: navReplace }, _jsxs(Navbar, { className: "md:hidden", children: [_jsx(Link, { href: nav.url ?? '/', className: "inline-flex items-center gap-2.5 font-semibold", children: nav.title }), _jsx("div", { className: "flex flex-1 flex-row items-center gap-1", children: nav.children }), _jsx(SearchToggle, { hideIfDisabled: true }), _jsx(NavbarSidebarTrigger, { className: "-me-2 md:hidden" })] }), nav), _jsxs("main", { id: "nd-docs-layout", ...props.containerProps, className: cn('flex flex-1 flex-row pe-(--fd-layout-offset)', variables, props.containerProps?.className), style: {
31
30
  ...layoutVariables,
32
31
  ...props.containerProps?.style,
33
- }, children: [collapsible ? _jsx(CollapsibleControl, {}) : null, replaceOrDefault({ enabled: sidebarEnabled, component: sidebarReplace }, _jsxs(Aside, { ...sidebar, className: cn('md:ps-(--fd-layout-offset)', sidebar.className), children: [_jsxs(SidebarHeader, { children: [_jsxs("div", { className: "flex flex-row pt-1 max-md:hidden", children: [_jsx(Link, { href: nav.url ?? '/', className: "inline-flex text-[15px] items-center gap-2.5 font-medium", children: nav.title }), nav.children, collapsible && (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
34
- color: 'ghost',
35
- size: 'icon-sm',
36
- }), 'ms-auto mb-auto text-fd-muted-foreground max-md:hidden'), children: _jsx(SidebarIcon, {}) }))] }), sidebarBanner, tabs.length > 0 ? (_jsx(RootToggle, { options: tabs, className: "-mx-2" })) : null, !sidebarHideSearch ? (_jsx(LargeSearchToggle, { hideIfDisabled: true, className: "rounded-lg max-md:hidden" })) : null] }), _jsxs(SidebarViewport, { children: [_jsx("div", { className: "mb-4 empty:hidden", children: links
37
- .filter((v) => v.type !== 'icon')
38
- .map((item, i) => (_jsx(SidebarLinkItem, { item: item }, i))) }), _jsx(SidebarPageTree, { components: sidebarComponents })] }), _jsxs(SidebarFooter, { children: [_jsx(SidebarFooterItems, { links: links, i18n: i18n, themeSwitch: themeSwitch }), sidebarFooter] })] }), {
39
- ...sidebar,
40
- tabs,
41
- }), _jsx(StylesProvider, { ...pageStyles, children: children })] })] }) }));
32
+ }, children: [replaceOrDefault(sidebar, _jsx(DocsLayoutSidebar, { tree: props.tree, ...sidebar, links: links, nav: _jsxs(_Fragment, { children: [_jsx(Link, { href: nav.url ?? '/', className: "inline-flex text-[15px] items-center gap-2.5 font-medium", children: nav.title }), nav.children] }), footer: _jsxs(_Fragment, { children: [_jsx(DocsLayoutSidebarFooter, { links: links.filter((item) => item.type === 'icon'), i18n: i18n, themeSwitch: themeSwitch }), sidebar.footer] }) })), _jsx(StylesProvider, { ...pageStyles, children: children })] })] }) }));
33
+ }
34
+ export function DocsLayoutSidebar({ collapsible = true, components, tabs: tabOptions, hideSearch, tree, nav, links = [], footer, banner, ...props }) {
35
+ const tabs = useMemo(() => getSidebarTabsFromOptions(tabOptions, tree) ?? [], [tabOptions, tree]);
36
+ const Aside = collapsible ? CollapsibleSidebar : Sidebar;
37
+ return (_jsxs(_Fragment, { children: [collapsible ? _jsx(CollapsibleControl, {}) : null, _jsxs(Aside, { ...props, className: cn('md:ps-(--fd-layout-offset)', props.className), children: [_jsxs(SidebarHeader, { children: [_jsxs("div", { className: "flex flex-row pt-1 max-md:hidden", children: [nav, collapsible && (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
38
+ color: 'ghost',
39
+ size: 'icon-sm',
40
+ }), 'ms-auto mb-auto text-fd-muted-foreground max-md:hidden'), children: _jsx(SidebarIcon, {}) }))] }), banner, tabs.length > 0 ? (_jsx(RootToggle, { options: tabs, className: "-mx-2" })) : null, !hideSearch ? (_jsx(LargeSearchToggle, { hideIfDisabled: true, className: "rounded-lg max-md:hidden" })) : null] }), _jsxs(SidebarViewport, { children: [_jsx("div", { className: "mb-4 empty:hidden", children: links
41
+ .filter((v) => v.type !== 'icon')
42
+ .map((item, i) => (_jsx(SidebarLinkItem, { item: item }, i))) }), _jsx(SidebarPageTree, { components: components })] }), _jsx(SidebarFooter, { children: footer })] })] }));
42
43
  }
43
- function SidebarFooterItems({ i18n, themeSwitch, links, }) {
44
- const iconItems = links.filter((v) => v.type === 'icon');
44
+ export function DocsLayoutSidebarFooter({ i18n, themeSwitch, links = [], }) {
45
45
  // empty footer items
46
46
  if (links.length === 0 && !i18n && themeSwitch?.enabled === false)
47
47
  return null;
48
- return (_jsxs("div", { className: "flex flex-row items-center", children: [iconItems.map((item, i) => (_jsx(BaseLinkItem, { item: item, className: cn(buttonVariants({ size: 'icon', color: 'ghost' }), 'text-fd-muted-foreground md:[&_svg]:size-4.5'), "aria-label": item.label, children: item.icon }, i))), _jsx("div", { role: "separator", className: "flex-1" }), i18n ? (_jsxs(LanguageToggle, { className: "me-1.5", children: [_jsx(Languages, { className: "size-4.5" }), _jsx(LanguageToggleText, { className: "md:hidden" })] })) : null, replaceOrDefault(themeSwitch, _jsx(ThemeToggle, { className: "p-0", mode: themeSwitch?.mode }))] }));
48
+ return (_jsxs("div", { className: "flex flex-row items-center", children: [links.map((item, i) => (_jsx(BaseLinkItem, { item: item, className: cn(buttonVariants({ size: 'icon', color: 'ghost' }), 'text-fd-muted-foreground md:[&_svg]:size-4.5'), "aria-label": item.label, children: item.icon }, i))), _jsx("div", { role: "separator", className: "flex-1" }), i18n ? (_jsxs(LanguageToggle, { className: "me-1.5", children: [_jsx(Languages, { className: "size-4.5" }), _jsx(LanguageToggleText, { className: "md:hidden" })] })) : null, replaceOrDefault(themeSwitch, _jsx(ThemeToggle, { className: "p-0", mode: themeSwitch?.mode }))] }));
49
49
  }
50
50
  export { CollapsibleControl, Navbar, NavbarSidebarTrigger };
51
51
  export { getSidebarTabsFromOptions } from './docs/shared.js';
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import Link from 'fumadocs-core/link';
4
- import { usePathname } from 'next/navigation';
4
+ import { usePathname } from 'fumadocs-core/framework';
5
5
  import { forwardRef, } from 'react';
6
6
  import { isActive } from '../utils/is-active.js';
7
7
  export const BaseLinkItem = forwardRef(({ item, ...props }, ref) => {
@@ -1,10 +1,12 @@
1
1
  import { type ButtonHTMLAttributes, type HTMLAttributes } from 'react';
2
2
  import type { Option } from '../components/layout/root-toggle.js';
3
- export declare function Navbar(props: HTMLAttributes<HTMLElement>): import("react/jsx-runtime").JSX.Element;
3
+ export declare function Navbar({ mode, ...props }: HTMLAttributes<HTMLElement> & {
4
+ mode: 'top' | 'auto';
5
+ }): import("react/jsx-runtime").JSX.Element;
4
6
  export declare function NavbarSidebarTrigger(props: ButtonHTMLAttributes<HTMLButtonElement>): import("react/jsx-runtime").JSX.Element;
5
7
  export declare function LayoutTabs(props: HTMLAttributes<HTMLElement>): import("react/jsx-runtime").JSX.Element;
6
8
  export declare function LayoutTab(item: Option): import("react/jsx-runtime").JSX.Element;
7
9
  export declare function SidebarLayoutTab({ item, ...props }: {
8
10
  item: Option;
9
11
  } & HTMLAttributes<HTMLElement>): import("react/jsx-runtime").JSX.Element;
10
- //# sourceMappingURL=notebook.client.d.ts.map
12
+ //# sourceMappingURL=notebook-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notebook-client.d.ts","sourceRoot":"","sources":["../../src/layouts/notebook-client.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AASvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAE9D,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,WAAW,CAAC,GAAG;IAAE,IAAI,EAAE,KAAK,GAAG,MAAM,CAAA;CAAE,2CAoBxD;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,2CAkB/C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,2CAY5D;AAUD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,2CAkBrC;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,GAAG,KAAK,EACT,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CAAC,WAAW,CAAC,2CAoBhD"}
@@ -7,17 +7,14 @@ import { SidebarTrigger } from 'fumadocs-core/sidebar';
7
7
  import { buttonVariants } from '../components/ui/button.js';
8
8
  import { Menu, X } from 'lucide-react';
9
9
  import Link from 'fumadocs-core/link';
10
- import { usePathname } from 'next/navigation';
10
+ import { usePathname } from 'fumadocs-core/framework';
11
11
  import { isActive } from '../utils/is-active.js';
12
- export function Navbar(props) {
12
+ export function Navbar({ mode, ...props }) {
13
13
  const { open, collapsed } = useSidebar();
14
14
  const { isTransparent } = useNav();
15
- return (_jsx("header", { id: "nd-subnav", ...props, className: cn('fixed inset-x-0 top-(--fd-banner-height) z-10 pe-(--fd-layout-offset) backdrop-blur-lg transition-colors', (!isTransparent || open) && 'bg-fd-background/80', props.className), style: {
16
- paddingInlineStart: collapsed
17
- ? 'var(--fd-layout-offset)'
18
- : 'calc(var(--fd-layout-offset) + var(--fd-sidebar-width))',
19
- ...props.style,
20
- }, children: props.children }));
15
+ return (_jsx("header", { id: "nd-subnav", ...props, className: cn('fixed inset-x-0 top-(--fd-banner-height) z-10 px-(--fd-layout-offset) backdrop-blur-lg transition-colors', (!isTransparent || open) && 'bg-fd-background/80', mode === 'auto' &&
16
+ !collapsed &&
17
+ 'ps-[calc(var(--fd-layout-offset)+var(--fd-sidebar-width))]', props.className), children: props.children }));
21
18
  }
22
19
  export function NavbarSidebarTrigger(props) {
23
20
  const { open } = useSidebar();
@@ -2,7 +2,7 @@ import { type HTMLAttributes } from 'react';
2
2
  import { type BaseLayoutProps } from '../layouts/shared.js';
3
3
  import { type SidebarOptions } from '../layouts/docs/shared.js';
4
4
  import type { PageTree } from 'fumadocs-core/server';
5
- import { Navbar, NavbarSidebarTrigger } from './notebook.client.js';
5
+ import { Navbar, NavbarSidebarTrigger } from './notebook-client.js';
6
6
  export interface DocsLayoutProps extends BaseLayoutProps {
7
7
  tree: PageTree.Root;
8
8
  tabMode?: 'sidebar' | 'navbar';
@@ -1 +1 @@
1
- {"version":3,"file":"notebook.d.ts","sourceRoot":"","sources":["../../src/layouts/notebook.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,kBAAkB,CAAC;AA2B1B,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAGL,MAAM,EACN,oBAAoB,EAErB,MAAM,mBAAmB,CAAC;AAQ3B,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAE/B,GAAG,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG;QAC7B,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;KACvB,CAAC;IAEF,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC,CAAC;IAEjE,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAmB,EACnB,GAAG,EAAE,EAAE,eAAe,EAAE,GAAG,GAAG,EAAO,EACrC,OAAO,EAAE,EACP,WAAW,EAAE,kBAAyB,EACtC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,iBAAiB,EAC7B,GAAG,OAAO,EACN,EACN,IAAY,EACZ,WAAW,EACX,GAAG,KAAK,EACT,EAAE,eAAe,2CAkIjB;AAoLD,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"notebook.d.ts","sourceRoot":"","sources":["../../src/layouts/notebook.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,cAAc,EAAW,MAAM,OAAO,CAAC;AAC/D,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,kBAAkB,CAAC;AA0B1B,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAGL,MAAM,EACN,oBAAoB,EAErB,MAAM,mBAAmB,CAAC;AAS3B,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAE/B,GAAG,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG;QAC7B,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;KACvB,CAAC;IAEF,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC,CAAC;IAEjE,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAmB,EACnB,GAAG,EAAE,EAAE,eAAe,EAAE,GAAG,GAAG,EAAO,EACrC,OAAO,EAAE,EACP,WAAW,EAAE,kBAAyB,EACtC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,iBAAiB,EAC7B,GAAG,OAAO,EACN,EACN,IAAY,EACZ,WAAW,EACX,GAAG,KAAK,EACT,EAAE,eAAe,2CAsIjB;AAiLD,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC"}
@@ -1,11 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Fragment } from 'react';
2
+ import { Fragment, useMemo } from 'react';
3
3
  import { getLinks, replaceOrDefault, } from '../layouts/shared.js';
4
4
  import { CollapsibleSidebar, Sidebar, SidebarCollapseTrigger, SidebarFooter, SidebarHeader, SidebarViewport, SidebarPageTree, } from '../components/layout/sidebar.js';
5
5
  import { TreeContextProvider } from '../contexts/tree.js';
6
6
  import { LargeSearchToggle, SearchToggle, } from '../components/layout/search-toggle.js';
7
7
  import { cn } from '../utils/cn.js';
8
- import Link from 'next/link';
9
8
  import { buttonVariants } from '../components/ui/button.js';
10
9
  import { ChevronDown, Languages, SidebarIcon } from 'lucide-react';
11
10
  import { BaseLinkItem } from '../layouts/links.js';
@@ -13,15 +12,16 @@ import { LanguageToggle } from '../components/layout/language-toggle.js';
13
12
  import { ThemeToggle } from '../components/layout/theme-toggle.js';
14
13
  import { Popover, PopoverContent, PopoverTrigger, } from '../components/ui/popover.js';
15
14
  import { checkPageTree, getSidebarTabsFromOptions, layoutVariables, SidebarLinkItem, } from '../layouts/docs/shared.js';
16
- import { LayoutTab, LayoutTabs, Navbar, NavbarSidebarTrigger, SidebarLayoutTab, } from './notebook.client.js';
15
+ import { LayoutTab, LayoutTabs, Navbar, NavbarSidebarTrigger, SidebarLayoutTab, } from './notebook-client.js';
17
16
  import { StylesProvider, NavProvider, } from '../contexts/layout.js';
18
17
  import { RootToggle } from '../components/layout/root-toggle.js';
18
+ import Link from 'fumadocs-core/link';
19
19
  export function DocsLayout({ tabMode = 'sidebar', nav: { transparentMode, ...nav } = {}, sidebar: { collapsible: sidebarCollapsible = true, tabs: tabOptions, banner: sidebarBanner, footer: sidebarFooter, components: sidebarComponents, ...sidebar } = {}, i18n = false, themeSwitch, ...props }) {
20
20
  checkPageTree(props.tree);
21
21
  const navMode = nav.mode ?? 'auto';
22
22
  const links = getLinks(props.links ?? [], props.githubUrl);
23
+ const tabs = useMemo(() => getSidebarTabsFromOptions(tabOptions, props.tree) ?? [], [tabOptions, props.tree]);
23
24
  const Aside = sidebarCollapsible ? CollapsibleSidebar : Sidebar;
24
- const tabs = getSidebarTabsFromOptions(tabOptions, props.tree) ?? [];
25
25
  const variables = cn('[--fd-nav-height:calc(var(--spacing)*14)] [--fd-tocnav-height:36px] md:[--fd-sidebar-width:286px] xl:[--fd-toc-width:286px] xl:[--fd-tocnav-height:0px]', tabs.length > 0 &&
26
26
  tabMode === 'navbar' &&
27
27
  'lg:[--fd-nav-height:calc(var(--spacing)*24)]');
@@ -41,20 +41,16 @@ export function DocsLayout({ tabMode = 'sidebar', nav: { transparentMode, ...nav
41
41
  }), 'text-fd-muted-foreground mb-auto'), children: _jsx(SidebarIcon, {}) })] })), nav.children, sidebarBanner, tabMode === 'sidebar' && tabs.length > 0 ? (_jsx(RootToggle, { options: tabs, className: "-mx-2" })) : null] }), _jsxs(SidebarViewport, { children: [tabMode === 'navbar' &&
42
42
  tabs.map((tab, i) => (_jsx(SidebarLayoutTab, { item: tab, className: cn('lg:hidden', i === tabs.length - 1 && 'mb-4') }, tab.url))), links.map((item, i) => (_jsx(SidebarLinkItem, { item: item, className: cn('lg:hidden', i === links.length - 1 && 'mb-4') }, i))), _jsx(SidebarPageTree, { components: sidebarComponents })] }), _jsxs(SidebarFooter, { className: cn('flex flex-row items-center', !sidebarFooter && 'md:hidden'), children: [i18n ? (_jsx(LanguageToggle, { className: "me-auto md:hidden", children: _jsx(Languages, { className: "size-5 text-fd-muted-foreground" }) })) : null, replaceOrDefault(themeSwitch, _jsx(ThemeToggle, { className: "md:hidden", mode: themeSwitch?.mode ?? 'light-dark-system' })), sidebarFooter] })] }), _jsx(DocsNavbar, { nav: nav, links: links, i18n: i18n, sidebarCollapsible: sidebarCollapsible, tabs: tabMode == 'navbar' ? tabs : [] }), _jsx(StylesProvider, { ...pageStyles, children: props.children })] }) }) }));
43
43
  }
44
- function DocsNavbar({ sidebarCollapsible, links, nav = {}, i18n, tabs, }) {
44
+ function DocsNavbar({ sidebarCollapsible, links, themeSwitch, nav = {}, i18n, tabs, }) {
45
45
  const navMode = nav.mode ?? 'auto';
46
- return (_jsxs(Navbar, { style: navMode === 'top'
47
- ? {
48
- paddingInlineStart: 'var(--fd-layout-offset)',
49
- }
50
- : undefined, children: [_jsxs("div", { className: cn('flex flex-row border-b border-fd-foreground/10 px-4 h-14', navMode === 'auto' && 'md:px-6'), children: [_jsxs("div", { className: cn('flex flex-row items-center', navMode === 'top' && 'flex-1 pe-4'), children: [sidebarCollapsible && navMode === 'auto' ? (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
46
+ return (_jsxs(Navbar, { mode: navMode, children: [_jsxs("div", { className: cn('flex flex-row border-b border-fd-foreground/10 px-4 h-14', navMode === 'auto' && 'md:px-6'), children: [_jsxs("div", { className: cn('flex flex-row items-center', navMode === 'top' && 'flex-1 pe-4'), children: [sidebarCollapsible && navMode === 'auto' ? (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
51
47
  color: 'ghost',
52
48
  size: 'icon-sm',
53
49
  }), 'text-fd-muted-foreground -ms-1.5 me-2 data-[collapsed=false]:hidden max-md:hidden'), children: _jsx(SidebarIcon, {}) })) : null, _jsx(Link, { href: nav.url ?? '/', className: cn('inline-flex items-center gap-2.5 font-semibold', navMode === 'auto' && 'md:hidden'), children: nav.title })] }), _jsx(LargeSearchToggle, { hideIfDisabled: true, className: cn('w-full my-auto rounded-xl max-md:hidden', navMode === 'top' ? 'max-w-sm px-2' : 'max-w-[240px]') }), _jsxs("div", { className: "flex flex-1 flex-row items-center justify-end", children: [_jsx("div", { className: "flex flex-row items-center gap-6 px-4 empty:hidden max-lg:hidden", children: links
54
50
  .filter((item) => item.type !== 'icon')
55
51
  .map((item, i) => (_jsx(NavbarLinkItem, { item: item, className: "text-sm text-fd-muted-foreground transition-colors hover:text-fd-accent-foreground" }, i))) }), nav.children, _jsx(SearchToggle, { hideIfDisabled: true, className: "md:hidden" }), _jsx(NavbarSidebarTrigger, { className: "md:hidden" }), links
56
52
  .filter((item) => item.type === 'icon')
57
- .map((item, i) => (_jsx(BaseLinkItem, { item: item, className: cn(buttonVariants({ size: 'icon-sm', color: 'ghost' }), 'text-fd-muted-foreground max-lg:hidden'), "aria-label": item.label, children: item.icon }, i))), i18n ? (_jsx(LanguageToggle, { className: "max-md:hidden", children: _jsx(Languages, { className: "size-4.5 text-fd-muted-foreground" }) })) : null, _jsx(ThemeToggle, { className: "ms-2 max-md:hidden", mode: "light-dark-system" }), sidebarCollapsible && navMode === 'top' ? (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
53
+ .map((item, i) => (_jsx(BaseLinkItem, { item: item, className: cn(buttonVariants({ size: 'icon-sm', color: 'ghost' }), 'text-fd-muted-foreground max-lg:hidden'), "aria-label": item.label, children: item.icon }, i))), i18n ? (_jsx(LanguageToggle, { className: "max-md:hidden", children: _jsx(Languages, { className: "size-4.5 text-fd-muted-foreground" }) })) : null, replaceOrDefault(themeSwitch, _jsx(ThemeToggle, { className: "ms-2 max-md:hidden", mode: themeSwitch?.mode ?? 'light-dark-system' })), sidebarCollapsible && navMode === 'top' ? (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
58
54
  color: 'secondary',
59
55
  size: 'icon-sm',
60
56
  }), 'ms-2 text-fd-muted-foreground rounded-full max-md:hidden'), children: _jsx(SidebarIcon, {}) })) : null] })] }), tabs.length > 0 ? (_jsx(LayoutTabs, { className: "px-6 border-b border-fd-foreground/10 h-10 max-lg:hidden", children: tabs.map((tab) => (_jsx(LayoutTab, { ...tab }, tab.url))) })) : null] }));
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/layouts/shared.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,UAAW,SAAQ,gBAAgB;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IAErB,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,IAAI,CAAC,EAAE,YAAY,GAAG,mBAAmB,CAAC;KAC3C,CAAC;IAEF;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAE5B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB;;OAEG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAE1B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,OAAO,EAAE,KAAK,YAAY,EAAE,CAAC;AAE7B;;GAEG;AACH,wBAAgB,QAAQ,CACtB,KAAK,CAAC,EAAE,YAAY,EAAE,EACtB,SAAS,CAAC,EAAE,MAAM,GACjB,YAAY,EAAE,CAqBhB;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EACC;IACE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,GACD,SAAS,EACb,GAAG,EAAE,SAAS,EACd,oBAAoB,CAAC,EAAE,MAAM,EAC7B,QAAQ,CAAC,EAAE,SAAS,GACnB,SAAS,CAMX"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/layouts/shared.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,UAAW,SAAQ,gBAAgB;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IAErB,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,IAAI,CAAC,EAAE,YAAY,GAAG,mBAAmB,CAAC;KAC3C,CAAC;IAEF;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAE5B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB;;OAEG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAE1B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,OAAO,EAAE,KAAK,YAAY,EAAE,CAAC;AAE7B;;GAEG;AACH,wBAAgB,QAAQ,CACtB,KAAK,GAAE,YAAY,EAAO,EAC1B,SAAS,CAAC,EAAE,MAAM,GACjB,YAAY,EAAE,CAqBhB;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EACC;IACE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,GACD,SAAS,EACb,GAAG,EAAE,SAAS,EACd,oBAAoB,CAAC,EAAE,MAAM,EAC7B,QAAQ,CAAC,EAAE,SAAS,GACnB,SAAS,CAMX"}
@@ -3,7 +3,7 @@ import { Slot } from '@radix-ui/react-slot';
3
3
  /**
4
4
  * Get Links Items with shortcuts
5
5
  */
6
- export function getLinks(links, githubUrl) {
6
+ export function getLinks(links = [], githubUrl) {
7
7
  let result = links ?? [];
8
8
  if (githubUrl)
9
9
  result = [
package/dist/mdx.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import type { AnchorHTMLAttributes, FC, HTMLAttributes, ImgHTMLAttributes, TableHTMLAttributes } from 'react';
2
2
  import { Card, Cards } from './components/card.js';
3
- declare function Image(props: ImgHTMLAttributes<HTMLImageElement>): import("react/jsx-runtime").JSX.Element;
3
+ declare function Image(props: ImgHTMLAttributes<HTMLImageElement> & {
4
+ sizes?: string;
5
+ }): import("react/jsx-runtime").JSX.Element;
4
6
  declare function Table(props: TableHTMLAttributes<HTMLTableElement>): import("react/jsx-runtime").JSX.Element;
5
7
  declare const defaultMdxComponents: {
6
8
  pre: (props: HTMLAttributes<HTMLPreElement>) => import("react/jsx-runtime").JSX.Element;
package/dist/mdx.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mdx.d.ts","sourceRoot":"","sources":["../src/mdx.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,EAAE,EACF,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,OAAO,CAAC;AAGf,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAMhD,iBAAS,KAAK,CAAC,KAAK,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,2CAQxD;AAED,iBAAS,KAAK,CAAC,KAAK,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,2CAM1D;AAED,QAAA,MAAM,oBAAoB;iBACX,cAAc,CAAC,cAAc,CAAC;;;OAOhC,EAAE,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;;gBAE1C,cAAc,CAAC,kBAAkB,CAAC;gBAGlC,cAAc,CAAC,kBAAkB,CAAC;gBAGlC,cAAc,CAAC,kBAAkB,CAAC;gBAGlC,cAAc,CAAC,kBAAkB,CAAC;gBAGlC,cAAc,CAAC,kBAAkB,CAAC;gBAGlC,cAAc,CAAC,kBAAkB,CAAC;;;;;;;CAK/C,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,cAAc,cAAc,EAAE,kBAK5D,CAAC;AAEJ,OAAO,EAAE,oBAAoB,IAAI,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"mdx.d.ts","sourceRoot":"","sources":["../src/mdx.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,EAAE,EACF,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAMhD,iBAAS,KAAK,CACZ,KAAK,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,GAAG;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,2CASF;AAED,iBAAS,KAAK,CAAC,KAAK,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,2CAM1D;AAED,QAAA,MAAM,oBAAoB;iBACX,cAAc,CAAC,cAAc,CAAC;;;OAOhC,EAAE,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;;gBAE1C,cAAc,CAAC,kBAAkB,CAAC;gBAGlC,cAAc,CAAC,kBAAkB,CAAC;gBAGlC,cAAc,CAAC,kBAAkB,CAAC;gBAGlC,cAAc,CAAC,kBAAkB,CAAC;gBAGlC,cAAc,CAAC,kBAAkB,CAAC;gBAGlC,cAAc,CAAC,kBAAkB,CAAC;;;;;;;CAK/C,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,cAAc,cAAc,EAAE,kBAK5D,CAAC;AAEJ,OAAO,EAAE,oBAAoB,IAAI,OAAO,EAAE,CAAC"}
package/dist/mdx.js CHANGED
@@ -1,13 +1,13 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import Link from 'fumadocs-core/link';
3
- import NextImage from 'next/image';
3
+ import { Image as FrameworkImage } from 'fumadocs-core/framework';
4
4
  import { Card, Cards } from './components/card.js';
5
5
  import { Callout } from './components/callout.js';
6
6
  import { Heading } from './components/heading.js';
7
7
  import { cn } from './utils/cn.js';
8
8
  import { CodeBlock, Pre } from './components/codeblock.js';
9
9
  function Image(props) {
10
- return (_jsx(NextImage, { sizes: "(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px", ...props, className: cn('rounded-lg', props.className) }));
10
+ return (_jsx(FrameworkImage, { sizes: "(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px", ...props, className: cn('rounded-lg', props.className) }));
11
11
  }
12
12
  function Table(props) {
13
13
  return (_jsx("div", { className: "relative overflow-auto", children: _jsx("table", { ...props }) }));
@@ -21,4 +21,4 @@ export declare function Footer({ items }: FooterProps): import("react/jsx-runtim
21
21
  export type BreadcrumbProps = BreadcrumbOptions;
22
22
  export declare function Breadcrumb(options: BreadcrumbProps): import("react/jsx-runtime").JSX.Element | null;
23
23
  export {};
24
- //# sourceMappingURL=page.client.d.ts.map
24
+ //# sourceMappingURL=page-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"page.client.d.ts","sourceRoot":"","sources":["../src/page.client.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,cAAc,EAKpB,MAAM,OAAO,CAAC;AAOf,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAMlC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,2CA8CrE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,2CAY7D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,2CAe7D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,2CAc/C;AAED,KAAK,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,KAAK,CAAC,CAAC;AAChE,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,KAAK,CAAC,EAAE;QACN,QAAQ,CAAC,EAAE,IAAI,CAAC;QAChB,IAAI,CAAC,EAAE,IAAI,CAAC;KACb,CAAC;CACH;AAyBD,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,WAAW,2CA+B5C;AAuCD,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAEhD,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,kDAsClD"}
1
+ {"version":3,"file":"page-client.d.ts","sourceRoot":"","sources":["../src/page-client.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,cAAc,EAKpB,MAAM,OAAO,CAAC;AAOf,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAMlC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,2CA8CrE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,2CAY7D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,2CAe7D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,2CAc/C;AAED,KAAK,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,KAAK,CAAC,CAAC;AAChE,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,KAAK,CAAC,EAAE;QACN,QAAQ,CAAC,EAAE,IAAI,CAAC;QAChB,IAAI,CAAC,EAAE,IAAI,CAAC;KACb,CAAC;CACH;AAyBD,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,WAAW,2CA+B5C;AA8BD,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAEhD,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,kDAsClD"}
@@ -2,12 +2,12 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { Fragment, useEffect, useMemo, useRef, useState, } from 'react';
4
4
  import { ChevronLeft, ChevronRight } from 'lucide-react';
5
- import Link from 'next/link';
5
+ import Link from 'fumadocs-core/link';
6
6
  import { cn } from './utils/cn.js';
7
7
  import { useI18n } from './contexts/i18n.js';
8
8
  import { useTreeContext, useTreePath } from './contexts/tree.js';
9
9
  import { useSidebar } from './contexts/sidebar.js';
10
- import { usePathname } from 'next/navigation';
10
+ import { usePathname } from 'fumadocs-core/framework';
11
11
  import { getBreadcrumbItemsFromPath, } from 'fumadocs-core/breadcrumb';
12
12
  import { usePageStyles, useNav } from './contexts/layout.js';
13
13
  import { isActive } from './utils/is-active.js';
@@ -91,11 +91,7 @@ export function Footer({ items }) {
91
91
  function FooterItem({ item, index }) {
92
92
  const { text } = useI18n();
93
93
  const Icon = index === 0 ? ChevronLeft : ChevronRight;
94
- const title = item.description ? item.name : null;
95
- const description = item.description ?? item.name;
96
- return (_jsxs(Link, { href: item.url, className: cn('flex flex-col gap-2 rounded-lg border p-4 text-sm transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground @max-lg:col-span-full', index === 1 && 'text-end'), children: [_jsxs("div", { className: cn('inline-flex items-center gap-1.5', index === 1 && 'flex-row-reverse', title ? 'font-medium' : 'text-fd-muted-foreground'), children: [_jsx(Icon, { className: "-mx-1 size-4 shrink-0 rtl:rotate-180" }), _jsx("p", { children: title ?? text.nextPage })] }), _jsx("p", { className: cn(title
97
- ? 'text-fd-muted-foreground truncate'
98
- : 'font-medium md:text-[15px]'), children: description })] }));
94
+ return (_jsxs(Link, { href: item.url, className: cn('flex flex-col gap-2 rounded-lg border p-4 text-sm transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground @max-lg:col-span-full', index === 1 && 'text-end'), children: [_jsxs("div", { className: cn('inline-flex items-center gap-1.5 font-medium', index === 1 && 'flex-row-reverse'), children: [_jsx(Icon, { className: "-mx-1 size-4 shrink-0 rtl:rotate-180" }), _jsx("p", { children: item.name })] }), _jsx("p", { className: "text-fd-muted-foreground truncate", children: item.description ?? (index === 0 ? text.previousPage : text.nextPage) })] }));
99
95
  }
100
96
  export function Breadcrumb(options) {
101
97
  const path = useTreePath();
package/dist/page.d.ts CHANGED
@@ -2,7 +2,7 @@ import { type PageTree, type TableOfContents } from 'fumadocs-core/server';
2
2
  import { type AnchorHTMLAttributes, type HTMLAttributes, type ReactNode } from 'react';
3
3
  import type { LoaderConfig, LoaderOutput, Page } from 'fumadocs-core/source';
4
4
  import { type AnchorProviderProps } from 'fumadocs-core/toc';
5
- import { type FooterProps, type BreadcrumbProps } from './page.client.js';
5
+ import { type FooterProps, type BreadcrumbProps } from './page-client.js';
6
6
  import { type TOCProps } from './components/layout/toc.js';
7
7
  type TableOfContentOptions = Omit<TOCProps, 'items' | 'children'> & Pick<AnchorProviderProps, 'single'> & {
8
8
  enabled: boolean;
package/dist/page.js CHANGED
@@ -4,7 +4,7 @@ import { AnchorProvider } from 'fumadocs-core/toc';
4
4
  import { Card, Cards } from './components/card.js';
5
5
  import { replaceOrDefault } from './layouts/shared.js';
6
6
  import { cn } from './utils/cn.js';
7
- import { Footer, LastUpdate, TocPopoverHeader, Breadcrumb, PageBody, PageArticle, } from './page.client.js';
7
+ import { Footer, LastUpdate, TocPopoverHeader, Breadcrumb, PageBody, PageArticle, } from './page-client.js';
8
8
  import { Toc, TOCItems, TocPopoverTrigger, TocPopoverContent, TOCScrollArea, } from './components/layout/toc.js';
9
9
  import { buttonVariants } from './components/ui/button.js';
10
10
  import { Edit, Text } from 'lucide-react';
@@ -1,7 +1,7 @@
1
1
  import { ThemeProvider } from 'next-themes';
2
2
  import { type ComponentPropsWithoutRef, type ReactNode } from 'react';
3
- import type { DefaultSearchDialogProps } from './components/dialog/search-default.js';
4
- import { type SearchProviderProps } from './contexts/search.js';
3
+ import type { DefaultSearchDialogProps } from '../components/dialog/search-default.js';
4
+ import { type SearchProviderProps } from '../contexts/search.js';
5
5
  interface SearchOptions extends Omit<SearchProviderProps, 'options' | 'children'> {
6
6
  options?: Partial<DefaultSearchDialogProps> | SearchProviderProps['options'];
7
7
  /**
@@ -34,9 +34,5 @@ export interface RootProviderProps {
34
34
  children?: ReactNode;
35
35
  }
36
36
  export declare function RootProvider({ children, dir, theme, search, }: RootProviderProps): import("react/jsx-runtime").JSX.Element;
37
- export { useI18n, I18nLabel } from './contexts/i18n.js';
38
- export { SearchProvider, SearchOnly, useSearchContext, type SearchProviderProps, } from './contexts/search.js';
39
- export { SidebarProvider, useSidebar } from './contexts/sidebar.js';
40
- export { useTreePath, useTreeContext, TreeContextProvider, } from './contexts/tree.js';
41
- export { StylesProvider, usePageStyles, type PageStyles, } from './contexts/layout.js';
42
- //# sourceMappingURL=provider.d.ts.map
37
+ export {};
38
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/provider/base.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,wBAAwB,EAAQ,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAEnF,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7E,UAAU,aACR,SAAQ,IAAI,CAAC,mBAAmB,EAAE,SAAS,GAAG,UAAU,CAAC;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC7E;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAEpB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAEhC;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,OAAO,aAAa,CAAC,CAAC,GAAG;QAChE;;;;WAIG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IAEF,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAMD,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,GAAW,EACX,KAAU,EACV,MAAM,GACP,EAAE,iBAAiB,2CA4BnB"}
@@ -1,11 +1,11 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { ThemeProvider } from 'next-themes';
4
- import dynamic from 'next/dynamic';
4
+ import { lazy } from 'react';
5
5
  import { DirectionProvider } from '@radix-ui/react-direction';
6
- import { SidebarProvider } from './contexts/sidebar.js';
7
- import { SearchProvider } from './contexts/search.js';
8
- const DefaultSearchDialog = dynamic(() => import('./components/dialog/search-default.js'), { ssr: false });
6
+ import { SidebarProvider } from '../contexts/sidebar.js';
7
+ import { SearchProvider } from '../contexts/search.js';
8
+ const DefaultSearchDialog = lazy(() => import('../components/dialog/search-default.js'));
9
9
  export function RootProvider({ children, dir = 'ltr', theme = {}, search, }) {
10
10
  let body = children;
11
11
  if (search?.enabled !== false)
@@ -14,8 +14,3 @@ export function RootProvider({ children, dir = 'ltr', theme = {}, search, }) {
14
14
  body = (_jsx(ThemeProvider, { attribute: "class", defaultTheme: "system", enableSystem: true, disableTransitionOnChange: true, ...theme, children: body }));
15
15
  return (_jsx(DirectionProvider, { dir: dir, children: _jsx(SidebarProvider, { children: body }) }));
16
16
  }
17
- export { useI18n, I18nLabel } from './contexts/i18n.js';
18
- export { SearchProvider, SearchOnly, useSearchContext, } from './contexts/search.js';
19
- export { SidebarProvider, useSidebar } from './contexts/sidebar.js';
20
- export { useTreePath, useTreeContext, TreeContextProvider, } from './contexts/tree.js';
21
- export { StylesProvider, usePageStyles, } from './contexts/layout.js';
@@ -0,0 +1,9 @@
1
+ import { RootProvider as BaseProvider } from './base.js';
2
+ import type { ComponentProps } from 'react';
3
+ export declare function RootProvider(props: ComponentProps<typeof BaseProvider>): import("react/jsx-runtime").JSX.Element;
4
+ export { useI18n, I18nLabel } from '../contexts/i18n.js';
5
+ export { SearchProvider, SearchOnly, useSearchContext, type SearchProviderProps, } from '../contexts/search.js';
6
+ export { SidebarProvider, useSidebar } from '../contexts/sidebar.js';
7
+ export { useTreePath, useTreeContext, TreeContextProvider, } from '../contexts/tree.js';
8
+ export { useNav, NavProvider, type NavProviderProps, type PageStyles, StylesProvider, usePageStyles, } from '../contexts/layout.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provider/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,IAAI,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAG5C,wBAAgB,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC,OAAO,YAAY,CAAC,2CAMtE;AAED,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EACL,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,KAAK,mBAAmB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EACL,WAAW,EACX,cAAc,EACd,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,MAAM,EACN,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,cAAc,EACd,aAAa,GACd,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,12 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { RootProvider as BaseProvider } from './base.js';
4
+ import { NextProvider } from 'fumadocs-core/framework/next';
5
+ export function RootProvider(props) {
6
+ return (_jsx(NextProvider, { children: _jsx(BaseProvider, { ...props, children: props.children }) }));
7
+ }
8
+ export { useI18n, I18nLabel } from '../contexts/i18n.js';
9
+ export { SearchProvider, SearchOnly, useSearchContext, } from '../contexts/search.js';
10
+ export { SidebarProvider, useSidebar } from '../contexts/sidebar.js';
11
+ export { useTreePath, useTreeContext, TreeContextProvider, } from '../contexts/tree.js';
12
+ export { useNav, NavProvider, StylesProvider, usePageStyles, } from '../contexts/layout.js';
package/dist/style.css CHANGED
@@ -1,4 +1,4 @@
1
- /*! tailwindcss v4.0.15 | MIT License | https://tailwindcss.com */
1
+ /*! tailwindcss v4.0.17 | MIT License | https://tailwindcss.com */
2
2
  @layer theme, base, components, utilities;
3
3
  @layer theme {
4
4
  :root, :host {
@@ -378,6 +378,9 @@
378
378
  .mx-4 {
379
379
  margin-inline: calc(var(--spacing) * 4);
380
380
  }
381
+ .\!my-0 {
382
+ margin-block: calc(var(--spacing) * 0) !important;
383
+ }
381
384
  .my-0 {
382
385
  margin-block: calc(var(--spacing) * 0);
383
386
  }
@@ -1251,6 +1254,9 @@
1251
1254
  .p-4 {
1252
1255
  padding: calc(var(--spacing) * 4);
1253
1256
  }
1257
+ .px-\(--fd-layout-offset\) {
1258
+ padding-inline: var(--fd-layout-offset);
1259
+ }
1254
1260
  .px-1\.5 {
1255
1261
  padding-inline: calc(var(--spacing) * 1.5);
1256
1262
  }
@@ -1296,6 +1302,9 @@
1296
1302
  .ps-8 {
1297
1303
  padding-inline-start: calc(var(--spacing) * 8);
1298
1304
  }
1305
+ .ps-\[calc\(var\(--fd-layout-offset\)\+var\(--fd-sidebar-width\)\)\] {
1306
+ padding-inline-start: calc(var(--fd-layout-offset) + var(--fd-sidebar-width));
1307
+ }
1299
1308
  .ps-px {
1300
1309
  padding-inline-start: 1px;
1301
1310
  }
@@ -1875,15 +1884,15 @@
1875
1884
  width: var(--fd-sidebar-width);
1876
1885
  }
1877
1886
  }
1878
- .md\:translate-x-0 {
1887
+ .md\:-translate-x-\(--fd-sidebar-offset\) {
1879
1888
  @media (width >= 48rem) {
1880
- --tw-translate-x: calc(var(--spacing) * 0);
1889
+ --tw-translate-x: calc(var(--fd-sidebar-offset) * -1);
1881
1890
  translate: var(--tw-translate-x) var(--tw-translate-y);
1882
1891
  }
1883
1892
  }
1884
- .md\:translate-x-\[calc\(var\(--fd-sidebar-offset\)\*-1\)\] {
1893
+ .md\:translate-x-0 {
1885
1894
  @media (width >= 48rem) {
1886
- --tw-translate-x: calc(var(--fd-sidebar-offset) * -1);
1895
+ --tw-translate-x: calc(var(--spacing) * 0);
1887
1896
  translate: var(--tw-translate-x) var(--tw-translate-y);
1888
1897
  }
1889
1898
  }
@@ -1938,11 +1947,6 @@
1938
1947
  padding-top: calc(var(--spacing) * 12);
1939
1948
  }
1940
1949
  }
1941
- .md\:text-\[15px\] {
1942
- @media (width >= 48rem) {
1943
- font-size: 15px;
1944
- }
1945
- }
1946
1950
  .md\:opacity-0 {
1947
1951
  @media (width >= 48rem) {
1948
1952
  opacity: 0%;
@@ -2178,46 +2182,46 @@
2178
2182
  --color-fd-secondary: hsl(0, 0%, 18%);
2179
2183
  --color-fd-muted-foreground: hsl(0, 0%, 72%);
2180
2184
  }
2181
- .shiki code span {
2185
+ .fd-codeblock code span {
2182
2186
  color: var(--shiki-light);
2183
2187
  }
2184
- .dark .shiki code span {
2188
+ .dark .fd-codeblock code span {
2185
2189
  color: var(--shiki-dark);
2186
2190
  }
2187
- .fd-codeblock code {
2191
+ .fd-codeblock pre > * {
2188
2192
  display: grid;
2189
2193
  font-size: 13px;
2190
2194
  }
2191
- .shiki code .diff.remove {
2195
+ .fd-codeblock code .diff.remove {
2192
2196
  background-color: var(--fd-diff-remove-color);
2193
2197
  opacity: 0.7;
2194
2198
  }
2195
- .shiki code .diff::before {
2199
+ .fd-codeblock code .diff::before {
2196
2200
  position: absolute;
2197
2201
  left: 6px;
2198
2202
  }
2199
- .shiki code .diff.remove::before {
2203
+ .fd-codeblock code .diff.remove::before {
2200
2204
  content: '-';
2201
2205
  color: var(--fd-diff-remove-symbol-color);
2202
2206
  }
2203
- .shiki code .diff.add {
2207
+ .fd-codeblock code .diff.add {
2204
2208
  background-color: var(--fd-diff-add-color);
2205
2209
  }
2206
- .shiki code .diff.add::before {
2210
+ .fd-codeblock code .diff.add::before {
2207
2211
  content: '+';
2208
2212
  color: var(--fd-diff-add-symbol-color);
2209
2213
  }
2210
- .shiki code .diff {
2214
+ .fd-codeblock code .diff {
2211
2215
  margin: 0 -16px;
2212
2216
  padding: 0 16px;
2213
2217
  position: relative;
2214
2218
  }
2215
- .shiki .highlighted {
2219
+ .fd-codeblock .highlighted {
2216
2220
  margin: 0 -16px;
2217
2221
  padding: 0 16px;
2218
2222
  background-color: color-mix( in oklab, var(--color-fd-primary) 10%, transparent );
2219
2223
  }
2220
- .shiki .highlighted-word {
2224
+ .fd-codeblock .highlighted-word {
2221
2225
  padding: 1px 2px;
2222
2226
  margin: -1px -3px;
2223
2227
  border: 1px solid color-mix(in oklab, var(--color-fd-primary) 50%, transparent);