@mdigital_ui/ui 0.4.5 → 0.4.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.
- package/README.md +258 -662
- package/dist/anchor/index.js +4 -0
- package/dist/anchor/index.js.map +1 -0
- package/dist/autocomplete/index.js +6 -0
- package/dist/autocomplete/index.js.map +1 -0
- package/dist/breadcrumbs/index.js +3 -3
- package/dist/calendar/index.js +4 -0
- package/dist/calendar/index.js.map +1 -0
- package/dist/chunk-3Z7RLVWD.js +258 -0
- package/dist/chunk-3Z7RLVWD.js.map +1 -0
- package/dist/chunk-5YEC6FDN.js +263 -0
- package/dist/chunk-5YEC6FDN.js.map +1 -0
- package/dist/{chunk-OTNKP5CD.js → chunk-6NXZWLSM.js} +3 -3
- package/dist/{chunk-OTNKP5CD.js.map → chunk-6NXZWLSM.js.map} +1 -1
- package/dist/{chunk-AL2EEKUY.js → chunk-6ROGWFQ2.js} +3 -3
- package/dist/{chunk-AL2EEKUY.js.map → chunk-6ROGWFQ2.js.map} +1 -1
- package/dist/{chunk-LJOQ2C5W.js → chunk-6RZEJRTC.js} +3 -3
- package/dist/{chunk-LJOQ2C5W.js.map → chunk-6RZEJRTC.js.map} +1 -1
- package/dist/chunk-74AF6PO2.js +374 -0
- package/dist/chunk-74AF6PO2.js.map +1 -0
- package/dist/chunk-75N6T3IS.js +77 -0
- package/dist/chunk-75N6T3IS.js.map +1 -0
- package/dist/{chunk-BKLJDEUX.js → chunk-DBPLQZJ2.js} +38 -14
- package/dist/chunk-DBPLQZJ2.js.map +1 -0
- package/dist/{chunk-HVHQA34X.js → chunk-DIUOGEL3.js} +95 -100
- package/dist/chunk-DIUOGEL3.js.map +1 -0
- package/dist/chunk-ED4CQZ72.js +343 -0
- package/dist/chunk-ED4CQZ72.js.map +1 -0
- package/dist/{chunk-4ZXHLPRS.js → chunk-FY2TZ2NT.js} +4 -4
- package/dist/{chunk-4ZXHLPRS.js.map → chunk-FY2TZ2NT.js.map} +1 -1
- package/dist/{chunk-I5AD247M.js → chunk-HKQOAEFY.js} +13 -3
- package/dist/chunk-HKQOAEFY.js.map +1 -0
- package/dist/chunk-JWYBDNC6.js +307 -0
- package/dist/chunk-JWYBDNC6.js.map +1 -0
- package/dist/{chunk-W5VLFE4U.js → chunk-LHZJ2GJU.js} +32 -6
- package/dist/chunk-LHZJ2GJU.js.map +1 -0
- package/dist/{chunk-253JZOYG.js → chunk-NB66D6A5.js} +3 -2
- package/dist/chunk-NB66D6A5.js.map +1 -0
- package/dist/{chunk-BGMYX7L5.js → chunk-NF6JUJBE.js} +9 -7
- package/dist/chunk-NF6JUJBE.js.map +1 -0
- package/dist/chunk-NPK4ESMA.js +281 -0
- package/dist/chunk-NPK4ESMA.js.map +1 -0
- package/dist/{chunk-X7MF3TIF.js → chunk-PD3O6ZH4.js} +12 -5
- package/dist/chunk-PD3O6ZH4.js.map +1 -0
- package/dist/{chunk-HJITFPBT.js → chunk-QDJ5PZPP.js} +14 -9
- package/dist/chunk-QDJ5PZPP.js.map +1 -0
- package/dist/chunk-QEYNOLRC.js +157 -0
- package/dist/chunk-QEYNOLRC.js.map +1 -0
- package/dist/chunk-RNG7HR6U.js +174 -0
- package/dist/chunk-RNG7HR6U.js.map +1 -0
- package/dist/chunk-TDPJYCNI.js +96 -0
- package/dist/chunk-TDPJYCNI.js.map +1 -0
- package/dist/chunk-UFYG3HKL.js +374 -0
- package/dist/chunk-UFYG3HKL.js.map +1 -0
- package/dist/chunk-VNH6R5EU.js +211 -0
- package/dist/chunk-VNH6R5EU.js.map +1 -0
- package/dist/{chunk-XOEEAMMY.js → chunk-X3VT5SSK.js} +88 -98
- package/dist/chunk-X3VT5SSK.js.map +1 -0
- package/dist/{chunk-SFP77VS3.js → chunk-X7JN7WPF.js} +5 -2
- package/dist/chunk-X7JN7WPF.js.map +1 -0
- package/dist/chunk-YRSHBAUQ.js +201 -0
- package/dist/chunk-YRSHBAUQ.js.map +1 -0
- package/dist/chunk-YUACN5GJ.js +303 -0
- package/dist/chunk-YUACN5GJ.js.map +1 -0
- package/dist/color-picker/index.js +6 -0
- package/dist/color-picker/index.js.map +1 -0
- package/dist/date-picker/RangePicker.d.ts.map +1 -1
- package/dist/date-picker/index.d.ts.map +1 -1
- package/dist/date-picker/index.js +1 -1
- package/dist/date-picker/shared.d.ts +5 -0
- package/dist/date-picker/shared.d.ts.map +1 -1
- package/dist/dropdown/index.js +2 -2
- package/dist/float-button/index.js +5 -0
- package/dist/float-button/index.js.map +1 -0
- package/dist/index.js +50 -2995
- package/dist/index.js.map +1 -1
- package/dist/input/index.d.ts.map +1 -1
- package/dist/input/index.js +1 -1
- package/dist/input-password/index.js +2 -2
- package/dist/mentions/index.js +4 -0
- package/dist/mentions/index.js.map +1 -0
- package/dist/menubar/index.d.ts +3 -3
- package/dist/menubar/index.d.ts.map +1 -1
- package/dist/menubar/index.js +2 -2
- package/dist/multi-select/index.d.ts.map +1 -1
- package/dist/multi-select/index.js +4 -4
- package/dist/number-input/index.d.ts.map +1 -1
- package/dist/number-input/index.js +1 -1
- package/dist/qr-code/index.js +5 -0
- package/dist/qr-code/index.js.map +1 -0
- package/dist/resizable/index.js +4 -0
- package/dist/resizable/index.js.map +1 -0
- package/dist/result/index.js +4 -0
- package/dist/result/index.js.map +1 -0
- package/dist/select/index.d.ts.map +1 -1
- package/dist/select/index.js +4 -4
- package/dist/shared/useSelectBase.d.ts.map +1 -1
- package/dist/skeleton/index.d.ts.map +1 -1
- package/dist/skeleton/index.js +1 -1
- package/dist/table/index.js +4 -4
- package/dist/tabs/index.d.ts.map +1 -1
- package/dist/tabs/index.js +1 -1
- package/dist/tags-input/index.js +5 -0
- package/dist/tags-input/index.js.map +1 -0
- package/dist/toast/index.d.ts.map +1 -1
- package/dist/toast/index.js +1 -1
- package/dist/tooltip/index.d.ts.map +1 -1
- package/dist/tooltip/index.js +1 -1
- package/dist/tour/index.js +5 -0
- package/dist/tour/index.js.map +1 -0
- package/dist/typography/index.js +4 -0
- package/dist/typography/index.js.map +1 -0
- package/dist/watermark/index.js +4 -0
- package/dist/watermark/index.js.map +1 -0
- package/package.json +59 -11
- package/styles/global.css +6 -3
- package/dist/chunk-253JZOYG.js.map +0 -1
- package/dist/chunk-BGMYX7L5.js.map +0 -1
- package/dist/chunk-BKLJDEUX.js.map +0 -1
- package/dist/chunk-HJITFPBT.js.map +0 -1
- package/dist/chunk-HVHQA34X.js.map +0 -1
- package/dist/chunk-I5AD247M.js.map +0 -1
- package/dist/chunk-JBNFVXH5.js +0 -322
- package/dist/chunk-JBNFVXH5.js.map +0 -1
- package/dist/chunk-SFP77VS3.js.map +0 -1
- package/dist/chunk-W5VLFE4U.js.map +0 -1
- package/dist/chunk-X7MF3TIF.js.map +0 -1
- package/dist/chunk-XOEEAMMY.js.map +0 -1
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { cn } from './chunk-RAS6HUEI.js';
|
|
2
|
+
import React, { useState, useRef, useCallback, useEffect } from 'react';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
function generateWatermark({
|
|
6
|
+
text,
|
|
7
|
+
image,
|
|
8
|
+
width = 120,
|
|
9
|
+
height = 64,
|
|
10
|
+
rotate = -22,
|
|
11
|
+
gap = [100, 100],
|
|
12
|
+
offset = [0, 0],
|
|
13
|
+
fontSize = 14,
|
|
14
|
+
fontFamily = "sans-serif",
|
|
15
|
+
fontWeight = "normal",
|
|
16
|
+
fontColor = "rgba(0,0,0,0.15)",
|
|
17
|
+
opacity = 1
|
|
18
|
+
}) {
|
|
19
|
+
return new Promise((resolve) => {
|
|
20
|
+
const canvas = document.createElement("canvas");
|
|
21
|
+
const ctx = canvas.getContext("2d");
|
|
22
|
+
const ratio = window.devicePixelRatio || 1;
|
|
23
|
+
const cellWidth = width + gap[0];
|
|
24
|
+
const cellHeight = height + gap[1];
|
|
25
|
+
canvas.width = cellWidth * ratio;
|
|
26
|
+
canvas.height = cellHeight * ratio;
|
|
27
|
+
ctx.scale(ratio, ratio);
|
|
28
|
+
ctx.globalAlpha = opacity;
|
|
29
|
+
ctx.translate(cellWidth / 2 + offset[0], cellHeight / 2 + offset[1]);
|
|
30
|
+
ctx.rotate(rotate * Math.PI / 180);
|
|
31
|
+
if (image) {
|
|
32
|
+
const img = new Image();
|
|
33
|
+
img.crossOrigin = "anonymous";
|
|
34
|
+
img.onload = () => {
|
|
35
|
+
ctx.drawImage(img, -width / 2, -height / 2, width, height);
|
|
36
|
+
resolve(canvas.toDataURL());
|
|
37
|
+
};
|
|
38
|
+
img.onerror = () => resolve("");
|
|
39
|
+
img.src = image;
|
|
40
|
+
} else if (text) {
|
|
41
|
+
ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`;
|
|
42
|
+
ctx.fillStyle = fontColor;
|
|
43
|
+
ctx.textAlign = "center";
|
|
44
|
+
ctx.textBaseline = "middle";
|
|
45
|
+
const lines = Array.isArray(text) ? text : [text];
|
|
46
|
+
const lineHeight = fontSize * 1.5;
|
|
47
|
+
const startY = -((lines.length - 1) * lineHeight) / 2;
|
|
48
|
+
lines.forEach((line, i) => {
|
|
49
|
+
ctx.fillText(line, 0, startY + i * lineHeight);
|
|
50
|
+
});
|
|
51
|
+
resolve(canvas.toDataURL());
|
|
52
|
+
} else {
|
|
53
|
+
resolve("");
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
var Watermark = React.memo(
|
|
58
|
+
({
|
|
59
|
+
children,
|
|
60
|
+
text,
|
|
61
|
+
image,
|
|
62
|
+
width = 120,
|
|
63
|
+
height = 64,
|
|
64
|
+
rotate = -22,
|
|
65
|
+
gap = [100, 100],
|
|
66
|
+
offset = [0, 0],
|
|
67
|
+
fontSize = 14,
|
|
68
|
+
fontFamily = "sans-serif",
|
|
69
|
+
fontWeight = "normal",
|
|
70
|
+
fontColor = "rgba(0,0,0,0.15)",
|
|
71
|
+
opacity = 1,
|
|
72
|
+
zIndex = 10,
|
|
73
|
+
className,
|
|
74
|
+
classNames
|
|
75
|
+
}) => {
|
|
76
|
+
const [bgImage, setBgImage] = useState("");
|
|
77
|
+
const containerRef = useRef(null);
|
|
78
|
+
const watermarkRef = useRef(null);
|
|
79
|
+
const observerRef = useRef(null);
|
|
80
|
+
const render = useCallback(async () => {
|
|
81
|
+
if (typeof window === "undefined") return;
|
|
82
|
+
const dataUrl = await generateWatermark({
|
|
83
|
+
text,
|
|
84
|
+
image,
|
|
85
|
+
width,
|
|
86
|
+
height,
|
|
87
|
+
rotate,
|
|
88
|
+
gap,
|
|
89
|
+
offset,
|
|
90
|
+
fontSize,
|
|
91
|
+
fontFamily,
|
|
92
|
+
fontWeight,
|
|
93
|
+
fontColor,
|
|
94
|
+
opacity
|
|
95
|
+
});
|
|
96
|
+
setBgImage(dataUrl);
|
|
97
|
+
}, [text, image, width, height, rotate, gap, offset, fontSize, fontFamily, fontWeight, fontColor, opacity]);
|
|
98
|
+
useEffect(() => {
|
|
99
|
+
render();
|
|
100
|
+
}, [render]);
|
|
101
|
+
useEffect(() => {
|
|
102
|
+
if (!watermarkRef.current || !containerRef.current) return;
|
|
103
|
+
observerRef.current = new MutationObserver((mutations) => {
|
|
104
|
+
for (const m of mutations) {
|
|
105
|
+
if (m.type === "childList") {
|
|
106
|
+
const removed = Array.from(m.removedNodes);
|
|
107
|
+
if (removed.includes(watermarkRef.current)) {
|
|
108
|
+
render();
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (m.type === "attributes" && m.target === watermarkRef.current) {
|
|
113
|
+
render();
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
observerRef.current.observe(containerRef.current, {
|
|
119
|
+
childList: true,
|
|
120
|
+
subtree: true,
|
|
121
|
+
attributes: true,
|
|
122
|
+
attributeFilter: ["style", "class"]
|
|
123
|
+
});
|
|
124
|
+
return () => observerRef.current?.disconnect();
|
|
125
|
+
}, [render]);
|
|
126
|
+
return /* @__PURE__ */ jsxs(
|
|
127
|
+
"div",
|
|
128
|
+
{
|
|
129
|
+
ref: containerRef,
|
|
130
|
+
"data-slot": "root",
|
|
131
|
+
className: cn("watermark_root", "relative", classNames?.root, className),
|
|
132
|
+
children: [
|
|
133
|
+
/* @__PURE__ */ jsx("div", { "data-slot": "content", className: cn("watermark_content", "relative", classNames?.content), children }),
|
|
134
|
+
bgImage && /* @__PURE__ */ jsx(
|
|
135
|
+
"div",
|
|
136
|
+
{
|
|
137
|
+
ref: watermarkRef,
|
|
138
|
+
"data-slot": "watermark",
|
|
139
|
+
className: cn("watermark_layer", "absolute inset-0 pointer-events-none", classNames?.watermark),
|
|
140
|
+
style: {
|
|
141
|
+
backgroundImage: `url(${bgImage})`,
|
|
142
|
+
backgroundRepeat: "repeat",
|
|
143
|
+
zIndex
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
)
|
|
147
|
+
]
|
|
148
|
+
}
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
);
|
|
152
|
+
Watermark.displayName = "Watermark";
|
|
153
|
+
var watermark_default = Watermark;
|
|
154
|
+
|
|
155
|
+
export { watermark_default };
|
|
156
|
+
//# sourceMappingURL=chunk-QEYNOLRC.js.map
|
|
157
|
+
//# sourceMappingURL=chunk-QEYNOLRC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/watermark/index.tsx"],"names":[],"mappings":"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","file":"chunk-QEYNOLRC.js","sourcesContent":["'use client'\n\nimport React, { useState, useEffect, useCallback, useRef } from 'react'\n\nimport { cn } from '../utils'\nimport type { WatermarkProps } from './types'\n\nfunction generateWatermark({\n text,\n image,\n width = 120,\n height = 64,\n rotate = -22,\n gap = [100, 100] as [number, number],\n offset = [0, 0] as [number, number],\n fontSize = 14,\n fontFamily = 'sans-serif',\n fontWeight = 'normal',\n fontColor = 'rgba(0,0,0,0.15)',\n opacity = 1,\n}: Omit<WatermarkProps, 'children' | 'className' | 'classNames' | 'zIndex'>): Promise<string> {\n return new Promise((resolve) => {\n const canvas = document.createElement('canvas')\n const ctx = canvas.getContext('2d')!\n const ratio = window.devicePixelRatio || 1\n\n const cellWidth = width + gap[0]\n const cellHeight = height + gap[1]\n canvas.width = cellWidth * ratio\n canvas.height = cellHeight * ratio\n ctx.scale(ratio, ratio)\n\n ctx.globalAlpha = opacity\n ctx.translate(cellWidth / 2 + offset[0], cellHeight / 2 + offset[1])\n ctx.rotate((rotate * Math.PI) / 180)\n\n if (image) {\n const img = new Image()\n img.crossOrigin = 'anonymous'\n img.onload = () => {\n ctx.drawImage(img, -width / 2, -height / 2, width, height)\n resolve(canvas.toDataURL())\n }\n img.onerror = () => resolve('')\n img.src = image\n } else if (text) {\n ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`\n ctx.fillStyle = fontColor\n ctx.textAlign = 'center'\n ctx.textBaseline = 'middle'\n\n const lines = Array.isArray(text) ? text : [text]\n const lineHeight = fontSize * 1.5\n const startY = -((lines.length - 1) * lineHeight) / 2\n\n lines.forEach((line, i) => {\n ctx.fillText(line, 0, startY + i * lineHeight)\n })\n resolve(canvas.toDataURL())\n } else {\n resolve('')\n }\n })\n}\n\nconst Watermark = React.memo<WatermarkProps>(\n ({\n children,\n text,\n image,\n width = 120,\n height = 64,\n rotate = -22,\n gap = [100, 100],\n offset = [0, 0],\n fontSize = 14,\n fontFamily = 'sans-serif',\n fontWeight = 'normal',\n fontColor = 'rgba(0,0,0,0.15)',\n opacity = 1,\n zIndex = 10,\n className,\n classNames,\n }) => {\n const [bgImage, setBgImage] = useState('')\n const containerRef = useRef<HTMLDivElement>(null)\n const watermarkRef = useRef<HTMLDivElement>(null)\n const observerRef = useRef<MutationObserver | null>(null)\n\n const render = useCallback(async () => {\n if (typeof window === 'undefined') return\n const dataUrl = await generateWatermark({\n text, image, width, height, rotate, gap, offset, fontSize, fontFamily, fontWeight, fontColor, opacity,\n })\n setBgImage(dataUrl)\n }, [text, image, width, height, rotate, gap, offset, fontSize, fontFamily, fontWeight, fontColor, opacity])\n\n useEffect(() => { render() }, [render])\n\n // Tamper protection: re-render if watermark DOM is modified\n useEffect(() => {\n if (!watermarkRef.current || !containerRef.current) return\n observerRef.current = new MutationObserver((mutations) => {\n for (const m of mutations) {\n if (m.type === 'childList') {\n const removed = Array.from(m.removedNodes)\n if (removed.includes(watermarkRef.current!)) { render(); return }\n }\n if (m.type === 'attributes' && m.target === watermarkRef.current) { render(); return }\n }\n })\n observerRef.current.observe(containerRef.current, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['style', 'class'],\n })\n return () => observerRef.current?.disconnect()\n }, [render])\n\n return (\n <div\n ref={containerRef}\n data-slot=\"root\"\n className={cn('watermark_root', 'relative', classNames?.root, className)}\n >\n <div data-slot=\"content\" className={cn('watermark_content', 'relative', classNames?.content)}>\n {children}\n </div>\n {bgImage && (\n <div\n ref={watermarkRef}\n data-slot=\"watermark\"\n className={cn('watermark_layer', 'absolute inset-0 pointer-events-none', classNames?.watermark)}\n style={{\n backgroundImage: `url(${bgImage})`,\n backgroundRepeat: 'repeat',\n zIndex,\n }}\n />\n )}\n </div>\n )\n },\n)\n\nWatermark.displayName = 'Watermark'\n\nexport type * from './types'\nexport default Watermark\n"]}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { cn } from './chunk-RAS6HUEI.js';
|
|
2
|
+
import React, { useState, useRef, useCallback, useEffect } from 'react';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
var sizeClasses = {
|
|
6
|
+
xs: { link: "text-xs py-0.5 pl-3", indicator: "w-0.5" },
|
|
7
|
+
sm: { link: "text-sm py-0.5 pl-3", indicator: "w-0.5" },
|
|
8
|
+
md: { link: "text-sm py-1 pl-4", indicator: "w-0.5" },
|
|
9
|
+
lg: { link: "text-base py-1 pl-5", indicator: "w-1" }
|
|
10
|
+
};
|
|
11
|
+
function flattenIds(list) {
|
|
12
|
+
return list.flatMap((item) => [item.id, ...item.children ? flattenIds(item.children) : []]);
|
|
13
|
+
}
|
|
14
|
+
function getScrollContainer(getContainer) {
|
|
15
|
+
if (getContainer) return getContainer();
|
|
16
|
+
return typeof window !== "undefined" ? window : null;
|
|
17
|
+
}
|
|
18
|
+
function getContainerRect(container) {
|
|
19
|
+
if (!container || container === window || container instanceof Window) return { top: 0 };
|
|
20
|
+
return container.getBoundingClientRect();
|
|
21
|
+
}
|
|
22
|
+
function scrollTo(container, top) {
|
|
23
|
+
container.scrollTo({ top, behavior: "smooth" });
|
|
24
|
+
}
|
|
25
|
+
var Anchor = React.memo(
|
|
26
|
+
({
|
|
27
|
+
items,
|
|
28
|
+
offset = 0,
|
|
29
|
+
targetOffset = 0,
|
|
30
|
+
size = "md",
|
|
31
|
+
affix = false,
|
|
32
|
+
affixTop = 0,
|
|
33
|
+
getContainer,
|
|
34
|
+
className,
|
|
35
|
+
classNames,
|
|
36
|
+
onChange
|
|
37
|
+
}) => {
|
|
38
|
+
const [activeId, setActiveId] = useState("");
|
|
39
|
+
const [indicatorTop, setIndicatorTop] = useState(0);
|
|
40
|
+
const [indicatorHeight, setIndicatorHeight] = useState(0);
|
|
41
|
+
const navRef = useRef(null);
|
|
42
|
+
const linkRefs = useRef(/* @__PURE__ */ new Map());
|
|
43
|
+
const isScrolling = useRef(false);
|
|
44
|
+
const allIds = flattenIds(items);
|
|
45
|
+
const updateActive = useCallback(() => {
|
|
46
|
+
if (isScrolling.current) return;
|
|
47
|
+
if (typeof window === "undefined") return;
|
|
48
|
+
const container = getScrollContainer(getContainer);
|
|
49
|
+
const containerTop = getContainerRect(container).top;
|
|
50
|
+
let current = "";
|
|
51
|
+
for (const id of allIds) {
|
|
52
|
+
const el = document.getElementById(id);
|
|
53
|
+
if (el) {
|
|
54
|
+
const rect = el.getBoundingClientRect();
|
|
55
|
+
const relativeTop = rect.top - containerTop;
|
|
56
|
+
if (relativeTop <= offset + 10) current = id;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (current && current !== activeId) {
|
|
60
|
+
setActiveId(current);
|
|
61
|
+
onChange?.(current);
|
|
62
|
+
}
|
|
63
|
+
}, [allIds, offset, activeId, onChange, getContainer]);
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
if (typeof window === "undefined") return;
|
|
66
|
+
const container = getScrollContainer(getContainer);
|
|
67
|
+
const target = container instanceof Window ? window : container;
|
|
68
|
+
target.addEventListener("scroll", updateActive, { passive: true });
|
|
69
|
+
updateActive();
|
|
70
|
+
return () => target.removeEventListener("scroll", updateActive);
|
|
71
|
+
}, [updateActive, getContainer]);
|
|
72
|
+
useEffect(() => {
|
|
73
|
+
if (!activeId || !navRef.current) return;
|
|
74
|
+
const linkEl = linkRefs.current.get(activeId);
|
|
75
|
+
if (linkEl) {
|
|
76
|
+
const navRect = navRef.current.getBoundingClientRect();
|
|
77
|
+
const linkRect = linkEl.getBoundingClientRect();
|
|
78
|
+
setIndicatorTop(linkRect.top - navRect.top);
|
|
79
|
+
setIndicatorHeight(linkRect.height);
|
|
80
|
+
}
|
|
81
|
+
}, [activeId]);
|
|
82
|
+
const handleClick = useCallback(
|
|
83
|
+
(e, id) => {
|
|
84
|
+
e.preventDefault();
|
|
85
|
+
const el = document.getElementById(id);
|
|
86
|
+
if (!el) return;
|
|
87
|
+
const container = getScrollContainer(getContainer);
|
|
88
|
+
isScrolling.current = true;
|
|
89
|
+
setActiveId(id);
|
|
90
|
+
onChange?.(id);
|
|
91
|
+
if (container instanceof Window) {
|
|
92
|
+
const y = el.getBoundingClientRect().top + window.scrollY - targetOffset;
|
|
93
|
+
scrollTo(container, y);
|
|
94
|
+
} else {
|
|
95
|
+
const y = el.offsetTop - targetOffset;
|
|
96
|
+
scrollTo(container, y);
|
|
97
|
+
}
|
|
98
|
+
setTimeout(() => {
|
|
99
|
+
isScrolling.current = false;
|
|
100
|
+
}, 800);
|
|
101
|
+
},
|
|
102
|
+
[targetOffset, onChange, getContainer]
|
|
103
|
+
);
|
|
104
|
+
const s = sizeClasses[size];
|
|
105
|
+
const depthPadding = { 0: "", 1: "pl-6", 2: "pl-10", 3: "pl-14" };
|
|
106
|
+
const renderLink = (item, depth = 0) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
|
|
107
|
+
/* @__PURE__ */ jsx(
|
|
108
|
+
"a",
|
|
109
|
+
{
|
|
110
|
+
ref: (el) => {
|
|
111
|
+
if (el) linkRefs.current.set(item.id, el);
|
|
112
|
+
},
|
|
113
|
+
href: `#${item.id}`,
|
|
114
|
+
onClick: (e) => handleClick(e, item.id),
|
|
115
|
+
"data-slot": "link",
|
|
116
|
+
className: cn(
|
|
117
|
+
"anchor_link",
|
|
118
|
+
"block text-text-secondary hover:text-text-primary transition-colors truncate",
|
|
119
|
+
s.link,
|
|
120
|
+
depth > 0 && (depthPadding[depth] || "pl-14"),
|
|
121
|
+
activeId === item.id && "text-primary font-medium",
|
|
122
|
+
activeId === item.id && classNames?.activeLink,
|
|
123
|
+
classNames?.link
|
|
124
|
+
),
|
|
125
|
+
children: item.label
|
|
126
|
+
}
|
|
127
|
+
),
|
|
128
|
+
item.children?.map((child) => renderLink(child, depth + 1))
|
|
129
|
+
] }, item.id);
|
|
130
|
+
return /* @__PURE__ */ jsxs(
|
|
131
|
+
"nav",
|
|
132
|
+
{
|
|
133
|
+
ref: navRef,
|
|
134
|
+
"data-slot": "root",
|
|
135
|
+
className: cn(
|
|
136
|
+
"anchor_root",
|
|
137
|
+
"relative",
|
|
138
|
+
affix && "sticky",
|
|
139
|
+
classNames?.root,
|
|
140
|
+
className
|
|
141
|
+
),
|
|
142
|
+
style: affix ? { top: affixTop } : void 0,
|
|
143
|
+
"aria-label": "Table of contents",
|
|
144
|
+
children: [
|
|
145
|
+
/* @__PURE__ */ jsx(
|
|
146
|
+
"div",
|
|
147
|
+
{
|
|
148
|
+
"data-slot": "indicator",
|
|
149
|
+
className: cn(
|
|
150
|
+
"anchor_indicator",
|
|
151
|
+
"absolute left-0 rounded-full bg-primary transition-all duration-200",
|
|
152
|
+
s.indicator,
|
|
153
|
+
classNames?.indicator
|
|
154
|
+
),
|
|
155
|
+
style: {
|
|
156
|
+
top: indicatorTop,
|
|
157
|
+
height: indicatorHeight,
|
|
158
|
+
opacity: activeId ? 1 : 0
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
),
|
|
162
|
+
/* @__PURE__ */ jsx("div", { className: "absolute left-0 top-0 bottom-0 w-px bg-border" }),
|
|
163
|
+
items.map((item) => renderLink(item))
|
|
164
|
+
]
|
|
165
|
+
}
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
);
|
|
169
|
+
Anchor.displayName = "Anchor";
|
|
170
|
+
var anchor_default = Anchor;
|
|
171
|
+
|
|
172
|
+
export { anchor_default };
|
|
173
|
+
//# sourceMappingURL=chunk-RNG7HR6U.js.map
|
|
174
|
+
//# sourceMappingURL=chunk-RNG7HR6U.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/anchor/index.tsx"],"names":[],"mappings":"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","file":"chunk-RNG7HR6U.js","sourcesContent":["'use client'\n\nimport React, { useState, useEffect, useCallback, useRef } from 'react'\n\nimport { cn } from '../utils'\nimport type { AnchorItem, AnchorProps } from './types'\n\nconst sizeClasses = {\n xs: { link: 'text-xs py-0.5 pl-3', indicator: 'w-0.5' },\n sm: { link: 'text-sm py-0.5 pl-3', indicator: 'w-0.5' },\n md: { link: 'text-sm py-1 pl-4', indicator: 'w-0.5' },\n lg: { link: 'text-base py-1 pl-5', indicator: 'w-1' },\n}\n\nfunction flattenIds(list: AnchorItem[]): string[] {\n return list.flatMap((item) => [item.id, ...(item.children ? flattenIds(item.children) : [])])\n}\n\nfunction getScrollContainer(getContainer?: () => HTMLElement | Window): HTMLElement | Window {\n if (getContainer) return getContainer()\n return typeof window !== 'undefined' ? window : (null as any)\n}\n\nfunction getContainerRect(container: HTMLElement | Window): { top: number } {\n if (!container || container === window || container instanceof Window) return { top: 0 }\n return (container as HTMLElement).getBoundingClientRect()\n}\n\nfunction scrollTo(container: HTMLElement | Window, top: number) {\n container.scrollTo({ top, behavior: 'smooth' })\n}\n\nconst Anchor = React.memo<AnchorProps>(\n ({\n items,\n offset = 0,\n targetOffset = 0,\n size = 'md',\n affix = false,\n affixTop = 0,\n getContainer,\n className,\n classNames,\n onChange,\n }) => {\n const [activeId, setActiveId] = useState<string>('')\n const [indicatorTop, setIndicatorTop] = useState(0)\n const [indicatorHeight, setIndicatorHeight] = useState(0)\n const navRef = useRef<HTMLElement>(null)\n const linkRefs = useRef<Map<string, HTMLAnchorElement>>(new Map())\n const isScrolling = useRef(false)\n\n const allIds = flattenIds(items)\n\n const updateActive = useCallback(() => {\n if (isScrolling.current) return\n if (typeof window === 'undefined') return\n\n const container = getScrollContainer(getContainer)\n const containerTop = getContainerRect(container).top\n\n let current = ''\n for (const id of allIds) {\n const el = document.getElementById(id)\n if (el) {\n const rect = el.getBoundingClientRect()\n // Position relative to scroll container\n const relativeTop = rect.top - containerTop\n if (relativeTop <= offset + 10) current = id\n }\n }\n if (current && current !== activeId) {\n setActiveId(current)\n onChange?.(current)\n }\n }, [allIds, offset, activeId, onChange, getContainer])\n\n useEffect(() => {\n if (typeof window === 'undefined') return\n const container = getScrollContainer(getContainer)\n const target = container instanceof Window ? window : container\n\n target.addEventListener('scroll', updateActive, { passive: true })\n updateActive()\n return () => target.removeEventListener('scroll', updateActive)\n }, [updateActive, getContainer])\n\n useEffect(() => {\n if (!activeId || !navRef.current) return\n const linkEl = linkRefs.current.get(activeId)\n if (linkEl) {\n const navRect = navRef.current.getBoundingClientRect()\n const linkRect = linkEl.getBoundingClientRect()\n setIndicatorTop(linkRect.top - navRect.top)\n setIndicatorHeight(linkRect.height)\n }\n }, [activeId])\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLAnchorElement>, id: string) => {\n e.preventDefault()\n const el = document.getElementById(id)\n if (!el) return\n\n const container = getScrollContainer(getContainer)\n\n isScrolling.current = true\n setActiveId(id)\n onChange?.(id)\n\n if (container instanceof Window) {\n const y = el.getBoundingClientRect().top + window.scrollY - targetOffset\n scrollTo(container, y)\n } else {\n const y = el.offsetTop - targetOffset\n scrollTo(container, y)\n }\n\n setTimeout(() => { isScrolling.current = false }, 800)\n },\n [targetOffset, onChange, getContainer],\n )\n\n const s = sizeClasses[size]\n const depthPadding = { 0: '', 1: 'pl-6', 2: 'pl-10', 3: 'pl-14' } as Record<number, string>\n\n const renderLink = (item: AnchorItem, depth = 0) => (\n <React.Fragment key={item.id}>\n <a\n ref={(el) => { if (el) linkRefs.current.set(item.id, el) }}\n href={`#${item.id}`}\n onClick={(e) => handleClick(e, item.id)}\n data-slot=\"link\"\n className={cn(\n 'anchor_link',\n 'block text-text-secondary hover:text-text-primary transition-colors truncate',\n s.link,\n depth > 0 && (depthPadding[depth] || 'pl-14'),\n activeId === item.id && 'text-primary font-medium',\n activeId === item.id && classNames?.activeLink,\n classNames?.link,\n )}\n >\n {item.label}\n </a>\n {item.children?.map((child) => renderLink(child, depth + 1))}\n </React.Fragment>\n )\n\n return (\n <nav\n ref={navRef}\n data-slot=\"root\"\n className={cn(\n 'anchor_root',\n 'relative',\n affix && 'sticky',\n classNames?.root,\n className,\n )}\n style={affix ? { top: affixTop } : undefined}\n aria-label=\"Table of contents\"\n >\n <div\n data-slot=\"indicator\"\n className={cn(\n 'anchor_indicator',\n 'absolute left-0 rounded-full bg-primary transition-all duration-200',\n s.indicator,\n classNames?.indicator,\n )}\n style={{\n top: indicatorTop,\n height: indicatorHeight,\n opacity: activeId ? 1 : 0,\n }}\n />\n\n <div className=\"absolute left-0 top-0 bottom-0 w-px bg-border\" />\n\n {items.map((item) => renderLink(item))}\n </nav>\n )\n },\n)\n\nAnchor.displayName = 'Anchor'\n\nexport type * from './types'\nexport default Anchor\n"]}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { cn } from './chunk-RAS6HUEI.js';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
var statusConfig = {
|
|
6
|
+
success: { color: "text-success", defaultTitle: "Successfully Done" },
|
|
7
|
+
error: { color: "text-error", defaultTitle: "Something Went Wrong" },
|
|
8
|
+
info: { color: "text-info", defaultTitle: "Information" },
|
|
9
|
+
warning: { color: "text-warning", defaultTitle: "Warning" },
|
|
10
|
+
"403": { color: "text-warning", defaultTitle: "403 \u2014 Access Denied" },
|
|
11
|
+
"404": { color: "text-info", defaultTitle: "404 \u2014 Page Not Found" },
|
|
12
|
+
"500": { color: "text-error", defaultTitle: "500 \u2014 Server Error" }
|
|
13
|
+
};
|
|
14
|
+
var sizeMap = {
|
|
15
|
+
xs: { icon: "w-10 h-10", title: "text-base font-semibold", subtitle: "text-xs", padding: "py-6 px-4", maxW: "max-w-xs" },
|
|
16
|
+
sm: { icon: "w-12 h-12", title: "text-lg font-semibold", subtitle: "text-sm", padding: "py-8 px-4", maxW: "max-w-sm" },
|
|
17
|
+
md: { icon: "w-16 h-16", title: "text-xl font-semibold", subtitle: "text-sm", padding: "py-12 px-6", maxW: "max-w-md" },
|
|
18
|
+
lg: { icon: "w-20 h-20", title: "text-2xl font-bold", subtitle: "text-base", padding: "py-16 px-8", maxW: "max-w-lg" }
|
|
19
|
+
};
|
|
20
|
+
function StatusIcon({ status, sizeClass }) {
|
|
21
|
+
const className = cn(sizeClass, statusConfig[status].color);
|
|
22
|
+
if (status === "success") {
|
|
23
|
+
return /* @__PURE__ */ jsxs("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
24
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
25
|
+
/* @__PURE__ */ jsx("path", { d: "M9 12l2 2 4-4" })
|
|
26
|
+
] });
|
|
27
|
+
}
|
|
28
|
+
if (status === "error" || status === "500") {
|
|
29
|
+
return /* @__PURE__ */ jsxs("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
30
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
31
|
+
/* @__PURE__ */ jsx("line", { x1: "15", y1: "9", x2: "9", y2: "15" }),
|
|
32
|
+
/* @__PURE__ */ jsx("line", { x1: "9", y1: "9", x2: "15", y2: "15" })
|
|
33
|
+
] });
|
|
34
|
+
}
|
|
35
|
+
if (status === "warning" || status === "403") {
|
|
36
|
+
return /* @__PURE__ */ jsxs("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
37
|
+
/* @__PURE__ */ jsx("path", { d: "M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z" }),
|
|
38
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "9", x2: "12", y2: "13" }),
|
|
39
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "17", x2: "12.01", y2: "17" })
|
|
40
|
+
] });
|
|
41
|
+
}
|
|
42
|
+
if (status === "404") {
|
|
43
|
+
return /* @__PURE__ */ jsxs("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
44
|
+
/* @__PURE__ */ jsx("circle", { cx: "11", cy: "11", r: "8" }),
|
|
45
|
+
/* @__PURE__ */ jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65" }),
|
|
46
|
+
/* @__PURE__ */ jsx("line", { x1: "8", y1: "11", x2: "14", y2: "11" })
|
|
47
|
+
] });
|
|
48
|
+
}
|
|
49
|
+
return /* @__PURE__ */ jsxs("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
50
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
51
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "16", x2: "12", y2: "12" }),
|
|
52
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "8", x2: "12.01", y2: "8" })
|
|
53
|
+
] });
|
|
54
|
+
}
|
|
55
|
+
var Result = React.memo(
|
|
56
|
+
({
|
|
57
|
+
status = "info",
|
|
58
|
+
icon,
|
|
59
|
+
title,
|
|
60
|
+
subtitle,
|
|
61
|
+
extra,
|
|
62
|
+
children,
|
|
63
|
+
size = "md",
|
|
64
|
+
className,
|
|
65
|
+
classNames
|
|
66
|
+
}) => {
|
|
67
|
+
const config = statusConfig[status];
|
|
68
|
+
const s = sizeMap[size];
|
|
69
|
+
return /* @__PURE__ */ jsxs(
|
|
70
|
+
"div",
|
|
71
|
+
{
|
|
72
|
+
"data-slot": "root",
|
|
73
|
+
className: cn(
|
|
74
|
+
"result_root",
|
|
75
|
+
"flex flex-col items-center text-center",
|
|
76
|
+
s.padding,
|
|
77
|
+
classNames?.root,
|
|
78
|
+
className
|
|
79
|
+
),
|
|
80
|
+
children: [
|
|
81
|
+
/* @__PURE__ */ jsx("div", { "data-slot": "icon", className: cn("result_icon", "mb-6", classNames?.icon), children: icon ?? /* @__PURE__ */ jsx(StatusIcon, { status, sizeClass: s.icon }) }),
|
|
82
|
+
/* @__PURE__ */ jsx("h3", { "data-slot": "title", className: cn("result_title", s.title, "text-text-primary mb-2", classNames?.title), children: title ?? config.defaultTitle }),
|
|
83
|
+
subtitle && /* @__PURE__ */ jsx("p", { "data-slot": "subtitle", className: cn("result_subtitle", s.subtitle, "text-text-secondary", s.maxW, "mb-6", classNames?.subtitle), children: subtitle }),
|
|
84
|
+
extra && /* @__PURE__ */ jsx("div", { "data-slot": "extra", className: cn("result_extra", "flex items-center gap-3 mb-6", classNames?.extra), children: extra }),
|
|
85
|
+
children && /* @__PURE__ */ jsx("div", { "data-slot": "content", className: cn("result_content", "w-full", s.maxW, classNames?.content), children })
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
Result.displayName = "Result";
|
|
92
|
+
var result_default = Result;
|
|
93
|
+
|
|
94
|
+
export { result_default };
|
|
95
|
+
//# sourceMappingURL=chunk-TDPJYCNI.js.map
|
|
96
|
+
//# sourceMappingURL=chunk-TDPJYCNI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/result/index.tsx"],"names":[],"mappings":"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","file":"chunk-TDPJYCNI.js","sourcesContent":["'use client'\n\nimport React from 'react'\n\nimport { cn } from '../utils'\nimport type { ResultProps, ResultStatus } from './types'\n\nconst statusConfig: Record<ResultStatus, { color: string; defaultTitle: string }> = {\n success: { color: 'text-success', defaultTitle: 'Successfully Done' },\n error: { color: 'text-error', defaultTitle: 'Something Went Wrong' },\n info: { color: 'text-info', defaultTitle: 'Information' },\n warning: { color: 'text-warning', defaultTitle: 'Warning' },\n '403': { color: 'text-warning', defaultTitle: '403 — Access Denied' },\n '404': { color: 'text-info', defaultTitle: '404 — Page Not Found' },\n '500': { color: 'text-error', defaultTitle: '500 — Server Error' },\n}\n\nconst sizeMap = {\n xs: { icon: 'w-10 h-10', title: 'text-base font-semibold', subtitle: 'text-xs', padding: 'py-6 px-4', maxW: 'max-w-xs' },\n sm: { icon: 'w-12 h-12', title: 'text-lg font-semibold', subtitle: 'text-sm', padding: 'py-8 px-4', maxW: 'max-w-sm' },\n md: { icon: 'w-16 h-16', title: 'text-xl font-semibold', subtitle: 'text-sm', padding: 'py-12 px-6', maxW: 'max-w-md' },\n lg: { icon: 'w-20 h-20', title: 'text-2xl font-bold', subtitle: 'text-base', padding: 'py-16 px-8', maxW: 'max-w-lg' },\n}\n\nfunction StatusIcon({ status, sizeClass }: { status: ResultStatus; sizeClass: string }) {\n const className = cn(sizeClass, statusConfig[status].color)\n\n if (status === 'success') {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9 12l2 2 4-4\" />\n </svg>\n )\n }\n\n if (status === 'error' || status === '500') {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n )\n }\n\n if (status === 'warning' || status === '403') {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n )\n }\n\n if (status === '404') {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n <line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\" />\n </svg>\n )\n }\n\n // info\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n )\n}\n\nconst Result = React.memo<ResultProps>(\n ({\n status = 'info',\n icon,\n title,\n subtitle,\n extra,\n children,\n size = 'md',\n className,\n classNames,\n }) => {\n const config = statusConfig[status]\n const s = sizeMap[size]\n\n return (\n <div\n data-slot=\"root\"\n className={cn(\n 'result_root',\n 'flex flex-col items-center text-center',\n s.padding,\n classNames?.root,\n className,\n )}\n >\n <div data-slot=\"icon\" className={cn('result_icon', 'mb-6', classNames?.icon)}>\n {icon ?? <StatusIcon status={status} sizeClass={s.icon} />}\n </div>\n\n <h3 data-slot=\"title\" className={cn('result_title', s.title, 'text-text-primary mb-2', classNames?.title)}>\n {title ?? config.defaultTitle}\n </h3>\n\n {subtitle && (\n <p data-slot=\"subtitle\" className={cn('result_subtitle', s.subtitle, 'text-text-secondary', s.maxW, 'mb-6', classNames?.subtitle)}>\n {subtitle}\n </p>\n )}\n\n {extra && (\n <div data-slot=\"extra\" className={cn('result_extra', 'flex items-center gap-3 mb-6', classNames?.extra)}>\n {extra}\n </div>\n )}\n\n {children && (\n <div data-slot=\"content\" className={cn('result_content', 'w-full', s.maxW, classNames?.content)}>\n {children}\n </div>\n )}\n </div>\n )\n },\n)\n\nResult.displayName = 'Result'\n\nexport type * from './types'\nexport default Result\n"]}
|