@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,93 +1,93 @@
1
- <script lang="ts" generics="E extends keyof HTMLElementTagNameMap='dialog', B extends Base = Base">
2
- import type { HTMLAttributes } from 'svelte/elements';
3
- import { defineProperty, defineState } from '../../utils';
4
- import Teleport from '../portal/teleport.svelte';
5
- import type { Base } from '../atom';
6
- import { DrawerBond, DrawerBondState, type DrawerBondProps } from './bond.svelte';
7
- import type { SlideoverRootProps } from './types';
8
- import { ActivePortal } from '../portal';
9
-
10
- type Element = HTMLElementTagNameMap[E];
11
-
12
- let {
13
- open = $bindable(false),
14
- children = undefined,
15
- class: klass = '',
16
- as = 'dialog',
17
- disabled = false,
18
- portal = undefined,
19
- onclose = undefined,
20
- onmount = undefined,
21
- ondestroy = undefined,
22
- animate = undefined,
23
- enter = undefined,
24
- exit = undefined,
25
- initial = undefined,
26
- factory = _factory,
27
- ...restProps
28
- }: SlideoverRootProps<E, B> & HTMLAttributes<Element> = $props();
29
-
30
- const bondProps = defineState<DrawerBondProps>(
31
- [
32
- defineProperty(
33
- 'open',
34
- () => open,
35
- (v) => {
36
- open = v;
37
- }
38
- ),
39
- defineProperty('disabled', () => disabled)
40
- ],
41
- () => ({})
42
- );
43
- const bond = _factory(bondProps).share();
44
-
45
- const rootProps = $derived({
46
- ...bond?.root(),
47
- ...restProps
48
- });
49
-
50
- $effect(() => {
51
- if (bond.elements.root instanceof HTMLDialogElement) {
52
- if (open) {
53
- bond.elements.root?.show?.();
54
- }
55
- }
56
- });
57
-
58
- function _factory(props: typeof bondProps) {
59
- const bondState = new DrawerBondState(() => props);
60
- const bond = new DrawerBond(bondState);
61
-
62
- return bond;
63
- }
64
-
65
- export function getBond() {
66
- return bond;
67
- }
68
- </script>
69
-
70
- <Teleport
71
- {as}
72
- {bond}
73
- portal={portal ?? 'root.l1'}
74
- preset="drawer"
75
- class={[
76
- 'border-border pointer-events-auto h-full w-full overflow-hidden bg-transparent',
77
- !open && 'pointer-events-none',
78
- '$preset',
79
- klass
80
- ]}
81
- closeby="none"
82
- onmount={onmount?.bind(bond.state)}
83
- ondestroy={ondestroy?.bind(bond.state)}
84
- enter={enter?.bind(bond.state)}
85
- exit={exit?.bind(bond.state)}
86
- initial={initial?.bind(bond.state)}
87
- animate={animate?.bind(bond.state)}
88
- {...rootProps}
89
- >
90
- <ActivePortal portal={portal ?? 'root.l1'}>
91
- {@render children?.({ drawer: bond })}
92
- </ActivePortal>
93
- </Teleport>
1
+ <script lang="ts" generics="E extends keyof HTMLElementTagNameMap='dialog', B extends Base = Base">
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import { defineProperty, defineState } from '../../utils';
4
+ import Teleport from '../portal/teleport.svelte';
5
+ import type { Base } from '../atom';
6
+ import { DrawerBond, DrawerBondState, type DrawerBondProps } from './bond.svelte';
7
+ import type { SlideoverRootProps } from './types';
8
+ import { ActivePortal } from '../portal';
9
+
10
+ type Element = HTMLElementTagNameMap[E];
11
+
12
+ let {
13
+ open = $bindable(false),
14
+ children = undefined,
15
+ class: klass = '',
16
+ as = 'dialog',
17
+ disabled = false,
18
+ portal = undefined,
19
+ onclose = undefined,
20
+ onmount = undefined,
21
+ ondestroy = undefined,
22
+ animate = undefined,
23
+ enter = undefined,
24
+ exit = undefined,
25
+ initial = undefined,
26
+ factory = _factory,
27
+ ...restProps
28
+ }: SlideoverRootProps<E, B> & HTMLAttributes<Element> = $props();
29
+
30
+ const bondProps = defineState<DrawerBondProps>(
31
+ [
32
+ defineProperty(
33
+ 'open',
34
+ () => open,
35
+ (v) => {
36
+ open = v;
37
+ }
38
+ ),
39
+ defineProperty('disabled', () => disabled)
40
+ ],
41
+ () => ({})
42
+ );
43
+ const bond = _factory(bondProps).share();
44
+
45
+ const rootProps = $derived({
46
+ ...bond?.root(),
47
+ ...restProps
48
+ });
49
+
50
+ $effect(() => {
51
+ if (bond.elements.root instanceof HTMLDialogElement) {
52
+ if (open) {
53
+ bond.elements.root?.show?.();
54
+ }
55
+ }
56
+ });
57
+
58
+ function _factory(props: typeof bondProps) {
59
+ const bondState = new DrawerBondState(() => props);
60
+ const bond = new DrawerBond(bondState);
61
+
62
+ return bond;
63
+ }
64
+
65
+ export function getBond() {
66
+ return bond;
67
+ }
68
+ </script>
69
+
70
+ <Teleport
71
+ {as}
72
+ {bond}
73
+ portal={portal ?? 'root.l1'}
74
+ preset="drawer"
75
+ class={[
76
+ 'border-border pointer-events-auto h-full w-full overflow-hidden bg-transparent',
77
+ !open && 'pointer-events-none',
78
+ '$preset',
79
+ klass
80
+ ]}
81
+ closeby="none"
82
+ onmount={onmount?.bind(bond.state)}
83
+ ondestroy={ondestroy?.bind(bond.state)}
84
+ enter={enter?.bind(bond.state)}
85
+ exit={exit?.bind(bond.state)}
86
+ initial={initial?.bind(bond.state)}
87
+ animate={animate?.bind(bond.state)}
88
+ {...rootProps}
89
+ >
90
+ <ActivePortal portal={portal ?? 'root.l1'}>
91
+ {@render children?.({ drawer: bond })}
92
+ </ActivePortal>
93
+ </Teleport>
@@ -1,44 +1,44 @@
1
- <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'h3', B extends Base = Base">
2
- import type { HTMLAttributes } from 'svelte/elements';
3
- import { HtmlAtom, type Base } from '../atom';
4
- import { DrawerBond } from './bond.svelte';
5
- import type { SlideoverTitleProps } from './types';
6
-
7
- type Element = HTMLElementTagNameMap[E];
8
-
9
- const bond = DrawerBond.get();
10
-
11
- let {
12
- class: klass = '',
13
- as = 'h3' as E,
14
- children,
15
- onmount = undefined,
16
- ondestroy = undefined,
17
- animate = undefined,
18
- enter = undefined,
19
- exit = undefined,
20
- initial = undefined,
21
- ...restProps
22
- }: SlideoverTitleProps<E, B> & HTMLAttributes<Element> = $props();
23
-
24
- const titleProps = $derived({
25
- ...bond?.title(),
26
- ...restProps
27
- });
28
- </script>
29
-
30
- <HtmlAtom
31
- {as}
32
- {bond}
33
- preset="drawer.title"
34
- class={['border-border', '$preset', klass]}
35
- onmount={onmount?.bind(bond.state)}
36
- ondestroy={ondestroy?.bind(bond.state)}
37
- enter={enter?.bind(bond.state)}
38
- exit={exit?.bind(bond.state)}
39
- initial={initial?.bind(bond.state)}
40
- animate={animate?.bind(bond.state)}
41
- {...titleProps}
42
- >
43
- {@render children?.({ drawer: bond })}
44
- </HtmlAtom>
1
+ <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'h3', B extends Base = Base">
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import { HtmlAtom, type Base } from '../atom';
4
+ import { DrawerBond } from './bond.svelte';
5
+ import type { SlideoverTitleProps } from './types';
6
+
7
+ type Element = HTMLElementTagNameMap[E];
8
+
9
+ const bond = DrawerBond.get();
10
+
11
+ let {
12
+ class: klass = '',
13
+ as = 'h3' as E,
14
+ children,
15
+ onmount = undefined,
16
+ ondestroy = undefined,
17
+ animate = undefined,
18
+ enter = undefined,
19
+ exit = undefined,
20
+ initial = undefined,
21
+ ...restProps
22
+ }: SlideoverTitleProps<E, B> & HTMLAttributes<Element> = $props();
23
+
24
+ const titleProps = $derived({
25
+ ...bond?.title(),
26
+ ...restProps
27
+ });
28
+ </script>
29
+
30
+ <HtmlAtom
31
+ {as}
32
+ {bond}
33
+ preset="drawer.title"
34
+ class={['border-border', '$preset', klass]}
35
+ onmount={onmount?.bind(bond.state)}
36
+ ondestroy={ondestroy?.bind(bond.state)}
37
+ enter={enter?.bind(bond.state)}
38
+ exit={exit?.bind(bond.state)}
39
+ initial={initial?.bind(bond.state)}
40
+ animate={animate?.bind(bond.state)}
41
+ {...titleProps}
42
+ >
43
+ {@render children?.({ drawer: bond })}
44
+ </HtmlAtom>
@@ -1,54 +1,54 @@
1
- <script lang="ts" generics="T extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
- import { onMount } from 'svelte';
3
- import { DropdownBond } from './bond.svelte';
4
- import { Input } from '../input';
5
- import { type Base } from '../atom';
6
-
7
- const bond = DropdownBond.get() as DropdownBond;
8
-
9
- if (!bond) {
10
- throw new Error('Combobox atom was not found');
11
- }
12
-
13
- let {
14
- class: klass = '',
15
- children = undefined,
16
- onpointerdown,
17
- onmount = undefined,
18
- ondestroy = undefined,
19
- animate = undefined,
20
- enter = undefined,
21
- exit = undefined,
22
- initial = undefined,
23
- ...restProps
24
- } = $props();
25
-
26
- let isMounted = $state(false);
27
-
28
- onMount(() => {
29
- isMounted = true;
30
- });
31
-
32
- const isMultiple = $derived(bond?.state.props?.multiple ?? false);
33
- const selectedText = $derived(
34
- isMounted || isMultiple ? (bond.state.selectedItems.at(0)?.text ?? '') : ''
35
- );
36
-
37
- const value = $derived(
38
- bond?.state.props?.query ?? (bond?.state.props?.text || selectedText || '')
39
- );
40
- </script>
41
-
42
- <Input.Control
43
- bind:value={bond.state.query}
44
- {bond}
45
- preset="dropdown.query"
46
- class={['inline-flex h-auto w-auto flex-1 py-1', '$preset', klass]}
47
- onmount={onmount?.bind(bond.state)}
48
- ondestroy={ondestroy?.bind(bond.state)}
49
- enter={enter?.bind(bond.state)}
50
- exit={exit?.bind(bond.state)}
51
- initial={initial?.bind(bond.state)}
52
- animate={animate?.bind(bond.state)}
53
- {...restProps}
54
- />
1
+ <script lang="ts" generics="T extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
+ import { onMount } from 'svelte';
3
+ import { DropdownBond } from './bond.svelte';
4
+ import { Input } from '../input';
5
+ import { type Base } from '../atom';
6
+
7
+ const bond = DropdownBond.get() as DropdownBond;
8
+
9
+ if (!bond) {
10
+ throw new Error('Combobox atom was not found');
11
+ }
12
+
13
+ let {
14
+ class: klass = '',
15
+ children = undefined,
16
+ onpointerdown,
17
+ onmount = undefined,
18
+ ondestroy = undefined,
19
+ animate = undefined,
20
+ enter = undefined,
21
+ exit = undefined,
22
+ initial = undefined,
23
+ ...restProps
24
+ } = $props();
25
+
26
+ let isMounted = $state(false);
27
+
28
+ onMount(() => {
29
+ isMounted = true;
30
+ });
31
+
32
+ const isMultiple = $derived(bond?.state.props?.multiple ?? false);
33
+ const selectedText = $derived(
34
+ isMounted || isMultiple ? (bond.state.selectedItems.at(0)?.text ?? '') : ''
35
+ );
36
+
37
+ const value = $derived(
38
+ bond?.state.props?.query ?? (bond?.state.props?.text || selectedText || '')
39
+ );
40
+ </script>
41
+
42
+ <Input.Control
43
+ bind:value={bond.state.query}
44
+ {bond}
45
+ preset="dropdown.query"
46
+ class={['inline-flex h-auto w-auto flex-1 py-1', '$preset', klass]}
47
+ onmount={onmount?.bind(bond.state)}
48
+ ondestroy={ondestroy?.bind(bond.state)}
49
+ enter={enter?.bind(bond.state)}
50
+ exit={exit?.bind(bond.state)}
51
+ initial={initial?.bind(bond.state)}
52
+ animate={animate?.bind(bond.state)}
53
+ {...restProps}
54
+ />
@@ -1,59 +1,59 @@
1
- <script lang="ts" generics="T">
2
- import { defineProperty, defineState } from '../../utils';
3
- import { DropdownBond, DropdownBondState, type DropdownStateProps } from './bond.svelte';
4
-
5
- let {
6
- open = $bindable(false),
7
- value = $bindable(),
8
- values = $bindable(),
9
- multiple = false,
10
- disabled = false,
11
- placements = ['bottom-start', 'bottom-end', 'top-start', 'top-end'],
12
- placement = 'bottom-start',
13
- offset = 4,
14
- keys = [],
15
- factory = _factory,
16
- children = undefined,
17
- onquerychange = undefined,
18
- ...restProps
19
- } = $props();
20
-
21
- const bondProps = defineState<DropdownStateProps>(
22
- [
23
- defineProperty(
24
- 'open',
25
- () => open,
26
- (v) => {
27
- open = v;
28
- }
29
- ),
30
- defineProperty(
31
- 'values',
32
- () => (multiple ? values : [value].filter(Boolean)),
33
- (v) => {
34
- values = v;
35
- value = v[0];
36
- }
37
- ),
38
- defineProperty('multiple', () => multiple),
39
- defineProperty('disabled', () => disabled),
40
- defineProperty('placement', () => placement),
41
- defineProperty('offset', () => offset),
42
- defineProperty('placements', () => placements ?? []),
43
- defineProperty('keys', () => keys ?? [])
44
- ],
45
- () => ({ onquerychange })
46
- );
47
- const bond = factory(bondProps).share();
48
-
49
- function _factory(props: typeof bondProps) {
50
- const bondState = new DropdownBondState<T>(() => props);
51
- return new DropdownBond(bondState);
52
- }
53
-
54
- export function getBond() {
55
- return bond;
56
- }
57
- </script>
58
-
59
- {@render children?.({ dropdown: bond })}
1
+ <script lang="ts" generics="T">
2
+ import { defineProperty, defineState } from '../../utils';
3
+ import { DropdownBond, DropdownBondState, type DropdownStateProps } from './bond.svelte';
4
+
5
+ let {
6
+ open = $bindable(false),
7
+ value = $bindable(),
8
+ values = $bindable(),
9
+ multiple = false,
10
+ disabled = false,
11
+ placements = ['bottom-start', 'bottom-end', 'top-start', 'top-end'],
12
+ placement = 'bottom-start',
13
+ offset = 4,
14
+ keys = [],
15
+ factory = _factory,
16
+ children = undefined,
17
+ onquerychange = undefined,
18
+ ...restProps
19
+ } = $props();
20
+
21
+ const bondProps = defineState<DropdownStateProps>(
22
+ [
23
+ defineProperty(
24
+ 'open',
25
+ () => open,
26
+ (v) => {
27
+ open = v;
28
+ }
29
+ ),
30
+ defineProperty(
31
+ 'values',
32
+ () => (multiple ? values : [value].filter(Boolean)),
33
+ (v) => {
34
+ values = v;
35
+ value = v[0];
36
+ }
37
+ ),
38
+ defineProperty('multiple', () => multiple),
39
+ defineProperty('disabled', () => disabled),
40
+ defineProperty('placement', () => placement),
41
+ defineProperty('offset', () => offset),
42
+ defineProperty('placements', () => placements ?? []),
43
+ defineProperty('keys', () => keys ?? [])
44
+ ],
45
+ () => ({ onquerychange })
46
+ );
47
+ const bond = factory(bondProps).share();
48
+
49
+ function _factory(props: typeof bondProps) {
50
+ const bondState = new DropdownBondState<T>(() => props);
51
+ return new DropdownBond(bondState);
52
+ }
53
+
54
+ export function getBond() {
55
+ return bond;
56
+ }
57
+ </script>
58
+
59
+ {@render children?.({ dropdown: bond })}
@@ -1,41 +1,41 @@
1
- <script lang="ts" generics="T extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
- import { Trigger } from '../popover/atoms';
3
- import type { Base } from '../atom';
4
- import { DropdownBond } from './bond.svelte';
5
- import type { DropdownTriggerProps } from './types';
6
-
7
- const bond = DropdownBond.get();
8
-
9
- if (!bond) {
10
- throw new Error('dropdown atom was not found');
11
- }
12
-
13
- let {
14
- class: klass = '',
15
- as = 'button' as T,
16
- children = undefined,
17
- onmount = undefined,
18
- ondestroy = undefined,
19
- animate = undefined,
20
- enter = undefined,
21
- exit = undefined,
22
- initial = undefined,
23
- ...restProps
24
- }: DropdownTriggerProps<T, B> = $props();
25
- </script>
26
-
27
- <Trigger
28
- {as}
29
- {bond}
30
- preset="dropdown.trigger"
31
- class={['border-border relative flex h-auto min-h-10 flex-wrap items-center', '$preset', klass]}
32
- onmount={onmount?.bind(bond.state)}
33
- ondestroy={ondestroy?.bind(bond.state)}
34
- enter={enter?.bind(bond.state)}
35
- exit={exit?.bind(bond.state)}
36
- initial={initial?.bind(bond.state)}
37
- animate={animate?.bind(bond.state)}
38
- {...restProps}
39
- >
40
- {@render children?.({ dropdown: bond })}
41
- </Trigger>
1
+ <script lang="ts" generics="T extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
+ import { Trigger } from '../popover/atoms';
3
+ import type { Base } from '../atom';
4
+ import { DropdownBond } from './bond.svelte';
5
+ import type { DropdownTriggerProps } from './types';
6
+
7
+ const bond = DropdownBond.get();
8
+
9
+ if (!bond) {
10
+ throw new Error('dropdown atom was not found');
11
+ }
12
+
13
+ let {
14
+ class: klass = '',
15
+ as = 'button' as T,
16
+ children = undefined,
17
+ onmount = undefined,
18
+ ondestroy = undefined,
19
+ animate = undefined,
20
+ enter = undefined,
21
+ exit = undefined,
22
+ initial = undefined,
23
+ ...restProps
24
+ }: DropdownTriggerProps<T, B> = $props();
25
+ </script>
26
+
27
+ <Trigger
28
+ {as}
29
+ {bond}
30
+ preset="dropdown.trigger"
31
+ class={['border-border relative flex h-auto min-h-10 flex-wrap items-center', '$preset', klass]}
32
+ onmount={onmount?.bind(bond.state)}
33
+ ondestroy={ondestroy?.bind(bond.state)}
34
+ enter={enter?.bind(bond.state)}
35
+ exit={exit?.bind(bond.state)}
36
+ initial={initial?.bind(bond.state)}
37
+ animate={animate?.bind(bond.state)}
38
+ {...restProps}
39
+ >
40
+ {@render children?.({ dropdown: bond })}
41
+ </Trigger>