@skeletonlabs/skeleton-svelte 1.0.0-next.9 → 1.0.0

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 (117) hide show
  1. package/README.md +1 -1
  2. package/dist/components/Accordion/Accordion.svelte +49 -52
  3. package/dist/components/Accordion/Accordion.svelte.d.ts +2 -14
  4. package/dist/components/Accordion/AccordionItem.svelte +43 -37
  5. package/dist/components/Accordion/AccordionItem.svelte.d.ts +2 -14
  6. package/dist/components/Accordion/context.js +2 -1
  7. package/dist/components/Accordion/index.d.ts +4 -0
  8. package/dist/components/Accordion/index.js +1 -1
  9. package/dist/components/Accordion/types.d.ts +7 -9
  10. package/dist/components/AppBar/AppBar.svelte +43 -40
  11. package/dist/components/AppBar/AppBar.svelte.d.ts +2 -14
  12. package/dist/components/Avatar/Avatar.svelte +56 -44
  13. package/dist/components/Avatar/Avatar.svelte.d.ts +2 -14
  14. package/dist/components/Avatar/types.d.ts +3 -3
  15. package/dist/components/Combobox/Combobox.svelte +144 -0
  16. package/dist/components/Combobox/Combobox.svelte.d.ts +18 -0
  17. package/dist/components/Combobox/types.d.ts +64 -0
  18. package/dist/components/Combobox/types.js +1 -0
  19. package/dist/components/FileUpload/FileUpload.svelte +70 -63
  20. package/dist/components/FileUpload/FileUpload.svelte.d.ts +2 -14
  21. package/dist/components/FileUpload/types.d.ts +3 -4
  22. package/dist/components/Modal/Modal.svelte +87 -0
  23. package/dist/components/Modal/Modal.svelte.d.ts +4 -0
  24. package/dist/components/Modal/types.d.ts +57 -0
  25. package/dist/components/Modal/types.js +1 -0
  26. package/dist/components/Navigation/NavBar.svelte +48 -0
  27. package/dist/components/Navigation/NavBar.svelte.d.ts +5 -0
  28. package/dist/components/Navigation/NavRail.svelte +90 -0
  29. package/dist/components/Navigation/NavRail.svelte.d.ts +5 -0
  30. package/dist/components/Navigation/NavTile.svelte +87 -0
  31. package/dist/components/Navigation/NavTile.svelte.d.ts +5 -0
  32. package/dist/components/Navigation/context.js +7 -0
  33. package/dist/components/Navigation/index.d.ts +6 -0
  34. package/dist/components/{Nav → Navigation}/index.js +1 -1
  35. package/dist/components/{Nav → Navigation}/types.d.ts +5 -3
  36. package/dist/components/Pagination/Pagination.svelte +58 -67
  37. package/dist/components/Pagination/Pagination.svelte.d.ts +2 -14
  38. package/dist/components/Pagination/types.d.ts +15 -15
  39. package/dist/components/Popover/Popover.svelte +78 -0
  40. package/dist/components/Popover/Popover.svelte.d.ts +4 -0
  41. package/dist/components/Popover/types.d.ts +42 -0
  42. package/dist/components/Popover/types.js +1 -0
  43. package/dist/components/Progress/Progress.svelte +44 -38
  44. package/dist/components/Progress/Progress.svelte.d.ts +2 -14
  45. package/dist/components/Progress/types.d.ts +1 -1
  46. package/dist/components/ProgressRing/ProgressRing.svelte +58 -46
  47. package/dist/components/ProgressRing/ProgressRing.svelte.d.ts +2 -14
  48. package/dist/components/ProgressRing/types.d.ts +3 -1
  49. package/dist/components/Rating/Rating.svelte +101 -57
  50. package/dist/components/Rating/Rating.svelte.d.ts +2 -14
  51. package/dist/components/Rating/types.d.ts +1 -5
  52. package/dist/components/Segment/Segment.svelte +59 -61
  53. package/dist/components/Segment/Segment.svelte.d.ts +3 -15
  54. package/dist/components/Segment/SegmentItem.svelte +28 -21
  55. package/dist/components/Segment/SegmentItem.svelte.d.ts +2 -14
  56. package/dist/components/Segment/context.js +3 -2
  57. package/dist/components/Segment/index.d.ts +4 -0
  58. package/dist/components/Segment/index.js +1 -1
  59. package/dist/components/Segment/types.d.ts +8 -10
  60. package/dist/components/Slider/Slider.svelte +67 -72
  61. package/dist/components/Slider/Slider.svelte.d.ts +2 -14
  62. package/dist/components/Slider/types.d.ts +5 -9
  63. package/dist/components/Switch/Switch.svelte +75 -90
  64. package/dist/components/Switch/Switch.svelte.d.ts +2 -14
  65. package/dist/components/Switch/types.d.ts +2 -8
  66. package/dist/components/Tabs/Tabs.svelte +59 -0
  67. package/dist/components/Tabs/Tabs.svelte.d.ts +5 -0
  68. package/dist/components/Tabs/TabsControl.svelte +51 -0
  69. package/dist/components/Tabs/TabsControl.svelte.d.ts +5 -0
  70. package/dist/components/Tabs/TabsPanel.svelte +23 -0
  71. package/dist/components/Tabs/TabsPanel.svelte.d.ts +5 -0
  72. package/dist/components/{Tab → Tabs}/context.js +3 -2
  73. package/dist/components/Tabs/index.d.ts +5 -0
  74. package/dist/components/{Tab → Tabs}/index.js +1 -1
  75. package/dist/components/{Tab → Tabs}/types.d.ts +1 -3
  76. package/dist/components/TagsInput/TagsInput.svelte +48 -54
  77. package/dist/components/TagsInput/TagsInput.svelte.d.ts +2 -14
  78. package/dist/components/TagsInput/types.d.ts +3 -7
  79. package/dist/components/Toast/ToastProvider.svelte +133 -0
  80. package/dist/components/Toast/ToastProvider.svelte.d.ts +4 -0
  81. package/dist/components/Toast/types.d.ts +87 -0
  82. package/dist/components/Tooltip/Tooltip.svelte +79 -0
  83. package/dist/components/Tooltip/Tooltip.svelte.d.ts +4 -0
  84. package/dist/components/Tooltip/types.d.ts +44 -0
  85. package/dist/components/Tooltip/types.js +1 -0
  86. package/dist/index.d.ts +8 -2
  87. package/dist/index.js +11 -2
  88. package/dist/internal/create-context.d.ts +6 -0
  89. package/dist/internal/create-context.js +3 -3
  90. package/dist/internal/test-utils.d.ts +3 -0
  91. package/dist/internal/test-utils.js +9 -0
  92. package/package.json +43 -54
  93. package/dist/components/Accordion/Accordion.svelte.spec.js +0 -4
  94. package/dist/components/Nav/NavBar.svelte +0 -45
  95. package/dist/components/Nav/NavBar.svelte.d.ts +0 -17
  96. package/dist/components/Nav/NavRail.svelte +0 -79
  97. package/dist/components/Nav/NavRail.svelte.d.ts +0 -17
  98. package/dist/components/Nav/NavTile.svelte +0 -76
  99. package/dist/components/Nav/NavTile.svelte.d.ts +0 -17
  100. package/dist/components/Nav/context.js +0 -7
  101. package/dist/components/Tab/Tabs.svelte +0 -65
  102. package/dist/components/Tab/Tabs.svelte.d.ts +0 -17
  103. package/dist/components/Tab/TabsControl.svelte +0 -42
  104. package/dist/components/Tab/TabsControl.svelte.d.ts +0 -17
  105. package/dist/components/Tab/TabsPanel.svelte +0 -18
  106. package/dist/components/Tab/TabsPanel.svelte.d.ts +0 -17
  107. package/dist/internal/noop.d.ts +0 -1
  108. package/dist/internal/noop.js +0 -2
  109. package/dist/internal/snippets.d.ts +0 -3
  110. package/dist/internal/snippets.js +0 -45
  111. package/dist/internal/use-id.d.ts +0 -2
  112. package/dist/internal/use-id.js +0 -5
  113. /package/dist/components/{Nav → Navigation}/context.d.ts +0 -0
  114. /package/dist/components/{Nav → Navigation}/types.js +0 -0
  115. /package/dist/components/{Tab → Tabs}/context.d.ts +0 -0
  116. /package/dist/components/{Tab → Tabs}/types.js +0 -0
  117. /package/dist/components/{Accordion/Accordion.svelte.spec.d.ts → Toast/types.js} +0 -0
package/README.md CHANGED
@@ -8,7 +8,7 @@ This project has been created using a [SvelteKit](https://kit.svelte.dev/) proje
8
8
 
9
9
  ## Exports
10
10
 
11
- Library exports are contained within `/src/lib/index.ts`
11
+ Library exports are contained within `/src/lib/migrate.ts`
12
12
 
13
13
  ## Dev
14
14
 
@@ -1,58 +1,55 @@
1
- <script lang="ts">import * as accordion from "@zag-js/accordion";
2
- import { useMachine, normalizeProps } from "@zag-js/svelte";
3
- import { useId } from "../../internal/use-id.js";
4
- import { setAccordionContext } from "./context.js";
5
- let {
6
- value = $bindable([]),
7
- animDuration = 200,
8
- // Root
9
- base = "",
10
- padding = "",
11
- spaceY = "space-y-2",
12
- rounded = "rounded",
13
- width = "w-full",
14
- classes = "",
15
- // Snippets
16
- children,
17
- iconOpen,
18
- iconClosed,
19
- ...zagProps
20
- } = $props();
21
- const [snapshot, send] = useMachine(
22
- accordion.machine({
23
- id: useId(),
24
- onValueChange(details) {
25
- value = details.value;
26
- }
27
- }),
28
- {
29
- context: {
30
- ...zagProps,
31
- get value() {
32
- return $state.snapshot(value);
33
- }
34
- }
35
- }
36
- );
37
- const api = $derived(accordion.connect(snapshot, send, normalizeProps));
38
- setAccordionContext({
39
- get api() {
40
- return api;
41
- },
42
- get animDuration() {
43
- return animDuration;
44
- },
45
- get iconClosed() {
46
- return iconClosed;
47
- },
48
- get iconOpen() {
49
- return iconOpen;
50
- }
51
- });
1
+ <script lang="ts">
2
+ import * as accordion from '@zag-js/accordion';
3
+ import { useMachine, normalizeProps } from '@zag-js/svelte';
4
+ import { setAccordionContext } from './context.js';
5
+ import type { AccordionProps } from './types.js';
6
+
7
+ // Props
8
+ const {
9
+ animationConfig = {
10
+ duration: 200
11
+ },
12
+ // Root
13
+ base = '',
14
+ padding = '',
15
+ spaceY = 'space-y-2',
16
+ rounded = 'rounded-base',
17
+ width = 'w-full',
18
+ classes = '',
19
+ // Snippets
20
+ children,
21
+ iconOpen,
22
+ iconClosed,
23
+ ...zagProps
24
+ }: AccordionProps = $props();
25
+
26
+ // Zag
27
+ const id = $props.id();
28
+ const service = useMachine(accordion.machine, () => ({
29
+ id: id,
30
+ ...zagProps
31
+ }));
32
+ const api = $derived(accordion.connect(service, normalizeProps));
33
+
34
+ // Context
35
+ setAccordionContext({
36
+ get api() {
37
+ return api;
38
+ },
39
+ get animationConfig() {
40
+ return animationConfig;
41
+ },
42
+ get iconClosed() {
43
+ return iconClosed;
44
+ },
45
+ get iconOpen() {
46
+ return iconOpen;
47
+ }
48
+ });
52
49
  </script>
53
50
 
54
51
  <!-- @component Divide content into collapsible sections. -->
55
52
 
56
53
  <div class="{base} {padding} {spaceY} {rounded} {width} {classes}" {...api.getRootProps()} data-testid="accordion">
57
- {@render children()}
54
+ {@render children?.()}
58
55
  </div>
@@ -1,17 +1,5 @@
1
1
  import type { AccordionProps } from './types.js';
2
- 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> {
3
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
- $$bindings?: Bindings;
5
- } & Exports;
6
- (internal: unknown, props: Props & {
7
- $$events?: Events;
8
- $$slots?: Slots;
9
- }): Exports;
10
- z_$$bindings?: Bindings;
11
- }
12
2
  /** Divide content into collapsible sections. */
13
- declare const Accordion: $$__sveltets_2_IsomorphicComponent<AccordionProps, {
14
- [evt: string]: CustomEvent<any>;
15
- }, {}, {}, "value">;
16
- type Accordion = InstanceType<typeof Accordion>;
3
+ declare const Accordion: import("svelte").Component<AccordionProps, {}, "">;
4
+ type Accordion = ReturnType<typeof Accordion>;
17
5
  export default Accordion;
@@ -1,45 +1,51 @@
1
- <script lang="ts">import { slide } from "svelte/transition";
2
- import { getAccordionContext } from "./context.js";
3
- const {
4
- headingElement = "h3",
5
- // Root
6
- base,
7
- spaceY,
8
- classes,
9
- // Control
10
- controlBase = "flex text-start items-center space-x-4 w-full",
11
- controlHover = "hover:preset-tonal-primary",
12
- controlPadding = "py-2 px-4",
13
- controlRounded = "rounded",
14
- controlClasses,
15
- // Lead
16
- leadBase = "",
17
- leadClasses = "",
18
- // Content
19
- contentBase = "flex-1",
20
- contentClasses = "",
21
- // Indicator
22
- indicatorBase = "",
23
- indicatorClasses = "",
24
- // Panel
25
- panelBase,
26
- panelPadding = "py-2 px-4",
27
- panelRounded,
28
- panelClasses,
29
- // Snippets
30
- control,
31
- lead,
32
- panel,
33
- ...zagProps
34
- } = $props();
35
- const ctx = getAccordionContext();
1
+ <script lang="ts">
2
+ import { slide } from 'svelte/transition';
3
+ import { getAccordionContext } from './context.js';
4
+ import type { AccordionItemProps } from './types.js';
5
+
6
+ // Props
7
+ const {
8
+ headingLevel = 3,
9
+ // Root
10
+ base,
11
+ spaceY,
12
+ classes,
13
+ // Control
14
+ controlBase = 'flex text-start items-center space-x-4 w-full',
15
+ controlHover = 'hover:preset-tonal-primary',
16
+ controlPadding = 'py-2 px-4',
17
+ controlRounded = 'rounded-base',
18
+ controlClasses,
19
+ // Lead
20
+ leadBase = '',
21
+ leadClasses = '',
22
+ // Content
23
+ contentBase = 'flex-1',
24
+ contentClasses = '',
25
+ // Indicator
26
+ indicatorBase = '',
27
+ indicatorClasses = '',
28
+ // Panel
29
+ panelBase,
30
+ panelPadding = 'py-2 px-4',
31
+ panelRounded,
32
+ panelClasses,
33
+ // Snippets
34
+ control,
35
+ lead,
36
+ panel,
37
+ ...zagProps
38
+ }: AccordionItemProps = $props();
39
+
40
+ // Context
41
+ const ctx = getAccordionContext();
36
42
  </script>
37
43
 
38
44
  <!-- @component A accordion item component. -->
39
45
 
40
46
  <div class="{base} {spaceY} {classes}" {...ctx.api.getItemProps(zagProps)} data-testid="accordion-item">
41
47
  <!-- Control -->
42
- <svelte:element this={headingElement}>
48
+ <svelte:element this={`h${headingLevel}`}>
43
49
  <button
44
50
  class="{controlBase} {controlHover} {controlPadding} {controlRounded} {controlClasses}"
45
51
  {...ctx.api.getItemTriggerProps(zagProps)}
@@ -75,7 +81,7 @@ const ctx = getAccordionContext();
75
81
  <div
76
82
  class="{panelBase} {panelPadding} {panelRounded} {panelClasses}"
77
83
  {...ctx.api.getItemContentProps(zagProps)}
78
- transition:slide={{ duration: ctx.animDuration }}
84
+ transition:slide={ctx.animationConfig}
79
85
  data-testid="accordion-panel"
80
86
  >
81
87
  {@render panel?.()}
@@ -1,17 +1,5 @@
1
1
  import type { AccordionItemProps } from './types.js';
2
- 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> {
3
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
- $$bindings?: Bindings;
5
- } & Exports;
6
- (internal: unknown, props: Props & {
7
- $$events?: Events;
8
- $$slots?: Slots;
9
- }): Exports;
10
- z_$$bindings?: Bindings;
11
- }
12
2
  /** A accordion item component. */
13
- declare const AccordionItem: $$__sveltets_2_IsomorphicComponent<AccordionItemProps, {
14
- [evt: string]: CustomEvent<any>;
15
- }, {}, {}, "">;
16
- type AccordionItem = InstanceType<typeof AccordionItem>;
3
+ declare const AccordionItem: import("svelte").Component<AccordionItemProps, {}, "">;
4
+ type AccordionItem = ReturnType<typeof AccordionItem>;
17
5
  export default AccordionItem;
@@ -1,3 +1,4 @@
1
+ var _a;
1
2
  import { createContext } from '../../internal/create-context.js';
2
3
  // @ts-expect-error - Defaults for context don't make sense, `createContext` should just throw TBH
3
- export const [setAccordionContext, getAccordionContext, key] = createContext();
4
+ export var setAccordionContext = (_a = createContext(), _a[0]), getAccordionContext = _a[1], key = _a[2];
@@ -0,0 +1,4 @@
1
+ declare const _default: import("svelte").Component<import("./types").AccordionProps, {}, ""> & {
2
+ Item: import("svelte").Component<import("./types").AccordionItemProps, {}, "">;
3
+ };
4
+ export default _default;
@@ -1,3 +1,3 @@
1
1
  import Accordion from './Accordion.svelte';
2
2
  import Item from './AccordionItem.svelte';
3
- export default Object.assign(Accordion, { Item });
3
+ export default /* @__PURE__ */ Object.assign(Accordion, { Item: Item });
@@ -1,14 +1,12 @@
1
1
  import type { Snippet } from 'svelte';
2
2
  import * as accordion from '@zag-js/accordion';
3
- export interface AccordionContext {
3
+ import type { SlideParams } from 'svelte/transition';
4
+ export interface AccordionContext extends Pick<AccordionProps, 'animationConfig' | 'iconOpen' | 'iconClosed'> {
4
5
  api: ReturnType<typeof accordion.connect>;
5
- animDuration: number;
6
- iconOpen?: Snippet;
7
- iconClosed?: Snippet;
8
6
  }
9
- export interface AccordionProps extends Omit<accordion.Context, 'id' | 'orientation'> {
10
- /** The slide animation duration in milliseconds. */
11
- animDuration?: number;
7
+ export interface AccordionProps extends Omit<accordion.Props, 'id' | 'orientation'> {
8
+ /** The animation configuration */
9
+ animationConfig?: SlideParams;
12
10
  /** Sets base styles. */
13
11
  base?: string;
14
12
  /** Set padding styles. */
@@ -29,8 +27,8 @@ export interface AccordionProps extends Omit<accordion.Context, 'id' | 'orientat
29
27
  iconClosed?: Snippet;
30
28
  }
31
29
  export interface AccordionItemProps extends accordion.ItemProps {
32
- /** The element used as the header. */
33
- headingElement?: string;
30
+ /** The heading level. */
31
+ headingLevel?: number;
34
32
  /** Sets base styles. */
35
33
  base?: string;
36
34
  /** Set vertical spacing styles. */
@@ -1,47 +1,50 @@
1
- <script lang="ts">let {
2
- // Root
3
- base = "w-full flex flex-col",
4
- background = "bg-surface-100-900",
5
- spaceY = "space-y-4",
6
- border = "",
7
- padding = "p-4",
8
- shadow = "",
9
- classes = "",
10
- // Toolbar
11
- toolbarBase = "flex justify-between",
12
- toolbarGridCols = "grid-cols-[auto_1fr_auto]",
13
- toolbarGap = "gap-4",
14
- toolbarClasses = "",
15
- // Lead
16
- leadBase = "flex",
17
- leadSpaceX = "space-x-4 rtl:space-x-reverse",
18
- leadPadding = "",
19
- leadClasses = "",
20
- // Center
21
- centerBase = "grow",
22
- centerAlign = "text-center",
23
- centerPadding = "",
24
- centerClasses = "",
25
- // Trail
26
- trailBase = "flex",
27
- trailSpaceX = "space-x-4 rtl:space-x-reverse",
28
- trailPadding = "",
29
- trailClasses = "",
30
- // Headline
31
- headlineBase = "w-full",
32
- headlineClasses = "",
33
- // Snippets
34
- children,
35
- lead,
36
- trail,
37
- headline
38
- } = $props();
1
+ <script lang="ts">
2
+ import type { AppBarProps } from './types.js';
3
+
4
+ const {
5
+ // Root
6
+ base = 'w-full flex flex-col',
7
+ background = 'bg-surface-100-900',
8
+ spaceY = 'space-y-4',
9
+ border = '',
10
+ padding = 'p-4',
11
+ shadow = '',
12
+ classes = '',
13
+ // Toolbar
14
+ toolbarBase = 'flex justify-between',
15
+ toolbarGridCols = 'grid-cols-[auto_1fr_auto]',
16
+ toolbarGap = 'gap-4',
17
+ toolbarClasses = '',
18
+ // Lead
19
+ leadBase = 'flex',
20
+ leadSpaceX = 'space-x-4 rtl:space-x-reverse',
21
+ leadPadding = '',
22
+ leadClasses = '',
23
+ // Center
24
+ centerBase = 'grow',
25
+ centerAlign = 'text-center',
26
+ centerPadding = '',
27
+ centerClasses = '',
28
+ // Trail
29
+ trailBase = 'flex',
30
+ trailSpaceX = 'space-x-4 rtl:space-x-reverse',
31
+ trailPadding = '',
32
+ trailClasses = '',
33
+ // Headline
34
+ headlineBase = 'w-full',
35
+ headlineClasses = '',
36
+ // Snippets
37
+ children,
38
+ lead,
39
+ trail,
40
+ headline
41
+ }: AppBarProps = $props();
39
42
  </script>
40
43
 
41
44
  <!-- @component A header element for the top of a page layout. -->
42
45
 
43
46
  <header class="{base} {background} {spaceY} {border} {padding} {shadow} {classes}" role="toolbar" data-testid="app-bar">
44
- <section class="{toolbarBase} {toolbarGridCols} {toolbarGap} {toolbarClasses}">
47
+ <section class="{toolbarBase} {toolbarGridCols} {toolbarGap} {toolbarClasses}" data-testid="app-bar-toolbar">
45
48
  {#if lead}
46
49
  <div class="{leadBase} {leadSpaceX} {leadPadding} {leadClasses}">
47
50
  {@render lead()}
@@ -62,7 +65,7 @@
62
65
  </section>
63
66
 
64
67
  {#if headline}
65
- <section class="{headlineBase} {headlineClasses}">
68
+ <section class="{headlineBase} {headlineClasses}" data-testid="app-bar-headline">
66
69
  {@render headline()}
67
70
  </section>
68
71
  {/if}
@@ -1,17 +1,5 @@
1
1
  import type { AppBarProps } from './types.js';
2
- 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> {
3
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
- $$bindings?: Bindings;
5
- } & Exports;
6
- (internal: unknown, props: Props & {
7
- $$events?: Events;
8
- $$slots?: Slots;
9
- }): Exports;
10
- z_$$bindings?: Bindings;
11
- }
12
2
  /** A header element for the top of a page layout. */
13
- declare const AppBar: $$__sveltets_2_IsomorphicComponent<AppBarProps, {
14
- [evt: string]: CustomEvent<any>;
15
- }, {}, {}, "">;
16
- type AppBar = InstanceType<typeof AppBar>;
3
+ declare const AppBar: import("svelte").Component<AppBarProps, {}, "">;
4
+ type AppBar = ReturnType<typeof AppBar>;
17
5
  export default AppBar;
@@ -1,51 +1,59 @@
1
- <script lang="ts">import * as avatar from "@zag-js/avatar";
2
- import { useMachine, normalizeProps } from "@zag-js/svelte";
3
- import { useId } from "../../internal/use-id.js";
4
- let {
5
- src,
6
- srcset,
7
- name,
8
- filter,
9
- // Root
10
- base = "overflow-hidden isolate",
11
- background = "bg-surface-400-600",
12
- size = "size-16",
13
- font = "",
14
- border = "",
15
- rounded = "rounded-full",
16
- shadow = "",
17
- classes = "",
18
- // Image
19
- imageBase = "w-full object-cover",
20
- imageClasses = "",
21
- // Fallback
22
- fallbackBase = "w-full h-full flex justify-center items-center",
23
- fallbackClasses = "",
24
- // Snippets
25
- children
26
- } = $props();
27
- const [snapshot, send] = useMachine(avatar.machine({ id: useId() }));
28
- const api = $derived(avatar.connect(snapshot, send, normalizeProps));
29
- function getInitials(name2) {
30
- return name2.split(" ").map((word) => word[0]).join("");
31
- }
1
+ <script lang="ts">
2
+ import * as avatar from '@zag-js/avatar';
3
+ import { useMachine, normalizeProps } from '@zag-js/svelte';
4
+ import type { AvatarProps } from './types.js';
5
+
6
+ const {
7
+ src,
8
+ srcset,
9
+ name,
10
+ // Root
11
+ base = 'overflow-hidden isolate',
12
+ background = 'bg-surface-400-600',
13
+ size = 'size-16',
14
+ font = '',
15
+ border = '',
16
+ rounded = 'rounded-full',
17
+ shadow = '',
18
+ classes = '',
19
+ // Image
20
+ imageBase = 'w-full object-cover',
21
+ imageClasses = '',
22
+ style = '',
23
+ // Fallback
24
+ fallbackBase = 'w-full h-full flex justify-center items-center',
25
+ fallbackClasses = '',
26
+ // Snippets
27
+ children,
28
+ // Zag
29
+ ...zagProps
30
+ }: AvatarProps = $props();
31
+
32
+ // Zag
33
+ const id = $props.id();
34
+ const service = useMachine(avatar.machine, () => ({
35
+ id: id,
36
+ ...zagProps
37
+ }));
38
+ const api = $derived(avatar.connect(service, normalizeProps));
39
+
40
+ // Generate Initials
41
+ function getInitials(name: string) {
42
+ return name
43
+ .split(' ')
44
+ .map((word) => word[0])
45
+ .join('');
46
+ }
32
47
  </script>
33
48
 
34
49
  <!-- @component An image with a fallback for representing a single user. -->
35
50
 
36
- <figure {...api.getRootProps()} class="{base} {background} {size} {font} {border} {rounded} {shadow} {classes}" data-testid="avatar">
37
- <!-- Image -->
38
- {#if src || srcset}
39
- <img
40
- {...api.getImageProps()}
41
- {src}
42
- {srcset}
43
- alt={name}
44
- class="{imageBase} {imageClasses}"
45
- style:filter={filter && `url(${filter})`}
46
- data-testid="avatar-image"
47
- />
48
- {/if}
51
+ <figure
52
+ {...api.getRootProps()}
53
+ class="{base} {background} {size} {font} {border} {rounded} {shadow} {classes}"
54
+ {style}
55
+ data-testid="avatar"
56
+ >
49
57
  <!-- Fallback -->
50
58
  <span {...api.getFallbackProps()} class="{fallbackBase} {fallbackClasses}" data-testid="avatar-fallback">
51
59
  {#if children}
@@ -54,4 +62,8 @@ function getInitials(name2) {
54
62
  {getInitials(name)}
55
63
  {/if}
56
64
  </span>
65
+ <!-- Image -->
66
+ {#if src || srcset}
67
+ <img {...api.getImageProps()} {src} {srcset} alt={name} class="{imageBase} {imageClasses}" data-testid="avatar-image" />
68
+ {/if}
57
69
  </figure>
@@ -1,17 +1,5 @@
1
1
  import type { AvatarProps } from './types.js';
2
- 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> {
3
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
- $$bindings?: Bindings;
5
- } & Exports;
6
- (internal: unknown, props: Props & {
7
- $$events?: Events;
8
- $$slots?: Slots;
9
- }): Exports;
10
- z_$$bindings?: Bindings;
11
- }
12
2
  /** An image with a fallback for representing a single user. */
13
- declare const Avatar: $$__sveltets_2_IsomorphicComponent<AvatarProps, {
14
- [evt: string]: CustomEvent<any>;
15
- }, {}, {}, "">;
16
- type Avatar = InstanceType<typeof Avatar>;
3
+ declare const Avatar: import("svelte").Component<AvatarProps, {}, "">;
4
+ type Avatar = ReturnType<typeof Avatar>;
17
5
  export default Avatar;
@@ -1,13 +1,13 @@
1
+ import type { HTMLAttributes } from 'svelte/elements';
1
2
  import type { Snippet } from 'svelte';
2
- export interface AvatarProps {
3
+ import type * as avatar from '@zag-js/avatar';
4
+ export interface AvatarProps extends Omit<avatar.Props, 'id'>, Pick<HTMLAttributes<HTMLElement>, 'style'> {
3
5
  /** Set avatar image source URL. */
4
6
  src?: string;
5
7
  /** The source set of the avatar image. */
6
8
  srcset?: string;
7
9
  /** Provide a name or username for the avatar. */
8
10
  name: string;
9
- /** Set avatar image filter name, such as: "#Apollo". */
10
- filter?: string;
11
11
  /** Set base styles. */
12
12
  base?: string;
13
13
  /** Set background styles. */