@activecollab/components 2.0.197 → 2.0.199

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.
@@ -20,8 +20,9 @@ export interface IInputNumber {
20
20
  validation?: (value: string, disableMacros: boolean, decimalSeparator: string, decimalLength: number, limit?: number) => boolean;
21
21
  min?: string | number;
22
22
  max?: string | number;
23
+ update?: boolean;
23
24
  }
24
- export declare const useInputNumber: ({ decimalSeparator, thousandSeparator, disableAbbreviation, disableMacros, decimalLength, value, onChange, onSave, onEnterKeyPress, onClick, onCancel, allowEmptyValue, step, trimDecimals, limit, validation, min, max, onBlur, }: IInputNumber, inputRef: RefObject<HTMLInputElement | null>) => {
25
+ export declare const useInputNumber: ({ decimalSeparator, thousandSeparator, disableAbbreviation, disableMacros, decimalLength, value, onChange, onSave, onEnterKeyPress, onClick, onCancel, allowEmptyValue, step, trimDecimals, limit, validation, min, max, onBlur, update, }: IInputNumber, inputRef: RefObject<HTMLInputElement | null>) => {
25
26
  value: string;
26
27
  onBlur: (e: any) => void;
27
28
  onKeyDown: (e: any) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"useInputNumber.d.ts","sourceRoot":"","sources":["../../../src/hooks/useInputNumber.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EAGV,SAAS,EAEV,MAAM,OAAO,CAAC;AAKf,MAAM,MAAM,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAC9B,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAC5B,UAAU,CAAC,EAAE,CACX,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,OAAO,EACtB,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,MAAM,KACX,OAAO,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,cAAc,uOAqBtB,YAAY,YACL,UAAU,gBAAgB,GAAG,IAAI,CAAC;;;;;;;;;;CAiZ7C,CAAC"}
1
+ {"version":3,"file":"useInputNumber.d.ts","sourceRoot":"","sources":["../../../src/hooks/useInputNumber.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EAGV,SAAS,EAEV,MAAM,OAAO,CAAC;AAKf,MAAM,MAAM,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAC9B,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAC5B,UAAU,CAAC,EAAE,CACX,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,OAAO,EACtB,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,MAAM,KACX,OAAO,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,cAAc,+OAsBtB,YAAY,YACL,UAAU,gBAAgB,GAAG,IAAI,CAAC;;;;;;;;;;CAkZ7C,CAAC"}
@@ -21,7 +21,8 @@ export const useInputNumber = (_ref, inputRef) => {
21
21
  validation = validateNumberInput,
22
22
  min,
23
23
  max,
24
- onBlur
24
+ onBlur,
25
+ update
25
26
  } = _ref;
26
27
  const isMaxValid = max === undefined || min === undefined || Number(max) >= Number(min);
27
28
  if (!isMaxValid) {
@@ -31,16 +32,16 @@ export const useInputNumber = (_ref, inputRef) => {
31
32
  const [prevValue, setPrevValue] = useState(() => formatNumber(value, thousandSeparator, decimalSeparator, trimDecimals, decimalLength, disableAbbreviation ? "long" : "short"));
32
33
  const [unformattedValue, setUnformattedValue] = useState(() => formatNumber(value, "", decimalSeparator, false, decimalLength, "long"));
33
34
  const [unformattedPrevValue, setUnformattedPrevValue] = useState(() => formatNumber(value, "", decimalSeparator, false, decimalLength, "long"));
35
+ const [focused, setFocused] = useState(false);
34
36
  useEffect(() => {
35
- if (value !== prevValue && document.activeElement !== (inputRef == null ? void 0 : inputRef.current)) {
37
+ if (value !== prevValue && (!focused || update)) {
36
38
  setCurrentValue(formatNumber(value, thousandSeparator, decimalSeparator, trimDecimals, decimalLength, disableAbbreviation ? "long" : "short"));
37
39
  setPrevValue(formatNumber(value, thousandSeparator, decimalSeparator, trimDecimals, decimalLength, disableAbbreviation ? "long" : "short"));
38
40
  setUnformattedValue(formatNumber(value, "", decimalSeparator, false, decimalLength, "long"));
39
41
  setUnformattedPrevValue(formatNumber(value, "", decimalSeparator, false, decimalLength, "long"));
40
42
  }
41
43
  // eslint-disable-next-line react-hooks/exhaustive-deps
42
- }, [disableAbbreviation, thousandSeparator, decimalSeparator, decimalLength, trimDecimals, value]);
43
- const [focused, setFocused] = useState(false);
44
+ }, [disableAbbreviation, thousandSeparator, decimalSeparator, decimalLength, trimDecimals, value, focused]);
44
45
  const escapeRef = useRef(false);
45
46
  const handleBlur = useCallback(e => {
46
47
  if (escapeRef.current) {
@@ -1 +1 @@
1
- {"version":3,"file":"useInputNumber.js","names":["useState","useRef","useCallback","useEffect","validateNumberInput","currencyMultiplier","formatNumber","useInputNumber","_ref","inputRef","decimalSeparator","thousandSeparator","disableAbbreviation","disableMacros","decimalLength","value","onChange","onSave","onEnterKeyPress","onClick","onCancel","allowEmptyValue","step","trimDecimals","limit","validation","min","max","onBlur","isMaxValid","undefined","Number","console","warn","currentValue","setCurrentValue","prevValue","setPrevValue","unformattedValue","setUnformattedValue","unformattedPrevValue","setUnformattedPrevValue","document","activeElement","current","focused","setFocused","escapeRef","handleBlur","e","String","target","trim","length","_value","updateValue","type","preformattedValue","replace","numericValue","parseFloat","isNaN","newValue","formattedValue","toFixed","Math","round","toString","includes","handleKeyDown","key","blur","preventDefault","metaKey","ctrlKey","_inputRef$current","select","input","start","selectionStart","end","selectionEnd","substring","Boolean","handleChange","inputValue","numericInput","_","num","unit","normalizedNum","parts","split","integerPart","fractionalPart","newInteger","parseInt","toLowerCase","result","handleClick","handleFocus","handleDoubleClick","_inputRef$current2","onKeyDown","onDoubleClick","onFocus"],"sources":["../../../src/hooks/useInputNumber.tsx"],"sourcesContent":["import {\n useState,\n MouseEvent,\n useRef,\n useCallback,\n RefObject,\n useEffect,\n} from \"react\";\n\nimport { validateNumberInput } from \"../utils\";\nimport { currencyMultiplier, formatNumber } from \"../utils/currencyUtils\";\n\nexport type Separators = \".\" | \",\" | \" \" | \"\";\n\nexport interface IInputNumber {\n decimalLength?: number;\n decimalSeparator?: Separators;\n disableAbbreviation?: boolean;\n disableMacros?: boolean;\n thousandSeparator?: Separators;\n trimDecimals?: boolean;\n onSave?: (e: Event) => void;\n value?: string | number;\n step?: number;\n limit?: number;\n onEnterKeyPress?: (val: string) => void;\n onChange?: (val: string) => void;\n onClick?: (event: MouseEvent<HTMLInputElement>) => void;\n allowEmptyValue?: boolean;\n onCancel?: (e: Event) => void;\n onBlur?: (e: Event) => void;\n validation?: (\n value: string,\n disableMacros: boolean,\n decimalSeparator: string,\n decimalLength: number,\n limit?: number\n ) => boolean;\n min?: string | number;\n max?: string | number;\n}\n\nexport const useInputNumber = (\n {\n decimalSeparator = \".\",\n thousandSeparator = \",\",\n disableAbbreviation,\n disableMacros,\n decimalLength,\n value = \"\",\n onChange,\n onSave,\n onEnterKeyPress,\n onClick,\n onCancel,\n allowEmptyValue,\n step = 1,\n trimDecimals = true,\n limit,\n validation = validateNumberInput,\n min,\n max,\n onBlur,\n }: IInputNumber,\n inputRef: RefObject<HTMLInputElement | null>\n) => {\n const isMaxValid =\n max === undefined || min === undefined || Number(max) >= Number(min);\n\n if (!isMaxValid) {\n console.warn(\n \"Warning: The maximum value is set to be lower than the minimum value. The maximum value will be ignored.\"\n );\n }\n\n const [currentValue, setCurrentValue] = useState(() =>\n formatNumber(\n value as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\"\n )\n );\n const [prevValue, setPrevValue] = useState(() =>\n formatNumber(\n value as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\"\n )\n );\n const [unformattedValue, setUnformattedValue] = useState(() =>\n formatNumber(\n value as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\"\n )\n );\n const [unformattedPrevValue, setUnformattedPrevValue] = useState(() =>\n formatNumber(\n value as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\"\n )\n );\n\n useEffect(() => {\n if (value !== prevValue && document.activeElement !== inputRef?.current) {\n setCurrentValue(\n formatNumber(\n value as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\"\n )\n );\n setPrevValue(\n formatNumber(\n value as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\"\n )\n );\n setUnformattedValue(\n formatNumber(\n value as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\"\n )\n );\n setUnformattedPrevValue(\n formatNumber(\n value as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\"\n )\n );\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n disableAbbreviation,\n thousandSeparator,\n decimalSeparator,\n decimalLength,\n trimDecimals,\n value,\n ]);\n\n const [focused, setFocused] = useState(false);\n\n const escapeRef = useRef(false);\n\n const handleBlur = useCallback(\n (e) => {\n if (escapeRef.current) {\n setCurrentValue(prevValue);\n setUnformattedValue(unformattedPrevValue);\n if (onChange) onChange(String(unformattedPrevValue));\n } else {\n if (e.target.value.trim().length > 0 && prevValue !== e.target.value) {\n const _value = formatNumber(\n currentValue as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\"\n );\n setPrevValue(_value);\n setUnformattedPrevValue(\n formatNumber(\n currentValue as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\"\n )\n );\n setUnformattedValue(\n formatNumber(\n currentValue as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\"\n )\n );\n setCurrentValue(_value);\n typeof onSave === \"function\" && onSave(e);\n } else {\n if (!allowEmptyValue) {\n setCurrentValue(prevValue);\n setUnformattedValue(unformattedPrevValue);\n typeof onCancel === \"function\" && onCancel(e);\n } else {\n if (typeof onSave === \"function\" && prevValue !== e.target.value) {\n onSave(e);\n } else {\n typeof onCancel === \"function\" && onCancel(e);\n }\n }\n }\n }\n setFocused(false);\n typeof onBlur === \"function\" && onBlur(e);\n },\n [\n onBlur,\n prevValue,\n unformattedPrevValue,\n onChange,\n currentValue,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation,\n onSave,\n allowEmptyValue,\n onCancel,\n ]\n );\n\n const updateValue = useCallback(\n (type: \"increment\" | \"decrement\") => {\n const preformattedValue = String(unformattedValue)\n .replace(thousandSeparator, \"\")\n .replace(decimalSeparator, \".\");\n const numericValue = parseFloat(preformattedValue);\n\n if (isNaN(numericValue)) return;\n\n if (\n (max !== undefined && numericValue > Number(max)) ||\n (min !== undefined && numericValue < Number(min))\n ) {\n return;\n }\n\n let newValue = numericValue;\n\n if (type === \"increment\") {\n if (max === undefined || numericValue + step <= Number(max)) {\n newValue = numericValue + step;\n } else if (numericValue < Number(max)) {\n newValue = Number(max);\n } else {\n return;\n }\n } else if (type === \"decrement\") {\n if (min === undefined || numericValue - step >= Number(min)) {\n newValue = numericValue - step;\n } else if (numericValue > Number(min)) {\n newValue = Number(min);\n } else {\n return;\n }\n }\n\n let formattedValue;\n if (decimalLength !== undefined) {\n formattedValue = newValue.toFixed(decimalLength);\n } else {\n formattedValue = newValue.toFixed(2);\n }\n\n if (decimalLength !== undefined && decimalLength === 0) {\n formattedValue = Math.round(newValue).toString();\n }\n\n if (formattedValue.includes(\".\") || formattedValue.includes(\",\")) {\n formattedValue = formattedValue.replace(\".\", decimalSeparator);\n }\n\n setUnformattedValue(formattedValue);\n setCurrentValue(formattedValue);\n if (onChange) onChange(formattedValue);\n },\n [\n unformattedValue,\n thousandSeparator,\n decimalSeparator,\n decimalLength,\n onChange,\n step,\n min,\n max,\n ]\n );\n\n const handleKeyDown = useCallback(\n (e) => {\n if (e.key === \"Enter\") {\n e.target.blur();\n if (typeof onEnterKeyPress === \"function\")\n onEnterKeyPress(e.target.value);\n }\n if (e.key === \"ArrowLeft\") {\n return;\n }\n if (e.key === \"ArrowRight\") {\n return;\n }\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n updateValue(\"increment\");\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n updateValue(\"decrement\");\n }\n if (e.key === \"Escape\") {\n escapeRef.current = true;\n e.target.blur();\n typeof onCancel === \"function\" && onCancel(e);\n escapeRef.current = false;\n }\n if (e.key === \"Backspace\") {\n return;\n }\n if (e.key === \"Delete\") {\n return;\n }\n if ((e.metaKey || e.ctrlKey) && e.key === \"a\") {\n inputRef.current?.select();\n return;\n }\n if (e.key === \"Tab\") {\n return;\n }\n if ((e.metaKey || e.ctrlKey) && e.key === \"v\") {\n e.preventDefault();\n return;\n }\n\n // Disallow \"-\" if min is 0 or greater\n if (e.key === \"-\" && min !== undefined && Number(min) >= 0) {\n e.preventDefault();\n return;\n }\n\n // Disallow decimal separator if decimalLength is 0\n if (e.key === decimalSeparator && decimalLength === 0) {\n e.preventDefault();\n return;\n }\n\n const input = e.target;\n const currentValue = input.value;\n const start = input.selectionStart;\n const end = input.selectionEnd;\n const newValue =\n currentValue.substring(0, start) + e.key + currentValue.substring(end);\n if (\n !validation(\n newValue,\n Boolean(disableMacros),\n decimalSeparator,\n decimalLength ?? 0,\n limit\n )\n ) {\n e.preventDefault();\n return;\n }\n },\n [\n decimalLength,\n decimalSeparator,\n disableMacros,\n inputRef,\n limit,\n min,\n onCancel,\n onEnterKeyPress,\n updateValue,\n validation,\n ]\n );\n\n const handleChange = useCallback(\n (e) => {\n const inputValue = e.target.value;\n const numericInput = disableMacros\n ? inputValue\n : inputValue.replace(\n /(\\d+(?:[.,]\\d+)?)([kmbtKMBT])/,\n (_, num, unit) => {\n const normalizedNum = num.replace(\",\", \".\");\n const parts = normalizedNum.split(\".\");\n const integerPart = parts[0];\n const fractionalPart = parts[1];\n\n const newInteger =\n parseInt(integerPart, 10) *\n currencyMultiplier[unit.toLowerCase()];\n\n let result = newInteger.toString();\n if (fractionalPart !== undefined) {\n result += decimalSeparator + fractionalPart;\n }\n return result;\n }\n );\n setCurrentValue(numericInput);\n setUnformattedValue(numericInput);\n if (onChange) onChange(numericInput);\n },\n [disableMacros, decimalSeparator, onChange]\n );\n\n const handleClick = useCallback(\n (e) => {\n if (typeof onClick === \"function\") {\n onClick(e);\n }\n },\n [onClick]\n );\n\n const handleFocus = useCallback(() => {\n setCurrentValue(unformattedValue);\n setFocused(true);\n }, [unformattedValue]);\n\n const handleDoubleClick = useCallback(() => {\n if (inputRef.current) {\n inputRef.current?.select();\n }\n }, [inputRef]);\n\n return {\n value: currentValue,\n onBlur: handleBlur,\n onKeyDown: handleKeyDown,\n onChange: handleChange,\n onClick: handleClick,\n onDoubleClick: handleDoubleClick,\n onFocus: handleFocus,\n focused,\n unformattedValue,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"useInputNumber.js","names":["useState","useRef","useCallback","useEffect","validateNumberInput","currencyMultiplier","formatNumber","useInputNumber","_ref","inputRef","decimalSeparator","thousandSeparator","disableAbbreviation","disableMacros","decimalLength","value","onChange","onSave","onEnterKeyPress","onClick","onCancel","allowEmptyValue","step","trimDecimals","limit","validation","min","max","onBlur","update","isMaxValid","undefined","Number","console","warn","currentValue","setCurrentValue","prevValue","setPrevValue","unformattedValue","setUnformattedValue","unformattedPrevValue","setUnformattedPrevValue","focused","setFocused","escapeRef","handleBlur","e","current","String","target","trim","length","_value","updateValue","type","preformattedValue","replace","numericValue","parseFloat","isNaN","newValue","formattedValue","toFixed","Math","round","toString","includes","handleKeyDown","key","blur","preventDefault","metaKey","ctrlKey","_inputRef$current","select","input","start","selectionStart","end","selectionEnd","substring","Boolean","handleChange","inputValue","numericInput","_","num","unit","normalizedNum","parts","split","integerPart","fractionalPart","newInteger","parseInt","toLowerCase","result","handleClick","handleFocus","handleDoubleClick","_inputRef$current2","onKeyDown","onDoubleClick","onFocus"],"sources":["../../../src/hooks/useInputNumber.tsx"],"sourcesContent":["import {\n useState,\n MouseEvent,\n useRef,\n useCallback,\n RefObject,\n useEffect,\n} from \"react\";\n\nimport { validateNumberInput } from \"../utils\";\nimport { currencyMultiplier, formatNumber } from \"../utils/currencyUtils\";\n\nexport type Separators = \".\" | \",\" | \" \" | \"\";\n\nexport interface IInputNumber {\n decimalLength?: number;\n decimalSeparator?: Separators;\n disableAbbreviation?: boolean;\n disableMacros?: boolean;\n thousandSeparator?: Separators;\n trimDecimals?: boolean;\n onSave?: (e: Event) => void;\n value?: string | number;\n step?: number;\n limit?: number;\n onEnterKeyPress?: (val: string) => void;\n onChange?: (val: string) => void;\n onClick?: (event: MouseEvent<HTMLInputElement>) => void;\n allowEmptyValue?: boolean;\n onCancel?: (e: Event) => void;\n onBlur?: (e: Event) => void;\n validation?: (\n value: string,\n disableMacros: boolean,\n decimalSeparator: string,\n decimalLength: number,\n limit?: number\n ) => boolean;\n min?: string | number;\n max?: string | number;\n update?: boolean;\n}\n\nexport const useInputNumber = (\n {\n decimalSeparator = \".\",\n thousandSeparator = \",\",\n disableAbbreviation,\n disableMacros,\n decimalLength,\n value = \"\",\n onChange,\n onSave,\n onEnterKeyPress,\n onClick,\n onCancel,\n allowEmptyValue,\n step = 1,\n trimDecimals = true,\n limit,\n validation = validateNumberInput,\n min,\n max,\n onBlur,\n update,\n }: IInputNumber,\n inputRef: RefObject<HTMLInputElement | null>\n) => {\n const isMaxValid =\n max === undefined || min === undefined || Number(max) >= Number(min);\n\n if (!isMaxValid) {\n console.warn(\n \"Warning: The maximum value is set to be lower than the minimum value. The maximum value will be ignored.\"\n );\n }\n\n const [currentValue, setCurrentValue] = useState(() =>\n formatNumber(\n value as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\"\n )\n );\n const [prevValue, setPrevValue] = useState(() =>\n formatNumber(\n value as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\"\n )\n );\n const [unformattedValue, setUnformattedValue] = useState(() =>\n formatNumber(\n value as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\"\n )\n );\n const [unformattedPrevValue, setUnformattedPrevValue] = useState(() =>\n formatNumber(\n value as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\"\n )\n );\n\n const [focused, setFocused] = useState(false);\n\n useEffect(() => {\n if (value !== prevValue && (!focused || update)) {\n setCurrentValue(\n formatNumber(\n value as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\"\n )\n );\n setPrevValue(\n formatNumber(\n value as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\"\n )\n );\n setUnformattedValue(\n formatNumber(\n value as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\"\n )\n );\n setUnformattedPrevValue(\n formatNumber(\n value as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\"\n )\n );\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n disableAbbreviation,\n thousandSeparator,\n decimalSeparator,\n decimalLength,\n trimDecimals,\n value,\n focused,\n ]);\n\n const escapeRef = useRef(false);\n\n const handleBlur = useCallback(\n (e) => {\n if (escapeRef.current) {\n setCurrentValue(prevValue);\n setUnformattedValue(unformattedPrevValue);\n if (onChange) onChange(String(unformattedPrevValue));\n } else {\n if (e.target.value.trim().length > 0 && prevValue !== e.target.value) {\n const _value = formatNumber(\n currentValue as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\"\n );\n setPrevValue(_value);\n setUnformattedPrevValue(\n formatNumber(\n currentValue as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\"\n )\n );\n setUnformattedValue(\n formatNumber(\n currentValue as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\"\n )\n );\n setCurrentValue(_value);\n typeof onSave === \"function\" && onSave(e);\n } else {\n if (!allowEmptyValue) {\n setCurrentValue(prevValue);\n setUnformattedValue(unformattedPrevValue);\n typeof onCancel === \"function\" && onCancel(e);\n } else {\n if (typeof onSave === \"function\" && prevValue !== e.target.value) {\n onSave(e);\n } else {\n typeof onCancel === \"function\" && onCancel(e);\n }\n }\n }\n }\n setFocused(false);\n typeof onBlur === \"function\" && onBlur(e);\n },\n [\n onBlur,\n prevValue,\n unformattedPrevValue,\n onChange,\n currentValue,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation,\n onSave,\n allowEmptyValue,\n onCancel,\n ]\n );\n\n const updateValue = useCallback(\n (type: \"increment\" | \"decrement\") => {\n const preformattedValue = String(unformattedValue)\n .replace(thousandSeparator, \"\")\n .replace(decimalSeparator, \".\");\n const numericValue = parseFloat(preformattedValue);\n\n if (isNaN(numericValue)) return;\n\n if (\n (max !== undefined && numericValue > Number(max)) ||\n (min !== undefined && numericValue < Number(min))\n ) {\n return;\n }\n\n let newValue = numericValue;\n\n if (type === \"increment\") {\n if (max === undefined || numericValue + step <= Number(max)) {\n newValue = numericValue + step;\n } else if (numericValue < Number(max)) {\n newValue = Number(max);\n } else {\n return;\n }\n } else if (type === \"decrement\") {\n if (min === undefined || numericValue - step >= Number(min)) {\n newValue = numericValue - step;\n } else if (numericValue > Number(min)) {\n newValue = Number(min);\n } else {\n return;\n }\n }\n\n let formattedValue;\n if (decimalLength !== undefined) {\n formattedValue = newValue.toFixed(decimalLength);\n } else {\n formattedValue = newValue.toFixed(2);\n }\n\n if (decimalLength !== undefined && decimalLength === 0) {\n formattedValue = Math.round(newValue).toString();\n }\n\n if (formattedValue.includes(\".\") || formattedValue.includes(\",\")) {\n formattedValue = formattedValue.replace(\".\", decimalSeparator);\n }\n\n setUnformattedValue(formattedValue);\n setCurrentValue(formattedValue);\n if (onChange) onChange(formattedValue);\n },\n [\n unformattedValue,\n thousandSeparator,\n decimalSeparator,\n decimalLength,\n onChange,\n step,\n min,\n max,\n ]\n );\n\n const handleKeyDown = useCallback(\n (e) => {\n if (e.key === \"Enter\") {\n e.target.blur();\n if (typeof onEnterKeyPress === \"function\")\n onEnterKeyPress(e.target.value);\n }\n if (e.key === \"ArrowLeft\") {\n return;\n }\n if (e.key === \"ArrowRight\") {\n return;\n }\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n updateValue(\"increment\");\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n updateValue(\"decrement\");\n }\n if (e.key === \"Escape\") {\n escapeRef.current = true;\n e.target.blur();\n typeof onCancel === \"function\" && onCancel(e);\n escapeRef.current = false;\n }\n if (e.key === \"Backspace\") {\n return;\n }\n if (e.key === \"Delete\") {\n return;\n }\n if ((e.metaKey || e.ctrlKey) && e.key === \"a\") {\n inputRef.current?.select();\n return;\n }\n if (e.key === \"Tab\") {\n return;\n }\n if ((e.metaKey || e.ctrlKey) && e.key === \"v\") {\n e.preventDefault();\n return;\n }\n\n // Disallow \"-\" if min is 0 or greater\n if (e.key === \"-\" && min !== undefined && Number(min) >= 0) {\n e.preventDefault();\n return;\n }\n\n // Disallow decimal separator if decimalLength is 0\n if (e.key === decimalSeparator && decimalLength === 0) {\n e.preventDefault();\n return;\n }\n\n const input = e.target;\n const currentValue = input.value;\n const start = input.selectionStart;\n const end = input.selectionEnd;\n const newValue =\n currentValue.substring(0, start) + e.key + currentValue.substring(end);\n if (\n !validation(\n newValue,\n Boolean(disableMacros),\n decimalSeparator,\n decimalLength ?? 0,\n limit\n )\n ) {\n e.preventDefault();\n return;\n }\n },\n [\n decimalLength,\n decimalSeparator,\n disableMacros,\n inputRef,\n limit,\n min,\n onCancel,\n onEnterKeyPress,\n updateValue,\n validation,\n ]\n );\n\n const handleChange = useCallback(\n (e) => {\n const inputValue = e.target.value;\n const numericInput = disableMacros\n ? inputValue\n : inputValue.replace(\n /(\\d+(?:[.,]\\d+)?)([kmbtKMBT])/,\n (_, num, unit) => {\n const normalizedNum = num.replace(\",\", \".\");\n const parts = normalizedNum.split(\".\");\n const integerPart = parts[0];\n const fractionalPart = parts[1];\n\n const newInteger =\n parseInt(integerPart, 10) *\n currencyMultiplier[unit.toLowerCase()];\n\n let result = newInteger.toString();\n if (fractionalPart !== undefined) {\n result += decimalSeparator + fractionalPart;\n }\n return result;\n }\n );\n setCurrentValue(numericInput);\n setUnformattedValue(numericInput);\n if (onChange) onChange(numericInput);\n },\n [disableMacros, decimalSeparator, onChange]\n );\n\n const handleClick = useCallback(\n (e) => {\n if (typeof onClick === \"function\") {\n onClick(e);\n }\n },\n [onClick]\n );\n\n const handleFocus = useCallback(() => {\n setCurrentValue(unformattedValue);\n setFocused(true);\n }, [unformattedValue]);\n\n const handleDoubleClick = useCallback(() => {\n if (inputRef.current) {\n inputRef.current?.select();\n }\n }, [inputRef]);\n\n return {\n value: currentValue,\n onBlur: handleBlur,\n onKeyDown: handleKeyDown,\n onChange: handleChange,\n onClick: handleClick,\n onDoubleClick: handleDoubleClick,\n onFocus: handleFocus,\n focused,\n unformattedValue,\n };\n};\n"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -11410,8 +11410,13 @@
11410
11410
  return monthTransitionDirection && !disableAnimations ? monthTransitionDirection === "next" ? "slide-down" : "slide-up" : "";
11411
11411
  }, [disableAnimations, monthTransitionDirection]);
11412
11412
  var handleDayClick = function handleDayClick(day, modifiers) {
11413
- handleDateSelect(day);
11413
+ if (modifiers.some(function (mod) {
11414
+ return mod === "day_disabled";
11415
+ })) {
11416
+ return;
11417
+ }
11414
11418
  if (onDayClick) onDayClick(day, modifiers);
11419
+ handleDateSelect(day);
11415
11420
  };
11416
11421
  var getHoverRange = function getHoverRange() {
11417
11422
  if (!hoveredDate) return null;
@@ -14663,7 +14668,8 @@
14663
14668
  validation = _ref$validation === void 0 ? validateNumberInput : _ref$validation,
14664
14669
  min = _ref.min,
14665
14670
  max = _ref.max,
14666
- onBlur = _ref.onBlur;
14671
+ onBlur = _ref.onBlur,
14672
+ update = _ref.update;
14667
14673
  var isMaxValid = max === undefined || min === undefined || Number(max) >= Number(min);
14668
14674
  if (!isMaxValid) {
14669
14675
  console.warn("Warning: The maximum value is set to be lower than the minimum value. The maximum value will be ignored.");
@@ -14692,19 +14698,19 @@
14692
14698
  _useState8 = _slicedToArray(_useState7, 2),
14693
14699
  unformattedPrevValue = _useState8[0],
14694
14700
  setUnformattedPrevValue = _useState8[1];
14701
+ var _useState9 = React.useState(false),
14702
+ _useState10 = _slicedToArray(_useState9, 2),
14703
+ focused = _useState10[0],
14704
+ setFocused = _useState10[1];
14695
14705
  React.useEffect(function () {
14696
- if (value !== prevValue && document.activeElement !== (inputRef === null || inputRef === void 0 ? void 0 : inputRef.current)) {
14706
+ if (value !== prevValue && (!focused || update)) {
14697
14707
  setCurrentValue(formatNumber(value, thousandSeparator, decimalSeparator, trimDecimals, decimalLength, disableAbbreviation ? "long" : "short"));
14698
14708
  setPrevValue(formatNumber(value, thousandSeparator, decimalSeparator, trimDecimals, decimalLength, disableAbbreviation ? "long" : "short"));
14699
14709
  setUnformattedValue(formatNumber(value, "", decimalSeparator, false, decimalLength, "long"));
14700
14710
  setUnformattedPrevValue(formatNumber(value, "", decimalSeparator, false, decimalLength, "long"));
14701
14711
  }
14702
14712
  // eslint-disable-next-line react-hooks/exhaustive-deps
14703
- }, [disableAbbreviation, thousandSeparator, decimalSeparator, decimalLength, trimDecimals, value]);
14704
- var _useState9 = React.useState(false),
14705
- _useState10 = _slicedToArray(_useState9, 2),
14706
- focused = _useState10[0],
14707
- setFocused = _useState10[1];
14713
+ }, [disableAbbreviation, thousandSeparator, decimalSeparator, decimalLength, trimDecimals, value, focused]);
14708
14714
  var escapeRef = React.useRef(false);
14709
14715
  var handleBlur = React.useCallback(function (e) {
14710
14716
  if (escapeRef.current) {
@@ -16201,7 +16207,7 @@
16201
16207
  });
16202
16208
  InputHours.displayName = "InputHours";
16203
16209
 
16204
- var _excluded$J = ["decimalLength", "decimalSeparator", "disableAbbreviation", "disabled", "disableMacros", "invalid", "step", "thousandSeparator", "value", "onCancel", "onSave", "onEnterKeyPress", "allowEmptyValue", "onChange", "onClick", "limit", "placeholder", "trimDecimals", "min", "max", "onBlur"];
16210
+ var _excluded$J = ["decimalLength", "decimalSeparator", "disableAbbreviation", "disabled", "disableMacros", "invalid", "step", "thousandSeparator", "value", "onCancel", "onSave", "onEnterKeyPress", "allowEmptyValue", "onChange", "onClick", "limit", "placeholder", "trimDecimals", "min", "max", "onBlur", "update"];
16205
16211
  var InputNumber = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
16206
16212
  var _ref$decimalLength = _ref.decimalLength,
16207
16213
  decimalLength = _ref$decimalLength === void 0 ? 2 : _ref$decimalLength,
@@ -16231,6 +16237,8 @@
16231
16237
  min = _ref.min,
16232
16238
  max = _ref.max,
16233
16239
  externalOnBlur = _ref.onBlur,
16240
+ _ref$update = _ref.update,
16241
+ update = _ref$update === void 0 ? false : _ref$update,
16234
16242
  rest = _objectWithoutProperties(_ref, _excluded$J);
16235
16243
  var inputRef = React.useRef(null);
16236
16244
  var handleRef = useForkRef(ref, inputRef);
@@ -16252,7 +16260,8 @@
16252
16260
  trimDecimals,
16253
16261
  min,
16254
16262
  max,
16255
- onBlur: externalOnBlur
16263
+ onBlur: externalOnBlur,
16264
+ update
16256
16265
  }, inputRef),
16257
16266
  value = _useInputNumber.value,
16258
16267
  onBlur = _useInputNumber.onBlur,
@@ -19288,7 +19297,8 @@
19288
19297
  position = _ref.position,
19289
19298
  disableDaysBefore = _ref.disableDaysBefore,
19290
19299
  enableYearPicker = _ref.enableYearPicker,
19291
- disableAnimations = _ref.disableAnimations;
19300
+ disableAnimations = _ref.disableAnimations,
19301
+ disabledDaysAfter = _ref.disabledDaysAfter;
19292
19302
  var labelText = React.useMemo(function () {
19293
19303
  if (!selectedDays) {
19294
19304
  return defaultLabelText;
@@ -19300,6 +19310,9 @@
19300
19310
  if (selectedDays.to && selectedDays.from && toMoment(selectedDays.from).isSame(toMoment(selectedDays.to))) {
19301
19311
  return formattedEndDate;
19302
19312
  }
19313
+ if (!selectedDays.to && selectedDays.from) {
19314
+ return formattedStartDate;
19315
+ }
19303
19316
  return "".concat(formattedStartDate, " - ").concat(formattedEndDate);
19304
19317
  }
19305
19318
  }, [selectedDays, dateFormat, defaultLabelText, longDateFormat]);
@@ -19354,9 +19367,35 @@
19354
19367
  matched: isNonWorkingDay,
19355
19368
  title: isNonWorkingDay ? nonWorkingDaysOfWeekLabel : null
19356
19369
  };
19370
+ },
19371
+ day_disabled: function day_disabled(day) {
19372
+ if (disableDaysBefore) {
19373
+ if (day.toJSON().slice(0, 10) < disableDaysBefore.toJSON().slice(0, 10)) {
19374
+ return {
19375
+ matched: true,
19376
+ title: ""
19377
+ };
19378
+ }
19379
+ }
19380
+ if (!weekendIsSelectable && weekends.some(function (value) {
19381
+ return value === day.getDay();
19382
+ })) {
19383
+ return {
19384
+ matched: true,
19385
+ title: weekendLabel
19386
+ };
19387
+ }
19388
+ var currentDay = new Date(day.getFullYear(), day.getMonth(), day.getDate());
19389
+ var globalDayOff = globalDaysOff.find(function (data) {
19390
+ return isDayInRange(currentDay, data);
19391
+ });
19392
+ return {
19393
+ matched: !!globalDayOff,
19394
+ title: null
19395
+ };
19357
19396
  }
19358
19397
  };
19359
- }, [daysToModify, _nonWorkingDaysOfWeek, nonWorkingDaysOfWeekLabel, weekendLabel, weekends]);
19398
+ }, [daysToModify, disableDaysBefore, _nonWorkingDaysOfWeek, nonWorkingDaysOfWeekLabel, weekendIsSelectable, weekendLabel, weekends]);
19360
19399
  var renderTargetEl = React.useMemo(function () {
19361
19400
  if (labelType === "icon" && icon) {
19362
19401
  return /*#__PURE__*/React__default["default"].createElement(SelectDateTarget, {
@@ -19401,6 +19440,7 @@
19401
19440
  modalDiscardBtnText: modalDiscardBtnText,
19402
19441
  modalCancelBtnText: modalCancelBtnText,
19403
19442
  disabledDaysBefore: disableDaysBefore,
19443
+ disabledDaysAfter: disabledDaysAfter,
19404
19444
  backgroundElementClass: backgroundElementClass,
19405
19445
  disabled: weekendIsSelectable ? [] : [0, 6],
19406
19446
  popperTooltipClassName: popperTooltipClassName,
@@ -19423,6 +19463,7 @@
19423
19463
  cancelLabel: cancelButtonText,
19424
19464
  clearLabel: clearButtonText,
19425
19465
  disabledDaysBefore: disableDaysBefore,
19466
+ disabledDaysAfter: disabledDaysAfter,
19426
19467
  popperTooltipClassName: popperTooltipClassName,
19427
19468
  popperTooltipStyle: popperTooltipStyle,
19428
19469
  disabled: weekendIsSelectable ? [] : [0, 6],