@zendeskgarden/react-dropdowns 9.0.0-next.2 → 9.0.0-next.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.
Files changed (157) hide show
  1. package/README.md +73 -69
  2. package/dist/esm/context/useComboboxContext.js +18 -0
  3. package/dist/esm/context/useFieldContext.js +18 -0
  4. package/dist/esm/context/useItemContext.js +18 -0
  5. package/dist/esm/context/useItemGroupContext.js +14 -0
  6. package/dist/esm/context/useMenuContext.js +18 -0
  7. package/dist/esm/context/useOptionContext.js +18 -0
  8. package/dist/esm/elements/combobox/Combobox.js +329 -0
  9. package/dist/esm/elements/combobox/Field.js +74 -0
  10. package/dist/esm/elements/combobox/Hint.js +56 -0
  11. package/dist/esm/elements/combobox/Label.js +67 -0
  12. package/dist/esm/elements/combobox/Listbox.js +154 -0
  13. package/dist/esm/elements/combobox/Message.js +62 -0
  14. package/dist/esm/elements/combobox/OptGroup.js +92 -0
  15. package/dist/esm/elements/combobox/Option.js +136 -0
  16. package/dist/esm/elements/combobox/OptionMeta.js +54 -0
  17. package/dist/esm/elements/combobox/Tag.js +97 -0
  18. package/dist/esm/elements/combobox/TagAvatar.js +13 -0
  19. package/dist/esm/elements/combobox/TagGroup.js +35 -0
  20. package/dist/esm/elements/combobox/utils.js +36 -0
  21. package/dist/esm/elements/menu/Item.js +141 -0
  22. package/dist/esm/elements/menu/ItemGroup.js +95 -0
  23. package/dist/esm/elements/menu/ItemMeta.js +54 -0
  24. package/dist/esm/elements/menu/Menu.js +126 -0
  25. package/dist/esm/elements/menu/MenuList.js +169 -0
  26. package/dist/esm/elements/menu/Separator.js +57 -0
  27. package/dist/esm/elements/menu/utils.js +55 -0
  28. package/dist/esm/index.js +19 -0
  29. package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/check-lg-stroke.svg.js +28 -0
  30. package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/chevron-down-stroke.svg.js +25 -0
  31. package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/chevron-left-stroke.svg.js +25 -0
  32. package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/chevron-right-stroke.svg.js +25 -0
  33. package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/plus-stroke.svg.js +26 -0
  34. package/dist/esm/types/index.js +12 -0
  35. package/dist/esm/views/combobox/StyledCombobox.js +30 -0
  36. package/dist/esm/views/combobox/StyledContainer.js +22 -0
  37. package/dist/esm/views/combobox/StyledField.js +22 -0
  38. package/dist/esm/views/combobox/StyledFloatingListbox.js +27 -0
  39. package/dist/esm/views/combobox/StyledHint.js +23 -0
  40. package/dist/esm/views/combobox/StyledInput.js +47 -0
  41. package/dist/esm/views/combobox/StyledInputGroup.js +26 -0
  42. package/dist/esm/views/combobox/StyledInputIcon.js +62 -0
  43. package/dist/esm/views/combobox/StyledLabel.js +23 -0
  44. package/dist/esm/views/combobox/StyledListbox.js +31 -0
  45. package/dist/esm/views/combobox/StyledListboxSeparator.js +37 -0
  46. package/dist/esm/views/combobox/StyledMessage.js +23 -0
  47. package/dist/esm/views/combobox/StyledOptGroup.js +22 -0
  48. package/dist/esm/views/combobox/StyledOption.js +69 -0
  49. package/dist/esm/views/combobox/StyledOptionContent.js +22 -0
  50. package/dist/esm/views/combobox/StyledOptionIcon.js +51 -0
  51. package/dist/esm/views/combobox/StyledOptionMeta.js +39 -0
  52. package/dist/esm/views/combobox/StyledOptionTypeIcon.js +58 -0
  53. package/dist/esm/views/combobox/StyledTag.js +27 -0
  54. package/dist/esm/views/combobox/StyledTagsButton.js +34 -0
  55. package/dist/esm/views/combobox/StyledTrigger.js +125 -0
  56. package/dist/esm/views/combobox/StyledValue.js +39 -0
  57. package/dist/esm/views/menu/StyledFloatingMenu.js +23 -0
  58. package/dist/esm/views/menu/StyledItem.js +23 -0
  59. package/dist/esm/views/menu/StyledItemContent.js +23 -0
  60. package/dist/esm/views/menu/StyledItemGroup.js +23 -0
  61. package/dist/esm/views/menu/StyledItemIcon.js +23 -0
  62. package/dist/esm/views/menu/StyledItemMeta.js +23 -0
  63. package/dist/esm/views/menu/StyledItemTypeIcon.js +24 -0
  64. package/dist/esm/views/menu/StyledMenu.js +27 -0
  65. package/dist/esm/views/menu/StyledSeparator.js +23 -0
  66. package/dist/index.cjs.js +1780 -1763
  67. package/dist/typings/context/useComboboxContext.d.ts +25 -0
  68. package/dist/typings/context/useFieldContext.d.ts +32 -0
  69. package/dist/typings/context/useItemContext.d.ts +14 -0
  70. package/dist/typings/context/useItemGroupContext.d.ts +15 -0
  71. package/dist/typings/context/useMenuContext.d.ts +23 -0
  72. package/dist/typings/context/useOptionContext.d.ts +14 -0
  73. package/dist/typings/elements/{Combobox → combobox}/Combobox.d.ts +0 -2
  74. package/dist/typings/elements/{Fields → combobox}/Field.d.ts +8 -1
  75. package/dist/typings/elements/{Fields → combobox}/Hint.d.ts +2 -0
  76. package/dist/typings/elements/{Fields → combobox}/Label.d.ts +3 -1
  77. package/dist/typings/elements/{Menu/Items/MediaBody.d.ts → combobox/Listbox.d.ts} +2 -4
  78. package/dist/typings/elements/{Fields → combobox}/Message.d.ts +3 -1
  79. package/dist/typings/elements/{Menu/Items/HeaderItem.d.ts → combobox/OptGroup.d.ts} +2 -2
  80. package/dist/typings/elements/{Menu/Items/MediaItem.d.ts → combobox/Option.d.ts} +5 -2
  81. package/dist/typings/elements/{Menu/Items/HeaderIcon.d.ts → combobox/OptionMeta.d.ts} +1 -1
  82. package/dist/typings/elements/combobox/Tag.d.ts +15 -0
  83. package/dist/typings/elements/combobox/TagAvatar.d.ts +14 -0
  84. package/dist/typings/elements/combobox/TagGroup.d.ts +12 -0
  85. package/dist/typings/elements/combobox/utils.d.ts +30 -0
  86. package/dist/typings/elements/{Menu/Items → menu}/Item.d.ts +5 -2
  87. package/dist/typings/elements/{Menu/Items/AddItem.d.ts → menu/ItemGroup.d.ts} +2 -2
  88. package/dist/typings/elements/{Menu/Items → menu}/ItemMeta.d.ts +2 -2
  89. package/dist/typings/elements/{Menu → menu}/Menu.d.ts +0 -2
  90. package/dist/typings/elements/menu/MenuList.d.ts +12 -0
  91. package/dist/typings/elements/{Menu → menu}/Separator.d.ts +1 -1
  92. package/dist/typings/elements/menu/utils.d.ts +29 -0
  93. package/dist/typings/index.d.ts +18 -25
  94. package/dist/typings/types/index.d.ts +242 -121
  95. package/dist/typings/{styled/items/StyledItemIcon.d.ts → views/combobox/StyledCombobox.d.ts} +4 -6
  96. package/dist/typings/{styled/multiselect/StyledMultiselectItemWrapper.d.ts → views/combobox/StyledContainer.d.ts} +1 -1
  97. package/dist/typings/{styled/select/StyledSelect.d.ts → views/combobox/StyledField.d.ts} +1 -1
  98. package/dist/typings/views/combobox/StyledFloatingListbox.d.ts +18 -0
  99. package/dist/typings/views/combobox/StyledHint.d.ts +11 -0
  100. package/dist/typings/views/combobox/StyledInput.d.ts +20 -0
  101. package/dist/typings/{styled/items/StyledAddItem.d.ts → views/combobox/StyledInputGroup.d.ts} +2 -4
  102. package/dist/typings/views/combobox/StyledInputIcon.d.ts +20 -0
  103. package/dist/typings/views/combobox/StyledLabel.d.ts +11 -0
  104. package/dist/typings/views/combobox/StyledListbox.d.ts +17 -0
  105. package/dist/typings/{styled/items/StyledNextItem.d.ts → views/combobox/StyledListboxSeparator.d.ts} +2 -4
  106. package/dist/typings/views/combobox/StyledMessage.d.ts +11 -0
  107. package/dist/typings/views/combobox/StyledOptGroup.d.ts +14 -0
  108. package/dist/typings/views/combobox/StyledOption.d.ts +18 -0
  109. package/dist/typings/views/combobox/StyledOptionContent.d.ts +10 -0
  110. package/dist/typings/views/combobox/StyledOptionIcon.d.ts +17 -0
  111. package/dist/typings/views/combobox/StyledOptionMeta.d.ts +14 -0
  112. package/dist/typings/views/combobox/StyledOptionTypeIcon.d.ts +17 -0
  113. package/dist/typings/views/combobox/StyledTag.d.ts +17 -0
  114. package/dist/typings/views/combobox/StyledTagsButton.d.ts +16 -0
  115. package/dist/typings/views/combobox/StyledTrigger.d.ts +24 -0
  116. package/dist/typings/views/combobox/StyledValue.d.ts +21 -0
  117. package/dist/typings/views/index.d.ts +37 -0
  118. package/dist/typings/views/menu/StyledFloatingMenu.d.ts +13 -0
  119. package/dist/typings/{styled/items/StyledPreviousItem.d.ts → views/menu/StyledItem.d.ts} +4 -4
  120. package/dist/typings/views/menu/StyledItemContent.d.ts +13 -0
  121. package/dist/typings/views/menu/StyledItemGroup.d.ts +13 -0
  122. package/dist/typings/views/menu/StyledItemIcon.d.ts +14 -0
  123. package/dist/typings/{styled/items → views/menu}/StyledItemMeta.d.ts +5 -10
  124. package/dist/typings/views/menu/StyledItemTypeIcon.d.ts +14 -0
  125. package/dist/typings/views/menu/StyledMenu.d.ts +19 -0
  126. package/dist/typings/{styled → views}/menu/StyledSeparator.d.ts +7 -4
  127. package/package.json +20 -18
  128. package/dist/index.esm.js +0 -2032
  129. package/dist/typings/elements/Autocomplete/Autocomplete.d.ts +0 -14
  130. package/dist/typings/elements/Dropdown/Dropdown.d.ts +0 -26
  131. package/dist/typings/elements/Menu/Items/MediaFigure.d.ts +0 -11
  132. package/dist/typings/elements/Menu/Items/NextItem.d.ts +0 -12
  133. package/dist/typings/elements/Menu/Items/PreviousItem.d.ts +0 -12
  134. package/dist/typings/elements/Multiselect/Multiselect.d.ts +0 -14
  135. package/dist/typings/elements/Select/Select.d.ts +0 -14
  136. package/dist/typings/elements/Trigger/Trigger.d.ts +0 -24
  137. package/dist/typings/styled/index.d.ts +0 -29
  138. package/dist/typings/styled/items/StyledItem.d.ts +0 -20
  139. package/dist/typings/styled/items/StyledNextIcon.d.ts +0 -12
  140. package/dist/typings/styled/items/StyledPreviousIcon.d.ts +0 -12
  141. package/dist/typings/styled/items/header/StyledHeaderIcon.d.ts +0 -14
  142. package/dist/typings/styled/items/header/StyledHeaderItem.d.ts +0 -16
  143. package/dist/typings/styled/items/media/StyledMediaBody.d.ts +0 -17
  144. package/dist/typings/styled/items/media/StyledMediaFigure.d.ts +0 -287
  145. package/dist/typings/styled/items/media/StyledMediaItem.d.ts +0 -13
  146. package/dist/typings/styled/menu/StyledMenu.d.ts +0 -20
  147. package/dist/typings/styled/menu/StyledMenuWrapper.d.ts +0 -16
  148. package/dist/typings/styled/multiselect/StyledMultiselectInput.d.ts +0 -22
  149. package/dist/typings/styled/multiselect/StyledMultiselectItemsContainer.d.ts +0 -16
  150. package/dist/typings/styled/multiselect/StyledMultiselectMoreAnchor.d.ts +0 -15
  151. package/dist/typings/styled/select/StyledFauxInput.d.ts +0 -22
  152. package/dist/typings/styled/select/StyledInput.d.ts +0 -15
  153. package/dist/typings/utils/garden-placements.d.ts +0 -26
  154. package/dist/typings/utils/useDropdownContext.d.ts +0 -28
  155. package/dist/typings/utils/useFieldContext.d.ts +0 -17
  156. package/dist/typings/utils/useItemContext.d.ts +0 -16
  157. package/dist/typings/utils/useMenuContext.d.ts +0 -17
@@ -0,0 +1,54 @@
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/StyledSeparator.js';
40
+
41
+ const OptionMetaComponent = forwardRef((props, ref) => {
42
+ const {
43
+ isDisabled
44
+ } = useOptionContext();
45
+ return React__default.createElement(StyledOptionMeta, Object.assign({
46
+ isDisabled: isDisabled
47
+ }, props, {
48
+ ref: ref
49
+ }));
50
+ });
51
+ OptionMetaComponent.displayName = 'Option.Meta';
52
+ const OptionMeta = OptionMetaComponent;
53
+
54
+ export { OptionMeta };
@@ -0,0 +1,97 @@
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/StyledSeparator.js';
44
+ import { TagAvatar } from './TagAvatar.js';
45
+
46
+ const TagComponent = forwardRef((_ref, ref) => {
47
+ let {
48
+ children,
49
+ option,
50
+ removeLabel,
51
+ tooltipZIndex,
52
+ ...props
53
+ } = _ref;
54
+ const {
55
+ getTagProps,
56
+ isCompact,
57
+ removeSelection
58
+ } = useComboboxContext();
59
+ const text = option.label || option.value;
60
+ const ariaLabel = useText(
61
+ Tag, props, 'aria-label', `${text}, press delete or backspace to remove`, !option.disabled);
62
+ const tagProps = getTagProps({
63
+ option,
64
+ 'aria-label': ariaLabel
65
+ });
66
+ const theme = useContext(ThemeContext) || DEFAULT_THEME;
67
+ const doc = useDocument(theme);
68
+ const handleClick = () => removeSelection(option.value);
69
+ return React__default.createElement(StyledTag, Object.assign({
70
+ "aria-disabled": option.disabled,
71
+ tabIndex: option.disabled ? undefined : 0
72
+ }, tagProps, props, {
73
+ size: isCompact ? 'medium' : 'large',
74
+ ref: ref
75
+ }), children || React__default.createElement("span", null, text), !option.disabled && (removeLabel ?
76
+ React__default.createElement(Tooltip, {
77
+ appendToNode: doc?.body,
78
+ content: removeLabel,
79
+ zIndex: tooltipZIndex
80
+ }, React__default.createElement(StyledTag.Close, {
81
+ "aria-label": removeLabel,
82
+ onClick: handleClick
83
+ })) : React__default.createElement(StyledTag.Close, {
84
+ onClick: handleClick
85
+ })));
86
+ });
87
+ TagComponent.displayName = 'Tag';
88
+ TagComponent.propTypes = {
89
+ hue: PropTypes.string,
90
+ isPill: PropTypes.bool,
91
+ isRegular: PropTypes.bool,
92
+ removeLabel: PropTypes.string
93
+ };
94
+ const Tag = TagComponent;
95
+ Tag.Avatar = TagAvatar;
96
+
97
+ 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,141 @@
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/StyledSeparator.js';
46
+ import { ItemMeta } from './ItemMeta.js';
47
+ import useMenuContext from '../../context/useMenuContext.js';
48
+ import useItemGroupContext from '../../context/useItemGroupContext.js';
49
+ import { ItemContext } from '../../context/useItemContext.js';
50
+ import { toItem } from './utils.js';
51
+
52
+ const ItemComponent = forwardRef((_ref, ref) => {
53
+ let {
54
+ children,
55
+ value,
56
+ label = value,
57
+ isSelected,
58
+ icon,
59
+ isDisabled,
60
+ type,
61
+ name,
62
+ onClick,
63
+ onKeyDown,
64
+ onMouseEnter,
65
+ ...props
66
+ } = _ref;
67
+ const {
68
+ type: selectionType
69
+ } = useItemGroupContext();
70
+ const {
71
+ focusedValue,
72
+ getItemProps,
73
+ isCompact
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 renderActionIcon = iconType => {
97
+ switch (iconType) {
98
+ case 'add':
99
+ return React__default.createElement(SvgPlusStroke, null);
100
+ case 'next':
101
+ return React__default.createElement(SvgChevronRightStroke, null);
102
+ case 'previous':
103
+ return React__default.createElement(SvgChevronLeftStroke, null);
104
+ default:
105
+ return React__default.createElement(SvgCheckLgStroke, null);
106
+ }
107
+ };
108
+ const contextValue = useMemo(() => ({
109
+ isDisabled,
110
+ type
111
+ }), [isDisabled, type]);
112
+ return React__default.createElement(ItemContext.Provider, {
113
+ value: contextValue
114
+ }, React__default.createElement(StyledItem, Object.assign({
115
+ $type: type,
116
+ isCompact: isCompact,
117
+ isActive: isActive
118
+ }, props, itemProps, {
119
+ ref: mergeRefs([_itemRef, ref])
120
+ }), React__default.createElement(StyledItemTypeIcon, {
121
+ $isCompact: isCompact,
122
+ $type: type
123
+ }, renderActionIcon(type)), icon && React__default.createElement(StyledItemIcon, {
124
+ $isDisabled: isDisabled,
125
+ $type: type
126
+ }, icon), React__default.createElement(StyledItemContent, null, children || label)));
127
+ });
128
+ ItemComponent.displayName = 'Item';
129
+ ItemComponent.propTypes = {
130
+ icon: PropTypes.any,
131
+ isDisabled: PropTypes.bool,
132
+ isSelected: PropTypes.bool,
133
+ label: PropTypes.string,
134
+ name: PropTypes.string,
135
+ type: PropTypes.oneOf(OPTION_TYPE),
136
+ value: PropTypes.string.isRequired
137
+ };
138
+ const Item = ItemComponent;
139
+ Item.Meta = ItemMeta;
140
+
141
+ export { Item };
@@ -0,0 +1,95 @@
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 { StyledSeparator } from '../../views/menu/StyledSeparator.js';
42
+ import { ItemGroupContext } from '../../context/useItemGroupContext.js';
43
+
44
+ const ItemGroup = forwardRef((_ref, ref) => {
45
+ let {
46
+ children,
47
+ content,
48
+ legend,
49
+ icon,
50
+ 'aria-label': ariaLabel,
51
+ type,
52
+ ...props
53
+ } = _ref;
54
+ const {
55
+ isCompact,
56
+ getItemGroupProps
57
+ } = useMenuContext();
58
+ const groupAriaLabel = useText(ItemGroup, {
59
+ 'aria-label': ariaLabel
60
+ }, 'aria-label', 'Group', !legend );
61
+ const groupProps = getItemGroupProps({
62
+ 'aria-label': groupAriaLabel || legend
63
+ });
64
+ const contextValue = useMemo(() => ({
65
+ type
66
+ }), [type]);
67
+ return React__default.createElement(ItemGroupContext.Provider, {
68
+ value: contextValue
69
+ }, React__default.createElement(StyledItem, Object.assign({
70
+ isCompact: isCompact,
71
+ $type: "group"
72
+ }, props, {
73
+ ref: ref
74
+ }), React__default.createElement(StyledItemContent, null, (content || legend) && React__default.createElement(StyledItem, {
75
+ as: "div",
76
+ isCompact: isCompact,
77
+ $type: "header"
78
+ }, icon && React__default.createElement(StyledItemTypeIcon, {
79
+ $isCompact: isCompact,
80
+ $type: "header"
81
+ }, icon), content || legend), React__default.createElement(StyledItemGroup, Object.assign({
82
+ isCompact: isCompact
83
+ }, groupProps), React__default.createElement(StyledSeparator, {
84
+ role: "none"
85
+ }), children))));
86
+ });
87
+ ItemGroup.displayName = 'ItemGroup';
88
+ ItemGroup.propTypes = {
89
+ content: PropTypes.any,
90
+ icon: PropTypes.any,
91
+ legend: PropTypes.string,
92
+ type: PropTypes.oneOf(['checkbox', 'radio', undefined])
93
+ };
94
+
95
+ export { ItemGroup };
@@ -0,0 +1,54 @@
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/StyledSeparator.js';
40
+
41
+ const ItemMetaComponent = forwardRef((props, ref) => {
42
+ const {
43
+ isDisabled
44
+ } = useItemContext();
45
+ return React__default.createElement(StyledItemMeta, Object.assign({
46
+ isDisabled: isDisabled
47
+ }, props, {
48
+ ref: ref
49
+ }));
50
+ });
51
+ ItemMetaComponent.displayName = 'Item.Meta';
52
+ const ItemMeta = ItemMetaComponent;
53
+
54
+ export { ItemMeta };
@@ -0,0 +1,126 @@
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, useContext, useMemo } from 'react';
8
+ import PropTypes from 'prop-types';
9
+ import { mergeRefs } from 'react-merge-refs';
10
+ import { ThemeContext } from 'styled-components';
11
+ import { useMenu } from '@zendeskgarden/container-menu';
12
+ import { DEFAULT_THEME, useWindow } from '@zendeskgarden/react-theming';
13
+ import { Button } from '@zendeskgarden/react-buttons';
14
+ import { PLACEMENT } from '../../types/index.js';
15
+ import { MenuContext } from '../../context/useMenuContext.js';
16
+ import { toItems } from './utils.js';
17
+ import { MenuList } from './MenuList.js';
18
+ import SvgChevronDownStroke from '../../node_modules/@zendeskgarden/svg-icons/src/16/chevron-down-stroke.svg.js';
19
+
20
+ const Menu = forwardRef((_ref, ref) => {
21
+ let {
22
+ button,
23
+ buttonProps: _buttonProps = {},
24
+ children,
25
+ isCompact,
26
+ focusedValue: _focusedValue,
27
+ defaultFocusedValue,
28
+ defaultExpanded,
29
+ isExpanded: _isExpanded,
30
+ selectedItems,
31
+ onChange,
32
+ onMouseLeave,
33
+ ...props
34
+ } = _ref;
35
+ const triggerRef = useRef(null);
36
+ const menuRef = useRef(null);
37
+ const items = toItems(children);
38
+ const theme = useContext(ThemeContext) || DEFAULT_THEME;
39
+ const environment = useWindow(theme);
40
+ const {
41
+ isExpanded,
42
+ focusedValue,
43
+ getTriggerProps,
44
+ getMenuProps,
45
+ getItemProps,
46
+ getItemGroupProps,
47
+ getSeparatorProps
48
+ } = useMenu({
49
+ rtl: theme.rtl,
50
+ environment,
51
+ defaultFocusedValue,
52
+ focusedValue: _focusedValue,
53
+ defaultExpanded,
54
+ isExpanded: _isExpanded,
55
+ selectedItems,
56
+ items,
57
+ menuRef,
58
+ triggerRef,
59
+ onChange
60
+ });
61
+ const {
62
+ onClick,
63
+ onKeyDown,
64
+ disabled,
65
+ ...buttonProps
66
+ } = _buttonProps;
67
+ const triggerProps = {
68
+ ...(isCompact && {
69
+ size: 'small'
70
+ }),
71
+ ...buttonProps,
72
+ ...getTriggerProps({
73
+ type: 'button',
74
+ onClick,
75
+ onKeyDown,
76
+ disabled
77
+ }),
78
+ ref: mergeRefs([triggerRef, ref])
79
+ };
80
+ const trigger = typeof button === 'function' ? button(triggerProps) : React__default.createElement(Button, triggerProps, button, React__default.createElement(Button.EndIcon, {
81
+ isRotated: isExpanded
82
+ }, React__default.createElement(SvgChevronDownStroke, null)));
83
+ const contextValue = useMemo(() => ({
84
+ isCompact,
85
+ focusedValue,
86
+ getItemProps,
87
+ getItemGroupProps,
88
+ getSeparatorProps
89
+ }), [isCompact, focusedValue, getItemProps, getItemGroupProps, getSeparatorProps]);
90
+ return React__default.createElement(MenuContext.Provider, {
91
+ value: contextValue
92
+ }, trigger, React__default.createElement(MenuList, Object.assign({}, props, getMenuProps({
93
+ onMouseLeave
94
+ }), {
95
+ ref: mergeRefs([menuRef, ref]),
96
+ isCompact: isCompact,
97
+ isExpanded: isExpanded,
98
+ triggerRef: triggerRef
99
+ }), children));
100
+ });
101
+ Menu.displayName = 'Menu';
102
+ Menu.propTypes = {
103
+ appendToNode: PropTypes.any,
104
+ button: PropTypes.any.isRequired,
105
+ buttonProps: PropTypes.object,
106
+ defaultExpanded: PropTypes.bool,
107
+ defaultFocusedValue: PropTypes.string,
108
+ fallbackPlacements: PropTypes.arrayOf(PropTypes.any),
109
+ focusedValue: PropTypes.string,
110
+ hasArrow: PropTypes.bool,
111
+ isCompact: PropTypes.bool,
112
+ isExpanded: PropTypes.bool,
113
+ maxHeight: PropTypes.string,
114
+ minHeight: PropTypes.string,
115
+ onChange: PropTypes.func,
116
+ placement: PropTypes.oneOf(PLACEMENT),
117
+ selectedItems: PropTypes.arrayOf(PropTypes.any),
118
+ zIndex: PropTypes.number
119
+ };
120
+ Menu.defaultProps = {
121
+ maxHeight: '400px',
122
+ placement: 'bottom-start',
123
+ zIndex: 1000
124
+ };
125
+
126
+ export { Menu };