@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,109 +1,109 @@
1
- <script lang="ts">
2
- import { getRadioGroupContext } from './context';
3
- import { Stack } from '../stack';
4
- import { toClassValue } from '../../utils';
5
- import { HtmlAtom, type Base } from '../atom';
6
-
7
- const radioGroupContext = getRadioGroupContext();
8
-
9
- let {
10
- class: klass = '',
11
- value = $bindable(undefined),
12
- group = $bindable(),
13
- id = undefined,
14
- name = undefined,
15
- disabled = false,
16
- required = false,
17
- readonly = false,
18
- onchange = undefined,
19
- oninput = undefined,
20
- checkedContent = undefined,
21
- ...restProps
22
- } = $props();
23
-
24
- const _disabled = $derived(radioGroupContext?.disabled);
25
- const _required = $derived(radioGroupContext?.required);
26
- const _readonly = $derived(radioGroupContext?.readonly);
27
- const _name = $derived(radioGroupContext?.name);
28
-
29
- const proxy = {
30
- get current() {
31
- return radioGroupContext?.value ?? group;
32
- },
33
- set current(v) {
34
- group = v;
35
- if (radioGroupContext) {
36
- radioGroupContext.value = v;
37
- }
38
- }
39
- };
40
-
41
- const isDisabled = $derived(_disabled || disabled);
42
- const isRequired = $derived(_required || required);
43
- const isReadonly = $derived(_readonly || readonly);
44
- const isChecked = $derived(proxy.current === value);
45
-
46
- function handleChange(ev: Event) {
47
- const checked = (ev.currentTarget as HTMLInputElement)?.checked ?? false;
48
-
49
- onchange?.(ev, {
50
- checked,
51
- value: checked,
52
- type: 'boolean'
53
- });
54
- }
55
-
56
- function handleInput(ev: Event) {
57
- const currentTarget = ev.currentTarget as HTMLInputElement;
58
- const _checked = currentTarget?.checked ?? false;
59
-
60
- oninput?.(ev, {
61
- checked: _checked,
62
- value: _checked,
63
- type: 'boolean'
64
- });
65
-
66
- if (ev.defaultPrevented) {
67
- return;
68
- }
69
- }
70
- </script>
71
-
72
- <Stack.Root
73
- preset="radio"
74
- class={[
75
- 'text-foreground bg-input box-border inline-flex aspect-square size-4 max-w-fit cursor-pointer place-items-center rounded-full border p-0',
76
- isDisabled && 'pointer-events-none opacity-50',
77
- '$preset',
78
- toClassValue.apply(null, [klass, {}])
79
- ]}
80
- as="label"
81
- {...restProps}
82
- >
83
- <Stack.Item class="pointer-events-none flex size-full">
84
- <input
85
- bind:group={proxy.current}
86
- {id}
87
- {value}
88
- class="pointer-events-auto size-0 opacity-0"
89
- type="radio"
90
- name={_name ?? name}
91
- disabled={isDisabled}
92
- required={isRequired}
93
- readonly={isReadonly}
94
- onchange={handleChange}
95
- oninput={handleInput}
96
- />
97
- </Stack.Item>
98
-
99
- {#if isChecked}
100
- {#if checkedContent}
101
- <HtmlAtom
102
- class="rounded-inherit pointer-events-none size-1/2 bg-current"
103
- base={checkedContent}
104
- />
105
- {:else}
106
- <Stack.Item class="rounded-inherit pointer-events-none size-1/2 bg-current"></Stack.Item>
107
- {/if}
108
- {/if}
109
- </Stack.Root>
1
+ <script lang="ts">
2
+ import { getRadioGroupContext } from './context';
3
+ import { Stack } from '../stack';
4
+ import { toClassValue } from '../../utils';
5
+ import { HtmlAtom, type Base } from '../atom';
6
+
7
+ const radioGroupContext = getRadioGroupContext();
8
+
9
+ let {
10
+ class: klass = '',
11
+ value = $bindable(undefined),
12
+ group = $bindable(),
13
+ id = undefined,
14
+ name = undefined,
15
+ disabled = false,
16
+ required = false,
17
+ readonly = false,
18
+ onchange = undefined,
19
+ oninput = undefined,
20
+ checkedContent = undefined,
21
+ ...restProps
22
+ } = $props();
23
+
24
+ const _disabled = $derived(radioGroupContext?.disabled);
25
+ const _required = $derived(radioGroupContext?.required);
26
+ const _readonly = $derived(radioGroupContext?.readonly);
27
+ const _name = $derived(radioGroupContext?.name);
28
+
29
+ const proxy = {
30
+ get current() {
31
+ return radioGroupContext?.value ?? group;
32
+ },
33
+ set current(v) {
34
+ group = v;
35
+ if (radioGroupContext) {
36
+ radioGroupContext.value = v;
37
+ }
38
+ }
39
+ };
40
+
41
+ const isDisabled = $derived(_disabled || disabled);
42
+ const isRequired = $derived(_required || required);
43
+ const isReadonly = $derived(_readonly || readonly);
44
+ const isChecked = $derived(proxy.current === value);
45
+
46
+ function handleChange(ev: Event) {
47
+ const checked = (ev.currentTarget as HTMLInputElement)?.checked ?? false;
48
+
49
+ onchange?.(ev, {
50
+ checked,
51
+ value: checked,
52
+ type: 'boolean'
53
+ });
54
+ }
55
+
56
+ function handleInput(ev: Event) {
57
+ const currentTarget = ev.currentTarget as HTMLInputElement;
58
+ const _checked = currentTarget?.checked ?? false;
59
+
60
+ oninput?.(ev, {
61
+ checked: _checked,
62
+ value: _checked,
63
+ type: 'boolean'
64
+ });
65
+
66
+ if (ev.defaultPrevented) {
67
+ return;
68
+ }
69
+ }
70
+ </script>
71
+
72
+ <Stack.Root
73
+ preset="radio"
74
+ class={[
75
+ 'text-foreground bg-input box-border inline-flex aspect-square size-4 max-h-fit max-w-fit cursor-pointer place-items-center rounded-full border p-0',
76
+ isDisabled && 'pointer-events-none opacity-50',
77
+ '$preset',
78
+ toClassValue.apply(null, [klass, {}])
79
+ ]}
80
+ as="label"
81
+ {...restProps}
82
+ >
83
+ <Stack.Item class="pointer-events-none flex size-full">
84
+ <input
85
+ bind:group={proxy.current}
86
+ {id}
87
+ {value}
88
+ class="pointer-events-auto size-0 opacity-0"
89
+ type="radio"
90
+ name={_name ?? name}
91
+ disabled={isDisabled}
92
+ required={isRequired}
93
+ readonly={isReadonly}
94
+ onchange={handleChange}
95
+ oninput={handleInput}
96
+ />
97
+ </Stack.Item>
98
+
99
+ {#if isChecked}
100
+ {#if checkedContent}
101
+ <HtmlAtom
102
+ class="rounded-inherit pointer-events-none size-full scale-50 bg-current"
103
+ base={checkedContent}
104
+ />
105
+ {:else}
106
+ <Stack.Item class="rounded-inherit pointer-events-none size-full scale-50 bg-current" />
107
+ {/if}
108
+ {/if}
109
+ </Stack.Root>
@@ -0,0 +1,98 @@
1
+ import { type Component, type Snippet } from 'svelte';
2
+ import { type HtmlAtomProps } from '../atom';
3
+ /**
4
+ * Extend this interface to add custom radio properties in your application.
5
+ */
6
+ export interface RadioExtendProps {
7
+ }
8
+ /**
9
+ * Extend this interface to add custom radio group properties in your application.
10
+ */
11
+ export interface RadioGroupExtendProps {
12
+ }
13
+ export interface RadioProps<T = string> extends HtmlAtomProps<'label'>, RadioExtendProps {
14
+ /**
15
+ * The value of the radio button
16
+ */
17
+ value?: T;
18
+ /**
19
+ * The currently selected value (for standalone radios)
20
+ */
21
+ group?: T;
22
+ /**
23
+ * The id attribute of the radio input
24
+ */
25
+ id?: string;
26
+ /**
27
+ * The name attribute of the radio input
28
+ */
29
+ name?: string;
30
+ /**
31
+ * Whether the radio button is disabled
32
+ */
33
+ disabled?: boolean;
34
+ /**
35
+ * Whether the radio button is required
36
+ */
37
+ required?: boolean;
38
+ /**
39
+ * Whether the radio button is readonly
40
+ */
41
+ readonly?: boolean;
42
+ /**
43
+ * Custom content to display when the radio is checked
44
+ */
45
+ checkedContent?: Component | Snippet;
46
+ /**
47
+ * Child content (label text)
48
+ */
49
+ children?: Snippet<[]>;
50
+ /**
51
+ * Change event handler
52
+ */
53
+ onchange?: (ev: Event, options?: {
54
+ checked: boolean;
55
+ value: boolean;
56
+ type: 'boolean';
57
+ }) => void;
58
+ /**
59
+ * Input event handler
60
+ */
61
+ oninput?: (ev: Event, options?: {
62
+ checked: boolean;
63
+ value: boolean;
64
+ type: 'boolean';
65
+ }) => void;
66
+ }
67
+ export interface RadioGroupProps<T = string> extends HtmlAtomProps<'div'>, RadioGroupExtendProps {
68
+ /**
69
+ * The currently selected value
70
+ */
71
+ value?: T;
72
+ /**
73
+ * Whether all radio buttons in the group are disabled
74
+ */
75
+ disabled?: boolean;
76
+ /**
77
+ * Whether all radio buttons in the group are required
78
+ */
79
+ required?: boolean;
80
+ /**
81
+ * Whether all radio buttons in the group are readonly
82
+ */
83
+ readonly?: boolean;
84
+ /**
85
+ * The name attribute shared by all radio buttons in the group
86
+ */
87
+ name?: string;
88
+ /**
89
+ * Child content (radio buttons)
90
+ */
91
+ children?: Snippet<[]>;
92
+ /**
93
+ * Input event handler triggered when the selected value changes
94
+ */
95
+ oninput?: (ev: CustomEvent, options?: {
96
+ value: T;
97
+ }) => void;
98
+ }
@@ -0,0 +1,2 @@
1
+ import {} from 'svelte';
2
+ import {} from '../atom';
@@ -1,121 +1,104 @@
1
- <script module lang="ts">
2
- export type RootPortals = 'root.l0' | 'root.l1' | 'root.l2' | 'root.l3';
3
- </script>
4
-
5
- <script lang="ts">
6
- import { cn, defineState, defineProperty } from '../../utils';
7
- import { RootBond, RootBondState, type RootStateProps } from './bond.svelte';
8
- import { Portal, ActivePortal, Portals } from '../portal';
9
- import { Stack } from '../stack';
10
- import { HtmlAtom } from '../atom';
11
- import { HtmlElement, MathmlElement, SvgElement } from '../element';
12
-
13
- let {
14
- class: klass = '',
15
- base = undefined,
16
- children = undefined,
17
- portals = undefined,
18
- ...restProps
19
- } = $props();
20
-
21
- let html: typeof HtmlElement | undefined = HtmlElement;
22
- let svg: typeof SvgElement | undefined = undefined;
23
- let mathml: typeof MathmlElement | undefined = undefined;
24
-
25
- type Renderers = {
26
- html?: typeof HtmlElement;
27
- svg?: typeof SvgElement;
28
- mathml?: typeof MathmlElement;
29
- };
30
-
31
- const renderers = defineState<Renderers>([
32
- defineProperty('html', () => {
33
- if (!html) {
34
- import('../element/html-element.svelte').then((mod) => {
35
- html = mod.default;
36
- });
37
- }
38
-
39
- return html;
40
- }),
41
- defineProperty('svg', () => {
42
- if (!svg) {
43
- import('../element/svg-element.svelte').then((mod) => {
44
- svg = mod.default;
45
- });
46
- }
47
-
48
- return svg;
49
- }),
50
- defineProperty('mathml', () => {
51
- if (!mathml) {
52
- import('../element/mathml-element.svelte').then((mod) => {
53
- mathml = mod.default;
54
- });
55
- }
56
-
57
- return mathml;
58
- })
59
- ]);
60
-
61
- const bondProps = defineState<RootStateProps>([defineProperty('renderers', () => renderers)]);
62
-
63
- const bondState = new RootBondState(() => bondProps);
64
- const bond = new RootBond(bondState).share();
65
- </script>
66
-
67
- <Portals id="root">
68
- <HtmlAtom
69
- {@attach (node) => {
70
- bond.rootElement = node;
71
- }}
72
- {base}
73
- preset="root"
74
- class={cn(
75
- 'atom-root bg-background text-foreground relative flex w-full flex-1 flex-col items-start font-sans',
76
- '$preset',
77
- klass
78
- )}
79
- {...restProps}
80
- >
81
- {#if portals}
82
- {@render portals?.()}
83
- {:else}
84
- <Portal.Outer
85
- base={Stack.Item}
86
- id="root.l0"
87
- class="pointer-events-none absolute inset-0 z-10 overflow-hidden"
88
- >
89
- <Portal.Inner />
90
- </Portal.Outer>
91
-
92
- <Portal.Outer
93
- base={Stack.Item}
94
- id="root.l1"
95
- class="pointer-events-none absolute inset-0 z-10 overflow-hidden"
96
- >
97
- <Portal.Inner />
98
- </Portal.Outer>
99
-
100
- <Portal.Outer
101
- base={Stack.Item}
102
- id="root.l2"
103
- class="pointer-events-none absolute inset-0 z-10 overflow-hidden"
104
- >
105
- <Portal.Inner />
106
- </Portal.Outer>
107
-
108
- <Portal.Outer
109
- base={Stack.Item}
110
- id="root.l3"
111
- class="pointer-events-none absolute inset-0 z-10 overflow-hidden"
112
- >
113
- <Portal.Inner />
114
- </Portal.Outer>
115
- {/if}
116
-
117
- <ActivePortal portal="root.l0">
118
- {@render children?.()}
119
- </ActivePortal>
120
- </HtmlAtom>
121
- </Portals>
1
+ <script module lang="ts">
2
+ export type RootPortals = 'root.l0' | 'root.l1' | 'root.l2' | 'root.l3';
3
+ </script>
4
+
5
+ <script lang="ts">
6
+ import { cn, defineState, defineProperty } from '../../utils';
7
+ import { Portal, ActivePortal, Portals } from '../portal';
8
+ import { HtmlAtom as Atom } from '../atom';
9
+ import { HtmlElement, MathmlElement, SvgElement } from '../element';
10
+ import { RootBond, RootBondState, type RootStateProps } from './bond.svelte';
11
+
12
+ let {
13
+ class: klass = '',
14
+ base = undefined,
15
+ children = undefined,
16
+ portals = undefined,
17
+ ...restProps
18
+ } = $props();
19
+
20
+ let html: typeof HtmlElement | undefined = $state(HtmlElement);
21
+ let svg: typeof SvgElement | undefined = $state(undefined);
22
+ let mathml: typeof MathmlElement | undefined = $state(undefined);
23
+
24
+ type Renderers = {
25
+ html?: typeof HtmlElement;
26
+ svg?: typeof SvgElement;
27
+ mathml?: typeof MathmlElement;
28
+ };
29
+
30
+ const renderers = defineState<Renderers>([
31
+ defineProperty('html', () => {
32
+ if (!html) {
33
+ import('../element/html-element.svelte').then((mod) => {
34
+ html = mod.default;
35
+ });
36
+ }
37
+
38
+ return html;
39
+ }),
40
+ defineProperty('svg', () => {
41
+ if (!svg) {
42
+ import('../element/svg-element.svelte').then((mod) => {
43
+ svg = mod.default;
44
+ });
45
+ }
46
+
47
+ return svg;
48
+ }),
49
+ defineProperty('mathml', () => {
50
+ if (!mathml) {
51
+ import('../element/mathml-element.svelte').then((mod) => {
52
+ mathml = mod.default;
53
+ });
54
+ }
55
+
56
+ return mathml;
57
+ })
58
+ ]);
59
+
60
+ const bondProps = defineState<RootStateProps>([defineProperty('renderers', () => renderers)]);
61
+
62
+ const bondState = new RootBondState(() => bondProps);
63
+ const bond = new RootBond(bondState).share();
64
+ </script>
65
+
66
+ <Portals id="root">
67
+ <Atom
68
+ {@attach (node) => {
69
+ bond.rootElement = node;
70
+ }}
71
+ {base}
72
+ preset="root"
73
+ class={cn(
74
+ 'atom-root bg-background text-foreground relative flex h-full w-full flex-1 flex-col items-start justify-stretch font-sans',
75
+ '$preset',
76
+ klass
77
+ )}
78
+ {...restProps}
79
+ >
80
+ {#if portals}
81
+ {@render portals?.()}
82
+ {:else}
83
+ <Portal.Outer id="root.l0" class="pointer-events-none absolute inset-0 z-10 overflow-hidden">
84
+ <Portal.Inner />
85
+ </Portal.Outer>
86
+
87
+ <Portal.Outer id="root.l1" class="pointer-events-none absolute inset-0 z-10 overflow-hidden">
88
+ <Portal.Inner />
89
+ </Portal.Outer>
90
+
91
+ <Portal.Outer id="root.l2" class="pointer-events-none absolute inset-0 z-10 overflow-hidden">
92
+ <Portal.Inner />
93
+ </Portal.Outer>
94
+
95
+ <Portal.Outer id="root.l3" class="pointer-events-none absolute inset-0 z-10 overflow-hidden">
96
+ <Portal.Inner />
97
+ </Portal.Outer>
98
+ {/if}
99
+
100
+ <ActivePortal portal="root.l0">
101
+ {@render children?.()}
102
+ </ActivePortal>
103
+ </Atom>
104
+ </Portals>
@@ -5,7 +5,7 @@ declare function $$render<T extends keyof HTMLElementTagNameMap>(): {
5
5
  exports: {
6
6
  getBond: () => ScrollableBond;
7
7
  };
8
- bindings: "scrollX" | "clientWidth" | "scrollWidth" | "scrollY" | "clientHeight" | "scrollHeight";
8
+ bindings: "clientHeight" | "clientWidth" | "scrollHeight" | "scrollWidth" | "scrollX" | "scrollY";
9
9
  slots: {};
10
10
  events: {};
11
11
  };
@@ -13,7 +13,7 @@ declare class __sveltets_Render<T extends keyof HTMLElementTagNameMap> {
13
13
  props(): ReturnType<typeof $$render<T>>['props'];
14
14
  events(): ReturnType<typeof $$render<T>>['events'];
15
15
  slots(): ReturnType<typeof $$render<T>>['slots'];
16
- bindings(): "scrollX" | "clientWidth" | "scrollWidth" | "scrollY" | "clientHeight" | "scrollHeight";
16
+ bindings(): "clientHeight" | "clientWidth" | "scrollHeight" | "scrollWidth" | "scrollX" | "scrollY";
17
17
  exports(): {
18
18
  getBond: () => ScrollableBond;
19
19
  };