fumadocs-ui 15.1.0 → 15.1.2

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 (45) hide show
  1. package/dist/components/layout/search-toggle.d.ts +2 -1
  2. package/dist/components/layout/search-toggle.d.ts.map +1 -1
  3. package/dist/components/layout/search-toggle.js +3 -3
  4. package/dist/components/layout/sidebar.d.ts.map +1 -0
  5. package/dist/{layouts/docs → components/layout}/sidebar.js +24 -23
  6. package/dist/components/ui/button.d.ts +2 -0
  7. package/dist/components/ui/button.d.ts.map +1 -1
  8. package/dist/contexts/i18n.d.ts +26 -0
  9. package/dist/contexts/i18n.d.ts.map +1 -1
  10. package/dist/contexts/i18n.js +32 -0
  11. package/dist/contexts/layout.d.ts +16 -0
  12. package/dist/contexts/layout.d.ts.map +1 -1
  13. package/dist/contexts/layout.js +23 -1
  14. package/dist/i18n.d.ts +1 -23
  15. package/dist/i18n.d.ts.map +1 -1
  16. package/dist/i18n.js +1 -34
  17. package/dist/layouts/docs/shared.d.ts +1 -1
  18. package/dist/layouts/docs/shared.d.ts.map +1 -1
  19. package/dist/layouts/docs/shared.js +1 -1
  20. package/dist/layouts/docs.client.d.ts +1 -0
  21. package/dist/layouts/docs.client.d.ts.map +1 -1
  22. package/dist/layouts/docs.client.js +14 -3
  23. package/dist/layouts/docs.d.ts +5 -1
  24. package/dist/layouts/docs.d.ts.map +1 -1
  25. package/dist/layouts/docs.js +8 -11
  26. package/dist/layouts/home/navbar.js +1 -1
  27. package/dist/layouts/home.js +2 -2
  28. package/dist/layouts/notebook.client.js +1 -1
  29. package/dist/layouts/notebook.d.ts +2 -0
  30. package/dist/layouts/notebook.d.ts.map +1 -1
  31. package/dist/layouts/notebook.js +7 -9
  32. package/dist/layouts/shared.d.ts +12 -6
  33. package/dist/layouts/shared.d.ts.map +1 -1
  34. package/dist/page.client.d.ts.map +1 -1
  35. package/dist/page.client.js +1 -2
  36. package/dist/provider.d.ts +2 -2
  37. package/dist/provider.d.ts.map +1 -1
  38. package/dist/provider.js +2 -2
  39. package/dist/style.css +38 -35
  40. package/package.json +10 -10
  41. package/dist/components/layout/nav.d.ts +0 -28
  42. package/dist/components/layout/nav.d.ts.map +0 -1
  43. package/dist/components/layout/nav.js +0 -32
  44. package/dist/layouts/docs/sidebar.d.ts.map +0 -1
  45. /package/dist/{layouts/docs → components/layout}/sidebar.d.ts +0 -0
@@ -1,5 +1,6 @@
1
1
  import { type ButtonHTMLAttributes } from 'react';
2
- export declare function SearchToggle({ hideIfDisabled, ...props }: ButtonHTMLAttributes<HTMLButtonElement> & {
2
+ import { type ButtonProps } from '../../components/ui/button.js';
3
+ export declare function SearchToggle({ hideIfDisabled, size, color, ...props }: ButtonHTMLAttributes<HTMLButtonElement> & ButtonProps & {
3
4
  hideIfDisabled?: boolean;
4
5
  }): import("react/jsx-runtime").JSX.Element | null;
5
6
  export declare function LargeSearchToggle({ hideIfDisabled, ...props }: ButtonHTMLAttributes<HTMLButtonElement> & {
@@ -1 +1 @@
1
- {"version":3,"file":"search-toggle.d.ts","sourceRoot":"","sources":["../../../src/components/layout/search-toggle.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAOlD,wBAAgB,YAAY,CAAC,EAC3B,cAAc,EACd,GAAG,KAAK,EACT,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAC3C,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,kDAuBA;AAED,wBAAgB,iBAAiB,CAAC,EAChC,cAAc,EACd,GAAG,KAAK,EACT,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAC3C,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,kDA6BA"}
1
+ {"version":3,"file":"search-toggle.d.ts","sourceRoot":"","sources":["../../../src/components/layout/search-toggle.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAKlD,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,wBAAwB,CAAC;AAE1E,wBAAgB,YAAY,CAAC,EAC3B,cAAc,EACd,IAAa,EACb,KAAe,EACf,GAAG,KAAK,EACT,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,GACxC,WAAW,GAAG;IACZ,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,kDAuBF;AAED,wBAAgB,iBAAiB,CAAC,EAChC,cAAc,EACd,GAAG,KAAK,EACT,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAC3C,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,kDA6BA"}
@@ -5,13 +5,13 @@ import { useSearchContext } from '../../contexts/search.js';
5
5
  import { useI18n } from '../../contexts/i18n.js';
6
6
  import { cn } from '../../utils/cn.js';
7
7
  import { buttonVariants } from '../../components/ui/button.js';
8
- export function SearchToggle({ hideIfDisabled, ...props }) {
8
+ export function SearchToggle({ hideIfDisabled, size = 'icon', color = 'ghost', ...props }) {
9
9
  const { setOpenSearch, enabled } = useSearchContext();
10
10
  if (hideIfDisabled && !enabled)
11
11
  return null;
12
12
  return (_jsx("button", { type: "button", className: cn(buttonVariants({
13
- size: 'icon',
14
- color: 'ghost',
13
+ size,
14
+ color,
15
15
  }), props.className), "data-search": "", "aria-label": "Open Search", onClick: () => {
16
16
  setOpenSearch(true);
17
17
  }, children: _jsx(SearchIcon, {}) }));
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/layout/sidebar.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,oBAAoB,EAGzB,KAAK,cAAc,EACnB,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AACf,OAAa,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAU1D,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,WAAW,YAAa,SAAQ,cAAc,CAAC,WAAW,CAAC;IAC/D;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA2BD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,2CAsDrD;AAED,wBAAgB,OAAO,CAAC,EACtB,gBAAoB,EACpB,QAAe,EACf,KAAK,EACL,GAAG,KAAK,EACT,EAAE,YAAY,GAAG;IAAE,KAAK,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAA;CAAE,2CAwC3D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,2CASlE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,2CAYlE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,2CAarD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,oBAAoB,CAAC,2CAkB3E;AAED,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,SAAS,GAAG;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,2CAsBA;AAED,wBAAgB,aAAa,CAAC,EAC5B,WAAmB,EACnB,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,2CAgBA;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,uBAAuB,2CAqBlE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,2CAmCjD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,uBAAuB,2CAmBlE;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,2CAiB/C;AAgBD;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACzC,2CAwDA"}
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { ChevronDown, ExternalLink, SidebarIcon } from 'lucide-react';
3
+ import { ChevronDown, ExternalLink } from 'lucide-react';
4
4
  import * as Base from 'fumadocs-core/sidebar';
5
5
  import { usePathname } from 'next/navigation';
6
- import { createContext, Fragment, useCallback, useContext, useMemo, useRef, useState, } from 'react';
6
+ import { createContext, Fragment, useContext, useMemo, useRef, useState, } from 'react';
7
7
  import Link from 'fumadocs-core/link';
8
8
  import { useOnChange } from 'fumadocs-core/utils/use-on-change';
9
9
  import { cn } from '../../utils/cn.js';
@@ -32,24 +32,24 @@ export function CollapsibleSidebar(props) {
32
32
  setHover(false);
33
33
  closeTimeRef.current = Date.now() + 150;
34
34
  });
35
- const onEnter = useCallback((e) => {
36
- if (e.pointerType === 'touch' || closeTimeRef.current > Date.now())
37
- return;
38
- window.clearTimeout(timerRef.current);
39
- setHover(true);
40
- }, []);
41
- const onLeave = useCallback((e) => {
42
- if (e.pointerType === 'touch')
43
- return;
44
- window.clearTimeout(timerRef.current);
45
- timerRef.current = window.setTimeout(() => {
46
- setHover(false);
47
- closeTimeRef.current = Date.now() + 150;
48
- }, Math.min(e.clientX, document.body.clientWidth - e.clientX) > 100
49
- ? 0
50
- : 500);
51
- }, []);
52
- return (_jsx(Sidebar, { ...props, onPointerEnter: collapsed ? onEnter : undefined, onPointerLeave: collapsed ? onLeave : undefined, "data-collapsed": collapsed, className: cn('md:transition-all', collapsed &&
35
+ return (_jsx(Sidebar, { ...props, onPointerEnter: (e) => {
36
+ if (!collapsed ||
37
+ e.pointerType === 'touch' ||
38
+ closeTimeRef.current > Date.now())
39
+ return;
40
+ window.clearTimeout(timerRef.current);
41
+ setHover(true);
42
+ }, onPointerLeave: (e) => {
43
+ if (!collapsed || e.pointerType === 'touch')
44
+ return;
45
+ window.clearTimeout(timerRef.current);
46
+ timerRef.current = window.setTimeout(() => {
47
+ setHover(false);
48
+ closeTimeRef.current = Date.now() + 150;
49
+ }, Math.min(e.clientX, document.body.clientWidth - e.clientX) > 100
50
+ ? 0
51
+ : 500);
52
+ }, "data-collapsed": collapsed, className: cn('md:transition-all', collapsed &&
53
53
  'md:-me-(--fd-sidebar-width) md:translate-x-[calc(var(--fd-sidebar-offset)*-1)] rtl:md:translate-x-(--fd-sidebar-offset)', collapsed && hover && 'z-50 md:translate-x-0', collapsed && !hover && 'md:opacity-0', props.className), style: {
54
54
  '--fd-sidebar-offset': 'calc(var(--fd-sidebar-width) - 20px)',
55
55
  } }));
@@ -62,7 +62,7 @@ export function Sidebar({ defaultOpenLevel = 0, prefetch = true, inner, ...props
62
62
  level: 1,
63
63
  };
64
64
  }, [defaultOpenLevel, prefetch]);
65
- return (_jsx(Context.Provider, { value: context, children: _jsx(Base.SidebarList, { id: "nd-sidebar", blockScrollingWidth: 768, ...props, className: cn('fixed top-[calc(var(--fd-banner-height)+var(--fd-nav-height))] z-30 bg-fd-card text-sm md:sticky md:h-(--fd-sidebar-height)', 'max-md:inset-x-0 max-md:bottom-0 max-md:bg-fd-background/80 max-md:text-[15px] max-md:backdrop-blur-lg max-md:data-[open=false]:invisible', props.className), style: {
65
+ return (_jsx(Context.Provider, { value: context, children: _jsx(Base.SidebarList, { id: "nd-sidebar", blockScrollingWidth: 768, ...props, className: cn('fixed top-[calc(var(--fd-banner-height)+var(--fd-nav-height))] z-20 bg-fd-card text-sm md:sticky md:h-(--fd-sidebar-height)', 'max-md:inset-x-0 max-md:bottom-0 max-md:bg-fd-background/80 max-md:text-[15px] max-md:backdrop-blur-lg max-md:data-[open=false]:invisible', props.className), style: {
66
66
  ...props.style,
67
67
  '--fd-sidebar-height': 'calc(100dvh - var(--fd-banner-height) - var(--fd-nav-height))',
68
68
  }, children: _jsx("div", { ...inner, className: cn('flex size-full max-w-full flex-col pt-2 md:ms-auto md:w-(--fd-sidebar-width) md:border-e md:pt-4', inner?.className), children: props.children }) }) }));
@@ -139,7 +139,7 @@ export function SidebarCollapseTrigger(props) {
139
139
  const { collapsed, setCollapsed } = useSidebar();
140
140
  return (_jsx("button", { type: "button", "aria-label": "Collapse Sidebar", "data-collapsed": collapsed, ...props, onClick: () => {
141
141
  setCollapsed((prev) => !prev);
142
- }, children: props.children ?? _jsx(SidebarIcon, {}) }));
142
+ }, children: props.children }));
143
143
  }
144
144
  function useFolderContext() {
145
145
  const ctx = useContext(FolderContext);
@@ -185,7 +185,8 @@ export function SidebarPageTree(props) {
185
185
  function PageTreeFolder({ item, ...props }) {
186
186
  const { defaultOpenLevel, level } = useInternalContext();
187
187
  const path = useTreePath();
188
- return (_jsxs(SidebarFolder, { defaultOpen: (item.defaultOpen ?? defaultOpenLevel >= level) || path.includes(item), children: [item.index ? (_jsxs(SidebarFolderLink, { href: item.index.url, external: item.index.external, ...props, children: [item.icon, item.name] })) : (_jsxs(SidebarFolderTrigger, { ...props, children: [item.icon, item.name] })), _jsx(SidebarFolderContent, { children: props.children })] }));
188
+ return (_jsxs(SidebarFolder, { defaultOpen: (item.defaultOpen ?? defaultOpenLevel >= level) ||
189
+ path.some((pathItem) => pathItem.$id === item.$id || pathItem === item), children: [item.index ? (_jsxs(SidebarFolderLink, { href: item.index.url, external: item.index.external, ...props, children: [item.icon, item.name] })) : (_jsxs(SidebarFolderTrigger, { ...props, children: [item.icon, item.name] })), _jsx(SidebarFolderContent, { children: props.children })] }));
189
190
  }
190
191
  function getOffset(level) {
191
192
  return `calc(var(--spacing) * ${(level > 1 ? level : 0) * 2 + 2})`;
@@ -1,5 +1,7 @@
1
+ import { type VariantProps } from 'class-variance-authority';
1
2
  export declare const buttonVariants: (props?: ({
2
3
  color?: "primary" | "outline" | "ghost" | "secondary" | null | undefined;
3
4
  size?: "icon" | "sm" | "icon-sm" | null | undefined;
4
5
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
+ export type ButtonProps = VariantProps<typeof buttonVariants>;
5
7
  //# sourceMappingURL=button.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/button.tsx"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc;;;8EAmB1B,CAAC"}
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAElE,eAAO,MAAM,cAAc;;;8EAmB1B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { type ReactNode } from 'react';
1
2
  export interface Translations {
2
3
  search: string;
3
4
  searchNoResult: string;
@@ -26,5 +27,30 @@ export declare function I18nLabel(props: {
26
27
  label: keyof Translations;
27
28
  }): string;
28
29
  export declare function useI18n(): I18nContextType;
30
+ export interface I18nProviderProps {
31
+ /**
32
+ * Current locale
33
+ */
34
+ locale: string;
35
+ /**
36
+ * Handle changes to the locale, redirect user when not specified.
37
+ */
38
+ onLocaleChange?: (v: string) => void;
39
+ /**
40
+ * Translations of current locale
41
+ */
42
+ translations?: Partial<Translations>;
43
+ /**
44
+ * Available languages
45
+ */
46
+ locales?: LocaleItem[];
47
+ children?: ReactNode;
48
+ }
49
+ export declare function I18nProvider({ locales, locale, onChange: _onChange, onLocaleChange, ...props }: I18nProviderProps & {
50
+ /**
51
+ * @deprecated use `onLocaleChange` instead
52
+ */
53
+ onChange?: I18nProviderProps['onLocaleChange'];
54
+ }): import("react/jsx-runtime").JSX.Element;
29
55
  export {};
30
56
  //# sourceMappingURL=i18n.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/contexts/i18n.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IAEvB,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IAEtB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;CACxB;AAED,eAAO,MAAM,mBAAmB,EAAE,YAWjC,CAAC;AAEF,eAAO,MAAM,WAAW,0CAEtB,CAAC;AAEH,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,YAAY,CAAA;CAAE,GAAG,MAAM,CAItE;AAED,wBAAgB,OAAO,IAAI,eAAe,CAEzC"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/contexts/i18n.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IAEvB,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IAEtB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;CACxB;AAED,eAAO,MAAM,mBAAmB,EAAE,YAWjC,CAAC;AAEF,eAAO,MAAM,WAAW,0CAEtB,CAAC;AAEH,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,YAAY,CAAA;CAAE,GAAG,MAAM,CAItE;AAED,wBAAgB,OAAO,IAAI,eAAe,CAEzC;AAED,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAErC;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAErC;;OAEG;IACH,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IAEvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAY,EACZ,MAAM,EACN,QAAQ,EAAE,SAAS,EACnB,cAA0B,EAC1B,GAAG,KAAK,EACT,EAAE,iBAAiB,GAAG;IAErB;;OAEG;IACH,QAAQ,CAAC,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;CAChD,2CAsCA"}
@@ -1,5 +1,9 @@
1
1
  'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
2
3
  import { createContext, useContext } from 'react';
4
+ import { usePathname, useRouter } from 'next/navigation';
5
+ import { useEffectEvent } from 'fumadocs-core/utils/use-effect-event';
6
+ import { useMemo } from 'react';
3
7
  export const defaultTranslations = {
4
8
  search: 'Search',
5
9
  searchNoResult: 'No results found',
@@ -22,3 +26,31 @@ export function I18nLabel(props) {
22
26
  export function useI18n() {
23
27
  return useContext(I18nContext);
24
28
  }
29
+ export function I18nProvider({ locales = [], locale, onChange: _onChange, onLocaleChange = _onChange, ...props }) {
30
+ const router = useRouter();
31
+ const pathname = usePathname();
32
+ const onChange = useEffectEvent((value) => {
33
+ if (onLocaleChange) {
34
+ return onLocaleChange(value);
35
+ }
36
+ const segments = pathname.split('/').filter((v) => v.length > 0);
37
+ // If locale prefix hidden
38
+ if (segments[0] !== locale) {
39
+ segments.unshift(value);
40
+ }
41
+ else {
42
+ segments[0] = value;
43
+ }
44
+ router.push(`/${segments.join('/')}`);
45
+ router.refresh();
46
+ });
47
+ return (_jsx(I18nContext.Provider, { value: useMemo(() => ({
48
+ locale,
49
+ locales,
50
+ text: {
51
+ ...defaultTranslations,
52
+ ...props.translations,
53
+ },
54
+ onChange,
55
+ }), [locale, locales, onChange, props.translations]), children: props.children }));
56
+ }
@@ -9,4 +9,20 @@ export declare function usePageStyles(): PageStyles;
9
9
  export declare function StylesProvider({ children, ...value }: PageStyles & {
10
10
  children: ReactNode;
11
11
  }): import("react/jsx-runtime").JSX.Element;
12
+ export interface NavProviderProps {
13
+ /**
14
+ * Use transparent background
15
+ *
16
+ * @defaultValue none
17
+ */
18
+ transparentMode?: 'always' | 'top' | 'none';
19
+ }
20
+ interface NavContextType {
21
+ isTransparent: boolean;
22
+ }
23
+ export declare function NavProvider({ transparentMode, children, }: NavProviderProps & {
24
+ children: ReactNode;
25
+ }): import("react/jsx-runtime").JSX.Element;
26
+ export declare function useNav(): NavContextType;
27
+ export {};
12
28
  //# sourceMappingURL=layout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/contexts/layout.tsx"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,SAAS,EAAc,MAAM,OAAO,CAAC;AAElE,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAUD,wBAAgB,aAAa,eAE5B;AAED,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,UAAU,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAItC"}
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/contexts/layout.tsx"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AAEf,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAUD,wBAAgB,aAAa,eAE5B;AAED,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,UAAU,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAItC;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,eAAe,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;CAC7C;AAED,UAAU,cAAc;IACtB,aAAa,EAAE,OAAO,CAAC;CACxB;AAMD,wBAAgB,WAAW,CAAC,EAC1B,eAAwB,EACxB,QAAQ,GACT,EAAE,gBAAgB,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAwB5C;AAED,wBAAgB,MAAM,IAAI,cAAc,CAEvC"}
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { createContext, useContext } from 'react';
3
+ import { createContext, useContext, useEffect, useMemo, useState, } from 'react';
4
4
  /**
5
5
  * applied styles to different layout components in `Page` from layouts
6
6
  */
@@ -14,3 +14,25 @@ export function usePageStyles() {
14
14
  export function StylesProvider({ children, ...value }) {
15
15
  return (_jsx(StylesContext.Provider, { value: value, children: children }));
16
16
  }
17
+ const NavContext = createContext({
18
+ isTransparent: false,
19
+ });
20
+ export function NavProvider({ transparentMode = 'none', children, }) {
21
+ const [transparent, setTransparent] = useState(transparentMode !== 'none');
22
+ useEffect(() => {
23
+ if (transparentMode !== 'top')
24
+ return;
25
+ const listener = () => {
26
+ setTransparent(window.scrollY < 10);
27
+ };
28
+ listener();
29
+ window.addEventListener('scroll', listener);
30
+ return () => {
31
+ window.removeEventListener('scroll', listener);
32
+ };
33
+ }, [transparentMode]);
34
+ return (_jsx(NavContext.Provider, { value: useMemo(() => ({ isTransparent: transparent }), [transparent]), children: children }));
35
+ }
36
+ export function useNav() {
37
+ return useContext(NavContext);
38
+ }
package/dist/i18n.d.ts CHANGED
@@ -1,24 +1,2 @@
1
- import { type ReactNode } from 'react';
2
- import { type Translations, defaultTranslations, type LocaleItem } from './contexts/i18n.js';
3
- interface I18nProviderProps {
4
- /**
5
- * Current locale
6
- */
7
- locale: string;
8
- /**
9
- * Translations of current locale
10
- */
11
- translations?: Partial<Translations>;
12
- /**
13
- * Available languages
14
- */
15
- locales?: LocaleItem[];
16
- /**
17
- * Handle changes to the locale, redirect user when not specified.
18
- */
19
- onChange?: (v: string) => void;
20
- children: ReactNode;
21
- }
22
- export declare function I18nProvider({ locales, locale, ...props }: I18nProviderProps): import("react/jsx-runtime").JSX.Element;
23
- export { defaultTranslations, type Translations };
1
+ export { defaultTranslations, type Translations, I18nProvider, type I18nProviderProps, } from './contexts/i18n.js';
24
2
  //# sourceMappingURL=i18n.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAEhD,OAAO,EACL,KAAK,YAAY,EAEjB,mBAAmB,EACnB,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AAGzB,UAAU,iBAAiB;IACzB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAErC;;OAEG;IACH,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAE/B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAY,EACZ,MAAM,EACN,GAAG,KAAK,EACT,EAAE,iBAAiB,2CAuCnB;AAED,OAAO,EAAE,mBAAmB,EAAE,KAAK,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,KAAK,YAAY,EACjB,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC"}
package/dist/i18n.js CHANGED
@@ -1,34 +1 @@
1
- 'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { useMemo } from 'react';
4
- import { useRouter, usePathname } from 'next/navigation';
5
- import { I18nContext, defaultTranslations, } from './contexts/i18n.js';
6
- import { useEffectEvent } from 'fumadocs-core/utils/use-effect-event';
7
- export function I18nProvider({ locales = [], locale, ...props }) {
8
- const router = useRouter();
9
- const pathname = usePathname();
10
- const onChange = props.onChange ??
11
- // eslint-disable-next-line react-hooks/rules-of-hooks -- always controlled
12
- useEffectEvent((value) => {
13
- const segments = pathname.split('/').filter((v) => v.length > 0);
14
- // If locale prefix hidden
15
- if (segments[0] !== locale) {
16
- segments.unshift(value);
17
- }
18
- else {
19
- segments[0] = value;
20
- }
21
- router.push(`/${segments.join('/')}`);
22
- router.refresh();
23
- });
24
- return (_jsx(I18nContext.Provider, { value: useMemo(() => ({
25
- locale,
26
- locales,
27
- text: {
28
- ...defaultTranslations,
29
- ...props.translations,
30
- },
31
- onChange,
32
- }), [locale, locales, onChange, props.translations]), children: props.children }));
33
- }
34
- export { defaultTranslations };
1
+ export { defaultTranslations, I18nProvider, } from './contexts/i18n.js';
@@ -1,5 +1,5 @@
1
1
  import { type LinkItemType } from '../../layouts/links.js';
2
- import { type SidebarProps } from '../../layouts/docs/sidebar.js';
2
+ import { type SidebarProps } from '../../components/layout/sidebar.js';
3
3
  import type { PageTree } from 'fumadocs-core/server';
4
4
  import type { FC, ReactNode } from 'react';
5
5
  import type { Option } from '../../components/layout/root-toggle.js';
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/layouts/docs/shared.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAML,KAAK,YAAY,EAClB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAG9D,eAAO,MAAM,eAAe;;CAE3B,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CACtE;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IAErB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAExC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,KAAK,CAAC;IAErC,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,EAAE,CAAC;QAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAA;KAAE,CAAC,CAAC;IAClC,MAAM,EAAE,EAAE,CAAC;QAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC;IAC1E,SAAS,EAAE,EAAE,CAAC;QAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAA;KAAE,CAAC,CAAC;CAC7C;AAED,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,GAAG,KAAK,EACT,EAAE;IACD,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CAsDA;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,QAY5C;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,EAC/B,IAAI,EAAE,QAAQ,CAAC,IAAI,wBASpB"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/layouts/docs/shared.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAML,KAAK,YAAY,EAClB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAG9D,eAAO,MAAM,eAAe;;CAE3B,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CACtE;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IAErB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAExC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,KAAK,CAAC;IAErC,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,EAAE,CAAC;QAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAA;KAAE,CAAC,CAAC;IAClC,MAAM,EAAE,EAAE,CAAC;QAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC;IAC1E,SAAS,EAAE,EAAE,CAAC;QAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAA;KAAE,CAAC,CAAC;CAC7C;AAED,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,GAAG,KAAK,EACT,EAAE;IACD,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CAsDA;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,QAY5C;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,EAC/B,IAAI,EAAE,QAAQ,CAAC,IAAI,wBASpB"}
@@ -1,6 +1,6 @@
1
1
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  import { BaseLinkItem } from '../../layouts/links.js';
3
- import { SidebarFolder, SidebarFolderContent, SidebarFolderLink, SidebarFolderTrigger, SidebarItem, } from '../../layouts/docs/sidebar.js';
3
+ import { SidebarFolder, SidebarFolderContent, SidebarFolderLink, SidebarFolderTrigger, SidebarItem, } from '../../components/layout/sidebar.js';
4
4
  import { cn } from '../../utils/cn.js';
5
5
  import { buttonVariants } from '../../components/ui/button.js';
6
6
  import { notFound } from 'next/navigation';
@@ -1,4 +1,5 @@
1
1
  import { type ButtonHTMLAttributes, type HTMLAttributes } from 'react';
2
2
  export declare function Navbar(props: HTMLAttributes<HTMLElement>): import("react/jsx-runtime").JSX.Element;
3
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;
4
5
  //# sourceMappingURL=docs.client.d.ts.map
@@ -1 +1 @@
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;AAOvE,wBAAgB,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,2CAiBxD;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,2CAkB/C"}
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,wDAoBjC"}
@@ -1,11 +1,13 @@
1
1
  'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { Menu, X } from 'lucide-react';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Menu, SidebarIcon, X } from 'lucide-react';
4
4
  import { cn } from '../utils/cn.js';
5
5
  import { buttonVariants } from '../components/ui/button.js';
6
6
  import { useSidebar } from '../contexts/sidebar.js';
7
- import { useNav } from '../components/layout/nav.js';
7
+ import { useNav } from '../contexts/layout.js';
8
8
  import { SidebarTrigger } from 'fumadocs-core/sidebar';
9
+ import { SidebarCollapseTrigger } from '../components/layout/sidebar.js';
10
+ import { SearchToggle } from '../components/layout/search-toggle.js';
9
11
  export function Navbar(props) {
10
12
  const { open } = useSidebar();
11
13
  const { isTransparent } = useNav();
@@ -18,3 +20,12 @@ export function NavbarSidebarTrigger(props) {
18
20
  size: 'icon',
19
21
  }), props.className), children: open ? _jsx(X, {}) : _jsx(Menu, {}) }));
20
22
  }
23
+ export function CollapsibleControl() {
24
+ const { collapsed } = useSidebar();
25
+ if (!collapsed)
26
+ return;
27
+ return (_jsxs("div", { className: "fixed flex flex-row items-center animate-fd-fade-in rounded-xl p-0.5 border bg-fd-muted text-fd-muted-foreground z-10 top-12 shadow-md max-md:hidden xl:top-4 xl:start-4 max-xl:end-4", children: [_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
28
+ color: 'ghost',
29
+ size: 'icon-sm',
30
+ }), 'rounded-lg'), children: _jsx(SidebarIcon, {}) }), _jsx(SearchToggle, { size: "icon-sm", className: "rounded-lg" })] }));
31
+ }
@@ -2,13 +2,17 @@ import type { PageTree } from 'fumadocs-core/server';
2
2
  import { type ReactNode, type HTMLAttributes } from 'react';
3
3
  import { type LinkItemType } from '../layouts/links.js';
4
4
  import { type BaseLayoutProps } from './shared.js';
5
+ import { CollapsibleControl, Navbar, NavbarSidebarTrigger } from '../layouts/docs.client.js';
5
6
  import { type SidebarOptions } from '../layouts/docs/shared.js';
6
7
  export interface DocsLayoutProps extends BaseLayoutProps {
7
8
  tree: PageTree.Root;
8
9
  sidebar?: Partial<SidebarOptions>;
10
+ /**
11
+ * Props for the `div` container
12
+ */
9
13
  containerProps?: HTMLAttributes<HTMLDivElement>;
10
14
  }
11
15
  export declare function DocsLayout({ nav: { enabled: navEnabled, component: navReplace, transparentMode, ...nav }, themeSwitch, sidebar: { enabled: sidebarEnabled, collapsible, component: sidebarReplace, tabs: tabOptions, banner: sidebarBanner, footer: sidebarFooter, components: sidebarComponents, hideSearch: sidebarHideSearch, ...sidebar }, i18n, children, ...props }: DocsLayoutProps): ReactNode;
16
+ export { CollapsibleControl, Navbar, NavbarSidebarTrigger, type LinkItemType };
12
17
  export { getSidebarTabsFromOptions, type TabOptions } from './docs/shared.js';
13
- export { type LinkItemType };
14
18
  //# sourceMappingURL=docs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/layouts/docs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAe5D,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,iBAAiB,CAAC;AAElE,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,UAAU,CAAC;AAa1D,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAG/B,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IAEpB,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAElC,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,wBAAgB,UAAU,CAAC,EACzB,GAAG,EAAE,EACH,OAAO,EAAE,UAAiB,EAC1B,SAAS,EAAE,UAAU,EACrB,eAAe,EACf,GAAG,GAAG,EACF,EACN,WAAW,EACX,OAAO,EAAE,EACP,OAAO,EAAE,cAAqB,EAC9B,WAAkB,EAClB,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,iBAAiB,EAC7B,GAAG,OAAO,EACN,EACN,IAAY,EACZ,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,eAAe,GAAG,SAAS,CA8H7B;AA+CD,OAAO,EAAE,yBAAyB,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,KAAK,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/layouts/docs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAe5D,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,iBAAiB,CAAC;AAElE,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,UAAU,CAAC;AAK1D,OAAO,EACL,kBAAkB,EAClB,MAAM,EACN,oBAAoB,EACrB,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAO/B,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IAEpB,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAElC;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,wBAAgB,UAAU,CAAC,EACzB,GAAG,EAAE,EACH,OAAO,EAAE,UAAiB,EAC1B,SAAS,EAAE,UAAU,EACrB,eAAe,EACf,GAAG,GAAG,EACF,EACN,WAAW,EACX,OAAO,EAAE,EACP,OAAO,EAAE,cAAqB,EAC9B,WAAkB,EAClB,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,iBAAiB,EAC7B,GAAG,OAAO,EACN,EACN,IAAY,EACZ,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,eAAe,GAAG,SAAS,CAyH7B;AA+CD,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,oBAAoB,EAAE,KAAK,YAAY,EAAE,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC"}
@@ -1,21 +1,20 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import Link from 'next/link';
3
- import { ChevronRight, Languages } from 'lucide-react';
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
- import { CollapsibleSidebar, Sidebar, SidebarFooter, SidebarHeader, SidebarCollapseTrigger, SidebarViewport, SidebarPageTree, } from '../layouts/docs/sidebar.js';
6
+ import { CollapsibleSidebar, Sidebar, SidebarFooter, SidebarHeader, SidebarCollapseTrigger, SidebarViewport, SidebarPageTree, } from '../components/layout/sidebar.js';
7
7
  import { replaceOrDefault } from '../layouts/shared.js';
8
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 { 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
- import { NavProvider, Title } from '../components/layout/nav.js';
15
14
  import { ThemeToggle } from '../components/layout/theme-toggle.js';
16
15
  import { LargeSearchToggle, SearchToggle, } from '../components/layout/search-toggle.js';
17
16
  import { checkPageTree, getSidebarTabsFromOptions, layoutVariables, SidebarLinkItem, } from '../layouts/docs/shared.js';
18
- import { StylesProvider } from '../contexts/layout.js';
17
+ import { StylesProvider, NavProvider, } from '../contexts/layout.js';
19
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 }) {
20
19
  checkPageTree(props.tree);
21
20
  const links = getLinks(props.links ?? [], props.githubUrl);
@@ -28,16 +27,13 @@ export function DocsLayout({ nav: { enabled: navEnabled = true, component: navRe
28
27
  tocNav: cn('xl:hidden'),
29
28
  toc: cn('max-xl:hidden'),
30
29
  };
31
- return (_jsx(TreeContextProvider, { tree: props.tree, children: _jsxs(NavProvider, { transparentMode: transparentMode, children: [replaceOrDefault({ enabled: navEnabled, component: navReplace }, _jsxs(Navbar, { className: "md:hidden", children: [_jsx(Title, { url: nav.url, title: 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: {
30
+ 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: {
32
31
  ...layoutVariables,
33
32
  ...props.containerProps?.style,
34
- }, children: [collapsible ? (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
35
- color: 'secondary',
36
- size: 'icon',
37
- }), 'fixed top-1/2 -translate-y-1/2 start-0 z-40 text-fd-muted-foreground border-s-0 rounded-s-none shadow-md data-[collapsed=false]:hidden max-md:hidden'), children: _jsx(ChevronRight, {}) })) : 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({
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({
38
34
  color: 'ghost',
39
35
  size: 'icon-sm',
40
- }), 'ms-auto mb-auto text-fd-muted-foreground max-md:hidden') }))] }), 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
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
41
37
  .filter((v) => v.type !== 'icon')
42
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] })] }), {
43
39
  ...sidebar,
@@ -51,4 +47,5 @@ function SidebarFooterItems({ i18n, themeSwitch, links, }) {
51
47
  return null;
52
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 }))] }));
53
49
  }
50
+ export { CollapsibleControl, Navbar, NavbarSidebarTrigger };
54
51
  export { getSidebarTabsFromOptions } from './docs/shared.js';
@@ -6,7 +6,7 @@ import Link from 'fumadocs-core/link';
6
6
  import { cn } from '../../utils/cn.js';
7
7
  import { BaseLinkItem } from '../../layouts/links.js';
8
8
  import { NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, } from '../../components/ui/navigation-menu.js';
9
- import { useNav } from '../../components/layout/nav.js';
9
+ import { useNav } from '../../contexts/layout.js';
10
10
  import { buttonVariants } from '../../components/ui/button.js';
11
11
  const navItemVariants = cva('inline-flex items-center gap-1 p-2 text-fd-muted-foreground transition-colors hover:text-fd-accent-foreground data-[active=true]:text-fd-primary [&_svg]:size-4');
12
12
  export function Navbar(props) {
@@ -3,7 +3,7 @@ import { Fragment } from 'react';
3
3
  import { replaceOrDefault } from '../layouts/shared.js';
4
4
  import { cn } from '../utils/cn.js';
5
5
  import { getLinks } from './shared.js';
6
- import { NavProvider, Title } from '../components/layout/nav.js';
6
+ import { NavProvider } from '../contexts/layout.js';
7
7
  import { Navbar, NavbarLink, NavbarMenu, NavbarMenuContent, NavbarMenuLink, NavbarMenuTrigger, } from '../layouts/home/navbar.js';
8
8
  import { LargeSearchToggle, SearchToggle, } from '../components/layout/search-toggle.js';
9
9
  import { ThemeToggle } from '../components/layout/theme-toggle.js';
@@ -21,7 +21,7 @@ export function HomeLayout(props) {
21
21
  function Header({ nav: { enableSearch = true, ...nav } = {}, i18n = false, finalLinks, themeSwitch, }) {
22
22
  const navItems = finalLinks.filter((item) => ['nav', 'all'].includes(item.on ?? 'all'));
23
23
  const menuItems = finalLinks.filter((item) => ['menu', 'all'].includes(item.on ?? 'all'));
24
- return (_jsxs(Navbar, { children: [_jsx(Title, { title: nav.title, url: nav.url }), nav.children, _jsx("ul", { className: "flex flex-row items-center gap-2 px-6 max-sm:hidden", children: navItems
24
+ return (_jsxs(Navbar, { children: [_jsx(Link, { href: nav.url ?? '/', className: "inline-flex items-center gap-2.5 font-semibold", children: nav.title }), nav.children, _jsx("ul", { className: "flex flex-row items-center gap-2 px-6 max-sm:hidden", children: navItems
25
25
  .filter((item) => !isSecondary(item))
26
26
  .map((item, i) => (_jsx(NavbarLinkItem, { item: item, className: "text-sm" }, i))) }), _jsxs("div", { className: "flex flex-row items-center justify-end gap-1.5 flex-1", children: [enableSearch ? (_jsxs(_Fragment, { children: [_jsx(SearchToggle, { className: "lg:hidden", hideIfDisabled: true }), _jsx(LargeSearchToggle, { className: "w-full max-w-[240px] max-lg:hidden", hideIfDisabled: true })] })) : null, replaceOrDefault(themeSwitch, _jsx(ThemeToggle, { className: "max-lg:hidden", mode: themeSwitch?.mode })), i18n ? (_jsx(LanguageToggle, { className: "max-lg:hidden", children: _jsx(Languages, { className: "size-5" }) })) : null] }), _jsxs("ul", { className: "flex flex-row items-center", children: [navItems.filter(isSecondary).map((item, i) => (_jsx(NavbarLinkItem, { item: item, className: "-me-1.5 max-lg:hidden" }, i))), _jsxs(Menu, { className: "lg:hidden", children: [_jsx(MenuTrigger, { "aria-label": "Toggle Menu", className: "group -me-2", enableHover: nav.enableHoverToOpen, children: _jsx(ChevronDown, { className: "size-3 transition-transform duration-300 group-data-[state=open]:rotate-180" }) }), _jsxs(MenuContent, { className: "sm:flex-row sm:items-center sm:justify-end", children: [menuItems
27
27
  .filter((item) => !isSecondary(item))
@@ -2,7 +2,7 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { cn } from '../utils/cn.js';
4
4
  import { useSidebar } from '../contexts/sidebar.js';
5
- import { useNav } from '../components/layout/nav.js';
5
+ import { useNav } from '../contexts/layout.js';
6
6
  import { SidebarTrigger } from 'fumadocs-core/sidebar';
7
7
  import { buttonVariants } from '../components/ui/button.js';
8
8
  import { Menu, X } from 'lucide-react';
@@ -2,6 +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
6
  export interface DocsLayoutProps extends BaseLayoutProps {
6
7
  tree: PageTree.Root;
7
8
  tabMode?: 'sidebar' | 'navbar';
@@ -12,4 +13,5 @@ export interface DocsLayoutProps extends BaseLayoutProps {
12
13
  containerProps?: HTMLAttributes<HTMLDivElement>;
13
14
  }
14
15
  export declare function DocsLayout({ tabMode, nav: { transparentMode, ...nav }, sidebar: { collapsible: sidebarCollapsible, tabs: tabOptions, banner: sidebarBanner, footer: sidebarFooter, components: sidebarComponents, ...sidebar }, i18n, themeSwitch, ...props }: DocsLayoutProps): import("react/jsx-runtime").JSX.Element;
16
+ export { Navbar, NavbarSidebarTrigger };
15
17
  //# sourceMappingURL=notebook.d.ts.map
@@ -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;AA4B1B,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAWrD,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,2CAgIjB"}
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,21 +1,20 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Fragment } from 'react';
3
3
  import { getLinks, replaceOrDefault, } from '../layouts/shared.js';
4
- import { CollapsibleSidebar, Sidebar, SidebarCollapseTrigger, SidebarFooter, SidebarHeader, SidebarViewport, SidebarPageTree, } from '../layouts/docs/sidebar.js';
4
+ import { CollapsibleSidebar, Sidebar, SidebarCollapseTrigger, SidebarFooter, SidebarHeader, SidebarViewport, SidebarPageTree, } from '../components/layout/sidebar.js';
5
5
  import { TreeContextProvider } from '../contexts/tree.js';
6
- import { NavProvider, Title } from '../components/layout/nav.js';
7
6
  import { LargeSearchToggle, SearchToggle, } from '../components/layout/search-toggle.js';
8
7
  import { cn } from '../utils/cn.js';
9
8
  import Link from 'next/link';
10
9
  import { buttonVariants } from '../components/ui/button.js';
11
- import { ChevronDown, Languages } from 'lucide-react';
10
+ import { ChevronDown, Languages, SidebarIcon } from 'lucide-react';
12
11
  import { BaseLinkItem } from '../layouts/links.js';
13
12
  import { LanguageToggle } from '../components/layout/language-toggle.js';
14
13
  import { ThemeToggle } from '../components/layout/theme-toggle.js';
15
14
  import { Popover, PopoverContent, PopoverTrigger, } from '../components/ui/popover.js';
16
15
  import { checkPageTree, getSidebarTabsFromOptions, layoutVariables, SidebarLinkItem, } from '../layouts/docs/shared.js';
17
16
  import { LayoutTab, LayoutTabs, Navbar, NavbarSidebarTrigger, SidebarLayoutTab, } from './notebook.client.js';
18
- import { StylesProvider } from '../contexts/layout.js';
17
+ import { StylesProvider, NavProvider, } from '../contexts/layout.js';
19
18
  import { RootToggle } from '../components/layout/root-toggle.js';
20
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 }) {
21
20
  checkPageTree(props.tree);
@@ -39,7 +38,7 @@ export function DocsLayout({ tabMode = 'sidebar', nav: { transparentMode, ...nav
39
38
  }, children: [_jsxs(SidebarHeader, { children: [navMode === 'auto' && (_jsxs("div", { className: "flex flex-row justify-between max-md:hidden", children: [_jsx(Link, { href: nav.url ?? '/', className: "inline-flex items-center gap-2.5 font-medium", children: nav.title }), _jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
40
39
  color: 'ghost',
41
40
  size: 'icon-sm',
42
- }), 'text-fd-muted-foreground mb-auto') })] })), nav.children, sidebarBanner, tabMode === 'sidebar' && tabs.length > 0 ? (_jsx(RootToggle, { options: tabs, className: "-mx-2" })) : null] }), _jsxs(SidebarViewport, { children: [tabMode === 'navbar' &&
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' &&
43
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 })] }) }) }));
44
43
  }
45
44
  function DocsNavbar({ sidebarCollapsible, links, nav = {}, i18n, tabs, }) {
@@ -51,16 +50,14 @@ function DocsNavbar({ sidebarCollapsible, links, nav = {}, i18n, tabs, }) {
51
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({
52
51
  color: 'ghost',
53
52
  size: 'icon-sm',
54
- }), 'text-fd-muted-foreground -ms-1.5 me-2 data-[collapsed=false]:hidden max-md:hidden') })) : null, _jsx(Title, { url: nav.url, title: nav.title, className: cn(
55
- // show on sidebar on above md
56
- navMode === 'auto' && 'md:hidden') })] }), _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
53
+ }), '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
57
54
  .filter((item) => item.type !== 'icon')
58
55
  .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
59
56
  .filter((item) => item.type === 'icon')
60
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({
61
58
  color: 'secondary',
62
59
  size: 'icon-sm',
63
- }), 'ms-2 text-fd-muted-foreground rounded-full max-md:hidden') })) : 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] }));
60
+ }), '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] }));
64
61
  }
65
62
  function NavbarLinkItem({ item, ...props }) {
66
63
  if (item.type === 'menu') {
@@ -74,3 +71,4 @@ function NavbarLinkItem({ item, ...props }) {
74
71
  return item.children;
75
72
  return (_jsx(BaseLinkItem, { item: item, ...props, children: item.text }));
76
73
  }
74
+ export { Navbar, NavbarSidebarTrigger };
@@ -1,11 +1,16 @@
1
1
  import type { ReactNode } from 'react';
2
2
  import type { LinkItemType } from '../layouts/links.js';
3
- import type { NavProviderProps, TitleProps } from '../components/layout/nav.js';
4
- export interface NavOptions extends SharedNavProps {
3
+ import type { NavProviderProps } from '../contexts/layout.js';
4
+ import type { I18nConfig } from 'fumadocs-core/i18n';
5
+ export interface NavOptions extends NavProviderProps {
5
6
  enabled: boolean;
6
7
  component: ReactNode;
7
- }
8
- export interface SharedNavProps extends TitleProps, NavProviderProps {
8
+ title?: ReactNode;
9
+ /**
10
+ * Redirect url of title
11
+ * @defaultValue '/'
12
+ */
13
+ url?: string;
9
14
  /**
10
15
  * Show/hide search toggle
11
16
  *
@@ -27,11 +32,11 @@ export interface BaseLayoutProps {
27
32
  */
28
33
  disableThemeSwitch?: boolean;
29
34
  /**
30
- * Enable Language Switch
35
+ * I18n options
31
36
  *
32
37
  * @defaultValue false
33
38
  */
34
- i18n?: boolean;
39
+ i18n?: boolean | I18nConfig;
35
40
  /**
36
41
  * GitHub url
37
42
  */
@@ -43,6 +48,7 @@ export interface BaseLayoutProps {
43
48
  nav?: Partial<NavOptions>;
44
49
  children?: ReactNode;
45
50
  }
51
+ export { type LinkItemType };
46
52
  /**
47
53
  * Get Links Items with shortcuts
48
54
  */
@@ -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,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAG5E,MAAM,WAAW,UAAW,SAAQ,cAAc;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,cAAe,SAAQ,UAAU,EAAE,gBAAgB;IAClE;;;;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,CAAC;IAEf;;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;;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,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 +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;AAGrD,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;AAuCD,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAEhD,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,kDAsClD"}
@@ -8,9 +8,8 @@ import { useI18n } from './contexts/i18n.js';
8
8
  import { useTreeContext, useTreePath } from './contexts/tree.js';
9
9
  import { useSidebar } from './contexts/sidebar.js';
10
10
  import { usePathname } from 'next/navigation';
11
- import { useNav } from './components/layout/nav.js';
12
11
  import { getBreadcrumbItemsFromPath, } from 'fumadocs-core/breadcrumb';
13
- import { usePageStyles } from './contexts/layout.js';
12
+ import { usePageStyles, useNav } from './contexts/layout.js';
14
13
  import { isActive } from './utils/is-active.js';
15
14
  import { TocPopover } from './components/layout/toc.js';
16
15
  import { useEffectEvent } from 'fumadocs-core/utils/use-effect-event';
@@ -31,9 +31,9 @@ export interface RootProviderProps {
31
31
  */
32
32
  enabled?: boolean;
33
33
  };
34
- children: ReactNode;
34
+ children?: ReactNode;
35
35
  }
36
- export declare function RootProvider({ children, dir, theme: { enabled, ...theme }, search, }: RootProviderProps): React.ReactElement;
36
+ export declare function RootProvider({ children, dir, theme, search, }: RootProviderProps): import("react/jsx-runtime").JSX.Element;
37
37
  export { useI18n, I18nLabel } from './contexts/i18n.js';
38
38
  export { SearchProvider, SearchOnly, useSearchContext, type SearchProviderProps, } from './contexts/search.js';
39
39
  export { SidebarProvider, useSidebar } from './contexts/sidebar.js';
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,wBAAwB,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGtE,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,EAAE,SAAS,CAAC;CACrB;AAOD,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,GAAW,EACX,KAAK,EAAE,EAAE,OAAc,EAAE,GAAG,KAAK,EAAO,EACxC,MAAM,GACP,EAAE,iBAAiB,GAAG,KAAK,CAAC,YAAY,CA4BxC;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,cAAc,EACd,aAAa,EACb,KAAK,UAAU,GAChB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,wBAAwB,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGtE,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;AAOD,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,GAAW,EACX,KAAU,EACV,MAAM,GACP,EAAE,iBAAiB,2CA4BnB;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,cAAc,EACd,aAAa,EACb,KAAK,UAAU,GAChB,MAAM,mBAAmB,CAAC"}
package/dist/provider.js CHANGED
@@ -6,11 +6,11 @@ import { DirectionProvider } from '@radix-ui/react-direction';
6
6
  import { SidebarProvider } from './contexts/sidebar.js';
7
7
  import { SearchProvider } from './contexts/search.js';
8
8
  const DefaultSearchDialog = dynamic(() => import('./components/dialog/search-default.js'), { ssr: false });
9
- export function RootProvider({ children, dir = 'ltr', theme: { enabled = true, ...theme } = {}, search, }) {
9
+ export function RootProvider({ children, dir = 'ltr', theme = {}, search, }) {
10
10
  let body = children;
11
11
  if (search?.enabled !== false)
12
12
  body = (_jsx(SearchProvider, { SearchDialog: DefaultSearchDialog, ...search, children: body }));
13
- if (enabled)
13
+ if (theme?.enabled !== false)
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
  }
package/dist/style.css CHANGED
@@ -1,11 +1,7 @@
1
- /*! tailwindcss v4.0.14 | MIT License | https://tailwindcss.com */
1
+ /*! tailwindcss v4.0.15 | MIT License | https://tailwindcss.com */
2
2
  @layer theme, base, components, utilities;
3
3
  @layer theme {
4
4
  :root, :host {
5
- --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
6
- "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
7
- --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
8
- "Courier New", monospace;
9
5
  --color-red-500: oklch(0.637 0.237 25.331);
10
6
  --color-orange-500: oklch(0.705 0.213 47.604);
11
7
  --color-blue-500: oklch(0.623 0.214 259.815);
@@ -35,18 +31,6 @@
35
31
  --blur-lg: 16px;
36
32
  --default-transition-duration: 150ms;
37
33
  --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
38
- --default-font-family: var(--font-sans);
39
- --default-font-feature-settings: var(--font-sans--font-feature-settings);
40
- --default-font-variation-settings: var(
41
- --font-sans--font-variation-settings
42
- );
43
- --default-mono-font-family: var(--font-mono);
44
- --default-mono-font-feature-settings: var(
45
- --font-mono--font-feature-settings
46
- );
47
- --default-mono-font-variation-settings: var(
48
- --font-mono--font-variation-settings
49
- );
50
34
  --color-fd-background: hsl(0, 0%, 96%);
51
35
  --color-fd-foreground: hsl(0, 0%, 3.9%);
52
36
  --color-fd-muted: hsl(0, 0%, 96.1%);
@@ -102,14 +86,12 @@
102
86
  line-height: 1.5;
103
87
  -webkit-text-size-adjust: 100%;
104
88
  tab-size: 4;
105
- font-family: var( --default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" );
106
- font-feature-settings: var(--default-font-feature-settings, normal);
107
- font-variation-settings: var( --default-font-variation-settings, normal );
89
+ font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
90
+ "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
91
+ font-feature-settings: initial;
92
+ font-variation-settings: initial;
108
93
  -webkit-tap-highlight-color: transparent;
109
94
  }
110
- body {
111
- line-height: inherit;
112
- }
113
95
  hr {
114
96
  height: 0;
115
97
  color: inherit;
@@ -132,9 +114,10 @@
132
114
  font-weight: bolder;
133
115
  }
134
116
  code, kbd, samp, pre {
135
- font-family: var( --default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace );
136
- font-feature-settings: var( --default-mono-font-feature-settings, normal );
137
- font-variation-settings: var( --default-mono-font-variation-settings, normal );
117
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
118
+ "Courier New", monospace;
119
+ font-feature-settings: initial;
120
+ font-variation-settings: initial;
138
121
  font-size: 1em;
139
122
  }
140
123
  small {
@@ -198,7 +181,11 @@
198
181
  }
199
182
  ::placeholder {
200
183
  opacity: 1;
201
- color: color-mix(in oklab, currentColor 50%, transparent);
184
+ }
185
+ @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {
186
+ ::placeholder {
187
+ color: color-mix(in oklab, currentColor 50%, transparent);
188
+ }
202
189
  }
203
190
  textarea {
204
191
  resize: vertical;
@@ -318,6 +305,9 @@
318
305
  .top-2 {
319
306
  top: calc(var(--spacing) * 2);
320
307
  }
308
+ .top-12 {
309
+ top: calc(var(--spacing) * 12);
310
+ }
321
311
  .top-\[10vh\] {
322
312
  top: 10vh;
323
313
  }
@@ -336,6 +326,9 @@
336
326
  .z-10 {
337
327
  z-index: 10;
338
328
  }
329
+ .z-20 {
330
+ z-index: 20;
331
+ }
339
332
  .z-30 {
340
333
  z-index: 30;
341
334
  }
@@ -1017,6 +1010,9 @@
1017
1010
  .transform {
1018
1011
  transform: var(--tw-rotate-x) var(--tw-rotate-y) var(--tw-rotate-z) var(--tw-skew-x) var(--tw-skew-y);
1019
1012
  }
1013
+ .animate-fd-fade-in {
1014
+ animation: var(--animate-fd-fade-in);
1015
+ }
1020
1016
  .animate-spin {
1021
1017
  animation: var(--animate-spin);
1022
1018
  }
@@ -1135,10 +1131,6 @@
1135
1131
  .rounded-xl {
1136
1132
  border-radius: var(--radius-xl);
1137
1133
  }
1138
- .rounded-s-none {
1139
- border-start-start-radius: 0;
1140
- border-end-start-radius: 0;
1141
- }
1142
1134
  .border {
1143
1135
  border-style: var(--tw-border-style);
1144
1136
  border-width: 1px;
@@ -1147,10 +1139,6 @@
1147
1139
  border-inline-start-style: var(--tw-border-style);
1148
1140
  border-inline-start-width: 1px;
1149
1141
  }
1150
- .border-s-0 {
1151
- border-inline-start-style: var(--tw-border-style);
1152
- border-inline-start-width: 0px;
1153
- }
1154
1142
  .border-s-2 {
1155
1143
  border-inline-start-style: var(--tw-border-style);
1156
1144
  border-inline-start-width: 2px;
@@ -1768,6 +1756,11 @@
1768
1756
  background-color: color-mix(in oklab, var(--color-fd-accent) 50%, transparent);
1769
1757
  }
1770
1758
  }
1759
+ .max-xl\:end-4 {
1760
+ @media (width < 80rem) {
1761
+ inset-inline-end: calc(var(--spacing) * 4);
1762
+ }
1763
+ }
1771
1764
  .max-xl\:hidden {
1772
1765
  @media (width < 80rem) {
1773
1766
  display: none;
@@ -2033,6 +2026,16 @@
2033
2026
  --fd-sidebar-width: 286px;
2034
2027
  }
2035
2028
  }
2029
+ .xl\:start-4 {
2030
+ @media (width >= 80rem) {
2031
+ inset-inline-start: calc(var(--spacing) * 4);
2032
+ }
2033
+ }
2034
+ .xl\:top-4 {
2035
+ @media (width >= 80rem) {
2036
+ top: calc(var(--spacing) * 4);
2037
+ }
2038
+ }
2036
2039
  .xl\:mx-auto {
2037
2040
  @media (width >= 80rem) {
2038
2041
  margin-inline: auto;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fumadocs-ui",
3
- "version": "15.1.0",
3
+ "version": "15.1.2",
4
4
  "description": "The framework for building a documentation website in Next.js",
5
5
  "keywords": [
6
6
  "NextJs",
@@ -66,24 +66,24 @@
66
66
  "@radix-ui/react-tabs": "^1.1.3",
67
67
  "class-variance-authority": "^0.7.1",
68
68
  "lodash.merge": "^4.6.2",
69
- "lucide-react": "^0.482.0",
69
+ "lucide-react": "^0.483.0",
70
70
  "next-themes": "^0.4.6",
71
71
  "postcss-selector-parser": "^7.1.0",
72
72
  "react-medium-image-zoom": "^5.2.14",
73
73
  "tailwind-merge": "^3.0.2"
74
74
  },
75
75
  "devDependencies": {
76
- "@next/eslint-plugin-next": "^15.2.2",
77
- "@tailwindcss/cli": "^4.0.14",
76
+ "@next/eslint-plugin-next": "^15.2.3",
77
+ "@tailwindcss/cli": "^4.0.15",
78
78
  "@types/lodash.merge": "^4.6.9",
79
- "@types/react": "^19.0.10",
79
+ "@types/react": "^19.0.12",
80
80
  "@types/react-dom": "^19.0.4",
81
- "next": "15.2.2",
82
- "tailwindcss": "^4.0.14",
81
+ "next": "15.2.3",
82
+ "tailwindcss": "^4.0.15",
83
83
  "tsc-alias": "^1.8.11",
84
- "@fumadocs/cli": "0.0.8",
84
+ "fumadocs-core": "15.1.2",
85
85
  "eslint-config-custom": "0.0.0",
86
- "fumadocs-core": "15.1.0",
86
+ "@fumadocs/cli": "0.0.8",
87
87
  "tsconfig": "0.0.0"
88
88
  },
89
89
  "peerDependencies": {
@@ -91,7 +91,7 @@
91
91
  "react": "18.x.x || 19.x.x",
92
92
  "react-dom": "18.x.x || 19.x.x",
93
93
  "tailwindcss": "^3.4.14 || ^4.0.0",
94
- "fumadocs-core": "15.1.0"
94
+ "fumadocs-core": "15.1.2"
95
95
  },
96
96
  "peerDependenciesMeta": {
97
97
  "tailwindcss": {
@@ -1,28 +0,0 @@
1
- import { type LinkProps } from 'fumadocs-core/link';
2
- import { type ReactNode } from 'react';
3
- export interface NavProviderProps {
4
- /**
5
- * Use transparent background
6
- *
7
- * @defaultValue none
8
- */
9
- transparentMode?: 'always' | 'top' | 'none';
10
- }
11
- export interface TitleProps {
12
- title?: ReactNode;
13
- /**
14
- * Redirect url of title
15
- * @defaultValue '/'
16
- */
17
- url?: string;
18
- }
19
- interface NavContextType {
20
- isTransparent: boolean;
21
- }
22
- export declare function NavProvider({ transparentMode, children, }: NavProviderProps & {
23
- children: ReactNode;
24
- }): import("react/jsx-runtime").JSX.Element;
25
- export declare function useNav(): NavContextType;
26
- export declare function Title({ title, url, ...props }: TitleProps & Omit<LinkProps, 'title'>): import("react/jsx-runtime").JSX.Element;
27
- export {};
28
- //# sourceMappingURL=nav.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nav.d.ts","sourceRoot":"","sources":["../../../src/components/layout/nav.tsx"],"names":[],"mappings":"AACA,OAAa,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAEL,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AAIf,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,eAAe,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;CAC7C;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,cAAc;IACtB,aAAa,EAAE,OAAO,CAAC;CACxB;AAMD,wBAAgB,WAAW,CAAC,EAC1B,eAAwB,EACxB,QAAQ,GACT,EAAE,gBAAgB,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAwB5C;AAED,wBAAgB,MAAM,IAAI,cAAc,CAEvC;AAED,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,2CAevC"}
@@ -1,32 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import Link from 'fumadocs-core/link';
4
- import { createContext, useContext, useEffect, useMemo, useState, } from 'react';
5
- import { cn } from '../../utils/cn.js';
6
- import { useI18n } from '../../contexts/i18n.js';
7
- const NavContext = createContext({
8
- isTransparent: false,
9
- });
10
- export function NavProvider({ transparentMode = 'none', children, }) {
11
- const [transparent, setTransparent] = useState(transparentMode !== 'none');
12
- useEffect(() => {
13
- if (transparentMode !== 'top')
14
- return;
15
- const listener = () => {
16
- setTransparent(window.scrollY < 10);
17
- };
18
- listener();
19
- window.addEventListener('scroll', listener);
20
- return () => {
21
- window.removeEventListener('scroll', listener);
22
- };
23
- }, [transparentMode]);
24
- return (_jsx(NavContext.Provider, { value: useMemo(() => ({ isTransparent: transparent }), [transparent]), children: children }));
25
- }
26
- export function useNav() {
27
- return useContext(NavContext);
28
- }
29
- export function Title({ title, url, ...props }) {
30
- const { locale } = useI18n();
31
- return (_jsx(Link, { href: url ?? (locale ? `/${locale}` : '/'), ...props, className: cn('inline-flex items-center gap-2.5 font-semibold', props.className), children: title }));
32
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/layouts/docs/sidebar.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,oBAAoB,EAGzB,KAAK,cAAc,EAEnB,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AACf,OAAa,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAU1D,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,WAAW,YAAa,SAAQ,cAAc,CAAC,WAAW,CAAC;IAC/D;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA2BD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,2CAqDrD;AAED,wBAAgB,OAAO,CAAC,EACtB,gBAAoB,EACpB,QAAe,EACf,KAAK,EACL,GAAG,KAAK,EACT,EAAE,YAAY,GAAG;IAAE,KAAK,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAA;CAAE,2CAwC3D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,2CASlE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,2CAYlE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,2CAarD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,oBAAoB,CAAC,2CAkB3E;AAED,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,SAAS,GAAG;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,2CAsBA;AAED,wBAAgB,aAAa,CAAC,EAC5B,WAAmB,EACnB,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,2CAgBA;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,uBAAuB,2CAqBlE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,2CAmCjD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,uBAAuB,2CAmBlE;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,2CAiB/C;AAgBD;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACzC,2CAwDA"}