@fluentui/react-combobox 9.0.0-beta.19 → 9.0.0-beta.21
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.json +117 -1
- package/CHANGELOG.md +32 -2
- package/lib/components/Combobox/Combobox.js +0 -1
- package/lib/components/Combobox/Combobox.js.map +1 -1
- package/lib/components/Combobox/renderCombobox.js +10 -6
- package/lib/components/Combobox/renderCombobox.js.map +1 -1
- package/lib/components/Combobox/useCombobox.js +41 -53
- package/lib/components/Combobox/useCombobox.js.map +1 -1
- package/lib/components/Combobox/useComboboxStyles.js +209 -217
- package/lib/components/Combobox/useComboboxStyles.js.map +1 -1
- package/lib/components/ComboboxField/ComboboxField.js.map +1 -1
- package/lib/components/Dropdown/Dropdown.js +0 -1
- package/lib/components/Dropdown/Dropdown.js.map +1 -1
- package/lib/components/Dropdown/renderDropdown.js +10 -6
- package/lib/components/Dropdown/renderDropdown.js.map +1 -1
- package/lib/components/Dropdown/useDropdown.js +20 -32
- package/lib/components/Dropdown/useDropdown.js.map +1 -1
- package/lib/components/Dropdown/useDropdownStyles.js +199 -206
- package/lib/components/Dropdown/useDropdownStyles.js.map +1 -1
- package/lib/components/Listbox/Listbox.js +0 -1
- package/lib/components/Listbox/Listbox.js.map +1 -1
- package/lib/components/Listbox/renderListbox.js +2 -2
- package/lib/components/Listbox/renderListbox.js.map +1 -1
- package/lib/components/Listbox/useListbox.js +6 -13
- package/lib/components/Listbox/useListbox.js.map +1 -1
- package/lib/components/Listbox/useListboxStyles.js +18 -21
- package/lib/components/Listbox/useListboxStyles.js.map +1 -1
- package/lib/components/Option/Option.js +0 -1
- package/lib/components/Option/Option.js.map +1 -1
- package/lib/components/Option/renderOption.js +4 -3
- package/lib/components/Option/renderOption.js.map +1 -1
- package/lib/components/Option/useOption.js +20 -32
- package/lib/components/Option/useOption.js.map +1 -1
- package/lib/components/Option/useOptionStyles.js +74 -79
- package/lib/components/Option/useOptionStyles.js.map +1 -1
- package/lib/components/OptionGroup/OptionGroup.js +0 -1
- package/lib/components/OptionGroup/OptionGroup.js.map +1 -1
- package/lib/components/OptionGroup/renderOptionGroup.js +4 -3
- package/lib/components/OptionGroup/renderOptionGroup.js.map +1 -1
- package/lib/components/OptionGroup/useOptionGroup.js +0 -1
- package/lib/components/OptionGroup/useOptionGroup.js.map +1 -1
- package/lib/components/OptionGroup/useOptionGroupStyles.js +29 -34
- package/lib/components/OptionGroup/useOptionGroupStyles.js.map +1 -1
- package/lib/contexts/ComboboxContext.js +8 -11
- package/lib/contexts/ComboboxContext.js.map +1 -1
- package/lib/contexts/ListboxContext.js +6 -9
- package/lib/contexts/ListboxContext.js.map +1 -1
- package/lib/contexts/useComboboxContextValues.js.map +1 -1
- package/lib/contexts/useListboxContextValues.js +2 -2
- package/lib/contexts/useListboxContextValues.js.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/utils/dropdownKeyActions.js +12 -33
- package/lib/utils/dropdownKeyActions.js.map +1 -1
- package/lib/utils/internalTokens.js.map +1 -1
- package/lib/utils/useComboboxBaseState.js +23 -27
- package/lib/utils/useComboboxBaseState.js.map +1 -1
- package/lib/utils/useComboboxPopup.js +6 -4
- package/lib/utils/useComboboxPopup.js.map +1 -1
- package/lib/utils/useOptionCollection.js +10 -20
- package/lib/utils/useOptionCollection.js.map +1 -1
- package/lib/utils/useScrollOptionsIntoView.js +2 -5
- package/lib/utils/useScrollOptionsIntoView.js.map +1 -1
- package/lib/utils/useSelection.js +7 -12
- package/lib/utils/useSelection.js.map +1 -1
- package/lib/utils/useTriggerListboxSlots.js +31 -39
- package/lib/utils/useTriggerListboxSlots.js.map +1 -1
- package/lib-commonjs/Combobox.js +0 -2
- package/lib-commonjs/Combobox.js.map +1 -1
- package/lib-commonjs/ComboboxField.js +0 -2
- package/lib-commonjs/ComboboxField.js.map +1 -1
- package/lib-commonjs/Dropdown.js +0 -2
- package/lib-commonjs/Dropdown.js.map +1 -1
- package/lib-commonjs/Listbox.js +0 -2
- package/lib-commonjs/Listbox.js.map +1 -1
- package/lib-commonjs/Option.js +0 -2
- package/lib-commonjs/Option.js.map +1 -1
- package/lib-commonjs/OptionGroup.js +0 -2
- package/lib-commonjs/OptionGroup.js.map +1 -1
- package/lib-commonjs/components/Combobox/Combobox.js +0 -7
- package/lib-commonjs/components/Combobox/Combobox.js.map +1 -1
- package/lib-commonjs/components/Combobox/Combobox.types.js.map +1 -1
- package/lib-commonjs/components/Combobox/index.js +0 -6
- package/lib-commonjs/components/Combobox/index.js.map +1 -1
- package/lib-commonjs/components/Combobox/renderCombobox.js +10 -12
- package/lib-commonjs/components/Combobox/renderCombobox.js.map +1 -1
- package/lib-commonjs/components/Combobox/useCombobox.js +41 -63
- package/lib-commonjs/components/Combobox/useCombobox.js.map +1 -1
- package/lib-commonjs/components/Combobox/useComboboxStyles.js +209 -222
- package/lib-commonjs/components/Combobox/useComboboxStyles.js.map +1 -1
- package/lib-commonjs/components/ComboboxField/ComboboxField.js +0 -4
- package/lib-commonjs/components/ComboboxField/ComboboxField.js.map +1 -1
- package/lib-commonjs/components/ComboboxField/index.js +0 -2
- package/lib-commonjs/components/ComboboxField/index.js.map +1 -1
- package/lib-commonjs/components/Dropdown/Dropdown.js +0 -7
- package/lib-commonjs/components/Dropdown/Dropdown.js.map +1 -1
- package/lib-commonjs/components/Dropdown/Dropdown.types.js.map +1 -1
- package/lib-commonjs/components/Dropdown/index.js +0 -6
- package/lib-commonjs/components/Dropdown/index.js.map +1 -1
- package/lib-commonjs/components/Dropdown/renderDropdown.js +10 -12
- package/lib-commonjs/components/Dropdown/renderDropdown.js.map +1 -1
- package/lib-commonjs/components/Dropdown/useDropdown.js +20 -43
- package/lib-commonjs/components/Dropdown/useDropdown.js.map +1 -1
- package/lib-commonjs/components/Dropdown/useDropdownStyles.js +199 -211
- package/lib-commonjs/components/Dropdown/useDropdownStyles.js.map +1 -1
- package/lib-commonjs/components/Listbox/Listbox.js +0 -7
- package/lib-commonjs/components/Listbox/Listbox.js.map +1 -1
- package/lib-commonjs/components/Listbox/Listbox.types.js.map +1 -1
- package/lib-commonjs/components/Listbox/index.js +0 -6
- package/lib-commonjs/components/Listbox/index.js.map +1 -1
- package/lib-commonjs/components/Listbox/renderListbox.js +2 -7
- package/lib-commonjs/components/Listbox/renderListbox.js.map +1 -1
- package/lib-commonjs/components/Listbox/useListbox.js +6 -23
- package/lib-commonjs/components/Listbox/useListbox.js.map +1 -1
- package/lib-commonjs/components/Listbox/useListboxStyles.js +18 -25
- package/lib-commonjs/components/Listbox/useListboxStyles.js.map +1 -1
- package/lib-commonjs/components/Option/Option.js +0 -6
- package/lib-commonjs/components/Option/Option.js.map +1 -1
- package/lib-commonjs/components/Option/Option.types.js.map +1 -1
- package/lib-commonjs/components/Option/index.js +0 -6
- package/lib-commonjs/components/Option/index.js.map +1 -1
- package/lib-commonjs/components/Option/renderOption.js +4 -7
- package/lib-commonjs/components/Option/renderOption.js.map +1 -1
- package/lib-commonjs/components/Option/useOption.js +20 -39
- package/lib-commonjs/components/Option/useOption.js.map +1 -1
- package/lib-commonjs/components/Option/useOptionStyles.js +74 -83
- package/lib-commonjs/components/Option/useOptionStyles.js.map +1 -1
- package/lib-commonjs/components/OptionGroup/OptionGroup.js +0 -6
- package/lib-commonjs/components/OptionGroup/OptionGroup.js.map +1 -1
- package/lib-commonjs/components/OptionGroup/OptionGroup.types.js.map +1 -1
- package/lib-commonjs/components/OptionGroup/index.js +0 -6
- package/lib-commonjs/components/OptionGroup/index.js.map +1 -1
- package/lib-commonjs/components/OptionGroup/renderOptionGroup.js +4 -7
- package/lib-commonjs/components/OptionGroup/renderOptionGroup.js.map +1 -1
- package/lib-commonjs/components/OptionGroup/useOptionGroup.js +0 -4
- package/lib-commonjs/components/OptionGroup/useOptionGroup.js.map +1 -1
- package/lib-commonjs/components/OptionGroup/useOptionGroupStyles.js +29 -38
- package/lib-commonjs/components/OptionGroup/useOptionGroupStyles.js.map +1 -1
- package/lib-commonjs/contexts/ComboboxContext.js +8 -13
- package/lib-commonjs/contexts/ComboboxContext.js.map +1 -1
- package/lib-commonjs/contexts/ListboxContext.js +6 -11
- package/lib-commonjs/contexts/ListboxContext.js.map +1 -1
- package/lib-commonjs/contexts/useComboboxContextValues.js +0 -2
- package/lib-commonjs/contexts/useComboboxContextValues.js.map +1 -1
- package/lib-commonjs/contexts/useListboxContextValues.js +2 -6
- package/lib-commonjs/contexts/useListboxContextValues.js.map +1 -1
- package/lib-commonjs/index.js +0 -20
- package/lib-commonjs/index.js.map +1 -1
- package/lib-commonjs/utils/ComboboxBase.types.js.map +1 -1
- package/lib-commonjs/utils/OptionCollection.types.js.map +1 -1
- package/lib-commonjs/utils/Selection.types.js.map +1 -1
- package/lib-commonjs/utils/dropdownKeyActions.js +12 -37
- package/lib-commonjs/utils/dropdownKeyActions.js.map +1 -1
- package/lib-commonjs/utils/internalTokens.js.map +1 -1
- package/lib-commonjs/utils/useComboboxBaseState.js +23 -33
- package/lib-commonjs/utils/useComboboxBaseState.js.map +1 -1
- package/lib-commonjs/utils/useComboboxPopup.js +6 -8
- package/lib-commonjs/utils/useComboboxPopup.js.map +1 -1
- package/lib-commonjs/utils/useOptionCollection.js +10 -23
- package/lib-commonjs/utils/useOptionCollection.js.map +1 -1
- package/lib-commonjs/utils/useScrollOptionsIntoView.js +2 -9
- package/lib-commonjs/utils/useScrollOptionsIntoView.js.map +1 -1
- package/lib-commonjs/utils/useSelection.js +7 -15
- package/lib-commonjs/utils/useSelection.js.map +1 -1
- package/lib-commonjs/utils/useTriggerListboxSlots.js +30 -43
- package/lib-commonjs/utils/useTriggerListboxSlots.js.map +1 -1
- package/package.json +9 -9
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { mergeCallbacks, useMergedRefs } from '@fluentui/react-utilities';
|
|
2
|
+
import { mergeCallbacks, useEventCallback, useMergedRefs } from '@fluentui/react-utilities';
|
|
3
3
|
import { getDropdownActionFromKey, getIndexFromAction } from '../utils/dropdownKeyActions';
|
|
4
4
|
/*
|
|
5
5
|
* useTriggerListboxSlots returns a tuple of trigger/listbox shorthand,
|
|
6
6
|
* with the semantics and event handlers needed for the Combobox and Dropdown components.
|
|
7
7
|
* The element type of the ref should always match the element type used in the trigger shorthand.
|
|
8
8
|
*/
|
|
9
|
-
|
|
10
9
|
export function useTriggerListboxSlots(props, state, ref, triggerSlot, listboxSlot) {
|
|
11
10
|
const {
|
|
12
11
|
multiselect
|
|
@@ -23,16 +22,16 @@ export function useTriggerListboxSlots(props, state, ref, triggerSlot, listboxSl
|
|
|
23
22
|
setFocusVisible,
|
|
24
23
|
setHasFocus,
|
|
25
24
|
setOpen
|
|
26
|
-
} = state;
|
|
27
|
-
|
|
28
|
-
const triggerRef = React.useRef(null);
|
|
29
|
-
|
|
25
|
+
} = state;
|
|
26
|
+
// handle trigger focus/blur
|
|
27
|
+
const triggerRef = React.useRef(null);
|
|
28
|
+
// resolve listbox shorthand props
|
|
30
29
|
const listbox = listboxSlot && {
|
|
31
30
|
multiselect,
|
|
32
31
|
tabIndex: undefined,
|
|
33
32
|
...listboxSlot
|
|
34
|
-
};
|
|
35
|
-
|
|
33
|
+
};
|
|
34
|
+
// resolve trigger shorthand props
|
|
36
35
|
const trigger = {
|
|
37
36
|
'aria-expanded': open,
|
|
38
37
|
'aria-activedescendant': open ? activeOption === null || activeOption === void 0 ? void 0 : activeOption.id : undefined,
|
|
@@ -42,33 +41,33 @@ export function useTriggerListboxSlots(props, state, ref, triggerSlot, listboxSl
|
|
|
42
41
|
// since the `children` prop has mutually incompatible types between input/button
|
|
43
42
|
// functionally both ref and triggerRef will always be the same element type
|
|
44
43
|
ref: useMergedRefs(ref, triggerSlot === null || triggerSlot === void 0 ? void 0 : triggerSlot.ref, triggerRef)
|
|
45
|
-
};
|
|
46
|
-
|
|
44
|
+
};
|
|
45
|
+
/*
|
|
46
|
+
* Handle focus when clicking the listbox popup:
|
|
47
|
+
* 1. Move focus back to the button/input when the listbox is clicked (otherwise it goes to body)
|
|
48
|
+
* 2. Do not close the listbox on button/input blur when clicking into the listbox
|
|
49
|
+
*/
|
|
50
|
+
const listboxOnClick = useEventCallback(mergeCallbacks(event => {
|
|
51
|
+
var _a;
|
|
52
|
+
(_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
53
|
+
}, listbox === null || listbox === void 0 ? void 0 : listbox.onClick));
|
|
54
|
+
const listboxOnMouseOver = useEventCallback(mergeCallbacks(event => {
|
|
55
|
+
setFocusVisible(false);
|
|
56
|
+
}, listbox === null || listbox === void 0 ? void 0 : listbox.onMouseOver));
|
|
57
|
+
const listboxOnMouseDown = useEventCallback(mergeCallbacks(event => {
|
|
58
|
+
ignoreNextBlur.current = true;
|
|
59
|
+
}, listbox === null || listbox === void 0 ? void 0 : listbox.onMouseDown));
|
|
60
|
+
// listbox is nullable, only add event handlers if it exists
|
|
47
61
|
if (listbox) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
listbox.onClick = mergeCallbacks(event => {
|
|
54
|
-
var _a;
|
|
55
|
-
|
|
56
|
-
(_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
57
|
-
}, listbox.onClick);
|
|
58
|
-
listbox.onMouseOver = mergeCallbacks(event => {
|
|
59
|
-
setFocusVisible(false);
|
|
60
|
-
}, listbox.onMouseOver);
|
|
61
|
-
listbox.onMouseDown = mergeCallbacks(event => {
|
|
62
|
-
ignoreNextBlur.current = true;
|
|
63
|
-
}, listbox.onMouseDown);
|
|
64
|
-
} // the trigger should open/close the popup on click or blur
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
listbox.onClick = listboxOnClick;
|
|
63
|
+
listbox.onMouseOver = listboxOnMouseOver;
|
|
64
|
+
listbox.onMouseDown = listboxOnMouseDown;
|
|
65
|
+
}
|
|
66
|
+
// the trigger should open/close the popup on click or blur
|
|
67
67
|
trigger.onBlur = mergeCallbacks(event => {
|
|
68
68
|
if (!ignoreNextBlur.current) {
|
|
69
69
|
setOpen(event, false);
|
|
70
70
|
}
|
|
71
|
-
|
|
72
71
|
ignoreNextBlur.current = false;
|
|
73
72
|
setHasFocus(false);
|
|
74
73
|
}, trigger.onBlur);
|
|
@@ -77,8 +76,8 @@ export function useTriggerListboxSlots(props, state, ref, triggerSlot, listboxSl
|
|
|
77
76
|
}, trigger.onClick);
|
|
78
77
|
trigger.onFocus = mergeCallbacks(event => {
|
|
79
78
|
setHasFocus(true);
|
|
80
|
-
}, trigger.onFocus);
|
|
81
|
-
|
|
79
|
+
}, trigger.onFocus);
|
|
80
|
+
// handle combobox keyboard interaction
|
|
82
81
|
trigger.onKeyDown = mergeCallbacks(event => {
|
|
83
82
|
const action = getDropdownActionFromKey(event, {
|
|
84
83
|
open,
|
|
@@ -87,38 +86,31 @@ export function useTriggerListboxSlots(props, state, ref, triggerSlot, listboxSl
|
|
|
87
86
|
const maxIndex = getCount() - 1;
|
|
88
87
|
const activeIndex = activeOption ? getIndexOfId(activeOption.id) : -1;
|
|
89
88
|
let newIndex = activeIndex;
|
|
90
|
-
|
|
91
89
|
switch (action) {
|
|
92
90
|
case 'Open':
|
|
93
91
|
event.preventDefault();
|
|
94
92
|
setFocusVisible(true);
|
|
95
93
|
setOpen(event, true);
|
|
96
94
|
break;
|
|
97
|
-
|
|
98
95
|
case 'Close':
|
|
99
96
|
// stop propagation for escape key to avoid dismissing any parent popups
|
|
100
97
|
event.stopPropagation();
|
|
101
98
|
event.preventDefault();
|
|
102
99
|
setOpen(event, false);
|
|
103
100
|
break;
|
|
104
|
-
|
|
105
101
|
case 'CloseSelect':
|
|
106
102
|
!multiselect && !(activeOption === null || activeOption === void 0 ? void 0 : activeOption.disabled) && setOpen(event, false);
|
|
107
103
|
// fallthrough
|
|
108
|
-
|
|
109
104
|
case 'Select':
|
|
110
105
|
activeOption && selectOption(event, activeOption);
|
|
111
106
|
event.preventDefault();
|
|
112
107
|
break;
|
|
113
|
-
|
|
114
108
|
case 'Tab':
|
|
115
109
|
!multiselect && activeOption && selectOption(event, activeOption);
|
|
116
110
|
break;
|
|
117
|
-
|
|
118
111
|
default:
|
|
119
112
|
newIndex = getIndexFromAction(action, activeIndex, maxIndex);
|
|
120
113
|
}
|
|
121
|
-
|
|
122
114
|
if (newIndex !== activeIndex) {
|
|
123
115
|
// prevent default page scroll/keyboard action if the index changed
|
|
124
116
|
event.preventDefault();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["packages/react-components/react-combobox/src/utils/useTriggerListboxSlots.ts"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { mergeCallbacks, useMergedRefs } from '@fluentui/react-utilities';\nimport type { ExtractSlotProps, Slot } from '@fluentui/react-utilities';\nimport { getDropdownActionFromKey, getIndexFromAction } from '../utils/dropdownKeyActions';\nimport { Listbox } from '../components/Listbox/Listbox';\nimport type { ComboboxBaseProps, ComboboxBaseState } from './ComboboxBase.types';\n\nexport function useTriggerListboxSlots(\n props: ComboboxBaseProps,\n state: ComboboxBaseState,\n ref: React.Ref<HTMLButtonElement>,\n triggerSlot?: ExtractSlotProps<Slot<'button'>>,\n listboxSlot?: ExtractSlotProps<Slot<typeof Listbox>>,\n): [trigger: ExtractSlotProps<Slot<'button'>>, listbox?: ExtractSlotProps<Slot<typeof Listbox>>];\nexport function useTriggerListboxSlots(\n props: ComboboxBaseProps,\n state: ComboboxBaseState,\n ref: React.Ref<HTMLInputElement>,\n triggerSlot?: ExtractSlotProps<Slot<'input'>>,\n listboxSlot?: ExtractSlotProps<Slot<typeof Listbox>>,\n): [trigger: ExtractSlotProps<Slot<'input'>>, listbox?: ExtractSlotProps<Slot<typeof Listbox>>];\n\n/*\n * useTriggerListboxSlots returns a tuple of trigger/listbox shorthand,\n * with the semantics and event handlers needed for the Combobox and Dropdown components.\n * The element type of the ref should always match the element type used in the trigger shorthand.\n */\nexport function useTriggerListboxSlots(\n props: ComboboxBaseProps,\n state: ComboboxBaseState,\n ref: React.Ref<HTMLButtonElement | HTMLInputElement>,\n triggerSlot?: ExtractSlotProps<Slot<'input'>> | ExtractSlotProps<Slot<'button'>>,\n listboxSlot?: ExtractSlotProps<Slot<typeof Listbox>>,\n): [\n trigger: ExtractSlotProps<Slot<'input'>> | ExtractSlotProps<Slot<'button'>>,\n listbox?: ExtractSlotProps<Slot<typeof Listbox>>,\n] {\n const { multiselect } = props;\n const {\n activeOption,\n getCount,\n getIndexOfId,\n getOptionAtIndex,\n ignoreNextBlur,\n open,\n selectOption,\n setActiveOption,\n setFocusVisible,\n setHasFocus,\n setOpen,\n } = state;\n\n // handle trigger focus/blur\n const triggerRef: typeof ref = React.useRef(null);\n\n // resolve listbox shorthand props\n const listbox: typeof listboxSlot = listboxSlot && {\n multiselect,\n tabIndex: undefined,\n ...listboxSlot,\n };\n\n // resolve trigger shorthand props\n const trigger: typeof triggerSlot = {\n 'aria-expanded': open,\n 'aria-activedescendant': open ? activeOption?.id : undefined,\n role: 'combobox',\n ...triggerSlot,\n // explicitly type the ref as an intersection here to prevent type errors\n // since the `children` prop has mutually incompatible types between input/button\n // functionally both ref and triggerRef will always be the same element type\n ref: useMergedRefs(ref, triggerSlot?.ref, triggerRef) as React.Ref<HTMLButtonElement & HTMLInputElement>,\n };\n\n // listbox is nullable, only add event handlers if it exists\n if (listbox) {\n /*\n * Handle focus when clicking the listbox popup:\n * 1. Move focus back to the button/input when the listbox is clicked (otherwise it goes to body)\n * 2. Do not close the listbox on button/input blur when clicking into the listbox\n */\n listbox.onClick = mergeCallbacks((event: React.MouseEvent<HTMLDivElement>) => {\n triggerRef.current?.focus();\n }, listbox.onClick);\n\n listbox.onMouseOver = mergeCallbacks((event: React.MouseEvent<HTMLDivElement>) => {\n setFocusVisible(false);\n }, listbox.onMouseOver);\n\n listbox.onMouseDown = mergeCallbacks((event: React.MouseEvent<HTMLDivElement>) => {\n ignoreNextBlur.current = true;\n }, listbox.onMouseDown);\n }\n\n // the trigger should open/close the popup on click or blur\n trigger.onBlur = mergeCallbacks((event: React.FocusEvent<HTMLButtonElement> & React.FocusEvent<HTMLInputElement>) => {\n if (!ignoreNextBlur.current) {\n setOpen(event, false);\n }\n\n ignoreNextBlur.current = false;\n\n setHasFocus(false);\n }, trigger.onBlur);\n\n trigger.onClick = mergeCallbacks(\n (event: React.MouseEvent<HTMLButtonElement> & React.MouseEvent<HTMLInputElement>) => {\n setOpen(event, !open);\n },\n trigger.onClick,\n );\n\n trigger.onFocus = mergeCallbacks(\n (event: React.FocusEvent<HTMLButtonElement> & React.FocusEvent<HTMLInputElement>) => {\n setHasFocus(true);\n },\n trigger.onFocus,\n );\n\n // handle combobox keyboard interaction\n trigger.onKeyDown = mergeCallbacks(\n (event: React.KeyboardEvent<HTMLButtonElement> & React.KeyboardEvent<HTMLInputElement>) => {\n const action = getDropdownActionFromKey(event, { open, multiselect });\n const maxIndex = getCount() - 1;\n const activeIndex = activeOption ? getIndexOfId(activeOption.id) : -1;\n let newIndex = activeIndex;\n\n switch (action) {\n case 'Open':\n event.preventDefault();\n setFocusVisible(true);\n setOpen(event, true);\n break;\n case 'Close':\n // stop propagation for escape key to avoid dismissing any parent popups\n event.stopPropagation();\n event.preventDefault();\n setOpen(event, false);\n break;\n case 'CloseSelect':\n !multiselect && !activeOption?.disabled && setOpen(event, false);\n // fallthrough\n case 'Select':\n activeOption && selectOption(event, activeOption);\n event.preventDefault();\n break;\n case 'Tab':\n !multiselect && activeOption && selectOption(event, activeOption);\n break;\n default:\n newIndex = getIndexFromAction(action, activeIndex, maxIndex);\n }\n if (newIndex !== activeIndex) {\n // prevent default page scroll/keyboard action if the index changed\n event.preventDefault();\n setActiveOption(getOptionAtIndex(newIndex));\n setFocusVisible(true);\n }\n },\n trigger.onKeyDown,\n );\n\n trigger.onMouseOver = mergeCallbacks(\n (event: React.MouseEvent<HTMLButtonElement> & React.MouseEvent<HTMLInputElement>) => {\n setFocusVisible(false);\n },\n trigger.onMouseOver,\n );\n\n return [trigger, listbox];\n}\n"],"sourceRoot":"../src/"}
|
|
1
|
+
{"version":3,"mappings":"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","names":["React","mergeCallbacks","useEventCallback","useMergedRefs","getDropdownActionFromKey","getIndexFromAction","useTriggerListboxSlots","props","state","ref","triggerSlot","listboxSlot","multiselect","activeOption","getCount","getIndexOfId","getOptionAtIndex","ignoreNextBlur","open","selectOption","setActiveOption","setFocusVisible","setHasFocus","setOpen","triggerRef","useRef","listbox","tabIndex","undefined","trigger","id","role","listboxOnClick","event","current","focus","onClick","listboxOnMouseOver","onMouseOver","listboxOnMouseDown","onMouseDown","onBlur","onFocus","onKeyDown","action","maxIndex","activeIndex","newIndex","preventDefault","stopPropagation","disabled"],"sourceRoot":"../src/","sources":["packages/react-components/react-combobox/src/utils/useTriggerListboxSlots.ts"],"sourcesContent":["import * as React from 'react';\nimport { mergeCallbacks, useEventCallback, useMergedRefs } from '@fluentui/react-utilities';\nimport type { ExtractSlotProps, Slot } from '@fluentui/react-utilities';\nimport { getDropdownActionFromKey, getIndexFromAction } from '../utils/dropdownKeyActions';\nimport { Listbox } from '../components/Listbox/Listbox';\nimport type { ComboboxBaseProps, ComboboxBaseState } from './ComboboxBase.types';\n\nexport function useTriggerListboxSlots(\n props: ComboboxBaseProps,\n state: ComboboxBaseState,\n ref: React.Ref<HTMLButtonElement>,\n triggerSlot?: ExtractSlotProps<Slot<'button'>>,\n listboxSlot?: ExtractSlotProps<Slot<typeof Listbox>>,\n): [trigger: ExtractSlotProps<Slot<'button'>>, listbox?: ExtractSlotProps<Slot<typeof Listbox>>];\nexport function useTriggerListboxSlots(\n props: ComboboxBaseProps,\n state: ComboboxBaseState,\n ref: React.Ref<HTMLInputElement>,\n triggerSlot?: ExtractSlotProps<Slot<'input'>>,\n listboxSlot?: ExtractSlotProps<Slot<typeof Listbox>>,\n): [trigger: ExtractSlotProps<Slot<'input'>>, listbox?: ExtractSlotProps<Slot<typeof Listbox>>];\n\n/*\n * useTriggerListboxSlots returns a tuple of trigger/listbox shorthand,\n * with the semantics and event handlers needed for the Combobox and Dropdown components.\n * The element type of the ref should always match the element type used in the trigger shorthand.\n */\nexport function useTriggerListboxSlots(\n props: ComboboxBaseProps,\n state: ComboboxBaseState,\n ref: React.Ref<HTMLButtonElement | HTMLInputElement>,\n triggerSlot?: ExtractSlotProps<Slot<'input'>> | ExtractSlotProps<Slot<'button'>>,\n listboxSlot?: ExtractSlotProps<Slot<typeof Listbox>>,\n): [\n trigger: ExtractSlotProps<Slot<'input'>> | ExtractSlotProps<Slot<'button'>>,\n listbox?: ExtractSlotProps<Slot<typeof Listbox>>,\n] {\n const { multiselect } = props;\n const {\n activeOption,\n getCount,\n getIndexOfId,\n getOptionAtIndex,\n ignoreNextBlur,\n open,\n selectOption,\n setActiveOption,\n setFocusVisible,\n setHasFocus,\n setOpen,\n } = state;\n\n // handle trigger focus/blur\n const triggerRef: typeof ref = React.useRef(null);\n\n // resolve listbox shorthand props\n const listbox: typeof listboxSlot = listboxSlot && {\n multiselect,\n tabIndex: undefined,\n ...listboxSlot,\n };\n\n // resolve trigger shorthand props\n const trigger: typeof triggerSlot = {\n 'aria-expanded': open,\n 'aria-activedescendant': open ? activeOption?.id : undefined,\n role: 'combobox',\n ...triggerSlot,\n // explicitly type the ref as an intersection here to prevent type errors\n // since the `children` prop has mutually incompatible types between input/button\n // functionally both ref and triggerRef will always be the same element type\n ref: useMergedRefs(ref, triggerSlot?.ref, triggerRef) as React.Ref<HTMLButtonElement & HTMLInputElement>,\n };\n\n /*\n * Handle focus when clicking the listbox popup:\n * 1. Move focus back to the button/input when the listbox is clicked (otherwise it goes to body)\n * 2. Do not close the listbox on button/input blur when clicking into the listbox\n */\n const listboxOnClick = useEventCallback(\n mergeCallbacks((event: React.MouseEvent<HTMLDivElement>) => {\n triggerRef.current?.focus();\n }, listbox?.onClick),\n );\n\n const listboxOnMouseOver = useEventCallback(\n mergeCallbacks((event: React.MouseEvent<HTMLDivElement>) => {\n setFocusVisible(false);\n }, listbox?.onMouseOver),\n );\n\n const listboxOnMouseDown = useEventCallback(\n mergeCallbacks((event: React.MouseEvent<HTMLDivElement>) => {\n ignoreNextBlur.current = true;\n }, listbox?.onMouseDown),\n );\n\n // listbox is nullable, only add event handlers if it exists\n if (listbox) {\n listbox.onClick = listboxOnClick;\n listbox.onMouseOver = listboxOnMouseOver;\n listbox.onMouseDown = listboxOnMouseDown;\n }\n\n // the trigger should open/close the popup on click or blur\n trigger.onBlur = mergeCallbacks((event: React.FocusEvent<HTMLButtonElement> & React.FocusEvent<HTMLInputElement>) => {\n if (!ignoreNextBlur.current) {\n setOpen(event, false);\n }\n\n ignoreNextBlur.current = false;\n\n setHasFocus(false);\n }, trigger.onBlur);\n\n trigger.onClick = mergeCallbacks(\n (event: React.MouseEvent<HTMLButtonElement> & React.MouseEvent<HTMLInputElement>) => {\n setOpen(event, !open);\n },\n trigger.onClick,\n );\n\n trigger.onFocus = mergeCallbacks(\n (event: React.FocusEvent<HTMLButtonElement> & React.FocusEvent<HTMLInputElement>) => {\n setHasFocus(true);\n },\n trigger.onFocus,\n );\n\n // handle combobox keyboard interaction\n trigger.onKeyDown = mergeCallbacks(\n (event: React.KeyboardEvent<HTMLButtonElement> & React.KeyboardEvent<HTMLInputElement>) => {\n const action = getDropdownActionFromKey(event, { open, multiselect });\n const maxIndex = getCount() - 1;\n const activeIndex = activeOption ? getIndexOfId(activeOption.id) : -1;\n let newIndex = activeIndex;\n\n switch (action) {\n case 'Open':\n event.preventDefault();\n setFocusVisible(true);\n setOpen(event, true);\n break;\n case 'Close':\n // stop propagation for escape key to avoid dismissing any parent popups\n event.stopPropagation();\n event.preventDefault();\n setOpen(event, false);\n break;\n case 'CloseSelect':\n !multiselect && !activeOption?.disabled && setOpen(event, false);\n // fallthrough\n case 'Select':\n activeOption && selectOption(event, activeOption);\n event.preventDefault();\n break;\n case 'Tab':\n !multiselect && activeOption && selectOption(event, activeOption);\n break;\n default:\n newIndex = getIndexFromAction(action, activeIndex, maxIndex);\n }\n if (newIndex !== activeIndex) {\n // prevent default page scroll/keyboard action if the index changed\n event.preventDefault();\n setActiveOption(getOptionAtIndex(newIndex));\n setFocusVisible(true);\n }\n },\n trigger.onKeyDown,\n );\n\n trigger.onMouseOver = mergeCallbacks(\n (event: React.MouseEvent<HTMLButtonElement> & React.MouseEvent<HTMLInputElement>) => {\n setFocusVisible(false);\n },\n trigger.onMouseOver,\n );\n\n return [trigger, listbox];\n}\n"]}
|
package/lib-commonjs/Combobox.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["packages/react-components/react-combobox/src/Combobox.ts"],"
|
|
1
|
+
{"version":3,"mappings":";;;;;;AAAAA","names":["tslib_1"],"sourceRoot":"../src/","sources":["packages/react-components/react-combobox/src/Combobox.ts"],"sourcesContent":["export * from './components/Combobox/index';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["packages/react-components/react-combobox/src/ComboboxField.ts"],"
|
|
1
|
+
{"version":3,"mappings":";;;;;;AAAAA","names":["tslib_1"],"sourceRoot":"../src/","sources":["packages/react-components/react-combobox/src/ComboboxField.ts"],"sourcesContent":["export * from './components/ComboboxField/index';\n"]}
|
package/lib-commonjs/Dropdown.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["packages/react-components/react-combobox/src/Dropdown.ts"],"
|
|
1
|
+
{"version":3,"mappings":";;;;;;AAAAA","names":["tslib_1"],"sourceRoot":"../src/","sources":["packages/react-components/react-combobox/src/Dropdown.ts"],"sourcesContent":["export * from './components/Dropdown/index';\n"]}
|
package/lib-commonjs/Listbox.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["packages/react-components/react-combobox/src/Listbox.ts"],"
|
|
1
|
+
{"version":3,"mappings":";;;;;;AAAAA","names":["tslib_1"],"sourceRoot":"../src/","sources":["packages/react-components/react-combobox/src/Listbox.ts"],"sourcesContent":["export * from './components/Listbox/index';\n"]}
|
package/lib-commonjs/Option.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["packages/react-components/react-combobox/src/Option.ts"],"
|
|
1
|
+
{"version":3,"mappings":";;;;;;AAAAA","names":["tslib_1"],"sourceRoot":"../src/","sources":["packages/react-components/react-combobox/src/Option.ts"],"sourcesContent":["export * from './components/Option/index';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["packages/react-components/react-combobox/src/OptionGroup.ts"],"
|
|
1
|
+
{"version":3,"mappings":";;;;;;AAAAA","names":["tslib_1"],"sourceRoot":"../src/","sources":["packages/react-components/react-combobox/src/OptionGroup.ts"],"sourcesContent":["export * from './components/OptionGroup/index';\n"]}
|
|
@@ -4,21 +4,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.Combobox = void 0;
|
|
7
|
-
|
|
8
7
|
const React = /*#__PURE__*/require("react");
|
|
9
|
-
|
|
10
8
|
const useCombobox_1 = /*#__PURE__*/require("./useCombobox");
|
|
11
|
-
|
|
12
9
|
const renderCombobox_1 = /*#__PURE__*/require("./renderCombobox");
|
|
13
|
-
|
|
14
10
|
const useComboboxStyles_1 = /*#__PURE__*/require("./useComboboxStyles");
|
|
15
|
-
|
|
16
11
|
const useComboboxContextValues_1 = /*#__PURE__*/require("../../contexts/useComboboxContextValues");
|
|
17
12
|
/**
|
|
18
13
|
* Combobox component: a selection control that allows users to choose from a set of possible options
|
|
19
14
|
*/
|
|
20
|
-
|
|
21
|
-
|
|
22
15
|
exports.Combobox = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
23
16
|
const state = useCombobox_1.useCombobox_unstable(props, ref);
|
|
24
17
|
const contextValues = useComboboxContextValues_1.useComboboxContextValues(state);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"mappings":";;;;;;AAAA;AACA;AACA;AACA;AAEA;AAGA;;;AAGaA,gBAAQ,gBAAuCC,KAAK,CAACC,UAAU,CAAC,CAACC,KAAK,EAAEC,GAAG,KAAI;EAC1F,MAAMC,KAAK,GAAGC,kCAAoB,CAACH,KAAK,EAAEC,GAAG,CAAC;EAC9C,MAAMG,aAAa,GAAGC,mDAAwB,CAACH,KAAK,CAAC;EAErDI,8CAA0B,CAACJ,KAAK,CAAC;EACjC,OAAOK,wCAAuB,CAACL,KAAK,EAAEE,aAAa,CAAC;AACtD,CAAC,CAAC;AAEFP,gBAAQ,CAACW,WAAW,GAAG,UAAU","names":["exports","React","forwardRef","props","ref","state","useCombobox_1","contextValues","useComboboxContextValues_1","useComboboxStyles_1","renderCombobox_1","displayName"],"sourceRoot":"../src/","sources":["packages/react-components/react-combobox/src/components/Combobox/Combobox.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useCombobox_unstable } from './useCombobox';\nimport { renderCombobox_unstable } from './renderCombobox';\nimport { useComboboxStyles_unstable } from './useComboboxStyles';\nimport type { ComboboxProps } from './Combobox.types';\nimport { useComboboxContextValues } from '../../contexts/useComboboxContextValues';\nimport type { ForwardRefComponent } from '@fluentui/react-utilities';\n\n/**\n * Combobox component: a selection control that allows users to choose from a set of possible options\n */\nexport const Combobox: ForwardRefComponent<ComboboxProps> = React.forwardRef((props, ref) => {\n const state = useCombobox_unstable(props, ref);\n const contextValues = useComboboxContextValues(state);\n\n useComboboxStyles_unstable(state);\n return renderCombobox_unstable(state, contextValues);\n});\n\nCombobox.displayName = 'Combobox';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"mappings":"","names":[],"sourceRoot":"../src/","sources":[],"sourcesContent":[]}
|
|
@@ -3,16 +3,10 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
7
6
|
const tslib_1 = /*#__PURE__*/require("tslib");
|
|
8
|
-
|
|
9
7
|
tslib_1.__exportStar(require("./Combobox"), exports);
|
|
10
|
-
|
|
11
8
|
tslib_1.__exportStar(require("./Combobox.types"), exports);
|
|
12
|
-
|
|
13
9
|
tslib_1.__exportStar(require("./renderCombobox"), exports);
|
|
14
|
-
|
|
15
10
|
tslib_1.__exportStar(require("./useCombobox"), exports);
|
|
16
|
-
|
|
17
11
|
tslib_1.__exportStar(require("./useComboboxStyles"), exports);
|
|
18
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["packages/react-components/react-combobox/src/components/Combobox/index.ts"],"
|
|
1
|
+
{"version":3,"mappings":";;;;;;AAAAA;AACAA;AACAA;AACAA;AACAA","names":["tslib_1"],"sourceRoot":"../src/","sources":["packages/react-components/react-combobox/src/components/Combobox/index.ts"],"sourcesContent":["export * from './Combobox';\nexport * from './Combobox.types';\nexport * from './renderCombobox';\nexport * from './useCombobox';\nexport * from './useComboboxStyles';\n"]}
|
|
@@ -4,33 +4,31 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.renderCombobox_unstable = void 0;
|
|
7
|
-
|
|
8
7
|
const React = /*#__PURE__*/require("react");
|
|
9
|
-
|
|
10
8
|
const react_portal_1 = /*#__PURE__*/require("@fluentui/react-portal");
|
|
11
|
-
|
|
12
9
|
const react_utilities_1 = /*#__PURE__*/require("@fluentui/react-utilities");
|
|
13
|
-
|
|
14
10
|
const ComboboxContext_1 = /*#__PURE__*/require("../../contexts/ComboboxContext");
|
|
15
11
|
/**
|
|
16
12
|
* Render the final JSX of Combobox
|
|
17
13
|
*/
|
|
18
|
-
|
|
19
|
-
|
|
20
14
|
const renderCombobox_unstable = (state, contextValues) => {
|
|
21
15
|
const {
|
|
22
16
|
slots,
|
|
23
17
|
slotProps
|
|
24
18
|
} = react_utilities_1.getSlots(state);
|
|
25
|
-
return React.createElement(slots.root, {
|
|
19
|
+
return React.createElement(slots.root, {
|
|
20
|
+
...slotProps.root
|
|
26
21
|
}, React.createElement(ComboboxContext_1.ComboboxContext.Provider, {
|
|
27
22
|
value: contextValues.combobox
|
|
28
|
-
}, React.createElement(slots.input, {
|
|
29
|
-
|
|
30
|
-
}), slots.
|
|
31
|
-
|
|
23
|
+
}, React.createElement(slots.input, {
|
|
24
|
+
...slotProps.input
|
|
25
|
+
}), slots.expandIcon && React.createElement(slots.expandIcon, {
|
|
26
|
+
...slotProps.expandIcon
|
|
27
|
+
}), slots.listbox && (state.inlinePopup ? React.createElement(slots.listbox, {
|
|
28
|
+
...slotProps.listbox
|
|
29
|
+
}) : React.createElement(react_portal_1.Portal, null, React.createElement(slots.listbox, {
|
|
30
|
+
...slotProps.listbox
|
|
32
31
|
})))));
|
|
33
32
|
};
|
|
34
|
-
|
|
35
33
|
exports.renderCombobox_unstable = renderCombobox_unstable;
|
|
36
34
|
//# sourceMappingURL=renderCombobox.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"mappings":";;;;;;AAAA;AACA;AACA;AACA;AAGA;;;AAGO,MAAMA,uBAAuB,GAAG,CAACC,KAAoB,EAAEC,aAAoC,KAAI;EACpG,MAAM;IAAEC,KAAK;IAAEC;EAAS,CAAE,GAAGC,0BAAQ,CAAgBJ,KAAK,CAAC;EAE3D,OACEK,oBAACH,KAAK,CAACI,IAAI;IAAA,GAAKH,SAAS,CAACG;EAAI,GAC5BD,oBAACE,iCAAe,CAACC,QAAQ;IAACC,KAAK,EAAER,aAAa,CAACS;EAAQ,GACrDL,oBAACH,KAAK,CAACS,KAAK;IAAA,GAAKR,SAAS,CAACQ;EAAK,EAAI,EACnCT,KAAK,CAACU,UAAU,IAAIP,oBAACH,KAAK,CAACU,UAAU;IAAA,GAAKT,SAAS,CAACS;EAAU,EAAI,EAClEV,KAAK,CAACW,OAAO,KACXb,KAAK,CAACc,WAAW,GAChBT,oBAACH,KAAK,CAACW,OAAO;IAAA,GAAKV,SAAS,CAACU;EAAO,EAAI,GAExCR,oBAACU,qBAAM,QACLV,oBAACH,KAAK,CAACW,OAAO;IAAA,GAAKV,SAAS,CAACU;EAAO,EAAI,CAE3C,CAAC,CACqB,CAChB;AAEjB,CAAC;AAnBYG,+BAAuB","names":["renderCombobox_unstable","state","contextValues","slots","slotProps","react_utilities_1","React","root","ComboboxContext_1","Provider","value","combobox","input","expandIcon","listbox","inlinePopup","react_portal_1","exports"],"sourceRoot":"../src/","sources":["packages/react-components/react-combobox/src/components/Combobox/renderCombobox.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Portal } from '@fluentui/react-portal';\nimport { getSlots } from '@fluentui/react-utilities';\nimport { ComboboxContext } from '../../contexts/ComboboxContext';\nimport type { ComboboxContextValues, ComboboxState, ComboboxSlots } from './Combobox.types';\n\n/**\n * Render the final JSX of Combobox\n */\nexport const renderCombobox_unstable = (state: ComboboxState, contextValues: ComboboxContextValues) => {\n const { slots, slotProps } = getSlots<ComboboxSlots>(state);\n\n return (\n <slots.root {...slotProps.root}>\n <ComboboxContext.Provider value={contextValues.combobox}>\n <slots.input {...slotProps.input} />\n {slots.expandIcon && <slots.expandIcon {...slotProps.expandIcon} />}\n {slots.listbox &&\n (state.inlinePopup ? (\n <slots.listbox {...slotProps.listbox} />\n ) : (\n <Portal>\n <slots.listbox {...slotProps.listbox} />\n </Portal>\n ))}\n </ComboboxContext.Provider>\n </slots.root>\n );\n};\n"]}
|
|
@@ -4,21 +4,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.useCombobox_unstable = void 0;
|
|
7
|
-
|
|
8
7
|
const React = /*#__PURE__*/require("react");
|
|
9
|
-
|
|
10
8
|
const react_icons_1 = /*#__PURE__*/require("@fluentui/react-icons");
|
|
11
|
-
|
|
12
9
|
const react_utilities_1 = /*#__PURE__*/require("@fluentui/react-utilities");
|
|
13
|
-
|
|
14
10
|
const dropdownKeyActions_1 = /*#__PURE__*/require("../../utils/dropdownKeyActions");
|
|
15
|
-
|
|
16
11
|
const useComboboxBaseState_1 = /*#__PURE__*/require("../../utils/useComboboxBaseState");
|
|
17
|
-
|
|
18
12
|
const useComboboxPopup_1 = /*#__PURE__*/require("../../utils/useComboboxPopup");
|
|
19
|
-
|
|
20
13
|
const useTriggerListboxSlots_1 = /*#__PURE__*/require("../../utils/useTriggerListboxSlots");
|
|
21
|
-
|
|
22
14
|
const Listbox_1 = /*#__PURE__*/require("../Listbox/Listbox");
|
|
23
15
|
/**
|
|
24
16
|
* Create the state required to render Combobox.
|
|
@@ -29,12 +21,10 @@ const Listbox_1 = /*#__PURE__*/require("../Listbox/Listbox");
|
|
|
29
21
|
* @param props - props from this instance of Combobox
|
|
30
22
|
* @param ref - reference to root HTMLElement of Combobox
|
|
31
23
|
*/
|
|
32
|
-
|
|
33
|
-
|
|
34
24
|
const useCombobox_unstable = (props, ref) => {
|
|
35
25
|
var _a;
|
|
36
|
-
|
|
37
|
-
|
|
26
|
+
const baseState = useComboboxBaseState_1.useComboboxBaseState({
|
|
27
|
+
...props,
|
|
38
28
|
editable: true
|
|
39
29
|
});
|
|
40
30
|
const {
|
|
@@ -65,90 +55,82 @@ const useCombobox_unstable = (props, ref) => {
|
|
|
65
55
|
excludedPropNames: ['children', 'size']
|
|
66
56
|
});
|
|
67
57
|
const rootRef = React.useRef(null);
|
|
68
|
-
const triggerRef = React.useRef(null);
|
|
69
|
-
|
|
70
|
-
const [
|
|
58
|
+
const triggerRef = React.useRef(null);
|
|
59
|
+
// calculate listbox width style based on trigger width
|
|
60
|
+
const [popupDimensions, setPopupDimensions] = React.useState();
|
|
71
61
|
React.useEffect(() => {
|
|
72
62
|
var _a;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
63
|
+
// only recalculate width when opening
|
|
64
|
+
if (open) {
|
|
65
|
+
const width = `${(_a = rootRef.current) === null || _a === void 0 ? void 0 : _a.clientWidth}px`;
|
|
66
|
+
if (width !== (popupDimensions === null || popupDimensions === void 0 ? void 0 : popupDimensions.width)) {
|
|
67
|
+
setPopupDimensions({
|
|
68
|
+
width
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}, [open, popupDimensions]);
|
|
73
|
+
// set active option and selection based on typing
|
|
78
74
|
const getOptionFromInput = inputValue => {
|
|
79
75
|
var _a;
|
|
80
|
-
|
|
81
76
|
const searchString = inputValue === null || inputValue === void 0 ? void 0 : inputValue.trim().toLowerCase();
|
|
82
|
-
|
|
83
77
|
if (!searchString || searchString.length === 0) {
|
|
84
78
|
return;
|
|
85
79
|
}
|
|
86
|
-
|
|
87
80
|
const matcher = optionText => optionText.toLowerCase().indexOf(searchString) === 0;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
81
|
+
const matches = getOptionsMatchingText(matcher);
|
|
82
|
+
// return first matching option after the current active option, looping back to the top
|
|
91
83
|
if (matches.length > 1 && activeOption) {
|
|
92
84
|
const startIndex = getIndexOfId(activeOption.id);
|
|
93
85
|
const nextMatch = matches.find(option => getIndexOfId(option.id) >= startIndex);
|
|
94
86
|
return nextMatch !== null && nextMatch !== void 0 ? nextMatch : matches[0];
|
|
95
87
|
}
|
|
96
|
-
|
|
97
88
|
return (_a = matches[0]) !== null && _a !== void 0 ? _a : undefined;
|
|
98
89
|
};
|
|
99
90
|
/* Handle typed input */
|
|
100
91
|
// reset any typed value when an option is selected
|
|
101
|
-
|
|
102
|
-
|
|
103
92
|
baseState.selectOption = (ev, option) => {
|
|
104
93
|
setValue(undefined);
|
|
105
94
|
selectOption(ev, option);
|
|
106
95
|
};
|
|
107
|
-
|
|
108
96
|
const onTriggerBlur = ev => {
|
|
109
97
|
// handle selection and updating value if freeform is false
|
|
110
98
|
if (!baseState.open && !freeform) {
|
|
111
99
|
// select matching option, if the value fully matches
|
|
112
100
|
if (value && activeOption && value.trim().toLowerCase() === (activeOption === null || activeOption === void 0 ? void 0 : activeOption.value.toLowerCase())) {
|
|
113
101
|
baseState.selectOption(ev, activeOption);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
|
|
102
|
+
}
|
|
103
|
+
// reset typed value when the input loses focus while collapsed, unless freeform is true
|
|
117
104
|
setValue(undefined);
|
|
118
105
|
}
|
|
119
106
|
};
|
|
120
|
-
|
|
121
107
|
baseState.setOpen = (ev, newState) => {
|
|
122
108
|
if (!newState && !freeform) {
|
|
123
109
|
setValue(undefined);
|
|
124
110
|
}
|
|
125
|
-
|
|
126
111
|
setOpen(ev, newState);
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
|
|
112
|
+
};
|
|
113
|
+
// update value and active option based on input
|
|
130
114
|
const onTriggerChange = ev => {
|
|
131
|
-
const inputValue = ev.target.value;
|
|
132
|
-
|
|
133
|
-
baseState.setValue(inputValue);
|
|
134
|
-
|
|
115
|
+
const inputValue = ev.target.value;
|
|
116
|
+
// update uncontrolled value
|
|
117
|
+
baseState.setValue(inputValue);
|
|
118
|
+
// handle updating active option based on input
|
|
135
119
|
const matchingOption = getOptionFromInput(inputValue);
|
|
136
120
|
setActiveOption(matchingOption);
|
|
137
|
-
setFocusVisible(true);
|
|
138
|
-
|
|
121
|
+
setFocusVisible(true);
|
|
122
|
+
// clear selection for single-select if the input value no longer matches the selection
|
|
139
123
|
if (!multiselect && selectedOptions.length === 1 && (inputValue.length < 1 || selectedOptions[0].indexOf(inputValue) !== 0)) {
|
|
140
124
|
clearSelection(ev);
|
|
141
125
|
}
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
|
|
126
|
+
};
|
|
127
|
+
// open Combobox when typing
|
|
145
128
|
const onTriggerKeyDown = ev => {
|
|
146
129
|
if (!open && dropdownKeyActions_1.getDropdownActionFromKey(ev) === 'Type') {
|
|
147
130
|
setOpen(ev, true);
|
|
148
131
|
}
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
|
|
132
|
+
};
|
|
133
|
+
// resolve input and listbox slot props
|
|
152
134
|
let triggerSlot;
|
|
153
135
|
let listboxSlot;
|
|
154
136
|
triggerSlot = react_utilities_1.resolveShorthand(props.input, {
|
|
@@ -162,15 +144,13 @@ const useCombobox_unstable = (props, ref) => {
|
|
|
162
144
|
});
|
|
163
145
|
triggerSlot.onChange = react_utilities_1.mergeCallbacks(triggerSlot.onChange, onTriggerChange);
|
|
164
146
|
triggerSlot.onBlur = react_utilities_1.mergeCallbacks(triggerSlot.onBlur, onTriggerBlur);
|
|
165
|
-
triggerSlot.onKeyDown = react_utilities_1.mergeCallbacks(triggerSlot.onKeyDown, onTriggerKeyDown);
|
|
166
|
-
|
|
147
|
+
triggerSlot.onKeyDown = react_utilities_1.mergeCallbacks(triggerSlot.onKeyDown, onTriggerKeyDown);
|
|
148
|
+
// only resolve listbox slot if needed
|
|
167
149
|
listboxSlot = open || hasFocus ? react_utilities_1.resolveShorthand(props.listbox, {
|
|
168
150
|
required: true,
|
|
169
151
|
defaultProps: {
|
|
170
152
|
children: props.children,
|
|
171
|
-
style:
|
|
172
|
-
width: popupWidth
|
|
173
|
-
}
|
|
153
|
+
style: popupDimensions
|
|
174
154
|
}
|
|
175
155
|
}) : undefined;
|
|
176
156
|
[triggerSlot, listboxSlot] = useComboboxPopup_1.useComboboxPopup(props, triggerSlot, listboxSlot);
|
|
@@ -184,7 +164,8 @@ const useCombobox_unstable = (props, ref) => {
|
|
|
184
164
|
},
|
|
185
165
|
root: react_utilities_1.resolveShorthand(props.root, {
|
|
186
166
|
required: true,
|
|
187
|
-
defaultProps: {
|
|
167
|
+
defaultProps: {
|
|
168
|
+
...rootNativeProps
|
|
188
169
|
}
|
|
189
170
|
}),
|
|
190
171
|
input: triggerSlot,
|
|
@@ -200,7 +181,6 @@ const useCombobox_unstable = (props, ref) => {
|
|
|
200
181
|
};
|
|
201
182
|
state.root.ref = react_utilities_1.useMergedRefs(state.root.ref, rootRef);
|
|
202
183
|
/* handle open/close + focus change when clicking expandIcon */
|
|
203
|
-
|
|
204
184
|
const {
|
|
205
185
|
onMouseDown: onIconMouseDown,
|
|
206
186
|
onClick: onIconClick
|
|
@@ -212,20 +192,18 @@ const useCombobox_unstable = (props, ref) => {
|
|
|
212
192
|
}
|
|
213
193
|
}));
|
|
214
194
|
const onExpandIconClick = react_utilities_1.useEventCallback(react_utilities_1.mergeCallbacks(onIconClick, event => {
|
|
215
|
-
var _a;
|
|
216
|
-
|
|
217
|
-
|
|
195
|
+
var _a;
|
|
196
|
+
// open and set focus
|
|
218
197
|
state.setOpen(event, !state.open);
|
|
219
198
|
(_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
199
|
+
// set focus visible=false, since this can only be done with the mouse/pointer
|
|
200
|
+
setFocusVisible(false);
|
|
220
201
|
}));
|
|
221
|
-
|
|
222
202
|
if (state.expandIcon) {
|
|
223
203
|
state.expandIcon.onMouseDown = onExpandIconMouseDown;
|
|
224
204
|
state.expandIcon.onClick = onExpandIconClick;
|
|
225
205
|
}
|
|
226
|
-
|
|
227
206
|
return state;
|
|
228
207
|
};
|
|
229
|
-
|
|
230
208
|
exports.useCombobox_unstable = useCombobox_unstable;
|
|
231
209
|
//# sourceMappingURL=useCombobox.js.map
|