@rkosafo/cai.components 0.0.75 → 0.0.78

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 (127) hide show
  1. package/README.md +8 -8
  2. package/dist/baseEditor/index.svelte +32 -32
  3. package/dist/builders/filters/FilterBuilder.svelte +641 -641
  4. package/dist/forms/FormCheckbox/FormCheckbox.svelte +53 -53
  5. package/dist/forms/FormClEditor/ClEdito.svelte +68 -68
  6. package/dist/forms/FormDatepicker/FormDatepicker.svelte +159 -159
  7. package/dist/forms/FormFileUpload/FormFileUplad.svelte +134 -134
  8. package/dist/forms/FormInput/FormInput.svelte +87 -87
  9. package/dist/forms/FormRadio/FormRadio.svelte +53 -53
  10. package/dist/forms/FormSelect/FormSelect.svelte +88 -88
  11. package/dist/forms/FormTextarea/FormTextarea.svelte +78 -78
  12. package/dist/forms/button-toggle/ButtonToggle.svelte +119 -0
  13. package/dist/forms/button-toggle/ButtonToggle.svelte.d.ts +139 -0
  14. package/dist/forms/button-toggle/ButtonToggleGroup.svelte +0 -0
  15. package/dist/forms/button-toggle/ButtonToggleGroup.svelte.d.ts +26 -0
  16. package/dist/forms/button-toggle/CheckIcon.svelte +28 -0
  17. package/dist/forms/button-toggle/CheckIcon.svelte.d.ts +4 -0
  18. package/dist/forms/button-toggle/index.d.ts +4 -0
  19. package/dist/forms/button-toggle/index.js +4 -0
  20. package/dist/forms/button-toggle/theme.d.ts +347 -0
  21. package/dist/forms/button-toggle/theme.js +129 -0
  22. package/dist/forms/checkbox/Checkbox.svelte +82 -82
  23. package/dist/forms/checkbox/CheckboxButton.svelte +92 -92
  24. package/dist/forms/datepicker/Datepicker.svelte +707 -707
  25. package/dist/forms/form/Form.svelte +69 -69
  26. package/dist/forms/input/Input.svelte +363 -363
  27. package/dist/forms/label/Label.svelte +38 -38
  28. package/dist/forms/radio/Radio.svelte +48 -48
  29. package/dist/forms/radio/RadioButton.svelte +22 -22
  30. package/dist/forms/select/Select.svelte +56 -56
  31. package/dist/forms/textarea/Textarea.svelte +165 -165
  32. package/dist/forms/toggle/Toggle.svelte +70 -0
  33. package/dist/forms/toggle/Toggle.svelte.d.ts +3 -0
  34. package/dist/forms/toggle/index.d.ts +2 -0
  35. package/dist/forms/toggle/index.js +2 -0
  36. package/dist/forms/toggle/theme.d.ts +280 -0
  37. package/dist/forms/toggle/theme.js +97 -0
  38. package/dist/index.d.ts +3 -0
  39. package/dist/index.js +3 -0
  40. package/dist/layout/Chat/CategorySelector.svelte +52 -52
  41. package/dist/layout/Chat/ChatEntry.svelte +246 -246
  42. package/dist/layout/Chat/ChatEntrySkeleton.svelte +81 -81
  43. package/dist/layout/Chat/ChatHeader.svelte +172 -172
  44. package/dist/layout/Chat/ChatInput.svelte +207 -207
  45. package/dist/layout/Chat/DraggableWindow.svelte +230 -230
  46. package/dist/layout/Chat/PreviewPage.svelte +182 -182
  47. package/dist/layout/Chat/RichText.svelte +216 -216
  48. package/dist/layout/ComponentCanvas/Canvas.svelte +40 -40
  49. package/dist/layout/ComponentCanvas/ComponentRenderer.svelte +85 -85
  50. package/dist/layout/TF/Content/Content.svelte +21 -21
  51. package/dist/layout/TF/Header/Header.svelte +166 -166
  52. package/dist/layout/TF/Sidebar/Sidebar.svelte +148 -148
  53. package/dist/layout/TF/Wrapper/Wrapper.svelte +17 -17
  54. package/dist/layout/mailing/MailPaginator.svelte +36 -36
  55. package/dist/layout/mailing/MailSidebar.svelte +39 -39
  56. package/dist/layout/mailing/MailToolBar.svelte +174 -174
  57. package/dist/layout/mailing/MailingContent.svelte +10 -10
  58. package/dist/layout/mailing/MailingHeader.svelte +55 -55
  59. package/dist/layout/mailing/MailingMessageCard.svelte +112 -112
  60. package/dist/layout/mailing/MailingMessageViewer.svelte +87 -87
  61. package/dist/layout/mailing/MailingModule.svelte +448 -448
  62. package/dist/styles/docs.css +615 -615
  63. package/dist/styles/tf-layout.css +185 -185
  64. package/dist/themes/ThemeProvider.svelte +20 -20
  65. package/dist/themes/themes.d.ts +3 -0
  66. package/dist/themes/themes.js +3 -0
  67. package/dist/types/index.d.ts +57 -1
  68. package/dist/typography/heading/Heading.svelte +35 -35
  69. package/dist/ui/accordion/Accordion.svelte +49 -49
  70. package/dist/ui/accordion/AccordionItem.svelte +173 -173
  71. package/dist/ui/alert/Alert.svelte +83 -83
  72. package/dist/ui/alertDialog/AlertDialog.svelte +40 -40
  73. package/dist/ui/avatar/Avatar.svelte +77 -77
  74. package/dist/ui/box/Box.svelte +28 -28
  75. package/dist/ui/breadcrumb/Breadcrumb.svelte +39 -39
  76. package/dist/ui/buttons/ActionButton.svelte +234 -234
  77. package/dist/ui/buttons/Button.svelte +102 -102
  78. package/dist/ui/buttons/GradientButton.svelte +59 -59
  79. package/dist/ui/datatable/Datatable.svelte +525 -525
  80. package/dist/ui/drawer/Drawer.svelte +300 -300
  81. package/dist/ui/dropdown/Dropdown.svelte +36 -36
  82. package/dist/ui/dropdown/DropdownDivider.svelte +11 -11
  83. package/dist/ui/dropdown/DropdownGroup.svelte +14 -14
  84. package/dist/ui/dropdown/DropdownHeader.svelte +14 -14
  85. package/dist/ui/dropdown/DropdownItem.svelte +52 -52
  86. package/dist/ui/footer/Footer.svelte +15 -15
  87. package/dist/ui/footer/FooterBrand.svelte +37 -37
  88. package/dist/ui/footer/FooterCopyright.svelte +45 -45
  89. package/dist/ui/footer/FooterIcon.svelte +22 -22
  90. package/dist/ui/footer/FooterLink.svelte +33 -33
  91. package/dist/ui/footer/FooterLinkGroup.svelte +13 -13
  92. package/dist/ui/icons/IconifyIcon.svelte +7 -7
  93. package/dist/ui/indicator/Indicator.svelte +42 -42
  94. package/dist/ui/modal/Modal.svelte +265 -265
  95. package/dist/ui/modal/theme.d.ts +26 -26
  96. package/dist/ui/modal/theme.js +25 -25
  97. package/dist/ui/notificationList/NotificationList.svelte +123 -123
  98. package/dist/ui/pageLoader/PageLoader.svelte +14 -14
  99. package/dist/ui/paginate/Paginate.svelte +96 -96
  100. package/dist/ui/speedDial/SpeedDial.svelte +77 -0
  101. package/dist/ui/speedDial/SpeedDial.svelte.d.ts +21 -0
  102. package/dist/ui/speedDial/SpeedDialButton.svelte +75 -0
  103. package/dist/ui/speedDial/SpeedDialButton.svelte.d.ts +20 -0
  104. package/dist/ui/speedDial/SpeedDialTrigger.svelte +79 -0
  105. package/dist/ui/speedDial/SpeedDialTrigger.svelte.d.ts +18 -0
  106. package/dist/ui/speedDial/index.d.ts +4 -0
  107. package/dist/ui/speedDial/index.js +4 -0
  108. package/dist/ui/speedDial/theme.d.ts +75 -0
  109. package/dist/ui/speedDial/theme.js +35 -0
  110. package/dist/ui/tab/Tab.svelte +67 -67
  111. package/dist/ui/table/Table.svelte +396 -396
  112. package/dist/ui/tableLoader/TableLoader.svelte +24 -24
  113. package/dist/ui/toast/Toast.svelte +337 -337
  114. package/dist/ui/toast/Toast.svelte.d.ts +10 -10
  115. package/dist/ui/toast/index.d.ts +1 -2
  116. package/dist/ui/toast/index.js +3 -1
  117. package/dist/ui/toolbar/Toolbar.svelte +59 -59
  118. package/dist/ui/toolbar/ToolbarButton.svelte +56 -56
  119. package/dist/ui/toolbar/ToolbarGroup.svelte +43 -43
  120. package/dist/ui/tooltip/Tooltip.svelte +51 -51
  121. package/dist/utils/Popper.svelte +257 -257
  122. package/dist/utils/closeButton/CloseButton.svelte +88 -88
  123. package/dist/utils/index.d.ts +3 -2
  124. package/dist/utils/index.js +13 -3
  125. package/dist/utils/singleSelection.svelte.js +48 -48
  126. package/dist/youtube/index.svelte +12 -12
  127. package/package.json +2 -1
@@ -0,0 +1,347 @@
1
+ import type { Classes } from '../../themes/themeUtils.js';
2
+ import { type VariantProps } from 'tailwind-variants';
3
+ export declare const buttonToggleGroup: import("tailwind-variants").TVReturnType<{
4
+ roundedSize: {
5
+ sm: string;
6
+ md: string;
7
+ lg: string;
8
+ xl: string;
9
+ full: string;
10
+ };
11
+ }, undefined, "inline-flex border border-gray-300 overflow-hidden", {
12
+ roundedSize: {
13
+ sm: string;
14
+ md: string;
15
+ lg: string;
16
+ xl: string;
17
+ full: string;
18
+ };
19
+ }, undefined, import("tailwind-variants").TVReturnType<{
20
+ roundedSize: {
21
+ sm: string;
22
+ md: string;
23
+ lg: string;
24
+ xl: string;
25
+ full: string;
26
+ };
27
+ }, undefined, "inline-flex border border-gray-300 overflow-hidden", unknown, unknown, undefined>>;
28
+ export type ButtonToggleVariants = VariantProps<typeof buttonToggle> & Classes<typeof buttonToggle>;
29
+ export declare const buttonToggle: import("tailwind-variants").TVReturnType<{
30
+ selected: {
31
+ true: {
32
+ text: string;
33
+ };
34
+ false: {};
35
+ };
36
+ size: {
37
+ sm: {
38
+ button: string;
39
+ };
40
+ md: {
41
+ button: string;
42
+ };
43
+ lg: {
44
+ button: string;
45
+ };
46
+ xl: {
47
+ button: string;
48
+ };
49
+ };
50
+ roundedSize: {
51
+ sm: {
52
+ button: string;
53
+ };
54
+ md: {
55
+ button: string;
56
+ };
57
+ lg: {
58
+ button: string;
59
+ };
60
+ xl: {
61
+ button: string;
62
+ };
63
+ full: {
64
+ button: string;
65
+ };
66
+ };
67
+ color: {
68
+ primary: {
69
+ button: string;
70
+ };
71
+ secondary: {
72
+ button: string;
73
+ };
74
+ gray: {
75
+ button: string;
76
+ };
77
+ red: {
78
+ button: string;
79
+ };
80
+ orange: {
81
+ button: string;
82
+ };
83
+ amber: {
84
+ button: string;
85
+ };
86
+ yellow: {
87
+ button: string;
88
+ };
89
+ lime: {
90
+ button: string;
91
+ };
92
+ green: {
93
+ button: string;
94
+ };
95
+ emerald: {
96
+ button: string;
97
+ };
98
+ teal: {
99
+ button: string;
100
+ };
101
+ cyan: {
102
+ button: string;
103
+ };
104
+ sky: {
105
+ button: string;
106
+ };
107
+ blue: {
108
+ button: string;
109
+ };
110
+ indigo: {
111
+ button: string;
112
+ };
113
+ violet: {
114
+ button: string;
115
+ };
116
+ purple: {
117
+ button: string;
118
+ };
119
+ fuchsia: {
120
+ button: string;
121
+ };
122
+ pink: {
123
+ button: string;
124
+ };
125
+ rose: {
126
+ button: string;
127
+ };
128
+ none: {};
129
+ };
130
+ }, {
131
+ button: string;
132
+ content: string;
133
+ text: string;
134
+ icon: string;
135
+ }, undefined, {
136
+ selected: {
137
+ true: {
138
+ text: string;
139
+ };
140
+ false: {};
141
+ };
142
+ size: {
143
+ sm: {
144
+ button: string;
145
+ };
146
+ md: {
147
+ button: string;
148
+ };
149
+ lg: {
150
+ button: string;
151
+ };
152
+ xl: {
153
+ button: string;
154
+ };
155
+ };
156
+ roundedSize: {
157
+ sm: {
158
+ button: string;
159
+ };
160
+ md: {
161
+ button: string;
162
+ };
163
+ lg: {
164
+ button: string;
165
+ };
166
+ xl: {
167
+ button: string;
168
+ };
169
+ full: {
170
+ button: string;
171
+ };
172
+ };
173
+ color: {
174
+ primary: {
175
+ button: string;
176
+ };
177
+ secondary: {
178
+ button: string;
179
+ };
180
+ gray: {
181
+ button: string;
182
+ };
183
+ red: {
184
+ button: string;
185
+ };
186
+ orange: {
187
+ button: string;
188
+ };
189
+ amber: {
190
+ button: string;
191
+ };
192
+ yellow: {
193
+ button: string;
194
+ };
195
+ lime: {
196
+ button: string;
197
+ };
198
+ green: {
199
+ button: string;
200
+ };
201
+ emerald: {
202
+ button: string;
203
+ };
204
+ teal: {
205
+ button: string;
206
+ };
207
+ cyan: {
208
+ button: string;
209
+ };
210
+ sky: {
211
+ button: string;
212
+ };
213
+ blue: {
214
+ button: string;
215
+ };
216
+ indigo: {
217
+ button: string;
218
+ };
219
+ violet: {
220
+ button: string;
221
+ };
222
+ purple: {
223
+ button: string;
224
+ };
225
+ fuchsia: {
226
+ button: string;
227
+ };
228
+ pink: {
229
+ button: string;
230
+ };
231
+ rose: {
232
+ button: string;
233
+ };
234
+ none: {};
235
+ };
236
+ }, {
237
+ button: string;
238
+ content: string;
239
+ text: string;
240
+ icon: string;
241
+ }, import("tailwind-variants").TVReturnType<{
242
+ selected: {
243
+ true: {
244
+ text: string;
245
+ };
246
+ false: {};
247
+ };
248
+ size: {
249
+ sm: {
250
+ button: string;
251
+ };
252
+ md: {
253
+ button: string;
254
+ };
255
+ lg: {
256
+ button: string;
257
+ };
258
+ xl: {
259
+ button: string;
260
+ };
261
+ };
262
+ roundedSize: {
263
+ sm: {
264
+ button: string;
265
+ };
266
+ md: {
267
+ button: string;
268
+ };
269
+ lg: {
270
+ button: string;
271
+ };
272
+ xl: {
273
+ button: string;
274
+ };
275
+ full: {
276
+ button: string;
277
+ };
278
+ };
279
+ color: {
280
+ primary: {
281
+ button: string;
282
+ };
283
+ secondary: {
284
+ button: string;
285
+ };
286
+ gray: {
287
+ button: string;
288
+ };
289
+ red: {
290
+ button: string;
291
+ };
292
+ orange: {
293
+ button: string;
294
+ };
295
+ amber: {
296
+ button: string;
297
+ };
298
+ yellow: {
299
+ button: string;
300
+ };
301
+ lime: {
302
+ button: string;
303
+ };
304
+ green: {
305
+ button: string;
306
+ };
307
+ emerald: {
308
+ button: string;
309
+ };
310
+ teal: {
311
+ button: string;
312
+ };
313
+ cyan: {
314
+ button: string;
315
+ };
316
+ sky: {
317
+ button: string;
318
+ };
319
+ blue: {
320
+ button: string;
321
+ };
322
+ indigo: {
323
+ button: string;
324
+ };
325
+ violet: {
326
+ button: string;
327
+ };
328
+ purple: {
329
+ button: string;
330
+ };
331
+ fuchsia: {
332
+ button: string;
333
+ };
334
+ pink: {
335
+ button: string;
336
+ };
337
+ rose: {
338
+ button: string;
339
+ };
340
+ none: {};
341
+ };
342
+ }, {
343
+ button: string;
344
+ content: string;
345
+ text: string;
346
+ icon: string;
347
+ }, undefined, unknown, unknown, undefined>>;
@@ -0,0 +1,129 @@
1
+ import { tv } from 'tailwind-variants';
2
+ export const buttonToggleGroup = tv({
3
+ base: 'inline-flex border border-gray-300 overflow-hidden',
4
+ variants: {
5
+ roundedSize: {
6
+ sm: 'rounded-sm',
7
+ md: 'rounded-md',
8
+ lg: 'rounded-lg',
9
+ xl: 'rounded-xl',
10
+ full: 'rounded-full'
11
+ }
12
+ }
13
+ });
14
+ export const buttonToggle = tv({
15
+ slots: {
16
+ button: 'relative flex items-center transition-all duration-200 focus:outline-none border-r last:border-r-0 dark:bg-white dark:text-gray-800 disabled:cursor-not-allowed disabled:opacity-50',
17
+ content: 'flex items-center w-full overflow-hidden relative',
18
+ text: 'transition-all duration-200 ml-0',
19
+ icon: 'absolute left-0 flex-shrink-0 text-green-600'
20
+ },
21
+ variants: {
22
+ selected: {
23
+ true: {
24
+ text: 'ml-5'
25
+ },
26
+ false: {}
27
+ },
28
+ size: {
29
+ sm: {
30
+ button: 'p-1 px-2 text-sm'
31
+ },
32
+ md: {
33
+ button: 'p-2 px-4 text-base'
34
+ },
35
+ lg: {
36
+ button: 'p-3 px-5 text-lg'
37
+ },
38
+ xl: {
39
+ button: 'p-4 px-6 text-xl'
40
+ }
41
+ },
42
+ roundedSize: {
43
+ sm: {
44
+ button: 'first:rounded-s-sm last:rounded-e-sm'
45
+ },
46
+ md: {
47
+ button: 'first:rounded-s-md last:rounded-e-md'
48
+ },
49
+ lg: {
50
+ button: 'first:rounded-s-lg last:rounded-e-lg'
51
+ },
52
+ xl: {
53
+ button: 'first:rounded-s-xl last:rounded-e-xl'
54
+ },
55
+ full: {
56
+ button: 'first:rounded-s-full last:rounded-e-full'
57
+ }
58
+ },
59
+ color: {
60
+ primary: {
61
+ button: 'data-[selected=true]:bg-primary-200 data-[selected=false]:hover:bg-gray-100'
62
+ },
63
+ secondary: {
64
+ button: 'data-[selected=true]:bg-secondary-200 data-[selected=false]:hover:bg-gray-100'
65
+ },
66
+ gray: {
67
+ button: 'data-[selected=true]:bg-gray-200 data-[selected=false]:hover:bg-gray-100'
68
+ },
69
+ red: {
70
+ button: 'data-[selected=true]:bg-red-200 data-[selected=false]:hover:bg-red-50'
71
+ },
72
+ orange: {
73
+ button: 'data-[selected=true]:bg-orange-200 data-[selected=false]:hover:bg-orange-50'
74
+ },
75
+ amber: {
76
+ button: 'data-[selected=true]:bg-amber-200 data-[selected=false]:hover:bg-amber-50'
77
+ },
78
+ yellow: {
79
+ button: 'data-[selected=true]:bg-yellow-200 data-[selected=false]:hover:bg-yellow-50'
80
+ },
81
+ lime: {
82
+ button: 'data-[selected=true]:bg-lime-200 data-[selected=false]:hover:bg-lime-50'
83
+ },
84
+ green: {
85
+ button: 'data-[selected=true]:bg-green-200 data-[selected=false]:hover:bg-green-50'
86
+ },
87
+ emerald: {
88
+ button: 'data-[selected=true]:bg-emerald-200 data-[selected=false]:hover:bg-emerald-50'
89
+ },
90
+ teal: {
91
+ button: 'data-[selected=true]:bg-teal-200 data-[selected=false]:hover:bg-teal-50'
92
+ },
93
+ cyan: {
94
+ button: 'data-[selected=true]:bg-cyan-200 data-[selected=false]:hover:bg-cyan-50'
95
+ },
96
+ sky: {
97
+ button: 'data-[selected=true]:bg-sky-200 data-[selected=false]:hover:bg-sky-50'
98
+ },
99
+ blue: {
100
+ button: 'data-[selected=true]:bg-blue-200 data-[selected=false]:hover:bg-blue-50'
101
+ },
102
+ indigo: {
103
+ button: 'data-[selected=true]:bg-indigo-200 data-[selected=false]:hover:bg-indigo-50'
104
+ },
105
+ violet: {
106
+ button: 'data-[selected=true]:bg-violet-200 data-[selected=false]:hover:bg-violet-50'
107
+ },
108
+ purple: {
109
+ button: 'data-[selected=true]:bg-purple-200 data-[selected=false]:hover:bg-purple-50'
110
+ },
111
+ fuchsia: {
112
+ button: 'data-[selected=true]:bg-fuchsia-200 data-[selected=false]:hover:bg-fuchsia-50'
113
+ },
114
+ pink: {
115
+ button: 'data-[selected=true]:bg-pink-200 data-[selected=false]:hover:bg-pink-50'
116
+ },
117
+ rose: {
118
+ button: 'data-[selected=true]:bg-rose-200 data-[selected=false]:hover:bg-rose-50'
119
+ },
120
+ none: {}
121
+ }
122
+ },
123
+ defaultVariants: {
124
+ selected: false,
125
+ color: 'primary',
126
+ size: 'md',
127
+ roundedSize: 'md'
128
+ }
129
+ });
@@ -1,82 +1,82 @@
1
- <script lang="ts">
2
- import { getTheme, warnThemeDeprecation } from '../../themes/themeUtils.js';
3
- import clsx from 'clsx';
4
- import { checkbox } from './index.js';
5
- import { Label, type CheckboxItem, type CheckboxProps } from '../../index.js';
6
-
7
- let {
8
- children,
9
- color = 'primary',
10
- custom,
11
- inline,
12
- tinted,
13
- rounded,
14
- group = $bindable([]),
15
- choices = [],
16
- checked = $bindable(false),
17
- indeterminate,
18
- classes,
19
- class: className,
20
- divClass,
21
- disabled = false,
22
- value,
23
- labelProps = {},
24
- ...restProps
25
- }: CheckboxProps = $props();
26
-
27
- warnThemeDeprecation('Checkbox', { divClass }, { divClass: 'div' });
28
- const styling = $derived(classes ?? { div: divClass });
29
-
30
- const theme = getTheme('checkbox');
31
-
32
- const disabledValue = $derived(disabled === null ? undefined : disabled);
33
- const { base, div: divStyle } = $derived(
34
- checkbox({ color, tinted, custom, rounded, inline, disabled: disabledValue })
35
- );
36
-
37
- // Separate label rendering logic
38
- function renderLabel(choice?: CheckboxItem) {
39
- if (!choice) return '';
40
-
41
- if (children) {
42
- return children(choice);
43
- }
44
- return choice.label || '';
45
- }
46
- </script>
47
-
48
- {#if choices.length > 0}
49
- {#each choices as choice, i}
50
- <div class={divStyle({ class: clsx(theme?.div, styling.div) })}>
51
- <Label show={true} {...labelProps}>
52
- <input
53
- type="checkbox"
54
- value={choice.value}
55
- checked={choice.checked ?? false}
56
- {disabled}
57
- bind:group
58
- {...restProps}
59
- class={base({ class: clsx(theme?.base, className) })}
60
- />
61
- {renderLabel(choice)}
62
- </Label>
63
- </div>
64
- {/each}
65
- {:else}
66
- <div class={divStyle({ class: clsx(theme?.div, styling.div) })}>
67
- <Label show={true} {...labelProps}>
68
- <input
69
- type="checkbox"
70
- {value}
71
- bind:checked
72
- {indeterminate}
73
- {disabled}
74
- {...restProps}
75
- class={base({ class: clsx(theme?.base, className) })}
76
- />
77
- {#if children}
78
- {@render children({ value, checked, disabled })}
79
- {/if}
80
- </Label>
81
- </div>
82
- {/if}
1
+ <script lang="ts">
2
+ import { getTheme, warnThemeDeprecation } from '../../themes/themeUtils.js';
3
+ import clsx from 'clsx';
4
+ import { checkbox } from './index.js';
5
+ import { Label, type CheckboxItem, type CheckboxProps } from '../../index.js';
6
+
7
+ let {
8
+ children,
9
+ color = 'primary',
10
+ custom,
11
+ inline,
12
+ tinted,
13
+ rounded,
14
+ group = $bindable([]),
15
+ choices = [],
16
+ checked = $bindable(false),
17
+ indeterminate,
18
+ classes,
19
+ class: className,
20
+ divClass,
21
+ disabled = false,
22
+ value,
23
+ labelProps = {},
24
+ ...restProps
25
+ }: CheckboxProps = $props();
26
+
27
+ warnThemeDeprecation('Checkbox', { divClass }, { divClass: 'div' });
28
+ const styling = $derived(classes ?? { div: divClass });
29
+
30
+ const theme = getTheme('checkbox');
31
+
32
+ const disabledValue = $derived(disabled === null ? undefined : disabled);
33
+ const { base, div: divStyle } = $derived(
34
+ checkbox({ color, tinted, custom, rounded, inline, disabled: disabledValue })
35
+ );
36
+
37
+ // Separate label rendering logic
38
+ function renderLabel(choice?: CheckboxItem) {
39
+ if (!choice) return '';
40
+
41
+ if (children) {
42
+ return children(choice);
43
+ }
44
+ return choice.label || '';
45
+ }
46
+ </script>
47
+
48
+ {#if choices.length > 0}
49
+ {#each choices as choice, i}
50
+ <div class={divStyle({ class: clsx(theme?.div, styling.div) })}>
51
+ <Label show={true} {...labelProps}>
52
+ <input
53
+ type="checkbox"
54
+ value={choice.value}
55
+ checked={choice.checked ?? false}
56
+ {disabled}
57
+ bind:group
58
+ {...restProps}
59
+ class={base({ class: clsx(theme?.base, className) })}
60
+ />
61
+ {renderLabel(choice)}
62
+ </Label>
63
+ </div>
64
+ {/each}
65
+ {:else}
66
+ <div class={divStyle({ class: clsx(theme?.div, styling.div) })}>
67
+ <Label show={true} {...labelProps}>
68
+ <input
69
+ type="checkbox"
70
+ {value}
71
+ bind:checked
72
+ {indeterminate}
73
+ {disabled}
74
+ {...restProps}
75
+ class={base({ class: clsx(theme?.base, className) })}
76
+ />
77
+ {#if children}
78
+ {@render children({ value, checked, disabled })}
79
+ {/if}
80
+ </Label>
81
+ </div>
82
+ {/if}