@noahbaumgartner/svelte-ui 0.0.5 → 0.0.7

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 (214) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +20 -5
  3. package/dist/components/accordion/Accordion.svelte +16 -6
  4. package/dist/components/accordion/Accordion.svelte.d.ts +3 -1
  5. package/dist/components/accordion/AccordionItem.svelte +106 -67
  6. package/dist/components/accordion/AccordionItem.svelte.d.ts +5 -1
  7. package/dist/components/alert-dialog/AlertDialog.svelte +108 -76
  8. package/dist/components/alert-dialog/AlertDialog.svelte.d.ts +5 -2
  9. package/dist/components/avatar/Avatar.svelte +71 -49
  10. package/dist/components/avatar/Avatar.svelte.d.ts +5 -2
  11. package/dist/components/avatar-group/AvatarGroup.svelte +72 -45
  12. package/dist/components/avatar-group/AvatarGroup.svelte.d.ts +5 -1
  13. package/dist/components/badge/Badge.svelte +50 -28
  14. package/dist/components/badge/Badge.svelte.d.ts +6 -4
  15. package/dist/components/breadcrumb/Breadcrumb.svelte +21 -17
  16. package/dist/components/breadcrumb/Breadcrumb.svelte.d.ts +3 -1
  17. package/dist/components/breadcrumb/BreadcrumbEllipsis.svelte +17 -6
  18. package/dist/components/breadcrumb/BreadcrumbEllipsis.svelte.d.ts +5 -2
  19. package/dist/components/breadcrumb/BreadcrumbItem.svelte +75 -36
  20. package/dist/components/breadcrumb/BreadcrumbItem.svelte.d.ts +8 -5
  21. package/dist/components/breadcrumb/BreadcrumbSeparator.svelte +32 -9
  22. package/dist/components/breadcrumb/BreadcrumbSeparator.svelte.d.ts +10 -17
  23. package/dist/components/button/Button.svelte +206 -168
  24. package/dist/components/button/Button.svelte.d.ts +9 -5
  25. package/dist/components/button-group/ButtonGroup.svelte +52 -55
  26. package/dist/components/button-group/ButtonGroup.svelte.d.ts +3 -1
  27. package/dist/components/calendar/Calendar.svelte +232 -144
  28. package/dist/components/calendar/Calendar.svelte.d.ts +19 -2
  29. package/dist/components/calendar/dates.d.ts +4 -1
  30. package/dist/components/calendar/dates.js +8 -2
  31. package/dist/components/card/Card.svelte +48 -32
  32. package/dist/components/card/Card.svelte.d.ts +3 -1
  33. package/dist/components/card/CardAction.svelte +11 -7
  34. package/dist/components/card/CardAction.svelte.d.ts +3 -1
  35. package/dist/components/card/CardContent.svelte +8 -4
  36. package/dist/components/card/CardContent.svelte.d.ts +3 -1
  37. package/dist/components/card/CardDescription.svelte +11 -7
  38. package/dist/components/card/CardDescription.svelte.d.ts +3 -1
  39. package/dist/components/card/CardFooter.svelte +15 -11
  40. package/dist/components/card/CardFooter.svelte.d.ts +3 -1
  41. package/dist/components/card/CardHeader.svelte +15 -11
  42. package/dist/components/card/CardHeader.svelte.d.ts +3 -1
  43. package/dist/components/card/CardTitle.svelte +11 -7
  44. package/dist/components/card/CardTitle.svelte.d.ts +3 -1
  45. package/dist/components/checkbox/Checkbox.svelte +152 -61
  46. package/dist/components/checkbox/Checkbox.svelte.d.ts +5 -2
  47. package/dist/components/color-picker/ColorPicker.svelte +131 -78
  48. package/dist/components/color-picker/ColorPicker.svelte.d.ts +10 -1
  49. package/dist/components/context-menu/ContextMenu.svelte +78 -61
  50. package/dist/components/context-menu/ContextMenu.svelte.d.ts +5 -2
  51. package/dist/components/context-menu/ContextMenuInfo.svelte +91 -0
  52. package/dist/components/context-menu/ContextMenuInfo.svelte.d.ts +19 -0
  53. package/dist/components/context-menu/ContextMenuItem.svelte +102 -57
  54. package/dist/components/context-menu/ContextMenuItem.svelte.d.ts +10 -5
  55. package/dist/components/context-menu/ContextMenuLabel.svelte +28 -0
  56. package/dist/components/context-menu/ContextMenuLabel.svelte.d.ts +10 -0
  57. package/dist/components/context-menu/ContextMenuSeparator.svelte +29 -0
  58. package/dist/components/context-menu/ContextMenuSeparator.svelte.d.ts +8 -0
  59. package/dist/components/dialog/Dialog.svelte +149 -108
  60. package/dist/components/dialog/Dialog.svelte.d.ts +7 -2
  61. package/dist/components/drawer/Drawer.svelte +240 -189
  62. package/dist/components/drawer/Drawer.svelte.d.ts +7 -2
  63. package/dist/components/empty-state/EmptyState.svelte +67 -47
  64. package/dist/components/empty-state/EmptyState.svelte.d.ts +7 -4
  65. package/dist/components/entry/Entry.svelte +53 -42
  66. package/dist/components/entry/Entry.svelte.d.ts +2 -1
  67. package/dist/components/field/Field.svelte +66 -45
  68. package/dist/components/field/Field.svelte.d.ts +2 -1
  69. package/dist/components/field/FieldContent.svelte +11 -8
  70. package/dist/components/field/FieldContent.svelte.d.ts +2 -1
  71. package/dist/components/field/FieldDescription.svelte +18 -15
  72. package/dist/components/field/FieldDescription.svelte.d.ts +2 -1
  73. package/dist/components/field/FieldError.svelte +22 -13
  74. package/dist/components/field/FieldError.svelte.d.ts +2 -1
  75. package/dist/components/field/FieldGroup.svelte +15 -12
  76. package/dist/components/field/FieldGroup.svelte.d.ts +2 -1
  77. package/dist/components/field/FieldLegend.svelte +23 -14
  78. package/dist/components/field/FieldLegend.svelte.d.ts +2 -1
  79. package/dist/components/field/FieldSeparator.svelte +12 -9
  80. package/dist/components/field/FieldSeparator.svelte.d.ts +2 -1
  81. package/dist/components/field/FieldSet.svelte +18 -15
  82. package/dist/components/field/FieldSet.svelte.d.ts +2 -1
  83. package/dist/components/footer/Footer.svelte +63 -47
  84. package/dist/components/footer/Footer.svelte.d.ts +2 -1
  85. package/dist/components/footer/FooterColumn.svelte +17 -14
  86. package/dist/components/footer/FooterColumn.svelte.d.ts +2 -1
  87. package/dist/components/image/Image.svelte +61 -0
  88. package/dist/components/image/Image.svelte.d.ts +18 -0
  89. package/dist/components/input/Input.svelte +307 -208
  90. package/dist/components/input/Input.svelte.d.ts +12 -1
  91. package/dist/components/input-group/InputGroup.svelte +101 -61
  92. package/dist/components/input-group/InputGroup.svelte.d.ts +2 -1
  93. package/dist/components/input-group/InputGroupAddon.svelte +58 -49
  94. package/dist/components/kbd/Kbd.svelte +39 -30
  95. package/dist/components/kbd/Kbd.svelte.d.ts +2 -1
  96. package/dist/components/kbd/KbdGroup.svelte +15 -12
  97. package/dist/components/kbd/KbdGroup.svelte.d.ts +2 -1
  98. package/dist/components/label/Label.svelte +47 -28
  99. package/dist/components/label/Label.svelte.d.ts +2 -1
  100. package/dist/components/link/Link.svelte +71 -17
  101. package/dist/components/link/Link.svelte.d.ts +2 -1
  102. package/dist/components/mesh-gradient/MeshGradient.svelte +33 -22
  103. package/dist/components/mesh-gradient/MeshGradient.svelte.d.ts +2 -3
  104. package/dist/components/navbar/Navbar.svelte +149 -99
  105. package/dist/components/navbar/Navbar.svelte.d.ts +4 -2
  106. package/dist/components/navigation-menu/NavigationMenu.svelte +37 -20
  107. package/dist/components/navigation-menu/NavigationMenu.svelte.d.ts +4 -2
  108. package/dist/components/navigation-menu/NavigationMenuItem.svelte +131 -89
  109. package/dist/components/navigation-menu/NavigationMenuItem.svelte.d.ts +4 -2
  110. package/dist/components/navigation-menu/NavigationMenuLink.svelte +90 -51
  111. package/dist/components/navigation-menu/NavigationMenuLink.svelte.d.ts +7 -5
  112. package/dist/components/number-stepper/NumberStepper.svelte +39 -20
  113. package/dist/components/number-stepper/NumberStepper.svelte.d.ts +6 -1
  114. package/dist/components/popover/Popover.svelte +85 -65
  115. package/dist/components/popover/Popover.svelte.d.ts +5 -2
  116. package/dist/components/preview-card/PreviewCard.svelte +116 -98
  117. package/dist/components/preview-card/PreviewCard.svelte.d.ts +9 -6
  118. package/dist/components/progress/Progress.svelte +61 -38
  119. package/dist/components/progress/Progress.svelte.d.ts +2 -1
  120. package/dist/components/radio-group/RadioGroup.svelte +24 -19
  121. package/dist/components/radio-group/RadioGroup.svelte.d.ts +2 -1
  122. package/dist/components/radio-group/RadioGroupItem.svelte +101 -54
  123. package/dist/components/radio-group/RadioGroupItem.svelte.d.ts +2 -1
  124. package/dist/components/section/Section.svelte +114 -0
  125. package/dist/components/section/Section.svelte.d.ts +22 -0
  126. package/dist/components/select/Select.svelte +216 -133
  127. package/dist/components/select/Select.svelte.d.ts +11 -2
  128. package/dist/components/separator/Separator.svelte +21 -10
  129. package/dist/components/separator/Separator.svelte.d.ts +2 -1
  130. package/dist/components/sidebar/Sidebar.svelte +142 -108
  131. package/dist/components/sidebar/Sidebar.svelte.d.ts +6 -1
  132. package/dist/components/sidebar/SidebarContent.svelte +15 -12
  133. package/dist/components/sidebar/SidebarContent.svelte.d.ts +2 -1
  134. package/dist/components/sidebar/SidebarFooter.svelte +10 -7
  135. package/dist/components/sidebar/SidebarFooter.svelte.d.ts +2 -1
  136. package/dist/components/sidebar/SidebarGroup.svelte +35 -25
  137. package/dist/components/sidebar/SidebarGroup.svelte.d.ts +2 -1
  138. package/dist/components/sidebar/SidebarHeader.svelte +21 -16
  139. package/dist/components/sidebar/SidebarHeader.svelte.d.ts +6 -1
  140. package/dist/components/sidebar/SidebarInset.svelte +11 -8
  141. package/dist/components/sidebar/SidebarInset.svelte.d.ts +2 -1
  142. package/dist/components/sidebar/SidebarMenu.svelte +13 -10
  143. package/dist/components/sidebar/SidebarMenu.svelte.d.ts +2 -1
  144. package/dist/components/sidebar/SidebarMenuItem.svelte +195 -114
  145. package/dist/components/sidebar/SidebarMenuItem.svelte.d.ts +11 -5
  146. package/dist/components/sidebar/SidebarProvider.svelte +18 -9
  147. package/dist/components/sidebar/SidebarProvider.svelte.d.ts +2 -1
  148. package/dist/components/sidebar/SidebarSeparator.svelte +6 -1
  149. package/dist/components/sidebar/SidebarSeparator.svelte.d.ts +6 -17
  150. package/dist/components/sidebar/SidebarTrigger.svelte +17 -5
  151. package/dist/components/sidebar/SidebarTrigger.svelte.d.ts +4 -2
  152. package/dist/components/skeleton/Skeleton.svelte +26 -16
  153. package/dist/components/skeleton/Skeleton.svelte.d.ts +4 -2
  154. package/dist/components/spinner/Spinner.svelte +71 -46
  155. package/dist/components/spinner/Spinner.svelte.d.ts +2 -1
  156. package/dist/components/switch/Switch.svelte +126 -65
  157. package/dist/components/switch/Switch.svelte.d.ts +4 -2
  158. package/dist/components/table/Table.svelte +135 -76
  159. package/dist/components/table/Table.svelte.d.ts +12 -2
  160. package/dist/components/tabs/Tabs.svelte +173 -116
  161. package/dist/components/tabs/Tabs.svelte.d.ts +10 -8
  162. package/dist/components/textarea/Textarea.svelte +76 -42
  163. package/dist/components/textarea/Textarea.svelte.d.ts +4 -1
  164. package/dist/components/time-picker/TimePicker.svelte +214 -85
  165. package/dist/components/time-picker/TimePicker.svelte.d.ts +18 -1
  166. package/dist/components/toaster/Toaster.svelte +132 -70
  167. package/dist/components/toaster/Toaster.svelte.d.ts +18 -2
  168. package/dist/components/toaster/toast.svelte.d.ts +3 -3
  169. package/dist/components/toggle/Toggle.svelte +25 -4
  170. package/dist/components/toggle/Toggle.svelte.d.ts +1 -1
  171. package/dist/components/tooltip/Tooltip.svelte +87 -58
  172. package/dist/components/tooltip/Tooltip.svelte.d.ts +4 -2
  173. package/dist/icon.d.ts +12 -0
  174. package/dist/icon.js +1 -0
  175. package/dist/index.d.ts +6 -0
  176. package/dist/index.js +5 -0
  177. package/dist/internal/icons/ArrowDown.svelte +14 -0
  178. package/dist/internal/icons/ArrowDown.svelte.d.ts +4 -0
  179. package/dist/internal/icons/ArrowUp.svelte +14 -0
  180. package/dist/internal/icons/ArrowUp.svelte.d.ts +4 -0
  181. package/dist/internal/icons/Calendar.svelte +16 -0
  182. package/dist/internal/icons/Calendar.svelte.d.ts +4 -0
  183. package/dist/internal/icons/Check.svelte +8 -0
  184. package/dist/internal/icons/Check.svelte.d.ts +4 -0
  185. package/dist/internal/icons/ChevronDown.svelte +8 -0
  186. package/dist/internal/icons/ChevronDown.svelte.d.ts +4 -0
  187. package/dist/internal/icons/ChevronLeft.svelte +8 -0
  188. package/dist/internal/icons/ChevronLeft.svelte.d.ts +4 -0
  189. package/dist/internal/icons/ChevronRight.svelte +8 -0
  190. package/dist/internal/icons/ChevronRight.svelte.d.ts +4 -0
  191. package/dist/internal/icons/ChevronUp.svelte +8 -0
  192. package/dist/internal/icons/ChevronUp.svelte.d.ts +4 -0
  193. package/dist/internal/icons/ChevronsUpDown.svelte +14 -0
  194. package/dist/internal/icons/ChevronsUpDown.svelte.d.ts +4 -0
  195. package/dist/internal/icons/Clock.svelte +14 -0
  196. package/dist/internal/icons/Clock.svelte.d.ts +4 -0
  197. package/dist/internal/icons/Ellipsis.svelte +15 -0
  198. package/dist/internal/icons/Ellipsis.svelte.d.ts +4 -0
  199. package/dist/internal/icons/Icon.svelte +33 -0
  200. package/dist/internal/icons/Icon.svelte.d.ts +8 -0
  201. package/dist/internal/icons/Minus.svelte +8 -0
  202. package/dist/internal/icons/Minus.svelte.d.ts +4 -0
  203. package/dist/internal/icons/PanelLeft.svelte +14 -0
  204. package/dist/internal/icons/PanelLeft.svelte.d.ts +4 -0
  205. package/dist/internal/icons/Plus.svelte +14 -0
  206. package/dist/internal/icons/Plus.svelte.d.ts +4 -0
  207. package/dist/internal/icons/User.svelte +14 -0
  208. package/dist/internal/icons/User.svelte.d.ts +4 -0
  209. package/dist/internal/icons/X.svelte +14 -0
  210. package/dist/internal/icons/X.svelte.d.ts +4 -0
  211. package/dist/styles/tokens.css +39 -41
  212. package/package.json +5 -10
  213. package/dist/icons.d.ts +0 -2
  214. 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,3 +1,4 @@
1
+ export type { IconComponent } from './icon.js';
1
2
  export { default as Accordion } from './components/accordion/Accordion.svelte';
2
3
  export { default as AccordionItem } from './components/accordion/AccordionItem.svelte';
3
4
  export { default as AlertDialog } from './components/alert-dialog/AlertDialog.svelte';
@@ -21,6 +22,9 @@ export { default as Checkbox } from './components/checkbox/Checkbox.svelte';
21
22
  export { default as ColorPicker } from './components/color-picker/ColorPicker.svelte';
22
23
  export { default as ContextMenu } from './components/context-menu/ContextMenu.svelte';
23
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';
24
28
  export { default as Dialog } from './components/dialog/Dialog.svelte';
25
29
  export { default as Drawer } from './components/drawer/Drawer.svelte';
26
30
  export { default as EmptyState } from './components/empty-state/EmptyState.svelte';
@@ -35,6 +39,7 @@ export { default as FieldSeparator } from './components/field/FieldSeparator.sve
35
39
  export { default as FieldSet } from './components/field/FieldSet.svelte';
36
40
  export { default as Footer } from './components/footer/Footer.svelte';
37
41
  export { default as FooterColumn } from './components/footer/FooterColumn.svelte';
42
+ export { default as Image } from './components/image/Image.svelte';
38
43
  export { default as Input } from './components/input/Input.svelte';
39
44
  export { default as Kbd } from './components/kbd/Kbd.svelte';
40
45
  export { default as KbdGroup } from './components/kbd/KbdGroup.svelte';
@@ -53,6 +58,7 @@ export { default as PreviewCard } from './components/preview-card/PreviewCard.sv
53
58
  export { default as Progress } from './components/progress/Progress.svelte';
54
59
  export { default as RadioGroup } from './components/radio-group/RadioGroup.svelte';
55
60
  export { default as RadioGroupItem } from './components/radio-group/RadioGroupItem.svelte';
61
+ export { default as Section } from './components/section/Section.svelte';
56
62
  export { default as Select, type SelectOption } from './components/select/Select.svelte';
57
63
  export { default as Separator } from './components/separator/Separator.svelte';
58
64
  export { default as Sidebar } from './components/sidebar/Sidebar.svelte';
package/dist/index.js CHANGED
@@ -21,6 +21,9 @@ export { default as Checkbox } from './components/checkbox/Checkbox.svelte';
21
21
  export { default as ColorPicker } from './components/color-picker/ColorPicker.svelte';
22
22
  export { default as ContextMenu } from './components/context-menu/ContextMenu.svelte';
23
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';
24
27
  export { default as Dialog } from './components/dialog/Dialog.svelte';
25
28
  export { default as Drawer } from './components/drawer/Drawer.svelte';
26
29
  export { default as EmptyState } from './components/empty-state/EmptyState.svelte';
@@ -35,6 +38,7 @@ export { default as FieldSeparator } from './components/field/FieldSeparator.sve
35
38
  export { default as FieldSet } from './components/field/FieldSet.svelte';
36
39
  export { default as Footer } from './components/footer/Footer.svelte';
37
40
  export { default as FooterColumn } from './components/footer/FooterColumn.svelte';
41
+ export { default as Image } from './components/image/Image.svelte';
38
42
  export { default as Input } from './components/input/Input.svelte';
39
43
  export { default as Kbd } from './components/kbd/Kbd.svelte';
40
44
  export { default as KbdGroup } from './components/kbd/KbdGroup.svelte';
@@ -53,6 +57,7 @@ export { default as PreviewCard } from './components/preview-card/PreviewCard.sv
53
57
  export { default as Progress } from './components/progress/Progress.svelte';
54
58
  export { default as RadioGroup } from './components/radio-group/RadioGroup.svelte';
55
59
  export { default as RadioGroupItem } from './components/radio-group/RadioGroupItem.svelte';
60
+ export { default as Section } from './components/section/Section.svelte';
56
61
  export { default as Select } from './components/select/Select.svelte';
57
62
  export { default as Separator } from './components/separator/Separator.svelte';
58
63
  export { default as Sidebar } from './components/sidebar/Sidebar.svelte';
@@ -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;
@@ -0,0 +1,15 @@
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: '1' }],
12
+ ['circle', { cx: '19', cy: '12', r: '1' }],
13
+ ['circle', { cx: '5', cy: '12', r: '1' }]
14
+ ]}
15
+ />
@@ -0,0 +1,4 @@
1
+ import type { SVGAttributes } from 'svelte/elements';
2
+ declare const Ellipsis: import("svelte").Component<SVGAttributes<SVGSVGElement>, {}, "">;
3
+ type Ellipsis = ReturnType<typeof Ellipsis>;
4
+ export default Ellipsis;
@@ -0,0 +1,33 @@
1
+ <script lang="ts">
2
+ /*
3
+ * Renders the small glyphs the components draw themselves (checkmarks,
4
+ * chevrons, …) so the library needs no icon package. The paths are taken
5
+ * from Lucide (https://lucide.dev), ISC License; portions Feather, MIT
6
+ * License, Copyright (c) 2013-2022 Cole Bemis. Icons passed in through an
7
+ * `icon` prop come from the consumer's own icon library, not from here.
8
+ */
9
+ import type { SVGAttributes } from 'svelte/elements';
10
+
11
+ type GlyphNode = [tag: string, attrs: Record<string, string | number>];
12
+
13
+ type Props = SVGAttributes<SVGSVGElement> & { nodes: GlyphNode[] };
14
+
15
+ let { nodes, ...rest }: Props = $props();
16
+ </script>
17
+
18
+ <svg
19
+ xmlns="http://www.w3.org/2000/svg"
20
+ width="24"
21
+ height="24"
22
+ viewBox="0 0 24 24"
23
+ fill="none"
24
+ stroke="currentColor"
25
+ stroke-width="2"
26
+ stroke-linecap="round"
27
+ stroke-linejoin="round"
28
+ {...rest}
29
+ >
30
+ {#each nodes as [tag, attrs], i (i)}
31
+ <svelte:element this={tag} {...attrs} />
32
+ {/each}
33
+ </svg>
@@ -0,0 +1,8 @@
1
+ import type { SVGAttributes } from 'svelte/elements';
2
+ type GlyphNode = [tag: string, attrs: Record<string, string | number>];
3
+ type Props = SVGAttributes<SVGSVGElement> & {
4
+ nodes: GlyphNode[];
5
+ };
6
+ declare const Icon: import("svelte").Component<Props, {}, "">;
7
+ type Icon = ReturnType<typeof Icon>;
8
+ export default Icon;
@@ -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: 'M5 12h14' }]]} />
@@ -0,0 +1,4 @@
1
+ import type { SVGAttributes } from 'svelte/elements';
2
+ declare const Minus: import("svelte").Component<SVGAttributes<SVGSVGElement>, {}, "">;
3
+ type Minus = ReturnType<typeof Minus>;
4
+ export default Minus;