@pega/cosmos-react-core 4.0.0-dev.4.0 → 4.0.0-dev.5.1
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/lib/components/AppShell/AppShell.styles.js +1 -1
- package/lib/components/AppShell/AppShell.styles.js.map +1 -1
- package/lib/components/AppShell/NavigationListItemWrapper.d.ts.map +1 -1
- package/lib/components/AppShell/NavigationListItemWrapper.js +4 -2
- package/lib/components/AppShell/NavigationListItemWrapper.js.map +1 -1
- package/lib/components/Badges/Count.js +1 -1
- package/lib/components/Badges/Count.js.map +1 -1
- package/lib/components/Badges/Selection.js +1 -1
- package/lib/components/Badges/Selection.js.map +1 -1
- package/lib/components/Badges/Tag.js +1 -1
- package/lib/components/Badges/Tag.js.map +1 -1
- package/lib/components/Banner/Banner.d.ts +21 -22
- package/lib/components/Banner/Banner.d.ts.map +1 -1
- package/lib/components/Banner/Banner.js +130 -95
- package/lib/components/Banner/Banner.js.map +1 -1
- package/lib/components/List/List.d.ts.map +1 -1
- package/lib/components/List/List.js +11 -1
- package/lib/components/List/List.js.map +1 -1
- package/lib/components/Location/LocationInput.js +1 -1
- package/lib/components/Location/LocationInput.js.map +1 -1
- package/lib/components/MenuButton/MenuButton.d.ts.map +1 -1
- package/lib/components/MenuButton/MenuButton.js +18 -4
- package/lib/components/MenuButton/MenuButton.js.map +1 -1
- package/lib/components/RadioCheck/RadioCheck.js +1 -1
- package/lib/components/RadioCheck/RadioCheck.js.map +1 -1
- package/lib/components/Tabs/Tab.js +1 -1
- package/lib/components/Tabs/Tab.js.map +1 -1
- package/lib/hooks/useI18n.d.ts +8 -0
- package/lib/hooks/useI18n.d.ts.map +1 -1
- package/lib/i18n/default.d.ts +8 -0
- package/lib/i18n/default.d.ts.map +1 -1
- package/lib/i18n/default.js +9 -1
- package/lib/i18n/default.js.map +1 -1
- package/lib/i18n/i18n.d.ts +8 -0
- package/lib/i18n/i18n.d.ts.map +1 -1
- package/lib/theme/theme.d.ts +26 -26
- package/lib/utils/bindAll.d.ts +4 -0
- package/lib/utils/bindAll.d.ts.map +1 -0
- package/lib/utils/bindAll.js +9 -0
- package/lib/utils/bindAll.js.map +1 -0
- package/lib/utils/cap.d.ts +4 -0
- package/lib/utils/cap.d.ts.map +1 -0
- package/lib/utils/cap.js +6 -0
- package/lib/utils/cap.js.map +1 -0
- package/lib/utils/createStringMatcher.d.ts +10 -0
- package/lib/utils/createStringMatcher.d.ts.map +1 -0
- package/lib/utils/createStringMatcher.js +21 -0
- package/lib/utils/createStringMatcher.js.map +1 -0
- package/lib/utils/createUID.d.ts +4 -0
- package/lib/utils/createUID.d.ts.map +1 -0
- package/lib/utils/createUID.js +6 -0
- package/lib/utils/createUID.js.map +1 -0
- package/lib/utils/debounce.d.ts +4 -0
- package/lib/utils/debounce.d.ts.map +1 -0
- package/lib/utils/debounce.js +14 -0
- package/lib/utils/debounce.js.map +1 -0
- package/lib/utils/deepGet.d.ts +3 -0
- package/lib/utils/deepGet.d.ts.map +1 -0
- package/lib/utils/deepGet.js +15 -0
- package/lib/utils/deepGet.js.map +1 -0
- package/lib/utils/deepObjectComparison.d.ts +4 -0
- package/lib/utils/deepObjectComparison.d.ts.map +1 -0
- package/lib/utils/deepObjectComparison.js +35 -0
- package/lib/utils/deepObjectComparison.js.map +1 -0
- package/lib/utils/defineSmartGetter.d.ts +3 -0
- package/lib/utils/defineSmartGetter.d.ts.map +1 -0
- package/lib/utils/defineSmartGetter.js +14 -0
- package/lib/utils/defineSmartGetter.js.map +1 -0
- package/lib/utils/documentIsAvailable.d.ts +3 -0
- package/lib/utils/documentIsAvailable.d.ts.map +1 -0
- package/lib/utils/documentIsAvailable.js +3 -0
- package/lib/utils/documentIsAvailable.js.map +1 -0
- package/lib/utils/escapeRegExp.d.ts +8 -0
- package/lib/utils/escapeRegExp.d.ts.map +1 -0
- package/lib/utils/escapeRegExp.js +8 -0
- package/lib/utils/escapeRegExp.js.map +1 -0
- package/lib/utils/focusHeadingOrContainer.d.ts +8 -0
- package/lib/utils/focusHeadingOrContainer.d.ts.map +1 -0
- package/lib/utils/focusHeadingOrContainer.js +29 -0
- package/lib/utils/focusHeadingOrContainer.js.map +1 -0
- package/lib/utils/formatListToLocaleString.d.ts +15 -0
- package/lib/utils/formatListToLocaleString.d.ts.map +1 -0
- package/lib/utils/formatListToLocaleString.js +17 -0
- package/lib/utils/formatListToLocaleString.js.map +1 -0
- package/lib/utils/getActiveElement.d.ts +8 -0
- package/lib/utils/getActiveElement.d.ts.map +1 -0
- package/lib/utils/getActiveElement.js +18 -0
- package/lib/utils/getActiveElement.js.map +1 -0
- package/lib/utils/getFocusables.d.ts +9 -0
- package/lib/utils/getFocusables.d.ts.map +1 -0
- package/lib/utils/getFocusables.js +15 -0
- package/lib/utils/getFocusables.js.map +1 -0
- package/lib/utils/getScrollbarWidth.d.ts +4 -0
- package/lib/utils/getScrollbarWidth.d.ts.map +1 -0
- package/lib/utils/getScrollbarWidth.js +17 -0
- package/lib/utils/getScrollbarWidth.js.map +1 -0
- package/lib/utils/hasProp.d.ts +4 -0
- package/lib/utils/hasProp.d.ts.map +1 -0
- package/lib/utils/hasProp.js +6 -0
- package/lib/utils/hasProp.js.map +1 -0
- package/lib/utils/index.d.ts +27 -1
- package/lib/utils/index.d.ts.map +1 -1
- package/lib/utils/index.js +27 -1
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/loadScript.d.ts +3 -0
- package/lib/utils/loadScript.d.ts.map +1 -0
- package/lib/utils/loadScript.js +9 -0
- package/lib/utils/loadScript.js.map +1 -0
- package/lib/utils/navigatorIsAvailable.d.ts +3 -0
- package/lib/utils/navigatorIsAvailable.d.ts.map +1 -0
- package/lib/utils/navigatorIsAvailable.js +3 -0
- package/lib/utils/navigatorIsAvailable.js.map +1 -0
- package/lib/utils/normalizeElements.d.ts +9 -0
- package/lib/utils/normalizeElements.d.ts.map +1 -0
- package/lib/utils/normalizeElements.js +14 -0
- package/lib/utils/normalizeElements.js.map +1 -0
- package/lib/utils/range.d.ts +4 -0
- package/lib/utils/range.d.ts.map +1 -0
- package/lib/utils/range.js +8 -0
- package/lib/utils/range.js.map +1 -0
- package/lib/utils/reflow.d.ts +4 -0
- package/lib/utils/reflow.d.ts.map +1 -0
- package/lib/utils/reflow.js +7 -0
- package/lib/utils/reflow.js.map +1 -0
- package/lib/utils/replaceMatchWithElement.d.ts +4 -0
- package/lib/utils/replaceMatchWithElement.d.ts.map +1 -0
- package/lib/utils/replaceMatchWithElement.js +32 -0
- package/lib/utils/replaceMatchWithElement.js.map +1 -0
- package/lib/utils/sameOrigin.d.ts +7 -0
- package/lib/utils/sameOrigin.d.ts.map +1 -0
- package/lib/utils/sameOrigin.js +25 -0
- package/lib/utils/sameOrigin.js.map +1 -0
- package/lib/utils/testElForOverflow.d.ts +4 -0
- package/lib/utils/testElForOverflow.d.ts.map +1 -0
- package/lib/utils/testElForOverflow.js +6 -0
- package/lib/utils/testElForOverflow.js.map +1 -0
- package/lib/utils/triple.d.ts +12 -0
- package/lib/utils/triple.d.ts.map +1 -0
- package/lib/utils/triple.js +13 -0
- package/lib/utils/triple.js.map +1 -0
- package/lib/utils/tryCatch.d.ts +5 -0
- package/lib/utils/tryCatch.d.ts.map +1 -0
- package/lib/utils/tryCatch.js +16 -0
- package/lib/utils/tryCatch.js.map +1 -0
- package/lib/utils/windowIsAvailable.d.ts +3 -0
- package/lib/utils/windowIsAvailable.d.ts.map +1 -0
- package/lib/utils/windowIsAvailable.js +3 -0
- package/lib/utils/windowIsAvailable.js.map +1 -0
- package/package.json +1 -1
- package/lib/utils/utils.d.ts +0 -99
- package/lib/utils/utils.d.ts.map +0 -1
- package/lib/utils/utils.js +0 -314
- package/lib/utils/utils.js.map +0 -1
package/lib/utils/utils.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.tsx"],"names":[],"mappings":"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"}
|
package/lib/utils/utils.js
DELETED
|
@@ -1,314 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { Fragment } from 'react';
|
|
3
|
-
export const windowIsAvailable = typeof window !== 'undefined';
|
|
4
|
-
export const navigatorIsAvailable = typeof navigator !== 'undefined';
|
|
5
|
-
export const documentIsAvailable = typeof document !== 'undefined';
|
|
6
|
-
/** @returns Debounced function that can be called only once in given timeout */
|
|
7
|
-
export function debounce(func, waitTime) {
|
|
8
|
-
let timeout;
|
|
9
|
-
return (...args) => {
|
|
10
|
-
const waitFunc = () => {
|
|
11
|
-
timeout = null;
|
|
12
|
-
func.apply(this, args);
|
|
13
|
-
};
|
|
14
|
-
clearTimeout(timeout);
|
|
15
|
-
timeout = setTimeout(waitFunc, waitTime);
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
/** Check for an existence of prop */
|
|
19
|
-
export function hasProp(obj, prop) {
|
|
20
|
-
return Object.prototype.hasOwnProperty.call(obj, prop);
|
|
21
|
-
}
|
|
22
|
-
// Add some context...
|
|
23
|
-
export function bindAll(obj, names) {
|
|
24
|
-
names.forEach(fn => {
|
|
25
|
-
obj[fn] = obj[fn].bind(obj);
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
// Capitalize
|
|
29
|
-
export function cap(s) {
|
|
30
|
-
return s.charAt(0).toUpperCase() + s.slice(1);
|
|
31
|
-
}
|
|
32
|
-
/** Generate unique id for elements */
|
|
33
|
-
export function createUID() {
|
|
34
|
-
return `_${Math.random().toString(36).substr(2, 9)}`;
|
|
35
|
-
}
|
|
36
|
-
/** Returns array with numbers from given range */
|
|
37
|
-
export function range(start, end) {
|
|
38
|
-
return Array(end - start + 1)
|
|
39
|
-
.fill(0)
|
|
40
|
-
.map((_, idx) => start + idx);
|
|
41
|
-
}
|
|
42
|
-
/** Return an array of strings and regex replaced components */
|
|
43
|
-
export function replaceMatchWithElement(str, re, render) {
|
|
44
|
-
const arr = [];
|
|
45
|
-
// Only loop for stateful regexes.
|
|
46
|
-
if (re.global || re.sticky) {
|
|
47
|
-
let currIdx = 0;
|
|
48
|
-
let match;
|
|
49
|
-
// eslint-disable-next-line no-cond-assign
|
|
50
|
-
while ((match = re.exec(str))) {
|
|
51
|
-
arr.push(str.slice(currIdx, match.index), render(match[0]));
|
|
52
|
-
currIdx = match.index + match[0].length;
|
|
53
|
-
}
|
|
54
|
-
arr.push(str.slice(currIdx));
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
const match = re.exec(str);
|
|
58
|
-
if (!match)
|
|
59
|
-
arr.push(str);
|
|
60
|
-
else {
|
|
61
|
-
arr.push(str.slice(0, match.index), render(match[0]), str.slice(match.index + match[0].length));
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
return arr.flatMap((item, idx) => {
|
|
65
|
-
if (!item)
|
|
66
|
-
return [];
|
|
67
|
-
return _jsx(Fragment, { children: item }, idx);
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
/** Get scrollbar width */
|
|
71
|
-
export function getScrollbarWidth() {
|
|
72
|
-
const scrollDiv = document.createElement('div');
|
|
73
|
-
const divSize = '50px';
|
|
74
|
-
let size = 0;
|
|
75
|
-
scrollDiv.style.position = 'absolute';
|
|
76
|
-
scrollDiv.style.top = `-${divSize}`;
|
|
77
|
-
scrollDiv.style.width = divSize;
|
|
78
|
-
scrollDiv.style.height = divSize;
|
|
79
|
-
scrollDiv.style.overflow = 'scroll';
|
|
80
|
-
document.body.appendChild(scrollDiv);
|
|
81
|
-
size = scrollDiv.offsetWidth - scrollDiv.clientWidth;
|
|
82
|
-
document.body.removeChild(scrollDiv);
|
|
83
|
-
return size;
|
|
84
|
-
}
|
|
85
|
-
/** Test element for overflow */
|
|
86
|
-
export function testElForOverflow(el) {
|
|
87
|
-
return [el.scrollWidth > el.clientWidth, el.scrollHeight > el.clientHeight];
|
|
88
|
-
}
|
|
89
|
-
/** Used mostly to trigger css transition after DOM append */
|
|
90
|
-
export function reflow(node) {
|
|
91
|
-
node = node ?? document.body;
|
|
92
|
-
return node.offsetWidth;
|
|
93
|
-
}
|
|
94
|
-
export function loadScript(src, onLoad, onError) {
|
|
95
|
-
const scriptElem = document.createElement('script');
|
|
96
|
-
scriptElem.src = src;
|
|
97
|
-
scriptElem.addEventListener('load', onLoad);
|
|
98
|
-
scriptElem.addEventListener('error', onError);
|
|
99
|
-
document.head.appendChild(scriptElem);
|
|
100
|
-
}
|
|
101
|
-
export function deepGet(obj, keys) {
|
|
102
|
-
let rtn = obj;
|
|
103
|
-
const found = keys.every(key => {
|
|
104
|
-
if (typeof rtn === 'object' && rtn) {
|
|
105
|
-
rtn = rtn[key];
|
|
106
|
-
return true;
|
|
107
|
-
}
|
|
108
|
-
return false;
|
|
109
|
-
});
|
|
110
|
-
if (found)
|
|
111
|
-
return rtn;
|
|
112
|
-
return undefined;
|
|
113
|
-
}
|
|
114
|
-
/** Compares two objects by comparing each key value regardless of order. */
|
|
115
|
-
export function deepObjectComparison(valueA, valueB) {
|
|
116
|
-
// If the values are strictly equal, return true
|
|
117
|
-
if (valueA === valueB)
|
|
118
|
-
return true;
|
|
119
|
-
// If the values are not objects and are not equal, return false
|
|
120
|
-
if (typeof valueA !== 'object' ||
|
|
121
|
-
typeof valueB !== 'object' ||
|
|
122
|
-
valueA === null ||
|
|
123
|
-
valueB === null)
|
|
124
|
-
return false;
|
|
125
|
-
const keysA = Object.keys(valueA);
|
|
126
|
-
const keysB = Object.keys(valueB);
|
|
127
|
-
// If the objects have different numbers of keys, return false
|
|
128
|
-
if (keysA.length !== keysB.length)
|
|
129
|
-
return false;
|
|
130
|
-
for (let i = 0; i < keysA.length; i += 1) {
|
|
131
|
-
const key = keysA[i];
|
|
132
|
-
// If there is not a 1:1 mapping of keys between the objects, return false
|
|
133
|
-
if (!keysB.includes(key))
|
|
134
|
-
return false;
|
|
135
|
-
if (typeof valueA[key] === 'function' || typeof valueB[key] === 'function') {
|
|
136
|
-
// If the value of a given key is a function, and the functions are not equivalent between the objects, return false
|
|
137
|
-
if (valueA[key].toString() !== valueB[key].toString())
|
|
138
|
-
return false;
|
|
139
|
-
// If all checks have passed thus far, compare the next set of nested values
|
|
140
|
-
}
|
|
141
|
-
else if (!deepObjectComparison(valueA[key], valueB[key]))
|
|
142
|
-
return false;
|
|
143
|
-
}
|
|
144
|
-
// If all checks have passed, the objects are deeply equal
|
|
145
|
-
return true;
|
|
146
|
-
}
|
|
147
|
-
export function defineSmartGetter(obj, key, valueFn) {
|
|
148
|
-
Object.defineProperty(obj, key, {
|
|
149
|
-
get: () => {
|
|
150
|
-
delete obj[key];
|
|
151
|
-
obj[key] = valueFn();
|
|
152
|
-
return obj[key];
|
|
153
|
-
},
|
|
154
|
-
enumerable: true,
|
|
155
|
-
configurable: true
|
|
156
|
-
});
|
|
157
|
-
return obj;
|
|
158
|
-
}
|
|
159
|
-
export function tryCatch(tryFn, catchFn, finallyFn) {
|
|
160
|
-
try {
|
|
161
|
-
return tryFn();
|
|
162
|
-
}
|
|
163
|
-
catch (err) {
|
|
164
|
-
if (catchFn)
|
|
165
|
-
return catchFn(err);
|
|
166
|
-
}
|
|
167
|
-
finally {
|
|
168
|
-
// eslint-disable-next-line no-unsafe-finally
|
|
169
|
-
if (finallyFn)
|
|
170
|
-
return finallyFn();
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Returns normalized list of elements, ie. it de-reference the element from the RefObject if needed.
|
|
175
|
-
* @param els a list of elements or refs to normalize.
|
|
176
|
-
* @returns a new list of the same length with the de-referenced elements.
|
|
177
|
-
*/
|
|
178
|
-
export const normalizeElements = (els) => {
|
|
179
|
-
return els.map((el) => {
|
|
180
|
-
if (!el)
|
|
181
|
-
return null;
|
|
182
|
-
return el instanceof EventTarget ? el : el.current;
|
|
183
|
-
});
|
|
184
|
-
};
|
|
185
|
-
/**
|
|
186
|
-
* Returns all valid focusable elements within a given ref.
|
|
187
|
-
* @param focusablesRef The ref containing the element to search for focusable elements within.
|
|
188
|
-
* @returns a list of valid focusable elements within the given ref.
|
|
189
|
-
*/
|
|
190
|
-
export const getFocusables = (focusablesRef) => {
|
|
191
|
-
if (!focusablesRef.current)
|
|
192
|
-
return [];
|
|
193
|
-
const selector = 'a, button, input, textarea, select, details, [tabindex]:not([tabindex="-1"])';
|
|
194
|
-
return [...focusablesRef.current.querySelectorAll(selector)].filter(el => el instanceof HTMLElement &&
|
|
195
|
-
!el.hasAttribute('disabled') &&
|
|
196
|
-
el.getAttribute('tabindex') !== '-1');
|
|
197
|
-
};
|
|
198
|
-
/**
|
|
199
|
-
* Generator that returns triple of subsequent values in the given array.
|
|
200
|
-
* @param array source array
|
|
201
|
-
* @returns triple of previous, current and next value on every call
|
|
202
|
-
*/
|
|
203
|
-
export function* triple(array) {
|
|
204
|
-
for (let i = 0; i < array.length; i += 1) {
|
|
205
|
-
yield { prev: array[i - 1], current: array[i], next: array[i + 1] };
|
|
206
|
-
}
|
|
207
|
-
return undefined;
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Escape special characters in order to pass a string to the RegExp constructor.
|
|
211
|
-
* @param s a string.
|
|
212
|
-
* @returns a string with special characters escaped.
|
|
213
|
-
*/
|
|
214
|
-
export const escapeRegExp = (s) => String(s).replace(/[\\^$*+?.()|[\]{}]/g, '\\$&');
|
|
215
|
-
/**
|
|
216
|
-
* Generate a RegExp with a string parameter.
|
|
217
|
-
* @param s The string to match.
|
|
218
|
-
* @param type How to match.
|
|
219
|
-
* @param flags Standard RegExp flags.
|
|
220
|
-
* @returns A RegExp with the match pattern.
|
|
221
|
-
*/
|
|
222
|
-
export const createStringMatcher = (s, type = 'contains', flags = 'i') => {
|
|
223
|
-
const escaped = escapeRegExp(s);
|
|
224
|
-
let pattern = escaped;
|
|
225
|
-
if (type === 'start') {
|
|
226
|
-
pattern = `^${escaped}`;
|
|
227
|
-
}
|
|
228
|
-
else if (type === 'boundary') {
|
|
229
|
-
pattern = `(?:^|\\s)${escaped}`;
|
|
230
|
-
}
|
|
231
|
-
return new RegExp(pattern, flags);
|
|
232
|
-
};
|
|
233
|
-
/**
|
|
234
|
-
* Function generates string representation of the given list accordingly to localization rules of given locale.
|
|
235
|
-
* @param list list of strings to format
|
|
236
|
-
* @param t translation function used internally
|
|
237
|
-
* @param locale locale tag to get the localization rules for
|
|
238
|
-
* @param options formatting options
|
|
239
|
-
* @returns
|
|
240
|
-
*/
|
|
241
|
-
export const formatListToLocaleString = (list, t, locale, { count = list.length, separator } = {}) => {
|
|
242
|
-
const remainder = list.length ? count - list.length : 0;
|
|
243
|
-
const toFormat = remainder > 0 ? [...list, t('more_count', [remainder], { count: remainder })] : list;
|
|
244
|
-
if (separator || !('ListFormat' in Intl))
|
|
245
|
-
return toFormat.join(separator ?? ', ');
|
|
246
|
-
return new Intl.ListFormat(locale, { style: 'long' }).format(toFormat);
|
|
247
|
-
};
|
|
248
|
-
/**
|
|
249
|
-
* Checks if two URLs have the same origin.
|
|
250
|
-
* @see {@link https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy#definition_of_an_origin Definition of an origin}
|
|
251
|
-
*/
|
|
252
|
-
export const sameOrigin = ({ protocol: protocolA, hostname: hostnameA, port: portA }, { protocol: protocolB, hostname: hostnameB, port: portB }) => {
|
|
253
|
-
if (protocolA !== protocolB)
|
|
254
|
-
return false;
|
|
255
|
-
if (hostnameA !== hostnameB)
|
|
256
|
-
return false;
|
|
257
|
-
if (!portA) {
|
|
258
|
-
if (protocolA === 'http:')
|
|
259
|
-
portA = '80';
|
|
260
|
-
else if (protocolA === 'https:')
|
|
261
|
-
portA = '443';
|
|
262
|
-
}
|
|
263
|
-
if (!portB) {
|
|
264
|
-
if (protocolB === 'http:')
|
|
265
|
-
portB = '80';
|
|
266
|
-
else if (protocolB === 'https:')
|
|
267
|
-
portB = '443';
|
|
268
|
-
}
|
|
269
|
-
return portA === portB;
|
|
270
|
-
};
|
|
271
|
-
/**
|
|
272
|
-
* Gets element that currently has focus with support for open shadow roots.
|
|
273
|
-
* @param root Optional container to search for the active element. Defaults to `document`.
|
|
274
|
-
* @returns The Element within the DOM that currently has focus.
|
|
275
|
-
*/
|
|
276
|
-
export const getActiveElement = (root = document) => {
|
|
277
|
-
let activeEl = root.activeElement;
|
|
278
|
-
if (!activeEl)
|
|
279
|
-
return null;
|
|
280
|
-
if (activeEl.tagName.toLowerCase() === 'iframe' &&
|
|
281
|
-
activeEl.contentDocument)
|
|
282
|
-
activeEl = getActiveElement(activeEl.contentDocument) ?? activeEl;
|
|
283
|
-
if (activeEl.shadowRoot)
|
|
284
|
-
activeEl = getActiveElement(activeEl.shadowRoot) ?? activeEl;
|
|
285
|
-
return activeEl;
|
|
286
|
-
};
|
|
287
|
-
/**
|
|
288
|
-
* Focuses the highest level heading element in a container, or the container itself if there are no headings.
|
|
289
|
-
* @param container Node to query for a heading.
|
|
290
|
-
* @param label Fallback label to apply to the container if focused.
|
|
291
|
-
*/
|
|
292
|
-
export const focusHeadingOrContainer = (container, label) => {
|
|
293
|
-
const heading = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].reduce((el, tag) => el ?? container.querySelector(tag), null);
|
|
294
|
-
const target = heading ?? container;
|
|
295
|
-
if (!(target instanceof HTMLElement || target instanceof SVGElement))
|
|
296
|
-
return;
|
|
297
|
-
if (target === container && !target.hasAttribute('aria-label')) {
|
|
298
|
-
target.setAttribute('aria-label', label);
|
|
299
|
-
target.addEventListener('focusout', () => {
|
|
300
|
-
target.removeAttribute('aria-label');
|
|
301
|
-
}, { once: true });
|
|
302
|
-
}
|
|
303
|
-
if (target.hasAttribute('tabindex')) {
|
|
304
|
-
target.focus();
|
|
305
|
-
}
|
|
306
|
-
else {
|
|
307
|
-
target.setAttribute('tabindex', '-1');
|
|
308
|
-
target.focus();
|
|
309
|
-
target.addEventListener('focusout', () => {
|
|
310
|
-
target.removeAttribute('tabindex');
|
|
311
|
-
}, { once: true });
|
|
312
|
-
}
|
|
313
|
-
};
|
|
314
|
-
//# sourceMappingURL=utils.js.map
|
package/lib/utils/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Fragment, RefObject } from 'react';\n\nimport { TranslationFunction, TranslationPack } from '../i18n';\n\nexport const windowIsAvailable = typeof window !== 'undefined';\nexport const navigatorIsAvailable = typeof navigator !== 'undefined';\nexport const documentIsAvailable = typeof document !== 'undefined';\n\n/** @returns Debounced function that can be called only once in given timeout */\nexport function debounce<F extends (...args: any[]) => any>(\n this: any,\n func: F,\n waitTime: number\n): (...args: Parameters<F>) => void {\n let timeout: any;\n return (...args) => {\n const waitFunc = () => {\n timeout = null;\n func.apply(this, args);\n };\n clearTimeout(timeout);\n timeout = setTimeout(waitFunc, waitTime);\n };\n}\n\n/** Check for an existence of prop */\nexport function hasProp<T extends object, P extends PropertyKey>(\n obj: T,\n prop: P\n): obj is T & { [key in P]: unknown } {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n// Add some context...\nexport function bindAll<T extends object, K extends keyof T>(obj: T, names: K[]): void {\n names.forEach(fn => {\n obj[fn] = (obj[fn] as unknown as Function).bind(obj);\n });\n}\n\n// Capitalize\nexport function cap(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\n/** Generate unique id for elements */\nexport function createUID(): string {\n return `_${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/** Returns array with numbers from given range */\nexport function range(start: number, end: number): number[] {\n return Array(end - start + 1)\n .fill(0)\n .map((_: any, idx: number) => start + idx);\n}\n\n/** Return an array of strings and regex replaced components */\nexport function replaceMatchWithElement(\n str: string,\n re: RegExp,\n render: (match: string) => JSX.Element\n) {\n const arr: (string | JSX.Element)[] = [];\n\n // Only loop for stateful regexes.\n if (re.global || re.sticky) {\n let currIdx = 0;\n let match: RegExpExecArray | null;\n\n // eslint-disable-next-line no-cond-assign\n while ((match = re.exec(str))) {\n arr.push(str.slice(currIdx, match.index), render(match[0]));\n\n currIdx = match.index + match[0].length;\n }\n\n arr.push(str.slice(currIdx));\n } else {\n const match = re.exec(str);\n if (!match) arr.push(str);\n else {\n arr.push(\n str.slice(0, match.index),\n render(match[0]),\n str.slice(match.index + match[0].length)\n );\n }\n }\n\n return arr.flatMap((item, idx) => {\n if (!item) return [];\n\n return <Fragment key={idx}>{item}</Fragment>;\n });\n}\n\n/** Get scrollbar width */\nexport function getScrollbarWidth(): number {\n const scrollDiv = document.createElement('div');\n const divSize = '50px';\n let size = 0;\n\n scrollDiv.style.position = 'absolute';\n scrollDiv.style.top = `-${divSize}`;\n scrollDiv.style.width = divSize;\n scrollDiv.style.height = divSize;\n scrollDiv.style.overflow = 'scroll';\n\n document.body.appendChild(scrollDiv);\n size = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n\n return size;\n}\n\n/** Test element for overflow */\nexport function testElForOverflow(el: Element) {\n return [el.scrollWidth > el.clientWidth, el.scrollHeight > el.clientHeight];\n}\n\n/** Used mostly to trigger css transition after DOM append */\nexport function reflow(node?: HTMLElement | null): number {\n node = node ?? document.body;\n return node.offsetWidth;\n}\n\nexport function loadScript(\n src: string,\n onLoad: (this: HTMLScriptElement, ev: Event) => any,\n onError: (this: HTMLScriptElement, ev: ErrorEvent) => any\n) {\n const scriptElem = document.createElement('script');\n scriptElem.src = src;\n\n scriptElem.addEventListener('load', onLoad);\n scriptElem.addEventListener('error', onError);\n document.head.appendChild(scriptElem);\n}\n\nexport function deepGet(obj: object, keys: PropertyKey[]): any {\n let rtn: any = obj;\n\n const found = keys.every(key => {\n if (typeof rtn === 'object' && rtn) {\n rtn = rtn[key];\n return true;\n }\n return false;\n });\n\n if (found) return rtn;\n\n return undefined;\n}\n\n/** Compares two objects by comparing each key value regardless of order. */\nexport function deepObjectComparison(valueA: any, valueB: any): boolean {\n // If the values are strictly equal, return true\n if (valueA === valueB) return true;\n\n // If the values are not objects and are not equal, return false\n if (\n typeof valueA !== 'object' ||\n typeof valueB !== 'object' ||\n valueA === null ||\n valueB === null\n )\n return false;\n\n const keysA = Object.keys(valueA);\n const keysB = Object.keys(valueB);\n\n // If the objects have different numbers of keys, return false\n if (keysA.length !== keysB.length) return false;\n\n for (let i = 0; i < keysA.length; i += 1) {\n const key = keysA[i];\n // If there is not a 1:1 mapping of keys between the objects, return false\n if (!keysB.includes(key)) return false;\n\n if (typeof valueA[key] === 'function' || typeof valueB[key] === 'function') {\n // If the value of a given key is a function, and the functions are not equivalent between the objects, return false\n if (valueA[key].toString() !== valueB[key].toString()) return false;\n // If all checks have passed thus far, compare the next set of nested values\n } else if (!deepObjectComparison(valueA[key], valueB[key])) return false;\n }\n\n // If all checks have passed, the objects are deeply equal\n return true;\n}\n\nexport function defineSmartGetter(\n obj: Record<string, any>,\n key: string,\n valueFn: (...args: any[]) => any\n) {\n Object.defineProperty(obj, key, {\n get: () => {\n delete obj[key];\n obj[key] = valueFn();\n return obj[key];\n },\n enumerable: true,\n configurable: true\n });\n\n return obj;\n}\n\nexport function tryCatch<T>(tryFn: () => T): T | undefined;\nexport function tryCatch<T, C>(tryFn: () => T, catchFn: (err: unknown) => C): T | C;\nexport function tryCatch<T, C, F>(\n tryFn: () => T,\n catchFn: ((err: unknown) => C) | undefined,\n finallyFn: () => F\n): F;\nexport function tryCatch<T, C, F>(\n tryFn: () => T,\n catchFn?: (err: unknown) => C,\n finallyFn?: () => F\n): T | C | F | undefined {\n try {\n return tryFn();\n } catch (err) {\n if (catchFn) return catchFn(err);\n } finally {\n // eslint-disable-next-line no-unsafe-finally\n if (finallyFn) return finallyFn();\n }\n}\n\n/**\n * Returns normalized list of elements, ie. it de-reference the element from the RefObject if needed.\n * @param els a list of elements or refs to normalize.\n * @returns a new list of the same length with the de-referenced elements.\n */\nexport const normalizeElements = <T extends EventTarget = EventTarget>(\n els: (T | null | RefObject<T | null>)[]\n): (T | null)[] => {\n return els.map((el: T | null | RefObject<T | null>) => {\n if (!el) return null;\n return el instanceof EventTarget ? el : el.current;\n });\n};\n\n/**\n * Returns all valid focusable elements within a given ref.\n * @param focusablesRef The ref containing the element to search for focusable elements within.\n * @returns a list of valid focusable elements within the given ref.\n */\nexport const getFocusables = (focusablesRef: RefObject<HTMLElement>) => {\n if (!focusablesRef.current) return [];\n\n const selector = 'a, button, input, textarea, select, details, [tabindex]:not([tabindex=\"-1\"])';\n\n return ([...focusablesRef.current.querySelectorAll(selector)] as HTMLElement[]).filter(\n el =>\n el instanceof HTMLElement &&\n !el.hasAttribute('disabled') &&\n el.getAttribute('tabindex') !== '-1'\n );\n};\n\n/**\n * Generator that returns triple of subsequent values in the given array.\n * @param array source array\n * @returns triple of previous, current and next value on every call\n */\nexport function* triple<T>(\n array: T[]\n): Generator<{ prev?: T; current: T; next?: T }, undefined, unknown> {\n for (let i = 0; i < array.length; i += 1) {\n yield { prev: array[i - 1], current: array[i], next: array[i + 1] };\n }\n return undefined;\n}\n\n/**\n * Escape special characters in order to pass a string to the RegExp constructor.\n * @param s a string.\n * @returns a string with special characters escaped.\n */\nexport const escapeRegExp = (s: string): string => String(s).replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n/**\n * Generate a RegExp with a string parameter.\n * @param s The string to match.\n * @param type How to match.\n * @param flags Standard RegExp flags.\n * @returns A RegExp with the match pattern.\n */\nexport const createStringMatcher = (\n s: string,\n type: 'contains' | 'start' | 'boundary' = 'contains',\n flags: string = 'i'\n): RegExp => {\n const escaped = escapeRegExp(s);\n let pattern: string = escaped;\n\n if (type === 'start') {\n pattern = `^${escaped}`;\n } else if (type === 'boundary') {\n pattern = `(?:^|\\\\s)${escaped}`;\n }\n\n return new RegExp(pattern, flags);\n};\n\n/**\n * Function generates string representation of the given list accordingly to localization rules of given locale.\n * @param list list of strings to format\n * @param t translation function used internally\n * @param locale locale tag to get the localization rules for\n * @param options formatting options\n * @returns\n */\nexport const formatListToLocaleString = (\n list: string[],\n t: TranslationFunction<TranslationPack>,\n locale: string,\n {\n count = list.length,\n separator\n }: {\n count?: number;\n separator?: string;\n } = {}\n) => {\n const remainder = list.length ? count - list.length : 0;\n\n const toFormat =\n remainder > 0 ? [...list, t('more_count', [remainder], { count: remainder })] : list;\n\n if (separator || !('ListFormat' in Intl)) return toFormat.join(separator ?? ', ');\n\n return new Intl.ListFormat(locale, { style: 'long' }).format(toFormat);\n};\n\n/**\n * Checks if two URLs have the same origin.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy#definition_of_an_origin Definition of an origin}\n */\nexport const sameOrigin = (\n {\n protocol: protocolA,\n hostname: hostnameA,\n port: portA\n }: Pick<URL, 'protocol' | 'hostname' | 'port'>,\n {\n protocol: protocolB,\n hostname: hostnameB,\n port: portB\n }: Pick<URL, 'protocol' | 'hostname' | 'port'>\n): boolean => {\n if (protocolA !== protocolB) return false;\n if (hostnameA !== hostnameB) return false;\n\n if (!portA) {\n if (protocolA === 'http:') portA = '80';\n else if (protocolA === 'https:') portA = '443';\n }\n\n if (!portB) {\n if (protocolB === 'http:') portB = '80';\n else if (protocolB === 'https:') portB = '443';\n }\n\n return portA === portB;\n};\n\n/**\n * Gets element that currently has focus with support for open shadow roots.\n * @param root Optional container to search for the active element. Defaults to `document`.\n * @returns The Element within the DOM that currently has focus.\n */\nexport const getActiveElement = (root: DocumentOrShadowRoot = document): Element | null => {\n let activeEl = root.activeElement;\n\n if (!activeEl) return null;\n\n if (\n activeEl.tagName.toLowerCase() === 'iframe' &&\n (activeEl as HTMLIFrameElement).contentDocument\n )\n activeEl = getActiveElement((activeEl as HTMLIFrameElement).contentDocument!) ?? activeEl;\n\n if (activeEl.shadowRoot) activeEl = getActiveElement(activeEl.shadowRoot) ?? activeEl;\n\n return activeEl;\n};\n\n/**\n * Focuses the highest level heading element in a container, or the container itself if there are no headings.\n * @param container Node to query for a heading.\n * @param label Fallback label to apply to the container if focused.\n */\nexport const focusHeadingOrContainer = (container: ParentNode, label: string) => {\n const heading = (['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as const).reduce<HTMLHeadingElement | null>(\n (el, tag) => el ?? container.querySelector(tag),\n null\n );\n\n const target = heading ?? container;\n\n if (!(target instanceof HTMLElement || target instanceof SVGElement)) return;\n\n if (target === container && !target.hasAttribute('aria-label')) {\n target.setAttribute('aria-label', label);\n target.addEventListener(\n 'focusout',\n () => {\n target.removeAttribute('aria-label');\n },\n { once: true }\n );\n }\n\n if (target.hasAttribute('tabindex')) {\n target.focus();\n } else {\n target.setAttribute('tabindex', '-1');\n target.focus();\n target.addEventListener(\n 'focusout',\n () => {\n target.removeAttribute('tabindex');\n },\n { once: true }\n );\n }\n};\n"]}
|