ui-svelte 0.2.11 → 0.2.12

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 (204) hide show
  1. package/dist/charts/ArcChart.svelte +9 -13
  2. package/dist/charts/ArcChart.svelte.d.ts +3 -3
  3. package/dist/charts/AreaChart.svelte +347 -118
  4. package/dist/charts/AreaChart.svelte.d.ts +33 -4
  5. package/dist/charts/BarChart.svelte +288 -66
  6. package/dist/charts/BarChart.svelte.d.ts +26 -1
  7. package/dist/charts/Candlestick.svelte +53 -50
  8. package/dist/charts/Candlestick.svelte.d.ts +8 -8
  9. package/dist/charts/LineChart.svelte +391 -91
  10. package/dist/charts/LineChart.svelte.d.ts +26 -3
  11. package/dist/charts/PieChart.svelte +333 -92
  12. package/dist/charts/PieChart.svelte.d.ts +33 -5
  13. package/dist/charts/css/arc-chart.css +3 -3
  14. package/dist/charts/css/area-chart.css +127 -29
  15. package/dist/charts/css/bar-chart.css +114 -8
  16. package/dist/charts/css/candlestick.css +2 -0
  17. package/dist/charts/css/line-chart.css +111 -13
  18. package/dist/charts/css/pie-chart.css +92 -20
  19. package/dist/control/Audio.svelte +86 -44
  20. package/dist/control/Audio.svelte.d.ts +4 -1
  21. package/dist/control/Button.svelte +18 -27
  22. package/dist/control/Button.svelte.d.ts +3 -2
  23. package/dist/control/IconButton.svelte +17 -27
  24. package/dist/control/IconButton.svelte.d.ts +3 -3
  25. package/dist/control/Image.svelte +123 -0
  26. package/dist/control/Image.svelte.d.ts +13 -0
  27. package/dist/control/Record.svelte +144 -98
  28. package/dist/control/Record.svelte.d.ts +2 -1
  29. package/dist/control/ToggleGroup.svelte +22 -8
  30. package/dist/control/ToggleGroup.svelte.d.ts +2 -1
  31. package/dist/control/ToggleTheme.svelte +13 -11
  32. package/dist/control/ToggleTheme.svelte.d.ts +3 -2
  33. package/dist/control/Video.svelte +55 -29
  34. package/dist/control/Video.svelte.d.ts +1 -0
  35. package/dist/control/css/btn.css +200 -152
  36. package/dist/control/css/image.css +56 -0
  37. package/dist/control/css/media.css +95 -30
  38. package/dist/control/css/toggle-group.css +269 -84
  39. package/dist/control/css/video.css +1 -14
  40. package/dist/css/animations.css +5 -9
  41. package/dist/css/base.css +13 -347
  42. package/dist/css/decorations.css +402 -0
  43. package/dist/css/rich-text.css +485 -0
  44. package/dist/css/transitions.css +158 -0
  45. package/dist/css/typography.css +291 -0
  46. package/dist/display/Accordion.svelte +28 -4
  47. package/dist/display/Accordion.svelte.d.ts +2 -1
  48. package/dist/display/Alert.svelte +32 -12
  49. package/dist/display/Alert.svelte.d.ts +2 -3
  50. package/dist/display/Avatar.svelte +23 -18
  51. package/dist/display/Avatar.svelte.d.ts +4 -1
  52. package/dist/display/AvatarGroup.svelte +20 -18
  53. package/dist/display/AvatarGroup.svelte.d.ts +6 -3
  54. package/dist/display/Badge.svelte +11 -4
  55. package/dist/display/Badge.svelte.d.ts +2 -1
  56. package/dist/display/Card.svelte +15 -14
  57. package/dist/display/Card.svelte.d.ts +2 -3
  58. package/dist/display/Carousel.svelte +130 -99
  59. package/dist/display/Carousel.svelte.d.ts +6 -4
  60. package/dist/display/ChatBox.svelte +245 -106
  61. package/dist/display/ChatBox.svelte.d.ts +32 -5
  62. package/dist/display/Chip.svelte +31 -17
  63. package/dist/display/Chip.svelte.d.ts +3 -2
  64. package/dist/display/Code.svelte +6 -3
  65. package/dist/display/Code.svelte.d.ts +1 -0
  66. package/dist/display/Collapsible.svelte +30 -4
  67. package/dist/display/Collapsible.svelte.d.ts +2 -1
  68. package/dist/display/Empty.svelte +37 -3
  69. package/dist/display/Empty.svelte.d.ts +3 -0
  70. package/dist/display/Item.svelte +30 -11
  71. package/dist/display/Item.svelte.d.ts +2 -2
  72. package/dist/display/Map.svelte +488 -0
  73. package/dist/display/Map.svelte.d.ts +44 -0
  74. package/dist/display/Section.svelte +14 -12
  75. package/dist/display/Section.svelte.d.ts +2 -3
  76. package/dist/display/Skeleton.svelte +32 -0
  77. package/dist/display/Skeleton.svelte.d.ts +10 -0
  78. package/dist/display/Table.svelte +94 -132
  79. package/dist/display/Table.svelte.d.ts +10 -1
  80. package/dist/display/css/accordion.css +349 -52
  81. package/dist/display/css/alert.css +18 -25
  82. package/dist/display/css/avatar-group.css +38 -75
  83. package/dist/display/css/avatar.css +139 -121
  84. package/dist/display/css/badge.css +50 -27
  85. package/dist/display/css/card.css +51 -71
  86. package/dist/display/css/carousel.css +25 -5
  87. package/dist/display/css/chat-box.css +158 -26
  88. package/dist/display/css/chip.css +142 -68
  89. package/dist/display/css/code.css +2 -6
  90. package/dist/display/css/collapsible.css +349 -45
  91. package/dist/display/css/divider.css +8 -6
  92. package/dist/display/css/empty.css +7 -0
  93. package/dist/display/css/item.css +311 -89
  94. package/dist/display/css/map.css +164 -0
  95. package/dist/display/css/section.css +78 -33
  96. package/dist/display/css/skeleton.css +58 -0
  97. package/dist/display/css/table.css +320 -189
  98. package/dist/form/Checkbox.svelte +11 -5
  99. package/dist/form/Checkbox.svelte.d.ts +2 -1
  100. package/dist/form/ColorField.svelte +543 -0
  101. package/dist/form/ColorField.svelte.d.ts +29 -0
  102. package/dist/form/ComboBox.svelte +24 -9
  103. package/dist/form/ComboBox.svelte.d.ts +2 -2
  104. package/dist/form/CsvField.svelte +62 -136
  105. package/dist/form/CsvField.svelte.d.ts +2 -2
  106. package/dist/form/DateField.svelte +33 -15
  107. package/dist/form/DateField.svelte.d.ts +2 -1
  108. package/dist/form/DateRange.svelte +436 -0
  109. package/dist/form/DateRange.svelte.d.ts +24 -0
  110. package/dist/form/DragDrop.svelte +348 -0
  111. package/dist/form/DragDrop.svelte.d.ts +32 -0
  112. package/dist/form/Dropzone.svelte +28 -8
  113. package/dist/form/Dropzone.svelte.d.ts +2 -2
  114. package/dist/form/Editor.svelte +626 -0
  115. package/dist/form/Editor.svelte.d.ts +50 -0
  116. package/dist/form/ImageCropper.svelte +291 -61
  117. package/dist/form/ImageCropper.svelte.d.ts +15 -1
  118. package/dist/form/{PasswordStrength.svelte → PasswordField.svelte} +58 -24
  119. package/dist/form/{PasswordStrength.svelte.d.ts → PasswordField.svelte.d.ts} +6 -5
  120. package/dist/form/PhoneField.svelte +26 -14
  121. package/dist/form/PhoneField.svelte.d.ts +4 -3
  122. package/dist/form/PinField.svelte +39 -31
  123. package/dist/form/PinField.svelte.d.ts +3 -3
  124. package/dist/form/RadioGroup.svelte +4 -4
  125. package/dist/form/RadioGroup.svelte.d.ts +1 -1
  126. package/dist/form/Select.svelte +20 -19
  127. package/dist/form/Select.svelte.d.ts +2 -2
  128. package/dist/form/Slider.svelte +4 -2
  129. package/dist/form/Slider.svelte.d.ts +1 -0
  130. package/dist/form/TextField.svelte +16 -7
  131. package/dist/form/TextField.svelte.d.ts +2 -2
  132. package/dist/form/Textarea.svelte +15 -6
  133. package/dist/form/Textarea.svelte.d.ts +2 -2
  134. package/dist/form/Toggle.svelte +1 -1
  135. package/dist/form/css/checkbox.css +18 -2
  136. package/dist/form/css/color-field.css +141 -0
  137. package/dist/form/css/control.css +193 -82
  138. package/dist/form/css/csv-field.css +226 -0
  139. package/dist/form/css/date-range.css +122 -0
  140. package/dist/form/css/date.css +24 -2
  141. package/dist/form/css/drag-drop.css +271 -0
  142. package/dist/form/css/dropzone.css +153 -34
  143. package/dist/form/css/editor.css +367 -0
  144. package/dist/form/css/field.css +4 -0
  145. package/dist/form/css/image-cropper.css +223 -22
  146. package/dist/form/css/radio-group.css +1 -1
  147. package/dist/form/css/select.css +2 -2
  148. package/dist/form/css/slider.css +1 -0
  149. package/dist/form/css/textarea.css +178 -75
  150. package/dist/form/css/toggle.css +3 -3
  151. package/dist/hooks/use-table.svelte.d.ts +1 -0
  152. package/dist/hooks/use-table.svelte.js +6 -0
  153. package/dist/icons/index.d.ts +30 -2
  154. package/dist/icons/index.js +32 -4
  155. package/dist/index.css +16 -1
  156. package/dist/index.d.ts +12 -4
  157. package/dist/index.js +11 -3
  158. package/dist/layout/AppBar.svelte +22 -14
  159. package/dist/layout/AppBar.svelte.d.ts +2 -1
  160. package/dist/layout/Footer.svelte +19 -11
  161. package/dist/layout/Footer.svelte.d.ts +2 -1
  162. package/dist/layout/Provider.svelte +27 -4
  163. package/dist/layout/Provider.svelte.d.ts +3 -1
  164. package/dist/layout/css/app-bar.css +63 -66
  165. package/dist/layout/css/footer.css +62 -65
  166. package/dist/navigation/BottomNav.svelte +41 -13
  167. package/dist/navigation/FooterGroup.svelte +1 -1
  168. package/dist/navigation/NavMenu.svelte +47 -23
  169. package/dist/navigation/NavMenu.svelte.d.ts +29 -0
  170. package/dist/navigation/Pagination.svelte +158 -0
  171. package/dist/navigation/Pagination.svelte.d.ts +18 -0
  172. package/dist/navigation/SideNav.svelte +30 -25
  173. package/dist/navigation/SideNav.svelte.d.ts +2 -3
  174. package/dist/navigation/Tabs.svelte +17 -7
  175. package/dist/navigation/Tabs.svelte.d.ts +2 -2
  176. package/dist/navigation/css/bottom-nav.css +279 -257
  177. package/dist/navigation/css/footer-group.css +1 -1
  178. package/dist/navigation/css/footer-nav.css +1 -1
  179. package/dist/navigation/css/nav-menu.css +332 -106
  180. package/dist/navigation/css/pagination.css +74 -0
  181. package/dist/navigation/css/side-nav.css +515 -75
  182. package/dist/navigation/css/tabs.css +246 -52
  183. package/dist/overlay/Command.svelte +340 -0
  184. package/dist/overlay/Command.svelte.d.ts +24 -25
  185. package/dist/overlay/Drawer.svelte +49 -21
  186. package/dist/overlay/Drawer.svelte.d.ts +2 -2
  187. package/dist/overlay/Dropdown.svelte +3 -3
  188. package/dist/overlay/Modal.svelte +51 -16
  189. package/dist/overlay/Modal.svelte.d.ts +3 -3
  190. package/dist/overlay/Toast.svelte +41 -17
  191. package/dist/overlay/Toast.svelte.d.ts +1 -1
  192. package/dist/overlay/Tooltip.svelte +40 -26
  193. package/dist/overlay/Tooltip.svelte.d.ts +2 -2
  194. package/dist/overlay/css/command.css +80 -0
  195. package/dist/overlay/css/drawer.css +63 -24
  196. package/dist/overlay/css/dropdown.css +1 -1
  197. package/dist/overlay/css/hovercard.css +1 -1
  198. package/dist/overlay/css/modal.css +27 -27
  199. package/dist/overlay/css/toast.css +17 -29
  200. package/dist/overlay/css/tooltip.css +83 -66
  201. package/dist/stores/theme.svelte.js +26 -1
  202. package/dist/stores/toast.svelte.d.ts +4 -4
  203. package/dist/stores/toast.svelte.js +2 -2
  204. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
+ import { ArrowUploadRegularIcon } from '../icons/index.js';
2
3
  import { Button, Modal, Select, TextField, Table, useTable, Chip } from '../index.js';
3
- import type { Snippet } from 'svelte';
4
-
4
+ import { cn } from '../utils/class-names.js';
5
5
  type Props = {
6
6
  requiredColumns?: string[];
7
7
  onMappingComplete?: (data: {
@@ -11,20 +11,11 @@
11
11
  originalData: any[];
12
12
  }) => void;
13
13
  acceptMultipleFiles?: boolean;
14
- variant?:
15
- | 'primary'
16
- | 'secondary'
17
- | 'muted'
18
- | 'success'
19
- | 'info'
20
- | 'danger'
21
- | 'warning'
22
- | 'outlined'
23
- | 'ghost';
14
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
15
+ variant?: 'solid' | 'soft' | 'outlined' | 'ghost';
24
16
  size?: 'xs' | 'sm' | 'md' | 'lg';
25
17
  class?: string;
26
18
  buttonText?: string;
27
- isSolid?: boolean;
28
19
  showPreview?: boolean;
29
20
  previewRows?: number;
30
21
  previewPageSize?: number;
@@ -34,16 +25,40 @@
34
25
  requiredColumns = [],
35
26
  onMappingComplete = () => {},
36
27
  acceptMultipleFiles = false,
37
- variant = 'primary',
28
+ color = 'muted',
29
+ variant = 'soft',
38
30
  size = 'md',
39
31
  class: className,
40
- buttonText = 'Seleccionar archivo CSV',
41
- isSolid = false,
32
+ buttonText = 'Select CSV file',
42
33
  showPreview = true,
43
34
  previewRows = 5,
44
35
  previewPageSize = 10
45
36
  }: Props = $props();
46
37
 
38
+ const colors = {
39
+ primary: 'is-primary',
40
+ secondary: 'is-secondary',
41
+ muted: 'is-muted',
42
+ success: 'is-success',
43
+ info: 'is-info',
44
+ danger: 'is-danger',
45
+ warning: 'is-warning'
46
+ };
47
+
48
+ const variants = {
49
+ solid: 'is-solid',
50
+ soft: 'is-soft',
51
+ outlined: 'is-outlined',
52
+ ghost: 'is-ghost'
53
+ };
54
+
55
+ const sizes = {
56
+ xs: 'is-xs',
57
+ sm: 'is-sm',
58
+ md: 'is-md',
59
+ lg: 'is-lg'
60
+ };
61
+
47
62
  let fileInput = $state<HTMLInputElement | null>(null);
48
63
  let selectedFile = $state<File | null>(null);
49
64
  let showModal = $state(false);
@@ -60,7 +75,7 @@
60
75
  if (!file) return;
61
76
 
62
77
  if (!file.name.endsWith('.csv')) {
63
- parseError = 'Por favor selecciona un archivo CSV válido';
78
+ parseError = 'Please select a valid CSV file';
64
79
  return;
65
80
  }
66
81
 
@@ -78,7 +93,7 @@
78
93
  const lines = text.split('\n').filter((line) => line.trim());
79
94
 
80
95
  if (lines.length === 0) {
81
- parseError = 'El archivo CSV está vacío';
96
+ parseError = 'The CSV file is empty';
82
97
  return;
83
98
  }
84
99
 
@@ -104,12 +119,12 @@
104
119
 
105
120
  showModal = true;
106
121
  } catch (error: any) {
107
- parseError = 'Error al parsear el archivo CSV: ' + error.message;
122
+ parseError = 'Error parsing CSV file: ' + error.message;
108
123
  }
109
124
  };
110
125
 
111
126
  reader.onerror = () => {
112
- parseError = 'Error al leer el archivo';
127
+ parseError = 'Error reading file';
113
128
  };
114
129
 
115
130
  reader.readAsText(file);
@@ -119,7 +134,7 @@
119
134
  const unmappedColumns = requiredColumns.filter((col) => !columnMapping[col]);
120
135
 
121
136
  if (unmappedColumns.length > 0) {
122
- parseError = `Por favor mapea las siguientes columnas: ${unmappedColumns.join(', ')}`;
137
+ parseError = `Please map the following columns: ${unmappedColumns.join(', ')}`;
123
138
  return;
124
139
  }
125
140
 
@@ -185,22 +200,26 @@
185
200
  })
186
201
  : null
187
202
  );
203
+
204
+ const baseClasses = $derived(
205
+ cn('csv-field', colors[color], variants[variant], sizes[size], className)
206
+ );
188
207
  </script>
189
208
 
190
- <div class={className}>
209
+ <div class={baseClasses}>
191
210
  <input
192
211
  type="file"
193
212
  accept=".csv"
194
213
  bind:this={fileInput}
195
214
  onchange={handleFileSelect}
196
- style="display: none;"
215
+ class="csv-field-input"
197
216
  />
198
217
 
199
218
  <Button
219
+ {color}
200
220
  {variant}
201
221
  {size}
202
- {isSolid}
203
- startIcon="fluent:document-arrow-up-24-regular"
222
+ startIcon={ArrowUploadRegularIcon}
204
223
  onclick={() => fileInput?.click()}
205
224
  >
206
225
  {selectedFile ? selectedFile.name : buttonText}
@@ -217,27 +236,27 @@
217
236
  <div class="csv-preview-header">
218
237
  <div class="csv-preview-info">
219
238
  <h4 class="csv-preview-title">
220
- Datos Importados
221
- <span class="csv-preview-count">({mappedData.length} registros)</span>
239
+ Imported Data
240
+ <span class="csv-preview-count">({mappedData.length} records)</span>
222
241
  </h4>
223
242
  <div class="csv-mapping-summary">
224
243
  {#each Object.entries(columnMapping) as [required, csv], index}
225
244
  {#if index < 3}
226
- <Chip size="sm" variant="muted">
245
+ <Chip size="sm" {color} variant="soft">
227
246
  {required} → {csv}
228
247
  </Chip>
229
248
  {/if}
230
249
  {/each}
231
250
  {#if Object.entries(columnMapping).length > 3}
232
- <Chip size="sm" variant="muted">
233
- +{Object.entries(columnMapping).length - 3} más
251
+ <Chip size="sm" {color} variant="soft">
252
+ +{Object.entries(columnMapping).length - 3} more
234
253
  </Chip>
235
254
  {/if}
236
255
  </div>
237
256
  </div>
238
- <Button variant="ghost" size="sm" onclick={clearImport}>
257
+ <Button {color} variant="ghost" size="sm" onclick={clearImport}>
239
258
  <span class="csv-clear-icon">✕</span>
240
- Limpiar
259
+ Clear
241
260
  </Button>
242
261
  </div>
243
262
 
@@ -246,14 +265,14 @@
246
265
  {/if}
247
266
  </div>
248
267
 
249
- <Modal bind:open={showModal} onclose={closeModal} variant="surface" closeOnOverlay>
268
+ <Modal bind:open={showModal} onclose={closeModal} color="surface">
250
269
  {#snippet header()}
251
- <h2 class="csv-modal-title">Mapear Columnas del CSV</h2>
270
+ <h2 class="csv-modal-title">Map CSV Columns</h2>
252
271
  {/snippet}
253
272
 
254
273
  <div class="csv-modal-body">
255
274
  <p class="csv-instructions">
256
- Asocia cada columna requerida con la columna correspondiente del archivo CSV:
275
+ Map each required column to the corresponding column from the CSV file:
257
276
  </p>
258
277
 
259
278
  <div class="csv-mapping-list">
@@ -263,7 +282,7 @@
263
282
  label={requiredCol}
264
283
  options={selectOptions}
265
284
  bind:value={columnMapping[requiredCol]}
266
- placeholder="-- Seleccionar columna --"
285
+ placeholder="-- Select column --"
267
286
  variant="outlined"
268
287
  size="md"
269
288
  isFloatLabel
@@ -272,8 +291,9 @@
272
291
  {#if columnMapping[requiredCol]}
273
292
  <TextField
274
293
  value={getPreviewData(requiredCol)}
275
- label="Vista previa"
276
- variant="muted"
294
+ label="Preview"
295
+ variant="soft"
296
+ color="muted"
277
297
  size="sm"
278
298
  isFloatLabel
279
299
  islabelActive
@@ -286,104 +306,10 @@
286
306
 
287
307
  {#snippet footer()}
288
308
  <div class="csv-modal-footer">
289
- <Button variant="ghost" size="md" onclick={closeModal}>Cancelar</Button>
290
- <Button variant="primary" size="md" isSolid onclick={confirmMapping}>Confirmar mapeo</Button>
309
+ <Button color="muted" variant="ghost" size="md" onclick={closeModal}>Cancel</Button>
310
+ <Button color="primary" variant="solid" size="md" onclick={confirmMapping}
311
+ >Confirm mapping</Button
312
+ >
291
313
  </div>
292
314
  {/snippet}
293
315
  </Modal>
294
-
295
- <style>
296
- .csv-field-error {
297
- margin-top: 0.625rem;
298
- padding: 0.625rem;
299
- background: rgb(254 226 226);
300
- color: rgb(220 38 38);
301
- border-radius: 0.375rem;
302
- font-size: 0.875rem;
303
- }
304
-
305
- .csv-modal-title {
306
- margin: 0;
307
- font-size: 1.25rem;
308
- font-weight: 600;
309
- color: rgb(17 24 39);
310
- }
311
-
312
- .csv-modal-body {
313
- display: flex;
314
- flex-direction: column;
315
- gap: 1.25rem;
316
- }
317
-
318
- .csv-instructions {
319
- margin: 0;
320
- color: rgb(107 114 128);
321
- font-size: 0.875rem;
322
- }
323
-
324
- .csv-mapping-list {
325
- display: flex;
326
- flex-direction: column;
327
- gap: 1.5rem;
328
- }
329
-
330
- .csv-mapping-item {
331
- display: flex;
332
- flex-direction: column;
333
- gap: 0.75rem;
334
- }
335
-
336
- .csv-modal-footer {
337
- display: flex;
338
- justify-content: flex-end;
339
- gap: 0.75rem;
340
- }
341
-
342
- .csv-preview-container {
343
- margin-top: 1.5rem;
344
- padding: 1.25rem;
345
- background: rgb(249 250 251);
346
- border: 1px solid rgb(229 231 235);
347
- border-radius: 0.75rem;
348
- }
349
-
350
- .csv-preview-header {
351
- display: flex;
352
- justify-content: space-between;
353
- align-items: flex-start;
354
- margin-bottom: 1rem;
355
- gap: 1rem;
356
- }
357
-
358
- .csv-preview-info {
359
- flex: 1;
360
- min-width: 0;
361
- }
362
-
363
- .csv-preview-title {
364
- margin: 0 0 0.75rem 0;
365
- font-size: 1rem;
366
- font-weight: 600;
367
- color: rgb(17 24 39);
368
- display: flex;
369
- align-items: center;
370
- gap: 0.5rem;
371
- }
372
-
373
- .csv-preview-count {
374
- font-size: 0.875rem;
375
- font-weight: 400;
376
- color: rgb(107 114 128);
377
- }
378
-
379
- .csv-mapping-summary {
380
- display: flex;
381
- flex-wrap: wrap;
382
- gap: 0.5rem;
383
- }
384
-
385
- .csv-clear-icon {
386
- font-size: 1.125rem;
387
- line-height: 1;
388
- }
389
- </style>
@@ -7,11 +7,11 @@ type Props = {
7
7
  originalData: any[];
8
8
  }) => void;
9
9
  acceptMultipleFiles?: boolean;
10
- variant?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning' | 'outlined' | 'ghost';
10
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
11
+ variant?: 'solid' | 'soft' | 'outlined' | 'ghost';
11
12
  size?: 'xs' | 'sm' | 'md' | 'lg';
12
13
  class?: string;
13
14
  buttonText?: string;
14
- isSolid?: boolean;
15
15
  showPreview?: boolean;
16
16
  previewRows?: number;
17
17
  previewPageSize?: number;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import { ArrowLeft24RegularIcon, ArrowRight24RegularIcon } from '../icons/index.js';
3
- import { Button, formatDate, getWeekdays, Icon } from '../index.js';
3
+ import { Button, formatDate, getWeekdays, IconButton } from '../index.js';
4
4
  import { cn } from '../utils/class-names.js';
5
5
  import { onMount } from 'svelte';
6
6
 
@@ -8,7 +8,8 @@
8
8
  value?: unknown;
9
9
  placeholder?: string;
10
10
  onchange?: (value: unknown) => void;
11
- variant?: 'primary' | 'secondary' | 'muted' | 'outlined' | 'line';
11
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
12
+ variant?: 'solid' | 'soft' | 'outlined' | 'line';
12
13
  size?: 'sm' | 'md' | 'lg';
13
14
  name?: string;
14
15
  class?: string;
@@ -25,6 +26,7 @@
25
26
  placeholder = 'Select an option',
26
27
  onchange,
27
28
  variant = 'outlined',
29
+ color = 'muted',
28
30
  size = 'md',
29
31
  name,
30
32
  label,
@@ -32,8 +34,7 @@
32
34
  helpText,
33
35
  errorText,
34
36
  class: className,
35
- isFloatLabel,
36
- isSolid
37
+ isFloatLabel
37
38
  }: Props = $props();
38
39
 
39
40
  let selectedDate = $state<Date>(new Date());
@@ -55,10 +56,19 @@
55
56
  isBottomHalf: false
56
57
  });
57
58
 
58
- const variantClasses = {
59
+ const colors = {
59
60
  primary: 'is-primary',
60
61
  secondary: 'is-secondary',
61
62
  muted: 'is-muted',
63
+ success: 'is-success',
64
+ info: 'is-info',
65
+ danger: 'is-danger',
66
+ warning: 'is-warning'
67
+ };
68
+
69
+ const variants = {
70
+ solid: 'is-solid',
71
+ soft: 'is-soft',
62
72
  outlined: 'is-outlined',
63
73
  line: 'is-line'
64
74
  };
@@ -139,7 +149,7 @@
139
149
  );
140
150
 
141
151
  const days = $derived(getDaysInMonth(currentMonth, currentYear));
142
- const weekdays = $derived(getWeekdays('short'));
152
+ const weekdays = $derived(getWeekdays('narrow'));
143
153
 
144
154
  const formattedSelectedDate = $derived(
145
155
  formatDate(selectedDate, {
@@ -216,10 +226,10 @@
216
226
  bind:this={controlElement}
217
227
  class={cn(
218
228
  'control',
219
- variantClasses[variant],
229
+ colors[color],
230
+ variants[variant],
220
231
  sizeClasses[size],
221
232
  isFloatLabel && 'is-float',
222
- isSolid && 'is-solid',
223
233
  (isActive || isFocused) && 'is-active'
224
234
  )}
225
235
  class:is-error={errorText}
@@ -256,15 +266,23 @@
256
266
 
257
267
  <div class:is-open={isOpen} class="date-popover" {style} bind:this={contentEl}>
258
268
  <div class="date-picker-header">
259
- <Button variant="ghost" onclick={() => changeMonth('prev')}>
260
- <Icon icon={ArrowLeft24RegularIcon} />
261
- </Button>
269
+ <IconButton
270
+ onclick={() => changeMonth('prev')}
271
+ icon={ArrowLeft24RegularIcon}
272
+ {color}
273
+ variant="ghost"
274
+ size="sm"
275
+ />
262
276
 
263
277
  <span>{monthName} {currentYear}</span>
264
278
 
265
- <Button variant="ghost" onclick={() => changeMonth('next')}>
266
- <Icon icon={ArrowRight24RegularIcon} />
267
- </Button>
279
+ <IconButton
280
+ onclick={() => changeMonth('next')}
281
+ icon={ArrowRight24RegularIcon}
282
+ {color}
283
+ variant="ghost"
284
+ size="sm"
285
+ />
268
286
  </div>
269
287
  <div class="date-picker-weekdays">
270
288
  {#each weekdays as weekday}
@@ -275,7 +293,7 @@
275
293
  {#each days as day}
276
294
  {#if day}
277
295
  <button
278
- class="date-picker-day-button"
296
+ class={cn('date-picker-day-button', colors[color])}
279
297
  class:today={isToday(day)}
280
298
  class:selected={isSelected(day)}
281
299
  onclick={() => selectDate(day)}
@@ -2,7 +2,8 @@ type Props = {
2
2
  value?: unknown;
3
3
  placeholder?: string;
4
4
  onchange?: (value: unknown) => void;
5
- variant?: 'primary' | 'secondary' | 'muted' | 'outlined' | 'line';
5
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
6
+ variant?: 'solid' | 'soft' | 'outlined' | 'line';
6
7
  size?: 'sm' | 'md' | 'lg';
7
8
  name?: string;
8
9
  class?: string;