@redsift/design-system 11.5.0-muiv5 → 11.6.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_internal/Alert2.js +197 -0
- package/_internal/Alert2.js.map +1 -0
- package/_internal/AppBar.js +248 -0
- package/_internal/AppBar.js.map +1 -0
- package/_internal/AppContainer.js +142 -0
- package/_internal/AppContainer.js.map +1 -0
- package/_internal/AppContent.js +92 -0
- package/_internal/AppContent.js.map +1 -0
- package/_internal/Badge2.js +142 -0
- package/_internal/Badge2.js.map +1 -0
- package/_internal/BreadcrumbItem.js +91 -0
- package/_internal/BreadcrumbItem.js.map +1 -0
- package/_internal/Breadcrumbs2.js +94 -0
- package/_internal/Breadcrumbs2.js.map +1 -0
- package/_internal/Button2.js +91 -0
- package/_internal/Button2.js.map +1 -0
- package/_internal/ButtonGroup.js +181 -0
- package/_internal/ButtonGroup.js.map +1 -0
- package/_internal/ButtonLink.js +84 -0
- package/_internal/ButtonLink.js.map +1 -0
- package/_internal/Card2.js +157 -0
- package/_internal/Card2.js.map +1 -0
- package/_internal/CardActions.js +44 -0
- package/_internal/CardActions.js.map +1 -0
- package/_internal/CardBody.js +42 -0
- package/_internal/CardBody.js.map +1 -0
- package/_internal/CardHeader.js +83 -0
- package/_internal/CardHeader.js.map +1 -0
- package/_internal/Checkbox2.js +244 -0
- package/_internal/Checkbox2.js.map +1 -0
- package/_internal/CheckboxGroup.js +188 -0
- package/_internal/CheckboxGroup.js.map +1 -0
- package/_internal/ConditionalWrapper.js +13 -0
- package/_internal/ConditionalWrapper.js.map +1 -0
- package/_internal/DetailedCard.js +6916 -0
- package/_internal/DetailedCard.js.map +1 -0
- package/_internal/DetailedCardCollapsibleSectionItems.js +64 -0
- package/_internal/DetailedCardCollapsibleSectionItems.js.map +1 -0
- package/_internal/DetailedCardHeader.js +67 -0
- package/_internal/DetailedCardHeader.js.map +1 -0
- package/_internal/DetailedCardSection.js +172 -0
- package/_internal/DetailedCardSection.js.map +1 -0
- package/_internal/DetailedCardSectionItem.js +94 -0
- package/_internal/DetailedCardSectionItem.js.map +1 -0
- package/_internal/Flexbox2.js +93 -0
- package/_internal/Flexbox2.js.map +1 -0
- package/_internal/Grid2.js +95 -0
- package/_internal/Grid2.js.map +1 -0
- package/_internal/GridItem.js +40 -0
- package/_internal/GridItem.js.map +1 -0
- package/_internal/Heading2.js +113 -0
- package/_internal/Heading2.js.map +1 -0
- package/_internal/Icon2.js +211 -0
- package/_internal/Icon2.js.map +1 -0
- package/_internal/IconButton.js +80 -0
- package/_internal/IconButton.js.map +1 -0
- package/_internal/IconButtonLink.js +75 -0
- package/_internal/IconButtonLink.js.map +1 -0
- package/_internal/Item2.js +399 -0
- package/_internal/Item2.js.map +1 -0
- package/_internal/Link2.js +67 -0
- package/_internal/Link2.js.map +1 -0
- package/_internal/LinkButton.js +66 -0
- package/_internal/LinkButton.js.map +1 -0
- package/_internal/Listbox2.js +274 -0
- package/_internal/Listbox2.js.map +1 -0
- package/_internal/Number2.js +111 -0
- package/_internal/Number2.js.map +1 -0
- package/_internal/NumberField.js +3974 -0
- package/_internal/NumberField.js.map +1 -0
- package/_internal/Pill2.js +405 -0
- package/_internal/Pill2.js.map +1 -0
- package/_internal/ProgressBar.js +69 -0
- package/_internal/ProgressBar.js.map +1 -0
- package/_internal/Radio2.js +237 -0
- package/_internal/Radio2.js.map +1 -0
- package/_internal/RadioGroup.js +176 -0
- package/_internal/RadioGroup.js.map +1 -0
- package/_internal/Shield2.js +225 -0
- package/_internal/Shield2.js.map +1 -0
- package/_internal/SideNavigationMenu.js +591 -0
- package/_internal/SideNavigationMenu.js.map +1 -0
- package/_internal/SideNavigationMenuItem.js +304 -0
- package/_internal/SideNavigationMenuItem.js.map +1 -0
- package/_internal/Skeleton2.js +42 -0
- package/_internal/Skeleton2.js.map +1 -0
- package/_internal/SkeletonCircle.js +58 -0
- package/_internal/SkeletonCircle.js.map +1 -0
- package/_internal/SkeletonText.js +77 -0
- package/_internal/SkeletonText.js.map +1 -0
- package/_internal/Spinner2.js +333 -0
- package/_internal/Spinner2.js.map +1 -0
- package/_internal/Switch2.js +320 -0
- package/_internal/Switch2.js.map +1 -0
- package/_internal/SwitchGroup.js +188 -0
- package/_internal/SwitchGroup.js.map +1 -0
- package/_internal/Text2.js +51 -0
- package/_internal/Text2.js.map +1 -0
- package/_internal/TextArea.js +444 -0
- package/_internal/TextArea.js.map +1 -0
- package/_internal/TextField.js +473 -0
- package/_internal/TextField.js.map +1 -0
- package/_internal/_rollupPluginBabelHelpers.js +133 -0
- package/_internal/_rollupPluginBabelHelpers.js.map +1 -0
- package/_internal/alert.js +2 -0
- package/_internal/alert.js.map +1 -0
- package/_internal/app-bar.js +2 -0
- package/_internal/app-bar.js.map +1 -0
- package/_internal/app-container.js +3 -0
- package/_internal/app-container.js.map +1 -0
- package/_internal/app-content.js +2 -0
- package/_internal/app-content.js.map +1 -0
- package/_internal/app-side-panel.js +3 -0
- package/_internal/app-side-panel.js.map +1 -0
- package/_internal/badge.js +2 -0
- package/_internal/badge.js.map +1 -0
- package/_internal/breadcrumb-item.js +2 -0
- package/_internal/breadcrumb-item.js.map +1 -0
- package/_internal/breadcrumbs.js +2 -0
- package/_internal/breadcrumbs.js.map +1 -0
- package/_internal/button-group.js +2 -0
- package/_internal/button-group.js.map +1 -0
- package/_internal/button-link.js +2 -0
- package/_internal/button-link.js.map +1 -0
- package/_internal/button.js +3 -0
- package/_internal/button.js.map +1 -0
- package/_internal/card-actions.js +2 -0
- package/_internal/card-actions.js.map +1 -0
- package/_internal/card-body.js +2 -0
- package/_internal/card-body.js.map +1 -0
- package/_internal/card-header.js +2 -0
- package/_internal/card-header.js.map +1 -0
- package/_internal/card.js +2 -0
- package/_internal/card.js.map +1 -0
- package/_internal/checkbox-group.js +2 -0
- package/_internal/checkbox-group.js.map +1 -0
- package/_internal/checkbox.js +2 -0
- package/_internal/checkbox.js.map +1 -0
- package/_internal/colors.js +98 -0
- package/_internal/colors.js.map +1 -0
- package/_internal/conditional-wrapper.js +2 -0
- package/_internal/conditional-wrapper.js.map +1 -0
- package/_internal/context.js +6 -0
- package/_internal/context.js.map +1 -0
- package/_internal/context2.js +300 -0
- package/_internal/context2.js.map +1 -0
- package/_internal/context3.js +6 -0
- package/_internal/context3.js.map +1 -0
- package/_internal/context4.js +6 -0
- package/_internal/context4.js.map +1 -0
- package/_internal/context5.js +6 -0
- package/_internal/context5.js.map +1 -0
- package/_internal/detailed-card-collapsible-section-items.js +2 -0
- package/_internal/detailed-card-collapsible-section-items.js.map +1 -0
- package/_internal/detailed-card-header.js +2 -0
- package/_internal/detailed-card-header.js.map +1 -0
- package/_internal/detailed-card-section-item.js +2 -0
- package/_internal/detailed-card-section-item.js.map +1 -0
- package/_internal/detailed-card-section.js +2 -0
- package/_internal/detailed-card-section.js.map +1 -0
- package/_internal/detailed-card.js +2 -0
- package/_internal/detailed-card.js.map +1 -0
- package/_internal/filterComponents.js +24 -0
- package/_internal/filterComponents.js.map +1 -0
- package/_internal/flexbox.js +2 -0
- package/_internal/flexbox.js.map +1 -0
- package/_internal/focus-within-group.js +3 -0
- package/_internal/focus-within-group.js.map +1 -0
- package/_internal/fonts.js +10 -0
- package/_internal/fonts.js.map +1 -0
- package/_internal/gradient-border.js +38 -0
- package/_internal/gradient-border.js.map +1 -0
- package/_internal/grid-item.js +2 -0
- package/_internal/grid-item.js.map +1 -0
- package/_internal/grid.js +2 -0
- package/_internal/grid.js.map +1 -0
- package/_internal/heading.js +3 -0
- package/_internal/heading.js.map +1 -0
- package/_internal/icon-button-link.js +2 -0
- package/_internal/icon-button-link.js.map +1 -0
- package/_internal/icon-button.js +3 -0
- package/_internal/icon-button.js.map +1 -0
- package/_internal/icon.js +2 -0
- package/_internal/icon.js.map +1 -0
- package/_internal/isComponent.js +15 -0
- package/_internal/isComponent.js.map +1 -0
- package/_internal/item.js +2 -0
- package/_internal/item.js.map +1 -0
- package/_internal/link-button.js +2 -0
- package/_internal/link-button.js.map +1 -0
- package/_internal/link.js +3 -0
- package/_internal/link.js.map +1 -0
- package/_internal/listbox.js +3 -0
- package/_internal/listbox.js.map +1 -0
- package/_internal/number-field.js +2 -0
- package/_internal/number-field.js.map +1 -0
- package/_internal/number.js +2 -0
- package/_internal/number.js.map +1 -0
- package/_internal/partitionComponents.js +26 -0
- package/_internal/partitionComponents.js.map +1 -0
- package/_internal/pill.js +2 -0
- package/_internal/pill.js.map +1 -0
- package/_internal/progress-bar.js +2 -0
- package/_internal/progress-bar.js.map +1 -0
- package/_internal/radio-group.js +2 -0
- package/_internal/radio-group.js.map +1 -0
- package/_internal/radio.js +2 -0
- package/_internal/radio.js.map +1 -0
- package/_internal/redsift-design-tokens.js +1391 -0
- package/_internal/redsift-design-tokens.js.map +1 -0
- package/_internal/shared.js +2 -0
- package/_internal/shared.js.map +1 -0
- package/_internal/shield.js +2 -0
- package/_internal/shield.js.map +1 -0
- package/_internal/side-navigation-menu-bar.js +3 -0
- package/_internal/side-navigation-menu-bar.js.map +1 -0
- package/_internal/side-navigation-menu-item.js +2 -0
- package/_internal/side-navigation-menu-item.js.map +1 -0
- package/_internal/side-navigation-menu.js +2 -0
- package/_internal/side-navigation-menu.js.map +1 -0
- package/_internal/skeleton-circle.js +2 -0
- package/_internal/skeleton-circle.js.map +1 -0
- package/_internal/skeleton-text.js +3 -0
- package/_internal/skeleton-text.js.map +1 -0
- package/_internal/skeleton.js +2 -0
- package/_internal/skeleton.js.map +1 -0
- package/_internal/spinner.js +2 -0
- package/_internal/spinner.js.map +1 -0
- package/_internal/styles.js +235 -0
- package/_internal/styles.js.map +1 -0
- package/_internal/styles2.js +47 -0
- package/_internal/styles2.js.map +1 -0
- package/_internal/styles3.js +145 -0
- package/_internal/styles3.js.map +1 -0
- package/_internal/styles4.js +250 -0
- package/_internal/styles4.js.map +1 -0
- package/_internal/styles5.js +143 -0
- package/_internal/styles5.js.map +1 -0
- package/_internal/styles6.js +84 -0
- package/_internal/styles6.js.map +1 -0
- package/_internal/switch-group.js +2 -0
- package/_internal/switch-group.js.map +1 -0
- package/_internal/switch.js +2 -0
- package/_internal/switch.js.map +1 -0
- package/_internal/text-area.js +2 -0
- package/_internal/text-area.js.map +1 -0
- package/_internal/text-field.js +2 -0
- package/_internal/text-field.js.map +1 -0
- package/_internal/text.js +3 -0
- package/_internal/text.js.map +1 -0
- package/_internal/theme.js +2 -0
- package/_internal/theme.js.map +1 -0
- package/_internal/types.js +15 -0
- package/_internal/types.js.map +1 -0
- package/_internal/types2.js +26 -0
- package/_internal/types2.js.map +1 -0
- package/_internal/types3.js +20 -0
- package/_internal/types3.js.map +1 -0
- package/_internal/useAppSidePanel.js +337 -0
- package/_internal/useAppSidePanel.js.map +1 -0
- package/_internal/useFocusOnList.js +541 -0
- package/_internal/useFocusOnList.js.map +1 -0
- package/_internal/useFocusOnListItem.js +203 -0
- package/_internal/useFocusOnListItem.js.map +1 -0
- package/_internal/useFocusRing.js +669 -0
- package/_internal/useFocusRing.js.map +1 -0
- package/_internal/useId.js +42 -0
- package/_internal/useId.js.map +1 -0
- package/_internal/useIsLoaded.js +14 -0
- package/_internal/useIsLoaded.js.map +1 -0
- package/_internal/useListboxItem.js +129 -0
- package/_internal/useListboxItem.js.map +1 -0
- package/_internal/useMessageFormatter.js +143 -0
- package/_internal/useMessageFormatter.js.map +1 -0
- package/_internal/useNumberFormatter.js +239 -0
- package/_internal/useNumberFormatter.js.map +1 -0
- package/_internal/useSideNavigationMenuBar.js +373 -0
- package/_internal/useSideNavigationMenuBar.js.map +1 -0
- package/_internal/useTheme.js +15 -0
- package/_internal/useTheme.js.map +1 -0
- package/_internal/warnIfNoAccessibleLabelFound.js +20 -0
- package/_internal/warnIfNoAccessibleLabelFound.js.map +1 -0
- package/index.js +315 -24243
- package/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,541 @@
|
|
|
1
|
+
import { _ as _objectSpread2 } from './_rollupPluginBabelHelpers.js';
|
|
2
|
+
import React__default, { useReducer, useEffect, useMemo, useContext, useCallback } from 'react';
|
|
3
|
+
import { F as FocusWithinGroupActionType, N as Navigation, E as EventKey, a as FOCUS_WITHING_GROUP_INITIAL_STATE, b as FocusWithinGroupContext } from './useFocusOnListItem.js';
|
|
4
|
+
|
|
5
|
+
const DOCUMENT_POSITION_FOLLOWING = 4;
|
|
6
|
+
const FocusWithinGroupReducer = (state, action) => {
|
|
7
|
+
switch (action.type) {
|
|
8
|
+
case FocusWithinGroupActionType.REGISTER_TAB_STOP:
|
|
9
|
+
{
|
|
10
|
+
const newTabStop = action.payload;
|
|
11
|
+
if (!newTabStop.domElementRef.current) {
|
|
12
|
+
return state;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Iterate backwards through state.tabStops since it is
|
|
16
|
+
// most likely that the tab stop will need to be inserted
|
|
17
|
+
// at the end of that array.
|
|
18
|
+
let indexToInsertAt = -1;
|
|
19
|
+
for (let i = state.tabStops.length - 1; i >= 0; --i) {
|
|
20
|
+
const loopTabStop = state.tabStops[i];
|
|
21
|
+
if (loopTabStop.id === newTabStop.id) {
|
|
22
|
+
// console.warn(false, `'${newTabStop.id}' tab stop already registered`);
|
|
23
|
+
return state;
|
|
24
|
+
}
|
|
25
|
+
// The compareDocumentPosition condition is true
|
|
26
|
+
// if newTabStop follows loopTabStop:
|
|
27
|
+
if (indexToInsertAt === -1 && loopTabStop.domElementRef.current && !!(loopTabStop.domElementRef.current.compareDocumentPosition(newTabStop.domElementRef.current) & DOCUMENT_POSITION_FOLLOWING)) {
|
|
28
|
+
indexToInsertAt = i + 1;
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// The indexToInsertAt is -1 when newTabStop should be inserted
|
|
34
|
+
// at the start of tabStops (the compareDocumentPosition condition
|
|
35
|
+
// always returns false in that case).
|
|
36
|
+
if (indexToInsertAt === -1) {
|
|
37
|
+
indexToInsertAt = 0;
|
|
38
|
+
}
|
|
39
|
+
const newTabStops = state.tabStops.slice();
|
|
40
|
+
newTabStops.splice(indexToInsertAt, 0, newTabStop);
|
|
41
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
42
|
+
selectedId: state.focusOnInit ? getUpdatedSelectedId(newTabStops, state.selectedId) : null,
|
|
43
|
+
tabStops: newTabStops,
|
|
44
|
+
rowStartMap: null
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
case FocusWithinGroupActionType.UNREGISTER_TAB_STOP:
|
|
48
|
+
{
|
|
49
|
+
const id = action.payload.id;
|
|
50
|
+
const newTabStops = state.tabStops.filter(tabStop => tabStop.id !== id);
|
|
51
|
+
if (newTabStops.length === state.tabStops.length) {
|
|
52
|
+
// console.warn(false, `'${id}' tab stop already unregistered`);
|
|
53
|
+
return state;
|
|
54
|
+
}
|
|
55
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56
|
+
selectedId: state.focusOnInit ? getUpdatedSelectedId(newTabStops, state.selectedId) : null,
|
|
57
|
+
tabStops: newTabStops,
|
|
58
|
+
rowStartMap: null
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
case FocusWithinGroupActionType.TAB_STOP_UPDATED:
|
|
62
|
+
{
|
|
63
|
+
const {
|
|
64
|
+
id,
|
|
65
|
+
rowIndex,
|
|
66
|
+
isDisabled,
|
|
67
|
+
value
|
|
68
|
+
} = action.payload;
|
|
69
|
+
const index = state.tabStops.findIndex(tabStop => tabStop.id === id);
|
|
70
|
+
if (index === -1) {
|
|
71
|
+
console.warn(false, `'${id}' tab stop not registered`);
|
|
72
|
+
return state;
|
|
73
|
+
}
|
|
74
|
+
const tabStop = state.tabStops[index];
|
|
75
|
+
if (tabStop.isDisabled === isDisabled && tabStop.rowIndex === rowIndex && tabStop.value === value) {
|
|
76
|
+
// Nothing to do so short-circuit.
|
|
77
|
+
return state;
|
|
78
|
+
}
|
|
79
|
+
const newTabStop = _objectSpread2(_objectSpread2({}, tabStop), {}, {
|
|
80
|
+
rowIndex,
|
|
81
|
+
isDisabled,
|
|
82
|
+
value
|
|
83
|
+
});
|
|
84
|
+
const newTabStops = state.tabStops.slice();
|
|
85
|
+
newTabStops.splice(index, 1, newTabStop);
|
|
86
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
87
|
+
selectedId: state.focusOnInit ? getUpdatedSelectedId(newTabStops, state.selectedId) : null,
|
|
88
|
+
tabStops: newTabStops,
|
|
89
|
+
rowStartMap: null
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
case FocusWithinGroupActionType.KEY_DOWN_ON_ITEM:
|
|
93
|
+
{
|
|
94
|
+
const {
|
|
95
|
+
id,
|
|
96
|
+
key,
|
|
97
|
+
ctrlKey
|
|
98
|
+
} = action.payload;
|
|
99
|
+
const index = state.tabStops.findIndex(tabStop => tabStop.id === id);
|
|
100
|
+
if (index === -1) {
|
|
101
|
+
console.warn(false, `'${id}' tab stop not registered`);
|
|
102
|
+
return state;
|
|
103
|
+
}
|
|
104
|
+
return moveSelectionFromKey(state, index, key, ctrlKey);
|
|
105
|
+
}
|
|
106
|
+
case FocusWithinGroupActionType.CLICK_ON_ITEM:
|
|
107
|
+
{
|
|
108
|
+
const id = action.payload.id;
|
|
109
|
+
const index = state.tabStops.findIndex(tabStop => tabStop.id === id);
|
|
110
|
+
if (index === -1) {
|
|
111
|
+
console.warn(false, `'${id}' tab stop not registered`);
|
|
112
|
+
return state;
|
|
113
|
+
}
|
|
114
|
+
const currentTabStop = state.tabStops[index];
|
|
115
|
+
return currentTabStop.isDisabled ? state : selectTabStop(state, currentTabStop, undefined, state.focusOnClick);
|
|
116
|
+
}
|
|
117
|
+
case FocusWithinGroupActionType.FOCUS_ON_LIST:
|
|
118
|
+
{
|
|
119
|
+
var _action$payload$id, _state$tabStops$;
|
|
120
|
+
const id = (_action$payload$id = action.payload.id) !== null && _action$payload$id !== void 0 ? _action$payload$id : (_state$tabStops$ = state.tabStops[0]) === null || _state$tabStops$ === void 0 ? void 0 : _state$tabStops$.id;
|
|
121
|
+
const index = state.tabStops.findIndex(tabStop => tabStop.id === id);
|
|
122
|
+
if (index === -1) {
|
|
123
|
+
return state;
|
|
124
|
+
}
|
|
125
|
+
const currentTabStop = state.tabStops[index];
|
|
126
|
+
return currentTabStop.isDisabled ? _objectSpread2(_objectSpread2({}, state), {}, {
|
|
127
|
+
delayedAction: undefined
|
|
128
|
+
}, action.payload) : selectTabStop(_objectSpread2(_objectSpread2({}, state), {}, {
|
|
129
|
+
delayedAction: undefined
|
|
130
|
+
}, action.payload), currentTabStop, undefined, state.focusOnClick);
|
|
131
|
+
}
|
|
132
|
+
case FocusWithinGroupActionType.BLUR_ON_LIST:
|
|
133
|
+
{
|
|
134
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
135
|
+
activedescendant: ['', '']
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
case FocusWithinGroupActionType.KEY_DOWN_ON_LIST:
|
|
139
|
+
{
|
|
140
|
+
const {
|
|
141
|
+
key,
|
|
142
|
+
ctrlKey
|
|
143
|
+
} = action.payload;
|
|
144
|
+
let index = state.tabStops.findIndex(tabStop => tabStop.id === state.selectedId);
|
|
145
|
+
if (index === -1) {
|
|
146
|
+
if (state.focusOnInit) {
|
|
147
|
+
console.warn(false, `'${state.selectedId}' tab stop not registered`);
|
|
148
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
149
|
+
delayedAction: undefined
|
|
150
|
+
});
|
|
151
|
+
} else {
|
|
152
|
+
index = 0;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return moveSelectionFromKey(_objectSpread2(_objectSpread2({}, state), {}, {
|
|
156
|
+
delayedAction: undefined
|
|
157
|
+
}), index, key, ctrlKey);
|
|
158
|
+
}
|
|
159
|
+
case FocusWithinGroupActionType.OPTIONS_UPDATED:
|
|
160
|
+
return _objectSpread2(_objectSpread2({}, state), action.payload);
|
|
161
|
+
case FocusWithinGroupActionType.FILTER_LIST:
|
|
162
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
163
|
+
selectedId: null
|
|
164
|
+
}, action.payload);
|
|
165
|
+
case FocusWithinGroupActionType.DELAY_ACTION:
|
|
166
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
167
|
+
delayedAction: action.payload
|
|
168
|
+
});
|
|
169
|
+
/* istanbul ignore next */
|
|
170
|
+
default:
|
|
171
|
+
return state;
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
function findIndexOfVeryFirstActiveTabStop(tabStops) {
|
|
175
|
+
return tabStops.findIndex(tabStop => !tabStop.isDisabled);
|
|
176
|
+
}
|
|
177
|
+
function findIndexOfVeryLastActiveTabStop(tabStops) {
|
|
178
|
+
for (let i = tabStops.length - 1; i >= 0; --i) {
|
|
179
|
+
const tabStop = tabStops[i];
|
|
180
|
+
if (!tabStop.isDisabled) {
|
|
181
|
+
return i;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return -1;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Determine the updated value for selectedId:
|
|
188
|
+
function getUpdatedSelectedId(tabStops, currentSelectedId) {
|
|
189
|
+
if (currentSelectedId === null) {
|
|
190
|
+
// There is not currently selected tab stop, so find
|
|
191
|
+
// the first tab stop that is not isDisabled and return
|
|
192
|
+
// its id, otherwise return null.
|
|
193
|
+
const index = tabStops.findIndex(tabStop => !tabStop.isDisabled);
|
|
194
|
+
return index === -1 ? null : tabStops[index].id;
|
|
195
|
+
}
|
|
196
|
+
let index = tabStops.findIndex(tabStop => tabStop.id === currentSelectedId);
|
|
197
|
+
if (index !== -1 && !tabStops[index].isDisabled) {
|
|
198
|
+
// The current selected id is still valid, so return it.
|
|
199
|
+
return currentSelectedId;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Finds the first tab stop that is not isDisabled and return
|
|
203
|
+
// its id, otherwise return null.
|
|
204
|
+
index = tabStops.findIndex(tabStop => !tabStop.isDisabled);
|
|
205
|
+
return index === -1 ? null : tabStops[index].id;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// Translates the user key down event info into a navigation instruction.
|
|
209
|
+
function getNavigationValue(key, ctrlKey, isGrid, direction, loopAround, isFirst, isLast) {
|
|
210
|
+
switch (key) {
|
|
211
|
+
case EventKey.ArrowLeft:
|
|
212
|
+
if (isGrid || direction === 'horizontal' || direction === 'both') {
|
|
213
|
+
return !isGrid && loopAround && isFirst ? Navigation.VERY_LAST : Navigation.PREVIOUS;
|
|
214
|
+
}
|
|
215
|
+
return null;
|
|
216
|
+
case EventKey.ArrowRight:
|
|
217
|
+
if (isGrid || direction === 'horizontal' || direction === 'both') {
|
|
218
|
+
return !isGrid && loopAround && isLast ? Navigation.VERY_FIRST : Navigation.NEXT;
|
|
219
|
+
}
|
|
220
|
+
return null;
|
|
221
|
+
case EventKey.ArrowUp:
|
|
222
|
+
if (isGrid) {
|
|
223
|
+
return Navigation.PREVIOUS_ROW;
|
|
224
|
+
} else if (direction === 'vertical' || direction === 'both') {
|
|
225
|
+
return loopAround && isFirst ? Navigation.VERY_LAST : Navigation.PREVIOUS;
|
|
226
|
+
}
|
|
227
|
+
return null;
|
|
228
|
+
case EventKey.ArrowDown:
|
|
229
|
+
if (isGrid) {
|
|
230
|
+
return Navigation.NEXT_ROW;
|
|
231
|
+
} else if (direction === 'vertical' || direction === 'both') {
|
|
232
|
+
return loopAround && isLast ? Navigation.VERY_FIRST : Navigation.NEXT;
|
|
233
|
+
}
|
|
234
|
+
return null;
|
|
235
|
+
case EventKey.Home:
|
|
236
|
+
return !isGrid || ctrlKey ? Navigation.VERY_FIRST : Navigation.FIRST_IN_ROW;
|
|
237
|
+
case EventKey.End:
|
|
238
|
+
return !isGrid || ctrlKey ? Navigation.VERY_LAST : Navigation.LAST_IN_ROW;
|
|
239
|
+
/* istanbul ignore next */
|
|
240
|
+
default:
|
|
241
|
+
return null;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Creates the new state for a tab stop when it becomes the selected one.
|
|
246
|
+
function selectTabStop(state, tabStop, rowStartMap) {
|
|
247
|
+
let allowFocusing = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
|
|
248
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
249
|
+
allowFocusing,
|
|
250
|
+
selectedId: tabStop.id,
|
|
251
|
+
rowStartMap: rowStartMap || state.rowStartMap,
|
|
252
|
+
activedescendant: state.focusType === 'virtual-focus' ? [tabStop.id, tabStop.value] : undefined
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Creates the row start index lookup map
|
|
257
|
+
// for the currently registered tab stops.
|
|
258
|
+
function createRowStartMap(state) {
|
|
259
|
+
const map = new Map();
|
|
260
|
+
for (let i = 0; i < state.tabStops.length; ++i) {
|
|
261
|
+
const {
|
|
262
|
+
rowIndex
|
|
263
|
+
} = state.tabStops[i];
|
|
264
|
+
if (rowIndex !== null && !map.has(rowIndex)) {
|
|
265
|
+
map.set(rowIndex, i);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return map;
|
|
269
|
+
}
|
|
270
|
+
function moveSelectionFromKey(state, index, key, ctrlKey) {
|
|
271
|
+
const currentTabStop = state.tabStops[index];
|
|
272
|
+
if (currentTabStop.isDisabled) {
|
|
273
|
+
return state;
|
|
274
|
+
}
|
|
275
|
+
const isGrid = currentTabStop.rowIndex !== null;
|
|
276
|
+
const isFirst = index === findIndexOfVeryFirstActiveTabStop(state.tabStops);
|
|
277
|
+
const isLast = index === findIndexOfVeryLastActiveTabStop(state.tabStops);
|
|
278
|
+
const navigation = getNavigationValue(key, ctrlKey, isGrid, state.direction, state.loopAround, isFirst, isLast);
|
|
279
|
+
if (!navigation) {
|
|
280
|
+
return state;
|
|
281
|
+
}
|
|
282
|
+
switch (navigation) {
|
|
283
|
+
case Navigation.NEXT:
|
|
284
|
+
{
|
|
285
|
+
for (let i = index + 1; i < state.tabStops.length; ++i) {
|
|
286
|
+
const tabStop = state.tabStops[i];
|
|
287
|
+
if (isGrid && tabStop.rowIndex !== currentTabStop.rowIndex) {
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
290
|
+
if (!tabStop.isDisabled) {
|
|
291
|
+
return selectTabStop(state, tabStop);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
break;
|
|
296
|
+
case Navigation.PREVIOUS:
|
|
297
|
+
{
|
|
298
|
+
for (let i = index - 1; i >= 0; --i) {
|
|
299
|
+
const tabStop = state.tabStops[i];
|
|
300
|
+
if (isGrid && tabStop.rowIndex !== currentTabStop.rowIndex) {
|
|
301
|
+
break;
|
|
302
|
+
}
|
|
303
|
+
if (!tabStop.isDisabled) {
|
|
304
|
+
return selectTabStop(state, tabStop);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
break;
|
|
309
|
+
case Navigation.VERY_FIRST:
|
|
310
|
+
{
|
|
311
|
+
const index = findIndexOfVeryFirstActiveTabStop(state.tabStops);
|
|
312
|
+
if (index > -1) {
|
|
313
|
+
return selectTabStop(state, state.tabStops[index]);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
break;
|
|
317
|
+
case Navigation.VERY_LAST:
|
|
318
|
+
{
|
|
319
|
+
const index = findIndexOfVeryLastActiveTabStop(state.tabStops);
|
|
320
|
+
if (index > -1) {
|
|
321
|
+
return selectTabStop(state, state.tabStops[index]);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
break;
|
|
325
|
+
case Navigation.PREVIOUS_ROW:
|
|
326
|
+
{
|
|
327
|
+
if (currentTabStop.rowIndex === null || currentTabStop.rowIndex === 0) {
|
|
328
|
+
return state;
|
|
329
|
+
}
|
|
330
|
+
const rowStartMap = state.rowStartMap || createRowStartMap(state);
|
|
331
|
+
const rowStartIndex = rowStartMap.get(currentTabStop.rowIndex);
|
|
332
|
+
if (rowStartIndex === undefined) {
|
|
333
|
+
return state;
|
|
334
|
+
}
|
|
335
|
+
const columnOffset = index - rowStartIndex;
|
|
336
|
+
for (let i = currentTabStop.rowIndex - 1; i >= 0; --i) {
|
|
337
|
+
const rowStartIndex = rowStartMap.get(i);
|
|
338
|
+
if (rowStartIndex === undefined) {
|
|
339
|
+
return state;
|
|
340
|
+
}
|
|
341
|
+
const rowTabStop = state.tabStops[rowStartIndex + columnOffset];
|
|
342
|
+
if (rowTabStop && !rowTabStop.isDisabled) {
|
|
343
|
+
return selectTabStop(state, rowTabStop, rowStartMap);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
347
|
+
allowFocusing: true,
|
|
348
|
+
rowStartMap
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
case Navigation.NEXT_ROW:
|
|
352
|
+
{
|
|
353
|
+
const maxRowIndex = state.tabStops[state.tabStops.length - 1].rowIndex;
|
|
354
|
+
if (currentTabStop.rowIndex === null || maxRowIndex === null || currentTabStop.rowIndex === maxRowIndex) {
|
|
355
|
+
return state;
|
|
356
|
+
}
|
|
357
|
+
const rowStartMap = state.rowStartMap || createRowStartMap(state);
|
|
358
|
+
const rowStartIndex = rowStartMap.get(currentTabStop.rowIndex);
|
|
359
|
+
if (rowStartIndex === undefined) {
|
|
360
|
+
return state;
|
|
361
|
+
}
|
|
362
|
+
const columnOffset = index - rowStartIndex;
|
|
363
|
+
for (let i = currentTabStop.rowIndex + 1; i <= maxRowIndex; ++i) {
|
|
364
|
+
const rowStartIndex = rowStartMap.get(i);
|
|
365
|
+
if (rowStartIndex === undefined) {
|
|
366
|
+
return state;
|
|
367
|
+
}
|
|
368
|
+
const rowTabStop = state.tabStops[rowStartIndex + columnOffset];
|
|
369
|
+
if (rowTabStop && !rowTabStop.isDisabled) {
|
|
370
|
+
return selectTabStop(state, rowTabStop, rowStartMap);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
374
|
+
allowFocusing: true,
|
|
375
|
+
rowStartMap
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
case Navigation.FIRST_IN_ROW:
|
|
379
|
+
{
|
|
380
|
+
if (currentTabStop.rowIndex === null) {
|
|
381
|
+
return state;
|
|
382
|
+
}
|
|
383
|
+
const rowStartMap = state.rowStartMap || createRowStartMap(state);
|
|
384
|
+
const rowStartIndex = rowStartMap.get(currentTabStop.rowIndex);
|
|
385
|
+
if (rowStartIndex === undefined) {
|
|
386
|
+
return state;
|
|
387
|
+
}
|
|
388
|
+
for (let i = rowStartIndex; i < state.tabStops.length; ++i) {
|
|
389
|
+
const tabStop = state.tabStops[i];
|
|
390
|
+
if (tabStop.rowIndex !== currentTabStop.rowIndex) {
|
|
391
|
+
break;
|
|
392
|
+
} else if (!tabStop.isDisabled) {
|
|
393
|
+
return selectTabStop(state, state.tabStops[i], rowStartMap);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
break;
|
|
398
|
+
case Navigation.LAST_IN_ROW:
|
|
399
|
+
{
|
|
400
|
+
if (currentTabStop.rowIndex === null) {
|
|
401
|
+
return state;
|
|
402
|
+
}
|
|
403
|
+
const rowStartMap = state.rowStartMap || createRowStartMap(state);
|
|
404
|
+
const rowEndIndex = rowStartMap.has(currentTabStop.rowIndex + 1) ? (rowStartMap.get(currentTabStop.rowIndex + 1) || 0) - 1 : state.tabStops.length - 1;
|
|
405
|
+
for (let i = rowEndIndex; i >= 0; --i) {
|
|
406
|
+
const tabStop = state.tabStops[i];
|
|
407
|
+
if (tabStop.rowIndex !== currentTabStop.rowIndex) {
|
|
408
|
+
break;
|
|
409
|
+
} else if (!tabStop.isDisabled) {
|
|
410
|
+
return selectTabStop(state, state.tabStops[i], rowStartMap);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
break;
|
|
415
|
+
}
|
|
416
|
+
return state;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* The FocusWithinGroup component.
|
|
421
|
+
*
|
|
422
|
+
* @param {ReactNode} children - The child content, which will
|
|
423
|
+
* include the DOM elements to rove between using the tab key.
|
|
424
|
+
* @param {KeyDirection} direction - An optional direction value
|
|
425
|
+
* that only applies when the roving tabindex is not being
|
|
426
|
+
* used within a grid. This value specifies the arrow key behaviour.
|
|
427
|
+
* The default value is 'horizontal'.
|
|
428
|
+
* When set to 'horizontal' then only the ArrowLeft and ArrowRight
|
|
429
|
+
* keys move to the previous and next tab stop respectively.
|
|
430
|
+
* When set to 'vertical' then only the ArrowUp and ArrowDown keys
|
|
431
|
+
* move to the previous and next tab stop respectively. When set
|
|
432
|
+
* to 'both' then both the ArrowLeft and ArrowUp keys can be used
|
|
433
|
+
* to move to the previous tab stop, and both the ArrowRight
|
|
434
|
+
* and ArrowDown keys can be used to move to the next tab stop.
|
|
435
|
+
* If you do not pass an explicit value then the 'horizontal'
|
|
436
|
+
* behaviour applies.
|
|
437
|
+
* @param {boolean} focusOnClick - An optional flag for indicating
|
|
438
|
+
* if `focus()` should invoked on an item in the roving tabindex
|
|
439
|
+
* when it is clicked. The default value for this flag is `false`,
|
|
440
|
+
* meaning that `focus()` will not be invoked on click.
|
|
441
|
+
* Browsers are
|
|
442
|
+
* [inconsistent in their behaviour](https://zellwk.com/blog/inconsistent-button-behavior/)
|
|
443
|
+
* when a button is clicked so you will see some variation between
|
|
444
|
+
* the browsers with the default value. Prior to version 3 of this library,
|
|
445
|
+
* the behaviour was to always invoke `focus()` on click; this behaviour
|
|
446
|
+
* can be maintained by passing `true`.
|
|
447
|
+
* @param {boolean} loopAround - An optional flag that,
|
|
448
|
+
* when set to `true`, will loop the tabindex around when the user
|
|
449
|
+
* tries to tab to the first or last elements in the roving tabindex,
|
|
450
|
+
* rather than stopping. The default value is `false` (no looping).
|
|
451
|
+
* Note that this option does not apply if the roving tabindex
|
|
452
|
+
* is being used on a grid.
|
|
453
|
+
*/
|
|
454
|
+
const FocusWithinGroup = props => {
|
|
455
|
+
const {
|
|
456
|
+
children,
|
|
457
|
+
direction,
|
|
458
|
+
focusOnClick,
|
|
459
|
+
loopAround,
|
|
460
|
+
focusType,
|
|
461
|
+
listRole,
|
|
462
|
+
focusOnInit,
|
|
463
|
+
activedescendant,
|
|
464
|
+
maxOptionsLength
|
|
465
|
+
} = props;
|
|
466
|
+
const [state, dispatch] = useReducer(FocusWithinGroupReducer, _objectSpread2(_objectSpread2({}, FOCUS_WITHING_GROUP_INITIAL_STATE), {}, {
|
|
467
|
+
direction,
|
|
468
|
+
focusOnClick,
|
|
469
|
+
loopAround,
|
|
470
|
+
focusType,
|
|
471
|
+
listRole,
|
|
472
|
+
focusOnInit,
|
|
473
|
+
activedescendant,
|
|
474
|
+
maxOptionsLength
|
|
475
|
+
}));
|
|
476
|
+
|
|
477
|
+
// Update the options whenever they change:
|
|
478
|
+
useEffect(() => {
|
|
479
|
+
dispatch({
|
|
480
|
+
type: FocusWithinGroupActionType.OPTIONS_UPDATED,
|
|
481
|
+
payload: {
|
|
482
|
+
direction: direction !== null && direction !== void 0 ? direction : FOCUS_WITHING_GROUP_INITIAL_STATE.direction,
|
|
483
|
+
focusOnClick: focusOnClick !== null && focusOnClick !== void 0 ? focusOnClick : FOCUS_WITHING_GROUP_INITIAL_STATE.focusOnClick,
|
|
484
|
+
loopAround: loopAround !== null && loopAround !== void 0 ? loopAround : FOCUS_WITHING_GROUP_INITIAL_STATE.loopAround,
|
|
485
|
+
focusType: focusType !== null && focusType !== void 0 ? focusType : FOCUS_WITHING_GROUP_INITIAL_STATE.focusType,
|
|
486
|
+
listRole: listRole !== null && listRole !== void 0 ? listRole : FOCUS_WITHING_GROUP_INITIAL_STATE.listRole,
|
|
487
|
+
focusOnInit: focusOnInit !== null && focusOnInit !== void 0 ? focusOnInit : FOCUS_WITHING_GROUP_INITIAL_STATE.focusOnInit,
|
|
488
|
+
activedescendant: activedescendant !== null && activedescendant !== void 0 ? activedescendant : FOCUS_WITHING_GROUP_INITIAL_STATE.activedescendant,
|
|
489
|
+
maxOptionsLength: maxOptionsLength !== null && maxOptionsLength !== void 0 ? maxOptionsLength : FOCUS_WITHING_GROUP_INITIAL_STATE.maxOptionsLength
|
|
490
|
+
}
|
|
491
|
+
});
|
|
492
|
+
}, [direction, focusOnClick, focusOnInit, loopAround, focusType, listRole, activedescendant, maxOptionsLength]);
|
|
493
|
+
const context = useMemo(() => ({
|
|
494
|
+
state,
|
|
495
|
+
dispatch
|
|
496
|
+
}), [state]);
|
|
497
|
+
return /*#__PURE__*/React__default.createElement(FocusWithinGroupContext.Provider, {
|
|
498
|
+
value: context
|
|
499
|
+
}, children);
|
|
500
|
+
};
|
|
501
|
+
|
|
502
|
+
function useFocusOnList() {
|
|
503
|
+
const context = useContext(FocusWithinGroupContext);
|
|
504
|
+
const handleKeyDown = useCallback(event => {
|
|
505
|
+
const key = EventKey[event.key];
|
|
506
|
+
if (!key) {
|
|
507
|
+
return;
|
|
508
|
+
}
|
|
509
|
+
context.dispatch({
|
|
510
|
+
type: FocusWithinGroupActionType.KEY_DOWN_ON_LIST,
|
|
511
|
+
payload: {
|
|
512
|
+
key,
|
|
513
|
+
ctrlKey: event.ctrlKey
|
|
514
|
+
}
|
|
515
|
+
});
|
|
516
|
+
event.preventDefault();
|
|
517
|
+
}, []);
|
|
518
|
+
const handleFocus = useCallback(() => {
|
|
519
|
+
context.dispatch({
|
|
520
|
+
type: FocusWithinGroupActionType.FOCUS_ON_LIST,
|
|
521
|
+
payload: {
|
|
522
|
+
id: context.state.selectedId
|
|
523
|
+
}
|
|
524
|
+
});
|
|
525
|
+
}, [context.state.selectedId]);
|
|
526
|
+
const handleBlur = useCallback(() => {
|
|
527
|
+
context.dispatch({
|
|
528
|
+
type: FocusWithinGroupActionType.BLUR_ON_LIST,
|
|
529
|
+
payload: {}
|
|
530
|
+
});
|
|
531
|
+
}, []);
|
|
532
|
+
return {
|
|
533
|
+
activedescendant: context.state.activedescendant,
|
|
534
|
+
handleKeyDown,
|
|
535
|
+
handleFocus,
|
|
536
|
+
handleBlur
|
|
537
|
+
};
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
export { FocusWithinGroup as F, FocusWithinGroupReducer as a, useFocusOnList as u };
|
|
541
|
+
//# sourceMappingURL=useFocusOnList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFocusOnList.js","sources":["../../src/components/focus-within-group/reducer.ts","../../src/components/focus-within-group/FocusWithinGroup.tsx","../../src/components/focus-within-group/useFocusOnList.ts"],"sourcesContent":["import {\n FocusWithinGroupState,\n FocusWithinGroupAction,\n FocusWithinGroupActionType,\n TabStop,\n RowStartMap,\n EventKey,\n Navigation,\n} from './types';\n\nconst DOCUMENT_POSITION_FOLLOWING = 4;\n\nexport const FocusWithinGroupReducer = (\n state: FocusWithinGroupState,\n action: FocusWithinGroupAction\n): FocusWithinGroupState => {\n switch (action.type) {\n case FocusWithinGroupActionType.REGISTER_TAB_STOP: {\n const newTabStop = action.payload;\n if (!newTabStop.domElementRef.current) {\n return state;\n }\n\n // Iterate backwards through state.tabStops since it is\n // most likely that the tab stop will need to be inserted\n // at the end of that array.\n let indexToInsertAt = -1;\n for (let i = state.tabStops.length - 1; i >= 0; --i) {\n const loopTabStop = state.tabStops[i];\n if (loopTabStop.id === newTabStop.id) {\n // console.warn(false, `'${newTabStop.id}' tab stop already registered`);\n return state;\n }\n // The compareDocumentPosition condition is true\n // if newTabStop follows loopTabStop:\n if (\n indexToInsertAt === -1 &&\n loopTabStop.domElementRef.current &&\n !!(\n loopTabStop.domElementRef.current.compareDocumentPosition(newTabStop.domElementRef.current) &\n DOCUMENT_POSITION_FOLLOWING\n )\n ) {\n indexToInsertAt = i + 1;\n break;\n }\n }\n\n // The indexToInsertAt is -1 when newTabStop should be inserted\n // at the start of tabStops (the compareDocumentPosition condition\n // always returns false in that case).\n if (indexToInsertAt === -1) {\n indexToInsertAt = 0;\n }\n\n const newTabStops = state.tabStops.slice();\n newTabStops.splice(indexToInsertAt, 0, newTabStop);\n\n return {\n ...state,\n selectedId: state.focusOnInit ? getUpdatedSelectedId(newTabStops, state.selectedId) : null,\n tabStops: newTabStops,\n rowStartMap: null,\n };\n }\n case FocusWithinGroupActionType.UNREGISTER_TAB_STOP: {\n const id = action.payload.id;\n const newTabStops = state.tabStops.filter((tabStop) => tabStop.id !== id);\n if (newTabStops.length === state.tabStops.length) {\n // console.warn(false, `'${id}' tab stop already unregistered`);\n return state;\n }\n return {\n ...state,\n selectedId: state.focusOnInit ? getUpdatedSelectedId(newTabStops, state.selectedId) : null,\n tabStops: newTabStops,\n rowStartMap: null,\n };\n }\n case FocusWithinGroupActionType.TAB_STOP_UPDATED: {\n const { id, rowIndex, isDisabled, value } = action.payload;\n const index = state.tabStops.findIndex((tabStop) => tabStop.id === id);\n if (index === -1) {\n console.warn(false, `'${id}' tab stop not registered`);\n return state;\n }\n\n const tabStop = state.tabStops[index];\n if (tabStop.isDisabled === isDisabled && tabStop.rowIndex === rowIndex && tabStop.value === value) {\n // Nothing to do so short-circuit.\n return state;\n }\n\n const newTabStop = { ...tabStop, rowIndex, isDisabled, value };\n const newTabStops = state.tabStops.slice();\n newTabStops.splice(index, 1, newTabStop);\n\n return {\n ...state,\n selectedId: state.focusOnInit ? getUpdatedSelectedId(newTabStops, state.selectedId) : null,\n tabStops: newTabStops,\n rowStartMap: null,\n };\n }\n case FocusWithinGroupActionType.KEY_DOWN_ON_ITEM: {\n const { id, key, ctrlKey } = action.payload;\n const index = state.tabStops.findIndex((tabStop) => tabStop.id === id);\n if (index === -1) {\n console.warn(false, `'${id}' tab stop not registered`);\n return state;\n }\n return moveSelectionFromKey(state, index, key, ctrlKey);\n }\n case FocusWithinGroupActionType.CLICK_ON_ITEM: {\n const id = action.payload.id;\n const index = state.tabStops.findIndex((tabStop) => tabStop.id === id);\n if (index === -1) {\n console.warn(false, `'${id}' tab stop not registered`);\n return state;\n }\n const currentTabStop = state.tabStops[index];\n return currentTabStop.isDisabled ? state : selectTabStop(state, currentTabStop, undefined, state.focusOnClick);\n }\n case FocusWithinGroupActionType.FOCUS_ON_LIST: {\n const id = action.payload.id ?? state.tabStops[0]?.id;\n const index = state.tabStops.findIndex((tabStop) => tabStop.id === id);\n if (index === -1) {\n return state;\n }\n const currentTabStop = state.tabStops[index];\n return currentTabStop.isDisabled\n ? { ...state, delayedAction: undefined, ...action.payload }\n : selectTabStop(\n { ...state, delayedAction: undefined, ...action.payload },\n currentTabStop,\n undefined,\n state.focusOnClick\n );\n }\n case FocusWithinGroupActionType.BLUR_ON_LIST: {\n return { ...state, activedescendant: ['', ''] };\n }\n case FocusWithinGroupActionType.KEY_DOWN_ON_LIST: {\n const { key, ctrlKey } = action.payload;\n let index = state.tabStops.findIndex((tabStop) => tabStop.id === state.selectedId);\n if (index === -1) {\n if (state.focusOnInit) {\n console.warn(false, `'${state.selectedId}' tab stop not registered`);\n return { ...state, delayedAction: undefined };\n } else {\n index = 0;\n }\n }\n return moveSelectionFromKey({ ...state, delayedAction: undefined }, index, key, ctrlKey);\n }\n case FocusWithinGroupActionType.OPTIONS_UPDATED:\n return { ...state, ...action.payload };\n case FocusWithinGroupActionType.FILTER_LIST:\n return { ...state, selectedId: null, ...action.payload };\n case FocusWithinGroupActionType.DELAY_ACTION:\n return { ...state, delayedAction: action.payload };\n /* istanbul ignore next */\n default:\n return state;\n }\n};\n\nfunction findIndexOfVeryFirstActiveTabStop(tabStops: FocusWithinGroupState['tabStops']): number {\n return tabStops.findIndex((tabStop) => !tabStop.isDisabled);\n}\n\nfunction findIndexOfVeryLastActiveTabStop(tabStops: FocusWithinGroupState['tabStops']): number {\n for (let i = tabStops.length - 1; i >= 0; --i) {\n const tabStop = tabStops[i];\n if (!tabStop.isDisabled) {\n return i;\n }\n }\n return -1;\n}\n\n// Determine the updated value for selectedId:\nfunction getUpdatedSelectedId(\n tabStops: FocusWithinGroupState['tabStops'],\n currentSelectedId: FocusWithinGroupState['selectedId']\n): FocusWithinGroupState['selectedId'] {\n if (currentSelectedId === null) {\n // There is not currently selected tab stop, so find\n // the first tab stop that is not isDisabled and return\n // its id, otherwise return null.\n const index = tabStops.findIndex((tabStop) => !tabStop.isDisabled);\n return index === -1 ? null : tabStops[index].id;\n }\n\n let index = tabStops.findIndex((tabStop) => tabStop.id === currentSelectedId);\n if (index !== -1 && !tabStops[index].isDisabled) {\n // The current selected id is still valid, so return it.\n return currentSelectedId;\n }\n\n // Finds the first tab stop that is not isDisabled and return\n // its id, otherwise return null.\n index = tabStops.findIndex((tabStop) => !tabStop.isDisabled);\n return index === -1 ? null : tabStops[index].id;\n}\n\n// Translates the user key down event info into a navigation instruction.\nfunction getNavigationValue(\n key: EventKey,\n ctrlKey: boolean,\n isGrid: boolean,\n direction: string,\n loopAround: boolean,\n isFirst: boolean,\n isLast: boolean\n): Navigation | null {\n switch (key) {\n case EventKey.ArrowLeft:\n if (isGrid || direction === 'horizontal' || direction === 'both') {\n return !isGrid && loopAround && isFirst ? Navigation.VERY_LAST : Navigation.PREVIOUS;\n }\n return null;\n case EventKey.ArrowRight:\n if (isGrid || direction === 'horizontal' || direction === 'both') {\n return !isGrid && loopAround && isLast ? Navigation.VERY_FIRST : Navigation.NEXT;\n }\n return null;\n case EventKey.ArrowUp:\n if (isGrid) {\n return Navigation.PREVIOUS_ROW;\n } else if (direction === 'vertical' || direction === 'both') {\n return loopAround && isFirst ? Navigation.VERY_LAST : Navigation.PREVIOUS;\n }\n return null;\n case EventKey.ArrowDown:\n if (isGrid) {\n return Navigation.NEXT_ROW;\n } else if (direction === 'vertical' || direction === 'both') {\n return loopAround && isLast ? Navigation.VERY_FIRST : Navigation.NEXT;\n }\n return null;\n case EventKey.Home:\n return !isGrid || ctrlKey ? Navigation.VERY_FIRST : Navigation.FIRST_IN_ROW;\n case EventKey.End:\n return !isGrid || ctrlKey ? Navigation.VERY_LAST : Navigation.LAST_IN_ROW;\n /* istanbul ignore next */\n default:\n return null;\n }\n}\n\n// Creates the new state for a tab stop when it becomes the selected one.\nfunction selectTabStop(\n state: FocusWithinGroupState,\n tabStop: TabStop,\n rowStartMap?: RowStartMap,\n allowFocusing = true\n) {\n return {\n ...state,\n allowFocusing,\n selectedId: tabStop.id,\n rowStartMap: rowStartMap || state.rowStartMap,\n activedescendant:\n state.focusType === 'virtual-focus' ? ([tabStop.id, tabStop.value] as [string, string]) : undefined,\n };\n}\n\n// Creates the row start index lookup map\n// for the currently registered tab stops.\nfunction createRowStartMap(state: FocusWithinGroupState) {\n const map: RowStartMap = new Map();\n for (let i = 0; i < state.tabStops.length; ++i) {\n const { rowIndex } = state.tabStops[i];\n if (rowIndex !== null && !map.has(rowIndex)) {\n map.set(rowIndex, i);\n }\n }\n return map;\n}\n\nfunction moveSelectionFromKey(state: FocusWithinGroupState, index: number, key: EventKey, ctrlKey: boolean) {\n const currentTabStop = state.tabStops[index];\n if (currentTabStop.isDisabled) {\n return state;\n }\n const isGrid = currentTabStop.rowIndex !== null;\n const isFirst = index === findIndexOfVeryFirstActiveTabStop(state.tabStops);\n const isLast = index === findIndexOfVeryLastActiveTabStop(state.tabStops);\n const navigation = getNavigationValue(key, ctrlKey, isGrid, state.direction, state.loopAround, isFirst, isLast);\n if (!navigation) {\n return state;\n }\n\n switch (navigation) {\n case Navigation.NEXT:\n {\n for (let i = index + 1; i < state.tabStops.length; ++i) {\n const tabStop = state.tabStops[i];\n if (isGrid && tabStop.rowIndex !== currentTabStop.rowIndex) {\n break;\n }\n if (!tabStop.isDisabled) {\n return selectTabStop(state, tabStop);\n }\n }\n }\n break;\n case Navigation.PREVIOUS:\n {\n for (let i = index - 1; i >= 0; --i) {\n const tabStop = state.tabStops[i];\n if (isGrid && tabStop.rowIndex !== currentTabStop.rowIndex) {\n break;\n }\n if (!tabStop.isDisabled) {\n return selectTabStop(state, tabStop);\n }\n }\n }\n break;\n case Navigation.VERY_FIRST:\n {\n const index = findIndexOfVeryFirstActiveTabStop(state.tabStops);\n if (index > -1) {\n return selectTabStop(state, state.tabStops[index]);\n }\n }\n break;\n case Navigation.VERY_LAST:\n {\n const index = findIndexOfVeryLastActiveTabStop(state.tabStops);\n if (index > -1) {\n return selectTabStop(state, state.tabStops[index]);\n }\n }\n break;\n case Navigation.PREVIOUS_ROW: {\n if (currentTabStop.rowIndex === null || currentTabStop.rowIndex === 0) {\n return state;\n }\n const rowStartMap = state.rowStartMap || createRowStartMap(state);\n const rowStartIndex = rowStartMap.get(currentTabStop.rowIndex);\n if (rowStartIndex === undefined) {\n return state;\n }\n const columnOffset = index - rowStartIndex;\n for (let i = currentTabStop.rowIndex - 1; i >= 0; --i) {\n const rowStartIndex = rowStartMap.get(i);\n if (rowStartIndex === undefined) {\n return state;\n }\n const rowTabStop = state.tabStops[rowStartIndex + columnOffset];\n if (rowTabStop && !rowTabStop.isDisabled) {\n return selectTabStop(state, rowTabStop, rowStartMap);\n }\n }\n return { ...state, allowFocusing: true, rowStartMap };\n }\n case Navigation.NEXT_ROW: {\n const maxRowIndex = state.tabStops[state.tabStops.length - 1].rowIndex;\n if (currentTabStop.rowIndex === null || maxRowIndex === null || currentTabStop.rowIndex === maxRowIndex) {\n return state;\n }\n const rowStartMap = state.rowStartMap || createRowStartMap(state);\n const rowStartIndex = rowStartMap.get(currentTabStop.rowIndex);\n if (rowStartIndex === undefined) {\n return state;\n }\n const columnOffset = index - rowStartIndex;\n for (let i = currentTabStop.rowIndex + 1; i <= maxRowIndex; ++i) {\n const rowStartIndex = rowStartMap.get(i);\n if (rowStartIndex === undefined) {\n return state;\n }\n const rowTabStop = state.tabStops[rowStartIndex + columnOffset];\n if (rowTabStop && !rowTabStop.isDisabled) {\n return selectTabStop(state, rowTabStop, rowStartMap);\n }\n }\n return { ...state, allowFocusing: true, rowStartMap };\n }\n case Navigation.FIRST_IN_ROW:\n {\n if (currentTabStop.rowIndex === null) {\n return state;\n }\n const rowStartMap = state.rowStartMap || createRowStartMap(state);\n const rowStartIndex = rowStartMap.get(currentTabStop.rowIndex);\n if (rowStartIndex === undefined) {\n return state;\n }\n for (let i = rowStartIndex; i < state.tabStops.length; ++i) {\n const tabStop = state.tabStops[i];\n if (tabStop.rowIndex !== currentTabStop.rowIndex) {\n break;\n } else if (!tabStop.isDisabled) {\n return selectTabStop(state, state.tabStops[i], rowStartMap);\n }\n }\n }\n break;\n case Navigation.LAST_IN_ROW:\n {\n if (currentTabStop.rowIndex === null) {\n return state;\n }\n const rowStartMap = state.rowStartMap || createRowStartMap(state);\n const rowEndIndex = rowStartMap.has(currentTabStop.rowIndex + 1)\n ? (rowStartMap.get(currentTabStop.rowIndex + 1) || 0) - 1\n : state.tabStops.length - 1;\n for (let i = rowEndIndex; i >= 0; --i) {\n const tabStop = state.tabStops[i];\n if (tabStop.rowIndex !== currentTabStop.rowIndex) {\n break;\n } else if (!tabStop.isDisabled) {\n return selectTabStop(state, state.tabStops[i], rowStartMap);\n }\n }\n }\n break;\n }\n return state;\n}\n","import React, { useEffect, useMemo, useReducer } from 'react';\nimport {\n FocusWithinGroupActionType,\n FocusWithinGroupContextProps,\n FocusWithinGroupProps,\n FocusWithinGroupState,\n} from './types';\nimport { FOCUS_WITHING_GROUP_INITIAL_STATE, FocusWithinGroupContext } from './context';\nimport { FocusWithinGroupReducer } from './reducer';\n\n/**\n * The FocusWithinGroup component.\n *\n * @param {ReactNode} children - The child content, which will\n * include the DOM elements to rove between using the tab key.\n * @param {KeyDirection} direction - An optional direction value\n * that only applies when the roving tabindex is not being\n * used within a grid. This value specifies the arrow key behaviour.\n * The default value is 'horizontal'.\n * When set to 'horizontal' then only the ArrowLeft and ArrowRight\n * keys move to the previous and next tab stop respectively.\n * When set to 'vertical' then only the ArrowUp and ArrowDown keys\n * move to the previous and next tab stop respectively. When set\n * to 'both' then both the ArrowLeft and ArrowUp keys can be used\n * to move to the previous tab stop, and both the ArrowRight\n * and ArrowDown keys can be used to move to the next tab stop.\n * If you do not pass an explicit value then the 'horizontal'\n * behaviour applies.\n * @param {boolean} focusOnClick - An optional flag for indicating\n * if `focus()` should invoked on an item in the roving tabindex\n * when it is clicked. The default value for this flag is `false`,\n * meaning that `focus()` will not be invoked on click.\n * Browsers are\n * [inconsistent in their behaviour](https://zellwk.com/blog/inconsistent-button-behavior/)\n * when a button is clicked so you will see some variation between\n * the browsers with the default value. Prior to version 3 of this library,\n * the behaviour was to always invoke `focus()` on click; this behaviour\n * can be maintained by passing `true`.\n * @param {boolean} loopAround - An optional flag that,\n * when set to `true`, will loop the tabindex around when the user\n * tries to tab to the first or last elements in the roving tabindex,\n * rather than stopping. The default value is `false` (no looping).\n * Note that this option does not apply if the roving tabindex\n * is being used on a grid.\n */\nexport const FocusWithinGroup: React.FC<FocusWithinGroupProps> = (props) => {\n const {\n children,\n direction,\n focusOnClick,\n loopAround,\n focusType,\n listRole,\n focusOnInit,\n activedescendant,\n maxOptionsLength,\n } = props;\n\n const [state, dispatch] = useReducer(FocusWithinGroupReducer, {\n ...FOCUS_WITHING_GROUP_INITIAL_STATE,\n direction,\n focusOnClick,\n loopAround,\n focusType,\n listRole,\n focusOnInit,\n activedescendant,\n maxOptionsLength,\n } as FocusWithinGroupState);\n\n // Update the options whenever they change:\n useEffect(() => {\n dispatch({\n type: FocusWithinGroupActionType.OPTIONS_UPDATED,\n payload: {\n direction: direction ?? FOCUS_WITHING_GROUP_INITIAL_STATE.direction,\n focusOnClick: focusOnClick ?? FOCUS_WITHING_GROUP_INITIAL_STATE.focusOnClick,\n loopAround: loopAround ?? FOCUS_WITHING_GROUP_INITIAL_STATE.loopAround,\n focusType: focusType ?? FOCUS_WITHING_GROUP_INITIAL_STATE.focusType,\n listRole: listRole ?? FOCUS_WITHING_GROUP_INITIAL_STATE.listRole,\n focusOnInit: focusOnInit ?? FOCUS_WITHING_GROUP_INITIAL_STATE.focusOnInit,\n activedescendant: activedescendant ?? FOCUS_WITHING_GROUP_INITIAL_STATE.activedescendant,\n maxOptionsLength: maxOptionsLength ?? FOCUS_WITHING_GROUP_INITIAL_STATE.maxOptionsLength,\n },\n });\n }, [direction, focusOnClick, focusOnInit, loopAround, focusType, listRole, activedescendant, maxOptionsLength]);\n\n const context = useMemo<FocusWithinGroupContextProps>(\n () => ({\n state,\n dispatch,\n }),\n [state]\n );\n\n return <FocusWithinGroupContext.Provider value={context}>{children}</FocusWithinGroupContext.Provider>;\n};\n","import { useCallback, useContext, KeyboardEvent } from 'react';\nimport { FocusWithinGroupContext } from './context';\nimport { FocusWithinGroupActionType, EventKey, UseFocusGroupProps } from './types';\n\nexport function useFocusOnList(): UseFocusGroupProps {\n const context = useContext(FocusWithinGroupContext);\n\n const handleKeyDown = useCallback((event: KeyboardEvent) => {\n const key = EventKey[event.key as EventKey];\n if (!key) {\n return;\n }\n context.dispatch({\n type: FocusWithinGroupActionType.KEY_DOWN_ON_LIST,\n payload: { key, ctrlKey: event.ctrlKey },\n });\n event.preventDefault();\n }, []);\n\n const handleFocus = useCallback(() => {\n context.dispatch({\n type: FocusWithinGroupActionType.FOCUS_ON_LIST,\n payload: {\n id: context.state.selectedId!,\n },\n });\n }, [context.state.selectedId]);\n\n const handleBlur = useCallback(() => {\n context.dispatch({\n type: FocusWithinGroupActionType.BLUR_ON_LIST,\n payload: {},\n });\n }, []);\n\n return {\n activedescendant: context.state.activedescendant,\n handleKeyDown,\n handleFocus,\n handleBlur,\n };\n}\n"],"names":["DOCUMENT_POSITION_FOLLOWING","FocusWithinGroupReducer","state","action","type","FocusWithinGroupActionType","REGISTER_TAB_STOP","newTabStop","payload","domElementRef","current","indexToInsertAt","i","tabStops","length","loopTabStop","id","compareDocumentPosition","newTabStops","slice","splice","_objectSpread","selectedId","focusOnInit","getUpdatedSelectedId","rowStartMap","UNREGISTER_TAB_STOP","filter","tabStop","TAB_STOP_UPDATED","rowIndex","isDisabled","value","index","findIndex","console","warn","KEY_DOWN_ON_ITEM","key","ctrlKey","moveSelectionFromKey","CLICK_ON_ITEM","currentTabStop","selectTabStop","undefined","focusOnClick","FOCUS_ON_LIST","_action$payload$id","_state$tabStops$","delayedAction","BLUR_ON_LIST","activedescendant","KEY_DOWN_ON_LIST","OPTIONS_UPDATED","FILTER_LIST","DELAY_ACTION","findIndexOfVeryFirstActiveTabStop","findIndexOfVeryLastActiveTabStop","currentSelectedId","getNavigationValue","isGrid","direction","loopAround","isFirst","isLast","EventKey","ArrowLeft","Navigation","VERY_LAST","PREVIOUS","ArrowRight","VERY_FIRST","NEXT","ArrowUp","PREVIOUS_ROW","ArrowDown","NEXT_ROW","Home","FIRST_IN_ROW","End","LAST_IN_ROW","allowFocusing","arguments","focusType","createRowStartMap","map","Map","has","set","navigation","rowStartIndex","get","columnOffset","rowTabStop","maxRowIndex","rowEndIndex","FocusWithinGroup","props","children","listRole","maxOptionsLength","dispatch","useReducer","FOCUS_WITHING_GROUP_INITIAL_STATE","useEffect","context","useMemo","React","createElement","FocusWithinGroupContext","Provider","useFocusOnList","useContext","handleKeyDown","useCallback","event","preventDefault","handleFocus","handleBlur"],"mappings":"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"}
|