@jobber/components 9.3.0 → 9.5.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 (194) hide show
  1. package/dist/Autocomplete/index.cjs +0 -1
  2. package/dist/Autocomplete/index.mjs +0 -1
  3. package/dist/Card/index.cjs +7 -7
  4. package/dist/Card/index.mjs +7 -7
  5. package/dist/Chip/index.cjs +0 -1
  6. package/dist/Chip/index.mjs +0 -1
  7. package/dist/Chips/InternalChipDismissible/hooks/index.cjs +0 -1
  8. package/dist/Chips/InternalChipDismissible/hooks/index.mjs +0 -1
  9. package/dist/Chips/InternalChipDismissible/index.cjs +0 -1
  10. package/dist/Chips/InternalChipDismissible/index.mjs +0 -1
  11. package/dist/Chips/index.cjs +0 -1
  12. package/dist/Chips/index.mjs +0 -1
  13. package/dist/ComboboxChipRemove-cjs.js +181 -184
  14. package/dist/ComboboxChipRemove-es.js +4 -7
  15. package/dist/ConfirmationModal/index.cjs +0 -1
  16. package/dist/ConfirmationModal/index.mjs +0 -1
  17. package/dist/DataDump/DataDump.d.ts +1 -1
  18. package/dist/DataDump/DataDump.messages.d.ts +6 -0
  19. package/dist/DataDump/index.cjs +9 -9
  20. package/dist/DataDump/index.mjs +9 -9
  21. package/dist/DataDump-cjs.js +11 -1
  22. package/dist/DataDump-es.js +11 -1
  23. package/dist/DataList/components/DataListActions/index.cjs +0 -1
  24. package/dist/DataList/components/DataListActions/index.mjs +0 -1
  25. package/dist/DataList/components/DataListBulkActions/index.cjs +0 -1
  26. package/dist/DataList/components/DataListBulkActions/index.mjs +0 -1
  27. package/dist/DataList/components/DataListFilters/components/DataListSort/index.cjs +0 -1
  28. package/dist/DataList/components/DataListFilters/components/DataListSort/index.mjs +0 -1
  29. package/dist/DataList/components/DataListFilters/index.cjs +0 -1
  30. package/dist/DataList/components/DataListFilters/index.mjs +0 -1
  31. package/dist/DataList/components/DataListHeader/index.cjs +0 -1
  32. package/dist/DataList/components/DataListHeader/index.mjs +0 -1
  33. package/dist/DataList/components/DataListItem/index.cjs +0 -1
  34. package/dist/DataList/components/DataListItem/index.mjs +0 -1
  35. package/dist/DataList/components/DataListItemActions/index.cjs +0 -1
  36. package/dist/DataList/components/DataListItemActions/index.mjs +0 -1
  37. package/dist/DataList/components/DataListItemActionsOverflow/index.cjs +0 -1
  38. package/dist/DataList/components/DataListItemActionsOverflow/index.mjs +0 -1
  39. package/dist/DataList/components/DataListItems/index.cjs +0 -1
  40. package/dist/DataList/components/DataListItems/index.mjs +0 -1
  41. package/dist/DataList/components/DataListLayout/index.cjs +0 -1
  42. package/dist/DataList/components/DataListLayout/index.mjs +0 -1
  43. package/dist/DataList/components/DataListLayoutActions/index.cjs +0 -1
  44. package/dist/DataList/components/DataListLayoutActions/index.mjs +0 -1
  45. package/dist/DataList/index.cjs +0 -1
  46. package/dist/DataList/index.mjs +0 -1
  47. package/dist/DataTable/DataTable.messages.d.ts +22 -0
  48. package/dist/DataTable/index.cjs +2 -2
  49. package/dist/DataTable/index.mjs +2 -2
  50. package/dist/DataTable-cjs.js +34 -5
  51. package/dist/DataTable-es.js +34 -5
  52. package/dist/DatePicker/index.cjs +0 -2
  53. package/dist/DatePicker/index.mjs +0 -2
  54. package/dist/DatePicker-cjs.js +19 -18
  55. package/dist/DatePicker-es.js +2 -1
  56. package/dist/Dialog/index.cjs +11 -6
  57. package/dist/Dialog/index.mjs +11 -6
  58. package/dist/DrawerDescription-cjs.js +7 -8
  59. package/dist/DrawerDescription-es.js +1 -2
  60. package/dist/DrawerTitle-cjs.js +4 -4
  61. package/dist/DrawerTitle-es.js +1 -1
  62. package/dist/FeatureSwitch/FeatureSwitch.messages.d.ts +10 -0
  63. package/dist/FeatureSwitch/index.cjs +2 -0
  64. package/dist/FeatureSwitch/index.mjs +2 -0
  65. package/dist/FeatureSwitch-cjs.js +15 -2
  66. package/dist/FeatureSwitch-es.js +15 -2
  67. package/dist/FieldDescription-cjs.js +49 -49
  68. package/dist/FieldDescription-es.js +2 -2
  69. package/dist/FilterPicker/components/FilterPickerActivator/index.cjs +0 -1
  70. package/dist/FilterPicker/components/FilterPickerActivator/index.mjs +0 -1
  71. package/dist/FilterPicker/components/FilterPickerContent/index.cjs +0 -1
  72. package/dist/FilterPicker/components/FilterPickerContent/index.mjs +0 -1
  73. package/dist/FilterPicker/components/FilterPickerTrigger/index.cjs +0 -1
  74. package/dist/FilterPicker/components/FilterPickerTrigger/index.mjs +0 -1
  75. package/dist/FilterPicker/index.cjs +0 -1
  76. package/dist/FilterPicker/index.mjs +0 -1
  77. package/dist/FormatFile/FormatFile.messages.d.ts +18 -0
  78. package/dist/FormatFile/index.cjs +2 -3
  79. package/dist/FormatFile/index.mjs +2 -3
  80. package/dist/FormatFile-cjs.js +24 -2
  81. package/dist/FormatFile-es.js +24 -2
  82. package/dist/Gallery/index.cjs +0 -1
  83. package/dist/Gallery/index.mjs +0 -1
  84. package/dist/HelperText-cjs.js +3 -2
  85. package/dist/HelperText-es.js +3 -2
  86. package/dist/InputDate/index.cjs +0 -2
  87. package/dist/InputDate/index.mjs +0 -2
  88. package/dist/InputNumber/InputNumber.d.ts +75 -5
  89. package/dist/InputNumber/index.cjs +27 -3
  90. package/dist/InputNumber/index.d.ts +2 -2
  91. package/dist/InputNumber/index.mjs +27 -3
  92. package/dist/{primitives/InputNumberExperimental → InputNumber}/types.d.ts +48 -35
  93. package/dist/InputNumber-cjs.js +267 -4986
  94. package/dist/InputNumber-es.js +268 -4987
  95. package/dist/LightBox/index.cjs +0 -1
  96. package/dist/LightBox/index.mjs +0 -1
  97. package/dist/Menu/index.cjs +7 -7
  98. package/dist/Menu/index.mjs +7 -7
  99. package/dist/Menu-cjs.js +5 -1
  100. package/dist/Menu-es.js +5 -2
  101. package/dist/MenuSubmenuTrigger-cjs.js +142 -143
  102. package/dist/MenuSubmenuTrigger-es.js +5 -6
  103. package/dist/Modal/index.cjs +0 -1
  104. package/dist/Modal/index.mjs +0 -1
  105. package/dist/NumberFieldInput-cjs.js +63 -63
  106. package/dist/NumberFieldInput-es.js +5 -5
  107. package/dist/Page/index.cjs +18 -19
  108. package/dist/Page/index.mjs +18 -19
  109. package/dist/Page-cjs.js +6 -3
  110. package/dist/Page-es.js +6 -3
  111. package/dist/Popover/index.cjs +0 -1
  112. package/dist/Popover/index.mjs +0 -1
  113. package/dist/ProgressBar/ProgressBar.messages.d.ts +6 -0
  114. package/dist/ProgressBar/index.cjs +2 -0
  115. package/dist/ProgressBar/index.mjs +2 -0
  116. package/dist/ProgressBar-cjs.js +13 -1
  117. package/dist/ProgressBar-es.js +13 -1
  118. package/dist/ScrollAreaViewport-cjs.js +119 -121
  119. package/dist/ScrollAreaViewport-es.js +3 -5
  120. package/dist/Select/index.cjs +3 -9
  121. package/dist/Select/index.mjs +3 -9
  122. package/dist/SelectGroupLabel-cjs.js +117 -107
  123. package/dist/SelectGroupLabel-es.js +20 -12
  124. package/dist/Toast/Toast.messages.d.ts +6 -0
  125. package/dist/Toast/index.cjs +3 -1
  126. package/dist/Toast/index.mjs +3 -1
  127. package/dist/Toast/showToast.d.ts +12 -1
  128. package/dist/Tooltip/index.cjs +0 -1
  129. package/dist/Tooltip/index.mjs +0 -1
  130. package/dist/dialogReturnFocus-cjs.js +4 -1
  131. package/dist/dialogReturnFocus-es.js +4 -1
  132. package/dist/docs/DataDump/DataDump.md +1 -1
  133. package/dist/docs/InputNumber/InputNumber.md +564 -56
  134. package/dist/docs/Page/Page.md +1 -1
  135. package/dist/docs/index.md +0 -1
  136. package/dist/floating-ui.react-cjs.js +34 -35
  137. package/dist/floating-ui.react-dom-cjs.js +64 -65
  138. package/dist/floating-ui.react-dom-es.js +1 -2
  139. package/dist/floating-ui.react-es.js +1 -2
  140. package/dist/floating-ui.utils-cjs.js +183 -0
  141. package/dist/floating-ui.utils-es.js +165 -1
  142. package/dist/index.cjs +10 -15
  143. package/dist/index.mjs +10 -15
  144. package/dist/primitives/BottomSheet/index.cjs +2 -5
  145. package/dist/primitives/BottomSheet/index.mjs +2 -5
  146. package/dist/primitives/ComboboxPrimitive/index.cjs +3 -7
  147. package/dist/primitives/ComboboxPrimitive/index.mjs +3 -7
  148. package/dist/primitives/HelperText/HelperText.d.ts +4 -1
  149. package/dist/primitives/HelperText/index.cjs +1 -1
  150. package/dist/primitives/HelperText/index.mjs +1 -1
  151. package/dist/primitives/SelectPrimitive/index.cjs +3 -9
  152. package/dist/primitives/SelectPrimitive/index.mjs +3 -9
  153. package/dist/primitives/index.cjs +2 -16
  154. package/dist/primitives/index.d.ts +0 -2
  155. package/dist/primitives/index.mjs +2 -15
  156. package/dist/scrollEdges-cjs.js +6 -2
  157. package/dist/scrollEdges-es.js +5 -2
  158. package/dist/sharedHelpers/i18n/renderWithLocale.d.ts +11 -0
  159. package/dist/showToast-cjs.js +20 -6
  160. package/dist/showToast-es.js +20 -6
  161. package/dist/styles.css +573 -902
  162. package/dist/unstyledPrimitives/index.cjs +105 -111
  163. package/dist/unstyledPrimitives/index.mjs +5 -11
  164. package/dist/useCompositeListItem-cjs.js +516 -90
  165. package/dist/useCompositeListItem-es.js +407 -6
  166. package/dist/useLabel-cjs.js +10 -10
  167. package/dist/useLabel-es.js +3 -3
  168. package/dist/useRenderElement-es.js +1 -1
  169. package/dist/useScrollLock-cjs.js +1332 -203
  170. package/dist/useScrollLock-es.js +1068 -5
  171. package/dist/utils/meta/meta.json +12 -0
  172. package/package.json +2 -3
  173. package/dist/InputNumber/InputNumber.types.d.ts +0 -20
  174. package/dist/InputNumberExperimental-cjs.js +0 -277
  175. package/dist/InputNumberExperimental-es.js +0 -275
  176. package/dist/clamp-cjs.js +0 -7
  177. package/dist/clamp-es.js +0 -5
  178. package/dist/clsx-cjs.js +0 -5
  179. package/dist/clsx-es.js +0 -3
  180. package/dist/docs/InputNumberExperimental/InputNumberExperimental.md +0 -578
  181. package/dist/floating-ui.utils.dom-cjs.js +0 -185
  182. package/dist/floating-ui.utils.dom-es.js +0 -165
  183. package/dist/isElementDisabled-cjs.js +0 -40
  184. package/dist/isElementDisabled-es.js +0 -18
  185. package/dist/primitives/InputNumberExperimental/InputNumberExperimental.d.ts +0 -77
  186. package/dist/primitives/InputNumberExperimental/index.cjs +0 -30
  187. package/dist/primitives/InputNumberExperimental/index.d.ts +0 -2
  188. package/dist/primitives/InputNumberExperimental/index.mjs +0 -24
  189. package/dist/resolveAriaLabelledBy-cjs.js +0 -200
  190. package/dist/resolveAriaLabelledBy-es.js +0 -166
  191. package/dist/useButton-cjs.js +0 -1164
  192. package/dist/useButton-es.js +0 -1071
  193. package/dist/useLabelableId-cjs.js +0 -278
  194. package/dist/useLabelableId-es.js +0 -247
@@ -1,18 +1,12 @@
1
1
  'use strict';
2
2
 
3
3
  var React = require('react');
4
- var useButton = require('./useButton-cjs.js');
5
- var useRenderElement = require('./useRenderElement-cjs.js');
6
4
  var useScrollLock = require('./useScrollLock-cjs.js');
7
- var isElementDisabled = require('./isElementDisabled-cjs.js');
8
- var useLabelableId = require('./useLabelableId-cjs.js');
9
- var resolveAriaLabelledBy = require('./resolveAriaLabelledBy-cjs.js');
5
+ var useRenderElement = require('./useRenderElement-cjs.js');
6
+ var useCompositeListItem = require('./useCompositeListItem-cjs.js');
10
7
  var scrollEdges = require('./scrollEdges-cjs.js');
11
8
  var jsxRuntime = require('react/jsx-runtime');
12
- var useCompositeListItem = require('./useCompositeListItem-cjs.js');
13
9
  var floatingUi_utils = require('./floating-ui.utils-cjs.js');
14
- var clamp = require('./clamp-cjs.js');
15
- var floatingUi_utils_dom = require('./floating-ui.utils.dom-cjs.js');
16
10
  var floatingUi_reactDom = require('./floating-ui.react-dom-cjs.js');
17
11
 
18
12
  function _interopNamespaceDefault(e) {
@@ -34,6 +28,16 @@ function _interopNamespaceDefault(e) {
34
28
 
35
29
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
36
30
 
31
+ const ToolbarRootContext = /*#__PURE__*/React__namespace.createContext(undefined);
32
+ if (process.env.NODE_ENV !== "production") ToolbarRootContext.displayName = "ToolbarRootContext";
33
+ function useToolbarRootContext(optional) {
34
+ const context = React__namespace.useContext(ToolbarRootContext);
35
+ if (context === undefined && !optional) {
36
+ throw new Error(process.env.NODE_ENV !== "production" ? 'Base UI: ToolbarRootContext is missing. Toolbar parts must be placed within <Toolbar.Root>.' : useRenderElement.formatErrorMessage(69));
37
+ }
38
+ return context;
39
+ }
40
+
37
41
  /**
38
42
  * Returns a previous value of its argument.
39
43
  * @param value Current value.
@@ -53,6 +57,10 @@ function usePreviousValue(value) {
53
57
  return state.previous;
54
58
  }
55
59
 
60
+ function isElementDisabled(element) {
61
+ return element == null || element.hasAttribute('disabled') || element.getAttribute('aria-disabled') === 'true';
62
+ }
63
+
56
64
  const SelectRootContext = /*#__PURE__*/React__namespace.createContext(null);
57
65
  if (process.env.NODE_ENV !== "production") SelectRootContext.displayName = "SelectRootContext";
58
66
  const SelectFloatingContext = /*#__PURE__*/React__namespace.createContext(null);
@@ -94,10 +102,10 @@ const selectors = {
94
102
  if (multiple && Array.isArray(value)) {
95
103
  return value.length > 0;
96
104
  }
97
- return resolveAriaLabelledBy.stringifyAsValue(value, itemToStringValue) !== '';
105
+ return useCompositeListItem.stringifyAsValue(value, itemToStringValue) !== '';
98
106
  }),
99
107
  hasNullItemLabel: useScrollLock.createSelector((state, enabled) => {
100
- return enabled ? resolveAriaLabelledBy.hasNullItemLabel(state.items) : false;
108
+ return enabled ? useCompositeListItem.hasNullItemLabel(state.items) : false;
101
109
  }),
102
110
  open: useScrollLock.createSelector(state => state.open),
103
111
  mounted: useScrollLock.createSelector(state => state.mounted),
@@ -111,13 +119,13 @@ const selectors = {
111
119
  const comparer = state.isItemEqualToValue;
112
120
  const storeValue = state.value;
113
121
  if (state.multiple) {
114
- return Array.isArray(storeValue) && storeValue.some(selectedItem => resolveAriaLabelledBy.compareItemEquality(itemValue, selectedItem, comparer));
122
+ return Array.isArray(storeValue) && storeValue.some(selectedItem => useCompositeListItem.compareItemEquality(itemValue, selectedItem, comparer));
115
123
  }
116
124
 
117
125
  // The value is the source of truth: a stale `selectedIndex` (e.g. the controlled
118
126
  // value changes while the popup is open, where the index sync is deferred) must not
119
127
  // keep a previously selected item marked as selected.
120
- return resolveAriaLabelledBy.compareItemEquality(itemValue, storeValue, comparer);
128
+ return useCompositeListItem.compareItemEquality(itemValue, storeValue, comparer);
121
129
  }),
122
130
  isSelectedByFocus: useScrollLock.createSelector((state, index) => {
123
131
  return state.selectedIndex === index;
@@ -156,13 +164,13 @@ function SelectRoot(props) {
156
164
  multiple = false,
157
165
  itemToStringLabel,
158
166
  itemToStringValue,
159
- isItemEqualToValue = resolveAriaLabelledBy.defaultItemEquality,
167
+ isItemEqualToValue = useCompositeListItem.defaultItemEquality,
160
168
  highlightItemOnHover = true,
161
169
  children
162
170
  } = props;
163
171
  const {
164
172
  clearErrors
165
- } = useLabelableId.useFormContext();
173
+ } = useCompositeListItem.useFormContext();
166
174
  const {
167
175
  setDirty,
168
176
  setTouched,
@@ -173,19 +181,19 @@ function SelectRoot(props) {
173
181
  disabled: fieldDisabled,
174
182
  validation,
175
183
  validationMode
176
- } = useLabelableId.useFieldRootContext();
177
- const generatedId = useLabelableId.useLabelableId({
184
+ } = useCompositeListItem.useFieldRootContext();
185
+ const generatedId = useCompositeListItem.useLabelableId({
178
186
  id
179
187
  });
180
188
  const disabled = fieldDisabled || disabledProp;
181
189
  const name = fieldName ?? nameProp;
182
- const [value, setValueUnwrapped] = useButton.useControlled({
190
+ const [value, setValueUnwrapped] = useScrollLock.useControlled({
183
191
  controlled: valueProp,
184
192
  default: multiple ? defaultValue ?? useRenderElement.EMPTY_ARRAY : defaultValue,
185
193
  name: 'Select',
186
194
  state: 'value'
187
195
  });
188
- const [open, setOpenUnwrapped] = useButton.useControlled({
196
+ const [open, setOpenUnwrapped] = useScrollLock.useControlled({
189
197
  controlled: openProp,
190
198
  default: defaultOpen,
191
199
  name: 'Select',
@@ -211,7 +219,7 @@ function SelectRoot(props) {
211
219
  mounted,
212
220
  setMounted,
213
221
  transitionStatus
214
- } = useButton.useTransitionStatus(open);
222
+ } = useScrollLock.useTransitionStatus(open);
215
223
  const {
216
224
  openMethod,
217
225
  triggerProps: interactionTypeProps
@@ -256,31 +264,31 @@ function SelectRoot(props) {
256
264
  if (multiple) {
257
265
  return '';
258
266
  }
259
- return resolveAriaLabelledBy.stringifyAsValue(value, itemToStringValue);
267
+ return useCompositeListItem.stringifyAsValue(value, itemToStringValue);
260
268
  }, [multiple, value, itemToStringValue]);
261
269
  const fieldStringValue = React__namespace.useMemo(() => {
262
270
  if (multiple && Array.isArray(value)) {
263
- return value.map(currentValue => resolveAriaLabelledBy.stringifyAsValue(currentValue, itemToStringValue));
271
+ return value.map(currentValue => useCompositeListItem.stringifyAsValue(currentValue, itemToStringValue));
264
272
  }
265
- return resolveAriaLabelledBy.stringifyAsValue(value, itemToStringValue);
273
+ return useCompositeListItem.stringifyAsValue(value, itemToStringValue);
266
274
  }, [multiple, value, itemToStringValue]);
267
- const controlRef = useButton.useValueAsRef(store.state.triggerElement);
268
- const getStringifiedValueForForm = useButton.useStableCallback(() => fieldStringValue);
269
- useLabelableId.useRegisterFieldControl(controlRef, generatedId, value, getStringifiedValueForForm, !disabled, nameProp);
275
+ const controlRef = useScrollLock.useValueAsRef(store.state.triggerElement);
276
+ const getStringifiedValueForForm = useScrollLock.useStableCallback(() => fieldStringValue);
277
+ useCompositeListItem.useRegisterFieldControl(controlRef, generatedId, value, getStringifiedValueForForm, !disabled, nameProp);
270
278
  const initialValueRef = React__namespace.useRef(value);
271
279
  // Mirror the `hasSelectedValue` store selector so the Field's filled state agrees with the
272
280
  // trigger/value placeholder semantics (a value serializing to `''` counts as empty).
273
- const hasSelectedValue = multiple ? Array.isArray(value) && value.length > 0 : value != null && resolveAriaLabelledBy.stringifyAsValue(value, itemToStringValue) !== '';
274
- useButton.useIsoLayoutEffect(() => {
281
+ const hasSelectedValue = multiple ? Array.isArray(value) && value.length > 0 : value != null && useCompositeListItem.stringifyAsValue(value, itemToStringValue) !== '';
282
+ useScrollLock.useIsoLayoutEffect(() => {
275
283
  // Ensure the values and labels are registered for programmatic value changes.
276
284
  if (value !== initialValueRef.current) {
277
285
  store.set('forceMount', true);
278
286
  }
279
287
  }, [store, value]);
280
- useButton.useIsoLayoutEffect(() => {
288
+ useScrollLock.useIsoLayoutEffect(() => {
281
289
  setFilled(hasSelectedValue);
282
290
  }, [hasSelectedValue, setFilled]);
283
- useButton.useIsoLayoutEffect(function syncSelectedIndex() {
291
+ useScrollLock.useIsoLayoutEffect(function syncSelectedIndex() {
284
292
  const registry = valuesRef.current;
285
293
  let nextIndex;
286
294
  if (multiple) {
@@ -289,11 +297,11 @@ function SelectRoot(props) {
289
297
  nextIndex = null;
290
298
  } else {
291
299
  const lastValue = currentValue[currentValue.length - 1];
292
- const lastIndex = resolveAriaLabelledBy.findItemIndex(registry, lastValue, isItemEqualToValue);
300
+ const lastIndex = useCompositeListItem.findItemIndex(registry, lastValue, isItemEqualToValue);
293
301
  nextIndex = lastIndex === -1 ? null : lastIndex;
294
302
  }
295
303
  } else {
296
- const index = resolveAriaLabelledBy.findItemIndex(registry, value, isItemEqualToValue);
304
+ const index = useCompositeListItem.findItemIndex(registry, value, isItemEqualToValue);
297
305
  nextIndex = index === -1 ? null : index;
298
306
  }
299
307
  if (nextIndex === null) {
@@ -307,22 +315,22 @@ function SelectRoot(props) {
307
315
  function isSelectedValueDirty(currentValue) {
308
316
  const initialValue = validityData.initialValue;
309
317
  if (Array.isArray(currentValue) && Array.isArray(initialValue)) {
310
- return !resolveAriaLabelledBy.areArraysEqual(currentValue, initialValue, (itemValue, initialItemValue) => resolveAriaLabelledBy.compareItemEquality(itemValue, initialItemValue, isItemEqualToValue));
318
+ return !useCompositeListItem.areArraysEqual(currentValue, initialValue, (itemValue, initialItemValue) => useCompositeListItem.compareItemEquality(itemValue, initialItemValue, isItemEqualToValue));
311
319
  }
312
320
  return currentValue !== initialValue;
313
321
  }
314
- useButton.useValueChanged(value, () => {
322
+ useScrollLock.useValueChanged(value, () => {
315
323
  clearErrors(name);
316
324
  setDirty(isSelectedValueDirty(value));
317
325
  validation.change(value);
318
326
  });
319
- const setOpen = useButton.useStableCallback((nextOpen, eventDetails) => {
327
+ const setOpen = useScrollLock.useStableCallback((nextOpen, eventDetails) => {
320
328
  onOpenChange?.(nextOpen, eventDetails);
321
329
  if (eventDetails.isCanceled) {
322
330
  return;
323
331
  }
324
332
  setOpenUnwrapped(nextOpen);
325
- if (!nextOpen && (eventDetails.reason === useButton.focusOut || eventDetails.reason === useButton.outsidePress)) {
333
+ if (!nextOpen && (eventDetails.reason === useScrollLock.focusOut || eventDetails.reason === useScrollLock.outsidePress)) {
326
334
  setTouched(true);
327
335
  setFocused(false);
328
336
  if (validationMode === 'onBlur') {
@@ -330,7 +338,7 @@ function SelectRoot(props) {
330
338
  }
331
339
  }
332
340
  });
333
- const handleUnmount = useButton.useStableCallback(() => {
341
+ const handleUnmount = useScrollLock.useStableCallback(() => {
334
342
  setMounted(false);
335
343
  store.update({
336
344
  activeIndex: null,
@@ -338,7 +346,7 @@ function SelectRoot(props) {
338
346
  });
339
347
  onOpenChangeComplete?.(false);
340
348
  });
341
- useButton.useOpenChangeComplete({
349
+ useScrollLock.useOpenChangeComplete({
342
350
  enabled: !actionsRef,
343
351
  open,
344
352
  ref: popupRef,
@@ -351,14 +359,14 @@ function SelectRoot(props) {
351
359
  React__namespace.useImperativeHandle(actionsRef, () => ({
352
360
  unmount: handleUnmount
353
361
  }), [handleUnmount]);
354
- const setValue = useButton.useStableCallback((nextValue, eventDetails) => {
362
+ const setValue = useScrollLock.useStableCallback((nextValue, eventDetails) => {
355
363
  onValueChange?.(nextValue, eventDetails);
356
364
  if (eventDetails.isCanceled) {
357
365
  return;
358
366
  }
359
367
  setValueUnwrapped(nextValue);
360
368
  });
361
- const handleScrollArrowVisibility = useButton.useStableCallback(() => {
369
+ const handleScrollArrowVisibility = useScrollLock.useStableCallback(() => {
362
370
  const scroller = store.state.listElement || popupRef.current;
363
371
  if (!scroller) {
364
372
  return;
@@ -412,12 +420,12 @@ function SelectRoot(props) {
412
420
  // the disabled state from the element via the attribute-only `isElementDisabled` so the
413
421
  // hidden, force-mounted items used for closed-trigger typeahead aren't dropped by the
414
422
  // `elementsRef`/visibility filter that `disabledIndices` deliberately sidesteps.
415
- disabledIndices: index => isElementDisabled.isElementDisabled(listRef.current[index]),
423
+ disabledIndices: index => isElementDisabled(listRef.current[index]),
416
424
  onMatch(index) {
417
425
  if (open) {
418
426
  store.set('activeIndex', index);
419
427
  } else {
420
- setValue(valuesRef.current[index], useButton.createChangeEventDetails('none'));
428
+ setValue(valuesRef.current[index], useScrollLock.createChangeEventDetails('none'));
421
429
  }
422
430
  },
423
431
  onTyping(typing) {
@@ -439,7 +447,7 @@ function SelectRoot(props) {
439
447
  triggerProps: mergedTriggerProps
440
448
  });
441
449
  });
442
- useButton.useIsoLayoutEffect(() => {
450
+ useScrollLock.useIsoLayoutEffect(() => {
443
451
  store.update({
444
452
  id: generatedId,
445
453
  modal,
@@ -493,7 +501,7 @@ function SelectRoot(props) {
493
501
  return null;
494
502
  }
495
503
  return value.map(v => {
496
- const currentSerializedValue = resolveAriaLabelledBy.stringifyAsValue(v, itemToStringValue);
504
+ const currentSerializedValue = useCompositeListItem.stringifyAsValue(v, itemToStringValue);
497
505
  return /*#__PURE__*/jsxRuntime.jsx("input", {
498
506
  type: "hidden",
499
507
  form: form,
@@ -523,7 +531,7 @@ function SelectRoot(props) {
523
531
  return;
524
532
  }
525
533
  const nextValue = event.currentTarget.value;
526
- const details = useButton.createChangeEventDetails(useButton.none, event.nativeEvent);
534
+ const details = useScrollLock.createChangeEventDetails(useScrollLock.none, event.nativeEvent);
527
535
  function handleChange() {
528
536
  if (multiple) {
529
537
  // Browser autofill only writes a single scalar value.
@@ -533,7 +541,7 @@ function SelectRoot(props) {
533
541
  // Preserve the original serialized matching, then fall back to rendered text,
534
542
  // which browsers can autofill for primitive values like `value="US">United States`.
535
543
  const nextValueLower = nextValue.toLowerCase();
536
- let matchingIndex = valuesRef.current.findIndex(candidate => resolveAriaLabelledBy.stringifyAsValue(candidate, itemToStringValue).toLowerCase() === nextValueLower || resolveAriaLabelledBy.stringifyAsLabel(candidate, itemToStringLabel).toLowerCase() === nextValueLower);
544
+ let matchingIndex = valuesRef.current.findIndex(candidate => useCompositeListItem.stringifyAsValue(candidate, itemToStringValue).toLowerCase() === nextValueLower || useCompositeListItem.stringifyAsLabel(candidate, itemToStringLabel).toLowerCase() === nextValueLower);
537
545
  if (matchingIndex === -1) {
538
546
  matchingIndex = valuesRef.current.findIndex((_, index) => {
539
547
  const renderedLabel = labelsRef.current[index];
@@ -560,7 +568,7 @@ function SelectRoot(props) {
560
568
  required: required && !hasMultipleSelection,
561
569
  readOnly: readOnly,
562
570
  ref: ref,
563
- style: name ? useButton.visuallyHiddenInput : useButton.visuallyHidden,
571
+ style: name ? useScrollLock.visuallyHiddenInput : useScrollLock.visuallyHidden,
564
572
  tabIndex: -1,
565
573
  "aria-hidden": true,
566
574
  suppressHydrationWarning: true
@@ -573,7 +581,7 @@ const BOUNDARY_OFFSET = 2;
573
581
  const SELECTED_DELAY = 400;
574
582
  const stateAttributesMapping$2 = {
575
583
  ...useScrollLock.pressableTriggerOpenStateMapping,
576
- ...useLabelableId.fieldValidityMapping,
584
+ ...useCompositeListItem.fieldValidityMapping,
577
585
  popupSide: side => side ? {
578
586
  'data-popup-side': side
579
587
  } : null,
@@ -602,10 +610,10 @@ const SelectTrigger = /*#__PURE__*/React__namespace.forwardRef(function SelectTr
602
610
  validationMode,
603
611
  state: fieldState,
604
612
  disabled: fieldDisabled
605
- } = useLabelableId.useFieldRootContext();
613
+ } = useCompositeListItem.useFieldRootContext();
606
614
  const {
607
615
  labelId: fieldLabelId
608
- } = useLabelableId.useLabelableContext();
616
+ } = useCompositeListItem.useLabelableContext();
609
617
  const {
610
618
  store,
611
619
  setOpen,
@@ -629,25 +637,25 @@ const SelectTrigger = /*#__PURE__*/React__namespace.forwardRef(function SelectTr
629
637
  const hasSelectedValue = useScrollLock.useStore(store, selectors.hasSelectedValue);
630
638
  const popupSide = mounted && positionerElement ? popupSideValue : null;
631
639
  const id = idProp ?? rootId;
632
- const ariaLabelledBy = resolveAriaLabelledBy.resolveAriaLabelledBy(fieldLabelId, selectLabelId);
633
- useLabelableId.useLabelableId({
640
+ const ariaLabelledBy = useCompositeListItem.resolveAriaLabelledBy(fieldLabelId, selectLabelId);
641
+ useCompositeListItem.useLabelableId({
634
642
  id
635
643
  });
636
- const positionerRef = useButton.useValueAsRef(positionerElement);
644
+ const positionerRef = useScrollLock.useValueAsRef(positionerElement);
637
645
  const triggerRef = React__namespace.useRef(null);
638
646
  const {
639
647
  getButtonProps,
640
648
  buttonRef
641
- } = useButton.useButton({
649
+ } = useScrollLock.useButton({
642
650
  disabled,
643
651
  native: nativeButton
644
652
  });
645
- const setTriggerElement = useButton.useStableCallback(element => {
653
+ const setTriggerElement = useScrollLock.useStableCallback(element => {
646
654
  store.set('triggerElement', element);
647
655
  });
648
- const timeoutFocus = useButton.useTimeout();
649
- const timeoutMouseDown = useButton.useTimeout();
650
- const selectedDelayTimeout = useButton.useTimeout();
656
+ const timeoutFocus = useScrollLock.useTimeout();
657
+ const timeoutMouseDown = useScrollLock.useTimeout();
658
+ const selectedDelayTimeout = useScrollLock.useTimeout();
651
659
  React__namespace.useEffect(() => {
652
660
  if (open) {
653
661
  // A mousedown on the trigger can open the popup under the cursor. Keep mouseup selection
@@ -685,7 +693,7 @@ const SelectTrigger = /*#__PURE__*/React__namespace.forwardRef(function SelectTr
685
693
 
686
694
  // The popup element shouldn't obscure the focused trigger.
687
695
  if (open && alignItemWithTriggerActiveRef.current) {
688
- setOpen(false, useButton.createChangeEventDetails(useButton.none, event.nativeEvent));
696
+ setOpen(false, useScrollLock.createChangeEventDetails(useScrollLock.none, event.nativeEvent));
689
697
  }
690
698
 
691
699
  // Saves a re-render on initial click: `forceMount === true` mounts
@@ -697,7 +705,7 @@ const SelectTrigger = /*#__PURE__*/React__namespace.forwardRef(function SelectTr
697
705
  },
698
706
  onBlur(event) {
699
707
  // If focus is moving into the popup, don't count it as a blur.
700
- if (useButton.contains(positionerElement, event.relatedTarget)) {
708
+ if (useScrollLock.contains(positionerElement, event.relatedTarget)) {
701
709
  return;
702
710
  }
703
711
  setTouched(true);
@@ -710,7 +718,7 @@ const SelectTrigger = /*#__PURE__*/React__namespace.forwardRef(function SelectTr
710
718
  if (open) {
711
719
  return;
712
720
  }
713
- const doc = useButton.ownerDocument(event.currentTarget);
721
+ const doc = useScrollLock.ownerDocument(event.currentTarget);
714
722
  function handleMouseUp(mouseEvent) {
715
723
  if (!triggerRef.current) {
716
724
  return;
@@ -719,14 +727,14 @@ const SelectTrigger = /*#__PURE__*/React__namespace.forwardRef(function SelectTr
719
727
 
720
728
  // Don't treat the release as an outside press when it lands on the trigger or inside
721
729
  // the popup positioner (or their children).
722
- if (useButton.contains(triggerRef.current, mouseUpTarget) || useButton.contains(positionerRef.current, mouseUpTarget)) {
730
+ if (useScrollLock.contains(triggerRef.current, mouseUpTarget) || useScrollLock.contains(positionerRef.current, mouseUpTarget)) {
723
731
  return;
724
732
  }
725
733
  const bounds = useCompositeListItem.getPseudoElementBounds(triggerRef.current);
726
734
  if (mouseEvent.clientX >= bounds.left - BOUNDARY_OFFSET && mouseEvent.clientX <= bounds.right + BOUNDARY_OFFSET && mouseEvent.clientY >= bounds.top - BOUNDARY_OFFSET && mouseEvent.clientY <= bounds.bottom + BOUNDARY_OFFSET) {
727
735
  return;
728
736
  }
729
- setOpen(false, useButton.createChangeEventDetails(useButton.cancelOpen, mouseEvent));
737
+ setOpen(false, useScrollLock.createChangeEventDetails(useScrollLock.cancelOpen, mouseEvent));
730
738
  }
731
739
 
732
740
  // Firefox can fire this upon mousedown
@@ -801,9 +809,9 @@ const SelectValue = /*#__PURE__*/React__namespace.forwardRef(function SelectValu
801
809
  } else if (!hasSelectedValue && placeholder != null && !hasNullLabel) {
802
810
  children = placeholder;
803
811
  } else if (Array.isArray(value)) {
804
- children = resolveAriaLabelledBy.resolveMultipleLabels(value, items, itemToStringLabel);
812
+ children = useCompositeListItem.resolveMultipleLabels(value, items, itemToStringLabel);
805
813
  } else {
806
- children = resolveAriaLabelledBy.resolveSelectedLabel(value, items, itemToStringLabel);
814
+ children = useCompositeListItem.resolveSelectedLabel(value, items, itemToStringLabel);
807
815
  }
808
816
  const element = useRenderElement.useRenderElement('span', componentProps, {
809
817
  state,
@@ -920,7 +928,7 @@ const SelectPositioner = /*#__PURE__*/React__namespace.forwardRef(function Selec
920
928
  if (!mounted && controlledAlignItemWithTrigger !== alignItemWithTrigger) {
921
929
  setControlledAlignItemWithTrigger(alignItemWithTrigger);
922
930
  }
923
- useButton.useIsoLayoutEffect(() => {
931
+ useScrollLock.useIsoLayoutEffect(() => {
924
932
  if (!mounted) {
925
933
  if (selectors.scrollUpArrowVisible(store.state)) {
926
934
  store.set('scrollUpArrowVisible', false);
@@ -957,10 +965,10 @@ const SelectPositioner = /*#__PURE__*/React__namespace.forwardRef(function Selec
957
965
  align: positioning.align,
958
966
  anchorHidden: positioning.anchorHidden
959
967
  };
960
- useButton.useIsoLayoutEffect(() => {
968
+ useScrollLock.useIsoLayoutEffect(() => {
961
969
  store.set('popupSide', positioning.side);
962
970
  }, [store, positioning.side]);
963
- const setPositionerElement = useButton.useStableCallback(element => {
971
+ const setPositionerElement = useScrollLock.useStableCallback(element => {
964
972
  store.set('positionerElement', element);
965
973
  });
966
974
  const element = useCompositeListItem.usePositioner(componentProps, state, {
@@ -972,7 +980,7 @@ const SelectPositioner = /*#__PURE__*/React__namespace.forwardRef(function Selec
972
980
  inert: !open
973
981
  });
974
982
  const prevMapSizeRef = React__namespace.useRef(0);
975
- const onMapChange = useButton.useStableCallback(map => {
983
+ const onMapChange = useScrollLock.useStableCallback(map => {
976
984
  if (map.size === 0 && prevMapSizeRef.current === 0) {
977
985
  return;
978
986
  }
@@ -984,12 +992,12 @@ const SelectPositioner = /*#__PURE__*/React__namespace.forwardRef(function Selec
984
992
  if (map.size === prevSize) {
985
993
  return;
986
994
  }
987
- const eventDetails = useButton.createChangeEventDetails(useButton.none);
995
+ const eventDetails = useScrollLock.createChangeEventDetails(useScrollLock.none);
988
996
  if (prevSize !== 0 && !store.state.multiple && value !== null) {
989
- const selectedValueIndex = resolveAriaLabelledBy.findItemIndex(valuesRef.current, value, isItemEqualToValue);
997
+ const selectedValueIndex = useCompositeListItem.findItemIndex(valuesRef.current, value, isItemEqualToValue);
990
998
  if (selectedValueIndex === -1) {
991
999
  const initialSelectedValue = initialValueRef.current;
992
- const hasInitial = initialSelectedValue != null && resolveAriaLabelledBy.findItemIndex(valuesRef.current, initialSelectedValue, isItemEqualToValue) !== -1;
1000
+ const hasInitial = initialSelectedValue != null && useCompositeListItem.findItemIndex(valuesRef.current, initialSelectedValue, isItemEqualToValue) !== -1;
993
1001
  const nextValue = hasInitial ? initialSelectedValue : null;
994
1002
  setValue(nextValue, eventDetails);
995
1003
  if (nextValue === null) {
@@ -999,9 +1007,9 @@ const SelectPositioner = /*#__PURE__*/React__namespace.forwardRef(function Selec
999
1007
  }
1000
1008
  }
1001
1009
  if (prevSize !== 0 && store.state.multiple && Array.isArray(value)) {
1002
- const hasVisibleItem = selectedItemValue => resolveAriaLabelledBy.findItemIndex(valuesRef.current, selectedItemValue, isItemEqualToValue) !== -1;
1010
+ const hasVisibleItem = selectedItemValue => useCompositeListItem.findItemIndex(valuesRef.current, selectedItemValue, isItemEqualToValue) !== -1;
1003
1011
  const nextValue = value.filter(selectedItemValue => hasVisibleItem(selectedItemValue));
1004
- if (nextValue.length !== value.length || nextValue.some(selectedItemValue => !resolveAriaLabelledBy.selectedValueIncludes(value, selectedItemValue, isItemEqualToValue))) {
1012
+ if (nextValue.length !== value.length || nextValue.some(selectedItemValue => !useCompositeListItem.selectedValueIncludes(value, selectedItemValue, isItemEqualToValue))) {
1005
1013
  setValue(nextValue, eventDetails);
1006
1014
  if (nextValue.length === 0) {
1007
1015
  store.set('selectedIndex', null);
@@ -1046,7 +1054,7 @@ if (process.env.NODE_ENV !== "production") SelectPositioner.displayName = "Selec
1046
1054
 
1047
1055
  const stateAttributesMapping = {
1048
1056
  ...useScrollLock.popupStateMapping,
1049
- ...useButton.transitionStatusMapping
1057
+ ...useScrollLock.transitionStatusMapping
1050
1058
  };
1051
1059
 
1052
1060
  /**
@@ -1084,7 +1092,7 @@ const SelectPopup = /*#__PURE__*/React__namespace.forwardRef(function SelectPopu
1084
1092
  isPositioned,
1085
1093
  setControlledAlignItemWithTrigger
1086
1094
  } = useSelectPositionerContext();
1087
- const insideToolbar = isElementDisabled.useToolbarRootContext(true) != null;
1095
+ const insideToolbar = useToolbarRootContext(true) != null;
1088
1096
  const floatingRootContext = useSelectFloatingContext();
1089
1097
  const direction = useScrollLock.useDirection();
1090
1098
  const {
@@ -1103,8 +1111,8 @@ const SelectPopup = /*#__PURE__*/React__namespace.forwardRef(function SelectPopu
1103
1111
  const reachedMaxHeightRef = React__namespace.useRef(false);
1104
1112
  const initialPlacedRef = React__namespace.useRef(false);
1105
1113
  const originalPositionerStylesRef = React__namespace.useRef({});
1106
- const scrollArrowFrame = useButton.useAnimationFrame();
1107
- const handleScroll = useButton.useStableCallback(scroller => {
1114
+ const scrollArrowFrame = useScrollLock.useAnimationFrame();
1115
+ const handleScroll = useScrollLock.useStableCallback(scroller => {
1108
1116
  if (!positionerElement || !popupRef.current || !initialPlacedRef.current) {
1109
1117
  return;
1110
1118
  }
@@ -1120,8 +1128,8 @@ const SelectPopup = /*#__PURE__*/React__namespace.forwardRef(function SelectPopu
1120
1128
  }
1121
1129
  const scale = getScale(positionerElement);
1122
1130
  const currentHeight = normalizeSize(positionerElement.getBoundingClientRect().height, 'y', scale);
1123
- const doc = useButton.ownerDocument(positionerElement);
1124
- const win = floatingUi_utils_dom.getWindow(positionerElement);
1131
+ const doc = useScrollLock.ownerDocument(positionerElement);
1132
+ const win = floatingUi_utils.getWindow(positionerElement);
1125
1133
  const positionerStyles = win.getComputedStyle(positionerElement);
1126
1134
  const marginTop = parseFloat(positionerStyles.marginTop);
1127
1135
  const marginBottom = parseFloat(positionerStyles.marginBottom);
@@ -1137,7 +1145,7 @@ const SelectPopup = /*#__PURE__*/React__namespace.forwardRef(function SelectPopu
1137
1145
  positionerElement.style.height = `${height}px`;
1138
1146
  };
1139
1147
  const handleSmallDiff = (diff, targetScrollTop) => {
1140
- const heightDelta = clamp.clamp(diff, 0, maxAvailableHeight - currentHeight);
1148
+ const heightDelta = scrollEdges.clamp(diff, 0, maxAvailableHeight - currentHeight);
1141
1149
  if (heightDelta > 0) {
1142
1150
  // Consume the remaining scroll in height.
1143
1151
  setHeight(currentHeight + heightDelta);
@@ -1175,7 +1183,7 @@ const SelectPopup = /*#__PURE__*/React__namespace.forwardRef(function SelectPopu
1175
1183
  if (scrollToMax || nextScrollTop != null) {
1176
1184
  // Recompute bounds after resizing (clientHeight likely changed).
1177
1185
  const nextMaxScrollTop = getMaxScrollTop(scroller);
1178
- const target = scrollToMax ? nextMaxScrollTop : clamp.clamp(nextScrollTop, 0, nextMaxScrollTop);
1186
+ const target = scrollToMax ? nextMaxScrollTop : scrollEdges.clamp(nextScrollTop, 0, nextMaxScrollTop);
1179
1187
 
1180
1188
  // Avoid adjustments that re-trigger scroll events forever.
1181
1189
  if (Math.abs(scroller.scrollTop - target) > scrollEdges.SCROLL_EDGE_TOLERANCE_PX) {
@@ -1188,7 +1196,7 @@ const SelectPopup = /*#__PURE__*/React__namespace.forwardRef(function SelectPopu
1188
1196
  handleScrollArrowVisibility();
1189
1197
  });
1190
1198
  React__namespace.useImperativeHandle(scrollHandlerRef, () => handleScroll, [handleScroll]);
1191
- useButton.useOpenChangeComplete({
1199
+ useScrollLock.useOpenChangeComplete({
1192
1200
  open,
1193
1201
  ref: popupRef,
1194
1202
  onComplete() {
@@ -1203,7 +1211,7 @@ const SelectPopup = /*#__PURE__*/React__namespace.forwardRef(function SelectPopu
1203
1211
  side,
1204
1212
  align
1205
1213
  };
1206
- useButton.useIsoLayoutEffect(() => {
1214
+ useScrollLock.useIsoLayoutEffect(() => {
1207
1215
  if (!positionerElement || !popupRef.current || Object.keys(originalPositionerStylesRef.current).length) {
1208
1216
  return;
1209
1217
  }
@@ -1219,7 +1227,7 @@ const SelectPopup = /*#__PURE__*/React__namespace.forwardRef(function SelectPopu
1219
1227
  marginBottom: positionerElement.style.marginBottom
1220
1228
  };
1221
1229
  }, [popupRef, positionerElement]);
1222
- useButton.useIsoLayoutEffect(() => {
1230
+ useScrollLock.useIsoLayoutEffect(() => {
1223
1231
  if (open || alignItemWithTriggerActive) {
1224
1232
  return;
1225
1233
  }
@@ -1227,7 +1235,7 @@ const SelectPopup = /*#__PURE__*/React__namespace.forwardRef(function SelectPopu
1227
1235
  reachedMaxHeightRef.current = false;
1228
1236
  clearStyles(positionerElement, originalPositionerStylesRef.current);
1229
1237
  }, [open, alignItemWithTriggerActive, positionerElement, popupRef]);
1230
- useButton.useIsoLayoutEffect(() => {
1238
+ useScrollLock.useIsoLayoutEffect(() => {
1231
1239
  const popupElement = popupRef.current;
1232
1240
 
1233
1241
  // Wait for Floating UI's first positioning pass before reading DOM geometry.
@@ -1254,10 +1262,10 @@ const SelectPopup = /*#__PURE__*/React__namespace.forwardRef(function SelectPopu
1254
1262
  textElement = !hasSelectedValue && firstItemTextRef.current?.isConnected ? firstItemTextRef.current : null;
1255
1263
  }
1256
1264
  const valueElement = valueRef.current;
1257
- const win = floatingUi_utils_dom.getWindow(positionerElement);
1265
+ const win = floatingUi_utils.getWindow(positionerElement);
1258
1266
  const positionerStyles = win.getComputedStyle(positionerElement);
1259
1267
  const popupStyles = win.getComputedStyle(popupElement);
1260
- const doc = useButton.ownerDocument(triggerElement);
1268
+ const doc = useScrollLock.ownerDocument(triggerElement);
1261
1269
  const scale = getScale(triggerElement);
1262
1270
  const triggerRect = normalizeRect(triggerElement.getBoundingClientRect(), scale);
1263
1271
  const positionerRect = normalizeRect(positionerElement.getBoundingClientRect(), scale);
@@ -1294,7 +1302,7 @@ const SelectPopup = /*#__PURE__*/React__namespace.forwardRef(function SelectPopu
1294
1302
  const maxHeight = viewportHeight - marginTop - marginBottom;
1295
1303
  const scrollTop = idealHeight - height;
1296
1304
  const maxRight = viewportWidth - paddingRight;
1297
- positionerElement.style.left = `${clamp.clamp(alignedLeft, paddingLeft, maxRight - positionerRect.width)}px`;
1305
+ positionerElement.style.left = `${scrollEdges.clamp(alignedLeft, paddingLeft, maxRight - positionerRect.width)}px`;
1298
1306
  positionerElement.style.height = `${height}px`;
1299
1307
  // `none` (not the invalid `auto`) so the explicit height governs in align mode and isn't
1300
1308
  // clamped by a `max-height` from user CSS.
@@ -1335,7 +1343,7 @@ const SelectPopup = /*#__PURE__*/React__namespace.forwardRef(function SelectPopu
1335
1343
  const popupHeight = positionerRect.height;
1336
1344
  const textCenterY = textRect.top + textRect.height / 2;
1337
1345
  const transformOriginY = popupHeight > 0 ? (textCenterY - popupTop) / popupHeight * 100 : 50;
1338
- const clampedY = clamp.clamp(transformOriginY, 0, 100);
1346
+ const clampedY = scrollEdges.clamp(transformOriginY, 0, 100);
1339
1347
  popupElement.style.setProperty('--transform-origin', `50% ${clampedY}%`);
1340
1348
  }
1341
1349
  if (initialHeight === viewportHeight || height >= maxPopupHeight) {
@@ -1354,11 +1362,11 @@ const SelectPopup = /*#__PURE__*/React__namespace.forwardRef(function SelectPopu
1354
1362
  if (!alignItemWithTriggerActive || !positionerElement || !open) {
1355
1363
  return undefined;
1356
1364
  }
1357
- const win = floatingUi_utils_dom.getWindow(positionerElement);
1365
+ const win = floatingUi_utils.getWindow(positionerElement);
1358
1366
  function handleResize(event) {
1359
- setOpen(false, useButton.createChangeEventDetails(useButton.windowResize, event));
1367
+ setOpen(false, useScrollLock.createChangeEventDetails(useScrollLock.windowResize, event));
1360
1368
  }
1361
- return useButton.addEventListener(win, 'resize', handleResize);
1369
+ return useScrollLock.addEventListener(win, 'resize', handleResize);
1362
1370
  }, [setOpen, alignItemWithTriggerActive, positionerElement, open]);
1363
1371
  const defaultProps = {
1364
1372
  ...(listElement ? {
@@ -1487,7 +1495,7 @@ const SelectList = /*#__PURE__*/React__namespace.forwardRef(function SelectList(
1487
1495
  }),
1488
1496
  className: hasScrollArrows && openMethod !== 'touch' ? scrollEdges.styleDisableScrollbar.className : undefined
1489
1497
  };
1490
- const setListElement = useButton.useStableCallback(element => {
1498
+ const setListElement = useScrollLock.useStableCallback(element => {
1491
1499
  store.set('listElement', element);
1492
1500
  });
1493
1501
  return useRenderElement.useRenderElement('div', componentProps, {
@@ -1545,7 +1553,7 @@ const SelectItem = /*#__PURE__*/React__namespace.memo(/*#__PURE__*/React__namesp
1545
1553
  const index = listItem.index;
1546
1554
  const hasRegistered = index !== -1;
1547
1555
  const itemRef = React__namespace.useRef(null);
1548
- useButton.useIsoLayoutEffect(() => {
1556
+ useScrollLock.useIsoLayoutEffect(() => {
1549
1557
  if (!hasRegistered) {
1550
1558
  return undefined;
1551
1559
  }
@@ -1555,7 +1563,7 @@ const SelectItem = /*#__PURE__*/React__namespace.memo(/*#__PURE__*/React__namesp
1555
1563
  delete values[index];
1556
1564
  };
1557
1565
  }, [hasRegistered, index, itemValue, valuesRef]);
1558
- useButton.useIsoLayoutEffect(() => {
1566
+ useScrollLock.useIsoLayoutEffect(() => {
1559
1567
  if (!hasRegistered) {
1560
1568
  return;
1561
1569
  }
@@ -1566,7 +1574,7 @@ const SelectItem = /*#__PURE__*/React__namespace.memo(/*#__PURE__*/React__namesp
1566
1574
  // the raw array, which a custom `isItemEqualToValue` isn't expected to receive.
1567
1575
  selectedCandidate = selectedValue.length > 0 ? selectedValue[selectedValue.length - 1] : undefined;
1568
1576
  }
1569
- if (selectedCandidate !== undefined && resolveAriaLabelledBy.compareItemEquality(itemValue, selectedCandidate, isItemEqualToValue)) {
1577
+ if (selectedCandidate !== undefined && useCompositeListItem.compareItemEquality(itemValue, selectedCandidate, isItemEqualToValue)) {
1570
1578
  store.set('selectedIndex', index);
1571
1579
  // Make sure SelectPopup can measure the selected item on first open.
1572
1580
  // SelectItemText can still update this ref later when focus moves.
@@ -1581,7 +1589,7 @@ const SelectItem = /*#__PURE__*/React__namespace.memo(/*#__PURE__*/React__namesp
1581
1589
  const {
1582
1590
  getButtonProps,
1583
1591
  buttonRef
1584
- } = useButton.useButton({
1592
+ } = useScrollLock.useButton({
1585
1593
  disabled,
1586
1594
  focusableWhenDisabled: true,
1587
1595
  native: nativeButton,
@@ -1601,11 +1609,11 @@ const SelectItem = /*#__PURE__*/React__namespace.memo(/*#__PURE__*/React__namesp
1601
1609
  const selectedValue = store.state.value;
1602
1610
  if (multiple) {
1603
1611
  const currentValue = Array.isArray(selectedValue) ? selectedValue : [];
1604
- const nextValue = selected ? resolveAriaLabelledBy.removeItem(currentValue, itemValue, isItemEqualToValue) : [...currentValue, itemValue];
1605
- setValue(nextValue, useButton.createChangeEventDetails(useButton.itemPress, event));
1612
+ const nextValue = selected ? useCompositeListItem.removeItem(currentValue, itemValue, isItemEqualToValue) : [...currentValue, itemValue];
1613
+ setValue(nextValue, useScrollLock.createChangeEventDetails(useScrollLock.itemPress, event));
1606
1614
  } else {
1607
- setValue(itemValue, useButton.createChangeEventDetails(useButton.itemPress, event));
1608
- setOpen(false, useButton.createChangeEventDetails(useButton.itemPress, event));
1615
+ setValue(itemValue, useScrollLock.createChangeEventDetails(useScrollLock.itemPress, event));
1616
+ setOpen(false, useScrollLock.createChangeEventDetails(useScrollLock.itemPress, event));
1609
1617
  }
1610
1618
  }
1611
1619
  function resetDragMovement() {
@@ -1625,7 +1633,7 @@ const SelectItem = /*#__PURE__*/React__namespace.memo(/*#__PURE__*/React__namesp
1625
1633
  onClick(event) {
1626
1634
  const isMouseClick = event.type === 'click' && pointerTypeRef.current !== 'touch';
1627
1635
  const clickPointerType = event.nativeEvent.pointerType;
1628
- const isVirtualMouseClick = isMouseClick && useButton.isVirtualClick(event.nativeEvent) && (
1636
+ const isVirtualMouseClick = isMouseClick && useScrollLock.isVirtualClick(event.nativeEvent) && (
1629
1637
  // Generic no-pointer `detail === 0` clicks stay tied to highlight state. Virtual
1630
1638
  // clicks that carry browser pointer data, including an empty string from assistive
1631
1639
  // technology, can activate unhighlighted items.
@@ -1736,7 +1744,7 @@ const Inner = /*#__PURE__*/React__namespace.memo(/*#__PURE__*/React__namespace.f
1736
1744
  const {
1737
1745
  transitionStatus,
1738
1746
  setMounted
1739
- } = useButton.useTransitionStatus(selected);
1747
+ } = useScrollLock.useTransitionStatus(selected);
1740
1748
  const state = {
1741
1749
  selected,
1742
1750
  transitionStatus
@@ -1748,9 +1756,9 @@ const Inner = /*#__PURE__*/React__namespace.memo(/*#__PURE__*/React__namespace.f
1748
1756
  'aria-hidden': true,
1749
1757
  children: '✔️'
1750
1758
  }, elementProps],
1751
- stateAttributesMapping: useButton.transitionStatusMapping
1759
+ stateAttributesMapping: useScrollLock.transitionStatusMapping
1752
1760
  });
1753
- useButton.useOpenChangeComplete({
1761
+ useScrollLock.useOpenChangeComplete({
1754
1762
  open: selected,
1755
1763
  ref: indicatorRef,
1756
1764
  onComplete() {
@@ -1858,8 +1866,8 @@ const SelectGroupLabel = /*#__PURE__*/React__namespace.forwardRef(function Selec
1858
1866
  const {
1859
1867
  setLabelId
1860
1868
  } = useSelectGroupContext();
1861
- const id = useButton.useBaseUiId(idProp);
1862
- useButton.useIsoLayoutEffect(() => {
1869
+ const id = useScrollLock.useBaseUiId(idProp);
1870
+ useScrollLock.useIsoLayoutEffect(() => {
1863
1871
  setLabelId(id);
1864
1872
  }, [id, setLabelId]);
1865
1873
  const element = useRenderElement.useRenderElement('div', componentProps, {
@@ -1884,7 +1892,9 @@ exports.SelectPositioner = SelectPositioner;
1884
1892
  exports.SelectRoot = SelectRoot;
1885
1893
  exports.SelectTrigger = SelectTrigger;
1886
1894
  exports.SelectValue = SelectValue;
1895
+ exports.isElementDisabled = isElementDisabled;
1887
1896
  exports.selectors = selectors;
1888
1897
  exports.usePreviousValue = usePreviousValue;
1889
1898
  exports.useSelectPositionerContext = useSelectPositionerContext;
1890
1899
  exports.useSelectRootContext = useSelectRootContext;
1900
+ exports.useToolbarRootContext = useToolbarRootContext;