@zendeskgarden/react-dropdowns 9.0.0-next.6 → 9.0.0-next.8

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 (70) hide show
  1. package/dist/esm/context/useComboboxContext.js +18 -0
  2. package/dist/esm/context/useFieldContext.js +18 -0
  3. package/dist/esm/context/useItemContext.js +18 -0
  4. package/dist/esm/context/useItemGroupContext.js +14 -0
  5. package/dist/esm/context/useMenuContext.js +18 -0
  6. package/dist/esm/context/useOptionContext.js +18 -0
  7. package/dist/esm/elements/combobox/Combobox.js +330 -0
  8. package/dist/esm/elements/combobox/Field.js +75 -0
  9. package/dist/esm/elements/combobox/Hint.js +57 -0
  10. package/dist/esm/elements/combobox/Label.js +68 -0
  11. package/dist/esm/elements/combobox/Listbox.js +155 -0
  12. package/dist/esm/elements/combobox/Message.js +63 -0
  13. package/dist/esm/elements/combobox/OptGroup.js +93 -0
  14. package/dist/esm/elements/combobox/Option.js +133 -0
  15. package/dist/esm/elements/combobox/OptionMeta.js +55 -0
  16. package/dist/esm/elements/combobox/Tag.js +98 -0
  17. package/dist/esm/elements/combobox/TagAvatar.js +13 -0
  18. package/dist/esm/elements/combobox/TagGroup.js +35 -0
  19. package/dist/esm/elements/combobox/utils.js +36 -0
  20. package/dist/esm/elements/menu/Item.js +140 -0
  21. package/dist/esm/elements/menu/ItemGroup.js +96 -0
  22. package/dist/esm/elements/menu/ItemMeta.js +55 -0
  23. package/dist/esm/elements/menu/Menu.js +157 -0
  24. package/dist/esm/elements/menu/MenuList.js +170 -0
  25. package/dist/esm/elements/menu/Separator.js +58 -0
  26. package/dist/esm/elements/menu/utils.js +55 -0
  27. package/dist/esm/index.js +19 -0
  28. package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/check-lg-stroke.svg.js +28 -0
  29. package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/chevron-down-stroke.svg.js +25 -0
  30. package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/chevron-left-stroke.svg.js +25 -0
  31. package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/chevron-right-stroke.svg.js +25 -0
  32. package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/plus-stroke.svg.js +26 -0
  33. package/dist/esm/types/index.js +12 -0
  34. package/dist/esm/views/combobox/StyledCombobox.js +30 -0
  35. package/dist/esm/views/combobox/StyledContainer.js +22 -0
  36. package/dist/esm/views/combobox/StyledField.js +22 -0
  37. package/dist/esm/views/combobox/StyledFloatingListbox.js +27 -0
  38. package/dist/esm/views/combobox/StyledHint.js +23 -0
  39. package/dist/esm/views/combobox/StyledInput.js +41 -0
  40. package/dist/esm/views/combobox/StyledInputGroup.js +26 -0
  41. package/dist/esm/views/combobox/StyledInputIcon.js +56 -0
  42. package/dist/esm/views/combobox/StyledLabel.js +23 -0
  43. package/dist/esm/views/combobox/StyledListbox.js +31 -0
  44. package/dist/esm/views/combobox/StyledListboxSeparator.js +31 -0
  45. package/dist/esm/views/combobox/StyledMessage.js +23 -0
  46. package/dist/esm/views/combobox/StyledOptGroup.js +22 -0
  47. package/dist/esm/views/combobox/StyledOption.js +48 -0
  48. package/dist/esm/views/combobox/StyledOptionContent.js +22 -0
  49. package/dist/esm/views/combobox/StyledOptionIcon.js +37 -0
  50. package/dist/esm/views/combobox/StyledOptionMeta.js +31 -0
  51. package/dist/esm/views/combobox/StyledOptionTypeIcon.js +58 -0
  52. package/dist/esm/views/combobox/StyledTag.js +24 -0
  53. package/dist/esm/views/combobox/StyledTagsButton.js +28 -0
  54. package/dist/esm/views/combobox/StyledTrigger.js +94 -0
  55. package/dist/esm/views/combobox/StyledValue.js +32 -0
  56. package/dist/esm/views/menu/StyledButton.js +23 -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 +95 -113
  67. package/dist/typings/elements/combobox/utils.d.ts +0 -8
  68. package/dist/typings/types/index.d.ts +1 -1
  69. package/package.json +10 -10
  70. package/dist/index.esm.js +0 -1973
@@ -0,0 +1,18 @@
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 { createContext, useContext } from 'react';
8
+
9
+ const ComboboxContext = createContext(undefined);
10
+ const useComboboxContext = () => {
11
+ const context = useContext(ComboboxContext);
12
+ if (!context) {
13
+ throw new Error('Error: this component must be rendered within a <Combobox>.');
14
+ }
15
+ return context;
16
+ };
17
+
18
+ export { ComboboxContext, useComboboxContext as default };
@@ -0,0 +1,18 @@
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 { createContext, useContext } from 'react';
8
+
9
+ const FieldContext = createContext(undefined);
10
+ const useFieldContext = () => {
11
+ const context = useContext(FieldContext);
12
+ if (!context) {
13
+ throw new Error('Error: this component must be rendered within a <Field>.');
14
+ }
15
+ return context;
16
+ };
17
+
18
+ export { FieldContext, useFieldContext as default };
@@ -0,0 +1,18 @@
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 { createContext, useContext } from 'react';
8
+
9
+ const ItemContext = createContext(undefined);
10
+ const useItemContext = () => {
11
+ const context = useContext(ItemContext);
12
+ if (!context) {
13
+ throw new Error('Error: this component must be rendered within an <Item>.');
14
+ }
15
+ return context;
16
+ };
17
+
18
+ export { ItemContext, useItemContext as default };
@@ -0,0 +1,14 @@
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 { createContext, useContext } from 'react';
8
+
9
+ const ItemGroupContext = createContext({});
10
+ const useItemGroupContext = () => {
11
+ return useContext(ItemGroupContext);
12
+ };
13
+
14
+ export { ItemGroupContext, useItemGroupContext as default };
@@ -0,0 +1,18 @@
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 { createContext, useContext } from 'react';
8
+
9
+ const MenuContext = createContext(undefined);
10
+ const useMenuContext = () => {
11
+ const context = useContext(MenuContext);
12
+ if (!context) {
13
+ throw new Error('Error: this component must be rendered within a <Menu>.');
14
+ }
15
+ return context;
16
+ };
17
+
18
+ export { MenuContext, useMenuContext as default };
@@ -0,0 +1,18 @@
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 { createContext, useContext } from 'react';
8
+
9
+ const OptionContext = createContext(undefined);
10
+ const useOptionContext = () => {
11
+ const context = useContext(OptionContext);
12
+ if (!context) {
13
+ throw new Error('Error: this component must be rendered within an <Option>.');
14
+ }
15
+ return context;
16
+ };
17
+
18
+ export { OptionContext, useOptionContext as default };
@@ -0,0 +1,330 @@
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, useRef, useContext, useEffect } from 'react';
8
+ import PropTypes from 'prop-types';
9
+ import { ThemeContext } from 'styled-components';
10
+ import { useCombobox } from '@zendeskgarden/container-combobox';
11
+ import { DEFAULT_THEME, useWindow, useText } from '@zendeskgarden/react-theming';
12
+ import { VALIDATION } from '@zendeskgarden/react-forms';
13
+ import SvgChevronDownStroke from '../../node_modules/@zendeskgarden/svg-icons/src/16/chevron-down-stroke.svg.js';
14
+ import { ComboboxContext } from '../../context/useComboboxContext.js';
15
+ import useFieldContext from '../../context/useFieldContext.js';
16
+ import { StyledCombobox } from '../../views/combobox/StyledCombobox.js';
17
+ import { StyledContainer } from '../../views/combobox/StyledContainer.js';
18
+ import '../../views/combobox/StyledField.js';
19
+ import '../../views/combobox/StyledFloatingListbox.js';
20
+ import '../../views/combobox/StyledHint.js';
21
+ import { StyledInput } from '../../views/combobox/StyledInput.js';
22
+ import { StyledInputGroup } from '../../views/combobox/StyledInputGroup.js';
23
+ import { StyledInputIcon } from '../../views/combobox/StyledInputIcon.js';
24
+ import '../../views/combobox/StyledLabel.js';
25
+ import '../../views/combobox/StyledListbox.js';
26
+ import '../../views/combobox/StyledListboxSeparator.js';
27
+ import '../../views/combobox/StyledMessage.js';
28
+ import '../../views/combobox/StyledOptGroup.js';
29
+ import '../../views/combobox/StyledOption.js';
30
+ import '../../views/combobox/StyledOptionContent.js';
31
+ import '../../views/combobox/StyledOptionIcon.js';
32
+ import '../../views/combobox/StyledOptionMeta.js';
33
+ import '../../views/combobox/StyledOptionTypeIcon.js';
34
+ import '../../views/combobox/StyledTag.js';
35
+ import { StyledTagsButton } from '../../views/combobox/StyledTagsButton.js';
36
+ import { StyledTrigger } from '../../views/combobox/StyledTrigger.js';
37
+ import { StyledValue } from '../../views/combobox/StyledValue.js';
38
+ import '../../views/menu/StyledMenu.js';
39
+ import '../../views/menu/StyledFloatingMenu.js';
40
+ import '../../views/menu/StyledItem.js';
41
+ import '../../views/menu/StyledItemContent.js';
42
+ import '../../views/menu/StyledItemGroup.js';
43
+ import '../../views/menu/StyledItemIcon.js';
44
+ import '../../views/menu/StyledItemMeta.js';
45
+ import '../../views/menu/StyledItemTypeIcon.js';
46
+ import '../../views/menu/StyledButton.js';
47
+ import '../../views/menu/StyledSeparator.js';
48
+ import { Listbox } from './Listbox.js';
49
+ import { TagGroup } from './TagGroup.js';
50
+ import { toOptions } from './utils.js';
51
+
52
+ const MAX_TAGS = 4;
53
+ const Combobox = forwardRef((_ref, ref) => {
54
+ let {
55
+ children,
56
+ activeIndex,
57
+ defaultActiveIndex,
58
+ defaultExpanded,
59
+ endIcon,
60
+ focusInset,
61
+ inputProps: _inputProps,
62
+ inputValue: _inputValue,
63
+ isAutocomplete,
64
+ isBare,
65
+ isCompact,
66
+ isDisabled,
67
+ isEditable,
68
+ isExpanded: _isExpanded,
69
+ isMultiselectable,
70
+ listboxAppendToNode,
71
+ listboxAriaLabel,
72
+ listboxMaxHeight,
73
+ listboxMinHeight,
74
+ listboxZIndex,
75
+ maxHeight,
76
+ maxTags = MAX_TAGS,
77
+ onChange,
78
+ placeholder,
79
+ renderExpandTags,
80
+ renderValue,
81
+ selectionValue,
82
+ startIcon,
83
+ validation,
84
+ ...props
85
+ } = _ref;
86
+ const {
87
+ hasHint,
88
+ hasMessage,
89
+ labelProps,
90
+ setLabelProps,
91
+ hintProps,
92
+ setHintProps,
93
+ messageProps,
94
+ setMessageProps
95
+ } = useFieldContext();
96
+ const [isInputHidden, setIsInputHidden] = useState(true);
97
+ const [isLabelHovered, setIsLabelHovered] = useState(false);
98
+ const [isTagGroupExpanded, setIsTagGroupExpanded] = useState(false);
99
+ const [optionTagProps, setOptionTagProps] = useState({});
100
+ const options = useMemo(() => {
101
+ const tagProps = {};
102
+ const retVal = toOptions(children, tagProps);
103
+ if (isMultiselectable) {
104
+ setOptionTagProps(value => ({
105
+ ...value,
106
+ ...tagProps
107
+ }));
108
+ }
109
+ return retVal;
110
+ }, [children, isMultiselectable]);
111
+ const triggerRef = useRef(null);
112
+ const inputRef = useRef(null);
113
+ const listboxRef = useRef(null);
114
+ const theme = useContext(ThemeContext) || DEFAULT_THEME;
115
+ const environment = useWindow(theme);
116
+ const {
117
+ activeValue,
118
+ inputValue,
119
+ isExpanded,
120
+ getTriggerProps,
121
+ getHintProps,
122
+ getInputProps,
123
+ getLabelProps,
124
+ getListboxProps,
125
+ getMessageProps,
126
+ getOptionProps,
127
+ getOptGroupProps,
128
+ getTagProps,
129
+ removeSelection,
130
+ selection
131
+ } = useCombobox({
132
+ idPrefix: props.id,
133
+ triggerRef,
134
+ inputRef,
135
+ listboxRef,
136
+ options,
137
+ environment,
138
+ hasHint,
139
+ hasMessage,
140
+ isAutocomplete,
141
+ isEditable,
142
+ isMultiselectable,
143
+ disabled: isDisabled,
144
+ inputValue: _inputValue,
145
+ selectionValue,
146
+ isExpanded: _isExpanded,
147
+ defaultExpanded,
148
+ activeIndex,
149
+ defaultActiveIndex,
150
+ onChange
151
+ });
152
+ const contextValue = useMemo(() => ({
153
+ activeValue,
154
+ getOptionProps,
155
+ getOptGroupProps,
156
+ getTagProps,
157
+ isCompact,
158
+ removeSelection
159
+ }), [activeValue, getOptionProps, getOptGroupProps, getTagProps, isCompact, removeSelection]);
160
+ const hasChevron = useMemo(() => !isBare && (isAutocomplete || !isEditable), [isAutocomplete, isBare, isEditable]);
161
+ const expandTags = useText(Combobox, {
162
+ renderExpandTags
163
+ }, 'renderExpandTags', '+ {{value}} more', isMultiselectable || false);
164
+ const _listboxAriaLabel = useText(Combobox, {
165
+ listboxAriaLabel
166
+ }, 'listboxAriaLabel', 'Options');
167
+ const triggerProps = {
168
+ isAutocomplete,
169
+ isBare,
170
+ isCompact,
171
+ isEditable,
172
+ isLabelHovered,
173
+ isMultiselectable,
174
+ maxHeight,
175
+ focusInset,
176
+ validation,
177
+ ...getTriggerProps({
178
+ onFocus: () => {
179
+ if (!isDisabled) {
180
+ if (isEditable) {
181
+ setIsInputHidden(false);
182
+ }
183
+ if (isMultiselectable) {
184
+ setIsTagGroupExpanded(true);
185
+ }
186
+ }
187
+ },
188
+ onBlur: event => {
189
+ if (event.relatedTarget === null || !triggerRef.current?.contains(event.relatedTarget)) {
190
+ if (isEditable) {
191
+ setIsInputHidden(true);
192
+ }
193
+ if (isMultiselectable) {
194
+ setIsTagGroupExpanded(false);
195
+ }
196
+ }
197
+ }
198
+ })
199
+ };
200
+ const inputProps = {
201
+ 'aria-invalid': validation === 'error' || validation === 'warning',
202
+ hidden: isInputHidden,
203
+ isBare,
204
+ isCompact,
205
+ isEditable,
206
+ isMultiselectable,
207
+ placeholder,
208
+ ...getInputProps({
209
+ ..._inputProps
210
+ })
211
+ };
212
+ const listboxProps = getListboxProps({
213
+ 'aria-label': _listboxAriaLabel
214
+ });
215
+ useEffect(() => {
216
+ if (!labelProps) {
217
+ const _labelProps = getLabelProps({
218
+ onMouseEnter: () => setIsLabelHovered(true),
219
+ onMouseLeave: () => setIsLabelHovered(false)
220
+ });
221
+ setLabelProps(_labelProps);
222
+ }
223
+ return () => labelProps && setLabelProps(undefined);
224
+ }, [getLabelProps, labelProps, setLabelProps]);
225
+ useEffect(() => {
226
+ if (!hintProps) {
227
+ const _hintProps = getHintProps();
228
+ setHintProps(_hintProps);
229
+ }
230
+ return () => hintProps && setHintProps(undefined);
231
+ }, [getHintProps, hintProps, setHintProps]);
232
+ useEffect(() => {
233
+ if (!messageProps) {
234
+ const _messageProps = getMessageProps();
235
+ setMessageProps(_messageProps);
236
+ }
237
+ return () => messageProps && setMessageProps(undefined);
238
+ }, [getMessageProps, messageProps, setMessageProps]);
239
+ return React__default.createElement(ComboboxContext.Provider, {
240
+ value: contextValue
241
+ }, React__default.createElement(StyledCombobox, Object.assign({
242
+ isCompact: isCompact,
243
+ tabIndex: -1
244
+ }, props, {
245
+ ref: ref
246
+ }), React__default.createElement(StyledTrigger, triggerProps, React__default.createElement(StyledContainer, null, startIcon && React__default.createElement(StyledInputIcon, {
247
+ isLabelHovered: isLabelHovered,
248
+ isCompact: isCompact
249
+ }, startIcon), React__default.createElement(StyledInputGroup, null, isMultiselectable && Array.isArray(selection) && React__default.createElement(TagGroup, {
250
+ isDisabled: isDisabled,
251
+ isExpanded: isTagGroupExpanded,
252
+ maxTags: maxTags,
253
+ optionTagProps: optionTagProps,
254
+ selection: selection
255
+ }, selection.length > maxTags && React__default.createElement(StyledTagsButton, {
256
+ disabled: isDisabled,
257
+ hidden: isTagGroupExpanded,
258
+ isCompact: isCompact,
259
+ tabIndex: -1,
260
+ type: "button"
261
+ }, (() => {
262
+ const value = selection.length - maxTags;
263
+ return renderExpandTags ? renderExpandTags(value) : expandTags?.replace('{{value}}', value.toString());
264
+ })())), React__default.createElement(StyledValue, {
265
+ hidden: !isInputHidden,
266
+ isAutocomplete: isAutocomplete,
267
+ isBare: isBare,
268
+ isCompact: isCompact,
269
+ isDisabled: isDisabled,
270
+ isEditable: isEditable,
271
+ isMultiselectable: isMultiselectable,
272
+ isPlaceholder: !(inputValue || renderValue)
273
+ }, renderValue ? renderValue({
274
+ selection,
275
+ inputValue
276
+ }) : inputValue || placeholder), React__default.createElement(StyledInput, inputProps)), (hasChevron || endIcon) && React__default.createElement(StyledInputIcon, {
277
+ isCompact: isCompact,
278
+ isEnd: true,
279
+ isLabelHovered: isLabelHovered,
280
+ isRotated: hasChevron && isExpanded
281
+ }, hasChevron ? React__default.createElement(SvgChevronDownStroke, null) : endIcon))), React__default.createElement(Listbox, Object.assign({
282
+ appendToNode: listboxAppendToNode,
283
+ isCompact: isCompact,
284
+ isExpanded: isExpanded,
285
+ maxHeight: listboxMaxHeight,
286
+ minHeight: listboxMinHeight,
287
+ triggerRef: triggerRef,
288
+ zIndex: listboxZIndex
289
+ }, listboxProps), children)));
290
+ });
291
+ Combobox.displayName = 'Combobox';
292
+ Combobox.propTypes = {
293
+ activeIndex: PropTypes.number,
294
+ defaultActiveIndex: PropTypes.number,
295
+ defaultExpanded: PropTypes.bool,
296
+ endIcon: PropTypes.any,
297
+ focusInset: PropTypes.bool,
298
+ id: PropTypes.string,
299
+ inputProps: PropTypes.object,
300
+ inputValue: PropTypes.string,
301
+ isAutocomplete: PropTypes.bool,
302
+ isBare: PropTypes.bool,
303
+ isCompact: PropTypes.bool,
304
+ isDisabled: PropTypes.bool,
305
+ isEditable: PropTypes.bool,
306
+ isExpanded: PropTypes.bool,
307
+ isMultiselectable: PropTypes.bool,
308
+ listboxAppendToNode: PropTypes.any,
309
+ listboxAriaLabel: PropTypes.string,
310
+ listboxMaxHeight: PropTypes.string,
311
+ listboxMinHeight: PropTypes.string,
312
+ listboxZIndex: PropTypes.number,
313
+ maxHeight: PropTypes.string,
314
+ maxTags: PropTypes.number,
315
+ onChange: PropTypes.func,
316
+ placeholder: PropTypes.string,
317
+ renderExpandTags: PropTypes.func,
318
+ renderValue: PropTypes.func,
319
+ selectionValue: PropTypes.any,
320
+ startIcon: PropTypes.any,
321
+ validation: PropTypes.oneOf(VALIDATION)
322
+ };
323
+ Combobox.defaultProps = {
324
+ isEditable: true,
325
+ listboxMaxHeight: '400px',
326
+ listboxZIndex: 1000,
327
+ maxTags: MAX_TAGS
328
+ };
329
+
330
+ export { Combobox };
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Copyright Zendesk, Inc.
3
+ *
4
+ * Use of this source code is governed under the Apache License, Version 2.0
5
+ * found at http://www.apache.org/licenses/LICENSE-2.0.
6
+ */
7
+ import React__default, { forwardRef, useState, useMemo } from 'react';
8
+ import { FieldContext } from '../../context/useFieldContext.js';
9
+ import '../../views/combobox/StyledCombobox.js';
10
+ import '../../views/combobox/StyledContainer.js';
11
+ import { StyledField } from '../../views/combobox/StyledField.js';
12
+ import '../../views/combobox/StyledFloatingListbox.js';
13
+ import '../../views/combobox/StyledHint.js';
14
+ import '../../views/combobox/StyledInput.js';
15
+ import '../../views/combobox/StyledInputGroup.js';
16
+ import '../../views/combobox/StyledInputIcon.js';
17
+ import '../../views/combobox/StyledLabel.js';
18
+ import '../../views/combobox/StyledListbox.js';
19
+ import '../../views/combobox/StyledListboxSeparator.js';
20
+ import '../../views/combobox/StyledMessage.js';
21
+ import '../../views/combobox/StyledOptGroup.js';
22
+ import '../../views/combobox/StyledOption.js';
23
+ import '../../views/combobox/StyledOptionContent.js';
24
+ import '../../views/combobox/StyledOptionIcon.js';
25
+ import '../../views/combobox/StyledOptionMeta.js';
26
+ import '../../views/combobox/StyledOptionTypeIcon.js';
27
+ import '../../views/combobox/StyledTag.js';
28
+ import '../../views/combobox/StyledTagsButton.js';
29
+ import '../../views/combobox/StyledTrigger.js';
30
+ import '../../views/combobox/StyledValue.js';
31
+ import '../../views/menu/StyledMenu.js';
32
+ import '../../views/menu/StyledFloatingMenu.js';
33
+ import '../../views/menu/StyledItem.js';
34
+ import '../../views/menu/StyledItemContent.js';
35
+ import '../../views/menu/StyledItemGroup.js';
36
+ import '../../views/menu/StyledItemIcon.js';
37
+ import '../../views/menu/StyledItemMeta.js';
38
+ import '../../views/menu/StyledItemTypeIcon.js';
39
+ import '../../views/menu/StyledButton.js';
40
+ import '../../views/menu/StyledSeparator.js';
41
+ import { Hint } from './Hint.js';
42
+ import { Label } from './Label.js';
43
+ import { Message } from './Message.js';
44
+
45
+ const FieldComponent = forwardRef((props, ref) => {
46
+ const [labelProps, setLabelProps] = useState(undefined);
47
+ const [hintProps, setHintProps] = useState(undefined);
48
+ const [messageProps, setMessageProps] = useState(undefined);
49
+ const [hasHint, setHasHint] = useState(false);
50
+ const [hasMessage, setHasMessage] = useState(false);
51
+ const contextValue = useMemo(() => ({
52
+ labelProps,
53
+ setLabelProps,
54
+ hasHint,
55
+ setHasHint,
56
+ hintProps,
57
+ setHintProps,
58
+ hasMessage,
59
+ setHasMessage,
60
+ messageProps,
61
+ setMessageProps
62
+ }), [labelProps, setLabelProps, hasHint, setHasHint, hintProps, setHintProps, hasMessage, setHasMessage, messageProps, setMessageProps]);
63
+ return React__default.createElement(FieldContext.Provider, {
64
+ value: contextValue
65
+ }, React__default.createElement(StyledField, Object.assign({}, props, {
66
+ ref: ref
67
+ })));
68
+ });
69
+ FieldComponent.displayName = 'Field';
70
+ const Field = FieldComponent;
71
+ Field.Hint = Hint;
72
+ Field.Label = Label;
73
+ Field.Message = Message;
74
+
75
+ export { Field };
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Copyright Zendesk, Inc.
3
+ *
4
+ * Use of this source code is governed under the Apache License, Version 2.0
5
+ * found at http://www.apache.org/licenses/LICENSE-2.0.
6
+ */
7
+ import React__default, { forwardRef, useEffect } from 'react';
8
+ import useFieldContext from '../../context/useFieldContext.js';
9
+ import '../../views/combobox/StyledCombobox.js';
10
+ import '../../views/combobox/StyledContainer.js';
11
+ import '../../views/combobox/StyledField.js';
12
+ import '../../views/combobox/StyledFloatingListbox.js';
13
+ import { StyledHint } from '../../views/combobox/StyledHint.js';
14
+ import '../../views/combobox/StyledInput.js';
15
+ import '../../views/combobox/StyledInputGroup.js';
16
+ import '../../views/combobox/StyledInputIcon.js';
17
+ import '../../views/combobox/StyledLabel.js';
18
+ import '../../views/combobox/StyledListbox.js';
19
+ import '../../views/combobox/StyledListboxSeparator.js';
20
+ import '../../views/combobox/StyledMessage.js';
21
+ import '../../views/combobox/StyledOptGroup.js';
22
+ import '../../views/combobox/StyledOption.js';
23
+ import '../../views/combobox/StyledOptionContent.js';
24
+ import '../../views/combobox/StyledOptionIcon.js';
25
+ import '../../views/combobox/StyledOptionMeta.js';
26
+ import '../../views/combobox/StyledOptionTypeIcon.js';
27
+ import '../../views/combobox/StyledTag.js';
28
+ import '../../views/combobox/StyledTagsButton.js';
29
+ import '../../views/combobox/StyledTrigger.js';
30
+ import '../../views/combobox/StyledValue.js';
31
+ import '../../views/menu/StyledMenu.js';
32
+ import '../../views/menu/StyledFloatingMenu.js';
33
+ import '../../views/menu/StyledItem.js';
34
+ import '../../views/menu/StyledItemContent.js';
35
+ import '../../views/menu/StyledItemGroup.js';
36
+ import '../../views/menu/StyledItemIcon.js';
37
+ import '../../views/menu/StyledItemMeta.js';
38
+ import '../../views/menu/StyledItemTypeIcon.js';
39
+ import '../../views/menu/StyledButton.js';
40
+ import '../../views/menu/StyledSeparator.js';
41
+
42
+ const Hint = forwardRef((props, ref) => {
43
+ const {
44
+ hintProps,
45
+ setHasHint
46
+ } = useFieldContext();
47
+ useEffect(() => {
48
+ setHasHint(true);
49
+ return () => setHasHint(false);
50
+ }, [setHasHint]);
51
+ return React__default.createElement(StyledHint, Object.assign({}, hintProps, props, {
52
+ ref: ref
53
+ }));
54
+ });
55
+ Hint.displayName = 'Hint';
56
+
57
+ export { Hint };
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Copyright Zendesk, Inc.
3
+ *
4
+ * Use of this source code is governed under the Apache License, Version 2.0
5
+ * found at http://www.apache.org/licenses/LICENSE-2.0.
6
+ */
7
+ import React__default, { forwardRef } from 'react';
8
+ import PropTypes from 'prop-types';
9
+ import { composeEventHandlers } from '@zendeskgarden/container-utilities';
10
+ import useFieldContext from '../../context/useFieldContext.js';
11
+ import '../../views/combobox/StyledCombobox.js';
12
+ import '../../views/combobox/StyledContainer.js';
13
+ import '../../views/combobox/StyledField.js';
14
+ import '../../views/combobox/StyledFloatingListbox.js';
15
+ import '../../views/combobox/StyledHint.js';
16
+ import '../../views/combobox/StyledInput.js';
17
+ import '../../views/combobox/StyledInputGroup.js';
18
+ import '../../views/combobox/StyledInputIcon.js';
19
+ import { StyledLabel } from '../../views/combobox/StyledLabel.js';
20
+ import '../../views/combobox/StyledListbox.js';
21
+ import '../../views/combobox/StyledListboxSeparator.js';
22
+ import '../../views/combobox/StyledMessage.js';
23
+ import '../../views/combobox/StyledOptGroup.js';
24
+ import '../../views/combobox/StyledOption.js';
25
+ import '../../views/combobox/StyledOptionContent.js';
26
+ import '../../views/combobox/StyledOptionIcon.js';
27
+ import '../../views/combobox/StyledOptionMeta.js';
28
+ import '../../views/combobox/StyledOptionTypeIcon.js';
29
+ import '../../views/combobox/StyledTag.js';
30
+ import '../../views/combobox/StyledTagsButton.js';
31
+ import '../../views/combobox/StyledTrigger.js';
32
+ import '../../views/combobox/StyledValue.js';
33
+ import '../../views/menu/StyledMenu.js';
34
+ import '../../views/menu/StyledFloatingMenu.js';
35
+ import '../../views/menu/StyledItem.js';
36
+ import '../../views/menu/StyledItemContent.js';
37
+ import '../../views/menu/StyledItemGroup.js';
38
+ import '../../views/menu/StyledItemIcon.js';
39
+ import '../../views/menu/StyledItemMeta.js';
40
+ import '../../views/menu/StyledItemTypeIcon.js';
41
+ import '../../views/menu/StyledButton.js';
42
+ import '../../views/menu/StyledSeparator.js';
43
+
44
+ const Label = forwardRef((_ref, ref) => {
45
+ let {
46
+ onClick,
47
+ onMouseEnter,
48
+ onMouseLeave,
49
+ ...props
50
+ } = _ref;
51
+ const {
52
+ labelProps
53
+ } = useFieldContext();
54
+ return React__default.createElement(StyledLabel, Object.assign({}, labelProps, {
55
+ onClick: composeEventHandlers(onClick, labelProps?.onClick),
56
+ onMouseEnter: composeEventHandlers(onMouseEnter, labelProps?.onMouseEnter),
57
+ onMouseLeave: composeEventHandlers(onMouseLeave, labelProps?.onMouseLeave)
58
+ }, props, {
59
+ ref: ref
60
+ }));
61
+ });
62
+ Label.displayName = 'Label';
63
+ Label.propTypes = {
64
+ hidden: PropTypes.bool,
65
+ isRegular: PropTypes.bool
66
+ };
67
+
68
+ export { Label };