@svelte-atoms/core 1.0.0-alpha.30 → 1.0.0-alpha.32

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 (221) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +176 -739
  3. package/dist/attachments/index.d.ts +1 -0
  4. package/dist/attachments/index.js +1 -0
  5. package/dist/components/accordion/accordion-root.svelte +65 -61
  6. package/dist/components/accordion/accordion.stories.svelte +70 -145
  7. package/dist/components/accordion/item/accordion-item-body.svelte +6 -4
  8. package/dist/components/accordion/item/accordion-item-header.svelte +2 -1
  9. package/dist/components/accordion/item/accordion-item-indicator.svelte +2 -1
  10. package/dist/components/accordion/item/accordion-item-root.svelte +2 -1
  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 +32 -36
  18. package/dist/components/alert/alert-description.svelte +1 -1
  19. package/dist/components/alert/alert-description.svelte.d.ts +3 -6
  20. package/dist/components/alert/alert-root.svelte +3 -38
  21. package/dist/components/alert/alert-root.svelte.d.ts +2 -2
  22. package/dist/components/alert/alert.stories.svelte +400 -400
  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 +93 -261
  27. package/dist/components/atom/types.d.ts +3 -2
  28. package/dist/components/atom/utils.d.ts +37 -0
  29. package/dist/components/atom/utils.js +208 -0
  30. package/dist/components/avatar/avatar.stories.svelte +22 -22
  31. package/dist/components/badge/badge.stories.svelte +12 -12
  32. package/dist/components/badge/badge.svelte +19 -19
  33. package/dist/components/breadcrumb/breadcrumb-item.svelte +1 -1
  34. package/dist/components/breadcrumb/breadcrumb-separator.svelte +5 -1
  35. package/dist/components/breadcrumb/breadcrumb.stories.svelte +16 -16
  36. package/dist/components/button/button.stories.svelte +27 -27
  37. package/dist/components/calendar/calendar-day.svelte +9 -4
  38. package/dist/components/calendar/calendar.stories.svelte +26 -26
  39. package/dist/components/card/card-body.svelte +39 -39
  40. package/dist/components/card/card-footer.svelte +41 -41
  41. package/dist/components/card/card-root.svelte +91 -91
  42. package/dist/components/card/card.stories.svelte +133 -133
  43. package/dist/components/checkbox/checkbox.stories.svelte +22 -22
  44. package/dist/components/checkbox/checkbox.svelte +159 -155
  45. package/dist/components/collapsible/bond.svelte.js +2 -1
  46. package/dist/components/collapsible/collapsible-body.svelte +3 -2
  47. package/dist/components/collapsible/collapsible.stories.svelte +172 -172
  48. package/dist/components/collapsible/motion.svelte.d.ts +6 -0
  49. package/dist/components/collapsible/motion.svelte.js +15 -0
  50. package/dist/components/combobox/atoms.d.ts +3 -3
  51. package/dist/components/combobox/atoms.js +3 -3
  52. package/dist/components/combobox/bond.svelte.d.ts +6 -6
  53. package/dist/components/combobox/bond.svelte.js +3 -26
  54. package/dist/components/combobox/combobox-control.svelte +52 -52
  55. package/dist/components/combobox/{compobox-item.svelte → combobox-item.svelte} +62 -68
  56. package/dist/components/combobox/combobox-item.svelte.d.ts +12 -0
  57. package/dist/components/combobox/combobox-root.svelte +65 -65
  58. package/dist/components/combobox/combobox.stories.svelte +50 -0
  59. package/dist/components/combobox/combobox.stories.svelte.d.ts +3 -0
  60. package/dist/components/combobox/index.d.ts +1 -0
  61. package/dist/components/container/container.stories.svelte +20 -20
  62. package/dist/components/container/container.svelte.d.ts +1 -1
  63. package/dist/components/datagrid/datagrid.stories.svelte +72 -72
  64. package/dist/components/datagrid/tr/bond.svelte.d.ts +4 -2
  65. package/dist/components/datagrid/tr/bond.svelte.js +9 -7
  66. package/dist/components/datagrid/tr/datagrid-tr.svelte +9 -7
  67. package/dist/components/date-picker/bond.svelte.d.ts +15 -5
  68. package/dist/components/date-picker/bond.svelte.js +5 -11
  69. package/dist/components/date-picker/date-picker-calendar.svelte +2 -2
  70. package/dist/components/date-picker/date-picker-root.svelte +95 -95
  71. package/dist/components/date-picker/date-picker.stories.svelte +35 -35
  72. package/dist/components/dialog/bond.svelte.d.ts +13 -3
  73. package/dist/components/dialog/bond.svelte.js +52 -6
  74. package/dist/components/dialog/dialog-content.svelte +2 -20
  75. package/dist/components/dialog/dialog-root.svelte +3 -22
  76. package/dist/components/dialog/dialog.stories.svelte +64 -64
  77. package/dist/components/dialog/motion.svelte.d.ts +13 -0
  78. package/dist/components/dialog/motion.svelte.js +44 -0
  79. package/dist/components/drawer/attachments.svelte.d.ts +1 -1
  80. package/dist/components/drawer/attachments.svelte.js +1 -3
  81. package/dist/components/drawer/bond.svelte.d.ts +30 -9
  82. package/dist/components/drawer/bond.svelte.js +80 -24
  83. package/dist/components/drawer/drawer-content.svelte +49 -57
  84. package/dist/components/drawer/drawer-root.svelte +5 -4
  85. package/dist/components/drawer/drawer.stories.svelte +141 -212
  86. package/dist/components/drawer/index.d.ts +2 -0
  87. package/dist/components/drawer/index.js +2 -0
  88. package/dist/components/drawer/motion.d.ts +15 -0
  89. package/dist/components/drawer/motion.js +28 -0
  90. package/dist/components/dropdown/atoms.d.ts +1 -1
  91. package/dist/components/dropdown/atoms.js +1 -1
  92. package/dist/components/dropdown/bond.svelte.d.ts +22 -19
  93. package/dist/components/dropdown/bond.svelte.js +29 -53
  94. package/dist/components/dropdown/dropdown-root.svelte +7 -1
  95. package/dist/components/dropdown/dropdown-values.svelte +17 -17
  96. package/dist/components/dropdown/dropdown-values.svelte.d.ts +1 -2
  97. package/dist/components/dropdown/dropdown.stories.svelte +13 -10
  98. package/dist/components/dropdown/index.d.ts +2 -0
  99. package/dist/components/dropdown/index.js +1 -0
  100. package/dist/components/dropdown/item/attachments.svelte.d.ts +2 -2
  101. package/dist/components/dropdown/item/attachments.svelte.js +2 -2
  102. package/dist/components/dropdown/item/controller.svelte.d.ts +34 -0
  103. package/dist/components/dropdown/item/controller.svelte.js +82 -0
  104. package/dist/components/dropdown/item/dropdown-item.svelte +109 -102
  105. package/dist/components/dropdown/item/dropdown-item.svelte.d.ts +13 -28
  106. package/dist/components/dropdown/item/index.d.ts +3 -0
  107. package/dist/components/dropdown/item/index.js +3 -0
  108. package/dist/components/dropdown/item/types.d.ts +29 -0
  109. package/dist/components/dropdown/item/types.js +1 -0
  110. package/dist/components/form/form.stories.svelte +96 -96
  111. package/dist/components/image/image.stories.svelte +20 -20
  112. package/dist/components/input/input.stories.svelte +35 -35
  113. package/dist/components/label/label.stories.svelte +15 -15
  114. package/dist/components/lazy/lazy.stories.svelte +28 -28
  115. package/dist/components/link/link.stories.svelte +15 -15
  116. package/dist/components/list/list-item.svelte +2 -2
  117. package/dist/components/menu/atoms.d.ts +9 -3
  118. package/dist/components/menu/atoms.js +9 -3
  119. package/dist/components/menu/bond.svelte.d.ts +54 -0
  120. package/dist/components/menu/bond.svelte.js +132 -0
  121. package/dist/components/menu/index.d.ts +3 -1
  122. package/dist/components/menu/index.js +2 -1
  123. package/dist/components/menu/item/controller.svelte.d.ts +26 -0
  124. package/dist/components/menu/item/controller.svelte.js +69 -0
  125. package/dist/components/menu/item/index.d.ts +2 -0
  126. package/dist/components/menu/item/index.js +2 -0
  127. package/dist/components/menu/item/menu-item.svelte +103 -0
  128. package/dist/components/menu/item/menu-item.svelte.d.ts +31 -0
  129. package/dist/components/menu/item/types.d.ts +62 -0
  130. package/dist/components/menu/item/types.js +1 -0
  131. package/dist/components/menu/{menu-list.svelte → menu-content.svelte} +40 -40
  132. package/dist/components/menu/{menu-list.svelte.d.ts → menu-content.svelte.d.ts} +3 -3
  133. package/dist/components/menu/menu-root.svelte +15 -0
  134. package/dist/components/menu/menu-root.svelte.d.ts +8 -0
  135. package/dist/components/menu/menu.stories.svelte +5 -5
  136. package/dist/components/menu/types.d.ts +0 -7
  137. package/dist/components/popover/bond.svelte.d.ts +18 -8
  138. package/dist/components/popover/bond.svelte.js +76 -40
  139. package/dist/components/popover/motion.d.ts +6 -0
  140. package/dist/components/popover/motion.js +56 -0
  141. package/dist/components/popover/popover-arrow.svelte +111 -111
  142. package/dist/components/popover/popover-content.svelte +137 -175
  143. package/dist/components/popover/popover-indicator.svelte +44 -44
  144. package/dist/components/popover/popover-root.svelte +48 -48
  145. package/dist/components/popover/popover.stories.svelte +37 -49
  146. package/dist/components/popover/types.d.ts +9 -7
  147. package/dist/components/portal/active-portal.svelte +12 -5
  148. package/dist/components/portal/active-portal.svelte.d.ts +2 -9
  149. package/dist/components/portal/portal-root.svelte +1 -8
  150. package/dist/components/portal/portal-root.svelte.d.ts +4 -6
  151. package/dist/components/portal/teleport.svelte +1 -2
  152. package/dist/components/portal/teleport.svelte.d.ts +3 -4
  153. package/dist/components/qr-code/qr-code.stories.svelte +18 -18
  154. package/dist/components/radio/radio-group.stories.svelte +41 -41
  155. package/dist/components/radio/radio.stories.svelte +17 -17
  156. package/dist/components/radio/radio.svelte +109 -109
  157. package/dist/components/radio/types.d.ts +98 -0
  158. package/dist/components/radio/types.js +2 -0
  159. package/dist/components/root/index.d.ts +1 -0
  160. package/dist/components/root/index.js +1 -0
  161. package/dist/components/root/l0-portal.svelte +8 -0
  162. package/dist/components/{radio/types.svelte.d.ts → root/l0-portal.svelte.d.ts} +3 -3
  163. package/dist/components/root/l1-portal.svelte +7 -0
  164. package/dist/components/root/l1-portal.svelte.d.ts +26 -0
  165. package/dist/components/root/root.css +119 -119
  166. package/dist/components/root/root.svelte +26 -44
  167. package/dist/components/root/root.svelte.d.ts +2 -6
  168. package/dist/components/root/toasts-portal.svelte +7 -0
  169. package/dist/components/root/toasts-portal.svelte.d.ts +26 -0
  170. package/dist/components/root/types.d.ts +17 -0
  171. package/dist/components/scrollable/scrollable-root.svelte.d.ts +2 -2
  172. package/dist/components/scrollable/scrollable.stories.svelte +116 -116
  173. package/dist/components/sidebar/index.d.ts +2 -0
  174. package/dist/components/sidebar/index.js +2 -0
  175. package/dist/components/sidebar/motion.svelte.d.ts +11 -0
  176. package/dist/components/sidebar/motion.svelte.js +16 -0
  177. package/dist/components/sidebar/sidebar-content.svelte +40 -50
  178. package/dist/components/sidebar/sidebar-root.svelte +39 -39
  179. package/dist/components/sidebar/sidebar.stories.svelte +43 -43
  180. package/dist/components/sidebar/types.d.ts +2 -12
  181. package/dist/components/tabs/tabs.stories.svelte +56 -56
  182. package/dist/components/textarea/atoms.d.ts +1 -0
  183. package/dist/components/textarea/atoms.js +1 -0
  184. package/dist/components/textarea/textarea-input.svelte +4 -1
  185. package/dist/components/textarea/textarea-root.svelte +2 -2
  186. package/dist/components/textarea/textarea-root.svelte.d.ts +2 -0
  187. package/dist/components/tooltip/tooltip-trigger.svelte +39 -39
  188. package/dist/components/tooltip/tooltip-trigger.svelte.d.ts +1 -0
  189. package/dist/components/tooltip/tooltip.stories.svelte +32 -32
  190. package/dist/components/tree/index.d.ts +1 -0
  191. package/dist/components/tree/index.js +1 -0
  192. package/dist/components/tree/motion.svelte.d.ts +6 -0
  193. package/dist/components/tree/motion.svelte.js +14 -0
  194. package/dist/components/tree/tree-body.svelte +4 -3
  195. package/dist/components/tree/tree.stories.svelte +142 -142
  196. package/dist/context/preset.svelte.d.ts +3 -1
  197. package/dist/icons/icon-copy.svelte +6 -0
  198. package/dist/icons/icon-copy.svelte.d.ts +26 -0
  199. package/dist/utils/dom.svelte.d.ts +2 -0
  200. package/dist/utils/dom.svelte.js +21 -0
  201. package/dist/utils/function.d.ts +1 -1
  202. package/dist/utils/promise.svelte.d.ts +5 -0
  203. package/dist/utils/promise.svelte.js +20 -0
  204. package/package.json +4 -3
  205. package/dist/components/combobox/compobox-item.svelte.d.ts +0 -34
  206. package/dist/components/combobox/compobox.stories.svelte +0 -51
  207. package/dist/components/combobox/compobox.stories.svelte.d.ts +0 -3
  208. package/dist/components/dropdown/item/bond.svelte.d.ts +0 -42
  209. package/dist/components/dropdown/item/bond.svelte.js +0 -99
  210. package/dist/components/menu/menu-item.svelte +0 -51
  211. package/dist/components/menu/menu-item.svelte.d.ts +0 -36
  212. package/dist/components/radio/types.svelte +0 -0
  213. package/llm/composition.md +0 -395
  214. package/llm/crafting.md +0 -838
  215. package/llm/motion.md +0 -970
  216. package/llm/philosophy.md +0 -23
  217. package/llm/preset-variant-integration.md +0 -516
  218. package/llm/preset.md +0 -383
  219. package/llm/styling.md +0 -216
  220. package/llm/usage.md +0 -46
  221. package/llm/variants.md +0 -1259
@@ -1,2 +1,3 @@
1
1
  export { on } from './event.svelte';
2
2
  export { resizeObserver } from './resize-observer.svelte';
3
+ export { clickout } from './clickout.svelte';
@@ -1,2 +1,3 @@
1
1
  export { on } from './event.svelte';
2
2
  export { resizeObserver } from './resize-observer.svelte';
3
+ export { clickout } from './clickout.svelte';
@@ -1,61 +1,65 @@
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
- ...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,145 +1,70 @@
1
- <script module>
2
- import { defineMeta } from '@storybook/addon-svelte-csf';
3
- import { Accordion as AAccordion, AccordionItem } from '.';
4
- import { linear } from 'svelte/easing';
5
- import { animate } from 'motion';
6
-
7
- // More on how to set up stories at: https://storybook.js.org/docs/writing-stories
8
- const { Story } = defineMeta({
9
- title: 'Atoms/Accordion',
10
- // This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs
11
-
12
- parameters: {
13
- // More on how to position stories at: https://storybook.js.org/docs/configure/story-layout
14
- layout: 'fullscreen'
15
- },
16
- args: {}
17
- });
18
- </script>
19
-
20
- <script lang="ts">
21
- </script>
22
-
23
- <Story name="Accordion" args={{ collapsible: false, multiple: false, disabled: false }}>
24
- {#snippet children(args)}
25
- <AAccordion class="backdrop-blur-sm" {...args}>
26
- <AccordionItem.Root>
27
- <AccordionItem.Header>
28
- <div>Hello Atomic UI 1</div>
29
- <AccordionItem.Indicator />
30
- </AccordionItem.Header>
31
-
32
- <AccordionItem.Body
33
- initial={(node) => {
34
- Object.assign(node.style, { opacity: 0, height: 0 });
35
- }}
36
- enter={function (node) {
37
- const d = 0.2;
38
- animate(
39
- node,
40
- {
41
- opacity: 1,
42
- height: 'auto'
43
- },
44
- {
45
- duration: d
46
- }
47
- );
48
-
49
- return { duration: d * 1000 };
50
- }}
51
- exit={(node) => {
52
- const d = 0.2;
53
- animate(node, { opacity: 0, height: 0 }, { duration: d });
54
-
55
- return { duration: d * 1000 };
56
- }}
57
- >
58
- <div class="p-2">
59
- Mauris et habitasse cubilia potenti at condimentum iaculis nam. Ante fusce litora
60
- tristique letius libero. Curabitur vitae cursus consectetur feugiat aenean viverra vel
61
- dolor diam nascetur.
62
- </div>
63
- </AccordionItem.Body>
64
- </AccordionItem.Root>
65
-
66
- <AccordionItem.Root>
67
- <AccordionItem.Header>
68
- <div>Hello Atomic UI 2</div>
69
- <AccordionItem.Indicator />
70
- </AccordionItem.Header>
71
-
72
- <AccordionItem.Body
73
- initial={(node) => {
74
- Object.assign(node.style, { opacity: 0, height: 0 });
75
- }}
76
- enter={(node) => {
77
- animate(
78
- node,
79
- {
80
- opacity: 1,
81
- height: 'auto'
82
- },
83
- {
84
- duration: 0.2,
85
- ease: linear
86
- }
87
- );
88
-
89
- return { duration: 0.2 };
90
- }}
91
- exit={(node) => {
92
- animate(node, { opacity: 0, height: 0 }, { duration: 0.2, ease: linear });
93
-
94
- return { duration: 0.2 };
95
- }}
96
- >
97
- <div class="p-2">
98
- Mauris et habitasse cubilia potenti at condimentum iaculis nam. Ante fusce litora
99
- tristique letius libero. Curabitur vitae cursus consectetur feugiat aenean viverra vel
100
- dolor diam nascetur.
101
- </div>
102
- </AccordionItem.Body>
103
- </AccordionItem.Root>
104
-
105
- <AccordionItem.Root>
106
- <AccordionItem.Header>
107
- <div>Hello Atomic UI 3</div>
108
- <AccordionItem.Indicator />
109
- </AccordionItem.Header>
110
-
111
- <AccordionItem.Body
112
- initial={(node) => {
113
- Object.assign(node.style, { opacity: 0, height: 0 });
114
- }}
115
- enter={(node) => {
116
- animate(
117
- node,
118
- {
119
- opacity: 1,
120
- height: 'auto'
121
- },
122
- {
123
- duration: 0.2,
124
- ease: linear
125
- }
126
- );
127
-
128
- return { duration: 0.2 };
129
- }}
130
- exit={(node) => {
131
- animate(node, { opacity: 0, height: 0 }, { duration: 0.2, ease: linear });
132
-
133
- return { duration: 0.2 };
134
- }}
135
- >
136
- <div class="p-2">
137
- Mauris et habitasse cubilia potenti at condimentum iaculis nam. Ante fusce litora
138
- tristique letius libero. Curabitur vitae cursus consectetur feugiat aenean viverra vel
139
- dolor diam nascetur.
140
- </div>
141
- </AccordionItem.Body>
142
- </AccordionItem.Root>
143
- </AAccordion>
144
- {/snippet}
145
- </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,6 +1,7 @@
1
1
  <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
2
  import { HtmlAtom, type Base } from '../../atom';
3
3
  import { AccordionItemBond } from './bond.svelte';
4
+ import { enterAccordionItemBody, exitAccordionItemBody } from './motion.svelte';
4
5
  import type { AccordionItemBodyProps } from './types';
5
6
 
6
7
  const bond = AccordionItemBond.get();
@@ -12,9 +13,10 @@
12
13
  onmount = undefined,
13
14
  ondestroy = undefined,
14
15
  animate = undefined,
15
- enter = undefined,
16
- exit = undefined,
16
+ enter = enterAccordionItemBody(),
17
+ exit = exitAccordionItemBody(),
17
18
  initial = undefined,
19
+ preset = 'accordion.item.body',
18
20
  ...restProps
19
21
  }: AccordionItemBodyProps<E, B> = $props();
20
22
 
@@ -26,9 +28,9 @@
26
28
 
27
29
  {#if isOpen}
28
30
  <HtmlAtom
29
- preset="accordion.item.body"
30
- class={['border-border box-content', '$preset', klass]}
31
+ {preset}
31
32
  {bond}
33
+ class={['border-border box-content h-0 opacity-0', '$preset', klass]}
32
34
  onmount={onmount?.bind(bond.state)}
33
35
  ondestroy={ondestroy?.bind(bond.state)}
34
36
  animate={animate?.bind(bond.state)}
@@ -14,6 +14,7 @@
14
14
  enter = undefined,
15
15
  exit = undefined,
16
16
  initial = undefined,
17
+ preset = 'accordion.item.header',
17
18
  ...restProps
18
19
  }: AccordionItemHeaderProps = $props();
19
20
 
@@ -29,7 +30,7 @@
29
30
  <HtmlAtom
30
31
  {as}
31
32
  {bond}
32
- preset="accordion.item.header"
33
+ {preset}
33
34
  class={[
34
35
  'border-border relative box-border flex w-full cursor-pointer items-center',
35
36
  '$preset',
@@ -18,6 +18,7 @@
18
18
  enter = undefined,
19
19
  exit = undefined,
20
20
  initial = undefined,
21
+ preset = 'accordion.item.indicator',
21
22
  ...restProps
22
23
  }: AccordionItemIndicatorProps<E, B> = $props();
23
24
 
@@ -32,7 +33,7 @@
32
33
  </script>
33
34
 
34
35
  <HtmlAtom
35
- preset="accordion.item.indicator"
36
+ {preset}
36
37
  class={['border-border pointer-events-none flex items-center justify-center', '$preset', klass]}
37
38
  onmount={onmount?.bind(bond.state)}
38
39
  ondestroy={ondestroy?.bind(bond.state)}
@@ -22,6 +22,7 @@
22
22
  enter = undefined,
23
23
  exit = undefined,
24
24
  initial = undefined,
25
+ preset = 'accordion.item',
25
26
  ...restProps
26
27
  }: AccordionItemRootProps<E, B> = $props();
27
28
 
@@ -51,7 +52,7 @@
51
52
 
52
53
  <HtmlAtom
53
54
  {bond}
54
- preset="accordion.item"
55
+ {preset}
55
56
  class={['border-border', '$preset', klass]}
56
57
  onmount={onmount?.bind(bond.state)}
57
58
  ondestroy={ondestroy?.bind(bond.state)}
@@ -3,6 +3,8 @@ import { Bond, BondState, type BondStateProps } from '../../../shared/bond.svelt
3
3
  export type AccordionItemBondProps = BondStateProps & {
4
4
  value: string;
5
5
  disabled: boolean;
6
+ multiple: boolean;
7
+ collapsible: boolean;
6
8
  };
7
9
  export type AccordionItemBondElements = {
8
10
  root: HTMLElement;
@@ -1,2 +1,5 @@
1
1
  export * as AccordionItem from './atoms';
2
+ export * from './bond.svelte';
3
+ export * from './attachments.svelte';
4
+ export * from './motion.svelte';
2
5
  export type * from './types';
@@ -1 +1,4 @@
1
1
  export * as AccordionItem from './atoms';
2
+ export * from './bond.svelte';
3
+ export * from './attachments.svelte';
4
+ export * from './motion.svelte';
@@ -0,0 +1,15 @@
1
+ import { type Easing } from 'motion';
2
+ export type EnterAccordionItemBodyParams = {
3
+ duration?: number;
4
+ delay?: number;
5
+ ease?: Easing | Easing[] | (string & {});
6
+ };
7
+ export declare function enterAccordionItemBody(params?: EnterAccordionItemBodyParams): (node: HTMLElement) => {
8
+ duration: number;
9
+ delay: number;
10
+ };
11
+ export type ExitAccordionItemBodyParams = EnterAccordionItemBodyParams;
12
+ export declare function exitAccordionItemBody(params?: ExitAccordionItemBodyParams): (node: HTMLElement) => {
13
+ duration: number;
14
+ delay: number;
15
+ };
@@ -0,0 +1,30 @@
1
+ import { DURATION } from '../../../shared';
2
+ import { animate } from 'motion';
3
+ export function enterAccordionItemBody(params = {}) {
4
+ return (node) => {
5
+ const { duration = DURATION.normal / 1000, delay = 0, ease = 'linear' } = params;
6
+ animate(node, {
7
+ opacity: [0, 1],
8
+ height: 'auto'
9
+ }, {
10
+ duration,
11
+ delay,
12
+ ease
13
+ });
14
+ return { duration: duration * 1000, delay: delay * 1000 };
15
+ };
16
+ }
17
+ export function exitAccordionItemBody(params = {}) {
18
+ return (node) => {
19
+ const { duration = DURATION.normal / 1000, delay = 0.1, ease = 'linear' } = params;
20
+ animate(node, {
21
+ opacity: [1, 0],
22
+ height: 0
23
+ }, {
24
+ duration,
25
+ delay,
26
+ ease
27
+ });
28
+ return { duration: duration * 1000, delay: delay * 1000 };
29
+ };
30
+ }
@@ -1,6 +1,5 @@
1
- import type { Snippet } from 'svelte';
2
1
  import type { HtmlAtomProps, Base } from '../../atom';
3
- import type { Factory, Override } from '../../../types';
2
+ import type { Factory } from '../../../types';
4
3
  import type { AccordionItemBond } from './bond.svelte';
5
4
  /**
6
5
  * Extend this interface to add custom accordion item root properties in your application.
@@ -22,31 +21,15 @@ export interface AccordionItemBodyExtendProps {
22
21
  */
23
22
  export interface AccordionItemIndicatorExtendProps {
24
23
  }
25
- export interface AccordionItemRootProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> extends Override<HtmlAtomProps<E, B>, {
26
- children?: Snippet<[{
27
- accordionItem: AccordionItemBond;
28
- }]>;
29
- }>, AccordionItemRootExtendProps {
24
+ export interface AccordionItemRootProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> extends HtmlAtomProps<E, B>, AccordionItemRootExtendProps {
30
25
  value?: string;
31
26
  data?: any;
32
27
  disabled?: boolean;
33
28
  factory?: Factory<AccordionItemBond>;
34
29
  }
35
- export interface AccordionItemHeaderProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> extends Override<HtmlAtomProps<E, B>, {
36
- children?: Snippet<[{
37
- accordionItem: AccordionItemBond;
38
- }]>;
39
- }>, AccordionItemHeaderExtendProps {
40
- }
41
- export interface AccordionItemBodyProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> extends Override<HtmlAtomProps<E, B>, {
42
- children?: Snippet<[{
43
- accordionItem: AccordionItemBond;
44
- }]>;
45
- }>, AccordionItemBodyExtendProps {
46
- }
47
- export interface AccordionItemIndicatorProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> extends Override<HtmlAtomProps<E, B>, {
48
- children?: Snippet<[{
49
- accordionItem: AccordionItemBond;
50
- }]>;
51
- }>, AccordionItemIndicatorExtendProps {
30
+ export interface AccordionItemHeaderProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> extends HtmlAtomProps<E, B>, AccordionItemHeaderExtendProps {
31
+ }
32
+ export interface AccordionItemBodyProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> extends HtmlAtomProps<E, B>, AccordionItemBodyExtendProps {
33
+ }
34
+ export interface AccordionItemIndicatorProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> extends HtmlAtomProps<E, B>, AccordionItemIndicatorExtendProps {
52
35
  }
@@ -26,45 +26,41 @@
26
26
  ...restProps
27
27
  }: AlertCloseButtonProps<E, B> & HTMLAttributes<Element> = $props();
28
28
 
29
- const isDismissible = $derived(bond?.state.isDismissible ?? false);
30
-
31
29
  const closeButtonProps = $derived({
32
30
  ...bond?.closeButton(),
33
31
  ...restProps
34
32
  });
35
33
  </script>
36
34
 
37
- {#if isDismissible}
38
- <HtmlAtom
39
- {as}
40
- {bond}
41
- {preset}
42
- class={[
43
- 'alert-close-button border-border flex size-6 items-center justify-center rounded p-0.5 transition-colors hover:bg-black/10 dark:hover:bg-white/10',
44
- '$preset',
45
- klass
46
- ]}
47
- onmount={onmount?.bind(bond.state)}
48
- ondestroy={ondestroy?.bind(bond.state)}
49
- animate={animate?.bind(bond.state)}
50
- enter={enter?.bind(bond.state)}
51
- exit={exit?.bind(bond.state)}
52
- initial={initial?.bind(bond.state)}
53
- {...closeButtonProps}
54
- >
55
- {#if children}
56
- {@render children({ alert: bond! })}
57
- {:else}
58
- <Icon class="h-full">
59
- <svg fill="none" stroke="currentColor" viewBox="0 0 24 24">
60
- <path
61
- stroke-linecap="round"
62
- stroke-linejoin="round"
63
- stroke-width="2"
64
- d="M6 18L18 6M6 6l12 12"
65
- />
66
- </svg>
67
- </Icon>
68
- {/if}
69
- </HtmlAtom>
70
- {/if}
35
+ <HtmlAtom
36
+ {as}
37
+ {bond}
38
+ {preset}
39
+ class={[
40
+ 'alert-close-button border-border flex size-6 items-center justify-center rounded p-0.5 transition-colors hover:bg-black/10 dark:hover:bg-white/10',
41
+ '$preset',
42
+ klass
43
+ ]}
44
+ onmount={onmount?.bind(bond.state)}
45
+ ondestroy={ondestroy?.bind(bond.state)}
46
+ animate={animate?.bind(bond.state)}
47
+ enter={enter?.bind(bond.state)}
48
+ exit={exit?.bind(bond.state)}
49
+ initial={initial?.bind(bond.state)}
50
+ {...closeButtonProps}
51
+ >
52
+ {#if children}
53
+ {@render children({ alert: bond! })}
54
+ {:else}
55
+ <Icon class="h-full">
56
+ <svg fill="none" stroke="currentColor" viewBox="0 0 24 24">
57
+ <path
58
+ stroke-linecap="round"
59
+ stroke-linejoin="round"
60
+ stroke-width="2"
61
+ d="M6 18L18 6M6 6l12 12"
62
+ />
63
+ </svg>
64
+ </Icon>
65
+ {/if}
66
+ </HtmlAtom>
@@ -1,7 +1,7 @@
1
1
  <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
2
  import { HtmlAtom, type Base } from '../atom';
3
3
  import { AlertBond } from './bond.svelte';
4
- export type { AlertDescriptionProps } from './types';
4
+ import type { AlertDescriptionProps } from './types';
5
5
 
6
6
  const bond = AlertBond.get();
7
7