@svelte-atoms/core 1.0.0-alpha.24 → 1.0.0-alpha.26

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 (177) hide show
  1. package/dist/components/accordion/accordion-root.svelte +1 -1
  2. package/dist/components/accordion/accordion-root.svelte.d.ts +2 -2
  3. package/dist/components/accordion/item/accordion-item-body.svelte +1 -1
  4. package/dist/components/accordion/item/accordion-item-header.svelte +5 -1
  5. package/dist/components/accordion/item/accordion-item-indicator.svelte +1 -1
  6. package/dist/components/accordion/item/accordion-item-root.svelte +1 -1
  7. package/dist/components/alert/alert-actions.svelte +1 -1
  8. package/dist/components/alert/alert-actions.svelte.d.ts +1 -0
  9. package/dist/components/alert/alert-close-button.svelte +1 -1
  10. package/dist/components/alert/alert-close-button.svelte.d.ts +1 -0
  11. package/dist/components/alert/alert-content.svelte +1 -1
  12. package/dist/components/alert/alert-content.svelte.d.ts +1 -0
  13. package/dist/components/alert/alert-description.svelte +1 -1
  14. package/dist/components/alert/alert-icon.svelte +1 -1
  15. package/dist/components/alert/alert-root.svelte +1 -1
  16. package/dist/components/alert/alert-title.svelte +1 -1
  17. package/dist/components/atom/html-atom.svelte +147 -16
  18. package/dist/components/atom/html-atom.svelte.d.ts +4 -2
  19. package/dist/components/atom/types.d.ts +7 -0
  20. package/dist/components/badge/badge.svelte +1 -1
  21. package/dist/components/breadcrumb/breadcrumb-item.svelte +1 -1
  22. package/dist/components/breadcrumb/breadcrumb-root.svelte +1 -1
  23. package/dist/components/breadcrumb/breadcrumb-separator.svelte +1 -1
  24. package/dist/components/button/button.stories.svelte +41 -1
  25. package/dist/components/button/button.stories.svelte.d.ts +6 -14
  26. package/dist/components/button/button.svelte +1 -1
  27. package/dist/components/button/button.svelte.d.ts +4 -1
  28. package/dist/components/button/types.d.ts +1 -1
  29. package/dist/components/card/card-body.svelte +1 -1
  30. package/dist/components/card/card-description.svelte +1 -1
  31. package/dist/components/card/card-footer.svelte +1 -1
  32. package/dist/components/card/card-header.svelte +1 -1
  33. package/dist/components/card/card-media.svelte +1 -1
  34. package/dist/components/card/card-subtitle.svelte +1 -1
  35. package/dist/components/card/card-title.svelte +5 -1
  36. package/dist/components/checkbox/checkbox.svelte +39 -28
  37. package/dist/components/checkbox/checkbox.svelte.d.ts +1 -1
  38. package/dist/components/collapsible/collapsible-body.svelte +1 -1
  39. package/dist/components/collapsible/collapsible-header.svelte +1 -1
  40. package/dist/components/collapsible/collapsible-indicator.svelte +1 -1
  41. package/dist/components/collapsible/collapsible-root.svelte +1 -1
  42. package/dist/components/combobox/atoms.d.ts +5 -1
  43. package/dist/components/combobox/atoms.js +5 -1
  44. package/dist/components/combobox/{combobox-input.svelte → combobox-control.svelte} +3 -3
  45. package/dist/components/combobox/{combobox-input.svelte.d.ts → combobox-control.svelte.d.ts} +3 -3
  46. package/dist/components/combobox/combobox-root.svelte.d.ts +2 -2
  47. package/dist/components/combobox/combobox-trigger.svelte +1 -1
  48. package/dist/components/combobox/compobox-item.svelte +1 -1
  49. package/dist/components/container/container.svelte +1 -1
  50. package/dist/components/datagrid/datagrid-body.svelte +1 -1
  51. package/dist/components/datagrid/datagrid-footer.svelte +1 -1
  52. package/dist/components/datagrid/datagrid-header.svelte +1 -1
  53. package/dist/components/datagrid/datagrid-root.svelte +1 -1
  54. package/dist/components/datagrid/td/datagrid-td.svelte +1 -1
  55. package/dist/components/datagrid/th/datagrid-th-sort-icon.svelte +1 -1
  56. package/dist/components/datagrid/th/datagrid-th.svelte +1 -1
  57. package/dist/components/dialog/dialog-body.svelte +1 -1
  58. package/dist/components/dialog/dialog-close-button.svelte +1 -1
  59. package/dist/components/dialog/dialog-content.svelte +8 -11
  60. package/dist/components/dialog/dialog-description.svelte +1 -1
  61. package/dist/components/dialog/dialog-footer.svelte +1 -1
  62. package/dist/components/dialog/dialog-header.svelte +1 -1
  63. package/dist/components/dialog/dialog-root.svelte +123 -120
  64. package/dist/components/dialog/dialog-root.svelte.d.ts +3 -1
  65. package/dist/components/dialog/dialog-title.svelte +1 -1
  66. package/dist/components/drawer/drawer-backdrop.svelte +1 -1
  67. package/dist/components/drawer/drawer-backdrop.svelte.d.ts +1 -0
  68. package/dist/components/drawer/drawer-body.svelte +1 -1
  69. package/dist/components/drawer/drawer-description.svelte +1 -1
  70. package/dist/components/drawer/drawer-footer.svelte +1 -1
  71. package/dist/components/drawer/drawer-header.svelte +1 -1
  72. package/dist/components/drawer/drawer-root.svelte +118 -113
  73. package/dist/components/drawer/drawer-root.svelte.d.ts +5 -2
  74. package/dist/components/drawer/drawer-title.svelte +1 -1
  75. package/dist/components/dropdown/dropdown-placeholder.svelte +1 -1
  76. package/dist/components/dropdown/dropdown-query.svelte +1 -1
  77. package/dist/components/dropdown/dropdown-trigger.svelte +1 -1
  78. package/dist/components/dropdown/dropdown-value.svelte +1 -3
  79. package/dist/components/dropdown/item/bond.svelte.d.ts +4 -0
  80. package/dist/components/dropdown/item/bond.svelte.js +9 -0
  81. package/dist/components/dropdown/item/dropdown-item.svelte +10 -6
  82. package/dist/components/form/field/bond.svelte.d.ts +8 -0
  83. package/dist/components/form/field/bond.svelte.js +13 -1
  84. package/dist/components/form/field/field-control.svelte +7 -0
  85. package/dist/components/form/field/field-control.svelte.d.ts +2 -2
  86. package/dist/components/form/form.stories.svelte +3 -3
  87. package/dist/components/icon/icon.svelte.d.ts +1 -0
  88. package/dist/components/input/atoms.d.ts +5 -1
  89. package/dist/components/input/atoms.js +5 -1
  90. package/dist/components/input/{input-value.svelte → input-control.svelte} +14 -20
  91. package/dist/components/input/input-control.svelte.d.ts +27 -0
  92. package/dist/components/input/input-icon.svelte +1 -1
  93. package/dist/components/input/input-placeholder.svelte +1 -3
  94. package/dist/components/input/input-placeholder.svelte.d.ts +1 -0
  95. package/dist/components/input/input-root.svelte +5 -12
  96. package/dist/components/input/input-root.svelte.d.ts +3 -19
  97. package/dist/components/input/input.stories.svelte +2 -2
  98. package/dist/components/input/types.d.ts +22 -0
  99. package/dist/components/input/types.js +1 -0
  100. package/dist/components/label/label.svelte.d.ts +1 -0
  101. package/dist/components/layer/layer-inner.svelte.d.ts +1 -0
  102. package/dist/components/layer/layer-root.svelte.d.ts +1 -0
  103. package/dist/components/list/list-group.svelte +1 -1
  104. package/dist/components/list/list-item.svelte +1 -1
  105. package/dist/components/list/list-root.svelte +6 -1
  106. package/dist/components/list/list-title.svelte +1 -1
  107. package/dist/components/menu/menu-list.svelte +1 -1
  108. package/dist/components/popover/bond.svelte.d.ts +2 -0
  109. package/dist/components/popover/bond.svelte.js +1 -1
  110. package/dist/components/popover/popover-arrow.svelte +111 -117
  111. package/dist/components/popover/popover-arrow.svelte.d.ts +2 -2
  112. package/dist/components/popover/popover-content.svelte +139 -147
  113. package/dist/components/popover/popover-content.svelte.d.ts +3 -17
  114. package/dist/components/popover/popover-indicator.svelte +1 -1
  115. package/dist/components/popover/popover-root.svelte +49 -63
  116. package/dist/components/popover/popover-root.svelte.d.ts +1 -15
  117. package/dist/components/popover/popover-trigger.svelte +47 -56
  118. package/dist/components/popover/popover-trigger.svelte.d.ts +2 -8
  119. package/dist/components/popover/types.d.ts +39 -0
  120. package/dist/components/popover/types.js +1 -0
  121. package/dist/components/portal/active-portal.svelte +22 -16
  122. package/dist/components/portal/active-portal.svelte.d.ts +2 -2
  123. package/dist/components/portal/portal-inner.svelte +1 -1
  124. package/dist/components/portal/portal-inner.svelte.d.ts +1 -0
  125. package/dist/components/portal/portal-root.svelte +1 -1
  126. package/dist/components/portal/portal-root.svelte.d.ts +1 -0
  127. package/dist/components/portal/teleport.svelte +55 -49
  128. package/dist/components/portal/teleport.svelte.d.ts +4 -2
  129. package/dist/components/radio/radio-group.stories.svelte +4 -4
  130. package/dist/components/radio/radio.svelte +3 -3
  131. package/dist/components/radio/radio.svelte.d.ts +2 -2
  132. package/dist/components/root/root.css +24 -66
  133. package/dist/components/root/root.svelte +1 -1
  134. package/dist/components/sidebar/sidebar-content.svelte +2 -16
  135. package/dist/components/sidebar/sidebar-content.svelte.d.ts +2 -9
  136. package/dist/components/sidebar/sidebar-root.svelte +4 -23
  137. package/dist/components/sidebar/sidebar-root.svelte.d.ts +2 -13
  138. package/dist/components/sidebar/types.d.ts +19 -0
  139. package/dist/components/sidebar/types.js +1 -0
  140. package/dist/components/stack/stack-item.svelte +5 -1
  141. package/dist/components/stack/stack-root.svelte +5 -1
  142. package/dist/components/stack/stack-root.svelte.d.ts +1 -0
  143. package/dist/components/tabs/tab/tab-body.svelte +1 -1
  144. package/dist/components/tabs/tab/tab-description.svelte +1 -1
  145. package/dist/components/tabs/tab/tab-header.svelte +2 -2
  146. package/dist/components/tabs/tab/tab-root.svelte +6 -1
  147. package/dist/components/tabs/tabs-body.svelte +1 -1
  148. package/dist/components/tabs/tabs-header.svelte +1 -1
  149. package/dist/components/tabs/tabs-root.svelte +1 -1
  150. package/dist/components/textarea/textarea-input.svelte +2 -1
  151. package/dist/components/toast/toast-description.svelte +1 -1
  152. package/dist/components/toast/toast-description.svelte.d.ts +1 -0
  153. package/dist/components/toast/toast-root.svelte +1 -1
  154. package/dist/components/toast/toast-root.svelte.d.ts +1 -0
  155. package/dist/components/toast/toast-title.svelte +1 -1
  156. package/dist/components/toast/toast-title.svelte.d.ts +1 -0
  157. package/dist/components/tree/tree-body.svelte +1 -1
  158. package/dist/components/tree/tree-header.svelte +1 -1
  159. package/dist/components/tree/tree-header.svelte.d.ts +1 -0
  160. package/dist/components/tree/tree-indicator.svelte +1 -1
  161. package/dist/components/tree/tree-root.svelte +1 -1
  162. package/dist/context/preset.svelte.d.ts +4 -1
  163. package/dist/utils/index.d.ts +1 -0
  164. package/dist/utils/index.js +1 -0
  165. package/dist/utils/variant.d.ts +213 -0
  166. package/dist/utils/variant.js +137 -0
  167. package/llm/composition.md +395 -0
  168. package/llm/crafting.md +838 -0
  169. package/llm/motion.md +970 -0
  170. package/llm/philosophy.md +23 -0
  171. package/llm/preset-variant-integration.md +516 -0
  172. package/llm/preset.md +383 -0
  173. package/llm/styling.md +216 -0
  174. package/llm/usage.md +46 -0
  175. package/llm/variants.md +712 -0
  176. package/package.json +2 -1
  177. package/dist/components/input/input-value.svelte.d.ts +0 -19
@@ -1,120 +1,123 @@
1
- <script module lang="ts">
2
- export type DialogProps<
3
- E extends keyof HTMLElementTagNameMap = 'div',
4
- B extends Base = Base
5
- > = HtmlAtomProps<E, B> & {
6
- open?: boolean;
7
- disabled?: boolean;
8
- factory?: (props: DialogBondProps) => DialogBond;
9
- children?: Snippet<[{ dialog: DialogBond }]>;
10
- };
11
- </script>
12
-
13
- <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
14
- import type { Snippet } from 'svelte';
15
- import { animate as motion } from 'motion';
16
- import { DialogBond, DialogBondState, type DialogBondProps } from './bond.svelte';
17
- import { Teleport, ActivePortal } from '../portal';
18
- import { defineProperty, defineState } from '../../utils';
19
- import type { HtmlAtomProps, Base } from '../atom';
20
-
21
- let {
22
- class: klass = '',
23
- open = $bindable(false),
24
- disabled = false,
25
- as = 'dialog' as E,
26
- factory = _factory,
27
- onmount = undefined,
28
- ondestroy = undefined,
29
- animate = _animate,
30
- enter = undefined,
31
- exit = undefined,
32
- initial = undefined,
33
- children = undefined,
34
- ...restProps
35
- }: DialogProps<E, B> = $props();
36
-
37
- const bondProps = defineState<DialogBondProps>(
38
- [
39
- defineProperty(
40
- 'open',
41
- () => open,
42
- (v) => {
43
- open = v;
44
- }
45
- )
46
- ],
47
- () => ({ disabled })
48
- );
49
- const bond = _factory(bondProps).share();
50
-
51
- const rootProps = $derived({
52
- ...bond?.root({}),
53
- ...restProps
54
- });
55
-
56
- function _factory(props: typeof bondProps) {
57
- const bondState = new DialogBondState(() => props);
58
- return new DialogBond(bondState);
59
- }
60
-
61
- function _animate(node: HTMLDialogElement) {
62
- if (open) {
63
- bond.elements.root?.show?.();
64
- motion(
65
- node,
66
- {
67
- opacity: +open
68
- },
69
- {
70
- duration: 0,
71
- ease: 'anticipate'
72
- }
73
- );
74
- }
75
- }
76
-
77
- function onclickDialogElement(ev: MouseEvent) {
78
- if (bond?.elements?.content?.contains(ev.target)) {
79
- return;
80
- }
81
-
82
- // Clicked the backdrop
83
- bond.state.close();
84
- }
85
-
86
- export function getBond() {
87
- return bond;
88
- }
89
- </script>
90
-
91
- <Teleport
92
- {as}
93
- {bond}
94
- preset="dialog"
95
- portal="root.l1"
96
- class={[
97
- 'pointer-events-auto fixed top-0 left-0 flex h-full w-full items-center justify-center bg-neutral-900/10 opacity-0',
98
- !open && 'pointer-events-none',
99
- '$preset',
100
- klass
101
- ]}
102
- enter={enter?.bind(bond.state)}
103
- exit={exit?.bind(bond.state)}
104
- initial={initial?.bind(bond.state)}
105
- animate={animate?.bind(bond.state)}
106
- onmount={onmount?.bind(bond.state)}
107
- ondestroy={ondestroy?.bind(bond.state)}
108
- onclick={onclickDialogElement}
109
- oncancel={(ev) => {
110
- ev.preventDefault();
111
- open = false;
112
- }}
113
- {...rootProps}
114
- >
115
- <!-- <div class="w-full h-full flex items-center justify-center"> -->
116
- <ActivePortal id="root.l1">
117
- {@render children?.({ dialog: bond })}
118
- </ActivePortal>
119
- <!-- </div> -->
120
- </Teleport>
1
+ <script module lang="ts">
2
+ export type DialogProps<
3
+ E extends keyof HTMLElementTagNameMap = 'div',
4
+ B extends Base = Base
5
+ > = HtmlAtomProps<E, B> & {
6
+ open?: boolean;
7
+ disabled?: boolean;
8
+ portal?: string | PortalBond;
9
+ factory?: (props: DialogBondProps) => DialogBond;
10
+ children?: Snippet<[{ dialog: DialogBond }]>;
11
+ };
12
+ </script>
13
+
14
+ <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
15
+ import type { Snippet } from 'svelte';
16
+ import { animate as motion } from 'motion';
17
+ import { Teleport, ActivePortal, PortalBond } from '../portal';
18
+ import { defineProperty, defineState } from '../../utils';
19
+ import type { HtmlAtomProps, Base } from '../atom';
20
+ import { DURATION } from '../../shared';
21
+ import { DialogBond, DialogBondState, type DialogBondProps } from './bond.svelte';
22
+
23
+ let {
24
+ class: klass = '',
25
+ open = $bindable(false),
26
+ disabled = false,
27
+ as = 'dialog' as E,
28
+ portal = undefined,
29
+ factory = _factory,
30
+ onmount = undefined,
31
+ ondestroy = undefined,
32
+ animate = _animate,
33
+ enter = undefined,
34
+ exit = undefined,
35
+ initial = undefined,
36
+ children = undefined,
37
+ ...restProps
38
+ }: DialogProps<E, B> = $props();
39
+
40
+ const bondProps = defineState<DialogBondProps>(
41
+ [
42
+ defineProperty(
43
+ 'open',
44
+ () => open,
45
+ (v) => {
46
+ open = v;
47
+ }
48
+ )
49
+ ],
50
+ () => ({ disabled })
51
+ );
52
+ const bond = _factory(bondProps).share();
53
+
54
+ const rootProps = $derived({
55
+ ...bond?.root({}),
56
+ ...restProps
57
+ });
58
+
59
+ function _factory(props: typeof bondProps) {
60
+ const bondState = new DialogBondState(() => props);
61
+ return new DialogBond(bondState);
62
+ }
63
+
64
+ function _animate(node: HTMLDialogElement) {
65
+ motion(
66
+ node,
67
+ {
68
+ opacity: +open
69
+ },
70
+ {
71
+ duration: DURATION.normal / 1000,
72
+ ease: 'anticipate',
73
+ onComplete: () => {
74
+ if (!open) {
75
+ node?.close?.();
76
+ }
77
+ }
78
+ }
79
+ );
80
+ }
81
+
82
+ function onclickDialogElement(ev: MouseEvent) {
83
+ if (bond?.elements?.content?.contains(ev.target)) {
84
+ return;
85
+ }
86
+
87
+ // Clicked the backdrop
88
+ bond.state.close();
89
+ }
90
+
91
+ export function getBond() {
92
+ return bond;
93
+ }
94
+ </script>
95
+
96
+ <Teleport
97
+ {as}
98
+ {bond}
99
+ preset="dialog"
100
+ portal={portal ?? 'root.l1'}
101
+ class={[
102
+ 'border-border pointer-events-auto fixed top-0 left-0 flex h-full w-full items-center justify-center bg-neutral-900/10 opacity-0',
103
+ !open && 'pointer-events-none',
104
+ '$preset',
105
+ klass
106
+ ]}
107
+ enter={enter?.bind(bond.state)}
108
+ exit={exit?.bind(bond.state)}
109
+ initial={initial?.bind(bond.state)}
110
+ animate={animate?.bind(bond.state)}
111
+ onmount={onmount?.bind(bond.state)}
112
+ ondestroy={ondestroy?.bind(bond.state)}
113
+ onclick={onclickDialogElement}
114
+ oncancel={(ev) => {
115
+ ev.preventDefault();
116
+ open = false;
117
+ }}
118
+ {...rootProps}
119
+ >
120
+ <ActivePortal portal={portal ?? 'root.l1'}>
121
+ {@render children?.({ dialog: bond })}
122
+ </ActivePortal>
123
+ </Teleport>
@@ -1,14 +1,16 @@
1
1
  export type DialogProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> = HtmlAtomProps<E, B> & {
2
2
  open?: boolean;
3
3
  disabled?: boolean;
4
+ portal?: string | PortalBond;
4
5
  factory?: (props: DialogBondProps) => DialogBond;
5
6
  children?: Snippet<[{
6
7
  dialog: DialogBond;
7
8
  }]>;
8
9
  };
9
10
  import type { Snippet } from 'svelte';
10
- import { DialogBond, DialogBondState, type DialogBondProps } from './bond.svelte';
11
+ import { PortalBond } from '../portal';
11
12
  import type { HtmlAtomProps, Base } from '../atom';
13
+ import { DialogBond, DialogBondState, type DialogBondProps } from './bond.svelte';
12
14
  declare function $$render<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base>(): {
13
15
  props: DialogProps<E, B>;
14
16
  exports: {
@@ -34,7 +34,7 @@
34
34
  {as}
35
35
  {bond}
36
36
  preset="dialog.title"
37
- class={['$preset', klass]}
37
+ class={['border-border', '$preset', klass]}
38
38
  enter={enter?.bind(bond.state)}
39
39
  exit={exit?.bind(bond.state)}
40
40
  initial={initial?.bind(bond.state)}
@@ -36,7 +36,7 @@
36
36
  <HtmlAtom
37
37
  {bond}
38
38
  preset="drawer.backdrop"
39
- class={['absolute inset-0 z-0 bg-black/30', '$preset', klass]}
39
+ class={['border-border absolute inset-0 z-0 bg-black/30', '$preset', klass]}
40
40
  onmount={onmount?.bind(bond.state)}
41
41
  ondestroy={ondestroy?.bind(bond.state)}
42
42
  enter={enter?.bind(bond.state)}
@@ -21,6 +21,7 @@ declare function $$render<E extends keyof HTMLElementTagNameMap = 'div', B exten
21
21
  bond?: import("../..").Bond;
22
22
  base?: B | undefined;
23
23
  preset?: import("../..").ModuleName | (string & {});
24
+ variants?: import("../..").VariantDefinition<any> | ((bond: import("../..").Bond, variantProps: Record<string, any>) => Record<string, any>);
24
25
  } & {
25
26
  as?: E | undefined;
26
27
  class?: string;
@@ -43,7 +43,7 @@
43
43
  <HtmlAtom
44
44
  {bond}
45
45
  preset="drawer.body"
46
- class={['$preset', klass]}
46
+ class={['border-border', '$preset', klass]}
47
47
  onmount={onmount?.bind(bond.state)}
48
48
  ondestroy={ondestroy?.bind(bond.state)}
49
49
  enter={enter?.bind(bond.state)}
@@ -44,7 +44,7 @@
44
44
  {as}
45
45
  {bond}
46
46
  preset="drawer.description"
47
- class={['$preset', klass]}
47
+ class={['border-border', '$preset', klass]}
48
48
  onmount={onmount?.bind(bond.state)}
49
49
  ondestroy={ondestroy?.bind(bond.state)}
50
50
  enter={enter?.bind(bond.state)}
@@ -41,7 +41,7 @@
41
41
 
42
42
  <HtmlAtom
43
43
  {bond}
44
- class={['$preset', klass]}
44
+ class={['border-border', '$preset', klass]}
45
45
  onmount={onmount?.bind(bond.state)}
46
46
  ondestroy={ondestroy?.bind(bond.state)}
47
47
  enter={enter?.bind(bond.state)}
@@ -42,7 +42,7 @@
42
42
  <HtmlAtom
43
43
  {bond}
44
44
  preset="drawer.header"
45
- class={['$preset', klass]}
45
+ class={['border-border', '$preset', klass]}
46
46
  onmount={onmount?.bind(bond.state)}
47
47
  ondestroy={ondestroy?.bind(bond.state)}
48
48
  enter={enter?.bind(bond.state)}
@@ -1,113 +1,118 @@
1
- <script module lang="ts">
2
- import type { Factory } from '../../types';
3
-
4
- export type SlideoverRootProps<
5
- E extends keyof HTMLElementTagNameMap,
6
- B extends Base = Base
7
- > = Override<
8
- HtmlAtomProps<E, B>,
9
- {
10
- children?: Snippet<[{ slideover: DrawerBond }]>;
11
- initial?: (node: HTMLElement, bond: DrawerBond) => void;
12
- enter?: (node: HTMLElement, bond: DrawerBond) => TransitionFunction<'dialog'>;
13
- exit?: (node: HTMLElement, bond: DrawerBond) => TransitionFunction<'dialog'>;
14
- }
15
- > & {
16
- open?: boolean;
17
- disabled?: boolean;
18
- onclose?: (event: Event, bond: DrawerBond) => void;
19
- factory?: Factory<DrawerBond>;
20
- };
21
- </script>
22
-
23
- <script lang="ts" generics="E extends keyof HTMLElementTagNameMap='dialog', B extends Base = Base">
24
- import type { Snippet } from 'svelte';
25
- import type { HTMLAttributes } from 'svelte/elements';
26
- import type { Override } from '../../types';
27
- import { defineProperty, defineState } from '../../utils';
28
- import { type TransitionFunction } from '../element';
29
- import Teleport from '../portal/teleport.svelte';
30
- import type { HtmlAtomProps, Base } from '../atom';
31
- import { DrawerBond, DrawerBondState, type DrawerBondProps } from './bond.svelte';
32
-
33
- type Element = HTMLElementTagNameMap[E];
34
-
35
- let {
36
- open = $bindable(false),
37
- children = undefined,
38
- class: klass = '',
39
- as = 'dialog',
40
- disabled = false,
41
- onclose = undefined,
42
- onmount = undefined,
43
- ondestroy = undefined,
44
- animate = undefined,
45
- enter = undefined,
46
- exit = undefined,
47
- initial = undefined,
48
- factory = _factory,
49
- ...restProps
50
- }: SlideoverRootProps<E, B> & HTMLAttributes<Element> = $props();
51
-
52
- const bondProps = defineState<DrawerBondProps>(
53
- [
54
- defineProperty(
55
- 'open',
56
- () => open,
57
- (v) => {
58
- open = v;
59
- }
60
- ),
61
- defineProperty('disabled', () => disabled)
62
- ],
63
- () => ({})
64
- );
65
- const bond = _factory(bondProps).share();
66
-
67
- const rootProps = $derived({
68
- ...bond?.root(),
69
- ...restProps
70
- });
71
-
72
- $effect(() => {
73
- if (bond.elements.root instanceof HTMLDialogElement) {
74
- if (open) {
75
- bond.elements.root?.show?.();
76
- }
77
- }
78
- });
79
-
80
- function _factory(props: typeof bondProps) {
81
- const bondState = new DrawerBondState(() => props);
82
- const bond = new DrawerBond(bondState);
83
-
84
- return bond;
85
- }
86
-
87
- export function getBond() {
88
- return bond;
89
- }
90
- </script>
91
-
92
- <Teleport
93
- {as}
94
- {bond}
95
- portal="root.l1"
96
- preset="drawer"
97
- class={[
98
- 'pointer-events-auto h-full w-full overflow-hidden bg-transparent',
99
- !open && 'pointer-events-none',
100
- '$preset',
101
- klass
102
- ]}
103
- closeby="none"
104
- onmount={onmount?.bind(bond.state)}
105
- ondestroy={ondestroy?.bind(bond.state)}
106
- enter={enter?.bind(bond.state)}
107
- exit={exit?.bind(bond.state)}
108
- initial={initial?.bind(bond.state)}
109
- animate={animate?.bind(bond.state)}
110
- {...rootProps}
111
- >
112
- {@render children?.({ drawer: bond })}
113
- </Teleport>
1
+ <script module lang="ts">
2
+ import type { Factory } from '../../types';
3
+
4
+ export type SlideoverRootProps<
5
+ E extends keyof HTMLElementTagNameMap,
6
+ B extends Base = Base
7
+ > = Override<
8
+ HtmlAtomProps<E, B>,
9
+ {
10
+ children?: Snippet<[{ drawer: DrawerBond }]>;
11
+ initial?: (node: HTMLElement, bond: DrawerBond) => void;
12
+ enter?: (node: HTMLElement, bond: DrawerBond) => TransitionFunction<'dialog'>;
13
+ exit?: (node: HTMLElement, bond: DrawerBond) => TransitionFunction<'dialog'>;
14
+ }
15
+ > & {
16
+ open?: boolean;
17
+ disabled?: boolean;
18
+ portal?: string | PortalBond;
19
+ onclose?: (event: Event, bond: DrawerBond) => void;
20
+ factory?: Factory<DrawerBond>;
21
+ };
22
+ </script>
23
+
24
+ <script lang="ts" generics="E extends keyof HTMLElementTagNameMap='dialog', B extends Base = Base">
25
+ import type { Snippet } from 'svelte';
26
+ import type { HTMLAttributes } from 'svelte/elements';
27
+ import type { Override } from '../../types';
28
+ import { defineProperty, defineState } from '../../utils';
29
+ import { type TransitionFunction } from '../element';
30
+ import Teleport from '../portal/teleport.svelte';
31
+ import type { HtmlAtomProps, Base } from '../atom';
32
+ import { DrawerBond, DrawerBondState, type DrawerBondProps } from './bond.svelte';
33
+ import { ActivePortal, type PortalBond } from '../portal';
34
+
35
+ type Element = HTMLElementTagNameMap[E];
36
+
37
+ let {
38
+ open = $bindable(false),
39
+ children = undefined,
40
+ class: klass = '',
41
+ as = 'dialog',
42
+ disabled = false,
43
+ portal = undefined,
44
+ onclose = undefined,
45
+ onmount = undefined,
46
+ ondestroy = undefined,
47
+ animate = undefined,
48
+ enter = undefined,
49
+ exit = undefined,
50
+ initial = undefined,
51
+ factory = _factory,
52
+ ...restProps
53
+ }: SlideoverRootProps<E, B> & HTMLAttributes<Element> = $props();
54
+
55
+ const bondProps = defineState<DrawerBondProps>(
56
+ [
57
+ defineProperty(
58
+ 'open',
59
+ () => open,
60
+ (v) => {
61
+ open = v;
62
+ }
63
+ ),
64
+ defineProperty('disabled', () => disabled)
65
+ ],
66
+ () => ({})
67
+ );
68
+ const bond = _factory(bondProps).share();
69
+
70
+ const rootProps = $derived({
71
+ ...bond?.root(),
72
+ ...restProps
73
+ });
74
+
75
+ $effect(() => {
76
+ if (bond.elements.root instanceof HTMLDialogElement) {
77
+ if (open) {
78
+ bond.elements.root?.show?.();
79
+ }
80
+ }
81
+ });
82
+
83
+ function _factory(props: typeof bondProps) {
84
+ const bondState = new DrawerBondState(() => props);
85
+ const bond = new DrawerBond(bondState);
86
+
87
+ return bond;
88
+ }
89
+
90
+ export function getBond() {
91
+ return bond;
92
+ }
93
+ </script>
94
+
95
+ <Teleport
96
+ {as}
97
+ {bond}
98
+ portal={portal ?? 'root.l1'}
99
+ preset="drawer"
100
+ class={[
101
+ 'border-border pointer-events-auto h-full w-full overflow-hidden bg-transparent',
102
+ !open && 'pointer-events-none',
103
+ '$preset',
104
+ klass
105
+ ]}
106
+ closeby="none"
107
+ onmount={onmount?.bind(bond.state)}
108
+ ondestroy={ondestroy?.bind(bond.state)}
109
+ enter={enter?.bind(bond.state)}
110
+ exit={exit?.bind(bond.state)}
111
+ initial={initial?.bind(bond.state)}
112
+ animate={animate?.bind(bond.state)}
113
+ {...rootProps}
114
+ >
115
+ <ActivePortal portal={portal ?? 'root.l1'}>
116
+ {@render children?.({ drawer: bond })}
117
+ </ActivePortal>
118
+ </Teleport>
@@ -1,7 +1,7 @@
1
1
  import type { Factory } from '../../types';
2
2
  export type SlideoverRootProps<E extends keyof HTMLElementTagNameMap, B extends Base = Base> = Override<HtmlAtomProps<E, B>, {
3
3
  children?: Snippet<[{
4
- slideover: DrawerBond;
4
+ drawer: DrawerBond;
5
5
  }]>;
6
6
  initial?: (node: HTMLElement, bond: DrawerBond) => void;
7
7
  enter?: (node: HTMLElement, bond: DrawerBond) => TransitionFunction<'dialog'>;
@@ -9,6 +9,7 @@ export type SlideoverRootProps<E extends keyof HTMLElementTagNameMap, B extends
9
9
  }> & {
10
10
  open?: boolean;
11
11
  disabled?: boolean;
12
+ portal?: string | PortalBond;
12
13
  onclose?: (event: Event, bond: DrawerBond) => void;
13
14
  factory?: Factory<DrawerBond>;
14
15
  };
@@ -18,10 +19,11 @@ import type { Override } from '../../types';
18
19
  import { type TransitionFunction } from '../element';
19
20
  import type { HtmlAtomProps, Base } from '../atom';
20
21
  import { DrawerBond, DrawerBondState, type DrawerBondProps } from './bond.svelte';
22
+ import { type PortalBond } from '../portal';
21
23
  declare function $$render<E extends keyof HTMLElementTagNameMap = 'dialog', B extends Base = Base>(): {
22
24
  props: Omit<HtmlAtomProps<E, B>, "initial" | "enter" | "exit" | "children"> & {
23
25
  children?: Snippet<[{
24
- slideover: DrawerBond;
26
+ drawer: DrawerBond;
25
27
  }]>;
26
28
  initial?: (node: HTMLElement, bond: DrawerBond) => void;
27
29
  enter?: (node: HTMLElement, bond: DrawerBond) => TransitionFunction<"dialog">;
@@ -29,6 +31,7 @@ declare function $$render<E extends keyof HTMLElementTagNameMap = 'dialog', B ex
29
31
  } & {
30
32
  open?: boolean;
31
33
  disabled?: boolean;
34
+ portal?: string | PortalBond;
32
35
  onclose?: (event: Event, bond: DrawerBond) => void;
33
36
  factory?: Factory<DrawerBond>;
34
37
  } & HTMLAttributes<HTMLElementTagNameMap[E]>;
@@ -44,7 +44,7 @@
44
44
  {as}
45
45
  {bond}
46
46
  preset="drawer.title"
47
- class={['$preset', klass]}
47
+ class={['border-border', '$preset', klass]}
48
48
  onmount={onmount?.bind(bond.state)}
49
49
  ondestroy={ondestroy?.bind(bond.state)}
50
50
  enter={enter?.bind(bond.state)}
@@ -29,7 +29,7 @@
29
29
  {bond}
30
30
  preset="dropdown.placeholder"
31
31
  class={[
32
- 'absolute inset-0 flex h-full w-full items-center px-2 leading-1 opacity-50 outline-none',
32
+ 'border-border absolute inset-0 flex h-full w-full items-center px-2 leading-1 opacity-50 outline-none',
33
33
  '$preset',
34
34
  klass
35
35
  ]}
@@ -38,7 +38,7 @@
38
38
  );
39
39
  </script>
40
40
 
41
- <Input.Value
41
+ <Input.Control
42
42
  bind:value={bond.state.query}
43
43
  {bond}
44
44
  preset="dropdown.query"
@@ -39,7 +39,7 @@
39
39
  {as}
40
40
  {bond}
41
41
  preset="dropdown.trigger"
42
- class={['relative flex h-auto min-h-10 flex-wrap items-center', '$preset', klass]}
42
+ class={['border-border relative flex h-auto min-h-10 flex-wrap items-center', '$preset', klass]}
43
43
  onmount={onmount?.bind(bond.state)}
44
44
  ondestroy={ondestroy?.bind(bond.state)}
45
45
  enter={enter?.bind(bond.state)}