@navikt/ds-react 7.32.3 → 7.32.5
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/cjs/accordion/AccordionHeader.js +1 -1
- package/cjs/accordion/AccordionHeader.js.map +1 -1
- package/cjs/form/combobox/Input/ToggleListButton.js +2 -1
- package/cjs/form/combobox/Input/ToggleListButton.js.map +1 -1
- package/cjs/modal/Modal.js +12 -0
- package/cjs/modal/Modal.js.map +1 -1
- package/cjs/modal/ModalUtils.d.ts +3 -2
- package/cjs/modal/ModalUtils.js +60 -10
- package/cjs/modal/ModalUtils.js.map +1 -1
- package/cjs/util/detectBrowser.d.ts +3 -1
- package/cjs/util/detectBrowser.js +27 -1
- package/cjs/util/detectBrowser.js.map +1 -1
- package/cjs/util/hideNonTargetElements.d.ts +8 -0
- package/cjs/util/hideNonTargetElements.js +141 -0
- package/cjs/util/hideNonTargetElements.js.map +1 -0
- package/cjs/util/hooks/useScrollLock.d.ts +11 -0
- package/cjs/util/hooks/useScrollLock.js +270 -0
- package/cjs/util/hooks/useScrollLock.js.map +1 -0
- package/esm/accordion/AccordionHeader.js +1 -1
- package/esm/accordion/AccordionHeader.js.map +1 -1
- package/esm/form/combobox/Input/ToggleListButton.js +2 -1
- package/esm/form/combobox/Input/ToggleListButton.js.map +1 -1
- package/esm/modal/Modal.js +13 -1
- package/esm/modal/Modal.js.map +1 -1
- package/esm/modal/ModalUtils.d.ts +3 -2
- package/esm/modal/ModalUtils.js +27 -7
- package/esm/modal/ModalUtils.js.map +1 -1
- package/esm/util/detectBrowser.d.ts +3 -1
- package/esm/util/detectBrowser.js +25 -1
- package/esm/util/detectBrowser.js.map +1 -1
- package/esm/util/hideNonTargetElements.d.ts +8 -0
- package/esm/util/hideNonTargetElements.js +139 -0
- package/esm/util/hideNonTargetElements.js.map +1 -0
- package/esm/util/hooks/useScrollLock.d.ts +11 -0
- package/esm/util/hooks/useScrollLock.js +268 -0
- package/esm/util/hooks/useScrollLock.js.map +1 -0
- package/package.json +5 -5
- package/src/accordion/AccordionHeader.tsx +1 -1
- package/src/form/combobox/Input/ToggleListButton.tsx +2 -1
- package/src/form/combobox/__tests__/combobox.test.tsx +45 -106
- package/src/modal/Modal.test.tsx +13 -24
- package/src/modal/Modal.tsx +16 -0
- package/src/modal/ModalUtils.ts +35 -7
- package/src/util/__tests__/hideNonTargetElements.test.ts +147 -0
- package/src/util/detectBrowser.ts +41 -1
- package/src/util/hideNonTargetElements.ts +179 -0
- package/src/util/hooks/useScrollLock.ts +317 -0
|
@@ -65,7 +65,7 @@ const AccordionHeader = (0, react_1.forwardRef)((_a, ref) => {
|
|
|
65
65
|
let headingSize = (_b = accordionContext === null || accordionContext === void 0 ? void 0 : accordionContext.headingSize) !== null && _b !== void 0 ? _b : "small";
|
|
66
66
|
if (themeContext === null || themeContext === void 0 ? void 0 : themeContext.isDarkside) {
|
|
67
67
|
/* Fallback to "medium" Accordion-size if any other sizes are used */
|
|
68
|
-
headingSize = (accordionContext === null || accordionContext === void 0 ? void 0 : accordionContext.size) === "
|
|
68
|
+
headingSize = (accordionContext === null || accordionContext === void 0 ? void 0 : accordionContext.size) === "large" ? "small" : "xsmall";
|
|
69
69
|
}
|
|
70
70
|
return (react_1.default.createElement("button", Object.assign({ ref: ref }, rest, { className: cn("navds-accordion__header", className), onClick: (0, composeEventHandlers_1.composeEventHandlers)(onClick, itemContext.toggleOpen), "aria-expanded": itemContext.open, type: "button" }),
|
|
71
71
|
react_1.default.createElement("span", { className: cn("navds-accordion__icon-wrapper") },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccordionHeader.js","sourceRoot":"","sources":["../../src/accordion/AccordionHeader.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAsD;AACtD,qDAAsD;AACtD,0CAAgE;AAChE,8CAAwC;AACxC,uEAAoE;AACpE,yDAAsD;AACtD,mDAAuD;AAUvD,MAAM,eAAe,GAAG,IAAA,kBAAU,EAChC,CAAC,EAAyC,EAAE,GAAG,EAAE,EAAE;;QAAlD,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,OAAW,EAAN,IAAI,cAAvC,oCAAyC,CAAF;IACtC,MAAM,WAAW,GAAG,IAAA,kBAAU,EAAC,oCAAoB,CAAC,CAAC;IACrD,MAAM,gBAAgB,GAAG,IAAA,kBAAU,EAAC,mCAAgB,CAAC,CAAC;IAEtD,MAAM,YAAY,GAAG,IAAA,wBAAgB,EAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,EAAE,EAAE,EAAE,GAAG,IAAA,oBAAY,GAAE,CAAC;IAE9B,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CACX,2GAA2G,CAC5G,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,WAAW,GAAG,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,WAAW,mCAAI,OAAO,CAAC;IAE3D,IAAI,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,UAAU,EAAE,CAAC;QAC7B,qEAAqE;QACrE,WAAW,GAAG,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,IAAI,MAAK,OAAO,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"AccordionHeader.js","sourceRoot":"","sources":["../../src/accordion/AccordionHeader.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAsD;AACtD,qDAAsD;AACtD,0CAAgE;AAChE,8CAAwC;AACxC,uEAAoE;AACpE,yDAAsD;AACtD,mDAAuD;AAUvD,MAAM,eAAe,GAAG,IAAA,kBAAU,EAChC,CAAC,EAAyC,EAAE,GAAG,EAAE,EAAE;;QAAlD,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,OAAW,EAAN,IAAI,cAAvC,oCAAyC,CAAF;IACtC,MAAM,WAAW,GAAG,IAAA,kBAAU,EAAC,oCAAoB,CAAC,CAAC;IACrD,MAAM,gBAAgB,GAAG,IAAA,kBAAU,EAAC,mCAAgB,CAAC,CAAC;IAEtD,MAAM,YAAY,GAAG,IAAA,wBAAgB,EAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,EAAE,EAAE,EAAE,GAAG,IAAA,oBAAY,GAAE,CAAC;IAE9B,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CACX,2GAA2G,CAC5G,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,WAAW,GAAG,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,WAAW,mCAAI,OAAO,CAAC;IAE3D,IAAI,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,UAAU,EAAE,CAAC;QAC7B,qEAAqE;QACrE,WAAW,GAAG,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,IAAI,MAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;IACxE,CAAC;IAED,OAAO,CACL,wDACE,GAAG,EAAE,GAAG,IACJ,IAAI,IACR,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE,SAAS,CAAC,EACnD,OAAO,EAAE,IAAA,2CAAoB,EAAC,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,mBAC/C,WAAW,CAAC,IAAI,EAC/B,IAAI,EAAC,QAAQ;QAEb,wCAAM,SAAS,EAAE,EAAE,CAAC,+BAA+B,CAAC;YAClD,8BAAC,6BAAe,IACd,SAAS,EAAE,EAAE,CAAC,iCAAiC,CAAC,wBAEhD,CACG;QACP,8BAAC,oBAAO,IACN,IAAI,EAAE,WAAW,EACjB,EAAE,EAAC,MAAM,EACT,SAAS,EAAE,EAAE,CAAC,iCAAiC,CAAC,IAE/C,QAAQ,CACD,CACH,CACV,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,kBAAe,eAAe,CAAC"}
|
|
@@ -43,7 +43,8 @@ exports.ToggleListButton = (0, react_1.forwardRef)((_, ref) => {
|
|
|
43
43
|
const { cn } = (0, Theme_1.useRenameCSS)();
|
|
44
44
|
const { isListOpen, toggleIsListOpen } = (0, filteredOptionsContext_1.useFilteredOptionsContext)();
|
|
45
45
|
const { focusInput } = (0, Input_context_1.useInputContext)();
|
|
46
|
-
return (react_1.default.createElement("div", { ref: ref, onClick: () => {
|
|
46
|
+
return (react_1.default.createElement("div", { ref: ref, onClick: (event) => {
|
|
47
|
+
event.stopPropagation();
|
|
47
48
|
toggleIsListOpen();
|
|
48
49
|
focusInput();
|
|
49
50
|
}, className: cn("navds-combobox__button-toggle-list"), "aria-hidden": true }, isListOpen ? react_1.default.createElement(aksel_icons_1.ChevronUpIcon, null) : react_1.default.createElement(aksel_icons_1.ChevronDownIcon, null)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToggleListButton.js","sourceRoot":"","sources":["../../../../src/form/combobox/Input/ToggleListButton.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAA0C;AAC1C,qDAAqE;AACrE,gDAAoD;AACpD,sFAAsF;AACtF,mDAAkD;AAErC,QAAA,gBAAgB,GAAG,IAAA,kBAAU,EAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;IACpE,MAAM,EAAE,EAAE,EAAE,GAAG,IAAA,oBAAY,GAAE,CAAC;IAC9B,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,IAAA,kDAAyB,GAAE,CAAC;IACrE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAA,+BAAe,GAAE,CAAC;IAEzC,OAAO,CACL,uCACE,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ToggleListButton.js","sourceRoot":"","sources":["../../../../src/form/combobox/Input/ToggleListButton.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAA0C;AAC1C,qDAAqE;AACrE,gDAAoD;AACpD,sFAAsF;AACtF,mDAAkD;AAErC,QAAA,gBAAgB,GAAG,IAAA,kBAAU,EAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;IACpE,MAAM,EAAE,EAAE,EAAE,GAAG,IAAA,oBAAY,GAAE,CAAC;IAC9B,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,IAAA,kDAAyB,GAAE,CAAC;IACrE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAA,+BAAe,GAAE,CAAC;IAEzC,OAAO,CACL,uCACE,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,gBAAgB,EAAE,CAAC;YACnB,UAAU,EAAE,CAAC;QACf,CAAC,EACD,SAAS,EAAE,EAAE,CAAC,oCAAoC,CAAC,yBAGlD,UAAU,CAAC,CAAC,CAAC,8BAAC,2BAAa,OAAG,CAAC,CAAC,CAAC,8BAAC,6BAAe,OAAG,CACjD,CACP,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,kBAAe,wBAAgB,CAAC"}
|
package/cjs/modal/Modal.js
CHANGED
|
@@ -58,6 +58,7 @@ const typography_1 = require("../typography");
|
|
|
58
58
|
const composeEventHandlers_1 = require("../util/composeEventHandlers");
|
|
59
59
|
const hooks_1 = require("../util/hooks");
|
|
60
60
|
const useMergeRefs_1 = require("../util/hooks/useMergeRefs");
|
|
61
|
+
const useScrollLock_1 = require("../util/hooks/useScrollLock");
|
|
61
62
|
const Modal_context_1 = require("./Modal.context");
|
|
62
63
|
const ModalBody_1 = __importDefault(require("./ModalBody"));
|
|
63
64
|
const ModalFooter_1 = __importDefault(require("./ModalFooter"));
|
|
@@ -122,6 +123,7 @@ exports.Modal = (0, react_2.forwardRef)((_a, ref) => {
|
|
|
122
123
|
const portalNode = (0, react_1.useFloatingPortalNode)({ root: rootElement });
|
|
123
124
|
const dateContext = (0, Date_Input_1.useDateInputContext)(false);
|
|
124
125
|
const isNested = (0, Modal_context_1.useModalContext)(false) !== undefined;
|
|
126
|
+
const isModalOpen = (0, ModalUtils_1.useIsModalOpen)(modalRef.current);
|
|
125
127
|
if (isNested && !dateContext) {
|
|
126
128
|
console.error("Modals should not be nested");
|
|
127
129
|
}
|
|
@@ -154,6 +156,16 @@ exports.Modal = (0, react_2.forwardRef)((_a, ref) => {
|
|
|
154
156
|
}
|
|
155
157
|
}
|
|
156
158
|
}, [portalNode, open]);
|
|
159
|
+
(0, useScrollLock_1.useScrollLock)({
|
|
160
|
+
enabled: isModalOpen,
|
|
161
|
+
mounted: isModalOpen,
|
|
162
|
+
open: isModalOpen,
|
|
163
|
+
referenceElement: modalRef.current,
|
|
164
|
+
});
|
|
165
|
+
/**
|
|
166
|
+
* TODO: Kept for legacy support.
|
|
167
|
+
* - Remove utility in v8 and deprecate body-classes in ModalUtils.ts
|
|
168
|
+
*/
|
|
157
169
|
(0, ModalUtils_1.useBodyScrollLock)(modalRef, portalNode, isNested);
|
|
158
170
|
const isWidthPreset = typeof width === "string" && ["small", "medium"].includes(width);
|
|
159
171
|
const mergedClassName = cn("navds-modal", className, {
|
package/cjs/modal/Modal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/modal/Modal.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAA2D;AAC3D,+CAA6D;AAC7D,yCAAyC;AACzC,mDAAyD;AACzD,mDAAmD;AACnD,0CAA8C;AAC9C,8CAAgD;AAChD,uEAAoE;AACpE,yCAAsC;AACtC,6DAA0D;AAC1D,mDAAwE;AACxE,4DAAoC;AACpC,gEAAwC;AACxC,gEAAwC;AACxC,
|
|
1
|
+
{"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/modal/Modal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ export interface MouseCoordinates {
|
|
|
6
6
|
}
|
|
7
7
|
export declare const coordsAreInside: ({ clientX, clientY }: MouseCoordinates, { left, top, right, bottom }: DOMRect) => boolean;
|
|
8
8
|
export declare function getCloseHandler(modalRef: React.RefObject<HTMLDialogElement | null>, header: ModalProps["header"], onBeforeClose: ModalProps["onBeforeClose"]): (() => false | void | undefined) | undefined;
|
|
9
|
+
declare function useIsModalOpen(modalRef: HTMLDialogElement | null): boolean;
|
|
9
10
|
export declare const BODY_CLASS_LEGACY = "navds-modal__document-body";
|
|
10
|
-
|
|
11
|
-
export
|
|
11
|
+
declare function useBodyScrollLock(modalRef: React.RefObject<HTMLDialogElement | null>, portalNode: HTMLElement | null, isNested: boolean): void;
|
|
12
|
+
export { useIsModalOpen, useBodyScrollLock };
|
package/cjs/modal/ModalUtils.js
CHANGED
|
@@ -1,12 +1,43 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
5
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
36
|
+
exports.BODY_CLASS_LEGACY = exports.coordsAreInside = void 0;
|
|
7
37
|
exports.getCloseHandler = getCloseHandler;
|
|
38
|
+
exports.useIsModalOpen = useIsModalOpen;
|
|
8
39
|
exports.useBodyScrollLock = useBodyScrollLock;
|
|
9
|
-
const react_1 =
|
|
40
|
+
const react_1 = __importStar(require("react"));
|
|
10
41
|
const owner_1 = require("../util/owner");
|
|
11
42
|
const coordsAreInside = ({ clientX, clientY }, { left, top, right, bottom }) => {
|
|
12
43
|
if (clientX < left || clientY < top)
|
|
@@ -24,8 +55,27 @@ function getCloseHandler(modalRef, header, onBeforeClose) {
|
|
|
24
55
|
}
|
|
25
56
|
return () => { var _a; return (_a = modalRef.current) === null || _a === void 0 ? void 0 : _a.close(); };
|
|
26
57
|
}
|
|
58
|
+
function useIsModalOpen(modalRef) {
|
|
59
|
+
const [isOpen, setIsOpen] = react_1.default.useState(false);
|
|
60
|
+
(0, react_1.useEffect)(() => {
|
|
61
|
+
if (!modalRef) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
setIsOpen(modalRef.open);
|
|
65
|
+
const observer = new MutationObserver(() => {
|
|
66
|
+
setIsOpen(modalRef.open);
|
|
67
|
+
});
|
|
68
|
+
observer.observe(modalRef, {
|
|
69
|
+
attributes: true,
|
|
70
|
+
attributeFilter: ["open"],
|
|
71
|
+
});
|
|
72
|
+
return () => {
|
|
73
|
+
observer.disconnect();
|
|
74
|
+
};
|
|
75
|
+
}, [modalRef]);
|
|
76
|
+
return isOpen;
|
|
77
|
+
}
|
|
27
78
|
exports.BODY_CLASS_LEGACY = "navds-modal__document-body";
|
|
28
|
-
exports.BODY_CLASS = "aksel-modal__document-body";
|
|
29
79
|
function useBodyScrollLock(modalRef, portalNode, isNested) {
|
|
30
80
|
react_1.default.useEffect(() => {
|
|
31
81
|
if (isNested) {
|
|
@@ -38,15 +88,15 @@ function useBodyScrollLock(modalRef, portalNode, isNested) {
|
|
|
38
88
|
const ownerDoc = (0, owner_1.ownerDocument)(modalRef.current);
|
|
39
89
|
// In case `open` is true initially
|
|
40
90
|
if (modalRef.current.open) {
|
|
41
|
-
ownerDoc.body.classList.add(exports.
|
|
91
|
+
ownerDoc.body.classList.add(exports.BODY_CLASS_LEGACY);
|
|
42
92
|
}
|
|
43
93
|
const observer = new MutationObserver(() => {
|
|
44
94
|
var _a;
|
|
45
95
|
if ((_a = modalRef.current) === null || _a === void 0 ? void 0 : _a.open) {
|
|
46
|
-
ownerDoc.body.classList.add(exports.
|
|
96
|
+
ownerDoc.body.classList.add(exports.BODY_CLASS_LEGACY);
|
|
47
97
|
}
|
|
48
98
|
else {
|
|
49
|
-
ownerDoc.body.classList.remove(exports.
|
|
99
|
+
ownerDoc.body.classList.remove(exports.BODY_CLASS_LEGACY);
|
|
50
100
|
}
|
|
51
101
|
});
|
|
52
102
|
observer.observe(modalRef.current, {
|
|
@@ -56,7 +106,7 @@ function useBodyScrollLock(modalRef, portalNode, isNested) {
|
|
|
56
106
|
return () => {
|
|
57
107
|
observer.disconnect();
|
|
58
108
|
// In case modal is unmounted before it's closed
|
|
59
|
-
ownerDoc.body.classList.remove(exports.
|
|
109
|
+
ownerDoc.body.classList.remove(exports.BODY_CLASS_LEGACY);
|
|
60
110
|
};
|
|
61
111
|
}, [modalRef, portalNode, isNested]);
|
|
62
112
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalUtils.js","sourceRoot":"","sources":["../../src/modal/ModalUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ModalUtils.js","sourceRoot":"","sources":["../../src/modal/ModalUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isSafari = void 0;
|
|
3
|
+
exports.isIOS = exports.isWebKit = exports.isSafari = void 0;
|
|
4
4
|
const hasNavigator = typeof navigator !== "undefined";
|
|
5
|
+
function getNavigatorData() {
|
|
6
|
+
var _a, _b;
|
|
7
|
+
if (!hasNavigator) {
|
|
8
|
+
return { platform: "", maxTouchPoints: -1 };
|
|
9
|
+
}
|
|
10
|
+
const uaData = navigator.userAgentData;
|
|
11
|
+
if (uaData === null || uaData === void 0 ? void 0 : uaData.platform) {
|
|
12
|
+
return {
|
|
13
|
+
platform: uaData.platform,
|
|
14
|
+
maxTouchPoints: navigator.maxTouchPoints,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
platform: (_a = navigator.platform) !== null && _a !== void 0 ? _a : "",
|
|
19
|
+
maxTouchPoints: (_b = navigator.maxTouchPoints) !== null && _b !== void 0 ? _b : -1,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const nav = getNavigatorData();
|
|
5
23
|
const isSafari = hasNavigator && /apple/i.test(navigator.vendor);
|
|
6
24
|
exports.isSafari = isSafari;
|
|
25
|
+
const isWebKit = typeof CSS === "undefined" || !CSS.supports
|
|
26
|
+
? false
|
|
27
|
+
: CSS.supports("-webkit-backdrop-filter:none");
|
|
28
|
+
exports.isWebKit = isWebKit;
|
|
29
|
+
const isIOS = nav.platform === "MacIntel" && nav.maxTouchPoints > 1
|
|
30
|
+
? true
|
|
31
|
+
: /iP(hone|ad|od)|iOS/.test(nav.platform);
|
|
32
|
+
exports.isIOS = isIOS;
|
|
7
33
|
//# sourceMappingURL=detectBrowser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detectBrowser.js","sourceRoot":"","sources":["../../src/util/detectBrowser.ts"],"names":[],"mappings":";;;AAAA,MAAM,YAAY,GAAG,OAAO,SAAS,KAAK,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"detectBrowser.js","sourceRoot":"","sources":["../../src/util/detectBrowser.ts"],"names":[],"mappings":";;;AAAA,MAAM,YAAY,GAAG,OAAO,SAAS,KAAK,WAAW,CAAC;AAQtD,SAAS,gBAAgB;;IACvB,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC;IAC9C,CAAC;IAED,MAAM,MAAM,GAAI,SAAiB,CAAC,aAErB,CAAC;IAEd,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,EAAE,CAAC;QACrB,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,cAAc,EAAE,SAAS,CAAC,cAAc;SACzC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,MAAA,SAAS,CAAC,QAAQ,mCAAI,EAAE;QAClC,cAAc,EAAE,MAAA,SAAS,CAAC,cAAc,mCAAI,CAAC,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;AAE/B,MAAM,QAAQ,GAAG,YAAY,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAYxD,4BAAQ;AAVjB,MAAM,QAAQ,GACZ,OAAO,GAAG,KAAK,WAAW,IAAI,CAAC,GAAG,CAAC,QAAQ;IACzC,CAAC,CAAC,KAAK;IACP,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;AAOhC,4BAAQ;AAL3B,MAAM,KAAK,GACT,GAAG,CAAC,QAAQ,KAAK,UAAU,IAAI,GAAG,CAAC,cAAc,GAAG,CAAC;IACnD,CAAC,CAAC,IAAI;IACN,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAEjB,sBAAK"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type UndoFn = () => void;
|
|
2
|
+
/**
|
|
3
|
+
* Hides all elements in the document body for assertive technologies except the specified elements with `aria-hidden`.
|
|
4
|
+
* @param avoidElements - An array of elements to avoid hiding.
|
|
5
|
+
* @returns A function that, when called, will undo the hiding of elements.
|
|
6
|
+
*/
|
|
7
|
+
declare function hideNonTargetElements(avoidElements: Element[]): UndoFn;
|
|
8
|
+
export { hideNonTargetElements };
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hideNonTargetElements = hideNonTargetElements;
|
|
4
|
+
/**
|
|
5
|
+
* Modified version of `aria-hidden`-package.
|
|
6
|
+
* - Removed "inert"-functionality.
|
|
7
|
+
* - Removed flexibility for different data-attributes.
|
|
8
|
+
* https://github.com/theKashey/aria-hidden/blob/720e8a8e1cfa047bd299a929d95d47ac860a5c1a/src/index.ts
|
|
9
|
+
*/
|
|
10
|
+
const owner_1 = require("./owner");
|
|
11
|
+
let ariaHiddenCounter = new WeakMap();
|
|
12
|
+
let markerCounter = new WeakMap();
|
|
13
|
+
let uncontrolledElementsSet = new WeakSet();
|
|
14
|
+
let lockCount = 0;
|
|
15
|
+
const controlAttribute = "aria-hidden";
|
|
16
|
+
const markerName = "data-aksel-hidden";
|
|
17
|
+
/**
|
|
18
|
+
* Unwraps a Shadow DOM host to find the actual Element in the light DOM.
|
|
19
|
+
*/
|
|
20
|
+
function unwrapHost(node) {
|
|
21
|
+
return (node &&
|
|
22
|
+
(node.host || unwrapHost(node.parentNode)));
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Corrects the target elements by unwrapping Shadow DOM hosts if necessary.
|
|
26
|
+
*
|
|
27
|
+
* @param parent - The parent HTMLElement to check containment against.
|
|
28
|
+
* @param targets - An array of target Elements to correct.
|
|
29
|
+
* @returns An array of corrected Elements that are contained within the parent.
|
|
30
|
+
*/
|
|
31
|
+
function correctElements(parent, targets) {
|
|
32
|
+
return targets
|
|
33
|
+
.map((target) => {
|
|
34
|
+
if (parent.contains(target)) {
|
|
35
|
+
return target;
|
|
36
|
+
}
|
|
37
|
+
const correctedTarget = unwrapHost(target);
|
|
38
|
+
if (parent.contains(correctedTarget)) {
|
|
39
|
+
return correctedTarget;
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
})
|
|
43
|
+
.filter((x) => x !== null);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Applies the aria-hidden attribute to all elements in the body except the specified avoid elements.
|
|
47
|
+
*/
|
|
48
|
+
function applyAttributeToOthers(uncorrectedAvoidElements, body) {
|
|
49
|
+
const avoidElements = correctElements(body, uncorrectedAvoidElements);
|
|
50
|
+
const elementsToAvoidWithParents = new Set();
|
|
51
|
+
const elementsToAvoidUpdating = new Set(avoidElements);
|
|
52
|
+
const hiddenElements = [];
|
|
53
|
+
avoidElements.forEach(addToAvoidList);
|
|
54
|
+
applyAttributes(body);
|
|
55
|
+
elementsToAvoidWithParents.clear();
|
|
56
|
+
function addToAvoidList(el) {
|
|
57
|
+
if (!el || elementsToAvoidWithParents.has(el)) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
elementsToAvoidWithParents.add(el);
|
|
61
|
+
if (el.parentNode) {
|
|
62
|
+
addToAvoidList(el.parentNode);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function applyAttributes(parent) {
|
|
66
|
+
if (!parent || elementsToAvoidUpdating.has(parent)) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const parentChildren = parent.children;
|
|
70
|
+
for (let index = 0; index < parentChildren.length; index += 1) {
|
|
71
|
+
const node = parentChildren[index];
|
|
72
|
+
if (elementsToAvoidWithParents.has(node)) {
|
|
73
|
+
applyAttributes(node);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
const attr = node.getAttribute(controlAttribute);
|
|
77
|
+
/*
|
|
78
|
+
* We only check for falsy values here since since arbitrary values
|
|
79
|
+
* (e.g. "true", "foo", "") are all valid for indicating that the element is already hidden.
|
|
80
|
+
*/
|
|
81
|
+
const alreadyHidden = attr !== null && attr !== "false";
|
|
82
|
+
const counterValue = (ariaHiddenCounter.get(node) || 0) + 1;
|
|
83
|
+
const markerValue = (markerCounter.get(node) || 0) + 1;
|
|
84
|
+
ariaHiddenCounter.set(node, counterValue);
|
|
85
|
+
markerCounter.set(node, markerValue);
|
|
86
|
+
hiddenElements.push(node);
|
|
87
|
+
if (counterValue === 1 && alreadyHidden) {
|
|
88
|
+
uncontrolledElementsSet.add(node);
|
|
89
|
+
}
|
|
90
|
+
if (markerValue === 1) {
|
|
91
|
+
node.setAttribute(markerName, "");
|
|
92
|
+
}
|
|
93
|
+
if (!alreadyHidden) {
|
|
94
|
+
node.setAttribute(controlAttribute, "true");
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
lockCount += 1;
|
|
100
|
+
/* Cleanup */
|
|
101
|
+
return () => {
|
|
102
|
+
for (const element of hiddenElements) {
|
|
103
|
+
const currentCounterValue = ariaHiddenCounter.get(element) || 0;
|
|
104
|
+
const counterValue = currentCounterValue - 1;
|
|
105
|
+
const markerValue = (markerCounter.get(element) || 0) - 1;
|
|
106
|
+
ariaHiddenCounter.set(element, counterValue);
|
|
107
|
+
markerCounter.set(element, markerValue);
|
|
108
|
+
if (!counterValue) {
|
|
109
|
+
if (!uncontrolledElementsSet.has(element)) {
|
|
110
|
+
element.removeAttribute(controlAttribute);
|
|
111
|
+
}
|
|
112
|
+
uncontrolledElementsSet.delete(element);
|
|
113
|
+
}
|
|
114
|
+
if (!markerValue) {
|
|
115
|
+
element.removeAttribute(markerName);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
lockCount -= 1;
|
|
119
|
+
/* Reset */
|
|
120
|
+
if (!lockCount) {
|
|
121
|
+
ariaHiddenCounter = new WeakMap();
|
|
122
|
+
uncontrolledElementsSet = new WeakSet();
|
|
123
|
+
markerCounter = new WeakMap();
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Hides all elements in the document body for assertive technologies except the specified elements with `aria-hidden`.
|
|
129
|
+
* @param avoidElements - An array of elements to avoid hiding.
|
|
130
|
+
* @returns A function that, when called, will undo the hiding of elements.
|
|
131
|
+
*/
|
|
132
|
+
function hideNonTargetElements(avoidElements) {
|
|
133
|
+
const body = (0, owner_1.ownerDocument)(avoidElements[0]).body;
|
|
134
|
+
/**
|
|
135
|
+
* Assume that elements with `aria-live` or `script` tags should not be hidden.
|
|
136
|
+
* This ensures that live regions and scripts continue to function properly.
|
|
137
|
+
*/
|
|
138
|
+
const ingoredElements = Array.from(body.querySelectorAll("[aria-live], script"));
|
|
139
|
+
return applyAttributeToOthers(avoidElements.concat(ingoredElements), body);
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=hideNonTargetElements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hideNonTargetElements.js","sourceRoot":"","sources":["../../src/util/hideNonTargetElements.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Locks the scroll of the document when enabled.
|
|
3
|
+
* @param enabled - Whether to enable the scroll lock.
|
|
4
|
+
*/
|
|
5
|
+
declare function useScrollLock(params: {
|
|
6
|
+
enabled: boolean;
|
|
7
|
+
mounted: boolean;
|
|
8
|
+
open: boolean;
|
|
9
|
+
referenceElement?: Element | null;
|
|
10
|
+
}): void;
|
|
11
|
+
export { useScrollLock };
|