@activecollab/components 1.0.403 → 1.0.405

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 (58) hide show
  1. package/dist/cjs/components/EditableCurrency/EditableCurrency.js +76 -0
  2. package/dist/cjs/components/EditableCurrency/EditableCurrency.js.map +1 -0
  3. package/dist/cjs/components/EditableCurrency/index.js +17 -0
  4. package/dist/cjs/components/EditableCurrency/index.js.map +1 -0
  5. package/dist/cjs/components/Input/InputCurrency.js.map +1 -1
  6. package/dist/cjs/components/Input/InputHours.js +2 -1
  7. package/dist/cjs/components/Input/InputHours.js.map +1 -1
  8. package/dist/cjs/components/Input/InputNumber.js +27 -131
  9. package/dist/cjs/components/Input/InputNumber.js.map +1 -1
  10. package/dist/cjs/hooks/index.js +11 -0
  11. package/dist/cjs/hooks/index.js.map +1 -1
  12. package/dist/cjs/hooks/useInputNumber.js +147 -0
  13. package/dist/cjs/hooks/useInputNumber.js.map +1 -0
  14. package/dist/cjs/utils/currencyUtils.js +18 -15
  15. package/dist/cjs/utils/currencyUtils.js.map +1 -1
  16. package/dist/cjs/utils/currencyUtils.test.js +2 -2
  17. package/dist/cjs/utils/currencyUtils.test.js.map +1 -1
  18. package/dist/cjs/utils/validation.js +2 -2
  19. package/dist/cjs/utils/validation.js.map +1 -1
  20. package/dist/esm/components/EditableCurrency/EditableCurrency.d.ts +4 -0
  21. package/dist/esm/components/EditableCurrency/EditableCurrency.d.ts.map +1 -0
  22. package/dist/esm/components/EditableCurrency/EditableCurrency.js +63 -0
  23. package/dist/esm/components/EditableCurrency/EditableCurrency.js.map +1 -0
  24. package/dist/esm/components/EditableCurrency/index.d.ts +2 -0
  25. package/dist/esm/components/EditableCurrency/index.d.ts.map +1 -0
  26. package/dist/esm/components/EditableCurrency/index.js +2 -0
  27. package/dist/esm/components/EditableCurrency/index.js.map +1 -0
  28. package/dist/esm/components/Input/InputCurrency.d.ts +1 -1
  29. package/dist/esm/components/Input/InputCurrency.d.ts.map +1 -1
  30. package/dist/esm/components/Input/InputCurrency.js.map +1 -1
  31. package/dist/esm/components/Input/InputHours.d.ts.map +1 -1
  32. package/dist/esm/components/Input/InputHours.js +2 -1
  33. package/dist/esm/components/Input/InputHours.js.map +1 -1
  34. package/dist/esm/components/Input/InputNumber.d.ts +1 -10
  35. package/dist/esm/components/Input/InputNumber.d.ts.map +1 -1
  36. package/dist/esm/components/Input/InputNumber.js +28 -124
  37. package/dist/esm/components/Input/InputNumber.js.map +1 -1
  38. package/dist/esm/hooks/index.d.ts +1 -0
  39. package/dist/esm/hooks/index.d.ts.map +1 -1
  40. package/dist/esm/hooks/index.js +1 -0
  41. package/dist/esm/hooks/index.js.map +1 -1
  42. package/dist/esm/hooks/useInputNumber.d.ts +22 -0
  43. package/dist/esm/hooks/useInputNumber.d.ts.map +1 -0
  44. package/dist/esm/hooks/useInputNumber.js +131 -0
  45. package/dist/esm/hooks/useInputNumber.js.map +1 -0
  46. package/dist/esm/utils/currencyUtils.d.ts +8 -2
  47. package/dist/esm/utils/currencyUtils.d.ts.map +1 -1
  48. package/dist/esm/utils/currencyUtils.js +16 -14
  49. package/dist/esm/utils/currencyUtils.js.map +1 -1
  50. package/dist/esm/utils/currencyUtils.test.js +2 -2
  51. package/dist/esm/utils/currencyUtils.test.js.map +1 -1
  52. package/dist/esm/utils/validation.js +2 -2
  53. package/dist/esm/utils/validation.js.map +1 -1
  54. package/dist/index.js +171 -3
  55. package/dist/index.js.map +1 -1
  56. package/dist/index.min.js +1 -1
  57. package/dist/index.min.js.map +1 -1
  58. package/package.json +1 -1
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.EditableCurrency = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _hooks = require("../../hooks");
10
+ var _EditableContent = require("../EditableContent");
11
+ var _Tooltip = require("../Tooltip");
12
+ var _utils = require("../../utils");
13
+ var _excluded = ["decimalLength", "decimalSeparator", "disableAbbreviation", "disabled", "disableMacros", "onValueChange", "step", "thousandSeparator", "value", "className"];
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
17
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
18
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
19
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
20
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
21
+ var EditableCurrency = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
22
+ var _ref$decimalLength = _ref.decimalLength,
23
+ decimalLength = _ref$decimalLength === void 0 ? 2 : _ref$decimalLength,
24
+ _ref$decimalSeparator = _ref.decimalSeparator,
25
+ decimalSeparator = _ref$decimalSeparator === void 0 ? "." : _ref$decimalSeparator,
26
+ _ref$disableAbbreviat = _ref.disableAbbreviation,
27
+ disableAbbreviation = _ref$disableAbbreviat === void 0 ? false : _ref$disableAbbreviat,
28
+ disabled = _ref.disabled,
29
+ _ref$disableMacros = _ref.disableMacros,
30
+ disableMacros = _ref$disableMacros === void 0 ? false : _ref$disableMacros,
31
+ onValueChange = _ref.onValueChange,
32
+ _ref$step = _ref.step,
33
+ step = _ref$step === void 0 ? 1 : _ref$step,
34
+ _ref$thousandSeparato = _ref.thousandSeparator,
35
+ thousandSeparator = _ref$thousandSeparato === void 0 ? "," : _ref$thousandSeparato,
36
+ value = _ref.value,
37
+ className = _ref.className,
38
+ rest = _objectWithoutProperties(_ref, _excluded);
39
+ var inputRef = (0, _react.useRef)(null);
40
+ var handleRef = (0, _utils.useForkRef)(ref, inputRef);
41
+ var _useInputNumber = (0, _hooks.useInputNumber)({
42
+ decimalLength: decimalLength,
43
+ decimalSeparator: decimalSeparator,
44
+ disableAbbreviation: disableAbbreviation,
45
+ disableMacros: disableMacros,
46
+ onValueChange: onValueChange,
47
+ step: step,
48
+ thousandSeparator: thousandSeparator,
49
+ value: value
50
+ }, inputRef),
51
+ focused = _useInputNumber.focused,
52
+ rootValue = _useInputNumber.rootValue,
53
+ formattedValue = _useInputNumber.formattedValue,
54
+ handleBlur = _useInputNumber.handleBlur,
55
+ handleChange = _useInputNumber.handleChange,
56
+ handleFocus = _useInputNumber.handleFocus,
57
+ handleKeyDown = _useInputNumber.handleKeyDown;
58
+ return /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
59
+ title: rootValue,
60
+ disable: focused
61
+ }, /*#__PURE__*/_react.default.createElement(_EditableContent.EditableContent, {
62
+ disabled: disabled,
63
+ ref: handleRef,
64
+ className: className,
65
+ inputProps: _objectSpread({
66
+ value: formattedValue,
67
+ onBlur: handleBlur,
68
+ onChange: handleChange,
69
+ onFocus: handleFocus,
70
+ onKeyDown: handleKeyDown
71
+ }, rest)
72
+ }));
73
+ });
74
+ exports.EditableCurrency = EditableCurrency;
75
+ EditableCurrency.displayName = "EditableCurrency";
76
+ //# sourceMappingURL=EditableCurrency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditableCurrency.js","names":["EditableCurrency","forwardRef","ref","decimalLength","decimalSeparator","disableAbbreviation","disabled","disableMacros","onValueChange","step","thousandSeparator","value","className","rest","inputRef","useRef","handleRef","useForkRef","useInputNumber","focused","rootValue","formattedValue","handleBlur","handleChange","handleFocus","handleKeyDown","onBlur","onChange","onFocus","onKeyDown","displayName"],"sources":["../../../../src/components/EditableCurrency/EditableCurrency.tsx"],"sourcesContent":["import React, { forwardRef, useRef } from \"react\";\nimport { useInputNumber } from \"../../hooks\";\nimport { EditableContent } from \"../EditableContent\";\nimport { Tooltip } from \"../Tooltip\";\nimport { useForkRef } from \"../../utils\";\n\nimport type { InputNumberProps } from \"../../hooks\";\n\nexport const EditableCurrency = forwardRef<\n HTMLInputElement,\n Omit<InputNumberProps, \"size\">\n>(\n (\n {\n decimalLength = 2,\n decimalSeparator = \".\",\n disableAbbreviation = false,\n disabled,\n disableMacros = false,\n onValueChange,\n step = 1,\n thousandSeparator = \",\",\n value,\n className,\n ...rest\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const handleRef = useForkRef(ref, inputRef);\n\n const {\n focused,\n rootValue,\n formattedValue,\n handleBlur,\n handleChange,\n handleFocus,\n handleKeyDown,\n } = useInputNumber(\n {\n decimalLength,\n decimalSeparator,\n disableAbbreviation,\n disableMacros,\n onValueChange,\n step,\n thousandSeparator,\n value,\n },\n inputRef\n );\n\n return (\n <Tooltip title={rootValue as string} disable={focused}>\n <EditableContent\n disabled={disabled}\n ref={handleRef}\n className={className}\n inputProps={{\n value: formattedValue,\n onBlur: handleBlur,\n onChange: handleChange,\n onFocus: handleFocus,\n onKeyDown: handleKeyDown,\n ...rest,\n }}\n />\n </Tooltip>\n );\n }\n);\n\nEditableCurrency.displayName = \"EditableCurrency\";\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AAAyC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIlC,IAAMA,gBAAgB,gBAAG,IAAAC,iBAAU,EAIxC,gBAcEC,GAAG,EACA;EAAA,8BAbDC,aAAa;IAAbA,aAAa,mCAAG,CAAC;IAAA,6BACjBC,gBAAgB;IAAhBA,gBAAgB,sCAAG,GAAG;IAAA,6BACtBC,mBAAmB;IAAnBA,mBAAmB,sCAAG,KAAK;IAC3BC,QAAQ,QAARA,QAAQ;IAAA,0BACRC,aAAa;IAAbA,aAAa,mCAAG,KAAK;IACrBC,aAAa,QAAbA,aAAa;IAAA,iBACbC,IAAI;IAAJA,IAAI,0BAAG,CAAC;IAAA,6BACRC,iBAAiB;IAAjBA,iBAAiB,sCAAG,GAAG;IACvBC,KAAK,QAALA,KAAK;IACLC,SAAS,QAATA,SAAS;IACNC,IAAI;EAIT,IAAMC,QAAQ,GAAG,IAAAC,aAAM,EAA0B,IAAI,CAAC;EACtD,IAAMC,SAAS,GAAG,IAAAC,iBAAU,EAACf,GAAG,EAAEY,QAAQ,CAAC;EAE3C,sBAQI,IAAAI,qBAAc,EAChB;MACEf,aAAa,EAAbA,aAAa;MACbC,gBAAgB,EAAhBA,gBAAgB;MAChBC,mBAAmB,EAAnBA,mBAAmB;MACnBE,aAAa,EAAbA,aAAa;MACbC,aAAa,EAAbA,aAAa;MACbC,IAAI,EAAJA,IAAI;MACJC,iBAAiB,EAAjBA,iBAAiB;MACjBC,KAAK,EAALA;IACF,CAAC,EACDG,QAAQ,CACT;IAnBCK,OAAO,mBAAPA,OAAO;IACPC,SAAS,mBAATA,SAAS;IACTC,cAAc,mBAAdA,cAAc;IACdC,UAAU,mBAAVA,UAAU;IACVC,YAAY,mBAAZA,YAAY;IACZC,WAAW,mBAAXA,WAAW;IACXC,aAAa,mBAAbA,aAAa;EAef,oBACE,6BAAC,gBAAO;IAAC,KAAK,EAAEL,SAAoB;IAAC,OAAO,EAAED;EAAQ,gBACpD,6BAAC,gCAAe;IACd,QAAQ,EAAEb,QAAS;IACnB,GAAG,EAAEU,SAAU;IACf,SAAS,EAAEJ,SAAU;IACrB,UAAU;MACRD,KAAK,EAAEU,cAAc;MACrBK,MAAM,EAAEJ,UAAU;MAClBK,QAAQ,EAAEJ,YAAY;MACtBK,OAAO,EAAEJ,WAAW;MACpBK,SAAS,EAAEJ;IAAa,GACrBZ,IAAI;EACP,EACF,CACM;AAEd,CAAC,CACF;AAAC;AAEFb,gBAAgB,CAAC8B,WAAW,GAAG,kBAAkB"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _EditableCurrency = require("./EditableCurrency");
7
+ Object.keys(_EditableCurrency).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _EditableCurrency[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function get() {
13
+ return _EditableCurrency[key];
14
+ }
15
+ });
16
+ });
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/EditableCurrency/index.ts"],"sourcesContent":["export * from \"./EditableCurrency\";\n"],"mappings":";;;;;AAAA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"InputCurrency.js","names":["InputCurrency","forwardRef","ref","rest","displayName"],"sources":["../../../../src/components/Input/InputCurrency.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\nimport { InputNumber } from \"./InputNumber\";\nimport type { InputNumberProps } from \"./InputNumber\";\n\nexport type InputCurrencyProps = InputNumberProps;\n\nexport const InputCurrency = forwardRef<HTMLInputElement, InputCurrencyProps>(\n ({ ...rest }, ref) => {\n return <InputNumber ref={ref} {...rest} />;\n }\n);\n\nInputCurrency.displayName = \"InputCurrency\";\n"],"mappings":";;;;;;;AAAA;AACA;AAA4C;AAAA;AAAA;AAKrC,IAAMA,aAAa,gBAAG,IAAAC,iBAAU,EACrC,gBAAcC,GAAG,EAAK;EAAA,IAAhBC,IAAI;EACR,oBAAO,6BAAC,wBAAW;IAAC,GAAG,EAAED;EAAI,GAAKC,IAAI,EAAI;AAC5C,CAAC,CACF;AAAC;AAEFH,aAAa,CAACI,WAAW,GAAG,eAAe"}
1
+ {"version":3,"file":"InputCurrency.js","names":["InputCurrency","forwardRef","ref","rest","displayName"],"sources":["../../../../src/components/Input/InputCurrency.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\nimport { InputNumber } from \"./InputNumber\";\nimport type { InputNumberProps } from \"../../hooks\";\n\nexport type InputCurrencyProps = InputNumberProps;\n\nexport const InputCurrency = forwardRef<HTMLInputElement, InputCurrencyProps>(\n ({ ...rest }, ref) => {\n return <InputNumber ref={ref} {...rest} />;\n }\n);\n\nInputCurrency.displayName = \"InputCurrency\";\n"],"mappings":";;;;;;;AAAA;AACA;AAA4C;AAAA;AAAA;AAKrC,IAAMA,aAAa,gBAAG,IAAAC,iBAAU,EACrC,gBAAcC,GAAG,EAAK;EAAA,IAAhBC,IAAI;EACR,oBAAO,6BAAC,wBAAW;IAAC,GAAG,EAAED;EAAI,GAAKC,IAAI,EAAI;AAC5C,CAAC,CACF;AAAC;AAEFH,aAAa,CAACI,WAAW,GAAG,eAAe"}
@@ -69,7 +69,8 @@ var InputHours = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
69
69
  onChange: onChange,
70
70
  onClick: onClick,
71
71
  onDoubleClick: onDoubleClick,
72
- ref: handleRef
72
+ ref: handleRef,
73
+ autoComplete: "off"
73
74
  }));
74
75
  });
75
76
  exports.InputHours = InputHours;
@@ -1 +1 @@
1
- {"version":3,"file":"InputHours.js","names":["InputHours","React","forwardRef","ref","defaultValue","value","onCancel","onSave","externalEnterKeyPress","onEnterKeyPress","allowEmptyValue","withLeadingZero","validation","validateTimeInput","incrementOnlySelected","minuteIncrement","className","externalOnChange","onChange","externalOnClick","onClick","align","rest","inputRef","useRef","handleRef","useForkRef","useInputHours","inputProps","onBlur","onKeyDown","onDoubleClick","displayName"],"sources":["../../../../src/components/Input/InputHours.tsx"],"sourcesContent":["import React, { useRef } from \"react\";\nimport useForkRef from \"../../utils/useForkRef\";\nimport { validateTimeInput } from \"../../utils\";\nimport { Input } from \"./Input\";\nimport type { InputProps } from \"./Input\";\nimport { IInputHours, useInputHours } from \"../../hooks/useInputHours\";\n\nexport interface InputHoursProps\n extends Omit<InputProps, \"value\" | \"onChange\">,\n IInputHours {}\n\nexport const InputHours = React.forwardRef<HTMLInputElement, InputHoursProps>(\n (\n {\n value: defaultValue,\n onCancel,\n onSave,\n onEnterKeyPress: externalEnterKeyPress,\n allowEmptyValue,\n withLeadingZero = true,\n validation = validateTimeInput,\n incrementOnlySelected = false,\n minuteIncrement = 1,\n className,\n onChange: externalOnChange,\n onClick: externalOnClick,\n align = \"center\",\n ...rest\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const handleRef = useForkRef(ref, inputRef);\n\n const { inputProps } = useInputHours(\n {\n value: defaultValue,\n withLeadingZero,\n onSave,\n validation,\n allowEmptyValue,\n onCancel,\n minuteIncrement,\n incrementOnlySelected,\n onEnterKeyPress: externalEnterKeyPress,\n onChange: externalOnChange,\n onClick: externalOnClick,\n },\n inputRef\n );\n\n const { value, onBlur, onKeyDown, onChange, onClick, onDoubleClick } =\n inputProps;\n\n return (\n <Input\n {...rest}\n align={align}\n className={className}\n placeholder={withLeadingZero ? \"00:00\" : \"0:00\"}\n value={value}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n onChange={onChange}\n onClick={onClick}\n onDoubleClick={onDoubleClick}\n ref={handleRef}\n />\n );\n }\n);\n\nInputHours.displayName = \"InputHours\";\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AAEA;AAAuE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMhE,IAAMA,UAAU,gBAAGC,cAAK,CAACC,UAAU,CACxC,gBAiBEC,GAAG,EACA;EAAA,IAhBMC,YAAY,QAAnBC,KAAK;IACLC,QAAQ,QAARA,QAAQ;IACRC,MAAM,QAANA,MAAM;IACWC,qBAAqB,QAAtCC,eAAe;IACfC,eAAe,QAAfA,eAAe;IAAA,4BACfC,eAAe;IAAfA,eAAe,qCAAG,IAAI;IAAA,uBACtBC,UAAU;IAAVA,UAAU,gCAAGC,wBAAiB;IAAA,6BAC9BC,qBAAqB;IAArBA,qBAAqB,sCAAG,KAAK;IAAA,4BAC7BC,eAAe;IAAfA,eAAe,qCAAG,CAAC;IACnBC,SAAS,QAATA,SAAS;IACCC,gBAAgB,QAA1BC,QAAQ;IACCC,eAAe,QAAxBC,OAAO;IAAA,kBACPC,KAAK;IAALA,KAAK,2BAAG,QAAQ;IACbC,IAAI;EAIT,IAAMC,QAAQ,GAAG,IAAAC,aAAM,EAAmB,IAAI,CAAC;EAC/C,IAAMC,SAAS,GAAG,IAAAC,mBAAU,EAACvB,GAAG,EAAEoB,QAAQ,CAAC;EAE3C,qBAAuB,IAAAI,6BAAa,EAClC;MACEtB,KAAK,EAAED,YAAY;MACnBO,eAAe,EAAfA,eAAe;MACfJ,MAAM,EAANA,MAAM;MACNK,UAAU,EAAVA,UAAU;MACVF,eAAe,EAAfA,eAAe;MACfJ,QAAQ,EAARA,QAAQ;MACRS,eAAe,EAAfA,eAAe;MACfD,qBAAqB,EAArBA,qBAAqB;MACrBL,eAAe,EAAED,qBAAqB;MACtCU,QAAQ,EAAED,gBAAgB;MAC1BG,OAAO,EAAED;IACX,CAAC,EACDI,QAAQ,CACT;IAfOK,UAAU,kBAAVA,UAAU;EAiBlB,IAAQvB,KAAK,GACXuB,UAAU,CADJvB,KAAK;IAAEwB,MAAM,GACnBD,UAAU,CADGC,MAAM;IAAEC,SAAS,GAC9BF,UAAU,CADWE,SAAS;IAAEZ,QAAQ,GACxCU,UAAU,CADsBV,QAAQ;IAAEE,OAAO,GACjDQ,UAAU,CADgCR,OAAO;IAAEW,aAAa,GAChEH,UAAU,CADyCG,aAAa;EAGlE,oBACE,6BAAC,YAAK,eACAT,IAAI;IACR,KAAK,EAAED,KAAM;IACb,SAAS,EAAEL,SAAU;IACrB,WAAW,EAAEL,eAAe,GAAG,OAAO,GAAG,MAAO;IAChD,KAAK,EAAEN,KAAM;IACb,MAAM,EAAEwB,MAAO;IACf,SAAS,EAAEC,SAAU;IACrB,QAAQ,EAAEZ,QAAS;IACnB,OAAO,EAAEE,OAAQ;IACjB,aAAa,EAAEW,aAAc;IAC7B,GAAG,EAAEN;EAAU,GACf;AAEN,CAAC,CACF;AAAC;AAEFzB,UAAU,CAACgC,WAAW,GAAG,YAAY"}
1
+ {"version":3,"file":"InputHours.js","names":["InputHours","React","forwardRef","ref","defaultValue","value","onCancel","onSave","externalEnterKeyPress","onEnterKeyPress","allowEmptyValue","withLeadingZero","validation","validateTimeInput","incrementOnlySelected","minuteIncrement","className","externalOnChange","onChange","externalOnClick","onClick","align","rest","inputRef","useRef","handleRef","useForkRef","useInputHours","inputProps","onBlur","onKeyDown","onDoubleClick","displayName"],"sources":["../../../../src/components/Input/InputHours.tsx"],"sourcesContent":["import React, { useRef } from \"react\";\nimport useForkRef from \"../../utils/useForkRef\";\nimport { validateTimeInput } from \"../../utils\";\nimport { Input } from \"./Input\";\nimport type { InputProps } from \"./Input\";\nimport { IInputHours, useInputHours } from \"../../hooks/useInputHours\";\n\nexport interface InputHoursProps\n extends Omit<InputProps, \"value\" | \"onChange\">,\n IInputHours {}\n\nexport const InputHours = React.forwardRef<HTMLInputElement, InputHoursProps>(\n (\n {\n value: defaultValue,\n onCancel,\n onSave,\n onEnterKeyPress: externalEnterKeyPress,\n allowEmptyValue,\n withLeadingZero = true,\n validation = validateTimeInput,\n incrementOnlySelected = false,\n minuteIncrement = 1,\n className,\n onChange: externalOnChange,\n onClick: externalOnClick,\n align = \"center\",\n ...rest\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const handleRef = useForkRef(ref, inputRef);\n\n const { inputProps } = useInputHours(\n {\n value: defaultValue,\n withLeadingZero,\n onSave,\n validation,\n allowEmptyValue,\n onCancel,\n minuteIncrement,\n incrementOnlySelected,\n onEnterKeyPress: externalEnterKeyPress,\n onChange: externalOnChange,\n onClick: externalOnClick,\n },\n inputRef\n );\n\n const { value, onBlur, onKeyDown, onChange, onClick, onDoubleClick } =\n inputProps;\n\n return (\n <Input\n {...rest}\n align={align}\n className={className}\n placeholder={withLeadingZero ? \"00:00\" : \"0:00\"}\n value={value}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n onChange={onChange}\n onClick={onClick}\n onDoubleClick={onDoubleClick}\n ref={handleRef}\n autoComplete=\"off\"\n />\n );\n }\n);\n\nInputHours.displayName = \"InputHours\";\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AAEA;AAAuE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMhE,IAAMA,UAAU,gBAAGC,cAAK,CAACC,UAAU,CACxC,gBAiBEC,GAAG,EACA;EAAA,IAhBMC,YAAY,QAAnBC,KAAK;IACLC,QAAQ,QAARA,QAAQ;IACRC,MAAM,QAANA,MAAM;IACWC,qBAAqB,QAAtCC,eAAe;IACfC,eAAe,QAAfA,eAAe;IAAA,4BACfC,eAAe;IAAfA,eAAe,qCAAG,IAAI;IAAA,uBACtBC,UAAU;IAAVA,UAAU,gCAAGC,wBAAiB;IAAA,6BAC9BC,qBAAqB;IAArBA,qBAAqB,sCAAG,KAAK;IAAA,4BAC7BC,eAAe;IAAfA,eAAe,qCAAG,CAAC;IACnBC,SAAS,QAATA,SAAS;IACCC,gBAAgB,QAA1BC,QAAQ;IACCC,eAAe,QAAxBC,OAAO;IAAA,kBACPC,KAAK;IAALA,KAAK,2BAAG,QAAQ;IACbC,IAAI;EAIT,IAAMC,QAAQ,GAAG,IAAAC,aAAM,EAAmB,IAAI,CAAC;EAC/C,IAAMC,SAAS,GAAG,IAAAC,mBAAU,EAACvB,GAAG,EAAEoB,QAAQ,CAAC;EAE3C,qBAAuB,IAAAI,6BAAa,EAClC;MACEtB,KAAK,EAAED,YAAY;MACnBO,eAAe,EAAfA,eAAe;MACfJ,MAAM,EAANA,MAAM;MACNK,UAAU,EAAVA,UAAU;MACVF,eAAe,EAAfA,eAAe;MACfJ,QAAQ,EAARA,QAAQ;MACRS,eAAe,EAAfA,eAAe;MACfD,qBAAqB,EAArBA,qBAAqB;MACrBL,eAAe,EAAED,qBAAqB;MACtCU,QAAQ,EAAED,gBAAgB;MAC1BG,OAAO,EAAED;IACX,CAAC,EACDI,QAAQ,CACT;IAfOK,UAAU,kBAAVA,UAAU;EAiBlB,IAAQvB,KAAK,GACXuB,UAAU,CADJvB,KAAK;IAAEwB,MAAM,GACnBD,UAAU,CADGC,MAAM;IAAEC,SAAS,GAC9BF,UAAU,CADWE,SAAS;IAAEZ,QAAQ,GACxCU,UAAU,CADsBV,QAAQ;IAAEE,OAAO,GACjDQ,UAAU,CADgCR,OAAO;IAAEW,aAAa,GAChEH,UAAU,CADyCG,aAAa;EAGlE,oBACE,6BAAC,YAAK,eACAT,IAAI;IACR,KAAK,EAAED,KAAM;IACb,SAAS,EAAEL,SAAU;IACrB,WAAW,EAAEL,eAAe,GAAG,OAAO,GAAG,MAAO;IAChD,KAAK,EAAEN,KAAM;IACb,MAAM,EAAEwB,MAAO;IACf,SAAS,EAAEC,SAAU;IACrB,QAAQ,EAAEZ,QAAS;IACnB,OAAO,EAAEE,OAAQ;IACjB,aAAa,EAAEW,aAAc;IAC7B,GAAG,EAAEN,SAAU;IACf,YAAY,EAAC;EAAK,GAClB;AAEN,CAAC,CACF;AAAC;AAEFzB,UAAU,CAACgC,WAAW,GAAG,YAAY"}
@@ -6,154 +6,50 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.InputNumber = void 0;
8
8
  var _react = _interopRequireWildcard(require("react"));
9
- var _Input = require("./Input");
10
- var _currencyUtils = require("../../utils/currencyUtils");
9
+ var _hooks = require("../../hooks");
11
10
  var _utils = require("../../utils");
12
- var _excluded = ["disableMacros", "disableAbbreviation", "decimalLength", "thousandSeparator", "decimalSeparator", "value", "onBlur", "onKeyDown", "onFocus", "onValueChange", "disabled", "invalid", "step"];
11
+ var _Input = require("./Input");
12
+ var _excluded = ["decimalLength", "decimalSeparator", "disableAbbreviation", "disabled", "disableMacros", "invalid", "onValueChange", "step", "thousandSeparator", "value"];
13
13
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
14
14
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
15
15
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
16
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
17
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
18
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
19
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
20
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
21
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
22
16
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
23
17
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
24
- var multiplier = {
25
- k: 1000,
26
- m: 1000000,
27
- b: 1000000000,
28
- t: 1000000000000
29
- };
30
18
  var InputNumber = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
31
- var _ref$disableMacros = _ref.disableMacros,
32
- disableMacros = _ref$disableMacros === void 0 ? false : _ref$disableMacros,
33
- _ref$disableAbbreviat = _ref.disableAbbreviation,
34
- disableAbbreviation = _ref$disableAbbreviat === void 0 ? false : _ref$disableAbbreviat,
35
- _ref$decimalLength = _ref.decimalLength,
19
+ var _ref$decimalLength = _ref.decimalLength,
36
20
  decimalLength = _ref$decimalLength === void 0 ? 2 : _ref$decimalLength,
37
- _ref$thousandSeparato = _ref.thousandSeparator,
38
- thousandSeparator = _ref$thousandSeparato === void 0 ? "," : _ref$thousandSeparato,
39
21
  _ref$decimalSeparator = _ref.decimalSeparator,
40
22
  decimalSeparator = _ref$decimalSeparator === void 0 ? "." : _ref$decimalSeparator,
41
- value = _ref.value,
42
- onBlur = _ref.onBlur,
43
- onKeyDown = _ref.onKeyDown,
44
- onFocus = _ref.onFocus,
45
- onValueChange = _ref.onValueChange,
23
+ _ref$disableAbbreviat = _ref.disableAbbreviation,
24
+ disableAbbreviation = _ref$disableAbbreviat === void 0 ? false : _ref$disableAbbreviat,
46
25
  disabled = _ref.disabled,
26
+ _ref$disableMacros = _ref.disableMacros,
27
+ disableMacros = _ref$disableMacros === void 0 ? false : _ref$disableMacros,
47
28
  invalid = _ref.invalid,
29
+ onValueChange = _ref.onValueChange,
48
30
  _ref$step = _ref.step,
49
31
  step = _ref$step === void 0 ? 1 : _ref$step,
32
+ _ref$thousandSeparato = _ref.thousandSeparator,
33
+ thousandSeparator = _ref$thousandSeparato === void 0 ? "," : _ref$thousandSeparato,
34
+ value = _ref.value,
50
35
  rest = _objectWithoutProperties(_ref, _excluded);
51
- var _useState = (0, _react.useState)(value),
52
- _useState2 = _slicedToArray(_useState, 2),
53
- formattedValue = _useState2[0],
54
- setFormatted = _useState2[1];
55
- var _useState3 = (0, _react.useState)(value),
56
- _useState4 = _slicedToArray(_useState3, 2),
57
- rootValue = _useState4[0],
58
- setRootValue = _useState4[1];
59
36
  var inputRef = (0, _react.useRef)(null);
60
37
  var handleRef = (0, _utils.useForkRef)(ref, inputRef);
61
- var handleInputBlur = function handleInputBlur() {
62
- if (inputRef && inputRef.current) {
63
- inputRef.current.blur();
64
- }
65
- };
66
- var handleSelect = function handleSelect() {
67
- if (inputRef && inputRef.current) {
68
- inputRef.current.select();
69
- }
70
- };
71
- var handleChange = function handleChange(e) {
72
- var inputValue = e.target.value;
73
- var isValidInput = false;
74
- if (inputValue.startsWith("00")) {
75
- return;
76
- }
77
- var numericInput = disableMacros ? inputValue : inputValue.replace(/([0-9.]+)([kmbtKMBT])/, function (_, num, unit) {
78
- return (parseFloat(num) * multiplier[unit.toLowerCase()]).toString();
79
- });
80
- var regexString = "^(\\d{0,9}(?:[".concat(thousandSeparator, "]?\\d{0,3})*(?:\\").concat(decimalSeparator, "\\d{0,").concat(decimalLength, "})?)?$");
81
- if (thousandSeparator === ",") {
82
- isValidInput = new RegExp(regexString).test(numericInput);
83
- }
84
- if (thousandSeparator === ".") {
85
- isValidInput = new RegExp(regexString).test(numericInput);
86
- }
87
- if (!isValidInput) {
88
- return;
89
- }
90
- setFormatted(numericInput);
91
- onValueChange && onValueChange(numericInput);
92
- };
93
- var handleKeyDown = function handleKeyDown(e) {
94
- var allowedChars = /[0-9km.,b]/i;
95
- var key = e.key;
96
- var _step = parseFloat(String(step));
97
- if (key === "Escape") {
98
- handleInputBlur();
99
- }
100
- if (key === "ArrowUp") {
101
- e.preventDefault();
102
- updateValue("increment", _step);
103
- }
104
- if (key === "ArrowDown") {
105
- e.preventDefault();
106
- updateValue("decrement", _step);
107
- }
108
- if ((e.metaKey || e.ctrlKey) && e.key === "a") {
109
- handleSelect();
110
- }
111
- if (!allowedChars.test(key)) {
112
- e.preventDefault();
113
- }
114
- if (decimalLength === 0 && e.key === decimalSeparator) {
115
- e.preventDefault();
116
- }
117
- onKeyDown && onKeyDown(e);
118
- };
119
- var handleBlur = function handleBlur(e) {
120
- if (disableAbbreviation) {
121
- setFormatted(formattedValue);
122
- } else {
123
- setFormatted((0, _currencyUtils.formatCurrency)(formattedValue, thousandSeparator));
124
- }
125
- setRootValue(formattedValue);
126
- onBlur && onBlur(e);
127
- };
128
- var handleFocus = function handleFocus(e) {
129
- setFormatted(rootValue);
130
- onFocus && onFocus(e);
131
- };
132
- var updateValue = function updateValue(type, step) {
133
- var value = String(formattedValue);
134
- var decimalPart = "";
135
- var increasedValue = 0;
136
- var nonDecimalPart = value.replaceAll(thousandSeparator, "");
137
- if (!value) {
138
- return;
139
- }
140
- if (value.includes(decimalSeparator)) {
141
- nonDecimalPart = value.slice(0, value.indexOf(decimalSeparator)).replaceAll(thousandSeparator, "");
142
- }
143
- if (value.includes(decimalSeparator)) {
144
- decimalPart = value.slice(value.indexOf(decimalSeparator));
145
- }
146
- if (type === "increment") {
147
- increasedValue = parseFloat(nonDecimalPart) + step;
148
- } else {
149
- increasedValue = parseFloat(nonDecimalPart) - step;
150
- }
151
- if (value.includes(decimalSeparator)) {
152
- increasedValue = parseFloat(increasedValue.toFixed(decimalLength));
153
- }
154
- var joinedValue = (0, _currencyUtils.numberWithSeparator)(increasedValue, thousandSeparator, value.includes(thousandSeparator));
155
- setFormatted(decimalPart ? joinedValue + decimalPart : joinedValue);
156
- };
38
+ var _useInputNumber = (0, _hooks.useInputNumber)({
39
+ decimalLength: decimalLength,
40
+ decimalSeparator: decimalSeparator,
41
+ disableAbbreviation: disableAbbreviation,
42
+ disableMacros: disableMacros,
43
+ onValueChange: onValueChange,
44
+ step: step,
45
+ thousandSeparator: thousandSeparator,
46
+ value: value
47
+ }, inputRef),
48
+ formattedValue = _useInputNumber.formattedValue,
49
+ handleBlur = _useInputNumber.handleBlur,
50
+ handleChange = _useInputNumber.handleChange,
51
+ handleFocus = _useInputNumber.handleFocus,
52
+ handleKeyDown = _useInputNumber.handleKeyDown;
157
53
  return /*#__PURE__*/_react.default.createElement(_Input.Input, _extends({
158
54
  ref: handleRef,
159
55
  placeholder: "5".concat(thousandSeparator, "000").concat(decimalSeparator, "00"),
@@ -1 +1 @@
1
- {"version":3,"file":"InputNumber.js","names":["multiplier","k","m","b","t","InputNumber","forwardRef","ref","disableMacros","disableAbbreviation","decimalLength","thousandSeparator","decimalSeparator","value","onBlur","onKeyDown","onFocus","onValueChange","disabled","invalid","step","rest","useState","formattedValue","setFormatted","rootValue","setRootValue","inputRef","useRef","handleRef","useForkRef","handleInputBlur","current","blur","handleSelect","select","handleChange","e","inputValue","target","isValidInput","startsWith","numericInput","replace","_","num","unit","parseFloat","toLowerCase","toString","regexString","RegExp","test","handleKeyDown","allowedChars","key","_step","String","preventDefault","updateValue","metaKey","ctrlKey","handleBlur","formatCurrency","handleFocus","type","decimalPart","increasedValue","nonDecimalPart","replaceAll","includes","slice","indexOf","toFixed","joinedValue","numberWithSeparator","displayName"],"sources":["../../../../src/components/Input/InputNumber.tsx"],"sourcesContent":["import React, {\n ChangeEventHandler,\n forwardRef,\n FocusEventHandler,\n KeyboardEventHandler,\n useRef,\n useState,\n} from \"react\";\nimport { Input } from \"./Input\";\nimport { formatCurrency, numberWithSeparator } from \"../../utils/currencyUtils\";\nimport { useForkRef } from \"../../utils\";\n\nimport type { InputProps } from \"./Input\";\n\nconst multiplier = {\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 type Separators = \".\" | \",\";\n\nexport interface InputNumberProps extends InputProps {\n decimalSeparator?: Separators;\n thousandSeparator?: Separators;\n disableAbbreviation?: boolean;\n disableMacros?: boolean;\n decimalLength?: number;\n onValueChange?: (value: string) => void;\n}\n\nexport const InputNumber = forwardRef<HTMLInputElement, InputNumberProps>(\n (\n {\n disableMacros = false,\n disableAbbreviation = false,\n decimalLength = 2,\n thousandSeparator = \",\",\n decimalSeparator = \".\",\n value,\n onBlur,\n onKeyDown,\n onFocus,\n onValueChange,\n disabled,\n invalid,\n step = 1,\n ...rest\n },\n ref\n ) => {\n const [formattedValue, setFormatted] = useState(value);\n const [rootValue, setRootValue] = useState(value);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const handleRef = useForkRef(ref, inputRef);\n\n const handleInputBlur = () => {\n if (inputRef && inputRef.current) {\n inputRef.current.blur();\n }\n };\n\n const handleSelect = () => {\n if (inputRef && inputRef.current) {\n inputRef.current.select();\n }\n };\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n const inputValue = e.target.value;\n let isValidInput = false;\n\n if (inputValue.startsWith(\"00\")) {\n return;\n }\n\n const numericInput = disableMacros\n ? inputValue\n : inputValue.replace(/([0-9.]+)([kmbtKMBT])/, (_, num, unit) => {\n return (\n parseFloat(num) * multiplier[unit.toLowerCase()]\n ).toString();\n });\n\n const regexString = `^(\\\\d{0,9}(?:[${thousandSeparator}]?\\\\d{0,3})*(?:\\\\${decimalSeparator}\\\\d{0,${decimalLength}})?)?$`;\n\n if (thousandSeparator === \",\") {\n isValidInput = new RegExp(regexString).test(numericInput);\n }\n\n if (thousandSeparator === \".\") {\n isValidInput = new RegExp(regexString).test(numericInput);\n }\n\n if (!isValidInput) {\n return;\n }\n\n setFormatted(numericInput);\n\n onValueChange && onValueChange(numericInput);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLInputElement> = (e) => {\n const allowedChars = /[0-9km.,b]/i;\n const key = e.key;\n const _step = parseFloat(String(step));\n\n if (key === \"Escape\") {\n handleInputBlur();\n }\n\n if (key === \"ArrowUp\") {\n e.preventDefault();\n\n updateValue(\"increment\", _step);\n }\n\n if (key === \"ArrowDown\") {\n e.preventDefault();\n\n updateValue(\"decrement\", _step);\n }\n\n if ((e.metaKey || e.ctrlKey) && e.key === \"a\") {\n handleSelect();\n }\n\n if (!allowedChars.test(key)) {\n e.preventDefault();\n }\n\n if (decimalLength === 0 && e.key === decimalSeparator) {\n e.preventDefault();\n }\n\n onKeyDown && onKeyDown(e);\n };\n\n const handleBlur: FocusEventHandler<HTMLInputElement> = (e) => {\n if (disableAbbreviation) {\n setFormatted(formattedValue);\n } else {\n setFormatted(\n formatCurrency(formattedValue as string, thousandSeparator)\n );\n }\n\n setRootValue(formattedValue);\n\n onBlur && onBlur(e);\n };\n\n const handleFocus: FocusEventHandler<HTMLInputElement> = (e) => {\n setFormatted(rootValue);\n\n onFocus && onFocus(e);\n };\n\n const updateValue = (type: \"increment\" | \"decrement\", step: number) => {\n const value = String(formattedValue);\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 value.includes(thousandSeparator)\n );\n\n setFormatted(decimalPart ? joinedValue + decimalPart : joinedValue);\n };\n\n return (\n <Input\n ref={handleRef}\n placeholder={`5${thousandSeparator}000${decimalSeparator}00`}\n value={formattedValue}\n type=\"text\"\n disabled={disabled}\n invalid={invalid}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n aria-placeholder={`5${thousandSeparator}000${decimalSeparator}00`}\n aria-disabled={disabled}\n aria-invalid={invalid}\n {...rest}\n />\n );\n }\n);\n\nInputNumber.displayName = \"InputNumber\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"InputNumber.js","names":["InputNumber","forwardRef","ref","decimalLength","decimalSeparator","disableAbbreviation","disabled","disableMacros","invalid","onValueChange","step","thousandSeparator","value","rest","inputRef","useRef","handleRef","useForkRef","useInputNumber","formattedValue","handleBlur","handleChange","handleFocus","handleKeyDown","displayName"],"sources":["../../../../src/components/Input/InputNumber.tsx"],"sourcesContent":["import React, { forwardRef, useRef } from \"react\";\nimport { InputNumberProps, useInputNumber } from \"../../hooks\";\nimport { useForkRef } from \"../../utils\";\nimport { Input } from \"./Input\";\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 onValueChange,\n step = 1,\n thousandSeparator = \",\",\n value,\n ...rest\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const handleRef = useForkRef(ref, inputRef);\n\n const {\n formattedValue,\n handleBlur,\n handleChange,\n handleFocus,\n handleKeyDown,\n } = useInputNumber(\n {\n decimalLength,\n decimalSeparator,\n disableAbbreviation,\n disableMacros,\n onValueChange,\n step,\n thousandSeparator,\n value,\n },\n inputRef\n );\n\n return (\n <Input\n ref={handleRef}\n placeholder={`5${thousandSeparator}000${decimalSeparator}00`}\n value={formattedValue}\n type=\"text\"\n disabled={disabled}\n invalid={invalid}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n aria-placeholder={`5${thousandSeparator}000${decimalSeparator}00`}\n aria-disabled={disabled}\n aria-invalid={invalid}\n {...rest}\n />\n );\n }\n);\n\nInputNumber.displayName = \"InputNumber\";\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AAAgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAEzB,IAAMA,WAAW,gBAAG,IAAAC,iBAAU,EACnC,gBAcEC,GAAG,EACA;EAAA,8BAbDC,aAAa;IAAbA,aAAa,mCAAG,CAAC;IAAA,6BACjBC,gBAAgB;IAAhBA,gBAAgB,sCAAG,GAAG;IAAA,6BACtBC,mBAAmB;IAAnBA,mBAAmB,sCAAG,KAAK;IAC3BC,QAAQ,QAARA,QAAQ;IAAA,0BACRC,aAAa;IAAbA,aAAa,mCAAG,KAAK;IACrBC,OAAO,QAAPA,OAAO;IACPC,aAAa,QAAbA,aAAa;IAAA,iBACbC,IAAI;IAAJA,IAAI,0BAAG,CAAC;IAAA,6BACRC,iBAAiB;IAAjBA,iBAAiB,sCAAG,GAAG;IACvBC,KAAK,QAALA,KAAK;IACFC,IAAI;EAIT,IAAMC,QAAQ,GAAG,IAAAC,aAAM,EAA0B,IAAI,CAAC;EACtD,IAAMC,SAAS,GAAG,IAAAC,iBAAU,EAACf,GAAG,EAAEY,QAAQ,CAAC;EAE3C,sBAMI,IAAAI,qBAAc,EAChB;MACEf,aAAa,EAAbA,aAAa;MACbC,gBAAgB,EAAhBA,gBAAgB;MAChBC,mBAAmB,EAAnBA,mBAAmB;MACnBE,aAAa,EAAbA,aAAa;MACbE,aAAa,EAAbA,aAAa;MACbC,IAAI,EAAJA,IAAI;MACJC,iBAAiB,EAAjBA,iBAAiB;MACjBC,KAAK,EAALA;IACF,CAAC,EACDE,QAAQ,CACT;IAjBCK,cAAc,mBAAdA,cAAc;IACdC,UAAU,mBAAVA,UAAU;IACVC,YAAY,mBAAZA,YAAY;IACZC,WAAW,mBAAXA,WAAW;IACXC,aAAa,mBAAbA,aAAa;EAef,oBACE,6BAAC,YAAK;IACJ,GAAG,EAAEP,SAAU;IACf,WAAW,aAAML,iBAAiB,gBAAMP,gBAAgB,OAAK;IAC7D,KAAK,EAAEe,cAAe;IACtB,IAAI,EAAC,MAAM;IACX,QAAQ,EAAEb,QAAS;IACnB,OAAO,EAAEE,OAAQ;IACjB,QAAQ,EAAEa,YAAa;IACvB,OAAO,EAAEC,WAAY;IACrB,MAAM,EAAEF,UAAW;IACnB,SAAS,EAAEG,aAAc;IACzB,+BAAsBZ,iBAAiB,gBAAMP,gBAAgB,OAAK;IAClE,iBAAeE,QAAS;IACxB,gBAAcE;EAAQ,GAClBK,IAAI,EACR;AAEN,CAAC,CACF;AAAC;AAEFb,WAAW,CAACwB,WAAW,GAAG,aAAa"}
@@ -25,4 +25,15 @@ Object.keys(_useHeight).forEach(function (key) {
25
25
  }
26
26
  });
27
27
  });
28
+ var _useInputNumber = require("./useInputNumber");
29
+ Object.keys(_useInputNumber).forEach(function (key) {
30
+ if (key === "default" || key === "__esModule") return;
31
+ if (key in exports && exports[key] === _useInputNumber[key]) return;
32
+ Object.defineProperty(exports, key, {
33
+ enumerable: true,
34
+ get: function get() {
35
+ return _useInputNumber[key];
36
+ }
37
+ });
38
+ });
28
39
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/hooks/index.ts"],"sourcesContent":["export * from \"./useInitScrollRef\";\nexport * from \"./useHeight\";\n"],"mappings":";;;;;AAAA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/hooks/index.ts"],"sourcesContent":["export * from \"./useInitScrollRef\";\nexport * from \"./useHeight\";\nexport * from \"./useInputNumber\";\n"],"mappings":";;;;;AAAA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useInputNumber = void 0;
7
+ var _react = require("react");
8
+ var _currencyUtils = require("../utils/currencyUtils");
9
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
10
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
11
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
12
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
13
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
14
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
15
+ var useInputNumber = function useInputNumber(_ref, ref) {
16
+ var _ref$decimalSeparator = _ref.decimalSeparator,
17
+ decimalSeparator = _ref$decimalSeparator === void 0 ? "." : _ref$decimalSeparator,
18
+ _ref$thousandSeparato = _ref.thousandSeparator,
19
+ thousandSeparator = _ref$thousandSeparato === void 0 ? "," : _ref$thousandSeparato,
20
+ disableAbbreviation = _ref.disableAbbreviation,
21
+ disableMacros = _ref.disableMacros,
22
+ decimalLength = _ref.decimalLength,
23
+ value = _ref.value,
24
+ onValueChange = _ref.onValueChange,
25
+ onKeyDown = _ref.onKeyDown,
26
+ onBlur = _ref.onBlur,
27
+ onFocus = _ref.onFocus,
28
+ step = _ref.step;
29
+ var _useState = (0, _react.useState)(value),
30
+ _useState2 = _slicedToArray(_useState, 2),
31
+ formattedValue = _useState2[0],
32
+ setFormatted = _useState2[1];
33
+ var _useState3 = (0, _react.useState)(value),
34
+ _useState4 = _slicedToArray(_useState3, 2),
35
+ rootValue = _useState4[0],
36
+ setRootValue = _useState4[1];
37
+ var _useState5 = (0, _react.useState)(false),
38
+ _useState6 = _slicedToArray(_useState5, 2),
39
+ focused = _useState6[0],
40
+ setFocused = _useState6[1];
41
+ var handleInputBlur = function handleInputBlur() {
42
+ if (ref && ref.current) {
43
+ ref.current.blur();
44
+ }
45
+ };
46
+ var handleSelect = function handleSelect() {
47
+ if (ref && ref.current) {
48
+ ref.current.select();
49
+ }
50
+ };
51
+ var handleChange = function handleChange(e) {
52
+ var inputValue = e.target.value;
53
+ var isValidInput = false;
54
+ if (inputValue.startsWith("00")) {
55
+ return;
56
+ }
57
+ var numericInput = disableMacros ? inputValue : inputValue.replace(/([0-9.]+)([kmbtKMBT])/, function (_, num, unit) {
58
+ return (parseFloat(num) * _currencyUtils.currencyMultiplier[unit.toLowerCase()]).toString();
59
+ });
60
+ var regexString = "^(-?\\d{0,9}(?:[".concat(thousandSeparator, "]?\\d{0,3})*(?:\\").concat(decimalSeparator, "\\d{0,").concat(decimalLength, "})?)?$");
61
+ if (thousandSeparator === ",") {
62
+ isValidInput = new RegExp(regexString).test(numericInput);
63
+ }
64
+ if (thousandSeparator === ".") {
65
+ isValidInput = new RegExp(regexString).test(numericInput);
66
+ }
67
+ if (!isValidInput) {
68
+ return;
69
+ }
70
+ setFormatted(numericInput);
71
+ onValueChange && onValueChange(numericInput);
72
+ };
73
+ var handleKeyDown = function handleKeyDown(e) {
74
+ var key = e.key;
75
+ var _step = parseFloat(String(step));
76
+ if (key === "Escape") {
77
+ handleInputBlur();
78
+ }
79
+ if (key === "ArrowUp") {
80
+ e.preventDefault();
81
+ updateValue("increment", _step);
82
+ }
83
+ if (key === "ArrowDown") {
84
+ e.preventDefault();
85
+ updateValue("decrement", _step);
86
+ }
87
+ if ((e.metaKey || e.ctrlKey) && e.key === "a") {
88
+ handleSelect();
89
+ }
90
+ if (decimalLength === 0 && e.key === decimalSeparator) {
91
+ e.preventDefault();
92
+ }
93
+ onKeyDown && onKeyDown(e);
94
+ };
95
+ var handleBlur = function handleBlur(e) {
96
+ if (disableAbbreviation) {
97
+ setFormatted(formattedValue);
98
+ } else {
99
+ setFormatted((0, _currencyUtils.formatCurrency)(formattedValue, thousandSeparator));
100
+ }
101
+ setRootValue(formattedValue);
102
+ setFocused(false);
103
+ onBlur && onBlur(e);
104
+ };
105
+ var handleFocus = function handleFocus(e) {
106
+ setFormatted(rootValue);
107
+ setFocused(true);
108
+ onFocus && onFocus(e);
109
+ };
110
+ var updateValue = function updateValue(type, step) {
111
+ var value = String(formattedValue);
112
+ var decimalPart = "";
113
+ var increasedValue = 0;
114
+ var nonDecimalPart = value.replaceAll(thousandSeparator, "");
115
+ if (!value) {
116
+ return;
117
+ }
118
+ if (value.includes(decimalSeparator)) {
119
+ nonDecimalPart = value.slice(0, value.indexOf(decimalSeparator)).replaceAll(thousandSeparator, "");
120
+ }
121
+ if (value.includes(decimalSeparator)) {
122
+ decimalPart = value.slice(value.indexOf(decimalSeparator));
123
+ }
124
+ if (type === "increment") {
125
+ increasedValue = parseFloat(nonDecimalPart) + step;
126
+ } else {
127
+ increasedValue = parseFloat(nonDecimalPart) - step;
128
+ }
129
+ if (value.includes(decimalSeparator)) {
130
+ increasedValue = parseFloat(increasedValue.toFixed(decimalLength));
131
+ }
132
+ var joinedValue = (0, _currencyUtils.numberWithSeparator)(increasedValue, thousandSeparator, value.includes(thousandSeparator));
133
+ setFormatted(decimalPart ? joinedValue + decimalPart : joinedValue);
134
+ };
135
+ return {
136
+ focused: focused,
137
+ formattedValue: formattedValue,
138
+ rootValue: rootValue,
139
+ handleChange: handleChange,
140
+ handleKeyDown: handleKeyDown,
141
+ handleBlur: handleBlur,
142
+ handleFocus: handleFocus,
143
+ onValueChange: onValueChange
144
+ };
145
+ };
146
+ exports.useInputNumber = useInputNumber;
147
+ //# sourceMappingURL=useInputNumber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInputNumber.js","names":["useInputNumber","ref","decimalSeparator","thousandSeparator","disableAbbreviation","disableMacros","decimalLength","value","onValueChange","onKeyDown","onBlur","onFocus","step","useState","formattedValue","setFormatted","rootValue","setRootValue","focused","setFocused","handleInputBlur","current","blur","handleSelect","select","handleChange","e","inputValue","target","isValidInput","startsWith","numericInput","replace","_","num","unit","parseFloat","currencyMultiplier","toLowerCase","toString","regexString","RegExp","test","handleKeyDown","key","_step","String","preventDefault","updateValue","metaKey","ctrlKey","handleBlur","formatCurrency","handleFocus","type","decimalPart","increasedValue","nonDecimalPart","replaceAll","includes","slice","indexOf","toFixed","joinedValue","numberWithSeparator"],"sources":["../../../src/hooks/useInputNumber.tsx"],"sourcesContent":["import {\n useState,\n ChangeEventHandler,\n KeyboardEventHandler,\n FocusEventHandler,\n MutableRefObject,\n} from \"react\";\nimport {\n currencyMultiplier,\n formatCurrency,\n numberWithSeparator,\n} from \"../utils/currencyUtils\";\nimport type { InputProps } from \"../components\";\n\nexport type Separators = \".\" | \",\";\n\n// https://www.youtube.com/watch?v=2AilA-M6N5U\n// @TODO: Pitati foo za testove.\nexport interface InputNumberProps extends InputProps {\n decimalLength?: number;\n decimalSeparator?: Separators;\n disableAbbreviation?: boolean;\n disableMacros?: boolean;\n thousandSeparator?: Separators;\n onValueChange?: (value: string) => void;\n}\n\nexport const useInputNumber = (\n {\n decimalSeparator = \".\",\n thousandSeparator = \",\",\n disableAbbreviation,\n disableMacros,\n decimalLength,\n value,\n onValueChange,\n onKeyDown,\n onBlur,\n onFocus,\n step,\n }: InputNumberProps,\n ref: MutableRefObject<HTMLInputElement | null>\n) => {\n const [formattedValue, setFormatted] = useState(value);\n const [rootValue, setRootValue] = useState(value);\n const [focused, setFocused] = useState<boolean>(false);\n\n const handleInputBlur = () => {\n if (ref && ref.current) {\n ref.current.blur();\n }\n };\n\n const handleSelect = () => {\n if (ref && ref.current) {\n ref.current.select();\n }\n };\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n const inputValue = e.target.value;\n let isValidInput = false;\n\n if (inputValue.startsWith(\"00\")) {\n return;\n }\n\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\n const regexString = `^(-?\\\\d{0,9}(?:[${thousandSeparator}]?\\\\d{0,3})*(?:\\\\${decimalSeparator}\\\\d{0,${decimalLength}})?)?$`;\n\n if (thousandSeparator === \",\") {\n isValidInput = new RegExp(regexString).test(numericInput);\n }\n\n if (thousandSeparator === \".\") {\n isValidInput = new RegExp(regexString).test(numericInput);\n }\n\n if (!isValidInput) {\n return;\n }\n\n setFormatted(numericInput);\n\n onValueChange && onValueChange(numericInput);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLInputElement> = (e) => {\n const key = e.key;\n const _step = parseFloat(String(step));\n\n if (key === \"Escape\") {\n handleInputBlur();\n }\n\n if (key === \"ArrowUp\") {\n e.preventDefault();\n\n updateValue(\"increment\", _step);\n }\n\n if (key === \"ArrowDown\") {\n e.preventDefault();\n\n updateValue(\"decrement\", _step);\n }\n\n if ((e.metaKey || e.ctrlKey) && e.key === \"a\") {\n handleSelect();\n }\n\n if (decimalLength === 0 && e.key === decimalSeparator) {\n e.preventDefault();\n }\n\n onKeyDown && onKeyDown(e);\n };\n\n const handleBlur: FocusEventHandler<HTMLInputElement> = (e) => {\n if (disableAbbreviation) {\n setFormatted(formattedValue);\n } else {\n setFormatted(formatCurrency(formattedValue as string, thousandSeparator));\n }\n\n setRootValue(formattedValue);\n setFocused(false);\n\n onBlur && onBlur(e);\n };\n\n const handleFocus: FocusEventHandler<HTMLInputElement> = (e) => {\n setFormatted(rootValue);\n setFocused(true);\n\n onFocus && onFocus(e);\n };\n\n const updateValue = (type: \"increment\" | \"decrement\", step: number) => {\n const value = String(formattedValue);\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 value.includes(thousandSeparator)\n );\n\n setFormatted(decimalPart ? joinedValue + decimalPart : joinedValue);\n };\n\n return {\n focused,\n formattedValue,\n rootValue,\n handleChange,\n handleKeyDown,\n handleBlur,\n handleFocus,\n onValueChange,\n } as const;\n};\n"],"mappings":"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"}
@@ -3,28 +3,31 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.numberWithSeparator = exports.formatCurrency = void 0;
6
+ exports.numberWithSeparator = exports.formatCurrency = exports.currencyMultiplier = void 0;
7
+ var currencyMultiplier = {
8
+ k: 1000,
9
+ m: 1000000,
10
+ b: 1000000000,
11
+ t: 1000000000000
12
+ };
13
+ exports.currencyMultiplier = currencyMultiplier;
7
14
  var formatCurrency = function formatCurrency(n) {
8
15
  var thousandSeparator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ",";
9
16
  var number = parseFloat(String(n).replaceAll(thousandSeparator, ""));
10
17
  if (isNaN(number)) {
11
18
  return "";
12
19
  }
13
- if (number < 1000) {
14
- return n;
15
- } else if (number >= 1000 && number < 1000000) {
16
- var formattedNum = (number / 1000).toFixed(1);
17
- return formattedNum.endsWith(".0") ? (number / 1000).toFixed(0) + "K" : formattedNum + "K";
18
- } else if (number >= 1000000 && number < 1000000000) {
19
- var _formattedNum = (number / 1000000).toFixed(1);
20
- return _formattedNum.endsWith(".0") ? (number / 1000000).toFixed(0) + "M" : _formattedNum + "M";
21
- } else if (number >= 1000000000 && number < 1000000000000) {
22
- var _formattedNum2 = (number / 1000000000).toFixed(1);
23
- return _formattedNum2.endsWith(".0") ? (number / 1000000000).toFixed(0) + "B" : _formattedNum2 + "B";
24
- } else if (number >= 1000000000000 && number < 1000000000000000) {
25
- var _formattedNum3 = (number / 1000000000000).toFixed(1);
26
- return _formattedNum3.endsWith(".0") ? (number / 1000000000000).toFixed(0) + "T" : _formattedNum3 + "T";
20
+ var isNegative = number < 0;
21
+ var absoluteNumber = Math.abs(number);
22
+ var suffixes = ["", "K", "M", "B", "T"];
23
+ var scale = 0;
24
+ while (absoluteNumber >= 1000 && scale < suffixes.length - 1) {
25
+ absoluteNumber /= 1000;
26
+ scale++;
27
27
  }
28
+ var formattedNum = scale === 0 ? absoluteNumber.toFixed(0) : absoluteNumber.toFixed(1);
29
+ var result = formattedNum.endsWith(".0") ? formattedNum.slice(0, -2) : formattedNum;
30
+ return isNegative ? "-".concat(result).concat(suffixes[scale]) : "".concat(result).concat(suffixes[scale]);
28
31
  };
29
32
  exports.formatCurrency = formatCurrency;
30
33
  var numberWithSeparator = function numberWithSeparator(x, thousandSeparator) {