@primer/react 38.32.0-rc.3ce9543fd → 38.32.0-rc.4bb4bba69
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/CHANGELOG.md +4 -0
- package/dist/ActionBar/ActionBar.js +130 -424
- package/dist/FilteredActionList/FilteredActionList.js +66 -155
- package/dist/FilteredActionList/useAnnouncements.js +66 -138
- package/dist/LabelGroup/LabelGroup.js +76 -110
- package/dist/Overlay/Overlay.js +45 -169
- package/dist/TextInput/TextInput.js +7 -7
- package/dist/ToggleSwitch/ToggleSwitch.js +167 -186
- package/dist/TreeView/TreeView.js +309 -814
- package/dist/experimental/UnderlinePanels/UnderlinePanels.js +38 -95
- package/dist/hooks/useControllableState.js +3 -3
- package/dist/internal/components/ValidationAnimationContainer.js +40 -34
- package/package.json +3 -1
|
@@ -12,7 +12,6 @@ import { FilteredActionListBodyLoader } from "./FilteredActionListLoaders.js";
|
|
|
12
12
|
import FilteredActionList_module_css_default from "./FilteredActionList.module.css.js";
|
|
13
13
|
import { useAnnouncements } from "./useAnnouncements.js";
|
|
14
14
|
import { FilteredActionListInput } from "./FilteredActionListInput.js";
|
|
15
|
-
import { c } from "react-compiler-runtime";
|
|
16
15
|
import { clsx } from "clsx";
|
|
17
16
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
18
17
|
import { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
@@ -44,11 +43,11 @@ function FilteredActionList({ loading = false, placeholderText, filterValue: ext
|
|
|
44
43
|
const inputDescriptionTextId = useId$1();
|
|
45
44
|
const [isInputFocused, setIsInputFocused] = useState(false);
|
|
46
45
|
const selectAllChecked = items.length > 0 && items.every((item) => item.selected);
|
|
47
|
-
const selectAllIndeterminate = !selectAllChecked && items.some((
|
|
46
|
+
const selectAllIndeterminate = !selectAllChecked && items.some((item) => item.selected);
|
|
48
47
|
const selectAllLabelText = selectAllChecked ? "Deselect all" : "Select all";
|
|
49
48
|
const getItemListForEachGroup = useCallback((groupId) => {
|
|
50
49
|
const itemsInGroup = [];
|
|
51
|
-
for (const
|
|
50
|
+
for (const item of items) if (item.groupId === groupId) itemsInGroup.push(item);
|
|
52
51
|
return itemsInGroup;
|
|
53
52
|
}, [items]);
|
|
54
53
|
const onInputKeyDown = useCallback((event) => {
|
|
@@ -65,7 +64,7 @@ function FilteredActionList({ loading = false, placeholderText, filterValue: ext
|
|
|
65
64
|
for (let i = 0; i < groupMetadata.length; i++) if (getItemListForEachGroup(groupMetadata[i].groupId).length > 0) break;
|
|
66
65
|
else firstGroupIndex++;
|
|
67
66
|
const firstGroup = groupMetadata[firstGroupIndex].groupId;
|
|
68
|
-
firstItem = items.filter((
|
|
67
|
+
firstItem = items.filter((item) => item.groupId === firstGroup)[0];
|
|
69
68
|
} else firstItem = items[0];
|
|
70
69
|
if (firstItem.onAction) {
|
|
71
70
|
firstItem.onAction(firstItem, event);
|
|
@@ -77,11 +76,11 @@ function FilteredActionList({ loading = false, placeholderText, filterValue: ext
|
|
|
77
76
|
groupMetadata,
|
|
78
77
|
getItemListForEachGroup
|
|
79
78
|
]);
|
|
80
|
-
const onInputKeyPress = useCallback((
|
|
81
|
-
if (
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
const activeDescendantEvent = new KeyboardEvent(
|
|
79
|
+
const onInputKeyPress = useCallback((event) => {
|
|
80
|
+
if (event.key === "Enter" && activeDescendantRef.current) {
|
|
81
|
+
event.preventDefault();
|
|
82
|
+
event.nativeEvent.stopImmediatePropagation();
|
|
83
|
+
const activeDescendantEvent = new KeyboardEvent(event.type, event.nativeEvent);
|
|
85
84
|
activeDescendantRef.current.dispatchEvent(activeDescendantEvent);
|
|
86
85
|
}
|
|
87
86
|
}, [activeDescendantRef]);
|
|
@@ -100,10 +99,10 @@ function FilteredActionList({ loading = false, placeholderText, filterValue: ext
|
|
|
100
99
|
overscan: 10,
|
|
101
100
|
enabled: isVirtualized,
|
|
102
101
|
getItemKey: (index) => {
|
|
103
|
-
var _ref,
|
|
104
|
-
const
|
|
105
|
-
if (!
|
|
106
|
-
return (_ref = (
|
|
102
|
+
var _ref, _item$key, _item$id;
|
|
103
|
+
const item = items[index];
|
|
104
|
+
if (!item) return index.toString();
|
|
105
|
+
return (_ref = (_item$key = item.key) !== null && _item$key !== void 0 ? _item$key : (_item$id = item.id) === null || _item$id === void 0 ? void 0 : _item$id.toString()) !== null && _ref !== void 0 ? _ref : index.toString();
|
|
107
106
|
},
|
|
108
107
|
measureElement: (el) => el.scrollHeight
|
|
109
108
|
});
|
|
@@ -133,9 +132,9 @@ function FilteredActionList({ loading = false, placeholderText, filterValue: ext
|
|
|
133
132
|
onActiveDescendantChanged: (current, previous, directlyActivated) => {
|
|
134
133
|
activeDescendantRef.current = current;
|
|
135
134
|
if (isVirtualized && current) {
|
|
136
|
-
const
|
|
135
|
+
const index = current.getAttribute("data-index");
|
|
137
136
|
const range = virtualizer.range;
|
|
138
|
-
if (
|
|
137
|
+
if (index !== null && range && (Number(index) < range.startIndex || Number(index) >= range.endIndex)) virtualizer.scrollToIndex(Number(index), { align: "auto" });
|
|
139
138
|
}
|
|
140
139
|
if (current && scrollContainerRef.current && (directlyActivated || focusPrependedElements)) scrollIntoView(current, scrollContainerRef.current, {
|
|
141
140
|
...menuScrollMargins,
|
|
@@ -170,8 +169,8 @@ function FilteredActionList({ loading = false, placeholderText, filterValue: ext
|
|
|
170
169
|
if (!inputAndListContainerElement) return;
|
|
171
170
|
const list = listRef.current;
|
|
172
171
|
if (!list) return;
|
|
173
|
-
const handleFocusIn = (
|
|
174
|
-
if (
|
|
172
|
+
const handleFocusIn = (event) => {
|
|
173
|
+
if (event.target === inputRef.current || list.contains(event.target)) setIsInputFocused(inputRef.current && inputRef.current === document.activeElement ? true : false);
|
|
175
174
|
};
|
|
176
175
|
inputAndListContainerElement.addEventListener("focusin", handleFocusIn);
|
|
177
176
|
return () => {
|
|
@@ -193,8 +192,8 @@ function FilteredActionList({ loading = false, placeholderText, filterValue: ext
|
|
|
193
192
|
]);
|
|
194
193
|
useAnnouncements(items, usingRovingTabindex ? listRef : { current: listContainerElement }, inputRef, announcementsEnabled, loading, messageText, _PrivateFocusManagement);
|
|
195
194
|
useScrollFlash(scrollContainerRef);
|
|
196
|
-
const handleSelectAllChange = useCallback((
|
|
197
|
-
if (onSelectAllChange) onSelectAllChange(
|
|
195
|
+
const handleSelectAllChange = useCallback((e) => {
|
|
196
|
+
if (onSelectAllChange) onSelectAllChange(e.target.checked);
|
|
198
197
|
}, [onSelectAllChange]);
|
|
199
198
|
function getBodyContent() {
|
|
200
199
|
if (loading && scrollContainerRef.current && loadingType.appearsInBody) return /*#__PURE__*/ jsx(FilteredActionListBodyLoader, {
|
|
@@ -202,58 +201,58 @@ function FilteredActionList({ loading = false, placeholderText, filterValue: ext
|
|
|
202
201
|
height: scrollContainerRef.current.clientHeight
|
|
203
202
|
});
|
|
204
203
|
if (message) return message;
|
|
205
|
-
let
|
|
204
|
+
let firstGroupIndex = 0;
|
|
206
205
|
const renderListItems = () => {
|
|
207
|
-
if (groupMetadata !== null && groupMetadata !== void 0 && groupMetadata.length) return groupMetadata.map((group,
|
|
206
|
+
if (groupMetadata !== null && groupMetadata !== void 0 && groupMetadata.length) return groupMetadata.map((group, index) => {
|
|
208
207
|
var _group$header, _group$header2;
|
|
209
|
-
if (
|
|
208
|
+
if (index === firstGroupIndex && getItemListForEachGroup(group.groupId).length === 0) firstGroupIndex++;
|
|
210
209
|
return /*#__PURE__*/ jsxs(ActionList.Group, { children: [/*#__PURE__*/ jsx(ActionList.GroupHeading, {
|
|
211
210
|
variant: (_group$header = group.header) !== null && _group$header !== void 0 && _group$header.variant ? group.header.variant : void 0,
|
|
212
211
|
children: (_group$header2 = group.header) !== null && _group$header2 !== void 0 && _group$header2.title ? group.header.title : `Group ${group.groupId}`
|
|
213
|
-
}), getItemListForEachGroup(group.groupId).map(({ key: itemKey, ...
|
|
214
|
-
var _ref2,
|
|
215
|
-
const key = (_ref2 = itemKey !== null && itemKey !== void 0 ? itemKey : (
|
|
212
|
+
}), getItemListForEachGroup(group.groupId).map(({ key: itemKey, ...item }, itemIndex) => {
|
|
213
|
+
var _ref2, _item$id2;
|
|
214
|
+
const key = (_ref2 = itemKey !== null && itemKey !== void 0 ? itemKey : (_item$id2 = item.id) === null || _item$id2 === void 0 ? void 0 : _item$id2.toString()) !== null && _ref2 !== void 0 ? _ref2 : itemIndex.toString();
|
|
216
215
|
return /*#__PURE__*/ jsx(MappedActionListItem, {
|
|
217
|
-
className: clsx(FilteredActionList_module_css_default.ActionListItem, "className" in
|
|
216
|
+
className: clsx(FilteredActionList_module_css_default.ActionListItem, "className" in item ? item.className : void 0),
|
|
218
217
|
"data-input-focused": isInputFocused ? "" : void 0,
|
|
219
|
-
"data-first-child":
|
|
220
|
-
...
|
|
218
|
+
"data-first-child": index === firstGroupIndex && itemIndex === 0 ? "" : void 0,
|
|
219
|
+
...item,
|
|
221
220
|
renderItem: listProps.renderItem
|
|
222
221
|
}, key);
|
|
223
|
-
})] },
|
|
222
|
+
})] }, index);
|
|
224
223
|
});
|
|
225
|
-
if (isVirtualized && virtualizedItemEntries) return virtualizedItemEntries.map(({ virtualItem
|
|
226
|
-
var _ref3,
|
|
227
|
-
const
|
|
224
|
+
if (isVirtualized && virtualizedItemEntries) return virtualizedItemEntries.map(({ virtualItem, item: { key: itemKey, ...item }, index }) => {
|
|
225
|
+
var _ref3, _item$id3;
|
|
226
|
+
const key = (_ref3 = itemKey !== null && itemKey !== void 0 ? itemKey : (_item$id3 = item.id) === null || _item$id3 === void 0 ? void 0 : _item$id3.toString()) !== null && _ref3 !== void 0 ? _ref3 : index.toString();
|
|
228
227
|
return /*#__PURE__*/ jsx(MappedActionListItem, {
|
|
229
|
-
className: clsx(FilteredActionList_module_css_default.ActionListItem, "className" in
|
|
228
|
+
className: clsx(FilteredActionList_module_css_default.ActionListItem, "className" in item ? item.className : void 0),
|
|
230
229
|
"data-input-focused": isInputFocused ? "" : void 0,
|
|
231
|
-
"data-first-child":
|
|
232
|
-
"data-index":
|
|
233
|
-
ref: (
|
|
234
|
-
if (
|
|
230
|
+
"data-first-child": index === 0 ? "" : void 0,
|
|
231
|
+
"data-index": virtualItem.index,
|
|
232
|
+
ref: (node) => {
|
|
233
|
+
if (node) virtualizer.measureElement(node);
|
|
235
234
|
},
|
|
236
235
|
style: {
|
|
237
236
|
position: "absolute",
|
|
238
237
|
top: 0,
|
|
239
238
|
left: 0,
|
|
240
239
|
right: 0,
|
|
241
|
-
transform: `translateY(${
|
|
240
|
+
transform: `translateY(${virtualItem.start}px)`
|
|
242
241
|
},
|
|
243
|
-
...
|
|
242
|
+
...item,
|
|
244
243
|
renderItem: listProps.renderItem
|
|
245
|
-
},
|
|
244
|
+
}, key);
|
|
246
245
|
});
|
|
247
|
-
return items.map(({ key:
|
|
248
|
-
var _ref4,
|
|
249
|
-
const
|
|
246
|
+
return items.map(({ key: itemKey, ...item }, index) => {
|
|
247
|
+
var _ref4, _item$id4;
|
|
248
|
+
const key = (_ref4 = itemKey !== null && itemKey !== void 0 ? itemKey : (_item$id4 = item.id) === null || _item$id4 === void 0 ? void 0 : _item$id4.toString()) !== null && _ref4 !== void 0 ? _ref4 : index.toString();
|
|
250
249
|
return /*#__PURE__*/ jsx(MappedActionListItem, {
|
|
251
|
-
className: clsx(FilteredActionList_module_css_default.ActionListItem, "className" in
|
|
250
|
+
className: clsx(FilteredActionList_module_css_default.ActionListItem, "className" in item ? item.className : void 0),
|
|
252
251
|
"data-input-focused": isInputFocused ? "" : void 0,
|
|
253
|
-
"data-first-child":
|
|
254
|
-
...
|
|
252
|
+
"data-first-child": index === 0 ? "" : void 0,
|
|
253
|
+
...item,
|
|
255
254
|
renderItem: listProps.renderItem
|
|
256
|
-
},
|
|
255
|
+
}, key);
|
|
257
256
|
});
|
|
258
257
|
};
|
|
259
258
|
const actionListContent = /*#__PURE__*/ jsx(ActionList, {
|
|
@@ -334,115 +333,27 @@ function FilteredActionList({ loading = false, placeholderText, filterValue: ext
|
|
|
334
333
|
}
|
|
335
334
|
FilteredActionList.displayName = "FilteredActionList";
|
|
336
335
|
const MappedActionListItem = /*#__PURE__*/ forwardRef((item, ref) => {
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
$[0] = item;
|
|
343
|
-
$[1] = t0;
|
|
344
|
-
} else t0 = $[1];
|
|
345
|
-
return t0;
|
|
346
|
-
}
|
|
347
|
-
let LeadingVisual;
|
|
348
|
-
let TrailingIcon;
|
|
349
|
-
let TrailingVisual;
|
|
350
|
-
let children;
|
|
351
|
-
let description;
|
|
352
|
-
let descriptionVariant;
|
|
353
|
-
let id;
|
|
354
|
-
let onAction;
|
|
355
|
-
let rest;
|
|
356
|
-
let text;
|
|
357
|
-
let trailingText;
|
|
358
|
-
if ($[2] !== item) {
|
|
359
|
-
({id, description, descriptionVariant, text, trailingVisual: TrailingVisual, leadingVisual: LeadingVisual, trailingText, trailingIcon: TrailingIcon, onAction, children, ...rest} = item);
|
|
360
|
-
$[2] = item;
|
|
361
|
-
$[3] = LeadingVisual;
|
|
362
|
-
$[4] = TrailingIcon;
|
|
363
|
-
$[5] = TrailingVisual;
|
|
364
|
-
$[6] = children;
|
|
365
|
-
$[7] = description;
|
|
366
|
-
$[8] = descriptionVariant;
|
|
367
|
-
$[9] = id;
|
|
368
|
-
$[10] = onAction;
|
|
369
|
-
$[11] = rest;
|
|
370
|
-
$[12] = text;
|
|
371
|
-
$[13] = trailingText;
|
|
372
|
-
} else {
|
|
373
|
-
LeadingVisual = $[3];
|
|
374
|
-
TrailingIcon = $[4];
|
|
375
|
-
TrailingVisual = $[5];
|
|
376
|
-
children = $[6];
|
|
377
|
-
description = $[7];
|
|
378
|
-
descriptionVariant = $[8];
|
|
379
|
-
id = $[9];
|
|
380
|
-
onAction = $[10];
|
|
381
|
-
rest = $[11];
|
|
382
|
-
text = $[12];
|
|
383
|
-
trailingText = $[13];
|
|
384
|
-
}
|
|
385
|
-
let t0;
|
|
386
|
-
if ($[14] !== item || $[15] !== onAction) {
|
|
387
|
-
t0 = (e) => {
|
|
336
|
+
if (typeof item.renderItem === "function") return item.renderItem(item);
|
|
337
|
+
const { id, description, descriptionVariant, text, trailingVisual: TrailingVisual, leadingVisual: LeadingVisual, trailingText, trailingIcon: TrailingIcon, onAction, children, ...rest } = item;
|
|
338
|
+
return /*#__PURE__*/ jsxs(ActionList.Item, {
|
|
339
|
+
role: "option",
|
|
340
|
+
onSelect: (e) => {
|
|
388
341
|
if (typeof onAction === "function") onAction(item, e);
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
children: description
|
|
405
|
-
}) : null;
|
|
406
|
-
$[19] = description;
|
|
407
|
-
$[20] = descriptionVariant;
|
|
408
|
-
$[21] = t2;
|
|
409
|
-
} else t2 = $[21];
|
|
410
|
-
let t3;
|
|
411
|
-
if ($[22] !== TrailingIcon || $[23] !== TrailingVisual || $[24] !== trailingText) {
|
|
412
|
-
t3 = TrailingVisual ? /*#__PURE__*/ jsx(ActionList.TrailingVisual, { children: typeof TrailingVisual !== "string" && isValidElementType(TrailingVisual) ? /*#__PURE__*/ jsx(TrailingVisual, {}) : TrailingVisual }) : TrailingIcon || trailingText ? /*#__PURE__*/ jsxs(ActionList.TrailingVisual, { children: [trailingText, TrailingIcon && /*#__PURE__*/ jsx(TrailingIcon, {})] }) : null;
|
|
413
|
-
$[22] = TrailingIcon;
|
|
414
|
-
$[23] = TrailingVisual;
|
|
415
|
-
$[24] = trailingText;
|
|
416
|
-
$[25] = t3;
|
|
417
|
-
} else t3 = $[25];
|
|
418
|
-
let t4;
|
|
419
|
-
if ($[26] !== children || $[27] !== id || $[28] !== ref || $[29] !== rest || $[30] !== t0 || $[31] !== t1 || $[32] !== t2 || $[33] !== t3 || $[34] !== text) {
|
|
420
|
-
t4 = /*#__PURE__*/ jsxs(ActionList.Item, {
|
|
421
|
-
role: "option",
|
|
422
|
-
onSelect: t0,
|
|
423
|
-
"data-id": id,
|
|
424
|
-
ref,
|
|
425
|
-
...rest,
|
|
426
|
-
children: [
|
|
427
|
-
t1,
|
|
428
|
-
children,
|
|
429
|
-
text,
|
|
430
|
-
t2,
|
|
431
|
-
t3
|
|
432
|
-
]
|
|
433
|
-
});
|
|
434
|
-
$[26] = children;
|
|
435
|
-
$[27] = id;
|
|
436
|
-
$[28] = ref;
|
|
437
|
-
$[29] = rest;
|
|
438
|
-
$[30] = t0;
|
|
439
|
-
$[31] = t1;
|
|
440
|
-
$[32] = t2;
|
|
441
|
-
$[33] = t3;
|
|
442
|
-
$[34] = text;
|
|
443
|
-
$[35] = t4;
|
|
444
|
-
} else t4 = $[35];
|
|
445
|
-
return t4;
|
|
342
|
+
},
|
|
343
|
+
"data-id": id,
|
|
344
|
+
ref,
|
|
345
|
+
...rest,
|
|
346
|
+
children: [
|
|
347
|
+
LeadingVisual ? /*#__PURE__*/ jsx(ActionList.LeadingVisual, { children: /*#__PURE__*/ jsx(LeadingVisual, {}) }) : null,
|
|
348
|
+
children,
|
|
349
|
+
text,
|
|
350
|
+
description ? /*#__PURE__*/ jsx(ActionList.Description, {
|
|
351
|
+
variant: descriptionVariant,
|
|
352
|
+
children: description
|
|
353
|
+
}) : null,
|
|
354
|
+
TrailingVisual ? /*#__PURE__*/ jsx(ActionList.TrailingVisual, { children: typeof TrailingVisual !== "string" && isValidElementType(TrailingVisual) ? /*#__PURE__*/ jsx(TrailingVisual, {}) : TrailingVisual }) : TrailingIcon || trailingText ? /*#__PURE__*/ jsxs(ActionList.TrailingVisual, { children: [trailingText, TrailingIcon && /*#__PURE__*/ jsx(TrailingIcon, {})] }) : null
|
|
355
|
+
]
|
|
356
|
+
});
|
|
446
357
|
});
|
|
447
358
|
FilteredActionList.displayName = "FilteredActionList";
|
|
448
359
|
//#endregion
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { useEffect, useRef } from "react";
|
|
1
|
+
import { useCallback, useEffect, useRef } from "react";
|
|
3
2
|
import { announce } from "@primer/live-region-element";
|
|
4
3
|
//#region src/FilteredActionList/useAnnouncements.tsx
|
|
5
4
|
const delayMs = 500;
|
|
@@ -23,155 +22,84 @@ const getItemWithActiveDescendant = (listRef, items) => {
|
|
|
23
22
|
selected: activeItem === null || activeItem === void 0 ? void 0 : activeItem.selected
|
|
24
23
|
};
|
|
25
24
|
};
|
|
26
|
-
const useAnnouncements = (items, listContainerRef, inputRef,
|
|
27
|
-
const $ = c(33);
|
|
28
|
-
const enabled = t0 === void 0 ? true : t0;
|
|
29
|
-
const loading = t1 === void 0 ? false : t1;
|
|
25
|
+
const useAnnouncements = (items, listContainerRef, inputRef, enabled = true, loading = false, message, focusManagement) => {
|
|
30
26
|
const usingRovingTabindex = focusManagement === "roving-tabindex";
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
if ($[1] !== items) {
|
|
39
|
-
t3 = items.filter(_temp);
|
|
40
|
-
$[1] = items;
|
|
41
|
-
$[2] = t3;
|
|
42
|
-
} else t3 = $[2];
|
|
43
|
-
const selectedItems = t3.length;
|
|
44
|
-
let t4;
|
|
45
|
-
if ($[3] !== enabled) {
|
|
46
|
-
t4 = (...t5) => {
|
|
47
|
-
const args = t5;
|
|
48
|
-
if (enabled) return announce(...args);
|
|
49
|
-
};
|
|
50
|
-
$[3] = enabled;
|
|
51
|
-
$[4] = t4;
|
|
52
|
-
} else t4 = $[4];
|
|
53
|
-
const announce$1 = t4;
|
|
54
|
-
let t5;
|
|
55
|
-
let t6;
|
|
56
|
-
if ($[5] !== announce$1 || $[6] !== inputRef || $[7] !== items || $[8] !== listContainerRef || $[9] !== selectedItems || $[10] !== usingRovingTabindex) {
|
|
57
|
-
t5 = function announceInitialFocus() {
|
|
58
|
-
const focusHandler = () => {
|
|
59
|
-
if (usingRovingTabindex) announce$1(`${items.length} item${items.length > 1 ? "s" : ""} available, ${selectedItems} selected.`, {
|
|
60
|
-
delayMs,
|
|
61
|
-
from: liveRegion ? liveRegion : void 0
|
|
62
|
-
});
|
|
63
|
-
else window.requestAnimationFrame(() => {
|
|
64
|
-
const activeItem = getItemWithActiveDescendant(listContainerRef, items);
|
|
65
|
-
if (!activeItem) return;
|
|
66
|
-
const { index, text, selected } = activeItem;
|
|
67
|
-
announce$1([
|
|
68
|
-
"Focus on filter text box and list of items",
|
|
69
|
-
`Focused item: ${text}`,
|
|
70
|
-
`${selected ? "selected" : "not selected"}`,
|
|
71
|
-
`${index + 1} of ${items.length}`
|
|
72
|
-
].join(", "), {
|
|
73
|
-
delayMs,
|
|
74
|
-
from: liveRegion ? liveRegion : void 0
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
};
|
|
78
|
-
const inputElement = inputRef.current;
|
|
79
|
-
inputElement === null || inputElement === void 0 || inputElement.addEventListener("focus", focusHandler);
|
|
80
|
-
return () => inputElement === null || inputElement === void 0 ? void 0 : inputElement.removeEventListener("focus", focusHandler);
|
|
81
|
-
};
|
|
82
|
-
t6 = [
|
|
83
|
-
listContainerRef,
|
|
84
|
-
inputRef,
|
|
85
|
-
items,
|
|
86
|
-
liveRegion,
|
|
87
|
-
announce$1,
|
|
88
|
-
usingRovingTabindex,
|
|
89
|
-
selectedItems
|
|
90
|
-
];
|
|
91
|
-
$[5] = announce$1;
|
|
92
|
-
$[6] = inputRef;
|
|
93
|
-
$[7] = items;
|
|
94
|
-
$[8] = listContainerRef;
|
|
95
|
-
$[9] = selectedItems;
|
|
96
|
-
$[10] = usingRovingTabindex;
|
|
97
|
-
$[11] = t5;
|
|
98
|
-
$[12] = t6;
|
|
99
|
-
} else {
|
|
100
|
-
t5 = $[11];
|
|
101
|
-
t6 = $[12];
|
|
102
|
-
}
|
|
103
|
-
useEffect(t5, t6);
|
|
104
|
-
const isFirstRender = useFirstRender();
|
|
105
|
-
let t7;
|
|
106
|
-
if ($[13] !== announce$1 || $[14] !== isFirstRender || $[15] !== items || $[16] !== listContainerRef || $[17] !== loading || $[18] !== (message === null || message === void 0 ? void 0 : message.description) || $[19] !== (message === null || message === void 0 ? void 0 : message.title) || $[20] !== selectedItems || $[21] !== usingRovingTabindex) {
|
|
107
|
-
t7 = function announceListUpdates() {
|
|
108
|
-
if (isFirstRender) return;
|
|
109
|
-
liveRegion === null || liveRegion === void 0 || liveRegion.clear();
|
|
110
|
-
if (items.length === 0 && !loading) {
|
|
111
|
-
announce$1(`${message === null || message === void 0 ? void 0 : message.title}. ${message === null || message === void 0 ? void 0 : message.description}`, { delayMs });
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
27
|
+
const liveRegion = document.querySelector("live-region");
|
|
28
|
+
const selectedItems = items.filter((item) => item.selected).length;
|
|
29
|
+
const announce$1 = useCallback((...args) => {
|
|
30
|
+
if (enabled) return announce(...args);
|
|
31
|
+
}, [enabled]);
|
|
32
|
+
useEffect(function announceInitialFocus() {
|
|
33
|
+
const focusHandler = () => {
|
|
114
34
|
if (usingRovingTabindex) announce$1(`${items.length} item${items.length > 1 ? "s" : ""} available, ${selectedItems} selected.`, {
|
|
115
35
|
delayMs,
|
|
116
36
|
from: liveRegion ? liveRegion : void 0
|
|
117
37
|
});
|
|
118
38
|
else window.requestAnimationFrame(() => {
|
|
119
|
-
const
|
|
120
|
-
if (!
|
|
121
|
-
const { index
|
|
39
|
+
const activeItem = getItemWithActiveDescendant(listContainerRef, items);
|
|
40
|
+
if (!activeItem) return;
|
|
41
|
+
const { index, text, selected } = activeItem;
|
|
122
42
|
announce$1([
|
|
123
|
-
|
|
124
|
-
`Focused item: ${
|
|
125
|
-
`${
|
|
126
|
-
`${
|
|
43
|
+
`Focus on filter text box and list of items`,
|
|
44
|
+
`Focused item: ${text}`,
|
|
45
|
+
`${selected ? "selected" : "not selected"}`,
|
|
46
|
+
`${index + 1} of ${items.length}`
|
|
127
47
|
].join(", "), {
|
|
128
48
|
delayMs,
|
|
129
49
|
from: liveRegion ? liveRegion : void 0
|
|
130
50
|
});
|
|
131
51
|
});
|
|
132
52
|
};
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
$
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
53
|
+
const inputElement = inputRef.current;
|
|
54
|
+
inputElement === null || inputElement === void 0 || inputElement.addEventListener("focus", focusHandler);
|
|
55
|
+
return () => inputElement === null || inputElement === void 0 ? void 0 : inputElement.removeEventListener("focus", focusHandler);
|
|
56
|
+
}, [
|
|
57
|
+
listContainerRef,
|
|
58
|
+
inputRef,
|
|
59
|
+
items,
|
|
60
|
+
liveRegion,
|
|
61
|
+
announce$1,
|
|
62
|
+
usingRovingTabindex,
|
|
63
|
+
selectedItems
|
|
64
|
+
]);
|
|
65
|
+
const isFirstRender = useFirstRender();
|
|
66
|
+
useEffect(function announceListUpdates() {
|
|
67
|
+
if (isFirstRender) return;
|
|
68
|
+
liveRegion === null || liveRegion === void 0 || liveRegion.clear();
|
|
69
|
+
if (items.length === 0 && !loading) {
|
|
70
|
+
announce$1(`${message === null || message === void 0 ? void 0 : message.title}. ${message === null || message === void 0 ? void 0 : message.description}`, { delayMs });
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (usingRovingTabindex) announce$1(`${items.length} item${items.length > 1 ? "s" : ""} available, ${selectedItems} selected.`, {
|
|
74
|
+
delayMs,
|
|
75
|
+
from: liveRegion ? liveRegion : void 0
|
|
76
|
+
});
|
|
77
|
+
else window.requestAnimationFrame(() => {
|
|
78
|
+
const activeItem = getItemWithActiveDescendant(listContainerRef, items);
|
|
79
|
+
if (!activeItem) return;
|
|
80
|
+
const { index, text, selected } = activeItem;
|
|
81
|
+
announce$1([
|
|
82
|
+
`List updated`,
|
|
83
|
+
`Focused item: ${text}`,
|
|
84
|
+
`${selected ? "selected" : "not selected"}`,
|
|
85
|
+
`${index + 1} of ${items.length}`
|
|
86
|
+
].join(", "), {
|
|
87
|
+
delayMs,
|
|
88
|
+
from: liveRegion ? liveRegion : void 0
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
}, [
|
|
92
|
+
announce$1,
|
|
93
|
+
isFirstRender,
|
|
94
|
+
items,
|
|
95
|
+
listContainerRef,
|
|
96
|
+
liveRegion,
|
|
97
|
+
usingRovingTabindex,
|
|
98
|
+
message === null || message === void 0 ? void 0 : message.title,
|
|
99
|
+
message === null || message === void 0 ? void 0 : message.description,
|
|
100
|
+
loading,
|
|
101
|
+
selectedItems
|
|
102
|
+
]);
|
|
172
103
|
};
|
|
173
|
-
function _temp(item) {
|
|
174
|
-
return item.selected;
|
|
175
|
-
}
|
|
176
104
|
//#endregion
|
|
177
105
|
export { useAnnouncements };
|