@pzerelles/headlessui-svelte 2.1.2-next.30 → 2.1.2-next.32
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 +2 -3
- package/dist/checkbox/Checkbox.svelte +173 -120
- package/dist/checkbox/Checkbox.svelte.d.ts +2 -3
- package/dist/close-button/CloseButton.svelte +12 -6
- package/dist/close-button/CloseButton.svelte.d.ts +7 -8
- package/dist/combobox/Combobox.svelte +50 -3
- package/dist/data-interactive/DataInteractive.svelte +55 -29
- package/dist/data-interactive/DataInteractive.svelte.d.ts +2 -3
- package/dist/description/Description.svelte +31 -21
- package/dist/description/Description.svelte.d.ts +1 -2
- package/dist/dialog/Dialog.svelte +320 -228
- package/dist/dialog/Dialog.svelte.d.ts +2 -3
- package/dist/dialog/DialogBackdrop.svelte +30 -13
- package/dist/dialog/DialogBackdrop.svelte.d.ts +2 -3
- package/dist/dialog/DialogPanel.svelte +49 -26
- package/dist/dialog/DialogPanel.svelte.d.ts +2 -3
- package/dist/dialog/DialogTitle.svelte +38 -23
- package/dist/dialog/DialogTitle.svelte.d.ts +2 -3
- package/dist/field/Field.svelte +47 -25
- package/dist/field/Field.svelte.d.ts +1 -2
- package/dist/fieldset/Fieldset.svelte +50 -29
- package/dist/fieldset/Fieldset.svelte.d.ts +1 -2
- package/dist/focus-trap/FocusTrap.svelte +419 -283
- package/dist/focus-trap/FocusTrap.svelte.d.ts +1 -2
- package/dist/input/Input.svelte +84 -53
- package/dist/input/Input.svelte.d.ts +2 -3
- 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 +1 -2
- package/dist/internal/MainTreeProvider.svelte +89 -36
- package/dist/internal/Portal.svelte +18 -14
- package/dist/internal/floating.svelte.d.ts +2 -3
- package/dist/internal/floating.svelte.js +0 -1
- package/dist/label/Label.svelte +93 -58
- package/dist/label/Label.svelte.d.ts +1 -2
- package/dist/legend/Legend.svelte +12 -3
- package/dist/listbox/Listbox.svelte +525 -387
- package/dist/listbox/Listbox.svelte.d.ts +2 -3
- package/dist/listbox/ListboxButton.svelte +173 -127
- package/dist/listbox/ListboxButton.svelte.d.ts +2 -3
- package/dist/listbox/ListboxOption.svelte +170 -129
- package/dist/listbox/ListboxOption.svelte.d.ts +2 -3
- package/dist/listbox/ListboxOptions.svelte +400 -304
- package/dist/listbox/ListboxOptions.svelte.d.ts +2 -3
- package/dist/listbox/ListboxSelectedOption.svelte +38 -15
- package/dist/listbox/ListboxSelectedOption.svelte.d.ts +1 -2
- package/dist/menu/Menu.svelte +77 -51
- package/dist/menu/Menu.svelte.d.ts +2 -4
- package/dist/menu/MenuButton.svelte +157 -117
- package/dist/menu/MenuButton.svelte.d.ts +2 -3
- package/dist/menu/MenuHeading.svelte +32 -14
- package/dist/menu/MenuHeading.svelte.d.ts +1 -2
- package/dist/menu/MenuItem.svelte +142 -107
- package/dist/menu/MenuItem.svelte.d.ts +2 -3
- package/dist/menu/MenuItems.svelte +301 -229
- package/dist/menu/MenuItems.svelte.d.ts +2 -3
- package/dist/menu/MenuSection.svelte +24 -9
- package/dist/menu/MenuSection.svelte.d.ts +1 -2
- package/dist/menu/MenuSeparator.svelte +17 -4
- package/dist/menu/MenuSeparator.svelte.d.ts +1 -2
- package/dist/popover/Popover.svelte +216 -150
- package/dist/popover/Popover.svelte.d.ts +2 -3
- package/dist/popover/PopoverBackdrop.svelte +67 -41
- package/dist/popover/PopoverBackdrop.svelte.d.ts +2 -3
- package/dist/popover/PopoverButton.svelte +292 -212
- package/dist/popover/PopoverButton.svelte.d.ts +2 -3
- package/dist/popover/PopoverGroup.svelte +62 -35
- package/dist/popover/PopoverGroup.svelte.d.ts +1 -2
- package/dist/popover/PopoverPanel.svelte +311 -229
- package/dist/popover/PopoverPanel.svelte.d.ts +2 -3
- package/dist/portal/InternalPortal.svelte +141 -85
- package/dist/portal/InternalPortal.svelte.d.ts +1 -2
- package/dist/portal/Portal.svelte +5 -2
- package/dist/portal/PortalGroup.svelte +30 -9
- package/dist/portal/PortalGroup.svelte.d.ts +1 -2
- package/dist/select/Select.svelte +98 -68
- package/dist/select/Select.svelte.d.ts +2 -3
- package/dist/switch/Switch.svelte +179 -132
- package/dist/switch/Switch.svelte.d.ts +2 -3
- package/dist/switch/SwitchGroup.svelte +44 -31
- package/dist/switch/SwitchGroup.svelte.d.ts +1 -2
- package/dist/tabs/Tab.svelte +194 -142
- package/dist/tabs/Tab.svelte.d.ts +2 -3
- package/dist/tabs/TabGroup.svelte +86 -56
- package/dist/tabs/TabGroup.svelte.d.ts +2 -3
- package/dist/tabs/TabList.svelte +31 -11
- package/dist/tabs/TabList.svelte.d.ts +2 -3
- package/dist/tabs/TabPanel.svelte +67 -42
- package/dist/tabs/TabPanel.svelte.d.ts +2 -3
- package/dist/tabs/TabPanels.svelte +18 -7
- package/dist/tabs/TabPanels.svelte.d.ts +2 -3
- package/dist/textarea/Textarea.svelte +84 -53
- package/dist/textarea/Textarea.svelte.d.ts +2 -3
- package/dist/transition/InternalTransitionChild.svelte +259 -170
- package/dist/transition/InternalTransitionChild.svelte.d.ts +2 -3
- package/dist/transition/Transition.svelte +96 -66
- package/dist/transition/Transition.svelte.d.ts +2 -3
- package/dist/transition/TransitionChild.svelte +31 -11
- package/dist/transition/TransitionChild.svelte.d.ts +2 -3
- package/dist/utils/DisabledProvider.svelte +7 -3
- package/dist/utils/ElementOrComponent.svelte +46 -23
- package/dist/utils/ElementOrComponent.svelte.d.ts +8 -10
- package/dist/utils/Generic.svelte +30 -19
- package/dist/utils/Generic.svelte.d.ts +6 -7
- 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/types.d.ts +4 -5
- package/package.json +1 -1
|
@@ -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} />
|
|
@@ -13,9 +13,8 @@ declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_TRANSI
|
|
|
13
13
|
props(): {
|
|
14
14
|
as?: TTag | undefined;
|
|
15
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
|
-
|
|
18
|
-
props: Record<string, any>;
|
|
16
|
+
children?: import("svelte").Snippet<[HTMLElement & {
|
|
17
|
+
props?: Record<string, any>;
|
|
19
18
|
}]> | undefined;
|
|
20
19
|
class?: string | ((bag: HTMLElement) => string) | null | undefined;
|
|
21
20
|
ref?: HTMLElement;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { provideDisabled } from "../hooks/use-disabled.js"
|
|
3
|
+
import type { Snippet } from "svelte"
|
|
4
|
+
|
|
5
|
+
const { disabled, children }: { disabled?: boolean; children?: Snippet } = $props()
|
|
6
|
+
|
|
7
|
+
provideDisabled(() => disabled ?? false)
|
|
4
8
|
</script>
|
|
5
9
|
|
|
6
10
|
{@render children?.()}
|
|
@@ -1,26 +1,49 @@
|
|
|
1
|
-
<script
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
)
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
1
|
+
<script
|
|
2
|
+
lang="ts"
|
|
3
|
+
generics="TFeature extends RenderFeatures, TTag extends ElementType, TSlot extends Record<string, any>, TValue"
|
|
4
|
+
>
|
|
5
|
+
import type { ElementType, Props } from "./types.js"
|
|
6
|
+
import { mergePropsAdvanced, RenderFeatures, type PropsForFeatures } from "./render.js"
|
|
7
|
+
import Generic from "./Generic.svelte"
|
|
8
|
+
|
|
9
|
+
let {
|
|
10
|
+
ourProps,
|
|
11
|
+
theirProps,
|
|
12
|
+
slots,
|
|
13
|
+
slot = slots,
|
|
14
|
+
defaultTag,
|
|
15
|
+
features,
|
|
16
|
+
visible = true,
|
|
17
|
+
name,
|
|
18
|
+
ref = $bindable(),
|
|
19
|
+
value = $bindable(),
|
|
20
|
+
checked = $bindable(),
|
|
21
|
+
}: {
|
|
22
|
+
ourProps?: Expand<Props<any, TSlot> & PropsForFeatures<TFeature>>
|
|
23
|
+
theirProps: Expand<{ as?: TTag } & Props<any, TSlot, any>>
|
|
24
|
+
slot?: TSlot
|
|
25
|
+
slots?: TSlot
|
|
26
|
+
defaultTag: ElementType
|
|
27
|
+
features?: TFeature
|
|
28
|
+
visible?: boolean
|
|
29
|
+
name: string
|
|
30
|
+
ref?: HTMLElement
|
|
31
|
+
value?: TValue
|
|
32
|
+
checked?: boolean
|
|
33
|
+
} = $props()
|
|
34
|
+
|
|
35
|
+
const featureFlags = $derived(features ?? RenderFeatures.None)
|
|
36
|
+
const { static: isStatic = false, unmount = true, ...rest } = $derived(mergePropsAdvanced(theirProps, ourProps ?? {}))
|
|
37
|
+
const render = $derived(
|
|
38
|
+
visible ||
|
|
39
|
+
(featureFlags & RenderFeatures.Static && isStatic) ||
|
|
40
|
+
(featureFlags & RenderFeatures.RenderStrategy && !unmount)
|
|
41
|
+
)
|
|
42
|
+
const hiddenProps = $derived(
|
|
43
|
+
!visible && !(featureFlags & RenderFeatures.Static) && featureFlags & RenderFeatures.RenderStrategy && !unmount
|
|
44
|
+
? { hidden: true, style: "display: none;" }
|
|
45
|
+
: {}
|
|
46
|
+
)
|
|
24
47
|
</script>
|
|
25
48
|
|
|
26
49
|
{#if render}<Generic {...rest} {...hiddenProps} {slot} tag={defaultTag} bind:ref bind:value bind:checked />{/if}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import type { ElementType } from "./types.js";
|
|
2
2
|
import { RenderFeatures } from "./render.js";
|
|
3
|
-
declare class __sveltets_Render<TFeature extends RenderFeatures, TTag extends ElementType, TSlot, TValue> {
|
|
3
|
+
declare class __sveltets_Render<TFeature extends RenderFeatures, TTag extends ElementType, TSlot extends Record<string, any>, TValue> {
|
|
4
4
|
props(): {
|
|
5
5
|
ourProps?: Expand<{
|
|
6
6
|
[x: string]: any;
|
|
7
7
|
[x: number]: any;
|
|
8
8
|
} & {
|
|
9
|
-
children?: import("svelte").Snippet<[{
|
|
10
|
-
|
|
11
|
-
props: Record<string, any>;
|
|
9
|
+
children?: import("svelte").Snippet<[TSlot & {
|
|
10
|
+
props?: Record<string, any>;
|
|
12
11
|
}]> | undefined;
|
|
13
12
|
class?: string | ((bag: TSlot) => string) | null | undefined;
|
|
14
13
|
ref?: HTMLElement;
|
|
@@ -23,9 +22,8 @@ declare class __sveltets_Render<TFeature extends RenderFeatures, TTag extends El
|
|
|
23
22
|
} : {}) ? T_1 extends any ? (x: T_1) => any : never : never : never) extends (x: infer R) => any ? R : never>> | undefined;
|
|
24
23
|
theirProps: {
|
|
25
24
|
as?: TTag | undefined;
|
|
26
|
-
children?: import("svelte").Snippet<[{
|
|
27
|
-
|
|
28
|
-
props: Record<string, any>;
|
|
25
|
+
children?: import("svelte").Snippet<[TSlot & {
|
|
26
|
+
props?: Record<string, any>;
|
|
29
27
|
}]> | undefined;
|
|
30
28
|
class?: string | ((bag: TSlot) => string) | null | undefined;
|
|
31
29
|
ref?: HTMLElement | undefined;
|
|
@@ -46,12 +44,12 @@ declare class __sveltets_Render<TFeature extends RenderFeatures, TTag extends El
|
|
|
46
44
|
exports(): {};
|
|
47
45
|
}
|
|
48
46
|
interface $$IsomorphicComponent {
|
|
49
|
-
new <TFeature extends RenderFeatures, TTag extends ElementType, TSlot, TValue>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TFeature, TTag, TSlot, TValue>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TFeature, TTag, TSlot, TValue>['props']>, ReturnType<__sveltets_Render<TFeature, TTag, TSlot, TValue>['events']>, ReturnType<__sveltets_Render<TFeature, TTag, TSlot, TValue>['slots']>> & {
|
|
47
|
+
new <TFeature extends RenderFeatures, TTag extends ElementType, TSlot extends Record<string, any>, TValue>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TFeature, TTag, TSlot, TValue>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TFeature, TTag, TSlot, TValue>['props']>, ReturnType<__sveltets_Render<TFeature, TTag, TSlot, TValue>['events']>, ReturnType<__sveltets_Render<TFeature, TTag, TSlot, TValue>['slots']>> & {
|
|
50
48
|
$$bindings?: ReturnType<__sveltets_Render<TFeature, TTag, TSlot, TValue>['bindings']>;
|
|
51
49
|
} & ReturnType<__sveltets_Render<TFeature, TTag, TSlot, TValue>['exports']>;
|
|
52
|
-
<TFeature extends RenderFeatures, TTag extends ElementType, TSlot, TValue>(internal: unknown, props: ReturnType<__sveltets_Render<TFeature, TTag, TSlot, TValue>['props']> & {}): ReturnType<__sveltets_Render<TFeature, TTag, TSlot, TValue>['exports']>;
|
|
50
|
+
<TFeature extends RenderFeatures, TTag extends ElementType, TSlot extends Record<string, any>, TValue>(internal: unknown, props: ReturnType<__sveltets_Render<TFeature, TTag, TSlot, TValue>['props']> & {}): ReturnType<__sveltets_Render<TFeature, TTag, TSlot, TValue>['exports']>;
|
|
53
51
|
z_$$bindings?: ReturnType<__sveltets_Render<any, any, any, any>['bindings']>;
|
|
54
52
|
}
|
|
55
53
|
declare const ElementOrComponent: $$IsomorphicComponent;
|
|
56
|
-
type ElementOrComponent<TFeature extends RenderFeatures, TTag extends ElementType, TSlot, TValue> = InstanceType<typeof ElementOrComponent<TFeature, TTag, TSlot, TValue>>;
|
|
54
|
+
type ElementOrComponent<TFeature extends RenderFeatures, TTag extends ElementType, TSlot extends Record<string, any>, TValue> = InstanceType<typeof ElementOrComponent<TFeature, TTag, TSlot, TValue>>;
|
|
57
55
|
export default ElementOrComponent;
|
|
@@ -1,24 +1,35 @@
|
|
|
1
|
-
<script lang="ts" generics="TTag extends ElementType, TSlot, TValue">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
<script lang="ts" generics="TTag extends ElementType, TSlot extends Record<string, any>, 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
31
|
{#if children}{@render children({
|
|
21
|
-
slot,
|
|
32
|
+
...slot,
|
|
22
33
|
props: {
|
|
23
34
|
...props,
|
|
24
35
|
...(resolvedClass ? { class: resolvedClass } : {}),
|
|
@@ -28,11 +39,11 @@ const resolvedClass = $derived(
|
|
|
28
39
|
{:else if children}
|
|
29
40
|
{#if as === "select"}
|
|
30
41
|
<select bind:this={ref} {...props} class={resolvedClass} {...stateFromSlot(slot)} bind:value>
|
|
31
|
-
{@render children(
|
|
42
|
+
{@render children(slot)}
|
|
32
43
|
</select>
|
|
33
44
|
{:else}
|
|
34
45
|
<svelte:element this={as} bind:this={ref} {...props} class={resolvedClass} {...stateFromSlot(slot)}>
|
|
35
|
-
{@render children(
|
|
46
|
+
{@render children(slot)}
|
|
36
47
|
</svelte:element>
|
|
37
48
|
{/if}
|
|
38
49
|
{:else if as === "input" && props.type === "checkbox"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ElementType } from "./types.js";
|
|
2
|
-
declare class __sveltets_Render<TTag extends ElementType, TSlot, TValue> {
|
|
2
|
+
declare class __sveltets_Render<TTag extends ElementType, TSlot extends Record<string, any>, TValue> {
|
|
3
3
|
props(): {
|
|
4
4
|
as?: TTag | undefined;
|
|
5
5
|
slot: TSlot;
|
|
@@ -8,9 +8,8 @@ declare class __sveltets_Render<TTag extends ElementType, TSlot, TValue> {
|
|
|
8
8
|
value?: TValue | undefined;
|
|
9
9
|
checked?: boolean;
|
|
10
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
|
-
|
|
13
|
-
props: Record<string, any>;
|
|
11
|
+
children?: import("svelte").Snippet<[TSlot & {
|
|
12
|
+
props?: Record<string, any>;
|
|
14
13
|
}]> | undefined;
|
|
15
14
|
class?: string | ((bag: TSlot) => string) | null | undefined;
|
|
16
15
|
ref?: HTMLElement;
|
|
@@ -21,12 +20,12 @@ declare class __sveltets_Render<TTag extends ElementType, TSlot, TValue> {
|
|
|
21
20
|
exports(): {};
|
|
22
21
|
}
|
|
23
22
|
interface $$IsomorphicComponent {
|
|
24
|
-
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']>> & {
|
|
23
|
+
new <TTag extends ElementType, TSlot extends Record<string, any>, 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
24
|
$$bindings?: ReturnType<__sveltets_Render<TTag, TSlot, TValue>['bindings']>;
|
|
26
25
|
} & ReturnType<__sveltets_Render<TTag, TSlot, TValue>['exports']>;
|
|
27
|
-
<TTag extends ElementType, TSlot, TValue>(internal: unknown, props: ReturnType<__sveltets_Render<TTag, TSlot, TValue>['props']> & {}): ReturnType<__sveltets_Render<TTag, TSlot, TValue>['exports']>;
|
|
26
|
+
<TTag extends ElementType, TSlot extends Record<string, any>, TValue>(internal: unknown, props: ReturnType<__sveltets_Render<TTag, TSlot, TValue>['props']> & {}): ReturnType<__sveltets_Render<TTag, TSlot, TValue>['exports']>;
|
|
28
27
|
z_$$bindings?: ReturnType<__sveltets_Render<any, any, any>['bindings']>;
|
|
29
28
|
}
|
|
30
29
|
declare const Generic: $$IsomorphicComponent;
|
|
31
|
-
type Generic<TTag extends ElementType, TSlot, TValue> = InstanceType<typeof Generic<TTag, TSlot, TValue>>;
|
|
30
|
+
type Generic<TTag extends ElementType, TSlot extends Record<string, any>, TValue> = InstanceType<typeof Generic<TTag, TSlot, TValue>>;
|
|
32
31
|
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}
|
package/dist/utils/types.d.ts
CHANGED
|
@@ -7,14 +7,13 @@ export type Expand<T> = T extends infer O ? {
|
|
|
7
7
|
export type PropsOf<TTag extends ElementType> = SvelteHTMLElements[TTag];
|
|
8
8
|
type PropsWeControl = "as" | "children" | "class" | "ref" | "slot";
|
|
9
9
|
type CleanProps<TTag extends ElementType, TOmittableProps extends PropertyKey = never> = Omit<PropsOf<TTag>, TOmittableProps | PropsWeControl>;
|
|
10
|
-
type OurProps<TSlot
|
|
11
|
-
children?: Snippet<[{
|
|
12
|
-
|
|
13
|
-
props: Record<string, any>;
|
|
10
|
+
type OurProps<TSlot extends Record<string, any>> = {
|
|
11
|
+
children?: Snippet<[TSlot & {
|
|
12
|
+
props?: Record<string, any>;
|
|
14
13
|
}]>;
|
|
15
14
|
class?: string | null | ((bag: TSlot) => string);
|
|
16
15
|
ref?: HTMLElement;
|
|
17
16
|
};
|
|
18
|
-
export type Props<TTag extends ElementType, TSlot = {}, TOmittableProps extends PropertyKey = never, Overrides = {}> = CleanProps<TTag, TOmittableProps | keyof Overrides> & OurProps<TSlot> & Overrides;
|
|
17
|
+
export type Props<TTag extends ElementType, TSlot extends Record<string, any> = {}, TOmittableProps extends PropertyKey = never, Overrides = {}> = CleanProps<TTag, TOmittableProps | keyof Overrides> & OurProps<TSlot> & Overrides;
|
|
19
18
|
export type EnsureArray<T> = T extends any[] ? T : Expand<T>[];
|
|
20
19
|
export {};
|