ui-svelte 0.2.10 → 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 (206) 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 +427 -2
  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 +54 -26
  51. package/dist/display/Avatar.svelte.d.ts +7 -1
  52. package/dist/display/AvatarGroup.svelte +26 -18
  53. package/dist/display/AvatarGroup.svelte.d.ts +9 -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 +31 -18
  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 -44
  83. package/dist/display/css/avatar.css +152 -123
  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/PasswordField.svelte +120 -75
  119. package/dist/form/PasswordField.svelte.d.ts +9 -10
  120. package/dist/form/PhoneField.svelte +34 -16
  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 +11 -1
  135. package/dist/form/Toggle.svelte.d.ts +2 -0
  136. package/dist/form/css/checkbox.css +18 -2
  137. package/dist/form/css/color-field.css +141 -0
  138. package/dist/form/css/control.css +193 -82
  139. package/dist/form/css/csv-field.css +226 -0
  140. package/dist/form/css/date-range.css +122 -0
  141. package/dist/form/css/date.css +24 -2
  142. package/dist/form/css/drag-drop.css +271 -0
  143. package/dist/form/css/dropzone.css +153 -34
  144. package/dist/form/css/editor.css +367 -0
  145. package/dist/form/css/field.css +4 -0
  146. package/dist/form/css/image-cropper.css +223 -22
  147. package/dist/form/css/password.css +1 -1
  148. package/dist/form/css/radio-group.css +1 -1
  149. package/dist/form/css/select.css +2 -2
  150. package/dist/form/css/slider.css +1 -0
  151. package/dist/form/css/textarea.css +178 -75
  152. package/dist/form/css/toggle.css +11 -2
  153. package/dist/hooks/use-table.svelte.d.ts +1 -0
  154. package/dist/hooks/use-table.svelte.js +6 -0
  155. package/dist/icons/index.d.ts +38 -2
  156. package/dist/icons/index.js +40 -4
  157. package/dist/index.css +16 -1
  158. package/dist/index.d.ts +11 -3
  159. package/dist/index.js +10 -2
  160. package/dist/layout/AppBar.svelte +22 -14
  161. package/dist/layout/AppBar.svelte.d.ts +2 -1
  162. package/dist/layout/Footer.svelte +19 -11
  163. package/dist/layout/Footer.svelte.d.ts +2 -1
  164. package/dist/layout/Provider.svelte +27 -4
  165. package/dist/layout/Provider.svelte.d.ts +3 -1
  166. package/dist/layout/css/app-bar.css +63 -66
  167. package/dist/layout/css/footer.css +62 -65
  168. package/dist/navigation/BottomNav.svelte +41 -13
  169. package/dist/navigation/FooterGroup.svelte +1 -1
  170. package/dist/navigation/NavMenu.svelte +47 -23
  171. package/dist/navigation/NavMenu.svelte.d.ts +29 -0
  172. package/dist/navigation/Pagination.svelte +158 -0
  173. package/dist/navigation/Pagination.svelte.d.ts +18 -0
  174. package/dist/navigation/SideNav.svelte +30 -25
  175. package/dist/navigation/SideNav.svelte.d.ts +2 -3
  176. package/dist/navigation/Tabs.svelte +17 -7
  177. package/dist/navigation/Tabs.svelte.d.ts +2 -2
  178. package/dist/navigation/css/bottom-nav.css +279 -257
  179. package/dist/navigation/css/footer-group.css +1 -1
  180. package/dist/navigation/css/footer-nav.css +1 -1
  181. package/dist/navigation/css/nav-menu.css +332 -106
  182. package/dist/navigation/css/pagination.css +74 -0
  183. package/dist/navigation/css/side-nav.css +515 -75
  184. package/dist/navigation/css/tabs.css +246 -52
  185. package/dist/overlay/Command.svelte +340 -0
  186. package/dist/overlay/Command.svelte.d.ts +24 -25
  187. package/dist/overlay/Drawer.svelte +49 -21
  188. package/dist/overlay/Drawer.svelte.d.ts +2 -2
  189. package/dist/overlay/Dropdown.svelte +4 -5
  190. package/dist/overlay/Modal.svelte +51 -16
  191. package/dist/overlay/Modal.svelte.d.ts +3 -3
  192. package/dist/overlay/Toast.svelte +41 -17
  193. package/dist/overlay/Toast.svelte.d.ts +1 -1
  194. package/dist/overlay/Tooltip.svelte +40 -26
  195. package/dist/overlay/Tooltip.svelte.d.ts +2 -2
  196. package/dist/overlay/css/command.css +80 -0
  197. package/dist/overlay/css/drawer.css +63 -24
  198. package/dist/overlay/css/dropdown.css +1 -1
  199. package/dist/overlay/css/hovercard.css +1 -1
  200. package/dist/overlay/css/modal.css +27 -27
  201. package/dist/overlay/css/toast.css +17 -29
  202. package/dist/overlay/css/tooltip.css +83 -66
  203. package/dist/stores/theme.svelte.js +26 -1
  204. package/dist/stores/toast.svelte.d.ts +4 -4
  205. package/dist/stores/toast.svelte.js +2 -2
  206. package/package.json +1 -1
@@ -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
+ }
@@ -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
+ | 'default';
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 = 'default',
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
+ default: 'is-default'
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' | 'default';
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,22 +1,21 @@
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 = {
5
7
  src?: string;
6
8
  name?: string;
7
9
  alt?: string;
8
- variant?:
9
- | 'primary'
10
- | 'secondary'
11
- | 'muted'
12
- | 'success'
13
- | 'warning'
14
- | 'danger'
15
- | 'info'
16
- | 'transparent';
10
+ href?: string;
11
+ onclick?: () => void;
12
+ target?: '_self' | '_blank' | '_parent' | '_top';
13
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
14
+ variant?: 'solid' | 'soft';
17
15
  size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
18
16
  status?: 'online' | 'offline' | 'busy' | 'away';
19
17
  isBordered?: boolean;
18
+ icon?: IconData;
20
19
  class?: string;
21
20
  };
22
21
 
@@ -24,25 +23,34 @@
24
23
  src,
25
24
  name,
26
25
  alt = 'Avatar',
27
- size = 'lg',
28
- variant = 'primary',
26
+ href,
27
+ onclick,
28
+ target,
29
+ color = 'primary',
30
+ variant = 'solid',
31
+ size = 'md',
29
32
  status,
30
33
  isBordered,
34
+ icon,
31
35
  class: className
32
36
  }: Props = $props();
33
37
 
34
- const variantClasses = {
38
+ const colors = {
35
39
  primary: 'is-primary',
36
40
  secondary: 'is-secondary',
37
41
  muted: 'is-muted',
38
42
  success: 'is-success',
39
- warning: 'is-warning',
40
- danger: 'is-danger',
41
43
  info: 'is-info',
42
- transparent: 'is-transparent'
44
+ danger: 'is-danger',
45
+ warning: 'is-warning'
46
+ };
47
+
48
+ const variants = {
49
+ solid: 'is-solid',
50
+ soft: 'is-soft'
43
51
  };
44
52
 
45
- const sizeClasses = {
53
+ const sizes = {
46
54
  xs: 'is-xs',
47
55
  sm: 'is-sm',
48
56
  md: 'is-md',
@@ -56,17 +64,21 @@
56
64
  busy: 'is-busy',
57
65
  away: 'is-away'
58
66
  };
67
+
68
+ const baseClasses = $derived(
69
+ cn(
70
+ 'avatar',
71
+ colors[color],
72
+ sizes[size],
73
+ variants[variant],
74
+ isBordered && 'is-bordered',
75
+ (href || onclick) && 'is-clickable',
76
+ className
77
+ )
78
+ );
59
79
  </script>
60
80
 
61
- <div
62
- class={cn(
63
- 'avatar',
64
- sizeClasses[size],
65
- variantClasses[variant],
66
- isBordered && 'is-bordered',
67
- className
68
- )}
69
- >
81
+ {#snippet avatarContent()}
70
82
  {#if status}
71
83
  <div class="avatar-status">
72
84
  <div class={cn('avatar-indicator', statusClasses[status])}></div>
@@ -74,7 +86,23 @@
74
86
  {/if}
75
87
  {#if src}
76
88
  <img {src} {alt} class="avatar-image" />
89
+ {:else if icon}
90
+ <Icon {icon} class="avatar-icon" />
77
91
  {:else}
78
92
  <span class="avatar-name">{name?.charAt(0).toUpperCase() || alt.charAt(0).toUpperCase()}</span>
79
93
  {/if}
80
- </div>
94
+ {/snippet}
95
+
96
+ {#if href}
97
+ <a class={baseClasses} {href} {target}>
98
+ {@render avatarContent()}
99
+ </a>
100
+ {:else if onclick}
101
+ <button type="button" class={baseClasses} {onclick}>
102
+ {@render avatarContent()}
103
+ </button>
104
+ {:else}
105
+ <div class={baseClasses}>
106
+ {@render avatarContent()}
107
+ </div>
108
+ {/if}
@@ -1,11 +1,17 @@
1
+ import type { IconData } from './Icon.svelte';
1
2
  type Props = {
2
3
  src?: string;
3
4
  name?: string;
4
5
  alt?: string;
5
- variant?: 'primary' | 'secondary' | 'muted' | 'success' | 'warning' | 'danger' | 'info' | 'transparent';
6
+ href?: string;
7
+ onclick?: () => void;
8
+ target?: '_self' | '_blank' | '_parent' | '_top';
9
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
10
+ variant?: 'solid' | 'soft';
6
11
  size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
7
12
  status?: 'online' | 'offline' | 'busy' | 'away';
8
13
  isBordered?: boolean;
14
+ icon?: IconData;
9
15
  class?: string;
10
16
  };
11
17
  declare const Avatar: import("svelte").Component<Props, {}, "">;
@@ -6,53 +6,61 @@
6
6
  src?: string;
7
7
  name?: string;
8
8
  alt?: string;
9
+ href?: string;
10
+ onclick?: () => void;
11
+ target?: '_self' | '_blank' | '_parent' | '_top';
9
12
  };
10
13
 
11
14
  type Props = {
12
15
  items: AvatarItem[];
13
- variant?:
14
- | 'primary'
15
- | 'secondary'
16
- | 'muted'
17
- | 'success'
18
- | 'warning'
19
- | 'danger'
20
- | 'info'
21
- | 'transparent';
16
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
17
+ variant?: 'solid' | 'soft';
22
18
  size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
23
19
  max?: number;
24
- stacked?: boolean;
20
+ isInline?: boolean;
25
21
  isBordered?: boolean;
26
- class?: string;
22
+ classRoot?: string;
23
+ classAvatar?: string;
24
+ classCounter?: string;
27
25
  };
28
26
 
29
27
  const {
30
28
  items,
31
- variant = 'primary',
32
- size = 'lg',
29
+ variant = 'solid',
30
+ color = 'primary',
31
+ size = 'md',
33
32
  max,
34
- stacked = true,
35
- isBordered = false,
36
- class: className
33
+ isInline,
34
+ isBordered,
35
+ classRoot,
36
+ classAvatar,
37
+ classCounter
37
38
  }: Props = $props();
38
39
 
39
40
  const visibleItems = $derived(max && max < items.length ? items.slice(0, max) : items);
40
41
  const remainingCount = $derived(max && max < items.length ? items.length - max : 0);
41
42
  </script>
42
43
 
43
- <div class={cn('avatar-group', stacked && 'is-stacked', className)}>
44
+ <div class={cn('avatar-group', !isInline && 'is-stacked', classRoot)}>
44
45
  {#each visibleItems as item, i}
45
46
  <Avatar
46
47
  src={item.src}
47
48
  name={item.name}
48
49
  alt={item.alt || `Avatar ${i + 1}`}
50
+ href={item.href}
51
+ onclick={item.onclick}
52
+ target={item.target}
49
53
  {variant}
50
54
  {size}
55
+ {color}
51
56
  {isBordered}
57
+ class={classAvatar}
52
58
  />
53
59
  {/each}
54
60
  {#if remainingCount > 0}
55
- <div class={cn('avatar-group-counter', `is-${size}`)}>
61
+ <div
62
+ class={cn('avatar-group-counter', `is-${size}`, `is-${variant}`, `is-${color}`, classCounter)}
63
+ >
56
64
  +{remainingCount}
57
65
  </div>
58
66
  {/if}