ui-svelte 0.2.11 → 0.2.13

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 (225) hide show
  1. package/README.md +2 -2
  2. package/dist/charts/ArcChart.svelte +9 -14
  3. package/dist/charts/ArcChart.svelte.d.ts +3 -3
  4. package/dist/charts/AreaChart.svelte +347 -118
  5. package/dist/charts/AreaChart.svelte.d.ts +33 -4
  6. package/dist/charts/BarChart.svelte +288 -66
  7. package/dist/charts/BarChart.svelte.d.ts +26 -1
  8. package/dist/charts/Candlestick.svelte +53 -50
  9. package/dist/charts/Candlestick.svelte.d.ts +8 -8
  10. package/dist/charts/LineChart.svelte +391 -91
  11. package/dist/charts/LineChart.svelte.d.ts +26 -3
  12. package/dist/charts/PieChart.svelte +333 -92
  13. package/dist/charts/PieChart.svelte.d.ts +33 -5
  14. package/dist/charts/css/arc-chart.css +3 -3
  15. package/dist/charts/css/area-chart.css +127 -29
  16. package/dist/charts/css/bar-chart.css +114 -8
  17. package/dist/charts/css/candlestick.css +2 -0
  18. package/dist/charts/css/line-chart.css +111 -13
  19. package/dist/charts/css/pie-chart.css +92 -20
  20. package/dist/control/Audio.svelte +86 -44
  21. package/dist/control/Audio.svelte.d.ts +4 -1
  22. package/dist/control/Button.svelte +18 -27
  23. package/dist/control/Button.svelte.d.ts +3 -2
  24. package/dist/control/Fab.svelte +103 -0
  25. package/dist/control/Fab.svelte.d.ts +25 -0
  26. package/dist/control/IconButton.svelte +17 -27
  27. package/dist/control/IconButton.svelte.d.ts +3 -3
  28. package/dist/control/Image.svelte +123 -0
  29. package/dist/control/Image.svelte.d.ts +13 -0
  30. package/dist/control/Record.svelte +141 -98
  31. package/dist/control/Record.svelte.d.ts +2 -1
  32. package/dist/control/ToggleGroup.svelte +22 -8
  33. package/dist/control/ToggleGroup.svelte.d.ts +2 -1
  34. package/dist/control/ToggleTheme.svelte +13 -11
  35. package/dist/control/ToggleTheme.svelte.d.ts +3 -2
  36. package/dist/control/Video.svelte +57 -29
  37. package/dist/control/Video.svelte.d.ts +1 -0
  38. package/dist/control/css/btn.css +200 -152
  39. package/dist/control/css/fab.css +84 -0
  40. package/dist/control/css/image.css +56 -0
  41. package/dist/control/css/media.css +95 -30
  42. package/dist/control/css/toggle-group.css +253 -84
  43. package/dist/control/css/video.css +1 -14
  44. package/dist/css/animations.css +5 -9
  45. package/dist/css/base.css +13 -347
  46. package/dist/css/decorations.css +561 -0
  47. package/dist/css/rich-text.css +485 -0
  48. package/dist/css/transitions.css +158 -0
  49. package/dist/css/typography.css +291 -0
  50. package/dist/css/utilities.css +0 -4
  51. package/dist/display/Accordion.svelte +28 -4
  52. package/dist/display/Accordion.svelte.d.ts +2 -1
  53. package/dist/display/Alert.svelte +32 -12
  54. package/dist/display/Alert.svelte.d.ts +2 -3
  55. package/dist/display/Avatar.svelte +23 -18
  56. package/dist/display/Avatar.svelte.d.ts +4 -1
  57. package/dist/display/AvatarGroup.svelte +20 -18
  58. package/dist/display/AvatarGroup.svelte.d.ts +6 -3
  59. package/dist/display/Badge.svelte +11 -4
  60. package/dist/display/Badge.svelte.d.ts +2 -1
  61. package/dist/display/Card.svelte +15 -14
  62. package/dist/display/Card.svelte.d.ts +2 -3
  63. package/dist/display/Carousel.svelte +130 -99
  64. package/dist/display/Carousel.svelte.d.ts +6 -4
  65. package/dist/display/ChatBox.svelte +245 -106
  66. package/dist/display/ChatBox.svelte.d.ts +32 -5
  67. package/dist/display/Chip.svelte +31 -17
  68. package/dist/display/Chip.svelte.d.ts +3 -2
  69. package/dist/display/Code.svelte +7 -4
  70. package/dist/display/Code.svelte.d.ts +1 -0
  71. package/dist/display/Collapsible.svelte +30 -4
  72. package/dist/display/Collapsible.svelte.d.ts +2 -1
  73. package/dist/display/Countdown.svelte +169 -0
  74. package/dist/display/Countdown.svelte.d.ts +21 -0
  75. package/dist/display/Empty.svelte +37 -3
  76. package/dist/display/Empty.svelte.d.ts +3 -0
  77. package/dist/display/Item.svelte +42 -11
  78. package/dist/display/Item.svelte.d.ts +4 -2
  79. package/dist/display/Map.svelte +488 -0
  80. package/dist/display/Map.svelte.d.ts +44 -0
  81. package/dist/display/Marquee.svelte +0 -2
  82. package/dist/display/Section.svelte +14 -12
  83. package/dist/display/Section.svelte.d.ts +2 -3
  84. package/dist/display/Skeleton.svelte +32 -0
  85. package/dist/display/Skeleton.svelte.d.ts +10 -0
  86. package/dist/display/Table.svelte +94 -132
  87. package/dist/display/Table.svelte.d.ts +10 -1
  88. package/dist/display/css/accordion.css +349 -52
  89. package/dist/display/css/alert.css +38 -18
  90. package/dist/display/css/avatar-group.css +38 -75
  91. package/dist/display/css/avatar.css +139 -121
  92. package/dist/display/css/badge.css +50 -27
  93. package/dist/display/css/card.css +123 -71
  94. package/dist/display/css/carousel.css +25 -5
  95. package/dist/display/css/chat-box.css +158 -26
  96. package/dist/display/css/chip.css +142 -68
  97. package/dist/display/css/code.css +2 -6
  98. package/dist/display/css/collapsible.css +349 -45
  99. package/dist/display/css/countdown.css +206 -0
  100. package/dist/display/css/divider.css +8 -6
  101. package/dist/display/css/empty.css +7 -0
  102. package/dist/display/css/item.css +330 -84
  103. package/dist/display/css/map.css +164 -0
  104. package/dist/display/css/marquee.css +0 -3
  105. package/dist/display/css/section.css +89 -65
  106. package/dist/display/css/skeleton.css +58 -0
  107. package/dist/display/css/table.css +309 -193
  108. package/dist/form/Checkbox.svelte +11 -5
  109. package/dist/form/Checkbox.svelte.d.ts +2 -1
  110. package/dist/form/ColorField.svelte +601 -0
  111. package/dist/form/ColorField.svelte.d.ts +29 -0
  112. package/dist/form/ComboBox.svelte +24 -9
  113. package/dist/form/ComboBox.svelte.d.ts +2 -2
  114. package/dist/form/CsvField.svelte +62 -136
  115. package/dist/form/CsvField.svelte.d.ts +2 -2
  116. package/dist/form/DateField.svelte +33 -15
  117. package/dist/form/DateField.svelte.d.ts +2 -1
  118. package/dist/form/DateRange.svelte +436 -0
  119. package/dist/form/DateRange.svelte.d.ts +24 -0
  120. package/dist/form/DragDrop.svelte +578 -0
  121. package/dist/form/DragDrop.svelte.d.ts +33 -0
  122. package/dist/form/Dropzone.svelte +28 -8
  123. package/dist/form/Dropzone.svelte.d.ts +2 -2
  124. package/dist/form/Editor.svelte +626 -0
  125. package/dist/form/Editor.svelte.d.ts +50 -0
  126. package/dist/form/ImageCropper.svelte +422 -61
  127. package/dist/form/ImageCropper.svelte.d.ts +15 -1
  128. package/dist/form/{PasswordStrength.svelte → PasswordField.svelte} +58 -24
  129. package/dist/form/{PasswordStrength.svelte.d.ts → PasswordField.svelte.d.ts} +6 -5
  130. package/dist/form/PhoneField.svelte +26 -14
  131. package/dist/form/PhoneField.svelte.d.ts +4 -3
  132. package/dist/form/PinField.svelte +39 -31
  133. package/dist/form/PinField.svelte.d.ts +3 -3
  134. package/dist/form/RadioGroup.svelte +9 -5
  135. package/dist/form/RadioGroup.svelte.d.ts +1 -1
  136. package/dist/form/Select.svelte +20 -19
  137. package/dist/form/Select.svelte.d.ts +2 -2
  138. package/dist/form/Slider.svelte +10 -4
  139. package/dist/form/Slider.svelte.d.ts +2 -1
  140. package/dist/form/TextField.svelte +29 -11
  141. package/dist/form/TextField.svelte.d.ts +5 -4
  142. package/dist/form/Textarea.svelte +15 -6
  143. package/dist/form/Textarea.svelte.d.ts +2 -2
  144. package/dist/form/Toggle.svelte +7 -3
  145. package/dist/form/Toggle.svelte.d.ts +1 -1
  146. package/dist/form/css/checkbox.css +18 -2
  147. package/dist/form/css/color-field.css +141 -0
  148. package/dist/form/css/control.css +193 -82
  149. package/dist/form/css/csv-field.css +221 -0
  150. package/dist/form/css/date-range.css +122 -0
  151. package/dist/form/css/date.css +24 -2
  152. package/dist/form/css/drag-drop.css +234 -0
  153. package/dist/form/css/dropzone.css +153 -34
  154. package/dist/form/css/editor.css +367 -0
  155. package/dist/form/css/field.css +4 -0
  156. package/dist/form/css/image-cropper.css +242 -20
  157. package/dist/form/css/radio-group.css +26 -1
  158. package/dist/form/css/select.css +2 -2
  159. package/dist/form/css/slider.css +37 -0
  160. package/dist/form/css/textarea.css +178 -75
  161. package/dist/form/css/toggle.css +15 -3
  162. package/dist/hooks/use-chat.svelte.js +1 -1
  163. package/dist/hooks/use-form.svelte.js +3 -3
  164. package/dist/hooks/use-search.svelte.js +0 -3
  165. package/dist/hooks/use-table.svelte.d.ts +1 -0
  166. package/dist/hooks/use-table.svelte.js +6 -0
  167. package/dist/icons/index.d.ts +34 -2
  168. package/dist/icons/index.js +36 -4
  169. package/dist/index.css +44 -49
  170. package/dist/index.d.ts +14 -4
  171. package/dist/index.js +13 -3
  172. package/dist/layout/AppBar.svelte +22 -14
  173. package/dist/layout/AppBar.svelte.d.ts +2 -1
  174. package/dist/layout/Footer.svelte +19 -11
  175. package/dist/layout/Footer.svelte.d.ts +2 -1
  176. package/dist/layout/Provider.svelte +32 -9
  177. package/dist/layout/Provider.svelte.d.ts +3 -1
  178. package/dist/layout/Sidebar.svelte +17 -8
  179. package/dist/layout/Sidebar.svelte.d.ts +2 -1
  180. package/dist/layout/css/app-bar.css +63 -66
  181. package/dist/layout/css/footer.css +62 -65
  182. package/dist/layout/css/sidebar.css +120 -59
  183. package/dist/navigation/BottomNav.svelte +51 -14
  184. package/dist/navigation/FooterGroup.svelte +1 -1
  185. package/dist/navigation/NavMenu.svelte +47 -23
  186. package/dist/navigation/NavMenu.svelte.d.ts +29 -0
  187. package/dist/navigation/Pagination.svelte +158 -0
  188. package/dist/navigation/Pagination.svelte.d.ts +18 -0
  189. package/dist/navigation/SideNav.svelte +30 -25
  190. package/dist/navigation/SideNav.svelte.d.ts +2 -3
  191. package/dist/navigation/Tabs.svelte +17 -7
  192. package/dist/navigation/Tabs.svelte.d.ts +2 -2
  193. package/dist/navigation/css/bottom-nav.css +319 -257
  194. package/dist/navigation/css/footer-group.css +1 -1
  195. package/dist/navigation/css/footer-nav.css +1 -1
  196. package/dist/navigation/css/nav-menu.css +331 -106
  197. package/dist/navigation/css/pagination.css +74 -0
  198. package/dist/navigation/css/side-nav.css +514 -75
  199. package/dist/navigation/css/tabs.css +246 -52
  200. package/dist/overlay/AlertDialog.svelte +58 -0
  201. package/dist/overlay/AlertDialog.svelte.d.ts +14 -25
  202. package/dist/overlay/Command.svelte +347 -0
  203. package/dist/overlay/Command.svelte.d.ts +33 -25
  204. package/dist/overlay/Drawer.svelte +49 -21
  205. package/dist/overlay/Drawer.svelte.d.ts +2 -2
  206. package/dist/overlay/Dropdown.svelte +3 -3
  207. package/dist/overlay/Modal.svelte +51 -16
  208. package/dist/overlay/Modal.svelte.d.ts +3 -3
  209. package/dist/overlay/Toast.svelte +41 -17
  210. package/dist/overlay/Toast.svelte.d.ts +1 -1
  211. package/dist/overlay/Tooltip.svelte +36 -27
  212. package/dist/overlay/Tooltip.svelte.d.ts +2 -2
  213. package/dist/overlay/css/command.css +68 -0
  214. package/dist/overlay/css/drawer.css +63 -24
  215. package/dist/overlay/css/dropdown.css +1 -1
  216. package/dist/overlay/css/hovercard.css +1 -1
  217. package/dist/overlay/css/modal.css +79 -27
  218. package/dist/overlay/css/toast.css +40 -24
  219. package/dist/overlay/css/tooltip.css +110 -67
  220. package/dist/stores/theme.svelte.js +44 -12
  221. package/dist/stores/toast.svelte.d.ts +4 -4
  222. package/dist/stores/toast.svelte.js +2 -2
  223. package/package.json +1 -1
  224. package/dist/utils/charts.d.ts +0 -27
  225. package/dist/utils/charts.js +0 -140
@@ -11,7 +11,8 @@
11
11
  controlClass?: string;
12
12
  onchange?: (value: string | number | undefined) => void;
13
13
  oninput?: (value: string | number | undefined) => void;
14
- variant?: 'primary' | 'secondary' | 'muted' | 'outlined' | 'line';
14
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
15
+ variant?: 'solid' | 'soft' | 'outlined' | 'line';
15
16
  size?: 'sm' | 'md' | 'lg';
16
17
  name?: string;
17
18
  label?: string;
@@ -24,7 +25,7 @@
24
25
  strong?: string;
25
26
  };
26
27
  isFloatLabel?: boolean;
27
- isSolid?: boolean;
28
+ hideStrength?: boolean;
28
29
  };
29
30
 
30
31
  let {
@@ -36,6 +37,7 @@
36
37
  onchange,
37
38
  oninput,
38
39
  variant = 'outlined',
40
+ color = 'muted',
39
41
  size = 'md',
40
42
  name,
41
43
  label,
@@ -48,23 +50,45 @@
48
50
  medium: 'Medium',
49
51
  strong: 'Strong'
50
52
  },
51
- isSolid
53
+ hideStrength
52
54
  }: Props = $props();
53
55
 
54
- const variantClasses = {
56
+ const colors = {
55
57
  primary: 'is-primary',
56
58
  secondary: 'is-secondary',
57
59
  muted: 'is-muted',
60
+ success: 'is-success',
61
+ info: 'is-info',
62
+ danger: 'is-danger',
63
+ warning: 'is-warning'
64
+ };
65
+
66
+ const variants = {
67
+ solid: 'is-solid',
68
+ soft: 'is-soft',
58
69
  outlined: 'is-outlined',
59
70
  line: 'is-line'
60
71
  };
61
72
 
73
+ const btnVariants = {
74
+ solid: 'solid',
75
+ soft: 'ghost',
76
+ outlined: 'ghost',
77
+ line: 'ghost'
78
+ };
79
+
62
80
  const sizeClasses = {
63
81
  sm: 'is-sm',
64
82
  md: 'is-md',
65
83
  lg: 'is-lg'
66
84
  };
67
85
 
86
+ const btnSizes = {
87
+ sm: 'xs',
88
+ md: 'sm',
89
+ lg: 'md'
90
+ };
91
+
68
92
  const uid = $props.id();
69
93
 
70
94
  let isActive = $state(false);
@@ -83,7 +107,8 @@
83
107
  label: string;
84
108
  color: string;
85
109
  } {
86
- if (!password) return { score: 0, label: '', color: 'bg-gray-300' };
110
+ if (hideStrength) return { score: 0, label: '', color: 'bg-muted' };
111
+ if (!password) return { score: 0, label: '', color: 'bg-muted' };
87
112
 
88
113
  let score = 0;
89
114
 
@@ -93,17 +118,17 @@
93
118
  if (/[A-Z]/.test(password)) score += 1;
94
119
  if (/\d/.test(password)) score += 1;
95
120
  if (/[!@#$%^&*(),.?":{}|<>]/.test(password)) score += 1;
96
- if (score <= 2) return { score, label: labels.weak || 'Weak', color: 'bg-red-500' };
121
+ if (score <= 2) return { score, label: labels.weak || 'Weak', color: 'bg-danger' };
97
122
  if (score <= 4)
98
123
  return {
99
124
  score,
100
125
  label: labels.medium || 'Medium',
101
- color: 'bg-yellow-500'
126
+ color: 'bg-warning'
102
127
  };
103
128
  return {
104
129
  score,
105
130
  label: labels.strong || 'Strong',
106
- color: 'bg-green-500'
131
+ color: 'bg-success'
107
132
  };
108
133
  }
109
134
  </script>
@@ -115,9 +140,9 @@
115
140
  <label
116
141
  class={cn(
117
142
  'control',
118
- variantClasses[variant],
143
+ colors[color],
144
+ variants[variant],
119
145
  sizeClasses[size],
120
- isSolid && 'is-solid',
121
146
  isFloatLabel && 'is-float',
122
147
  (isActive || isFocused) && 'is-active',
123
148
  controlClass
@@ -154,25 +179,34 @@
154
179
  onfocusout={() => (isFocused = false)}
155
180
  />
156
181
  <IconButton
157
- variant="ghost"
158
- size="sm"
182
+ size={btnSizes[size] as any}
159
183
  icon={show ? EyeShowRegularIcon : EyeOffRegularIcon}
184
+ {color}
185
+ variant={btnVariants[variant] as any}
160
186
  onclick={() => (show = !show)}
161
187
  />
162
188
  </label>
163
- <div class={cn('field-strength')}>
164
- <div class="field-strength-bars">
165
- {#each Array(4) as _, i}
166
- <div
167
- class="field-strength-bar-item"
168
- class:active={isBarActive(i, strength.score)}
169
- class:weak={strength.score <= 2 && isBarActive(i, strength.score)}
170
- class:medium={strength.score > 2 && strength.score <= 4 && isBarActive(i, strength.score)}
171
- class:strong={strength.score > 4 && isBarActive(i, strength.score)}
172
- ></div>
173
- {/each}
189
+ {#if !hideStrength}
190
+ <div class={cn('field-strength')}>
191
+ <div class="field-strength-bars">
192
+ {#each Array(4) as _, i}
193
+ <div
194
+ class="field-strength-bar-item"
195
+ class:active={isBarActive(i, strength.score)}
196
+ class:weak={strength.score <= 2 && isBarActive(i, strength.score)}
197
+ class:medium={strength.score > 2 &&
198
+ strength.score <= 4 &&
199
+ isBarActive(i, strength.score)}
200
+ class:strong={strength.score > 4 && isBarActive(i, strength.score)}
201
+ ></div>
202
+ {/each}
203
+ </div>
204
+ {#if strength.label}
205
+ <span class="field-strength-label">{strength.label}</span>
206
+ {/if}
174
207
  </div>
175
- </div>
208
+ {/if}
209
+
176
210
  {#if errorText || helpText}
177
211
  <div class={cn('field-help', errorText && 'is-danger')}>
178
212
  {errorText || helpText}
@@ -6,7 +6,8 @@ type Props = {
6
6
  controlClass?: string;
7
7
  onchange?: (value: string | number | undefined) => void;
8
8
  oninput?: (value: string | number | undefined) => void;
9
- variant?: 'primary' | 'secondary' | 'muted' | 'outlined' | 'line';
9
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
10
+ variant?: 'solid' | 'soft' | 'outlined' | 'line';
10
11
  size?: 'sm' | 'md' | 'lg';
11
12
  name?: string;
12
13
  label?: string;
@@ -19,8 +20,8 @@ type Props = {
19
20
  strong?: string;
20
21
  };
21
22
  isFloatLabel?: boolean;
22
- isSolid?: boolean;
23
+ hideStrength?: boolean;
23
24
  };
24
- declare const PasswordStrength: import("svelte").Component<Props, {}, "value">;
25
- type PasswordStrength = ReturnType<typeof PasswordStrength>;
26
- export default PasswordStrength;
25
+ declare const PasswordField: import("svelte").Component<Props, {}, "value">;
26
+ type PasswordField = ReturnType<typeof PasswordField>;
27
+ export default PasswordField;
@@ -12,17 +12,18 @@
12
12
  dialCode?: string;
13
13
  placeholder?: string;
14
14
  onchange?: (value: string) => void;
15
- variant?: 'primary' | 'secondary' | 'muted' | 'outlined' | 'line';
15
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
16
+ variant?: 'solid' | 'soft' | 'outlined' | 'line';
16
17
  size?: 'sm' | 'md' | 'lg';
17
18
  name?: string;
18
19
  dialCodeName?: string;
19
- class?: string;
20
+ rootClass?: string;
21
+ controlClass?: string;
20
22
  label?: string;
21
23
  isLabelActive?: boolean;
22
24
  helpText?: string;
23
25
  errorText?: string;
24
26
  isFloatLabel?: boolean;
25
- isSolid?: boolean;
26
27
  priorityCountries?: string[];
27
28
  searchPlaceholder?: string;
28
29
  emptyText?: string;
@@ -30,13 +31,15 @@
30
31
  };
31
32
 
32
33
  let {
33
- class: className,
34
+ rootClass,
35
+ controlClass,
34
36
  value = $bindable(''),
35
37
  countryCode = $bindable(''),
36
38
  dialCode = $bindable(''),
37
39
  placeholder = 'Enter phone number',
38
40
  onchange,
39
41
  variant = 'outlined',
42
+ color = 'muted',
40
43
  size = 'md',
41
44
  name,
42
45
  dialCodeName = 'dialCode',
@@ -45,17 +48,25 @@
45
48
  helpText,
46
49
  errorText,
47
50
  isFloatLabel,
48
- isSolid,
49
51
  priorityCountries = [],
50
52
  searchPlaceholder = 'Search country...',
51
53
  emptyText = 'No countries found',
52
54
  loadingText = 'Loading...'
53
55
  }: Props = $props();
54
56
 
55
- const variantClasses = {
57
+ const colors = {
56
58
  primary: 'is-primary',
57
59
  secondary: 'is-secondary',
58
60
  muted: 'is-muted',
61
+ success: 'is-success',
62
+ info: 'is-info',
63
+ danger: 'is-danger',
64
+ warning: 'is-warning'
65
+ };
66
+
67
+ const variants = {
68
+ solid: 'is-solid',
69
+ soft: 'is-soft',
59
70
  outlined: 'is-outlined',
60
71
  line: 'is-line'
61
72
  };
@@ -66,11 +77,11 @@
66
77
  lg: 'is-lg'
67
78
  };
68
79
 
69
- const avatarSizes = {
80
+ const avatarSizes: any = {
70
81
  sm: 'xs',
71
82
  md: 'sm',
72
83
  lg: 'md'
73
- } as const;
84
+ };
74
85
 
75
86
  let displayedCountries = $state<Country[]>([]);
76
87
  let allSortedCountries = $state<Country[]>([]);
@@ -359,7 +370,7 @@
359
370
  });
360
371
  </script>
361
372
 
362
- <div class={cn('field', className)}>
373
+ <div class={cn('field', rootClass)}>
363
374
  <input type="hidden" name={dialCodeName} bind:value={dialCode} />
364
375
 
365
376
  {#if !isFloatLabel && label}
@@ -371,11 +382,12 @@
371
382
  bind:this={controlElement}
372
383
  class={cn(
373
384
  'control',
374
- variantClasses[variant],
385
+ colors[color],
386
+ variants[variant],
375
387
  sizeClasses[size],
376
388
  isFloatLabel && 'is-float',
377
- isSolid && 'is-solid',
378
- (isActive || isFocused || isOpen) && 'is-active'
389
+ (isActive || isFocused || isOpen) && 'is-active',
390
+ controlClass
379
391
  )}
380
392
  class:is-error={errorText}
381
393
  onmouseenter={() => (isActive = true)}
@@ -433,7 +445,7 @@
433
445
  {/if}
434
446
 
435
447
  <div class:is-active={isOpen} class="combo-box-popover" bind:this={contentEl} {style}>
436
- <div class={cn('combo-box-search', variantClasses[variant])}>
448
+ <div class={cn('combo-box-search', variants[variant])}>
437
449
  <Icon icon={Search24RegularIcon} class="combo-box-search-icon" />
438
450
  <input
439
451
  bind:this={searchInputEl}
@@ -459,7 +471,7 @@
459
471
  onclick={() => handleSelect(item)}
460
472
  isActive={countryCode === item.id}
461
473
  isFocused={focusedIndex === index}
462
- variant="primary"
474
+ {color}
463
475
  size="sm"
464
476
  isCompact
465
477
  />
@@ -4,17 +4,18 @@ type Props = {
4
4
  dialCode?: string;
5
5
  placeholder?: string;
6
6
  onchange?: (value: string) => void;
7
- variant?: 'primary' | 'secondary' | 'muted' | 'outlined' | 'line';
7
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
8
+ variant?: 'solid' | 'soft' | 'outlined' | 'line';
8
9
  size?: 'sm' | 'md' | 'lg';
9
10
  name?: string;
10
11
  dialCodeName?: string;
11
- class?: string;
12
+ rootClass?: string;
13
+ controlClass?: string;
12
14
  label?: string;
13
15
  isLabelActive?: boolean;
14
16
  helpText?: string;
15
17
  errorText?: string;
16
18
  isFloatLabel?: boolean;
17
- isSolid?: boolean;
18
19
  priorityCountries?: string[];
19
20
  searchPlaceholder?: string;
20
21
  emptyText?: string;
@@ -5,9 +5,9 @@
5
5
  length?: number;
6
6
  values?: string[];
7
7
  class?: string;
8
- variant?: 'solid' | 'outlined' | 'soft' | 'line';
9
- color?: 'primary' | 'secondary' | 'muted';
10
- inputSize?: 'small' | 'medium' | 'large';
8
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
9
+ variant?: 'solid' | 'soft' | 'outlined' | 'line';
10
+ size?: 'sm' | 'md' | 'lg';
11
11
  type?: 'text' | 'password' | 'number';
12
12
  name?: string;
13
13
  label?: string;
@@ -18,35 +18,41 @@
18
18
 
19
19
  let {
20
20
  class: className,
21
- variant = 'soft',
22
- color = 'primary',
23
- inputSize = 'medium',
21
+ variant = 'outlined',
22
+ color = 'muted',
23
+ size = 'md',
24
24
  label,
25
25
  name,
26
26
  type = 'text',
27
27
  helpText,
28
28
  errorText,
29
29
  length = 6,
30
+ // svelte-ignore state_referenced_locally
30
31
  values = Array.from({ length }).map(() => ''),
31
32
  oncomplete
32
33
  }: Props = $props();
33
34
 
34
- const variants = {
35
- solid: 'field-solid',
36
- outlined: 'field-outlined',
37
- soft: 'field-soft',
38
- line: 'field-line'
39
- };
40
35
  const colors = {
41
- primary: 'field-primary',
42
- secondary: 'field-secondary',
43
- muted: 'field-muted'
36
+ primary: 'is-primary',
37
+ secondary: 'is-secondary',
38
+ muted: 'is-muted',
39
+ success: 'is-success',
40
+ info: 'is-info',
41
+ danger: 'is-danger',
42
+ warning: 'is-warning'
43
+ };
44
+
45
+ const variants = {
46
+ solid: 'is-solid',
47
+ soft: 'is-soft',
48
+ outlined: 'is-outlined',
49
+ line: 'is-line'
44
50
  };
45
51
 
46
- const sizes = {
47
- small: 'field-small',
48
- medium: 'field-medium',
49
- large: 'field-large'
52
+ const sizeClasses = {
53
+ sm: 'is-sm',
54
+ md: 'is-md',
55
+ lg: 'is-lg'
50
56
  };
51
57
 
52
58
  const uid = $props.id();
@@ -63,7 +69,7 @@
63
69
  values = [...values];
64
70
 
65
71
  if (index < length - 1 && target.value) {
66
- const nextInput = document.getElementById(`input-${index + 1}`) as HTMLInputElement;
72
+ const nextInput = document.getElementById(`${uid}-${name}-${index + 1}`) as HTMLInputElement;
67
73
  if (nextInput) {
68
74
  nextInput.focus();
69
75
  }
@@ -72,7 +78,7 @@
72
78
 
73
79
  const handleKeydown = (event: KeyboardEvent, index: number) => {
74
80
  if (event.key === 'Backspace' && index > 0 && !values[index]) {
75
- const prevInput = document.getElementById(`input-${index - 1}`) as HTMLInputElement;
81
+ const prevInput = document.getElementById(`${uid}-${name}-${index - 1}`) as HTMLInputElement;
76
82
  if (prevInput) {
77
83
  prevInput.focus();
78
84
  }
@@ -87,7 +93,7 @@
87
93
  let lastUpdatedIndex = 0;
88
94
  pasteValues.forEach((char, i) => {
89
95
  values[i] = char;
90
- const input = document.getElementById(`input-${i}`) as HTMLInputElement;
96
+ const input = document.getElementById(`${uid}-${name}-${i}`) as HTMLInputElement;
91
97
  if (input) {
92
98
  input.value = char;
93
99
  }
@@ -95,7 +101,9 @@
95
101
  });
96
102
  values = [...values];
97
103
 
98
- const lastInput = document.getElementById(`input-${lastUpdatedIndex}`) as HTMLInputElement;
104
+ const lastInput = document.getElementById(
105
+ `${uid}-${name}-${lastUpdatedIndex}`
106
+ ) as HTMLInputElement;
99
107
  if (lastInput) {
100
108
  lastInput.focus();
101
109
  }
@@ -112,25 +120,25 @@
112
120
  <div class={cn('field', className)}>
113
121
  <input type="hidden" {name} value={values.join('')} />
114
122
  {#if label}
115
- <label for={`${uid}-{name}`} class="label">{label}</label>
123
+ <span class="field-label">{label}</span>
116
124
  {/if}
117
- <div class="pin-wrapper">
125
+ <div class="field-pin-wrapper">
118
126
  {#each Array.from({ length }) as _, i}
119
- <div
120
- class={cn('field-control', variants[variant], colors[color], sizes[inputSize])}
121
- class:is-error={errorText}
127
+ <label
128
+ class={cn('control', colors[color], variants[variant], sizeClasses[size])}
129
+ for={`${uid}-${name}-${i}`}
122
130
  >
123
131
  <input
124
132
  {type}
125
- id={`input-${i}`}
126
- class="field-pin"
133
+ id={`${uid}-${name}-${i}`}
134
+ class="control-pin"
127
135
  maxlength="1"
128
136
  oninput={(e) => handleInput(e, i)}
129
137
  onkeydown={(e) => handleKeydown(e, i)}
130
138
  onpaste={handlePaste}
131
139
  bind:value={values[i]}
132
140
  />
133
- </div>
141
+ </label>
134
142
  {/each}
135
143
  </div>
136
144
  {#if errorText || helpText}
@@ -2,9 +2,9 @@ type Props = {
2
2
  length?: number;
3
3
  values?: string[];
4
4
  class?: string;
5
- variant?: 'solid' | 'outlined' | 'soft' | 'line';
6
- color?: 'primary' | 'secondary' | 'muted';
7
- inputSize?: 'small' | 'medium' | 'large';
5
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
6
+ variant?: 'solid' | 'soft' | 'outlined' | 'line';
7
+ size?: 'sm' | 'md' | 'lg';
8
8
  type?: 'text' | 'password' | 'number';
9
9
  name?: string;
10
10
  label?: string;
@@ -15,7 +15,7 @@
15
15
  name?: string;
16
16
  info?: string;
17
17
  error?: string;
18
- variant?: 'primary' | 'secondary' | 'muted';
18
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
19
19
  size?: 'sm' | 'md' | 'lg';
20
20
  };
21
21
  let {
@@ -26,15 +26,19 @@
26
26
  name,
27
27
  info,
28
28
  error,
29
- variant = 'primary',
29
+ color = 'primary',
30
30
  size = 'md',
31
31
  value = $bindable()
32
32
  }: Props = $props();
33
33
 
34
- const variantClases = {
34
+ const colors = {
35
35
  primary: 'is-primary',
36
36
  secondary: 'is-secondary',
37
- muted: 'is-muted'
37
+ muted: 'is-muted',
38
+ success: 'is-success',
39
+ info: 'is-info',
40
+ danger: 'is-danger',
41
+ warning: 'is-warning'
38
42
  };
39
43
 
40
44
  const sizes = {
@@ -57,7 +61,7 @@
57
61
  type="radio"
58
62
  value={item.id}
59
63
  bind:group={value}
60
- class={cn('radio', variantClases[variant], sizes[size])}
64
+ class={cn('radio', colors[color], sizes[size])}
61
65
  />
62
66
  <span class="label">{item.label}</span>
63
67
  </label>
@@ -11,7 +11,7 @@ type Props = {
11
11
  name?: string;
12
12
  info?: string;
13
13
  error?: string;
14
- variant?: 'primary' | 'secondary' | 'muted';
14
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
15
15
  size?: 'sm' | 'md' | 'lg';
16
16
  };
17
17
  declare const RadioGroup: import("svelte").Component<Props, {}, "value">;
@@ -17,7 +17,8 @@
17
17
  selected?: Option;
18
18
  placeholder?: string;
19
19
  onchange?: (value: unknown) => void;
20
- variant?: 'primary' | 'secondary' | 'muted' | 'outlined' | 'line';
20
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
21
+ variant?: 'solid' | 'soft' | 'outlined' | 'line';
21
22
  size?: 'sm' | 'md' | 'lg';
22
23
  name?: string;
23
24
  rootClass?: string;
@@ -26,7 +27,6 @@
26
27
  helpText?: string;
27
28
  errorText?: string;
28
29
  isFloatLabel?: boolean;
29
- isSolid?: boolean;
30
30
  };
31
31
 
32
32
  let {
@@ -37,14 +37,14 @@
37
37
  placeholder = 'Select an option',
38
38
  onchange,
39
39
  variant = 'outlined',
40
+ color = 'muted',
40
41
  size = 'md',
41
42
  name,
42
43
  label,
43
44
  isLabelActive,
44
45
  helpText,
45
46
  errorText,
46
- isFloatLabel,
47
- isSolid
47
+ isFloatLabel
48
48
  }: Props = $props();
49
49
 
50
50
  let isOpen = $state(false);
@@ -68,22 +68,23 @@
68
68
  `top: ${position.top}px; left: ${position.left}px; width: ${position.width}px; transform-origin: ${position.isBottomHalf ? 'bottom' : 'top'} center;`
69
69
  );
70
70
 
71
- const variantClasses = {
71
+ const colors = {
72
72
  primary: 'is-primary',
73
73
  secondary: 'is-secondary',
74
74
  muted: 'is-muted',
75
+ success: 'is-success',
76
+ info: 'is-info',
77
+ danger: 'is-danger',
78
+ warning: 'is-warning'
79
+ };
80
+
81
+ const variants = {
82
+ solid: 'is-solid',
83
+ soft: 'is-soft',
75
84
  outlined: 'is-outlined',
76
85
  line: 'is-line'
77
86
  };
78
87
 
79
- const itemVariants = {
80
- primary: 'primary',
81
- secondary: 'secondary',
82
- muted: 'muted',
83
- outlined: 'primary',
84
- line: 'primary'
85
- } as const;
86
-
87
88
  const sizeClasses = {
88
89
  sm: 'is-sm',
89
90
  md: 'is-md',
@@ -252,7 +253,7 @@
252
253
  };
253
254
 
254
255
  onMount(() => {
255
- if (value && !selected) {
256
+ if (value !== undefined && !selected) {
256
257
  selected = options.find((opt) => opt.id === value);
257
258
  } else if (selected) {
258
259
  value = selected.id;
@@ -262,7 +263,7 @@
262
263
  });
263
264
 
264
265
  $effect(() => {
265
- if (!value) {
266
+ if (value === undefined) {
266
267
  selected = undefined;
267
268
  }
268
269
  });
@@ -280,10 +281,10 @@
280
281
  bind:this={controlElement}
281
282
  class={cn(
282
283
  'control',
283
- variantClasses[variant],
284
+ colors[color],
285
+ variants[variant],
284
286
  sizeClasses[size],
285
287
  isFloatLabel && 'is-float',
286
- isSolid && 'is-solid',
287
288
  (isActive || isFocused) && 'is-active'
288
289
  )}
289
290
  class:is-error={errorText}
@@ -295,7 +296,7 @@
295
296
  <span
296
297
  class={cn(
297
298
  'control-label',
298
- (isActive || isFocused || isLabelActive || isOpen || value !== '') && 'is-active'
299
+ (isActive || isFocused || isLabelActive || isOpen || value !== undefined) && 'is-active'
299
300
  )}
300
301
  >
301
302
  {label}
@@ -334,12 +335,12 @@
334
335
  <Item
335
336
  label={item.label}
336
337
  src={item.src}
338
+ {color}
337
339
  description={item.description}
338
340
  id={item.id}
339
341
  onclick={() => handleSelect(item)}
340
342
  isActive={value === item.id}
341
343
  isFocused={focusedIndex === index}
342
- variant={itemVariants[variant]}
343
344
  size="sm"
344
345
  isCompact
345
346
  />
@@ -10,7 +10,8 @@ type Props = {
10
10
  selected?: Option;
11
11
  placeholder?: string;
12
12
  onchange?: (value: unknown) => void;
13
- variant?: 'primary' | 'secondary' | 'muted' | 'outlined' | 'line';
13
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
14
+ variant?: 'solid' | 'soft' | 'outlined' | 'line';
14
15
  size?: 'sm' | 'md' | 'lg';
15
16
  name?: string;
16
17
  rootClass?: string;
@@ -19,7 +20,6 @@ type Props = {
19
20
  helpText?: string;
20
21
  errorText?: string;
21
22
  isFloatLabel?: boolean;
22
- isSolid?: boolean;
23
23
  };
24
24
  declare const Select: import("svelte").Component<Props, {}, "selected" | "value">;
25
25
  type Select = ReturnType<typeof Select>;