@jobber/components 8.20.1 → 8.21.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/LegacySelect.d.ts +1 -0
- package/{Select.js → LegacySelect.js} +3 -3
- package/dist/BottomSheet-cjs.js +9 -58
- package/dist/BottomSheet-es.js +2 -47
- package/dist/Card/index.cjs +4 -0
- package/dist/Card/index.mjs +4 -0
- package/dist/ComboboxChipRemove-cjs.js +3418 -0
- package/dist/ComboboxChipRemove-es.js +3366 -0
- package/dist/ComboboxPrimitive-cjs.js +170 -0
- package/dist/ComboboxPrimitive-es.js +168 -0
- package/dist/DataDump/index.cjs +4 -0
- package/dist/DataDump/index.mjs +4 -0
- package/dist/DataTable/index.cjs +1 -1
- package/dist/DataTable/index.mjs +1 -1
- package/dist/DataTable-cjs.js +3 -3
- package/dist/DataTable-es.js +2 -2
- package/dist/InputNumberExperimental-cjs.js +45 -44
- package/dist/InputNumberExperimental-es.js +3 -2
- package/dist/InternalBackdrop-cjs.js +4278 -0
- package/dist/InternalBackdrop-es.js +4204 -0
- package/dist/LegacySelect/LegacySelect.d.ts +7 -0
- package/dist/{Select/Select.types.d.ts → LegacySelect/LegacySelect.types.d.ts} +1 -1
- package/dist/{Select → LegacySelect}/index.cjs +3 -3
- package/dist/LegacySelect/index.d.ts +3 -0
- package/dist/{Select → LegacySelect}/index.mjs +1 -1
- package/dist/{Select-cjs.js → LegacySelect-cjs.js} +5 -5
- package/dist/{Select-es.js → LegacySelect-es.js} +5 -5
- package/dist/Menu/index.cjs +4 -0
- package/dist/Menu/index.mjs +4 -0
- package/dist/Menu-cjs.js +9 -8
- package/dist/Menu-es.js +2 -1
- package/dist/MenuSubmenuTrigger-cjs.js +208 -1969
- package/dist/MenuSubmenuTrigger-es.js +7 -1759
- package/dist/NumberFieldInput-cjs.js +56 -439
- package/dist/NumberFieldInput-es.js +6 -376
- package/dist/Page/index.cjs +4 -0
- package/dist/Page/index.mjs +4 -0
- package/dist/ScrollAreaViewport-cjs.js +108 -4356
- package/dist/ScrollAreaViewport-es.js +6 -4201
- package/dist/buttonRenderAdapter-cjs.js +56 -0
- package/dist/buttonRenderAdapter-es.js +51 -0
- package/dist/clamp-cjs.js +0 -1194
- package/dist/clamp-es.js +1 -1091
- package/dist/docs/Autocomplete/Autocomplete.md +1 -1
- package/dist/docs/Chip/Chip.md +2 -2
- package/dist/docs/{Select/Select.md → LegacySelect/LegacySelect.md} +67 -62
- package/dist/docs/Menu/Menu.md +1 -1
- package/dist/docs/MultiSelect/MultiSelect.md +1 -1
- package/dist/docs/Tabs/Tabs.md +2 -1
- package/dist/docs/empty-states/empty-states.md +29 -0
- package/dist/docs/index.md +1 -1
- package/dist/index.cjs +7 -3
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.mjs +5 -1
- package/dist/primitives/BottomSheet/index.cjs +5 -2
- package/dist/primitives/BottomSheet/index.mjs +5 -2
- package/dist/primitives/ComboboxPrimitive/ComboboxPrimitive.d.ts +32 -0
- package/dist/primitives/ComboboxPrimitive/ComboboxPrimitive.types.d.ts +30 -0
- package/dist/primitives/ComboboxPrimitive/index.cjs +28 -0
- package/dist/primitives/ComboboxPrimitive/index.d.ts +2 -0
- package/dist/primitives/ComboboxPrimitive/index.mjs +22 -0
- package/dist/primitives/InputNumberExperimental/index.cjs +4 -2
- package/dist/primitives/InputNumberExperimental/index.mjs +4 -2
- package/dist/primitives/index.cjs +11 -2
- package/dist/primitives/index.d.ts +1 -0
- package/dist/primitives/index.mjs +10 -2
- package/dist/styles.css +793 -26
- package/dist/unstyledPrimitives/index.cjs +237 -3588
- package/dist/unstyledPrimitives/index.mjs +96 -3447
- package/dist/useButton-cjs.js +1196 -0
- package/dist/useButton-es.js +1091 -0
- package/dist/useCompositeListItem-cjs.js +1792 -0
- package/dist/useCompositeListItem-es.js +1762 -0
- package/dist/useLabel-cjs.js +411 -0
- package/dist/useLabel-es.js +378 -0
- package/dist/utils/meta/meta.json +3 -3
- package/package.json +7 -7
- package/Select.d.ts +0 -1
- package/dist/Select/Select.d.ts +0 -7
- package/dist/Select/index.d.ts +0 -3
- /package/dist/{Select → LegacySelect}/Option.d.ts +0 -0
- /package/dist/{Select → LegacySelect}/OptionGroup.d.ts +0 -0
- /package/dist/{Select → LegacySelect}/hooks/useSelectActions.d.ts +0 -0
|
@@ -7,9 +7,10 @@ var ActivityIndicator = require('./ActivityIndicator-cjs.js');
|
|
|
7
7
|
var Button = require('./Button-cjs.js');
|
|
8
8
|
var Icon = require('./Icon-cjs.js');
|
|
9
9
|
var useRenderElement = require('./useRenderElement-cjs.js');
|
|
10
|
-
var
|
|
11
|
-
var
|
|
10
|
+
var useButton = require('./useButton-cjs.js');
|
|
11
|
+
var useLabel = require('./useLabel-cjs.js');
|
|
12
12
|
var jsxRuntime = require('react/jsx-runtime');
|
|
13
|
+
var NumberFieldInput = require('./NumberFieldInput-cjs.js');
|
|
13
14
|
|
|
14
15
|
function _interopNamespaceDefault(e) {
|
|
15
16
|
var n = Object.create(null);
|
|
@@ -45,7 +46,7 @@ function useFieldsetRootContext(optional = false) {
|
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
const LabelableProvider = function LabelableProvider(props) {
|
|
48
|
-
const defaultId =
|
|
49
|
+
const defaultId = useButton.useBaseUiId();
|
|
49
50
|
const initialControlId = props.controlId === undefined ? defaultId : props.controlId;
|
|
50
51
|
const [controlId, setControlIdState] = React__namespace.useState(initialControlId);
|
|
51
52
|
const [labelId, setLabelId] = React__namespace.useState(props.labelId);
|
|
@@ -53,8 +54,8 @@ const LabelableProvider = function LabelableProvider(props) {
|
|
|
53
54
|
const registrationsRef = useRenderElement.useRefWithInit(() => new Map());
|
|
54
55
|
const {
|
|
55
56
|
messageIds: parentMessageIds
|
|
56
|
-
} =
|
|
57
|
-
const registerControlId =
|
|
57
|
+
} = useLabel.useLabelableContext();
|
|
58
|
+
const registerControlId = useButton.useStableCallback((source, nextId) => {
|
|
58
59
|
const registrations = registrationsRef.current;
|
|
59
60
|
if (nextId === undefined) {
|
|
60
61
|
registrations.delete(source);
|
|
@@ -95,14 +96,14 @@ const LabelableProvider = function LabelableProvider(props) {
|
|
|
95
96
|
setMessageIds,
|
|
96
97
|
getDescriptionProps
|
|
97
98
|
}), [controlId, registerControlId, labelId, setLabelId, messageIds, setMessageIds, getDescriptionProps]);
|
|
98
|
-
return /*#__PURE__*/jsxRuntime.jsx(
|
|
99
|
+
return /*#__PURE__*/jsxRuntime.jsx(useLabel.LabelableContext.Provider, {
|
|
99
100
|
value: contextValue,
|
|
100
101
|
children: props.children
|
|
101
102
|
});
|
|
102
103
|
};
|
|
103
104
|
if (process.env.NODE_ENV !== "production") LabelableProvider.displayName = "LabelableProvider";
|
|
104
105
|
|
|
105
|
-
const validityKeys = Object.keys(
|
|
106
|
+
const validityKeys = Object.keys(useLabel.DEFAULT_VALIDITY_STATE);
|
|
106
107
|
function isOnlyValueMissing(state) {
|
|
107
108
|
if (!state || state.valid || !state.valueMissing) {
|
|
108
109
|
return false;
|
|
@@ -125,7 +126,7 @@ function useFieldValidation(params) {
|
|
|
125
126
|
const {
|
|
126
127
|
formRef,
|
|
127
128
|
clearErrors
|
|
128
|
-
} =
|
|
129
|
+
} = useLabel.useFormContext();
|
|
129
130
|
const {
|
|
130
131
|
setValidityData,
|
|
131
132
|
validate,
|
|
@@ -140,10 +141,10 @@ function useFieldValidation(params) {
|
|
|
140
141
|
const {
|
|
141
142
|
controlId,
|
|
142
143
|
getDescriptionProps
|
|
143
|
-
} =
|
|
144
|
-
const timeout =
|
|
144
|
+
} = useLabel.useLabelableContext();
|
|
145
|
+
const timeout = useButton.useTimeout();
|
|
145
146
|
const inputRef = React__namespace.useRef(null);
|
|
146
|
-
const commit =
|
|
147
|
+
const commit = useButton.useStableCallback(async (value, revalidate = false) => {
|
|
147
148
|
const element = inputRef.current;
|
|
148
149
|
if (!element) {
|
|
149
150
|
return;
|
|
@@ -160,7 +161,7 @@ function useFieldValidation(params) {
|
|
|
160
161
|
const nextValidityData = {
|
|
161
162
|
value,
|
|
162
163
|
state: {
|
|
163
|
-
...
|
|
164
|
+
...useLabel.DEFAULT_VALIDITY_STATE,
|
|
164
165
|
valid: true
|
|
165
166
|
},
|
|
166
167
|
error: '',
|
|
@@ -173,7 +174,7 @@ function useFieldValidation(params) {
|
|
|
173
174
|
if (currentFieldData) {
|
|
174
175
|
formRef.current.fields.set(controlId, {
|
|
175
176
|
...currentFieldData,
|
|
176
|
-
...
|
|
177
|
+
...useLabel.getCombinedFieldValidityData(nextValidityData, false) // invalid = false
|
|
177
178
|
});
|
|
178
179
|
}
|
|
179
180
|
}
|
|
@@ -285,7 +286,7 @@ function useFieldValidation(params) {
|
|
|
285
286
|
formRef.current.fields.set(controlId, {
|
|
286
287
|
...currentFieldData,
|
|
287
288
|
// Keep Form-level errors part of overall field validity for submit blocking/focus logic.
|
|
288
|
-
...
|
|
289
|
+
...useLabel.getCombinedFieldValidityData(nextValidityData, invalid)
|
|
289
290
|
});
|
|
290
291
|
}
|
|
291
292
|
}
|
|
@@ -337,7 +338,7 @@ const FieldRootInner = /*#__PURE__*/React__namespace.forwardRef(function FieldRo
|
|
|
337
338
|
errors,
|
|
338
339
|
validationMode: formValidationMode,
|
|
339
340
|
submitAttemptedRef
|
|
340
|
-
} =
|
|
341
|
+
} = useLabel.useFormContext();
|
|
341
342
|
const {
|
|
342
343
|
render,
|
|
343
344
|
className,
|
|
@@ -355,7 +356,7 @@ const FieldRootInner = /*#__PURE__*/React__namespace.forwardRef(function FieldRo
|
|
|
355
356
|
const {
|
|
356
357
|
disabled: disabledFieldset
|
|
357
358
|
} = useFieldsetRootContext();
|
|
358
|
-
const validate =
|
|
359
|
+
const validate = useButton.useStableCallback(validateProp || (() => null));
|
|
359
360
|
const disabled = disabledFieldset || disabledProp;
|
|
360
361
|
const [touchedState, setTouchedUnwrapped] = React__namespace.useState(false);
|
|
361
362
|
const [dirtyState, setDirtyUnwrapped] = React__namespace.useState(false);
|
|
@@ -364,7 +365,7 @@ const FieldRootInner = /*#__PURE__*/React__namespace.forwardRef(function FieldRo
|
|
|
364
365
|
const dirty = dirtyProp ?? dirtyState;
|
|
365
366
|
const touched = touchedProp ?? touchedState;
|
|
366
367
|
const markedDirtyRef = React__namespace.useRef(false);
|
|
367
|
-
const setDirty =
|
|
368
|
+
const setDirty = useButton.useStableCallback(value => {
|
|
368
369
|
if (dirtyProp !== undefined) {
|
|
369
370
|
return;
|
|
370
371
|
}
|
|
@@ -373,17 +374,17 @@ const FieldRootInner = /*#__PURE__*/React__namespace.forwardRef(function FieldRo
|
|
|
373
374
|
}
|
|
374
375
|
setDirtyUnwrapped(value);
|
|
375
376
|
});
|
|
376
|
-
const setTouched =
|
|
377
|
+
const setTouched = useButton.useStableCallback(value => {
|
|
377
378
|
if (touchedProp !== undefined) {
|
|
378
379
|
return;
|
|
379
380
|
}
|
|
380
381
|
setTouchedUnwrapped(value);
|
|
381
382
|
});
|
|
382
|
-
const shouldValidateOnChange =
|
|
383
|
+
const shouldValidateOnChange = useButton.useStableCallback(() => validationMode === 'onChange' || validationMode === 'onSubmit' && submitAttemptedRef.current);
|
|
383
384
|
const hasFormError = !!name && Object.hasOwn(errors, name) && errors[name] !== undefined;
|
|
384
385
|
const invalid = invalidProp === true || hasFormError;
|
|
385
386
|
const [validityData, setValidityData] = React__namespace.useState({
|
|
386
|
-
state:
|
|
387
|
+
state: useLabel.DEFAULT_VALIDITY_STATE,
|
|
387
388
|
error: '',
|
|
388
389
|
errors: [],
|
|
389
390
|
value: null,
|
|
@@ -442,9 +443,9 @@ const FieldRootInner = /*#__PURE__*/React__namespace.forwardRef(function FieldRo
|
|
|
442
443
|
ref: forwardedRef,
|
|
443
444
|
state,
|
|
444
445
|
props: elementProps,
|
|
445
|
-
stateAttributesMapping:
|
|
446
|
+
stateAttributesMapping: useLabel.fieldValidityMapping
|
|
446
447
|
});
|
|
447
|
-
return /*#__PURE__*/jsxRuntime.jsx(
|
|
448
|
+
return /*#__PURE__*/jsxRuntime.jsx(useLabel.FieldRootContext.Provider, {
|
|
448
449
|
value: contextValue,
|
|
449
450
|
children: element
|
|
450
451
|
});
|
|
@@ -481,12 +482,12 @@ const FieldLabel = /*#__PURE__*/React__namespace.forwardRef(function FieldLabel(
|
|
|
481
482
|
nativeLabel = true,
|
|
482
483
|
...elementProps
|
|
483
484
|
} = componentProps;
|
|
484
|
-
const fieldRootContext =
|
|
485
|
+
const fieldRootContext = useLabel.useFieldRootContext(false);
|
|
485
486
|
const {
|
|
486
487
|
labelId
|
|
487
|
-
} =
|
|
488
|
+
} = useLabel.useLabelableContext();
|
|
488
489
|
const labelRef = React__namespace.useRef(null);
|
|
489
|
-
const labelProps =
|
|
490
|
+
const labelProps = useLabel.useLabel({
|
|
490
491
|
id: labelId ?? idProp,
|
|
491
492
|
native: nativeLabel
|
|
492
493
|
});
|
|
@@ -499,14 +500,14 @@ const FieldLabel = /*#__PURE__*/React__namespace.forwardRef(function FieldLabel(
|
|
|
499
500
|
const isLabelTag = labelRef.current.tagName === 'LABEL';
|
|
500
501
|
if (nativeLabel) {
|
|
501
502
|
if (!isLabelTag) {
|
|
502
|
-
const ownerStackMessage =
|
|
503
|
+
const ownerStackMessage = useButton.SafeReact.captureOwnerStack?.() || '';
|
|
503
504
|
const message = '<Field.Label> expected a <label> element because the `nativeLabel` prop is true. ' + 'Rendering a non-<label> disables native label association, so `htmlFor` will not ' + 'work. Use a real <label> in the `render` prop, or set `nativeLabel` to `false`.';
|
|
504
|
-
|
|
505
|
+
useButton.error(`${message}${ownerStackMessage}`);
|
|
505
506
|
}
|
|
506
507
|
} else if (isLabelTag) {
|
|
507
|
-
const ownerStackMessage =
|
|
508
|
+
const ownerStackMessage = useButton.SafeReact.captureOwnerStack?.() || '';
|
|
508
509
|
const message = '<Field.Label> expected a non-<label> element because the `nativeLabel` prop is false. ' + 'Rendering a <label> assumes native label behavior while Base UI treats it as ' + 'non-native, which can cause unexpected pointer behavior. Use a non-<label> in the ' + '`render` prop, or set `nativeLabel` to `true`.';
|
|
509
|
-
|
|
510
|
+
useButton.error(`${message}${ownerStackMessage}`);
|
|
510
511
|
}
|
|
511
512
|
}, [nativeLabel]);
|
|
512
513
|
}
|
|
@@ -514,15 +515,15 @@ const FieldLabel = /*#__PURE__*/React__namespace.forwardRef(function FieldLabel(
|
|
|
514
515
|
ref: [forwardedRef, labelRef],
|
|
515
516
|
state: fieldRootContext.state,
|
|
516
517
|
props: [labelProps, elementProps],
|
|
517
|
-
stateAttributesMapping:
|
|
518
|
+
stateAttributesMapping: useLabel.fieldValidityMapping
|
|
518
519
|
});
|
|
519
520
|
return element;
|
|
520
521
|
});
|
|
521
522
|
if (process.env.NODE_ENV !== "production") FieldLabel.displayName = "FieldLabel";
|
|
522
523
|
|
|
523
524
|
const stateAttributesMapping = {
|
|
524
|
-
...
|
|
525
|
-
...
|
|
525
|
+
...useLabel.fieldValidityMapping,
|
|
526
|
+
...useButton.transitionStatusMapping
|
|
526
527
|
};
|
|
527
528
|
|
|
528
529
|
/**
|
|
@@ -539,18 +540,18 @@ const FieldError = /*#__PURE__*/React__namespace.forwardRef(function FieldError(
|
|
|
539
540
|
match,
|
|
540
541
|
...elementProps
|
|
541
542
|
} = componentProps;
|
|
542
|
-
const id =
|
|
543
|
+
const id = useButton.useBaseUiId(idProp);
|
|
543
544
|
const {
|
|
544
545
|
validityData,
|
|
545
546
|
state: fieldState,
|
|
546
547
|
name
|
|
547
|
-
} =
|
|
548
|
+
} = useLabel.useFieldRootContext(false);
|
|
548
549
|
const {
|
|
549
550
|
setMessageIds
|
|
550
|
-
} =
|
|
551
|
+
} = useLabel.useLabelableContext();
|
|
551
552
|
const {
|
|
552
553
|
errors
|
|
553
|
-
} =
|
|
554
|
+
} = useLabel.useFormContext();
|
|
554
555
|
const formError = name ? errors[name] : null;
|
|
555
556
|
let rendered = false;
|
|
556
557
|
if (formError || match === true) {
|
|
@@ -564,8 +565,8 @@ const FieldError = /*#__PURE__*/React__namespace.forwardRef(function FieldError(
|
|
|
564
565
|
mounted,
|
|
565
566
|
transitionStatus,
|
|
566
567
|
setMounted
|
|
567
|
-
} =
|
|
568
|
-
|
|
568
|
+
} = useButton.useTransitionStatus(rendered);
|
|
569
|
+
useButton.useIsoLayoutEffect(() => {
|
|
569
570
|
if (!rendered || !id) {
|
|
570
571
|
return undefined;
|
|
571
572
|
}
|
|
@@ -592,7 +593,7 @@ const FieldError = /*#__PURE__*/React__namespace.forwardRef(function FieldError(
|
|
|
592
593
|
setLastRenderedMessageKey(errorKey);
|
|
593
594
|
setLastRenderedMessage(errorMessage);
|
|
594
595
|
}
|
|
595
|
-
|
|
596
|
+
useButton.useOpenChangeComplete({
|
|
596
597
|
open: rendered,
|
|
597
598
|
ref: errorRef,
|
|
598
599
|
onComplete() {
|
|
@@ -635,12 +636,12 @@ const FieldDescription = /*#__PURE__*/React__namespace.forwardRef(function Field
|
|
|
635
636
|
className,
|
|
636
637
|
...elementProps
|
|
637
638
|
} = componentProps;
|
|
638
|
-
const id =
|
|
639
|
-
const fieldRootContext =
|
|
639
|
+
const id = useButton.useBaseUiId(idProp);
|
|
640
|
+
const fieldRootContext = useLabel.useFieldRootContext(false);
|
|
640
641
|
const {
|
|
641
642
|
setMessageIds
|
|
642
|
-
} =
|
|
643
|
-
|
|
643
|
+
} = useLabel.useLabelableContext();
|
|
644
|
+
useButton.useIsoLayoutEffect(() => {
|
|
644
645
|
if (!id) {
|
|
645
646
|
return undefined;
|
|
646
647
|
}
|
|
@@ -655,7 +656,7 @@ const FieldDescription = /*#__PURE__*/React__namespace.forwardRef(function Field
|
|
|
655
656
|
props: [{
|
|
656
657
|
id
|
|
657
658
|
}, elementProps],
|
|
658
|
-
stateAttributesMapping:
|
|
659
|
+
stateAttributesMapping: useLabel.fieldValidityMapping
|
|
659
660
|
});
|
|
660
661
|
return element;
|
|
661
662
|
});
|
|
@@ -6,9 +6,10 @@ import { A as ActivityIndicator } from './ActivityIndicator-es.js';
|
|
|
6
6
|
import { B as Button } from './Button-es.js';
|
|
7
7
|
import { I as Icon } from './Icon-es.js';
|
|
8
8
|
import { f as formatErrorMessage, a as useRefWithInit, m as mergeProps, E as EMPTY_OBJECT, u as useRenderElement } from './useRenderElement-es.js';
|
|
9
|
-
import { u as useBaseUiId, a as useStableCallback, b as useTimeout, S as SafeReact, e as error, t as transitionStatusMapping, c as useTransitionStatus, d as useIsoLayoutEffect, f as useOpenChangeComplete } from './
|
|
10
|
-
import { u as useLabelableContext, L as LabelableContext, a as useFormContext, D as DEFAULT_VALIDITY_STATE, g as getCombinedFieldValidityData, f as fieldValidityMapping, F as FieldRootContext, b as useFieldRootContext, c as useLabel
|
|
9
|
+
import { u as useBaseUiId, a as useStableCallback, b as useTimeout, S as SafeReact, e as error, t as transitionStatusMapping, c as useTransitionStatus, d as useIsoLayoutEffect, f as useOpenChangeComplete } from './useButton-es.js';
|
|
10
|
+
import { u as useLabelableContext, L as LabelableContext, a as useFormContext, D as DEFAULT_VALIDITY_STATE, g as getCombinedFieldValidityData, f as fieldValidityMapping, F as FieldRootContext, b as useFieldRootContext, c as useLabel } from './useLabel-es.js';
|
|
11
11
|
import { jsx } from 'react/jsx-runtime';
|
|
12
|
+
import { N as NumberFieldRoot, a as NumberFieldGroup, b as NumberFieldInput, c as NumberFieldIncrement, d as NumberFieldDecrement } from './NumberFieldInput-es.js';
|
|
12
13
|
|
|
13
14
|
const FieldsetRootContext = /*#__PURE__*/React.createContext({
|
|
14
15
|
legendId: undefined,
|