@pzerelles/headlessui-svelte 2.1.2-next.5 → 2.1.2-next.51
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 +16 -19
- package/dist/button/Button.svelte.d.ts +8 -36
- package/dist/button/index.d.ts +1 -1
- package/dist/button/index.js +1 -1
- package/dist/checkbox/Checkbox.svelte +31 -27
- package/dist/checkbox/Checkbox.svelte.d.ts +17 -38
- package/dist/checkbox/index.d.ts +1 -1
- package/dist/checkbox/index.js +1 -1
- package/dist/close-button/CloseButton.svelte +4 -7
- package/dist/close-button/CloseButton.svelte.d.ts +3 -46
- package/dist/close-button/index.d.ts +1 -0
- package/dist/close-button/index.js +1 -0
- package/dist/data-interactive/DataInteractive.svelte +6 -22
- package/dist/data-interactive/DataInteractive.svelte.d.ts +9 -34
- package/dist/data-interactive/index.d.ts +1 -1
- package/dist/data-interactive/index.js +1 -1
- package/dist/description/Description.svelte +29 -24
- package/dist/description/Description.svelte.d.ts +9 -30
- package/dist/description/context.svelte.js +14 -16
- package/dist/description/index.d.ts +1 -1
- package/dist/dialog/Dialog.svelte +315 -31
- package/dist/dialog/Dialog.svelte.d.ts +7 -45
- package/dist/dialog/DialogBackdrop.svelte +11 -14
- package/dist/dialog/DialogBackdrop.svelte.d.ts +8 -33
- package/dist/dialog/DialogPanel.svelte +23 -19
- package/dist/dialog/DialogPanel.svelte.d.ts +8 -34
- package/dist/dialog/DialogTitle.svelte +17 -8
- package/dist/dialog/DialogTitle.svelte.d.ts +9 -30
- package/dist/dialog/context.svelte.js +2 -2
- package/dist/dialog/index.d.ts +4 -4
- package/dist/dialog/index.js +4 -4
- package/dist/disclosure/Disclosure.svelte +61 -0
- package/dist/disclosure/Disclosure.svelte.d.ts +14 -0
- package/dist/disclosure/DisclosureButton.svelte +191 -0
- package/dist/disclosure/DisclosureButton.svelte.d.ts +19 -0
- package/dist/disclosure/DisclosurePanel.svelte +96 -0
- package/dist/disclosure/DisclosurePanel.svelte.d.ts +16 -0
- package/dist/disclosure/context.svelte.d.ts +32 -0
- package/dist/disclosure/context.svelte.js +94 -0
- package/dist/disclosure/index.d.ts +3 -0
- package/dist/disclosure/index.js +3 -0
- package/dist/field/Field.svelte +27 -26
- package/dist/field/Field.svelte.d.ts +7 -34
- package/dist/field/index.d.ts +1 -1
- package/dist/fieldset/Fieldset.svelte +21 -20
- package/dist/fieldset/Fieldset.svelte.d.ts +8 -35
- package/dist/fieldset/index.d.ts +1 -1
- package/dist/focus-trap/FocusTrap.svelte +29 -36
- package/dist/focus-trap/FocusTrap.svelte.d.ts +8 -38
- package/dist/hooks/use-controllable.svelte.js +3 -2
- package/dist/hooks/use-did-element-move.svelte.js +5 -10
- package/dist/hooks/use-disabled.d.ts +6 -1
- package/dist/hooks/use-disabled.js +10 -5
- package/dist/hooks/use-element-size.svelte.js +1 -1
- package/dist/hooks/use-event-listener.svelte.d.ts +1 -1
- package/dist/hooks/use-event-listener.svelte.js +3 -1
- package/dist/hooks/use-focus-ring.svelte.js +1 -1
- package/dist/hooks/use-inert-others.svelte.js +10 -10
- package/dist/hooks/use-is-top-layer.svelte.js +2 -2
- package/dist/hooks/use-resolve-button-type.svelte.js +0 -1
- package/dist/hooks/use-root-containers.svelte.d.ts +2 -2
- package/dist/hooks/use-root-containers.svelte.js +5 -5
- package/dist/hooks/use-tab-direction.svelte.js +1 -1
- package/dist/hooks/use-transition.svelte.js +29 -4
- package/dist/index.d.ts +6 -2
- package/dist/index.js +6 -2
- package/dist/input/Input.svelte +28 -21
- package/dist/input/Input.svelte.d.ts +16 -33
- package/dist/input/index.d.ts +1 -1
- package/dist/input/index.js +1 -1
- package/dist/internal/FloatingProvider.svelte +17 -0
- package/dist/internal/FloatingProvider.svelte.d.ts +8 -0
- package/dist/internal/FocusSentinel.svelte +33 -32
- package/dist/internal/FocusSentinel.svelte.d.ts +4 -18
- package/dist/internal/ForcePortalRoot.svelte.d.ts +4 -18
- package/dist/internal/FormFields.svelte +18 -13
- package/dist/internal/FormFields.svelte.d.ts +4 -18
- package/dist/internal/FormFieldsProvider.svelte +17 -0
- package/dist/internal/FormFieldsProvider.svelte.d.ts +7 -0
- package/dist/internal/FormResolver.svelte +6 -2
- package/dist/internal/FormResolver.svelte.d.ts +4 -18
- package/dist/internal/Hidden.svelte +10 -10
- package/dist/internal/Hidden.svelte.d.ts +6 -33
- package/dist/internal/MainTreeProvider.svelte +1 -1
- package/dist/internal/MainTreeProvider.svelte.d.ts +4 -18
- package/dist/internal/Portal.svelte.d.ts +4 -18
- package/dist/internal/floating-provider.svelte.d.ts +3 -0
- package/dist/internal/floating-provider.svelte.js +206 -0
- package/dist/internal/floating.svelte.d.ts +46 -22
- package/dist/internal/floating.svelte.js +90 -272
- package/dist/internal/form-fields.svelte.d.ts +10 -0
- package/dist/internal/form-fields.svelte.js +23 -0
- package/dist/internal/frozen.svelte.js +1 -1
- package/dist/label/Label.svelte +17 -13
- package/dist/label/Label.svelte.d.ts +8 -33
- package/dist/label/context.svelte.js +1 -1
- package/dist/label/index.d.ts +1 -1
- package/dist/legend/Legend.svelte +22 -15
- package/dist/legend/Legend.svelte.d.ts +10 -34
- package/dist/listbox/Listbox.svelte +79 -151
- package/dist/listbox/Listbox.svelte.d.ts +16 -91
- package/dist/listbox/ListboxButton.svelte +31 -29
- package/dist/listbox/ListboxButton.svelte.d.ts +8 -38
- package/dist/listbox/ListboxOption.svelte +40 -27
- package/dist/listbox/ListboxOption.svelte.d.ts +16 -32
- package/dist/listbox/ListboxOptions.svelte +126 -72
- package/dist/listbox/ListboxOptions.svelte.d.ts +8 -43
- package/dist/listbox/ListboxSelectedOption.svelte +24 -26
- package/dist/listbox/ListboxSelectedOption.svelte.d.ts +14 -39
- package/dist/listbox/context.svelte.d.ts +76 -0
- package/dist/listbox/context.svelte.js +36 -0
- package/dist/listbox/index.d.ts +5 -5
- package/dist/listbox/index.js +4 -4
- package/dist/menu/Menu.svelte +22 -266
- package/dist/menu/Menu.svelte.d.ts +7 -37
- package/dist/menu/MenuButton.svelte +29 -24
- package/dist/menu/MenuButton.svelte.d.ts +8 -39
- package/dist/menu/MenuHeading.svelte +12 -16
- package/dist/menu/MenuHeading.svelte.d.ts +7 -36
- package/dist/menu/MenuItem.svelte +18 -23
- package/dist/menu/MenuItem.svelte.d.ts +9 -39
- package/dist/menu/MenuItems.svelte +33 -34
- package/dist/menu/MenuItems.svelte.d.ts +8 -43
- package/dist/menu/MenuSection.svelte +9 -12
- package/dist/menu/MenuSection.svelte.d.ts +7 -33
- package/dist/menu/MenuSeparator.svelte +9 -12
- package/dist/menu/MenuSeparator.svelte.d.ts +7 -33
- package/dist/menu/context.svelte.d.ts +2 -1
- package/dist/menu/context.svelte.js +212 -2
- package/dist/menu/index.d.ts +7 -7
- package/dist/menu/index.js +3 -3
- package/dist/popover/Popover.svelte +228 -0
- package/dist/popover/Popover.svelte.d.ts +15 -0
- package/dist/popover/PopoverBackdrop.svelte +83 -0
- package/dist/popover/PopoverBackdrop.svelte.d.ts +17 -0
- package/dist/popover/PopoverButton.svelte +324 -0
- package/dist/popover/PopoverButton.svelte.d.ts +21 -0
- package/dist/popover/PopoverGroup.svelte +66 -0
- package/dist/popover/PopoverGroup.svelte.d.ts +9 -0
- package/dist/popover/PopoverPanel.svelte +359 -0
- package/dist/popover/PopoverPanel.svelte.d.ts +22 -0
- package/dist/popover/context.svelte.d.ts +51 -0
- package/dist/popover/context.svelte.js +108 -0
- package/dist/popover/index.d.ts +5 -0
- package/dist/popover/index.js +5 -0
- package/dist/portal/InternalPortal.svelte +17 -17
- package/dist/portal/InternalPortal.svelte.d.ts +6 -33
- package/dist/portal/Portal.svelte +7 -6
- package/dist/portal/Portal.svelte.d.ts +3 -22
- package/dist/portal/PortalGroup.svelte +6 -14
- package/dist/portal/PortalGroup.svelte.d.ts +5 -34
- package/dist/radio-group/Radio.svelte +142 -0
- package/dist/radio-group/Radio.svelte.d.ts +35 -0
- package/dist/radio-group/RadioGroup.svelte +222 -0
- package/dist/radio-group/RadioGroup.svelte.d.ts +34 -0
- package/dist/radio-group/RadioOption.svelte +145 -0
- package/dist/radio-group/RadioOption.svelte.d.ts +37 -0
- package/dist/radio-group/contest.svelte.d.ts +30 -0
- package/dist/radio-group/contest.svelte.js +40 -0
- package/dist/radio-group/index.d.ts +3 -0
- package/dist/radio-group/index.js +3 -0
- package/dist/select/Select.svelte +112 -0
- package/dist/select/Select.svelte.d.ts +21 -0
- package/dist/select/index.d.ts +1 -0
- package/dist/select/index.js +1 -0
- package/dist/switch/Switch.svelte +27 -28
- package/dist/switch/Switch.svelte.d.ts +9 -42
- package/dist/switch/SwitchGroup.svelte +5 -5
- package/dist/switch/SwitchGroup.svelte.d.ts +8 -30
- package/dist/switch/index.d.ts +1 -1
- package/dist/switch/index.js +1 -1
- package/dist/tabs/Tab.svelte +28 -31
- package/dist/tabs/Tab.svelte.d.ts +8 -36
- package/dist/tabs/TabGroup.svelte +42 -264
- package/dist/tabs/TabGroup.svelte.d.ts +7 -57
- package/dist/tabs/TabList.svelte +13 -16
- package/dist/tabs/TabList.svelte.d.ts +8 -31
- package/dist/tabs/TabPanel.svelte +20 -20
- package/dist/tabs/TabPanel.svelte.d.ts +8 -38
- package/dist/tabs/TabPanels.svelte +11 -9
- package/dist/tabs/TabPanels.svelte.d.ts +8 -30
- package/dist/tabs/context.svelte.d.ts +31 -0
- package/dist/tabs/context.svelte.js +134 -0
- package/dist/tabs/index.d.ts +5 -5
- package/dist/tabs/index.js +4 -4
- package/dist/textarea/Textarea.svelte +24 -20
- package/dist/textarea/Textarea.svelte.d.ts +18 -30
- package/dist/textarea/index.d.ts +1 -1
- package/dist/textarea/index.js +1 -1
- package/dist/transition/InternalTransitionChild.svelte +36 -22
- package/dist/transition/InternalTransitionChild.svelte.d.ts +6 -37
- package/dist/transition/Transition.svelte +16 -17
- package/dist/transition/Transition.svelte.d.ts +8 -38
- package/dist/transition/TransitionChild.svelte +13 -12
- package/dist/transition/TransitionChild.svelte.d.ts +11 -38
- package/dist/transition/context.svelte.js +11 -11
- package/dist/transition/index.d.ts +2 -2
- package/dist/transition/index.js +2 -2
- package/dist/utils/DisabledProvider.svelte +10 -0
- package/dist/utils/DisabledProvider.svelte.d.ts +8 -0
- package/dist/utils/ElementOrComponent.svelte +58 -17
- package/dist/utils/ElementOrComponent.svelte.d.ts +19 -30
- package/dist/utils/StableCollection.svelte.d.ts +4 -18
- package/dist/utils/floating-ui/svelte/components/FloatingNode.svelte +32 -0
- package/dist/utils/floating-ui/svelte/components/FloatingNode.svelte.d.ts +8 -0
- package/dist/utils/floating-ui/svelte/components/FloatingTree.svelte +94 -0
- package/dist/utils/floating-ui/svelte/components/FloatingTree.svelte.d.ts +26 -0
- package/dist/utils/floating-ui/svelte/hooks/useFloating.svelte.d.ts +6 -0
- package/dist/utils/floating-ui/svelte/hooks/useFloating.svelte.js +158 -0
- package/dist/utils/floating-ui/svelte/hooks/useFloatingRootContext.svelte.d.ts +11 -0
- package/dist/utils/floating-ui/svelte/hooks/useFloatingRootContext.svelte.js +53 -0
- package/dist/utils/floating-ui/svelte/hooks/useId.svelte.d.ts +9 -0
- package/dist/utils/floating-ui/svelte/hooks/useId.svelte.js +28 -0
- package/dist/utils/floating-ui/svelte/hooks/useInteractions.svelte.d.ts +23 -0
- package/dist/utils/floating-ui/svelte/hooks/useInteractions.svelte.js +72 -0
- package/dist/utils/floating-ui/svelte/index.d.ts +5 -0
- package/dist/utils/floating-ui/svelte/index.js +5 -0
- package/dist/utils/floating-ui/svelte/inner.svelte.d.ts +83 -0
- package/dist/utils/floating-ui/svelte/inner.svelte.js +178 -0
- package/dist/utils/floating-ui/svelte/types.d.ts +114 -0
- package/dist/utils/floating-ui/svelte/utils/createPubSub.d.ts +5 -0
- package/dist/utils/floating-ui/svelte/utils/createPubSub.js +14 -0
- package/dist/utils/floating-ui/svelte/utils/getFloatingFocusElement.d.ts +2 -0
- package/dist/utils/floating-ui/svelte/utils/getFloatingFocusElement.js +13 -0
- package/dist/utils/floating-ui/svelte/utils/log.d.ts +2 -0
- package/dist/utils/floating-ui/svelte/utils/log.js +19 -0
- package/dist/utils/floating-ui/svelte/utils.d.ts +19 -0
- package/dist/utils/floating-ui/svelte/utils.js +136 -0
- package/dist/utils/floating-ui/svelte-dom/arrow.d.ts +22 -0
- package/dist/utils/floating-ui/svelte-dom/arrow.js +29 -0
- package/dist/utils/floating-ui/svelte-dom/index.d.ts +2 -0
- package/dist/utils/floating-ui/svelte-dom/index.js +2 -0
- package/dist/utils/floating-ui/svelte-dom/types.d.ts +80 -0
- package/dist/utils/floating-ui/svelte-dom/types.js +3 -0
- package/dist/utils/floating-ui/svelte-dom/useFloating.svelte.d.ts +6 -0
- package/dist/utils/floating-ui/svelte-dom/useFloating.svelte.js +183 -0
- package/dist/utils/floating-ui/svelte-dom/utils/deepEqual.d.ts +1 -0
- package/dist/utils/floating-ui/svelte-dom/utils/deepEqual.js +50 -0
- package/dist/utils/floating-ui/svelte-dom/utils/getDPR.d.ts +1 -0
- package/dist/utils/floating-ui/svelte-dom/utils/getDPR.js +7 -0
- package/dist/utils/floating-ui/svelte-dom/utils/roundByDPR.d.ts +1 -0
- package/dist/utils/floating-ui/svelte-dom/utils/roundByDPR.js +5 -0
- package/dist/utils/floating-ui/svelte-dom/utils/useLatestRef.d.ts +4 -0
- package/dist/utils/floating-ui/svelte-dom/utils/useLatestRef.js +7 -0
- package/dist/utils/id.d.ts +1 -1
- package/dist/utils/id.js +1 -1
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/state.js +4 -4
- package/dist/utils/style.d.ts +2 -0
- package/dist/utils/style.js +6 -0
- package/dist/utils/types.d.ts +13 -19
- package/package.json +54 -53
- package/dist/combobox/Combobox.svelte +0 -53
- package/dist/combobox/Combobox.svelte.d.ts +0 -50
- package/dist/dialog/InternalDialog.svelte +0 -294
- package/dist/dialog/InternalDialog.svelte.d.ts +0 -42
- package/dist/internal/HoistFormFields.svelte +0 -14
- package/dist/internal/HoistFormFields.svelte.d.ts +0 -21
- package/dist/internal/id.d.ts +0 -8
- package/dist/internal/id.js +0 -11
- package/dist/listbox/ListboxStates.d.ts +0 -12
- package/dist/listbox/ListboxStates.js +0 -15
- package/dist/utils/Generic.svelte +0 -56
- package/dist/utils/Generic.svelte.d.ts +0 -35
- package/dist/utils/alternative-types.d.ts +0 -21
- /package/dist/utils/{alternative-types.js → floating-ui/svelte/types.js} +0 -0
|
@@ -1,37 +1,34 @@
|
|
|
1
1
|
<script lang="ts" module>
|
|
2
|
-
import type {
|
|
2
|
+
import type { Props } from "../utils/types.js"
|
|
3
3
|
|
|
4
4
|
let DEFAULT_PANEL_TAG = "div" as const
|
|
5
|
-
type PanelRenderPropArg = {
|
|
5
|
+
export type PanelRenderPropArg = {
|
|
6
6
|
open: boolean
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
export type
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
>
|
|
9
|
+
export type DialogPanelOwnProps = {
|
|
10
|
+
element?: HTMLElement
|
|
11
|
+
id?: string
|
|
12
|
+
transition?: boolean
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export type DialogPanelProps = Props<typeof DEFAULT_PANEL_TAG, PanelRenderPropArg, DialogPanelOwnProps>
|
|
18
16
|
</script>
|
|
19
17
|
|
|
20
|
-
<script lang="ts"
|
|
18
|
+
<script lang="ts">
|
|
21
19
|
import { useId } from "../hooks/use-id.js"
|
|
22
20
|
import { DialogStates, useDialogContext } from "./context.svelte.js"
|
|
23
21
|
import ElementOrComponent from "../utils/ElementOrComponent.svelte"
|
|
24
22
|
import { mergeProps } from "../utils/render.js"
|
|
25
23
|
import TransitionChild from "../transition/TransitionChild.svelte"
|
|
26
|
-
import { onMount } from "svelte"
|
|
27
24
|
|
|
28
25
|
let internalId = useId()
|
|
29
26
|
let {
|
|
30
|
-
|
|
27
|
+
element = $bindable(),
|
|
31
28
|
id = `headlessui-dialog-panel-${internalId}`,
|
|
32
29
|
transition = false,
|
|
33
30
|
...theirProps
|
|
34
|
-
}:
|
|
31
|
+
}: DialogPanelProps = $props()
|
|
35
32
|
const _state = useDialogContext("Dialog.Panel")
|
|
36
33
|
const { dialogState, unmount } = $derived(_state)
|
|
37
34
|
|
|
@@ -52,18 +49,25 @@
|
|
|
52
49
|
</script>
|
|
53
50
|
|
|
54
51
|
{#if transition}
|
|
55
|
-
<TransitionChild {unmount} {
|
|
56
|
-
{#snippet children(
|
|
52
|
+
<TransitionChild asChild {unmount} {element}>
|
|
53
|
+
{#snippet children({ props, ...slot })}
|
|
57
54
|
<ElementOrComponent
|
|
58
55
|
ourProps={{ ...ourProps, ...props }}
|
|
59
56
|
{theirProps}
|
|
60
57
|
slots={slot}
|
|
61
58
|
defaultTag={DEFAULT_PANEL_TAG}
|
|
62
59
|
name="DialogPanel"
|
|
63
|
-
bind:
|
|
60
|
+
bind:element
|
|
64
61
|
/>
|
|
65
62
|
{/snippet}
|
|
66
63
|
</TransitionChild>
|
|
67
64
|
{:else}
|
|
68
|
-
<ElementOrComponent
|
|
65
|
+
<ElementOrComponent
|
|
66
|
+
{ourProps}
|
|
67
|
+
{theirProps}
|
|
68
|
+
slots={slot}
|
|
69
|
+
defaultTag={DEFAULT_PANEL_TAG}
|
|
70
|
+
name="DialogPanel"
|
|
71
|
+
bind:element
|
|
72
|
+
/>
|
|
69
73
|
{/if}
|
|
@@ -1,40 +1,14 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Props } from "../utils/types.js";
|
|
2
2
|
declare let DEFAULT_PANEL_TAG: "div";
|
|
3
|
-
type PanelRenderPropArg = {
|
|
3
|
+
export type PanelRenderPropArg = {
|
|
4
4
|
open: boolean;
|
|
5
5
|
};
|
|
6
|
-
export type
|
|
6
|
+
export type DialogPanelOwnProps = {
|
|
7
|
+
element?: HTMLElement;
|
|
7
8
|
id?: string;
|
|
8
9
|
transition?: boolean;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
} & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("as" | "children" | "refName" | "class") | "id" | "transition"> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
|
|
14
|
-
children?: import("../utils/types.js").Children<PanelRenderPropArg> | undefined;
|
|
15
|
-
ref?: HTMLElement;
|
|
16
|
-
} & (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) ? {
|
|
17
|
-
class?: import("../utils/types.js").PropsOf<TTag>["class"] | ((bag: PanelRenderPropArg) => string) | undefined;
|
|
18
|
-
} : {}) & {
|
|
19
|
-
id?: string;
|
|
20
|
-
transition?: boolean;
|
|
21
|
-
};
|
|
22
|
-
events(): {} & {
|
|
23
|
-
[evt: string]: CustomEvent<any>;
|
|
24
|
-
};
|
|
25
|
-
slots(): {};
|
|
26
|
-
bindings(): "ref";
|
|
27
|
-
exports(): {};
|
|
28
|
-
}
|
|
29
|
-
interface $$IsomorphicComponent {
|
|
30
|
-
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']>> & {
|
|
31
|
-
$$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
|
|
32
|
-
} & ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
33
|
-
<TTag extends ElementType = typeof DEFAULT_PANEL_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {
|
|
34
|
-
$$events?: ReturnType<__sveltets_Render<TTag>['events']>;
|
|
35
|
-
}): ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
36
|
-
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
37
|
-
}
|
|
38
|
-
declare const DialogPanel: $$IsomorphicComponent;
|
|
39
|
-
type DialogPanel<TTag extends ElementType = typeof DEFAULT_PANEL_TAG> = InstanceType<typeof DialogPanel<TTag>>;
|
|
10
|
+
};
|
|
11
|
+
export type DialogPanelProps = Props<typeof DEFAULT_PANEL_TAG, PanelRenderPropArg, DialogPanelOwnProps>;
|
|
12
|
+
declare const DialogPanel: import("svelte").Component<DialogPanelProps, {}, "element">;
|
|
13
|
+
type DialogPanel = ReturnType<typeof DialogPanel>;
|
|
40
14
|
export default DialogPanel;
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
<script lang="ts" module>
|
|
2
|
-
import type {
|
|
2
|
+
import type { Props } from "../utils/types.js"
|
|
3
3
|
|
|
4
4
|
let DEFAULT_TITLE_TAG = "h2" as const
|
|
5
|
-
type TitleRenderPropArg = {
|
|
5
|
+
export type TitleRenderPropArg = {
|
|
6
6
|
open: boolean
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
export type
|
|
9
|
+
export type DialogTitleOwnProps = { id?: string; element?: HTMLElement }
|
|
10
|
+
|
|
11
|
+
export type DialogTitleProps = Props<typeof DEFAULT_TITLE_TAG, TitleRenderPropArg, DialogTitleOwnProps>
|
|
10
12
|
|
|
11
13
|
//
|
|
12
14
|
</script>
|
|
13
15
|
|
|
14
|
-
<script lang="ts"
|
|
16
|
+
<script lang="ts">
|
|
15
17
|
import { useId } from "../hooks/use-id.js"
|
|
16
18
|
import { DialogStates, useDialogContext } from "./context.svelte.js"
|
|
17
19
|
import { onMount } from "svelte"
|
|
@@ -20,10 +22,10 @@
|
|
|
20
22
|
|
|
21
23
|
const internalId = useId()
|
|
22
24
|
let {
|
|
23
|
-
|
|
24
|
-
id = `headlessui-dialog-title-${internalId}
|
|
25
|
+
element = $bindable(),
|
|
26
|
+
id = `headlessui-dialog-title-${internalId}`,
|
|
25
27
|
...theirProps
|
|
26
|
-
}:
|
|
28
|
+
}: DialogTitleProps = $props()
|
|
27
29
|
const _state = useDialogContext("Dialog.Panel")
|
|
28
30
|
const { dialogState, setTitleId } = $derived(_state)
|
|
29
31
|
|
|
@@ -41,4 +43,11 @@
|
|
|
41
43
|
)
|
|
42
44
|
</script>
|
|
43
45
|
|
|
44
|
-
<ElementOrComponent
|
|
46
|
+
<ElementOrComponent
|
|
47
|
+
{ourProps}
|
|
48
|
+
{theirProps}
|
|
49
|
+
slots={slot}
|
|
50
|
+
defaultTag={DEFAULT_TITLE_TAG}
|
|
51
|
+
name="DialogTitle"
|
|
52
|
+
bind:element
|
|
53
|
+
/>
|
|
@@ -1,34 +1,13 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Props } from "../utils/types.js";
|
|
2
2
|
declare let DEFAULT_TITLE_TAG: "h2";
|
|
3
|
-
type TitleRenderPropArg = {
|
|
3
|
+
export type TitleRenderPropArg = {
|
|
4
4
|
open: boolean;
|
|
5
5
|
};
|
|
6
|
-
export type
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
} & (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) ? {
|
|
14
|
-
class?: PropsOf<TTag>["class"] | ((bag: TitleRenderPropArg) => string) | undefined;
|
|
15
|
-
} : {});
|
|
16
|
-
events(): {} & {
|
|
17
|
-
[evt: string]: CustomEvent<any>;
|
|
18
|
-
};
|
|
19
|
-
slots(): {};
|
|
20
|
-
bindings(): "ref";
|
|
21
|
-
exports(): {};
|
|
22
|
-
}
|
|
23
|
-
interface $$IsomorphicComponent {
|
|
24
|
-
new <TTag extends ElementType = typeof DEFAULT_TITLE_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
|
-
$$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
|
|
26
|
-
} & ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
27
|
-
<TTag extends ElementType = typeof DEFAULT_TITLE_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {
|
|
28
|
-
$$events?: ReturnType<__sveltets_Render<TTag>['events']>;
|
|
29
|
-
}): ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
30
|
-
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
31
|
-
}
|
|
32
|
-
declare const DialogTitle: $$IsomorphicComponent;
|
|
33
|
-
type DialogTitle<TTag extends ElementType = typeof DEFAULT_TITLE_TAG> = InstanceType<typeof DialogTitle<TTag>>;
|
|
6
|
+
export type DialogTitleOwnProps = {
|
|
7
|
+
id?: string;
|
|
8
|
+
element?: HTMLElement;
|
|
9
|
+
};
|
|
10
|
+
export type DialogTitleProps = Props<typeof DEFAULT_TITLE_TAG, TitleRenderPropArg, DialogTitleOwnProps>;
|
|
11
|
+
declare const DialogTitle: import("svelte").Component<DialogTitleProps, {}, "element">;
|
|
12
|
+
type DialogTitle = ReturnType<typeof DialogTitle>;
|
|
34
13
|
export default DialogTitle;
|
|
@@ -6,8 +6,8 @@ export var DialogStates;
|
|
|
6
6
|
})(DialogStates || (DialogStates = {}));
|
|
7
7
|
export function useDialogContext(component) {
|
|
8
8
|
const context = getContext("DialogContext");
|
|
9
|
-
if (context
|
|
10
|
-
|
|
9
|
+
if (!context) {
|
|
10
|
+
const err = new Error(`<${component} /> is missing a parent <Dialog /> component.`);
|
|
11
11
|
if (Error.captureStackTrace)
|
|
12
12
|
Error.captureStackTrace(err, useDialogContext);
|
|
13
13
|
throw err;
|
package/dist/dialog/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { default as Dialog, type DialogProps } from "./Dialog.svelte";
|
|
2
|
-
export { default as DialogBackdrop, type DialogBackdropProps } from "./DialogBackdrop.svelte";
|
|
3
|
-
export { default as DialogPanel, type DialogPanelProps } from "./DialogPanel.svelte";
|
|
4
|
-
export { default as DialogTitle, type DialogTitleProps } from "./DialogTitle.svelte";
|
|
1
|
+
export { default as Dialog, type DialogProps, type DialogRenderPropArg as DialogSlot, type DialogOwnProps, } from "./Dialog.svelte";
|
|
2
|
+
export { default as DialogBackdrop, type DialogBackdropProps, type BackdropRenderPropArg as DialogBackdropSlot, type DialogBackdropOwnProps, } from "./DialogBackdrop.svelte";
|
|
3
|
+
export { default as DialogPanel, type DialogPanelProps, type PanelRenderPropArg as DialogPanelSlot, type DialogPanelOwnProps, } from "./DialogPanel.svelte";
|
|
4
|
+
export { default as DialogTitle, type DialogTitleProps, type TitleRenderPropArg as DialogTitleSlot, type DialogTitleOwnProps, } from "./DialogTitle.svelte";
|
package/dist/dialog/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { default as Dialog } from "./Dialog.svelte";
|
|
2
|
-
export { default as DialogBackdrop } from "./DialogBackdrop.svelte";
|
|
3
|
-
export { default as DialogPanel } from "./DialogPanel.svelte";
|
|
4
|
-
export { default as DialogTitle } from "./DialogTitle.svelte";
|
|
1
|
+
export { default as Dialog, } from "./Dialog.svelte";
|
|
2
|
+
export { default as DialogBackdrop, } from "./DialogBackdrop.svelte";
|
|
3
|
+
export { default as DialogPanel, } from "./DialogPanel.svelte";
|
|
4
|
+
export { default as DialogTitle, } from "./DialogTitle.svelte";
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import type { Props } from "../utils/types.js"
|
|
3
|
+
|
|
4
|
+
const DEFAULT_DISCLOSURE_TAG = "div" as const
|
|
5
|
+
export type DisclosureRenderPropArg = {
|
|
6
|
+
open: boolean
|
|
7
|
+
close: (focusableElement?: HTMLElement) => void
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export type DisclosureOwnProps = {
|
|
11
|
+
defaultOpen?: boolean
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export type DisclosureProps = Props<typeof DEFAULT_DISCLOSURE_TAG, DisclosureRenderPropArg, DisclosureOwnProps>
|
|
15
|
+
|
|
16
|
+
export * from "./context.svelte.js"
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<script lang="ts">
|
|
20
|
+
import ElementOrComponent from "../utils/ElementOrComponent.svelte"
|
|
21
|
+
import { createDisclosureAPIContext, createDisclosureContext, DisclosureStates } from "./context.svelte.js"
|
|
22
|
+
import { getOwnerDocument } from "../utils/owner.js"
|
|
23
|
+
import { createOpenClosedContext, State } from "../internal/open-closed.js"
|
|
24
|
+
import { createCloseContext } from "../internal/close-provider.js"
|
|
25
|
+
|
|
26
|
+
let { defaultOpen = false, ...theirProps }: DisclosureProps = $props()
|
|
27
|
+
|
|
28
|
+
const context = createDisclosureContext(defaultOpen)
|
|
29
|
+
const { buttonId, disclosureState } = $derived(context)
|
|
30
|
+
|
|
31
|
+
const close = (focusableElement?: HTMLElement) => {
|
|
32
|
+
context.closeDisclosure()
|
|
33
|
+
const ownerDocument = getOwnerDocument(undefined)
|
|
34
|
+
if (!ownerDocument) return
|
|
35
|
+
if (!buttonId) return
|
|
36
|
+
|
|
37
|
+
const restoreElement = (() => {
|
|
38
|
+
if (!focusableElement) return ownerDocument.getElementById(buttonId)
|
|
39
|
+
return focusableElement
|
|
40
|
+
})()
|
|
41
|
+
|
|
42
|
+
restoreElement?.focus()
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
createDisclosureAPIContext(close)
|
|
46
|
+
|
|
47
|
+
const slot = $derived({
|
|
48
|
+
open: disclosureState === DisclosureStates.Open,
|
|
49
|
+
close,
|
|
50
|
+
} satisfies DisclosureRenderPropArg)
|
|
51
|
+
|
|
52
|
+
createOpenClosedContext({
|
|
53
|
+
get value() {
|
|
54
|
+
return disclosureState === DisclosureStates.Open ? State.Open : State.Closed
|
|
55
|
+
},
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
createCloseContext({ close })
|
|
59
|
+
</script>
|
|
60
|
+
|
|
61
|
+
<ElementOrComponent {theirProps} slots={slot} defaultTag={DEFAULT_DISCLOSURE_TAG} name="Disclosure" />
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Props } from "../utils/types.js";
|
|
2
|
+
declare const DEFAULT_DISCLOSURE_TAG: "div";
|
|
3
|
+
export type DisclosureRenderPropArg = {
|
|
4
|
+
open: boolean;
|
|
5
|
+
close: (focusableElement?: HTMLElement) => void;
|
|
6
|
+
};
|
|
7
|
+
export type DisclosureOwnProps = {
|
|
8
|
+
defaultOpen?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export type DisclosureProps = Props<typeof DEFAULT_DISCLOSURE_TAG, DisclosureRenderPropArg, DisclosureOwnProps>;
|
|
11
|
+
export * from "./context.svelte.js";
|
|
12
|
+
declare const Disclosure: import("svelte").Component<DisclosureProps, {}, "">;
|
|
13
|
+
type Disclosure = ReturnType<typeof Disclosure>;
|
|
14
|
+
export default Disclosure;
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import type { Props } from "../utils/types.js"
|
|
3
|
+
|
|
4
|
+
const DEFAULT_BUTTON_TAG = "button" as const
|
|
5
|
+
export type ButtonRenderPropArg = {
|
|
6
|
+
open: boolean
|
|
7
|
+
hover: boolean
|
|
8
|
+
active: boolean
|
|
9
|
+
disabled: boolean
|
|
10
|
+
focus: boolean
|
|
11
|
+
autofocus: boolean
|
|
12
|
+
}
|
|
13
|
+
type ButtonPropsWeControl = "aria-controls" | "aria-expanded"
|
|
14
|
+
|
|
15
|
+
export type DisclosureButtonOwnProps = {
|
|
16
|
+
element?: HTMLButtonElement
|
|
17
|
+
disabled?: boolean
|
|
18
|
+
autofocus?: boolean
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export type DisclosureButtonProps = Props<typeof DEFAULT_BUTTON_TAG, ButtonRenderPropArg, DisclosureButtonOwnProps>
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<script lang="ts">
|
|
25
|
+
import { useId } from "../hooks/use-id.js"
|
|
26
|
+
import { DisclosureStates, useDisclosureContext, useDisclosurePanelContext } from "./context.svelte.js"
|
|
27
|
+
import { onMount, untrack } from "svelte"
|
|
28
|
+
import { useHover } from "../hooks/use-hover.svelte.js"
|
|
29
|
+
import { useActivePress } from "../hooks/use-active-press.svelte.js"
|
|
30
|
+
import { useFocusRing } from "../hooks/use-focus-ring.svelte.js"
|
|
31
|
+
import { useResolveButtonType } from "../hooks/use-resolve-button-type.svelte.js"
|
|
32
|
+
import { mergeProps } from "../utils/render.js"
|
|
33
|
+
import ElementOrComponent from "../utils/ElementOrComponent.svelte"
|
|
34
|
+
|
|
35
|
+
const internalId = useId()
|
|
36
|
+
let {
|
|
37
|
+
element = $bindable(),
|
|
38
|
+
id = `headlessui-disclosure-button-${internalId}`,
|
|
39
|
+
disabled = false,
|
|
40
|
+
autofocus = false,
|
|
41
|
+
...theirProps
|
|
42
|
+
}: DisclosureButtonProps = $props()
|
|
43
|
+
|
|
44
|
+
const context = useDisclosureContext("DisclosureButton")
|
|
45
|
+
const panelContext = useDisclosurePanelContext()
|
|
46
|
+
const isWithinPanel = $derived(!panelContext ? false : panelContext.panelId === context.panelId)
|
|
47
|
+
|
|
48
|
+
onMount(() => {
|
|
49
|
+
context.setButtonElement(element)
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
$effect(() => {
|
|
53
|
+
if (isWithinPanel) return
|
|
54
|
+
;[id]
|
|
55
|
+
return untrack(() => {
|
|
56
|
+
context.setButtonId(id ?? undefined)
|
|
57
|
+
return () => {
|
|
58
|
+
context.setButtonId(undefined)
|
|
59
|
+
}
|
|
60
|
+
})
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
const handleKeyDown = (event: KeyboardEvent) => {
|
|
64
|
+
if (isWithinPanel) {
|
|
65
|
+
if (context.disclosureState === DisclosureStates.Closed) return
|
|
66
|
+
|
|
67
|
+
switch (event.key) {
|
|
68
|
+
case " ":
|
|
69
|
+
case "Enter":
|
|
70
|
+
event.preventDefault()
|
|
71
|
+
event.stopPropagation()
|
|
72
|
+
context.toggleDisclosure()
|
|
73
|
+
context.buttonElement?.focus()
|
|
74
|
+
break
|
|
75
|
+
}
|
|
76
|
+
} else {
|
|
77
|
+
switch (event.key) {
|
|
78
|
+
case " ":
|
|
79
|
+
case "Enter":
|
|
80
|
+
event.preventDefault()
|
|
81
|
+
event.stopPropagation()
|
|
82
|
+
context.toggleDisclosure()
|
|
83
|
+
break
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const handleKeyUp = (event: KeyboardEvent) => {
|
|
89
|
+
switch (event.key) {
|
|
90
|
+
case " ":
|
|
91
|
+
// Required for firefox, event.preventDefault() in handleKeyDown for
|
|
92
|
+
// the Space key doesn't cancel the handleKeyUp, which in turn
|
|
93
|
+
// triggers a *click*.
|
|
94
|
+
event.preventDefault()
|
|
95
|
+
break
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const handleClick = (event: MouseEvent) => {
|
|
100
|
+
//if (isDisabledReactIssue7711(event.currentTarget)) return
|
|
101
|
+
if (disabled) return
|
|
102
|
+
|
|
103
|
+
if (isWithinPanel) {
|
|
104
|
+
context.toggleDisclosure()
|
|
105
|
+
context.buttonElement?.focus()
|
|
106
|
+
} else {
|
|
107
|
+
context.toggleDisclosure()
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const { isHovered: hover, hoverProps } = $derived(
|
|
112
|
+
useHover({
|
|
113
|
+
get disabled() {
|
|
114
|
+
return disabled
|
|
115
|
+
},
|
|
116
|
+
})
|
|
117
|
+
)
|
|
118
|
+
const { pressed: active, pressProps } = $derived(
|
|
119
|
+
useActivePress({
|
|
120
|
+
get disabled() {
|
|
121
|
+
return disabled
|
|
122
|
+
},
|
|
123
|
+
})
|
|
124
|
+
)
|
|
125
|
+
const { isFocusVisible: focus, focusProps } = $derived(
|
|
126
|
+
useFocusRing({
|
|
127
|
+
get autofocus() {
|
|
128
|
+
return autofocus
|
|
129
|
+
},
|
|
130
|
+
})
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
const slot = $derived({
|
|
134
|
+
open: context.disclosureState === DisclosureStates.Open,
|
|
135
|
+
hover,
|
|
136
|
+
active,
|
|
137
|
+
disabled,
|
|
138
|
+
focus,
|
|
139
|
+
autofocus,
|
|
140
|
+
} satisfies ButtonRenderPropArg)
|
|
141
|
+
|
|
142
|
+
const buttonType = useResolveButtonType({
|
|
143
|
+
get props() {
|
|
144
|
+
return { type: theirProps.type ?? undefined, as: DEFAULT_BUTTON_TAG }
|
|
145
|
+
},
|
|
146
|
+
get ref() {
|
|
147
|
+
return { current: context.buttonElement }
|
|
148
|
+
},
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
const ourProps = $derived(
|
|
152
|
+
isWithinPanel
|
|
153
|
+
? mergeProps(
|
|
154
|
+
{
|
|
155
|
+
type: buttonType.type,
|
|
156
|
+
disabled: disabled || undefined,
|
|
157
|
+
autofocus,
|
|
158
|
+
onkeydown: handleKeyDown,
|
|
159
|
+
onclick: handleClick,
|
|
160
|
+
},
|
|
161
|
+
focusProps,
|
|
162
|
+
hoverProps,
|
|
163
|
+
pressProps
|
|
164
|
+
)
|
|
165
|
+
: mergeProps(
|
|
166
|
+
{
|
|
167
|
+
id,
|
|
168
|
+
type: buttonType.type,
|
|
169
|
+
"aria-expanded": context.disclosureState === DisclosureStates.Open,
|
|
170
|
+
"aria-controls": context.panelElement ? context.panelId : undefined,
|
|
171
|
+
disabled: disabled || undefined,
|
|
172
|
+
autofocus,
|
|
173
|
+
onkeydown: handleKeyDown,
|
|
174
|
+
onkeyup: handleKeyUp,
|
|
175
|
+
onclick: handleClick,
|
|
176
|
+
},
|
|
177
|
+
focusProps,
|
|
178
|
+
hoverProps,
|
|
179
|
+
pressProps
|
|
180
|
+
)
|
|
181
|
+
)
|
|
182
|
+
</script>
|
|
183
|
+
|
|
184
|
+
<ElementOrComponent
|
|
185
|
+
{ourProps}
|
|
186
|
+
{theirProps}
|
|
187
|
+
slots={slot}
|
|
188
|
+
defaultTag={DEFAULT_BUTTON_TAG}
|
|
189
|
+
name="DisclosureButton"
|
|
190
|
+
bind:element
|
|
191
|
+
/>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Props } from "../utils/types.js";
|
|
2
|
+
declare const DEFAULT_BUTTON_TAG: "button";
|
|
3
|
+
export type ButtonRenderPropArg = {
|
|
4
|
+
open: boolean;
|
|
5
|
+
hover: boolean;
|
|
6
|
+
active: boolean;
|
|
7
|
+
disabled: boolean;
|
|
8
|
+
focus: boolean;
|
|
9
|
+
autofocus: boolean;
|
|
10
|
+
};
|
|
11
|
+
export type DisclosureButtonOwnProps = {
|
|
12
|
+
element?: HTMLButtonElement;
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
autofocus?: boolean;
|
|
15
|
+
};
|
|
16
|
+
export type DisclosureButtonProps = Props<typeof DEFAULT_BUTTON_TAG, ButtonRenderPropArg, DisclosureButtonOwnProps>;
|
|
17
|
+
declare const DisclosureButton: import("svelte").Component<DisclosureButtonProps, {}, "element">;
|
|
18
|
+
type DisclosureButton = ReturnType<typeof DisclosureButton>;
|
|
19
|
+
export default DisclosureButton;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import { RenderFeatures, type PropsForFeatures } from "../utils/render.js"
|
|
3
|
+
import type { Props } from "../utils/types.js"
|
|
4
|
+
|
|
5
|
+
const DEFAULT_PANEL_TAG = "div" as const
|
|
6
|
+
export type PanelRenderPropArg = {
|
|
7
|
+
open: boolean
|
|
8
|
+
close: (focusableElement?: HTMLElement) => void
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
let PanelRenderFeatures = RenderFeatures.RenderStrategy | RenderFeatures.Static
|
|
12
|
+
|
|
13
|
+
export type DisclosurePanelOwnProps = {
|
|
14
|
+
element?: HTMLElement
|
|
15
|
+
transition?: boolean
|
|
16
|
+
} & PropsForFeatures<typeof PanelRenderFeatures>
|
|
17
|
+
|
|
18
|
+
export type DisclosurePanelProps = Props<typeof DEFAULT_PANEL_TAG, PanelRenderPropArg, DisclosurePanelOwnProps>
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<script lang="ts">
|
|
22
|
+
import { useId } from "../hooks/use-id.js"
|
|
23
|
+
import ElementOrComponent from "../utils/ElementOrComponent.svelte"
|
|
24
|
+
import {
|
|
25
|
+
createDisclosurePanelContext,
|
|
26
|
+
DisclosureStates,
|
|
27
|
+
useDisclosureAPIContext,
|
|
28
|
+
useDisclosureContext,
|
|
29
|
+
} from "./context.svelte.js"
|
|
30
|
+
import { onMount, untrack } from "svelte"
|
|
31
|
+
import { clearOpenClosedContext, State, useOpenClosed } from "../internal/open-closed.js"
|
|
32
|
+
import { transitionDataAttributes, useTransition } from "../hooks/use-transition.svelte.js"
|
|
33
|
+
|
|
34
|
+
const internalId = useId()
|
|
35
|
+
let {
|
|
36
|
+
element = $bindable(),
|
|
37
|
+
id = `headlessui-disclosure-panel-${internalId}`,
|
|
38
|
+
transition = false,
|
|
39
|
+
...theirProps
|
|
40
|
+
}: DisclosurePanelProps = $props()
|
|
41
|
+
const context = useDisclosureContext("DisclosurePanel")
|
|
42
|
+
const { close } = useDisclosureAPIContext("DisclosurePanel")
|
|
43
|
+
|
|
44
|
+
onMount(() => {
|
|
45
|
+
context.setPanelElement(element)
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
$effect(() => {
|
|
49
|
+
;[id]
|
|
50
|
+
return untrack(() => {
|
|
51
|
+
context.setPanelId(id ?? undefined)
|
|
52
|
+
return () => {
|
|
53
|
+
context.setPanelId(undefined)
|
|
54
|
+
}
|
|
55
|
+
})
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
const usesOpenClosedState = useOpenClosed()
|
|
59
|
+
const _transition = useTransition({
|
|
60
|
+
get enabled() {
|
|
61
|
+
return transition
|
|
62
|
+
},
|
|
63
|
+
get element() {
|
|
64
|
+
return element
|
|
65
|
+
},
|
|
66
|
+
get show() {
|
|
67
|
+
return usesOpenClosedState !== null
|
|
68
|
+
? (usesOpenClosedState.value & State.Open) === State.Open
|
|
69
|
+
: context.disclosureState === DisclosureStates.Open
|
|
70
|
+
},
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
const slot = $derived({
|
|
74
|
+
open: context.disclosureState === DisclosureStates.Open,
|
|
75
|
+
close,
|
|
76
|
+
} satisfies PanelRenderPropArg)
|
|
77
|
+
|
|
78
|
+
const ourProps = $derived({
|
|
79
|
+
id,
|
|
80
|
+
...transitionDataAttributes(_transition.data),
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
createDisclosurePanelContext(() => context.panelId)
|
|
84
|
+
clearOpenClosedContext()
|
|
85
|
+
</script>
|
|
86
|
+
|
|
87
|
+
<ElementOrComponent
|
|
88
|
+
{ourProps}
|
|
89
|
+
{theirProps}
|
|
90
|
+
slots={slot}
|
|
91
|
+
defaultTag={DEFAULT_PANEL_TAG}
|
|
92
|
+
features={PanelRenderFeatures}
|
|
93
|
+
visible={_transition.visible}
|
|
94
|
+
name="DisclosurePanel"
|
|
95
|
+
bind:element
|
|
96
|
+
/>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type PropsForFeatures } from "../utils/render.js";
|
|
2
|
+
import type { Props } from "../utils/types.js";
|
|
3
|
+
declare const DEFAULT_PANEL_TAG: "div";
|
|
4
|
+
export type PanelRenderPropArg = {
|
|
5
|
+
open: boolean;
|
|
6
|
+
close: (focusableElement?: HTMLElement) => void;
|
|
7
|
+
};
|
|
8
|
+
declare let PanelRenderFeatures: number;
|
|
9
|
+
export type DisclosurePanelOwnProps = {
|
|
10
|
+
element?: HTMLElement;
|
|
11
|
+
transition?: boolean;
|
|
12
|
+
} & PropsForFeatures<typeof PanelRenderFeatures>;
|
|
13
|
+
export type DisclosurePanelProps = Props<typeof DEFAULT_PANEL_TAG, PanelRenderPropArg, DisclosurePanelOwnProps>;
|
|
14
|
+
declare const DisclosurePanel: import("svelte").Component<DisclosurePanelProps, {}, "element">;
|
|
15
|
+
type DisclosurePanel = ReturnType<typeof DisclosurePanel>;
|
|
16
|
+
export default DisclosurePanel;
|