ui-ingredients 0.31.0 → 0.31.2
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 +49 -49
- package/dist/accordion/accordion-item.svelte +64 -64
- package/dist/accordion/accordion-root.svelte +65 -65
- package/dist/alert/alert-root.svelte +45 -45
- package/dist/alert-dialog/alert-dialog-root.svelte +48 -48
- package/dist/angle-slider/angle-slider-root.svelte +58 -58
- package/dist/avatar/avatar-root.svelte +45 -45
- package/dist/carousel/carousel-root.svelte +64 -64
- package/dist/clipboard/clipboard-root.svelte +52 -52
- package/dist/collapsible/collapsible-root.svelte +73 -73
- package/dist/color-picker/color-picker-root.svelte +88 -88
- package/dist/combobox/combobox-root.svelte +102 -102
- package/dist/dialog/dialog-root.svelte +48 -48
- package/dist/drawer/drawer-root.svelte +48 -48
- package/dist/editable/editable-root.svelte +72 -72
- package/dist/field/field-root.svelte +62 -62
- package/dist/file-upload/file-upload-root.svelte +68 -68
- package/dist/floating-panel/floating-panel-root.svelte +47 -47
- package/dist/highlight/highlight.svelte +42 -42
- package/dist/hover-card/hover-card-root.svelte +51 -51
- package/dist/menu/menu-root.svelte +74 -74
- package/dist/merge-props.js +15 -17
- package/dist/number-input/number-input-root.svelte +74 -74
- package/dist/pagination/pagination-root.svelte +57 -57
- package/dist/pin-input/pin-input-root.svelte +67 -67
- package/dist/popover/popover-root.svelte +60 -60
- package/dist/presence/presence.svelte +43 -43
- package/dist/progress/progress-root.svelte +55 -55
- package/dist/qr-code/qr-code-root.svelte +52 -52
- package/dist/radio-group/radio-group-root.svelte +55 -55
- package/dist/rating-group/rating-group-root.svelte +62 -62
- package/dist/segment-group/segment-group-root.svelte +57 -57
- package/dist/select/select-root.svelte +88 -88
- package/dist/signature-pad/signature-pad-root.svelte +59 -59
- package/dist/slider/slider-root.svelte +68 -68
- package/dist/splitter/splitter-root.svelte +52 -52
- package/dist/steps/steps-root.svelte +64 -64
- package/dist/switch/switch-root.svelte +58 -58
- package/dist/tabs/tabs-root.svelte +58 -58
- package/dist/tags-input/tags-input-root.svelte +74 -74
- package/dist/time-picker/time-picker-root.svelte +81 -81
- package/dist/timer/timer-root.svelte +55 -55
- package/dist/toast/toast-actor.svelte +19 -19
- package/dist/toggle/toggle-root.svelte +49 -49
- package/dist/toggle-group/toggle-group-root.svelte +57 -57
- package/dist/tooltip/tooltip-root.svelte +44 -44
- package/dist/tour/tour-root.svelte +46 -46
- package/dist/tree-view/tree-view-branch.svelte +63 -63
- package/dist/tree-view/tree-view-root.svelte +68 -68
- package/package.json +403 -411
@@ -1,68 +1,68 @@
|
|
1
|
-
<script lang="ts" module>
|
2
|
-
import type {Assign, HtmlIngredientProps} from '../types.js';
|
3
|
-
import type {
|
4
|
-
CreateFileUploadProps,
|
5
|
-
CreateFileUploadReturn,
|
6
|
-
} from './create-file-upload.svelte.js';
|
7
|
-
|
8
|
-
export interface FileUploadProps
|
9
|
-
extends Assign<
|
10
|
-
HtmlIngredientProps<'div', HTMLDivElement, CreateFileUploadReturn>,
|
11
|
-
CreateFileUploadProps
|
12
|
-
> {}
|
13
|
-
</script>
|
14
|
-
|
15
|
-
<script lang="ts">
|
16
|
-
import {reflect} from '@zag-js/svelte';
|
17
|
-
import {createSplitProps} from '../create-split-props.js';
|
18
|
-
import {mergeProps} from '../merge-props.js';
|
19
|
-
import {createFileUpload} from './create-file-upload.svelte.js';
|
20
|
-
import {setFileUploadContext} from './file-upload-context.svelte.js';
|
21
|
-
|
22
|
-
let {
|
23
|
-
ref = $bindable(null),
|
24
|
-
asChild,
|
25
|
-
children,
|
26
|
-
...props
|
27
|
-
}: FileUploadProps = $props();
|
28
|
-
|
29
|
-
let [createFileUploadProps, localProps] = $derived(
|
30
|
-
createSplitProps<CreateFileUploadProps>([
|
31
|
-
'accept',
|
32
|
-
'allowDrop',
|
33
|
-
'capture',
|
34
|
-
'directory',
|
35
|
-
'disabled',
|
36
|
-
'id',
|
37
|
-
'ids',
|
38
|
-
'invalid',
|
39
|
-
'locale',
|
40
|
-
'maxFileSize',
|
41
|
-
'maxFiles',
|
42
|
-
'minFileSize',
|
43
|
-
'minFileSize',
|
44
|
-
'name',
|
45
|
-
'onFileAccept',
|
46
|
-
'onFileChange',
|
47
|
-
'onFileReject',
|
48
|
-
'preventDocumentDrop',
|
49
|
-
'required',
|
50
|
-
'translations',
|
51
|
-
'validate',
|
52
|
-
])(props),
|
53
|
-
);
|
54
|
-
|
55
|
-
let fileUpload = createFileUpload(reflect(() => createFileUploadProps));
|
56
|
-
|
57
|
-
let mergedProps = $derived(mergeProps(fileUpload.getRootProps(), localProps));
|
58
|
-
|
59
|
-
setFileUploadContext(fileUpload);
|
60
|
-
</script>
|
61
|
-
|
62
|
-
{#if asChild}
|
63
|
-
{@render asChild(mergedProps, fileUpload)}
|
64
|
-
{:else}
|
65
|
-
<div bind:this={ref} {...mergedProps}>
|
66
|
-
{@render children?.(fileUpload)}
|
67
|
-
</div>
|
68
|
-
{/if}
|
1
|
+
<script lang="ts" module>
|
2
|
+
import type {Assign, HtmlIngredientProps} from '../types.js';
|
3
|
+
import type {
|
4
|
+
CreateFileUploadProps,
|
5
|
+
CreateFileUploadReturn,
|
6
|
+
} from './create-file-upload.svelte.js';
|
7
|
+
|
8
|
+
export interface FileUploadProps
|
9
|
+
extends Assign<
|
10
|
+
HtmlIngredientProps<'div', HTMLDivElement, CreateFileUploadReturn>,
|
11
|
+
CreateFileUploadProps
|
12
|
+
> {}
|
13
|
+
</script>
|
14
|
+
|
15
|
+
<script lang="ts">
|
16
|
+
import {reflect} from '@zag-js/svelte';
|
17
|
+
import {createSplitProps} from '../create-split-props.js';
|
18
|
+
import {mergeProps} from '../merge-props.js';
|
19
|
+
import {createFileUpload} from './create-file-upload.svelte.js';
|
20
|
+
import {setFileUploadContext} from './file-upload-context.svelte.js';
|
21
|
+
|
22
|
+
let {
|
23
|
+
ref = $bindable(null),
|
24
|
+
asChild,
|
25
|
+
children,
|
26
|
+
...props
|
27
|
+
}: FileUploadProps = $props();
|
28
|
+
|
29
|
+
let [createFileUploadProps, localProps] = $derived(
|
30
|
+
createSplitProps<CreateFileUploadProps>([
|
31
|
+
'accept',
|
32
|
+
'allowDrop',
|
33
|
+
'capture',
|
34
|
+
'directory',
|
35
|
+
'disabled',
|
36
|
+
'id',
|
37
|
+
'ids',
|
38
|
+
'invalid',
|
39
|
+
'locale',
|
40
|
+
'maxFileSize',
|
41
|
+
'maxFiles',
|
42
|
+
'minFileSize',
|
43
|
+
'minFileSize',
|
44
|
+
'name',
|
45
|
+
'onFileAccept',
|
46
|
+
'onFileChange',
|
47
|
+
'onFileReject',
|
48
|
+
'preventDocumentDrop',
|
49
|
+
'required',
|
50
|
+
'translations',
|
51
|
+
'validate',
|
52
|
+
])(props),
|
53
|
+
);
|
54
|
+
|
55
|
+
let fileUpload = createFileUpload(reflect(() => createFileUploadProps));
|
56
|
+
|
57
|
+
let mergedProps = $derived(mergeProps(fileUpload.getRootProps(), localProps));
|
58
|
+
|
59
|
+
setFileUploadContext(fileUpload);
|
60
|
+
</script>
|
61
|
+
|
62
|
+
{#if asChild}
|
63
|
+
{@render asChild(mergedProps, fileUpload)}
|
64
|
+
{:else}
|
65
|
+
<div bind:this={ref} {...mergedProps}>
|
66
|
+
{@render children?.(fileUpload)}
|
67
|
+
</div>
|
68
|
+
{/if}
|
@@ -1,47 +1,47 @@
|
|
1
|
-
<script lang="ts" module>
|
2
|
-
import type {Snippet} from 'svelte';
|
3
|
-
import type {PresenceStrategyProps} from '../presence/create-presence.svelte.js';
|
4
|
-
import type {
|
5
|
-
CreateFloatingPanelProps,
|
6
|
-
CreateFloatingPanelReturn,
|
7
|
-
} from './create-floating-panel.svelte.js';
|
8
|
-
|
9
|
-
export interface FloatingPanelProps
|
10
|
-
extends CreateFloatingPanelProps,
|
11
|
-
PresenceStrategyProps {
|
12
|
-
children?: Snippet<[CreateFloatingPanelReturn]>;
|
13
|
-
}
|
14
|
-
</script>
|
15
|
-
|
16
|
-
<script lang="ts">
|
17
|
-
import {reflect} from '@zag-js/svelte';
|
18
|
-
import {createSplitProps} from '../create-split-props.js';
|
19
|
-
import {createPresence} from '../presence/create-presence.svelte.js';
|
20
|
-
import {setPresenceContext} from '../presence/presence-context.svelte.js';
|
21
|
-
import {createFloatingPanel} from './create-floating-panel.svelte.js';
|
22
|
-
import {setFloatingPanelContext} from './floating-panel-context.svelte.js';
|
23
|
-
|
24
|
-
let {children, ...props}: FloatingPanelProps = $props();
|
25
|
-
|
26
|
-
let [presenceStrategyProps, createFloatingPanelProps] = $derived(
|
27
|
-
createSplitProps<PresenceStrategyProps>(['lazyMount', 'keepMounted'])(
|
28
|
-
props,
|
29
|
-
),
|
30
|
-
);
|
31
|
-
|
32
|
-
let floatingPanel = createFloatingPanel(
|
33
|
-
reflect(() => createFloatingPanelProps),
|
34
|
-
);
|
35
|
-
|
36
|
-
let presence = createPresence(
|
37
|
-
reflect(() => ({
|
38
|
-
...presenceStrategyProps,
|
39
|
-
present: floatingPanel.open,
|
40
|
-
})),
|
41
|
-
);
|
42
|
-
|
43
|
-
setFloatingPanelContext(floatingPanel);
|
44
|
-
setPresenceContext(presence);
|
45
|
-
</script>
|
46
|
-
|
47
|
-
{@render children?.(floatingPanel)}
|
1
|
+
<script lang="ts" module>
|
2
|
+
import type {Snippet} from 'svelte';
|
3
|
+
import type {PresenceStrategyProps} from '../presence/create-presence.svelte.js';
|
4
|
+
import type {
|
5
|
+
CreateFloatingPanelProps,
|
6
|
+
CreateFloatingPanelReturn,
|
7
|
+
} from './create-floating-panel.svelte.js';
|
8
|
+
|
9
|
+
export interface FloatingPanelProps
|
10
|
+
extends CreateFloatingPanelProps,
|
11
|
+
PresenceStrategyProps {
|
12
|
+
children?: Snippet<[CreateFloatingPanelReturn]>;
|
13
|
+
}
|
14
|
+
</script>
|
15
|
+
|
16
|
+
<script lang="ts">
|
17
|
+
import {reflect} from '@zag-js/svelte';
|
18
|
+
import {createSplitProps} from '../create-split-props.js';
|
19
|
+
import {createPresence} from '../presence/create-presence.svelte.js';
|
20
|
+
import {setPresenceContext} from '../presence/presence-context.svelte.js';
|
21
|
+
import {createFloatingPanel} from './create-floating-panel.svelte.js';
|
22
|
+
import {setFloatingPanelContext} from './floating-panel-context.svelte.js';
|
23
|
+
|
24
|
+
let {children, ...props}: FloatingPanelProps = $props();
|
25
|
+
|
26
|
+
let [presenceStrategyProps, createFloatingPanelProps] = $derived(
|
27
|
+
createSplitProps<PresenceStrategyProps>(['lazyMount', 'keepMounted'])(
|
28
|
+
props,
|
29
|
+
),
|
30
|
+
);
|
31
|
+
|
32
|
+
let floatingPanel = createFloatingPanel(
|
33
|
+
reflect(() => createFloatingPanelProps),
|
34
|
+
);
|
35
|
+
|
36
|
+
let presence = createPresence(
|
37
|
+
reflect(() => ({
|
38
|
+
...presenceStrategyProps,
|
39
|
+
present: floatingPanel.open,
|
40
|
+
})),
|
41
|
+
);
|
42
|
+
|
43
|
+
setFloatingPanelContext(floatingPanel);
|
44
|
+
setPresenceContext(presence);
|
45
|
+
</script>
|
46
|
+
|
47
|
+
{@render children?.(floatingPanel)}
|
@@ -1,42 +1,42 @@
|
|
1
|
-
<script lang="ts" module>
|
2
|
-
import type {HighlightWordProps} from '@zag-js/highlight-word';
|
3
|
-
import type {Assign, HtmlIngredientProps} from '../types.js';
|
4
|
-
|
5
|
-
export interface HighlightProps
|
6
|
-
extends Assign<
|
7
|
-
Omit<HtmlIngredientProps<'div', HTMLDivElement>, 'children'>,
|
8
|
-
HighlightWordProps
|
9
|
-
> {}
|
10
|
-
</script>
|
11
|
-
|
12
|
-
<script lang="ts">
|
13
|
-
import {highlightWord} from '@zag-js/highlight-word';
|
14
|
-
import {createSplitProps} from '../create-split-props.js';
|
15
|
-
|
16
|
-
let {ref = $bindable(null), asChild, ...props}: HighlightProps = $props();
|
17
|
-
|
18
|
-
let [highlightWordProps, localProps] = $derived(
|
19
|
-
createSplitProps<HighlightWordProps>([
|
20
|
-
'ignoreCase',
|
21
|
-
'matchAll',
|
22
|
-
'query',
|
23
|
-
'text',
|
24
|
-
])(props),
|
25
|
-
);
|
26
|
-
|
27
|
-
let chunks = $derived(highlightWord(highlightWordProps));
|
28
|
-
</script>
|
29
|
-
|
30
|
-
{#if asChild}
|
31
|
-
{@render asChild(localProps)}
|
32
|
-
{:else}
|
33
|
-
<div bind:this={ref} data-scope="highlight" data-part="root" {...localProps}>
|
34
|
-
{#each chunks as chunk}
|
35
|
-
{#if chunk.match}
|
36
|
-
<mark>{chunk.text}</mark>
|
37
|
-
{:else}
|
38
|
-
{chunk.text}
|
39
|
-
{/if}
|
40
|
-
{/each}
|
41
|
-
</div>
|
42
|
-
{/if}
|
1
|
+
<script lang="ts" module>
|
2
|
+
import type {HighlightWordProps} from '@zag-js/highlight-word';
|
3
|
+
import type {Assign, HtmlIngredientProps} from '../types.js';
|
4
|
+
|
5
|
+
export interface HighlightProps
|
6
|
+
extends Assign<
|
7
|
+
Omit<HtmlIngredientProps<'div', HTMLDivElement>, 'children'>,
|
8
|
+
HighlightWordProps
|
9
|
+
> {}
|
10
|
+
</script>
|
11
|
+
|
12
|
+
<script lang="ts">
|
13
|
+
import {highlightWord} from '@zag-js/highlight-word';
|
14
|
+
import {createSplitProps} from '../create-split-props.js';
|
15
|
+
|
16
|
+
let {ref = $bindable(null), asChild, ...props}: HighlightProps = $props();
|
17
|
+
|
18
|
+
let [highlightWordProps, localProps] = $derived(
|
19
|
+
createSplitProps<HighlightWordProps>([
|
20
|
+
'ignoreCase',
|
21
|
+
'matchAll',
|
22
|
+
'query',
|
23
|
+
'text',
|
24
|
+
])(props),
|
25
|
+
);
|
26
|
+
|
27
|
+
let chunks = $derived(highlightWord(highlightWordProps));
|
28
|
+
</script>
|
29
|
+
|
30
|
+
{#if asChild}
|
31
|
+
{@render asChild(localProps)}
|
32
|
+
{:else}
|
33
|
+
<div bind:this={ref} data-scope="highlight" data-part="root" {...localProps}>
|
34
|
+
{#each chunks as chunk}
|
35
|
+
{#if chunk.match}
|
36
|
+
<mark>{chunk.text}</mark>
|
37
|
+
{:else}
|
38
|
+
{chunk.text}
|
39
|
+
{/if}
|
40
|
+
{/each}
|
41
|
+
</div>
|
42
|
+
{/if}
|
@@ -1,51 +1,51 @@
|
|
1
|
-
<script lang="ts" module>
|
2
|
-
import type {Snippet} from 'svelte';
|
3
|
-
import type {PresenceStrategyProps} from '../presence/create-presence.svelte.js';
|
4
|
-
import type {
|
5
|
-
CreateHoverCardProps,
|
6
|
-
CreateHoverCardReturn,
|
7
|
-
} from './create-hover-card.svelte.js';
|
8
|
-
|
9
|
-
export interface HoverCardProps
|
10
|
-
extends CreateHoverCardProps,
|
11
|
-
PresenceStrategyProps {
|
12
|
-
children?: Snippet<[CreateHoverCardReturn]>;
|
13
|
-
}
|
14
|
-
</script>
|
15
|
-
|
16
|
-
<script lang="ts">
|
17
|
-
import {reflect} from '@zag-js/svelte';
|
18
|
-
import {createSplitProps} from '../create-split-props.js';
|
19
|
-
import {createPresence} from '../presence/create-presence.svelte.js';
|
20
|
-
import {setPresenceContext} from '../presence/presence-context.svelte.js';
|
21
|
-
import {createHoverCard} from './create-hover-card.svelte.js';
|
22
|
-
import {setHoverCardContext} from './hover-card-context.svelte.js';
|
23
|
-
|
24
|
-
let {children, ...props}: HoverCardProps = $props();
|
25
|
-
|
26
|
-
let [createHoverCardProps, presenceStrategyProps] = $derived(
|
27
|
-
createSplitProps<CreateHoverCardProps>([
|
28
|
-
'closeDelay',
|
29
|
-
'id',
|
30
|
-
'ids',
|
31
|
-
'onOpenChange',
|
32
|
-
'open',
|
33
|
-
'openControlled',
|
34
|
-
'openDelay',
|
35
|
-
'positioning',
|
36
|
-
])(props),
|
37
|
-
);
|
38
|
-
|
39
|
-
let hoverCard = createHoverCard(reflect(() => createHoverCardProps));
|
40
|
-
let presence = createPresence(
|
41
|
-
reflect(() => ({
|
42
|
-
...presenceStrategyProps,
|
43
|
-
present: hoverCard.open,
|
44
|
-
})),
|
45
|
-
);
|
46
|
-
|
47
|
-
setHoverCardContext(hoverCard);
|
48
|
-
setPresenceContext(presence);
|
49
|
-
</script>
|
50
|
-
|
51
|
-
{@render children?.(hoverCard)}
|
1
|
+
<script lang="ts" module>
|
2
|
+
import type {Snippet} from 'svelte';
|
3
|
+
import type {PresenceStrategyProps} from '../presence/create-presence.svelte.js';
|
4
|
+
import type {
|
5
|
+
CreateHoverCardProps,
|
6
|
+
CreateHoverCardReturn,
|
7
|
+
} from './create-hover-card.svelte.js';
|
8
|
+
|
9
|
+
export interface HoverCardProps
|
10
|
+
extends CreateHoverCardProps,
|
11
|
+
PresenceStrategyProps {
|
12
|
+
children?: Snippet<[CreateHoverCardReturn]>;
|
13
|
+
}
|
14
|
+
</script>
|
15
|
+
|
16
|
+
<script lang="ts">
|
17
|
+
import {reflect} from '@zag-js/svelte';
|
18
|
+
import {createSplitProps} from '../create-split-props.js';
|
19
|
+
import {createPresence} from '../presence/create-presence.svelte.js';
|
20
|
+
import {setPresenceContext} from '../presence/presence-context.svelte.js';
|
21
|
+
import {createHoverCard} from './create-hover-card.svelte.js';
|
22
|
+
import {setHoverCardContext} from './hover-card-context.svelte.js';
|
23
|
+
|
24
|
+
let {children, ...props}: HoverCardProps = $props();
|
25
|
+
|
26
|
+
let [createHoverCardProps, presenceStrategyProps] = $derived(
|
27
|
+
createSplitProps<CreateHoverCardProps>([
|
28
|
+
'closeDelay',
|
29
|
+
'id',
|
30
|
+
'ids',
|
31
|
+
'onOpenChange',
|
32
|
+
'open',
|
33
|
+
'openControlled',
|
34
|
+
'openDelay',
|
35
|
+
'positioning',
|
36
|
+
])(props),
|
37
|
+
);
|
38
|
+
|
39
|
+
let hoverCard = createHoverCard(reflect(() => createHoverCardProps));
|
40
|
+
let presence = createPresence(
|
41
|
+
reflect(() => ({
|
42
|
+
...presenceStrategyProps,
|
43
|
+
present: hoverCard.open,
|
44
|
+
})),
|
45
|
+
);
|
46
|
+
|
47
|
+
setHoverCardContext(hoverCard);
|
48
|
+
setPresenceContext(presence);
|
49
|
+
</script>
|
50
|
+
|
51
|
+
{@render children?.(hoverCard)}
|
@@ -1,74 +1,74 @@
|
|
1
|
-
<script lang="ts" module>
|
2
|
-
import type {Snippet} from 'svelte';
|
3
|
-
import type {PresenceStrategyProps} from '../presence/create-presence.svelte.js';
|
4
|
-
import {
|
5
|
-
type CreateMenuProps,
|
6
|
-
type CreateMenuReturn,
|
7
|
-
} from './create-menu.svelte.js';
|
8
|
-
|
9
|
-
export interface MenuRootProps
|
10
|
-
extends CreateMenuProps,
|
11
|
-
PresenceStrategyProps {
|
12
|
-
children?: Snippet<[CreateMenuReturn]>;
|
13
|
-
}
|
14
|
-
</script>
|
15
|
-
|
16
|
-
<script lang="ts">
|
17
|
-
import {reflect} from '@zag-js/svelte';
|
18
|
-
import {createSplitProps} from '../create-split-props.js';
|
19
|
-
import {createPresence} from '../presence/create-presence.svelte.js';
|
20
|
-
import {setPresenceContext} from '../presence/presence-context.svelte.js';
|
21
|
-
import {createMenu} from './create-menu.svelte.js';
|
22
|
-
import {
|
23
|
-
getMenuContext,
|
24
|
-
setMenuContext,
|
25
|
-
setMenuTriggerItemContext,
|
26
|
-
} from './menu-context.svelte.js';
|
27
|
-
|
28
|
-
let {children, ...props}: MenuRootProps = $props();
|
29
|
-
|
30
|
-
let [createMenuProps, presenceStrategyProps] = $derived(
|
31
|
-
createSplitProps<CreateMenuProps>([
|
32
|
-
'anchorPoint',
|
33
|
-
'aria-label',
|
34
|
-
'closeOnSelect',
|
35
|
-
'composite',
|
36
|
-
'highlightedValue',
|
37
|
-
'id',
|
38
|
-
'ids',
|
39
|
-
'loopFocus',
|
40
|
-
'navigate',
|
41
|
-
'onEscapeKeyDown',
|
42
|
-
'onFocusOutside',
|
43
|
-
'onHighlightChange',
|
44
|
-
'onInteractOutside',
|
45
|
-
'onOpenChange',
|
46
|
-
'onPointerDownOutside',
|
47
|
-
'onSelect',
|
48
|
-
'open',
|
49
|
-
'openControlled',
|
50
|
-
'positioning',
|
51
|
-
'typeahead',
|
52
|
-
])(props),
|
53
|
-
);
|
54
|
-
|
55
|
-
let parentMenu = getMenuContext();
|
56
|
-
let menu = createMenu(reflect(() => createMenuProps));
|
57
|
-
let presence = createPresence(
|
58
|
-
reflect(() => ({
|
59
|
-
...presenceStrategyProps,
|
60
|
-
present: menu.open,
|
61
|
-
})),
|
62
|
-
);
|
63
|
-
|
64
|
-
setMenuContext(menu);
|
65
|
-
setPresenceContext(presence);
|
66
|
-
setMenuTriggerItemContext(() => parentMenu?.getTriggerItemProps(menu) ?? {});
|
67
|
-
|
68
|
-
if (parentMenu) {
|
69
|
-
parentMenu.setChild(menu.machine);
|
70
|
-
menu.setParent(parentMenu.machine);
|
71
|
-
}
|
72
|
-
</script>
|
73
|
-
|
74
|
-
{@render children?.(menu)}
|
1
|
+
<script lang="ts" module>
|
2
|
+
import type {Snippet} from 'svelte';
|
3
|
+
import type {PresenceStrategyProps} from '../presence/create-presence.svelte.js';
|
4
|
+
import {
|
5
|
+
type CreateMenuProps,
|
6
|
+
type CreateMenuReturn,
|
7
|
+
} from './create-menu.svelte.js';
|
8
|
+
|
9
|
+
export interface MenuRootProps
|
10
|
+
extends CreateMenuProps,
|
11
|
+
PresenceStrategyProps {
|
12
|
+
children?: Snippet<[CreateMenuReturn]>;
|
13
|
+
}
|
14
|
+
</script>
|
15
|
+
|
16
|
+
<script lang="ts">
|
17
|
+
import {reflect} from '@zag-js/svelte';
|
18
|
+
import {createSplitProps} from '../create-split-props.js';
|
19
|
+
import {createPresence} from '../presence/create-presence.svelte.js';
|
20
|
+
import {setPresenceContext} from '../presence/presence-context.svelte.js';
|
21
|
+
import {createMenu} from './create-menu.svelte.js';
|
22
|
+
import {
|
23
|
+
getMenuContext,
|
24
|
+
setMenuContext,
|
25
|
+
setMenuTriggerItemContext,
|
26
|
+
} from './menu-context.svelte.js';
|
27
|
+
|
28
|
+
let {children, ...props}: MenuRootProps = $props();
|
29
|
+
|
30
|
+
let [createMenuProps, presenceStrategyProps] = $derived(
|
31
|
+
createSplitProps<CreateMenuProps>([
|
32
|
+
'anchorPoint',
|
33
|
+
'aria-label',
|
34
|
+
'closeOnSelect',
|
35
|
+
'composite',
|
36
|
+
'highlightedValue',
|
37
|
+
'id',
|
38
|
+
'ids',
|
39
|
+
'loopFocus',
|
40
|
+
'navigate',
|
41
|
+
'onEscapeKeyDown',
|
42
|
+
'onFocusOutside',
|
43
|
+
'onHighlightChange',
|
44
|
+
'onInteractOutside',
|
45
|
+
'onOpenChange',
|
46
|
+
'onPointerDownOutside',
|
47
|
+
'onSelect',
|
48
|
+
'open',
|
49
|
+
'openControlled',
|
50
|
+
'positioning',
|
51
|
+
'typeahead',
|
52
|
+
])(props),
|
53
|
+
);
|
54
|
+
|
55
|
+
let parentMenu = getMenuContext();
|
56
|
+
let menu = createMenu(reflect(() => createMenuProps));
|
57
|
+
let presence = createPresence(
|
58
|
+
reflect(() => ({
|
59
|
+
...presenceStrategyProps,
|
60
|
+
present: menu.open,
|
61
|
+
})),
|
62
|
+
);
|
63
|
+
|
64
|
+
setMenuContext(menu);
|
65
|
+
setPresenceContext(presence);
|
66
|
+
setMenuTriggerItemContext(() => parentMenu?.getTriggerItemProps(menu) ?? {});
|
67
|
+
|
68
|
+
if (parentMenu) {
|
69
|
+
parentMenu.setChild(menu.machine);
|
70
|
+
menu.setParent(parentMenu.machine);
|
71
|
+
}
|
72
|
+
</script>
|
73
|
+
|
74
|
+
{@render children?.(menu)}
|
package/dist/merge-props.js
CHANGED
@@ -1,22 +1,20 @@
|
|
1
|
-
import { mergeProps as zagMergeProps } from '@zag-js/
|
1
|
+
import { mergeProps as zagMergeProps } from '@zag-js/svelte';
|
2
2
|
import { clsx } from 'clsx';
|
3
3
|
export function mergeProps(...args) {
|
4
|
-
|
5
|
-
/* class */
|
6
|
-
for (const
|
7
|
-
const
|
8
|
-
if (
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
if (res.style) {
|
14
|
-
let style = '';
|
15
|
-
for (const key in res.style) {
|
16
|
-
const val = res.style[key];
|
17
|
-
style += `${key}:${val};`;
|
4
|
+
const l = [];
|
5
|
+
/* support svelte class value */
|
6
|
+
for (const o of args) {
|
7
|
+
const c = { ...o };
|
8
|
+
if (c.class && !isString(c.class)) {
|
9
|
+
c.class = clsx(o.class);
|
10
|
+
}
|
11
|
+
if (c.className && !isString(c.class)) {
|
12
|
+
c.className = clsx(o.className);
|
18
13
|
}
|
19
|
-
|
14
|
+
l.push(c);
|
20
15
|
}
|
21
|
-
return
|
16
|
+
return zagMergeProps(...l);
|
17
|
+
}
|
18
|
+
function isString(value) {
|
19
|
+
return typeof value === 'string';
|
22
20
|
}
|