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
@@ -0,0 +1,291 @@
1
+ @layer components {
2
+ .display-2xl {
3
+ @apply font-bold tracking-tight leading-none;
4
+ font-size: clamp(3rem, 8vw, 6rem);
5
+ }
6
+
7
+ .display-xl {
8
+ @apply font-bold tracking-tight leading-none;
9
+ font-size: clamp(2.5rem, 6vw, 4.5rem);
10
+ }
11
+
12
+ .display-lg {
13
+ @apply font-bold tracking-tight leading-tight;
14
+ font-size: clamp(2rem, 5vw, 3.75rem);
15
+ }
16
+
17
+ .display-md {
18
+ @apply font-semibold tracking-tight leading-tight;
19
+ font-size: clamp(1.75rem, 4vw, 3rem);
20
+ }
21
+
22
+ .display-sm {
23
+ @apply font-semibold tracking-tight leading-tight;
24
+ font-size: clamp(1.5rem, 3vw, 2.25rem);
25
+ }
26
+
27
+ .heading-xl {
28
+ @apply font-bold tracking-tight leading-snug;
29
+ font-size: clamp(1.75rem, 3.5vw, 2.5rem);
30
+ }
31
+
32
+ .heading-lg {
33
+ @apply font-semibold tracking-tight leading-snug;
34
+ font-size: clamp(1.5rem, 3vw, 2rem);
35
+ }
36
+
37
+ .heading-md {
38
+ @apply font-semibold leading-snug;
39
+ font-size: clamp(1.25rem, 2.5vw, 1.5rem);
40
+ }
41
+
42
+ .heading-sm {
43
+ @apply font-medium leading-snug;
44
+ font-size: clamp(1.125rem, 2vw, 1.25rem);
45
+ }
46
+
47
+ .heading-xs {
48
+ @apply font-medium leading-snug;
49
+ font-size: clamp(1rem, 1.5vw, 1.125rem);
50
+ }
51
+
52
+ .body-xl {
53
+ @apply font-normal leading-relaxed;
54
+ font-size: clamp(1.125rem, 1.5vw, 1.25rem);
55
+ }
56
+
57
+ .body-lg {
58
+ @apply font-normal leading-relaxed;
59
+ font-size: clamp(1rem, 1.25vw, 1.125rem);
60
+ }
61
+
62
+ .body-md {
63
+ @apply font-normal leading-relaxed;
64
+ font-size: 1rem;
65
+ }
66
+
67
+ .body-sm {
68
+ @apply font-normal leading-relaxed;
69
+ font-size: 0.875rem;
70
+ }
71
+
72
+ .body-xs {
73
+ @apply font-normal leading-relaxed;
74
+ font-size: 0.75rem;
75
+ }
76
+
77
+ .label-lg {
78
+ @apply font-medium leading-normal truncate;
79
+ font-size: 1rem;
80
+ }
81
+
82
+ .label-md {
83
+ @apply font-medium leading-normal truncate;
84
+ font-size: 0.875rem;
85
+ }
86
+
87
+ .label-sm {
88
+ @apply font-medium leading-normal truncate;
89
+ font-size: 0.75rem;
90
+ }
91
+
92
+ .caption-lg {
93
+ @apply font-normal leading-normal;
94
+ font-size: 0.875rem;
95
+ }
96
+
97
+ .caption-md {
98
+ @apply font-normal leading-normal;
99
+ font-size: 0.75rem;
100
+ }
101
+
102
+ .caption-sm {
103
+ @apply font-normal leading-normal ;
104
+ font-size: 0.625rem;
105
+ }
106
+
107
+ .hero-title {
108
+ @apply font-bold tracking-tight leading-none;
109
+ font-size: clamp(2.5rem, 8vw, 5rem);
110
+ text-wrap: balance;
111
+ }
112
+
113
+ .hero-subtitle {
114
+ @apply font-medium leading-relaxed;
115
+ font-size: clamp(1.125rem, 2vw, 1.5rem);
116
+ text-wrap: balance;
117
+ }
118
+
119
+ .hero-description {
120
+ @apply font-normal leading-relaxed;
121
+ font-size: clamp(1rem, 1.5vw, 1.25rem);
122
+ max-width: 65ch;
123
+ text-wrap: pretty;
124
+ }
125
+
126
+ .section-title {
127
+ @apply font-bold tracking-tight leading-tight;
128
+ font-size: clamp(1.75rem, 4vw, 2.5rem);
129
+ text-wrap: balance;
130
+ }
131
+
132
+ .section-subtitle {
133
+ @apply font-medium leading-relaxed;
134
+ font-size: clamp(1rem, 1.5vw, 1.25rem);
135
+ text-wrap: balance;
136
+ }
137
+
138
+ .section-description {
139
+ @apply font-normal leading-relaxed;
140
+ font-size: clamp(0.9375rem, 1.25vw, 1.125rem);
141
+ max-width: 60ch;
142
+ text-wrap: pretty;
143
+ }
144
+
145
+ .cta-title {
146
+ @apply font-bold tracking-tight leading-tight;
147
+ font-size: clamp(1.5rem, 3.5vw, 2.25rem);
148
+ text-wrap: balance;
149
+ }
150
+
151
+ .cta-subtitle {
152
+ @apply font-medium leading-relaxed;
153
+ font-size: clamp(1rem, 1.5vw, 1.125rem);
154
+ text-wrap: balance;
155
+ }
156
+
157
+ .cta-description {
158
+ @apply font-normal leading-relaxed;
159
+ font-size: clamp(0.875rem, 1.25vw, 1rem);
160
+ max-width: 50ch;
161
+ text-wrap: pretty;
162
+ }
163
+
164
+ .subheading {
165
+ @apply font-semibold uppercase tracking-widest;
166
+ font-size: clamp(0.75rem, 1vw, 0.875rem);
167
+ color: var(--primary);
168
+ }
169
+
170
+ .subheading-muted {
171
+ @apply font-semibold uppercase tracking-widest;
172
+ font-size: clamp(0.75rem, 1vw, 0.875rem);
173
+ }
174
+
175
+ .lead {
176
+ @apply font-normal leading-relaxed;
177
+ font-size: clamp(1.125rem, 1.5vw, 1.375rem);
178
+ text-wrap: pretty;
179
+ }
180
+
181
+ .lead-lg {
182
+ @apply font-normal leading-relaxed;
183
+ font-size: clamp(1.25rem, 2vw, 1.5rem);
184
+ text-wrap: pretty;
185
+ }
186
+
187
+ .overline {
188
+ @apply font-semibold uppercase tracking-widest;
189
+ font-size: 0.75rem;
190
+ margin-bottom: 0.5rem;
191
+ }
192
+
193
+ .overline-primary {
194
+ @apply overline;
195
+ color: var(--primary);
196
+ }
197
+
198
+ .overline-secondary {
199
+ @apply overline;
200
+ color: var(--secondary);
201
+ }
202
+
203
+ .overline-muted {
204
+ @apply overline;
205
+ }
206
+
207
+ .quote {
208
+ @apply font-medium italic leading-relaxed;
209
+ font-size: clamp(1.125rem, 2vw, 1.5rem);
210
+ }
211
+
212
+ .quote-lg {
213
+ @apply font-medium italic leading-relaxed;
214
+ font-size: clamp(1.25rem, 2.5vw, 1.75rem);
215
+ }
216
+
217
+ .feature-title {
218
+ @apply font-semibold leading-snug;
219
+ font-size: clamp(1.125rem, 1.5vw, 1.25rem);
220
+ }
221
+
222
+ .feature-description {
223
+ @apply font-normal leading-relaxed;
224
+ font-size: clamp(0.875rem, 1.25vw, 1rem);
225
+ }
226
+
227
+ .card-title {
228
+ @apply font-semibold leading-snug;
229
+ font-size: clamp(1rem, 1.25vw, 1.125rem);
230
+ }
231
+
232
+ .card-description {
233
+ @apply font-normal leading-relaxed;
234
+ font-size: clamp(0.8125rem, 1vw, 0.875rem);
235
+ }
236
+
237
+ .nav-item {
238
+ @apply font-medium leading-normal;
239
+ font-size: 0.875rem;
240
+ }
241
+
242
+ .nav-item-lg {
243
+ @apply font-medium leading-normal;
244
+ font-size: 1rem;
245
+ }
246
+
247
+ .code-inline {
248
+ @apply font-mono bg-muted text-on-muted rounded;
249
+ @apply px-[0.3rem] py-[0.2rem];
250
+ font-size: 0.875em;
251
+ }
252
+
253
+ .code-block {
254
+ @apply font-mono leading-relaxed bg-muted text-on-muted rounded;
255
+ @apply px-[0.3rem] py-[0.2rem];
256
+ font-size: 0.875rem;
257
+ }
258
+
259
+ .text-balance {
260
+ text-wrap: balance;
261
+ }
262
+
263
+ .text-pretty {
264
+ text-wrap: pretty;
265
+ }
266
+
267
+ .truncate-lines-2 {
268
+ display: -webkit-box;
269
+ -webkit-line-clamp: 2;
270
+ -webkit-box-orient: vertical;
271
+ overflow: hidden;
272
+ }
273
+
274
+ .truncate-lines-3 {
275
+ display: -webkit-box;
276
+ -webkit-line-clamp: 3;
277
+ -webkit-box-orient: vertical;
278
+ overflow: hidden;
279
+ }
280
+
281
+ .truncate-lines-4 {
282
+ display: -webkit-box;
283
+ -webkit-line-clamp: 4;
284
+ -webkit-box-orient: vertical;
285
+ overflow: hidden;
286
+ }
287
+
288
+ .prose-narrow { max-width: 45ch; }
289
+ .prose-normal { max-width: 65ch; }
290
+ .prose-wide { max-width: 80ch; }
291
+ }
@@ -104,7 +104,6 @@
104
104
  @apply col-span-12;
105
105
  }
106
106
 
107
- /* Grid auto-fit (responsive) */
108
107
  @utility grid-auto-fit {
109
108
  @apply grid grid-cols-[repeat(auto-fit,minmax(250px,1fr))];
110
109
  }
@@ -113,9 +112,6 @@
113
112
  @apply grid grid-cols-[repeat(auto-fill,minmax(250px,1fr))];
114
113
  }
115
114
 
116
- /* Viewport Height Utilities */
117
- /* These utilities set the height to 100vh minus a specified rem value */
118
-
119
115
  @utility vh-8 {
120
116
  height: calc(100vh - 2rem);
121
117
  }
@@ -16,7 +16,17 @@
16
16
 
17
17
  type Props = {
18
18
  items: AccordionItem[];
19
- variant?: 'primary' | 'secondary' | 'muted' | 'outline';
19
+ variant?: 'solid' | 'soft' | 'outlined' | 'ghost';
20
+ color?:
21
+ | 'primary'
22
+ | 'secondary'
23
+ | 'muted'
24
+ | 'success'
25
+ | 'info'
26
+ | 'warning'
27
+ | 'danger'
28
+ | 'surface'
29
+ | 'background';
20
30
  multiple?: boolean;
21
31
  rootClass?: string;
22
32
  itemClass?: string;
@@ -26,7 +36,8 @@
26
36
 
27
37
  const {
28
38
  items = [],
29
- variant = 'muted',
39
+ variant = 'ghost',
40
+ color = 'background',
30
41
  multiple = false,
31
42
  rootClass,
32
43
  itemClass,
@@ -35,6 +46,7 @@
35
46
  }: Props = $props();
36
47
 
37
48
  let openItems = $state<Record<string, boolean>>(
49
+ // svelte-ignore state_referenced_locally
38
50
  items.reduce(
39
51
  (acc, item) => {
40
52
  if (item.defaultOpen) {
@@ -47,10 +59,22 @@
47
59
  );
48
60
 
49
61
  const variants = {
62
+ solid: 'is-solid',
63
+ soft: 'is-soft',
64
+ outlined: 'is-outlined',
65
+ ghost: 'is-ghost'
66
+ };
67
+
68
+ const colors = {
50
69
  primary: 'is-primary',
51
70
  secondary: 'is-secondary',
52
71
  muted: 'is-muted',
53
- outline: 'is-outline'
72
+ success: 'is-success',
73
+ info: 'is-info',
74
+ warning: 'is-warning',
75
+ danger: 'is-danger',
76
+ surface: 'is-surface',
77
+ background: 'is-background'
54
78
  };
55
79
 
56
80
  function toggleItem(itemId: string, disabled?: boolean) {
@@ -65,7 +89,7 @@
65
89
  }
66
90
  </script>
67
91
 
68
- <div class={cn('accordion', variants[variant], rootClass)}>
92
+ <div class={cn('accordion', variants[variant], colors[color], rootClass)}>
69
93
  {#each items as item}
70
94
  <div class={cn('accordion-item', itemClass, item.disabled && 'is-disabled')}>
71
95
  <!-- svelte-ignore a11y_click_events_have_key_events -->
@@ -8,7 +8,8 @@ type AccordionItem = {
8
8
  };
9
9
  type Props = {
10
10
  items: AccordionItem[];
11
- variant?: 'primary' | 'secondary' | 'muted' | 'outline';
11
+ variant?: 'solid' | 'soft' | 'outlined' | 'ghost';
12
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'warning' | 'danger' | 'surface' | 'background';
12
13
  multiple?: boolean;
13
14
  rootClass?: string;
14
15
  itemClass?: string;
@@ -10,39 +10,59 @@
10
10
  import type { Snippet } from 'svelte';
11
11
  import type { IconData } from './Icon.svelte';
12
12
 
13
- type AlertStatus = 'info' | 'success' | 'warning' | 'danger';
14
-
15
13
  type Props = {
16
14
  title?: string;
17
15
  description?: string;
18
16
  children?: Snippet;
19
17
  showIcon?: boolean;
20
18
  icon?: IconData;
21
- status?: AlertStatus;
22
- isSolid?: boolean;
19
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
20
+ variant?: 'solid' | 'soft';
23
21
  };
24
22
 
25
- let { title, description, children, showIcon, icon, status = 'info', isSolid }: Props = $props();
23
+ let {
24
+ title,
25
+ description,
26
+ children,
27
+ showIcon,
28
+ icon,
29
+ color = 'info',
30
+ variant = 'soft'
31
+ }: Props = $props();
26
32
 
27
- const STATUS_COLORS: Record<AlertStatus, string> = {
28
- info: 'is-info',
33
+ const colors = {
34
+ primary: 'is-primary',
35
+ secondary: 'is-secondary',
36
+ muted: 'is-muted',
29
37
  success: 'is-success',
30
- warning: 'is-warning',
31
- danger: 'is-danger'
38
+ info: 'is-info',
39
+ danger: 'is-danger',
40
+ warning: 'is-warning'
41
+ };
42
+
43
+ const variants = {
44
+ solid: 'is-solid',
45
+ soft: 'is-soft'
32
46
  };
33
47
 
34
- const DEFAULT_ICONS: Record<AlertStatus, IconData> = {
48
+ const DEFAULT_ICONS: Record<
49
+ 'primary' | 'secondary' | 'muted' | 'info' | 'success' | 'warning' | 'danger',
50
+ IconData
51
+ > = {
52
+ primary: Info24RegularIcon,
53
+ secondary: Info24RegularIcon,
54
+ muted: Info24RegularIcon,
35
55
  info: Info24RegularIcon,
36
56
  success: CheckmarkCircle24RegularIcon,
37
57
  warning: Warning24RegularIcon,
38
58
  danger: DismissCircle24RegularIcon
39
59
  };
40
60
 
41
- const currentIcon = $derived(icon ?? DEFAULT_ICONS[status]);
61
+ const currentIcon = $derived(icon ?? DEFAULT_ICONS[color as keyof typeof DEFAULT_ICONS]);
42
62
  const hasContent = $derived(description || children);
43
63
  </script>
44
64
 
45
- <div class={cn('alert', STATUS_COLORS[status], isSolid && 'is-solid')}>
65
+ <div class={cn('alert', colors[color], variants[variant])}>
46
66
  {#if showIcon}
47
67
  <div class="alert-start">
48
68
  <Icon icon={currentIcon} class="alert-icon" />
@@ -1,14 +1,13 @@
1
1
  import type { Snippet } from 'svelte';
2
2
  import type { IconData } from './Icon.svelte';
3
- type AlertStatus = 'info' | 'success' | 'warning' | 'danger';
4
3
  type Props = {
5
4
  title?: string;
6
5
  description?: string;
7
6
  children?: Snippet;
8
7
  showIcon?: boolean;
9
8
  icon?: IconData;
10
- status?: AlertStatus;
11
- isSolid?: boolean;
9
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
10
+ variant?: 'solid' | 'soft';
12
11
  };
13
12
  declare const Alert: import("svelte").Component<Props, {}, "">;
14
13
  type Alert = ReturnType<typeof Alert>;
@@ -1,4 +1,6 @@
1
1
  <script lang="ts">
2
+ import type { IconData } from './Icon.svelte';
3
+ import { Icon } from '../index.js';
2
4
  import { cn } from '../utils/class-names.js';
3
5
 
4
6
  type Props = {
@@ -8,18 +10,12 @@
8
10
  href?: string;
9
11
  onclick?: () => void;
10
12
  target?: '_self' | '_blank' | '_parent' | '_top';
11
- variant?:
12
- | 'primary'
13
- | 'secondary'
14
- | 'muted'
15
- | 'success'
16
- | 'warning'
17
- | 'danger'
18
- | 'info'
19
- | 'transparent';
13
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
14
+ variant?: 'solid' | 'soft';
20
15
  size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
21
16
  status?: 'online' | 'offline' | 'busy' | 'away';
22
17
  isBordered?: boolean;
18
+ icon?: IconData;
23
19
  class?: string;
24
20
  };
25
21
 
@@ -30,25 +26,31 @@
30
26
  href,
31
27
  onclick,
32
28
  target,
33
- size = 'lg',
34
- variant = 'primary',
29
+ color = 'primary',
30
+ variant = 'solid',
31
+ size = 'md',
35
32
  status,
36
33
  isBordered,
34
+ icon,
37
35
  class: className
38
36
  }: Props = $props();
39
37
 
40
- const variantClasses = {
38
+ const colors = {
41
39
  primary: 'is-primary',
42
40
  secondary: 'is-secondary',
43
41
  muted: 'is-muted',
44
42
  success: 'is-success',
45
- warning: 'is-warning',
46
- danger: 'is-danger',
47
43
  info: 'is-info',
48
- transparent: 'is-transparent'
44
+ danger: 'is-danger',
45
+ warning: 'is-warning'
46
+ };
47
+
48
+ const variants = {
49
+ solid: 'is-solid',
50
+ soft: 'is-soft'
49
51
  };
50
52
 
51
- const sizeClasses = {
53
+ const sizes = {
52
54
  xs: 'is-xs',
53
55
  sm: 'is-sm',
54
56
  md: 'is-md',
@@ -66,8 +68,9 @@
66
68
  const baseClasses = $derived(
67
69
  cn(
68
70
  'avatar',
69
- sizeClasses[size],
70
- variantClasses[variant],
71
+ colors[color],
72
+ sizes[size],
73
+ variants[variant],
71
74
  isBordered && 'is-bordered',
72
75
  (href || onclick) && 'is-clickable',
73
76
  className
@@ -83,6 +86,8 @@
83
86
  {/if}
84
87
  {#if src}
85
88
  <img {src} {alt} class="avatar-image" />
89
+ {:else if icon}
90
+ <Icon {icon} class="avatar-icon" />
86
91
  {:else}
87
92
  <span class="avatar-name">{name?.charAt(0).toUpperCase() || alt.charAt(0).toUpperCase()}</span>
88
93
  {/if}
@@ -1,3 +1,4 @@
1
+ import type { IconData } from './Icon.svelte';
1
2
  type Props = {
2
3
  src?: string;
3
4
  name?: string;
@@ -5,10 +6,12 @@ type Props = {
5
6
  href?: string;
6
7
  onclick?: () => void;
7
8
  target?: '_self' | '_blank' | '_parent' | '_top';
8
- variant?: 'primary' | 'secondary' | 'muted' | 'success' | 'warning' | 'danger' | 'info' | 'transparent';
9
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
10
+ variant?: 'solid' | 'soft';
9
11
  size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
10
12
  status?: 'online' | 'offline' | 'busy' | 'away';
11
13
  isBordered?: boolean;
14
+ icon?: IconData;
12
15
  class?: string;
13
16
  };
14
17
  declare const Avatar: import("svelte").Component<Props, {}, "">;
@@ -13,37 +13,35 @@
13
13
 
14
14
  type Props = {
15
15
  items: AvatarItem[];
16
- variant?:
17
- | 'primary'
18
- | 'secondary'
19
- | 'muted'
20
- | 'success'
21
- | 'warning'
22
- | 'danger'
23
- | 'info'
24
- | 'transparent';
16
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
17
+ variant?: 'solid' | 'soft';
25
18
  size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
26
19
  max?: number;
27
- stacked?: boolean;
20
+ isInline?: boolean;
28
21
  isBordered?: boolean;
29
- class?: string;
22
+ classRoot?: string;
23
+ classAvatar?: string;
24
+ classCounter?: string;
30
25
  };
31
26
 
32
27
  const {
33
28
  items,
34
- variant = 'primary',
35
- size = 'lg',
29
+ variant = 'solid',
30
+ color = 'primary',
31
+ size = 'md',
36
32
  max,
37
- stacked = true,
38
- isBordered = false,
39
- class: className
33
+ isInline,
34
+ isBordered,
35
+ classRoot,
36
+ classAvatar,
37
+ classCounter
40
38
  }: Props = $props();
41
39
 
42
40
  const visibleItems = $derived(max && max < items.length ? items.slice(0, max) : items);
43
41
  const remainingCount = $derived(max && max < items.length ? items.length - max : 0);
44
42
  </script>
45
43
 
46
- <div class={cn('avatar-group', stacked && 'is-stacked', className)}>
44
+ <div class={cn('avatar-group', !isInline && 'is-stacked', classRoot)}>
47
45
  {#each visibleItems as item, i}
48
46
  <Avatar
49
47
  src={item.src}
@@ -54,11 +52,15 @@
54
52
  target={item.target}
55
53
  {variant}
56
54
  {size}
55
+ {color}
57
56
  {isBordered}
57
+ class={classAvatar}
58
58
  />
59
59
  {/each}
60
60
  {#if remainingCount > 0}
61
- <div class={cn('avatar-group-counter', `is-${size}`, `is-${variant}`)}>
61
+ <div
62
+ class={cn('avatar-group-counter', `is-${size}`, `is-${variant}`, `is-${color}`, classCounter)}
63
+ >
62
64
  +{remainingCount}
63
65
  </div>
64
66
  {/if}
@@ -8,12 +8,15 @@ type AvatarItem = {
8
8
  };
9
9
  type Props = {
10
10
  items: AvatarItem[];
11
- variant?: 'primary' | 'secondary' | 'muted' | 'success' | 'warning' | 'danger' | 'info' | 'transparent';
11
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
12
+ variant?: 'solid' | 'soft';
12
13
  size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
13
14
  max?: number;
14
- stacked?: boolean;
15
+ isInline?: boolean;
15
16
  isBordered?: boolean;
16
- class?: string;
17
+ classRoot?: string;
18
+ classAvatar?: string;
19
+ classCounter?: string;
17
20
  };
18
21
  declare const AvatarGroup: import("svelte").Component<Props, {}, "">;
19
22
  type AvatarGroup = ReturnType<typeof AvatarGroup>;