@pzerelles/headlessui-svelte 2.1.2-next.32 → 2.1.2-next.34
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 +9 -10
- package/dist/button/Button.svelte.d.ts +5 -32
- package/dist/button/index.d.ts +1 -1
- package/dist/checkbox/Checkbox.svelte +15 -12
- package/dist/checkbox/Checkbox.svelte.d.ts +15 -32
- package/dist/checkbox/index.d.ts +1 -1
- package/dist/close-button/CloseButton.svelte +4 -7
- package/dist/close-button/CloseButton.svelte.d.ts +2 -43
- package/dist/close-button/index.d.ts +1 -0
- package/dist/close-button/index.js +1 -0
- package/dist/data-interactive/DataInteractive.svelte +6 -20
- package/dist/data-interactive/DataInteractive.svelte.d.ts +8 -30
- package/dist/data-interactive/index.d.ts +1 -1
- package/dist/data-interactive/index.js +1 -1
- package/dist/description/Description.svelte +15 -12
- package/dist/description/Description.svelte.d.ts +7 -27
- package/dist/dialog/Dialog.svelte +34 -32
- package/dist/dialog/Dialog.svelte.d.ts +4 -41
- package/dist/dialog/DialogBackdrop.svelte +10 -11
- package/dist/dialog/DialogBackdrop.svelte.d.ts +5 -29
- package/dist/dialog/DialogPanel.svelte +18 -11
- package/dist/dialog/DialogPanel.svelte.d.ts +5 -30
- package/dist/dialog/DialogTitle.svelte +19 -8
- package/dist/dialog/DialogTitle.svelte.d.ts +7 -27
- package/dist/dialog/context.svelte.js +1 -1
- package/dist/dialog/index.d.ts +4 -4
- package/dist/dialog/index.js +3 -3
- package/dist/field/Field.svelte +10 -18
- package/dist/field/Field.svelte.d.ts +4 -30
- package/dist/fieldset/Fieldset.svelte +11 -15
- package/dist/fieldset/Fieldset.svelte.d.ts +5 -31
- package/dist/focus-trap/FocusTrap.svelte +21 -26
- 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 +20 -10
- package/dist/input/Input.svelte.d.ts +14 -27
- package/dist/input/index.d.ts +1 -1
- package/dist/internal/FocusSentinel.svelte +33 -32
- package/dist/internal/FormResolver.svelte +5 -1
- package/dist/internal/Hidden.svelte +10 -24
- package/dist/internal/Hidden.svelte.d.ts +5 -30
- package/dist/internal/MainTreeProvider.svelte +1 -1
- package/dist/label/Label.svelte +19 -13
- package/dist/label/Label.svelte.d.ts +7 -31
- package/dist/legend/Legend.svelte +20 -6
- package/dist/legend/Legend.svelte.d.ts +4 -3
- package/dist/listbox/Listbox.svelte +7 -19
- package/dist/listbox/Listbox.svelte.d.ts +12 -35
- package/dist/listbox/ListboxButton.svelte +14 -14
- package/dist/listbox/ListboxButton.svelte.d.ts +6 -32
- package/dist/listbox/ListboxOption.svelte +16 -16
- package/dist/listbox/ListboxOption.svelte.d.ts +13 -26
- package/dist/listbox/ListboxOptions.svelte +13 -12
- package/dist/listbox/ListboxOptions.svelte.d.ts +5 -38
- package/dist/listbox/ListboxSelectedOption.svelte +15 -17
- package/dist/listbox/ListboxSelectedOption.svelte.d.ts +8 -32
- package/dist/listbox/index.d.ts +5 -5
- package/dist/listbox/index.js +4 -4
- package/dist/menu/Menu.svelte +6 -8
- package/dist/menu/Menu.svelte.d.ts +4 -31
- package/dist/menu/MenuButton.svelte +13 -13
- package/dist/menu/MenuButton.svelte.d.ts +5 -34
- package/dist/menu/MenuHeading.svelte +12 -11
- package/dist/menu/MenuHeading.svelte.d.ts +4 -31
- package/dist/menu/MenuItem.svelte +13 -13
- package/dist/menu/MenuItem.svelte.d.ts +6 -32
- package/dist/menu/MenuItems.svelte +13 -14
- package/dist/menu/MenuItems.svelte.d.ts +5 -38
- package/dist/menu/MenuSection.svelte +11 -10
- package/dist/menu/MenuSection.svelte.d.ts +5 -29
- package/dist/menu/MenuSeparator.svelte +11 -9
- package/dist/menu/MenuSeparator.svelte.d.ts +5 -28
- package/dist/menu/index.d.ts +4 -4
- package/dist/menu/index.js +1 -1
- package/dist/popover/Popover.svelte +9 -9
- package/dist/popover/Popover.svelte.d.ts +5 -30
- package/dist/popover/PopoverBackdrop.svelte +16 -13
- package/dist/popover/PopoverBackdrop.svelte.d.ts +7 -34
- package/dist/popover/PopoverButton.svelte +34 -34
- package/dist/popover/PopoverButton.svelte.d.ts +6 -28
- package/dist/popover/PopoverGroup.svelte +15 -17
- package/dist/popover/PopoverGroup.svelte.d.ts +5 -28
- package/dist/popover/PopoverPanel.svelte +47 -42
- package/dist/popover/PopoverPanel.svelte.d.ts +6 -36
- package/dist/popover/index.d.ts +4 -4
- package/dist/popover/index.js +3 -3
- package/dist/portal/InternalPortal.svelte +17 -17
- package/dist/portal/InternalPortal.svelte.d.ts +5 -30
- package/dist/portal/Portal.svelte +7 -6
- package/dist/portal/Portal.svelte.d.ts +2 -18
- package/dist/portal/PortalGroup.svelte +6 -14
- package/dist/portal/PortalGroup.svelte.d.ts +4 -31
- package/dist/select/Select.svelte +11 -10
- package/dist/select/Select.svelte.d.ts +6 -32
- package/dist/select/index.d.ts +1 -1
- package/dist/switch/Switch.svelte +14 -13
- package/dist/switch/Switch.svelte.d.ts +6 -38
- package/dist/switch/SwitchGroup.svelte +5 -5
- package/dist/switch/SwitchGroup.svelte.d.ts +7 -27
- package/dist/switch/index.d.ts +1 -1
- package/dist/tabs/Tab.svelte +13 -13
- package/dist/tabs/Tab.svelte.d.ts +5 -32
- package/dist/tabs/TabGroup.svelte +9 -9
- package/dist/tabs/TabGroup.svelte.d.ts +5 -34
- package/dist/tabs/TabList.svelte +8 -9
- package/dist/tabs/TabList.svelte.d.ts +6 -28
- package/dist/tabs/TabPanel.svelte +12 -12
- package/dist/tabs/TabPanel.svelte.d.ts +5 -34
- package/dist/tabs/TabPanels.svelte +6 -6
- package/dist/tabs/TabPanels.svelte.d.ts +6 -27
- package/dist/tabs/index.d.ts +5 -5
- package/dist/tabs/index.js +1 -1
- package/dist/textarea/Textarea.svelte +13 -11
- package/dist/textarea/Textarea.svelte.d.ts +14 -27
- package/dist/textarea/index.d.ts +1 -1
- package/dist/transition/InternalTransitionChild.svelte +19 -12
- package/dist/transition/InternalTransitionChild.svelte.d.ts +3 -32
- package/dist/transition/Transition.svelte +12 -21
- package/dist/transition/Transition.svelte.d.ts +3 -35
- package/dist/transition/TransitionChild.svelte +9 -10
- package/dist/transition/TransitionChild.svelte.d.ts +8 -34
- package/dist/transition/context.svelte.js +7 -7
- package/dist/transition/index.d.ts +2 -2
- package/dist/transition/index.js +1 -1
- package/dist/utils/ElementOrComponent.svelte +56 -15
- package/dist/utils/ElementOrComponent.svelte.d.ts +30 -23
- package/dist/utils/state.js +4 -4
- package/dist/utils/types.d.ts +12 -9
- package/package.json +12 -12
- package/dist/combobox/Combobox.svelte +0 -53
- package/dist/combobox/Combobox.svelte.d.ts +0 -50
- package/dist/utils/Generic.svelte +0 -57
- package/dist/utils/Generic.svelte.d.ts +0 -31
- package/dist/utils/alternative-types.d.ts +0 -20
- package/dist/utils/alternative-types.js +0 -1
|
@@ -1,42 +1,15 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Props } from "../utils/types.js";
|
|
2
2
|
import { type PropsForFeatures } from "../utils/render.js";
|
|
3
3
|
declare let DEFAULT_BACKDROP_TAG: "div";
|
|
4
|
-
type BackdropRenderPropArg = {
|
|
4
|
+
export type BackdropRenderPropArg = {
|
|
5
5
|
open: boolean;
|
|
6
6
|
};
|
|
7
|
-
type BackdropPropsWeControl = "aria-hidden";
|
|
8
7
|
declare const BackdropRenderFeatures: number;
|
|
9
|
-
export type PopoverBackdropProps
|
|
8
|
+
export type PopoverBackdropProps = Props<typeof DEFAULT_BACKDROP_TAG, BackdropRenderPropArg, {
|
|
9
|
+
element?: HTMLElement;
|
|
10
|
+
id?: string;
|
|
10
11
|
transition?: boolean;
|
|
11
12
|
} & PropsForFeatures<typeof BackdropRenderFeatures>>;
|
|
12
|
-
export type PopoverOverlayProps
|
|
13
|
-
declare
|
|
14
|
-
props(): {
|
|
15
|
-
as?: TTag | undefined;
|
|
16
|
-
} & (Exclude<keyof PropsOf<TTag>, ("slot" | "as" | "children" | "class" | "ref") | "unmount" | "static" | "aria-hidden" | "transition"> extends infer T extends keyof PropsOf<TTag> ? { [P in T]: PropsOf<TTag>[P]; } : never) & {
|
|
17
|
-
children?: import("svelte").Snippet<[BackdropRenderPropArg & {
|
|
18
|
-
props?: Record<string, any>;
|
|
19
|
-
}]> | undefined;
|
|
20
|
-
class?: string | ((bag: BackdropRenderPropArg) => string) | null | undefined;
|
|
21
|
-
ref?: HTMLElement;
|
|
22
|
-
} & {
|
|
23
|
-
transition?: boolean;
|
|
24
|
-
} & {
|
|
25
|
-
static?: boolean | undefined;
|
|
26
|
-
unmount?: boolean | undefined;
|
|
27
|
-
};
|
|
28
|
-
events(): {};
|
|
29
|
-
slots(): {};
|
|
30
|
-
bindings(): "ref";
|
|
31
|
-
exports(): {};
|
|
32
|
-
}
|
|
33
|
-
interface $$IsomorphicComponent {
|
|
34
|
-
new <TTag extends ElementType = typeof DEFAULT_BACKDROP_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_BACKDROP_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 PopoverBackdrop: $$IsomorphicComponent;
|
|
41
|
-
type PopoverBackdrop<TTag extends ElementType = typeof DEFAULT_BACKDROP_TAG> = InstanceType<typeof PopoverBackdrop<TTag>>;
|
|
13
|
+
export type PopoverOverlayProps = PopoverBackdropProps;
|
|
14
|
+
declare const PopoverBackdrop: import("svelte").Component<PopoverBackdropProps, {}, "element">;
|
|
42
15
|
export default PopoverBackdrop;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts" module>
|
|
2
|
-
import type {
|
|
2
|
+
import type { Props } from "../utils/types.js"
|
|
3
3
|
|
|
4
4
|
const DEFAULT_BUTTON_TAG = "button" as const
|
|
5
5
|
export type PopoverButtonSlot = {
|
|
@@ -12,20 +12,19 @@
|
|
|
12
12
|
}
|
|
13
13
|
export type PopoverButtonPropsWeControl = "aria-controls" | "aria-expanded"
|
|
14
14
|
|
|
15
|
-
export type
|
|
16
|
-
|
|
17
|
-
autofocus?: boolean
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export type PopoverButtonProps<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG> = Props<
|
|
21
|
-
TTag,
|
|
15
|
+
export type PopoverButtonProps = Props<
|
|
16
|
+
typeof DEFAULT_BUTTON_TAG,
|
|
22
17
|
PopoverButtonSlot,
|
|
23
|
-
|
|
24
|
-
|
|
18
|
+
{
|
|
19
|
+
element?: HTMLElement
|
|
20
|
+
id?: string
|
|
21
|
+
disabled?: boolean
|
|
22
|
+
autofocus?: boolean
|
|
23
|
+
}
|
|
25
24
|
>
|
|
26
25
|
</script>
|
|
27
26
|
|
|
28
|
-
<script lang="ts"
|
|
27
|
+
<script lang="ts">
|
|
29
28
|
import { useId } from "../hooks/use-id.js"
|
|
30
29
|
import {
|
|
31
30
|
PopoverStates,
|
|
@@ -48,16 +47,15 @@
|
|
|
48
47
|
import { microTask } from "../utils/microTask.js"
|
|
49
48
|
import Hidden, { HiddenFeatures } from "../internal/Hidden.svelte"
|
|
50
49
|
import ElementOrComponent from "../utils/ElementOrComponent.svelte"
|
|
51
|
-
import type { FocusEventHandler } from "svelte/elements"
|
|
52
50
|
|
|
53
51
|
const internalId = useId()
|
|
54
52
|
let {
|
|
55
|
-
|
|
56
|
-
id = `headlessui-popover-button-${internalId}
|
|
53
|
+
element = $bindable(),
|
|
54
|
+
id = `headlessui-popover-button-${internalId}`,
|
|
57
55
|
disabled = false,
|
|
58
|
-
autofocus = false
|
|
56
|
+
autofocus = false,
|
|
59
57
|
...theirProps
|
|
60
|
-
}:
|
|
58
|
+
}: PopoverButtonProps = $props()
|
|
61
59
|
const context = usePopoverContext("PopoverButton")
|
|
62
60
|
const api = usePopoverAPIContext("PopoverButton")
|
|
63
61
|
const { isPortalled } = $derived(api)
|
|
@@ -111,13 +109,13 @@
|
|
|
111
109
|
const floatingReference = useFloatingReference()
|
|
112
110
|
const { setReference } = $derived(floatingReference)
|
|
113
111
|
$effect(() => {
|
|
114
|
-
setReference(
|
|
112
|
+
setReference(element)
|
|
115
113
|
})
|
|
116
114
|
$effect(() => {
|
|
117
115
|
if (isWithinPanel) return
|
|
118
|
-
|
|
116
|
+
element
|
|
119
117
|
untrack(() => {
|
|
120
|
-
if (
|
|
118
|
+
if (element) {
|
|
121
119
|
context.buttons.push(uniqueIdentifier)
|
|
122
120
|
} else {
|
|
123
121
|
let idx = context.buttons.indexOf(uniqueIdentifier)
|
|
@@ -128,10 +126,10 @@
|
|
|
128
126
|
console.warn("You are already using a <PopoverButton /> but only 1 <PopoverButton /> is supported.")
|
|
129
127
|
}
|
|
130
128
|
|
|
131
|
-
if (
|
|
129
|
+
if (element) context.setButton(element)
|
|
132
130
|
})
|
|
133
131
|
})
|
|
134
|
-
const ownerDocument = $derived(getOwnerDocument(
|
|
132
|
+
const ownerDocument = $derived(getOwnerDocument(element))
|
|
135
133
|
|
|
136
134
|
const handleKeyDown = (event: KeyboardEvent) => {
|
|
137
135
|
if (isWithinPanel) {
|
|
@@ -158,8 +156,8 @@
|
|
|
158
156
|
|
|
159
157
|
case "Escape":
|
|
160
158
|
if (context.popoverState !== PopoverStates.Open) return closeOthers?.(context.buttonId!)
|
|
161
|
-
if (!
|
|
162
|
-
if (ownerDocument?.activeElement && !
|
|
159
|
+
if (!element) return
|
|
160
|
+
if (ownerDocument?.activeElement && !element.contains(ownerDocument.activeElement)) {
|
|
163
161
|
return
|
|
164
162
|
}
|
|
165
163
|
event.preventDefault()
|
|
@@ -234,7 +232,7 @@
|
|
|
234
232
|
|
|
235
233
|
const type = useResolveButtonType({
|
|
236
234
|
get props() {
|
|
237
|
-
return { type: theirProps.type, as:
|
|
235
|
+
return { type: theirProps.type ?? undefined, as: element ? element.tagName.toLowerCase() : DEFAULT_BUTTON_TAG }
|
|
238
236
|
},
|
|
239
237
|
get ref() {
|
|
240
238
|
return { current: context.button }
|
|
@@ -311,16 +309,18 @@
|
|
|
311
309
|
slots={slot}
|
|
312
310
|
defaultTag={DEFAULT_BUTTON_TAG}
|
|
313
311
|
name="PopoverButton"
|
|
314
|
-
bind:
|
|
312
|
+
bind:element
|
|
315
313
|
/>
|
|
316
314
|
{#if visible && !isWithinPanel && isPortalled}
|
|
317
|
-
<Hidden
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
315
|
+
<Hidden id={sentinelId} features={HiddenFeatures.Focusable} asChild>
|
|
316
|
+
{#snippet children({ props })}
|
|
317
|
+
<button
|
|
318
|
+
{...props}
|
|
319
|
+
type="button"
|
|
320
|
+
data-headlessui-focus-guard
|
|
321
|
+
onfocus={handleFocus}
|
|
322
|
+
bind:this={context.afterButtonSentinel}>‌</button
|
|
323
|
+
>
|
|
324
|
+
{/snippet}
|
|
325
|
+
</Hidden>
|
|
326
326
|
{/if}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Props } from "../utils/types.js";
|
|
2
2
|
declare const DEFAULT_BUTTON_TAG: "button";
|
|
3
3
|
export type PopoverButtonSlot = {
|
|
4
4
|
open: boolean;
|
|
@@ -9,33 +9,11 @@ export type PopoverButtonSlot = {
|
|
|
9
9
|
autofocus: boolean;
|
|
10
10
|
};
|
|
11
11
|
export type PopoverButtonPropsWeControl = "aria-controls" | "aria-expanded";
|
|
12
|
-
export type
|
|
12
|
+
export type PopoverButtonProps = Props<typeof DEFAULT_BUTTON_TAG, PopoverButtonSlot, {
|
|
13
|
+
element?: HTMLElement;
|
|
14
|
+
id?: string;
|
|
13
15
|
disabled?: boolean;
|
|
14
16
|
autofocus?: boolean;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG> {
|
|
18
|
-
props(): {
|
|
19
|
-
as?: TTag | undefined;
|
|
20
|
-
} & (Exclude<keyof PropsOf<TTag>, ("slot" | "as" | "children" | "class" | "ref") | PopoverButtonPropsWeControl | keyof PopoverButtonComponentProps> extends infer T extends keyof PropsOf<TTag> ? { [P in T]: PropsOf<TTag>[P]; } : never) & {
|
|
21
|
-
children?: import("svelte").Snippet<[PopoverButtonSlot & {
|
|
22
|
-
props?: Record<string, any>;
|
|
23
|
-
}]> | undefined;
|
|
24
|
-
class?: string | ((bag: PopoverButtonSlot) => string) | null | undefined;
|
|
25
|
-
ref?: HTMLElement;
|
|
26
|
-
} & PopoverButtonComponentProps;
|
|
27
|
-
events(): {};
|
|
28
|
-
slots(): {};
|
|
29
|
-
bindings(): "ref";
|
|
30
|
-
exports(): {};
|
|
31
|
-
}
|
|
32
|
-
interface $$IsomorphicComponent {
|
|
33
|
-
new <TTag extends ElementType = typeof DEFAULT_BUTTON_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']>> & {
|
|
34
|
-
$$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
|
|
35
|
-
} & ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
36
|
-
<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
37
|
-
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
38
|
-
}
|
|
39
|
-
declare const PopoverButton: $$IsomorphicComponent;
|
|
40
|
-
type PopoverButton<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG> = InstanceType<typeof PopoverButton<TTag>>;
|
|
17
|
+
}>;
|
|
18
|
+
declare const PopoverButton: import("svelte").Component<PopoverButtonProps, {}, "element">;
|
|
41
19
|
export default PopoverButton;
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
<script lang="ts" module>
|
|
2
|
-
import type {
|
|
2
|
+
import type { Props } from "../utils/types.js"
|
|
3
3
|
import { setContext } from "svelte"
|
|
4
4
|
|
|
5
5
|
const DEFAULT_GROUP_TAG = "div" as const
|
|
6
|
-
type GroupRenderPropArg = {}
|
|
7
|
-
type GroupPropsWeControl = never
|
|
8
6
|
|
|
9
|
-
export type PopoverGroupProps
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
export type PopoverGroupProps = Props<
|
|
8
|
+
typeof DEFAULT_GROUP_TAG,
|
|
9
|
+
{},
|
|
10
|
+
{
|
|
11
|
+
element?: HTMLElement
|
|
12
|
+
}
|
|
13
13
|
>
|
|
14
14
|
</script>
|
|
15
15
|
|
|
16
|
-
<script lang="ts"
|
|
16
|
+
<script lang="ts">
|
|
17
17
|
import type { PopoverGroupContext, PopoverRegisterBag } from "./context.svelte"
|
|
18
18
|
import MainTreeProvider from "../internal/MainTreeProvider.svelte"
|
|
19
19
|
import ElementOrComponent from "../utils/ElementOrComponent.svelte"
|
|
20
20
|
import { getOwnerDocument } from "../utils/owner.js"
|
|
21
21
|
|
|
22
|
-
let {
|
|
22
|
+
let { element = $bindable(), ...theirProps }: PopoverGroupProps = $props()
|
|
23
23
|
|
|
24
24
|
const popovers = $state<PopoverRegisterBag[]>([])
|
|
25
25
|
|
|
@@ -34,17 +34,17 @@
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
const isFocusWithinPopoverGroup = () => {
|
|
37
|
-
const ownerDocument = getOwnerDocument(
|
|
37
|
+
const ownerDocument = getOwnerDocument(element)
|
|
38
38
|
if (!ownerDocument) return false
|
|
39
|
-
|
|
39
|
+
const el = ownerDocument.activeElement
|
|
40
40
|
|
|
41
|
-
if (
|
|
41
|
+
if (element?.contains(element)) return true
|
|
42
42
|
|
|
43
43
|
// Check if the focus is in one of the button or panel elements. This is important in case you are rendering inside a Portal.
|
|
44
44
|
return popovers.some((bag) => {
|
|
45
45
|
return (
|
|
46
|
-
ownerDocument!.getElementById(bag.buttonId!)?.contains(
|
|
47
|
-
ownerDocument!.getElementById(bag.panelId!)?.contains(
|
|
46
|
+
ownerDocument!.getElementById(bag.buttonId!)?.contains(el) ||
|
|
47
|
+
ownerDocument!.getElementById(bag.panelId!)?.contains(el)
|
|
48
48
|
)
|
|
49
49
|
})
|
|
50
50
|
}
|
|
@@ -61,10 +61,8 @@
|
|
|
61
61
|
isFocusWithinPopoverGroup,
|
|
62
62
|
closeOthers,
|
|
63
63
|
})
|
|
64
|
-
|
|
65
|
-
const slot = {} satisfies GroupRenderPropArg
|
|
66
64
|
</script>
|
|
67
65
|
|
|
68
66
|
<MainTreeProvider>
|
|
69
|
-
<ElementOrComponent {theirProps}
|
|
67
|
+
<ElementOrComponent {theirProps} defaultTag={DEFAULT_GROUP_TAG} name="PopoverGroup" bind:element />
|
|
70
68
|
</MainTreeProvider>
|
|
@@ -1,30 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Props } from "../utils/types.js";
|
|
2
2
|
declare const DEFAULT_GROUP_TAG: "div";
|
|
3
|
-
type
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
declare
|
|
7
|
-
props(): {
|
|
8
|
-
as?: TTag | undefined;
|
|
9
|
-
} & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, "slot" | "as" | "children" | "class" | "ref"> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
|
|
10
|
-
children?: import("svelte").Snippet<[{
|
|
11
|
-
props?: Record<string, any>;
|
|
12
|
-
}]> | undefined;
|
|
13
|
-
class?: string | ((bag: GroupRenderPropArg) => string) | null | undefined;
|
|
14
|
-
ref?: HTMLElement;
|
|
15
|
-
};
|
|
16
|
-
events(): {};
|
|
17
|
-
slots(): {};
|
|
18
|
-
bindings(): "ref";
|
|
19
|
-
exports(): {};
|
|
20
|
-
}
|
|
21
|
-
interface $$IsomorphicComponent {
|
|
22
|
-
new <TTag extends ElementType = typeof DEFAULT_GROUP_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']>> & {
|
|
23
|
-
$$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
|
|
24
|
-
} & ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
25
|
-
<TTag extends ElementType = typeof DEFAULT_GROUP_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
26
|
-
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
27
|
-
}
|
|
28
|
-
declare const PopoverGroup: $$IsomorphicComponent;
|
|
29
|
-
type PopoverGroup<TTag extends ElementType = typeof DEFAULT_GROUP_TAG> = InstanceType<typeof PopoverGroup<TTag>>;
|
|
3
|
+
export type PopoverGroupProps = Props<typeof DEFAULT_GROUP_TAG, {}, {
|
|
4
|
+
element?: HTMLElement;
|
|
5
|
+
}>;
|
|
6
|
+
declare const PopoverGroup: import("svelte").Component<PopoverGroupProps, {}, "element">;
|
|
30
7
|
export default PopoverGroup;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<script lang="ts" module>
|
|
2
|
-
import type {
|
|
2
|
+
import type { Props } from "../utils/types.js"
|
|
3
3
|
import { RenderFeatures } from "../utils/render.js"
|
|
4
4
|
|
|
5
5
|
const DEFAULT_PANEL_TAG = "div" as const
|
|
6
|
-
type PanelRenderPropArg = {
|
|
6
|
+
export type PanelRenderPropArg = {
|
|
7
7
|
open: boolean
|
|
8
8
|
close: (focusableElement?: HTMLElement) => void
|
|
9
9
|
}
|
|
@@ -12,11 +12,12 @@
|
|
|
12
12
|
|
|
13
13
|
type PanelPropsWeControl = "tabIndex"
|
|
14
14
|
|
|
15
|
-
export type PopoverPanelProps
|
|
16
|
-
|
|
15
|
+
export type PopoverPanelProps = Props<
|
|
16
|
+
typeof DEFAULT_PANEL_TAG,
|
|
17
17
|
PanelRenderPropArg,
|
|
18
|
-
PanelPropsWeControl,
|
|
19
18
|
{
|
|
19
|
+
element?: HTMLElement
|
|
20
|
+
id?: string
|
|
20
21
|
focus?: boolean
|
|
21
22
|
anchor?: AnchorProps
|
|
22
23
|
portal?: boolean
|
|
@@ -30,7 +31,7 @@
|
|
|
30
31
|
>
|
|
31
32
|
</script>
|
|
32
33
|
|
|
33
|
-
<script lang="ts"
|
|
34
|
+
<script lang="ts">
|
|
34
35
|
import { useId } from "../hooks/use-id.js"
|
|
35
36
|
import ElementOrComponent from "../utils/ElementOrComponent.svelte"
|
|
36
37
|
import { mergeProps } from "../utils/render.js"
|
|
@@ -63,15 +64,15 @@
|
|
|
63
64
|
|
|
64
65
|
let internalId = useId()
|
|
65
66
|
let {
|
|
66
|
-
|
|
67
|
-
id = `headlessui-popover-panel-${internalId}
|
|
67
|
+
element = $bindable(),
|
|
68
|
+
id = `headlessui-popover-panel-${internalId}`,
|
|
68
69
|
focus = false,
|
|
69
70
|
anchor: rawAnchor,
|
|
70
71
|
portal: theirPortal = false,
|
|
71
72
|
modal = false,
|
|
72
73
|
transition = false,
|
|
73
74
|
...theirProps
|
|
74
|
-
}:
|
|
75
|
+
}: PopoverPanelProps = $props()
|
|
75
76
|
|
|
76
77
|
const context = usePopoverContext("PopoverPanel")
|
|
77
78
|
const api = usePopoverAPIContext("PopoverPanel")
|
|
@@ -98,10 +99,10 @@
|
|
|
98
99
|
const portal = $derived(!!anchor || theirPortal)
|
|
99
100
|
|
|
100
101
|
$effect(() => {
|
|
101
|
-
if (anchor) setFloating(
|
|
102
|
-
untrack(() => context.setPanel(
|
|
102
|
+
if (anchor) setFloating(element ?? null)
|
|
103
|
+
untrack(() => context.setPanel(element))
|
|
103
104
|
})
|
|
104
|
-
const ownerDocument = $derived(getOwnerDocument(
|
|
105
|
+
const ownerDocument = $derived(getOwnerDocument(element))
|
|
105
106
|
|
|
106
107
|
$effect(() => {
|
|
107
108
|
id
|
|
@@ -119,7 +120,7 @@
|
|
|
119
120
|
return transition
|
|
120
121
|
},
|
|
121
122
|
get element() {
|
|
122
|
-
return
|
|
123
|
+
return element
|
|
123
124
|
},
|
|
124
125
|
get show() {
|
|
125
126
|
return usesOpenClosedState !== null
|
|
@@ -157,8 +158,8 @@
|
|
|
157
158
|
switch (event.key) {
|
|
158
159
|
case "Escape":
|
|
159
160
|
if (context.popoverState !== PopoverStates.Open) return
|
|
160
|
-
if (!
|
|
161
|
-
if (ownerDocument?.activeElement && !
|
|
161
|
+
if (!element) return
|
|
162
|
+
if (ownerDocument?.activeElement && !element.contains(ownerDocument.activeElement)) {
|
|
162
163
|
return
|
|
163
164
|
}
|
|
164
165
|
event.preventDefault()
|
|
@@ -183,12 +184,12 @@
|
|
|
183
184
|
if (context.__demoMode) return
|
|
184
185
|
if (!focus) return
|
|
185
186
|
if (context.popoverState !== PopoverStates.Open) return
|
|
186
|
-
if (!
|
|
187
|
+
if (!element) return
|
|
187
188
|
|
|
188
189
|
const activeElement = ownerDocument?.activeElement as HTMLElement
|
|
189
|
-
if (
|
|
190
|
+
if (element.contains(activeElement)) return // Already focused within Dialog
|
|
190
191
|
|
|
191
|
-
focusIn(
|
|
192
|
+
focusIn(element, Focus.First)
|
|
192
193
|
}) //, [state.__demoMode, focus, internalPanelRef.current, state.popoverState])
|
|
193
194
|
|
|
194
195
|
const slot = $derived({
|
|
@@ -211,8 +212,8 @@
|
|
|
211
212
|
? (event: FocusEvent) => {
|
|
212
213
|
let el = event.relatedTarget as HTMLElement
|
|
213
214
|
if (!el) return
|
|
214
|
-
if (!
|
|
215
|
-
if (
|
|
215
|
+
if (!element) return
|
|
216
|
+
if (element.contains(el)) return
|
|
216
217
|
|
|
217
218
|
context.closePopover()
|
|
218
219
|
|
|
@@ -229,7 +230,7 @@
|
|
|
229
230
|
|
|
230
231
|
const direction = useTabDirection()
|
|
231
232
|
const handleBeforeFocus = () => {
|
|
232
|
-
let el =
|
|
233
|
+
let el = element as HTMLElement
|
|
233
234
|
if (!el) return
|
|
234
235
|
|
|
235
236
|
function run() {
|
|
@@ -259,7 +260,7 @@
|
|
|
259
260
|
}
|
|
260
261
|
|
|
261
262
|
const handleAfterFocus = () => {
|
|
262
|
-
let el =
|
|
263
|
+
let el = element as HTMLElement
|
|
263
264
|
if (!el) return
|
|
264
265
|
|
|
265
266
|
function run() {
|
|
@@ -277,7 +278,7 @@
|
|
|
277
278
|
|
|
278
279
|
// Ignore sentinel buttons and items inside the panel
|
|
279
280
|
for (const element of combined.slice()) {
|
|
280
|
-
if (element.dataset.headlessuiFocusGuard === "true" ||
|
|
281
|
+
if (element.dataset.headlessuiFocusGuard === "true" || element?.contains(element)) {
|
|
281
282
|
let idx = combined.indexOf(element)
|
|
282
283
|
if (idx !== -1) combined.splice(idx, 1)
|
|
283
284
|
}
|
|
@@ -322,15 +323,17 @@
|
|
|
322
323
|
|
|
323
324
|
<Portal enabled={portal ? theirProps.static || visible : false}>
|
|
324
325
|
{#if visible && isPortalled}
|
|
325
|
-
<Hidden
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
326
|
+
<Hidden asChild id={beforePanelSentinelId} features={HiddenFeatures.Focusable}>
|
|
327
|
+
{#snippet children({ props })}
|
|
328
|
+
<button
|
|
329
|
+
{...props}
|
|
330
|
+
type="button"
|
|
331
|
+
data-headlessui-focus-guard
|
|
332
|
+
onfocus={handleBeforeFocus}
|
|
333
|
+
bind:this={context.beforePanelSentinel}>‌</button
|
|
334
|
+
>
|
|
335
|
+
{/snippet}
|
|
336
|
+
</Hidden>
|
|
334
337
|
{/if}
|
|
335
338
|
<ElementOrComponent
|
|
336
339
|
{ourProps}
|
|
@@ -340,17 +343,19 @@
|
|
|
340
343
|
features={PanelRenderFeatures}
|
|
341
344
|
{visible}
|
|
342
345
|
name="PopoverPanel"
|
|
343
|
-
bind:
|
|
346
|
+
bind:element
|
|
344
347
|
/>
|
|
345
348
|
{#if visible && isPortalled}
|
|
346
|
-
<Hidden
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
349
|
+
<Hidden asChild id={afterPanelSentinelId} features={HiddenFeatures.Focusable}>
|
|
350
|
+
{#snippet children({ props })}
|
|
351
|
+
<button
|
|
352
|
+
{...props}
|
|
353
|
+
type="button"
|
|
354
|
+
data-headlessui-focus-guard
|
|
355
|
+
onfocus={handleAfterFocus}
|
|
356
|
+
bind:this={context.afterPanelSentinel}>‌</button
|
|
357
|
+
>
|
|
358
|
+
{/snippet}
|
|
359
|
+
</Hidden>
|
|
355
360
|
{/if}
|
|
356
361
|
</Portal>
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Props } from "../utils/types.js";
|
|
2
2
|
declare const DEFAULT_PANEL_TAG: "div";
|
|
3
|
-
type PanelRenderPropArg = {
|
|
3
|
+
export type PanelRenderPropArg = {
|
|
4
4
|
open: boolean;
|
|
5
5
|
close: (focusableElement?: HTMLElement) => void;
|
|
6
6
|
};
|
|
7
|
-
type
|
|
8
|
-
|
|
7
|
+
export type PopoverPanelProps = Props<typeof DEFAULT_PANEL_TAG, PanelRenderPropArg, {
|
|
8
|
+
element?: HTMLElement;
|
|
9
|
+
id?: string;
|
|
9
10
|
focus?: boolean;
|
|
10
11
|
anchor?: AnchorProps;
|
|
11
12
|
portal?: boolean;
|
|
@@ -15,36 +16,5 @@ export type PopoverPanelProps<TTag extends ElementType = typeof DEFAULT_PANEL_TA
|
|
|
15
16
|
unmount?: boolean;
|
|
16
17
|
}>;
|
|
17
18
|
import { type AnchorProps } from "../internal/floating.svelte.js";
|
|
18
|
-
declare
|
|
19
|
-
props(): {
|
|
20
|
-
as?: TTag | undefined;
|
|
21
|
-
} & (Exclude<keyof PropsOf<TTag>, ("slot" | "as" | "children" | "class" | "ref") | "focus" | "anchor" | "unmount" | "static" | "tabIndex" | "transition" | "portal" | "modal"> extends infer T extends keyof PropsOf<TTag> ? { [P in T]: PropsOf<TTag>[P]; } : never) & {
|
|
22
|
-
children?: import("svelte").Snippet<[PanelRenderPropArg & {
|
|
23
|
-
props?: Record<string, any>;
|
|
24
|
-
}]> | undefined;
|
|
25
|
-
class?: string | ((bag: PanelRenderPropArg) => string) | null | undefined;
|
|
26
|
-
ref?: HTMLElement;
|
|
27
|
-
} & {
|
|
28
|
-
focus?: boolean;
|
|
29
|
-
anchor?: AnchorProps;
|
|
30
|
-
portal?: boolean;
|
|
31
|
-
modal?: boolean;
|
|
32
|
-
transition?: boolean;
|
|
33
|
-
static?: boolean;
|
|
34
|
-
unmount?: boolean;
|
|
35
|
-
};
|
|
36
|
-
events(): {};
|
|
37
|
-
slots(): {};
|
|
38
|
-
bindings(): "ref";
|
|
39
|
-
exports(): {};
|
|
40
|
-
}
|
|
41
|
-
interface $$IsomorphicComponent {
|
|
42
|
-
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']>> & {
|
|
43
|
-
$$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
|
|
44
|
-
} & ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
45
|
-
<TTag extends ElementType = typeof DEFAULT_PANEL_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
46
|
-
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
47
|
-
}
|
|
48
|
-
declare const PopoverPanel: $$IsomorphicComponent;
|
|
49
|
-
type PopoverPanel<TTag extends ElementType = typeof DEFAULT_PANEL_TAG> = InstanceType<typeof PopoverPanel<TTag>>;
|
|
19
|
+
declare const PopoverPanel: import("svelte").Component<PopoverPanelProps, {}, "element">;
|
|
50
20
|
export default PopoverPanel;
|
package/dist/popover/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { default as Popover, type PopoverProps } from "./Popover.svelte";
|
|
2
|
-
export { default as PopoverBackdrop, type PopoverBackdropProps } from "./PopoverBackdrop.svelte";
|
|
3
|
-
export { default as PopoverButton, type PopoverButtonProps, type
|
|
1
|
+
export { default as Popover, type PopoverProps, type PopoverRenderPropArg as PopoverSlot } from "./Popover.svelte";
|
|
2
|
+
export { default as PopoverBackdrop, type PopoverBackdropProps, type BackdropRenderPropArg as PopoverBackdropSlot, } from "./PopoverBackdrop.svelte";
|
|
3
|
+
export { default as PopoverButton, type PopoverButtonProps, type PopoverButtonSlot } from "./PopoverButton.svelte";
|
|
4
4
|
export { default as PopoverGroup, type PopoverGroupProps } from "./PopoverGroup.svelte";
|
|
5
|
-
export { default as PopoverPanel, type PopoverPanelProps } from "./PopoverPanel.svelte";
|
|
5
|
+
export { default as PopoverPanel, type PopoverPanelProps, type PanelRenderPropArg as PopoverPanelSlot, } from "./PopoverPanel.svelte";
|
package/dist/popover/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { default as Popover } from "./Popover.svelte";
|
|
2
|
-
export { default as PopoverBackdrop } from "./PopoverBackdrop.svelte";
|
|
3
|
-
export { default as PopoverButton
|
|
2
|
+
export { default as PopoverBackdrop, } from "./PopoverBackdrop.svelte";
|
|
3
|
+
export { default as PopoverButton } from "./PopoverButton.svelte";
|
|
4
4
|
export { default as PopoverGroup } from "./PopoverGroup.svelte";
|
|
5
|
-
export { default as PopoverPanel } from "./PopoverPanel.svelte";
|
|
5
|
+
export { default as PopoverPanel, } from "./PopoverPanel.svelte";
|