shared-design-system 1.12.0 → 1.14.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.
- package/dist/src/components/Alert.d.ts +2 -1
- package/dist/src/components/Alert.js +80 -38
- package/dist/src/components/Alert.js.map +1 -1
- package/dist/src/components/Avatar.d.ts +11 -2
- package/dist/src/components/Avatar.js +87 -40
- package/dist/src/components/Avatar.js.map +1 -1
- package/dist/src/components/Badge.d.ts +4 -2
- package/dist/src/components/Badge.js +67 -29
- package/dist/src/components/Badge.js.map +1 -1
- package/dist/src/components/Breadcrumbs.d.ts +4 -1
- package/dist/src/components/Breadcrumbs.js +56 -27
- package/dist/src/components/Breadcrumbs.js.map +1 -1
- package/dist/src/components/Button.d.ts +4 -2
- package/dist/src/components/Button.js +99 -95
- package/dist/src/components/Button.js.map +1 -1
- package/dist/src/components/Card.d.ts +3 -1
- package/dist/src/components/Card.js +86 -23
- package/dist/src/components/Card.js.map +1 -1
- package/dist/src/components/ConfirmModal.d.ts +5 -2
- package/dist/src/components/ConfirmModal.js +99 -47
- package/dist/src/components/ConfirmModal.js.map +1 -1
- package/dist/src/components/Divider.d.ts +4 -2
- package/dist/src/components/Divider.js +46 -19
- package/dist/src/components/Divider.js.map +1 -1
- package/dist/src/components/ListComponents.d.ts +7 -4
- package/dist/src/components/ListComponents.js +70 -35
- package/dist/src/components/ListComponents.js.map +1 -1
- package/dist/src/components/LoadingSpinner.d.ts +9 -2
- package/dist/src/components/LoadingSpinner.js +59 -17
- package/dist/src/components/LoadingSpinner.js.map +1 -1
- package/dist/src/components/Progress.d.ts +5 -1
- package/dist/src/components/Progress.js +58 -26
- package/dist/src/components/Progress.js.map +1 -1
- package/dist/src/components/Radio.d.ts +4 -0
- package/dist/src/components/Radio.js +50 -24
- package/dist/src/components/Radio.js.map +1 -1
- package/dist/src/components/ReadOnlyField.d.ts +4 -0
- package/dist/src/components/ReadOnlyField.js +78 -25
- package/dist/src/components/ReadOnlyField.js.map +1 -1
- package/dist/src/components/Select.js +2 -2
- package/dist/src/components/Select.js.map +1 -1
- package/dist/src/components/Skeleton.d.ts +3 -1
- package/dist/src/components/Skeleton.js +52 -22
- package/dist/src/components/Skeleton.js.map +1 -1
- package/dist/src/components/Stack.d.ts +2 -0
- package/dist/src/components/Stack.js +21 -20
- package/dist/src/components/Stack.js.map +1 -1
- package/dist/src/components/Steps.d.ts +3 -1
- package/dist/src/components/Steps.js +93 -68
- package/dist/src/components/Steps.js.map +1 -1
- package/dist/src/components/Switch.d.ts +6 -2
- package/dist/src/components/Switch.js +45 -22
- package/dist/src/components/Switch.js.map +1 -1
- package/dist/src/components/Table.d.ts +9 -1
- package/dist/src/components/Table.js +102 -37
- package/dist/src/components/Table.js.map +1 -1
- package/dist/src/components/Tabs.d.ts +9 -5
- package/dist/src/components/Tabs.js +88 -88
- package/dist/src/components/Tabs.js.map +1 -1
- package/dist/src/components/Tag.d.ts +3 -1
- package/dist/src/components/Tag.js +104 -26
- package/dist/src/components/Tag.js.map +1 -1
- package/dist/src/components/Tooltip.d.ts +3 -0
- package/dist/src/components/Tooltip.js +89 -38
- package/dist/src/components/Tooltip.js.map +1 -1
- package/dist/src/components/Typography.d.ts +14 -1
- package/dist/src/components/Typography.js +108 -61
- package/dist/src/components/Typography.js.map +1 -1
- package/dist/src/index.d.ts +6 -6
- package/dist/src/index.js +3 -3
- package/dist/src/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,31 +1,60 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { tokens } from '../tokens';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
3
|
+
const ChevronSeparator = () => (_jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round", style: { opacity: 0.35, flexShrink: 0 }, children: _jsx("polyline", { points: "9 18 15 12 9 6" }) }));
|
|
4
|
+
export const Breadcrumbs = ({ items = [], separator, size = 'sm', maxItems, className = '', style = {}, }) => {
|
|
5
|
+
const fontSize = size === 'sm' ? tokens.font.xs : tokens.font.sm;
|
|
6
|
+
const resolvedSeparator = separator || _jsx(ChevronSeparator, {});
|
|
7
|
+
let displayItems = items;
|
|
8
|
+
if (maxItems && items.length > maxItems) {
|
|
9
|
+
const front = items.slice(0, 1);
|
|
10
|
+
const back = items.slice(-Math.max(1, maxItems - 2));
|
|
11
|
+
displayItems = [
|
|
12
|
+
...front,
|
|
13
|
+
{ label: '…' },
|
|
14
|
+
...back,
|
|
15
|
+
];
|
|
16
|
+
}
|
|
17
|
+
return (_jsx("nav", { "aria-label": "Breadcrumb", className: `ds-breadcrumbs ${className}`, children: _jsx("ol", { style: {
|
|
18
|
+
display: 'flex',
|
|
19
|
+
alignItems: 'center',
|
|
20
|
+
gap: tokens.spacing[1],
|
|
21
|
+
fontSize,
|
|
22
|
+
fontWeight: tokens.font.weightMedium,
|
|
23
|
+
color: tokens.color.textMuted,
|
|
24
|
+
listStyle: 'none',
|
|
25
|
+
padding: 0,
|
|
26
|
+
margin: 0,
|
|
27
|
+
flexWrap: 'wrap',
|
|
28
|
+
...style,
|
|
29
|
+
}, children: displayItems.map((item, index) => {
|
|
30
|
+
const isLast = index === displayItems.length - 1;
|
|
31
|
+
return (_jsx("li", { style: { display: 'flex', alignItems: 'center', gap: tokens.spacing[1] }, children: isLast ? (_jsxs("span", { "aria-current": "page", style: {
|
|
32
|
+
fontWeight: tokens.font.weightSemibold,
|
|
33
|
+
color: tokens.color.slate700,
|
|
34
|
+
display: 'inline-flex',
|
|
35
|
+
alignItems: 'center',
|
|
36
|
+
gap: '4px',
|
|
37
|
+
maxWidth: '200px',
|
|
38
|
+
overflow: 'hidden',
|
|
39
|
+
textOverflow: 'ellipsis',
|
|
40
|
+
whiteSpace: 'nowrap',
|
|
41
|
+
}, children: [item.icon && _jsx("span", { style: { display: 'inline-flex', flexShrink: 0 }, children: item.icon }), item.label] })) : (_jsxs(_Fragment, { children: [_jsxs("span", { onClick: item.onClick, style: {
|
|
42
|
+
display: 'inline-flex',
|
|
43
|
+
alignItems: 'center',
|
|
44
|
+
gap: '4px',
|
|
45
|
+
color: 'inherit',
|
|
46
|
+
cursor: item.onClick ? 'pointer' : 'default',
|
|
47
|
+
transition: tokens.transition.fast,
|
|
48
|
+
borderRadius: tokens.radius.sm,
|
|
49
|
+
padding: '1px 3px',
|
|
50
|
+
margin: '-1px -3px',
|
|
51
|
+
}, onMouseEnter: (e) => {
|
|
52
|
+
if (item.onClick)
|
|
53
|
+
e.currentTarget.style.color = tokens.color.primary;
|
|
54
|
+
}, onMouseLeave: (e) => {
|
|
55
|
+
if (item.onClick)
|
|
56
|
+
e.currentTarget.style.color = '';
|
|
57
|
+
}, children: [item.icon && _jsx("span", { style: { display: 'inline-flex', flexShrink: 0 }, children: item.icon }), item.label] }), _jsx("span", { style: { display: 'inline-flex', alignItems: 'center' }, children: resolvedSeparator })] })) }, index));
|
|
29
58
|
}) }) }));
|
|
30
59
|
};
|
|
31
60
|
//# sourceMappingURL=Breadcrumbs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumbs.js","sourceRoot":"","sources":["../../../src/components/Breadcrumbs.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"Breadcrumbs.js","sourceRoot":"","sources":["../../../src/components/Breadcrumbs.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
3
|
-
variant?: 'primary' | 'secondary' | 'danger' | 'ghost' | 'amber';
|
|
4
|
-
size?: 'sm' | 'md' | 'lg';
|
|
3
|
+
variant?: 'primary' | 'secondary' | 'danger' | 'ghost' | 'amber' | 'success' | 'outline';
|
|
4
|
+
size?: 'xs' | 'sm' | 'md' | 'lg';
|
|
5
5
|
isActive?: boolean;
|
|
6
6
|
startIcon?: React.ReactNode;
|
|
7
7
|
endIcon?: React.ReactNode;
|
|
8
|
+
loading?: boolean;
|
|
9
|
+
fullWidth?: boolean;
|
|
8
10
|
}
|
|
9
11
|
export declare const Button: React.FC<ButtonProps>;
|
|
@@ -1,113 +1,117 @@
|
|
|
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
|
-
|
|
4
|
+
const VARIANT_STYLES = {
|
|
5
|
+
primary: {
|
|
6
|
+
bg: tokens.color.white,
|
|
7
|
+
color: tokens.color.primary,
|
|
8
|
+
border: `1px solid rgba(37, 99, 235, 0.25)`,
|
|
9
|
+
shadow: tokens.shadow.sm,
|
|
10
|
+
hoverBg: 'transparent',
|
|
11
|
+
hoverColor: '#ffffff',
|
|
12
|
+
hoverBorder: tokens.color.primaryDark,
|
|
13
|
+
hoverShadow: `${tokens.shadow.md}, 0 0 0 3px rgba(37, 99, 235, 0.12)`,
|
|
14
|
+
gradient: `linear-gradient(135deg, ${tokens.color.primary} 0%, ${tokens.color.primaryDark} 100%)`,
|
|
15
|
+
},
|
|
16
|
+
secondary: {
|
|
17
|
+
bg: tokens.color.white,
|
|
18
|
+
color: tokens.color.slate600,
|
|
19
|
+
border: `1px solid ${tokens.color.slate200}`,
|
|
20
|
+
shadow: tokens.shadow.sm,
|
|
21
|
+
hoverBg: tokens.color.slate50,
|
|
22
|
+
hoverColor: tokens.color.slate800,
|
|
23
|
+
hoverBorder: tokens.color.slate300,
|
|
24
|
+
hoverShadow: tokens.shadow.sm,
|
|
25
|
+
},
|
|
26
|
+
danger: {
|
|
27
|
+
bg: tokens.color.white,
|
|
28
|
+
color: tokens.color.danger,
|
|
29
|
+
border: `1px solid rgba(220, 38, 38, 0.2)`,
|
|
30
|
+
shadow: tokens.shadow.sm,
|
|
31
|
+
hoverBg: tokens.color.danger,
|
|
32
|
+
hoverColor: '#ffffff',
|
|
33
|
+
hoverBorder: tokens.color.danger,
|
|
34
|
+
hoverShadow: `${tokens.shadow.md}, 0 0 0 3px rgba(220, 38, 38, 0.12)`,
|
|
35
|
+
},
|
|
36
|
+
success: {
|
|
37
|
+
bg: tokens.color.white,
|
|
38
|
+
color: tokens.color.success,
|
|
39
|
+
border: `1px solid rgba(5, 150, 105, 0.2)`,
|
|
40
|
+
shadow: tokens.shadow.sm,
|
|
41
|
+
hoverBg: tokens.color.success,
|
|
42
|
+
hoverColor: '#ffffff',
|
|
43
|
+
hoverBorder: tokens.color.success,
|
|
44
|
+
hoverShadow: `${tokens.shadow.md}, 0 0 0 3px rgba(5, 150, 105, 0.12)`,
|
|
45
|
+
},
|
|
46
|
+
amber: {
|
|
47
|
+
bg: tokens.color.white,
|
|
48
|
+
color: '#b45309',
|
|
49
|
+
border: `1px solid rgba(245, 158, 11, 0.25)`,
|
|
50
|
+
shadow: tokens.shadow.sm,
|
|
51
|
+
hoverBg: tokens.color.warning,
|
|
52
|
+
hoverColor: '#ffffff',
|
|
53
|
+
hoverBorder: tokens.color.warning,
|
|
54
|
+
hoverShadow: `${tokens.shadow.md}, 0 0 0 3px rgba(245, 158, 11, 0.12)`,
|
|
55
|
+
},
|
|
56
|
+
ghost: {
|
|
57
|
+
bg: 'transparent',
|
|
58
|
+
color: tokens.color.textMuted,
|
|
59
|
+
border: '1px solid transparent',
|
|
60
|
+
shadow: 'none',
|
|
61
|
+
hoverBg: tokens.color.slate100,
|
|
62
|
+
hoverColor: tokens.color.text,
|
|
63
|
+
hoverBorder: 'transparent',
|
|
64
|
+
hoverShadow: 'none',
|
|
65
|
+
},
|
|
66
|
+
outline: {
|
|
67
|
+
bg: 'transparent',
|
|
68
|
+
color: tokens.color.primary,
|
|
69
|
+
border: `1px solid ${tokens.color.primary}`,
|
|
70
|
+
shadow: 'none',
|
|
71
|
+
hoverBg: tokens.color.primaryLight,
|
|
72
|
+
hoverColor: tokens.color.primary,
|
|
73
|
+
hoverBorder: tokens.color.primary,
|
|
74
|
+
hoverShadow: 'none',
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
const SIZE_STYLES = {
|
|
78
|
+
xs: { padding: '2px 10px', fontSize: '11px', height: '26px', borderRadius: tokens.radius.md },
|
|
79
|
+
sm: { padding: `4px ${tokens.spacing[4]}`, fontSize: '12px', height: '32px', borderRadius: tokens.radius.md },
|
|
80
|
+
md: { padding: `${tokens.spacing[2]} ${tokens.spacing[6]}`, fontSize: tokens.font.sm, height: '40px', borderRadius: tokens.radius.lg },
|
|
81
|
+
lg: { padding: `${tokens.spacing[3]} ${tokens.spacing[8]}`, fontSize: tokens.font.md, height: '48px', borderRadius: tokens.radius.xl },
|
|
82
|
+
};
|
|
83
|
+
const SpinnerInline = ({ color }) => (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 50 50", style: { animation: 'ds-spin 0.7s linear infinite', flexShrink: 0 }, children: [_jsx("circle", { cx: "25", cy: "25", r: "20", fill: "none", stroke: color, strokeWidth: "5", strokeDasharray: "80,150", strokeLinecap: "round" }), _jsx("style", { children: `@keyframes ds-spin { to { transform: rotate(360deg); }}` })] }));
|
|
84
|
+
export const Button = ({ children, variant = 'primary', size = 'md', disabled = false, loading = false, fullWidth = false, onClick, style = {}, className = '', isActive = false, startIcon, endIcon, ...props }) => {
|
|
5
85
|
const [isHovered, setIsHovered] = React.useState(false);
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
color: tokens.color.slate600,
|
|
12
|
-
border: `1px solid ${tokens.color.slate200}`,
|
|
13
|
-
boxShadow: tokens.shadow.sm,
|
|
14
|
-
hoverBg: tokens.color.slate50,
|
|
15
|
-
hoverColor: tokens.color.slate800,
|
|
16
|
-
hoverBorder: tokens.color.slate300,
|
|
17
|
-
};
|
|
18
|
-
case 'danger':
|
|
19
|
-
return {
|
|
20
|
-
backgroundColor: tokens.color.white,
|
|
21
|
-
color: tokens.color.danger,
|
|
22
|
-
border: `1px solid ${tokens.color.dangerBg}`,
|
|
23
|
-
boxShadow: tokens.shadow.sm,
|
|
24
|
-
hoverBg: tokens.color.danger,
|
|
25
|
-
hoverColor: tokens.color.white,
|
|
26
|
-
hoverBorder: tokens.color.danger,
|
|
27
|
-
};
|
|
28
|
-
case 'amber':
|
|
29
|
-
return {
|
|
30
|
-
backgroundColor: tokens.color.white,
|
|
31
|
-
color: tokens.color.warning,
|
|
32
|
-
border: `1px solid ${tokens.color.warningBg}`,
|
|
33
|
-
boxShadow: tokens.shadow.sm,
|
|
34
|
-
hoverBg: tokens.color.warning,
|
|
35
|
-
hoverColor: tokens.color.white,
|
|
36
|
-
hoverBorder: tokens.color.warning,
|
|
37
|
-
};
|
|
38
|
-
case 'ghost':
|
|
39
|
-
return {
|
|
40
|
-
backgroundColor: 'transparent',
|
|
41
|
-
color: tokens.color.textMuted,
|
|
42
|
-
border: '1px solid transparent',
|
|
43
|
-
boxShadow: 'none',
|
|
44
|
-
hoverBg: tokens.color.slate100,
|
|
45
|
-
hoverColor: tokens.color.text,
|
|
46
|
-
hoverBorder: 'transparent',
|
|
47
|
-
};
|
|
48
|
-
case 'primary':
|
|
49
|
-
default:
|
|
50
|
-
return {
|
|
51
|
-
backgroundColor: tokens.color.white,
|
|
52
|
-
color: tokens.color.primary,
|
|
53
|
-
border: `1px solid ${tokens.color.primary}33`, // Subtle transparent border
|
|
54
|
-
boxShadow: tokens.shadow.sm,
|
|
55
|
-
hoverBg: tokens.color.primary,
|
|
56
|
-
gradient: `linear-gradient(135deg, ${tokens.color.primary}, ${tokens.color.primaryDark})`,
|
|
57
|
-
hoverColor: tokens.color.white,
|
|
58
|
-
hoverBorder: tokens.color.primary,
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
const getSizeStyles = () => {
|
|
63
|
-
switch (size) {
|
|
64
|
-
case 'sm':
|
|
65
|
-
return {
|
|
66
|
-
padding: `${tokens.spacing[1.5]} ${tokens.spacing[4]}`,
|
|
67
|
-
fontSize: '12px',
|
|
68
|
-
height: '32px'
|
|
69
|
-
};
|
|
70
|
-
case 'lg':
|
|
71
|
-
return {
|
|
72
|
-
padding: `${tokens.spacing[4]} ${tokens.spacing[10]}`,
|
|
73
|
-
fontSize: tokens.font.md,
|
|
74
|
-
height: '52px'
|
|
75
|
-
};
|
|
76
|
-
case 'md':
|
|
77
|
-
default:
|
|
78
|
-
return {
|
|
79
|
-
padding: `${tokens.spacing[2.5]} ${tokens.spacing[6]}`,
|
|
80
|
-
fontSize: tokens.font.sm,
|
|
81
|
-
height: '42px'
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
const vStyles = getVariantStyles();
|
|
86
|
-
const sStyles = getSizeStyles();
|
|
87
|
-
const isAppliedHover = !disabled && (isHovered || isActive);
|
|
86
|
+
const vs = VARIANT_STYLES[variant] || VARIANT_STYLES.primary;
|
|
87
|
+
const ss = SIZE_STYLES[size] || SIZE_STYLES.md;
|
|
88
|
+
const isEffectivelyDisabled = disabled || loading;
|
|
89
|
+
const showHover = !isEffectivelyDisabled && (isHovered || isActive);
|
|
90
|
+
const isPrimaryHover = showHover && variant === 'primary';
|
|
88
91
|
const baseStyle = {
|
|
89
92
|
fontFamily: tokens.font.family,
|
|
90
93
|
fontWeight: tokens.font.weightSemibold,
|
|
91
|
-
|
|
92
|
-
cursor:
|
|
94
|
+
...ss,
|
|
95
|
+
cursor: isEffectivelyDisabled ? 'not-allowed' : 'pointer',
|
|
93
96
|
transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',
|
|
94
|
-
display: 'inline-flex',
|
|
97
|
+
display: fullWidth ? 'flex' : 'inline-flex',
|
|
98
|
+
width: fullWidth ? '100%' : undefined,
|
|
95
99
|
alignItems: 'center',
|
|
96
100
|
justifyContent: 'center',
|
|
97
101
|
gap: tokens.spacing[2],
|
|
98
102
|
outline: 'none',
|
|
99
103
|
userSelect: 'none',
|
|
100
|
-
opacity:
|
|
101
|
-
backgroundColor:
|
|
102
|
-
backgroundImage:
|
|
103
|
-
color:
|
|
104
|
-
border:
|
|
105
|
-
boxShadow:
|
|
106
|
-
transform:
|
|
104
|
+
opacity: isEffectivelyDisabled ? 0.5 : 1,
|
|
105
|
+
backgroundColor: isPrimaryHover ? 'transparent' : (showHover ? vs.hoverBg : vs.bg),
|
|
106
|
+
backgroundImage: isPrimaryHover ? vs.gradient : 'none',
|
|
107
|
+
color: showHover ? vs.hoverColor : vs.color,
|
|
108
|
+
border: showHover ? vs.hoverBorder : vs.border,
|
|
109
|
+
boxShadow: showHover ? vs.hoverShadow : vs.shadow,
|
|
110
|
+
transform: showHover && !isEffectivelyDisabled ? 'translateY(-1px)' : 'translateY(0)',
|
|
107
111
|
whiteSpace: 'nowrap',
|
|
108
|
-
|
|
112
|
+
letterSpacing: '0.01em',
|
|
109
113
|
...style,
|
|
110
114
|
};
|
|
111
|
-
return (_jsxs("button", { style: baseStyle, className: className
|
|
115
|
+
return (_jsxs("button", { style: baseStyle, className: `ds-button ds-button--${variant} ds-button--${size} ${className}`, disabled: isEffectivelyDisabled, onClick: isEffectivelyDisabled ? undefined : onClick, onMouseEnter: () => !isEffectivelyDisabled && setIsHovered(true), onMouseLeave: () => !isEffectivelyDisabled && setIsHovered(false), ...props, children: [loading ? (_jsx(SpinnerInline, { color: showHover ? vs.hoverColor : vs.color })) : (startIcon && _jsx("span", { style: { display: 'flex', alignItems: 'center', flexShrink: 0 }, children: startIcon })), children, !loading && endIcon && (_jsx("span", { style: { display: 'flex', alignItems: 'center', flexShrink: 0 }, children: endIcon }))] }));
|
|
112
116
|
};
|
|
113
117
|
//# sourceMappingURL=Button.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/components/Button.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/components/Button.tsx"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,9 @@ export interface CardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 't
|
|
|
6
6
|
headerAction?: React.ReactNode;
|
|
7
7
|
footer?: React.ReactNode;
|
|
8
8
|
padding?: 'none' | 'sm' | 'md' | 'lg' | 'xl';
|
|
9
|
-
variant?: 'default' | 'flat' | 'outlined';
|
|
9
|
+
variant?: 'default' | 'elevated' | 'flat' | 'outlined' | 'glass';
|
|
10
10
|
hoverable?: boolean;
|
|
11
|
+
loading?: boolean;
|
|
12
|
+
accentColor?: string;
|
|
11
13
|
}
|
|
12
14
|
export declare const Card: React.FC<CardProps>;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
2
3
|
import { tokens } from '../tokens';
|
|
3
|
-
export const Card = ({ children, title, subtitle, avatar, headerAction, footer, className = '', style = {}, padding = 'lg', variant = 'default', hoverable = false, ...props }) => {
|
|
4
|
+
export const Card = ({ children, title, subtitle, avatar, headerAction, footer, className = '', style = {}, padding = 'lg', variant = 'default', hoverable = false, loading = false, accentColor, ...props }) => {
|
|
5
|
+
const [hovered, setHovered] = useState(false);
|
|
4
6
|
const getPadding = () => {
|
|
5
7
|
switch (padding) {
|
|
6
8
|
case 'none': return '0';
|
|
@@ -11,17 +13,60 @@ export const Card = ({ children, title, subtitle, avatar, headerAction, footer,
|
|
|
11
13
|
default: return tokens.spacing[6];
|
|
12
14
|
}
|
|
13
15
|
};
|
|
16
|
+
const getVariantStyles = () => {
|
|
17
|
+
switch (variant) {
|
|
18
|
+
case 'elevated':
|
|
19
|
+
return {
|
|
20
|
+
backgroundColor: tokens.color.surface,
|
|
21
|
+
border: `1px solid ${tokens.color.slate100}`,
|
|
22
|
+
boxShadow: hovered
|
|
23
|
+
? tokens.shadow.xl
|
|
24
|
+
: `${tokens.shadow.lg}, inset 0 1px 0 rgba(255,255,255,0.8)`,
|
|
25
|
+
};
|
|
26
|
+
case 'flat':
|
|
27
|
+
return {
|
|
28
|
+
backgroundColor: tokens.color.slate50,
|
|
29
|
+
border: `1px solid ${tokens.color.slate100}`,
|
|
30
|
+
boxShadow: 'none',
|
|
31
|
+
};
|
|
32
|
+
case 'outlined':
|
|
33
|
+
return {
|
|
34
|
+
backgroundColor: tokens.color.surface,
|
|
35
|
+
border: `1px solid ${tokens.color.slate200}`,
|
|
36
|
+
boxShadow: 'none',
|
|
37
|
+
};
|
|
38
|
+
case 'glass':
|
|
39
|
+
return {
|
|
40
|
+
backgroundColor: 'rgba(255, 255, 255, 0.6)',
|
|
41
|
+
backdropFilter: 'blur(16px) saturate(180%)',
|
|
42
|
+
WebkitBackdropFilter: 'blur(16px) saturate(180%)',
|
|
43
|
+
border: `1px solid rgba(255, 255, 255, 0.7)`,
|
|
44
|
+
boxShadow: hovered
|
|
45
|
+
? '0 20px 40px rgba(0,0,0,0.12)'
|
|
46
|
+
: '0 8px 32px rgba(0,0,0,0.08)',
|
|
47
|
+
};
|
|
48
|
+
case 'default':
|
|
49
|
+
default:
|
|
50
|
+
return {
|
|
51
|
+
backgroundColor: tokens.color.surface,
|
|
52
|
+
border: `1px solid ${tokens.color.slate100}`,
|
|
53
|
+
boxShadow: hovered
|
|
54
|
+
? tokens.shadow.lg
|
|
55
|
+
: tokens.shadow.md,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
};
|
|
14
59
|
const containerStyle = {
|
|
15
|
-
backgroundColor: tokens.color.surface,
|
|
16
60
|
borderRadius: tokens.radius.xl,
|
|
17
|
-
border: variant === 'outlined' ? `1px solid ${tokens.color.slate200}` : `1px solid ${tokens.color.slate100}`,
|
|
18
|
-
boxShadow: variant === 'default' ? tokens.shadow.md : 'none',
|
|
19
61
|
overflow: 'hidden',
|
|
20
62
|
display: 'flex',
|
|
21
63
|
flexDirection: 'column',
|
|
22
64
|
transition: tokens.transition.normal,
|
|
23
65
|
cursor: hoverable ? 'pointer' : 'default',
|
|
24
|
-
|
|
66
|
+
transform: hoverable && hovered ? 'translateY(-2px)' : 'translateY(0)',
|
|
67
|
+
position: 'relative',
|
|
68
|
+
...getVariantStyles(),
|
|
69
|
+
...style,
|
|
25
70
|
};
|
|
26
71
|
const headerStyle = {
|
|
27
72
|
padding: `${tokens.spacing[4]} ${getPadding()}`,
|
|
@@ -29,38 +74,56 @@ export const Card = ({ children, title, subtitle, avatar, headerAction, footer,
|
|
|
29
74
|
display: 'flex',
|
|
30
75
|
alignItems: 'center',
|
|
31
76
|
gap: tokens.spacing[3],
|
|
32
|
-
backgroundColor: tokens.color.white,
|
|
77
|
+
backgroundColor: variant === 'glass' ? 'rgba(255,255,255,0.4)' : tokens.color.white,
|
|
33
78
|
};
|
|
34
79
|
const bodyStyle = {
|
|
35
80
|
padding: getPadding(),
|
|
36
|
-
flex: 1
|
|
81
|
+
flex: 1,
|
|
37
82
|
};
|
|
38
83
|
const footerStyle = {
|
|
39
84
|
padding: `${tokens.spacing[4]} ${getPadding()}`,
|
|
40
85
|
borderTop: `1px solid ${tokens.color.slate100}`,
|
|
41
|
-
backgroundColor: tokens.color.slate50,
|
|
86
|
+
backgroundColor: variant === 'glass' ? 'rgba(248,250,252,0.5)' : tokens.color.slate50,
|
|
42
87
|
};
|
|
43
|
-
return (_jsxs("div", { style: containerStyle, className: `ds-card ${className}`,
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
88
|
+
return (_jsxs("div", { style: containerStyle, className: `ds-card ds-card--${variant} ${className}`, onMouseEnter: () => { if (hoverable)
|
|
89
|
+
setHovered(true); }, onMouseLeave: () => { if (hoverable)
|
|
90
|
+
setHovered(false); }, ...props, children: [accentColor && (_jsx("div", { style: {
|
|
91
|
+
height: '3px',
|
|
92
|
+
background: accentColor,
|
|
93
|
+
flexShrink: 0,
|
|
94
|
+
} })), loading && (_jsx("div", { style: {
|
|
95
|
+
position: 'absolute',
|
|
96
|
+
inset: 0,
|
|
97
|
+
borderRadius: tokens.radius.xl,
|
|
98
|
+
background: 'rgba(255,255,255,0.6)',
|
|
99
|
+
backdropFilter: 'blur(2px)',
|
|
100
|
+
display: 'flex',
|
|
101
|
+
alignItems: 'center',
|
|
102
|
+
justifyContent: 'center',
|
|
103
|
+
zIndex: 10,
|
|
104
|
+
}, children: _jsx("div", { style: {
|
|
105
|
+
width: '28px',
|
|
106
|
+
height: '28px',
|
|
107
|
+
border: `3px solid ${tokens.color.slate200}`,
|
|
108
|
+
borderTopColor: tokens.color.primary,
|
|
109
|
+
borderRadius: '50%',
|
|
110
|
+
animation: 'ds-spin 0.7s linear infinite',
|
|
111
|
+
} }) })), (title || subtitle || avatar || headerAction) && (_jsxs("div", { style: headerStyle, children: [avatar && _jsx("div", { style: { flexShrink: 0 }, children: avatar }), _jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [title && (_jsx("h3", { style: {
|
|
54
112
|
margin: 0,
|
|
55
113
|
fontSize: tokens.font.sm,
|
|
56
114
|
fontWeight: tokens.font.weightBold,
|
|
57
115
|
color: tokens.color.slate800,
|
|
58
|
-
letterSpacing: '-0.
|
|
116
|
+
letterSpacing: '-0.015em',
|
|
117
|
+
lineHeight: 1.3,
|
|
118
|
+
whiteSpace: 'nowrap',
|
|
119
|
+
overflow: 'hidden',
|
|
120
|
+
textOverflow: 'ellipsis',
|
|
59
121
|
}, children: title })), subtitle && (_jsx("p", { style: {
|
|
60
|
-
margin: `${tokens.spacing[
|
|
122
|
+
margin: `${tokens.spacing[1]} 0 0 0`,
|
|
61
123
|
fontSize: '11px',
|
|
62
124
|
color: tokens.color.textMuted,
|
|
63
|
-
fontWeight: tokens.font.weightMedium
|
|
64
|
-
|
|
125
|
+
fontWeight: tokens.font.weightMedium,
|
|
126
|
+
lineHeight: 1.4,
|
|
127
|
+
}, children: subtitle }))] }), headerAction && (_jsx("div", { style: { flexShrink: 0, marginLeft: tokens.spacing[2] }, children: headerAction }))] })), _jsx("div", { style: bodyStyle, children: children }), footer && (_jsx("div", { style: footerStyle, children: footer }))] }));
|
|
65
128
|
};
|
|
66
129
|
//# sourceMappingURL=Card.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Card.js","sourceRoot":"","sources":["../../../src/components/Card.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"Card.js","sourceRoot":"","sources":["../../../src/components/Card.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,14 @@ import React from 'react';
|
|
|
2
2
|
export interface ConfirmModalProps {
|
|
3
3
|
isOpen: boolean;
|
|
4
4
|
title: string;
|
|
5
|
-
message:
|
|
5
|
+
message: React.ReactNode;
|
|
6
6
|
confirmText?: string;
|
|
7
7
|
cancelText?: string;
|
|
8
8
|
onConfirm: () => void;
|
|
9
9
|
onCancel: () => void;
|
|
10
|
-
variant?: 'danger' | 'primary';
|
|
10
|
+
variant?: 'danger' | 'primary' | 'warning';
|
|
11
|
+
icon?: React.ReactNode;
|
|
12
|
+
size?: 'sm' | 'md' | 'lg';
|
|
13
|
+
loading?: boolean;
|
|
11
14
|
}
|
|
12
15
|
export declare const ConfirmModal: React.FC<ConfirmModalProps>;
|