@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,278 +0,0 @@
1
- 'use strict';
2
-
3
- var React = require('react');
4
- var useButton = require('./useButton-cjs.js');
5
- var useRenderElement = require('./useRenderElement-cjs.js');
6
- var floatingUi_utils_dom = require('./floating-ui.utils.dom-cjs.js');
7
-
8
- function _interopNamespaceDefault(e) {
9
- var n = Object.create(null);
10
- if (e) {
11
- Object.keys(e).forEach(function (k) {
12
- if (k !== 'default') {
13
- var d = Object.getOwnPropertyDescriptor(e, k);
14
- Object.defineProperty(n, k, d.get ? d : {
15
- enumerable: true,
16
- get: function () { return e[k]; }
17
- });
18
- }
19
- });
20
- }
21
- n.default = e;
22
- return Object.freeze(n);
23
- }
24
-
25
- var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
26
-
27
- let FieldControlDataAttributes = /*#__PURE__*/function (FieldControlDataAttributes) {
28
- /**
29
- * Present when the field is disabled.
30
- */
31
- FieldControlDataAttributes["disabled"] = "data-disabled";
32
- /**
33
- * Present when the field is in a valid state.
34
- */
35
- FieldControlDataAttributes["valid"] = "data-valid";
36
- /**
37
- * Present when the field is in an invalid state.
38
- */
39
- FieldControlDataAttributes["invalid"] = "data-invalid";
40
- /**
41
- * Present when the field has been touched.
42
- */
43
- FieldControlDataAttributes["touched"] = "data-touched";
44
- /**
45
- * Present when the field's value has changed.
46
- */
47
- FieldControlDataAttributes["dirty"] = "data-dirty";
48
- /**
49
- * Present when the field is filled.
50
- */
51
- FieldControlDataAttributes["filled"] = "data-filled";
52
- /**
53
- * Present when the field control is focused.
54
- */
55
- FieldControlDataAttributes["focused"] = "data-focused";
56
- return FieldControlDataAttributes;
57
- }({});
58
-
59
- const DEFAULT_VALIDITY_STATE = {
60
- badInput: false,
61
- customError: false,
62
- patternMismatch: false,
63
- rangeOverflow: false,
64
- rangeUnderflow: false,
65
- stepMismatch: false,
66
- tooLong: false,
67
- tooShort: false,
68
- typeMismatch: false,
69
- valid: null,
70
- valueMissing: false
71
- };
72
- const DEFAULT_FIELD_STATE_ATTRIBUTES = {
73
- valid: null,
74
- touched: false,
75
- dirty: false,
76
- filled: false,
77
- focused: false
78
- };
79
- const DEFAULT_FIELD_ROOT_STATE = {
80
- disabled: false,
81
- ...DEFAULT_FIELD_STATE_ATTRIBUTES
82
- };
83
- const fieldValidityMapping = {
84
- valid(value) {
85
- if (value === null) {
86
- return null;
87
- }
88
- if (value) {
89
- return {
90
- [FieldControlDataAttributes.valid]: ''
91
- };
92
- }
93
- return {
94
- [FieldControlDataAttributes.invalid]: ''
95
- };
96
- }
97
- };
98
-
99
- const DEFAULT_FIELD_ROOT_CONTEXT = {
100
- invalid: undefined,
101
- name: undefined,
102
- validityData: {
103
- state: DEFAULT_VALIDITY_STATE,
104
- errors: [],
105
- error: '',
106
- value: '',
107
- initialValue: null
108
- },
109
- setValidityData: useRenderElement.NOOP,
110
- disabled: undefined,
111
- touched: DEFAULT_FIELD_STATE_ATTRIBUTES.touched,
112
- setTouched: useRenderElement.NOOP,
113
- dirty: DEFAULT_FIELD_STATE_ATTRIBUTES.dirty,
114
- setDirty: useRenderElement.NOOP,
115
- filled: DEFAULT_FIELD_STATE_ATTRIBUTES.filled,
116
- setFilled: useRenderElement.NOOP,
117
- focused: DEFAULT_FIELD_STATE_ATTRIBUTES.focused,
118
- setFocused: useRenderElement.NOOP,
119
- validate: () => null,
120
- validationMode: 'onSubmit',
121
- validationDebounceTime: 0,
122
- shouldValidateOnChange: () => false,
123
- state: DEFAULT_FIELD_ROOT_STATE,
124
- markedDirtyRef: {
125
- current: false
126
- },
127
- registerFieldControl: useRenderElement.NOOP,
128
- validation: {
129
- getValidationProps: (_disabled, props = useRenderElement.EMPTY_OBJECT) => props,
130
- inputRef: {
131
- current: null
132
- },
133
- registerInput: useRenderElement.NOOP,
134
- commit: async () => {},
135
- change: useRenderElement.NOOP
136
- }
137
- };
138
- const FieldRootContext = /*#__PURE__*/React__namespace.createContext(DEFAULT_FIELD_ROOT_CONTEXT);
139
- if (process.env.NODE_ENV !== "production") FieldRootContext.displayName = "FieldRootContext";
140
- function useFieldRootContext(optional = true) {
141
- const context = React__namespace.useContext(FieldRootContext);
142
- if (context.setValidityData === useRenderElement.NOOP && !optional) {
143
- throw new Error(process.env.NODE_ENV !== "production" ? 'Base UI: FieldRootContext is missing. Field parts must be placed within <Field.Root>.' : useRenderElement.formatErrorMessage(28));
144
- }
145
- return context;
146
- }
147
-
148
- function useRegisterFieldControl(controlRef, id, value, getFormValueOverride, enabled = true, name) {
149
- const {
150
- registerFieldControl
151
- } = useFieldRootContext();
152
- const sourceRef = React__namespace.useRef(null);
153
- if (!sourceRef.current) {
154
- sourceRef.current = Symbol();
155
- }
156
- useButton.useIsoLayoutEffect(() => {
157
- const source = sourceRef.current;
158
- if (!source || !enabled) {
159
- return undefined;
160
- }
161
- const registration = {
162
- controlRef,
163
- getValue: getFormValueOverride,
164
- id,
165
- name,
166
- value
167
- };
168
- registerFieldControl(source, registration);
169
- return () => {
170
- registerFieldControl(source, undefined);
171
- };
172
- }, [controlRef, enabled, getFormValueOverride, id, name, registerFieldControl, value]);
173
- }
174
-
175
- const FormContext = /*#__PURE__*/React__namespace.createContext({
176
- formRef: {
177
- current: {
178
- fields: new Map()
179
- }
180
- },
181
- errors: {},
182
- clearErrors: useRenderElement.NOOP,
183
- validationMode: 'onSubmit',
184
- submitAttemptedRef: {
185
- current: false
186
- }
187
- });
188
- if (process.env.NODE_ENV !== "production") FormContext.displayName = "FormContext";
189
- function useFormContext() {
190
- return React__namespace.useContext(FormContext);
191
- }
192
-
193
- /**
194
- * A context for providing [labelable elements](https://html.spec.whatwg.org/multipage/forms.html#category-label)\
195
- * with an accessible name (label) and description.
196
- */
197
- const LabelableContext = /*#__PURE__*/React__namespace.createContext({
198
- controlId: undefined,
199
- registerControlId: useRenderElement.NOOP,
200
- labelId: undefined,
201
- setLabelId: useRenderElement.NOOP,
202
- messageIds: [],
203
- setMessageIds: useRenderElement.NOOP,
204
- getDescriptionProps: externalProps => externalProps
205
- });
206
- if (process.env.NODE_ENV !== "production") LabelableContext.displayName = "LabelableContext";
207
- function useLabelableContext() {
208
- return React__namespace.useContext(LabelableContext);
209
- }
210
-
211
- function useLabelableId(params = {}) {
212
- const {
213
- id,
214
- implicit = false,
215
- controlRef
216
- } = params;
217
- const {
218
- controlId,
219
- registerControlId
220
- } = useLabelableContext();
221
- const defaultId = useButton.useBaseUiId(id);
222
- const controlIdForEffect = implicit ? controlId : undefined;
223
- const controlSourceRef = useRenderElement.useRefWithInit(() => Symbol('labelable-control'));
224
- const hasRegisteredRef = React__namespace.useRef(false);
225
- const hadExplicitIdRef = React__namespace.useRef(id != null);
226
- const unregisterControlId = useButton.useStableCallback(() => {
227
- if (!hasRegisteredRef.current || registerControlId === useRenderElement.NOOP) {
228
- return;
229
- }
230
- hasRegisteredRef.current = false;
231
- registerControlId(controlSourceRef.current, undefined);
232
- });
233
- useButton.useIsoLayoutEffect(() => {
234
- if (registerControlId === useRenderElement.NOOP) {
235
- return undefined;
236
- }
237
- let nextId;
238
- if (implicit) {
239
- const elem = controlRef?.current;
240
- if (floatingUi_utils_dom.isElement(elem) && elem.closest('label') != null) {
241
- nextId = id ?? null;
242
- } else {
243
- nextId = controlIdForEffect ?? defaultId;
244
- }
245
- } else if (id != null) {
246
- hadExplicitIdRef.current = true;
247
- nextId = id;
248
- } else if (hadExplicitIdRef.current) {
249
- nextId = defaultId;
250
- } else {
251
- unregisterControlId();
252
- return undefined;
253
- }
254
- if (nextId === undefined) {
255
- unregisterControlId();
256
- return undefined;
257
- }
258
- hasRegisteredRef.current = true;
259
- registerControlId(controlSourceRef.current, nextId);
260
- return undefined;
261
- }, [id, controlRef, controlIdForEffect, registerControlId, implicit, defaultId, controlSourceRef, unregisterControlId]);
262
- React__namespace.useEffect(() => {
263
- return unregisterControlId;
264
- }, [unregisterControlId]);
265
- return controlId ?? defaultId;
266
- }
267
-
268
- exports.DEFAULT_FIELD_ROOT_CONTEXT = DEFAULT_FIELD_ROOT_CONTEXT;
269
- exports.DEFAULT_FIELD_STATE_ATTRIBUTES = DEFAULT_FIELD_STATE_ATTRIBUTES;
270
- exports.DEFAULT_VALIDITY_STATE = DEFAULT_VALIDITY_STATE;
271
- exports.FieldRootContext = FieldRootContext;
272
- exports.LabelableContext = LabelableContext;
273
- exports.fieldValidityMapping = fieldValidityMapping;
274
- exports.useFieldRootContext = useFieldRootContext;
275
- exports.useFormContext = useFormContext;
276
- exports.useLabelableContext = useLabelableContext;
277
- exports.useLabelableId = useLabelableId;
278
- exports.useRegisterFieldControl = useRegisterFieldControl;
@@ -1,247 +0,0 @@
1
- import * as React from 'react';
2
- import { a as useIsoLayoutEffect, u as useBaseUiId, b as useStableCallback } from './useButton-es.js';
3
- import { N as NOOP, E as EMPTY_OBJECT, f as formatErrorMessage, a as useRefWithInit } from './useRenderElement-es.js';
4
- import { b as isElement } from './floating-ui.utils.dom-es.js';
5
-
6
- let FieldControlDataAttributes = /*#__PURE__*/function (FieldControlDataAttributes) {
7
- /**
8
- * Present when the field is disabled.
9
- */
10
- FieldControlDataAttributes["disabled"] = "data-disabled";
11
- /**
12
- * Present when the field is in a valid state.
13
- */
14
- FieldControlDataAttributes["valid"] = "data-valid";
15
- /**
16
- * Present when the field is in an invalid state.
17
- */
18
- FieldControlDataAttributes["invalid"] = "data-invalid";
19
- /**
20
- * Present when the field has been touched.
21
- */
22
- FieldControlDataAttributes["touched"] = "data-touched";
23
- /**
24
- * Present when the field's value has changed.
25
- */
26
- FieldControlDataAttributes["dirty"] = "data-dirty";
27
- /**
28
- * Present when the field is filled.
29
- */
30
- FieldControlDataAttributes["filled"] = "data-filled";
31
- /**
32
- * Present when the field control is focused.
33
- */
34
- FieldControlDataAttributes["focused"] = "data-focused";
35
- return FieldControlDataAttributes;
36
- }({});
37
-
38
- const DEFAULT_VALIDITY_STATE = {
39
- badInput: false,
40
- customError: false,
41
- patternMismatch: false,
42
- rangeOverflow: false,
43
- rangeUnderflow: false,
44
- stepMismatch: false,
45
- tooLong: false,
46
- tooShort: false,
47
- typeMismatch: false,
48
- valid: null,
49
- valueMissing: false
50
- };
51
- const DEFAULT_FIELD_STATE_ATTRIBUTES = {
52
- valid: null,
53
- touched: false,
54
- dirty: false,
55
- filled: false,
56
- focused: false
57
- };
58
- const DEFAULT_FIELD_ROOT_STATE = {
59
- disabled: false,
60
- ...DEFAULT_FIELD_STATE_ATTRIBUTES
61
- };
62
- const fieldValidityMapping = {
63
- valid(value) {
64
- if (value === null) {
65
- return null;
66
- }
67
- if (value) {
68
- return {
69
- [FieldControlDataAttributes.valid]: ''
70
- };
71
- }
72
- return {
73
- [FieldControlDataAttributes.invalid]: ''
74
- };
75
- }
76
- };
77
-
78
- const DEFAULT_FIELD_ROOT_CONTEXT = {
79
- invalid: undefined,
80
- name: undefined,
81
- validityData: {
82
- state: DEFAULT_VALIDITY_STATE,
83
- errors: [],
84
- error: '',
85
- value: '',
86
- initialValue: null
87
- },
88
- setValidityData: NOOP,
89
- disabled: undefined,
90
- touched: DEFAULT_FIELD_STATE_ATTRIBUTES.touched,
91
- setTouched: NOOP,
92
- dirty: DEFAULT_FIELD_STATE_ATTRIBUTES.dirty,
93
- setDirty: NOOP,
94
- filled: DEFAULT_FIELD_STATE_ATTRIBUTES.filled,
95
- setFilled: NOOP,
96
- focused: DEFAULT_FIELD_STATE_ATTRIBUTES.focused,
97
- setFocused: NOOP,
98
- validate: () => null,
99
- validationMode: 'onSubmit',
100
- validationDebounceTime: 0,
101
- shouldValidateOnChange: () => false,
102
- state: DEFAULT_FIELD_ROOT_STATE,
103
- markedDirtyRef: {
104
- current: false
105
- },
106
- registerFieldControl: NOOP,
107
- validation: {
108
- getValidationProps: (_disabled, props = EMPTY_OBJECT) => props,
109
- inputRef: {
110
- current: null
111
- },
112
- registerInput: NOOP,
113
- commit: async () => {},
114
- change: NOOP
115
- }
116
- };
117
- const FieldRootContext = /*#__PURE__*/React.createContext(DEFAULT_FIELD_ROOT_CONTEXT);
118
- if (process.env.NODE_ENV !== "production") FieldRootContext.displayName = "FieldRootContext";
119
- function useFieldRootContext(optional = true) {
120
- const context = React.useContext(FieldRootContext);
121
- if (context.setValidityData === NOOP && !optional) {
122
- throw new Error(process.env.NODE_ENV !== "production" ? 'Base UI: FieldRootContext is missing. Field parts must be placed within <Field.Root>.' : formatErrorMessage(28));
123
- }
124
- return context;
125
- }
126
-
127
- function useRegisterFieldControl(controlRef, id, value, getFormValueOverride, enabled = true, name) {
128
- const {
129
- registerFieldControl
130
- } = useFieldRootContext();
131
- const sourceRef = React.useRef(null);
132
- if (!sourceRef.current) {
133
- sourceRef.current = Symbol();
134
- }
135
- useIsoLayoutEffect(() => {
136
- const source = sourceRef.current;
137
- if (!source || !enabled) {
138
- return undefined;
139
- }
140
- const registration = {
141
- controlRef,
142
- getValue: getFormValueOverride,
143
- id,
144
- name,
145
- value
146
- };
147
- registerFieldControl(source, registration);
148
- return () => {
149
- registerFieldControl(source, undefined);
150
- };
151
- }, [controlRef, enabled, getFormValueOverride, id, name, registerFieldControl, value]);
152
- }
153
-
154
- const FormContext = /*#__PURE__*/React.createContext({
155
- formRef: {
156
- current: {
157
- fields: new Map()
158
- }
159
- },
160
- errors: {},
161
- clearErrors: NOOP,
162
- validationMode: 'onSubmit',
163
- submitAttemptedRef: {
164
- current: false
165
- }
166
- });
167
- if (process.env.NODE_ENV !== "production") FormContext.displayName = "FormContext";
168
- function useFormContext() {
169
- return React.useContext(FormContext);
170
- }
171
-
172
- /**
173
- * A context for providing [labelable elements](https://html.spec.whatwg.org/multipage/forms.html#category-label)\
174
- * with an accessible name (label) and description.
175
- */
176
- const LabelableContext = /*#__PURE__*/React.createContext({
177
- controlId: undefined,
178
- registerControlId: NOOP,
179
- labelId: undefined,
180
- setLabelId: NOOP,
181
- messageIds: [],
182
- setMessageIds: NOOP,
183
- getDescriptionProps: externalProps => externalProps
184
- });
185
- if (process.env.NODE_ENV !== "production") LabelableContext.displayName = "LabelableContext";
186
- function useLabelableContext() {
187
- return React.useContext(LabelableContext);
188
- }
189
-
190
- function useLabelableId(params = {}) {
191
- const {
192
- id,
193
- implicit = false,
194
- controlRef
195
- } = params;
196
- const {
197
- controlId,
198
- registerControlId
199
- } = useLabelableContext();
200
- const defaultId = useBaseUiId(id);
201
- const controlIdForEffect = implicit ? controlId : undefined;
202
- const controlSourceRef = useRefWithInit(() => Symbol('labelable-control'));
203
- const hasRegisteredRef = React.useRef(false);
204
- const hadExplicitIdRef = React.useRef(id != null);
205
- const unregisterControlId = useStableCallback(() => {
206
- if (!hasRegisteredRef.current || registerControlId === NOOP) {
207
- return;
208
- }
209
- hasRegisteredRef.current = false;
210
- registerControlId(controlSourceRef.current, undefined);
211
- });
212
- useIsoLayoutEffect(() => {
213
- if (registerControlId === NOOP) {
214
- return undefined;
215
- }
216
- let nextId;
217
- if (implicit) {
218
- const elem = controlRef?.current;
219
- if (isElement(elem) && elem.closest('label') != null) {
220
- nextId = id ?? null;
221
- } else {
222
- nextId = controlIdForEffect ?? defaultId;
223
- }
224
- } else if (id != null) {
225
- hadExplicitIdRef.current = true;
226
- nextId = id;
227
- } else if (hadExplicitIdRef.current) {
228
- nextId = defaultId;
229
- } else {
230
- unregisterControlId();
231
- return undefined;
232
- }
233
- if (nextId === undefined) {
234
- unregisterControlId();
235
- return undefined;
236
- }
237
- hasRegisteredRef.current = true;
238
- registerControlId(controlSourceRef.current, nextId);
239
- return undefined;
240
- }, [id, controlRef, controlIdForEffect, registerControlId, implicit, defaultId, controlSourceRef, unregisterControlId]);
241
- React.useEffect(() => {
242
- return unregisterControlId;
243
- }, [unregisterControlId]);
244
- return controlId ?? defaultId;
245
- }
246
-
247
- export { DEFAULT_VALIDITY_STATE as D, FieldRootContext as F, LabelableContext as L, useFormContext as a, useFieldRootContext as b, useLabelableId as c, useRegisterFieldControl as d, DEFAULT_FIELD_ROOT_CONTEXT as e, fieldValidityMapping as f, DEFAULT_FIELD_STATE_ATTRIBUTES as g, useLabelableContext as u };