@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.
Files changed (83) hide show
  1. package/README.md +18 -0
  2. package/dist/components/Alert/Alert.d.ts +1 -1
  3. package/dist/components/Alert/Alert.js +14 -4
  4. package/dist/components/Alert/Alert.js.map +1 -1
  5. package/dist/components/Alert/Alert.module.css +65 -33
  6. package/dist/components/Badge/Badge.d.ts +4 -1
  7. package/dist/components/Badge/Badge.js +27 -3
  8. package/dist/components/Badge/Badge.js.map +1 -1
  9. package/dist/components/Badge/Badge.module.css +89 -32
  10. package/dist/components/Button/Button.d.ts +11 -2
  11. package/dist/components/Button/Button.js +35 -5
  12. package/dist/components/Button/Button.js.map +1 -1
  13. package/dist/components/Card/Card.d.ts +3 -1
  14. package/dist/components/Card/Card.js +9 -3
  15. package/dist/components/Card/Card.js.map +1 -1
  16. package/dist/components/Card/Card.module.css +8 -2
  17. package/dist/components/CollapseButton/CollapseButton.module.css +1 -1
  18. package/dist/components/Drawer/Drawer.module.css +1 -0
  19. package/dist/components/FileUploader/FileUploader.module.css +6 -6
  20. package/dist/components/Image/Image.module.css +2 -2
  21. package/dist/components/Input/Checkbox/Checkbox.module.css +2 -2
  22. package/dist/components/Input/ErrorTooltip/ErrorTooltip.module.css +1 -1
  23. package/dist/components/Input/FloatLabel/FloatLabel.module.css +2 -2
  24. package/dist/components/Input/FormField/FormField.module.css +2 -2
  25. package/dist/components/Input/Hint/Hint.module.css +1 -1
  26. package/dist/components/Input/Input.d.ts +4 -4
  27. package/dist/components/Input/Input.module.css +1 -1
  28. package/dist/components/Input/InputGroup.module.css +8 -8
  29. package/dist/components/Input/Radio/Radio.module.css +2 -2
  30. package/dist/components/Input/Select/Select.module.css +12 -12
  31. package/dist/components/Input/Switch/Switch.module.css +2 -2
  32. package/dist/components/Input/Textarea/Textarea.module.css +1 -1
  33. package/dist/components/MarkdownEditor/MarkdownEditor.module.css +51 -17
  34. package/dist/components/Menu/Dropdown.d.ts +2 -0
  35. package/dist/components/Menu/Dropdown.js +1 -0
  36. package/dist/components/Menu/Dropdown.js.map +1 -1
  37. package/dist/components/Menu/Menu.d.ts +2 -0
  38. package/dist/components/Menu/Menu.js +5 -5
  39. package/dist/components/Menu/Menu.js.map +1 -1
  40. package/dist/components/Menu/Menu.module.css +3 -3
  41. package/dist/components/Modal/Modal.module.css +1 -1
  42. package/dist/components/Notifier/Notifier.js +8 -2
  43. package/dist/components/Notifier/Notifier.js.map +1 -1
  44. package/dist/components/Notifier/Notifier.module.css +38 -16
  45. package/dist/components/Pagination/Pagination.module.css +1 -1
  46. package/dist/components/Progress/Progress.d.ts +2 -1
  47. package/dist/components/Progress/Progress.js +9 -3
  48. package/dist/components/Progress/Progress.js.map +1 -1
  49. package/dist/components/Progress/Progress.module.css +24 -8
  50. package/dist/components/Table/Table.js +6 -1
  51. package/dist/components/Table/Table.js.map +1 -1
  52. package/dist/components/Table/Table.module.css +24 -8
  53. package/dist/components/Tooltip/Tooltip.d.ts +2 -1
  54. package/dist/components/Tooltip/Tooltip.js +4 -1
  55. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  56. package/dist/components/Tooltip/Tooltip.module.css +1 -1
  57. package/dist/components/Typography/Heading.d.ts +2 -1
  58. package/dist/components/Typography/Heading.js +9 -3
  59. package/dist/components/Typography/Heading.js.map +1 -1
  60. package/dist/components/Typography/Text.d.ts +2 -1
  61. package/dist/components/Typography/Text.js +9 -3
  62. package/dist/components/Typography/Text.js.map +1 -1
  63. package/dist/components/Typography/Typography.module.css +22 -6
  64. package/dist/components/Wizard/Wizard.d.ts +2 -0
  65. package/dist/components/Wizard/Wizard.js +17 -5
  66. package/dist/components/Wizard/Wizard.js.map +1 -1
  67. package/dist/components/Wizard/Wizard.module.css +54 -40
  68. package/dist/foundations/buttons.css +269 -55
  69. package/dist/foundations/layout.css +2 -2
  70. package/dist/foundations/tabs.css +3 -3
  71. package/dist/foundations/tokens.css +304 -74
  72. package/dist/foundations/utilities.css +738 -0
  73. package/dist/index.d.ts +2 -2
  74. package/dist/index.js.map +1 -1
  75. package/dist/types.d.ts +3 -1
  76. package/dist/utils/uiVariant.d.ts +16 -0
  77. package/dist/utils/uiVariant.js +106 -0
  78. package/dist/utils/uiVariant.js.map +1 -0
  79. package/docs/card.md +2 -1
  80. package/docs/feedback.md +11 -1
  81. package/docs/layout.md +42 -2
  82. package/docs/theme.md +71 -2
  83. 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[variant],
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":"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"}
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-md);
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-md);
38
- border-bottom-left-radius: var(--radius-md);
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: rgba(30, 51, 85, 0.6);
127
- box-shadow: 0 0 0 1px rgba(30, 51, 85, 0.2);
128
- --alert-icon-color: #9fb2cc;
129
- --alert-icon-bg: rgba(159, 178, 204, 0.16);
130
- --alert-icon-bg-border: rgba(159, 178, 204, 0.35);
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: rgba(20, 201, 214, 0.5);
135
- box-shadow: 0 0 0 1px rgba(20, 201, 214, 0.2);
136
- --alert-icon-color: #14c9d6;
137
- --alert-icon-bg: rgba(20, 201, 214, 0.16);
138
- --alert-icon-bg-border: rgba(20, 201, 214, 0.36);
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: rgba(30, 99, 233, 0.4);
143
- box-shadow: 0 0 0 1px rgba(30, 99, 233, 0.2);
144
- --alert-icon-color: #1e63e9;
145
- --alert-icon-bg: rgba(30, 99, 233, 0.16);
146
- --alert-icon-bg-border: rgba(30, 99, 233, 0.34);
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: rgba(79, 230, 163, 0.5);
151
- box-shadow: 0 0 0 1px rgba(79, 230, 163, 0.2);
152
- --alert-icon-color: #4fe6a3;
153
- --alert-icon-bg: rgba(79, 230, 163, 0.16);
154
- --alert-icon-bg-border: rgba(79, 230, 163, 0.36);
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: rgba(246, 200, 106, 0.5);
159
- box-shadow: 0 0 0 1px rgba(246, 200, 106, 0.2);
160
- --alert-icon-color: #f6c86a;
161
- --alert-icon-bg: rgba(246, 200, 106, 0.18);
162
- --alert-icon-bg-border: rgba(246, 200, 106, 0.36);
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: rgba(255, 107, 107, 0.5);
167
- box-shadow: 0 0 0 1px rgba(255, 107, 107, 0.2);
168
- --alert-icon-color: #ff6b6b;
169
- --alert-icon-bg: rgba(255, 107, 107, 0.16);
170
- --alert-icon-bg-border: rgba(255, 107, 107, 0.36);
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
- export default function Badge({ variant = 'default', size = 'md', className, ...props }) {
17
- const classes = [styles.badge, classMap[variant], sizeMap[size], className].filter(Boolean).join(' ');
18
- return _jsx("span", { className: classes, ...props });
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;AAWxC,MAAM,QAAQ,GAAiC;IAC7C,OAAO,EAAE,MAAM,CAAC,OAAO;IACvB,OAAO,EAAE,MAAM,CAAC,OAAO;IACvB,IAAI,EAAE,MAAM,CAAC,IAAI;IACjB,OAAO,EAAE,MAAM,CAAC,OAAO;IACvB,OAAO,EAAE,MAAM,CAAC,OAAO;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM;CACtB,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,CAAC,OAAO,UAAU,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,EAAS;IAC5F,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEtG,OAAO,eAAM,SAAS,EAAE,OAAO,KAAM,KAAK,GAAI,CAAC;AACjD,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: 4px 10px;
6
- border-radius: 999px;
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
- letter-spacing: 0.08em;
10
- text-transform: uppercase;
11
- border: 1px solid transparent;
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: 2px 8px;
16
- font-size: 10px;
17
- letter-spacing: 0.1em;
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: 4px 10px;
22
- font-size: 12px;
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: 6px 12px;
27
- font-size: 13px;
28
- letter-spacing: 0.07em;
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
- background: var(--badge-default-bg, #1e3355);
33
- color: var(--badge-default-color, var(--color-muted));
34
- border-color: var(--badge-default-border, #2b4268);
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
- background: var(--badge-primary-bg, #0f3a2d);
39
- color: var(--badge-primary-color, var(--color-mint));
40
- border-color: var(--badge-primary-border, #1a6a4f);
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
- background: var(--badge-info-bg, #122a4d);
45
- color: var(--badge-info-color, #9cc0ff);
46
- border-color: var(--badge-info-border, #264a8b);
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
- background: var(--badge-success-bg, #103b2a);
51
- color: var(--badge-success-color, var(--color-mint));
52
- border-color: var(--badge-success-border, #1f6b4a);
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
- background: var(--badge-warning-bg, #5a4318);
57
- color: var(--badge-warning-color, #f6c86a);
58
- border-color: var(--badge-warning-border, #8b6425);
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
- background: var(--badge-danger-bg, #4c2222);
63
- color: var(--badge-danger-color, #ff6b6b);
64
- border-color: var(--badge-danger-border, #7a3030);
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
- export default function Button({ variant, appearance, size, className, ...props }: Props): import("react/jsx-runtime").JSX.Element;
12
- export {};
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' || variant === 'outline') {
22
- return { variant: 'primary', appearance: variant };
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
- export default function Button({ variant, appearance, size = 'md', className, ...props }) {
37
+ function ButtonBase({ variant, appearance, size = 'md', className, ...props }) {
30
38
  const resolved = normalizeVariant(variant, appearance);
31
- const classes = ['btn', variantClass[resolved.variant], appearanceClass[resolved.appearance], sizeClass[size], className]
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("button", { className: classes, ...props });
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":";AAaA,MAAM,YAAY,GAAkC;IAClD,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,aAAa;IACtB,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,aAAa;IACtB,MAAM,EAAE,YAAY;CACrB,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,CAAC,OAA6C,EAAE,UAA6B,EAAE,EAAE;IACxG,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACjD,OAAO,EAAE,OAAO,EAAE,SAA0B,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IACtE,CAAC;IAED,OAAO;QACL,OAAO,EAAE,OAAO,IAAI,SAAS;QAC7B,UAAU,EAAE,UAAU,IAAI,OAAO;KAClC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,EAAS;IAC7F,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;SACtH,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,iBAAQ,SAAS,EAAE,OAAO,KAAM,KAAK,GAAI,CAAC;AACnD,CAAC"}
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 = [styles.toolbarGroup, className].filter(Boolean).join(' ');
155
- return _jsx("div", { className: classes, ...props });
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,