@ringcentral/spring-ui 1.12.0 → 1.13.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 (213) hide show
  1. package/Accordion.js +90 -34
  2. package/AccordionHeader.js +71 -21
  3. package/Alert.js +120 -28
  4. package/Animation.js +2 -46
  5. package/Announcement.js +46 -35
  6. package/Autocomplete.js +1011 -583
  7. package/Avatar.js +134 -73
  8. package/AvatarGroup.js +50 -7
  9. package/Backdrop.js +45 -7
  10. package/Badge.js +77 -15
  11. package/Block.js +34 -12
  12. package/BlockHeader.js +57 -15
  13. package/BottomNavigation.js +181 -65
  14. package/BottomNavigationItem.js +93 -30
  15. package/Button.js +160 -24
  16. package/CallButton.js +53 -31
  17. package/Checkbox.js +88 -26
  18. package/Chip.js +126 -26
  19. package/CircularProgressIndicator.js +80 -8
  20. package/ClickAwayListener.js +4 -1
  21. package/ComponentsProps.js +1 -0
  22. package/DatePicker.js +611 -192
  23. package/DateUtilsContext.js +43 -25
  24. package/Dialer.js +564 -253
  25. package/Dialog.js +99 -45
  26. package/Divider.js +43 -7
  27. package/DragHandle.js +32 -6
  28. package/Drawer.js +117 -19
  29. package/Dropdown.js +154 -77
  30. package/EmptyState.js +65 -15
  31. package/FabButton.js +51 -17
  32. package/FocusTrap.js +109 -12
  33. package/FormField.js +108 -12
  34. package/FormLabel.js +81 -7
  35. package/Icon.js +1 -8
  36. package/IconButton.js +142 -26
  37. package/IconButtonGroup.js +35 -12
  38. package/InlineEditable.js +98 -44
  39. package/LinearProgressIndicator.js +73 -24
  40. package/Link.js +40 -11
  41. package/List.js +54 -9
  42. package/ListItem.js +152 -23
  43. package/ListItemText.js +44 -17
  44. package/ListNavigation.js +272 -20
  45. package/Menu.js +139 -23
  46. package/MenuActions.js +37 -12
  47. package/MenuDivider.js +34 -8
  48. package/MenuFooter.js +36 -12
  49. package/MenuHeader.js +54 -16
  50. package/MenuItem.js +402 -35
  51. package/MenuItemText.js +51 -9
  52. package/MenuList.js +87 -36
  53. package/Modal.js +345 -16
  54. package/NestedMenuContext.js +183 -11
  55. package/Option.js +32 -36
  56. package/Overlap.js +54 -7
  57. package/PageHeader.js +62 -24
  58. package/PickerTextField.js +156 -35
  59. package/Popover.js +262 -21
  60. package/Popper.js +112 -62
  61. package/PopperPaper.js +54 -8
  62. package/Portal.js +6 -1
  63. package/Radio.js +65 -21
  64. package/RadioGroup.js +56 -17
  65. package/Rating.js +223 -87
  66. package/Select.js +387 -44
  67. package/SingleFilter.js +148 -79
  68. package/Skeleton.js +68 -17
  69. package/Slider.js +167 -69
  70. package/Snackbar.js +122 -59
  71. package/SortableList.js +32 -12
  72. package/SortableListDndContext.js +69 -22
  73. package/SortableListItem.js +92 -47
  74. package/SortableVirtualizedList.js +44 -20
  75. package/SplitButton.js +124 -89
  76. package/Squircle.js +4 -7
  77. package/StatusIndicator.js +51 -9
  78. package/Step.js +63 -38
  79. package/StepButton.js +51 -23
  80. package/StepConnector.js +48 -8
  81. package/StepContent.js +67 -24
  82. package/StepIcon.js +90 -9
  83. package/StepLabel.js +90 -14
  84. package/Stepper.js +65 -23
  85. package/SubMenu.js +203 -101
  86. package/SwipeableDrawer.js +439 -194
  87. package/Switch.js +70 -23
  88. package/Tab.js +120 -57
  89. package/TabContext.js +59 -15
  90. package/TabPanel.js +40 -13
  91. package/Table.js +60 -17
  92. package/TableBody.js +42 -12
  93. package/TableCell.js +84 -50
  94. package/TableContainer.js +32 -10
  95. package/TableFooter.js +38 -10
  96. package/TableHead.js +49 -15
  97. package/TablePagination.js +153 -79
  98. package/TableRow.js +60 -21
  99. package/Tabs.js +592 -271
  100. package/Tag.js +51 -16
  101. package/Text.js +68 -37
  102. package/TextField.js +209 -31
  103. package/Textarea.js +51 -42
  104. package/TimePicker.js +490 -232
  105. package/Tooltip.js +48 -23
  106. package/Tray.js +237 -13
  107. package/TrayMenu.js +62 -43
  108. package/VirtualizedList.js +205 -107
  109. package/VirtualizedMenu.js +359 -29
  110. package/VisuallyHidden.js +29 -6
  111. package/chunks/1250.js +98 -0
  112. package/chunks/1294.js +126 -0
  113. package/chunks/2956.js +18 -0
  114. package/chunks/4476.js +460 -0
  115. package/chunks/4491.js +10 -0
  116. package/chunks/4535.js +364 -0
  117. package/chunks/5047.js +3 -0
  118. package/chunks/6335.js +24 -0
  119. package/chunks/7279.js +10 -0
  120. package/chunks/8011.js +8 -0
  121. package/chunks/8307.js +56 -0
  122. package/chunks/8467.js +8 -0
  123. package/chunks/8809.js +8 -0
  124. package/chunks/{RadioGroup.context.js → 9551.js} +12 -6
  125. package/chunks/987.js +8 -0
  126. package/index.css +2436 -2261
  127. package/index.js +245 -195
  128. package/internal/utils/setRef.d.ts +2 -1
  129. package/package.json +4 -4
  130. package/src/Animation/hooks/useMotionSafeTransition/useMotionSafeTransition.d.ts +2 -0
  131. package/src/Autocomplete/SuggestionList/SuggestionList.d.ts +1 -1
  132. package/src/Button/Button.classes.d.ts +1 -1
  133. package/src/ComponentsProps.d.ts +111 -110
  134. package/src/DatePicker/DatePickerDataAttributes.d.ts +11 -0
  135. package/src/DatePicker/utils/DatePickerUtils.d.ts +1 -1
  136. package/src/MenuItem/MenuItem.type.d.ts +1 -0
  137. package/src/MenuList/MenuListContext.d.ts +2 -3
  138. package/src/Modal/Modal.type.d.ts +1 -0
  139. package/src/Popover/Popover.classes.d.ts +1 -1
  140. package/src/Popover/Popover.internal.d.ts +8 -0
  141. package/src/Popover/Popover.type.d.ts +1 -0
  142. package/src/Select/Select.type.d.ts +6 -4
  143. package/src/Table/Table.type.d.ts +3 -0
  144. package/src/Table/TableContext.d.ts +3 -0
  145. package/src/Table/TableRowContext.d.ts +7 -0
  146. package/src/Table/index.d.ts +1 -0
  147. package/src/TableCell/TableCell.classes.d.ts +1 -1
  148. package/src/TableFooter/TableFooter.classes.d.ts +1 -1
  149. package/src/TableFooter/TableFooter.type.d.ts +1 -0
  150. package/src/TableHead/TableHead.classes.d.ts +1 -1
  151. package/src/TableHead/TableHead.type.d.ts +1 -0
  152. package/src/TableRow/TableRow.type.d.ts +2 -0
  153. package/chunks/AccordionContext.js +0 -6
  154. package/chunks/Alert.js +0 -48
  155. package/chunks/AvatarGroup.js +0 -22
  156. package/chunks/Backdrop.js +0 -18
  157. package/chunks/Badge.js +0 -32
  158. package/chunks/BottomNavigationItem.js +0 -36
  159. package/chunks/Button.js +0 -88
  160. package/chunks/Chip.js +0 -73
  161. package/chunks/CircularProgressIndicator.js +0 -36
  162. package/chunks/Divider.js +0 -19
  163. package/chunks/DragHandle.js +0 -11
  164. package/chunks/Drawer.js +0 -33
  165. package/chunks/ExpandCollapseCaret.js +0 -24
  166. package/chunks/FormLabel.js +0 -27
  167. package/chunks/Icon.js +0 -25
  168. package/chunks/IconButtonLabel.js +0 -68
  169. package/chunks/List.js +0 -22
  170. package/chunks/ListItem.js +0 -83
  171. package/chunks/Menu.js +0 -61
  172. package/chunks/MenuDivider.js +0 -14
  173. package/chunks/MenuItemText.js +0 -18
  174. package/chunks/MenuList.js +0 -47
  175. package/chunks/Modal.js +0 -211
  176. package/chunks/Overlap.js +0 -25
  177. package/chunks/PickerTextField.js +0 -85
  178. package/chunks/Popover.js +0 -61
  179. package/chunks/PopperPaper.js +0 -15
  180. package/chunks/Select.js +0 -225
  181. package/chunks/ShowHideEye.js +0 -56
  182. package/chunks/SlideIn.js +0 -20
  183. package/chunks/SortableArrow.js +0 -73
  184. package/chunks/Squircle.js +0 -31
  185. package/chunks/StatusIndicator.js +0 -20
  186. package/chunks/StepConnector.js +0 -21
  187. package/chunks/StepIcon.js +0 -43
  188. package/chunks/StepLabel.js +0 -29
  189. package/chunks/StepperContext.js +0 -9
  190. package/chunks/TableContext.js +0 -6
  191. package/chunks/Tablelvl2Context.js +0 -6
  192. package/chunks/TabsContext.js +0 -6
  193. package/chunks/TextField.js +0 -110
  194. package/chunks/Tooltip.js +0 -217
  195. package/chunks/VirtualizedMenu.js +0 -162
  196. package/chunks/VisuallyHidden.js +0 -12
  197. package/chunks/composeEventHandlers.js +0 -10
  198. package/chunks/getFade.js +0 -27
  199. package/chunks/getGrow.js +0 -70
  200. package/chunks/getSlideIn.js +0 -30
  201. package/chunks/hasContent.js +0 -3
  202. package/chunks/useAnimationFrame.js +0 -15
  203. package/chunks/useFocusTrapStack.js +0 -38
  204. package/chunks/useHelperTextId.js +0 -24
  205. package/chunks/useListNavigation.js +0 -199
  206. package/chunks/useMenuItemSelect.js +0 -282
  207. package/chunks/useMotionSafeTransition.js +0 -9
  208. package/chunks/useNestedMenuItem.js +0 -27
  209. package/chunks/useNestedParentMenu.js +0 -113
  210. package/chunks/usePrefersReducedMotion.js +0 -36
  211. package/chunks/useTooltipForceHide.js +0 -27
  212. package/chunks/useTrayNavigate.js +0 -150
  213. package/chunks/withTooltip.js +0 -15
package/Select.js CHANGED
@@ -1,44 +1,387 @@
1
- export { S as Select, u as useSelect } from './chunks/Select.js';
2
- import 'react/jsx-runtime';
3
- import 'react';
4
- import '@ringcentral/spring-base';
5
- import '@ringcentral/spring-theme';
6
- import './chunks/ExpandCollapseCaret.js';
7
- import 'framer-motion';
8
- import './chunks/Icon.js';
9
- import './chunks/useMotionSafeTransition.js';
10
- import './chunks/usePrefersReducedMotion.js';
11
- import './chunks/getGrow.js';
12
- import './chunks/hasContent.js';
13
- import '@mui/utils';
14
- import './chunks/useHelperTextId.js';
15
- import 'clsx';
16
- import './chunks/Menu.js';
17
- import './chunks/useNestedParentMenu.js';
18
- import './chunks/Popover.js';
19
- import '@floating-ui/react-dom';
20
- import './chunks/Modal.js';
21
- import '@mui/base';
22
- import './chunks/getFade.js';
23
- import './chunks/useFocusTrapStack.js';
24
- import './chunks/Backdrop.js';
25
- import './Popper.js';
26
- import './chunks/PopperPaper.js';
27
- import './chunks/useMenuItemSelect.js';
28
- import '@ringcentral/spring-icon';
29
- import './chunks/useAnimationFrame.js';
30
- import './chunks/useNestedMenuItem.js';
31
- import './VirtualizedList.js';
32
- import 'react-virtuoso';
33
- import './chunks/List.js';
34
- import './chunks/useListNavigation.js';
35
- import 'tabbable';
36
- import './chunks/composeEventHandlers.js';
37
- import './ListNavigation.js';
38
- import './chunks/MenuList.js';
39
- import './chunks/Squircle.js';
40
- import './chunks/VirtualizedMenu.js';
41
-
42
- var Select = {"sui-select-chevron":"sui-select-chevron","sui-select-placeholder":"sui-select-placeholder","sui-select-value":"sui-select-value","sui-select-error":"sui-select-error","sui-select-selector":"sui-select-selector","sui-select-menu":"sui-select-menu","sui-select-native-input":"sui-select-native-input","sui-select-content":"sui-select-content","sui-select-outlined-selector-xlarge":"sui-select-outlined-selector-xlarge","sui-select-contained-selector-xlarge":"sui-select-contained-selector-xlarge","sui-select-outlined-selector-large":"sui-select-outlined-selector-large","sui-select-contained-selector-large":"sui-select-contained-selector-large","sui-select-outlined-selector-medium":"sui-select-outlined-selector-medium","sui-select-contained-selector-medium":"sui-select-contained-selector-medium","sui-select-outlined-selector":"sui-select-outlined-selector","sui-select-contained-selector":"sui-select-contained-selector","sui-expanded":"sui-expanded","sui-select-standard-selector":"sui-select-standard-selector","sui-select-root":"sui-select-root","sui-disabled":"sui-disabled"};
43
-
44
- export { Select as selectStyle };
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { forwardRef, useEffect, useMemo, useRef, useState } from "react";
3
+ import { combineClasses, combineProps, getTitle, useClasses, useControlled, useEventCallback, useId } from "@ringcentral/spring-base";
4
+ import { useThemeProps } from "@ringcentral/spring-theme";
5
+ import { getGrow } from "./chunks/4476.js";
6
+ import { useHelperTextId, FormField as FormField_FormField } from "./FormField.js";
7
+ import { Menu as Menu_Menu, MenuContext } from "./Menu.js";
8
+ import { MenuItemSelectContext, useMenuItemSelect } from "./MenuItem.js";
9
+ import { MenuList as MenuList_MenuList } from "./MenuList.js";
10
+ import "./Squircle.js";
11
+ import { VirtualizedMenu as VirtualizedMenu_VirtualizedMenu } from "./VirtualizedMenu.js";
12
+ import { hasContent } from "./chunks/5047.js";
13
+ import { usePrefersReducedMotion, ExpandCollapseCaret as ExpandCollapseCaret_ExpandCollapseCaret } from "./chunks/1294.js";
14
+ import { Squircle as Squircle_Squircle } from "./chunks/1250.js";
15
+
16
+
17
+
18
+
19
+
20
+ // extracted by css-extract-rspack-plugin
21
+ /* export default */ var Select = ({"sui-select-chevron":"sui-select-chevron","sui-select-placeholder":"sui-select-placeholder","sui-select-value":"sui-select-value","sui-select-error":"sui-select-error","sui-select-selector":"sui-select-selector","sui-select-menu":"sui-select-menu","sui-select-native-input":"sui-select-native-input","sui-select-content":"sui-select-content","sui-select-outlined-selector-xlarge":"sui-select-outlined-selector-xlarge","sui-select-contained-selector-xlarge":"sui-select-contained-selector-xlarge","sui-select-outlined-selector-large":"sui-select-outlined-selector-large","sui-select-contained-selector-large":"sui-select-contained-selector-large","sui-select-outlined-selector-medium":"sui-select-outlined-selector-medium","sui-select-contained-selector-medium":"sui-select-contained-selector-medium","sui-select-outlined-selector":"sui-select-outlined-selector","sui-select-contained-selector":"sui-select-contained-selector","sui-expanded":"sui-expanded","sui-select-standard-selector":"sui-select-standard-selector","sui-select-root":"sui-select-root","sui-disabled":"sui-disabled"});
22
+
23
+
24
+ const useSelect = (props)=>{
25
+ const { open, handleOpen } = props;
26
+ const getButtonProps = (otherHandlers = {})=>{
27
+ const eventHandlers = combineProps({
28
+ onClick: ()=>{
29
+ handleOpen(!open);
30
+ },
31
+ onKeyDown: (e)=>{
32
+ if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {
33
+ // prevent scroll
34
+ e.preventDefault();
35
+ handleOpen(true);
36
+ }
37
+ }
38
+ }, otherHandlers);
39
+ return {
40
+ 'aria-expanded': open,
41
+ 'aria-haspopup': 'listbox',
42
+ ...eventHandlers
43
+ };
44
+ };
45
+ const getListboxProps = ()=>({
46
+ role: 'listbox'
47
+ });
48
+ return {
49
+ getButtonProps,
50
+ getListboxProps
51
+ };
52
+ };
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+ const DEFAULT_PLACEMENT = 'bottom';
69
+ const Select_Select = /*#__PURE__*/ forwardRef((inProps, ref)=>{
70
+ const props = useThemeProps({
71
+ props: inProps,
72
+ name: 'Select'
73
+ });
74
+ const { classes, className, children, name, id: idProp, value: valueProp, selectMode = 'single', defaultValue = selectMode === 'multiple' ? [] : null, onChange: onChangeProp, renderValue = (value)=>Array.isArray(value) ? value.join(', ') : String(value), label, helperText, disabled, required, error, displayEmpty, placeholder, open: openProp, defaultOpen, onOpen, onClose, selectorProps: selectorPropsProp, MenuProps, variant = 'standard', inputProps, size = 'xlarge', virtualize = false, VirtualizedMenuProps: virtualizedMenuPropsProp, data, getSelectedIndex, FormHelperTextProps, ...rest } = props;
75
+ const [anchorEl, setAnchorEl] = useState(null);
76
+ const [open, setOpen] = useControlled({
77
+ controlled: openProp,
78
+ default: defaultOpen,
79
+ name: 'SuiSelect',
80
+ state: 'open'
81
+ });
82
+ const [didMenuExit, setDidMenuExit] = useState(!open);
83
+ const inputRef = useRef(null);
84
+ const prefersReducedMotion = usePrefersReducedMotion();
85
+ const cls = useClasses('select', classes, className);
86
+ const id = useId(idProp);
87
+ const helperTextId = useHelperTextId({
88
+ helperText,
89
+ id,
90
+ FormHelperTextProps
91
+ });
92
+ const formFieldContentRef = useRef(null);
93
+ useEffect(()=>{
94
+ setAnchorEl(formFieldContentRef.current);
95
+ }, []);
96
+ const handleOpen = useEventCallback((newOpen)=>{
97
+ if (disabled && newOpen) return;
98
+ if (newOpen) setDidMenuExit(false);
99
+ setOpen(newOpen);
100
+ if (newOpen) {
101
+ onOpen?.();
102
+ } else {
103
+ onClose?.();
104
+ }
105
+ });
106
+ useEffect(()=>{
107
+ // close menu when disabled
108
+ if (disabled) {
109
+ handleOpen(false);
110
+ }
111
+ }, [
112
+ disabled,
113
+ handleOpen
114
+ ]);
115
+ const [value, setValue] = useControlled({
116
+ controlled: valueProp,
117
+ default: defaultValue,
118
+ name: 'SuiSelect',
119
+ state: 'value'
120
+ });
121
+ const handleInputChange = useEventCallback((e)=>{
122
+ // TODO(next-major): Remove the legacy second onChange argument.
123
+ onChangeProp?.(e, inputRef.current);
124
+ });
125
+ const handleClose = useEventCallback(()=>{
126
+ handleOpen(false);
127
+ });
128
+ const handleInitialFocus = useEventCallback(()=>{
129
+ if (data && value !== null) {
130
+ if (getSelectedIndex) return getSelectedIndex(value);
131
+ if (Array.isArray(value)) {
132
+ // For multiple selection, focus on the last selected item
133
+ const lastSelectedItem = value.at(-1);
134
+ return lastSelectedItem ? data.indexOf(lastSelectedItem) : -1;
135
+ }
136
+ return data.findIndex((v)=>v === value);
137
+ }
138
+ return true;
139
+ });
140
+ const handleMenuListChange = useEventCallback((newValue)=>{
141
+ // for uncontrolled mode
142
+ setValue(newValue);
143
+ if (inputRef.current) {
144
+ /**
145
+ * Programatically trigger the onChange event of the native input element.
146
+ * Doing this means we can avoid cloning another event to mimic the ChangeEvent.
147
+ */ /**
148
+ * Set the value property of the input element, avoiding React's overridden setter.
149
+ * This will cause the input element to update its value and fire the onChange event,
150
+ * `handleInputChange` will then call onChange
151
+ */ Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value')?.set?.call(inputRef.current, newValue);
152
+ const event = new Event('input', {
153
+ bubbles: true
154
+ });
155
+ /**
156
+ * When `selectMode` is `multiple`, the default `event.target.value` type is `string`,
157
+ * but it should actually be `string[]`. Since browsers do not natively support this,
158
+ * we need to override the `value` property to ensure it correctly reflects an array.
159
+ *
160
+ * Why do we need `Object.defineProperty` to override `event.target.value`?
161
+ * - The `target` property of an event object is read-only, so we cannot modify it directly.
162
+ * - `Object.defineProperty` allows us to override `event.target`, but it requires returning
163
+ * an object from the getter.
164
+ * - To dynamically override only the `value` property while preserving all other properties
165
+ * and methods of the input element, we use a `Proxy`.
166
+ *
167
+ * How does this approach help?
168
+ * - Ensures `event.target.value` correctly returns a `string[]` instead of a `string`.
169
+ * - Keeps the event object behaving as expected when accessed by event handlers.
170
+ * - Preserves other native properties (`name`, `id`, `type`, etc.) and methods
171
+ * (`focus()`, `blur()`, etc.), preventing potential "Illegal Invocation" errors.
172
+ */ Object.defineProperty(event, 'target', {
173
+ configurable: true,
174
+ get: ()=>{
175
+ return new Proxy(inputRef.current, {
176
+ get (obj, prop) {
177
+ if (prop === 'value') {
178
+ return newValue; // override 'value'
179
+ }
180
+ return obj[prop];
181
+ }
182
+ });
183
+ }
184
+ });
185
+ inputRef.current?.dispatchEvent(event);
186
+ }
187
+ });
188
+ const { getButtonProps, getListboxProps } = useSelect({
189
+ open,
190
+ handleOpen
191
+ });
192
+ /**
193
+ * The non-virtualized Menu/MenuList components have the necessary contexts
194
+ * baked in. For the virtualized Menu, we need to provide the context values.
195
+ */ const { contextValue: virtualizedContextValue } = useMenuItemSelect({
196
+ value,
197
+ onChange: handleMenuListChange,
198
+ onClose: handleClose,
199
+ selectMode
200
+ });
201
+ const virtualizedMenuContextValue = useMemo(()=>({
202
+ close: handleClose,
203
+ autoFocus: true
204
+ }), [
205
+ handleClose
206
+ ]);
207
+ const selectorProps = getButtonProps(combineProps({
208
+ onMouseDown: (event)=>{
209
+ if (disabled || event.button !== 0) return;
210
+ event.preventDefault();
211
+ event.currentTarget.focus();
212
+ }
213
+ }, selectorPropsProp));
214
+ const selectedValue = value !== null || displayEmpty ? renderValue(value) : null;
215
+ const valueId = `${id}-value`;
216
+ const labelId = `${id}-label`;
217
+ let menu = null;
218
+ const baseMenuClasses = {
219
+ paper: cls('menu')
220
+ };
221
+ const basePopperProps = {
222
+ matchAnchorWidth: true
223
+ };
224
+ const popperProps = combineProps(basePopperProps, !virtualize ? MenuProps?.PopperProps : virtualizedMenuPropsProp?.PopperProps);
225
+ const menuClasses = popperProps.matchAnchorWidth ? combineClasses(baseMenuClasses, {
226
+ paper: 'min-w-0'
227
+ }) : baseMenuClasses;
228
+ const onExitComplete = ()=>{
229
+ setDidMenuExit(true);
230
+ };
231
+ const baseMenuProps = {
232
+ onExitComplete,
233
+ placement: DEFAULT_PLACEMENT,
234
+ open,
235
+ anchorEl,
236
+ PopperProps: basePopperProps,
237
+ classes: menuClasses,
238
+ onClose: handleClose
239
+ };
240
+ if (!virtualize) {
241
+ menu = /*#__PURE__*/ jsx(Menu_Menu, {
242
+ ...baseMenuProps,
243
+ ...MenuProps,
244
+ PopperProps: popperProps,
245
+ classes: combineClasses(menuClasses, MenuProps?.classes),
246
+ motionProps: getYAxisGrowMotion({
247
+ placement: MenuProps?.placement,
248
+ prefersReducedMotion: prefersReducedMotion
249
+ }),
250
+ children: /*#__PURE__*/ jsx(MenuList_MenuList, {
251
+ value: value,
252
+ onChange: handleMenuListChange,
253
+ widget: "select",
254
+ selectMode: selectMode,
255
+ ...getListboxProps(),
256
+ children: children
257
+ })
258
+ });
259
+ } else {
260
+ menu = /*#__PURE__*/ jsx(MenuContext.Provider, {
261
+ value: virtualizedMenuContextValue,
262
+ children: /*#__PURE__*/ jsx(MenuItemSelectContext.Provider, {
263
+ value: virtualizedContextValue,
264
+ children: /*#__PURE__*/ jsx(VirtualizedMenu_VirtualizedMenu, {
265
+ ...baseMenuProps,
266
+ ...virtualizedMenuPropsProp,
267
+ PopperProps: popperProps,
268
+ classes: combineClasses(baseMenuProps.classes, virtualizedMenuPropsProp?.classes),
269
+ initialFocus: handleInitialFocus,
270
+ data: data,
271
+ motionProps: getYAxisGrowMotion({
272
+ placement: virtualizedMenuPropsProp?.placement,
273
+ prefersReducedMotion: prefersReducedMotion
274
+ }),
275
+ children: children
276
+ })
277
+ })
278
+ });
279
+ }
280
+ return /*#__PURE__*/ jsxs(Fragment, {
281
+ children: [
282
+ /*#__PURE__*/ jsxs(FormField_FormField, {
283
+ disabled: disabled,
284
+ required: required,
285
+ variant: variant,
286
+ error: error,
287
+ // Make sure the focus style doesn't disappear when the Menu is in its close transition
288
+ focused: open || !open && !didMenuExit,
289
+ htmlFor: id,
290
+ label: label,
291
+ labelProps: {
292
+ id: labelId
293
+ },
294
+ ref: ref,
295
+ contentRef: formFieldContentRef,
296
+ helperText: helperText,
297
+ FormHelperTextProps: {
298
+ id: helperTextId,
299
+ ...FormHelperTextProps
300
+ },
301
+ className: cls('root', {
302
+ error
303
+ }),
304
+ classes: {
305
+ outlined: cls('outlined'),
306
+ standard: cls('standard'),
307
+ contained: cls('contained'),
308
+ content: cls('content')
309
+ },
310
+ size: size,
311
+ ...rest,
312
+ children: [
313
+ /*#__PURE__*/ jsxs("button", {
314
+ className: cls('selector', `${variant}-selector`, `${variant}-selector-${size}`, {
315
+ expanded: open
316
+ }),
317
+ disabled: disabled,
318
+ "aria-labelledby": label ? `${labelId} ${valueId}` : valueId,
319
+ "aria-describedby": helperTextId,
320
+ ...selectorProps,
321
+ id: id,
322
+ type: "button",
323
+ children: [
324
+ hasContent(selectedValue) ? /*#__PURE__*/ jsx("span", {
325
+ id: valueId,
326
+ "aria-live": "polite",
327
+ className: cls('value'),
328
+ title: getTitle(selectedValue),
329
+ children: selectedValue
330
+ }) : /*#__PURE__*/ jsx("span", {
331
+ id: valueId,
332
+ className: cls('placeholder'),
333
+ title: getTitle(placeholder),
334
+ children: placeholder
335
+ }),
336
+ /*#__PURE__*/ jsx(Squircle_Squircle, {
337
+ className: cls('chevron'),
338
+ interactive: false,
339
+ children: /*#__PURE__*/ jsx(ExpandCollapseCaret_ExpandCollapseCaret, {
340
+ size: 'small',
341
+ expanded: open
342
+ })
343
+ })
344
+ ]
345
+ }),
346
+ /*#__PURE__*/ jsx("input", {
347
+ ref: inputRef,
348
+ name: name,
349
+ value: `${value}`,
350
+ disabled: disabled,
351
+ className: cls('native-input'),
352
+ tabIndex: -1,
353
+ "aria-hidden": true,
354
+ "aria-invalid": error,
355
+ onChange: handleInputChange,
356
+ ...inputProps
357
+ })
358
+ ]
359
+ }),
360
+ anchorEl && menu
361
+ ]
362
+ });
363
+ });
364
+ Select_Select.displayName = 'SuiSelect';
365
+ function getYAxisGrowMotion(params) {
366
+ const { placement = DEFAULT_PLACEMENT, ...rest } = params;
367
+ let verticalTransformOrigin = 'top';
368
+ if (placement === 'top') {
369
+ verticalTransformOrigin = 'bottom';
370
+ }
371
+ return getGrow({
372
+ ...rest,
373
+ direction: 'y',
374
+ transformOrigin: {
375
+ vertical: verticalTransformOrigin,
376
+ horizontal: 'center'
377
+ }
378
+ });
379
+ }
380
+
381
+
382
+
383
+
384
+
385
+
386
+
387
+ export { Select as selectStyle, Select_Select as Select, useSelect };