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