@atlaskit/react-select 0.0.2

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 (197) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/LICENSE.md +11 -0
  3. package/README.md +10 -0
  4. package/async/package.json +15 -0
  5. package/base/package.json +15 -0
  6. package/creatable/package.json +15 -0
  7. package/dist/cjs/accessibility/helpers.js +34 -0
  8. package/dist/cjs/accessibility/index.js +74 -0
  9. package/dist/cjs/async-creatable.js +27 -0
  10. package/dist/cjs/async.js +30 -0
  11. package/dist/cjs/builtins.js +18 -0
  12. package/dist/cjs/components/containers.js +100 -0
  13. package/dist/cjs/components/control.js +67 -0
  14. package/dist/cjs/components/group.js +79 -0
  15. package/dist/cjs/components/index.js +53 -0
  16. package/dist/cjs/components/indicators.js +214 -0
  17. package/dist/cjs/components/input.js +93 -0
  18. package/dist/cjs/components/internal/a11y-text.js +34 -0
  19. package/dist/cjs/components/internal/dummy-input.js +43 -0
  20. package/dist/cjs/components/internal/index.js +34 -0
  21. package/dist/cjs/components/internal/required-input.js +43 -0
  22. package/dist/cjs/components/internal/scroll-manager.js +57 -0
  23. package/dist/cjs/components/internal/use-scroll-capture.js +132 -0
  24. package/dist/cjs/components/internal/use-scroll-lock.js +149 -0
  25. package/dist/cjs/components/live-region.js +153 -0
  26. package/dist/cjs/components/menu.js +464 -0
  27. package/dist/cjs/components/multi-value.js +129 -0
  28. package/dist/cjs/components/option.js +62 -0
  29. package/dist/cjs/components/placeholder.js +39 -0
  30. package/dist/cjs/components/single-value.js +46 -0
  31. package/dist/cjs/creatable.js +30 -0
  32. package/dist/cjs/diacritics.js +274 -0
  33. package/dist/cjs/filters.js +50 -0
  34. package/dist/cjs/index.js +55 -0
  35. package/dist/cjs/nonce-provider.js +30 -0
  36. package/dist/cjs/select.js +1803 -0
  37. package/dist/cjs/state-manager.js +31 -0
  38. package/dist/cjs/styles.js +66 -0
  39. package/dist/cjs/theme.js +42 -0
  40. package/dist/cjs/types.js +5 -0
  41. package/dist/cjs/use-async.js +156 -0
  42. package/dist/cjs/use-creatable.js +114 -0
  43. package/dist/cjs/use-state-manager.js +83 -0
  44. package/dist/cjs/utils.js +357 -0
  45. package/dist/es2019/accessibility/helpers.js +24 -0
  46. package/dist/es2019/accessibility/index.js +72 -0
  47. package/dist/es2019/async-creatable.js +17 -0
  48. package/dist/es2019/async.js +16 -0
  49. package/dist/es2019/builtins.js +4 -0
  50. package/dist/es2019/components/containers.js +100 -0
  51. package/dist/es2019/components/control.js +62 -0
  52. package/dist/es2019/components/group.js +74 -0
  53. package/dist/es2019/components/index.js +41 -0
  54. package/dist/es2019/components/indicators.js +211 -0
  55. package/dist/es2019/components/input.js +88 -0
  56. package/dist/es2019/components/internal/a11y-text.js +25 -0
  57. package/dist/es2019/components/internal/dummy-input.js +36 -0
  58. package/dist/es2019/components/internal/index.js +4 -0
  59. package/dist/es2019/components/internal/required-input.js +35 -0
  60. package/dist/es2019/components/internal/scroll-manager.js +49 -0
  61. package/dist/es2019/components/internal/use-scroll-capture.js +128 -0
  62. package/dist/es2019/components/internal/use-scroll-lock.js +143 -0
  63. package/dist/es2019/components/live-region.js +151 -0
  64. package/dist/es2019/components/menu.js +466 -0
  65. package/dist/es2019/components/multi-value.js +134 -0
  66. package/dist/es2019/components/option.js +57 -0
  67. package/dist/es2019/components/placeholder.js +34 -0
  68. package/dist/es2019/components/single-value.js +41 -0
  69. package/dist/es2019/creatable.js +15 -0
  70. package/dist/es2019/diacritics.js +264 -0
  71. package/dist/es2019/filters.js +36 -0
  72. package/dist/es2019/index.js +8 -0
  73. package/dist/es2019/nonce-provider.js +19 -0
  74. package/dist/es2019/select.js +1766 -0
  75. package/dist/es2019/state-manager.js +22 -0
  76. package/dist/es2019/styles.js +56 -0
  77. package/dist/es2019/theme.js +36 -0
  78. package/dist/es2019/types.js +1 -0
  79. package/dist/es2019/use-async.js +117 -0
  80. package/dist/es2019/use-creatable.js +81 -0
  81. package/dist/es2019/use-state-manager.js +60 -0
  82. package/dist/es2019/utils.js +309 -0
  83. package/dist/esm/accessibility/helpers.js +24 -0
  84. package/dist/esm/accessibility/index.js +68 -0
  85. package/dist/esm/async-creatable.js +17 -0
  86. package/dist/esm/async.js +16 -0
  87. package/dist/esm/builtins.js +12 -0
  88. package/dist/esm/components/containers.js +96 -0
  89. package/dist/esm/components/control.js +62 -0
  90. package/dist/esm/components/group.js +74 -0
  91. package/dist/esm/components/index.js +43 -0
  92. package/dist/esm/components/indicators.js +209 -0
  93. package/dist/esm/components/input.js +88 -0
  94. package/dist/esm/components/internal/a11y-text.js +27 -0
  95. package/dist/esm/components/internal/dummy-input.js +37 -0
  96. package/dist/esm/components/internal/index.js +4 -0
  97. package/dist/esm/components/internal/required-input.js +36 -0
  98. package/dist/esm/components/internal/scroll-manager.js +49 -0
  99. package/dist/esm/components/internal/use-scroll-capture.js +126 -0
  100. package/dist/esm/components/internal/use-scroll-lock.js +143 -0
  101. package/dist/esm/components/live-region.js +148 -0
  102. package/dist/esm/components/menu.js +460 -0
  103. package/dist/esm/components/multi-value.js +122 -0
  104. package/dist/esm/components/option.js +57 -0
  105. package/dist/esm/components/placeholder.js +34 -0
  106. package/dist/esm/components/single-value.js +41 -0
  107. package/dist/esm/creatable.js +15 -0
  108. package/dist/esm/diacritics.js +268 -0
  109. package/dist/esm/filters.js +43 -0
  110. package/dist/esm/index.js +8 -0
  111. package/dist/esm/nonce-provider.js +20 -0
  112. package/dist/esm/select.js +1794 -0
  113. package/dist/esm/state-manager.js +22 -0
  114. package/dist/esm/styles.js +58 -0
  115. package/dist/esm/theme.js +36 -0
  116. package/dist/esm/types.js +1 -0
  117. package/dist/esm/use-async.js +149 -0
  118. package/dist/esm/use-creatable.js +107 -0
  119. package/dist/esm/use-state-manager.js +76 -0
  120. package/dist/esm/utils.js +328 -0
  121. package/dist/types/accessibility/helpers.d.ts +5 -0
  122. package/dist/types/accessibility/index.d.ts +125 -0
  123. package/dist/types/async-creatable.d.ts +10 -0
  124. package/dist/types/async.d.ts +9 -0
  125. package/dist/types/builtins.d.ts +5 -0
  126. package/dist/types/components/containers.d.ts +50 -0
  127. package/dist/types/components/control.d.ts +33 -0
  128. package/dist/types/components/group.d.ts +53 -0
  129. package/dist/types/components/index.d.ts +73 -0
  130. package/dist/types/components/indicators.d.ts +72 -0
  131. package/dist/types/components/input.d.ts +33 -0
  132. package/dist/types/components/internal/a11y-text.d.ts +8 -0
  133. package/dist/types/components/internal/dummy-input.d.ts +9 -0
  134. package/dist/types/components/internal/index.d.ts +4 -0
  135. package/dist/types/components/internal/required-input.d.ts +10 -0
  136. package/dist/types/components/internal/scroll-manager.d.ts +17 -0
  137. package/dist/types/components/internal/use-scroll-capture.d.ts +12 -0
  138. package/dist/types/components/internal/use-scroll-lock.d.ts +9 -0
  139. package/dist/types/components/live-region.d.ts +24 -0
  140. package/dist/types/components/menu.d.ts +130 -0
  141. package/dist/types/components/multi-value.d.ts +47 -0
  142. package/dist/types/components/option.d.ts +49 -0
  143. package/dist/types/components/placeholder.d.ts +22 -0
  144. package/dist/types/components/single-value.d.ts +28 -0
  145. package/dist/types/creatable.d.ts +10 -0
  146. package/dist/types/diacritics.d.ts +1 -0
  147. package/dist/types/filters.d.ts +15 -0
  148. package/dist/types/index.d.ts +28 -0
  149. package/dist/types/nonce-provider.d.ts +8 -0
  150. package/dist/types/select.d.ts +616 -0
  151. package/dist/types/state-manager.d.ts +17 -0
  152. package/dist/types/styles.d.ts +68 -0
  153. package/dist/types/theme.d.ts +27 -0
  154. package/dist/types/types.d.ts +134 -0
  155. package/dist/types/use-async.d.ts +31 -0
  156. package/dist/types/use-creatable.d.ts +46 -0
  157. package/dist/types/use-state-manager.d.ts +15 -0
  158. package/dist/types/utils.d.ts +44 -0
  159. package/dist/types-ts4.5/accessibility/helpers.d.ts +5 -0
  160. package/dist/types-ts4.5/accessibility/index.d.ts +125 -0
  161. package/dist/types-ts4.5/async-creatable.d.ts +10 -0
  162. package/dist/types-ts4.5/async.d.ts +9 -0
  163. package/dist/types-ts4.5/builtins.d.ts +5 -0
  164. package/dist/types-ts4.5/components/containers.d.ts +50 -0
  165. package/dist/types-ts4.5/components/control.d.ts +33 -0
  166. package/dist/types-ts4.5/components/group.d.ts +53 -0
  167. package/dist/types-ts4.5/components/index.d.ts +73 -0
  168. package/dist/types-ts4.5/components/indicators.d.ts +72 -0
  169. package/dist/types-ts4.5/components/input.d.ts +33 -0
  170. package/dist/types-ts4.5/components/internal/a11y-text.d.ts +8 -0
  171. package/dist/types-ts4.5/components/internal/dummy-input.d.ts +9 -0
  172. package/dist/types-ts4.5/components/internal/index.d.ts +4 -0
  173. package/dist/types-ts4.5/components/internal/required-input.d.ts +10 -0
  174. package/dist/types-ts4.5/components/internal/scroll-manager.d.ts +17 -0
  175. package/dist/types-ts4.5/components/internal/use-scroll-capture.d.ts +12 -0
  176. package/dist/types-ts4.5/components/internal/use-scroll-lock.d.ts +9 -0
  177. package/dist/types-ts4.5/components/live-region.d.ts +24 -0
  178. package/dist/types-ts4.5/components/menu.d.ts +130 -0
  179. package/dist/types-ts4.5/components/multi-value.d.ts +47 -0
  180. package/dist/types-ts4.5/components/option.d.ts +49 -0
  181. package/dist/types-ts4.5/components/placeholder.d.ts +22 -0
  182. package/dist/types-ts4.5/components/single-value.d.ts +28 -0
  183. package/dist/types-ts4.5/creatable.d.ts +10 -0
  184. package/dist/types-ts4.5/diacritics.d.ts +1 -0
  185. package/dist/types-ts4.5/filters.d.ts +15 -0
  186. package/dist/types-ts4.5/index.d.ts +28 -0
  187. package/dist/types-ts4.5/nonce-provider.d.ts +8 -0
  188. package/dist/types-ts4.5/select.d.ts +616 -0
  189. package/dist/types-ts4.5/state-manager.d.ts +17 -0
  190. package/dist/types-ts4.5/styles.d.ts +68 -0
  191. package/dist/types-ts4.5/theme.d.ts +27 -0
  192. package/dist/types-ts4.5/types.d.ts +134 -0
  193. package/dist/types-ts4.5/use-async.d.ts +31 -0
  194. package/dist/types-ts4.5/use-creatable.d.ts +46 -0
  195. package/dist/types-ts4.5/use-state-manager.d.ts +15 -0
  196. package/dist/types-ts4.5/utils.d.ts +44 -0
  197. package/package.json +83 -0
@@ -0,0 +1,460 @@
1
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
2
+ import _extends from "@babel/runtime/helpers/extends";
3
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
5
+ var _excluded = ["children", "innerProps"],
6
+ _excluded2 = ["children", "innerProps"];
7
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
8
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
9
+ /**
10
+ * @jsxRuntime classic
11
+ * @jsx jsx
12
+ */
13
+ import { createContext, useCallback, useContext, useMemo, useRef, useState } from 'react';
14
+ import { jsx } from '@emotion/react';
15
+ import { autoUpdate } from '@floating-ui/dom';
16
+ import { createPortal } from 'react-dom';
17
+ import useLayoutEffect from 'use-isomorphic-layout-effect';
18
+ import { animatedScrollTo, getBoundingClientObj, getScrollParent, getScrollTop, getStyleProps, normalizedHeight, scrollTo } from '../utils';
19
+
20
+ // ==============================
21
+ // Menu
22
+ // ==============================
23
+
24
+ // Get Menu Placement
25
+ // ------------------------------
26
+
27
+ export function getMenuPlacement(_ref) {
28
+ var preferredMaxHeight = _ref.maxHeight,
29
+ menuEl = _ref.menuEl,
30
+ minHeight = _ref.minHeight,
31
+ preferredPlacement = _ref.placement,
32
+ shouldScroll = _ref.shouldScroll,
33
+ isFixedPosition = _ref.isFixedPosition,
34
+ controlHeight = _ref.controlHeight;
35
+ var scrollParent = getScrollParent(menuEl);
36
+ var defaultState = {
37
+ placement: 'bottom',
38
+ maxHeight: preferredMaxHeight
39
+ };
40
+
41
+ // something went wrong, return default state
42
+ if (!menuEl || !menuEl.offsetParent) {
43
+ return defaultState;
44
+ }
45
+
46
+ // we can't trust `scrollParent.scrollHeight` --> it may increase when
47
+ // the menu is rendered
48
+ var _scrollParent$getBoun = scrollParent.getBoundingClientRect(),
49
+ scrollHeight = _scrollParent$getBoun.height;
50
+ var _menuEl$getBoundingCl = menuEl.getBoundingClientRect(),
51
+ menuBottom = _menuEl$getBoundingCl.bottom,
52
+ menuHeight = _menuEl$getBoundingCl.height,
53
+ menuTop = _menuEl$getBoundingCl.top;
54
+ var _menuEl$offsetParent$ = menuEl.offsetParent.getBoundingClientRect(),
55
+ containerTop = _menuEl$offsetParent$.top;
56
+ var viewHeight = isFixedPosition ? window.innerHeight : normalizedHeight(scrollParent);
57
+ var scrollTop = getScrollTop(scrollParent);
58
+ var marginBottom = parseInt(getComputedStyle(menuEl).marginBottom, 10);
59
+ var marginTop = parseInt(getComputedStyle(menuEl).marginTop, 10);
60
+ var viewSpaceAbove = containerTop - marginTop;
61
+ var viewSpaceBelow = viewHeight - menuTop;
62
+ var scrollSpaceAbove = viewSpaceAbove + scrollTop;
63
+ var scrollSpaceBelow = scrollHeight - scrollTop - menuTop;
64
+ var scrollDown = menuBottom - viewHeight + scrollTop + marginBottom;
65
+ var scrollUp = scrollTop + menuTop - marginTop;
66
+ var scrollDuration = 160;
67
+ switch (preferredPlacement) {
68
+ case 'auto':
69
+ case 'bottom':
70
+ // 1: the menu will fit, do nothing
71
+ if (viewSpaceBelow >= menuHeight) {
72
+ return {
73
+ placement: 'bottom',
74
+ maxHeight: preferredMaxHeight
75
+ };
76
+ }
77
+
78
+ // 2: the menu will fit, if scrolled
79
+ if (scrollSpaceBelow >= menuHeight && !isFixedPosition) {
80
+ if (shouldScroll) {
81
+ animatedScrollTo(scrollParent, scrollDown, scrollDuration);
82
+ }
83
+ return {
84
+ placement: 'bottom',
85
+ maxHeight: preferredMaxHeight
86
+ };
87
+ }
88
+
89
+ // 3: the menu will fit, if constrained
90
+ if (!isFixedPosition && scrollSpaceBelow >= minHeight || isFixedPosition && viewSpaceBelow >= minHeight) {
91
+ if (shouldScroll) {
92
+ animatedScrollTo(scrollParent, scrollDown, scrollDuration);
93
+ }
94
+
95
+ // we want to provide as much of the menu as possible to the user,
96
+ // so give them whatever is available below rather than the minHeight.
97
+ var constrainedHeight = isFixedPosition ? viewSpaceBelow - marginBottom : scrollSpaceBelow - marginBottom;
98
+ return {
99
+ placement: 'bottom',
100
+ maxHeight: constrainedHeight
101
+ };
102
+ }
103
+
104
+ // 4. Forked beviour when there isn't enough space below
105
+
106
+ // AUTO: flip the menu, render above
107
+ if (preferredPlacement === 'auto' || isFixedPosition) {
108
+ // may need to be constrained after flipping
109
+ var _constrainedHeight = preferredMaxHeight;
110
+ var spaceAbove = isFixedPosition ? viewSpaceAbove : scrollSpaceAbove;
111
+ if (spaceAbove >= minHeight) {
112
+ _constrainedHeight = Math.min(spaceAbove - marginBottom - controlHeight, preferredMaxHeight);
113
+ }
114
+ return {
115
+ placement: 'top',
116
+ maxHeight: _constrainedHeight
117
+ };
118
+ }
119
+
120
+ // BOTTOM: allow browser to increase scrollable area and immediately set scroll
121
+ if (preferredPlacement === 'bottom') {
122
+ if (shouldScroll) {
123
+ scrollTo(scrollParent, scrollDown);
124
+ }
125
+ return {
126
+ placement: 'bottom',
127
+ maxHeight: preferredMaxHeight
128
+ };
129
+ }
130
+ break;
131
+ case 'top':
132
+ // 1: the menu will fit, do nothing
133
+ if (viewSpaceAbove >= menuHeight) {
134
+ return {
135
+ placement: 'top',
136
+ maxHeight: preferredMaxHeight
137
+ };
138
+ }
139
+
140
+ // 2: the menu will fit, if scrolled
141
+ if (scrollSpaceAbove >= menuHeight && !isFixedPosition) {
142
+ if (shouldScroll) {
143
+ animatedScrollTo(scrollParent, scrollUp, scrollDuration);
144
+ }
145
+ return {
146
+ placement: 'top',
147
+ maxHeight: preferredMaxHeight
148
+ };
149
+ }
150
+
151
+ // 3: the menu will fit, if constrained
152
+ if (!isFixedPosition && scrollSpaceAbove >= minHeight || isFixedPosition && viewSpaceAbove >= minHeight) {
153
+ var _constrainedHeight2 = preferredMaxHeight;
154
+
155
+ // we want to provide as much of the menu as possible to the user,
156
+ // so give them whatever is available below rather than the minHeight.
157
+ if (!isFixedPosition && scrollSpaceAbove >= minHeight || isFixedPosition && viewSpaceAbove >= minHeight) {
158
+ _constrainedHeight2 = isFixedPosition ? viewSpaceAbove - marginTop : scrollSpaceAbove - marginTop;
159
+ }
160
+ if (shouldScroll) {
161
+ animatedScrollTo(scrollParent, scrollUp, scrollDuration);
162
+ }
163
+ return {
164
+ placement: 'top',
165
+ maxHeight: _constrainedHeight2
166
+ };
167
+ }
168
+
169
+ // 4. not enough space, the browser WILL NOT increase scrollable area when
170
+ // absolutely positioned element rendered above the viewport (only below).
171
+ // Flip the menu, render below
172
+ return {
173
+ placement: 'bottom',
174
+ maxHeight: preferredMaxHeight
175
+ };
176
+ default:
177
+ throw new Error("Invalid placement provided \"".concat(preferredPlacement, "\"."));
178
+ }
179
+ return defaultState;
180
+ }
181
+
182
+ // Menu Component
183
+ // ------------------------------
184
+
185
+ function alignToControl(placement) {
186
+ var placementToCSSProp = {
187
+ bottom: 'top',
188
+ top: 'bottom'
189
+ };
190
+ return placement ? placementToCSSProp[placement] : 'bottom';
191
+ }
192
+ var coercePlacement = function coercePlacement(p) {
193
+ return p === 'auto' ? 'bottom' : p;
194
+ };
195
+ export var menuCSS = function menuCSS(_ref2, unstyled) {
196
+ var _objectSpread2;
197
+ var placement = _ref2.placement,
198
+ _ref2$theme = _ref2.theme,
199
+ borderRadius = _ref2$theme.borderRadius,
200
+ spacing = _ref2$theme.spacing,
201
+ colors = _ref2$theme.colors;
202
+ return _objectSpread((_objectSpread2 = {
203
+ label: 'menu'
204
+ }, _defineProperty(_objectSpread2, alignToControl(placement), '100%'), _defineProperty(_objectSpread2, "position", 'absolute'), _defineProperty(_objectSpread2, "width", '100%'), _defineProperty(_objectSpread2, "zIndex", 1), _objectSpread2), unstyled ? {} : {
205
+ backgroundColor: colors.neutral0,
206
+ borderRadius: borderRadius,
207
+ boxShadow: '0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1)',
208
+ marginBottom: spacing.menuGutter,
209
+ marginTop: spacing.menuGutter
210
+ });
211
+ };
212
+ var PortalPlacementContext = /*#__PURE__*/createContext(null);
213
+
214
+ // NOTE: internal only
215
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
216
+ export var MenuPlacer = function MenuPlacer(props) {
217
+ var children = props.children,
218
+ minMenuHeight = props.minMenuHeight,
219
+ maxMenuHeight = props.maxMenuHeight,
220
+ menuPlacement = props.menuPlacement,
221
+ menuPosition = props.menuPosition,
222
+ menuShouldScrollIntoView = props.menuShouldScrollIntoView,
223
+ theme = props.theme;
224
+ var _ref3 = useContext(PortalPlacementContext) || {},
225
+ setPortalPlacement = _ref3.setPortalPlacement;
226
+ var ref = useRef(null);
227
+ var _useState = useState(maxMenuHeight),
228
+ _useState2 = _slicedToArray(_useState, 2),
229
+ maxHeight = _useState2[0],
230
+ setMaxHeight = _useState2[1];
231
+ var _useState3 = useState(null),
232
+ _useState4 = _slicedToArray(_useState3, 2),
233
+ placement = _useState4[0],
234
+ setPlacement = _useState4[1];
235
+ var controlHeight = theme.spacing.controlHeight;
236
+ useLayoutEffect(function () {
237
+ var menuEl = ref.current;
238
+ if (!menuEl) {
239
+ return;
240
+ }
241
+
242
+ // DO NOT scroll if position is fixed
243
+ var isFixedPosition = menuPosition === 'fixed';
244
+ var shouldScroll = menuShouldScrollIntoView && !isFixedPosition;
245
+ var state = getMenuPlacement({
246
+ maxHeight: maxMenuHeight,
247
+ menuEl: menuEl,
248
+ minHeight: minMenuHeight,
249
+ placement: menuPlacement,
250
+ shouldScroll: shouldScroll,
251
+ isFixedPosition: isFixedPosition,
252
+ controlHeight: controlHeight
253
+ });
254
+ setMaxHeight(state.maxHeight);
255
+ setPlacement(state.placement);
256
+ setPortalPlacement === null || setPortalPlacement === void 0 || setPortalPlacement(state.placement);
257
+ }, [maxMenuHeight, menuPlacement, menuPosition, menuShouldScrollIntoView, minMenuHeight, setPortalPlacement, controlHeight]);
258
+ return children({
259
+ ref: ref,
260
+ placerProps: _objectSpread(_objectSpread({}, props), {}, {
261
+ placement: placement || coercePlacement(menuPlacement),
262
+ maxHeight: maxHeight
263
+ })
264
+ });
265
+ };
266
+ var Menu = function Menu(props) {
267
+ var children = props.children,
268
+ innerRef = props.innerRef,
269
+ innerProps = props.innerProps;
270
+ return jsx("div", _extends({}, getStyleProps(props, 'menu', {
271
+ menu: true
272
+ }), {
273
+ ref: innerRef
274
+ }, innerProps), children);
275
+ };
276
+
277
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
278
+ export default Menu;
279
+
280
+ // ==============================
281
+ // Menu List
282
+ // ==============================
283
+
284
+ export var menuListCSS = function menuListCSS(_ref4, unstyled) {
285
+ var maxHeight = _ref4.maxHeight,
286
+ baseUnit = _ref4.theme.spacing.baseUnit;
287
+ return _objectSpread({
288
+ maxHeight: maxHeight,
289
+ overflowY: 'auto',
290
+ position: 'relative',
291
+ // required for offset[Height, Top] > keyboard scroll
292
+ WebkitOverflowScrolling: 'touch'
293
+ }, unstyled ? {} : {
294
+ paddingBottom: baseUnit,
295
+ paddingTop: baseUnit
296
+ });
297
+ };
298
+
299
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
300
+ export var MenuList = function MenuList(props) {
301
+ var children = props.children,
302
+ innerProps = props.innerProps,
303
+ innerRef = props.innerRef,
304
+ isMulti = props.isMulti;
305
+ return jsx("div", _extends({}, getStyleProps(props, 'menuList', {
306
+ 'menu-list': true,
307
+ 'menu-list--is-multi': isMulti
308
+ }), {
309
+ //@ts-ignore
310
+ ref: innerRef
311
+ }, innerProps), children);
312
+ };
313
+
314
+ // ==============================
315
+ // Menu Notices
316
+ // ==============================
317
+
318
+ var noticeCSS = function noticeCSS(_ref5, unstyled) {
319
+ var _ref5$theme = _ref5.theme,
320
+ baseUnit = _ref5$theme.spacing.baseUnit,
321
+ colors = _ref5$theme.colors;
322
+ return _objectSpread({
323
+ textAlign: 'center'
324
+ }, unstyled ? {} : {
325
+ color: colors.neutral40,
326
+ padding: "".concat(baseUnit * 2, "px ").concat(baseUnit * 3, "px")
327
+ });
328
+ };
329
+ export var noOptionsMessageCSS = noticeCSS;
330
+ export var loadingMessageCSS = noticeCSS;
331
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
332
+ export var NoOptionsMessage = function NoOptionsMessage(_ref6) {
333
+ var _ref6$children = _ref6.children,
334
+ children = _ref6$children === void 0 ? 'No options' : _ref6$children,
335
+ innerProps = _ref6.innerProps,
336
+ restProps = _objectWithoutProperties(_ref6, _excluded);
337
+ return (
338
+ //@ts-ignore
339
+ jsx("div", _extends({}, getStyleProps(_objectSpread(_objectSpread({}, restProps), {}, {
340
+ children: children,
341
+ innerProps: innerProps
342
+ }), 'noOptionsMessage', {
343
+ 'menu-notice': true,
344
+ 'menu-notice--no-options': true
345
+ }), {
346
+ // eslint-disable-next-line jsx-a11y/role-has-required-aria-props
347
+ role: "option"
348
+ }, innerProps), children)
349
+ );
350
+ };
351
+
352
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
353
+ export var LoadingMessage = function LoadingMessage(_ref7) {
354
+ var _ref7$children = _ref7.children,
355
+ children = _ref7$children === void 0 ? 'Loading...' : _ref7$children,
356
+ innerProps = _ref7.innerProps,
357
+ restProps = _objectWithoutProperties(_ref7, _excluded2);
358
+ return jsx("div", _extends({}, getStyleProps(_objectSpread(_objectSpread({}, restProps), {}, {
359
+ children: children,
360
+ innerProps: innerProps
361
+ }), 'loadingMessage', {
362
+ 'menu-notice': true,
363
+ 'menu-notice--loading': true
364
+ }), innerProps), children);
365
+ };
366
+
367
+ // ==============================
368
+ // Menu Portal
369
+ // ==============================
370
+
371
+ export var menuPortalCSS = function menuPortalCSS(_ref8) {
372
+ var rect = _ref8.rect,
373
+ offset = _ref8.offset,
374
+ position = _ref8.position;
375
+ return {
376
+ left: rect.left,
377
+ position: position,
378
+ top: offset,
379
+ width: rect.width,
380
+ zIndex: 1
381
+ };
382
+ };
383
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
384
+ export var MenuPortal = function MenuPortal(props) {
385
+ var appendTo = props.appendTo,
386
+ children = props.children,
387
+ controlElement = props.controlElement,
388
+ innerProps = props.innerProps,
389
+ menuPlacement = props.menuPlacement,
390
+ menuPosition = props.menuPosition;
391
+ var menuPortalRef = useRef(null);
392
+ var cleanupRef = useRef(null);
393
+ var _useState5 = useState(coercePlacement(menuPlacement)),
394
+ _useState6 = _slicedToArray(_useState5, 2),
395
+ placement = _useState6[0],
396
+ setPortalPlacement = _useState6[1];
397
+ var portalPlacementContext = useMemo(function () {
398
+ return {
399
+ setPortalPlacement: setPortalPlacement
400
+ };
401
+ }, []);
402
+ var _useState7 = useState(null),
403
+ _useState8 = _slicedToArray(_useState7, 2),
404
+ computedPosition = _useState8[0],
405
+ setComputedPosition = _useState8[1];
406
+ var updateComputedPosition = useCallback(function () {
407
+ if (!controlElement) {
408
+ return;
409
+ }
410
+ var rect = getBoundingClientObj(controlElement);
411
+ var scrollDistance = menuPosition === 'fixed' ? 0 : window.pageYOffset;
412
+ var offset = rect[placement] + scrollDistance;
413
+ if (offset !== (computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.offset) || rect.left !== (computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.rect.left) || rect.width !== (computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.rect.width)) {
414
+ setComputedPosition({
415
+ offset: offset,
416
+ rect: rect
417
+ });
418
+ }
419
+ }, [controlElement, menuPosition, placement, computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.offset, computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.rect.left, computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.rect.width]);
420
+ useLayoutEffect(function () {
421
+ updateComputedPosition();
422
+ }, [updateComputedPosition]);
423
+ var runAutoUpdate = useCallback(function () {
424
+ if (typeof cleanupRef.current === 'function') {
425
+ cleanupRef.current();
426
+ cleanupRef.current = null;
427
+ }
428
+ if (controlElement && menuPortalRef.current) {
429
+ cleanupRef.current = autoUpdate(controlElement, menuPortalRef.current, updateComputedPosition, {
430
+ elementResize: 'ResizeObserver' in window
431
+ });
432
+ }
433
+ }, [controlElement, updateComputedPosition]);
434
+ useLayoutEffect(function () {
435
+ runAutoUpdate();
436
+ }, [runAutoUpdate]);
437
+ var setMenuPortalElement = useCallback(function (menuPortalElement) {
438
+ menuPortalRef.current = menuPortalElement;
439
+ runAutoUpdate();
440
+ }, [runAutoUpdate]);
441
+
442
+ // bail early if required elements aren't present
443
+ if (!appendTo && menuPosition !== 'fixed' || !computedPosition) {
444
+ return null;
445
+ }
446
+
447
+ // same wrapper element whether fixed or portalled
448
+ var menuWrapper = jsx("div", _extends({
449
+ ref: setMenuPortalElement
450
+ }, getStyleProps(_objectSpread(_objectSpread({}, props), {}, {
451
+ offset: computedPosition.offset,
452
+ position: menuPosition,
453
+ rect: computedPosition.rect
454
+ }), 'menuPortal', {
455
+ 'menu-portal': true
456
+ }), innerProps), children);
457
+ return jsx(PortalPlacementContext.Provider, {
458
+ value: portalPlacementContext
459
+ }, appendTo ? /*#__PURE__*/createPortal(menuWrapper, appendTo) : menuWrapper);
460
+ };
@@ -0,0 +1,122 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
+ /**
6
+ * @jsxRuntime classic
7
+ * @jsx jsx
8
+ */
9
+
10
+ import { jsx } from '@emotion/react';
11
+ import { getStyleProps } from '../utils';
12
+ import { CrossIcon } from './indicators';
13
+ export var multiValueCSS = function multiValueCSS(_ref, unstyled) {
14
+ var _ref$theme = _ref.theme,
15
+ spacing = _ref$theme.spacing,
16
+ borderRadius = _ref$theme.borderRadius,
17
+ colors = _ref$theme.colors;
18
+ return _objectSpread({
19
+ label: 'multiValue',
20
+ display: 'flex',
21
+ minWidth: 0
22
+ }, unstyled ? {} : {
23
+ backgroundColor: colors.neutral10,
24
+ borderRadius: borderRadius / 2,
25
+ margin: spacing.baseUnit / 2
26
+ });
27
+ };
28
+ export var multiValueLabelCSS = function multiValueLabelCSS(_ref2, unstyled) {
29
+ var _ref2$theme = _ref2.theme,
30
+ borderRadius = _ref2$theme.borderRadius,
31
+ colors = _ref2$theme.colors,
32
+ cropWithEllipsis = _ref2.cropWithEllipsis;
33
+ return _objectSpread({
34
+ overflow: 'hidden',
35
+ textOverflow: cropWithEllipsis || cropWithEllipsis === undefined ? 'ellipsis' : undefined,
36
+ whiteSpace: 'nowrap'
37
+ }, unstyled ? {} : {
38
+ borderRadius: borderRadius / 2,
39
+ color: colors.neutral80,
40
+ fontSize: '85%',
41
+ padding: 3,
42
+ paddingLeft: 6
43
+ });
44
+ };
45
+ export var multiValueRemoveCSS = function multiValueRemoveCSS(_ref3, unstyled) {
46
+ var _ref3$theme = _ref3.theme,
47
+ spacing = _ref3$theme.spacing,
48
+ borderRadius = _ref3$theme.borderRadius,
49
+ colors = _ref3$theme.colors,
50
+ isFocused = _ref3.isFocused;
51
+ return _objectSpread({
52
+ alignItems: 'center',
53
+ display: 'flex'
54
+ }, unstyled ? {} : {
55
+ borderRadius: borderRadius / 2,
56
+ backgroundColor: isFocused ? colors.dangerLight : undefined,
57
+ paddingLeft: spacing.baseUnit,
58
+ paddingRight: spacing.baseUnit,
59
+ ':hover': {
60
+ backgroundColor: colors.dangerLight,
61
+ color: colors.danger
62
+ }
63
+ });
64
+ };
65
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
66
+ export var MultiValueGeneric = function MultiValueGeneric(_ref4) {
67
+ var children = _ref4.children,
68
+ innerProps = _ref4.innerProps;
69
+ return jsx("div", innerProps, children);
70
+ };
71
+
72
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
73
+ export var MultiValueContainer = MultiValueGeneric;
74
+
75
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
76
+ export var MultiValueLabel = MultiValueGeneric;
77
+ export function MultiValueRemove(_ref5) {
78
+ var children = _ref5.children,
79
+ innerProps = _ref5.innerProps;
80
+ return jsx("div", _extends({
81
+ role: "button"
82
+ }, innerProps), children || jsx(CrossIcon, {
83
+ size: 14
84
+ }));
85
+ }
86
+ var MultiValue = function MultiValue(props) {
87
+ var children = props.children,
88
+ components = props.components,
89
+ data = props.data,
90
+ innerProps = props.innerProps,
91
+ isDisabled = props.isDisabled,
92
+ removeProps = props.removeProps,
93
+ selectProps = props.selectProps;
94
+ var Container = components.Container,
95
+ Label = components.Label,
96
+ Remove = components.Remove;
97
+ return jsx(Container, {
98
+ data: data,
99
+ innerProps: _objectSpread(_objectSpread({}, getStyleProps(props, 'multiValue', {
100
+ 'multi-value': true,
101
+ 'multi-value--is-disabled': isDisabled
102
+ })), innerProps),
103
+ selectProps: selectProps
104
+ }, jsx(Label, {
105
+ data: data,
106
+ innerProps: _objectSpread({}, getStyleProps(props, 'multiValueLabel', {
107
+ 'multi-value__label': true
108
+ })),
109
+ selectProps: selectProps
110
+ }, children), jsx(Remove, {
111
+ data: data,
112
+ innerProps: _objectSpread(_objectSpread({}, getStyleProps(props, 'multiValueRemove', {
113
+ 'multi-value__remove': true
114
+ })), {}, {
115
+ 'aria-label': "Remove ".concat(children || 'option')
116
+ }, removeProps),
117
+ selectProps: selectProps
118
+ }));
119
+ };
120
+
121
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
122
+ export default MultiValue;
@@ -0,0 +1,57 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
+ /**
6
+ * @jsxRuntime classic
7
+ * @jsx jsx
8
+ */
9
+
10
+ import { jsx } from '@emotion/react';
11
+ import { getStyleProps } from '../utils';
12
+ export var optionCSS = function optionCSS(_ref, unstyled) {
13
+ var isDisabled = _ref.isDisabled,
14
+ isFocused = _ref.isFocused,
15
+ isSelected = _ref.isSelected,
16
+ _ref$theme = _ref.theme,
17
+ spacing = _ref$theme.spacing,
18
+ colors = _ref$theme.colors;
19
+ return _objectSpread({
20
+ label: 'option',
21
+ cursor: 'default',
22
+ display: 'block',
23
+ fontSize: 'inherit',
24
+ width: '100%',
25
+ userSelect: 'none',
26
+ WebkitTapHighlightColor: 'rgba(0, 0, 0, 0)'
27
+ }, unstyled ? {} : {
28
+ backgroundColor: isSelected ? colors.primary : isFocused ? colors.primary25 : 'transparent',
29
+ color: isDisabled ? colors.neutral20 : isSelected ? colors.neutral0 : 'inherit',
30
+ padding: "".concat(spacing.baseUnit * 2, "px ").concat(spacing.baseUnit * 3, "px"),
31
+ // provide some affordance on touch devices
32
+ ':active': {
33
+ backgroundColor: !isDisabled ? isSelected ? colors.primary : colors.primary50 : undefined
34
+ }
35
+ });
36
+ };
37
+ var Option = function Option(props) {
38
+ var children = props.children,
39
+ isDisabled = props.isDisabled,
40
+ isFocused = props.isFocused,
41
+ isSelected = props.isSelected,
42
+ innerRef = props.innerRef,
43
+ innerProps = props.innerProps;
44
+ return jsx("div", _extends({}, getStyleProps(props, 'option', {
45
+ option: true,
46
+ 'option--is-disabled': isDisabled,
47
+ 'option--is-focused': isFocused,
48
+ 'option--is-selected': isSelected
49
+ }), {
50
+ //@ts-ignore
51
+ ref: innerRef
52
+ // aria-disabled={isDisabled}
53
+ }, innerProps), children);
54
+ };
55
+
56
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
57
+ export default Option;
@@ -0,0 +1,34 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
+ /**
6
+ * @jsxRuntime classic
7
+ * @jsx jsx
8
+ */
9
+
10
+ import { jsx } from '@emotion/react';
11
+ import { getStyleProps } from '../utils';
12
+ export var placeholderCSS = function placeholderCSS(_ref, unstyled) {
13
+ var _ref$theme = _ref.theme,
14
+ spacing = _ref$theme.spacing,
15
+ colors = _ref$theme.colors;
16
+ return _objectSpread({
17
+ label: 'placeholder',
18
+ gridArea: '1 / 1 / 2 / 3'
19
+ }, unstyled ? {} : {
20
+ color: colors.neutral50,
21
+ marginLeft: spacing.baseUnit / 2,
22
+ marginRight: spacing.baseUnit / 2
23
+ });
24
+ };
25
+ var Placeholder = function Placeholder(props) {
26
+ var children = props.children,
27
+ innerProps = props.innerProps;
28
+ return jsx("div", _extends({}, getStyleProps(props, 'placeholder', {
29
+ placeholder: true
30
+ }), innerProps), children);
31
+ };
32
+
33
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
34
+ export default Placeholder;