@fumadocs/base-ui 16.8.12 → 16.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/css/generated/docs.css +0 -2
  2. package/css/generated/flux.css +0 -2
  3. package/css/generated/home.css +0 -8
  4. package/css/generated/notebook.css +0 -2
  5. package/css/generated/shared.css +59 -4
  6. package/dist/components/accordion.d.ts +1 -1
  7. package/dist/components/accordion.js +4 -2
  8. package/dist/components/banner.d.ts +1 -1
  9. package/dist/components/banner.js +6 -4
  10. package/dist/components/callout.d.ts +1 -1
  11. package/dist/components/card.d.ts +1 -1
  12. package/dist/components/card.js +1 -1
  13. package/dist/components/codeblock.d.ts +1 -1
  14. package/dist/components/codeblock.js +4 -2
  15. package/dist/components/dialog/search-algolia.d.ts +1 -1
  16. package/dist/components/dialog/search-algolia.js +1 -1
  17. package/dist/components/dialog/search-default.d.ts +1 -1
  18. package/dist/components/dialog/search-default.js +1 -1
  19. package/dist/components/dialog/search-orama.d.ts +1 -1
  20. package/dist/components/dialog/search-orama.js +1 -1
  21. package/dist/components/dialog/search.d.ts +1 -1
  22. package/dist/components/dialog/search.js +13 -12
  23. package/dist/components/dynamic-codeblock.core.js +1 -1
  24. package/dist/components/files.js +1 -1
  25. package/dist/components/github-info.d.ts +7 -3
  26. package/dist/components/github-info.js +8 -6
  27. package/dist/components/heading.d.ts +1 -1
  28. package/dist/components/heading.js +3 -1
  29. package/dist/components/image-zoom.d.ts +1 -1
  30. package/dist/components/inline-toc.d.ts +1 -1
  31. package/dist/components/inline-toc.js +3 -1
  32. package/dist/components/sidebar/base.d.ts +2 -2
  33. package/dist/components/sidebar/base.js +5 -4
  34. package/dist/components/sidebar/link-item.d.ts +1 -1
  35. package/dist/components/sidebar/page-tree.d.ts +1 -1
  36. package/dist/components/sidebar/page-tree.js +2 -2
  37. package/dist/components/sidebar/tabs/dropdown.d.ts +1 -1
  38. package/dist/components/sidebar/tabs/dropdown.js +4 -4
  39. package/dist/components/steps.d.ts +1 -1
  40. package/dist/components/tabs.d.ts +1 -1
  41. package/dist/components/tabs.js +1 -1
  42. package/dist/components/toc/clerk.d.ts +1 -1
  43. package/dist/components/toc/clerk.js +3 -4
  44. package/dist/components/toc/default.d.ts +1 -1
  45. package/dist/components/toc/default.js +3 -4
  46. package/dist/components/toc/index.d.ts +1 -1
  47. package/dist/components/toc/index.js +1 -1
  48. package/dist/components/type-table.d.ts +1 -1
  49. package/dist/components/type-table.js +16 -13
  50. package/dist/components/ui/accordion.d.ts +1 -1
  51. package/dist/components/ui/collapsible.d.ts +1 -1
  52. package/dist/components/ui/navigation-menu.d.ts +1 -1
  53. package/dist/components/ui/navigation-menu.js +1 -1
  54. package/dist/components/ui/popover.d.ts +1 -1
  55. package/dist/components/ui/popover.js +1 -1
  56. package/dist/components/ui/scroll-area.d.ts +1 -1
  57. package/dist/components/ui/scroll-area.js +1 -1
  58. package/dist/components/ui/tabs.d.ts +1 -1
  59. package/dist/components/ui/tabs.js +1 -1
  60. package/dist/contexts/i18n.d.ts +14 -22
  61. package/dist/contexts/i18n.js +12 -19
  62. package/dist/contexts/search.d.ts +1 -1
  63. package/dist/contexts/search.js +1 -1
  64. package/dist/contexts/tree.d.ts +1 -1
  65. package/dist/contexts/tree.js +1 -1
  66. package/dist/i18n.d.ts +55 -6
  67. package/dist/i18n.js +68 -2
  68. package/dist/layouts/docs/client.d.ts +1 -0
  69. package/dist/layouts/docs/client.js +2 -2
  70. package/dist/layouts/docs/index.d.ts +1 -1
  71. package/dist/layouts/docs/index.js +1 -1
  72. package/dist/layouts/docs/page/index.d.ts +1 -1
  73. package/dist/layouts/docs/page/index.js +6 -6
  74. package/dist/layouts/docs/page/slots/breadcrumb.d.ts +1 -1
  75. package/dist/layouts/docs/page/slots/breadcrumb.js +3 -3
  76. package/dist/layouts/docs/page/slots/container.d.ts +1 -1
  77. package/dist/layouts/docs/page/slots/footer.d.ts +1 -1
  78. package/dist/layouts/docs/page/slots/footer.js +7 -7
  79. package/dist/layouts/docs/page/slots/toc.d.ts +1 -1
  80. package/dist/layouts/docs/page/slots/toc.js +4 -4
  81. package/dist/layouts/docs/slots/container.d.ts +1 -1
  82. package/dist/layouts/docs/slots/container.js +1 -1
  83. package/dist/layouts/docs/slots/header.d.ts +1 -1
  84. package/dist/layouts/docs/slots/sidebar.d.ts +1 -1
  85. package/dist/layouts/docs/slots/sidebar.js +7 -7
  86. package/dist/layouts/flux/index.d.ts +1 -1
  87. package/dist/layouts/flux/index.js +5 -5
  88. package/dist/layouts/flux/page/index.d.ts +1 -1
  89. package/dist/layouts/flux/page/index.js +6 -6
  90. package/dist/layouts/flux/page/slots/breadcrumb.d.ts +1 -1
  91. package/dist/layouts/flux/page/slots/breadcrumb.js +3 -3
  92. package/dist/layouts/flux/page/slots/container.d.ts +1 -1
  93. package/dist/layouts/flux/page/slots/footer.d.ts +1 -1
  94. package/dist/layouts/flux/page/slots/footer.js +5 -5
  95. package/dist/layouts/flux/page/slots/toc.d.ts +1 -1
  96. package/dist/layouts/flux/page/slots/toc.js +4 -4
  97. package/dist/layouts/flux/slots/container.d.ts +1 -1
  98. package/dist/layouts/flux/slots/sidebar.d.ts +1 -1
  99. package/dist/layouts/flux/slots/sidebar.js +1 -1
  100. package/dist/layouts/flux/slots/tab-dropdown.d.ts +1 -1
  101. package/dist/layouts/flux/slots/tab-dropdown.js +4 -4
  102. package/dist/layouts/home/index.d.ts +1 -1
  103. package/dist/layouts/home/index.js +1 -1
  104. package/dist/layouts/home/navbar.d.ts +1 -1
  105. package/dist/layouts/home/navbar.js +1 -1
  106. package/dist/layouts/home/not-found.js +5 -4
  107. package/dist/layouts/home/slots/container.d.ts +1 -1
  108. package/dist/layouts/home/slots/header.d.ts +1 -1
  109. package/dist/layouts/home/slots/header.js +8 -6
  110. package/dist/layouts/notebook/client.d.ts +1 -0
  111. package/dist/layouts/notebook/client.js +1 -1
  112. package/dist/layouts/notebook/index.d.ts +1 -1
  113. package/dist/layouts/notebook/index.js +1 -1
  114. package/dist/layouts/notebook/page/index.d.ts +1 -1
  115. package/dist/layouts/notebook/page/index.js +6 -6
  116. package/dist/layouts/notebook/page/slots/breadcrumb.d.ts +1 -1
  117. package/dist/layouts/notebook/page/slots/breadcrumb.js +3 -3
  118. package/dist/layouts/notebook/page/slots/container.d.ts +1 -1
  119. package/dist/layouts/notebook/page/slots/footer.d.ts +1 -1
  120. package/dist/layouts/notebook/page/slots/footer.js +7 -7
  121. package/dist/layouts/notebook/page/slots/toc.d.ts +1 -1
  122. package/dist/layouts/notebook/page/slots/toc.js +4 -4
  123. package/dist/layouts/notebook/slots/container.d.ts +1 -1
  124. package/dist/layouts/notebook/slots/container.js +1 -1
  125. package/dist/layouts/notebook/slots/header.d.ts +1 -1
  126. package/dist/layouts/notebook/slots/header.js +3 -3
  127. package/dist/layouts/notebook/slots/sidebar.d.ts +1 -1
  128. package/dist/layouts/notebook/slots/sidebar.js +9 -9
  129. package/dist/layouts/shared/client.d.ts +1 -1
  130. package/dist/layouts/shared/client.js +1 -1
  131. package/dist/layouts/shared/index.d.ts +1 -1
  132. package/dist/layouts/shared/index.js +1 -1
  133. package/dist/layouts/shared/page-actions.d.ts +1 -1
  134. package/dist/layouts/shared/page-actions.js +17 -11
  135. package/dist/layouts/shared/slots/language-select.d.ts +1 -1
  136. package/dist/layouts/shared/slots/language-select.js +1 -1
  137. package/dist/layouts/shared/slots/search-trigger.d.ts +1 -1
  138. package/dist/layouts/shared/slots/search-trigger.js +5 -4
  139. package/dist/layouts/shared/slots/theme-switch.d.ts +1 -1
  140. package/dist/layouts/shared/slots/theme-switch.js +21 -7
  141. package/dist/mdx.d.ts +1 -1
  142. package/dist/mdx.js +1 -1
  143. package/dist/og/takumi.d.ts +1 -1
  144. package/dist/og.d.ts +1 -1
  145. package/dist/page.d.ts +1 -1
  146. package/dist/provider/base.d.ts +1 -1
  147. package/dist/provider/base.js +1 -1
  148. package/dist/provider/next.d.ts +1 -1
  149. package/dist/provider/react-router.d.ts +1 -1
  150. package/dist/provider/tanstack.d.ts +1 -1
  151. package/dist/provider/waku.d.ts +1 -1
  152. package/dist/style.css +11 -9
  153. package/package.json +5 -5
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import { cn } from "../../../../utils/cn.js";
3
3
  import { useTreeContext, useTreePath } from "../../../../contexts/tree.js";
4
- import { Fragment, useMemo } from "react";
5
- import { jsx, jsxs } from "react/jsx-runtime";
6
4
  import Link from "fumadocs-core/link";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
7
6
  import { ChevronRight } from "lucide-react";
7
+ import { Fragment as Fragment$1, useMemo } from "react";
8
8
  import { getBreadcrumbItemsFromPath } from "fumadocs-core/breadcrumb";
9
9
  //#region src/layouts/notebook/page/slots/breadcrumb.tsx
10
10
  function Breadcrumb({ includeRoot, includeSeparator, includePage, ...props }) {
@@ -29,7 +29,7 @@ function Breadcrumb({ includeRoot, includeSeparator, includePage, ...props }) {
29
29
  className: cn("flex items-center gap-1.5 text-sm text-fd-muted-foreground", props.className),
30
30
  children: items.map((item, i) => {
31
31
  const className = cn("truncate", i === items.length - 1 && "text-fd-primary font-medium");
32
- return /* @__PURE__ */ jsxs(Fragment, { children: [i !== 0 && /* @__PURE__ */ jsx(ChevronRight, { className: "size-3.5 shrink-0" }), item.url ? /* @__PURE__ */ jsx(Link, {
32
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [i !== 0 && /* @__PURE__ */ jsx(ChevronRight, { className: "size-3.5 shrink-0" }), item.url ? /* @__PURE__ */ jsx(Link, {
33
33
  href: item.url,
34
34
  className: cn(className, "transition-opacity hover:opacity-80"),
35
35
  children: item.name
@@ -1,5 +1,5 @@
1
- import { ComponentProps } from "react";
2
1
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
2
+ import { ComponentProps } from "react";
3
3
 
4
4
  //#region src/layouts/notebook/page/slots/container.d.ts
5
5
  declare function Container(props: ComponentProps<'article'>): _$react_jsx_runtime0.JSX.Element;
@@ -1,5 +1,5 @@
1
- import { ComponentProps } from "react";
2
1
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
2
+ import { ComponentProps } from "react";
3
3
  import * as PageTree from "fumadocs-core/page-tree";
4
4
 
5
5
  //#region src/layouts/notebook/page/slots/footer.d.ts
@@ -1,13 +1,13 @@
1
1
  "use client";
2
- import { useI18n } from "../../../../contexts/i18n.js";
3
2
  import { cn } from "../../../../utils/cn.js";
3
+ import { useTranslations } from "../../../../contexts/i18n.js";
4
4
  import { isActive } from "../../../../utils/urls.js";
5
5
  import { useFooterItems } from "../../../../utils/use-footer-items.js";
6
- import { useMemo } from "react";
7
- import { usePathname } from "fumadocs-core/framework";
8
- import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
9
6
  import Link from "fumadocs-core/link";
7
+ import { usePathname } from "fumadocs-core/framework";
8
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
10
9
  import { ChevronLeft, ChevronRight } from "lucide-react";
10
+ import { useMemo } from "react";
11
11
  //#region src/layouts/notebook/page/slots/footer.tsx
12
12
  function Footer({ items, children, className, ...props }) {
13
13
  const footerList = useFooterItems();
@@ -25,7 +25,7 @@ function Footer({ items, children, className, ...props }) {
25
25
  items,
26
26
  pathname
27
27
  ]);
28
- return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs("div", {
28
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("div", {
29
29
  className: cn("@container grid gap-4", previous && next ? "grid-cols-2" : "grid-cols-1", className),
30
30
  ...props,
31
31
  children: [previous && /* @__PURE__ */ jsx(FooterItem, {
@@ -38,7 +38,7 @@ function Footer({ items, children, className, ...props }) {
38
38
  }), children] });
39
39
  }
40
40
  function FooterItem({ item, index }) {
41
- const { text } = useI18n();
41
+ const t = useTranslations();
42
42
  const Icon = index === 0 ? ChevronLeft : ChevronRight;
43
43
  return /* @__PURE__ */ jsxs(Link, {
44
44
  href: item.url,
@@ -48,7 +48,7 @@ function FooterItem({ item, index }) {
48
48
  children: [/* @__PURE__ */ jsx(Icon, { className: "-mx-1 size-4 shrink-0 rtl:rotate-180" }), /* @__PURE__ */ jsx("p", { children: item.name })]
49
49
  }), /* @__PURE__ */ jsx("p", {
50
50
  className: "text-fd-muted-foreground truncate",
51
- children: item.description ?? (index === 0 ? text.previousPage : text.nextPage)
51
+ children: item.description ?? (index === 0 ? t.previousPage : t.nextPage)
52
52
  })]
53
53
  });
54
54
  }
@@ -1,8 +1,8 @@
1
1
  import { TOCItemsProps } from "../../../../components/toc/clerk.js";
2
2
  import { TOCItemsProps as TOCItemsProps$1 } from "../../../../components/toc/default.js";
3
3
  import { TOCProviderProps as TOCProviderProps$1 } from "../../../../components/toc/index.js";
4
- import { ComponentProps, ReactNode } from "react";
5
4
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
5
+ import { ComponentProps, ReactNode } from "react";
6
6
 
7
7
  //#region src/layouts/notebook/page/slots/toc.d.ts
8
8
  type TOCProviderProps = TOCProviderProps$1;
@@ -1,15 +1,15 @@
1
1
  "use client";
2
- import { I18nLabel, useI18n } from "../../../../contexts/i18n.js";
3
2
  import { cn } from "../../../../utils/cn.js";
3
+ import { I18nLabel, useTranslations } from "../../../../contexts/i18n.js";
4
4
  import { TOCProvider as TOCProvider$1, TOCScrollArea, useItems, useTOCItems } from "../../../../components/toc/index.js";
5
5
  import { default_exports } from "../../../../components/toc/default.js";
6
6
  import { clerk_exports } from "../../../../components/toc/clerk.js";
7
7
  import { useTreePath } from "../../../../contexts/tree.js";
8
8
  import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "../../../../components/ui/collapsible.js";
9
9
  import { useNotebookLayout } from "../../client.js";
10
- import { createContext, use, useEffect, useEffectEvent, useMemo, useRef, useState } from "react";
11
10
  import { jsx, jsxs } from "react/jsx-runtime";
12
11
  import { ChevronDown, Text } from "lucide-react";
12
+ import { createContext, use, useEffect, useEffectEvent, useMemo, useRef, useState } from "react";
13
13
  //#region src/layouts/notebook/page/slots/toc.tsx
14
14
  function TOCProvider(props) {
15
15
  return /* @__PURE__ */ jsx(TOCProvider$1, { ...props });
@@ -89,7 +89,7 @@ function TOCPopover({ container, trigger, content, header, footer, style = "norm
89
89
  });
90
90
  }
91
91
  function PageTOCPopoverTrigger({ className, ...props }) {
92
- const { text } = useI18n();
92
+ const t = useTranslations();
93
93
  const { open } = use(TocPopoverContext);
94
94
  const items = useItems();
95
95
  const selectedIdx = items.findIndex((item) => item.active);
@@ -109,7 +109,7 @@ function PageTOCPopoverTrigger({ className, ...props }) {
109
109
  className: "grid flex-1 *:my-auto *:row-start-1 *:col-start-1",
110
110
  children: [/* @__PURE__ */ jsx("span", {
111
111
  className: cn("truncate transition-[opacity,translate,color]", open && "text-fd-foreground", showItem && "opacity-0 -translate-y-full pointer-events-none"),
112
- children: path?.name ?? text.toc
112
+ children: path?.name ?? t.toc
113
113
  }), /* @__PURE__ */ jsx("span", {
114
114
  className: cn("truncate transition-[opacity,translate]", !showItem && "opacity-0 translate-y-full pointer-events-none"),
115
115
  children: items[selectedIdx]?.original.title
@@ -1,5 +1,5 @@
1
- import { ComponentProps } from "react";
2
1
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
2
+ import { ComponentProps } from "react";
3
3
 
4
4
  //#region src/layouts/notebook/slots/container.d.ts
5
5
  declare function Container(props: ComponentProps<'div'>): _$react_jsx_runtime0.JSX.Element;
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { cn } from "../../../utils/cn.js";
3
3
  import { useNotebookLayout } from "../client.js";
4
- import { useEffect, useState } from "react";
5
4
  import { jsx } from "react/jsx-runtime";
5
+ import { useEffect, useState } from "react";
6
6
  //#region src/layouts/notebook/slots/container.tsx
7
7
  function Container(props) {
8
8
  const { props: { nav }, slots } = useNotebookLayout();
@@ -1,6 +1,6 @@
1
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
1
2
  import * as _$react from "react";
2
3
  import { ComponentProps } from "react";
3
- import * as _$react_jsx_runtime0 from "react/jsx-runtime";
4
4
 
5
5
  //#region src/layouts/notebook/slots/header.d.ts
6
6
  declare function Header(props: ComponentProps<'header'>): string | number | bigint | true | _$react_jsx_runtime0.JSX.Element | Iterable<_$react.ReactNode> | Promise<string | number | bigint | boolean | _$react.ReactPortal | _$react.ReactElement<unknown, string | _$react.JSXElementConstructor<any>> | Iterable<_$react.ReactNode> | null | undefined>;
@@ -5,11 +5,11 @@ import { Popover, PopoverContent, PopoverTrigger } from "../../../components/ui/
5
5
  import { LinkItem } from "../../shared/client.js";
6
6
  import { isLayoutTabActive } from "../../shared/index.js";
7
7
  import { useNotebookLayout } from "../client.js";
8
- import { Fragment, useMemo, useRef, useState } from "react";
8
+ import Link from "fumadocs-core/link";
9
9
  import { usePathname } from "fumadocs-core/framework";
10
10
  import { jsx, jsxs } from "react/jsx-runtime";
11
- import Link from "fumadocs-core/link";
12
11
  import { ChevronDown, Languages, Sidebar } from "lucide-react";
12
+ import { Fragment as Fragment$1, useMemo, useRef, useState } from "react";
13
13
  //#region src/layouts/notebook/slots/header.tsx
14
14
  function Header(props) {
15
15
  const { slots, navItems, isNavTransparent, props: { tabMode, nav, tabs, sidebar } } = useNotebookLayout();
@@ -177,7 +177,7 @@ function NavbarLinkItemMenu({ item, hoverDelay = 50, className, ...props }) {
177
177
  onPointerEnter,
178
178
  onPointerLeave,
179
179
  children: item.items.map((child, i) => {
180
- if (child.type === "custom") return /* @__PURE__ */ jsx(Fragment, { children: child.children }, i);
180
+ if (child.type === "custom") return /* @__PURE__ */ jsx(Fragment$1, { children: child.children }, i);
181
181
  return /* @__PURE__ */ jsxs(LinkItem, {
182
182
  item: child,
183
183
  className: "inline-flex items-center gap-2 rounded-md p-2 transition-colors hover:bg-fd-accent hover:text-fd-accent-foreground data-[active=true]:text-fd-primary [&_svg]:size-4",
@@ -1,8 +1,8 @@
1
1
  import { SidebarProviderProps as SidebarProviderProps$1, useSidebar as useSidebar$1 } from "../../../components/sidebar/base.js";
2
2
  import { LayoutTab } from "../../shared/index.js";
3
3
  import { SidebarPageTreeComponents } from "../../../components/sidebar/page-tree.js";
4
- import { ComponentProps, FC, ReactNode } from "react";
5
4
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
5
+ import { ComponentProps, FC, ReactNode } from "react";
6
6
 
7
7
  //#region src/layouts/notebook/slots/sidebar.d.ts
8
8
  interface SidebarProps extends ComponentProps<'aside'> {
@@ -9,12 +9,12 @@ import { SidebarCollapseTrigger as SidebarCollapseTrigger$1, SidebarContent as S
9
9
  import { createPageTreeRenderer } from "../../../components/sidebar/page-tree.js";
10
10
  import { createLinkItemRenderer } from "../../../components/sidebar/link-item.js";
11
11
  import { useNotebookLayout } from "../client.js";
12
- import { createElement, useMemo, useRef, useState } from "react";
13
- import { usePathname } from "fumadocs-core/framework";
14
- import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
15
12
  import Link from "fumadocs-core/link";
13
+ import { usePathname } from "fumadocs-core/framework";
14
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
16
15
  import { Check, ChevronsUpDown, Languages, SidebarIcon, X } from "lucide-react";
17
16
  import { cva } from "class-variance-authority";
17
+ import { createElement, useMemo, useRef, useState } from "react";
18
18
  //#region src/layouts/notebook/slots/sidebar.tsx
19
19
  const itemVariants = cva("relative flex flex-row items-center gap-2 rounded-lg p-2 text-start text-fd-muted-foreground wrap-anywhere [&_svg]:size-4 [&_svg]:shrink-0", { variants: {
20
20
  variant: {
@@ -59,7 +59,7 @@ function SidebarContent({ ref: refProp, className, children, ...props }) {
59
59
  }) });
60
60
  }
61
61
  function SidebarDrawer({ children, className, ...props }) {
62
- return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(SidebarDrawerOverlay, { className: "fixed z-40 inset-0 backdrop-blur-xs data-[state=open]:animate-fd-fade-in data-[state=closed]:animate-fd-fade-out" }), /* @__PURE__ */ jsx(SidebarDrawerContent, {
62
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(SidebarDrawerOverlay, { className: "fixed z-40 inset-0 backdrop-blur-xs data-[state=open]:animate-fd-fade-in data-[state=closed]:animate-fd-fade-out" }), /* @__PURE__ */ jsx(SidebarDrawerContent, {
63
63
  className: cn("fixed text-[0.9375rem] flex flex-col shadow-lg border-s end-0 inset-y-0 w-[85%] max-w-[380px] z-40 bg-fd-background data-[state=open]:animate-fd-sidebar-in data-[state=closed]:animate-fd-sidebar-out", className),
64
64
  ...props,
65
65
  children
@@ -171,10 +171,10 @@ function Sidebar({ banner, footer, components, collapsible = true, ...rest }) {
171
171
  className: cn("lg:hidden", i === arr.length - 1 && "mb-4")
172
172
  }, i)), /* @__PURE__ */ jsx(SidebarPageTree, { ...components })]
173
173
  }) });
174
- return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs(SidebarContent, {
174
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs(SidebarContent, {
175
175
  ...rest,
176
176
  children: [
177
- renderHeader({ children: /* @__PURE__ */ jsxs(Fragment$1, { children: [navMode === "auto" && /* @__PURE__ */ jsxs("div", {
177
+ renderHeader({ children: /* @__PURE__ */ jsxs(Fragment, { children: [navMode === "auto" && /* @__PURE__ */ jsxs("div", {
178
178
  className: "flex justify-between",
179
179
  children: [
180
180
  slots.navTitle && /* @__PURE__ */ jsx(slots.navTitle, { className: "inline-flex items-center gap-2.5 font-medium" }),
@@ -210,7 +210,7 @@ function Sidebar({ banner, footer, components, collapsible = true, ...rest }) {
210
210
  }), /* @__PURE__ */ jsxs(SidebarDrawer, {
211
211
  ...rest,
212
212
  children: [
213
- renderHeader({ children: /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(SidebarTrigger, {
213
+ renderHeader({ children: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(SidebarTrigger, {
214
214
  className: cn(buttonVariants({
215
215
  size: "icon-sm",
216
216
  color: "ghost",
@@ -221,7 +221,7 @@ function Sidebar({ banner, footer, components, collapsible = true, ...rest }) {
221
221
  viewport,
222
222
  renderFooter({
223
223
  className: cn("hidden flex-row text-fd-muted-foreground items-center border-t p-4 pt-2 justify-end", (slots.languageSelect || slots.themeSwitch) && "flex", iconLinks.length > 0 && "max-lg:flex"),
224
- children: /* @__PURE__ */ jsxs(Fragment$1, { children: [
224
+ children: /* @__PURE__ */ jsxs(Fragment, { children: [
225
225
  iconLinks.map((item, i) => /* @__PURE__ */ jsx(LinkItem, {
226
226
  item,
227
227
  className: cn(buttonVariants({
@@ -249,7 +249,7 @@ function SidebarTabsDropdown({ options, placeholder, ...props }) {
249
249
  closeOnRedirect.current = false;
250
250
  setOpen(false);
251
251
  };
252
- const item = selected ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("div", {
252
+ const item = selected ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
253
253
  className: "size-9 shrink-0 empty:hidden md:size-5",
254
254
  children: selected.icon
255
255
  }), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
@@ -2,8 +2,8 @@ import { LanguageSelectProps, LanguageSelectTextProps } from "./slots/language-s
2
2
  import { FullSearchTriggerProps, SearchTriggerProps } from "./slots/search-trigger.js";
3
3
  import { ThemeSwitchProps } from "./slots/theme-switch.js";
4
4
  import { BaseLayoutProps, LinkItemType } from "./index.js";
5
- import { ComponentProps, FC } from "react";
6
5
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
6
+ import { ComponentProps, FC } from "react";
7
7
 
8
8
  //#region src/layouts/shared/client.d.ts
9
9
  declare function LinkItem({
@@ -4,9 +4,9 @@ import { LanguageSelect, LanguageSelectText } from "./slots/language-select.js";
4
4
  import { FullSearchTrigger, SearchTrigger } from "./slots/search-trigger.js";
5
5
  import { ThemeSwitch } from "./slots/theme-switch.js";
6
6
  import { isLinkItemActive } from "./index.js";
7
+ import Link from "fumadocs-core/link";
7
8
  import { usePathname } from "fumadocs-core/framework";
8
9
  import { jsx } from "react/jsx-runtime";
9
- import Link from "fumadocs-core/link";
10
10
  //#region src/layouts/shared/client.tsx
11
11
  function LinkItem({ ref, item, ...props }) {
12
12
  const active = isLinkItemActive(item, usePathname());
@@ -2,8 +2,8 @@ import { FullSearchTriggerProps, SearchTriggerProps } from "./slots/search-trigg
2
2
  import { ThemeSwitchProps } from "./slots/theme-switch.js";
3
3
  import { BaseSlots, BaseSlotsProps, LinkItem, baseSlots } from "./client.js";
4
4
  import { ComponentProps, FC, ReactNode } from "react";
5
- import * as PageTree from "fumadocs-core/page-tree";
6
5
  import { I18nConfig } from "fumadocs-core/i18n";
6
+ import * as PageTree from "fumadocs-core/page-tree";
7
7
 
8
8
  //#region src/layouts/shared/index.d.ts
9
9
  interface NavOptions {
@@ -1,7 +1,7 @@
1
1
  import { isActive, normalize } from "../../utils/urls.js";
2
2
  import { LinkItem, baseSlots } from "./client.js";
3
- import { useMemo } from "react";
4
3
  import { jsx } from "react/jsx-runtime";
4
+ import { useMemo } from "react";
5
5
  import * as PageTree from "fumadocs-core/page-tree";
6
6
  //#region src/layouts/shared/index.tsx
7
7
  const defaultTransform = (option, node) => {
@@ -1,6 +1,6 @@
1
1
  import { PopoverTrigger } from "../../components/ui/popover.js";
2
- import { ComponentProps } from "react";
3
2
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
+ import { ComponentProps } from "react";
4
4
 
5
5
  //#region src/layouts/shared/page-actions.d.ts
6
6
  /**
@@ -2,17 +2,20 @@
2
2
  import { cn } from "../../utils/cn.js";
3
3
  import { buttonVariants } from "../../components/ui/button.js";
4
4
  import { useCopyButton } from "../../utils/use-copy-button.js";
5
+ import { useTranslations } from "../../contexts/i18n.js";
5
6
  import { Popover, PopoverContent, PopoverTrigger } from "../../components/ui/popover.js";
6
- import { useMemo, useState } from "react";
7
7
  import { usePathname } from "fumadocs-core/framework";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
9
  import { Check, ChevronDown, Copy, ExternalLinkIcon, TextIcon } from "lucide-react";
10
+ import { useMemo, useState } from "react";
11
+ import { renderTranslation } from "fumadocs-core/i18n";
10
12
  //#region src/layouts/shared/page-actions.tsx
11
13
  const cache = /* @__PURE__ */ new Map();
12
14
  /**
13
15
  * see https://fumadocs.dev/docs/integrations/llms#page-actions to customize.
14
16
  */
15
17
  function MarkdownCopyButton({ markdownUrl, ...props }) {
18
+ const t = useTranslations();
16
19
  const [isLoading, setLoading] = useState(false);
17
20
  const [checked, onClick] = useCopyButton(async () => {
18
21
  const cached = cache.get(markdownUrl);
@@ -35,7 +38,7 @@ function MarkdownCopyButton({ markdownUrl, ...props }) {
35
38
  size: "sm",
36
39
  className: "gap-2 [&_svg]:size-3.5 [&_svg]:text-fd-muted-foreground"
37
40
  }), props.className),
38
- children: [checked ? /* @__PURE__ */ jsx(Check, {}) : /* @__PURE__ */ jsx(Copy, {}), props.children ?? "Copy Markdown"]
41
+ children: [checked ? /* @__PURE__ */ jsx(Check, {}) : /* @__PURE__ */ jsx(Copy, {}), props.children ?? t.pageActionsCopyMarkdown]
39
42
  });
40
43
  }
41
44
  /**
@@ -43,11 +46,13 @@ function MarkdownCopyButton({ markdownUrl, ...props }) {
43
46
  */
44
47
  function ViewOptionsPopover({ markdownUrl, githubUrl, ...props }) {
45
48
  const pathname = usePathname();
49
+ const t = useTranslations();
46
50
  const items = useMemo(() => {
47
- const q = `Read ${typeof window === "undefined" ? pathname : new URL(pathname, window.location.origin)}, I want to ask questions about it.`;
51
+ const pageUrl = typeof window === "undefined" ? pathname : new URL(pathname, window.location.origin);
52
+ const q = renderTranslation(t.pageActionsOpenInLLMPrompt, { url: String(pageUrl) });
48
53
  return [
49
54
  githubUrl && {
50
- title: "Open in GitHub",
55
+ title: t.pageActionsOpenGitHub,
51
56
  href: githubUrl,
52
57
  icon: /* @__PURE__ */ jsxs("svg", {
53
58
  fill: "currentColor",
@@ -57,12 +62,12 @@ function ViewOptionsPopover({ markdownUrl, githubUrl, ...props }) {
57
62
  })
58
63
  },
59
64
  markdownUrl && {
60
- title: "View as Markdown",
65
+ title: t.pageActionsViewMarkdown,
61
66
  href: markdownUrl,
62
67
  icon: /* @__PURE__ */ jsx(TextIcon, {})
63
68
  },
64
69
  {
65
- title: "Open in Scira AI",
70
+ title: t.pageActionsOpenScira,
66
71
  href: `https://scira.ai/?${new URLSearchParams({ q })}`,
67
72
  icon: /* @__PURE__ */ jsxs("svg", {
68
73
  width: "910",
@@ -123,7 +128,7 @@ function ViewOptionsPopover({ markdownUrl, githubUrl, ...props }) {
123
128
  })
124
129
  },
125
130
  {
126
- title: "Open in ChatGPT",
131
+ title: t.pageActionsOpenChatGPT,
127
132
  href: `https://chatgpt.com/?${new URLSearchParams({
128
133
  hints: "search",
129
134
  q
@@ -137,7 +142,7 @@ function ViewOptionsPopover({ markdownUrl, githubUrl, ...props }) {
137
142
  })
138
143
  },
139
144
  {
140
- title: "Open in Claude",
145
+ title: t.pageActionsOpenClaude,
141
146
  href: `https://claude.ai/new?${new URLSearchParams({ q })}`,
142
147
  icon: /* @__PURE__ */ jsxs("svg", {
143
148
  fill: "currentColor",
@@ -148,7 +153,7 @@ function ViewOptionsPopover({ markdownUrl, githubUrl, ...props }) {
148
153
  })
149
154
  },
150
155
  {
151
- title: "Open in Cursor",
156
+ title: t.pageActionsOpenCursor,
152
157
  icon: /* @__PURE__ */ jsxs("svg", {
153
158
  fill: "currentColor",
154
159
  role: "img",
@@ -162,7 +167,8 @@ function ViewOptionsPopover({ markdownUrl, githubUrl, ...props }) {
162
167
  }, [
163
168
  githubUrl,
164
169
  markdownUrl,
165
- pathname
170
+ pathname,
171
+ t
166
172
  ]);
167
173
  return /* @__PURE__ */ jsxs(Popover, { children: [/* @__PURE__ */ jsxs(PopoverTrigger, {
168
174
  ...props,
@@ -170,7 +176,7 @@ function ViewOptionsPopover({ markdownUrl, githubUrl, ...props }) {
170
176
  color: "secondary",
171
177
  size: "sm"
172
178
  }), "gap-2 data-[state=open]:bg-fd-accent data-[state=open]:text-fd-accent-foreground", typeof props.className === "function" ? props.className(state) : props.className),
173
- children: [props.children ?? "Open", /* @__PURE__ */ jsx(ChevronDown, { className: "size-3.5 text-fd-muted-foreground" })]
179
+ children: [props.children ?? t.pageActionsOpen, /* @__PURE__ */ jsx(ChevronDown, { className: "size-3.5 text-fd-muted-foreground" })]
174
180
  }), /* @__PURE__ */ jsx(PopoverContent, {
175
181
  className: "flex flex-col",
176
182
  children: items.map((item) => /* @__PURE__ */ jsxs("a", {
@@ -1,7 +1,7 @@
1
1
  import { buttonVariants } from "../../../components/ui/button.js";
2
- import { ComponentProps } from "react";
3
2
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
4
3
  import { VariantProps } from "class-variance-authority";
4
+ import { ComponentProps } from "react";
5
5
 
6
6
  //#region src/layouts/shared/slots/language-select.d.ts
7
7
  interface LanguageSelectProps extends ComponentProps<'button'> {
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { useI18n } from "../../../contexts/i18n.js";
3
2
  import { cn } from "../../../utils/cn.js";
4
3
  import { buttonVariants } from "../../../components/ui/button.js";
4
+ import { useI18n } from "../../../contexts/i18n.js";
5
5
  import { Popover, PopoverContent, PopoverTrigger } from "../../../components/ui/popover.js";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  //#region src/layouts/shared/slots/language-select.tsx
@@ -1,6 +1,6 @@
1
1
  import { ButtonProps } from "../../../components/ui/button.js";
2
- import { ComponentProps } from "react";
3
2
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
+ import { ComponentProps } from "react";
4
4
 
5
5
  //#region src/layouts/shared/slots/search-trigger.d.ts
6
6
  interface SearchTriggerProps extends Omit<ComponentProps<'button'>, 'color'>, ButtonProps {
@@ -1,13 +1,14 @@
1
1
  "use client";
2
- import { useI18n } from "../../../contexts/i18n.js";
3
2
  import { cn } from "../../../utils/cn.js";
4
3
  import { buttonVariants } from "../../../components/ui/button.js";
4
+ import { useTranslations } from "../../../contexts/i18n.js";
5
5
  import { useSearchContext } from "../../../contexts/search.js";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  import { Search } from "lucide-react";
8
8
  //#region src/layouts/shared/slots/search-trigger.tsx
9
9
  function SearchTrigger({ hideIfDisabled, size = "icon-sm", color = "ghost", ...props }) {
10
10
  const { setOpenSearch, enabled } = useSearchContext();
11
+ const t = useTranslations();
11
12
  if (hideIfDisabled && !enabled) return null;
12
13
  return /* @__PURE__ */ jsx("button", {
13
14
  type: "button",
@@ -16,7 +17,7 @@ function SearchTrigger({ hideIfDisabled, size = "icon-sm", color = "ghost", ...p
16
17
  color
17
18
  }), props.className),
18
19
  "data-search": "",
19
- "aria-label": "Open Search",
20
+ "aria-label": t.searchOpen,
20
21
  onClick: () => {
21
22
  setOpenSearch(true);
22
23
  },
@@ -25,7 +26,7 @@ function SearchTrigger({ hideIfDisabled, size = "icon-sm", color = "ghost", ...p
25
26
  }
26
27
  function FullSearchTrigger({ hideIfDisabled, ...props }) {
27
28
  const { enabled, hotKey, setOpenSearch } = useSearchContext();
28
- const { text } = useI18n();
29
+ const t = useTranslations();
29
30
  if (hideIfDisabled && !enabled) return null;
30
31
  return /* @__PURE__ */ jsxs("button", {
31
32
  type: "button",
@@ -37,7 +38,7 @@ function FullSearchTrigger({ hideIfDisabled, ...props }) {
37
38
  },
38
39
  children: [
39
40
  /* @__PURE__ */ jsx(Search, { className: "size-4" }),
40
- text.search,
41
+ t.search,
41
42
  /* @__PURE__ */ jsx("div", {
42
43
  className: "ms-auto inline-flex gap-0.5",
43
44
  children: hotKey.map((k, i) => /* @__PURE__ */ jsx("kbd", {
@@ -1,5 +1,5 @@
1
- import { ComponentProps } from "react";
2
1
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
2
+ import { ComponentProps } from "react";
3
3
 
4
4
  //#region src/layouts/shared/slots/theme-switch.d.ts
5
5
  interface ThemeSwitchProps extends ComponentProps<'div'> {
@@ -1,9 +1,10 @@
1
1
  "use client";
2
2
  import { cn } from "../../../utils/cn.js";
3
- import { useEffect, useState } from "react";
3
+ import { useTranslations } from "../../../contexts/i18n.js";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  import { Airplay, Moon, Sun } from "lucide-react";
6
6
  import { cva } from "class-variance-authority";
7
+ import { useEffect, useState } from "react";
7
8
  import { useTheme } from "next-themes";
8
9
  //#region src/layouts/shared/slots/theme-switch.tsx
9
10
  const itemVariants = cva("size-6.5 p-1.5 text-fd-muted-foreground", { variants: { active: {
@@ -11,13 +12,26 @@ const itemVariants = cva("size-6.5 p-1.5 text-fd-muted-foreground", { variants:
11
12
  false: "text-fd-muted-foreground"
12
13
  } } });
13
14
  const full = [
14
- ["light", Sun],
15
- ["dark", Moon],
16
- ["system", Airplay]
15
+ [
16
+ "light",
17
+ Sun,
18
+ "themeLight"
19
+ ],
20
+ [
21
+ "dark",
22
+ Moon,
23
+ "themeDark"
24
+ ],
25
+ [
26
+ "system",
27
+ Airplay,
28
+ "themeSystem"
29
+ ]
17
30
  ];
18
31
  function ThemeSwitch({ className, mode = "light-dark", ...props }) {
19
32
  const { setTheme, theme, resolvedTheme } = useTheme();
20
33
  const [mounted, setMounted] = useState(false);
34
+ const t = useTranslations();
21
35
  useEffect(() => {
22
36
  setMounted(true);
23
37
  }, []);
@@ -26,7 +40,7 @@ function ThemeSwitch({ className, mode = "light-dark", ...props }) {
26
40
  const value = mounted ? resolvedTheme : null;
27
41
  return /* @__PURE__ */ jsx("button", {
28
42
  className: container,
29
- "aria-label": `Toggle Theme`,
43
+ "aria-label": t.themeToggle,
30
44
  onClick: () => setTheme(value === "light" ? "dark" : "light"),
31
45
  "data-theme-toggle": "",
32
46
  children: full.map(([key, Icon]) => {
@@ -43,8 +57,8 @@ function ThemeSwitch({ className, mode = "light-dark", ...props }) {
43
57
  className: container,
44
58
  "data-theme-toggle": "",
45
59
  ...props,
46
- children: full.map(([key, Icon]) => /* @__PURE__ */ jsx("button", {
47
- "aria-label": key,
60
+ children: full.map(([key, Icon, label]) => /* @__PURE__ */ jsx("button", {
61
+ "aria-label": t[label],
48
62
  className: cn(itemVariants({ active: value === key })),
49
63
  onClick: () => setTheme(key),
50
64
  children: /* @__PURE__ */ jsx(Icon, {
package/dist/mdx.d.ts CHANGED
@@ -2,8 +2,8 @@ import { Callout, CalloutContainer, CalloutDescription, CalloutTitle } from "./c
2
2
  import { Card, Cards } from "./components/card.js";
3
3
  import { CodeBlockTab, CodeBlockTabs, CodeBlockTabsList, CodeBlockTabsTrigger } from "./components/codeblock.js";
4
4
  import { createRelativeLink as createRelativeLink$1 } from "./mdx.server.js";
5
- import React, { AnchorHTMLAttributes, FC, HTMLAttributes, ImgHTMLAttributes, TableHTMLAttributes } from "react";
6
5
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
6
+ import React, { AnchorHTMLAttributes, FC, HTMLAttributes, ImgHTMLAttributes, TableHTMLAttributes } from "react";
7
7
 
8
8
  //#region src/mdx.d.ts
9
9
  /**
package/dist/mdx.js CHANGED
@@ -3,9 +3,9 @@ import { Card, Cards } from "./components/card.js";
3
3
  import { Callout, CalloutContainer, CalloutDescription, CalloutTitle } from "./components/callout.js";
4
4
  import { Heading } from "./components/heading.js";
5
5
  import { CodeBlock, CodeBlockTab, CodeBlockTabs, CodeBlockTabsList, CodeBlockTabsTrigger, Pre } from "./components/codeblock.js";
6
+ import Link from "fumadocs-core/link";
6
7
  import { Image } from "fumadocs-core/framework";
7
8
  import { jsx } from "react/jsx-runtime";
8
- import Link from "fumadocs-core/link";
9
9
  //#region src/mdx.tsx
10
10
  function Image$1(props) {
11
11
  return /* @__PURE__ */ jsx(Image, {
@@ -1,5 +1,5 @@
1
- import { ReactNode } from "react";
2
1
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
2
+ import { ReactNode } from "react";
3
3
  import { ImageResponse, ImageResponseOptions } from "@takumi-rs/image-response";
4
4
 
5
5
  //#region src/og/takumi.d.ts
package/dist/og.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { ReactNode } from "react";
2
1
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
2
+ import { ReactNode } from "react";
3
3
  import { ImageResponse } from "next/og.js";
4
4
  import { ImageResponseOptions } from "next/dist/compiled/@vercel/og/types";
5
5
 
package/dist/page.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Breadcrumb } from "./layouts/docs/page/slots/breadcrumb.js";
2
2
  import { DocsBody, DocsDescription, DocsPageProps as DocsPageProps$1, DocsTitle, EditOnGitHub, PageLastUpdate } from "./layouts/docs/page/index.js";
3
- import { ComponentProps } from "react";
4
3
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
4
+ import { ComponentProps } from "react";
5
5
 
6
6
  //#region src/page.d.ts
7
7
  interface EditOnGitHubOptions extends Omit<ComponentProps<'a'>, 'href' | 'children'> {
@@ -1,8 +1,8 @@
1
1
  import { SearchProviderProps } from "../contexts/search.js";
2
2
  import { DefaultSearchDialogProps } from "../components/dialog/search-default.js";
3
3
  import { I18nProviderProps } from "../contexts/i18n.js";
4
- import { ReactNode } from "react";
5
4
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
5
+ import { ReactNode } from "react";
6
6
  import { ThemeProviderProps, UseThemeProps, useTheme } from "next-themes";
7
7
 
8
8
  //#region src/provider/base.d.ts
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { I18nProvider } from "../contexts/i18n.js";
3
3
  import { SearchProvider } from "../contexts/search.js";
4
- import { lazy } from "react";
5
4
  import { jsx } from "react/jsx-runtime";
5
+ import { lazy } from "react";
6
6
  import { ThemeProvider, useTheme } from "next-themes";
7
7
  import { DirectionProvider } from "@base-ui/react/direction-provider";
8
8
  //#region src/provider/base.tsx