@activecollab/components 2.0.227 → 2.0.229

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/cjs/components/Input/InputNumber.js.map +1 -1
  2. package/dist/cjs/components/Input/InputTime.js +53 -12
  3. package/dist/cjs/components/Input/InputTime.js.map +1 -1
  4. package/dist/cjs/hooks/useInputNumber.js +77 -45
  5. package/dist/cjs/hooks/useInputNumber.js.map +1 -1
  6. package/dist/cjs/utils/currencyUtils.js +1 -0
  7. package/dist/cjs/utils/currencyUtils.js.map +1 -1
  8. package/dist/cjs/utils/currencyUtils.test.js +16 -0
  9. package/dist/cjs/utils/currencyUtils.test.js.map +1 -1
  10. package/dist/esm/components/Input/InputNumber.d.ts +2 -0
  11. package/dist/esm/components/Input/InputNumber.d.ts.map +1 -1
  12. package/dist/esm/components/Input/InputNumber.js.map +1 -1
  13. package/dist/esm/components/Input/InputTime.d.ts +2 -1
  14. package/dist/esm/components/Input/InputTime.d.ts.map +1 -1
  15. package/dist/esm/components/Input/InputTime.js +32 -5
  16. package/dist/esm/components/Input/InputTime.js.map +1 -1
  17. package/dist/esm/hooks/useInputNumber.d.ts +8 -6
  18. package/dist/esm/hooks/useInputNumber.d.ts.map +1 -1
  19. package/dist/esm/hooks/useInputNumber.js +53 -31
  20. package/dist/esm/hooks/useInputNumber.js.map +1 -1
  21. package/dist/esm/utils/currencyUtils.d.ts +1 -1
  22. package/dist/esm/utils/currencyUtils.d.ts.map +1 -1
  23. package/dist/esm/utils/currencyUtils.js +1 -0
  24. package/dist/esm/utils/currencyUtils.js.map +1 -1
  25. package/dist/esm/utils/currencyUtils.test.js +16 -0
  26. package/dist/esm/utils/currencyUtils.test.js.map +1 -1
  27. package/dist/index.js +131 -57
  28. package/dist/index.js.map +1 -1
  29. package/dist/index.min.js +1 -1
  30. package/dist/index.min.js.map +1 -1
  31. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"useInputNumber.js","names":["_react","require","_utils","_currencyUtils","_slicedToArray","arr","i","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","o","minLen","_arrayLikeToArray","n","Object","prototype","toString","call","slice","constructor","name","Array","from","test","len","length","arr2","r","l","t","Symbol","iterator","e","u","a","f","next","done","push","value","return","isArray","useInputNumber","exports","_ref","inputRef","_ref$decimalSeparator","decimalSeparator","_ref$thousandSeparato","thousandSeparator","disableAbbreviation","disableMacros","decimalLength","_ref$value","onChange","onSave","onEnterKeyPress","onClick","onCancel","allowEmptyValue","_ref$step","step","_ref$trimDecimals","trimDecimals","limit","_ref$validation","validation","validateNumberInput","min","max","onBlur","update","_ref$shortenThreshold","shortenThreshold","isMaxValid","undefined","Number","console","warn","_useState","useState","formatNumber","_useState2","currentValue","setCurrentValue","_useState3","_useState4","prevValue","setPrevValue","_useState5","_useState6","unformattedValue","setUnformattedValue","_useState7","_useState8","unformattedPrevValue","setUnformattedPrevValue","_useState9","_useState10","focused","setFocused","useEffect","escapeRef","useRef","handleBlur","useCallback","current","String","target","trim","_value","updateValue","type","preformattedValue","replace","numericValue","parseFloat","isNaN","newValue","formattedValue","toFixed","Math","round","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","currencyMultiplier","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 shortenThreshold?: 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 update,\n shortenThreshold = 1000,\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 shortenThreshold\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 shortenThreshold\n )\n );\n const [unformattedValue, setUnformattedValue] = useState(() =>\n formatNumber(\n value as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\",\n shortenThreshold\n )\n );\n const [unformattedPrevValue, setUnformattedPrevValue] = useState(() =>\n formatNumber(\n value as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\",\n shortenThreshold\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 shortenThreshold\n )\n );\n setPrevValue(\n formatNumber(\n value as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\",\n shortenThreshold\n )\n );\n setUnformattedValue(\n formatNumber(\n value as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\",\n shortenThreshold\n )\n );\n setUnformattedPrevValue(\n formatNumber(\n value as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\",\n shortenThreshold\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 shortenThreshold\n );\n setPrevValue(_value);\n setUnformattedPrevValue(\n formatNumber(\n currentValue as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\",\n shortenThreshold\n )\n );\n setUnformattedValue(\n formatNumber(\n currentValue as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\",\n shortenThreshold\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 shortenThreshold,\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":["_react","require","_utils","_currencyUtils","_slicedToArray","arr","i","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","o","minLen","_arrayLikeToArray","n","Object","prototype","toString","call","slice","constructor","name","Array","from","test","len","length","arr2","r","l","t","Symbol","iterator","e","u","a","f","next","done","push","value","return","isArray","useInputNumber","exports","_ref","inputRef","_ref$decimalSeparator","decimalSeparator","_ref$thousandSeparato","thousandSeparator","disableAbbreviation","disableMacros","decimalLength","_ref$value","undefined","onChange","onSave","onEnterKeyPress","onClick","onCancel","allowEmptyValue","_ref$step","step","_ref$trimDecimals","trimDecimals","limit","_ref$validation","validation","validateNumberInput","min","max","onBlur","update","_ref$shortenThreshold","shortenThreshold","isMaxValid","Number","console","warn","_useState","useState","_useState2","numericValue","setNumericValue","_useState3","_useState4","prevNumericValue","setPrevNumericValue","_useState5","formatNumber","_useState6","currentValue","setCurrentValue","_useState7","_useState8","prevValue","setPrevValue","_useState9","_useState10","unformattedValue","setUnformattedValue","_useState11","_useState12","unformattedPrevValue","setUnformattedPrevValue","_useState13","_useState14","focused","setFocused","useEffect","escapeRef","useRef","handleBlur","useCallback","current","target","trim","_value","_unformatedValue","_numericValue","getNumberFromString","updateValue","type","newValue","formattedValue","toFixed","Math","round","includes","replace","handleKeyDown","key","blur","preventDefault","metaKey","ctrlKey","_inputRef$current","select","input","start","selectionStart","end","selectionEnd","substring","Boolean","handleChange","inputValue","numericNewValue","numericInput","_","num","unit","normalizedNum","parts","split","integerPart","fractionalPart","newInteger","parseInt","currencyMultiplier","toLowerCase","parseFloat","concat","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 {\n currencyMultiplier,\n formatNumber,\n getNumberFromString,\n} from \"../utils/currencyUtils\";\n\nexport type Separators = \".\" | \",\" | \" \" | \"\";\n\nexport type InputNumberValue = number | undefined;\n\nexport interface IInputNumber {\n decimalLength?: number;\n decimalSeparator?: Separators;\n disableAbbreviation?: boolean;\n disableMacros?: boolean;\n thousandSeparator?: Separators;\n trimDecimals?: boolean;\n value?: number;\n step?: number;\n limit?: number;\n onEnterKeyPress?: (val: InputNumberValue) => void;\n onChange?: (val: InputNumberValue) => void;\n onClick?: (event: MouseEvent<HTMLInputElement>) => void;\n allowEmptyValue?: boolean;\n onCancel?: (e: Event) => void;\n onSave?: (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?: number;\n max?: number;\n update?: boolean;\n shortenThreshold?: number;\n}\n\nexport const useInputNumber = (\n {\n decimalSeparator = \".\",\n thousandSeparator = \",\",\n disableAbbreviation,\n disableMacros,\n decimalLength,\n value = undefined,\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 shortenThreshold = 1000,\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 [numericValue, setNumericValue] = useState(() => value);\n const [prevNumericValue, setPrevNumericValue] = useState(() => value);\n\n const [currentValue, setCurrentValue] = useState(() =>\n formatNumber(\n value,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\",\n shortenThreshold\n )\n );\n const [prevValue, setPrevValue] = useState(() =>\n formatNumber(\n value,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\",\n shortenThreshold\n )\n );\n const [unformattedValue, setUnformattedValue] = useState(() =>\n formatNumber(\n value,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\",\n shortenThreshold\n )\n );\n const [unformattedPrevValue, setUnformattedPrevValue] = useState(() =>\n formatNumber(\n value,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\",\n shortenThreshold\n )\n );\n\n const [focused, setFocused] = useState(false);\n\n useEffect(() => {\n if (value !== prevNumericValue && (!focused || update)) {\n setCurrentValue(\n formatNumber(\n value,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\",\n shortenThreshold\n )\n );\n setPrevValue(\n formatNumber(\n value,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\",\n shortenThreshold\n )\n );\n setUnformattedValue(\n formatNumber(\n value,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\",\n shortenThreshold\n )\n );\n setUnformattedPrevValue(\n formatNumber(\n value,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\",\n shortenThreshold\n )\n );\n setNumericValue(value);\n setPrevNumericValue(value);\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 setNumericValue(prevNumericValue);\n if (onChange) onChange(prevNumericValue);\n } else {\n if (e.target.value.trim().length > 0 && prevValue !== e.target.value) {\n const _value = formatNumber(\n currentValue,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\",\n shortenThreshold\n );\n const _unformatedValue = formatNumber(\n currentValue,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\",\n shortenThreshold\n );\n const _numericValue = getNumberFromString(\n _unformatedValue,\n thousandSeparator,\n decimalSeparator\n );\n setPrevValue(_value);\n setUnformattedPrevValue(_unformatedValue);\n setUnformattedValue(_unformatedValue);\n setNumericValue(_numericValue);\n setPrevNumericValue(_numericValue);\n if (_numericValue !== prevNumericValue) onChange?.(_numericValue);\n setCurrentValue(_value);\n typeof onSave === \"function\" && onSave(e);\n } else {\n if (!allowEmptyValue) {\n setCurrentValue(prevValue);\n setUnformattedValue(unformattedPrevValue);\n setNumericValue(prevNumericValue);\n onChange?.(prevNumericValue);\n typeof onCancel === \"function\" && onCancel(e);\n } else {\n if (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 currentValue,\n onBlur,\n prevValue,\n unformattedPrevValue,\n prevNumericValue,\n onChange,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation,\n shortenThreshold,\n onSave,\n allowEmptyValue,\n onCancel,\n ]\n );\n\n const updateValue = useCallback(\n (type: \"increment\" | \"decrement\") => {\n if (\n (max !== undefined && Number(numericValue) > max) ||\n (min !== undefined && Number(numericValue) < min)\n ) {\n return;\n }\n\n let newValue = numericValue;\n\n if (type === \"increment\") {\n if (max === undefined || Number(numericValue) + step <= max) {\n newValue = Number(numericValue) + step;\n } else if (Number(numericValue) < max) {\n newValue = max;\n } else {\n return;\n }\n } else if (type === \"decrement\") {\n if (min === undefined || Number(numericValue) - step >= min) {\n newValue = Number(numericValue) - step;\n } else if (Number(numericValue) > min) {\n newValue = min;\n } else {\n return;\n }\n }\n\n let formattedValue;\n if (decimalLength !== undefined) {\n formattedValue = Number(newValue).toFixed(decimalLength);\n } else {\n formattedValue = Number(newValue).toFixed(2);\n }\n\n if (decimalLength !== undefined && decimalLength === 0) {\n formattedValue = Math.round(Number(newValue)).toString();\n }\n\n if (formattedValue.includes(\".\") || formattedValue.includes(\",\")) {\n formattedValue = formattedValue.replace(\".\", decimalSeparator);\n }\n\n setNumericValue(newValue);\n setPrevNumericValue(newValue);\n setUnformattedValue(formattedValue);\n setCurrentValue(formattedValue);\n if (onChange) onChange(newValue);\n },\n [max, numericValue, min, decimalLength, onChange, step, decimalSeparator]\n );\n\n const handleKeyDown = useCallback(\n (e) => {\n if (e.key === \"Enter\") {\n e.target.blur();\n if (typeof onEnterKeyPress === \"function\")\n onEnterKeyPress(numericValue);\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 numericValue,\n onCancel,\n onEnterKeyPress,\n updateValue,\n validation,\n ]\n );\n\n const handleChange = useCallback(\n (e) => {\n const inputValue = e.target.value;\n let numericNewValue: InputNumberValue = undefined;\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 const newInteger =\n parseInt(integerPart, 10) *\n currencyMultiplier[unit.toLowerCase()];\n\n numericNewValue = parseFloat(\n `${newInteger ? newInteger : 0}.${\n fractionalPart ? fractionalPart : 0\n }`\n );\n\n let result = newInteger.toString();\n if (fractionalPart !== undefined) {\n result += decimalSeparator + fractionalPart;\n }\n return result;\n }\n );\n\n if (numericNewValue === undefined) {\n if (inputValue) {\n numericNewValue = parseFloat(inputValue.replace(\",\", \".\"));\n } else {\n numericNewValue = undefined;\n }\n }\n\n setCurrentValue(numericInput);\n setUnformattedValue(numericInput);\n setNumericValue(numericNewValue);\n if (onChange && numericNewValue !== numericValue)\n onChange(numericNewValue);\n },\n [disableMacros, onChange, numericValue, decimalSeparator]\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 numericValue,\n };\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AASA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AAIgC,SAAAG,eAAAC,GAAA,EAAAC,CAAA,WAAAC,eAAA,CAAAF,GAAA,KAAAG,qBAAA,CAAAH,GAAA,EAAAC,CAAA,KAAAG,2BAAA,CAAAJ,GAAA,EAAAC,CAAA,KAAAI,gBAAA;AAAA,SAAAA,iBAAA,cAAAC,SAAA;AAAA,SAAAF,4BAAAG,CAAA,EAAAC,MAAA,SAAAD,CAAA,qBAAAA,CAAA,sBAAAE,iBAAA,CAAAF,CAAA,EAAAC,MAAA,OAAAE,CAAA,GAAAC,MAAA,CAAAC,SAAA,CAAAC,QAAA,CAAAC,IAAA,CAAAP,CAAA,EAAAQ,KAAA,aAAAL,CAAA,iBAAAH,CAAA,CAAAS,WAAA,EAAAN,CAAA,GAAAH,CAAA,CAAAS,WAAA,CAAAC,IAAA,MAAAP,CAAA,cAAAA,CAAA,mBAAAQ,KAAA,CAAAC,IAAA,CAAAZ,CAAA,OAAAG,CAAA,+DAAAU,IAAA,CAAAV,CAAA,UAAAD,iBAAA,CAAAF,CAAA,EAAAC,MAAA;AAAA,SAAAC,kBAAAT,GAAA,EAAAqB,GAAA,QAAAA,GAAA,YAAAA,GAAA,GAAArB,GAAA,CAAAsB,MAAA,EAAAD,GAAA,GAAArB,GAAA,CAAAsB,MAAA,WAAArB,CAAA,MAAAsB,IAAA,OAAAL,KAAA,CAAAG,GAAA,GAAApB,CAAA,GAAAoB,GAAA,EAAApB,CAAA,IAAAsB,IAAA,CAAAtB,CAAA,IAAAD,GAAA,CAAAC,CAAA,UAAAsB,IAAA;AAAA,SAAApB,sBAAAqB,CAAA,EAAAC,CAAA,QAAAC,CAAA,WAAAF,CAAA,gCAAAG,MAAA,IAAAH,CAAA,CAAAG,MAAA,CAAAC,QAAA,KAAAJ,CAAA,4BAAAE,CAAA,QAAAG,CAAA,EAAAnB,CAAA,EAAAT,CAAA,EAAA6B,CAAA,EAAAC,CAAA,OAAAC,CAAA,OAAAzB,CAAA,iBAAAN,CAAA,IAAAyB,CAAA,GAAAA,CAAA,CAAAZ,IAAA,CAAAU,CAAA,GAAAS,IAAA,QAAAR,CAAA,QAAAd,MAAA,CAAAe,CAAA,MAAAA,CAAA,UAAAM,CAAA,uBAAAA,CAAA,IAAAH,CAAA,GAAA5B,CAAA,CAAAa,IAAA,CAAAY,CAAA,GAAAQ,IAAA,MAAAH,CAAA,CAAAI,IAAA,CAAAN,CAAA,CAAAO,KAAA,GAAAL,CAAA,CAAAT,MAAA,KAAAG,CAAA,GAAAO,CAAA,iBAAAR,CAAA,IAAAjB,CAAA,OAAAG,CAAA,GAAAc,CAAA,yBAAAQ,CAAA,YAAAN,CAAA,CAAAW,MAAA,KAAAP,CAAA,GAAAJ,CAAA,CAAAW,MAAA,IAAA1B,MAAA,CAAAmB,CAAA,MAAAA,CAAA,2BAAAvB,CAAA,QAAAG,CAAA,aAAAqB,CAAA;AAAA,SAAA7B,gBAAAF,GAAA,QAAAkB,KAAA,CAAAoB,OAAA,CAAAtC,GAAA,UAAAA,GAAA;AAoCzB,IAAMuC,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAG,SAAjBA,cAAcA,CAAAE,IAAA,EAwBzBC,QAA4C,EACzC;EAAA,IAAAC,qBAAA,GAAAF,IAAA,CAvBDG,gBAAgB;IAAhBA,gBAAgB,GAAAD,qBAAA,cAAG,GAAG,GAAAA,qBAAA;IAAAE,qBAAA,GAAAJ,IAAA,CACtBK,iBAAiB;IAAjBA,iBAAiB,GAAAD,qBAAA,cAAG,GAAG,GAAAA,qBAAA;IACvBE,mBAAmB,GAAAN,IAAA,CAAnBM,mBAAmB;IACnBC,aAAa,GAAAP,IAAA,CAAbO,aAAa;IACbC,aAAa,GAAAR,IAAA,CAAbQ,aAAa;IAAAC,UAAA,GAAAT,IAAA,CACbL,KAAK;IAALA,KAAK,GAAAc,UAAA,cAAGC,SAAS,GAAAD,UAAA;IACjBE,QAAQ,GAAAX,IAAA,CAARW,QAAQ;IACRC,MAAM,GAAAZ,IAAA,CAANY,MAAM;IACNC,eAAe,GAAAb,IAAA,CAAfa,eAAe;IACfC,OAAO,GAAAd,IAAA,CAAPc,OAAO;IACPC,QAAQ,GAAAf,IAAA,CAARe,QAAQ;IACRC,eAAe,GAAAhB,IAAA,CAAfgB,eAAe;IAAAC,SAAA,GAAAjB,IAAA,CACfkB,IAAI;IAAJA,IAAI,GAAAD,SAAA,cAAG,CAAC,GAAAA,SAAA;IAAAE,iBAAA,GAAAnB,IAAA,CACRoB,YAAY;IAAZA,YAAY,GAAAD,iBAAA,cAAG,IAAI,GAAAA,iBAAA;IACnBE,KAAK,GAAArB,IAAA,CAALqB,KAAK;IAAAC,eAAA,GAAAtB,IAAA,CACLuB,UAAU;IAAVA,UAAU,GAAAD,eAAA,cAAGE,0BAAmB,GAAAF,eAAA;IAChCG,GAAG,GAAAzB,IAAA,CAAHyB,GAAG;IACHC,GAAG,GAAA1B,IAAA,CAAH0B,GAAG;IACHC,MAAM,GAAA3B,IAAA,CAAN2B,MAAM;IACNC,MAAM,GAAA5B,IAAA,CAAN4B,MAAM;IAAAC,qBAAA,GAAA7B,IAAA,CACN8B,gBAAgB;IAAhBA,gBAAgB,GAAAD,qBAAA,cAAG,IAAI,GAAAA,qBAAA;EAIzB,IAAME,UAAU,GACdL,GAAG,KAAKhB,SAAS,IAAIe,GAAG,KAAKf,SAAS,IAAIsB,MAAM,CAACN,GAAG,CAAC,IAAIM,MAAM,CAACP,GAAG,CAAC;EAEtE,IAAI,CAACM,UAAU,EAAE;IACfE,OAAO,CAACC,IAAI,CACV,0GACF,CAAC;EACH;EAEA,IAAAC,SAAA,GAAwC,IAAAC,eAAQ,EAAC;MAAA,OAAMzC,KAAK;IAAA,EAAC;IAAA0C,UAAA,GAAA/E,cAAA,CAAA6E,SAAA;IAAtDG,YAAY,GAAAD,UAAA;IAAEE,eAAe,GAAAF,UAAA;EACpC,IAAAG,UAAA,GAAgD,IAAAJ,eAAQ,EAAC;MAAA,OAAMzC,KAAK;IAAA,EAAC;IAAA8C,UAAA,GAAAnF,cAAA,CAAAkF,UAAA;IAA9DE,gBAAgB,GAAAD,UAAA;IAAEE,mBAAmB,GAAAF,UAAA;EAE5C,IAAAG,UAAA,GAAwC,IAAAR,eAAQ,EAAC;MAAA,OAC/C,IAAAS,2BAAY,EACVlD,KAAK,EACLU,iBAAiB,EACjBF,gBAAgB,EAChBiB,YAAY,EACZZ,aAAa,EACbF,mBAAmB,GAAG,MAAM,GAAG,OAAO,EACtCwB,gBACF,CAAC;IAAA,CACH,CAAC;IAAAgB,UAAA,GAAAxF,cAAA,CAAAsF,UAAA;IAVMG,YAAY,GAAAD,UAAA;IAAEE,eAAe,GAAAF,UAAA;EAWpC,IAAAG,UAAA,GAAkC,IAAAb,eAAQ,EAAC;MAAA,OACzC,IAAAS,2BAAY,EACVlD,KAAK,EACLU,iBAAiB,EACjBF,gBAAgB,EAChBiB,YAAY,EACZZ,aAAa,EACbF,mBAAmB,GAAG,MAAM,GAAG,OAAO,EACtCwB,gBACF,CAAC;IAAA,CACH,CAAC;IAAAoB,UAAA,GAAA5F,cAAA,CAAA2F,UAAA;IAVME,SAAS,GAAAD,UAAA;IAAEE,YAAY,GAAAF,UAAA;EAW9B,IAAAG,UAAA,GAAgD,IAAAjB,eAAQ,EAAC;MAAA,OACvD,IAAAS,2BAAY,EACVlD,KAAK,EACL,EAAE,EACFQ,gBAAgB,EAChB,KAAK,EACLK,aAAa,EACb,MAAM,EACNsB,gBACF,CAAC;IAAA,CACH,CAAC;IAAAwB,WAAA,GAAAhG,cAAA,CAAA+F,UAAA;IAVME,gBAAgB,GAAAD,WAAA;IAAEE,mBAAmB,GAAAF,WAAA;EAW5C,IAAAG,WAAA,GAAwD,IAAArB,eAAQ,EAAC;MAAA,OAC/D,IAAAS,2BAAY,EACVlD,KAAK,EACL,EAAE,EACFQ,gBAAgB,EAChB,KAAK,EACLK,aAAa,EACb,MAAM,EACNsB,gBACF,CAAC;IAAA,CACH,CAAC;IAAA4B,WAAA,GAAApG,cAAA,CAAAmG,WAAA;IAVME,oBAAoB,GAAAD,WAAA;IAAEE,uBAAuB,GAAAF,WAAA;EAYpD,IAAAG,WAAA,GAA8B,IAAAzB,eAAQ,EAAC,KAAK,CAAC;IAAA0B,WAAA,GAAAxG,cAAA,CAAAuG,WAAA;IAAtCE,OAAO,GAAAD,WAAA;IAAEE,UAAU,GAAAF,WAAA;EAE1B,IAAAG,gBAAS,EAAC,YAAM;IACd,IAAItE,KAAK,KAAK+C,gBAAgB,KAAK,CAACqB,OAAO,IAAInC,MAAM,CAAC,EAAE;MACtDoB,eAAe,CACb,IAAAH,2BAAY,EACVlD,KAAK,EACLU,iBAAiB,EACjBF,gBAAgB,EAChBiB,YAAY,EACZZ,aAAa,EACbF,mBAAmB,GAAG,MAAM,GAAG,OAAO,EACtCwB,gBACF,CACF,CAAC;MACDsB,YAAY,CACV,IAAAP,2BAAY,EACVlD,KAAK,EACLU,iBAAiB,EACjBF,gBAAgB,EAChBiB,YAAY,EACZZ,aAAa,EACbF,mBAAmB,GAAG,MAAM,GAAG,OAAO,EACtCwB,gBACF,CACF,CAAC;MACD0B,mBAAmB,CACjB,IAAAX,2BAAY,EACVlD,KAAK,EACL,EAAE,EACFQ,gBAAgB,EAChB,KAAK,EACLK,aAAa,EACb,MAAM,EACNsB,gBACF,CACF,CAAC;MACD8B,uBAAuB,CACrB,IAAAf,2BAAY,EACVlD,KAAK,EACL,EAAE,EACFQ,gBAAgB,EAChB,KAAK,EACLK,aAAa,EACb,MAAM,EACNsB,gBACF,CACF,CAAC;MACDS,eAAe,CAAC5C,KAAK,CAAC;MACtBgD,mBAAmB,CAAChD,KAAK,CAAC;IAC5B;IACA;EACF,CAAC,EAAE,CACDW,mBAAmB,EACnBD,iBAAiB,EACjBF,gBAAgB,EAChBK,aAAa,EACbY,YAAY,EACZzB,KAAK,EACLoE,OAAO,CACR,CAAC;EAEF,IAAMG,SAAS,GAAG,IAAAC,aAAM,EAAC,KAAK,CAAC;EAE/B,IAAMC,UAAU,GAAG,IAAAC,kBAAW,EAC5B,UAACjF,CAAC,EAAK;IACL,IAAI8E,SAAS,CAACI,OAAO,EAAE;MACrBtB,eAAe,CAACG,SAAS,CAAC;MAC1BK,mBAAmB,CAACG,oBAAoB,CAAC;MACzCpB,eAAe,CAACG,gBAAgB,CAAC;MACjC,IAAI/B,QAAQ,EAAEA,QAAQ,CAAC+B,gBAAgB,CAAC;IAC1C,CAAC,MAAM;MACL,IAAItD,CAAC,CAACmF,MAAM,CAAC5E,KAAK,CAAC6E,IAAI,CAAC,CAAC,CAAC3F,MAAM,GAAG,CAAC,IAAIsE,SAAS,KAAK/D,CAAC,CAACmF,MAAM,CAAC5E,KAAK,EAAE;QACpE,IAAM8E,MAAM,GAAG,IAAA5B,2BAAY,EACzBE,YAAY,EACZ1C,iBAAiB,EACjBF,gBAAgB,EAChBiB,YAAY,EACZZ,aAAa,EACbF,mBAAmB,GAAG,MAAM,GAAG,OAAO,EACtCwB,gBACF,CAAC;QACD,IAAM4C,gBAAgB,GAAG,IAAA7B,2BAAY,EACnCE,YAAY,EACZ,EAAE,EACF5C,gBAAgB,EAChB,KAAK,EACLK,aAAa,EACb,MAAM,EACNsB,gBACF,CAAC;QACD,IAAM6C,aAAa,GAAG,IAAAC,kCAAmB,EACvCF,gBAAgB,EAChBrE,iBAAiB,EACjBF,gBACF,CAAC;QACDiD,YAAY,CAACqB,MAAM,CAAC;QACpBb,uBAAuB,CAACc,gBAAgB,CAAC;QACzClB,mBAAmB,CAACkB,gBAAgB,CAAC;QACrCnC,eAAe,CAACoC,aAAa,CAAC;QAC9BhC,mBAAmB,CAACgC,aAAa,CAAC;QAClC,IAAIA,aAAa,KAAKjC,gBAAgB,EAAE/B,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAGgE,aAAa,CAAC;QACjE3B,eAAe,CAACyB,MAAM,CAAC;QACvB,OAAO7D,MAAM,KAAK,UAAU,IAAIA,MAAM,CAACxB,CAAC,CAAC;MAC3C,CAAC,MAAM;QACL,IAAI,CAAC4B,eAAe,EAAE;UACpBgC,eAAe,CAACG,SAAS,CAAC;UAC1BK,mBAAmB,CAACG,oBAAoB,CAAC;UACzCpB,eAAe,CAACG,gBAAgB,CAAC;UACjC/B,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAG+B,gBAAgB,CAAC;UAC5B,OAAO3B,QAAQ,KAAK,UAAU,IAAIA,QAAQ,CAAC3B,CAAC,CAAC;QAC/C,CAAC,MAAM;UACL,IAAI+D,SAAS,KAAK/D,CAAC,CAACmF,MAAM,CAAC5E,KAAK,EAAE;YAChCiB,MAAM,aAANA,MAAM,eAANA,MAAM,CAAGxB,CAAC,CAAC;UACb,CAAC,MAAM;YACL,OAAO2B,QAAQ,KAAK,UAAU,IAAIA,QAAQ,CAAC3B,CAAC,CAAC;UAC/C;QACF;MACF;IACF;IACA4E,UAAU,CAAC,KAAK,CAAC;IACjB,OAAOrC,MAAM,KAAK,UAAU,IAAIA,MAAM,CAACvC,CAAC,CAAC;EAC3C,CAAC,EACD,CACE2D,YAAY,EACZpB,MAAM,EACNwB,SAAS,EACTQ,oBAAoB,EACpBjB,gBAAgB,EAChB/B,QAAQ,EACRN,iBAAiB,EACjBF,gBAAgB,EAChBiB,YAAY,EACZZ,aAAa,EACbF,mBAAmB,EACnBwB,gBAAgB,EAChBlB,MAAM,EACNI,eAAe,EACfD,QAAQ,CAEZ,CAAC;EAED,IAAM8D,WAAW,GAAG,IAAAR,kBAAW,EAC7B,UAACS,IAA+B,EAAK;IACnC,IACGpD,GAAG,KAAKhB,SAAS,IAAIsB,MAAM,CAACM,YAAY,CAAC,GAAGZ,GAAG,IAC/CD,GAAG,KAAKf,SAAS,IAAIsB,MAAM,CAACM,YAAY,CAAC,GAAGb,GAAI,EACjD;MACA;IACF;IAEA,IAAIsD,QAAQ,GAAGzC,YAAY;IAE3B,IAAIwC,IAAI,KAAK,WAAW,EAAE;MACxB,IAAIpD,GAAG,KAAKhB,SAAS,IAAIsB,MAAM,CAACM,YAAY,CAAC,GAAGpB,IAAI,IAAIQ,GAAG,EAAE;QAC3DqD,QAAQ,GAAG/C,MAAM,CAACM,YAAY,CAAC,GAAGpB,IAAI;MACxC,CAAC,MAAM,IAAIc,MAAM,CAACM,YAAY,CAAC,GAAGZ,GAAG,EAAE;QACrCqD,QAAQ,GAAGrD,GAAG;MAChB,CAAC,MAAM;QACL;MACF;IACF,CAAC,MAAM,IAAIoD,IAAI,KAAK,WAAW,EAAE;MAC/B,IAAIrD,GAAG,KAAKf,SAAS,IAAIsB,MAAM,CAACM,YAAY,CAAC,GAAGpB,IAAI,IAAIO,GAAG,EAAE;QAC3DsD,QAAQ,GAAG/C,MAAM,CAACM,YAAY,CAAC,GAAGpB,IAAI;MACxC,CAAC,MAAM,IAAIc,MAAM,CAACM,YAAY,CAAC,GAAGb,GAAG,EAAE;QACrCsD,QAAQ,GAAGtD,GAAG;MAChB,CAAC,MAAM;QACL;MACF;IACF;IAEA,IAAIuD,cAAc;IAClB,IAAIxE,aAAa,KAAKE,SAAS,EAAE;MAC/BsE,cAAc,GAAGhD,MAAM,CAAC+C,QAAQ,CAAC,CAACE,OAAO,CAACzE,aAAa,CAAC;IAC1D,CAAC,MAAM;MACLwE,cAAc,GAAGhD,MAAM,CAAC+C,QAAQ,CAAC,CAACE,OAAO,CAAC,CAAC,CAAC;IAC9C;IAEA,IAAIzE,aAAa,KAAKE,SAAS,IAAIF,aAAa,KAAK,CAAC,EAAE;MACtDwE,cAAc,GAAGE,IAAI,CAACC,KAAK,CAACnD,MAAM,CAAC+C,QAAQ,CAAC,CAAC,CAAC3G,QAAQ,CAAC,CAAC;IAC1D;IAEA,IAAI4G,cAAc,CAACI,QAAQ,CAAC,GAAG,CAAC,IAAIJ,cAAc,CAACI,QAAQ,CAAC,GAAG,CAAC,EAAE;MAChEJ,cAAc,GAAGA,cAAc,CAACK,OAAO,CAAC,GAAG,EAAElF,gBAAgB,CAAC;IAChE;IAEAoC,eAAe,CAACwC,QAAQ,CAAC;IACzBpC,mBAAmB,CAACoC,QAAQ,CAAC;IAC7BvB,mBAAmB,CAACwB,cAAc,CAAC;IACnChC,eAAe,CAACgC,cAAc,CAAC;IAC/B,IAAIrE,QAAQ,EAAEA,QAAQ,CAACoE,QAAQ,CAAC;EAClC,CAAC,EACD,CAACrD,GAAG,EAAEY,YAAY,EAAEb,GAAG,EAAEjB,aAAa,EAAEG,QAAQ,EAAEO,IAAI,EAAEf,gBAAgB,CAC1E,CAAC;EAED,IAAMmF,aAAa,GAAG,IAAAjB,kBAAW,EAC/B,UAACjF,CAAC,EAAK;IACL,IAAIA,CAAC,CAACmG,GAAG,KAAK,OAAO,EAAE;MACrBnG,CAAC,CAACmF,MAAM,CAACiB,IAAI,CAAC,CAAC;MACf,IAAI,OAAO3E,eAAe,KAAK,UAAU,EACvCA,eAAe,CAACyB,YAAY,CAAC;IACjC;IACA,IAAIlD,CAAC,CAACmG,GAAG,KAAK,WAAW,EAAE;MACzB;IACF;IACA,IAAInG,CAAC,CAACmG,GAAG,KAAK,YAAY,EAAE;MAC1B;IACF;IACA,IAAInG,CAAC,CAACmG,GAAG,KAAK,SAAS,EAAE;MACvBnG,CAAC,CAACqG,cAAc,CAAC,CAAC;MAClBZ,WAAW,CAAC,WAAW,CAAC;IAC1B;IACA,IAAIzF,CAAC,CAACmG,GAAG,KAAK,WAAW,EAAE;MACzBnG,CAAC,CAACqG,cAAc,CAAC,CAAC;MAClBZ,WAAW,CAAC,WAAW,CAAC;IAC1B;IACA,IAAIzF,CAAC,CAACmG,GAAG,KAAK,QAAQ,EAAE;MACtBrB,SAAS,CAACI,OAAO,GAAG,IAAI;MACxBlF,CAAC,CAACmF,MAAM,CAACiB,IAAI,CAAC,CAAC;MACf,OAAOzE,QAAQ,KAAK,UAAU,IAAIA,QAAQ,CAAC3B,CAAC,CAAC;MAC7C8E,SAAS,CAACI,OAAO,GAAG,KAAK;IAC3B;IACA,IAAIlF,CAAC,CAACmG,GAAG,KAAK,WAAW,EAAE;MACzB;IACF;IACA,IAAInG,CAAC,CAACmG,GAAG,KAAK,QAAQ,EAAE;MACtB;IACF;IACA,IAAI,CAACnG,CAAC,CAACsG,OAAO,IAAItG,CAAC,CAACuG,OAAO,KAAKvG,CAAC,CAACmG,GAAG,KAAK,GAAG,EAAE;MAAA,IAAAK,iBAAA;MAC7C,CAAAA,iBAAA,GAAA3F,QAAQ,CAACqE,OAAO,cAAAsB,iBAAA,eAAhBA,iBAAA,CAAkBC,MAAM,CAAC,CAAC;MAC1B;IACF;IACA,IAAIzG,CAAC,CAACmG,GAAG,KAAK,KAAK,EAAE;MACnB;IACF;IACA,IAAI,CAACnG,CAAC,CAACsG,OAAO,IAAItG,CAAC,CAACuG,OAAO,KAAKvG,CAAC,CAACmG,GAAG,KAAK,GAAG,EAAE;MAC7CnG,CAAC,CAACqG,cAAc,CAAC,CAAC;MAClB;IACF;;IAEA;IACA,IAAIrG,CAAC,CAACmG,GAAG,KAAK,GAAG,IAAI9D,GAAG,KAAKf,SAAS,IAAIsB,MAAM,CAACP,GAAG,CAAC,IAAI,CAAC,EAAE;MAC1DrC,CAAC,CAACqG,cAAc,CAAC,CAAC;MAClB;IACF;;IAEA;IACA,IAAIrG,CAAC,CAACmG,GAAG,KAAKpF,gBAAgB,IAAIK,aAAa,KAAK,CAAC,EAAE;MACrDpB,CAAC,CAACqG,cAAc,CAAC,CAAC;MAClB;IACF;IAEA,IAAMK,KAAK,GAAG1G,CAAC,CAACmF,MAAM;IACtB,IAAMxB,YAAY,GAAG+C,KAAK,CAACnG,KAAK;IAChC,IAAMoG,KAAK,GAAGD,KAAK,CAACE,cAAc;IAClC,IAAMC,GAAG,GAAGH,KAAK,CAACI,YAAY;IAC9B,IAAMnB,QAAQ,GACZhC,YAAY,CAACoD,SAAS,CAAC,CAAC,EAAEJ,KAAK,CAAC,GAAG3G,CAAC,CAACmG,GAAG,GAAGxC,YAAY,CAACoD,SAAS,CAACF,GAAG,CAAC;IACxE,IACE,CAAC1E,UAAU,CACTwD,QAAQ,EACRqB,OAAO,CAAC7F,aAAa,CAAC,EACtBJ,gBAAgB,EAChBK,aAAa,aAAbA,aAAa,cAAbA,aAAa,GAAI,CAAC,EAClBa,KACF,CAAC,EACD;MACAjC,CAAC,CAACqG,cAAc,CAAC,CAAC;MAClB;IACF;EACF,CAAC,EACD,CACEjF,aAAa,EACbL,gBAAgB,EAChBI,aAAa,EACbN,QAAQ,EACRoB,KAAK,EACLI,GAAG,EACHa,YAAY,EACZvB,QAAQ,EACRF,eAAe,EACfgE,WAAW,EACXtD,UAAU,CAEd,CAAC;EAED,IAAM8E,YAAY,GAAG,IAAAhC,kBAAW,EAC9B,UAACjF,CAAC,EAAK;IACL,IAAMkH,UAAU,GAAGlH,CAAC,CAACmF,MAAM,CAAC5E,KAAK;IACjC,IAAI4G,eAAiC,GAAG7F,SAAS;IACjD,IAAM8F,YAAY,GAAGjG,aAAa,GAC9B+F,UAAU,GACVA,UAAU,CAACjB,OAAO,CAChB,+BAA+B,EAC/B,UAACoB,CAAC,EAAEC,GAAG,EAAEC,IAAI,EAAK;MAChB,IAAMC,aAAa,GAAGF,GAAG,CAACrB,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;MAC3C,IAAMwB,KAAK,GAAGD,aAAa,CAACE,KAAK,CAAC,GAAG,CAAC;MACtC,IAAMC,WAAW,GAAGF,KAAK,CAAC,CAAC,CAAC;MAC5B,IAAMG,cAAc,GAAGH,KAAK,CAAC,CAAC,CAAC;MAC/B,IAAMI,UAAU,GACdC,QAAQ,CAACH,WAAW,EAAE,EAAE,CAAC,GACzBI,iCAAkB,CAACR,IAAI,CAACS,WAAW,CAAC,CAAC,CAAC;MAExCb,eAAe,GAAGc,UAAU,IAAAC,MAAA,CACvBL,UAAU,GAAGA,UAAU,GAAG,CAAC,OAAAK,MAAA,CAC5BN,cAAc,GAAGA,cAAc,GAAG,CAAC,CAEvC,CAAC;MAED,IAAIO,MAAM,GAAGN,UAAU,CAAC7I,QAAQ,CAAC,CAAC;MAClC,IAAI4I,cAAc,KAAKtG,SAAS,EAAE;QAChC6G,MAAM,IAAIpH,gBAAgB,GAAG6G,cAAc;MAC7C;MACA,OAAOO,MAAM;IACf,CACF,CAAC;IAEL,IAAIhB,eAAe,KAAK7F,SAAS,EAAE;MACjC,IAAI4F,UAAU,EAAE;QACdC,eAAe,GAAGc,UAAU,CAACf,UAAU,CAACjB,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;MAC5D,CAAC,MAAM;QACLkB,eAAe,GAAG7F,SAAS;MAC7B;IACF;IAEAsC,eAAe,CAACwD,YAAY,CAAC;IAC7BhD,mBAAmB,CAACgD,YAAY,CAAC;IACjCjE,eAAe,CAACgE,eAAe,CAAC;IAChC,IAAI5F,QAAQ,IAAI4F,eAAe,KAAKjE,YAAY,EAC9C3B,QAAQ,CAAC4F,eAAe,CAAC;EAC7B,CAAC,EACD,CAAChG,aAAa,EAAEI,QAAQ,EAAE2B,YAAY,EAAEnC,gBAAgB,CAC1D,CAAC;EAED,IAAMqH,WAAW,GAAG,IAAAnD,kBAAW,EAC7B,UAACjF,CAAC,EAAK;IACL,IAAI,OAAO0B,OAAO,KAAK,UAAU,EAAE;MACjCA,OAAO,CAAC1B,CAAC,CAAC;IACZ;EACF,CAAC,EACD,CAAC0B,OAAO,CACV,CAAC;EAED,IAAM2G,WAAW,GAAG,IAAApD,kBAAW,EAAC,YAAM;IACpCrB,eAAe,CAACO,gBAAgB,CAAC;IACjCS,UAAU,CAAC,IAAI,CAAC;EAClB,CAAC,EAAE,CAACT,gBAAgB,CAAC,CAAC;EAEtB,IAAMmE,iBAAiB,GAAG,IAAArD,kBAAW,EAAC,YAAM;IAC1C,IAAIpE,QAAQ,CAACqE,OAAO,EAAE;MAAA,IAAAqD,kBAAA;MACpB,CAAAA,kBAAA,GAAA1H,QAAQ,CAACqE,OAAO,cAAAqD,kBAAA,eAAhBA,kBAAA,CAAkB9B,MAAM,CAAC,CAAC;IAC5B;EACF,CAAC,EAAE,CAAC5F,QAAQ,CAAC,CAAC;EAEd,OAAO;IACLN,KAAK,EAAEoD,YAAY;IACnBpB,MAAM,EAAEyC,UAAU;IAClBwD,SAAS,EAAEtC,aAAa;IACxB3E,QAAQ,EAAE0F,YAAY;IACtBvF,OAAO,EAAE0G,WAAW;IACpBK,aAAa,EAAEH,iBAAiB;IAChCI,OAAO,EAAEL,WAAW;IACpB1D,OAAO;IACPR,gBAAgB;IAChBjB;EACF,CAAC;AACH,CAAC"}
@@ -79,6 +79,7 @@ var formatNumber = exports.formatNumber = function formatNumber(n) {
79
79
  var decimalSpaces = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 2;
80
80
  var format = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : "long";
81
81
  var shortenThreshold = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 1000;
82
+ if (typeof n === undefined || typeof n === null) return "";
82
83
  var number = getNumberFromString(n, thousandSeparator, decimalSeperator);
83
84
  if (isNaN(number)) {
84
85
  return "";
@@ -1 +1 @@
1
- {"version":3,"file":"currencyUtils.js","names":["currencyMultiplier","exports","k","m","b","t","fixedDecimalSpaces","num","fixed","Math","pow","parts","toString","split","length","parseInt","floor","round","getNumberFromString","number","thousandSeparator","arguments","undefined","decimalSeparator","NaN","isNaN","Number","result","parseFloat","String","replaceAll","formatNumber","n","decimalSeperator","trimDecimals","decimalSpaces","format","shortenThreshold","isNegative","absoluteNumber","abs","suffixes","scale","shouldShorten","formattedNum","toFixed","numberWithSeparator","concat","x","replace","join","formatCurrency","currencyCode","currencyCodePosition"],"sources":["../../../src/utils/currencyUtils.ts"],"sourcesContent":["export const currencyMultiplier = {\n k: 1_000,\n m: 1_000_000,\n b: 1_000_000_000,\n t: 1_000_000_000_000,\n};\n\nexport const fixedDecimalSpaces = (num: number, fixed: number) => {\n fixed = fixed || 0;\n fixed = Math.pow(10, fixed);\n const parts = num.toString().split(\".\");\n if (parts.length > 1 && parseInt(parts[1]) > fixed) {\n return Math.floor(num * fixed) / fixed;\n }\n return Math.round(num * fixed) / fixed;\n};\n\nexport const getNumberFromString = (\n number: string | number,\n thousandSeparator = \",\",\n decimalSeparator = \".\"\n) => {\n if (typeof number === \"string\" && number === \"\") {\n return NaN;\n }\n if (!isNaN(Number(number)) || typeof number === \"number\") {\n return Number(number);\n }\n if (decimalSeparator === \",\") {\n const parts = number.split(decimalSeparator);\n\n let result = 0;\n if (parts.length === 2) {\n result = parts[0]\n ? parseFloat(String(parts[0]).replaceAll(thousandSeparator, \"\"))\n : 0;\n if (result < 0) {\n result -= parts[1]\n ? parseFloat(String(parts[1])) / Math.pow(10, parts[1].length)\n : 0;\n } else {\n result += parts[1]\n ? parseFloat(String(parts[1])) / Math.pow(10, parts[1].length)\n : 0;\n }\n return result;\n }\n if (parts.length === 1) {\n result = parseFloat(String(parts[0]).replaceAll(thousandSeparator, \"\"));\n\n return result;\n }\n return 0;\n } else {\n return parseFloat(String(number).replaceAll(thousandSeparator, \"\"));\n }\n};\n\n/**\n * @function formatNumber\n * @description\n * Formats a number or string into a human-readable format with options for thousand separators,\n * decimal precision, and shortening the number using suffixes (K, M, B, T).\n * It can handle negative numbers and optionally trim decimals and set number of decimal places based on the configuration.\n *\n * @param {string | number} n - The number or string to be formatted.\n * @param {\",\" | \".\" | \" \" | \"\"} [thousandSeparator=\",\"] - The character to use as a thousand separator.\n * @param {\",\" | \".\"} [decimalSeperator=\".\"] - The character to use as a decimal separator.\n * @param {boolean} [trimDecimals=true] - Whether to trim decimals to the specified number of decimal spaces.\n * @param {number} [decimalSpaces=2] - The number of decimal spaces to keep in the formatted output.\n * @param {\"long\" | \"short\"} [format=\"long\"] - The format type, either \"long\" for full numbers or \"short\" for shortened numbers with suffixes.\n * @param {number} [shortenThreshold=1000] - The minimum numeric value at which the number should be shortened\n * using suffixes. Numbers below this threshold will always be shown in long format.\n *\n * @returns {string} - The formatted number as a string with separators and potentially with decimals.\n *\n * @example\n * formatNumber(1500) // \"1,500.00\"\n * formatNumber(1500000, \",\", \".\", true, 2, \"short\") // \"1.5M\"\n */\nexport const formatNumber = (\n n: string | number,\n thousandSeparator = \",\",\n decimalSeperator = \".\",\n trimDecimals = true,\n decimalSpaces = 2,\n format = \"long\",\n shortenThreshold = 1000\n) => {\n const number = getNumberFromString(n, thousandSeparator, decimalSeperator);\n\n if (isNaN(number)) {\n return \"\";\n }\n\n const isNegative = number < 0;\n let absoluteNumber = Math.abs(number);\n\n const suffixes = [\"\", \"K\", \"M\", \"B\", \"T\"];\n let scale = 0;\n\n const shouldShorten =\n absoluteNumber >= shortenThreshold && format === \"short\";\n\n while (\n shouldShorten &&\n scale < suffixes.length - 1 &&\n absoluteNumber >= 1000\n ) {\n absoluteNumber /= 1000;\n scale++;\n }\n\n let formattedNum =\n scale === 0\n ? fixedDecimalSpaces(absoluteNumber, decimalSpaces)\n : parseFloat(absoluteNumber.toFixed(1));\n\n if (formattedNum === 1000 && scale > 0 && scale < 4) {\n formattedNum = 1;\n scale++;\n }\n\n const result = numberWithSeparator(\n trimDecimals ? formattedNum : formattedNum.toFixed(decimalSpaces),\n thousandSeparator,\n decimalSeperator\n );\n\n return isNegative\n ? `-${result}${suffixes[scale]}`\n : `${result}${suffixes[scale]}`;\n};\n\nexport const numberWithSeparator = (\n x: number | string,\n thousandSeparator = \",\",\n decimalSeparator = \".\",\n format = true\n) => {\n if (!format) {\n return x;\n }\n const parts = x.toString().split(\".\");\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandSeparator);\n\n return parts.join(decimalSeparator);\n};\n\n/**\n * @function formatCurrency\n * @description\n * Formats a number or string as a currency string with options for thousand separators,\n * decimal precision, currency code, currency code position, and the use of suffixes (K, M, B, T) if needed.\n * It can handle negative values and supports customization of the currency code and its position.\n *\n * @param {string | number} n - The number or string to be formatted as currency.\n * @param {\",\" | \".\" | \" \" | \"\"} [thousandSeparator=\",\"] - The character to use as a thousand separator.\n * @param {\",\" | \".\"} [decimalSeperator=\".\"] - The character to use as a decimal separator.\n * @param {boolean} [trimDecimals=false] - Whether to trim decimals to the specified number of decimal spaces.\n * @param {number} [decimalSpaces=2] - The number of decimal spaces to keep in the formatted output.\n * @param {\"long\" | \"short\"} [format=\"long\"] - The format type, either \"long\" for full numbers or \"short\" for shortened numbers with suffixes.\n * @param {string} [currencyCode=\"\"] - The currency code to append or prepend to the formatted number.\n * @param {\"right\" | \"left\"} [currencyCodePosition=\"right\"] - The position of the currency code relative to the formatted number.\n *\n * @returns {string} - The formatted currency string, including the currency code if provided.\n *\n * @example\n * formatCurrency(1500, \",\", \".\", false, 2, \"long\", \"USD\", \"right\") // \"1,500.00 USD\"\n * formatCurrency(1500000, \",\", \".\", true, 2, \"short\", \"JPY\", \"left\") // \"JPY 1.5M\"\n */\nexport const formatCurrency = (\n n: string | number,\n thousandSeparator = \",\",\n decimalSeperator = \".\",\n trimDecimals = false,\n decimalSpaces = 2,\n format = \"long\",\n currencyCode = \"\",\n currencyCodePosition = \"right\"\n) => {\n const formattedNum = formatNumber(\n n,\n thousandSeparator,\n decimalSeperator,\n trimDecimals,\n decimalSpaces,\n format,\n 10000\n );\n\n if (!currencyCode) {\n return formattedNum;\n }\n\n return currencyCodePosition === \"right\"\n ? `${formattedNum} ${currencyCode}`\n : `${currencyCode} ${formattedNum}`;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"currencyUtils.js","names":["currencyMultiplier","exports","k","m","b","t","fixedDecimalSpaces","num","fixed","Math","pow","parts","toString","split","length","parseInt","floor","round","getNumberFromString","number","thousandSeparator","arguments","undefined","decimalSeparator","NaN","isNaN","Number","result","parseFloat","String","replaceAll","formatNumber","n","decimalSeperator","trimDecimals","decimalSpaces","format","shortenThreshold","isNegative","absoluteNumber","abs","suffixes","scale","shouldShorten","formattedNum","toFixed","numberWithSeparator","concat","x","replace","join","formatCurrency","currencyCode","currencyCodePosition"],"sources":["../../../src/utils/currencyUtils.ts"],"sourcesContent":["export const currencyMultiplier = {\n k: 1_000,\n m: 1_000_000,\n b: 1_000_000_000,\n t: 1_000_000_000_000,\n};\n\nexport const fixedDecimalSpaces = (num: number, fixed: number) => {\n fixed = fixed || 0;\n fixed = Math.pow(10, fixed);\n const parts = num.toString().split(\".\");\n if (parts.length > 1 && parseInt(parts[1]) > fixed) {\n return Math.floor(num * fixed) / fixed;\n }\n return Math.round(num * fixed) / fixed;\n};\n\nexport const getNumberFromString = (\n number: string | number,\n thousandSeparator = \",\",\n decimalSeparator = \".\"\n) => {\n if (typeof number === \"string\" && number === \"\") {\n return NaN;\n }\n if (!isNaN(Number(number)) || typeof number === \"number\") {\n return Number(number);\n }\n if (decimalSeparator === \",\") {\n const parts = number.split(decimalSeparator);\n\n let result = 0;\n if (parts.length === 2) {\n result = parts[0]\n ? parseFloat(String(parts[0]).replaceAll(thousandSeparator, \"\"))\n : 0;\n if (result < 0) {\n result -= parts[1]\n ? parseFloat(String(parts[1])) / Math.pow(10, parts[1].length)\n : 0;\n } else {\n result += parts[1]\n ? parseFloat(String(parts[1])) / Math.pow(10, parts[1].length)\n : 0;\n }\n return result;\n }\n if (parts.length === 1) {\n result = parseFloat(String(parts[0]).replaceAll(thousandSeparator, \"\"));\n\n return result;\n }\n return 0;\n } else {\n return parseFloat(String(number).replaceAll(thousandSeparator, \"\"));\n }\n};\n\n/**\n * @function formatNumber\n * @description\n * Formats a number or string into a human-readable format with options for thousand separators,\n * decimal precision, and shortening the number using suffixes (K, M, B, T).\n * It can handle negative numbers and optionally trim decimals and set number of decimal places based on the configuration.\n *\n * @param {string | number} n - The number or string to be formatted.\n * @param {\",\" | \".\" | \" \" | \"\"} [thousandSeparator=\",\"] - The character to use as a thousand separator.\n * @param {\",\" | \".\"} [decimalSeperator=\".\"] - The character to use as a decimal separator.\n * @param {boolean} [trimDecimals=true] - Whether to trim decimals to the specified number of decimal spaces.\n * @param {number} [decimalSpaces=2] - The number of decimal spaces to keep in the formatted output.\n * @param {\"long\" | \"short\"} [format=\"long\"] - The format type, either \"long\" for full numbers or \"short\" for shortened numbers with suffixes.\n * @param {number} [shortenThreshold=1000] - The minimum numeric value at which the number should be shortened\n * using suffixes. Numbers below this threshold will always be shown in long format.\n *\n * @returns {string} - The formatted number as a string with separators and potentially with decimals.\n *\n * @example\n * formatNumber(1500) // \"1,500.00\"\n * formatNumber(1500000, \",\", \".\", true, 2, \"short\") // \"1.5M\"\n */\nexport const formatNumber = (\n n?: string | number,\n thousandSeparator = \",\",\n decimalSeperator = \".\",\n trimDecimals = true,\n decimalSpaces = 2,\n format = \"long\",\n shortenThreshold = 1000\n) => {\n if (typeof n === undefined || typeof n === null) return \"\";\n\n const number = getNumberFromString(\n n as string,\n thousandSeparator,\n decimalSeperator\n );\n\n if (isNaN(number)) {\n return \"\";\n }\n\n const isNegative = number < 0;\n let absoluteNumber = Math.abs(number);\n\n const suffixes = [\"\", \"K\", \"M\", \"B\", \"T\"];\n let scale = 0;\n\n const shouldShorten =\n absoluteNumber >= shortenThreshold && format === \"short\";\n\n while (\n shouldShorten &&\n scale < suffixes.length - 1 &&\n absoluteNumber >= 1000\n ) {\n absoluteNumber /= 1000;\n scale++;\n }\n\n let formattedNum =\n scale === 0\n ? fixedDecimalSpaces(absoluteNumber, decimalSpaces)\n : parseFloat(absoluteNumber.toFixed(1));\n\n if (formattedNum === 1000 && scale > 0 && scale < 4) {\n formattedNum = 1;\n scale++;\n }\n\n const result = numberWithSeparator(\n trimDecimals ? formattedNum : formattedNum.toFixed(decimalSpaces),\n thousandSeparator,\n decimalSeperator\n );\n\n return isNegative\n ? `-${result}${suffixes[scale]}`\n : `${result}${suffixes[scale]}`;\n};\n\nexport const numberWithSeparator = (\n x: number | string,\n thousandSeparator = \",\",\n decimalSeparator = \".\",\n format = true\n) => {\n if (!format) {\n return x;\n }\n const parts = x.toString().split(\".\");\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandSeparator);\n\n return parts.join(decimalSeparator);\n};\n\n/**\n * @function formatCurrency\n * @description\n * Formats a number or string as a currency string with options for thousand separators,\n * decimal precision, currency code, currency code position, and the use of suffixes (K, M, B, T) if needed.\n * It can handle negative values and supports customization of the currency code and its position.\n *\n * @param {string | number} n - The number or string to be formatted as currency.\n * @param {\",\" | \".\" | \" \" | \"\"} [thousandSeparator=\",\"] - The character to use as a thousand separator.\n * @param {\",\" | \".\"} [decimalSeperator=\".\"] - The character to use as a decimal separator.\n * @param {boolean} [trimDecimals=false] - Whether to trim decimals to the specified number of decimal spaces.\n * @param {number} [decimalSpaces=2] - The number of decimal spaces to keep in the formatted output.\n * @param {\"long\" | \"short\"} [format=\"long\"] - The format type, either \"long\" for full numbers or \"short\" for shortened numbers with suffixes.\n * @param {string} [currencyCode=\"\"] - The currency code to append or prepend to the formatted number.\n * @param {\"right\" | \"left\"} [currencyCodePosition=\"right\"] - The position of the currency code relative to the formatted number.\n *\n * @returns {string} - The formatted currency string, including the currency code if provided.\n *\n * @example\n * formatCurrency(1500, \",\", \".\", false, 2, \"long\", \"USD\", \"right\") // \"1,500.00 USD\"\n * formatCurrency(1500000, \",\", \".\", true, 2, \"short\", \"JPY\", \"left\") // \"JPY 1.5M\"\n */\nexport const formatCurrency = (\n n: string | number,\n thousandSeparator = \",\",\n decimalSeperator = \".\",\n trimDecimals = false,\n decimalSpaces = 2,\n format = \"long\",\n currencyCode = \"\",\n currencyCodePosition = \"right\"\n) => {\n const formattedNum = formatNumber(\n n,\n thousandSeparator,\n decimalSeperator,\n trimDecimals,\n decimalSpaces,\n format,\n 10000\n );\n\n if (!currencyCode) {\n return formattedNum;\n }\n\n return currencyCodePosition === \"right\"\n ? `${formattedNum} ${currencyCode}`\n : `${currencyCode} ${formattedNum}`;\n};\n"],"mappings":";;;;;;AAAO,IAAMA,kBAAkB,GAAAC,OAAA,CAAAD,kBAAA,GAAG;EAChCE,CAAC,EAAE,IAAK;EACRC,CAAC,EAAE,OAAS;EACZC,CAAC,EAAE,UAAa;EAChBC,CAAC,EAAE;AACL,CAAC;AAEM,IAAMC,kBAAkB,GAAAL,OAAA,CAAAK,kBAAA,GAAG,SAArBA,kBAAkBA,CAAIC,GAAW,EAAEC,KAAa,EAAK;EAChEA,KAAK,GAAGA,KAAK,IAAI,CAAC;EAClBA,KAAK,GAAGC,IAAI,CAACC,GAAG,CAAC,EAAE,EAAEF,KAAK,CAAC;EAC3B,IAAMG,KAAK,GAAGJ,GAAG,CAACK,QAAQ,CAAC,CAAC,CAACC,KAAK,CAAC,GAAG,CAAC;EACvC,IAAIF,KAAK,CAACG,MAAM,GAAG,CAAC,IAAIC,QAAQ,CAACJ,KAAK,CAAC,CAAC,CAAC,CAAC,GAAGH,KAAK,EAAE;IAClD,OAAOC,IAAI,CAACO,KAAK,CAACT,GAAG,GAAGC,KAAK,CAAC,GAAGA,KAAK;EACxC;EACA,OAAOC,IAAI,CAACQ,KAAK,CAACV,GAAG,GAAGC,KAAK,CAAC,GAAGA,KAAK;AACxC,CAAC;AAEM,IAAMU,mBAAmB,GAAAjB,OAAA,CAAAiB,mBAAA,GAAG,SAAtBA,mBAAmBA,CAC9BC,MAAuB,EAGpB;EAAA,IAFHC,iBAAiB,GAAAC,SAAA,CAAAP,MAAA,QAAAO,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,GAAG;EAAA,IACvBE,gBAAgB,GAAAF,SAAA,CAAAP,MAAA,QAAAO,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,GAAG;EAEtB,IAAI,OAAOF,MAAM,KAAK,QAAQ,IAAIA,MAAM,KAAK,EAAE,EAAE;IAC/C,OAAOK,GAAG;EACZ;EACA,IAAI,CAACC,KAAK,CAACC,MAAM,CAACP,MAAM,CAAC,CAAC,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;IACxD,OAAOO,MAAM,CAACP,MAAM,CAAC;EACvB;EACA,IAAII,gBAAgB,KAAK,GAAG,EAAE;IAC5B,IAAMZ,KAAK,GAAGQ,MAAM,CAACN,KAAK,CAACU,gBAAgB,CAAC;IAE5C,IAAII,MAAM,GAAG,CAAC;IACd,IAAIhB,KAAK,CAACG,MAAM,KAAK,CAAC,EAAE;MACtBa,MAAM,GAAGhB,KAAK,CAAC,CAAC,CAAC,GACbiB,UAAU,CAACC,MAAM,CAAClB,KAAK,CAAC,CAAC,CAAC,CAAC,CAACmB,UAAU,CAACV,iBAAiB,EAAE,EAAE,CAAC,CAAC,GAC9D,CAAC;MACL,IAAIO,MAAM,GAAG,CAAC,EAAE;QACdA,MAAM,IAAIhB,KAAK,CAAC,CAAC,CAAC,GACdiB,UAAU,CAACC,MAAM,CAAClB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGF,IAAI,CAACC,GAAG,CAAC,EAAE,EAAEC,KAAK,CAAC,CAAC,CAAC,CAACG,MAAM,CAAC,GAC5D,CAAC;MACP,CAAC,MAAM;QACLa,MAAM,IAAIhB,KAAK,CAAC,CAAC,CAAC,GACdiB,UAAU,CAACC,MAAM,CAAClB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGF,IAAI,CAACC,GAAG,CAAC,EAAE,EAAEC,KAAK,CAAC,CAAC,CAAC,CAACG,MAAM,CAAC,GAC5D,CAAC;MACP;MACA,OAAOa,MAAM;IACf;IACA,IAAIhB,KAAK,CAACG,MAAM,KAAK,CAAC,EAAE;MACtBa,MAAM,GAAGC,UAAU,CAACC,MAAM,CAAClB,KAAK,CAAC,CAAC,CAAC,CAAC,CAACmB,UAAU,CAACV,iBAAiB,EAAE,EAAE,CAAC,CAAC;MAEvE,OAAOO,MAAM;IACf;IACA,OAAO,CAAC;EACV,CAAC,MAAM;IACL,OAAOC,UAAU,CAACC,MAAM,CAACV,MAAM,CAAC,CAACW,UAAU,CAACV,iBAAiB,EAAE,EAAE,CAAC,CAAC;EACrE;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,IAAMW,YAAY,GAAA9B,OAAA,CAAA8B,YAAA,GAAG,SAAfA,YAAYA,CACvBC,CAAmB,EAOhB;EAAA,IANHZ,iBAAiB,GAAAC,SAAA,CAAAP,MAAA,QAAAO,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,GAAG;EAAA,IACvBY,gBAAgB,GAAAZ,SAAA,CAAAP,MAAA,QAAAO,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,GAAG;EAAA,IACtBa,YAAY,GAAAb,SAAA,CAAAP,MAAA,QAAAO,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,IAAI;EAAA,IACnBc,aAAa,GAAAd,SAAA,CAAAP,MAAA,QAAAO,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,CAAC;EAAA,IACjBe,MAAM,GAAAf,SAAA,CAAAP,MAAA,QAAAO,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,MAAM;EAAA,IACfgB,gBAAgB,GAAAhB,SAAA,CAAAP,MAAA,QAAAO,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,IAAI;EAEvB,IAAI,OAAOW,CAAC,KAAKV,SAAS,IAAI,OAAOU,CAAC,KAAK,IAAI,EAAE,OAAO,EAAE;EAE1D,IAAMb,MAAM,GAAGD,mBAAmB,CAChCc,CAAC,EACDZ,iBAAiB,EACjBa,gBACF,CAAC;EAED,IAAIR,KAAK,CAACN,MAAM,CAAC,EAAE;IACjB,OAAO,EAAE;EACX;EAEA,IAAMmB,UAAU,GAAGnB,MAAM,GAAG,CAAC;EAC7B,IAAIoB,cAAc,GAAG9B,IAAI,CAAC+B,GAAG,CAACrB,MAAM,CAAC;EAErC,IAAMsB,QAAQ,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;EACzC,IAAIC,KAAK,GAAG,CAAC;EAEb,IAAMC,aAAa,GACjBJ,cAAc,IAAIF,gBAAgB,IAAID,MAAM,KAAK,OAAO;EAE1D,OACEO,aAAa,IACbD,KAAK,GAAGD,QAAQ,CAAC3B,MAAM,GAAG,CAAC,IAC3ByB,cAAc,IAAI,IAAI,EACtB;IACAA,cAAc,IAAI,IAAI;IACtBG,KAAK,EAAE;EACT;EAEA,IAAIE,YAAY,GACdF,KAAK,KAAK,CAAC,GACPpC,kBAAkB,CAACiC,cAAc,EAAEJ,aAAa,CAAC,GACjDP,UAAU,CAACW,cAAc,CAACM,OAAO,CAAC,CAAC,CAAC,CAAC;EAE3C,IAAID,YAAY,KAAK,IAAI,IAAIF,KAAK,GAAG,CAAC,IAAIA,KAAK,GAAG,CAAC,EAAE;IACnDE,YAAY,GAAG,CAAC;IAChBF,KAAK,EAAE;EACT;EAEA,IAAMf,MAAM,GAAGmB,mBAAmB,CAChCZ,YAAY,GAAGU,YAAY,GAAGA,YAAY,CAACC,OAAO,CAACV,aAAa,CAAC,EACjEf,iBAAiB,EACjBa,gBACF,CAAC;EAED,OAAOK,UAAU,OAAAS,MAAA,CACTpB,MAAM,EAAAoB,MAAA,CAAGN,QAAQ,CAACC,KAAK,CAAC,OAAAK,MAAA,CACzBpB,MAAM,EAAAoB,MAAA,CAAGN,QAAQ,CAACC,KAAK,CAAC,CAAE;AACnC,CAAC;AAEM,IAAMI,mBAAmB,GAAA7C,OAAA,CAAA6C,mBAAA,GAAG,SAAtBA,mBAAmBA,CAC9BE,CAAkB,EAIf;EAAA,IAHH5B,iBAAiB,GAAAC,SAAA,CAAAP,MAAA,QAAAO,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,GAAG;EAAA,IACvBE,gBAAgB,GAAAF,SAAA,CAAAP,MAAA,QAAAO,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,GAAG;EAAA,IACtBe,MAAM,GAAAf,SAAA,CAAAP,MAAA,QAAAO,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,IAAI;EAEb,IAAI,CAACe,MAAM,EAAE;IACX,OAAOY,CAAC;EACV;EACA,IAAMrC,KAAK,GAAGqC,CAAC,CAACpC,QAAQ,CAAC,CAAC,CAACC,KAAK,CAAC,GAAG,CAAC;EACrCF,KAAK,CAAC,CAAC,CAAC,GAAGA,KAAK,CAAC,CAAC,CAAC,CAACsC,OAAO,CAAC,uBAAuB,EAAE7B,iBAAiB,CAAC;EAEvE,OAAOT,KAAK,CAACuC,IAAI,CAAC3B,gBAAgB,CAAC;AACrC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,IAAM4B,cAAc,GAAAlD,OAAA,CAAAkD,cAAA,GAAG,SAAjBA,cAAcA,CACzBnB,CAAkB,EAQf;EAAA,IAPHZ,iBAAiB,GAAAC,SAAA,CAAAP,MAAA,QAAAO,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,GAAG;EAAA,IACvBY,gBAAgB,GAAAZ,SAAA,CAAAP,MAAA,QAAAO,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,GAAG;EAAA,IACtBa,YAAY,GAAAb,SAAA,CAAAP,MAAA,QAAAO,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,KAAK;EAAA,IACpBc,aAAa,GAAAd,SAAA,CAAAP,MAAA,QAAAO,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,CAAC;EAAA,IACjBe,MAAM,GAAAf,SAAA,CAAAP,MAAA,QAAAO,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,MAAM;EAAA,IACf+B,YAAY,GAAA/B,SAAA,CAAAP,MAAA,QAAAO,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,EAAE;EAAA,IACjBgC,oBAAoB,GAAAhC,SAAA,CAAAP,MAAA,QAAAO,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,OAAO;EAE9B,IAAMuB,YAAY,GAAGb,YAAY,CAC/BC,CAAC,EACDZ,iBAAiB,EACjBa,gBAAgB,EAChBC,YAAY,EACZC,aAAa,EACbC,MAAM,EACN,KACF,CAAC;EAED,IAAI,CAACgB,YAAY,EAAE;IACjB,OAAOR,YAAY;EACrB;EAEA,OAAOS,oBAAoB,KAAK,OAAO,MAAAN,MAAA,CAChCH,YAAY,OAAAG,MAAA,CAAIK,YAAY,OAAAL,MAAA,CAC5BK,YAAY,OAAAL,MAAA,CAAIH,YAAY,CAAE;AACvC,CAAC"}
@@ -35,6 +35,13 @@ describe("format currency with thousandseparator set to ',' and decimalSeparator
35
35
  thousandSeparator: ".",
36
36
  decimalSeparator: ","
37
37
  }, "900,25"], [{
38
+ value: 0,
39
+ thousandSeparator: ".",
40
+ decimalSeparator: ",",
41
+ trimDecimals: false,
42
+ format: "long",
43
+ decimalSpaces: 2
44
+ }, "0,00"], [{
38
45
  value: "900,25",
39
46
  thousandSeparator: ".",
40
47
  decimalSeparator: ","
@@ -351,6 +358,15 @@ describe("format currency with thousandseparator set to ',' and decimalSeparator
351
358
  currencyCode: "",
352
359
  currencyCodePosition: "right"
353
360
  }, ""], [{
361
+ value: 0,
362
+ thousandSeparator: ",",
363
+ decimalSeparator: ".",
364
+ trimDecimals: false,
365
+ decimalSpaces: 2,
366
+ format: "long",
367
+ currencyCode: "USD",
368
+ currencyCodePosition: "right"
369
+ }, "0.00 USD"], [{
354
370
  value: "10",
355
371
  thousandSeparator: ",",
356
372
  decimalSeparator: ".",
@@ -1 +1 @@
1
- {"version":3,"file":"currencyUtils.test.js","names":["_currencyUtils","require","describe","it","each","value","thousandSeparator","decimalSeparator","trimDecimals","decimalSpaces","format","shortenThreshold","params","expected","expect","formatNumber","toEqual","number","fixedDecimalSpaces","toBe","result","numberWithSeparator","toFixed","getNumberFromString","currencyCode","currencyCodePosition","args","formatCurrency"],"sources":["../../../src/utils/currencyUtils.test.ts"],"sourcesContent":["import {\n formatNumber,\n getNumberFromString,\n numberWithSeparator,\n fixedDecimalSpaces,\n formatCurrency,\n} from \"./currencyUtils\";\nimport { FormatCurrencyArgs, FormatNumberArgs } from \"./types\";\n\ndescribe(\"format currency with thousandseparator set to ',' and decimalSeparator to '.'\", () => {\n // please try to leave unformatted - ignore works for this block only\n // prettier-ignore\n it.each<[FormatNumberArgs, string]>([\n [{ value: \"\" }, \"\"],\n [{ value: \"10\" }, \"10\"],\n [{ value: \"1000\" }, \"1,000\"],\n [{ value: \"1000.00\" }, \"1,000\"],\n [{ value: \"1200.50\" }, \"1,200.5\"],\n [{ value: \"1,200.00\" }, \"1,200\"],\n [{ value: \"2,240.00\" }, \"2,240\"],\n [{ value: \"22,240.00\" }, \"22,240\"],\n [{ value: \"50,000,000.00\" }, \"50,000,000\"],\n [{ value: \"-50,000.00\" }, \"-50,000\"],\n [{ value: \"-1,200\" }, \"-1,200\"],\n [{ value: \"-90,000,000.00\" }, \"-90,000,000\"],\n [{ value: \"900.25\" }, \"900.25\"],\n [{ value: 900.25, thousandSeparator: \".\", decimalSeparator: \",\" }, \"900,25\"],\n [{ value: \"900,25\", thousandSeparator: \".\", decimalSeparator: \",\" }, \"900,25\"],\n [{ value: 900.255556, thousandSeparator: \".\", decimalSeparator: \",\" }, \"900,25\"],\n [{ value: \"900,255556\", thousandSeparator: \".\", decimalSeparator: \",\" }, \"900,25\"],\n [{ value: 900.255556, thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: false, decimalSpaces: 6 }, \"900,255556\"],\n [{ value: \"900,255556\", thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: false }, \"900,25\"],\n [{ value: 900.25, thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: false, decimalSpaces: 3 }, \"900,250\"],\n [{ value: 900.25, thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: false, decimalSpaces: 3, format: \"long\" }, \"900,250\" ],\n [{ value: 1150.6666667, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\" }, \"1,150.66\" ],\n [{ value: \"1150.6666667\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\" }, \"1,150.66\" ],\n [{ value: 1150.6666667, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"1.2K\" ],\n [{ value: \"1150.6666667\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"1.2K\" ],\n [{ value: 1150.0, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"1.1K\" ],\n [{ value: \"1150.00000\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"1.1K\" ],\n [{ value: 1150.6, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\" }, \"1,150.6\" ],\n [{ value: \"1150.60\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\" }, \"1,150.6\"],\n [{ value: 1150.0, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\" }, \"1,150\" ],\n [{ value: \"1150.00\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\" }, \"1,150\"],\n [{ value: 110.155557, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\" }, \"110.15\" ],\n [{ value: \"110.155557\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\" }, \"110.15\" ],\n [{ value: 110.155557, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"110.15\" ],\n [{ value: \"110.155557\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"110.15\" ],\n [{ value: 1501000.155557, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\" }, \"1,501,000.15\" ],\n [{ value: \"1501000.155557\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\" }, \"1,501,000.15\" ],\n [{ value: 1501000.155557, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"1.5M\"],\n [{ value: \"1501000.155557\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"1.5M\" ],\n [{ value: \"1501000.155557\", thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"1,5M\" ],\n [{ value: \"1579.50\", thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"1,6K\" ],\n [{ value: \"1579,50\", thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"1,6K\" ],\n [{ value: \"1579.50\", thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: false, decimalSpaces: 2, format: \"long\" }, \"1.579,50\" ],\n [{ value: \"1579.50\", thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: false, decimalSpaces: 2, format: \"short\", shortenThreshold: 10000 }, \"1.579,50\" ],\n ])(\"should format currency advanced\", (params, expected) => {\n const {\n value,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalSpaces,\n format,\n shortenThreshold\n } = params;\n\n expect(\n formatNumber(\n value,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalSpaces,\n format,\n shortenThreshold\n )\n ).toEqual(expected);\n });\n\n //fixedDecimalSpaces\n it.each<[{ number: number; decimalSpaces: number }, number]>([\n [{ number: 123.456789, decimalSpaces: 3 }, 123.456],\n [{ number: 123.3, decimalSpaces: 2 }, 123.3],\n [{ number: 123.3, decimalSpaces: 0 }, 123],\n ])(\"should handle fixedDecimalSpaces\", (params, expected) => {\n expect(fixedDecimalSpaces(params.number, params.decimalSpaces)).toBe(\n expected\n );\n });\n\n //numberWithSeparator\n it(\"should format number with thousand separator\", () => {\n const result = numberWithSeparator((1000.0).toFixed(3), \",\", \".\");\n expect(result).toBe(\"1,000.000\");\n });\n\n it(\"should format string number with thousand separator\", () => {\n const result = numberWithSeparator(\"1000\", \",\");\n expect(result).toBe(\"1,000\");\n });\n\n it(\"should format decimal number with thousand separator and keep decimal part\", () => {\n const result = numberWithSeparator(12345.67, \",\");\n expect(result).toBe(\"12,345.67\");\n });\n\n it(\"should not format when format is set to false\", () => {\n const result = numberWithSeparator(1000, \",\", \".\", false);\n expect(result).toBe(1000);\n });\n\n it(\"should handle zero with thousand separator\", () => {\n const result = numberWithSeparator(0, \",\");\n expect(result).toBe(\"0\");\n });\n\n it(\"should handle negative number with thousand separator\", () => {\n const result = numberWithSeparator(-123456789, \",\");\n expect(result).toBe(\"-123,456,789\");\n });\n\n it(\"should not format\", () => {\n const result = numberWithSeparator(123456789, \",\", \".\", false);\n expect(result).toBe(123456789);\n });\n\n //getNumberFromString\n it.each([\n [\n {\n number: \"1.000.000,256\",\n thousandSeparator: \".\",\n decimalSeparator: \",\",\n },\n 1000000.256,\n ],\n [\n { number: 1000000.256, thousandSeparator: \".\", decimalSeparator: \",\" },\n 1000000.256,\n ],\n [\n {\n number: \"1,000,000.256\",\n thousandSeparator: \",\",\n decimalSeparator: \".\",\n },\n 1000000.256,\n ],\n [{ number: \",256\", thousandSeparator: \".\", decimalSeparator: \",\" }, 0.256],\n [{ number: \"1562\", thousandSeparator: \".\", decimalSeparator: \",\" }, 1562],\n [{ number: \"1,2,3.4\", thousandSeparator: \".\", decimalSeparator: \",\" }, 0],\n [{ number: \"1562\", thousandSeparator: \",\", decimalSeparator: \".\" }, 1562],\n [\n { number: \"-1.562,25\", thousandSeparator: \".\", decimalSeparator: \",\" },\n -1562.25,\n ],\n [\n { number: \"-1 562.25\", thousandSeparator: \" \", decimalSeparator: \".\" },\n -1562.25,\n ],\n [\n { number: \"1562.50\", thousandSeparator: \".\", decimalSeparator: \",\" },\n 1562.5,\n ],\n [{ number: \"1562.\", thousandSeparator: \".\", decimalSeparator: \",\" }, 1562],\n ])(\"should handle getNumberFromString\", (params, expected) => {\n const { number, thousandSeparator, decimalSeparator } = params;\n\n expect(\n getNumberFromString(number, thousandSeparator, decimalSeparator)\n ).toBe(expected);\n });\n\n // please try to leave unformatted - ignore works for this block only\n // prettier-ignore\n it.each<[FormatCurrencyArgs, string]>([\n [\n { value: \"\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: false, decimalSpaces: 2, format: \"long\", currencyCode: \"\", currencyCodePosition: \"right\" },\n \"\",\n ],\n [\n { value: \"10\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: false, decimalSpaces: 2, format: \"long\", currencyCode: \"\", currencyCodePosition: \"right\" },\n \"10.00\",\n ],\n [\n { value: \"1000\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: false, decimalSpaces: 2, format: \"long\", currencyCode: \"USD\", currencyCodePosition: \"right\" },\n \"1,000.00 USD\",\n ],\n [\n { value: \"1000.00\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\", currencyCode: \"USD\", currencyCodePosition: \"left\" },\n \"USD 1,000\",\n ],\n [\n { value: \"1200,50\", thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: false, decimalSpaces: 2, format: \"long\", currencyCode: \"EUR\", currencyCodePosition: \"right\" },\n \"1.200,50 EUR\",\n ],\n [\n { value: \"1200,50\", thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: false, decimalSpaces: 2, format: \"long\", currencyCode: \"\", currencyCodePosition: \"right\" },\n \"1.200,50\",\n ],\n [\n { value: \"900,25\", thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: false, decimalSpaces: 2, format: \"long\", currencyCode: \"GBP\", currencyCodePosition: \"left\" },\n \"GBP 900,25\",\n ],\n [\n { value: 900.25, thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: false, decimalSpaces: 2, format: \"long\", currencyCode: \"GBP\", currencyCodePosition: \"left\" },\n \"GBP 900,25\",\n ],\n [\n { value: 1150.6666667, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"short\", currencyCode: \"JPY\", currencyCodePosition: \"right\" },\n \"1,150.66 JPY\",\n ],\n [\n { value: 1501000.155557, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"short\", currencyCode: \"USD\", currencyCodePosition: \"left\" },\n \"USD 1.5M\",\n ],\n ])(\"should format currency correctly\", (args, expected) => {\n expect(\n formatCurrency(\n args.value,\n args.thousandSeparator,\n args.decimalSeparator,\n args.trimDecimals,\n args.decimalSpaces,\n args.format,\n args.currencyCode,\n args.currencyCodePosition\n )\n ).toEqual(expected);\n });\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"currencyUtils.test.js","names":["_currencyUtils","require","describe","it","each","value","thousandSeparator","decimalSeparator","trimDecimals","format","decimalSpaces","shortenThreshold","params","expected","expect","formatNumber","toEqual","number","fixedDecimalSpaces","toBe","result","numberWithSeparator","toFixed","getNumberFromString","currencyCode","currencyCodePosition","args","formatCurrency"],"sources":["../../../src/utils/currencyUtils.test.ts"],"sourcesContent":["import {\n formatNumber,\n getNumberFromString,\n numberWithSeparator,\n fixedDecimalSpaces,\n formatCurrency,\n} from \"./currencyUtils\";\nimport { FormatCurrencyArgs, FormatNumberArgs } from \"./types\";\n\ndescribe(\"format currency with thousandseparator set to ',' and decimalSeparator to '.'\", () => {\n // please try to leave unformatted - ignore works for this block only\n // prettier-ignore\n it.each<[FormatNumberArgs, string]>([\n [{ value: \"\" }, \"\"],\n [{ value: \"10\" }, \"10\"],\n [{ value: \"1000\" }, \"1,000\"],\n [{ value: \"1000.00\" }, \"1,000\"],\n [{ value: \"1200.50\" }, \"1,200.5\"],\n [{ value: \"1,200.00\" }, \"1,200\"],\n [{ value: \"2,240.00\" }, \"2,240\"],\n [{ value: \"22,240.00\" }, \"22,240\"],\n [{ value: \"50,000,000.00\" }, \"50,000,000\"],\n [{ value: \"-50,000.00\" }, \"-50,000\"],\n [{ value: \"-1,200\" }, \"-1,200\"],\n [{ value: \"-90,000,000.00\" }, \"-90,000,000\"],\n [{ value: \"900.25\" }, \"900.25\"],\n [{ value: 900.25, thousandSeparator: \".\", decimalSeparator: \",\" }, \"900,25\"],\n [{ value: 0, thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: false, format: \"long\", decimalSpaces: 2 }, \"0,00\"],\n [{ value: \"900,25\", thousandSeparator: \".\", decimalSeparator: \",\" }, \"900,25\"],\n [{ value: 900.255556, thousandSeparator: \".\", decimalSeparator: \",\" }, \"900,25\"],\n [{ value: \"900,255556\", thousandSeparator: \".\", decimalSeparator: \",\" }, \"900,25\"],\n [{ value: 900.255556, thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: false, decimalSpaces: 6 }, \"900,255556\"],\n [{ value: \"900,255556\", thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: false }, \"900,25\"],\n [{ value: 900.25, thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: false, decimalSpaces: 3 }, \"900,250\"],\n [{ value: 900.25, thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: false, decimalSpaces: 3, format: \"long\" }, \"900,250\" ],\n [{ value: 1150.6666667, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\" }, \"1,150.66\" ],\n [{ value: \"1150.6666667\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\" }, \"1,150.66\" ],\n [{ value: 1150.6666667, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"1.2K\" ],\n [{ value: \"1150.6666667\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"1.2K\" ],\n [{ value: 1150.0, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"1.1K\" ],\n [{ value: \"1150.00000\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"1.1K\" ],\n [{ value: 1150.6, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\" }, \"1,150.6\" ],\n [{ value: \"1150.60\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\" }, \"1,150.6\"],\n [{ value: 1150.0, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\" }, \"1,150\" ],\n [{ value: \"1150.00\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\" }, \"1,150\"],\n [{ value: 110.155557, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\" }, \"110.15\" ],\n [{ value: \"110.155557\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\" }, \"110.15\" ],\n [{ value: 110.155557, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"110.15\" ],\n [{ value: \"110.155557\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"110.15\" ],\n [{ value: 1501000.155557, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\" }, \"1,501,000.15\" ],\n [{ value: \"1501000.155557\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\" }, \"1,501,000.15\" ],\n [{ value: 1501000.155557, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"1.5M\"],\n [{ value: \"1501000.155557\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"1.5M\" ],\n [{ value: \"1501000.155557\", thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"1,5M\" ],\n [{ value: \"1579.50\", thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"1,6K\" ],\n [{ value: \"1579,50\", thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: true, decimalSpaces: 2, format: \"short\" }, \"1,6K\" ],\n [{ value: \"1579.50\", thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: false, decimalSpaces: 2, format: \"long\" }, \"1.579,50\" ],\n [{ value: \"1579.50\", thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: false, decimalSpaces: 2, format: \"short\", shortenThreshold: 10000 }, \"1.579,50\" ],\n ])(\"should format currency advanced\", (params, expected) => {\n const {\n value,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalSpaces,\n format,\n shortenThreshold\n } = params;\n\n expect(\n formatNumber(\n value,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalSpaces,\n format,\n shortenThreshold\n )\n ).toEqual(expected);\n });\n\n //fixedDecimalSpaces\n it.each<[{ number: number; decimalSpaces: number }, number]>([\n [{ number: 123.456789, decimalSpaces: 3 }, 123.456],\n [{ number: 123.3, decimalSpaces: 2 }, 123.3],\n [{ number: 123.3, decimalSpaces: 0 }, 123],\n ])(\"should handle fixedDecimalSpaces\", (params, expected) => {\n expect(fixedDecimalSpaces(params.number, params.decimalSpaces)).toBe(\n expected\n );\n });\n\n //numberWithSeparator\n it(\"should format number with thousand separator\", () => {\n const result = numberWithSeparator((1000.0).toFixed(3), \",\", \".\");\n expect(result).toBe(\"1,000.000\");\n });\n\n it(\"should format string number with thousand separator\", () => {\n const result = numberWithSeparator(\"1000\", \",\");\n expect(result).toBe(\"1,000\");\n });\n\n it(\"should format decimal number with thousand separator and keep decimal part\", () => {\n const result = numberWithSeparator(12345.67, \",\");\n expect(result).toBe(\"12,345.67\");\n });\n\n it(\"should not format when format is set to false\", () => {\n const result = numberWithSeparator(1000, \",\", \".\", false);\n expect(result).toBe(1000);\n });\n\n it(\"should handle zero with thousand separator\", () => {\n const result = numberWithSeparator(0, \",\");\n expect(result).toBe(\"0\");\n });\n\n it(\"should handle negative number with thousand separator\", () => {\n const result = numberWithSeparator(-123456789, \",\");\n expect(result).toBe(\"-123,456,789\");\n });\n\n it(\"should not format\", () => {\n const result = numberWithSeparator(123456789, \",\", \".\", false);\n expect(result).toBe(123456789);\n });\n\n //getNumberFromString\n it.each([\n [\n {\n number: \"1.000.000,256\",\n thousandSeparator: \".\",\n decimalSeparator: \",\",\n },\n 1000000.256,\n ],\n [\n { number: 1000000.256, thousandSeparator: \".\", decimalSeparator: \",\" },\n 1000000.256,\n ],\n [\n {\n number: \"1,000,000.256\",\n thousandSeparator: \",\",\n decimalSeparator: \".\",\n },\n 1000000.256,\n ],\n [{ number: \",256\", thousandSeparator: \".\", decimalSeparator: \",\" }, 0.256],\n [{ number: \"1562\", thousandSeparator: \".\", decimalSeparator: \",\" }, 1562],\n [{ number: \"1,2,3.4\", thousandSeparator: \".\", decimalSeparator: \",\" }, 0],\n [{ number: \"1562\", thousandSeparator: \",\", decimalSeparator: \".\" }, 1562],\n [\n { number: \"-1.562,25\", thousandSeparator: \".\", decimalSeparator: \",\" },\n -1562.25,\n ],\n [\n { number: \"-1 562.25\", thousandSeparator: \" \", decimalSeparator: \".\" },\n -1562.25,\n ],\n [\n { number: \"1562.50\", thousandSeparator: \".\", decimalSeparator: \",\" },\n 1562.5,\n ],\n [{ number: \"1562.\", thousandSeparator: \".\", decimalSeparator: \",\" }, 1562],\n ])(\"should handle getNumberFromString\", (params, expected) => {\n const { number, thousandSeparator, decimalSeparator } = params;\n\n expect(\n getNumberFromString(number, thousandSeparator, decimalSeparator)\n ).toBe(expected);\n });\n\n // please try to leave unformatted - ignore works for this block only\n // prettier-ignore\n it.each<[FormatCurrencyArgs, string]>([\n [\n { value: \"\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: false, decimalSpaces: 2, format: \"long\", currencyCode: \"\", currencyCodePosition: \"right\" },\n \"\",\n ],\n [\n { value: 0, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: false, decimalSpaces: 2, format: \"long\", currencyCode: \"USD\", currencyCodePosition: \"right\" },\n \"0.00 USD\",\n ],\n [\n { value: \"10\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: false, decimalSpaces: 2, format: \"long\", currencyCode: \"\", currencyCodePosition: \"right\" },\n \"10.00\",\n ],\n [\n { value: \"1000\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: false, decimalSpaces: 2, format: \"long\", currencyCode: \"USD\", currencyCodePosition: \"right\" },\n \"1,000.00 USD\",\n ],\n [\n { value: \"1000.00\", thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"long\", currencyCode: \"USD\", currencyCodePosition: \"left\" },\n \"USD 1,000\",\n ],\n [\n { value: \"1200,50\", thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: false, decimalSpaces: 2, format: \"long\", currencyCode: \"EUR\", currencyCodePosition: \"right\" },\n \"1.200,50 EUR\",\n ],\n [\n { value: \"1200,50\", thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: false, decimalSpaces: 2, format: \"long\", currencyCode: \"\", currencyCodePosition: \"right\" },\n \"1.200,50\",\n ],\n [\n { value: \"900,25\", thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: false, decimalSpaces: 2, format: \"long\", currencyCode: \"GBP\", currencyCodePosition: \"left\" },\n \"GBP 900,25\",\n ],\n [\n { value: 900.25, thousandSeparator: \".\", decimalSeparator: \",\", trimDecimals: false, decimalSpaces: 2, format: \"long\", currencyCode: \"GBP\", currencyCodePosition: \"left\" },\n \"GBP 900,25\",\n ],\n [\n { value: 1150.6666667, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"short\", currencyCode: \"JPY\", currencyCodePosition: \"right\" },\n \"1,150.66 JPY\",\n ],\n [\n { value: 1501000.155557, thousandSeparator: \",\", decimalSeparator: \".\", trimDecimals: true, decimalSpaces: 2, format: \"short\", currencyCode: \"USD\", currencyCodePosition: \"left\" },\n \"USD 1.5M\",\n ],\n ])(\"should format currency correctly\", (args, expected) => {\n expect(\n formatCurrency(\n args.value,\n args.thousandSeparator,\n args.decimalSeparator,\n args.trimDecimals,\n args.decimalSpaces,\n args.format,\n args.currencyCode,\n args.currencyCodePosition\n )\n ).toEqual(expected);\n });\n});\n"],"mappings":"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"}
@@ -3,6 +3,8 @@ import { InputProps } from "./Input";
3
3
  import { IInputNumber } from "../../hooks";
4
4
  export interface InputNumberProps extends Omit<InputProps, "value" | "onChange" | "step" | "onBlur">, IInputNumber {
5
5
  shortenThreshold?: number;
6
+ min?: number;
7
+ max?: number;
6
8
  }
7
9
  export declare const InputNumber: React.ForwardRefExoticComponent<InputNumberProps & React.RefAttributes<HTMLInputElement>>;
8
10
  //# sourceMappingURL=InputNumber.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InputNumber.d.ts","sourceRoot":"","sources":["../../../../src/components/Input/InputNumber.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAElD,OAAO,EAAS,UAAU,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAkB,MAAM,aAAa,CAAC;AAG3D,MAAM,WAAW,gBACf,SAAQ,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC,EAChE,YAAY;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,WAAW,2FAwFvB,CAAC"}
1
+ {"version":3,"file":"InputNumber.d.ts","sourceRoot":"","sources":["../../../../src/components/Input/InputNumber.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAElD,OAAO,EAAS,UAAU,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAkB,MAAM,aAAa,CAAC;AAG3D,MAAM,WAAW,gBACf,SAAQ,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC,EAChE,YAAY;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,WAAW,2FAwFvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"InputNumber.js","names":["React","forwardRef","useRef","Input","useInputNumber","useForkRef","InputNumber","_ref","ref","decimalLength","decimalSeparator","disableAbbreviation","disabled","disableMacros","invalid","step","thousandSeparator","value","defaultValue","onCancel","onSave","onEnterKeyPress","externalEnterKeyPress","allowEmptyValue","onChange","externalOnChange","onClick","externalOnClick","limit","placeholder","trimDecimals","min","max","onBlur","externalOnBlur","update","shortenThreshold","rest","inputRef","handleRef","onKeyDown","onFocus","onDoubleClick","createElement","_extends","type","displayName"],"sources":["../../../../src/components/Input/InputNumber.tsx"],"sourcesContent":["import React, { forwardRef, useRef } from \"react\";\n\nimport { Input, InputProps } from \"./Input\";\nimport { IInputNumber, useInputNumber } from \"../../hooks\";\nimport { useForkRef } from \"../../utils\";\n\nexport interface InputNumberProps\n extends Omit<InputProps, \"value\" | \"onChange\" | \"step\" | \"onBlur\">,\n IInputNumber {\n shortenThreshold?: number;\n}\n\nexport const InputNumber = forwardRef<HTMLInputElement, InputNumberProps>(\n (\n {\n decimalLength = 2,\n decimalSeparator = \".\",\n disableAbbreviation = false,\n disabled,\n disableMacros = false,\n invalid,\n step = 1,\n thousandSeparator = \",\",\n value: defaultValue,\n onCancel,\n onSave,\n onEnterKeyPress: externalEnterKeyPress,\n allowEmptyValue,\n onChange: externalOnChange,\n onClick: externalOnClick,\n limit,\n placeholder,\n trimDecimals = true,\n min,\n max,\n onBlur: externalOnBlur,\n update = false,\n shortenThreshold = 1000,\n ...rest\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const handleRef = useForkRef(ref, inputRef);\n\n const {\n value,\n onBlur,\n onKeyDown,\n onChange,\n onClick,\n onFocus,\n onDoubleClick,\n } = useInputNumber(\n {\n decimalLength,\n decimalSeparator,\n disableAbbreviation,\n disableMacros,\n step,\n thousandSeparator,\n onEnterKeyPress: externalEnterKeyPress,\n onChange: externalOnChange,\n onClick: externalOnClick,\n value: defaultValue,\n onCancel,\n onSave,\n allowEmptyValue,\n limit,\n trimDecimals,\n min,\n max,\n onBlur: externalOnBlur,\n update,\n shortenThreshold,\n },\n inputRef\n );\n\n return (\n <Input\n {...rest}\n ref={handleRef}\n placeholder={placeholder}\n value={value}\n type=\"text\"\n disabled={disabled}\n invalid={invalid}\n onChange={onChange}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n onClick={onClick}\n onDoubleClick={onDoubleClick}\n onFocus={onFocus}\n aria-placeholder={placeholder}\n aria-disabled={disabled}\n aria-invalid={invalid}\n />\n );\n }\n);\n\nInputNumber.displayName = \"InputNumber\";\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,UAAU,EAAEC,MAAM,QAAQ,OAAO;AAEjD,SAASC,KAAK,QAAoB,SAAS;AAC3C,SAAuBC,cAAc,QAAQ,aAAa;AAC1D,SAASC,UAAU,QAAQ,aAAa;AAQxC,OAAO,MAAMC,WAAW,gBAAGL,UAAU,CACnC,CAAAM,IAAA,EA2BEC,GAAG,KACA;EAAA,IA3BH;IACEC,aAAa,GAAG,CAAC;IACjBC,gBAAgB,GAAG,GAAG;IACtBC,mBAAmB,GAAG,KAAK;IAC3BC,QAAQ;IACRC,aAAa,GAAG,KAAK;IACrBC,OAAO;IACPC,IAAI,GAAG,CAAC;IACRC,iBAAiB,GAAG,GAAG;IACvBC,KAAK,EAAEC,YAAY;IACnBC,QAAQ;IACRC,MAAM;IACNC,eAAe,EAAEC,qBAAqB;IACtCC,eAAe;IACfC,QAAQ,EAAEC,gBAAgB;IAC1BC,OAAO,EAAEC,eAAe;IACxBC,KAAK;IACLC,WAAW;IACXC,YAAY,GAAG,IAAI;IACnBC,GAAG;IACHC,GAAG;IACHC,MAAM,EAAEC,cAAc;IACtBC,MAAM,GAAG,KAAK;IACdC,gBAAgB,GAAG,IAAI;IACvB,GAAGC;EACL,CAAC,GAAA9B,IAAA;EAGD,MAAM+B,QAAQ,GAAGpC,MAAM,CAA0B,IAAI,CAAC;EACtD,MAAMqC,SAAS,GAAGlC,UAAU,CAACG,GAAG,EAAE8B,QAAQ,CAAC;EAE3C,MAAM;IACJrB,KAAK;IACLgB,MAAM;IACNO,SAAS;IACThB,QAAQ;IACRE,OAAO;IACPe,OAAO;IACPC;EACF,CAAC,GAAGtC,cAAc,CAChB;IACEK,aAAa;IACbC,gBAAgB;IAChBC,mBAAmB;IACnBE,aAAa;IACbE,IAAI;IACJC,iBAAiB;IACjBK,eAAe,EAAEC,qBAAqB;IACtCE,QAAQ,EAAEC,gBAAgB;IAC1BC,OAAO,EAAEC,eAAe;IACxBV,KAAK,EAAEC,YAAY;IACnBC,QAAQ;IACRC,MAAM;IACNG,eAAe;IACfK,KAAK;IACLE,YAAY;IACZC,GAAG;IACHC,GAAG;IACHC,MAAM,EAAEC,cAAc;IACtBC,MAAM;IACNC;EACF,CAAC,EACDE,QACF,CAAC;EAED,oBACEtC,KAAA,CAAA2C,aAAA,CAACxC,KAAK,EAAAyC,QAAA,KACAP,IAAI;IACR7B,GAAG,EAAE+B,SAAU;IACfV,WAAW,EAAEA,WAAY;IACzBZ,KAAK,EAAEA,KAAM;IACb4B,IAAI,EAAC,MAAM;IACXjC,QAAQ,EAAEA,QAAS;IACnBE,OAAO,EAAEA,OAAQ;IACjBU,QAAQ,EAAEA,QAAS;IACnBS,MAAM,EAAEA,MAAO;IACfO,SAAS,EAAEA,SAAU;IACrBd,OAAO,EAAEA,OAAQ;IACjBgB,aAAa,EAAEA,aAAc;IAC7BD,OAAO,EAAEA,OAAQ;IACjB,oBAAkBZ,WAAY;IAC9B,iBAAejB,QAAS;IACxB,gBAAcE;EAAQ,EACvB,CAAC;AAEN,CACF,CAAC;AAEDR,WAAW,CAACwC,WAAW,GAAG,aAAa"}
1
+ {"version":3,"file":"InputNumber.js","names":["React","forwardRef","useRef","Input","useInputNumber","useForkRef","InputNumber","_ref","ref","decimalLength","decimalSeparator","disableAbbreviation","disabled","disableMacros","invalid","step","thousandSeparator","value","defaultValue","onCancel","onSave","onEnterKeyPress","externalEnterKeyPress","allowEmptyValue","onChange","externalOnChange","onClick","externalOnClick","limit","placeholder","trimDecimals","min","max","onBlur","externalOnBlur","update","shortenThreshold","rest","inputRef","handleRef","onKeyDown","onFocus","onDoubleClick","createElement","_extends","type","displayName"],"sources":["../../../../src/components/Input/InputNumber.tsx"],"sourcesContent":["import React, { forwardRef, useRef } from \"react\";\n\nimport { Input, InputProps } from \"./Input\";\nimport { IInputNumber, useInputNumber } from \"../../hooks\";\nimport { useForkRef } from \"../../utils\";\n\nexport interface InputNumberProps\n extends Omit<InputProps, \"value\" | \"onChange\" | \"step\" | \"onBlur\">,\n IInputNumber {\n shortenThreshold?: number;\n min?: number;\n max?: number;\n}\n\nexport const InputNumber = forwardRef<HTMLInputElement, InputNumberProps>(\n (\n {\n decimalLength = 2,\n decimalSeparator = \".\",\n disableAbbreviation = false,\n disabled,\n disableMacros = false,\n invalid,\n step = 1,\n thousandSeparator = \",\",\n value: defaultValue,\n onCancel,\n onSave,\n onEnterKeyPress: externalEnterKeyPress,\n allowEmptyValue,\n onChange: externalOnChange,\n onClick: externalOnClick,\n limit,\n placeholder,\n trimDecimals = true,\n min,\n max,\n onBlur: externalOnBlur,\n update = false,\n shortenThreshold = 1000,\n ...rest\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const handleRef = useForkRef(ref, inputRef);\n\n const {\n value,\n onBlur,\n onKeyDown,\n onChange,\n onClick,\n onFocus,\n onDoubleClick,\n } = useInputNumber(\n {\n decimalLength,\n decimalSeparator,\n disableAbbreviation,\n disableMacros,\n step,\n thousandSeparator,\n onEnterKeyPress: externalEnterKeyPress,\n onChange: externalOnChange,\n onClick: externalOnClick,\n value: defaultValue,\n onCancel,\n onSave,\n allowEmptyValue,\n limit,\n trimDecimals,\n min,\n max,\n onBlur: externalOnBlur,\n update,\n shortenThreshold,\n },\n inputRef\n );\n\n return (\n <Input\n {...rest}\n ref={handleRef}\n placeholder={placeholder}\n value={value}\n type=\"text\"\n disabled={disabled}\n invalid={invalid}\n onChange={onChange}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n onClick={onClick}\n onDoubleClick={onDoubleClick}\n onFocus={onFocus}\n aria-placeholder={placeholder}\n aria-disabled={disabled}\n aria-invalid={invalid}\n />\n );\n }\n);\n\nInputNumber.displayName = \"InputNumber\";\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,UAAU,EAAEC,MAAM,QAAQ,OAAO;AAEjD,SAASC,KAAK,QAAoB,SAAS;AAC3C,SAAuBC,cAAc,QAAQ,aAAa;AAC1D,SAASC,UAAU,QAAQ,aAAa;AAUxC,OAAO,MAAMC,WAAW,gBAAGL,UAAU,CACnC,CAAAM,IAAA,EA2BEC,GAAG,KACA;EAAA,IA3BH;IACEC,aAAa,GAAG,CAAC;IACjBC,gBAAgB,GAAG,GAAG;IACtBC,mBAAmB,GAAG,KAAK;IAC3BC,QAAQ;IACRC,aAAa,GAAG,KAAK;IACrBC,OAAO;IACPC,IAAI,GAAG,CAAC;IACRC,iBAAiB,GAAG,GAAG;IACvBC,KAAK,EAAEC,YAAY;IACnBC,QAAQ;IACRC,MAAM;IACNC,eAAe,EAAEC,qBAAqB;IACtCC,eAAe;IACfC,QAAQ,EAAEC,gBAAgB;IAC1BC,OAAO,EAAEC,eAAe;IACxBC,KAAK;IACLC,WAAW;IACXC,YAAY,GAAG,IAAI;IACnBC,GAAG;IACHC,GAAG;IACHC,MAAM,EAAEC,cAAc;IACtBC,MAAM,GAAG,KAAK;IACdC,gBAAgB,GAAG,IAAI;IACvB,GAAGC;EACL,CAAC,GAAA9B,IAAA;EAGD,MAAM+B,QAAQ,GAAGpC,MAAM,CAA0B,IAAI,CAAC;EACtD,MAAMqC,SAAS,GAAGlC,UAAU,CAACG,GAAG,EAAE8B,QAAQ,CAAC;EAE3C,MAAM;IACJrB,KAAK;IACLgB,MAAM;IACNO,SAAS;IACThB,QAAQ;IACRE,OAAO;IACPe,OAAO;IACPC;EACF,CAAC,GAAGtC,cAAc,CAChB;IACEK,aAAa;IACbC,gBAAgB;IAChBC,mBAAmB;IACnBE,aAAa;IACbE,IAAI;IACJC,iBAAiB;IACjBK,eAAe,EAAEC,qBAAqB;IACtCE,QAAQ,EAAEC,gBAAgB;IAC1BC,OAAO,EAAEC,eAAe;IACxBV,KAAK,EAAEC,YAAY;IACnBC,QAAQ;IACRC,MAAM;IACNG,eAAe;IACfK,KAAK;IACLE,YAAY;IACZC,GAAG;IACHC,GAAG;IACHC,MAAM,EAAEC,cAAc;IACtBC,MAAM;IACNC;EACF,CAAC,EACDE,QACF,CAAC;EAED,oBACEtC,KAAA,CAAA2C,aAAA,CAACxC,KAAK,EAAAyC,QAAA,KACAP,IAAI;IACR7B,GAAG,EAAE+B,SAAU;IACfV,WAAW,EAAEA,WAAY;IACzBZ,KAAK,EAAEA,KAAM;IACb4B,IAAI,EAAC,MAAM;IACXjC,QAAQ,EAAEA,QAAS;IACnBE,OAAO,EAAEA,OAAQ;IACjBU,QAAQ,EAAEA,QAAS;IACnBS,MAAM,EAAEA,MAAO;IACfO,SAAS,EAAEA,SAAU;IACrBd,OAAO,EAAEA,OAAQ;IACjBgB,aAAa,EAAEA,aAAc;IAC7BD,OAAO,EAAEA,OAAQ;IACjB,oBAAkBZ,WAAY;IAC9B,iBAAejB,QAAS;IACxB,gBAAcE;EAAQ,EACvB,CAAC;AAEN,CACF,CAAC;AAEDR,WAAW,CAACwC,WAAW,GAAG,aAAa"}
@@ -15,7 +15,8 @@ export interface InputTimeProps {
15
15
  triggerMode?: InputMode;
16
16
  disabled?: boolean;
17
17
  invalid?: boolean;
18
- disableVirtualization?: boolean;
18
+ enableVirtualization?: boolean;
19
+ addCustomTimeLabel?: string;
19
20
  }
20
21
  export declare const InputTime: React.FC<InputTimeProps>;
21
22
  //# sourceMappingURL=InputTime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InputTime.d.ts","sourceRoot":"","sources":["../../../../src/components/Input/InputTime.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAQhE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAI/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAIjD,eAAO,MAAM,sBAAsB,oEAOlC,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,GAAG,CAAC,EAAE,gBAAgB,CAAC;IACvB,GAAG,CAAC,EAAE,gBAAgB,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAMD,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA2H9C,CAAC"}
1
+ {"version":3,"file":"InputTime.d.ts","sourceRoot":"","sources":["../../../../src/components/Input/InputTime.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAQhE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAI/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAIjD,eAAO,MAAM,sBAAsB,oEAOlC,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,GAAG,CAAC,EAAE,gBAAgB,CAAC;IACvB,GAAG,CAAC,EAAE,gBAAgB,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAUD,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAkK9C,CAAC"}
@@ -14,7 +14,8 @@ export const StyledInputTimeWrapper = styled.div.withConfig({
14
14
  })(["max-width:176px;flex:1;& .c-combo-box--list{min-width:176px;}"]);
15
15
  const renderOption = option => {
16
16
  return /*#__PURE__*/React.createElement("div", {
17
- id: option.id
17
+ id: option.id,
18
+ "data-testid": "time-option-" + option.id
18
19
  }, option.name);
19
20
  };
20
21
  export const InputTime = _ref => {
@@ -31,10 +32,12 @@ export const InputTime = _ref => {
31
32
  triggerMode,
32
33
  disabled,
33
34
  invalid,
34
- disableVirtualization,
35
+ enableVirtualization = false,
36
+ addCustomTimeLabel = "Add",
35
37
  ...rest
36
38
  } = _ref;
37
39
  const [isOpen, setIsOpen] = useState(false);
40
+ const [search, setSearch] = useState(undefined);
38
41
  const generateTimeOptions = () => {
39
42
  const minTime = moment(isValidTime(min) ? min : "00:00", "HH:mm");
40
43
  const maxTime = moment(isValidTime(max) ? max : "23:45", "HH:mm");
@@ -49,10 +52,12 @@ export const InputTime = _ref => {
49
52
  }
50
53
  return allOptions.filter(option => moment(option.id, "HH:mm").isSameOrAfter(minTime) && moment(option.id, "HH:mm").isSameOrBefore(maxTime));
51
54
  };
52
- const timeOptions = generateTimeOptions();
53
- const isValidDefaultSelected = defaultSelected ? timeOptions.some(opt => opt.id === defaultSelected) : false;
55
+ const [timeOptions, setTimeOptions] = useState(generateTimeOptions());
56
+ const isInOptions = useCallback(option => timeOptions.some(opt => opt.id === option), [timeOptions]);
57
+ const isValidDefaultSelected = defaultSelected ? isInOptions(defaultSelected) : false;
54
58
  const [selected, setSelected] = useState(isValidDefaultSelected ? defaultSelected : undefined);
55
59
  const handleInputChange = useCallback(text => {
60
+ setSearch(text);
56
61
  if (/\d{1,2}:\d{2}/.test(text.trim())) {
57
62
  return;
58
63
  }
@@ -67,6 +72,25 @@ export const InputTime = _ref => {
67
72
  }
68
73
  }
69
74
  }, [onChange, selected, timeOptions]);
75
+ const handleEmptyAction = newTime => {
76
+ const time = String(newTime);
77
+ if (isValidTime(time)) {
78
+ const newOption = {
79
+ id: time,
80
+ name: mode === "12" ? moment(time, "HH:mm").format("hh:mm A") : time
81
+ };
82
+ const newOptions = [...timeOptions];
83
+ const index = newOptions.findIndex(option => moment(option.id, "HH:mm") > moment(time, "HH:mm"));
84
+ if (index === -1) {
85
+ newOptions.push(newOption);
86
+ } else {
87
+ newOptions.splice(index, 0, newOption);
88
+ }
89
+ setTimeOptions(newOptions);
90
+ onChange == null || onChange(time);
91
+ setSelected(time);
92
+ }
93
+ };
70
94
  const handleChange = e => {
71
95
  setSelected(e);
72
96
  onChange == null || onChange(e);
@@ -91,6 +115,7 @@ export const InputTime = _ref => {
91
115
  if (defaultSelected !== selected && timeOptions.some(opt => opt.id === defaultSelected)) setSelected(defaultSelected);
92
116
  // eslint-disable-next-line react-hooks/exhaustive-deps
93
117
  }, [defaultSelected, timeOptions]);
118
+ const isValid = time => !isInOptions(time) && isValidTime(time);
94
119
  return /*#__PURE__*/React.createElement(StyledInputTimeWrapper, {
95
120
  className: classNames("c-input-time", className)
96
121
  }, /*#__PURE__*/React.createElement(ComboBox, _extends({}, rest, {
@@ -101,6 +126,8 @@ export const InputTime = _ref => {
101
126
  keepSameOptionsOrder: true,
102
127
  onInputChange: handleInputChange,
103
128
  onChange: handleChange,
129
+ handleEmptyAction: handleEmptyAction,
130
+ emptyValue: isValid(search) ? addCustomTimeLabel + " " + search : undefined,
104
131
  forceCloseMenu: true,
105
132
  placeholder: placeholder,
106
133
  renderOption: renderOption,
@@ -111,7 +138,7 @@ export const InputTime = _ref => {
111
138
  triggerMode: triggerMode,
112
139
  disabled: disabled,
113
140
  invalid: invalid,
114
- disableVirtualization: disableVirtualization
141
+ disableVirtualization: !enableVirtualization
115
142
  })));
116
143
  };
117
144
  //# sourceMappingURL=InputTime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InputTime.js","names":["React","useCallback","useEffect","useState","classNames","nlp","plg","moment","styled","isValidTime","ComboBox","plugin","StyledInputTimeWrapper","div","withConfig","displayName","componentId","renderOption","option","createElement","id","name","InputTime","_ref","mode","selected","defaultSelected","min","max","onChange","step","size","className","placeholder","triggerMode","disabled","invalid","disableVirtualization","rest","isOpen","setIsOpen","generateTimeOptions","minTime","maxTime","allOptions","currentTime","isBefore","push","format","add","filter","isSameOrAfter","isSameOrBefore","timeOptions","isValidDefaultSelected","some","opt","setSelected","undefined","handleInputChange","text","test","trim","doc","parsed","times","get","value","handleChange","e","handleOpen","handleClose","_document$getElementB","selectedItem","document","getElementById","parentElement","scrollIntoView","behavior","block","_extends","options","open","disabledInternalSort","keepSameOptionsOrder","onInputChange","forceCloseMenu","autoHeightMax","onClose","onOpen"],"sources":["../../../../src/components/Input/InputTime.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from \"react\";\n\nimport classNames from \"classnames\";\nimport nlp from \"compromise\";\nimport plg, { DatesMethods } from \"compromise-dates\";\nimport moment from \"moment\";\nimport styled from \"styled-components\";\n\nimport { InputMode, InputSize } from \"./types\";\nimport { isValidTime } from \"../../utils/timeUtils\";\nimport { ComboBox } from \"../ComboBox/ComboBox\";\nimport { IOptionItemProps } from \"../Select/Option\";\nimport { Time24HourFormat } from \"../SelectTime\";\n\nnlp.plugin(plg);\n\nexport const StyledInputTimeWrapper = styled.div`\n max-width: 176px;\n flex: 1;\n\n & .c-combo-box--list {\n min-width: 176px;\n }\n`;\n\nexport interface InputTimeProps {\n mode?: \"12\" | \"24\";\n selected?: Time24HourFormat;\n min?: Time24HourFormat;\n max?: Time24HourFormat;\n onChange?: (val: Time24HourFormat) => void;\n className?: string;\n placeholder?: string;\n size?: InputSize;\n step?: 1 | 5 | 15 | 30 | 60;\n triggerMode?: InputMode;\n disabled?: boolean;\n invalid?: boolean;\n disableVirtualization?: boolean;\n}\n\nconst renderOption = (option) => {\n return <div id={option.id}>{option.name}</div>;\n};\n\nexport const InputTime: React.FC<InputTimeProps> = ({\n mode = \"24\",\n selected: defaultSelected,\n min = \"00:00\",\n max = \"23:45\",\n onChange,\n step = 15,\n size,\n className,\n placeholder,\n triggerMode,\n disabled,\n invalid,\n disableVirtualization,\n ...rest\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n\n const generateTimeOptions = (): IOptionItemProps[] => {\n const minTime = moment(isValidTime(min) ? min : \"00:00\", \"HH:mm\");\n const maxTime = moment(isValidTime(max) ? max : \"23:45\", \"HH:mm\");\n const allOptions: IOptionItemProps[] = [];\n\n const currentTime = moment(\"00:00\", \"HH:mm\");\n\n while (currentTime.isBefore(moment(\"24:00\", \"HH:mm\"))) {\n allOptions.push({\n id: currentTime.format(\"HH:mm\"),\n name: currentTime.format(mode === \"12\" ? \"hh:mm A\" : \"HH:mm\"),\n });\n currentTime.add(step, \"minutes\");\n }\n\n return allOptions.filter(\n (option) =>\n moment(option.id, \"HH:mm\").isSameOrAfter(minTime) &&\n moment(option.id, \"HH:mm\").isSameOrBefore(maxTime)\n );\n };\n\n const timeOptions = generateTimeOptions();\n\n const isValidDefaultSelected = defaultSelected\n ? timeOptions.some((opt) => opt.id === defaultSelected)\n : false;\n\n const [selected, setSelected] = useState<Time24HourFormat | undefined>(\n isValidDefaultSelected ? defaultSelected : undefined\n );\n\n const handleInputChange = useCallback(\n (text: string) => {\n if (/\\d{1,2}:\\d{2}/.test(text.trim())) {\n return;\n }\n const doc = nlp<DatesMethods>(text);\n const parsed = doc.times().get()[0];\n if (parsed && parsed[\"24h\"] && parsed[\"24h\"] !== selected) {\n const value = moment(parsed).format(\"HH:mm\") as Time24HourFormat;\n if (timeOptions.some((option) => option.id === value)) {\n setSelected(value);\n onChange?.(value);\n setIsOpen(false);\n }\n }\n },\n [onChange, selected, timeOptions]\n );\n\n const handleChange = (e) => {\n setSelected(e);\n onChange?.(e);\n };\n\n const handleOpen = () => {\n setIsOpen(true);\n };\n\n const handleClose = () => {\n setIsOpen(false);\n };\n\n useEffect(() => {\n if (isOpen && selected) {\n const selectedItem = document.getElementById(selected)?.parentElement;\n selectedItem?.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n }\n }, [isOpen, selected]);\n\n useEffect(() => {\n if (\n defaultSelected !== selected &&\n timeOptions.some((opt) => opt.id === defaultSelected)\n )\n setSelected(defaultSelected);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [defaultSelected, timeOptions]);\n\n return (\n <StyledInputTimeWrapper className={classNames(\"c-input-time\", className)}>\n <ComboBox\n {...rest}\n options={timeOptions}\n open={isOpen}\n disabledInternalSort\n selected={selected}\n keepSameOptionsOrder\n onInputChange={handleInputChange}\n onChange={handleChange}\n forceCloseMenu\n placeholder={placeholder}\n renderOption={renderOption}\n autoHeightMax={226}\n size={size}\n onClose={handleClose}\n onOpen={handleOpen}\n triggerMode={triggerMode}\n disabled={disabled}\n invalid={invalid}\n disableVirtualization={disableVirtualization}\n />\n </StyledInputTimeWrapper>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"InputTime.js","names":["React","useCallback","useEffect","useState","classNames","nlp","plg","moment","styled","isValidTime","ComboBox","plugin","StyledInputTimeWrapper","div","withConfig","displayName","componentId","renderOption","option","createElement","id","name","InputTime","_ref","mode","selected","defaultSelected","min","max","onChange","step","size","className","placeholder","triggerMode","disabled","invalid","enableVirtualization","addCustomTimeLabel","rest","isOpen","setIsOpen","search","setSearch","undefined","generateTimeOptions","minTime","maxTime","allOptions","currentTime","isBefore","push","format","add","filter","isSameOrAfter","isSameOrBefore","timeOptions","setTimeOptions","isInOptions","some","opt","isValidDefaultSelected","setSelected","handleInputChange","text","test","trim","doc","parsed","times","get","value","handleEmptyAction","newTime","time","String","newOption","newOptions","index","findIndex","splice","handleChange","e","handleOpen","handleClose","_document$getElementB","selectedItem","document","getElementById","parentElement","scrollIntoView","behavior","block","isValid","_extends","options","open","disabledInternalSort","keepSameOptionsOrder","onInputChange","emptyValue","forceCloseMenu","autoHeightMax","onClose","onOpen","disableVirtualization"],"sources":["../../../../src/components/Input/InputTime.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from \"react\";\n\nimport classNames from \"classnames\";\nimport nlp from \"compromise\";\nimport plg, { DatesMethods } from \"compromise-dates\";\nimport moment from \"moment\";\nimport styled from \"styled-components\";\n\nimport { InputMode, InputSize } from \"./types\";\nimport { isValidTime } from \"../../utils/timeUtils\";\nimport { ComboBox } from \"../ComboBox/ComboBox\";\nimport { IOptionItemProps } from \"../Select/Option\";\nimport { Time24HourFormat } from \"../SelectTime\";\n\nnlp.plugin(plg);\n\nexport const StyledInputTimeWrapper = styled.div`\n max-width: 176px;\n flex: 1;\n\n & .c-combo-box--list {\n min-width: 176px;\n }\n`;\n\nexport interface InputTimeProps {\n mode?: \"12\" | \"24\";\n selected?: Time24HourFormat;\n min?: Time24HourFormat;\n max?: Time24HourFormat;\n onChange?: (val: Time24HourFormat) => void;\n className?: string;\n placeholder?: string;\n size?: InputSize;\n step?: 1 | 5 | 15 | 30 | 60;\n triggerMode?: InputMode;\n disabled?: boolean;\n invalid?: boolean;\n enableVirtualization?: boolean;\n addCustomTimeLabel?: string;\n}\n\nconst renderOption = (option) => {\n return (\n <div id={option.id} data-testid={`time-option-${option.id}`}>\n {option.name}\n </div>\n );\n};\n\nexport const InputTime: React.FC<InputTimeProps> = ({\n mode = \"24\",\n selected: defaultSelected,\n min = \"00:00\",\n max = \"23:45\",\n onChange,\n step = 15,\n size,\n className,\n placeholder,\n triggerMode,\n disabled,\n invalid,\n enableVirtualization = false,\n addCustomTimeLabel = \"Add\",\n ...rest\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [search, setSearch] = useState<string | undefined>(undefined);\n\n const generateTimeOptions = (): IOptionItemProps[] => {\n const minTime = moment(isValidTime(min) ? min : \"00:00\", \"HH:mm\");\n const maxTime = moment(isValidTime(max) ? max : \"23:45\", \"HH:mm\");\n const allOptions: IOptionItemProps[] = [];\n\n const currentTime = moment(\"00:00\", \"HH:mm\");\n\n while (currentTime.isBefore(moment(\"24:00\", \"HH:mm\"))) {\n allOptions.push({\n id: currentTime.format(\"HH:mm\"),\n name: currentTime.format(mode === \"12\" ? \"hh:mm A\" : \"HH:mm\"),\n });\n currentTime.add(step, \"minutes\");\n }\n\n return allOptions.filter(\n (option) =>\n moment(option.id, \"HH:mm\").isSameOrAfter(minTime) &&\n moment(option.id, \"HH:mm\").isSameOrBefore(maxTime)\n );\n };\n\n const [timeOptions, setTimeOptions] = useState(generateTimeOptions());\n\n const isInOptions = useCallback(\n (option) => timeOptions.some((opt) => opt.id === option),\n [timeOptions]\n );\n\n const isValidDefaultSelected = defaultSelected\n ? isInOptions(defaultSelected)\n : false;\n\n const [selected, setSelected] = useState<Time24HourFormat | undefined>(\n isValidDefaultSelected ? defaultSelected : undefined\n );\n\n const handleInputChange = useCallback(\n (text: string) => {\n setSearch(text);\n if (/\\d{1,2}:\\d{2}/.test(text.trim())) {\n return;\n }\n const doc = nlp<DatesMethods>(text);\n const parsed = doc.times().get()[0];\n if (parsed && parsed[\"24h\"] && parsed[\"24h\"] !== selected) {\n const value = moment(parsed).format(\"HH:mm\") as Time24HourFormat;\n if (timeOptions.some((option) => option.id === value)) {\n setSelected(value);\n onChange?.(value);\n setIsOpen(false);\n }\n }\n },\n [onChange, selected, timeOptions]\n );\n\n const handleEmptyAction = (newTime: string | number) => {\n const time = String(newTime);\n if (isValidTime(time)) {\n const newOption = {\n id: time,\n name: mode === \"12\" ? moment(time, \"HH:mm\").format(\"hh:mm A\") : time,\n };\n\n const newOptions = [...timeOptions];\n const index = newOptions.findIndex(\n (option) => moment(option.id, \"HH:mm\") > moment(time, \"HH:mm\")\n );\n\n if (index === -1) {\n newOptions.push(newOption);\n } else {\n newOptions.splice(index, 0, newOption);\n }\n\n setTimeOptions(newOptions);\n onChange?.(time as Time24HourFormat);\n setSelected(time as Time24HourFormat);\n }\n };\n\n const handleChange = (e) => {\n setSelected(e);\n onChange?.(e);\n };\n\n const handleOpen = () => {\n setIsOpen(true);\n };\n\n const handleClose = () => {\n setIsOpen(false);\n };\n\n useEffect(() => {\n if (isOpen && selected) {\n const selectedItem = document.getElementById(selected)?.parentElement;\n selectedItem?.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n }\n }, [isOpen, selected]);\n\n useEffect(() => {\n if (\n defaultSelected !== selected &&\n timeOptions.some((opt) => opt.id === defaultSelected)\n )\n setSelected(defaultSelected);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [defaultSelected, timeOptions]);\n\n const isValid = (time?: string) => !isInOptions(time) && isValidTime(time);\n\n return (\n <StyledInputTimeWrapper className={classNames(\"c-input-time\", className)}>\n <ComboBox\n {...rest}\n options={timeOptions}\n open={isOpen}\n disabledInternalSort\n selected={selected}\n keepSameOptionsOrder\n onInputChange={handleInputChange}\n onChange={handleChange}\n handleEmptyAction={handleEmptyAction}\n emptyValue={\n isValid(search) ? `${addCustomTimeLabel} ${search}` : undefined\n }\n forceCloseMenu\n placeholder={placeholder}\n renderOption={renderOption}\n autoHeightMax={226}\n size={size}\n onClose={handleClose}\n onOpen={handleOpen}\n triggerMode={triggerMode}\n disabled={disabled}\n invalid={invalid}\n disableVirtualization={!enableVirtualization}\n />\n </StyledInputTimeWrapper>\n );\n};\n"],"mappings":"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"}