@activecollab/components 2.0.93 → 2.0.94

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.
@@ -1 +1 @@
1
- {"version":3,"file":"useInputNumber.js","names":["useState","useRef","useCallback","useMemo","useEffect","validateNumberInput","currencyMultiplier","formatNumber","numberWithSeparator","useInputNumber","_ref","inputRef","decimalSeparator","thousandSeparator","disableAbbreviation","disableMacros","decimalLength","value","onChange","onSave","onEnterKeyPress","onClick","onCancel","allowEmptyValue","step","limit","validation","currentValue","setCurrentValue","prevValue","setPrevValue","unformattedValue","setUnformattedValue","focused","setFocused","escapeRef","handleBlur","e","current","target","trim","length","_value","updateValue","type","String","decimalPart","increasedValue","nonDecimalPart","replaceAll","includes","slice","indexOf","parseFloat","toFixed","joinedValue","handleKeyDown","key","blur","preventDefault","metaKey","ctrlKey","_inputRef$current","select","input","start","selectionStart","end","selectionEnd","newValue","substring","Boolean","handleChange","inputValue","numericInput","replace","_","num","unit","toLowerCase","toString","handleClick","handleFocus","handleDoubleClick","_inputRef$current2","inputProps","onBlur","onKeyDown","onDoubleClick","onFocus"],"sources":["../../../src/hooks/useInputNumber.tsx"],"sourcesContent":["import {\n useState,\n MouseEvent,\n useRef,\n useCallback,\n RefObject,\n useMemo,\n useEffect,\n} from \"react\";\n\nimport { validateNumberInput } from \"../utils\";\nimport {\n currencyMultiplier,\n formatNumber,\n numberWithSeparator,\n} 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 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 validation?: (\n value: string,\n disableMacros: boolean,\n decimalSeparator: string,\n decimalLength: number,\n limit?: number\n ) => boolean;\n}\n\nexport const useInputNumber = (\n {\n decimalSeparator = \".\",\n thousandSeparator = \",\",\n disableAbbreviation,\n disableMacros,\n decimalLength,\n value = \"\",\n onChange,\n onSave,\n onEnterKeyPress,\n onClick,\n onCancel,\n allowEmptyValue,\n step = 1,\n limit,\n validation = validateNumberInput,\n }: IInputNumber,\n inputRef: RefObject<HTMLInputElement | null>\n) => {\n const [currentValue, setCurrentValue] = useState(() =>\n disableAbbreviation\n ? value\n : formatNumber(value as string, thousandSeparator)\n );\n const [prevValue, setPrevValue] = useState(() =>\n disableAbbreviation\n ? value\n : formatNumber(value as string, thousandSeparator)\n );\n const [unformattedValue, setUnformattedValue] = useState(() => value);\n\n useEffect(() => {\n if (value !== prevValue) {\n setCurrentValue(\n disableAbbreviation\n ? value\n : formatNumber(value as string, thousandSeparator)\n );\n setPrevValue(\n disableAbbreviation\n ? value\n : formatNumber(value as string, thousandSeparator)\n );\n setUnformattedValue(value);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [disableAbbreviation, thousandSeparator, value]);\n\n const [focused, setFocused] = useState(false);\n\n const escapeRef = useRef(false);\n\n const handleBlur = useCallback(\n (e) => {\n if (escapeRef.current) {\n setCurrentValue(prevValue);\n setUnformattedValue(prevValue);\n } else {\n if (e.target.value.trim().length > 0 && prevValue !== e.target.value) {\n const _value = disableAbbreviation\n ? currentValue\n : formatNumber(currentValue as string, thousandSeparator);\n setPrevValue(_value);\n setUnformattedValue(currentValue);\n setCurrentValue(_value);\n typeof onSave === \"function\" && onSave(e);\n } else {\n if (!allowEmptyValue) {\n setCurrentValue(prevValue);\n setUnformattedValue(prevValue);\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 },\n [\n allowEmptyValue,\n disableAbbreviation,\n onCancel,\n onSave,\n prevValue,\n thousandSeparator,\n currentValue,\n ]\n );\n\n const updateValue = useCallback(\n (type: \"increment\" | \"decrement\") => {\n const value = String(unformattedValue);\n\n let decimalPart = \"\";\n let increasedValue = 0;\n let nonDecimalPart = value.replaceAll(thousandSeparator, \"\");\n\n if (!value) {\n return;\n }\n\n if (value.includes(decimalSeparator)) {\n nonDecimalPart = value\n .slice(0, value.indexOf(decimalSeparator))\n .replaceAll(thousandSeparator, \"\");\n }\n\n if (value.includes(decimalSeparator)) {\n decimalPart = value.slice(value.indexOf(decimalSeparator));\n }\n\n if (type === \"increment\") {\n increasedValue = parseFloat(nonDecimalPart) + step;\n } else {\n increasedValue = parseFloat(nonDecimalPart) - step;\n }\n\n if (value.includes(decimalSeparator)) {\n increasedValue = parseFloat(increasedValue.toFixed(decimalLength));\n }\n\n const joinedValue = numberWithSeparator(\n increasedValue,\n thousandSeparator,\n decimalSeparator,\n value.includes(thousandSeparator)\n );\n\n setUnformattedValue(\n decimalPart ? joinedValue + decimalPart : joinedValue\n );\n setCurrentValue(decimalPart ? joinedValue + decimalPart : joinedValue);\n },\n [decimalLength, decimalSeparator, step, thousandSeparator, unformattedValue]\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.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 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 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(/([0-9.]+)([kmbtKMBT])/, (_, num, unit) => {\n return (\n parseFloat(num) * currencyMultiplier[unit.toLowerCase()]\n ).toString();\n });\n setCurrentValue(numericInput);\n setUnformattedValue(numericInput);\n if (onChange) onChange(numericInput);\n },\n [disableMacros, 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 const inputProps = useMemo(() => {\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 currentValue,\n handleBlur,\n handleKeyDown,\n handleChange,\n handleClick,\n handleDoubleClick,\n handleFocus,\n focused,\n unformattedValue,\n ]);\n\n return {\n inputProps,\n setCurrentValue,\n setPrevValue,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"useInputNumber.js","names":["useState","useRef","useCallback","useMemo","useEffect","validateNumberInput","currencyMultiplier","formatNumber","numberWithSeparator","useInputNumber","_ref","inputRef","decimalSeparator","thousandSeparator","disableAbbreviation","disableMacros","decimalLength","value","onChange","onSave","onEnterKeyPress","onClick","onCancel","allowEmptyValue","step","trimDecimals","limit","validation","currentValue","setCurrentValue","prevValue","setPrevValue","unformattedValue","setUnformattedValue","focused","setFocused","escapeRef","handleBlur","e","current","target","trim","length","_value","updateValue","type","String","decimalPart","increasedValue","nonDecimalPart","replaceAll","includes","slice","indexOf","parseFloat","toFixed","joinedValue","handleKeyDown","key","blur","preventDefault","metaKey","ctrlKey","_inputRef$current","select","input","start","selectionStart","end","selectionEnd","newValue","substring","Boolean","handleChange","inputValue","numericInput","replace","_","num","unit","toLowerCase","toString","handleClick","handleFocus","handleDoubleClick","_inputRef$current2","inputProps","onBlur","onKeyDown","onDoubleClick","onFocus"],"sources":["../../../src/hooks/useInputNumber.tsx"],"sourcesContent":["import {\n useState,\n MouseEvent,\n useRef,\n useCallback,\n RefObject,\n useMemo,\n useEffect,\n} from \"react\";\n\nimport { validateNumberInput } from \"../utils\";\nimport {\n currencyMultiplier,\n formatNumber,\n numberWithSeparator,\n} 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 validation?: (\n value: string,\n disableMacros: boolean,\n decimalSeparator: string,\n decimalLength: number,\n limit?: number\n ) => boolean;\n}\n\nexport const useInputNumber = (\n {\n decimalSeparator = \".\",\n thousandSeparator = \",\",\n disableAbbreviation,\n disableMacros,\n decimalLength,\n value = \"\",\n onChange,\n onSave,\n onEnterKeyPress,\n onClick,\n onCancel,\n allowEmptyValue,\n step = 1,\n trimDecimals = true,\n limit,\n validation = validateNumberInput,\n }: IInputNumber,\n inputRef: RefObject<HTMLInputElement | null>\n) => {\n const [currentValue, setCurrentValue] = useState(() =>\n disableAbbreviation\n ? value\n : formatNumber(\n value as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength\n )\n );\n const [prevValue, setPrevValue] = useState(() =>\n disableAbbreviation\n ? value\n : formatNumber(\n value as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength\n )\n );\n const [unformattedValue, setUnformattedValue] = useState(() => value);\n\n useEffect(() => {\n if (value !== prevValue) {\n setCurrentValue(\n disableAbbreviation\n ? value\n : formatNumber(\n value as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength\n )\n );\n setPrevValue(\n disableAbbreviation\n ? value\n : formatNumber(\n value as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength\n )\n );\n setUnformattedValue(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 ]);\n\n const [focused, setFocused] = useState(false);\n\n const escapeRef = useRef(false);\n\n const handleBlur = useCallback(\n (e) => {\n if (escapeRef.current) {\n setCurrentValue(prevValue);\n setUnformattedValue(prevValue);\n } else {\n if (e.target.value.trim().length > 0 && prevValue !== e.target.value) {\n const _value = disableAbbreviation\n ? currentValue\n : formatNumber(\n currentValue as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength\n );\n setPrevValue(_value);\n setUnformattedValue(currentValue);\n setCurrentValue(_value);\n typeof onSave === \"function\" && onSave(e);\n } else {\n if (!allowEmptyValue) {\n setCurrentValue(prevValue);\n setUnformattedValue(prevValue);\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 },\n [\n prevValue,\n disableAbbreviation,\n currentValue,\n thousandSeparator,\n decimalSeparator,\n decimalLength,\n trimDecimals,\n onSave,\n allowEmptyValue,\n onCancel,\n ]\n );\n\n const updateValue = useCallback(\n (type: \"increment\" | \"decrement\") => {\n const value = String(unformattedValue);\n\n let decimalPart = \"\";\n let increasedValue = 0;\n let nonDecimalPart = value.replaceAll(thousandSeparator, \"\");\n\n if (!value) {\n return;\n }\n\n if (value.includes(decimalSeparator)) {\n nonDecimalPart = value\n .slice(0, value.indexOf(decimalSeparator))\n .replaceAll(thousandSeparator, \"\");\n }\n\n if (value.includes(decimalSeparator)) {\n decimalPart = value.slice(value.indexOf(decimalSeparator));\n }\n\n if (type === \"increment\") {\n increasedValue = parseFloat(nonDecimalPart) + step;\n } else {\n increasedValue = parseFloat(nonDecimalPart) - step;\n }\n\n if (value.includes(decimalSeparator)) {\n increasedValue = parseFloat(increasedValue.toFixed(decimalLength));\n }\n\n const joinedValue = numberWithSeparator(\n increasedValue,\n thousandSeparator,\n decimalSeparator,\n value.includes(thousandSeparator)\n );\n\n setUnformattedValue(\n decimalPart ? joinedValue + decimalPart : joinedValue\n );\n setCurrentValue(decimalPart ? joinedValue + decimalPart : joinedValue);\n },\n [decimalLength, decimalSeparator, step, thousandSeparator, unformattedValue]\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.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 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 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(/([0-9.]+)([kmbtKMBT])/, (_, num, unit) => {\n return (\n parseFloat(num) * currencyMultiplier[unit.toLowerCase()]\n ).toString();\n });\n setCurrentValue(numericInput);\n setUnformattedValue(numericInput);\n if (onChange) onChange(numericInput);\n },\n [disableMacros, 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 const inputProps = useMemo(() => {\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 currentValue,\n handleBlur,\n handleKeyDown,\n handleChange,\n handleClick,\n handleDoubleClick,\n handleFocus,\n focused,\n unformattedValue,\n ]);\n\n return {\n inputProps,\n setCurrentValue,\n setPrevValue,\n };\n};\n"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -11976,17 +11976,19 @@
11976
11976
  allowEmptyValue = _ref.allowEmptyValue,
11977
11977
  _ref$step = _ref.step,
11978
11978
  step = _ref$step === void 0 ? 1 : _ref$step,
11979
+ _ref$trimDecimals = _ref.trimDecimals,
11980
+ trimDecimals = _ref$trimDecimals === void 0 ? true : _ref$trimDecimals,
11979
11981
  limit = _ref.limit,
11980
11982
  _ref$validation = _ref.validation,
11981
11983
  validation = _ref$validation === void 0 ? validateNumberInput : _ref$validation;
11982
11984
  var _useState = React.useState(function () {
11983
- return disableAbbreviation ? value : formatNumber(value, thousandSeparator);
11985
+ return disableAbbreviation ? value : formatNumber(value, thousandSeparator, decimalSeparator, trimDecimals, decimalLength);
11984
11986
  }),
11985
11987
  _useState2 = _slicedToArray(_useState, 2),
11986
11988
  currentValue = _useState2[0],
11987
11989
  setCurrentValue = _useState2[1];
11988
11990
  var _useState3 = React.useState(function () {
11989
- return disableAbbreviation ? value : formatNumber(value, thousandSeparator);
11991
+ return disableAbbreviation ? value : formatNumber(value, thousandSeparator, decimalSeparator, trimDecimals, decimalLength);
11990
11992
  }),
11991
11993
  _useState4 = _slicedToArray(_useState3, 2),
11992
11994
  prevValue = _useState4[0],
@@ -11999,12 +12001,12 @@
11999
12001
  setUnformattedValue = _useState6[1];
12000
12002
  React.useEffect(function () {
12001
12003
  if (value !== prevValue) {
12002
- setCurrentValue(disableAbbreviation ? value : formatNumber(value, thousandSeparator));
12003
- setPrevValue(disableAbbreviation ? value : formatNumber(value, thousandSeparator));
12004
+ setCurrentValue(disableAbbreviation ? value : formatNumber(value, thousandSeparator, decimalSeparator, trimDecimals, decimalLength));
12005
+ setPrevValue(disableAbbreviation ? value : formatNumber(value, thousandSeparator, decimalSeparator, trimDecimals, decimalLength));
12004
12006
  setUnformattedValue(value);
12005
12007
  }
12006
12008
  // eslint-disable-next-line react-hooks/exhaustive-deps
12007
- }, [disableAbbreviation, thousandSeparator, value]);
12009
+ }, [disableAbbreviation, thousandSeparator, decimalSeparator, decimalLength, trimDecimals, value]);
12008
12010
  var _useState7 = React.useState(false),
12009
12011
  _useState8 = _slicedToArray(_useState7, 2),
12010
12012
  focused = _useState8[0],
@@ -12016,7 +12018,7 @@
12016
12018
  setUnformattedValue(prevValue);
12017
12019
  } else {
12018
12020
  if (e.target.value.trim().length > 0 && prevValue !== e.target.value) {
12019
- var _value = disableAbbreviation ? currentValue : formatNumber(currentValue, thousandSeparator);
12021
+ var _value = disableAbbreviation ? currentValue : formatNumber(currentValue, thousandSeparator, decimalSeparator, trimDecimals, decimalLength);
12020
12022
  setPrevValue(_value);
12021
12023
  setUnformattedValue(currentValue);
12022
12024
  setCurrentValue(_value);
@@ -12036,7 +12038,7 @@
12036
12038
  }
12037
12039
  }
12038
12040
  setFocused(false);
12039
- }, [allowEmptyValue, disableAbbreviation, onCancel, onSave, prevValue, thousandSeparator, currentValue]);
12041
+ }, [prevValue, disableAbbreviation, currentValue, thousandSeparator, decimalSeparator, decimalLength, trimDecimals, onSave, allowEmptyValue, onCancel]);
12040
12042
  var updateValue = React.useCallback(function (type) {
12041
12043
  var value = String(unformattedValue);
12042
12044
  var decimalPart = "";
@@ -13598,7 +13600,7 @@
13598
13600
  });
13599
13601
  InputHours.displayName = "InputHours";
13600
13602
 
13601
- var _excluded$K = ["decimalLength", "decimalSeparator", "disableAbbreviation", "disabled", "disableMacros", "invalid", "step", "thousandSeparator", "value", "onCancel", "onSave", "onEnterKeyPress", "allowEmptyValue", "onChange", "onClick", "limit", "placeholder"];
13603
+ var _excluded$K = ["decimalLength", "decimalSeparator", "disableAbbreviation", "disabled", "disableMacros", "invalid", "step", "thousandSeparator", "value", "onCancel", "onSave", "onEnterKeyPress", "allowEmptyValue", "onChange", "onClick", "limit", "placeholder", "trimDecimals"];
13602
13604
  var InputNumber = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
13603
13605
  var _ref$decimalLength = _ref.decimalLength,
13604
13606
  decimalLength = _ref$decimalLength === void 0 ? 2 : _ref$decimalLength,
@@ -13623,6 +13625,8 @@
13623
13625
  externalOnClick = _ref.onClick,
13624
13626
  limit = _ref.limit,
13625
13627
  placeholder = _ref.placeholder,
13628
+ _ref$trimDecimals = _ref.trimDecimals,
13629
+ trimDecimals = _ref$trimDecimals === void 0 ? true : _ref$trimDecimals,
13626
13630
  rest = _objectWithoutProperties(_ref, _excluded$K);
13627
13631
  var inputRef = React.useRef(null);
13628
13632
  var handleRef = useForkRef(ref, inputRef);
@@ -13640,7 +13644,8 @@
13640
13644
  onCancel,
13641
13645
  onSave,
13642
13646
  allowEmptyValue,
13643
- limit
13647
+ limit,
13648
+ trimDecimals
13644
13649
  }, inputRef),
13645
13650
  inputProps = _useInputNumber.inputProps;
13646
13651
  var value = inputProps.value,
@@ -17688,7 +17693,7 @@
17688
17693
  });
17689
17694
  EditableHours.displayName = "EditableHours";
17690
17695
 
17691
- var _excluded$c = ["decimalLength", "decimalSeparator", "disableAbbreviation", "disabled", "disableMacros", "step", "thousandSeparator", "value", "onSave", "onCancel", "className", "allowEmptyValue", "onEnterKeyPress", "onClick", "onChange"];
17696
+ var _excluded$c = ["decimalLength", "decimalSeparator", "disableAbbreviation", "disabled", "disableMacros", "step", "thousandSeparator", "value", "onSave", "onCancel", "className", "allowEmptyValue", "onEnterKeyPress", "onClick", "onChange", "trimDecimals"];
17692
17697
  var EditableCurrency = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
17693
17698
  var _ref$decimalLength = _ref.decimalLength,
17694
17699
  decimalLength = _ref$decimalLength === void 0 ? 2 : _ref$decimalLength,
@@ -17711,6 +17716,8 @@
17711
17716
  externalEnterKeyPress = _ref.onEnterKeyPress,
17712
17717
  externalOnClick = _ref.onClick,
17713
17718
  externalOnChange = _ref.onChange,
17719
+ _ref$trimDecimals = _ref.trimDecimals,
17720
+ trimDecimals = _ref$trimDecimals === void 0 ? true : _ref$trimDecimals,
17714
17721
  rest = _objectWithoutProperties(_ref, _excluded$c);
17715
17722
  var inputRef = React.useRef(null);
17716
17723
  var handleRef = useForkRef(ref, inputRef);
@@ -17727,7 +17734,8 @@
17727
17734
  onCancel,
17728
17735
  onChange: externalOnChange,
17729
17736
  onEnterKeyPress: externalEnterKeyPress,
17730
- onClick: externalOnClick
17737
+ onClick: externalOnClick,
17738
+ trimDecimals
17731
17739
  }, inputRef),
17732
17740
  inputProps = _useInputNumber.inputProps;
17733
17741
  var value = inputProps.value,
@@ -17740,10 +17748,10 @@
17740
17748
  focused = inputProps.focused,
17741
17749
  unformattedValue = inputProps.unformattedValue;
17742
17750
  var formattedValue = React.useMemo(function () {
17743
- return focused ? value : numberWithSeparator(value !== null && value !== void 0 ? value : "", thousandSeparator);
17744
- }, [focused, value, thousandSeparator]);
17751
+ return focused ? value : numberWithSeparator(value !== null && value !== void 0 ? value : "", thousandSeparator, decimalSeparator);
17752
+ }, [focused, value, thousandSeparator, decimalSeparator]);
17745
17753
  return /*#__PURE__*/React__default["default"].createElement(Tooltip, {
17746
- title: unformattedValue,
17754
+ title: numberWithSeparator(unformattedValue !== null && unformattedValue !== void 0 ? unformattedValue : "", thousandSeparator, decimalSeparator),
17747
17755
  disable: focused
17748
17756
  }, /*#__PURE__*/React__default["default"].createElement(EditableContent, {
17749
17757
  disabled: disabled,