@pzerelles/headlessui-svelte 2.1.2-next.31 → 2.1.2-next.33
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 -55
- package/dist/button/Button.svelte.d.ts +4 -32
- package/dist/checkbox/Checkbox.svelte +177 -121
- package/dist/checkbox/Checkbox.svelte.d.ts +14 -32
- package/dist/close-button/CloseButton.svelte +10 -7
- package/dist/close-button/CloseButton.svelte.d.ts +2 -44
- package/dist/data-interactive/DataInteractive.svelte +49 -37
- package/dist/data-interactive/DataInteractive.svelte.d.ts +7 -30
- package/dist/description/Description.svelte +35 -22
- package/dist/description/Description.svelte.d.ts +7 -28
- package/dist/dialog/Dialog.svelte +326 -232
- package/dist/dialog/Dialog.svelte.d.ts +4 -42
- package/dist/dialog/DialogBackdrop.svelte +33 -16
- package/dist/dialog/DialogBackdrop.svelte.d.ts +4 -29
- package/dist/dialog/DialogPanel.svelte +60 -29
- package/dist/dialog/DialogPanel.svelte.d.ts +4 -30
- package/dist/dialog/DialogTitle.svelte +51 -24
- package/dist/dialog/DialogTitle.svelte.d.ts +6 -27
- package/dist/field/Field.svelte +44 -28
- package/dist/field/Field.svelte.d.ts +4 -30
- package/dist/fieldset/Fieldset.svelte +48 -30
- package/dist/fieldset/Fieldset.svelte.d.ts +5 -31
- package/dist/focus-trap/FocusTrap.svelte +430 -298
- package/dist/focus-trap/FocusTrap.svelte.d.ts +5 -34
- package/dist/hooks/use-inert-others.svelte.js +10 -10
- package/dist/hooks/use-resolve-button-type.svelte.js +0 -1
- package/dist/input/Input.svelte +95 -54
- package/dist/input/Input.svelte.d.ts +13 -27
- package/dist/internal/FloatingProvider.svelte +14 -9
- package/dist/internal/FocusSentinel.svelte +49 -40
- 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 +25 -16
- package/dist/internal/Hidden.svelte +45 -38
- package/dist/internal/Hidden.svelte.d.ts +4 -30
- package/dist/internal/MainTreeProvider.svelte +90 -37
- package/dist/internal/Portal.svelte +18 -14
- package/dist/label/Label.svelte +100 -59
- package/dist/label/Label.svelte.d.ts +7 -32
- package/dist/legend/Legend.svelte +27 -4
- package/dist/legend/Legend.svelte.d.ts +4 -3
- package/dist/listbox/Listbox.svelte +518 -391
- package/dist/listbox/Listbox.svelte.d.ts +11 -35
- package/dist/listbox/ListboxButton.svelte +175 -128
- package/dist/listbox/ListboxButton.svelte.d.ts +5 -32
- package/dist/listbox/ListboxOption.svelte +171 -130
- package/dist/listbox/ListboxOption.svelte.d.ts +12 -26
- package/dist/listbox/ListboxOptions.svelte +403 -305
- package/dist/listbox/ListboxOptions.svelte.d.ts +4 -38
- package/dist/listbox/ListboxSelectedOption.svelte +40 -19
- package/dist/listbox/ListboxSelectedOption.svelte.d.ts +8 -33
- package/dist/menu/Menu.svelte +76 -52
- package/dist/menu/Menu.svelte.d.ts +3 -31
- package/dist/menu/MenuButton.svelte +158 -118
- package/dist/menu/MenuButton.svelte.d.ts +4 -34
- package/dist/menu/MenuHeading.svelte +34 -15
- package/dist/menu/MenuHeading.svelte.d.ts +4 -31
- package/dist/menu/MenuItem.svelte +143 -108
- package/dist/menu/MenuItem.svelte.d.ts +5 -32
- package/dist/menu/MenuItems.svelte +301 -230
- package/dist/menu/MenuItems.svelte.d.ts +4 -38
- package/dist/menu/MenuSection.svelte +26 -10
- package/dist/menu/MenuSection.svelte.d.ts +5 -29
- package/dist/menu/MenuSeparator.svelte +20 -5
- package/dist/menu/MenuSeparator.svelte.d.ts +5 -28
- package/dist/popover/Popover.svelte +217 -151
- package/dist/popover/Popover.svelte.d.ts +4 -30
- package/dist/popover/PopoverBackdrop.svelte +71 -42
- package/dist/popover/PopoverBackdrop.svelte.d.ts +6 -34
- package/dist/popover/PopoverButton.svelte +302 -222
- package/dist/popover/PopoverButton.svelte.d.ts +6 -29
- package/dist/popover/PopoverGroup.svelte +64 -36
- package/dist/popover/PopoverGroup.svelte.d.ts +5 -28
- package/dist/popover/PopoverPanel.svelte +335 -248
- package/dist/popover/PopoverPanel.svelte.d.ts +5 -36
- package/dist/popover/index.d.ts +1 -1
- package/dist/portal/InternalPortal.svelte +143 -86
- package/dist/portal/InternalPortal.svelte.d.ts +4 -30
- package/dist/portal/Portal.svelte +8 -4
- package/dist/portal/Portal.svelte.d.ts +2 -18
- package/dist/portal/PortalGroup.svelte +23 -10
- package/dist/portal/PortalGroup.svelte.d.ts +3 -31
- package/dist/select/Select.svelte +100 -69
- package/dist/select/Select.svelte.d.ts +5 -32
- package/dist/switch/Switch.svelte +181 -133
- package/dist/switch/Switch.svelte.d.ts +5 -38
- package/dist/switch/SwitchGroup.svelte +45 -32
- package/dist/switch/SwitchGroup.svelte.d.ts +7 -28
- package/dist/tabs/Tab.svelte +195 -143
- package/dist/tabs/Tab.svelte.d.ts +4 -32
- package/dist/tabs/TabGroup.svelte +87 -57
- package/dist/tabs/TabGroup.svelte.d.ts +4 -34
- package/dist/tabs/TabList.svelte +31 -12
- package/dist/tabs/TabList.svelte.d.ts +5 -28
- package/dist/tabs/TabPanel.svelte +69 -44
- package/dist/tabs/TabPanel.svelte.d.ts +4 -34
- package/dist/tabs/TabPanels.svelte +19 -8
- package/dist/tabs/TabPanels.svelte.d.ts +5 -27
- package/dist/textarea/Textarea.svelte +87 -54
- package/dist/textarea/Textarea.svelte.d.ts +13 -27
- package/dist/transition/InternalTransitionChild.svelte +267 -171
- package/dist/transition/InternalTransitionChild.svelte.d.ts +3 -33
- package/dist/transition/Transition.svelte +88 -67
- package/dist/transition/Transition.svelte.d.ts +3 -36
- package/dist/transition/TransitionChild.svelte +31 -12
- package/dist/transition/TransitionChild.svelte.d.ts +8 -35
- package/dist/transition/context.svelte.js +7 -7
- package/dist/utils/DisabledProvider.svelte +7 -3
- package/dist/utils/ElementOrComponent.svelte +88 -24
- package/dist/utils/ElementOrComponent.svelte.d.ts +32 -27
- 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/state.js +4 -4
- package/dist/utils/types.d.ts +14 -12
- package/package.json +12 -12
- package/dist/combobox/Combobox.svelte +0 -6
- package/dist/combobox/Combobox.svelte.d.ts +0 -50
- package/dist/utils/Generic.svelte +0 -46
- package/dist/utils/Generic.svelte.d.ts +0 -32
- package/dist/utils/alternative-types.d.ts +0 -20
- package/dist/utils/alternative-types.js +0 -1
|
@@ -1,40 +1,7 @@
|
|
|
1
|
-
import type
|
|
2
|
-
|
|
3
|
-
export type TransitionRootProps<TTag extends ElementType = typeof DEFAULT_TRANSITION_CHILD_TAG> = TransitionChildProps<TTag> & {
|
|
1
|
+
import { type TransitionChildProps } from "./TransitionChild.svelte";
|
|
2
|
+
export type TransitionRootProps = TransitionChildProps & {
|
|
4
3
|
show?: boolean;
|
|
5
4
|
appear?: boolean;
|
|
6
5
|
};
|
|
7
|
-
declare
|
|
8
|
-
props(): {
|
|
9
|
-
as?: TTag | undefined;
|
|
10
|
-
} & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("slot" | "as" | "children" | "class" | "ref") | "unmount" | "transition" | keyof import("./context.svelte.js").TransitionClasses | keyof import("./context.svelte.js").TransitionEvents | "appear"> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
|
|
11
|
-
children?: import("svelte").Snippet<[{
|
|
12
|
-
slot: HTMLElement;
|
|
13
|
-
props: Record<string, any>;
|
|
14
|
-
}]> | undefined;
|
|
15
|
-
class?: string | ((bag: HTMLElement) => string) | null | undefined;
|
|
16
|
-
ref?: HTMLElement;
|
|
17
|
-
} & {
|
|
18
|
-
unmount?: boolean | undefined;
|
|
19
|
-
} & import("./context.svelte.js").TransitionClasses & import("./context.svelte.js").TransitionEvents & {
|
|
20
|
-
transition?: boolean;
|
|
21
|
-
appear?: boolean;
|
|
22
|
-
} & {
|
|
23
|
-
show?: boolean;
|
|
24
|
-
appear?: boolean;
|
|
25
|
-
};
|
|
26
|
-
events(): {};
|
|
27
|
-
slots(): {};
|
|
28
|
-
bindings(): "ref";
|
|
29
|
-
exports(): {};
|
|
30
|
-
}
|
|
31
|
-
interface $$IsomorphicComponent {
|
|
32
|
-
new <TTag extends ElementType = typeof DEFAULT_TRANSITION_CHILD_TAG>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TTag>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TTag>['props']>, ReturnType<__sveltets_Render<TTag>['events']>, ReturnType<__sveltets_Render<TTag>['slots']>> & {
|
|
33
|
-
$$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
|
|
34
|
-
} & ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
35
|
-
<TTag extends ElementType = typeof DEFAULT_TRANSITION_CHILD_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
36
|
-
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
37
|
-
}
|
|
38
|
-
declare const Transition: $$IsomorphicComponent;
|
|
39
|
-
type Transition<TTag extends ElementType = typeof DEFAULT_TRANSITION_CHILD_TAG> = InstanceType<typeof Transition<TTag>>;
|
|
6
|
+
declare const Transition: import("svelte").Component<TransitionRootProps, {}, "element">;
|
|
40
7
|
export default Transition;
|
|
@@ -1,16 +1,35 @@
|
|
|
1
|
-
<script lang="ts" module>
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import type { 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 = Props<
|
|
9
|
+
typeof DEFAULT_TRANSITION_CHILD_TAG,
|
|
10
|
+
TransitionChildRenderPropArg,
|
|
11
|
+
PropsForFeatures<typeof TransitionChildRenderFeatures> &
|
|
12
|
+
TransitionClasses &
|
|
13
|
+
TransitionEvents & { transition?: boolean; appear?: boolean; element?: HTMLElement }
|
|
14
|
+
>
|
|
15
|
+
|
|
16
|
+
export const DEFAULT_TRANSITION_CHILD_TAG = "div"
|
|
17
|
+
export type TransitionChildRenderPropArg = { element?: HTMLElement }
|
|
18
|
+
export const TransitionChildRenderFeatures = RenderFeatures.RenderStrategy
|
|
4
19
|
</script>
|
|
5
20
|
|
|
6
|
-
<script lang="ts"
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
21
|
+
<script lang="ts">
|
|
22
|
+
import { useOpenClosed } from "../internal/open-closed.js"
|
|
23
|
+
import { getContext } from "svelte"
|
|
24
|
+
import InternalTransitionChild from "./InternalTransitionChild.svelte"
|
|
25
|
+
import Transition from "./Transition.svelte"
|
|
26
|
+
|
|
27
|
+
const hasTransitionContext = !!getContext("TransitionContext")
|
|
28
|
+
const hasOpenClosedContext = useOpenClosed() !== null
|
|
29
|
+
|
|
30
|
+
let { element = $bindable(), ...props }: TransitionChildProps = $props()
|
|
31
|
+
|
|
32
|
+
const TransitionRootOrChild = !hasTransitionContext && hasOpenClosedContext ? Transition : InternalTransitionChild
|
|
14
33
|
</script>
|
|
15
34
|
|
|
16
|
-
<TransitionRootOrChild bind:
|
|
35
|
+
<TransitionRootOrChild bind:element {...props} />
|
|
@@ -1,42 +1,15 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Props } from "../utils/types.js";
|
|
2
2
|
import { RenderFeatures, type PropsForFeatures } from "../utils/render.js";
|
|
3
3
|
import type { TransitionEvents, TransitionClasses } from "./context.svelte.js";
|
|
4
|
-
type
|
|
5
|
-
export type TransitionChildProps<TTag extends ElementType> = Props<TTag, TransitionChildRenderPropArg, TransitionChildPropsWeControl, PropsForFeatures<typeof TransitionChildRenderFeatures> & TransitionClasses & TransitionEvents & {
|
|
4
|
+
export type TransitionChildProps = Props<typeof DEFAULT_TRANSITION_CHILD_TAG, TransitionChildRenderPropArg, PropsForFeatures<typeof TransitionChildRenderFeatures> & TransitionClasses & TransitionEvents & {
|
|
6
5
|
transition?: boolean;
|
|
7
6
|
appear?: boolean;
|
|
7
|
+
element?: HTMLElement;
|
|
8
8
|
}>;
|
|
9
|
-
export declare const DEFAULT_TRANSITION_CHILD_TAG = "
|
|
10
|
-
export type TransitionChildRenderPropArg =
|
|
9
|
+
export declare const DEFAULT_TRANSITION_CHILD_TAG = "div";
|
|
10
|
+
export type TransitionChildRenderPropArg = {
|
|
11
|
+
element?: HTMLElement;
|
|
12
|
+
};
|
|
11
13
|
export declare const TransitionChildRenderFeatures = RenderFeatures.RenderStrategy;
|
|
12
|
-
declare
|
|
13
|
-
props(): {
|
|
14
|
-
as?: TTag | undefined;
|
|
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;
|
|
21
|
-
ref?: HTMLElement;
|
|
22
|
-
} & {
|
|
23
|
-
unmount?: boolean | undefined;
|
|
24
|
-
} & TransitionClasses & TransitionEvents & {
|
|
25
|
-
transition?: boolean;
|
|
26
|
-
appear?: boolean;
|
|
27
|
-
};
|
|
28
|
-
events(): {};
|
|
29
|
-
slots(): {};
|
|
30
|
-
bindings(): "ref";
|
|
31
|
-
exports(): {};
|
|
32
|
-
}
|
|
33
|
-
interface $$IsomorphicComponent {
|
|
34
|
-
new <TTag extends ElementType = typeof DEFAULT_TRANSITION_CHILD_TAG>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TTag>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TTag>['props']>, ReturnType<__sveltets_Render<TTag>['events']>, ReturnType<__sveltets_Render<TTag>['slots']>> & {
|
|
35
|
-
$$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
|
|
36
|
-
} & ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
37
|
-
<TTag extends ElementType = typeof DEFAULT_TRANSITION_CHILD_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
38
|
-
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
39
|
-
}
|
|
40
|
-
declare const TransitionChild: $$IsomorphicComponent;
|
|
41
|
-
type TransitionChild<TTag extends ElementType = typeof DEFAULT_TRANSITION_CHILD_TAG> = InstanceType<typeof TransitionChild<TTag>>;
|
|
14
|
+
declare const TransitionChild: import("svelte").Component<TransitionChildProps, {}, "element">;
|
|
42
15
|
export default TransitionChild;
|
|
@@ -16,7 +16,7 @@ export function useTransitionContext() {
|
|
|
16
16
|
return context;
|
|
17
17
|
}
|
|
18
18
|
export function useParentNesting() {
|
|
19
|
-
|
|
19
|
+
const context = getContext("NestingContext");
|
|
20
20
|
if (!context) {
|
|
21
21
|
throw new Error("A <Transition.Child /> is used but it is missing a parent <Transition /> or <Transition.Root />.");
|
|
22
22
|
}
|
|
@@ -29,7 +29,7 @@ export function hasChildren(bag) {
|
|
|
29
29
|
}
|
|
30
30
|
export function useNesting(options) {
|
|
31
31
|
const { done, parent } = $derived(options);
|
|
32
|
-
|
|
32
|
+
const transitionableChildren = $state([]);
|
|
33
33
|
const mounted = useIsMounted();
|
|
34
34
|
const d = useDisposables();
|
|
35
35
|
const unregister = (container, strategy = RenderStrategy.Hidden) => {
|
|
@@ -60,13 +60,13 @@ export function useNesting(options) {
|
|
|
60
60
|
}
|
|
61
61
|
return () => unregister(container, RenderStrategy.Unmount);
|
|
62
62
|
};
|
|
63
|
-
|
|
63
|
+
const todos = $state([]);
|
|
64
64
|
let wait = $state(Promise.resolve());
|
|
65
|
-
|
|
65
|
+
const chains = $state({
|
|
66
66
|
enter: [],
|
|
67
67
|
leave: [],
|
|
68
68
|
});
|
|
69
|
-
|
|
69
|
+
const onStart = (container, direction, cb) => {
|
|
70
70
|
// Clear out all existing todos
|
|
71
71
|
todos.splice(0);
|
|
72
72
|
// Remove all existing promises for the current container from the parent because we can
|
|
@@ -85,7 +85,7 @@ export function useNesting(options) {
|
|
|
85
85
|
parent?.chains[direction].push([
|
|
86
86
|
container,
|
|
87
87
|
new Promise((resolve) => {
|
|
88
|
-
Promise.all(chains[direction].map(([
|
|
88
|
+
Promise.all(chains[direction].map(([, promise]) => promise)).then(() => resolve());
|
|
89
89
|
}),
|
|
90
90
|
]);
|
|
91
91
|
if (direction === "enter") {
|
|
@@ -96,7 +96,7 @@ export function useNesting(options) {
|
|
|
96
96
|
}
|
|
97
97
|
};
|
|
98
98
|
const onStop = (_container, direction, cb) => {
|
|
99
|
-
Promise.all(chains[direction].splice(0).map(([
|
|
99
|
+
Promise.all(chains[direction].splice(0).map(([, promise]) => promise)) // Wait for my children
|
|
100
100
|
.then(() => {
|
|
101
101
|
todos.shift()?.(); // I'm ready
|
|
102
102
|
})
|
|
@@ -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,90 @@
|
|
|
1
|
-
<script lang="ts" generics="TFeature extends RenderFeatures,
|
|
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, TSlot extends Record<string, any>, TValue">
|
|
2
|
+
import type { Props } from "./types.js"
|
|
3
|
+
import { mergePropsAdvanced, RenderFeatures, type PropsForFeatures } from "./render.js"
|
|
4
|
+
import { stateFromSlot } from "./state.js"
|
|
5
|
+
|
|
6
|
+
let {
|
|
7
|
+
ourProps,
|
|
8
|
+
theirProps,
|
|
9
|
+
slots,
|
|
10
|
+
slot = slots,
|
|
11
|
+
defaultTag,
|
|
12
|
+
features,
|
|
13
|
+
visible = true,
|
|
14
|
+
name,
|
|
15
|
+
element = $bindable(),
|
|
16
|
+
value = $bindable(),
|
|
17
|
+
checked = $bindable(),
|
|
18
|
+
}: {
|
|
19
|
+
ourProps?: Expand<Props<any, TSlot> & PropsForFeatures<TFeature>>
|
|
20
|
+
theirProps: Expand<Props<any, TSlot, any>>
|
|
21
|
+
slot?: TSlot
|
|
22
|
+
slots?: TSlot
|
|
23
|
+
defaultTag?: string
|
|
24
|
+
features?: TFeature
|
|
25
|
+
visible?: boolean
|
|
26
|
+
name: string
|
|
27
|
+
ref?: HTMLElement
|
|
28
|
+
element?: HTMLElement
|
|
29
|
+
value?: TValue
|
|
30
|
+
checked?: boolean
|
|
31
|
+
} = $props()
|
|
32
|
+
|
|
33
|
+
const featureFlags = $derived(features ?? RenderFeatures.None)
|
|
34
|
+
let {
|
|
35
|
+
as,
|
|
36
|
+
static: isStatic = false,
|
|
37
|
+
unmount = true,
|
|
38
|
+
children,
|
|
39
|
+
asChild,
|
|
40
|
+
class: className,
|
|
41
|
+
...rest
|
|
42
|
+
} = $derived(mergePropsAdvanced(theirProps, ourProps ?? {}))
|
|
43
|
+
const render = $derived(
|
|
44
|
+
visible ||
|
|
45
|
+
(featureFlags & RenderFeatures.Static && isStatic) ||
|
|
46
|
+
(featureFlags & RenderFeatures.RenderStrategy && !unmount)
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
const resolvedClass: string | undefined = $derived(
|
|
50
|
+
typeof className === "function" ? className(slot) : (className ?? undefined)
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
const _props = $derived.by(() => {
|
|
54
|
+
// Allow for className to be a function with the slot as the contents
|
|
55
|
+
if ("class" in rest && rest.class && typeof rest.class === "function") {
|
|
56
|
+
rest.class = rest.className(slot)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Drop `aria-labelledby` if it only references the current element. If the `aria-labelledby`
|
|
60
|
+
// references itself but also another element then we can keep it.
|
|
61
|
+
if (rest["aria-labelledby"] && rest["aria-labelledby"] === rest.id) {
|
|
62
|
+
rest["aria-labelledby"] = undefined
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const hiddenProps =
|
|
66
|
+
!visible && !(featureFlags & RenderFeatures.Static) && featureFlags & RenderFeatures.RenderStrategy && !unmount
|
|
67
|
+
? { hidden: true, style: "display: none;" }
|
|
68
|
+
: {}
|
|
69
|
+
|
|
70
|
+
return { ...rest, ...(resolvedClass ? { class: resolvedClass } : {}), ...hiddenProps, ...stateFromSlot(slot) }
|
|
71
|
+
})
|
|
24
72
|
</script>
|
|
25
73
|
|
|
26
|
-
{#if render}
|
|
74
|
+
{#if render}
|
|
75
|
+
{#if asChild || !defaultTag}
|
|
76
|
+
{@render children?.({ ...slot, props: _props })}
|
|
77
|
+
{:else if defaultTag === "select"}
|
|
78
|
+
<select {..._props} bind:this={element} bind:value>{@render children?.(slot)}</select>
|
|
79
|
+
{:else if defaultTag === "input" && (_props as Record<string, any>).type === "checkbox"}
|
|
80
|
+
<input type="checkbox" {..._props} bind:this={element} bind:checked />
|
|
81
|
+
{:else if defaultTag === "input"}
|
|
82
|
+
<input {..._props} bind:this={element} bind:value />
|
|
83
|
+
{:else if defaultTag === "textarea"}
|
|
84
|
+
<textarea {..._props} bind:this={element} bind:value></textarea>
|
|
85
|
+
{:else if children}
|
|
86
|
+
<svelte:element this={defaultTag} {..._props} bind:this={element}>{@render children(slot)}</svelte:element>
|
|
87
|
+
{:else}
|
|
88
|
+
<svelte:element this={defaultTag} {..._props} bind:this={element} />
|
|
89
|
+
{/if}
|
|
90
|
+
{/if}
|
|
@@ -1,17 +1,29 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Props } from "./types.js";
|
|
2
2
|
import { RenderFeatures } from "./render.js";
|
|
3
|
-
declare class __sveltets_Render<TFeature extends RenderFeatures,
|
|
3
|
+
declare class __sveltets_Render<TFeature extends RenderFeatures, TSlot extends Record<string, any>, TValue> {
|
|
4
4
|
props(): {
|
|
5
|
-
ourProps?: Expand<{
|
|
6
|
-
[
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
children?: import("svelte").Snippet<[{
|
|
10
|
-
|
|
11
|
-
props: Record<string, any>;
|
|
5
|
+
ourProps?: Expand<Omit<{
|
|
6
|
+
[name: string]: any;
|
|
7
|
+
}, "asChild" | "children" | "class"> & {
|
|
8
|
+
asChild: true;
|
|
9
|
+
children?: import("svelte").Snippet<[TSlot & {
|
|
10
|
+
props?: Record<string, any>;
|
|
12
11
|
}]> | undefined;
|
|
12
|
+
class?: never;
|
|
13
|
+
} & Expand<((TFeature extends RenderFeatures.Static ? {
|
|
14
|
+
static?: boolean;
|
|
15
|
+
} : {}) extends infer T ? T extends (TFeature extends RenderFeatures.Static ? {
|
|
16
|
+
static?: boolean;
|
|
17
|
+
} : {}) ? T extends any ? (x: T) => any : never : never : never) | ((TFeature extends RenderFeatures.RenderStrategy ? {
|
|
18
|
+
unmount?: boolean;
|
|
19
|
+
} : {}) extends infer T_1 ? T_1 extends (TFeature extends RenderFeatures.RenderStrategy ? {
|
|
20
|
+
unmount?: boolean;
|
|
21
|
+
} : {}) ? T_1 extends any ? (x: T_1) => any : never : never : never) extends (x: infer R) => any ? R : never>> | Expand<Omit<{
|
|
22
|
+
[name: string]: any;
|
|
23
|
+
}, "asChild" | "children" | "class"> & {
|
|
24
|
+
asChild?: never;
|
|
25
|
+
children?: import("svelte").Snippet<[TSlot]> | undefined;
|
|
13
26
|
class?: string | ((bag: TSlot) => string) | null | undefined;
|
|
14
|
-
ref?: HTMLElement;
|
|
15
27
|
} & Expand<((TFeature extends RenderFeatures.Static ? {
|
|
16
28
|
static?: boolean;
|
|
17
29
|
} : {}) extends infer T ? T extends (TFeature extends RenderFeatures.Static ? {
|
|
@@ -21,37 +33,30 @@ declare class __sveltets_Render<TFeature extends RenderFeatures, TTag extends El
|
|
|
21
33
|
} : {}) extends infer T_1 ? T_1 extends (TFeature extends RenderFeatures.RenderStrategy ? {
|
|
22
34
|
unmount?: boolean;
|
|
23
35
|
} : {}) ? T_1 extends any ? (x: T_1) => any : never : never : never) extends (x: infer R) => any ? R : never>> | undefined;
|
|
24
|
-
theirProps:
|
|
25
|
-
as?: TTag | undefined;
|
|
26
|
-
children?: import("svelte").Snippet<[{
|
|
27
|
-
slot: TSlot;
|
|
28
|
-
props: Record<string, any>;
|
|
29
|
-
}]> | undefined;
|
|
30
|
-
class?: string | ((bag: TSlot) => string) | null | undefined;
|
|
31
|
-
ref?: HTMLElement | undefined;
|
|
32
|
-
};
|
|
36
|
+
theirProps: Expand<Props<any, TSlot_1, any>>;
|
|
33
37
|
slot?: TSlot | undefined;
|
|
34
38
|
slots?: TSlot | undefined;
|
|
35
|
-
defaultTag
|
|
39
|
+
defaultTag?: string;
|
|
36
40
|
features?: TFeature | undefined;
|
|
37
41
|
visible?: boolean;
|
|
38
42
|
name: string;
|
|
39
43
|
ref?: HTMLElement;
|
|
44
|
+
element?: HTMLElement;
|
|
40
45
|
value?: TValue | undefined;
|
|
41
46
|
checked?: boolean;
|
|
42
47
|
};
|
|
43
48
|
events(): {};
|
|
44
49
|
slots(): {};
|
|
45
|
-
bindings(): "
|
|
50
|
+
bindings(): "element" | "value" | "checked";
|
|
46
51
|
exports(): {};
|
|
47
52
|
}
|
|
48
53
|
interface $$IsomorphicComponent {
|
|
49
|
-
new <TFeature extends RenderFeatures,
|
|
50
|
-
$$bindings?: ReturnType<__sveltets_Render<TFeature,
|
|
51
|
-
} & ReturnType<__sveltets_Render<TFeature,
|
|
52
|
-
<TFeature extends RenderFeatures,
|
|
53
|
-
z_$$bindings?: ReturnType<__sveltets_Render<any, any, any
|
|
54
|
+
new <TFeature extends RenderFeatures, TSlot extends Record<string, any>, TValue>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TFeature, TSlot, TValue>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TFeature, TSlot, TValue>['props']>, ReturnType<__sveltets_Render<TFeature, TSlot, TValue>['events']>, ReturnType<__sveltets_Render<TFeature, TSlot, TValue>['slots']>> & {
|
|
55
|
+
$$bindings?: ReturnType<__sveltets_Render<TFeature, TSlot, TValue>['bindings']>;
|
|
56
|
+
} & ReturnType<__sveltets_Render<TFeature, TSlot, TValue>['exports']>;
|
|
57
|
+
<TFeature extends RenderFeatures, TSlot extends Record<string, any>, TValue>(internal: unknown, props: ReturnType<__sveltets_Render<TFeature, TSlot, TValue>['props']> & {}): ReturnType<__sveltets_Render<TFeature, TSlot, TValue>['exports']>;
|
|
58
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any, any, any>['bindings']>;
|
|
54
59
|
}
|
|
55
60
|
declare const ElementOrComponent: $$IsomorphicComponent;
|
|
56
|
-
type ElementOrComponent<TFeature extends RenderFeatures,
|
|
61
|
+
type ElementOrComponent<TFeature extends RenderFeatures, TSlot extends Record<string, any>, TValue> = InstanceType<typeof ElementOrComponent<TFeature, TSlot, TValue>>;
|
|
57
62
|
export default ElementOrComponent;
|
|
@@ -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}
|