@salt-ds/lab 1.0.0-alpha.77 → 1.0.0-alpha.79
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/CHANGELOG.md +80 -0
- package/css/salt-lab.css +17 -13
- package/dist-cjs/calendar/useCalendarDay.js +3 -2
- package/dist-cjs/calendar/useCalendarDay.js.map +1 -1
- package/dist-cjs/form-field-legacy/FormHelperText.css.js +1 -1
- package/dist-cjs/form-field-legacy/FormLabel.css.js +1 -1
- package/dist-cjs/index.js +1 -2
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/number-input/NumberInput.css.js +1 -1
- package/dist-cjs/number-input/NumberInput.js +201 -131
- package/dist-cjs/number-input/NumberInput.js.map +1 -1
- package/dist-cjs/tabs-next/TabNextTrigger.css.js +1 -1
- package/dist-es/calendar/useCalendarDay.js +3 -2
- package/dist-es/calendar/useCalendarDay.js.map +1 -1
- package/dist-es/form-field-legacy/FormHelperText.css.js +1 -1
- package/dist-es/form-field-legacy/FormLabel.css.js +1 -1
- package/dist-es/index.js +1 -2
- package/dist-es/index.js.map +1 -1
- package/dist-es/number-input/NumberInput.css.js +1 -1
- package/dist-es/number-input/NumberInput.js +201 -132
- package/dist-es/number-input/NumberInput.js.map +1 -1
- package/dist-es/tabs-next/TabNextTrigger.css.js +1 -1
- package/dist-types/number-input/NumberInput.d.ts +28 -15
- package/dist-types/number-input/index.d.ts +0 -1
- package/package.json +4 -4
- package/dist-cjs/number-input/internal/useCaret.js +0 -34
- package/dist-cjs/number-input/internal/useCaret.js.map +0 -1
- package/dist-cjs/number-input/internal/utils.js +0 -78
- package/dist-cjs/number-input/internal/utils.js.map +0 -1
- package/dist-cjs/number-input/useNumberInput.js +0 -107
- package/dist-cjs/number-input/useNumberInput.js.map +0 -1
- package/dist-es/number-input/internal/useCaret.js +0 -32
- package/dist-es/number-input/internal/useCaret.js.map +0 -1
- package/dist-es/number-input/internal/utils.js +0 -69
- package/dist-es/number-input/internal/utils.js.map +0 -1
- package/dist-es/number-input/useNumberInput.js +0 -105
- package/dist-es/number-input/useNumberInput.js.map +0 -1
- package/dist-types/number-input/internal/useCaret.d.ts +0 -5
- package/dist-types/number-input/internal/utils.d.ts +0 -8
- package/dist-types/number-input/useNumberInput.d.ts +0 -33
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
const isAllowedNonNumeric = (inputCharacter) => {
|
|
2
|
-
if (typeof inputCharacter === "number") return;
|
|
3
|
-
return "-+".includes(inputCharacter) && inputCharacter.length === 1 || inputCharacter === "";
|
|
4
|
-
};
|
|
5
|
-
const toFloat = (inputValue) => {
|
|
6
|
-
if (isAllowedNonNumeric(inputValue)) return 0;
|
|
7
|
-
return Number.parseFloat(inputValue.toString());
|
|
8
|
-
};
|
|
9
|
-
const isValidNumber = (num) => {
|
|
10
|
-
if (typeof num === "number") {
|
|
11
|
-
return !Number.isNaN(num);
|
|
12
|
-
}
|
|
13
|
-
if (!num) {
|
|
14
|
-
return false;
|
|
15
|
-
}
|
|
16
|
-
return (
|
|
17
|
-
// Normal type: 11.28
|
|
18
|
-
/^\s*-?\d+(\.\d+)?\s*$/.test(num) || // Pre-number: 1.
|
|
19
|
-
/^\s*-?\d+\.\s*$/.test(num) || // Post-number: .1
|
|
20
|
-
/^\s*-?\.\d+\s*$/.test(num)
|
|
21
|
-
);
|
|
22
|
-
};
|
|
23
|
-
const sanitizeInput = (value) => {
|
|
24
|
-
if (typeof value === "number") return value;
|
|
25
|
-
let sanitizedInput = value.replace(/[^0-9.+-]/g, "");
|
|
26
|
-
sanitizedInput = sanitizedInput.replace(
|
|
27
|
-
/^([+-]?)(.*)$/,
|
|
28
|
-
(_match, sign, rest) => {
|
|
29
|
-
return sign + rest.replace(/[+-]/g, "");
|
|
30
|
-
}
|
|
31
|
-
);
|
|
32
|
-
const parts = sanitizedInput.split(".");
|
|
33
|
-
if (parts.length > 2) {
|
|
34
|
-
sanitizedInput = `${parts[0]}.${parts.slice(1).join("")}`;
|
|
35
|
-
}
|
|
36
|
-
return sanitizedInput;
|
|
37
|
-
};
|
|
38
|
-
const isOutOfRange = (value, min, max) => {
|
|
39
|
-
if (value === void 0) return true;
|
|
40
|
-
const floatValue = toFloat(value);
|
|
41
|
-
return floatValue > max || floatValue < min;
|
|
42
|
-
};
|
|
43
|
-
const clampToRange = (min, max, value) => {
|
|
44
|
-
if (value < min) return min;
|
|
45
|
-
if (value > max) return max;
|
|
46
|
-
return value;
|
|
47
|
-
};
|
|
48
|
-
const isExponential = (number) => {
|
|
49
|
-
const str = String(number);
|
|
50
|
-
return !Number.isNaN(Number(str)) && str.includes("e");
|
|
51
|
-
};
|
|
52
|
-
const getNumberPrecision = (number) => {
|
|
53
|
-
const numStr = String(sanitizeInput(number));
|
|
54
|
-
if (isExponential(number)) {
|
|
55
|
-
let precision = Number(numStr.slice(numStr.indexOf("e-") + 2));
|
|
56
|
-
const decimalMatch = numStr.match(/\.(\d+)/);
|
|
57
|
-
if (decimalMatch == null ? void 0 : decimalMatch[1]) {
|
|
58
|
-
precision += decimalMatch[1].length;
|
|
59
|
-
}
|
|
60
|
-
return precision;
|
|
61
|
-
}
|
|
62
|
-
return numStr.includes(".") && isValidNumber(numStr) ? numStr.length - numStr.indexOf(".") - 1 : 0;
|
|
63
|
-
};
|
|
64
|
-
const isEmpty = (value) => {
|
|
65
|
-
return value === "";
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
export { clampToRange, getNumberPrecision, isAllowedNonNumeric, isEmpty, isOutOfRange, isValidNumber, sanitizeInput, toFloat };
|
|
69
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../src/number-input/internal/utils.ts"],"sourcesContent":["// The input should only accept numbers, decimal points, and plus/minus symbols\nexport const isAllowedNonNumeric = (inputCharacter: number | string) => {\n if (typeof inputCharacter === \"number\") return;\n return (\n (\"-+\".includes(inputCharacter) && inputCharacter.length === 1) ||\n inputCharacter === \"\"\n );\n};\n\nexport const toFloat = (inputValue: number | string) => {\n // Plus, minus, and empty characters are treated as 0\n if (isAllowedNonNumeric(inputValue)) return 0;\n return Number.parseFloat(inputValue.toString());\n};\n\nexport const isValidNumber = (num: string | number) => {\n if (typeof num === \"number\") {\n return !Number.isNaN(num);\n }\n\n // Empty\n if (!num) {\n return false;\n }\n\n return (\n // Normal type: 11.28\n /^\\s*-?\\d+(\\.\\d+)?\\s*$/.test(num) ||\n // Pre-number: 1.\n /^\\s*-?\\d+\\.\\s*$/.test(num) ||\n // Post-number: .1\n /^\\s*-?\\.\\d+\\s*$/.test(num)\n );\n};\n\nexport const sanitizeInput = (value: string | number) => {\n if (typeof value === \"number\") return value;\n let sanitizedInput = value.replace(/[^0-9.+-]/g, \"\");\n sanitizedInput = sanitizedInput.replace(\n /^([+-]?)(.*)$/,\n (_match, sign, rest) => {\n return sign + rest.replace(/[+-]/g, \"\");\n },\n );\n const parts = sanitizedInput.split(\".\");\n if (parts.length > 2) {\n sanitizedInput = `${parts[0]}.${parts.slice(1).join(\"\")}`;\n }\n\n return sanitizedInput;\n};\n\nexport const isOutOfRange = (\n value: number | string | undefined,\n min: number,\n max: number,\n) => {\n if (value === undefined) return true;\n const floatValue = toFloat(value);\n return floatValue > max || floatValue < min;\n};\n\nexport const clampToRange = (min: number, max: number, value: number) => {\n if (value < min) return min;\n if (value > max) return max;\n return value;\n};\n\nconst isExponential = (number: string | number) => {\n const str = String(number);\n\n return !Number.isNaN(Number(str)) && str.includes(\"e\");\n};\n\nexport const getNumberPrecision = (number: string | number) => {\n const numStr: string = String(sanitizeInput(number));\n\n if (isExponential(number)) {\n let precision = Number(numStr.slice(numStr.indexOf(\"e-\") + 2));\n\n const decimalMatch = numStr.match(/\\.(\\d+)/);\n if (decimalMatch?.[1]) {\n precision += decimalMatch[1].length;\n }\n return precision;\n }\n\n return numStr.includes(\".\") && isValidNumber(numStr)\n ? numStr.length - numStr.indexOf(\".\") - 1\n : 0;\n};\n\nexport const isEmpty = (value: number | string) => {\n return value === \"\";\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { useCallback } from 'react';
|
|
2
|
-
import { useActivateWhileMouseDown } from './internal/useActivateWhileMouseDown.js';
|
|
3
|
-
import { toFloat } from './internal/utils.js';
|
|
4
|
-
|
|
5
|
-
const useNumberInput = ({
|
|
6
|
-
clampAndFix,
|
|
7
|
-
decimalScale,
|
|
8
|
-
disabled,
|
|
9
|
-
format,
|
|
10
|
-
inputRef,
|
|
11
|
-
isAdjustingRef,
|
|
12
|
-
max = Number.MAX_SAFE_INTEGER,
|
|
13
|
-
min = Number.MIN_SAFE_INTEGER,
|
|
14
|
-
onChange,
|
|
15
|
-
parse,
|
|
16
|
-
readOnly,
|
|
17
|
-
setIsEditing,
|
|
18
|
-
setValue,
|
|
19
|
-
step = 1,
|
|
20
|
-
stepMultiplier = 2,
|
|
21
|
-
value
|
|
22
|
-
}) => {
|
|
23
|
-
const updateValue = useCallback(
|
|
24
|
-
(event, nextValue) => {
|
|
25
|
-
if (readOnly) return;
|
|
26
|
-
isAdjustingRef.current = true;
|
|
27
|
-
const updatedValue = clampAndFix(nextValue);
|
|
28
|
-
setValue(toFloat(updatedValue));
|
|
29
|
-
onChange == null ? void 0 : onChange(event, toFloat(updatedValue));
|
|
30
|
-
},
|
|
31
|
-
[onChange, readOnly, setValue, decimalScale, format]
|
|
32
|
-
);
|
|
33
|
-
const decrementValue = useCallback(
|
|
34
|
-
(event, block) => {
|
|
35
|
-
const decrementStep = block ? stepMultiplier * step : step;
|
|
36
|
-
const parsedValue = (parse == null ? void 0 : parse(value)) || value;
|
|
37
|
-
const nextValue = toFloat(parsedValue) - decrementStep;
|
|
38
|
-
if (nextValue < min) return;
|
|
39
|
-
updateValue(event, nextValue);
|
|
40
|
-
},
|
|
41
|
-
[value, min, step, stepMultiplier, updateValue, parse]
|
|
42
|
-
);
|
|
43
|
-
const incrementValue = useCallback(
|
|
44
|
-
(event, block) => {
|
|
45
|
-
const incrementStep = block ? stepMultiplier * step : step;
|
|
46
|
-
const parsedValue = (parse == null ? void 0 : parse(value)) || value;
|
|
47
|
-
const nextValue = toFloat(parsedValue) + incrementStep;
|
|
48
|
-
if (nextValue > max) return;
|
|
49
|
-
updateValue(event, nextValue);
|
|
50
|
-
},
|
|
51
|
-
[value, max, step, stepMultiplier, updateValue, parse]
|
|
52
|
-
);
|
|
53
|
-
const { activate: decrementSpinner } = useActivateWhileMouseDown(
|
|
54
|
-
(event) => decrementValue(event),
|
|
55
|
-
toFloat(value) <= min
|
|
56
|
-
);
|
|
57
|
-
const { activate: incrementSpinner } = useActivateWhileMouseDown(
|
|
58
|
-
(event) => incrementValue(event),
|
|
59
|
-
toFloat(value) >= max
|
|
60
|
-
);
|
|
61
|
-
const handleButtonMouseUp = () => {
|
|
62
|
-
var _a;
|
|
63
|
-
return (_a = inputRef.current) == null ? void 0 : _a.focus();
|
|
64
|
-
};
|
|
65
|
-
const commonButtonProps = {
|
|
66
|
-
"aria-hidden": true,
|
|
67
|
-
tabIndex: -1,
|
|
68
|
-
onMouseUp: handleButtonMouseUp
|
|
69
|
-
};
|
|
70
|
-
const incrementButtonProps = {
|
|
71
|
-
...commonButtonProps,
|
|
72
|
-
"aria-label": "increment value",
|
|
73
|
-
disabled: disabled || toFloat(value) + step > max,
|
|
74
|
-
onMouseDown: (event) => {
|
|
75
|
-
event.preventDefault();
|
|
76
|
-
setIsEditing(true);
|
|
77
|
-
if (event.nativeEvent.button !== 0) {
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
incrementSpinner(event);
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
const decrementButtonProps = {
|
|
84
|
-
...commonButtonProps,
|
|
85
|
-
"aria-label": "decrement value",
|
|
86
|
-
disabled: disabled || toFloat(value) - step < min,
|
|
87
|
-
onMouseDown: (event) => {
|
|
88
|
-
event.preventDefault();
|
|
89
|
-
setIsEditing(true);
|
|
90
|
-
if (event.nativeEvent.button !== 0) {
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
decrementSpinner(event);
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
return {
|
|
97
|
-
incrementButtonProps,
|
|
98
|
-
decrementButtonProps,
|
|
99
|
-
incrementValue,
|
|
100
|
-
decrementValue
|
|
101
|
-
};
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
export { useNumberInput };
|
|
105
|
-
//# sourceMappingURL=useNumberInput.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useNumberInput.js","sources":["../src/number-input/useNumberInput.ts"],"sourcesContent":["import {\n type Dispatch,\n type MouseEvent,\n type MutableRefObject,\n type SetStateAction,\n type SyntheticEvent,\n useCallback,\n} from \"react\";\nimport { useActivateWhileMouseDown } from \"./internal/useActivateWhileMouseDown\";\nimport { toFloat } from \"./internal/utils\";\nimport type { NumberInputProps } from \"./NumberInput\";\n\nexport interface UseNumberInputProps\n extends Pick<\n NumberInputProps,\n | \"decimalScale\"\n | \"disabled\"\n | \"format\"\n | \"inputRef\"\n | \"max\"\n | \"min\"\n | \"onChange\"\n | \"parse\"\n | \"readOnly\"\n | \"step\"\n | \"stepMultiplier\"\n > {\n clampAndFix: (value: number) => string | number;\n inputRef: MutableRefObject<HTMLInputElement | null>;\n isAdjustingRef: MutableRefObject<boolean>;\n setIsEditing: Dispatch<SetStateAction<boolean>>;\n setValue: Dispatch<SetStateAction<string | number>>;\n value: string | number;\n}\n\n/**\n * Manages increment / decrement logic\n */\nexport const useNumberInput = ({\n clampAndFix,\n decimalScale,\n disabled,\n format,\n inputRef,\n isAdjustingRef,\n max = Number.MAX_SAFE_INTEGER,\n min = Number.MIN_SAFE_INTEGER,\n onChange,\n parse,\n readOnly,\n setIsEditing,\n setValue,\n step = 1,\n stepMultiplier = 2,\n value,\n}: UseNumberInputProps) => {\n // biome-ignore lint/correctness/useExhaustiveDependencies: Refs cannot be added to dependency arrays\n const updateValue = useCallback(\n (event: SyntheticEvent | undefined, nextValue: number) => {\n if (readOnly) return;\n isAdjustingRef.current = true;\n\n const updatedValue = clampAndFix(nextValue);\n setValue(toFloat(updatedValue));\n onChange?.(event, toFloat(updatedValue));\n },\n [onChange, readOnly, setValue, decimalScale, format],\n );\n\n const decrementValue = useCallback(\n (event?: SyntheticEvent, block?: boolean) => {\n const decrementStep = block ? stepMultiplier * step : step;\n const parsedValue = parse?.(value) || value;\n const nextValue = toFloat(parsedValue) - decrementStep;\n if (nextValue < min) return;\n updateValue(event, nextValue);\n },\n [value, min, step, stepMultiplier, updateValue, parse],\n );\n\n const incrementValue = useCallback(\n (event?: SyntheticEvent, block?: boolean) => {\n const incrementStep = block ? stepMultiplier * step : step;\n const parsedValue = parse?.(value) || value;\n const nextValue = toFloat(parsedValue) + incrementStep;\n if (nextValue > max) return;\n updateValue(event, nextValue);\n },\n [value, max, step, stepMultiplier, updateValue, parse],\n );\n\n const { activate: decrementSpinner } = useActivateWhileMouseDown(\n (event?: SyntheticEvent) => decrementValue(event),\n toFloat(value) <= min,\n );\n\n const { activate: incrementSpinner } = useActivateWhileMouseDown(\n (event?: SyntheticEvent) => incrementValue(event),\n toFloat(value) >= max,\n );\n\n const handleButtonMouseUp = () => inputRef.current?.focus();\n\n const commonButtonProps = {\n \"aria-hidden\": true,\n tabIndex: -1,\n onMouseUp: handleButtonMouseUp,\n };\n\n const incrementButtonProps = {\n ...commonButtonProps,\n \"aria-label\": \"increment value\",\n disabled: disabled || toFloat(value) + step > max,\n onMouseDown: (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n setIsEditing(true);\n if (event.nativeEvent.button !== 0) {\n // To match closely with <input type='input'>\n return;\n }\n incrementSpinner(event);\n },\n };\n\n const decrementButtonProps = {\n ...commonButtonProps,\n \"aria-label\": \"decrement value\",\n disabled: disabled || toFloat(value) - step < min,\n onMouseDown: (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n setIsEditing(true);\n if (event.nativeEvent.button !== 0) {\n // To match closely with <input type='input'>\n return;\n }\n decrementSpinner(event);\n },\n };\n\n return {\n incrementButtonProps,\n decrementButtonProps,\n incrementValue,\n decrementValue,\n };\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export declare const isAllowedNonNumeric: (inputCharacter: number | string) => boolean | undefined;
|
|
2
|
-
export declare const toFloat: (inputValue: number | string) => number;
|
|
3
|
-
export declare const isValidNumber: (num: string | number) => boolean;
|
|
4
|
-
export declare const sanitizeInput: (value: string | number) => string | number;
|
|
5
|
-
export declare const isOutOfRange: (value: number | string | undefined, min: number, max: number) => boolean;
|
|
6
|
-
export declare const clampToRange: (min: number, max: number, value: number) => number;
|
|
7
|
-
export declare const getNumberPrecision: (number: string | number) => number;
|
|
8
|
-
export declare const isEmpty: (value: number | string) => value is "";
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { type Dispatch, type MouseEvent, type MutableRefObject, type SetStateAction, type SyntheticEvent } from "react";
|
|
2
|
-
import type { NumberInputProps } from "./NumberInput";
|
|
3
|
-
export interface UseNumberInputProps extends Pick<NumberInputProps, "decimalScale" | "disabled" | "format" | "inputRef" | "max" | "min" | "onChange" | "parse" | "readOnly" | "step" | "stepMultiplier"> {
|
|
4
|
-
clampAndFix: (value: number) => string | number;
|
|
5
|
-
inputRef: MutableRefObject<HTMLInputElement | null>;
|
|
6
|
-
isAdjustingRef: MutableRefObject<boolean>;
|
|
7
|
-
setIsEditing: Dispatch<SetStateAction<boolean>>;
|
|
8
|
-
setValue: Dispatch<SetStateAction<string | number>>;
|
|
9
|
-
value: string | number;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Manages increment / decrement logic
|
|
13
|
-
*/
|
|
14
|
-
export declare const useNumberInput: ({ clampAndFix, decimalScale, disabled, format, inputRef, isAdjustingRef, max, min, onChange, parse, readOnly, setIsEditing, setValue, step, stepMultiplier, value, }: UseNumberInputProps) => {
|
|
15
|
-
incrementButtonProps: {
|
|
16
|
-
"aria-label": string;
|
|
17
|
-
disabled: boolean;
|
|
18
|
-
onMouseDown: (event: MouseEvent<HTMLButtonElement>) => void;
|
|
19
|
-
"aria-hidden": boolean;
|
|
20
|
-
tabIndex: number;
|
|
21
|
-
onMouseUp: () => void | undefined;
|
|
22
|
-
};
|
|
23
|
-
decrementButtonProps: {
|
|
24
|
-
"aria-label": string;
|
|
25
|
-
disabled: boolean;
|
|
26
|
-
onMouseDown: (event: MouseEvent<HTMLButtonElement>) => void;
|
|
27
|
-
"aria-hidden": boolean;
|
|
28
|
-
tabIndex: number;
|
|
29
|
-
onMouseUp: () => void | undefined;
|
|
30
|
-
};
|
|
31
|
-
incrementValue: (event?: SyntheticEvent, block?: boolean) => void;
|
|
32
|
-
decrementValue: (event?: SyntheticEvent, block?: boolean) => void;
|
|
33
|
-
};
|