@fumadocs/base-ui 16.7.0 → 16.7.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.
- package/css/generated/docs.css +1 -3
- package/css/generated/notebook.css +1 -3
- package/css/generated/shared.css +2 -1
- package/dist/components/accordion.js +2 -2
- package/dist/components/dialog/search.js +2 -2
- package/dist/components/files.js +3 -3
- package/dist/components/heading.js +2 -2
- package/dist/components/sidebar/tabs/dropdown.js +1 -1
- package/dist/components/toc/index.d.ts +3 -2
- package/dist/components/toc/index.js +3 -2
- package/dist/layouts/docs/client.js +1 -1
- package/dist/layouts/docs/page/client.d.ts +6 -6
- package/dist/layouts/docs/page/client.js +10 -10
- package/dist/layouts/docs/page/slots/breadcrumb.js +2 -1
- package/dist/layouts/docs/page/slots/toc.d.ts +29 -1
- package/dist/layouts/docs/page/slots/toc.js +137 -4
- package/dist/layouts/docs/slots/container.js +1 -1
- package/dist/layouts/docs/slots/sidebar.js +7 -7
- package/dist/layouts/home/slots/header.js +1 -1
- package/dist/layouts/notebook/client.js +1 -1
- package/dist/layouts/notebook/page/client.d.ts +6 -6
- package/dist/layouts/notebook/page/client.js +10 -10
- package/dist/layouts/notebook/page/slots/toc.d.ts +29 -1
- package/dist/layouts/notebook/page/slots/toc.js +136 -4
- package/dist/layouts/notebook/slots/sidebar.js +5 -5
- package/dist/layouts/shared/client.d.ts +2 -2
- package/dist/layouts/shared/index.d.ts +3 -3
- package/dist/layouts/shared/slots/search-trigger.d.ts +3 -3
- package/package.json +4 -6
- package/dist/layouts/docs/page/slots/toc-popover.d.ts +0 -31
- package/dist/layouts/docs/page/slots/toc-popover.js +0 -141
- package/dist/layouts/notebook/page/slots/toc-popover.d.ts +0 -31
- package/dist/layouts/notebook/page/slots/toc-popover.js +0 -141
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { useI18n } from "../../../../contexts/i18n.js";
|
|
3
|
-
import { cn } from "../../../../utils/cn.js";
|
|
4
|
-
import { TOCScrollArea, useTOCItems } from "../../../../components/toc/index.js";
|
|
5
|
-
import { TOCItems } from "../../../../components/toc/default.js";
|
|
6
|
-
import { TOCItems as TOCItems$1 } from "../../../../components/toc/clerk.js";
|
|
7
|
-
import { useTreePath } from "../../../../contexts/tree.js";
|
|
8
|
-
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "../../../../components/ui/collapsible.js";
|
|
9
|
-
import { useNotebookLayout } from "../../client.js";
|
|
10
|
-
import { createContext, use, useEffect, useEffectEvent, useMemo, useRef, useState } from "react";
|
|
11
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
12
|
-
import { ChevronDown } from "lucide-react";
|
|
13
|
-
import { useActiveAnchor } from "fumadocs-core/toc";
|
|
14
|
-
//#region src/layouts/notebook/page/slots/toc-popover.tsx
|
|
15
|
-
const TocPopoverContext = createContext(null);
|
|
16
|
-
function TOCPopover({ container, trigger, content, header, footer, style }) {
|
|
17
|
-
return /* @__PURE__ */ jsxs(PageTOCPopover, {
|
|
18
|
-
...container,
|
|
19
|
-
children: [/* @__PURE__ */ jsx(PageTOCPopoverTrigger, { ...trigger }), /* @__PURE__ */ jsxs(PageTOCPopoverContent, {
|
|
20
|
-
...content,
|
|
21
|
-
children: [
|
|
22
|
-
header,
|
|
23
|
-
/* @__PURE__ */ jsx(TOCScrollArea, { children: style === "clerk" ? /* @__PURE__ */ jsx(TOCItems$1, {}) : /* @__PURE__ */ jsx(TOCItems, {}) }),
|
|
24
|
-
footer
|
|
25
|
-
]
|
|
26
|
-
})]
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
function PageTOCPopover({ className, children, ...rest }) {
|
|
30
|
-
const ref = useRef(null);
|
|
31
|
-
const [open, setOpen] = useState(false);
|
|
32
|
-
const { isNavTransparent } = useNotebookLayout();
|
|
33
|
-
const onClick = useEffectEvent((e) => {
|
|
34
|
-
if (!open) return;
|
|
35
|
-
if (ref.current && !ref.current.contains(e.target)) setOpen(false);
|
|
36
|
-
});
|
|
37
|
-
useEffect(() => {
|
|
38
|
-
window.addEventListener("click", onClick);
|
|
39
|
-
return () => {
|
|
40
|
-
window.removeEventListener("click", onClick);
|
|
41
|
-
};
|
|
42
|
-
}, []);
|
|
43
|
-
return /* @__PURE__ */ jsx(TocPopoverContext, {
|
|
44
|
-
value: useMemo(() => ({
|
|
45
|
-
open,
|
|
46
|
-
setOpen
|
|
47
|
-
}), [setOpen, open]),
|
|
48
|
-
children: /* @__PURE__ */ jsx(Collapsible, {
|
|
49
|
-
open,
|
|
50
|
-
onOpenChange: setOpen,
|
|
51
|
-
"data-toc-popover": "",
|
|
52
|
-
className: cn("sticky top-(--fd-docs-row-2) z-10 [grid-area:toc-popover] h-(--fd-toc-popover-height) xl:hidden max-xl:layout:[--fd-toc-popover-height:--spacing(10)]", className),
|
|
53
|
-
...rest,
|
|
54
|
-
children: /* @__PURE__ */ jsx("header", {
|
|
55
|
-
ref,
|
|
56
|
-
className: cn("border-b backdrop-blur-sm transition-colors", (!isNavTransparent || open) && "bg-fd-background/80", open && "shadow-lg"),
|
|
57
|
-
children
|
|
58
|
-
})
|
|
59
|
-
})
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
function PageTOCPopoverTrigger({ className, ...props }) {
|
|
63
|
-
const { text } = useI18n();
|
|
64
|
-
const { open } = use(TocPopoverContext);
|
|
65
|
-
const items = useTOCItems();
|
|
66
|
-
const active = useActiveAnchor();
|
|
67
|
-
const selected = useMemo(() => items.findIndex((item) => active === item.url.slice(1)), [items, active]);
|
|
68
|
-
const path = useTreePath().at(-1);
|
|
69
|
-
const showItem = selected !== -1 && !open;
|
|
70
|
-
return /* @__PURE__ */ jsxs(CollapsibleTrigger, {
|
|
71
|
-
className: cn("flex w-full h-10 items-center text-sm text-fd-muted-foreground gap-2.5 px-4 py-2.5 text-start focus-visible:outline-none [&_svg]:size-4 md:px-6", className),
|
|
72
|
-
"data-toc-popover-trigger": "",
|
|
73
|
-
...props,
|
|
74
|
-
children: [
|
|
75
|
-
/* @__PURE__ */ jsx(ProgressCircle, {
|
|
76
|
-
value: (selected + 1) / Math.max(1, items.length),
|
|
77
|
-
max: 1,
|
|
78
|
-
className: cn("shrink-0", open && "text-fd-primary")
|
|
79
|
-
}),
|
|
80
|
-
/* @__PURE__ */ jsxs("span", {
|
|
81
|
-
className: "grid flex-1 *:my-auto *:row-start-1 *:col-start-1",
|
|
82
|
-
children: [/* @__PURE__ */ jsx("span", {
|
|
83
|
-
className: cn("truncate transition-[opacity,translate,color]", open && "text-fd-foreground", showItem && "opacity-0 -translate-y-full pointer-events-none"),
|
|
84
|
-
children: path?.name ?? text.toc
|
|
85
|
-
}), /* @__PURE__ */ jsx("span", {
|
|
86
|
-
className: cn("truncate transition-[opacity,translate]", !showItem && "opacity-0 translate-y-full pointer-events-none"),
|
|
87
|
-
children: items[selected]?.title
|
|
88
|
-
})]
|
|
89
|
-
}),
|
|
90
|
-
/* @__PURE__ */ jsx(ChevronDown, { className: cn("shrink-0 transition-transform mx-0.5", open && "rotate-180") })
|
|
91
|
-
]
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
function clamp(input, min, max) {
|
|
95
|
-
if (input < min) return min;
|
|
96
|
-
if (input > max) return max;
|
|
97
|
-
return input;
|
|
98
|
-
}
|
|
99
|
-
function ProgressCircle({ value, strokeWidth = 2, size = 24, min = 0, max = 100, ...restSvgProps }) {
|
|
100
|
-
const normalizedValue = clamp(value, min, max);
|
|
101
|
-
const radius = (size - strokeWidth) / 2;
|
|
102
|
-
const circumference = 2 * Math.PI * radius;
|
|
103
|
-
const progress = normalizedValue / max * circumference;
|
|
104
|
-
const circleProps = {
|
|
105
|
-
cx: size / 2,
|
|
106
|
-
cy: size / 2,
|
|
107
|
-
r: radius,
|
|
108
|
-
fill: "none",
|
|
109
|
-
strokeWidth
|
|
110
|
-
};
|
|
111
|
-
return /* @__PURE__ */ jsxs("svg", {
|
|
112
|
-
role: "progressbar",
|
|
113
|
-
viewBox: `0 0 ${size} ${size}`,
|
|
114
|
-
"aria-valuenow": normalizedValue,
|
|
115
|
-
"aria-valuemin": min,
|
|
116
|
-
"aria-valuemax": max,
|
|
117
|
-
...restSvgProps,
|
|
118
|
-
children: [/* @__PURE__ */ jsx("circle", {
|
|
119
|
-
...circleProps,
|
|
120
|
-
className: "stroke-current/25"
|
|
121
|
-
}), /* @__PURE__ */ jsx("circle", {
|
|
122
|
-
...circleProps,
|
|
123
|
-
stroke: "currentColor",
|
|
124
|
-
strokeDasharray: circumference,
|
|
125
|
-
strokeDashoffset: circumference - progress,
|
|
126
|
-
strokeLinecap: "round",
|
|
127
|
-
transform: `rotate(-90 ${size / 2} ${size / 2})`,
|
|
128
|
-
className: "transition-all"
|
|
129
|
-
})]
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
function PageTOCPopoverContent(props) {
|
|
133
|
-
return /* @__PURE__ */ jsx(CollapsibleContent, {
|
|
134
|
-
"data-toc-popover-content": "",
|
|
135
|
-
...props,
|
|
136
|
-
className: cn("flex flex-col px-4 max-h-[50vh] md:px-6", props.className),
|
|
137
|
-
children: props.children
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
//#endregion
|
|
141
|
-
export { TOCPopover };
|