@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,172 +1,172 @@
1
- <script module>
2
- import { defineMeta } from '@storybook/addon-svelte-csf';
3
- import { Collapsible as ACollapsible } from '.';
4
-
5
- import { animate as motion } 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/Collapsible',
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="Collapsible" args={{}}>
24
- <div class="flex w-full flex-col gap-2">
25
- <ACollapsible.Root>
26
- {#snippet children({ collapsible })}
27
- {@const isOpen = collapsible.state.props.open}
28
-
29
- <ACollapsible.Header class="">
30
- <div>Hello Atoms UI 1</div>
31
- <ACollapsible.Indicator />
32
- </ACollapsible.Header>
33
-
34
- <ACollapsible.Body
35
- class={['pointer-events-none h-0 opacity-0', isOpen && 'pointer-events-auto']}
36
- enter={(node) => {
37
- motion(
38
- node,
39
- {
40
- opacity: +isOpen,
41
- height: isOpen ? 'auto' : 0
42
- },
43
- {
44
- duration: 0.2,
45
- ease: 'linear'
46
- }
47
- );
48
- return { duration: 0.2 };
49
- }}
50
- exit={(node) => {
51
- motion(node, { opacity: 0, height: 0 }, { duration: 0.2, ease: 'linear' });
52
- return { duration: 0.2 };
53
- }}
54
- animate={(node) => {
55
- motion(
56
- node,
57
- {
58
- opacity: +isOpen,
59
- height: isOpen ? 'auto' : 0
60
- },
61
- { duration: 0.2, ease: 'linear' }
62
- );
63
- }}
64
- >
65
- <div class="py-2">
66
- Mauris et habitasse cubilia potenti at condimentum iaculis nam. Ante fusce litora
67
- tristique letius libero. Curabitur vitae cursus consectetur feugiat aenean viverra vel
68
- dolor diam nascetur.
69
- </div>
70
- </ACollapsible.Body>
71
- {/snippet}
72
- </ACollapsible.Root>
73
-
74
- <ACollapsible.Root>
75
- {#snippet children({ collapsible })}
76
- {@const isOpen = collapsible.state.isOpen}
77
-
78
- <ACollapsible.Header class="">
79
- <div>Hello Atoms UI 2</div>
80
- <ACollapsible.Indicator />
81
- </ACollapsible.Header>
82
-
83
- <ACollapsible.Body
84
- class={['pointer-events-none h-0 opacity-0', isOpen && 'pointer-events-auto']}
85
- enter={(node) => {
86
- motion(
87
- node,
88
- {
89
- opacity: +isOpen,
90
- height: isOpen ? 'auto' : 0
91
- },
92
- {
93
- duration: 0.2,
94
- ease: 'linear'
95
- }
96
- );
97
- return { duration: 0.2 };
98
- }}
99
- exit={(node) => {
100
- motion(node, { opacity: 0, height: 0 }, { duration: 0.2, ease: 'linear' });
101
- return { duration: 0.2 };
102
- }}
103
- animate={(node) => {
104
- motion(
105
- node,
106
- {
107
- opacity: +isOpen,
108
- height: isOpen ? 'auto' : 0
109
- },
110
- { duration: 0.1, ease: 'linear' }
111
- );
112
- }}
113
- >
114
- <div class="py-2">
115
- Mauris et habitasse cubilia potenti at condimentum iaculis nam. Ante fusce litora
116
- tristique letius libero. Curabitur vitae cursus consectetur feugiat aenean viverra vel
117
- dolor diam nascetur.
118
- </div>
119
- </ACollapsible.Body>
120
- {/snippet}
121
- </ACollapsible.Root>
122
-
123
- <ACollapsible.Root>
124
- {#snippet children({ collapsible })}
125
- {@const isOpen = collapsible.state.isOpen}
126
-
127
- <ACollapsible.Header class="">
128
- <div>Hello Atoms UI 3</div>
129
- <ACollapsible.Indicator />
130
- </ACollapsible.Header>
131
-
132
- <ACollapsible.Body
133
- class={['pointer-events-none h-0 opacity-0', isOpen && 'pointer-events-auto']}
134
- enter={(node) => {
135
- motion(
136
- node,
137
- {
138
- opacity: +isOpen,
139
- height: isOpen ? 'auto' : 0
140
- },
141
- {
142
- duration: 0.2,
143
- ease: 'linear'
144
- }
145
- );
146
- return { duration: 0.2 };
147
- }}
148
- exit={(node) => {
149
- motion(node, { opacity: 0, height: 0 }, { duration: 0.2, ease: 'linear' });
150
- return { duration: 0.2 };
151
- }}
152
- animate={(node) => {
153
- motion(
154
- node,
155
- {
156
- opacity: +isOpen,
157
- height: isOpen ? 'auto' : 0
158
- },
159
- { duration: 0.1, ease: 'linear' }
160
- );
161
- }}
162
- >
163
- <div class="py-2">
164
- Mauris et habitasse cubilia potenti at condimentum iaculis nam. Ante fusce litora
165
- tristique letius libero. Curabitur vitae cursus consectetur feugiat aenean viverra vel
166
- dolor diam nascetur.
167
- </div>
168
- </ACollapsible.Body>
169
- {/snippet}
170
- </ACollapsible.Root>
171
- </div>
172
- </Story>
1
+ <script module>
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import { Collapsible as ACollapsible } from '.';
4
+
5
+ import { animate as motion } 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/Collapsible',
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="Collapsible" args={{}}>
24
+ <div class="flex w-full flex-col gap-2">
25
+ <ACollapsible.Root>
26
+ {#snippet children({ collapsible })}
27
+ {@const isOpen = collapsible.state.props.open}
28
+
29
+ <ACollapsible.Header class="">
30
+ <div>Hello Atoms UI 1</div>
31
+ <ACollapsible.Indicator />
32
+ </ACollapsible.Header>
33
+
34
+ <ACollapsible.Body
35
+ class={['pointer-events-none h-0 opacity-0', isOpen && 'pointer-events-auto']}
36
+ enter={(node) => {
37
+ motion(
38
+ node,
39
+ {
40
+ opacity: +isOpen,
41
+ height: isOpen ? 'auto' : 0
42
+ },
43
+ {
44
+ duration: 0.2,
45
+ ease: 'linear'
46
+ }
47
+ );
48
+ return { duration: 0.2 };
49
+ }}
50
+ exit={(node) => {
51
+ motion(node, { opacity: 0, height: 0 }, { duration: 0.2, ease: 'linear' });
52
+ return { duration: 0.2 };
53
+ }}
54
+ animate={(node) => {
55
+ motion(
56
+ node,
57
+ {
58
+ opacity: +isOpen,
59
+ height: isOpen ? 'auto' : 0
60
+ },
61
+ { duration: 0.2, ease: 'linear' }
62
+ );
63
+ }}
64
+ >
65
+ <div class="py-2">
66
+ Mauris et habitasse cubilia potenti at condimentum iaculis nam. Ante fusce litora
67
+ tristique letius libero. Curabitur vitae cursus consectetur feugiat aenean viverra vel
68
+ dolor diam nascetur.
69
+ </div>
70
+ </ACollapsible.Body>
71
+ {/snippet}
72
+ </ACollapsible.Root>
73
+
74
+ <ACollapsible.Root>
75
+ {#snippet children({ collapsible })}
76
+ {@const isOpen = collapsible.state.isOpen}
77
+
78
+ <ACollapsible.Header class="">
79
+ <div>Hello Atoms UI 2</div>
80
+ <ACollapsible.Indicator />
81
+ </ACollapsible.Header>
82
+
83
+ <ACollapsible.Body
84
+ class={['pointer-events-none h-0 opacity-0', isOpen && 'pointer-events-auto']}
85
+ enter={(node) => {
86
+ motion(
87
+ node,
88
+ {
89
+ opacity: +isOpen,
90
+ height: isOpen ? 'auto' : 0
91
+ },
92
+ {
93
+ duration: 0.2,
94
+ ease: 'linear'
95
+ }
96
+ );
97
+ return { duration: 0.2 };
98
+ }}
99
+ exit={(node) => {
100
+ motion(node, { opacity: 0, height: 0 }, { duration: 0.2, ease: 'linear' });
101
+ return { duration: 0.2 };
102
+ }}
103
+ animate={(node) => {
104
+ motion(
105
+ node,
106
+ {
107
+ opacity: +isOpen,
108
+ height: isOpen ? 'auto' : 0
109
+ },
110
+ { duration: 0.1, ease: 'linear' }
111
+ );
112
+ }}
113
+ >
114
+ <div class="py-2">
115
+ Mauris et habitasse cubilia potenti at condimentum iaculis nam. Ante fusce litora
116
+ tristique letius libero. Curabitur vitae cursus consectetur feugiat aenean viverra vel
117
+ dolor diam nascetur.
118
+ </div>
119
+ </ACollapsible.Body>
120
+ {/snippet}
121
+ </ACollapsible.Root>
122
+
123
+ <ACollapsible.Root>
124
+ {#snippet children({ collapsible })}
125
+ {@const isOpen = collapsible.state.isOpen}
126
+
127
+ <ACollapsible.Header class="">
128
+ <div>Hello Atoms UI 3</div>
129
+ <ACollapsible.Indicator />
130
+ </ACollapsible.Header>
131
+
132
+ <ACollapsible.Body
133
+ class={['pointer-events-none h-0 opacity-0', isOpen && 'pointer-events-auto']}
134
+ enter={(node) => {
135
+ motion(
136
+ node,
137
+ {
138
+ opacity: +isOpen,
139
+ height: isOpen ? 'auto' : 0
140
+ },
141
+ {
142
+ duration: 0.2,
143
+ ease: 'linear'
144
+ }
145
+ );
146
+ return { duration: 0.2 };
147
+ }}
148
+ exit={(node) => {
149
+ motion(node, { opacity: 0, height: 0 }, { duration: 0.2, ease: 'linear' });
150
+ return { duration: 0.2 };
151
+ }}
152
+ animate={(node) => {
153
+ motion(
154
+ node,
155
+ {
156
+ opacity: +isOpen,
157
+ height: isOpen ? 'auto' : 0
158
+ },
159
+ { duration: 0.1, ease: 'linear' }
160
+ );
161
+ }}
162
+ >
163
+ <div class="py-2">
164
+ Mauris et habitasse cubilia potenti at condimentum iaculis nam. Ante fusce litora
165
+ tristique letius libero. Curabitur vitae cursus consectetur feugiat aenean viverra vel
166
+ dolor diam nascetur.
167
+ </div>
168
+ </ACollapsible.Body>
169
+ {/snippet}
170
+ </ACollapsible.Root>
171
+ </div>
172
+ </Story>
@@ -0,0 +1,6 @@
1
+ export type AnimateCollapsibleBodyParams = {
2
+ duration?: number;
3
+ delay?: number;
4
+ ease?: string;
5
+ };
6
+ export declare function animateCollapsibleBody(params?: AnimateCollapsibleBodyParams): (node: HTMLElement) => void;
@@ -0,0 +1,15 @@
1
+ import { animate } from 'motion';
2
+ import { CollapsibleBond } from '.';
3
+ import { DURATION } from '../../shared';
4
+ export function animateCollapsibleBody(params = {}) {
5
+ const bond = CollapsibleBond.get();
6
+ return (node) => {
7
+ const { duration = DURATION.fast / 1000, delay = 0, ease } = params;
8
+ const isOpen = bond?.state.props.open ?? false;
9
+ // animate(node, { opacity: +isOpen }, { duration, ease, delay });
10
+ animate(node, {
11
+ opacity: +isOpen,
12
+ height: isOpen ? 'auto' : 0
13
+ }, { duration, delay, ease });
14
+ };
15
+ }
@@ -1,9 +1,9 @@
1
1
  export { default as Root } from './combobox-root.svelte';
2
2
  export { default as Trigger } from './combobox-trigger.svelte';
3
- export { default as Item } from './compobox-item.svelte';
3
+ export { default as Item } from './combobox-item.svelte';
4
4
  /**
5
- * @deprecated use Combobox.Control instead
5
+ * @deprecated Use Combobox.Control instead
6
6
  */
7
7
  export { default as Input } from './combobox-control.svelte';
8
8
  export { default as Control } from './combobox-control.svelte';
9
- export { Arrow, Indicator, List } from '../dropdown/atoms';
9
+ export { Arrow, Indicator, Content, List, Group, Divider, Title } from '../dropdown/atoms';
@@ -1,9 +1,9 @@
1
1
  export { default as Root } from './combobox-root.svelte';
2
2
  export { default as Trigger } from './combobox-trigger.svelte';
3
- export { default as Item } from './compobox-item.svelte';
3
+ export { default as Item } from './combobox-item.svelte';
4
4
  /**
5
- * @deprecated use Combobox.Control instead
5
+ * @deprecated Use Combobox.Control instead
6
6
  */
7
7
  export { default as Input } from './combobox-control.svelte';
8
8
  export { default as Control } from './combobox-control.svelte';
9
- export { Arrow, Indicator, List } from '../dropdown/atoms';
9
+ export { Arrow, Indicator, Content, List, Group, Divider, Title } from '../dropdown/atoms';
@@ -10,9 +10,8 @@ export type ComboboxBondElements = PopoverDomElements & {
10
10
  };
11
11
  export declare class ComboboxBond<T = unknown> extends DropdownBond<ComboboxBondProps, ComboboxBondState<T>, ComboboxBondElements> {
12
12
  constructor(s: ComboboxBondState<T>);
13
- input(props?: Record<string, unknown>): {
14
- oninput: (ev: Event) => void;
15
- onkeydown: (ev: KeyboardEvent) => void;
13
+ control(): {
14
+ [x: symbol]: (node: HTMLInputElement) => void;
16
15
  'data-atom': string;
17
16
  'data-kind': string;
18
17
  role: string;
@@ -21,11 +20,12 @@ export declare class ComboboxBond<T = unknown> extends DropdownBond<ComboboxBond
21
20
  'aria-controls': string;
22
21
  'aria-activedescendant': string | undefined;
23
22
  'aria-disabled': boolean;
24
- 'aria-label': {};
25
23
  tabindex: number;
24
+ oninput: (ev: Event) => void;
25
+ onkeydown: (ev: KeyboardEvent) => void;
26
26
  };
27
- static get: typeof DropdownBond.getContext;
28
- static set: typeof DropdownBond.setContext;
27
+ static get: typeof DropdownBond.get;
28
+ static set: typeof DropdownBond.set;
29
29
  }
30
30
  export declare class ComboboxBondState<T> extends DropdownBondState<ComboboxBondProps> {
31
31
  constructor(props: () => ComboboxBondProps);
@@ -5,7 +5,7 @@ export class ComboboxBond extends DropdownBond {
5
5
  constructor(s) {
6
6
  super(s);
7
7
  }
8
- input(props = {}) {
8
+ control() {
9
9
  return {
10
10
  'data-atom': `trigger-${this.id}`,
11
11
  'data-kind': 'combobox-input',
@@ -17,9 +17,7 @@ export class ComboboxBond extends DropdownBond {
17
17
  ? `item-${this.state.selectedItems.at(0)?.id}`
18
18
  : undefined,
19
19
  'aria-disabled': this.state.props.disabled ?? false,
20
- 'aria-label': props['aria-label'] ?? 'Choose an option',
21
20
  tabindex: this.state.props.disabled ? -1 : 0,
22
- ...props,
23
21
  oninput: (ev) => {
24
22
  const target = ev.target;
25
23
  this.state.props.query = target.value;
@@ -27,35 +25,14 @@ export class ComboboxBond extends DropdownBond {
27
25
  onkeydown: (ev) => {
28
26
  if (this.state.props.disabled)
29
27
  return;
30
- if (ev.key === 'ArrowDown' || ev.key === 'ArrowUp') {
31
- ev.preventDefault();
32
- if (document.activeElement === this.elements.input) {
33
- this.state.open();
34
- if (ev.key === 'ArrowDown') {
35
- this.state.highlightNextItem();
36
- }
37
- else if (ev.key === 'ArrowUp') {
38
- this.state.highlightPreviousItem();
39
- }
40
- }
41
- }
42
- if (ev.key === 'Escape') {
43
- ev.preventDefault();
44
- if (document.activeElement === this.elements.input) {
45
- this.state.close();
46
- }
47
- }
48
- if (ev.key === 'Enter') {
49
- this.state.highlightedItem?.elements.root?.click();
50
- }
51
28
  },
52
29
  [createAttachmentKey()]: (node) => {
53
30
  this.elements.input = node;
54
31
  }
55
32
  };
56
33
  }
57
- static get = DropdownBond.getContext;
58
- static set = DropdownBond.setContext;
34
+ static get = DropdownBond.get;
35
+ static set = DropdownBond.set;
59
36
  }
60
37
  export class ComboboxBondState extends DropdownBondState {
61
38
  // #items: Map<string, DropdownItemAtom<T>> = new SvelteMap();
@@ -1,52 +1,52 @@
1
- <script lang="ts">
2
- import { onMount } from 'svelte';
3
- import { Input } from '../input';
4
- import { ComboboxBond } from './bond.svelte';
5
-
6
- const bond = ComboboxBond.get() as ComboboxBond<{}>;
7
-
8
- if (!bond) {
9
- throw new Error('Combobox atom was not found');
10
- }
11
-
12
- let {
13
- class: klass = '',
14
- children = undefined,
15
- onmount = undefined,
16
- ondestroy = undefined,
17
- animate = undefined,
18
- enter = undefined,
19
- exit = undefined,
20
- initial = undefined,
21
- ...restProps
22
- } = $props();
23
-
24
- let isMounted = $state(false);
25
-
26
- onMount(() => {
27
- isMounted = true;
28
- });
29
-
30
- const isMultiple = $derived(bond?.state.props?.multiple ?? false);
31
- const selectedText = $derived(
32
- isMounted || isMultiple ? (bond.state.selectedItems.at(0)?.text ?? '') : ''
33
- );
34
-
35
- const value = $derived(
36
- bond?.state.props?.query ?? (bond?.state.props?.text || selectedText || '')
37
- );
38
- </script>
39
-
40
- <Input.Control
41
- {value}
42
- preset="combobox.control"
43
- class={['border-border flex-1 py-1', '$preset', klass]}
44
- enter={enter?.bind(bond.state)}
45
- exit={exit?.bind(bond.state)}
46
- initial={initial?.bind(bond.state)}
47
- animate={animate?.bind(bond.state)}
48
- onmount={onmount?.bind(bond.state)}
49
- ondestroy={ondestroy?.bind(bond.state)}
50
- {...bond.input()}
51
- {...restProps}
52
- />
1
+ <script lang="ts">
2
+ import { onMount } from 'svelte';
3
+ import { Input } from '../input';
4
+ import { ComboboxBond } from './bond.svelte';
5
+
6
+ const bond = ComboboxBond.get() as ComboboxBond<{}>;
7
+
8
+ if (!bond) {
9
+ throw new Error('Combobox atom was not found');
10
+ }
11
+
12
+ let {
13
+ class: klass = '',
14
+ children = undefined,
15
+ onmount = undefined,
16
+ ondestroy = undefined,
17
+ animate = undefined,
18
+ enter = undefined,
19
+ exit = undefined,
20
+ initial = undefined,
21
+ ...restProps
22
+ } = $props();
23
+
24
+ let isMounted = $state(false);
25
+
26
+ onMount(() => {
27
+ isMounted = true;
28
+ });
29
+
30
+ const isMultiple = $derived(bond?.state.props?.multiple ?? false);
31
+ const selectedText = $derived(
32
+ isMounted || isMultiple ? (bond.state.selectedItems.at(0)?.text ?? '') : ''
33
+ );
34
+
35
+ const value = $derived(
36
+ bond?.state.props?.query ?? (bond?.state.props?.text || selectedText || '')
37
+ );
38
+ </script>
39
+
40
+ <Input.Control
41
+ {value}
42
+ preset="combobox.control"
43
+ class={['border-border flex-1 py-1', '$preset', klass]}
44
+ enter={enter?.bind(bond.state)}
45
+ exit={exit?.bind(bond.state)}
46
+ initial={initial?.bind(bond.state)}
47
+ animate={animate?.bind(bond.state)}
48
+ onmount={onmount?.bind(bond.state)}
49
+ ondestroy={ondestroy?.bind(bond.state)}
50
+ {...bond.control()}
51
+ {...restProps}
52
+ />