@acusti/css-value-input 2.2.0 → 2.2.1
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/CSSValueInput.js +86 -88
- package/dist/CSSValueInput.js.map +1 -1
- package/package.json +5 -5
package/dist/CSSValueInput.js
CHANGED
|
@@ -3,10 +3,10 @@ import { c } from "react/compiler-runtime";
|
|
|
3
3
|
import { DEFAULT_UNIT_BY_CSS_VALUE_TYPE, DEFAULT_CSS_VALUE_TYPE, getCSSValueAsNumber, getUnitFromCSSValue, getCSSValueWithUnit, roundToPrecision } from "@acusti/css-values";
|
|
4
4
|
import InputText from "@acusti/input-text";
|
|
5
5
|
import clsx from "clsx";
|
|
6
|
-
import { useRef, useImperativeHandle,
|
|
6
|
+
import { useRef, useImperativeHandle, useEffect } from "react";
|
|
7
7
|
const ROOT_CLASS_NAME = "cssvalueinput";
|
|
8
8
|
function CSSValueInput(t0) {
|
|
9
|
-
const $ = c(
|
|
9
|
+
const $ = c(56);
|
|
10
10
|
const {
|
|
11
11
|
allowEmpty: t1,
|
|
12
12
|
className,
|
|
@@ -47,13 +47,13 @@ function CSSValueInput(t0) {
|
|
|
47
47
|
t6 = $[0];
|
|
48
48
|
}
|
|
49
49
|
useImperativeHandle(ref, t6);
|
|
50
|
-
const value = typeof valueFromProps === "number" &&
|
|
51
|
-
const
|
|
50
|
+
const value = typeof valueFromProps === "number" && Number.isFinite(valueFromProps) ? `${valueFromProps}` : valueFromProps;
|
|
51
|
+
const submittedValueRef = useRef(value ?? "");
|
|
52
52
|
let t7;
|
|
53
53
|
let t8;
|
|
54
54
|
if ($[1] !== value) {
|
|
55
55
|
t7 = () => {
|
|
56
|
-
|
|
56
|
+
submittedValueRef.current = value ?? "";
|
|
57
57
|
};
|
|
58
58
|
t8 = [value];
|
|
59
59
|
$[1] = value;
|
|
@@ -67,9 +67,8 @@ function CSSValueInput(t0) {
|
|
|
67
67
|
let t9;
|
|
68
68
|
if ($[4] !== onSubmitValue) {
|
|
69
69
|
t9 = (event) => {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
onSubmitValue(currentValue);
|
|
70
|
+
submittedValueRef.current = event.currentTarget.value;
|
|
71
|
+
onSubmitValue(event.currentTarget.value);
|
|
73
72
|
};
|
|
74
73
|
$[4] = onSubmitValue;
|
|
75
74
|
$[5] = t9;
|
|
@@ -78,38 +77,38 @@ function CSSValueInput(t0) {
|
|
|
78
77
|
}
|
|
79
78
|
const handleSubmitValue = t9;
|
|
80
79
|
let t10;
|
|
81
|
-
if ($[6] !== allowEmpty || $[7] !== cssValueType || $[8] !== getValueAsNumber || $[9] !== handleSubmitValue || $[10] !== max || $[11] !== min || $[12] !== onBlur || $[13] !==
|
|
80
|
+
if ($[6] !== allowEmpty || $[7] !== cssValueType || $[8] !== getValueAsNumber || $[9] !== handleSubmitValue || $[10] !== max || $[11] !== min || $[12] !== onBlur || $[13] !== unit || $[14] !== validator) {
|
|
82
81
|
t10 = (event_0) => {
|
|
83
82
|
const input = event_0.currentTarget;
|
|
84
83
|
inputRef.current = input;
|
|
85
84
|
if (onBlur) {
|
|
86
85
|
onBlur(event_0);
|
|
87
86
|
}
|
|
88
|
-
const
|
|
89
|
-
if (allowEmpty && !
|
|
87
|
+
const currentValue = input.value.trim();
|
|
88
|
+
if (allowEmpty && !currentValue) {
|
|
90
89
|
handleSubmitValue(event_0);
|
|
91
90
|
return;
|
|
92
91
|
}
|
|
93
|
-
const currentValueAsNumber = getValueAsNumber(
|
|
92
|
+
const currentValueAsNumber = getValueAsNumber(currentValue);
|
|
94
93
|
const isCurrentValueFinite = Number.isFinite(currentValueAsNumber);
|
|
95
94
|
const defaultUnit = unit ? getUnitFromCSSValue({
|
|
96
95
|
cssValueType,
|
|
97
96
|
defaultUnit: unit,
|
|
98
|
-
value:
|
|
97
|
+
value: submittedValueRef.current
|
|
99
98
|
}) : "";
|
|
100
99
|
if (!isCurrentValueFinite) {
|
|
101
100
|
let isValid = false;
|
|
102
101
|
if (validator instanceof RegExp) {
|
|
103
|
-
isValid = validator.test(
|
|
102
|
+
isValid = validator.test(currentValue);
|
|
104
103
|
} else {
|
|
105
104
|
if (validator) {
|
|
106
|
-
isValid = validator(
|
|
105
|
+
isValid = validator(currentValue);
|
|
107
106
|
}
|
|
108
107
|
}
|
|
109
108
|
if (isValid) {
|
|
110
109
|
handleSubmitValue(event_0);
|
|
111
110
|
} else {
|
|
112
|
-
input.value =
|
|
111
|
+
input.value = submittedValueRef.current;
|
|
113
112
|
}
|
|
114
113
|
return;
|
|
115
114
|
}
|
|
@@ -131,14 +130,14 @@ function CSSValueInput(t0) {
|
|
|
131
130
|
const currentUnit = getUnitFromCSSValue({
|
|
132
131
|
cssValueType,
|
|
133
132
|
defaultUnit,
|
|
134
|
-
value:
|
|
133
|
+
value: currentValue
|
|
135
134
|
});
|
|
136
135
|
input.value = normalizedValueAsNumber + currentUnit;
|
|
137
136
|
} else {
|
|
138
137
|
input.value = getCSSValueWithUnit({
|
|
139
138
|
cssValueType,
|
|
140
139
|
defaultUnit,
|
|
141
|
-
value:
|
|
140
|
+
value: currentValue
|
|
142
141
|
});
|
|
143
142
|
}
|
|
144
143
|
handleSubmitValue(event_0);
|
|
@@ -150,28 +149,27 @@ function CSSValueInput(t0) {
|
|
|
150
149
|
$[10] = max;
|
|
151
150
|
$[11] = min;
|
|
152
151
|
$[12] = onBlur;
|
|
153
|
-
$[13] =
|
|
154
|
-
$[14] =
|
|
155
|
-
$[15] =
|
|
156
|
-
$[16] = t10;
|
|
152
|
+
$[13] = unit;
|
|
153
|
+
$[14] = validator;
|
|
154
|
+
$[15] = t10;
|
|
157
155
|
} else {
|
|
158
|
-
t10 = $[
|
|
156
|
+
t10 = $[15];
|
|
159
157
|
}
|
|
160
158
|
const handleBlur = t10;
|
|
161
159
|
let t11;
|
|
162
|
-
if ($[
|
|
160
|
+
if ($[16] !== cssValueType || $[17] !== getValueAsNumber || $[18] !== max || $[19] !== min || $[20] !== step || $[21] !== unit) {
|
|
163
161
|
t11 = (t122) => {
|
|
164
162
|
const {
|
|
165
|
-
currentValue:
|
|
163
|
+
currentValue: currentValue_0,
|
|
166
164
|
multiplier: t132,
|
|
167
165
|
signum: t142
|
|
168
166
|
} = t122;
|
|
169
167
|
const multiplier = t132 === void 0 ? 1 : t132;
|
|
170
168
|
const signum = t142 === void 0 ? 1 : t142;
|
|
171
169
|
const modifier = multiplier * step * signum;
|
|
172
|
-
const currentValueAsNumber_0 = getValueAsNumber(
|
|
173
|
-
if (typeof
|
|
174
|
-
return
|
|
170
|
+
const currentValueAsNumber_0 = getValueAsNumber(currentValue_0);
|
|
171
|
+
if (typeof currentValue_0 === "string" && Number.isNaN(currentValueAsNumber_0)) {
|
|
172
|
+
return currentValue_0;
|
|
175
173
|
}
|
|
176
174
|
let nextValue = currentValueAsNumber_0 + modifier;
|
|
177
175
|
if (cssValueType === "integer") {
|
|
@@ -188,23 +186,23 @@ function CSSValueInput(t0) {
|
|
|
188
186
|
const nextUnit = getUnitFromCSSValue({
|
|
189
187
|
cssValueType,
|
|
190
188
|
defaultUnit: unit,
|
|
191
|
-
value:
|
|
189
|
+
value: currentValue_0
|
|
192
190
|
});
|
|
193
191
|
return `${nextValue}${nextUnit}`;
|
|
194
192
|
};
|
|
195
|
-
$[
|
|
196
|
-
$[
|
|
197
|
-
$[
|
|
198
|
-
$[
|
|
199
|
-
$[
|
|
200
|
-
$[
|
|
201
|
-
$[
|
|
193
|
+
$[16] = cssValueType;
|
|
194
|
+
$[17] = getValueAsNumber;
|
|
195
|
+
$[18] = max;
|
|
196
|
+
$[19] = min;
|
|
197
|
+
$[20] = step;
|
|
198
|
+
$[21] = unit;
|
|
199
|
+
$[22] = t11;
|
|
202
200
|
} else {
|
|
203
|
-
t11 = $[
|
|
201
|
+
t11 = $[22];
|
|
204
202
|
}
|
|
205
203
|
const getNextValue = t11;
|
|
206
204
|
let t12;
|
|
207
|
-
if ($[
|
|
205
|
+
if ($[23] !== getNextValue || $[24] !== onKeyDown || $[25] !== placeholder || $[26] !== unit) {
|
|
208
206
|
t12 = (event_1) => {
|
|
209
207
|
const input_0 = event_1.currentTarget;
|
|
210
208
|
inputRef.current = input_0;
|
|
@@ -214,30 +212,30 @@ function CSSValueInput(t0) {
|
|
|
214
212
|
if (event_1.key !== "ArrowDown" && event_1.key !== "ArrowUp") {
|
|
215
213
|
return;
|
|
216
214
|
}
|
|
217
|
-
const
|
|
215
|
+
const currentValue_1 = input_0.value ?? placeholder ?? `0${unit}`;
|
|
218
216
|
const nextValue_0 = getNextValue({
|
|
219
|
-
currentValue:
|
|
217
|
+
currentValue: currentValue_1,
|
|
220
218
|
multiplier: event_1.shiftKey ? 10 : 1,
|
|
221
219
|
signum: event_1.key === "ArrowUp" ? 1 : -1
|
|
222
220
|
});
|
|
223
|
-
if (nextValue_0 ===
|
|
221
|
+
if (nextValue_0 === currentValue_1) {
|
|
224
222
|
return;
|
|
225
223
|
}
|
|
226
224
|
event_1.stopPropagation();
|
|
227
225
|
event_1.preventDefault();
|
|
228
226
|
input_0.value = nextValue_0;
|
|
229
227
|
};
|
|
230
|
-
$[
|
|
231
|
-
$[
|
|
232
|
-
$[
|
|
233
|
-
$[
|
|
234
|
-
$[
|
|
228
|
+
$[23] = getNextValue;
|
|
229
|
+
$[24] = onKeyDown;
|
|
230
|
+
$[25] = placeholder;
|
|
231
|
+
$[26] = unit;
|
|
232
|
+
$[27] = t12;
|
|
235
233
|
} else {
|
|
236
|
-
t12 = $[
|
|
234
|
+
t12 = $[27];
|
|
237
235
|
}
|
|
238
236
|
const handleKeyDown = t12;
|
|
239
237
|
let t13;
|
|
240
|
-
if ($[
|
|
238
|
+
if ($[28] !== handleSubmitValue || $[29] !== onKeyUp) {
|
|
241
239
|
t13 = (event_2) => {
|
|
242
240
|
if (onKeyUp) {
|
|
243
241
|
onKeyUp(event_2);
|
|
@@ -246,74 +244,74 @@ function CSSValueInput(t0) {
|
|
|
246
244
|
handleSubmitValue(event_2);
|
|
247
245
|
}
|
|
248
246
|
};
|
|
249
|
-
$[
|
|
250
|
-
$[
|
|
251
|
-
$[
|
|
247
|
+
$[28] = handleSubmitValue;
|
|
248
|
+
$[29] = onKeyUp;
|
|
249
|
+
$[30] = t13;
|
|
252
250
|
} else {
|
|
253
|
-
t13 = $[
|
|
251
|
+
t13 = $[30];
|
|
254
252
|
}
|
|
255
253
|
const handleKeyUp = t13;
|
|
256
254
|
const t14 = label ? void 0 : title;
|
|
257
255
|
let t15;
|
|
258
|
-
if ($[
|
|
256
|
+
if ($[31] !== className || $[32] !== disabled) {
|
|
259
257
|
t15 = clsx(ROOT_CLASS_NAME, className, {
|
|
260
258
|
disabled
|
|
261
259
|
});
|
|
262
|
-
$[
|
|
263
|
-
$[
|
|
264
|
-
$[
|
|
260
|
+
$[31] = className;
|
|
261
|
+
$[32] = disabled;
|
|
262
|
+
$[33] = t15;
|
|
265
263
|
} else {
|
|
266
|
-
t15 = $[
|
|
264
|
+
t15 = $[33];
|
|
267
265
|
}
|
|
268
266
|
let t16;
|
|
269
|
-
if ($[
|
|
267
|
+
if ($[34] !== icon) {
|
|
270
268
|
t16 = icon == null ? null : /* @__PURE__ */ jsx("div", { className: `${ROOT_CLASS_NAME}-icon`, children: icon });
|
|
271
|
-
$[
|
|
272
|
-
$[
|
|
269
|
+
$[34] = icon;
|
|
270
|
+
$[35] = t16;
|
|
273
271
|
} else {
|
|
274
|
-
t16 = $[
|
|
272
|
+
t16 = $[35];
|
|
275
273
|
}
|
|
276
274
|
let t17;
|
|
277
|
-
if ($[
|
|
275
|
+
if ($[36] !== label) {
|
|
278
276
|
t17 = label ? /* @__PURE__ */ jsx("div", { className: `${ROOT_CLASS_NAME}-label`, children: /* @__PURE__ */ jsx("p", { className: `${ROOT_CLASS_NAME}-label-text`, children: label }) }) : null;
|
|
279
|
-
$[
|
|
280
|
-
$[
|
|
277
|
+
$[36] = label;
|
|
278
|
+
$[37] = t17;
|
|
281
279
|
} else {
|
|
282
|
-
t17 = $[
|
|
280
|
+
t17 = $[37];
|
|
283
281
|
}
|
|
284
282
|
let t18;
|
|
285
|
-
if ($[
|
|
286
|
-
t18 = /* @__PURE__ */ jsx("div", { className: `${ROOT_CLASS_NAME}-value`, children: /* @__PURE__ */ jsx(InputText, { disabled, discardOnEscape: true, initialValue:
|
|
287
|
-
$[
|
|
288
|
-
$[
|
|
289
|
-
$[
|
|
290
|
-
$[
|
|
291
|
-
$[
|
|
292
|
-
$[
|
|
293
|
-
$[
|
|
294
|
-
$[
|
|
295
|
-
$[
|
|
296
|
-
$[
|
|
297
|
-
$[
|
|
283
|
+
if ($[38] !== disabled || $[39] !== handleBlur || $[40] !== handleKeyDown || $[41] !== handleKeyUp || $[42] !== name || $[43] !== onChange || $[44] !== onFocus || $[45] !== placeholder || $[46] !== tabIndex || $[47] !== value) {
|
|
284
|
+
t18 = /* @__PURE__ */ jsx("div", { className: `${ROOT_CLASS_NAME}-value`, children: /* @__PURE__ */ jsx(InputText, { disabled, discardOnEscape: true, initialValue: value, name, onBlur: handleBlur, onChange, onFocus, onKeyDown: handleKeyDown, onKeyUp: handleKeyUp, placeholder, ref: inputRef, selectTextOnFocus: true, tabIndex }) });
|
|
285
|
+
$[38] = disabled;
|
|
286
|
+
$[39] = handleBlur;
|
|
287
|
+
$[40] = handleKeyDown;
|
|
288
|
+
$[41] = handleKeyUp;
|
|
289
|
+
$[42] = name;
|
|
290
|
+
$[43] = onChange;
|
|
291
|
+
$[44] = onFocus;
|
|
292
|
+
$[45] = placeholder;
|
|
293
|
+
$[46] = tabIndex;
|
|
294
|
+
$[47] = value;
|
|
295
|
+
$[48] = t18;
|
|
298
296
|
} else {
|
|
299
|
-
t18 = $[
|
|
297
|
+
t18 = $[48];
|
|
300
298
|
}
|
|
301
299
|
let t19;
|
|
302
|
-
if ($[
|
|
300
|
+
if ($[49] !== t14 || $[50] !== t15 || $[51] !== t16 || $[52] !== t17 || $[53] !== t18 || $[54] !== title) {
|
|
303
301
|
t19 = /* @__PURE__ */ jsxs("label", { "aria-label": t14, className: t15, title, children: [
|
|
304
302
|
t16,
|
|
305
303
|
t17,
|
|
306
304
|
t18
|
|
307
305
|
] });
|
|
308
|
-
$[
|
|
309
|
-
$[
|
|
310
|
-
$[
|
|
311
|
-
$[
|
|
312
|
-
$[
|
|
313
|
-
$[
|
|
314
|
-
$[
|
|
306
|
+
$[49] = t14;
|
|
307
|
+
$[50] = t15;
|
|
308
|
+
$[51] = t16;
|
|
309
|
+
$[52] = t17;
|
|
310
|
+
$[53] = t18;
|
|
311
|
+
$[54] = title;
|
|
312
|
+
$[55] = t19;
|
|
315
313
|
} else {
|
|
316
|
-
t19 = $[
|
|
314
|
+
t19 = $[55];
|
|
317
315
|
}
|
|
318
316
|
return t19;
|
|
319
317
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CSSValueInput.js","sources":["../src/CSSValueInput.tsx"],"sourcesContent":["import {\n type CSSValueType,\n DEFAULT_CSS_VALUE_TYPE,\n DEFAULT_UNIT_BY_CSS_VALUE_TYPE,\n getCSSValueAsNumber,\n getCSSValueWithUnit,\n getUnitFromCSSValue,\n roundToPrecision,\n} from '@acusti/css-values';\nimport InputText from '@acusti/input-text';\nimport clsx from 'clsx';\nimport {\n type ChangeEvent,\n type FocusEvent,\n type KeyboardEvent,\n type ReactNode,\n type Ref,\n type SyntheticEvent,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\n\nexport type Props = {\n /**\n * Boolean indicating if the user can submit an empty value (i.e. clear\n * the value). Defaults to true.\n */\n allowEmpty?: boolean;\n className?: string;\n cssValueType?: CSSValueType;\n disabled?: boolean;\n /**\n * Function that receives a value and converts it to its numerical equivalent\n * (i.e. '12px' → 12). Defaults to parseFloat().\n */\n getValueAsNumber?: (value: number | string) => number;\n icon?: ReactNode;\n label?: string;\n max?: number;\n min?: number;\n name?: string;\n onBlur?: (event: FocusEvent<HTMLInputElement>) => unknown;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => unknown;\n onFocus?: (event: FocusEvent<HTMLInputElement>) => unknown;\n onKeyDown?: (event: KeyboardEvent<HTMLInputElement>) => unknown;\n onKeyUp?: (event: KeyboardEvent<HTMLInputElement>) => unknown;\n /**\n * Custom event handler triggered when the user presses enter/return\n * or blurs the input after making a change. Hitting esc will restore\n * the previous submitted value or original value.\n */\n onSubmitValue: (value: string) => unknown;\n placeholder?: string;\n ref?: Ref<HTMLInputElement>;\n step?: number;\n tabIndex?: number;\n title?: string;\n unit?: string;\n /** Regex or validator function to validate non-numeric values */\n validator?: ((value: string) => boolean) | RegExp;\n value?: string;\n};\n\ntype InputRef = HTMLInputElement | null;\n\nconst ROOT_CLASS_NAME = 'cssvalueinput';\n\nexport default function CSSValueInput({\n allowEmpty = true,\n className,\n cssValueType = DEFAULT_CSS_VALUE_TYPE,\n disabled,\n getValueAsNumber = getCSSValueAsNumber,\n icon,\n label,\n max,\n min,\n name,\n onBlur,\n onChange,\n onFocus,\n onKeyDown,\n onKeyUp,\n onSubmitValue,\n placeholder,\n ref,\n step = 1,\n tabIndex,\n title,\n unit = DEFAULT_UNIT_BY_CSS_VALUE_TYPE[cssValueType],\n validator,\n value: valueFromProps,\n}: Props) {\n const inputRef = useRef<InputRef>(null);\n\n useImperativeHandle<InputRef, InputRef>(ref, () => inputRef.current);\n\n // props.value should be a string; if it’s a number, convert it here\n const value =\n typeof valueFromProps === 'number' && !Number.isNaN(valueFromProps)\n ? `${valueFromProps}`\n : valueFromProps;\n const [submittedValue, setSubmittedValue] = useState(value ?? '');\n\n useEffect(() => {\n setSubmittedValue(value ?? '');\n }, [value]);\n\n const handleSubmitValue = (event: SyntheticEvent<HTMLInputElement>) => {\n const currentValue = event.currentTarget.value;\n // Store last submittedValue (used to reset value on invalid input)\n setSubmittedValue(currentValue);\n onSubmitValue(currentValue);\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n const input = event.currentTarget;\n inputRef.current = input;\n if (onBlur) onBlur(event);\n\n const currentValue = input.value.trim();\n\n // If allowEmpty and value is empty, skip all validation + normalization\n if (allowEmpty && !currentValue) {\n handleSubmitValue(event);\n return;\n }\n\n const currentValueAsNumber = getValueAsNumber(currentValue);\n const isCurrentValueFinite = Number.isFinite(currentValueAsNumber);\n // Inherit unit from last submitted value unless default is unitless;\n // ensures that submitting a new value with no unit doesn’t add a unit\n const defaultUnit = unit\n ? getUnitFromCSSValue({\n cssValueType,\n defaultUnit: unit,\n value: submittedValue,\n })\n : '';\n\n if (!isCurrentValueFinite) {\n let isValid = false;\n if (validator instanceof RegExp) {\n isValid = validator.test(currentValue);\n } else if (validator) {\n isValid = validator(currentValue);\n }\n\n if (isValid) {\n handleSubmitValue(event);\n } else {\n // If current value isn’t valid, revert to last submitted value\n input.value = submittedValue;\n }\n\n return;\n }\n\n // Normalize value by applying min/max and integer constraints\n let normalizedValueAsNumber = currentValueAsNumber;\n\n if (isCurrentValueFinite) {\n if (min != null && currentValueAsNumber < min) {\n normalizedValueAsNumber = min;\n } else if (max != null && currentValueAsNumber > max) {\n normalizedValueAsNumber = max;\n } else if (cssValueType === 'integer') {\n normalizedValueAsNumber = Math.floor(currentValueAsNumber);\n }\n }\n\n if (normalizedValueAsNumber !== currentValueAsNumber) {\n const currentUnit = getUnitFromCSSValue({\n cssValueType,\n defaultUnit,\n value: currentValue,\n });\n input.value = normalizedValueAsNumber + currentUnit;\n } else {\n input.value = getCSSValueWithUnit({\n cssValueType,\n defaultUnit,\n value: currentValue,\n });\n }\n\n handleSubmitValue(event);\n };\n\n const getNextValue = ({\n currentValue,\n multiplier = 1,\n signum = 1,\n }: {\n currentValue: number | string;\n multiplier?: number;\n signum?: number;\n }) => {\n const modifier = multiplier * step * signum;\n const currentValueAsNumber = getValueAsNumber(currentValue);\n // If currentValue isn’t numeric, don’t try to increment/decrement it\n if (typeof currentValue === 'string' && Number.isNaN(currentValueAsNumber)) {\n return currentValue;\n }\n\n let nextValue = currentValueAsNumber + modifier;\n if (cssValueType === 'integer') {\n nextValue = Math.floor(nextValue);\n } else {\n nextValue = roundToPrecision(nextValue, 5);\n }\n\n if (typeof max === 'number' && Number.isFinite(max)) {\n nextValue = Math.min(max, nextValue);\n }\n\n if (typeof min === 'number' && Number.isFinite(min)) {\n nextValue = Math.max(min, nextValue);\n }\n\n const nextUnit = getUnitFromCSSValue({\n cssValueType,\n defaultUnit: unit,\n value: currentValue,\n });\n return `${nextValue}${nextUnit}`;\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n const input = event.currentTarget;\n inputRef.current = input;\n if (onKeyDown) onKeyDown(event);\n if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp') return;\n\n const currentValue = input.value ?? placeholder ?? `0${unit}`;\n const nextValue = getNextValue({\n currentValue,\n multiplier: event.shiftKey ? 10 : 1,\n signum: event.key === 'ArrowUp' ? 1 : -1,\n });\n\n if (nextValue === currentValue) return;\n\n event.stopPropagation();\n event.preventDefault();\n\n input.value = nextValue;\n };\n\n const handleKeyUp = (event: KeyboardEvent<HTMLInputElement>) => {\n if (onKeyUp) onKeyUp(event);\n // If this is the key up from ↑ or ↓ keys, time to handleSubmitValue\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n handleSubmitValue(event);\n }\n };\n\n return (\n <label\n aria-label={label ? undefined : title}\n className={clsx(ROOT_CLASS_NAME, className, { disabled })}\n title={title}\n >\n {icon == null ? null : (\n <div className={`${ROOT_CLASS_NAME}-icon`}>{icon}</div>\n )}\n {label ? (\n <div className={`${ROOT_CLASS_NAME}-label`}>\n <p className={`${ROOT_CLASS_NAME}-label-text`}>{label}</p>\n </div>\n ) : null}\n <div className={`${ROOT_CLASS_NAME}-value`}>\n <InputText\n disabled={disabled}\n discardOnEscape\n initialValue={submittedValue}\n name={name}\n onBlur={handleBlur}\n onChange={onChange}\n onFocus={onFocus}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n placeholder={placeholder}\n ref={inputRef}\n selectTextOnFocus\n tabIndex={tabIndex}\n />\n </div>\n </label>\n );\n}\n"],"names":["ROOT_CLASS_NAME","CSSValueInput","t0","$","_c","allowEmpty","t1","className","cssValueType","t2","disabled","getValueAsNumber","t3","icon","label","max","min","name","onBlur","onChange","onFocus","onKeyDown","onKeyUp","onSubmitValue","placeholder","ref","step","t4","tabIndex","title","unit","t5","validator","value","valueFromProps","undefined","DEFAULT_CSS_VALUE_TYPE","getCSSValueAsNumber","DEFAULT_UNIT_BY_CSS_VALUE_TYPE","inputRef","useRef","t6","Symbol","for","current","useImperativeHandle","Number","isNaN","submittedValue","setSubmittedValue","useState","t7","t8","useEffect","t9","event","currentValue","currentTarget","handleSubmitValue","t10","event_0","input","currentValue_0","trim","currentValueAsNumber","isCurrentValueFinite","isFinite","defaultUnit","getUnitFromCSSValue","isValid","RegExp","test","normalizedValueAsNumber","Math","floor","currentUnit","getCSSValueWithUnit","handleBlur","t11","t12","currentValue_1","multiplier","t13","signum","t14","modifier","currentValueAsNumber_0","nextValue","roundToPrecision","nextUnit","getNextValue","event_1","input_0","key","currentValue_2","nextValue_0","shiftKey","stopPropagation","preventDefault","handleKeyDown","event_2","handleKeyUp","t15","clsx","t16","t17","t18","t19"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CSSValueInput.js","sources":["../src/CSSValueInput.tsx"],"sourcesContent":["import {\n type CSSValueType,\n DEFAULT_CSS_VALUE_TYPE,\n DEFAULT_UNIT_BY_CSS_VALUE_TYPE,\n getCSSValueAsNumber,\n getCSSValueWithUnit,\n getUnitFromCSSValue,\n roundToPrecision,\n} from '@acusti/css-values';\nimport InputText from '@acusti/input-text';\nimport clsx from 'clsx';\nimport {\n type ChangeEvent,\n type FocusEvent,\n type KeyboardEvent,\n type ReactNode,\n type Ref,\n type SyntheticEvent,\n useEffect,\n useImperativeHandle,\n useRef,\n} from 'react';\n\nexport type Props = {\n /**\n * Boolean indicating if the user can submit an empty value (i.e. clear\n * the value). Defaults to true.\n */\n allowEmpty?: boolean;\n className?: string;\n cssValueType?: CSSValueType;\n disabled?: boolean;\n /**\n * Function that receives a value and converts it to its numerical equivalent\n * (i.e. '12px' → 12). Defaults to parseFloat().\n */\n getValueAsNumber?: (value: number | string) => number;\n icon?: ReactNode;\n label?: string;\n max?: number;\n min?: number;\n name?: string;\n onBlur?: (event: FocusEvent<HTMLInputElement>) => unknown;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => unknown;\n onFocus?: (event: FocusEvent<HTMLInputElement>) => unknown;\n onKeyDown?: (event: KeyboardEvent<HTMLInputElement>) => unknown;\n onKeyUp?: (event: KeyboardEvent<HTMLInputElement>) => unknown;\n /**\n * Custom event handler triggered when the user presses enter/return\n * or blurs the input after making a change. Hitting esc will restore\n * the previous submitted value or original value.\n */\n onSubmitValue: (value: string) => unknown;\n placeholder?: string;\n ref?: Ref<HTMLInputElement>;\n step?: number;\n tabIndex?: number;\n title?: string;\n unit?: string;\n /** Regex or validator function to validate non-numeric values */\n validator?: ((value: string) => boolean) | RegExp;\n value?: string;\n};\n\ntype InputRef = HTMLInputElement | null;\n\nconst ROOT_CLASS_NAME = 'cssvalueinput';\n\nexport default function CSSValueInput({\n allowEmpty = true,\n className,\n cssValueType = DEFAULT_CSS_VALUE_TYPE,\n disabled,\n getValueAsNumber = getCSSValueAsNumber,\n icon,\n label,\n max,\n min,\n name,\n onBlur,\n onChange,\n onFocus,\n onKeyDown,\n onKeyUp,\n onSubmitValue,\n placeholder,\n ref,\n step = 1,\n tabIndex,\n title,\n unit = DEFAULT_UNIT_BY_CSS_VALUE_TYPE[cssValueType],\n validator,\n value: valueFromProps,\n}: Props) {\n const inputRef = useRef<InputRef>(null);\n\n useImperativeHandle<InputRef, InputRef>(ref, () => inputRef.current);\n\n // props.value should be a string; if it’s a number, convert it here\n const value =\n typeof valueFromProps === 'number' && Number.isFinite(valueFromProps)\n ? `${valueFromProps}`\n : valueFromProps;\n const submittedValueRef = useRef(value ?? '');\n\n useEffect(() => {\n submittedValueRef.current = value ?? '';\n }, [value]);\n\n const handleSubmitValue = (event: SyntheticEvent<HTMLInputElement>) => {\n // Store last submittedValue (used to reset value on invalid input)\n submittedValueRef.current = event.currentTarget.value;\n onSubmitValue(event.currentTarget.value);\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n const input = event.currentTarget;\n inputRef.current = input;\n if (onBlur) onBlur(event);\n\n const currentValue = input.value.trim();\n\n // If allowEmpty and value is empty, skip all validation + normalization\n if (allowEmpty && !currentValue) {\n handleSubmitValue(event);\n return;\n }\n\n const currentValueAsNumber = getValueAsNumber(currentValue);\n const isCurrentValueFinite = Number.isFinite(currentValueAsNumber);\n // Inherit unit from last submitted value unless default is unitless;\n // ensures that submitting a new value with no unit doesn’t add a unit\n const defaultUnit = unit\n ? getUnitFromCSSValue({\n cssValueType,\n defaultUnit: unit,\n value: submittedValueRef.current,\n })\n : '';\n\n if (!isCurrentValueFinite) {\n let isValid = false;\n if (validator instanceof RegExp) {\n isValid = validator.test(currentValue);\n } else if (validator) {\n isValid = validator(currentValue);\n }\n\n if (isValid) {\n handleSubmitValue(event);\n } else {\n // If current value isn’t valid, revert to last submitted value\n input.value = submittedValueRef.current;\n }\n\n return;\n }\n\n // Normalize value by applying min/max and integer constraints\n let normalizedValueAsNumber = currentValueAsNumber;\n\n if (isCurrentValueFinite) {\n if (min != null && currentValueAsNumber < min) {\n normalizedValueAsNumber = min;\n } else if (max != null && currentValueAsNumber > max) {\n normalizedValueAsNumber = max;\n } else if (cssValueType === 'integer') {\n normalizedValueAsNumber = Math.floor(currentValueAsNumber);\n }\n }\n\n if (normalizedValueAsNumber !== currentValueAsNumber) {\n const currentUnit = getUnitFromCSSValue({\n cssValueType,\n defaultUnit,\n value: currentValue,\n });\n input.value = normalizedValueAsNumber + currentUnit;\n } else {\n input.value = getCSSValueWithUnit({\n cssValueType,\n defaultUnit,\n value: currentValue,\n });\n }\n\n handleSubmitValue(event);\n };\n\n const getNextValue = ({\n currentValue,\n multiplier = 1,\n signum = 1,\n }: {\n currentValue: number | string;\n multiplier?: number;\n signum?: number;\n }) => {\n const modifier = multiplier * step * signum;\n const currentValueAsNumber = getValueAsNumber(currentValue);\n // If currentValue isn’t numeric, don’t try to increment/decrement it\n if (typeof currentValue === 'string' && Number.isNaN(currentValueAsNumber)) {\n return currentValue;\n }\n\n let nextValue = currentValueAsNumber + modifier;\n if (cssValueType === 'integer') {\n nextValue = Math.floor(nextValue);\n } else {\n nextValue = roundToPrecision(nextValue, 5);\n }\n\n if (typeof max === 'number' && Number.isFinite(max)) {\n nextValue = Math.min(max, nextValue);\n }\n\n if (typeof min === 'number' && Number.isFinite(min)) {\n nextValue = Math.max(min, nextValue);\n }\n\n const nextUnit = getUnitFromCSSValue({\n cssValueType,\n defaultUnit: unit,\n value: currentValue,\n });\n return `${nextValue}${nextUnit}`;\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n const input = event.currentTarget;\n inputRef.current = input;\n if (onKeyDown) onKeyDown(event);\n if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp') return;\n\n const currentValue = input.value ?? placeholder ?? `0${unit}`;\n const nextValue = getNextValue({\n currentValue,\n multiplier: event.shiftKey ? 10 : 1,\n signum: event.key === 'ArrowUp' ? 1 : -1,\n });\n\n if (nextValue === currentValue) return;\n\n event.stopPropagation();\n event.preventDefault();\n\n input.value = nextValue;\n };\n\n const handleKeyUp = (event: KeyboardEvent<HTMLInputElement>) => {\n if (onKeyUp) onKeyUp(event);\n // If this is the key up from ↑ or ↓ keys, time to handleSubmitValue\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n handleSubmitValue(event);\n }\n };\n\n return (\n <label\n aria-label={label ? undefined : title}\n className={clsx(ROOT_CLASS_NAME, className, { disabled })}\n title={title}\n >\n {icon == null ? null : (\n <div className={`${ROOT_CLASS_NAME}-icon`}>{icon}</div>\n )}\n {label ? (\n <div className={`${ROOT_CLASS_NAME}-label`}>\n <p className={`${ROOT_CLASS_NAME}-label-text`}>{label}</p>\n </div>\n ) : null}\n <div className={`${ROOT_CLASS_NAME}-value`}>\n <InputText\n disabled={disabled}\n discardOnEscape\n initialValue={value}\n name={name}\n onBlur={handleBlur}\n onChange={onChange}\n onFocus={onFocus}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n placeholder={placeholder}\n ref={inputRef}\n selectTextOnFocus\n tabIndex={tabIndex}\n />\n </div>\n </label>\n );\n}\n"],"names":["ROOT_CLASS_NAME","CSSValueInput","t0","$","_c","allowEmpty","t1","className","cssValueType","t2","disabled","getValueAsNumber","t3","icon","label","max","min","name","onBlur","onChange","onFocus","onKeyDown","onKeyUp","onSubmitValue","placeholder","ref","step","t4","tabIndex","title","unit","t5","validator","value","valueFromProps","undefined","DEFAULT_CSS_VALUE_TYPE","getCSSValueAsNumber","DEFAULT_UNIT_BY_CSS_VALUE_TYPE","inputRef","useRef","t6","Symbol","for","current","useImperativeHandle","Number","isFinite","submittedValueRef","t7","t8","useEffect","t9","event","currentTarget","handleSubmitValue","t10","event_0","input","currentValue","trim","currentValueAsNumber","isCurrentValueFinite","defaultUnit","getUnitFromCSSValue","isValid","RegExp","test","normalizedValueAsNumber","Math","floor","currentUnit","getCSSValueWithUnit","handleBlur","t11","t12","currentValue_0","multiplier","t13","signum","t14","modifier","currentValueAsNumber_0","isNaN","nextValue","roundToPrecision","nextUnit","getNextValue","event_1","input_0","key","currentValue_1","nextValue_0","shiftKey","stopPropagation","preventDefault","handleKeyDown","event_2","handleKeyUp","t15","clsx","t16","t17","t18","t19"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acusti/css-value-input",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"exports": "./dist/CSSValueInput.js",
|
|
@@ -41,20 +41,20 @@
|
|
|
41
41
|
"@testing-library/dom": "^10.4.1",
|
|
42
42
|
"@testing-library/react": "^16.3.0",
|
|
43
43
|
"@testing-library/user-event": "^14.6.1",
|
|
44
|
-
"@types/react": "^19.2.
|
|
44
|
+
"@types/react": "^19.2.2",
|
|
45
45
|
"@vitejs/plugin-react": "^5.0.4",
|
|
46
46
|
"babel-plugin-react-compiler": "^1",
|
|
47
|
-
"happy-dom": "^20.0.
|
|
47
|
+
"happy-dom": "^20.0.10",
|
|
48
48
|
"react": "^19.2.0",
|
|
49
49
|
"react-dom": "^19.2.0",
|
|
50
50
|
"typescript": "5.9.2",
|
|
51
51
|
"unplugin-dts": "^1.0.0-beta.6",
|
|
52
|
-
"vite": "^7.1.
|
|
52
|
+
"vite": "^7.1.10",
|
|
53
53
|
"vitest": "^3.2.4"
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
56
|
"@acusti/css-values": "^1.2.0",
|
|
57
|
-
"@acusti/input-text": "^2.2.
|
|
57
|
+
"@acusti/input-text": "^2.2.1",
|
|
58
58
|
"clsx": "^2"
|
|
59
59
|
},
|
|
60
60
|
"peerDependencies": {
|