carbon-react 100.0.0 → 100.1.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.
|
@@ -31,8 +31,10 @@ const FocusTrap = ({
|
|
|
31
31
|
const [focusableElements, setFocusableElements] = (0, _react.useState)();
|
|
32
32
|
const [firstElement, setFirstElement] = (0, _react.useState)();
|
|
33
33
|
const [lastElement, setLastElement] = (0, _react.useState)();
|
|
34
|
+
const [currentFocusedElement, setCurrentFocusedElement] = (0, _react.useState)();
|
|
34
35
|
const {
|
|
35
|
-
isAnimationComplete
|
|
36
|
+
isAnimationComplete,
|
|
37
|
+
triggerRefocusFlag
|
|
36
38
|
} = (0, _react.useContext)(_modal.ModalContext);
|
|
37
39
|
const hasNewInputs = (0, _react.useCallback)(candidate => {
|
|
38
40
|
if (!focusableElements || candidate.length !== focusableElements.length) {
|
|
@@ -114,6 +116,33 @@ const FocusTrap = ({
|
|
|
114
116
|
document.removeEventListener("keydown", trapFn);
|
|
115
117
|
};
|
|
116
118
|
}, [firstElement, lastElement, focusableElements, bespokeTrap]);
|
|
119
|
+
const updateCurrentFocusedElement = (0, _react.useCallback)(() => {
|
|
120
|
+
const element = focusableElements === null || focusableElements === void 0 ? void 0 : focusableElements.find(el => el === document.activeElement);
|
|
121
|
+
|
|
122
|
+
if (element) {
|
|
123
|
+
setCurrentFocusedElement(element);
|
|
124
|
+
}
|
|
125
|
+
}, [focusableElements]);
|
|
126
|
+
(0, _react.useEffect)(() => {
|
|
127
|
+
document.addEventListener("focusin", updateCurrentFocusedElement);
|
|
128
|
+
return () => {
|
|
129
|
+
document.removeEventListener("focusin", updateCurrentFocusedElement);
|
|
130
|
+
};
|
|
131
|
+
}, [updateCurrentFocusedElement]);
|
|
132
|
+
const refocusTrap = (0, _react.useCallback)(() => {
|
|
133
|
+
/* istanbul ignore else */
|
|
134
|
+
if (currentFocusedElement && !currentFocusedElement.hasAttribute("disabled")) {
|
|
135
|
+
// the trap breaks if it tries to refocus a disabled element
|
|
136
|
+
(0, _focusTrapUtils.setElementFocus)(currentFocusedElement);
|
|
137
|
+
} else if (firstElement) {
|
|
138
|
+
(0, _focusTrapUtils.setElementFocus)(firstElement);
|
|
139
|
+
}
|
|
140
|
+
}, [currentFocusedElement, firstElement]);
|
|
141
|
+
(0, _react.useEffect)(() => {
|
|
142
|
+
if (triggerRefocusFlag) {
|
|
143
|
+
refocusTrap();
|
|
144
|
+
}
|
|
145
|
+
}, [triggerRefocusFlag, refocusTrap]);
|
|
117
146
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
118
147
|
ref: trapRef
|
|
119
148
|
}, children);
|
|
@@ -17,6 +17,8 @@ function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _
|
|
|
17
17
|
|
|
18
18
|
function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
|
|
19
19
|
|
|
20
|
+
function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
|
|
21
|
+
|
|
20
22
|
function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
|
|
21
23
|
|
|
22
24
|
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
|
|
@@ -25,39 +27,73 @@ function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) {
|
|
|
25
27
|
|
|
26
28
|
var _modalList = /*#__PURE__*/new WeakMap();
|
|
27
29
|
|
|
30
|
+
var _getTopModal = /*#__PURE__*/new WeakSet();
|
|
31
|
+
|
|
28
32
|
let ModalManagerInstance = /*#__PURE__*/function () {
|
|
29
33
|
function ModalManagerInstance() {
|
|
30
34
|
_classCallCheck(this, ModalManagerInstance);
|
|
31
35
|
|
|
36
|
+
_getTopModal.add(this);
|
|
37
|
+
|
|
32
38
|
_modalList.set(this, {
|
|
33
39
|
writable: true,
|
|
34
40
|
value: []
|
|
35
41
|
});
|
|
36
42
|
|
|
37
|
-
_defineProperty(this, "addModal", modal => {
|
|
38
|
-
|
|
43
|
+
_defineProperty(this, "addModal", (modal, setTriggerRefocusFlag) => {
|
|
44
|
+
const {
|
|
45
|
+
modal: topModal,
|
|
46
|
+
setTriggerRefocusFlag: setTrapFlag
|
|
47
|
+
} = _classPrivateMethodGet(this, _getTopModal, _getTopModal2).call(this);
|
|
48
|
+
|
|
49
|
+
if (topModal && setTrapFlag) {
|
|
50
|
+
setTrapFlag(false);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
_classPrivateFieldGet(this, _modalList).push({
|
|
54
|
+
modal,
|
|
55
|
+
setTriggerRefocusFlag
|
|
56
|
+
});
|
|
39
57
|
});
|
|
40
58
|
}
|
|
41
59
|
|
|
42
60
|
_createClass(ModalManagerInstance, [{
|
|
43
61
|
key: "isTopmost",
|
|
44
62
|
value: function isTopmost(modal) {
|
|
45
|
-
|
|
63
|
+
const {
|
|
64
|
+
modal: topModal
|
|
65
|
+
} = _classPrivateMethodGet(this, _getTopModal, _getTopModal2).call(this);
|
|
66
|
+
|
|
67
|
+
if (!modal || !topModal) {
|
|
46
68
|
return false;
|
|
47
69
|
}
|
|
48
70
|
|
|
49
|
-
return
|
|
71
|
+
return modal === topModal;
|
|
50
72
|
}
|
|
51
73
|
}, {
|
|
52
74
|
key: "removeModal",
|
|
53
75
|
value: function removeModal(modal) {
|
|
54
|
-
const modalIndex = _classPrivateFieldGet(this, _modalList).
|
|
76
|
+
const modalIndex = _classPrivateFieldGet(this, _modalList).findIndex(({
|
|
77
|
+
modal: m
|
|
78
|
+
}) => m === modal);
|
|
55
79
|
|
|
56
80
|
if (modalIndex === -1) {
|
|
57
81
|
return;
|
|
58
82
|
}
|
|
59
83
|
|
|
60
84
|
_classPrivateFieldGet(this, _modalList).splice(modalIndex, 1);
|
|
85
|
+
|
|
86
|
+
if (!_classPrivateFieldGet(this, _modalList).length) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const {
|
|
91
|
+
setTriggerRefocusFlag
|
|
92
|
+
} = _classPrivateMethodGet(this, _getTopModal, _getTopModal2).call(this);
|
|
93
|
+
|
|
94
|
+
if (setTriggerRefocusFlag) {
|
|
95
|
+
setTriggerRefocusFlag(true);
|
|
96
|
+
}
|
|
61
97
|
}
|
|
62
98
|
}, {
|
|
63
99
|
key: "clearList",
|
|
@@ -69,6 +105,14 @@ let ModalManagerInstance = /*#__PURE__*/function () {
|
|
|
69
105
|
return ModalManagerInstance;
|
|
70
106
|
}();
|
|
71
107
|
|
|
108
|
+
function _getTopModal2() {
|
|
109
|
+
if (!_classPrivateFieldGet(this, _modalList).length) {
|
|
110
|
+
return {};
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return _classPrivateFieldGet(this, _modalList)[_classPrivateFieldGet(this, _modalList).length - 1];
|
|
114
|
+
}
|
|
115
|
+
|
|
72
116
|
const ModalManager = new ModalManagerInstance();
|
|
73
117
|
var _default = ModalManager;
|
|
74
118
|
exports.default = _default;
|
|
@@ -46,6 +46,7 @@ const Modal = ({
|
|
|
46
46
|
const modalRegistered = (0, _react.useRef)(false);
|
|
47
47
|
const originalOverflow = (0, _react.useRef)(undefined);
|
|
48
48
|
const [isAnimationComplete, setAnimationComplete] = (0, _react.useState)(false);
|
|
49
|
+
const [triggerRefocusFlag, setTriggerRefocusFlag] = (0, _react.useState)(false);
|
|
49
50
|
const setOverflow = (0, _react.useCallback)(() => {
|
|
50
51
|
if (typeof originalOverflow.current === "undefined" && !enableBackgroundUI) {
|
|
51
52
|
originalOverflow.current = document.documentElement.style.overflow;
|
|
@@ -110,7 +111,7 @@ const Modal = ({
|
|
|
110
111
|
const registerModal = (0, _react.useCallback)(() => {
|
|
111
112
|
/* istanbul ignore else */
|
|
112
113
|
if (!modalRegistered.current) {
|
|
113
|
-
_modalManager.default.addModal(ref.current);
|
|
114
|
+
_modalManager.default.addModal(ref.current, setTriggerRefocusFlag);
|
|
114
115
|
|
|
115
116
|
modalRegistered.current = true;
|
|
116
117
|
}
|
|
@@ -164,7 +165,8 @@ const Modal = ({
|
|
|
164
165
|
timeout: timeout
|
|
165
166
|
}, /*#__PURE__*/_react.default.createElement(ModalContext.Provider, {
|
|
166
167
|
value: {
|
|
167
|
-
isAnimationComplete
|
|
168
|
+
isAnimationComplete,
|
|
169
|
+
triggerRefocusFlag
|
|
168
170
|
}
|
|
169
171
|
}, content)))));
|
|
170
172
|
};
|