shared-design-system 1.12.0 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/src/components/Alert.d.ts +2 -1
  2. package/dist/src/components/Alert.js +80 -38
  3. package/dist/src/components/Alert.js.map +1 -1
  4. package/dist/src/components/Avatar.d.ts +11 -2
  5. package/dist/src/components/Avatar.js +87 -40
  6. package/dist/src/components/Avatar.js.map +1 -1
  7. package/dist/src/components/Badge.d.ts +4 -2
  8. package/dist/src/components/Badge.js +67 -29
  9. package/dist/src/components/Badge.js.map +1 -1
  10. package/dist/src/components/Breadcrumbs.d.ts +4 -1
  11. package/dist/src/components/Breadcrumbs.js +56 -27
  12. package/dist/src/components/Breadcrumbs.js.map +1 -1
  13. package/dist/src/components/Button.d.ts +4 -2
  14. package/dist/src/components/Button.js +99 -95
  15. package/dist/src/components/Button.js.map +1 -1
  16. package/dist/src/components/Card.d.ts +3 -1
  17. package/dist/src/components/Card.js +86 -23
  18. package/dist/src/components/Card.js.map +1 -1
  19. package/dist/src/components/ConfirmModal.d.ts +5 -2
  20. package/dist/src/components/ConfirmModal.js +99 -47
  21. package/dist/src/components/ConfirmModal.js.map +1 -1
  22. package/dist/src/components/Divider.d.ts +4 -2
  23. package/dist/src/components/Divider.js +46 -19
  24. package/dist/src/components/Divider.js.map +1 -1
  25. package/dist/src/components/ListComponents.d.ts +7 -4
  26. package/dist/src/components/ListComponents.js +70 -35
  27. package/dist/src/components/ListComponents.js.map +1 -1
  28. package/dist/src/components/LoadingSpinner.d.ts +9 -2
  29. package/dist/src/components/LoadingSpinner.js +59 -17
  30. package/dist/src/components/LoadingSpinner.js.map +1 -1
  31. package/dist/src/components/Progress.d.ts +5 -1
  32. package/dist/src/components/Progress.js +58 -26
  33. package/dist/src/components/Progress.js.map +1 -1
  34. package/dist/src/components/Radio.d.ts +4 -0
  35. package/dist/src/components/Radio.js +50 -24
  36. package/dist/src/components/Radio.js.map +1 -1
  37. package/dist/src/components/ReadOnlyField.d.ts +4 -0
  38. package/dist/src/components/ReadOnlyField.js +78 -25
  39. package/dist/src/components/ReadOnlyField.js.map +1 -1
  40. package/dist/src/components/Skeleton.d.ts +3 -1
  41. package/dist/src/components/Skeleton.js +52 -22
  42. package/dist/src/components/Skeleton.js.map +1 -1
  43. package/dist/src/components/Stack.d.ts +2 -0
  44. package/dist/src/components/Stack.js +21 -20
  45. package/dist/src/components/Stack.js.map +1 -1
  46. package/dist/src/components/Steps.d.ts +3 -1
  47. package/dist/src/components/Steps.js +93 -68
  48. package/dist/src/components/Steps.js.map +1 -1
  49. package/dist/src/components/Switch.d.ts +6 -2
  50. package/dist/src/components/Switch.js +45 -22
  51. package/dist/src/components/Switch.js.map +1 -1
  52. package/dist/src/components/Table.d.ts +9 -1
  53. package/dist/src/components/Table.js +102 -37
  54. package/dist/src/components/Table.js.map +1 -1
  55. package/dist/src/components/Tabs.d.ts +9 -5
  56. package/dist/src/components/Tabs.js +88 -88
  57. package/dist/src/components/Tabs.js.map +1 -1
  58. package/dist/src/components/Tag.d.ts +3 -1
  59. package/dist/src/components/Tag.js +104 -26
  60. package/dist/src/components/Tag.js.map +1 -1
  61. package/dist/src/components/Tooltip.d.ts +3 -0
  62. package/dist/src/components/Tooltip.js +89 -38
  63. package/dist/src/components/Tooltip.js.map +1 -1
  64. package/dist/src/components/Typography.d.ts +14 -1
  65. package/dist/src/components/Typography.js +108 -61
  66. package/dist/src/components/Typography.js.map +1 -1
  67. package/dist/src/index.d.ts +6 -6
  68. package/dist/src/index.js +3 -3
  69. package/dist/src/index.js.map +1 -1
  70. package/package.json +1 -1
@@ -1,53 +1,105 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect } from 'react';
2
3
  import { Button } from './Button';
3
4
  import { tokens } from '../tokens';
4
- export const ConfirmModal = ({ isOpen, title, message, confirmText = 'Xác nhận', cancelText = 'Hủy bỏ', onConfirm, onCancel, variant = 'primary', }) => {
5
+ const VARIANT_ICONS = {
6
+ danger: (_jsxs("svg", { width: "28", height: "28", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("circle", { cx: "12", cy: "12", r: "10" }), _jsx("line", { x1: "15", y1: "9", x2: "9", y2: "15" }), _jsx("line", { x1: "9", y1: "9", x2: "15", y2: "15" })] })),
7
+ warning: (_jsxs("svg", { width: "28", height: "28", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z" }), _jsx("line", { x1: "12", y1: "9", x2: "12", y2: "13" }), _jsx("line", { x1: "12", y1: "17", x2: "12.01", y2: "17" })] })),
8
+ primary: (_jsxs("svg", { width: "28", height: "28", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("circle", { cx: "12", cy: "12", r: "10" }), _jsx("line", { x1: "12", y1: "16", x2: "12", y2: "12" }), _jsx("line", { x1: "12", y1: "8", x2: "12.01", y2: "8" })] })),
9
+ };
10
+ const VARIANT_STYLE = {
11
+ danger: { color: tokens.color.danger, bg: tokens.color.dangerBg },
12
+ warning: { color: tokens.color.warning, bg: tokens.color.warningBg },
13
+ primary: { color: tokens.color.primary, bg: tokens.color.primaryLight },
14
+ };
15
+ const SIZE_WIDTH = {
16
+ sm: '360px',
17
+ md: '440px',
18
+ lg: '560px',
19
+ };
20
+ export const ConfirmModal = ({ isOpen, title, message, confirmText = 'Xác nhận', cancelText = 'Hủy bỏ', onConfirm, onCancel, variant = 'primary', icon, size = 'md', loading = false, }) => {
21
+ // Escape key handler
22
+ useEffect(() => {
23
+ if (!isOpen)
24
+ return;
25
+ const handler = (e) => { if (e.key === 'Escape')
26
+ onCancel(); };
27
+ window.addEventListener('keydown', handler);
28
+ return () => window.removeEventListener('keydown', handler);
29
+ }, [isOpen, onCancel]);
5
30
  if (!isOpen)
6
31
  return null;
7
- const overlayStyle = {
8
- position: 'fixed',
9
- top: 0,
10
- left: 0,
11
- width: '100%',
12
- height: '100%',
13
- backgroundColor: tokens.color.overlay,
14
- display: 'flex',
15
- alignItems: 'center',
16
- justifyContent: 'center',
17
- zIndex: 1000,
18
- backdropFilter: 'blur(4px)',
19
- fontFamily: tokens.font.family,
20
- };
21
- const modalStyle = {
22
- backgroundColor: tokens.color.surface,
23
- borderRadius: tokens.radius.xl,
24
- padding: tokens.spacing[8],
25
- width: '420px',
26
- maxWidth: '90%',
27
- boxShadow: tokens.shadow.xl,
28
- animation: 'ds-fade-in 0.25s ease-out',
29
- };
30
- return (_jsxs("div", { style: overlayStyle, onClick: onCancel, children: [_jsxs("div", { style: modalStyle, onClick: e => e.stopPropagation(), children: [_jsx("h3", { style: {
31
- marginTop: 0,
32
- marginBottom: tokens.spacing[3],
33
- fontSize: tokens.font.xl,
34
- fontWeight: tokens.font.weightBold,
35
- color: tokens.color.text
36
- }, children: title }), _jsx("p", { style: {
37
- marginTop: 0,
38
- marginBottom: tokens.spacing[8],
39
- fontSize: tokens.font.base,
40
- lineHeight: 1.6,
41
- color: tokens.color.textMuted
42
- }, children: message }), _jsxs("div", { style: {
43
- display: 'flex',
44
- justifyContent: 'flex-end',
45
- gap: tokens.spacing[3]
46
- }, children: [_jsx(Button, { variant: "ghost", onClick: onCancel, children: cancelText }), _jsx(Button, { variant: variant, onClick: onConfirm, children: confirmText })] })] }), _jsx("style", { children: `
47
- @keyframes ds-fade-in {
48
- from { opacity: 0; transform: scale(0.95); }
49
- to { opacity: 1; transform: scale(1); }
50
- }
51
- ` })] }));
32
+ const vs = VARIANT_STYLE[variant] || VARIANT_STYLE.primary;
33
+ const resolvedIcon = icon || VARIANT_ICONS[variant];
34
+ return (_jsxs(_Fragment, { children: [_jsx("style", { children: `
35
+ @keyframes ds-modal-in {
36
+ from { opacity: 0; transform: scale(0.94) translateY(8px); }
37
+ to { opacity: 1; transform: scale(1) translateY(0); }
38
+ }
39
+ @keyframes ds-overlay-in {
40
+ from { opacity: 0; }
41
+ to { opacity: 1; }
42
+ }
43
+ ` }), _jsx("div", { style: {
44
+ position: 'fixed',
45
+ top: 0,
46
+ left: 0,
47
+ width: '100%',
48
+ height: '100%',
49
+ backgroundColor: 'rgba(15, 23, 42, 0.45)',
50
+ display: 'flex',
51
+ alignItems: 'center',
52
+ justifyContent: 'center',
53
+ zIndex: 1000,
54
+ backdropFilter: 'blur(6px)',
55
+ WebkitBackdropFilter: 'blur(6px)',
56
+ fontFamily: tokens.font.family,
57
+ padding: tokens.spacing[4],
58
+ animation: 'ds-overlay-in 0.2s ease-out',
59
+ }, onClick: onCancel, children: _jsxs("div", { style: {
60
+ backgroundColor: tokens.color.surface,
61
+ borderRadius: tokens.radius['2xl'],
62
+ width: SIZE_WIDTH[size] || SIZE_WIDTH.md,
63
+ maxWidth: '100%',
64
+ boxShadow: `
65
+ ${tokens.shadow.xl},
66
+ 0 0 0 1px rgba(0,0,0,0.05),
67
+ inset 0 1px 0 rgba(255,255,255,0.9)
68
+ `,
69
+ animation: 'ds-modal-in 0.25s cubic-bezier(0.34, 1.56, 0.64, 1)',
70
+ overflow: 'hidden',
71
+ }, onClick: (e) => e.stopPropagation(), children: [_jsx("div", { style: {
72
+ height: '4px',
73
+ background: `linear-gradient(90deg, ${vs.color}, ${vs.color}80)`,
74
+ } }), _jsxs("div", { style: { padding: tokens.spacing[8] }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'flex-start', gap: tokens.spacing[4], marginBottom: tokens.spacing[4] }, children: [_jsx("div", { style: {
75
+ width: '52px',
76
+ height: '52px',
77
+ borderRadius: tokens.radius.xl,
78
+ backgroundColor: vs.bg,
79
+ color: vs.color,
80
+ display: 'flex',
81
+ alignItems: 'center',
82
+ justifyContent: 'center',
83
+ flexShrink: 0,
84
+ }, children: resolvedIcon }), _jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [_jsx("h3", { style: {
85
+ margin: 0,
86
+ fontSize: tokens.font.lg,
87
+ fontWeight: tokens.font.weightBold,
88
+ color: tokens.color.text,
89
+ lineHeight: 1.25,
90
+ letterSpacing: '-0.02em',
91
+ }, children: title }), _jsx("div", { style: {
92
+ marginTop: tokens.spacing[2],
93
+ fontSize: tokens.font.sm,
94
+ lineHeight: 1.65,
95
+ color: tokens.color.textMuted,
96
+ fontWeight: tokens.font.weightMedium,
97
+ }, children: message })] })] }), _jsxs("div", { style: {
98
+ display: 'flex',
99
+ justifyContent: 'flex-end',
100
+ gap: tokens.spacing[3],
101
+ paddingTop: tokens.spacing[4],
102
+ borderTop: `1px solid ${tokens.color.slate100}`,
103
+ }, children: [_jsx(Button, { variant: "ghost", onClick: onCancel, disabled: loading, autoFocus: true, children: cancelText }), _jsx(Button, { variant: variant === 'warning' ? 'amber' : variant, onClick: onConfirm, disabled: loading, children: loading ? 'Đang xử lý...' : confirmText })] })] })] }) })] }));
52
104
  };
53
105
  //# sourceMappingURL=ConfirmModal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmModal.js","sourceRoot":"","sources":["../../../src/components/ConfirmModal.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAanC,MAAM,CAAC,MAAM,YAAY,GAAgC,CAAC,EACxD,MAAM,EACN,KAAK,EACL,OAAO,EACP,WAAW,GAAG,UAAU,EACxB,UAAU,GAAG,QAAQ,EACrB,SAAS,EACT,QAAQ,EACR,OAAO,GAAG,SAAS,GACpB,EAAE,EAAE;IACH,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,YAAY,GAAwB;QACxC,QAAQ,EAAE,OAAO;QACjB,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO;QACrC,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,MAAM,EAAE,IAAI;QACZ,cAAc,EAAE,WAAW;QAC3B,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;KAC/B,CAAC;IAEF,MAAM,UAAU,GAAwB;QACtC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO;QACrC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE;QAC9B,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1B,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,KAAK;QACf,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE;QAC3B,SAAS,EAAE,2BAA2B;KACvC,CAAC;IAEF,OAAO,CACL,eAAK,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,aACzC,eAAK,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,aACvD,aAAI,KAAK,EAAE;4BACT,SAAS,EAAE,CAAC;4BACZ,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;4BAC/B,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;4BACxB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;4BAClC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;yBACzB,YACE,KAAK,GACH,EACL,YAAG,KAAK,EAAE;4BACR,SAAS,EAAE,CAAC;4BACZ,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;4BAC/B,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;4BAC1B,UAAU,EAAE,GAAG;4BACf,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS;yBAC9B,YACE,OAAO,GACN,EACJ,eAAK,KAAK,EAAE;4BACV,OAAO,EAAE,MAAM;4BACf,cAAc,EAAE,UAAU;4BAC1B,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;yBACvB,aACC,KAAC,MAAM,IAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAE,QAAQ,YACtC,UAAU,GACJ,EACT,KAAC,MAAM,IAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,YACzC,WAAW,GACL,IACL,IACF,EACN,0BAAQ;;;;;OAKP,GAAS,IACN,CACP,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"ConfirmModal.js","sourceRoot":"","sources":["../../../src/components/ConfirmModal.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAgBnC,MAAM,aAAa,GAAoC;IACrD,MAAM,EAAE,CACN,eAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAE,CAAC,EAAE,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,aAC5I,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,GAAG,EACjC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,GAAG,EACtC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IAClC,CACP;IACD,OAAO,EAAE,CACP,eAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAE,CAAC,EAAE,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,aAC5I,eAAM,CAAC,EAAC,qFAAqF,GAAG,EAChG,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACvC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,OAAO,EAAC,EAAE,EAAC,IAAI,GAAG,IACvC,CACP;IACD,OAAO,EAAE,CACP,eAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAE,CAAC,EAAE,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,aAC5I,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,GAAG,EACjC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACxC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,OAAO,EAAC,EAAE,EAAC,GAAG,GAAG,IACrC,CACP;CACF,CAAC;AAEF,MAAM,aAAa,GAAkD;IACnE,MAAM,EAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAG,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE;IACnE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE;IACpE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE;CACxE,CAAC;AAEF,MAAM,UAAU,GAA2B;IACzC,EAAE,EAAE,OAAO;IACX,EAAE,EAAE,OAAO;IACX,EAAE,EAAE,OAAO;CACZ,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAgC,CAAC,EACxD,MAAM,EACN,KAAK,EACL,OAAO,EACP,WAAW,GAAG,UAAU,EACxB,UAAU,GAAG,QAAQ,EACrB,SAAS,EACT,QAAQ,EACR,OAAO,GAAG,SAAS,EACnB,IAAI,EACJ,IAAI,GAAG,IAAI,EACX,OAAO,GAAG,KAAK,GAChB,EAAE,EAAE;IACH,qBAAqB;IACrB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;YAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9E,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEvB,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC;IAC3D,MAAM,YAAY,GAAG,IAAI,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAEpD,OAAO,CACL,8BACE,0BAAQ;;;;;;;;;OASP,GAAS,EAGV,cACE,KAAK,EAAE;oBACL,QAAQ,EAAE,OAAO;oBACjB,GAAG,EAAE,CAAC;oBACN,IAAI,EAAE,CAAC;oBACP,KAAK,EAAE,MAAM;oBACb,MAAM,EAAE,MAAM;oBACd,eAAe,EAAE,wBAAwB;oBACzC,OAAO,EAAE,MAAM;oBACf,UAAU,EAAE,QAAQ;oBACpB,cAAc,EAAE,QAAQ;oBACxB,MAAM,EAAE,IAAI;oBACZ,cAAc,EAAE,WAAW;oBAC3B,oBAAoB,EAAE,WAAW;oBACjC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;oBAC9B,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC1B,SAAS,EAAE,6BAA6B;iBACzC,EACD,OAAO,EAAE,QAAQ,YAGjB,eACE,KAAK,EAAE;wBACL,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO;wBACrC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;wBAClC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,EAAE;wBACxC,QAAQ,EAAE,MAAM;wBAChB,SAAS,EAAE;gBACP,MAAM,CAAC,MAAM,CAAC,EAAE;;;aAGnB;wBACD,SAAS,EAAE,qDAAqD;wBAChE,QAAQ,EAAE,QAAQ;qBACnB,EACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,aAGnC,cAAK,KAAK,EAAE;gCACV,MAAM,EAAE,KAAK;gCACb,UAAU,EAAE,0BAA0B,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK;6BACjE,GAAI,EAGL,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,aAExC,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,aAChH,cAAK,KAAK,EAAE;gDACV,KAAK,EAAE,MAAM;gDACb,MAAM,EAAE,MAAM;gDACd,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE;gDAC9B,eAAe,EAAE,EAAE,CAAC,EAAE;gDACtB,KAAK,EAAE,EAAE,CAAC,KAAK;gDACf,OAAO,EAAE,MAAM;gDACf,UAAU,EAAE,QAAQ;gDACpB,cAAc,EAAE,QAAQ;gDACxB,UAAU,EAAE,CAAC;6CACd,YACE,YAAY,GACT,EACN,eAAK,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,aAClC,aAAI,KAAK,EAAE;wDACT,MAAM,EAAE,CAAC;wDACT,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;wDACxB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;wDAClC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;wDACxB,UAAU,EAAE,IAAI;wDAChB,aAAa,EAAE,SAAS;qDACzB,YACE,KAAK,GACH,EACL,cAAK,KAAK,EAAE;wDACV,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;wDAC5B,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;wDACxB,UAAU,EAAE,IAAI;wDAChB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS;wDAC7B,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY;qDACrC,YACE,OAAO,GACJ,IACF,IACF,EAGN,eAAK,KAAK,EAAE;wCACV,OAAO,EAAE,MAAM;wCACf,cAAc,EAAE,UAAU;wCAC1B,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;wCACtB,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;wCAC7B,SAAS,EAAE,aAAa,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE;qCAChD,aACC,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,OAAO,EACjB,SAAS,kBAER,UAAU,GACJ,EACT,KAAC,MAAM,IACL,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAiE,EAC5G,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,OAAO,YAEhB,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,GACjC,IACL,IACF,IACF,GACF,IACL,CACJ,CAAC;AACJ,CAAC,CAAC"}
@@ -1,8 +1,10 @@
1
1
  import React from 'react';
2
2
  export interface DividerProps extends React.HTMLAttributes<HTMLElement> {
3
3
  orientation?: 'horizontal' | 'vertical';
4
- type?: 'solid' | 'gradient';
4
+ type?: 'solid' | 'dashed' | 'gradient';
5
5
  label?: React.ReactNode;
6
- margin?: 'none' | 'sm' | 'md' | 'lg';
6
+ margin?: 'none' | 'xs' | 'sm' | 'md' | 'lg';
7
+ color?: string;
8
+ thickness?: number;
7
9
  }
8
10
  export declare const Divider: React.FC<DividerProps>;
@@ -1,43 +1,70 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { tokens } from '../tokens';
3
- export const Divider = ({ orientation = 'horizontal', type = 'solid', label, margin = 'md', className = '', style = {} }) => {
3
+ export const Divider = ({ orientation = 'horizontal', type = 'solid', label, margin = 'md', color, thickness = 1, className = '', style = {}, }) => {
4
4
  const getMargin = () => {
5
5
  switch (margin) {
6
6
  case 'none': return '0';
7
+ case 'xs': return tokens.spacing[1];
7
8
  case 'sm': return tokens.spacing[2];
8
9
  case 'lg': return tokens.spacing[8];
9
10
  default: return tokens.spacing[4];
10
11
  }
11
12
  };
12
13
  const isVertical = orientation === 'vertical';
14
+ const isDashed = type === 'dashed';
13
15
  const isGradient = type === 'gradient';
14
- const lineStyle = {
15
- backgroundColor: isGradient ? 'transparent' : tokens.color.slate100,
16
- backgroundImage: isGradient
17
- ? (isVertical
18
- ? `linear-gradient(to bottom, transparent, ${tokens.color.slate200}, transparent)`
19
- : `linear-gradient(to right, transparent, ${tokens.color.slate200}, transparent)`)
20
- : 'none',
21
- border: 'none',
22
- width: isVertical ? '1.5px' : '100%',
23
- height: isVertical ? '100%' : '1.5px',
16
+ const defaultColor = color || tokens.color.slate200;
17
+ const lineStyle = isGradient
18
+ ? {
19
+ background: isVertical
20
+ ? `linear-gradient(to bottom, transparent, ${defaultColor}, transparent)`
21
+ : `linear-gradient(to right, transparent, ${defaultColor}, transparent)`,
22
+ border: 'none',
23
+ }
24
+ : {
25
+ backgroundColor: isDashed ? 'transparent' : defaultColor,
26
+ border: isDashed
27
+ ? `${thickness}px dashed ${defaultColor}`
28
+ : 'none',
29
+ };
30
+ const baseLineStyle = {
31
+ ...lineStyle,
24
32
  flexShrink: 0,
25
- ...style
33
+ width: isVertical ? `${thickness}px` : '100%',
34
+ height: isVertical ? '100%' : `${thickness}px`,
35
+ ...(!isDashed && !isGradient ? { backgroundColor: defaultColor } : {}),
26
36
  };
27
37
  if (isVertical) {
28
38
  return (_jsx("div", { style: {
29
- ...lineStyle,
39
+ ...baseLineStyle,
30
40
  margin: `0 ${getMargin()}`,
31
41
  display: 'inline-block',
32
- verticalAlign: 'middle'
33
- }, className: className }));
42
+ alignSelf: 'stretch',
43
+ ...style,
44
+ }, className: `ds-divider ds-divider--vertical ${className}` }));
34
45
  }
35
46
  if (label) {
36
- return (_jsxs("div", { style: { display: 'flex', alignItems: 'center', width: '100%', margin: `${getMargin()} 0`, gap: tokens.spacing[4], ...style }, className: className, children: [_jsx("div", { style: { ...lineStyle, flex: 1, margin: 0 } }), _jsx("span", { style: { fontSize: '11px', fontWeight: tokens.font.weightBold, color: tokens.color.slate500, textTransform: 'uppercase', letterSpacing: '0.05em' }, children: label }), _jsx("div", { style: { ...lineStyle, flex: 1, margin: 0 } })] }));
47
+ return (_jsxs("div", { style: {
48
+ display: 'flex',
49
+ alignItems: 'center',
50
+ width: '100%',
51
+ margin: `${getMargin()} 0`,
52
+ gap: tokens.spacing[3],
53
+ ...style,
54
+ }, className: `ds-divider ds-divider--labeled ${className}`, children: [_jsx("div", { style: { ...baseLineStyle, flex: 1 } }), _jsx("span", { style: {
55
+ fontSize: '11px',
56
+ fontWeight: tokens.font.weightSemibold,
57
+ color: tokens.color.slate400,
58
+ textTransform: 'uppercase',
59
+ letterSpacing: '0.08em',
60
+ whiteSpace: 'nowrap',
61
+ padding: `0 ${tokens.spacing[1]}`,
62
+ }, children: label }), _jsx("div", { style: { ...baseLineStyle, flex: 1 } })] }));
37
63
  }
38
64
  return (_jsx("hr", { style: {
39
- ...lineStyle,
40
- margin: `${getMargin()} 0`
41
- }, className: className }));
65
+ ...baseLineStyle,
66
+ margin: `${getMargin()} 0`,
67
+ ...style,
68
+ }, className: `ds-divider ${className}` }));
42
69
  };
43
70
  //# sourceMappingURL=Divider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Divider.js","sourceRoot":"","sources":["../../../src/components/Divider.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Divider.js","sourceRoot":"","sources":["../../../src/components/Divider.tsx"],"names":[],"mappings":"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"}
@@ -3,16 +3,19 @@ export interface ListProps<T = any> extends Omit<React.HTMLAttributes<HTMLUListE
3
3
  children?: React.ReactNode;
4
4
  items?: T[];
5
5
  renderItem?: (item: T, index: number) => React.ReactNode;
6
- variant?: 'default' | 'sidebar' | 'ghost';
7
- spacing?: 'sm' | 'md' | 'lg';
6
+ variant?: 'default' | 'sidebar' | 'ghost' | 'card';
7
+ spacing?: 'none' | 'xs' | 'sm' | 'md';
8
+ divider?: boolean;
8
9
  }
9
- export declare const List: <T extends any>({ children, items, renderItem, className, style, variant, spacing, ...props }: ListProps<T>) => import("react/jsx-runtime").JSX.Element;
10
+ export declare const List: <T extends any>({ children, items, renderItem, className, style, variant, spacing, divider, ...props }: ListProps<T>) => import("react/jsx-runtime").JSX.Element;
10
11
  export interface ListItemProps extends React.HTMLAttributes<HTMLLIElement> {
11
12
  children: React.ReactNode;
12
13
  icon?: React.ReactNode;
13
14
  action?: React.ReactNode;
15
+ badge?: React.ReactNode;
14
16
  divider?: boolean;
15
17
  active?: boolean;
16
- variant?: 'default' | 'sidebar' | 'ghost';
18
+ variant?: 'default' | 'sidebar' | 'ghost' | 'card';
19
+ description?: string;
17
20
  }
18
21
  export declare const ListItem: React.FC<ListItemProps>;
@@ -1,63 +1,98 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import React from 'react';
3
3
  import { tokens } from '../tokens';
4
- export const List = ({ children, items, renderItem, className = '', style = {}, variant = 'default', spacing = 'sm', ...props }) => {
4
+ export const List = ({ children, items, renderItem, className = '', style = {}, variant = 'default', spacing = 'xs', divider = false, ...props }) => {
5
+ const isCard = variant === 'card';
6
+ const isSidebarOrGhost = variant === 'sidebar' || variant === 'ghost';
5
7
  const getSpacing = () => {
6
8
  switch (spacing) {
7
- case 'sm': return '4px';
8
- case 'md': return '8px';
9
- case 'lg': return '12px';
9
+ case 'none': return '0';
10
+ case 'xs': return '2px';
11
+ case 'md': return tokens.spacing[2];
10
12
  default: return '4px';
11
13
  }
12
14
  };
13
15
  const containerStyle = {
14
16
  listStyle: 'none',
15
- padding: 0,
17
+ padding: isCard ? tokens.spacing[3] : 0,
16
18
  margin: 0,
17
19
  display: 'flex',
18
20
  flexDirection: 'column',
19
- gap: variant === 'sidebar' || variant === 'ghost' ? getSpacing() : '0',
20
- border: variant === 'default' ? `1px solid ${tokens.color.slate100}` : 'none',
21
- borderRadius: variant === 'default' ? tokens.radius.lg : '0',
21
+ gap: isSidebarOrGhost || isCard ? getSpacing() : '0',
22
+ border: variant === 'default' ? `1px solid ${tokens.color.slate100}` : isCard ? `1px solid ${tokens.color.slate100}` : 'none',
23
+ borderRadius: variant === 'default' ? tokens.radius.xl : isCard ? tokens.radius['2xl'] : '0',
22
24
  overflow: 'hidden',
23
- backgroundColor: variant === 'default' ? tokens.color.white : 'transparent',
24
- ...style
25
+ backgroundColor: variant === 'default' ? tokens.color.white : isCard ? tokens.color.white : 'transparent',
26
+ boxShadow: isCard ? tokens.shadow.sm : 'none',
27
+ ...style,
25
28
  };
26
- return (_jsx("ul", { style: containerStyle, className: className, ...props, children: items && renderItem ? items.map((item, index) => _jsx(React.Fragment, { children: renderItem(item, index) }, index)) : children }));
29
+ return (_jsx("ul", { style: containerStyle, className: `ds-list ds-list--${variant} ${className}`, ...props, children: items && renderItem
30
+ ? items.map((item, index) => (_jsxs(React.Fragment, { children: [renderItem(item, index), divider && index < items.length - 1 && (_jsx("li", { "aria-hidden": true, style: { height: '1px', backgroundColor: tokens.color.slate100, margin: '0 -0px' } }))] }, index)))
31
+ : children }));
27
32
  };
28
- export const ListItem = ({ children, icon, action, onClick, className = '', style = {}, divider = false, active = false, variant = 'sidebar', ...props }) => {
29
- const isSidebar = variant === 'sidebar';
33
+ export const ListItem = ({ children, icon, action, badge, onClick, className = '', style = {}, divider = false, active = false, variant = 'sidebar', description, ...props }) => {
34
+ const [hovered, setHovered] = React.useState(false);
35
+ const isSidebar = variant === 'sidebar' || variant === 'card';
36
+ const isClickable = !!onClick;
37
+ const showHover = isClickable && hovered && !active;
38
+ const getActiveStyles = () => {
39
+ if (active)
40
+ return {
41
+ backgroundColor: tokens.color.primaryLight,
42
+ color: tokens.color.primary,
43
+ borderColor: 'rgba(37, 99, 235, 0.2)',
44
+ };
45
+ if (showHover)
46
+ return {
47
+ backgroundColor: tokens.color.slate50,
48
+ color: tokens.color.slate700,
49
+ };
50
+ return {
51
+ backgroundColor: 'transparent',
52
+ color: tokens.color.slate600,
53
+ };
54
+ };
30
55
  const itemStyle = {
31
56
  display: 'flex',
32
- alignItems: 'center',
33
- padding: isSidebar ? '12px 16px' : '12px 16px',
57
+ alignItems: description ? 'flex-start' : 'center',
58
+ padding: isSidebar ? `${tokens.spacing[3]} ${tokens.spacing[4]}` : `${tokens.spacing[4]} ${tokens.spacing[4]}`,
34
59
  gap: tokens.spacing[3],
35
- cursor: onClick ? 'pointer' : 'default',
36
- borderRadius: isSidebar ? tokens.radius.md : '0',
60
+ cursor: isClickable ? 'pointer' : 'default',
61
+ borderRadius: isSidebar ? tokens.radius.lg : '0',
37
62
  transition: tokens.transition.fast,
38
- border: isSidebar ? `1px solid ${active ? tokens.color.borderFocus : 'transparent'}` : 'none',
39
- backgroundColor: active && isSidebar ? 'rgba(255, 251, 235, 0.5)' : 'transparent',
40
- color: active ? tokens.color.warning : tokens.color.slate500,
41
- borderBottom: divider && !isSidebar ? `1px solid ${tokens.color.slate50}` : 'none',
63
+ border: isSidebar ? `1px solid ${active ? 'rgba(37, 99, 235, 0.15)' : 'transparent'}` : 'none',
64
+ borderBottom: !isSidebar && (divider || variant === 'default')
65
+ ? `1px solid ${tokens.color.slate100}`
66
+ : 'none',
42
67
  fontWeight: active ? tokens.font.weightSemibold : tokens.font.weightMedium,
43
- ...style
68
+ outline: 'none',
69
+ ...getActiveStyles(),
70
+ ...style,
44
71
  };
45
- const iconStyle = {
72
+ const iconWrapStyle = {
46
73
  display: 'flex',
47
74
  flexShrink: 0,
48
- color: active ? tokens.color.warning : tokens.color.slate400,
75
+ color: active ? tokens.color.primary : showHover ? tokens.color.slate500 : tokens.color.slate400,
49
76
  transition: tokens.transition.fast,
77
+ marginTop: description ? '2px' : '0',
50
78
  };
51
- return (_jsxs("li", { style: itemStyle, className: className, onClick: onClick, onMouseEnter: onClick ? (e) => {
52
- if (!active) {
53
- e.currentTarget.style.backgroundColor = 'rgba(248, 250, 252, 1)';
54
- e.currentTarget.style.color = tokens.color.slate700;
55
- }
56
- } : undefined, onMouseLeave: onClick ? (e) => {
57
- if (!active) {
58
- e.currentTarget.style.backgroundColor = 'transparent';
59
- e.currentTarget.style.color = tokens.color.slate500;
60
- }
61
- } : undefined, ...props, children: [icon && _jsx("div", { style: iconStyle, children: icon }), _jsx("div", { style: { flex: 1, fontSize: '13px' }, children: children }), action && _jsx("div", { style: { flexShrink: 0 }, children: action })] }));
79
+ return (_jsxs("li", { style: itemStyle, className: `ds-list-item ${className}`, onClick: onClick, onMouseEnter: () => isClickable && setHovered(true), onMouseLeave: () => isClickable && setHovered(false), role: isClickable ? 'button' : undefined, tabIndex: isClickable ? 0 : undefined, ...props, children: [icon && _jsx("div", { style: iconWrapStyle, children: icon }), _jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [_jsx("div", { style: {
80
+ fontSize: tokens.font.sm,
81
+ lineHeight: 1.4,
82
+ whiteSpace: 'nowrap',
83
+ overflow: 'hidden',
84
+ textOverflow: 'ellipsis',
85
+ }, children: children }), description && (_jsx("div", { style: {
86
+ fontSize: '11px',
87
+ color: tokens.color.textMuted,
88
+ marginTop: '2px',
89
+ fontWeight: tokens.font.weightMedium,
90
+ lineHeight: 1.4,
91
+ }, children: description }))] }), badge && (_jsx("div", { style: { flexShrink: 0, marginLeft: tokens.spacing[1] }, children: badge })), action && (_jsx("div", { style: { flexShrink: 0 }, children: action })), isSidebar && isClickable && !action && (_jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round", style: {
92
+ flexShrink: 0,
93
+ opacity: active ? 0.7 : 0.3,
94
+ transition: tokens.transition.fast,
95
+ marginLeft: 'auto',
96
+ }, children: _jsx("polyline", { points: "9 18 15 12 9 6" }) }))] }));
62
97
  };
63
98
  //# sourceMappingURL=ListComponents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ListComponents.js","sourceRoot":"","sources":["../../../src/components/ListComponents.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ListComponents.js","sourceRoot":"","sources":["../../../src/components/ListComponents.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,14 @@
1
1
  import React from 'react';
2
2
  export interface LoadingSpinnerProps {
3
- size?: 'sm' | 'md' | 'lg';
4
- color?: 'primary' | 'white';
3
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
4
+ color?: 'primary' | 'white' | 'success' | 'warning' | 'danger' | 'info' | 'slate';
5
+ label?: string;
5
6
  className?: string;
7
+ style?: React.CSSProperties;
6
8
  }
7
9
  export declare const LoadingSpinner: React.FC<LoadingSpinnerProps>;
10
+ export interface LoadingOverlayProps {
11
+ visible?: boolean;
12
+ label?: string;
13
+ }
14
+ export declare const LoadingOverlay: React.FC<LoadingOverlayProps>;
@@ -1,21 +1,63 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { tokens } from '../tokens';
3
- export const LoadingSpinner = ({ size = 'md', color = 'primary', className = '' }) => {
4
- const getDims = () => {
5
- switch (size) {
6
- case 'sm': return '16px';
7
- case 'lg': return '48px';
8
- case 'md':
9
- default: return '32px';
10
- }
11
- };
12
- const getStrokeWidth = () => size === 'sm' ? '3' : '4';
13
- const getColor = () => color === 'white' ? '#FFFFFF' : tokens.color.primary;
14
- const dims = getDims();
15
- return (_jsx("div", { style: { display: 'inline-flex', alignItems: 'center', justifyContent: 'center' }, className: className, children: _jsxs("svg", { width: dims, height: dims, viewBox: "0 0 50 50", style: { animation: 'ds-spin 1s linear infinite' }, children: [_jsx("circle", { cx: "25", cy: "25", r: "20", fill: "none", stroke: getColor(), strokeWidth: getStrokeWidth(), strokeDasharray: "90, 150", strokeLinecap: "round", style: { opacity: 1 } }), _jsx("style", { children: `
16
- @keyframes ds-spin {
17
- 100% { transform: rotate(360deg); }
18
- }
19
- ` })] }) }));
3
+ const SIZE_MAP = {
4
+ xs: '14px',
5
+ sm: '20px',
6
+ md: '32px',
7
+ lg: '48px',
8
+ xl: '64px',
9
+ };
10
+ const COLOR_MAP = {
11
+ primary: tokens.color.primary,
12
+ white: '#ffffff',
13
+ success: tokens.color.success,
14
+ warning: tokens.color.warning,
15
+ danger: tokens.color.danger,
16
+ info: tokens.color.info,
17
+ slate: tokens.color.slate400,
18
+ };
19
+ export const LoadingSpinner = ({ size = 'md', color = 'primary', label, className = '', style = {}, }) => {
20
+ const dims = SIZE_MAP[size] || '32px';
21
+ const strokeWidth = size === 'xs' || size === 'sm' ? '3' : size === 'xl' ? '5' : '4';
22
+ const resolvedColor = COLOR_MAP[color] || tokens.color.primary;
23
+ return (_jsxs("div", { style: {
24
+ display: 'inline-flex',
25
+ flexDirection: label ? 'column' : 'row',
26
+ alignItems: 'center',
27
+ justifyContent: 'center',
28
+ gap: label ? tokens.spacing[2] : 0,
29
+ ...style,
30
+ }, className: `ds-spinner ${className}`, children: [_jsxs("svg", { width: dims, height: dims, viewBox: "0 0 50 50", style: { animation: 'ds-spin 0.75s linear infinite', flexShrink: 0 }, "aria-hidden": "true", children: [_jsx("circle", { cx: "25", cy: "25", r: "20", fill: "none", stroke: "currentColor", strokeWidth: strokeWidth, style: { color: `${resolvedColor}20` } }), _jsx("circle", { cx: "25", cy: "25", r: "20", fill: "none", stroke: resolvedColor, strokeWidth: strokeWidth, strokeDasharray: "80, 150", strokeLinecap: "round", style: { transformOrigin: 'center' } }), _jsx("style", { children: `
31
+ @keyframes ds-spin {
32
+ 0% { transform: rotate(0deg); }
33
+ 100% { transform: rotate(360deg); }
34
+ }
35
+ ` })] }), label && (_jsx("span", { style: {
36
+ fontSize: size === 'xs' || size === 'sm' ? tokens.font.xs : tokens.font.sm,
37
+ fontWeight: tokens.font.weightMedium,
38
+ color: resolvedColor,
39
+ lineHeight: 1.4,
40
+ }, children: label }))] }));
41
+ };
42
+ export const LoadingOverlay = ({ visible = true, label, }) => {
43
+ if (!visible)
44
+ return null;
45
+ return (_jsxs("div", { style: {
46
+ position: 'absolute',
47
+ inset: 0,
48
+ display: 'flex',
49
+ flexDirection: 'column',
50
+ alignItems: 'center',
51
+ justifyContent: 'center',
52
+ gap: tokens.spacing[3],
53
+ backgroundColor: 'rgba(255, 255, 255, 0.75)',
54
+ backdropFilter: 'blur(3px)',
55
+ borderRadius: 'inherit',
56
+ zIndex: 10,
57
+ }, children: [_jsx(LoadingSpinner, { size: "md" }), label && (_jsx("span", { style: {
58
+ fontSize: tokens.font.sm,
59
+ fontWeight: tokens.font.weightMedium,
60
+ color: tokens.color.textMuted,
61
+ }, children: label }))] }));
20
62
  };
21
63
  //# sourceMappingURL=LoadingSpinner.js.map