sv5ui 1.1.3 → 1.3.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 (187) hide show
  1. package/README.md +6 -0
  2. package/dist/Alert/Alert.svelte +33 -22
  3. package/dist/Alert/Alert.svelte.d.ts +1 -1
  4. package/dist/Alert/alert.types.d.ts +4 -0
  5. package/dist/Avatar/Avatar.svelte +72 -46
  6. package/dist/Avatar/avatar.types.d.ts +36 -3
  7. package/dist/Avatar/avatar.variants.d.ts +138 -0
  8. package/dist/Avatar/avatar.variants.js +23 -12
  9. package/dist/Avatar/index.d.ts +1 -1
  10. package/dist/AvatarGroup/AvatarGroup.svelte +11 -6
  11. package/dist/AvatarGroup/AvatarGroup.svelte.d.ts +1 -1
  12. package/dist/AvatarGroup/avatar-group.types.d.ts +18 -3
  13. package/dist/AvatarGroup/avatar-group.variants.d.ts +85 -0
  14. package/dist/AvatarGroup/avatar-group.variants.js +19 -29
  15. package/dist/Badge/Badge.svelte +4 -3
  16. package/dist/Badge/Badge.svelte.d.ts +1 -1
  17. package/dist/Badge/badge.types.d.ts +9 -0
  18. package/dist/Breadcrumb/Breadcrumb.svelte +20 -7
  19. package/dist/Breadcrumb/Breadcrumb.svelte.d.ts +1 -1
  20. package/dist/Breadcrumb/breadcrumb.types.d.ts +5 -1
  21. package/dist/Breadcrumb/breadcrumb.variants.d.ts +15 -5
  22. package/dist/Breadcrumb/breadcrumb.variants.js +7 -3
  23. package/dist/Button/Button.svelte +71 -16
  24. package/dist/Button/Button.svelte.d.ts +0 -1
  25. package/dist/Button/button.types.d.ts +61 -2
  26. package/dist/Calendar/Calendar.svelte +4 -0
  27. package/dist/Calendar/Calendar.svelte.d.ts +1 -1
  28. package/dist/Calendar/calendar.types.d.ts +4 -0
  29. package/dist/Card/Card.svelte +5 -4
  30. package/dist/Card/Card.svelte.d.ts +1 -1
  31. package/dist/Card/card.types.d.ts +5 -1
  32. package/dist/Checkbox/Checkbox.svelte +37 -11
  33. package/dist/Checkbox/Checkbox.svelte.d.ts +1 -1
  34. package/dist/Checkbox/checkbox.types.d.ts +16 -1
  35. package/dist/Checkbox/checkbox.variants.d.ts +90 -0
  36. package/dist/Checkbox/checkbox.variants.js +73 -4
  37. package/dist/CheckboxGroup/CheckboxGroup.svelte +215 -0
  38. package/dist/CheckboxGroup/CheckboxGroup.svelte.d.ts +5 -0
  39. package/dist/CheckboxGroup/checkbox-group.types.d.ts +130 -0
  40. package/dist/CheckboxGroup/checkbox-group.types.js +1 -0
  41. package/dist/CheckboxGroup/checkbox-group.variants.d.ts +553 -0
  42. package/dist/CheckboxGroup/checkbox-group.variants.js +231 -0
  43. package/dist/CheckboxGroup/index.d.ts +2 -0
  44. package/dist/CheckboxGroup/index.js +1 -0
  45. package/dist/Chip/Chip.svelte +3 -2
  46. package/dist/Chip/Chip.svelte.d.ts +1 -1
  47. package/dist/Chip/chip.types.d.ts +5 -1
  48. package/dist/Chip/chip.variants.d.ts +135 -45
  49. package/dist/Chip/chip.variants.js +9 -9
  50. package/dist/ContextMenu/ContextMenu.svelte +87 -77
  51. package/dist/ContextMenu/ContextMenu.svelte.d.ts +1 -1
  52. package/dist/ContextMenu/context-menu.types.d.ts +9 -3
  53. package/dist/ContextMenu/context-menu.types.js +1 -1
  54. package/dist/ContextMenu/context-menu.variants.d.ts +74 -160
  55. package/dist/ContextMenu/context-menu.variants.js +63 -95
  56. package/dist/DropdownMenu/DropdownMenu.svelte +37 -43
  57. package/dist/DropdownMenu/DropdownMenu.svelte.d.ts +1 -1
  58. package/dist/DropdownMenu/dropdown-menu.types.d.ts +9 -3
  59. package/dist/DropdownMenu/dropdown-menu.types.js +1 -1
  60. package/dist/DropdownMenu/dropdown-menu.variants.d.ts +79 -230
  61. package/dist/DropdownMenu/dropdown-menu.variants.js +68 -111
  62. package/dist/DropdownMenu/index.d.ts +1 -1
  63. package/dist/Empty/Empty.svelte +68 -33
  64. package/dist/Empty/Empty.svelte.d.ts +1 -1
  65. package/dist/Empty/empty.types.d.ts +26 -9
  66. package/dist/Empty/empty.variants.d.ts +150 -130
  67. package/dist/Empty/empty.variants.js +33 -324
  68. package/dist/FieldGroup/FieldGroup.svelte +11 -6
  69. package/dist/FieldGroup/FieldGroup.svelte.d.ts +1 -1
  70. package/dist/FieldGroup/field-group.types.d.ts +4 -0
  71. package/dist/FileUpload/FileUpload.svelte +561 -0
  72. package/dist/FileUpload/FileUpload.svelte.d.ts +8 -0
  73. package/dist/FileUpload/file-upload.types.d.ts +164 -0
  74. package/dist/FileUpload/file-upload.types.js +1 -0
  75. package/dist/FileUpload/file-upload.variants.d.ts +397 -0
  76. package/dist/FileUpload/file-upload.variants.js +224 -0
  77. package/dist/FileUpload/index.d.ts +2 -0
  78. package/dist/FileUpload/index.js +1 -0
  79. package/dist/FormField/FormField.svelte +17 -18
  80. package/dist/FormField/FormField.svelte.d.ts +1 -1
  81. package/dist/FormField/form-field.types.d.ts +4 -0
  82. package/dist/Icon/Icon.svelte +13 -7
  83. package/dist/Icon/icon.types.d.ts +18 -9
  84. package/dist/Input/Input.svelte +30 -29
  85. package/dist/Kbd/Kbd.svelte +13 -3
  86. package/dist/Kbd/Kbd.svelte.d.ts +1 -1
  87. package/dist/Kbd/index.d.ts +1 -1
  88. package/dist/Kbd/kbd.types.d.ts +15 -1
  89. package/dist/Kbd/kbd.variants.d.ts +92 -30
  90. package/dist/Kbd/kbd.variants.js +55 -35
  91. package/dist/Kbd/useKbd.svelte.d.ts +2 -2
  92. package/dist/Kbd/useKbd.svelte.js +34 -41
  93. package/dist/Link/Link.svelte +69 -24
  94. package/dist/Link/Link.svelte.d.ts +1 -1
  95. package/dist/Link/link.types.d.ts +26 -8
  96. package/dist/Link/link.variants.d.ts +35 -60
  97. package/dist/Link/link.variants.js +8 -110
  98. package/dist/Modal/Modal.svelte +9 -1
  99. package/dist/Modal/modal.types.d.ts +5 -0
  100. package/dist/Modal/modal.variants.d.ts +5 -0
  101. package/dist/Modal/modal.variants.js +1 -0
  102. package/dist/Pagination/Pagination.svelte +143 -94
  103. package/dist/Pagination/Pagination.svelte.d.ts +1 -1
  104. package/dist/Pagination/index.d.ts +1 -1
  105. package/dist/Pagination/pagination.types.d.ts +21 -2
  106. package/dist/Pagination/pagination.variants.d.ts +21 -387
  107. package/dist/Pagination/pagination.variants.js +63 -59
  108. package/dist/PinInput/PinInput.svelte +150 -0
  109. package/dist/PinInput/PinInput.svelte.d.ts +6 -0
  110. package/dist/PinInput/index.d.ts +2 -0
  111. package/dist/PinInput/index.js +1 -0
  112. package/dist/PinInput/pin-input.types.d.ts +99 -0
  113. package/dist/PinInput/pin-input.types.js +1 -0
  114. package/dist/PinInput/pin-input.variants.d.ts +303 -0
  115. package/dist/PinInput/pin-input.variants.js +196 -0
  116. package/dist/Popover/Popover.svelte +9 -12
  117. package/dist/Popover/Popover.svelte.d.ts +1 -1
  118. package/dist/Popover/popover.types.d.ts +4 -0
  119. package/dist/Popover/popover.variants.d.ts +5 -75
  120. package/dist/Popover/popover.variants.js +6 -16
  121. package/dist/Progress/Progress.svelte +58 -30
  122. package/dist/Progress/progress.types.d.ts +9 -1
  123. package/dist/Progress/progress.variants.d.ts +55 -25
  124. package/dist/Progress/progress.variants.js +34 -28
  125. package/dist/RadioGroup/RadioGroup.svelte +105 -61
  126. package/dist/RadioGroup/RadioGroup.svelte.d.ts +1 -1
  127. package/dist/RadioGroup/radio-group.types.d.ts +16 -1
  128. package/dist/RadioGroup/radio-group.variants.d.ts +90 -0
  129. package/dist/RadioGroup/radio-group.variants.js +73 -4
  130. package/dist/Select/Select.svelte +9 -6
  131. package/dist/Select/Select.svelte.d.ts +1 -1
  132. package/dist/Select/select.types.d.ts +4 -0
  133. package/dist/SelectMenu/SelectMenu.svelte +436 -0
  134. package/dist/SelectMenu/SelectMenu.svelte.d.ts +5 -0
  135. package/dist/SelectMenu/index.d.ts +2 -0
  136. package/dist/SelectMenu/index.js +1 -0
  137. package/dist/SelectMenu/select-menu.types.d.ts +262 -0
  138. package/dist/SelectMenu/select-menu.types.js +1 -0
  139. package/dist/SelectMenu/select-menu.variants.d.ts +759 -0
  140. package/dist/SelectMenu/select-menu.variants.js +33 -0
  141. package/dist/Separator/Separator.svelte +1 -2
  142. package/dist/Separator/separator.variants.d.ts +1 -5
  143. package/dist/Separator/separator.variants.js +2 -2
  144. package/dist/Skeleton/Skeleton.svelte +18 -2
  145. package/dist/Skeleton/Skeleton.svelte.d.ts +1 -1
  146. package/dist/Skeleton/skeleton.types.d.ts +10 -1
  147. package/dist/Slideover/Slideover.svelte +9 -1
  148. package/dist/Slideover/slideover.types.d.ts +5 -0
  149. package/dist/Slideover/slideover.variants.d.ts +20 -5
  150. package/dist/Slideover/slideover.variants.js +4 -29
  151. package/dist/Slider/Slider.svelte +135 -0
  152. package/dist/Slider/Slider.svelte.d.ts +6 -0
  153. package/dist/Slider/index.d.ts +2 -0
  154. package/dist/Slider/index.js +1 -0
  155. package/dist/Slider/slider.types.d.ts +55 -0
  156. package/dist/Slider/slider.types.js +1 -0
  157. package/dist/Slider/slider.variants.d.ts +383 -0
  158. package/dist/Slider/slider.variants.js +102 -0
  159. package/dist/Switch/Switch.svelte +32 -31
  160. package/dist/Switch/Switch.svelte.d.ts +1 -1
  161. package/dist/Switch/switch.types.d.ts +6 -1
  162. package/dist/Switch/switch.variants.js +6 -6
  163. package/dist/Tabs/Tabs.svelte +6 -9
  164. package/dist/Tabs/Tabs.svelte.d.ts +1 -1
  165. package/dist/Tabs/tabs.types.d.ts +4 -0
  166. package/dist/Tabs/tabs.variants.js +2 -0
  167. package/dist/Textarea/Textarea.svelte +26 -25
  168. package/dist/ThemeModeButton/theme-mode-button.types.d.ts +7 -2
  169. package/dist/Timeline/Timeline.svelte +62 -19
  170. package/dist/Timeline/Timeline.svelte.d.ts +1 -1
  171. package/dist/Timeline/index.d.ts +1 -1
  172. package/dist/Timeline/timeline.types.d.ts +8 -0
  173. package/dist/Tooltip/Tooltip.svelte +12 -10
  174. package/dist/Tooltip/Tooltip.svelte.d.ts +1 -1
  175. package/dist/Tooltip/tooltip.types.d.ts +8 -4
  176. package/dist/Tooltip/tooltip.variants.d.ts +10 -75
  177. package/dist/Tooltip/tooltip.variants.js +8 -17
  178. package/dist/User/User.svelte +13 -9
  179. package/dist/User/User.svelte.d.ts +1 -1
  180. package/dist/User/user.types.d.ts +4 -0
  181. package/dist/User/user.variants.d.ts +60 -0
  182. package/dist/User/user.variants.js +13 -1
  183. package/dist/config.d.ts +8 -0
  184. package/dist/config.js +9 -1
  185. package/dist/index.d.ts +5 -0
  186. package/dist/index.js +5 -0
  187. package/package.json +2 -2
@@ -0,0 +1,383 @@
1
+ import { type VariantProps } from 'tailwind-variants';
2
+ export declare const sliderVariants: import("tailwind-variants").TVReturnType<{
3
+ color: {
4
+ primary: {
5
+ range: string;
6
+ thumb: string;
7
+ };
8
+ secondary: {
9
+ range: string;
10
+ thumb: string;
11
+ };
12
+ tertiary: {
13
+ range: string;
14
+ thumb: string;
15
+ };
16
+ success: {
17
+ range: string;
18
+ thumb: string;
19
+ };
20
+ warning: {
21
+ range: string;
22
+ thumb: string;
23
+ };
24
+ error: {
25
+ range: string;
26
+ thumb: string;
27
+ };
28
+ info: {
29
+ range: string;
30
+ thumb: string;
31
+ };
32
+ surface: {
33
+ range: string;
34
+ thumb: string;
35
+ };
36
+ };
37
+ size: {
38
+ xs: {
39
+ thumb: string;
40
+ };
41
+ sm: {
42
+ thumb: string;
43
+ };
44
+ md: {
45
+ thumb: string;
46
+ };
47
+ lg: {
48
+ thumb: string;
49
+ };
50
+ xl: {
51
+ thumb: string;
52
+ };
53
+ };
54
+ orientation: {
55
+ horizontal: {
56
+ base: string;
57
+ range: string;
58
+ };
59
+ vertical: {
60
+ root: string;
61
+ base: string;
62
+ range: string;
63
+ };
64
+ };
65
+ disabled: {
66
+ true: {
67
+ base: string;
68
+ };
69
+ };
70
+ }, {
71
+ root: string;
72
+ base: string;
73
+ track: string;
74
+ range: string;
75
+ thumb: string[];
76
+ tooltip: string[];
77
+ }, undefined, {
78
+ color: {
79
+ primary: {
80
+ range: string;
81
+ thumb: string;
82
+ };
83
+ secondary: {
84
+ range: string;
85
+ thumb: string;
86
+ };
87
+ tertiary: {
88
+ range: string;
89
+ thumb: string;
90
+ };
91
+ success: {
92
+ range: string;
93
+ thumb: string;
94
+ };
95
+ warning: {
96
+ range: string;
97
+ thumb: string;
98
+ };
99
+ error: {
100
+ range: string;
101
+ thumb: string;
102
+ };
103
+ info: {
104
+ range: string;
105
+ thumb: string;
106
+ };
107
+ surface: {
108
+ range: string;
109
+ thumb: string;
110
+ };
111
+ };
112
+ size: {
113
+ xs: {
114
+ thumb: string;
115
+ };
116
+ sm: {
117
+ thumb: string;
118
+ };
119
+ md: {
120
+ thumb: string;
121
+ };
122
+ lg: {
123
+ thumb: string;
124
+ };
125
+ xl: {
126
+ thumb: string;
127
+ };
128
+ };
129
+ orientation: {
130
+ horizontal: {
131
+ base: string;
132
+ range: string;
133
+ };
134
+ vertical: {
135
+ root: string;
136
+ base: string;
137
+ range: string;
138
+ };
139
+ };
140
+ disabled: {
141
+ true: {
142
+ base: string;
143
+ };
144
+ };
145
+ }, {
146
+ root: string;
147
+ base: string;
148
+ track: string;
149
+ range: string;
150
+ thumb: string[];
151
+ tooltip: string[];
152
+ }, import("tailwind-variants").TVReturnType<{
153
+ color: {
154
+ primary: {
155
+ range: string;
156
+ thumb: string;
157
+ };
158
+ secondary: {
159
+ range: string;
160
+ thumb: string;
161
+ };
162
+ tertiary: {
163
+ range: string;
164
+ thumb: string;
165
+ };
166
+ success: {
167
+ range: string;
168
+ thumb: string;
169
+ };
170
+ warning: {
171
+ range: string;
172
+ thumb: string;
173
+ };
174
+ error: {
175
+ range: string;
176
+ thumb: string;
177
+ };
178
+ info: {
179
+ range: string;
180
+ thumb: string;
181
+ };
182
+ surface: {
183
+ range: string;
184
+ thumb: string;
185
+ };
186
+ };
187
+ size: {
188
+ xs: {
189
+ thumb: string;
190
+ };
191
+ sm: {
192
+ thumb: string;
193
+ };
194
+ md: {
195
+ thumb: string;
196
+ };
197
+ lg: {
198
+ thumb: string;
199
+ };
200
+ xl: {
201
+ thumb: string;
202
+ };
203
+ };
204
+ orientation: {
205
+ horizontal: {
206
+ base: string;
207
+ range: string;
208
+ };
209
+ vertical: {
210
+ root: string;
211
+ base: string;
212
+ range: string;
213
+ };
214
+ };
215
+ disabled: {
216
+ true: {
217
+ base: string;
218
+ };
219
+ };
220
+ }, {
221
+ root: string;
222
+ base: string;
223
+ track: string;
224
+ range: string;
225
+ thumb: string[];
226
+ tooltip: string[];
227
+ }, undefined, unknown, unknown, undefined>>;
228
+ export type SliderVariantProps = VariantProps<typeof sliderVariants>;
229
+ export type SliderSlots = keyof ReturnType<typeof sliderVariants>;
230
+ export declare const sliderDefaults: {
231
+ defaultVariants: import("tailwind-variants").TVDefaultVariants<{
232
+ color: {
233
+ primary: {
234
+ range: string;
235
+ thumb: string;
236
+ };
237
+ secondary: {
238
+ range: string;
239
+ thumb: string;
240
+ };
241
+ tertiary: {
242
+ range: string;
243
+ thumb: string;
244
+ };
245
+ success: {
246
+ range: string;
247
+ thumb: string;
248
+ };
249
+ warning: {
250
+ range: string;
251
+ thumb: string;
252
+ };
253
+ error: {
254
+ range: string;
255
+ thumb: string;
256
+ };
257
+ info: {
258
+ range: string;
259
+ thumb: string;
260
+ };
261
+ surface: {
262
+ range: string;
263
+ thumb: string;
264
+ };
265
+ };
266
+ size: {
267
+ xs: {
268
+ thumb: string;
269
+ };
270
+ sm: {
271
+ thumb: string;
272
+ };
273
+ md: {
274
+ thumb: string;
275
+ };
276
+ lg: {
277
+ thumb: string;
278
+ };
279
+ xl: {
280
+ thumb: string;
281
+ };
282
+ };
283
+ orientation: {
284
+ horizontal: {
285
+ base: string;
286
+ range: string;
287
+ };
288
+ vertical: {
289
+ root: string;
290
+ base: string;
291
+ range: string;
292
+ };
293
+ };
294
+ disabled: {
295
+ true: {
296
+ base: string;
297
+ };
298
+ };
299
+ }, {
300
+ root: string;
301
+ base: string;
302
+ track: string;
303
+ range: string;
304
+ thumb: string[];
305
+ tooltip: string[];
306
+ }, {
307
+ color: {
308
+ primary: {
309
+ range: string;
310
+ thumb: string;
311
+ };
312
+ secondary: {
313
+ range: string;
314
+ thumb: string;
315
+ };
316
+ tertiary: {
317
+ range: string;
318
+ thumb: string;
319
+ };
320
+ success: {
321
+ range: string;
322
+ thumb: string;
323
+ };
324
+ warning: {
325
+ range: string;
326
+ thumb: string;
327
+ };
328
+ error: {
329
+ range: string;
330
+ thumb: string;
331
+ };
332
+ info: {
333
+ range: string;
334
+ thumb: string;
335
+ };
336
+ surface: {
337
+ range: string;
338
+ thumb: string;
339
+ };
340
+ };
341
+ size: {
342
+ xs: {
343
+ thumb: string;
344
+ };
345
+ sm: {
346
+ thumb: string;
347
+ };
348
+ md: {
349
+ thumb: string;
350
+ };
351
+ lg: {
352
+ thumb: string;
353
+ };
354
+ xl: {
355
+ thumb: string;
356
+ };
357
+ };
358
+ orientation: {
359
+ horizontal: {
360
+ base: string;
361
+ range: string;
362
+ };
363
+ vertical: {
364
+ root: string;
365
+ base: string;
366
+ range: string;
367
+ };
368
+ };
369
+ disabled: {
370
+ true: {
371
+ base: string;
372
+ };
373
+ };
374
+ }, {
375
+ root: string;
376
+ base: string;
377
+ track: string;
378
+ range: string;
379
+ thumb: string[];
380
+ tooltip: string[];
381
+ }>;
382
+ slots: Partial<Record<SliderSlots, string>>;
383
+ };
@@ -0,0 +1,102 @@
1
+ import { tv } from 'tailwind-variants';
2
+ export const sliderVariants = tv({
3
+ slots: {
4
+ root: '',
5
+ base: 'relative flex touch-none select-none items-center',
6
+ track: 'relative grow overflow-hidden rounded-full bg-surface-container-highest',
7
+ range: 'absolute rounded-full',
8
+ thumb: [
9
+ 'block rounded-full bg-surface shadow-sm ring-2',
10
+ 'focus-visible:outline-none focus-visible:ring-4',
11
+ 'transition-[box-shadow] duration-150',
12
+ 'data-[disabled]:pointer-events-none'
13
+ ],
14
+ tooltip: [
15
+ 'rounded px-1.5 py-0.5 text-xs font-medium',
16
+ 'bg-on-surface text-surface shadow-sm',
17
+ 'pointer-events-none select-none whitespace-nowrap',
18
+ 'mb-2.5 me-2.5'
19
+ ]
20
+ },
21
+ variants: {
22
+ color: {
23
+ primary: {
24
+ range: 'bg-primary',
25
+ thumb: 'ring-primary focus-visible:ring-primary/40'
26
+ },
27
+ secondary: {
28
+ range: 'bg-secondary',
29
+ thumb: 'ring-secondary focus-visible:ring-secondary/40'
30
+ },
31
+ tertiary: {
32
+ range: 'bg-tertiary',
33
+ thumb: 'ring-tertiary focus-visible:ring-tertiary/40'
34
+ },
35
+ success: {
36
+ range: 'bg-success',
37
+ thumb: 'ring-success focus-visible:ring-success/40'
38
+ },
39
+ warning: {
40
+ range: 'bg-warning',
41
+ thumb: 'ring-warning focus-visible:ring-warning/40'
42
+ },
43
+ error: {
44
+ range: 'bg-error',
45
+ thumb: 'ring-error focus-visible:ring-error/40'
46
+ },
47
+ info: {
48
+ range: 'bg-info',
49
+ thumb: 'ring-info focus-visible:ring-info/40'
50
+ },
51
+ surface: {
52
+ range: 'bg-on-surface',
53
+ thumb: 'ring-on-surface focus-visible:ring-on-surface/40'
54
+ }
55
+ },
56
+ size: {
57
+ xs: { thumb: 'size-3' },
58
+ sm: { thumb: 'size-3.5' },
59
+ md: { thumb: 'size-4' },
60
+ lg: { thumb: 'size-4.5' },
61
+ xl: { thumb: 'size-5' }
62
+ },
63
+ orientation: {
64
+ horizontal: {
65
+ base: 'w-full flex-row',
66
+ range: 'h-full left-0'
67
+ },
68
+ vertical: {
69
+ root: 'h-full',
70
+ base: 'h-full flex-col',
71
+ range: 'w-full bottom-0'
72
+ }
73
+ },
74
+ disabled: {
75
+ true: {
76
+ base: 'opacity-50 cursor-not-allowed'
77
+ }
78
+ }
79
+ },
80
+ compoundVariants: [
81
+ // Track thickness: size × orientation
82
+ { size: 'xs', orientation: 'horizontal', class: { track: 'h-1' } },
83
+ { size: 'sm', orientation: 'horizontal', class: { track: 'h-1.5' } },
84
+ { size: 'md', orientation: 'horizontal', class: { track: 'h-2' } },
85
+ { size: 'lg', orientation: 'horizontal', class: { track: 'h-2.5' } },
86
+ { size: 'xl', orientation: 'horizontal', class: { track: 'h-3' } },
87
+ { size: 'xs', orientation: 'vertical', class: { track: 'w-1' } },
88
+ { size: 'sm', orientation: 'vertical', class: { track: 'w-1.5' } },
89
+ { size: 'md', orientation: 'vertical', class: { track: 'w-2' } },
90
+ { size: 'lg', orientation: 'vertical', class: { track: 'w-2.5' } },
91
+ { size: 'xl', orientation: 'vertical', class: { track: 'w-3' } }
92
+ ],
93
+ defaultVariants: {
94
+ color: 'primary',
95
+ size: 'md',
96
+ orientation: 'horizontal'
97
+ }
98
+ });
99
+ export const sliderDefaults = {
100
+ defaultVariants: sliderVariants.defaultVariants,
101
+ slots: {}
102
+ };
@@ -16,6 +16,7 @@
16
16
  const icons = getComponentConfig('icons', iconsDefaults)
17
17
 
18
18
  let {
19
+ ref = $bindable(null),
19
20
  checked = $bindable(false),
20
21
  onCheckedChange,
21
22
  ui,
@@ -34,7 +35,8 @@
34
35
  description,
35
36
  labelSlot,
36
37
  descriptionSlot,
37
- class: className
38
+ class: className,
39
+ ...restProps
38
40
  }: Props = $props()
39
41
 
40
42
  const formFieldContext = getContext<
@@ -57,11 +59,13 @@
57
59
  const resolvedName = $derived(name ?? formFieldContext?.name)
58
60
  const isDisabled = $derived(disabled || loading)
59
61
 
60
- const ariaDescribedBy = $derived.by(() => {
61
- if (!formFieldContext) return undefined
62
- const fid = formFieldContext.ariaId
63
- return hasError ? `${fid}-error` : `${fid}-description ${fid}-help`
64
- })
62
+ const ariaDescribedBy = $derived(
63
+ !formFieldContext
64
+ ? undefined
65
+ : hasError
66
+ ? `${formFieldContext.ariaId}-error`
67
+ : `${formFieldContext.ariaId}-description ${formFieldContext.ariaId}-help`
68
+ )
65
69
 
66
70
  const hasCheckedIcon = $derived(loading || !!checkedIcon)
67
71
  const hasUncheckedIcon = $derived(loading || !!uncheckedIcon)
@@ -74,7 +78,7 @@
74
78
  loading,
75
79
  required,
76
80
  disabled: isDisabled ? true : undefined
77
- } as const)
81
+ })
78
82
 
79
83
  const classes = $derived.by(() => {
80
84
  const slots = switchVariants(variantOpts)
@@ -85,34 +89,31 @@
85
89
  thumb: slots.thumb({ class: [config.slots.thumb, ui?.thumb] }),
86
90
  wrapper: slots.wrapper({ class: [config.slots.wrapper, ui?.wrapper] }),
87
91
  label: slots.label({ class: [config.slots.label, ui?.label] }),
88
- description: slots.description({
89
- class: [config.slots.description, ui?.description]
90
- })
92
+ description: slots.description({ class: [config.slots.description, ui?.description] })
91
93
  }
92
94
  })
93
95
 
94
- const iconUiClass = $derived([config.slots.icon, ui?.icon])
95
-
96
- const checkedIconClass = $derived.by(() => {
97
- if (!hasCheckedIcon) return undefined
98
- return switchVariants({
99
- ...variantOpts,
100
- checked: true,
101
- unchecked: loading ? true : undefined
102
- }).icon({ class: iconUiClass })
103
- })
104
-
105
- const uncheckedIconClass = $derived.by(() => {
106
- if (!hasUncheckedIcon) return undefined
107
- return switchVariants({
108
- ...variantOpts,
109
- unchecked: true,
110
- checked: loading ? true : undefined
111
- }).icon({ class: iconUiClass })
96
+ const iconClasses = $derived.by(() => {
97
+ if (!hasCheckedIcon && !hasUncheckedIcon)
98
+ return { checked: undefined, unchecked: undefined }
99
+ const iconUiClass = [config.slots.icon, ui?.icon]
100
+ return {
101
+ checked: hasCheckedIcon
102
+ ? switchVariants({ ...variantOpts, checked: true, unchecked: loading }).icon({
103
+ class: iconUiClass
104
+ })
105
+ : undefined,
106
+ unchecked:
107
+ hasUncheckedIcon && !loading
108
+ ? switchVariants({ ...variantOpts, unchecked: true }).icon({
109
+ class: iconUiClass
110
+ })
111
+ : undefined
112
+ }
112
113
  })
113
114
  </script>
114
115
 
115
- <div class={classes.root}>
116
+ <div {...restProps} bind:this={ref} class={classes.root}>
116
117
  <div class={classes.container}>
117
118
  <Switch.Root
118
119
  bind:checked
@@ -128,10 +129,10 @@
128
129
  >
129
130
  <Switch.Thumb class={classes.thumb}>
130
131
  {#if hasCheckedIcon && checkedIconName}
131
- <Icon name={checkedIconName} class={checkedIconClass} />
132
+ <Icon name={checkedIconName} class={iconClasses.checked} />
132
133
  {/if}
133
134
  {#if hasUncheckedIcon && uncheckedIconName && !loading}
134
- <Icon name={uncheckedIconName} class={uncheckedIconClass} />
135
+ <Icon name={uncheckedIconName} class={iconClasses.unchecked} />
135
136
  {/if}
136
137
  </Switch.Thumb>
137
138
  </Switch.Root>
@@ -1,6 +1,6 @@
1
1
  import type { SwitchProps } from './switch.types.js';
2
2
  export type Props = SwitchProps;
3
3
  import { Switch } from 'bits-ui';
4
- declare const Switch: import("svelte").Component<SwitchProps, {}, "checked">;
4
+ declare const Switch: import("svelte").Component<SwitchProps, {}, "ref" | "checked">;
5
5
  type Switch = ReturnType<typeof Switch>;
6
6
  export default Switch;
@@ -1,8 +1,13 @@
1
1
  import type { Snippet } from 'svelte';
2
2
  import type { Switch as SwitchPrimitive } from 'bits-ui';
3
3
  import type { ClassNameValue } from 'tailwind-merge';
4
+ import type { HTMLAttributes } from 'svelte/elements';
4
5
  import type { SwitchVariantProps, SwitchSlots } from './switch.variants.js';
5
- export type SwitchProps = Pick<SwitchPrimitive.RootProps, 'disabled' | 'name' | 'value' | 'required'> & {
6
+ export type SwitchProps = Pick<SwitchPrimitive.RootProps, 'disabled' | 'name' | 'value' | 'required'> & Omit<HTMLAttributes<HTMLElement>, 'class'> & {
7
+ /**
8
+ * Bindable reference to the root DOM element.
9
+ */
10
+ ref?: HTMLElement | null;
6
11
  /**
7
12
  * The checked state of the switch. Supports two-way binding with `bind:checked`.
8
13
  * @default false
@@ -10,7 +10,7 @@ export const switchVariants = tv({
10
10
  ],
11
11
  container: 'flex items-center',
12
12
  thumb: [
13
- 'group pointer-events-none rounded-full bg-white shadow-lg ring-0',
13
+ 'group pointer-events-none rounded-full bg-surface shadow-lg ring-0',
14
14
  'flex items-center justify-center',
15
15
  'transition-transform duration-200',
16
16
  'data-[state=unchecked]:translate-x-0'
@@ -39,35 +39,35 @@ export const switchVariants = tv({
39
39
  xs: {
40
40
  base: 'w-7',
41
41
  container: 'h-4',
42
- thumb: 'size-3 data-[state=checked]:translate-x-3',
42
+ thumb: 'size-3 data-[state=checked]:translate-x-3 rtl:data-[state=checked]:-translate-x-3',
43
43
  icon: 'size-2',
44
44
  wrapper: 'text-xs'
45
45
  },
46
46
  sm: {
47
47
  base: 'w-8',
48
48
  container: 'h-4',
49
- thumb: 'size-3.5 data-[state=checked]:translate-x-3.5',
49
+ thumb: 'size-3.5 data-[state=checked]:translate-x-3.5 rtl:data-[state=checked]:-translate-x-3.5',
50
50
  icon: 'size-2.5',
51
51
  wrapper: 'text-xs'
52
52
  },
53
53
  md: {
54
54
  base: 'w-9',
55
55
  container: 'h-5',
56
- thumb: 'size-4 data-[state=checked]:translate-x-4',
56
+ thumb: 'size-4 data-[state=checked]:translate-x-4 rtl:data-[state=checked]:-translate-x-4',
57
57
  icon: 'size-3',
58
58
  wrapper: 'text-sm'
59
59
  },
60
60
  lg: {
61
61
  base: 'w-10',
62
62
  container: 'h-5',
63
- thumb: 'size-4.5 data-[state=checked]:translate-x-4.5',
63
+ thumb: 'size-4.5 data-[state=checked]:translate-x-4.5 rtl:data-[state=checked]:-translate-x-4.5',
64
64
  icon: 'size-3.5',
65
65
  wrapper: 'text-sm'
66
66
  },
67
67
  xl: {
68
68
  base: 'w-11',
69
69
  container: 'h-6',
70
- thumb: 'size-5 data-[state=checked]:translate-x-5',
70
+ thumb: 'size-5 data-[state=checked]:translate-x-5 rtl:data-[state=checked]:-translate-x-5',
71
71
  icon: 'size-4',
72
72
  wrapper: 'text-base'
73
73
  }