@svelte-atoms/core 1.0.0-alpha.29 → 1.0.0-alpha.31

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 (176) hide show
  1. package/README.md +3 -2
  2. package/dist/attachments/clickout.svelte.d.ts +1 -1
  3. package/dist/attachments/clickout.svelte.js +2 -2
  4. package/dist/components/accordion/accordion-root.svelte +65 -61
  5. package/dist/components/accordion/accordion-root.svelte.d.ts +1 -1
  6. package/dist/components/accordion/accordion.stories.svelte +70 -134
  7. package/dist/components/accordion/item/accordion-item-body.svelte +44 -42
  8. package/dist/components/accordion/item/accordion-item-header.svelte +51 -50
  9. package/dist/components/accordion/item/accordion-item-indicator.svelte +51 -50
  10. package/dist/components/accordion/item/accordion-item-root.svelte +66 -65
  11. package/dist/components/accordion/item/bond.svelte.d.ts +2 -0
  12. package/dist/components/accordion/item/index.d.ts +3 -0
  13. package/dist/components/accordion/item/index.js +3 -0
  14. package/dist/components/accordion/item/motion.svelte.d.ts +15 -0
  15. package/dist/components/accordion/item/motion.svelte.js +30 -0
  16. package/dist/components/accordion/item/types.d.ts +7 -24
  17. package/dist/components/alert/alert-close-button.svelte +66 -70
  18. package/dist/components/alert/alert-description.svelte +42 -42
  19. package/dist/components/alert/alert-description.svelte.d.ts +3 -6
  20. package/dist/components/alert/alert-root.svelte +68 -103
  21. package/dist/components/alert/alert-root.svelte.d.ts +2 -2
  22. package/dist/components/alert/alert.stories.svelte +10 -11
  23. package/dist/components/alert/bond.svelte.d.ts +0 -13
  24. package/dist/components/alert/bond.svelte.js +0 -32
  25. package/dist/components/alert/types.d.ts +8 -32
  26. package/dist/components/atom/html-atom.svelte +261 -207
  27. package/dist/components/avatar/avatar.stories.svelte +8 -13
  28. package/dist/components/badge/badge.stories.svelte +1 -6
  29. package/dist/components/badge/badge.svelte +1 -1
  30. package/dist/components/breadcrumb/breadcrumb.stories.svelte +16 -21
  31. package/dist/components/button/button.stories.svelte +1 -34
  32. package/dist/components/calendar/calendar-day.svelte +9 -4
  33. package/dist/components/calendar/calendar-header.svelte +29 -29
  34. package/dist/components/calendar/calendar-root.svelte +206 -206
  35. package/dist/components/calendar/calendar.stories.svelte +26 -31
  36. package/dist/components/card/card-body.svelte +1 -1
  37. package/dist/components/card/card-footer.svelte +1 -1
  38. package/dist/components/card/card-root.svelte +1 -1
  39. package/dist/components/card/card.stories.svelte +92 -104
  40. package/dist/components/checkbox/checkbox.stories.svelte +4 -9
  41. package/dist/components/checkbox/checkbox.svelte +159 -157
  42. package/dist/components/collapsible/collapsible.stories.svelte +2 -3
  43. package/dist/components/combobox/atoms.d.ts +1 -1
  44. package/dist/components/combobox/atoms.js +1 -1
  45. package/dist/components/combobox/combobox-root.svelte +1 -1
  46. package/dist/components/combobox/compobox.stories.svelte +19 -22
  47. package/dist/components/combobox/index.d.ts +1 -0
  48. package/dist/components/container/container.stories.svelte +8 -11
  49. package/dist/components/container/container.svelte.d.ts +1 -1
  50. package/dist/components/datagrid/datagrid-root.svelte +59 -59
  51. package/dist/components/datagrid/datagrid.css +5 -5
  52. package/dist/components/datagrid/datagrid.stories.svelte +47 -50
  53. package/dist/components/datagrid/tr/bond.svelte.d.ts +4 -2
  54. package/dist/components/datagrid/tr/bond.svelte.js +9 -7
  55. package/dist/components/datagrid/tr/datagrid-tr.svelte +90 -88
  56. package/dist/components/date-picker/date-picker-calendar.svelte +2 -2
  57. package/dist/components/date-picker/date-picker-header.svelte +100 -100
  58. package/dist/components/date-picker/date-picker-months.svelte +142 -142
  59. package/dist/components/date-picker/date-picker-root.svelte +95 -95
  60. package/dist/components/date-picker/date-picker-years.svelte +205 -205
  61. package/dist/components/date-picker/date-picker.stories.svelte +35 -42
  62. package/dist/components/dialog/bond.svelte.d.ts +13 -3
  63. package/dist/components/dialog/bond.svelte.js +66 -5
  64. package/dist/components/dialog/dialog-content.svelte +2 -20
  65. package/dist/components/dialog/dialog-root.svelte +91 -110
  66. package/dist/components/dialog/dialog.stories.svelte +34 -37
  67. package/dist/components/dialog/motion.svelte.d.ts +13 -0
  68. package/dist/components/dialog/motion.svelte.js +44 -0
  69. package/dist/components/drawer/attachments.svelte.d.ts +1 -1
  70. package/dist/components/drawer/attachments.svelte.js +7 -10
  71. package/dist/components/drawer/bond.svelte.d.ts +24 -5
  72. package/dist/components/drawer/bond.svelte.js +77 -11
  73. package/dist/components/drawer/drawer-content.svelte +49 -42
  74. package/dist/components/drawer/drawer.stories.svelte +144 -224
  75. package/dist/components/drawer/index.d.ts +2 -0
  76. package/dist/components/drawer/index.js +2 -0
  77. package/dist/components/drawer/motion.d.ts +15 -0
  78. package/dist/components/drawer/motion.js +28 -0
  79. package/dist/components/dropdown/atoms.d.ts +1 -1
  80. package/dist/components/dropdown/atoms.js +1 -1
  81. package/dist/components/dropdown/bond.svelte.d.ts +5 -1
  82. package/dist/components/dropdown/dropdown-root.svelte +1 -1
  83. package/dist/components/dropdown/dropdown.stories.svelte +38 -41
  84. package/dist/components/dropdown/index.d.ts +1 -0
  85. package/dist/components/form/form.stories.svelte +58 -61
  86. package/dist/components/image/image.stories.svelte +9 -12
  87. package/dist/components/input/input.stories.svelte +11 -14
  88. package/dist/components/label/label.stories.svelte +1 -12
  89. package/dist/components/label/label.stories.svelte.d.ts +24 -4
  90. package/dist/components/lazy/lazy.stories.svelte +28 -35
  91. package/dist/components/lazy/lazy.svelte +28 -28
  92. package/dist/components/link/link.stories.svelte +1 -12
  93. package/dist/components/link/link.stories.svelte.d.ts +24 -4
  94. package/dist/components/list/list-item.svelte +20 -20
  95. package/dist/components/menu/atoms.d.ts +1 -0
  96. package/dist/components/menu/atoms.js +1 -0
  97. package/dist/components/menu/index.d.ts +2 -1
  98. package/dist/components/menu/index.js +1 -1
  99. package/dist/components/menu/menu-item.svelte +69 -51
  100. package/dist/components/menu/menu-item.svelte.d.ts +1 -0
  101. package/dist/components/menu/menu-list.svelte +40 -40
  102. package/dist/components/menu/menu.stories.svelte +9 -12
  103. package/dist/components/popover/bond.svelte.d.ts +20 -7
  104. package/dist/components/popover/bond.svelte.js +104 -45
  105. package/dist/components/popover/motion.d.ts +6 -0
  106. package/dist/components/popover/motion.js +56 -0
  107. package/dist/components/popover/popover-arrow.svelte +4 -4
  108. package/dist/components/popover/popover-content.svelte +137 -178
  109. package/dist/components/popover/popover-indicator.svelte +2 -1
  110. package/dist/components/popover/popover-root.svelte +1 -1
  111. package/dist/components/popover/popover.stories.svelte +49 -52
  112. package/dist/components/popover/types.d.ts +9 -7
  113. package/dist/components/portal/active-portal.svelte +29 -22
  114. package/dist/components/portal/active-portal.svelte.d.ts +2 -9
  115. package/dist/components/portal/portal-root.svelte +76 -83
  116. package/dist/components/portal/portal-root.svelte.d.ts +4 -6
  117. package/dist/components/portal/teleport.svelte +49 -50
  118. package/dist/components/portal/teleport.svelte.d.ts +3 -4
  119. package/dist/components/qr-code/qr-code.stories.svelte +18 -27
  120. package/dist/components/qr-code/qr-code.svelte +75 -75
  121. package/dist/components/radio/radio-group.stories.svelte +21 -30
  122. package/dist/components/radio/radio.stories.svelte +1 -10
  123. package/dist/components/radio/radio.svelte +109 -109
  124. package/dist/components/radio/types.d.ts +98 -0
  125. package/dist/components/radio/types.js +2 -0
  126. package/dist/components/root/root.svelte +104 -121
  127. package/dist/components/scrollable/scrollable-root.svelte.d.ts +2 -2
  128. package/dist/components/scrollable/scrollable.stories.svelte +95 -105
  129. package/dist/components/sidebar/index.d.ts +2 -0
  130. package/dist/components/sidebar/index.js +2 -0
  131. package/dist/components/sidebar/motion.svelte.d.ts +11 -0
  132. package/dist/components/sidebar/motion.svelte.js +16 -0
  133. package/dist/components/sidebar/sidebar-content.svelte +3 -2
  134. package/dist/components/sidebar/sidebar-root.svelte +39 -41
  135. package/dist/components/sidebar/sidebar.stories.svelte +43 -54
  136. package/dist/components/sidebar/types.d.ts +3 -12
  137. package/dist/components/tabs/tab/bond.svelte.d.ts +4 -1
  138. package/dist/components/tabs/tab/bond.svelte.js +4 -1
  139. package/dist/components/tabs/tabs.stories.svelte +31 -34
  140. package/dist/components/textarea/atoms.d.ts +1 -0
  141. package/dist/components/textarea/atoms.js +1 -0
  142. package/dist/components/textarea/textarea-input.svelte +9 -6
  143. package/dist/components/textarea/textarea-root.svelte +9 -9
  144. package/dist/components/textarea/textarea-root.svelte.d.ts +2 -0
  145. package/dist/components/tooltip/tooltip-trigger.svelte +39 -37
  146. package/dist/components/tooltip/tooltip-trigger.svelte.d.ts +1 -0
  147. package/dist/components/tooltip/tooltip.stories.svelte +7 -10
  148. package/dist/components/tree/tree.stories.svelte +102 -94
  149. package/dist/context/preset.svelte.d.ts +3 -3
  150. package/dist/icons/icon-copy.svelte +6 -0
  151. package/dist/{components/radio/types.svelte.d.ts → icons/icon-copy.svelte.d.ts} +3 -3
  152. package/dist/utils/function.d.ts +2 -0
  153. package/dist/utils/function.js +6 -0
  154. package/dist/utils/markdown-to-llm.d.ts +28 -0
  155. package/dist/utils/markdown-to-llm.js +76 -0
  156. package/package.json +6 -10
  157. package/dist/actions/animation.svelte.d.ts +0 -6
  158. package/dist/actions/animation.svelte.js +0 -14
  159. package/dist/actions/clickout.svelte.d.ts +0 -2
  160. package/dist/actions/clickout.svelte.js +0 -15
  161. package/dist/actions/popover.svelte.d.ts +0 -19
  162. package/dist/actions/popover.svelte.js +0 -81
  163. package/dist/actions/portal.svelte.d.ts +0 -8
  164. package/dist/actions/portal.svelte.js +0 -32
  165. package/dist/attachments/gsap.svelte.d.ts +0 -2
  166. package/dist/attachments/gsap.svelte.js +0 -26
  167. package/dist/components/radio/types.svelte +0 -0
  168. package/llm/composition.md +0 -395
  169. package/llm/crafting.md +0 -838
  170. package/llm/motion.md +0 -970
  171. package/llm/philosophy.md +0 -23
  172. package/llm/preset-variant-integration.md +0 -516
  173. package/llm/preset.md +0 -383
  174. package/llm/styling.md +0 -216
  175. package/llm/usage.md +0 -46
  176. package/llm/variants.md +0 -1259
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # ⚛️ @svelte-atoms/core
1
+ # ⚛️ @svelte-atoms/core | Svelte 5 UI Library
2
2
 
3
3
  > A modern, modular, and accessible Svelte 5 UI component library built with composability at its core.
4
4
 
5
- **@svelte-atoms/core** is a comprehensive Svelte component library that provides fundamental building blocks ("atoms") for creating sophisticated, interactive design systems. Each component is designed with accessibility, type safety, and developer experience in mind. Built with Svelte 5 runes for optimal reactivity and performance.
5
+ Core UI is a comprehensive Svelte component library that provides fundamental building blocks ("atoms") for creating sophisticated, interactive design systems. Each component is designed with accessibility, type safety, and developer experience in mind. Built with Svelte 5 runes for optimal reactivity and performance.
6
6
 
7
7
  [![npm version](https://img.shields.io/npm/v/@svelte-atoms/core.svg)](https://www.npmjs.com/package/@svelte-atoms/core)
8
8
  [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/svelte-atoms/core)
@@ -193,6 +193,7 @@ bun add @svelte-atoms/core
193
193
  ```svelte
194
194
  <script lang="ts">
195
195
  import { Button, Dialog, Input } from '@svelte-atoms/core';
196
+ import '@svelte-atoms/tw';
196
197
 
197
198
  let dialogOpen = $state(false);
198
199
  let inputValue = '';
@@ -1 +1 @@
1
- export declare function clickout<T extends Element>(onclick?: (ev: PointerEvent, node?: T) => void): (node: T) => () => void;
1
+ export declare function clickout<T extends Element>(onclick?: (ev: PointerEvent, node?: T) => void, options?: AddEventListenerOptions | undefined): (node: T) => () => void;
@@ -1,5 +1,5 @@
1
1
  import { on } from 'svelte/events';
2
- export function clickout(onclick) {
2
+ export function clickout(onclick, options) {
3
3
  return (node) => {
4
4
  const handler = (ev) => {
5
5
  const target = ev.target;
@@ -7,7 +7,7 @@ export function clickout(onclick) {
7
7
  onclick?.(ev, node);
8
8
  }
9
9
  };
10
- const cleanup = on(window, 'click', handler);
10
+ const cleanup = on(window, 'click', handler, options);
11
11
  return () => {
12
12
  cleanup();
13
13
  };
@@ -1,61 +1,65 @@
1
- <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
- import { AccordionBond, AccordionState, type AccordionStateProps } from './bond.svelte';
3
- import { defineProperty, defineState } from '../../utils';
4
- import { HtmlAtom, type Base } from '../atom';
5
- import type { AccordionRootProps } from './types';
6
-
7
- let {
8
- value = $bindable(undefined),
9
- values = $bindable([]),
10
- data = $bindable([]),
11
- class: klass = '',
12
- multiple = false,
13
- collapsible = false,
14
- disabled = false,
15
- children = undefined,
16
- factory = _factory,
17
- onmount = undefined,
18
- ondestroy = undefined,
19
- animate = undefined,
20
- enter = undefined,
21
- exit = undefined,
22
- initial = undefined,
23
- ...restProps
24
- }: AccordionRootProps<E, B> = $props();
25
-
26
- const bondProps = defineState<AccordionStateProps>([
27
- defineProperty(
28
- 'values',
29
- () => (multiple ? values : ([value].filter(Boolean) as string[])),
30
- (v) => {
31
- values = v;
32
- value = values[0];
33
- }
34
- )
35
- ]);
36
- const bond = factory(bondProps).share();
37
-
38
- const rootProps = $derived({
39
- ...bond.root(),
40
- ...restProps
41
- });
42
-
43
- function _factory(props: typeof bondProps = bondProps) {
44
- const bondState = new AccordionState(() => props);
45
-
46
- return new AccordionBond(bondState);
47
- }
48
-
49
- export function getBond() {
50
- return bond;
51
- }
52
- </script>
53
-
54
- <HtmlAtom
55
- preset="accordion"
56
- class={['bg-card border-border flex list-none flex-col', '$preset', klass]}
57
- {bond}
58
- {...rootProps}
59
- >
60
- {@render children?.({ accordion: bond })}
61
- </HtmlAtom>
1
+ <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
+ import { defineProperty, defineState } from '../../utils';
3
+ import { HtmlAtom, type Base } from '../atom';
4
+ import { AccordionBond, AccordionState, type AccordionStateProps } from './bond.svelte';
5
+ import type { AccordionRootProps } from './types';
6
+
7
+ let {
8
+ value = $bindable(undefined),
9
+ values = $bindable([]),
10
+ data = $bindable([]),
11
+ class: klass = '',
12
+ multiple = false,
13
+ collapsible = false,
14
+ disabled = false,
15
+ children = undefined,
16
+ factory = _factory,
17
+ onmount = undefined,
18
+ ondestroy = undefined,
19
+ animate = undefined,
20
+ enter = undefined,
21
+ exit = undefined,
22
+ initial = undefined,
23
+ preset = 'accordion',
24
+ ...restProps
25
+ }: AccordionRootProps<E, B> = $props();
26
+
27
+ const bondProps = defineState<AccordionStateProps>([
28
+ defineProperty(
29
+ 'values',
30
+ () => (multiple ? values : ([value].filter(Boolean) as string[])),
31
+ (v) => {
32
+ values = v;
33
+ value = values[0];
34
+ }
35
+ ),
36
+ defineProperty('multiple', () => multiple),
37
+ defineProperty('collapsible', () => collapsible),
38
+ defineProperty('disabled', () => disabled)
39
+ ]);
40
+ const bond = factory(bondProps).share();
41
+
42
+ const rootProps = $derived({
43
+ ...bond.root(),
44
+ ...restProps
45
+ });
46
+
47
+ function _factory(props: typeof bondProps = bondProps) {
48
+ const bondState = new AccordionState(() => props);
49
+
50
+ return new AccordionBond(bondState);
51
+ }
52
+
53
+ export function getBond() {
54
+ return bond;
55
+ }
56
+ </script>
57
+
58
+ <HtmlAtom
59
+ {preset}
60
+ {bond}
61
+ class={['bg-card border-border flex list-none flex-col', '$preset', klass]}
62
+ {...rootProps}
63
+ >
64
+ {@render children?.({ accordion: bond })}
65
+ </HtmlAtom>
@@ -1,5 +1,5 @@
1
- import { AccordionBond } from './bond.svelte';
2
1
  import { type Base } from '../atom';
2
+ import { AccordionBond } from './bond.svelte';
3
3
  import type { AccordionRootProps } from './types';
4
4
  declare function $$render<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base>(): {
5
5
  props: AccordionRootProps<E, B>;
@@ -1,134 +1,70 @@
1
- <script module>
2
- import { defineMeta } from '@storybook/addon-svelte-csf';
3
- import { Accordion as AAccordion, AccordionItem } from '.';
4
- import Root from '../root/root.svelte';
5
- import gsap from 'gsap';
6
- import { linear } from 'svelte/easing';
7
- import { toTransitionConfig } from '../../utils/gsap';
8
-
9
- // More on how to set up stories at: https://storybook.js.org/docs/writing-stories
10
- const { Story } = defineMeta({
11
- title: 'Atoms/Accordion',
12
- // This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs
13
-
14
- parameters: {
15
- // More on how to position stories at: https://storybook.js.org/docs/configure/story-layout
16
- layout: 'fullscreen'
17
- },
18
- args: {}
19
- });
20
- </script>
21
-
22
- <script lang="ts">
23
- </script>
24
-
25
- <Story name="Accordion" args={{ collapsible: false, multiple: false, disabled: false }}>
26
- {#snippet children(args)}
27
- <Root class="flex items-center justify-center p-4">
28
- <AAccordion class="backdrop-blur-sm" {...args}>
29
- <AccordionItem.Root>
30
- <AccordionItem.Header>
31
- <div>Hello Atomic UI 1</div>
32
- <AccordionItem.Indicator />
33
- </AccordionItem.Header>
34
-
35
- <AccordionItem.Body
36
- initial={(node) => {
37
- gsap.set(node, { opacity: 0, height: 0 });
38
- }}
39
- enter={function (node) {
40
- console.log(this);
41
- const tween = gsap.to(node, {
42
- opacity: 1,
43
- height: 'auto',
44
- duration: 0.2,
45
- ease: linear
46
- });
47
-
48
- return toTransitionConfig(tween);
49
- }}
50
- exit={(node) => {
51
- const tween = gsap.to(node, { opacity: 0, height: 0, duration: 0.2, ease: linear });
52
-
53
- return toTransitionConfig(tween);
54
- }}
55
- >
56
- <div class="p-2">
57
- Mauris et habitasse cubilia potenti at condimentum iaculis nam. Ante fusce litora
58
- tristique letius libero. Curabitur vitae cursus consectetur feugiat aenean viverra vel
59
- dolor diam nascetur.
60
- </div>
61
- </AccordionItem.Body>
62
- </AccordionItem.Root>
63
-
64
- <AccordionItem.Root>
65
- <AccordionItem.Header>
66
- <div>Hello Atomic UI 2</div>
67
- <AccordionItem.Indicator />
68
- </AccordionItem.Header>
69
-
70
- <AccordionItem.Body
71
- initial={(node) => {
72
- gsap.set(node, { opacity: 0, height: 0 });
73
- }}
74
- enter={(node) => {
75
- const tween = gsap.to(node, {
76
- opacity: 1,
77
- height: 'auto',
78
- duration: 0.2,
79
- ease: linear
80
- });
81
-
82
- return toTransitionConfig(tween);
83
- }}
84
- exit={(node) => {
85
- const tween = gsap.to(node, { opacity: 0, height: 0, duration: 0.2, ease: linear });
86
-
87
- return toTransitionConfig(tween);
88
- }}
89
- >
90
- <div class="p-2">
91
- Mauris et habitasse cubilia potenti at condimentum iaculis nam. Ante fusce litora
92
- tristique letius libero. Curabitur vitae cursus consectetur feugiat aenean viverra vel
93
- dolor diam nascetur.
94
- </div>
95
- </AccordionItem.Body>
96
- </AccordionItem.Root>
97
-
98
- <AccordionItem.Root>
99
- <AccordionItem.Header>
100
- <div>Hello Atomic UI 3</div>
101
- <AccordionItem.Indicator />
102
- </AccordionItem.Header>
103
-
104
- <AccordionItem.Body
105
- initial={(node) => {
106
- gsap.set(node, { opacity: 0, height: 0 });
107
- }}
108
- enter={(node) => {
109
- const tween = gsap.to(node, {
110
- opacity: 1,
111
- height: 'auto',
112
- duration: 0.2,
113
- ease: linear
114
- });
115
-
116
- return toTransitionConfig(tween);
117
- }}
118
- exit={(node) => {
119
- const tween = gsap.to(node, { opacity: 0, height: 0, duration: 0.2, ease: linear });
120
-
121
- return toTransitionConfig(tween);
122
- }}
123
- >
124
- <div class="p-2">
125
- Mauris et habitasse cubilia potenti at condimentum iaculis nam. Ante fusce litora
126
- tristique letius libero. Curabitur vitae cursus consectetur feugiat aenean viverra vel
127
- dolor diam nascetur.
128
- </div>
129
- </AccordionItem.Body>
130
- </AccordionItem.Root>
131
- </AAccordion>
132
- </Root>
133
- {/snippet}
134
- </Story>
1
+ <script module>
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import { Accordion as AAccordion, AccordionItem } from '.';
4
+
5
+ // More on how to set up stories at: https://storybook.js.org/docs/writing-stories
6
+ const { Story } = defineMeta({
7
+ title: 'Atoms/Accordion',
8
+ // This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs
9
+
10
+ parameters: {
11
+ // More on how to position stories at: https://storybook.js.org/docs/configure/story-layout
12
+ layout: 'fullscreen'
13
+ },
14
+ args: {}
15
+ });
16
+ </script>
17
+
18
+ <script lang="ts">
19
+ </script>
20
+
21
+ <Story name="Accordion" args={{ collapsible: false, multiple: false, disabled: false }}>
22
+ {#snippet template(args)}
23
+ <AAccordion class="backdrop-blur-sm" {...args}>
24
+ <AccordionItem.Root>
25
+ <AccordionItem.Header>
26
+ <div>Hello Atomic UI 1</div>
27
+ <AccordionItem.Indicator class="ml-auto" />
28
+ </AccordionItem.Header>
29
+
30
+ <AccordionItem.Body>
31
+ <div class="p-2">
32
+ Mauris et habitasse cubilia potenti at condimentum iaculis nam. Ante fusce litora
33
+ tristique letius libero. Curabitur vitae cursus consectetur feugiat aenean viverra vel
34
+ dolor diam nascetur.
35
+ </div>
36
+ </AccordionItem.Body>
37
+ </AccordionItem.Root>
38
+
39
+ <AccordionItem.Root>
40
+ <AccordionItem.Header>
41
+ <div>Hello Atomic UI 2</div>
42
+ <AccordionItem.Indicator class="ml-auto" />
43
+ </AccordionItem.Header>
44
+
45
+ <AccordionItem.Body>
46
+ <div class="p-2">
47
+ Mauris et habitasse cubilia potenti at condimentum iaculis nam. Ante fusce litora
48
+ tristique letius libero. Curabitur vitae cursus consectetur feugiat aenean viverra vel
49
+ dolor diam nascetur.
50
+ </div>
51
+ </AccordionItem.Body>
52
+ </AccordionItem.Root>
53
+
54
+ <AccordionItem.Root>
55
+ <AccordionItem.Header>
56
+ <div>Hello Atomic UI 3</div>
57
+ <AccordionItem.Indicator class="ml-auto" />
58
+ </AccordionItem.Header>
59
+
60
+ <AccordionItem.Body>
61
+ <div class="p-2">
62
+ Mauris et habitasse cubilia potenti at condimentum iaculis nam. Ante fusce litora
63
+ tristique letius libero. Curabitur vitae cursus consectetur feugiat aenean viverra vel
64
+ dolor diam nascetur.
65
+ </div>
66
+ </AccordionItem.Body>
67
+ </AccordionItem.Root>
68
+ </AAccordion>
69
+ {/snippet}
70
+ </Story>
@@ -1,42 +1,44 @@
1
- <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
- import { HtmlAtom, type Base } from '../../atom';
3
- import { AccordionItemBond } from './bond.svelte';
4
- import type { AccordionItemBodyProps } from './types';
5
-
6
- const bond = AccordionItemBond.get();
7
- const isOpen = $derived(bond?.state.isOpen ?? false);
8
-
9
- let {
10
- class: klass = '',
11
- children = undefined,
12
- onmount = undefined,
13
- ondestroy = undefined,
14
- animate = undefined,
15
- enter = undefined,
16
- exit = undefined,
17
- initial = undefined,
18
- ...restProps
19
- }: AccordionItemBodyProps<E, B> = $props();
20
-
21
- const bodyProps = $derived({
22
- ...bond?.body(),
23
- ...restProps
24
- });
25
- </script>
26
-
27
- {#if isOpen}
28
- <HtmlAtom
29
- preset="accordion.item.body"
30
- class={['border-border box-content', '$preset', klass]}
31
- {bond}
32
- onmount={onmount?.bind(bond.state)}
33
- ondestroy={ondestroy?.bind(bond.state)}
34
- animate={animate?.bind(bond.state)}
35
- enter={enter?.bind(bond.state)}
36
- exit={exit?.bind(bond.state)}
37
- initial={initial?.bind(bond.state)}
38
- {...bodyProps}
39
- >
40
- {@render children?.({ accordionItem: bond })}
41
- </HtmlAtom>
42
- {/if}
1
+ <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
+ import { HtmlAtom, type Base } from '../../atom';
3
+ import { AccordionItemBond } from './bond.svelte';
4
+ import { enterAccordionItemBody, exitAccordionItemBody } from './motion.svelte';
5
+ import type { AccordionItemBodyProps } from './types';
6
+
7
+ const bond = AccordionItemBond.get();
8
+ const isOpen = $derived(bond?.state.isOpen ?? false);
9
+
10
+ let {
11
+ class: klass = '',
12
+ children = undefined,
13
+ onmount = undefined,
14
+ ondestroy = undefined,
15
+ animate = undefined,
16
+ enter = enterAccordionItemBody(),
17
+ exit = exitAccordionItemBody(),
18
+ initial = undefined,
19
+ preset = 'accordion.item.body',
20
+ ...restProps
21
+ }: AccordionItemBodyProps<E, B> = $props();
22
+
23
+ const bodyProps = $derived({
24
+ ...bond?.body(),
25
+ ...restProps
26
+ });
27
+ </script>
28
+
29
+ {#if isOpen}
30
+ <HtmlAtom
31
+ {preset}
32
+ {bond}
33
+ class={['border-border box-content h-0 opacity-0', '$preset', klass]}
34
+ onmount={onmount?.bind(bond.state)}
35
+ ondestroy={ondestroy?.bind(bond.state)}
36
+ animate={animate?.bind(bond.state)}
37
+ enter={enter?.bind(bond.state)}
38
+ exit={exit?.bind(bond.state)}
39
+ initial={initial?.bind(bond.state)}
40
+ {...bodyProps}
41
+ >
42
+ {@render children?.({ accordionItem: bond })}
43
+ </HtmlAtom>
44
+ {/if}
@@ -1,50 +1,51 @@
1
- <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
- import { HtmlAtom, type Base } from '../../atom';
3
- import { AccordionItemBond } from './bond.svelte';
4
- import type { AccordionItemHeaderProps } from './types';
5
-
6
- let {
7
- class: klass = '',
8
- as = 'button',
9
- children = undefined,
10
- onpointerdown = undefined,
11
- onmount = undefined,
12
- ondestroy = undefined,
13
- animate = undefined,
14
- enter = undefined,
15
- exit = undefined,
16
- initial = undefined,
17
- ...restProps
18
- }: AccordionItemHeaderProps = $props();
19
-
20
- const bond = AccordionItemBond.get();
21
-
22
- const headerProps = $derived({
23
- ...bond?.header(),
24
- ...restProps
25
- });
26
- </script>
27
-
28
- <!-- svelte-ignore a11y_no_static_element_interactions -->
29
- <HtmlAtom
30
- {as}
31
- {bond}
32
- preset="accordion.item.header"
33
- class={[
34
- 'border-border relative box-border flex w-full cursor-pointer items-center',
35
- '$preset',
36
- klass
37
- ]}
38
- onmount={onmount?.bind(bond.state)}
39
- ondestroy={ondestroy?.bind(bond.state)}
40
- animate={animate?.bind(bond.state)}
41
- enter={enter?.bind(bond.state)}
42
- exit={exit?.bind(bond.state)}
43
- initial={initial?.bind(bond.state)}
44
- tabindex={as !== 'button' ? 0 : undefined}
45
- {...headerProps}
46
- >
47
- {@render children?.({
48
- accordionItem: bond
49
- })}
50
- </HtmlAtom>
1
+ <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
+ import { HtmlAtom, type Base } from '../../atom';
3
+ import { AccordionItemBond } from './bond.svelte';
4
+ import type { AccordionItemHeaderProps } from './types';
5
+
6
+ let {
7
+ class: klass = '',
8
+ as = 'button',
9
+ children = undefined,
10
+ onpointerdown = undefined,
11
+ onmount = undefined,
12
+ ondestroy = undefined,
13
+ animate = undefined,
14
+ enter = undefined,
15
+ exit = undefined,
16
+ initial = undefined,
17
+ preset = 'accordion.item.header',
18
+ ...restProps
19
+ }: AccordionItemHeaderProps = $props();
20
+
21
+ const bond = AccordionItemBond.get();
22
+
23
+ const headerProps = $derived({
24
+ ...bond?.header(),
25
+ ...restProps
26
+ });
27
+ </script>
28
+
29
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
30
+ <HtmlAtom
31
+ {as}
32
+ {bond}
33
+ {preset}
34
+ class={[
35
+ 'border-border relative box-border flex w-full cursor-pointer items-center',
36
+ '$preset',
37
+ klass
38
+ ]}
39
+ onmount={onmount?.bind(bond.state)}
40
+ ondestroy={ondestroy?.bind(bond.state)}
41
+ animate={animate?.bind(bond.state)}
42
+ enter={enter?.bind(bond.state)}
43
+ exit={exit?.bind(bond.state)}
44
+ initial={initial?.bind(bond.state)}
45
+ tabindex={as !== 'button' ? 0 : undefined}
46
+ {...headerProps}
47
+ >
48
+ {@render children?.({
49
+ accordionItem: bond
50
+ })}
51
+ </HtmlAtom>