@jobber/components 8.22.0 → 8.23.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/dist/CSPContext-cjs.js +69 -0
- package/dist/CSPContext-es.js +46 -0
- package/dist/Card/index.cjs +2 -0
- package/dist/Card/index.mjs +2 -0
- package/dist/ComboboxChipRemove-cjs.js +54 -211
- package/dist/ComboboxChipRemove-es.js +8 -164
- package/dist/DataDump/index.cjs +2 -0
- package/dist/DataDump/index.mjs +2 -0
- package/dist/Dialog/index.cjs +1 -0
- package/dist/Dialog/index.mjs +1 -0
- package/dist/DrawerDescription-cjs.js +2 -1
- package/dist/DrawerDescription-es.js +3 -2
- package/dist/DrawerTitle-es.js +1 -1
- package/dist/InputNumberExperimental-cjs.js +24 -23
- package/dist/InputNumberExperimental-es.js +3 -2
- package/dist/InternalBackdrop-es.js +3 -3
- package/dist/Menu/index.cjs +2 -0
- package/dist/Menu/index.mjs +2 -0
- package/dist/Menu-cjs.js +1 -1
- package/dist/Menu-es.js +1 -1
- package/dist/MenuSubmenuTrigger-cjs.js +5 -13
- package/dist/MenuSubmenuTrigger-es.js +8 -16
- package/dist/NumberFieldInput-cjs.js +9 -9
- package/dist/NumberFieldInput-es.js +3 -3
- package/dist/Page/index.cjs +2 -0
- package/dist/Page/index.mjs +2 -0
- package/dist/ScrollAreaViewport-cjs.js +5 -47
- package/dist/ScrollAreaViewport-es.js +5 -46
- package/dist/SelectGroupLabel-cjs.js +1924 -0
- package/dist/SelectGroupLabel-es.js +1888 -0
- package/dist/SelectPrimitive-cjs.js +112 -0
- package/dist/SelectPrimitive-es.js +110 -0
- package/dist/ToolbarRootContext-cjs.js +35 -0
- package/dist/ToolbarRootContext-es.js +14 -0
- package/dist/docs/SelectPrimitive/SelectPrimitive.md +326 -0
- package/dist/docs/index.md +1 -0
- package/dist/floating-ui.react-dom-cjs.js +1 -0
- package/dist/floating-ui.react-dom-es.js +2 -2
- package/dist/floating-ui.utils.dom-es.js +1 -1
- package/dist/index.cjs +2 -0
- package/dist/index.mjs +2 -0
- package/dist/primitives/BottomSheet/index.cjs +1 -0
- package/dist/primitives/BottomSheet/index.mjs +1 -0
- package/dist/primitives/ComboboxPrimitive/index.cjs +3 -1
- package/dist/primitives/ComboboxPrimitive/index.mjs +3 -1
- package/dist/primitives/InputNumberExperimental/index.cjs +2 -1
- package/dist/primitives/InputNumberExperimental/index.mjs +2 -1
- package/dist/primitives/SelectPrimitive/SelectPrimitive.d.ts +63 -0
- package/dist/primitives/SelectPrimitive/index.cjs +29 -0
- package/dist/primitives/SelectPrimitive/index.d.ts +2 -0
- package/dist/primitives/SelectPrimitive/index.mjs +23 -0
- package/dist/primitives/SelectPrimitive/types.d.ts +16 -0
- package/dist/primitives/index.cjs +8 -1
- package/dist/primitives/index.d.ts +1 -0
- package/dist/primitives/index.mjs +7 -1
- package/dist/primitives/mergeClassName.d.ts +12 -0
- package/dist/resolveAriaLabelledBy-cjs.js +195 -0
- package/dist/resolveAriaLabelledBy-es.js +162 -0
- package/dist/styles.css +325 -0
- package/dist/unstyledPrimitives/index.cjs +416 -24
- package/dist/unstyledPrimitives/index.d.ts +1 -0
- package/dist/unstyledPrimitives/index.mjs +417 -26
- package/dist/useButton-cjs.js +2 -0
- package/dist/useButton-es.js +3 -2
- package/dist/useCompositeListItem-es.js +3 -3
- package/dist/useLabel-cjs.js +3 -329
- package/dist/useLabel-es.js +4 -299
- package/dist/useLabelableId-cjs.js +332 -0
- package/dist/useLabelableId-es.js +300 -0
- package/dist/useRenderElement-cjs.js +3 -0
- package/dist/useRenderElement-es.js +4 -1
- package/package.json +2 -2
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
var React = require('react');
|
|
4
4
|
var useButton = require('../useButton-cjs.js');
|
|
5
5
|
var ComboboxChipRemove = require('../ComboboxChipRemove-cjs.js');
|
|
6
|
+
var resolveAriaLabelledBy = require('../resolveAriaLabelledBy-cjs.js');
|
|
6
7
|
var jsxRuntime = require('react/jsx-runtime');
|
|
7
8
|
var Separator = require('../Separator-cjs.js');
|
|
8
9
|
var DrawerDescription = require('../DrawerDescription-cjs.js');
|
|
@@ -17,7 +18,11 @@ var MenuSubmenuTrigger = require('../MenuSubmenuTrigger-cjs.js');
|
|
|
17
18
|
var useCompositeListItem = require('../useCompositeListItem-cjs.js');
|
|
18
19
|
var index_esm = require('../index.esm-cjs.js');
|
|
19
20
|
var NumberFieldInput = require('../NumberFieldInput-cjs.js');
|
|
20
|
-
require('../
|
|
21
|
+
var SelectGroupLabel = require('../SelectGroupLabel-cjs.js');
|
|
22
|
+
var useLabelableId = require('../useLabelableId-cjs.js');
|
|
23
|
+
var useLabel = require('../useLabel-cjs.js');
|
|
24
|
+
require('../CSPContext-cjs.js');
|
|
25
|
+
require('../ToolbarRootContext-cjs.js');
|
|
21
26
|
require('../floating-ui.react-dom-cjs.js');
|
|
22
27
|
|
|
23
28
|
function _interopNamespaceDefault(e) {
|
|
@@ -110,7 +115,7 @@ function AutocompleteRoot(props) {
|
|
|
110
115
|
if (highlightedValue == null) {
|
|
111
116
|
setInlineInputValue('');
|
|
112
117
|
} else {
|
|
113
|
-
setInlineInputValue(
|
|
118
|
+
setInlineInputValue(resolveAriaLabelledBy.stringifyAsLabel(highlightedValue, itemToStringValue));
|
|
114
119
|
}
|
|
115
120
|
} else {
|
|
116
121
|
setInlineInputValue('');
|
|
@@ -149,7 +154,7 @@ function AutocompleteValue(props) {
|
|
|
149
154
|
});
|
|
150
155
|
}
|
|
151
156
|
|
|
152
|
-
var index_parts$
|
|
157
|
+
var index_parts$7 = /*#__PURE__*/Object.freeze({
|
|
153
158
|
__proto__: null,
|
|
154
159
|
Arrow: ComboboxChipRemove.ComboboxArrow,
|
|
155
160
|
Backdrop: ComboboxChipRemove.ComboboxBackdrop,
|
|
@@ -176,7 +181,7 @@ var index_parts$6 = /*#__PURE__*/Object.freeze({
|
|
|
176
181
|
useFilteredItems: ComboboxChipRemove.useFilteredItems
|
|
177
182
|
});
|
|
178
183
|
|
|
179
|
-
var index_parts$
|
|
184
|
+
var index_parts$6 = /*#__PURE__*/Object.freeze({
|
|
180
185
|
__proto__: null,
|
|
181
186
|
Backdrop: DrawerDescription.DialogBackdrop,
|
|
182
187
|
Close: DrawerTitle.DialogClose,
|
|
@@ -191,7 +196,7 @@ var index_parts$5 = /*#__PURE__*/Object.freeze({
|
|
|
191
196
|
createHandle: DrawerDescription.createDialogHandle
|
|
192
197
|
});
|
|
193
198
|
|
|
194
|
-
const stateAttributesMapping$
|
|
199
|
+
const stateAttributesMapping$5 = {
|
|
195
200
|
active(value) {
|
|
196
201
|
if (value) {
|
|
197
202
|
return {
|
|
@@ -261,12 +266,12 @@ const DrawerIndent = /*#__PURE__*/React__namespace.forwardRef(function DrawerInd
|
|
|
261
266
|
[ScrollAreaViewport.DrawerBackdropCssVars.swipeProgress]: '0'
|
|
262
267
|
}
|
|
263
268
|
}, elementProps],
|
|
264
|
-
stateAttributesMapping: stateAttributesMapping$
|
|
269
|
+
stateAttributesMapping: stateAttributesMapping$5
|
|
265
270
|
});
|
|
266
271
|
});
|
|
267
272
|
if (process.env.NODE_ENV !== "production") DrawerIndent.displayName = "DrawerIndent";
|
|
268
273
|
|
|
269
|
-
const stateAttributesMapping$
|
|
274
|
+
const stateAttributesMapping$4 = {
|
|
270
275
|
active(value) {
|
|
271
276
|
if (value) {
|
|
272
277
|
return {
|
|
@@ -300,7 +305,7 @@ const DrawerIndentBackground = /*#__PURE__*/React__namespace.forwardRef(function
|
|
|
300
305
|
ref: forwardedRef,
|
|
301
306
|
state,
|
|
302
307
|
props: elementProps,
|
|
303
|
-
stateAttributesMapping: stateAttributesMapping$
|
|
308
|
+
stateAttributesMapping: stateAttributesMapping$4
|
|
304
309
|
});
|
|
305
310
|
});
|
|
306
311
|
if (process.env.NODE_ENV !== "production") DrawerIndentBackground.displayName = "DrawerIndentBackground";
|
|
@@ -1400,7 +1405,7 @@ const SWIPE_AREA_SWIPING_HOOK = {
|
|
|
1400
1405
|
const SWIPE_AREA_DISABLED_HOOK = {
|
|
1401
1406
|
[DrawerSwipeAreaDataAttributes.disabled]: ''
|
|
1402
1407
|
};
|
|
1403
|
-
const stateAttributesMapping$
|
|
1408
|
+
const stateAttributesMapping$3 = {
|
|
1404
1409
|
open(value) {
|
|
1405
1410
|
return value ? SWIPE_AREA_OPEN_HOOK : SWIPE_AREA_CLOSED_HOOK;
|
|
1406
1411
|
},
|
|
@@ -1705,7 +1710,7 @@ const DrawerSwipeArea = /*#__PURE__*/React__namespace.forwardRef(function Drawer
|
|
|
1705
1710
|
return useRenderElement.useRenderElement('div', componentProps, {
|
|
1706
1711
|
state,
|
|
1707
1712
|
ref: [forwardedRef, swipeAreaRef, registerTrigger],
|
|
1708
|
-
stateAttributesMapping: stateAttributesMapping$
|
|
1713
|
+
stateAttributesMapping: stateAttributesMapping$3,
|
|
1709
1714
|
props: [{
|
|
1710
1715
|
role: 'presentation',
|
|
1711
1716
|
'aria-hidden': true,
|
|
@@ -2709,7 +2714,7 @@ function shouldDismissFromStartEdge(direction, axis) {
|
|
|
2709
2714
|
return null;
|
|
2710
2715
|
}
|
|
2711
2716
|
|
|
2712
|
-
var index_parts$
|
|
2717
|
+
var index_parts$5 = /*#__PURE__*/Object.freeze({
|
|
2713
2718
|
__proto__: null,
|
|
2714
2719
|
Backdrop: ScrollAreaViewport.DrawerBackdrop,
|
|
2715
2720
|
Close: DrawerTitle.DrawerClose,
|
|
@@ -3376,7 +3381,7 @@ let MenuViewportCssVars = /*#__PURE__*/function (MenuViewportCssVars) {
|
|
|
3376
3381
|
return MenuViewportCssVars;
|
|
3377
3382
|
}({});
|
|
3378
3383
|
|
|
3379
|
-
const stateAttributesMapping = {
|
|
3384
|
+
const stateAttributesMapping$2 = {
|
|
3380
3385
|
activationDirection: value => value ? {
|
|
3381
3386
|
'data-activation-direction': value
|
|
3382
3387
|
} : null
|
|
@@ -3424,7 +3429,7 @@ const MenuViewport = /*#__PURE__*/React__namespace.forwardRef(function MenuViewp
|
|
|
3424
3429
|
props: [elementProps, {
|
|
3425
3430
|
children: childrenToRender
|
|
3426
3431
|
}],
|
|
3427
|
-
stateAttributesMapping
|
|
3432
|
+
stateAttributesMapping: stateAttributesMapping$2
|
|
3428
3433
|
});
|
|
3429
3434
|
});
|
|
3430
3435
|
if (process.env.NODE_ENV !== "production") MenuViewport.displayName = "MenuViewport";
|
|
@@ -3475,7 +3480,7 @@ function createMenuHandle() {
|
|
|
3475
3480
|
return new MenuHandle();
|
|
3476
3481
|
}
|
|
3477
3482
|
|
|
3478
|
-
var index_parts$
|
|
3483
|
+
var index_parts$4 = /*#__PURE__*/Object.freeze({
|
|
3479
3484
|
__proto__: null,
|
|
3480
3485
|
Arrow: MenuArrow,
|
|
3481
3486
|
Backdrop: MenuSubmenuTrigger.MenuBackdrop,
|
|
@@ -3859,7 +3864,7 @@ const ScrollAreaCorner = /*#__PURE__*/React__namespace.forwardRef(function Scrol
|
|
|
3859
3864
|
});
|
|
3860
3865
|
if (process.env.NODE_ENV !== "production") ScrollAreaCorner.displayName = "ScrollAreaCorner";
|
|
3861
3866
|
|
|
3862
|
-
var index_parts$
|
|
3867
|
+
var index_parts$3 = /*#__PURE__*/Object.freeze({
|
|
3863
3868
|
__proto__: null,
|
|
3864
3869
|
Content: ScrollAreaContent,
|
|
3865
3870
|
Corner: ScrollAreaCorner,
|
|
@@ -3869,7 +3874,7 @@ var index_parts$2 = /*#__PURE__*/Object.freeze({
|
|
|
3869
3874
|
Viewport: ScrollAreaViewport.ScrollAreaViewport
|
|
3870
3875
|
});
|
|
3871
3876
|
|
|
3872
|
-
var index_parts$
|
|
3877
|
+
var index_parts$2 = /*#__PURE__*/Object.freeze({
|
|
3873
3878
|
__proto__: null,
|
|
3874
3879
|
Arrow: ComboboxChipRemove.ComboboxArrow,
|
|
3875
3880
|
Backdrop: ComboboxChipRemove.ComboboxBackdrop,
|
|
@@ -4256,7 +4261,7 @@ const NumberFieldScrubAreaCursor = /*#__PURE__*/React__namespace.forwardRef(func
|
|
|
4256
4261
|
});
|
|
4257
4262
|
if (process.env.NODE_ENV !== "production") NumberFieldScrubAreaCursor.displayName = "NumberFieldScrubAreaCursor";
|
|
4258
4263
|
|
|
4259
|
-
var index_parts = /*#__PURE__*/Object.freeze({
|
|
4264
|
+
var index_parts$1 = /*#__PURE__*/Object.freeze({
|
|
4260
4265
|
__proto__: null,
|
|
4261
4266
|
Decrement: NumberFieldInput.NumberFieldDecrement,
|
|
4262
4267
|
Group: NumberFieldInput.NumberFieldGroup,
|
|
@@ -4267,6 +4272,392 @@ var index_parts = /*#__PURE__*/Object.freeze({
|
|
|
4267
4272
|
ScrubAreaCursor: NumberFieldScrubAreaCursor
|
|
4268
4273
|
});
|
|
4269
4274
|
|
|
4275
|
+
/**
|
|
4276
|
+
* An accessible label that is automatically associated with the select trigger.
|
|
4277
|
+
* Renders a `<div>` element.
|
|
4278
|
+
*
|
|
4279
|
+
* Documentation: [Base UI Select](https://base-ui.com/react/components/select)
|
|
4280
|
+
*/
|
|
4281
|
+
const SelectLabel = /*#__PURE__*/React__namespace.forwardRef(function SelectLabel(componentProps, forwardedRef) {
|
|
4282
|
+
const {
|
|
4283
|
+
render,
|
|
4284
|
+
className,
|
|
4285
|
+
...elementProps
|
|
4286
|
+
} = componentProps;
|
|
4287
|
+
// Keep label id derived from the root and ignore runtime `id` overrides from untyped consumers.
|
|
4288
|
+
const elementPropsWithoutId = elementProps;
|
|
4289
|
+
delete elementPropsWithoutId.id;
|
|
4290
|
+
const fieldRootContext = useLabelableId.useFieldRootContext();
|
|
4291
|
+
const {
|
|
4292
|
+
store
|
|
4293
|
+
} = SelectGroupLabel.useSelectRootContext();
|
|
4294
|
+
const triggerElement = InternalBackdrop.useStore(store, SelectGroupLabel.selectors.triggerElement);
|
|
4295
|
+
const rootId = InternalBackdrop.useStore(store, SelectGroupLabel.selectors.id);
|
|
4296
|
+
const defaultLabelId = resolveAriaLabelledBy.getDefaultLabelId(rootId);
|
|
4297
|
+
const labelProps = useLabel.useLabel({
|
|
4298
|
+
id: defaultLabelId,
|
|
4299
|
+
fallbackControlId: triggerElement?.id ?? rootId,
|
|
4300
|
+
setLabelId(nextLabelId) {
|
|
4301
|
+
store.set('labelId', nextLabelId);
|
|
4302
|
+
}
|
|
4303
|
+
});
|
|
4304
|
+
return useRenderElement.useRenderElement('div', componentProps, {
|
|
4305
|
+
ref: forwardedRef,
|
|
4306
|
+
state: fieldRootContext.state,
|
|
4307
|
+
props: [labelProps, elementProps],
|
|
4308
|
+
stateAttributesMapping: useLabelableId.fieldValidityMapping
|
|
4309
|
+
});
|
|
4310
|
+
});
|
|
4311
|
+
if (process.env.NODE_ENV !== "production") SelectLabel.displayName = "SelectLabel";
|
|
4312
|
+
|
|
4313
|
+
/**
|
|
4314
|
+
* An icon that indicates that the trigger button opens a select popup.
|
|
4315
|
+
* Renders a `<span>` element.
|
|
4316
|
+
*
|
|
4317
|
+
* Documentation: [Base UI Select](https://base-ui.com/react/components/select)
|
|
4318
|
+
*/
|
|
4319
|
+
const SelectIcon = /*#__PURE__*/React__namespace.forwardRef(function SelectIcon(componentProps, forwardedRef) {
|
|
4320
|
+
const {
|
|
4321
|
+
className,
|
|
4322
|
+
render,
|
|
4323
|
+
...elementProps
|
|
4324
|
+
} = componentProps;
|
|
4325
|
+
const {
|
|
4326
|
+
store
|
|
4327
|
+
} = SelectGroupLabel.useSelectRootContext();
|
|
4328
|
+
const open = InternalBackdrop.useStore(store, SelectGroupLabel.selectors.open);
|
|
4329
|
+
const state = {
|
|
4330
|
+
open
|
|
4331
|
+
};
|
|
4332
|
+
const element = useRenderElement.useRenderElement('span', componentProps, {
|
|
4333
|
+
state,
|
|
4334
|
+
ref: forwardedRef,
|
|
4335
|
+
props: [{
|
|
4336
|
+
'aria-hidden': true,
|
|
4337
|
+
children: '▼'
|
|
4338
|
+
}, elementProps],
|
|
4339
|
+
stateAttributesMapping: InternalBackdrop.triggerOpenStateMapping
|
|
4340
|
+
});
|
|
4341
|
+
return element;
|
|
4342
|
+
});
|
|
4343
|
+
if (process.env.NODE_ENV !== "production") SelectIcon.displayName = "SelectIcon";
|
|
4344
|
+
|
|
4345
|
+
const stateAttributesMapping$1 = {
|
|
4346
|
+
...InternalBackdrop.popupStateMapping,
|
|
4347
|
+
...useButton.transitionStatusMapping
|
|
4348
|
+
};
|
|
4349
|
+
|
|
4350
|
+
/**
|
|
4351
|
+
* An overlay displayed beneath the menu popup.
|
|
4352
|
+
* Renders a `<div>` element.
|
|
4353
|
+
*
|
|
4354
|
+
* Documentation: [Base UI Select](https://base-ui.com/react/components/select)
|
|
4355
|
+
*/
|
|
4356
|
+
const SelectBackdrop = /*#__PURE__*/React__namespace.forwardRef(function SelectBackdrop(componentProps, forwardedRef) {
|
|
4357
|
+
const {
|
|
4358
|
+
className,
|
|
4359
|
+
render,
|
|
4360
|
+
...elementProps
|
|
4361
|
+
} = componentProps;
|
|
4362
|
+
const {
|
|
4363
|
+
store
|
|
4364
|
+
} = SelectGroupLabel.useSelectRootContext();
|
|
4365
|
+
const open = InternalBackdrop.useStore(store, SelectGroupLabel.selectors.open);
|
|
4366
|
+
const mounted = InternalBackdrop.useStore(store, SelectGroupLabel.selectors.mounted);
|
|
4367
|
+
const transitionStatus = InternalBackdrop.useStore(store, SelectGroupLabel.selectors.transitionStatus);
|
|
4368
|
+
const state = {
|
|
4369
|
+
open,
|
|
4370
|
+
transitionStatus
|
|
4371
|
+
};
|
|
4372
|
+
const element = useRenderElement.useRenderElement('div', componentProps, {
|
|
4373
|
+
state,
|
|
4374
|
+
ref: forwardedRef,
|
|
4375
|
+
props: [{
|
|
4376
|
+
role: 'presentation',
|
|
4377
|
+
hidden: !mounted,
|
|
4378
|
+
style: {
|
|
4379
|
+
userSelect: 'none',
|
|
4380
|
+
WebkitUserSelect: 'none'
|
|
4381
|
+
}
|
|
4382
|
+
}, elementProps],
|
|
4383
|
+
stateAttributesMapping: stateAttributesMapping$1
|
|
4384
|
+
});
|
|
4385
|
+
return element;
|
|
4386
|
+
});
|
|
4387
|
+
if (process.env.NODE_ENV !== "production") SelectBackdrop.displayName = "SelectBackdrop";
|
|
4388
|
+
|
|
4389
|
+
const stateAttributesMapping = {
|
|
4390
|
+
...InternalBackdrop.popupStateMapping,
|
|
4391
|
+
...useButton.transitionStatusMapping
|
|
4392
|
+
};
|
|
4393
|
+
|
|
4394
|
+
/**
|
|
4395
|
+
* Displays an element positioned against the select popup anchor.
|
|
4396
|
+
* Renders a `<div>` element.
|
|
4397
|
+
*
|
|
4398
|
+
* Documentation: [Base UI Select](https://base-ui.com/react/components/select)
|
|
4399
|
+
*/
|
|
4400
|
+
const SelectArrow = /*#__PURE__*/React__namespace.forwardRef(function SelectArrow(componentProps, forwardedRef) {
|
|
4401
|
+
const {
|
|
4402
|
+
className,
|
|
4403
|
+
render,
|
|
4404
|
+
...elementProps
|
|
4405
|
+
} = componentProps;
|
|
4406
|
+
const {
|
|
4407
|
+
store
|
|
4408
|
+
} = SelectGroupLabel.useSelectRootContext();
|
|
4409
|
+
const {
|
|
4410
|
+
side,
|
|
4411
|
+
align,
|
|
4412
|
+
arrowRef,
|
|
4413
|
+
arrowStyles,
|
|
4414
|
+
arrowUncentered,
|
|
4415
|
+
alignItemWithTriggerActive
|
|
4416
|
+
} = SelectGroupLabel.useSelectPositionerContext();
|
|
4417
|
+
const open = InternalBackdrop.useStore(store, SelectGroupLabel.selectors.open, true);
|
|
4418
|
+
const state = {
|
|
4419
|
+
open,
|
|
4420
|
+
side,
|
|
4421
|
+
align,
|
|
4422
|
+
uncentered: arrowUncentered
|
|
4423
|
+
};
|
|
4424
|
+
const element = useRenderElement.useRenderElement('div', componentProps, {
|
|
4425
|
+
state,
|
|
4426
|
+
ref: [arrowRef, forwardedRef],
|
|
4427
|
+
props: [{
|
|
4428
|
+
style: arrowStyles,
|
|
4429
|
+
'aria-hidden': true
|
|
4430
|
+
}, elementProps],
|
|
4431
|
+
stateAttributesMapping
|
|
4432
|
+
});
|
|
4433
|
+
if (alignItemWithTriggerActive) {
|
|
4434
|
+
return null;
|
|
4435
|
+
}
|
|
4436
|
+
return element;
|
|
4437
|
+
});
|
|
4438
|
+
if (process.env.NODE_ENV !== "production") SelectArrow.displayName = "SelectArrow";
|
|
4439
|
+
|
|
4440
|
+
/**
|
|
4441
|
+
* @internal
|
|
4442
|
+
*/
|
|
4443
|
+
const SelectScrollArrow = /*#__PURE__*/React__namespace.forwardRef(function SelectScrollArrow(componentProps, forwardedRef) {
|
|
4444
|
+
const {
|
|
4445
|
+
render,
|
|
4446
|
+
className,
|
|
4447
|
+
direction,
|
|
4448
|
+
keepMounted = false,
|
|
4449
|
+
...elementProps
|
|
4450
|
+
} = componentProps;
|
|
4451
|
+
const {
|
|
4452
|
+
store,
|
|
4453
|
+
popupRef,
|
|
4454
|
+
listRef,
|
|
4455
|
+
handleScrollArrowVisibility,
|
|
4456
|
+
scrollArrowsMountedCountRef
|
|
4457
|
+
} = SelectGroupLabel.useSelectRootContext();
|
|
4458
|
+
const {
|
|
4459
|
+
side,
|
|
4460
|
+
scrollDownArrowRef,
|
|
4461
|
+
scrollUpArrowRef
|
|
4462
|
+
} = SelectGroupLabel.useSelectPositionerContext();
|
|
4463
|
+
const visibleSelector = direction === 'up' ? SelectGroupLabel.selectors.scrollUpArrowVisible : SelectGroupLabel.selectors.scrollDownArrowVisible;
|
|
4464
|
+
const stateVisible = InternalBackdrop.useStore(store, visibleSelector);
|
|
4465
|
+
const openMethod = InternalBackdrop.useStore(store, SelectGroupLabel.selectors.openMethod);
|
|
4466
|
+
|
|
4467
|
+
// Scroll arrows are disabled for touch modality as they are a hover-only element.
|
|
4468
|
+
const visible = stateVisible && openMethod !== 'touch';
|
|
4469
|
+
const timeout = useButton.useTimeout();
|
|
4470
|
+
const scrollArrowRef = direction === 'up' ? scrollUpArrowRef : scrollDownArrowRef;
|
|
4471
|
+
const {
|
|
4472
|
+
transitionStatus,
|
|
4473
|
+
setMounted
|
|
4474
|
+
} = useButton.useTransitionStatus(visible);
|
|
4475
|
+
useButton.useIsoLayoutEffect(() => {
|
|
4476
|
+
scrollArrowsMountedCountRef.current += 1;
|
|
4477
|
+
if (!store.state.hasScrollArrows) {
|
|
4478
|
+
store.set('hasScrollArrows', true);
|
|
4479
|
+
}
|
|
4480
|
+
return () => {
|
|
4481
|
+
scrollArrowsMountedCountRef.current = Math.max(0, scrollArrowsMountedCountRef.current - 1);
|
|
4482
|
+
if (scrollArrowsMountedCountRef.current === 0 && store.state.hasScrollArrows) {
|
|
4483
|
+
store.set('hasScrollArrows', false);
|
|
4484
|
+
}
|
|
4485
|
+
};
|
|
4486
|
+
}, [store, scrollArrowsMountedCountRef]);
|
|
4487
|
+
useButton.useOpenChangeComplete({
|
|
4488
|
+
open: visible,
|
|
4489
|
+
ref: scrollArrowRef,
|
|
4490
|
+
onComplete() {
|
|
4491
|
+
if (!visible) {
|
|
4492
|
+
setMounted(false);
|
|
4493
|
+
}
|
|
4494
|
+
}
|
|
4495
|
+
});
|
|
4496
|
+
const state = {
|
|
4497
|
+
direction,
|
|
4498
|
+
visible,
|
|
4499
|
+
side,
|
|
4500
|
+
transitionStatus
|
|
4501
|
+
};
|
|
4502
|
+
const defaultProps = {
|
|
4503
|
+
'aria-hidden': true,
|
|
4504
|
+
children: direction === 'up' ? '▲' : '▼',
|
|
4505
|
+
style: {
|
|
4506
|
+
position: 'absolute'
|
|
4507
|
+
},
|
|
4508
|
+
onMouseMove(event) {
|
|
4509
|
+
if (event.movementX === 0 && event.movementY === 0 || timeout.isStarted()) {
|
|
4510
|
+
return;
|
|
4511
|
+
}
|
|
4512
|
+
store.set('activeIndex', null);
|
|
4513
|
+
function scrollNextItem() {
|
|
4514
|
+
const scroller = store.state.listElement ?? popupRef.current;
|
|
4515
|
+
if (!scroller) {
|
|
4516
|
+
return;
|
|
4517
|
+
}
|
|
4518
|
+
store.set('activeIndex', null);
|
|
4519
|
+
handleScrollArrowVisibility();
|
|
4520
|
+
const isScrolledToTop = scroller.scrollTop === 0;
|
|
4521
|
+
const isScrolledToBottom = Math.round(scroller.scrollTop + scroller.clientHeight) >= scroller.scrollHeight;
|
|
4522
|
+
const list = listRef.current;
|
|
4523
|
+
|
|
4524
|
+
// Fallback when there are no items registered yet.
|
|
4525
|
+
if (list.length === 0) {
|
|
4526
|
+
if (direction === 'up') {
|
|
4527
|
+
store.set('scrollUpArrowVisible', !isScrolledToTop);
|
|
4528
|
+
} else {
|
|
4529
|
+
store.set('scrollDownArrowVisible', !isScrolledToBottom);
|
|
4530
|
+
}
|
|
4531
|
+
}
|
|
4532
|
+
if (direction === 'up' && isScrolledToTop || direction === 'down' && isScrolledToBottom) {
|
|
4533
|
+
timeout.clear();
|
|
4534
|
+
return;
|
|
4535
|
+
}
|
|
4536
|
+
if ((store.state.listElement || popupRef.current) && listRef.current && listRef.current.length > 0) {
|
|
4537
|
+
const items = listRef.current;
|
|
4538
|
+
const scrollArrowHeight = scrollArrowRef.current?.offsetHeight || 0;
|
|
4539
|
+
if (direction === 'up') {
|
|
4540
|
+
let firstVisibleIndex = 0;
|
|
4541
|
+
const scrollTop = scroller.scrollTop + scrollArrowHeight;
|
|
4542
|
+
for (let i = 0; i < items.length; i += 1) {
|
|
4543
|
+
const item = items[i];
|
|
4544
|
+
if (item) {
|
|
4545
|
+
const itemTop = item.offsetTop;
|
|
4546
|
+
if (itemTop >= scrollTop) {
|
|
4547
|
+
firstVisibleIndex = i;
|
|
4548
|
+
break;
|
|
4549
|
+
}
|
|
4550
|
+
}
|
|
4551
|
+
}
|
|
4552
|
+
const targetIndex = Math.max(0, firstVisibleIndex - 1);
|
|
4553
|
+
if (targetIndex < firstVisibleIndex) {
|
|
4554
|
+
const targetItem = items[targetIndex];
|
|
4555
|
+
if (targetItem) {
|
|
4556
|
+
scroller.scrollTop = Math.max(0, targetItem.offsetTop - scrollArrowHeight);
|
|
4557
|
+
}
|
|
4558
|
+
} else {
|
|
4559
|
+
// Already at the first item; ensure we reach the absolute top to account for group labels.
|
|
4560
|
+
scroller.scrollTop = 0;
|
|
4561
|
+
}
|
|
4562
|
+
} else {
|
|
4563
|
+
let lastVisibleIndex = items.length - 1;
|
|
4564
|
+
const scrollBottom = scroller.scrollTop + scroller.clientHeight - scrollArrowHeight;
|
|
4565
|
+
for (let i = 0; i < items.length; i += 1) {
|
|
4566
|
+
const item = items[i];
|
|
4567
|
+
if (item) {
|
|
4568
|
+
const itemBottom = item.offsetTop + item.offsetHeight;
|
|
4569
|
+
if (itemBottom > scrollBottom) {
|
|
4570
|
+
lastVisibleIndex = Math.max(0, i - 1);
|
|
4571
|
+
break;
|
|
4572
|
+
}
|
|
4573
|
+
}
|
|
4574
|
+
}
|
|
4575
|
+
const targetIndex = Math.min(items.length - 1, lastVisibleIndex + 1);
|
|
4576
|
+
if (targetIndex > lastVisibleIndex) {
|
|
4577
|
+
const targetItem = items[targetIndex];
|
|
4578
|
+
if (targetItem) {
|
|
4579
|
+
scroller.scrollTop = targetItem.offsetTop + targetItem.offsetHeight - scroller.clientHeight + scrollArrowHeight;
|
|
4580
|
+
}
|
|
4581
|
+
} else {
|
|
4582
|
+
// Already at the last item; ensure we reach the true bottom.
|
|
4583
|
+
scroller.scrollTop = scroller.scrollHeight - scroller.clientHeight;
|
|
4584
|
+
}
|
|
4585
|
+
}
|
|
4586
|
+
}
|
|
4587
|
+
timeout.start(40, scrollNextItem);
|
|
4588
|
+
}
|
|
4589
|
+
timeout.start(40, scrollNextItem);
|
|
4590
|
+
},
|
|
4591
|
+
onMouseLeave() {
|
|
4592
|
+
timeout.clear();
|
|
4593
|
+
}
|
|
4594
|
+
};
|
|
4595
|
+
const element = useRenderElement.useRenderElement('div', componentProps, {
|
|
4596
|
+
ref: [forwardedRef, scrollArrowRef],
|
|
4597
|
+
state,
|
|
4598
|
+
props: [defaultProps, elementProps]
|
|
4599
|
+
});
|
|
4600
|
+
const shouldRender = visible || keepMounted;
|
|
4601
|
+
if (!shouldRender) {
|
|
4602
|
+
return null;
|
|
4603
|
+
}
|
|
4604
|
+
return element;
|
|
4605
|
+
});
|
|
4606
|
+
if (process.env.NODE_ENV !== "production") SelectScrollArrow.displayName = "SelectScrollArrow";
|
|
4607
|
+
|
|
4608
|
+
/**
|
|
4609
|
+
* An element that scrolls the select popup down when hovered. Does not render when using touch input.
|
|
4610
|
+
* Renders a `<div>` element.
|
|
4611
|
+
*
|
|
4612
|
+
* Documentation: [Base UI Select](https://base-ui.com/react/components/select)
|
|
4613
|
+
*/
|
|
4614
|
+
const SelectScrollDownArrow = /*#__PURE__*/React__namespace.forwardRef(function SelectScrollDownArrow(props, forwardedRef) {
|
|
4615
|
+
return /*#__PURE__*/jsxRuntime.jsx(SelectScrollArrow, {
|
|
4616
|
+
...props,
|
|
4617
|
+
ref: forwardedRef,
|
|
4618
|
+
direction: "down"
|
|
4619
|
+
});
|
|
4620
|
+
});
|
|
4621
|
+
if (process.env.NODE_ENV !== "production") SelectScrollDownArrow.displayName = "SelectScrollDownArrow";
|
|
4622
|
+
|
|
4623
|
+
/**
|
|
4624
|
+
* An element that scrolls the select popup up when hovered. Does not render when using touch input.
|
|
4625
|
+
* Renders a `<div>` element.
|
|
4626
|
+
*
|
|
4627
|
+
* Documentation: [Base UI Select](https://base-ui.com/react/components/select)
|
|
4628
|
+
*/
|
|
4629
|
+
const SelectScrollUpArrow = /*#__PURE__*/React__namespace.forwardRef(function SelectScrollUpArrow(props, forwardedRef) {
|
|
4630
|
+
return /*#__PURE__*/jsxRuntime.jsx(SelectScrollArrow, {
|
|
4631
|
+
...props,
|
|
4632
|
+
ref: forwardedRef,
|
|
4633
|
+
direction: "up"
|
|
4634
|
+
});
|
|
4635
|
+
});
|
|
4636
|
+
if (process.env.NODE_ENV !== "production") SelectScrollUpArrow.displayName = "SelectScrollUpArrow";
|
|
4637
|
+
|
|
4638
|
+
var index_parts = /*#__PURE__*/Object.freeze({
|
|
4639
|
+
__proto__: null,
|
|
4640
|
+
Arrow: SelectArrow,
|
|
4641
|
+
Backdrop: SelectBackdrop,
|
|
4642
|
+
Group: SelectGroupLabel.SelectGroup,
|
|
4643
|
+
GroupLabel: SelectGroupLabel.SelectGroupLabel,
|
|
4644
|
+
Icon: SelectIcon,
|
|
4645
|
+
Item: SelectGroupLabel.SelectItem,
|
|
4646
|
+
ItemIndicator: SelectGroupLabel.SelectItemIndicator,
|
|
4647
|
+
ItemText: SelectGroupLabel.SelectItemText,
|
|
4648
|
+
Label: SelectLabel,
|
|
4649
|
+
List: SelectGroupLabel.SelectList,
|
|
4650
|
+
Popup: SelectGroupLabel.SelectPopup,
|
|
4651
|
+
Portal: SelectGroupLabel.SelectPortal,
|
|
4652
|
+
Positioner: SelectGroupLabel.SelectPositioner,
|
|
4653
|
+
Root: SelectGroupLabel.SelectRoot,
|
|
4654
|
+
ScrollDownArrow: SelectScrollDownArrow,
|
|
4655
|
+
ScrollUpArrow: SelectScrollUpArrow,
|
|
4656
|
+
Separator: Separator.Separator,
|
|
4657
|
+
Trigger: SelectGroupLabel.SelectTrigger,
|
|
4658
|
+
Value: SelectGroupLabel.SelectValue
|
|
4659
|
+
});
|
|
4660
|
+
|
|
4270
4661
|
/**
|
|
4271
4662
|
* Renders a Base UI element.
|
|
4272
4663
|
*
|
|
@@ -4277,11 +4668,12 @@ function useRender(params) {
|
|
|
4277
4668
|
}
|
|
4278
4669
|
|
|
4279
4670
|
exports.Separator = Separator.Separator;
|
|
4280
|
-
exports.Autocomplete = index_parts$
|
|
4281
|
-
exports.Combobox = index_parts$
|
|
4282
|
-
exports.Dialog = index_parts$
|
|
4283
|
-
exports.Drawer = index_parts$
|
|
4284
|
-
exports.Menu = index_parts$
|
|
4285
|
-
exports.NumberField = index_parts;
|
|
4286
|
-
exports.ScrollArea = index_parts$
|
|
4671
|
+
exports.Autocomplete = index_parts$7;
|
|
4672
|
+
exports.Combobox = index_parts$2;
|
|
4673
|
+
exports.Dialog = index_parts$6;
|
|
4674
|
+
exports.Drawer = index_parts$5;
|
|
4675
|
+
exports.Menu = index_parts$4;
|
|
4676
|
+
exports.NumberField = index_parts$1;
|
|
4677
|
+
exports.ScrollArea = index_parts$3;
|
|
4678
|
+
exports.Select = index_parts;
|
|
4287
4679
|
exports.useRender = useRender;
|
|
@@ -17,5 +17,6 @@ export { Menu } from "@base-ui/react/menu";
|
|
|
17
17
|
export { ScrollArea } from "@base-ui/react/scroll-area";
|
|
18
18
|
export { Combobox } from "@base-ui/react";
|
|
19
19
|
export { NumberField } from "@base-ui/react/number-field";
|
|
20
|
+
export { Select } from "@base-ui/react/select";
|
|
20
21
|
export { Separator } from "@base-ui/react/separator";
|
|
21
22
|
export { useRender } from "@base-ui/react/use-render";
|