asterui 0.12.65 → 0.12.66
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/components/AspectRatio.d.ts +9 -0
- package/dist/components/AspectRatio.js +14 -0
- package/dist/components/AspectRatio.js.map +1 -0
- package/dist/components/Image.js +85 -77
- package/dist/components/Image.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +261 -259
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export interface AspectRatioProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
/** Aspect ratio as width / height */
|
|
4
|
+
ratio?: number;
|
|
5
|
+
children?: React.ReactNode;
|
|
6
|
+
/** Test ID for testing */
|
|
7
|
+
'data-testid'?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const AspectRatio: React.ForwardRefExoticComponent<AspectRatioProps & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as l } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as n } from "react";
|
|
3
|
+
const p = n(function({ ratio: t = 1, children: e, className: o = "", style: s, ...a }, i) {
|
|
4
|
+
const r = ["relative w-full", o].filter(Boolean).join(" "), c = {
|
|
5
|
+
...s,
|
|
6
|
+
aspectRatio: t
|
|
7
|
+
};
|
|
8
|
+
return /* @__PURE__ */ l("div", { ref: i, className: r, style: c, ...a, children: e });
|
|
9
|
+
});
|
|
10
|
+
p.displayName = "AspectRatio";
|
|
11
|
+
export {
|
|
12
|
+
p as AspectRatio
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=AspectRatio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AspectRatio.js","sources":["../../src/components/AspectRatio.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\n\nexport interface AspectRatioProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Aspect ratio as width / height */\n ratio?: number\n children?: React.ReactNode\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport const AspectRatio = forwardRef<HTMLDivElement, AspectRatioProps>(function AspectRatio(\n { ratio = 1, children, className = '', style, ...rest },\n ref\n) {\n const classes = ['relative w-full', className]\n .filter(Boolean)\n .join(' ')\n const mergedStyle: React.CSSProperties = {\n ...style,\n aspectRatio: ratio,\n }\n\n return (\n <div ref={ref} className={classes} style={mergedStyle} {...rest}>\n {children}\n </div>\n )\n})\n\nAspectRatio.displayName = 'AspectRatio'\n"],"names":["AspectRatio","forwardRef","ratio","children","className","style","rest","ref","classes","mergedStyle","jsx"],"mappings":";;AAUO,MAAMA,IAAcC,EAA6C,SACtE,EAAE,OAAAC,IAAQ,GAAG,UAAAC,GAAU,WAAAC,IAAY,IAAI,OAAAC,GAAO,GAAGC,EAAA,GACjDC,GACA;AACA,QAAMC,IAAU,CAAC,mBAAmBJ,CAAS,EAC1C,OAAO,OAAO,EACd,KAAK,GAAG,GACLK,IAAmC;AAAA,IACvC,GAAGJ;AAAA,IACH,aAAaH;AAAA,EAAA;AAGf,SACE,gBAAAQ,EAAC,SAAI,KAAAH,GAAU,WAAWC,GAAS,OAAOC,GAAc,GAAGH,GACxD,UAAAH,EAAA,CACH;AAEJ,CAAC;AAEDH,EAAY,cAAc;"}
|
package/dist/components/Image.js
CHANGED
|
@@ -1,91 +1,99 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { forwardRef as
|
|
3
|
-
const
|
|
1
|
+
import { jsxs as v, Fragment as H, jsx as a } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as T, useState as l, useEffect as W, useCallback as i } from "react";
|
|
3
|
+
const R = "btn", V = "btn-circle", q = "btn-sm", A = T(
|
|
4
4
|
({
|
|
5
|
-
src:
|
|
6
|
-
alt:
|
|
7
|
-
fallback:
|
|
5
|
+
src: c,
|
|
6
|
+
alt: s = "",
|
|
7
|
+
fallback: g,
|
|
8
8
|
placeholder: y,
|
|
9
|
-
preview:
|
|
9
|
+
preview: n = !0,
|
|
10
10
|
width: d,
|
|
11
11
|
height: m,
|
|
12
|
-
className:
|
|
12
|
+
className: j = "",
|
|
13
13
|
onLoad: k,
|
|
14
14
|
onError: w,
|
|
15
|
-
"data-testid":
|
|
16
|
-
...
|
|
17
|
-
},
|
|
18
|
-
const [
|
|
15
|
+
"data-testid": r = "image",
|
|
16
|
+
...L
|
|
17
|
+
}, P) => {
|
|
18
|
+
const [t, u] = l(!0), [o, f] = l(!1), [B, h] = l(!1), [S, x] = l(c), [$, C] = l(!1);
|
|
19
19
|
W(() => {
|
|
20
|
-
|
|
21
|
-
}, [
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
}, [k]),
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
u(!1);
|
|
30
|
-
}, []),
|
|
20
|
+
u(!0), f(!1), C(!1), x(c);
|
|
21
|
+
}, [c]);
|
|
22
|
+
const D = i(() => {
|
|
23
|
+
u(!1), f(!1), k?.();
|
|
24
|
+
}, [k]), E = i(() => {
|
|
25
|
+
if (w?.(), g && !$) {
|
|
26
|
+
C(!0), x(g), u(!0), f(!1);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
u(!1), f(!0);
|
|
30
|
+
}, [g, $, w]), F = i(() => {
|
|
31
|
+
n && !o && !t && h(!0);
|
|
32
|
+
}, [n, o, t]), N = i(() => {
|
|
33
|
+
h(!1);
|
|
34
|
+
}, []), K = i(
|
|
31
35
|
(e) => {
|
|
32
|
-
|
|
36
|
+
n && !o && !t && (e.key === "Enter" || e.key === " ") && (e.preventDefault(), h(!0));
|
|
33
37
|
},
|
|
34
|
-
[
|
|
35
|
-
),
|
|
36
|
-
e.key === "Escape" &&
|
|
37
|
-
}, []),
|
|
38
|
+
[n, o, t]
|
|
39
|
+
), M = i((e) => {
|
|
40
|
+
e.key === "Escape" && h(!1);
|
|
41
|
+
}, []), p = () => {
|
|
38
42
|
const e = {};
|
|
39
43
|
return d && (e.width = typeof d == "number" ? `${d}px` : d), m && (e.height = typeof m == "number" ? `${m}px` : m), e;
|
|
40
|
-
},
|
|
41
|
-
|
|
42
|
-
|
|
44
|
+
}, b = n && !o && !t, z = [
|
|
45
|
+
j,
|
|
46
|
+
b ? "cursor-pointer hover:opacity-80 transition-opacity" : ""
|
|
43
47
|
].filter(Boolean).join(" ");
|
|
44
|
-
return /* @__PURE__ */
|
|
45
|
-
/* @__PURE__ */
|
|
48
|
+
return /* @__PURE__ */ v(H, { children: [
|
|
49
|
+
/* @__PURE__ */ v(
|
|
46
50
|
"div",
|
|
47
51
|
{
|
|
48
52
|
className: "relative inline-block",
|
|
49
|
-
style:
|
|
50
|
-
"data-testid":
|
|
51
|
-
"data-state":
|
|
53
|
+
style: p(),
|
|
54
|
+
"data-testid": r,
|
|
55
|
+
"data-state": t ? "loading" : o ? "error" : "loaded",
|
|
52
56
|
children: [
|
|
53
|
-
|
|
57
|
+
t && y && /* @__PURE__ */ a(
|
|
54
58
|
"div",
|
|
55
59
|
{
|
|
56
60
|
className: "absolute inset-0 flex items-center justify-center bg-base-200",
|
|
57
|
-
"data-testid": `${
|
|
61
|
+
"data-testid": `${r}-placeholder`,
|
|
58
62
|
children: y
|
|
59
63
|
}
|
|
60
64
|
),
|
|
61
|
-
/* @__PURE__ */
|
|
65
|
+
/* @__PURE__ */ a(
|
|
62
66
|
"img",
|
|
63
67
|
{
|
|
64
|
-
ref:
|
|
65
|
-
...
|
|
66
|
-
src:
|
|
67
|
-
alt:
|
|
68
|
-
className:
|
|
69
|
-
style: {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
68
|
+
ref: P,
|
|
69
|
+
...L,
|
|
70
|
+
src: S,
|
|
71
|
+
alt: s,
|
|
72
|
+
className: z,
|
|
73
|
+
style: {
|
|
74
|
+
...p(),
|
|
75
|
+
opacity: t ? 0 : 1,
|
|
76
|
+
transition: "opacity 150ms ease"
|
|
77
|
+
},
|
|
78
|
+
onLoad: D,
|
|
79
|
+
onError: E,
|
|
80
|
+
onClick: F,
|
|
81
|
+
onKeyDown: K,
|
|
82
|
+
tabIndex: b ? 0 : void 0,
|
|
83
|
+
role: b ? "button" : void 0,
|
|
84
|
+
"aria-label": b ? `${s || "Image"} (click to preview)` : void 0,
|
|
85
|
+
"data-testid": `${r}-img`
|
|
78
86
|
}
|
|
79
87
|
),
|
|
80
|
-
|
|
88
|
+
o && /* @__PURE__ */ a(
|
|
81
89
|
"div",
|
|
82
90
|
{
|
|
83
91
|
className: "flex items-center justify-center bg-base-200 text-base-content/50",
|
|
84
|
-
style:
|
|
85
|
-
"data-testid": `${
|
|
92
|
+
style: p(),
|
|
93
|
+
"data-testid": `${r}-error`,
|
|
86
94
|
role: "img",
|
|
87
|
-
"aria-label": `Failed to load: ${
|
|
88
|
-
children: /* @__PURE__ */
|
|
95
|
+
"aria-label": `Failed to load: ${s || "image"}`,
|
|
96
|
+
children: /* @__PURE__ */ a(
|
|
89
97
|
"svg",
|
|
90
98
|
{
|
|
91
99
|
className: "w-12 h-12",
|
|
@@ -93,7 +101,7 @@ const H = "btn", R = "btn-circle", V = "btn-sm", q = z(
|
|
|
93
101
|
stroke: "currentColor",
|
|
94
102
|
viewBox: "0 0 24 24",
|
|
95
103
|
"aria-hidden": "true",
|
|
96
|
-
children: /* @__PURE__ */
|
|
104
|
+
children: /* @__PURE__ */ a(
|
|
97
105
|
"path",
|
|
98
106
|
{
|
|
99
107
|
strokeLinecap: "round",
|
|
@@ -109,26 +117,26 @@ const H = "btn", R = "btn-circle", V = "btn-sm", q = z(
|
|
|
109
117
|
]
|
|
110
118
|
}
|
|
111
119
|
),
|
|
112
|
-
|
|
120
|
+
B && /* @__PURE__ */ a(
|
|
113
121
|
"div",
|
|
114
122
|
{
|
|
115
123
|
className: "fixed inset-0 z-50 bg-black bg-opacity-80 flex items-center justify-center p-4",
|
|
116
|
-
onClick:
|
|
117
|
-
onKeyDown:
|
|
124
|
+
onClick: N,
|
|
125
|
+
onKeyDown: M,
|
|
118
126
|
role: "dialog",
|
|
119
127
|
"aria-modal": "true",
|
|
120
|
-
"aria-label": `Preview: ${
|
|
121
|
-
"data-testid": `${
|
|
122
|
-
children: /* @__PURE__ */
|
|
123
|
-
/* @__PURE__ */
|
|
128
|
+
"aria-label": `Preview: ${s || "Image"}`,
|
|
129
|
+
"data-testid": `${r}-preview`,
|
|
130
|
+
children: /* @__PURE__ */ v("div", { className: "relative max-w-full max-h-full", children: [
|
|
131
|
+
/* @__PURE__ */ a(
|
|
124
132
|
"button",
|
|
125
133
|
{
|
|
126
|
-
className: `absolute top-4 right-4 ${
|
|
127
|
-
onClick:
|
|
134
|
+
className: `absolute top-4 right-4 ${R} ${V} ${q}`,
|
|
135
|
+
onClick: N,
|
|
128
136
|
"aria-label": "Close preview",
|
|
129
137
|
autoFocus: !0,
|
|
130
|
-
"data-testid": `${
|
|
131
|
-
children: /* @__PURE__ */
|
|
138
|
+
"data-testid": `${r}-preview-close`,
|
|
139
|
+
children: /* @__PURE__ */ a(
|
|
132
140
|
"svg",
|
|
133
141
|
{
|
|
134
142
|
className: "w-6 h-6",
|
|
@@ -136,7 +144,7 @@ const H = "btn", R = "btn-circle", V = "btn-sm", q = z(
|
|
|
136
144
|
stroke: "currentColor",
|
|
137
145
|
viewBox: "0 0 24 24",
|
|
138
146
|
"aria-hidden": "true",
|
|
139
|
-
children: /* @__PURE__ */
|
|
147
|
+
children: /* @__PURE__ */ a(
|
|
140
148
|
"path",
|
|
141
149
|
{
|
|
142
150
|
strokeLinecap: "round",
|
|
@@ -149,14 +157,14 @@ const H = "btn", R = "btn-circle", V = "btn-sm", q = z(
|
|
|
149
157
|
)
|
|
150
158
|
}
|
|
151
159
|
),
|
|
152
|
-
/* @__PURE__ */
|
|
160
|
+
/* @__PURE__ */ a(
|
|
153
161
|
"img",
|
|
154
162
|
{
|
|
155
|
-
src:
|
|
156
|
-
alt:
|
|
163
|
+
src: c,
|
|
164
|
+
alt: s,
|
|
157
165
|
className: "max-w-full max-h-[90vh] object-contain",
|
|
158
166
|
onClick: (e) => e.stopPropagation(),
|
|
159
|
-
"data-testid": `${
|
|
167
|
+
"data-testid": `${r}-preview-img`
|
|
160
168
|
}
|
|
161
169
|
)
|
|
162
170
|
] })
|
|
@@ -165,8 +173,8 @@ const H = "btn", R = "btn-circle", V = "btn-sm", q = z(
|
|
|
165
173
|
] });
|
|
166
174
|
}
|
|
167
175
|
);
|
|
168
|
-
|
|
176
|
+
A.displayName = "Image";
|
|
169
177
|
export {
|
|
170
|
-
|
|
178
|
+
A as Image
|
|
171
179
|
};
|
|
172
180
|
//# sourceMappingURL=Image.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Image.js","sources":["../../src/components/Image.tsx"],"sourcesContent":["import React, { useState, useEffect, forwardRef, useCallback } from 'react'\n\n// DaisyUI classes\nconst dBtn = 'btn'\nconst dBtnCircle = 'btn-circle'\nconst dBtnSm = 'btn-sm'\n\nexport interface ImageProps extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, 'placeholder'> {\n /** Image source URL */\n src: string\n /** Alternative text for the image */\n alt?: string\n /** Fallback image URL when source fails to load */\n fallback?: string\n /** Placeholder content shown while loading */\n placeholder?: React.ReactNode\n /** Enable click to preview image in lightbox */\n preview?: boolean\n /** Image width */\n width?: string | number\n /** Image height */\n height?: string | number\n /** Additional CSS classes */\n className?: string\n /** Callback when image loads successfully */\n onLoad?: () => void\n /** Callback when image fails to load */\n onError?: () => void\n /** Test ID for the component */\n 'data-testid'?: string\n}\n\nexport const Image = forwardRef<HTMLImageElement, ImageProps>(\n (\n {\n src,\n alt = '',\n fallback,\n placeholder,\n preview = true,\n width,\n height,\n className = '',\n onLoad,\n onError,\n 'data-testid': testId = 'image',\n ...props\n },\n ref\n ) => {\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState(false)\n const [showPreview, setShowPreview] = useState(false)\n const [currentSrc, setCurrentSrc] = useState(src)\n\n useEffect(() => {\n setLoading(true)\n setError(false)\n setCurrentSrc(src)\n }, [src])\n\n const handleLoad = useCallback(() => {\n setLoading(false)\n setError(false)\n onLoad?.()\n }, [onLoad])\n\n const handleError = useCallback(() => {\n setLoading(false)\n setError(true)\n if (fallback) {\n setCurrentSrc(fallback)\n }\n onError?.()\n }, [fallback, onError])\n\n const handleImageClick = useCallback(() => {\n if (preview && !error && !loading) {\n setShowPreview(true)\n }\n }, [preview, error, loading])\n\n const handleClosePreview = useCallback(() => {\n setShowPreview(false)\n }, [])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (preview && !error && !loading && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault()\n setShowPreview(true)\n }\n },\n [preview, error, loading]\n )\n\n const handlePreviewKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n setShowPreview(false)\n }\n }, [])\n\n const getStyle = (): React.CSSProperties => {\n const style: React.CSSProperties = {}\n if (width) {\n style.width = typeof width === 'number' ? `${width}px` : width\n }\n if (height) {\n style.height = typeof height === 'number' ? `${height}px` : height\n }\n return style\n }\n\n const isPreviewable = preview && !error && !loading\n const imageClasses = [\n className,\n isPreviewable ? 'cursor-pointer hover:opacity-80 transition-opacity' : '',\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <>\n <div\n className=\"relative inline-block\"\n style={getStyle()}\n data-testid={testId}\n data-state={loading ? 'loading' : error ? 'error' : 'loaded'}\n >\n {loading && placeholder && (\n <div\n className=\"absolute inset-0 flex items-center justify-center bg-base-200\"\n data-testid={`${testId}-placeholder`}\n >\n {placeholder}\n </div>\n )}\n <img\n ref={ref}\n {...props}\n src={currentSrc}\n alt={alt}\n className={imageClasses}\n style={{ ...getStyle(), display: loading ? 'none' : 'block' }}\n onLoad={handleLoad}\n onError={handleError}\n onClick={handleImageClick}\n onKeyDown={handleKeyDown}\n tabIndex={isPreviewable ? 0 : undefined}\n role={isPreviewable ? 'button' : undefined}\n aria-label={isPreviewable ? `${alt || 'Image'} (click to preview)` : undefined}\n data-testid={`${testId}-img`}\n />\n {error && !fallback && (\n <div\n className=\"flex items-center justify-center bg-base-200 text-base-content/50\"\n style={getStyle()}\n data-testid={`${testId}-error`}\n role=\"img\"\n aria-label={`Failed to load: ${alt || 'image'}`}\n >\n <svg\n className=\"w-12 h-12\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\"\n />\n </svg>\n </div>\n )}\n </div>\n\n {showPreview && (\n <div\n className=\"fixed inset-0 z-50 bg-black bg-opacity-80 flex items-center justify-center p-4\"\n onClick={handleClosePreview}\n onKeyDown={handlePreviewKeyDown}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={`Preview: ${alt || 'Image'}`}\n data-testid={`${testId}-preview`}\n >\n <div className=\"relative max-w-full max-h-full\">\n <button\n className={`absolute top-4 right-4 ${dBtn} ${dBtnCircle} ${dBtnSm}`}\n onClick={handleClosePreview}\n aria-label=\"Close preview\"\n autoFocus\n data-testid={`${testId}-preview-close`}\n >\n <svg\n className=\"w-6 h-6\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n <img\n src={src}\n alt={alt}\n className=\"max-w-full max-h-[90vh] object-contain\"\n onClick={(e) => e.stopPropagation()}\n data-testid={`${testId}-preview-img`}\n />\n </div>\n </div>\n )}\n </>\n )\n }\n)\n\nImage.displayName = 'Image'\n"],"names":["dBtn","dBtnCircle","dBtnSm","Image","forwardRef","src","alt","fallback","placeholder","preview","width","height","className","onLoad","onError","testId","props","ref","loading","setLoading","useState","error","setError","showPreview","setShowPreview","currentSrc","setCurrentSrc","useEffect","handleLoad","useCallback","handleError","handleImageClick","handleClosePreview","handleKeyDown","handlePreviewKeyDown","getStyle","style","isPreviewable","imageClasses","jsxs","Fragment","jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Image.js","sources":["../../src/components/Image.tsx"],"sourcesContent":["import React, { useState, useEffect, forwardRef, useCallback } from 'react'\n\n// DaisyUI classes\nconst dBtn = 'btn'\nconst dBtnCircle = 'btn-circle'\nconst dBtnSm = 'btn-sm'\n\nexport interface ImageProps extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, 'placeholder'> {\n /** Image source URL */\n src: string\n /** Alternative text for the image */\n alt?: string\n /** Fallback image URL when source fails to load */\n fallback?: string\n /** Placeholder content shown while loading */\n placeholder?: React.ReactNode\n /** Enable click to preview image in lightbox */\n preview?: boolean\n /** Image width */\n width?: string | number\n /** Image height */\n height?: string | number\n /** Additional CSS classes */\n className?: string\n /** Callback when image loads successfully */\n onLoad?: () => void\n /** Callback when image fails to load */\n onError?: () => void\n /** Test ID for the component */\n 'data-testid'?: string\n}\n\nexport const Image = forwardRef<HTMLImageElement, ImageProps>(\n (\n {\n src,\n alt = '',\n fallback,\n placeholder,\n preview = true,\n width,\n height,\n className = '',\n onLoad,\n onError,\n 'data-testid': testId = 'image',\n ...props\n },\n ref\n ) => {\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState(false)\n const [showPreview, setShowPreview] = useState(false)\n const [currentSrc, setCurrentSrc] = useState(src)\n const [hasTriedFallback, setHasTriedFallback] = useState(false)\n\n useEffect(() => {\n setLoading(true)\n setError(false)\n setHasTriedFallback(false)\n setCurrentSrc(src)\n }, [src])\n\n const handleLoad = useCallback(() => {\n setLoading(false)\n setError(false)\n onLoad?.()\n }, [onLoad])\n\n const handleError = useCallback(() => {\n onError?.()\n if (fallback && !hasTriedFallback) {\n setHasTriedFallback(true)\n setCurrentSrc(fallback)\n setLoading(true)\n setError(false)\n return\n }\n setLoading(false)\n setError(true)\n }, [fallback, hasTriedFallback, onError])\n\n const handleImageClick = useCallback(() => {\n if (preview && !error && !loading) {\n setShowPreview(true)\n }\n }, [preview, error, loading])\n\n const handleClosePreview = useCallback(() => {\n setShowPreview(false)\n }, [])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (preview && !error && !loading && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault()\n setShowPreview(true)\n }\n },\n [preview, error, loading]\n )\n\n const handlePreviewKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n setShowPreview(false)\n }\n }, [])\n\n const getStyle = (): React.CSSProperties => {\n const style: React.CSSProperties = {}\n if (width) {\n style.width = typeof width === 'number' ? `${width}px` : width\n }\n if (height) {\n style.height = typeof height === 'number' ? `${height}px` : height\n }\n return style\n }\n\n const isPreviewable = preview && !error && !loading\n const imageClasses = [\n className,\n isPreviewable ? 'cursor-pointer hover:opacity-80 transition-opacity' : '',\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <>\n <div\n className=\"relative inline-block\"\n style={getStyle()}\n data-testid={testId}\n data-state={loading ? 'loading' : error ? 'error' : 'loaded'}\n >\n {loading && placeholder && (\n <div\n className=\"absolute inset-0 flex items-center justify-center bg-base-200\"\n data-testid={`${testId}-placeholder`}\n >\n {placeholder}\n </div>\n )}\n <img\n ref={ref}\n {...props}\n src={currentSrc}\n alt={alt}\n className={imageClasses}\n style={{\n ...getStyle(),\n opacity: loading ? 0 : 1,\n transition: 'opacity 150ms ease',\n }}\n onLoad={handleLoad}\n onError={handleError}\n onClick={handleImageClick}\n onKeyDown={handleKeyDown}\n tabIndex={isPreviewable ? 0 : undefined}\n role={isPreviewable ? 'button' : undefined}\n aria-label={isPreviewable ? `${alt || 'Image'} (click to preview)` : undefined}\n data-testid={`${testId}-img`}\n />\n {error && (\n <div\n className=\"flex items-center justify-center bg-base-200 text-base-content/50\"\n style={getStyle()}\n data-testid={`${testId}-error`}\n role=\"img\"\n aria-label={`Failed to load: ${alt || 'image'}`}\n >\n <svg\n className=\"w-12 h-12\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\"\n />\n </svg>\n </div>\n )}\n </div>\n\n {showPreview && (\n <div\n className=\"fixed inset-0 z-50 bg-black bg-opacity-80 flex items-center justify-center p-4\"\n onClick={handleClosePreview}\n onKeyDown={handlePreviewKeyDown}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={`Preview: ${alt || 'Image'}`}\n data-testid={`${testId}-preview`}\n >\n <div className=\"relative max-w-full max-h-full\">\n <button\n className={`absolute top-4 right-4 ${dBtn} ${dBtnCircle} ${dBtnSm}`}\n onClick={handleClosePreview}\n aria-label=\"Close preview\"\n autoFocus\n data-testid={`${testId}-preview-close`}\n >\n <svg\n className=\"w-6 h-6\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n <img\n src={src}\n alt={alt}\n className=\"max-w-full max-h-[90vh] object-contain\"\n onClick={(e) => e.stopPropagation()}\n data-testid={`${testId}-preview-img`}\n />\n </div>\n </div>\n )}\n </>\n )\n }\n)\n\nImage.displayName = 'Image'\n"],"names":["dBtn","dBtnCircle","dBtnSm","Image","forwardRef","src","alt","fallback","placeholder","preview","width","height","className","onLoad","onError","testId","props","ref","loading","setLoading","useState","error","setError","showPreview","setShowPreview","currentSrc","setCurrentSrc","hasTriedFallback","setHasTriedFallback","useEffect","handleLoad","useCallback","handleError","handleImageClick","handleClosePreview","handleKeyDown","handlePreviewKeyDown","getStyle","style","isPreviewable","imageClasses","jsxs","Fragment","jsx"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { Affix } from './components/Affix';
|
|
2
2
|
export type { AffixProps } from './components/Affix';
|
|
3
|
+
export { AspectRatio } from './components/AspectRatio';
|
|
4
|
+
export type { AspectRatioProps } from './components/AspectRatio';
|
|
3
5
|
export { Anchor } from './components/Anchor';
|
|
4
6
|
export type { AnchorProps, AnchorLinkProps, AnchorLinkItem } from './components/Anchor';
|
|
5
7
|
export { Alert } from './components/Alert';
|
package/dist/index.js
CHANGED
|
@@ -1,264 +1,266 @@
|
|
|
1
1
|
import { Affix as e } from "./components/Affix.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
import {
|
|
34
|
-
import {
|
|
35
|
-
import {
|
|
36
|
-
import {
|
|
37
|
-
import {
|
|
38
|
-
import {
|
|
39
|
-
import {
|
|
40
|
-
import {
|
|
41
|
-
import {
|
|
42
|
-
import {
|
|
43
|
-
import {
|
|
44
|
-
import {
|
|
45
|
-
import {
|
|
46
|
-
import {
|
|
47
|
-
import {
|
|
48
|
-
import {
|
|
49
|
-
import {
|
|
50
|
-
import {
|
|
51
|
-
import {
|
|
52
|
-
import {
|
|
53
|
-
import {
|
|
54
|
-
import {
|
|
55
|
-
import {
|
|
56
|
-
import {
|
|
57
|
-
import {
|
|
58
|
-
import {
|
|
59
|
-
import {
|
|
60
|
-
import {
|
|
61
|
-
import {
|
|
62
|
-
import {
|
|
63
|
-
import {
|
|
64
|
-
import {
|
|
65
|
-
import {
|
|
66
|
-
import {
|
|
67
|
-
import {
|
|
68
|
-
import {
|
|
69
|
-
import {
|
|
70
|
-
import {
|
|
71
|
-
import {
|
|
72
|
-
import {
|
|
73
|
-
import {
|
|
74
|
-
import {
|
|
75
|
-
import {
|
|
76
|
-
import {
|
|
77
|
-
import {
|
|
78
|
-
import {
|
|
79
|
-
import {
|
|
80
|
-
import {
|
|
81
|
-
import {
|
|
82
|
-
import {
|
|
83
|
-
import {
|
|
84
|
-
import {
|
|
85
|
-
import {
|
|
86
|
-
import {
|
|
87
|
-
import {
|
|
88
|
-
import {
|
|
89
|
-
import {
|
|
90
|
-
import {
|
|
91
|
-
import {
|
|
92
|
-
import {
|
|
93
|
-
import {
|
|
94
|
-
import {
|
|
95
|
-
import {
|
|
96
|
-
import {
|
|
97
|
-
import {
|
|
98
|
-
import {
|
|
99
|
-
import {
|
|
100
|
-
import {
|
|
101
|
-
import {
|
|
102
|
-
import {
|
|
103
|
-
import {
|
|
104
|
-
import {
|
|
105
|
-
import {
|
|
106
|
-
import {
|
|
107
|
-
import {
|
|
108
|
-
import {
|
|
109
|
-
import {
|
|
110
|
-
import {
|
|
111
|
-
import {
|
|
112
|
-
import {
|
|
113
|
-
import { default as Ft } from "./locale/en-
|
|
114
|
-
import { default as At } from "./locale/en-
|
|
115
|
-
import { default as It } from "./locale/
|
|
116
|
-
import { default as Ht } from "./locale/
|
|
117
|
-
import { default as Kt } from "./locale/
|
|
118
|
-
import { default as Et } from "./locale/
|
|
119
|
-
import { default as Jt } from "./locale/
|
|
120
|
-
import { default as Ut } from "./locale/
|
|
121
|
-
import { default as qt } from "./locale/
|
|
2
|
+
import { AspectRatio as p } from "./components/AspectRatio.js";
|
|
3
|
+
import { Anchor as f } from "./components/Anchor.js";
|
|
4
|
+
import { Alert as a } from "./components/Alert.js";
|
|
5
|
+
import { Autocomplete as n } from "./components/Autocomplete.js";
|
|
6
|
+
import { Avatar as u, AvatarGroup as l } from "./components/Avatar.js";
|
|
7
|
+
import { Badge as C } from "./components/Badge.js";
|
|
8
|
+
import { Breadcrumb as g } from "./components/Breadcrumb.js";
|
|
9
|
+
import { Button as S } from "./components/Button.js";
|
|
10
|
+
import { SizeContext as h, SizeProvider as k, useSize as v } from "./contexts/SizeContext.js";
|
|
11
|
+
import { CopyButton as b } from "./components/CopyButton.js";
|
|
12
|
+
import { Checkbox as w } from "./components/Checkbox.js";
|
|
13
|
+
import { Chat as B } from "./components/Chat.js";
|
|
14
|
+
import { ColorPicker as M } from "./components/ColorPicker.js";
|
|
15
|
+
import { Card as L } from "./components/Card.js";
|
|
16
|
+
import { Carousel as z } from "./components/Carousel.js";
|
|
17
|
+
import { Cascader as G } from "./components/Cascader.js";
|
|
18
|
+
import { ConfigContext as W, ConfigProvider as E, useComponentLocale as N, useConfig as J, useLocale as O } from "./providers/ConfigProvider.js";
|
|
19
|
+
import { Collapse as j } from "./components/Collapse.js";
|
|
20
|
+
import { Command as Q } from "./components/Command.js";
|
|
21
|
+
import { Container as X } from "./components/Container.js";
|
|
22
|
+
import { ContextMenu as Z } from "./components/ContextMenu.js";
|
|
23
|
+
import { Countdown as $ } from "./components/Countdown.js";
|
|
24
|
+
import { DatePicker as ro } from "./components/DatePicker.js";
|
|
25
|
+
import { MonthCalendar as to } from "./components/MonthCalendar.js";
|
|
26
|
+
import { WeekCalendar as mo } from "./components/WeekCalendar.js";
|
|
27
|
+
import { Descriptions as xo } from "./components/Descriptions.js";
|
|
28
|
+
import { Diff as so } from "./components/Diff.js";
|
|
29
|
+
import { Dock as io } from "./components/Dock.js";
|
|
30
|
+
import { Divider as lo } from "./components/Divider.js";
|
|
31
|
+
import { Drawer as co } from "./components/Drawer.js";
|
|
32
|
+
import { ResponsiveDrawer as To } from "./components/ResponsiveDrawer.js";
|
|
33
|
+
import { Fieldset as Po } from "./components/Fieldset.js";
|
|
34
|
+
import { FileInput as ko } from "./components/FileInput.js";
|
|
35
|
+
import { Filter as Ro } from "./components/Filter.js";
|
|
36
|
+
import { Flex as Do } from "./components/Flex.js";
|
|
37
|
+
import { FloatButton as yo } from "./components/FloatButton.js";
|
|
38
|
+
import { Footer as Fo } from "./components/Footer.js";
|
|
39
|
+
import { Form as Ao, useFormInstance as Lo } from "./components/Form.js";
|
|
40
|
+
import { Col as zo, Grid as Ho, Row as Go } from "./components/Grid.js";
|
|
41
|
+
import { Hero as Wo } from "./components/Hero.js";
|
|
42
|
+
import { HoverGallery as No } from "./components/HoverGallery.js";
|
|
43
|
+
import { Image as Oo } from "./components/Image.js";
|
|
44
|
+
import { Dropdown as jo } from "./components/Dropdown.js";
|
|
45
|
+
import { Empty as Qo } from "./components/Empty.js";
|
|
46
|
+
import { Input as Xo } from "./components/Input.js";
|
|
47
|
+
import { InputNumber as Zo } from "./components/InputNumber.js";
|
|
48
|
+
import { Join as $o } from "./components/Join.js";
|
|
49
|
+
import { Kbd as rr } from "./components/Kbd.js";
|
|
50
|
+
import { Layout as tr, useSiderContext as pr } from "./components/Layout.js";
|
|
51
|
+
import { List as fr } from "./components/List.js";
|
|
52
|
+
import { Loading as ar } from "./components/Loading.js";
|
|
53
|
+
import { Mask as nr } from "./components/Mask.js";
|
|
54
|
+
import { Masonry as ur } from "./components/Masonry.js";
|
|
55
|
+
import { Mention as dr } from "./components/Mention.js";
|
|
56
|
+
import { Menu as cr } from "./components/Menu.js";
|
|
57
|
+
import { Browser as Tr } from "./components/Browser.js";
|
|
58
|
+
import { Code as Pr } from "./components/Code.js";
|
|
59
|
+
import { Phone as kr } from "./components/Phone.js";
|
|
60
|
+
import { Window as Rr } from "./components/Window.js";
|
|
61
|
+
import { Modal as Dr } from "./components/Modal.js";
|
|
62
|
+
import { Navbar as yr } from "./components/Navbar.js";
|
|
63
|
+
import { notification as Fr } from "./components/Notification.js";
|
|
64
|
+
import { MessageManager as Ar, message as Lr } from "./components/Message.js";
|
|
65
|
+
import { OTPInput as zr } from "./components/OTPInput.js";
|
|
66
|
+
import { Pagination as Gr } from "./components/Pagination.js";
|
|
67
|
+
import { Popconfirm as Wr } from "./components/Popconfirm.js";
|
|
68
|
+
import { Popover as Nr } from "./components/Popover.js";
|
|
69
|
+
import { Progress as Or } from "./components/Progress.js";
|
|
70
|
+
import { Radio as jr } from "./components/Radio.js";
|
|
71
|
+
import { RadialProgress as Qr } from "./components/RadialProgress.js";
|
|
72
|
+
import { Range as Xr } from "./components/Range.js";
|
|
73
|
+
import { Rating as Zr } from "./components/Rating.js";
|
|
74
|
+
import { Result as $r } from "./components/Result.js";
|
|
75
|
+
import { Select as re } from "./components/Select.js";
|
|
76
|
+
import { Segmented as te } from "./components/Segmented.js";
|
|
77
|
+
import { Skeleton as me } from "./components/Skeleton.js";
|
|
78
|
+
import { Space as xe } from "./components/Space.js";
|
|
79
|
+
import { Splitter as se } from "./components/Splitter.js";
|
|
80
|
+
import { Stats as ie } from "./components/Stat.js";
|
|
81
|
+
import { Status as le } from "./components/Status.js";
|
|
82
|
+
import { Steps as Ce } from "./components/Steps.js";
|
|
83
|
+
import { Table as ge } from "./components/Table.js";
|
|
84
|
+
import { Tabs as Se } from "./components/Tabs.js";
|
|
85
|
+
import { Textarea as he } from "./components/Textarea.js";
|
|
86
|
+
import { TextRotate as ve } from "./components/TextRotate.js";
|
|
87
|
+
import { CheckableTag as be, Tag as De, TagLiveRegion as we } from "./components/Tag.js";
|
|
88
|
+
import { ThemeController as Be } from "./components/ThemeController.js";
|
|
89
|
+
import { ThemeProvider as Me, useHasThemeProvider as Ae, useThemeContext as Le } from "./providers/ThemeProvider.js";
|
|
90
|
+
import { TimePicker as ze } from "./components/TimePicker.js";
|
|
91
|
+
import { Timeline as Ge } from "./components/Timeline.js";
|
|
92
|
+
import { Toggle as We } from "./components/Toggle.js";
|
|
93
|
+
import { Tour as Ne } from "./components/Tour.js";
|
|
94
|
+
import { Tooltip as Oe } from "./components/Tooltip.js";
|
|
95
|
+
import { Transfer as je } from "./components/Transfer.js";
|
|
96
|
+
import { Tree as Qe } from "./components/Tree.js";
|
|
97
|
+
import { TreeSelect as Xe, TreeSelectComponent as Ye } from "./components/TreeSelect.js";
|
|
98
|
+
import { Typography as _e } from "./components/Typography.js";
|
|
99
|
+
import { Upload as ot } from "./components/Upload.js";
|
|
100
|
+
import { Watermark as et } from "./components/Watermark.js";
|
|
101
|
+
import { Hide as pt, Show as mt } from "./components/Responsive.js";
|
|
102
|
+
import { useBreakpoint as xt } from "./hooks/useBreakpoint.js";
|
|
103
|
+
import { useDisclosure as st } from "./hooks/useDisclosure.js";
|
|
104
|
+
import { useClipboard as it } from "./hooks/useClipboard.js";
|
|
105
|
+
import { useLocalStorage as lt } from "./hooks/useLocalStorage.js";
|
|
106
|
+
import { useDebounce as Ct } from "./hooks/useDebounce.js";
|
|
107
|
+
import { useClickOutside as gt } from "./hooks/useClickOutside.js";
|
|
108
|
+
import { usePrevious as St } from "./hooks/usePrevious.js";
|
|
109
|
+
import { useHover as ht } from "./hooks/useHover.js";
|
|
110
|
+
import { useKeyPress as vt, useKeyPressCallback as Rt } from "./hooks/useKeyPress.js";
|
|
111
|
+
import { useWindowSize as Dt } from "./hooks/useWindowSize.js";
|
|
112
|
+
import { useTheme as yt } from "./hooks/useTheme.js";
|
|
113
|
+
import { default as Ft } from "./locale/en-US.js";
|
|
114
|
+
import { default as At } from "./locale/en-GB.js";
|
|
115
|
+
import { default as It } from "./locale/en-CA.js";
|
|
116
|
+
import { default as Ht } from "./locale/zh-CN.js";
|
|
117
|
+
import { default as Kt } from "./locale/es-ES.js";
|
|
118
|
+
import { default as Et } from "./locale/ja-JP.js";
|
|
119
|
+
import { default as Jt } from "./locale/pt-BR.js";
|
|
120
|
+
import { default as Ut } from "./locale/de-DE.js";
|
|
121
|
+
import { default as qt } from "./locale/fr-FR.js";
|
|
122
|
+
import { default as Vt } from "./locale/ko-KR.js";
|
|
122
123
|
export {
|
|
123
124
|
e as Affix,
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
n as
|
|
128
|
-
|
|
129
|
-
l as
|
|
130
|
-
C as
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
L as
|
|
135
|
-
z as
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
X as
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
$ as
|
|
151
|
-
|
|
152
|
-
xo as
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
jo as
|
|
158
|
-
|
|
159
|
-
Po as
|
|
160
|
-
ko as
|
|
161
|
-
Ro as
|
|
162
|
-
Do as
|
|
163
|
-
yo as
|
|
164
|
-
Fo as
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
No as
|
|
170
|
-
|
|
171
|
-
Xo as
|
|
172
|
-
Zo as
|
|
173
|
-
$o as
|
|
174
|
-
rr as
|
|
175
|
-
|
|
176
|
-
fr as
|
|
177
|
-
ar as
|
|
178
|
-
nr as
|
|
179
|
-
ur as
|
|
180
|
-
dr as
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
zr as
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
Wr as
|
|
190
|
-
Nr as
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
Xr as
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
me as
|
|
205
|
-
xe as
|
|
206
|
-
se as
|
|
207
|
-
ie as
|
|
208
|
-
le as
|
|
209
|
-
Ce as
|
|
210
|
-
ge as
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
Be as
|
|
217
|
-
|
|
218
|
-
ze as
|
|
219
|
-
Ge as
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
je as
|
|
224
|
-
Qe as
|
|
225
|
-
|
|
226
|
-
Ye as
|
|
227
|
-
_e as
|
|
228
|
-
ot as
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
ht as
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
125
|
+
a as Alert,
|
|
126
|
+
f as Anchor,
|
|
127
|
+
p as AspectRatio,
|
|
128
|
+
n as Autocomplete,
|
|
129
|
+
u as Avatar,
|
|
130
|
+
l as AvatarGroup,
|
|
131
|
+
C as Badge,
|
|
132
|
+
g as Breadcrumb,
|
|
133
|
+
Tr as Browser,
|
|
134
|
+
S as Button,
|
|
135
|
+
L as Card,
|
|
136
|
+
z as Carousel,
|
|
137
|
+
G as Cascader,
|
|
138
|
+
B as Chat,
|
|
139
|
+
be as CheckableTag,
|
|
140
|
+
w as Checkbox,
|
|
141
|
+
Pr as Code,
|
|
142
|
+
zo as Col,
|
|
143
|
+
j as Collapse,
|
|
144
|
+
M as ColorPicker,
|
|
145
|
+
Q as Command,
|
|
146
|
+
W as ConfigContext,
|
|
147
|
+
E as ConfigProvider,
|
|
148
|
+
X as Container,
|
|
149
|
+
Z as ContextMenu,
|
|
150
|
+
b as CopyButton,
|
|
151
|
+
$ as Countdown,
|
|
152
|
+
ro as DatePicker,
|
|
153
|
+
xo as Descriptions,
|
|
154
|
+
so as Diff,
|
|
155
|
+
lo as Divider,
|
|
156
|
+
io as Dock,
|
|
157
|
+
co as Drawer,
|
|
158
|
+
jo as Dropdown,
|
|
159
|
+
Qo as Empty,
|
|
160
|
+
Po as Fieldset,
|
|
161
|
+
ko as FileInput,
|
|
162
|
+
Ro as Filter,
|
|
163
|
+
Do as Flex,
|
|
164
|
+
yo as FloatButton,
|
|
165
|
+
Fo as Footer,
|
|
166
|
+
Ao as Form,
|
|
167
|
+
Ho as Grid,
|
|
168
|
+
Wo as Hero,
|
|
169
|
+
pt as Hide,
|
|
170
|
+
No as HoverGallery,
|
|
171
|
+
Oo as Image,
|
|
172
|
+
Xo as Input,
|
|
173
|
+
Zo as InputNumber,
|
|
174
|
+
$o as Join,
|
|
175
|
+
rr as Kbd,
|
|
176
|
+
tr as Layout,
|
|
177
|
+
fr as List,
|
|
178
|
+
ar as Loading,
|
|
179
|
+
nr as Mask,
|
|
180
|
+
ur as Masonry,
|
|
181
|
+
dr as Mention,
|
|
182
|
+
cr as Menu,
|
|
183
|
+
Ar as MessageManager,
|
|
184
|
+
Dr as Modal,
|
|
185
|
+
to as MonthCalendar,
|
|
186
|
+
yr as Navbar,
|
|
187
|
+
zr as OTPInput,
|
|
188
|
+
Gr as Pagination,
|
|
189
|
+
kr as Phone,
|
|
190
|
+
Wr as Popconfirm,
|
|
191
|
+
Nr as Popover,
|
|
192
|
+
Or as Progress,
|
|
193
|
+
Qr as RadialProgress,
|
|
194
|
+
jr as Radio,
|
|
195
|
+
Xr as Range,
|
|
196
|
+
Zr as Rating,
|
|
197
|
+
To as ResponsiveDrawer,
|
|
198
|
+
$r as Result,
|
|
199
|
+
Go as Row,
|
|
200
|
+
te as Segmented,
|
|
201
|
+
re as Select,
|
|
202
|
+
mt as Show,
|
|
203
|
+
h as SizeContext,
|
|
204
|
+
k as SizeProvider,
|
|
205
|
+
me as Skeleton,
|
|
206
|
+
xe as Space,
|
|
207
|
+
se as Splitter,
|
|
208
|
+
ie as Stats,
|
|
209
|
+
le as Status,
|
|
210
|
+
Ce as Steps,
|
|
211
|
+
ge as Table,
|
|
212
|
+
Se as Tabs,
|
|
213
|
+
De as Tag,
|
|
214
|
+
we as TagLiveRegion,
|
|
215
|
+
ve as TextRotate,
|
|
216
|
+
he as Textarea,
|
|
217
|
+
Be as ThemeController,
|
|
218
|
+
Me as ThemeProvider,
|
|
219
|
+
ze as TimePicker,
|
|
220
|
+
Ge as Timeline,
|
|
221
|
+
We as Toggle,
|
|
222
|
+
Oe as Tooltip,
|
|
223
|
+
Ne as Tour,
|
|
224
|
+
je as Transfer,
|
|
225
|
+
Qe as Tree,
|
|
226
|
+
Xe as TreeSelect,
|
|
227
|
+
Ye as TreeSelectComponent,
|
|
228
|
+
_e as Typography,
|
|
229
|
+
ot as Upload,
|
|
230
|
+
et as Watermark,
|
|
231
|
+
mo as WeekCalendar,
|
|
232
|
+
Rr as Window,
|
|
233
|
+
Ut as deDE,
|
|
234
|
+
It as enCA,
|
|
235
|
+
At as enGB,
|
|
236
|
+
Ft as enUS,
|
|
237
|
+
Kt as esES,
|
|
238
|
+
qt as frFR,
|
|
239
|
+
Et as jaJP,
|
|
240
|
+
Vt as koKR,
|
|
241
|
+
Lr as message,
|
|
242
|
+
Fr as notification,
|
|
243
|
+
Jt as ptBR,
|
|
244
|
+
xt as useBreakpoint,
|
|
245
|
+
gt as useClickOutside,
|
|
246
|
+
it as useClipboard,
|
|
247
|
+
N as useComponentLocale,
|
|
248
|
+
J as useConfig,
|
|
249
|
+
Ct as useDebounce,
|
|
250
|
+
st as useDisclosure,
|
|
251
|
+
Lo as useFormInstance,
|
|
252
|
+
Ae as useHasThemeProvider,
|
|
253
|
+
ht as useHover,
|
|
254
|
+
vt as useKeyPress,
|
|
255
|
+
Rt as useKeyPressCallback,
|
|
256
|
+
lt as useLocalStorage,
|
|
257
|
+
O as useLocale,
|
|
258
|
+
St as usePrevious,
|
|
259
|
+
pr as useSiderContext,
|
|
260
|
+
v as useSize,
|
|
261
|
+
yt as useTheme,
|
|
262
|
+
Le as useThemeContext,
|
|
263
|
+
Dt as useWindowSize,
|
|
264
|
+
Ht as zhCN
|
|
263
265
|
};
|
|
264
266
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|