ui-svelte 0.2.11 → 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 (204) 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 +5 -9
  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 +23 -18
  51. package/dist/display/Avatar.svelte.d.ts +4 -1
  52. package/dist/display/AvatarGroup.svelte +20 -18
  53. package/dist/display/AvatarGroup.svelte.d.ts +6 -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 +30 -11
  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 -75
  83. package/dist/display/css/avatar.css +139 -121
  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/{PasswordStrength.svelte → PasswordField.svelte} +58 -24
  119. package/dist/form/{PasswordStrength.svelte.d.ts → PasswordField.svelte.d.ts} +6 -5
  120. package/dist/form/PhoneField.svelte +26 -14
  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 +1 -1
  135. package/dist/form/css/checkbox.css +18 -2
  136. package/dist/form/css/color-field.css +141 -0
  137. package/dist/form/css/control.css +193 -82
  138. package/dist/form/css/csv-field.css +226 -0
  139. package/dist/form/css/date-range.css +122 -0
  140. package/dist/form/css/date.css +24 -2
  141. package/dist/form/css/drag-drop.css +271 -0
  142. package/dist/form/css/dropzone.css +153 -34
  143. package/dist/form/css/editor.css +367 -0
  144. package/dist/form/css/field.css +4 -0
  145. package/dist/form/css/image-cropper.css +223 -22
  146. package/dist/form/css/radio-group.css +1 -1
  147. package/dist/form/css/select.css +2 -2
  148. package/dist/form/css/slider.css +1 -0
  149. package/dist/form/css/textarea.css +178 -75
  150. package/dist/form/css/toggle.css +3 -3
  151. package/dist/hooks/use-table.svelte.d.ts +1 -0
  152. package/dist/hooks/use-table.svelte.js +6 -0
  153. package/dist/icons/index.d.ts +30 -2
  154. package/dist/icons/index.js +32 -4
  155. package/dist/index.css +16 -1
  156. package/dist/index.d.ts +12 -4
  157. package/dist/index.js +11 -3
  158. package/dist/layout/AppBar.svelte +22 -14
  159. package/dist/layout/AppBar.svelte.d.ts +2 -1
  160. package/dist/layout/Footer.svelte +19 -11
  161. package/dist/layout/Footer.svelte.d.ts +2 -1
  162. package/dist/layout/Provider.svelte +27 -4
  163. package/dist/layout/Provider.svelte.d.ts +3 -1
  164. package/dist/layout/css/app-bar.css +63 -66
  165. package/dist/layout/css/footer.css +62 -65
  166. package/dist/navigation/BottomNav.svelte +41 -13
  167. package/dist/navigation/FooterGroup.svelte +1 -1
  168. package/dist/navigation/NavMenu.svelte +47 -23
  169. package/dist/navigation/NavMenu.svelte.d.ts +29 -0
  170. package/dist/navigation/Pagination.svelte +158 -0
  171. package/dist/navigation/Pagination.svelte.d.ts +18 -0
  172. package/dist/navigation/SideNav.svelte +30 -25
  173. package/dist/navigation/SideNav.svelte.d.ts +2 -3
  174. package/dist/navigation/Tabs.svelte +17 -7
  175. package/dist/navigation/Tabs.svelte.d.ts +2 -2
  176. package/dist/navigation/css/bottom-nav.css +279 -257
  177. package/dist/navigation/css/footer-group.css +1 -1
  178. package/dist/navigation/css/footer-nav.css +1 -1
  179. package/dist/navigation/css/nav-menu.css +332 -106
  180. package/dist/navigation/css/pagination.css +74 -0
  181. package/dist/navigation/css/side-nav.css +515 -75
  182. package/dist/navigation/css/tabs.css +246 -52
  183. package/dist/overlay/Command.svelte +340 -0
  184. package/dist/overlay/Command.svelte.d.ts +24 -25
  185. package/dist/overlay/Drawer.svelte +49 -21
  186. package/dist/overlay/Drawer.svelte.d.ts +2 -2
  187. package/dist/overlay/Dropdown.svelte +3 -3
  188. package/dist/overlay/Modal.svelte +51 -16
  189. package/dist/overlay/Modal.svelte.d.ts +3 -3
  190. package/dist/overlay/Toast.svelte +41 -17
  191. package/dist/overlay/Toast.svelte.d.ts +1 -1
  192. package/dist/overlay/Tooltip.svelte +40 -26
  193. package/dist/overlay/Tooltip.svelte.d.ts +2 -2
  194. package/dist/overlay/css/command.css +80 -0
  195. package/dist/overlay/css/drawer.css +63 -24
  196. package/dist/overlay/css/dropdown.css +1 -1
  197. package/dist/overlay/css/hovercard.css +1 -1
  198. package/dist/overlay/css/modal.css +27 -27
  199. package/dist/overlay/css/toast.css +17 -29
  200. package/dist/overlay/css/tooltip.css +83 -66
  201. package/dist/stores/theme.svelte.js +26 -1
  202. package/dist/stores/toast.svelte.d.ts +4 -4
  203. package/dist/stores/toast.svelte.js +2 -2
  204. package/package.json +1 -1
@@ -1,26 +1,25 @@
1
- export default Command;
2
- type Command = SvelteComponent<{
3
- [x: string]: never;
4
- }, {
5
- [evt: string]: CustomEvent<any>;
6
- }, {}> & {
7
- $$bindings?: string | undefined;
1
+ import type { SearchState, SearchOption } from '../hooks/use-search.svelte.js';
2
+ type CommandGroup = {
3
+ label: string;
4
+ options: SearchOption[];
5
+ };
6
+ type Props = {
7
+ search: SearchState;
8
+ open?: boolean;
9
+ placeholder?: string;
10
+ emptyText?: string;
11
+ loadingText?: string;
12
+ loadingMoreText?: string;
13
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'warning' | 'danger';
14
+ disableOverlayClose?: boolean;
15
+ disableGlobalShortcut?: boolean;
16
+ shortcut?: string;
17
+ showFooter?: boolean;
18
+ groups?: CommandGroup[];
19
+ onselect?: (item: SearchOption) => void;
20
+ onclose?: () => void;
21
+ class?: string;
8
22
  };
9
- declare const Command: $$__sveltets_2_IsomorphicComponent<{
10
- [x: string]: never;
11
- }, {
12
- [evt: string]: CustomEvent<any>;
13
- }, {}, {}, string>;
14
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
15
- new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
16
- $$bindings?: Bindings;
17
- } & Exports;
18
- (internal: unknown, props: {
19
- $$events?: Events;
20
- $$slots?: Slots;
21
- }): Exports & {
22
- $set?: any;
23
- $on?: any;
24
- };
25
- z_$$bindings?: Bindings;
26
- }
23
+ declare const Command: import("svelte").Component<Props, {}, "open">;
24
+ type Command = ReturnType<typeof Command>;
25
+ export default Command;
@@ -5,7 +5,7 @@
5
5
  import { fade } from 'svelte/transition';
6
6
  import { afterNavigate } from '$app/navigation';
7
7
  import { Dismiss24RegularIcon } from '../icons/index.js';
8
- import { Icon } from '../index.js';
8
+ import { IconButton } from '../index.js';
9
9
 
10
10
  type Props = {
11
11
  open: boolean;
@@ -18,10 +18,19 @@
18
18
  headerClass?: string;
19
19
  footerClass?: string;
20
20
  bodyClass?: string;
21
- variant?: 'ghost' | 'surface' | 'primary' | 'secondary' | 'muted';
21
+ color?:
22
+ | 'primary'
23
+ | 'secondary'
24
+ | 'muted'
25
+ | 'success'
26
+ | 'info'
27
+ | 'warning'
28
+ | 'danger'
29
+ | 'surface'
30
+ | 'default';
31
+ variant?: 'solid' | 'soft';
22
32
  disableOverlayClose?: boolean;
23
33
  hideCloseButton?: boolean;
24
- isSolid?: boolean;
25
34
  };
26
35
 
27
36
  let {
@@ -35,10 +44,10 @@
35
44
  headerClass,
36
45
  bodyClass,
37
46
  footerClass,
38
- variant = 'ghost',
47
+ color = 'default',
48
+ variant = 'solid',
39
49
  disableOverlayClose,
40
- hideCloseButton,
41
- isSolid
50
+ hideCloseButton
42
51
  }: Props = $props();
43
52
 
44
53
  const positionClasses = {
@@ -48,12 +57,33 @@
48
57
  bottom: 'is-bottom'
49
58
  };
50
59
 
51
- const variants = {
52
- ghost: 'is-ghost',
53
- surface: 'is-surface',
60
+ const colors = {
54
61
  primary: 'is-primary',
55
62
  secondary: 'is-secondary',
56
- muted: 'is-muted'
63
+ muted: 'is-muted',
64
+ success: 'is-success',
65
+ info: 'is-info',
66
+ danger: 'is-danger',
67
+ warning: 'is-warning',
68
+ surface: 'is-surface',
69
+ default: 'is-default'
70
+ };
71
+
72
+ const variants = {
73
+ solid: 'is-solid',
74
+ soft: 'is-soft'
75
+ };
76
+
77
+ const closeColors = {
78
+ primary: 'primary',
79
+ secondary: 'secondary',
80
+ muted: 'muted',
81
+ success: 'success',
82
+ info: 'info',
83
+ warning: 'warning',
84
+ danger: 'danger',
85
+ surface: 'muted',
86
+ default: 'muted'
57
87
  };
58
88
 
59
89
  let openDrawer = $state(false);
@@ -95,13 +125,7 @@
95
125
  <!-- svelte-ignore a11y_no_static_element_interactions -->
96
126
  <div class="drawer-overlay" onclick={handleOverlayClick}></div>
97
127
  <div
98
- class={cn(
99
- 'drawer',
100
- positionClasses[position],
101
- variants[variant],
102
- isSolid && 'is-solid',
103
- className
104
- )}
128
+ class={cn('drawer', positionClasses[position], variants[variant], colors[color], className)}
105
129
  class:is-active={openContent}
106
130
  >
107
131
  {#if header}
@@ -118,10 +142,14 @@
118
142
  </div>
119
143
  {/if}
120
144
  {#if !hideCloseButton}
121
- <div class="btn-close">
122
- <button onclick={() => (open = false)}>
123
- <Icon icon={Dismiss24RegularIcon} class="btn-close-icon" />
124
- </button>
145
+ <div class="drawer-btn-close">
146
+ <IconButton
147
+ icon={Dismiss24RegularIcon}
148
+ variant={variant === 'solid' ? 'soft' : 'solid'}
149
+ color={closeColors[color] as any}
150
+ size="xs"
151
+ onclick={() => (open = false)}
152
+ />
125
153
  </div>
126
154
  {/if}
127
155
  </div>
@@ -10,10 +10,10 @@ type Props = {
10
10
  headerClass?: string;
11
11
  footerClass?: string;
12
12
  bodyClass?: string;
13
- variant?: 'ghost' | 'surface' | 'primary' | 'secondary' | 'muted';
13
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'warning' | 'danger' | 'surface' | 'default';
14
+ variant?: 'solid' | 'soft';
14
15
  disableOverlayClose?: boolean;
15
16
  hideCloseButton?: boolean;
16
- isSolid?: boolean;
17
17
  };
18
18
  declare const Drawer: import("svelte").Component<Props, {}, "open">;
19
19
  type Drawer = ReturnType<typeof Drawer>;
@@ -14,13 +14,13 @@
14
14
 
15
15
  type Props = {
16
16
  options: Option[];
17
- variant?: 'primary' | 'secondary' | 'muted';
17
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'danger' | 'warning' | 'info';
18
18
  children: Snippet;
19
19
  header?: Snippet;
20
20
  footer?: Snippet;
21
21
  };
22
22
 
23
- const { children, header, footer, options, variant = 'primary' }: Props = $props();
23
+ const { children, header, footer, options, color = 'primary' }: Props = $props();
24
24
 
25
25
  let isOpen = $state(false);
26
26
  let controlElement = $state<HTMLElement>();
@@ -131,7 +131,7 @@
131
131
  id={item.id}
132
132
  href={item.href}
133
133
  onclick={() => item.onclick?.(item)}
134
- {variant}
134
+ {color}
135
135
  size="sm"
136
136
  isCompact
137
137
  />
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import IconButton from '../control/IconButton.svelte';
2
3
  import { Dismiss24RegularIcon } from '../icons/index.js';
3
4
  import { Icon } from '../index.js';
4
5
  import { cn } from '../utils/class-names.js';
@@ -12,14 +13,23 @@
12
13
  children: Snippet;
13
14
  header?: Snippet;
14
15
  footer?: Snippet;
15
- class?: string;
16
+ rootClass?: string;
16
17
  headerClass?: string;
17
18
  footerClass?: string;
18
19
  contentClass?: string;
19
- variant?: 'ghost' | 'surface' | 'primary' | 'secondary' | 'muted';
20
+ color?:
21
+ | 'primary'
22
+ | 'secondary'
23
+ | 'muted'
24
+ | 'success'
25
+ | 'info'
26
+ | 'warning'
27
+ | 'danger'
28
+ | 'surface'
29
+ | 'default';
30
+ variant?: 'solid' | 'soft';
20
31
  disableOverlayClose?: boolean;
21
32
  hideCloseButton?: boolean;
22
- isSolid?: boolean;
23
33
  };
24
34
 
25
35
  let {
@@ -28,24 +38,45 @@
28
38
  header,
29
39
  footer,
30
40
  children,
31
- class: className,
41
+ rootClass,
32
42
  headerClass,
33
43
  contentClass,
34
44
  footerClass,
35
- variant = 'ghost',
45
+ color = 'default',
46
+ variant = 'solid',
36
47
  disableOverlayClose,
37
- hideCloseButton,
38
- isSolid
48
+ hideCloseButton
39
49
  }: Props = $props();
40
50
 
41
51
  let openContent = $state(false);
42
52
 
43
- const variants = {
44
- ghost: 'is-ghost',
45
- surface: 'is-surface',
53
+ const colors = {
46
54
  primary: 'is-primary',
47
55
  secondary: 'is-secondary',
48
- muted: 'is-muted'
56
+ muted: 'is-muted',
57
+ success: 'is-success',
58
+ info: 'is-info',
59
+ danger: 'is-danger',
60
+ warning: 'is-warning',
61
+ surface: 'is-surface',
62
+ default: 'is-default'
63
+ };
64
+
65
+ const variants = {
66
+ solid: 'is-solid',
67
+ soft: 'is-soft'
68
+ };
69
+
70
+ const closeColors = {
71
+ primary: 'primary',
72
+ secondary: 'secondary',
73
+ muted: 'muted',
74
+ success: 'success',
75
+ info: 'info',
76
+ warning: 'warning',
77
+ danger: 'danger',
78
+ surface: 'muted',
79
+ default: 'muted'
49
80
  };
50
81
 
51
82
  const handleOverlayClick = () => {
@@ -74,14 +105,14 @@
74
105
  {#if openContent}
75
106
  <div
76
107
  in:scale={{ duration: 100 }}
77
- class={cn('modal', variants[variant], isSolid && 'is-solid', className)}
108
+ class={cn('modal', variants[variant], colors[color], rootClass)}
78
109
  >
79
110
  {#if header}
80
111
  <div class={cn('modal-header', headerClass)}>
81
112
  {@render header()}
82
113
  </div>
83
114
  {/if}
84
- <div class={cn('modal-content', contentClass)}>
115
+ <div class={cn('modal-body', contentClass)}>
85
116
  {@render children()}
86
117
  </div>
87
118
  {#if footer}
@@ -91,9 +122,13 @@
91
122
  {/if}
92
123
  {#if !hideCloseButton}
93
124
  <div class="btn-close">
94
- <button onclick={() => (open = false)}>
95
- <Icon icon={Dismiss24RegularIcon} class="btn-close-icon" />
96
- </button>
125
+ <IconButton
126
+ icon={Dismiss24RegularIcon}
127
+ variant={variant === 'solid' ? 'soft' : 'solid'}
128
+ color={closeColors[color] as any}
129
+ size="xs"
130
+ onclick={() => (open = false)}
131
+ />
97
132
  </div>
98
133
  {/if}
99
134
  </div>
@@ -5,14 +5,14 @@ type Props = {
5
5
  children: Snippet;
6
6
  header?: Snippet;
7
7
  footer?: Snippet;
8
- class?: string;
8
+ rootClass?: string;
9
9
  headerClass?: string;
10
10
  footerClass?: string;
11
11
  contentClass?: string;
12
- variant?: 'ghost' | 'surface' | 'primary' | 'secondary' | 'muted';
12
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'warning' | 'danger' | 'surface' | 'default';
13
+ variant?: 'solid' | 'soft';
13
14
  disableOverlayClose?: boolean;
14
15
  hideCloseButton?: boolean;
15
- isSolid?: boolean;
16
16
  };
17
17
  declare const Modal: import("svelte").Component<Props, {}, "open">;
18
18
  type Modal = ReturnType<typeof Modal>;
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import { slide } from 'svelte/transition';
3
3
 
4
- import { Icon, toast } from '../index.js';
4
+ import { Icon, IconButton, toast } from '../index.js';
5
5
  import { cn } from '../utils/class-names.js';
6
6
  import { popover } from '../utils/popover.js';
7
7
  import {
@@ -16,10 +16,15 @@
16
16
  class?: string;
17
17
  position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
18
18
  showIcon?: boolean;
19
- isSolid?: boolean;
19
+ variant?: 'solid' | 'soft';
20
20
  };
21
21
 
22
- const { class: className, position = 'bottom-left', isSolid, showIcon }: Props = $props();
22
+ const {
23
+ class: className,
24
+ position = 'bottom-left',
25
+ variant = 'soft',
26
+ showIcon
27
+ }: Props = $props();
23
28
 
24
29
  const positionClasses = {
25
30
  'top-left': 'is-top-left',
@@ -28,18 +33,29 @@
28
33
  'bottom-right': 'is-bottom-right'
29
34
  };
30
35
 
31
- const status = {
36
+ const colors = {
37
+ primary: 'is-primary',
38
+ secondary: 'is-secondary',
39
+ muted: 'is-muted',
32
40
  info: 'is-info',
33
41
  success: 'is-success',
34
42
  warning: 'is-warning',
35
43
  danger: 'is-danger'
36
44
  };
37
45
 
38
- const icons = {
39
- info: 'fluent:error-circle-24-regular',
40
- success: 'fluent:checkmark-circle-24-regular',
41
- warning: 'fluent:warning-24-regular',
42
- danger: 'fluent:block-24-regular'
46
+ const variants = {
47
+ solid: 'is-solid',
48
+ soft: 'is-soft'
49
+ };
50
+
51
+ const closeColors = {
52
+ primary: 'primary',
53
+ secondary: 'secondary',
54
+ muted: 'muted',
55
+ success: 'success',
56
+ info: 'info',
57
+ warning: 'warning',
58
+ danger: 'danger'
43
59
  };
44
60
  </script>
45
61
 
@@ -52,17 +68,21 @@
52
68
  {#each toast.messages as message, index (message.id)}
53
69
  <div
54
70
  transition:slide
55
- class={cn('toast', status[message.status], (message.isSolid || isSolid) && 'is-solid')}
71
+ class={cn(
72
+ 'toast',
73
+ colors[message.color],
74
+ message.variant ? variants[message.variant] : variants[variant]
75
+ )}
56
76
  style="--toast-index: {index}; --toast-total: {toast.messages.length}"
57
77
  >
58
78
  {#if showIcon}
59
- {#if message.status === 'info'}
79
+ {#if message.color === 'info'}
60
80
  <Icon icon={Info24RegularIcon} class="toast-icon" />
61
- {:else if message.status === 'success'}
81
+ {:else if message.color === 'success'}
62
82
  <Icon icon={CheckmarkCircle24RegularIcon} class="toast-icon" />
63
- {:else if message.status === 'warning'}
83
+ {:else if message.color === 'warning'}
64
84
  <Icon icon={Warning24RegularIcon} class="toast-icon" />
65
- {:else if message.status === 'danger'}
85
+ {:else if message.color === 'danger'}
66
86
  <Icon icon={DismissCircle24RegularIcon} class="toast-icon" />
67
87
  {/if}
68
88
  {/if}
@@ -73,9 +93,13 @@
73
93
  <div class="toast-description">{message.description}</div>
74
94
  </div>
75
95
  <div class="btn-close">
76
- <button onclick={() => toast.close(message.id)}>
77
- <Icon icon={Dismiss24RegularIcon} class="btn-close-icon" />
78
- </button>
96
+ <IconButton
97
+ icon={Dismiss24RegularIcon}
98
+ variant={variant === 'solid' ? 'soft' : 'solid'}
99
+ color={closeColors[message.color] as any}
100
+ size="xs"
101
+ onclick={() => toast.close(message.id)}
102
+ />
79
103
  </div>
80
104
  </div>
81
105
  {/each}
@@ -2,7 +2,7 @@ type Props = {
2
2
  class?: string;
3
3
  position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
4
4
  showIcon?: boolean;
5
- isSolid?: boolean;
5
+ variant?: 'solid' | 'soft';
6
6
  };
7
7
  declare const Toast: import("svelte").Component<Props, {}, "">;
8
8
  type Toast = ReturnType<typeof Toast>;
@@ -6,18 +6,18 @@
6
6
  type Props = {
7
7
  label: string;
8
8
  children: Snippet;
9
- variant?: 'primary' | 'secondary' | 'muted';
9
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
10
+ variant?: 'solid' | 'soft';
10
11
  position?: 'top' | 'bottom' | 'start' | 'end';
11
- isSolid?: boolean;
12
12
  class?: string;
13
13
  };
14
14
 
15
15
  let {
16
16
  label,
17
17
  children,
18
- variant = 'primary',
18
+ color = 'primary',
19
+ variant = 'soft',
19
20
  position = 'top',
20
- isSolid = false,
21
21
  class: className
22
22
  }: Props = $props();
23
23
 
@@ -31,10 +31,19 @@
31
31
 
32
32
  const style = $derived(`top: ${tooltipPosition.top}px; left: ${tooltipPosition.left}px;`);
33
33
 
34
- const variantClasses = {
34
+ const colors = {
35
35
  primary: 'is-primary',
36
36
  secondary: 'is-secondary',
37
- muted: 'is-muted'
37
+ muted: 'is-muted',
38
+ success: 'is-success',
39
+ info: 'is-info',
40
+ danger: 'is-danger',
41
+ warning: 'is-warning'
42
+ };
43
+
44
+ const variants = {
45
+ solid: 'is-solid',
46
+ soft: 'is-soft'
38
47
  };
39
48
 
40
49
  const positionClasses = {
@@ -73,8 +82,9 @@
73
82
  break;
74
83
  }
75
84
 
76
- top += window.scrollY;
77
- left += window.scrollX;
85
+ // Note: Don't add scroll offsets for position: fixed
86
+ // getBoundingClientRect() returns viewport-relative coordinates
87
+ // and position: fixed is also relative to the viewport
78
88
 
79
89
  const padding = 8;
80
90
  if (left < padding) left = padding;
@@ -82,19 +92,24 @@
82
92
  left = window.innerWidth - tooltipRect.width - padding;
83
93
  }
84
94
  if (top < padding) top = padding;
85
- if (top + tooltipRect.height > window.innerHeight + window.scrollY - padding) {
86
- top = window.innerHeight + window.scrollY - tooltipRect.height - padding;
95
+ if (top + tooltipRect.height > window.innerHeight - padding) {
96
+ top = window.innerHeight - tooltipRect.height - padding;
87
97
  }
88
98
 
89
99
  tooltipPosition = { top, left };
90
100
  };
91
101
 
92
102
  const handleMouseEnter = () => {
103
+ startEventListeners();
93
104
  isOpen = true;
94
- setTimeout(updatePosition, 0);
105
+ // Use requestAnimationFrame to ensure the element is rendered before calculating position
106
+ requestAnimationFrame(() => {
107
+ updatePosition();
108
+ });
95
109
  };
96
110
 
97
111
  const handleMouseLeave = () => {
112
+ stopEventListeners();
98
113
  isOpen = false;
99
114
  };
100
115
 
@@ -109,7 +124,6 @@
109
124
  };
110
125
 
111
126
  onMount(() => {
112
- startEventListeners();
113
127
  return () => stopEventListeners();
114
128
  });
115
129
  </script>
@@ -122,19 +136,19 @@
122
136
  onmouseleave={handleMouseLeave}
123
137
  >
124
138
  {@render children()}
139
+ </div>
125
140
 
126
- <div
127
- bind:this={tooltipElement}
128
- class={cn(
129
- 'tooltip-popover',
130
- variantClasses[variant],
131
- positionClasses[position],
132
- isSolid && 'is-solid',
133
- isOpen && 'is-active'
134
- )}
135
- {style}
136
- >
137
- <div class={cn('tooltip-arrow', variantClasses[variant], isSolid && 'is-solid')}></div>
138
- {label}
139
- </div>
141
+ <div
142
+ bind:this={tooltipElement}
143
+ class={cn(
144
+ 'tooltip-popover',
145
+ colors[color],
146
+ variants[variant],
147
+ positionClasses[position],
148
+ isOpen && 'is-active'
149
+ )}
150
+ {style}
151
+ >
152
+ <div class="tooltip-arrow"></div>
153
+ {label}
140
154
  </div>
@@ -2,9 +2,9 @@ import type { Snippet } from 'svelte';
2
2
  type Props = {
3
3
  label: string;
4
4
  children: Snippet;
5
- variant?: 'primary' | 'secondary' | 'muted';
5
+ color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'danger' | 'warning';
6
+ variant?: 'solid' | 'soft';
6
7
  position?: 'top' | 'bottom' | 'start' | 'end';
7
- isSolid?: boolean;
8
8
  class?: string;
9
9
  };
10
10
  declare const Tooltip: import("svelte").Component<Props, {}, "">;
@@ -0,0 +1,80 @@
1
+ @layer components {
2
+ .command-dialog {
3
+ @apply fixed inset-0 z-50;
4
+ @apply flex flex-col justify-start items-center pt-[15vh];
5
+
6
+ .command-overlay {
7
+ @apply absolute inset-0 bg-overlay;
8
+ }
9
+
10
+ .command {
11
+ @apply relative flex flex-col rounded-box max-w-xl w-full max-h-[60vh];
12
+ @apply shadow-lg overflow-hidden;
13
+ @apply bg-background text-on-background;
14
+ }
15
+ }
16
+
17
+ .command-search {
18
+ @apply relative flex items-center w-full gap-3 px-4 py-3;
19
+ @apply border-b border-muted;
20
+ }
21
+
22
+ .command-search-icon {
23
+ @apply h-5 w-auto text-on-muted shrink-0;
24
+ }
25
+
26
+ .command-search-input {
27
+ @apply flex-1 border-none outline-none bg-transparent text-on-background;
28
+ @apply placeholder:text-on-muted/70 text-base;
29
+ }
30
+
31
+ .command-kbd {
32
+ @apply hidden md:flex items-center gap-1 text-xs text-on-muted;
33
+ }
34
+
35
+ .command-kbd kbd {
36
+ @apply px-1.5 py-0.5 bg-muted rounded text-[10px] font-mono uppercase;
37
+ }
38
+
39
+ .command-results {
40
+ @apply flex-1 overflow-y-auto p-2;
41
+ @apply max-h-80;
42
+ }
43
+
44
+ .command-group {
45
+ @apply mb-2;
46
+ }
47
+
48
+ .command-group-label {
49
+ @apply px-2 py-1.5 text-xs font-medium text-on-muted uppercase tracking-wide;
50
+ }
51
+
52
+ .command-empty {
53
+ @apply flex items-center justify-center py-8 text-sm text-on-muted;
54
+ }
55
+
56
+ .command-loading {
57
+ @apply flex items-center justify-center gap-2 py-8 text-sm text-on-muted;
58
+ }
59
+
60
+ .command-loading-spinner {
61
+ @apply size-4 animate-spin;
62
+ }
63
+
64
+ .command-footer {
65
+ @apply flex items-center justify-between px-4 py-2;
66
+ @apply border-t border-muted/30 text-xs text-on-muted;
67
+ }
68
+
69
+ .command-shortcut {
70
+ @apply flex items-center gap-2;
71
+ }
72
+
73
+ .command-shortcut-item {
74
+ @apply flex items-center gap-1;
75
+ }
76
+
77
+ .command-shortcut-item kbd {
78
+ @apply px-1.5 py-0.5 bg-muted/20 rounded text-[10px] font-mono;
79
+ }
80
+ }