@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.
- package/dist/fuma/fuma-page-genarator.js +3 -4
- package/dist/fuma/fuma-page-genarator.mjs +3 -4
- package/dist/fuma/mdx/index.d.ts +1 -0
- package/dist/fuma/mdx/index.js +5 -0
- package/dist/fuma/mdx/index.mjs +1 -0
- package/dist/fuma/mdx/toc-clerk-portable.d.ts +19 -0
- package/dist/fuma/mdx/toc-clerk-portable.js +328 -0
- package/dist/fuma/mdx/toc-clerk-portable.mjs +304 -0
- package/dist/main/delayed-img.js +1 -1
- package/dist/main/delayed-img.mjs +1 -1
- package/dist/main/gallery/gallery-mobile-swiper.js +2 -2
- package/dist/main/gallery/gallery-mobile-swiper.mjs +2 -2
- package/dist/main/index.js +1 -0
- package/dist/main/index.mjs +1 -1
- package/dist/main/loading.d.ts +1 -0
- package/dist/main/loading.js +7 -0
- package/dist/main/loading.mjs +7 -1
- package/dist/main/snake-loading-frame.js +3 -3
- package/dist/main/snake-loading-frame.mjs +3 -3
- package/dist/node_modules/.pnpm/{katex@0.16.38 → katex@0.16.43}/node_modules/katex/dist/katex.js +50 -16
- package/dist/node_modules/.pnpm/{katex@0.16.38 → katex@0.16.43}/node_modules/katex/dist/katex.mjs +50 -16
- package/dist/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/chunk-ABZYJK2D.js +1 -1
- package/dist/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/chunk-ABZYJK2D.mjs +1 -1
- package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/swiper-core.js +2 -1
- package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/swiper-core.mjs +2 -1
- package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/swiper-react.js +2 -2
- package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/swiper-react.mjs +2 -2
- package/package.json +1 -1
- package/src/fuma/fuma-page-genarator.tsx +11 -5
- package/src/fuma/mdx/index.ts +1 -0
- package/src/fuma/mdx/toc-clerk-portable.tsx +623 -0
- package/src/main/delayed-img.tsx +0 -1
- package/src/main/loading.tsx +8 -0
- package/src/main/snake-loading-frame.tsx +3 -3
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/dist/node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/utils/transform.js +0 -16
- package/dist/node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/utils/transform.mjs +0 -14
- /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/modules/pagination.js +0 -0
- /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/modules/pagination.mjs +0 -0
- /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/classes-to-selector.js +0 -0
- /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/classes-to-selector.mjs +0 -0
- /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
- /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
- /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/ssr-window.esm.js +0 -0
- /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/ssr-window.esm.mjs +0 -0
- /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/update-on-virtual-data.js +0 -0
- /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/update-on-virtual-data.mjs +0 -0
- /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/update-swiper.js +0 -0
- /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/update-swiper.mjs +0 -0
- /package/dist/node_modules/.pnpm/{swiper@12.1.2 → swiper@12.1.3}/node_modules/swiper/shared/utils.js +0 -0
- /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 };
|
package/dist/main/delayed-img.js
CHANGED
|
@@ -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,
|
|
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,
|
|
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.
|
|
6
|
-
var pagination = require('../../node_modules/.pnpm/swiper@12.1.
|
|
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.
|
|
4
|
-
import Pagination from '../../node_modules/.pnpm/swiper@12.1.
|
|
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
|
|
package/dist/main/index.js
CHANGED
|
@@ -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;
|
package/dist/main/index.mjs
CHANGED
|
@@ -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';
|
package/dist/main/loading.d.ts
CHANGED
package/dist/main/loading.js
CHANGED
|
@@ -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;
|
package/dist/main/loading.mjs
CHANGED
|
@@ -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 =
|
|
15
|
-
const DEFAULT_RECT_STROKE =
|
|
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 =
|
|
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 =
|
|
13
|
-
const DEFAULT_RECT_STROKE =
|
|
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 =
|
|
17
|
+
const RECT_MIN_STROKE_WIDTH = 1;
|
|
18
18
|
function clampProgress(progress) {
|
|
19
19
|
if (!Number.isFinite(progress)) {
|
|
20
20
|
return 0;
|
package/dist/node_modules/.pnpm/{katex@0.16.38 → katex@0.16.43}/node_modules/katex/dist/katex.js
RENAMED
|
@@ -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 + "
|
|
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)
|
|
8255
|
-
var height = (viewBoxHeight / 1000)
|
|
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 + "
|
|
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", "\\
|
|
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(
|
|
9230
|
+
handler(_ref6, args) {
|
|
9193
9231
|
var {
|
|
9194
9232
|
parser
|
|
9195
|
-
} =
|
|
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(["
|
|
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(["
|
|
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:
|
|
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.
|
|
16409
|
+
var version = "0.16.43";
|
|
16376
16410
|
var __domTree = {
|
|
16377
16411
|
Span,
|
|
16378
16412
|
Anchor,
|