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