@phpsoftbox/react-softbox 1.16.1 → 2.1.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/README.md +18 -0
- package/dist/components/Alert/Alert.d.ts +1 -1
- package/dist/components/Alert/Alert.js +14 -4
- package/dist/components/Alert/Alert.js.map +1 -1
- package/dist/components/Alert/Alert.module.css +65 -33
- package/dist/components/Badge/Badge.d.ts +4 -1
- package/dist/components/Badge/Badge.js +27 -3
- package/dist/components/Badge/Badge.js.map +1 -1
- package/dist/components/Badge/Badge.module.css +89 -32
- package/dist/components/Button/Button.d.ts +11 -2
- package/dist/components/Button/Button.js +35 -5
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/Card/Card.d.ts +3 -1
- package/dist/components/Card/Card.js +9 -3
- package/dist/components/Card/Card.js.map +1 -1
- package/dist/components/Card/Card.module.css +8 -2
- package/dist/components/CollapseButton/CollapseButton.module.css +1 -1
- package/dist/components/Drawer/Drawer.module.css +1 -0
- package/dist/components/FileUploader/FileUploader.module.css +6 -6
- package/dist/components/Image/Image.module.css +2 -2
- package/dist/components/Input/Checkbox/Checkbox.module.css +2 -2
- package/dist/components/Input/ErrorTooltip/ErrorTooltip.module.css +1 -1
- package/dist/components/Input/FloatLabel/FloatLabel.module.css +2 -2
- package/dist/components/Input/FormField/FormField.module.css +2 -2
- package/dist/components/Input/Hint/Hint.module.css +1 -1
- package/dist/components/Input/Input.d.ts +4 -4
- package/dist/components/Input/Input.module.css +1 -1
- package/dist/components/Input/InputGroup.module.css +8 -8
- package/dist/components/Input/Radio/Radio.module.css +2 -2
- package/dist/components/Input/Select/Select.module.css +12 -12
- package/dist/components/Input/Switch/Switch.module.css +2 -2
- package/dist/components/Input/Textarea/Textarea.module.css +1 -1
- package/dist/components/MarkdownEditor/MarkdownEditor.module.css +51 -17
- package/dist/components/Menu/Dropdown.d.ts +2 -0
- package/dist/components/Menu/Dropdown.js +1 -0
- package/dist/components/Menu/Dropdown.js.map +1 -1
- package/dist/components/Menu/Menu.d.ts +2 -0
- package/dist/components/Menu/Menu.js +5 -5
- package/dist/components/Menu/Menu.js.map +1 -1
- package/dist/components/Menu/Menu.module.css +3 -3
- package/dist/components/Modal/Modal.module.css +1 -1
- package/dist/components/Notifier/Notifier.js +8 -2
- package/dist/components/Notifier/Notifier.js.map +1 -1
- package/dist/components/Notifier/Notifier.module.css +38 -16
- package/dist/components/Pagination/Pagination.module.css +1 -1
- package/dist/components/Progress/Progress.d.ts +2 -1
- package/dist/components/Progress/Progress.js +9 -3
- package/dist/components/Progress/Progress.js.map +1 -1
- package/dist/components/Progress/Progress.module.css +24 -8
- package/dist/components/Table/Table.js +6 -1
- package/dist/components/Table/Table.js.map +1 -1
- package/dist/components/Table/Table.module.css +24 -8
- package/dist/components/Tooltip/Tooltip.d.ts +2 -1
- package/dist/components/Tooltip/Tooltip.js +4 -1
- package/dist/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.module.css +1 -1
- package/dist/components/Typography/Heading.d.ts +2 -1
- package/dist/components/Typography/Heading.js +9 -3
- package/dist/components/Typography/Heading.js.map +1 -1
- package/dist/components/Typography/Text.d.ts +2 -1
- package/dist/components/Typography/Text.js +9 -3
- package/dist/components/Typography/Text.js.map +1 -1
- package/dist/components/Typography/Typography.module.css +22 -6
- package/dist/components/Wizard/Wizard.d.ts +2 -0
- package/dist/components/Wizard/Wizard.js +17 -5
- package/dist/components/Wizard/Wizard.js.map +1 -1
- package/dist/components/Wizard/Wizard.module.css +54 -40
- package/dist/foundations/buttons.css +269 -55
- package/dist/foundations/layout.css +2 -2
- package/dist/foundations/tabs.css +3 -3
- package/dist/foundations/tokens.css +304 -74
- package/dist/foundations/utilities.css +738 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +3 -1
- package/dist/utils/uiVariant.d.ts +16 -0
- package/dist/utils/uiVariant.js +106 -0
- package/dist/utils/uiVariant.js.map +1 -0
- package/docs/card.md +2 -1
- package/docs/feedback.md +11 -1
- package/docs/layout.md +42 -2
- package/docs/theme.md +71 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -106,6 +106,19 @@ yarn build
|
|
|
106
106
|
<Button variant="info" appearance="outline">Info</Button>
|
|
107
107
|
<Button variant="danger" appearance="ghost">Danger</Button>
|
|
108
108
|
<Button variant="primary" size="sm">Small</Button>
|
|
109
|
+
|
|
110
|
+
<Button.Group aria-label="Режим просмотра">
|
|
111
|
+
<Button appearance="outline">День</Button>
|
|
112
|
+
<Button appearance="outline">Неделя</Button>
|
|
113
|
+
<Button appearance="outline">Месяц</Button>
|
|
114
|
+
</Button.Group>
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Custom variants задаются через `--variant-{name}-*` токены:
|
|
118
|
+
|
|
119
|
+
```tsx
|
|
120
|
+
<Button variant="brand">Brand</Button>
|
|
121
|
+
<Badge variant="brand">Brand</Badge>
|
|
109
122
|
```
|
|
110
123
|
|
|
111
124
|
### Input / FloatLabel
|
|
@@ -263,10 +276,15 @@ const collapsible = [
|
|
|
263
276
|
```tsx
|
|
264
277
|
<Badge>Default</Badge>
|
|
265
278
|
<Badge variant="primary">Primary</Badge>
|
|
279
|
+
<Badge variant="secondary">Secondary</Badge>
|
|
266
280
|
<Badge variant="info">Info</Badge>
|
|
267
281
|
<Badge variant="success">Success</Badge>
|
|
268
282
|
<Badge variant="warning">Warning</Badge>
|
|
269
283
|
<Badge variant="danger">Danger</Badge>
|
|
284
|
+
<Badge variant="brand">Brand</Badge>
|
|
285
|
+
<Badge variant="warning" className="rounded-circle size-6 p-0 f-2">3</Badge>
|
|
286
|
+
<Badge variant="info" className="border border-info text-uppercase f-2">helper styled</Badge>
|
|
287
|
+
<Badge variant="danger" dot aria-label="Ошибка" className="p-2" />
|
|
270
288
|
```
|
|
271
289
|
|
|
272
290
|
### Typography
|
|
@@ -11,5 +11,5 @@ type Props = React.HTMLAttributes<HTMLDivElement> & {
|
|
|
11
11
|
actions?: React.ReactNode;
|
|
12
12
|
onClose?: () => void;
|
|
13
13
|
};
|
|
14
|
-
export default function Alert({ variant, title, icon, iconPlacement, iconBgFilled, actions, onClose, className, children, ...props }: Props): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export default function Alert({ variant, title, icon, iconPlacement, iconBgFilled, actions, onClose, className, style, children, ...props }: Props): import("react/jsx-runtime").JSX.Element;
|
|
15
15
|
export {};
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import styles from './Alert.module.css';
|
|
3
|
+
import { buildAlertVariantStyle, getBuiltinUiVariantClass, isBuiltinUiVariant, mergeStyles, } from '../../utils/uiVariant';
|
|
3
4
|
const classMap = {
|
|
4
5
|
default: styles.default,
|
|
5
6
|
primary: styles.primary,
|
|
7
|
+
secondary: styles.secondary,
|
|
6
8
|
info: styles.info,
|
|
7
9
|
success: styles.success,
|
|
8
10
|
warning: styles.warning,
|
|
9
11
|
danger: styles.danger,
|
|
12
|
+
dark: styles.dark,
|
|
13
|
+
light: styles.light,
|
|
14
|
+
neutral: styles.neutral,
|
|
10
15
|
};
|
|
11
16
|
const iconPlacementClassMap = {
|
|
12
17
|
top: styles.iconTop,
|
|
@@ -16,15 +21,20 @@ const iconPlacementClassMap = {
|
|
|
16
21
|
const defaultIcons = {
|
|
17
22
|
default: (_jsxs("svg", { viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", strokeWidth: "1.8", "aria-hidden": "true", children: [_jsx("circle", { cx: "10", cy: "10", r: "7.2" }), _jsx("path", { d: "M10 8v4", strokeLinecap: "round" }), _jsx("circle", { cx: "10", cy: "6", r: "0.8", fill: "currentColor", stroke: "none" })] })),
|
|
18
23
|
primary: (_jsxs("svg", { viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", strokeWidth: "1.8", "aria-hidden": "true", children: [_jsx("circle", { cx: "10", cy: "10", r: "7.2" }), _jsx("path", { d: "M10 8v4", strokeLinecap: "round" }), _jsx("circle", { cx: "10", cy: "6", r: "0.8", fill: "currentColor", stroke: "none" })] })),
|
|
24
|
+
secondary: (_jsxs("svg", { viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", strokeWidth: "1.8", "aria-hidden": "true", children: [_jsx("circle", { cx: "10", cy: "10", r: "7.2" }), _jsx("path", { d: "M10 8v4", strokeLinecap: "round" }), _jsx("circle", { cx: "10", cy: "6", r: "0.8", fill: "currentColor", stroke: "none" })] })),
|
|
19
25
|
info: (_jsxs("svg", { viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", strokeWidth: "1.8", "aria-hidden": "true", children: [_jsx("circle", { cx: "10", cy: "10", r: "7.2" }), _jsx("path", { d: "M10 8v4", strokeLinecap: "round" }), _jsx("circle", { cx: "10", cy: "6", r: "0.8", fill: "currentColor", stroke: "none" })] })),
|
|
20
26
|
success: (_jsxs("svg", { viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", strokeWidth: "1.8", "aria-hidden": "true", children: [_jsx("circle", { cx: "10", cy: "10", r: "7.2" }), _jsx("path", { d: "m6.8 10 2.1 2.2 4.3-4.4", strokeLinecap: "round", strokeLinejoin: "round" })] })),
|
|
21
27
|
warning: (_jsxs("svg", { viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", strokeWidth: "1.8", "aria-hidden": "true", children: [_jsx("path", { d: "M10 3.4 17 16.2a1 1 0 0 1-.88 1.4H3.88A1 1 0 0 1 3 16.2L10 3.4Z", strokeLinejoin: "round" }), _jsx("path", { d: "M10 8v4", strokeLinecap: "round" }), _jsx("circle", { cx: "10", cy: "14.4", r: "0.8", fill: "currentColor", stroke: "none" })] })),
|
|
22
28
|
danger: (_jsxs("svg", { viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", strokeWidth: "1.8", "aria-hidden": "true", children: [_jsx("circle", { cx: "10", cy: "10", r: "7.2" }), _jsx("path", { d: "m7.5 7.5 5 5m0-5-5 5", strokeLinecap: "round" })] })),
|
|
29
|
+
dark: (_jsxs("svg", { viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", strokeWidth: "1.8", "aria-hidden": "true", children: [_jsx("circle", { cx: "10", cy: "10", r: "7.2" }), _jsx("path", { d: "M10 8v4", strokeLinecap: "round" }), _jsx("circle", { cx: "10", cy: "6", r: "0.8", fill: "currentColor", stroke: "none" })] })),
|
|
30
|
+
light: (_jsxs("svg", { viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", strokeWidth: "1.8", "aria-hidden": "true", children: [_jsx("circle", { cx: "10", cy: "10", r: "7.2" }), _jsx("path", { d: "M10 8v4", strokeLinecap: "round" }), _jsx("circle", { cx: "10", cy: "6", r: "0.8", fill: "currentColor", stroke: "none" })] })),
|
|
31
|
+
neutral: (_jsxs("svg", { viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", strokeWidth: "1.8", "aria-hidden": "true", children: [_jsx("circle", { cx: "10", cy: "10", r: "7.2" }), _jsx("path", { d: "M10 8v4", strokeLinecap: "round" }), _jsx("circle", { cx: "10", cy: "6", r: "0.8", fill: "currentColor", stroke: "none" })] })),
|
|
23
32
|
};
|
|
24
|
-
export default function Alert({ variant = 'info', title, icon, iconPlacement = 'top', iconBgFilled = false, actions, onClose, className, children, ...props }) {
|
|
33
|
+
export default function Alert({ variant = 'info', title, icon, iconPlacement = 'top', iconBgFilled = false, actions, onClose, className, style, children, ...props }) {
|
|
34
|
+
const variantStyle = isBuiltinUiVariant(variant) ? undefined : buildAlertVariantStyle(variant);
|
|
25
35
|
const classes = [
|
|
26
36
|
styles.alert,
|
|
27
|
-
classMap
|
|
37
|
+
getBuiltinUiVariantClass(classMap, variant),
|
|
28
38
|
iconBgFilled ? styles.alertIconBgFilled : null,
|
|
29
39
|
className,
|
|
30
40
|
].filter(Boolean).join(' ');
|
|
@@ -32,7 +42,7 @@ export default function Alert({ variant = 'info', title, icon, iconPlacement = '
|
|
|
32
42
|
styles.icon,
|
|
33
43
|
iconPlacementClassMap[iconPlacement],
|
|
34
44
|
].filter(Boolean).join(' ');
|
|
35
|
-
const resolvedIcon = icon === undefined ? defaultIcons[variant] : icon;
|
|
36
|
-
return (_jsxs("div", { className: classes, role: "status", ...props, children: [resolvedIcon !== null ? (_jsx("div", { className: iconClasses, "data-alert-icon-placement": iconPlacement, children: resolvedIcon })) : null, _jsxs("div", { className: styles.main, children: [title ? _jsx("div", { className: styles.title, children: title }) : null, children ? _jsx("div", { className: styles.message, children: children }) : null, actions ? _jsx("div", { className: styles.actions, children: actions }) : null] }), onClose ? (_jsx("button", { type: "button", className: styles.close, onClick: onClose, "aria-label": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C", children: "\u00D7" })) : null] }));
|
|
45
|
+
const resolvedIcon = icon === undefined ? defaultIcons[isBuiltinUiVariant(variant) ? variant : 'default'] : icon;
|
|
46
|
+
return (_jsxs("div", { className: classes, role: "status", style: mergeStyles(variantStyle, style), ...props, children: [resolvedIcon !== null ? (_jsx("div", { className: iconClasses, "data-alert-icon-placement": iconPlacement, children: resolvedIcon })) : null, _jsxs("div", { className: styles.main, children: [title ? _jsx("div", { className: styles.title, children: title }) : null, children ? _jsx("div", { className: styles.message, children: children }) : null, actions ? _jsx("div", { className: styles.actions, children: actions }) : null] }), onClose ? (_jsx("button", { type: "button", className: styles.close, onClick: onClose, "aria-label": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C", children: "\u00D7" })) : null] }));
|
|
37
47
|
}
|
|
38
48
|
//# sourceMappingURL=Alert.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Alert.js","sourceRoot":"","sources":["../../../src/components/Alert/Alert.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"Alert.js","sourceRoot":"","sources":["../../../src/components/Alert/Alert.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
gap: var(--spacing-4);
|
|
4
4
|
align-items: flex-start;
|
|
5
5
|
padding: var(--spacing-4);
|
|
6
|
-
border-radius: var(--radius-
|
|
6
|
+
border-radius: var(--alert-border-radius, var(--radius-default));
|
|
7
7
|
border: 1px solid transparent;
|
|
8
8
|
background: var(--surface-panel-soft);
|
|
9
9
|
color: var(--color-text);
|
|
@@ -34,8 +34,8 @@
|
|
|
34
34
|
margin-top: 0;
|
|
35
35
|
background: var(--alert-icon-bg, transparent);
|
|
36
36
|
border-right: 1px solid var(--alert-icon-bg-border, transparent);
|
|
37
|
-
border-top-left-radius: var(--radius-
|
|
38
|
-
border-bottom-left-radius: var(--radius-
|
|
37
|
+
border-top-left-radius: var(--alert-border-radius, var(--radius-default));
|
|
38
|
+
border-bottom-left-radius: var(--alert-border-radius, var(--radius-default));
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
.alertIconBgFilled .iconTop,
|
|
@@ -123,49 +123,81 @@
|
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
.default {
|
|
126
|
-
border-color:
|
|
127
|
-
box-shadow: 0 0 0 1px
|
|
128
|
-
--alert-icon-color:
|
|
129
|
-
--alert-icon-bg:
|
|
130
|
-
--alert-icon-bg-border:
|
|
126
|
+
border-color: var(--variant-default-border);
|
|
127
|
+
box-shadow: 0 0 0 1px color-mix(in srgb, var(--variant-default-bg) 20%, transparent);
|
|
128
|
+
--alert-icon-color: var(--variant-default-accent);
|
|
129
|
+
--alert-icon-bg: var(--variant-default-soft);
|
|
130
|
+
--alert-icon-bg-border: color-mix(in srgb, var(--variant-default-border) 55%, transparent);
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
.primary {
|
|
134
|
-
border-color:
|
|
135
|
-
box-shadow: 0 0 0 1px
|
|
136
|
-
--alert-icon-color:
|
|
137
|
-
--alert-icon-bg:
|
|
138
|
-
--alert-icon-bg-border:
|
|
134
|
+
border-color: var(--variant-primary-border);
|
|
135
|
+
box-shadow: 0 0 0 1px color-mix(in srgb, var(--variant-primary-bg) 20%, transparent);
|
|
136
|
+
--alert-icon-color: var(--variant-primary-bg);
|
|
137
|
+
--alert-icon-bg: var(--variant-primary-soft);
|
|
138
|
+
--alert-icon-bg-border: color-mix(in srgb, var(--variant-primary-border) 55%, transparent);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.secondary {
|
|
142
|
+
border-color: var(--variant-secondary-border);
|
|
143
|
+
box-shadow: 0 0 0 1px color-mix(in srgb, var(--variant-secondary-bg) 20%, transparent);
|
|
144
|
+
--alert-icon-color: var(--variant-secondary-bg);
|
|
145
|
+
--alert-icon-bg: var(--variant-secondary-soft);
|
|
146
|
+
--alert-icon-bg-border: color-mix(in srgb, var(--variant-secondary-border) 55%, transparent);
|
|
139
147
|
}
|
|
140
148
|
|
|
141
149
|
.info {
|
|
142
|
-
border-color:
|
|
143
|
-
box-shadow: 0 0 0 1px
|
|
144
|
-
--alert-icon-color:
|
|
145
|
-
--alert-icon-bg:
|
|
146
|
-
--alert-icon-bg-border:
|
|
150
|
+
border-color: var(--variant-info-border);
|
|
151
|
+
box-shadow: 0 0 0 1px color-mix(in srgb, var(--variant-info-bg) 20%, transparent);
|
|
152
|
+
--alert-icon-color: var(--variant-info-bg);
|
|
153
|
+
--alert-icon-bg: var(--variant-info-soft);
|
|
154
|
+
--alert-icon-bg-border: color-mix(in srgb, var(--variant-info-border) 55%, transparent);
|
|
147
155
|
}
|
|
148
156
|
|
|
149
157
|
.success {
|
|
150
|
-
border-color:
|
|
151
|
-
box-shadow: 0 0 0 1px
|
|
152
|
-
--alert-icon-color:
|
|
153
|
-
--alert-icon-bg:
|
|
154
|
-
--alert-icon-bg-border:
|
|
158
|
+
border-color: var(--variant-success-border);
|
|
159
|
+
box-shadow: 0 0 0 1px color-mix(in srgb, var(--variant-success-bg) 20%, transparent);
|
|
160
|
+
--alert-icon-color: var(--variant-success-bg);
|
|
161
|
+
--alert-icon-bg: var(--variant-success-soft);
|
|
162
|
+
--alert-icon-bg-border: color-mix(in srgb, var(--variant-success-border) 55%, transparent);
|
|
155
163
|
}
|
|
156
164
|
|
|
157
165
|
.warning {
|
|
158
|
-
border-color:
|
|
159
|
-
box-shadow: 0 0 0 1px
|
|
160
|
-
--alert-icon-color:
|
|
161
|
-
--alert-icon-bg:
|
|
162
|
-
--alert-icon-bg-border:
|
|
166
|
+
border-color: var(--variant-warning-border);
|
|
167
|
+
box-shadow: 0 0 0 1px color-mix(in srgb, var(--variant-warning-bg) 20%, transparent);
|
|
168
|
+
--alert-icon-color: var(--variant-warning-bg);
|
|
169
|
+
--alert-icon-bg: var(--variant-warning-soft);
|
|
170
|
+
--alert-icon-bg-border: color-mix(in srgb, var(--variant-warning-border) 55%, transparent);
|
|
163
171
|
}
|
|
164
172
|
|
|
165
173
|
.danger {
|
|
166
|
-
border-color:
|
|
167
|
-
box-shadow: 0 0 0 1px
|
|
168
|
-
--alert-icon-color:
|
|
169
|
-
--alert-icon-bg:
|
|
170
|
-
--alert-icon-bg-border:
|
|
174
|
+
border-color: var(--variant-danger-border);
|
|
175
|
+
box-shadow: 0 0 0 1px color-mix(in srgb, var(--variant-danger-bg) 20%, transparent);
|
|
176
|
+
--alert-icon-color: var(--variant-danger-bg);
|
|
177
|
+
--alert-icon-bg: var(--variant-danger-soft);
|
|
178
|
+
--alert-icon-bg-border: color-mix(in srgb, var(--variant-danger-border) 55%, transparent);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.dark {
|
|
182
|
+
border-color: var(--variant-dark-border);
|
|
183
|
+
box-shadow: 0 0 0 1px color-mix(in srgb, var(--variant-dark-bg) 20%, transparent);
|
|
184
|
+
--alert-icon-color: var(--variant-dark-text);
|
|
185
|
+
--alert-icon-bg: color-mix(in srgb, var(--variant-dark-bg) 75%, transparent);
|
|
186
|
+
--alert-icon-bg-border: var(--variant-dark-border);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.light {
|
|
190
|
+
border-color: var(--variant-light-border);
|
|
191
|
+
box-shadow: 0 0 0 1px color-mix(in srgb, var(--variant-light-bg) 30%, transparent);
|
|
192
|
+
--alert-icon-color: var(--variant-light-text);
|
|
193
|
+
--alert-icon-bg: color-mix(in srgb, var(--variant-light-bg) 80%, transparent);
|
|
194
|
+
--alert-icon-bg-border: var(--variant-light-border);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.neutral {
|
|
198
|
+
border-color: var(--variant-neutral-border);
|
|
199
|
+
box-shadow: 0 0 0 1px color-mix(in srgb, var(--variant-neutral-bg) 20%, transparent);
|
|
200
|
+
--alert-icon-color: var(--variant-neutral-bg);
|
|
201
|
+
--alert-icon-bg: var(--variant-neutral-soft);
|
|
202
|
+
--alert-icon-bg-border: color-mix(in srgb, var(--variant-neutral-border) 55%, transparent);
|
|
171
203
|
}
|
|
@@ -2,9 +2,12 @@ import React from 'react';
|
|
|
2
2
|
import type { UiVariant } from '../../types';
|
|
3
3
|
type BadgeVariant = UiVariant;
|
|
4
4
|
type BadgeSize = 'sm' | 'md' | 'lg';
|
|
5
|
+
type BadgeShape = 'rounded' | 'pill' | 'circle';
|
|
5
6
|
type Props = React.HTMLAttributes<HTMLSpanElement> & {
|
|
6
7
|
variant?: BadgeVariant;
|
|
7
8
|
size?: BadgeSize;
|
|
9
|
+
shape?: BadgeShape;
|
|
10
|
+
dot?: boolean;
|
|
8
11
|
};
|
|
9
|
-
export default function Badge({ variant, size, className, ...props }: Props): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export default function Badge({ variant, size, shape, dot, className, style, children, ...props }: Props): import("react/jsx-runtime").JSX.Element;
|
|
10
13
|
export {};
|
|
@@ -1,20 +1,44 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import styles from './Badge.module.css';
|
|
3
|
+
import { buildBadgeVariantStyle, getBuiltinUiVariantClass, isBuiltinUiVariant, mergeStyles, } from '../../utils/uiVariant';
|
|
3
4
|
const classMap = {
|
|
4
5
|
default: styles.default,
|
|
5
6
|
primary: styles.primary,
|
|
7
|
+
secondary: styles.secondary,
|
|
6
8
|
info: styles.info,
|
|
7
9
|
success: styles.success,
|
|
8
10
|
warning: styles.warning,
|
|
9
11
|
danger: styles.danger,
|
|
12
|
+
dark: styles.dark,
|
|
13
|
+
light: styles.light,
|
|
14
|
+
neutral: styles.neutral,
|
|
10
15
|
};
|
|
11
16
|
const sizeMap = {
|
|
12
17
|
sm: styles.sizeSm,
|
|
13
18
|
md: styles.sizeMd,
|
|
14
19
|
lg: styles.sizeLg,
|
|
15
20
|
};
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
21
|
+
const shapeMap = {
|
|
22
|
+
rounded: styles.shapeRounded,
|
|
23
|
+
pill: styles.shapePill,
|
|
24
|
+
circle: styles.shapeCircle,
|
|
25
|
+
};
|
|
26
|
+
const isEmptyChildren = (children) => (children === null
|
|
27
|
+
|| children === undefined
|
|
28
|
+
|| children === ''
|
|
29
|
+
|| (Array.isArray(children) && children.length === 0));
|
|
30
|
+
export default function Badge({ variant = 'default', size = 'md', shape = 'rounded', dot = false, className, style, children, ...props }) {
|
|
31
|
+
const isDot = dot || isEmptyChildren(children);
|
|
32
|
+
const resolvedShape = isDot ? 'circle' : shape;
|
|
33
|
+
const variantStyle = isBuiltinUiVariant(variant) ? undefined : buildBadgeVariantStyle(variant);
|
|
34
|
+
const classes = [
|
|
35
|
+
styles.badge,
|
|
36
|
+
getBuiltinUiVariantClass(classMap, variant),
|
|
37
|
+
sizeMap[size],
|
|
38
|
+
shapeMap[resolvedShape],
|
|
39
|
+
isDot ? styles.dot : null,
|
|
40
|
+
className,
|
|
41
|
+
].filter(Boolean).join(' ');
|
|
42
|
+
return _jsx("span", { className: classes, style: mergeStyles(variantStyle, style), ...props, children: isDot ? null : children });
|
|
19
43
|
}
|
|
20
44
|
//# sourceMappingURL=Badge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Badge.js","sourceRoot":"","sources":["../../../src/components/Badge/Badge.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"Badge.js","sourceRoot":"","sources":["../../../src/components/Badge/Badge.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAa/B,MAAM,QAAQ,GAAqC;IACjD,OAAO,EAAE,MAAM,CAAC,OAAO;IACvB,OAAO,EAAE,MAAM,CAAC,OAAO;IACvB,SAAS,EAAE,MAAM,CAAC,SAAS;IAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;IACjB,OAAO,EAAE,MAAM,CAAC,OAAO;IACvB,OAAO,EAAE,MAAM,CAAC,OAAO;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC,IAAI;IACjB,KAAK,EAAE,MAAM,CAAC,KAAK;IACnB,OAAO,EAAE,MAAM,CAAC,OAAO;CACxB,CAAC;AAEF,MAAM,OAAO,GAA8B;IACzC,EAAE,EAAE,MAAM,CAAC,MAAM;IACjB,EAAE,EAAE,MAAM,CAAC,MAAM;IACjB,EAAE,EAAE,MAAM,CAAC,MAAM;CAClB,CAAC;AAEF,MAAM,QAAQ,GAA+B;IAC3C,OAAO,EAAE,MAAM,CAAC,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC,SAAS;IACtB,MAAM,EAAE,MAAM,CAAC,WAAW;CAC3B,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,QAAyB,EAAE,EAAE,CAAC,CACrD,QAAQ,KAAK,IAAI;OACd,QAAQ,KAAK,SAAS;OACtB,QAAQ,KAAK,EAAE;OACf,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CACtD,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAC5B,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,IAAI,EACX,KAAK,GAAG,SAAS,EACjB,GAAG,GAAG,KAAK,EACX,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACF;IACN,MAAM,KAAK,GAAG,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/C,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC/F,MAAM,OAAO,GAAG;QACd,MAAM,CAAC,KAAK;QACZ,wBAAwB,CAAC,QAAQ,EAAE,OAAO,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC;QACb,QAAQ,CAAC,aAAa,CAAC;QACvB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;QACzB,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,eAAM,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC,KAAM,KAAK,YAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAQ,CAAC;AACxH,CAAC"}
|
|
@@ -1,65 +1,122 @@
|
|
|
1
1
|
.badge {
|
|
2
2
|
display: inline-flex;
|
|
3
3
|
align-items: center;
|
|
4
|
+
justify-content: center;
|
|
4
5
|
gap: 6px;
|
|
5
|
-
padding:
|
|
6
|
-
border-radius:
|
|
7
|
-
font-size: 12px;
|
|
6
|
+
padding: var(--badge-padding-y, 0.25rem) var(--badge-padding-x, 0.5rem);
|
|
7
|
+
border-radius: var(--badge-border-radius, var(--radius-default));
|
|
8
8
|
line-height: 1;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
border: 0 solid var(--ui-border-color, var(--badge-border, transparent));
|
|
10
|
+
background: var(--badge-bg, var(--variant-default-bg));
|
|
11
|
+
color: var(--badge-color, var(--variant-default-text));
|
|
12
|
+
--ui-border-color: var(--badge-border, var(--variant-default-border));
|
|
13
|
+
min-width: 0;
|
|
14
|
+
box-sizing: border-box;
|
|
12
15
|
}
|
|
13
16
|
|
|
14
17
|
.sizeSm {
|
|
15
|
-
padding:
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
--badge-padding-y: 0.125rem;
|
|
19
|
+
--badge-padding-x: 0.375rem;
|
|
20
|
+
--badge-circle-size: 1.125rem;
|
|
21
|
+
--badge-dot-padding: 0.25rem;
|
|
18
22
|
}
|
|
19
23
|
|
|
20
24
|
.sizeMd {
|
|
21
|
-
padding:
|
|
22
|
-
|
|
25
|
+
--badge-padding-y: 0.25rem;
|
|
26
|
+
--badge-padding-x: 0.5rem;
|
|
27
|
+
--badge-circle-size: 1.375rem;
|
|
28
|
+
--badge-dot-padding: 0.3125rem;
|
|
23
29
|
}
|
|
24
30
|
|
|
25
31
|
.sizeLg {
|
|
26
|
-
padding:
|
|
27
|
-
|
|
28
|
-
|
|
32
|
+
--badge-padding-y: 0.375rem;
|
|
33
|
+
--badge-padding-x: 0.75rem;
|
|
34
|
+
--badge-circle-size: 1.625rem;
|
|
35
|
+
--badge-dot-padding: 0.375rem;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.shapeRounded {
|
|
39
|
+
border-radius: var(--badge-border-radius, var(--radius-default));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.shapePill {
|
|
43
|
+
border-radius: var(--badge-pill-border-radius, var(--radius-pill));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.shapeCircle {
|
|
47
|
+
width: var(--badge-circle-size, 1.375rem);
|
|
48
|
+
min-width: var(--badge-circle-size, 1.375rem);
|
|
49
|
+
height: var(--badge-circle-size, 1.375rem);
|
|
50
|
+
padding: 0;
|
|
51
|
+
border-radius: var(--badge-circle-border-radius, var(--radius-circle));
|
|
52
|
+
overflow: hidden;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.dot {
|
|
56
|
+
width: 0;
|
|
57
|
+
min-width: 0;
|
|
58
|
+
height: 0;
|
|
59
|
+
padding: var(--badge-dot-padding, 0.3125rem);
|
|
60
|
+
border-radius: var(--badge-circle-border-radius, var(--radius-circle));
|
|
61
|
+
flex: 0 0 auto;
|
|
29
62
|
}
|
|
30
63
|
|
|
31
64
|
.default {
|
|
32
|
-
|
|
33
|
-
color: var(--
|
|
34
|
-
border
|
|
65
|
+
--badge-bg: var(--variant-default-bg);
|
|
66
|
+
--badge-color: var(--variant-default-text);
|
|
67
|
+
--badge-border: var(--variant-default-border);
|
|
35
68
|
}
|
|
36
69
|
|
|
37
70
|
.primary {
|
|
38
|
-
|
|
39
|
-
color: var(--
|
|
40
|
-
border
|
|
71
|
+
--badge-bg: var(--variant-primary-bg);
|
|
72
|
+
--badge-color: var(--variant-primary-text);
|
|
73
|
+
--badge-border: var(--variant-primary-border);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.secondary {
|
|
77
|
+
--badge-bg: var(--variant-secondary-bg);
|
|
78
|
+
--badge-color: var(--variant-secondary-text);
|
|
79
|
+
--badge-border: var(--variant-secondary-border);
|
|
41
80
|
}
|
|
42
81
|
|
|
43
82
|
.info {
|
|
44
|
-
|
|
45
|
-
color: var(--
|
|
46
|
-
border
|
|
83
|
+
--badge-bg: var(--variant-info-bg);
|
|
84
|
+
--badge-color: var(--variant-info-text);
|
|
85
|
+
--badge-border: var(--variant-info-border);
|
|
47
86
|
}
|
|
48
87
|
|
|
49
88
|
.success {
|
|
50
|
-
|
|
51
|
-
color: var(--
|
|
52
|
-
border
|
|
89
|
+
--badge-bg: var(--variant-success-bg);
|
|
90
|
+
--badge-color: var(--variant-success-text);
|
|
91
|
+
--badge-border: var(--variant-success-border);
|
|
53
92
|
}
|
|
54
93
|
|
|
55
94
|
.warning {
|
|
56
|
-
|
|
57
|
-
color: var(--
|
|
58
|
-
border
|
|
95
|
+
--badge-bg: var(--variant-warning-bg);
|
|
96
|
+
--badge-color: var(--variant-warning-text);
|
|
97
|
+
--badge-border: var(--variant-warning-border);
|
|
59
98
|
}
|
|
60
99
|
|
|
61
100
|
.danger {
|
|
62
|
-
|
|
63
|
-
color: var(--
|
|
64
|
-
border
|
|
101
|
+
--badge-bg: var(--variant-danger-bg);
|
|
102
|
+
--badge-color: var(--variant-danger-text);
|
|
103
|
+
--badge-border: var(--variant-danger-border);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.dark {
|
|
107
|
+
--badge-bg: var(--variant-dark-bg);
|
|
108
|
+
--badge-color: var(--variant-dark-text);
|
|
109
|
+
--badge-border: var(--variant-dark-border);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.light {
|
|
113
|
+
--badge-bg: var(--variant-light-bg);
|
|
114
|
+
--badge-color: var(--variant-light-text);
|
|
115
|
+
--badge-border: var(--variant-light-border);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.neutral {
|
|
119
|
+
--badge-bg: var(--variant-neutral-bg);
|
|
120
|
+
--badge-color: var(--variant-neutral-text);
|
|
121
|
+
--badge-border: var(--variant-neutral-border);
|
|
65
122
|
}
|
|
@@ -3,10 +3,19 @@ import type { UiVariant } from '../../types';
|
|
|
3
3
|
type ButtonVariant = UiVariant;
|
|
4
4
|
type ButtonAppearance = 'solid' | 'outline' | 'ghost';
|
|
5
5
|
type ButtonSize = 'sm' | 'md' | 'lg';
|
|
6
|
+
type ButtonGroupOrientation = 'horizontal' | 'vertical';
|
|
6
7
|
type Props = React.ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
7
8
|
variant?: ButtonVariant | 'ghost' | 'outline';
|
|
8
9
|
appearance?: ButtonAppearance;
|
|
9
10
|
size?: ButtonSize;
|
|
10
11
|
};
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
type ButtonGroupProps = React.HTMLAttributes<HTMLDivElement> & {
|
|
13
|
+
orientation?: ButtonGroupOrientation;
|
|
14
|
+
stretch?: boolean;
|
|
15
|
+
};
|
|
16
|
+
declare function ButtonBase({ variant, appearance, size, className, ...props }: Props): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
declare function ButtonGroup({ orientation, stretch, className, role, ...props }: ButtonGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
declare const Button: typeof ButtonBase & {
|
|
19
|
+
Group: typeof ButtonGroup;
|
|
20
|
+
};
|
|
21
|
+
export default Button;
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { buildButtonVariantStyle, getBuiltinUiVariantClass, isBuiltinUiVariant, mergeStyles, } from '../../utils/uiVariant';
|
|
2
3
|
const variantClass = {
|
|
3
4
|
default: 'btn-default',
|
|
4
5
|
primary: 'btn-primary',
|
|
6
|
+
secondary: 'btn-secondary',
|
|
5
7
|
info: 'btn-info',
|
|
6
8
|
success: 'btn-success',
|
|
7
9
|
warning: 'btn-warning',
|
|
8
10
|
danger: 'btn-danger',
|
|
11
|
+
dark: 'btn-dark',
|
|
12
|
+
light: 'btn-light',
|
|
13
|
+
neutral: 'btn-neutral',
|
|
9
14
|
};
|
|
10
15
|
const appearanceClass = {
|
|
11
16
|
solid: 'btn-solid',
|
|
@@ -18,19 +23,44 @@ const sizeClass = {
|
|
|
18
23
|
lg: 'btn-lg',
|
|
19
24
|
};
|
|
20
25
|
const normalizeVariant = (variant, appearance) => {
|
|
21
|
-
if (variant === 'ghost'
|
|
22
|
-
return { variant: 'primary', appearance:
|
|
26
|
+
if (variant === 'ghost') {
|
|
27
|
+
return { variant: 'primary', appearance: 'ghost' };
|
|
28
|
+
}
|
|
29
|
+
if (variant === 'outline') {
|
|
30
|
+
return { variant: 'primary', appearance: 'outline' };
|
|
23
31
|
}
|
|
24
32
|
return {
|
|
25
33
|
variant: variant ?? 'primary',
|
|
26
34
|
appearance: appearance ?? 'solid',
|
|
27
35
|
};
|
|
28
36
|
};
|
|
29
|
-
|
|
37
|
+
function ButtonBase({ variant, appearance, size = 'md', className, ...props }) {
|
|
30
38
|
const resolved = normalizeVariant(variant, appearance);
|
|
31
|
-
const
|
|
39
|
+
const variantStyle = isBuiltinUiVariant(resolved.variant) ? undefined : buildButtonVariantStyle(resolved.variant);
|
|
40
|
+
const classes = [
|
|
41
|
+
'btn',
|
|
42
|
+
getBuiltinUiVariantClass(variantClass, resolved.variant),
|
|
43
|
+
appearanceClass[resolved.appearance],
|
|
44
|
+
sizeClass[size],
|
|
45
|
+
className,
|
|
46
|
+
]
|
|
47
|
+
.filter(Boolean)
|
|
48
|
+
.join(' ');
|
|
49
|
+
return _jsx("button", { className: classes, ...props, style: mergeStyles(variantStyle, props.style) });
|
|
50
|
+
}
|
|
51
|
+
function ButtonGroup({ orientation = 'horizontal', stretch = false, className, role = 'group', ...props }) {
|
|
52
|
+
const classes = [
|
|
53
|
+
'btn-group',
|
|
54
|
+
orientation === 'vertical' ? 'btn-group-vertical' : 'btn-group-horizontal',
|
|
55
|
+
stretch ? 'btn-group-stretch' : null,
|
|
56
|
+
className,
|
|
57
|
+
]
|
|
32
58
|
.filter(Boolean)
|
|
33
59
|
.join(' ');
|
|
34
|
-
return _jsx("
|
|
60
|
+
return _jsx("div", { className: classes, role: role, ...props });
|
|
35
61
|
}
|
|
62
|
+
const Button = Object.assign(ButtonBase, {
|
|
63
|
+
Group: ButtonGroup,
|
|
64
|
+
});
|
|
65
|
+
export default Button;
|
|
36
66
|
//# sourceMappingURL=Button.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/components/Button/Button.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/components/Button/Button.tsx"],"names":[],"mappings":";AAEA,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,EAClB,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAkB/B,MAAM,YAAY,GAAqC;IACrD,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,aAAa;IACtB,SAAS,EAAE,eAAe;IAC1B,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,aAAa;IACtB,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,WAAW;IAClB,OAAO,EAAE,aAAa;CACvB,CAAC;AAEF,MAAM,eAAe,GAAqC;IACxD,KAAK,EAAE,WAAW;IAClB,OAAO,EAAE,aAAa;IACtB,KAAK,EAAE,WAAW;CACnB,CAAC;AAEF,MAAM,SAAS,GAA+B;IAC5C,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;CACb,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACvB,OAA6C,EAC7C,UAA6B,EAC6B,EAAE;IAC5D,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IACrD,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IACvD,CAAC;IAED,OAAO;QACL,OAAO,EAAE,OAAO,IAAI,SAAS;QAC7B,UAAU,EAAE,UAAU,IAAI,OAAO;KAClC,CAAC;AACJ,CAAC,CAAC;AAEF,SAAS,UAAU,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,EAAS;IAClF,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACvD,MAAM,YAAY,GAAG,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClH,MAAM,OAAO,GAAG;QACd,KAAK;QACL,wBAAwB,CAAC,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC;QACxD,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC;QACpC,SAAS,CAAC,IAAI,CAAC;QACf,SAAS;KACV;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,iBAAQ,SAAS,EAAE,OAAO,KAAM,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,GAAI,CAAC;AAClG,CAAC;AAED,SAAS,WAAW,CAAC,EACnB,WAAW,GAAG,YAAY,EAC1B,OAAO,GAAG,KAAK,EACf,SAAS,EACT,IAAI,GAAG,OAAO,EACd,GAAG,KAAK,EACS;IACjB,MAAM,OAAO,GAAG;QACd,WAAW;QACX,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,sBAAsB;QAC1E,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI;QACpC,SAAS;KACV;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,cAAK,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,KAAM,KAAK,GAAI,CAAC;AAC5D,CAAC;AAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE;IACvC,KAAK,EAAE,WAAW;CACnB,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
|
|
@@ -21,7 +21,9 @@ type CardToolbarProps = React.HTMLAttributes<HTMLDivElement> & {
|
|
|
21
21
|
align?: 'left' | 'right' | 'between';
|
|
22
22
|
buttonHideLabelOn?: 'never' | 'md';
|
|
23
23
|
};
|
|
24
|
-
type CardToolbarGroupProps = React.HTMLAttributes<HTMLDivElement
|
|
24
|
+
type CardToolbarGroupProps = React.HTMLAttributes<HTMLDivElement> & {
|
|
25
|
+
attached?: boolean;
|
|
26
|
+
};
|
|
25
27
|
type CardToolbarButtonBaseProps = Omit<React.ComponentProps<typeof Button>, 'children'> & {
|
|
26
28
|
icon?: React.ReactNode;
|
|
27
29
|
label?: React.ReactNode;
|
|
@@ -150,9 +150,15 @@ function CardToolbarButton({ icon, label, hideLabelOn, className, ...props }) {
|
|
|
150
150
|
.join(' ');
|
|
151
151
|
return (_jsxs(Button, { size: "sm", appearance: "outline", className: classes, ...props, children: [hasIcon ? _jsx("span", { className: styles.toolbarButtonIcon, children: icon }) : null, hasBoth ? _jsx("span", { className: styles.toolbarButtonSeparator, "aria-hidden": "true" }) : null, hasLabel ? (_jsx("span", { className: styles.toolbarButtonLabel, children: label })) : null] }));
|
|
152
152
|
}
|
|
153
|
-
function CardToolbarGroup({ className, ...props }) {
|
|
154
|
-
const classes = [
|
|
155
|
-
|
|
153
|
+
function CardToolbarGroup({ attached = false, className, role, ...props }) {
|
|
154
|
+
const classes = [
|
|
155
|
+
styles.toolbarGroup,
|
|
156
|
+
attached ? styles.toolbarGroupAttached : null,
|
|
157
|
+
attached ? 'btn-group btn-group-horizontal' : null,
|
|
158
|
+
className,
|
|
159
|
+
].filter(Boolean).join(' ');
|
|
160
|
+
const resolvedRole = role ?? (attached ? 'group' : undefined);
|
|
161
|
+
return _jsx("div", { className: classes, role: resolvedRole, ...props });
|
|
156
162
|
}
|
|
157
163
|
const CardToolbar = Object.assign(CardToolbarBase, {
|
|
158
164
|
Group: CardToolbarGroup,
|