fumadocs-ui 15.0.9 → 15.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/css/preset.css CHANGED
@@ -72,6 +72,12 @@
72
72
  }
73
73
  }
74
74
 
75
+ @property --radix-collapsible-content-height {
76
+ syntax: '<length>';
77
+ inherits: false;
78
+ initial-value: 0px;
79
+ }
80
+
75
81
  @utility container {
76
82
  margin-inline: auto;
77
83
  padding-inline: 1rem;
@@ -1 +1 @@
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,EAIf,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,2CAsB5C;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
+ {"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,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 { createContext, useContext, useEffect, useState, } from 'react';
4
+ import { createContext, useContext, useEffect, useMemo, useState, } from 'react';
5
5
  import { cn } from '../../utils/cn.js';
6
6
  import { useI18n } from '../../contexts/i18n.js';
7
7
  const NavContext = createContext({
@@ -21,7 +21,7 @@ export function NavProvider({ transparentMode = 'none', children, }) {
21
21
  window.removeEventListener('scroll', listener);
22
22
  };
23
23
  }, [transparentMode]);
24
- return (_jsx(NavContext.Provider, { value: { isTransparent: transparent }, children: children }));
24
+ return (_jsx(NavContext.Provider, { value: useMemo(() => ({ isTransparent: transparent }), [transparent]), children: children }));
25
25
  }
26
26
  export function useNav() {
27
27
  return useContext(NavContext);
@@ -22,7 +22,7 @@ export function RootToggle({ options, placeholder, ...props }) {
22
22
  setOpen(false);
23
23
  };
24
24
  const item = selected ? _jsx(Item, { ...selected }) : placeholder;
25
- return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [item ? (_jsxs(PopoverTrigger, { ...props, className: cn('flex flex-row items-center gap-2 rounded-lg ps-2 pe-4 py-1.5 hover:bg-fd-accent/50 hover:text-fd-accent-foreground', props.className), children: [item, _jsx(ChevronsUpDown, { className: "size-4 text-fd-muted-foreground" })] })) : null, _jsx(PopoverContent, { className: "w-(--radix-popover-trigger-width) overflow-hidden p-0", children: options.map((item) => (_jsx(Link, { href: item.url, onClick: onClick, ...item.props, className: cn('flex w-full flex-row items-center gap-2 px-2 py-1.5', selected === item
25
+ return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [item ? (_jsxs(PopoverTrigger, { ...props, className: cn('flex flex-row items-center gap-2.5 rounded-lg ps-2 pe-4 py-1.5 hover:bg-fd-accent/50 hover:text-fd-accent-foreground', props.className), children: [item, _jsx(ChevronsUpDown, { className: "size-4 text-fd-muted-foreground" })] })) : null, _jsx(PopoverContent, { className: "w-(--radix-popover-trigger-width) overflow-hidden p-0", children: options.map((item) => (_jsx(Link, { href: item.url, onClick: onClick, ...item.props, className: cn('flex w-full flex-row items-center gap-2 px-2 py-1.5', selected === item
26
26
  ? 'bg-fd-accent text-fd-accent-foreground'
27
27
  : 'hover:bg-fd-accent/50', item.props?.className), children: _jsx(Item, { ...item }) }, item.url))) })] }));
28
28
  }
@@ -48,7 +48,7 @@ export function TocPopoverTrigger({ items, ...props }) {
48
48
  const current = useMemo(() => {
49
49
  return items.find((item) => active === item.url.slice(1))?.title;
50
50
  }, [items, active]);
51
- return (_jsxs(CollapsibleTrigger, { ...props, className: cn('inline-flex items-center text-sm gap-2 text-nowrap px-4 py-2 text-start md:px-6 md:py-3 focus-visible:outline-none', props.className), children: [_jsx(Text, { className: "size-4 shrink-0" }), text.toc, _jsx(ChevronRight, { className: cn('size-4 shrink-0 text-fd-muted-foreground transition-all', !current && 'opacity-0', open ? 'rotate-90' : '-ms-1.5') }), _jsx("span", { className: cn('truncate text-fd-muted-foreground transition-opacity -ms-1.5', (!current || open) && 'opacity-0'), children: current })] }));
51
+ return (_jsxs(CollapsibleTrigger, { ...props, className: cn('inline-flex items-center text-sm gap-2 text-nowrap px-4 py-2.5 text-start md:px-6 focus-visible:outline-none', props.className), children: [_jsx(Text, { className: "size-4 shrink-0" }), text.toc, _jsx(ChevronRight, { className: cn('size-4 shrink-0 text-fd-muted-foreground transition-all', !current && 'opacity-0', open ? 'rotate-90' : '-ms-1.5') }), _jsx("span", { className: cn('truncate text-fd-muted-foreground transition-opacity -ms-1.5', (!current || open) && 'opacity-0'), children: current })] }));
52
52
  }
53
53
  export function TocPopoverContent(props) {
54
54
  return (_jsx(CollapsibleContent, { "data-toc-popover": "", className: "flex flex-col max-h-[50vh]", ...props, children: props.children }));
@@ -1 +1 @@
1
- {"version":3,"file":"collapsible.d.ts","sourceRoot":"","sources":["../../../src/components/ui/collapsible.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,oBAAoB,MAAM,6BAA6B,CAAC;AAIpE,QAAA,MAAM,WAAW,kIAA4B,CAAC;AAE9C,QAAA,MAAM,kBAAkB,4IAA0C,CAAC;AAEnE,QAAA,MAAM,kBAAkB,sMAgBtB,CAAC;AAKH,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"collapsible.d.ts","sourceRoot":"","sources":["../../../src/components/ui/collapsible.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,oBAAoB,MAAM,6BAA6B,CAAC;AAIpE,QAAA,MAAM,WAAW,kIAA4B,CAAC;AAE9C,QAAA,MAAM,kBAAkB,4IAA0C,CAAC;AAEnE,QAAA,MAAM,kBAAkB,sMAwBtB,CAAC;AAKH,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1,11 +1,17 @@
1
+ 'use client';
1
2
  import { jsx as _jsx } from "react/jsx-runtime";
2
3
  import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
3
- import { forwardRef } from 'react';
4
+ import { forwardRef, useEffect, useState } from 'react';
4
5
  import { cn } from '../../utils/cn.js';
5
6
  const Collapsible = CollapsiblePrimitive.Root;
6
7
  const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger;
7
8
  const CollapsibleContent = forwardRef(({ children, ...props }, ref) => {
8
- return (_jsx(CollapsiblePrimitive.CollapsibleContent, { ref: ref, ...props, className: cn('overflow-hidden [--radix-collapsible-content-height:0px] data-[state=closed]:animate-fd-collapsible-up data-[state=open]:animate-fd-collapsible-down', props.className), children: children }));
9
+ const [mounted, setMounted] = useState(false);
10
+ useEffect(() => {
11
+ setMounted(true);
12
+ }, []);
13
+ return (_jsx(CollapsiblePrimitive.CollapsibleContent, { ref: ref, ...props, className: cn('overflow-hidden', mounted &&
14
+ 'data-[state=closed]:animate-fd-collapsible-up data-[state=open]:animate-fd-collapsible-down', props.className), children: children }));
9
15
  });
10
16
  CollapsibleContent.displayName =
11
17
  CollapsiblePrimitive.CollapsibleContent.displayName;
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAEL,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,2CAkCnB;AAED,OAAO,EAAE,mBAAmB,EAAE,KAAK,YAAY,EAAE,CAAC"}
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"}
package/dist/i18n.js CHANGED
@@ -1,32 +1,34 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useMemo } from 'react';
3
4
  import { useRouter, usePathname } from 'next/navigation';
4
- import { useI18n, I18nContext, defaultTranslations, } from './contexts/i18n.js';
5
+ import { I18nContext, defaultTranslations, } from './contexts/i18n.js';
5
6
  import { useEffectEvent } from 'fumadocs-core/utils/use-effect-event';
6
7
  export function I18nProvider({ locales = [], locale, ...props }) {
7
- const context = useI18n();
8
8
  const router = useRouter();
9
9
  const pathname = usePathname();
10
- const onChange = useEffectEvent((value) => {
11
- const segments = pathname.split('/').filter((v) => v.length > 0);
12
- // If locale prefix hidden
13
- if (segments[0] !== locale) {
14
- segments.unshift(value);
15
- }
16
- else {
17
- segments[0] = value;
18
- }
19
- router.push(`/${segments.join('/')}`);
20
- router.refresh();
21
- });
22
- return (_jsx(I18nContext.Provider, { value: {
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(() => ({
23
25
  locale,
24
26
  locales,
25
27
  text: {
26
- ...context.text,
28
+ ...defaultTranslations,
27
29
  ...props.translations,
28
30
  },
29
- onChange: props.onChange ?? onChange,
30
- }, children: props.children }));
31
+ onChange,
32
+ }), [locale, locales, onChange, props.translations]), children: props.children }));
31
33
  }
32
34
  export { defaultTranslations };
@@ -41,5 +41,5 @@ export declare function SidebarCollapseTrigger(props: ButtonHTMLAttributes<HTMLB
41
41
  */
42
42
  export declare function SidebarPageTree(props: {
43
43
  components?: Partial<SidebarComponents>;
44
- }): ReactNode[];
44
+ }): import("react/jsx-runtime").JSX.Element;
45
45
  //# sourceMappingURL=sidebar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/layouts/docs/sidebar.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,oBAAoB,EAEzB,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,2CAYlE;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,eAuDA"}
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,2CA0DA"}
@@ -3,7 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { ChevronDown, ExternalLink, SidebarIcon } from 'lucide-react';
4
4
  import * as Base from 'fumadocs-core/sidebar';
5
5
  import { usePathname } from 'next/navigation';
6
- import { createContext, useCallback, useContext, useMemo, useRef, useState, } from 'react';
6
+ import { createContext, Fragment, useCallback, 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';
@@ -68,13 +68,13 @@ export function Sidebar({ defaultOpenLevel = 0, prefetch = true, inner, ...props
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 }) }) }));
69
69
  }
70
70
  export function SidebarHeader(props) {
71
- return (_jsx("div", { ...props, className: cn('flex flex-col gap-2 px-4 empty:hidden md:ps-5', props.className), children: props.children }));
71
+ return (_jsx("div", { ...props, className: cn('flex flex-col gap-2 px-4 empty:hidden', props.className), children: props.children }));
72
72
  }
73
73
  export function SidebarFooter(props) {
74
- return (_jsx("div", { ...props, className: cn('flex flex-col border-t px-4 py-3 empty:hidden md:ps-5', props.className), children: props.children }));
74
+ return (_jsx("div", { ...props, className: cn('flex flex-col border-t px-4 py-3 empty:hidden', props.className), children: props.children }));
75
75
  }
76
76
  export function SidebarViewport(props) {
77
- return (_jsx(ScrollArea, { ...props, className: cn('h-full', props.className), children: _jsx(ScrollViewport, { className: "p-4 md:ps-5", style: {
77
+ return (_jsx(ScrollArea, { ...props, className: cn('h-full', props.className), children: _jsx(ScrollViewport, { className: "p-4", style: {
78
78
  maskImage: 'linear-gradient(to bottom, transparent, white 12px)',
79
79
  }, children: props.children }) }));
80
80
  }
@@ -158,29 +158,29 @@ function useInternalContext() {
158
158
  */
159
159
  export function SidebarPageTree(props) {
160
160
  const { root } = useTreeContext();
161
+ const idRef = useRef(0);
161
162
  return useMemo(() => {
162
163
  const { Separator, Item, Folder } = props.components ?? {};
163
164
  function renderSidebarList(items, level) {
164
165
  return items.map((item, i) => {
165
- const id = `${item.type}_${i}`;
166
166
  if (item.type === 'separator') {
167
167
  if (Separator)
168
- return _jsx(Separator, { item: item }, id);
169
- return (_jsxs(SidebarSeparator, { className: cn(i !== 0 && 'mt-8'), children: [item.icon, item.name] }, id));
168
+ return _jsx(Separator, { item: item }, i);
169
+ return (_jsxs(SidebarSeparator, { className: cn(i !== 0 && 'mt-8'), children: [item.icon, item.name] }, i));
170
170
  }
171
171
  if (item.type === 'folder') {
172
172
  const children = renderSidebarList(item.children, level + 1);
173
173
  if (Folder)
174
- return (_jsx(Folder, { item: item, level: level, children: children }, id));
175
- return (_jsx(PageTreeFolder, { item: item, children: children }, id));
174
+ return (_jsx(Folder, { item: item, level: level, children: children }, i));
175
+ return (_jsx(PageTreeFolder, { item: item, children: children }, i));
176
176
  }
177
177
  if (Item)
178
178
  return _jsx(Item, { item: item }, item.url);
179
179
  return (_jsx(SidebarItem, { href: item.url, external: item.external, icon: item.icon, children: item.name }, item.url));
180
180
  });
181
181
  }
182
- return renderSidebarList(root.children, 1);
183
- }, [root, props.components]);
182
+ return (_jsx(Fragment, { children: renderSidebarList(root.children, 1) }, idRef.current++));
183
+ }, [props.components, root.children]);
184
184
  }
185
185
  function PageTreeFolder({ item, ...props }) {
186
186
  const { defaultOpenLevel, level } = useInternalContext();
@@ -8,7 +8,7 @@ export interface DocsLayoutProps extends BaseLayoutProps {
8
8
  sidebar?: Partial<SidebarOptions>;
9
9
  containerProps?: HTMLAttributes<HTMLDivElement>;
10
10
  }
11
- export declare function DocsLayout({ nav: { enabled: navEnabled, component: navReplace, transparentMode, ...nav }, sidebar: { enabled: sidebarEnabled, collapsible, component: sidebarReplace, tabs: tabOptions, banner: sidebarBanner, footer: sidebarFooter, components: sidebarComponents, hideSearch: sidebarHideSearch, ...sidebar }, i18n, ...props }: DocsLayoutProps): ReactNode;
11
+ export declare function DocsLayout({ nav: { enabled: navEnabled, component: navReplace, transparentMode, ...nav }, sidebar: { enabled: sidebarEnabled, collapsible, component: sidebarReplace, tabs: tabOptions, banner: sidebarBanner, footer: sidebarFooter, components: sidebarComponents, hideSearch: sidebarHideSearch, ...sidebar }, i18n, children, ...props }: DocsLayoutProps): ReactNode;
12
12
  export { getSidebarTabsFromOptions, type TabOptions } from './docs/shared.js';
13
13
  export { type LinkItemType };
14
14
  //# 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,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,GAAG,KAAK,EACT,EAAE,eAAe,GAAG,SAAS,CA+G7B;AA6ED,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;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,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;AA2CD,OAAO,EAAE,yBAAyB,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,KAAK,YAAY,EAAE,CAAC"}
@@ -16,7 +16,7 @@ import { ThemeToggle } from '../components/layout/theme-toggle.js';
16
16
  import { LargeSearchToggle, SearchToggle, } from '../components/layout/search-toggle.js';
17
17
  import { checkPageTree, getSidebarTabsFromOptions, layoutVariables, SidebarLinkItem, } from '../layouts/docs/shared.js';
18
18
  import { StylesProvider } from '../contexts/layout.js';
19
- export function DocsLayout({ nav: { enabled: navEnabled = true, component: navReplace, transparentMode, ...nav } = {}, sidebar: { enabled: sidebarEnabled = true, collapsible = true, component: sidebarReplace, tabs: tabOptions, banner: sidebarBanner, footer: sidebarFooter, components: sidebarComponents, hideSearch: sidebarHideSearch, ...sidebar } = {}, i18n = false, ...props }) {
19
+ export function DocsLayout({ nav: { enabled: navEnabled = true, component: navReplace, transparentMode, ...nav } = {}, sidebar: { enabled: sidebarEnabled = true, collapsible = true, component: sidebarReplace, tabs: tabOptions, banner: sidebarBanner, footer: sidebarFooter, components: sidebarComponents, hideSearch: sidebarHideSearch, ...sidebar } = {}, i18n = false, children, ...props }) {
20
20
  checkPageTree(props.tree);
21
21
  const links = getLinks(props.links ?? [], props.githubUrl);
22
22
  const Aside = collapsible ? CollapsibleSidebar : Sidebar;
@@ -34,21 +34,15 @@ export function DocsLayout({ nav: { enabled: navEnabled = true, component: navRe
34
34
  }, children: [collapsible ? (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
35
35
  color: 'secondary',
36
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: [_jsx(SidebarHeaderItems, { ...nav, links: links, sidebarCollapsible: collapsible }), 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 md:hidden", children: links
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({
38
+ color: 'ghost',
39
+ 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 md:hidden", children: links
38
41
  .filter((v) => v.type !== 'icon')
39
42
  .map((item, i) => (_jsx(SidebarLinkItem, { item: item }, i))) }), _jsx(SidebarPageTree, { components: sidebarComponents })] }), _jsxs(SidebarFooter, { children: [_jsx(SidebarFooterItems, { links: links, i18n: i18n, disableThemeSwitch: props.disableThemeSwitch ?? false }), sidebarFooter] })] }), {
40
43
  ...sidebar,
41
44
  tabs,
42
- }), _jsx(StylesProvider, { ...pageStyles, children: props.children })] })] }) }));
43
- }
44
- function SidebarHeaderItems({ links, sidebarCollapsible, ...props }) {
45
- const isEmpty = !props.title && !props.children && links.length === 0;
46
- if (isEmpty)
47
- return null;
48
- return (_jsxs("div", { className: "flex flex-row items-center max-md:hidden", children: [props.title ? (_jsx(Link, { href: props.url ?? '/', className: "inline-flex text-[15px] items-center gap-2.5 py-1 font-medium", children: props.title })) : null, props.children, sidebarCollapsible && (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
49
- color: 'ghost',
50
- size: 'icon-sm',
51
- }), 'ms-auto text-fd-muted-foreground max-md:hidden') }))] }));
45
+ }), _jsx(StylesProvider, { ...pageStyles, children: children })] })] }) }));
52
46
  }
53
47
  function SidebarFooterItems({ i18n, disableThemeSwitch, links, }) {
54
48
  const iconItems = links.filter((v) => v.type === 'icon');
@@ -12,7 +12,7 @@ import { isActive } from '../utils/is-active.js';
12
12
  export function Navbar(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 h-14 pe-(--fd-layout-offset) backdrop-blur-lg transition-colors', (!isTransparent || open) && 'bg-fd-background/80', props.className), style: {
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
16
  paddingInlineStart: collapsed
17
17
  ? 'var(--fd-layout-offset)'
18
18
  : 'calc(var(--fd-layout-offset) + var(--fd-sidebar-width))',
@@ -38,13 +38,13 @@ function useIsSelected(item) {
38
38
  export function LayoutTab(item) {
39
39
  const { closeOnRedirect } = useSidebar();
40
40
  const selected = useIsSelected(item);
41
- return (_jsx(Link, { className: cn('inline-flex items-center py-2.5 border-b-2 border-transparent gap-2 text-fd-muted-foreground text-sm text-nowrap', selected && 'text-fd-foreground font-medium border-fd-primary'), href: item.url, onClick: () => {
41
+ return (_jsx(Link, { className: cn('inline-flex items-center py-2.5 border-b border-transparent gap-2 text-fd-muted-foreground text-sm text-nowrap', selected && 'text-fd-foreground font-medium border-fd-primary'), href: item.url, onClick: () => {
42
42
  closeOnRedirect.current = false;
43
43
  }, children: item.title }));
44
44
  }
45
45
  export function SidebarLayoutTab({ item, ...props }) {
46
46
  const selected = useIsSelected(item);
47
- return (_jsxs(Link, { ...props, className: cn('flex flex-row items-center px-2 py-1.5 gap-2.5 text-fd-muted-foreground [&_svg]:!size-4.5', selected
47
+ return (_jsxs(Link, { ...props, className: cn('flex flex-row items-center px-2 -mx-2 py-1.5 gap-2.5 text-fd-muted-foreground [&_svg]:!size-4.5', selected
48
48
  ? 'text-fd-primary font-medium'
49
49
  : 'hover:text-fd-accent-foreground', props.className), "data-active": selected, href: item.url, children: [item.icon, item.title] }));
50
50
  }
@@ -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,EAAE,KAAK,eAAe,EAAY,MAAM,kBAAkB,CAAC;AA4BlE,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,GAAG,KAAK,EACT,EAAE,eAAe,2CA2GjB"}
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,EAAE,KAAK,eAAe,EAAY,MAAM,kBAAkB,CAAC;AA4BlE,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,GAAG,KAAK,EACT,EAAE,eAAe,2CA4HjB"}
@@ -25,7 +25,7 @@ export function DocsLayout({ tabMode = 'sidebar', nav: { transparentMode, ...nav
25
25
  const tabs = getSidebarTabsFromOptions(tabOptions, props.tree) ?? [];
26
26
  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 &&
27
27
  tabMode === 'navbar' &&
28
- 'lg:[--fd-nav-height:calc(var(--spacing)*26)]');
28
+ 'lg:[--fd-nav-height:calc(var(--spacing)*24)]');
29
29
  const pageStyles = {
30
30
  tocNav: cn('xl:hidden'),
31
31
  toc: cn('max-xl:hidden'),
@@ -34,23 +34,33 @@ export function DocsLayout({ tabMode = 'sidebar', nav: { transparentMode, ...nav
34
34
  return (_jsx(TreeContextProvider, { tree: props.tree, children: _jsx(NavProvider, { transparentMode: transparentMode, children: _jsxs("main", { id: "nd-docs-layout", ...props.containerProps, className: cn('flex w-full flex-1 flex-row pe-(--fd-layout-offset)', variables, props.containerProps?.className), style: {
35
35
  ...layoutVariables,
36
36
  ...props.containerProps?.style,
37
- }, children: [_jsxs(Aside, { ...sidebar, className: cn('md:ps-(--fd-layout-offset)', navMode === 'top' ? 'bg-transparent' : 'md:[--fd-nav-height:0px]', sidebar.className), children: [_jsxs(SidebarHeader, { children: [nav.title && navMode === 'auto' ? (_jsx(Link, { href: nav.url ?? '/', className: "inline-flex items-center gap-2.5 py-1 font-medium max-md:hidden", children: nav.title })) : null, nav.children, sidebarBanner, tabMode === 'sidebar' && tabs.length > 0 ? (_jsx(RootToggle, { options: tabs, className: "-mx-2" })) : null] }), _jsxs(SidebarViewport, { children: [tabMode === 'navbar' &&
37
+ }, children: [_jsxs(Aside, { ...sidebar, className: cn('md:ps-(--fd-layout-offset)', navMode === 'top' ? 'bg-transparent' : 'md:[--fd-nav-height:0px]', sidebar.className), inner: {
38
+ className: cn(navMode === 'top' ? 'md:pt-2.5' : 'md:pt-3.5', tabMode === 'navbar' && 'md:pt-0'),
39
+ }, 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
+ color: 'ghost',
41
+ 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' &&
38
43
  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, !props.disableThemeSwitch ? (_jsx(ThemeToggle, { className: "md:hidden", mode: "light-dark-system" })) : null, sidebarFooter] })] }), _jsx(DocsNavbar, { nav: nav, links: links, i18n: i18n, sidebarCollapsible: sidebarCollapsible, tabs: tabMode == 'navbar' ? tabs : [] }), _jsx(StylesProvider, { ...pageStyles, children: props.children })] }) }) }));
39
44
  }
40
45
  function DocsNavbar({ sidebarCollapsible, links, nav = {}, i18n, tabs, }) {
41
46
  const navMode = nav.mode ?? 'auto';
42
- return (_jsxs(Navbar, { className: cn('flex flex-col h-14', tabs.length > 0 && 'lg:h-26'), style: navMode === 'top'
47
+ return (_jsxs(Navbar, { style: navMode === 'top'
43
48
  ? {
44
49
  paddingInlineStart: 'var(--fd-layout-offset)',
45
50
  }
46
- : undefined, children: [_jsxs("div", { className: "flex flex-row border-b border-fd-foreground/10 px-4 flex-1 md:px-6", children: [_jsxs("div", { className: cn('flex flex-row items-center', navMode === 'top' && 'flex-1'), children: [_jsx(Title, { url: nav.url, title: nav.title, className: cn(navMode === 'auto' ? 'md:hidden' : 'pe-6') }), sidebarCollapsible ? (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
51
+ : 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({
47
52
  color: 'ghost',
48
- size: 'icon',
49
- }), 'text-fd-muted-foreground data-[collapsed=false]:hidden max-md:hidden') })) : null] }), _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
+ 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
50
57
  .filter((item) => item.type !== 'icon')
51
58
  .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
52
59
  .filter((item) => item.type === 'icon')
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, _jsx(ThemeToggle, { className: "ms-2 max-md:hidden", mode: "light-dark-system" })] })] }), tabs.length > 0 ? (_jsx(LayoutTabs, { className: "px-6 border-b border-fd-foreground/10 max-lg:hidden", children: tabs.map((tab) => (_jsx(LayoutTab, { ...tab }, tab.url))) })) : null] }));
60
+ .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
+ color: 'secondary',
62
+ 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] }));
54
64
  }
55
65
  function NavbarLinkItem({ item, ...props }) {
56
66
  if (item.type === 'menu') {
@@ -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;AAWf,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAMlC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,2CAkDrE;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,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,KAAK,CAAC,EAAE;QACN,QAAQ,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC;QACzC,IAAI,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC;KACtC,CAAC;CACH;AAiCD,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,WAAW,2CA8C5C;AAED,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;AAWf,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,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,KAAK,CAAC,EAAE;QACN,QAAQ,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC;QACzC,IAAI,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC;KACtC,CAAC;CACH;AAiCD,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,WAAW,2CA8C5C;AAED,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAEhD,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,kDAsClD"}
@@ -33,9 +33,9 @@ export function TocPopoverHeader(props) {
33
33
  window.removeEventListener('click', onClick);
34
34
  };
35
35
  }, [onClick]);
36
- return (_jsx("div", { className: cn('sticky overflow-visible z-10 h-8', tocNav, props.className), style: {
36
+ return (_jsx("div", { className: cn('sticky overflow-visible z-10', tocNav, props.className), style: {
37
37
  top: 'calc(var(--fd-banner-height) + var(--fd-nav-height))',
38
- }, children: _jsx(TocPopover, { open: open, onOpenChange: setOpen, asChild: true, children: _jsx("header", { ref: ref, id: "nd-tocnav", ...props, className: cn('border-b border-fd-foreground/10 backdrop-blur-md transition-colors', (!isTransparent || open) && 'bg-fd-background/80', open && 'shadow-lg', sidebar.open && 'opacity-0'), children: props.children }) }) }));
38
+ }, children: _jsx(TocPopover, { open: open, onOpenChange: setOpen, asChild: true, children: _jsx("header", { ref: ref, id: "nd-tocnav", ...props, className: cn('border-b border-fd-foreground/10 backdrop-blur-md transition-colors', (!isTransparent || open) && 'bg-fd-background/80', open && 'shadow-lg', sidebar.open && 'max-md:hidden'), children: props.children }) }) }));
39
39
  }
40
40
  export function PageBody(props) {
41
41
  const { page } = usePageStyles();
@@ -54,7 +54,7 @@ export function LastUpdate(props) {
54
54
  }, [props.date]);
55
55
  return (_jsxs("p", { className: "text-sm text-fd-muted-foreground", children: [text.lastUpdate, " ", date] }));
56
56
  }
57
- const itemVariants = cva('flex w-full flex-col gap-2 rounded-lg border bg-fd-card p-4 text-sm transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground');
57
+ const itemVariants = cva('flex w-full flex-col gap-2 rounded-lg border p-4 text-sm transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground');
58
58
  const itemLabel = cva('inline-flex items-center gap-0.5 text-fd-muted-foreground');
59
59
  function scanNavigationList(tree) {
60
60
  const list = [];
@@ -91,7 +91,7 @@ export function Footer({ items }) {
91
91
  next: list[idx + 1],
92
92
  };
93
93
  }, [items, pathname, root]);
94
- return (_jsxs("div", { className: "grid grid-cols-2 gap-4 pb-6", children: [previous ? (_jsxs(Link, { href: previous.url, className: cn(itemVariants()), children: [_jsxs("div", { className: cn(itemLabel()), children: [_jsx(ChevronLeft, { className: "-ms-1 size-4 shrink-0 rtl:rotate-180" }), _jsx("p", { children: text.previousPage })] }), _jsx("p", { className: "font-medium", children: previous.name })] })) : null, next ? (_jsxs(Link, { href: next.url, className: cn(itemVariants({ className: 'col-start-2 text-end' })), children: [_jsxs("div", { className: cn(itemLabel({ className: 'flex-row-reverse' })), children: [_jsx(ChevronRight, { className: "-me-1 size-4 shrink-0 rtl:rotate-180" }), _jsx("p", { children: text.nextPage })] }), _jsx("p", { className: "font-medium", children: next.name })] })) : null] }));
94
+ return (_jsxs("div", { className: "grid grid-cols-2 gap-4 pb-6", children: [previous ? (_jsxs(Link, { href: previous.url, className: cn(itemVariants()), children: [_jsxs("div", { className: cn(itemLabel()), children: [_jsx(ChevronLeft, { className: "-ms-1 size-4 shrink-0 rtl:rotate-180" }), _jsx("p", { children: text.previousPage })] }), _jsx("p", { className: "font-medium md:text-[15px]", children: previous.name })] })) : null, next ? (_jsxs(Link, { href: next.url, className: cn(itemVariants({ className: 'col-start-2 text-end' })), children: [_jsxs("div", { className: cn(itemLabel({ className: 'flex-row-reverse' })), children: [_jsx(ChevronRight, { className: "-me-1 size-4 shrink-0 rtl:rotate-180" }), _jsx("p", { children: text.nextPage })] }), _jsx("p", { className: "font-medium md:text-[15px]", children: next.name })] })) : null] }));
95
95
  }
96
96
  export function Breadcrumb(options) {
97
97
  const path = useTreePath();
package/dist/page.js CHANGED
@@ -22,7 +22,7 @@ export function DocsPage({ toc = [], full = false, tableOfContentPopover: { enab
22
22
  return (_jsxs(AnchorProvider, { toc: toc, single: tocOptions.single, children: [_jsxs(PageBody, { ...props.container, className: cn(props.container?.className), style: {
23
23
  '--fd-tocnav-height': !tocPopoverEnabled ? '0px' : undefined,
24
24
  ...props.container?.style,
25
- }, children: [replaceOrDefault({ enabled: tocPopoverEnabled, component: tocPopoverReplace }, _jsxs(TocPopoverHeader, { children: [_jsx(TocPopoverTrigger, { className: "w-full", items: toc }), _jsxs(TocPopoverContent, { children: [tocPopoverOptions.header, _jsx(TOCScrollArea, { isMenu: true, children: tocPopoverOptions.style === 'clerk' ? (_jsx(ClerkTOCItems, { items: toc })) : (_jsx(TOCItems, { items: toc })) }), tocPopoverOptions.footer] })] }), {
25
+ }, children: [replaceOrDefault({ enabled: tocPopoverEnabled, component: tocPopoverReplace }, _jsxs(TocPopoverHeader, { className: "h-10", children: [_jsx(TocPopoverTrigger, { className: "w-full", items: toc }), _jsxs(TocPopoverContent, { children: [tocPopoverOptions.header, _jsx(TOCScrollArea, { isMenu: true, children: tocPopoverOptions.style === 'clerk' ? (_jsx(ClerkTOCItems, { items: toc })) : (_jsx(TOCItems, { items: toc })) }), tocPopoverOptions.footer] })] }), {
26
26
  items: toc,
27
27
  ...tocPopoverOptions,
28
28
  }), _jsxs(PageArticle, { ...props.article, className: cn(full || !tocEnabled ? 'max-w-[1120px]' : 'max-w-[860px]', props.article?.className), children: [replaceOrDefault(props.breadcrumb, _jsx(Breadcrumb, { ...props.breadcrumb })), props.children, _jsx("div", { role: "none", className: "flex-1" }), _jsxs("div", { className: "flex flex-row flex-wrap items-center justify-between gap-4 empty:hidden", children: [props.editOnGithub ? (_jsx(EditOnGitHub, { ...props.editOnGithub })) : null, props.lastUpdate ? (_jsx(LastUpdate, { date: new Date(props.lastUpdate) })) : null] }), replaceOrDefault(props.footer, _jsx(Footer, { items: props.footer?.items }))] })] }), replaceOrDefault({ enabled: tocEnabled, component: tocReplace }, _jsxs(Toc, { children: [tocOptions.header, _jsxs("h3", { className: "inline-flex items-center gap-1.5 text-sm text-fd-muted-foreground", children: [_jsx(Text, { className: "size-4" }), _jsx(I18nLabel, { label: "toc" })] }), _jsx(TOCScrollArea, { children: tocOptions.style === 'clerk' ? (_jsx(ClerkTOCItems, { items: toc })) : (_jsx(TOCItems, { items: toc })) }), tocOptions.footer] }), {
package/dist/style.css CHANGED
@@ -1,4 +1,4 @@
1
- /*! tailwindcss v4.0.6 | MIT License | https://tailwindcss.com */
1
+ /*! tailwindcss v4.0.7 | MIT License | https://tailwindcss.com */
2
2
  @layer theme, base, components, utilities;
3
3
  @layer theme {
4
4
  :root, :host {
@@ -1117,6 +1117,9 @@
1117
1117
  .mb-8 {
1118
1118
  margin-bottom: calc(var(--spacing) * 8);
1119
1119
  }
1120
+ .mb-auto {
1121
+ margin-bottom: auto;
1122
+ }
1120
1123
  .box-content {
1121
1124
  box-sizing: content-box;
1122
1125
  }
@@ -1181,8 +1184,8 @@
1181
1184
  .h-1\.5 {
1182
1185
  height: calc(var(--spacing) * 1.5);
1183
1186
  }
1184
- .h-8 {
1185
- height: calc(var(--spacing) * 8);
1187
+ .h-10 {
1188
+ height: calc(var(--spacing) * 10);
1186
1189
  }
1187
1190
  .h-14 {
1188
1191
  height: calc(var(--spacing) * 14);
@@ -1455,10 +1458,6 @@
1455
1458
  border-bottom-style: var(--tw-border-style);
1456
1459
  border-bottom-width: 1px;
1457
1460
  }
1458
- .border-b-2 {
1459
- border-bottom-style: var(--tw-border-style);
1460
- border-bottom-width: 2px;
1461
- }
1462
1461
  .border-l {
1463
1462
  border-left-style: var(--tw-border-style);
1464
1463
  border-left-width: 1px;
@@ -1577,9 +1576,6 @@
1577
1576
  .py-0\.5 {
1578
1577
  padding-block: calc(var(--spacing) * 0.5);
1579
1578
  }
1580
- .py-1 {
1581
- padding-block: calc(var(--spacing) * 1);
1582
- }
1583
1579
  .py-1\.5 {
1584
1580
  padding-block: calc(var(--spacing) * 1.5);
1585
1581
  }
@@ -1616,12 +1612,12 @@
1616
1612
  .pe-4 {
1617
1613
  padding-inline-end: calc(var(--spacing) * 4);
1618
1614
  }
1619
- .pe-6 {
1620
- padding-inline-end: calc(var(--spacing) * 6);
1621
- }
1622
1615
  .pt-0 {
1623
1616
  padding-top: calc(var(--spacing) * 0);
1624
1617
  }
1618
+ .pt-1 {
1619
+ padding-top: calc(var(--spacing) * 1);
1620
+ }
1625
1621
  .pt-2 {
1626
1622
  padding-top: calc(var(--spacing) * 2);
1627
1623
  }
@@ -1816,9 +1812,6 @@
1816
1812
  .\[--fd-tocnav-height\:36px\] {
1817
1813
  --fd-tocnav-height: 36px;
1818
1814
  }
1819
- .\[--radix-collapsible-content-height\:0px\] {
1820
- --radix-collapsible-content-height: 0px;
1821
- }
1822
1815
  .select-none {
1823
1816
  -webkit-user-select: none;
1824
1817
  user-select: none;
@@ -2225,19 +2218,24 @@
2225
2218
  padding-block: calc(var(--spacing) * 1.5);
2226
2219
  }
2227
2220
  }
2228
- .md\:py-3 {
2221
+ .md\:ps-\(--fd-layout-offset\) {
2229
2222
  @media (width >= 48rem) {
2230
- padding-block: calc(var(--spacing) * 3);
2223
+ padding-inline-start: var(--fd-layout-offset);
2231
2224
  }
2232
2225
  }
2233
- .md\:ps-\(--fd-layout-offset\) {
2226
+ .md\:pt-0 {
2234
2227
  @media (width >= 48rem) {
2235
- padding-inline-start: var(--fd-layout-offset);
2228
+ padding-top: calc(var(--spacing) * 0);
2229
+ }
2230
+ }
2231
+ .md\:pt-2\.5 {
2232
+ @media (width >= 48rem) {
2233
+ padding-top: calc(var(--spacing) * 2.5);
2236
2234
  }
2237
2235
  }
2238
- .md\:ps-5 {
2236
+ .md\:pt-3\.5 {
2239
2237
  @media (width >= 48rem) {
2240
- padding-inline-start: calc(var(--spacing) * 5);
2238
+ padding-top: calc(var(--spacing) * 3.5);
2241
2239
  }
2242
2240
  }
2243
2241
  .md\:pt-4 {
@@ -2250,6 +2248,11 @@
2250
2248
  padding-top: calc(var(--spacing) * 12);
2251
2249
  }
2252
2250
  }
2251
+ .md\:text-\[15px\] {
2252
+ @media (width >= 48rem) {
2253
+ font-size: 15px;
2254
+ }
2255
+ }
2253
2256
  .md\:opacity-0 {
2254
2257
  @media (width >= 48rem) {
2255
2258
  opacity: 0%;
@@ -2292,11 +2295,6 @@
2292
2295
  height: calc(var(--spacing) * 12);
2293
2296
  }
2294
2297
  }
2295
- .lg\:h-26 {
2296
- @media (width >= 64rem) {
2297
- height: calc(var(--spacing) * 26);
2298
- }
2299
- }
2300
2298
  .lg\:w-\[calc\(100\%-1rem\)\] {
2301
2299
  @media (width >= 64rem) {
2302
2300
  width: calc(100% - 1rem);
@@ -2318,9 +2316,9 @@
2318
2316
  border-width: 1px;
2319
2317
  }
2320
2318
  }
2321
- .lg\:\[--fd-nav-height\:calc\(var\(--spacing\)\*26\)\] {
2319
+ .lg\:\[--fd-nav-height\:calc\(var\(--spacing\)\*24\)\] {
2322
2320
  @media (width >= 64rem) {
2323
- --fd-nav-height: calc(var(--spacing) * 26);
2321
+ --fd-nav-height: calc(var(--spacing) * 24);
2324
2322
  }
2325
2323
  }
2326
2324
  .lg\:\[--fd-sidebar-width\:286px\] {
@@ -2554,6 +2552,11 @@
2554
2552
  margin-bottom: 0;
2555
2553
  }
2556
2554
  }
2555
+ @property --radix-collapsible-content-height {
2556
+ syntax: '<length>';
2557
+ inherits: false;
2558
+ initial-value: 0px;
2559
+ }
2557
2560
  @layer base {
2558
2561
  body {
2559
2562
  display: flex;
@@ -2905,6 +2908,10 @@
2905
2908
  syntax: "*";
2906
2909
  inherits: false;
2907
2910
  }
2911
+ @property --tw-drop-shadow {
2912
+ syntax: "*";
2913
+ inherits: false;
2914
+ }
2908
2915
  @property --tw-backdrop-blur {
2909
2916
  syntax: "*";
2910
2917
  inherits: false;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fumadocs-ui",
3
- "version": "15.0.9",
3
+ "version": "15.0.11",
4
4
  "description": "The framework for building a documentation website in Next.js",
5
5
  "keywords": [
6
6
  "NextJs",
@@ -67,21 +67,21 @@
67
67
  "lucide-react": "^0.475.0",
68
68
  "next-themes": "^0.4.4",
69
69
  "postcss-selector-parser": "^7.1.0",
70
- "react-medium-image-zoom": "^5.2.13",
70
+ "react-medium-image-zoom": "^5.2.14",
71
71
  "tailwind-merge": "^3.0.1"
72
72
  },
73
73
  "devDependencies": {
74
74
  "@next/eslint-plugin-next": "^15.1.7",
75
- "@tailwindcss/cli": "^4.0.6",
75
+ "@tailwindcss/cli": "^4.0.7",
76
76
  "@types/lodash.merge": "^4.6.9",
77
- "@types/react": "^19.0.9",
78
- "@types/react-dom": "^19.0.3",
77
+ "@types/react": "^19.0.10",
78
+ "@types/react-dom": "^19.0.4",
79
79
  "next": "15.1.7",
80
- "tailwindcss": "^4.0.6",
80
+ "tailwindcss": "^4.0.7",
81
81
  "tsc-alias": "^1.8.10",
82
82
  "@fumadocs/cli": "0.0.8",
83
83
  "eslint-config-custom": "0.0.0",
84
- "fumadocs-core": "15.0.9",
84
+ "fumadocs-core": "15.0.11",
85
85
  "tsconfig": "0.0.0"
86
86
  },
87
87
  "peerDependencies": {
@@ -89,7 +89,7 @@
89
89
  "react": "18.x.x || 19.x.x",
90
90
  "react-dom": "18.x.x || 19.x.x",
91
91
  "tailwindcss": "^3.4.14 || ^4.0.0",
92
- "fumadocs-core": "15.0.9"
92
+ "fumadocs-core": "15.0.11"
93
93
  },
94
94
  "peerDependenciesMeta": {
95
95
  "tailwindcss": {