@jobber/components 8.24.0 → 8.24.2-visual-reg-5479aeb.18

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 (75) hide show
  1. package/ProgressIndicator.d.ts +1 -0
  2. package/{DescriptionList.js → ProgressIndicator.js} +3 -3
  3. package/dist/AtlantisThemeContext/AtlantisThemeContext.d.ts +1 -1
  4. package/dist/AtlantisThemeContext/index.cjs +1 -2
  5. package/dist/AtlantisThemeContext/index.mjs +1 -2
  6. package/dist/AtlantisThemeContext/themeStore.d.ts +11 -0
  7. package/dist/AtlantisThemeContext/types.d.ts +14 -0
  8. package/dist/AtlantisThemeContext/updateTheme.d.ts +1 -1
  9. package/dist/AtlantisThemeContext-cjs.js +58 -17
  10. package/dist/AtlantisThemeContext-es.js +60 -20
  11. package/dist/Avatar-cjs.js +3 -2
  12. package/dist/Avatar-es.js +3 -2
  13. package/dist/BottomSheet-cjs.js +8 -7
  14. package/dist/BottomSheet-es.js +9 -8
  15. package/dist/ComboboxChipRemove-es.js +2 -2
  16. package/dist/DatePicker-es.js +1 -1
  17. package/dist/Dialog/Dialog.d.ts +47 -3
  18. package/dist/Dialog/Dialog.types.d.ts +1 -15
  19. package/dist/Dialog/DialogBottomSheet.d.ts +12 -13
  20. package/dist/Dialog/DialogModal.d.ts +11 -11
  21. package/dist/Dialog/dialogComposableShared.d.ts +13 -3
  22. package/dist/DrawerDescription-cjs.js +4 -97
  23. package/dist/DrawerDescription-es.js +6 -98
  24. package/dist/InputNumberExperimental-cjs.js +21 -25
  25. package/dist/InputNumberExperimental-es.js +22 -26
  26. package/dist/MenuSubmenuTrigger-es.js +3 -3
  27. package/dist/Modal/index.cjs +12 -2
  28. package/dist/Modal/index.mjs +13 -3
  29. package/dist/ProgressBar/ProgressBar.d.ts +7 -0
  30. package/dist/ProgressBar-cjs.js +4 -0
  31. package/dist/ProgressBar-es.js +4 -0
  32. package/dist/ProgressIndicator/ProgressIndicator.d.ts +60 -0
  33. package/dist/ProgressIndicator/index.cjs +9 -0
  34. package/dist/ProgressIndicator/index.d.ts +1 -0
  35. package/dist/ProgressIndicator/index.mjs +3 -0
  36. package/dist/ProgressIndicator-cjs.js +43 -0
  37. package/dist/ProgressIndicator-es.js +41 -0
  38. package/dist/ScrollAreaViewport-cjs.js +2122 -12
  39. package/dist/ScrollAreaViewport-es.js +2118 -13
  40. package/dist/dialogReturnFocus-cjs.js +61 -34
  41. package/dist/dialogReturnFocus-es.js +63 -36
  42. package/dist/docs/AtlantisThemeContext/AtlantisThemeContext.md +41 -0
  43. package/dist/docs/DataTable/DataTable.md +0 -4
  44. package/dist/docs/Dialog/Dialog.md +1006 -0
  45. package/dist/docs/Icon/Icon.md +60 -53
  46. package/dist/docs/InputNumberExperimental/InputNumberExperimental.md +578 -0
  47. package/dist/docs/ProgressBar/ProgressBar.md +9 -0
  48. package/dist/docs/ProgressIndicator/ProgressIndicator.md +105 -0
  49. package/dist/docs/Table/Table.md +1 -3
  50. package/dist/docs/index.md +3 -1
  51. package/dist/index.cjs +3 -4
  52. package/dist/index.d.mts +1 -1
  53. package/dist/index.d.ts +1 -1
  54. package/dist/index.mjs +2 -3
  55. package/dist/isTypedArray-es.js +1 -1
  56. package/dist/primitives/InputNumberExperimental/InputNumberExperimental.d.ts +31 -15
  57. package/dist/primitives/InputNumberExperimental/types.d.ts +0 -1
  58. package/dist/styles.css +172 -51
  59. package/dist/unstyledPrimitives/index.cjs +218 -2230
  60. package/dist/unstyledPrimitives/index.mjs +224 -2236
  61. package/dist/useButton-es.js +1 -1
  62. package/dist/useScrollLock-es.js +2 -2
  63. package/dist/useScrollToActive-es.js +1 -1
  64. package/dist/utils/meta/meta.json +1 -1
  65. package/package.json +7 -7
  66. package/DescriptionList.d.ts +0 -1
  67. package/dist/DescriptionList/DescriptionList.d.ts +0 -11
  68. package/dist/DescriptionList/index.cjs +0 -10
  69. package/dist/DescriptionList/index.d.ts +0 -1
  70. package/dist/DescriptionList/index.mjs +0 -4
  71. package/dist/DescriptionList-cjs.js +0 -14
  72. package/dist/DescriptionList-es.js +0 -12
  73. package/dist/docs/DescriptionList/DescriptionList.md +0 -25
  74. package/dist/updateTheme-cjs.js +0 -20
  75. package/dist/updateTheme-es.js +0 -18
@@ -0,0 +1,105 @@
1
+ # Progress Indicator
2
+
3
+ `ProgressIndicator` communicates **determinate** progress — a known fraction of
4
+ a task that has been completed. Use it when you can express progress as
5
+ `value / max`, such as a multi-step setup wizard or a file upload with a known
6
+ total size.
7
+
8
+ For indeterminate activity (loading time or fraction unknown), use
9
+ [ActivityIndicator](../ActivityIndicator/ActivityIndicator.md) instead.
10
+
11
+ Some great use cases for a `ProgressIndicator` include:
12
+
13
+ * Setup wizards, where we know how many steps the user has completed and how
14
+ many steps remain (use `variation="stepped"`).
15
+ * File uploads, where we know the total file size and how much data has already
16
+ been sent (use the default `variation="continuous"`).
17
+
18
+ ## Design & usage guidelines
19
+
20
+ The default `ProgressIndicator` size is `base` (16px tall) and can be used in
21
+ most cases. The `small` (8px) and `smaller` (4px) sizes should be used when the
22
+ indicator sits inline with text or in tight surface layouts.
23
+
24
+ `ProgressIndicator` always fills the width of its parent. Layout — including
25
+ inline-vs-block placement — is the consumer's responsibility. Wrap the indicator
26
+ with your own flex / `<Stack>` / `<Box>` container, or pass a `className` /
27
+ `style`, to control the surrounding layout.
28
+
29
+ ### Continuous vs. stepped
30
+
31
+ Use `variation="continuous"` (the default) when progress is a smooth value
32
+ between `0` and `max` — for example, a file upload where any percentage is
33
+ meaningful.
34
+
35
+ Use `variation="stepped"` when progress is naturally segmented — for example, a
36
+ multi-step wizard where the user is on step 2 of 5. Stepped renders `max`
37
+ discrete segments and fills the first `value` of them.
38
+
39
+ ## Accessibility
40
+
41
+ `ProgressIndicator` announces itself politely to assistive technology:
42
+
43
+ * `role="progressbar"` marks the root element as a progress bar.
44
+ * `aria-valuenow`, `aria-valuemin`, and `aria-valuemax` reflect the current
45
+ progress so screen readers can announce the value as a percentage or ratio
46
+ appropriately.
47
+ * `aria-label` defaults to a localized-as-English template: `"{value}%"` when
48
+ `max === 100` (or `max` is omitted), and `"{value} / {max}"` otherwise. Pass a
49
+ custom `ariaLabel` to localize or to describe the specific activity (e.g.
50
+ `ariaLabel="Uploading file"`).
51
+
52
+ In the stepped variation, the individual segments are presentational `<div>`s
53
+ with no `role` or `aria-*` attributes. The whole indicator announces once as a
54
+ single progressbar — the outer `aria-valuenow` / `aria-valuemax` already carry
55
+ the progress information.
56
+
57
+ The indicator does not participate in the keyboard tab order.
58
+
59
+ ### Reduced motion
60
+
61
+ The width transition between `value` updates is intentionally **preserved**
62
+ under
63
+ [`prefers-reduced-motion: reduce`](https://developer.mozilla.org/docs/Web/CSS/@media/prefers-reduced-motion).
64
+ The slide between progress values conveys functional information about progress,
65
+ direction, and magnitude — it is exempt under
66
+ [WCAG 2.3.3 ("Animation from Interactions")](https://www.w3.org/WAI/WCAG21/Understanding/animation-from-interactions.html).
67
+ Removing the transition would make progress harder to perceive, not easier.
68
+
69
+ ## Relationship to ProgressBar
70
+
71
+ The legacy [ProgressBar](../ProgressBar/ProgressBar.md) component remains available
72
+ and unchanged. New code should prefer `ProgressIndicator`. A follow-up change is
73
+ expected to consolidate `ProgressBar` onto `ProgressIndicator`.
74
+
75
+ `ProgressIndicator` renames `ProgressBar`'s props to align with HTML5
76
+ `<progress>` semantics and mobile naming:
77
+
78
+ | `ProgressBar` (legacy) | `ProgressIndicator` (new) |
79
+ | ---------------------- | ------------------------- |
80
+ | `currentStep` | `value` |
81
+ | `totalSteps` | `max` |
82
+ | `variation="progress"` | `variation="continuous"` |
83
+ | `UNSAFE_className` | `className` |
84
+ | `UNSAFE_style` | `style` |
85
+
86
+ ## Mobile
87
+
88
+ Mobile (`@jobber/components-native`) has its own `ProgressBar` with a richer
89
+ API. The mobile `ProgressIndicator` counterpart is forthcoming as a separate
90
+ deliverable.
91
+
92
+
93
+ ## Props
94
+
95
+ ### Web
96
+
97
+ | Prop | Type | Required | Default | Description |
98
+ |------|------|----------|---------|-------------|
99
+ | `value` | `number` | Yes | — | Current progress. Expected to be in the range `0..max` inclusive. |
100
+ | `ariaLabel` | `string` | No | — | Accessible label exposed via `aria-label` on the root element. When omitted, defaults to `"{value}%"` when `max === 1... |
101
+ | `className` | `string` | No | — | Custom class name merged onto the root element alongside the component's own classes. |
102
+ | `max` | `number` | No | `100` | Maximum value. Pass `max={4}` with `value={2}` for "2 of 4 steps"; pass `value={75}` for "75%". |
103
+ | `size` | `"base" | "small" | "smaller"` | No | `base` | Visual size. `smaller` renders at 4px tall, `small` at 8px, `base` at 16px. |
104
+ | `style` | `CSSProperties` | No | — | Custom inline styles applied to the root element. |
105
+ | `variation` | `"continuous" | "stepped"` | No | `continuous` | Visual variation: - `continuous` renders a single fill bar driven by `value / max`. - `stepped` renders `max` segment... |
@@ -25,9 +25,7 @@ distinctions in dollar amounts, inventory counts, and other key business data.
25
25
 
26
26
  To list more complex collections of information (such as multi-line content like
27
27
  a detailed property address), you may want to consider the
28
- [List](../List/List.md) component. If you have a small list of information with
29
- a 1:1 label-to-data relationship (for example, the issued and due dates on an
30
- invoice), consider using [DescriptionList](../DescriptionList/DescriptionList.md).
28
+ [List](../List/List.md) component.
31
29
 
32
30
 
33
31
  ## Configuration
@@ -27,7 +27,7 @@
27
27
  [DataTable](./DataTable/DataTable.md)
28
28
  [Datepicker](./Datepicker/Datepicker.md)
29
29
  [DatePickerNotes](./DatePickerNotes/DatePickerNotes.md)
30
- [DescriptionList](./DescriptionList/DescriptionList.md)
30
+ [Dialog](./Dialog/Dialog.md)
31
31
  [disabled-states](./disabled-states/disabled-states.md)
32
32
  [Disclosure](./Disclosure/Disclosure.md)
33
33
  [Divider](./Divider/Divider.md)
@@ -54,6 +54,7 @@
54
54
  [InputFile](./InputFile/InputFile.md)
55
55
  [InputGroup](./InputGroup/InputGroup.md)
56
56
  [InputNumber](./InputNumber/InputNumber.md)
57
+ [InputNumberExperimental](./InputNumberExperimental/InputNumberExperimental.md)
57
58
  [InputPhoneNumber](./InputPhoneNumber/InputPhoneNumber.md)
58
59
  [InputText](./InputText/InputText.md)
59
60
  [InputTime](./InputTime/InputTime.md)
@@ -73,6 +74,7 @@
73
74
  [Popover](./Popover/Popover.md)
74
75
  [product-vocabulary](./product-vocabulary/product-vocabulary.md)
75
76
  [ProgressBar](./ProgressBar/ProgressBar.md)
77
+ [ProgressIndicator](./ProgressIndicator/ProgressIndicator.md)
76
78
  [Radii](./Radii/Radii.md)
77
79
  [RadioGroup](./RadioGroup/RadioGroup.md)
78
80
  [ResponsiveBreakpoint](./ResponsiveBreakpoint/ResponsiveBreakpoint.md)
package/dist/index.cjs CHANGED
@@ -3,7 +3,6 @@
3
3
  var ActivityIndicator = require('./ActivityIndicator-cjs.js');
4
4
  var AtlantisContext = require('./AtlantisContext-cjs.js');
5
5
  var AtlantisThemeContext = require('./AtlantisThemeContext-cjs.js');
6
- var updateTheme = require('./updateTheme-cjs.js');
7
6
  var Autocomplete = require('./Autocomplete-cjs.js');
8
7
  var Avatar = require('./Avatar-cjs.js');
9
8
  var Banner = require('./Banner-cjs.js');
@@ -33,7 +32,6 @@ require('@jobber/hooks');
33
32
  require('./DataTableTable-cjs.js');
34
33
  var reactTable = require('@tanstack/react-table');
35
34
  var DatePicker = require('./DatePicker-cjs.js');
36
- var DescriptionList = require('./DescriptionList-cjs.js');
37
35
  var dialogReturnFocus = require('./dialogReturnFocus-cjs.js');
38
36
  var Disclosure = require('./Disclosure-cjs.js');
39
37
  var Divider = require('./Divider-cjs.js');
@@ -70,6 +68,7 @@ var MultiSelect = require('./MultiSelect-cjs.js');
70
68
  var Page = require('./Page-cjs.js');
71
69
  var Popover = require('./Popover-cjs.js');
72
70
  var ProgressBar = require('./ProgressBar-cjs.js');
71
+ var ProgressIndicator = require('./ProgressIndicator-cjs.js');
73
72
  var RadioGroup = require('./RadioGroup-cjs.js');
74
73
  var ResponsiveSwitcher = require('./ResponsiveSwitcher-cjs.js');
75
74
  var LegacySelect = require('./LegacySelect-cjs.js');
@@ -214,8 +213,8 @@ exports.useAtlantisContext = AtlantisContext.useAtlantisContext;
214
213
  exports.AtlantisThemeContextProvider = AtlantisThemeContext.AtlantisThemeContextProvider;
215
214
  exports.THEME_CHANGE_EVENT = AtlantisThemeContext.THEME_CHANGE_EVENT;
216
215
  exports.atlantisThemeContextDefaultValues = AtlantisThemeContext.atlantisThemeContextDefaultValues;
216
+ exports.updateTheme = AtlantisThemeContext.updateTheme;
217
217
  exports.useAtlantisTheme = AtlantisThemeContext.useAtlantisTheme;
218
- exports.updateTheme = updateTheme.updateTheme;
219
218
  exports.Autocomplete = Autocomplete.Autocomplete;
220
219
  exports.Avatar = Avatar.Avatar;
221
220
  exports.Banner = Banner.Banner;
@@ -248,7 +247,6 @@ Object.defineProperty(exports, "createColumnHelper", {
248
247
  get: function () { return reactTable.createColumnHelper; }
249
248
  });
250
249
  exports.DatePicker = DatePicker.DatePicker;
251
- exports.DescriptionList = DescriptionList.DescriptionList;
252
250
  exports.Dialog = dialogReturnFocus.Dialog;
253
251
  exports.getDialogReturnFocus = dialogReturnFocus.getDialogReturnFocus;
254
252
  exports.getFirstFocusableWithin = dialogReturnFocus.getFirstFocusableWithin;
@@ -316,6 +314,7 @@ exports.Popover = Popover.Popover;
316
314
  exports.usePopoverContext = Popover.usePopoverContext;
317
315
  exports.usePopoverStyles = Popover.usePopoverStyles;
318
316
  exports.ProgressBar = ProgressBar.ProgressBar;
317
+ exports.ProgressIndicator = ProgressIndicator.ProgressIndicator;
319
318
  exports.RadioGroup = RadioGroup.RadioGroup;
320
319
  exports.RadioOption = RadioGroup.RadioOption;
321
320
  exports.ResponsiveSwitcher = ResponsiveSwitcher.ResponsiveSwitcher;
package/dist/index.d.mts CHANGED
@@ -23,7 +23,6 @@ export * from "./DataDump";
23
23
  export * from "./DataList";
24
24
  export { DataTable, createColumnHelper } from "./DataTable";
25
25
  export * from "./DatePicker";
26
- export * from "./DescriptionList";
27
26
  export * from "./Dialog";
28
27
  export * from "./Disclosure";
29
28
  export * from "./Divider";
@@ -60,6 +59,7 @@ export * from "./MultiSelect";
60
59
  export * from "./Page";
61
60
  export * from "./Popover";
62
61
  export * from "./ProgressBar";
62
+ export * from "./ProgressIndicator";
63
63
  export * from "./RadioGroup";
64
64
  export * from "./ResponsiveSwitcher";
65
65
  export * from "./LegacySelect";
package/dist/index.d.ts CHANGED
@@ -23,7 +23,6 @@ export * from "./DataDump";
23
23
  export * from "./DataList";
24
24
  export { DataTable, createColumnHelper } from "./DataTable";
25
25
  export * from "./DatePicker";
26
- export * from "./DescriptionList";
27
26
  export * from "./Dialog";
28
27
  export * from "./Disclosure";
29
28
  export * from "./Divider";
@@ -60,6 +59,7 @@ export * from "./MultiSelect";
60
59
  export * from "./Page";
61
60
  export * from "./Popover";
62
61
  export * from "./ProgressBar";
62
+ export * from "./ProgressIndicator";
63
63
  export * from "./RadioGroup";
64
64
  export * from "./ResponsiveSwitcher";
65
65
  export * from "./LegacySelect";
package/dist/index.mjs CHANGED
@@ -1,7 +1,6 @@
1
1
  export { A as ActivityIndicator } from './ActivityIndicator-es.js';
2
2
  export { A as AtlantisContext, a as atlantisContextDefaultValues, u as useAtlantisContext } from './AtlantisContext-es.js';
3
- export { A as AtlantisThemeContextProvider, T as THEME_CHANGE_EVENT, a as atlantisThemeContextDefaultValues, u as useAtlantisTheme } from './AtlantisThemeContext-es.js';
4
- export { u as updateTheme } from './updateTheme-es.js';
3
+ export { A as AtlantisThemeContextProvider, T as THEME_CHANGE_EVENT, a as atlantisThemeContextDefaultValues, b as updateTheme, u as useAtlantisTheme } from './AtlantisThemeContext-es.js';
5
4
  export { A as Autocomplete } from './Autocomplete-es.js';
6
5
  export { A as Avatar } from './Avatar-es.js';
7
6
  export { B as Banner } from './Banner-es.js';
@@ -31,7 +30,6 @@ import '@jobber/hooks';
31
30
  import './DataTableTable-es.js';
32
31
  export { createColumnHelper } from '@tanstack/react-table';
33
32
  export { D as DatePicker } from './DatePicker-es.js';
34
- export { D as DescriptionList } from './DescriptionList-es.js';
35
33
  export { D as Dialog, g as getDialogReturnFocus, a as getFirstFocusableWithin } from './dialogReturnFocus-es.js';
36
34
  export { D as Disclosure } from './Disclosure-es.js';
37
35
  export { D as Divider } from './Divider-es.js';
@@ -68,6 +66,7 @@ export { M as MultiSelect } from './MultiSelect-es.js';
68
66
  export { P as Page } from './Page-es.js';
69
67
  export { P as Popover, u as usePopoverContext, a as usePopoverStyles } from './Popover-es.js';
70
68
  export { P as ProgressBar } from './ProgressBar-es.js';
69
+ export { P as ProgressIndicator } from './ProgressIndicator-es.js';
71
70
  export { R as RadioGroup, a as RadioOption } from './RadioGroup-es.js';
72
71
  export { R as ResponsiveSwitcher } from './ResponsiveSwitcher-es.js';
73
72
  export { L as LegacySelect, S as Option } from './LegacySelect-es.js';
@@ -586,4 +586,4 @@ var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedA
586
586
 
587
587
  var isTypedArray_1 = isTypedArray;
588
588
 
589
- export { _isPrototype as _, isArray_1 as a, isArrayLike_1 as b, isBufferExports as c, isTypedArray_1 as d, _overArg as e, _getNative as f, _Map as g, _toSource as h, isArguments_1 as i, isFunction_1 as j, _baseUnary as k, isLength_1 as l, _nodeUtilExports as m };
589
+ export { _isPrototype as _, isArray_1 as a, isArrayLike_1 as b, isBufferExports as c, isTypedArray_1 as d, _overArg as e, _getNative as f, _Map as g, _toSource as h, isArguments_1 as i, _baseUnary as j, isFunction_1 as k, isLength_1 as l, _nodeUtilExports as m };
@@ -1,5 +1,12 @@
1
+ import type { Ref } from "react";
1
2
  import React from "react";
2
3
  import type { InputNumberExperimentalAffixCompoundProps, InputNumberExperimentalDescriptionProps, InputNumberExperimentalErrorProps, InputNumberExperimentalFooterProps, InputNumberExperimentalGroupProps, InputNumberExperimentalInputProps, InputNumberExperimentalLabelProps, InputNumberExperimentalLoadingProps, InputNumberExperimentalProps, InputNumberExperimentalRef, InputNumberExperimentalStepButtonProps, InputNumberExperimentalStepperProps, InputNumberExperimentalWrapperProps } from "./types";
4
+ declare function InputNumberExperimentalWrapper({ ref, ...props }: InputNumberExperimentalWrapperProps & {
5
+ readonly ref?: Ref<InputNumberExperimentalRef>;
6
+ }): React.JSX.Element;
7
+ declare namespace InputNumberExperimentalWrapper {
8
+ var displayName: string;
9
+ }
3
10
  declare function InputNumberExperimentalGroup({ children, className, style, }: InputNumberExperimentalGroupProps): React.JSX.Element;
4
11
  declare namespace InputNumberExperimentalGroup {
5
12
  var displayName: string;
@@ -44,18 +51,27 @@ declare function InputNumberExperimentalAffixCompound({ variation, label, icon,
44
51
  declare namespace InputNumberExperimentalAffixCompound {
45
52
  var displayName: string;
46
53
  }
47
- export declare const InputNumberExperimental: React.ForwardRefExoticComponent<InputNumberExperimentalProps & React.RefAttributes<InputNumberExperimentalRef>> & {
48
- Wrapper: React.ForwardRefExoticComponent<InputNumberExperimentalWrapperProps & React.RefAttributes<InputNumberExperimentalRef>>;
49
- Group: typeof InputNumberExperimentalGroup;
50
- Footer: typeof InputNumberExperimentalFooter;
51
- Input: typeof InputNumberExperimentalInput;
52
- Label: typeof InputNumberExperimentalLabel;
53
- Description: typeof InputNumberExperimentalDescription;
54
- Error: typeof InputNumberExperimentalError;
55
- Loading: typeof InputNumberExperimentalLoading;
56
- Stepper: typeof InputNumberExperimentalStepper;
57
- Increment: typeof InputNumberExperimentalIncrement;
58
- Decrement: typeof InputNumberExperimentalDecrement;
59
- Affix: typeof InputNumberExperimentalAffixCompound;
60
- };
61
- export type { InputNumberExperimentalAffix, InputNumberExperimentalProps, InputNumberExperimentalRef, InputNumberExperimentalSuffix, InputNumberExperimentalSuffixProp, InputNumberExperimentalWrapperProps, } from "./types";
54
+ /**
55
+ * Sugar layer: composes the parts from props. This is the same composition a
56
+ * consumer would write by hand with `<InputNumberExperimental.Wrapper>` and the
57
+ * parts — to customize a single piece, copy this tree and swap that part.
58
+ */
59
+ declare function InputNumberExperimental({ ref, ...props }: InputNumberExperimentalProps & {
60
+ readonly ref?: Ref<InputNumberExperimentalRef>;
61
+ }): React.JSX.Element;
62
+ declare namespace InputNumberExperimental {
63
+ var displayName: string;
64
+ var Wrapper: typeof InputNumberExperimentalWrapper;
65
+ var Group: typeof InputNumberExperimentalGroup;
66
+ var Footer: typeof InputNumberExperimentalFooter;
67
+ var Input: typeof InputNumberExperimentalInput;
68
+ var Label: typeof InputNumberExperimentalLabel;
69
+ var Description: typeof InputNumberExperimentalDescription;
70
+ var Error: typeof InputNumberExperimentalError;
71
+ var Loading: typeof InputNumberExperimentalLoading;
72
+ var Stepper: typeof InputNumberExperimentalStepper;
73
+ var Increment: typeof InputNumberExperimentalIncrement;
74
+ var Decrement: typeof InputNumberExperimentalDecrement;
75
+ var Affix: typeof InputNumberExperimentalAffixCompound;
76
+ }
77
+ export { InputNumberExperimental };
@@ -63,7 +63,6 @@ export interface InputNumberExperimentalWrapperProps extends InputNumberExperime
63
63
  */
64
64
  readonly loading?: boolean;
65
65
  readonly max?: number;
66
- readonly maxLength?: number;
67
66
  readonly min?: number;
68
67
  readonly name?: string;
69
68
  readonly onBlur?: (event?: FocusEvent<HTMLInputElement>) => void;
package/dist/styles.css CHANGED
@@ -4055,7 +4055,7 @@ a._7BLGtYNuJOU-.zgRx3ehZ2z8-:hover {
4055
4055
  */
4056
4056
  }
4057
4057
 
4058
- .Qf3IFhKJwQ0-:has(~ ._868PDAA3U2M-[data-nested-drawer-open]) {
4058
+ .Qf3IFhKJwQ0-:has(~ .U069n8h0urk- ._868PDAA3U2M-[data-nested-drawer-open]) {
4059
4059
  background-color: transparent;
4060
4060
  }
4061
4061
 
@@ -4154,6 +4154,24 @@ a._7BLGtYNuJOU-.zgRx3ehZ2z8-:hover {
4154
4154
  }
4155
4155
  }
4156
4156
 
4157
+ /*
4158
+ * Positioning container for the popup, spanning the whole screen. Base UI's
4159
+ * Drawer expects the popup to render within a viewport (it enables swipe
4160
+ * handling and touch scroll locking). The popup positions itself (fixed, pinned
4161
+ * to the bottom); the viewport only establishes the full-screen area above the
4162
+ * backdrop.
4163
+ */
4164
+
4165
+ .U069n8h0urk- {
4166
+ position: fixed;
4167
+ top: 0;
4168
+ right: 0;
4169
+ bottom: 0;
4170
+ left: 0;
4171
+ z-index: 1001;
4172
+ z-index: var(--elevation-modal);
4173
+ }
4174
+
4157
4175
  .yL7--3ni8BM- {
4158
4176
  display: -ms-flexbox;
4159
4177
  display: flex;
@@ -4176,6 +4194,11 @@ a._7BLGtYNuJOU-.zgRx3ehZ2z8-:hover {
4176
4194
  line-height: 0;
4177
4195
  }
4178
4196
 
4197
+ .yL7--3ni8BM- p {
4198
+ margin-top: 1px;
4199
+ margin-top: var(--space-minuscule);
4200
+ }
4201
+
4179
4202
  .qWsLxPjCBI8- {
4180
4203
  display: inline-block;
4181
4204
  margin-bottom: 4px;
@@ -10365,47 +10388,6 @@ h2.react-datepicker__current-month {
10365
10388
  color: var(--color-heading);
10366
10389
  }
10367
10390
 
10368
- .BkruJ2-bRWg- {
10369
- margin: 0;
10370
- }
10371
-
10372
- .tpCvfS7kyDQ- {
10373
- display: -ms-flexbox;
10374
- display: flex;
10375
- -ms-flex-wrap: wrap;
10376
- flex-wrap: wrap;
10377
- padding: 8px 0;
10378
- padding: var(--space-small) 0;
10379
- border-bottom: 1px solid hsl(200, 13%, 87%);
10380
- border-bottom: var(--border-base) solid var(--color-border);
10381
- }
10382
-
10383
- .tpCvfS7kyDQ-:first-child {
10384
- padding-top: 0;
10385
- }
10386
-
10387
- .tpCvfS7kyDQ-:last-child {
10388
- padding-bottom: 0;
10389
- border-bottom: none;
10390
- }
10391
-
10392
- .tpCvfS7kyDQ- dd {
10393
- min-width: calc(16px * 7.5);
10394
- min-width: calc(var(--base-unit) * 7.5);
10395
- box-sizing: border-box;
10396
- padding-right: 8px;
10397
- padding-right: var(--space-small);
10398
- -webkit-margin-start: 0;
10399
- margin-left: 0;
10400
- -ms-flex: 1 1 60%;
10401
- flex: 1 1 60%;
10402
- }
10403
-
10404
- .tpCvfS7kyDQ- dt {
10405
- -ms-flex: 1 1 40%;
10406
- flex: 1 1 40%;
10407
- }
10408
-
10409
10391
  /* Dialog Sizes */
10410
10392
  .uYYyCR3l6E8- {
10411
10393
  --dialog-popup-max-width: 440px;
@@ -10417,8 +10399,14 @@ h2.react-datepicker__current-month {
10417
10399
  --dialog-popup-max-width: 1032px;
10418
10400
  }
10419
10401
  .nJoCr8oWJ7w- {
10420
- --dialog-popup-width: 100vw;
10421
- --dialog-popup-max-width: 100vw;
10402
+ /* Use 100% (not 100vw) so the popup fills the viewport's scrollable content
10403
+ box rather than the full vw since the vertical scrollbar takes up layout space */
10404
+ --dialog-popup-width: 100%;
10405
+ --dialog-popup-max-width: 100%;
10406
+ /* Always cap the popup to the viewport height for full-screen, regardless of
10407
+ whether any region is sticky. Without this, the "nothing-sticky" scroll
10408
+ composition will not be able to scroll. */
10409
+ --dialog-popup-max-height: 100dvh;
10422
10410
  --dialog-popup-min-height: 100dvh;
10423
10411
  /* No margins full screen — the viewport also drops its padding-block for
10424
10412
  fullScreen (below) so the popup sits flush against every edge. Zeroing the
@@ -10492,12 +10480,8 @@ h2.react-datepicker__current-month {
10492
10480
  padding: 0 24px 24px;
10493
10481
  padding: 0 var(--space-large) var(--space-large);
10494
10482
  }
10495
- /* Slide the bottom sheet up from the bottom on open/close. */
10483
+ /* Slide the sheet up on open, down on close. */
10496
10484
  .vmcZRwOcNMo- {
10497
- -webkit-transform: translateY(0px);
10498
- -webkit-transform: translateY(var(--drawer-swipe-movement-y, 0px));
10499
- transform: translateY(0px);
10500
- transform: translateY(var(--drawer-swipe-movement-y, 0px));
10501
10485
  transition: -webkit-transform 200ms ease;
10502
10486
  transition: -webkit-transform var(--timing-base) ease;
10503
10487
  transition: transform 200ms ease;
@@ -10510,12 +10494,44 @@ h2.react-datepicker__current-month {
10510
10494
  -webkit-transform: translateY(100%);
10511
10495
  transform: translateY(100%);
10512
10496
  }
10497
+ /*
10498
+ * Only transform the sheet mid-swipe, never while it's just sitting open.
10499
+ * Why it matters: any transform on this element makes its `position: fixed`
10500
+ * children size themselves to the sheet instead of the screen. FilterPicker's
10501
+ * click-away layer is one of those fixed, full-screen children — with a
10502
+ * transform here it shrinks to the sheet's box, so tapping the backdrop misses
10503
+ * it, hits the sheet, and closes the whole sheet instead of just the picker.
10504
+ * A swipe is the one time we need the transform, and there's no open picker to
10505
+ * break then. base-ui adds `data-swiping` and updates the movement variable
10506
+ * while a swipe is happening.
10507
+ */
10508
+ .vmcZRwOcNMo-[data-swiping] {
10509
+ -webkit-transform: translateY(0px);
10510
+ -webkit-transform: translateY(var(--drawer-swipe-movement-y, 0px));
10511
+ transform: translateY(0px);
10512
+ transform: translateY(var(--drawer-swipe-movement-y, 0px));
10513
+ }
10513
10514
  /* Full-screen bottom sheet */
10514
10515
  .vmcZRwOcNMo-[data-size="fullScreen"] {
10515
10516
  height: 100dvh;
10516
10517
  max-height: 100dvh;
10517
10518
  border-radius: 0;
10518
10519
  }
10520
+ /* The sheet content renders inside a `Drawer.Content` region (`data-drawer-content`,
10521
+ swipe-ignored so a nested floater can catch an outside press). It's a direct
10522
+ child of the popup, so pass the popup's flex column through it — otherwise the
10523
+ Header/ScrollArea/Footer no longer flex against the popup and the scroll region
10524
+ can't fill/scroll (most visibly on fullScreen at 100dvh). */
10525
+ .vmcZRwOcNMo- > [data-drawer-content] {
10526
+ display: -ms-flexbox;
10527
+ display: flex;
10528
+ -ms-flex: 1 1 auto;
10529
+ flex: 1 1 auto;
10530
+ min-height: 0;
10531
+ -ms-flex-direction: column;
10532
+ flex-direction: column;
10533
+ overflow: hidden;
10534
+ }
10519
10535
  /* Scroll divider — shown on a sticky Header/Footer only while the scroll region
10520
10536
  actually overflows (BaseUI sets `data-has-overflow-y` on the ScrollArea root
10521
10537
  when its content overflows). */
@@ -10584,8 +10600,12 @@ h2.react-datepicker__current-month {
10584
10600
  background-color: transparent;
10585
10601
  backdrop-filter: none;
10586
10602
  }
10587
- /* Bottom sheet backdrop */
10588
- [data-testid="ATL-BottomSheet-Backdrop"]:has(~ [data-dialog-variant="sheet"]) {
10603
+ /* Bottom sheet backdrop. The sheet popup (`data-dialog-variant="sheet"`) renders
10604
+ inside the drawer viewport, which is the backdrop's following sibling, so
10605
+ target the viewport by its testid then match the sheet popup within it. */
10606
+ [data-testid="ATL-BottomSheet-Backdrop"]:has(
10607
+ ~ [data-testid="ATL-BottomSheet-Viewport"] [data-dialog-variant="sheet"]
10608
+ ) {
10589
10609
  background-color: rgba(121, 119, 114, 0.48);
10590
10610
  backdrop-filter: blur(2px);
10591
10611
  }
@@ -13104,6 +13124,107 @@ input.oOrjwubmsVA- {
13104
13124
  transform: rotate(-45deg);
13105
13125
  }
13106
13126
 
13127
+ /*
13128
+ * ProgressIndicator
13129
+ *
13130
+ * Determinate progress, rendered as a horizontal bar. The component supports
13131
+ * two variations:
13132
+ *
13133
+ * - `continuous` — a single fill element whose width is driven by the
13134
+ * CSS-registered custom property `--progress-indicator--fill-amount` (a <number> from
13135
+ * 0 to 100). The browser interpolates the number during a
13136
+ * `transition: width var(--timing-base) ease-out`.
13137
+ * - `stepped` — N presentational segment children, the first `value` of
13138
+ * which are filled. The outer shell is the flex container.
13139
+ *
13140
+ * Colour tokens mirror ActivityIndicator: fill / filled segments use
13141
+ * --color-interactive--subtle; track / empty segments use
13142
+ * --color-surface--active.
13143
+ *
13144
+ * The width transition is intentionally preserved under
13145
+ * prefers-reduced-motion: reduce because the slide between progress values
13146
+ * conveys functional information about progress (WCAG 2.3.3, "Animation from
13147
+ * Interactions"). Removing it would make progress harder to perceive, not
13148
+ * easier.
13149
+ */
13150
+
13151
+ /*
13152
+ * Register --progress-indicator--fill-amount so the browser knows it is a real <number>
13153
+ * and can interpolate between values during the width transition. Without
13154
+ * this @property declaration the custom property is treated as an opaque
13155
+ * string and the transition would snap rather than animate smoothly.
13156
+ */
13157
+
13158
+ @property --progress-indicator--fill-amount {
13159
+ syntax: "<number>";
13160
+ inherits: false;
13161
+ initial-value: 0;
13162
+ }
13163
+
13164
+ .-TBRV1VUsfc- {
13165
+ --progress-indicator--height: 16px;
13166
+
13167
+ width: 100%;
13168
+ height: 16px;
13169
+ height: var(--progress-indicator--height);
13170
+ }
13171
+
13172
+ .MStgN8AhV3s- {
13173
+ --progress-indicator--height: 4px;
13174
+ }
13175
+
13176
+ .iAlYWHjs6JQ- {
13177
+ --progress-indicator--height: 8px;
13178
+ }
13179
+
13180
+ .WWEzA1-OjSM- {
13181
+ --progress-indicator--height: 16px;
13182
+ }
13183
+
13184
+ /* Continuous: the indicator IS the track; the .fill child sits on top. */
13185
+
13186
+ .r9ShSj58V6w- {
13187
+ border-radius: calc(var(--progress-indicator--height) / 2);
13188
+ overflow: hidden;
13189
+ background-color: hsl(40, 9%, 85%);
13190
+ background-color: var(--color-surface--active);
13191
+ }
13192
+
13193
+ .Hsuq8zT-KzY- {
13194
+ width: calc(var(--progress-indicator--fill-amount) * 1%);
13195
+ height: 100%;
13196
+ border-radius: inherit;
13197
+ background-color: hsl(198, 35%, 21%);
13198
+ background-color: var(--color-interactive--subtle);
13199
+ transition: width 200ms ease-out;
13200
+ transition: width var(--timing-base) ease-out;
13201
+ }
13202
+
13203
+ /* Stepped: the indicator IS the flex container; segments are direct children. */
13204
+
13205
+ .FB1e9bL90tI- {
13206
+ display: -ms-flexbox;
13207
+ display: flex;
13208
+ -ms-flex-direction: row;
13209
+ flex-direction: row;
13210
+ gap: 8px;
13211
+ gap: var(--space-small);
13212
+ }
13213
+
13214
+ .bpLIiDGlsCs- {
13215
+ height: 100%;
13216
+ border-radius: calc(var(--progress-indicator--height) / 2);
13217
+ background-color: hsl(40, 9%, 85%);
13218
+ background-color: var(--color-surface--active);
13219
+ -ms-flex: 1 1 0px;
13220
+ flex: 1 1 0;
13221
+ }
13222
+
13223
+ .bpLIiDGlsCs-._0FxmImvY-04- {
13224
+ background-color: hsl(198, 35%, 21%);
13225
+ background-color: var(--color-interactive--subtle);
13226
+ }
13227
+
13107
13228
  .KZfSK2vhTyI- {
13108
13229
  --radio--checked-thickness: 6px;
13109
13230
  --radio-diameter: 20px;