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

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 (186) hide show
  1. package/README.md +852 -645
  2. package/dist/components/accordion/accordion-root.svelte +61 -61
  3. package/dist/components/accordion/item/accordion-item-body.svelte +42 -42
  4. package/dist/components/accordion/item/accordion-item-header.svelte +50 -50
  5. package/dist/components/accordion/item/accordion-item-indicator.svelte +50 -50
  6. package/dist/components/accordion/item/accordion-item-root.svelte +65 -65
  7. package/dist/components/alert/alert-actions.svelte +43 -42
  8. package/dist/components/alert/alert-close-button.svelte +70 -72
  9. package/dist/components/alert/alert-content.svelte +43 -42
  10. package/dist/components/alert/alert-description.svelte +42 -41
  11. package/dist/components/alert/alert-icon.svelte +47 -46
  12. package/dist/components/alert/alert-root.svelte +103 -102
  13. package/dist/components/alert/alert-title.svelte +42 -41
  14. package/dist/components/alert/alert.stories.svelte +384 -23
  15. package/dist/components/alert/alert.stories.svelte.d.ts +2 -5
  16. package/dist/components/atom/html-atom.svelte +207 -201
  17. package/dist/components/atom/html-atom.svelte.d.ts +1 -1
  18. package/dist/components/atom/snippet-renderer.svelte +5 -0
  19. package/dist/components/atom/snippet-renderer.svelte.d.ts +5 -0
  20. package/dist/components/avatar/avatar.stories.svelte.d.ts +1 -1
  21. package/dist/components/badge/badge.stories.svelte.d.ts +1 -1
  22. package/dist/components/breadcrumb/breadcrumb.stories.svelte.d.ts +1 -1
  23. package/dist/components/button/button.stories.svelte +17 -14
  24. package/dist/components/calendar/atoms.d.ts +5 -0
  25. package/dist/components/calendar/atoms.js +5 -0
  26. package/dist/components/calendar/bond.svelte.d.ts +72 -0
  27. package/dist/components/calendar/bond.svelte.js +132 -0
  28. package/dist/components/calendar/calendar-body.svelte +107 -0
  29. package/dist/components/calendar/calendar-body.svelte.d.ts +8 -0
  30. package/dist/components/calendar/calendar-day.svelte +96 -0
  31. package/dist/components/calendar/calendar-day.svelte.d.ts +4 -0
  32. package/dist/components/calendar/calendar-header.svelte +29 -0
  33. package/dist/components/calendar/calendar-header.svelte.d.ts +6 -0
  34. package/dist/components/calendar/calendar-root.svelte +206 -0
  35. package/dist/components/calendar/calendar-root.svelte.d.ts +8 -0
  36. package/dist/components/calendar/calendar-week-day.svelte +34 -0
  37. package/dist/components/calendar/calendar-week-day.svelte.d.ts +9 -0
  38. package/dist/components/calendar/calendar.css +26 -0
  39. package/dist/components/calendar/calendar.stories.svelte +31 -0
  40. package/dist/components/calendar/calendar.stories.svelte.d.ts +26 -0
  41. package/dist/components/calendar/index.d.ts +4 -0
  42. package/dist/components/calendar/index.js +4 -0
  43. package/dist/components/calendar/runes.svelte.d.ts +3 -0
  44. package/dist/components/calendar/runes.svelte.js +25 -0
  45. package/dist/components/calendar/types.d.ts +62 -0
  46. package/dist/components/calendar/types.js +1 -0
  47. package/dist/components/card/card-body.svelte +39 -39
  48. package/dist/components/card/card-description.svelte +41 -41
  49. package/dist/components/card/card-footer.svelte +41 -41
  50. package/dist/components/card/card-header.svelte +41 -41
  51. package/dist/components/card/card-media.svelte +41 -41
  52. package/dist/components/card/card-root.svelte +91 -91
  53. package/dist/components/card/card-subtitle.svelte +41 -41
  54. package/dist/components/card/card-title.svelte +45 -45
  55. package/dist/components/collapsible/collapsible-body.svelte +39 -39
  56. package/dist/components/collapsible/collapsible-header.svelte +39 -39
  57. package/dist/components/collapsible/collapsible-indicator.svelte +50 -50
  58. package/dist/components/collapsible/collapsible-root.svelte +66 -66
  59. package/dist/components/combobox/combobox-root.svelte +65 -65
  60. package/dist/components/container/container.stories.svelte.d.ts +1 -1
  61. package/dist/components/contextmenu/contextmenu-trigger.svelte.d.ts +1 -1
  62. package/dist/components/datagrid/bond.svelte.d.ts +2 -2
  63. package/dist/components/datagrid/datagrid-body.svelte +37 -37
  64. package/dist/components/datagrid/datagrid-checkbox.svelte +101 -101
  65. package/dist/components/datagrid/datagrid-footer.svelte +34 -34
  66. package/dist/components/datagrid/datagrid-header.svelte +49 -49
  67. package/dist/components/datagrid/datagrid-root.svelte +2 -2
  68. package/dist/components/datagrid/datagrid.css +5 -47
  69. package/dist/components/datagrid/td/datagrid-td.svelte +66 -66
  70. package/dist/components/datagrid/th/datagrid-th.svelte +106 -106
  71. package/dist/components/datagrid/tr/datagrid-tr.svelte +88 -88
  72. package/dist/components/datagrid/types.d.ts +1 -1
  73. package/dist/components/date-picker/atoms.d.ts +3 -0
  74. package/dist/components/date-picker/atoms.js +3 -0
  75. package/dist/components/date-picker/bond.svelte.d.ts +67 -0
  76. package/dist/components/date-picker/bond.svelte.js +174 -0
  77. package/dist/components/date-picker/date-picker-calendar.svelte +67 -0
  78. package/dist/components/date-picker/date-picker-calendar.svelte.d.ts +4 -0
  79. package/dist/components/date-picker/date-picker-header.svelte +100 -0
  80. package/dist/components/date-picker/date-picker-header.svelte.d.ts +4 -0
  81. package/dist/components/date-picker/date-picker-months.svelte +142 -0
  82. package/dist/components/date-picker/date-picker-months.svelte.d.ts +4 -0
  83. package/dist/components/date-picker/date-picker-root.svelte +95 -0
  84. package/dist/components/date-picker/date-picker-root.svelte.d.ts +4 -0
  85. package/dist/components/date-picker/date-picker-years.svelte +205 -0
  86. package/dist/components/date-picker/date-picker-years.svelte.d.ts +4 -0
  87. package/dist/components/date-picker/date-picker.stories.svelte +42 -0
  88. package/dist/components/date-picker/date-picker.stories.svelte.d.ts +3 -0
  89. package/dist/components/date-picker/index.d.ts +3 -0
  90. package/dist/components/date-picker/index.js +3 -0
  91. package/dist/components/date-picker/types.d.ts +53 -0
  92. package/dist/components/date-picker/types.js +1 -0
  93. package/dist/components/dialog/dialog-body.svelte +39 -39
  94. package/dist/components/dialog/dialog-close-button.svelte +58 -58
  95. package/dist/components/dialog/dialog-content.svelte +1 -1
  96. package/dist/components/dialog/dialog-description.svelte +40 -40
  97. package/dist/components/dialog/dialog-footer.svelte +39 -39
  98. package/dist/components/dialog/dialog-header.svelte +39 -39
  99. package/dist/components/dialog/dialog-root.svelte +110 -110
  100. package/dist/components/dialog/dialog-title.svelte +41 -41
  101. package/dist/components/drawer/drawer-backdrop.svelte +38 -38
  102. package/dist/components/drawer/drawer-body.svelte +42 -42
  103. package/dist/components/drawer/drawer-content.svelte +42 -42
  104. package/dist/components/drawer/drawer-description.svelte +44 -44
  105. package/dist/components/drawer/drawer-footer.svelte +41 -41
  106. package/dist/components/drawer/drawer-header.svelte +43 -43
  107. package/dist/components/drawer/drawer-root.svelte +93 -93
  108. package/dist/components/drawer/drawer-title.svelte +44 -44
  109. package/dist/components/dropdown/dropdown-query.svelte +54 -54
  110. package/dist/components/dropdown/dropdown-root.svelte +59 -59
  111. package/dist/components/dropdown/dropdown-trigger.svelte +41 -41
  112. package/dist/components/dropdown/dropdown-value.svelte +60 -60
  113. package/dist/components/element/types.d.ts +1 -1
  114. package/dist/components/form/bond.svelte.d.ts +1 -1
  115. package/dist/components/form/field/field-control.svelte +48 -48
  116. package/dist/components/form/field/field-label.svelte +24 -24
  117. package/dist/components/form/field/field-root.svelte +59 -59
  118. package/dist/components/icon/icon.svelte +44 -44
  119. package/dist/components/image/image.stories.svelte.d.ts +1 -1
  120. package/dist/components/index.d.ts +4 -0
  121. package/dist/components/index.js +4 -0
  122. package/dist/components/input/input-control.svelte +103 -103
  123. package/dist/components/label/label.svelte +25 -25
  124. package/dist/components/lazy/index.d.ts +1 -0
  125. package/dist/components/lazy/index.js +1 -0
  126. package/dist/components/lazy/lazy.stories.svelte +35 -0
  127. package/dist/components/lazy/lazy.stories.svelte.d.ts +19 -0
  128. package/dist/components/lazy/lazy.svelte +28 -0
  129. package/dist/components/lazy/lazy.svelte.d.ts +5 -0
  130. package/dist/components/lazy/types.d.ts +10 -0
  131. package/dist/components/lazy/types.js +1 -0
  132. package/dist/components/menu/menu-list.svelte +40 -39
  133. package/dist/components/menu/menu-list.svelte.d.ts +1 -0
  134. package/dist/components/popover/popover-arrow.svelte +111 -111
  135. package/dist/components/popover/popover-content.svelte +178 -139
  136. package/dist/components/popover/popover-root.svelte +16 -17
  137. package/dist/components/popover/popover.stories.svelte +0 -15
  138. package/dist/components/portal/portal-root.svelte +83 -83
  139. package/dist/components/portal/teleport.svelte +50 -50
  140. package/dist/components/qr-code/index.d.ts +2 -0
  141. package/dist/components/qr-code/index.js +2 -0
  142. package/dist/components/qr-code/qr-code.stories.svelte +27 -0
  143. package/dist/components/qr-code/qr-code.stories.svelte.d.ts +26 -0
  144. package/dist/components/qr-code/qr-code.svelte +75 -0
  145. package/dist/components/qr-code/qr-code.svelte.d.ts +4 -0
  146. package/dist/components/qr-code/types.d.ts +14 -0
  147. package/dist/components/qr-code/types.js +1 -0
  148. package/dist/components/radio/radio.svelte +109 -109
  149. package/dist/components/radio/types.svelte.d.ts +1 -1
  150. package/dist/components/scrollable/scrollable-container.svelte +82 -82
  151. package/dist/components/scrollable/scrollable-content.svelte +41 -41
  152. package/dist/components/scrollable/scrollable-root.svelte +100 -100
  153. package/dist/components/scrollable/scrollable-thumb.svelte +75 -75
  154. package/dist/components/scrollable/scrollable-track.svelte +59 -59
  155. package/dist/components/scrollable/scrollable.stories.svelte.d.ts +1 -1
  156. package/dist/components/sidebar/bond.svelte.d.ts +0 -5
  157. package/dist/components/sidebar/bond.svelte.js +1 -12
  158. package/dist/components/sidebar/sidebar-content.svelte +39 -39
  159. package/dist/components/sidebar/sidebar-content.svelte.d.ts +2 -2
  160. package/dist/components/sidebar/sidebar-root.svelte +41 -68
  161. package/dist/components/sidebar/sidebar-root.svelte.d.ts +2 -2
  162. package/dist/components/sidebar/sidebar.stories.svelte +54 -52
  163. package/dist/components/sidebar/types.d.ts +6 -6
  164. package/dist/components/tabs/tab/tab-body.svelte +52 -52
  165. package/dist/components/tabs/tab/tab-description.svelte +41 -41
  166. package/dist/components/tabs/tab/tab-header.svelte +71 -71
  167. package/dist/components/tabs/tab/tab-root.svelte +86 -86
  168. package/dist/components/toast/toast-description.svelte +38 -38
  169. package/dist/components/toast/toast-root.svelte +61 -61
  170. package/dist/components/toast/toast-title.svelte +35 -35
  171. package/dist/components/tree/tree-body.svelte +39 -39
  172. package/dist/components/tree/tree-header.svelte +54 -54
  173. package/dist/components/tree/tree-indicator.svelte +40 -40
  174. package/dist/components/tree/tree-root.svelte +65 -65
  175. package/dist/components/virtual/virtual-root.svelte +239 -239
  176. package/dist/context/preset.svelte.d.ts +1 -1
  177. package/dist/icons/icon-arrow-down.svelte.d.ts +1 -1
  178. package/dist/icons/icon-checkmark.svelte.d.ts +1 -1
  179. package/dist/icons/icon-close.svelte.d.ts +1 -1
  180. package/dist/icons/icon-more-vert.svelte.d.ts +1 -1
  181. package/dist/runes/container.svelte.d.ts +2 -2
  182. package/dist/shared/bond.svelte.d.ts +1 -1
  183. package/dist/utils/state.d.ts +1 -1
  184. package/dist/utils/state.js +2 -1
  185. package/llm/variants.md +650 -103
  186. package/package.json +465 -437
@@ -1,59 +1,59 @@
1
- <script lang="ts" generics="T extends keyof HTMLElementTagNameMap">
2
- import type { ScrollableTrackProps } from './types';
3
- import { ScrollableBond } from './bond.svelte';
4
- import { HtmlAtom } from '../atom';
5
-
6
- let {
7
- class: klass = '',
8
-
9
- orientation = undefined,
10
- children = undefined,
11
- onmount = undefined,
12
- ondestroy = undefined,
13
- animate = undefined,
14
- enter = undefined,
15
- exit = undefined,
16
- initial = undefined,
17
- ...restProps
18
- }: ScrollableTrackProps<T> = $props();
19
-
20
- const bond = ScrollableBond.get();
21
-
22
- if (!bond) {
23
- throw new Error('ScrollableTrack must be used within a ScrollableRoot');
24
- }
25
-
26
- const hasYScroll = $derived(bond.state.props.scrollHeight > bond.state.props.clientHeight);
27
- const hasXScroll = $derived(bond.state.props.scrollWidth > bond.state.props.clientWidth);
28
-
29
- const hasScroll = $derived(hasXScroll || hasYScroll);
30
-
31
- const isOpen = $derived(bond?.state?.props?.open ?? true);
32
-
33
- const isScrolling = $derived(bond?.state?.props?.isScrolling ?? false);
34
-
35
- const trackProps = $derived(bond.track(orientation));
36
- </script>
37
-
38
- {#if (isOpen || isScrolling) && hasScroll}
39
- <HtmlAtom
40
- {bond}
41
- preset="scrollable.track"
42
- class={[
43
- 'scrollable-track bg-foreground/10 hover:bg-foreground/15 border-border absolute z-10 rounded transition-opacity',
44
- { vertical: 'inset-y-0 right-0 w-2', horizontal: 'inset-x-0 bottom-0 h-2' }[orientation],
45
- '$preset',
46
- klass
47
- ]}
48
- enter={enter?.bind(bond.state)}
49
- exit={exit?.bind(bond.state)}
50
- initial={initial?.bind(bond.state)}
51
- animate={animate?.bind(bond.state)}
52
- onmount={onmount?.bind(bond.state)}
53
- ondestroy={ondestroy?.bind(bond.state)}
54
- {...trackProps}
55
- {...restProps}
56
- >
57
- {@render children?.()}
58
- </HtmlAtom>
59
- {/if}
1
+ <script lang="ts" generics="T extends keyof HTMLElementTagNameMap">
2
+ import type { ScrollableTrackProps } from './types';
3
+ import { ScrollableBond } from './bond.svelte';
4
+ import { HtmlAtom } from '../atom';
5
+
6
+ let {
7
+ class: klass = '',
8
+
9
+ orientation = undefined,
10
+ children = undefined,
11
+ onmount = undefined,
12
+ ondestroy = undefined,
13
+ animate = undefined,
14
+ enter = undefined,
15
+ exit = undefined,
16
+ initial = undefined,
17
+ ...restProps
18
+ }: ScrollableTrackProps<T> = $props();
19
+
20
+ const bond = ScrollableBond.get();
21
+
22
+ if (!bond) {
23
+ throw new Error('ScrollableTrack must be used within a ScrollableRoot');
24
+ }
25
+
26
+ const hasYScroll = $derived(bond.state.props.scrollHeight > bond.state.props.clientHeight);
27
+ const hasXScroll = $derived(bond.state.props.scrollWidth > bond.state.props.clientWidth);
28
+
29
+ const hasScroll = $derived(hasXScroll || hasYScroll);
30
+
31
+ const isOpen = $derived(bond?.state?.props?.open ?? true);
32
+
33
+ const isScrolling = $derived(bond?.state?.props?.isScrolling ?? false);
34
+
35
+ const trackProps = $derived(bond.track(orientation));
36
+ </script>
37
+
38
+ {#if (isOpen || isScrolling) && hasScroll}
39
+ <HtmlAtom
40
+ {bond}
41
+ preset="scrollable.track"
42
+ class={[
43
+ 'scrollable-track bg-foreground/10 hover:bg-foreground/15 border-border absolute z-10 rounded transition-opacity',
44
+ { vertical: 'inset-y-0 right-0 w-2', horizontal: 'inset-x-0 bottom-0 h-2' }[orientation],
45
+ '$preset',
46
+ klass
47
+ ]}
48
+ enter={enter?.bind(bond.state)}
49
+ exit={exit?.bind(bond.state)}
50
+ initial={initial?.bind(bond.state)}
51
+ animate={animate?.bind(bond.state)}
52
+ onmount={onmount?.bind(bond.state)}
53
+ ondestroy={ondestroy?.bind(bond.state)}
54
+ {...trackProps}
55
+ {...restProps}
56
+ >
57
+ {@render children?.()}
58
+ </HtmlAtom>
59
+ {/if}
@@ -4,7 +4,7 @@ type Scrollable = SvelteComponent<{
4
4
  }, {
5
5
  [evt: string]: CustomEvent<any>;
6
6
  }, {}> & {
7
- $$bindings?: string | undefined;
7
+ $$bindings?: string;
8
8
  };
9
9
  declare const Scrollable: $$__sveltets_2_IsomorphicComponent<{
10
10
  [x: string]: never;
@@ -14,12 +14,7 @@ export declare class SidebarBond<Props extends SidebarBondProps = SidebarBondPro
14
14
  constructor(state: State);
15
15
  content(props?: Record<string, unknown>): {
16
16
  'aria-expanded': boolean;
17
- 'data-atom': string;
18
- 'data-kind': string;
19
- };
20
- root(props?: Record<string, unknown>): {
21
17
  'aria-disabled': boolean;
22
- 'data-open': boolean;
23
18
  'data-atom': string;
24
19
  'data-kind': string;
25
20
  };
@@ -9,6 +9,7 @@ export class SidebarBond extends Bond {
9
9
  content(props = {}) {
10
10
  return {
11
11
  'aria-expanded': this.state?.props?.open ?? false,
12
+ 'aria-disabled': this.state?.props?.disabled ?? false,
12
13
  'data-atom': this.id,
13
14
  'data-kind': 'sidebar-content',
14
15
  ...props,
@@ -17,18 +18,6 @@ export class SidebarBond extends Bond {
17
18
  }
18
19
  };
19
20
  }
20
- root(props = {}) {
21
- return {
22
- 'aria-disabled': this.state?.props?.disabled ?? false,
23
- 'data-open': this.state?.props?.open ?? false,
24
- 'data-atom': this.id,
25
- 'data-kind': 'sidebar-root',
26
- ...props,
27
- [createAttachmentKey()]: (node) => {
28
- this.elements.root = node;
29
- }
30
- };
31
- }
32
21
  share() {
33
22
  return SidebarBond.set(this);
34
23
  }
@@ -1,39 +1,39 @@
1
- <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
- import { HtmlAtom, type Base } from '../atom';
3
- import { SidebarBond } from './bond.svelte';
4
- import type { SlideoverContentProps } from './types';
5
-
6
- const bond = SidebarBond.get();
7
-
8
- let {
9
- class: klass = '',
10
- children = undefined,
11
- onmount = undefined,
12
- ondestroy = undefined,
13
- animate = undefined,
14
- enter = undefined,
15
- exit = undefined,
16
- initial = undefined,
17
- ...restProps
18
- }: SlideoverContentProps<E, B> = $props();
19
-
20
- const contentProps = $derived({
21
- ...bond?.content(),
22
- ...restProps
23
- });
24
- </script>
25
-
26
- <HtmlAtom
27
- {bond}
28
- preset="sidebar.content"
29
- class={['bg-card border-border', '$preset', klass]}
30
- enter={enter?.bind(bond.state)}
31
- exit={exit?.bind(bond.state)}
32
- initial={initial?.bind(bond.state)}
33
- animate={animate?.bind(bond.state)}
34
- onmount={onmount?.bind(bond.state)}
35
- ondestroy={ondestroy?.bind(bond.state)}
36
- {...contentProps}
37
- >
38
- {@render children?.({ sidebar: bond })}
39
- </HtmlAtom>
1
+ <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
+ import { HtmlAtom, type Base } from '../atom';
3
+ import { SidebarBond } from './bond.svelte';
4
+ import type { SidebarRootProps } from './types';
5
+
6
+ const bond = SidebarBond.get();
7
+
8
+ let {
9
+ class: klass = '',
10
+ children = undefined,
11
+ onmount = undefined,
12
+ ondestroy = undefined,
13
+ animate = undefined,
14
+ enter = undefined,
15
+ exit = undefined,
16
+ initial = undefined,
17
+ ...restProps
18
+ }: SidebarRootProps<E, B> = $props();
19
+
20
+ const contentProps = $derived({
21
+ ...bond?.content(),
22
+ ...restProps
23
+ });
24
+ </script>
25
+
26
+ <HtmlAtom
27
+ {bond}
28
+ preset="sidebar.content"
29
+ class={['bg-card border-border', '$preset', klass]}
30
+ enter={enter?.bind(bond.state)}
31
+ exit={exit?.bind(bond.state)}
32
+ initial={initial?.bind(bond.state)}
33
+ animate={animate?.bind(bond.state)}
34
+ onmount={onmount?.bind(bond.state)}
35
+ ondestroy={ondestroy?.bind(bond.state)}
36
+ {...contentProps}
37
+ >
38
+ {@render children?.({ sidebar: bond })}
39
+ </HtmlAtom>
@@ -1,7 +1,7 @@
1
1
  import { type Base } from '../atom';
2
- import type { SlideoverContentProps } from './types';
2
+ import type { SidebarRootProps } from './types';
3
3
  declare function $$render<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base>(): {
4
- props: SlideoverContentProps<E, B>;
4
+ props: SidebarRootProps<E, B>;
5
5
  exports: {};
6
6
  bindings: "";
7
7
  slots: {};
@@ -1,68 +1,41 @@
1
- <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
- import { defineProperty, defineState } from '../../utils';
3
- import { HtmlAtom, type Base } from '../atom';
4
- import { SidebarBond, SidebarBondState, type SidebarBondProps } from './bond.svelte';
5
- import type { SlideoverRootProps } from './types';
6
-
7
- let {
8
- open = $bindable(false),
9
- class: klass = '',
10
- disabled = false,
11
- factory = _factory,
12
- children = undefined,
13
- onmount = undefined,
14
- ondestroy = undefined,
15
- animate = undefined,
16
- enter = undefined,
17
- exit = undefined,
18
- initial = undefined,
19
- ...restProps
20
- }: SlideoverRootProps<E, B> = $props();
21
-
22
- const bondProps = defineState<SidebarBondProps>(
23
- [
24
- defineProperty(
25
- 'open',
26
- () => open,
27
- (v) => {
28
- open = v;
29
- }
30
- ),
31
- defineProperty('disabled', () => disabled)
32
- ],
33
- () => ({})
34
- );
35
-
36
- const bond = factory(bondProps).share();
37
-
38
- const rootProps = $derived({
39
- ...bond.root(),
40
- ...restProps
41
- });
42
-
43
- function _factory(props: typeof bondProps) {
44
- const bondState = new SidebarBondState(() => props);
45
- const bond = new SidebarBond(bondState);
46
-
47
- return bond;
48
- }
49
-
50
- export function getBond() {
51
- return bond;
52
- }
53
- </script>
54
-
55
- <HtmlAtom
56
- {bond}
57
- preset="sidebar"
58
- class={['border-border flex min-h-full w-full flex-1 flex-nowrap', '$preset', klass]}
59
- enter={enter?.bind(bond.state)}
60
- exit={exit?.bind(bond.state)}
61
- initial={initial?.bind(bond.state)}
62
- animate={animate?.bind(bond.state)}
63
- onmount={onmount?.bind(bond.state)}
64
- ondestroy={ondestroy?.bind(bond.state)}
65
- {...rootProps}
66
- >
67
- {@render children?.({ sidebar: bond })}
68
- </HtmlAtom>
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,8 +1,8 @@
1
1
  import { type Base } from '../atom';
2
2
  import { SidebarBond, SidebarBondState, type SidebarBondProps } from './bond.svelte';
3
- import type { SlideoverRootProps } from './types';
3
+ import type { SidebarRootProps } from './types';
4
4
  declare function $$render<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base>(): {
5
- props: SlideoverRootProps<E, B>;
5
+ props: SidebarRootProps<E, B>;
6
6
  exports: {
7
7
  getBond: () => SidebarBond<SidebarBondProps<Record<string, unknown>>, SidebarBondState<SidebarBondProps<Record<string, unknown>>>>;
8
8
  };
@@ -1,52 +1,54 @@
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
- <Sidebar_.Content
32
- class="flex flex-col border-r px-6 py-10 whitespace-nowrap"
33
- initial={(node) => gsap.set(node, { width: isOpen ? 240 : 96 })}
34
- animate={(node) =>
35
- gsap.to(node, { width: isOpen ? 240 : 96, duration: 0.2, ease: cubicOut })}
36
- >
37
- <div>
38
- <button
39
- {@attach (node) => {
40
- const bond = SidebarBond.get();
41
- return on('click', (ev) => {
42
- bond?.state.toggle?.();
43
- })(node);
44
- }}>Open</button
45
- >
46
- </div>
47
- </Sidebar_.Content>
48
-
49
- <div class="bg-foreground/2 flex-1 p-8">Hello World!</div>
50
- </Sidebar_.Root>
51
- </Root>
52
- </Story>
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>
@@ -6,25 +6,25 @@ import type { Base, HtmlAtomProps } from '../atom';
6
6
  /**
7
7
  * Extend this interface to add custom slideover root properties in your application.
8
8
  */
9
- export interface SlideoverRootExtendProps {
9
+ export interface SidebarRootExtendProps {
10
10
  }
11
11
  /**
12
12
  * Extend this interface to add custom slideover content properties in your application.
13
13
  */
14
- export interface SlideoverContentExtendProps {
14
+ export interface SidebarContentExtendProps {
15
15
  }
16
- export interface SlideoverRootProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> extends Override<HtmlAtomProps<E, B>, {
16
+ export interface SidebarRootProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> extends Override<HtmlAtomProps<E, B>, {
17
17
  children?: Snippet<[{
18
18
  sidebar?: SidebarBond;
19
19
  }]>;
20
- }>, SlideoverRootExtendProps {
20
+ }>, SidebarRootExtendProps {
21
21
  open?: boolean;
22
22
  disabled?: boolean;
23
23
  factory?: Factory<SidebarBond>;
24
24
  }
25
- export interface SlideoverContentProps<E extends keyof HTMLElementTagNameMap, B extends Base = Base> extends Override<HtmlAtomProps<E, B>, {
25
+ export interface SidebarContentProps<E extends keyof HTMLElementTagNameMap, B extends Base = Base> extends Override<HtmlAtomProps<E, B>, {
26
26
  children?: Snippet<[{
27
27
  sidebar?: SidebarBond<any>;
28
28
  }]>;
29
- }>, SlideoverContentExtendProps {
29
+ }>, SidebarContentExtendProps {
30
30
  }
@@ -1,52 +1,52 @@
1
- <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
- import { HtmlAtom, type Base } from '../../atom';
3
- import type { TabBodyProps } from '../types';
4
- import { TabBond } from './bond.svelte';
5
-
6
- const bond = TabBond.get();
7
-
8
- if (!bond) {
9
- throw new Error('TabBody must be used within a Tab');
10
- }
11
-
12
- let {
13
- class: klass = '',
14
- children,
15
- onmount = undefined,
16
- ondestroy = undefined,
17
- animate = undefined,
18
- enter = undefined,
19
- exit = undefined,
20
- initial = undefined,
21
- ...restProps
22
- }: TabBodyProps<E, B> = $props();
23
-
24
- let mounted = $state(false);
25
-
26
- const bodyProps = $derived({
27
- ...bond?.body(),
28
- ...restProps
29
- });
30
-
31
- $effect(() => {
32
- mounted = true;
33
- });
34
- </script>
35
-
36
- <HtmlAtom
37
- preset="tab.body"
38
- class={[
39
- 'tab-body border-border pointer-events-auto flex h-auto w-full min-w-full flex-1 flex-col',
40
- '$preset',
41
- klass
42
- ]}
43
- onmount={onmount?.bind(bond.state)}
44
- ondestroy={ondestroy?.bind(bond.state)}
45
- enter={enter?.bind(bond.state)}
46
- exit={exit?.bind(bond.state)}
47
- initial={initial?.bind(bond.state)}
48
- animate={animate?.bind(bond.state)}
49
- {...bodyProps}
50
- >
51
- {@render children?.({ tab: bond })}
52
- </HtmlAtom>
1
+ <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
+ import { HtmlAtom, type Base } from '../../atom';
3
+ import type { TabBodyProps } from '../types';
4
+ import { TabBond } from './bond.svelte';
5
+
6
+ const bond = TabBond.get();
7
+
8
+ if (!bond) {
9
+ throw new Error('TabBody must be used within a Tab');
10
+ }
11
+
12
+ let {
13
+ class: klass = '',
14
+ children,
15
+ onmount = undefined,
16
+ ondestroy = undefined,
17
+ animate = undefined,
18
+ enter = undefined,
19
+ exit = undefined,
20
+ initial = undefined,
21
+ ...restProps
22
+ }: TabBodyProps<E, B> = $props();
23
+
24
+ let mounted = $state(false);
25
+
26
+ const bodyProps = $derived({
27
+ ...bond?.body(),
28
+ ...restProps
29
+ });
30
+
31
+ $effect(() => {
32
+ mounted = true;
33
+ });
34
+ </script>
35
+
36
+ <HtmlAtom
37
+ preset="tab.body"
38
+ class={[
39
+ 'tab-body border-border pointer-events-auto flex h-auto w-full min-w-full flex-1 flex-col',
40
+ '$preset',
41
+ klass
42
+ ]}
43
+ onmount={onmount?.bind(bond.state)}
44
+ ondestroy={ondestroy?.bind(bond.state)}
45
+ enter={enter?.bind(bond.state)}
46
+ exit={exit?.bind(bond.state)}
47
+ initial={initial?.bind(bond.state)}
48
+ animate={animate?.bind(bond.state)}
49
+ {...bodyProps}
50
+ >
51
+ {@render children?.({ tab: bond })}
52
+ </HtmlAtom>