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.
@@ -0,0 +1,368 @@
1
+ import { n as mergeClassNames } from "./utils-ati1KkDb.mjs";
2
+ import { forwardRef } from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region src/components/data-display/skeleton/Skeleton.tsx
5
+ var animationStyles = {
6
+ pulse: "ui-skeleton-pulse",
7
+ wave: "ui-skeleton-wave",
8
+ none: ""
9
+ };
10
+ var radiusStyles = {
11
+ none: "rounded-none",
12
+ sm: "rounded-sm",
13
+ md: "rounded-md",
14
+ lg: "rounded-lg",
15
+ xl: "rounded-xl",
16
+ full: "rounded-full"
17
+ };
18
+ var variantStyles = {
19
+ text: "sm",
20
+ circular: "full",
21
+ rectangular: "none",
22
+ rounded: "md"
23
+ };
24
+ var speedStyles = {
25
+ slow: "2.4s",
26
+ normal: "1.6s",
27
+ fast: "1.05s"
28
+ };
29
+ var toneStyles = {
30
+ default: {
31
+ base: "var(--color-muted)",
32
+ highlight: "color-mix(in oklch, var(--color-muted) 54%, var(--color-background))"
33
+ },
34
+ subtle: {
35
+ base: "color-mix(in oklch, var(--color-muted) 72%, var(--color-background))",
36
+ highlight: "color-mix(in oklch, var(--color-muted) 42%, var(--color-background))"
37
+ },
38
+ accent: {
39
+ base: "var(--color-accent-subtle)",
40
+ highlight: "color-mix(in oklch, var(--color-accent-subtle) 48%, var(--color-background))"
41
+ },
42
+ success: {
43
+ base: "var(--color-success-subtle)",
44
+ highlight: "color-mix(in oklch, var(--color-success-subtle) 48%, var(--color-background))"
45
+ },
46
+ warning: {
47
+ base: "var(--color-warning-subtle)",
48
+ highlight: "color-mix(in oklch, var(--color-warning-subtle) 48%, var(--color-background))"
49
+ },
50
+ danger: {
51
+ base: "var(--color-danger-subtle)",
52
+ highlight: "color-mix(in oklch, var(--color-danger-subtle) 48%, var(--color-background))"
53
+ },
54
+ info: {
55
+ base: "var(--color-info-subtle)",
56
+ highlight: "color-mix(in oklch, var(--color-info-subtle) 48%, var(--color-background))"
57
+ }
58
+ };
59
+ function resolveDimension(value) {
60
+ if (typeof value === "number") return `${value}px`;
61
+ return value;
62
+ }
63
+ function resolveDuration(value) {
64
+ if (typeof value === "number") return `${value}ms`;
65
+ if (typeof value === "string" && value in speedStyles) return speedStyles[value];
66
+ return value ?? speedStyles.normal;
67
+ }
68
+ function getDimensionStyle({ variant, width, height, borderRadius }) {
69
+ const nextStyle = {};
70
+ const resolvedWidth = resolveDimension(width);
71
+ const resolvedHeight = resolveDimension(height);
72
+ const resolvedBorderRadius = resolveDimension(borderRadius);
73
+ if (resolvedWidth) nextStyle.width = resolvedWidth;
74
+ else if (variant === "text") nextStyle.width = "100%";
75
+ if (resolvedHeight) nextStyle.height = resolvedHeight;
76
+ else if (variant === "text") nextStyle.height = "1em";
77
+ else if (variant === "circular") {
78
+ nextStyle.width = nextStyle.width || "40px";
79
+ nextStyle.height = nextStyle.width;
80
+ }
81
+ if (resolvedBorderRadius) nextStyle.borderRadius = resolvedBorderRadius;
82
+ return nextStyle;
83
+ }
84
+ var Skeleton = 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) => {
85
+ const toneStyle = toneStyles[tone];
86
+ const sharedStyle = {
87
+ "--ui-skeleton-base": toneStyle.base,
88
+ "--ui-skeleton-highlight": toneStyle.highlight,
89
+ "--ui-skeleton-duration": resolveDuration(speed),
90
+ ...style
91
+ };
92
+ const sharedClassName = mergeClassNames("relative overflow-hidden bg-[var(--ui-skeleton-base)] pointer-events-none select-none shrink-0", radiusStyles[radius ?? variantStyles[variant]], animationStyles[animation]);
93
+ if (variant === "text" && lines > 1) return /* @__PURE__ */ jsx("div", {
94
+ ref,
95
+ className: mergeClassNames("flex flex-col", className),
96
+ style: {
97
+ ...style,
98
+ gap: resolveDimension(lineGap),
99
+ width: resolveDimension(width) ?? style?.width
100
+ },
101
+ "aria-hidden": ariaHidden ?? true,
102
+ "data-animation": animation,
103
+ "data-tone": tone,
104
+ ...rest,
105
+ children: Array.from({ length: lines }).map((_, index) => /* @__PURE__ */ jsx("div", {
106
+ className: sharedClassName,
107
+ style: {
108
+ ...sharedStyle,
109
+ ...getDimensionStyle({
110
+ variant,
111
+ width: index === lines - 1 ? lastLineWidth : width ?? "100%",
112
+ height,
113
+ borderRadius
114
+ })
115
+ }
116
+ }, index))
117
+ });
118
+ return /* @__PURE__ */ jsx("div", {
119
+ ref,
120
+ className: mergeClassNames(sharedClassName, className),
121
+ style: {
122
+ ...sharedStyle,
123
+ ...getDimensionStyle({
124
+ variant,
125
+ width,
126
+ height,
127
+ borderRadius
128
+ })
129
+ },
130
+ "aria-hidden": ariaHidden ?? true,
131
+ "data-animation": animation,
132
+ "data-tone": tone,
133
+ ...rest
134
+ });
135
+ });
136
+ Skeleton.displayName = "Skeleton";
137
+ var SkeletonText = forwardRef(({ lines = 3, ...props }, ref) => {
138
+ return /* @__PURE__ */ jsx(Skeleton, {
139
+ ref,
140
+ variant: "text",
141
+ lines,
142
+ ...props
143
+ });
144
+ });
145
+ SkeletonText.displayName = "SkeletonText";
146
+ var SkeletonAvatar = forwardRef(({ size = 40, animation = "pulse", className = "", ...props }, ref) => {
147
+ const sizeValue = typeof size === "number" ? `${size}px` : size;
148
+ return /* @__PURE__ */ jsx(Skeleton, {
149
+ ref,
150
+ variant: "circular",
151
+ width: sizeValue,
152
+ height: sizeValue,
153
+ animation,
154
+ className,
155
+ ...props
156
+ });
157
+ });
158
+ SkeletonAvatar.displayName = "SkeletonAvatar";
159
+ var SkeletonButton = forwardRef(({ size = "md", animation = "pulse", className = "", ...props }, ref) => {
160
+ const sizeStyles = {
161
+ sm: {
162
+ width: 80,
163
+ height: 32
164
+ },
165
+ md: {
166
+ width: 100,
167
+ height: 40
168
+ },
169
+ lg: {
170
+ width: 120,
171
+ height: 48
172
+ }
173
+ };
174
+ return /* @__PURE__ */ jsx(Skeleton, {
175
+ ref,
176
+ variant: "rounded",
177
+ width: sizeStyles[size].width,
178
+ height: sizeStyles[size].height,
179
+ animation,
180
+ className,
181
+ ...props
182
+ });
183
+ });
184
+ SkeletonButton.displayName = "SkeletonButton";
185
+ var SkeletonImage = forwardRef(({ width = "100%", height = 200, animation = "pulse", className = "", ...props }, ref) => {
186
+ return /* @__PURE__ */ jsx(Skeleton, {
187
+ ref,
188
+ variant: "rounded",
189
+ width,
190
+ height,
191
+ animation,
192
+ className,
193
+ ...props
194
+ });
195
+ });
196
+ SkeletonImage.displayName = "SkeletonImage";
197
+ var SkeletonCard = forwardRef(({ showImage = true, imageHeight = 200, lines = 3, showAvatar = false, showActions = false, className, animation = "pulse", tone = "default" }, ref) => {
198
+ return /* @__PURE__ */ jsxs("div", {
199
+ ref,
200
+ className: mergeClassNames("overflow-hidden rounded-md border border-border bg-card shadow-sm", className),
201
+ children: [showImage && /* @__PURE__ */ jsx(SkeletonImage, {
202
+ height: imageHeight,
203
+ animation,
204
+ borderRadius: 0,
205
+ tone
206
+ }), /* @__PURE__ */ jsxs("div", {
207
+ className: "p-4 flex flex-col gap-4",
208
+ children: [
209
+ showAvatar && /* @__PURE__ */ jsxs("div", {
210
+ className: "flex items-center gap-3",
211
+ children: [/* @__PURE__ */ jsx(SkeletonAvatar, {
212
+ size: 40,
213
+ animation,
214
+ tone
215
+ }), /* @__PURE__ */ jsxs("div", {
216
+ className: "flex-1",
217
+ children: [/* @__PURE__ */ jsx(Skeleton, {
218
+ variant: "text",
219
+ width: "60%",
220
+ height: 14,
221
+ animation,
222
+ tone
223
+ }), /* @__PURE__ */ jsx(Skeleton, {
224
+ variant: "text",
225
+ width: "40%",
226
+ height: 12,
227
+ animation,
228
+ tone,
229
+ className: "mt-2"
230
+ })]
231
+ })]
232
+ }),
233
+ /* @__PURE__ */ jsx(SkeletonText, {
234
+ lines,
235
+ animation,
236
+ height: 14,
237
+ lineGap: 10,
238
+ tone
239
+ }),
240
+ showActions && /* @__PURE__ */ jsxs("div", {
241
+ className: "flex gap-3 mt-2",
242
+ children: [/* @__PURE__ */ jsx(SkeletonButton, {
243
+ size: "sm",
244
+ animation,
245
+ tone
246
+ }), /* @__PURE__ */ jsx(SkeletonButton, {
247
+ size: "sm",
248
+ animation,
249
+ tone
250
+ })]
251
+ })
252
+ ]
253
+ })]
254
+ });
255
+ });
256
+ SkeletonCard.displayName = "SkeletonCard";
257
+ var SkeletonMetricCard = forwardRef(({ showTrend = true, showChart = true, chartBars = 7, valueWidth = "52%", className, animation = "wave", tone = "accent" }, ref) => {
258
+ const chartHeights = [
259
+ 36,
260
+ 52,
261
+ 46,
262
+ 72,
263
+ 64,
264
+ 84,
265
+ 68,
266
+ 78
267
+ ];
268
+ return /* @__PURE__ */ jsxs("div", {
269
+ ref,
270
+ className: mergeClassNames("rounded-md border border-border bg-card p-4 shadow-sm", className),
271
+ children: [/* @__PURE__ */ jsxs("div", {
272
+ className: "flex items-start justify-between gap-4",
273
+ children: [/* @__PURE__ */ jsxs("div", {
274
+ className: "min-w-0 flex-1 space-y-3",
275
+ children: [
276
+ /* @__PURE__ */ jsx(Skeleton, {
277
+ width: "34%",
278
+ height: 11,
279
+ animation,
280
+ tone: "subtle"
281
+ }),
282
+ /* @__PURE__ */ jsx(Skeleton, {
283
+ width: valueWidth,
284
+ height: 28,
285
+ animation,
286
+ tone,
287
+ radius: "md"
288
+ }),
289
+ /* @__PURE__ */ jsx(Skeleton, {
290
+ width: "44%",
291
+ height: 12,
292
+ animation,
293
+ tone: "subtle"
294
+ })
295
+ ]
296
+ }), showTrend ? /* @__PURE__ */ jsx("div", {
297
+ className: "rounded-full border border-border bg-surface px-3 py-2",
298
+ children: /* @__PURE__ */ jsx(Skeleton, {
299
+ width: 54,
300
+ height: 12,
301
+ animation,
302
+ tone: "subtle"
303
+ })
304
+ }) : null]
305
+ }), showChart ? /* @__PURE__ */ jsx("div", {
306
+ className: "mt-5 flex h-20 items-end gap-2",
307
+ children: Array.from({ length: chartBars }).map((_, index) => /* @__PURE__ */ jsx(Skeleton, {
308
+ variant: "rounded",
309
+ width: "100%",
310
+ height: `${chartHeights[index % chartHeights.length]}%`,
311
+ animation,
312
+ tone,
313
+ className: "flex-1"
314
+ }, index))
315
+ }) : null]
316
+ });
317
+ });
318
+ SkeletonMetricCard.displayName = "SkeletonMetricCard";
319
+ var SkeletonTableRow = forwardRef(({ columns = 4, animation = "pulse", className = "" }, ref) => {
320
+ const sharedWidth = columns <= 1 ? "100%" : `${Math.floor(72 / (columns - 1))}%`;
321
+ return /* @__PURE__ */ jsx("div", {
322
+ ref,
323
+ className: `flex items-center gap-4 py-3 ${className}`,
324
+ children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ jsx(Skeleton, {
325
+ variant: "text",
326
+ width: index === 0 ? "28%" : sharedWidth,
327
+ height: 16,
328
+ animation
329
+ }, index))
330
+ });
331
+ });
332
+ SkeletonTableRow.displayName = "SkeletonTableRow";
333
+ var SkeletonListItem = forwardRef(({ showAvatar = true, showSecondaryText = true, showAction = false, animation = "pulse", className = "" }, ref) => {
334
+ return /* @__PURE__ */ jsxs("div", {
335
+ ref,
336
+ className: `flex items-center gap-3 py-3 ${className}`,
337
+ children: [
338
+ showAvatar && /* @__PURE__ */ jsx(SkeletonAvatar, {
339
+ size: 48,
340
+ animation
341
+ }),
342
+ /* @__PURE__ */ jsxs("div", {
343
+ className: "flex-1",
344
+ children: [/* @__PURE__ */ jsx(Skeleton, {
345
+ variant: "text",
346
+ width: "70%",
347
+ height: 16,
348
+ animation
349
+ }), showSecondaryText && /* @__PURE__ */ jsx(Skeleton, {
350
+ variant: "text",
351
+ width: "50%",
352
+ height: 14,
353
+ animation,
354
+ className: "mt-2"
355
+ })]
356
+ }),
357
+ showAction && /* @__PURE__ */ jsx(SkeletonButton, {
358
+ size: "sm",
359
+ animation
360
+ })
361
+ ]
362
+ });
363
+ });
364
+ SkeletonListItem.displayName = "SkeletonListItem";
365
+ //#endregion
366
+ export { SkeletonImage as a, SkeletonTableRow as c, SkeletonCard as i, SkeletonText as l, SkeletonAvatar as n, SkeletonListItem as o, SkeletonButton as r, SkeletonMetricCard as s, Skeleton as t };
367
+
368
+ //# sourceMappingURL=skeleton-CtLumdRw.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skeleton-CtLumdRw.mjs","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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"}
@@ -1,6 +1,10 @@
1
+ import { ComponentPropsWithoutRef } from 'react';
1
2
  export type SkeletonVariant = "text" | "circular" | "rectangular" | "rounded";
2
3
  export type SkeletonAnimation = "pulse" | "wave" | "none";
3
- export interface SkeletonProps {
4
+ export type SkeletonTone = "default" | "subtle" | "accent" | "success" | "warning" | "danger" | "info";
5
+ export type SkeletonRadius = "none" | "sm" | "md" | "lg" | "xl" | "full";
6
+ export type SkeletonSpeed = "slow" | "normal" | "fast";
7
+ export interface SkeletonProps extends Omit<ComponentPropsWithoutRef<"div">, "children"> {
4
8
  /** The variant shape of the skeleton */
5
9
  variant?: SkeletonVariant;
6
10
  /** The animation type */
@@ -9,10 +13,14 @@ export interface SkeletonProps {
9
13
  width?: number | string;
10
14
  /** Height of the skeleton */
11
15
  height?: number | string;
12
- /** Border radius for rounded variant */
16
+ /** Border radius override */
13
17
  borderRadius?: number | string;
14
- /** Custom className */
15
- className?: string;
18
+ /** Semantic radius preset */
19
+ radius?: SkeletonRadius;
20
+ /** Semantic tone preset */
21
+ tone?: SkeletonTone;
22
+ /** Animation speed preset or custom duration */
23
+ speed?: SkeletonSpeed | number | string;
16
24
  /** Number of lines for text variant */
17
25
  lines?: number;
18
26
  /** Gap between lines */
@@ -43,6 +51,24 @@ export interface SkeletonCardProps {
43
51
  className?: string;
44
52
  /** Animation type */
45
53
  animation?: SkeletonAnimation;
54
+ /** Semantic tone preset */
55
+ tone?: SkeletonTone;
56
+ }
57
+ export interface SkeletonMetricCardProps {
58
+ /** Whether to show a compact trend badge */
59
+ showTrend?: boolean;
60
+ /** Whether to render spark bars */
61
+ showChart?: boolean;
62
+ /** Number of spark bars */
63
+ chartBars?: number;
64
+ /** Width for the value block */
65
+ valueWidth?: number | string;
66
+ /** Custom className */
67
+ className?: string;
68
+ /** Animation type */
69
+ animation?: SkeletonAnimation;
70
+ /** Semantic tone preset */
71
+ tone?: SkeletonTone;
46
72
  }
47
73
  declare const Skeleton: import('react').ForwardRefExoticComponent<SkeletonProps & import('react').RefAttributes<HTMLDivElement>>;
48
74
  declare const SkeletonText: import('react').ForwardRefExoticComponent<SkeletonTextProps & import('react').RefAttributes<HTMLDivElement>>;
@@ -52,6 +78,7 @@ declare const SkeletonButton: import('react').ForwardRefExoticComponent<Omit<Ske
52
78
  } & import('react').RefAttributes<HTMLDivElement>>;
53
79
  declare const SkeletonImage: import('react').ForwardRefExoticComponent<Omit<SkeletonProps, "variant"> & import('react').RefAttributes<HTMLDivElement>>;
54
80
  declare const SkeletonCard: import('react').ForwardRefExoticComponent<SkeletonCardProps & import('react').RefAttributes<HTMLDivElement>>;
81
+ declare const SkeletonMetricCard: import('react').ForwardRefExoticComponent<SkeletonMetricCardProps & import('react').RefAttributes<HTMLDivElement>>;
55
82
  declare const SkeletonTableRow: import('react').ForwardRefExoticComponent<{
56
83
  columns?: number;
57
84
  animation?: SkeletonAnimation;
@@ -65,5 +92,5 @@ declare const SkeletonListItem: import('react').ForwardRefExoticComponent<{
65
92
  className?: string;
66
93
  } & import('react').RefAttributes<HTMLDivElement>>;
67
94
  export default Skeleton;
68
- export { Skeleton, SkeletonText, SkeletonAvatar, SkeletonButton, SkeletonImage, SkeletonCard, SkeletonTableRow, SkeletonListItem, };
95
+ export { Skeleton, SkeletonText, SkeletonAvatar, SkeletonButton, SkeletonImage, SkeletonCard, SkeletonMetricCard, SkeletonTableRow, SkeletonListItem, };
69
96
  //# sourceMappingURL=Skeleton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Skeleton.d.ts","sourceRoot":"","sources":["../../../../src/components/data-display/skeleton/Skeleton.tsx"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,SAAS,CAAC;AAC9E,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,yBAAyB;IACzB,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,wCAAwC;IACxC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC;IACvE,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAC/C,aAAa,EACb,SAAS,GAAG,OAAO,GAAG,QAAQ,CAC/B;IACC,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qCAAqC;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B;AAgBD,QAAA,MAAM,QAAQ,0GAgFb,CAAC;AAKF,QAAA,MAAM,YAAY,8GAIjB,CAAC;AAKF,QAAA,MAAM,cAAc,gHAgBnB,CAAC;AAKF,QAAA,MAAM,cAAc;WAEwB,IAAI,GAAG,IAAI,GAAG,IAAI;kDAmB5D,CAAC;AAKH,QAAA,MAAM,aAAa,2HA0BlB,CAAC;AAKF,QAAA,MAAM,YAAY,8GAiEjB,CAAC;AAKF,QAAA,MAAM,gBAAgB;cAER,MAAM;gBAAc,iBAAiB;gBAAc,MAAM;kDAerE,CAAC;AAKH,QAAA,MAAM,gBAAgB;iBAGL,OAAO;wBACA,OAAO;iBACd,OAAO;gBACR,iBAAiB;gBACjB,MAAM;kDAqCrB,CAAC;AAIF,eAAe,QAAQ,CAAC;AACxB,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,cAAc,EACd,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,GACjB,CAAC"}
1
+ {"version":3,"file":"Skeleton.d.ts","sourceRoot":"","sources":["../../../../src/components/data-display/skeleton/Skeleton.tsx"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- export { default as Skeleton } from './Skeleton';
2
- export type { SkeletonProps } from './Skeleton';
1
+ export { default as Skeleton, SkeletonAvatar, SkeletonButton, SkeletonCard, SkeletonImage, SkeletonListItem, SkeletonMetricCard, SkeletonTableRow, SkeletonText, } from './Skeleton';
2
+ export type { SkeletonAnimation, SkeletonAvatarProps, SkeletonCardProps, SkeletonMetricCardProps, SkeletonProps, SkeletonRadius, SkeletonSpeed, SkeletonTextProps, SkeletonTone, SkeletonVariant, } from './Skeleton';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/data-display/skeleton/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/data-display/skeleton/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,IAAI,QAAQ,EACnB,cAAc,EACd,cAAc,EACd,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,aAAa,EACb,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,eAAe,GAChB,MAAM,YAAY,CAAC"}
package/dist/docs.cjs CHANGED
@@ -401,7 +401,7 @@ var componentDocSeeds = {
401
401
  },
402
402
  skeleton: {
403
403
  exportName: "SkeletonComponent",
404
- summary: "Placeholder block for perceived-performance states while structured content is loading.",
404
+ summary: "Theme-aware placeholder system with semantic tones, speed control, light/dark mode support, and ready-made metric, card, list, and table presets.",
405
405
  aliases: ["placeholder"],
406
406
  related: [
407
407
  "loading",
@@ -409,7 +409,7 @@ var componentDocSeeds = {
409
409
  "card"
410
410
  ],
411
411
  rootImport: "import { SkeletonComponent } from 'erp-pro-ui';",
412
- subpathImport: "import { Skeleton as SkeletonComponent } from 'erp-pro-ui/skeleton';"
412
+ subpathImport: "import { Skeleton as SkeletonComponent, SkeletonMetricCard } from 'erp-pro-ui/skeleton';"
413
413
  },
414
414
  "area-chart": {
415
415
  exportName: "AreaChart",