@activecollab/components 2.0.106 → 2.0.107

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -622,6 +622,10 @@
622
622
  scale++;
623
623
  }
624
624
  var formattedNum = scale === 0 ? fixedDecimalSpaces(absoluteNumber, decimalSpaces) : parseFloat(absoluteNumber.toFixed(1));
625
+ if (formattedNum === 1000 && scale > 0 && scale < 4) {
626
+ formattedNum = 1;
627
+ scale++;
628
+ }
625
629
  var result = numberWithSeparator(trimDecimals ? formattedNum : formattedNum.toFixed(decimalSpaces), thousandSeparator, decimalSeperator);
626
630
  return isNegative ? "-".concat(result).concat(suffixes[scale]) : "".concat(result).concat(suffixes[scale]);
627
631
  };
@@ -12016,7 +12020,13 @@
12016
12020
  trimDecimals = _ref$trimDecimals === void 0 ? true : _ref$trimDecimals,
12017
12021
  limit = _ref.limit,
12018
12022
  _ref$validation = _ref.validation,
12019
- validation = _ref$validation === void 0 ? validateNumberInput : _ref$validation;
12023
+ validation = _ref$validation === void 0 ? validateNumberInput : _ref$validation,
12024
+ min = _ref.min,
12025
+ max = _ref.max;
12026
+ var isMaxValid = max === undefined || min === undefined || Number(max) >= Number(min);
12027
+ if (!isMaxValid) {
12028
+ console.warn("Warning: The maximum value is set to be lower than the minimum value. The maximum value will be ignored.");
12029
+ }
12020
12030
  var _useState = React.useState(function () {
12021
12031
  return disableAbbreviation ? value : formatNumber(value, thousandSeparator, decimalSeparator, trimDecimals, decimalLength);
12022
12032
  }),
@@ -12035,34 +12045,43 @@
12035
12045
  _useState6 = _slicedToArray(_useState5, 2),
12036
12046
  unformattedValue = _useState6[0],
12037
12047
  setUnformattedValue = _useState6[1];
12048
+ var _useState7 = React.useState(function () {
12049
+ return value;
12050
+ }),
12051
+ _useState8 = _slicedToArray(_useState7, 2),
12052
+ unformattedPrevValue = _useState8[0],
12053
+ setUnformattedPrevValue = _useState8[1];
12038
12054
  React.useEffect(function () {
12039
12055
  if (value !== prevValue) {
12040
12056
  setCurrentValue(disableAbbreviation ? value : formatNumber(value, thousandSeparator, decimalSeparator, trimDecimals, decimalLength));
12041
12057
  setPrevValue(disableAbbreviation ? value : formatNumber(value, thousandSeparator, decimalSeparator, trimDecimals, decimalLength));
12042
12058
  setUnformattedValue(value);
12059
+ setUnformattedPrevValue(value);
12043
12060
  }
12044
12061
  // eslint-disable-next-line react-hooks/exhaustive-deps
12045
12062
  }, [disableAbbreviation, thousandSeparator, decimalSeparator, decimalLength, trimDecimals, value]);
12046
- var _useState7 = React.useState(false),
12047
- _useState8 = _slicedToArray(_useState7, 2),
12048
- focused = _useState8[0],
12049
- setFocused = _useState8[1];
12063
+ var _useState9 = React.useState(false),
12064
+ _useState10 = _slicedToArray(_useState9, 2),
12065
+ focused = _useState10[0],
12066
+ setFocused = _useState10[1];
12050
12067
  var escapeRef = React.useRef(false);
12051
12068
  var handleBlur = React.useCallback(function (e) {
12052
12069
  if (escapeRef.current) {
12053
12070
  setCurrentValue(prevValue);
12054
- setUnformattedValue(prevValue);
12071
+ setUnformattedValue(unformattedPrevValue);
12072
+ if (onChange) onChange(String(unformattedPrevValue));
12055
12073
  } else {
12056
12074
  if (e.target.value.trim().length > 0 && prevValue !== e.target.value) {
12057
12075
  var _value = disableAbbreviation ? currentValue : formatNumber(currentValue, thousandSeparator, decimalSeparator, trimDecimals, decimalLength);
12058
12076
  setPrevValue(_value);
12077
+ setUnformattedPrevValue(currentValue);
12059
12078
  setUnformattedValue(currentValue);
12060
12079
  setCurrentValue(_value);
12061
12080
  typeof onSave === "function" && onSave(e);
12062
12081
  } else {
12063
12082
  if (!allowEmptyValue) {
12064
12083
  setCurrentValue(prevValue);
12065
- setUnformattedValue(prevValue);
12084
+ setUnformattedValue(unformattedPrevValue);
12066
12085
  typeof onCancel === "function" && onCancel(e);
12067
12086
  } else {
12068
12087
  if (typeof onSave === "function" && prevValue !== e.target.value) {
@@ -12074,33 +12093,34 @@
12074
12093
  }
12075
12094
  }
12076
12095
  setFocused(false);
12077
- }, [prevValue, disableAbbreviation, currentValue, thousandSeparator, decimalSeparator, decimalLength, trimDecimals, onSave, allowEmptyValue, onCancel]);
12096
+ }, [prevValue, unformattedPrevValue, onChange, disableAbbreviation, currentValue, thousandSeparator, decimalSeparator, trimDecimals, decimalLength, onSave, allowEmptyValue, onCancel]);
12078
12097
  var updateValue = React.useCallback(function (type) {
12079
- var value = String(unformattedValue);
12080
- var decimalPart = "";
12081
- var increasedValue = 0;
12082
- var nonDecimalPart = value.replaceAll(thousandSeparator, "");
12083
- if (!value) {
12084
- return;
12098
+ var numericValue = parseFloat(String(unformattedValue));
12099
+ if (isNaN(numericValue)) return;
12100
+ var newValue = numericValue;
12101
+ if (type === "increment") {
12102
+ newValue += step;
12103
+ } else if (type === "decrement") {
12104
+ newValue -= step;
12085
12105
  }
12086
- if (value.includes(decimalSeparator)) {
12087
- nonDecimalPart = value.slice(0, value.indexOf(decimalSeparator)).replaceAll(thousandSeparator, "");
12106
+ if (decimalLength !== undefined) {
12107
+ newValue = parseFloat(newValue.toFixed(decimalLength));
12108
+ } else {
12109
+ newValue = parseFloat(newValue.toFixed(2));
12088
12110
  }
12089
- if (value.includes(decimalSeparator)) {
12090
- decimalPart = value.slice(value.indexOf(decimalSeparator));
12111
+ if (min !== undefined && newValue < Number(min)) {
12112
+ newValue = Number(min);
12091
12113
  }
12092
- if (type === "increment") {
12093
- increasedValue = parseFloat(nonDecimalPart) + step;
12094
- } else {
12095
- increasedValue = parseFloat(nonDecimalPart) - step;
12114
+ if (max !== undefined && newValue > Number(max) && isMaxValid) {
12115
+ newValue = Number(max);
12096
12116
  }
12097
- if (value.includes(decimalSeparator)) {
12098
- increasedValue = parseFloat(increasedValue.toFixed(decimalLength));
12117
+ if (decimalLength !== undefined && decimalLength === 0) {
12118
+ newValue = Math.round(newValue);
12099
12119
  }
12100
- var joinedValue = numberWithSeparator(increasedValue, thousandSeparator, decimalSeparator, value.includes(thousandSeparator));
12101
- setUnformattedValue(decimalPart ? joinedValue + decimalPart : joinedValue);
12102
- setCurrentValue(decimalPart ? joinedValue + decimalPart : joinedValue);
12103
- }, [decimalLength, decimalSeparator, step, thousandSeparator, unformattedValue]);
12120
+ setUnformattedValue(newValue);
12121
+ setCurrentValue(newValue);
12122
+ if (onChange) onChange(String(newValue));
12123
+ }, [unformattedValue, decimalLength, min, max, isMaxValid, onChange, step]);
12104
12124
  var handleKeyDown = React.useCallback(function (e) {
12105
12125
  if (e.key === "Enter") {
12106
12126
  e.target.blur();
@@ -12141,6 +12161,18 @@
12141
12161
  e.preventDefault();
12142
12162
  return;
12143
12163
  }
12164
+
12165
+ // Disallow "-" if min is 0 or greater
12166
+ if (e.key === "-" && (min === undefined || Number(min) >= 0)) {
12167
+ e.preventDefault();
12168
+ return;
12169
+ }
12170
+
12171
+ // Disallow decimal separator if decimalLength is 0
12172
+ if (e.key === decimalSeparator && decimalLength === 0) {
12173
+ e.preventDefault();
12174
+ return;
12175
+ }
12144
12176
  var input = e.target;
12145
12177
  var currentValue = input.value;
12146
12178
  var start = input.selectionStart;
@@ -12150,7 +12182,7 @@
12150
12182
  e.preventDefault();
12151
12183
  return;
12152
12184
  }
12153
- }, [decimalLength, decimalSeparator, disableMacros, inputRef, limit, onCancel, onEnterKeyPress, updateValue, validation]);
12185
+ }, [decimalLength, decimalSeparator, disableMacros, inputRef, limit, min, onCancel, onEnterKeyPress, updateValue, validation]);
12154
12186
  var handleChange = React.useCallback(function (e) {
12155
12187
  var inputValue = e.target.value;
12156
12188
  var numericInput = disableMacros ? inputValue : inputValue.replace(/([0-9.]+)([kmbtKMBT])/, function (_, num, unit) {
@@ -12175,23 +12207,16 @@
12175
12207
  (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 || _inputRef$current2.select();
12176
12208
  }
12177
12209
  }, [inputRef]);
12178
- var inputProps = React.useMemo(function () {
12179
- return {
12180
- value: currentValue,
12181
- onBlur: handleBlur,
12182
- onKeyDown: handleKeyDown,
12183
- onChange: handleChange,
12184
- onClick: handleClick,
12185
- onDoubleClick: handleDoubleClick,
12186
- onFocus: handleFocus,
12187
- focused,
12188
- unformattedValue
12189
- };
12190
- }, [currentValue, handleBlur, handleKeyDown, handleChange, handleClick, handleDoubleClick, handleFocus, focused, unformattedValue]);
12191
12210
  return {
12192
- inputProps,
12193
- setCurrentValue,
12194
- setPrevValue
12211
+ value: currentValue,
12212
+ onBlur: handleBlur,
12213
+ onKeyDown: handleKeyDown,
12214
+ onChange: handleChange,
12215
+ onClick: handleClick,
12216
+ onDoubleClick: handleDoubleClick,
12217
+ onFocus: handleFocus,
12218
+ focused,
12219
+ unformattedValue
12195
12220
  };
12196
12221
  };
12197
12222
 
@@ -13633,7 +13658,7 @@
13633
13658
  });
13634
13659
  InputHours.displayName = "InputHours";
13635
13660
 
13636
- var _excluded$L = ["decimalLength", "decimalSeparator", "disableAbbreviation", "disabled", "disableMacros", "invalid", "step", "thousandSeparator", "value", "onCancel", "onSave", "onEnterKeyPress", "allowEmptyValue", "onChange", "onClick", "limit", "placeholder", "trimDecimals"];
13661
+ var _excluded$L = ["decimalLength", "decimalSeparator", "disableAbbreviation", "disabled", "disableMacros", "invalid", "step", "thousandSeparator", "value", "onCancel", "onSave", "onEnterKeyPress", "allowEmptyValue", "onChange", "onClick", "limit", "placeholder", "trimDecimals", "min", "max"];
13637
13662
  var InputNumber = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
13638
13663
  var _ref$decimalLength = _ref.decimalLength,
13639
13664
  decimalLength = _ref$decimalLength === void 0 ? 2 : _ref$decimalLength,
@@ -13660,6 +13685,8 @@
13660
13685
  placeholder = _ref.placeholder,
13661
13686
  _ref$trimDecimals = _ref.trimDecimals,
13662
13687
  trimDecimals = _ref$trimDecimals === void 0 ? true : _ref$trimDecimals,
13688
+ min = _ref.min,
13689
+ max = _ref.max,
13663
13690
  rest = _objectWithoutProperties(_ref, _excluded$L);
13664
13691
  var inputRef = React.useRef(null);
13665
13692
  var handleRef = useForkRef(ref, inputRef);
@@ -13678,16 +13705,17 @@
13678
13705
  onSave,
13679
13706
  allowEmptyValue,
13680
13707
  limit,
13681
- trimDecimals
13708
+ trimDecimals,
13709
+ min,
13710
+ max
13682
13711
  }, inputRef),
13683
- inputProps = _useInputNumber.inputProps;
13684
- var value = inputProps.value,
13685
- onBlur = inputProps.onBlur,
13686
- onKeyDown = inputProps.onKeyDown,
13687
- onChange = inputProps.onChange,
13688
- onClick = inputProps.onClick,
13689
- onDoubleClick = inputProps.onDoubleClick,
13690
- onFocus = inputProps.onFocus;
13712
+ value = _useInputNumber.value,
13713
+ onBlur = _useInputNumber.onBlur,
13714
+ onKeyDown = _useInputNumber.onKeyDown,
13715
+ onChange = _useInputNumber.onChange,
13716
+ onClick = _useInputNumber.onClick,
13717
+ onFocus = _useInputNumber.onFocus,
13718
+ onDoubleClick = _useInputNumber.onDoubleClick;
13691
13719
  return /*#__PURE__*/React__default["default"].createElement(Input, _extends({}, rest, {
13692
13720
  ref: handleRef,
13693
13721
  placeholder: placeholder,
@@ -17895,7 +17923,7 @@
17895
17923
  });
17896
17924
  EditableHours.displayName = "EditableHours";
17897
17925
 
17898
- var _excluded$c = ["decimalLength", "decimalSeparator", "disableAbbreviation", "disabled", "disableMacros", "step", "thousandSeparator", "value", "onSave", "onCancel", "className", "allowEmptyValue", "onEnterKeyPress", "onClick", "onChange", "trimDecimals"];
17926
+ var _excluded$c = ["decimalLength", "decimalSeparator", "disableAbbreviation", "disabled", "disableMacros", "step", "thousandSeparator", "value", "onSave", "onCancel", "className", "allowEmptyValue", "onEnterKeyPress", "onClick", "onChange", "trimDecimals", "min", "max"];
17899
17927
  var EditableCurrency = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
17900
17928
  var _ref$decimalLength = _ref.decimalLength,
17901
17929
  decimalLength = _ref$decimalLength === void 0 ? 2 : _ref$decimalLength,
@@ -17920,6 +17948,8 @@
17920
17948
  externalOnChange = _ref.onChange,
17921
17949
  _ref$trimDecimals = _ref.trimDecimals,
17922
17950
  trimDecimals = _ref$trimDecimals === void 0 ? true : _ref$trimDecimals,
17951
+ min = _ref.min,
17952
+ max = _ref.max,
17923
17953
  rest = _objectWithoutProperties(_ref, _excluded$c);
17924
17954
  var inputRef = React.useRef(null);
17925
17955
  var handleRef = useForkRef(ref, inputRef);
@@ -17937,18 +17967,19 @@
17937
17967
  onChange: externalOnChange,
17938
17968
  onEnterKeyPress: externalEnterKeyPress,
17939
17969
  onClick: externalOnClick,
17940
- trimDecimals
17970
+ trimDecimals,
17971
+ min,
17972
+ max
17941
17973
  }, inputRef),
17942
- inputProps = _useInputNumber.inputProps;
17943
- var value = inputProps.value,
17944
- onBlur = inputProps.onBlur,
17945
- onKeyDown = inputProps.onKeyDown,
17946
- onChange = inputProps.onChange,
17947
- onClick = inputProps.onClick,
17948
- onDoubleClick = inputProps.onDoubleClick,
17949
- onFocus = inputProps.onFocus,
17950
- focused = inputProps.focused,
17951
- unformattedValue = inputProps.unformattedValue;
17974
+ value = _useInputNumber.value,
17975
+ onBlur = _useInputNumber.onBlur,
17976
+ onKeyDown = _useInputNumber.onKeyDown,
17977
+ onChange = _useInputNumber.onChange,
17978
+ onClick = _useInputNumber.onClick,
17979
+ onDoubleClick = _useInputNumber.onDoubleClick,
17980
+ onFocus = _useInputNumber.onFocus,
17981
+ focused = _useInputNumber.focused,
17982
+ unformattedValue = _useInputNumber.unformattedValue;
17952
17983
  var formattedValue = React.useMemo(function () {
17953
17984
  return focused ? value : numberWithSeparator(value !== null && value !== void 0 ? value : "", thousandSeparator, decimalSeparator);
17954
17985
  }, [focused, value, thousandSeparator, decimalSeparator]);