@zendeskgarden/react-dropdowns.legacy 9.0.0-next.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/LICENSE.md +176 -0
  2. package/README.md +100 -0
  3. package/dist/esm/elements/Autocomplete/Autocomplete.js +144 -0
  4. package/dist/esm/elements/Combobox/Combobox.js +106 -0
  5. package/dist/esm/elements/Dropdown/Dropdown.js +178 -0
  6. package/dist/esm/elements/Fields/Field.js +35 -0
  7. package/dist/esm/elements/Fields/Hint.js +15 -0
  8. package/dist/esm/elements/Fields/Label.js +46 -0
  9. package/dist/esm/elements/Fields/Message.js +19 -0
  10. package/dist/esm/elements/Menu/Items/AddItem.js +66 -0
  11. package/dist/esm/elements/Menu/Items/HeaderIcon.js +44 -0
  12. package/dist/esm/elements/Menu/Items/HeaderItem.js +44 -0
  13. package/dist/esm/elements/Menu/Items/Item.js +140 -0
  14. package/dist/esm/elements/Menu/Items/ItemMeta.js +49 -0
  15. package/dist/esm/elements/Menu/Items/MediaBody.js +44 -0
  16. package/dist/esm/elements/Menu/Items/MediaFigure.js +42 -0
  17. package/dist/esm/elements/Menu/Items/MediaItem.js +44 -0
  18. package/dist/esm/elements/Menu/Items/NextItem.js +90 -0
  19. package/dist/esm/elements/Menu/Items/PreviousItem.js +87 -0
  20. package/dist/esm/elements/Menu/Menu.js +160 -0
  21. package/dist/esm/elements/Menu/Separator.js +37 -0
  22. package/dist/esm/elements/Multiselect/Multiselect.js +316 -0
  23. package/dist/esm/elements/Select/Select.js +195 -0
  24. package/dist/esm/elements/Trigger/Trigger.js +185 -0
  25. package/dist/esm/index.js +29 -0
  26. package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/check-lg-stroke.svg.js +28 -0
  27. package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/chevron-down-stroke.svg.js +25 -0
  28. package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/chevron-left-stroke.svg.js +25 -0
  29. package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/chevron-right-stroke.svg.js +25 -0
  30. package/dist/esm/node_modules/@zendeskgarden/svg-icons/src/16/plus-stroke.svg.js +26 -0
  31. package/dist/esm/styled/items/StyledAddItem.js +23 -0
  32. package/dist/esm/styled/items/StyledItem.js +44 -0
  33. package/dist/esm/styled/items/StyledItemIcon.js +27 -0
  34. package/dist/esm/styled/items/StyledItemMeta.js +22 -0
  35. package/dist/esm/styled/items/StyledNextIcon.js +31 -0
  36. package/dist/esm/styled/items/StyledNextItem.js +24 -0
  37. package/dist/esm/styled/items/StyledPreviousIcon.js +31 -0
  38. package/dist/esm/styled/items/StyledPreviousItem.js +23 -0
  39. package/dist/esm/styled/items/header/StyledHeaderIcon.js +22 -0
  40. package/dist/esm/styled/items/header/StyledHeaderItem.js +29 -0
  41. package/dist/esm/styled/items/media/StyledMediaBody.js +22 -0
  42. package/dist/esm/styled/items/media/StyledMediaFigure.js +34 -0
  43. package/dist/esm/styled/items/media/StyledMediaItem.js +23 -0
  44. package/dist/esm/styled/menu/StyledMenu.js +28 -0
  45. package/dist/esm/styled/menu/StyledMenuWrapper.js +30 -0
  46. package/dist/esm/styled/menu/StyledSeparator.js +23 -0
  47. package/dist/esm/styled/multiselect/StyledMultiselectInput.js +33 -0
  48. package/dist/esm/styled/multiselect/StyledMultiselectItemWrapper.js +22 -0
  49. package/dist/esm/styled/multiselect/StyledMultiselectItemsContainer.js +34 -0
  50. package/dist/esm/styled/multiselect/StyledMultiselectMoreAnchor.js +22 -0
  51. package/dist/esm/styled/select/StyledFauxInput.js +25 -0
  52. package/dist/esm/styled/select/StyledInput.js +25 -0
  53. package/dist/esm/styled/select/StyledSelect.js +22 -0
  54. package/dist/esm/types/index.js +10 -0
  55. package/dist/esm/utils/garden-placements.js +77 -0
  56. package/dist/esm/utils/useDropdownContext.js +18 -0
  57. package/dist/esm/utils/useFieldContext.js +18 -0
  58. package/dist/esm/utils/useItemContext.js +18 -0
  59. package/dist/esm/utils/useMenuContext.js +18 -0
  60. package/dist/index.cjs.js +2066 -0
  61. package/dist/typings/elements/Autocomplete/Autocomplete.d.ts +14 -0
  62. package/dist/typings/elements/Combobox/Combobox.d.ts +14 -0
  63. package/dist/typings/elements/Dropdown/Dropdown.d.ts +26 -0
  64. package/dist/typings/elements/Fields/Field.d.ts +11 -0
  65. package/dist/typings/elements/Fields/Hint.d.ts +11 -0
  66. package/dist/typings/elements/Fields/Label.d.ts +12 -0
  67. package/dist/typings/elements/Fields/Message.d.ts +12 -0
  68. package/dist/typings/elements/Menu/Items/AddItem.d.ts +12 -0
  69. package/dist/typings/elements/Menu/Items/HeaderIcon.d.ts +11 -0
  70. package/dist/typings/elements/Menu/Items/HeaderItem.d.ts +12 -0
  71. package/dist/typings/elements/Menu/Items/Item.d.ts +12 -0
  72. package/dist/typings/elements/Menu/Items/ItemMeta.d.ts +11 -0
  73. package/dist/typings/elements/Menu/Items/MediaBody.d.ts +11 -0
  74. package/dist/typings/elements/Menu/Items/MediaFigure.d.ts +11 -0
  75. package/dist/typings/elements/Menu/Items/MediaItem.d.ts +12 -0
  76. package/dist/typings/elements/Menu/Items/NextItem.d.ts +12 -0
  77. package/dist/typings/elements/Menu/Items/PreviousItem.d.ts +12 -0
  78. package/dist/typings/elements/Menu/Menu.d.ts +14 -0
  79. package/dist/typings/elements/Menu/Separator.d.ts +11 -0
  80. package/dist/typings/elements/Multiselect/Multiselect.d.ts +14 -0
  81. package/dist/typings/elements/Select/Select.d.ts +14 -0
  82. package/dist/typings/elements/Trigger/Trigger.d.ts +24 -0
  83. package/dist/typings/index.d.ts +31 -0
  84. package/dist/typings/styled/index.d.ts +29 -0
  85. package/dist/typings/styled/items/StyledAddItem.d.ts +13 -0
  86. package/dist/typings/styled/items/StyledItem.d.ts +20 -0
  87. package/dist/typings/styled/items/StyledItemIcon.d.ts +17 -0
  88. package/dist/typings/styled/items/StyledItemMeta.d.ts +18 -0
  89. package/dist/typings/styled/items/StyledNextIcon.d.ts +12 -0
  90. package/dist/typings/styled/items/StyledNextItem.d.ts +13 -0
  91. package/dist/typings/styled/items/StyledPreviousIcon.d.ts +12 -0
  92. package/dist/typings/styled/items/StyledPreviousItem.d.ts +13 -0
  93. package/dist/typings/styled/items/header/StyledHeaderIcon.d.ts +14 -0
  94. package/dist/typings/styled/items/header/StyledHeaderItem.d.ts +16 -0
  95. package/dist/typings/styled/items/media/StyledMediaBody.d.ts +17 -0
  96. package/dist/typings/styled/items/media/StyledMediaFigure.d.ts +285 -0
  97. package/dist/typings/styled/items/media/StyledMediaItem.d.ts +13 -0
  98. package/dist/typings/styled/menu/StyledMenu.d.ts +20 -0
  99. package/dist/typings/styled/menu/StyledMenuWrapper.d.ts +16 -0
  100. package/dist/typings/styled/menu/StyledSeparator.d.ts +10 -0
  101. package/dist/typings/styled/multiselect/StyledMultiselectInput.d.ts +22 -0
  102. package/dist/typings/styled/multiselect/StyledMultiselectItemWrapper.d.ts +10 -0
  103. package/dist/typings/styled/multiselect/StyledMultiselectItemsContainer.d.ts +16 -0
  104. package/dist/typings/styled/multiselect/StyledMultiselectMoreAnchor.d.ts +15 -0
  105. package/dist/typings/styled/select/StyledFauxInput.d.ts +22 -0
  106. package/dist/typings/styled/select/StyledInput.d.ts +15 -0
  107. package/dist/typings/styled/select/StyledSelect.d.ts +10 -0
  108. package/dist/typings/types/index.d.ts +150 -0
  109. package/dist/typings/utils/garden-placements.d.ts +26 -0
  110. package/dist/typings/utils/useDropdownContext.d.ts +28 -0
  111. package/dist/typings/utils/useFieldContext.d.ts +17 -0
  112. package/dist/typings/utils/useItemContext.d.ts +16 -0
  113. package/dist/typings/utils/useMenuContext.d.ts +17 -0
  114. package/package.json +56 -0
@@ -0,0 +1,44 @@
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 '../../../styled/menu/StyledMenu.js';
9
+ import '../../../styled/menu/StyledMenuWrapper.js';
10
+ import '../../../styled/menu/StyledSeparator.js';
11
+ import '../../../styled/items/StyledAddItem.js';
12
+ import '../../../styled/items/StyledItem.js';
13
+ import '../../../styled/items/StyledItemMeta.js';
14
+ import '../../../styled/items/StyledNextItem.js';
15
+ import '../../../styled/items/StyledNextIcon.js';
16
+ import '../../../styled/items/StyledPreviousItem.js';
17
+ import '../../../styled/items/StyledPreviousIcon.js';
18
+ import '../../../styled/items/StyledItemIcon.js';
19
+ import '../../../styled/items/header/StyledHeaderIcon.js';
20
+ import '../../../styled/items/header/StyledHeaderItem.js';
21
+ import { StyledMediaBody } from '../../../styled/items/media/StyledMediaBody.js';
22
+ import '../../../styled/items/media/StyledMediaFigure.js';
23
+ import '../../../styled/items/media/StyledMediaItem.js';
24
+ import '../../../styled/select/StyledFauxInput.js';
25
+ import '../../../styled/select/StyledInput.js';
26
+ import '../../../styled/select/StyledSelect.js';
27
+ import '../../../styled/multiselect/StyledMultiselectInput.js';
28
+ import '../../../styled/multiselect/StyledMultiselectItemsContainer.js';
29
+ import '../../../styled/multiselect/StyledMultiselectItemWrapper.js';
30
+ import '../../../styled/multiselect/StyledMultiselectMoreAnchor.js';
31
+ import useMenuContext from '../../../utils/useMenuContext.js';
32
+
33
+ const MediaBody = React__default.forwardRef((props, ref) => {
34
+ const {
35
+ isCompact
36
+ } = useMenuContext();
37
+ return React__default.createElement(StyledMediaBody, Object.assign({
38
+ ref: ref,
39
+ isCompact: isCompact
40
+ }, props));
41
+ });
42
+ MediaBody.displayName = 'MediaBody';
43
+
44
+ export { MediaBody };
@@ -0,0 +1,42 @@
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 '../../../styled/menu/StyledMenu.js';
9
+ import '../../../styled/menu/StyledMenuWrapper.js';
10
+ import '../../../styled/menu/StyledSeparator.js';
11
+ import '../../../styled/items/StyledAddItem.js';
12
+ import '../../../styled/items/StyledItem.js';
13
+ import '../../../styled/items/StyledItemMeta.js';
14
+ import '../../../styled/items/StyledNextItem.js';
15
+ import '../../../styled/items/StyledNextIcon.js';
16
+ import '../../../styled/items/StyledPreviousItem.js';
17
+ import '../../../styled/items/StyledPreviousIcon.js';
18
+ import '../../../styled/items/StyledItemIcon.js';
19
+ import '../../../styled/items/header/StyledHeaderIcon.js';
20
+ import '../../../styled/items/header/StyledHeaderItem.js';
21
+ import '../../../styled/items/media/StyledMediaBody.js';
22
+ import { StyledMediaFigure } from '../../../styled/items/media/StyledMediaFigure.js';
23
+ import '../../../styled/items/media/StyledMediaItem.js';
24
+ import '../../../styled/select/StyledFauxInput.js';
25
+ import '../../../styled/select/StyledInput.js';
26
+ import '../../../styled/select/StyledSelect.js';
27
+ import '../../../styled/multiselect/StyledMultiselectInput.js';
28
+ import '../../../styled/multiselect/StyledMultiselectItemsContainer.js';
29
+ import '../../../styled/multiselect/StyledMultiselectItemWrapper.js';
30
+ import '../../../styled/multiselect/StyledMultiselectMoreAnchor.js';
31
+ import useMenuContext from '../../../utils/useMenuContext.js';
32
+
33
+ const MediaFigure = props => {
34
+ const {
35
+ isCompact
36
+ } = useMenuContext();
37
+ return React__default.createElement(StyledMediaFigure, Object.assign({
38
+ isCompact: isCompact
39
+ }, props));
40
+ };
41
+
42
+ export { MediaFigure };
@@ -0,0 +1,44 @@
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 PropTypes from 'prop-types';
9
+ import { Item } from './Item.js';
10
+ import '../../../styled/menu/StyledMenu.js';
11
+ import '../../../styled/menu/StyledMenuWrapper.js';
12
+ import '../../../styled/menu/StyledSeparator.js';
13
+ import '../../../styled/items/StyledAddItem.js';
14
+ import '../../../styled/items/StyledItem.js';
15
+ import '../../../styled/items/StyledItemMeta.js';
16
+ import '../../../styled/items/StyledNextItem.js';
17
+ import '../../../styled/items/StyledNextIcon.js';
18
+ import '../../../styled/items/StyledPreviousItem.js';
19
+ import '../../../styled/items/StyledPreviousIcon.js';
20
+ import '../../../styled/items/StyledItemIcon.js';
21
+ import '../../../styled/items/header/StyledHeaderIcon.js';
22
+ import '../../../styled/items/header/StyledHeaderItem.js';
23
+ import '../../../styled/items/media/StyledMediaBody.js';
24
+ import '../../../styled/items/media/StyledMediaFigure.js';
25
+ import { StyledMediaItem } from '../../../styled/items/media/StyledMediaItem.js';
26
+ import '../../../styled/select/StyledFauxInput.js';
27
+ import '../../../styled/select/StyledInput.js';
28
+ import '../../../styled/select/StyledSelect.js';
29
+ import '../../../styled/multiselect/StyledMultiselectInput.js';
30
+ import '../../../styled/multiselect/StyledMultiselectItemsContainer.js';
31
+ import '../../../styled/multiselect/StyledMultiselectItemWrapper.js';
32
+ import '../../../styled/multiselect/StyledMultiselectMoreAnchor.js';
33
+
34
+ const MediaItem = React__default.forwardRef((props, ref) => React__default.createElement(Item, Object.assign({
35
+ component: StyledMediaItem,
36
+ ref: ref
37
+ }, props)));
38
+ MediaItem.displayName = 'MediaItem';
39
+ MediaItem.propTypes = {
40
+ value: PropTypes.any,
41
+ disabled: PropTypes.bool
42
+ };
43
+
44
+ export { MediaItem };
@@ -0,0 +1,90 @@
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 PropTypes from 'prop-types';
9
+ import { Item } from './Item.js';
10
+ import '../../../styled/menu/StyledMenu.js';
11
+ import '../../../styled/menu/StyledMenuWrapper.js';
12
+ import '../../../styled/menu/StyledSeparator.js';
13
+ import '../../../styled/items/StyledAddItem.js';
14
+ import '../../../styled/items/StyledItem.js';
15
+ import '../../../styled/items/StyledItemMeta.js';
16
+ import { StyledNextItem } from '../../../styled/items/StyledNextItem.js';
17
+ import { StyledNextIcon } from '../../../styled/items/StyledNextIcon.js';
18
+ import '../../../styled/items/StyledPreviousItem.js';
19
+ import '../../../styled/items/StyledPreviousIcon.js';
20
+ import { StyledItemIcon } from '../../../styled/items/StyledItemIcon.js';
21
+ import '../../../styled/items/header/StyledHeaderIcon.js';
22
+ import '../../../styled/items/header/StyledHeaderItem.js';
23
+ import '../../../styled/items/media/StyledMediaBody.js';
24
+ import '../../../styled/items/media/StyledMediaFigure.js';
25
+ import '../../../styled/items/media/StyledMediaItem.js';
26
+ import '../../../styled/select/StyledFauxInput.js';
27
+ import '../../../styled/select/StyledInput.js';
28
+ import '../../../styled/select/StyledSelect.js';
29
+ import '../../../styled/multiselect/StyledMultiselectInput.js';
30
+ import '../../../styled/multiselect/StyledMultiselectItemsContainer.js';
31
+ import '../../../styled/multiselect/StyledMultiselectItemWrapper.js';
32
+ import '../../../styled/multiselect/StyledMultiselectMoreAnchor.js';
33
+ import useDropdownContext from '../../../utils/useDropdownContext.js';
34
+ import useMenuContext from '../../../utils/useMenuContext.js';
35
+
36
+ const NextItemComponent = React__default.forwardRef((_ref, ref) => {
37
+ let {
38
+ children,
39
+ disabled,
40
+ ...props
41
+ } = _ref;
42
+ const {
43
+ isCompact
44
+ } = useMenuContext();
45
+ return React__default.createElement(StyledNextItem, Object.assign({
46
+ ref: ref,
47
+ disabled: disabled
48
+ }, props), React__default.createElement(StyledItemIcon, {
49
+ isCompact: isCompact,
50
+ isDisabled: disabled,
51
+ isVisible: true
52
+ }, React__default.createElement(StyledNextIcon, {
53
+ isDisabled: disabled
54
+ })), children);
55
+ });
56
+ const NextItem = React__default.forwardRef((_ref2, ref) => {
57
+ let {
58
+ value,
59
+ disabled,
60
+ ...props
61
+ } = _ref2;
62
+ const {
63
+ nextItemsHashRef,
64
+ downshift: {
65
+ itemToString
66
+ }
67
+ } = useDropdownContext();
68
+ const {
69
+ itemIndexRef
70
+ } = useMenuContext();
71
+ if (!disabled) {
72
+ nextItemsHashRef.current[itemToString(value)] = itemIndexRef.current;
73
+ }
74
+ return React__default.createElement(Item, Object.assign({
75
+ component: NextItemComponent,
76
+ "aria-expanded": true,
77
+ disabled: disabled,
78
+ value: value,
79
+ ref: ref
80
+ }, props, {
81
+ hasIcon: true
82
+ }));
83
+ });
84
+ NextItem.displayName = 'NextItem';
85
+ NextItem.propTypes = {
86
+ value: PropTypes.any,
87
+ disabled: PropTypes.bool
88
+ };
89
+
90
+ export { NextItem };
@@ -0,0 +1,87 @@
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 PropTypes from 'prop-types';
9
+ import { Item } from './Item.js';
10
+ import '../../../styled/menu/StyledMenu.js';
11
+ import '../../../styled/menu/StyledMenuWrapper.js';
12
+ import '../../../styled/menu/StyledSeparator.js';
13
+ import '../../../styled/items/StyledAddItem.js';
14
+ import '../../../styled/items/StyledItem.js';
15
+ import '../../../styled/items/StyledItemMeta.js';
16
+ import '../../../styled/items/StyledNextItem.js';
17
+ import '../../../styled/items/StyledNextIcon.js';
18
+ import { StyledPreviousItem } from '../../../styled/items/StyledPreviousItem.js';
19
+ import { StyledPreviousIcon } from '../../../styled/items/StyledPreviousIcon.js';
20
+ import { StyledItemIcon } from '../../../styled/items/StyledItemIcon.js';
21
+ import '../../../styled/items/header/StyledHeaderIcon.js';
22
+ import '../../../styled/items/header/StyledHeaderItem.js';
23
+ import '../../../styled/items/media/StyledMediaBody.js';
24
+ import '../../../styled/items/media/StyledMediaFigure.js';
25
+ import '../../../styled/items/media/StyledMediaItem.js';
26
+ import '../../../styled/select/StyledFauxInput.js';
27
+ import '../../../styled/select/StyledInput.js';
28
+ import '../../../styled/select/StyledSelect.js';
29
+ import '../../../styled/multiselect/StyledMultiselectInput.js';
30
+ import '../../../styled/multiselect/StyledMultiselectItemsContainer.js';
31
+ import '../../../styled/multiselect/StyledMultiselectItemWrapper.js';
32
+ import '../../../styled/multiselect/StyledMultiselectMoreAnchor.js';
33
+ import useDropdownContext from '../../../utils/useDropdownContext.js';
34
+ import useMenuContext from '../../../utils/useMenuContext.js';
35
+
36
+ const PreviousItemComponent = React__default.forwardRef((_ref, ref) => {
37
+ let {
38
+ children,
39
+ disabled,
40
+ ...props
41
+ } = _ref;
42
+ const {
43
+ isCompact
44
+ } = useMenuContext();
45
+ return React__default.createElement(StyledPreviousItem, Object.assign({
46
+ ref: ref,
47
+ disabled: disabled
48
+ }, props), React__default.createElement(StyledItemIcon, {
49
+ isCompact: isCompact,
50
+ isDisabled: disabled,
51
+ isVisible: true
52
+ }, React__default.createElement(StyledPreviousIcon, {
53
+ isDisabled: disabled
54
+ })), children);
55
+ });
56
+ const PreviousItem = React__default.forwardRef((_ref2, ref) => {
57
+ let {
58
+ value,
59
+ disabled,
60
+ ...props
61
+ } = _ref2;
62
+ const {
63
+ previousIndexRef
64
+ } = useDropdownContext();
65
+ const {
66
+ itemIndexRef
67
+ } = useMenuContext();
68
+ if (!disabled) {
69
+ previousIndexRef.current = itemIndexRef.current;
70
+ }
71
+ return React__default.createElement(Item, Object.assign({
72
+ component: PreviousItemComponent,
73
+ "aria-expanded": true,
74
+ value: value,
75
+ disabled: disabled
76
+ }, props, {
77
+ ref: ref,
78
+ hasIcon: true
79
+ }));
80
+ });
81
+ PreviousItem.displayName = 'PreviousItem';
82
+ PreviousItem.propTypes = {
83
+ value: PropTypes.any,
84
+ disabled: PropTypes.bool
85
+ };
86
+
87
+ export { PreviousItem };
@@ -0,0 +1,160 @@
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, useEffect, useState, useContext } from 'react';
8
+ import { createPortal } from 'react-dom';
9
+ import PropTypes from 'prop-types';
10
+ import { ThemeContext } from 'styled-components';
11
+ import { Popper } from 'react-popper';
12
+ import { PLACEMENT } from '../../types/index.js';
13
+ import { StyledMenu } from '../../styled/menu/StyledMenu.js';
14
+ import { StyledMenuWrapper } from '../../styled/menu/StyledMenuWrapper.js';
15
+ import '../../styled/menu/StyledSeparator.js';
16
+ import '../../styled/items/StyledAddItem.js';
17
+ import '../../styled/items/StyledItem.js';
18
+ import '../../styled/items/StyledItemMeta.js';
19
+ import '../../styled/items/StyledNextItem.js';
20
+ import '../../styled/items/StyledNextIcon.js';
21
+ import '../../styled/items/StyledPreviousItem.js';
22
+ import '../../styled/items/StyledPreviousIcon.js';
23
+ import '../../styled/items/StyledItemIcon.js';
24
+ import '../../styled/items/header/StyledHeaderIcon.js';
25
+ import '../../styled/items/header/StyledHeaderItem.js';
26
+ import '../../styled/items/media/StyledMediaBody.js';
27
+ import '../../styled/items/media/StyledMediaFigure.js';
28
+ import '../../styled/items/media/StyledMediaItem.js';
29
+ import '../../styled/select/StyledFauxInput.js';
30
+ import '../../styled/select/StyledInput.js';
31
+ import '../../styled/select/StyledSelect.js';
32
+ import '../../styled/multiselect/StyledMultiselectInput.js';
33
+ import '../../styled/multiselect/StyledMultiselectItemsContainer.js';
34
+ import '../../styled/multiselect/StyledMultiselectItemWrapper.js';
35
+ import '../../styled/multiselect/StyledMultiselectMoreAnchor.js';
36
+ import useDropdownContext from '../../utils/useDropdownContext.js';
37
+ import { getRtlPopperPlacement, getPopperPlacement } from '../../utils/garden-placements.js';
38
+ import { MenuContext } from '../../utils/useMenuContext.js';
39
+
40
+ const Menu = forwardRef((props, menuRef) => {
41
+ const {
42
+ placement,
43
+ popperModifiers,
44
+ eventsEnabled,
45
+ isAnimated,
46
+ maxHeight,
47
+ style: menuStyle,
48
+ zIndex,
49
+ isCompact,
50
+ children,
51
+ appendToNode,
52
+ ...otherProps
53
+ } = props;
54
+ const {
55
+ hasMenuRef,
56
+ itemIndexRef,
57
+ previousIndexRef,
58
+ nextItemsHashRef,
59
+ popperReferenceElementRef,
60
+ itemSearchRegistry,
61
+ downshift: {
62
+ isOpen,
63
+ getMenuProps
64
+ }
65
+ } = useDropdownContext();
66
+ const scheduleUpdateRef = useRef(undefined);
67
+ useEffect(() => {
68
+ if (scheduleUpdateRef.current && isOpen) {
69
+ scheduleUpdateRef.current();
70
+ }
71
+ });
72
+ const [isVisible, setIsVisible] = useState(isOpen);
73
+ useEffect(() => {
74
+ let timeout;
75
+ if (isOpen) {
76
+ setIsVisible(true);
77
+ } else if (isAnimated) {
78
+ timeout = setTimeout(() => setIsVisible(false), 200);
79
+ } else {
80
+ setIsVisible(false);
81
+ }
82
+ return () => clearTimeout(timeout);
83
+ }, [isOpen, isAnimated]);
84
+ const themeContext = useContext(ThemeContext);
85
+ itemIndexRef.current = 0;
86
+ nextItemsHashRef.current = {};
87
+ previousIndexRef.current = undefined;
88
+ itemSearchRegistry.current = [];
89
+ const popperPlacement = themeContext.rtl ? getRtlPopperPlacement(placement) : getPopperPlacement(placement);
90
+ return (
91
+ React__default.createElement(MenuContext.Provider, {
92
+ value: {
93
+ itemIndexRef,
94
+ isCompact
95
+ }
96
+ }, React__default.createElement(Popper, {
97
+ placement: popperPlacement,
98
+ modifiers: popperModifiers
99
+ ,
100
+ eventsEnabled: isOpen && eventsEnabled
101
+ }, _ref => {
102
+ let {
103
+ ref,
104
+ style,
105
+ scheduleUpdate,
106
+ placement: currentPlacement
107
+ } = _ref;
108
+ let computedStyle = menuStyle;
109
+ scheduleUpdateRef.current = scheduleUpdate;
110
+ if ((isOpen || isVisible) && popperReferenceElementRef.current && popperReferenceElementRef.current.getBoundingClientRect) {
111
+ computedStyle = {
112
+ width: popperReferenceElementRef.current.getBoundingClientRect().width,
113
+ ...menuStyle
114
+ };
115
+ }
116
+ const menuProps = getMenuProps({
117
+ role: hasMenuRef.current ? 'menu' : 'listbox',
118
+ placement: currentPlacement,
119
+ isAnimated: isAnimated && (isOpen || isVisible),
120
+ ...otherProps
121
+ });
122
+ const menu = React__default.createElement(StyledMenuWrapper, {
123
+ ref: isOpen ? ref : undefined,
124
+ hasArrow: menuProps.hasArrow,
125
+ placement: menuProps.placement,
126
+ style: style,
127
+ isHidden: !isOpen,
128
+ isAnimated: menuProps.isAnimated,
129
+ zIndex: zIndex
130
+ }, React__default.createElement(StyledMenu, Object.assign({
131
+ ref: menuRef,
132
+ isCompact: isCompact,
133
+ maxHeight: maxHeight,
134
+ style: computedStyle
135
+ }, menuProps), (isOpen || isVisible) && children));
136
+ return appendToNode ? createPortal(menu, appendToNode) : menu;
137
+ }))
138
+ );
139
+ });
140
+ Menu.displayName = 'Menu';
141
+ Menu.propTypes = {
142
+ popperModifiers: PropTypes.any,
143
+ eventsEnabled: PropTypes.bool,
144
+ zIndex: PropTypes.number,
145
+ style: PropTypes.object,
146
+ placement: PropTypes.oneOf(PLACEMENT),
147
+ isAnimated: PropTypes.bool,
148
+ isCompact: PropTypes.bool,
149
+ hasArrow: PropTypes.bool,
150
+ maxHeight: PropTypes.string
151
+ };
152
+ Menu.defaultProps = {
153
+ placement: 'bottom-start',
154
+ isAnimated: true,
155
+ eventsEnabled: true,
156
+ maxHeight: '400px',
157
+ zIndex: 1000
158
+ };
159
+
160
+ export { Menu };
@@ -0,0 +1,37 @@
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 '../../styled/menu/StyledMenu.js';
9
+ import '../../styled/menu/StyledMenuWrapper.js';
10
+ import { StyledSeparator } from '../../styled/menu/StyledSeparator.js';
11
+ import '../../styled/items/StyledAddItem.js';
12
+ import '../../styled/items/StyledItem.js';
13
+ import '../../styled/items/StyledItemMeta.js';
14
+ import '../../styled/items/StyledNextItem.js';
15
+ import '../../styled/items/StyledNextIcon.js';
16
+ import '../../styled/items/StyledPreviousItem.js';
17
+ import '../../styled/items/StyledPreviousIcon.js';
18
+ import '../../styled/items/StyledItemIcon.js';
19
+ import '../../styled/items/header/StyledHeaderIcon.js';
20
+ import '../../styled/items/header/StyledHeaderItem.js';
21
+ import '../../styled/items/media/StyledMediaBody.js';
22
+ import '../../styled/items/media/StyledMediaFigure.js';
23
+ import '../../styled/items/media/StyledMediaItem.js';
24
+ import '../../styled/select/StyledFauxInput.js';
25
+ import '../../styled/select/StyledInput.js';
26
+ import '../../styled/select/StyledSelect.js';
27
+ import '../../styled/multiselect/StyledMultiselectInput.js';
28
+ import '../../styled/multiselect/StyledMultiselectItemsContainer.js';
29
+ import '../../styled/multiselect/StyledMultiselectItemWrapper.js';
30
+ import '../../styled/multiselect/StyledMultiselectMoreAnchor.js';
31
+
32
+ const Separator = React__default.forwardRef((props, ref) => React__default.createElement(StyledSeparator, Object.assign({
33
+ ref: ref
34
+ }, props)));
35
+ Separator.displayName = 'Separator';
36
+
37
+ export { Separator };