@zag-js/number-input 1.34.1 → 1.35.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 (37) hide show
  1. package/dist/cursor.d.mts +12 -0
  2. package/dist/cursor.d.ts +12 -0
  3. package/dist/cursor.js +111 -0
  4. package/dist/cursor.mjs +84 -0
  5. package/dist/index.d.mts +9 -314
  6. package/dist/index.d.ts +9 -314
  7. package/dist/index.js +37 -931
  8. package/dist/index.mjs +9 -926
  9. package/dist/number-input.anatomy.d.mts +6 -0
  10. package/dist/number-input.anatomy.d.ts +6 -0
  11. package/dist/number-input.anatomy.js +43 -0
  12. package/dist/number-input.anatomy.mjs +17 -0
  13. package/dist/number-input.connect.d.mts +8 -0
  14. package/dist/number-input.connect.d.ts +8 -0
  15. package/dist/number-input.connect.js +308 -0
  16. package/dist/number-input.connect.mjs +284 -0
  17. package/dist/number-input.dom.d.mts +34 -0
  18. package/dist/number-input.dom.d.ts +34 -0
  19. package/dist/number-input.dom.js +150 -0
  20. package/dist/number-input.dom.mjs +109 -0
  21. package/dist/number-input.machine.d.mts +8 -0
  22. package/dist/number-input.machine.d.ts +8 -0
  23. package/dist/number-input.machine.js +460 -0
  24. package/dist/number-input.machine.mjs +441 -0
  25. package/dist/number-input.props.d.mts +9 -0
  26. package/dist/number-input.props.d.ts +9 -0
  27. package/dist/number-input.props.js +65 -0
  28. package/dist/number-input.props.mjs +39 -0
  29. package/dist/number-input.types.d.mts +303 -0
  30. package/dist/number-input.types.d.ts +303 -0
  31. package/dist/number-input.types.js +18 -0
  32. package/dist/number-input.types.mjs +0 -0
  33. package/dist/number-input.utils.d.mts +13 -0
  34. package/dist/number-input.utils.d.ts +13 -0
  35. package/dist/number-input.utils.js +63 -0
  36. package/dist/number-input.utils.mjs +34 -0
  37. package/package.json +17 -7
@@ -0,0 +1,441 @@
1
+ // src/number-input.machine.ts
2
+ import { memo, setup } from "@zag-js/core";
3
+ import {
4
+ addDomEvent,
5
+ isSafari,
6
+ observeAttributes,
7
+ raf,
8
+ requestPointerLock,
9
+ setElementValue,
10
+ trackFormControl
11
+ } from "@zag-js/dom-query";
12
+ import {
13
+ callAll,
14
+ clampValue,
15
+ decrementValue,
16
+ incrementValue,
17
+ isValueAtMax,
18
+ isValueAtMin,
19
+ isValueWithinRange
20
+ } from "@zag-js/utils";
21
+ import { recordCursor, restoreCursor } from "./cursor.mjs";
22
+ import * as dom from "./number-input.dom.mjs";
23
+ import { createFormatter, createParser, formatValue, getDefaultStep, parseValue } from "./number-input.utils.mjs";
24
+ var { choose, guards, createMachine } = setup();
25
+ var { not, and } = guards;
26
+ var machine = createMachine({
27
+ props({ props }) {
28
+ const step = getDefaultStep(props.step, props.formatOptions);
29
+ return {
30
+ dir: "ltr",
31
+ locale: "en-US",
32
+ focusInputOnChange: true,
33
+ clampValueOnBlur: !props.allowOverflow,
34
+ allowOverflow: false,
35
+ inputMode: "decimal",
36
+ pattern: "-?[0-9]*(.[0-9]+)?",
37
+ defaultValue: "",
38
+ step,
39
+ min: Number.MIN_SAFE_INTEGER,
40
+ max: Number.MAX_SAFE_INTEGER,
41
+ spinOnPress: true,
42
+ ...props,
43
+ translations: {
44
+ incrementLabel: "increment value",
45
+ decrementLabel: "decrease value",
46
+ ...props.translations
47
+ }
48
+ };
49
+ },
50
+ initialState() {
51
+ return "idle";
52
+ },
53
+ context({ prop, bindable, getComputed }) {
54
+ return {
55
+ value: bindable(() => ({
56
+ defaultValue: prop("defaultValue"),
57
+ value: prop("value"),
58
+ onChange(value) {
59
+ const computed = getComputed();
60
+ const valueAsNumber = parseValue(value, { computed, prop });
61
+ prop("onValueChange")?.({ value, valueAsNumber });
62
+ }
63
+ })),
64
+ hint: bindable(() => ({ defaultValue: null })),
65
+ scrubberCursorPoint: bindable(() => ({
66
+ defaultValue: null,
67
+ hash(value) {
68
+ return value ? `x:${value.x}, y:${value.y}` : "";
69
+ }
70
+ })),
71
+ fieldsetDisabled: bindable(() => ({ defaultValue: false }))
72
+ };
73
+ },
74
+ computed: {
75
+ isRtl: ({ prop }) => prop("dir") === "rtl",
76
+ valueAsNumber: ({ context, computed, prop }) => parseValue(context.get("value"), { computed, prop }),
77
+ formattedValue: ({ computed, prop }) => formatValue(computed("valueAsNumber"), { computed, prop }),
78
+ isAtMin: ({ computed, prop }) => isValueAtMin(computed("valueAsNumber"), prop("min")),
79
+ isAtMax: ({ computed, prop }) => isValueAtMax(computed("valueAsNumber"), prop("max")),
80
+ isOutOfRange: ({ computed, prop }) => !isValueWithinRange(computed("valueAsNumber"), prop("min"), prop("max")),
81
+ isValueEmpty: ({ context }) => context.get("value") === "",
82
+ isDisabled: ({ prop, context }) => !!prop("disabled") || context.get("fieldsetDisabled"),
83
+ canIncrement: ({ prop, computed }) => prop("allowOverflow") || !computed("isAtMax"),
84
+ canDecrement: ({ prop, computed }) => prop("allowOverflow") || !computed("isAtMin"),
85
+ valueText: ({ prop, context }) => prop("translations").valueText?.(context.get("value")),
86
+ formatter: memo(
87
+ ({ prop }) => [prop("locale"), prop("formatOptions")],
88
+ ([locale, formatOptions]) => createFormatter(locale, formatOptions)
89
+ ),
90
+ parser: memo(
91
+ ({ prop }) => [prop("locale"), prop("formatOptions")],
92
+ ([locale, formatOptions]) => createParser(locale, formatOptions)
93
+ )
94
+ },
95
+ watch({ track, action, context, computed, prop }) {
96
+ track([() => context.get("value"), () => prop("locale"), () => JSON.stringify(prop("formatOptions"))], () => {
97
+ action(["syncInputElement"]);
98
+ });
99
+ track([() => computed("isOutOfRange")], () => {
100
+ action(["invokeOnInvalid"]);
101
+ });
102
+ track([() => context.hash("scrubberCursorPoint")], () => {
103
+ action(["setVirtualCursorPosition"]);
104
+ });
105
+ },
106
+ effects: ["trackFormControl"],
107
+ on: {
108
+ "VALUE.SET": {
109
+ actions: ["setRawValue"]
110
+ },
111
+ "VALUE.CLEAR": {
112
+ actions: ["clearValue"]
113
+ },
114
+ "VALUE.INCREMENT": {
115
+ actions: ["increment"]
116
+ },
117
+ "VALUE.DECREMENT": {
118
+ actions: ["decrement"]
119
+ }
120
+ },
121
+ states: {
122
+ idle: {
123
+ on: {
124
+ "TRIGGER.PRESS_DOWN": [
125
+ { guard: "isTouchPointer", target: "before:spin", actions: ["setHint"] },
126
+ {
127
+ target: "before:spin",
128
+ actions: ["focusInput", "invokeOnFocus", "setHint"]
129
+ }
130
+ ],
131
+ "SCRUBBER.PRESS_DOWN": {
132
+ target: "scrubbing",
133
+ actions: ["focusInput", "invokeOnFocus", "setHint", "setCursorPoint"]
134
+ },
135
+ "INPUT.FOCUS": {
136
+ target: "focused",
137
+ actions: ["focusInput", "invokeOnFocus"]
138
+ }
139
+ }
140
+ },
141
+ focused: {
142
+ tags: ["focus"],
143
+ effects: ["attachWheelListener"],
144
+ on: {
145
+ "TRIGGER.PRESS_DOWN": [
146
+ { guard: "isTouchPointer", target: "before:spin", actions: ["setHint"] },
147
+ { target: "before:spin", actions: ["focusInput", "setHint"] }
148
+ ],
149
+ "SCRUBBER.PRESS_DOWN": {
150
+ target: "scrubbing",
151
+ actions: ["focusInput", "setHint", "setCursorPoint"]
152
+ },
153
+ "INPUT.ARROW_UP": {
154
+ actions: ["increment"]
155
+ },
156
+ "INPUT.ARROW_DOWN": {
157
+ actions: ["decrement"]
158
+ },
159
+ "INPUT.HOME": {
160
+ actions: ["decrementToMin"]
161
+ },
162
+ "INPUT.END": {
163
+ actions: ["incrementToMax"]
164
+ },
165
+ "INPUT.CHANGE": {
166
+ actions: ["setValue", "setHint"]
167
+ },
168
+ "INPUT.BLUR": [
169
+ {
170
+ guard: and("clampValueOnBlur", not("isInRange")),
171
+ target: "idle",
172
+ actions: ["setClampedValue", "clearHint", "invokeOnBlur", "invokeOnValueCommit"]
173
+ },
174
+ {
175
+ guard: not("isInRange"),
176
+ target: "idle",
177
+ actions: ["setFormattedValue", "clearHint", "invokeOnBlur", "invokeOnInvalid", "invokeOnValueCommit"]
178
+ },
179
+ {
180
+ target: "idle",
181
+ actions: ["setFormattedValue", "clearHint", "invokeOnBlur", "invokeOnValueCommit"]
182
+ }
183
+ ],
184
+ "INPUT.ENTER": {
185
+ actions: ["setFormattedValue", "clearHint", "invokeOnBlur", "invokeOnValueCommit"]
186
+ }
187
+ }
188
+ },
189
+ "before:spin": {
190
+ tags: ["focus"],
191
+ effects: ["trackButtonDisabled", "waitForChangeDelay"],
192
+ entry: choose([
193
+ { guard: "isIncrementHint", actions: ["increment"] },
194
+ { guard: "isDecrementHint", actions: ["decrement"] }
195
+ ]),
196
+ on: {
197
+ CHANGE_DELAY: {
198
+ target: "spinning",
199
+ guard: and("isInRange", "spinOnPress")
200
+ },
201
+ "TRIGGER.PRESS_UP": [
202
+ { guard: "isTouchPointer", target: "focused", actions: ["clearHint"] },
203
+ { target: "focused", actions: ["focusInput", "clearHint"] }
204
+ ]
205
+ }
206
+ },
207
+ spinning: {
208
+ tags: ["focus"],
209
+ effects: ["trackButtonDisabled", "spinValue"],
210
+ on: {
211
+ SPIN: [
212
+ {
213
+ guard: "isIncrementHint",
214
+ actions: ["increment"]
215
+ },
216
+ {
217
+ guard: "isDecrementHint",
218
+ actions: ["decrement"]
219
+ }
220
+ ],
221
+ "TRIGGER.PRESS_UP": {
222
+ target: "focused",
223
+ actions: ["focusInput", "clearHint"]
224
+ }
225
+ }
226
+ },
227
+ scrubbing: {
228
+ tags: ["focus"],
229
+ effects: ["activatePointerLock", "trackMousemove", "setupVirtualCursor", "preventTextSelection"],
230
+ on: {
231
+ "SCRUBBER.POINTER_UP": {
232
+ target: "focused",
233
+ actions: ["focusInput", "clearCursorPoint"]
234
+ },
235
+ "SCRUBBER.POINTER_MOVE": [
236
+ {
237
+ guard: "isIncrementHint",
238
+ actions: ["increment", "setCursorPoint"]
239
+ },
240
+ {
241
+ guard: "isDecrementHint",
242
+ actions: ["decrement", "setCursorPoint"]
243
+ }
244
+ ]
245
+ }
246
+ }
247
+ },
248
+ implementations: {
249
+ guards: {
250
+ clampValueOnBlur: ({ prop }) => prop("clampValueOnBlur"),
251
+ spinOnPress: ({ prop }) => !!prop("spinOnPress"),
252
+ isInRange: ({ computed }) => !computed("isOutOfRange"),
253
+ isDecrementHint: ({ context, event }) => (event.hint ?? context.get("hint")) === "decrement",
254
+ isIncrementHint: ({ context, event }) => (event.hint ?? context.get("hint")) === "increment",
255
+ isTouchPointer: ({ event }) => event.pointerType === "touch"
256
+ },
257
+ effects: {
258
+ waitForChangeDelay({ send }) {
259
+ const id = setTimeout(() => {
260
+ send({ type: "CHANGE_DELAY" });
261
+ }, 300);
262
+ return () => clearTimeout(id);
263
+ },
264
+ spinValue({ send }) {
265
+ const id = setInterval(() => {
266
+ send({ type: "SPIN" });
267
+ }, 50);
268
+ return () => clearInterval(id);
269
+ },
270
+ trackFormControl({ context, scope }) {
271
+ const inputEl = dom.getInputEl(scope);
272
+ return trackFormControl(inputEl, {
273
+ onFieldsetDisabledChange(disabled) {
274
+ context.set("fieldsetDisabled", disabled);
275
+ },
276
+ onFormReset() {
277
+ context.set("value", context.initial("value"));
278
+ }
279
+ });
280
+ },
281
+ setupVirtualCursor({ context, scope }) {
282
+ const point = context.get("scrubberCursorPoint");
283
+ return dom.setupVirtualCursor(scope, point);
284
+ },
285
+ preventTextSelection({ scope }) {
286
+ return dom.preventTextSelection(scope);
287
+ },
288
+ trackButtonDisabled({ context, scope, send }) {
289
+ const hint = context.get("hint");
290
+ const btn = dom.getPressedTriggerEl(scope, hint);
291
+ return observeAttributes(btn, {
292
+ attributes: ["disabled"],
293
+ callback() {
294
+ send({ type: "TRIGGER.PRESS_UP", src: "attr" });
295
+ }
296
+ });
297
+ },
298
+ attachWheelListener({ scope, send, prop }) {
299
+ const inputEl = dom.getInputEl(scope);
300
+ if (!inputEl || !scope.isActiveElement(inputEl) || !prop("allowMouseWheel")) return;
301
+ function onWheel(event) {
302
+ event.preventDefault();
303
+ const dir = Math.sign(event.deltaY) * -1;
304
+ if (dir === 1) {
305
+ send({ type: "VALUE.INCREMENT" });
306
+ } else if (dir === -1) {
307
+ send({ type: "VALUE.DECREMENT" });
308
+ }
309
+ }
310
+ return addDomEvent(inputEl, "wheel", onWheel, { passive: false });
311
+ },
312
+ activatePointerLock({ scope }) {
313
+ if (isSafari()) return;
314
+ return requestPointerLock(scope.getDoc());
315
+ },
316
+ trackMousemove({ scope, send, context, computed }) {
317
+ const doc = scope.getDoc();
318
+ function onMousemove(event) {
319
+ const point = context.get("scrubberCursorPoint");
320
+ const isRtl = computed("isRtl");
321
+ const value = dom.getMousemoveValue(scope, { point, isRtl, event });
322
+ if (!value.hint) return;
323
+ send({
324
+ type: "SCRUBBER.POINTER_MOVE",
325
+ hint: value.hint,
326
+ point: value.point
327
+ });
328
+ }
329
+ function onMouseup() {
330
+ send({ type: "SCRUBBER.POINTER_UP" });
331
+ }
332
+ return callAll(addDomEvent(doc, "mousemove", onMousemove, false), addDomEvent(doc, "mouseup", onMouseup, false));
333
+ }
334
+ },
335
+ actions: {
336
+ focusInput({ scope, prop }) {
337
+ if (!prop("focusInputOnChange")) return;
338
+ const inputEl = dom.getInputEl(scope);
339
+ if (scope.isActiveElement(inputEl)) return;
340
+ raf(() => inputEl?.focus({ preventScroll: true }));
341
+ },
342
+ increment({ context, event, prop, computed }) {
343
+ let nextValue = incrementValue(computed("valueAsNumber"), event.step ?? prop("step"));
344
+ if (!prop("allowOverflow")) nextValue = clampValue(nextValue, prop("min"), prop("max"));
345
+ context.set("value", formatValue(nextValue, { computed, prop }));
346
+ },
347
+ decrement({ context, event, prop, computed }) {
348
+ let nextValue = decrementValue(computed("valueAsNumber"), event.step ?? prop("step"));
349
+ if (!prop("allowOverflow")) nextValue = clampValue(nextValue, prop("min"), prop("max"));
350
+ context.set("value", formatValue(nextValue, { computed, prop }));
351
+ },
352
+ setClampedValue({ context, prop, computed }) {
353
+ const nextValue = clampValue(computed("valueAsNumber"), prop("min"), prop("max"));
354
+ context.set("value", formatValue(nextValue, { computed, prop }));
355
+ },
356
+ setRawValue({ context, event, prop, computed }) {
357
+ let nextValue = parseValue(event.value, { computed, prop });
358
+ if (!prop("allowOverflow")) nextValue = clampValue(nextValue, prop("min"), prop("max"));
359
+ context.set("value", formatValue(nextValue, { computed, prop }));
360
+ },
361
+ setValue({ context, event }) {
362
+ const value = event.target?.value ?? event.value;
363
+ context.set("value", value);
364
+ },
365
+ clearValue({ context }) {
366
+ context.set("value", "");
367
+ },
368
+ incrementToMax({ context, prop, computed }) {
369
+ const value = formatValue(prop("max"), { computed, prop });
370
+ context.set("value", value);
371
+ },
372
+ decrementToMin({ context, prop, computed }) {
373
+ const value = formatValue(prop("min"), { computed, prop });
374
+ context.set("value", value);
375
+ },
376
+ setHint({ context, event }) {
377
+ context.set("hint", event.hint);
378
+ },
379
+ clearHint({ context }) {
380
+ context.set("hint", null);
381
+ },
382
+ invokeOnFocus({ computed, prop }) {
383
+ prop("onFocusChange")?.({
384
+ focused: true,
385
+ value: computed("formattedValue"),
386
+ valueAsNumber: computed("valueAsNumber")
387
+ });
388
+ },
389
+ invokeOnBlur({ computed, prop }) {
390
+ prop("onFocusChange")?.({
391
+ focused: false,
392
+ value: computed("formattedValue"),
393
+ valueAsNumber: computed("valueAsNumber")
394
+ });
395
+ },
396
+ invokeOnInvalid({ computed, prop, event }) {
397
+ if (event.type === "INPUT.CHANGE") return;
398
+ const reason = computed("valueAsNumber") > prop("max") ? "rangeOverflow" : "rangeUnderflow";
399
+ prop("onValueInvalid")?.({
400
+ reason,
401
+ value: computed("formattedValue"),
402
+ valueAsNumber: computed("valueAsNumber")
403
+ });
404
+ },
405
+ invokeOnValueCommit({ computed, prop }) {
406
+ prop("onValueCommit")?.({
407
+ value: computed("formattedValue"),
408
+ valueAsNumber: computed("valueAsNumber")
409
+ });
410
+ },
411
+ syncInputElement({ context, event, computed, scope }) {
412
+ const value = event.type.endsWith("CHANGE") ? context.get("value") : computed("formattedValue");
413
+ const inputEl = dom.getInputEl(scope);
414
+ const sel = event.selection ?? recordCursor(inputEl, scope);
415
+ raf(() => {
416
+ setElementValue(inputEl, value);
417
+ restoreCursor(inputEl, sel, scope);
418
+ });
419
+ },
420
+ setFormattedValue({ context, computed, action }) {
421
+ context.set("value", computed("formattedValue"));
422
+ action(["syncInputElement"]);
423
+ },
424
+ setCursorPoint({ context, event }) {
425
+ context.set("scrubberCursorPoint", event.point);
426
+ },
427
+ clearCursorPoint({ context }) {
428
+ context.set("scrubberCursorPoint", null);
429
+ },
430
+ setVirtualCursorPosition({ context, scope }) {
431
+ const cursorEl = dom.getCursorEl(scope);
432
+ const point = context.get("scrubberCursorPoint");
433
+ if (!cursorEl || !point) return;
434
+ cursorEl.style.transform = `translate3d(${point.x}px, ${point.y}px, 0px)`;
435
+ }
436
+ }
437
+ }
438
+ });
439
+ export {
440
+ machine
441
+ };
@@ -0,0 +1,9 @@
1
+ import { NumberInputProps } from './number-input.types.mjs';
2
+ import '@internationalized/number';
3
+ import '@zag-js/core';
4
+ import '@zag-js/types';
5
+
6
+ declare const props: (keyof NumberInputProps)[];
7
+ declare const splitProps: <Props extends Partial<NumberInputProps>>(props: Props) => [Partial<NumberInputProps>, Omit<Props, keyof NumberInputProps>];
8
+
9
+ export { props, splitProps };
@@ -0,0 +1,9 @@
1
+ import { NumberInputProps } from './number-input.types.js';
2
+ import '@internationalized/number';
3
+ import '@zag-js/core';
4
+ import '@zag-js/types';
5
+
6
+ declare const props: (keyof NumberInputProps)[];
7
+ declare const splitProps: <Props extends Partial<NumberInputProps>>(props: Props) => [Partial<NumberInputProps>, Omit<Props, keyof NumberInputProps>];
8
+
9
+ export { props, splitProps };
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/number-input.props.ts
21
+ var number_input_props_exports = {};
22
+ __export(number_input_props_exports, {
23
+ props: () => props,
24
+ splitProps: () => splitProps
25
+ });
26
+ module.exports = __toCommonJS(number_input_props_exports);
27
+ var import_types = require("@zag-js/types");
28
+ var import_utils = require("@zag-js/utils");
29
+ var props = (0, import_types.createProps)()([
30
+ "allowMouseWheel",
31
+ "allowOverflow",
32
+ "clampValueOnBlur",
33
+ "dir",
34
+ "disabled",
35
+ "focusInputOnChange",
36
+ "form",
37
+ "formatOptions",
38
+ "getRootNode",
39
+ "id",
40
+ "ids",
41
+ "inputMode",
42
+ "invalid",
43
+ "locale",
44
+ "max",
45
+ "min",
46
+ "name",
47
+ "onFocusChange",
48
+ "onValueChange",
49
+ "onValueCommit",
50
+ "onValueInvalid",
51
+ "pattern",
52
+ "required",
53
+ "readOnly",
54
+ "spinOnPress",
55
+ "step",
56
+ "translations",
57
+ "value",
58
+ "defaultValue"
59
+ ]);
60
+ var splitProps = (0, import_utils.createSplitProps)(props);
61
+ // Annotate the CommonJS export names for ESM import in node:
62
+ 0 && (module.exports = {
63
+ props,
64
+ splitProps
65
+ });
@@ -0,0 +1,39 @@
1
+ // src/number-input.props.ts
2
+ import { createProps } from "@zag-js/types";
3
+ import { createSplitProps } from "@zag-js/utils";
4
+ var props = createProps()([
5
+ "allowMouseWheel",
6
+ "allowOverflow",
7
+ "clampValueOnBlur",
8
+ "dir",
9
+ "disabled",
10
+ "focusInputOnChange",
11
+ "form",
12
+ "formatOptions",
13
+ "getRootNode",
14
+ "id",
15
+ "ids",
16
+ "inputMode",
17
+ "invalid",
18
+ "locale",
19
+ "max",
20
+ "min",
21
+ "name",
22
+ "onFocusChange",
23
+ "onValueChange",
24
+ "onValueCommit",
25
+ "onValueInvalid",
26
+ "pattern",
27
+ "required",
28
+ "readOnly",
29
+ "spinOnPress",
30
+ "step",
31
+ "translations",
32
+ "value",
33
+ "defaultValue"
34
+ ]);
35
+ var splitProps = createSplitProps(props);
36
+ export {
37
+ props,
38
+ splitProps
39
+ };