@clickhouse/click-ui 0.2.0-rc.6 → 0.2.0-rc.8

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 (86) hide show
  1. package/README.md +67 -0
  2. package/dist/cjs/click-ui.css +3861 -0
  3. package/dist/cjs/components/Button/Button.css +261 -0
  4. package/dist/cjs/components/Button/Button.module.css.cjs +38 -0
  5. package/dist/cjs/components/Button/Button.module.css.cjs.map +1 -0
  6. package/dist/cjs/components/Button/index.cjs +42 -126
  7. package/dist/cjs/components/Button/index.cjs.map +1 -1
  8. package/dist/cjs/components/ButtonGroup/index.cjs +1 -1
  9. package/dist/cjs/components/ButtonGroup/index.cjs.map +1 -1
  10. package/dist/cjs/components/DatePicker/Common.cjs +100 -73
  11. package/dist/cjs/components/DatePicker/Common.cjs.map +1 -1
  12. package/dist/cjs/components/DatePicker/DateRangePicker.cjs +24 -24
  13. package/dist/cjs/components/DatePicker/DateRangePicker.cjs.map +1 -1
  14. package/dist/cjs/components/DatePicker/DateTimeRangePicker.cjs +96 -50
  15. package/dist/cjs/components/DatePicker/DateTimeRangePicker.cjs.map +1 -1
  16. package/dist/cjs/components/DatePicker/index.cjs +29 -18
  17. package/dist/cjs/components/DatePicker/index.cjs.map +1 -1
  18. package/dist/cjs/components/DatePicker/utils.cjs +42 -14
  19. package/dist/cjs/components/DatePicker/utils.cjs.map +1 -1
  20. package/dist/cjs/components/GenericMenu/index.cjs +1 -1
  21. package/dist/cjs/components/GenericMenu/index.cjs.map +1 -1
  22. package/dist/cjs/lib/cva.cjs +15 -0
  23. package/dist/cjs/lib/cva.cjs.map +1 -0
  24. package/dist/cjs/providers/ThemeProvider.cjs +4 -0
  25. package/dist/cjs/providers/ThemeProvider.cjs.map +1 -1
  26. package/dist/cjs/theme/styles/tokens-dark.css +1806 -0
  27. package/dist/cjs/theme/styles/tokens-light.css +1795 -0
  28. package/dist/cjs/theme/theme.config.json.cjs +12 -0
  29. package/dist/cjs/theme/theme.config.json.cjs.map +1 -0
  30. package/dist/cjs/theme/tokens/variables.dark.cjs +2 -4
  31. package/dist/cjs/theme/tokens/variables.dark.cjs.map +1 -1
  32. package/dist/cjs/theme/tokens/variables.light.cjs +1 -6
  33. package/dist/cjs/theme/tokens/variables.light.cjs.map +1 -1
  34. package/dist/cjs/utils/localStorage.cjs +3 -1
  35. package/dist/cjs/utils/localStorage.cjs.map +1 -1
  36. package/dist/esm/click-ui.css +3861 -0
  37. package/dist/esm/components/Button/Button.css +261 -0
  38. package/dist/esm/components/Button/Button.module.css.js +25 -0
  39. package/dist/esm/components/Button/Button.module.css.js.map +1 -0
  40. package/dist/esm/components/Button/index.js +42 -126
  41. package/dist/esm/components/Button/index.js.map +1 -1
  42. package/dist/esm/components/ButtonGroup/index.js +1 -1
  43. package/dist/esm/components/ButtonGroup/index.js.map +1 -1
  44. package/dist/esm/components/DatePicker/Common.js +101 -74
  45. package/dist/esm/components/DatePicker/Common.js.map +1 -1
  46. package/dist/esm/components/DatePicker/DateRangePicker.js +25 -25
  47. package/dist/esm/components/DatePicker/DateRangePicker.js.map +1 -1
  48. package/dist/esm/components/DatePicker/DateTimeRangePicker.js +97 -51
  49. package/dist/esm/components/DatePicker/DateTimeRangePicker.js.map +1 -1
  50. package/dist/esm/components/DatePicker/index.js +30 -19
  51. package/dist/esm/components/DatePicker/index.js.map +1 -1
  52. package/dist/esm/components/DatePicker/utils.js +36 -10
  53. package/dist/esm/components/DatePicker/utils.js.map +1 -1
  54. package/dist/esm/components/GenericMenu/index.js +1 -1
  55. package/dist/esm/components/GenericMenu/index.js.map +1 -1
  56. package/dist/esm/lib/cva.js +7 -0
  57. package/dist/esm/lib/cva.js.map +1 -0
  58. package/dist/esm/providers/ThemeProvider.js +4 -0
  59. package/dist/esm/providers/ThemeProvider.js.map +1 -1
  60. package/dist/esm/theme/styles/tokens-dark.css +1806 -0
  61. package/dist/esm/theme/styles/tokens-light.css +1795 -0
  62. package/dist/esm/theme/theme.config.json.js +7 -0
  63. package/dist/esm/theme/theme.config.json.js.map +1 -0
  64. package/dist/esm/theme/tokens/variables.dark.js +2 -4
  65. package/dist/esm/theme/tokens/variables.dark.js.map +1 -1
  66. package/dist/esm/theme/tokens/variables.light.js +1 -6
  67. package/dist/esm/theme/tokens/variables.light.js.map +1 -1
  68. package/dist/esm/utils/localStorage.js +3 -1
  69. package/dist/esm/utils/localStorage.js.map +1 -1
  70. package/dist/types/components/Button/Button.d.ts +25 -2
  71. package/dist/types/components/DatePicker/Common.d.ts +9 -4
  72. package/dist/types/components/DatePicker/DatePicker.d.ts +11 -2
  73. package/dist/types/components/DatePicker/DateRangePicker.d.ts +3 -2
  74. package/dist/types/components/DatePicker/DateTimeRangePicker.d.ts +7 -3
  75. package/dist/types/components/DatePicker/index.d.ts +3 -2
  76. package/dist/types/components/DatePicker/utils.d.ts +9 -8
  77. package/dist/types/index.d.ts +1 -1
  78. package/dist/types/lib/cva.d.ts +3 -0
  79. package/dist/types/theme/theme.config.json.d.ts +6 -0
  80. package/dist/types/theme/theme.core.d.ts +0 -7
  81. package/dist/types/theme/tokens/variables.dark.d.ts +0 -2
  82. package/dist/types/theme/tokens/variables.light.d.ts +0 -5
  83. package/dist/types/utils/dom.d.ts +1 -1
  84. package/dist/types/utils/localStorage.d.ts +1 -1
  85. package/package.json +26 -10
  86. package/dist/types/components/DatePicker/DatePicker.types.d.ts +0 -9
@@ -0,0 +1,261 @@
1
+ .button__2ZuB7 {
2
+ display: flex;
3
+ position: relative;
4
+ padding: var(--click-button-basic-space-y) var(--click-button-basic-space-x);
5
+ overflow: hidden;
6
+ flex-shrink: 0;
7
+ justify-content: center;
8
+ align-items: center;
9
+ gap: var(--click-button-basic-space-gap);
10
+ border: 1px solid transparent;
11
+ border-radius: var(--click-button-radii-all);
12
+ background: transparent;
13
+ color: inherit;
14
+ font: var(--click-button-basic-typography-label-default);
15
+ white-space: nowrap;
16
+ cursor: pointer;
17
+ }
18
+
19
+ .button_align-center__RdEYc {
20
+ justify-content: center;
21
+ }
22
+
23
+ .button_align-left__AmFEH {
24
+ justify-content: flex-start;
25
+ }
26
+
27
+ .button_fill__Ph-yl {
28
+ width: 100%;
29
+ }
30
+
31
+ .button_primary__5V6PJ {
32
+ border-color: var(--click-button-basic-color-primary-stroke-default);
33
+ background-color: var(--click-button-basic-color-primary-background-default);
34
+ color: var(--click-button-basic-color-primary-text-default);
35
+ }
36
+
37
+ .button_primary__5V6PJ:disabled {
38
+ border-color: var(--click-button-basic-color-primary-stroke-disabled);
39
+ background-color: var(--click-button-basic-color-primary-background-disabled);
40
+ color: var(--click-button-basic-color-primary-text-disabled);
41
+ font: var(--click-button-basic-typography-label-disabled);
42
+ cursor: not-allowed;
43
+ }
44
+
45
+ .button_primary__5V6PJ:hover:not(:disabled) {
46
+ border-color: var(--click-button-basic-color-primary-stroke-hover);
47
+ background-color: var(--click-button-basic-color-primary-background-hover);
48
+ font: var(--click-button-basic-typography-label-hover);
49
+ transition: var(--click-transition-default);
50
+ }
51
+
52
+ .button_primary__5V6PJ:focus-visible:not(:disabled) {
53
+ border-color: var(--click-button-basic-color-primary-stroke-active);
54
+ background-color: var(--click-button-basic-color-primary-background-active);
55
+ font: var(--click-button-basic-typography-label-active);
56
+ outline: 2px solid var(--click-button-basic-color-primary-stroke-active);
57
+ outline-offset: 2px;
58
+ }
59
+
60
+ .button_primary__5V6PJ:active:not(:disabled),
61
+ .button_primary__5V6PJ:focus:not(:focus-visible, :disabled) {
62
+ border-color: var(--click-button-basic-color-primary-stroke-active);
63
+ background-color: var(--click-button-basic-color-primary-background-active);
64
+ font: var(--click-button-basic-typography-label-active);
65
+ outline: none;
66
+ }
67
+
68
+ .button_secondary__PXw0N {
69
+ border-color: var(--click-button-basic-color-secondary-stroke-default);
70
+ background-color: var(--click-button-basic-color-secondary-background-default);
71
+ color: var(--click-button-basic-color-secondary-text-default);
72
+ }
73
+
74
+ .button_secondary__PXw0N:disabled {
75
+ border-color: var(--click-button-basic-color-secondary-stroke-disabled);
76
+ background-color: var(--click-button-basic-color-secondary-background-disabled);
77
+ color: var(--click-button-basic-color-secondary-text-disabled);
78
+ font: var(--click-button-basic-typography-label-disabled);
79
+ cursor: not-allowed;
80
+ }
81
+
82
+ .button_secondary__PXw0N:hover:not(:disabled) {
83
+ border-color: var(--click-button-basic-color-secondary-stroke-hover);
84
+ background-color: var(--click-button-basic-color-secondary-background-hover);
85
+ font: var(--click-button-basic-typography-label-hover);
86
+ transition: var(--click-transition-default);
87
+ }
88
+
89
+ .button_secondary__PXw0N:focus-visible:not(:disabled) {
90
+ border-color: var(--click-button-basic-color-secondary-stroke-active);
91
+ background-color: var(--click-button-basic-color-secondary-background-active);
92
+ font: var(--click-button-basic-typography-label-active);
93
+ outline: 2px solid var(--click-button-basic-color-secondary-stroke-active);
94
+ outline-offset: 2px;
95
+ }
96
+
97
+ .button_secondary__PXw0N:active:not(:disabled),
98
+ .button_secondary__PXw0N:focus:not(:focus-visible, :disabled) {
99
+ border-color: var(--click-button-basic-color-secondary-stroke-active);
100
+ background-color: var(--click-button-basic-color-secondary-background-active);
101
+ font: var(--click-button-basic-typography-label-active);
102
+ outline: none;
103
+ }
104
+
105
+ .button_empty__GZ9s7 {
106
+ border-color: var(--click-button-basic-color-empty-stroke-default);
107
+ background-color: var(--click-button-basic-color-empty-background-default);
108
+ color: var(--click-button-basic-color-empty-text-default);
109
+ }
110
+
111
+ .button_empty__GZ9s7:disabled {
112
+ border-color: var(--click-button-basic-color-empty-stroke-disabled);
113
+ background-color: var(--click-button-basic-color-empty-background-disabled);
114
+ color: var(--click-button-basic-color-empty-text-disabled);
115
+ font: var(--click-button-basic-typography-label-disabled);
116
+ cursor: not-allowed;
117
+ }
118
+
119
+ .button_empty__GZ9s7:hover:not(:disabled) {
120
+ border-color: var(--click-button-basic-color-empty-stroke-hover);
121
+ background-color: var(--click-button-basic-color-empty-background-hover);
122
+ font: var(--click-button-basic-typography-label-hover);
123
+ transition: var(--click-transition-default);
124
+ }
125
+
126
+ .button_empty__GZ9s7:focus-visible:not(:disabled) {
127
+ border-color: var(--click-button-basic-color-empty-stroke-active);
128
+ background-color: var(--click-button-basic-color-empty-background-active);
129
+ font: var(--click-button-basic-typography-label-active);
130
+ outline: 2px solid var(--click-button-basic-color-empty-stroke-active);
131
+ outline-offset: 2px;
132
+ }
133
+
134
+ .button_empty__GZ9s7:active:not(:disabled),
135
+ .button_empty__GZ9s7:focus:not(:focus-visible, :disabled) {
136
+ border-color: var(--click-button-basic-color-empty-stroke-active);
137
+ background-color: var(--click-button-basic-color-empty-background-active);
138
+ font: var(--click-button-basic-typography-label-active);
139
+ outline: none;
140
+ }
141
+
142
+ .button_danger__0DN8k {
143
+ border-color: var(--click-button-basic-color-danger-stroke-default);
144
+ background-color: var(--click-button-basic-color-danger-background-default);
145
+ color: var(--click-button-basic-color-danger-text-default);
146
+ }
147
+
148
+ .button_danger__0DN8k:disabled {
149
+ border-color: var(--click-button-basic-color-danger-stroke-disabled);
150
+ background-color: var(--click-button-basic-color-danger-background-disabled);
151
+ color: var(--click-button-basic-color-danger-text-disabled);
152
+ font: var(--click-button-basic-typography-label-disabled);
153
+ cursor: not-allowed;
154
+ }
155
+
156
+ .button_danger__0DN8k:hover:not(:disabled) {
157
+ border-color: var(--click-button-basic-color-danger-stroke-hover);
158
+ background-color: var(--click-button-basic-color-danger-background-hover);
159
+ font: var(--click-button-basic-typography-label-hover);
160
+ transition: var(--click-transition-default);
161
+ }
162
+
163
+ .button_danger__0DN8k:focus-visible:not(:disabled) {
164
+ border-color: var(--click-button-basic-color-danger-stroke-active);
165
+ background-color: var(--click-button-basic-color-danger-background-active);
166
+ font: var(--click-button-basic-typography-label-active);
167
+ outline: 2px solid var(--click-button-basic-color-danger-stroke-active);
168
+ outline-offset: 2px;
169
+ }
170
+
171
+ .button_danger__0DN8k:active:not(:disabled),
172
+ .button_danger__0DN8k:focus:not(:focus-visible, :disabled) {
173
+ border-color: var(--click-button-basic-color-danger-stroke-active);
174
+ background-color: var(--click-button-basic-color-danger-background-active);
175
+ font: var(--click-button-basic-typography-label-active);
176
+ outline: none;
177
+ }
178
+
179
+ .button_loading__n2tCt {
180
+ cursor: not-allowed;
181
+ }
182
+
183
+ .button_loading__n2tCt::before {
184
+ content: '';
185
+ position: absolute;
186
+ inset: 0;
187
+ pointer-events: none;
188
+ animation: shimmer__8Jq1s 1.5s ease-in-out infinite;
189
+ }
190
+
191
+ .button_primary__5V6PJ.button_loading__n2tCt,
192
+ .button_secondary__PXw0N.button_loading__n2tCt,
193
+ .button_danger__0DN8k.button_loading__n2tCt {
194
+ opacity: 0.7;
195
+ }
196
+
197
+ .button_empty__GZ9s7.button_loading__n2tCt {
198
+ opacity: 0.9;
199
+ }
200
+
201
+ .button_loading__n2tCt > * {
202
+ opacity: 0.7;
203
+ }
204
+
205
+ @keyframes shimmer__8Jq1s {
206
+ 0% {
207
+ background-position: 100% 0;
208
+ }
209
+
210
+ 100% {
211
+ background-position: -100% 0;
212
+ }
213
+ }
214
+
215
+ .button_primary__5V6PJ.button_loading__n2tCt::before {
216
+ background: var(--click-button-basic-color-primary-background-loading);
217
+ background-size: 200% 100%;
218
+ background-repeat: no-repeat;
219
+ }
220
+
221
+ .button_secondary__PXw0N.button_loading__n2tCt::before {
222
+ background: var(--click-button-basic-color-secondary-background-loading);
223
+ background-size: 200% 100%;
224
+ background-repeat: no-repeat;
225
+ }
226
+
227
+ .button_empty__GZ9s7.button_loading__n2tCt::before {
228
+ background: var(--click-button-basic-color-empty-background-loading);
229
+ background-size: 200% 100%;
230
+ background-repeat: no-repeat;
231
+ }
232
+
233
+ .button_danger__0DN8k.button_loading__n2tCt::before {
234
+ background: var(--click-button-basic-color-danger-background-loading);
235
+ background-size: 200% 100%;
236
+ background-repeat: no-repeat;
237
+ }
238
+
239
+ .button__icon__e6c-f {
240
+ display: flex;
241
+ width: var(--click-button-basic-size-icon-all);
242
+ height: var(--click-button-basic-size-icon-all);
243
+ justify-content: center;
244
+ align-items: center;
245
+ }
246
+
247
+ .button__icon__e6c-f svg {
248
+ width: var(--click-button-basic-size-icon-all);
249
+ height: var(--click-button-basic-size-icon-all);
250
+ }
251
+
252
+ .button__label__tlatE {
253
+ display: inline-flex;
254
+ align-items: center;
255
+ }
256
+
257
+ @media (prefers-reduced-motion: reduce) {
258
+ .button_loading__n2tCt::before {
259
+ animation: none;
260
+ }
261
+ }
@@ -0,0 +1,38 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
4
+
5
+ const button = "button__2ZuB7";
6
+ const button_fill = "button_fill__Ph-yl";
7
+ const button_primary = "button_primary__5V6PJ";
8
+ const button_secondary = "button_secondary__PXw0N";
9
+ const button_empty = "button_empty__GZ9s7";
10
+ const button_danger = "button_danger__0DN8k";
11
+ const button_loading = "button_loading__n2tCt";
12
+ const button__icon = "button__icon__e6c-f";
13
+ const button__label = "button__label__tlatE";
14
+ const styles = {
15
+ button: button,
16
+ "button_align-center": "button_align-center__RdEYc",
17
+ "button_align-left": "button_align-left__AmFEH",
18
+ button_fill: button_fill,
19
+ button_primary: button_primary,
20
+ button_secondary: button_secondary,
21
+ button_empty: button_empty,
22
+ button_danger: button_danger,
23
+ button_loading: button_loading,
24
+ button__icon: button__icon,
25
+ button__label: button__label
26
+ };
27
+
28
+ exports.button = button;
29
+ exports.button__icon = button__icon;
30
+ exports.button__label = button__label;
31
+ exports.button_danger = button_danger;
32
+ exports.button_empty = button_empty;
33
+ exports.button_fill = button_fill;
34
+ exports.button_loading = button_loading;
35
+ exports.button_primary = button_primary;
36
+ exports.button_secondary = button_secondary;
37
+ exports.default = styles;
38
+ //# sourceMappingURL=Button.module.css.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,13 +1,40 @@
1
+ require("./Button.css");
1
2
  'use strict';
2
3
 
3
4
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
5
 
5
6
  const jsxRuntime = require('react/jsx-runtime');
6
- const styledComponents = require('styled-components');
7
- const BaseButton = require('./BaseButton.cjs');
7
+ const cva = require('../../lib/cva.cjs');
8
+ const react = require('react');
9
+ const Button_module = require('./Button.module.css.cjs');
8
10
  const Icon = require('../Icon/index.cjs');
11
+ const classVarianceAuthority = require('class-variance-authority');
9
12
 
10
- const Button = ({
13
+ const buttonVariants = classVarianceAuthority.cva(Button_module.default.button, {
14
+ variants: {
15
+ type: {
16
+ primary: Button_module.default["button_primary"],
17
+ secondary: Button_module.default["button_secondary"],
18
+ empty: Button_module.default["button_empty"],
19
+ danger: Button_module.default["button_danger"]
20
+ },
21
+ align: {
22
+ center: Button_module.default["button_align-center"],
23
+ left: Button_module.default["button_align-left"]
24
+ },
25
+ fillWidth: {
26
+ true: Button_module.default["button_fill"]
27
+ },
28
+ loading: {
29
+ true: Button_module.default["button_loading"]
30
+ }
31
+ },
32
+ defaultVariants: {
33
+ type: "primary",
34
+ align: "center"
35
+ }
36
+ });
37
+ const Button = react.forwardRef(({
11
38
  type = "primary",
12
39
  iconLeft,
13
40
  iconRight,
@@ -17,130 +44,19 @@ const Button = ({
17
44
  label,
18
45
  loading = false,
19
46
  disabled,
47
+ className,
20
48
  ...delegated
21
- }) => /* @__PURE__ */ jsxRuntime.jsxs(StyledButton, { $styleType: type, $align: align, $fillWidth: fillWidth, $loading: loading, disabled: disabled || loading, "aria-disabled": disabled || loading, role: "button", "data-fill-width": fillWidth, ...delegated, children: [
22
- iconLeft && /* @__PURE__ */ jsxRuntime.jsx(ButtonIcon, { name: iconLeft, "aria-hidden": true, size: "sm" }),
23
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: label ?? children }),
24
- iconRight && /* @__PURE__ */ jsxRuntime.jsx(ButtonIcon, { name: iconRight, "aria-hidden": true, size: "sm" })
25
- ] });
26
- const shimmerFullWidth = styledComponents.keyframes({
27
- "0%": {
28
- backgroundPosition: "100% 0"
29
- },
30
- "100%": {
31
- backgroundPosition: "-100% 0"
32
- }
33
- });
34
- const shimmerFixedWidth = styledComponents.keyframes({
35
- "0%": {
36
- backgroundPosition: "-200px 0"
37
- },
38
- "100%": {
39
- backgroundPosition: "200px 0"
40
- }
41
- });
42
- const StyledButton = styledComponents.styled(BaseButton.BaseButton).withConfig({
43
- componentId: "sc-1k4tz4c-0"
44
- })(["width:", ";color:", ";background-color:", ";border:", " solid ", ";font:", ";position:relative;display:flex;align-items:center;justify-content:", ";white-space:nowrap;overflow:hidden;flex-shrink:0;&::before{content:", ";position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none;background:", ";background-size:", ";background-repeat:", ";}&[data-fill-width='true']::before{animation:", " 1.5s ease-in-out infinite;}&[data-fill-width='false']::before,&:not([data-fill-width])::before{animation:", " 1.5s ease-in-out infinite;}&:hover{background-color:", ";border:", " solid ", ";transition:", ";font:", ";}&:active,&:focus{background-color:", ";border:1px solid ", ";font:", ";}", " ", ""], ({
45
- $fillWidth
46
- }) => $fillWidth ? "100%" : "revert", ({
47
- $styleType = "primary",
48
- theme
49
- }) => theme.click.button.basic.color[$styleType].text.default, ({
50
- $styleType = "primary",
51
- theme
52
- }) => theme.click.button.basic.color[$styleType].background.default, ({
53
- theme
54
- }) => theme.click.button.stroke, ({
55
- $styleType = "primary",
56
- theme
57
- }) => theme.click.button.basic.color[$styleType].stroke.default, ({
58
- theme
59
- }) => theme.click.button.basic.typography.label.default, ({
60
- $align
61
- }) => $align === "left" ? "flex-start" : "center", ({
62
- $loading
63
- }) => $loading ? '""' : "none", ({
64
- $styleType,
65
- theme
66
- }) => theme.click.button.basic.color[$styleType].background.loading, ({
67
- $fillWidth
68
- }) => $fillWidth ? "200% 100%" : "200px 100%", ({
69
- $fillWidth
70
- }) => $fillWidth ? "repeat" : "no-repeat", shimmerFullWidth, shimmerFixedWidth, ({
71
- $styleType = "primary",
72
- theme
73
- }) => theme.click.button.basic.color[$styleType].background.hover, ({
74
- theme
75
- }) => theme.click.button.stroke, ({
76
- $styleType = "primary",
77
- theme
78
- }) => theme.click.button.basic.color[$styleType].stroke.hover, ({
79
- theme
80
- }) => theme.transition.default, ({
81
- theme
82
- }) => theme.click.button.basic.typography.label.hover, ({
83
- $styleType = "primary",
84
- theme
85
- }) => theme.click.button.basic.color[$styleType].background.active, ({
86
- $styleType = "primary",
87
- theme
88
- }) => theme.click.button.basic.color[$styleType].stroke.active, ({
89
- theme
90
- }) => theme.click.button.basic.typography.label.active, ({
91
- $loading,
92
- $styleType,
93
- theme
94
- }) => {
95
- if ($loading) {
96
- return "";
97
- }
98
- const bgDisabled = theme.click.button.basic.color[$styleType].background.disabled;
99
- const textDisabled = theme.click.button.basic.color[$styleType].text.disabled;
100
- const strokeDisabled = theme.click.button.basic.color[$styleType].stroke.disabled;
101
- const stroke = theme.click.button.stroke;
102
- const fontDisabled = theme.click.button.basic.typography.label.disabled;
103
- return `
104
- &:disabled,
105
- &:disabled:hover,
106
- &:disabled:active {
107
- background-color: ${bgDisabled};
108
- color: ${textDisabled};
109
- border: ${stroke} solid ${strokeDisabled};
110
- font: ${fontDisabled};
111
- cursor: not-allowed;
112
- }
113
- `;
114
- }, ({
115
- $loading,
116
- $styleType
117
- }) => {
118
- if (!$loading) {
119
- return "";
120
- }
121
- const btnOpacity = $styleType === "empty" ? 0.9 : 0.7;
122
- return `
123
- cursor: not-allowed;
124
- opacity: ${btnOpacity};
125
-
126
- /* Dim text and icons */
127
- > * {
128
- opacity: 0.7;
129
- }
130
- `;
131
- });
132
- const ButtonIconWrapper = (props) => /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { ...props });
133
- const ButtonIcon = styledComponents.styled(ButtonIconWrapper).withConfig({
134
- componentId: "sc-1k4tz4c-1"
135
- })(["height:", ";width:", ";svg{height:", ";width:", ";}"], ({
136
- theme
137
- }) => theme.click.button.basic.size.icon.all, ({
138
- theme
139
- }) => theme.click.button.basic.size.icon.all, ({
140
- theme
141
- }) => theme.click.button.basic.size.icon.all, ({
142
- theme
143
- }) => theme.click.button.basic.size.icon.all);
49
+ }, ref) => /* @__PURE__ */ jsxRuntime.jsxs("button", { ref, className: cva.cn(buttonVariants({
50
+ type,
51
+ align,
52
+ fillWidth,
53
+ loading
54
+ }), className), disabled: disabled || loading, "aria-disabled": disabled || loading || void 0, "aria-busy": loading || void 0, ...delegated, children: [
55
+ iconLeft && /* @__PURE__ */ jsxRuntime.jsx("span", { className: Button_module.default.button__icon, children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { name: iconLeft, "aria-hidden": true, size: "sm" }) }),
56
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: Button_module.default.button__label, children: label ?? children }),
57
+ iconRight && /* @__PURE__ */ jsxRuntime.jsx("span", { className: Button_module.default.button__icon, children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { name: iconRight, "aria-hidden": true, size: "sm" }) })
58
+ ] }));
59
+ Button.displayName = "Button";
144
60
 
145
61
  exports.Button = Button;
146
62
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/components/Button/Button.tsx"],"sourcesContent":["import { Icon } from '@/components/Icon';\nimport { styled, keyframes } from 'styled-components';\nimport { BaseButton } from './BaseButton';\nimport { Alignment, ButtonProps, ButtonType } from './Button.types';\n\nexport const Button = ({\n type = 'primary',\n iconLeft,\n iconRight,\n align = 'center',\n children,\n fillWidth,\n label,\n loading = false,\n disabled,\n ...delegated\n}: ButtonProps) => (\n <StyledButton\n $styleType={type}\n $align={align}\n $fillWidth={fillWidth}\n $loading={loading}\n disabled={disabled || loading}\n aria-disabled={disabled || loading}\n role=\"button\"\n data-fill-width={fillWidth}\n {...delegated}\n >\n {iconLeft && (\n <ButtonIcon\n name={iconLeft}\n aria-hidden\n size=\"sm\"\n />\n )}\n\n <span>{label ?? children}</span>\n\n {iconRight && (\n <ButtonIcon\n name={iconRight}\n aria-hidden\n size=\"sm\"\n />\n )}\n </StyledButton>\n);\n\nconst shimmerFullWidth = keyframes({\n '0%': {\n backgroundPosition: '100% 0',\n },\n '100%': {\n backgroundPosition: '-100% 0',\n },\n});\n\nconst shimmerFixedWidth = keyframes({\n '0%': {\n backgroundPosition: '-200px 0',\n },\n '100%': {\n backgroundPosition: '200px 0',\n },\n});\n\nconst StyledButton = styled(BaseButton)<{\n $styleType: ButtonType;\n $align?: Alignment;\n $fillWidth?: boolean;\n $loading?: boolean;\n}>`\n width: ${({ $fillWidth }) => ($fillWidth ? '100%' : 'revert')};\n color: ${({ $styleType = 'primary', theme }) =>\n theme.click.button.basic.color[$styleType].text.default};\n background-color: ${({ $styleType = 'primary', theme }) =>\n theme.click.button.basic.color[$styleType].background.default};\n border: ${({ theme }) => theme.click.button.stroke} solid\n ${({ $styleType = 'primary', theme }) =>\n theme.click.button.basic.color[$styleType].stroke.default};\n font: ${({ theme }) => theme.click.button.basic.typography.label.default};\n position: relative;\n display: flex;\n align-items: center;\n justify-content: ${({ $align }) => ($align === 'left' ? 'flex-start' : 'center')};\n white-space: nowrap;\n overflow: hidden;\n flex-shrink: 0;\n\n &::before {\n content: ${({ $loading }) => ($loading ? '\"\"' : 'none')};\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n background: ${({ $styleType, theme }) =>\n theme.click.button.basic.color[$styleType].background.loading};\n background-size: ${({ $fillWidth }) => ($fillWidth ? '200% 100%' : '200px 100%')};\n background-repeat: ${({ $fillWidth }) => ($fillWidth ? 'repeat' : 'no-repeat')};\n }\n\n &[data-fill-width='true']::before {\n animation: ${shimmerFullWidth} 1.5s ease-in-out infinite;\n }\n\n &[data-fill-width='false']::before,\n &:not([data-fill-width])::before {\n animation: ${shimmerFixedWidth} 1.5s ease-in-out infinite;\n }\n\n &:hover {\n background-color: ${({ $styleType = 'primary', theme }) =>\n theme.click.button.basic.color[$styleType].background.hover};\n border: ${({ theme }) => theme.click.button.stroke} solid\n ${({ $styleType = 'primary', theme }) =>\n theme.click.button.basic.color[$styleType].stroke.hover};\n transition: ${({ theme }) => theme.transition.default};\n font: ${({ theme }) => theme.click.button.basic.typography.label.hover};\n }\n\n &:active,\n &:focus {\n background-color: ${({ $styleType = 'primary', theme }) =>\n theme.click.button.basic.color[$styleType].background.active};\n border: 1px solid\n ${({ $styleType = 'primary', theme }) =>\n theme.click.button.basic.color[$styleType].stroke.active};\n font: ${({ theme }) => theme.click.button.basic.typography.label.active};\n }\n\n ${({ $loading, $styleType, theme }) => {\n if ($loading) {\n return '';\n }\n\n const bgDisabled = theme.click.button.basic.color[$styleType].background.disabled;\n const textDisabled = theme.click.button.basic.color[$styleType].text.disabled;\n const strokeDisabled = theme.click.button.basic.color[$styleType].stroke.disabled;\n const stroke = theme.click.button.stroke;\n const fontDisabled = theme.click.button.basic.typography.label.disabled;\n\n return `\n &:disabled,\n &:disabled:hover,\n &:disabled:active {\n background-color: ${bgDisabled};\n color: ${textDisabled};\n border: ${stroke} solid ${strokeDisabled};\n font: ${fontDisabled};\n cursor: not-allowed;\n }\n `;\n }}\n\n /* Loading state styling */\n ${({ $loading, $styleType }) => {\n if (!$loading) {\n return '';\n }\n\n const btnOpacity = $styleType === 'empty' ? 0.9 : 0.7;\n\n return `\n cursor: not-allowed;\n opacity: ${btnOpacity};\n\n /* Dim text and icons */\n > * {\n opacity: 0.7;\n }\n `;\n }}\n`;\n\n// Lazy wrapper to avoid circular dependency issues at module load time\nconst ButtonIconWrapper = (props: React.ComponentProps<typeof Icon>) => (\n <Icon {...props} />\n);\n\nconst ButtonIcon = styled(ButtonIconWrapper)`\n height: ${({ theme }) => theme.click.button.basic.size.icon.all};\n width: ${({ theme }) => theme.click.button.basic.size.icon.all};\n svg {\n height: ${({ theme }) => theme.click.button.basic.size.icon.all};\n width: ${({ theme }) => theme.click.button.basic.size.icon.all};\n }\n`;\n"],"names":["Button","type","iconLeft","iconRight","align","children","fillWidth","label","loading","disabled","delegated","jsxs","jsx","shimmerFullWidth","keyframes","backgroundPosition","shimmerFixedWidth","StyledButton","styled","BaseButton","withConfig","componentId","$fillWidth","$styleType","theme","click","button","basic","color","text","default","background","stroke","typography","$align","$loading","hover","transition","active","bgDisabled","textDisabled","strokeDisabled","fontDisabled","btnOpacity","ButtonIconWrapper","props","Icon","ButtonIcon","size","icon","all"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/components/Button/Button.tsx"],"sourcesContent":["import { Icon, IconName } from '@/components/Icon';\nimport { cn, cva } from '@/lib/cva';\nimport { forwardRef } from 'react';\nimport styles from './Button.module.css';\n\nexport type ButtonType = 'primary' | 'secondary' | 'empty' | 'danger';\ntype Alignment = 'center' | 'left';\n\nexport interface ButtonProps extends React.HTMLAttributes<HTMLButtonElement> {\n // TODO: The type prop ('primary' | 'secondary' | 'empty' | 'danger') shadows the native <button type=\"submit|reset|button\"> attribute. Since type is destructured before ...delegated, consumers can never pass type=\"submit\" for form submission. Consider renaming the visual variant prop to variant (consistent with the CSS class names button_primary etc.). This is a public API problem!\n /** The visual style variant of the button */\n type?: ButtonType;\n /** Whether the button is disabled */\n disabled?: boolean;\n /** The text label to display in the button */\n label?: string;\n /** Icon to display on the left side of the label */\n iconLeft?: IconName;\n /** Icon to display on the right side of the label */\n iconRight?: IconName;\n /** Alignment of the button content */\n align?: Alignment;\n /** Whether the button should fill the full width of its container */\n fillWidth?: boolean;\n /** Whether to show a loading state */\n loading?: boolean;\n /** Whether the button should be focused on mount */\n autoFocus?: boolean;\n}\n\nconst buttonVariants = cva(styles.button, {\n variants: {\n type: {\n primary: styles['button_primary'],\n secondary: styles['button_secondary'],\n empty: styles['button_empty'],\n danger: styles['button_danger'],\n },\n align: {\n center: styles['button_align-center'],\n left: styles['button_align-left'],\n },\n fillWidth: {\n true: styles['button_fill'],\n },\n loading: {\n true: styles['button_loading'],\n },\n },\n defaultVariants: {\n type: 'primary',\n align: 'center',\n },\n});\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n type = 'primary',\n iconLeft,\n iconRight,\n align = 'center',\n children,\n fillWidth,\n label,\n loading = false,\n disabled,\n className,\n ...delegated\n },\n ref\n ) => (\n <button\n ref={ref}\n className={cn(buttonVariants({ type, align, fillWidth, loading }), className)}\n disabled={disabled || loading}\n aria-disabled={disabled || loading || undefined}\n aria-busy={loading || undefined}\n {...delegated}\n >\n {iconLeft && (\n <span className={styles.button__icon}>\n <Icon\n name={iconLeft}\n aria-hidden\n size=\"sm\"\n />\n </span>\n )}\n\n <span className={styles.button__label}>{label ?? children}</span>\n\n {iconRight && (\n <span className={styles.button__icon}>\n <Icon\n name={iconRight}\n aria-hidden\n size=\"sm\"\n />\n </span>\n )}\n </button>\n )\n);\n\nButton.displayName = 'Button';\n"],"names":["buttonVariants","cva","styles","button","variants","type","primary","secondary","empty","danger","align","center","left","fillWidth","true","loading","defaultVariants","Button","forwardRef","iconLeft","iconRight","children","label","disabled","className","delegated","ref","jsxs","cn","undefined","jsx","button__icon","Icon","button__label","displayName"],"mappings":";;;;;;;;;;;AA8BA,MAAMA,cAAAA,GAAiBC,0BAAAA,CAAIC,qBAAAA,CAAOC,MAAAA,EAAQ;AAAA,EACxCC,QAAAA,EAAU;AAAA,IACRC,IAAAA,EAAM;AAAA,MACJC,OAAAA,EAASJ,sBAAO,gBAAgB,CAAA;AAAA,MAChCK,SAAAA,EAAWL,sBAAO,kBAAkB,CAAA;AAAA,MACpCM,KAAAA,EAAON,sBAAO,cAAc,CAAA;AAAA,MAC5BO,MAAAA,EAAQP,sBAAO,eAAe;AAAA,KAChC;AAAA,IACAQ,KAAAA,EAAO;AAAA,MACLC,MAAAA,EAAQT,sBAAO,qBAAqB,CAAA;AAAA,MACpCU,IAAAA,EAAMV,sBAAO,mBAAmB;AAAA,KAClC;AAAA,IACAW,SAAAA,EAAW;AAAA,MACTC,IAAAA,EAAMZ,sBAAO,aAAa;AAAA,KAC5B;AAAA,IACAa,OAAAA,EAAS;AAAA,MACPD,IAAAA,EAAMZ,sBAAO,gBAAgB;AAAA;AAC/B,GACF;AAAA,EACAc,eAAAA,EAAiB;AAAA,IACfX,IAAAA,EAAM,SAAA;AAAA,IACNK,KAAAA,EAAO;AAAA;AAEX,CAAC,CAAA;AAEM,MAAMO,MAAAA,GAASC,iBACpB,CACE;AAAA,EACEb,IAAAA,GAAO,SAAA;AAAA,EACPc,QAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAV,KAAAA,GAAQ,QAAA;AAAA,EACRW,QAAAA;AAAAA,EACAR,SAAAA;AAAAA,EACAS,KAAAA;AAAAA,EACAP,OAAAA,GAAU,KAAA;AAAA,EACVQ,QAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACA,GAAGC;AACL,CAAA,EACAC,wBAEAC,eAAA,CAAC,QAAA,EAAA,EACC,GAAA,EACA,SAAA,EAAWC,OAAG5B,cAAAA,CAAe;AAAA,EAAEK,IAAAA;AAAAA,EAAMK,KAAAA;AAAAA,EAAOG,SAAAA;AAAAA,EAAWE;AAAQ,CAAC,CAAA,EAAGS,SAAS,CAAA,EAC5E,QAAA,EAAUD,YAAYR,OAAAA,EACtB,eAAA,EAAeQ,QAAAA,IAAYR,OAAAA,IAAWc,MAAAA,EACtC,WAAA,EAAWd,OAAAA,IAAWc,MAAAA,EACtB,GAAIJ,SAAAA,EAEHN,QAAAA,EAAAA;AAAAA,EAAAA,QAAAA,oBACCW,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW5B,qBAAAA,CAAO6B,YAAAA,EACtB,QAAA,kBAAAD,cAAA,CAACE,SAAA,EAAA,EACC,IAAA,EAAMb,QAAAA,EACN,aAAA,EAAW,IAAA,EACX,IAAA,EAAK,MAAI,CAAA,EAEb,CAAA;AAAA,iCAGD,MAAA,EAAA,EAAK,SAAA,EAAWjB,qBAAAA,CAAO+B,aAAAA,EAAgBX,mBAASD,QAAAA,EAAS,CAAA;AAAA,EAEzDD,SAAAA,oBACCU,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW5B,sBAAO6B,YAAAA,EACtB,QAAA,kBAAAD,cAAA,CAACE,SAAA,EAAA,EACC,IAAA,EAAMZ,SAAAA,EACN,aAAA,EAAW,IAAA,EACX,IAAA,EAAK,MAAI,CAAA,EAEb;AAAA,CAAA,EAEJ,CAEJ;AAEAH,MAAAA,CAAOiB,WAAAA,GAAc,QAAA;;;;"}
@@ -56,7 +56,7 @@ const ButtonGroup = ({
56
56
  const isActive = isValueSelected(value, currentSelection);
57
57
  return /* @__PURE__ */ jsxRuntime.jsx(Button, { $active: isActive, "aria-pressed": isActive, $fillWidth: fillWidth, $type: type, onClick: () => onButtonGroupClickCommonHandler(value), role: "button", ...buttonProps, children: label }, value);
58
58
  });
59
- return /* @__PURE__ */ jsxRuntime.jsx(ButtonGroupWrapper, { $fillWidth: fillWidth, $type: type, ...props, children: buttons });
59
+ return /* @__PURE__ */ jsxRuntime.jsx(ButtonGroupWrapper, { ...props, $fillWidth: fillWidth, $type: type, role: "group", children: buttons });
60
60
  };
61
61
  const ButtonGroupWrapper = styledComponents.styled.div.withConfig({
62
62
  componentId: "sc-ukgugp-0"
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/components/ButtonGroup/ButtonGroup.tsx"],"sourcesContent":["import { useCallback, useState } from 'react';\nimport { styled } from 'styled-components';\nimport { ButtonGroupProps, SelectionValue } from './ButtonGroup.types';\n\nconst normalizeToSet = (value: SelectionValue | undefined): Set<string> => {\n if (value === undefined) {\n return new Set();\n }\n if (value instanceof Set) {\n return new Set(value);\n }\n return new Set([value]);\n};\n\nconst isValueSelected = (value: string, selection: Set<string>): boolean => {\n return selection.has(value);\n};\n\nexport const ButtonGroup = ({\n options,\n selected,\n defaultSelected,\n fillWidth = false,\n onClick,\n type = 'default',\n multiple = false,\n ...props\n}: ButtonGroupProps) => {\n const [internalSelection, setInternalSelection] = useState<Set<string>>(() =>\n normalizeToSet(defaultSelected)\n );\n\n // Use `selected` if the parent needs to own\n // or sync the selection state management (controlled\n // by consumer app)\n // Use `defaultSelected` if the component can manage\n // its own state independently (uncontrolled)\n const isControlled = selected !== undefined;\n const currentSelection = isControlled ? normalizeToSet(selected) : internalSelection;\n\n const onButtonGroupClickCommonHandler = useCallback(\n (value: string) => {\n let newSelection: Set<string>;\n\n if (multiple) {\n newSelection = new Set(currentSelection);\n if (newSelection.has(value)) {\n newSelection.delete(value);\n } else {\n newSelection.add(value);\n }\n } else {\n newSelection = new Set([value]);\n }\n\n if (!isControlled) {\n setInternalSelection(newSelection);\n }\n\n // WARN: Single mode returns string\n // while multiple mode returns Set (DS)\n onClick?.(value, multiple ? newSelection : value);\n },\n [currentSelection, multiple, isControlled, onClick]\n );\n\n const buttons = options.map(({ value, label, ...buttonProps }) => {\n const isActive = isValueSelected(value, currentSelection);\n\n return (\n <Button\n key={value}\n $active={isActive}\n aria-pressed={isActive}\n $fillWidth={fillWidth}\n $type={type}\n onClick={() => onButtonGroupClickCommonHandler(value)}\n role=\"button\"\n {...buttonProps}\n >\n {label}\n </Button>\n );\n });\n\n return (\n <ButtonGroupWrapper\n $fillWidth={fillWidth}\n $type={type}\n {...props}\n >\n {buttons}\n </ButtonGroupWrapper>\n );\n};\n\nimport { ButtonGroupType } from './ButtonGroup.types';\n\nconst ButtonGroupWrapper = styled.div<{ $fillWidth: boolean; $type: ButtonGroupType }>`\n display: inline-flex;\n box-sizing: border-box;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n padding: ${({ theme, $type }) =>\n `${theme.click.button.group.space.panel[$type].x} ${theme.click.button.group.space.panel[$type].y}`};\n gap: ${({ theme, $type }) => theme.click.button.group.space.panel[$type].gap};\n border: ${({ theme, $type }) =>\n $type === 'default'\n ? `1px solid ${theme.click.button.group.color.panel.stroke[$type]}`\n : 'none'};\n background: ${({ theme }) => theme.click.button.group.color.background.panel};\n border-radius: ${({ theme }) => theme.click.button.group.radii.panel.all};\n width: ${({ $fillWidth }) => ($fillWidth ? '100%' : 'auto')};\n`;\n\nconst Button = styled.button<{\n $active: boolean;\n $fillWidth: boolean;\n $type: ButtonGroupType;\n}>`\n box-sizing: border-box;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n background: ${({ $active, theme }) =>\n $active\n ? theme.click.button.group.color.background.active\n : theme.click.button.group.color.background.default};\n color: ${({ theme }) => theme.click.button.group.color.text.default};\n font: ${({ theme }) => theme.click.button.group.typography.label.default};\n padding: ${({ theme, $type }) =>\n `${theme.click.button.group.space.button[$type].y} ${theme.click.button.group.space.button[$type].x}`};\n ${({ $fillWidth }) => ($fillWidth ? 'flex: 1;' : '')};\n border-radius: ${({ theme, $type }) =>\n theme.click.button.group.radii.button[$type].all};\n cursor: pointer;\n border: none;\n\n &[aria-pressed='true'] {\n background: ${({ theme }) => theme.click.button.group.color.background.active};\n font: ${({ theme }) => theme.click.button.group.typography.label.active};\n color: ${({ theme }) => theme.click.button.group.color.text.active};\n }\n\n &:hover {\n background: ${({ theme }) => theme.click.button.group.color.background.hover};\n font: ${({ theme }) => theme.click.button.group.typography.label.hover};\n color: ${({ theme }) => theme.click.button.group.color.text.hover};\n }\n\n &:disabled {\n cursor: not-allowed;\n font: ${({ theme }) => theme.click.button.group.typography.label.disabled};\n color: ${({ theme }) => theme.click.button.group.color.text.disabled};\n background: ${({ theme, $active }) =>\n theme.click.button.group.color.background[\n $active ? 'disabled-active' : 'disabled'\n ]};\n\n &:active,\n &:focus,\n &[aria-pressed='true'] {\n color: ${({ theme }) => theme.click.button.group.color.text.disabled};\n }\n }\n\n &[aria-pressed='true'] {\n background: ${({ theme }) => theme.click.button.group.color.background.active};\n font: ${({ theme }) => theme.click.button.group.typography.label.active};\n color: ${({ theme }) => theme.click.button.group.color.text.active};\n &:disabled {\n background: ${({ theme }) =>\n theme.click.button.group.color.background['disabled-active']};\n }\n }\n`;\n"],"names":["normalizeToSet","value","undefined","Set","isValueSelected","selection","has","ButtonGroup","options","selected","defaultSelected","fillWidth","onClick","type","multiple","props","internalSelection","setInternalSelection","useState","isControlled","currentSelection","onButtonGroupClickCommonHandler","useCallback","newSelection","delete","add","buttons","map","label","buttonProps","isActive","jsx","ButtonGroupWrapper","styled","div","withConfig","componentId","theme","$type","click","button","group","space","panel","x","y","gap","color","stroke","background","radii","all","$fillWidth","Button","$active","active","default","text","typography","hover","disabled"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/components/ButtonGroup/ButtonGroup.tsx"],"sourcesContent":["import { useCallback, useState } from 'react';\nimport { styled } from 'styled-components';\nimport { ButtonGroupProps, SelectionValue } from './ButtonGroup.types';\n\nconst normalizeToSet = (value: SelectionValue | undefined): Set<string> => {\n if (value === undefined) {\n return new Set();\n }\n if (value instanceof Set) {\n return new Set(value);\n }\n return new Set([value]);\n};\n\nconst isValueSelected = (value: string, selection: Set<string>): boolean => {\n return selection.has(value);\n};\n\nexport const ButtonGroup = ({\n options,\n selected,\n defaultSelected,\n fillWidth = false,\n onClick,\n type = 'default',\n multiple = false,\n ...props\n}: ButtonGroupProps) => {\n const [internalSelection, setInternalSelection] = useState<Set<string>>(() =>\n normalizeToSet(defaultSelected)\n );\n\n // Use `selected` if the parent needs to own\n // or sync the selection state management (controlled\n // by consumer app)\n // Use `defaultSelected` if the component can manage\n // its own state independently (uncontrolled)\n const isControlled = selected !== undefined;\n const currentSelection = isControlled ? normalizeToSet(selected) : internalSelection;\n\n const onButtonGroupClickCommonHandler = useCallback(\n (value: string) => {\n let newSelection: Set<string>;\n\n if (multiple) {\n newSelection = new Set(currentSelection);\n if (newSelection.has(value)) {\n newSelection.delete(value);\n } else {\n newSelection.add(value);\n }\n } else {\n newSelection = new Set([value]);\n }\n\n if (!isControlled) {\n setInternalSelection(newSelection);\n }\n\n // WARN: Single mode returns string\n // while multiple mode returns Set (DS)\n onClick?.(value, multiple ? newSelection : value);\n },\n [currentSelection, multiple, isControlled, onClick]\n );\n\n const buttons = options.map(({ value, label, ...buttonProps }) => {\n const isActive = isValueSelected(value, currentSelection);\n\n return (\n <Button\n key={value}\n $active={isActive}\n aria-pressed={isActive}\n $fillWidth={fillWidth}\n $type={type}\n onClick={() => onButtonGroupClickCommonHandler(value)}\n role=\"button\"\n {...buttonProps}\n >\n {label}\n </Button>\n );\n });\n\n return (\n <ButtonGroupWrapper\n {...props}\n $fillWidth={fillWidth}\n $type={type}\n role=\"group\"\n >\n {buttons}\n </ButtonGroupWrapper>\n );\n};\n\nimport { ButtonGroupType } from './ButtonGroup.types';\n\nconst ButtonGroupWrapper = styled.div<{ $fillWidth: boolean; $type: ButtonGroupType }>`\n display: inline-flex;\n box-sizing: border-box;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n padding: ${({ theme, $type }) =>\n `${theme.click.button.group.space.panel[$type].x} ${theme.click.button.group.space.panel[$type].y}`};\n gap: ${({ theme, $type }) => theme.click.button.group.space.panel[$type].gap};\n border: ${({ theme, $type }) =>\n $type === 'default'\n ? `1px solid ${theme.click.button.group.color.panel.stroke[$type]}`\n : 'none'};\n background: ${({ theme }) => theme.click.button.group.color.background.panel};\n border-radius: ${({ theme }) => theme.click.button.group.radii.panel.all};\n width: ${({ $fillWidth }) => ($fillWidth ? '100%' : 'auto')};\n`;\n\nconst Button = styled.button<{\n $active: boolean;\n $fillWidth: boolean;\n $type: ButtonGroupType;\n}>`\n box-sizing: border-box;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n background: ${({ $active, theme }) =>\n $active\n ? theme.click.button.group.color.background.active\n : theme.click.button.group.color.background.default};\n color: ${({ theme }) => theme.click.button.group.color.text.default};\n font: ${({ theme }) => theme.click.button.group.typography.label.default};\n padding: ${({ theme, $type }) =>\n `${theme.click.button.group.space.button[$type].y} ${theme.click.button.group.space.button[$type].x}`};\n ${({ $fillWidth }) => ($fillWidth ? 'flex: 1;' : '')};\n border-radius: ${({ theme, $type }) =>\n theme.click.button.group.radii.button[$type].all};\n cursor: pointer;\n border: none;\n\n &[aria-pressed='true'] {\n background: ${({ theme }) => theme.click.button.group.color.background.active};\n font: ${({ theme }) => theme.click.button.group.typography.label.active};\n color: ${({ theme }) => theme.click.button.group.color.text.active};\n }\n\n &:hover {\n background: ${({ theme }) => theme.click.button.group.color.background.hover};\n font: ${({ theme }) => theme.click.button.group.typography.label.hover};\n color: ${({ theme }) => theme.click.button.group.color.text.hover};\n }\n\n &:disabled {\n cursor: not-allowed;\n font: ${({ theme }) => theme.click.button.group.typography.label.disabled};\n color: ${({ theme }) => theme.click.button.group.color.text.disabled};\n background: ${({ theme, $active }) =>\n theme.click.button.group.color.background[\n $active ? 'disabled-active' : 'disabled'\n ]};\n\n &:active,\n &:focus,\n &[aria-pressed='true'] {\n color: ${({ theme }) => theme.click.button.group.color.text.disabled};\n }\n }\n\n &[aria-pressed='true'] {\n background: ${({ theme }) => theme.click.button.group.color.background.active};\n font: ${({ theme }) => theme.click.button.group.typography.label.active};\n color: ${({ theme }) => theme.click.button.group.color.text.active};\n &:disabled {\n background: ${({ theme }) =>\n theme.click.button.group.color.background['disabled-active']};\n }\n }\n`;\n"],"names":["normalizeToSet","value","undefined","Set","isValueSelected","selection","has","ButtonGroup","options","selected","defaultSelected","fillWidth","onClick","type","multiple","props","internalSelection","setInternalSelection","useState","isControlled","currentSelection","onButtonGroupClickCommonHandler","useCallback","newSelection","delete","add","buttons","map","label","buttonProps","isActive","jsx","ButtonGroupWrapper","styled","div","withConfig","componentId","theme","$type","click","button","group","space","panel","x","y","gap","color","stroke","background","radii","all","$fillWidth","Button","$active","active","default","text","typography","hover","disabled"],"mappings":"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"}