@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/main.js
CHANGED
|
@@ -358,7 +358,7 @@ function $cd94b4896dd97759$export$d39e1813b3bdd0e1(props) {
|
|
|
358
358
|
];
|
|
359
359
|
let updatePosition = (0, $6Zb2x$react.useCallback)(()=>{
|
|
360
360
|
if (shouldUpdatePosition === false || !isOpen || !overlayRef.current || !targetRef.current || !scrollRef.current || !boundaryElement) return;
|
|
361
|
-
|
|
361
|
+
let position = (0, $5935ba4d7da2c103$export$b3ceb0cbf1056d98)({
|
|
362
362
|
placement: $cd94b4896dd97759$var$translateRTL(placement, direction),
|
|
363
363
|
overlayNode: overlayRef.current,
|
|
364
364
|
targetNode: targetRef.current,
|
|
@@ -369,7 +369,13 @@ function $cd94b4896dd97759$export$d39e1813b3bdd0e1(props) {
|
|
|
369
369
|
offset: offset,
|
|
370
370
|
crossOffset: crossOffset,
|
|
371
371
|
maxHeight: maxHeight
|
|
372
|
-
})
|
|
372
|
+
});
|
|
373
|
+
// Modify overlay styles directly so positioning happens immediately without the need of a second render
|
|
374
|
+
// This is so we don't have to delay autoFocus scrolling or delay applying preventScroll for popovers
|
|
375
|
+
Object.keys(position.position).forEach((key)=>overlayRef.current.style[key] = position.position[key] + "px");
|
|
376
|
+
overlayRef.current.style.maxHeight = position.maxHeight != null ? position.maxHeight + "px" : undefined;
|
|
377
|
+
// Trigger a set state for a second render anyway for arrow positioning
|
|
378
|
+
setPosition(position);
|
|
373
379
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
374
380
|
}, deps);
|
|
375
381
|
// Update position when anything changes
|
|
@@ -1171,20 +1177,35 @@ let $08ef1685902b6011$var$observerStack = [];
|
|
|
1171
1177
|
function $08ef1685902b6011$export$1c3ebcada18427bf(targets, root = document.body) {
|
|
1172
1178
|
let visibleNodes = new Set(targets);
|
|
1173
1179
|
let hiddenNodes = new Set();
|
|
1174
|
-
let
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1180
|
+
let walk = (root)=>{
|
|
1181
|
+
// Keep live announcer and top layer elements (e.g. toasts) visible.
|
|
1182
|
+
for (let element of root.querySelectorAll("[data-live-announcer], [data-react-aria-top-layer]"))visibleNodes.add(element);
|
|
1183
|
+
let acceptNode = (node)=>{
|
|
1178
1184
|
// Skip this node and its children if it is one of the target nodes, or a live announcer.
|
|
1179
1185
|
// Also skip children of already hidden nodes, as aria-hidden is recursive. An exception is
|
|
1180
1186
|
// made for elements with role="row" since VoiceOver on iOS has issues hiding elements with role="row".
|
|
1181
1187
|
// For that case we want to hide the cells inside as well (https://bugs.webkit.org/show_bug.cgi?id=222623).
|
|
1182
1188
|
if (visibleNodes.has(node) || hiddenNodes.has(node.parentElement) && node.parentElement.getAttribute("role") !== "row") return NodeFilter.FILTER_REJECT;
|
|
1183
1189
|
// Skip this node but continue to children if one of the targets is inside the node.
|
|
1184
|
-
|
|
1190
|
+
for (let target of visibleNodes){
|
|
1191
|
+
if (node.contains(target)) return NodeFilter.FILTER_SKIP;
|
|
1192
|
+
}
|
|
1185
1193
|
return NodeFilter.FILTER_ACCEPT;
|
|
1194
|
+
};
|
|
1195
|
+
let walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, {
|
|
1196
|
+
acceptNode: acceptNode
|
|
1197
|
+
});
|
|
1198
|
+
// TreeWalker does not include the root.
|
|
1199
|
+
let acceptRoot = acceptNode(root);
|
|
1200
|
+
if (acceptRoot === NodeFilter.FILTER_ACCEPT) hide(root);
|
|
1201
|
+
if (acceptRoot !== NodeFilter.FILTER_REJECT) {
|
|
1202
|
+
let node = walker.nextNode();
|
|
1203
|
+
while(node != null){
|
|
1204
|
+
hide(node);
|
|
1205
|
+
node = walker.nextNode();
|
|
1206
|
+
}
|
|
1186
1207
|
}
|
|
1187
|
-
}
|
|
1208
|
+
};
|
|
1188
1209
|
let hide = (node)=>{
|
|
1189
1210
|
var _refCountMap_get;
|
|
1190
1211
|
let refCount = (_refCountMap_get = $08ef1685902b6011$var$refCountMap.get(node)) !== null && _refCountMap_get !== void 0 ? _refCountMap_get : 0;
|
|
@@ -1198,11 +1219,7 @@ function $08ef1685902b6011$export$1c3ebcada18427bf(targets, root = document.body
|
|
|
1198
1219
|
// If there is already a MutationObserver listening from a previous call,
|
|
1199
1220
|
// disconnect it so the new on takes over.
|
|
1200
1221
|
if ($08ef1685902b6011$var$observerStack.length) $08ef1685902b6011$var$observerStack[$08ef1685902b6011$var$observerStack.length - 1].disconnect();
|
|
1201
|
-
|
|
1202
|
-
while(node != null){
|
|
1203
|
-
hide(node);
|
|
1204
|
-
node = walker.nextNode();
|
|
1205
|
-
}
|
|
1222
|
+
walk(root);
|
|
1206
1223
|
let observer = new MutationObserver((changes)=>{
|
|
1207
1224
|
for (let change of changes){
|
|
1208
1225
|
if (change.type !== "childList" || change.addedNodes.length === 0) continue;
|
|
@@ -1211,9 +1228,15 @@ function $08ef1685902b6011$export$1c3ebcada18427bf(targets, root = document.body
|
|
|
1211
1228
|
if (![
|
|
1212
1229
|
...visibleNodes,
|
|
1213
1230
|
...hiddenNodes
|
|
1214
|
-
].some((node)=>node.contains(change.target)))
|
|
1215
|
-
|
|
1216
|
-
|
|
1231
|
+
].some((node)=>node.contains(change.target))) {
|
|
1232
|
+
for (let node of change.removedNodes)if (node instanceof Element) {
|
|
1233
|
+
visibleNodes.delete(node);
|
|
1234
|
+
hiddenNodes.delete(node);
|
|
1235
|
+
}
|
|
1236
|
+
for (let node1 of change.addedNodes){
|
|
1237
|
+
if ((node1 instanceof HTMLElement || node1 instanceof SVGElement) && (node1.dataset.liveAnnouncer === "true" || node1.dataset.reactAriaTopLayer === "true")) visibleNodes.add(node1);
|
|
1238
|
+
else if (node1 instanceof Element) walk(node1);
|
|
1239
|
+
}
|
|
1217
1240
|
}
|
|
1218
1241
|
}
|
|
1219
1242
|
});
|
|
@@ -1266,7 +1289,6 @@ function $08ef1685902b6011$export$1c3ebcada18427bf(targets, root = document.body
|
|
|
1266
1289
|
|
|
1267
1290
|
|
|
1268
1291
|
|
|
1269
|
-
|
|
1270
1292
|
function $6c2dfcdee3e15e20$export$542a6fd13ac93354(props, state) {
|
|
1271
1293
|
let { triggerRef: triggerRef , popoverRef: popoverRef , isNonModal: isNonModal , isKeyboardDismissDisabled: isKeyboardDismissDisabled , ...otherProps } = props;
|
|
1272
1294
|
let { overlayProps: overlayProps , underlayProps: underlayProps } = (0, $82711f9cb668ecdb$export$ea8f71083e90600f)({
|
|
@@ -1283,18 +1305,8 @@ function $6c2dfcdee3e15e20$export$542a6fd13ac93354(props, state) {
|
|
|
1283
1305
|
isOpen: state.isOpen,
|
|
1284
1306
|
onClose: null
|
|
1285
1307
|
});
|
|
1286
|
-
// Delay preventing scroll until popover is positioned to avoid extra scroll padding.
|
|
1287
|
-
// This requires a layout effect so that positioning has been committed to the DOM
|
|
1288
|
-
// by the time usePreventScroll measures the element.
|
|
1289
|
-
let [isPositioned, setPositioned] = (0, $6Zb2x$react.useState)(false);
|
|
1290
|
-
(0, $6Zb2x$reactariautils.useLayoutEffect)(()=>{
|
|
1291
|
-
if (!isNonModal && placement) setPositioned(true);
|
|
1292
|
-
}, [
|
|
1293
|
-
isNonModal,
|
|
1294
|
-
placement
|
|
1295
|
-
]);
|
|
1296
1308
|
(0, $5c2f5cd01815d369$export$ee0f7cc6afcd1c18)({
|
|
1297
|
-
isDisabled: isNonModal
|
|
1309
|
+
isDisabled: isNonModal
|
|
1298
1310
|
});
|
|
1299
1311
|
(0, $6Zb2x$reactariautils.useLayoutEffect)(()=>{
|
|
1300
1312
|
if (state.isOpen && !isNonModal && popoverRef.current) return (0, $08ef1685902b6011$export$1c3ebcada18427bf)([
|