@cloudflare/kumo 1.5.1 → 1.6.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 (150) hide show
  1. package/CHANGELOG.md +90 -0
  2. package/ai/component-registry.json +52 -3
  3. package/ai/component-registry.md +291 -2
  4. package/ai/schemas.ts +11 -2
  5. package/dist/.build-complete +1 -1
  6. package/dist/ai/schemas.d.ts +24 -5
  7. package/dist/ai/schemas.d.ts.map +1 -1
  8. package/dist/catalog.js +1 -1
  9. package/dist/{checkbox-CWANiedi.js → checkbox-Dt8iSNOg.js} +3 -3
  10. package/dist/{checkbox-CWANiedi.js.map → checkbox-Dt8iSNOg.js.map} +1 -1
  11. package/dist/clipboard-text-Bw5rKPXz.js +185 -0
  12. package/dist/clipboard-text-Bw5rKPXz.js.map +1 -0
  13. package/dist/{combobox-C9koouxM.js → combobox-BIC-YZ2L.js} +41 -41
  14. package/dist/combobox-BIC-YZ2L.js.map +1 -0
  15. package/dist/command-line/cli.js +88 -30
  16. package/dist/command-line/commands/add.js +88 -30
  17. package/dist/{command-palette-TGXgr6Vq.js → command-palette-D3MNR7w9.js} +31 -31
  18. package/dist/{command-palette-TGXgr6Vq.js.map → command-palette-D3MNR7w9.js.map} +1 -1
  19. package/dist/components/checkbox.js +1 -1
  20. package/dist/components/clipboard-text.js +1 -1
  21. package/dist/components/combobox.js +1 -1
  22. package/dist/components/command-palette.js +1 -1
  23. package/dist/components/date-picker.js +6 -0
  24. package/dist/components/date-picker.js.map +1 -0
  25. package/dist/components/dialog.js +1 -1
  26. package/dist/components/dropdown.js +1 -1
  27. package/dist/components/field.js +1 -1
  28. package/dist/components/input.js +3 -3
  29. package/dist/components/label.js +1 -1
  30. package/dist/components/link.js +1 -1
  31. package/dist/components/menubar.js +1 -1
  32. package/dist/components/meter.js +1 -1
  33. package/dist/components/pagination.js +1 -1
  34. package/dist/components/popover.js +1 -1
  35. package/dist/components/radio.js +1 -1
  36. package/dist/components/select.js +1 -1
  37. package/dist/components/sensitive-input.js +1 -1
  38. package/dist/components/switch.js +1 -1
  39. package/dist/components/table.js +1 -1
  40. package/dist/components/tabs.js +1 -1
  41. package/dist/components/toast.js +2 -2
  42. package/dist/components/tooltip.js +1 -1
  43. package/dist/date-picker-M6uNX5Ca.js +2921 -0
  44. package/dist/date-picker-M6uNX5Ca.js.map +1 -0
  45. package/dist/{dialog-CpCeOqSZ.js → dialog-toS9krNF.js} +17 -17
  46. package/dist/dialog-toS9krNF.js.map +1 -0
  47. package/dist/{dropdown-DFeFcKfn.js → dropdown-BquiYKKC.js} +38 -38
  48. package/dist/dropdown-BquiYKKC.js.map +1 -0
  49. package/dist/{field-Dt-XuSaQ.js → field-DCq04TgZ.js} +3 -3
  50. package/dist/{field-Dt-XuSaQ.js.map → field-DCq04TgZ.js.map} +1 -1
  51. package/dist/index.js +51 -49
  52. package/dist/index.js.map +1 -1
  53. package/dist/{input-GZAWBXYX.js → input-CCR8NGG7.js} +3 -3
  54. package/dist/{input-GZAWBXYX.js.map → input-CCR8NGG7.js.map} +1 -1
  55. package/dist/{input-area-CS1-ceY4.js → input-area-DU2Yvp_t.js} +3 -3
  56. package/dist/{input-area-CS1-ceY4.js.map → input-area-DU2Yvp_t.js.map} +1 -1
  57. package/dist/{input-group-COo-wz5O.js → input-group-C365-qBq.js} +2 -2
  58. package/dist/{input-group-COo-wz5O.js.map → input-group-C365-qBq.js.map} +1 -1
  59. package/dist/{label-ChZ2Pp5p.js → label-zjtV7oXa.js} +2 -2
  60. package/dist/{label-ChZ2Pp5p.js.map → label-zjtV7oXa.js.map} +1 -1
  61. package/dist/{link-Mj2WM1AS.js → link-C8pUZ4Q-.js} +8 -8
  62. package/dist/{link-Mj2WM1AS.js.map → link-C8pUZ4Q-.js.map} +1 -1
  63. package/dist/{menubar-CbXWXQYR.js → menubar-D7WvAf6x.js} +6 -6
  64. package/dist/menubar-D7WvAf6x.js.map +1 -0
  65. package/dist/{meter-Bu5f3mAc.js → meter-jQGKS1z4.js} +4 -4
  66. package/dist/{meter-Bu5f3mAc.js.map → meter-jQGKS1z4.js.map} +1 -1
  67. package/dist/{pagination-Cf-yRO-n.js → pagination-BN80iKY6.js} +2 -2
  68. package/dist/{pagination-Cf-yRO-n.js.map → pagination-BN80iKY6.js.map} +1 -1
  69. package/dist/{popover-D7yeRosi.js → popover-syU1104E.js} +4 -4
  70. package/dist/{popover-D7yeRosi.js.map → popover-syU1104E.js.map} +1 -1
  71. package/dist/primitives/accordion.js +1 -1
  72. package/dist/primitives/alert-dialog.js +1 -1
  73. package/dist/primitives/autocomplete.js +1 -1
  74. package/dist/primitives/avatar.js +1 -1
  75. package/dist/primitives/button.js +1 -1
  76. package/dist/primitives/checkbox-group.js +1 -1
  77. package/dist/primitives/checkbox.js +1 -1
  78. package/dist/primitives/collapsible.js +1 -1
  79. package/dist/primitives/combobox.js +1 -1
  80. package/dist/primitives/context-menu.js +1 -1
  81. package/dist/primitives/dialog.js +1 -1
  82. package/dist/primitives/direction-provider.js +1 -1
  83. package/dist/primitives/field.js +1 -1
  84. package/dist/primitives/fieldset.js +1 -1
  85. package/dist/primitives/form.js +1 -1
  86. package/dist/primitives/input.js +1 -1
  87. package/dist/primitives/menu.js +1 -1
  88. package/dist/primitives/menubar.js +1 -1
  89. package/dist/primitives/meter.js +1 -1
  90. package/dist/primitives/navigation-menu.js +1 -1
  91. package/dist/primitives/number-field.js +1 -1
  92. package/dist/primitives/popover.js +1 -1
  93. package/dist/primitives/preview-card.js +1 -1
  94. package/dist/primitives/progress.js +1 -1
  95. package/dist/primitives/radio-group.js +1 -1
  96. package/dist/primitives/radio.js +1 -1
  97. package/dist/primitives/scroll-area.js +1 -1
  98. package/dist/primitives/select.js +1 -1
  99. package/dist/primitives/separator.js +1 -1
  100. package/dist/primitives/slider.js +1 -1
  101. package/dist/primitives/switch.js +1 -1
  102. package/dist/primitives/tabs.js +1 -1
  103. package/dist/primitives/toast.js +1 -1
  104. package/dist/primitives/toggle-group.js +1 -1
  105. package/dist/primitives/toggle.js +1 -1
  106. package/dist/primitives/toolbar.js +1 -1
  107. package/dist/primitives/tooltip.js +1 -1
  108. package/dist/primitives.js +1 -1
  109. package/dist/{radio-CKn09bGo.js → radio-CWMtSx65.js} +8 -8
  110. package/dist/{radio-CKn09bGo.js.map → radio-CWMtSx65.js.map} +1 -1
  111. package/dist/{schemas-H10xB2M_.js → schemas-DbIwo0ET.js} +251 -239
  112. package/dist/{schemas-H10xB2M_.js.map → schemas-DbIwo0ET.js.map} +1 -1
  113. package/dist/{select-DvpgiOau.js → select-G6JqBVkg.js} +37 -37
  114. package/dist/{select-DvpgiOau.js.map → select-G6JqBVkg.js.map} +1 -1
  115. package/dist/{sensitive-input-BuYT6U6C.js → sensitive-input-DNFpycoy.js} +4 -4
  116. package/dist/{sensitive-input-BuYT6U6C.js.map → sensitive-input-DNFpycoy.js.map} +1 -1
  117. package/dist/src/command-line/utils/transformer.d.ts +8 -4
  118. package/dist/src/command-line/utils/transformer.d.ts.map +1 -1
  119. package/dist/src/components/clipboard-text/clipboard-text.d.ts +23 -0
  120. package/dist/src/components/clipboard-text/clipboard-text.d.ts.map +1 -1
  121. package/dist/src/components/date-picker/date-picker.d.ts +65 -0
  122. package/dist/src/components/date-picker/date-picker.d.ts.map +1 -0
  123. package/dist/src/components/date-picker/index.d.ts +4 -0
  124. package/dist/src/components/date-picker/index.d.ts.map +1 -0
  125. package/dist/src/components/dropdown/dropdown.d.ts.map +1 -1
  126. package/dist/src/index.d.ts +1 -0
  127. package/dist/src/index.d.ts.map +1 -1
  128. package/dist/styles/kumo-binding.css +0 -4
  129. package/dist/styles/kumo-standalone.css +1 -1
  130. package/dist/styles/kumo.css +541 -0
  131. package/dist/{switch-Tu34uFoa.js → switch-CmsZ4z-g.js} +9 -9
  132. package/dist/{switch-Tu34uFoa.js.map → switch-CmsZ4z-g.js.map} +1 -1
  133. package/dist/{table-DtUrZ2Rj.js → table-Dc0AGcLV.js} +2 -2
  134. package/dist/{table-DtUrZ2Rj.js.map → table-Dc0AGcLV.js.map} +1 -1
  135. package/dist/{tabs-B7THfqHW.js → tabs-BpD1iUiz.js} +2 -2
  136. package/dist/{tabs-B7THfqHW.js.map → tabs-BpD1iUiz.js.map} +1 -1
  137. package/dist/{toast-Du4y8qng.js → toast-BrR0pjLE.js} +8 -8
  138. package/dist/{toast-Du4y8qng.js.map → toast-BrR0pjLE.js.map} +1 -1
  139. package/dist/{tooltip-BxV1H6AV.js → tooltip-daVJYtXY.js} +2 -2
  140. package/dist/{tooltip-BxV1H6AV.js.map → tooltip-daVJYtXY.js.map} +1 -1
  141. package/dist/{vendor-base-ui-CQ6wEonS.js → vendor-base-ui-9w7J6BvW.js} +7246 -7245
  142. package/dist/{vendor-base-ui-CQ6wEonS.js.map → vendor-base-ui-9w7J6BvW.js.map} +1 -1
  143. package/package.json +6 -1
  144. package/scripts/component-registry/discovery.ts +1 -7
  145. package/dist/clipboard-text-B32_yb2r.js +0 -108
  146. package/dist/clipboard-text-B32_yb2r.js.map +0 -1
  147. package/dist/combobox-C9koouxM.js.map +0 -1
  148. package/dist/dialog-CpCeOqSZ.js.map +0 -1
  149. package/dist/dropdown-DFeFcKfn.js.map +0 -1
  150. package/dist/menubar-CbXWXQYR.js.map +0 -1
@@ -53,3 +53,544 @@
53
53
  .animate-refresh {
54
54
  animation: refresh 1s linear infinite;
55
55
  }
56
+
57
+ /* ============================================
58
+ react-day-picker styles for Calendar/DatePicker
59
+ ============================================ */
60
+
61
+ .rdp-root {
62
+ /* Prevent horizontal jitter from number width changes */
63
+ font-variant-numeric: tabular-nums;
64
+ --rdp-cell-padding: 2px;
65
+ --rdp-day-height: calc(2rem + var(--rdp-cell-padding) * 2);
66
+ --rdp-day-width: calc(2rem + var(--rdp-cell-padding) * 2);
67
+ --rdp-day_button-border-radius: 0.375rem;
68
+ --rdp-day_button-border: none;
69
+ --rdp-day_button-height: 2rem;
70
+ --rdp-day_button-width: 2rem;
71
+ --rdp-selected-border: none;
72
+ --rdp-disabled-opacity: 0.4;
73
+ --rdp-outside-opacity: 0.4;
74
+ --rdp-dropdown-gap: 0.5rem;
75
+ --rdp-months-gap: 1rem;
76
+ --rdp-nav_button-disabled-opacity: 0.5;
77
+ --rdp-nav_button-height: 2rem;
78
+ --rdp-nav_button-width: 2rem;
79
+ --rdp-nav-height: 2.5rem;
80
+ --rdp-week_number-border-radius: 0.375rem;
81
+ --rdp-week_number-border: none;
82
+ --rdp-week_number-height: var(--rdp-day-height);
83
+ --rdp-week_number-opacity: 0.75;
84
+ --rdp-week_number-width: var(--rdp-day-width);
85
+ --rdp-weekday-opacity: 1;
86
+ --rdp-weekday-padding: 0.5rem 0;
87
+ --rdp-gradient-direction: 90deg;
88
+ --rdp-animation_duration: 0.2s;
89
+ --rdp-animation_timing: ease-out;
90
+
91
+ /* Light mode colors */
92
+ --rdp-accent-color: oklch(20.5% 0 0);
93
+ --rdp-accent-background-color: oklch(92.2% 0 0);
94
+ --rdp-range_middle-background-color: oklch(92.2% 0 0);
95
+ --rdp-range_middle-color: oklch(21% 0.006 285.885);
96
+ --rdp-range_start-color: oklch(97% 0 0);
97
+ --rdp-range_start-date-background-color: oklch(20.5% 0 0);
98
+ --rdp-range_end-color: oklch(97% 0 0);
99
+ --rdp-range_end-date-background-color: oklch(20.5% 0 0);
100
+ --rdp-today-color: oklch(54.6% 0.215 262.881);
101
+ --rdp-day-color: oklch(21% 0.006 285.885);
102
+ --rdp-day-color-subtle: oklch(55.6% 0 0);
103
+ --rdp-nav-bg: transparent;
104
+ --rdp-nav-border: oklch(14.5% 0 0 / 0.1);
105
+ --rdp-hover-bg: oklch(90% 0 0);
106
+ --rdp-fill-hover-bg: oklch(87% 0 0);
107
+ --rdp-focus-ring: oklch(75% 0 0);
108
+
109
+ position: relative;
110
+ box-sizing: border-box;
111
+ }
112
+
113
+ [data-mode="dark"] .rdp-root {
114
+ /* Dark mode colors */
115
+ --rdp-accent-color: oklch(97% 0 0);
116
+ --rdp-accent-background-color: oklch(35% 0 0);
117
+ --rdp-range_middle-background-color: oklch(28% 0 0);
118
+ --rdp-range_middle-color: oklch(97% 0 0);
119
+ --rdp-range_start-color: oklch(20.5% 0 0);
120
+ --rdp-range_start-date-background-color: oklch(97% 0 0);
121
+ --rdp-range_end-color: oklch(20.5% 0 0);
122
+ --rdp-range_end-date-background-color: oklch(97% 0 0);
123
+ --rdp-today-color: oklch(62.3% 0.214 259.815);
124
+ --rdp-day-color: oklch(97% 0 0);
125
+ --rdp-day-color-subtle: oklch(70% 0 0);
126
+ --rdp-nav-bg: transparent;
127
+ --rdp-nav-border: oklch(26.9% 0 0);
128
+ --rdp-hover-bg: oklch(20% 0 0);
129
+ --rdp-fill-hover-bg: oklch(25% 0 0);
130
+ --rdp-focus-ring: oklch(45% 0 0);
131
+ }
132
+
133
+ .rdp-root[dir="rtl"] {
134
+ --rdp-gradient-direction: -90deg;
135
+ }
136
+
137
+ .rdp-root * {
138
+ box-sizing: border-box;
139
+ }
140
+
141
+ /* Day cells */
142
+ .rdp-day {
143
+ width: var(--rdp-day-width);
144
+ height: var(--rdp-day-height);
145
+ text-align: center;
146
+ padding: var(--rdp-cell-padding);
147
+ }
148
+
149
+ .rdp-day_button {
150
+ background: none;
151
+ padding: 0;
152
+ margin: 0;
153
+ cursor: pointer;
154
+ font: inherit;
155
+ font-size: 0.8125rem;
156
+ color: var(--rdp-day-color);
157
+ justify-content: center;
158
+ align-items: center;
159
+ display: flex;
160
+ width: var(--rdp-day_button-width);
161
+ height: var(--rdp-day_button-height);
162
+ border: var(--rdp-day_button-border);
163
+ border-radius: var(--rdp-day_button-border-radius);
164
+ outline: none;
165
+ transition:
166
+ background-color 0.15s ease,
167
+ color 0.15s ease;
168
+ }
169
+
170
+ .rdp-day_button:focus-visible {
171
+ box-shadow: inset 0 0 0 2px var(--rdp-focus-ring);
172
+ }
173
+
174
+ .rdp-day_button:hover {
175
+ background-color: var(--rdp-hover-bg);
176
+ }
177
+
178
+ .rdp-day_button:disabled {
179
+ cursor: not-allowed;
180
+ }
181
+
182
+ /* Caption / Month header */
183
+ .rdp-caption_label {
184
+ z-index: 1;
185
+ position: relative;
186
+ display: inline-flex;
187
+ align-items: center;
188
+ white-space: nowrap;
189
+ border: 0;
190
+ font-weight: 600;
191
+ color: var(--rdp-day-color);
192
+ }
193
+
194
+ /* Navigation buttons - styled like outline button sm */
195
+ .rdp-button_next,
196
+ .rdp-button_previous {
197
+ border: none;
198
+ background: transparent !important;
199
+ padding: 0;
200
+ margin: 0;
201
+ cursor: pointer;
202
+ font: inherit;
203
+ color: var(--rdp-day-color);
204
+ display: inline-flex;
205
+ align-items: center;
206
+ justify-content: center;
207
+ position: relative;
208
+ appearance: none;
209
+ width: 1.5rem !important;
210
+ height: 1.5rem !important;
211
+ border-radius: 0.375rem;
212
+ box-shadow: inset 0 0 0 1px var(--rdp-nav-border);
213
+ outline: none;
214
+ transition:
215
+ background-color 0.15s ease,
216
+ box-shadow 0.15s ease;
217
+ }
218
+
219
+ .rdp-button_next:hover,
220
+ .rdp-button_previous:hover {
221
+ background: var(--rdp-hover-bg) !important;
222
+ }
223
+
224
+ .rdp-button_next:focus-visible,
225
+ .rdp-button_previous:focus-visible {
226
+ box-shadow: inset 0 0 0 2px var(--rdp-focus-ring);
227
+ }
228
+
229
+ .rdp-button_next:disabled,
230
+ .rdp-button_next[aria-disabled="true"],
231
+ .rdp-button_previous:disabled,
232
+ .rdp-button_previous[aria-disabled="true"] {
233
+ cursor: not-allowed;
234
+ opacity: var(--rdp-nav_button-disabled-opacity);
235
+ }
236
+
237
+ .rdp-chevron {
238
+ display: inline-block;
239
+ fill: var(--rdp-day-color);
240
+ }
241
+
242
+ .rdp-root[dir="rtl"] .rdp-nav .rdp-chevron {
243
+ transform: rotate(180deg);
244
+ transform-origin: 50%;
245
+ }
246
+
247
+ /* Dropdowns */
248
+ .rdp-dropdowns {
249
+ position: relative;
250
+ display: inline-flex;
251
+ align-items: center;
252
+ gap: var(--rdp-dropdown-gap);
253
+ }
254
+
255
+ .rdp-dropdown {
256
+ z-index: 2;
257
+ opacity: 0;
258
+ appearance: none;
259
+ position: absolute;
260
+ inset-block-start: 0;
261
+ inset-block-end: 0;
262
+ inset-inline-start: 0;
263
+ width: 100%;
264
+ margin: 0;
265
+ padding: 0;
266
+ cursor: inherit;
267
+ border: none;
268
+ line-height: inherit;
269
+ }
270
+
271
+ .rdp-dropdown_root {
272
+ position: relative;
273
+ display: inline-flex;
274
+ align-items: center;
275
+ }
276
+
277
+ .rdp-dropdown_root[data-disabled="true"] .rdp-chevron {
278
+ opacity: var(--rdp-disabled-opacity);
279
+ }
280
+
281
+ /* Month caption */
282
+ .rdp-month_caption {
283
+ display: flex;
284
+ align-content: center;
285
+ height: var(--rdp-nav-height);
286
+ font-weight: 600;
287
+ }
288
+
289
+ .rdp-root[data-nav-layout="around"] .rdp-month,
290
+ .rdp-root[data-nav-layout="after"] .rdp-month {
291
+ position: relative;
292
+ }
293
+
294
+ .rdp-root[data-nav-layout="around"] .rdp-month_caption {
295
+ justify-content: center;
296
+ margin-inline-start: var(--rdp-nav_button-width);
297
+ margin-inline-end: var(--rdp-nav_button-width);
298
+ position: relative;
299
+ }
300
+
301
+ .rdp-root[data-nav-layout="around"] .rdp-button_previous {
302
+ position: absolute;
303
+ inset-inline-start: 0;
304
+ top: 0;
305
+ height: var(--rdp-nav-height);
306
+ display: inline-flex;
307
+ }
308
+
309
+ .rdp-root[data-nav-layout="around"] .rdp-button_next {
310
+ position: absolute;
311
+ inset-inline-end: 0;
312
+ top: 0;
313
+ height: var(--rdp-nav-height);
314
+ display: inline-flex;
315
+ justify-content: center;
316
+ }
317
+
318
+ /* Months container */
319
+ .rdp-months {
320
+ position: relative;
321
+ display: flex;
322
+ flex-wrap: wrap;
323
+ gap: var(--rdp-months-gap);
324
+ max-width: fit-content;
325
+ }
326
+
327
+ .rdp-month_grid {
328
+ border-collapse: collapse;
329
+ border-spacing: 0;
330
+ }
331
+
332
+ /* Navigation bar */
333
+ .rdp-nav {
334
+ position: absolute;
335
+ inset-block-start: 0;
336
+ inset-inline-end: 0;
337
+ display: flex;
338
+ align-items: center;
339
+ gap: 0.25rem;
340
+ height: var(--rdp-nav-height);
341
+ }
342
+
343
+ /* Weekday headers */
344
+ .rdp-weekday {
345
+ opacity: var(--rdp-weekday-opacity);
346
+ padding: var(--rdp-weekday-padding);
347
+ font-weight: 500;
348
+ font-size: smaller;
349
+ text-align: center;
350
+ color: var(--rdp-day-color-subtle);
351
+ }
352
+
353
+ /* Week numbers */
354
+ .rdp-week_number {
355
+ opacity: var(--rdp-week_number-opacity);
356
+ font-weight: 400;
357
+ font-size: small;
358
+ height: var(--rdp-week_number-height);
359
+ width: var(--rdp-week_number-width);
360
+ border: var(--rdp-week_number-border);
361
+ border-radius: var(--rdp-week_number-border-radius);
362
+ text-align: center;
363
+ color: var(--rdp-day-color-subtle);
364
+ }
365
+
366
+ /* DAY MODIFIERS */
367
+
368
+ /* Today (only when not selected) */
369
+ .rdp-today:not(.rdp-outside):not(.rdp-selected) .rdp-day_button {
370
+ color: var(--rdp-today-color);
371
+ font-weight: 600;
372
+ }
373
+
374
+ /* Selected (single/multiple selection mode) */
375
+ .rdp-selected .rdp-day_button {
376
+ background-color: var(--rdp-accent-color);
377
+ color: var(--rdp-range_start-color);
378
+ border-radius: var(--rdp-day_button-border-radius);
379
+ }
380
+
381
+ .rdp-selected .rdp-day_button:hover {
382
+ background-color: var(--rdp-accent-color);
383
+ }
384
+
385
+ /* Outside (days from adjacent months) */
386
+ .rdp-outside .rdp-day_button {
387
+ opacity: var(--rdp-outside-opacity);
388
+ color: var(--rdp-day-color-subtle);
389
+ }
390
+
391
+ /* Disabled */
392
+ .rdp-disabled:not(.rdp-selected) .rdp-day_button {
393
+ opacity: var(--rdp-disabled-opacity);
394
+ cursor: not-allowed;
395
+ }
396
+
397
+ .rdp-disabled .rdp-day_button:hover {
398
+ background-color: transparent;
399
+ }
400
+
401
+ /* Hidden */
402
+ .rdp-hidden {
403
+ visibility: hidden;
404
+ }
405
+
406
+ /* RANGE SELECTION */
407
+ /* All styling goes on the CELL (<td>), buttons are transparent */
408
+
409
+ /* Range start CELL - dark bg, rounded left, flat right for continuity */
410
+ .rdp-day.rdp-range_start:not(.rdp-range_end) {
411
+ background-color: var(--rdp-range_start-date-background-color);
412
+ border-radius: var(--rdp-day_button-border-radius) 0 0
413
+ var(--rdp-day_button-border-radius);
414
+ }
415
+
416
+ /* Range start BUTTON - transparent, inherits cell appearance */
417
+ .rdp-day.rdp-range_start .rdp-day_button {
418
+ background-color: transparent;
419
+ color: var(--rdp-range_start-color);
420
+ }
421
+
422
+ .rdp-day.rdp-range_start .rdp-day_button:hover {
423
+ background-color: transparent;
424
+ }
425
+
426
+ /* Range middle CELL - solid background fills the entire cell */
427
+ .rdp-day.rdp-range_middle {
428
+ background-color: var(--rdp-range_middle-background-color);
429
+ }
430
+
431
+ /* Range middle BUTTON - transparent, shows cell background through */
432
+ .rdp-day.rdp-range_middle .rdp-day_button {
433
+ background-color: transparent;
434
+ color: var(--rdp-range_middle-color);
435
+ }
436
+
437
+ .rdp-day.rdp-range_middle .rdp-day_button:hover {
438
+ background-color: var(--rdp-fill-hover-bg);
439
+ border-radius: var(--rdp-day_button-border-radius);
440
+ }
441
+
442
+ /* Range end CELL - dark bg, flat left, rounded right */
443
+ .rdp-day.rdp-range_end:not(.rdp-range_start) {
444
+ background-color: var(--rdp-range_end-date-background-color);
445
+ border-radius: 0 var(--rdp-day_button-border-radius)
446
+ var(--rdp-day_button-border-radius) 0;
447
+ }
448
+
449
+ /* Range end BUTTON - transparent, inherits cell appearance */
450
+ .rdp-day.rdp-range_end .rdp-day_button {
451
+ background-color: transparent;
452
+ color: var(--rdp-range_end-color);
453
+ }
454
+
455
+ .rdp-day.rdp-range_end .rdp-day_button:hover {
456
+ background-color: transparent;
457
+ }
458
+
459
+ /* When start and end are the same day - fully rounded cell */
460
+ .rdp-day.rdp-range_start.rdp-range_end {
461
+ background-color: var(--rdp-range_start-date-background-color);
462
+ border-radius: var(--rdp-day_button-border-radius);
463
+ }
464
+
465
+ .rdp-day.rdp-range_start.rdp-range_end .rdp-day_button {
466
+ background-color: transparent;
467
+ color: var(--rdp-range_start-color);
468
+ }
469
+
470
+ /* Focusable days */
471
+ .rdp-focusable {
472
+ cursor: pointer;
473
+ }
474
+
475
+ /* Footer - prevent it from affecting calendar width */
476
+ .rdp-footer {
477
+ width: 0;
478
+ min-width: 100%;
479
+ padding-top: 0.5rem;
480
+ }
481
+
482
+ /* ANIMATIONS */
483
+
484
+ @keyframes rdp-slide_in_left {
485
+ from {
486
+ transform: translateX(-100%);
487
+ }
488
+ to {
489
+ transform: translateX(0);
490
+ }
491
+ }
492
+
493
+ @keyframes rdp-slide_in_right {
494
+ from {
495
+ transform: translateX(100%);
496
+ }
497
+ to {
498
+ transform: translateX(0);
499
+ }
500
+ }
501
+
502
+ @keyframes rdp-slide_out_left {
503
+ from {
504
+ transform: translateX(0);
505
+ }
506
+ to {
507
+ transform: translateX(-100%);
508
+ }
509
+ }
510
+
511
+ @keyframes rdp-slide_out_right {
512
+ from {
513
+ transform: translateX(0);
514
+ }
515
+ to {
516
+ transform: translateX(100%);
517
+ }
518
+ }
519
+
520
+ .rdp-weeks_before_enter {
521
+ animation: rdp-slide_in_left var(--rdp-animation_duration)
522
+ var(--rdp-animation_timing) forwards;
523
+ }
524
+
525
+ .rdp-weeks_before_exit {
526
+ animation: rdp-slide_out_left var(--rdp-animation_duration)
527
+ var(--rdp-animation_timing) forwards;
528
+ }
529
+
530
+ .rdp-weeks_after_enter {
531
+ animation: rdp-slide_in_right var(--rdp-animation_duration)
532
+ var(--rdp-animation_timing) forwards;
533
+ }
534
+
535
+ .rdp-weeks_after_exit {
536
+ animation: rdp-slide_out_right var(--rdp-animation_duration)
537
+ var(--rdp-animation_timing) forwards;
538
+ }
539
+
540
+ .rdp-root[dir="rtl"] .rdp-weeks_after_enter {
541
+ animation: rdp-slide_in_left var(--rdp-animation_duration)
542
+ var(--rdp-animation_timing) forwards;
543
+ }
544
+
545
+ .rdp-root[dir="rtl"] .rdp-weeks_before_exit {
546
+ animation: rdp-slide_out_right var(--rdp-animation_duration)
547
+ var(--rdp-animation_timing) forwards;
548
+ }
549
+
550
+ .rdp-root[dir="rtl"] .rdp-weeks_before_enter {
551
+ animation: rdp-slide_in_right var(--rdp-animation_duration)
552
+ var(--rdp-animation_timing) forwards;
553
+ }
554
+
555
+ .rdp-root[dir="rtl"] .rdp-weeks_after_exit {
556
+ animation: rdp-slide_out_left var(--rdp-animation_duration)
557
+ var(--rdp-animation_timing) forwards;
558
+ }
559
+
560
+ @keyframes rdp-fade_in {
561
+ from {
562
+ opacity: 0;
563
+ }
564
+ to {
565
+ opacity: 1;
566
+ }
567
+ }
568
+
569
+ @keyframes rdp-fade_out {
570
+ from {
571
+ opacity: 1;
572
+ }
573
+ to {
574
+ opacity: 0;
575
+ }
576
+ }
577
+
578
+ .rdp-caption_after_enter {
579
+ animation: rdp-fade_in var(--rdp-animation_duration)
580
+ var(--rdp-animation_timing) forwards;
581
+ }
582
+
583
+ .rdp-caption_after_exit {
584
+ animation: rdp-fade_out var(--rdp-animation_duration)
585
+ var(--rdp-animation_timing) forwards;
586
+ }
587
+
588
+ .rdp-caption_before_enter {
589
+ animation: rdp-fade_in var(--rdp-animation_duration)
590
+ var(--rdp-animation_timing) forwards;
591
+ }
592
+
593
+ .rdp-caption_before_exit {
594
+ animation: rdp-fade_out var(--rdp-animation_duration)
595
+ var(--rdp-animation_timing) forwards;
596
+ }
@@ -2,8 +2,8 @@
2
2
  import { jsx as o, jsxs as R } from "react/jsx-runtime";
3
3
  import { forwardRef as _, createContext as U, useContext as B } from "react";
4
4
  import { c as u } from "./cn-Bhsu1vx2.js";
5
- import { F as D } from "./field-Dt-XuSaQ.js";
6
- import { N as G, O as K, aM as F, aN as I } from "./vendor-base-ui-CQ6wEonS.js";
5
+ import { F as D } from "./field-DCq04TgZ.js";
6
+ import { N as G, O as K, aZ as F, a_ as I } from "./vendor-base-ui-9w7J6BvW.js";
7
7
  const y = {
8
8
  size: {
9
9
  sm: {
@@ -73,7 +73,7 @@ const P = U({
73
73
  className: x,
74
74
  role: p,
75
75
  "aria-checked": v,
76
- "aria-pressed": q,
76
+ "aria-pressed": E,
77
77
  ...j
78
78
  } = N, L = u(
79
79
  "interactive flex items-center gap-2 rounded-full border border-transparent bg-kumo-recessed p-1 transition-colors",
@@ -218,7 +218,7 @@ const z = _(
218
218
  }
219
219
  );
220
220
  z.displayName = "Switch.Item";
221
- function M({
221
+ function V({
222
222
  legend: a,
223
223
  children: l,
224
224
  error: e,
@@ -244,14 +244,14 @@ function M({
244
244
  }
245
245
  ) });
246
246
  }
247
- const V = Object.assign(T, {
247
+ const q = Object.assign(T, {
248
248
  Item: z,
249
- Group: M
249
+ Group: V
250
250
  });
251
- V.displayName = "Switch";
251
+ q.displayName = "Switch";
252
252
  export {
253
253
  y as K,
254
- V as S,
254
+ q as S,
255
255
  C as a
256
256
  };
257
- //# sourceMappingURL=switch-Tu34uFoa.js.map
257
+ //# sourceMappingURL=switch-CmsZ4z-g.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"switch-Tu34uFoa.js","sources":["../src/components/switch/switch.tsx"],"sourcesContent":["import { Switch as BaseSwitch } from \"@base-ui/react/switch\";\nimport {\n forwardRef,\n type ButtonHTMLAttributes,\n type Ref,\n type ReactNode,\n createContext,\n useContext,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Field } from \"../field/field\";\nimport { Fieldset } from \"@base-ui/react/fieldset\";\n\n/** Switch size and variant definitions mapping names to their Tailwind classes. */\nexport const KUMO_SWITCH_VARIANTS = {\n size: {\n sm: {\n classes: \"h-5.5 w-8.5\",\n description: \"Small switch for compact UIs\",\n },\n base: {\n classes: \"h-6.5 w-10.5\",\n description: \"Default switch size\",\n },\n lg: {\n classes: \"h-7.5 w-12.5\",\n description: \"Large switch for prominent toggles\",\n },\n },\n variant: {\n default: {\n classes: \"\",\n description: \"Default switch appearance\",\n },\n error: {\n classes: \"ring-kumo-danger\",\n description: \"Error state for validation failures\",\n },\n },\n} as const;\n\nexport const KUMO_SWITCH_DEFAULT_VARIANTS = {\n size: \"base\",\n variant: \"default\",\n} as const;\n\n// Derived types from KUMO_SWITCH_VARIANTS\nexport type KumoSwitchSize = keyof typeof KUMO_SWITCH_VARIANTS.size;\nexport type KumoSwitchVariant = keyof typeof KUMO_SWITCH_VARIANTS.variant;\n\nexport interface KumoSwitchVariantsProps {\n /**\n * Switch size.\n * - `\"sm\"` — Small for compact UIs\n * - `\"base\"` — Default size\n * - `\"lg\"` — Large for prominent toggles\n * @default \"base\"\n */\n size?: KumoSwitchSize;\n /**\n * Visual variant.\n * - `\"default\"` — Standard switch appearance\n * - `\"error\"` — Error state for validation failures\n * @default \"default\"\n */\n variant?: KumoSwitchVariant;\n}\n\nexport function switchVariants({\n size = KUMO_SWITCH_DEFAULT_VARIANTS.size,\n variant = KUMO_SWITCH_DEFAULT_VARIANTS.variant,\n}: KumoSwitchVariantsProps = {}) {\n return cn(\n KUMO_SWITCH_VARIANTS.size[size].classes,\n KUMO_SWITCH_VARIANTS.variant[variant].classes,\n );\n}\n\n// Legacy type aliases for backwards compatibility\nexport type SwitchSize = KumoSwitchSize;\nexport type SwitchVariant = KumoSwitchVariant;\n\n// Context for passing controlFirst from Group to Items\nconst SwitchGroupContext = createContext<{ controlFirst: boolean }>({\n controlFirst: true,\n});\n\n/**\n * Single switch component props (with built-in Field)\n *\n * Usage patterns:\n *\n * Basic usage:\n * ```tsx\n * <Switch label=\"Enable notifications\" checked={true} onCheckedChange={setChecked} />\n * ```\n *\n * Label first layout:\n * ```tsx\n * <Switch label=\"Dark mode\" checked={false} onCheckedChange={setChecked} controlFirst={false} />\n * ```\n *\n * Error variant (visual only, no error text):\n * ```tsx\n * <Switch label=\"Required setting\" variant=\"error\" checked={false} onCheckedChange={setChecked} />\n * ```\n *\n * @property {string} label - Label text for the switch (Field wrapper is built-in)\n * @property {boolean} [controlFirst] - When true (default), switch appears before label\n */\nexport type SwitchProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\"\n> & {\n /** Visual variant: \"default\" or \"error\" for validation failures (visual only, no error text) */\n variant?: SwitchVariant;\n /** Label content for the switch (Field wrapper is built-in) - can be a string or any React node. Optional when used standalone for visual-only purposes. */\n label?: ReactNode;\n /** Tooltip content to display next to the label via an info icon */\n labelTooltip?: ReactNode;\n /**\n * Whether the switch is required.\n * When explicitly false, shows \"(optional)\" text after the label.\n */\n required?: boolean;\n /** When true (default), switch appears before label. When false, label appears before switch. */\n controlFirst?: boolean;\n size?: KumoSwitchSize;\n checked?: boolean;\n disabled?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n transitioning?: boolean;\n};\n\n/**\n * Switch group component props (with built-in Fieldset)\n *\n * Usage:\n * ```tsx\n * <Switch.Group\n * legend=\"Notification settings\"\n * error=\"You must enable at least one notification type\"\n * >\n * <Switch.Item label=\"Email notifications\" value=\"email\" />\n * <Switch.Item label=\"SMS notifications\" value=\"sms\" />\n * </Switch.Group>\n * ```\n */\nexport interface SwitchGroupProps {\n /** Legend text for the group */\n legend: string;\n /** Child Switch.Item components */\n children: ReactNode;\n /** Error message for the group (only appears in groups, not single switches) */\n error?: string;\n /** Helper text for the group */\n description?: ReactNode;\n /** Whether all switches in the group are disabled */\n disabled?: boolean;\n /** When true (default), switch appears before label. When false, label appears before switch. */\n controlFirst?: boolean;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Individual switch item within a group\n */\nexport type SwitchItemProps = {\n /** Visual variant: \"default\" or \"error\" for validation failures */\n variant?: SwitchVariant;\n /** Label text displayed next to switch */\n label: string;\n /** Additional CSS classes for the label wrapper */\n className?: string;\n checked?: boolean;\n disabled?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n size?: KumoSwitchSize;\n transitioning?: boolean;\n};\n\n// Single switch with built-in Field\nconst SwitchBase = forwardRef<HTMLButtonElement, SwitchProps>(\n (\n {\n className,\n checked,\n disabled,\n size = \"base\",\n variant = \"default\",\n label,\n labelTooltip,\n required,\n controlFirst = true,\n onCheckedChange,\n transitioning,\n ...props\n },\n ref,\n ) => {\n // For aria-label, only use string labels (ReactNode labels can't be used for aria-label)\n const ariaLabelFallback = typeof label === \"string\" ? label : \"Switch\";\n const switchControl = (\n <BaseSwitch.Root\n ref={ref}\n checked={checked}\n disabled={disabled}\n onCheckedChange={onCheckedChange}\n nativeButton\n render={(rootProps, state) => {\n const {\n ref: rootRef,\n className: baseClassName,\n role: baseRole,\n \"aria-checked\": _ariaChecked,\n \"aria-pressed\": _ariaPressed,\n ...restRootProps\n } = rootProps as typeof rootProps & {\n ref?: Ref<HTMLButtonElement>;\n className?: string;\n role?: string;\n \"aria-checked\"?: boolean;\n \"aria-pressed\"?: boolean;\n };\n\n const mergedClassName = cn(\n \"interactive flex items-center gap-2 rounded-full border border-transparent bg-kumo-recessed p-1 transition-colors\",\n switchVariants({ size, variant }),\n {\n \"bg-kumo-brand\": state.checked && !disabled && variant !== \"error\",\n \"bg-kumo-danger\": state.checked && !disabled && variant === \"error\",\n \"hover:bg-kumo-brand-hover\":\n state.checked &&\n !transitioning &&\n !disabled &&\n variant !== \"error\",\n \"hover:bg-kumo-danger/90\":\n state.checked &&\n !transitioning &&\n !disabled &&\n variant === \"error\",\n \"hover:bg-kumo-interact\": !state.checked && !transitioning && !disabled,\n \"cursor-not-allowed opacity-50\": disabled,\n },\n transitioning ? \"cursor-wait\" : !disabled ? \"cursor-pointer\" : \"\",\n className,\n baseClassName,\n );\n\n const role =\n (props.role as string | undefined) ?? baseRole ?? \"switch\";\n const checkedA11yProps =\n role === \"switch\"\n ? { \"aria-checked\": state.checked }\n : { \"aria-pressed\": state.checked };\n\n return (\n <button\n {...restRootProps}\n {...props}\n ref={rootRef}\n type=\"button\"\n role={role}\n {...checkedA11yProps}\n aria-busy={transitioning || undefined}\n aria-label={props[\"aria-label\"] ?? ariaLabelFallback}\n className={mergedClassName}\n >\n <BaseSwitch.Thumb\n className={cn(\n \"pointer-events-none aspect-square h-full rounded-full bg-white transition-all\",\n {\n \"translate-x-full rtl:translate-x-[-100%]\": state.checked,\n },\n )}\n />\n </button>\n );\n }}\n />\n );\n\n // Wrap in Field (built-in) - no description for single switches\n // If no label provided, return bare switch (for use in other components)\n if (!label) {\n return switchControl;\n }\n\n return (\n <Field\n label={label}\n required={required}\n labelTooltip={labelTooltip}\n controlFirst={controlFirst}\n >\n {switchControl}\n </Field>\n );\n },\n);\n\nSwitchBase.displayName = \"Switch\";\n\n// Switch.Item for use within Switch.Group\nconst SwitchItem = forwardRef<HTMLButtonElement, SwitchItemProps>(\n (\n {\n className,\n checked,\n disabled,\n size = \"base\",\n variant = \"default\",\n label,\n onCheckedChange,\n transitioning,\n },\n ref,\n ) => {\n const { controlFirst } = useContext(SwitchGroupContext);\n\n return (\n <label\n className={cn(\n \"relative inline-flex items-center gap-2\",\n // Control first (default): switch before label\n // Label first: label before switch using flex-row-reverse\n !controlFirst && \"flex-row-reverse justify-end\",\n disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\",\n className,\n )}\n >\n <BaseSwitch.Root\n ref={ref}\n checked={checked}\n disabled={disabled}\n onCheckedChange={onCheckedChange}\n nativeButton\n render={(rootProps, state) => {\n const {\n ref: rootRef,\n className: baseClassName,\n role: baseRole,\n \"aria-checked\": _ariaChecked,\n \"aria-pressed\": _ariaPressed,\n ...restRootProps\n } = rootProps as typeof rootProps & {\n ref?: Ref<HTMLButtonElement>;\n className?: string;\n role?: string;\n \"aria-checked\"?: boolean;\n \"aria-pressed\"?: boolean;\n };\n\n const mergedClassName = cn(\n \"interactive flex items-center gap-2 rounded-full border border-transparent bg-kumo-recessed p-1 transition-colors\",\n switchVariants({ size, variant }),\n {\n \"bg-kumo-brand\": state.checked && !disabled && variant !== \"error\",\n \"bg-kumo-danger\": state.checked && !disabled && variant === \"error\",\n \"hover:bg-kumo-brand-hover\":\n state.checked &&\n !transitioning &&\n !disabled &&\n variant !== \"error\",\n \"hover:bg-kumo-danger/90\":\n state.checked &&\n !transitioning &&\n !disabled &&\n variant === \"error\",\n \"hover:bg-kumo-interact\": !state.checked && !transitioning && !disabled,\n \"cursor-not-allowed opacity-50\": disabled,\n },\n transitioning ? \"cursor-wait\" : !disabled ? \"cursor-pointer\" : \"\",\n baseClassName,\n );\n\n const role = baseRole ?? \"switch\";\n const checkedA11yProps =\n role === \"switch\"\n ? { \"aria-checked\": state.checked }\n : { \"aria-pressed\": state.checked };\n\n return (\n <button\n {...restRootProps}\n ref={rootRef}\n type=\"button\"\n role={role}\n {...checkedA11yProps}\n aria-busy={transitioning || undefined}\n className={mergedClassName}\n >\n <BaseSwitch.Thumb\n className={cn(\n \"pointer-events-none aspect-square h-full rounded-full bg-white transition-all\",\n {\n \"translate-x-full rtl:translate-x-[-100%]\": state.checked,\n },\n )}\n />\n </button>\n );\n }}\n />\n <span className=\"text-base font-medium text-kumo-default\">{label}</span>\n </label>\n );\n },\n);\n\nSwitchItem.displayName = \"Switch.Item\";\n\n// Switch.Group with built-in Fieldset\nfunction SwitchGroup({\n legend,\n children,\n error,\n description,\n disabled,\n controlFirst = true,\n className,\n}: SwitchGroupProps) {\n return (\n <SwitchGroupContext.Provider value={{ controlFirst }}>\n <Fieldset.Root\n className={cn(\n \"flex flex-col gap-4 rounded-lg border border-kumo-line p-4\",\n className,\n )}\n disabled={disabled}\n >\n <Fieldset.Legend className=\"text-lg font-medium text-kumo-default\">\n {legend}\n </Fieldset.Legend>\n <div className=\"flex flex-col gap-2\">{children}</div>\n {error && <p className=\"text-sm text-kumo-danger\">{error}</p>}\n {description && <p className=\"text-sm text-kumo-subtle\">{description}</p>}\n </Fieldset.Root>\n </SwitchGroupContext.Provider>\n );\n}\n\n// Compound component\nexport const Switch = Object.assign(SwitchBase, {\n Item: SwitchItem,\n Group: SwitchGroup,\n});\n\nSwitch.displayName = \"Switch\";\n"],"names":["KUMO_SWITCH_VARIANTS","KUMO_SWITCH_DEFAULT_VARIANTS","switchVariants","size","variant","cn","SwitchGroupContext","createContext","SwitchBase","forwardRef","className","checked","disabled","label","labelTooltip","required","controlFirst","onCheckedChange","transitioning","props","ref","ariaLabelFallback","switchControl","jsx","BaseSwitch.Root","rootProps","state","rootRef","baseClassName","baseRole","_ariaChecked","_ariaPressed","restRootProps","mergedClassName","role","checkedA11yProps","BaseSwitch.Thumb","Field","SwitchItem","useContext","jsxs","SwitchGroup","legend","children","error","description","Fieldset.Root","Fieldset.Legend","Switch"],"mappings":"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"}
1
+ {"version":3,"file":"switch-CmsZ4z-g.js","sources":["../src/components/switch/switch.tsx"],"sourcesContent":["import { Switch as BaseSwitch } from \"@base-ui/react/switch\";\nimport {\n forwardRef,\n type ButtonHTMLAttributes,\n type Ref,\n type ReactNode,\n createContext,\n useContext,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Field } from \"../field/field\";\nimport { Fieldset } from \"@base-ui/react/fieldset\";\n\n/** Switch size and variant definitions mapping names to their Tailwind classes. */\nexport const KUMO_SWITCH_VARIANTS = {\n size: {\n sm: {\n classes: \"h-5.5 w-8.5\",\n description: \"Small switch for compact UIs\",\n },\n base: {\n classes: \"h-6.5 w-10.5\",\n description: \"Default switch size\",\n },\n lg: {\n classes: \"h-7.5 w-12.5\",\n description: \"Large switch for prominent toggles\",\n },\n },\n variant: {\n default: {\n classes: \"\",\n description: \"Default switch appearance\",\n },\n error: {\n classes: \"ring-kumo-danger\",\n description: \"Error state for validation failures\",\n },\n },\n} as const;\n\nexport const KUMO_SWITCH_DEFAULT_VARIANTS = {\n size: \"base\",\n variant: \"default\",\n} as const;\n\n// Derived types from KUMO_SWITCH_VARIANTS\nexport type KumoSwitchSize = keyof typeof KUMO_SWITCH_VARIANTS.size;\nexport type KumoSwitchVariant = keyof typeof KUMO_SWITCH_VARIANTS.variant;\n\nexport interface KumoSwitchVariantsProps {\n /**\n * Switch size.\n * - `\"sm\"` — Small for compact UIs\n * - `\"base\"` — Default size\n * - `\"lg\"` — Large for prominent toggles\n * @default \"base\"\n */\n size?: KumoSwitchSize;\n /**\n * Visual variant.\n * - `\"default\"` — Standard switch appearance\n * - `\"error\"` — Error state for validation failures\n * @default \"default\"\n */\n variant?: KumoSwitchVariant;\n}\n\nexport function switchVariants({\n size = KUMO_SWITCH_DEFAULT_VARIANTS.size,\n variant = KUMO_SWITCH_DEFAULT_VARIANTS.variant,\n}: KumoSwitchVariantsProps = {}) {\n return cn(\n KUMO_SWITCH_VARIANTS.size[size].classes,\n KUMO_SWITCH_VARIANTS.variant[variant].classes,\n );\n}\n\n// Legacy type aliases for backwards compatibility\nexport type SwitchSize = KumoSwitchSize;\nexport type SwitchVariant = KumoSwitchVariant;\n\n// Context for passing controlFirst from Group to Items\nconst SwitchGroupContext = createContext<{ controlFirst: boolean }>({\n controlFirst: true,\n});\n\n/**\n * Single switch component props (with built-in Field)\n *\n * Usage patterns:\n *\n * Basic usage:\n * ```tsx\n * <Switch label=\"Enable notifications\" checked={true} onCheckedChange={setChecked} />\n * ```\n *\n * Label first layout:\n * ```tsx\n * <Switch label=\"Dark mode\" checked={false} onCheckedChange={setChecked} controlFirst={false} />\n * ```\n *\n * Error variant (visual only, no error text):\n * ```tsx\n * <Switch label=\"Required setting\" variant=\"error\" checked={false} onCheckedChange={setChecked} />\n * ```\n *\n * @property {string} label - Label text for the switch (Field wrapper is built-in)\n * @property {boolean} [controlFirst] - When true (default), switch appears before label\n */\nexport type SwitchProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\"\n> & {\n /** Visual variant: \"default\" or \"error\" for validation failures (visual only, no error text) */\n variant?: SwitchVariant;\n /** Label content for the switch (Field wrapper is built-in) - can be a string or any React node. Optional when used standalone for visual-only purposes. */\n label?: ReactNode;\n /** Tooltip content to display next to the label via an info icon */\n labelTooltip?: ReactNode;\n /**\n * Whether the switch is required.\n * When explicitly false, shows \"(optional)\" text after the label.\n */\n required?: boolean;\n /** When true (default), switch appears before label. When false, label appears before switch. */\n controlFirst?: boolean;\n size?: KumoSwitchSize;\n checked?: boolean;\n disabled?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n transitioning?: boolean;\n};\n\n/**\n * Switch group component props (with built-in Fieldset)\n *\n * Usage:\n * ```tsx\n * <Switch.Group\n * legend=\"Notification settings\"\n * error=\"You must enable at least one notification type\"\n * >\n * <Switch.Item label=\"Email notifications\" value=\"email\" />\n * <Switch.Item label=\"SMS notifications\" value=\"sms\" />\n * </Switch.Group>\n * ```\n */\nexport interface SwitchGroupProps {\n /** Legend text for the group */\n legend: string;\n /** Child Switch.Item components */\n children: ReactNode;\n /** Error message for the group (only appears in groups, not single switches) */\n error?: string;\n /** Helper text for the group */\n description?: ReactNode;\n /** Whether all switches in the group are disabled */\n disabled?: boolean;\n /** When true (default), switch appears before label. When false, label appears before switch. */\n controlFirst?: boolean;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Individual switch item within a group\n */\nexport type SwitchItemProps = {\n /** Visual variant: \"default\" or \"error\" for validation failures */\n variant?: SwitchVariant;\n /** Label text displayed next to switch */\n label: string;\n /** Additional CSS classes for the label wrapper */\n className?: string;\n checked?: boolean;\n disabled?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n size?: KumoSwitchSize;\n transitioning?: boolean;\n};\n\n// Single switch with built-in Field\nconst SwitchBase = forwardRef<HTMLButtonElement, SwitchProps>(\n (\n {\n className,\n checked,\n disabled,\n size = \"base\",\n variant = \"default\",\n label,\n labelTooltip,\n required,\n controlFirst = true,\n onCheckedChange,\n transitioning,\n ...props\n },\n ref,\n ) => {\n // For aria-label, only use string labels (ReactNode labels can't be used for aria-label)\n const ariaLabelFallback = typeof label === \"string\" ? label : \"Switch\";\n const switchControl = (\n <BaseSwitch.Root\n ref={ref}\n checked={checked}\n disabled={disabled}\n onCheckedChange={onCheckedChange}\n nativeButton\n render={(rootProps, state) => {\n const {\n ref: rootRef,\n className: baseClassName,\n role: baseRole,\n \"aria-checked\": _ariaChecked,\n \"aria-pressed\": _ariaPressed,\n ...restRootProps\n } = rootProps as typeof rootProps & {\n ref?: Ref<HTMLButtonElement>;\n className?: string;\n role?: string;\n \"aria-checked\"?: boolean;\n \"aria-pressed\"?: boolean;\n };\n\n const mergedClassName = cn(\n \"interactive flex items-center gap-2 rounded-full border border-transparent bg-kumo-recessed p-1 transition-colors\",\n switchVariants({ size, variant }),\n {\n \"bg-kumo-brand\": state.checked && !disabled && variant !== \"error\",\n \"bg-kumo-danger\": state.checked && !disabled && variant === \"error\",\n \"hover:bg-kumo-brand-hover\":\n state.checked &&\n !transitioning &&\n !disabled &&\n variant !== \"error\",\n \"hover:bg-kumo-danger/90\":\n state.checked &&\n !transitioning &&\n !disabled &&\n variant === \"error\",\n \"hover:bg-kumo-interact\": !state.checked && !transitioning && !disabled,\n \"cursor-not-allowed opacity-50\": disabled,\n },\n transitioning ? \"cursor-wait\" : !disabled ? \"cursor-pointer\" : \"\",\n className,\n baseClassName,\n );\n\n const role =\n (props.role as string | undefined) ?? baseRole ?? \"switch\";\n const checkedA11yProps =\n role === \"switch\"\n ? { \"aria-checked\": state.checked }\n : { \"aria-pressed\": state.checked };\n\n return (\n <button\n {...restRootProps}\n {...props}\n ref={rootRef}\n type=\"button\"\n role={role}\n {...checkedA11yProps}\n aria-busy={transitioning || undefined}\n aria-label={props[\"aria-label\"] ?? ariaLabelFallback}\n className={mergedClassName}\n >\n <BaseSwitch.Thumb\n className={cn(\n \"pointer-events-none aspect-square h-full rounded-full bg-white transition-all\",\n {\n \"translate-x-full rtl:translate-x-[-100%]\": state.checked,\n },\n )}\n />\n </button>\n );\n }}\n />\n );\n\n // Wrap in Field (built-in) - no description for single switches\n // If no label provided, return bare switch (for use in other components)\n if (!label) {\n return switchControl;\n }\n\n return (\n <Field\n label={label}\n required={required}\n labelTooltip={labelTooltip}\n controlFirst={controlFirst}\n >\n {switchControl}\n </Field>\n );\n },\n);\n\nSwitchBase.displayName = \"Switch\";\n\n// Switch.Item for use within Switch.Group\nconst SwitchItem = forwardRef<HTMLButtonElement, SwitchItemProps>(\n (\n {\n className,\n checked,\n disabled,\n size = \"base\",\n variant = \"default\",\n label,\n onCheckedChange,\n transitioning,\n },\n ref,\n ) => {\n const { controlFirst } = useContext(SwitchGroupContext);\n\n return (\n <label\n className={cn(\n \"relative inline-flex items-center gap-2\",\n // Control first (default): switch before label\n // Label first: label before switch using flex-row-reverse\n !controlFirst && \"flex-row-reverse justify-end\",\n disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\",\n className,\n )}\n >\n <BaseSwitch.Root\n ref={ref}\n checked={checked}\n disabled={disabled}\n onCheckedChange={onCheckedChange}\n nativeButton\n render={(rootProps, state) => {\n const {\n ref: rootRef,\n className: baseClassName,\n role: baseRole,\n \"aria-checked\": _ariaChecked,\n \"aria-pressed\": _ariaPressed,\n ...restRootProps\n } = rootProps as typeof rootProps & {\n ref?: Ref<HTMLButtonElement>;\n className?: string;\n role?: string;\n \"aria-checked\"?: boolean;\n \"aria-pressed\"?: boolean;\n };\n\n const mergedClassName = cn(\n \"interactive flex items-center gap-2 rounded-full border border-transparent bg-kumo-recessed p-1 transition-colors\",\n switchVariants({ size, variant }),\n {\n \"bg-kumo-brand\": state.checked && !disabled && variant !== \"error\",\n \"bg-kumo-danger\": state.checked && !disabled && variant === \"error\",\n \"hover:bg-kumo-brand-hover\":\n state.checked &&\n !transitioning &&\n !disabled &&\n variant !== \"error\",\n \"hover:bg-kumo-danger/90\":\n state.checked &&\n !transitioning &&\n !disabled &&\n variant === \"error\",\n \"hover:bg-kumo-interact\": !state.checked && !transitioning && !disabled,\n \"cursor-not-allowed opacity-50\": disabled,\n },\n transitioning ? \"cursor-wait\" : !disabled ? \"cursor-pointer\" : \"\",\n baseClassName,\n );\n\n const role = baseRole ?? \"switch\";\n const checkedA11yProps =\n role === \"switch\"\n ? { \"aria-checked\": state.checked }\n : { \"aria-pressed\": state.checked };\n\n return (\n <button\n {...restRootProps}\n ref={rootRef}\n type=\"button\"\n role={role}\n {...checkedA11yProps}\n aria-busy={transitioning || undefined}\n className={mergedClassName}\n >\n <BaseSwitch.Thumb\n className={cn(\n \"pointer-events-none aspect-square h-full rounded-full bg-white transition-all\",\n {\n \"translate-x-full rtl:translate-x-[-100%]\": state.checked,\n },\n )}\n />\n </button>\n );\n }}\n />\n <span className=\"text-base font-medium text-kumo-default\">{label}</span>\n </label>\n );\n },\n);\n\nSwitchItem.displayName = \"Switch.Item\";\n\n// Switch.Group with built-in Fieldset\nfunction SwitchGroup({\n legend,\n children,\n error,\n description,\n disabled,\n controlFirst = true,\n className,\n}: SwitchGroupProps) {\n return (\n <SwitchGroupContext.Provider value={{ controlFirst }}>\n <Fieldset.Root\n className={cn(\n \"flex flex-col gap-4 rounded-lg border border-kumo-line p-4\",\n className,\n )}\n disabled={disabled}\n >\n <Fieldset.Legend className=\"text-lg font-medium text-kumo-default\">\n {legend}\n </Fieldset.Legend>\n <div className=\"flex flex-col gap-2\">{children}</div>\n {error && <p className=\"text-sm text-kumo-danger\">{error}</p>}\n {description && <p className=\"text-sm text-kumo-subtle\">{description}</p>}\n </Fieldset.Root>\n </SwitchGroupContext.Provider>\n );\n}\n\n// Compound component\nexport const Switch = Object.assign(SwitchBase, {\n Item: SwitchItem,\n Group: SwitchGroup,\n});\n\nSwitch.displayName = \"Switch\";\n"],"names":["KUMO_SWITCH_VARIANTS","KUMO_SWITCH_DEFAULT_VARIANTS","switchVariants","size","variant","cn","SwitchGroupContext","createContext","SwitchBase","forwardRef","className","checked","disabled","label","labelTooltip","required","controlFirst","onCheckedChange","transitioning","props","ref","ariaLabelFallback","switchControl","jsx","BaseSwitch.Root","rootProps","state","rootRef","baseClassName","baseRole","_ariaChecked","_ariaPressed","restRootProps","mergedClassName","role","checkedA11yProps","BaseSwitch.Thumb","Field","SwitchItem","useContext","jsxs","SwitchGroup","legend","children","error","description","Fieldset.Root","Fieldset.Legend","Switch"],"mappings":"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"}