@pzerelles/headlessui-svelte 2.1.1-next.1 → 2.1.2-next.10
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 +6 -10
- package/dist/button/Button.svelte.d.ts +34 -26
- package/dist/checkbox/Checkbox.svelte +43 -25
- package/dist/checkbox/Checkbox.svelte.d.ts +42 -28
- package/dist/close-button/CloseButton.svelte +5 -4
- package/dist/close-button/CloseButton.svelte.d.ts +36 -13
- package/dist/combobox/Combobox.svelte +2 -2
- package/dist/combobox/Combobox.svelte.d.ts +9 -9
- package/dist/data-interactive/DataInteractive.svelte +41 -0
- package/dist/data-interactive/DataInteractive.svelte.d.ts +39 -0
- package/dist/data-interactive/index.d.ts +1 -0
- package/dist/data-interactive/index.js +1 -0
- package/dist/description/Description.svelte +10 -53
- package/dist/description/Description.svelte.d.ts +15 -32
- package/dist/description/context.svelte.d.ts +17 -0
- package/dist/description/context.svelte.js +51 -0
- package/dist/dialog/Dialog.svelte +51 -0
- package/dist/dialog/Dialog.svelte.d.ts +60 -0
- package/dist/dialog/DialogBackdrop.svelte +39 -0
- package/dist/dialog/DialogBackdrop.svelte.d.ts +38 -0
- package/dist/dialog/DialogPanel.svelte +46 -0
- package/dist/dialog/DialogPanel.svelte.d.ts +40 -0
- package/dist/dialog/DialogTitle.svelte +29 -0
- package/dist/dialog/DialogTitle.svelte.d.ts +34 -0
- package/dist/dialog/InternalDialog.svelte +233 -0
- package/dist/dialog/InternalDialog.svelte.d.ts +42 -0
- package/dist/dialog/context.svelte.d.ts +15 -0
- package/dist/dialog/context.svelte.js +16 -0
- package/dist/dialog/index.d.ts +4 -0
- package/dist/dialog/index.js +4 -0
- package/dist/field/Field.svelte +8 -11
- package/dist/field/Field.svelte.d.ts +21 -17
- package/dist/fieldset/Fieldset.svelte +11 -9
- package/dist/fieldset/Fieldset.svelte.d.ts +21 -17
- package/dist/focus-trap/FocusTrap.svelte +325 -0
- package/dist/focus-trap/FocusTrap.svelte.d.ts +46 -0
- package/dist/focus-trap/FocusTrapFeatures.d.ts +14 -0
- package/dist/focus-trap/FocusTrapFeatures.js +15 -0
- package/dist/hooks/use-controllable.svelte.d.ts +1 -1
- package/dist/hooks/use-controllable.svelte.js +3 -3
- package/dist/hooks/use-escape.svelte.d.ts +5 -0
- package/dist/hooks/use-escape.svelte.js +26 -0
- package/dist/hooks/use-event-listener.svelte.d.ts +6 -0
- package/dist/hooks/use-event-listener.svelte.js +12 -0
- package/dist/hooks/use-inert-others.svelte.d.ts +2 -2
- package/dist/hooks/use-inert-others.svelte.js +3 -3
- package/dist/hooks/use-is-mounted.svelte.d.ts +3 -0
- package/dist/hooks/use-is-mounted.svelte.js +14 -0
- package/dist/hooks/use-is-touch-device.svelte.d.ts +3 -0
- package/dist/hooks/use-is-touch-device.svelte.js +20 -0
- package/dist/hooks/use-root-containers.svelte.d.ts +9 -0
- package/dist/hooks/use-root-containers.svelte.js +50 -0
- package/dist/hooks/use-tab-direction.svelte.d.ts +7 -0
- package/dist/hooks/use-tab-direction.svelte.js +25 -0
- package/dist/hooks/use-transition.svelte.js +14 -13
- package/dist/hooks/use-tree-walker.svelte.d.ts +8 -0
- package/dist/hooks/use-tree-walker.svelte.js +19 -0
- package/dist/hooks/use-watch.svelte.d.ts +4 -0
- package/dist/hooks/use-watch.svelte.js +16 -0
- package/dist/hooks/use-window-event.svelte.d.ts +6 -0
- package/dist/hooks/use-window-event.svelte.js +12 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +10 -0
- package/dist/input/Input.svelte +59 -0
- package/dist/input/Input.svelte.d.ts +50 -0
- package/dist/input/index.d.ts +1 -0
- package/dist/input/index.js +1 -0
- package/dist/internal/FocusSentinel.svelte.d.ts +4 -1
- package/dist/internal/ForcePortalRoot.svelte +6 -0
- package/dist/internal/ForcePortalRoot.svelte.d.ts +22 -0
- package/dist/internal/FormFields.svelte.d.ts +4 -1
- package/dist/internal/FormResolver.svelte.d.ts +4 -1
- package/dist/internal/Hidden.svelte +6 -14
- package/dist/internal/Hidden.svelte.d.ts +19 -15
- package/dist/internal/HiddenFeatures.d.ts +5 -0
- package/dist/internal/HiddenFeatures.js +9 -0
- package/dist/internal/HoistFormFields.svelte.d.ts +4 -1
- package/dist/internal/MainTreeProvider.svelte +45 -0
- package/dist/internal/MainTreeProvider.svelte.d.ts +31 -0
- package/dist/internal/Portal.svelte.d.ts +4 -1
- package/dist/internal/close-provider.d.ts +7 -0
- package/dist/internal/close-provider.js +7 -0
- package/dist/internal/floating.svelte.d.ts +13 -8
- package/dist/internal/floating.svelte.js +197 -186
- package/dist/internal/open-closed.d.ts +1 -1
- package/dist/internal/open-closed.js +1 -1
- package/dist/label/Label.svelte +17 -65
- package/dist/label/Label.svelte.d.ts +19 -32
- package/dist/label/context.svelte.d.ts +17 -0
- package/dist/label/context.svelte.js +56 -0
- package/dist/legend/Legend.svelte +4 -3
- package/dist/legend/Legend.svelte.d.ts +33 -15
- package/dist/listbox/Listbox.svelte +8 -25
- package/dist/listbox/Listbox.svelte.d.ts +31 -22
- package/dist/listbox/ListboxButton.svelte +9 -12
- package/dist/listbox/ListboxButton.svelte.d.ts +16 -7
- package/dist/listbox/ListboxOption.svelte +4 -7
- package/dist/listbox/ListboxOption.svelte.d.ts +22 -11
- package/dist/listbox/ListboxOptions.svelte +21 -20
- package/dist/listbox/ListboxOptions.svelte.d.ts +23 -7
- package/dist/listbox/ListboxSelectedOption.svelte +15 -7
- package/dist/listbox/ListboxSelectedOption.svelte.d.ts +24 -14
- package/dist/listbox/ListboxStates.d.ts +12 -0
- package/dist/listbox/ListboxStates.js +15 -0
- package/dist/menu/Menu.svelte +235 -0
- package/dist/menu/Menu.svelte.d.ts +42 -0
- package/dist/menu/MenuButton.svelte +127 -0
- package/dist/menu/MenuButton.svelte.d.ts +52 -0
- package/dist/menu/MenuHeading.svelte +19 -0
- package/dist/menu/MenuHeading.svelte.d.ts +39 -0
- package/dist/menu/MenuItem.svelte +114 -0
- package/dist/menu/MenuItem.svelte.d.ts +49 -0
- package/dist/menu/MenuItems.svelte +244 -0
- package/dist/menu/MenuItems.svelte.d.ts +55 -0
- package/dist/menu/MenuSection.svelte +14 -0
- package/dist/menu/MenuSection.svelte.d.ts +35 -0
- package/dist/menu/MenuSeparator.svelte +9 -0
- package/dist/menu/MenuSeparator.svelte.d.ts +35 -0
- package/dist/menu/context.svelte.d.ts +47 -0
- package/dist/menu/context.svelte.js +21 -0
- package/dist/menu/index.d.ts +7 -0
- package/dist/menu/index.js +7 -0
- package/dist/portal/InternalPortal.svelte +22 -33
- package/dist/portal/InternalPortal.svelte.d.ts +16 -7
- package/dist/portal/Portal.svelte +4 -8
- package/dist/portal/Portal.svelte.d.ts +6 -6
- package/dist/portal/PortalGroup.svelte +5 -6
- package/dist/portal/PortalGroup.svelte.d.ts +16 -7
- package/dist/switch/Switch.svelte +41 -37
- package/dist/switch/Switch.svelte.d.ts +24 -7
- package/dist/switch/SwitchGroup.svelte +7 -8
- package/dist/switch/SwitchGroup.svelte.d.ts +14 -7
- package/dist/tabs/Tab.svelte +9 -14
- package/dist/tabs/Tab.svelte.d.ts +18 -6
- package/dist/tabs/TabGroup.svelte +20 -23
- package/dist/tabs/TabGroup.svelte.d.ts +19 -6
- package/dist/tabs/TabList.svelte +5 -7
- package/dist/tabs/TabList.svelte.d.ts +13 -6
- package/dist/tabs/TabPanel.svelte +30 -32
- package/dist/tabs/TabPanel.svelte.d.ts +19 -6
- package/dist/tabs/TabPanels.svelte +5 -6
- package/dist/tabs/TabPanels.svelte.d.ts +13 -6
- package/dist/textarea/Textarea.svelte +67 -0
- package/dist/textarea/Textarea.svelte.d.ts +50 -0
- package/dist/textarea/index.d.ts +1 -0
- package/dist/textarea/index.js +1 -0
- package/dist/transition/InternalTransitionChild.svelte +178 -0
- package/dist/transition/InternalTransitionChild.svelte.d.ts +55 -0
- package/dist/transition/Transition.svelte +89 -0
- package/dist/transition/Transition.svelte.d.ts +42 -0
- package/dist/transition/TransitionChild.svelte +16 -0
- package/dist/transition/TransitionChild.svelte.d.ts +44 -0
- package/dist/transition/context.svelte.d.ts +64 -0
- package/dist/transition/context.svelte.js +120 -0
- package/dist/transition/index.d.ts +2 -0
- package/dist/transition/index.js +2 -0
- package/dist/utils/ElementOrComponent.svelte +26 -0
- package/dist/utils/ElementOrComponent.svelte.d.ts +56 -0
- package/dist/utils/Generic.svelte +44 -0
- package/dist/utils/Generic.svelte.d.ts +35 -0
- package/dist/utils/StableCollection.svelte +1 -1
- package/dist/utils/StableCollection.svelte.d.ts +4 -1
- package/dist/utils/active-element-history.d.ts +1 -0
- package/dist/utils/active-element-history.js +35 -0
- package/dist/utils/alternative-types.d.ts +21 -0
- package/dist/utils/alternative-types.js +1 -0
- package/dist/utils/class-names.d.ts +1 -0
- package/dist/utils/class-names.js +10 -0
- package/dist/utils/focus-management.d.ts +2 -1
- package/dist/utils/focus-management.js +13 -13
- package/dist/utils/id.d.ts +1 -1
- package/dist/utils/id.js +1 -1
- package/dist/utils/on-document-ready.d.ts +1 -0
- package/dist/utils/on-document-ready.js +12 -0
- package/dist/utils/render.d.ts +3 -0
- package/dist/utils/render.js +63 -0
- package/dist/utils/state.d.ts +7 -1
- package/dist/utils/state.js +10 -6
- package/dist/utils/types.d.ts +14 -17
- package/dist/utils/types.js +0 -5
- package/package.json +32 -31
- package/dist/internal/id.d.ts +0 -8
- package/dist/internal/id.js +0 -11
- package/dist/tabs/Button.svelte +0 -65
- package/dist/tabs/Button.svelte.d.ts +0 -39
- package/dist/utils/close.d.ts +0 -2
- package/dist/utils/close.js +0 -3
|
@@ -1,34 +1,30 @@
|
|
|
1
|
-
<script lang="ts"
|
|
1
|
+
<script lang="ts" module>const DEFAULT_PANEL_TAG = "div";
|
|
2
2
|
const PanelRenderFeatures = RenderFeatures.RenderStrategy | RenderFeatures.Static;
|
|
3
3
|
</script>
|
|
4
4
|
|
|
5
|
-
<script lang="ts" generics="TTag extends ElementType">import { useId } from "../hooks/use-id.js";
|
|
6
|
-
import { RenderFeatures } from "../utils/render.js";
|
|
5
|
+
<script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_PANEL_TAG">import { useId } from "../hooks/use-id.js";
|
|
6
|
+
import { mergeProps, RenderFeatures } from "../utils/render.js";
|
|
7
7
|
import { useActions, useData } from "./TabGroup.svelte";
|
|
8
8
|
import { useStableCollectionIndex } from "../utils/StableCollection.svelte";
|
|
9
9
|
import { useFocusRing } from "../hooks/use-focus-ring.svelte.js";
|
|
10
10
|
import Hidden from "../internal/Hidden.svelte";
|
|
11
|
-
import { stateFromSlot } from "../utils/state.js";
|
|
12
11
|
import { onMount } from "svelte";
|
|
12
|
+
import ElementOrComponent from "../utils/ElementOrComponent.svelte";
|
|
13
13
|
const internalId = useId();
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
let {
|
|
15
|
+
ref = $bindable(),
|
|
16
16
|
id = `headlessui-tabs-panel-${internalId}`,
|
|
17
17
|
tabIndex = 0,
|
|
18
|
-
children,
|
|
19
|
-
static: isStatic = false,
|
|
20
|
-
unmount = true,
|
|
21
18
|
...theirProps
|
|
22
19
|
} = $props();
|
|
23
20
|
const data = useData("Tab.Panel");
|
|
24
21
|
const { selectedIndex, tabs, panels } = $derived(data);
|
|
25
22
|
const actions = useActions("Tab.Panel");
|
|
26
|
-
|
|
27
|
-
const panelRef = $derived({ current: internalPanelRef });
|
|
23
|
+
const panelRef = $derived({ current: ref });
|
|
28
24
|
onMount(() => actions.registerPanel(panelRef));
|
|
29
25
|
const mySSRIndex = useStableCollectionIndex("panels");
|
|
30
26
|
const myIndex = $derived.by(() => {
|
|
31
|
-
const index = tabs.findIndex((panel) =>
|
|
27
|
+
const index = tabs.findIndex((panel) => panel === panelRef);
|
|
32
28
|
return index === -1 ? mySSRIndex : index;
|
|
33
29
|
});
|
|
34
30
|
const selected = $derived(myIndex === selectedIndex);
|
|
@@ -37,27 +33,29 @@ const slot = $derived({
|
|
|
37
33
|
selected,
|
|
38
34
|
focus
|
|
39
35
|
});
|
|
40
|
-
const ourProps = $derived(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
36
|
+
const ourProps = $derived(
|
|
37
|
+
mergeProps(
|
|
38
|
+
{
|
|
39
|
+
id,
|
|
40
|
+
role: "tabpanel",
|
|
41
|
+
"aria-labelledby": tabs[myIndex]?.current?.id,
|
|
42
|
+
tabIndex: selected ? 0 : -1
|
|
43
|
+
},
|
|
44
|
+
focusProps
|
|
45
|
+
)
|
|
46
|
+
);
|
|
48
47
|
</script>
|
|
49
48
|
|
|
50
|
-
{#if !selected && unmount && !
|
|
51
|
-
<Hidden
|
|
49
|
+
{#if !selected && (theirProps.unmount ?? true) && !(theirProps.static ?? false)}
|
|
50
|
+
<Hidden aria-hidden="true" {...ourProps} bind:ref />
|
|
52
51
|
{:else}
|
|
53
|
-
<
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
{
|
|
57
|
-
{
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
</svelte:element>
|
|
52
|
+
<ElementOrComponent
|
|
53
|
+
{ourProps}
|
|
54
|
+
{theirProps}
|
|
55
|
+
{slot}
|
|
56
|
+
defaultTag={DEFAULT_PANEL_TAG}
|
|
57
|
+
features={PanelRenderFeatures}
|
|
58
|
+
name="TabPanel"
|
|
59
|
+
bind:ref
|
|
60
|
+
/>
|
|
63
61
|
{/if}
|
|
@@ -11,24 +11,37 @@ export type TabPanelProps<TTag extends ElementType = typeof DEFAULT_PANEL_TAG> =
|
|
|
11
11
|
tabIndex?: number;
|
|
12
12
|
}>;
|
|
13
13
|
import { type PropsForFeatures } from "../utils/render.js";
|
|
14
|
-
declare class __sveltets_Render<TTag extends ElementType> {
|
|
15
|
-
props():
|
|
14
|
+
declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_PANEL_TAG> {
|
|
15
|
+
props(): {
|
|
16
|
+
as?: TTag | undefined;
|
|
17
|
+
} & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("as" | "children" | "refName" | "class") | "unmount" | "static" | "id" | "tabIndex" | PanelPropsWeControl> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
|
|
18
|
+
children?: import("../utils/types.js").Children<PanelRenderPropArg> | undefined;
|
|
19
|
+
ref?: HTMLElement;
|
|
20
|
+
} & (true extends (import("../utils/types.js").PropsOf<TTag> extends infer T_1 ? T_1 extends import("../utils/types.js").PropsOf<TTag> ? T_1 extends never ? never : "class" extends infer T_2 ? T_2 extends "class" ? T_2 extends keyof T_1 ? true : never : never : never : never : never) ? {
|
|
21
|
+
class?: import("../utils/types.js").PropsOf<TTag>["class"] | ((bag: PanelRenderPropArg) => string) | undefined;
|
|
22
|
+
} : {}) & {
|
|
23
|
+
static?: boolean | undefined;
|
|
24
|
+
unmount?: boolean | undefined;
|
|
25
|
+
} & {
|
|
26
|
+
id?: string;
|
|
27
|
+
tabIndex?: number;
|
|
28
|
+
};
|
|
16
29
|
events(): {} & {
|
|
17
30
|
[evt: string]: CustomEvent<any>;
|
|
18
31
|
};
|
|
19
32
|
slots(): {};
|
|
20
|
-
bindings(): "";
|
|
33
|
+
bindings(): "ref";
|
|
21
34
|
exports(): {};
|
|
22
35
|
}
|
|
23
36
|
interface $$IsomorphicComponent {
|
|
24
|
-
new <TTag extends ElementType>(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']>> & {
|
|
37
|
+
new <TTag extends ElementType = typeof DEFAULT_PANEL_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']>> & {
|
|
25
38
|
$$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
|
|
26
39
|
} & ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
27
|
-
<TTag extends ElementType>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {
|
|
40
|
+
<TTag extends ElementType = typeof DEFAULT_PANEL_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {
|
|
28
41
|
$$events?: ReturnType<__sveltets_Render<TTag>['events']>;
|
|
29
42
|
}): ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
30
43
|
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
31
44
|
}
|
|
32
45
|
declare const TabPanel: $$IsomorphicComponent;
|
|
33
|
-
type TabPanel<TTag extends ElementType> = InstanceType<typeof TabPanel<TTag>>;
|
|
46
|
+
type TabPanel<TTag extends ElementType = typeof DEFAULT_PANEL_TAG> = InstanceType<typeof TabPanel<TTag>>;
|
|
34
47
|
export default TabPanel;
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
<script lang="ts"
|
|
1
|
+
<script lang="ts" module>import ElementOrComponent from "../utils/ElementOrComponent.svelte";
|
|
2
|
+
import { useData } from "./TabGroup.svelte";
|
|
2
3
|
let DEFAULT_PANELS_TAG = "div";
|
|
3
4
|
</script>
|
|
4
5
|
|
|
5
|
-
<script lang="ts" generics="TTag extends ElementType">const data = useData("Tab.Panels");
|
|
6
|
+
<script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_PANELS_TAG">const data = useData("Tab.Panels");
|
|
6
7
|
const { selectedIndex } = $derived(data);
|
|
7
8
|
const slot = $derived({ selectedIndex });
|
|
8
|
-
|
|
9
|
+
let { ref = $bindable(), ...theirProps } = $props();
|
|
9
10
|
</script>
|
|
10
11
|
|
|
11
|
-
<
|
|
12
|
-
{#if children}{@render children(slot)}{/if}
|
|
13
|
-
</svelte:element>
|
|
12
|
+
<ElementOrComponent {theirProps} {slot} defaultTag={DEFAULT_PANELS_TAG} name="TabPanel" bind:ref />
|
|
@@ -4,24 +4,31 @@ type PanelsRenderPropArg = {
|
|
|
4
4
|
selectedIndex: number;
|
|
5
5
|
};
|
|
6
6
|
export type TabPanelsProps<TTag extends ElementType = typeof DEFAULT_PANELS_TAG> = Props<TTag, PanelsRenderPropArg>;
|
|
7
|
-
declare class __sveltets_Render<TTag extends ElementType> {
|
|
8
|
-
props():
|
|
7
|
+
declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_PANELS_TAG> {
|
|
8
|
+
props(): {
|
|
9
|
+
as?: TTag | undefined;
|
|
10
|
+
} & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, "as" | "children" | "refName" | "class"> 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("../utils/types.js").Children<PanelsRenderPropArg> | undefined;
|
|
12
|
+
ref?: HTMLElement;
|
|
13
|
+
} & (true extends (import("../utils/types.js").PropsOf<TTag> extends infer T_1 ? T_1 extends import("../utils/types.js").PropsOf<TTag> ? T_1 extends never ? never : "class" extends infer T_2 ? T_2 extends "class" ? T_2 extends keyof T_1 ? true : never : never : never : never : never) ? {
|
|
14
|
+
class?: import("../utils/types.js").PropsOf<TTag>["class"] | ((bag: PanelsRenderPropArg) => string) | undefined;
|
|
15
|
+
} : {});
|
|
9
16
|
events(): {} & {
|
|
10
17
|
[evt: string]: CustomEvent<any>;
|
|
11
18
|
};
|
|
12
19
|
slots(): {};
|
|
13
|
-
bindings(): "";
|
|
20
|
+
bindings(): "ref";
|
|
14
21
|
exports(): {};
|
|
15
22
|
}
|
|
16
23
|
interface $$IsomorphicComponent {
|
|
17
|
-
new <TTag extends ElementType>(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']>> & {
|
|
24
|
+
new <TTag extends ElementType = typeof DEFAULT_PANELS_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']>> & {
|
|
18
25
|
$$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
|
|
19
26
|
} & ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
20
|
-
<TTag extends ElementType>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {
|
|
27
|
+
<TTag extends ElementType = typeof DEFAULT_PANELS_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {
|
|
21
28
|
$$events?: ReturnType<__sveltets_Render<TTag>['events']>;
|
|
22
29
|
}): ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
23
30
|
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
24
31
|
}
|
|
25
32
|
declare const TabPanels: $$IsomorphicComponent;
|
|
26
|
-
type TabPanels<TTag extends ElementType> = InstanceType<typeof TabPanels<TTag>>;
|
|
33
|
+
type TabPanels<TTag extends ElementType = typeof DEFAULT_PANELS_TAG> = InstanceType<typeof TabPanels<TTag>>;
|
|
27
34
|
export default TabPanels;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<script lang="ts" module>const DEFAULT_TEXTAREA_TAG = "textarea";
|
|
2
|
+
</script>
|
|
3
|
+
|
|
4
|
+
<script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_TEXTAREA_TAG, TValue = string">import { htmlid } from "../utils/id.js";
|
|
5
|
+
import { useDisabled } from "../hooks/use-disabled.js";
|
|
6
|
+
import { useProvidedId } from "../utils/id.js";
|
|
7
|
+
import { useLabelledBy } from "../label/context.svelte.js";
|
|
8
|
+
import { useDescribedBy } from "../description/context.svelte.js";
|
|
9
|
+
import { useHover } from "../hooks/use-hover.svelte.js";
|
|
10
|
+
import { useFocusRing } from "../hooks/use-focus-ring.svelte.js";
|
|
11
|
+
import { mergeProps } from "../utils/render.js";
|
|
12
|
+
import ElementOrComponent from "../utils/ElementOrComponent.svelte";
|
|
13
|
+
const internalId = htmlid();
|
|
14
|
+
const providedId = useProvidedId();
|
|
15
|
+
const providedDisabled = useDisabled();
|
|
16
|
+
let {
|
|
17
|
+
ref = $bindable(),
|
|
18
|
+
value = $bindable(),
|
|
19
|
+
id = providedId || `headlessui-input-${internalId}`,
|
|
20
|
+
disabled: theirDisabled = false,
|
|
21
|
+
autofocus = false,
|
|
22
|
+
invalid = false,
|
|
23
|
+
...theirProps
|
|
24
|
+
} = $props();
|
|
25
|
+
const disabled = $derived(providedDisabled?.value ?? theirDisabled);
|
|
26
|
+
const labelledBy = useLabelledBy();
|
|
27
|
+
const describedBy = useDescribedBy();
|
|
28
|
+
const { isFocusVisible: focus, focusProps } = $derived(
|
|
29
|
+
useFocusRing({
|
|
30
|
+
get autofocus() {
|
|
31
|
+
return autofocus;
|
|
32
|
+
}
|
|
33
|
+
})
|
|
34
|
+
);
|
|
35
|
+
const { isHovered: hover, hoverProps } = $derived(
|
|
36
|
+
useHover({
|
|
37
|
+
get disabled() {
|
|
38
|
+
return disabled;
|
|
39
|
+
}
|
|
40
|
+
})
|
|
41
|
+
);
|
|
42
|
+
const ourProps = $derived(
|
|
43
|
+
mergeProps(
|
|
44
|
+
{
|
|
45
|
+
id,
|
|
46
|
+
"aria-labelledby": labelledBy?.value,
|
|
47
|
+
"aria-describedby": describedBy?.value,
|
|
48
|
+
"aria-invalid": invalid ? "" : void 0,
|
|
49
|
+
disabled: disabled || void 0,
|
|
50
|
+
autofocus
|
|
51
|
+
},
|
|
52
|
+
focusProps,
|
|
53
|
+
hoverProps
|
|
54
|
+
)
|
|
55
|
+
);
|
|
56
|
+
const slot = $derived({ disabled, invalid, hover, focus, autofocus });
|
|
57
|
+
</script>
|
|
58
|
+
|
|
59
|
+
<ElementOrComponent
|
|
60
|
+
{ourProps}
|
|
61
|
+
{theirProps}
|
|
62
|
+
{slot}
|
|
63
|
+
defaultTag={DEFAULT_TEXTAREA_TAG}
|
|
64
|
+
name="Textarea"
|
|
65
|
+
bind:ref
|
|
66
|
+
bind:value
|
|
67
|
+
/>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { ElementType, Props, PropsOf } from "../utils/types.js";
|
|
2
|
+
declare const DEFAULT_TEXTAREA_TAG: "textarea";
|
|
3
|
+
type TextareaRenderPropArg = {
|
|
4
|
+
disabled: boolean;
|
|
5
|
+
hover: boolean;
|
|
6
|
+
focus: boolean;
|
|
7
|
+
autofocus: boolean;
|
|
8
|
+
invalid: boolean;
|
|
9
|
+
};
|
|
10
|
+
type TextareaPropsWeControl = "aria-labelledby" | "aria-describedby";
|
|
11
|
+
export type TextareaProps<TTag extends ElementType = typeof DEFAULT_TEXTAREA_TAG, TValue = string> = Props<TTag, TextareaRenderPropArg, TextareaPropsWeControl, {
|
|
12
|
+
value?: TValue;
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
invalid?: boolean;
|
|
15
|
+
autofocus?: boolean;
|
|
16
|
+
}>;
|
|
17
|
+
declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_TEXTAREA_TAG, TValue = string> {
|
|
18
|
+
props(): {
|
|
19
|
+
as?: TTag | undefined;
|
|
20
|
+
value?: TValue | undefined;
|
|
21
|
+
} & (Exclude<keyof PropsOf<TTag>, ("as" | "children" | "refName" | "class") | "invalid" | "disabled" | "autofocus" | "value" | TextareaPropsWeControl> extends infer T extends keyof PropsOf<TTag> ? { [P in T]: PropsOf<TTag>[P]; } : never) & {
|
|
22
|
+
children?: import("../utils/types.js").Children<TextareaRenderPropArg> | undefined;
|
|
23
|
+
ref?: HTMLElement;
|
|
24
|
+
} & (true extends (PropsOf<TTag> extends infer T_1 ? T_1 extends PropsOf<TTag> ? T_1 extends never ? never : "class" extends infer T_2 ? T_2 extends "class" ? T_2 extends keyof T_1 ? true : never : never : never : never : never) ? {
|
|
25
|
+
class?: PropsOf<TTag>["class"] | ((bag: TextareaRenderPropArg) => string) | undefined;
|
|
26
|
+
} : {}) & {
|
|
27
|
+
value?: TValue | undefined;
|
|
28
|
+
disabled?: boolean;
|
|
29
|
+
invalid?: boolean;
|
|
30
|
+
autofocus?: boolean;
|
|
31
|
+
};
|
|
32
|
+
events(): {} & {
|
|
33
|
+
[evt: string]: CustomEvent<any>;
|
|
34
|
+
};
|
|
35
|
+
slots(): {};
|
|
36
|
+
bindings(): "ref" | "value";
|
|
37
|
+
exports(): {};
|
|
38
|
+
}
|
|
39
|
+
interface $$IsomorphicComponent {
|
|
40
|
+
new <TTag extends ElementType = typeof DEFAULT_TEXTAREA_TAG, TValue = string>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TTag, TValue>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TTag, TValue>['props']>, ReturnType<__sveltets_Render<TTag, TValue>['events']>, ReturnType<__sveltets_Render<TTag, TValue>['slots']>> & {
|
|
41
|
+
$$bindings?: ReturnType<__sveltets_Render<TTag, TValue>['bindings']>;
|
|
42
|
+
} & ReturnType<__sveltets_Render<TTag, TValue>['exports']>;
|
|
43
|
+
<TTag extends ElementType = typeof DEFAULT_TEXTAREA_TAG, TValue = string>(internal: unknown, props: ReturnType<__sveltets_Render<TTag, TValue>['props']> & {
|
|
44
|
+
$$events?: ReturnType<__sveltets_Render<TTag, TValue>['events']>;
|
|
45
|
+
}): ReturnType<__sveltets_Render<TTag, TValue>['exports']>;
|
|
46
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
|
|
47
|
+
}
|
|
48
|
+
declare const Textarea: $$IsomorphicComponent;
|
|
49
|
+
type Textarea<TTag extends ElementType = typeof DEFAULT_TEXTAREA_TAG, TValue = string> = InstanceType<typeof Textarea<TTag, TValue>>;
|
|
50
|
+
export default Textarea;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Textarea, type TextareaProps } from "./Textarea.svelte";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Textarea } from "./Textarea.svelte";
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
<script lang="ts" module>import { compact, RenderStrategy } from "../utils/render.js";
|
|
2
|
+
import { onMount, setContext, untrack } from "svelte";
|
|
3
|
+
import {
|
|
4
|
+
hasChildren,
|
|
5
|
+
TreeStates,
|
|
6
|
+
useNesting,
|
|
7
|
+
useParentNesting,
|
|
8
|
+
useTransitionContext
|
|
9
|
+
} from "./context.svelte.js";
|
|
10
|
+
import { match } from "../utils/match.js";
|
|
11
|
+
import { transitionDataAttributes, useTransition } from "../hooks/use-transition.svelte.js";
|
|
12
|
+
import { classNames } from "../utils/class-names.js";
|
|
13
|
+
import { createOpenClosedContext, State } from "../internal/open-closed.js";
|
|
14
|
+
import ElementOrComponent from "../utils/ElementOrComponent.svelte";
|
|
15
|
+
import { DEFAULT_TRANSITION_CHILD_TAG } from "./TransitionChild.svelte";
|
|
16
|
+
export function shouldForwardRef(props) {
|
|
17
|
+
return (
|
|
18
|
+
// If we have any of the enter/leave classes
|
|
19
|
+
Boolean(props.enter || props.enterFrom || props.enterTo || props.leave || props.leaveFrom || props.leaveTo) || // If the `as` prop is not a Fragment
|
|
20
|
+
(props.as ?? DEFAULT_TRANSITION_CHILD_TAG) !== "svelte:fragment" || // If we have a single child, then we can forward the ref directly
|
|
21
|
+
props.children !== void 0
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_TRANSITION_CHILD_TAG">let { ref = $bindable(), ..._props } = $props();
|
|
27
|
+
const {
|
|
28
|
+
// Whether or not to enable transitions on the current element (by exposing
|
|
29
|
+
// transition data). When set to false, the `Transition` component still
|
|
30
|
+
// acts as a transition boundary for `TransitionChild` components.
|
|
31
|
+
transition = true,
|
|
32
|
+
// Event "handlers"
|
|
33
|
+
beforeEnter,
|
|
34
|
+
afterEnter,
|
|
35
|
+
beforeLeave,
|
|
36
|
+
afterLeave,
|
|
37
|
+
// Class names
|
|
38
|
+
enter,
|
|
39
|
+
enterFrom,
|
|
40
|
+
enterTo,
|
|
41
|
+
entered,
|
|
42
|
+
leave,
|
|
43
|
+
leaveFrom,
|
|
44
|
+
leaveTo,
|
|
45
|
+
...theirProps
|
|
46
|
+
} = $derived(_props);
|
|
47
|
+
let containerElement = $state();
|
|
48
|
+
let container = $state({ current: null });
|
|
49
|
+
const requiresRef = $derived(shouldForwardRef(_props));
|
|
50
|
+
const strategy = $derived(theirProps.unmount ?? true ? RenderStrategy.Unmount : RenderStrategy.Hidden);
|
|
51
|
+
const _transitionContext = useTransitionContext();
|
|
52
|
+
const { show, appear, initial } = $derived(_transitionContext);
|
|
53
|
+
let _state = $state(untrack(() => show) ? TreeStates.Visible : TreeStates.Hidden);
|
|
54
|
+
const parentNesting = useParentNesting();
|
|
55
|
+
const { register, unregister } = $derived(parentNesting);
|
|
56
|
+
onMount(() => {
|
|
57
|
+
if (requiresRef) {
|
|
58
|
+
container.current = ref ?? null;
|
|
59
|
+
containerElement = ref;
|
|
60
|
+
}
|
|
61
|
+
return register(container);
|
|
62
|
+
});
|
|
63
|
+
$effect(() => {
|
|
64
|
+
if (strategy !== RenderStrategy.Hidden) return;
|
|
65
|
+
if (!container.current) return;
|
|
66
|
+
if (show && _state !== TreeStates.Visible) {
|
|
67
|
+
_state = TreeStates.Visible;
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
match(_state, {
|
|
71
|
+
[TreeStates.Hidden]: () => unregister(container),
|
|
72
|
+
[TreeStates.Visible]: () => register(container)
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
$effect(() => {
|
|
76
|
+
if (!requiresRef) return;
|
|
77
|
+
if (_state === TreeStates.Visible && container.current === null) {
|
|
78
|
+
throw new Error("Did you forget to passthrough the `ref` to the actual DOM node?");
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
const skip = $derived(initial && !appear);
|
|
82
|
+
const immediate = $derived(appear && show && initial);
|
|
83
|
+
let isTransitioning = $state(false);
|
|
84
|
+
let nesting = useNesting({
|
|
85
|
+
done: () => {
|
|
86
|
+
if (isTransitioning) return;
|
|
87
|
+
_state = TreeStates.Hidden;
|
|
88
|
+
unregister(container);
|
|
89
|
+
},
|
|
90
|
+
get parent() {
|
|
91
|
+
return parentNesting;
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
const start = (show2) => {
|
|
95
|
+
isTransitioning = true;
|
|
96
|
+
const direction = show2 ? "enter" : "leave";
|
|
97
|
+
nesting.onStart(container, direction, (direction2) => {
|
|
98
|
+
if (direction2 === "enter") beforeEnter?.();
|
|
99
|
+
else if (direction2 === "leave") beforeLeave?.();
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
const end = (show2) => {
|
|
103
|
+
let direction = show2 ? "enter" : "leave";
|
|
104
|
+
isTransitioning = false;
|
|
105
|
+
nesting.onStop(container, direction, (direction2) => {
|
|
106
|
+
if (direction2 === "enter") afterEnter?.();
|
|
107
|
+
else if (direction2 === "leave") afterLeave?.();
|
|
108
|
+
});
|
|
109
|
+
if (direction === "leave" && !hasChildren(nesting)) {
|
|
110
|
+
_state = TreeStates.Hidden;
|
|
111
|
+
unregister(container);
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
$effect(() => {
|
|
115
|
+
if (requiresRef && transition) return;
|
|
116
|
+
untrack(() => start(show));
|
|
117
|
+
untrack(() => end(show));
|
|
118
|
+
});
|
|
119
|
+
const enabled = $derived.by(() => {
|
|
120
|
+
if (!transition) return false;
|
|
121
|
+
if (!requiresRef) return false;
|
|
122
|
+
if (skip) return false;
|
|
123
|
+
return true;
|
|
124
|
+
});
|
|
125
|
+
const _transition = useTransition({
|
|
126
|
+
get enabled() {
|
|
127
|
+
return enabled;
|
|
128
|
+
},
|
|
129
|
+
get element() {
|
|
130
|
+
return containerElement;
|
|
131
|
+
},
|
|
132
|
+
get show() {
|
|
133
|
+
return show;
|
|
134
|
+
},
|
|
135
|
+
events: { start, end }
|
|
136
|
+
});
|
|
137
|
+
const { data: transitionData } = $derived(_transition);
|
|
138
|
+
const ourProps = $derived(
|
|
139
|
+
compact({
|
|
140
|
+
class: classNames(
|
|
141
|
+
// Incoming classes if any
|
|
142
|
+
// all components accept className (but all HTML elements do)
|
|
143
|
+
theirProps.class,
|
|
144
|
+
// Apply these classes immediately
|
|
145
|
+
immediate && enter,
|
|
146
|
+
immediate && enterFrom,
|
|
147
|
+
// Map data attributes to `enter`, `enterFrom` and `enterTo` classes
|
|
148
|
+
transitionData.enter && enter,
|
|
149
|
+
transitionData.enter && transitionData.closed && enterFrom,
|
|
150
|
+
transitionData.enter && !transitionData.closed && enterTo,
|
|
151
|
+
// Map data attributes to `leave`, `leaveFrom` and `leaveTo` classes
|
|
152
|
+
transitionData.leave && leave,
|
|
153
|
+
transitionData.leave && !transitionData.closed && leaveFrom,
|
|
154
|
+
transitionData.leave && transitionData.closed && leaveTo,
|
|
155
|
+
// Map data attributes to `entered` class (backwards compatibility)
|
|
156
|
+
!transitionData.transition && show && entered
|
|
157
|
+
)?.trim() || void 0,
|
|
158
|
+
// If `class` is an empty string, we can omit it
|
|
159
|
+
...transitionDataAttributes(transitionData)
|
|
160
|
+
})
|
|
161
|
+
);
|
|
162
|
+
const openClosedState = $derived.by(() => {
|
|
163
|
+
let openClosedState2 = 0;
|
|
164
|
+
if (_state === TreeStates.Visible) openClosedState2 |= State.Open;
|
|
165
|
+
if (_state === TreeStates.Hidden) openClosedState2 |= State.Closed;
|
|
166
|
+
if (transitionData.enter) openClosedState2 |= State.Opening;
|
|
167
|
+
if (transitionData.leave) openClosedState2 |= State.Closing;
|
|
168
|
+
return openClosedState2;
|
|
169
|
+
});
|
|
170
|
+
createOpenClosedContext({
|
|
171
|
+
get value() {
|
|
172
|
+
return openClosedState;
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
setContext("NestingContext", nesting);
|
|
176
|
+
</script>
|
|
177
|
+
|
|
178
|
+
<ElementOrComponent {ourProps} {theirProps} defaultTag={DEFAULT_TRANSITION_CHILD_TAG} name="TransitionChild" bind:ref />
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { ElementType } from "../utils/types.js";
|
|
2
|
+
import type { TransitionRootProps } from "./Transition.svelte";
|
|
3
|
+
import { DEFAULT_TRANSITION_CHILD_TAG } from "./TransitionChild.svelte";
|
|
4
|
+
/**
|
|
5
|
+
* Check if we should forward the ref to the child element or not. This is to
|
|
6
|
+
* prevent crashes when the `as` prop is a Fragment _and_ the component just acts
|
|
7
|
+
* as a state container (aka, there is no actual transition happening).
|
|
8
|
+
*
|
|
9
|
+
* E.g.:
|
|
10
|
+
*
|
|
11
|
+
* ```tsx
|
|
12
|
+
* <Transition show={true}>
|
|
13
|
+
* <Transition.Child enter="duration-100"><div>Child 1</div></Transition.Child>
|
|
14
|
+
* <Transition.Child enter="duration-200"><div>Child 2</div></Transition.Child>
|
|
15
|
+
* </Transition>
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* In this scenario, the child components are transitioning, but the
|
|
19
|
+
* `Transition` parent, which is a `Fragment`, is not. So we should not forward
|
|
20
|
+
* the ref to the `Fragment`.
|
|
21
|
+
*/
|
|
22
|
+
export declare function shouldForwardRef<TTag extends ElementType = typeof DEFAULT_TRANSITION_CHILD_TAG>(props: TransitionRootProps<TTag>): boolean;
|
|
23
|
+
declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_TRANSITION_CHILD_TAG> {
|
|
24
|
+
props(): {
|
|
25
|
+
as?: TTag | undefined;
|
|
26
|
+
} & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("as" | "children" | "refName" | "class") | "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) & {
|
|
27
|
+
children?: import("../utils/types.js").Children<HTMLElement> | undefined;
|
|
28
|
+
ref?: HTMLElement;
|
|
29
|
+
} & (true extends (import("../utils/types.js").PropsOf<TTag> extends infer T_1 ? T_1 extends import("../utils/types.js").PropsOf<TTag> ? T_1 extends never ? never : "class" extends infer T_2 ? T_2 extends "class" ? T_2 extends keyof T_1 ? true : never : never : never : never : never) ? {
|
|
30
|
+
class?: import("../utils/types.js").PropsOf<TTag>["class"] | ((bag: HTMLElement) => string) | undefined;
|
|
31
|
+
} : {}) & {
|
|
32
|
+
unmount?: boolean | undefined;
|
|
33
|
+
} & import("./context.svelte.js").TransitionClasses & import("./context.svelte.js").TransitionEvents & {
|
|
34
|
+
transition?: boolean;
|
|
35
|
+
appear?: boolean;
|
|
36
|
+
};
|
|
37
|
+
events(): {} & {
|
|
38
|
+
[evt: string]: CustomEvent<any>;
|
|
39
|
+
};
|
|
40
|
+
slots(): {};
|
|
41
|
+
bindings(): "ref";
|
|
42
|
+
exports(): {};
|
|
43
|
+
}
|
|
44
|
+
interface $$IsomorphicComponent {
|
|
45
|
+
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']>> & {
|
|
46
|
+
$$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
|
|
47
|
+
} & ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
48
|
+
<TTag extends ElementType = typeof DEFAULT_TRANSITION_CHILD_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {
|
|
49
|
+
$$events?: ReturnType<__sveltets_Render<TTag>['events']>;
|
|
50
|
+
}): ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
51
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
52
|
+
}
|
|
53
|
+
declare const InternalTransitionChild: $$IsomorphicComponent;
|
|
54
|
+
type InternalTransitionChild<TTag extends ElementType = typeof DEFAULT_TRANSITION_CHILD_TAG> = InstanceType<typeof InternalTransitionChild<TTag>>;
|
|
55
|
+
export default InternalTransitionChild;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
<script lang="ts" module>import { State, useOpenClosed } from "../internal/open-closed.js";
|
|
2
|
+
import { setContext, untrack } from "svelte";
|
|
3
|
+
import {
|
|
4
|
+
DEFAULT_TRANSITION_CHILD_TAG,
|
|
5
|
+
TransitionChildRenderFeatures
|
|
6
|
+
} from "./TransitionChild.svelte";
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_TRANSITION_CHILD_TAG">import InternalTransitionChild, { shouldForwardRef } from "./InternalTransitionChild.svelte";
|
|
10
|
+
import ElementOrComponent from "../utils/ElementOrComponent.svelte";
|
|
11
|
+
import {
|
|
12
|
+
hasChildren,
|
|
13
|
+
TreeStates,
|
|
14
|
+
useNesting
|
|
15
|
+
} from "./context.svelte.js";
|
|
16
|
+
let { ref = $bindable(), show, ..._props } = $props();
|
|
17
|
+
const { appear = false, unmount = true, ...theirProps } = $derived(_props);
|
|
18
|
+
const requiresRef = shouldForwardRef(_props);
|
|
19
|
+
const usesOpenClosedState = useOpenClosed();
|
|
20
|
+
if (show === void 0 && usesOpenClosedState !== null) {
|
|
21
|
+
show = (usesOpenClosedState.value & State.Open) === State.Open;
|
|
22
|
+
}
|
|
23
|
+
if (show === void 0) {
|
|
24
|
+
throw new Error("A <Transition /> is used but it is missing a `show={true | false}` prop.");
|
|
25
|
+
}
|
|
26
|
+
let _state = $state(show ? TreeStates.Visible : TreeStates.Hidden);
|
|
27
|
+
const nestingBag = useNesting({
|
|
28
|
+
done: () => {
|
|
29
|
+
if (show) return;
|
|
30
|
+
_state = TreeStates.Hidden;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
let initial = $state(true);
|
|
34
|
+
let changes = $state([show]);
|
|
35
|
+
$effect(() => {
|
|
36
|
+
if (untrack(() => initial) === false) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (changes[changes.length - 1] !== show) {
|
|
40
|
+
changes.push(show);
|
|
41
|
+
initial = false;
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
$effect(() => {
|
|
45
|
+
if (show) {
|
|
46
|
+
_state = TreeStates.Visible;
|
|
47
|
+
} else if (!hasChildren(nestingBag) && untrack(() => ref)) {
|
|
48
|
+
_state = TreeStates.Hidden;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
const sharedProps = $derived({ unmount });
|
|
52
|
+
const beforeEnter = () => {
|
|
53
|
+
if (initial) initial = false;
|
|
54
|
+
_props.beforeEnter?.();
|
|
55
|
+
};
|
|
56
|
+
const beforeLeave = () => {
|
|
57
|
+
if (initial) initial = false;
|
|
58
|
+
_props.beforeLeave?.();
|
|
59
|
+
};
|
|
60
|
+
setContext("NestingContext", nestingBag);
|
|
61
|
+
setContext("TransitionContext", {
|
|
62
|
+
get show() {
|
|
63
|
+
return show;
|
|
64
|
+
},
|
|
65
|
+
get appear() {
|
|
66
|
+
return appear;
|
|
67
|
+
},
|
|
68
|
+
get initial() {
|
|
69
|
+
return initial;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
const InternalChild = InternalTransitionChild;
|
|
73
|
+
</script>
|
|
74
|
+
|
|
75
|
+
{#snippet children()}
|
|
76
|
+
<InternalChild bind:ref {...sharedProps} {...theirProps} {beforeEnter} {beforeLeave} />
|
|
77
|
+
{/snippet}
|
|
78
|
+
|
|
79
|
+
<ElementOrComponent
|
|
80
|
+
ourProps={{
|
|
81
|
+
...sharedProps,
|
|
82
|
+
children,
|
|
83
|
+
}}
|
|
84
|
+
theirProps={{}}
|
|
85
|
+
defaultTag={"svelte:fragment"}
|
|
86
|
+
features={TransitionChildRenderFeatures}
|
|
87
|
+
visible={_state === TreeStates.Visible}
|
|
88
|
+
name="Transition"
|
|
89
|
+
/>
|