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