@zag-js/number-input 0.19.1 → 0.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/dist/index.d.mts +24 -23
- package/dist/index.d.ts +24 -23
- package/dist/index.js +17 -15
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +18 -16
- package/dist/index.mjs.map +1 -1
- package/package.json +9 -9
- package/src/number-input.machine.ts +17 -17
- package/src/number-input.types.ts +144 -126
package/dist/index.d.mts
CHANGED
|
@@ -5,7 +5,19 @@ import { StateMachine } from '@zag-js/core';
|
|
|
5
5
|
|
|
6
6
|
declare const anatomy: _zag_js_anatomy.AnatomyInstance<"root" | "label" | "input" | "control" | "incrementTrigger" | "decrementTrigger" | "scrubber">;
|
|
7
7
|
|
|
8
|
+
interface ValueChangeDetails {
|
|
9
|
+
value: string;
|
|
10
|
+
valueAsNumber: number;
|
|
11
|
+
}
|
|
12
|
+
interface FocusChangeDetails extends ValueChangeDetails {
|
|
13
|
+
focused: boolean;
|
|
14
|
+
srcElement?: HTMLElement | null;
|
|
15
|
+
}
|
|
8
16
|
type ValidityState = "rangeUnderflow" | "rangeOverflow";
|
|
17
|
+
interface ValueInvalidDetails extends ValueChangeDetails {
|
|
18
|
+
reason: ValidityState;
|
|
19
|
+
}
|
|
20
|
+
type InputMode = "text" | "tel" | "numeric" | "decimal";
|
|
9
21
|
type ElementIds = Partial<{
|
|
10
22
|
root: string;
|
|
11
23
|
label: string;
|
|
@@ -29,11 +41,7 @@ type IntlTranslations = {
|
|
|
29
41
|
*/
|
|
30
42
|
decrementLabel: string;
|
|
31
43
|
};
|
|
32
|
-
|
|
33
|
-
value: string;
|
|
34
|
-
valueAsNumber: number;
|
|
35
|
-
};
|
|
36
|
-
type PublicContext = DirectionProperty & CommonProperties & {
|
|
44
|
+
interface PublicContext extends DirectionProperty, CommonProperties {
|
|
37
45
|
/**
|
|
38
46
|
* The ids of the elements in the number input. Useful for composition.
|
|
39
47
|
*/
|
|
@@ -122,27 +130,19 @@ type PublicContext = DirectionProperty & CommonProperties & {
|
|
|
122
130
|
* the type of keyboard shown to the user on mobile devices
|
|
123
131
|
* @default "decimal"
|
|
124
132
|
*/
|
|
125
|
-
inputMode:
|
|
133
|
+
inputMode: InputMode;
|
|
126
134
|
/**
|
|
127
135
|
* Function invoked when the value changes
|
|
128
136
|
*/
|
|
129
|
-
|
|
137
|
+
onValueChange?: (details: ValueChangeDetails) => void;
|
|
130
138
|
/**
|
|
131
139
|
* Function invoked when the value overflows or underflows the min/max range
|
|
132
140
|
*/
|
|
133
|
-
|
|
134
|
-
reason: ValidityState;
|
|
135
|
-
}) => void;
|
|
141
|
+
onValueInvalid?: (details: ValueInvalidDetails) => void;
|
|
136
142
|
/**
|
|
137
143
|
* Function invoked when the number input is focused
|
|
138
144
|
*/
|
|
139
|
-
|
|
140
|
-
srcElement: HTMLElement | null;
|
|
141
|
-
}) => void;
|
|
142
|
-
/**
|
|
143
|
-
* The value of the input when it is blurred
|
|
144
|
-
*/
|
|
145
|
-
onBlur?: (details: Value) => void;
|
|
145
|
+
onFocusChange?: (details: FocusChangeDetails) => void;
|
|
146
146
|
/**
|
|
147
147
|
* The minimum number of fraction digits to use. Possible values are from 0 to 20
|
|
148
148
|
*/
|
|
@@ -155,7 +155,7 @@ type PublicContext = DirectionProperty & CommonProperties & {
|
|
|
155
155
|
* Whether to spin the value when the increment/decrement button is pressed
|
|
156
156
|
*/
|
|
157
157
|
spinOnPress?: boolean;
|
|
158
|
-
}
|
|
158
|
+
}
|
|
159
159
|
type UserDefinedContext = RequiredBy<PublicContext, "id">;
|
|
160
160
|
type ComputedContext = Readonly<{
|
|
161
161
|
/**
|
|
@@ -210,14 +210,15 @@ type ComputedContext = Readonly<{
|
|
|
210
210
|
isRtl: boolean;
|
|
211
211
|
}>;
|
|
212
212
|
type PrivateContext = Context<{}>;
|
|
213
|
-
|
|
214
|
-
|
|
213
|
+
interface MachineContext extends PublicContext, PrivateContext, ComputedContext {
|
|
214
|
+
}
|
|
215
|
+
interface MachineState {
|
|
215
216
|
value: "idle" | "focused" | "spinning" | "before:spin" | "scrubbing";
|
|
216
217
|
tags: "focus";
|
|
217
|
-
}
|
|
218
|
+
}
|
|
218
219
|
type State = StateMachine.State<MachineContext, MachineState>;
|
|
219
220
|
type Send = StateMachine.Send<StateMachine.AnyEventObject>;
|
|
220
|
-
|
|
221
|
+
interface MachineApi<T extends PropTypes = PropTypes> {
|
|
221
222
|
/**
|
|
222
223
|
* Whether the input is focused.
|
|
223
224
|
*/
|
|
@@ -277,7 +278,7 @@ type MachineApi<T extends PropTypes = PropTypes> = {
|
|
|
277
278
|
decrementTriggerProps: T["button"];
|
|
278
279
|
incrementTriggerProps: T["button"];
|
|
279
280
|
scrubberProps: T["element"];
|
|
280
|
-
}
|
|
281
|
+
}
|
|
281
282
|
|
|
282
283
|
declare function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): MachineApi<T>;
|
|
283
284
|
|
package/dist/index.d.ts
CHANGED
|
@@ -5,7 +5,19 @@ import { StateMachine } from '@zag-js/core';
|
|
|
5
5
|
|
|
6
6
|
declare const anatomy: _zag_js_anatomy.AnatomyInstance<"root" | "label" | "input" | "control" | "incrementTrigger" | "decrementTrigger" | "scrubber">;
|
|
7
7
|
|
|
8
|
+
interface ValueChangeDetails {
|
|
9
|
+
value: string;
|
|
10
|
+
valueAsNumber: number;
|
|
11
|
+
}
|
|
12
|
+
interface FocusChangeDetails extends ValueChangeDetails {
|
|
13
|
+
focused: boolean;
|
|
14
|
+
srcElement?: HTMLElement | null;
|
|
15
|
+
}
|
|
8
16
|
type ValidityState = "rangeUnderflow" | "rangeOverflow";
|
|
17
|
+
interface ValueInvalidDetails extends ValueChangeDetails {
|
|
18
|
+
reason: ValidityState;
|
|
19
|
+
}
|
|
20
|
+
type InputMode = "text" | "tel" | "numeric" | "decimal";
|
|
9
21
|
type ElementIds = Partial<{
|
|
10
22
|
root: string;
|
|
11
23
|
label: string;
|
|
@@ -29,11 +41,7 @@ type IntlTranslations = {
|
|
|
29
41
|
*/
|
|
30
42
|
decrementLabel: string;
|
|
31
43
|
};
|
|
32
|
-
|
|
33
|
-
value: string;
|
|
34
|
-
valueAsNumber: number;
|
|
35
|
-
};
|
|
36
|
-
type PublicContext = DirectionProperty & CommonProperties & {
|
|
44
|
+
interface PublicContext extends DirectionProperty, CommonProperties {
|
|
37
45
|
/**
|
|
38
46
|
* The ids of the elements in the number input. Useful for composition.
|
|
39
47
|
*/
|
|
@@ -122,27 +130,19 @@ type PublicContext = DirectionProperty & CommonProperties & {
|
|
|
122
130
|
* the type of keyboard shown to the user on mobile devices
|
|
123
131
|
* @default "decimal"
|
|
124
132
|
*/
|
|
125
|
-
inputMode:
|
|
133
|
+
inputMode: InputMode;
|
|
126
134
|
/**
|
|
127
135
|
* Function invoked when the value changes
|
|
128
136
|
*/
|
|
129
|
-
|
|
137
|
+
onValueChange?: (details: ValueChangeDetails) => void;
|
|
130
138
|
/**
|
|
131
139
|
* Function invoked when the value overflows or underflows the min/max range
|
|
132
140
|
*/
|
|
133
|
-
|
|
134
|
-
reason: ValidityState;
|
|
135
|
-
}) => void;
|
|
141
|
+
onValueInvalid?: (details: ValueInvalidDetails) => void;
|
|
136
142
|
/**
|
|
137
143
|
* Function invoked when the number input is focused
|
|
138
144
|
*/
|
|
139
|
-
|
|
140
|
-
srcElement: HTMLElement | null;
|
|
141
|
-
}) => void;
|
|
142
|
-
/**
|
|
143
|
-
* The value of the input when it is blurred
|
|
144
|
-
*/
|
|
145
|
-
onBlur?: (details: Value) => void;
|
|
145
|
+
onFocusChange?: (details: FocusChangeDetails) => void;
|
|
146
146
|
/**
|
|
147
147
|
* The minimum number of fraction digits to use. Possible values are from 0 to 20
|
|
148
148
|
*/
|
|
@@ -155,7 +155,7 @@ type PublicContext = DirectionProperty & CommonProperties & {
|
|
|
155
155
|
* Whether to spin the value when the increment/decrement button is pressed
|
|
156
156
|
*/
|
|
157
157
|
spinOnPress?: boolean;
|
|
158
|
-
}
|
|
158
|
+
}
|
|
159
159
|
type UserDefinedContext = RequiredBy<PublicContext, "id">;
|
|
160
160
|
type ComputedContext = Readonly<{
|
|
161
161
|
/**
|
|
@@ -210,14 +210,15 @@ type ComputedContext = Readonly<{
|
|
|
210
210
|
isRtl: boolean;
|
|
211
211
|
}>;
|
|
212
212
|
type PrivateContext = Context<{}>;
|
|
213
|
-
|
|
214
|
-
|
|
213
|
+
interface MachineContext extends PublicContext, PrivateContext, ComputedContext {
|
|
214
|
+
}
|
|
215
|
+
interface MachineState {
|
|
215
216
|
value: "idle" | "focused" | "spinning" | "before:spin" | "scrubbing";
|
|
216
217
|
tags: "focus";
|
|
217
|
-
}
|
|
218
|
+
}
|
|
218
219
|
type State = StateMachine.State<MachineContext, MachineState>;
|
|
219
220
|
type Send = StateMachine.Send<StateMachine.AnyEventObject>;
|
|
220
|
-
|
|
221
|
+
interface MachineApi<T extends PropTypes = PropTypes> {
|
|
221
222
|
/**
|
|
222
223
|
* Whether the input is focused.
|
|
223
224
|
*/
|
|
@@ -277,7 +278,7 @@ type MachineApi<T extends PropTypes = PropTypes> = {
|
|
|
277
278
|
decrementTriggerProps: T["button"];
|
|
278
279
|
incrementTriggerProps: T["button"];
|
|
279
280
|
scrubberProps: T["element"];
|
|
280
|
-
}
|
|
281
|
+
}
|
|
281
282
|
|
|
282
283
|
declare function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): MachineApi<T>;
|
|
283
284
|
|
package/dist/index.js
CHANGED
|
@@ -689,28 +689,30 @@ function machine(userContext) {
|
|
|
689
689
|
ctx2.hint = "set";
|
|
690
690
|
},
|
|
691
691
|
invokeOnFocus(ctx2, evt) {
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
valueAsNumber: ctx2.valueAsNumber,
|
|
703
|
-
srcElement
|
|
692
|
+
const srcElement = (0, import_utils.match)(evt.type, {
|
|
693
|
+
PRESS_DOWN: dom.getPressedTriggerEl(ctx2, evt.hint),
|
|
694
|
+
FOCUS: dom.getInputEl(ctx2),
|
|
695
|
+
PRESS_DOWN_SCRUBBER: dom.getScrubberEl(ctx2)
|
|
696
|
+
});
|
|
697
|
+
ctx2.onFocusChange?.({
|
|
698
|
+
focused: true,
|
|
699
|
+
srcElement,
|
|
700
|
+
value: ctx2.formattedValue,
|
|
701
|
+
valueAsNumber: ctx2.valueAsNumber
|
|
704
702
|
});
|
|
705
703
|
},
|
|
706
704
|
invokeOnBlur(ctx2) {
|
|
707
|
-
ctx2.
|
|
705
|
+
ctx2.onFocusChange?.({
|
|
706
|
+
focused: false,
|
|
707
|
+
value: ctx2.formattedValue,
|
|
708
|
+
valueAsNumber: ctx2.valueAsNumber
|
|
709
|
+
});
|
|
708
710
|
},
|
|
709
711
|
invokeOnInvalid(ctx2) {
|
|
710
712
|
if (!ctx2.isOutOfRange)
|
|
711
713
|
return;
|
|
712
714
|
const reason = ctx2.valueAsNumber > ctx2.max ? "rangeOverflow" : "rangeUnderflow";
|
|
713
|
-
ctx2.
|
|
715
|
+
ctx2.onValueInvalid?.({
|
|
714
716
|
reason,
|
|
715
717
|
value: ctx2.formattedValue,
|
|
716
718
|
valueAsNumber: ctx2.valueAsNumber
|
|
@@ -746,7 +748,7 @@ function machine(userContext) {
|
|
|
746
748
|
}
|
|
747
749
|
var invoke = {
|
|
748
750
|
onChange: (ctx) => {
|
|
749
|
-
ctx.
|
|
751
|
+
ctx.onValueChange?.({ value: ctx.value, valueAsNumber: ctx.valueAsNumber });
|
|
750
752
|
}
|
|
751
753
|
};
|
|
752
754
|
var set = {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/number-input.anatomy.ts","../src/number-input.connect.ts","../src/number-input.dom.ts","../src/number-input.utils.ts","../src/number-input.machine.ts"],"sourcesContent":["export { anatomy } from \"./number-input.anatomy\"\nexport { connect } from \"./number-input.connect\"\nexport { machine } from \"./number-input.machine\"\nexport type { UserDefinedContext as Context, MachineApi as Api } from \"./number-input.types\"\n","import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"numberInput\").parts(\n \"root\",\n \"label\",\n \"input\",\n \"control\",\n \"incrementTrigger\",\n \"decrementTrigger\",\n \"scrubber\",\n)\nexport const parts = anatomy.build()\n","import { getEventPoint, getEventStep, getNativeEvent, isLeftClick, type EventKeyMap } from \"@zag-js/dom-event\"\nimport { ariaAttr, dataAttr } from \"@zag-js/dom-query\"\nimport { roundToDevicePixel } from \"@zag-js/number-utils\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./number-input.anatomy\"\nimport { dom } from \"./number-input.dom\"\nimport type { MachineApi, Send, State } from \"./number-input.types\"\nimport { utils } from \"./number-input.utils\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): MachineApi<T> {\n const isFocused = state.hasTag(\"focus\")\n const isInvalid = state.context.isOutOfRange || !!state.context.invalid\n\n const isDisabled = !!state.context.disabled\n const isValueEmpty = state.context.isValueEmpty\n const isIncrementDisabled = isDisabled || !state.context.canIncrement\n const isDecrementDisabled = isDisabled || !state.context.canDecrement\n\n const translations = state.context.translations\n\n return {\n isFocused,\n isInvalid,\n isValueEmpty,\n value: state.context.formattedValue,\n valueAsNumber: state.context.valueAsNumber,\n\n setValue(value: string | number) {\n send({ type: \"SET_VALUE\", value: value.toString() })\n },\n\n clearValue() {\n send(\"CLEAR_VALUE\")\n },\n\n increment() {\n send(\"INCREMENT\")\n },\n\n decrement() {\n send(\"DECREMENT\")\n },\n\n setToMax() {\n send({ type: \"SET_VALUE\", value: state.context.max })\n },\n\n setToMin() {\n send({ type: \"SET_VALUE\", value: state.context.min })\n },\n\n focus() {\n dom.getInputEl(state.context)?.focus()\n },\n\n blur() {\n dom.getInputEl(state.context)?.blur()\n },\n\n rootProps: normalize.element({\n id: dom.getRootId(state.context),\n ...parts.root.attrs,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-focus\": dataAttr(isFocused),\n \"data-invalid\": dataAttr(isInvalid),\n }),\n\n labelProps: normalize.label({\n ...parts.label.attrs,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-focus\": dataAttr(isFocused),\n \"data-invalid\": dataAttr(isInvalid),\n id: dom.getLabelId(state.context),\n htmlFor: dom.getInputId(state.context),\n }),\n\n controlProps: normalize.element({\n ...parts.control.attrs,\n role: \"group\",\n \"aria-disabled\": isDisabled,\n \"data-focus\": dataAttr(isFocused),\n \"data-disabled\": dataAttr(isDisabled),\n \"data-invalid\": dataAttr(isInvalid),\n \"aria-invalid\": ariaAttr(state.context.invalid),\n }),\n\n inputProps: normalize.input({\n ...parts.input.attrs,\n name: state.context.name,\n form: state.context.form,\n id: dom.getInputId(state.context),\n role: \"spinbutton\",\n defaultValue: state.context.formattedValue,\n pattern: state.context.pattern,\n inputMode: state.context.inputMode,\n \"aria-invalid\": ariaAttr(isInvalid),\n \"data-invalid\": dataAttr(isInvalid),\n disabled: isDisabled,\n \"data-disabled\": dataAttr(isDisabled),\n readOnly: !!state.context.readOnly,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n spellCheck: \"false\",\n type: \"text\",\n \"aria-roledescription\": \"numberfield\",\n \"aria-valuemin\": state.context.min,\n \"aria-valuemax\": state.context.max,\n \"aria-valuenow\": isNaN(state.context.valueAsNumber) ? undefined : state.context.valueAsNumber,\n \"aria-valuetext\": state.context.valueText,\n onFocus() {\n send(\"FOCUS\")\n },\n onBlur() {\n send(\"BLUR\")\n },\n onChange(event) {\n send({ type: \"CHANGE\", target: event.currentTarget, hint: \"set\" })\n },\n onKeyDown(event) {\n const evt = getNativeEvent(event)\n // TODO: This blocks non-ascii characters\n if (evt.isComposing) return\n\n if (!utils.isValidNumericEvent(state.context, event)) {\n event.preventDefault()\n }\n\n const step = getEventStep(event) * state.context.step\n\n const keyMap: EventKeyMap = {\n ArrowUp() {\n send({ type: \"ARROW_UP\", step })\n },\n ArrowDown() {\n send({ type: \"ARROW_DOWN\", step })\n },\n Home() {\n send(\"HOME\")\n },\n End() {\n send(\"END\")\n },\n }\n\n const exec = keyMap[event.key]\n\n if (exec) {\n exec(event)\n event.preventDefault()\n }\n },\n }),\n\n decrementTriggerProps: normalize.button({\n ...parts.decrementTrigger.attrs,\n id: dom.getDecrementTriggerId(state.context),\n disabled: isDecrementDisabled,\n \"data-disabled\": dataAttr(isDecrementDisabled),\n \"aria-label\": translations.decrementLabel,\n type: \"button\",\n tabIndex: -1,\n \"aria-controls\": dom.getInputId(state.context),\n onPointerDown(event) {\n if (isDecrementDisabled) return\n send(isLeftClick(event) ? { type: \"PRESS_DOWN\", hint: \"decrement\" } : { type: \"FOCUS\" })\n event.preventDefault()\n },\n onPointerUp() {\n send({ type: \"PRESS_UP\", hint: \"decrement\" })\n },\n onPointerLeave() {\n if (isDecrementDisabled) return\n send({ type: \"PRESS_UP\", hint: \"decrement\" })\n },\n }),\n\n incrementTriggerProps: normalize.button({\n ...parts.incrementTrigger.attrs,\n id: dom.getIncrementTriggerId(state.context),\n disabled: isIncrementDisabled,\n \"data-disabled\": dataAttr(isIncrementDisabled),\n \"aria-label\": translations.incrementLabel,\n type: \"button\",\n tabIndex: -1,\n \"aria-controls\": dom.getInputId(state.context),\n onPointerDown(event) {\n if (isIncrementDisabled) return\n send(isLeftClick(event) ? { type: \"PRESS_DOWN\", hint: \"increment\" } : { type: \"FOCUS\" })\n event.preventDefault()\n },\n onPointerUp() {\n send({ type: \"PRESS_UP\", hint: \"increment\" })\n },\n onPointerLeave() {\n send({ type: \"PRESS_UP\", hint: \"increment\" })\n },\n }),\n\n scrubberProps: normalize.element({\n ...parts.scrubber.attrs,\n \"data-disabled\": dataAttr(isDisabled),\n id: dom.getScrubberId(state.context),\n role: \"presentation\",\n onMouseDown(event) {\n if (isDisabled) return\n\n const evt = getNativeEvent(event)\n\n const point = getEventPoint(evt)\n point.x = point.x - roundToDevicePixel(7.5)\n point.y = point.y - roundToDevicePixel(7.5)\n\n send({ type: \"PRESS_DOWN_SCRUBBER\", point })\n event.preventDefault()\n },\n style: {\n cursor: isDisabled ? undefined : \"ew-resize\",\n },\n }),\n }\n}\n","import { createScope, isSafari, MAX_Z_INDEX } from \"@zag-js/dom-query\"\nimport { roundToDevicePixel, wrap } from \"@zag-js/number-utils\"\nimport type { MachineContext as Ctx } from \"./number-input.types\"\n\nexport const dom = createScope({\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `number-input:${ctx.id}`,\n getInputId: (ctx: Ctx) => ctx.ids?.input ?? `number-input:${ctx.id}:input`,\n getIncrementTriggerId: (ctx: Ctx) => ctx.ids?.incrementTrigger ?? `number-input:${ctx.id}:inc`,\n getDecrementTriggerId: (ctx: Ctx) => ctx.ids?.decrementTrigger ?? `number-input:${ctx.id}:dec`,\n getScrubberId: (ctx: Ctx) => ctx.ids?.scrubber ?? `number-input:${ctx.id}:scrubber`,\n getCursorId: (ctx: Ctx) => `number-input:${ctx.id}:cursor`,\n getLabelId: (ctx: Ctx) => ctx.ids?.label ?? `number-input:${ctx.id}:label`,\n\n getInputEl: (ctx: Ctx) => dom.getById<HTMLInputElement>(ctx, dom.getInputId(ctx)),\n getIncrementTriggerEl: (ctx: Ctx) => dom.getById<HTMLButtonElement>(ctx, dom.getIncrementTriggerId(ctx)),\n getDecrementTriggerEl: (ctx: Ctx) => dom.getById<HTMLButtonElement>(ctx, dom.getDecrementTriggerId(ctx)),\n getScrubberEl: (ctx: Ctx) => dom.getById(ctx, dom.getScrubberId(ctx)),\n getCursorEl: (ctx: Ctx) => dom.getDoc(ctx).getElementById(dom.getCursorId(ctx)),\n\n getPressedTriggerEl: (ctx: Ctx, hint = ctx.hint) => {\n let btnEl: HTMLButtonElement | null = null\n if (hint === \"increment\") {\n btnEl = dom.getIncrementTriggerEl(ctx)\n }\n if (hint === \"decrement\") {\n btnEl = dom.getDecrementTriggerEl(ctx)\n }\n return btnEl\n },\n\n setupVirtualCursor(ctx: Ctx) {\n if (isSafari()) return\n dom.createVirtualCursor(ctx)\n return () => {\n dom.getCursorEl(ctx)?.remove()\n }\n },\n\n preventTextSelection(ctx: Ctx) {\n const doc = dom.getDoc(ctx)\n const html = doc.documentElement\n const body = doc.body\n\n body.style.pointerEvents = \"none\"\n html.style.userSelect = \"none\"\n html.style.cursor = \"ew-resize\"\n\n return () => {\n body.style.pointerEvents = \"\"\n html.style.userSelect = \"\"\n html.style.cursor = \"\"\n if (!html.style.length) {\n html.removeAttribute(\"style\")\n }\n if (!body.style.length) {\n body.removeAttribute(\"style\")\n }\n }\n },\n\n getMousementValue(ctx: Ctx, event: MouseEvent) {\n const x = roundToDevicePixel(event.movementX)\n const y = roundToDevicePixel(event.movementY)\n\n let hint = x > 0 ? \"increment\" : x < 0 ? \"decrement\" : null\n\n if (ctx.isRtl && hint === \"increment\") hint = \"decrement\"\n if (ctx.isRtl && hint === \"decrement\") hint = \"increment\"\n\n const point = {\n x: ctx.scrubberCursorPoint!.x + x,\n y: ctx.scrubberCursorPoint!.y + y,\n }\n\n const win = dom.getWin(ctx)\n const width = win.innerWidth\n const half = roundToDevicePixel(7.5)\n point.x = wrap(point.x + half, width) - half\n\n return { hint, point }\n },\n\n createVirtualCursor(ctx: Ctx) {\n const doc = dom.getDoc(ctx)\n const el = doc.createElement(\"div\")\n el.className = \"scrubber--cursor\"\n el.id = dom.getCursorId(ctx)\n\n Object.assign(el.style, {\n width: \"15px\",\n height: \"15px\",\n position: \"fixed\",\n pointerEvents: \"none\",\n left: \"0px\",\n top: \"0px\",\n zIndex: MAX_Z_INDEX,\n transform: ctx.scrubberCursorPoint\n ? `translate3d(${ctx.scrubberCursorPoint.x}px, ${ctx.scrubberCursorPoint.y}px, 0px)`\n : undefined,\n willChange: \"transform\",\n })\n\n el.innerHTML = `\n <svg width=\"46\" height=\"15\" style=\"left: -15.5px; position: absolute; top: 0; filter: drop-shadow(rgba(0, 0, 0, 0.4) 0px 1px 1.1px);\">\n <g transform=\"translate(2 3)\">\n <path fill-rule=\"evenodd\" d=\"M 15 4.5L 15 2L 11.5 5.5L 15 9L 15 6.5L 31 6.5L 31 9L 34.5 5.5L 31 2L 31 4.5Z\" style=\"stroke-width: 2px; stroke: white;\"></path>\n <path fill-rule=\"evenodd\" d=\"M 15 4.5L 15 2L 11.5 5.5L 15 9L 15 6.5L 31 6.5L 31 9L 34.5 5.5L 31 2L 31 4.5Z\"></path>\n </g>\n </svg>`\n\n doc.body.appendChild(el)\n },\n})\n","import { isModifiedEvent } from \"@zag-js/dom-event\"\nimport { clamp, decrement, formatDecimal, increment } from \"@zag-js/number-utils\"\nimport type { JSX } from \"@zag-js/types\"\nimport type { MachineContext as Ctx } from \"./number-input.types\"\n\nexport const utils = {\n isValidNumericEvent: (ctx: Ctx, event: JSX.KeyboardEvent) => {\n if (event.key == null) return true\n const isModifier = isModifiedEvent(event)\n const isSingleKey = event.key.length === 1\n if (isModifier || !isSingleKey) return true\n return ctx.validateCharacter?.(event.key) ?? utils.isFloatingPoint(event.key)\n },\n isFloatingPoint: (v: string) => /^[0-9+\\-.]$/.test(v),\n sanitize: (ctx: Ctx, value: string) => {\n return value\n .split(\"\")\n .filter(ctx.validateCharacter ?? utils.isFloatingPoint)\n .join(\"\")\n },\n increment: (ctx: Ctx, step?: number) => {\n const value = increment(ctx.value, step ?? ctx.step)\n return formatDecimal(clamp(value, ctx), ctx)\n },\n decrement: (ctx: Ctx, step?: number) => {\n const value = decrement(ctx.value, step ?? ctx.step)\n return formatDecimal(clamp(value, ctx), ctx)\n },\n clamp: (ctx: Ctx) => {\n return formatDecimal(clamp(ctx.value, ctx), ctx)\n },\n parse: (ctx: Ctx, value: string) => {\n return ctx.parse?.(value) ?? value\n },\n format: (ctx: Ctx, value: string | number) => {\n const _val = value.toString()\n return ctx.format?.(_val) ?? _val\n },\n round: (ctx: Ctx) => {\n return formatDecimal(ctx.value, ctx)\n },\n}\n","import { choose, createMachine, guards } from \"@zag-js/core\"\nimport { addDomEvent, requestPointerLock } from \"@zag-js/dom-event\"\nimport { isSafari, raf } from \"@zag-js/dom-query\"\nimport { observeAttributes } from \"@zag-js/mutation-observer\"\nimport { isAtMax, isAtMin, isWithinRange, valueOf } from \"@zag-js/number-utils\"\nimport { callAll, compact, isEqual } from \"@zag-js/utils\"\nimport { dom } from \"./number-input.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./number-input.types\"\nimport { utils } from \"./number-input.utils\"\n\nconst { not, and } = guards\n\nexport function machine(userContext: UserDefinedContext) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n id: \"number-input\",\n initial: \"idle\",\n context: {\n dir: \"ltr\",\n focusInputOnChange: true,\n clampValueOnBlur: true,\n allowOverflow: false,\n inputMode: \"decimal\",\n pattern: \"[0-9]*(.[0-9]+)?\",\n hint: null,\n value: \"\",\n step: 1,\n min: Number.MIN_SAFE_INTEGER,\n max: Number.MAX_SAFE_INTEGER,\n scrubberCursorPoint: null,\n invalid: false,\n spinOnPress: true,\n ...ctx,\n translations: {\n incrementLabel: \"increment value\",\n decrementLabel: \"decrease value\",\n ...ctx.translations,\n },\n },\n\n computed: {\n isRtl: (ctx) => ctx.dir === \"rtl\",\n valueAsNumber: (ctx) => valueOf(ctx.value),\n isAtMin: (ctx) => isAtMin(ctx.value, ctx),\n isAtMax: (ctx) => isAtMax(ctx.value, ctx),\n isOutOfRange: (ctx) => !isWithinRange(ctx.value, ctx),\n isValueEmpty: (ctx) => ctx.value === \"\",\n canIncrement: (ctx) => ctx.allowOverflow || !ctx.isAtMax,\n canDecrement: (ctx) => ctx.allowOverflow || !ctx.isAtMin,\n valueText: (ctx) => ctx.translations.valueText?.(ctx.value),\n formattedValue: (ctx) => ctx.format?.(ctx.value).toString() ?? ctx.value,\n },\n\n watch: {\n value: [\"syncInputElement\"],\n isOutOfRange: [\"invokeOnInvalid\"],\n scrubberCursorPoint: [\"setVirtualCursorPosition\"],\n },\n\n entry: [\"syncInputValue\"],\n\n on: {\n SET_VALUE: {\n actions: [\"setValue\", \"clampValue\", \"setHintToSet\"],\n },\n CLEAR_VALUE: {\n actions: [\"clearValue\"],\n },\n INCREMENT: {\n actions: [\"increment\"],\n },\n DECREMENT: {\n actions: [\"decrement\"],\n },\n },\n\n states: {\n idle: {\n on: {\n PRESS_DOWN: {\n target: \"before:spin\",\n actions: [\"focusInput\", \"invokeOnFocus\", \"setHint\"],\n },\n PRESS_DOWN_SCRUBBER: {\n target: \"scrubbing\",\n actions: [\"focusInput\", \"invokeOnFocus\", \"setHint\", \"setCursorPoint\"],\n },\n FOCUS: {\n target: \"focused\",\n actions: [\"focusInput\", \"invokeOnFocus\"],\n },\n },\n },\n\n focused: {\n tags: \"focus\",\n entry: \"focusInput\",\n activities: \"attachWheelListener\",\n on: {\n PRESS_DOWN: {\n target: \"before:spin\",\n actions: [\"focusInput\", \"setHint\"],\n },\n PRESS_DOWN_SCRUBBER: {\n target: \"scrubbing\",\n actions: [\"focusInput\", \"setHint\", \"setCursorPoint\"],\n },\n ARROW_UP: {\n actions: \"increment\",\n },\n ARROW_DOWN: {\n actions: \"decrement\",\n },\n HOME: {\n actions: \"setToMin\",\n },\n END: {\n actions: \"setToMax\",\n },\n CHANGE: {\n actions: [\"setValue\", \"setHint\"],\n },\n BLUR: [\n {\n guard: \"isInvalidExponential\",\n target: \"idle\",\n actions: [\"clearValue\", \"clearHint\", \"invokeOnBlur\"],\n },\n {\n guard: and(\"clampOnBlur\", not(\"isInRange\"), not(\"isEmptyValue\")),\n target: \"idle\",\n actions: [\"clampValue\", \"clearHint\", \"invokeOnBlur\"],\n },\n {\n target: \"idle\",\n actions: [\"roundValue\", \"invokeOnBlur\"],\n },\n ],\n },\n },\n\n \"before:spin\": {\n tags: \"focus\",\n activities: \"trackButtonDisabled\",\n entry: choose([\n { guard: \"isIncrementHint\", actions: \"increment\" },\n { guard: \"isDecrementHint\", actions: \"decrement\" },\n ]),\n after: {\n CHANGE_DELAY: {\n target: \"spinning\",\n guard: and(\"isInRange\", \"spinOnPress\"),\n },\n },\n on: {\n PRESS_UP: {\n target: \"focused\",\n actions: \"clearHint\",\n },\n },\n },\n\n spinning: {\n tags: \"focus\",\n activities: \"trackButtonDisabled\",\n every: [\n {\n delay: \"CHANGE_INTERVAL\",\n guard: and(not(\"isAtMin\"), \"isIncrementHint\"),\n actions: \"increment\",\n },\n {\n delay: \"CHANGE_INTERVAL\",\n guard: and(not(\"isAtMax\"), \"isDecrementHint\"),\n actions: \"decrement\",\n },\n ],\n on: {\n PRESS_UP: {\n target: \"focused\",\n actions: \"clearHint\",\n },\n },\n },\n\n scrubbing: {\n tags: \"focus\",\n exit: \"clearCursorPoint\",\n activities: [\"activatePointerLock\", \"trackMousemove\", \"setupVirtualCursor\", \"preventTextSelection\"],\n on: {\n POINTER_UP_SCRUBBER: \"focused\",\n POINTER_MOVE_SCRUBBER: [\n {\n guard: \"isIncrementHint\",\n actions: [\"increment\", \"setCursorPoint\"],\n },\n {\n guard: \"isDecrementHint\",\n actions: [\"decrement\", \"setCursorPoint\"],\n },\n ],\n },\n },\n },\n },\n {\n delays: {\n CHANGE_INTERVAL: 50,\n CHANGE_DELAY: 300,\n },\n\n guards: {\n clampOnBlur: (ctx) => !!ctx.clampValueOnBlur,\n isAtMin: (ctx) => ctx.isAtMin,\n spinOnPress: (ctx) => !!ctx.spinOnPress,\n isAtMax: (ctx) => ctx.isAtMax,\n isInRange: (ctx) => !ctx.isOutOfRange,\n isDecrementHint: (ctx, evt) => (evt.hint ?? ctx.hint) === \"decrement\",\n isEmptyValue: (ctx) => ctx.isValueEmpty,\n isIncrementHint: (ctx, evt) => (evt.hint ?? ctx.hint) === \"increment\",\n isInvalidExponential: (ctx) => ctx.value.toString().startsWith(\"e\"),\n },\n\n activities: {\n setupVirtualCursor(ctx) {\n return dom.setupVirtualCursor(ctx)\n },\n preventTextSelection(ctx) {\n return dom.preventTextSelection(ctx)\n },\n trackButtonDisabled(ctx, _evt, { send }) {\n const btn = dom.getPressedTriggerEl(ctx, ctx.hint)\n return observeAttributes(btn, [\"disabled\"], () => {\n send(\"PRESS_UP\")\n })\n },\n attachWheelListener(ctx, _evt, { send }) {\n const input = dom.getInputEl(ctx)\n if (!input) return\n\n function onWheel(event: WheelEvent) {\n const isInputFocused = dom.getDoc(ctx).activeElement === input\n if (!ctx.allowMouseWheel || !isInputFocused) return\n event.preventDefault()\n\n const dir = Math.sign(event.deltaY) * -1\n if (dir === 1) {\n send(\"INCREMENT\")\n } else if (dir === -1) {\n send(\"DECREMENT\")\n }\n }\n return addDomEvent(input, \"wheel\", onWheel, { passive: false })\n },\n activatePointerLock(ctx) {\n if (isSafari()) return\n return requestPointerLock(dom.getDoc(ctx))\n },\n trackMousemove(ctx, _evt, { send }) {\n const doc = dom.getDoc(ctx)\n\n function onMousemove(event: MouseEvent) {\n if (!ctx.scrubberCursorPoint) return\n const value = dom.getMousementValue(ctx, event)\n if (!value.hint) return\n send({\n type: \"POINTER_MOVE_SCRUBBER\",\n hint: value.hint,\n point: value.point,\n })\n }\n\n function onMouseup() {\n send(\"POINTER_UP_SCRUBBER\")\n }\n\n return callAll(\n addDomEvent(doc, \"mousemove\", onMousemove, false),\n addDomEvent(doc, \"mouseup\", onMouseup, false),\n )\n },\n },\n\n actions: {\n focusInput(ctx) {\n if (!ctx.focusInputOnChange) return\n const inputEl = dom.getInputEl(ctx)\n raf(() => {\n inputEl?.focus()\n })\n },\n increment(ctx, evt) {\n set.value(ctx, utils.increment(ctx, evt.step))\n },\n decrement(ctx, evt) {\n set.value(ctx, utils.decrement(ctx, evt.step))\n },\n clampValue(ctx) {\n set.value(ctx, utils.clamp(ctx))\n },\n roundValue(ctx) {\n if (ctx.value === \"\") return\n set.value(ctx, utils.round(ctx))\n },\n setValue(ctx, evt) {\n let value = evt.target?.value ?? evt.value\n value = utils.sanitize(ctx, utils.parse(ctx, value.toString()))\n set.value(ctx, value)\n },\n clearValue(ctx) {\n set.value(ctx, \"\")\n },\n setToMax(ctx) {\n set.value(ctx, ctx.max.toString())\n },\n setToMin(ctx) {\n set.value(ctx, ctx.min.toString())\n },\n setHint(ctx, evt) {\n ctx.hint = evt.hint\n },\n clearHint(ctx) {\n ctx.hint = null\n },\n setHintToSet(ctx) {\n ctx.hint = \"set\"\n },\n invokeOnFocus(ctx, evt) {\n let srcElement: HTMLElement | null = null\n\n if (evt.type === \"PRESS_DOWN\") {\n srcElement = dom.getPressedTriggerEl(ctx, evt.hint)\n } else if (evt.type === \"FOCUS\") {\n srcElement = dom.getInputEl(ctx)\n } else if (evt.type === \"PRESS_DOWN_SCRUBBER\") {\n srcElement = dom.getScrubberEl(ctx)\n }\n\n ctx.onFocus?.({\n value: ctx.value,\n valueAsNumber: ctx.valueAsNumber,\n srcElement,\n })\n },\n invokeOnBlur(ctx) {\n ctx.onBlur?.({ value: ctx.value, valueAsNumber: ctx.valueAsNumber })\n },\n invokeOnInvalid(ctx) {\n if (!ctx.isOutOfRange) return\n const reason = ctx.valueAsNumber > ctx.max ? \"rangeOverflow\" : \"rangeUnderflow\"\n ctx.onInvalid?.({\n reason,\n value: ctx.formattedValue,\n valueAsNumber: ctx.valueAsNumber,\n })\n },\n syncInputElement(ctx) {\n const inputEl = dom.getInputEl(ctx)\n dom.setValue(inputEl, ctx.formattedValue)\n },\n syncInputValue(ctx) {\n const inputEl = dom.getInputEl(ctx)\n if (!inputEl || inputEl.value == ctx.value) return\n\n const value = utils.parse(ctx, inputEl.value)\n set.value(ctx, utils.sanitize(ctx, value))\n },\n setCursorPoint(ctx, evt) {\n ctx.scrubberCursorPoint = evt.point\n },\n clearCursorPoint(ctx) {\n ctx.scrubberCursorPoint = null\n },\n setVirtualCursorPosition(ctx) {\n const cursor = dom.getCursorEl(ctx)\n if (!cursor || !ctx.scrubberCursorPoint) return\n const { x, y } = ctx.scrubberCursorPoint\n cursor.style.transform = `translate3d(${x}px, ${y}px, 0px)`\n },\n },\n },\n )\n}\n\nconst invoke = {\n onChange: (ctx: MachineContext) => {\n ctx.onChange?.({ value: ctx.value, valueAsNumber: ctx.valueAsNumber })\n },\n}\n\nconst set = {\n value: (ctx: MachineContext, value: string) => {\n if (isEqual(ctx.value, value)) return\n ctx.value = value\n invoke.onChange(ctx)\n },\n}\n"],"mappings":"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","names":["import_dom_event","import_dom_query","import_number_utils","import_number_utils","import_dom_event","import_dom_query","import_number_utils","ctx"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/number-input.anatomy.ts","../src/number-input.connect.ts","../src/number-input.dom.ts","../src/number-input.utils.ts","../src/number-input.machine.ts"],"sourcesContent":["export { anatomy } from \"./number-input.anatomy\"\nexport { connect } from \"./number-input.connect\"\nexport { machine } from \"./number-input.machine\"\nexport type { UserDefinedContext as Context, MachineApi as Api } from \"./number-input.types\"\n","import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"numberInput\").parts(\n \"root\",\n \"label\",\n \"input\",\n \"control\",\n \"incrementTrigger\",\n \"decrementTrigger\",\n \"scrubber\",\n)\nexport const parts = anatomy.build()\n","import { getEventPoint, getEventStep, getNativeEvent, isLeftClick, type EventKeyMap } from \"@zag-js/dom-event\"\nimport { ariaAttr, dataAttr } from \"@zag-js/dom-query\"\nimport { roundToDevicePixel } from \"@zag-js/number-utils\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./number-input.anatomy\"\nimport { dom } from \"./number-input.dom\"\nimport type { MachineApi, Send, State } from \"./number-input.types\"\nimport { utils } from \"./number-input.utils\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): MachineApi<T> {\n const isFocused = state.hasTag(\"focus\")\n const isInvalid = state.context.isOutOfRange || !!state.context.invalid\n\n const isDisabled = !!state.context.disabled\n const isValueEmpty = state.context.isValueEmpty\n const isIncrementDisabled = isDisabled || !state.context.canIncrement\n const isDecrementDisabled = isDisabled || !state.context.canDecrement\n\n const translations = state.context.translations\n\n return {\n isFocused,\n isInvalid,\n isValueEmpty,\n value: state.context.formattedValue,\n valueAsNumber: state.context.valueAsNumber,\n\n setValue(value: string | number) {\n send({ type: \"SET_VALUE\", value: value.toString() })\n },\n\n clearValue() {\n send(\"CLEAR_VALUE\")\n },\n\n increment() {\n send(\"INCREMENT\")\n },\n\n decrement() {\n send(\"DECREMENT\")\n },\n\n setToMax() {\n send({ type: \"SET_VALUE\", value: state.context.max })\n },\n\n setToMin() {\n send({ type: \"SET_VALUE\", value: state.context.min })\n },\n\n focus() {\n dom.getInputEl(state.context)?.focus()\n },\n\n blur() {\n dom.getInputEl(state.context)?.blur()\n },\n\n rootProps: normalize.element({\n id: dom.getRootId(state.context),\n ...parts.root.attrs,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-focus\": dataAttr(isFocused),\n \"data-invalid\": dataAttr(isInvalid),\n }),\n\n labelProps: normalize.label({\n ...parts.label.attrs,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-focus\": dataAttr(isFocused),\n \"data-invalid\": dataAttr(isInvalid),\n id: dom.getLabelId(state.context),\n htmlFor: dom.getInputId(state.context),\n }),\n\n controlProps: normalize.element({\n ...parts.control.attrs,\n role: \"group\",\n \"aria-disabled\": isDisabled,\n \"data-focus\": dataAttr(isFocused),\n \"data-disabled\": dataAttr(isDisabled),\n \"data-invalid\": dataAttr(isInvalid),\n \"aria-invalid\": ariaAttr(state.context.invalid),\n }),\n\n inputProps: normalize.input({\n ...parts.input.attrs,\n name: state.context.name,\n form: state.context.form,\n id: dom.getInputId(state.context),\n role: \"spinbutton\",\n defaultValue: state.context.formattedValue,\n pattern: state.context.pattern,\n inputMode: state.context.inputMode,\n \"aria-invalid\": ariaAttr(isInvalid),\n \"data-invalid\": dataAttr(isInvalid),\n disabled: isDisabled,\n \"data-disabled\": dataAttr(isDisabled),\n readOnly: !!state.context.readOnly,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n spellCheck: \"false\",\n type: \"text\",\n \"aria-roledescription\": \"numberfield\",\n \"aria-valuemin\": state.context.min,\n \"aria-valuemax\": state.context.max,\n \"aria-valuenow\": isNaN(state.context.valueAsNumber) ? undefined : state.context.valueAsNumber,\n \"aria-valuetext\": state.context.valueText,\n onFocus() {\n send(\"FOCUS\")\n },\n onBlur() {\n send(\"BLUR\")\n },\n onChange(event) {\n send({ type: \"CHANGE\", target: event.currentTarget, hint: \"set\" })\n },\n onKeyDown(event) {\n const evt = getNativeEvent(event)\n // TODO: This blocks non-ascii characters\n if (evt.isComposing) return\n\n if (!utils.isValidNumericEvent(state.context, event)) {\n event.preventDefault()\n }\n\n const step = getEventStep(event) * state.context.step\n\n const keyMap: EventKeyMap = {\n ArrowUp() {\n send({ type: \"ARROW_UP\", step })\n },\n ArrowDown() {\n send({ type: \"ARROW_DOWN\", step })\n },\n Home() {\n send(\"HOME\")\n },\n End() {\n send(\"END\")\n },\n }\n\n const exec = keyMap[event.key]\n\n if (exec) {\n exec(event)\n event.preventDefault()\n }\n },\n }),\n\n decrementTriggerProps: normalize.button({\n ...parts.decrementTrigger.attrs,\n id: dom.getDecrementTriggerId(state.context),\n disabled: isDecrementDisabled,\n \"data-disabled\": dataAttr(isDecrementDisabled),\n \"aria-label\": translations.decrementLabel,\n type: \"button\",\n tabIndex: -1,\n \"aria-controls\": dom.getInputId(state.context),\n onPointerDown(event) {\n if (isDecrementDisabled) return\n send(isLeftClick(event) ? { type: \"PRESS_DOWN\", hint: \"decrement\" } : { type: \"FOCUS\" })\n event.preventDefault()\n },\n onPointerUp() {\n send({ type: \"PRESS_UP\", hint: \"decrement\" })\n },\n onPointerLeave() {\n if (isDecrementDisabled) return\n send({ type: \"PRESS_UP\", hint: \"decrement\" })\n },\n }),\n\n incrementTriggerProps: normalize.button({\n ...parts.incrementTrigger.attrs,\n id: dom.getIncrementTriggerId(state.context),\n disabled: isIncrementDisabled,\n \"data-disabled\": dataAttr(isIncrementDisabled),\n \"aria-label\": translations.incrementLabel,\n type: \"button\",\n tabIndex: -1,\n \"aria-controls\": dom.getInputId(state.context),\n onPointerDown(event) {\n if (isIncrementDisabled) return\n send(isLeftClick(event) ? { type: \"PRESS_DOWN\", hint: \"increment\" } : { type: \"FOCUS\" })\n event.preventDefault()\n },\n onPointerUp() {\n send({ type: \"PRESS_UP\", hint: \"increment\" })\n },\n onPointerLeave() {\n send({ type: \"PRESS_UP\", hint: \"increment\" })\n },\n }),\n\n scrubberProps: normalize.element({\n ...parts.scrubber.attrs,\n \"data-disabled\": dataAttr(isDisabled),\n id: dom.getScrubberId(state.context),\n role: \"presentation\",\n onMouseDown(event) {\n if (isDisabled) return\n\n const evt = getNativeEvent(event)\n\n const point = getEventPoint(evt)\n point.x = point.x - roundToDevicePixel(7.5)\n point.y = point.y - roundToDevicePixel(7.5)\n\n send({ type: \"PRESS_DOWN_SCRUBBER\", point })\n event.preventDefault()\n },\n style: {\n cursor: isDisabled ? undefined : \"ew-resize\",\n },\n }),\n }\n}\n","import { createScope, isSafari, MAX_Z_INDEX } from \"@zag-js/dom-query\"\nimport { roundToDevicePixel, wrap } from \"@zag-js/number-utils\"\nimport type { MachineContext as Ctx } from \"./number-input.types\"\n\nexport const dom = createScope({\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `number-input:${ctx.id}`,\n getInputId: (ctx: Ctx) => ctx.ids?.input ?? `number-input:${ctx.id}:input`,\n getIncrementTriggerId: (ctx: Ctx) => ctx.ids?.incrementTrigger ?? `number-input:${ctx.id}:inc`,\n getDecrementTriggerId: (ctx: Ctx) => ctx.ids?.decrementTrigger ?? `number-input:${ctx.id}:dec`,\n getScrubberId: (ctx: Ctx) => ctx.ids?.scrubber ?? `number-input:${ctx.id}:scrubber`,\n getCursorId: (ctx: Ctx) => `number-input:${ctx.id}:cursor`,\n getLabelId: (ctx: Ctx) => ctx.ids?.label ?? `number-input:${ctx.id}:label`,\n\n getInputEl: (ctx: Ctx) => dom.getById<HTMLInputElement>(ctx, dom.getInputId(ctx)),\n getIncrementTriggerEl: (ctx: Ctx) => dom.getById<HTMLButtonElement>(ctx, dom.getIncrementTriggerId(ctx)),\n getDecrementTriggerEl: (ctx: Ctx) => dom.getById<HTMLButtonElement>(ctx, dom.getDecrementTriggerId(ctx)),\n getScrubberEl: (ctx: Ctx) => dom.getById(ctx, dom.getScrubberId(ctx)),\n getCursorEl: (ctx: Ctx) => dom.getDoc(ctx).getElementById(dom.getCursorId(ctx)),\n\n getPressedTriggerEl: (ctx: Ctx, hint = ctx.hint) => {\n let btnEl: HTMLButtonElement | null = null\n if (hint === \"increment\") {\n btnEl = dom.getIncrementTriggerEl(ctx)\n }\n if (hint === \"decrement\") {\n btnEl = dom.getDecrementTriggerEl(ctx)\n }\n return btnEl\n },\n\n setupVirtualCursor(ctx: Ctx) {\n if (isSafari()) return\n dom.createVirtualCursor(ctx)\n return () => {\n dom.getCursorEl(ctx)?.remove()\n }\n },\n\n preventTextSelection(ctx: Ctx) {\n const doc = dom.getDoc(ctx)\n const html = doc.documentElement\n const body = doc.body\n\n body.style.pointerEvents = \"none\"\n html.style.userSelect = \"none\"\n html.style.cursor = \"ew-resize\"\n\n return () => {\n body.style.pointerEvents = \"\"\n html.style.userSelect = \"\"\n html.style.cursor = \"\"\n if (!html.style.length) {\n html.removeAttribute(\"style\")\n }\n if (!body.style.length) {\n body.removeAttribute(\"style\")\n }\n }\n },\n\n getMousementValue(ctx: Ctx, event: MouseEvent) {\n const x = roundToDevicePixel(event.movementX)\n const y = roundToDevicePixel(event.movementY)\n\n let hint = x > 0 ? \"increment\" : x < 0 ? \"decrement\" : null\n\n if (ctx.isRtl && hint === \"increment\") hint = \"decrement\"\n if (ctx.isRtl && hint === \"decrement\") hint = \"increment\"\n\n const point = {\n x: ctx.scrubberCursorPoint!.x + x,\n y: ctx.scrubberCursorPoint!.y + y,\n }\n\n const win = dom.getWin(ctx)\n const width = win.innerWidth\n const half = roundToDevicePixel(7.5)\n point.x = wrap(point.x + half, width) - half\n\n return { hint, point }\n },\n\n createVirtualCursor(ctx: Ctx) {\n const doc = dom.getDoc(ctx)\n const el = doc.createElement(\"div\")\n el.className = \"scrubber--cursor\"\n el.id = dom.getCursorId(ctx)\n\n Object.assign(el.style, {\n width: \"15px\",\n height: \"15px\",\n position: \"fixed\",\n pointerEvents: \"none\",\n left: \"0px\",\n top: \"0px\",\n zIndex: MAX_Z_INDEX,\n transform: ctx.scrubberCursorPoint\n ? `translate3d(${ctx.scrubberCursorPoint.x}px, ${ctx.scrubberCursorPoint.y}px, 0px)`\n : undefined,\n willChange: \"transform\",\n })\n\n el.innerHTML = `\n <svg width=\"46\" height=\"15\" style=\"left: -15.5px; position: absolute; top: 0; filter: drop-shadow(rgba(0, 0, 0, 0.4) 0px 1px 1.1px);\">\n <g transform=\"translate(2 3)\">\n <path fill-rule=\"evenodd\" d=\"M 15 4.5L 15 2L 11.5 5.5L 15 9L 15 6.5L 31 6.5L 31 9L 34.5 5.5L 31 2L 31 4.5Z\" style=\"stroke-width: 2px; stroke: white;\"></path>\n <path fill-rule=\"evenodd\" d=\"M 15 4.5L 15 2L 11.5 5.5L 15 9L 15 6.5L 31 6.5L 31 9L 34.5 5.5L 31 2L 31 4.5Z\"></path>\n </g>\n </svg>`\n\n doc.body.appendChild(el)\n },\n})\n","import { isModifiedEvent } from \"@zag-js/dom-event\"\nimport { clamp, decrement, formatDecimal, increment } from \"@zag-js/number-utils\"\nimport type { JSX } from \"@zag-js/types\"\nimport type { MachineContext as Ctx } from \"./number-input.types\"\n\nexport const utils = {\n isValidNumericEvent: (ctx: Ctx, event: JSX.KeyboardEvent) => {\n if (event.key == null) return true\n const isModifier = isModifiedEvent(event)\n const isSingleKey = event.key.length === 1\n if (isModifier || !isSingleKey) return true\n return ctx.validateCharacter?.(event.key) ?? utils.isFloatingPoint(event.key)\n },\n isFloatingPoint: (v: string) => /^[0-9+\\-.]$/.test(v),\n sanitize: (ctx: Ctx, value: string) => {\n return value\n .split(\"\")\n .filter(ctx.validateCharacter ?? utils.isFloatingPoint)\n .join(\"\")\n },\n increment: (ctx: Ctx, step?: number) => {\n const value = increment(ctx.value, step ?? ctx.step)\n return formatDecimal(clamp(value, ctx), ctx)\n },\n decrement: (ctx: Ctx, step?: number) => {\n const value = decrement(ctx.value, step ?? ctx.step)\n return formatDecimal(clamp(value, ctx), ctx)\n },\n clamp: (ctx: Ctx) => {\n return formatDecimal(clamp(ctx.value, ctx), ctx)\n },\n parse: (ctx: Ctx, value: string) => {\n return ctx.parse?.(value) ?? value\n },\n format: (ctx: Ctx, value: string | number) => {\n const _val = value.toString()\n return ctx.format?.(_val) ?? _val\n },\n round: (ctx: Ctx) => {\n return formatDecimal(ctx.value, ctx)\n },\n}\n","import { choose, createMachine, guards } from \"@zag-js/core\"\nimport { addDomEvent, requestPointerLock } from \"@zag-js/dom-event\"\nimport { isSafari, raf } from \"@zag-js/dom-query\"\nimport { observeAttributes } from \"@zag-js/mutation-observer\"\nimport { isAtMax, isAtMin, isWithinRange, valueOf } from \"@zag-js/number-utils\"\nimport { callAll, compact, isEqual, match } from \"@zag-js/utils\"\nimport { dom } from \"./number-input.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./number-input.types\"\nimport { utils } from \"./number-input.utils\"\n\nconst { not, and } = guards\n\nexport function machine(userContext: UserDefinedContext) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n id: \"number-input\",\n initial: \"idle\",\n context: {\n dir: \"ltr\",\n focusInputOnChange: true,\n clampValueOnBlur: true,\n allowOverflow: false,\n inputMode: \"decimal\",\n pattern: \"[0-9]*(.[0-9]+)?\",\n hint: null,\n value: \"\",\n step: 1,\n min: Number.MIN_SAFE_INTEGER,\n max: Number.MAX_SAFE_INTEGER,\n scrubberCursorPoint: null,\n invalid: false,\n spinOnPress: true,\n ...ctx,\n translations: {\n incrementLabel: \"increment value\",\n decrementLabel: \"decrease value\",\n ...ctx.translations,\n },\n },\n\n computed: {\n isRtl: (ctx) => ctx.dir === \"rtl\",\n valueAsNumber: (ctx) => valueOf(ctx.value),\n isAtMin: (ctx) => isAtMin(ctx.value, ctx),\n isAtMax: (ctx) => isAtMax(ctx.value, ctx),\n isOutOfRange: (ctx) => !isWithinRange(ctx.value, ctx),\n isValueEmpty: (ctx) => ctx.value === \"\",\n canIncrement: (ctx) => ctx.allowOverflow || !ctx.isAtMax,\n canDecrement: (ctx) => ctx.allowOverflow || !ctx.isAtMin,\n valueText: (ctx) => ctx.translations.valueText?.(ctx.value),\n formattedValue: (ctx) => ctx.format?.(ctx.value).toString() ?? ctx.value,\n },\n\n watch: {\n value: [\"syncInputElement\"],\n isOutOfRange: [\"invokeOnInvalid\"],\n scrubberCursorPoint: [\"setVirtualCursorPosition\"],\n },\n\n entry: [\"syncInputValue\"],\n\n on: {\n SET_VALUE: {\n actions: [\"setValue\", \"clampValue\", \"setHintToSet\"],\n },\n CLEAR_VALUE: {\n actions: [\"clearValue\"],\n },\n INCREMENT: {\n actions: [\"increment\"],\n },\n DECREMENT: {\n actions: [\"decrement\"],\n },\n },\n\n states: {\n idle: {\n on: {\n PRESS_DOWN: {\n target: \"before:spin\",\n actions: [\"focusInput\", \"invokeOnFocus\", \"setHint\"],\n },\n PRESS_DOWN_SCRUBBER: {\n target: \"scrubbing\",\n actions: [\"focusInput\", \"invokeOnFocus\", \"setHint\", \"setCursorPoint\"],\n },\n FOCUS: {\n target: \"focused\",\n actions: [\"focusInput\", \"invokeOnFocus\"],\n },\n },\n },\n\n focused: {\n tags: \"focus\",\n entry: \"focusInput\",\n activities: \"attachWheelListener\",\n on: {\n PRESS_DOWN: {\n target: \"before:spin\",\n actions: [\"focusInput\", \"setHint\"],\n },\n PRESS_DOWN_SCRUBBER: {\n target: \"scrubbing\",\n actions: [\"focusInput\", \"setHint\", \"setCursorPoint\"],\n },\n ARROW_UP: {\n actions: \"increment\",\n },\n ARROW_DOWN: {\n actions: \"decrement\",\n },\n HOME: {\n actions: \"setToMin\",\n },\n END: {\n actions: \"setToMax\",\n },\n CHANGE: {\n actions: [\"setValue\", \"setHint\"],\n },\n BLUR: [\n {\n guard: \"isInvalidExponential\",\n target: \"idle\",\n actions: [\"clearValue\", \"clearHint\", \"invokeOnBlur\"],\n },\n {\n guard: and(\"clampOnBlur\", not(\"isInRange\"), not(\"isEmptyValue\")),\n target: \"idle\",\n actions: [\"clampValue\", \"clearHint\", \"invokeOnBlur\"],\n },\n {\n target: \"idle\",\n actions: [\"roundValue\", \"invokeOnBlur\"],\n },\n ],\n },\n },\n\n \"before:spin\": {\n tags: \"focus\",\n activities: \"trackButtonDisabled\",\n entry: choose([\n { guard: \"isIncrementHint\", actions: \"increment\" },\n { guard: \"isDecrementHint\", actions: \"decrement\" },\n ]),\n after: {\n CHANGE_DELAY: {\n target: \"spinning\",\n guard: and(\"isInRange\", \"spinOnPress\"),\n },\n },\n on: {\n PRESS_UP: {\n target: \"focused\",\n actions: \"clearHint\",\n },\n },\n },\n\n spinning: {\n tags: \"focus\",\n activities: \"trackButtonDisabled\",\n every: [\n {\n delay: \"CHANGE_INTERVAL\",\n guard: and(not(\"isAtMin\"), \"isIncrementHint\"),\n actions: \"increment\",\n },\n {\n delay: \"CHANGE_INTERVAL\",\n guard: and(not(\"isAtMax\"), \"isDecrementHint\"),\n actions: \"decrement\",\n },\n ],\n on: {\n PRESS_UP: {\n target: \"focused\",\n actions: \"clearHint\",\n },\n },\n },\n\n scrubbing: {\n tags: \"focus\",\n exit: \"clearCursorPoint\",\n activities: [\"activatePointerLock\", \"trackMousemove\", \"setupVirtualCursor\", \"preventTextSelection\"],\n on: {\n POINTER_UP_SCRUBBER: \"focused\",\n POINTER_MOVE_SCRUBBER: [\n {\n guard: \"isIncrementHint\",\n actions: [\"increment\", \"setCursorPoint\"],\n },\n {\n guard: \"isDecrementHint\",\n actions: [\"decrement\", \"setCursorPoint\"],\n },\n ],\n },\n },\n },\n },\n {\n delays: {\n CHANGE_INTERVAL: 50,\n CHANGE_DELAY: 300,\n },\n\n guards: {\n clampOnBlur: (ctx) => !!ctx.clampValueOnBlur,\n isAtMin: (ctx) => ctx.isAtMin,\n spinOnPress: (ctx) => !!ctx.spinOnPress,\n isAtMax: (ctx) => ctx.isAtMax,\n isInRange: (ctx) => !ctx.isOutOfRange,\n isDecrementHint: (ctx, evt) => (evt.hint ?? ctx.hint) === \"decrement\",\n isEmptyValue: (ctx) => ctx.isValueEmpty,\n isIncrementHint: (ctx, evt) => (evt.hint ?? ctx.hint) === \"increment\",\n isInvalidExponential: (ctx) => ctx.value.toString().startsWith(\"e\"),\n },\n\n activities: {\n setupVirtualCursor(ctx) {\n return dom.setupVirtualCursor(ctx)\n },\n preventTextSelection(ctx) {\n return dom.preventTextSelection(ctx)\n },\n trackButtonDisabled(ctx, _evt, { send }) {\n const btn = dom.getPressedTriggerEl(ctx, ctx.hint)\n return observeAttributes(btn, [\"disabled\"], () => {\n send(\"PRESS_UP\")\n })\n },\n attachWheelListener(ctx, _evt, { send }) {\n const input = dom.getInputEl(ctx)\n if (!input) return\n\n function onWheel(event: WheelEvent) {\n const isInputFocused = dom.getDoc(ctx).activeElement === input\n if (!ctx.allowMouseWheel || !isInputFocused) return\n event.preventDefault()\n\n const dir = Math.sign(event.deltaY) * -1\n if (dir === 1) {\n send(\"INCREMENT\")\n } else if (dir === -1) {\n send(\"DECREMENT\")\n }\n }\n return addDomEvent(input, \"wheel\", onWheel, { passive: false })\n },\n activatePointerLock(ctx) {\n if (isSafari()) return\n return requestPointerLock(dom.getDoc(ctx))\n },\n trackMousemove(ctx, _evt, { send }) {\n const doc = dom.getDoc(ctx)\n\n function onMousemove(event: MouseEvent) {\n if (!ctx.scrubberCursorPoint) return\n const value = dom.getMousementValue(ctx, event)\n if (!value.hint) return\n send({\n type: \"POINTER_MOVE_SCRUBBER\",\n hint: value.hint,\n point: value.point,\n })\n }\n\n function onMouseup() {\n send(\"POINTER_UP_SCRUBBER\")\n }\n\n return callAll(\n addDomEvent(doc, \"mousemove\", onMousemove, false),\n addDomEvent(doc, \"mouseup\", onMouseup, false),\n )\n },\n },\n\n actions: {\n focusInput(ctx) {\n if (!ctx.focusInputOnChange) return\n const inputEl = dom.getInputEl(ctx)\n raf(() => {\n inputEl?.focus()\n })\n },\n increment(ctx, evt) {\n set.value(ctx, utils.increment(ctx, evt.step))\n },\n decrement(ctx, evt) {\n set.value(ctx, utils.decrement(ctx, evt.step))\n },\n clampValue(ctx) {\n set.value(ctx, utils.clamp(ctx))\n },\n roundValue(ctx) {\n if (ctx.value === \"\") return\n set.value(ctx, utils.round(ctx))\n },\n setValue(ctx, evt) {\n let value = evt.target?.value ?? evt.value\n value = utils.sanitize(ctx, utils.parse(ctx, value.toString()))\n set.value(ctx, value)\n },\n clearValue(ctx) {\n set.value(ctx, \"\")\n },\n setToMax(ctx) {\n set.value(ctx, ctx.max.toString())\n },\n setToMin(ctx) {\n set.value(ctx, ctx.min.toString())\n },\n setHint(ctx, evt) {\n ctx.hint = evt.hint\n },\n clearHint(ctx) {\n ctx.hint = null\n },\n setHintToSet(ctx) {\n ctx.hint = \"set\"\n },\n invokeOnFocus(ctx, evt) {\n const srcElement: HTMLElement | null = match(evt.type, {\n PRESS_DOWN: dom.getPressedTriggerEl(ctx, evt.hint),\n FOCUS: dom.getInputEl(ctx),\n PRESS_DOWN_SCRUBBER: dom.getScrubberEl(ctx),\n })\n ctx.onFocusChange?.({\n focused: true,\n srcElement,\n value: ctx.formattedValue,\n valueAsNumber: ctx.valueAsNumber,\n })\n },\n invokeOnBlur(ctx) {\n ctx.onFocusChange?.({\n focused: false,\n value: ctx.formattedValue,\n valueAsNumber: ctx.valueAsNumber,\n })\n },\n invokeOnInvalid(ctx) {\n if (!ctx.isOutOfRange) return\n const reason = ctx.valueAsNumber > ctx.max ? \"rangeOverflow\" : \"rangeUnderflow\"\n ctx.onValueInvalid?.({\n reason,\n value: ctx.formattedValue,\n valueAsNumber: ctx.valueAsNumber,\n })\n },\n syncInputElement(ctx) {\n const inputEl = dom.getInputEl(ctx)\n dom.setValue(inputEl, ctx.formattedValue)\n },\n syncInputValue(ctx) {\n const inputEl = dom.getInputEl(ctx)\n if (!inputEl || inputEl.value == ctx.value) return\n\n const value = utils.parse(ctx, inputEl.value)\n set.value(ctx, utils.sanitize(ctx, value))\n },\n setCursorPoint(ctx, evt) {\n ctx.scrubberCursorPoint = evt.point\n },\n clearCursorPoint(ctx) {\n ctx.scrubberCursorPoint = null\n },\n setVirtualCursorPosition(ctx) {\n const cursor = dom.getCursorEl(ctx)\n if (!cursor || !ctx.scrubberCursorPoint) return\n const { x, y } = ctx.scrubberCursorPoint\n cursor.style.transform = `translate3d(${x}px, ${y}px, 0px)`\n },\n },\n },\n )\n}\n\nconst invoke = {\n onChange: (ctx: MachineContext) => {\n ctx.onValueChange?.({ value: ctx.value, valueAsNumber: ctx.valueAsNumber })\n },\n}\n\nconst set = {\n value: (ctx: MachineContext, value: string) => {\n if (isEqual(ctx.value, value)) return\n ctx.value = value\n invoke.onChange(ctx)\n },\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,qBAA8B;AAEvB,IAAM,cAAU,8BAAc,aAAa,EAAE;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACO,IAAM,QAAQ,QAAQ,MAAM;;;ACXnC,IAAAA,oBAA2F;AAC3F,IAAAC,oBAAmC;AACnC,IAAAC,uBAAmC;;;ACFnC,uBAAmD;AACnD,0BAAyC;AAGlC,IAAM,UAAM,8BAAY;AAAA,EAC7B,WAAW,CAAC,QAAa,IAAI,KAAK,QAAQ,gBAAgB,IAAI,EAAE;AAAA,EAChE,YAAY,CAAC,QAAa,IAAI,KAAK,SAAS,gBAAgB,IAAI,EAAE;AAAA,EAClE,uBAAuB,CAAC,QAAa,IAAI,KAAK,oBAAoB,gBAAgB,IAAI,EAAE;AAAA,EACxF,uBAAuB,CAAC,QAAa,IAAI,KAAK,oBAAoB,gBAAgB,IAAI,EAAE;AAAA,EACxF,eAAe,CAAC,QAAa,IAAI,KAAK,YAAY,gBAAgB,IAAI,EAAE;AAAA,EACxE,aAAa,CAAC,QAAa,gBAAgB,IAAI,EAAE;AAAA,EACjD,YAAY,CAAC,QAAa,IAAI,KAAK,SAAS,gBAAgB,IAAI,EAAE;AAAA,EAElE,YAAY,CAAC,QAAa,IAAI,QAA0B,KAAK,IAAI,WAAW,GAAG,CAAC;AAAA,EAChF,uBAAuB,CAAC,QAAa,IAAI,QAA2B,KAAK,IAAI,sBAAsB,GAAG,CAAC;AAAA,EACvG,uBAAuB,CAAC,QAAa,IAAI,QAA2B,KAAK,IAAI,sBAAsB,GAAG,CAAC;AAAA,EACvG,eAAe,CAAC,QAAa,IAAI,QAAQ,KAAK,IAAI,cAAc,GAAG,CAAC;AAAA,EACpE,aAAa,CAAC,QAAa,IAAI,OAAO,GAAG,EAAE,eAAe,IAAI,YAAY,GAAG,CAAC;AAAA,EAE9E,qBAAqB,CAAC,KAAU,OAAO,IAAI,SAAS;AAClD,QAAI,QAAkC;AACtC,QAAI,SAAS,aAAa;AACxB,cAAQ,IAAI,sBAAsB,GAAG;AAAA,IACvC;AACA,QAAI,SAAS,aAAa;AACxB,cAAQ,IAAI,sBAAsB,GAAG;AAAA,IACvC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,mBAAmB,KAAU;AAC3B,YAAI,2BAAS;AAAG;AAChB,QAAI,oBAAoB,GAAG;AAC3B,WAAO,MAAM;AACX,UAAI,YAAY,GAAG,GAAG,OAAO;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,qBAAqB,KAAU;AAC7B,UAAM,MAAM,IAAI,OAAO,GAAG;AAC1B,UAAM,OAAO,IAAI;AACjB,UAAM,OAAO,IAAI;AAEjB,SAAK,MAAM,gBAAgB;AAC3B,SAAK,MAAM,aAAa;AACxB,SAAK,MAAM,SAAS;AAEpB,WAAO,MAAM;AACX,WAAK,MAAM,gBAAgB;AAC3B,WAAK,MAAM,aAAa;AACxB,WAAK,MAAM,SAAS;AACpB,UAAI,CAAC,KAAK,MAAM,QAAQ;AACtB,aAAK,gBAAgB,OAAO;AAAA,MAC9B;AACA,UAAI,CAAC,KAAK,MAAM,QAAQ;AACtB,aAAK,gBAAgB,OAAO;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,kBAAkB,KAAU,OAAmB;AAC7C,UAAM,QAAI,wCAAmB,MAAM,SAAS;AAC5C,UAAM,QAAI,wCAAmB,MAAM,SAAS;AAE5C,QAAI,OAAO,IAAI,IAAI,cAAc,IAAI,IAAI,cAAc;AAEvD,QAAI,IAAI,SAAS,SAAS;AAAa,aAAO;AAC9C,QAAI,IAAI,SAAS,SAAS;AAAa,aAAO;AAE9C,UAAM,QAAQ;AAAA,MACZ,GAAG,IAAI,oBAAqB,IAAI;AAAA,MAChC,GAAG,IAAI,oBAAqB,IAAI;AAAA,IAClC;AAEA,UAAM,MAAM,IAAI,OAAO,GAAG;AAC1B,UAAM,QAAQ,IAAI;AAClB,UAAM,WAAO,wCAAmB,GAAG;AACnC,UAAM,QAAI,0BAAK,MAAM,IAAI,MAAM,KAAK,IAAI;AAExC,WAAO,EAAE,MAAM,MAAM;AAAA,EACvB;AAAA,EAEA,oBAAoB,KAAU;AAC5B,UAAM,MAAM,IAAI,OAAO,GAAG;AAC1B,UAAM,KAAK,IAAI,cAAc,KAAK;AAClC,OAAG,YAAY;AACf,OAAG,KAAK,IAAI,YAAY,GAAG;AAE3B,WAAO,OAAO,GAAG,OAAO;AAAA,MACtB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,eAAe;AAAA,MACf,MAAM;AAAA,MACN,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,WAAW,IAAI,sBACX,eAAe,IAAI,oBAAoB,CAAC,OAAO,IAAI,oBAAoB,CAAC,aACxE;AAAA,MACJ,YAAY;AAAA,IACd,CAAC;AAED,OAAG,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQf,QAAI,KAAK,YAAY,EAAE;AAAA,EACzB;AACF,CAAC;;;AChHD,uBAAgC;AAChC,IAAAC,uBAA2D;AAIpD,IAAM,QAAQ;AAAA,EACnB,qBAAqB,CAAC,KAAU,UAA6B;AAC3D,QAAI,MAAM,OAAO;AAAM,aAAO;AAC9B,UAAM,iBAAa,kCAAgB,KAAK;AACxC,UAAM,cAAc,MAAM,IAAI,WAAW;AACzC,QAAI,cAAc,CAAC;AAAa,aAAO;AACvC,WAAO,IAAI,oBAAoB,MAAM,GAAG,KAAK,MAAM,gBAAgB,MAAM,GAAG;AAAA,EAC9E;AAAA,EACA,iBAAiB,CAAC,MAAc,cAAc,KAAK,CAAC;AAAA,EACpD,UAAU,CAAC,KAAU,UAAkB;AACrC,WAAO,MACJ,MAAM,EAAE,EACR,OAAO,IAAI,qBAAqB,MAAM,eAAe,EACrD,KAAK,EAAE;AAAA,EACZ;AAAA,EACA,WAAW,CAAC,KAAU,SAAkB;AACtC,UAAM,YAAQ,gCAAU,IAAI,OAAO,QAAQ,IAAI,IAAI;AACnD,eAAO,wCAAc,4BAAM,OAAO,GAAG,GAAG,GAAG;AAAA,EAC7C;AAAA,EACA,WAAW,CAAC,KAAU,SAAkB;AACtC,UAAM,YAAQ,gCAAU,IAAI,OAAO,QAAQ,IAAI,IAAI;AACnD,eAAO,wCAAc,4BAAM,OAAO,GAAG,GAAG,GAAG;AAAA,EAC7C;AAAA,EACA,OAAO,CAAC,QAAa;AACnB,eAAO,wCAAc,4BAAM,IAAI,OAAO,GAAG,GAAG,GAAG;AAAA,EACjD;AAAA,EACA,OAAO,CAAC,KAAU,UAAkB;AAClC,WAAO,IAAI,QAAQ,KAAK,KAAK;AAAA,EAC/B;AAAA,EACA,QAAQ,CAAC,KAAU,UAA2B;AAC5C,UAAM,OAAO,MAAM,SAAS;AAC5B,WAAO,IAAI,SAAS,IAAI,KAAK;AAAA,EAC/B;AAAA,EACA,OAAO,CAAC,QAAa;AACnB,eAAO,oCAAc,IAAI,OAAO,GAAG;AAAA,EACrC;AACF;;;AFhCO,SAAS,QAA6B,OAAc,MAAY,WAA6C;AAClH,QAAM,YAAY,MAAM,OAAO,OAAO;AACtC,QAAM,YAAY,MAAM,QAAQ,gBAAgB,CAAC,CAAC,MAAM,QAAQ;AAEhE,QAAM,aAAa,CAAC,CAAC,MAAM,QAAQ;AACnC,QAAM,eAAe,MAAM,QAAQ;AACnC,QAAM,sBAAsB,cAAc,CAAC,MAAM,QAAQ;AACzD,QAAM,sBAAsB,cAAc,CAAC,MAAM,QAAQ;AAEzD,QAAM,eAAe,MAAM,QAAQ;AAEnC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,MAAM,QAAQ;AAAA,IACrB,eAAe,MAAM,QAAQ;AAAA,IAE7B,SAAS,OAAwB;AAC/B,WAAK,EAAE,MAAM,aAAa,OAAO,MAAM,SAAS,EAAE,CAAC;AAAA,IACrD;AAAA,IAEA,aAAa;AACX,WAAK,aAAa;AAAA,IACpB;AAAA,IAEA,YAAY;AACV,WAAK,WAAW;AAAA,IAClB;AAAA,IAEA,YAAY;AACV,WAAK,WAAW;AAAA,IAClB;AAAA,IAEA,WAAW;AACT,WAAK,EAAE,MAAM,aAAa,OAAO,MAAM,QAAQ,IAAI,CAAC;AAAA,IACtD;AAAA,IAEA,WAAW;AACT,WAAK,EAAE,MAAM,aAAa,OAAO,MAAM,QAAQ,IAAI,CAAC;AAAA,IACtD;AAAA,IAEA,QAAQ;AACN,UAAI,WAAW,MAAM,OAAO,GAAG,MAAM;AAAA,IACvC;AAAA,IAEA,OAAO;AACL,UAAI,WAAW,MAAM,OAAO,GAAG,KAAK;AAAA,IACtC;AAAA,IAEA,WAAW,UAAU,QAAQ;AAAA,MAC3B,IAAI,IAAI,UAAU,MAAM,OAAO;AAAA,MAC/B,GAAG,MAAM,KAAK;AAAA,MACd,qBAAiB,4BAAS,UAAU;AAAA,MACpC,kBAAc,4BAAS,SAAS;AAAA,MAChC,oBAAgB,4BAAS,SAAS;AAAA,IACpC,CAAC;AAAA,IAED,YAAY,UAAU,MAAM;AAAA,MAC1B,GAAG,MAAM,MAAM;AAAA,MACf,qBAAiB,4BAAS,UAAU;AAAA,MACpC,kBAAc,4BAAS,SAAS;AAAA,MAChC,oBAAgB,4BAAS,SAAS;AAAA,MAClC,IAAI,IAAI,WAAW,MAAM,OAAO;AAAA,MAChC,SAAS,IAAI,WAAW,MAAM,OAAO;AAAA,IACvC,CAAC;AAAA,IAED,cAAc,UAAU,QAAQ;AAAA,MAC9B,GAAG,MAAM,QAAQ;AAAA,MACjB,MAAM;AAAA,MACN,iBAAiB;AAAA,MACjB,kBAAc,4BAAS,SAAS;AAAA,MAChC,qBAAiB,4BAAS,UAAU;AAAA,MACpC,oBAAgB,4BAAS,SAAS;AAAA,MAClC,oBAAgB,4BAAS,MAAM,QAAQ,OAAO;AAAA,IAChD,CAAC;AAAA,IAED,YAAY,UAAU,MAAM;AAAA,MAC1B,GAAG,MAAM,MAAM;AAAA,MACf,MAAM,MAAM,QAAQ;AAAA,MACpB,MAAM,MAAM,QAAQ;AAAA,MACpB,IAAI,IAAI,WAAW,MAAM,OAAO;AAAA,MAChC,MAAM;AAAA,MACN,cAAc,MAAM,QAAQ;AAAA,MAC5B,SAAS,MAAM,QAAQ;AAAA,MACvB,WAAW,MAAM,QAAQ;AAAA,MACzB,oBAAgB,4BAAS,SAAS;AAAA,MAClC,oBAAgB,4BAAS,SAAS;AAAA,MAClC,UAAU;AAAA,MACV,qBAAiB,4BAAS,UAAU;AAAA,MACpC,UAAU,CAAC,CAAC,MAAM,QAAQ;AAAA,MAC1B,cAAc;AAAA,MACd,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,MAAM;AAAA,MACN,wBAAwB;AAAA,MACxB,iBAAiB,MAAM,QAAQ;AAAA,MAC/B,iBAAiB,MAAM,QAAQ;AAAA,MAC/B,iBAAiB,MAAM,MAAM,QAAQ,aAAa,IAAI,SAAY,MAAM,QAAQ;AAAA,MAChF,kBAAkB,MAAM,QAAQ;AAAA,MAChC,UAAU;AACR,aAAK,OAAO;AAAA,MACd;AAAA,MACA,SAAS;AACP,aAAK,MAAM;AAAA,MACb;AAAA,MACA,SAAS,OAAO;AACd,aAAK,EAAE,MAAM,UAAU,QAAQ,MAAM,eAAe,MAAM,MAAM,CAAC;AAAA,MACnE;AAAA,MACA,UAAU,OAAO;AACf,cAAM,UAAM,kCAAe,KAAK;AAEhC,YAAI,IAAI;AAAa;AAErB,YAAI,CAAC,MAAM,oBAAoB,MAAM,SAAS,KAAK,GAAG;AACpD,gBAAM,eAAe;AAAA,QACvB;AAEA,cAAM,WAAO,gCAAa,KAAK,IAAI,MAAM,QAAQ;AAEjD,cAAM,SAAsB;AAAA,UAC1B,UAAU;AACR,iBAAK,EAAE,MAAM,YAAY,KAAK,CAAC;AAAA,UACjC;AAAA,UACA,YAAY;AACV,iBAAK,EAAE,MAAM,cAAc,KAAK,CAAC;AAAA,UACnC;AAAA,UACA,OAAO;AACL,iBAAK,MAAM;AAAA,UACb;AAAA,UACA,MAAM;AACJ,iBAAK,KAAK;AAAA,UACZ;AAAA,QACF;AAEA,cAAM,OAAO,OAAO,MAAM,GAAG;AAE7B,YAAI,MAAM;AACR,eAAK,KAAK;AACV,gBAAM,eAAe;AAAA,QACvB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,IAED,uBAAuB,UAAU,OAAO;AAAA,MACtC,GAAG,MAAM,iBAAiB;AAAA,MAC1B,IAAI,IAAI,sBAAsB,MAAM,OAAO;AAAA,MAC3C,UAAU;AAAA,MACV,qBAAiB,4BAAS,mBAAmB;AAAA,MAC7C,cAAc,aAAa;AAAA,MAC3B,MAAM;AAAA,MACN,UAAU;AAAA,MACV,iBAAiB,IAAI,WAAW,MAAM,OAAO;AAAA,MAC7C,cAAc,OAAO;AACnB,YAAI;AAAqB;AACzB,iBAAK,+BAAY,KAAK,IAAI,EAAE,MAAM,cAAc,MAAM,YAAY,IAAI,EAAE,MAAM,QAAQ,CAAC;AACvF,cAAM,eAAe;AAAA,MACvB;AAAA,MACA,cAAc;AACZ,aAAK,EAAE,MAAM,YAAY,MAAM,YAAY,CAAC;AAAA,MAC9C;AAAA,MACA,iBAAiB;AACf,YAAI;AAAqB;AACzB,aAAK,EAAE,MAAM,YAAY,MAAM,YAAY,CAAC;AAAA,MAC9C;AAAA,IACF,CAAC;AAAA,IAED,uBAAuB,UAAU,OAAO;AAAA,MACtC,GAAG,MAAM,iBAAiB;AAAA,MAC1B,IAAI,IAAI,sBAAsB,MAAM,OAAO;AAAA,MAC3C,UAAU;AAAA,MACV,qBAAiB,4BAAS,mBAAmB;AAAA,MAC7C,cAAc,aAAa;AAAA,MAC3B,MAAM;AAAA,MACN,UAAU;AAAA,MACV,iBAAiB,IAAI,WAAW,MAAM,OAAO;AAAA,MAC7C,cAAc,OAAO;AACnB,YAAI;AAAqB;AACzB,iBAAK,+BAAY,KAAK,IAAI,EAAE,MAAM,cAAc,MAAM,YAAY,IAAI,EAAE,MAAM,QAAQ,CAAC;AACvF,cAAM,eAAe;AAAA,MACvB;AAAA,MACA,cAAc;AACZ,aAAK,EAAE,MAAM,YAAY,MAAM,YAAY,CAAC;AAAA,MAC9C;AAAA,MACA,iBAAiB;AACf,aAAK,EAAE,MAAM,YAAY,MAAM,YAAY,CAAC;AAAA,MAC9C;AAAA,IACF,CAAC;AAAA,IAED,eAAe,UAAU,QAAQ;AAAA,MAC/B,GAAG,MAAM,SAAS;AAAA,MAClB,qBAAiB,4BAAS,UAAU;AAAA,MACpC,IAAI,IAAI,cAAc,MAAM,OAAO;AAAA,MACnC,MAAM;AAAA,MACN,YAAY,OAAO;AACjB,YAAI;AAAY;AAEhB,cAAM,UAAM,kCAAe,KAAK;AAEhC,cAAM,YAAQ,iCAAc,GAAG;AAC/B,cAAM,IAAI,MAAM,QAAI,yCAAmB,GAAG;AAC1C,cAAM,IAAI,MAAM,QAAI,yCAAmB,GAAG;AAE1C,aAAK,EAAE,MAAM,uBAAuB,MAAM,CAAC;AAC3C,cAAM,eAAe;AAAA,MACvB;AAAA,MACA,OAAO;AAAA,QACL,QAAQ,aAAa,SAAY;AAAA,MACnC;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AG5NA,kBAA8C;AAC9C,IAAAC,oBAAgD;AAChD,IAAAC,oBAA8B;AAC9B,+BAAkC;AAClC,IAAAC,uBAAyD;AACzD,mBAAiD;AAKjD,IAAM,EAAE,KAAK,IAAI,IAAI;AAEd,SAAS,QAAQ,aAAiC;AACvD,QAAM,UAAM,sBAAQ,WAAW;AAC/B,aAAO;AAAA,IACL;AAAA,MACE,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,SAAS;AAAA,QACP,KAAK;AAAA,QACL,oBAAoB;AAAA,QACpB,kBAAkB;AAAA,QAClB,eAAe;AAAA,QACf,WAAW;AAAA,QACX,SAAS;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,QACN,KAAK,OAAO;AAAA,QACZ,KAAK,OAAO;AAAA,QACZ,qBAAqB;AAAA,QACrB,SAAS;AAAA,QACT,aAAa;AAAA,QACb,GAAG;AAAA,QACH,cAAc;AAAA,UACZ,gBAAgB;AAAA,UAChB,gBAAgB;AAAA,UAChB,GAAG,IAAI;AAAA,QACT;AAAA,MACF;AAAA,MAEA,UAAU;AAAA,QACR,OAAO,CAACC,SAAQA,KAAI,QAAQ;AAAA,QAC5B,eAAe,CAACA,aAAQ,8BAAQA,KAAI,KAAK;AAAA,QACzC,SAAS,CAACA,aAAQ,8BAAQA,KAAI,OAAOA,IAAG;AAAA,QACxC,SAAS,CAACA,aAAQ,8BAAQA,KAAI,OAAOA,IAAG;AAAA,QACxC,cAAc,CAACA,SAAQ,KAAC,oCAAcA,KAAI,OAAOA,IAAG;AAAA,QACpD,cAAc,CAACA,SAAQA,KAAI,UAAU;AAAA,QACrC,cAAc,CAACA,SAAQA,KAAI,iBAAiB,CAACA,KAAI;AAAA,QACjD,cAAc,CAACA,SAAQA,KAAI,iBAAiB,CAACA,KAAI;AAAA,QACjD,WAAW,CAACA,SAAQA,KAAI,aAAa,YAAYA,KAAI,KAAK;AAAA,QAC1D,gBAAgB,CAACA,SAAQA,KAAI,SAASA,KAAI,KAAK,EAAE,SAAS,KAAKA,KAAI;AAAA,MACrE;AAAA,MAEA,OAAO;AAAA,QACL,OAAO,CAAC,kBAAkB;AAAA,QAC1B,cAAc,CAAC,iBAAiB;AAAA,QAChC,qBAAqB,CAAC,0BAA0B;AAAA,MAClD;AAAA,MAEA,OAAO,CAAC,gBAAgB;AAAA,MAExB,IAAI;AAAA,QACF,WAAW;AAAA,UACT,SAAS,CAAC,YAAY,cAAc,cAAc;AAAA,QACpD;AAAA,QACA,aAAa;AAAA,UACX,SAAS,CAAC,YAAY;AAAA,QACxB;AAAA,QACA,WAAW;AAAA,UACT,SAAS,CAAC,WAAW;AAAA,QACvB;AAAA,QACA,WAAW;AAAA,UACT,SAAS,CAAC,WAAW;AAAA,QACvB;AAAA,MACF;AAAA,MAEA,QAAQ;AAAA,QACN,MAAM;AAAA,UACJ,IAAI;AAAA,YACF,YAAY;AAAA,cACV,QAAQ;AAAA,cACR,SAAS,CAAC,cAAc,iBAAiB,SAAS;AAAA,YACpD;AAAA,YACA,qBAAqB;AAAA,cACnB,QAAQ;AAAA,cACR,SAAS,CAAC,cAAc,iBAAiB,WAAW,gBAAgB;AAAA,YACtE;AAAA,YACA,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,SAAS,CAAC,cAAc,eAAe;AAAA,YACzC;AAAA,UACF;AAAA,QACF;AAAA,QAEA,SAAS;AAAA,UACP,MAAM;AAAA,UACN,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,IAAI;AAAA,YACF,YAAY;AAAA,cACV,QAAQ;AAAA,cACR,SAAS,CAAC,cAAc,SAAS;AAAA,YACnC;AAAA,YACA,qBAAqB;AAAA,cACnB,QAAQ;AAAA,cACR,SAAS,CAAC,cAAc,WAAW,gBAAgB;AAAA,YACrD;AAAA,YACA,UAAU;AAAA,cACR,SAAS;AAAA,YACX;AAAA,YACA,YAAY;AAAA,cACV,SAAS;AAAA,YACX;AAAA,YACA,MAAM;AAAA,cACJ,SAAS;AAAA,YACX;AAAA,YACA,KAAK;AAAA,cACH,SAAS;AAAA,YACX;AAAA,YACA,QAAQ;AAAA,cACN,SAAS,CAAC,YAAY,SAAS;AAAA,YACjC;AAAA,YACA,MAAM;AAAA,cACJ;AAAA,gBACE,OAAO;AAAA,gBACP,QAAQ;AAAA,gBACR,SAAS,CAAC,cAAc,aAAa,cAAc;AAAA,cACrD;AAAA,cACA;AAAA,gBACE,OAAO,IAAI,eAAe,IAAI,WAAW,GAAG,IAAI,cAAc,CAAC;AAAA,gBAC/D,QAAQ;AAAA,gBACR,SAAS,CAAC,cAAc,aAAa,cAAc;AAAA,cACrD;AAAA,cACA;AAAA,gBACE,QAAQ;AAAA,gBACR,SAAS,CAAC,cAAc,cAAc;AAAA,cACxC;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,QAEA,eAAe;AAAA,UACb,MAAM;AAAA,UACN,YAAY;AAAA,UACZ,WAAO,oBAAO;AAAA,YACZ,EAAE,OAAO,mBAAmB,SAAS,YAAY;AAAA,YACjD,EAAE,OAAO,mBAAmB,SAAS,YAAY;AAAA,UACnD,CAAC;AAAA,UACD,OAAO;AAAA,YACL,cAAc;AAAA,cACZ,QAAQ;AAAA,cACR,OAAO,IAAI,aAAa,aAAa;AAAA,YACvC;AAAA,UACF;AAAA,UACA,IAAI;AAAA,YACF,UAAU;AAAA,cACR,QAAQ;AAAA,cACR,SAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF;AAAA,QAEA,UAAU;AAAA,UACR,MAAM;AAAA,UACN,YAAY;AAAA,UACZ,OAAO;AAAA,YACL;AAAA,cACE,OAAO;AAAA,cACP,OAAO,IAAI,IAAI,SAAS,GAAG,iBAAiB;AAAA,cAC5C,SAAS;AAAA,YACX;AAAA,YACA;AAAA,cACE,OAAO;AAAA,cACP,OAAO,IAAI,IAAI,SAAS,GAAG,iBAAiB;AAAA,cAC5C,SAAS;AAAA,YACX;AAAA,UACF;AAAA,UACA,IAAI;AAAA,YACF,UAAU;AAAA,cACR,QAAQ;AAAA,cACR,SAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF;AAAA,QAEA,WAAW;AAAA,UACT,MAAM;AAAA,UACN,MAAM;AAAA,UACN,YAAY,CAAC,uBAAuB,kBAAkB,sBAAsB,sBAAsB;AAAA,UAClG,IAAI;AAAA,YACF,qBAAqB;AAAA,YACrB,uBAAuB;AAAA,cACrB;AAAA,gBACE,OAAO;AAAA,gBACP,SAAS,CAAC,aAAa,gBAAgB;AAAA,cACzC;AAAA,cACA;AAAA,gBACE,OAAO;AAAA,gBACP,SAAS,CAAC,aAAa,gBAAgB;AAAA,cACzC;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,QACN,iBAAiB;AAAA,QACjB,cAAc;AAAA,MAChB;AAAA,MAEA,QAAQ;AAAA,QACN,aAAa,CAACA,SAAQ,CAAC,CAACA,KAAI;AAAA,QAC5B,SAAS,CAACA,SAAQA,KAAI;AAAA,QACtB,aAAa,CAACA,SAAQ,CAAC,CAACA,KAAI;AAAA,QAC5B,SAAS,CAACA,SAAQA,KAAI;AAAA,QACtB,WAAW,CAACA,SAAQ,CAACA,KAAI;AAAA,QACzB,iBAAiB,CAACA,MAAK,SAAS,IAAI,QAAQA,KAAI,UAAU;AAAA,QAC1D,cAAc,CAACA,SAAQA,KAAI;AAAA,QAC3B,iBAAiB,CAACA,MAAK,SAAS,IAAI,QAAQA,KAAI,UAAU;AAAA,QAC1D,sBAAsB,CAACA,SAAQA,KAAI,MAAM,SAAS,EAAE,WAAW,GAAG;AAAA,MACpE;AAAA,MAEA,YAAY;AAAA,QACV,mBAAmBA,MAAK;AACtB,iBAAO,IAAI,mBAAmBA,IAAG;AAAA,QACnC;AAAA,QACA,qBAAqBA,MAAK;AACxB,iBAAO,IAAI,qBAAqBA,IAAG;AAAA,QACrC;AAAA,QACA,oBAAoBA,MAAK,MAAM,EAAE,KAAK,GAAG;AACvC,gBAAM,MAAM,IAAI,oBAAoBA,MAAKA,KAAI,IAAI;AACjD,qBAAO,4CAAkB,KAAK,CAAC,UAAU,GAAG,MAAM;AAChD,iBAAK,UAAU;AAAA,UACjB,CAAC;AAAA,QACH;AAAA,QACA,oBAAoBA,MAAK,MAAM,EAAE,KAAK,GAAG;AACvC,gBAAM,QAAQ,IAAI,WAAWA,IAAG;AAChC,cAAI,CAAC;AAAO;AAEZ,mBAAS,QAAQ,OAAmB;AAClC,kBAAM,iBAAiB,IAAI,OAAOA,IAAG,EAAE,kBAAkB;AACzD,gBAAI,CAACA,KAAI,mBAAmB,CAAC;AAAgB;AAC7C,kBAAM,eAAe;AAErB,kBAAM,MAAM,KAAK,KAAK,MAAM,MAAM,IAAI;AACtC,gBAAI,QAAQ,GAAG;AACb,mBAAK,WAAW;AAAA,YAClB,WAAW,QAAQ,IAAI;AACrB,mBAAK,WAAW;AAAA,YAClB;AAAA,UACF;AACA,qBAAO,+BAAY,OAAO,SAAS,SAAS,EAAE,SAAS,MAAM,CAAC;AAAA,QAChE;AAAA,QACA,oBAAoBA,MAAK;AACvB,kBAAI,4BAAS;AAAG;AAChB,qBAAO,sCAAmB,IAAI,OAAOA,IAAG,CAAC;AAAA,QAC3C;AAAA,QACA,eAAeA,MAAK,MAAM,EAAE,KAAK,GAAG;AAClC,gBAAM,MAAM,IAAI,OAAOA,IAAG;AAE1B,mBAAS,YAAY,OAAmB;AACtC,gBAAI,CAACA,KAAI;AAAqB;AAC9B,kBAAM,QAAQ,IAAI,kBAAkBA,MAAK,KAAK;AAC9C,gBAAI,CAAC,MAAM;AAAM;AACjB,iBAAK;AAAA,cACH,MAAM;AAAA,cACN,MAAM,MAAM;AAAA,cACZ,OAAO,MAAM;AAAA,YACf,CAAC;AAAA,UACH;AAEA,mBAAS,YAAY;AACnB,iBAAK,qBAAqB;AAAA,UAC5B;AAEA,qBAAO;AAAA,gBACL,+BAAY,KAAK,aAAa,aAAa,KAAK;AAAA,gBAChD,+BAAY,KAAK,WAAW,WAAW,KAAK;AAAA,UAC9C;AAAA,QACF;AAAA,MACF;AAAA,MAEA,SAAS;AAAA,QACP,WAAWA,MAAK;AACd,cAAI,CAACA,KAAI;AAAoB;AAC7B,gBAAM,UAAU,IAAI,WAAWA,IAAG;AAClC,qCAAI,MAAM;AACR,qBAAS,MAAM;AAAA,UACjB,CAAC;AAAA,QACH;AAAA,QACA,UAAUA,MAAK,KAAK;AAClB,cAAI,MAAMA,MAAK,MAAM,UAAUA,MAAK,IAAI,IAAI,CAAC;AAAA,QAC/C;AAAA,QACA,UAAUA,MAAK,KAAK;AAClB,cAAI,MAAMA,MAAK,MAAM,UAAUA,MAAK,IAAI,IAAI,CAAC;AAAA,QAC/C;AAAA,QACA,WAAWA,MAAK;AACd,cAAI,MAAMA,MAAK,MAAM,MAAMA,IAAG,CAAC;AAAA,QACjC;AAAA,QACA,WAAWA,MAAK;AACd,cAAIA,KAAI,UAAU;AAAI;AACtB,cAAI,MAAMA,MAAK,MAAM,MAAMA,IAAG,CAAC;AAAA,QACjC;AAAA,QACA,SAASA,MAAK,KAAK;AACjB,cAAI,QAAQ,IAAI,QAAQ,SAAS,IAAI;AACrC,kBAAQ,MAAM,SAASA,MAAK,MAAM,MAAMA,MAAK,MAAM,SAAS,CAAC,CAAC;AAC9D,cAAI,MAAMA,MAAK,KAAK;AAAA,QACtB;AAAA,QACA,WAAWA,MAAK;AACd,cAAI,MAAMA,MAAK,EAAE;AAAA,QACnB;AAAA,QACA,SAASA,MAAK;AACZ,cAAI,MAAMA,MAAKA,KAAI,IAAI,SAAS,CAAC;AAAA,QACnC;AAAA,QACA,SAASA,MAAK;AACZ,cAAI,MAAMA,MAAKA,KAAI,IAAI,SAAS,CAAC;AAAA,QACnC;AAAA,QACA,QAAQA,MAAK,KAAK;AAChB,UAAAA,KAAI,OAAO,IAAI;AAAA,QACjB;AAAA,QACA,UAAUA,MAAK;AACb,UAAAA,KAAI,OAAO;AAAA,QACb;AAAA,QACA,aAAaA,MAAK;AAChB,UAAAA,KAAI,OAAO;AAAA,QACb;AAAA,QACA,cAAcA,MAAK,KAAK;AACtB,gBAAM,iBAAiC,oBAAM,IAAI,MAAM;AAAA,YACrD,YAAY,IAAI,oBAAoBA,MAAK,IAAI,IAAI;AAAA,YACjD,OAAO,IAAI,WAAWA,IAAG;AAAA,YACzB,qBAAqB,IAAI,cAAcA,IAAG;AAAA,UAC5C,CAAC;AACD,UAAAA,KAAI,gBAAgB;AAAA,YAClB,SAAS;AAAA,YACT;AAAA,YACA,OAAOA,KAAI;AAAA,YACX,eAAeA,KAAI;AAAA,UACrB,CAAC;AAAA,QACH;AAAA,QACA,aAAaA,MAAK;AAChB,UAAAA,KAAI,gBAAgB;AAAA,YAClB,SAAS;AAAA,YACT,OAAOA,KAAI;AAAA,YACX,eAAeA,KAAI;AAAA,UACrB,CAAC;AAAA,QACH;AAAA,QACA,gBAAgBA,MAAK;AACnB,cAAI,CAACA,KAAI;AAAc;AACvB,gBAAM,SAASA,KAAI,gBAAgBA,KAAI,MAAM,kBAAkB;AAC/D,UAAAA,KAAI,iBAAiB;AAAA,YACnB;AAAA,YACA,OAAOA,KAAI;AAAA,YACX,eAAeA,KAAI;AAAA,UACrB,CAAC;AAAA,QACH;AAAA,QACA,iBAAiBA,MAAK;AACpB,gBAAM,UAAU,IAAI,WAAWA,IAAG;AAClC,cAAI,SAAS,SAASA,KAAI,cAAc;AAAA,QAC1C;AAAA,QACA,eAAeA,MAAK;AAClB,gBAAM,UAAU,IAAI,WAAWA,IAAG;AAClC,cAAI,CAAC,WAAW,QAAQ,SAASA,KAAI;AAAO;AAE5C,gBAAM,QAAQ,MAAM,MAAMA,MAAK,QAAQ,KAAK;AAC5C,cAAI,MAAMA,MAAK,MAAM,SAASA,MAAK,KAAK,CAAC;AAAA,QAC3C;AAAA,QACA,eAAeA,MAAK,KAAK;AACvB,UAAAA,KAAI,sBAAsB,IAAI;AAAA,QAChC;AAAA,QACA,iBAAiBA,MAAK;AACpB,UAAAA,KAAI,sBAAsB;AAAA,QAC5B;AAAA,QACA,yBAAyBA,MAAK;AAC5B,gBAAM,SAAS,IAAI,YAAYA,IAAG;AAClC,cAAI,CAAC,UAAU,CAACA,KAAI;AAAqB;AACzC,gBAAM,EAAE,GAAG,EAAE,IAAIA,KAAI;AACrB,iBAAO,MAAM,YAAY,eAAe,CAAC,OAAO,CAAC;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,SAAS;AAAA,EACb,UAAU,CAAC,QAAwB;AACjC,QAAI,gBAAgB,EAAE,OAAO,IAAI,OAAO,eAAe,IAAI,cAAc,CAAC;AAAA,EAC5E;AACF;AAEA,IAAM,MAAM;AAAA,EACV,OAAO,CAAC,KAAqB,UAAkB;AAC7C,YAAI,sBAAQ,IAAI,OAAO,KAAK;AAAG;AAC/B,QAAI,QAAQ;AACZ,WAAO,SAAS,GAAG;AAAA,EACrB;AACF;","names":["import_dom_event","import_dom_query","import_number_utils","import_number_utils","import_dom_event","import_dom_query","import_number_utils","ctx"]}
|
package/dist/index.mjs
CHANGED
|
@@ -352,7 +352,7 @@ import { addDomEvent, requestPointerLock } from "@zag-js/dom-event";
|
|
|
352
352
|
import { isSafari as isSafari2, raf } from "@zag-js/dom-query";
|
|
353
353
|
import { observeAttributes } from "@zag-js/mutation-observer";
|
|
354
354
|
import { isAtMax, isAtMin, isWithinRange, valueOf } from "@zag-js/number-utils";
|
|
355
|
-
import { callAll, compact, isEqual } from "@zag-js/utils";
|
|
355
|
+
import { callAll, compact, isEqual, match } from "@zag-js/utils";
|
|
356
356
|
var { not, and } = guards;
|
|
357
357
|
function machine(userContext) {
|
|
358
358
|
const ctx = compact(userContext);
|
|
@@ -661,28 +661,30 @@ function machine(userContext) {
|
|
|
661
661
|
ctx2.hint = "set";
|
|
662
662
|
},
|
|
663
663
|
invokeOnFocus(ctx2, evt) {
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
valueAsNumber: ctx2.valueAsNumber,
|
|
675
|
-
srcElement
|
|
664
|
+
const srcElement = match(evt.type, {
|
|
665
|
+
PRESS_DOWN: dom.getPressedTriggerEl(ctx2, evt.hint),
|
|
666
|
+
FOCUS: dom.getInputEl(ctx2),
|
|
667
|
+
PRESS_DOWN_SCRUBBER: dom.getScrubberEl(ctx2)
|
|
668
|
+
});
|
|
669
|
+
ctx2.onFocusChange?.({
|
|
670
|
+
focused: true,
|
|
671
|
+
srcElement,
|
|
672
|
+
value: ctx2.formattedValue,
|
|
673
|
+
valueAsNumber: ctx2.valueAsNumber
|
|
676
674
|
});
|
|
677
675
|
},
|
|
678
676
|
invokeOnBlur(ctx2) {
|
|
679
|
-
ctx2.
|
|
677
|
+
ctx2.onFocusChange?.({
|
|
678
|
+
focused: false,
|
|
679
|
+
value: ctx2.formattedValue,
|
|
680
|
+
valueAsNumber: ctx2.valueAsNumber
|
|
681
|
+
});
|
|
680
682
|
},
|
|
681
683
|
invokeOnInvalid(ctx2) {
|
|
682
684
|
if (!ctx2.isOutOfRange)
|
|
683
685
|
return;
|
|
684
686
|
const reason = ctx2.valueAsNumber > ctx2.max ? "rangeOverflow" : "rangeUnderflow";
|
|
685
|
-
ctx2.
|
|
687
|
+
ctx2.onValueInvalid?.({
|
|
686
688
|
reason,
|
|
687
689
|
value: ctx2.formattedValue,
|
|
688
690
|
valueAsNumber: ctx2.valueAsNumber
|
|
@@ -718,7 +720,7 @@ function machine(userContext) {
|
|
|
718
720
|
}
|
|
719
721
|
var invoke = {
|
|
720
722
|
onChange: (ctx) => {
|
|
721
|
-
ctx.
|
|
723
|
+
ctx.onValueChange?.({ value: ctx.value, valueAsNumber: ctx.valueAsNumber });
|
|
722
724
|
}
|
|
723
725
|
};
|
|
724
726
|
var set = {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/number-input.anatomy.ts","../src/number-input.connect.ts","../src/number-input.dom.ts","../src/number-input.utils.ts","../src/number-input.machine.ts"],"sourcesContent":["import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"numberInput\").parts(\n \"root\",\n \"label\",\n \"input\",\n \"control\",\n \"incrementTrigger\",\n \"decrementTrigger\",\n \"scrubber\",\n)\nexport const parts = anatomy.build()\n","import { getEventPoint, getEventStep, getNativeEvent, isLeftClick, type EventKeyMap } from \"@zag-js/dom-event\"\nimport { ariaAttr, dataAttr } from \"@zag-js/dom-query\"\nimport { roundToDevicePixel } from \"@zag-js/number-utils\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./number-input.anatomy\"\nimport { dom } from \"./number-input.dom\"\nimport type { MachineApi, Send, State } from \"./number-input.types\"\nimport { utils } from \"./number-input.utils\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): MachineApi<T> {\n const isFocused = state.hasTag(\"focus\")\n const isInvalid = state.context.isOutOfRange || !!state.context.invalid\n\n const isDisabled = !!state.context.disabled\n const isValueEmpty = state.context.isValueEmpty\n const isIncrementDisabled = isDisabled || !state.context.canIncrement\n const isDecrementDisabled = isDisabled || !state.context.canDecrement\n\n const translations = state.context.translations\n\n return {\n isFocused,\n isInvalid,\n isValueEmpty,\n value: state.context.formattedValue,\n valueAsNumber: state.context.valueAsNumber,\n\n setValue(value: string | number) {\n send({ type: \"SET_VALUE\", value: value.toString() })\n },\n\n clearValue() {\n send(\"CLEAR_VALUE\")\n },\n\n increment() {\n send(\"INCREMENT\")\n },\n\n decrement() {\n send(\"DECREMENT\")\n },\n\n setToMax() {\n send({ type: \"SET_VALUE\", value: state.context.max })\n },\n\n setToMin() {\n send({ type: \"SET_VALUE\", value: state.context.min })\n },\n\n focus() {\n dom.getInputEl(state.context)?.focus()\n },\n\n blur() {\n dom.getInputEl(state.context)?.blur()\n },\n\n rootProps: normalize.element({\n id: dom.getRootId(state.context),\n ...parts.root.attrs,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-focus\": dataAttr(isFocused),\n \"data-invalid\": dataAttr(isInvalid),\n }),\n\n labelProps: normalize.label({\n ...parts.label.attrs,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-focus\": dataAttr(isFocused),\n \"data-invalid\": dataAttr(isInvalid),\n id: dom.getLabelId(state.context),\n htmlFor: dom.getInputId(state.context),\n }),\n\n controlProps: normalize.element({\n ...parts.control.attrs,\n role: \"group\",\n \"aria-disabled\": isDisabled,\n \"data-focus\": dataAttr(isFocused),\n \"data-disabled\": dataAttr(isDisabled),\n \"data-invalid\": dataAttr(isInvalid),\n \"aria-invalid\": ariaAttr(state.context.invalid),\n }),\n\n inputProps: normalize.input({\n ...parts.input.attrs,\n name: state.context.name,\n form: state.context.form,\n id: dom.getInputId(state.context),\n role: \"spinbutton\",\n defaultValue: state.context.formattedValue,\n pattern: state.context.pattern,\n inputMode: state.context.inputMode,\n \"aria-invalid\": ariaAttr(isInvalid),\n \"data-invalid\": dataAttr(isInvalid),\n disabled: isDisabled,\n \"data-disabled\": dataAttr(isDisabled),\n readOnly: !!state.context.readOnly,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n spellCheck: \"false\",\n type: \"text\",\n \"aria-roledescription\": \"numberfield\",\n \"aria-valuemin\": state.context.min,\n \"aria-valuemax\": state.context.max,\n \"aria-valuenow\": isNaN(state.context.valueAsNumber) ? undefined : state.context.valueAsNumber,\n \"aria-valuetext\": state.context.valueText,\n onFocus() {\n send(\"FOCUS\")\n },\n onBlur() {\n send(\"BLUR\")\n },\n onChange(event) {\n send({ type: \"CHANGE\", target: event.currentTarget, hint: \"set\" })\n },\n onKeyDown(event) {\n const evt = getNativeEvent(event)\n // TODO: This blocks non-ascii characters\n if (evt.isComposing) return\n\n if (!utils.isValidNumericEvent(state.context, event)) {\n event.preventDefault()\n }\n\n const step = getEventStep(event) * state.context.step\n\n const keyMap: EventKeyMap = {\n ArrowUp() {\n send({ type: \"ARROW_UP\", step })\n },\n ArrowDown() {\n send({ type: \"ARROW_DOWN\", step })\n },\n Home() {\n send(\"HOME\")\n },\n End() {\n send(\"END\")\n },\n }\n\n const exec = keyMap[event.key]\n\n if (exec) {\n exec(event)\n event.preventDefault()\n }\n },\n }),\n\n decrementTriggerProps: normalize.button({\n ...parts.decrementTrigger.attrs,\n id: dom.getDecrementTriggerId(state.context),\n disabled: isDecrementDisabled,\n \"data-disabled\": dataAttr(isDecrementDisabled),\n \"aria-label\": translations.decrementLabel,\n type: \"button\",\n tabIndex: -1,\n \"aria-controls\": dom.getInputId(state.context),\n onPointerDown(event) {\n if (isDecrementDisabled) return\n send(isLeftClick(event) ? { type: \"PRESS_DOWN\", hint: \"decrement\" } : { type: \"FOCUS\" })\n event.preventDefault()\n },\n onPointerUp() {\n send({ type: \"PRESS_UP\", hint: \"decrement\" })\n },\n onPointerLeave() {\n if (isDecrementDisabled) return\n send({ type: \"PRESS_UP\", hint: \"decrement\" })\n },\n }),\n\n incrementTriggerProps: normalize.button({\n ...parts.incrementTrigger.attrs,\n id: dom.getIncrementTriggerId(state.context),\n disabled: isIncrementDisabled,\n \"data-disabled\": dataAttr(isIncrementDisabled),\n \"aria-label\": translations.incrementLabel,\n type: \"button\",\n tabIndex: -1,\n \"aria-controls\": dom.getInputId(state.context),\n onPointerDown(event) {\n if (isIncrementDisabled) return\n send(isLeftClick(event) ? { type: \"PRESS_DOWN\", hint: \"increment\" } : { type: \"FOCUS\" })\n event.preventDefault()\n },\n onPointerUp() {\n send({ type: \"PRESS_UP\", hint: \"increment\" })\n },\n onPointerLeave() {\n send({ type: \"PRESS_UP\", hint: \"increment\" })\n },\n }),\n\n scrubberProps: normalize.element({\n ...parts.scrubber.attrs,\n \"data-disabled\": dataAttr(isDisabled),\n id: dom.getScrubberId(state.context),\n role: \"presentation\",\n onMouseDown(event) {\n if (isDisabled) return\n\n const evt = getNativeEvent(event)\n\n const point = getEventPoint(evt)\n point.x = point.x - roundToDevicePixel(7.5)\n point.y = point.y - roundToDevicePixel(7.5)\n\n send({ type: \"PRESS_DOWN_SCRUBBER\", point })\n event.preventDefault()\n },\n style: {\n cursor: isDisabled ? undefined : \"ew-resize\",\n },\n }),\n }\n}\n","import { createScope, isSafari, MAX_Z_INDEX } from \"@zag-js/dom-query\"\nimport { roundToDevicePixel, wrap } from \"@zag-js/number-utils\"\nimport type { MachineContext as Ctx } from \"./number-input.types\"\n\nexport const dom = createScope({\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `number-input:${ctx.id}`,\n getInputId: (ctx: Ctx) => ctx.ids?.input ?? `number-input:${ctx.id}:input`,\n getIncrementTriggerId: (ctx: Ctx) => ctx.ids?.incrementTrigger ?? `number-input:${ctx.id}:inc`,\n getDecrementTriggerId: (ctx: Ctx) => ctx.ids?.decrementTrigger ?? `number-input:${ctx.id}:dec`,\n getScrubberId: (ctx: Ctx) => ctx.ids?.scrubber ?? `number-input:${ctx.id}:scrubber`,\n getCursorId: (ctx: Ctx) => `number-input:${ctx.id}:cursor`,\n getLabelId: (ctx: Ctx) => ctx.ids?.label ?? `number-input:${ctx.id}:label`,\n\n getInputEl: (ctx: Ctx) => dom.getById<HTMLInputElement>(ctx, dom.getInputId(ctx)),\n getIncrementTriggerEl: (ctx: Ctx) => dom.getById<HTMLButtonElement>(ctx, dom.getIncrementTriggerId(ctx)),\n getDecrementTriggerEl: (ctx: Ctx) => dom.getById<HTMLButtonElement>(ctx, dom.getDecrementTriggerId(ctx)),\n getScrubberEl: (ctx: Ctx) => dom.getById(ctx, dom.getScrubberId(ctx)),\n getCursorEl: (ctx: Ctx) => dom.getDoc(ctx).getElementById(dom.getCursorId(ctx)),\n\n getPressedTriggerEl: (ctx: Ctx, hint = ctx.hint) => {\n let btnEl: HTMLButtonElement | null = null\n if (hint === \"increment\") {\n btnEl = dom.getIncrementTriggerEl(ctx)\n }\n if (hint === \"decrement\") {\n btnEl = dom.getDecrementTriggerEl(ctx)\n }\n return btnEl\n },\n\n setupVirtualCursor(ctx: Ctx) {\n if (isSafari()) return\n dom.createVirtualCursor(ctx)\n return () => {\n dom.getCursorEl(ctx)?.remove()\n }\n },\n\n preventTextSelection(ctx: Ctx) {\n const doc = dom.getDoc(ctx)\n const html = doc.documentElement\n const body = doc.body\n\n body.style.pointerEvents = \"none\"\n html.style.userSelect = \"none\"\n html.style.cursor = \"ew-resize\"\n\n return () => {\n body.style.pointerEvents = \"\"\n html.style.userSelect = \"\"\n html.style.cursor = \"\"\n if (!html.style.length) {\n html.removeAttribute(\"style\")\n }\n if (!body.style.length) {\n body.removeAttribute(\"style\")\n }\n }\n },\n\n getMousementValue(ctx: Ctx, event: MouseEvent) {\n const x = roundToDevicePixel(event.movementX)\n const y = roundToDevicePixel(event.movementY)\n\n let hint = x > 0 ? \"increment\" : x < 0 ? \"decrement\" : null\n\n if (ctx.isRtl && hint === \"increment\") hint = \"decrement\"\n if (ctx.isRtl && hint === \"decrement\") hint = \"increment\"\n\n const point = {\n x: ctx.scrubberCursorPoint!.x + x,\n y: ctx.scrubberCursorPoint!.y + y,\n }\n\n const win = dom.getWin(ctx)\n const width = win.innerWidth\n const half = roundToDevicePixel(7.5)\n point.x = wrap(point.x + half, width) - half\n\n return { hint, point }\n },\n\n createVirtualCursor(ctx: Ctx) {\n const doc = dom.getDoc(ctx)\n const el = doc.createElement(\"div\")\n el.className = \"scrubber--cursor\"\n el.id = dom.getCursorId(ctx)\n\n Object.assign(el.style, {\n width: \"15px\",\n height: \"15px\",\n position: \"fixed\",\n pointerEvents: \"none\",\n left: \"0px\",\n top: \"0px\",\n zIndex: MAX_Z_INDEX,\n transform: ctx.scrubberCursorPoint\n ? `translate3d(${ctx.scrubberCursorPoint.x}px, ${ctx.scrubberCursorPoint.y}px, 0px)`\n : undefined,\n willChange: \"transform\",\n })\n\n el.innerHTML = `\n <svg width=\"46\" height=\"15\" style=\"left: -15.5px; position: absolute; top: 0; filter: drop-shadow(rgba(0, 0, 0, 0.4) 0px 1px 1.1px);\">\n <g transform=\"translate(2 3)\">\n <path fill-rule=\"evenodd\" d=\"M 15 4.5L 15 2L 11.5 5.5L 15 9L 15 6.5L 31 6.5L 31 9L 34.5 5.5L 31 2L 31 4.5Z\" style=\"stroke-width: 2px; stroke: white;\"></path>\n <path fill-rule=\"evenodd\" d=\"M 15 4.5L 15 2L 11.5 5.5L 15 9L 15 6.5L 31 6.5L 31 9L 34.5 5.5L 31 2L 31 4.5Z\"></path>\n </g>\n </svg>`\n\n doc.body.appendChild(el)\n },\n})\n","import { isModifiedEvent } from \"@zag-js/dom-event\"\nimport { clamp, decrement, formatDecimal, increment } from \"@zag-js/number-utils\"\nimport type { JSX } from \"@zag-js/types\"\nimport type { MachineContext as Ctx } from \"./number-input.types\"\n\nexport const utils = {\n isValidNumericEvent: (ctx: Ctx, event: JSX.KeyboardEvent) => {\n if (event.key == null) return true\n const isModifier = isModifiedEvent(event)\n const isSingleKey = event.key.length === 1\n if (isModifier || !isSingleKey) return true\n return ctx.validateCharacter?.(event.key) ?? utils.isFloatingPoint(event.key)\n },\n isFloatingPoint: (v: string) => /^[0-9+\\-.]$/.test(v),\n sanitize: (ctx: Ctx, value: string) => {\n return value\n .split(\"\")\n .filter(ctx.validateCharacter ?? utils.isFloatingPoint)\n .join(\"\")\n },\n increment: (ctx: Ctx, step?: number) => {\n const value = increment(ctx.value, step ?? ctx.step)\n return formatDecimal(clamp(value, ctx), ctx)\n },\n decrement: (ctx: Ctx, step?: number) => {\n const value = decrement(ctx.value, step ?? ctx.step)\n return formatDecimal(clamp(value, ctx), ctx)\n },\n clamp: (ctx: Ctx) => {\n return formatDecimal(clamp(ctx.value, ctx), ctx)\n },\n parse: (ctx: Ctx, value: string) => {\n return ctx.parse?.(value) ?? value\n },\n format: (ctx: Ctx, value: string | number) => {\n const _val = value.toString()\n return ctx.format?.(_val) ?? _val\n },\n round: (ctx: Ctx) => {\n return formatDecimal(ctx.value, ctx)\n },\n}\n","import { choose, createMachine, guards } from \"@zag-js/core\"\nimport { addDomEvent, requestPointerLock } from \"@zag-js/dom-event\"\nimport { isSafari, raf } from \"@zag-js/dom-query\"\nimport { observeAttributes } from \"@zag-js/mutation-observer\"\nimport { isAtMax, isAtMin, isWithinRange, valueOf } from \"@zag-js/number-utils\"\nimport { callAll, compact, isEqual } from \"@zag-js/utils\"\nimport { dom } from \"./number-input.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./number-input.types\"\nimport { utils } from \"./number-input.utils\"\n\nconst { not, and } = guards\n\nexport function machine(userContext: UserDefinedContext) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n id: \"number-input\",\n initial: \"idle\",\n context: {\n dir: \"ltr\",\n focusInputOnChange: true,\n clampValueOnBlur: true,\n allowOverflow: false,\n inputMode: \"decimal\",\n pattern: \"[0-9]*(.[0-9]+)?\",\n hint: null,\n value: \"\",\n step: 1,\n min: Number.MIN_SAFE_INTEGER,\n max: Number.MAX_SAFE_INTEGER,\n scrubberCursorPoint: null,\n invalid: false,\n spinOnPress: true,\n ...ctx,\n translations: {\n incrementLabel: \"increment value\",\n decrementLabel: \"decrease value\",\n ...ctx.translations,\n },\n },\n\n computed: {\n isRtl: (ctx) => ctx.dir === \"rtl\",\n valueAsNumber: (ctx) => valueOf(ctx.value),\n isAtMin: (ctx) => isAtMin(ctx.value, ctx),\n isAtMax: (ctx) => isAtMax(ctx.value, ctx),\n isOutOfRange: (ctx) => !isWithinRange(ctx.value, ctx),\n isValueEmpty: (ctx) => ctx.value === \"\",\n canIncrement: (ctx) => ctx.allowOverflow || !ctx.isAtMax,\n canDecrement: (ctx) => ctx.allowOverflow || !ctx.isAtMin,\n valueText: (ctx) => ctx.translations.valueText?.(ctx.value),\n formattedValue: (ctx) => ctx.format?.(ctx.value).toString() ?? ctx.value,\n },\n\n watch: {\n value: [\"syncInputElement\"],\n isOutOfRange: [\"invokeOnInvalid\"],\n scrubberCursorPoint: [\"setVirtualCursorPosition\"],\n },\n\n entry: [\"syncInputValue\"],\n\n on: {\n SET_VALUE: {\n actions: [\"setValue\", \"clampValue\", \"setHintToSet\"],\n },\n CLEAR_VALUE: {\n actions: [\"clearValue\"],\n },\n INCREMENT: {\n actions: [\"increment\"],\n },\n DECREMENT: {\n actions: [\"decrement\"],\n },\n },\n\n states: {\n idle: {\n on: {\n PRESS_DOWN: {\n target: \"before:spin\",\n actions: [\"focusInput\", \"invokeOnFocus\", \"setHint\"],\n },\n PRESS_DOWN_SCRUBBER: {\n target: \"scrubbing\",\n actions: [\"focusInput\", \"invokeOnFocus\", \"setHint\", \"setCursorPoint\"],\n },\n FOCUS: {\n target: \"focused\",\n actions: [\"focusInput\", \"invokeOnFocus\"],\n },\n },\n },\n\n focused: {\n tags: \"focus\",\n entry: \"focusInput\",\n activities: \"attachWheelListener\",\n on: {\n PRESS_DOWN: {\n target: \"before:spin\",\n actions: [\"focusInput\", \"setHint\"],\n },\n PRESS_DOWN_SCRUBBER: {\n target: \"scrubbing\",\n actions: [\"focusInput\", \"setHint\", \"setCursorPoint\"],\n },\n ARROW_UP: {\n actions: \"increment\",\n },\n ARROW_DOWN: {\n actions: \"decrement\",\n },\n HOME: {\n actions: \"setToMin\",\n },\n END: {\n actions: \"setToMax\",\n },\n CHANGE: {\n actions: [\"setValue\", \"setHint\"],\n },\n BLUR: [\n {\n guard: \"isInvalidExponential\",\n target: \"idle\",\n actions: [\"clearValue\", \"clearHint\", \"invokeOnBlur\"],\n },\n {\n guard: and(\"clampOnBlur\", not(\"isInRange\"), not(\"isEmptyValue\")),\n target: \"idle\",\n actions: [\"clampValue\", \"clearHint\", \"invokeOnBlur\"],\n },\n {\n target: \"idle\",\n actions: [\"roundValue\", \"invokeOnBlur\"],\n },\n ],\n },\n },\n\n \"before:spin\": {\n tags: \"focus\",\n activities: \"trackButtonDisabled\",\n entry: choose([\n { guard: \"isIncrementHint\", actions: \"increment\" },\n { guard: \"isDecrementHint\", actions: \"decrement\" },\n ]),\n after: {\n CHANGE_DELAY: {\n target: \"spinning\",\n guard: and(\"isInRange\", \"spinOnPress\"),\n },\n },\n on: {\n PRESS_UP: {\n target: \"focused\",\n actions: \"clearHint\",\n },\n },\n },\n\n spinning: {\n tags: \"focus\",\n activities: \"trackButtonDisabled\",\n every: [\n {\n delay: \"CHANGE_INTERVAL\",\n guard: and(not(\"isAtMin\"), \"isIncrementHint\"),\n actions: \"increment\",\n },\n {\n delay: \"CHANGE_INTERVAL\",\n guard: and(not(\"isAtMax\"), \"isDecrementHint\"),\n actions: \"decrement\",\n },\n ],\n on: {\n PRESS_UP: {\n target: \"focused\",\n actions: \"clearHint\",\n },\n },\n },\n\n scrubbing: {\n tags: \"focus\",\n exit: \"clearCursorPoint\",\n activities: [\"activatePointerLock\", \"trackMousemove\", \"setupVirtualCursor\", \"preventTextSelection\"],\n on: {\n POINTER_UP_SCRUBBER: \"focused\",\n POINTER_MOVE_SCRUBBER: [\n {\n guard: \"isIncrementHint\",\n actions: [\"increment\", \"setCursorPoint\"],\n },\n {\n guard: \"isDecrementHint\",\n actions: [\"decrement\", \"setCursorPoint\"],\n },\n ],\n },\n },\n },\n },\n {\n delays: {\n CHANGE_INTERVAL: 50,\n CHANGE_DELAY: 300,\n },\n\n guards: {\n clampOnBlur: (ctx) => !!ctx.clampValueOnBlur,\n isAtMin: (ctx) => ctx.isAtMin,\n spinOnPress: (ctx) => !!ctx.spinOnPress,\n isAtMax: (ctx) => ctx.isAtMax,\n isInRange: (ctx) => !ctx.isOutOfRange,\n isDecrementHint: (ctx, evt) => (evt.hint ?? ctx.hint) === \"decrement\",\n isEmptyValue: (ctx) => ctx.isValueEmpty,\n isIncrementHint: (ctx, evt) => (evt.hint ?? ctx.hint) === \"increment\",\n isInvalidExponential: (ctx) => ctx.value.toString().startsWith(\"e\"),\n },\n\n activities: {\n setupVirtualCursor(ctx) {\n return dom.setupVirtualCursor(ctx)\n },\n preventTextSelection(ctx) {\n return dom.preventTextSelection(ctx)\n },\n trackButtonDisabled(ctx, _evt, { send }) {\n const btn = dom.getPressedTriggerEl(ctx, ctx.hint)\n return observeAttributes(btn, [\"disabled\"], () => {\n send(\"PRESS_UP\")\n })\n },\n attachWheelListener(ctx, _evt, { send }) {\n const input = dom.getInputEl(ctx)\n if (!input) return\n\n function onWheel(event: WheelEvent) {\n const isInputFocused = dom.getDoc(ctx).activeElement === input\n if (!ctx.allowMouseWheel || !isInputFocused) return\n event.preventDefault()\n\n const dir = Math.sign(event.deltaY) * -1\n if (dir === 1) {\n send(\"INCREMENT\")\n } else if (dir === -1) {\n send(\"DECREMENT\")\n }\n }\n return addDomEvent(input, \"wheel\", onWheel, { passive: false })\n },\n activatePointerLock(ctx) {\n if (isSafari()) return\n return requestPointerLock(dom.getDoc(ctx))\n },\n trackMousemove(ctx, _evt, { send }) {\n const doc = dom.getDoc(ctx)\n\n function onMousemove(event: MouseEvent) {\n if (!ctx.scrubberCursorPoint) return\n const value = dom.getMousementValue(ctx, event)\n if (!value.hint) return\n send({\n type: \"POINTER_MOVE_SCRUBBER\",\n hint: value.hint,\n point: value.point,\n })\n }\n\n function onMouseup() {\n send(\"POINTER_UP_SCRUBBER\")\n }\n\n return callAll(\n addDomEvent(doc, \"mousemove\", onMousemove, false),\n addDomEvent(doc, \"mouseup\", onMouseup, false),\n )\n },\n },\n\n actions: {\n focusInput(ctx) {\n if (!ctx.focusInputOnChange) return\n const inputEl = dom.getInputEl(ctx)\n raf(() => {\n inputEl?.focus()\n })\n },\n increment(ctx, evt) {\n set.value(ctx, utils.increment(ctx, evt.step))\n },\n decrement(ctx, evt) {\n set.value(ctx, utils.decrement(ctx, evt.step))\n },\n clampValue(ctx) {\n set.value(ctx, utils.clamp(ctx))\n },\n roundValue(ctx) {\n if (ctx.value === \"\") return\n set.value(ctx, utils.round(ctx))\n },\n setValue(ctx, evt) {\n let value = evt.target?.value ?? evt.value\n value = utils.sanitize(ctx, utils.parse(ctx, value.toString()))\n set.value(ctx, value)\n },\n clearValue(ctx) {\n set.value(ctx, \"\")\n },\n setToMax(ctx) {\n set.value(ctx, ctx.max.toString())\n },\n setToMin(ctx) {\n set.value(ctx, ctx.min.toString())\n },\n setHint(ctx, evt) {\n ctx.hint = evt.hint\n },\n clearHint(ctx) {\n ctx.hint = null\n },\n setHintToSet(ctx) {\n ctx.hint = \"set\"\n },\n invokeOnFocus(ctx, evt) {\n let srcElement: HTMLElement | null = null\n\n if (evt.type === \"PRESS_DOWN\") {\n srcElement = dom.getPressedTriggerEl(ctx, evt.hint)\n } else if (evt.type === \"FOCUS\") {\n srcElement = dom.getInputEl(ctx)\n } else if (evt.type === \"PRESS_DOWN_SCRUBBER\") {\n srcElement = dom.getScrubberEl(ctx)\n }\n\n ctx.onFocus?.({\n value: ctx.value,\n valueAsNumber: ctx.valueAsNumber,\n srcElement,\n })\n },\n invokeOnBlur(ctx) {\n ctx.onBlur?.({ value: ctx.value, valueAsNumber: ctx.valueAsNumber })\n },\n invokeOnInvalid(ctx) {\n if (!ctx.isOutOfRange) return\n const reason = ctx.valueAsNumber > ctx.max ? \"rangeOverflow\" : \"rangeUnderflow\"\n ctx.onInvalid?.({\n reason,\n value: ctx.formattedValue,\n valueAsNumber: ctx.valueAsNumber,\n })\n },\n syncInputElement(ctx) {\n const inputEl = dom.getInputEl(ctx)\n dom.setValue(inputEl, ctx.formattedValue)\n },\n syncInputValue(ctx) {\n const inputEl = dom.getInputEl(ctx)\n if (!inputEl || inputEl.value == ctx.value) return\n\n const value = utils.parse(ctx, inputEl.value)\n set.value(ctx, utils.sanitize(ctx, value))\n },\n setCursorPoint(ctx, evt) {\n ctx.scrubberCursorPoint = evt.point\n },\n clearCursorPoint(ctx) {\n ctx.scrubberCursorPoint = null\n },\n setVirtualCursorPosition(ctx) {\n const cursor = dom.getCursorEl(ctx)\n if (!cursor || !ctx.scrubberCursorPoint) return\n const { x, y } = ctx.scrubberCursorPoint\n cursor.style.transform = `translate3d(${x}px, ${y}px, 0px)`\n },\n },\n },\n )\n}\n\nconst invoke = {\n onChange: (ctx: MachineContext) => {\n ctx.onChange?.({ value: ctx.value, valueAsNumber: ctx.valueAsNumber })\n },\n}\n\nconst set = {\n value: (ctx: MachineContext, value: string) => {\n if (isEqual(ctx.value, value)) return\n ctx.value = value\n invoke.onChange(ctx)\n },\n}\n"],"mappings":"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","names":["roundToDevicePixel","roundToDevicePixel","isSafari","ctx","isSafari"]}
|
|
1
|
+
{"version":3,"sources":["../src/number-input.anatomy.ts","../src/number-input.connect.ts","../src/number-input.dom.ts","../src/number-input.utils.ts","../src/number-input.machine.ts"],"sourcesContent":["import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"numberInput\").parts(\n \"root\",\n \"label\",\n \"input\",\n \"control\",\n \"incrementTrigger\",\n \"decrementTrigger\",\n \"scrubber\",\n)\nexport const parts = anatomy.build()\n","import { getEventPoint, getEventStep, getNativeEvent, isLeftClick, type EventKeyMap } from \"@zag-js/dom-event\"\nimport { ariaAttr, dataAttr } from \"@zag-js/dom-query\"\nimport { roundToDevicePixel } from \"@zag-js/number-utils\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./number-input.anatomy\"\nimport { dom } from \"./number-input.dom\"\nimport type { MachineApi, Send, State } from \"./number-input.types\"\nimport { utils } from \"./number-input.utils\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): MachineApi<T> {\n const isFocused = state.hasTag(\"focus\")\n const isInvalid = state.context.isOutOfRange || !!state.context.invalid\n\n const isDisabled = !!state.context.disabled\n const isValueEmpty = state.context.isValueEmpty\n const isIncrementDisabled = isDisabled || !state.context.canIncrement\n const isDecrementDisabled = isDisabled || !state.context.canDecrement\n\n const translations = state.context.translations\n\n return {\n isFocused,\n isInvalid,\n isValueEmpty,\n value: state.context.formattedValue,\n valueAsNumber: state.context.valueAsNumber,\n\n setValue(value: string | number) {\n send({ type: \"SET_VALUE\", value: value.toString() })\n },\n\n clearValue() {\n send(\"CLEAR_VALUE\")\n },\n\n increment() {\n send(\"INCREMENT\")\n },\n\n decrement() {\n send(\"DECREMENT\")\n },\n\n setToMax() {\n send({ type: \"SET_VALUE\", value: state.context.max })\n },\n\n setToMin() {\n send({ type: \"SET_VALUE\", value: state.context.min })\n },\n\n focus() {\n dom.getInputEl(state.context)?.focus()\n },\n\n blur() {\n dom.getInputEl(state.context)?.blur()\n },\n\n rootProps: normalize.element({\n id: dom.getRootId(state.context),\n ...parts.root.attrs,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-focus\": dataAttr(isFocused),\n \"data-invalid\": dataAttr(isInvalid),\n }),\n\n labelProps: normalize.label({\n ...parts.label.attrs,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-focus\": dataAttr(isFocused),\n \"data-invalid\": dataAttr(isInvalid),\n id: dom.getLabelId(state.context),\n htmlFor: dom.getInputId(state.context),\n }),\n\n controlProps: normalize.element({\n ...parts.control.attrs,\n role: \"group\",\n \"aria-disabled\": isDisabled,\n \"data-focus\": dataAttr(isFocused),\n \"data-disabled\": dataAttr(isDisabled),\n \"data-invalid\": dataAttr(isInvalid),\n \"aria-invalid\": ariaAttr(state.context.invalid),\n }),\n\n inputProps: normalize.input({\n ...parts.input.attrs,\n name: state.context.name,\n form: state.context.form,\n id: dom.getInputId(state.context),\n role: \"spinbutton\",\n defaultValue: state.context.formattedValue,\n pattern: state.context.pattern,\n inputMode: state.context.inputMode,\n \"aria-invalid\": ariaAttr(isInvalid),\n \"data-invalid\": dataAttr(isInvalid),\n disabled: isDisabled,\n \"data-disabled\": dataAttr(isDisabled),\n readOnly: !!state.context.readOnly,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n spellCheck: \"false\",\n type: \"text\",\n \"aria-roledescription\": \"numberfield\",\n \"aria-valuemin\": state.context.min,\n \"aria-valuemax\": state.context.max,\n \"aria-valuenow\": isNaN(state.context.valueAsNumber) ? undefined : state.context.valueAsNumber,\n \"aria-valuetext\": state.context.valueText,\n onFocus() {\n send(\"FOCUS\")\n },\n onBlur() {\n send(\"BLUR\")\n },\n onChange(event) {\n send({ type: \"CHANGE\", target: event.currentTarget, hint: \"set\" })\n },\n onKeyDown(event) {\n const evt = getNativeEvent(event)\n // TODO: This blocks non-ascii characters\n if (evt.isComposing) return\n\n if (!utils.isValidNumericEvent(state.context, event)) {\n event.preventDefault()\n }\n\n const step = getEventStep(event) * state.context.step\n\n const keyMap: EventKeyMap = {\n ArrowUp() {\n send({ type: \"ARROW_UP\", step })\n },\n ArrowDown() {\n send({ type: \"ARROW_DOWN\", step })\n },\n Home() {\n send(\"HOME\")\n },\n End() {\n send(\"END\")\n },\n }\n\n const exec = keyMap[event.key]\n\n if (exec) {\n exec(event)\n event.preventDefault()\n }\n },\n }),\n\n decrementTriggerProps: normalize.button({\n ...parts.decrementTrigger.attrs,\n id: dom.getDecrementTriggerId(state.context),\n disabled: isDecrementDisabled,\n \"data-disabled\": dataAttr(isDecrementDisabled),\n \"aria-label\": translations.decrementLabel,\n type: \"button\",\n tabIndex: -1,\n \"aria-controls\": dom.getInputId(state.context),\n onPointerDown(event) {\n if (isDecrementDisabled) return\n send(isLeftClick(event) ? { type: \"PRESS_DOWN\", hint: \"decrement\" } : { type: \"FOCUS\" })\n event.preventDefault()\n },\n onPointerUp() {\n send({ type: \"PRESS_UP\", hint: \"decrement\" })\n },\n onPointerLeave() {\n if (isDecrementDisabled) return\n send({ type: \"PRESS_UP\", hint: \"decrement\" })\n },\n }),\n\n incrementTriggerProps: normalize.button({\n ...parts.incrementTrigger.attrs,\n id: dom.getIncrementTriggerId(state.context),\n disabled: isIncrementDisabled,\n \"data-disabled\": dataAttr(isIncrementDisabled),\n \"aria-label\": translations.incrementLabel,\n type: \"button\",\n tabIndex: -1,\n \"aria-controls\": dom.getInputId(state.context),\n onPointerDown(event) {\n if (isIncrementDisabled) return\n send(isLeftClick(event) ? { type: \"PRESS_DOWN\", hint: \"increment\" } : { type: \"FOCUS\" })\n event.preventDefault()\n },\n onPointerUp() {\n send({ type: \"PRESS_UP\", hint: \"increment\" })\n },\n onPointerLeave() {\n send({ type: \"PRESS_UP\", hint: \"increment\" })\n },\n }),\n\n scrubberProps: normalize.element({\n ...parts.scrubber.attrs,\n \"data-disabled\": dataAttr(isDisabled),\n id: dom.getScrubberId(state.context),\n role: \"presentation\",\n onMouseDown(event) {\n if (isDisabled) return\n\n const evt = getNativeEvent(event)\n\n const point = getEventPoint(evt)\n point.x = point.x - roundToDevicePixel(7.5)\n point.y = point.y - roundToDevicePixel(7.5)\n\n send({ type: \"PRESS_DOWN_SCRUBBER\", point })\n event.preventDefault()\n },\n style: {\n cursor: isDisabled ? undefined : \"ew-resize\",\n },\n }),\n }\n}\n","import { createScope, isSafari, MAX_Z_INDEX } from \"@zag-js/dom-query\"\nimport { roundToDevicePixel, wrap } from \"@zag-js/number-utils\"\nimport type { MachineContext as Ctx } from \"./number-input.types\"\n\nexport const dom = createScope({\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `number-input:${ctx.id}`,\n getInputId: (ctx: Ctx) => ctx.ids?.input ?? `number-input:${ctx.id}:input`,\n getIncrementTriggerId: (ctx: Ctx) => ctx.ids?.incrementTrigger ?? `number-input:${ctx.id}:inc`,\n getDecrementTriggerId: (ctx: Ctx) => ctx.ids?.decrementTrigger ?? `number-input:${ctx.id}:dec`,\n getScrubberId: (ctx: Ctx) => ctx.ids?.scrubber ?? `number-input:${ctx.id}:scrubber`,\n getCursorId: (ctx: Ctx) => `number-input:${ctx.id}:cursor`,\n getLabelId: (ctx: Ctx) => ctx.ids?.label ?? `number-input:${ctx.id}:label`,\n\n getInputEl: (ctx: Ctx) => dom.getById<HTMLInputElement>(ctx, dom.getInputId(ctx)),\n getIncrementTriggerEl: (ctx: Ctx) => dom.getById<HTMLButtonElement>(ctx, dom.getIncrementTriggerId(ctx)),\n getDecrementTriggerEl: (ctx: Ctx) => dom.getById<HTMLButtonElement>(ctx, dom.getDecrementTriggerId(ctx)),\n getScrubberEl: (ctx: Ctx) => dom.getById(ctx, dom.getScrubberId(ctx)),\n getCursorEl: (ctx: Ctx) => dom.getDoc(ctx).getElementById(dom.getCursorId(ctx)),\n\n getPressedTriggerEl: (ctx: Ctx, hint = ctx.hint) => {\n let btnEl: HTMLButtonElement | null = null\n if (hint === \"increment\") {\n btnEl = dom.getIncrementTriggerEl(ctx)\n }\n if (hint === \"decrement\") {\n btnEl = dom.getDecrementTriggerEl(ctx)\n }\n return btnEl\n },\n\n setupVirtualCursor(ctx: Ctx) {\n if (isSafari()) return\n dom.createVirtualCursor(ctx)\n return () => {\n dom.getCursorEl(ctx)?.remove()\n }\n },\n\n preventTextSelection(ctx: Ctx) {\n const doc = dom.getDoc(ctx)\n const html = doc.documentElement\n const body = doc.body\n\n body.style.pointerEvents = \"none\"\n html.style.userSelect = \"none\"\n html.style.cursor = \"ew-resize\"\n\n return () => {\n body.style.pointerEvents = \"\"\n html.style.userSelect = \"\"\n html.style.cursor = \"\"\n if (!html.style.length) {\n html.removeAttribute(\"style\")\n }\n if (!body.style.length) {\n body.removeAttribute(\"style\")\n }\n }\n },\n\n getMousementValue(ctx: Ctx, event: MouseEvent) {\n const x = roundToDevicePixel(event.movementX)\n const y = roundToDevicePixel(event.movementY)\n\n let hint = x > 0 ? \"increment\" : x < 0 ? \"decrement\" : null\n\n if (ctx.isRtl && hint === \"increment\") hint = \"decrement\"\n if (ctx.isRtl && hint === \"decrement\") hint = \"increment\"\n\n const point = {\n x: ctx.scrubberCursorPoint!.x + x,\n y: ctx.scrubberCursorPoint!.y + y,\n }\n\n const win = dom.getWin(ctx)\n const width = win.innerWidth\n const half = roundToDevicePixel(7.5)\n point.x = wrap(point.x + half, width) - half\n\n return { hint, point }\n },\n\n createVirtualCursor(ctx: Ctx) {\n const doc = dom.getDoc(ctx)\n const el = doc.createElement(\"div\")\n el.className = \"scrubber--cursor\"\n el.id = dom.getCursorId(ctx)\n\n Object.assign(el.style, {\n width: \"15px\",\n height: \"15px\",\n position: \"fixed\",\n pointerEvents: \"none\",\n left: \"0px\",\n top: \"0px\",\n zIndex: MAX_Z_INDEX,\n transform: ctx.scrubberCursorPoint\n ? `translate3d(${ctx.scrubberCursorPoint.x}px, ${ctx.scrubberCursorPoint.y}px, 0px)`\n : undefined,\n willChange: \"transform\",\n })\n\n el.innerHTML = `\n <svg width=\"46\" height=\"15\" style=\"left: -15.5px; position: absolute; top: 0; filter: drop-shadow(rgba(0, 0, 0, 0.4) 0px 1px 1.1px);\">\n <g transform=\"translate(2 3)\">\n <path fill-rule=\"evenodd\" d=\"M 15 4.5L 15 2L 11.5 5.5L 15 9L 15 6.5L 31 6.5L 31 9L 34.5 5.5L 31 2L 31 4.5Z\" style=\"stroke-width: 2px; stroke: white;\"></path>\n <path fill-rule=\"evenodd\" d=\"M 15 4.5L 15 2L 11.5 5.5L 15 9L 15 6.5L 31 6.5L 31 9L 34.5 5.5L 31 2L 31 4.5Z\"></path>\n </g>\n </svg>`\n\n doc.body.appendChild(el)\n },\n})\n","import { isModifiedEvent } from \"@zag-js/dom-event\"\nimport { clamp, decrement, formatDecimal, increment } from \"@zag-js/number-utils\"\nimport type { JSX } from \"@zag-js/types\"\nimport type { MachineContext as Ctx } from \"./number-input.types\"\n\nexport const utils = {\n isValidNumericEvent: (ctx: Ctx, event: JSX.KeyboardEvent) => {\n if (event.key == null) return true\n const isModifier = isModifiedEvent(event)\n const isSingleKey = event.key.length === 1\n if (isModifier || !isSingleKey) return true\n return ctx.validateCharacter?.(event.key) ?? utils.isFloatingPoint(event.key)\n },\n isFloatingPoint: (v: string) => /^[0-9+\\-.]$/.test(v),\n sanitize: (ctx: Ctx, value: string) => {\n return value\n .split(\"\")\n .filter(ctx.validateCharacter ?? utils.isFloatingPoint)\n .join(\"\")\n },\n increment: (ctx: Ctx, step?: number) => {\n const value = increment(ctx.value, step ?? ctx.step)\n return formatDecimal(clamp(value, ctx), ctx)\n },\n decrement: (ctx: Ctx, step?: number) => {\n const value = decrement(ctx.value, step ?? ctx.step)\n return formatDecimal(clamp(value, ctx), ctx)\n },\n clamp: (ctx: Ctx) => {\n return formatDecimal(clamp(ctx.value, ctx), ctx)\n },\n parse: (ctx: Ctx, value: string) => {\n return ctx.parse?.(value) ?? value\n },\n format: (ctx: Ctx, value: string | number) => {\n const _val = value.toString()\n return ctx.format?.(_val) ?? _val\n },\n round: (ctx: Ctx) => {\n return formatDecimal(ctx.value, ctx)\n },\n}\n","import { choose, createMachine, guards } from \"@zag-js/core\"\nimport { addDomEvent, requestPointerLock } from \"@zag-js/dom-event\"\nimport { isSafari, raf } from \"@zag-js/dom-query\"\nimport { observeAttributes } from \"@zag-js/mutation-observer\"\nimport { isAtMax, isAtMin, isWithinRange, valueOf } from \"@zag-js/number-utils\"\nimport { callAll, compact, isEqual, match } from \"@zag-js/utils\"\nimport { dom } from \"./number-input.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./number-input.types\"\nimport { utils } from \"./number-input.utils\"\n\nconst { not, and } = guards\n\nexport function machine(userContext: UserDefinedContext) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n id: \"number-input\",\n initial: \"idle\",\n context: {\n dir: \"ltr\",\n focusInputOnChange: true,\n clampValueOnBlur: true,\n allowOverflow: false,\n inputMode: \"decimal\",\n pattern: \"[0-9]*(.[0-9]+)?\",\n hint: null,\n value: \"\",\n step: 1,\n min: Number.MIN_SAFE_INTEGER,\n max: Number.MAX_SAFE_INTEGER,\n scrubberCursorPoint: null,\n invalid: false,\n spinOnPress: true,\n ...ctx,\n translations: {\n incrementLabel: \"increment value\",\n decrementLabel: \"decrease value\",\n ...ctx.translations,\n },\n },\n\n computed: {\n isRtl: (ctx) => ctx.dir === \"rtl\",\n valueAsNumber: (ctx) => valueOf(ctx.value),\n isAtMin: (ctx) => isAtMin(ctx.value, ctx),\n isAtMax: (ctx) => isAtMax(ctx.value, ctx),\n isOutOfRange: (ctx) => !isWithinRange(ctx.value, ctx),\n isValueEmpty: (ctx) => ctx.value === \"\",\n canIncrement: (ctx) => ctx.allowOverflow || !ctx.isAtMax,\n canDecrement: (ctx) => ctx.allowOverflow || !ctx.isAtMin,\n valueText: (ctx) => ctx.translations.valueText?.(ctx.value),\n formattedValue: (ctx) => ctx.format?.(ctx.value).toString() ?? ctx.value,\n },\n\n watch: {\n value: [\"syncInputElement\"],\n isOutOfRange: [\"invokeOnInvalid\"],\n scrubberCursorPoint: [\"setVirtualCursorPosition\"],\n },\n\n entry: [\"syncInputValue\"],\n\n on: {\n SET_VALUE: {\n actions: [\"setValue\", \"clampValue\", \"setHintToSet\"],\n },\n CLEAR_VALUE: {\n actions: [\"clearValue\"],\n },\n INCREMENT: {\n actions: [\"increment\"],\n },\n DECREMENT: {\n actions: [\"decrement\"],\n },\n },\n\n states: {\n idle: {\n on: {\n PRESS_DOWN: {\n target: \"before:spin\",\n actions: [\"focusInput\", \"invokeOnFocus\", \"setHint\"],\n },\n PRESS_DOWN_SCRUBBER: {\n target: \"scrubbing\",\n actions: [\"focusInput\", \"invokeOnFocus\", \"setHint\", \"setCursorPoint\"],\n },\n FOCUS: {\n target: \"focused\",\n actions: [\"focusInput\", \"invokeOnFocus\"],\n },\n },\n },\n\n focused: {\n tags: \"focus\",\n entry: \"focusInput\",\n activities: \"attachWheelListener\",\n on: {\n PRESS_DOWN: {\n target: \"before:spin\",\n actions: [\"focusInput\", \"setHint\"],\n },\n PRESS_DOWN_SCRUBBER: {\n target: \"scrubbing\",\n actions: [\"focusInput\", \"setHint\", \"setCursorPoint\"],\n },\n ARROW_UP: {\n actions: \"increment\",\n },\n ARROW_DOWN: {\n actions: \"decrement\",\n },\n HOME: {\n actions: \"setToMin\",\n },\n END: {\n actions: \"setToMax\",\n },\n CHANGE: {\n actions: [\"setValue\", \"setHint\"],\n },\n BLUR: [\n {\n guard: \"isInvalidExponential\",\n target: \"idle\",\n actions: [\"clearValue\", \"clearHint\", \"invokeOnBlur\"],\n },\n {\n guard: and(\"clampOnBlur\", not(\"isInRange\"), not(\"isEmptyValue\")),\n target: \"idle\",\n actions: [\"clampValue\", \"clearHint\", \"invokeOnBlur\"],\n },\n {\n target: \"idle\",\n actions: [\"roundValue\", \"invokeOnBlur\"],\n },\n ],\n },\n },\n\n \"before:spin\": {\n tags: \"focus\",\n activities: \"trackButtonDisabled\",\n entry: choose([\n { guard: \"isIncrementHint\", actions: \"increment\" },\n { guard: \"isDecrementHint\", actions: \"decrement\" },\n ]),\n after: {\n CHANGE_DELAY: {\n target: \"spinning\",\n guard: and(\"isInRange\", \"spinOnPress\"),\n },\n },\n on: {\n PRESS_UP: {\n target: \"focused\",\n actions: \"clearHint\",\n },\n },\n },\n\n spinning: {\n tags: \"focus\",\n activities: \"trackButtonDisabled\",\n every: [\n {\n delay: \"CHANGE_INTERVAL\",\n guard: and(not(\"isAtMin\"), \"isIncrementHint\"),\n actions: \"increment\",\n },\n {\n delay: \"CHANGE_INTERVAL\",\n guard: and(not(\"isAtMax\"), \"isDecrementHint\"),\n actions: \"decrement\",\n },\n ],\n on: {\n PRESS_UP: {\n target: \"focused\",\n actions: \"clearHint\",\n },\n },\n },\n\n scrubbing: {\n tags: \"focus\",\n exit: \"clearCursorPoint\",\n activities: [\"activatePointerLock\", \"trackMousemove\", \"setupVirtualCursor\", \"preventTextSelection\"],\n on: {\n POINTER_UP_SCRUBBER: \"focused\",\n POINTER_MOVE_SCRUBBER: [\n {\n guard: \"isIncrementHint\",\n actions: [\"increment\", \"setCursorPoint\"],\n },\n {\n guard: \"isDecrementHint\",\n actions: [\"decrement\", \"setCursorPoint\"],\n },\n ],\n },\n },\n },\n },\n {\n delays: {\n CHANGE_INTERVAL: 50,\n CHANGE_DELAY: 300,\n },\n\n guards: {\n clampOnBlur: (ctx) => !!ctx.clampValueOnBlur,\n isAtMin: (ctx) => ctx.isAtMin,\n spinOnPress: (ctx) => !!ctx.spinOnPress,\n isAtMax: (ctx) => ctx.isAtMax,\n isInRange: (ctx) => !ctx.isOutOfRange,\n isDecrementHint: (ctx, evt) => (evt.hint ?? ctx.hint) === \"decrement\",\n isEmptyValue: (ctx) => ctx.isValueEmpty,\n isIncrementHint: (ctx, evt) => (evt.hint ?? ctx.hint) === \"increment\",\n isInvalidExponential: (ctx) => ctx.value.toString().startsWith(\"e\"),\n },\n\n activities: {\n setupVirtualCursor(ctx) {\n return dom.setupVirtualCursor(ctx)\n },\n preventTextSelection(ctx) {\n return dom.preventTextSelection(ctx)\n },\n trackButtonDisabled(ctx, _evt, { send }) {\n const btn = dom.getPressedTriggerEl(ctx, ctx.hint)\n return observeAttributes(btn, [\"disabled\"], () => {\n send(\"PRESS_UP\")\n })\n },\n attachWheelListener(ctx, _evt, { send }) {\n const input = dom.getInputEl(ctx)\n if (!input) return\n\n function onWheel(event: WheelEvent) {\n const isInputFocused = dom.getDoc(ctx).activeElement === input\n if (!ctx.allowMouseWheel || !isInputFocused) return\n event.preventDefault()\n\n const dir = Math.sign(event.deltaY) * -1\n if (dir === 1) {\n send(\"INCREMENT\")\n } else if (dir === -1) {\n send(\"DECREMENT\")\n }\n }\n return addDomEvent(input, \"wheel\", onWheel, { passive: false })\n },\n activatePointerLock(ctx) {\n if (isSafari()) return\n return requestPointerLock(dom.getDoc(ctx))\n },\n trackMousemove(ctx, _evt, { send }) {\n const doc = dom.getDoc(ctx)\n\n function onMousemove(event: MouseEvent) {\n if (!ctx.scrubberCursorPoint) return\n const value = dom.getMousementValue(ctx, event)\n if (!value.hint) return\n send({\n type: \"POINTER_MOVE_SCRUBBER\",\n hint: value.hint,\n point: value.point,\n })\n }\n\n function onMouseup() {\n send(\"POINTER_UP_SCRUBBER\")\n }\n\n return callAll(\n addDomEvent(doc, \"mousemove\", onMousemove, false),\n addDomEvent(doc, \"mouseup\", onMouseup, false),\n )\n },\n },\n\n actions: {\n focusInput(ctx) {\n if (!ctx.focusInputOnChange) return\n const inputEl = dom.getInputEl(ctx)\n raf(() => {\n inputEl?.focus()\n })\n },\n increment(ctx, evt) {\n set.value(ctx, utils.increment(ctx, evt.step))\n },\n decrement(ctx, evt) {\n set.value(ctx, utils.decrement(ctx, evt.step))\n },\n clampValue(ctx) {\n set.value(ctx, utils.clamp(ctx))\n },\n roundValue(ctx) {\n if (ctx.value === \"\") return\n set.value(ctx, utils.round(ctx))\n },\n setValue(ctx, evt) {\n let value = evt.target?.value ?? evt.value\n value = utils.sanitize(ctx, utils.parse(ctx, value.toString()))\n set.value(ctx, value)\n },\n clearValue(ctx) {\n set.value(ctx, \"\")\n },\n setToMax(ctx) {\n set.value(ctx, ctx.max.toString())\n },\n setToMin(ctx) {\n set.value(ctx, ctx.min.toString())\n },\n setHint(ctx, evt) {\n ctx.hint = evt.hint\n },\n clearHint(ctx) {\n ctx.hint = null\n },\n setHintToSet(ctx) {\n ctx.hint = \"set\"\n },\n invokeOnFocus(ctx, evt) {\n const srcElement: HTMLElement | null = match(evt.type, {\n PRESS_DOWN: dom.getPressedTriggerEl(ctx, evt.hint),\n FOCUS: dom.getInputEl(ctx),\n PRESS_DOWN_SCRUBBER: dom.getScrubberEl(ctx),\n })\n ctx.onFocusChange?.({\n focused: true,\n srcElement,\n value: ctx.formattedValue,\n valueAsNumber: ctx.valueAsNumber,\n })\n },\n invokeOnBlur(ctx) {\n ctx.onFocusChange?.({\n focused: false,\n value: ctx.formattedValue,\n valueAsNumber: ctx.valueAsNumber,\n })\n },\n invokeOnInvalid(ctx) {\n if (!ctx.isOutOfRange) return\n const reason = ctx.valueAsNumber > ctx.max ? \"rangeOverflow\" : \"rangeUnderflow\"\n ctx.onValueInvalid?.({\n reason,\n value: ctx.formattedValue,\n valueAsNumber: ctx.valueAsNumber,\n })\n },\n syncInputElement(ctx) {\n const inputEl = dom.getInputEl(ctx)\n dom.setValue(inputEl, ctx.formattedValue)\n },\n syncInputValue(ctx) {\n const inputEl = dom.getInputEl(ctx)\n if (!inputEl || inputEl.value == ctx.value) return\n\n const value = utils.parse(ctx, inputEl.value)\n set.value(ctx, utils.sanitize(ctx, value))\n },\n setCursorPoint(ctx, evt) {\n ctx.scrubberCursorPoint = evt.point\n },\n clearCursorPoint(ctx) {\n ctx.scrubberCursorPoint = null\n },\n setVirtualCursorPosition(ctx) {\n const cursor = dom.getCursorEl(ctx)\n if (!cursor || !ctx.scrubberCursorPoint) return\n const { x, y } = ctx.scrubberCursorPoint\n cursor.style.transform = `translate3d(${x}px, ${y}px, 0px)`\n },\n },\n },\n )\n}\n\nconst invoke = {\n onChange: (ctx: MachineContext) => {\n ctx.onValueChange?.({ value: ctx.value, valueAsNumber: ctx.valueAsNumber })\n },\n}\n\nconst set = {\n value: (ctx: MachineContext, value: string) => {\n if (isEqual(ctx.value, value)) return\n ctx.value = value\n invoke.onChange(ctx)\n },\n}\n"],"mappings":"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","names":["roundToDevicePixel","roundToDevicePixel","isSafari","ctx","isSafari"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zag-js/number-input",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.0",
|
|
4
4
|
"description": "Core logic for the number-input widget implemented as a state machine",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"js",
|
|
@@ -27,14 +27,14 @@
|
|
|
27
27
|
"url": "https://github.com/chakra-ui/zag/issues"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@zag-js/anatomy": "0.
|
|
31
|
-
"@zag-js/
|
|
32
|
-
"@zag-js/
|
|
33
|
-
"@zag-js/dom-event": "0.
|
|
34
|
-
"@zag-js/mutation-observer": "0.
|
|
35
|
-
"@zag-js/number-utils": "0.
|
|
36
|
-
"@zag-js/utils": "0.
|
|
37
|
-
"@zag-js/types": "0.
|
|
30
|
+
"@zag-js/anatomy": "0.21.0",
|
|
31
|
+
"@zag-js/core": "0.21.0",
|
|
32
|
+
"@zag-js/dom-query": "0.21.0",
|
|
33
|
+
"@zag-js/dom-event": "0.21.0",
|
|
34
|
+
"@zag-js/mutation-observer": "0.21.0",
|
|
35
|
+
"@zag-js/number-utils": "0.21.0",
|
|
36
|
+
"@zag-js/utils": "0.21.0",
|
|
37
|
+
"@zag-js/types": "0.21.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"clean-package": "2.2.0"
|
|
@@ -3,7 +3,7 @@ import { addDomEvent, requestPointerLock } from "@zag-js/dom-event"
|
|
|
3
3
|
import { isSafari, raf } from "@zag-js/dom-query"
|
|
4
4
|
import { observeAttributes } from "@zag-js/mutation-observer"
|
|
5
5
|
import { isAtMax, isAtMin, isWithinRange, valueOf } from "@zag-js/number-utils"
|
|
6
|
-
import { callAll, compact, isEqual } from "@zag-js/utils"
|
|
6
|
+
import { callAll, compact, isEqual, match } from "@zag-js/utils"
|
|
7
7
|
import { dom } from "./number-input.dom"
|
|
8
8
|
import type { MachineContext, MachineState, UserDefinedContext } from "./number-input.types"
|
|
9
9
|
import { utils } from "./number-input.utils"
|
|
@@ -327,29 +327,29 @@ export function machine(userContext: UserDefinedContext) {
|
|
|
327
327
|
ctx.hint = "set"
|
|
328
328
|
},
|
|
329
329
|
invokeOnFocus(ctx, evt) {
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
srcElement = dom.getScrubberEl(ctx)
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
ctx.onFocus?.({
|
|
341
|
-
value: ctx.value,
|
|
342
|
-
valueAsNumber: ctx.valueAsNumber,
|
|
330
|
+
const srcElement: HTMLElement | null = match(evt.type, {
|
|
331
|
+
PRESS_DOWN: dom.getPressedTriggerEl(ctx, evt.hint),
|
|
332
|
+
FOCUS: dom.getInputEl(ctx),
|
|
333
|
+
PRESS_DOWN_SCRUBBER: dom.getScrubberEl(ctx),
|
|
334
|
+
})
|
|
335
|
+
ctx.onFocusChange?.({
|
|
336
|
+
focused: true,
|
|
343
337
|
srcElement,
|
|
338
|
+
value: ctx.formattedValue,
|
|
339
|
+
valueAsNumber: ctx.valueAsNumber,
|
|
344
340
|
})
|
|
345
341
|
},
|
|
346
342
|
invokeOnBlur(ctx) {
|
|
347
|
-
ctx.
|
|
343
|
+
ctx.onFocusChange?.({
|
|
344
|
+
focused: false,
|
|
345
|
+
value: ctx.formattedValue,
|
|
346
|
+
valueAsNumber: ctx.valueAsNumber,
|
|
347
|
+
})
|
|
348
348
|
},
|
|
349
349
|
invokeOnInvalid(ctx) {
|
|
350
350
|
if (!ctx.isOutOfRange) return
|
|
351
351
|
const reason = ctx.valueAsNumber > ctx.max ? "rangeOverflow" : "rangeUnderflow"
|
|
352
|
-
ctx.
|
|
352
|
+
ctx.onValueInvalid?.({
|
|
353
353
|
reason,
|
|
354
354
|
value: ctx.formattedValue,
|
|
355
355
|
valueAsNumber: ctx.valueAsNumber,
|
|
@@ -385,7 +385,7 @@ export function machine(userContext: UserDefinedContext) {
|
|
|
385
385
|
|
|
386
386
|
const invoke = {
|
|
387
387
|
onChange: (ctx: MachineContext) => {
|
|
388
|
-
ctx.
|
|
388
|
+
ctx.onValueChange?.({ value: ctx.value, valueAsNumber: ctx.valueAsNumber })
|
|
389
389
|
},
|
|
390
390
|
}
|
|
391
391
|
|
|
@@ -1,8 +1,32 @@
|
|
|
1
1
|
import type { StateMachine as S } from "@zag-js/core"
|
|
2
2
|
import type { CommonProperties, Context, DirectionProperty, PropTypes, RequiredBy } from "@zag-js/types"
|
|
3
3
|
|
|
4
|
+
/* -----------------------------------------------------------------------------
|
|
5
|
+
* Callback details
|
|
6
|
+
* -----------------------------------------------------------------------------*/
|
|
7
|
+
|
|
8
|
+
export interface ValueChangeDetails {
|
|
9
|
+
value: string
|
|
10
|
+
valueAsNumber: number
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface FocusChangeDetails extends ValueChangeDetails {
|
|
14
|
+
focused: boolean
|
|
15
|
+
srcElement?: HTMLElement | null
|
|
16
|
+
}
|
|
17
|
+
|
|
4
18
|
type ValidityState = "rangeUnderflow" | "rangeOverflow"
|
|
5
19
|
|
|
20
|
+
export interface ValueInvalidDetails extends ValueChangeDetails {
|
|
21
|
+
reason: ValidityState
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* -----------------------------------------------------------------------------
|
|
25
|
+
* Machine context
|
|
26
|
+
* -----------------------------------------------------------------------------*/
|
|
27
|
+
|
|
28
|
+
type InputMode = "text" | "tel" | "numeric" | "decimal"
|
|
29
|
+
|
|
6
30
|
type ElementIds = Partial<{
|
|
7
31
|
root: string
|
|
8
32
|
label: string
|
|
@@ -28,132 +52,122 @@ type IntlTranslations = {
|
|
|
28
52
|
decrementLabel: string
|
|
29
53
|
}
|
|
30
54
|
|
|
31
|
-
|
|
55
|
+
interface PublicContext extends DirectionProperty, CommonProperties {
|
|
56
|
+
/**
|
|
57
|
+
* The ids of the elements in the number input. Useful for composition.
|
|
58
|
+
*/
|
|
59
|
+
ids?: ElementIds
|
|
60
|
+
/**
|
|
61
|
+
* The name attribute of the number input. Useful for form submission.
|
|
62
|
+
*/
|
|
63
|
+
name?: string
|
|
64
|
+
/**
|
|
65
|
+
* The associate form of the input element.
|
|
66
|
+
*/
|
|
67
|
+
form?: string
|
|
68
|
+
/**
|
|
69
|
+
* Whether the number input is disabled.
|
|
70
|
+
*/
|
|
71
|
+
disabled?: boolean
|
|
72
|
+
/**
|
|
73
|
+
* Whether the number input is readonly
|
|
74
|
+
*/
|
|
75
|
+
readOnly?: boolean
|
|
76
|
+
/**
|
|
77
|
+
* Whether the number input value is invalid.
|
|
78
|
+
*/
|
|
79
|
+
invalid?: boolean
|
|
80
|
+
/**
|
|
81
|
+
* The pattern used to check the <input> element's value against
|
|
82
|
+
*
|
|
83
|
+
* @default
|
|
84
|
+
* "[0-9]*(.[0-9]+)?"
|
|
85
|
+
*/
|
|
86
|
+
pattern: string
|
|
87
|
+
/**
|
|
88
|
+
* The value of the input
|
|
89
|
+
*/
|
|
32
90
|
value: string
|
|
33
|
-
|
|
91
|
+
/**
|
|
92
|
+
* The minimum value of the number input
|
|
93
|
+
*/
|
|
94
|
+
min: number
|
|
95
|
+
/**
|
|
96
|
+
* The maximum value of the number input
|
|
97
|
+
*/
|
|
98
|
+
max: number
|
|
99
|
+
/**
|
|
100
|
+
* The amount to increment or decrement the value by
|
|
101
|
+
*/
|
|
102
|
+
step: number
|
|
103
|
+
/**
|
|
104
|
+
* Whether to allow mouse wheel to change the value
|
|
105
|
+
*/
|
|
106
|
+
allowMouseWheel?: boolean
|
|
107
|
+
/**
|
|
108
|
+
* Whether to allow the value overflow the min/max range
|
|
109
|
+
* @default true
|
|
110
|
+
*/
|
|
111
|
+
allowOverflow: boolean
|
|
112
|
+
/**
|
|
113
|
+
* Whether the pressed key should be allowed in the input.
|
|
114
|
+
* The default behavior is to allow DOM floating point characters defined by /^[Ee0-9+\-.]$/
|
|
115
|
+
*/
|
|
116
|
+
validateCharacter?: (char: string) => boolean
|
|
117
|
+
/**
|
|
118
|
+
* Whether to clamp the value when the input loses focus (blur)
|
|
119
|
+
* @default true
|
|
120
|
+
*/
|
|
121
|
+
clampValueOnBlur: boolean
|
|
122
|
+
/**
|
|
123
|
+
* Whether to focus input when the value changes
|
|
124
|
+
* @default true
|
|
125
|
+
*/
|
|
126
|
+
focusInputOnChange: boolean
|
|
127
|
+
/**
|
|
128
|
+
* Specifies the localized strings that identifies the accessibility elements and their states
|
|
129
|
+
*/
|
|
130
|
+
translations: IntlTranslations
|
|
131
|
+
/**
|
|
132
|
+
* If using a custom display format, this converts the custom format to a format `parseFloat` understands.
|
|
133
|
+
*/
|
|
134
|
+
parse?: (value: string) => string
|
|
135
|
+
/**
|
|
136
|
+
* If using a custom display format, this converts the default format to the custom format.
|
|
137
|
+
*/
|
|
138
|
+
format?: (value: string) => string | number
|
|
139
|
+
/**
|
|
140
|
+
* Hints at the type of data that might be entered by the user. It also determines
|
|
141
|
+
* the type of keyboard shown to the user on mobile devices
|
|
142
|
+
* @default "decimal"
|
|
143
|
+
*/
|
|
144
|
+
inputMode: InputMode
|
|
145
|
+
/**
|
|
146
|
+
* Function invoked when the value changes
|
|
147
|
+
*/
|
|
148
|
+
onValueChange?: (details: ValueChangeDetails) => void
|
|
149
|
+
/**
|
|
150
|
+
* Function invoked when the value overflows or underflows the min/max range
|
|
151
|
+
*/
|
|
152
|
+
onValueInvalid?: (details: ValueInvalidDetails) => void
|
|
153
|
+
/**
|
|
154
|
+
* Function invoked when the number input is focused
|
|
155
|
+
*/
|
|
156
|
+
onFocusChange?: (details: FocusChangeDetails) => void
|
|
157
|
+
/**
|
|
158
|
+
* The minimum number of fraction digits to use. Possible values are from 0 to 20
|
|
159
|
+
*/
|
|
160
|
+
minFractionDigits?: number
|
|
161
|
+
/**
|
|
162
|
+
* The maximum number of fraction digits to use. Possible values are from 0 to 20;
|
|
163
|
+
*/
|
|
164
|
+
maxFractionDigits?: number
|
|
165
|
+
/**
|
|
166
|
+
* Whether to spin the value when the increment/decrement button is pressed
|
|
167
|
+
*/
|
|
168
|
+
spinOnPress?: boolean
|
|
34
169
|
}
|
|
35
170
|
|
|
36
|
-
type PublicContext = DirectionProperty &
|
|
37
|
-
CommonProperties & {
|
|
38
|
-
/**
|
|
39
|
-
* The ids of the elements in the number input. Useful for composition.
|
|
40
|
-
*/
|
|
41
|
-
ids?: ElementIds
|
|
42
|
-
/**
|
|
43
|
-
* The name attribute of the number input. Useful for form submission.
|
|
44
|
-
*/
|
|
45
|
-
name?: string
|
|
46
|
-
/**
|
|
47
|
-
* The associate form of the input element.
|
|
48
|
-
*/
|
|
49
|
-
form?: string
|
|
50
|
-
/**
|
|
51
|
-
* Whether the number input is disabled.
|
|
52
|
-
*/
|
|
53
|
-
disabled?: boolean
|
|
54
|
-
/**
|
|
55
|
-
* Whether the number input is readonly
|
|
56
|
-
*/
|
|
57
|
-
readOnly?: boolean
|
|
58
|
-
/**
|
|
59
|
-
* Whether the number input value is invalid.
|
|
60
|
-
*/
|
|
61
|
-
invalid?: boolean
|
|
62
|
-
/**
|
|
63
|
-
* The pattern used to check the <input> element's value against
|
|
64
|
-
*
|
|
65
|
-
* @default
|
|
66
|
-
* "[0-9]*(.[0-9]+)?"
|
|
67
|
-
*/
|
|
68
|
-
pattern: string
|
|
69
|
-
/**
|
|
70
|
-
* The value of the input
|
|
71
|
-
*/
|
|
72
|
-
value: string
|
|
73
|
-
/**
|
|
74
|
-
* The minimum value of the number input
|
|
75
|
-
*/
|
|
76
|
-
min: number
|
|
77
|
-
/**
|
|
78
|
-
* The maximum value of the number input
|
|
79
|
-
*/
|
|
80
|
-
max: number
|
|
81
|
-
/**
|
|
82
|
-
* The amount to increment or decrement the value by
|
|
83
|
-
*/
|
|
84
|
-
step: number
|
|
85
|
-
/**
|
|
86
|
-
* Whether to allow mouse wheel to change the value
|
|
87
|
-
*/
|
|
88
|
-
allowMouseWheel?: boolean
|
|
89
|
-
/**
|
|
90
|
-
* Whether to allow the value overflow the min/max range
|
|
91
|
-
* @default true
|
|
92
|
-
*/
|
|
93
|
-
allowOverflow: boolean
|
|
94
|
-
/**
|
|
95
|
-
* Whether the pressed key should be allowed in the input.
|
|
96
|
-
* The default behavior is to allow DOM floating point characters defined by /^[Ee0-9+\-.]$/
|
|
97
|
-
*/
|
|
98
|
-
validateCharacter?: (char: string) => boolean
|
|
99
|
-
/**
|
|
100
|
-
* Whether to clamp the value when the input loses focus (blur)
|
|
101
|
-
* @default true
|
|
102
|
-
*/
|
|
103
|
-
clampValueOnBlur: boolean
|
|
104
|
-
/**
|
|
105
|
-
* Whether to focus input when the value changes
|
|
106
|
-
* @default true
|
|
107
|
-
*/
|
|
108
|
-
focusInputOnChange: boolean
|
|
109
|
-
/**
|
|
110
|
-
* Specifies the localized strings that identifies the accessibility elements and their states
|
|
111
|
-
*/
|
|
112
|
-
translations: IntlTranslations
|
|
113
|
-
/**
|
|
114
|
-
* If using a custom display format, this converts the custom format to a format `parseFloat` understands.
|
|
115
|
-
*/
|
|
116
|
-
parse?: (value: string) => string
|
|
117
|
-
/**
|
|
118
|
-
* If using a custom display format, this converts the default format to the custom format.
|
|
119
|
-
*/
|
|
120
|
-
format?: (value: string) => string | number
|
|
121
|
-
/**
|
|
122
|
-
* Hints at the type of data that might be entered by the user. It also determines
|
|
123
|
-
* the type of keyboard shown to the user on mobile devices
|
|
124
|
-
* @default "decimal"
|
|
125
|
-
*/
|
|
126
|
-
inputMode: "text" | "tel" | "numeric" | "decimal"
|
|
127
|
-
/**
|
|
128
|
-
* Function invoked when the value changes
|
|
129
|
-
*/
|
|
130
|
-
onChange?: (details: Value) => void
|
|
131
|
-
/**
|
|
132
|
-
* Function invoked when the value overflows or underflows the min/max range
|
|
133
|
-
*/
|
|
134
|
-
onInvalid?: (details: Value & { reason: ValidityState }) => void
|
|
135
|
-
/**
|
|
136
|
-
* Function invoked when the number input is focused
|
|
137
|
-
*/
|
|
138
|
-
onFocus?: (details: Value & { srcElement: HTMLElement | null }) => void
|
|
139
|
-
/**
|
|
140
|
-
* The value of the input when it is blurred
|
|
141
|
-
*/
|
|
142
|
-
onBlur?: (details: Value) => void
|
|
143
|
-
/**
|
|
144
|
-
* The minimum number of fraction digits to use. Possible values are from 0 to 20
|
|
145
|
-
*/
|
|
146
|
-
minFractionDigits?: number
|
|
147
|
-
/**
|
|
148
|
-
* The maximum number of fraction digits to use. Possible values are from 0 to 20;
|
|
149
|
-
*/
|
|
150
|
-
maxFractionDigits?: number
|
|
151
|
-
/**
|
|
152
|
-
* Whether to spin the value when the increment/decrement button is pressed
|
|
153
|
-
*/
|
|
154
|
-
spinOnPress?: boolean
|
|
155
|
-
}
|
|
156
|
-
|
|
157
171
|
export type UserDefinedContext = RequiredBy<PublicContext, "id">
|
|
158
172
|
|
|
159
173
|
type ComputedContext = Readonly<{
|
|
@@ -222,9 +236,9 @@ type PrivateContext = Context<{
|
|
|
222
236
|
scrubberCursorPoint: { x: number; y: number } | null
|
|
223
237
|
}>
|
|
224
238
|
|
|
225
|
-
export
|
|
239
|
+
export interface MachineContext extends PublicContext, PrivateContext, ComputedContext {}
|
|
226
240
|
|
|
227
|
-
export
|
|
241
|
+
export interface MachineState {
|
|
228
242
|
value: "idle" | "focused" | "spinning" | "before:spin" | "scrubbing"
|
|
229
243
|
tags: "focus"
|
|
230
244
|
}
|
|
@@ -233,7 +247,11 @@ export type State = S.State<MachineContext, MachineState>
|
|
|
233
247
|
|
|
234
248
|
export type Send = S.Send<S.AnyEventObject>
|
|
235
249
|
|
|
236
|
-
|
|
250
|
+
/* -----------------------------------------------------------------------------
|
|
251
|
+
* Component API
|
|
252
|
+
* -----------------------------------------------------------------------------*/
|
|
253
|
+
|
|
254
|
+
export interface MachineApi<T extends PropTypes = PropTypes> {
|
|
237
255
|
/**
|
|
238
256
|
* Whether the input is focused.
|
|
239
257
|
*/
|