@noahbaumgartner/svelte-ui 0.0.4 → 0.0.6

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 (216) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +28 -13
  3. package/dist/components/accordion/Accordion.svelte +44 -0
  4. package/dist/components/accordion/Accordion.svelte.d.ts +13 -0
  5. package/dist/components/accordion/AccordionItem.svelte +145 -0
  6. package/dist/components/accordion/AccordionItem.svelte.d.ts +17 -0
  7. package/dist/components/accordion/context.d.ts +5 -0
  8. package/dist/components/accordion/context.js +2 -0
  9. package/dist/components/alert-dialog/AlertDialog.svelte +108 -76
  10. package/dist/components/alert-dialog/AlertDialog.svelte.d.ts +5 -2
  11. package/dist/components/avatar/Avatar.svelte +71 -49
  12. package/dist/components/avatar/Avatar.svelte.d.ts +5 -2
  13. package/dist/components/avatar-group/AvatarGroup.svelte +103 -0
  14. package/dist/components/avatar-group/AvatarGroup.svelte.d.ts +19 -0
  15. package/dist/components/badge/Badge.svelte +50 -28
  16. package/dist/components/badge/Badge.svelte.d.ts +6 -4
  17. package/dist/components/breadcrumb/Breadcrumb.svelte +21 -17
  18. package/dist/components/breadcrumb/Breadcrumb.svelte.d.ts +3 -1
  19. package/dist/components/breadcrumb/BreadcrumbEllipsis.svelte +17 -6
  20. package/dist/components/breadcrumb/BreadcrumbEllipsis.svelte.d.ts +5 -2
  21. package/dist/components/breadcrumb/BreadcrumbItem.svelte +75 -36
  22. package/dist/components/breadcrumb/BreadcrumbItem.svelte.d.ts +8 -5
  23. package/dist/components/breadcrumb/BreadcrumbSeparator.svelte +32 -9
  24. package/dist/components/breadcrumb/BreadcrumbSeparator.svelte.d.ts +10 -17
  25. package/dist/components/button/Button.svelte +206 -168
  26. package/dist/components/button/Button.svelte.d.ts +9 -5
  27. package/dist/components/button-group/ButtonGroup.svelte +52 -55
  28. package/dist/components/button-group/ButtonGroup.svelte.d.ts +3 -1
  29. package/dist/components/calendar/Calendar.svelte +232 -144
  30. package/dist/components/calendar/Calendar.svelte.d.ts +19 -2
  31. package/dist/components/calendar/dates.d.ts +4 -1
  32. package/dist/components/calendar/dates.js +8 -2
  33. package/dist/components/card/Card.svelte +48 -32
  34. package/dist/components/card/Card.svelte.d.ts +3 -1
  35. package/dist/components/card/CardAction.svelte +11 -7
  36. package/dist/components/card/CardAction.svelte.d.ts +3 -1
  37. package/dist/components/card/CardContent.svelte +8 -4
  38. package/dist/components/card/CardContent.svelte.d.ts +3 -1
  39. package/dist/components/card/CardDescription.svelte +11 -7
  40. package/dist/components/card/CardDescription.svelte.d.ts +3 -1
  41. package/dist/components/card/CardFooter.svelte +15 -11
  42. package/dist/components/card/CardFooter.svelte.d.ts +3 -1
  43. package/dist/components/card/CardHeader.svelte +15 -11
  44. package/dist/components/card/CardHeader.svelte.d.ts +3 -1
  45. package/dist/components/card/CardTitle.svelte +11 -7
  46. package/dist/components/card/CardTitle.svelte.d.ts +3 -1
  47. package/dist/components/checkbox/Checkbox.svelte +152 -61
  48. package/dist/components/checkbox/Checkbox.svelte.d.ts +5 -2
  49. package/dist/components/color-picker/ColorPicker.svelte +131 -78
  50. package/dist/components/color-picker/ColorPicker.svelte.d.ts +10 -1
  51. package/dist/components/context-menu/ContextMenu.svelte +78 -61
  52. package/dist/components/context-menu/ContextMenu.svelte.d.ts +5 -2
  53. package/dist/components/context-menu/ContextMenuInfo.svelte +91 -0
  54. package/dist/components/context-menu/ContextMenuInfo.svelte.d.ts +19 -0
  55. package/dist/components/context-menu/ContextMenuItem.svelte +102 -57
  56. package/dist/components/context-menu/ContextMenuItem.svelte.d.ts +10 -5
  57. package/dist/components/context-menu/ContextMenuLabel.svelte +28 -0
  58. package/dist/components/context-menu/ContextMenuLabel.svelte.d.ts +10 -0
  59. package/dist/components/context-menu/ContextMenuSeparator.svelte +29 -0
  60. package/dist/components/context-menu/ContextMenuSeparator.svelte.d.ts +8 -0
  61. package/dist/components/dialog/Dialog.svelte +149 -108
  62. package/dist/components/dialog/Dialog.svelte.d.ts +7 -2
  63. package/dist/components/drawer/Drawer.svelte +419 -0
  64. package/dist/components/drawer/Drawer.svelte.d.ts +28 -0
  65. package/dist/components/empty-state/EmptyState.svelte +106 -0
  66. package/dist/components/empty-state/EmptyState.svelte.d.ts +19 -0
  67. package/dist/components/entry/Entry.svelte +94 -0
  68. package/dist/components/entry/Entry.svelte.d.ts +16 -0
  69. package/dist/components/field/Field.svelte +66 -45
  70. package/dist/components/field/Field.svelte.d.ts +2 -1
  71. package/dist/components/field/FieldContent.svelte +11 -8
  72. package/dist/components/field/FieldContent.svelte.d.ts +2 -1
  73. package/dist/components/field/FieldDescription.svelte +18 -15
  74. package/dist/components/field/FieldDescription.svelte.d.ts +2 -1
  75. package/dist/components/field/FieldError.svelte +22 -13
  76. package/dist/components/field/FieldError.svelte.d.ts +2 -1
  77. package/dist/components/field/FieldGroup.svelte +15 -12
  78. package/dist/components/field/FieldGroup.svelte.d.ts +2 -1
  79. package/dist/components/field/FieldLegend.svelte +23 -14
  80. package/dist/components/field/FieldLegend.svelte.d.ts +2 -1
  81. package/dist/components/field/FieldSeparator.svelte +12 -9
  82. package/dist/components/field/FieldSeparator.svelte.d.ts +2 -1
  83. package/dist/components/field/FieldSet.svelte +18 -15
  84. package/dist/components/field/FieldSet.svelte.d.ts +2 -1
  85. package/dist/components/footer/Footer.svelte +105 -0
  86. package/dist/components/footer/Footer.svelte.d.ts +14 -0
  87. package/dist/components/footer/FooterColumn.svelte +37 -0
  88. package/dist/components/footer/FooterColumn.svelte.d.ts +11 -0
  89. package/dist/components/image/Image.svelte +61 -0
  90. package/dist/components/image/Image.svelte.d.ts +18 -0
  91. package/dist/components/input/Input.svelte +307 -208
  92. package/dist/components/input/Input.svelte.d.ts +12 -1
  93. package/dist/components/input-group/InputGroup.svelte +101 -61
  94. package/dist/components/input-group/InputGroup.svelte.d.ts +2 -1
  95. package/dist/components/input-group/InputGroupAddon.svelte +58 -49
  96. package/dist/components/kbd/Kbd.svelte +39 -30
  97. package/dist/components/kbd/Kbd.svelte.d.ts +2 -1
  98. package/dist/components/kbd/KbdGroup.svelte +15 -12
  99. package/dist/components/kbd/KbdGroup.svelte.d.ts +2 -1
  100. package/dist/components/label/Label.svelte +47 -28
  101. package/dist/components/label/Label.svelte.d.ts +2 -1
  102. package/dist/components/link/Link.svelte +71 -17
  103. package/dist/components/link/Link.svelte.d.ts +2 -1
  104. package/dist/components/mesh-gradient/MeshGradient.svelte +97 -0
  105. package/dist/components/mesh-gradient/MeshGradient.svelte.d.ts +11 -0
  106. package/dist/components/navbar/Navbar.svelte +137 -99
  107. package/dist/components/navbar/Navbar.svelte.d.ts +4 -2
  108. package/dist/components/navigation-menu/NavigationMenu.svelte +37 -20
  109. package/dist/components/navigation-menu/NavigationMenu.svelte.d.ts +4 -2
  110. package/dist/components/navigation-menu/NavigationMenuItem.svelte +131 -89
  111. package/dist/components/navigation-menu/NavigationMenuItem.svelte.d.ts +4 -2
  112. package/dist/components/navigation-menu/NavigationMenuLink.svelte +90 -51
  113. package/dist/components/navigation-menu/NavigationMenuLink.svelte.d.ts +7 -5
  114. package/dist/components/number-stepper/NumberStepper.svelte +101 -0
  115. package/dist/components/number-stepper/NumberStepper.svelte.d.ts +21 -0
  116. package/dist/components/popover/Popover.svelte +85 -65
  117. package/dist/components/popover/Popover.svelte.d.ts +5 -2
  118. package/dist/components/preview-card/PreviewCard.svelte +184 -0
  119. package/dist/components/preview-card/PreviewCard.svelte.d.ts +23 -0
  120. package/dist/components/progress/Progress.svelte +111 -0
  121. package/dist/components/progress/Progress.svelte.d.ts +13 -0
  122. package/dist/components/radio-group/RadioGroup.svelte +24 -19
  123. package/dist/components/radio-group/RadioGroup.svelte.d.ts +2 -1
  124. package/dist/components/radio-group/RadioGroupItem.svelte +101 -54
  125. package/dist/components/radio-group/RadioGroupItem.svelte.d.ts +2 -1
  126. package/dist/components/section/Section.svelte +114 -0
  127. package/dist/components/section/Section.svelte.d.ts +22 -0
  128. package/dist/components/select/Select.svelte +474 -0
  129. package/dist/components/select/Select.svelte.d.ts +48 -0
  130. package/dist/components/separator/Separator.svelte +21 -10
  131. package/dist/components/separator/Separator.svelte.d.ts +2 -1
  132. package/dist/components/sidebar/Sidebar.svelte +158 -87
  133. package/dist/components/sidebar/Sidebar.svelte.d.ts +6 -1
  134. package/dist/components/sidebar/SidebarContent.svelte +15 -12
  135. package/dist/components/sidebar/SidebarContent.svelte.d.ts +2 -1
  136. package/dist/components/sidebar/SidebarFooter.svelte +10 -7
  137. package/dist/components/sidebar/SidebarFooter.svelte.d.ts +2 -1
  138. package/dist/components/sidebar/SidebarGroup.svelte +35 -25
  139. package/dist/components/sidebar/SidebarGroup.svelte.d.ts +2 -1
  140. package/dist/components/sidebar/SidebarHeader.svelte +37 -8
  141. package/dist/components/sidebar/SidebarHeader.svelte.d.ts +6 -1
  142. package/dist/components/sidebar/SidebarInset.svelte +11 -8
  143. package/dist/components/sidebar/SidebarInset.svelte.d.ts +2 -1
  144. package/dist/components/sidebar/SidebarMenu.svelte +13 -10
  145. package/dist/components/sidebar/SidebarMenu.svelte.d.ts +2 -1
  146. package/dist/components/sidebar/SidebarMenuItem.svelte +195 -114
  147. package/dist/components/sidebar/SidebarMenuItem.svelte.d.ts +11 -5
  148. package/dist/components/sidebar/SidebarProvider.svelte +18 -9
  149. package/dist/components/sidebar/SidebarProvider.svelte.d.ts +2 -1
  150. package/dist/components/sidebar/SidebarSeparator.svelte +6 -1
  151. package/dist/components/sidebar/SidebarSeparator.svelte.d.ts +6 -17
  152. package/dist/components/sidebar/SidebarTrigger.svelte +17 -5
  153. package/dist/components/sidebar/SidebarTrigger.svelte.d.ts +4 -2
  154. package/dist/components/skeleton/Skeleton.svelte +26 -16
  155. package/dist/components/skeleton/Skeleton.svelte.d.ts +4 -2
  156. package/dist/components/spinner/Spinner.svelte +71 -46
  157. package/dist/components/spinner/Spinner.svelte.d.ts +2 -1
  158. package/dist/components/switch/Switch.svelte +126 -65
  159. package/dist/components/switch/Switch.svelte.d.ts +4 -2
  160. package/dist/components/table/Table.svelte +135 -76
  161. package/dist/components/table/Table.svelte.d.ts +12 -2
  162. package/dist/components/tabs/Tabs.svelte +337 -0
  163. package/dist/components/tabs/Tabs.svelte.d.ts +50 -0
  164. package/dist/components/textarea/Textarea.svelte +76 -42
  165. package/dist/components/textarea/Textarea.svelte.d.ts +4 -1
  166. package/dist/components/time-picker/TimePicker.svelte +214 -85
  167. package/dist/components/time-picker/TimePicker.svelte.d.ts +18 -1
  168. package/dist/components/toaster/Toaster.svelte +132 -70
  169. package/dist/components/toaster/Toaster.svelte.d.ts +18 -2
  170. package/dist/components/toaster/toast.svelte.d.ts +3 -3
  171. package/dist/components/toggle/Toggle.svelte +25 -4
  172. package/dist/components/toggle/Toggle.svelte.d.ts +1 -1
  173. package/dist/components/tooltip/Tooltip.svelte +87 -58
  174. package/dist/components/tooltip/Tooltip.svelte.d.ts +4 -2
  175. package/dist/icon.d.ts +12 -0
  176. package/dist/icon.js +1 -0
  177. package/dist/index.d.ts +21 -0
  178. package/dist/index.js +19 -0
  179. package/dist/internal/icons/ArrowDown.svelte +14 -0
  180. package/dist/internal/icons/ArrowDown.svelte.d.ts +4 -0
  181. package/dist/internal/icons/ArrowUp.svelte +14 -0
  182. package/dist/internal/icons/ArrowUp.svelte.d.ts +4 -0
  183. package/dist/internal/icons/Calendar.svelte +16 -0
  184. package/dist/internal/icons/Calendar.svelte.d.ts +4 -0
  185. package/dist/internal/icons/Check.svelte +8 -0
  186. package/dist/internal/icons/Check.svelte.d.ts +4 -0
  187. package/dist/internal/icons/ChevronDown.svelte +8 -0
  188. package/dist/internal/icons/ChevronDown.svelte.d.ts +4 -0
  189. package/dist/internal/icons/ChevronLeft.svelte +8 -0
  190. package/dist/internal/icons/ChevronLeft.svelte.d.ts +4 -0
  191. package/dist/internal/icons/ChevronRight.svelte +8 -0
  192. package/dist/internal/icons/ChevronRight.svelte.d.ts +4 -0
  193. package/dist/internal/icons/ChevronUp.svelte +8 -0
  194. package/dist/internal/icons/ChevronUp.svelte.d.ts +4 -0
  195. package/dist/internal/icons/ChevronsUpDown.svelte +14 -0
  196. package/dist/internal/icons/ChevronsUpDown.svelte.d.ts +4 -0
  197. package/dist/internal/icons/Clock.svelte +14 -0
  198. package/dist/internal/icons/Clock.svelte.d.ts +4 -0
  199. package/dist/internal/icons/Ellipsis.svelte +15 -0
  200. package/dist/internal/icons/Ellipsis.svelte.d.ts +4 -0
  201. package/dist/internal/icons/Icon.svelte +33 -0
  202. package/dist/internal/icons/Icon.svelte.d.ts +8 -0
  203. package/dist/internal/icons/Minus.svelte +8 -0
  204. package/dist/internal/icons/Minus.svelte.d.ts +4 -0
  205. package/dist/internal/icons/PanelLeft.svelte +14 -0
  206. package/dist/internal/icons/PanelLeft.svelte.d.ts +4 -0
  207. package/dist/internal/icons/Plus.svelte +14 -0
  208. package/dist/internal/icons/Plus.svelte.d.ts +4 -0
  209. package/dist/internal/icons/User.svelte +14 -0
  210. package/dist/internal/icons/User.svelte.d.ts +4 -0
  211. package/dist/internal/icons/X.svelte +14 -0
  212. package/dist/internal/icons/X.svelte.d.ts +4 -0
  213. package/dist/styles/tokens.css +39 -41
  214. package/package.json +5 -10
  215. package/dist/icons.d.ts +0 -2
  216. package/dist/icons.js +0 -4
@@ -1,4 +1,4 @@
1
- import type { LucideIcon } from '@lucide/svelte';
1
+ import type { IconComponent } from '../../icon.js';
2
2
  export type ToastAction = {
3
3
  label: string;
4
4
  onclick: () => void;
@@ -6,8 +6,8 @@ export type ToastAction = {
6
6
  export type ToastOptions = {
7
7
  /** Updates the toast with this id instead of adding a new one. */
8
8
  id?: number;
9
- /** Any Lucide icon (import from `svelte-ui/icons`), shown on the left. */
10
- icon?: LucideIcon;
9
+ /** Any icon component, e.g. from `@lucide/svelte`, shown on the left. */
10
+ icon?: IconComponent;
11
11
  /** Shows a Spinner instead of the icon and keeps the toast open until it is updated. */
12
12
  loading?: boolean;
13
13
  /** Button on the right; clicking it runs `onclick` and dismisses the toast. */
@@ -9,11 +9,18 @@
9
9
  pressed?: boolean;
10
10
  };
11
11
 
12
- let { pressed = $bindable(false), class: className, onclick, ...rest }: Props = $props();
12
+ let {
13
+ pressed = $bindable(false),
14
+ ref = $bindable(null),
15
+ class: className,
16
+ onclick,
17
+ ...rest
18
+ }: Props = $props();
13
19
  </script>
14
20
 
15
21
  <Button
16
22
  {...rest}
23
+ bind:ref
17
24
  variant="secondary"
18
25
  aria-pressed={pressed}
19
26
  class={['toggle', className]}
@@ -24,8 +31,22 @@
24
31
  />
25
32
 
26
33
  <style>
27
- :global(.button.toggle[aria-pressed='true']),
28
- :global(.button.toggle[aria-pressed='true']:hover:not(:disabled)) {
29
- background-color: var(--color-surface-active);
34
+ @layer svelte-ui {
35
+ :global(.button.toggle[aria-pressed='true']),
36
+ :global(.button.toggle[aria-pressed='true']:hover:not(:disabled)) {
37
+ background-color: var(--color-surface-active);
38
+ }
39
+
40
+ @media (forced-colors: active) {
41
+ :global(.button.toggle[aria-pressed='true']),
42
+ :global(.button.toggle[aria-pressed='true']:hover:not(:disabled)) {
43
+ background-color: Highlight;
44
+ color: HighlightText;
45
+ }
46
+
47
+ :global(.button.toggle[aria-pressed='false']) {
48
+ border: 1px solid ButtonText;
49
+ }
50
+ }
30
51
  }
31
52
  </style>
@@ -3,6 +3,6 @@ import Button from '../button/Button.svelte';
3
3
  type Props = Omit<ComponentProps<typeof Button>, 'href' | 'target' | 'rel' | 'type' | 'variant'> & {
4
4
  pressed?: boolean;
5
5
  };
6
- declare const Toggle: import("svelte").Component<Props, {}, "pressed">;
6
+ declare const Toggle: import("svelte").Component<Props, {}, "ref" | "pressed">;
7
7
  type Toggle = ReturnType<typeof Toggle>;
8
8
  export default Toggle;
@@ -14,11 +14,12 @@
14
14
 
15
15
  <script lang="ts">
16
16
  import type { Snippet } from 'svelte';
17
+ import type { HTMLAttributes } from 'svelte/elements';
17
18
  import { fade } from 'svelte/transition';
18
19
 
19
20
  type Side = 'top' | 'right' | 'bottom' | 'left';
20
21
 
21
- type Props = {
22
+ type Props = Omit<HTMLAttributes<HTMLSpanElement>, 'children'> & {
22
23
  /** Whether the tooltip is shown. Bindable. */
23
24
  open?: boolean;
24
25
  /** Preferred side; flips to the opposite one when there is not enough room. */
@@ -29,9 +30,19 @@
29
30
  trigger: Snippet<[TooltipTriggerProps]>;
30
31
  /** Tooltip content; may contain `Kbd` / `KbdGroup`. */
31
32
  children: Snippet;
33
+ ref?: HTMLSpanElement | null;
32
34
  };
33
35
 
34
- let { open = $bindable(false), side = 'top', delay = 0, trigger, children }: Props = $props();
36
+ let {
37
+ open = $bindable(false),
38
+ side = 'top',
39
+ delay = 0,
40
+ trigger,
41
+ children,
42
+ ref = $bindable(null),
43
+ class: className,
44
+ ...rest
45
+ }: Props = $props();
35
46
 
36
47
  const id = $props.id();
37
48
  const gap = 6;
@@ -45,6 +56,10 @@
45
56
  // A click dismisses the tooltip until the pointer leaves the trigger.
46
57
  let pressed = false;
47
58
 
59
+ function reducedMotion() {
60
+ return window.matchMedia('(prefers-reduced-motion: reduce)').matches;
61
+ }
62
+
48
63
  function show(wait: number) {
49
64
  clearTimeout(timer);
50
65
  if (pressed) return;
@@ -135,7 +150,7 @@
135
150
  });
136
151
  </script>
137
152
 
138
- <span class="tooltip">
153
+ <span {...rest} bind:this={ref} class={['tooltip', className]}>
139
154
  {@render trigger(triggerProps)}
140
155
 
141
156
  {#if open}
@@ -148,7 +163,7 @@
148
163
  style:left="{position.left}px"
149
164
  style:--tooltip-arrow="{position.arrow}px"
150
165
  {@attach popover}
151
- transition:fade={{ duration: 100 }}
166
+ transition:fade={{ duration: reducedMotion() ? 0 : 100 }}
152
167
  >
153
168
  {@render children()}
154
169
  <span class="tooltip-arrow" aria-hidden="true"></span>
@@ -157,68 +172,82 @@
157
172
  </span>
158
173
 
159
174
  <style>
160
- .tooltip {
161
- display: inline-flex;
162
- height: fit-content;
163
- }
175
+ @layer svelte-ui {
176
+ .tooltip {
177
+ display: inline-flex;
178
+ height: fit-content;
179
+ }
164
180
 
165
- .tooltip-content {
166
- position: fixed;
167
- inset: auto;
168
- margin: 0;
169
- display: inline-flex;
170
- align-items: center;
171
- gap: 6px;
172
- width: max-content;
173
- max-width: 280px;
174
- padding: 6px 10px;
175
- overflow: visible;
176
- font-size: 12px;
177
- line-height: 1.4;
178
- text-wrap: balance;
179
- background-color: var(--color-ink);
180
- color: var(--color-base);
181
- border: none;
182
- border-radius: 10px;
183
- pointer-events: none;
184
- }
181
+ .tooltip-content {
182
+ position: fixed;
183
+ inset: auto;
184
+ margin: 0;
185
+ display: inline-flex;
186
+ align-items: center;
187
+ gap: 6px;
188
+ width: max-content;
189
+ max-width: 280px;
190
+ padding: 6px 10px;
191
+ overflow: visible;
192
+ font-size: 12px;
193
+ line-height: 1.4;
194
+ text-wrap: balance;
195
+ background-color: var(--color-ink);
196
+ color: var(--color-base);
197
+ border: none;
198
+ border-radius: 10px;
199
+ pointer-events: none;
200
+ }
185
201
 
186
- .tooltip-content :global(:is(.kbd, .kbd-group)) {
187
- font-size: inherit;
188
- }
202
+ .tooltip-content :global(:is(.kbd, .kbd-group)) {
203
+ font-size: inherit;
204
+ }
189
205
 
190
- .tooltip-arrow {
191
- position: absolute;
192
- width: 8px;
193
- height: 8px;
194
- background-color: inherit;
195
- border-radius: 2px;
196
- transform: rotate(45deg);
197
- }
206
+ .tooltip-arrow {
207
+ position: absolute;
208
+ width: 8px;
209
+ height: 8px;
210
+ background-color: inherit;
211
+ border-radius: 2px;
212
+ transform: rotate(45deg);
213
+ }
198
214
 
199
- .tooltip-content--top .tooltip-arrow,
200
- .tooltip-content--bottom .tooltip-arrow {
201
- left: calc(var(--tooltip-arrow) - 4px);
202
- }
215
+ .tooltip-content--top .tooltip-arrow,
216
+ .tooltip-content--bottom .tooltip-arrow {
217
+ left: calc(var(--tooltip-arrow) - 4px);
218
+ }
203
219
 
204
- .tooltip-content--left .tooltip-arrow,
205
- .tooltip-content--right .tooltip-arrow {
206
- top: calc(var(--tooltip-arrow) - 4px);
207
- }
220
+ .tooltip-content--left .tooltip-arrow,
221
+ .tooltip-content--right .tooltip-arrow {
222
+ top: calc(var(--tooltip-arrow) - 4px);
223
+ }
208
224
 
209
- .tooltip-content--top .tooltip-arrow {
210
- bottom: -3px;
211
- }
225
+ .tooltip-content--top .tooltip-arrow {
226
+ bottom: -3px;
227
+ }
212
228
 
213
- .tooltip-content--bottom .tooltip-arrow {
214
- top: -3px;
215
- }
229
+ .tooltip-content--bottom .tooltip-arrow {
230
+ top: -3px;
231
+ }
216
232
 
217
- .tooltip-content--left .tooltip-arrow {
218
- right: -3px;
219
- }
233
+ .tooltip-content--left .tooltip-arrow {
234
+ right: -3px;
235
+ }
236
+
237
+ .tooltip-content--right .tooltip-arrow {
238
+ left: -3px;
239
+ }
240
+
241
+ @media (forced-colors: active) {
242
+ .tooltip-content {
243
+ border: 1px solid CanvasText;
244
+ background-color: Canvas;
245
+ color: CanvasText;
246
+ }
220
247
 
221
- .tooltip-content--right .tooltip-arrow {
222
- left: -3px;
248
+ .tooltip-arrow {
249
+ display: none;
250
+ }
251
+ }
223
252
  }
224
253
  </style>
@@ -9,8 +9,9 @@ export type TooltipTriggerProps = {
9
9
  [key: symbol]: Attachment<HTMLElement>;
10
10
  };
11
11
  import type { Snippet } from 'svelte';
12
+ import type { HTMLAttributes } from 'svelte/elements';
12
13
  type Side = 'top' | 'right' | 'bottom' | 'left';
13
- type Props = {
14
+ type Props = Omit<HTMLAttributes<HTMLSpanElement>, 'children'> & {
14
15
  /** Whether the tooltip is shown. Bindable. */
15
16
  open?: boolean;
16
17
  /** Preferred side; flips to the opposite one when there is not enough room. */
@@ -21,7 +22,8 @@ type Props = {
21
22
  trigger: Snippet<[TooltipTriggerProps]>;
22
23
  /** Tooltip content; may contain `Kbd` / `KbdGroup`. */
23
24
  children: Snippet;
25
+ ref?: HTMLSpanElement | null;
24
26
  };
25
- declare const Tooltip: import("svelte").Component<Props, {}, "open">;
27
+ declare const Tooltip: import("svelte").Component<Props, {}, "ref" | "open">;
26
28
  type Tooltip = ReturnType<typeof Tooltip>;
27
29
  export default Tooltip;
package/dist/icon.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ import type { Component } from 'svelte';
2
+ /**
3
+ * A Svelte component that renders an icon, from any icon library
4
+ * (`@lucide/svelte`, `phosphor-svelte`, an inline SVG component, …).
5
+ *
6
+ * Components only pass `class` and `aria-hidden`; the size comes from CSS, so
7
+ * the icon should fill its box (`width`/`height: 1em` or a fixed size is fine).
8
+ */
9
+ export type IconComponent = Component<{
10
+ class?: string;
11
+ 'aria-hidden'?: boolean | 'true' | 'false';
12
+ }>;
package/dist/icon.js ADDED
@@ -0,0 +1 @@
1
+ export {};
package/dist/index.d.ts CHANGED
@@ -1,5 +1,9 @@
1
+ export type { IconComponent } from './icon.js';
2
+ export { default as Accordion } from './components/accordion/Accordion.svelte';
3
+ export { default as AccordionItem } from './components/accordion/AccordionItem.svelte';
1
4
  export { default as AlertDialog } from './components/alert-dialog/AlertDialog.svelte';
2
5
  export { default as Avatar } from './components/avatar/Avatar.svelte';
6
+ export { default as AvatarGroup } from './components/avatar-group/AvatarGroup.svelte';
3
7
  export { default as Badge } from './components/badge/Badge.svelte';
4
8
  export { default as Breadcrumb } from './components/breadcrumb/Breadcrumb.svelte';
5
9
  export { default as BreadcrumbEllipsis } from './components/breadcrumb/BreadcrumbEllipsis.svelte';
@@ -18,7 +22,13 @@ export { default as Checkbox } from './components/checkbox/Checkbox.svelte';
18
22
  export { default as ColorPicker } from './components/color-picker/ColorPicker.svelte';
19
23
  export { default as ContextMenu } from './components/context-menu/ContextMenu.svelte';
20
24
  export { default as ContextMenuItem } from './components/context-menu/ContextMenuItem.svelte';
25
+ export { default as ContextMenuSeparator } from './components/context-menu/ContextMenuSeparator.svelte';
26
+ export { default as ContextMenuLabel } from './components/context-menu/ContextMenuLabel.svelte';
27
+ export { default as ContextMenuInfo } from './components/context-menu/ContextMenuInfo.svelte';
21
28
  export { default as Dialog } from './components/dialog/Dialog.svelte';
29
+ export { default as Drawer } from './components/drawer/Drawer.svelte';
30
+ export { default as EmptyState } from './components/empty-state/EmptyState.svelte';
31
+ export { default as Entry } from './components/entry/Entry.svelte';
22
32
  export { default as Field } from './components/field/Field.svelte';
23
33
  export { default as FieldContent } from './components/field/FieldContent.svelte';
24
34
  export { default as FieldDescription } from './components/field/FieldDescription.svelte';
@@ -27,6 +37,9 @@ export { default as FieldGroup } from './components/field/FieldGroup.svelte';
27
37
  export { default as FieldLegend } from './components/field/FieldLegend.svelte';
28
38
  export { default as FieldSeparator } from './components/field/FieldSeparator.svelte';
29
39
  export { default as FieldSet } from './components/field/FieldSet.svelte';
40
+ export { default as Footer } from './components/footer/Footer.svelte';
41
+ export { default as FooterColumn } from './components/footer/FooterColumn.svelte';
42
+ export { default as Image } from './components/image/Image.svelte';
30
43
  export { default as Input } from './components/input/Input.svelte';
31
44
  export { default as Kbd } from './components/kbd/Kbd.svelte';
32
45
  export { default as KbdGroup } from './components/kbd/KbdGroup.svelte';
@@ -34,13 +47,19 @@ export { default as InputGroup } from './components/input-group/InputGroup.svelt
34
47
  export { default as InputGroupAddon } from './components/input-group/InputGroupAddon.svelte';
35
48
  export { default as Label } from './components/label/Label.svelte';
36
49
  export { default as Link } from './components/link/Link.svelte';
50
+ export { default as MeshGradient } from './components/mesh-gradient/MeshGradient.svelte';
37
51
  export { default as Navbar } from './components/navbar/Navbar.svelte';
38
52
  export { default as NavigationMenu } from './components/navigation-menu/NavigationMenu.svelte';
39
53
  export { default as NavigationMenuItem } from './components/navigation-menu/NavigationMenuItem.svelte';
40
54
  export { default as NavigationMenuLink } from './components/navigation-menu/NavigationMenuLink.svelte';
55
+ export { default as NumberStepper } from './components/number-stepper/NumberStepper.svelte';
41
56
  export { default as Popover } from './components/popover/Popover.svelte';
57
+ export { default as PreviewCard } from './components/preview-card/PreviewCard.svelte';
58
+ export { default as Progress } from './components/progress/Progress.svelte';
42
59
  export { default as RadioGroup } from './components/radio-group/RadioGroup.svelte';
43
60
  export { default as RadioGroupItem } from './components/radio-group/RadioGroupItem.svelte';
61
+ export { default as Section } from './components/section/Section.svelte';
62
+ export { default as Select, type SelectOption } from './components/select/Select.svelte';
44
63
  export { default as Separator } from './components/separator/Separator.svelte';
45
64
  export { default as Sidebar } from './components/sidebar/Sidebar.svelte';
46
65
  export { default as SidebarContent } from './components/sidebar/SidebarContent.svelte';
@@ -58,6 +77,7 @@ export { default as Skeleton } from './components/skeleton/Skeleton.svelte';
58
77
  export { default as Spinner } from './components/spinner/Spinner.svelte';
59
78
  export { default as Switch } from './components/switch/Switch.svelte';
60
79
  export { default as Table, type TableColumn, type TableSort, type TableSortValue } from './components/table/Table.svelte';
80
+ export { default as Tabs, type TabsOption } from './components/tabs/Tabs.svelte';
61
81
  export { default as Textarea } from './components/textarea/Textarea.svelte';
62
82
  export { default as Toaster } from './components/toaster/Toaster.svelte';
63
83
  export { toast, type ToastOptions, type ToastAction } from './components/toaster/toast.svelte.js';
@@ -69,5 +89,6 @@ export type { PopoverTriggerProps } from './components/popover/Popover.svelte';
69
89
  export type { TooltipTriggerProps } from './components/tooltip/Tooltip.svelte';
70
90
  export type { InputType } from './components/input/Input.svelte';
71
91
  export type { DialogTriggerProps } from './components/dialog/Dialog.svelte';
92
+ export type { DrawerTriggerProps } from './components/drawer/Drawer.svelte';
72
93
  export type { ContextMenuTriggerProps } from './components/context-menu/context.js';
73
94
  export { getSidebarContext, type SidebarContext } from './components/sidebar/context.js';
package/dist/index.js CHANGED
@@ -1,5 +1,8 @@
1
+ export { default as Accordion } from './components/accordion/Accordion.svelte';
2
+ export { default as AccordionItem } from './components/accordion/AccordionItem.svelte';
1
3
  export { default as AlertDialog } from './components/alert-dialog/AlertDialog.svelte';
2
4
  export { default as Avatar } from './components/avatar/Avatar.svelte';
5
+ export { default as AvatarGroup } from './components/avatar-group/AvatarGroup.svelte';
3
6
  export { default as Badge } from './components/badge/Badge.svelte';
4
7
  export { default as Breadcrumb } from './components/breadcrumb/Breadcrumb.svelte';
5
8
  export { default as BreadcrumbEllipsis } from './components/breadcrumb/BreadcrumbEllipsis.svelte';
@@ -18,7 +21,13 @@ export { default as Checkbox } from './components/checkbox/Checkbox.svelte';
18
21
  export { default as ColorPicker } from './components/color-picker/ColorPicker.svelte';
19
22
  export { default as ContextMenu } from './components/context-menu/ContextMenu.svelte';
20
23
  export { default as ContextMenuItem } from './components/context-menu/ContextMenuItem.svelte';
24
+ export { default as ContextMenuSeparator } from './components/context-menu/ContextMenuSeparator.svelte';
25
+ export { default as ContextMenuLabel } from './components/context-menu/ContextMenuLabel.svelte';
26
+ export { default as ContextMenuInfo } from './components/context-menu/ContextMenuInfo.svelte';
21
27
  export { default as Dialog } from './components/dialog/Dialog.svelte';
28
+ export { default as Drawer } from './components/drawer/Drawer.svelte';
29
+ export { default as EmptyState } from './components/empty-state/EmptyState.svelte';
30
+ export { default as Entry } from './components/entry/Entry.svelte';
22
31
  export { default as Field } from './components/field/Field.svelte';
23
32
  export { default as FieldContent } from './components/field/FieldContent.svelte';
24
33
  export { default as FieldDescription } from './components/field/FieldDescription.svelte';
@@ -27,6 +36,9 @@ export { default as FieldGroup } from './components/field/FieldGroup.svelte';
27
36
  export { default as FieldLegend } from './components/field/FieldLegend.svelte';
28
37
  export { default as FieldSeparator } from './components/field/FieldSeparator.svelte';
29
38
  export { default as FieldSet } from './components/field/FieldSet.svelte';
39
+ export { default as Footer } from './components/footer/Footer.svelte';
40
+ export { default as FooterColumn } from './components/footer/FooterColumn.svelte';
41
+ export { default as Image } from './components/image/Image.svelte';
30
42
  export { default as Input } from './components/input/Input.svelte';
31
43
  export { default as Kbd } from './components/kbd/Kbd.svelte';
32
44
  export { default as KbdGroup } from './components/kbd/KbdGroup.svelte';
@@ -34,13 +46,19 @@ export { default as InputGroup } from './components/input-group/InputGroup.svelt
34
46
  export { default as InputGroupAddon } from './components/input-group/InputGroupAddon.svelte';
35
47
  export { default as Label } from './components/label/Label.svelte';
36
48
  export { default as Link } from './components/link/Link.svelte';
49
+ export { default as MeshGradient } from './components/mesh-gradient/MeshGradient.svelte';
37
50
  export { default as Navbar } from './components/navbar/Navbar.svelte';
38
51
  export { default as NavigationMenu } from './components/navigation-menu/NavigationMenu.svelte';
39
52
  export { default as NavigationMenuItem } from './components/navigation-menu/NavigationMenuItem.svelte';
40
53
  export { default as NavigationMenuLink } from './components/navigation-menu/NavigationMenuLink.svelte';
54
+ export { default as NumberStepper } from './components/number-stepper/NumberStepper.svelte';
41
55
  export { default as Popover } from './components/popover/Popover.svelte';
56
+ export { default as PreviewCard } from './components/preview-card/PreviewCard.svelte';
57
+ export { default as Progress } from './components/progress/Progress.svelte';
42
58
  export { default as RadioGroup } from './components/radio-group/RadioGroup.svelte';
43
59
  export { default as RadioGroupItem } from './components/radio-group/RadioGroupItem.svelte';
60
+ export { default as Section } from './components/section/Section.svelte';
61
+ export { default as Select } from './components/select/Select.svelte';
44
62
  export { default as Separator } from './components/separator/Separator.svelte';
45
63
  export { default as Sidebar } from './components/sidebar/Sidebar.svelte';
46
64
  export { default as SidebarContent } from './components/sidebar/SidebarContent.svelte';
@@ -57,6 +75,7 @@ export { default as Skeleton } from './components/skeleton/Skeleton.svelte';
57
75
  export { default as Spinner } from './components/spinner/Spinner.svelte';
58
76
  export { default as Switch } from './components/switch/Switch.svelte';
59
77
  export { default as Table } from './components/table/Table.svelte';
78
+ export { default as Tabs } from './components/tabs/Tabs.svelte';
60
79
  export { default as Textarea } from './components/textarea/Textarea.svelte';
61
80
  export { default as Toaster } from './components/toaster/Toaster.svelte';
62
81
  export { toast } from './components/toaster/toast.svelte.js';
@@ -0,0 +1,14 @@
1
+ <script lang="ts">
2
+ import type { SVGAttributes } from 'svelte/elements';
3
+ import Icon from './Icon.svelte';
4
+
5
+ let props: SVGAttributes<SVGSVGElement> = $props();
6
+ </script>
7
+
8
+ <Icon
9
+ {...props}
10
+ nodes={[
11
+ ['path', { d: 'M12 5v14' }],
12
+ ['path', { d: 'm19 12-7 7-7-7' }]
13
+ ]}
14
+ />
@@ -0,0 +1,4 @@
1
+ import type { SVGAttributes } from 'svelte/elements';
2
+ declare const ArrowDown: import("svelte").Component<SVGAttributes<SVGSVGElement>, {}, "">;
3
+ type ArrowDown = ReturnType<typeof ArrowDown>;
4
+ export default ArrowDown;
@@ -0,0 +1,14 @@
1
+ <script lang="ts">
2
+ import type { SVGAttributes } from 'svelte/elements';
3
+ import Icon from './Icon.svelte';
4
+
5
+ let props: SVGAttributes<SVGSVGElement> = $props();
6
+ </script>
7
+
8
+ <Icon
9
+ {...props}
10
+ nodes={[
11
+ ['path', { d: 'm5 12 7-7 7 7' }],
12
+ ['path', { d: 'M12 19V5' }]
13
+ ]}
14
+ />
@@ -0,0 +1,4 @@
1
+ import type { SVGAttributes } from 'svelte/elements';
2
+ declare const ArrowUp: import("svelte").Component<SVGAttributes<SVGSVGElement>, {}, "">;
3
+ type ArrowUp = ReturnType<typeof ArrowUp>;
4
+ export default ArrowUp;
@@ -0,0 +1,16 @@
1
+ <script lang="ts">
2
+ import type { SVGAttributes } from 'svelte/elements';
3
+ import Icon from './Icon.svelte';
4
+
5
+ let props: SVGAttributes<SVGSVGElement> = $props();
6
+ </script>
7
+
8
+ <Icon
9
+ {...props}
10
+ nodes={[
11
+ ['path', { d: 'M8 2v3' }],
12
+ ['path', { d: 'M16 2v3' }],
13
+ ['rect', { x: '3', y: '3', width: '18', height: '18', rx: '2' }],
14
+ ['path', { d: 'M3 9h18' }]
15
+ ]}
16
+ />
@@ -0,0 +1,4 @@
1
+ import type { SVGAttributes } from 'svelte/elements';
2
+ declare const Calendar: import("svelte").Component<SVGAttributes<SVGSVGElement>, {}, "">;
3
+ type Calendar = ReturnType<typeof Calendar>;
4
+ export default Calendar;
@@ -0,0 +1,8 @@
1
+ <script lang="ts">
2
+ import type { SVGAttributes } from 'svelte/elements';
3
+ import Icon from './Icon.svelte';
4
+
5
+ let props: SVGAttributes<SVGSVGElement> = $props();
6
+ </script>
7
+
8
+ <Icon {...props} nodes={[['path', { d: 'M20 6 9 17l-5-5' }]]} />
@@ -0,0 +1,4 @@
1
+ import type { SVGAttributes } from 'svelte/elements';
2
+ declare const Check: import("svelte").Component<SVGAttributes<SVGSVGElement>, {}, "">;
3
+ type Check = ReturnType<typeof Check>;
4
+ export default Check;
@@ -0,0 +1,8 @@
1
+ <script lang="ts">
2
+ import type { SVGAttributes } from 'svelte/elements';
3
+ import Icon from './Icon.svelte';
4
+
5
+ let props: SVGAttributes<SVGSVGElement> = $props();
6
+ </script>
7
+
8
+ <Icon {...props} nodes={[['path', { d: 'm6 9 6 6 6-6' }]]} />
@@ -0,0 +1,4 @@
1
+ import type { SVGAttributes } from 'svelte/elements';
2
+ declare const ChevronDown: import("svelte").Component<SVGAttributes<SVGSVGElement>, {}, "">;
3
+ type ChevronDown = ReturnType<typeof ChevronDown>;
4
+ export default ChevronDown;
@@ -0,0 +1,8 @@
1
+ <script lang="ts">
2
+ import type { SVGAttributes } from 'svelte/elements';
3
+ import Icon from './Icon.svelte';
4
+
5
+ let props: SVGAttributes<SVGSVGElement> = $props();
6
+ </script>
7
+
8
+ <Icon {...props} nodes={[['path', { d: 'm15 18-6-6 6-6' }]]} />
@@ -0,0 +1,4 @@
1
+ import type { SVGAttributes } from 'svelte/elements';
2
+ declare const ChevronLeft: import("svelte").Component<SVGAttributes<SVGSVGElement>, {}, "">;
3
+ type ChevronLeft = ReturnType<typeof ChevronLeft>;
4
+ export default ChevronLeft;
@@ -0,0 +1,8 @@
1
+ <script lang="ts">
2
+ import type { SVGAttributes } from 'svelte/elements';
3
+ import Icon from './Icon.svelte';
4
+
5
+ let props: SVGAttributes<SVGSVGElement> = $props();
6
+ </script>
7
+
8
+ <Icon {...props} nodes={[['path', { d: 'm9 18 6-6-6-6' }]]} />
@@ -0,0 +1,4 @@
1
+ import type { SVGAttributes } from 'svelte/elements';
2
+ declare const ChevronRight: import("svelte").Component<SVGAttributes<SVGSVGElement>, {}, "">;
3
+ type ChevronRight = ReturnType<typeof ChevronRight>;
4
+ export default ChevronRight;
@@ -0,0 +1,8 @@
1
+ <script lang="ts">
2
+ import type { SVGAttributes } from 'svelte/elements';
3
+ import Icon from './Icon.svelte';
4
+
5
+ let props: SVGAttributes<SVGSVGElement> = $props();
6
+ </script>
7
+
8
+ <Icon {...props} nodes={[['path', { d: 'm18 15-6-6-6 6' }]]} />
@@ -0,0 +1,4 @@
1
+ import type { SVGAttributes } from 'svelte/elements';
2
+ declare const ChevronUp: import("svelte").Component<SVGAttributes<SVGSVGElement>, {}, "">;
3
+ type ChevronUp = ReturnType<typeof ChevronUp>;
4
+ export default ChevronUp;
@@ -0,0 +1,14 @@
1
+ <script lang="ts">
2
+ import type { SVGAttributes } from 'svelte/elements';
3
+ import Icon from './Icon.svelte';
4
+
5
+ let props: SVGAttributes<SVGSVGElement> = $props();
6
+ </script>
7
+
8
+ <Icon
9
+ {...props}
10
+ nodes={[
11
+ ['path', { d: 'm7 15 5 5 5-5' }],
12
+ ['path', { d: 'm7 9 5-5 5 5' }]
13
+ ]}
14
+ />
@@ -0,0 +1,4 @@
1
+ import type { SVGAttributes } from 'svelte/elements';
2
+ declare const ChevronsUpDown: import("svelte").Component<SVGAttributes<SVGSVGElement>, {}, "">;
3
+ type ChevronsUpDown = ReturnType<typeof ChevronsUpDown>;
4
+ export default ChevronsUpDown;
@@ -0,0 +1,14 @@
1
+ <script lang="ts">
2
+ import type { SVGAttributes } from 'svelte/elements';
3
+ import Icon from './Icon.svelte';
4
+
5
+ let props: SVGAttributes<SVGSVGElement> = $props();
6
+ </script>
7
+
8
+ <Icon
9
+ {...props}
10
+ nodes={[
11
+ ['circle', { cx: '12', cy: '12', r: '10' }],
12
+ ['path', { d: 'M12 6v6l4 2' }]
13
+ ]}
14
+ />
@@ -0,0 +1,4 @@
1
+ import type { SVGAttributes } from 'svelte/elements';
2
+ declare const Clock: import("svelte").Component<SVGAttributes<SVGSVGElement>, {}, "">;
3
+ type Clock = ReturnType<typeof Clock>;
4
+ export default Clock;