sv5ui 0.0.1

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 (144) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +124 -0
  3. package/dist/Alert/Alert.svelte +120 -0
  4. package/dist/Alert/Alert.svelte.d.ts +5 -0
  5. package/dist/Alert/alert.types.d.ts +99 -0
  6. package/dist/Alert/alert.types.js +1 -0
  7. package/dist/Alert/alert.variants.d.ts +213 -0
  8. package/dist/Alert/alert.variants.js +293 -0
  9. package/dist/Alert/index.d.ts +2 -0
  10. package/dist/Alert/index.js +1 -0
  11. package/dist/Avatar/Avatar.svelte +70 -0
  12. package/dist/Avatar/Avatar.svelte.d.ts +6 -0
  13. package/dist/Avatar/avatar.types.d.ts +40 -0
  14. package/dist/Avatar/avatar.types.js +1 -0
  15. package/dist/Avatar/avatar.variants.d.ts +178 -0
  16. package/dist/Avatar/avatar.variants.js +28 -0
  17. package/dist/Avatar/index.d.ts +2 -0
  18. package/dist/Avatar/index.js +1 -0
  19. package/dist/AvatarGroup/AvatarGroup.svelte +66 -0
  20. package/dist/AvatarGroup/AvatarGroup.svelte.d.ts +5 -0
  21. package/dist/AvatarGroup/avatar-group.types.d.ts +34 -0
  22. package/dist/AvatarGroup/avatar-group.types.js +1 -0
  23. package/dist/AvatarGroup/avatar-group.variants.d.ts +173 -0
  24. package/dist/AvatarGroup/avatar-group.variants.js +45 -0
  25. package/dist/AvatarGroup/index.d.ts +2 -0
  26. package/dist/AvatarGroup/index.js +1 -0
  27. package/dist/Badge/Badge.svelte +74 -0
  28. package/dist/Badge/Badge.svelte.d.ts +5 -0
  29. package/dist/Badge/badge.types.d.ts +74 -0
  30. package/dist/Badge/badge.types.js +1 -0
  31. package/dist/Badge/badge.variants.d.ts +303 -0
  32. package/dist/Badge/badge.variants.js +245 -0
  33. package/dist/Badge/index.d.ts +2 -0
  34. package/dist/Badge/index.js +1 -0
  35. package/dist/Button/Button.svelte +103 -0
  36. package/dist/Button/Button.svelte.d.ts +6 -0
  37. package/dist/Button/button.types.d.ts +97 -0
  38. package/dist/Button/button.types.js +1 -0
  39. package/dist/Button/button.variants.d.ts +388 -0
  40. package/dist/Button/button.variants.js +461 -0
  41. package/dist/Button/index.d.ts +2 -0
  42. package/dist/Button/index.js +1 -0
  43. package/dist/Card/Card.svelte +53 -0
  44. package/dist/Card/Card.svelte.d.ts +5 -0
  45. package/dist/Card/card.types.d.ts +32 -0
  46. package/dist/Card/card.types.js +1 -0
  47. package/dist/Card/card.variants.d.ts +108 -0
  48. package/dist/Card/card.variants.js +32 -0
  49. package/dist/Card/index.d.ts +2 -0
  50. package/dist/Card/index.js +1 -0
  51. package/dist/Chip/Chip.svelte +50 -0
  52. package/dist/Chip/Chip.svelte.d.ts +5 -0
  53. package/dist/Chip/chip.types.d.ts +62 -0
  54. package/dist/Chip/chip.types.js +1 -0
  55. package/dist/Chip/chip.variants.d.ts +328 -0
  56. package/dist/Chip/chip.variants.js +58 -0
  57. package/dist/Chip/index.d.ts +2 -0
  58. package/dist/Chip/index.js +1 -0
  59. package/dist/Container/Container.svelte +27 -0
  60. package/dist/Container/Container.svelte.d.ts +5 -0
  61. package/dist/Container/container.types.d.ts +19 -0
  62. package/dist/Container/container.types.js +1 -0
  63. package/dist/Container/container.variants.d.ts +29 -0
  64. package/dist/Container/container.variants.js +9 -0
  65. package/dist/Container/index.d.ts +2 -0
  66. package/dist/Container/index.js +1 -0
  67. package/dist/Empty/Empty.svelte +83 -0
  68. package/dist/Empty/Empty.svelte.d.ts +5 -0
  69. package/dist/Empty/empty.types.d.ts +74 -0
  70. package/dist/Empty/empty.types.js +1 -0
  71. package/dist/Empty/empty.variants.d.ts +288 -0
  72. package/dist/Empty/empty.variants.js +364 -0
  73. package/dist/Empty/index.d.ts +2 -0
  74. package/dist/Empty/index.js +1 -0
  75. package/dist/Icon/Icon.svelte +40 -0
  76. package/dist/Icon/Icon.svelte.d.ts +6 -0
  77. package/dist/Icon/icon.types.d.ts +37 -0
  78. package/dist/Icon/icon.types.js +1 -0
  79. package/dist/Icon/index.d.ts +2 -0
  80. package/dist/Icon/index.js +1 -0
  81. package/dist/Kbd/Kbd.svelte +35 -0
  82. package/dist/Kbd/Kbd.svelte.d.ts +5 -0
  83. package/dist/Kbd/index.d.ts +3 -0
  84. package/dist/Kbd/index.js +2 -0
  85. package/dist/Kbd/kbd.types.d.ts +77 -0
  86. package/dist/Kbd/kbd.types.js +1 -0
  87. package/dist/Kbd/kbd.variants.d.ts +118 -0
  88. package/dist/Kbd/kbd.variants.js +96 -0
  89. package/dist/Kbd/useKbd.svelte.d.ts +29 -0
  90. package/dist/Kbd/useKbd.svelte.js +245 -0
  91. package/dist/Link/Link.svelte +117 -0
  92. package/dist/Link/Link.svelte.d.ts +5 -0
  93. package/dist/Link/index.d.ts +2 -0
  94. package/dist/Link/index.js +1 -0
  95. package/dist/Link/link.types.d.ts +68 -0
  96. package/dist/Link/link.types.js +1 -0
  97. package/dist/Link/link.variants.d.ts +138 -0
  98. package/dist/Link/link.variants.js +145 -0
  99. package/dist/Progress/Progress.svelte +89 -0
  100. package/dist/Progress/Progress.svelte.d.ts +6 -0
  101. package/dist/Progress/index.d.ts +2 -0
  102. package/dist/Progress/index.js +1 -0
  103. package/dist/Progress/progress.types.d.ts +63 -0
  104. package/dist/Progress/progress.types.js +1 -0
  105. package/dist/Progress/progress.variants.d.ts +483 -0
  106. package/dist/Progress/progress.variants.js +190 -0
  107. package/dist/Separator/Separator.svelte +67 -0
  108. package/dist/Separator/Separator.svelte.d.ts +6 -0
  109. package/dist/Separator/index.d.ts +2 -0
  110. package/dist/Separator/index.js +1 -0
  111. package/dist/Separator/separator.types.d.ts +48 -0
  112. package/dist/Separator/separator.types.js +1 -0
  113. package/dist/Separator/separator.variants.d.ts +488 -0
  114. package/dist/Separator/separator.variants.js +104 -0
  115. package/dist/Skeleton/Skeleton.svelte +31 -0
  116. package/dist/Skeleton/Skeleton.svelte.d.ts +5 -0
  117. package/dist/Skeleton/index.d.ts +2 -0
  118. package/dist/Skeleton/index.js +1 -0
  119. package/dist/Skeleton/skeleton.types.d.ts +18 -0
  120. package/dist/Skeleton/skeleton.types.js +1 -0
  121. package/dist/Skeleton/skeleton.variants.d.ts +18 -0
  122. package/dist/Skeleton/skeleton.variants.js +12 -0
  123. package/dist/Timeline/Timeline.svelte +106 -0
  124. package/dist/Timeline/Timeline.svelte.d.ts +5 -0
  125. package/dist/Timeline/index.d.ts +2 -0
  126. package/dist/Timeline/index.js +1 -0
  127. package/dist/Timeline/timeline.types.d.ts +130 -0
  128. package/dist/Timeline/timeline.types.js +1 -0
  129. package/dist/Timeline/timeline.variants.d.ts +413 -0
  130. package/dist/Timeline/timeline.variants.js +121 -0
  131. package/dist/User/User.svelte +94 -0
  132. package/dist/User/User.svelte.d.ts +5 -0
  133. package/dist/User/index.d.ts +2 -0
  134. package/dist/User/index.js +1 -0
  135. package/dist/User/user.types.d.ts +74 -0
  136. package/dist/User/user.types.js +1 -0
  137. package/dist/User/user.variants.d.ts +308 -0
  138. package/dist/User/user.variants.js +73 -0
  139. package/dist/config.d.ts +59 -0
  140. package/dist/config.js +94 -0
  141. package/dist/index.d.ts +19 -0
  142. package/dist/index.js +20 -0
  143. package/dist/theme.css +410 -0
  144. package/package.json +104 -0
@@ -0,0 +1,461 @@
1
+ import { tv } from 'tailwind-variants';
2
+ export const buttonVariants = tv({
3
+ slots: {
4
+ base: [
5
+ 'rounded-md font-medium inline-flex items-center justify-center',
6
+ 'disabled:cursor-not-allowed aria-disabled:cursor-not-allowed',
7
+ 'disabled:opacity-75 aria-disabled:opacity-75',
8
+ 'transition-colors'
9
+ ],
10
+ label: 'truncate',
11
+ leadingIcon: 'shrink-0',
12
+ leadingAvatar: 'shrink-0',
13
+ leadingAvatarSize: '',
14
+ trailingIcon: 'shrink-0'
15
+ },
16
+ variants: {
17
+ variant: {
18
+ solid: '',
19
+ outline: '',
20
+ soft: '',
21
+ subtle: '',
22
+ ghost: '',
23
+ link: ''
24
+ },
25
+ color: {
26
+ primary: '',
27
+ secondary: '',
28
+ tertiary: '',
29
+ success: '',
30
+ warning: '',
31
+ error: '',
32
+ info: '',
33
+ surface: ''
34
+ },
35
+ size: {
36
+ xs: {
37
+ base: 'px-2 py-1 text-xs gap-1 rounded',
38
+ leadingIcon: 'size-3.5',
39
+ leadingAvatarSize: '3xs',
40
+ trailingIcon: 'size-3.5'
41
+ },
42
+ sm: {
43
+ base: 'px-2.5 py-1.5 text-xs gap-1.5 rounded-md',
44
+ leadingIcon: 'size-4',
45
+ leadingAvatarSize: '3xs',
46
+ trailingIcon: 'size-4'
47
+ },
48
+ md: {
49
+ base: 'px-3 py-2 text-sm gap-1.5 rounded-md',
50
+ leadingIcon: 'size-5',
51
+ leadingAvatarSize: '2xs',
52
+ trailingIcon: 'size-5'
53
+ },
54
+ lg: {
55
+ base: 'px-4 py-2.5 text-sm gap-2 rounded-md',
56
+ leadingIcon: 'size-5',
57
+ leadingAvatarSize: '2xs',
58
+ trailingIcon: 'size-5'
59
+ },
60
+ xl: {
61
+ base: 'px-5 py-3 text-base gap-2.5 rounded-lg',
62
+ leadingIcon: 'size-6',
63
+ leadingAvatarSize: 'xs',
64
+ trailingIcon: 'size-6'
65
+ }
66
+ },
67
+ block: {
68
+ true: {
69
+ base: 'w-full',
70
+ trailingIcon: 'ms-auto'
71
+ }
72
+ },
73
+ square: {
74
+ true: ''
75
+ },
76
+ leading: {
77
+ true: ''
78
+ },
79
+ trailing: {
80
+ true: ''
81
+ },
82
+ loading: {
83
+ true: ''
84
+ }
85
+ },
86
+ compoundVariants: [
87
+ // ========== SOLID VARIANTS ==========
88
+ {
89
+ variant: 'solid',
90
+ color: 'primary',
91
+ class: {
92
+ base: 'bg-primary text-on-primary hover:bg-primary/90 active:bg-primary/80 disabled:bg-primary aria-disabled:bg-primary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary'
93
+ }
94
+ },
95
+ {
96
+ variant: 'solid',
97
+ color: 'secondary',
98
+ class: {
99
+ base: 'bg-secondary text-on-secondary hover:bg-secondary/90 active:bg-secondary/80 disabled:bg-secondary aria-disabled:bg-secondary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-secondary'
100
+ }
101
+ },
102
+ {
103
+ variant: 'solid',
104
+ color: 'tertiary',
105
+ class: {
106
+ base: 'bg-tertiary text-on-tertiary hover:bg-tertiary/90 active:bg-tertiary/80 disabled:bg-tertiary aria-disabled:bg-tertiary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-tertiary'
107
+ }
108
+ },
109
+ {
110
+ variant: 'solid',
111
+ color: 'success',
112
+ class: {
113
+ base: 'bg-success text-on-success hover:bg-success/90 active:bg-success/80 disabled:bg-success aria-disabled:bg-success focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-success'
114
+ }
115
+ },
116
+ {
117
+ variant: 'solid',
118
+ color: 'warning',
119
+ class: {
120
+ base: 'bg-warning text-on-warning hover:bg-warning/90 active:bg-warning/80 disabled:bg-warning aria-disabled:bg-warning focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-warning'
121
+ }
122
+ },
123
+ {
124
+ variant: 'solid',
125
+ color: 'error',
126
+ class: {
127
+ base: 'bg-error text-on-error hover:bg-error/90 active:bg-error/80 disabled:bg-error aria-disabled:bg-error focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-error'
128
+ }
129
+ },
130
+ {
131
+ variant: 'solid',
132
+ color: 'info',
133
+ class: {
134
+ base: 'bg-info text-on-info hover:bg-info/90 active:bg-info/80 disabled:bg-info aria-disabled:bg-info focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-info'
135
+ }
136
+ },
137
+ {
138
+ variant: 'solid',
139
+ color: 'surface',
140
+ class: {
141
+ base: 'bg-inverse-surface text-inverse-on-surface hover:bg-inverse-surface/90 active:bg-inverse-surface/80 disabled:bg-inverse-surface aria-disabled:bg-inverse-surface focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-inverse-surface'
142
+ }
143
+ },
144
+ // ========== OUTLINE VARIANTS ==========
145
+ {
146
+ variant: 'outline',
147
+ color: 'primary',
148
+ class: {
149
+ base: 'ring ring-inset ring-primary text-primary hover:bg-primary-container active:bg-primary-container disabled:bg-transparent aria-disabled:bg-transparent focus-visible:ring-2 focus-visible:ring-primary'
150
+ }
151
+ },
152
+ {
153
+ variant: 'outline',
154
+ color: 'secondary',
155
+ class: {
156
+ base: 'ring ring-inset ring-secondary text-secondary hover:bg-secondary-container active:bg-secondary-container disabled:bg-transparent aria-disabled:bg-transparent focus-visible:ring-2 focus-visible:ring-secondary'
157
+ }
158
+ },
159
+ {
160
+ variant: 'outline',
161
+ color: 'tertiary',
162
+ class: {
163
+ base: 'ring ring-inset ring-tertiary text-tertiary hover:bg-tertiary-container active:bg-tertiary-container disabled:bg-transparent aria-disabled:bg-transparent focus-visible:ring-2 focus-visible:ring-tertiary'
164
+ }
165
+ },
166
+ {
167
+ variant: 'outline',
168
+ color: 'success',
169
+ class: {
170
+ base: 'ring ring-inset ring-success text-success hover:bg-success-container active:bg-success-container disabled:bg-transparent aria-disabled:bg-transparent focus-visible:ring-2 focus-visible:ring-success'
171
+ }
172
+ },
173
+ {
174
+ variant: 'outline',
175
+ color: 'warning',
176
+ class: {
177
+ base: 'ring ring-inset ring-warning text-warning hover:bg-warning-container active:bg-warning-container disabled:bg-transparent aria-disabled:bg-transparent focus-visible:ring-2 focus-visible:ring-warning'
178
+ }
179
+ },
180
+ {
181
+ variant: 'outline',
182
+ color: 'error',
183
+ class: {
184
+ base: 'ring ring-inset ring-error text-error hover:bg-error-container active:bg-error-container disabled:bg-transparent aria-disabled:bg-transparent focus-visible:ring-2 focus-visible:ring-error'
185
+ }
186
+ },
187
+ {
188
+ variant: 'outline',
189
+ color: 'info',
190
+ class: {
191
+ base: 'ring ring-inset ring-info text-info hover:bg-info-container active:bg-info-container disabled:bg-transparent aria-disabled:bg-transparent focus-visible:ring-2 focus-visible:ring-info'
192
+ }
193
+ },
194
+ {
195
+ variant: 'outline',
196
+ color: 'surface',
197
+ class: {
198
+ base: 'ring ring-inset ring-outline-variant text-on-surface-variant hover:bg-surface-container-highest active:bg-surface-container-highest disabled:bg-transparent aria-disabled:bg-transparent focus-visible:ring-2 focus-visible:ring-outline'
199
+ }
200
+ },
201
+ // ========== SOFT VARIANTS ==========
202
+ {
203
+ variant: 'soft',
204
+ color: 'primary',
205
+ class: {
206
+ base: 'text-on-primary-container bg-primary-container hover:bg-primary-container/80 active:bg-primary-container/70 focus-visible:bg-primary-container/80 disabled:bg-primary-container aria-disabled:bg-primary-container'
207
+ }
208
+ },
209
+ {
210
+ variant: 'soft',
211
+ color: 'secondary',
212
+ class: {
213
+ base: 'text-on-secondary-container bg-secondary-container hover:bg-secondary-container/80 active:bg-secondary-container/70 focus-visible:bg-secondary-container/80 disabled:bg-secondary-container aria-disabled:bg-secondary-container'
214
+ }
215
+ },
216
+ {
217
+ variant: 'soft',
218
+ color: 'tertiary',
219
+ class: {
220
+ base: 'text-on-tertiary-container bg-tertiary-container hover:bg-tertiary-container/80 active:bg-tertiary-container/70 focus-visible:bg-tertiary-container/80 disabled:bg-tertiary-container aria-disabled:bg-tertiary-container'
221
+ }
222
+ },
223
+ {
224
+ variant: 'soft',
225
+ color: 'success',
226
+ class: {
227
+ base: 'text-on-success-container bg-success-container hover:bg-success-container/80 active:bg-success-container/70 focus-visible:bg-success-container/80 disabled:bg-success-container aria-disabled:bg-success-container'
228
+ }
229
+ },
230
+ {
231
+ variant: 'soft',
232
+ color: 'warning',
233
+ class: {
234
+ base: 'text-on-warning-container bg-warning-container hover:bg-warning-container/80 active:bg-warning-container/70 focus-visible:bg-warning-container/80 disabled:bg-warning-container aria-disabled:bg-warning-container'
235
+ }
236
+ },
237
+ {
238
+ variant: 'soft',
239
+ color: 'error',
240
+ class: {
241
+ base: 'text-on-error-container bg-error-container hover:bg-error-container/80 active:bg-error-container/70 focus-visible:bg-error-container/80 disabled:bg-error-container aria-disabled:bg-error-container'
242
+ }
243
+ },
244
+ {
245
+ variant: 'soft',
246
+ color: 'info',
247
+ class: {
248
+ base: 'text-on-info-container bg-info-container hover:bg-info-container/80 active:bg-info-container/70 focus-visible:bg-info-container/80 disabled:bg-info-container aria-disabled:bg-info-container'
249
+ }
250
+ },
251
+ {
252
+ variant: 'soft',
253
+ color: 'surface',
254
+ class: {
255
+ base: 'text-on-surface bg-surface-container-highest hover:bg-surface-container-highest/80 active:bg-surface-container-highest/70 focus-visible:bg-surface-container-highest/80 disabled:bg-surface-container-highest aria-disabled:bg-surface-container-highest'
256
+ }
257
+ },
258
+ // ========== SUBTLE VARIANTS ==========
259
+ {
260
+ variant: 'subtle',
261
+ color: 'primary',
262
+ class: {
263
+ base: 'text-on-primary-container ring ring-inset ring-primary/25 bg-primary-container hover:bg-primary-container/80 active:bg-primary-container/70 disabled:bg-primary-container aria-disabled:bg-primary-container focus-visible:ring-2 focus-visible:ring-primary'
264
+ }
265
+ },
266
+ {
267
+ variant: 'subtle',
268
+ color: 'secondary',
269
+ class: {
270
+ base: 'text-on-secondary-container ring ring-inset ring-secondary/25 bg-secondary-container hover:bg-secondary-container/80 active:bg-secondary-container/70 disabled:bg-secondary-container aria-disabled:bg-secondary-container focus-visible:ring-2 focus-visible:ring-secondary'
271
+ }
272
+ },
273
+ {
274
+ variant: 'subtle',
275
+ color: 'tertiary',
276
+ class: {
277
+ base: 'text-on-tertiary-container ring ring-inset ring-tertiary/25 bg-tertiary-container hover:bg-tertiary-container/80 active:bg-tertiary-container/70 disabled:bg-tertiary-container aria-disabled:bg-tertiary-container focus-visible:ring-2 focus-visible:ring-tertiary'
278
+ }
279
+ },
280
+ {
281
+ variant: 'subtle',
282
+ color: 'success',
283
+ class: {
284
+ base: 'text-on-success-container ring ring-inset ring-success/25 bg-success-container hover:bg-success-container/80 active:bg-success-container/70 disabled:bg-success-container aria-disabled:bg-success-container focus-visible:ring-2 focus-visible:ring-success'
285
+ }
286
+ },
287
+ {
288
+ variant: 'subtle',
289
+ color: 'warning',
290
+ class: {
291
+ base: 'text-on-warning-container ring ring-inset ring-warning/25 bg-warning-container hover:bg-warning-container/80 active:bg-warning-container/70 disabled:bg-warning-container aria-disabled:bg-warning-container focus-visible:ring-2 focus-visible:ring-warning'
292
+ }
293
+ },
294
+ {
295
+ variant: 'subtle',
296
+ color: 'error',
297
+ class: {
298
+ base: 'text-on-error-container ring ring-inset ring-error/25 bg-error-container hover:bg-error-container/80 active:bg-error-container/70 disabled:bg-error-container aria-disabled:bg-error-container focus-visible:ring-2 focus-visible:ring-error'
299
+ }
300
+ },
301
+ {
302
+ variant: 'subtle',
303
+ color: 'info',
304
+ class: {
305
+ base: 'text-on-info-container ring ring-inset ring-info/25 bg-info-container hover:bg-info-container/80 active:bg-info-container/70 disabled:bg-info-container aria-disabled:bg-info-container focus-visible:ring-2 focus-visible:ring-info'
306
+ }
307
+ },
308
+ {
309
+ variant: 'subtle',
310
+ color: 'surface',
311
+ class: {
312
+ base: 'text-on-surface ring ring-inset ring-outline-variant bg-surface-container-highest hover:bg-surface-container-highest/80 active:bg-surface-container-highest/70 disabled:bg-surface-container-highest aria-disabled:bg-surface-container-highest focus-visible:ring-2 focus-visible:ring-outline'
313
+ }
314
+ },
315
+ // ========== GHOST VARIANTS ==========
316
+ {
317
+ variant: 'ghost',
318
+ color: 'primary',
319
+ class: {
320
+ base: 'text-primary hover:bg-primary-container active:bg-primary-container focus-visible:bg-primary-container disabled:bg-transparent aria-disabled:bg-transparent'
321
+ }
322
+ },
323
+ {
324
+ variant: 'ghost',
325
+ color: 'secondary',
326
+ class: {
327
+ base: 'text-secondary hover:bg-secondary-container active:bg-secondary-container focus-visible:bg-secondary-container disabled:bg-transparent aria-disabled:bg-transparent'
328
+ }
329
+ },
330
+ {
331
+ variant: 'ghost',
332
+ color: 'tertiary',
333
+ class: {
334
+ base: 'text-tertiary hover:bg-tertiary-container active:bg-tertiary-container focus-visible:bg-tertiary-container disabled:bg-transparent aria-disabled:bg-transparent'
335
+ }
336
+ },
337
+ {
338
+ variant: 'ghost',
339
+ color: 'success',
340
+ class: {
341
+ base: 'text-success hover:bg-success-container active:bg-success-container focus-visible:bg-success-container disabled:bg-transparent aria-disabled:bg-transparent'
342
+ }
343
+ },
344
+ {
345
+ variant: 'ghost',
346
+ color: 'warning',
347
+ class: {
348
+ base: 'text-warning hover:bg-warning-container active:bg-warning-container focus-visible:bg-warning-container disabled:bg-transparent aria-disabled:bg-transparent'
349
+ }
350
+ },
351
+ {
352
+ variant: 'ghost',
353
+ color: 'error',
354
+ class: {
355
+ base: 'text-error hover:bg-error-container active:bg-error-container focus-visible:bg-error-container disabled:bg-transparent aria-disabled:bg-transparent'
356
+ }
357
+ },
358
+ {
359
+ variant: 'ghost',
360
+ color: 'info',
361
+ class: {
362
+ base: 'text-info hover:bg-info-container active:bg-info-container focus-visible:bg-info-container disabled:bg-transparent aria-disabled:bg-transparent'
363
+ }
364
+ },
365
+ {
366
+ variant: 'ghost',
367
+ color: 'surface',
368
+ class: {
369
+ base: 'text-on-surface-variant hover:bg-surface-container-highest active:bg-surface-container-highest focus-visible:bg-surface-container-highest disabled:bg-transparent aria-disabled:bg-transparent'
370
+ }
371
+ },
372
+ // ========== LINK VARIANTS ==========
373
+ {
374
+ variant: 'link',
375
+ color: 'primary',
376
+ class: {
377
+ base: 'text-primary hover:text-primary/75 active:text-primary/75 underline-offset-4 hover:underline disabled:text-primary aria-disabled:text-primary focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary'
378
+ }
379
+ },
380
+ {
381
+ variant: 'link',
382
+ color: 'secondary',
383
+ class: {
384
+ base: 'text-secondary hover:text-secondary/75 active:text-secondary/75 underline-offset-4 hover:underline disabled:text-secondary aria-disabled:text-secondary focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-secondary'
385
+ }
386
+ },
387
+ {
388
+ variant: 'link',
389
+ color: 'tertiary',
390
+ class: {
391
+ base: 'text-tertiary hover:text-tertiary/75 active:text-tertiary/75 underline-offset-4 hover:underline disabled:text-tertiary aria-disabled:text-tertiary focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-tertiary'
392
+ }
393
+ },
394
+ {
395
+ variant: 'link',
396
+ color: 'success',
397
+ class: {
398
+ base: 'text-success hover:text-success/75 active:text-success/75 underline-offset-4 hover:underline disabled:text-success aria-disabled:text-success focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-success'
399
+ }
400
+ },
401
+ {
402
+ variant: 'link',
403
+ color: 'warning',
404
+ class: {
405
+ base: 'text-warning hover:text-warning/75 active:text-warning/75 underline-offset-4 hover:underline disabled:text-warning aria-disabled:text-warning focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-warning'
406
+ }
407
+ },
408
+ {
409
+ variant: 'link',
410
+ color: 'error',
411
+ class: {
412
+ base: 'text-error hover:text-error/75 active:text-error/75 underline-offset-4 hover:underline disabled:text-error aria-disabled:text-error focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-error'
413
+ }
414
+ },
415
+ {
416
+ variant: 'link',
417
+ color: 'info',
418
+ class: {
419
+ base: 'text-info hover:text-info/75 active:text-info/75 underline-offset-4 hover:underline disabled:text-info aria-disabled:text-info focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-info'
420
+ }
421
+ },
422
+ {
423
+ variant: 'link',
424
+ color: 'surface',
425
+ class: {
426
+ base: 'text-on-surface-variant hover:text-on-surface-variant/75 active:text-on-surface-variant/75 underline-offset-4 hover:underline disabled:text-on-surface-variant aria-disabled:text-on-surface-variant focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-outline'
427
+ }
428
+ },
429
+ // ========== SQUARE SIZE ADJUSTMENTS ==========
430
+ { square: true, size: 'xs', class: { base: 'p-1' } },
431
+ { square: true, size: 'sm', class: { base: 'p-1.5' } },
432
+ { square: true, size: 'md', class: { base: 'p-1.5' } },
433
+ { square: true, size: 'lg', class: { base: 'p-2' } },
434
+ { square: true, size: 'xl', class: { base: 'p-2.5' } },
435
+ // ========== LOADING ICON ANIMATION ==========
436
+ {
437
+ loading: true,
438
+ leading: true,
439
+ class: {
440
+ leadingIcon: 'animate-spin'
441
+ }
442
+ },
443
+ {
444
+ loading: true,
445
+ leading: false,
446
+ trailing: true,
447
+ class: {
448
+ trailingIcon: 'animate-spin'
449
+ }
450
+ }
451
+ ],
452
+ defaultVariants: {
453
+ variant: 'solid',
454
+ color: 'primary',
455
+ size: 'md'
456
+ }
457
+ });
458
+ export const buttonDefaults = {
459
+ defaultVariants: buttonVariants.defaultVariants,
460
+ slots: {}
461
+ };
@@ -0,0 +1,2 @@
1
+ export { default as Button } from './Button.svelte';
2
+ export type { ButtonProps } from './button.types.js';
@@ -0,0 +1 @@
1
+ export { default as Button } from './Button.svelte';
@@ -0,0 +1,53 @@
1
+ <script lang="ts" module>
2
+ import type { CardProps } from './card.types.js'
3
+
4
+ export type Props = CardProps
5
+ </script>
6
+
7
+ <script lang="ts">
8
+ import { cardVariants, cardDefaults } from './card.variants.js'
9
+ import { getComponentConfig } from '../config.js'
10
+
11
+ const config = getComponentConfig('card', cardDefaults)
12
+
13
+ let {
14
+ as = 'div',
15
+ ui,
16
+ variant = config.defaultVariants.variant,
17
+ class: className,
18
+ header,
19
+ children,
20
+ footer,
21
+ ...restProps
22
+ }: Props = $props()
23
+
24
+ const classes = $derived.by(() => {
25
+ const slots = cardVariants({ variant })
26
+ return {
27
+ root: slots.root({ class: [config.slots.root, className, ui?.root] }),
28
+ header: header ? slots.header({ class: [config.slots.header, ui?.header] }) : '',
29
+ body: children ? slots.body({ class: [config.slots.body, ui?.body] }) : '',
30
+ footer: footer ? slots.footer({ class: [config.slots.footer, ui?.footer] }) : ''
31
+ }
32
+ })
33
+ </script>
34
+
35
+ <svelte:element this={as} class={classes.root} {...restProps}>
36
+ {#if header}
37
+ <div class={classes.header}>
38
+ {@render header()}
39
+ </div>
40
+ {/if}
41
+
42
+ {#if children}
43
+ <div class={classes.body}>
44
+ {@render children()}
45
+ </div>
46
+ {/if}
47
+
48
+ {#if footer}
49
+ <div class={classes.footer}>
50
+ {@render footer()}
51
+ </div>
52
+ {/if}
53
+ </svelte:element>
@@ -0,0 +1,5 @@
1
+ import type { CardProps } from './card.types.js';
2
+ export type Props = CardProps;
3
+ declare const Card: import("svelte").Component<CardProps, {}, "">;
4
+ type Card = ReturnType<typeof Card>;
5
+ export default Card;
@@ -0,0 +1,32 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import type { ClassNameValue } from 'tailwind-merge';
4
+ import type { CardVariantProps, CardSlots } from './card.variants.js';
5
+ export type CardProps = HTMLAttributes<HTMLDivElement> & {
6
+ /**
7
+ * Renders the card as a different HTML element.
8
+ * @default 'div'
9
+ */
10
+ as?: keyof HTMLElementTagNameMap;
11
+ /**
12
+ * Controls the visual style of the card.
13
+ * @default 'outline'
14
+ */
15
+ variant?: NonNullable<CardVariantProps['variant']>;
16
+ /**
17
+ * Additional CSS classes for the root element.
18
+ */
19
+ class?: ClassNameValue;
20
+ /**
21
+ * Override styles for specific card slots.
22
+ */
23
+ ui?: Partial<Record<CardSlots, ClassNameValue>>;
24
+ /**
25
+ * Content rendered in the card header section.
26
+ */
27
+ header?: Snippet;
28
+ /**
29
+ * Content rendered in the card footer section.
30
+ */
31
+ footer?: Snippet;
32
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,108 @@
1
+ import { type VariantProps } from 'tailwind-variants';
2
+ export declare const cardVariants: import("tailwind-variants").TVReturnType<{
3
+ variant: {
4
+ solid: {
5
+ root: string;
6
+ };
7
+ outline: {
8
+ root: string;
9
+ };
10
+ soft: {
11
+ root: string;
12
+ };
13
+ subtle: {
14
+ root: string;
15
+ };
16
+ };
17
+ }, {
18
+ root: string;
19
+ header: string;
20
+ body: string;
21
+ footer: string;
22
+ }, undefined, {
23
+ variant: {
24
+ solid: {
25
+ root: string;
26
+ };
27
+ outline: {
28
+ root: string;
29
+ };
30
+ soft: {
31
+ root: string;
32
+ };
33
+ subtle: {
34
+ root: string;
35
+ };
36
+ };
37
+ }, {
38
+ root: string;
39
+ header: string;
40
+ body: string;
41
+ footer: string;
42
+ }, import("tailwind-variants").TVReturnType<{
43
+ variant: {
44
+ solid: {
45
+ root: string;
46
+ };
47
+ outline: {
48
+ root: string;
49
+ };
50
+ soft: {
51
+ root: string;
52
+ };
53
+ subtle: {
54
+ root: string;
55
+ };
56
+ };
57
+ }, {
58
+ root: string;
59
+ header: string;
60
+ body: string;
61
+ footer: string;
62
+ }, undefined, unknown, unknown, undefined>>;
63
+ export type CardVariantProps = VariantProps<typeof cardVariants>;
64
+ export type CardSlots = keyof ReturnType<typeof cardVariants>;
65
+ export declare const cardDefaults: {
66
+ defaultVariants: import("tailwind-variants").TVDefaultVariants<{
67
+ variant: {
68
+ solid: {
69
+ root: string;
70
+ };
71
+ outline: {
72
+ root: string;
73
+ };
74
+ soft: {
75
+ root: string;
76
+ };
77
+ subtle: {
78
+ root: string;
79
+ };
80
+ };
81
+ }, {
82
+ root: string;
83
+ header: string;
84
+ body: string;
85
+ footer: string;
86
+ }, {
87
+ variant: {
88
+ solid: {
89
+ root: string;
90
+ };
91
+ outline: {
92
+ root: string;
93
+ };
94
+ soft: {
95
+ root: string;
96
+ };
97
+ subtle: {
98
+ root: string;
99
+ };
100
+ };
101
+ }, {
102
+ root: string;
103
+ header: string;
104
+ body: string;
105
+ footer: string;
106
+ }>;
107
+ slots: Partial<Record<CardSlots, string>>;
108
+ };