@atlaskit/react-select 2.2.1 → 2.4.0

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 (253) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/cjs/compiled/components/containers.compiled.css +26 -0
  3. package/dist/cjs/compiled/components/containers.js +119 -0
  4. package/dist/cjs/compiled/components/control.compiled.css +51 -0
  5. package/dist/cjs/compiled/components/control.js +66 -0
  6. package/dist/cjs/compiled/components/group.compiled.css +12 -0
  7. package/dist/cjs/compiled/components/group.js +81 -0
  8. package/dist/cjs/compiled/components/indicators.compiled.css +24 -0
  9. package/dist/cjs/compiled/components/indicators.js +157 -0
  10. package/dist/cjs/compiled/components/input.compiled.css +49 -0
  11. package/dist/cjs/compiled/components/input.js +69 -0
  12. package/dist/cjs/compiled/components/internal/a11y-text.compiled.css +15 -0
  13. package/dist/cjs/compiled/components/internal/a11y-text.js +23 -0
  14. package/dist/cjs/compiled/components/internal/dummy-input.compiled.css +17 -0
  15. package/dist/cjs/compiled/components/internal/dummy-input.js +30 -0
  16. package/dist/cjs/compiled/components/internal/required-input.compiled.css +8 -0
  17. package/dist/cjs/compiled/components/internal/required-input.js +34 -0
  18. package/dist/cjs/compiled/components/live-region.js +177 -0
  19. package/dist/cjs/compiled/components/menu.compiled.css +19 -0
  20. package/dist/cjs/compiled/components/menu.js +491 -0
  21. package/dist/cjs/compiled/components/multi-value.compiled.css +56 -0
  22. package/dist/cjs/compiled/components/multi-value.js +199 -0
  23. package/dist/cjs/compiled/components/option.compiled.css +22 -0
  24. package/dist/cjs/compiled/components/option.js +57 -0
  25. package/dist/cjs/compiled/components/placeholder.compiled.css +7 -0
  26. package/dist/cjs/compiled/components/placeholder.js +45 -0
  27. package/dist/cjs/compiled/components/single-value.compiled.css +13 -0
  28. package/dist/cjs/compiled/components/single-value.js +46 -0
  29. package/dist/cjs/components/containers.js +12 -72
  30. package/dist/cjs/components/control.js +11 -96
  31. package/dist/cjs/components/group.js +15 -53
  32. package/dist/cjs/components/indicators.js +15 -107
  33. package/dist/cjs/components/input.js +12 -81
  34. package/dist/cjs/components/internal/a11y-text.js +6 -25
  35. package/dist/cjs/components/internal/dummy-input.js +8 -36
  36. package/dist/cjs/components/internal/notify-open-layer-observer.js +1 -0
  37. package/dist/cjs/components/internal/required-input.js +7 -31
  38. package/dist/cjs/components/internal/scroll-manager.js +19 -17
  39. package/dist/cjs/components/live-region.js +6 -164
  40. package/dist/cjs/components/menu.js +24 -399
  41. package/dist/cjs/components/multi-value.js +21 -197
  42. package/dist/cjs/components/option.js +11 -68
  43. package/dist/cjs/components/placeholder.js +11 -20
  44. package/dist/cjs/components/single-value.js +11 -26
  45. package/dist/cjs/emotion/components/containers.js +2 -0
  46. package/dist/cjs/emotion/components/control.js +2 -0
  47. package/dist/cjs/emotion/components/group.js +1 -0
  48. package/dist/cjs/emotion/components/indicators.js +1 -0
  49. package/dist/cjs/emotion/components/input.js +1 -1
  50. package/dist/cjs/emotion/components/internal/a11y-text.js +1 -0
  51. package/dist/cjs/emotion/components/internal/dummy-input.js +1 -0
  52. package/dist/cjs/emotion/components/internal/required-input.js +2 -0
  53. package/dist/cjs/emotion/components/internal/scroll-manager.js +2 -0
  54. package/dist/cjs/emotion/components/live-region.js +1 -1
  55. package/dist/cjs/emotion/components/menu.js +1 -1
  56. package/dist/cjs/emotion/components/multi-value.js +1 -1
  57. package/dist/cjs/emotion/components/option.js +2 -0
  58. package/dist/cjs/emotion/components/placeholder.js +2 -0
  59. package/dist/cjs/emotion/components/single-value.js +2 -0
  60. package/dist/cjs/utils.js +2 -1
  61. package/dist/es2019/compiled/components/containers.compiled.css +26 -0
  62. package/dist/es2019/compiled/components/containers.js +115 -0
  63. package/dist/es2019/compiled/components/control.compiled.css +51 -0
  64. package/dist/es2019/compiled/components/control.js +58 -0
  65. package/dist/es2019/compiled/components/group.compiled.css +12 -0
  66. package/dist/es2019/compiled/components/group.js +72 -0
  67. package/dist/es2019/compiled/components/indicators.compiled.css +24 -0
  68. package/dist/es2019/compiled/components/indicators.js +144 -0
  69. package/dist/es2019/compiled/components/input.compiled.css +49 -0
  70. package/dist/es2019/compiled/components/input.js +59 -0
  71. package/dist/es2019/compiled/components/internal/a11y-text.compiled.css +15 -0
  72. package/dist/es2019/compiled/components/internal/a11y-text.js +11 -0
  73. package/dist/es2019/compiled/components/internal/dummy-input.compiled.css +17 -0
  74. package/dist/es2019/compiled/components/internal/dummy-input.js +19 -0
  75. package/dist/es2019/compiled/components/internal/required-input.compiled.css +8 -0
  76. package/dist/es2019/compiled/components/internal/required-input.js +23 -0
  77. package/dist/es2019/compiled/components/live-region.js +171 -0
  78. package/dist/es2019/compiled/components/menu.compiled.css +19 -0
  79. package/dist/es2019/compiled/components/menu.js +478 -0
  80. package/dist/es2019/compiled/components/multi-value.compiled.css +56 -0
  81. package/dist/es2019/compiled/components/multi-value.js +190 -0
  82. package/dist/es2019/compiled/components/option.compiled.css +22 -0
  83. package/dist/es2019/compiled/components/option.js +48 -0
  84. package/dist/es2019/compiled/components/placeholder.compiled.css +7 -0
  85. package/dist/es2019/compiled/components/placeholder.js +36 -0
  86. package/dist/es2019/compiled/components/single-value.compiled.css +13 -0
  87. package/dist/es2019/compiled/components/single-value.js +37 -0
  88. package/dist/es2019/components/containers.js +10 -87
  89. package/dist/es2019/components/control.js +8 -103
  90. package/dist/es2019/components/group.js +9 -54
  91. package/dist/es2019/components/indicators.js +11 -113
  92. package/dist/es2019/components/input.js +7 -83
  93. package/dist/es2019/components/internal/a11y-text.js +6 -26
  94. package/dist/es2019/components/internal/dummy-input.js +7 -36
  95. package/dist/es2019/components/internal/notify-open-layer-observer.js +1 -0
  96. package/dist/es2019/components/internal/required-input.js +6 -32
  97. package/dist/es2019/components/internal/scroll-manager.js +16 -16
  98. package/dist/es2019/components/live-region.js +5 -168
  99. package/dist/es2019/components/menu.js +14 -412
  100. package/dist/es2019/components/multi-value.js +12 -216
  101. package/dist/es2019/components/option.js +7 -75
  102. package/dist/es2019/components/placeholder.js +7 -25
  103. package/dist/es2019/components/single-value.js +7 -31
  104. package/dist/es2019/emotion/components/containers.js +1 -0
  105. package/dist/es2019/emotion/components/control.js +1 -0
  106. package/dist/es2019/emotion/components/group.js +1 -0
  107. package/dist/es2019/emotion/components/indicators.js +1 -0
  108. package/dist/es2019/emotion/components/input.js +1 -0
  109. package/dist/es2019/emotion/components/internal/a11y-text.js +1 -0
  110. package/dist/es2019/emotion/components/internal/dummy-input.js +1 -0
  111. package/dist/es2019/emotion/components/internal/required-input.js +1 -0
  112. package/dist/es2019/emotion/components/internal/scroll-manager.js +2 -0
  113. package/dist/es2019/emotion/components/live-region.js +2 -0
  114. package/dist/es2019/emotion/components/menu.js +2 -0
  115. package/dist/es2019/emotion/components/multi-value.js +1 -0
  116. package/dist/es2019/emotion/components/option.js +1 -0
  117. package/dist/es2019/emotion/components/placeholder.js +1 -0
  118. package/dist/es2019/emotion/components/single-value.js +1 -0
  119. package/dist/es2019/utils.js +1 -0
  120. package/dist/esm/compiled/components/containers.compiled.css +26 -0
  121. package/dist/esm/compiled/components/containers.js +110 -0
  122. package/dist/esm/compiled/components/control.compiled.css +51 -0
  123. package/dist/esm/compiled/components/control.js +57 -0
  124. package/dist/esm/compiled/components/group.compiled.css +12 -0
  125. package/dist/esm/compiled/components/group.js +71 -0
  126. package/dist/esm/compiled/components/indicators.compiled.css +24 -0
  127. package/dist/esm/compiled/components/indicators.js +148 -0
  128. package/dist/esm/compiled/components/input.compiled.css +49 -0
  129. package/dist/esm/compiled/components/input.js +59 -0
  130. package/dist/esm/compiled/components/internal/a11y-text.compiled.css +15 -0
  131. package/dist/esm/compiled/components/internal/a11y-text.js +13 -0
  132. package/dist/esm/compiled/components/internal/dummy-input.compiled.css +17 -0
  133. package/dist/esm/compiled/components/internal/dummy-input.js +20 -0
  134. package/dist/esm/compiled/components/internal/required-input.compiled.css +8 -0
  135. package/dist/esm/compiled/components/internal/required-input.js +24 -0
  136. package/dist/esm/compiled/components/live-region.js +168 -0
  137. package/dist/esm/compiled/components/menu.compiled.css +19 -0
  138. package/dist/esm/compiled/components/menu.js +485 -0
  139. package/dist/esm/compiled/components/multi-value.compiled.css +56 -0
  140. package/dist/esm/compiled/components/multi-value.js +187 -0
  141. package/dist/esm/compiled/components/option.compiled.css +22 -0
  142. package/dist/esm/compiled/components/option.js +47 -0
  143. package/dist/esm/compiled/components/placeholder.compiled.css +7 -0
  144. package/dist/esm/compiled/components/placeholder.js +35 -0
  145. package/dist/esm/compiled/components/single-value.compiled.css +13 -0
  146. package/dist/esm/compiled/components/single-value.js +36 -0
  147. package/dist/esm/components/containers.js +12 -73
  148. package/dist/esm/components/control.js +8 -97
  149. package/dist/esm/components/group.js +11 -54
  150. package/dist/esm/components/indicators.js +15 -109
  151. package/dist/esm/components/input.js +8 -83
  152. package/dist/esm/components/internal/a11y-text.js +6 -26
  153. package/dist/esm/components/internal/dummy-input.js +7 -37
  154. package/dist/esm/components/internal/notify-open-layer-observer.js +1 -0
  155. package/dist/esm/components/internal/required-input.js +7 -32
  156. package/dist/esm/components/internal/scroll-manager.js +16 -16
  157. package/dist/esm/components/live-region.js +5 -163
  158. package/dist/esm/components/menu.js +21 -401
  159. package/dist/esm/components/multi-value.js +17 -199
  160. package/dist/esm/components/option.js +8 -69
  161. package/dist/esm/components/placeholder.js +8 -21
  162. package/dist/esm/components/single-value.js +8 -27
  163. package/dist/esm/emotion/components/containers.js +1 -0
  164. package/dist/esm/emotion/components/control.js +1 -0
  165. package/dist/esm/emotion/components/group.js +1 -0
  166. package/dist/esm/emotion/components/indicators.js +1 -0
  167. package/dist/esm/emotion/components/input.js +1 -0
  168. package/dist/esm/emotion/components/internal/a11y-text.js +1 -0
  169. package/dist/esm/emotion/components/internal/dummy-input.js +1 -0
  170. package/dist/esm/emotion/components/internal/required-input.js +1 -0
  171. package/dist/esm/emotion/components/internal/scroll-manager.js +2 -0
  172. package/dist/esm/emotion/components/live-region.js +2 -0
  173. package/dist/esm/emotion/components/menu.js +2 -0
  174. package/dist/esm/emotion/components/multi-value.js +1 -0
  175. package/dist/esm/emotion/components/option.js +1 -0
  176. package/dist/esm/emotion/components/placeholder.js +1 -0
  177. package/dist/esm/emotion/components/single-value.js +1 -0
  178. package/dist/esm/utils.js +2 -1
  179. package/dist/types/compiled/components/containers.d.ts +53 -0
  180. package/dist/types/compiled/components/control.d.ts +41 -0
  181. package/dist/types/compiled/components/group.d.ts +54 -0
  182. package/dist/types/compiled/components/indicators.d.ts +72 -0
  183. package/dist/types/compiled/components/input.d.ts +36 -0
  184. package/dist/types/compiled/components/internal/a11y-text.d.ts +3 -0
  185. package/dist/types/compiled/components/internal/dummy-input.d.ts +8 -0
  186. package/dist/types/compiled/components/internal/required-input.d.ts +10 -0
  187. package/dist/types/compiled/components/live-region.d.ts +19 -0
  188. package/dist/types/compiled/components/menu.d.ts +115 -0
  189. package/dist/types/compiled/components/multi-value.d.ts +57 -0
  190. package/dist/types/compiled/components/option.d.ts +48 -0
  191. package/dist/types/compiled/components/placeholder.d.ts +21 -0
  192. package/dist/types/compiled/components/single-value.d.ts +27 -0
  193. package/dist/types/components/containers.d.ts +6 -11
  194. package/dist/types/components/control.d.ts +4 -9
  195. package/dist/types/components/group.d.ts +8 -10
  196. package/dist/types/components/index.d.ts +21 -21
  197. package/dist/types/components/indicators.d.ts +7 -12
  198. package/dist/types/components/input.d.ts +3 -8
  199. package/dist/types/components/internal/a11y-text.d.ts +2 -7
  200. package/dist/types/components/internal/dummy-input.d.ts +3 -8
  201. package/dist/types/components/internal/required-input.d.ts +0 -4
  202. package/dist/types/components/internal/scroll-manager.d.ts +2 -7
  203. package/dist/types/components/live-region.d.ts +2 -8
  204. package/dist/types/components/menu.d.ts +10 -15
  205. package/dist/types/components/multi-value.d.ts +19 -13
  206. package/dist/types/components/option.d.ts +3 -8
  207. package/dist/types/components/placeholder.d.ts +3 -8
  208. package/dist/types/components/single-value.d.ts +3 -8
  209. package/dist/types/select.d.ts +21 -21
  210. package/dist/types/types.d.ts +3 -0
  211. package/dist/types-ts4.5/compiled/components/containers.d.ts +53 -0
  212. package/dist/types-ts4.5/compiled/components/control.d.ts +41 -0
  213. package/dist/types-ts4.5/compiled/components/group.d.ts +54 -0
  214. package/dist/types-ts4.5/compiled/components/indicators.d.ts +72 -0
  215. package/dist/types-ts4.5/compiled/components/input.d.ts +36 -0
  216. package/dist/types-ts4.5/compiled/components/internal/a11y-text.d.ts +3 -0
  217. package/dist/types-ts4.5/compiled/components/internal/dummy-input.d.ts +8 -0
  218. package/dist/types-ts4.5/compiled/components/internal/required-input.d.ts +10 -0
  219. package/dist/types-ts4.5/compiled/components/live-region.d.ts +19 -0
  220. package/dist/types-ts4.5/compiled/components/menu.d.ts +115 -0
  221. package/dist/types-ts4.5/compiled/components/multi-value.d.ts +57 -0
  222. package/dist/types-ts4.5/compiled/components/option.d.ts +48 -0
  223. package/dist/types-ts4.5/compiled/components/placeholder.d.ts +21 -0
  224. package/dist/types-ts4.5/compiled/components/single-value.d.ts +27 -0
  225. package/dist/types-ts4.5/components/containers.d.ts +6 -11
  226. package/dist/types-ts4.5/components/control.d.ts +4 -9
  227. package/dist/types-ts4.5/components/group.d.ts +8 -10
  228. package/dist/types-ts4.5/components/index.d.ts +21 -21
  229. package/dist/types-ts4.5/components/indicators.d.ts +7 -12
  230. package/dist/types-ts4.5/components/input.d.ts +3 -8
  231. package/dist/types-ts4.5/components/internal/a11y-text.d.ts +2 -7
  232. package/dist/types-ts4.5/components/internal/dummy-input.d.ts +3 -8
  233. package/dist/types-ts4.5/components/internal/required-input.d.ts +0 -4
  234. package/dist/types-ts4.5/components/internal/scroll-manager.d.ts +2 -7
  235. package/dist/types-ts4.5/components/live-region.d.ts +2 -8
  236. package/dist/types-ts4.5/components/menu.d.ts +10 -15
  237. package/dist/types-ts4.5/components/multi-value.d.ts +19 -13
  238. package/dist/types-ts4.5/components/option.d.ts +3 -8
  239. package/dist/types-ts4.5/components/placeholder.d.ts +3 -8
  240. package/dist/types-ts4.5/components/single-value.d.ts +3 -8
  241. package/dist/types-ts4.5/select.d.ts +21 -21
  242. package/dist/types-ts4.5/types.d.ts +3 -0
  243. package/package.json +11 -3
  244. package/dist/cjs/emotion/components/index.js +0 -52
  245. package/dist/cjs/emotion/components/internal/notify-open-layer-observer.js +0 -21
  246. package/dist/es2019/emotion/components/index.js +0 -41
  247. package/dist/es2019/emotion/components/internal/notify-open-layer-observer.js +0 -16
  248. package/dist/esm/emotion/components/index.js +0 -43
  249. package/dist/esm/emotion/components/internal/notify-open-layer-observer.js +0 -15
  250. package/dist/types/emotion/components/index.d.ts +0 -67
  251. package/dist/types/emotion/components/internal/notify-open-layer-observer.d.ts +0 -11
  252. package/dist/types-ts4.5/emotion/components/index.d.ts +0 -67
  253. package/dist/types-ts4.5/emotion/components/internal/notify-open-layer-observer.d.ts +0 -11
@@ -1,275 +1,18 @@
1
- import _extends from "@babel/runtime/helpers/extends";
2
- /**
3
- * @jsxRuntime classic
4
- * @jsx jsx
5
- */
6
- import { createContext, useCallback, useContext, useMemo, useRef, useState } from 'react';
7
- import { jsx } from '@emotion/react';
8
- import { autoUpdate } from '@floating-ui/dom';
9
- import { createPortal } from 'react-dom';
10
- import useLayoutEffect from 'use-isomorphic-layout-effect';
1
+ /* eslint-disable @repo/internal/react/no-unsafe-spread-props */
2
+ import React from 'react';
11
3
  import { fg } from '@atlaskit/platform-feature-flags';
12
- import { Text } from '@atlaskit/primitives';
13
- import { animatedScrollTo, getBoundingClientObj, getScrollParent, getScrollTop, getStyleProps, normalizedHeight, scrollTo } from '../utils';
14
-
15
- // ==============================
16
- // Menu
17
- // ==============================
18
-
19
- // Get Menu Placement
20
- // ------------------------------
21
-
22
- function getMenuPlacement({
23
- maxHeight: preferredMaxHeight,
24
- menuEl,
25
- minHeight,
26
- placement: preferredPlacement,
27
- shouldScroll,
28
- isFixedPosition,
29
- controlHeight
30
- }) {
31
- const scrollParent = getScrollParent(menuEl);
32
- const defaultState = {
33
- placement: 'bottom',
34
- maxHeight: preferredMaxHeight
35
- };
36
-
37
- // something went wrong, return default state
38
- if (!menuEl || !menuEl.offsetParent) {
39
- return defaultState;
40
- }
41
-
42
- // we can't trust `scrollParent.scrollHeight` --> it may increase when
43
- // the menu is rendered
44
- const {
45
- height: scrollHeight,
46
- top: scrollParentTop
47
- } = scrollParent.getBoundingClientRect();
48
- const {
49
- bottom: menuBottom,
50
- height: menuHeight,
51
- top: menuTop
52
- } = menuEl.getBoundingClientRect();
53
- const {
54
- top: containerTop
55
- } = menuEl.offsetParent.getBoundingClientRect();
56
- const viewHeight = isFixedPosition ? window.innerHeight : normalizedHeight(scrollParent);
57
- const scrollTop = getScrollTop(scrollParent);
58
- // use menuTop - scrollParentTop for the actual top space of menu in the scroll container
59
- const menuTopFromParent = fg('design-system-select-fix-placement') ? menuTop - scrollParentTop : menuTop;
60
- const marginBottom = parseInt(getComputedStyle(menuEl).marginBottom, 10);
61
- const marginTop = parseInt(getComputedStyle(menuEl).marginTop, 10);
62
- const viewSpaceAbove = containerTop - marginTop;
63
- const viewSpaceBelow = viewHeight - menuTopFromParent;
64
- const scrollSpaceAbove = viewSpaceAbove + scrollTop;
65
- const scrollSpaceBelow = scrollHeight - scrollTop - menuTopFromParent;
66
- const scrollDown = menuBottom - viewHeight + scrollTop + marginBottom;
67
- const scrollUp = scrollTop + menuTop - marginTop;
68
- const scrollDuration = 160;
69
- switch (preferredPlacement) {
70
- case 'auto':
71
- case 'bottom':
72
- // 1: the menu will fit, do nothing
73
- if (viewSpaceBelow >= menuHeight) {
74
- return {
75
- placement: 'bottom',
76
- maxHeight: preferredMaxHeight
77
- };
78
- }
79
-
80
- // 2: the menu will fit, if scrolled
81
- if (scrollSpaceBelow >= menuHeight && !isFixedPosition) {
82
- if (shouldScroll) {
83
- animatedScrollTo(scrollParent, scrollDown, scrollDuration);
84
- }
85
- return {
86
- placement: 'bottom',
87
- maxHeight: preferredMaxHeight
88
- };
89
- }
90
-
91
- // 3: the menu will fit, if constrained
92
- if (!isFixedPosition && scrollSpaceBelow >= minHeight || isFixedPosition && viewSpaceBelow >= minHeight) {
93
- if (shouldScroll) {
94
- animatedScrollTo(scrollParent, scrollDown, scrollDuration);
95
- }
96
-
97
- // we want to provide as much of the menu as possible to the user,
98
- // so give them whatever is available below rather than the minHeight.
99
- const constrainedHeight = isFixedPosition ? viewSpaceBelow - marginBottom : scrollSpaceBelow - marginBottom;
100
- return {
101
- placement: 'bottom',
102
- maxHeight: constrainedHeight
103
- };
104
- }
105
-
106
- // 4. Forked beviour when there isn't enough space below
107
-
108
- // AUTO: flip the menu, render above
109
- if (preferredPlacement === 'auto' || isFixedPosition) {
110
- // may need to be constrained after flipping
111
- let constrainedHeight = preferredMaxHeight;
112
- const spaceAbove = isFixedPosition ? viewSpaceAbove : scrollSpaceAbove;
113
- if (spaceAbove >= minHeight) {
114
- constrainedHeight = Math.min(spaceAbove - marginBottom - controlHeight, preferredMaxHeight);
115
- }
116
- return {
117
- placement: 'top',
118
- maxHeight: constrainedHeight
119
- };
120
- }
121
-
122
- // BOTTOM: allow browser to increase scrollable area and immediately set scroll
123
- if (preferredPlacement === 'bottom') {
124
- if (shouldScroll) {
125
- scrollTo(scrollParent, scrollDown);
126
- }
127
- return {
128
- placement: 'bottom',
129
- maxHeight: preferredMaxHeight
130
- };
131
- }
132
- break;
133
- case 'top':
134
- // 1: the menu will fit, do nothing
135
- if (viewSpaceAbove >= menuHeight) {
136
- return {
137
- placement: 'top',
138
- maxHeight: preferredMaxHeight
139
- };
140
- }
141
-
142
- // 2: the menu will fit, if scrolled
143
- if (scrollSpaceAbove >= menuHeight && !isFixedPosition) {
144
- if (shouldScroll) {
145
- animatedScrollTo(scrollParent, scrollUp, scrollDuration);
146
- }
147
- return {
148
- placement: 'top',
149
- maxHeight: preferredMaxHeight
150
- };
151
- }
152
-
153
- // 3: the menu will fit, if constrained
154
- if (!isFixedPosition && scrollSpaceAbove >= minHeight || isFixedPosition && viewSpaceAbove >= minHeight) {
155
- let constrainedHeight = preferredMaxHeight;
156
-
157
- // we want to provide as much of the menu as possible to the user,
158
- // so give them whatever is available below rather than the minHeight.
159
- if (!isFixedPosition && scrollSpaceAbove >= minHeight || isFixedPosition && viewSpaceAbove >= minHeight) {
160
- constrainedHeight = isFixedPosition ? viewSpaceAbove - marginTop : scrollSpaceAbove - marginTop;
161
- }
162
- if (shouldScroll) {
163
- animatedScrollTo(scrollParent, scrollUp, scrollDuration);
164
- }
165
- return {
166
- placement: 'top',
167
- maxHeight: constrainedHeight
168
- };
169
- }
170
-
171
- // 4. not enough space, the browser WILL NOT increase scrollable area when
172
- // absolutely positioned element rendered above the viewport (only below).
173
- // Flip the menu, render below
174
- return {
175
- placement: 'bottom',
176
- maxHeight: preferredMaxHeight
177
- };
178
- default:
179
- throw new Error(`Invalid placement provided "${preferredPlacement}".`);
180
- }
181
- return defaultState;
182
- }
4
+ import Compiled, { LoadingMessage as CompiledLoadingMessage, menuCSS as compiledMenuCSS, MenuList as CompiledMenuList, menuListCSS as compiledMenuListCSS, MenuPlacer as CompiledMenuPlacer, MenuPortal as CompiledMenuPortal, menuPortalCSS as compiledMenuPortalCSS, NoOptionsMessage as CompiledNoOptionsMessage } from '../compiled/components/menu';
5
+ import Emotion, { LoadingMessage as EmotionLoadingMessage, menuCSS as emotionMenuCSS, MenuList as EmotionMenuList, menuListCSS as emotionMenuListCSS, MenuPlacer as EmotionMenuPlacer, MenuPortal as EmotionMenuPortal, menuPortalCSS as emotionMenuPortalCSS, NoOptionsMessage as EmotionNoOptionsMessage } from '../emotion/components/menu';
183
6
 
184
7
  // Menu Component
185
8
  // ------------------------------
186
9
 
187
- function alignToControl(placement) {
188
- const placementToCSSProp = {
189
- bottom: 'top',
190
- top: 'bottom'
191
- };
192
- return placement ? placementToCSSProp[placement] : 'bottom';
193
- }
194
- const coercePlacement = p => p === 'auto' ? 'bottom' : p;
195
- export const menuCSS = ({
196
- placement
197
- }) => ({
198
- label: 'menu',
199
- [alignToControl(placement)]: '100%',
200
- position: 'absolute',
201
- width: '100%',
202
- zIndex: 1,
203
- borderRadius: "var(--ds-border-radius, 4px)",
204
- marginBottom: "var(--ds-space-100, 8px)",
205
- marginTop: "var(--ds-space-100, 8px)",
206
- backgroundColor: "var(--ds-surface-overlay, white)",
207
- boxShadow: "var(--ds-shadow-overlay, 0 0 0 1px hsl(0deg 0% 0% / 10%), 0 4px 11px hsl(0deg 0% 0% / 10%))"
208
- });
209
- const PortalPlacementContext = /*#__PURE__*/createContext(null);
10
+ export const menuCSS = props => fg('compiled-react-select') ? compiledMenuCSS() : emotionMenuCSS(props);
210
11
 
211
12
  // NOTE: internal only
212
13
  // eslint-disable-next-line @repo/internal/react/require-jsdoc
213
- export const MenuPlacer = props => {
214
- const {
215
- children,
216
- minMenuHeight,
217
- maxMenuHeight,
218
- menuPlacement,
219
- menuPosition,
220
- menuShouldScrollIntoView
221
- } = props;
222
- const {
223
- setPortalPlacement
224
- } = useContext(PortalPlacementContext) || {};
225
- const ref = useRef(null);
226
- const [maxHeight, setMaxHeight] = useState(maxMenuHeight);
227
- const [placement, setPlacement] = useState(null);
228
- // The minimum height of the control
229
- const controlHeight = 38;
230
- useLayoutEffect(() => {
231
- const menuEl = ref.current;
232
- if (!menuEl) {
233
- return;
234
- }
235
-
236
- // DO NOT scroll if position is fixed
237
- const isFixedPosition = menuPosition === 'fixed';
238
- const shouldScroll = menuShouldScrollIntoView && !isFixedPosition;
239
- const state = getMenuPlacement({
240
- maxHeight: maxMenuHeight,
241
- menuEl,
242
- minHeight: minMenuHeight,
243
- placement: menuPlacement,
244
- shouldScroll,
245
- isFixedPosition,
246
- controlHeight
247
- });
248
- setMaxHeight(state.maxHeight);
249
- setPlacement(state.placement);
250
- setPortalPlacement === null || setPortalPlacement === void 0 ? void 0 : setPortalPlacement(state.placement);
251
- }, [maxMenuHeight, menuPlacement, menuPosition, menuShouldScrollIntoView, minMenuHeight, setPortalPlacement, controlHeight]);
252
- return children({
253
- ref,
254
- placerProps: {
255
- ...props,
256
- placement: placement || coercePlacement(menuPlacement),
257
- maxHeight
258
- }
259
- });
260
- };
261
- const Menu = props => {
262
- const {
263
- children,
264
- innerRef,
265
- innerProps
266
- } = props;
267
- return jsx("div", _extends({}, getStyleProps(props, 'menu', {
268
- menu: true
269
- }), {
270
- ref: innerRef
271
- }, innerProps), children);
272
- };
14
+ export const MenuPlacer = props => fg('compiled-react-select') ? /*#__PURE__*/React.createElement(CompiledMenuPlacer, props) : /*#__PURE__*/React.createElement(EmotionMenuPlacer, props);
15
+ const Menu = props => fg('compiled-react-select') ? /*#__PURE__*/React.createElement(Compiled, props) : /*#__PURE__*/React.createElement(Emotion, props);
273
16
 
274
17
  // eslint-disable-next-line @repo/internal/react/require-jsdoc
275
18
  export default Menu;
@@ -278,35 +21,10 @@ export default Menu;
278
21
  // Menu List
279
22
  // ==============================
280
23
 
281
- export const menuListCSS = ({
282
- maxHeight
283
- }) => ({
284
- 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
- });
24
+ export const menuListCSS = props => fg('compiled-react-select') ? compiledMenuListCSS() : emotionMenuListCSS(props);
292
25
 
293
26
  // eslint-disable-next-line @repo/internal/react/require-jsdoc
294
- export const MenuList = props => {
295
- const {
296
- children,
297
- innerProps,
298
- innerRef,
299
- isMulti
300
- } = props;
301
- return jsx("div", _extends({}, getStyleProps(props, 'menuList', {
302
- 'menu-list': true,
303
- 'menu-list--is-multi': isMulti
304
- }), {
305
- ref: innerRef
306
- }, innerProps, {
307
- tabIndex: -1
308
- }), children);
309
- };
27
+ export const MenuList = props => fg('compiled-react-select') ? /*#__PURE__*/React.createElement(CompiledMenuList, props) : /*#__PURE__*/React.createElement(EmotionMenuList, props);
310
28
 
311
29
  // ==============================
312
30
  // Menu Notices
@@ -319,132 +37,16 @@ const noticeCSS = ({}) => ({
319
37
  export const noOptionsMessageCSS = noticeCSS;
320
38
  export const loadingMessageCSS = noticeCSS;
321
39
  // eslint-disable-next-line @repo/internal/react/require-jsdoc
322
- export const NoOptionsMessage = ({
323
- children = 'No options',
324
- innerProps,
325
- ...restProps
326
- }) => {
327
- return jsx("div", _extends({}, getStyleProps({
328
- ...restProps,
329
- children,
330
- innerProps
331
- }, 'noOptionsMessage', {
332
- 'menu-notice': true,
333
- 'menu-notice--no-options': true
334
- }), {
335
- // eslint-disable-next-line jsx-a11y/role-has-required-aria-props
336
- role: "option"
337
- }, innerProps), jsx(Text, {
338
- color: "color.text.subtle"
339
- }, children));
340
- };
40
+ export const NoOptionsMessage = props => fg('compiled-react-select') ? /*#__PURE__*/React.createElement(CompiledNoOptionsMessage, props) : /*#__PURE__*/React.createElement(EmotionNoOptionsMessage, props);
341
41
 
342
42
  // eslint-disable-next-line @repo/internal/react/require-jsdoc
343
- export const LoadingMessage = ({
344
- children = 'Loading...',
345
- innerProps,
346
- ...restProps
347
- }) => {
348
- return jsx("div", _extends({}, getStyleProps({
349
- ...restProps,
350
- children,
351
- 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
- }), jsx(Text, {
359
- color: "color.text.subtle"
360
- }, children));
361
- };
43
+ export const LoadingMessage = props => fg('compiled-react-select') ? /*#__PURE__*/React.createElement(CompiledLoadingMessage, props) : /*#__PURE__*/React.createElement(EmotionLoadingMessage, props);
362
44
 
363
45
  // ==============================
364
46
  // Menu Portal
365
47
  // ==============================
366
48
 
367
- export const menuPortalCSS = ({
368
- rect,
369
- offset,
370
- position
371
- }) => ({
372
- left: rect.left,
373
- position: position,
374
- top: offset,
375
- width: rect.width,
376
- zIndex: 1
377
- });
378
- // eslint-disable-next-line @repo/internal/react/require-jsdoc
379
- export const MenuPortal = props => {
380
- const {
381
- appendTo,
382
- children,
383
- controlElement,
384
- innerProps,
385
- menuPlacement,
386
- menuPosition
387
- } = props;
388
- const menuPortalRef = useRef(null);
389
- const cleanupRef = useRef(null);
390
- const [placement, setPortalPlacement] = useState(coercePlacement(menuPlacement));
391
- const portalPlacementContext = useMemo(() => ({
392
- setPortalPlacement
393
- }), []);
394
- const [computedPosition, setComputedPosition] = useState(null);
395
- const updateComputedPosition = useCallback(() => {
396
- if (!controlElement) {
397
- return;
398
- }
399
- const rect = getBoundingClientObj(controlElement);
400
- const scrollDistance = menuPosition === 'fixed' ? 0 : window.pageYOffset;
401
- const offset = rect[placement] + scrollDistance;
402
- 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)) {
403
- setComputedPosition({
404
- offset,
405
- rect
406
- });
407
- }
408
- }, [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]);
409
- useLayoutEffect(() => {
410
- updateComputedPosition();
411
- }, [updateComputedPosition]);
412
- const runAutoUpdate = useCallback(() => {
413
- if (typeof cleanupRef.current === 'function') {
414
- cleanupRef.current();
415
- cleanupRef.current = null;
416
- }
417
- if (controlElement && menuPortalRef.current) {
418
- cleanupRef.current = autoUpdate(controlElement, menuPortalRef.current, updateComputedPosition, {
419
- elementResize: 'ResizeObserver' in window
420
- });
421
- }
422
- }, [controlElement, updateComputedPosition]);
423
- useLayoutEffect(() => {
424
- runAutoUpdate();
425
- }, [runAutoUpdate]);
426
- const setMenuPortalElement = useCallback(menuPortalElement => {
427
- menuPortalRef.current = menuPortalElement;
428
- runAutoUpdate();
429
- }, [runAutoUpdate]);
430
-
431
- // bail early if required elements aren't present
432
- if (!appendTo && menuPosition !== 'fixed' || !computedPosition) {
433
- return null;
434
- }
49
+ export const menuPortalCSS = props => fg('compiled-react-select') ? compiledMenuPortalCSS() : emotionMenuPortalCSS(props);
435
50
 
436
- // same wrapper element whether fixed or portalled
437
- const menuWrapper = jsx("div", _extends({
438
- ref: setMenuPortalElement
439
- }, getStyleProps({
440
- ...props,
441
- offset: computedPosition.offset,
442
- position: menuPosition,
443
- rect: computedPosition.rect
444
- }, 'menuPortal', {
445
- 'menu-portal': true
446
- }), innerProps), children);
447
- return jsx(PortalPlacementContext.Provider, {
448
- value: portalPlacementContext
449
- }, appendTo ? /*#__PURE__*/createPortal(menuWrapper, appendTo) : menuWrapper);
450
- };
51
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
52
+ export const MenuPortal = props => fg('compiled-react-select') ? /*#__PURE__*/React.createElement(CompiledMenuPortal, props) : /*#__PURE__*/React.createElement(EmotionMenuPortal, props);