@zendeskgarden/react-dropdowns 9.0.0-next.0 → 9.0.0-next.10
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,55 @@
|
|
|
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 useOptionContext from '../../context/useOptionContext.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 '../../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 { StyledOptionMeta } from '../../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 OptionMetaComponent = forwardRef((props, ref) => {
|
|
43
|
+
const {
|
|
44
|
+
isDisabled
|
|
45
|
+
} = useOptionContext();
|
|
46
|
+
return React__default.createElement(StyledOptionMeta, Object.assign({
|
|
47
|
+
isDisabled: isDisabled
|
|
48
|
+
}, props, {
|
|
49
|
+
ref: ref
|
|
50
|
+
}));
|
|
51
|
+
});
|
|
52
|
+
OptionMetaComponent.displayName = 'Option.Meta';
|
|
53
|
+
const OptionMeta = OptionMetaComponent;
|
|
54
|
+
|
|
55
|
+
export { OptionMeta };
|
|
@@ -0,0 +1,98 @@
|
|
|
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, useContext } from 'react';
|
|
8
|
+
import PropTypes from 'prop-types';
|
|
9
|
+
import { ThemeContext } from 'styled-components';
|
|
10
|
+
import { useText, DEFAULT_THEME, useDocument } from '@zendeskgarden/react-theming';
|
|
11
|
+
import { Tooltip } from '@zendeskgarden/react-tooltips';
|
|
12
|
+
import useComboboxContext from '../../context/useComboboxContext.js';
|
|
13
|
+
import '../../views/combobox/StyledCombobox.js';
|
|
14
|
+
import '../../views/combobox/StyledContainer.js';
|
|
15
|
+
import '../../views/combobox/StyledField.js';
|
|
16
|
+
import '../../views/combobox/StyledFloatingListbox.js';
|
|
17
|
+
import '../../views/combobox/StyledHint.js';
|
|
18
|
+
import '../../views/combobox/StyledInput.js';
|
|
19
|
+
import '../../views/combobox/StyledInputGroup.js';
|
|
20
|
+
import '../../views/combobox/StyledInputIcon.js';
|
|
21
|
+
import '../../views/combobox/StyledLabel.js';
|
|
22
|
+
import '../../views/combobox/StyledListbox.js';
|
|
23
|
+
import '../../views/combobox/StyledListboxSeparator.js';
|
|
24
|
+
import '../../views/combobox/StyledMessage.js';
|
|
25
|
+
import '../../views/combobox/StyledOptGroup.js';
|
|
26
|
+
import '../../views/combobox/StyledOption.js';
|
|
27
|
+
import '../../views/combobox/StyledOptionContent.js';
|
|
28
|
+
import '../../views/combobox/StyledOptionIcon.js';
|
|
29
|
+
import '../../views/combobox/StyledOptionMeta.js';
|
|
30
|
+
import '../../views/combobox/StyledOptionTypeIcon.js';
|
|
31
|
+
import { StyledTag } from '../../views/combobox/StyledTag.js';
|
|
32
|
+
import '../../views/combobox/StyledTagsButton.js';
|
|
33
|
+
import '../../views/combobox/StyledTrigger.js';
|
|
34
|
+
import '../../views/combobox/StyledValue.js';
|
|
35
|
+
import '../../views/menu/StyledMenu.js';
|
|
36
|
+
import '../../views/menu/StyledFloatingMenu.js';
|
|
37
|
+
import '../../views/menu/StyledItem.js';
|
|
38
|
+
import '../../views/menu/StyledItemContent.js';
|
|
39
|
+
import '../../views/menu/StyledItemGroup.js';
|
|
40
|
+
import '../../views/menu/StyledItemIcon.js';
|
|
41
|
+
import '../../views/menu/StyledItemMeta.js';
|
|
42
|
+
import '../../views/menu/StyledItemTypeIcon.js';
|
|
43
|
+
import '../../views/menu/StyledButton.js';
|
|
44
|
+
import '../../views/menu/StyledSeparator.js';
|
|
45
|
+
import { TagAvatar } from './TagAvatar.js';
|
|
46
|
+
|
|
47
|
+
const TagComponent = forwardRef((_ref, ref) => {
|
|
48
|
+
let {
|
|
49
|
+
children,
|
|
50
|
+
option,
|
|
51
|
+
removeLabel,
|
|
52
|
+
tooltipZIndex,
|
|
53
|
+
...props
|
|
54
|
+
} = _ref;
|
|
55
|
+
const {
|
|
56
|
+
getTagProps,
|
|
57
|
+
isCompact,
|
|
58
|
+
removeSelection
|
|
59
|
+
} = useComboboxContext();
|
|
60
|
+
const text = option.label || option.value;
|
|
61
|
+
const ariaLabel = useText(
|
|
62
|
+
Tag, props, 'aria-label', `${text}, press delete or backspace to remove`, !option.disabled);
|
|
63
|
+
const tagProps = getTagProps({
|
|
64
|
+
option,
|
|
65
|
+
'aria-label': ariaLabel
|
|
66
|
+
});
|
|
67
|
+
const theme = useContext(ThemeContext) || DEFAULT_THEME;
|
|
68
|
+
const doc = useDocument(theme);
|
|
69
|
+
const handleClick = () => removeSelection(option.value);
|
|
70
|
+
return React__default.createElement(StyledTag, Object.assign({
|
|
71
|
+
"aria-disabled": option.disabled,
|
|
72
|
+
tabIndex: option.disabled ? undefined : 0
|
|
73
|
+
}, tagProps, props, {
|
|
74
|
+
size: isCompact ? 'medium' : 'large',
|
|
75
|
+
ref: ref
|
|
76
|
+
}), children || React__default.createElement("span", null, text), !option.disabled && (removeLabel ?
|
|
77
|
+
React__default.createElement(Tooltip, {
|
|
78
|
+
appendToNode: doc?.body,
|
|
79
|
+
content: removeLabel,
|
|
80
|
+
zIndex: tooltipZIndex
|
|
81
|
+
}, React__default.createElement(StyledTag.Close, {
|
|
82
|
+
"aria-label": removeLabel,
|
|
83
|
+
onClick: handleClick
|
|
84
|
+
})) : React__default.createElement(StyledTag.Close, {
|
|
85
|
+
onClick: handleClick
|
|
86
|
+
})));
|
|
87
|
+
});
|
|
88
|
+
TagComponent.displayName = 'Tag';
|
|
89
|
+
TagComponent.propTypes = {
|
|
90
|
+
hue: PropTypes.string,
|
|
91
|
+
isPill: PropTypes.bool,
|
|
92
|
+
isRegular: PropTypes.bool,
|
|
93
|
+
removeLabel: PropTypes.string
|
|
94
|
+
};
|
|
95
|
+
const Tag = TagComponent;
|
|
96
|
+
Tag.Avatar = TagAvatar;
|
|
97
|
+
|
|
98
|
+
export { Tag };
|
|
@@ -0,0 +1,13 @@
|
|
|
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 { Tag } from '@zendeskgarden/react-tags';
|
|
8
|
+
|
|
9
|
+
const TagAvatarComponent = Tag.Avatar;
|
|
10
|
+
TagAvatarComponent.displayName = 'Tag.Avatar';
|
|
11
|
+
const TagAvatar = TagAvatarComponent;
|
|
12
|
+
|
|
13
|
+
export { TagAvatar };
|
|
@@ -0,0 +1,35 @@
|
|
|
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 from 'react';
|
|
8
|
+
import { Tag } from './Tag.js';
|
|
9
|
+
|
|
10
|
+
const TagGroup = _ref => {
|
|
11
|
+
let {
|
|
12
|
+
children,
|
|
13
|
+
isDisabled,
|
|
14
|
+
isExpanded,
|
|
15
|
+
listboxZIndex,
|
|
16
|
+
maxTags,
|
|
17
|
+
optionTagProps,
|
|
18
|
+
selection
|
|
19
|
+
} = _ref;
|
|
20
|
+
return React__default.createElement(React__default.Fragment, null, selection.map((option, index) => {
|
|
21
|
+
const disabled = isDisabled || option.disabled;
|
|
22
|
+
return React__default.createElement(Tag, Object.assign({
|
|
23
|
+
key: option.value,
|
|
24
|
+
hidden: !isExpanded && index >= maxTags,
|
|
25
|
+
option: {
|
|
26
|
+
...option,
|
|
27
|
+
disabled
|
|
28
|
+
},
|
|
29
|
+
tooltipZIndex: listboxZIndex ? listboxZIndex + 1 : undefined
|
|
30
|
+
}, optionTagProps[option.value]));
|
|
31
|
+
}), children);
|
|
32
|
+
};
|
|
33
|
+
TagGroup.displayName = 'TagGroup';
|
|
34
|
+
|
|
35
|
+
export { TagGroup };
|
|
@@ -0,0 +1,36 @@
|
|
|
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 { Children, isValidElement } from 'react';
|
|
8
|
+
|
|
9
|
+
const toOption = props => {
|
|
10
|
+
return {
|
|
11
|
+
value: props.value,
|
|
12
|
+
label: props.label,
|
|
13
|
+
hidden: props.isHidden,
|
|
14
|
+
disabled: props.isDisabled,
|
|
15
|
+
selected: props.isSelected
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
const toOptions = (children, optionTagProps) => Children.toArray(children).reduce((options, option) => {
|
|
19
|
+
const retVal = options;
|
|
20
|
+
if ( isValidElement(option)) {
|
|
21
|
+
if ('value' in option.props) {
|
|
22
|
+
retVal.push(toOption(option.props));
|
|
23
|
+
optionTagProps[option.props.value] = option.props.tagProps;
|
|
24
|
+
} else {
|
|
25
|
+
const props = option.props;
|
|
26
|
+
const groupOptions = toOptions(props.children, optionTagProps);
|
|
27
|
+
retVal.push({
|
|
28
|
+
label: props.legend,
|
|
29
|
+
options: groupOptions
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return retVal;
|
|
34
|
+
}, []);
|
|
35
|
+
|
|
36
|
+
export { toOption, toOptions };
|
|
@@ -0,0 +1,140 @@
|
|
|
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 } 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 '../../views/combobox/StyledCombobox.js';
|
|
16
|
+
import '../../views/combobox/StyledContainer.js';
|
|
17
|
+
import '../../views/combobox/StyledField.js';
|
|
18
|
+
import '../../views/combobox/StyledFloatingListbox.js';
|
|
19
|
+
import '../../views/combobox/StyledHint.js';
|
|
20
|
+
import '../../views/combobox/StyledInput.js';
|
|
21
|
+
import '../../views/combobox/StyledInputGroup.js';
|
|
22
|
+
import '../../views/combobox/StyledInputIcon.js';
|
|
23
|
+
import '../../views/combobox/StyledLabel.js';
|
|
24
|
+
import '../../views/combobox/StyledListbox.js';
|
|
25
|
+
import '../../views/combobox/StyledListboxSeparator.js';
|
|
26
|
+
import '../../views/combobox/StyledMessage.js';
|
|
27
|
+
import '../../views/combobox/StyledOptGroup.js';
|
|
28
|
+
import '../../views/combobox/StyledOption.js';
|
|
29
|
+
import '../../views/combobox/StyledOptionContent.js';
|
|
30
|
+
import '../../views/combobox/StyledOptionIcon.js';
|
|
31
|
+
import '../../views/combobox/StyledOptionMeta.js';
|
|
32
|
+
import '../../views/combobox/StyledOptionTypeIcon.js';
|
|
33
|
+
import '../../views/combobox/StyledTag.js';
|
|
34
|
+
import '../../views/combobox/StyledTagsButton.js';
|
|
35
|
+
import '../../views/combobox/StyledTrigger.js';
|
|
36
|
+
import '../../views/combobox/StyledValue.js';
|
|
37
|
+
import '../../views/menu/StyledMenu.js';
|
|
38
|
+
import '../../views/menu/StyledFloatingMenu.js';
|
|
39
|
+
import { StyledItem } from '../../views/menu/StyledItem.js';
|
|
40
|
+
import { StyledItemContent } from '../../views/menu/StyledItemContent.js';
|
|
41
|
+
import '../../views/menu/StyledItemGroup.js';
|
|
42
|
+
import { StyledItemIcon } from '../../views/menu/StyledItemIcon.js';
|
|
43
|
+
import '../../views/menu/StyledItemMeta.js';
|
|
44
|
+
import { StyledItemTypeIcon } from '../../views/menu/StyledItemTypeIcon.js';
|
|
45
|
+
import '../../views/menu/StyledButton.js';
|
|
46
|
+
import '../../views/menu/StyledSeparator.js';
|
|
47
|
+
import { ItemMeta } from './ItemMeta.js';
|
|
48
|
+
import useMenuContext from '../../context/useMenuContext.js';
|
|
49
|
+
import useItemGroupContext from '../../context/useItemGroupContext.js';
|
|
50
|
+
import { ItemContext } from '../../context/useItemContext.js';
|
|
51
|
+
import { toItem } from './utils.js';
|
|
52
|
+
|
|
53
|
+
const ItemComponent = forwardRef((_ref, ref) => {
|
|
54
|
+
let {
|
|
55
|
+
children,
|
|
56
|
+
value,
|
|
57
|
+
label = value,
|
|
58
|
+
isSelected,
|
|
59
|
+
icon,
|
|
60
|
+
isDisabled,
|
|
61
|
+
type,
|
|
62
|
+
name,
|
|
63
|
+
onClick,
|
|
64
|
+
onKeyDown,
|
|
65
|
+
onMouseEnter,
|
|
66
|
+
...props
|
|
67
|
+
} = _ref;
|
|
68
|
+
const {
|
|
69
|
+
type: selectionType
|
|
70
|
+
} = useItemGroupContext();
|
|
71
|
+
const {
|
|
72
|
+
focusedValue,
|
|
73
|
+
getItemProps
|
|
74
|
+
} = useMenuContext();
|
|
75
|
+
const item = {
|
|
76
|
+
...toItem({
|
|
77
|
+
value,
|
|
78
|
+
label,
|
|
79
|
+
name,
|
|
80
|
+
type,
|
|
81
|
+
isSelected,
|
|
82
|
+
isDisabled
|
|
83
|
+
}),
|
|
84
|
+
type: selectionType
|
|
85
|
+
};
|
|
86
|
+
const {
|
|
87
|
+
ref: _itemRef,
|
|
88
|
+
...itemProps
|
|
89
|
+
} = getItemProps({
|
|
90
|
+
item,
|
|
91
|
+
onClick,
|
|
92
|
+
onKeyDown,
|
|
93
|
+
onMouseEnter
|
|
94
|
+
});
|
|
95
|
+
const isActive = value === focusedValue;
|
|
96
|
+
const {
|
|
97
|
+
isCompact
|
|
98
|
+
} = useMenuContext();
|
|
99
|
+
const renderActionIcon = iconType => {
|
|
100
|
+
switch (iconType) {
|
|
101
|
+
case 'add':
|
|
102
|
+
return React__default.createElement(SvgPlusStroke, null);
|
|
103
|
+
case 'next':
|
|
104
|
+
return React__default.createElement(SvgChevronRightStroke, null);
|
|
105
|
+
case 'previous':
|
|
106
|
+
return React__default.createElement(SvgChevronLeftStroke, null);
|
|
107
|
+
default:
|
|
108
|
+
return React__default.createElement(SvgCheckLgStroke, null);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
const contextValue = useMemo(() => ({
|
|
112
|
+
isDisabled
|
|
113
|
+
}), [isDisabled]);
|
|
114
|
+
return React__default.createElement(ItemContext.Provider, {
|
|
115
|
+
value: contextValue
|
|
116
|
+
}, React__default.createElement(StyledItem, Object.assign({
|
|
117
|
+
$type: type,
|
|
118
|
+
isCompact: isCompact,
|
|
119
|
+
isActive: isActive
|
|
120
|
+
}, props, itemProps, {
|
|
121
|
+
ref: mergeRefs([_itemRef, ref])
|
|
122
|
+
}), React__default.createElement(StyledItemTypeIcon, {
|
|
123
|
+
$isCompact: isCompact,
|
|
124
|
+
$type: type
|
|
125
|
+
}, renderActionIcon(type)), icon && React__default.createElement(StyledItemIcon, null, icon), React__default.createElement(StyledItemContent, null, children || label)));
|
|
126
|
+
});
|
|
127
|
+
ItemComponent.displayName = 'Item';
|
|
128
|
+
ItemComponent.propTypes = {
|
|
129
|
+
icon: PropTypes.any,
|
|
130
|
+
isDisabled: PropTypes.bool,
|
|
131
|
+
isSelected: PropTypes.bool,
|
|
132
|
+
label: PropTypes.string,
|
|
133
|
+
name: PropTypes.string,
|
|
134
|
+
type: PropTypes.oneOf(OPTION_TYPE),
|
|
135
|
+
value: PropTypes.string.isRequired
|
|
136
|
+
};
|
|
137
|
+
const Item = ItemComponent;
|
|
138
|
+
Item.Meta = ItemMeta;
|
|
139
|
+
|
|
140
|
+
export { Item };
|
|
@@ -0,0 +1,96 @@
|
|
|
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 } from 'react';
|
|
8
|
+
import PropTypes from 'prop-types';
|
|
9
|
+
import { useText } from '@zendeskgarden/react-theming';
|
|
10
|
+
import useMenuContext from '../../context/useMenuContext.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 '../../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 { StyledItem } from '../../views/menu/StyledItem.js';
|
|
36
|
+
import { StyledItemContent } from '../../views/menu/StyledItemContent.js';
|
|
37
|
+
import { StyledItemGroup } from '../../views/menu/StyledItemGroup.js';
|
|
38
|
+
import '../../views/menu/StyledItemIcon.js';
|
|
39
|
+
import '../../views/menu/StyledItemMeta.js';
|
|
40
|
+
import { StyledItemTypeIcon } from '../../views/menu/StyledItemTypeIcon.js';
|
|
41
|
+
import '../../views/menu/StyledButton.js';
|
|
42
|
+
import { StyledSeparator } from '../../views/menu/StyledSeparator.js';
|
|
43
|
+
import { ItemGroupContext } from '../../context/useItemGroupContext.js';
|
|
44
|
+
|
|
45
|
+
const ItemGroup = forwardRef((_ref, ref) => {
|
|
46
|
+
let {
|
|
47
|
+
children,
|
|
48
|
+
content,
|
|
49
|
+
legend,
|
|
50
|
+
icon,
|
|
51
|
+
'aria-label': ariaLabel,
|
|
52
|
+
type,
|
|
53
|
+
...props
|
|
54
|
+
} = _ref;
|
|
55
|
+
const {
|
|
56
|
+
isCompact,
|
|
57
|
+
getItemGroupProps
|
|
58
|
+
} = useMenuContext();
|
|
59
|
+
const groupAriaLabel = useText(ItemGroup, {
|
|
60
|
+
'aria-label': ariaLabel
|
|
61
|
+
}, 'aria-label', 'Group', !legend );
|
|
62
|
+
const groupProps = getItemGroupProps({
|
|
63
|
+
'aria-label': groupAriaLabel || legend
|
|
64
|
+
});
|
|
65
|
+
const contextValue = useMemo(() => ({
|
|
66
|
+
type
|
|
67
|
+
}), [type]);
|
|
68
|
+
return React__default.createElement(ItemGroupContext.Provider, {
|
|
69
|
+
value: contextValue
|
|
70
|
+
}, React__default.createElement(StyledItem, Object.assign({
|
|
71
|
+
isCompact: isCompact,
|
|
72
|
+
$type: "group"
|
|
73
|
+
}, props, {
|
|
74
|
+
ref: ref
|
|
75
|
+
}), React__default.createElement(StyledItemContent, null, (content || legend) && React__default.createElement(StyledItem, {
|
|
76
|
+
as: "div",
|
|
77
|
+
isCompact: isCompact,
|
|
78
|
+
$type: "header"
|
|
79
|
+
}, icon && React__default.createElement(StyledItemTypeIcon, {
|
|
80
|
+
$isCompact: isCompact,
|
|
81
|
+
$type: "header"
|
|
82
|
+
}, icon), content || legend), React__default.createElement(StyledItemGroup, Object.assign({
|
|
83
|
+
isCompact: isCompact
|
|
84
|
+
}, groupProps), React__default.createElement(StyledSeparator, {
|
|
85
|
+
role: "none"
|
|
86
|
+
}), children))));
|
|
87
|
+
});
|
|
88
|
+
ItemGroup.displayName = 'ItemGroup';
|
|
89
|
+
ItemGroup.propTypes = {
|
|
90
|
+
content: PropTypes.any,
|
|
91
|
+
icon: PropTypes.any,
|
|
92
|
+
legend: PropTypes.string,
|
|
93
|
+
type: PropTypes.oneOf(['checkbox', 'radio', undefined])
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
export { ItemGroup };
|
|
@@ -0,0 +1,55 @@
|
|
|
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 useItemContext from '../../context/useItemContext.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 '../../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 { StyledItemMeta } from '../../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 ItemMetaComponent = forwardRef((props, ref) => {
|
|
43
|
+
const {
|
|
44
|
+
isDisabled
|
|
45
|
+
} = useItemContext();
|
|
46
|
+
return React__default.createElement(StyledItemMeta, Object.assign({
|
|
47
|
+
isDisabled: isDisabled
|
|
48
|
+
}, props, {
|
|
49
|
+
ref: ref
|
|
50
|
+
}));
|
|
51
|
+
});
|
|
52
|
+
ItemMetaComponent.displayName = 'Item.Meta';
|
|
53
|
+
const ItemMeta = ItemMetaComponent;
|
|
54
|
+
|
|
55
|
+
export { ItemMeta };
|