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
@@ -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';
19
19
  size?: 'sm' | 'md' | 'lg';
20
20
  };
21
21
  let {
@@ -26,12 +26,12 @@
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
37
  muted: 'is-muted'
@@ -57,7 +57,7 @@
57
57
  type="radio"
58
58
  value={item.id}
59
59
  bind:group={value}
60
- class={cn('radio', variantClases[variant], sizes[size])}
60
+ class={cn('radio', colors[color], sizes[size])}
61
61
  />
62
62
  <span class="label">{item.label}</span>
63
63
  </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';
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>;
@@ -12,6 +12,7 @@
12
12
  color?: 'primary' | 'secondary' | 'muted';
13
13
  name?: string;
14
14
  hideLabel?: boolean;
15
+ class?: string;
15
16
  };
16
17
  let {
17
18
  value = $bindable(),
@@ -23,7 +24,8 @@
23
24
  size = 'md',
24
25
  color = 'primary',
25
26
  name,
26
- hideLabel
27
+ hideLabel,
28
+ class: className
27
29
  }: Props = $props();
28
30
 
29
31
  let progressPercentage = $derived(((value! - min) / (max - min)) * 100);
@@ -41,7 +43,7 @@
41
43
  };
42
44
  </script>
43
45
 
44
- <div class="slider-wrapper">
46
+ <div class={cn('slider-wrapper', className)}>
45
47
  <div class="slider-info" hidden={hideLabel}>
46
48
  <span>{label}</span>
47
49
  <span>{value}</span>
@@ -9,6 +9,7 @@ type Props = {
9
9
  color?: 'primary' | 'secondary' | 'muted';
10
10
  name?: string;
11
11
  hideLabel?: boolean;
12
+ class?: string;
12
13
  };
13
14
  declare const Slider: import("svelte").Component<Props, {}, "value">;
14
15
  type Slider = ReturnType<typeof Slider>;
@@ -17,7 +17,8 @@
17
17
  endText?: string;
18
18
  onchange?: (value: unknown) => void;
19
19
  oninput?: (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
  label?: string;
@@ -29,7 +30,6 @@
29
30
  max?: HTMLInputAttributes['max'];
30
31
  maxlength?: HTMLInputAttributes['maxlength'];
31
32
  isFloatLabel?: boolean;
32
- isSolid?: boolean;
33
33
  };
34
34
 
35
35
  let {
@@ -48,6 +48,7 @@
48
48
  onchange,
49
49
  oninput,
50
50
  variant = 'outlined',
51
+ color = 'muted',
51
52
  size = 'md',
52
53
  name,
53
54
  label,
@@ -56,8 +57,7 @@
56
57
  helpText,
57
58
  errorText,
58
59
  min,
59
- max,
60
- isSolid
60
+ max
61
61
  }: Props = $props();
62
62
 
63
63
  const uid = $props.id();
@@ -65,10 +65,19 @@
65
65
  let isActive = $state(false);
66
66
  let isFocused = $state(false);
67
67
 
68
- const variantClasses = {
68
+ const colors = {
69
69
  primary: 'is-primary',
70
70
  secondary: 'is-secondary',
71
71
  muted: 'is-muted',
72
+ success: 'is-success',
73
+ info: 'is-info',
74
+ danger: 'is-danger',
75
+ warning: 'is-warning'
76
+ };
77
+
78
+ const variants = {
79
+ solid: 'is-solid',
80
+ soft: 'is-soft',
72
81
  outlined: 'is-outlined',
73
82
  line: 'is-line'
74
83
  };
@@ -100,9 +109,9 @@
100
109
  <label
101
110
  class={cn(
102
111
  'control',
103
- variantClasses[variant],
112
+ colors[color],
113
+ variants[variant],
104
114
  sizeClasses[size],
105
- isSolid && 'is-solid',
106
115
  isFloatLabel && 'is-float',
107
116
  (isActive || isFocused) && 'is-active',
108
117
  controlClass
@@ -14,7 +14,8 @@ type Props = {
14
14
  endText?: string;
15
15
  onchange?: (value: unknown) => void;
16
16
  oninput?: (value: unknown) => void;
17
- variant?: 'primary' | 'secondary' | 'muted' | 'outlined' | 'line';
17
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
18
+ variant?: 'solid' | 'soft' | 'outlined' | 'line';
18
19
  size?: 'sm' | 'md' | 'lg';
19
20
  name?: string;
20
21
  label?: string;
@@ -26,7 +27,6 @@ type Props = {
26
27
  max?: HTMLInputAttributes['max'];
27
28
  maxlength?: HTMLInputAttributes['maxlength'];
28
29
  isFloatLabel?: boolean;
29
- isSolid?: boolean;
30
30
  };
31
31
  declare const TextField: import("svelte").Component<Props, {}, "value" | "el">;
32
32
  type TextField = ReturnType<typeof TextField>;
@@ -11,7 +11,8 @@
11
11
  controlClass?: string;
12
12
  onchange?: (value: string) => void;
13
13
  oninput?: (value: string) => 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;
@@ -22,7 +23,6 @@
22
23
  rows?: number;
23
24
  cols?: number;
24
25
  isFloatLabel?: boolean;
25
- isSolid?: boolean;
26
26
  isResize?: boolean;
27
27
  };
28
28
 
@@ -36,6 +36,7 @@
36
36
  onchange,
37
37
  oninput,
38
38
  variant = 'outlined',
39
+ color = 'muted',
39
40
  size = 'md',
40
41
  name,
41
42
  label,
@@ -46,7 +47,6 @@
46
47
  maxlength,
47
48
  rows = 4,
48
49
  cols,
49
- isSolid,
50
50
  isResize = false
51
51
  }: Props = $props();
52
52
 
@@ -55,10 +55,19 @@
55
55
  let isActive = $state(false);
56
56
  let isFocused = $state(false);
57
57
 
58
- const variantClasses = {
58
+ const colors = {
59
59
  primary: 'is-primary',
60
60
  secondary: 'is-secondary',
61
61
  muted: 'is-muted',
62
+ success: 'is-success',
63
+ info: 'is-info',
64
+ danger: 'is-danger',
65
+ warning: 'is-warning'
66
+ };
67
+
68
+ const variants = {
69
+ solid: 'is-solid',
70
+ soft: 'is-soft',
62
71
  outlined: 'is-outlined',
63
72
  line: 'is-line'
64
73
  };
@@ -83,9 +92,9 @@
83
92
  <label
84
93
  class={cn(
85
94
  'textarea-control',
86
- variantClasses[variant],
95
+ colors[color],
96
+ variants[variant],
87
97
  sizeClasses[size],
88
- isSolid && 'is-solid',
89
98
  isFloatLabel && 'is-float',
90
99
  (isActive || isFocused) && 'is-active',
91
100
  controlClass
@@ -8,7 +8,8 @@ type Props = {
8
8
  controlClass?: string;
9
9
  onchange?: (value: string) => void;
10
10
  oninput?: (value: string) => void;
11
- variant?: 'primary' | 'secondary' | 'muted' | 'outlined' | 'line';
11
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
12
+ variant?: 'solid' | 'soft' | 'outlined' | 'line';
12
13
  size?: 'sm' | 'md' | 'lg';
13
14
  name?: string;
14
15
  label?: string;
@@ -19,7 +20,6 @@ type Props = {
19
20
  rows?: number;
20
21
  cols?: number;
21
22
  isFloatLabel?: boolean;
22
- isSolid?: boolean;
23
23
  isResize?: boolean;
24
24
  };
25
25
  declare const Textarea: import("svelte").Component<Props, {}, "value" | "el">;
@@ -8,6 +8,8 @@
8
8
  disabled?: boolean;
9
9
  class?: string;
10
10
  label?: string;
11
+ labelLeft?: string;
12
+ labelRight?: string;
11
13
  name?: string;
12
14
  color?: 'primary' | 'secondary' | 'muted';
13
15
  };
@@ -18,6 +20,8 @@
18
20
  disabled = false,
19
21
  class: className,
20
22
  label,
23
+ labelLeft,
24
+ labelRight,
21
25
  name,
22
26
  color = 'primary'
23
27
  }: Props = $props();
@@ -30,6 +34,9 @@
30
34
  </script>
31
35
 
32
36
  <label class={cn('toggle', className)}>
37
+ {#if labelLeft}
38
+ <span class={cn('toggle-label-left', !checked && 'is-active')}>{labelLeft}</span>
39
+ {/if}
33
40
  <input
34
41
  type="checkbox"
35
42
  class={cn('toggle-input', colors[color])}
@@ -39,7 +46,10 @@
39
46
  {disabled}
40
47
  onchange={() => onchange && onchange(checked!)}
41
48
  />
49
+ {#if labelRight}
50
+ <span class={cn('toggle-label-right', checked && 'is-active')}>{labelRight}</span>
51
+ {/if}
42
52
  {#if label}
43
- <span class="label">{label}</span>
53
+ <span class="label-md">{label}</span>
44
54
  {/if}
45
55
  </label>
@@ -5,6 +5,8 @@ type Props = {
5
5
  disabled?: boolean;
6
6
  class?: string;
7
7
  label?: string;
8
+ labelLeft?: string;
9
+ labelRight?: string;
8
10
  name?: string;
9
11
  color?: 'primary' | 'secondary' | 'muted';
10
12
  };
@@ -1,11 +1,15 @@
1
1
  @layer components {
2
2
  .checkbox {
3
- @apply flex justify-start items-center w-fit gap-2 cursor-pointer;
3
+ @apply relative flex justify-start items-center w-fit gap-2 cursor-pointer flex-nowrap;
4
4
 
5
5
  .checkbox-input {
6
6
  @apply relative appearance-none min-w-5 w-5 h-5 border-2 border-muted rounded-lg;
7
7
  @apply focus:outline-none;
8
- @apply transition-all duration-200 ease-in-out;
8
+ @apply transition-all duration-300 ease-in-out;
9
+
10
+ &.is-muted {
11
+ @apply border-on-muted;
12
+ }
9
13
 
10
14
  &::after {
11
15
  content: '';
@@ -36,6 +40,18 @@
36
40
  &.is-muted {
37
41
  @apply bg-on-muted border-on-muted;
38
42
  }
43
+ &.is-success {
44
+ @apply bg-success border-success;
45
+ }
46
+ &.is-info {
47
+ @apply bg-info border-info;
48
+ }
49
+ &.is-warning {
50
+ @apply bg-warning border-warning;
51
+ }
52
+ &.is-danger {
53
+ @apply bg-danger border-danger;
54
+ }
39
55
 
40
56
  &::after {
41
57
  transform: translate(-50%, -50%) scale(1);
@@ -0,0 +1,141 @@
1
+ @layer components {
2
+ .color-field-swatch {
3
+ @apply size-6 rounded shrink-0;
4
+ @apply inset-ring inset-ring-muted/30;
5
+ }
6
+
7
+ .color-field-swatch.is-sm {
8
+ @apply size-5;
9
+ }
10
+
11
+ .color-field-swatch.is-lg {
12
+ @apply size-8;
13
+ }
14
+
15
+ .color-field-value {
16
+ @apply flex-1 text-left font-mono text-sm uppercase truncate;
17
+ }
18
+
19
+ .color-picker-popover {
20
+ @apply flex flex-col gap-4 p-4 w-80 my-1;
21
+ @apply bg-background text-on-background rounded-box;
22
+ @apply invisible opacity-0 transition-opacity duration-300 ease-in-out;
23
+ @apply shadow shadow-muted;
24
+ position: fixed;
25
+ z-index: 9999;
26
+
27
+ &.is-active {
28
+ @apply visible opacity-100;
29
+ }
30
+ }
31
+
32
+ .color-picker-canvas-wrapper {
33
+ @apply relative w-full h-36 rounded-ui overflow-hidden cursor-crosshair;
34
+ }
35
+
36
+ .color-picker-canvas {
37
+ @apply absolute inset-0 w-full h-full;
38
+ }
39
+
40
+ .color-picker-cursor {
41
+ @apply absolute size-4 -translate-x-1/2 -translate-y-1/2 rounded-full;
42
+ @apply border-2 border-white shadow-md pointer-events-none;
43
+ }
44
+
45
+ .color-picker-slider-wrapper {
46
+ @apply flex flex-col gap-3;
47
+ }
48
+
49
+ .color-picker-slider {
50
+ @apply relative w-full h-4 rounded-full cursor-pointer;
51
+ }
52
+
53
+ .color-picker-hue {
54
+ background: linear-gradient(
55
+ to right,
56
+ hsl(0, 100%, 50%),
57
+ hsl(60, 100%, 50%),
58
+ hsl(120, 100%, 50%),
59
+ hsl(180, 100%, 50%),
60
+ hsl(240, 100%, 50%),
61
+ hsl(300, 100%, 50%),
62
+ hsl(360, 100%, 50%)
63
+ );
64
+ }
65
+
66
+ .color-picker-alpha {
67
+ background-image:
68
+ linear-gradient(45deg, #ccc 25%, transparent 25%),
69
+ linear-gradient(-45deg, #ccc 25%, transparent 25%),
70
+ linear-gradient(45deg, transparent 75%, #ccc 75%),
71
+ linear-gradient(-45deg, transparent 75%, #ccc 75%);
72
+ background-size: 8px 8px;
73
+ background-position:
74
+ 0 0,
75
+ 0 4px,
76
+ 4px -4px,
77
+ -4px 0px;
78
+ }
79
+
80
+ .color-picker-alpha-overlay {
81
+ @apply absolute inset-0 rounded-full;
82
+ }
83
+
84
+ .color-picker-slider-thumb {
85
+ @apply absolute top-1/2 -translate-y-1/2 -translate-x-1/2 size-5;
86
+ @apply bg-white rounded-full shadow-md border border-muted/30;
87
+ @apply pointer-events-none;
88
+ }
89
+
90
+ .color-picker-values {
91
+ @apply flex flex-col gap-2;
92
+ }
93
+
94
+ .color-picker-value-row {
95
+ @apply flex items-center gap-2;
96
+ }
97
+
98
+ .color-picker-value-label {
99
+ @apply text-xs font-semibold uppercase w-12 text-on-muted;
100
+ }
101
+
102
+ .color-picker-value-code {
103
+ @apply flex-1 font-mono text-xs px-2 py-1 rounded-ui bg-muted truncate;
104
+ }
105
+
106
+ .color-picker-preview {
107
+ @apply flex items-center gap-3;
108
+ }
109
+
110
+ .color-picker-preview-swatch {
111
+ @apply size-12 rounded-ui shrink-0;
112
+ @apply inset-ring inset-ring-muted/30;
113
+ background-image:
114
+ linear-gradient(45deg, #ccc 25%, transparent 25%),
115
+ linear-gradient(-45deg, #ccc 25%, transparent 25%),
116
+ linear-gradient(45deg, transparent 75%, #ccc 75%),
117
+ linear-gradient(-45deg, transparent 75%, #ccc 75%);
118
+ background-size: 8px 8px;
119
+ background-position:
120
+ 0 0,
121
+ 0 4px,
122
+ 4px -4px,
123
+ -4px 0px;
124
+ }
125
+
126
+ .color-picker-preview-color {
127
+ @apply absolute inset-0 rounded-ui;
128
+ }
129
+
130
+ .color-picker-preview-info {
131
+ @apply flex flex-col gap-1 flex-1 min-w-0;
132
+ }
133
+
134
+ .color-picker-preview-hex {
135
+ @apply font-mono text-base font-semibold uppercase;
136
+ }
137
+
138
+ .color-picker-preview-foreground {
139
+ @apply text-xs text-on-muted truncate;
140
+ }
141
+ }