@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.
Files changed (159) 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 +330 -0
  9. package/dist/esm/elements/combobox/Field.js +75 -0
  10. package/dist/esm/elements/combobox/Hint.js +57 -0
  11. package/dist/esm/elements/combobox/Label.js +68 -0
  12. package/dist/esm/elements/combobox/Listbox.js +155 -0
  13. package/dist/esm/elements/combobox/Message.js +63 -0
  14. package/dist/esm/elements/combobox/OptGroup.js +93 -0
  15. package/dist/esm/elements/combobox/Option.js +133 -0
  16. package/dist/esm/elements/combobox/OptionMeta.js +55 -0
  17. package/dist/esm/elements/combobox/Tag.js +98 -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 +140 -0
  22. package/dist/esm/elements/menu/ItemGroup.js +96 -0
  23. package/dist/esm/elements/menu/ItemMeta.js +55 -0
  24. package/dist/esm/elements/menu/Menu.js +157 -0
  25. package/dist/esm/elements/menu/MenuList.js +170 -0
  26. package/dist/esm/elements/menu/Separator.js +58 -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 +41 -0
  41. package/dist/esm/views/combobox/StyledInputGroup.js +26 -0
  42. package/dist/esm/views/combobox/StyledInputIcon.js +43 -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 +31 -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 +48 -0
  49. package/dist/esm/views/combobox/StyledOptionContent.js +22 -0
  50. package/dist/esm/views/combobox/StyledOptionIcon.js +29 -0
  51. package/dist/esm/views/combobox/StyledOptionMeta.js +31 -0
  52. package/dist/esm/views/combobox/StyledOptionTypeIcon.js +48 -0
  53. package/dist/esm/views/combobox/StyledTag.js +24 -0
  54. package/dist/esm/views/combobox/StyledTagsButton.js +28 -0
  55. package/dist/esm/views/combobox/StyledTrigger.js +94 -0
  56. package/dist/esm/views/combobox/StyledValue.js +32 -0
  57. package/dist/esm/views/menu/StyledButton.js +23 -0
  58. package/dist/esm/views/menu/StyledFloatingMenu.js +23 -0
  59. package/dist/esm/views/menu/StyledItem.js +23 -0
  60. package/dist/esm/views/menu/StyledItemContent.js +23 -0
  61. package/dist/esm/views/menu/StyledItemGroup.js +23 -0
  62. package/dist/esm/views/menu/StyledItemIcon.js +23 -0
  63. package/dist/esm/views/menu/StyledItemMeta.js +23 -0
  64. package/dist/esm/views/menu/StyledItemTypeIcon.js +24 -0
  65. package/dist/esm/views/menu/StyledMenu.js +27 -0
  66. package/dist/esm/views/menu/StyledSeparator.js +23 -0
  67. package/dist/index.cjs.js +1620 -1736
  68. package/dist/typings/context/useComboboxContext.d.ts +25 -0
  69. package/dist/typings/context/useFieldContext.d.ts +32 -0
  70. package/dist/typings/context/useItemContext.d.ts +14 -0
  71. package/dist/typings/context/useItemGroupContext.d.ts +15 -0
  72. package/dist/typings/context/useMenuContext.d.ts +23 -0
  73. package/dist/typings/context/useOptionContext.d.ts +14 -0
  74. package/dist/typings/elements/{Combobox → combobox}/Combobox.d.ts +0 -2
  75. package/dist/typings/elements/{Fields → combobox}/Field.d.ts +8 -1
  76. package/dist/typings/elements/{Fields → combobox}/Hint.d.ts +2 -0
  77. package/dist/typings/elements/{Fields → combobox}/Label.d.ts +3 -1
  78. package/dist/typings/elements/{Menu/Items/MediaBody.d.ts → combobox/Listbox.d.ts} +2 -4
  79. package/dist/typings/elements/{Fields → combobox}/Message.d.ts +3 -1
  80. package/dist/typings/elements/{Menu/Items/HeaderItem.d.ts → combobox/OptGroup.d.ts} +2 -2
  81. package/dist/typings/elements/{Menu/Items/MediaItem.d.ts → combobox/Option.d.ts} +5 -2
  82. package/dist/typings/elements/{Menu/Items/HeaderIcon.d.ts → combobox/OptionMeta.d.ts} +1 -1
  83. package/dist/typings/elements/combobox/Tag.d.ts +15 -0
  84. package/dist/typings/elements/combobox/TagAvatar.d.ts +14 -0
  85. package/dist/typings/elements/combobox/TagGroup.d.ts +12 -0
  86. package/dist/typings/elements/combobox/utils.d.ts +30 -0
  87. package/dist/typings/elements/{Menu/Items → menu}/Item.d.ts +5 -2
  88. package/dist/typings/elements/{Menu/Items/AddItem.d.ts → menu/ItemGroup.d.ts} +2 -2
  89. package/dist/typings/elements/{Menu/Items → menu}/ItemMeta.d.ts +2 -2
  90. package/dist/typings/elements/{Menu → menu}/Menu.d.ts +0 -2
  91. package/dist/typings/elements/menu/MenuList.d.ts +12 -0
  92. package/dist/typings/elements/{Menu → menu}/Separator.d.ts +1 -1
  93. package/dist/typings/elements/menu/utils.d.ts +29 -0
  94. package/dist/typings/index.d.ts +18 -25
  95. package/dist/typings/types/index.d.ts +242 -121
  96. package/dist/typings/{styled/items/StyledItemIcon.d.ts → views/combobox/StyledCombobox.d.ts} +4 -6
  97. package/dist/typings/{styled/multiselect/StyledMultiselectItemWrapper.d.ts → views/combobox/StyledContainer.d.ts} +1 -1
  98. package/dist/typings/{styled/select/StyledSelect.d.ts → views/combobox/StyledField.d.ts} +1 -1
  99. package/dist/typings/views/combobox/StyledFloatingListbox.d.ts +18 -0
  100. package/dist/typings/views/combobox/StyledHint.d.ts +11 -0
  101. package/dist/typings/views/combobox/StyledInput.d.ts +20 -0
  102. package/dist/typings/{styled/items/StyledAddItem.d.ts → views/combobox/StyledInputGroup.d.ts} +2 -4
  103. package/dist/typings/views/combobox/StyledInputIcon.d.ts +20 -0
  104. package/dist/typings/views/combobox/StyledLabel.d.ts +11 -0
  105. package/dist/typings/views/combobox/StyledListbox.d.ts +17 -0
  106. package/dist/typings/{styled/items/StyledNextItem.d.ts → views/combobox/StyledListboxSeparator.d.ts} +2 -4
  107. package/dist/typings/views/combobox/StyledMessage.d.ts +11 -0
  108. package/dist/typings/views/combobox/StyledOptGroup.d.ts +14 -0
  109. package/dist/typings/views/combobox/StyledOption.d.ts +18 -0
  110. package/dist/typings/views/combobox/StyledOptionContent.d.ts +10 -0
  111. package/dist/typings/views/combobox/StyledOptionIcon.d.ts +12 -0
  112. package/dist/typings/views/combobox/StyledOptionMeta.d.ts +14 -0
  113. package/dist/typings/views/combobox/StyledOptionTypeIcon.d.ts +17 -0
  114. package/dist/typings/views/combobox/StyledTag.d.ts +17 -0
  115. package/dist/typings/views/combobox/StyledTagsButton.d.ts +16 -0
  116. package/dist/typings/views/combobox/StyledTrigger.d.ts +24 -0
  117. package/dist/typings/views/combobox/StyledValue.d.ts +21 -0
  118. package/dist/typings/views/index.d.ts +38 -0
  119. package/dist/typings/views/menu/StyledButton.d.ts +20 -0
  120. package/dist/typings/views/menu/StyledFloatingMenu.d.ts +13 -0
  121. package/dist/typings/{styled/items/StyledPreviousItem.d.ts → views/menu/StyledItem.d.ts} +4 -4
  122. package/dist/typings/views/menu/StyledItemContent.d.ts +13 -0
  123. package/dist/typings/views/menu/StyledItemGroup.d.ts +13 -0
  124. package/dist/typings/views/menu/StyledItemIcon.d.ts +14 -0
  125. package/dist/typings/{styled/items → views/menu}/StyledItemMeta.d.ts +5 -10
  126. package/dist/typings/views/menu/StyledItemTypeIcon.d.ts +14 -0
  127. package/dist/typings/views/menu/StyledMenu.d.ts +19 -0
  128. package/dist/typings/{styled → views}/menu/StyledSeparator.d.ts +7 -4
  129. package/package.json +19 -17
  130. package/dist/index.esm.js +0 -2032
  131. package/dist/typings/elements/Autocomplete/Autocomplete.d.ts +0 -14
  132. package/dist/typings/elements/Dropdown/Dropdown.d.ts +0 -26
  133. package/dist/typings/elements/Menu/Items/MediaFigure.d.ts +0 -11
  134. package/dist/typings/elements/Menu/Items/NextItem.d.ts +0 -12
  135. package/dist/typings/elements/Menu/Items/PreviousItem.d.ts +0 -12
  136. package/dist/typings/elements/Multiselect/Multiselect.d.ts +0 -14
  137. package/dist/typings/elements/Select/Select.d.ts +0 -14
  138. package/dist/typings/elements/Trigger/Trigger.d.ts +0 -24
  139. package/dist/typings/styled/index.d.ts +0 -29
  140. package/dist/typings/styled/items/StyledItem.d.ts +0 -20
  141. package/dist/typings/styled/items/StyledNextIcon.d.ts +0 -12
  142. package/dist/typings/styled/items/StyledPreviousIcon.d.ts +0 -12
  143. package/dist/typings/styled/items/header/StyledHeaderIcon.d.ts +0 -14
  144. package/dist/typings/styled/items/header/StyledHeaderItem.d.ts +0 -16
  145. package/dist/typings/styled/items/media/StyledMediaBody.d.ts +0 -17
  146. package/dist/typings/styled/items/media/StyledMediaFigure.d.ts +0 -287
  147. package/dist/typings/styled/items/media/StyledMediaItem.d.ts +0 -13
  148. package/dist/typings/styled/menu/StyledMenu.d.ts +0 -20
  149. package/dist/typings/styled/menu/StyledMenuWrapper.d.ts +0 -16
  150. package/dist/typings/styled/multiselect/StyledMultiselectInput.d.ts +0 -22
  151. package/dist/typings/styled/multiselect/StyledMultiselectItemsContainer.d.ts +0 -16
  152. package/dist/typings/styled/multiselect/StyledMultiselectMoreAnchor.d.ts +0 -15
  153. package/dist/typings/styled/select/StyledFauxInput.d.ts +0 -22
  154. package/dist/typings/styled/select/StyledInput.d.ts +0 -15
  155. package/dist/typings/utils/garden-placements.d.ts +0 -26
  156. package/dist/typings/utils/useDropdownContext.d.ts +0 -28
  157. package/dist/typings/utils/useFieldContext.d.ts +0 -17
  158. package/dist/typings/utils/useItemContext.d.ts +0 -16
  159. package/dist/typings/utils/useMenuContext.d.ts +0 -17
@@ -0,0 +1,157 @@
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 { PLACEMENT } from '../../types/index.js';
14
+ import { MenuContext } from '../../context/useMenuContext.js';
15
+ import { toItems } from './utils.js';
16
+ import { MenuList } from './MenuList.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 '../../views/combobox/StyledOption.js';
31
+ import '../../views/combobox/StyledOptionContent.js';
32
+ import '../../views/combobox/StyledOptionIcon.js';
33
+ import '../../views/combobox/StyledOptionMeta.js';
34
+ import '../../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 { StyledButton } from '../../views/menu/StyledButton.js';
48
+ import '../../views/menu/StyledSeparator.js';
49
+ import SvgChevronDownStroke from '../../node_modules/@zendeskgarden/svg-icons/src/16/chevron-down-stroke.svg.js';
50
+
51
+ const Menu = forwardRef((_ref, ref) => {
52
+ let {
53
+ button,
54
+ buttonProps: _buttonProps = {},
55
+ children,
56
+ isCompact,
57
+ focusedValue: _focusedValue,
58
+ defaultFocusedValue,
59
+ defaultExpanded,
60
+ isExpanded: _isExpanded,
61
+ selectedItems,
62
+ onChange,
63
+ onMouseLeave,
64
+ ...props
65
+ } = _ref;
66
+ const triggerRef = useRef(null);
67
+ const menuRef = useRef(null);
68
+ const items = toItems(children);
69
+ const theme = useContext(ThemeContext) || DEFAULT_THEME;
70
+ const environment = useWindow(theme);
71
+ const {
72
+ isExpanded,
73
+ focusedValue,
74
+ getTriggerProps,
75
+ getMenuProps,
76
+ getItemProps,
77
+ getItemGroupProps,
78
+ getSeparatorProps
79
+ } = useMenu({
80
+ rtl: theme.rtl,
81
+ environment,
82
+ defaultFocusedValue,
83
+ focusedValue: _focusedValue,
84
+ defaultExpanded,
85
+ isExpanded: _isExpanded,
86
+ selectedItems,
87
+ items,
88
+ menuRef,
89
+ triggerRef,
90
+ onChange
91
+ });
92
+ const {
93
+ onClick,
94
+ onKeyDown,
95
+ disabled,
96
+ ...buttonProps
97
+ } = _buttonProps;
98
+ const triggerProps = {
99
+ ...(isCompact && {
100
+ size: 'small'
101
+ }),
102
+ ...buttonProps,
103
+ ...getTriggerProps({
104
+ type: 'button',
105
+ onClick,
106
+ onKeyDown,
107
+ disabled
108
+ }),
109
+ ref: mergeRefs([triggerRef, ref])
110
+ };
111
+ const trigger = typeof button === 'function' ? button(triggerProps) : React__default.createElement(StyledButton, triggerProps, button, React__default.createElement(StyledButton.EndIcon, {
112
+ isRotated: isExpanded
113
+ }, React__default.createElement(SvgChevronDownStroke, null)));
114
+ const contextValue = useMemo(() => ({
115
+ isCompact,
116
+ focusedValue,
117
+ getItemProps,
118
+ getItemGroupProps,
119
+ getSeparatorProps
120
+ }), [isCompact, focusedValue, getItemProps, getItemGroupProps, getSeparatorProps]);
121
+ return React__default.createElement(MenuContext.Provider, {
122
+ value: contextValue
123
+ }, trigger, React__default.createElement(MenuList, Object.assign({}, props, getMenuProps({
124
+ onMouseLeave
125
+ }), {
126
+ ref: mergeRefs([menuRef, ref]),
127
+ isCompact: isCompact,
128
+ isExpanded: isExpanded,
129
+ triggerRef: triggerRef
130
+ }), children));
131
+ });
132
+ Menu.displayName = 'Menu';
133
+ Menu.propTypes = {
134
+ appendToNode: PropTypes.any,
135
+ button: PropTypes.any.isRequired,
136
+ buttonProps: PropTypes.object,
137
+ defaultExpanded: PropTypes.bool,
138
+ defaultFocusedValue: PropTypes.string,
139
+ fallbackPlacements: PropTypes.arrayOf(PropTypes.any),
140
+ focusedValue: PropTypes.string,
141
+ hasArrow: PropTypes.bool,
142
+ isCompact: PropTypes.bool,
143
+ isExpanded: PropTypes.bool,
144
+ maxHeight: PropTypes.string,
145
+ minHeight: PropTypes.string,
146
+ onChange: PropTypes.func,
147
+ placement: PropTypes.oneOf(PLACEMENT),
148
+ selectedItems: PropTypes.arrayOf(PropTypes.any),
149
+ zIndex: PropTypes.number
150
+ };
151
+ Menu.defaultProps = {
152
+ maxHeight: '400px',
153
+ placement: 'bottom-start',
154
+ zIndex: 1000
155
+ };
156
+
157
+ export { Menu };
@@ -0,0 +1,170 @@
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 PropTypes from 'prop-types';
9
+ import { ThemeContext } from 'styled-components';
10
+ import { DEFAULT_THEME, getFloatingPlacements, getMenuPosition, getArrowPosition } from '@zendeskgarden/react-theming';
11
+ import { useFloating, platform, offset, autoPlacement, flip, size, autoUpdate } from '@floating-ui/react-dom';
12
+ import { PLACEMENT } from '../../types/index.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 '../../views/combobox/StyledTag.js';
32
+ import '../../views/combobox/StyledTagsButton.js';
33
+ import '../../views/combobox/StyledTrigger.js';
34
+ import '../../views/combobox/StyledValue.js';
35
+ import { StyledMenu } from '../../views/menu/StyledMenu.js';
36
+ import { StyledFloatingMenu } from '../../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 { createPortal } from 'react-dom';
46
+
47
+ const PLACEMENT_DEFAULT = 'bottom-start';
48
+ const MenuList = forwardRef((_ref, ref) => {
49
+ let {
50
+ appendToNode,
51
+ hasArrow,
52
+ isCompact,
53
+ isExpanded,
54
+ fallbackPlacements: _fallbackPlacements,
55
+ maxHeight,
56
+ minHeight,
57
+ placement: _placement,
58
+ triggerRef,
59
+ zIndex,
60
+ children,
61
+ ...props
62
+ } = _ref;
63
+ const floatingRef = useRef(null);
64
+ const [isVisible, setIsVisible] = useState(isExpanded);
65
+ const [height, setHeight] = useState();
66
+ const theme = useContext(ThemeContext) || DEFAULT_THEME;
67
+ const [floatingPlacement, fallbackPlacements] = getFloatingPlacements(theme, _placement === 'auto' ? PLACEMENT_DEFAULT : _placement, _fallbackPlacements);
68
+ const {
69
+ refs,
70
+ placement,
71
+ update,
72
+ floatingStyles: {
73
+ transform
74
+ }
75
+ } = useFloating({
76
+ platform: {
77
+ ...platform,
78
+ isRTL: () => theme.rtl
79
+ },
80
+ elements: {
81
+ reference: triggerRef?.current,
82
+ floating: floatingRef?.current
83
+ },
84
+ placement: floatingPlacement,
85
+ middleware: [offset(theme.space.base * (hasArrow ? 2 : 1)), _placement === 'auto' ? autoPlacement() : flip({
86
+ fallbackPlacements
87
+ }), size({
88
+ apply: _ref2 => {
89
+ let {
90
+ rects,
91
+ availableHeight
92
+ } = _ref2;
93
+ if (!(minHeight === null || minHeight === 'fit-content')) {
94
+ if (rects.floating.height > availableHeight) {
95
+ setHeight(availableHeight);
96
+ }
97
+ }
98
+ }
99
+ })]
100
+ });
101
+ useEffect(() => {
102
+ let cleanup;
103
+ if (isExpanded && refs.reference.current && refs.floating.current) {
104
+ cleanup = autoUpdate(refs.reference.current, refs.floating.current, update, {
105
+ elementResize: typeof ResizeObserver === 'function'
106
+ });
107
+ }
108
+ return () => cleanup && cleanup();
109
+ }, [isExpanded, refs.reference, refs.floating, update]);
110
+ useEffect(() => {
111
+ let timeout;
112
+ if (isExpanded) {
113
+ setIsVisible(true);
114
+ } else {
115
+ timeout = setTimeout(() => {
116
+ setIsVisible(false);
117
+ setHeight(undefined);
118
+ }, 200 );
119
+ }
120
+ return () => clearTimeout(timeout);
121
+ }, [isExpanded]);
122
+ useEffect(() => {
123
+ if (height) {
124
+ setHeight(undefined);
125
+ update();
126
+ }
127
+ }, [
128
+ children, update]);
129
+ const Node = React__default.createElement(StyledFloatingMenu, {
130
+ "data-garden-animate": isVisible,
131
+ isHidden: !isExpanded,
132
+ position: getMenuPosition(placement),
133
+ zIndex: zIndex,
134
+ style: {
135
+ transform
136
+ },
137
+ ref: floatingRef
138
+ }, React__default.createElement(StyledMenu, Object.assign({
139
+ "data-garden-animate-arrow": isVisible,
140
+ arrowPosition: hasArrow ? getArrowPosition(theme, placement) : undefined,
141
+ isCompact: isCompact,
142
+ minHeight: minHeight,
143
+ maxHeight: maxHeight,
144
+ style: {
145
+ height
146
+ }
147
+ }, props, {
148
+ ref: ref
149
+ }), isVisible && children));
150
+ return appendToNode ? createPortal(Node, appendToNode) : Node;
151
+ });
152
+ MenuList.displayName = 'MenuList';
153
+ MenuList.propTypes = {
154
+ appendToNode: PropTypes.any,
155
+ hasArrow: PropTypes.bool,
156
+ isCompact: PropTypes.bool,
157
+ isExpanded: PropTypes.bool,
158
+ maxHeight: PropTypes.string,
159
+ minHeight: PropTypes.string,
160
+ placement: PropTypes.oneOf(PLACEMENT),
161
+ triggerRef: PropTypes.any,
162
+ zIndex: PropTypes.number
163
+ };
164
+ MenuList.defaultProps = {
165
+ maxHeight: '400px',
166
+ placement: PLACEMENT_DEFAULT,
167
+ zIndex: 1000
168
+ };
169
+
170
+ export { MenuList };
@@ -0,0 +1,58 @@
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 '../../views/combobox/StyledCombobox.js';
9
+ import '../../views/combobox/StyledContainer.js';
10
+ import '../../views/combobox/StyledField.js';
11
+ import '../../views/combobox/StyledFloatingListbox.js';
12
+ import '../../views/combobox/StyledHint.js';
13
+ import '../../views/combobox/StyledInput.js';
14
+ import '../../views/combobox/StyledInputGroup.js';
15
+ import '../../views/combobox/StyledInputIcon.js';
16
+ import '../../views/combobox/StyledLabel.js';
17
+ import '../../views/combobox/StyledListbox.js';
18
+ import '../../views/combobox/StyledListboxSeparator.js';
19
+ import '../../views/combobox/StyledMessage.js';
20
+ import '../../views/combobox/StyledOptGroup.js';
21
+ import '../../views/combobox/StyledOption.js';
22
+ import '../../views/combobox/StyledOptionContent.js';
23
+ import '../../views/combobox/StyledOptionIcon.js';
24
+ import '../../views/combobox/StyledOptionMeta.js';
25
+ import '../../views/combobox/StyledOptionTypeIcon.js';
26
+ import '../../views/combobox/StyledTag.js';
27
+ import '../../views/combobox/StyledTagsButton.js';
28
+ import '../../views/combobox/StyledTrigger.js';
29
+ import '../../views/combobox/StyledValue.js';
30
+ import '../../views/menu/StyledMenu.js';
31
+ import '../../views/menu/StyledFloatingMenu.js';
32
+ import '../../views/menu/StyledItem.js';
33
+ import '../../views/menu/StyledItemContent.js';
34
+ import '../../views/menu/StyledItemGroup.js';
35
+ import '../../views/menu/StyledItemIcon.js';
36
+ import '../../views/menu/StyledItemMeta.js';
37
+ import '../../views/menu/StyledItemTypeIcon.js';
38
+ import '../../views/menu/StyledButton.js';
39
+ import { StyledSeparator } from '../../views/menu/StyledSeparator.js';
40
+ import useMenuContext from '../../context/useMenuContext.js';
41
+
42
+ const Separator = forwardRef(
43
+ (_ref, ref) => {
44
+ let {
45
+ children,
46
+ ...props
47
+ } = _ref;
48
+ const {
49
+ getSeparatorProps
50
+ } = useMenuContext();
51
+ const separatorProps = getSeparatorProps();
52
+ return React__default.createElement(StyledSeparator, Object.assign({}, props, separatorProps, {
53
+ ref: ref
54
+ }));
55
+ });
56
+ Separator.displayName = 'Separator';
57
+
58
+ export { Separator };
@@ -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 { Children, isValidElement } from 'react';
8
+
9
+ const toItem = props => ({
10
+ value: props.value,
11
+ label: props.label,
12
+ ...(props.name && {
13
+ name: props.name
14
+ }),
15
+ ...(props.isDisabled && {
16
+ disabled: props.isDisabled
17
+ }),
18
+ ...(props.isSelected && {
19
+ selected: props.isSelected
20
+ }),
21
+ ...(props.selectionType && {
22
+ type: props.selectionType
23
+ }),
24
+ ...(props.type === 'next' && {
25
+ isNext: true
26
+ }),
27
+ ...(props.type === 'previous' && {
28
+ isPrevious: true
29
+ })
30
+ });
31
+ const toItems = (children, type) => Children.toArray(children).reduce((items, item) => {
32
+ const retVal = items;
33
+ if ( isValidElement(item)) {
34
+ if ('value' in item.props) {
35
+ retVal.push(toItem({
36
+ ...item.props,
37
+ selectionType: type
38
+ }));
39
+ } else {
40
+ const props = item.props;
41
+ const groupLabel = props.legend || props['aria-label'];
42
+ const isSelectableGroup = props.type && ['checkbox', 'radio'].includes(props.type);
43
+ if (groupLabel || isSelectableGroup) {
44
+ const groupItems = toItems(props.children, props.type);
45
+ retVal.push({
46
+ label: props.legend || props['aria-label'],
47
+ items: groupItems
48
+ });
49
+ }
50
+ }
51
+ }
52
+ return retVal;
53
+ }, []);
54
+
55
+ export { toItem, toItems };
@@ -0,0 +1,19 @@
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
+ export { Combobox } from './elements/combobox/Combobox.js';
8
+ export { Field } from './elements/combobox/Field.js';
9
+ export { Hint } from './elements/combobox/Hint.js';
10
+ export { Label } from './elements/combobox/Label.js';
11
+ export { Message } from './elements/combobox/Message.js';
12
+ export { Option } from './elements/combobox/Option.js';
13
+ export { OptGroup } from './elements/combobox/OptGroup.js';
14
+ export { Tag } from './elements/combobox/Tag.js';
15
+ export { Menu } from './elements/menu/Menu.js';
16
+ export { ItemGroup } from './elements/menu/ItemGroup.js';
17
+ export { Item } from './elements/menu/Item.js';
18
+ export { Separator } from './elements/menu/Separator.js';
19
+ export { VALIDATION } from '@zendeskgarden/react-forms';
@@ -0,0 +1,28 @@
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 * as React from 'react';
8
+
9
+ var _path;
10
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
11
+ var SvgCheckLgStroke = function SvgCheckLgStroke(props) {
12
+ return /*#__PURE__*/React.createElement("svg", _extends({
13
+ xmlns: "http://www.w3.org/2000/svg",
14
+ width: 16,
15
+ height: 16,
16
+ focusable: "false",
17
+ viewBox: "0 0 16 16",
18
+ "aria-hidden": "true"
19
+ }, props), _path || (_path = /*#__PURE__*/React.createElement("path", {
20
+ fill: "none",
21
+ stroke: "currentColor",
22
+ strokeLinecap: "round",
23
+ strokeLinejoin: "round",
24
+ d: "M1 9l4 4L15 3"
25
+ })));
26
+ };
27
+
28
+ export { SvgCheckLgStroke as default };
@@ -0,0 +1,25 @@
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 * as React from 'react';
8
+
9
+ var _path;
10
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
11
+ var SvgChevronDownStroke = function SvgChevronDownStroke(props) {
12
+ return /*#__PURE__*/React.createElement("svg", _extends({
13
+ xmlns: "http://www.w3.org/2000/svg",
14
+ width: 16,
15
+ height: 16,
16
+ focusable: "false",
17
+ viewBox: "0 0 16 16",
18
+ "aria-hidden": "true"
19
+ }, props), _path || (_path = /*#__PURE__*/React.createElement("path", {
20
+ fill: "currentColor",
21
+ d: "M12.688 5.61a.5.5 0 01.69.718l-.066.062-5 4a.5.5 0 01-.542.054l-.082-.054-5-4a.5.5 0 01.55-.83l.074.05L8 9.359l4.688-3.75z"
22
+ })));
23
+ };
24
+
25
+ export { SvgChevronDownStroke as default };
@@ -0,0 +1,25 @@
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 * as React from 'react';
8
+
9
+ var _path;
10
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
11
+ var SvgChevronLeftStroke = function SvgChevronLeftStroke(props) {
12
+ return /*#__PURE__*/React.createElement("svg", _extends({
13
+ xmlns: "http://www.w3.org/2000/svg",
14
+ width: 16,
15
+ height: 16,
16
+ focusable: "false",
17
+ viewBox: "0 0 16 16",
18
+ "aria-hidden": "true"
19
+ }, props), _path || (_path = /*#__PURE__*/React.createElement("path", {
20
+ fill: "currentColor",
21
+ d: "M10.39 12.688a.5.5 0 01-.718.69l-.062-.066-4-5a.5.5 0 01-.054-.542l.054-.082 4-5a.5.5 0 01.83.55l-.05.074L6.641 8l3.75 4.688z"
22
+ })));
23
+ };
24
+
25
+ export { SvgChevronLeftStroke as default };
@@ -0,0 +1,25 @@
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 * as React from 'react';
8
+
9
+ var _path;
10
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
11
+ var SvgChevronRightStroke = function SvgChevronRightStroke(props) {
12
+ return /*#__PURE__*/React.createElement("svg", _extends({
13
+ xmlns: "http://www.w3.org/2000/svg",
14
+ width: 16,
15
+ height: 16,
16
+ focusable: "false",
17
+ viewBox: "0 0 16 16",
18
+ "aria-hidden": "true"
19
+ }, props), _path || (_path = /*#__PURE__*/React.createElement("path", {
20
+ fill: "currentColor",
21
+ d: "M5.61 3.312a.5.5 0 01.718-.69l.062.066 4 5a.5.5 0 01.054.542l-.054.082-4 5a.5.5 0 01-.83-.55l.05-.074L9.359 8l-3.75-4.688z"
22
+ })));
23
+ };
24
+
25
+ export { SvgChevronRightStroke as default };
@@ -0,0 +1,26 @@
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 * as React from 'react';
8
+
9
+ var _path;
10
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
11
+ var SvgPlusStroke = function SvgPlusStroke(props) {
12
+ return /*#__PURE__*/React.createElement("svg", _extends({
13
+ xmlns: "http://www.w3.org/2000/svg",
14
+ width: 16,
15
+ height: 16,
16
+ focusable: "false",
17
+ viewBox: "0 0 16 16",
18
+ "aria-hidden": "true"
19
+ }, props), _path || (_path = /*#__PURE__*/React.createElement("path", {
20
+ stroke: "currentColor",
21
+ strokeLinecap: "round",
22
+ d: "M7.5 2.5v12m6-6h-12"
23
+ })));
24
+ };
25
+
26
+ export { SvgPlusStroke as default };
@@ -0,0 +1,12 @@
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 { PLACEMENT as PLACEMENT$1 } from '@zendeskgarden/react-theming';
8
+
9
+ const OPTION_TYPE = ['add', 'danger', 'next', 'previous'];
10
+ const PLACEMENT = ['auto', ...PLACEMENT$1];
11
+
12
+ export { OPTION_TYPE, PLACEMENT };
@@ -0,0 +1,30 @@
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 styled, { css } from 'styled-components';
8
+ import { retrieveComponentStyles, DEFAULT_THEME } from '@zendeskgarden/react-theming';
9
+ import { StyledLabel } from './StyledLabel.js';
10
+ import { StyledHint } from './StyledHint.js';
11
+ import { StyledMessage } from './StyledMessage.js';
12
+
13
+ const COMPONENT_ID = 'dropdowns.combobox';
14
+ const sizeStyles = props => {
15
+ const minWidth = `${props.isCompact ? 100 : 144}px`;
16
+ const marginTop = `${props.theme.space.base * (props.isCompact ? 1 : 2)}px`;
17
+ return css(["min-width:", ";", ":not([hidden]) + &&,", " + &&,", " + &&,&& + ", ",&& + ", "{margin-top:", ";}"], minWidth, StyledLabel, StyledHint, StyledMessage, StyledHint, StyledMessage, marginTop);
18
+ };
19
+ const StyledCombobox = styled.div.attrs({
20
+ 'data-garden-id': COMPONENT_ID,
21
+ 'data-garden-version': '9.0.0-next.10'
22
+ }).withConfig({
23
+ displayName: "StyledCombobox",
24
+ componentId: "sc-13eybg8-0"
25
+ })(["", ";", ";"], sizeStyles, props => retrieveComponentStyles(COMPONENT_ID, props));
26
+ StyledCombobox.defaultProps = {
27
+ theme: DEFAULT_THEME
28
+ };
29
+
30
+ export { StyledCombobox };
@@ -0,0 +1,22 @@
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 styled from 'styled-components';
8
+ import { retrieveComponentStyles, DEFAULT_THEME } from '@zendeskgarden/react-theming';
9
+
10
+ const COMPONENT_ID = 'dropdowns.combobox.container';
11
+ const StyledContainer = styled.div.attrs({
12
+ 'data-garden-id': COMPONENT_ID,
13
+ 'data-garden-version': '9.0.0-next.10'
14
+ }).withConfig({
15
+ displayName: "StyledContainer",
16
+ componentId: "sc-14i9jid-0"
17
+ })(["display:flex;", ";"], props => retrieveComponentStyles(COMPONENT_ID, props));
18
+ StyledContainer.defaultProps = {
19
+ theme: DEFAULT_THEME
20
+ };
21
+
22
+ export { StyledContainer };