@pzerelles/headlessui-svelte 2.1.2-next.32 → 2.1.2-next.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/button/Button.svelte +8 -9
- package/dist/button/Button.svelte.d.ts +4 -31
- package/dist/checkbox/Checkbox.svelte +14 -11
- package/dist/checkbox/Checkbox.svelte.d.ts +14 -31
- package/dist/close-button/CloseButton.svelte +4 -7
- package/dist/close-button/CloseButton.svelte.d.ts +2 -43
- package/dist/data-interactive/DataInteractive.svelte +5 -19
- package/dist/data-interactive/DataInteractive.svelte.d.ts +7 -29
- 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 -10
- package/dist/dialog/DialogBackdrop.svelte.d.ts +4 -28
- package/dist/dialog/DialogPanel.svelte +18 -10
- package/dist/dialog/DialogPanel.svelte.d.ts +4 -29
- package/dist/dialog/DialogTitle.svelte +19 -7
- package/dist/dialog/DialogTitle.svelte.d.ts +6 -26
- package/dist/field/Field.svelte +9 -15
- package/dist/field/Field.svelte.d.ts +4 -29
- package/dist/fieldset/Fieldset.svelte +10 -13
- package/dist/fieldset/Fieldset.svelte.d.ts +5 -30
- package/dist/focus-trap/FocusTrap.svelte +20 -24
- package/dist/focus-trap/FocusTrap.svelte.d.ts +5 -33
- 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 +19 -9
- package/dist/input/Input.svelte.d.ts +13 -26
- package/dist/internal/FocusSentinel.svelte +33 -32
- package/dist/internal/FormResolver.svelte +5 -1
- package/dist/internal/Hidden.svelte +9 -23
- package/dist/internal/Hidden.svelte.d.ts +4 -29
- 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 +6 -17
- package/dist/listbox/Listbox.svelte.d.ts +11 -34
- package/dist/listbox/ListboxButton.svelte +14 -13
- package/dist/listbox/ListboxButton.svelte.d.ts +5 -31
- package/dist/listbox/ListboxOption.svelte +15 -15
- package/dist/listbox/ListboxOption.svelte.d.ts +12 -25
- package/dist/listbox/ListboxOptions.svelte +13 -11
- package/dist/listbox/ListboxOptions.svelte.d.ts +4 -37
- package/dist/listbox/ListboxSelectedOption.svelte +15 -17
- package/dist/listbox/ListboxSelectedOption.svelte.d.ts +8 -32
- package/dist/menu/Menu.svelte +5 -7
- package/dist/menu/Menu.svelte.d.ts +3 -30
- package/dist/menu/MenuButton.svelte +12 -12
- package/dist/menu/MenuButton.svelte.d.ts +4 -33
- package/dist/menu/MenuHeading.svelte +10 -9
- package/dist/menu/MenuHeading.svelte.d.ts +4 -30
- package/dist/menu/MenuItem.svelte +12 -12
- package/dist/menu/MenuItem.svelte.d.ts +5 -31
- package/dist/menu/MenuItems.svelte +12 -13
- package/dist/menu/MenuItems.svelte.d.ts +4 -37
- package/dist/menu/MenuSection.svelte +9 -8
- package/dist/menu/MenuSection.svelte.d.ts +5 -28
- package/dist/menu/MenuSeparator.svelte +9 -7
- package/dist/menu/MenuSeparator.svelte.d.ts +5 -27
- package/dist/popover/Popover.svelte +8 -8
- package/dist/popover/Popover.svelte.d.ts +4 -29
- package/dist/popover/PopoverBackdrop.svelte +15 -12
- package/dist/popover/PopoverBackdrop.svelte.d.ts +6 -33
- package/dist/popover/PopoverButton.svelte +34 -34
- package/dist/popover/PopoverButton.svelte.d.ts +6 -28
- package/dist/popover/PopoverGroup.svelte +14 -13
- package/dist/popover/PopoverGroup.svelte.d.ts +5 -27
- package/dist/popover/PopoverPanel.svelte +46 -41
- package/dist/popover/PopoverPanel.svelte.d.ts +5 -35
- package/dist/popover/index.d.ts +1 -1
- package/dist/portal/InternalPortal.svelte +17 -16
- package/dist/portal/InternalPortal.svelte.d.ts +4 -29
- package/dist/portal/Portal.svelte +7 -6
- package/dist/portal/Portal.svelte.d.ts +2 -18
- package/dist/portal/PortalGroup.svelte +5 -13
- package/dist/portal/PortalGroup.svelte.d.ts +3 -30
- package/dist/select/Select.svelte +10 -9
- package/dist/select/Select.svelte.d.ts +5 -31
- package/dist/switch/Switch.svelte +13 -12
- package/dist/switch/Switch.svelte.d.ts +5 -37
- package/dist/switch/SwitchGroup.svelte +5 -5
- package/dist/switch/SwitchGroup.svelte.d.ts +7 -27
- package/dist/tabs/Tab.svelte +12 -12
- package/dist/tabs/Tab.svelte.d.ts +4 -31
- package/dist/tabs/TabGroup.svelte +8 -8
- package/dist/tabs/TabGroup.svelte.d.ts +4 -33
- package/dist/tabs/TabList.svelte +7 -8
- package/dist/tabs/TabList.svelte.d.ts +5 -27
- package/dist/tabs/TabPanel.svelte +11 -11
- package/dist/tabs/TabPanel.svelte.d.ts +4 -33
- package/dist/tabs/TabPanels.svelte +5 -5
- package/dist/tabs/TabPanels.svelte.d.ts +5 -26
- package/dist/textarea/Textarea.svelte +12 -10
- package/dist/textarea/Textarea.svelte.d.ts +13 -26
- 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/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,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,26 @@
|
|
|
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
6
|
type GroupRenderPropArg = {}
|
|
7
|
-
type GroupPropsWeControl = never
|
|
8
7
|
|
|
9
|
-
export type PopoverGroupProps
|
|
10
|
-
|
|
8
|
+
export type PopoverGroupProps = Props<
|
|
9
|
+
typeof DEFAULT_GROUP_TAG,
|
|
11
10
|
GroupRenderPropArg,
|
|
12
|
-
|
|
11
|
+
{
|
|
12
|
+
element?: HTMLElement
|
|
13
|
+
}
|
|
13
14
|
>
|
|
14
15
|
</script>
|
|
15
16
|
|
|
16
|
-
<script lang="ts"
|
|
17
|
+
<script lang="ts">
|
|
17
18
|
import type { PopoverGroupContext, PopoverRegisterBag } from "./context.svelte"
|
|
18
19
|
import MainTreeProvider from "../internal/MainTreeProvider.svelte"
|
|
19
20
|
import ElementOrComponent from "../utils/ElementOrComponent.svelte"
|
|
20
21
|
import { getOwnerDocument } from "../utils/owner.js"
|
|
21
22
|
|
|
22
|
-
let {
|
|
23
|
+
let { element = $bindable(), ...theirProps }: PopoverGroupProps = $props()
|
|
23
24
|
|
|
24
25
|
const popovers = $state<PopoverRegisterBag[]>([])
|
|
25
26
|
|
|
@@ -34,17 +35,17 @@
|
|
|
34
35
|
}
|
|
35
36
|
|
|
36
37
|
const isFocusWithinPopoverGroup = () => {
|
|
37
|
-
const ownerDocument = getOwnerDocument(
|
|
38
|
+
const ownerDocument = getOwnerDocument(element)
|
|
38
39
|
if (!ownerDocument) return false
|
|
39
|
-
|
|
40
|
+
const el = ownerDocument.activeElement
|
|
40
41
|
|
|
41
|
-
if (
|
|
42
|
+
if (element?.contains(element)) return true
|
|
42
43
|
|
|
43
44
|
// 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
45
|
return popovers.some((bag) => {
|
|
45
46
|
return (
|
|
46
|
-
ownerDocument!.getElementById(bag.buttonId!)?.contains(
|
|
47
|
-
ownerDocument!.getElementById(bag.panelId!)?.contains(
|
|
47
|
+
ownerDocument!.getElementById(bag.buttonId!)?.contains(el) ||
|
|
48
|
+
ownerDocument!.getElementById(bag.panelId!)?.contains(el)
|
|
48
49
|
)
|
|
49
50
|
})
|
|
50
51
|
}
|
|
@@ -66,5 +67,5 @@
|
|
|
66
67
|
</script>
|
|
67
68
|
|
|
68
69
|
<MainTreeProvider>
|
|
69
|
-
<ElementOrComponent {theirProps} slots={slot} defaultTag={DEFAULT_GROUP_TAG} name="PopoverGroup" bind:
|
|
70
|
+
<ElementOrComponent {theirProps} slots={slot} defaultTag={DEFAULT_GROUP_TAG} name="PopoverGroup" bind:element />
|
|
70
71
|
</MainTreeProvider>
|
|
@@ -1,30 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Props } from "../utils/types.js";
|
|
2
2
|
declare const DEFAULT_GROUP_TAG: "div";
|
|
3
3
|
type GroupRenderPropArg = {};
|
|
4
|
-
type
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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>>;
|
|
4
|
+
export type PopoverGroupProps = Props<typeof DEFAULT_GROUP_TAG, GroupRenderPropArg, {
|
|
5
|
+
element?: HTMLElement;
|
|
6
|
+
}>;
|
|
7
|
+
declare const PopoverGroup: import("svelte").Component<PopoverGroupProps, {}, "element">;
|
|
30
8
|
export default PopoverGroup;
|
|
@@ -1,5 +1,5 @@
|
|
|
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
|
|
@@ -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
3
|
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
1
|
export { default as Popover, type PopoverProps } from "./Popover.svelte";
|
|
2
2
|
export { default as PopoverBackdrop, type PopoverBackdropProps } from "./PopoverBackdrop.svelte";
|
|
3
|
-
export { default as PopoverButton, type PopoverButtonProps, type
|
|
3
|
+
export { default as PopoverButton, type PopoverButtonProps, type PopoverButtonSlot, type PopoverButtonPropsWeControl, } from "./PopoverButton.svelte";
|
|
4
4
|
export { default as PopoverGroup, type PopoverGroupProps } from "./PopoverGroup.svelte";
|
|
5
5
|
export { default as PopoverPanel, type PopoverPanelProps } from "./PopoverPanel.svelte";
|
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
import { getOwnerDocument } from "../utils/owner.js"
|
|
4
4
|
import { getContext, onMount, setContext } from "svelte"
|
|
5
5
|
import { env } from "../utils/env.js"
|
|
6
|
-
import type {
|
|
6
|
+
import type { Props } from "../utils/types.js"
|
|
7
7
|
import type { PortalGroupContext } from "./PortalGroup.svelte"
|
|
8
|
+
import type { SvelteHTMLElements } from "svelte/elements"
|
|
8
9
|
|
|
9
10
|
function usePortalTarget(options: { element: HTMLElement | null }): { readonly target: HTMLElement | null } {
|
|
10
11
|
const { element } = $derived(options)
|
|
@@ -96,24 +97,24 @@
|
|
|
96
97
|
type PortalRenderPropArg = {}
|
|
97
98
|
type PortalPropsWeControl = never
|
|
98
99
|
|
|
99
|
-
export type PortalProps
|
|
100
|
-
|
|
100
|
+
export type PortalProps = Props<
|
|
101
|
+
typeof DEFAULT_PORTAL_TAG,
|
|
101
102
|
PortalRenderPropArg,
|
|
102
|
-
PortalPropsWeControl,
|
|
103
103
|
{
|
|
104
|
+
element?: HTMLElement
|
|
104
105
|
enabled?: boolean
|
|
105
106
|
}
|
|
106
107
|
>
|
|
107
108
|
</script>
|
|
108
109
|
|
|
109
|
-
<script lang="ts"
|
|
110
|
+
<script lang="ts">
|
|
110
111
|
import ElementOrComponent from "../utils/ElementOrComponent.svelte"
|
|
111
112
|
|
|
112
|
-
let {
|
|
113
|
+
let { element = $bindable(), ...theirProps }: PortalProps = $props()
|
|
113
114
|
|
|
114
115
|
const portalTarget = usePortalTarget({
|
|
115
116
|
get element() {
|
|
116
|
-
return
|
|
117
|
+
return element ?? null
|
|
117
118
|
},
|
|
118
119
|
})
|
|
119
120
|
const { target } = $derived(portalTarget)
|
|
@@ -121,24 +122,24 @@
|
|
|
121
122
|
//const ready = useServerHandoffComplete()
|
|
122
123
|
|
|
123
124
|
$effect(() => {
|
|
124
|
-
if (!target || !
|
|
125
|
+
if (!target || !element) return
|
|
125
126
|
|
|
126
127
|
// Element already exists in target, always calling target.appendChild(element) will cause a
|
|
127
128
|
// brief unmount/remount.
|
|
128
|
-
if (
|
|
129
|
-
|
|
130
|
-
target.appendChild(
|
|
129
|
+
if (element.parentNode !== target) {
|
|
130
|
+
element.setAttribute("data-headlessui-portal", "")
|
|
131
|
+
target.appendChild(element)
|
|
131
132
|
}
|
|
132
133
|
})
|
|
133
134
|
|
|
134
135
|
onMount(() => {
|
|
135
|
-
if (parent) parent.register(
|
|
136
|
+
if (parent) parent.register(element!)
|
|
136
137
|
|
|
137
138
|
return () => {
|
|
138
|
-
if (!target || !
|
|
139
|
+
if (!target || !element) return
|
|
139
140
|
|
|
140
|
-
if (
|
|
141
|
-
target.removeChild(
|
|
141
|
+
if (element instanceof Node && target.contains(element)) {
|
|
142
|
+
target.removeChild(element)
|
|
142
143
|
}
|
|
143
144
|
|
|
144
145
|
if (target.childNodes.length <= 0) {
|
|
@@ -149,5 +150,5 @@
|
|
|
149
150
|
</script>
|
|
150
151
|
|
|
151
152
|
{#if target}
|
|
152
|
-
<ElementOrComponent {theirProps} defaultTag={DEFAULT_PORTAL_TAG} name="InternalPortal" bind:
|
|
153
|
+
<ElementOrComponent {theirProps} defaultTag={DEFAULT_PORTAL_TAG} name="InternalPortal" bind:element />
|
|
153
154
|
{/if}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Props } from "../utils/types.js";
|
|
2
2
|
type PortalParentContext = {
|
|
3
3
|
register: (portal: HTMLElement) => () => void;
|
|
4
4
|
unregister: (portal: HTMLElement) => void;
|
|
@@ -7,34 +7,9 @@ type PortalParentContext = {
|
|
|
7
7
|
export declare function useNestedPortals(): PortalParentContext;
|
|
8
8
|
export declare const DEFAULT_PORTAL_TAG = "div";
|
|
9
9
|
type PortalRenderPropArg = {};
|
|
10
|
-
type
|
|
11
|
-
|
|
10
|
+
export type PortalProps = Props<typeof DEFAULT_PORTAL_TAG, PortalRenderPropArg, {
|
|
11
|
+
element?: HTMLElement;
|
|
12
12
|
enabled?: boolean;
|
|
13
13
|
}>;
|
|
14
|
-
declare
|
|
15
|
-
props(): {
|
|
16
|
-
as?: TTag | undefined;
|
|
17
|
-
} & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("slot" | "as" | "children" | "class" | "ref") | "enabled"> 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("svelte").Snippet<[{
|
|
19
|
-
props?: Record<string, any>;
|
|
20
|
-
}]> | undefined;
|
|
21
|
-
class?: string | ((bag: PortalRenderPropArg) => string) | null | undefined;
|
|
22
|
-
ref?: HTMLElement;
|
|
23
|
-
} & {
|
|
24
|
-
enabled?: boolean;
|
|
25
|
-
};
|
|
26
|
-
events(): {};
|
|
27
|
-
slots(): {};
|
|
28
|
-
bindings(): "ref";
|
|
29
|
-
exports(): {};
|
|
30
|
-
}
|
|
31
|
-
interface $$IsomorphicComponent {
|
|
32
|
-
new <TTag extends ElementType = typeof DEFAULT_PORTAL_TAG>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TTag>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TTag>['props']>, ReturnType<__sveltets_Render<TTag>['events']>, ReturnType<__sveltets_Render<TTag>['slots']>> & {
|
|
33
|
-
$$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
|
|
34
|
-
} & ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
35
|
-
<TTag extends ElementType = typeof DEFAULT_PORTAL_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
36
|
-
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
37
|
-
}
|
|
38
|
-
declare const InternalPortal: $$IsomorphicComponent;
|
|
39
|
-
type InternalPortal<TTag extends ElementType = typeof DEFAULT_PORTAL_TAG> = InstanceType<typeof InternalPortal<TTag>>;
|
|
14
|
+
declare const InternalPortal: import("svelte").Component<PortalProps, {}, "element">;
|
|
40
15
|
export default InternalPortal;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
<script lang="ts"
|
|
2
|
-
import
|
|
3
|
-
import InternalPortal, { DEFAULT_PORTAL_TAG, type PortalProps } from "./InternalPortal.svelte"
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import InternalPortal, { type PortalProps } from "./InternalPortal.svelte"
|
|
4
3
|
|
|
5
|
-
let {
|
|
4
|
+
let { element = $bindable(), enabled = true, ...theirProps }: PortalProps = $props()
|
|
6
5
|
</script>
|
|
7
6
|
|
|
8
7
|
{#if enabled}
|
|
9
|
-
<InternalPortal {...theirProps} bind:
|
|
10
|
-
{:else
|
|
8
|
+
<InternalPortal {...theirProps} bind:element />
|
|
9
|
+
{:else}
|
|
10
|
+
{@render theirProps.children?.({})}
|
|
11
|
+
{/if}
|
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
import type
|
|
2
|
-
|
|
3
|
-
declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_PORTAL_TAG> {
|
|
4
|
-
props(): PortalProps<TTag>;
|
|
5
|
-
events(): {};
|
|
6
|
-
slots(): {};
|
|
7
|
-
bindings(): "ref";
|
|
8
|
-
exports(): {};
|
|
9
|
-
}
|
|
10
|
-
interface $$IsomorphicComponent {
|
|
11
|
-
new <TTag extends ElementType = typeof DEFAULT_PORTAL_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']>> & {
|
|
12
|
-
$$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
|
|
13
|
-
} & ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
14
|
-
<TTag extends ElementType = typeof DEFAULT_PORTAL_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
15
|
-
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
16
|
-
}
|
|
17
|
-
declare const Portal: $$IsomorphicComponent;
|
|
18
|
-
type Portal<TTag extends ElementType = typeof DEFAULT_PORTAL_TAG> = InstanceType<typeof Portal<TTag>>;
|
|
1
|
+
import { type PortalProps } from "./InternalPortal.svelte";
|
|
2
|
+
declare const Portal: import("svelte").Component<PortalProps, {}, "element">;
|
|
19
3
|
export default Portal;
|
|
@@ -1,29 +1,21 @@
|
|
|
1
1
|
<script lang="ts" module>
|
|
2
|
-
import type {
|
|
2
|
+
import type { PropsAsChild } from "../utils/types.js"
|
|
3
3
|
|
|
4
4
|
const DEFAULT_GROUP_TAG = "svelte:fragment"
|
|
5
5
|
type GroupRenderPropArg = {}
|
|
6
|
-
type GroupPropsWeControl = never
|
|
7
6
|
|
|
8
7
|
export type PortalGroupContext = {
|
|
9
8
|
readonly target: HTMLElement | null
|
|
10
9
|
}
|
|
11
10
|
|
|
12
|
-
export type PortalGroupProps<
|
|
13
|
-
TTag,
|
|
14
|
-
GroupRenderPropArg,
|
|
15
|
-
GroupPropsWeControl,
|
|
16
|
-
{
|
|
17
|
-
target: HTMLElement | null
|
|
18
|
-
}
|
|
19
|
-
>
|
|
11
|
+
export type PortalGroupProps = PropsAsChild<GroupRenderPropArg, { target: HTMLElement | null }>
|
|
20
12
|
</script>
|
|
21
13
|
|
|
22
|
-
<script lang="ts"
|
|
14
|
+
<script lang="ts">
|
|
23
15
|
import ElementOrComponent from "../utils/ElementOrComponent.svelte"
|
|
24
16
|
import { setContext } from "svelte"
|
|
25
17
|
|
|
26
|
-
let {
|
|
18
|
+
let { target, ...theirProps }: PortalGroupProps = $props()
|
|
27
19
|
|
|
28
20
|
setContext("PortalGroupContext", {
|
|
29
21
|
get target() {
|
|
@@ -32,4 +24,4 @@
|
|
|
32
24
|
})
|
|
33
25
|
</script>
|
|
34
26
|
|
|
35
|
-
<ElementOrComponent {theirProps}
|
|
27
|
+
<ElementOrComponent {theirProps} name="PortalGroup" />
|
|
@@ -1,37 +1,10 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
declare const DEFAULT_GROUP_TAG = "svelte:fragment";
|
|
1
|
+
import type { PropsAsChild } from "../utils/types.js";
|
|
3
2
|
type GroupRenderPropArg = {};
|
|
4
|
-
type GroupPropsWeControl = never;
|
|
5
3
|
export type PortalGroupContext = {
|
|
6
4
|
readonly target: HTMLElement | null;
|
|
7
5
|
};
|
|
8
|
-
export type PortalGroupProps
|
|
6
|
+
export type PortalGroupProps = PropsAsChild<GroupRenderPropArg, {
|
|
9
7
|
target: HTMLElement | null;
|
|
10
8
|
}>;
|
|
11
|
-
declare
|
|
12
|
-
props(): {
|
|
13
|
-
as?: TTag | undefined;
|
|
14
|
-
} & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("slot" | "as" | "children" | "class" | "ref") | "target"> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
|
|
15
|
-
children?: import("svelte").Snippet<[{
|
|
16
|
-
props?: Record<string, any>;
|
|
17
|
-
}]> | undefined;
|
|
18
|
-
class?: string | ((bag: GroupRenderPropArg) => string) | null | undefined;
|
|
19
|
-
ref?: HTMLElement;
|
|
20
|
-
} & {
|
|
21
|
-
target: HTMLElement | null;
|
|
22
|
-
};
|
|
23
|
-
events(): {};
|
|
24
|
-
slots(): {};
|
|
25
|
-
bindings(): "ref";
|
|
26
|
-
exports(): {};
|
|
27
|
-
}
|
|
28
|
-
interface $$IsomorphicComponent {
|
|
29
|
-
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']>> & {
|
|
30
|
-
$$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
|
|
31
|
-
} & ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
32
|
-
<TTag extends ElementType = typeof DEFAULT_GROUP_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
33
|
-
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
34
|
-
}
|
|
35
|
-
declare const PortalGroup: $$IsomorphicComponent;
|
|
36
|
-
type PortalGroup<TTag extends ElementType = typeof DEFAULT_GROUP_TAG> = InstanceType<typeof PortalGroup<TTag>>;
|
|
9
|
+
declare const PortalGroup: import("svelte").Component<PortalGroupProps, {}, "">;
|
|
37
10
|
export default PortalGroup;
|