@svelte-atoms/core 1.0.0-alpha.27 → 1.0.0-alpha.28
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 +856 -645
- package/dist/components/accordion/accordion-root.svelte +61 -61
- package/dist/components/accordion/item/accordion-item-body.svelte +42 -42
- package/dist/components/accordion/item/accordion-item-header.svelte +50 -50
- package/dist/components/accordion/item/accordion-item-indicator.svelte +50 -50
- package/dist/components/accordion/item/accordion-item-root.svelte +65 -65
- package/dist/components/alert/alert-actions.svelte +2 -1
- package/dist/components/alert/alert-close-button.svelte +18 -20
- package/dist/components/alert/alert-content.svelte +2 -1
- package/dist/components/alert/alert-description.svelte +2 -1
- package/dist/components/alert/alert-icon.svelte +2 -1
- package/dist/components/alert/alert-root.svelte +3 -2
- package/dist/components/alert/alert-title.svelte +2 -1
- package/dist/components/alert/alert.stories.svelte +401 -40
- package/dist/components/alert/alert.stories.svelte.d.ts +2 -5
- package/dist/components/atom/html-atom.svelte +205 -201
- package/dist/components/atom/snippet-renderer.svelte +5 -0
- package/dist/components/atom/snippet-renderer.svelte.d.ts +5 -0
- package/dist/components/avatar/avatar.stories.svelte.d.ts +1 -1
- package/dist/components/badge/badge.stories.svelte.d.ts +1 -1
- package/dist/components/breadcrumb/breadcrumb.stories.svelte.d.ts +1 -1
- package/dist/components/button/button.stories.svelte +60 -57
- package/dist/components/calendar/atoms.d.ts +5 -0
- package/dist/components/calendar/atoms.js +5 -0
- package/dist/components/calendar/bond.svelte.d.ts +72 -0
- package/dist/components/calendar/bond.svelte.js +132 -0
- package/dist/components/calendar/calendar-body.svelte +107 -0
- package/dist/components/calendar/calendar-body.svelte.d.ts +8 -0
- package/dist/components/calendar/calendar-day.svelte +97 -0
- package/dist/components/calendar/calendar-day.svelte.d.ts +4 -0
- package/dist/components/calendar/calendar-header.svelte +33 -0
- package/dist/components/calendar/calendar-header.svelte.d.ts +7 -0
- package/dist/components/calendar/calendar-root.svelte +208 -0
- package/dist/components/calendar/calendar-root.svelte.d.ts +8 -0
- package/dist/components/calendar/calendar-week-day.svelte +34 -0
- package/dist/components/calendar/calendar-week-day.svelte.d.ts +9 -0
- package/dist/components/calendar/calendar.css +26 -0
- package/dist/components/calendar/calendar.stories.svelte +36 -0
- package/dist/components/calendar/calendar.stories.svelte.d.ts +6 -0
- package/dist/components/calendar/index.d.ts +4 -0
- package/dist/components/calendar/index.js +4 -0
- package/dist/components/calendar/runes.svelte.d.ts +3 -0
- package/dist/components/calendar/runes.svelte.js +25 -0
- package/dist/components/calendar/types.d.ts +62 -0
- package/dist/components/calendar/types.js +1 -0
- package/dist/components/card/card-body.svelte +39 -39
- package/dist/components/card/card-description.svelte +41 -41
- package/dist/components/card/card-footer.svelte +41 -41
- package/dist/components/card/card-header.svelte +41 -41
- package/dist/components/card/card-media.svelte +41 -41
- package/dist/components/card/card-root.svelte +91 -91
- package/dist/components/card/card-subtitle.svelte +41 -41
- package/dist/components/card/card-title.svelte +45 -45
- package/dist/components/collapsible/collapsible-body.svelte +39 -39
- package/dist/components/collapsible/collapsible-header.svelte +39 -39
- package/dist/components/collapsible/collapsible-indicator.svelte +50 -50
- package/dist/components/collapsible/collapsible-root.svelte +66 -66
- package/dist/components/combobox/combobox-root.svelte +65 -65
- package/dist/components/container/container.stories.svelte.d.ts +1 -1
- package/dist/components/contextmenu/contextmenu-trigger.svelte.d.ts +1 -1
- package/dist/components/datagrid/bond.svelte.d.ts +2 -2
- package/dist/components/datagrid/datagrid-body.svelte +37 -37
- package/dist/components/datagrid/datagrid-checkbox.svelte +101 -101
- package/dist/components/datagrid/datagrid-footer.svelte +34 -34
- package/dist/components/datagrid/datagrid-header.svelte +49 -49
- package/dist/components/datagrid/datagrid-root.svelte +59 -59
- package/dist/components/datagrid/td/datagrid-td.svelte +66 -66
- package/dist/components/datagrid/th/datagrid-th.svelte +106 -106
- package/dist/components/datagrid/tr/datagrid-tr.svelte +88 -88
- package/dist/components/date-picker/atoms.d.ts +7 -0
- package/dist/components/date-picker/atoms.js +7 -0
- package/dist/components/date-picker/bond.svelte.d.ts +67 -0
- package/dist/components/date-picker/bond.svelte.js +174 -0
- package/dist/components/date-picker/date-picker-calendar.svelte +42 -0
- package/dist/components/date-picker/date-picker-calendar.svelte.d.ts +7 -0
- package/dist/components/date-picker/date-picker-header.svelte +105 -0
- package/dist/components/date-picker/date-picker-header.svelte.d.ts +7 -0
- package/dist/components/date-picker/date-picker-months.svelte +150 -0
- package/dist/components/date-picker/date-picker-months.svelte.d.ts +7 -0
- package/dist/components/date-picker/date-picker-root.svelte +94 -0
- package/dist/components/date-picker/date-picker-root.svelte.d.ts +17 -0
- package/dist/components/date-picker/date-picker-years.svelte +214 -0
- package/dist/components/date-picker/date-picker-years.svelte.d.ts +7 -0
- package/dist/components/date-picker/date-picker.stories.svelte +51 -0
- package/dist/components/date-picker/date-picker.stories.svelte.d.ts +3 -0
- package/dist/components/date-picker/index.d.ts +3 -0
- package/dist/components/date-picker/index.js +3 -0
- package/dist/components/date-picker/types.d.ts +1 -0
- package/dist/components/date-picker/types.js +1 -0
- package/dist/components/dialog/dialog-body.svelte +39 -39
- package/dist/components/dialog/dialog-close-button.svelte +58 -58
- package/dist/components/dialog/dialog-content.svelte +62 -62
- package/dist/components/dialog/dialog-description.svelte +40 -40
- package/dist/components/dialog/dialog-footer.svelte +39 -39
- package/dist/components/dialog/dialog-header.svelte +39 -39
- package/dist/components/dialog/dialog-root.svelte +110 -110
- package/dist/components/dialog/dialog-title.svelte +41 -41
- package/dist/components/drawer/drawer-backdrop.svelte +38 -38
- package/dist/components/drawer/drawer-body.svelte +42 -42
- package/dist/components/drawer/drawer-content.svelte +42 -42
- package/dist/components/drawer/drawer-description.svelte +44 -44
- package/dist/components/drawer/drawer-footer.svelte +41 -41
- package/dist/components/drawer/drawer-header.svelte +43 -43
- package/dist/components/drawer/drawer-root.svelte +93 -93
- package/dist/components/drawer/drawer-title.svelte +44 -44
- package/dist/components/dropdown/dropdown-query.svelte +54 -54
- package/dist/components/dropdown/dropdown-root.svelte +59 -59
- package/dist/components/dropdown/dropdown-trigger.svelte +41 -41
- package/dist/components/dropdown/dropdown-value.svelte +60 -60
- package/dist/components/element/html-element.svelte +85 -85
- package/dist/components/form/bond.svelte.d.ts +1 -1
- package/dist/components/form/field/field-control.svelte +48 -48
- package/dist/components/form/field/field-label.svelte +24 -24
- package/dist/components/form/field/field-root.svelte +59 -59
- package/dist/components/icon/icon.svelte +44 -44
- package/dist/components/image/image.stories.svelte.d.ts +1 -1
- package/dist/components/index.d.ts +3 -0
- package/dist/components/index.js +3 -0
- package/dist/components/input/input-control.svelte +103 -103
- package/dist/components/label/label.svelte +25 -25
- package/dist/components/popover/popover-arrow.svelte +111 -111
- package/dist/components/popover/popover-content.svelte +46 -7
- package/dist/components/popover/popover-root.svelte +48 -49
- package/dist/components/popover/popover.stories.svelte +52 -67
- package/dist/components/portal/portal-root.svelte +83 -83
- package/dist/components/portal/teleport.svelte +50 -50
- 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 +24 -0
- package/dist/components/qr-code/qr-code.stories.svelte.d.ts +26 -0
- package/dist/components/qr-code/qr-code.svelte +25 -0
- package/dist/components/qr-code/qr-code.svelte.d.ts +6 -0
- package/dist/components/radio/radio.svelte +109 -109
- package/dist/components/radio/types.svelte.d.ts +1 -1
- package/dist/components/scrollable/scrollable-container.svelte +82 -82
- package/dist/components/scrollable/scrollable-content.svelte +41 -41
- package/dist/components/scrollable/scrollable-root.svelte +100 -100
- package/dist/components/scrollable/scrollable-thumb.svelte +75 -75
- package/dist/components/scrollable/scrollable-track.svelte +59 -59
- package/dist/components/scrollable/scrollable.stories.svelte.d.ts +1 -1
- package/dist/components/tabs/tab/tab-body.svelte +52 -52
- package/dist/components/tabs/tab/tab-description.svelte +41 -41
- package/dist/components/tabs/tab/tab-header.svelte +71 -71
- package/dist/components/tabs/tab/tab-root.svelte +86 -86
- package/dist/components/toast/toast-description.svelte +38 -38
- package/dist/components/toast/toast-root.svelte +61 -61
- package/dist/components/toast/toast-title.svelte +35 -35
- package/dist/components/tree/tree-body.svelte +39 -39
- package/dist/components/tree/tree-header.svelte +54 -54
- package/dist/components/tree/tree-indicator.svelte +40 -40
- package/dist/components/tree/tree-root.svelte +65 -65
- package/dist/components/virtual/virtual-root.svelte +239 -239
- package/dist/context/preset.svelte.d.ts +1 -1
- package/dist/icons/icon-arrow-down.svelte.d.ts +1 -1
- package/dist/icons/icon-checkmark.svelte.d.ts +1 -1
- package/dist/icons/icon-close.svelte.d.ts +1 -1
- package/dist/icons/icon-more-vert.svelte.d.ts +1 -1
- package/dist/runes/container.svelte.d.ts +2 -2
- package/dist/shared/bond.svelte.d.ts +1 -1
- package/dist/utils/state.d.ts +1 -1
- package/dist/utils/state.js +2 -1
- package/llm/variants.md +1261 -712
- package/package.json +464 -437
|
@@ -1,49 +1,48 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { PopoverState, PopoverBond, type PopoverStateProps } from './bond.svelte';
|
|
3
|
-
import { defineProperty, defineState } from '../../utils';
|
|
4
|
-
import type { PopoverRootProps } from './types';
|
|
5
|
-
|
|
6
|
-
let {
|
|
7
|
-
open = $bindable(false),
|
|
8
|
-
disabled = false,
|
|
9
|
-
placements = ['bottom-start', 'bottom-end', 'top-start', 'top-end'],
|
|
10
|
-
placement = 'bottom-start',
|
|
11
|
-
offset = 0,
|
|
12
|
-
portal = undefined,
|
|
13
|
-
extend = {},
|
|
14
|
-
factory = _factory,
|
|
15
|
-
children = undefined
|
|
16
|
-
}: PopoverRootProps = $props();
|
|
17
|
-
|
|
18
|
-
const bondProps = defineState<PopoverStateProps>(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
);
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
{@render children?.({ popover: bond })}
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { PopoverState, PopoverBond, type PopoverStateProps } from './bond.svelte';
|
|
3
|
+
import { defineProperty, defineState } from '../../utils';
|
|
4
|
+
import type { PopoverRootProps } from './types';
|
|
5
|
+
|
|
6
|
+
let {
|
|
7
|
+
open = $bindable(false),
|
|
8
|
+
disabled = false,
|
|
9
|
+
placements = ['bottom-start', 'bottom-end', 'top-start', 'top-end'],
|
|
10
|
+
placement = 'bottom-start',
|
|
11
|
+
offset = 0,
|
|
12
|
+
portal = undefined,
|
|
13
|
+
extend = {},
|
|
14
|
+
factory = _factory,
|
|
15
|
+
children = undefined
|
|
16
|
+
}: PopoverRootProps = $props();
|
|
17
|
+
|
|
18
|
+
const bondProps = defineState<PopoverStateProps>([
|
|
19
|
+
defineProperty(
|
|
20
|
+
'open',
|
|
21
|
+
() => open,
|
|
22
|
+
(v) => {
|
|
23
|
+
open = v;
|
|
24
|
+
}
|
|
25
|
+
),
|
|
26
|
+
defineProperty('disabled', () => disabled),
|
|
27
|
+
defineProperty('placement', () => placement),
|
|
28
|
+
defineProperty('offset', () => offset),
|
|
29
|
+
defineProperty('placements', () => placements ?? []),
|
|
30
|
+
defineProperty('portal', () => portal),
|
|
31
|
+
defineProperty('extend', () => extend)
|
|
32
|
+
]);
|
|
33
|
+
|
|
34
|
+
const bond = factory(bondProps).share();
|
|
35
|
+
|
|
36
|
+
function _factory(props: typeof bondProps) {
|
|
37
|
+
const popoverState = new PopoverState(() => props);
|
|
38
|
+
const popoverBond = new PopoverBond(popoverState);
|
|
39
|
+
|
|
40
|
+
return popoverBond;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function getBond() {
|
|
44
|
+
return bond;
|
|
45
|
+
}
|
|
46
|
+
</script>
|
|
47
|
+
|
|
48
|
+
{@render children?.({ popover: bond })}
|
|
@@ -1,67 +1,52 @@
|
|
|
1
|
-
<script module>
|
|
2
|
-
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
-
import { Popover as Popover_ } from '.';
|
|
4
|
-
import Root from '../root/root.svelte';
|
|
5
|
-
import { clickoutPopover } from './attachments.svelte';
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
<
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
duration: 0.1
|
|
56
|
-
}
|
|
57
|
-
);
|
|
58
|
-
}}
|
|
59
|
-
>
|
|
60
|
-
<div>Hello World !</div>
|
|
61
|
-
<Popover_.Arrow />
|
|
62
|
-
</Popover_.Content>
|
|
63
|
-
{/snippet}
|
|
64
|
-
</Popover_.Root>
|
|
65
|
-
</Root>
|
|
66
|
-
{/snippet}
|
|
67
|
-
</Story>
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
+
import { Popover as Popover_ } from '.';
|
|
4
|
+
import Root from '../root/root.svelte';
|
|
5
|
+
import { clickoutPopover } from './attachments.svelte';
|
|
6
|
+
import { Button } from '../button';
|
|
7
|
+
|
|
8
|
+
// More on how to set up stories at: https://storybook.js.org/docs/writing-stories
|
|
9
|
+
const { Story } = defineMeta({
|
|
10
|
+
title: 'Atoms/Popover',
|
|
11
|
+
// This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs
|
|
12
|
+
|
|
13
|
+
parameters: {
|
|
14
|
+
// More on how to position stories at: https://storybook.js.org/docs/configure/story-layout
|
|
15
|
+
layout: 'fullscreen'
|
|
16
|
+
},
|
|
17
|
+
args: {}
|
|
18
|
+
});
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<script lang="ts">
|
|
22
|
+
let open = $state(false);
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
<Story name="Popover" args={{}}>
|
|
26
|
+
{#snippet children(args)}
|
|
27
|
+
<Root class="overflow-clip p-4">
|
|
28
|
+
<Popover_.Root bind:open offset={0} {...args}>
|
|
29
|
+
{#snippet children({ popover })}
|
|
30
|
+
<!-- {#if dev}
|
|
31
|
+
<RenderScan duration={400} />
|
|
32
|
+
{/if} -->
|
|
33
|
+
|
|
34
|
+
<Popover_.Trigger base={Button} class="items-center gap-4">
|
|
35
|
+
<div>Open Popover</div>
|
|
36
|
+
<Popover_.Indicator />
|
|
37
|
+
</Popover_.Trigger>
|
|
38
|
+
|
|
39
|
+
<Popover_.Content
|
|
40
|
+
{@attach clickoutPopover((ev, atom) => {
|
|
41
|
+
atom.state.close();
|
|
42
|
+
})}
|
|
43
|
+
class="bg-card"
|
|
44
|
+
>
|
|
45
|
+
<div>Hello World !</div>
|
|
46
|
+
<Popover_.Arrow />
|
|
47
|
+
</Popover_.Content>
|
|
48
|
+
{/snippet}
|
|
49
|
+
</Popover_.Root>
|
|
50
|
+
</Root>
|
|
51
|
+
{/snippet}
|
|
52
|
+
</Story>
|
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
<script module lang="ts">
|
|
2
|
-
export type { PortalOuterProps } from './types';
|
|
3
|
-
</script>
|
|
4
|
-
|
|
5
|
-
<script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
|
|
6
|
-
import type { Snippet } from 'svelte';
|
|
7
|
-
import type { HTMLAttributes } from 'svelte/elements';
|
|
8
|
-
import type { PortalOuterProps } from './types';
|
|
9
|
-
import { PortalsBond, PortalBond, PortalState, type PortalStateProps } from '.';
|
|
10
|
-
import { RootBond } from '../root';
|
|
11
|
-
import type { RootPortals } from '../root/root.svelte';
|
|
12
|
-
import {
|
|
13
|
-
HtmlAtom,
|
|
14
|
-
type ElementType,
|
|
15
|
-
type HtmlAtomProps,
|
|
16
|
-
type Base
|
|
17
|
-
} from '../atom';
|
|
18
|
-
import { defineProperty, defineState } from '../../utils';
|
|
19
|
-
|
|
20
|
-
type Element = ElementType<E>;
|
|
21
|
-
|
|
22
|
-
let {
|
|
23
|
-
class: klass = '',
|
|
24
|
-
id,
|
|
25
|
-
factory = _factory,
|
|
26
|
-
children = undefined,
|
|
27
|
-
onmount = undefined,
|
|
28
|
-
ondestroy = undefined,
|
|
29
|
-
animate = undefined,
|
|
30
|
-
enter = undefined,
|
|
31
|
-
exit = undefined,
|
|
32
|
-
initial = undefined,
|
|
33
|
-
...restProps
|
|
34
|
-
}: PortalOuterProps<E, B> & HTMLAttributes<Element> = $props();
|
|
35
|
-
|
|
36
|
-
const rootBond = RootBond.get();
|
|
37
|
-
const portalsBond = PortalsBond.get();
|
|
38
|
-
|
|
39
|
-
const bondProps = defineState<PortalStateProps>([defineProperty('id', () => id)]);
|
|
40
|
-
const bond = factory(bondProps).share() as PortalBond;
|
|
41
|
-
|
|
42
|
-
portalsBond?.state.set(id, bond);
|
|
43
|
-
|
|
44
|
-
$effect(() => {
|
|
45
|
-
if (rootBond) {
|
|
46
|
-
rootBond.state.setPortal(id, bond);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return () => {
|
|
50
|
-
portalsBond?.state.delete(id);
|
|
51
|
-
bond.destroy();
|
|
52
|
-
};
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
const rootProps = $derived({
|
|
56
|
-
...bond.root(),
|
|
57
|
-
...restProps
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
function _factory(props: typeof bondProps) {
|
|
61
|
-
const portalState = new PortalState(() => props);
|
|
62
|
-
return new PortalBond(portalState);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export function getBond() {
|
|
66
|
-
return bond;
|
|
67
|
-
}
|
|
68
|
-
</script>
|
|
69
|
-
|
|
70
|
-
<HtmlAtom
|
|
71
|
-
{bond}
|
|
72
|
-
preset="portal"
|
|
73
|
-
class={['border-border pointer-events-none', '$preset', klass]}
|
|
74
|
-
enter={enter?.bind(bond.state)}
|
|
75
|
-
exit={exit?.bind(bond.state)}
|
|
76
|
-
initial={initial?.bind(bond.state)}
|
|
77
|
-
animate={animate?.bind(bond.state)}
|
|
78
|
-
onmount={onmount?.bind(bond.state)}
|
|
79
|
-
ondestroy={ondestroy?.bind(bond.state)}
|
|
80
|
-
{...rootProps}
|
|
81
|
-
>
|
|
82
|
-
{@render children?.()}
|
|
83
|
-
</HtmlAtom>
|
|
1
|
+
<script module lang="ts">
|
|
2
|
+
export type { PortalOuterProps } from './types';
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
|
|
6
|
+
import type { Snippet } from 'svelte';
|
|
7
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
8
|
+
import type { PortalOuterProps } from './types';
|
|
9
|
+
import { PortalsBond, PortalBond, PortalState, type PortalStateProps } from '.';
|
|
10
|
+
import { RootBond } from '../root';
|
|
11
|
+
import type { RootPortals } from '../root/root.svelte';
|
|
12
|
+
import {
|
|
13
|
+
HtmlAtom,
|
|
14
|
+
type ElementType,
|
|
15
|
+
type HtmlAtomProps,
|
|
16
|
+
type Base
|
|
17
|
+
} from '../atom';
|
|
18
|
+
import { defineProperty, defineState } from '../../utils';
|
|
19
|
+
|
|
20
|
+
type Element = ElementType<E>;
|
|
21
|
+
|
|
22
|
+
let {
|
|
23
|
+
class: klass = '',
|
|
24
|
+
id,
|
|
25
|
+
factory = _factory,
|
|
26
|
+
children = undefined,
|
|
27
|
+
onmount = undefined,
|
|
28
|
+
ondestroy = undefined,
|
|
29
|
+
animate = undefined,
|
|
30
|
+
enter = undefined,
|
|
31
|
+
exit = undefined,
|
|
32
|
+
initial = undefined,
|
|
33
|
+
...restProps
|
|
34
|
+
}: PortalOuterProps<E, B> & HTMLAttributes<Element> = $props();
|
|
35
|
+
|
|
36
|
+
const rootBond = RootBond.get();
|
|
37
|
+
const portalsBond = PortalsBond.get();
|
|
38
|
+
|
|
39
|
+
const bondProps = defineState<PortalStateProps>([defineProperty('id', () => id)]);
|
|
40
|
+
const bond = factory(bondProps).share() as PortalBond;
|
|
41
|
+
|
|
42
|
+
portalsBond?.state.set(id, bond);
|
|
43
|
+
|
|
44
|
+
$effect(() => {
|
|
45
|
+
if (rootBond) {
|
|
46
|
+
rootBond.state.setPortal(id, bond);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return () => {
|
|
50
|
+
portalsBond?.state.delete(id);
|
|
51
|
+
bond.destroy();
|
|
52
|
+
};
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
const rootProps = $derived({
|
|
56
|
+
...bond.root(),
|
|
57
|
+
...restProps
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
function _factory(props: typeof bondProps) {
|
|
61
|
+
const portalState = new PortalState(() => props);
|
|
62
|
+
return new PortalBond(portalState);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function getBond() {
|
|
66
|
+
return bond;
|
|
67
|
+
}
|
|
68
|
+
</script>
|
|
69
|
+
|
|
70
|
+
<HtmlAtom
|
|
71
|
+
{bond}
|
|
72
|
+
preset="portal"
|
|
73
|
+
class={['border-border pointer-events-none', '$preset', klass]}
|
|
74
|
+
enter={enter?.bind(bond.state)}
|
|
75
|
+
exit={exit?.bind(bond.state)}
|
|
76
|
+
initial={initial?.bind(bond.state)}
|
|
77
|
+
animate={animate?.bind(bond.state)}
|
|
78
|
+
onmount={onmount?.bind(bond.state)}
|
|
79
|
+
ondestroy={ondestroy?.bind(bond.state)}
|
|
80
|
+
{...rootProps}
|
|
81
|
+
>
|
|
82
|
+
{@render children?.()}
|
|
83
|
+
</HtmlAtom>
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
<script module lang="ts">
|
|
2
|
-
export type { TeleportProps } from './types';
|
|
3
|
-
</script>
|
|
4
|
-
|
|
5
|
-
<script lang="ts" generics="E extends HtmlElementTagName = 'div', B extends Base = Base">
|
|
6
|
-
import type { HTMLAttributes } from 'svelte/elements';
|
|
7
|
-
import type { TeleportProps } from './types';
|
|
8
|
-
import { HtmlAtom, type HtmlAtomProps, type Base } from '../atom';
|
|
9
|
-
import type { HtmlElementTagName, HtmlElementType } from '../element';
|
|
10
|
-
import { PortalsBond } from './portals';
|
|
11
|
-
import { RootBond } from '../root/bond.svelte';
|
|
12
|
-
import { port } from './utils';
|
|
13
|
-
import type { PortalBond } from '.';
|
|
14
|
-
|
|
15
|
-
type Element = HtmlElementType<E>;
|
|
16
|
-
|
|
17
|
-
let { portal, as, base, children, ...restProps }: TeleportProps<E, B> & HTMLAttributes<Element> =
|
|
18
|
-
$props();
|
|
19
|
-
|
|
20
|
-
const portalsBond = PortalsBond.get();
|
|
21
|
-
const rootBond = RootBond.get();
|
|
22
|
-
|
|
23
|
-
const portalBond = $derived.by(() => {
|
|
24
|
-
if (typeof portal === 'string') {
|
|
25
|
-
return portalsBond?.state?.get(portal!) ?? rootBond?.state?.getPortal(portal!);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
return portal;
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
const targetElement = $derived(portalBond?.targetElement);
|
|
32
|
-
|
|
33
|
-
function _port(node: HTMLElement) {
|
|
34
|
-
const hidden = node.hidden;
|
|
35
|
-
|
|
36
|
-
node.hidden = true;
|
|
37
|
-
|
|
38
|
-
const unport = port(node, targetElement);
|
|
39
|
-
|
|
40
|
-
node.hidden = hidden;
|
|
41
|
-
|
|
42
|
-
return unport;
|
|
43
|
-
}
|
|
44
|
-
</script>
|
|
45
|
-
|
|
46
|
-
{#if targetElement && portal}
|
|
47
|
-
<HtmlAtom {@attach _port} as={as as E} {base} {...restProps}>
|
|
48
|
-
{@render children?.({ portal: portalBond })}
|
|
49
|
-
</HtmlAtom>
|
|
50
|
-
{/if}
|
|
1
|
+
<script module lang="ts">
|
|
2
|
+
export type { TeleportProps } from './types';
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<script lang="ts" generics="E extends HtmlElementTagName = 'div', B extends Base = Base">
|
|
6
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
7
|
+
import type { TeleportProps } from './types';
|
|
8
|
+
import { HtmlAtom, type HtmlAtomProps, type Base } from '../atom';
|
|
9
|
+
import type { HtmlElementTagName, HtmlElementType } from '../element';
|
|
10
|
+
import { PortalsBond } from './portals';
|
|
11
|
+
import { RootBond } from '../root/bond.svelte';
|
|
12
|
+
import { port } from './utils';
|
|
13
|
+
import type { PortalBond } from '.';
|
|
14
|
+
|
|
15
|
+
type Element = HtmlElementType<E>;
|
|
16
|
+
|
|
17
|
+
let { portal, as, base, children, ...restProps }: TeleportProps<E, B> & HTMLAttributes<Element> =
|
|
18
|
+
$props();
|
|
19
|
+
|
|
20
|
+
const portalsBond = PortalsBond.get();
|
|
21
|
+
const rootBond = RootBond.get();
|
|
22
|
+
|
|
23
|
+
const portalBond = $derived.by(() => {
|
|
24
|
+
if (typeof portal === 'string') {
|
|
25
|
+
return portalsBond?.state?.get(portal!) ?? rootBond?.state?.getPortal(portal!);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return portal;
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
const targetElement = $derived(portalBond?.targetElement);
|
|
32
|
+
|
|
33
|
+
function _port(node: HTMLElement) {
|
|
34
|
+
const hidden = node.hidden;
|
|
35
|
+
|
|
36
|
+
node.hidden = true;
|
|
37
|
+
|
|
38
|
+
const unport = port(node, targetElement);
|
|
39
|
+
|
|
40
|
+
node.hidden = hidden;
|
|
41
|
+
|
|
42
|
+
return unport;
|
|
43
|
+
}
|
|
44
|
+
</script>
|
|
45
|
+
|
|
46
|
+
{#if targetElement && portal}
|
|
47
|
+
<HtmlAtom {@attach _port} as={as as E} {base} {...restProps}>
|
|
48
|
+
{@render children?.({ portal: portalBond })}
|
|
49
|
+
</HtmlAtom>
|
|
50
|
+
{/if}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as QRCode } from './qr-code.svelte';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as QRCode } from './qr-code.svelte';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
+
import QrCodeComponent from './qr-code.svelte';
|
|
4
|
+
import { Root } from '../root';
|
|
5
|
+
|
|
6
|
+
const { Story } = defineMeta({
|
|
7
|
+
title: 'Atoms/QR Code'
|
|
8
|
+
});
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<script>
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<Story name="QR Code">
|
|
15
|
+
{#snippet children(args)}
|
|
16
|
+
<Root>
|
|
17
|
+
{#snippet children({})}
|
|
18
|
+
<div class="flex h-full w-full items-center justify-center">
|
|
19
|
+
<QrCodeComponent value="Hello World" />
|
|
20
|
+
</div>
|
|
21
|
+
{/snippet}
|
|
22
|
+
</Root>
|
|
23
|
+
{/snippet}
|
|
24
|
+
</Story>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export default QrCode;
|
|
2
|
+
type QrCode = SvelteComponent<{
|
|
3
|
+
[x: string]: never;
|
|
4
|
+
}, {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
}, {}> & {
|
|
7
|
+
$$bindings?: string;
|
|
8
|
+
};
|
|
9
|
+
declare const QrCode: $$__sveltets_2_IsomorphicComponent<{
|
|
10
|
+
[x: string]: never;
|
|
11
|
+
}, {
|
|
12
|
+
[evt: string]: CustomEvent<any>;
|
|
13
|
+
}, {}, {}, string>;
|
|
14
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
15
|
+
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
16
|
+
$$bindings?: Bindings;
|
|
17
|
+
} & Exports;
|
|
18
|
+
(internal: unknown, props: {
|
|
19
|
+
$$events?: Events;
|
|
20
|
+
$$slots?: Slots;
|
|
21
|
+
}): Exports & {
|
|
22
|
+
$set?: any;
|
|
23
|
+
$on?: any;
|
|
24
|
+
};
|
|
25
|
+
z_$$bindings?: Bindings;
|
|
26
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cn } from '../../utils';
|
|
3
|
+
import { Icon } from '../icon';
|
|
4
|
+
import type { renderSVG } from 'uqr';
|
|
5
|
+
|
|
6
|
+
let { class: klass = '', value = '' } = $props();
|
|
7
|
+
|
|
8
|
+
type Render = typeof renderSVG;
|
|
9
|
+
|
|
10
|
+
let render: Render | undefined = $state();
|
|
11
|
+
|
|
12
|
+
const code = $derived(
|
|
13
|
+
render?.(value, { blackColor: 'currentColor', whiteColor: 'transparent', border: 0 })
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
import('uqr').then((result) => {
|
|
17
|
+
render = result.renderSVG;
|
|
18
|
+
});
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<Icon class={cn('aspect-square h-20', klass)}>
|
|
22
|
+
{#if code}
|
|
23
|
+
{@html code}
|
|
24
|
+
{/if}
|
|
25
|
+
</Icon>
|