erp-pro-ui 0.1.3 → 0.1.4
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/animations.css +40 -0
- package/dist/chunks/skeleton-BNea1Rcp.cjs +422 -0
- package/dist/chunks/skeleton-BNea1Rcp.cjs.map +1 -0
- package/dist/chunks/skeleton-CtLumdRw.mjs +368 -0
- package/dist/chunks/skeleton-CtLumdRw.mjs.map +1 -0
- package/dist/components/data-display/skeleton/Skeleton.d.ts +32 -5
- package/dist/components/data-display/skeleton/Skeleton.d.ts.map +1 -1
- package/dist/components/data-display/skeleton/index.d.ts +2 -2
- package/dist/components/data-display/skeleton/index.d.ts.map +1 -1
- package/dist/docs.cjs +2 -2
- package/dist/docs.cjs.map +1 -1
- package/dist/docs.mjs +2 -2
- package/dist/docs.mjs.map +1 -1
- package/dist/index.cjs +9 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/skeleton.cjs +9 -1
- package/dist/skeleton.mjs +2 -2
- package/package.json +6 -6
- package/dist/chunks/skeleton-BhYWOp0Q.mjs +0 -215
- package/dist/chunks/skeleton-BhYWOp0Q.mjs.map +0 -1
- package/dist/chunks/skeleton-DTXpHYYB.cjs +0 -221
- package/dist/chunks/skeleton-DTXpHYYB.cjs.map +0 -1
package/dist/animations.css
CHANGED
|
@@ -89,3 +89,43 @@
|
|
|
89
89
|
.ui\:animate-gradient-fifth {
|
|
90
90
|
animation: moveInCircle 20s ease infinite;
|
|
91
91
|
}
|
|
92
|
+
|
|
93
|
+
@keyframes ui-skeleton-pulse {
|
|
94
|
+
0%,
|
|
95
|
+
100% {
|
|
96
|
+
opacity: 1;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
50% {
|
|
100
|
+
opacity: 0.58;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
@keyframes ui-skeleton-wave {
|
|
105
|
+
0% {
|
|
106
|
+
background-position: 200% 0;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
100% {
|
|
110
|
+
background-position: -200% 0;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.ui-skeleton-pulse {
|
|
115
|
+
animation: ui-skeleton-pulse var(--ui-skeleton-duration, 1.6s) ease-in-out
|
|
116
|
+
infinite;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.ui-skeleton-wave {
|
|
120
|
+
background-image: linear-gradient(
|
|
121
|
+
90deg,
|
|
122
|
+
var(--ui-skeleton-base) 0%,
|
|
123
|
+
var(--ui-skeleton-base) 30%,
|
|
124
|
+
var(--ui-skeleton-highlight) 50%,
|
|
125
|
+
var(--ui-skeleton-base) 70%,
|
|
126
|
+
var(--ui-skeleton-base) 100%
|
|
127
|
+
);
|
|
128
|
+
background-size: 220% 100%;
|
|
129
|
+
animation: ui-skeleton-wave var(--ui-skeleton-duration, 1.6s) linear infinite;
|
|
130
|
+
will-change: background-position;
|
|
131
|
+
}
|
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
require("./chunk-B_GkZjkl.cjs");
|
|
2
|
+
const require_utils = require("./utils-B4SmmY4J.cjs");
|
|
3
|
+
let react = require("react");
|
|
4
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
5
|
+
//#region src/components/data-display/skeleton/Skeleton.tsx
|
|
6
|
+
var animationStyles = {
|
|
7
|
+
pulse: "ui-skeleton-pulse",
|
|
8
|
+
wave: "ui-skeleton-wave",
|
|
9
|
+
none: ""
|
|
10
|
+
};
|
|
11
|
+
var radiusStyles = {
|
|
12
|
+
none: "rounded-none",
|
|
13
|
+
sm: "rounded-sm",
|
|
14
|
+
md: "rounded-md",
|
|
15
|
+
lg: "rounded-lg",
|
|
16
|
+
xl: "rounded-xl",
|
|
17
|
+
full: "rounded-full"
|
|
18
|
+
};
|
|
19
|
+
var variantStyles = {
|
|
20
|
+
text: "sm",
|
|
21
|
+
circular: "full",
|
|
22
|
+
rectangular: "none",
|
|
23
|
+
rounded: "md"
|
|
24
|
+
};
|
|
25
|
+
var speedStyles = {
|
|
26
|
+
slow: "2.4s",
|
|
27
|
+
normal: "1.6s",
|
|
28
|
+
fast: "1.05s"
|
|
29
|
+
};
|
|
30
|
+
var toneStyles = {
|
|
31
|
+
default: {
|
|
32
|
+
base: "var(--color-muted)",
|
|
33
|
+
highlight: "color-mix(in oklch, var(--color-muted) 54%, var(--color-background))"
|
|
34
|
+
},
|
|
35
|
+
subtle: {
|
|
36
|
+
base: "color-mix(in oklch, var(--color-muted) 72%, var(--color-background))",
|
|
37
|
+
highlight: "color-mix(in oklch, var(--color-muted) 42%, var(--color-background))"
|
|
38
|
+
},
|
|
39
|
+
accent: {
|
|
40
|
+
base: "var(--color-accent-subtle)",
|
|
41
|
+
highlight: "color-mix(in oklch, var(--color-accent-subtle) 48%, var(--color-background))"
|
|
42
|
+
},
|
|
43
|
+
success: {
|
|
44
|
+
base: "var(--color-success-subtle)",
|
|
45
|
+
highlight: "color-mix(in oklch, var(--color-success-subtle) 48%, var(--color-background))"
|
|
46
|
+
},
|
|
47
|
+
warning: {
|
|
48
|
+
base: "var(--color-warning-subtle)",
|
|
49
|
+
highlight: "color-mix(in oklch, var(--color-warning-subtle) 48%, var(--color-background))"
|
|
50
|
+
},
|
|
51
|
+
danger: {
|
|
52
|
+
base: "var(--color-danger-subtle)",
|
|
53
|
+
highlight: "color-mix(in oklch, var(--color-danger-subtle) 48%, var(--color-background))"
|
|
54
|
+
},
|
|
55
|
+
info: {
|
|
56
|
+
base: "var(--color-info-subtle)",
|
|
57
|
+
highlight: "color-mix(in oklch, var(--color-info-subtle) 48%, var(--color-background))"
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
function resolveDimension(value) {
|
|
61
|
+
if (typeof value === "number") return `${value}px`;
|
|
62
|
+
return value;
|
|
63
|
+
}
|
|
64
|
+
function resolveDuration(value) {
|
|
65
|
+
if (typeof value === "number") return `${value}ms`;
|
|
66
|
+
if (typeof value === "string" && value in speedStyles) return speedStyles[value];
|
|
67
|
+
return value ?? speedStyles.normal;
|
|
68
|
+
}
|
|
69
|
+
function getDimensionStyle({ variant, width, height, borderRadius }) {
|
|
70
|
+
const nextStyle = {};
|
|
71
|
+
const resolvedWidth = resolveDimension(width);
|
|
72
|
+
const resolvedHeight = resolveDimension(height);
|
|
73
|
+
const resolvedBorderRadius = resolveDimension(borderRadius);
|
|
74
|
+
if (resolvedWidth) nextStyle.width = resolvedWidth;
|
|
75
|
+
else if (variant === "text") nextStyle.width = "100%";
|
|
76
|
+
if (resolvedHeight) nextStyle.height = resolvedHeight;
|
|
77
|
+
else if (variant === "text") nextStyle.height = "1em";
|
|
78
|
+
else if (variant === "circular") {
|
|
79
|
+
nextStyle.width = nextStyle.width || "40px";
|
|
80
|
+
nextStyle.height = nextStyle.width;
|
|
81
|
+
}
|
|
82
|
+
if (resolvedBorderRadius) nextStyle.borderRadius = resolvedBorderRadius;
|
|
83
|
+
return nextStyle;
|
|
84
|
+
}
|
|
85
|
+
var Skeleton = (0, react.forwardRef)(({ variant = "text", animation = "pulse", width, height, borderRadius, radius, tone = "default", speed = "normal", className, lines = 1, lineGap = 8, lastLineWidth = "80%", style, ["aria-hidden"]: ariaHidden, ...rest }, ref) => {
|
|
86
|
+
const toneStyle = toneStyles[tone];
|
|
87
|
+
const sharedStyle = {
|
|
88
|
+
"--ui-skeleton-base": toneStyle.base,
|
|
89
|
+
"--ui-skeleton-highlight": toneStyle.highlight,
|
|
90
|
+
"--ui-skeleton-duration": resolveDuration(speed),
|
|
91
|
+
...style
|
|
92
|
+
};
|
|
93
|
+
const sharedClassName = require_utils.mergeClassNames("relative overflow-hidden bg-[var(--ui-skeleton-base)] pointer-events-none select-none shrink-0", radiusStyles[radius ?? variantStyles[variant]], animationStyles[animation]);
|
|
94
|
+
if (variant === "text" && lines > 1) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
95
|
+
ref,
|
|
96
|
+
className: require_utils.mergeClassNames("flex flex-col", className),
|
|
97
|
+
style: {
|
|
98
|
+
...style,
|
|
99
|
+
gap: resolveDimension(lineGap),
|
|
100
|
+
width: resolveDimension(width) ?? style?.width
|
|
101
|
+
},
|
|
102
|
+
"aria-hidden": ariaHidden ?? true,
|
|
103
|
+
"data-animation": animation,
|
|
104
|
+
"data-tone": tone,
|
|
105
|
+
...rest,
|
|
106
|
+
children: Array.from({ length: lines }).map((_, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
107
|
+
className: sharedClassName,
|
|
108
|
+
style: {
|
|
109
|
+
...sharedStyle,
|
|
110
|
+
...getDimensionStyle({
|
|
111
|
+
variant,
|
|
112
|
+
width: index === lines - 1 ? lastLineWidth : width ?? "100%",
|
|
113
|
+
height,
|
|
114
|
+
borderRadius
|
|
115
|
+
})
|
|
116
|
+
}
|
|
117
|
+
}, index))
|
|
118
|
+
});
|
|
119
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
120
|
+
ref,
|
|
121
|
+
className: require_utils.mergeClassNames(sharedClassName, className),
|
|
122
|
+
style: {
|
|
123
|
+
...sharedStyle,
|
|
124
|
+
...getDimensionStyle({
|
|
125
|
+
variant,
|
|
126
|
+
width,
|
|
127
|
+
height,
|
|
128
|
+
borderRadius
|
|
129
|
+
})
|
|
130
|
+
},
|
|
131
|
+
"aria-hidden": ariaHidden ?? true,
|
|
132
|
+
"data-animation": animation,
|
|
133
|
+
"data-tone": tone,
|
|
134
|
+
...rest
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
Skeleton.displayName = "Skeleton";
|
|
138
|
+
var SkeletonText = (0, react.forwardRef)(({ lines = 3, ...props }, ref) => {
|
|
139
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Skeleton, {
|
|
140
|
+
ref,
|
|
141
|
+
variant: "text",
|
|
142
|
+
lines,
|
|
143
|
+
...props
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
SkeletonText.displayName = "SkeletonText";
|
|
147
|
+
var SkeletonAvatar = (0, react.forwardRef)(({ size = 40, animation = "pulse", className = "", ...props }, ref) => {
|
|
148
|
+
const sizeValue = typeof size === "number" ? `${size}px` : size;
|
|
149
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Skeleton, {
|
|
150
|
+
ref,
|
|
151
|
+
variant: "circular",
|
|
152
|
+
width: sizeValue,
|
|
153
|
+
height: sizeValue,
|
|
154
|
+
animation,
|
|
155
|
+
className,
|
|
156
|
+
...props
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
SkeletonAvatar.displayName = "SkeletonAvatar";
|
|
160
|
+
var SkeletonButton = (0, react.forwardRef)(({ size = "md", animation = "pulse", className = "", ...props }, ref) => {
|
|
161
|
+
const sizeStyles = {
|
|
162
|
+
sm: {
|
|
163
|
+
width: 80,
|
|
164
|
+
height: 32
|
|
165
|
+
},
|
|
166
|
+
md: {
|
|
167
|
+
width: 100,
|
|
168
|
+
height: 40
|
|
169
|
+
},
|
|
170
|
+
lg: {
|
|
171
|
+
width: 120,
|
|
172
|
+
height: 48
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Skeleton, {
|
|
176
|
+
ref,
|
|
177
|
+
variant: "rounded",
|
|
178
|
+
width: sizeStyles[size].width,
|
|
179
|
+
height: sizeStyles[size].height,
|
|
180
|
+
animation,
|
|
181
|
+
className,
|
|
182
|
+
...props
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
SkeletonButton.displayName = "SkeletonButton";
|
|
186
|
+
var SkeletonImage = (0, react.forwardRef)(({ width = "100%", height = 200, animation = "pulse", className = "", ...props }, ref) => {
|
|
187
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Skeleton, {
|
|
188
|
+
ref,
|
|
189
|
+
variant: "rounded",
|
|
190
|
+
width,
|
|
191
|
+
height,
|
|
192
|
+
animation,
|
|
193
|
+
className,
|
|
194
|
+
...props
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
SkeletonImage.displayName = "SkeletonImage";
|
|
198
|
+
var SkeletonCard = (0, react.forwardRef)(({ showImage = true, imageHeight = 200, lines = 3, showAvatar = false, showActions = false, className, animation = "pulse", tone = "default" }, ref) => {
|
|
199
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
200
|
+
ref,
|
|
201
|
+
className: require_utils.mergeClassNames("overflow-hidden rounded-md border border-border bg-card shadow-sm", className),
|
|
202
|
+
children: [showImage && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SkeletonImage, {
|
|
203
|
+
height: imageHeight,
|
|
204
|
+
animation,
|
|
205
|
+
borderRadius: 0,
|
|
206
|
+
tone
|
|
207
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
208
|
+
className: "p-4 flex flex-col gap-4",
|
|
209
|
+
children: [
|
|
210
|
+
showAvatar && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
211
|
+
className: "flex items-center gap-3",
|
|
212
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SkeletonAvatar, {
|
|
213
|
+
size: 40,
|
|
214
|
+
animation,
|
|
215
|
+
tone
|
|
216
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
217
|
+
className: "flex-1",
|
|
218
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Skeleton, {
|
|
219
|
+
variant: "text",
|
|
220
|
+
width: "60%",
|
|
221
|
+
height: 14,
|
|
222
|
+
animation,
|
|
223
|
+
tone
|
|
224
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Skeleton, {
|
|
225
|
+
variant: "text",
|
|
226
|
+
width: "40%",
|
|
227
|
+
height: 12,
|
|
228
|
+
animation,
|
|
229
|
+
tone,
|
|
230
|
+
className: "mt-2"
|
|
231
|
+
})]
|
|
232
|
+
})]
|
|
233
|
+
}),
|
|
234
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SkeletonText, {
|
|
235
|
+
lines,
|
|
236
|
+
animation,
|
|
237
|
+
height: 14,
|
|
238
|
+
lineGap: 10,
|
|
239
|
+
tone
|
|
240
|
+
}),
|
|
241
|
+
showActions && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
242
|
+
className: "flex gap-3 mt-2",
|
|
243
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SkeletonButton, {
|
|
244
|
+
size: "sm",
|
|
245
|
+
animation,
|
|
246
|
+
tone
|
|
247
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SkeletonButton, {
|
|
248
|
+
size: "sm",
|
|
249
|
+
animation,
|
|
250
|
+
tone
|
|
251
|
+
})]
|
|
252
|
+
})
|
|
253
|
+
]
|
|
254
|
+
})]
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
SkeletonCard.displayName = "SkeletonCard";
|
|
258
|
+
var SkeletonMetricCard = (0, react.forwardRef)(({ showTrend = true, showChart = true, chartBars = 7, valueWidth = "52%", className, animation = "wave", tone = "accent" }, ref) => {
|
|
259
|
+
const chartHeights = [
|
|
260
|
+
36,
|
|
261
|
+
52,
|
|
262
|
+
46,
|
|
263
|
+
72,
|
|
264
|
+
64,
|
|
265
|
+
84,
|
|
266
|
+
68,
|
|
267
|
+
78
|
|
268
|
+
];
|
|
269
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
270
|
+
ref,
|
|
271
|
+
className: require_utils.mergeClassNames("rounded-md border border-border bg-card p-4 shadow-sm", className),
|
|
272
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
273
|
+
className: "flex items-start justify-between gap-4",
|
|
274
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
275
|
+
className: "min-w-0 flex-1 space-y-3",
|
|
276
|
+
children: [
|
|
277
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Skeleton, {
|
|
278
|
+
width: "34%",
|
|
279
|
+
height: 11,
|
|
280
|
+
animation,
|
|
281
|
+
tone: "subtle"
|
|
282
|
+
}),
|
|
283
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Skeleton, {
|
|
284
|
+
width: valueWidth,
|
|
285
|
+
height: 28,
|
|
286
|
+
animation,
|
|
287
|
+
tone,
|
|
288
|
+
radius: "md"
|
|
289
|
+
}),
|
|
290
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Skeleton, {
|
|
291
|
+
width: "44%",
|
|
292
|
+
height: 12,
|
|
293
|
+
animation,
|
|
294
|
+
tone: "subtle"
|
|
295
|
+
})
|
|
296
|
+
]
|
|
297
|
+
}), showTrend ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
298
|
+
className: "rounded-full border border-border bg-surface px-3 py-2",
|
|
299
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Skeleton, {
|
|
300
|
+
width: 54,
|
|
301
|
+
height: 12,
|
|
302
|
+
animation,
|
|
303
|
+
tone: "subtle"
|
|
304
|
+
})
|
|
305
|
+
}) : null]
|
|
306
|
+
}), showChart ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
307
|
+
className: "mt-5 flex h-20 items-end gap-2",
|
|
308
|
+
children: Array.from({ length: chartBars }).map((_, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Skeleton, {
|
|
309
|
+
variant: "rounded",
|
|
310
|
+
width: "100%",
|
|
311
|
+
height: `${chartHeights[index % chartHeights.length]}%`,
|
|
312
|
+
animation,
|
|
313
|
+
tone,
|
|
314
|
+
className: "flex-1"
|
|
315
|
+
}, index))
|
|
316
|
+
}) : null]
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
SkeletonMetricCard.displayName = "SkeletonMetricCard";
|
|
320
|
+
var SkeletonTableRow = (0, react.forwardRef)(({ columns = 4, animation = "pulse", className = "" }, ref) => {
|
|
321
|
+
const sharedWidth = columns <= 1 ? "100%" : `${Math.floor(72 / (columns - 1))}%`;
|
|
322
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
323
|
+
ref,
|
|
324
|
+
className: `flex items-center gap-4 py-3 ${className}`,
|
|
325
|
+
children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Skeleton, {
|
|
326
|
+
variant: "text",
|
|
327
|
+
width: index === 0 ? "28%" : sharedWidth,
|
|
328
|
+
height: 16,
|
|
329
|
+
animation
|
|
330
|
+
}, index))
|
|
331
|
+
});
|
|
332
|
+
});
|
|
333
|
+
SkeletonTableRow.displayName = "SkeletonTableRow";
|
|
334
|
+
var SkeletonListItem = (0, react.forwardRef)(({ showAvatar = true, showSecondaryText = true, showAction = false, animation = "pulse", className = "" }, ref) => {
|
|
335
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
336
|
+
ref,
|
|
337
|
+
className: `flex items-center gap-3 py-3 ${className}`,
|
|
338
|
+
children: [
|
|
339
|
+
showAvatar && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SkeletonAvatar, {
|
|
340
|
+
size: 48,
|
|
341
|
+
animation
|
|
342
|
+
}),
|
|
343
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
344
|
+
className: "flex-1",
|
|
345
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Skeleton, {
|
|
346
|
+
variant: "text",
|
|
347
|
+
width: "70%",
|
|
348
|
+
height: 16,
|
|
349
|
+
animation
|
|
350
|
+
}), showSecondaryText && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Skeleton, {
|
|
351
|
+
variant: "text",
|
|
352
|
+
width: "50%",
|
|
353
|
+
height: 14,
|
|
354
|
+
animation,
|
|
355
|
+
className: "mt-2"
|
|
356
|
+
})]
|
|
357
|
+
}),
|
|
358
|
+
showAction && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SkeletonButton, {
|
|
359
|
+
size: "sm",
|
|
360
|
+
animation
|
|
361
|
+
})
|
|
362
|
+
]
|
|
363
|
+
});
|
|
364
|
+
});
|
|
365
|
+
SkeletonListItem.displayName = "SkeletonListItem";
|
|
366
|
+
//#endregion
|
|
367
|
+
Object.defineProperty(exports, "Skeleton", {
|
|
368
|
+
enumerable: true,
|
|
369
|
+
get: function() {
|
|
370
|
+
return Skeleton;
|
|
371
|
+
}
|
|
372
|
+
});
|
|
373
|
+
Object.defineProperty(exports, "SkeletonAvatar", {
|
|
374
|
+
enumerable: true,
|
|
375
|
+
get: function() {
|
|
376
|
+
return SkeletonAvatar;
|
|
377
|
+
}
|
|
378
|
+
});
|
|
379
|
+
Object.defineProperty(exports, "SkeletonButton", {
|
|
380
|
+
enumerable: true,
|
|
381
|
+
get: function() {
|
|
382
|
+
return SkeletonButton;
|
|
383
|
+
}
|
|
384
|
+
});
|
|
385
|
+
Object.defineProperty(exports, "SkeletonCard", {
|
|
386
|
+
enumerable: true,
|
|
387
|
+
get: function() {
|
|
388
|
+
return SkeletonCard;
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
|
+
Object.defineProperty(exports, "SkeletonImage", {
|
|
392
|
+
enumerable: true,
|
|
393
|
+
get: function() {
|
|
394
|
+
return SkeletonImage;
|
|
395
|
+
}
|
|
396
|
+
});
|
|
397
|
+
Object.defineProperty(exports, "SkeletonListItem", {
|
|
398
|
+
enumerable: true,
|
|
399
|
+
get: function() {
|
|
400
|
+
return SkeletonListItem;
|
|
401
|
+
}
|
|
402
|
+
});
|
|
403
|
+
Object.defineProperty(exports, "SkeletonMetricCard", {
|
|
404
|
+
enumerable: true,
|
|
405
|
+
get: function() {
|
|
406
|
+
return SkeletonMetricCard;
|
|
407
|
+
}
|
|
408
|
+
});
|
|
409
|
+
Object.defineProperty(exports, "SkeletonTableRow", {
|
|
410
|
+
enumerable: true,
|
|
411
|
+
get: function() {
|
|
412
|
+
return SkeletonTableRow;
|
|
413
|
+
}
|
|
414
|
+
});
|
|
415
|
+
Object.defineProperty(exports, "SkeletonText", {
|
|
416
|
+
enumerable: true,
|
|
417
|
+
get: function() {
|
|
418
|
+
return SkeletonText;
|
|
419
|
+
}
|
|
420
|
+
});
|
|
421
|
+
|
|
422
|
+
//# sourceMappingURL=skeleton-BNea1Rcp.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton-BNea1Rcp.cjs","names":[],"sources":["../../src/components/data-display/skeleton/Skeleton.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, CSSProperties } from \"react\";\n\nimport { mergeClassNames } from \"../../../utils\";\n\nexport type SkeletonVariant = \"text\" | \"circular\" | \"rectangular\" | \"rounded\";\nexport type SkeletonAnimation = \"pulse\" | \"wave\" | \"none\";\nexport type SkeletonTone =\n | \"default\"\n | \"subtle\"\n | \"accent\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\";\nexport type SkeletonRadius = \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\nexport type SkeletonSpeed = \"slow\" | \"normal\" | \"fast\";\n\ntype SkeletonCssVariables = CSSProperties &\n Record<\n \"--ui-skeleton-base\" | \"--ui-skeleton-highlight\" | \"--ui-skeleton-duration\",\n string\n >;\n\nexport interface SkeletonProps extends Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"children\"\n> {\n /** The variant shape of the skeleton */\n variant?: SkeletonVariant;\n /** The animation type */\n animation?: SkeletonAnimation;\n /** Width of the skeleton */\n width?: number | string;\n /** Height of the skeleton */\n height?: number | string;\n /** Border radius override */\n borderRadius?: number | string;\n /** Semantic radius preset */\n radius?: SkeletonRadius;\n /** Semantic tone preset */\n tone?: SkeletonTone;\n /** Animation speed preset or custom duration */\n speed?: SkeletonSpeed | number | string;\n /** Number of lines for text variant */\n lines?: number;\n /** Gap between lines */\n lineGap?: number | string;\n /** Whether the last line should be shorter */\n lastLineWidth?: number | string;\n}\n\nexport interface SkeletonTextProps extends Omit<SkeletonProps, \"variant\"> {\n /** Number of text lines */\n lines?: number;\n}\n\nexport interface SkeletonAvatarProps extends Omit<\n SkeletonProps,\n \"variant\" | \"width\" | \"height\"\n> {\n /** Size of the avatar */\n size?: number | string;\n}\n\nexport interface SkeletonCardProps {\n /** Whether to show image placeholder */\n showImage?: boolean;\n /** Image height */\n imageHeight?: number | string;\n /** Number of text lines */\n lines?: number;\n /** Whether to show avatar */\n showAvatar?: boolean;\n /** Whether to show action buttons */\n showActions?: boolean;\n /** Custom className */\n className?: string;\n /** Animation type */\n animation?: SkeletonAnimation;\n /** Semantic tone preset */\n tone?: SkeletonTone;\n}\n\nexport interface SkeletonMetricCardProps {\n /** Whether to show a compact trend badge */\n showTrend?: boolean;\n /** Whether to render spark bars */\n showChart?: boolean;\n /** Number of spark bars */\n chartBars?: number;\n /** Width for the value block */\n valueWidth?: number | string;\n /** Custom className */\n className?: string;\n /** Animation type */\n animation?: SkeletonAnimation;\n /** Semantic tone preset */\n tone?: SkeletonTone;\n}\n\nconst animationStyles: Record<SkeletonAnimation, string> = {\n pulse: \"ui-skeleton-pulse\",\n wave: \"ui-skeleton-wave\",\n none: \"\",\n};\n\nconst radiusStyles: Record<SkeletonRadius, string> = {\n none: \"rounded-none\",\n sm: \"rounded-sm\",\n md: \"rounded-md\",\n lg: \"rounded-lg\",\n xl: \"rounded-xl\",\n full: \"rounded-full\",\n};\n\nconst variantStyles: Record<SkeletonVariant, SkeletonRadius> = {\n text: \"sm\",\n circular: \"full\",\n rectangular: \"none\",\n rounded: \"md\",\n};\n\nconst speedStyles: Record<SkeletonSpeed, string> = {\n slow: \"2.4s\",\n normal: \"1.6s\",\n fast: \"1.05s\",\n};\n\nconst toneStyles: Record<SkeletonTone, { base: string; highlight: string }> = {\n default: {\n base: \"var(--color-muted)\",\n highlight:\n \"color-mix(in oklch, var(--color-muted) 54%, var(--color-background))\",\n },\n subtle: {\n base: \"color-mix(in oklch, var(--color-muted) 72%, var(--color-background))\",\n highlight:\n \"color-mix(in oklch, var(--color-muted) 42%, var(--color-background))\",\n },\n accent: {\n base: \"var(--color-accent-subtle)\",\n highlight:\n \"color-mix(in oklch, var(--color-accent-subtle) 48%, var(--color-background))\",\n },\n success: {\n base: \"var(--color-success-subtle)\",\n highlight:\n \"color-mix(in oklch, var(--color-success-subtle) 48%, var(--color-background))\",\n },\n warning: {\n base: \"var(--color-warning-subtle)\",\n highlight:\n \"color-mix(in oklch, var(--color-warning-subtle) 48%, var(--color-background))\",\n },\n danger: {\n base: \"var(--color-danger-subtle)\",\n highlight:\n \"color-mix(in oklch, var(--color-danger-subtle) 48%, var(--color-background))\",\n },\n info: {\n base: \"var(--color-info-subtle)\",\n highlight:\n \"color-mix(in oklch, var(--color-info-subtle) 48%, var(--color-background))\",\n },\n};\n\nfunction resolveDimension(value?: number | string): string | undefined {\n if (typeof value === \"number\") {\n return `${value}px`;\n }\n\n return value;\n}\n\nfunction resolveDuration(value: SkeletonProps[\"speed\"]): string {\n if (typeof value === \"number\") {\n return `${value}ms`;\n }\n\n if (typeof value === \"string\" && value in speedStyles) {\n return speedStyles[value as SkeletonSpeed];\n }\n\n return value ?? speedStyles.normal;\n}\n\nfunction getDimensionStyle({\n variant,\n width,\n height,\n borderRadius,\n}: {\n variant: SkeletonVariant;\n width?: number | string;\n height?: number | string;\n borderRadius?: number | string;\n}): CSSProperties {\n const nextStyle: CSSProperties = {};\n const resolvedWidth = resolveDimension(width);\n const resolvedHeight = resolveDimension(height);\n const resolvedBorderRadius = resolveDimension(borderRadius);\n\n if (resolvedWidth) {\n nextStyle.width = resolvedWidth;\n } else if (variant === \"text\") {\n nextStyle.width = \"100%\";\n }\n\n if (resolvedHeight) {\n nextStyle.height = resolvedHeight;\n } else if (variant === \"text\") {\n nextStyle.height = \"1em\";\n } else if (variant === \"circular\") {\n nextStyle.width = nextStyle.width || \"40px\";\n nextStyle.height = nextStyle.width;\n }\n\n if (resolvedBorderRadius) {\n nextStyle.borderRadius = resolvedBorderRadius;\n }\n\n return nextStyle;\n}\n\n// Base Skeleton Component\nconst Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n (\n {\n variant = \"text\",\n animation = \"pulse\",\n width,\n height,\n borderRadius,\n radius,\n tone = \"default\",\n speed = \"normal\",\n className,\n lines = 1,\n lineGap = 8,\n lastLineWidth = \"80%\",\n style,\n [\"aria-hidden\"]: ariaHidden,\n ...rest\n },\n ref,\n ) => {\n const toneStyle = toneStyles[tone];\n const sharedStyle: SkeletonCssVariables = {\n \"--ui-skeleton-base\": toneStyle.base,\n \"--ui-skeleton-highlight\": toneStyle.highlight,\n \"--ui-skeleton-duration\": resolveDuration(speed),\n ...style,\n };\n const effectiveRadius = radius ?? variantStyles[variant];\n const sharedClassName = mergeClassNames(\n \"relative overflow-hidden bg-[var(--ui-skeleton-base)] pointer-events-none select-none shrink-0\",\n radiusStyles[effectiveRadius],\n animationStyles[animation],\n );\n\n if (variant === \"text\" && lines > 1) {\n return (\n <div\n ref={ref}\n className={mergeClassNames(\"flex flex-col\", className)}\n style={{\n ...style,\n gap: resolveDimension(lineGap),\n width: resolveDimension(width) ?? style?.width,\n }}\n aria-hidden={ariaHidden ?? true}\n data-animation={animation}\n data-tone={tone}\n {...rest}\n >\n {Array.from({ length: lines }).map((_, index) => (\n <div\n key={index}\n className={sharedClassName}\n style={{\n ...sharedStyle,\n ...getDimensionStyle({\n variant,\n width:\n index === lines - 1 ? lastLineWidth : (width ?? \"100%\"),\n height,\n borderRadius,\n }),\n }}\n />\n ))}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={mergeClassNames(sharedClassName, className)}\n style={{\n ...sharedStyle,\n ...getDimensionStyle({ variant, width, height, borderRadius }),\n }}\n aria-hidden={ariaHidden ?? true}\n data-animation={animation}\n data-tone={tone}\n {...rest}\n />\n );\n },\n);\n\nSkeleton.displayName = \"Skeleton\";\n\n// Skeleton Text Component\nconst SkeletonText = forwardRef<HTMLDivElement, SkeletonTextProps>(\n ({ lines = 3, ...props }, ref) => {\n return <Skeleton ref={ref} variant=\"text\" lines={lines} {...props} />;\n },\n);\n\nSkeletonText.displayName = \"SkeletonText\";\n\n// Skeleton Avatar Component\nconst SkeletonAvatar = forwardRef<HTMLDivElement, SkeletonAvatarProps>(\n ({ size = 40, animation = \"pulse\", className = \"\", ...props }, ref) => {\n const sizeValue = typeof size === \"number\" ? `${size}px` : size;\n\n return (\n <Skeleton\n ref={ref}\n variant=\"circular\"\n width={sizeValue}\n height={sizeValue}\n animation={animation}\n className={className}\n {...props}\n />\n );\n },\n);\n\nSkeletonAvatar.displayName = \"SkeletonAvatar\";\n\n// Skeleton Button Component\nconst SkeletonButton = forwardRef<\n HTMLDivElement,\n Omit<SkeletonProps, \"variant\"> & { size?: \"sm\" | \"md\" | \"lg\" }\n>(({ size = \"md\", animation = \"pulse\", className = \"\", ...props }, ref) => {\n const sizeStyles = {\n sm: { width: 80, height: 32 },\n md: { width: 100, height: 40 },\n lg: { width: 120, height: 48 },\n };\n\n return (\n <Skeleton\n ref={ref}\n variant=\"rounded\"\n width={sizeStyles[size].width}\n height={sizeStyles[size].height}\n animation={animation}\n className={className}\n {...props}\n />\n );\n});\n\nSkeletonButton.displayName = \"SkeletonButton\";\n\n// Skeleton Image Component\nconst SkeletonImage = forwardRef<\n HTMLDivElement,\n Omit<SkeletonProps, \"variant\">\n>(\n (\n {\n width = \"100%\",\n height = 200,\n animation = \"pulse\",\n className = \"\",\n ...props\n },\n ref,\n ) => {\n return (\n <Skeleton\n ref={ref}\n variant=\"rounded\"\n width={width}\n height={height}\n animation={animation}\n className={className}\n {...props}\n />\n );\n },\n);\n\nSkeletonImage.displayName = \"SkeletonImage\";\n\n// Skeleton Card Component\nconst SkeletonCard = forwardRef<HTMLDivElement, SkeletonCardProps>(\n (\n {\n showImage = true,\n imageHeight = 200,\n lines = 3,\n showAvatar = false,\n showActions = false,\n className,\n animation = \"pulse\",\n tone = \"default\",\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={mergeClassNames(\n \"overflow-hidden rounded-md border border-border bg-card shadow-sm\",\n className,\n )}\n >\n {showImage && (\n <SkeletonImage\n height={imageHeight}\n animation={animation}\n borderRadius={0}\n tone={tone}\n />\n )}\n\n <div className=\"p-4 flex flex-col gap-4\">\n {showAvatar && (\n <div className=\"flex items-center gap-3\">\n <SkeletonAvatar size={40} animation={animation} tone={tone} />\n <div className=\"flex-1\">\n <Skeleton\n variant=\"text\"\n width=\"60%\"\n height={14}\n animation={animation}\n tone={tone}\n />\n <Skeleton\n variant=\"text\"\n width=\"40%\"\n height={12}\n animation={animation}\n tone={tone}\n className=\"mt-2\"\n />\n </div>\n </div>\n )}\n\n <SkeletonText\n lines={lines}\n animation={animation}\n height={14}\n lineGap={10}\n tone={tone}\n />\n\n {showActions && (\n <div className=\"flex gap-3 mt-2\">\n <SkeletonButton size=\"sm\" animation={animation} tone={tone} />\n <SkeletonButton size=\"sm\" animation={animation} tone={tone} />\n </div>\n )}\n </div>\n </div>\n );\n },\n);\n\nSkeletonCard.displayName = \"SkeletonCard\";\n\n// Skeleton Metric Card Component\nconst SkeletonMetricCard = forwardRef<HTMLDivElement, SkeletonMetricCardProps>(\n (\n {\n showTrend = true,\n showChart = true,\n chartBars = 7,\n valueWidth = \"52%\",\n className,\n animation = \"wave\",\n tone = \"accent\",\n },\n ref,\n ) => {\n const chartHeights = [36, 52, 46, 72, 64, 84, 68, 78];\n\n return (\n <div\n ref={ref}\n className={mergeClassNames(\n \"rounded-md border border-border bg-card p-4 shadow-sm\",\n className,\n )}\n >\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0 flex-1 space-y-3\">\n <Skeleton\n width=\"34%\"\n height={11}\n animation={animation}\n tone=\"subtle\"\n />\n <Skeleton\n width={valueWidth}\n height={28}\n animation={animation}\n tone={tone}\n radius=\"md\"\n />\n <Skeleton\n width=\"44%\"\n height={12}\n animation={animation}\n tone=\"subtle\"\n />\n </div>\n\n {showTrend ? (\n <div className=\"rounded-full border border-border bg-surface px-3 py-2\">\n <Skeleton\n width={54}\n height={12}\n animation={animation}\n tone=\"subtle\"\n />\n </div>\n ) : null}\n </div>\n\n {showChart ? (\n <div className=\"mt-5 flex h-20 items-end gap-2\">\n {Array.from({ length: chartBars }).map((_, index) => (\n <Skeleton\n key={index}\n variant=\"rounded\"\n width=\"100%\"\n height={`${chartHeights[index % chartHeights.length]}%`}\n animation={animation}\n tone={tone}\n className=\"flex-1\"\n />\n ))}\n </div>\n ) : null}\n </div>\n );\n },\n);\n\nSkeletonMetricCard.displayName = \"SkeletonMetricCard\";\n\n// Skeleton Table Row Component\nconst SkeletonTableRow = forwardRef<\n HTMLDivElement,\n { columns?: number; animation?: SkeletonAnimation; className?: string }\n>(({ columns = 4, animation = \"pulse\", className = \"\" }, ref) => {\n const sharedWidth =\n columns <= 1 ? \"100%\" : `${Math.floor(72 / (columns - 1))}%`;\n\n return (\n <div ref={ref} className={`flex items-center gap-4 py-3 ${className}`}>\n {Array.from({ length: columns }).map((_, index) => (\n <Skeleton\n key={index}\n variant=\"text\"\n width={index === 0 ? \"28%\" : sharedWidth}\n height={16}\n animation={animation}\n />\n ))}\n </div>\n );\n});\n\nSkeletonTableRow.displayName = \"SkeletonTableRow\";\n\n// Skeleton List Item Component\nconst SkeletonListItem = forwardRef<\n HTMLDivElement,\n {\n showAvatar?: boolean;\n showSecondaryText?: boolean;\n showAction?: boolean;\n animation?: SkeletonAnimation;\n className?: string;\n }\n>(\n (\n {\n showAvatar = true,\n showSecondaryText = true,\n showAction = false,\n animation = \"pulse\",\n className = \"\",\n },\n ref,\n ) => {\n return (\n <div ref={ref} className={`flex items-center gap-3 py-3 ${className}`}>\n {showAvatar && <SkeletonAvatar size={48} animation={animation} />}\n <div className=\"flex-1\">\n <Skeleton\n variant=\"text\"\n width=\"70%\"\n height={16}\n animation={animation}\n />\n {showSecondaryText && (\n <Skeleton\n variant=\"text\"\n width=\"50%\"\n height={14}\n animation={animation}\n className=\"mt-2\"\n />\n )}\n </div>\n {showAction && <SkeletonButton size=\"sm\" animation={animation} />}\n </div>\n );\n },\n);\n\nSkeletonListItem.displayName = \"SkeletonListItem\";\n\nexport default Skeleton;\nexport {\n Skeleton,\n SkeletonText,\n SkeletonAvatar,\n SkeletonButton,\n SkeletonImage,\n SkeletonCard,\n SkeletonMetricCard,\n SkeletonTableRow,\n SkeletonListItem,\n};\n"],"mappings":"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"}
|