@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,10 +1,8 @@
1
1
  <script module>
2
2
  import { defineMeta } from '@storybook/addon-svelte-csf';
3
3
  import { Scrollable as Scrollable_ } from '.';
4
- import { Root as ScrollableRoot } from './atoms';
5
- import gsap from 'gsap';
4
+ import { animate } from 'motion';
6
5
  import { ScrollableBond } from './bond.svelte';
7
- import Root from '../root/root.svelte';
8
6
  import { on } from '../../attachments/event.svelte';
9
7
 
10
8
  const { Story } = defineMeta({
@@ -13,114 +11,106 @@
13
11
  </script>
14
12
 
15
13
  <Story name="Scrollable">
16
- <Root class="p-0">
17
- {#snippet children({ args })}
18
- <div class="h-full w-full flex-1">
19
- <Scrollable_.Root
20
- class="border-border box-border flex min-h-full w-full rounded-lg border shadow-inner"
21
- open={false}
22
- {@attach (node) => {
23
- const scrollable = ScrollableBond.get();
24
- if (!scrollable) return;
14
+ {#snippet children({ args })}
15
+ <div class="h-full w-full flex-1">
16
+ <Scrollable_.Root
17
+ class="border-border box-border flex min-h-full w-full rounded-lg border shadow-inner"
18
+ open={false}
19
+ {@attach (node) => {
20
+ const scrollable = ScrollableBond.get();
21
+ if (!scrollable) return;
25
22
 
26
- const c1 = on('pointerenter', () => {
27
- scrollable.state.props.open = true;
28
- })(node);
23
+ const c1 = on('pointerenter', () => {
24
+ scrollable.state.props.open = true;
25
+ })(node);
29
26
 
30
- const c2 = on('pointerleave', () => {
31
- scrollable.state.props.open = false;
32
- })(node);
27
+ const c2 = on('pointerleave', () => {
28
+ scrollable.state.props.open = false;
29
+ })(node);
33
30
 
34
- return () => {
35
- c1();
36
- c2();
37
- };
38
- }}
39
- >
40
- {#snippet children({ scrollable })}
41
- <Scrollable_.Container class="max-h-[100svh]">
42
- <Scrollable_.Content>
43
- <div class="mx-auto w-[600px] p-4">
44
- <h3 class="mb-4 text-lg font-semibold">Scrollable Content (New API)</h3>
45
- <div class="grid grid-cols-3 gap-4">
46
- {#each Array(99) as _, i}
47
- <div class="rounded border p-4 shadow">
48
- <h4 class="font-medium">Card {i + 1}</h4>
49
- <p class="mt-2 text-sm">
50
- This is some sample content in card {i + 1}. You can scroll horizontally
51
- and vertically to see more content.
52
- </p>
53
- </div>
54
- {/each}
55
- </div>
31
+ return () => {
32
+ c1();
33
+ c2();
34
+ };
35
+ }}
36
+ >
37
+ {#snippet children({ scrollable })}
38
+ <Scrollable_.Container class="max-h-[100svh]">
39
+ <Scrollable_.Content>
40
+ <div class="mx-auto w-[600px] p-4">
41
+ <h3 class="mb-4 text-lg font-semibold">Scrollable Content (New API)</h3>
42
+ <div class="grid grid-cols-3 gap-4">
43
+ {#each Array(99) as _, i}
44
+ <div class="rounded border p-4 shadow">
45
+ <h4 class="font-medium">Card {i + 1}</h4>
46
+ <p class="mt-2 text-sm">
47
+ This is some sample content in card {i + 1}. You can scroll horizontally and
48
+ vertically to see more content.
49
+ </p>
50
+ </div>
51
+ {/each}
52
+ </div>
56
53
 
57
- <div class="bg-foreground/10 mt-6 rounded p-4">
58
- <p class="text-sm">
59
- This content area is larger than the container, so you can scroll both
60
- horizontally and vertically using the custom scrollbars or mouse wheel.
61
- </p>
62
- </div>
54
+ <div class="bg-foreground/10 mt-6 rounded p-4">
55
+ <p class="text-sm">
56
+ This content area is larger than the container, so you can scroll both
57
+ horizontally and vertically using the custom scrollbars or mouse wheel.
58
+ </p>
59
+ </div>
63
60
 
64
- <div class="mt-4 flex gap-2">
65
- <button
66
- class="rounded bg-blue-500 px-3 py-2 hover:bg-blue-600"
67
- onclick={() => scrollable.scrollTo(0, 0)}
68
- >
69
- Scroll to Top
70
- </button>
71
- <button
72
- class="rounded bg-green-500 px-3 py-2 hover:bg-green-600"
73
- onclick={() => scrollable.scrollBy(50, 50)}
74
- >
75
- Scroll +50px
76
- </button>
77
- </div>
61
+ <div class="mt-4 flex gap-2">
62
+ <button
63
+ class="rounded bg-blue-500 px-3 py-2 hover:bg-blue-600"
64
+ onclick={() => scrollable.scrollTo(0, 0)}
65
+ >
66
+ Scroll to Top
67
+ </button>
68
+ <button
69
+ class="rounded bg-green-500 px-3 py-2 hover:bg-green-600"
70
+ onclick={() => scrollable.scrollBy(50, 50)}
71
+ >
72
+ Scroll +50px
73
+ </button>
78
74
  </div>
79
- </Scrollable_.Content>
80
- </Scrollable_.Container>
75
+ </div>
76
+ </Scrollable_.Content>
77
+ </Scrollable_.Container>
81
78
 
82
- <!-- New unified vertical scrollbar -->
83
- <Scrollable_.Track
79
+ <!-- New unified vertical scrollbar -->
80
+ <Scrollable_.Track
81
+ orientation="vertical"
82
+ class="inset-y-0 right-0 w-[2px] rounded-md"
83
+ initial={(node) => {
84
+ animate(node, { opacity: 0, right: 0, top: 0, bottom: 0 }, { duration: 0 });
85
+ }}
86
+ enter={(node) => {
87
+ animate(
88
+ node,
89
+ { opacity: 1, right: 8, top: 8, bottom: 8 },
90
+ { duration: 0.3, ease: 'easeOut' }
91
+ );
92
+ return {
93
+ duration: 300
94
+ };
95
+ }}
96
+ exit={(node) => {
97
+ animate(
98
+ node,
99
+ { opacity: 0, right: 0, top: 0, bottom: 0 },
100
+ { duration: 0.3, ease: 'easeOut' }
101
+ );
102
+ return {
103
+ duration: 300
104
+ };
105
+ }}
106
+ >
107
+ <Scrollable_.Thumb
84
108
  orientation="vertical"
85
- class="inset-y-0 right-0 w-[2px] rounded-md"
86
- initial={(node) => gsap.set(node, { opacity: 0, right: 0, top: 0, bottom: 0 })}
87
- enter={(node) => {
88
- const tween = gsap.to(node, {
89
- opacity: 1,
90
- duration: 0.3,
91
- right: 8,
92
- top: 8,
93
- bottom: 8,
94
- ease: 'power2.out'
95
- });
96
-
97
- return {
98
- duration: tween.duration() * 1000
99
- };
100
- }}
101
- exit={(node) => {
102
- const tween = gsap.to(node, {
103
- opacity: 0,
104
- right: 0,
105
- top: 0,
106
- bottom: 0,
107
- duration: 0.3,
108
- ease: 'power2.out'
109
- });
110
-
111
- return {
112
- duration: tween.duration() * 1000
113
- };
114
- }}
115
- >
116
- <Scrollable_.Thumb
117
- orientation="vertical"
118
- class="left-[50%] w-2 origin-center translate-x-[-50%] rounded-none transition-colors"
119
- />
120
- </Scrollable_.Track>
121
- {/snippet}
122
- </Scrollable_.Root>
123
- </div>
124
- {/snippet}
125
- </Root>
109
+ class="left-[50%] w-2 origin-center translate-x-[-50%] rounded-none transition-colors"
110
+ />
111
+ </Scrollable_.Track>
112
+ {/snippet}
113
+ </Scrollable_.Root>
114
+ </div>
115
+ {/snippet}
126
116
  </Story>
@@ -1,3 +1,5 @@
1
1
  export * as Sidebar from './atoms';
2
+ export * from './bond.svelte';
3
+ export * from './motion.svelte';
2
4
  export * from './attachments.svelte';
3
5
  export * from './types';
@@ -1,3 +1,5 @@
1
1
  export * as Sidebar from './atoms';
2
+ export * from './bond.svelte';
3
+ export * from './motion.svelte';
2
4
  export * from './attachments.svelte';
3
5
  export * from './types';
@@ -0,0 +1,11 @@
1
+ import { type Easing } from 'motion';
2
+ type AnimateSidebarContentParams = {
3
+ duration?: number;
4
+ delay?: number;
5
+ ease?: Easing | Easing[];
6
+ axis?: 'x' | 'y';
7
+ 0?: number | string;
8
+ 1?: number | string;
9
+ };
10
+ export declare function animateSidebarContent(params: AnimateSidebarContentParams): (node: HTMLElement) => void;
11
+ export {};
@@ -0,0 +1,16 @@
1
+ import { animate } from 'motion';
2
+ import { DURATION } from '../../shared';
3
+ import { SidebarBond } from '.';
4
+ export function animateSidebarContent(params) {
5
+ const { duration = DURATION.fast / 1000, delay = 0, ease = 'easeInOut', axis = 'x', '0': collapsedSize = '96px', '1': expandedSize = 'auto' } = params;
6
+ const bond = SidebarBond.get();
7
+ const isOpen = bond?.state.props.open ?? false;
8
+ const collapsedProp = axis === 'x' ? 'min-width' : 'min-height';
9
+ const prop = axis === 'x' ? 'width' : 'height';
10
+ return (node) => {
11
+ animate(node, {
12
+ [prop]: isOpen ? expandedSize : collapsedSize,
13
+ [collapsedProp]: collapsedSize
14
+ }, { duration, ease, delay });
15
+ };
16
+ }
@@ -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 { SidebarBond } from './bond.svelte';
4
+ import { animateSidebarContent } from './motion.svelte';
4
5
  import type { SidebarRootProps } from './types';
5
6
 
6
7
  const bond = SidebarBond.get();
@@ -10,10 +11,10 @@
10
11
  children = undefined,
11
12
  onmount = undefined,
12
13
  ondestroy = undefined,
13
- animate = undefined,
14
+ animate = animateSidebarContent({ '0': '0px', '1': 'auto' }),
14
15
  enter = undefined,
15
16
  exit = undefined,
16
- initial = undefined,
17
+ initial = animateSidebarContent({ '0': '0px', '1': 'auto', duration: 0 }),
17
18
  ...restProps
18
19
  }: SidebarRootProps<E, B> = $props();
19
20
 
@@ -1,41 +1,39 @@
1
- <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
- import { defineProperty, defineState } from '../../utils';
3
- import { type Base } from '../atom';
4
- import { SidebarBond, SidebarBondState, type SidebarBondProps } from './bond.svelte';
5
- import type { SidebarRootProps } from './types';
6
-
7
- let {
8
- open = $bindable(false),
9
- disabled = false,
10
- factory = _factory,
11
- children = undefined
12
- }: SidebarRootProps<E, B> = $props();
13
-
14
- const bondProps = defineState<SidebarBondProps>(
15
- [
16
- defineProperty(
17
- 'open',
18
- () => open,
19
- (v) => {
20
- open = v;
21
- }
22
- ),
23
- defineProperty('disabled', () => disabled)
24
- ]
25
- );
26
-
27
- const bond = factory(bondProps).share();
28
-
29
- function _factory(props: typeof bondProps) {
30
- const bondState = new SidebarBondState(() => props);
31
- const bond = new SidebarBond(bondState);
32
-
33
- return bond;
34
- }
35
-
36
- export function getBond() {
37
- return bond;
38
- }
39
- </script>
40
-
41
- {@render children?.({ sidebar: bond })}
1
+ <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
+ import { defineProperty, defineState } from '../../utils';
3
+ import { type Base } from '../atom';
4
+ import { SidebarBond, SidebarBondState, type SidebarBondProps } from './bond.svelte';
5
+ import type { SidebarRootProps } from './types';
6
+
7
+ let {
8
+ open = $bindable(false),
9
+ disabled = false,
10
+ factory = _factory,
11
+ children = undefined
12
+ }: SidebarRootProps<E, B> = $props();
13
+
14
+ const bondProps = defineState<SidebarBondProps>([
15
+ defineProperty(
16
+ 'open',
17
+ () => open,
18
+ (v) => {
19
+ open = v;
20
+ }
21
+ ),
22
+ defineProperty('disabled', () => disabled)
23
+ ]);
24
+
25
+ const bond = factory(bondProps).share();
26
+
27
+ function _factory(props: typeof bondProps) {
28
+ const bondState = new SidebarBondState(() => props);
29
+ const bond = new SidebarBond(bondState);
30
+
31
+ return bond;
32
+ }
33
+
34
+ export function getBond() {
35
+ return bond;
36
+ }
37
+ </script>
38
+
39
+ {@render children?.({ sidebar: bond })}
@@ -1,54 +1,43 @@
1
- <script module>
2
- import { cubicOut } from 'svelte/easing';
3
- import gsap from 'gsap';
4
- import { defineMeta } from '@storybook/addon-svelte-csf';
5
- import { Sidebar as Sidebar_ } from '.';
6
- import Root from '../root/root.svelte';
7
- import { on } from '../../attachments';
8
- import { SidebarBond } from './bond.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/Sidebar',
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
- $inspect(isOpen);
26
- </script>
27
-
28
- <Story name="Sidebar" args={{}}>
29
- <Root class="">
30
- <Sidebar_.Root class="" bind:open={isOpen}>
31
- <div class="flex size-full">
32
- <Sidebar_.Content
33
- class="flex flex-col border-r px-6 py-10 whitespace-nowrap"
34
- initial={(node) => gsap.set(node, { width: isOpen ? 240 : 96 })}
35
- animate={(node) =>
36
- gsap.to(node, { width: isOpen ? 240 : 96, duration: 0.2, ease: cubicOut })}
37
- >
38
- <div>
39
- <button
40
- {@attach (node) => {
41
- const bond = SidebarBond.get();
42
- return on('click', (ev) => {
43
- bond?.state.toggle?.();
44
- })(node);
45
- }}>Open</button
46
- >
47
- </div>
48
- </Sidebar_.Content>
49
-
50
- <main class="bg-foreground/2 flex-1 p-8">Hello World!</main>
51
- </div>
52
- </Sidebar_.Root>
53
- </Root>
54
- </Story>
1
+ <script module>
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import { Sidebar as Sidebar_ } 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/Sidebar',
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
+ let isOpen = $state(false);
20
+ </script>
21
+
22
+ <Story name="Sidebar" args={{}}>
23
+ <Sidebar_.Root class="" bind:open={isOpen}>
24
+ {#snippet children({ sidebar })}
25
+ <div class="flex size-full">
26
+ <Sidebar_.Content
27
+ class="flex min-w-32 flex-col border-r px-6 py-10 whitespace-nowrap"
28
+ width="300px"
29
+ >
30
+ <div>
31
+ <button
32
+ onclick={() => {
33
+ sidebar?.state.toggle?.();
34
+ }}>Open</button
35
+ >
36
+ </div>
37
+ </Sidebar_.Content>
38
+
39
+ <main class="bg-foreground/2 flex-1 p-8">Hello World!</main>
40
+ </div>
41
+ {/snippet}
42
+ </Sidebar_.Root>
43
+ </Story>
@@ -1,5 +1,3 @@
1
- import type { Snippet } from 'svelte';
2
- import type { Override } from '../../types';
3
1
  import type { Factory } from '../../types';
4
2
  import type { SidebarBond } from './bond.svelte';
5
3
  import type { Base, HtmlAtomProps } from '../atom';
@@ -13,18 +11,11 @@ export interface SidebarRootExtendProps {
13
11
  */
14
12
  export interface SidebarContentExtendProps {
15
13
  }
16
- export interface SidebarRootProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> extends Override<HtmlAtomProps<E, B>, {
17
- children?: Snippet<[{
18
- sidebar?: SidebarBond;
19
- }]>;
20
- }>, SidebarRootExtendProps {
14
+ export interface SidebarRootProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> extends HtmlAtomProps<E, B>, SidebarRootExtendProps {
21
15
  open?: boolean;
22
16
  disabled?: boolean;
17
+ width?: string | number;
23
18
  factory?: Factory<SidebarBond>;
24
19
  }
25
- export interface SidebarContentProps<E extends keyof HTMLElementTagNameMap, B extends Base = Base> extends Override<HtmlAtomProps<E, B>, {
26
- children?: Snippet<[{
27
- sidebar?: SidebarBond<any>;
28
- }]>;
29
- }>, SidebarContentExtendProps {
20
+ export interface SidebarContentProps<E extends keyof HTMLElementTagNameMap, B extends Base = Base> extends HtmlAtomProps<E, B>, SidebarContentExtendProps {
30
21
  }
@@ -18,7 +18,10 @@ export declare class TabBond<T = unknown> extends Bond<TabBondProps<T>, TabBondS
18
18
  mount(): (() => void) | undefined;
19
19
  unmount(): void;
20
20
  share(): this;
21
- root(props?: Record<string, unknown>): {};
21
+ root(props?: Record<string, unknown>): {
22
+ 'data-active': boolean;
23
+ 'data-kind': string;
24
+ };
22
25
  header(props?: Record<string, unknown>): {
23
26
  id: string;
24
27
  role: string;
@@ -30,7 +30,10 @@ export class TabBond extends Bond {
30
30
  return TabBond.set(this);
31
31
  }
32
32
  root(props) {
33
- return {};
33
+ return {
34
+ 'data-active': this.state.isActive,
35
+ 'data-kind': 'tab-root'
36
+ };
34
37
  }
35
38
  header(props) {
36
39
  const id = getElementId(this.id, TAB_ELEMENTS_KIND.header);
@@ -2,7 +2,6 @@
2
2
  import { defineMeta } from '@storybook/addon-svelte-csf';
3
3
  import { Tabs as Tabs_, Tab } from '.';
4
4
  import { Root as TabsRoot } from './atoms';
5
- import Root from '../root/root.svelte';
6
5
 
7
6
  // More on how to set up stories at: https://storybook.js.org/docs/writing-stories
8
7
  const { Story } = defineMeta({
@@ -22,38 +21,36 @@
22
21
  </script>
23
22
 
24
23
  <Story name="Tabs" args={{}}>
25
- <Root class="p-4">
26
- <Tabs_.Root bind:value>
27
- <Tabs_.Header class="border-b" />
28
- <Tabs_.Body>
29
- <Tab.Root value="en">
30
- <Tab.Header>English</Tab.Header>
31
- <Tab.Body class="">
32
- <div>
33
- Ligula ex tincidunt efficitur netus consequat aenean finibus. Dictum ex pretium
34
- torquent vel scelerisque quisque class nisl penatibus blandit risus. Pretium praesent
35
- egestas ante placerat lacus pede risus pulvinar facilisi.
36
- </div>
37
- </Tab.Body>
38
- </Tab.Root>
24
+ <Tabs_.Root bind:value>
25
+ <Tabs_.Header class="border-b" />
26
+ <Tabs_.Body>
27
+ <Tab.Root value="en">
28
+ <Tab.Header>English</Tab.Header>
29
+ <Tab.Body class="">
30
+ <div>
31
+ Ligula ex tincidunt efficitur netus consequat aenean finibus. Dictum ex pretium torquent
32
+ vel scelerisque quisque class nisl penatibus blandit risus. Pretium praesent egestas
33
+ ante placerat lacus pede risus pulvinar facilisi.
34
+ </div>
35
+ </Tab.Body>
36
+ </Tab.Root>
39
37
 
40
- <Tab.Root value="ar">
41
- <Tab.Header>Arabic</Tab.Header>
42
- <Tab.Body class="h-[1440px]">
43
- <div>
44
- Interdum turpis taciti mauris orci condimentum vitae malesuada ornare ridiculus
45
- ultrices quisque feugiat pretium facilisis justo ligula pede volutpat nisi viverra
46
- adipiscing donec torquent ac sapien aliquet parturient posuere leo litora vivamus
47
- luctus vestibulum aptent faucibus platea libero dolor purus integer fusce nam senectus
48
- nibh nostra diam tortor dictumst praesent tellus montes ad iaculis sociosqu mollis
49
- sodales consectetuer hac accumsan dictum blandit conubia velit elit efficitur duis
50
- nascetur erat mattis semper et aliquam magna lorem bibendum ante id cursus nulla eget
51
- ut pellentesque himenaeos consectetur potenti si maximus ullamcorper etiam nec magnis
52
- ipsum mus porta lobortis natoque rhoncus fringilla
53
- </div>
54
- </Tab.Body>
55
- </Tab.Root>
56
- </Tabs_.Body>
57
- </Tabs_.Root>
58
- </Root>
38
+ <Tab.Root value="ar">
39
+ <Tab.Header>Arabic</Tab.Header>
40
+ <Tab.Body class="h-[1440px]">
41
+ <div>
42
+ Interdum turpis taciti mauris orci condimentum vitae malesuada ornare ridiculus ultrices
43
+ quisque feugiat pretium facilisis justo ligula pede volutpat nisi viverra adipiscing
44
+ donec torquent ac sapien aliquet parturient posuere leo litora vivamus luctus vestibulum
45
+ aptent faucibus platea libero dolor purus integer fusce nam senectus nibh nostra diam
46
+ tortor dictumst praesent tellus montes ad iaculis sociosqu mollis sodales consectetuer
47
+ hac accumsan dictum blandit conubia velit elit efficitur duis nascetur erat mattis
48
+ semper et aliquam magna lorem bibendum ante id cursus nulla eget ut pellentesque
49
+ himenaeos consectetur potenti si maximus ullamcorper etiam nec magnis ipsum mus porta
50
+ lobortis natoque rhoncus fringilla
51
+ </div>
52
+ </Tab.Body>
53
+ </Tab.Root>
54
+ </Tabs_.Body>
55
+ </Tabs_.Root>
59
56
  </Story>
@@ -1,2 +1,3 @@
1
1
  export { default as Root } from './textarea-root.svelte';
2
2
  export { default as Input } from './textarea-input.svelte';
3
+ export { default as Control } from './textarea-input.svelte';
@@ -1,2 +1,3 @@
1
1
  export { default as Root } from './textarea-root.svelte';
2
2
  export { default as Input } from './textarea-input.svelte';
3
+ export { default as Control } from './textarea-input.svelte';
@@ -1,6 +1,9 @@
1
- <script lang="ts">
2
- let { class: klass = '', value = $bindable(), ...restProps } = $props();
3
- </script>
4
-
5
- <textarea class={['border-border w-full outline-none', '$preset', klass]} bind:value {...restProps}
6
- ></textarea>
1
+ <script lang="ts">
2
+ let { class: klass = '', value = $bindable(), ...restProps } = $props();
3
+ </script>
4
+
5
+ <textarea
6
+ class={['border-border w-full p-2 outline-none', '$preset', klass]}
7
+ bind:value
8
+ {...restProps}
9
+ ></textarea>
@@ -1,9 +1,9 @@
1
- <script>
2
- import { Input } from '../input';
3
-
4
- let { children, ...restProps } = $props();
5
- </script>
6
-
7
- <Input.Root preset="textarea" {...restProps}>
8
- {@render children?.()}
9
- </Input.Root>
1
+ <script>
2
+ import { Input } from '../input';
3
+
4
+ let { class: klass = '', children, ...restProps } = $props();
5
+ </script>
6
+
7
+ <Input.Root preset="textarea" class={['h-auto', klass]} {...restProps}>
8
+ {@render children?.()}
9
+ </Input.Root>