@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
@@ -1,42 +1,49 @@
1
- <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
- import type { HTMLAttributes } from 'svelte/elements';
3
- import { HtmlAtom, type Base } from '../atom';
4
- import type { SlideoverContentProps } from './types';
5
- import { DrawerBond } from './bond.svelte';
6
-
7
- type Element = HTMLElementTagNameMap[E];
8
-
9
- const bond = DrawerBond.get();
10
-
11
- let {
12
- class: klass = '',
13
- children = undefined,
14
- onmount = undefined,
15
- ondestroy = undefined,
16
- animate = undefined,
17
- enter = undefined,
18
- exit = undefined,
19
- initial = undefined,
20
- ...restProps
21
- }: SlideoverContentProps<E, B> & HTMLAttributes<Element> = $props();
22
-
23
- const contentProps = $derived({
24
- ...bond?.content(),
25
- ...restProps
26
- });
27
- </script>
28
-
29
- <HtmlAtom
30
- preset="drawer.content"
31
- class={['bg-card text-foreground border-border absolute', '$preset', klass]}
32
- {bond}
33
- onmount={onmount?.bind(bond.state)}
34
- ondestroy={ondestroy?.bind(bond.state)}
35
- enter={enter?.bind(bond.state)}
36
- exit={exit?.bind(bond.state)}
37
- initial={initial?.bind(bond.state)}
38
- animate={animate?.bind(bond.state)}
39
- {...contentProps}
40
- >
41
- {@render children?.({ drawer: bond })}
42
- </HtmlAtom>
1
+ <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import { HtmlAtom as Atom, type Base } from '../atom';
4
+ import type { SlideoverContentProps } from './types';
5
+ import { DrawerBond } from './bond.svelte';
6
+ import { animateDrawerContent } from './motion';
7
+
8
+ type Element = HTMLElementTagNameMap[E];
9
+
10
+ const bond = DrawerBond.get();
11
+ const isOpen = $derived(bond?.state.props.open);
12
+
13
+ let {
14
+ class: klass = '',
15
+ children = undefined,
16
+ onmount = undefined,
17
+ ondestroy = undefined,
18
+ animate = animateDrawerContent({ ease: 'easeOut', side: 'left' }),
19
+ enter = undefined,
20
+ exit = undefined,
21
+ initial = animateDrawerContent({ ease: 'easeOut', side: 'left', duration: 0 }),
22
+ ...restProps
23
+ }: SlideoverContentProps<E, B> & HTMLAttributes<Element> = $props();
24
+
25
+ const contentProps = $derived({
26
+ ...bond?.content(),
27
+ ...restProps
28
+ });
29
+ </script>
30
+
31
+ <Atom
32
+ preset="drawer.content"
33
+ class={[
34
+ 'bg-card text-foreground border-border pointer-events-none absolute',
35
+ isOpen && 'pointer-events-auto',
36
+ '$preset',
37
+ klass
38
+ ]}
39
+ {bond}
40
+ onmount={onmount?.bind(bond.state)}
41
+ ondestroy={ondestroy?.bind(bond.state)}
42
+ enter={enter?.bind(bond.state)}
43
+ exit={exit?.bind(bond.state)}
44
+ initial={initial?.bind(bond.state)}
45
+ animate={animate?.bind(bond.state)}
46
+ {...contentProps}
47
+ >
48
+ {@render children?.({ drawer: bond })}
49
+ </Atom>
@@ -1,224 +1,144 @@
1
- <script module>
2
- import { cubicOut } from 'svelte/easing';
3
- import gsap from 'gsap';
4
- import { defineMeta } from '@storybook/addon-svelte-csf';
5
- import { Drawer as Drawer_ } from '.';
6
- import Root from '../root/root.svelte';
7
- import { DrawerBond } from './bond.svelte';
8
- import { on } from '../../attachments/event.svelte';
9
-
10
- // More on how to set up stories at: https://storybook.js.org/docs/writing-stories
11
- const { Story } = defineMeta({
12
- title: 'Atoms/Drawer',
13
- // This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs
14
-
15
- parameters: {
16
- // More on how to position stories at: https://storybook.js.org/docs/configure/story-layout
17
- layout: 'fullscreen'
18
- },
19
- args: {}
20
- });
21
- </script>
22
-
23
- <script lang="ts">
24
- let isOpen = $state(false);
25
- </script>
26
-
27
- <Story name="Left" args={{}}>
28
- <Root class="p-4">
29
- <Drawer_.Root
30
- class=" border backdrop-blur-md backdrop-grayscale-100"
31
- bind:open={isOpen}
32
- initial={(node) => {
33
- gsap.set(node, { opacity: +isOpen });
34
- }}
35
- animate={(node) => {
36
- gsap.to(node, {
37
- opacity: +isOpen,
38
- duration: 0.3,
39
- onComplete: () => !isOpen && node.close?.()
40
- });
41
- }}
42
- {@attach (node) => {
43
- const bond = DrawerBond.get();
44
-
45
- return on('click', (ev) => {
46
- bond?.state?.close?.();
47
- })(node);
48
- }}
49
- >
50
- <Drawer_.Content
51
- class="border-border flex min-h-full w-md flex-col border-r p-8 whitespace-nowrap shadow-md"
52
- initial={(node) => {
53
- gsap.set(node, { xPercent: isOpen ? 0 : -100, left: 0 });
54
- }}
55
- animate={(node) => {
56
- gsap.to(node, { xPercent: isOpen ? 0 : -100, left: 0, duration: 0.2, ease: cubicOut });
57
- }}
58
- >
59
- <Drawer_.Header class="flex items-center justify-between">
60
- <div class="flex flex-col">
61
- <Drawer_.Title class="text-lg font-semibold">Drawer Title</Drawer_.Title>
62
- <Drawer_.Description class="text-sm break-all whitespace-break-spaces text-neutral-500"
63
- >Ac bibendum laoreet lacinia purus duis. Hendrerit quam purus maecenas tincidunt
64
- letius finibus vel tortor sociosqu proin vulputate. Consectetur velit eleifend purus
65
- mi pulvinar si tristique litora mollis lobortis.</Drawer_.Description
66
- >
67
- </div>
68
- </Drawer_.Header>
69
- <div>
70
- <div>Svelte Fluent</div>
71
- </div>
72
- </Drawer_.Content>
73
- </Drawer_.Root>
74
-
75
- <button
76
- class="bg-red-500 p-2"
77
- onclick={() => {
78
- isOpen = !isOpen;
79
- }}>Open</button
80
- >
81
- </Root>
82
- </Story>
83
-
84
- <Story name="Top" args={{}}>
85
- <Root class="p-4">
86
- <Drawer_.Root
87
- class=" border backdrop-blur-md backdrop-grayscale-100"
88
- bind:open={isOpen}
89
- initial={(node) => gsap.set(node, { opacity: +isOpen })}
90
- animate={(node) => {
91
- gsap.to(node, {
92
- opacity: +isOpen,
93
- duration: 0.3,
94
- onComplete: () => !isOpen && node.close?.()
95
- });
96
- }}
97
- {@attach (node) => {
98
- const bond = DrawerBond.get();
99
-
100
- return on('click', (ev) => {
101
- bond?.state?.close?.();
102
- })(node);
103
- }}
104
- >
105
- <Drawer_.Content
106
- class="border-border flex w-md min-w-full flex-col border-b p-8 whitespace-nowrap shadow-md"
107
- initial={(node) => {
108
- gsap.set(node, { yPercent: isOpen ? 0 : -100, top: 0 });
109
- }}
110
- animate={(node) => {
111
- gsap.to(node, { yPercent: isOpen ? 0 : -100, top: 0, duration: 0.2, ease: cubicOut });
112
- }}
113
- >
114
- <div>
115
- <div>Svelte Fluent</div>
116
- </div>
117
- </Drawer_.Content>
118
- </Drawer_.Root>
119
-
120
- <button
121
- class="bg-red-500 p-2"
122
- onclick={() => {
123
- isOpen = !isOpen;
124
- }}>Open</button
125
- >
126
- </Root>
127
- </Story>
128
-
129
- <Story name="Right" args={{}}>
130
- <Root class="p-4">
131
- <Drawer_.Root
132
- class=" border backdrop-blur-md backdrop-grayscale-100"
133
- bind:open={isOpen}
134
- initial={(node) => {
135
- gsap.set(node, { opacity: +isOpen });
136
- }}
137
- animate={(node) => {
138
- gsap.to(node, {
139
- opacity: +isOpen,
140
- duration: 0.3,
141
- onComplete: () => !isOpen && node.close?.()
142
- });
143
- }}
144
- {@attach (node) => {
145
- const bond = DrawerBond.get();
146
-
147
- return on('click', (ev) => {
148
- bond?.state?.close?.();
149
- })(node);
150
- }}
151
- >
152
- <Drawer_.Content
153
- class="border-border shadow-foreground/50 inset-y-0 flex w-md flex-col border-l p-8 whitespace-nowrap shadow-lg"
154
- initial={(node) => {
155
- gsap.set(node, { xPercent: isOpen ? 0 : 100, right: 0 });
156
- }}
157
- animate={(node) => {
158
- gsap.to(node, { xPercent: isOpen ? 0 : 100, right: 0, duration: 0.2, ease: cubicOut });
159
- }}
160
- {@attach on('click', (ev) => {
161
- ev.stopPropagation();
162
- })}
163
- >
164
- <div>
165
- <div>Svelte Fluent</div>
166
- </div>
167
- </Drawer_.Content>
168
- </Drawer_.Root>
169
-
170
- <button
171
- class="bg-red-500 p-2"
172
- onclick={() => {
173
- isOpen = !isOpen;
174
- }}>Open</button
175
- >
176
- </Root>
177
- </Story>
178
-
179
- <Story name="Bottom" args={{}}>
180
- <Root class="p-4">
181
- <Drawer_.Root
182
- class=" border backdrop-blur-md backdrop-grayscale-100"
183
- bind:open={isOpen}
184
- initial={(node) => {
185
- gsap.set(node, { opacity: +isOpen });
186
- }}
187
- animate={(node) => {
188
- gsap.to(node, {
189
- opacity: +isOpen,
190
- duration: 0.3,
191
- onComplete: () => !isOpen && node.close?.()
192
- });
193
- }}
194
- {@attach (node) => {
195
- const bond = DrawerBond.get();
196
-
197
- return on('click', (ev) => {
198
- bond?.state?.close?.();
199
- })(node);
200
- }}
201
- >
202
- <Drawer_.Content
203
- class="border-border flex w-md min-w-full flex-col border-t p-8 whitespace-nowrap shadow-md"
204
- onmount={(node) => {
205
- gsap.set(node, { yPercent: isOpen ? 0 : 100, bottom: 0 });
206
- }}
207
- animate={(node) => {
208
- gsap.to(node, { yPercent: isOpen ? 0 : 100, bottom: 0, duration: 0.2, ease: cubicOut });
209
- }}
210
- >
211
- <div>
212
- <div>Svelte Fluent</div>
213
- </div>
214
- </Drawer_.Content>
215
- </Drawer_.Root>
216
-
217
- <button
218
- class="bg-red-500 p-2"
219
- onclick={() => {
220
- isOpen = !isOpen;
221
- }}>Open</button
222
- >
223
- </Root>
224
- </Story>
1
+ <script module>
2
+ import { animate } from 'motion';
3
+ import { defineMeta } from '@storybook/addon-svelte-csf';
4
+ import { clickoutDrawer, Drawer as Drawer_ } from '.';
5
+
6
+ // More on how to set up stories at: https://storybook.js.org/docs/writing-stories
7
+ const { Story } = defineMeta({
8
+ title: 'Atoms/Drawer',
9
+ // This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs
10
+
11
+ parameters: {
12
+ // More on how to position stories at: https://storybook.js.org/docs/configure/story-layout
13
+ layout: 'fullscreen'
14
+ },
15
+ args: {}
16
+ });
17
+ </script>
18
+
19
+ <script lang="ts">
20
+ import { animateDrawerContent, animateDrawerRoot } from './motion';
21
+
22
+ let isOpen = $state(false);
23
+ </script>
24
+
25
+ <Story name="Left" args={{}}>
26
+ <Drawer_.Root
27
+ bind:open={isOpen}
28
+ class=" border backdrop-blur-md backdrop-grayscale-100"
29
+ animate={animateDrawerRoot({})}
30
+ >
31
+ <Drawer_.Content
32
+ class="border-border flex min-h-full w-md flex-col border-r p-8 whitespace-nowrap shadow-md"
33
+ animate={animateDrawerContent({ ease: 'easeOut', side: 'left' })}
34
+ {@attach clickoutDrawer((_, bond) => {
35
+ bond?.state?.close?.();
36
+ })}
37
+ >
38
+ <Drawer_.Header class="flex items-center justify-between">
39
+ <div class="flex flex-col">
40
+ <Drawer_.Title class="text-lg font-semibold">Drawer Title</Drawer_.Title>
41
+ <Drawer_.Description class="text-sm break-all whitespace-break-spaces text-neutral-500"
42
+ >Ac bibendum laoreet lacinia purus duis. Hendrerit quam purus maecenas tincidunt letius
43
+ finibus vel tortor sociosqu proin vulputate. Consectetur velit eleifend purus mi
44
+ pulvinar si tristique litora mollis lobortis.</Drawer_.Description
45
+ >
46
+ </div>
47
+ </Drawer_.Header>
48
+ <div>
49
+ <div>Svelte Fluent</div>
50
+ </div>
51
+ </Drawer_.Content>
52
+ </Drawer_.Root>
53
+
54
+ <button
55
+ class="bg-red-500 p-2"
56
+ onclick={() => {
57
+ isOpen = !isOpen;
58
+ }}>Open</button
59
+ >
60
+ </Story>
61
+
62
+ <Story name="Top" args={{}}>
63
+ <Drawer_.Root
64
+ bind:open={isOpen}
65
+ class=" border backdrop-blur-md backdrop-grayscale-100"
66
+ animate={animateDrawerRoot({})}
67
+ >
68
+ <Drawer_.Content
69
+ class="border-border flex w-md min-w-full flex-col border-b p-8 whitespace-nowrap shadow-md"
70
+ animate={animateDrawerContent({ ease: 'easeOut', side: 'top' })}
71
+ {@attach clickoutDrawer((_, bond) => {
72
+ bond?.state?.close?.();
73
+ })}
74
+ >
75
+ <div>
76
+ <div>Svelte Fluent</div>
77
+ </div>
78
+ </Drawer_.Content>
79
+ </Drawer_.Root>
80
+
81
+ <button
82
+ class="bg-red-500 p-2"
83
+ onclick={() => {
84
+ isOpen = !isOpen;
85
+ }}>Open</button
86
+ >
87
+ </Story>
88
+
89
+ <Story name="Right" args={{}}>
90
+ <Drawer_.Root
91
+ bind:open={isOpen}
92
+ class=" border backdrop-blur-md backdrop-grayscale-100"
93
+ animate={animateDrawerRoot({})}
94
+ >
95
+ <Drawer_.Content
96
+ class="border-border shadow-foreground/50 inset-y-0 flex w-md flex-col border-l p-8 whitespace-nowrap shadow-sm"
97
+ animate={animateDrawerContent({ ease: 'easeOut', side: 'right' })}
98
+ {@attach clickoutDrawer((_, bond) => {
99
+ bond?.state?.close?.();
100
+ })}
101
+ >
102
+ <div>
103
+ <div>Svelte Fluent</div>
104
+ </div>
105
+ </Drawer_.Content>
106
+ </Drawer_.Root>
107
+
108
+ <button
109
+ class="bg-red-500 p-2"
110
+ onclick={() => {
111
+ isOpen = !isOpen;
112
+ }}>Open</button
113
+ >
114
+ </Story>
115
+
116
+ <Story name="Bottom" args={{}}>
117
+ <Drawer_.Root
118
+ bind:open={isOpen}
119
+ class=" border backdrop-blur-md backdrop-grayscale-100"
120
+ initial={(node) => {
121
+ animate(node, { opacity: +isOpen }, { duration: 0 });
122
+ }}
123
+ animate={animateDrawerRoot()}
124
+ >
125
+ <Drawer_.Content
126
+ class="border-border flex w-md min-w-full flex-col border-t p-8 whitespace-nowrap shadow-md"
127
+ animate={animateDrawerContent({ ease: 'easeOut', side: 'bottom' })}
128
+ {@attach clickoutDrawer((_, bond) => {
129
+ bond?.state?.close?.();
130
+ })}
131
+ >
132
+ <div>
133
+ <div>Svelte Fluent</div>
134
+ </div>
135
+ </Drawer_.Content>
136
+ </Drawer_.Root>
137
+
138
+ <button
139
+ class="bg-red-500 p-2"
140
+ onclick={() => {
141
+ isOpen = !isOpen;
142
+ }}>Open</button
143
+ >
144
+ </Story>
@@ -1,4 +1,6 @@
1
1
  export * as Drawer from './atoms';
2
2
  export { clickoutDrawer, closeDrawer, openDrawer, drawer, toggleDrawer } from './attachments.svelte';
3
3
  export { DrawerBond, type DrawerBondElements, type DrawerBondProps, DrawerBondState } from './bond.svelte';
4
+ export * from './attachments.svelte';
5
+ export * from './motion';
4
6
  export * from './types';
@@ -1,4 +1,6 @@
1
1
  export * as Drawer from './atoms';
2
2
  export { clickoutDrawer, closeDrawer, openDrawer, drawer, toggleDrawer } from './attachments.svelte';
3
3
  export { DrawerBond, DrawerBondState } from './bond.svelte';
4
+ export * from './attachments.svelte';
5
+ export * from './motion';
4
6
  export * from './types';
@@ -0,0 +1,15 @@
1
+ import { type Easing } from 'motion';
2
+ type AnimateDrawerContentParams = {
3
+ duration?: number;
4
+ delay?: number;
5
+ ease?: Easing | Easing[];
6
+ side?: 'left' | 'right' | 'top' | 'bottom';
7
+ };
8
+ export declare function animateDrawerContent(params: AnimateDrawerContentParams): (node: HTMLElement) => void;
9
+ type AnimateDrawerRootParams = {
10
+ duration?: number;
11
+ delay?: number;
12
+ ease?: Easing | Easing[];
13
+ };
14
+ export declare function animateDrawerRoot(params?: AnimateDrawerRootParams): (node: HTMLElement) => void;
15
+ export {};
@@ -0,0 +1,28 @@
1
+ import { animate } from 'motion';
2
+ import { DURATION } from '../../shared';
3
+ import { DrawerBond } from '.';
4
+ export function animateDrawerContent(params) {
5
+ const { duration = DURATION.fast / 1000, delay = 0, ease = 'easeInOut', side = 'left' } = params;
6
+ const bond = DrawerBond.get();
7
+ const isOpen = bond?.state.props.open ?? false;
8
+ const mainProp = side === 'left' || side === 'right' ? 'x' : 'y';
9
+ const crossProp = mainProp === 'x' ? 'y' : 'x';
10
+ const d = side === 'left' || side === 'top' ? -1 : 1;
11
+ return (node) => {
12
+ animate(node, {
13
+ [mainProp]: isOpen ? 0 : d * 100 + '%',
14
+ [crossProp]: 0,
15
+ left: 'unset',
16
+ right: 'unset',
17
+ [side]: 0
18
+ }, { duration, ease, delay });
19
+ };
20
+ }
21
+ export function animateDrawerRoot(params = {}) {
22
+ const { duration = DURATION.fast / 1000, delay = 0, ease = 'easeInOut' } = params;
23
+ return (node) => {
24
+ const bond = DrawerBond.get();
25
+ const isOpen = bond?.state.props.open ?? false;
26
+ animate(node, { opacity: +isOpen }, { duration, ease, delay });
27
+ };
28
+ }
@@ -6,4 +6,4 @@ export { default as Query } from './dropdown-query.svelte';
6
6
  export { default as Value } from './dropdown-value.svelte';
7
7
  export { default as Values } from './dropdown-values.svelte';
8
8
  export { Arrow, Indicator } from '../popover/atoms';
9
- export { List } from '../menu/atoms';
9
+ export { List, Divider, Title, Group } from '../menu/atoms';
@@ -6,4 +6,4 @@ export { default as Query } from './dropdown-query.svelte';
6
6
  export { default as Value } from './dropdown-value.svelte';
7
7
  export { default as Values } from './dropdown-values.svelte';
8
8
  export { Arrow, Indicator } from '../popover/atoms';
9
- export { List } from '../menu/atoms';
9
+ export { List, Divider, Title, Group } from '../menu/atoms';
@@ -13,14 +13,18 @@ export type DropdownBondElements = PopoverDomElements & {
13
13
  export declare class DropdownBond<Props extends DropdownStateProps = DropdownStateProps, State extends DropdownBondState<Props> = DropdownBondState<Props>, Elements extends DropdownBondElements = DropdownBondElements> extends PopoverBond<Props, State, Elements> {
14
14
  constructor(state: State);
15
15
  content(props?: Record<string, unknown>): {
16
+ onchange?: (node: HTMLElement, position: import("@floating-ui/core").ComputePositionReturn) => void;
16
17
  id: string;
17
18
  role: string;
18
19
  'aria-modal': boolean;
19
20
  'aria-labelledby': string;
20
- 'aria-controlledby': string;
21
+ 'aria-hidden': boolean;
22
+ inert: string | undefined;
23
+ tabindex: number;
21
24
  'data-atom': string;
22
25
  'data-kind': string;
23
26
  'data-active': boolean;
27
+ onkeydown: ((ev: KeyboardEvent) => void) | undefined;
24
28
  };
25
29
  placeholder(): {
26
30
  [x: symbol]: (node: HTMLElement) => void;
@@ -10,7 +10,7 @@
10
10
  disabled = false,
11
11
  placements = ['bottom-start', 'bottom-end', 'top-start', 'top-end'],
12
12
  placement = 'bottom-start',
13
- offset = 4,
13
+ offset = 1,
14
14
  keys = [],
15
15
  factory = _factory,
16
16
  children = undefined,