@zendeskgarden/react-dropdowns 9.0.0-next.1 → 9.0.0-next.11
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/README.md +73 -69
- package/dist/esm/context/useComboboxContext.js +18 -0
- package/dist/esm/context/useFieldContext.js +18 -0
- package/dist/esm/context/useItemContext.js +18 -0
- package/dist/esm/context/useItemGroupContext.js +14 -0
- package/dist/esm/context/useMenuContext.js +18 -0
- package/dist/esm/context/useOptionContext.js +18 -0
- package/dist/esm/elements/combobox/Combobox.js +330 -0
- package/dist/esm/elements/combobox/Field.js +75 -0
- package/dist/esm/elements/combobox/Hint.js +57 -0
- package/dist/esm/elements/combobox/Label.js +68 -0
- package/dist/esm/elements/combobox/Listbox.js +155 -0
- package/dist/esm/elements/combobox/Message.js +63 -0
- package/dist/esm/elements/combobox/OptGroup.js +93 -0
- package/dist/esm/elements/combobox/Option.js +133 -0
- package/dist/esm/elements/combobox/OptionMeta.js +55 -0
- package/dist/esm/elements/combobox/Tag.js +98 -0
- package/dist/esm/elements/combobox/TagAvatar.js +13 -0
- package/dist/esm/elements/combobox/TagGroup.js +35 -0
- package/dist/esm/elements/combobox/utils.js +36 -0
- package/dist/esm/elements/menu/Item.js +140 -0
- package/dist/esm/elements/menu/ItemGroup.js +96 -0
- package/dist/esm/elements/menu/ItemMeta.js +55 -0
- package/dist/esm/elements/menu/Menu.js +157 -0
- package/dist/esm/elements/menu/MenuList.js +170 -0
- package/dist/esm/elements/menu/Separator.js +58 -0
- package/dist/esm/elements/menu/utils.js +55 -0
- package/dist/esm/index.js +19 -0
- package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/check-lg-stroke.svg.js +28 -0
- package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/chevron-down-stroke.svg.js +25 -0
- package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/chevron-left-stroke.svg.js +25 -0
- package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/chevron-right-stroke.svg.js +25 -0
- package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/plus-stroke.svg.js +26 -0
- package/dist/esm/types/index.js +12 -0
- package/dist/esm/views/combobox/StyledCombobox.js +30 -0
- package/dist/esm/views/combobox/StyledContainer.js +22 -0
- package/dist/esm/views/combobox/StyledField.js +22 -0
- package/dist/esm/views/combobox/StyledFloatingListbox.js +27 -0
- package/dist/esm/views/combobox/StyledHint.js +23 -0
- package/dist/esm/views/combobox/StyledInput.js +41 -0
- package/dist/esm/views/combobox/StyledInputGroup.js +26 -0
- package/dist/esm/views/combobox/StyledInputIcon.js +43 -0
- package/dist/esm/views/combobox/StyledLabel.js +23 -0
- package/dist/esm/views/combobox/StyledListbox.js +31 -0
- package/dist/esm/views/combobox/StyledListboxSeparator.js +31 -0
- package/dist/esm/views/combobox/StyledMessage.js +23 -0
- package/dist/esm/views/combobox/StyledOptGroup.js +22 -0
- package/dist/esm/views/combobox/StyledOption.js +48 -0
- package/dist/esm/views/combobox/StyledOptionContent.js +22 -0
- package/dist/esm/views/combobox/StyledOptionIcon.js +29 -0
- package/dist/esm/views/combobox/StyledOptionMeta.js +31 -0
- package/dist/esm/views/combobox/StyledOptionTypeIcon.js +48 -0
- package/dist/esm/views/combobox/StyledTag.js +24 -0
- package/dist/esm/views/combobox/StyledTagsButton.js +28 -0
- package/dist/esm/views/combobox/StyledTrigger.js +94 -0
- package/dist/esm/views/combobox/StyledValue.js +32 -0
- package/dist/esm/views/menu/StyledButton.js +23 -0
- package/dist/esm/views/menu/StyledFloatingMenu.js +23 -0
- package/dist/esm/views/menu/StyledItem.js +23 -0
- package/dist/esm/views/menu/StyledItemContent.js +23 -0
- package/dist/esm/views/menu/StyledItemGroup.js +23 -0
- package/dist/esm/views/menu/StyledItemIcon.js +23 -0
- package/dist/esm/views/menu/StyledItemMeta.js +23 -0
- package/dist/esm/views/menu/StyledItemTypeIcon.js +24 -0
- package/dist/esm/views/menu/StyledMenu.js +27 -0
- package/dist/esm/views/menu/StyledSeparator.js +23 -0
- package/dist/index.cjs.js +1620 -1736
- package/dist/typings/context/useComboboxContext.d.ts +25 -0
- package/dist/typings/context/useFieldContext.d.ts +32 -0
- package/dist/typings/context/useItemContext.d.ts +14 -0
- package/dist/typings/context/useItemGroupContext.d.ts +15 -0
- package/dist/typings/context/useMenuContext.d.ts +23 -0
- package/dist/typings/context/useOptionContext.d.ts +14 -0
- package/dist/typings/elements/{Combobox → combobox}/Combobox.d.ts +0 -2
- package/dist/typings/elements/{Fields → combobox}/Field.d.ts +8 -1
- package/dist/typings/elements/{Fields → combobox}/Hint.d.ts +2 -0
- package/dist/typings/elements/{Fields → combobox}/Label.d.ts +3 -1
- package/dist/typings/elements/{Menu/Items/MediaBody.d.ts → combobox/Listbox.d.ts} +2 -4
- package/dist/typings/elements/{Fields → combobox}/Message.d.ts +3 -1
- package/dist/typings/elements/{Menu/Items/HeaderItem.d.ts → combobox/OptGroup.d.ts} +2 -2
- package/dist/typings/elements/{Menu/Items/MediaItem.d.ts → combobox/Option.d.ts} +5 -2
- package/dist/typings/elements/{Menu/Items/HeaderIcon.d.ts → combobox/OptionMeta.d.ts} +1 -1
- package/dist/typings/elements/combobox/Tag.d.ts +15 -0
- package/dist/typings/elements/combobox/TagAvatar.d.ts +14 -0
- package/dist/typings/elements/combobox/TagGroup.d.ts +12 -0
- package/dist/typings/elements/combobox/utils.d.ts +30 -0
- package/dist/typings/elements/{Menu/Items → menu}/Item.d.ts +5 -2
- package/dist/typings/elements/{Menu/Items/AddItem.d.ts → menu/ItemGroup.d.ts} +2 -2
- package/dist/typings/elements/{Menu/Items → menu}/ItemMeta.d.ts +2 -2
- package/dist/typings/elements/{Menu → menu}/Menu.d.ts +0 -2
- package/dist/typings/elements/menu/MenuList.d.ts +12 -0
- package/dist/typings/elements/{Menu → menu}/Separator.d.ts +1 -1
- package/dist/typings/elements/menu/utils.d.ts +29 -0
- package/dist/typings/index.d.ts +18 -25
- package/dist/typings/types/index.d.ts +242 -121
- package/dist/typings/{styled/items/StyledItemIcon.d.ts → views/combobox/StyledCombobox.d.ts} +4 -6
- package/dist/typings/{styled/multiselect/StyledMultiselectItemWrapper.d.ts → views/combobox/StyledContainer.d.ts} +1 -1
- package/dist/typings/{styled/select/StyledSelect.d.ts → views/combobox/StyledField.d.ts} +1 -1
- package/dist/typings/views/combobox/StyledFloatingListbox.d.ts +18 -0
- package/dist/typings/views/combobox/StyledHint.d.ts +11 -0
- package/dist/typings/views/combobox/StyledInput.d.ts +20 -0
- package/dist/typings/{styled/items/StyledAddItem.d.ts → views/combobox/StyledInputGroup.d.ts} +2 -4
- package/dist/typings/views/combobox/StyledInputIcon.d.ts +20 -0
- package/dist/typings/views/combobox/StyledLabel.d.ts +11 -0
- package/dist/typings/views/combobox/StyledListbox.d.ts +17 -0
- package/dist/typings/{styled/items/StyledNextItem.d.ts → views/combobox/StyledListboxSeparator.d.ts} +2 -4
- package/dist/typings/views/combobox/StyledMessage.d.ts +11 -0
- package/dist/typings/views/combobox/StyledOptGroup.d.ts +14 -0
- package/dist/typings/views/combobox/StyledOption.d.ts +18 -0
- package/dist/typings/views/combobox/StyledOptionContent.d.ts +10 -0
- package/dist/typings/views/combobox/StyledOptionIcon.d.ts +12 -0
- package/dist/typings/views/combobox/StyledOptionMeta.d.ts +14 -0
- package/dist/typings/views/combobox/StyledOptionTypeIcon.d.ts +17 -0
- package/dist/typings/views/combobox/StyledTag.d.ts +17 -0
- package/dist/typings/views/combobox/StyledTagsButton.d.ts +16 -0
- package/dist/typings/views/combobox/StyledTrigger.d.ts +24 -0
- package/dist/typings/views/combobox/StyledValue.d.ts +21 -0
- package/dist/typings/views/index.d.ts +38 -0
- package/dist/typings/views/menu/StyledButton.d.ts +20 -0
- package/dist/typings/views/menu/StyledFloatingMenu.d.ts +13 -0
- package/dist/typings/{styled/items/StyledPreviousItem.d.ts → views/menu/StyledItem.d.ts} +4 -4
- package/dist/typings/views/menu/StyledItemContent.d.ts +13 -0
- package/dist/typings/views/menu/StyledItemGroup.d.ts +13 -0
- package/dist/typings/views/menu/StyledItemIcon.d.ts +14 -0
- package/dist/typings/{styled/items → views/menu}/StyledItemMeta.d.ts +5 -10
- package/dist/typings/views/menu/StyledItemTypeIcon.d.ts +14 -0
- package/dist/typings/views/menu/StyledMenu.d.ts +19 -0
- package/dist/typings/{styled → views}/menu/StyledSeparator.d.ts +7 -4
- package/package.json +19 -17
- package/dist/index.esm.js +0 -2032
- package/dist/typings/elements/Autocomplete/Autocomplete.d.ts +0 -14
- package/dist/typings/elements/Dropdown/Dropdown.d.ts +0 -26
- package/dist/typings/elements/Menu/Items/MediaFigure.d.ts +0 -11
- package/dist/typings/elements/Menu/Items/NextItem.d.ts +0 -12
- package/dist/typings/elements/Menu/Items/PreviousItem.d.ts +0 -12
- package/dist/typings/elements/Multiselect/Multiselect.d.ts +0 -14
- package/dist/typings/elements/Select/Select.d.ts +0 -14
- package/dist/typings/elements/Trigger/Trigger.d.ts +0 -24
- package/dist/typings/styled/index.d.ts +0 -29
- package/dist/typings/styled/items/StyledItem.d.ts +0 -20
- package/dist/typings/styled/items/StyledNextIcon.d.ts +0 -12
- package/dist/typings/styled/items/StyledPreviousIcon.d.ts +0 -12
- package/dist/typings/styled/items/header/StyledHeaderIcon.d.ts +0 -14
- package/dist/typings/styled/items/header/StyledHeaderItem.d.ts +0 -16
- package/dist/typings/styled/items/media/StyledMediaBody.d.ts +0 -17
- package/dist/typings/styled/items/media/StyledMediaFigure.d.ts +0 -287
- package/dist/typings/styled/items/media/StyledMediaItem.d.ts +0 -13
- package/dist/typings/styled/menu/StyledMenu.d.ts +0 -20
- package/dist/typings/styled/menu/StyledMenuWrapper.d.ts +0 -16
- package/dist/typings/styled/multiselect/StyledMultiselectInput.d.ts +0 -22
- package/dist/typings/styled/multiselect/StyledMultiselectItemsContainer.d.ts +0 -16
- package/dist/typings/styled/multiselect/StyledMultiselectMoreAnchor.d.ts +0 -15
- package/dist/typings/styled/select/StyledFauxInput.d.ts +0 -22
- package/dist/typings/styled/select/StyledInput.d.ts +0 -15
- package/dist/typings/utils/garden-placements.d.ts +0 -26
- package/dist/typings/utils/useDropdownContext.d.ts +0 -28
- package/dist/typings/utils/useFieldContext.d.ts +0 -17
- package/dist/typings/utils/useItemContext.d.ts +0 -16
- package/dist/typings/utils/useMenuContext.d.ts +0 -17
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Zendesk, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Use of this source code is governed under the Apache License, Version 2.0
|
|
5
|
+
* found at http://www.apache.org/licenses/LICENSE-2.0.
|
|
6
|
+
*/
|
|
7
|
+
import React__default, { forwardRef, useState, useMemo } from 'react';
|
|
8
|
+
import { FieldContext } from '../../context/useFieldContext.js';
|
|
9
|
+
import '../../views/combobox/StyledCombobox.js';
|
|
10
|
+
import '../../views/combobox/StyledContainer.js';
|
|
11
|
+
import { StyledField } from '../../views/combobox/StyledField.js';
|
|
12
|
+
import '../../views/combobox/StyledFloatingListbox.js';
|
|
13
|
+
import '../../views/combobox/StyledHint.js';
|
|
14
|
+
import '../../views/combobox/StyledInput.js';
|
|
15
|
+
import '../../views/combobox/StyledInputGroup.js';
|
|
16
|
+
import '../../views/combobox/StyledInputIcon.js';
|
|
17
|
+
import '../../views/combobox/StyledLabel.js';
|
|
18
|
+
import '../../views/combobox/StyledListbox.js';
|
|
19
|
+
import '../../views/combobox/StyledListboxSeparator.js';
|
|
20
|
+
import '../../views/combobox/StyledMessage.js';
|
|
21
|
+
import '../../views/combobox/StyledOptGroup.js';
|
|
22
|
+
import '../../views/combobox/StyledOption.js';
|
|
23
|
+
import '../../views/combobox/StyledOptionContent.js';
|
|
24
|
+
import '../../views/combobox/StyledOptionIcon.js';
|
|
25
|
+
import '../../views/combobox/StyledOptionMeta.js';
|
|
26
|
+
import '../../views/combobox/StyledOptionTypeIcon.js';
|
|
27
|
+
import '../../views/combobox/StyledTag.js';
|
|
28
|
+
import '../../views/combobox/StyledTagsButton.js';
|
|
29
|
+
import '../../views/combobox/StyledTrigger.js';
|
|
30
|
+
import '../../views/combobox/StyledValue.js';
|
|
31
|
+
import '../../views/menu/StyledMenu.js';
|
|
32
|
+
import '../../views/menu/StyledFloatingMenu.js';
|
|
33
|
+
import '../../views/menu/StyledItem.js';
|
|
34
|
+
import '../../views/menu/StyledItemContent.js';
|
|
35
|
+
import '../../views/menu/StyledItemGroup.js';
|
|
36
|
+
import '../../views/menu/StyledItemIcon.js';
|
|
37
|
+
import '../../views/menu/StyledItemMeta.js';
|
|
38
|
+
import '../../views/menu/StyledItemTypeIcon.js';
|
|
39
|
+
import '../../views/menu/StyledButton.js';
|
|
40
|
+
import '../../views/menu/StyledSeparator.js';
|
|
41
|
+
import { Hint } from './Hint.js';
|
|
42
|
+
import { Label } from './Label.js';
|
|
43
|
+
import { Message } from './Message.js';
|
|
44
|
+
|
|
45
|
+
const FieldComponent = forwardRef((props, ref) => {
|
|
46
|
+
const [labelProps, setLabelProps] = useState(undefined);
|
|
47
|
+
const [hintProps, setHintProps] = useState(undefined);
|
|
48
|
+
const [messageProps, setMessageProps] = useState(undefined);
|
|
49
|
+
const [hasHint, setHasHint] = useState(false);
|
|
50
|
+
const [hasMessage, setHasMessage] = useState(false);
|
|
51
|
+
const contextValue = useMemo(() => ({
|
|
52
|
+
labelProps,
|
|
53
|
+
setLabelProps,
|
|
54
|
+
hasHint,
|
|
55
|
+
setHasHint,
|
|
56
|
+
hintProps,
|
|
57
|
+
setHintProps,
|
|
58
|
+
hasMessage,
|
|
59
|
+
setHasMessage,
|
|
60
|
+
messageProps,
|
|
61
|
+
setMessageProps
|
|
62
|
+
}), [labelProps, setLabelProps, hasHint, setHasHint, hintProps, setHintProps, hasMessage, setHasMessage, messageProps, setMessageProps]);
|
|
63
|
+
return React__default.createElement(FieldContext.Provider, {
|
|
64
|
+
value: contextValue
|
|
65
|
+
}, React__default.createElement(StyledField, Object.assign({}, props, {
|
|
66
|
+
ref: ref
|
|
67
|
+
})));
|
|
68
|
+
});
|
|
69
|
+
FieldComponent.displayName = 'Field';
|
|
70
|
+
const Field = FieldComponent;
|
|
71
|
+
Field.Hint = Hint;
|
|
72
|
+
Field.Label = Label;
|
|
73
|
+
Field.Message = Message;
|
|
74
|
+
|
|
75
|
+
export { Field };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Zendesk, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Use of this source code is governed under the Apache License, Version 2.0
|
|
5
|
+
* found at http://www.apache.org/licenses/LICENSE-2.0.
|
|
6
|
+
*/
|
|
7
|
+
import React__default, { forwardRef, useEffect } from 'react';
|
|
8
|
+
import useFieldContext from '../../context/useFieldContext.js';
|
|
9
|
+
import '../../views/combobox/StyledCombobox.js';
|
|
10
|
+
import '../../views/combobox/StyledContainer.js';
|
|
11
|
+
import '../../views/combobox/StyledField.js';
|
|
12
|
+
import '../../views/combobox/StyledFloatingListbox.js';
|
|
13
|
+
import { StyledHint } from '../../views/combobox/StyledHint.js';
|
|
14
|
+
import '../../views/combobox/StyledInput.js';
|
|
15
|
+
import '../../views/combobox/StyledInputGroup.js';
|
|
16
|
+
import '../../views/combobox/StyledInputIcon.js';
|
|
17
|
+
import '../../views/combobox/StyledLabel.js';
|
|
18
|
+
import '../../views/combobox/StyledListbox.js';
|
|
19
|
+
import '../../views/combobox/StyledListboxSeparator.js';
|
|
20
|
+
import '../../views/combobox/StyledMessage.js';
|
|
21
|
+
import '../../views/combobox/StyledOptGroup.js';
|
|
22
|
+
import '../../views/combobox/StyledOption.js';
|
|
23
|
+
import '../../views/combobox/StyledOptionContent.js';
|
|
24
|
+
import '../../views/combobox/StyledOptionIcon.js';
|
|
25
|
+
import '../../views/combobox/StyledOptionMeta.js';
|
|
26
|
+
import '../../views/combobox/StyledOptionTypeIcon.js';
|
|
27
|
+
import '../../views/combobox/StyledTag.js';
|
|
28
|
+
import '../../views/combobox/StyledTagsButton.js';
|
|
29
|
+
import '../../views/combobox/StyledTrigger.js';
|
|
30
|
+
import '../../views/combobox/StyledValue.js';
|
|
31
|
+
import '../../views/menu/StyledMenu.js';
|
|
32
|
+
import '../../views/menu/StyledFloatingMenu.js';
|
|
33
|
+
import '../../views/menu/StyledItem.js';
|
|
34
|
+
import '../../views/menu/StyledItemContent.js';
|
|
35
|
+
import '../../views/menu/StyledItemGroup.js';
|
|
36
|
+
import '../../views/menu/StyledItemIcon.js';
|
|
37
|
+
import '../../views/menu/StyledItemMeta.js';
|
|
38
|
+
import '../../views/menu/StyledItemTypeIcon.js';
|
|
39
|
+
import '../../views/menu/StyledButton.js';
|
|
40
|
+
import '../../views/menu/StyledSeparator.js';
|
|
41
|
+
|
|
42
|
+
const Hint = forwardRef((props, ref) => {
|
|
43
|
+
const {
|
|
44
|
+
hintProps,
|
|
45
|
+
setHasHint
|
|
46
|
+
} = useFieldContext();
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
setHasHint(true);
|
|
49
|
+
return () => setHasHint(false);
|
|
50
|
+
}, [setHasHint]);
|
|
51
|
+
return React__default.createElement(StyledHint, Object.assign({}, hintProps, props, {
|
|
52
|
+
ref: ref
|
|
53
|
+
}));
|
|
54
|
+
});
|
|
55
|
+
Hint.displayName = 'Hint';
|
|
56
|
+
|
|
57
|
+
export { Hint };
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Zendesk, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Use of this source code is governed under the Apache License, Version 2.0
|
|
5
|
+
* found at http://www.apache.org/licenses/LICENSE-2.0.
|
|
6
|
+
*/
|
|
7
|
+
import React__default, { forwardRef } from 'react';
|
|
8
|
+
import PropTypes from 'prop-types';
|
|
9
|
+
import { composeEventHandlers } from '@zendeskgarden/container-utilities';
|
|
10
|
+
import useFieldContext from '../../context/useFieldContext.js';
|
|
11
|
+
import '../../views/combobox/StyledCombobox.js';
|
|
12
|
+
import '../../views/combobox/StyledContainer.js';
|
|
13
|
+
import '../../views/combobox/StyledField.js';
|
|
14
|
+
import '../../views/combobox/StyledFloatingListbox.js';
|
|
15
|
+
import '../../views/combobox/StyledHint.js';
|
|
16
|
+
import '../../views/combobox/StyledInput.js';
|
|
17
|
+
import '../../views/combobox/StyledInputGroup.js';
|
|
18
|
+
import '../../views/combobox/StyledInputIcon.js';
|
|
19
|
+
import { StyledLabel } from '../../views/combobox/StyledLabel.js';
|
|
20
|
+
import '../../views/combobox/StyledListbox.js';
|
|
21
|
+
import '../../views/combobox/StyledListboxSeparator.js';
|
|
22
|
+
import '../../views/combobox/StyledMessage.js';
|
|
23
|
+
import '../../views/combobox/StyledOptGroup.js';
|
|
24
|
+
import '../../views/combobox/StyledOption.js';
|
|
25
|
+
import '../../views/combobox/StyledOptionContent.js';
|
|
26
|
+
import '../../views/combobox/StyledOptionIcon.js';
|
|
27
|
+
import '../../views/combobox/StyledOptionMeta.js';
|
|
28
|
+
import '../../views/combobox/StyledOptionTypeIcon.js';
|
|
29
|
+
import '../../views/combobox/StyledTag.js';
|
|
30
|
+
import '../../views/combobox/StyledTagsButton.js';
|
|
31
|
+
import '../../views/combobox/StyledTrigger.js';
|
|
32
|
+
import '../../views/combobox/StyledValue.js';
|
|
33
|
+
import '../../views/menu/StyledMenu.js';
|
|
34
|
+
import '../../views/menu/StyledFloatingMenu.js';
|
|
35
|
+
import '../../views/menu/StyledItem.js';
|
|
36
|
+
import '../../views/menu/StyledItemContent.js';
|
|
37
|
+
import '../../views/menu/StyledItemGroup.js';
|
|
38
|
+
import '../../views/menu/StyledItemIcon.js';
|
|
39
|
+
import '../../views/menu/StyledItemMeta.js';
|
|
40
|
+
import '../../views/menu/StyledItemTypeIcon.js';
|
|
41
|
+
import '../../views/menu/StyledButton.js';
|
|
42
|
+
import '../../views/menu/StyledSeparator.js';
|
|
43
|
+
|
|
44
|
+
const Label = forwardRef((_ref, ref) => {
|
|
45
|
+
let {
|
|
46
|
+
onClick,
|
|
47
|
+
onMouseEnter,
|
|
48
|
+
onMouseLeave,
|
|
49
|
+
...props
|
|
50
|
+
} = _ref;
|
|
51
|
+
const {
|
|
52
|
+
labelProps
|
|
53
|
+
} = useFieldContext();
|
|
54
|
+
return React__default.createElement(StyledLabel, Object.assign({}, labelProps, {
|
|
55
|
+
onClick: composeEventHandlers(onClick, labelProps?.onClick),
|
|
56
|
+
onMouseEnter: composeEventHandlers(onMouseEnter, labelProps?.onMouseEnter),
|
|
57
|
+
onMouseLeave: composeEventHandlers(onMouseLeave, labelProps?.onMouseLeave)
|
|
58
|
+
}, props, {
|
|
59
|
+
ref: ref
|
|
60
|
+
}));
|
|
61
|
+
});
|
|
62
|
+
Label.displayName = 'Label';
|
|
63
|
+
Label.propTypes = {
|
|
64
|
+
hidden: PropTypes.bool,
|
|
65
|
+
isRegular: PropTypes.bool
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export { Label };
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Zendesk, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Use of this source code is governed under the Apache License, Version 2.0
|
|
5
|
+
* found at http://www.apache.org/licenses/LICENSE-2.0.
|
|
6
|
+
*/
|
|
7
|
+
import React__default, { forwardRef, useRef, useState, useContext, useEffect } from 'react';
|
|
8
|
+
import { createPortal } from 'react-dom';
|
|
9
|
+
import PropTypes from 'prop-types';
|
|
10
|
+
import { useFloating, offset, flip, size, autoUpdate } from '@floating-ui/react-dom';
|
|
11
|
+
import '../../views/combobox/StyledCombobox.js';
|
|
12
|
+
import '../../views/combobox/StyledContainer.js';
|
|
13
|
+
import '../../views/combobox/StyledField.js';
|
|
14
|
+
import { StyledFloatingListbox } from '../../views/combobox/StyledFloatingListbox.js';
|
|
15
|
+
import '../../views/combobox/StyledHint.js';
|
|
16
|
+
import '../../views/combobox/StyledInput.js';
|
|
17
|
+
import '../../views/combobox/StyledInputGroup.js';
|
|
18
|
+
import '../../views/combobox/StyledInputIcon.js';
|
|
19
|
+
import '../../views/combobox/StyledLabel.js';
|
|
20
|
+
import { StyledListbox } from '../../views/combobox/StyledListbox.js';
|
|
21
|
+
import '../../views/combobox/StyledListboxSeparator.js';
|
|
22
|
+
import '../../views/combobox/StyledMessage.js';
|
|
23
|
+
import '../../views/combobox/StyledOptGroup.js';
|
|
24
|
+
import '../../views/combobox/StyledOption.js';
|
|
25
|
+
import '../../views/combobox/StyledOptionContent.js';
|
|
26
|
+
import '../../views/combobox/StyledOptionIcon.js';
|
|
27
|
+
import '../../views/combobox/StyledOptionMeta.js';
|
|
28
|
+
import '../../views/combobox/StyledOptionTypeIcon.js';
|
|
29
|
+
import '../../views/combobox/StyledTag.js';
|
|
30
|
+
import '../../views/combobox/StyledTagsButton.js';
|
|
31
|
+
import '../../views/combobox/StyledTrigger.js';
|
|
32
|
+
import '../../views/combobox/StyledValue.js';
|
|
33
|
+
import '../../views/menu/StyledMenu.js';
|
|
34
|
+
import '../../views/menu/StyledFloatingMenu.js';
|
|
35
|
+
import '../../views/menu/StyledItem.js';
|
|
36
|
+
import '../../views/menu/StyledItemContent.js';
|
|
37
|
+
import '../../views/menu/StyledItemGroup.js';
|
|
38
|
+
import '../../views/menu/StyledItemIcon.js';
|
|
39
|
+
import '../../views/menu/StyledItemMeta.js';
|
|
40
|
+
import '../../views/menu/StyledItemTypeIcon.js';
|
|
41
|
+
import '../../views/menu/StyledButton.js';
|
|
42
|
+
import '../../views/menu/StyledSeparator.js';
|
|
43
|
+
import { ThemeContext } from 'styled-components';
|
|
44
|
+
import { DEFAULT_THEME } from '@zendeskgarden/react-theming';
|
|
45
|
+
import { composeEventHandlers } from '@zendeskgarden/container-utilities';
|
|
46
|
+
|
|
47
|
+
const Listbox = forwardRef((_ref, ref) => {
|
|
48
|
+
let {
|
|
49
|
+
appendToNode,
|
|
50
|
+
children,
|
|
51
|
+
isCompact,
|
|
52
|
+
isExpanded,
|
|
53
|
+
maxHeight,
|
|
54
|
+
minHeight,
|
|
55
|
+
onMouseDown,
|
|
56
|
+
triggerRef,
|
|
57
|
+
zIndex,
|
|
58
|
+
...props
|
|
59
|
+
} = _ref;
|
|
60
|
+
const floatingRef = useRef(null);
|
|
61
|
+
const [isVisible, setIsVisible] = useState(false);
|
|
62
|
+
const [height, setHeight] = useState();
|
|
63
|
+
const [width, setWidth] = useState();
|
|
64
|
+
const theme = useContext(ThemeContext) || DEFAULT_THEME;
|
|
65
|
+
const {
|
|
66
|
+
refs,
|
|
67
|
+
placement,
|
|
68
|
+
update,
|
|
69
|
+
floatingStyles: {
|
|
70
|
+
transform
|
|
71
|
+
}
|
|
72
|
+
} = useFloating({
|
|
73
|
+
elements: {
|
|
74
|
+
reference: triggerRef?.current,
|
|
75
|
+
floating: floatingRef?.current
|
|
76
|
+
},
|
|
77
|
+
placement: 'bottom-start',
|
|
78
|
+
middleware: [offset(theme.space.base), flip(), size({
|
|
79
|
+
apply: _ref2 => {
|
|
80
|
+
let {
|
|
81
|
+
rects,
|
|
82
|
+
availableHeight
|
|
83
|
+
} = _ref2;
|
|
84
|
+
if (rects.reference.width > 0) {
|
|
85
|
+
setWidth(rects.reference.width);
|
|
86
|
+
if (!(minHeight === null || minHeight === 'fit-content') && rects.floating.height > availableHeight) {
|
|
87
|
+
setHeight(availableHeight);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
})]
|
|
92
|
+
});
|
|
93
|
+
const handleMouseDown = event => event.preventDefault();
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
let cleanup;
|
|
96
|
+
if (isExpanded && refs.reference.current && refs.floating.current) {
|
|
97
|
+
cleanup = autoUpdate(refs.reference.current, refs.floating.current, update, {
|
|
98
|
+
elementResize: typeof ResizeObserver === 'function'
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return () => cleanup && cleanup();
|
|
102
|
+
}, [isExpanded, refs.reference, refs.floating, update]);
|
|
103
|
+
useEffect(() => {
|
|
104
|
+
let timeout;
|
|
105
|
+
if (isExpanded) {
|
|
106
|
+
setIsVisible(true);
|
|
107
|
+
} else {
|
|
108
|
+
timeout = setTimeout(() => {
|
|
109
|
+
setIsVisible(false);
|
|
110
|
+
setHeight(undefined);
|
|
111
|
+
}, 200 );
|
|
112
|
+
}
|
|
113
|
+
return () => clearTimeout(timeout);
|
|
114
|
+
}, [isExpanded]);
|
|
115
|
+
useEffect(() => {
|
|
116
|
+
if (height) {
|
|
117
|
+
setHeight(undefined);
|
|
118
|
+
update();
|
|
119
|
+
}
|
|
120
|
+
}, [
|
|
121
|
+
children, update]);
|
|
122
|
+
const Node = React__default.createElement(StyledFloatingListbox, {
|
|
123
|
+
"data-garden-animate": isVisible ? 'true' : 'false',
|
|
124
|
+
isHidden: !isExpanded,
|
|
125
|
+
position: placement === 'bottom-start' ? 'bottom' : 'top',
|
|
126
|
+
style: {
|
|
127
|
+
transform,
|
|
128
|
+
width
|
|
129
|
+
},
|
|
130
|
+
zIndex: zIndex,
|
|
131
|
+
ref: floatingRef
|
|
132
|
+
}, React__default.createElement(StyledListbox, Object.assign({
|
|
133
|
+
isCompact: isCompact,
|
|
134
|
+
maxHeight: maxHeight,
|
|
135
|
+
minHeight: minHeight,
|
|
136
|
+
onMouseDown: composeEventHandlers(onMouseDown, handleMouseDown),
|
|
137
|
+
style: {
|
|
138
|
+
height
|
|
139
|
+
}
|
|
140
|
+
}, props, {
|
|
141
|
+
ref: ref
|
|
142
|
+
}), isVisible && children));
|
|
143
|
+
return appendToNode ? createPortal(Node, appendToNode) : Node;
|
|
144
|
+
});
|
|
145
|
+
Listbox.displayName = 'Listbox';
|
|
146
|
+
Listbox.propTypes = {
|
|
147
|
+
appendToNode: PropTypes.any,
|
|
148
|
+
isCompact: PropTypes.bool,
|
|
149
|
+
isExpanded: PropTypes.bool,
|
|
150
|
+
maxHeight: PropTypes.string,
|
|
151
|
+
triggerRef: PropTypes.any.isRequired,
|
|
152
|
+
zIndex: PropTypes.number
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
export { Listbox };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Zendesk, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Use of this source code is governed under the Apache License, Version 2.0
|
|
5
|
+
* found at http://www.apache.org/licenses/LICENSE-2.0.
|
|
6
|
+
*/
|
|
7
|
+
import React__default, { forwardRef, useEffect } from 'react';
|
|
8
|
+
import PropTypes from 'prop-types';
|
|
9
|
+
import { VALIDATION } from '@zendeskgarden/react-forms';
|
|
10
|
+
import useFieldContext from '../../context/useFieldContext.js';
|
|
11
|
+
import '../../views/combobox/StyledCombobox.js';
|
|
12
|
+
import '../../views/combobox/StyledContainer.js';
|
|
13
|
+
import '../../views/combobox/StyledField.js';
|
|
14
|
+
import '../../views/combobox/StyledFloatingListbox.js';
|
|
15
|
+
import '../../views/combobox/StyledHint.js';
|
|
16
|
+
import '../../views/combobox/StyledInput.js';
|
|
17
|
+
import '../../views/combobox/StyledInputGroup.js';
|
|
18
|
+
import '../../views/combobox/StyledInputIcon.js';
|
|
19
|
+
import '../../views/combobox/StyledLabel.js';
|
|
20
|
+
import '../../views/combobox/StyledListbox.js';
|
|
21
|
+
import '../../views/combobox/StyledListboxSeparator.js';
|
|
22
|
+
import { StyledMessage } from '../../views/combobox/StyledMessage.js';
|
|
23
|
+
import '../../views/combobox/StyledOptGroup.js';
|
|
24
|
+
import '../../views/combobox/StyledOption.js';
|
|
25
|
+
import '../../views/combobox/StyledOptionContent.js';
|
|
26
|
+
import '../../views/combobox/StyledOptionIcon.js';
|
|
27
|
+
import '../../views/combobox/StyledOptionMeta.js';
|
|
28
|
+
import '../../views/combobox/StyledOptionTypeIcon.js';
|
|
29
|
+
import '../../views/combobox/StyledTag.js';
|
|
30
|
+
import '../../views/combobox/StyledTagsButton.js';
|
|
31
|
+
import '../../views/combobox/StyledTrigger.js';
|
|
32
|
+
import '../../views/combobox/StyledValue.js';
|
|
33
|
+
import '../../views/menu/StyledMenu.js';
|
|
34
|
+
import '../../views/menu/StyledFloatingMenu.js';
|
|
35
|
+
import '../../views/menu/StyledItem.js';
|
|
36
|
+
import '../../views/menu/StyledItemContent.js';
|
|
37
|
+
import '../../views/menu/StyledItemGroup.js';
|
|
38
|
+
import '../../views/menu/StyledItemIcon.js';
|
|
39
|
+
import '../../views/menu/StyledItemMeta.js';
|
|
40
|
+
import '../../views/menu/StyledItemTypeIcon.js';
|
|
41
|
+
import '../../views/menu/StyledButton.js';
|
|
42
|
+
import '../../views/menu/StyledSeparator.js';
|
|
43
|
+
|
|
44
|
+
const Message = forwardRef((props, ref) => {
|
|
45
|
+
const {
|
|
46
|
+
messageProps,
|
|
47
|
+
setHasMessage
|
|
48
|
+
} = useFieldContext();
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
setHasMessage(true);
|
|
51
|
+
return () => setHasMessage(false);
|
|
52
|
+
}, [setHasMessage]);
|
|
53
|
+
return React__default.createElement(StyledMessage, Object.assign({}, messageProps, props, {
|
|
54
|
+
ref: ref
|
|
55
|
+
}));
|
|
56
|
+
});
|
|
57
|
+
Message.displayName = 'Message';
|
|
58
|
+
Message.propTypes = {
|
|
59
|
+
validation: PropTypes.oneOf(VALIDATION),
|
|
60
|
+
validationLabel: PropTypes.string
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export { Message };
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Zendesk, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Use of this source code is governed under the Apache License, Version 2.0
|
|
5
|
+
* found at http://www.apache.org/licenses/LICENSE-2.0.
|
|
6
|
+
*/
|
|
7
|
+
import React__default, { forwardRef } from 'react';
|
|
8
|
+
import PropTypes from 'prop-types';
|
|
9
|
+
import { composeEventHandlers } from '@zendeskgarden/container-utilities';
|
|
10
|
+
import { useText } from '@zendeskgarden/react-theming';
|
|
11
|
+
import useComboboxContext from '../../context/useComboboxContext.js';
|
|
12
|
+
import '../../views/combobox/StyledCombobox.js';
|
|
13
|
+
import '../../views/combobox/StyledContainer.js';
|
|
14
|
+
import '../../views/combobox/StyledField.js';
|
|
15
|
+
import '../../views/combobox/StyledFloatingListbox.js';
|
|
16
|
+
import '../../views/combobox/StyledHint.js';
|
|
17
|
+
import '../../views/combobox/StyledInput.js';
|
|
18
|
+
import '../../views/combobox/StyledInputGroup.js';
|
|
19
|
+
import '../../views/combobox/StyledInputIcon.js';
|
|
20
|
+
import '../../views/combobox/StyledLabel.js';
|
|
21
|
+
import '../../views/combobox/StyledListbox.js';
|
|
22
|
+
import { StyledListboxSeparator } from '../../views/combobox/StyledListboxSeparator.js';
|
|
23
|
+
import '../../views/combobox/StyledMessage.js';
|
|
24
|
+
import { StyledOptGroup } from '../../views/combobox/StyledOptGroup.js';
|
|
25
|
+
import { StyledOption } from '../../views/combobox/StyledOption.js';
|
|
26
|
+
import { StyledOptionContent } from '../../views/combobox/StyledOptionContent.js';
|
|
27
|
+
import '../../views/combobox/StyledOptionIcon.js';
|
|
28
|
+
import '../../views/combobox/StyledOptionMeta.js';
|
|
29
|
+
import { StyledOptionTypeIcon } from '../../views/combobox/StyledOptionTypeIcon.js';
|
|
30
|
+
import '../../views/combobox/StyledTag.js';
|
|
31
|
+
import '../../views/combobox/StyledTagsButton.js';
|
|
32
|
+
import '../../views/combobox/StyledTrigger.js';
|
|
33
|
+
import '../../views/combobox/StyledValue.js';
|
|
34
|
+
import '../../views/menu/StyledMenu.js';
|
|
35
|
+
import '../../views/menu/StyledFloatingMenu.js';
|
|
36
|
+
import '../../views/menu/StyledItem.js';
|
|
37
|
+
import '../../views/menu/StyledItemContent.js';
|
|
38
|
+
import '../../views/menu/StyledItemGroup.js';
|
|
39
|
+
import '../../views/menu/StyledItemIcon.js';
|
|
40
|
+
import '../../views/menu/StyledItemMeta.js';
|
|
41
|
+
import '../../views/menu/StyledItemTypeIcon.js';
|
|
42
|
+
import '../../views/menu/StyledButton.js';
|
|
43
|
+
import '../../views/menu/StyledSeparator.js';
|
|
44
|
+
|
|
45
|
+
const OptGroup = forwardRef((_ref, ref) => {
|
|
46
|
+
let {
|
|
47
|
+
children,
|
|
48
|
+
content,
|
|
49
|
+
icon,
|
|
50
|
+
legend,
|
|
51
|
+
'aria-label': ariaLabel,
|
|
52
|
+
onMouseDown,
|
|
53
|
+
...props
|
|
54
|
+
} = _ref;
|
|
55
|
+
const {
|
|
56
|
+
getOptGroupProps,
|
|
57
|
+
isCompact
|
|
58
|
+
} = useComboboxContext();
|
|
59
|
+
const handleMouseDown = event => event.preventDefault();
|
|
60
|
+
const groupAriaLabel = useText(OptGroup, {
|
|
61
|
+
'aria-label': ariaLabel
|
|
62
|
+
}, 'aria-label', 'Group', !legend );
|
|
63
|
+
const optGroupProps = getOptGroupProps({
|
|
64
|
+
'aria-label': groupAriaLabel || legend
|
|
65
|
+
});
|
|
66
|
+
return React__default.createElement(StyledOption, Object.assign({
|
|
67
|
+
isCompact: isCompact,
|
|
68
|
+
$type: "group",
|
|
69
|
+
onMouseDown: composeEventHandlers(onMouseDown, handleMouseDown),
|
|
70
|
+
role: "none"
|
|
71
|
+
}, props, {
|
|
72
|
+
ref: ref
|
|
73
|
+
}), React__default.createElement(StyledOptionContent, null, (content || legend) && React__default.createElement(StyledOption, {
|
|
74
|
+
as: "div",
|
|
75
|
+
isCompact: isCompact,
|
|
76
|
+
$type: "header"
|
|
77
|
+
}, icon && React__default.createElement(StyledOptionTypeIcon, {
|
|
78
|
+
$isCompact: isCompact,
|
|
79
|
+
$type: "header"
|
|
80
|
+
}, icon), content || legend), React__default.createElement(StyledOptGroup, Object.assign({
|
|
81
|
+
isCompact: isCompact
|
|
82
|
+
}, optGroupProps), React__default.createElement(StyledListboxSeparator, {
|
|
83
|
+
role: "none"
|
|
84
|
+
}), children)));
|
|
85
|
+
});
|
|
86
|
+
OptGroup.displayName = 'OptGroup';
|
|
87
|
+
OptGroup.propTypes = {
|
|
88
|
+
content: PropTypes.any,
|
|
89
|
+
icon: PropTypes.any,
|
|
90
|
+
legend: PropTypes.string
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
export { OptGroup };
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Zendesk, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Use of this source code is governed under the Apache License, Version 2.0
|
|
5
|
+
* found at http://www.apache.org/licenses/LICENSE-2.0.
|
|
6
|
+
*/
|
|
7
|
+
import React__default, { forwardRef, useMemo, useRef, useEffect } from 'react';
|
|
8
|
+
import PropTypes from 'prop-types';
|
|
9
|
+
import { mergeRefs } from 'react-merge-refs';
|
|
10
|
+
import SvgPlusStroke from '../../node_modules/@zendeskgarden/svg-icons/src/16/plus-stroke.svg.js';
|
|
11
|
+
import SvgChevronRightStroke from '../../node_modules/@zendeskgarden/svg-icons/src/16/chevron-right-stroke.svg.js';
|
|
12
|
+
import SvgChevronLeftStroke from '../../node_modules/@zendeskgarden/svg-icons/src/16/chevron-left-stroke.svg.js';
|
|
13
|
+
import SvgCheckLgStroke from '../../node_modules/@zendeskgarden/svg-icons/src/16/check-lg-stroke.svg.js';
|
|
14
|
+
import { OPTION_TYPE } from '../../types/index.js';
|
|
15
|
+
import useComboboxContext from '../../context/useComboboxContext.js';
|
|
16
|
+
import { OptionContext } from '../../context/useOptionContext.js';
|
|
17
|
+
import '../../views/combobox/StyledCombobox.js';
|
|
18
|
+
import '../../views/combobox/StyledContainer.js';
|
|
19
|
+
import '../../views/combobox/StyledField.js';
|
|
20
|
+
import '../../views/combobox/StyledFloatingListbox.js';
|
|
21
|
+
import '../../views/combobox/StyledHint.js';
|
|
22
|
+
import '../../views/combobox/StyledInput.js';
|
|
23
|
+
import '../../views/combobox/StyledInputGroup.js';
|
|
24
|
+
import '../../views/combobox/StyledInputIcon.js';
|
|
25
|
+
import '../../views/combobox/StyledLabel.js';
|
|
26
|
+
import '../../views/combobox/StyledListbox.js';
|
|
27
|
+
import '../../views/combobox/StyledListboxSeparator.js';
|
|
28
|
+
import '../../views/combobox/StyledMessage.js';
|
|
29
|
+
import '../../views/combobox/StyledOptGroup.js';
|
|
30
|
+
import { StyledOption } from '../../views/combobox/StyledOption.js';
|
|
31
|
+
import { StyledOptionContent } from '../../views/combobox/StyledOptionContent.js';
|
|
32
|
+
import { StyledOptionIcon } from '../../views/combobox/StyledOptionIcon.js';
|
|
33
|
+
import '../../views/combobox/StyledOptionMeta.js';
|
|
34
|
+
import { StyledOptionTypeIcon } from '../../views/combobox/StyledOptionTypeIcon.js';
|
|
35
|
+
import '../../views/combobox/StyledTag.js';
|
|
36
|
+
import '../../views/combobox/StyledTagsButton.js';
|
|
37
|
+
import '../../views/combobox/StyledTrigger.js';
|
|
38
|
+
import '../../views/combobox/StyledValue.js';
|
|
39
|
+
import '../../views/menu/StyledMenu.js';
|
|
40
|
+
import '../../views/menu/StyledFloatingMenu.js';
|
|
41
|
+
import '../../views/menu/StyledItem.js';
|
|
42
|
+
import '../../views/menu/StyledItemContent.js';
|
|
43
|
+
import '../../views/menu/StyledItemGroup.js';
|
|
44
|
+
import '../../views/menu/StyledItemIcon.js';
|
|
45
|
+
import '../../views/menu/StyledItemMeta.js';
|
|
46
|
+
import '../../views/menu/StyledItemTypeIcon.js';
|
|
47
|
+
import '../../views/menu/StyledButton.js';
|
|
48
|
+
import '../../views/menu/StyledSeparator.js';
|
|
49
|
+
import { OptionMeta } from './OptionMeta.js';
|
|
50
|
+
import { toOption } from './utils.js';
|
|
51
|
+
|
|
52
|
+
const OptionComponent = forwardRef((_ref, ref) => {
|
|
53
|
+
let {
|
|
54
|
+
children,
|
|
55
|
+
icon,
|
|
56
|
+
isDisabled,
|
|
57
|
+
isHidden,
|
|
58
|
+
isSelected,
|
|
59
|
+
label,
|
|
60
|
+
type,
|
|
61
|
+
value,
|
|
62
|
+
...props
|
|
63
|
+
} = _ref;
|
|
64
|
+
const contextValue = useMemo(() => ({
|
|
65
|
+
isDisabled
|
|
66
|
+
}), [isDisabled]);
|
|
67
|
+
const {
|
|
68
|
+
activeValue,
|
|
69
|
+
getOptionProps,
|
|
70
|
+
isCompact
|
|
71
|
+
} = useComboboxContext();
|
|
72
|
+
const isActive = value === activeValue;
|
|
73
|
+
const optionRef = useRef(null);
|
|
74
|
+
useEffect(() => {
|
|
75
|
+
if (isActive) {
|
|
76
|
+
setTimeout(() => {
|
|
77
|
+
if (optionRef.current && optionRef.current.scrollIntoView) {
|
|
78
|
+
optionRef.current.scrollIntoView({
|
|
79
|
+
block: 'nearest'
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}, [isActive]);
|
|
85
|
+
const renderActionIcon = iconType => {
|
|
86
|
+
switch (iconType) {
|
|
87
|
+
case 'add':
|
|
88
|
+
return React__default.createElement(SvgPlusStroke, null);
|
|
89
|
+
case 'next':
|
|
90
|
+
return React__default.createElement(SvgChevronRightStroke, null);
|
|
91
|
+
case 'previous':
|
|
92
|
+
return React__default.createElement(SvgChevronLeftStroke, null);
|
|
93
|
+
default:
|
|
94
|
+
return React__default.createElement(SvgCheckLgStroke, null);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
const option = toOption({
|
|
98
|
+
value,
|
|
99
|
+
label,
|
|
100
|
+
isDisabled,
|
|
101
|
+
isHidden,
|
|
102
|
+
isSelected
|
|
103
|
+
});
|
|
104
|
+
const optionProps = getOptionProps({
|
|
105
|
+
option,
|
|
106
|
+
ref: mergeRefs([optionRef, ref])
|
|
107
|
+
});
|
|
108
|
+
return React__default.createElement(OptionContext.Provider, {
|
|
109
|
+
value: contextValue
|
|
110
|
+
}, React__default.createElement(StyledOption, Object.assign({
|
|
111
|
+
isActive: isActive,
|
|
112
|
+
isCompact: isCompact,
|
|
113
|
+
$type: type
|
|
114
|
+
}, props, optionProps), React__default.createElement(StyledOptionTypeIcon, {
|
|
115
|
+
$isCompact: isCompact,
|
|
116
|
+
$type: type
|
|
117
|
+
}, renderActionIcon(type)), icon && React__default.createElement(StyledOptionIcon, null, icon), React__default.createElement(StyledOptionContent, null, children || label || value)));
|
|
118
|
+
});
|
|
119
|
+
OptionComponent.displayName = 'Option';
|
|
120
|
+
OptionComponent.propTypes = {
|
|
121
|
+
icon: PropTypes.any,
|
|
122
|
+
isDisabled: PropTypes.bool,
|
|
123
|
+
isSelected: PropTypes.bool,
|
|
124
|
+
isHidden: PropTypes.bool,
|
|
125
|
+
label: PropTypes.string,
|
|
126
|
+
tagProps: PropTypes.object,
|
|
127
|
+
type: PropTypes.oneOf(OPTION_TYPE),
|
|
128
|
+
value: PropTypes.string.isRequired
|
|
129
|
+
};
|
|
130
|
+
const Option = OptionComponent;
|
|
131
|
+
Option.Meta = OptionMeta;
|
|
132
|
+
|
|
133
|
+
export { Option };
|