@pzerelles/headlessui-svelte 2.1.2-next.23 → 2.1.2-next.25
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/dist/button/Button.svelte +84 -54
- package/dist/button/Button.svelte.d.ts +7 -5
- package/dist/checkbox/Checkbox.svelte +173 -120
- package/dist/checkbox/Checkbox.svelte.d.ts +7 -5
- package/dist/close-button/CloseButton.svelte +12 -6
- package/dist/close-button/CloseButton.svelte.d.ts +13 -11
- package/dist/combobox/Combobox.svelte +50 -3
- package/dist/data-interactive/DataInteractive.svelte +55 -29
- package/dist/data-interactive/DataInteractive.svelte.d.ts +7 -6
- package/dist/description/Description.svelte +31 -21
- package/dist/description/Description.svelte.d.ts +7 -5
- package/dist/dialog/Dialog.svelte +358 -38
- package/dist/dialog/Dialog.svelte.d.ts +10 -8
- package/dist/dialog/DialogBackdrop.svelte +30 -13
- package/dist/dialog/DialogBackdrop.svelte.d.ts +7 -5
- package/dist/dialog/DialogPanel.svelte +49 -26
- package/dist/dialog/DialogPanel.svelte.d.ts +7 -5
- package/dist/dialog/DialogTitle.svelte +38 -23
- package/dist/dialog/DialogTitle.svelte.d.ts +7 -5
- package/dist/field/Field.svelte +50 -28
- package/dist/field/Field.svelte.d.ts +7 -5
- package/dist/fieldset/Fieldset.svelte +50 -29
- package/dist/fieldset/Fieldset.svelte.d.ts +7 -5
- package/dist/focus-trap/FocusTrap.svelte +419 -283
- package/dist/focus-trap/FocusTrap.svelte.d.ts +7 -5
- package/dist/input/Input.svelte +84 -53
- package/dist/input/Input.svelte.d.ts +7 -5
- package/dist/internal/FloatingProvider.svelte +14 -9
- package/dist/internal/FocusSentinel.svelte +16 -8
- package/dist/internal/ForcePortalRoot.svelte +7 -3
- package/dist/internal/FormFields.svelte +47 -34
- package/dist/internal/FormFieldsProvider.svelte +9 -5
- package/dist/internal/FormResolver.svelte +20 -15
- package/dist/internal/Hidden.svelte +50 -29
- package/dist/internal/Hidden.svelte.d.ts +7 -5
- package/dist/internal/MainTreeProvider.svelte +89 -36
- package/dist/internal/Portal.svelte +18 -14
- package/dist/internal/floating-provider.svelte.js +1 -1
- package/dist/internal/floating.svelte.d.ts +5 -5
- package/dist/internal/floating.svelte.js +17 -17
- package/dist/label/Label.svelte +93 -58
- package/dist/label/Label.svelte.d.ts +7 -5
- package/dist/legend/Legend.svelte +12 -3
- package/dist/listbox/Listbox.svelte +525 -387
- package/dist/listbox/Listbox.svelte.d.ts +7 -6
- package/dist/listbox/ListboxButton.svelte +173 -127
- package/dist/listbox/ListboxButton.svelte.d.ts +7 -6
- package/dist/listbox/ListboxOption.svelte +170 -129
- package/dist/listbox/ListboxOption.svelte.d.ts +7 -6
- package/dist/listbox/ListboxOptions.svelte +400 -304
- package/dist/listbox/ListboxOptions.svelte.d.ts +7 -6
- package/dist/listbox/ListboxSelectedOption.svelte +38 -15
- package/dist/listbox/ListboxSelectedOption.svelte.d.ts +7 -5
- package/dist/listbox/index.d.ts +4 -4
- package/dist/listbox/index.js +1 -1
- package/dist/menu/Menu.svelte +78 -51
- package/dist/menu/Menu.svelte.d.ts +7 -6
- package/dist/menu/MenuButton.svelte +157 -117
- package/dist/menu/MenuButton.svelte.d.ts +7 -6
- package/dist/menu/MenuHeading.svelte +32 -14
- package/dist/menu/MenuHeading.svelte.d.ts +7 -6
- package/dist/menu/MenuItem.svelte +142 -107
- package/dist/menu/MenuItem.svelte.d.ts +8 -10
- package/dist/menu/MenuItems.svelte +301 -229
- package/dist/menu/MenuItems.svelte.d.ts +7 -6
- package/dist/menu/MenuSection.svelte +24 -9
- package/dist/menu/MenuSection.svelte.d.ts +7 -6
- package/dist/menu/MenuSeparator.svelte +17 -4
- package/dist/menu/MenuSeparator.svelte.d.ts +7 -7
- package/dist/menu/index.d.ts +7 -7
- package/dist/popover/Popover.svelte +216 -150
- package/dist/popover/Popover.svelte.d.ts +7 -5
- package/dist/popover/PopoverBackdrop.svelte +67 -41
- package/dist/popover/PopoverBackdrop.svelte.d.ts +7 -5
- package/dist/popover/PopoverButton.svelte +292 -212
- package/dist/popover/PopoverButton.svelte.d.ts +7 -5
- package/dist/popover/PopoverGroup.svelte +62 -35
- package/dist/popover/PopoverGroup.svelte.d.ts +7 -5
- package/dist/popover/PopoverPanel.svelte +311 -229
- package/dist/popover/PopoverPanel.svelte.d.ts +7 -5
- package/dist/portal/InternalPortal.svelte +141 -85
- package/dist/portal/InternalPortal.svelte.d.ts +7 -5
- package/dist/portal/Portal.svelte +5 -2
- package/dist/portal/PortalGroup.svelte +30 -9
- package/dist/portal/PortalGroup.svelte.d.ts +7 -5
- package/dist/select/Select.svelte +98 -68
- package/dist/select/Select.svelte.d.ts +7 -5
- package/dist/switch/Switch.svelte +179 -132
- package/dist/switch/Switch.svelte.d.ts +7 -5
- package/dist/switch/SwitchGroup.svelte +44 -31
- package/dist/switch/SwitchGroup.svelte.d.ts +7 -5
- package/dist/tabs/Tab.svelte +194 -143
- package/dist/tabs/Tab.svelte.d.ts +7 -5
- package/dist/tabs/TabGroup.svelte +81 -214
- package/dist/tabs/TabGroup.svelte.d.ts +7 -25
- package/dist/tabs/TabList.svelte +31 -11
- package/dist/tabs/TabList.svelte.d.ts +7 -5
- package/dist/tabs/TabPanel.svelte +67 -43
- package/dist/tabs/TabPanel.svelte.d.ts +7 -5
- package/dist/tabs/TabPanels.svelte +18 -7
- package/dist/tabs/TabPanels.svelte.d.ts +7 -5
- package/dist/tabs/context.svelte.d.ts +31 -0
- package/dist/tabs/context.svelte.js +134 -0
- package/dist/textarea/Textarea.svelte +84 -53
- package/dist/textarea/Textarea.svelte.d.ts +7 -5
- package/dist/transition/InternalTransitionChild.svelte +259 -170
- package/dist/transition/InternalTransitionChild.svelte.d.ts +7 -5
- package/dist/transition/Transition.svelte +96 -66
- package/dist/transition/Transition.svelte.d.ts +7 -5
- package/dist/transition/TransitionChild.svelte +31 -11
- package/dist/transition/TransitionChild.svelte.d.ts +7 -5
- package/dist/utils/ElementOrComponent.svelte +43 -23
- package/dist/utils/ElementOrComponent.svelte.d.ts +10 -5
- package/dist/utils/Generic.svelte +36 -22
- package/dist/utils/Generic.svelte.d.ts +12 -10
- package/dist/utils/StableCollection.svelte +54 -36
- package/dist/utils/floating-ui/svelte/components/FloatingNode.svelte +27 -12
- package/dist/utils/floating-ui/svelte/components/FloatingTree.svelte +88 -44
- package/dist/utils/floating-ui/svelte/hooks/useFloating.svelte.js +7 -7
- package/dist/utils/floating-ui/svelte/hooks/useFloatingRootContext.svelte.js +1 -1
- package/dist/utils/floating-ui/svelte/types.d.ts +4 -4
- package/dist/utils/floating-ui/svelte-dom/types.d.ts +2 -2
- package/dist/utils/floating-ui/svelte-dom/useFloating.svelte.js +6 -6
- package/dist/utils/types.d.ts +9 -12
- package/package.json +6 -6
- package/dist/dialog/InternalDialog.svelte +0 -233
- package/dist/dialog/InternalDialog.svelte.d.ts +0 -42
|
@@ -1,16 +1,36 @@
|
|
|
1
|
-
<script lang="ts" module>
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import type { ElementType, Props } from "../utils/types.js"
|
|
3
|
+
import { RenderFeatures, type PropsForFeatures } from "../utils/render.js"
|
|
4
|
+
import type { TransitionEvents, TransitionClasses } from "./context.svelte.js"
|
|
5
|
+
|
|
6
|
+
type TransitionChildPropsWeControl = never
|
|
7
|
+
|
|
8
|
+
export type TransitionChildProps<TTag extends ElementType> = Props<
|
|
9
|
+
TTag,
|
|
10
|
+
TransitionChildRenderPropArg,
|
|
11
|
+
TransitionChildPropsWeControl,
|
|
12
|
+
PropsForFeatures<typeof TransitionChildRenderFeatures> &
|
|
13
|
+
TransitionClasses &
|
|
14
|
+
TransitionEvents & { transition?: boolean; appear?: boolean }
|
|
15
|
+
>
|
|
16
|
+
|
|
17
|
+
export const DEFAULT_TRANSITION_CHILD_TAG = "svelte:fragment"
|
|
18
|
+
export type TransitionChildRenderPropArg = HTMLElement
|
|
19
|
+
export const TransitionChildRenderFeatures = RenderFeatures.RenderStrategy
|
|
4
20
|
</script>
|
|
5
21
|
|
|
6
|
-
<script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_TRANSITION_CHILD_TAG">
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
22
|
+
<script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_TRANSITION_CHILD_TAG">
|
|
23
|
+
import { useOpenClosed } from "../internal/open-closed.js"
|
|
24
|
+
import { getContext } from "svelte"
|
|
25
|
+
import InternalTransitionChild from "./InternalTransitionChild.svelte"
|
|
26
|
+
import Transition from "./Transition.svelte"
|
|
27
|
+
|
|
28
|
+
const hasTransitionContext = !!getContext("TransitionContext")
|
|
29
|
+
const hasOpenClosedContext = useOpenClosed() !== null
|
|
30
|
+
|
|
31
|
+
let { ref = $bindable(), as, ...props }: { as?: TTag } & TransitionChildProps<TTag> = $props()
|
|
32
|
+
|
|
33
|
+
const TransitionRootOrChild = !hasTransitionContext && hasOpenClosedContext ? Transition : InternalTransitionChild
|
|
14
34
|
</script>
|
|
15
35
|
|
|
16
36
|
<TransitionRootOrChild bind:ref {...props} />
|
|
@@ -12,12 +12,14 @@ export declare const TransitionChildRenderFeatures = RenderFeatures.RenderStrate
|
|
|
12
12
|
declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_TRANSITION_CHILD_TAG> {
|
|
13
13
|
props(): {
|
|
14
14
|
as?: TTag | undefined;
|
|
15
|
-
} & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("as" | "children" | "
|
|
16
|
-
children?: import("svelte").Snippet<[
|
|
15
|
+
} & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("slot" | "as" | "children" | "class" | "ref") | "unmount" | "transition" | keyof TransitionClasses | keyof TransitionEvents | "appear"> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
|
|
16
|
+
children?: import("svelte").Snippet<[{
|
|
17
|
+
slot: HTMLElement;
|
|
18
|
+
props: Record<string, any>;
|
|
19
|
+
}]> | undefined;
|
|
20
|
+
class?: string | ((bag: HTMLElement) => string) | null | undefined;
|
|
17
21
|
ref?: HTMLElement;
|
|
18
|
-
} &
|
|
19
|
-
class?: import("../utils/types.js").PropsOf<TTag>["class"] | ((bag: HTMLElement) => string) | undefined;
|
|
20
|
-
} : {}) & {
|
|
22
|
+
} & {
|
|
21
23
|
unmount?: boolean | undefined;
|
|
22
24
|
} & TransitionClasses & TransitionEvents & {
|
|
23
25
|
transition?: boolean;
|
|
@@ -1,26 +1,46 @@
|
|
|
1
|
-
<script lang="ts" generics="TFeature extends RenderFeatures, TTag extends ElementType, TSlot, TValue">
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
1
|
+
<script lang="ts" generics="TFeature extends RenderFeatures, TTag extends ElementType, TSlot, TValue">
|
|
2
|
+
import type { ElementType, Props } from "./types.js"
|
|
3
|
+
import { mergePropsAdvanced, RenderFeatures, type PropsForFeatures } from "./render.js"
|
|
4
|
+
import Generic from "./Generic.svelte"
|
|
5
|
+
|
|
6
|
+
let {
|
|
7
|
+
ourProps,
|
|
8
|
+
theirProps,
|
|
9
|
+
slots,
|
|
10
|
+
slot = slots,
|
|
11
|
+
defaultTag,
|
|
12
|
+
features,
|
|
13
|
+
visible = true,
|
|
14
|
+
name,
|
|
15
|
+
ref = $bindable(),
|
|
16
|
+
value = $bindable(),
|
|
17
|
+
checked = $bindable(),
|
|
18
|
+
}: {
|
|
19
|
+
ourProps?: Expand<Props<any, TSlot> & PropsForFeatures<TFeature>>
|
|
20
|
+
theirProps: Expand<{ as?: TTag } & Props<any, TSlot, any>>
|
|
21
|
+
slot?: TSlot
|
|
22
|
+
slots?: TSlot
|
|
23
|
+
defaultTag: ElementType
|
|
24
|
+
features?: TFeature
|
|
25
|
+
visible?: boolean
|
|
26
|
+
name: string
|
|
27
|
+
ref?: HTMLElement
|
|
28
|
+
value?: TValue
|
|
29
|
+
checked?: boolean
|
|
30
|
+
} = $props()
|
|
31
|
+
|
|
32
|
+
const featureFlags = $derived(features ?? RenderFeatures.None)
|
|
33
|
+
const { static: isStatic = false, unmount = true, ...rest } = $derived(mergePropsAdvanced(theirProps, ourProps ?? {}))
|
|
34
|
+
const render = $derived(
|
|
35
|
+
visible ||
|
|
36
|
+
(featureFlags & RenderFeatures.Static && isStatic) ||
|
|
37
|
+
(featureFlags & RenderFeatures.RenderStrategy && !unmount)
|
|
38
|
+
)
|
|
39
|
+
const hiddenProps = $derived(
|
|
40
|
+
!visible && !(featureFlags & RenderFeatures.Static) && featureFlags & RenderFeatures.RenderStrategy && !unmount
|
|
41
|
+
? { hidden: true, style: "display: none;" }
|
|
42
|
+
: {}
|
|
43
|
+
)
|
|
24
44
|
</script>
|
|
25
45
|
|
|
26
46
|
{#if render}<Generic {...rest} {...hiddenProps} {slot} tag={defaultTag} bind:ref bind:value bind:checked />{/if}
|
|
@@ -6,10 +6,12 @@ declare class __sveltets_Render<TFeature extends RenderFeatures, TTag extends El
|
|
|
6
6
|
[x: string]: any;
|
|
7
7
|
[x: number]: any;
|
|
8
8
|
} & {
|
|
9
|
-
children?: import("svelte").Snippet<[
|
|
9
|
+
children?: import("svelte").Snippet<[{
|
|
10
|
+
slot: TSlot;
|
|
11
|
+
props: Record<string, any>;
|
|
12
|
+
}]> | undefined;
|
|
13
|
+
class?: string | ((bag: TSlot) => string) | null | undefined;
|
|
10
14
|
ref?: HTMLElement;
|
|
11
|
-
} & {
|
|
12
|
-
class?: any;
|
|
13
15
|
} & Expand<((TFeature extends RenderFeatures.Static ? {
|
|
14
16
|
static?: boolean;
|
|
15
17
|
} : {}) extends infer T ? T extends (TFeature extends RenderFeatures.Static ? {
|
|
@@ -21,9 +23,12 @@ declare class __sveltets_Render<TFeature extends RenderFeatures, TTag extends El
|
|
|
21
23
|
} : {}) ? T_1 extends any ? (x: T_1) => any : never : never : never) extends (x: infer R) => any ? R : never>> | undefined;
|
|
22
24
|
theirProps: {
|
|
23
25
|
as?: TTag | undefined;
|
|
24
|
-
children?: import("svelte").Snippet<[
|
|
26
|
+
children?: import("svelte").Snippet<[{
|
|
27
|
+
slot: TSlot;
|
|
28
|
+
props: Record<string, any>;
|
|
29
|
+
}]> | undefined;
|
|
30
|
+
class?: string | ((bag: TSlot) => string) | null | undefined;
|
|
25
31
|
ref?: HTMLElement | undefined;
|
|
26
|
-
class?: any;
|
|
27
32
|
};
|
|
28
33
|
slot?: TSlot | undefined;
|
|
29
34
|
slots?: TSlot | undefined;
|
|
@@ -1,35 +1,49 @@
|
|
|
1
|
-
<script lang="ts" generics="TTag extends
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
<script lang="ts" generics="TTag extends ElementType, TSlot, TValue">
|
|
2
|
+
import { stateFromSlot } from "./state.js"
|
|
3
|
+
import type { ElementType, Props } from "./types.js"
|
|
4
|
+
|
|
5
|
+
let {
|
|
6
|
+
slot = {} as TSlot,
|
|
7
|
+
tag,
|
|
8
|
+
ref = $bindable(),
|
|
9
|
+
value = $bindable(),
|
|
10
|
+
checked = $bindable(),
|
|
11
|
+
children,
|
|
12
|
+
as = tag as TTag,
|
|
13
|
+
unmount,
|
|
14
|
+
static: isStatic,
|
|
15
|
+
...props
|
|
16
|
+
}: {
|
|
17
|
+
as?: TTag
|
|
18
|
+
slot: TSlot
|
|
19
|
+
tag: ElementType
|
|
20
|
+
ref?: HTMLElement
|
|
21
|
+
value?: TValue
|
|
22
|
+
checked?: boolean
|
|
23
|
+
} & Props<TTag, TSlot> = $props()
|
|
24
|
+
|
|
25
|
+
const resolvedClass = $derived(
|
|
26
|
+
typeof props.class === "function" ? props.class(slot) : (props.class as string | undefined)
|
|
27
|
+
)
|
|
17
28
|
</script>
|
|
18
29
|
|
|
19
30
|
{#if as === "svelte:fragment"}
|
|
20
|
-
{#if children}{@render children(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
31
|
+
{#if children}{@render children({
|
|
32
|
+
slot,
|
|
33
|
+
props: {
|
|
34
|
+
...props,
|
|
35
|
+
...(resolvedClass ? { class: resolvedClass } : {}),
|
|
36
|
+
...stateFromSlot(slot),
|
|
37
|
+
},
|
|
24
38
|
})}{/if}
|
|
25
39
|
{:else if children}
|
|
26
40
|
{#if as === "select"}
|
|
27
41
|
<select bind:this={ref} {...props} class={resolvedClass} {...stateFromSlot(slot)} bind:value>
|
|
28
|
-
{@render children(slot, {})}
|
|
42
|
+
{@render children({ slot, props: {} })}
|
|
29
43
|
</select>
|
|
30
44
|
{:else}
|
|
31
45
|
<svelte:element this={as} bind:this={ref} {...props} class={resolvedClass} {...stateFromSlot(slot)}>
|
|
32
|
-
{@render children(slot, {})}
|
|
46
|
+
{@render children({ slot, props: {} })}
|
|
33
47
|
</svelte:element>
|
|
34
48
|
{/if}
|
|
35
49
|
{:else if as === "input" && props.type === "checkbox"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ElementType
|
|
2
|
-
declare class __sveltets_Render<TTag extends
|
|
1
|
+
import type { ElementType } from "./types.js";
|
|
2
|
+
declare class __sveltets_Render<TTag extends ElementType, TSlot, TValue> {
|
|
3
3
|
props(): {
|
|
4
4
|
as?: TTag | undefined;
|
|
5
5
|
slot: TSlot;
|
|
@@ -7,12 +7,14 @@ declare class __sveltets_Render<TTag extends keyof SvelteHTMLProps, TSlot, TValu
|
|
|
7
7
|
ref?: HTMLElement;
|
|
8
8
|
value?: TValue | undefined;
|
|
9
9
|
checked?: boolean;
|
|
10
|
-
} & (Exclude<keyof import("./types.js").PropsOf<TTag>, "as" | "children" | "
|
|
11
|
-
children?: import("svelte").Snippet<[
|
|
10
|
+
} & (Exclude<keyof import("./types.js").PropsOf<TTag>, "slot" | "as" | "children" | "class" | "ref"> extends infer T extends keyof import("./types.js").PropsOf<TTag> ? { [P in T]: import("./types.js").PropsOf<TTag>[P]; } : never) & {
|
|
11
|
+
children?: import("svelte").Snippet<[{
|
|
12
|
+
slot: TSlot;
|
|
13
|
+
props: Record<string, any>;
|
|
14
|
+
}]> | undefined;
|
|
15
|
+
class?: string | ((bag: TSlot) => string) | null | undefined;
|
|
12
16
|
ref?: HTMLElement;
|
|
13
|
-
}
|
|
14
|
-
class?: import("./types.js").PropsOf<TTag>["class"] | ((bag: TSlot) => string) | undefined;
|
|
15
|
-
} : {});
|
|
17
|
+
};
|
|
16
18
|
events(): {} & {
|
|
17
19
|
[evt: string]: CustomEvent<any>;
|
|
18
20
|
};
|
|
@@ -21,14 +23,14 @@ declare class __sveltets_Render<TTag extends keyof SvelteHTMLProps, TSlot, TValu
|
|
|
21
23
|
exports(): {};
|
|
22
24
|
}
|
|
23
25
|
interface $$IsomorphicComponent {
|
|
24
|
-
new <TTag extends
|
|
26
|
+
new <TTag extends ElementType, TSlot, TValue>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TTag, TSlot, TValue>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TTag, TSlot, TValue>['props']>, ReturnType<__sveltets_Render<TTag, TSlot, TValue>['events']>, ReturnType<__sveltets_Render<TTag, TSlot, TValue>['slots']>> & {
|
|
25
27
|
$$bindings?: ReturnType<__sveltets_Render<TTag, TSlot, TValue>['bindings']>;
|
|
26
28
|
} & ReturnType<__sveltets_Render<TTag, TSlot, TValue>['exports']>;
|
|
27
|
-
<TTag extends
|
|
29
|
+
<TTag extends ElementType, TSlot, TValue>(internal: unknown, props: ReturnType<__sveltets_Render<TTag, TSlot, TValue>['props']> & {
|
|
28
30
|
$$events?: ReturnType<__sveltets_Render<TTag, TSlot, TValue>['events']>;
|
|
29
31
|
}): ReturnType<__sveltets_Render<TTag, TSlot, TValue>['exports']>;
|
|
30
32
|
z_$$bindings?: ReturnType<__sveltets_Render<any, any, any>['bindings']>;
|
|
31
33
|
}
|
|
32
34
|
declare const Generic: $$IsomorphicComponent;
|
|
33
|
-
type Generic<TTag extends
|
|
35
|
+
type Generic<TTag extends ElementType, TSlot, TValue> = InstanceType<typeof Generic<TTag, TSlot, TValue>>;
|
|
34
36
|
export default Generic;
|
|
@@ -1,43 +1,61 @@
|
|
|
1
|
-
<script lang="ts" module>
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import { useId } from "../hooks/use-id.js"
|
|
3
|
+
import { getContext, setContext, type Snippet } from "svelte"
|
|
4
|
+
|
|
5
|
+
type CollectionKey = string | symbol
|
|
6
|
+
type CollectionItem = [number, () => void]
|
|
7
|
+
type Collection = ReturnType<typeof createCollection>
|
|
8
|
+
|
|
9
|
+
function createCollection() {
|
|
10
|
+
return {
|
|
11
|
+
/** @type {Map<string, Map<string, number>>} */
|
|
12
|
+
groups: new Map(),
|
|
13
|
+
|
|
14
|
+
get(group: string, key: CollectionKey): CollectionItem {
|
|
15
|
+
let list = this.groups.get(group)
|
|
16
|
+
if (!list) {
|
|
17
|
+
list = new Map()
|
|
18
|
+
this.groups.set(group, list)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
let renders = list.get(key) ?? 0
|
|
22
|
+
// FIXME: This is a side-effect during render. `release` is only called in
|
|
23
|
+
// an effect cleanup so we may never release if we had to render multiple
|
|
24
|
+
// times before commit e.g. when a sibling suspends.
|
|
25
|
+
list.set(key, renders + 1)
|
|
26
|
+
|
|
27
|
+
let index = Array.from(list.keys()).indexOf(key)
|
|
28
|
+
function release() {
|
|
29
|
+
let renders = list.get(key)
|
|
30
|
+
if (renders > 1) {
|
|
31
|
+
list.set(key, renders - 1)
|
|
32
|
+
} else {
|
|
33
|
+
list.delete(key)
|
|
34
|
+
}
|
|
22
35
|
}
|
|
23
|
-
|
|
24
|
-
|
|
36
|
+
|
|
37
|
+
return [index, release]
|
|
38
|
+
},
|
|
25
39
|
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export function useStableCollectionIndex(group) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function useStableCollectionIndex(group: string) {
|
|
43
|
+
let collection = getContext<Collection>("StableCollection")
|
|
44
|
+
if (!collection) throw new Error("You must wrap your component in a <StableCollection>")
|
|
45
|
+
|
|
46
|
+
let key = useId()
|
|
47
|
+
let [idx, cleanupIdx] = collection.get(group, key)
|
|
48
|
+
|
|
49
|
+
$effect(() => cleanupIdx)
|
|
50
|
+
return idx
|
|
51
|
+
}
|
|
36
52
|
</script>
|
|
37
53
|
|
|
38
|
-
<script lang="ts">
|
|
39
|
-
|
|
40
|
-
|
|
54
|
+
<script lang="ts">
|
|
55
|
+
const collection = createCollection()
|
|
56
|
+
setContext<Collection>("StableCollection", collection)
|
|
57
|
+
|
|
58
|
+
let { children }: { children: Snippet } = $props()
|
|
41
59
|
</script>
|
|
42
60
|
|
|
43
61
|
{#if children}{@render children()}{/if}
|
|
@@ -1,17 +1,32 @@
|
|
|
1
|
-
<script lang="ts" module
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import type { Snippet } from "svelte"
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const parentId = useFloatingParentNodeId();
|
|
7
|
-
setContext("FloatingNodeContext", {
|
|
8
|
-
get id() {
|
|
9
|
-
return id;
|
|
10
|
-
},
|
|
11
|
-
get parentId() {
|
|
12
|
-
return parentId.value;
|
|
4
|
+
export interface FloatingNodeProps {
|
|
5
|
+
children?: Snippet
|
|
6
|
+
id: string
|
|
13
7
|
}
|
|
14
|
-
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<script lang="ts">
|
|
11
|
+
/**
|
|
12
|
+
* Provides parent node context for nested floating elements.
|
|
13
|
+
* @see https://floating-ui.com/docs/FloatingTree
|
|
14
|
+
*/
|
|
15
|
+
import { setContext } from "svelte"
|
|
16
|
+
import type { FloatingNodeType } from "../types.js"
|
|
17
|
+
import { useFloatingParentNodeId } from "./FloatingTree.svelte"
|
|
18
|
+
|
|
19
|
+
const { children, id }: FloatingNodeProps = $props()
|
|
20
|
+
|
|
21
|
+
const parentId = useFloatingParentNodeId()
|
|
22
|
+
setContext<FloatingNodeType>("FloatingNodeContext", {
|
|
23
|
+
get id() {
|
|
24
|
+
return id
|
|
25
|
+
},
|
|
26
|
+
get parentId() {
|
|
27
|
+
return parentId.value
|
|
28
|
+
},
|
|
29
|
+
})
|
|
15
30
|
</script>
|
|
16
31
|
|
|
17
32
|
{#if children}{@render children()}{/if}
|
|
@@ -1,50 +1,94 @@
|
|
|
1
|
-
<script lang="ts" module>
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import { getContext, type Snippet } from "svelte"
|
|
3
|
+
import { useId } from "../hooks/useId.svelte.js"
|
|
4
|
+
import type { FloatingNodeType, FloatingTreeType, ReferenceType } from "../types.js"
|
|
5
|
+
import { createPubSub } from "../utils/createPubSub.js"
|
|
6
|
+
import type { MutableRefObject } from "../../../ref.svelte.js"
|
|
7
|
+
|
|
8
|
+
//const FloatingNodeContext = React.createContext<FloatingNodeType | null>(null)
|
|
9
|
+
//const FloatingTreeContext = React.createContext<FloatingTreeType | null>(null)
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Returns the parent node id for nested floating elements, if available.
|
|
13
|
+
* Returns `null` for top-level floating elements.
|
|
14
|
+
*/
|
|
15
|
+
export const useFloatingParentNodeId = (): { readonly value: string | null } => {
|
|
16
|
+
const context = getContext<FloatingNodeType>("FloatingNodeContext")
|
|
17
|
+
return {
|
|
18
|
+
get value() {
|
|
19
|
+
return context?.id ?? null
|
|
20
|
+
},
|
|
9
21
|
}
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Returns the nearest floating tree context, if available.
|
|
26
|
+
*/
|
|
27
|
+
export const useFloatingTree = <RT extends ReferenceType = ReferenceType>(): FloatingTreeType<RT> | null =>
|
|
28
|
+
getContext<FloatingTreeType<RT>>("FloatingTreeContext") ?? null
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Registers a node into the `FloatingTree`, returning its id.
|
|
32
|
+
* @see https://floating-ui.com/docs/FloatingTree
|
|
33
|
+
*/
|
|
34
|
+
export function useFloatingNodeId(options: { customParentId?: string }): string {
|
|
35
|
+
const { customParentId } = $derived(options)
|
|
36
|
+
const id = useId()
|
|
37
|
+
const tree = useFloatingTree()
|
|
38
|
+
const reactParentId = useFloatingParentNodeId()
|
|
39
|
+
const parentId = $derived(customParentId || reactParentId.value)
|
|
40
|
+
|
|
41
|
+
$effect(() => {
|
|
42
|
+
const node = { id, parentId }
|
|
43
|
+
tree?.addNode(node)
|
|
44
|
+
return () => {
|
|
45
|
+
tree?.removeNode(node)
|
|
46
|
+
}
|
|
47
|
+
}) //, [tree, id, parentId])
|
|
48
|
+
|
|
49
|
+
return id
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface FloatingTreeProps {
|
|
53
|
+
children?: Snippet
|
|
54
|
+
}
|
|
28
55
|
</script>
|
|
29
56
|
|
|
30
|
-
<script lang="ts">
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
57
|
+
<script lang="ts">
|
|
58
|
+
/**
|
|
59
|
+
* Provides context for nested floating elements when they are not children of
|
|
60
|
+
* each other on the DOM.
|
|
61
|
+
* This is not necessary in all cases, except when there must be explicit communication between parent and child floating elements. It is necessary for:
|
|
62
|
+
* - The `bubbles` option in the `useDismiss()` Hook
|
|
63
|
+
* - Nested virtual list navigation
|
|
64
|
+
* - Nested floating elements that each open on hover
|
|
65
|
+
* - Custom communication between parent and child floating elements
|
|
66
|
+
* @see https://floating-ui.com/docs/FloatingTree
|
|
67
|
+
*/
|
|
68
|
+
import { setContext } from "svelte"
|
|
69
|
+
|
|
70
|
+
const { children }: FloatingTreeProps = $props()
|
|
71
|
+
|
|
72
|
+
const nodesRef = $state<MutableRefObject<Array<FloatingNodeType>>>({ current: [] })
|
|
73
|
+
|
|
74
|
+
const addNode = (node: FloatingNodeType) => {
|
|
75
|
+
nodesRef.current = [...nodesRef.current, node]
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const removeNode = (node: FloatingNodeType) => {
|
|
79
|
+
nodesRef.current = nodesRef.current.filter((n) => n !== node)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const events = createPubSub()
|
|
83
|
+
|
|
84
|
+
setContext<FloatingTreeType<ReferenceType>>("FloatingTreeContext", {
|
|
85
|
+
get nodesRef() {
|
|
86
|
+
return nodesRef
|
|
87
|
+
},
|
|
88
|
+
addNode,
|
|
89
|
+
removeNode,
|
|
90
|
+
events,
|
|
91
|
+
})
|
|
48
92
|
</script>
|
|
49
93
|
|
|
50
94
|
{#if children}{@render children()}{/if}
|
|
@@ -28,7 +28,7 @@ export function useFloating(options = {}) {
|
|
|
28
28
|
let _domReference = $state(null);
|
|
29
29
|
const setDomReference = (value) => (_domReference = value);
|
|
30
30
|
let positionReference = $state(null);
|
|
31
|
-
const _setPositionReference = (value) => (positionReference = value);
|
|
31
|
+
const _setPositionReference = (value) => (positionReference = value ?? null);
|
|
32
32
|
const optionDomReference = $derived(computedElements?.reference);
|
|
33
33
|
const domReference = $derived((optionDomReference || _domReference));
|
|
34
34
|
const domReferenceRef = $state({ current: null });
|
|
@@ -73,17 +73,17 @@ export function useFloating(options = {}) {
|
|
|
73
73
|
getBoundingClientRect: () => node.getBoundingClientRect(),
|
|
74
74
|
contextElement: node,
|
|
75
75
|
}
|
|
76
|
-
: node;
|
|
76
|
+
: (node ?? null);
|
|
77
77
|
// Store the positionReference in state if the DOM reference is specified externally via the
|
|
78
78
|
// `elements.reference` option. This ensures that it won't be overridden on future renders.
|
|
79
79
|
_setPositionReference(computedPositionReference);
|
|
80
80
|
position.refs.setReference(computedPositionReference);
|
|
81
81
|
};
|
|
82
82
|
const setReference = (node) => {
|
|
83
|
-
if (isElement(node) || node
|
|
83
|
+
if (isElement(node) || !node) {
|
|
84
84
|
;
|
|
85
|
-
domReferenceRef.current = node;
|
|
86
|
-
setDomReference(node);
|
|
85
|
+
domReferenceRef.current = node ?? null;
|
|
86
|
+
setDomReference((node ?? null));
|
|
87
87
|
}
|
|
88
88
|
// Backwards-compatibility for passing a virtual element to `reference`
|
|
89
89
|
// after it has set the DOM reference.
|
|
@@ -92,8 +92,8 @@ export function useFloating(options = {}) {
|
|
|
92
92
|
// Don't allow setting virtual elements using the old technique back to
|
|
93
93
|
// `null` to support `positionReference` + an unstable `reference`
|
|
94
94
|
// callback ref.
|
|
95
|
-
(node
|
|
96
|
-
position.refs.setReference(node);
|
|
95
|
+
(node && !isElement(node))) {
|
|
96
|
+
position.refs.setReference(node ?? null);
|
|
97
97
|
}
|
|
98
98
|
};
|
|
99
99
|
const refs = $derived({
|