@svelte-atoms/core 1.0.0-alpha.28 → 1.0.0-alpha.30
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.
- package/README.md +852 -856
- package/dist/attachments/clickout.svelte.d.ts +1 -1
- package/dist/attachments/clickout.svelte.js +2 -2
- package/dist/components/accordion/accordion-root.svelte +61 -61
- package/dist/components/accordion/accordion-root.svelte.d.ts +1 -1
- package/dist/components/accordion/accordion.stories.svelte +145 -134
- package/dist/components/alert/alert-actions.svelte +43 -43
- package/dist/components/alert/alert-close-button.svelte +70 -70
- package/dist/components/alert/alert-content.svelte +43 -43
- package/dist/components/alert/alert-description.svelte +42 -42
- package/dist/components/alert/alert-icon.svelte +47 -47
- package/dist/components/alert/alert-root.svelte +103 -103
- package/dist/components/alert/alert-title.svelte +42 -42
- package/dist/components/alert/alert.stories.svelte +10 -11
- package/dist/components/atom/html-atom.svelte +75 -19
- package/dist/components/atom/html-atom.svelte.d.ts +1 -1
- package/dist/components/atom/snippet-renderer.svelte +5 -5
- package/dist/components/avatar/avatar.stories.svelte +22 -27
- package/dist/components/badge/badge.stories.svelte +12 -17
- package/dist/components/badge/badge.svelte +19 -19
- package/dist/components/breadcrumb/breadcrumb.stories.svelte +16 -21
- package/dist/components/button/button.stories.svelte +1 -34
- package/dist/components/calendar/calendar-body.svelte +107 -107
- package/dist/components/calendar/calendar-day.svelte +96 -97
- package/dist/components/calendar/calendar-header.svelte +29 -33
- package/dist/components/calendar/calendar-header.svelte.d.ts +0 -1
- package/dist/components/calendar/calendar-root.svelte +206 -208
- package/dist/components/calendar/calendar-week-day.svelte +34 -34
- package/dist/components/calendar/calendar.css +26 -26
- package/dist/components/calendar/calendar.stories.svelte +10 -20
- package/dist/components/calendar/calendar.stories.svelte.d.ts +24 -4
- package/dist/components/card/card-body.svelte +39 -39
- package/dist/components/card/card-footer.svelte +41 -41
- package/dist/components/card/card-root.svelte +91 -91
- package/dist/components/card/card.stories.svelte +133 -145
- package/dist/components/checkbox/checkbox.stories.svelte +22 -27
- package/dist/components/checkbox/checkbox.svelte +155 -157
- package/dist/components/collapsible/collapsible.stories.svelte +172 -173
- package/dist/components/combobox/combobox-root.svelte +65 -65
- package/dist/components/combobox/compobox.stories.svelte +51 -54
- package/dist/components/container/container.stories.svelte +20 -23
- package/dist/components/datagrid/datagrid-root.svelte +2 -2
- package/dist/components/datagrid/datagrid.css +0 -42
- package/dist/components/datagrid/datagrid.stories.svelte +72 -75
- package/dist/components/datagrid/types.d.ts +1 -1
- package/dist/components/date-picker/atoms.d.ts +0 -4
- package/dist/components/date-picker/atoms.js +0 -4
- package/dist/components/date-picker/date-picker-calendar.svelte +67 -42
- package/dist/components/date-picker/date-picker-calendar.svelte.d.ts +2 -5
- package/dist/components/date-picker/date-picker-header.svelte +100 -105
- package/dist/components/date-picker/date-picker-header.svelte.d.ts +2 -5
- package/dist/components/date-picker/date-picker-months.svelte +142 -150
- package/dist/components/date-picker/date-picker-months.svelte.d.ts +2 -5
- package/dist/components/date-picker/date-picker-root.svelte +4 -3
- package/dist/components/date-picker/date-picker-root.svelte.d.ts +2 -15
- package/dist/components/date-picker/date-picker-years.svelte +205 -214
- package/dist/components/date-picker/date-picker-years.svelte.d.ts +2 -5
- package/dist/components/date-picker/date-picker.stories.svelte +15 -31
- package/dist/components/date-picker/types.d.ts +53 -1
- package/dist/components/dialog/dialog-content.svelte +1 -1
- package/dist/components/dialog/dialog.stories.svelte +64 -67
- package/dist/components/drawer/attachments.svelte.js +8 -9
- package/dist/components/drawer/drawer-content.svelte +57 -42
- package/dist/components/drawer/drawer.stories.svelte +212 -224
- package/dist/components/dropdown/dropdown-root.svelte +59 -59
- package/dist/components/dropdown/dropdown.stories.svelte +80 -83
- package/dist/components/element/html-element.svelte +85 -85
- package/dist/components/element/types.d.ts +1 -1
- package/dist/components/form/form.stories.svelte +96 -99
- package/dist/components/image/image.stories.svelte +20 -23
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/dist/components/input/input.stories.svelte +35 -38
- package/dist/components/label/label.stories.svelte +15 -26
- package/dist/components/label/label.stories.svelte.d.ts +24 -4
- package/dist/components/lazy/index.d.ts +1 -0
- package/dist/components/lazy/index.js +1 -0
- package/dist/components/lazy/lazy.stories.svelte +28 -0
- package/dist/components/lazy/lazy.stories.svelte.d.ts +19 -0
- package/dist/components/lazy/lazy.svelte +28 -0
- package/dist/components/lazy/lazy.svelte.d.ts +5 -0
- package/dist/components/lazy/types.d.ts +10 -0
- package/dist/components/lazy/types.js +1 -0
- package/dist/components/link/link.stories.svelte +15 -26
- package/dist/components/link/link.stories.svelte.d.ts +24 -4
- package/dist/components/menu/menu-list.svelte +2 -1
- package/dist/components/menu/menu-list.svelte.d.ts +1 -0
- package/dist/components/menu/menu.stories.svelte +33 -36
- package/dist/components/popover/bond.svelte.js +31 -25
- package/dist/components/popover/popover-arrow.svelte +111 -111
- package/dist/components/popover/popover-content.svelte +2 -5
- package/dist/components/popover/popover-indicator.svelte +44 -43
- package/dist/components/popover/popover-root.svelte +1 -1
- package/dist/components/popover/popover.stories.svelte +18 -21
- package/dist/components/qr-code/index.d.ts +1 -0
- package/dist/components/qr-code/index.js +1 -0
- package/dist/components/qr-code/qr-code.stories.svelte +4 -10
- package/dist/components/qr-code/qr-code.svelte +75 -25
- package/dist/components/qr-code/qr-code.svelte.d.ts +2 -4
- package/dist/components/qr-code/types.d.ts +14 -0
- package/dist/components/qr-code/types.js +1 -0
- package/dist/components/radio/radio-group.stories.svelte +41 -50
- package/dist/components/radio/radio.stories.svelte +17 -26
- package/dist/components/radio/radio.svelte +109 -109
- package/dist/components/root/root.svelte +121 -121
- package/dist/components/root/root.svelte.d.ts +1 -1
- package/dist/components/scrollable/scrollable.stories.svelte +116 -126
- package/dist/components/sidebar/bond.svelte.d.ts +0 -5
- package/dist/components/sidebar/bond.svelte.js +1 -12
- package/dist/components/sidebar/sidebar-content.svelte +50 -39
- package/dist/components/sidebar/sidebar-content.svelte.d.ts +2 -2
- package/dist/components/sidebar/sidebar-root.svelte +39 -68
- package/dist/components/sidebar/sidebar-root.svelte.d.ts +2 -2
- package/dist/components/sidebar/sidebar.stories.svelte +43 -52
- package/dist/components/sidebar/types.d.ts +7 -6
- package/dist/components/tabs/tab/bond.svelte.d.ts +4 -1
- package/dist/components/tabs/tab/bond.svelte.js +4 -1
- package/dist/components/tabs/tabs.stories.svelte +56 -59
- package/dist/components/tooltip/tooltip-trigger.svelte +39 -37
- package/dist/components/tooltip/tooltip.stories.svelte +32 -35
- package/dist/components/tree/tree.stories.svelte +142 -134
- package/dist/context/preset.svelte.d.ts +3 -3
- package/dist/utils/function.d.ts +2 -0
- package/dist/utils/function.js +6 -0
- package/llm/variants.md +1259 -1261
- package/package.json +7 -9
- package/dist/actions/animation.svelte.d.ts +0 -6
- package/dist/actions/animation.svelte.js +0 -14
- package/dist/actions/clickout.svelte.d.ts +0 -2
- package/dist/actions/clickout.svelte.js +0 -15
- package/dist/actions/popover.svelte.d.ts +0 -19
- package/dist/actions/popover.svelte.js +0 -81
- package/dist/actions/portal.svelte.d.ts +0 -8
- package/dist/actions/portal.svelte.js +0 -32
- package/dist/attachments/gsap.svelte.d.ts +0 -2
- package/dist/attachments/gsap.svelte.js +0 -26
|
@@ -1,26 +1,17 @@
|
|
|
1
|
-
<script module>
|
|
2
|
-
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
-
import { default as RadioModule } from './radio.svelte';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
let
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
<
|
|
17
|
-
|
|
18
|
-
<Root>
|
|
19
|
-
{#snippet children({})}
|
|
20
|
-
<div class="flex h-full w-full items-center justify-center">
|
|
21
|
-
<RadioModule class="size-5" />
|
|
22
|
-
</div>
|
|
23
|
-
{/snippet}
|
|
24
|
-
</Root>
|
|
25
|
-
{/snippet}
|
|
26
|
-
</Story>
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
+
import { default as RadioModule } from './radio.svelte';
|
|
4
|
+
|
|
5
|
+
const { Story } = defineMeta({
|
|
6
|
+
title: 'ATOMS/Radio'
|
|
7
|
+
});
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<script>
|
|
11
|
+
let value = $state(undefined);
|
|
12
|
+
let checked = $state(false);
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<Story name="Radio">
|
|
16
|
+
<RadioModule class="size-5" />
|
|
17
|
+
</Story>
|
|
@@ -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-
|
|
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-
|
|
103
|
-
base={checkedContent}
|
|
104
|
-
/>
|
|
105
|
-
{:else}
|
|
106
|
-
<Stack.Item class="rounded-inherit pointer-events-none size-
|
|
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 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>
|
|
@@ -1,121 +1,121 @@
|
|
|
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
|
|
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
|
-
<
|
|
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
|
-
</
|
|
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 { 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,
|
|
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
|
+
<Stack.Root
|
|
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 justify-stretch 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
|
+
</Stack.Root>
|
|
121
|
+
</Portals>
|