fumadocs-ui 16.6.5 → 16.6.7

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.
@@ -427,6 +427,7 @@
427
427
  @source inline("use");
428
428
  @source inline("useActiveAnchor");
429
429
  @source inline("useFooterItems");
430
+ @source inline("useI18n");
430
431
  @source inline("useIsScrollTop");
431
432
  @source inline("useLinkItems");
432
433
  @source inline("useMemo");
@@ -2,6 +2,7 @@
2
2
  @source inline("!isActive");
3
3
  @source inline("!open");
4
4
  @source inline("*:rounded-lg");
5
+ @source inline("---spacing");
5
6
  @source inline("--fd-toc-width");
6
7
  @source inline("--removed-body-scroll-bar-size");
7
8
  @source inline("--spacing");
@@ -12,7 +13,6 @@
12
13
  @source inline("[&_svg]:shrink-0");
13
14
  @source inline("[&_svg]:size-4");
14
15
  @source inline("[grid-area:main]");
15
- @source inline("[scrollbar-width:none]");
16
16
  @source inline("a");
17
17
  @source inline("absolute");
18
18
  @source inline("active");
@@ -187,6 +187,7 @@
187
187
  @source inline("inline-flex");
188
188
  @source inline("input");
189
189
  @source inline("inset-0");
190
+ @source inline("inset-x-0");
190
191
  @source inline("interface");
191
192
  @source inline("invisible");
192
193
  @source inline("isActive");
@@ -207,7 +208,7 @@
207
208
  @source inline("located");
208
209
  @source inline("lucide-react");
209
210
  @source inline("main");
210
- @source inline("mask-[linear-gradient(to_bottom,transparent,white_calc(var(--spacing)*14),white_calc(100%-var(--spacing)*14),transparent)]");
211
+ @source inline("mask-[linear-gradient(to_bottom,transparent,white_--spacing(14),white_calc(100%---spacing(14)),transparent)]");
211
212
  @source inline("max");
212
213
  @source inline("max-h-[50vh]");
213
214
  @source inline("max-w-[1200px]");
@@ -221,6 +222,7 @@
221
222
  @source inline("menuItems");
222
223
  @source inline("mergeRefs");
223
224
  @source inline("min");
225
+ @source inline("min-h-0");
224
226
  @source inline("min-h-11");
225
227
  @source inline("min-w-0");
226
228
  @source inline("mode");
@@ -249,6 +251,7 @@
249
251
  @source inline("number");
250
252
  @source inline("object");
251
253
  @source inline("of");
254
+ @source inline("onAnimationComplete");
252
255
  @source inline("onClick");
253
256
  @source inline("onOpenChange");
254
257
  @source inline("opacity");
@@ -260,7 +263,6 @@
260
263
  @source inline("overflow-x-clip");
261
264
  @source inline("overflow-y-auto");
262
265
  @source inline("overflow-y-hidden");
263
- @source inline("overscroll-contain");
264
266
  @source inline("p");
265
267
  @source inline("p-1");
266
268
  @source inline("p-1.5");
@@ -311,10 +313,12 @@
311
313
  @source inline("rounded-lg");
312
314
  @source inline("rounded-xl");
313
315
  @source inline("rtl:rotate-180");
316
+ @source inline("scale");
314
317
  @source inline("searchToggle");
315
318
  @source inline("secondary");
316
319
  @source inline("selected");
317
320
  @source inline("selectedIdx");
321
+ @source inline("setBlockScroll");
318
322
  @source inline("setContainer");
319
323
  @source inline("setDate");
320
324
  @source inline("setOpen");
@@ -378,6 +382,7 @@
378
382
  @source inline("tocOptions");
379
383
  @source inline("tocPopoverEnabled");
380
384
  @source inline("tool");
385
+ @source inline("top-0");
381
386
  @source inline("transform");
382
387
  @source inline("transition");
383
388
  @source inline("transition-all");
@@ -385,6 +390,7 @@
385
390
  @source inline("transition-opacity");
386
391
  @source inline("transition-transform");
387
392
  @source inline("translate-x-[calc(-50%-var(--removed-body-scroll-bar-size,0px)/2)]");
393
+ @source inline("translateY");
388
394
  @source inline("tree");
389
395
  @source inline("true");
390
396
  @source inline("truncate");
@@ -396,10 +402,12 @@
396
402
  @source inline("use");
397
403
  @source inline("useActiveAnchor");
398
404
  @source inline("useFooterItems");
405
+ @source inline("useI18n");
399
406
  @source inline("useLinkItems");
400
407
  @source inline("useMemo");
401
408
  @source inline("usePathname");
402
409
  @source inline("useRef");
410
+ @source inline("useSearchContext");
403
411
  @source inline("useSidebar");
404
412
  @source inline("useState");
405
413
  @source inline("useTOCItems");
@@ -466,6 +466,7 @@
466
466
  @source inline("use");
467
467
  @source inline("useActiveAnchor");
468
468
  @source inline("useFooterItems");
469
+ @source inline("useI18n");
469
470
  @source inline("useIsScrollTop");
470
471
  @source inline("useLinkItems");
471
472
  @source inline("useMemo");
@@ -269,6 +269,7 @@
269
269
  @source inline("defaultTranslations");
270
270
  @source inline("defaultValue");
271
271
  @source inline("defaults");
272
+ @source inline("defineI18nUI");
272
273
  @source inline("defined");
273
274
  @source inline("delay");
274
275
  @source inline("dependencies");
@@ -480,6 +481,7 @@
480
481
  @source inline("is");
481
482
  @source inline("isActive");
482
483
  @source inline("isLoading");
484
+ @source inline("isOpen");
483
485
  @source inline("isWindows");
484
486
  @source inline("it");
485
487
  @source inline("item");
@@ -1014,6 +1016,7 @@
1014
1016
  @source inline("use");
1015
1017
  @source inline("useCopyButton");
1016
1018
  @source inline("useDocsSearch");
1019
+ @source inline("useI18n");
1017
1020
  @source inline("useId");
1018
1021
  @source inline("useMediaQuery");
1019
1022
  @source inline("useMemo");
package/css/lib/shiki.css CHANGED
@@ -26,26 +26,6 @@
26
26
  filter: blur(0);
27
27
  }
28
28
 
29
- &[data-line-numbers] .twoslash-meta-line {
30
- padding-left: calc(var(--padding-left) + 7 * var(--spacing));
31
- }
32
-
33
- &[data-line-numbers] .line {
34
- counter-increment: line;
35
- padding-left: calc(var(--padding-left) + 7 * var(--spacing));
36
- }
37
-
38
- &[data-line-numbers] .line::after {
39
- position: absolute;
40
- content: counter(line);
41
- color: color-mix(
42
- in oklab,
43
- var(--fd-counter-color, var(--color-fd-muted-foreground)) 60%,
44
- transparent
45
- );
46
- @apply top-0 left-4;
47
- }
48
-
49
29
  .diff::before {
50
30
  position: absolute;
51
31
  left: calc(var(--spacing) * 1.5);
@@ -75,14 +55,39 @@
75
55
  .highlighted {
76
56
  --fd-counter-color: var(--color-fd-primary);
77
57
  padding-left: calc(var(--padding-left) - 2px);
58
+ @apply bg-fd-primary/10;
59
+ }
78
60
 
79
- @apply border-l-2 border-fd-primary/50 bg-fd-primary/10;
61
+ .highlighted::after {
62
+ position: absolute;
63
+ content: '';
64
+ @apply inset-y-0 left-0 border-l-2 border-fd-primary/50;
80
65
  }
81
66
 
82
67
  .highlighted-word {
83
68
  padding: 1px;
84
69
  @apply border -my-px border-fd-primary/30 bg-fd-primary/10 rounded-md font-medium;
85
70
  }
71
+
72
+ &[data-line-numbers] .twoslash-meta-line {
73
+ padding-left: calc(var(--padding-left) + 7 * var(--spacing));
74
+ }
75
+
76
+ &[data-line-numbers] .line {
77
+ counter-increment: line;
78
+ padding-left: calc(var(--padding-left) + 7 * var(--spacing));
79
+ }
80
+
81
+ &[data-line-numbers] .line::after {
82
+ position: absolute;
83
+ content: counter(line);
84
+ color: color-mix(
85
+ in oklab,
86
+ var(--fd-counter-color, var(--color-fd-muted-foreground)) 60%,
87
+ transparent
88
+ );
89
+ @apply inset-y-0 left-0 w-7 text-right;
90
+ }
86
91
  }
87
92
 
88
93
  .dark .shiki:not(.not-fumadocs-codeblock *) {
@@ -5,7 +5,7 @@ import * as class_variance_authority_types0 from "class-variance-authority/types
5
5
  declare const buttonVariants: (props?: ({
6
6
  variant?: "primary" | "outline" | "ghost" | "secondary" | null | undefined;
7
7
  color?: "primary" | "outline" | "ghost" | "secondary" | null | undefined;
8
- size?: "icon" | "sm" | "icon-sm" | "icon-xs" | null | undefined;
8
+ size?: "sm" | "icon" | "icon-sm" | "icon-xs" | null | undefined;
9
9
  } & class_variance_authority_types0.ClassProp) | undefined) => string;
10
10
  type ButtonProps = VariantProps<typeof buttonVariants>;
11
11
  //#endregion
@@ -49,6 +49,7 @@ interface SearchProviderProps {
49
49
  }
50
50
  interface SearchContextType {
51
51
  enabled: boolean;
52
+ open: boolean;
52
53
  hotKey: HotKey[];
53
54
  setOpenSearch: (value: boolean) => void;
54
55
  }
@@ -6,6 +6,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
6
6
  //#region src/contexts/search.tsx
7
7
  const SearchContext = createContext({
8
8
  enabled: false,
9
+ open: false,
9
10
  hotKey: [],
10
11
  setOpenSearch: () => void 0
11
12
  });
@@ -42,9 +43,10 @@ function SearchProvider({ SearchDialog, children, preload = true, options, hotKe
42
43
  return /* @__PURE__ */ jsxs(SearchContext, {
43
44
  value: useMemo(() => ({
44
45
  enabled: true,
46
+ open: isOpen ?? false,
45
47
  hotKey,
46
48
  setOpenSearch: setIsOpen
47
- }), [hotKey]),
49
+ }), [isOpen, hotKey]),
48
50
  children: [isOpen !== void 0 && /* @__PURE__ */ jsx(Suspense, {
49
51
  fallback: null,
50
52
  children: /* @__PURE__ */ jsx(SearchDialog, {
@@ -58,7 +58,6 @@ declare function NavigationPanel({
58
58
  tabDropdown,
59
59
  tool,
60
60
  link,
61
- className,
62
61
  children,
63
62
  ...props
64
63
  }: NavigationPanelProps & Omit<ComponentProps<typeof motion.div>, 'children'> & {
@@ -5,6 +5,7 @@ import { buttonVariants } from "../../components/ui/button.js";
5
5
  import { TreeContextProvider } from "../../contexts/tree.js";
6
6
  import { SidebarViewport, useSidebar } from "../../components/sidebar/base.js";
7
7
  import { LinkItem } from "../../utils/link-item.js";
8
+ import { useSearchContext } from "../../contexts/search.js";
8
9
  import { SearchToggle } from "../shared/search-toggle.js";
9
10
  import { renderTitleNav, useLinkItems } from "../shared/index.js";
10
11
  import { LanguageToggle } from "../shared/language-toggle.js";
@@ -117,10 +118,16 @@ function NavigationSidebarTrigger() {
117
118
  })
118
119
  });
119
120
  }
120
- function NavigationPanel({ head, tabDropdown, tool, link, className, children = (v) => v, ...props }) {
121
+ function NavigationPanel({ head, tabDropdown, tool, link, children = (v) => v, ...props }) {
122
+ const { open } = useSearchContext();
121
123
  return /* @__PURE__ */ jsx(motion.div, {
122
- className: cn("fixed left-1/2 w-[calc(100%-var(--removed-body-scroll-bar-size,0px))] translate-x-[calc(-50%-var(--removed-body-scroll-bar-size,0px)/2)] bottom-0 z-40 bg-fd-popover text-fd-popover-foreground border-t shadow-lg sm:bottom-6 sm:rounded-2xl sm:border sm:max-w-[380px]", className),
123
124
  ...props,
125
+ className: cn("fixed left-1/2 w-[calc(100%-var(--removed-body-scroll-bar-size,0px))] translate-x-[calc(-50%-var(--removed-body-scroll-bar-size,0px)/2)] bottom-0 z-40 bg-fd-popover text-fd-popover-foreground border-t shadow-lg sm:bottom-6 sm:rounded-2xl sm:border sm:max-w-[380px]", props.className),
126
+ animate: props.animate ?? {
127
+ scale: open ? .9 : 1,
128
+ translateY: open ? 20 : 0,
129
+ opacity: open ? .8 : 1
130
+ },
124
131
  children: children(/* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs("div", {
125
132
  className: "flex flex-row items-center ps-2.5 p-1 gap-2 min-h-11",
126
133
  children: [head, /* @__PURE__ */ jsx("div", {
@@ -5,7 +5,7 @@ import { mergeRefs } from "../../utils/merge-refs.js";
5
5
  import { SidebarCollapseTrigger as SidebarCollapseTrigger$1, SidebarFolder as SidebarFolder$1, SidebarFolderContent as SidebarFolderContent$1, SidebarFolderLink as SidebarFolderLink$1, SidebarFolderTrigger as SidebarFolderTrigger$1, SidebarItem as SidebarItem$1, SidebarProvider, SidebarSeparator as SidebarSeparator$1, SidebarTrigger as SidebarTrigger$1, SidebarViewport as SidebarViewport$1, useFolder, useFolderDepth, useSidebar } from "../../components/sidebar/base.js";
6
6
  import { createLinkItemRenderer } from "../../components/sidebar/link-item.js";
7
7
  import { createPageTreeRenderer } from "../../components/sidebar/page-tree.js";
8
- import { useEffect, useEffectEvent, useRef } from "react";
8
+ import { useEffect, useEffectEvent, useRef, useState } from "react";
9
9
  import { jsx } from "react/jsx-runtime";
10
10
  import { cva } from "class-variance-authority";
11
11
  import { motion } from "motion/react";
@@ -43,6 +43,7 @@ function SidebarTrigger(props) {
43
43
  }
44
44
  function SidebarContent({ ref: refProp, className, children, ...props }) {
45
45
  const ref = useRef(null);
46
+ const [blockScroll, setBlockScroll] = useState(false);
46
47
  const { open, setOpen } = useSidebar();
47
48
  const listener = useEffectEvent((e) => {
48
49
  if (open && e.key === "Escape") {
@@ -56,8 +57,9 @@ function SidebarContent({ ref: refProp, className, children, ...props }) {
56
57
  window.removeEventListener("keydown", listener);
57
58
  };
58
59
  }, []);
60
+ if (open && !blockScroll) setBlockScroll(true);
59
61
  return /* @__PURE__ */ jsx(RemoveScroll, {
60
- enabled: open,
62
+ enabled: blockScroll,
61
63
  children: /* @__PURE__ */ jsx(motion.div, {
62
64
  className: cn("fixed inset-0 py-10 z-30 backdrop-blur-md bg-fd-background/60", !open && "pointer-events-none"),
63
65
  initial: "hide",
@@ -70,8 +72,11 @@ function SidebarContent({ ref: refProp, className, children, ...props }) {
70
72
  onClick: () => {
71
73
  setOpen(false);
72
74
  },
75
+ onAnimationComplete: (definition) => {
76
+ if (definition === "hide") setBlockScroll(false);
77
+ },
73
78
  children: /* @__PURE__ */ jsx(motion.div, {
74
- className: "absolute overflow-y-auto pr-(--removed-body-scroll-bar-size,0) [scrollbar-width:none] py-16 inset-0 bottom-26 overscroll-contain mask-[linear-gradient(to_bottom,transparent,white_calc(var(--spacing)*14),white_calc(100%-var(--spacing)*14),transparent)] lg:text-sm",
79
+ className: "absolute top-0 min-h-0 inset-x-0 bottom-26 overflow-y-auto fd-scroll-container pr-(--removed-body-scroll-bar-size,0) py-16 mask-[linear-gradient(to_bottom,transparent,white_--spacing(14),white_calc(100%---spacing(14)),transparent)] lg:text-sm",
75
80
  variants: {
76
81
  show: {
77
82
  y: 0,
@@ -83,14 +88,13 @@ function SidebarContent({ ref: refProp, className, children, ...props }) {
83
88
  }
84
89
  },
85
90
  transition: {
86
- duration: .3,
91
+ duration: .4,
87
92
  ease: [
88
93
  .16,
89
94
  1,
90
95
  .3,
91
96
  1
92
- ],
93
- opacity: { duration: .1 }
97
+ ]
94
98
  },
95
99
  children: /* @__PURE__ */ jsx(motion.aside, {
96
100
  id: "nd-sidebar",
@@ -40,7 +40,7 @@ function SidebarTabsDropdown({ options, placeholder, className, ...props }) {
40
40
  children: [/* @__PURE__ */ jsx(AnimatePresence, {
41
41
  mode: "popLayout",
42
42
  children: /* @__PURE__ */ jsx(motion.span, {
43
- className: "flex w-full items-center text-nowrap gap-1.5",
43
+ className: "flex w-full min-w-0 overflow-hidden items-center text-nowrap gap-1.5",
44
44
  initial: {
45
45
  opacity: 0,
46
46
  y: "100%"
package/dist/style.css CHANGED
@@ -1,4 +1,4 @@
1
- /*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
1
+ /*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */
2
2
  @layer properties;
3
3
  @layer theme, base, components, utilities;
4
4
  @layer theme {
@@ -309,6 +309,9 @@
309
309
  .inset-y-2 {
310
310
  inset-block: calc(var(--spacing) * 2);
311
311
  }
312
+ .start {
313
+ inset-inline-start: var(--spacing);
314
+ }
312
315
  .start-0 {
313
316
  inset-inline-start: calc(var(--spacing) * 0);
314
317
  }
@@ -349,7 +352,7 @@
349
352
  top: calc(var(--spacing) * 1.5);
350
353
  }
351
354
  .top-1\/2 {
352
- top: calc(1/2 * 100%);
355
+ top: calc(1 / 2 * 100%);
353
356
  }
354
357
  .top-2\.5 {
355
358
  top: calc(var(--spacing) * 2.5);
@@ -376,7 +379,7 @@
376
379
  bottom: calc(var(--spacing) * 26);
377
380
  }
378
381
  .left-1\/2 {
379
- left: calc(1/2 * 100%);
382
+ left: calc(1 / 2 * 100%);
380
383
  }
381
384
  .z-2 {
382
385
  z-index: 2;
@@ -1054,7 +1057,7 @@
1054
1057
  width: calc(var(--spacing) * 1.5);
1055
1058
  }
1056
1059
  .w-1\/4 {
1057
- width: calc(1/4 * 100%);
1060
+ width: calc(1 / 4 * 100%);
1058
1061
  }
1059
1062
  .w-4 {
1060
1063
  width: calc(var(--spacing) * 4);
@@ -1145,7 +1148,7 @@
1145
1148
  translate: var(--tw-translate-x) var(--tw-translate-y);
1146
1149
  }
1147
1150
  .-translate-x-1\/2 {
1148
- --tw-translate-x: calc(calc(1/2 * 100%) * -1);
1151
+ --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);
1149
1152
  translate: var(--tw-translate-x) var(--tw-translate-y);
1150
1153
  }
1151
1154
  .translate-x-2 {
@@ -1157,7 +1160,7 @@
1157
1160
  translate: var(--tw-translate-x) var(--tw-translate-y);
1158
1161
  }
1159
1162
  .-translate-y-1\/2 {
1160
- --tw-translate-y: calc(calc(1/2 * 100%) * -1);
1163
+ --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);
1161
1164
  translate: var(--tw-translate-x) var(--tw-translate-y);
1162
1165
  }
1163
1166
  .-translate-y-full {
@@ -1472,12 +1475,12 @@
1472
1475
  .bg-transparent {
1473
1476
  background-color: transparent;
1474
1477
  }
1478
+ .mask-\[linear-gradient\(to_bottom\,transparent\,white_--spacing\(14\)\,white_calc\(100\%---spacing\(14\)\)\,transparent\)\] {
1479
+ mask-image: linear-gradient(to bottom,transparent,white calc(var(--spacing) * 14),white calc(100% - calc(var(--spacing) * 14)),transparent);
1480
+ }
1475
1481
  .mask-\[linear-gradient\(to_bottom\,transparent\,white_16px\,white_calc\(100\%-16px\)\,transparent\)\] {
1476
1482
  mask-image: linear-gradient(to bottom,transparent,white 16px,white calc(100% - 16px),transparent);
1477
1483
  }
1478
- .mask-\[linear-gradient\(to_bottom\,transparent\,white_calc\(var\(--spacing\)\*14\)\,white_calc\(100\%-var\(--spacing\)\*14\)\,transparent\)\] {
1479
- mask-image: linear-gradient(to bottom,transparent,white calc(var(--spacing) * 14),white calc(100% - var(--spacing) * 14),transparent);
1480
- }
1481
1484
  .mask-\[linear-gradient\(to_bottom\,white\,white_30px\,transparent_80px\)\] {
1482
1485
  mask-image: linear-gradient(to bottom,white,white 30px,transparent 80px);
1483
1486
  }
@@ -2872,23 +2875,6 @@
2872
2875
  &.has-focused:hover .line:not(.focused) {
2873
2876
  filter: blur(0);
2874
2877
  }
2875
- &[data-line-numbers] .twoslash-meta-line {
2876
- padding-left: calc(var(--padding-left) + 7 * var(--spacing));
2877
- }
2878
- &[data-line-numbers] .line {
2879
- counter-increment: line;
2880
- padding-left: calc(var(--padding-left) + 7 * var(--spacing));
2881
- }
2882
- &[data-line-numbers] .line::after {
2883
- position: absolute;
2884
- content: counter(line);
2885
- color: var(--fd-counter-color, hsl(0, 0%, 45.1%));
2886
- @supports (color: color-mix(in lab, red, red)) {
2887
- color: color-mix( in oklab, var(--fd-counter-color, var(--color-fd-muted-foreground)) 60%, transparent );
2888
- }
2889
- top: calc(var(--spacing) * 0);
2890
- left: calc(var(--spacing) * 4);
2891
- }
2892
2878
  .diff::before {
2893
2879
  position: absolute;
2894
2880
  left: calc(var(--spacing) * 1.5);
@@ -2913,16 +2899,22 @@
2913
2899
  .highlighted {
2914
2900
  --fd-counter-color: var(--color-fd-primary);
2915
2901
  padding-left: calc(var(--padding-left) - 2px);
2902
+ background-color: color-mix(in srgb, hsl(0, 0%, 9%) 10%, transparent);
2903
+ @supports (color: color-mix(in lab, red, red)) {
2904
+ background-color: color-mix(in oklab, var(--color-fd-primary) 10%, transparent);
2905
+ }
2906
+ }
2907
+ .highlighted::after {
2908
+ position: absolute;
2909
+ content: '';
2910
+ inset-block: calc(var(--spacing) * 0);
2911
+ left: calc(var(--spacing) * 0);
2916
2912
  border-left-style: var(--tw-border-style);
2917
2913
  border-left-width: 2px;
2918
2914
  border-color: color-mix(in srgb, hsl(0, 0%, 9%) 50%, transparent);
2919
2915
  @supports (color: color-mix(in lab, red, red)) {
2920
2916
  border-color: color-mix(in oklab, var(--color-fd-primary) 50%, transparent);
2921
2917
  }
2922
- background-color: color-mix(in srgb, hsl(0, 0%, 9%) 10%, transparent);
2923
- @supports (color: color-mix(in lab, red, red)) {
2924
- background-color: color-mix(in oklab, var(--color-fd-primary) 10%, transparent);
2925
- }
2926
2918
  }
2927
2919
  .highlighted-word {
2928
2920
  padding: 1px;
@@ -2941,6 +2933,25 @@
2941
2933
  --tw-font-weight: var(--font-weight-medium);
2942
2934
  font-weight: var(--font-weight-medium);
2943
2935
  }
2936
+ &[data-line-numbers] .twoslash-meta-line {
2937
+ padding-left: calc(var(--padding-left) + 7 * var(--spacing));
2938
+ }
2939
+ &[data-line-numbers] .line {
2940
+ counter-increment: line;
2941
+ padding-left: calc(var(--padding-left) + 7 * var(--spacing));
2942
+ }
2943
+ &[data-line-numbers] .line::after {
2944
+ position: absolute;
2945
+ content: counter(line);
2946
+ color: var(--fd-counter-color, hsl(0, 0%, 45.1%));
2947
+ @supports (color: color-mix(in lab, red, red)) {
2948
+ color: color-mix( in oklab, var(--fd-counter-color, var(--color-fd-muted-foreground)) 60%, transparent );
2949
+ }
2950
+ inset-block: calc(var(--spacing) * 0);
2951
+ left: calc(var(--spacing) * 0);
2952
+ width: calc(var(--spacing) * 7);
2953
+ text-align: right;
2954
+ }
2944
2955
  }
2945
2956
  .dark .shiki:not(.not-fumadocs-codeblock *) {
2946
2957
  code span {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fumadocs-ui",
3
- "version": "16.6.5",
3
+ "version": "16.6.7",
4
4
  "description": "The Radix UI version of Fumadocs UI",
5
5
  "keywords": [
6
6
  "Docs",
@@ -117,30 +117,30 @@
117
117
  "@radix-ui/react-slot": "^1.2.4",
118
118
  "@radix-ui/react-tabs": "^1.1.13",
119
119
  "class-variance-authority": "^0.7.1",
120
- "lucide-react": "^0.570.0",
121
- "motion": "^12.34.0",
120
+ "lucide-react": "^0.575.0",
121
+ "motion": "^12.34.3",
122
122
  "next-themes": "^0.4.6",
123
- "react-medium-image-zoom": "^5.4.0",
123
+ "react-medium-image-zoom": "^5.4.1",
124
124
  "react-remove-scroll": "^2.7.2",
125
125
  "rehype-raw": "^7.0.0",
126
126
  "scroll-into-view-if-needed": "^3.1.0",
127
- "tailwind-merge": "^3.4.1",
127
+ "tailwind-merge": "^3.5.0",
128
128
  "unist-util-visit": "^5.1.0",
129
129
  "@fumadocs/tailwind": "0.0.2"
130
130
  },
131
131
  "devDependencies": {
132
- "@tailwindcss/cli": "^4.1.18",
132
+ "@tailwindcss/cli": "^4.2.1",
133
133
  "@types/hast": "^3.0.4",
134
- "@types/node": "^25.2.3",
134
+ "@types/node": "^25.3.1",
135
135
  "@types/react": "^19.2.14",
136
136
  "@types/react-dom": "^19.2.3",
137
- "tailwindcss": "^4.1.18",
138
- "tsdown": "^0.20.3",
137
+ "tailwindcss": "^4.2.1",
138
+ "tsdown": "0.20.3",
139
139
  "unified": "^11.0.5",
140
140
  "@fumadocs/cli": "1.2.4",
141
+ "tsconfig": "0.0.0",
141
142
  "eslint-config-custom": "0.0.0",
142
- "fumadocs-core": "16.6.5",
143
- "tsconfig": "0.0.0"
143
+ "fumadocs-core": "16.6.7"
144
144
  },
145
145
  "peerDependencies": {
146
146
  "@takumi-rs/image-response": "^0.68.17",
@@ -148,7 +148,7 @@
148
148
  "next": "16.x.x",
149
149
  "react": "^19.2.0",
150
150
  "react-dom": "^19.2.0",
151
- "fumadocs-core": "16.6.5"
151
+ "fumadocs-core": "16.6.7"
152
152
  },
153
153
  "peerDependenciesMeta": {
154
154
  "next": {