@pzerelles/headlessui-svelte 2.1.2-next.29 → 2.1.2-next.30
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 +54 -84
- package/dist/checkbox/Checkbox.svelte +120 -173
- package/dist/checkbox/Checkbox.svelte.d.ts +1 -1
- package/dist/close-button/CloseButton.svelte +6 -12
- package/dist/combobox/Combobox.svelte +3 -50
- package/dist/data-interactive/DataInteractive.svelte +29 -55
- package/dist/description/Description.svelte +21 -31
- package/dist/dialog/Dialog.svelte +228 -320
- package/dist/dialog/DialogBackdrop.svelte +12 -29
- package/dist/dialog/DialogPanel.svelte +25 -48
- package/dist/dialog/DialogTitle.svelte +23 -38
- package/dist/field/Field.svelte +25 -47
- package/dist/fieldset/Fieldset.svelte +29 -50
- package/dist/focus-trap/FocusTrap.svelte +283 -419
- package/dist/input/Input.svelte +53 -84
- package/dist/internal/FloatingProvider.svelte +9 -14
- package/dist/internal/FocusSentinel.svelte +8 -16
- package/dist/internal/ForcePortalRoot.svelte +3 -7
- package/dist/internal/FormFields.svelte +34 -47
- package/dist/internal/FormFieldsProvider.svelte +5 -9
- package/dist/internal/FormResolver.svelte +15 -20
- package/dist/internal/Hidden.svelte +29 -50
- package/dist/internal/MainTreeProvider.svelte +36 -89
- package/dist/internal/Portal.svelte +14 -18
- package/dist/label/Label.svelte +58 -93
- package/dist/legend/Legend.svelte +3 -12
- package/dist/listbox/Listbox.svelte +387 -525
- package/dist/listbox/Listbox.svelte.d.ts +1 -1
- package/dist/listbox/ListboxButton.svelte +127 -173
- package/dist/listbox/ListboxOption.svelte +129 -170
- package/dist/listbox/ListboxOptions.svelte +304 -400
- package/dist/listbox/ListboxSelectedOption.svelte +15 -38
- package/dist/menu/Menu.svelte +51 -78
- package/dist/menu/MenuButton.svelte +117 -157
- package/dist/menu/MenuHeading.svelte +14 -32
- package/dist/menu/MenuItem.svelte +107 -142
- package/dist/menu/MenuItems.svelte +229 -301
- package/dist/menu/MenuSection.svelte +9 -24
- package/dist/menu/MenuSeparator.svelte +4 -17
- package/dist/popover/Popover.svelte +150 -216
- package/dist/popover/PopoverBackdrop.svelte +41 -67
- package/dist/popover/PopoverButton.svelte +212 -292
- package/dist/popover/PopoverGroup.svelte +35 -62
- package/dist/popover/PopoverPanel.svelte +229 -311
- package/dist/portal/InternalPortal.svelte +85 -141
- package/dist/portal/Portal.svelte +2 -5
- package/dist/portal/PortalGroup.svelte +9 -30
- package/dist/select/Select.svelte +68 -98
- package/dist/switch/Switch.svelte +132 -179
- package/dist/switch/SwitchGroup.svelte +31 -44
- package/dist/tabs/Tab.svelte +142 -194
- package/dist/tabs/TabGroup.svelte +56 -86
- package/dist/tabs/TabGroup.svelte.d.ts +1 -1
- package/dist/tabs/TabList.svelte +11 -31
- package/dist/tabs/TabPanel.svelte +42 -67
- package/dist/tabs/TabPanels.svelte +7 -18
- package/dist/textarea/Textarea.svelte +53 -84
- package/dist/transition/InternalTransitionChild.svelte +170 -259
- package/dist/transition/Transition.svelte +66 -96
- package/dist/transition/TransitionChild.svelte +11 -31
- package/dist/utils/DisabledProvider.svelte +3 -7
- package/dist/utils/ElementOrComponent.svelte +23 -43
- package/dist/utils/Generic.svelte +16 -27
- package/dist/utils/StableCollection.svelte +36 -54
- package/dist/utils/floating-ui/svelte/components/FloatingNode.svelte +12 -27
- package/dist/utils/floating-ui/svelte/components/FloatingTree.svelte +44 -88
- package/package.json +4 -4
|
@@ -1,225 +1,159 @@
|
|
|
1
|
-
<script lang="ts" module>
|
|
2
|
-
import type { ElementType, Props } from "../utils/types.js"
|
|
3
|
-
|
|
4
|
-
export const DEFAULT_POPOVER_TAG = "div" as const
|
|
5
|
-
type PopoverRenderPropArg = {
|
|
6
|
-
open: boolean
|
|
7
|
-
close(focusableElement?: HTMLElement | MouseEvent<HTMLElement>): void
|
|
8
|
-
}
|
|
9
|
-
type PopoverPropsWeControl = never
|
|
10
|
-
|
|
11
|
-
export type PopoverProps<TTag extends ElementType = typeof DEFAULT_POPOVER_TAG> = Props<
|
|
12
|
-
TTag,
|
|
13
|
-
PopoverRenderPropArg,
|
|
14
|
-
PopoverPropsWeControl,
|
|
15
|
-
{
|
|
16
|
-
__demoMode?: boolean
|
|
17
|
-
}
|
|
18
|
-
>
|
|
1
|
+
<script lang="ts" module>export const DEFAULT_POPOVER_TAG = "div";
|
|
19
2
|
</script>
|
|
20
3
|
|
|
21
|
-
<script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_POPOVER_TAG">
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
const ownerDocument = $derived(getOwnerDocument(ref ?? button))
|
|
64
|
-
|
|
65
|
-
const isPortalled = $derived.by(() => {
|
|
66
|
-
if (!button) return false
|
|
67
|
-
if (!panel) return false
|
|
68
|
-
|
|
69
|
-
return untrack(() => {
|
|
70
|
-
// We are part of a different "root" tree, so therefore we can consider it portalled. This is a
|
|
71
|
-
// heuristic because 3rd party tools could use some form of portal, typically rendered at the
|
|
72
|
-
// end of the body but we don't have an actual reference to that.
|
|
73
|
-
for (let root of document.querySelectorAll("body > *")) {
|
|
74
|
-
if (Number(root?.contains(button)) ^ Number(root?.contains(panel))) {
|
|
75
|
-
return true
|
|
76
|
-
}
|
|
4
|
+
<script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_POPOVER_TAG">import { getOwnerDocument } from "../utils/owner.js";
|
|
5
|
+
import { setContext, untrack } from "svelte";
|
|
6
|
+
import {
|
|
7
|
+
createPopoverContext,
|
|
8
|
+
PopoverStates,
|
|
9
|
+
usePopoverGroupContext
|
|
10
|
+
} from "./context.svelte.js";
|
|
11
|
+
import { FocusableMode, getFocusableElements, isFocusableElement } from "../utils/focus-management.js";
|
|
12
|
+
import { useNestedPortals } from "../portal/InternalPortal.svelte";
|
|
13
|
+
import MainTreeProvider, { useMainTreeNode } from "../internal/MainTreeProvider.svelte";
|
|
14
|
+
import { useRootContainers } from "../hooks/use-root-containers.svelte.js";
|
|
15
|
+
import { useEventListener } from "../hooks/use-event-listener.svelte.js";
|
|
16
|
+
import { useOutsideClick } from "../hooks/use-outside-click.svelte.js";
|
|
17
|
+
import { useFloatingProvider } from "../internal/floating-provider.svelte.js";
|
|
18
|
+
import { createCloseContext } from "../internal/close-provider.js";
|
|
19
|
+
import { createOpenClosedContext, State } from "../internal/open-closed.js";
|
|
20
|
+
import ElementOrComponent from "../utils/ElementOrComponent.svelte";
|
|
21
|
+
let { ref = $bindable(), __demoMode = false, ...theirProps } = $props();
|
|
22
|
+
let buttons = $state([]);
|
|
23
|
+
const context = createPopoverContext({
|
|
24
|
+
__demoMode,
|
|
25
|
+
popoverState: __demoMode ? PopoverStates.Open : PopoverStates.Closed,
|
|
26
|
+
buttons
|
|
27
|
+
});
|
|
28
|
+
const {
|
|
29
|
+
popoverState,
|
|
30
|
+
button,
|
|
31
|
+
buttonId,
|
|
32
|
+
panel,
|
|
33
|
+
panelId,
|
|
34
|
+
beforePanelSentinel,
|
|
35
|
+
afterPanelSentinel,
|
|
36
|
+
afterButtonSentinel
|
|
37
|
+
} = $derived(context);
|
|
38
|
+
const ownerDocument = $derived(getOwnerDocument(ref ?? button));
|
|
39
|
+
const isPortalled = $derived.by(() => {
|
|
40
|
+
if (!button) return false;
|
|
41
|
+
if (!panel) return false;
|
|
42
|
+
return untrack(() => {
|
|
43
|
+
for (let root2 of document.querySelectorAll("body > *")) {
|
|
44
|
+
if (Number(root2?.contains(button)) ^ Number(root2?.contains(panel))) {
|
|
45
|
+
return true;
|
|
77
46
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
})
|
|
108
|
-
|
|
109
|
-
const groupContext = usePopoverGroupContext()
|
|
110
|
-
const registerPopover = $derived(groupContext?.registerPopover)
|
|
111
|
-
const isFocusWithinPopoverGroup = () => {
|
|
112
|
-
return (
|
|
113
|
-
groupContext?.isFocusWithinPopoverGroup() ??
|
|
114
|
-
(ownerDocument?.activeElement &&
|
|
115
|
-
(button?.contains(ownerDocument.activeElement) || panel?.contains(ownerDocument.activeElement)))
|
|
116
|
-
)
|
|
47
|
+
}
|
|
48
|
+
let elements = getFocusableElements();
|
|
49
|
+
let buttonIdx = elements.indexOf(button);
|
|
50
|
+
let beforeIdx = (buttonIdx + elements.length - 1) % elements.length;
|
|
51
|
+
let afterIdx = (buttonIdx + 1) % elements.length;
|
|
52
|
+
let beforeElement = elements[beforeIdx];
|
|
53
|
+
let afterElement = elements[afterIdx];
|
|
54
|
+
if (!panel.contains(beforeElement) && !panel.contains(afterElement)) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
const registerBag = $derived({
|
|
61
|
+
buttonId,
|
|
62
|
+
panelId,
|
|
63
|
+
close: () => context.closePopover()
|
|
64
|
+
});
|
|
65
|
+
const groupContext = usePopoverGroupContext();
|
|
66
|
+
const registerPopover = $derived(groupContext?.registerPopover);
|
|
67
|
+
const isFocusWithinPopoverGroup = () => {
|
|
68
|
+
return groupContext?.isFocusWithinPopoverGroup() ?? (ownerDocument?.activeElement && (button?.contains(ownerDocument.activeElement) || panel?.contains(ownerDocument.activeElement)));
|
|
69
|
+
};
|
|
70
|
+
$effect(() => registerPopover?.(registerBag));
|
|
71
|
+
const nestedPortals = useNestedPortals();
|
|
72
|
+
const { portals } = $derived(nestedPortals);
|
|
73
|
+
const mainTreeNode = useMainTreeNode({
|
|
74
|
+
get fallbackMainTreeNode() {
|
|
75
|
+
return button;
|
|
117
76
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
const root = useRootContainers({
|
|
129
|
-
get mainTreeNode() {
|
|
130
|
-
return mainTreeNode.node
|
|
131
|
-
},
|
|
132
|
-
get portals() {
|
|
133
|
-
return portals
|
|
134
|
-
},
|
|
135
|
-
get defaultContainers() {
|
|
136
|
-
return [button, panel]
|
|
137
|
-
},
|
|
138
|
-
})
|
|
139
|
-
|
|
140
|
-
// Handle focus out
|
|
141
|
-
useEventListener({
|
|
142
|
-
get element() {
|
|
143
|
-
return ownerDocument?.defaultView
|
|
144
|
-
},
|
|
145
|
-
type: "focus",
|
|
146
|
-
listener: (event) => {
|
|
147
|
-
if (event.target === window) return
|
|
148
|
-
if (!(event.target instanceof HTMLElement)) return
|
|
149
|
-
if (popoverState !== PopoverStates.Open) return
|
|
150
|
-
if (isFocusWithinPopoverGroup()) return
|
|
151
|
-
if (!button) return
|
|
152
|
-
if (!panel) return
|
|
153
|
-
if (root.contains(event.target)) return
|
|
154
|
-
if (beforePanelSentinel?.contains?.(event.target)) return
|
|
155
|
-
if (afterPanelSentinel?.contains?.(event.target)) return
|
|
156
|
-
if (afterButtonSentinel?.contains?.(event.target)) return
|
|
157
|
-
|
|
158
|
-
context.closePopover()
|
|
159
|
-
},
|
|
160
|
-
options: true,
|
|
161
|
-
})
|
|
162
|
-
|
|
163
|
-
// Handle outside click
|
|
164
|
-
const outsideClickEnabled = $derived(popoverState === PopoverStates.Open)
|
|
165
|
-
useOutsideClick({
|
|
166
|
-
get enabled() {
|
|
167
|
-
return outsideClickEnabled
|
|
168
|
-
},
|
|
169
|
-
get containers() {
|
|
170
|
-
return root.resolvedContainers
|
|
171
|
-
},
|
|
172
|
-
cb: (event, target) => {
|
|
173
|
-
context.closePopover()
|
|
174
|
-
|
|
175
|
-
if (!isFocusableElement(target, FocusableMode.Loose)) {
|
|
176
|
-
event.preventDefault()
|
|
177
|
-
button?.focus()
|
|
178
|
-
}
|
|
179
|
-
},
|
|
180
|
-
})
|
|
181
|
-
|
|
182
|
-
const close = (focusableElement?: HTMLElement | MouseEvent<HTMLElement>) => {
|
|
183
|
-
context.closePopover()
|
|
184
|
-
|
|
185
|
-
const restoreElement = (() => {
|
|
186
|
-
if (!focusableElement) return button
|
|
187
|
-
if (focusableElement instanceof HTMLElement) return focusableElement
|
|
188
|
-
|
|
189
|
-
return button
|
|
190
|
-
})()
|
|
191
|
-
|
|
192
|
-
restoreElement?.focus()
|
|
77
|
+
});
|
|
78
|
+
const root = useRootContainers({
|
|
79
|
+
get mainTreeNode() {
|
|
80
|
+
return mainTreeNode.node;
|
|
81
|
+
},
|
|
82
|
+
get portals() {
|
|
83
|
+
return portals;
|
|
84
|
+
},
|
|
85
|
+
get defaultContainers() {
|
|
86
|
+
return [button, panel];
|
|
193
87
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
88
|
+
});
|
|
89
|
+
useEventListener({
|
|
90
|
+
get element() {
|
|
91
|
+
return ownerDocument?.defaultView;
|
|
92
|
+
},
|
|
93
|
+
type: "focus",
|
|
94
|
+
listener: (event) => {
|
|
95
|
+
if (event.target === window) return;
|
|
96
|
+
if (!(event.target instanceof HTMLElement)) return;
|
|
97
|
+
if (popoverState !== PopoverStates.Open) return;
|
|
98
|
+
if (isFocusWithinPopoverGroup()) return;
|
|
99
|
+
if (!button) return;
|
|
100
|
+
if (!panel) return;
|
|
101
|
+
if (root.contains(event.target)) return;
|
|
102
|
+
if (beforePanelSentinel?.contains?.(event.target)) return;
|
|
103
|
+
if (afterPanelSentinel?.contains?.(event.target)) return;
|
|
104
|
+
if (afterButtonSentinel?.contains?.(event.target)) return;
|
|
105
|
+
context.closePopover();
|
|
106
|
+
},
|
|
107
|
+
options: true
|
|
108
|
+
});
|
|
109
|
+
const outsideClickEnabled = $derived(popoverState === PopoverStates.Open);
|
|
110
|
+
useOutsideClick({
|
|
111
|
+
get enabled() {
|
|
112
|
+
return outsideClickEnabled;
|
|
113
|
+
},
|
|
114
|
+
get containers() {
|
|
115
|
+
return root.resolvedContainers;
|
|
116
|
+
},
|
|
117
|
+
cb: (event, target) => {
|
|
118
|
+
context.closePopover();
|
|
119
|
+
if (!isFocusableElement(target, FocusableMode.Loose)) {
|
|
120
|
+
event.preventDefault();
|
|
121
|
+
button?.focus();
|
|
122
|
+
}
|
|
200
123
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
124
|
+
});
|
|
125
|
+
const close = (focusableElement) => {
|
|
126
|
+
context.closePopover();
|
|
127
|
+
const restoreElement = (() => {
|
|
128
|
+
if (!focusableElement) return button;
|
|
129
|
+
if (focusableElement instanceof HTMLElement) return focusableElement;
|
|
130
|
+
return button;
|
|
131
|
+
})();
|
|
132
|
+
restoreElement?.focus();
|
|
133
|
+
};
|
|
134
|
+
const api = {
|
|
135
|
+
close,
|
|
136
|
+
get isPortalled() {
|
|
137
|
+
return isPortalled;
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
setContext("PopoverAPIContext", api);
|
|
141
|
+
const slot = $derived({
|
|
142
|
+
open: popoverState === PopoverStates.Open,
|
|
143
|
+
close
|
|
144
|
+
});
|
|
145
|
+
useFloatingProvider();
|
|
146
|
+
setContext("PopoverPanelContext", void 0);
|
|
147
|
+
createCloseContext({
|
|
148
|
+
get close() {
|
|
149
|
+
return close;
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
createOpenClosedContext({
|
|
153
|
+
get value() {
|
|
154
|
+
return context.popoverState === PopoverStates.Open ? State.Open : State.Closed;
|
|
155
|
+
}
|
|
156
|
+
});
|
|
223
157
|
</script>
|
|
224
158
|
|
|
225
159
|
<MainTreeProvider node={mainTreeNode.node}>
|
|
@@ -1,73 +1,47 @@
|
|
|
1
|
-
<script lang="ts" module>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
let DEFAULT_BACKDROP_TAG = "div" as const
|
|
6
|
-
type BackdropRenderPropArg = {
|
|
7
|
-
open: boolean
|
|
8
|
-
}
|
|
9
|
-
type BackdropPropsWeControl = "aria-hidden"
|
|
10
|
-
|
|
11
|
-
const BackdropRenderFeatures = RenderFeatures.RenderStrategy | RenderFeatures.Static
|
|
12
|
-
|
|
13
|
-
export type PopoverBackdropProps<TTag extends ElementType = typeof DEFAULT_BACKDROP_TAG> = Props<
|
|
14
|
-
TTag,
|
|
15
|
-
BackdropRenderPropArg,
|
|
16
|
-
BackdropPropsWeControl,
|
|
17
|
-
{ transition?: boolean } & PropsForFeatures<typeof BackdropRenderFeatures>
|
|
18
|
-
>
|
|
19
|
-
|
|
20
|
-
export type PopoverOverlayProps<TTag extends ElementType = typeof DEFAULT_BACKDROP_TAG> = PopoverBackdropProps<TTag>
|
|
1
|
+
<script lang="ts" module>import { RenderFeatures } from "../utils/render.js";
|
|
2
|
+
let DEFAULT_BACKDROP_TAG = "div";
|
|
3
|
+
const BackdropRenderFeatures = RenderFeatures.RenderStrategy | RenderFeatures.Static;
|
|
21
4
|
</script>
|
|
22
5
|
|
|
23
|
-
<script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_BACKDROP_TAG">
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
},
|
|
48
|
-
get show() {
|
|
49
|
-
return usesOpenClosedState !== null
|
|
50
|
-
? (usesOpenClosedState.value & State.Open) === State.Open
|
|
51
|
-
: popoverState === PopoverStates.Open
|
|
52
|
-
},
|
|
53
|
-
})
|
|
54
|
-
const { visible, data: transitionData } = $derived(_transition)
|
|
55
|
-
|
|
56
|
-
const handleClick = (event: MouseEvent) => {
|
|
57
|
-
//if (isDisabledReactIssue7711(event.currentTarget)) return event.preventDefault()
|
|
58
|
-
context.closePopover()
|
|
6
|
+
<script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_BACKDROP_TAG">import ElementOrComponent from "../utils/ElementOrComponent.svelte";
|
|
7
|
+
import { useId } from "../hooks/use-id.js";
|
|
8
|
+
import { PopoverStates, usePopoverContext } from "./context.svelte.js";
|
|
9
|
+
import { State, useOpenClosed } from "../internal/open-closed.js";
|
|
10
|
+
import { transitionDataAttributes, useTransition } from "../hooks/use-transition.svelte.js";
|
|
11
|
+
const internalId = useId();
|
|
12
|
+
let {
|
|
13
|
+
ref = $bindable(),
|
|
14
|
+
id = `headlessui-popover-backdrop-${internalId}`,
|
|
15
|
+
transition = false,
|
|
16
|
+
...theirProps
|
|
17
|
+
} = $props();
|
|
18
|
+
const context = usePopoverContext("PopoverBackdrop");
|
|
19
|
+
const { popoverState } = $derived(context);
|
|
20
|
+
const usesOpenClosedState = useOpenClosed();
|
|
21
|
+
const _transition = useTransition({
|
|
22
|
+
get enabled() {
|
|
23
|
+
return transition;
|
|
24
|
+
},
|
|
25
|
+
get element() {
|
|
26
|
+
return ref;
|
|
27
|
+
},
|
|
28
|
+
get show() {
|
|
29
|
+
return usesOpenClosedState !== null ? (usesOpenClosedState.value & State.Open) === State.Open : popoverState === PopoverStates.Open;
|
|
59
30
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
31
|
+
});
|
|
32
|
+
const { visible, data: transitionData } = $derived(_transition);
|
|
33
|
+
const handleClick = (event) => {
|
|
34
|
+
context.closePopover();
|
|
35
|
+
};
|
|
36
|
+
const slot = $derived({
|
|
37
|
+
open: popoverState === PopoverStates.Open
|
|
38
|
+
});
|
|
39
|
+
const ourProps = $derived({
|
|
40
|
+
id,
|
|
41
|
+
"aria-hidden": true,
|
|
42
|
+
onclick: handleClick,
|
|
43
|
+
...transitionDataAttributes(transitionData)
|
|
44
|
+
});
|
|
71
45
|
</script>
|
|
72
46
|
|
|
73
47
|
<ElementOrComponent
|