@windrun-huaiin/third-ui 14.3.0 → 14.4.0

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 (60) hide show
  1. package/dist/fuma/fuma-page-genarator.js +3 -4
  2. package/dist/fuma/fuma-page-genarator.mjs +3 -4
  3. package/dist/fuma/mdx/index.d.ts +1 -0
  4. package/dist/fuma/mdx/index.js +5 -0
  5. package/dist/fuma/mdx/index.mjs +1 -0
  6. package/dist/fuma/mdx/toc-clerk-portable.d.ts +19 -0
  7. package/dist/fuma/mdx/toc-clerk-portable.js +328 -0
  8. package/dist/fuma/mdx/toc-clerk-portable.mjs +304 -0
  9. package/dist/main/delayed-img.js +1 -1
  10. package/dist/main/delayed-img.mjs +1 -1
  11. package/dist/main/gallery/gallery-mobile-swiper.js +2 -2
  12. package/dist/main/gallery/gallery-mobile-swiper.mjs +2 -2
  13. package/dist/main/index.js +1 -0
  14. package/dist/main/index.mjs +1 -1
  15. package/dist/main/loading.d.ts +1 -0
  16. package/dist/main/loading.js +7 -0
  17. package/dist/main/loading.mjs +7 -1
  18. package/dist/main/snake-loading-frame.js +3 -3
  19. package/dist/main/snake-loading-frame.mjs +3 -3
  20. package/dist/node_modules/.pnpm/{katex@0.16.38 → katex@0.16.43}/node_modules/katex/dist/katex.js +50 -16
  21. package/dist/node_modules/.pnpm/{katex@0.16.38 → katex@0.16.43}/node_modules/katex/dist/katex.mjs +50 -16
  22. package/dist/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/chunk-ABZYJK2D.js +1 -1
  23. package/dist/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/chunk-ABZYJK2D.mjs +1 -1
  24. package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/swiper-core.js +2 -1
  25. package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/swiper-core.mjs +2 -1
  26. package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/swiper-react.js +2 -2
  27. package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/swiper-react.mjs +2 -2
  28. package/package.json +1 -1
  29. package/src/fuma/fuma-page-genarator.tsx +11 -5
  30. package/src/fuma/mdx/index.ts +1 -0
  31. package/src/fuma/mdx/toc-clerk-portable.tsx +623 -0
  32. package/src/main/delayed-img.tsx +0 -1
  33. package/src/main/loading.tsx +8 -0
  34. package/src/main/snake-loading-frame.tsx +3 -3
  35. package/dist/node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/framer-motion/dist/es/utils/use-animation-frame.js +0 -24
  36. package/dist/node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/framer-motion/dist/es/utils/use-animation-frame.mjs +0 -22
  37. package/dist/node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/framer-motion/dist/es/value/use-combine-values.js +0 -40
  38. package/dist/node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/framer-motion/dist/es/value/use-combine-values.mjs +0 -38
  39. package/dist/node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/framer-motion/dist/es/value/use-computed.js +0 -22
  40. package/dist/node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/framer-motion/dist/es/value/use-computed.mjs +0 -20
  41. package/dist/node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/framer-motion/dist/es/value/use-motion-value.js +0 -41
  42. package/dist/node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/framer-motion/dist/es/value/use-motion-value.mjs +0 -39
  43. package/dist/node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/framer-motion/dist/es/value/use-transform.js +0 -50
  44. package/dist/node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/framer-motion/dist/es/value/use-transform.mjs +0 -48
  45. package/dist/node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/utils/transform.js +0 -16
  46. package/dist/node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/utils/transform.mjs +0 -14
  47. /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/modules/pagination.js +0 -0
  48. /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/modules/pagination.mjs +0 -0
  49. /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/classes-to-selector.js +0 -0
  50. /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/classes-to-selector.mjs +0 -0
  51. /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/create-element-if-not-defined.js +0 -0
  52. /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/create-element-if-not-defined.mjs +0 -0
  53. /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/ssr-window.esm.js +0 -0
  54. /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/ssr-window.esm.mjs +0 -0
  55. /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/update-on-virtual-data.js +0 -0
  56. /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/update-on-virtual-data.mjs +0 -0
  57. /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/update-swiper.js +0 -0
  58. /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/update-swiper.mjs +0 -0
  59. /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/utils.js +0 -0
  60. /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/utils.mjs +0 -0
@@ -0,0 +1,304 @@
1
+ "use client";
2
+ import { __rest } from '../../node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.46.2_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.mjs';
3
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
+ import * as Primitive from 'fumadocs-core/toc';
5
+ import { PageTOC, PageTOCTitle, PageTOCPopover, PageTOCPopoverTrigger, PageTOCPopoverContent } from 'fumadocs-ui/layouts/docs/page';
6
+ import { useRef, useState, useMemo, useLayoutEffect } from 'react';
7
+ import { themeSvgIconColor, themeIconColor } from '@windrun-huaiin/base-ui/lib';
8
+
9
+ // Base stroke width for both the inactive rail and the active highlight path.
10
+ const CLERK_PATH_STROKE_WIDTH = 1;
11
+ // Radius of the moving endpoint dot that marks the latest active heading.
12
+ const CLERK_ACTIVE_DOT_RADIUS = 2;
13
+ // Max vertical space reserved for a turn inside the gap between two headings.
14
+ const CLERK_TURN_CURVE_HEIGHT = 12;
15
+ // Multiplier for bezier control points; higher values make the turn rounder.
16
+ const CLERK_TURN_CONTROL_FACTOR = 0.68;
17
+ // Safety margin that keeps turns away from the heading rows themselves.
18
+ const CLERK_TURN_GAP_MARGIN = 7;
19
+ function PortableClerkTOC({ toc, header, footer, title, emptyLabel = 'No headings', className, }) {
20
+ return (jsxs(PageTOC, { className: className, children: [header, title !== null && title !== void 0 ? title : jsx(PageTOCTitle, {}), jsx(PortableClerkTOCScrollArea, { children: jsx(PortableClerkTOCItems, { toc: toc, emptyLabel: emptyLabel }) }), footer] }));
21
+ }
22
+ function PortableClerkTOCPopover({ toc, header, footer, emptyLabel = 'No headings', }) {
23
+ return (jsxs(PageTOCPopover, { children: [jsx(PageTOCPopoverTrigger, {}), jsxs(PageTOCPopoverContent, { children: [header, jsx(PortableClerkTOCScrollArea, { children: jsx(PortableClerkTOCItems, { toc: toc, emptyLabel: emptyLabel }) }), footer] })] }));
24
+ }
25
+ function PortableClerkTOCScrollArea(_a) {
26
+ var { ref, className } = _a, props = __rest(_a, ["ref", "className"]);
27
+ const viewRef = useRef(null);
28
+ return (jsx("div", Object.assign({ ref: mergeRefs(viewRef, ref), className: cn('relative min-h-0 text-sm ms-px overflow-auto [scrollbar-width:none] mask-[linear-gradient(to_bottom,transparent,white_16px,white_calc(100%-16px),transparent)] py-3', className) }, props, { children: jsx(Primitive.ScrollProvider, { containerRef: viewRef, children: props.children }) })));
29
+ }
30
+ function PortableClerkTOCItems(_a) {
31
+ var { toc, emptyLabel = 'No headings', ref, className } = _a, props = __rest(_a, ["toc", "emptyLabel", "ref", "className"]);
32
+ const containerRef = useRef(null);
33
+ const activeAnchors = Primitive.useActiveAnchors();
34
+ const itemRefs = useRef([]);
35
+ const contentRefs = useRef([]);
36
+ const [layout, setLayout] = useState({
37
+ height: 0,
38
+ items: [],
39
+ });
40
+ const metas = useMemo(() => toc.map(resolveClerkItem), [toc]);
41
+ const outlinePath = useMemo(() => buildOutlinePath(layout.items), [layout.items]);
42
+ const activeItems = useMemo(() => getActiveItems(layout.items, activeAnchors), [activeAnchors, layout.items]);
43
+ const activePath = useMemo(() => buildOutlinePath(activeItems), [activeItems]);
44
+ const activeEndpoint = useMemo(() => getActiveEndpoint(activeItems), [activeItems]);
45
+ useLayoutEffect(() => {
46
+ const container = containerRef.current;
47
+ if (!container)
48
+ return;
49
+ let frame = 0;
50
+ const updateLayout = () => {
51
+ frame = 0;
52
+ const nextItems = metas.flatMap((meta, index) => {
53
+ const element = itemRefs.current[index];
54
+ const content = contentRefs.current[index];
55
+ if (!element || !content)
56
+ return [];
57
+ const y = measureItemLineY(element, content);
58
+ return [
59
+ {
60
+ url: meta.item.url,
61
+ y,
62
+ x: meta.lineOffset,
63
+ stepNumber: meta.stepNumber,
64
+ },
65
+ ];
66
+ });
67
+ setLayout((prev) => {
68
+ const next = {
69
+ height: container.clientHeight,
70
+ items: nextItems,
71
+ };
72
+ if (isSameLayout(prev, next))
73
+ return prev;
74
+ return next;
75
+ });
76
+ };
77
+ const queueUpdate = () => {
78
+ if (frame !== 0)
79
+ cancelAnimationFrame(frame);
80
+ frame = requestAnimationFrame(updateLayout);
81
+ };
82
+ queueUpdate();
83
+ const observer = new ResizeObserver(queueUpdate);
84
+ observer.observe(container);
85
+ for (const element of itemRefs.current) {
86
+ if (element)
87
+ observer.observe(element);
88
+ }
89
+ return () => {
90
+ if (frame !== 0)
91
+ cancelAnimationFrame(frame);
92
+ observer.disconnect();
93
+ };
94
+ }, [metas]);
95
+ if (toc.length === 0) {
96
+ return (jsx("div", { className: "rounded-lg border bg-fd-card p-3 text-xs text-fd-muted-foreground", children: emptyLabel }));
97
+ }
98
+ return (jsxs("div", Object.assign({ ref: mergeRefs(containerRef, ref), className: cn('relative flex flex-col', className) }, props, { children: [jsx(ClerkOutline, { path: outlinePath, items: layout.items, activePath: activePath, activeAnchors: activeAnchors, activeEndpoint: activeEndpoint }), metas.map((meta, i) => (jsx(PortableClerkTOCItem, { item: meta.item, isActive: activeAnchors.includes(meta.item.url.slice(1)), resolvedContent: meta.resolvedContent, itemPadding: meta.itemPadding, contentRef: (node) => {
99
+ contentRefs.current[i] = node;
100
+ }, ref: (node) => {
101
+ itemRefs.current[i] = node;
102
+ } }, meta.item.url)))] })));
103
+ }
104
+ function PortableClerkTOCItem({ item, isActive, resolvedContent, itemPadding, contentRef, ref, }) {
105
+ return (jsx(Primitive.TOCItem, { ref: ref, href: item.url, "data-clerk-item": "", style: {
106
+ paddingInlineStart: itemPadding,
107
+ }, className: cn('prose group relative py-1.5 text-sm transition-colors wrap-anywhere first:pt-0 last:pb-0 hover:text-fd-accent-foreground', isActive ? themeIconColor : 'text-fd-muted-foreground'), children: jsx("span", { ref: contentRef, className: "relative z-10", children: resolvedContent }) }));
108
+ }
109
+ function ClerkOutline({ path, items, activePath, activeAnchors, activeEndpoint, }) {
110
+ if (!path)
111
+ return null;
112
+ const activeSet = new Set(activeAnchors);
113
+ return (jsxs(Fragment, { children: [jsx("svg", { "aria-hidden": "true", className: "pointer-events-none absolute inset-0 z-0 overflow-visible", width: "100%", height: "100%", children: jsx("path", { d: path, className: "stroke-fd-foreground/15", fill: "none", strokeWidth: CLERK_PATH_STROKE_WIDTH, strokeLinecap: "round", strokeLinejoin: "round" }) }), jsx("svg", { "aria-hidden": "true", className: "pointer-events-none absolute inset-0 z-0 overflow-visible", width: "100%", height: "100%", children: activePath ? (jsx("path", { d: activePath, fill: "none", strokeWidth: CLERK_PATH_STROKE_WIDTH, strokeLinecap: "round", strokeLinejoin: "round", stroke: themeSvgIconColor })) : null }), jsx("svg", { "aria-hidden": "true", className: "pointer-events-none absolute inset-0 z-0 overflow-visible", width: "100%", height: "100%", children: activeEndpoint ? (jsx("circle", { cx: activeEndpoint.x, cy: activeEndpoint.y, r: CLERK_ACTIVE_DOT_RADIUS, fill: themeSvgIconColor })) : null }), jsx("svg", { "aria-hidden": "true", className: "pointer-events-none absolute inset-0 z-1 overflow-visible", width: "100%", height: "100%", children: items.map((item) => {
114
+ if (!item.stepNumber)
115
+ return null;
116
+ const isActive = activeSet.has(item.url.slice(1));
117
+ return (jsxs("g", { transform: `translate(${item.x}, ${item.y})`, children: [jsx("circle", { r: "7", fill: isActive ? themeSvgIconColor : undefined, className: cn(!isActive && 'fill-black dark:fill-white') }), jsx("text", { y: "0.5", textAnchor: "middle", dominantBaseline: "middle", className: "fill-white text-[9px] font-medium dark:fill-black", children: item.stepNumber })] }, item.url));
118
+ }) })] }));
119
+ }
120
+ function getItemOffset(depth) {
121
+ if (depth <= 2)
122
+ return 14;
123
+ if (depth === 3)
124
+ return 26;
125
+ return 36;
126
+ }
127
+ function getLineOffset(depth) {
128
+ return depth >= 3 ? 18 : 6;
129
+ }
130
+ function getVisualLinePosition(depth) {
131
+ return getLineOffset(depth);
132
+ }
133
+ function resolveClerkItem(item) {
134
+ const isH3 = item.depth === 3;
135
+ const rawTitle = typeof item.title === 'string' ? item.title : '';
136
+ const { isStep, displayStep, content } = getStepInfoFromTitle(rawTitle);
137
+ let stepNumber = isH3 && isStep ? String(displayStep) : null;
138
+ let resolvedContent = item.title;
139
+ if (isH3 && isStep) {
140
+ resolvedContent = content !== null && content !== void 0 ? content : item.title;
141
+ }
142
+ if (isH3 && !stepNumber) {
143
+ const urlNum = getDigitsFromUrl(item.url);
144
+ if (urlNum != null) {
145
+ const clamped = Math.max(0, Math.min(19, urlNum));
146
+ stepNumber = String(clamped);
147
+ if (typeof rawTitle === 'string') {
148
+ const match = rawTitle.match(/^(\d+(?:\.\d+)*\.?)\s+(.+)$/);
149
+ if (match === null || match === void 0 ? void 0 : match[2]) {
150
+ resolvedContent = match[2];
151
+ }
152
+ }
153
+ }
154
+ }
155
+ return {
156
+ item,
157
+ resolvedContent,
158
+ stepNumber,
159
+ itemPadding: getItemOffset(item.depth),
160
+ lineOffset: getVisualLinePosition(item.depth),
161
+ };
162
+ }
163
+ function buildOutlinePath(items) {
164
+ if (items.length === 0)
165
+ return '';
166
+ const [first] = items;
167
+ const last = items.at(-1);
168
+ if (!last)
169
+ return '';
170
+ let path = `M ${round(first.x)} ${round(first.y)}`;
171
+ for (let i = 1; i < items.length; i++) {
172
+ path += ` ${buildTurnSegment(items[i - 1], items[i])}`;
173
+ }
174
+ return path;
175
+ }
176
+ function buildTurnSegment(previous, current) {
177
+ if (Math.abs(previous.x - current.x) <= 0.5) {
178
+ return `L ${round(current.x)} ${round(current.y)}`;
179
+ }
180
+ const distanceY = current.y - previous.y;
181
+ if (distanceY <= 0) {
182
+ return `L ${round(current.x)} ${round(current.y)}`;
183
+ }
184
+ const gapMidY = previous.y + distanceY / 2;
185
+ const maxCurveHeight = Math.max(distanceY - CLERK_TURN_GAP_MARGIN * 2, 0);
186
+ const curveHeight = Math.min(CLERK_TURN_CURVE_HEIGHT, Math.max(maxCurveHeight, 0));
187
+ if (curveHeight <= 0.5) {
188
+ return `L ${round(current.x)} ${round(current.y)}`;
189
+ }
190
+ const turnStartY = gapMidY - curveHeight / 2;
191
+ const turnEndY = gapMidY + curveHeight / 2;
192
+ const controlDelta = curveHeight * CLERK_TURN_CONTROL_FACTOR;
193
+ return [
194
+ `L ${round(previous.x)} ${round(turnStartY)}`,
195
+ `C ${round(previous.x)} ${round(turnStartY + controlDelta)} ${round(current.x)} ${round(turnEndY - controlDelta)} ${round(current.x)} ${round(turnEndY)}`,
196
+ `L ${round(current.x)} ${round(current.y)}`,
197
+ ].join(' ');
198
+ }
199
+ function getActiveItems(items, activeAnchors) {
200
+ if (items.length === 0 || activeAnchors.length === 0)
201
+ return [];
202
+ return items.filter((item) => activeAnchors.includes(item.url.slice(1)));
203
+ }
204
+ function getActiveEndpoint(items) {
205
+ if (items.length === 0)
206
+ return null;
207
+ const last = items.at(-1);
208
+ if (!last)
209
+ return null;
210
+ return {
211
+ x: last.x,
212
+ y: last.y,
213
+ };
214
+ }
215
+ function isSameLayout(previous, next) {
216
+ if (Math.abs(previous.height - next.height) > 0.5)
217
+ return false;
218
+ if (previous.items.length !== next.items.length)
219
+ return false;
220
+ for (let i = 0; i < previous.items.length; i++) {
221
+ const prev = previous.items[i];
222
+ const curr = next.items[i];
223
+ if (!prev || !curr)
224
+ return false;
225
+ if (prev.url !== curr.url || prev.stepNumber !== curr.stepNumber) {
226
+ return false;
227
+ }
228
+ if (Math.abs(prev.y - curr.y) > 0.5)
229
+ return false;
230
+ if (Math.abs(prev.x - curr.x) > 0.5)
231
+ return false;
232
+ }
233
+ return true;
234
+ }
235
+ function measureItemLineY(element, content) {
236
+ const anchorRect = element.getBoundingClientRect();
237
+ const lineRects = Array.from(content.getClientRects()).filter((rect) => rect.height > 0);
238
+ if (lineRects.length > 0) {
239
+ const lastRect = lineRects.at(-1);
240
+ if (lastRect) {
241
+ return (element.offsetTop +
242
+ (lastRect.top - anchorRect.top) +
243
+ lastRect.height / 2);
244
+ }
245
+ }
246
+ const styles = getComputedStyle(element);
247
+ const top = element.offsetTop + parseFloat(styles.paddingTop);
248
+ const bottom = element.offsetTop +
249
+ element.clientHeight -
250
+ parseFloat(styles.paddingBottom);
251
+ return (top + bottom) / 2;
252
+ }
253
+ function round(value) {
254
+ return Number(value.toFixed(2));
255
+ }
256
+ function getDigitsFromUrl(url) {
257
+ const match = /^#(\d+)-/.exec(url);
258
+ if (!match)
259
+ return null;
260
+ const value = Number.parseInt(match[1], 10);
261
+ return Number.isNaN(value) ? null : value;
262
+ }
263
+ function getStepInfoFromTitle(title) {
264
+ var _a;
265
+ const trimmed = title.trim();
266
+ const match = trimmed.match(/^(\d+(?:\.\d+)*\.?)\s+(.+)$/);
267
+ if (!match)
268
+ return { isStep: false, displayStep: null, content: null };
269
+ const content = ((_a = match[2]) !== null && _a !== void 0 ? _a : '').trim();
270
+ if (content.length === 0) {
271
+ return { isStep: false, displayStep: null, content: null };
272
+ }
273
+ const numericPart = match[1].replace(/\.$/, '');
274
+ const parts = numericPart.split('.').map((part) => Number.parseInt(part, 10));
275
+ const lastPart = parts.at(-1);
276
+ if (lastPart == null || Number.isNaN(lastPart)) {
277
+ return { isStep: false, displayStep: null, content: null };
278
+ }
279
+ const clamped = Math.max(0, Math.min(19, lastPart));
280
+ return { isStep: true, displayStep: clamped, content };
281
+ }
282
+ function cn(...inputs) {
283
+ return inputs.filter(Boolean).join(' ');
284
+ }
285
+ function mergeRefs(...refs) {
286
+ return (node) => {
287
+ for (const ref of refs) {
288
+ if (!ref)
289
+ continue;
290
+ if (typeof ref === 'function') {
291
+ ref(node);
292
+ continue;
293
+ }
294
+ try {
295
+ ref.current = node;
296
+ }
297
+ catch (_a) {
298
+ // ignore readonly refs
299
+ }
300
+ }
301
+ };
302
+ }
303
+
304
+ export { PortableClerkTOC, PortableClerkTOCItems, PortableClerkTOCPopover, PortableClerkTOCScrollArea };
@@ -30,7 +30,7 @@ function DelayedImg(_a) {
30
30
  }, ENV_DELAY_MS);
31
31
  return () => window.clearTimeout(timer);
32
32
  }, [isMounted, shouldDelay]);
33
- return (jsxRuntime.jsxs("div", { className: utils.cn("relative", wrapperClassName), children: [(!isMounted || !isLoaded) && (jsxRuntime.jsx(snakeLoadingFrame.SnakeLoadingFrame, { shape: "rounded-rect", loading: true, themeColor: lib.themeSvgIconColor, strokeWidth: 3, className: utils.cn("absolute inset-0 rounded-[inherit] border shadow-sm bg-white/70 dark:bg-white/5", lib.themeBgColor, placeholderClassName), contentClassName: "h-full w-full", children: jsxRuntime.jsx("div", { "aria-hidden": "true", className: "absolute inset-0 rounded-[inherit] bg-white/20 dark:bg-white/0" }) })), isMounted && (jsxRuntime.jsx(Image, Object.assign({}, imageProps, { alt: alt, onLoad: (event) => {
33
+ return (jsxRuntime.jsxs("div", { className: utils.cn("relative", wrapperClassName), children: [(!isMounted || !isLoaded) && (jsxRuntime.jsx(snakeLoadingFrame.SnakeLoadingFrame, { shape: "rounded-rect", loading: true, themeColor: lib.themeSvgIconColor, className: utils.cn("absolute inset-0 rounded-[inherit] border shadow-sm bg-white/70 dark:bg-white/5", lib.themeBgColor, placeholderClassName), contentClassName: "h-full w-full", children: jsxRuntime.jsx("div", { "aria-hidden": "true", className: "absolute inset-0 rounded-[inherit] bg-white/20 dark:bg-white/0" }) })), isMounted && (jsxRuntime.jsx(Image, Object.assign({}, imageProps, { alt: alt, onLoad: (event) => {
34
34
  setIsLoaded(true);
35
35
  onLoad === null || onLoad === void 0 ? void 0 : onLoad(event);
36
36
  }, className: utils.cn("transition duration-300", isLoaded ? "opacity-100" : "opacity-0", className) })))] }));
@@ -28,7 +28,7 @@ function DelayedImg(_a) {
28
28
  }, ENV_DELAY_MS);
29
29
  return () => window.clearTimeout(timer);
30
30
  }, [isMounted, shouldDelay]);
31
- return (jsxs("div", { className: cn("relative", wrapperClassName), children: [(!isMounted || !isLoaded) && (jsx(SnakeLoadingFrame, { shape: "rounded-rect", loading: true, themeColor: themeSvgIconColor, strokeWidth: 3, className: cn("absolute inset-0 rounded-[inherit] border shadow-sm bg-white/70 dark:bg-white/5", themeBgColor, placeholderClassName), contentClassName: "h-full w-full", children: jsx("div", { "aria-hidden": "true", className: "absolute inset-0 rounded-[inherit] bg-white/20 dark:bg-white/0" }) })), isMounted && (jsx(Image, Object.assign({}, imageProps, { alt: alt, onLoad: (event) => {
31
+ return (jsxs("div", { className: cn("relative", wrapperClassName), children: [(!isMounted || !isLoaded) && (jsx(SnakeLoadingFrame, { shape: "rounded-rect", loading: true, themeColor: themeSvgIconColor, className: cn("absolute inset-0 rounded-[inherit] border shadow-sm bg-white/70 dark:bg-white/5", themeBgColor, placeholderClassName), contentClassName: "h-full w-full", children: jsx("div", { "aria-hidden": "true", className: "absolute inset-0 rounded-[inherit] bg-white/20 dark:bg-white/0" }) })), isMounted && (jsx(Image, Object.assign({}, imageProps, { alt: alt, onLoad: (event) => {
32
32
  setIsLoaded(true);
33
33
  onLoad === null || onLoad === void 0 ? void 0 : onLoad(event);
34
34
  }, className: cn("transition duration-300", isLoaded ? "opacity-100" : "opacity-0", className) })))] }));
@@ -2,8 +2,8 @@
2
2
  'use strict';
3
3
 
4
4
  var jsxRuntime = require('react/jsx-runtime');
5
- var swiperReact = require('../../node_modules/.pnpm/swiper@12.1.2/node_modules/swiper/swiper-react.js');
6
- var pagination = require('../../node_modules/.pnpm/swiper@12.1.2/node_modules/swiper/modules/pagination.js');
5
+ var swiperReact = require('../../node_modules/.pnpm/swiper@12.1.3/node_modules/swiper/swiper-react.js');
6
+ var pagination = require('../../node_modules/.pnpm/swiper@12.1.3/node_modules/swiper/modules/pagination.js');
7
7
  var Image = require('next/image');
8
8
  var lib = require('@windrun-huaiin/base-ui/lib');
9
9
 
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from 'react/jsx-runtime';
3
- import { Swiper, SwiperSlide } from '../../node_modules/.pnpm/swiper@12.1.2/node_modules/swiper/swiper-react.mjs';
4
- import Pagination from '../../node_modules/.pnpm/swiper@12.1.2/node_modules/swiper/modules/pagination.mjs';
3
+ import { Swiper, SwiperSlide } from '../../node_modules/.pnpm/swiper@12.1.3/node_modules/swiper/swiper-react.mjs';
4
+ import Pagination from '../../node_modules/.pnpm/swiper@12.1.3/node_modules/swiper/modules/pagination.mjs';
5
5
  import Image from 'next/image';
6
6
  import { themeSvgIconColor } from '@windrun-huaiin/base-ui/lib';
7
7
 
@@ -22,6 +22,7 @@ var creditNavButton = require('./credit/credit-nav-button.js');
22
22
 
23
23
  exports.GoToTop = goToTop.GoToTop;
24
24
  exports.Loading = loading.Loading;
25
+ exports.getLoadingCycleDurationMs = loading.getLoadingCycleDurationMs;
25
26
  exports.NProgressBar = nprogressBar.NProgressBar;
26
27
  exports.AdsAlertDialog = adsAlertDialog.AdsAlertDialog;
27
28
  exports.XButton = xButton.XButton;
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  export { GoToTop } from './go-to-top.mjs';
3
- export { Loading } from './loading.mjs';
3
+ export { Loading, getLoadingCycleDurationMs } from './loading.mjs';
4
4
  export { NProgressBar } from './nprogress-bar.mjs';
5
5
  export { AdsAlertDialog } from './ads-alert-dialog.mjs';
6
6
  export { XButton } from './x-button.mjs';
@@ -1,3 +1,4 @@
1
+ export declare function getLoadingCycleDurationMs(): number;
1
2
  interface LoadingProps {
2
3
  themeColor?: string;
3
4
  compact?: boolean;
@@ -11,6 +11,12 @@ const DOT_SIZE = 6; // px, dot diameter
11
11
  const SPACING = 12; // px, space between dot centers
12
12
  const ANIMATION_DURATION = 1.8; // seconds
13
13
  const STAGGER_DELAY_FACTOR = 0.08; // seconds, delay per unit of distance from center
14
+ function getLoadingCycleDurationMs() {
15
+ const centerX = (NUM_COLS - 1) / 2;
16
+ const centerY = (NUM_ROWS - 1) / 2;
17
+ const furthestDistance = Math.sqrt(Math.pow(centerY, 2) + Math.pow(centerX, 2));
18
+ return (ANIMATION_DURATION + furthestDistance * STAGGER_DELAY_FACTOR) * 1000;
19
+ }
14
20
  function clampChannel(value) {
15
21
  return Math.max(0, Math.min(255, Math.round(value)));
16
22
  }
@@ -95,3 +101,4 @@ function Loading({ themeColor = lib.themeSvgIconColor, compact = false, classNam
95
101
  }
96
102
 
97
103
  exports.Loading = Loading;
104
+ exports.getLoadingCycleDurationMs = getLoadingCycleDurationMs;
@@ -9,6 +9,12 @@ const DOT_SIZE = 6; // px, dot diameter
9
9
  const SPACING = 12; // px, space between dot centers
10
10
  const ANIMATION_DURATION = 1.8; // seconds
11
11
  const STAGGER_DELAY_FACTOR = 0.08; // seconds, delay per unit of distance from center
12
+ function getLoadingCycleDurationMs() {
13
+ const centerX = (NUM_COLS - 1) / 2;
14
+ const centerY = (NUM_ROWS - 1) / 2;
15
+ const furthestDistance = Math.sqrt(Math.pow(centerY, 2) + Math.pow(centerX, 2));
16
+ return (ANIMATION_DURATION + furthestDistance * STAGGER_DELAY_FACTOR) * 1000;
17
+ }
12
18
  function clampChannel(value) {
13
19
  return Math.max(0, Math.min(255, Math.round(value)));
14
20
  }
@@ -92,4 +98,4 @@ function Loading({ themeColor = themeSvgIconColor, compact = false, className, l
92
98
  } }, dot.id))), jsx("div", { className: "absolute inset-0 flex items-center justify-center", style: { pointerEvents: 'none' }, children: jsx("p", { className: cn('text-xl font-semibold text-white', labelClassName), children: label }) })] }) }));
93
99
  }
94
100
 
95
- export { Loading };
101
+ export { Loading, getLoadingCycleDurationMs };
@@ -11,12 +11,12 @@ const TRACK_COLOR = 'rgba(148, 163, 184, 0.22)';
11
11
  const BODY_LENGTH_RATIO = 0.26;
12
12
  const EXIT_DURATION_MS = 260;
13
13
  const LOOP_DURATION_SECONDS = 1.85;
14
- const DEFAULT_CIRCLE_STROKE = 2;
15
- const DEFAULT_RECT_STROKE = 3;
14
+ const DEFAULT_CIRCLE_STROKE = 0.5;
15
+ const DEFAULT_RECT_STROKE = 1;
16
16
  const MIN_FRAME_SIZE = 2;
17
17
  const MIN_BODY_LENGTH = 24;
18
18
  const MAX_BODY_LENGTH_RATIO = 0.36;
19
- const RECT_MIN_STROKE_WIDTH = 3;
19
+ const RECT_MIN_STROKE_WIDTH = 1;
20
20
  function clampProgress(progress) {
21
21
  if (!Number.isFinite(progress)) {
22
22
  return 0;
@@ -9,12 +9,12 @@ const TRACK_COLOR = 'rgba(148, 163, 184, 0.22)';
9
9
  const BODY_LENGTH_RATIO = 0.26;
10
10
  const EXIT_DURATION_MS = 260;
11
11
  const LOOP_DURATION_SECONDS = 1.85;
12
- const DEFAULT_CIRCLE_STROKE = 2;
13
- const DEFAULT_RECT_STROKE = 3;
12
+ const DEFAULT_CIRCLE_STROKE = 0.5;
13
+ const DEFAULT_RECT_STROKE = 1;
14
14
  const MIN_FRAME_SIZE = 2;
15
15
  const MIN_BODY_LENGTH = 24;
16
16
  const MAX_BODY_LENGTH_RATIO = 0.36;
17
- const RECT_MIN_STROKE_WIDTH = 3;
17
+ const RECT_MIN_STROKE_WIDTH = 1;
18
18
  function clampProgress(progress) {
19
19
  if (!Number.isFinite(progress)) {
20
20
  return 0;
@@ -673,6 +673,8 @@ var path = {
673
673
  // hook is from glyph U+21A9 in font KaTeX Main
674
674
  lefthook: "M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",
675
675
  leftlinesegment: "M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",
676
+ leftbracketunder: "M0 0 h120 V290 H399995 v120 H0z\nM0 0 h120 V290 H399995 v120 H0z",
677
+ leftbracketover: "M0 440 h120 V150 H399995 v-120 H0z\nM0 440 h120 V150 H399995 v-120 H0z",
676
678
  leftmapsto: "M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",
677
679
  // tofrom is from glyph U+21C4 in font KaTeX AMS Regular
678
680
  leftToFrom: "M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",
@@ -694,6 +696,8 @@ var path = {
694
696
  rightharpoondownplus: "M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",
695
697
  righthook: "M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",
696
698
  rightlinesegment: "M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",
699
+ rightbracketunder: "M399995 0 h-120 V290 H0 v120 H400000z\nM399995 0 h-120 V290 H0 v120 H400000z",
700
+ rightbracketover: "M399995 440 h-120 V150 H0 v-120 H399995z\nM399995 440 h-120 V150 H0 v-120 H399995z",
697
701
  rightToFrom: "M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",
698
702
  // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular
699
703
  twoheadleftarrow: "M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",
@@ -1189,7 +1193,7 @@ class SymbolNode {
1189
1193
  }
1190
1194
  var styles = "";
1191
1195
  if (this.italic > 0) {
1192
- styles += "margin-right:" + this.italic + "em;";
1196
+ styles += "margin-right:" + makeEm(this.italic) + ";";
1193
1197
  }
1194
1198
  for (var key of Object.keys(this.style)) {
1195
1199
  styles += hyphenate(key) + ":" + this.style[key] + ";";
@@ -3752,6 +3756,10 @@ defineSymbol(math, main, rel, "\u220b", "\\owns");
3752
3756
  // Punctuation
3753
3757
  defineSymbol(math, main, punct, "\u002e", "\\ldotp");
3754
3758
  defineSymbol(math, main, punct, "\u22c5", "\\cdotp");
3759
+ // The KaTeX fonts do not contain U+00B7. Use the centered dot glyph at U+22C5
3760
+ // in both modes, but keep math-mode punctuation spacing only in math mode.
3761
+ defineSymbol(math, main, punct, "\u22c5", "\u00b7");
3762
+ defineSymbol(text, main, textord, "\u22c5", "\u00b7");
3755
3763
  // Misc Symbols
3756
3764
  defineSymbol(math, main, textord, "\u0023", "\\#");
3757
3765
  defineSymbol(text, main, textord, "\u0023", "\\#");
@@ -6395,6 +6403,8 @@ var stretchyCodePoint = {
6395
6403
  xrightarrow: "\u2192",
6396
6404
  underbrace: "\u23df",
6397
6405
  overbrace: "\u23de",
6406
+ underbracket: "\u23b5",
6407
+ overbracket: "\u23b4",
6398
6408
  overgroup: "\u23e0",
6399
6409
  undergroup: "\u23e1",
6400
6410
  overleftrightarrow: "\u2194",
@@ -6505,6 +6515,8 @@ var katexImagesData = {
6505
6515
  xhookrightarrow: [["lefthook", "rightarrow"], 1.08, 522],
6506
6516
  overlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522],
6507
6517
  underlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522],
6518
+ overbracket: [["leftbracketover", "rightbracketover"], 1.6, 440],
6519
+ underbracket: [["leftbracketunder", "rightbracketunder"], 1.6, 410],
6508
6520
  overgroup: [["leftgroup", "rightgroup"], 0.888, 342],
6509
6521
  undergroup: [["leftgroupunder", "rightgroupunder"], 0.888, 342],
6510
6522
  xmapsto: [["leftmapsto", "rightarrow"], 1.5, 522],
@@ -8251,8 +8263,8 @@ var makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, opt
8251
8263
  var viewBoxHeight = Math.round(realHeightTotal * 1000);
8252
8264
  var pathStr = tallDelim(svgLabel, Math.round(midHeight * 1000));
8253
8265
  var path = new PathNode(svgLabel, pathStr);
8254
- var width = (viewBoxWidth / 1000).toFixed(3) + "em";
8255
- var height = (viewBoxHeight / 1000).toFixed(3) + "em";
8266
+ var width = makeEm(viewBoxWidth / 1000);
8267
+ var height = makeEm(viewBoxHeight / 1000);
8256
8268
  var svg = new SvgNode([path], {
8257
8269
  "width": width,
8258
8270
  "height": height,
@@ -9073,7 +9085,7 @@ var mathmlBuilder$6 = (group, options) => {
9073
9085
  var thk = Math.max(options.fontMetrics().fboxrule,
9074
9086
  // default
9075
9087
  options.minRuleThickness);
9076
- node.setAttribute("style", "border: " + thk + "em solid " + String(group.borderColor));
9088
+ node.setAttribute("style", "border: " + makeEm(thk) + " solid " + group.borderColor);
9077
9089
  }
9078
9090
  break;
9079
9091
  case "\\xcancel":
@@ -9161,7 +9173,7 @@ defineFunction({
9161
9173
  });
9162
9174
  defineFunction({
9163
9175
  type: "enclose",
9164
- names: ["\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\phase"],
9176
+ names: ["\\cancel", "\\bcancel", "\\xcancel", "\\phase"],
9165
9177
  props: {
9166
9178
  numArgs: 1
9167
9179
  },
@@ -9181,6 +9193,32 @@ defineFunction({
9181
9193
  htmlBuilder: htmlBuilder$7,
9182
9194
  mathmlBuilder: mathmlBuilder$6
9183
9195
  });
9196
+ defineFunction({
9197
+ type: "enclose",
9198
+ names: ["\\sout"],
9199
+ props: {
9200
+ numArgs: 1,
9201
+ allowedInText: true
9202
+ },
9203
+ handler(_ref5, args) {
9204
+ var {
9205
+ parser,
9206
+ funcName
9207
+ } = _ref5;
9208
+ if (parser.mode === "math") {
9209
+ parser.settings.reportNonstrict("mathVsSout", "LaTeX's \\sout works only in text mode");
9210
+ }
9211
+ var body = args[0];
9212
+ return {
9213
+ type: "enclose",
9214
+ mode: parser.mode,
9215
+ label: funcName,
9216
+ body
9217
+ };
9218
+ },
9219
+ htmlBuilder: htmlBuilder$7,
9220
+ mathmlBuilder: mathmlBuilder$6
9221
+ });
9184
9222
  defineFunction({
9185
9223
  type: "enclose",
9186
9224
  names: ["\\angl"],
@@ -9189,10 +9227,10 @@ defineFunction({
9189
9227
  argTypes: ["hbox"],
9190
9228
  allowedInText: false
9191
9229
  },
9192
- handler(_ref5, args) {
9230
+ handler(_ref6, args) {
9193
9231
  var {
9194
9232
  parser
9195
- } = _ref5;
9233
+ } = _ref6;
9196
9234
  return {
9197
9235
  type: "enclose",
9198
9236
  mode: parser.mode,
@@ -10942,7 +10980,7 @@ var htmlBuilder$3 = (grp, options) => {
10942
10980
  // note long note long note
10943
10981
  // ┏━━━━━━━━┓ or ┏━━━┓ not ┏━━━━━━━━━┓
10944
10982
  // equation eqn eqn
10945
- var vSpan = makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options);
10983
+ var vSpan = makeSpan(["minner", group.isOver ? "mover" : "munder"], [vlist], options);
10946
10984
  if (group.isOver) {
10947
10985
  vlist = makeVList({
10948
10986
  positionType: "firstBaseline",
@@ -10974,7 +11012,7 @@ var htmlBuilder$3 = (grp, options) => {
10974
11012
  });
10975
11013
  }
10976
11014
  }
10977
- return makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options);
11015
+ return makeSpan(["minner", group.isOver ? "mover" : "munder"], [vlist], options);
10978
11016
  };
10979
11017
  var mathmlBuilder$2 = (group, options) => {
10980
11018
  var accentNode = stretchyMathML(group.label);
@@ -10983,7 +11021,7 @@ var mathmlBuilder$2 = (group, options) => {
10983
11021
  // Horizontal stretchy braces
10984
11022
  defineFunction({
10985
11023
  type: "horizBrace",
10986
- names: ["\\overbrace", "\\underbrace"],
11024
+ names: ["\\overbrace", "\\underbrace", "\\overbracket", "\\underbracket"],
10987
11025
  props: {
10988
11026
  numArgs: 1
10989
11027
  },
@@ -10996,7 +11034,7 @@ defineFunction({
10996
11034
  type: "horizBrace",
10997
11035
  mode: parser.mode,
10998
11036
  label: funcName,
10999
- isOver: /^\\over/.test(funcName),
11037
+ isOver: funcName.includes("\\over"),
11000
11038
  base: args[0]
11001
11039
  };
11002
11040
  },
@@ -13768,10 +13806,6 @@ defineMacro("\u210C", "\\mathfrak{H}");
13768
13806
  defineMacro("\u2128", "\\mathfrak{Z}");
13769
13807
  // Define \Bbbk with a macro that works in both HTML and MathML.
13770
13808
  defineMacro("\\Bbbk", "\\Bbb{k}");
13771
- // Unicode middle dot
13772
- // The KaTeX fonts do not contain U+00B7. Instead, \cdotp displays
13773
- // the dot at U+22C5 and gives it punct spacing.
13774
- defineMacro("\u00b7", "\\cdotp");
13775
13809
  // \llap and \rlap render their contents in text mode
13776
13810
  defineMacro("\\llap", "\\mathllap{\\textrm{#1}}");
13777
13811
  defineMacro("\\rlap", "\\mathrlap{\\textrm{#1}}");
@@ -16372,7 +16406,7 @@ var renderToHTMLTree = function renderToHTMLTree(expression, options) {
16372
16406
  return renderError(error, expression, settings);
16373
16407
  }
16374
16408
  };
16375
- var version = "0.16.38";
16409
+ var version = "0.16.43";
16376
16410
  var __domTree = {
16377
16411
  Span,
16378
16412
  Anchor,