fumadocs-ui 15.0.7 → 15.0.9

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.
@@ -1,6 +1,5 @@
1
1
  import type { TOCItemType } from 'fumadocs-core/server';
2
- export default function ClerkTOCItems({ items, }: {
2
+ export default function ClerkTOCItems({ items }: {
3
3
  items: TOCItemType[];
4
- isMenu?: boolean;
5
4
  }): import("react/jsx-runtime").JSX.Element;
6
5
  //# sourceMappingURL=toc-clerk.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"toc-clerk.d.ts","sourceRoot":"","sources":["../../../src/components/layout/toc-clerk.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAQxD,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,KAAK,GACN,EAAE;IACD,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,2CAgGA"}
1
+ {"version":3,"file":"toc-clerk.d.ts","sourceRoot":"","sources":["../../../src/components/layout/toc-clerk.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAOxD,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,2CA2FxE"}
@@ -1,13 +1,11 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import * as Primitive from 'fumadocs-core/toc';
4
4
  import { useEffect, useRef, useState } from 'react';
5
5
  import { cn } from '../../utils/cn.js';
6
6
  import { TocThumb } from '../../components/layout/toc-thumb.js';
7
- import { ScrollArea, ScrollViewport } from '../ui/scroll-area.js';
8
7
  import { TocItemsEmpty } from '../../components/layout/toc.js';
9
- export default function ClerkTOCItems({ items, }) {
10
- const viewRef = useRef(null);
8
+ export default function ClerkTOCItems({ items }) {
11
9
  const containerRef = useRef(null);
12
10
  const [svg, setSvg] = useState();
13
11
  useEffect(() => {
@@ -47,13 +45,13 @@ export default function ClerkTOCItems({ items, }) {
47
45
  }, [items]);
48
46
  if (items.length === 0)
49
47
  return _jsx(TocItemsEmpty, {});
50
- return (_jsx(ScrollArea, { className: "flex flex-col ps-px", children: _jsxs(ScrollViewport, { className: "relative min-h-0", ref: viewRef, children: [svg ? (_jsx("div", { className: "absolute start-0 top-0 rtl:-scale-x-100", style: {
51
- width: svg.width,
52
- height: svg.height,
53
- maskImage: `url("data:image/svg+xml,${
54
- // Inline SVG
55
- encodeURIComponent(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${svg.width} ${svg.height}"><path d="${svg.path}" stroke="black" stroke-width="1" fill="none" /></svg>`)}")`,
56
- }, children: _jsx(TocThumb, { containerRef: containerRef, className: "mt-(--fd-top) h-(--fd-height) bg-fd-primary transition-all" }) })) : null, _jsx(Primitive.ScrollProvider, { containerRef: viewRef, children: _jsx("div", { className: "flex flex-col", ref: containerRef, children: items.map((item, i) => (_jsx(TOCItem, { item: item, upper: items[i - 1]?.depth, lower: items[i + 1]?.depth }, item.url))) }) })] }) }));
48
+ return (_jsxs(_Fragment, { children: [svg ? (_jsx("div", { className: "absolute start-0 top-0 rtl:-scale-x-100", style: {
49
+ width: svg.width,
50
+ height: svg.height,
51
+ maskImage: `url("data:image/svg+xml,${
52
+ // Inline SVG
53
+ encodeURIComponent(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${svg.width} ${svg.height}"><path d="${svg.path}" stroke="black" stroke-width="1" fill="none" /></svg>`)}")`,
54
+ }, children: _jsx(TocThumb, { containerRef: containerRef, className: "mt-(--fd-top) h-(--fd-height) bg-fd-primary transition-all" }) })) : null, _jsx("div", { className: "flex flex-col", ref: containerRef, children: items.map((item, i) => (_jsx(TOCItem, { item: item, upper: items[i - 1]?.depth, lower: items[i + 1]?.depth }, item.url))) })] }));
57
55
  }
58
56
  function getItemOffset(depth) {
59
57
  if (depth <= 2)
@@ -1,5 +1,6 @@
1
1
  import type { TOCItemType } from 'fumadocs-core/server';
2
2
  import { type ComponentProps, type HTMLAttributes, type ReactNode } from 'react';
3
+ import { ScrollArea } from '../ui/scroll-area.js';
3
4
  import type { PopoverContentProps, PopoverTriggerProps } from '@radix-ui/react-popover';
4
5
  import { Collapsible } from '../../components/ui/collapsible.js';
5
6
  export interface TOCProps {
@@ -15,10 +16,12 @@ export interface TOCProps {
15
16
  }
16
17
  export declare function Toc(props: HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
17
18
  export declare function TocItemsEmpty(): import("react/jsx-runtime").JSX.Element;
18
- export declare function TOCItems({ items, isMenu, }: {
19
- items: TOCItemType[];
19
+ export declare function TOCScrollArea({ isMenu, ...props }: ComponentProps<typeof ScrollArea> & {
20
20
  isMenu?: boolean;
21
21
  }): import("react/jsx-runtime").JSX.Element;
22
+ export declare function TOCItems({ items }: {
23
+ items: TOCItemType[];
24
+ }): import("react/jsx-runtime").JSX.Element;
22
25
  type MakeRequired<T, K extends keyof T> = T & {
23
26
  [P in K]-?: T[P];
24
27
  };
@@ -1 +1 @@
1
- {"version":3,"file":"toc.d.ts","sourceRoot":"","sources":["../../../src/components/layout/toc.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,cAAc,EACnB,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AAKf,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,WAAW,EAGZ,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;OAEG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,2CAyBxD;AAED,wBAAgB,aAAa,4CAQ5B;AAED,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,MAAM,GACP,EAAE;IACD,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,2CAgCA;AAkBD,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG;KAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AAOnE,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,YAAY,EACZ,GAAG,EAAE,IAAI,EACT,GAAG,KAAK,EACT,EAAE,YAAY,CAAC,cAAc,CAAC,OAAO,WAAW,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,2CAgB3E;AAED,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,GAAG,KAAK,EACT,EAAE,mBAAmB,GAAG;IAAE,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,2CAmChD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,2CAU3D"}
1
+ {"version":3,"file":"toc.d.ts","sourceRoot":"","sources":["../../../src/components/layout/toc.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,cAAc,EACnB,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AAIf,OAAO,EAAE,UAAU,EAAkB,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,WAAW,EAGZ,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;OAEG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,2CAyBxD;AAED,wBAAgB,aAAa,4CAQ5B;AAED,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,UAAU,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,2CAqB1D;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,2CAqB3D;AAkBD,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG;KAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AASnE,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,YAAY,EACZ,GAAG,EAAE,IAAI,EACT,GAAG,KAAK,EACT,EAAE,YAAY,CAAC,cAAc,CAAC,OAAO,WAAW,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,2CAgB3E;AAED,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,GAAG,KAAK,EACT,EAAE,mBAAmB,GAAG;IAAE,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,2CAmChD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,2CAU3D"}
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import * as Primitive from 'fumadocs-core/toc';
4
4
  import { createContext, use, useMemo, useRef, } from 'react';
5
5
  import { cn } from '../../utils/cn.js';
@@ -20,19 +20,23 @@ export function TocItemsEmpty() {
20
20
  const { text } = useI18n();
21
21
  return (_jsx("div", { className: "rounded-lg border bg-fd-card p-3 text-xs text-fd-muted-foreground", children: text.tocNoHeadings }));
22
22
  }
23
- export function TOCItems({ items, isMenu, }) {
24
- const containerRef = useRef(null);
23
+ export function TOCScrollArea({ isMenu, ...props }) {
25
24
  const viewRef = useRef(null);
25
+ return (_jsx(ScrollArea, { ...props, className: cn('flex flex-col ps-px', props.className), children: _jsx(Primitive.ScrollProvider, { containerRef: viewRef, children: _jsx(ScrollViewport, { className: cn('relative min-h-0 text-sm', isMenu && 'mt-2 mb-4 mx-4 md:mx-6'), ref: viewRef, children: props.children }) }) }));
26
+ }
27
+ export function TOCItems({ items }) {
28
+ const containerRef = useRef(null);
26
29
  if (items.length === 0)
27
30
  return _jsx(TocItemsEmpty, {});
28
- return (_jsx(ScrollArea, { className: "flex flex-col ps-px", children: _jsx(Primitive.ScrollProvider, { containerRef: viewRef, children: _jsxs(ScrollViewport, { className: cn('relative min-h-0 text-sm', isMenu && 'mt-2 mb-4 mx-4 md:mx-6'), ref: viewRef, children: [_jsx(TocThumb, { containerRef: containerRef, className: "absolute start-0 mt-(--fd-top) h-(--fd-height) w-px bg-fd-primary transition-all" }), _jsx("div", { ref: containerRef, className: "flex flex-col border-s border-fd-foreground/10", children: items.map((item) => (_jsx(TOCItem, { item: item }, item.url))) })] }) }) }));
31
+ return (_jsxs(_Fragment, { children: [_jsx(TocThumb, { containerRef: containerRef, className: "absolute start-0 mt-(--fd-top) h-(--fd-height) w-px bg-fd-primary transition-all" }), _jsx("div", { ref: containerRef, className: "flex flex-col border-s border-fd-foreground/10", children: items.map((item) => (_jsx(TOCItem, { item: item }, item.url))) })] }));
29
32
  }
30
33
  function TOCItem({ item }) {
31
34
  return (_jsx(Primitive.TOCItem, { href: item.url, className: cn('prose py-1.5 text-sm text-fd-muted-foreground transition-colors [overflow-wrap:anywhere] first:pt-0 last:pb-0 data-[active=true]:text-fd-primary', item.depth <= 2 && 'ps-3', item.depth === 3 && 'ps-6', item.depth >= 4 && 'ps-8'), children: item.title }));
32
35
  }
33
36
  const Context = createContext(null);
37
+ const TocProvider = Context.Provider || Context;
34
38
  export function TocPopover({ open, onOpenChange, ref: _ref, ...props }) {
35
- return (_jsx(Collapsible, { open: open, onOpenChange: onOpenChange, ...props, children: _jsx(Context, { value: useMemo(() => ({
39
+ return (_jsx(Collapsible, { open: open, onOpenChange: onOpenChange, ...props, children: _jsx(TocProvider, { value: useMemo(() => ({
36
40
  open,
37
41
  setOpen: onOpenChange,
38
42
  }), [onOpenChange, open]), children: props.children }) }));
@@ -44,7 +48,7 @@ export function TocPopoverTrigger({ items, ...props }) {
44
48
  const current = useMemo(() => {
45
49
  return items.find((item) => active === item.url.slice(1))?.title;
46
50
  }, [items, active]);
47
- 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', 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 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 })] }));
48
52
  }
49
53
  export function TocPopoverContent(props) {
50
54
  return (_jsx(CollapsibleContent, { "data-toc-popover": "", className: "flex flex-col max-h-[50vh]", ...props, children: props.children }));
@@ -1,5 +1,5 @@
1
1
  export declare const buttonVariants: (props?: ({
2
2
  color?: "primary" | "outline" | "ghost" | "secondary" | null | undefined;
3
- size?: "sm" | "icon" | null | undefined;
3
+ size?: "sm" | "icon" | "icon-sm" | null | undefined;
4
4
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5
5
  //# 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;;;8EAkB1B,CAAC"}
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/button.tsx"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc;;;8EAmB1B,CAAC"}
@@ -10,6 +10,7 @@ export const buttonVariants = cva('inline-flex items-center justify-center round
10
10
  size: {
11
11
  sm: 'gap-1 p-0.5 text-xs',
12
12
  icon: 'p-1.5 [&_svg]:size-5',
13
+ 'icon-sm': 'p-1.5 [&_svg]:size-4.5',
13
14
  },
14
15
  },
15
16
  });
@@ -130,7 +130,7 @@ export function SidebarFolderLink(props) {
130
130
  }
131
131
  export function SidebarFolderContent(props) {
132
132
  const ctx = useInternalContext();
133
- return (_jsx(CollapsibleContent, { ...props, className: cn('relative', props.className), children: _jsxs(Context, { value: useMemo(() => ({
133
+ return (_jsx(CollapsibleContent, { ...props, className: cn('relative', props.className), children: _jsxs(Context.Provider, { value: useMemo(() => ({
134
134
  ...ctx,
135
135
  level: ctx.level + 1,
136
136
  }), [ctx]), children: [_jsx("div", { className: "absolute w-px inset-y-0 bg-fd-border start-3" }), props.children] }) }));
@@ -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;AAkBvE,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;AAOvE,wBAAgB,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,2CAiBxD;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,2CAkB/C"}
@@ -1,15 +1,11 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { ChevronDown, Menu, X } from 'lucide-react';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Menu, X } from 'lucide-react';
4
4
  import { cn } from '../utils/cn.js';
5
- import { BaseLinkItem } from '../layouts/links.js';
6
- import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from '../components/ui/collapsible.js';
7
- import { cva } from 'class-variance-authority';
8
5
  import { buttonVariants } from '../components/ui/button.js';
9
6
  import { useSidebar } from '../contexts/sidebar.js';
10
7
  import { useNav } from '../components/layout/nav.js';
11
8
  import { SidebarTrigger } from 'fumadocs-core/sidebar';
12
- const itemVariants = cva('flex flex-row items-center gap-2 rounded-md px-3 py-2.5 text-fd-muted-foreground transition-colors duration-100 [overflow-wrap:anywhere] hover:bg-fd-accent/50 hover:text-fd-accent-foreground/80 hover:transition-none md:px-2 md:py-1.5 [&_svg]:size-4');
13
9
  export function Navbar(props) {
14
10
  const { open } = useSidebar();
15
11
  const { isTransparent } = useNav();
@@ -22,16 +18,3 @@ export function NavbarSidebarTrigger(props) {
22
18
  size: 'icon',
23
19
  }), props.className), children: open ? _jsx(X, {}) : _jsx(Menu, {}) }));
24
20
  }
25
- function MenuItem({ item, ...props }) {
26
- if (item.type === 'custom')
27
- return (_jsx("div", { ...props, className: cn('grid', props.className), children: item.children }));
28
- if (item.type === 'menu') {
29
- return (_jsxs(Collapsible, { className: "flex flex-col", children: [_jsxs(CollapsibleTrigger, { ...props, className: cn(itemVariants(), 'group', props.className), children: [item.icon, item.text, _jsx(ChevronDown, { className: "ms-auto transition-transform group-data-[state=closed]:-rotate-90" })] }), _jsx(CollapsibleContent, { children: _jsx("div", { className: "flex flex-col py-2 ps-2", children: item.items.map((child, i) => (_jsx(MenuItem, { item: child }, i))) }) })] }));
30
- }
31
- return (_jsxs(BaseLinkItem, { item: item, ...props, className: cn(item.type === 'button'
32
- ? buttonVariants({
33
- color: 'secondary',
34
- className: 'gap-1.5 [&_svg]:size-4',
35
- })
36
- : itemVariants(), props.className), children: [item.icon, item.text] }));
37
- }
@@ -22,7 +22,7 @@ export function DocsLayout({ nav: { enabled: navEnabled = true, component: navRe
22
22
  const Aside = collapsible ? CollapsibleSidebar : Sidebar;
23
23
  const tabs = getSidebarTabsFromOptions(tabOptions, props.tree) ?? [];
24
24
  const variables = cn('[--fd-tocnav-height:36px] md:[--fd-sidebar-width:268px] lg:[--fd-sidebar-width:286px] xl:[--fd-toc-width:286px] xl:[--fd-tocnav-height:0px]', !navReplace && navEnabled
25
- ? '[--fd-nav-height:3.5rem] md:[--fd-nav-height:0px]'
25
+ ? '[--fd-nav-height:calc(var(--spacing)*14)] md:[--fd-nav-height:0px]'
26
26
  : undefined);
27
27
  const pageStyles = {
28
28
  tocNav: cn('xl:hidden'),
@@ -47,14 +47,14 @@ function SidebarHeaderItems({ links, sidebarCollapsible, ...props }) {
47
47
  return null;
48
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
49
  color: 'ghost',
50
- size: 'icon',
51
- }), 'ms-auto text-fd-muted-foreground [&_svg]:size-4.5 max-md:hidden') }))] }));
50
+ size: 'icon-sm',
51
+ }), 'ms-auto text-fd-muted-foreground max-md:hidden') }))] }));
52
52
  }
53
53
  function SidebarFooterItems({ i18n, disableThemeSwitch, links, }) {
54
54
  const iconItems = links.filter((v) => v.type === 'icon');
55
55
  // empty footer items
56
56
  if (links.length === 0 && !i18n && disableThemeSwitch)
57
57
  return null;
58
- 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-5" }), _jsx(LanguageToggleText, { className: "md:hidden" })] })) : null, !disableThemeSwitch ? _jsx(ThemeToggle, { className: "p-0" }) : null] }));
58
+ 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, !disableThemeSwitch ? _jsx(ThemeToggle, { className: "p-0" }) : null] }));
59
59
  }
60
60
  export { getSidebarTabsFromOptions } from './docs/shared.js';
@@ -1,4 +1,10 @@
1
- import type { ButtonHTMLAttributes, HTMLAttributes } from 'react';
1
+ import { type ButtonHTMLAttributes, type HTMLAttributes } from 'react';
2
+ import type { Option } from '../components/layout/root-toggle.js';
2
3
  export declare function Navbar(props: HTMLAttributes<HTMLElement>): import("react/jsx-runtime").JSX.Element;
3
4
  export declare function NavbarSidebarTrigger(props: ButtonHTMLAttributes<HTMLButtonElement>): import("react/jsx-runtime").JSX.Element;
5
+ export declare function LayoutTabs(props: HTMLAttributes<HTMLElement>): import("react/jsx-runtime").JSX.Element;
6
+ export declare function LayoutTab(item: Option): import("react/jsx-runtime").JSX.Element;
7
+ export declare function SidebarLayoutTab({ item, ...props }: {
8
+ item: Option;
9
+ } & HTMLAttributes<HTMLElement>): import("react/jsx-runtime").JSX.Element;
4
10
  //# sourceMappingURL=notebook.client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"notebook.client.d.ts","sourceRoot":"","sources":["../../src/layouts/notebook.client.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAOlE,wBAAgB,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,2CA0BxD;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,2CAkB/C"}
1
+ {"version":3,"file":"notebook.client.d.ts","sourceRoot":"","sources":["../../src/layouts/notebook.client.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AASvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAE9D,wBAAgB,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,2CAyBxD;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,2CAkB/C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,2CAY5D;AAUD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,2CAkBrC;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,GAAG,KAAK,EACT,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CAAC,WAAW,CAAC,2CAoBhD"}
@@ -1,19 +1,23 @@
1
1
  'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
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
5
  import { useNav } from '../components/layout/nav.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';
9
+ import Link from 'fumadocs-core/link';
10
+ import { usePathname } from 'next/navigation';
11
+ import { isActive } from '../utils/is-active.js';
9
12
  export function Navbar(props) {
10
13
  const { open, collapsed } = useSidebar();
11
14
  const { isTransparent } = useNav();
12
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: {
13
16
  paddingInlineStart: collapsed
14
- ? 'calc(var(--fd-layout-offset))'
17
+ ? 'var(--fd-layout-offset)'
15
18
  : 'calc(var(--fd-layout-offset) + var(--fd-sidebar-width))',
16
- }, children: _jsx("div", { className: "mx-auto flex size-full flex-row items-center border-b border-fd-foreground/10 px-4 md:gap-1.5", children: props.children }) }));
19
+ ...props.style,
20
+ }, children: props.children }));
17
21
  }
18
22
  export function NavbarSidebarTrigger(props) {
19
23
  const { open } = useSidebar();
@@ -22,3 +26,25 @@ export function NavbarSidebarTrigger(props) {
22
26
  size: 'icon',
23
27
  }), props.className), children: open ? _jsx(X, {}) : _jsx(Menu, {}) }));
24
28
  }
29
+ export function LayoutTabs(props) {
30
+ return (_jsx("div", { ...props, className: cn('flex flex-row items-end gap-6 overflow-auto', props.className), children: props.children }));
31
+ }
32
+ function useIsSelected(item) {
33
+ const pathname = usePathname();
34
+ return item.urls
35
+ ? item.urls.has(pathname.endsWith('/') ? pathname.slice(0, -1) : pathname)
36
+ : isActive(item.url, pathname, true);
37
+ }
38
+ export function LayoutTab(item) {
39
+ const { closeOnRedirect } = useSidebar();
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: () => {
42
+ closeOnRedirect.current = false;
43
+ }, children: item.title }));
44
+ }
45
+ export function SidebarLayoutTab({ item, ...props }) {
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
48
+ ? 'text-fd-primary font-medium'
49
+ : 'hover:text-fd-accent-foreground', props.className), "data-active": selected, href: item.url, children: [item.icon, item.title] }));
50
+ }
@@ -1,11 +1,15 @@
1
- import { type HTMLAttributes, type ReactNode } from 'react';
1
+ 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
5
  export interface DocsLayoutProps extends BaseLayoutProps {
6
6
  tree: PageTree.Root;
7
+ tabMode?: 'sidebar' | 'navbar';
8
+ nav?: BaseLayoutProps['nav'] & {
9
+ mode?: 'top' | 'auto';
10
+ };
7
11
  sidebar?: Omit<Partial<SidebarOptions>, 'component' | 'enabled'>;
8
12
  containerProps?: HTMLAttributes<HTMLDivElement>;
9
13
  }
10
- export declare function DocsLayout({ nav: { transparentMode, ...nav }, sidebar: { collapsible: sidebarCollapsible, tabs: tabOptions, banner: sidebarBanner, footer: sidebarFooter, components: sidebarComponents, ...sidebar }, i18n, ...props }: DocsLayoutProps): ReactNode;
14
+ export declare function DocsLayout({ tabMode, nav: { transparentMode, ...nav }, sidebar: { collapsible: sidebarCollapsible, tabs: tabOptions, banner: sidebarBanner, footer: sidebarFooter, components: sidebarComponents, ...sidebar }, i18n, ...props }: DocsLayoutProps): import("react/jsx-runtime").JSX.Element;
11
15
  //# 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,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACtE,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,kBAAkB,CAAC;AA6B1B,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIrD,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IAEpB,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,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,GAAG,SAAS,CAwF7B"}
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,8 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Fragment } from 'react';
3
- import { getLinks, } from '../layouts/shared.js';
3
+ import { getLinks } from '../layouts/shared.js';
4
4
  import { CollapsibleSidebar, Sidebar, SidebarCollapseTrigger, SidebarFooter, SidebarHeader, SidebarViewport, SidebarPageTree, } from '../layouts/docs/sidebar.js';
5
- import { RootToggle } from '../components/layout/root-toggle.js';
6
5
  import { TreeContextProvider } from '../contexts/tree.js';
7
6
  import { NavProvider, Title } from '../components/layout/nav.js';
8
7
  import { LargeSearchToggle, SearchToggle, } from '../components/layout/search-toggle.js';
@@ -15,14 +14,18 @@ import { LanguageToggle } from '../components/layout/language-toggle.js';
15
14
  import { ThemeToggle } from '../components/layout/theme-toggle.js';
16
15
  import { Popover, PopoverContent, PopoverTrigger, } from '../components/ui/popover.js';
17
16
  import { checkPageTree, getSidebarTabsFromOptions, layoutVariables, SidebarLinkItem, } from '../layouts/docs/shared.js';
18
- import { Navbar, NavbarSidebarTrigger } from './notebook.client.js';
17
+ import { LayoutTab, LayoutTabs, Navbar, NavbarSidebarTrigger, SidebarLayoutTab, } from './notebook.client.js';
19
18
  import { StylesProvider } from '../contexts/layout.js';
20
- export function DocsLayout({ nav: { transparentMode, ...nav } = {}, sidebar: { collapsible: sidebarCollapsible = true, tabs: tabOptions, banner: sidebarBanner, footer: sidebarFooter, components: sidebarComponents, ...sidebar } = {}, i18n = false, ...props }) {
19
+ import { RootToggle } from '../components/layout/root-toggle.js';
20
+ export function DocsLayout({ tabMode = 'sidebar', nav: { transparentMode, ...nav } = {}, sidebar: { collapsible: sidebarCollapsible = true, tabs: tabOptions, banner: sidebarBanner, footer: sidebarFooter, components: sidebarComponents, ...sidebar } = {}, i18n = false, ...props }) {
21
21
  checkPageTree(props.tree);
22
+ const navMode = nav.mode ?? 'auto';
22
23
  const links = getLinks(props.links ?? [], props.githubUrl);
23
24
  const Aside = sidebarCollapsible ? CollapsibleSidebar : Sidebar;
24
25
  const tabs = getSidebarTabsFromOptions(tabOptions, props.tree) ?? [];
25
- const variables = cn('[--fd-nav-height:3.5rem] [--fd-tocnav-height:36px] md:[--fd-sidebar-width:268px] xl:[--fd-toc-width:268px] xl:[--fd-tocnav-height:0px]');
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
+ tabMode === 'navbar' &&
28
+ 'lg:[--fd-nav-height:calc(var(--spacing)*26)]');
26
29
  const pageStyles = {
27
30
  tocNav: cn('xl:hidden'),
28
31
  toc: cn('max-xl:hidden'),
@@ -31,20 +34,23 @@ export function DocsLayout({ nav: { transparentMode, ...nav } = {}, sidebar: { c
31
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: {
32
35
  ...layoutVariables,
33
36
  ...props.containerProps?.style,
34
- }, children: [_jsxs(Aside, { ...sidebar, className: cn('md:ps-(--fd-layout-offset) md:[--fd-nav-height:0px]', sidebar.className), children: [_jsxs(SidebarHeader, { children: [_jsxs(SidebarHeaderItems, { nav: nav, links: links, children: [nav.children, sidebarCollapsible ? (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
35
- color: 'ghost',
36
- size: 'icon',
37
- }), 'ms-auto text-fd-muted-foreground') })) : null] }), sidebarBanner, tabs.length > 0 ? (_jsx(RootToggle, { options: tabs, className: "-mx-2" })) : null] }), _jsxs(SidebarViewport, { children: [_jsx("div", { className: "mb-4 empty:hidden lg:hidden", children: links.map((item, i) => (_jsx(SidebarLinkItem, { item: item }, i))) }), _jsx(SidebarPageTree, { components: sidebarComponents })] }), _jsxs(SidebarFooter, { className: cn(!sidebarFooter && 'md:hidden'), children: [!props.disableThemeSwitch ? (_jsx(ThemeToggle, { className: "w-fit md:hidden", mode: "light-dark-system" })) : null, sidebarFooter] })] }), _jsx(DocsNavbar, { nav: nav, links: links, i18n: i18n, sidebarCollapsible: sidebarCollapsible }), _jsx(StylesProvider, { ...pageStyles, children: props.children })] }) }) }));
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' &&
38
+ 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 })] }) }) }));
38
39
  }
39
- function DocsNavbar({ sidebarCollapsible, links, nav = {}, i18n, }) {
40
- return (_jsxs(Navbar, { children: [sidebarCollapsible ? (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
41
- color: 'ghost',
42
- size: 'icon',
43
- }), '-ms-1.5 text-fd-muted-foreground data-[collapsed=false]:hidden max-md:hidden') })) : null, _jsx(LargeSearchToggle, { hideIfDisabled: true, className: "w-full max-w-[240px] rounded-lg max-md:hidden" }), _jsx(Title, { url: nav.url, title: nav.title, className: "md:hidden" }), _jsxs("div", { className: "flex flex-1 flex-row items-center gap-6 px-2", children: [links
44
- .filter((item) => item.type !== 'icon')
45
- .map((item, i) => (_jsx(NavbarLinkItem, { item: item, className: "text-sm text-fd-muted-foreground transition-colors hover:text-fd-accent-foreground max-lg:hidden" }, i))), nav.children] }), _jsx(SearchToggle, { hideIfDisabled: true, className: "md:hidden" }), _jsx(NavbarSidebarTrigger, { className: "-me-1.5 md:hidden" }), _jsx("div", { className: "flex flex-row items-center empty:hidden max-lg:hidden", children: links
46
- .filter((item) => item.type === 'icon')
47
- .map((item, i) => (_jsx(BaseLinkItem, { item: item, className: cn(buttonVariants({ size: 'icon', color: 'ghost' }), 'text-fd-muted-foreground'), "aria-label": item.label, children: item.icon }, i))) }), i18n ? (_jsx(LanguageToggle, { children: _jsx(Languages, { className: "size-5" }) })) : null, _jsx(ThemeToggle, { className: "max-md:hidden", mode: "light-dark-system" })] }));
40
+ function DocsNavbar({ sidebarCollapsible, links, nav = {}, i18n, tabs, }) {
41
+ 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'
43
+ ? {
44
+ paddingInlineStart: 'var(--fd-layout-offset)',
45
+ }
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({
47
+ 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
50
+ .filter((item) => item.type !== 'icon')
51
+ .map((item, i) => (_jsx(NavbarLinkItem, { item: item, className: "text-sm text-fd-muted-foreground transition-colors hover:text-fd-accent-foreground" }, i))) }), nav.children, _jsx(SearchToggle, { hideIfDisabled: true, className: "md:hidden" }), _jsx(NavbarSidebarTrigger, { className: "md:hidden" }), links
52
+ .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] }));
48
54
  }
49
55
  function NavbarLinkItem({ item, ...props }) {
50
56
  if (item.type === 'menu') {
@@ -58,9 +64,3 @@ function NavbarLinkItem({ item, ...props }) {
58
64
  return item.children;
59
65
  return (_jsx(BaseLinkItem, { item: item, ...props, children: item.text }));
60
66
  }
61
- function SidebarHeaderItems({ links, nav = {}, children, }) {
62
- const isEmpty = !nav.title && !nav.children && links.length === 0;
63
- if (isEmpty)
64
- return null;
65
- return (_jsxs("div", { className: "flex flex-row items-center max-md:hidden", children: [nav.title ? (_jsx(Link, { href: nav.url ?? '/', className: "inline-flex items-center gap-2.5 py-1 font-medium", children: nav.title })) : null, children] }));
66
- }
@@ -104,7 +104,7 @@ export function Breadcrumb(options) {
104
104
  }, [options, path, root]);
105
105
  if (items.length === 0)
106
106
  return null;
107
- return (_jsx("div", { className: "flex flex-row items-center gap-1.5 text-[15px] text-fd-muted-foreground -mb-1.5", children: items.map((item, i) => {
107
+ return (_jsx("div", { className: "flex flex-row items-center gap-1.5 text-[15px] text-fd-muted-foreground", children: items.map((item, i) => {
108
108
  const className = cn('truncate', i === items.length - 1 && 'text-fd-primary font-medium');
109
109
  return (_jsxs(Fragment, { children: [i !== 0 && _jsx("span", { className: "text-fd-foreground/30", children: "/" }), item.url ? (_jsx(Link, { href: item.url, className: cn(className, 'transition-opacity hover:opacity-80'), children: item.name })) : (_jsx("span", { className: className, children: item.name }))] }, i));
110
110
  }) }));
@@ -1 +1 @@
1
- {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../src/page.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../src/page.tsx"],"names":[],"mappings":"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"}
package/dist/page.js CHANGED
@@ -5,7 +5,7 @@ import { Card, Cards } from './components/card.js';
5
5
  import { replaceOrDefault } from './layouts/shared.js';
6
6
  import { cn } from './utils/cn.js';
7
7
  import { Footer, LastUpdate, TocPopoverHeader, Breadcrumb, PageBody, PageArticle, } from './page.client.js';
8
- import { Toc, TOCItems, TocPopoverTrigger, TocPopoverContent, } from './components/layout/toc.js';
8
+ import { Toc, TOCItems, TocPopoverTrigger, TocPopoverContent, TOCScrollArea, } from './components/layout/toc.js';
9
9
  import { buttonVariants } from './components/ui/button.js';
10
10
  import { Edit, Text } from 'lucide-react';
11
11
  import { I18nLabel } from './contexts/i18n.js';
@@ -22,10 +22,10 @@ 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, tocPopoverOptions.style === 'clerk' ? (_jsx(ClerkTOCItems, { items: toc, isMenu: true })) : (_jsx(TOCItems, { items: toc, isMenu: true })), tocPopoverOptions.footer] })] }), {
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] })] }), {
26
26
  items: toc,
27
27
  ...tocPopoverOptions,
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" })] }), tocOptions.style === 'clerk' ? (_jsx(ClerkTOCItems, { items: toc })) : (_jsx(TOCItems, { items: toc })), tocOptions.footer] }), {
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] }), {
29
29
  items: toc,
30
30
  ...tocOptions,
31
31
  })] }));
package/dist/style.css CHANGED
@@ -1,17 +1,275 @@
1
- /*! tailwindcss v4.0.5 | MIT License | https://tailwindcss.com */
1
+ /*! tailwindcss v4.0.6 | MIT License | https://tailwindcss.com */
2
2
  @layer theme, base, components, utilities;
3
3
  @layer theme {
4
4
  :root, :host {
5
5
  --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
6
6
  "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
7
- --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
8
- "Liberation Mono", "Courier New", monospace;
7
+ --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;
8
+ --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
9
+ "Courier New", monospace;
10
+ --color-red-50: oklch(0.971 0.013 17.38);
11
+ --color-red-100: oklch(0.936 0.032 17.717);
12
+ --color-red-200: oklch(0.885 0.062 18.334);
13
+ --color-red-300: oklch(0.808 0.114 19.571);
14
+ --color-red-400: oklch(0.704 0.191 22.216);
9
15
  --color-red-500: oklch(0.637 0.237 25.331);
16
+ --color-red-600: oklch(0.577 0.245 27.325);
17
+ --color-red-700: oklch(0.505 0.213 27.518);
18
+ --color-red-800: oklch(0.444 0.177 26.899);
19
+ --color-red-900: oklch(0.396 0.141 25.723);
20
+ --color-red-950: oklch(0.258 0.092 26.042);
21
+ --color-orange-50: oklch(0.98 0.016 73.684);
22
+ --color-orange-100: oklch(0.954 0.038 75.164);
23
+ --color-orange-200: oklch(0.901 0.076 70.697);
24
+ --color-orange-300: oklch(0.837 0.128 66.29);
25
+ --color-orange-400: oklch(0.75 0.183 55.934);
10
26
  --color-orange-500: oklch(0.705 0.213 47.604);
27
+ --color-orange-600: oklch(0.646 0.222 41.116);
28
+ --color-orange-700: oklch(0.553 0.195 38.402);
29
+ --color-orange-800: oklch(0.47 0.157 37.304);
30
+ --color-orange-900: oklch(0.408 0.123 38.172);
31
+ --color-orange-950: oklch(0.266 0.079 36.259);
32
+ --color-amber-50: oklch(0.987 0.022 95.277);
33
+ --color-amber-100: oklch(0.962 0.059 95.617);
34
+ --color-amber-200: oklch(0.924 0.12 95.746);
35
+ --color-amber-300: oklch(0.879 0.169 91.605);
36
+ --color-amber-400: oklch(0.828 0.189 84.429);
37
+ --color-amber-500: oklch(0.769 0.188 70.08);
38
+ --color-amber-600: oklch(0.666 0.179 58.318);
39
+ --color-amber-700: oklch(0.555 0.163 48.998);
40
+ --color-amber-800: oklch(0.473 0.137 46.201);
41
+ --color-amber-900: oklch(0.414 0.112 45.904);
42
+ --color-amber-950: oklch(0.279 0.077 45.635);
43
+ --color-yellow-50: oklch(0.987 0.026 102.212);
44
+ --color-yellow-100: oklch(0.973 0.071 103.193);
45
+ --color-yellow-200: oklch(0.945 0.129 101.54);
46
+ --color-yellow-300: oklch(0.905 0.182 98.111);
47
+ --color-yellow-400: oklch(0.852 0.199 91.936);
48
+ --color-yellow-500: oklch(0.795 0.184 86.047);
49
+ --color-yellow-600: oklch(0.681 0.162 75.834);
50
+ --color-yellow-700: oklch(0.554 0.135 66.442);
51
+ --color-yellow-800: oklch(0.476 0.114 61.907);
52
+ --color-yellow-900: oklch(0.421 0.095 57.708);
53
+ --color-yellow-950: oklch(0.286 0.066 53.813);
54
+ --color-lime-50: oklch(0.986 0.031 120.757);
55
+ --color-lime-100: oklch(0.967 0.067 122.328);
56
+ --color-lime-200: oklch(0.938 0.127 124.321);
57
+ --color-lime-300: oklch(0.897 0.196 126.665);
58
+ --color-lime-400: oklch(0.841 0.238 128.85);
59
+ --color-lime-500: oklch(0.768 0.233 130.85);
60
+ --color-lime-600: oklch(0.648 0.2 131.684);
61
+ --color-lime-700: oklch(0.532 0.157 131.589);
62
+ --color-lime-800: oklch(0.453 0.124 130.933);
63
+ --color-lime-900: oklch(0.405 0.101 131.063);
64
+ --color-lime-950: oklch(0.274 0.072 132.109);
65
+ --color-green-50: oklch(0.982 0.018 155.826);
66
+ --color-green-100: oklch(0.962 0.044 156.743);
67
+ --color-green-200: oklch(0.925 0.084 155.995);
68
+ --color-green-300: oklch(0.871 0.15 154.449);
69
+ --color-green-400: oklch(0.792 0.209 151.711);
70
+ --color-green-500: oklch(0.723 0.219 149.579);
71
+ --color-green-600: oklch(0.627 0.194 149.214);
72
+ --color-green-700: oklch(0.527 0.154 150.069);
73
+ --color-green-800: oklch(0.448 0.119 151.328);
74
+ --color-green-900: oklch(0.393 0.095 152.535);
75
+ --color-green-950: oklch(0.266 0.065 152.934);
76
+ --color-emerald-50: oklch(0.979 0.021 166.113);
77
+ --color-emerald-100: oklch(0.95 0.052 163.051);
78
+ --color-emerald-200: oklch(0.905 0.093 164.15);
79
+ --color-emerald-300: oklch(0.845 0.143 164.978);
80
+ --color-emerald-400: oklch(0.765 0.177 163.223);
81
+ --color-emerald-500: oklch(0.696 0.17 162.48);
82
+ --color-emerald-600: oklch(0.596 0.145 163.225);
83
+ --color-emerald-700: oklch(0.508 0.118 165.612);
84
+ --color-emerald-800: oklch(0.432 0.095 166.913);
85
+ --color-emerald-900: oklch(0.378 0.077 168.94);
86
+ --color-emerald-950: oklch(0.262 0.051 172.552);
87
+ --color-teal-50: oklch(0.984 0.014 180.72);
88
+ --color-teal-100: oklch(0.953 0.051 180.801);
89
+ --color-teal-200: oklch(0.91 0.096 180.426);
90
+ --color-teal-300: oklch(0.855 0.138 181.071);
91
+ --color-teal-400: oklch(0.777 0.152 181.912);
92
+ --color-teal-500: oklch(0.704 0.14 182.503);
93
+ --color-teal-600: oklch(0.6 0.118 184.704);
94
+ --color-teal-700: oklch(0.511 0.096 186.391);
95
+ --color-teal-800: oklch(0.437 0.078 188.216);
96
+ --color-teal-900: oklch(0.386 0.063 188.416);
97
+ --color-teal-950: oklch(0.277 0.046 192.524);
98
+ --color-cyan-50: oklch(0.984 0.019 200.873);
99
+ --color-cyan-100: oklch(0.956 0.045 203.388);
100
+ --color-cyan-200: oklch(0.917 0.08 205.041);
101
+ --color-cyan-300: oklch(0.865 0.127 207.078);
102
+ --color-cyan-400: oklch(0.789 0.154 211.53);
103
+ --color-cyan-500: oklch(0.715 0.143 215.221);
104
+ --color-cyan-600: oklch(0.609 0.126 221.723);
105
+ --color-cyan-700: oklch(0.52 0.105 223.128);
106
+ --color-cyan-800: oklch(0.45 0.085 224.283);
107
+ --color-cyan-900: oklch(0.398 0.07 227.392);
108
+ --color-cyan-950: oklch(0.302 0.056 229.695);
109
+ --color-sky-50: oklch(0.977 0.013 236.62);
110
+ --color-sky-100: oklch(0.951 0.026 236.824);
111
+ --color-sky-200: oklch(0.901 0.058 230.902);
112
+ --color-sky-300: oklch(0.828 0.111 230.318);
113
+ --color-sky-400: oklch(0.746 0.16 232.661);
114
+ --color-sky-500: oklch(0.685 0.169 237.323);
115
+ --color-sky-600: oklch(0.588 0.158 241.966);
116
+ --color-sky-700: oklch(0.5 0.134 242.749);
117
+ --color-sky-800: oklch(0.443 0.11 240.79);
118
+ --color-sky-900: oklch(0.391 0.09 240.876);
119
+ --color-sky-950: oklch(0.293 0.066 243.157);
120
+ --color-blue-50: oklch(0.97 0.014 254.604);
121
+ --color-blue-100: oklch(0.932 0.032 255.585);
122
+ --color-blue-200: oklch(0.882 0.059 254.128);
123
+ --color-blue-300: oklch(0.809 0.105 251.813);
124
+ --color-blue-400: oklch(0.707 0.165 254.624);
11
125
  --color-blue-500: oklch(0.623 0.214 259.815);
126
+ --color-blue-600: oklch(0.546 0.245 262.881);
127
+ --color-blue-700: oklch(0.488 0.243 264.376);
128
+ --color-blue-800: oklch(0.424 0.199 265.638);
129
+ --color-blue-900: oklch(0.379 0.146 265.522);
130
+ --color-blue-950: oklch(0.282 0.091 267.935);
131
+ --color-indigo-50: oklch(0.962 0.018 272.314);
132
+ --color-indigo-100: oklch(0.93 0.034 272.788);
133
+ --color-indigo-200: oklch(0.87 0.065 274.039);
134
+ --color-indigo-300: oklch(0.785 0.115 274.713);
135
+ --color-indigo-400: oklch(0.673 0.182 276.935);
136
+ --color-indigo-500: oklch(0.585 0.233 277.117);
137
+ --color-indigo-600: oklch(0.511 0.262 276.966);
138
+ --color-indigo-700: oklch(0.457 0.24 277.023);
139
+ --color-indigo-800: oklch(0.398 0.195 277.366);
140
+ --color-indigo-900: oklch(0.359 0.144 278.697);
141
+ --color-indigo-950: oklch(0.257 0.09 281.288);
142
+ --color-violet-50: oklch(0.969 0.016 293.756);
143
+ --color-violet-100: oklch(0.943 0.029 294.588);
144
+ --color-violet-200: oklch(0.894 0.057 293.283);
145
+ --color-violet-300: oklch(0.811 0.111 293.571);
146
+ --color-violet-400: oklch(0.702 0.183 293.541);
147
+ --color-violet-500: oklch(0.606 0.25 292.717);
148
+ --color-violet-600: oklch(0.541 0.281 293.009);
149
+ --color-violet-700: oklch(0.491 0.27 292.581);
150
+ --color-violet-800: oklch(0.432 0.232 292.759);
151
+ --color-violet-900: oklch(0.38 0.189 293.745);
152
+ --color-violet-950: oklch(0.283 0.141 291.089);
153
+ --color-purple-50: oklch(0.977 0.014 308.299);
154
+ --color-purple-100: oklch(0.946 0.033 307.174);
155
+ --color-purple-200: oklch(0.902 0.063 306.703);
156
+ --color-purple-300: oklch(0.827 0.119 306.383);
157
+ --color-purple-400: oklch(0.714 0.203 305.504);
158
+ --color-purple-500: oklch(0.627 0.265 303.9);
159
+ --color-purple-600: oklch(0.558 0.288 302.321);
160
+ --color-purple-700: oklch(0.496 0.265 301.924);
161
+ --color-purple-800: oklch(0.438 0.218 303.724);
162
+ --color-purple-900: oklch(0.381 0.176 304.987);
163
+ --color-purple-950: oklch(0.291 0.149 302.717);
164
+ --color-fuchsia-50: oklch(0.977 0.017 320.058);
165
+ --color-fuchsia-100: oklch(0.952 0.037 318.852);
166
+ --color-fuchsia-200: oklch(0.903 0.076 319.62);
167
+ --color-fuchsia-300: oklch(0.833 0.145 321.434);
168
+ --color-fuchsia-400: oklch(0.74 0.238 322.16);
169
+ --color-fuchsia-500: oklch(0.667 0.295 322.15);
170
+ --color-fuchsia-600: oklch(0.591 0.293 322.896);
171
+ --color-fuchsia-700: oklch(0.518 0.253 323.949);
172
+ --color-fuchsia-800: oklch(0.452 0.211 324.591);
173
+ --color-fuchsia-900: oklch(0.401 0.17 325.612);
174
+ --color-fuchsia-950: oklch(0.293 0.136 325.661);
175
+ --color-pink-50: oklch(0.971 0.014 343.198);
176
+ --color-pink-100: oklch(0.948 0.028 342.258);
177
+ --color-pink-200: oklch(0.899 0.061 343.231);
178
+ --color-pink-300: oklch(0.823 0.12 346.018);
179
+ --color-pink-400: oklch(0.718 0.202 349.761);
180
+ --color-pink-500: oklch(0.656 0.241 354.308);
181
+ --color-pink-600: oklch(0.592 0.249 0.584);
182
+ --color-pink-700: oklch(0.525 0.223 3.958);
183
+ --color-pink-800: oklch(0.459 0.187 3.815);
184
+ --color-pink-900: oklch(0.408 0.153 2.432);
185
+ --color-pink-950: oklch(0.284 0.109 3.907);
186
+ --color-rose-50: oklch(0.969 0.015 12.422);
187
+ --color-rose-100: oklch(0.941 0.03 12.58);
188
+ --color-rose-200: oklch(0.892 0.058 10.001);
189
+ --color-rose-300: oklch(0.81 0.117 11.638);
190
+ --color-rose-400: oklch(0.712 0.194 13.428);
191
+ --color-rose-500: oklch(0.645 0.246 16.439);
192
+ --color-rose-600: oklch(0.586 0.253 17.585);
193
+ --color-rose-700: oklch(0.514 0.222 16.935);
194
+ --color-rose-800: oklch(0.455 0.188 13.697);
195
+ --color-rose-900: oklch(0.41 0.159 10.272);
196
+ --color-rose-950: oklch(0.271 0.105 12.094);
197
+ --color-slate-50: oklch(0.984 0.003 247.858);
198
+ --color-slate-100: oklch(0.968 0.007 247.896);
199
+ --color-slate-200: oklch(0.929 0.013 255.508);
200
+ --color-slate-300: oklch(0.869 0.022 252.894);
201
+ --color-slate-400: oklch(0.704 0.04 256.788);
202
+ --color-slate-500: oklch(0.554 0.046 257.417);
203
+ --color-slate-600: oklch(0.446 0.043 257.281);
204
+ --color-slate-700: oklch(0.372 0.044 257.287);
205
+ --color-slate-800: oklch(0.279 0.041 260.031);
206
+ --color-slate-900: oklch(0.208 0.042 265.755);
207
+ --color-slate-950: oklch(0.129 0.042 264.695);
208
+ --color-gray-50: oklch(0.985 0.002 247.839);
209
+ --color-gray-100: oklch(0.967 0.003 264.542);
210
+ --color-gray-200: oklch(0.928 0.006 264.531);
211
+ --color-gray-300: oklch(0.872 0.01 258.338);
212
+ --color-gray-400: oklch(0.707 0.022 261.325);
213
+ --color-gray-500: oklch(0.551 0.027 264.364);
214
+ --color-gray-600: oklch(0.446 0.03 256.802);
215
+ --color-gray-700: oklch(0.373 0.034 259.733);
216
+ --color-gray-800: oklch(0.278 0.033 256.848);
217
+ --color-gray-900: oklch(0.21 0.034 264.665);
218
+ --color-gray-950: oklch(0.13 0.028 261.692);
219
+ --color-zinc-50: oklch(0.985 0 0);
220
+ --color-zinc-100: oklch(0.967 0.001 286.375);
221
+ --color-zinc-200: oklch(0.92 0.004 286.32);
222
+ --color-zinc-300: oklch(0.871 0.006 286.286);
223
+ --color-zinc-400: oklch(0.705 0.015 286.067);
224
+ --color-zinc-500: oklch(0.552 0.016 285.938);
225
+ --color-zinc-600: oklch(0.442 0.017 285.786);
226
+ --color-zinc-700: oklch(0.37 0.013 285.805);
227
+ --color-zinc-800: oklch(0.274 0.006 286.033);
228
+ --color-zinc-900: oklch(0.21 0.006 285.885);
229
+ --color-zinc-950: oklch(0.141 0.005 285.823);
230
+ --color-neutral-50: oklch(0.985 0 0);
231
+ --color-neutral-100: oklch(0.97 0 0);
232
+ --color-neutral-200: oklch(0.922 0 0);
233
+ --color-neutral-300: oklch(0.87 0 0);
234
+ --color-neutral-400: oklch(0.708 0 0);
235
+ --color-neutral-500: oklch(0.556 0 0);
236
+ --color-neutral-600: oklch(0.439 0 0);
237
+ --color-neutral-700: oklch(0.371 0 0);
238
+ --color-neutral-800: oklch(0.269 0 0);
239
+ --color-neutral-900: oklch(0.205 0 0);
240
+ --color-neutral-950: oklch(0.145 0 0);
241
+ --color-stone-50: oklch(0.985 0.001 106.423);
242
+ --color-stone-100: oklch(0.97 0.001 106.424);
243
+ --color-stone-200: oklch(0.923 0.003 48.717);
244
+ --color-stone-300: oklch(0.869 0.005 56.366);
245
+ --color-stone-400: oklch(0.709 0.01 56.259);
246
+ --color-stone-500: oklch(0.553 0.013 58.071);
247
+ --color-stone-600: oklch(0.444 0.011 73.639);
248
+ --color-stone-700: oklch(0.374 0.01 67.558);
249
+ --color-stone-800: oklch(0.268 0.007 34.298);
250
+ --color-stone-900: oklch(0.216 0.006 56.043);
251
+ --color-stone-950: oklch(0.147 0.004 49.25);
12
252
  --color-black: #000;
253
+ --color-white: #fff;
13
254
  --spacing: 0.25rem;
14
255
  --breakpoint-sm: 40rem;
256
+ --breakpoint-md: 48rem;
257
+ --breakpoint-lg: 64rem;
258
+ --breakpoint-xl: 80rem;
259
+ --breakpoint-2xl: 96rem;
260
+ --container-3xs: 16rem;
261
+ --container-2xs: 18rem;
262
+ --container-xs: 20rem;
263
+ --container-sm: 24rem;
264
+ --container-md: 28rem;
265
+ --container-lg: 32rem;
266
+ --container-xl: 36rem;
267
+ --container-2xl: 42rem;
268
+ --container-3xl: 48rem;
269
+ --container-4xl: 56rem;
270
+ --container-5xl: 64rem;
271
+ --container-6xl: 72rem;
272
+ --container-7xl: 80rem;
15
273
  --text-xs: 0.75rem;
16
274
  --text-xs--line-height: calc(1 / 0.75);
17
275
  --text-sm: 0.875rem;
@@ -20,18 +278,88 @@
20
278
  --text-base--line-height: calc(1.5 / 1);
21
279
  --text-lg: 1.125rem;
22
280
  --text-lg--line-height: calc(1.75 / 1.125);
281
+ --text-xl: 1.25rem;
282
+ --text-xl--line-height: calc(1.75 / 1.25);
283
+ --text-2xl: 1.5rem;
284
+ --text-2xl--line-height: calc(2 / 1.5);
23
285
  --text-3xl: 1.875rem;
24
286
  --text-3xl--line-height: calc(2.25 / 1.875);
287
+ --text-4xl: 2.25rem;
288
+ --text-4xl--line-height: calc(2.5 / 2.25);
289
+ --text-5xl: 3rem;
290
+ --text-5xl--line-height: 1;
291
+ --text-6xl: 3.75rem;
292
+ --text-6xl--line-height: 1;
293
+ --text-7xl: 4.5rem;
294
+ --text-7xl--line-height: 1;
295
+ --text-8xl: 6rem;
296
+ --text-8xl--line-height: 1;
297
+ --text-9xl: 8rem;
298
+ --text-9xl--line-height: 1;
299
+ --font-weight-thin: 100;
300
+ --font-weight-extralight: 200;
301
+ --font-weight-light: 300;
302
+ --font-weight-normal: 400;
25
303
  --font-weight-medium: 500;
26
304
  --font-weight-semibold: 600;
305
+ --font-weight-bold: 700;
306
+ --font-weight-extrabold: 800;
307
+ --font-weight-black: 900;
308
+ --tracking-tighter: -0.05em;
309
+ --tracking-tight: -0.025em;
310
+ --tracking-normal: 0em;
311
+ --tracking-wide: 0.025em;
312
+ --tracking-wider: 0.05em;
313
+ --tracking-widest: 0.1em;
314
+ --leading-tight: 1.25;
315
+ --leading-snug: 1.375;
316
+ --leading-normal: 1.5;
317
+ --leading-relaxed: 1.625;
318
+ --leading-loose: 2;
319
+ --radius-xs: 0.125rem;
320
+ --radius-sm: 0.25rem;
27
321
  --radius-md: 0.375rem;
28
322
  --radius-lg: 0.5rem;
29
323
  --radius-xl: 0.75rem;
30
324
  --radius-2xl: 1rem;
325
+ --radius-3xl: 1.5rem;
326
+ --radius-4xl: 2rem;
327
+ --shadow-2xs: 0 1px rgb(0 0 0 / 0.05);
328
+ --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);
329
+ --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
330
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
331
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
332
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
333
+ --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
334
+ --inset-shadow-2xs: inset 0 1px rgb(0 0 0 / 0.05);
335
+ --inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / 0.05);
336
+ --inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / 0.05);
337
+ --drop-shadow-xs: 0 1px 1px rgb(0 0 0 / 0.05);
338
+ --drop-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.15);
339
+ --drop-shadow-md: 0 3px 3px rgb(0 0 0 / 0.12);
340
+ --drop-shadow-lg: 0 4px 4px rgb(0 0 0 / 0.15);
341
+ --drop-shadow-xl: 0 9px 7px rgb(0 0 0 / 0.1);
342
+ --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / 0.15);
343
+ --ease-in: cubic-bezier(0.4, 0, 1, 1);
344
+ --ease-out: cubic-bezier(0, 0, 0.2, 1);
345
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
31
346
  --animate-spin: spin 1s linear infinite;
347
+ --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
348
+ --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
349
+ --animate-bounce: bounce 1s infinite;
350
+ --blur-xs: 4px;
32
351
  --blur-sm: 8px;
33
352
  --blur-md: 12px;
34
353
  --blur-lg: 16px;
354
+ --blur-xl: 24px;
355
+ --blur-2xl: 40px;
356
+ --blur-3xl: 64px;
357
+ --perspective-dramatic: 100px;
358
+ --perspective-near: 300px;
359
+ --perspective-normal: 500px;
360
+ --perspective-midrange: 800px;
361
+ --perspective-distant: 1200px;
362
+ --aspect-video: 16 / 9;
35
363
  --default-transition-duration: 150ms;
36
364
  --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
37
365
  --default-font-family: var(--font-sans);
@@ -357,9 +685,6 @@
357
685
  .mx-4 {
358
686
  margin-inline: calc(var(--spacing) * 4);
359
687
  }
360
- .mx-auto {
361
- margin-inline: auto;
362
- }
363
688
  .my-0 {
364
689
  margin-block: calc(var(--spacing) * 0);
365
690
  }
@@ -369,6 +694,9 @@
369
694
  .my-6 {
370
695
  margin-block: calc(var(--spacing) * 6);
371
696
  }
697
+ .my-auto {
698
+ margin-block: auto;
699
+ }
372
700
  .-ms-1 {
373
701
  margin-inline-start: calc(var(--spacing) * -1);
374
702
  }
@@ -399,6 +727,9 @@
399
727
  .me-2 {
400
728
  margin-inline-end: calc(var(--spacing) * 2);
401
729
  }
730
+ .me-auto {
731
+ margin-inline-end: auto;
732
+ }
402
733
  .prose {
403
734
  color: var(--tw-prose-body);
404
735
  max-width: none;
@@ -774,9 +1105,6 @@
774
1105
  .-mb-1 {
775
1106
  margin-bottom: calc(var(--spacing) * -1);
776
1107
  }
777
- .-mb-1\.5 {
778
- margin-bottom: calc(var(--spacing) * -1.5);
779
- }
780
1108
  .mb-1 {
781
1109
  margin-bottom: calc(var(--spacing) * 1);
782
1110
  }
@@ -825,6 +1153,10 @@
825
1153
  width: calc(var(--spacing) * 4);
826
1154
  height: calc(var(--spacing) * 4);
827
1155
  }
1156
+ .size-4\.5 {
1157
+ width: calc(var(--spacing) * 4.5);
1158
+ height: calc(var(--spacing) * 4.5);
1159
+ }
828
1160
  .size-5 {
829
1161
  width: calc(var(--spacing) * 5);
830
1162
  height: calc(var(--spacing) * 5);
@@ -933,6 +1265,9 @@
933
1265
  .max-w-screen-sm {
934
1266
  max-width: var(--breakpoint-sm);
935
1267
  }
1268
+ .max-w-sm {
1269
+ max-width: var(--container-sm);
1270
+ }
936
1271
  .min-w-0 {
937
1272
  min-width: calc(var(--spacing) * 0);
938
1273
  }
@@ -1120,6 +1455,10 @@
1120
1455
  border-bottom-style: var(--tw-border-style);
1121
1456
  border-bottom-width: 1px;
1122
1457
  }
1458
+ .border-b-2 {
1459
+ border-bottom-style: var(--tw-border-style);
1460
+ border-bottom-width: 2px;
1461
+ }
1123
1462
  .border-l {
1124
1463
  border-left-style: var(--tw-border-style);
1125
1464
  border-left-width: 1px;
@@ -1127,6 +1466,9 @@
1127
1466
  .border-fd-foreground\/10 {
1128
1467
  border-color: color-mix(in oklab, var(--color-fd-foreground) 10%, transparent);
1129
1468
  }
1469
+ .border-fd-primary {
1470
+ border-color: var(--color-fd-primary);
1471
+ }
1130
1472
  .border-transparent {
1131
1473
  border-color: transparent;
1132
1474
  }
@@ -1274,6 +1616,9 @@
1274
1616
  .pe-4 {
1275
1617
  padding-inline-end: calc(var(--spacing) * 4);
1276
1618
  }
1619
+ .pe-6 {
1620
+ padding-inline-end: calc(var(--spacing) * 6);
1621
+ }
1277
1622
  .pt-0 {
1278
1623
  padding-top: calc(var(--spacing) * 0);
1279
1624
  }
@@ -1465,8 +1810,8 @@
1465
1810
  --tw-duration: 300ms;
1466
1811
  transition-duration: 300ms;
1467
1812
  }
1468
- .\[--fd-nav-height\:3\.5rem\] {
1469
- --fd-nav-height: 3.5rem;
1813
+ .\[--fd-nav-height\:calc\(var\(--spacing\)\*14\)\] {
1814
+ --fd-nav-height: calc(var(--spacing) * 14);
1470
1815
  }
1471
1816
  .\[--fd-tocnav-height\:36px\] {
1472
1817
  --fd-tocnav-height: 36px;
@@ -1485,11 +1830,6 @@
1485
1830
  }
1486
1831
  }
1487
1832
  }
1488
- .group-data-\[state\=closed\]\:-rotate-90 {
1489
- &:is(:where(.group)[data-state="closed"] *) {
1490
- rotate: calc(90deg * -1);
1491
- }
1492
- }
1493
1833
  .group-data-\[state\=open\]\:rotate-180 {
1494
1834
  &:is(:where(.group)[data-state="open"] *) {
1495
1835
  rotate: 180deg;
@@ -1869,22 +2209,12 @@
1869
2209
  grid-template-columns: repeat(2, minmax(0, 1fr));
1870
2210
  }
1871
2211
  }
1872
- .md\:gap-1\.5 {
1873
- @media (width >= 48rem) {
1874
- gap: calc(var(--spacing) * 1.5);
1875
- }
1876
- }
1877
2212
  .md\:border-e {
1878
2213
  @media (width >= 48rem) {
1879
2214
  border-inline-end-style: var(--tw-border-style);
1880
2215
  border-inline-end-width: 1px;
1881
2216
  }
1882
2217
  }
1883
- .md\:px-2 {
1884
- @media (width >= 48rem) {
1885
- padding-inline: calc(var(--spacing) * 2);
1886
- }
1887
- }
1888
2218
  .md\:px-6 {
1889
2219
  @media (width >= 48rem) {
1890
2220
  padding-inline: calc(var(--spacing) * 6);
@@ -1942,6 +2272,11 @@
1942
2272
  --fd-sidebar-width: 268px;
1943
2273
  }
1944
2274
  }
2275
+ .md\:\[--fd-sidebar-width\:286px\] {
2276
+ @media (width >= 48rem) {
2277
+ --fd-sidebar-width: 286px;
2278
+ }
2279
+ }
1945
2280
  .lg\:mt-2 {
1946
2281
  @media (width >= 64rem) {
1947
2282
  margin-top: calc(var(--spacing) * 2);
@@ -1957,6 +2292,11 @@
1957
2292
  height: calc(var(--spacing) * 12);
1958
2293
  }
1959
2294
  }
2295
+ .lg\:h-26 {
2296
+ @media (width >= 64rem) {
2297
+ height: calc(var(--spacing) * 26);
2298
+ }
2299
+ }
1960
2300
  .lg\:w-\[calc\(100\%-1rem\)\] {
1961
2301
  @media (width >= 64rem) {
1962
2302
  width: calc(100% - 1rem);
@@ -1978,6 +2318,11 @@
1978
2318
  border-width: 1px;
1979
2319
  }
1980
2320
  }
2321
+ .lg\:\[--fd-nav-height\:calc\(var\(--spacing\)\*26\)\] {
2322
+ @media (width >= 64rem) {
2323
+ --fd-nav-height: calc(var(--spacing) * 26);
2324
+ }
2325
+ }
1981
2326
  .lg\:\[--fd-sidebar-width\:286px\] {
1982
2327
  @media (width >= 64rem) {
1983
2328
  --fd-sidebar-width: 286px;
@@ -1998,11 +2343,6 @@
1998
2343
  padding-inline: calc(var(--spacing) * 12);
1999
2344
  }
2000
2345
  }
2001
- .xl\:\[--fd-toc-width\:268px\] {
2002
- @media (width >= 80rem) {
2003
- --fd-toc-width: 268px;
2004
- }
2005
- }
2006
2346
  .xl\:\[--fd-toc-width\:286px\] {
2007
2347
  @media (width >= 80rem) {
2008
2348
  --fd-toc-width: 286px;
@@ -2037,6 +2377,12 @@
2037
2377
  background-color: var(--shiki-dark-bg);
2038
2378
  }
2039
2379
  }
2380
+ .\[\&_svg\]\:\!size-4\.5 {
2381
+ & svg {
2382
+ width: calc(var(--spacing) * 4.5) !important;
2383
+ height: calc(var(--spacing) * 4.5) !important;
2384
+ }
2385
+ }
2040
2386
  .\[\&_svg\]\:size-3\.5 {
2041
2387
  & svg {
2042
2388
  width: calc(var(--spacing) * 3.5);
@@ -2223,6 +2569,27 @@
2223
2569
  transform: rotate(360deg);
2224
2570
  }
2225
2571
  }
2572
+ @keyframes ping {
2573
+ 75%, 100% {
2574
+ transform: scale(2);
2575
+ opacity: 0;
2576
+ }
2577
+ }
2578
+ @keyframes pulse {
2579
+ 50% {
2580
+ opacity: 0.5;
2581
+ }
2582
+ }
2583
+ @keyframes bounce {
2584
+ 0%, 100% {
2585
+ transform: translateY(-25%);
2586
+ animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
2587
+ }
2588
+ 50% {
2589
+ transform: none;
2590
+ animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
2591
+ }
2592
+ }
2226
2593
  @keyframes fd-collapsible-down {
2227
2594
  from {
2228
2595
  height: 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fumadocs-ui",
3
- "version": "15.0.7",
3
+ "version": "15.0.9",
4
4
  "description": "The framework for building a documentation website in Next.js",
5
5
  "keywords": [
6
6
  "NextJs",
@@ -71,17 +71,17 @@
71
71
  "tailwind-merge": "^3.0.1"
72
72
  },
73
73
  "devDependencies": {
74
- "@next/eslint-plugin-next": "^15.1.6",
75
- "@tailwindcss/cli": "^4.0.5",
74
+ "@next/eslint-plugin-next": "^15.1.7",
75
+ "@tailwindcss/cli": "^4.0.6",
76
76
  "@types/lodash.merge": "^4.6.9",
77
- "@types/react": "^19.0.8",
77
+ "@types/react": "^19.0.9",
78
78
  "@types/react-dom": "^19.0.3",
79
- "next": "15.1.6",
80
- "tailwindcss": "^4.0.5",
79
+ "next": "15.1.7",
80
+ "tailwindcss": "^4.0.6",
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.7",
84
+ "fumadocs-core": "15.0.9",
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.7"
92
+ "fumadocs-core": "15.0.9"
93
93
  },
94
94
  "peerDependenciesMeta": {
95
95
  "tailwindcss": {