@react-aria/overlays 3.12.1 → 3.13.0
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/import.mjs +1401 -0
- package/dist/main.js +40 -28
- package/dist/main.js.map +1 -1
- package/dist/module.js +40 -28
- package/dist/module.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +17 -12
- package/src/ariaHideOutside.ts +55 -30
- package/src/useOverlayPosition.ts +20 -14
- package/src/useOverlayTrigger.ts +1 -1
- package/src/usePopover.ts +2 -12
package/dist/module.js
CHANGED
|
@@ -339,7 +339,7 @@ function $2a41e45df1593e64$export$d39e1813b3bdd0e1(props) {
|
|
|
339
339
|
];
|
|
340
340
|
let updatePosition = (0, $k7QOs$useCallback)(()=>{
|
|
341
341
|
if (shouldUpdatePosition === false || !isOpen || !overlayRef.current || !targetRef.current || !scrollRef.current || !boundaryElement) return;
|
|
342
|
-
|
|
342
|
+
let position = (0, $edcf132a9284368a$export$b3ceb0cbf1056d98)({
|
|
343
343
|
placement: $2a41e45df1593e64$var$translateRTL(placement, direction),
|
|
344
344
|
overlayNode: overlayRef.current,
|
|
345
345
|
targetNode: targetRef.current,
|
|
@@ -350,7 +350,13 @@ function $2a41e45df1593e64$export$d39e1813b3bdd0e1(props) {
|
|
|
350
350
|
offset: offset,
|
|
351
351
|
crossOffset: crossOffset,
|
|
352
352
|
maxHeight: maxHeight
|
|
353
|
-
})
|
|
353
|
+
});
|
|
354
|
+
// Modify overlay styles directly so positioning happens immediately without the need of a second render
|
|
355
|
+
// This is so we don't have to delay autoFocus scrolling or delay applying preventScroll for popovers
|
|
356
|
+
Object.keys(position.position).forEach((key)=>overlayRef.current.style[key] = position.position[key] + "px");
|
|
357
|
+
overlayRef.current.style.maxHeight = position.maxHeight != null ? position.maxHeight + "px" : undefined;
|
|
358
|
+
// Trigger a set state for a second render anyway for arrow positioning
|
|
359
|
+
setPosition(position);
|
|
354
360
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
355
361
|
}, deps);
|
|
356
362
|
// Update position when anything changes
|
|
@@ -1152,20 +1158,35 @@ let $5e3802645cc19319$var$observerStack = [];
|
|
|
1152
1158
|
function $5e3802645cc19319$export$1c3ebcada18427bf(targets, root = document.body) {
|
|
1153
1159
|
let visibleNodes = new Set(targets);
|
|
1154
1160
|
let hiddenNodes = new Set();
|
|
1155
|
-
let
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1161
|
+
let walk = (root)=>{
|
|
1162
|
+
// Keep live announcer and top layer elements (e.g. toasts) visible.
|
|
1163
|
+
for (let element of root.querySelectorAll("[data-live-announcer], [data-react-aria-top-layer]"))visibleNodes.add(element);
|
|
1164
|
+
let acceptNode = (node)=>{
|
|
1159
1165
|
// Skip this node and its children if it is one of the target nodes, or a live announcer.
|
|
1160
1166
|
// Also skip children of already hidden nodes, as aria-hidden is recursive. An exception is
|
|
1161
1167
|
// made for elements with role="row" since VoiceOver on iOS has issues hiding elements with role="row".
|
|
1162
1168
|
// For that case we want to hide the cells inside as well (https://bugs.webkit.org/show_bug.cgi?id=222623).
|
|
1163
1169
|
if (visibleNodes.has(node) || hiddenNodes.has(node.parentElement) && node.parentElement.getAttribute("role") !== "row") return NodeFilter.FILTER_REJECT;
|
|
1164
1170
|
// Skip this node but continue to children if one of the targets is inside the node.
|
|
1165
|
-
|
|
1171
|
+
for (let target of visibleNodes){
|
|
1172
|
+
if (node.contains(target)) return NodeFilter.FILTER_SKIP;
|
|
1173
|
+
}
|
|
1166
1174
|
return NodeFilter.FILTER_ACCEPT;
|
|
1175
|
+
};
|
|
1176
|
+
let walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, {
|
|
1177
|
+
acceptNode: acceptNode
|
|
1178
|
+
});
|
|
1179
|
+
// TreeWalker does not include the root.
|
|
1180
|
+
let acceptRoot = acceptNode(root);
|
|
1181
|
+
if (acceptRoot === NodeFilter.FILTER_ACCEPT) hide(root);
|
|
1182
|
+
if (acceptRoot !== NodeFilter.FILTER_REJECT) {
|
|
1183
|
+
let node = walker.nextNode();
|
|
1184
|
+
while(node != null){
|
|
1185
|
+
hide(node);
|
|
1186
|
+
node = walker.nextNode();
|
|
1187
|
+
}
|
|
1167
1188
|
}
|
|
1168
|
-
}
|
|
1189
|
+
};
|
|
1169
1190
|
let hide = (node)=>{
|
|
1170
1191
|
var _refCountMap_get;
|
|
1171
1192
|
let refCount = (_refCountMap_get = $5e3802645cc19319$var$refCountMap.get(node)) !== null && _refCountMap_get !== void 0 ? _refCountMap_get : 0;
|
|
@@ -1179,11 +1200,7 @@ function $5e3802645cc19319$export$1c3ebcada18427bf(targets, root = document.body
|
|
|
1179
1200
|
// If there is already a MutationObserver listening from a previous call,
|
|
1180
1201
|
// disconnect it so the new on takes over.
|
|
1181
1202
|
if ($5e3802645cc19319$var$observerStack.length) $5e3802645cc19319$var$observerStack[$5e3802645cc19319$var$observerStack.length - 1].disconnect();
|
|
1182
|
-
|
|
1183
|
-
while(node != null){
|
|
1184
|
-
hide(node);
|
|
1185
|
-
node = walker.nextNode();
|
|
1186
|
-
}
|
|
1203
|
+
walk(root);
|
|
1187
1204
|
let observer = new MutationObserver((changes)=>{
|
|
1188
1205
|
for (let change of changes){
|
|
1189
1206
|
if (change.type !== "childList" || change.addedNodes.length === 0) continue;
|
|
@@ -1192,9 +1209,15 @@ function $5e3802645cc19319$export$1c3ebcada18427bf(targets, root = document.body
|
|
|
1192
1209
|
if (![
|
|
1193
1210
|
...visibleNodes,
|
|
1194
1211
|
...hiddenNodes
|
|
1195
|
-
].some((node)=>node.contains(change.target)))
|
|
1196
|
-
|
|
1197
|
-
|
|
1212
|
+
].some((node)=>node.contains(change.target))) {
|
|
1213
|
+
for (let node of change.removedNodes)if (node instanceof Element) {
|
|
1214
|
+
visibleNodes.delete(node);
|
|
1215
|
+
hiddenNodes.delete(node);
|
|
1216
|
+
}
|
|
1217
|
+
for (let node1 of change.addedNodes){
|
|
1218
|
+
if ((node1 instanceof HTMLElement || node1 instanceof SVGElement) && (node1.dataset.liveAnnouncer === "true" || node1.dataset.reactAriaTopLayer === "true")) visibleNodes.add(node1);
|
|
1219
|
+
else if (node1 instanceof Element) walk(node1);
|
|
1220
|
+
}
|
|
1198
1221
|
}
|
|
1199
1222
|
}
|
|
1200
1223
|
});
|
|
@@ -1247,7 +1270,6 @@ function $5e3802645cc19319$export$1c3ebcada18427bf(targets, root = document.body
|
|
|
1247
1270
|
|
|
1248
1271
|
|
|
1249
1272
|
|
|
1250
|
-
|
|
1251
1273
|
function $f2f8a6077418541e$export$542a6fd13ac93354(props, state) {
|
|
1252
1274
|
let { triggerRef: triggerRef , popoverRef: popoverRef , isNonModal: isNonModal , isKeyboardDismissDisabled: isKeyboardDismissDisabled , ...otherProps } = props;
|
|
1253
1275
|
let { overlayProps: overlayProps , underlayProps: underlayProps } = (0, $a11501f3d1d39e6c$export$ea8f71083e90600f)({
|
|
@@ -1264,18 +1286,8 @@ function $f2f8a6077418541e$export$542a6fd13ac93354(props, state) {
|
|
|
1264
1286
|
isOpen: state.isOpen,
|
|
1265
1287
|
onClose: null
|
|
1266
1288
|
});
|
|
1267
|
-
// Delay preventing scroll until popover is positioned to avoid extra scroll padding.
|
|
1268
|
-
// This requires a layout effect so that positioning has been committed to the DOM
|
|
1269
|
-
// by the time usePreventScroll measures the element.
|
|
1270
|
-
let [isPositioned, setPositioned] = (0, $k7QOs$useState)(false);
|
|
1271
|
-
(0, $k7QOs$useLayoutEffect)(()=>{
|
|
1272
|
-
if (!isNonModal && placement) setPositioned(true);
|
|
1273
|
-
}, [
|
|
1274
|
-
isNonModal,
|
|
1275
|
-
placement
|
|
1276
|
-
]);
|
|
1277
1289
|
(0, $49c51c25361d4cd2$export$ee0f7cc6afcd1c18)({
|
|
1278
|
-
isDisabled: isNonModal
|
|
1290
|
+
isDisabled: isNonModal
|
|
1279
1291
|
});
|
|
1280
1292
|
(0, $k7QOs$useLayoutEffect)(()=>{
|
|
1281
1293
|
if (state.isOpen && !isNonModal && popoverRef.current) return (0, $5e3802645cc19319$export$1c3ebcada18427bf)([
|