@atlaskit/react-select 2.2.0 → 2.2.1

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 (102) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/cjs/emotion/components/containers.js +111 -0
  3. package/dist/cjs/emotion/components/control.js +110 -0
  4. package/dist/cjs/emotion/components/group.js +71 -0
  5. package/dist/cjs/emotion/components/index.js +52 -0
  6. package/dist/cjs/emotion/components/indicators.js +137 -0
  7. package/dist/cjs/emotion/components/input.js +94 -0
  8. package/dist/cjs/emotion/components/internal/a11y-text.js +36 -0
  9. package/dist/cjs/emotion/components/internal/dummy-input.js +44 -0
  10. package/dist/cjs/emotion/components/internal/index.js +34 -0
  11. package/dist/cjs/emotion/components/internal/notify-open-layer-observer.js +21 -0
  12. package/dist/cjs/emotion/components/internal/required-input.js +43 -0
  13. package/dist/cjs/emotion/components/internal/scroll-manager.js +57 -0
  14. package/dist/cjs/emotion/components/internal/use-scroll-capture.js +132 -0
  15. package/dist/cjs/emotion/components/internal/use-scroll-lock.js +149 -0
  16. package/dist/cjs/emotion/components/live-region.js +182 -0
  17. package/dist/cjs/emotion/components/menu.js +456 -0
  18. package/dist/cjs/emotion/components/multi-value.js +224 -0
  19. package/dist/cjs/emotion/components/option.js +82 -0
  20. package/dist/cjs/emotion/components/placeholder.js +34 -0
  21. package/dist/cjs/emotion/components/single-value.js +40 -0
  22. package/dist/es2019/emotion/components/containers.js +109 -0
  23. package/dist/es2019/emotion/components/control.js +107 -0
  24. package/dist/es2019/emotion/components/group.js +59 -0
  25. package/dist/es2019/emotion/components/index.js +41 -0
  26. package/dist/es2019/emotion/components/indicators.js +128 -0
  27. package/dist/es2019/emotion/components/input.js +86 -0
  28. package/dist/es2019/emotion/components/internal/a11y-text.js +27 -0
  29. package/dist/es2019/emotion/components/internal/dummy-input.js +37 -0
  30. package/dist/es2019/emotion/components/internal/index.js +4 -0
  31. package/dist/es2019/emotion/components/internal/notify-open-layer-observer.js +16 -0
  32. package/dist/es2019/emotion/components/internal/required-input.js +35 -0
  33. package/dist/es2019/emotion/components/internal/scroll-manager.js +49 -0
  34. package/dist/es2019/emotion/components/internal/use-scroll-capture.js +128 -0
  35. package/dist/es2019/emotion/components/internal/use-scroll-lock.js +143 -0
  36. package/dist/es2019/emotion/components/live-region.js +178 -0
  37. package/dist/es2019/emotion/components/menu.js +450 -0
  38. package/dist/es2019/emotion/components/multi-value.js +227 -0
  39. package/dist/es2019/emotion/components/option.js +78 -0
  40. package/dist/es2019/emotion/components/placeholder.js +28 -0
  41. package/dist/es2019/emotion/components/single-value.js +34 -0
  42. package/dist/esm/emotion/components/containers.js +105 -0
  43. package/dist/esm/emotion/components/control.js +103 -0
  44. package/dist/esm/emotion/components/group.js +65 -0
  45. package/dist/esm/emotion/components/index.js +43 -0
  46. package/dist/esm/emotion/components/indicators.js +132 -0
  47. package/dist/esm/emotion/components/input.js +89 -0
  48. package/dist/esm/emotion/components/internal/a11y-text.js +29 -0
  49. package/dist/esm/emotion/components/internal/dummy-input.js +38 -0
  50. package/dist/esm/emotion/components/internal/index.js +4 -0
  51. package/dist/esm/emotion/components/internal/notify-open-layer-observer.js +15 -0
  52. package/dist/esm/emotion/components/internal/required-input.js +36 -0
  53. package/dist/esm/emotion/components/internal/scroll-manager.js +49 -0
  54. package/dist/esm/emotion/components/internal/use-scroll-capture.js +126 -0
  55. package/dist/esm/emotion/components/internal/use-scroll-lock.js +143 -0
  56. package/dist/esm/emotion/components/live-region.js +175 -0
  57. package/dist/esm/emotion/components/menu.js +454 -0
  58. package/dist/esm/emotion/components/multi-value.js +217 -0
  59. package/dist/esm/emotion/components/option.js +75 -0
  60. package/dist/esm/emotion/components/placeholder.js +27 -0
  61. package/dist/esm/emotion/components/single-value.js +33 -0
  62. package/dist/types/emotion/components/containers.d.ts +54 -0
  63. package/dist/types/emotion/components/control.d.ts +42 -0
  64. package/dist/types/emotion/components/group.d.ts +52 -0
  65. package/dist/types/emotion/components/index.d.ts +67 -0
  66. package/dist/types/emotion/components/indicators.d.ts +73 -0
  67. package/dist/types/emotion/components/input.d.ts +37 -0
  68. package/dist/types/emotion/components/internal/a11y-text.d.ts +8 -0
  69. package/dist/types/emotion/components/internal/dummy-input.d.ts +9 -0
  70. package/dist/types/emotion/components/internal/index.d.ts +4 -0
  71. package/dist/types/emotion/components/internal/notify-open-layer-observer.d.ts +11 -0
  72. package/dist/types/emotion/components/internal/required-input.d.ts +10 -0
  73. package/dist/types/emotion/components/internal/scroll-manager.d.ts +17 -0
  74. package/dist/types/emotion/components/internal/use-scroll-capture.d.ts +12 -0
  75. package/dist/types/emotion/components/internal/use-scroll-lock.d.ts +9 -0
  76. package/dist/types/emotion/components/live-region.d.ts +25 -0
  77. package/dist/types/emotion/components/menu.d.ts +116 -0
  78. package/dist/types/emotion/components/multi-value.d.ts +47 -0
  79. package/dist/types/emotion/components/option.d.ts +49 -0
  80. package/dist/types/emotion/components/placeholder.d.ts +22 -0
  81. package/dist/types/emotion/components/single-value.d.ts +28 -0
  82. package/dist/types-ts4.5/emotion/components/containers.d.ts +54 -0
  83. package/dist/types-ts4.5/emotion/components/control.d.ts +42 -0
  84. package/dist/types-ts4.5/emotion/components/group.d.ts +52 -0
  85. package/dist/types-ts4.5/emotion/components/index.d.ts +67 -0
  86. package/dist/types-ts4.5/emotion/components/indicators.d.ts +73 -0
  87. package/dist/types-ts4.5/emotion/components/input.d.ts +37 -0
  88. package/dist/types-ts4.5/emotion/components/internal/a11y-text.d.ts +8 -0
  89. package/dist/types-ts4.5/emotion/components/internal/dummy-input.d.ts +9 -0
  90. package/dist/types-ts4.5/emotion/components/internal/index.d.ts +4 -0
  91. package/dist/types-ts4.5/emotion/components/internal/notify-open-layer-observer.d.ts +11 -0
  92. package/dist/types-ts4.5/emotion/components/internal/required-input.d.ts +10 -0
  93. package/dist/types-ts4.5/emotion/components/internal/scroll-manager.d.ts +17 -0
  94. package/dist/types-ts4.5/emotion/components/internal/use-scroll-capture.d.ts +12 -0
  95. package/dist/types-ts4.5/emotion/components/internal/use-scroll-lock.d.ts +9 -0
  96. package/dist/types-ts4.5/emotion/components/live-region.d.ts +25 -0
  97. package/dist/types-ts4.5/emotion/components/menu.d.ts +116 -0
  98. package/dist/types-ts4.5/emotion/components/multi-value.d.ts +47 -0
  99. package/dist/types-ts4.5/emotion/components/option.d.ts +49 -0
  100. package/dist/types-ts4.5/emotion/components/placeholder.d.ts +22 -0
  101. package/dist/types-ts4.5/emotion/components/single-value.d.ts +28 -0
  102. package/package.json +1 -1
@@ -0,0 +1,456 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.noOptionsMessageCSS = exports.menuPortalCSS = exports.menuListCSS = exports.menuCSS = exports.loadingMessageCSS = exports.default = exports.NoOptionsMessage = exports.MenuPortal = exports.MenuPlacer = exports.MenuList = exports.LoadingMessage = void 0;
8
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
9
+ var _objectDestructuringEmpty2 = _interopRequireDefault(require("@babel/runtime/helpers/objectDestructuringEmpty"));
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
+ var _react = require("react");
14
+ var _react2 = require("@emotion/react");
15
+ var _dom = require("@floating-ui/dom");
16
+ var _reactDom = require("react-dom");
17
+ var _useIsomorphicLayoutEffect = _interopRequireDefault(require("use-isomorphic-layout-effect"));
18
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
19
+ var _primitives = require("@atlaskit/primitives");
20
+ var _utils = require("../../utils");
21
+ var _excluded = ["children", "innerProps"],
22
+ _excluded2 = ["children", "innerProps"];
23
+ 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; }
24
+ 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) { (0, _defineProperty2.default)(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; } /**
25
+ * @jsxRuntime classic
26
+ * @jsx jsx
27
+ */
28
+ // ==============================
29
+ // Menu
30
+ // ==============================
31
+
32
+ // Get Menu Placement
33
+ // ------------------------------
34
+
35
+ function getMenuPlacement(_ref) {
36
+ var preferredMaxHeight = _ref.maxHeight,
37
+ menuEl = _ref.menuEl,
38
+ minHeight = _ref.minHeight,
39
+ preferredPlacement = _ref.placement,
40
+ shouldScroll = _ref.shouldScroll,
41
+ isFixedPosition = _ref.isFixedPosition,
42
+ controlHeight = _ref.controlHeight;
43
+ var scrollParent = (0, _utils.getScrollParent)(menuEl);
44
+ var defaultState = {
45
+ placement: 'bottom',
46
+ maxHeight: preferredMaxHeight
47
+ };
48
+
49
+ // something went wrong, return default state
50
+ if (!menuEl || !menuEl.offsetParent) {
51
+ return defaultState;
52
+ }
53
+
54
+ // we can't trust `scrollParent.scrollHeight` --> it may increase when
55
+ // the menu is rendered
56
+ var _scrollParent$getBoun = scrollParent.getBoundingClientRect(),
57
+ scrollHeight = _scrollParent$getBoun.height,
58
+ scrollParentTop = _scrollParent$getBoun.top;
59
+ var _menuEl$getBoundingCl = menuEl.getBoundingClientRect(),
60
+ menuBottom = _menuEl$getBoundingCl.bottom,
61
+ menuHeight = _menuEl$getBoundingCl.height,
62
+ menuTop = _menuEl$getBoundingCl.top;
63
+ var _menuEl$offsetParent$ = menuEl.offsetParent.getBoundingClientRect(),
64
+ containerTop = _menuEl$offsetParent$.top;
65
+ var viewHeight = isFixedPosition ? window.innerHeight : (0, _utils.normalizedHeight)(scrollParent);
66
+ var scrollTop = (0, _utils.getScrollTop)(scrollParent);
67
+ // use menuTop - scrollParentTop for the actual top space of menu in the scroll container
68
+ var menuTopFromParent = (0, _platformFeatureFlags.fg)('design-system-select-fix-placement') ? menuTop - scrollParentTop : menuTop;
69
+ var marginBottom = parseInt(getComputedStyle(menuEl).marginBottom, 10);
70
+ var marginTop = parseInt(getComputedStyle(menuEl).marginTop, 10);
71
+ var viewSpaceAbove = containerTop - marginTop;
72
+ var viewSpaceBelow = viewHeight - menuTopFromParent;
73
+ var scrollSpaceAbove = viewSpaceAbove + scrollTop;
74
+ var scrollSpaceBelow = scrollHeight - scrollTop - menuTopFromParent;
75
+ var scrollDown = menuBottom - viewHeight + scrollTop + marginBottom;
76
+ var scrollUp = scrollTop + menuTop - marginTop;
77
+ var scrollDuration = 160;
78
+ switch (preferredPlacement) {
79
+ case 'auto':
80
+ case 'bottom':
81
+ // 1: the menu will fit, do nothing
82
+ if (viewSpaceBelow >= menuHeight) {
83
+ return {
84
+ placement: 'bottom',
85
+ maxHeight: preferredMaxHeight
86
+ };
87
+ }
88
+
89
+ // 2: the menu will fit, if scrolled
90
+ if (scrollSpaceBelow >= menuHeight && !isFixedPosition) {
91
+ if (shouldScroll) {
92
+ (0, _utils.animatedScrollTo)(scrollParent, scrollDown, scrollDuration);
93
+ }
94
+ return {
95
+ placement: 'bottom',
96
+ maxHeight: preferredMaxHeight
97
+ };
98
+ }
99
+
100
+ // 3: the menu will fit, if constrained
101
+ if (!isFixedPosition && scrollSpaceBelow >= minHeight || isFixedPosition && viewSpaceBelow >= minHeight) {
102
+ if (shouldScroll) {
103
+ (0, _utils.animatedScrollTo)(scrollParent, scrollDown, scrollDuration);
104
+ }
105
+
106
+ // we want to provide as much of the menu as possible to the user,
107
+ // so give them whatever is available below rather than the minHeight.
108
+ var constrainedHeight = isFixedPosition ? viewSpaceBelow - marginBottom : scrollSpaceBelow - marginBottom;
109
+ return {
110
+ placement: 'bottom',
111
+ maxHeight: constrainedHeight
112
+ };
113
+ }
114
+
115
+ // 4. Forked beviour when there isn't enough space below
116
+
117
+ // AUTO: flip the menu, render above
118
+ if (preferredPlacement === 'auto' || isFixedPosition) {
119
+ // may need to be constrained after flipping
120
+ var _constrainedHeight = preferredMaxHeight;
121
+ var spaceAbove = isFixedPosition ? viewSpaceAbove : scrollSpaceAbove;
122
+ if (spaceAbove >= minHeight) {
123
+ _constrainedHeight = Math.min(spaceAbove - marginBottom - controlHeight, preferredMaxHeight);
124
+ }
125
+ return {
126
+ placement: 'top',
127
+ maxHeight: _constrainedHeight
128
+ };
129
+ }
130
+
131
+ // BOTTOM: allow browser to increase scrollable area and immediately set scroll
132
+ if (preferredPlacement === 'bottom') {
133
+ if (shouldScroll) {
134
+ (0, _utils.scrollTo)(scrollParent, scrollDown);
135
+ }
136
+ return {
137
+ placement: 'bottom',
138
+ maxHeight: preferredMaxHeight
139
+ };
140
+ }
141
+ break;
142
+ case 'top':
143
+ // 1: the menu will fit, do nothing
144
+ if (viewSpaceAbove >= menuHeight) {
145
+ return {
146
+ placement: 'top',
147
+ maxHeight: preferredMaxHeight
148
+ };
149
+ }
150
+
151
+ // 2: the menu will fit, if scrolled
152
+ if (scrollSpaceAbove >= menuHeight && !isFixedPosition) {
153
+ if (shouldScroll) {
154
+ (0, _utils.animatedScrollTo)(scrollParent, scrollUp, scrollDuration);
155
+ }
156
+ return {
157
+ placement: 'top',
158
+ maxHeight: preferredMaxHeight
159
+ };
160
+ }
161
+
162
+ // 3: the menu will fit, if constrained
163
+ if (!isFixedPosition && scrollSpaceAbove >= minHeight || isFixedPosition && viewSpaceAbove >= minHeight) {
164
+ var _constrainedHeight2 = preferredMaxHeight;
165
+
166
+ // we want to provide as much of the menu as possible to the user,
167
+ // so give them whatever is available below rather than the minHeight.
168
+ if (!isFixedPosition && scrollSpaceAbove >= minHeight || isFixedPosition && viewSpaceAbove >= minHeight) {
169
+ _constrainedHeight2 = isFixedPosition ? viewSpaceAbove - marginTop : scrollSpaceAbove - marginTop;
170
+ }
171
+ if (shouldScroll) {
172
+ (0, _utils.animatedScrollTo)(scrollParent, scrollUp, scrollDuration);
173
+ }
174
+ return {
175
+ placement: 'top',
176
+ maxHeight: _constrainedHeight2
177
+ };
178
+ }
179
+
180
+ // 4. not enough space, the browser WILL NOT increase scrollable area when
181
+ // absolutely positioned element rendered above the viewport (only below).
182
+ // Flip the menu, render below
183
+ return {
184
+ placement: 'bottom',
185
+ maxHeight: preferredMaxHeight
186
+ };
187
+ default:
188
+ throw new Error("Invalid placement provided \"".concat(preferredPlacement, "\"."));
189
+ }
190
+ return defaultState;
191
+ }
192
+
193
+ // Menu Component
194
+ // ------------------------------
195
+
196
+ function alignToControl(placement) {
197
+ var placementToCSSProp = {
198
+ bottom: 'top',
199
+ top: 'bottom'
200
+ };
201
+ return placement ? placementToCSSProp[placement] : 'bottom';
202
+ }
203
+ var coercePlacement = function coercePlacement(p) {
204
+ return p === 'auto' ? 'bottom' : p;
205
+ };
206
+ var menuCSS = exports.menuCSS = function menuCSS(_ref2) {
207
+ var placement = _ref2.placement;
208
+ return (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({
209
+ label: 'menu'
210
+ }, alignToControl(placement), '100%'), "position", 'absolute'), "width", '100%'), "zIndex", 1), "borderRadius", "var(--ds-border-radius, 4px)"), "marginBottom", "var(--ds-space-100, 8px)"), "marginTop", "var(--ds-space-100, 8px)"), "backgroundColor", "var(--ds-surface-overlay, white)"), "boxShadow", "var(--ds-shadow-overlay, 0 0 0 1px hsl(0deg 0% 0% / 10%), 0 4px 11px hsl(0deg 0% 0% / 10%))");
211
+ };
212
+ var PortalPlacementContext = /*#__PURE__*/(0, _react.createContext)(null);
213
+
214
+ // NOTE: internal only
215
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
216
+ var MenuPlacer = exports.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
+ var _ref4 = (0, _react.useContext)(PortalPlacementContext) || {},
224
+ setPortalPlacement = _ref4.setPortalPlacement;
225
+ var ref = (0, _react.useRef)(null);
226
+ var _useState = (0, _react.useState)(maxMenuHeight),
227
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
228
+ maxHeight = _useState2[0],
229
+ setMaxHeight = _useState2[1];
230
+ var _useState3 = (0, _react.useState)(null),
231
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
232
+ placement = _useState4[0],
233
+ setPlacement = _useState4[1];
234
+ // The minimum height of the control
235
+ var controlHeight = 38;
236
+ (0, _useIsomorphicLayoutEffect.default)(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 (0, _react2.jsx)("div", (0, _extends2.default)({}, (0, _utils.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
+ var _default = exports.default = Menu; // ==============================
279
+ // Menu List
280
+ // ==============================
281
+ var menuListCSS = exports.menuListCSS = function menuListCSS(_ref5) {
282
+ var maxHeight = _ref5.maxHeight;
283
+ return {
284
+ maxHeight: maxHeight,
285
+ overflowY: 'auto',
286
+ position: 'relative',
287
+ // required for offset[Height, Top] > keyboard scroll
288
+ WebkitOverflowScrolling: 'touch',
289
+ paddingTop: "var(--ds-space-100, 8px)",
290
+ paddingBottom: "var(--ds-space-100, 8px)"
291
+ };
292
+ };
293
+
294
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
295
+ var MenuList = exports.MenuList = function MenuList(props) {
296
+ var children = props.children,
297
+ innerProps = props.innerProps,
298
+ innerRef = props.innerRef,
299
+ isMulti = props.isMulti;
300
+ return (0, _react2.jsx)("div", (0, _extends2.default)({}, (0, _utils.getStyleProps)(props, 'menuList', {
301
+ 'menu-list': true,
302
+ 'menu-list--is-multi': isMulti
303
+ }), {
304
+ ref: innerRef
305
+ }, innerProps, {
306
+ tabIndex: -1
307
+ }), children);
308
+ };
309
+
310
+ // ==============================
311
+ // Menu Notices
312
+ // ==============================
313
+
314
+ var noticeCSS = function noticeCSS(_ref6) {
315
+ (0, _objectDestructuringEmpty2.default)(_ref6);
316
+ return {
317
+ textAlign: 'center',
318
+ padding: "var(--ds-space-100, 8px)".concat(" ", "var(--ds-space-150, 12px)")
319
+ };
320
+ };
321
+ var noOptionsMessageCSS = exports.noOptionsMessageCSS = noticeCSS;
322
+ var loadingMessageCSS = exports.loadingMessageCSS = noticeCSS;
323
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
324
+ var NoOptionsMessage = exports.NoOptionsMessage = function NoOptionsMessage(_ref7) {
325
+ var _ref7$children = _ref7.children,
326
+ children = _ref7$children === void 0 ? 'No options' : _ref7$children,
327
+ innerProps = _ref7.innerProps,
328
+ restProps = (0, _objectWithoutProperties2.default)(_ref7, _excluded);
329
+ return (0, _react2.jsx)("div", (0, _extends2.default)({}, (0, _utils.getStyleProps)(_objectSpread(_objectSpread({}, restProps), {}, {
330
+ children: children,
331
+ innerProps: innerProps
332
+ }), 'noOptionsMessage', {
333
+ 'menu-notice': true,
334
+ 'menu-notice--no-options': true
335
+ }), {
336
+ // eslint-disable-next-line jsx-a11y/role-has-required-aria-props
337
+ role: "option"
338
+ }, innerProps), (0, _react2.jsx)(_primitives.Text, {
339
+ color: "color.text.subtle"
340
+ }, children));
341
+ };
342
+
343
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
344
+ var LoadingMessage = exports.LoadingMessage = function LoadingMessage(_ref8) {
345
+ var _ref8$children = _ref8.children,
346
+ children = _ref8$children === void 0 ? 'Loading...' : _ref8$children,
347
+ innerProps = _ref8.innerProps,
348
+ restProps = (0, _objectWithoutProperties2.default)(_ref8, _excluded2);
349
+ return (0, _react2.jsx)("div", (0, _extends2.default)({}, (0, _utils.getStyleProps)(_objectSpread(_objectSpread({}, restProps), {}, {
350
+ children: children,
351
+ innerProps: innerProps
352
+ }), 'loadingMessage', {
353
+ 'menu-notice': true,
354
+ 'menu-notice--loading': true
355
+ }), innerProps, {
356
+ // eslint-disable-next-line jsx-a11y/role-has-required-aria-props
357
+ role: "option"
358
+ }), (0, _react2.jsx)(_primitives.Text, {
359
+ color: "color.text.subtle"
360
+ }, children));
361
+ };
362
+
363
+ // ==============================
364
+ // Menu Portal
365
+ // ==============================
366
+
367
+ var menuPortalCSS = exports.menuPortalCSS = function menuPortalCSS(_ref9) {
368
+ var rect = _ref9.rect,
369
+ offset = _ref9.offset,
370
+ position = _ref9.position;
371
+ return {
372
+ left: rect.left,
373
+ position: position,
374
+ top: offset,
375
+ width: rect.width,
376
+ zIndex: 1
377
+ };
378
+ };
379
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
380
+ var MenuPortal = exports.MenuPortal = function MenuPortal(props) {
381
+ var appendTo = props.appendTo,
382
+ children = props.children,
383
+ controlElement = props.controlElement,
384
+ innerProps = props.innerProps,
385
+ menuPlacement = props.menuPlacement,
386
+ menuPosition = props.menuPosition;
387
+ var menuPortalRef = (0, _react.useRef)(null);
388
+ var cleanupRef = (0, _react.useRef)(null);
389
+ var _useState5 = (0, _react.useState)(coercePlacement(menuPlacement)),
390
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
391
+ placement = _useState6[0],
392
+ setPortalPlacement = _useState6[1];
393
+ var portalPlacementContext = (0, _react.useMemo)(function () {
394
+ return {
395
+ setPortalPlacement: setPortalPlacement
396
+ };
397
+ }, []);
398
+ var _useState7 = (0, _react.useState)(null),
399
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
400
+ computedPosition = _useState8[0],
401
+ setComputedPosition = _useState8[1];
402
+ var updateComputedPosition = (0, _react.useCallback)(function () {
403
+ if (!controlElement) {
404
+ return;
405
+ }
406
+ var rect = (0, _utils.getBoundingClientObj)(controlElement);
407
+ var scrollDistance = menuPosition === 'fixed' ? 0 : window.pageYOffset;
408
+ var offset = rect[placement] + scrollDistance;
409
+ 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)) {
410
+ setComputedPosition({
411
+ offset: offset,
412
+ rect: rect
413
+ });
414
+ }
415
+ }, [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]);
416
+ (0, _useIsomorphicLayoutEffect.default)(function () {
417
+ updateComputedPosition();
418
+ }, [updateComputedPosition]);
419
+ var runAutoUpdate = (0, _react.useCallback)(function () {
420
+ if (typeof cleanupRef.current === 'function') {
421
+ cleanupRef.current();
422
+ cleanupRef.current = null;
423
+ }
424
+ if (controlElement && menuPortalRef.current) {
425
+ cleanupRef.current = (0, _dom.autoUpdate)(controlElement, menuPortalRef.current, updateComputedPosition, {
426
+ elementResize: 'ResizeObserver' in window
427
+ });
428
+ }
429
+ }, [controlElement, updateComputedPosition]);
430
+ (0, _useIsomorphicLayoutEffect.default)(function () {
431
+ runAutoUpdate();
432
+ }, [runAutoUpdate]);
433
+ var setMenuPortalElement = (0, _react.useCallback)(function (menuPortalElement) {
434
+ menuPortalRef.current = menuPortalElement;
435
+ runAutoUpdate();
436
+ }, [runAutoUpdate]);
437
+
438
+ // bail early if required elements aren't present
439
+ if (!appendTo && menuPosition !== 'fixed' || !computedPosition) {
440
+ return null;
441
+ }
442
+
443
+ // same wrapper element whether fixed or portalled
444
+ var menuWrapper = (0, _react2.jsx)("div", (0, _extends2.default)({
445
+ ref: setMenuPortalElement
446
+ }, (0, _utils.getStyleProps)(_objectSpread(_objectSpread({}, props), {}, {
447
+ offset: computedPosition.offset,
448
+ position: menuPosition,
449
+ rect: computedPosition.rect
450
+ }), 'menuPortal', {
451
+ 'menu-portal': true
452
+ }), innerProps), children);
453
+ return (0, _react2.jsx)(PortalPlacementContext.Provider, {
454
+ value: portalPlacementContext
455
+ }, appendTo ? /*#__PURE__*/(0, _reactDom.createPortal)(menuWrapper, appendTo) : menuWrapper);
456
+ };
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.MultiValueLabel = exports.MultiValueContainer = void 0;
8
+ exports.MultiValueRemove = MultiValueRemove;
9
+ exports.multiValueRemoveCSS = exports.multiValueLabelCSS = exports.multiValueCSS = exports.default = void 0;
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ var _react = require("@emotion/react");
12
+ var _selectClear = _interopRequireDefault(require("@atlaskit/icon/glyph/select-clear"));
13
+ var _cross = _interopRequireDefault(require("@atlaskit/icon/utility/cross"));
14
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
15
+ var _primitives = require("@atlaskit/primitives");
16
+ var _utils = require("../../utils");
17
+ 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; }
18
+ 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) { (0, _defineProperty2.default)(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; } /**
19
+ * @jsxRuntime classic
20
+ * @jsx jsx
21
+ */
22
+ var multiValueCSS = exports.multiValueCSS = function multiValueCSS(_ref) {
23
+ var isDisabled = _ref.isDisabled,
24
+ isFocused = _ref.isFocused;
25
+ var backgroundColor;
26
+ var color;
27
+ if (isDisabled) {
28
+ // Use the basic neutral background so it is slightly separate from the
29
+ // field's background
30
+ backgroundColor = "var(--ds-background-neutral, #091E420F)";
31
+ color = "var(--ds-text-disabled, #091E424F)";
32
+ } else if (isFocused) {
33
+ backgroundColor = "var(--ds-background-selected, #E9F2FF)";
34
+ color = "var(--ds-text-selected, hsl(0, 0%, 20%))";
35
+ } else {
36
+ backgroundColor = (0, _platformFeatureFlags.fg)('platform-component-visual-refresh') ? "var(--ds-background-neutral-subtle-hovered, #091E420F)" : "var(--ds-background-neutral, #091E420F)";
37
+ color = "var(--ds-text, hsl(0, 0%, 20%))";
38
+ }
39
+ return _objectSpread({
40
+ label: 'multiValue',
41
+ display: 'flex',
42
+ minWidth: 0,
43
+ // resolves flex/text-overflow bug
44
+ margin: "var(--ds-space-025, 2px)",
45
+ borderRadius: "var(--ds-border-radius-050, 2px)",
46
+ backgroundColor: backgroundColor,
47
+ boxShadow: isFocused ? "0 0 0 2px ".concat("var(--ds-surface, transparent)", ", 0 0 0 4px ", "var(--ds-border-focused, transparent)") : 'none',
48
+ maxWidth: '100%',
49
+ '@media screen and (-ms-high-contrast: active)': {
50
+ border: isFocused ? '1px solid transparent' : 'none'
51
+ },
52
+ color: color
53
+ }, (0, _platformFeatureFlags.fg)('platform-component-visual-refresh') && {
54
+ borderRadius: "var(--ds-border-radius-100, 4px)",
55
+ // Hardcode this color for visual refresh as there is no token color yet
56
+ borderColor: '#B7B9BE',
57
+ borderWidth: "var(--ds-border-width, 1px)",
58
+ borderStyle: 'solid',
59
+ backgroundColor: "var(--ds-background-input, #FFFFFF)"
60
+ });
61
+ };
62
+ var multiValueLabelCSS = exports.multiValueLabelCSS = function multiValueLabelCSS(_ref2) {
63
+ var cropWithEllipsis = _ref2.cropWithEllipsis,
64
+ isDisabled = _ref2.isDisabled;
65
+ return _objectSpread({
66
+ overflow: 'hidden',
67
+ textOverflow: cropWithEllipsis || cropWithEllipsis === undefined ? 'ellipsis' : undefined,
68
+ whiteSpace: 'nowrap',
69
+ borderRadius: "var(--ds-border-radius-050, 2px)",
70
+ // eslint-disable-next-line @atlaskit/design-system/use-tokens-typography
71
+ fontSize: '85%',
72
+ font: "var(--ds-font-body-UNSAFE_small, normal 400 12px/16px ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Ubuntu, \"Helvetica Neue\", sans-serif)",
73
+ padding: "var(--ds-space-025, 2px)",
74
+ color: isDisabled ? "var(--ds-text-disabled, #091E424F)" : 'inherit',
75
+ paddingLeft: "var(--ds-space-075, 6px)"
76
+ }, (0, _platformFeatureFlags.fg)('platform-component-visual-refresh') && {
77
+ font: "var(--ds-font-body, normal 400 14px/20px ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Ubuntu, \"Helvetica Neue\", sans-serif)",
78
+ paddingTop: 0,
79
+ paddingBottom: 0,
80
+ paddingLeft: "var(--ds-space-050, 4px)"
81
+ });
82
+ };
83
+ var multiValueRemoveCSS = exports.multiValueRemoveCSS = function multiValueRemoveCSS(_ref3) {
84
+ var isFocused = _ref3.isFocused;
85
+ return _objectSpread({
86
+ alignItems: 'center',
87
+ display: 'flex',
88
+ backgroundColor: isFocused ? "var(--ds-UNSAFE-transparent, transparent)" : undefined,
89
+ fill: isFocused ? "var(--ds-text-selected, #000)" : "var(--ds-text, #000)",
90
+ paddingLeft: "var(--ds-space-025, 2px)",
91
+ paddingRight: "var(--ds-space-025, 2px)",
92
+ borderRadius: '0px 2px 2px 0px',
93
+ // DSP-6470 we should style like Tag once we have the :has selector
94
+ ':hover': {
95
+ backgroundColor: "var(--ds-background-danger-hovered, #FFD5D2)",
96
+ fill: "var(--ds-text-danger, #000)"
97
+ },
98
+ ':active': {
99
+ backgroundColor: "var(--ds-background-danger-pressed, #FD9891)",
100
+ fill: "var(--ds-text-danger, #000)"
101
+ }
102
+ }, (0, _platformFeatureFlags.fg)('platform-component-visual-refresh') && {
103
+ backgroundColor: "var(--ds-background-neutral-subtle, #00000000)",
104
+ border: 'none',
105
+ alignItems: 'center',
106
+ justifyContent: 'center',
107
+ alignSelf: 'center',
108
+ appearance: 'none',
109
+ borderRadius: "var(--ds-border-radius, 4px)",
110
+ color: "var(--ds-text, #172B4D)",
111
+ padding: "var(--ds-space-025, 2px)",
112
+ marginRight: "var(--ds-space-025, 2px)",
113
+ ':focus-visible': {
114
+ outlineOffset: "var(--ds-space-negative-025, -2px)"
115
+ },
116
+ ':hover': {
117
+ backgroundColor: "var(--ds-background-neutral-subtle-hovered, #091E420F)"
118
+ },
119
+ ':active': {
120
+ backgroundColor: "var(--ds-background-neutral-subtle-pressed, #091E4224)"
121
+ }
122
+ });
123
+ };
124
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
125
+ var MultiValueGeneric = function MultiValueGeneric(_ref4) {
126
+ var children = _ref4.children,
127
+ innerProps = _ref4.innerProps;
128
+ return (0, _react.jsx)("div", innerProps, children);
129
+ };
130
+
131
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
132
+ var MultiValueContainer = exports.MultiValueContainer = MultiValueGeneric;
133
+
134
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
135
+ var MultiValueLabel = exports.MultiValueLabel = MultiValueGeneric;
136
+ var disabledStyles = (0, _react.css)({
137
+ display: 'none'
138
+ });
139
+ var enabledStyles = (0, _react.css)({
140
+ display: 'inherit'
141
+ });
142
+ var iconWrapperStyles = (0, _primitives.xcss)({
143
+ padding: 'space.025'
144
+ });
145
+ var renderIcon = function renderIcon() {
146
+ // eslint-disable-next-line @atlaskit/platform/ensure-feature-flag-prefix
147
+ if ((0, _platformFeatureFlags.fg)('platform-component-visual-refresh')) {
148
+ return (0, _react.jsx)(_cross.default, {
149
+ label: "",
150
+ color: "currentColor"
151
+ });
152
+ }
153
+
154
+ // eslint-disable-next-line @atlaskit/platform/ensure-feature-flag-prefix
155
+ if ((0, _platformFeatureFlags.fg)('platform-visual-refresh-icons-legacy-facade')) {
156
+ return (0, _react.jsx)(_primitives.Inline, {
157
+ xcss: iconWrapperStyles
158
+ }, (0, _react.jsx)(_cross.default, {
159
+ label: "",
160
+ color: "currentColor"
161
+ }));
162
+ }
163
+ return (
164
+ // eslint-disable-next-line @atlaskit/design-system/no-legacy-icons
165
+ (0, _react.jsx)(_selectClear.default, {
166
+ label: "",
167
+ primaryColor: "transparent",
168
+ size: "small",
169
+ secondaryColor: "inherit"
170
+ })
171
+ );
172
+ };
173
+ function MultiValueRemove(_ref5) {
174
+ var isDisabled = _ref5.isDisabled,
175
+ innerProps = _ref5.innerProps;
176
+ return (
177
+ // The Remove button is intentionally excluded from the tab order, please avoid assigning a non-negative tabIndex to it. Context: https://hello.atlassian.net/wiki/spaces/A11YKB/pages/3031993460/Clear+Options+on+an+Input+Field
178
+ (0, _react.jsx)("div", innerProps, (0, _react.jsx)("div", {
179
+ css: isDisabled ? disabledStyles : enabledStyles,
180
+ "data-testid": isDisabled ? 'hide-clear-icon' : 'show-clear-icon'
181
+ }, renderIcon()))
182
+ );
183
+ }
184
+ var MultiValue = function MultiValue(props) {
185
+ var children = props.children,
186
+ components = props.components,
187
+ data = props.data,
188
+ innerProps = props.innerProps,
189
+ isDisabled = props.isDisabled,
190
+ removeProps = props.removeProps,
191
+ selectProps = props.selectProps;
192
+ var Container = components.Container,
193
+ Label = components.Label,
194
+ Remove = components.Remove;
195
+ var ariaLabel = typeof children === 'string' ? children : data.label;
196
+ return (0, _react.jsx)(Container, {
197
+ data: data,
198
+ innerProps: _objectSpread(_objectSpread({}, (0, _utils.getStyleProps)(props, 'multiValue', {
199
+ 'multi-value': true,
200
+ 'multi-value--is-disabled': isDisabled
201
+ })), innerProps),
202
+ selectProps: selectProps
203
+ }, (0, _react.jsx)(Label, {
204
+ data: data,
205
+ innerProps: _objectSpread({}, (0, _utils.getStyleProps)(props, 'multiValueLabel', {
206
+ 'multi-value__label': true
207
+ })),
208
+ selectProps: selectProps
209
+ }, children), (0, _react.jsx)(Remove, {
210
+ data: data,
211
+ innerProps: _objectSpread(_objectSpread({}, (0, _utils.getStyleProps)(props, 'multiValueRemove', {
212
+ 'multi-value__remove': true
213
+ })), {}, {
214
+ role: 'button',
215
+ tabIndex: -1,
216
+ 'aria-label': "".concat(ariaLabel || 'option', ", remove")
217
+ }, removeProps),
218
+ isDisabled: isDisabled,
219
+ selectProps: selectProps
220
+ }));
221
+ };
222
+
223
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
224
+ var _default = exports.default = MultiValue;