@activecollab/components 2.0.93 → 2.0.95

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 (57) hide show
  1. package/dist/cjs/components/AutoResizeTextarea/AutoResizeTextarea.js +4 -1
  2. package/dist/cjs/components/AutoResizeTextarea/AutoResizeTextarea.js.map +1 -1
  3. package/dist/cjs/components/EditableCurrency/EditableCurrency.js +8 -5
  4. package/dist/cjs/components/EditableCurrency/EditableCurrency.js.map +1 -1
  5. package/dist/cjs/components/Input/Input.js +6 -1
  6. package/dist/cjs/components/Input/Input.js.map +1 -1
  7. package/dist/cjs/components/Input/InputNumber.js +5 -2
  8. package/dist/cjs/components/Input/InputNumber.js.map +1 -1
  9. package/dist/cjs/components/Input/Styles.js +7 -3
  10. package/dist/cjs/components/Input/Styles.js.map +1 -1
  11. package/dist/cjs/components/Input/types.js.map +1 -1
  12. package/dist/cjs/components/Textarea/Styles.js +7 -3
  13. package/dist/cjs/components/Textarea/Styles.js.map +1 -1
  14. package/dist/cjs/components/Textarea/Textarea.js +5 -1
  15. package/dist/cjs/components/Textarea/Textarea.js.map +1 -1
  16. package/dist/cjs/hooks/useInputNumber.js +9 -7
  17. package/dist/cjs/hooks/useInputNumber.js.map +1 -1
  18. package/dist/esm/components/AutoResizeTextarea/AutoResizeTextarea.d.ts +2 -0
  19. package/dist/esm/components/AutoResizeTextarea/AutoResizeTextarea.d.ts.map +1 -1
  20. package/dist/esm/components/AutoResizeTextarea/AutoResizeTextarea.js +2 -0
  21. package/dist/esm/components/AutoResizeTextarea/AutoResizeTextarea.js.map +1 -1
  22. package/dist/esm/components/AutoResizeTextarea/Styles.d.ts +1 -1
  23. package/dist/esm/components/AutoResizeTextarea/Styles.d.ts.map +1 -1
  24. package/dist/esm/components/EditableCurrency/EditableCurrency.d.ts.map +1 -1
  25. package/dist/esm/components/EditableCurrency/EditableCurrency.js +6 -4
  26. package/dist/esm/components/EditableCurrency/EditableCurrency.js.map +1 -1
  27. package/dist/esm/components/Input/Input.d.ts +2 -1
  28. package/dist/esm/components/Input/Input.d.ts.map +1 -1
  29. package/dist/esm/components/Input/Input.js +4 -0
  30. package/dist/esm/components/Input/Input.js.map +1 -1
  31. package/dist/esm/components/Input/InputNumber.d.ts.map +1 -1
  32. package/dist/esm/components/Input/InputNumber.js +3 -1
  33. package/dist/esm/components/Input/InputNumber.js.map +1 -1
  34. package/dist/esm/components/Input/Styles.d.ts +4 -1
  35. package/dist/esm/components/Input/Styles.d.ts.map +1 -1
  36. package/dist/esm/components/Input/Styles.js +2 -2
  37. package/dist/esm/components/Input/Styles.js.map +1 -1
  38. package/dist/esm/components/Input/types.d.ts +1 -0
  39. package/dist/esm/components/Input/types.d.ts.map +1 -1
  40. package/dist/esm/components/Input/types.js.map +1 -1
  41. package/dist/esm/components/Textarea/Styles.d.ts +2 -0
  42. package/dist/esm/components/Textarea/Styles.d.ts.map +1 -1
  43. package/dist/esm/components/Textarea/Styles.js +5 -5
  44. package/dist/esm/components/Textarea/Styles.js.map +1 -1
  45. package/dist/esm/components/Textarea/Textarea.d.ts +3 -1
  46. package/dist/esm/components/Textarea/Textarea.d.ts.map +1 -1
  47. package/dist/esm/components/Textarea/Textarea.js +3 -0
  48. package/dist/esm/components/Textarea/Textarea.js.map +1 -1
  49. package/dist/esm/hooks/useInputNumber.d.ts +2 -1
  50. package/dist/esm/hooks/useInputNumber.d.ts.map +1 -1
  51. package/dist/esm/hooks/useInputNumber.js +8 -7
  52. package/dist/esm/hooks/useInputNumber.js.map +1 -1
  53. package/dist/index.js +51 -23
  54. package/dist/index.js.map +1 -1
  55. package/dist/index.min.js +1 -1
  56. package/dist/index.min.js.map +1 -1
  57. package/package.json +1 -1
@@ -4,7 +4,7 @@ import { FontStyle } from "../FontStyle";
4
4
  export const StyledTextarea = styled.textarea.withConfig({
5
5
  displayName: "Styles__StyledTextarea",
6
6
  componentId: "sc-m6jqw8-0"
7
- })(["", " ", " ", " ", " ", " border-width:1px;border-style:solid;", " border-radius:8px;padding:4px 8px 6px 8px;height:auto;background-color:var(--input-background-color);transition:all 0.3s ease;width:360px;min-height:90px;outline:none;", " ", " ", " ", " &::placeholder{", "}", ""], {
7
+ })(["", " ", " ", " ", " ", " border-width:1px;border-style:solid;background-color:var(--input-background-color);", " border-radius:8px;padding:4px 8px 6px 8px;height:auto;transition:all 0.3s ease;width:360px;min-height:90px;outline:none;", " ", " ", " ", " ", " &::placeholder{", "}", " ", ""], {
8
8
  "fontSize": "0.875rem"
9
9
  }, {
10
10
  "color": "var(--color-theme-900)"
@@ -16,15 +16,15 @@ export const StyledTextarea = styled.textarea.withConfig({
16
16
  "fontWeight": "400"
17
17
  }, {
18
18
  "borderColor": "var(--color-theme-500)"
19
- }, FontStyle, BoxSizingStyle, props => props.disabled && css(["", ""], {
19
+ }, FontStyle, BoxSizingStyle, props => props.$mode === "flat" && css(["border:none;background-color:transparent;"]), props => props.disabled && css(["", ""], {
20
20
  "cursor": "not-allowed",
21
21
  "opacity": "0.5"
22
- }), props => !props.disabled && !props.$invalid && css(["&:active,&:focus,&:hover{", "}"], {
22
+ }), props => !props.disabled && !props.$invalid && props.$mode === "outlined" && css(["&:active,&:focus,&:hover{", "}"], {
23
23
  "borderColor": "var(--color-primary)"
24
24
  }), {
25
25
  "color": "var(--color-theme-transparent-500)"
26
- }, props => !props.disabled && props.$invalid && css(["", ""], {
26
+ }, props => !props.disabled && props.$invalid && props.$mode === "outlined" && css(["", ""], {
27
27
  "borderColor": "var(--red-alert)"
28
- }));
28
+ }), props => !props.disabled && props.$invalid && props.$mode === "flat" && css(["color:var(--red-alert);"]));
29
29
  StyledTextarea.displayName = "StyledTextarea";
30
30
  //# sourceMappingURL=Styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Styles.js","names":["styled","css","BoxSizingStyle","FontStyle","StyledTextarea","textarea","withConfig","displayName","componentId","props","disabled","$invalid"],"sources":["../../../../src/components/Textarea/Styles.ts"],"sourcesContent":["import styled, { css } from \"styled-components\";\nimport tw from \"twin.macro\";\n\nimport { BoxSizingStyle } from \"../BoxSizingStyle\";\nimport { FontStyle } from \"../FontStyle\";\n\ninterface StyledTextareaProps {\n disabled: boolean;\n $invalid: boolean;\n}\n\nexport const StyledTextarea = styled.textarea<StyledTextareaProps>`\n ${tw`tw-text-body-2`}\n ${tw`tw-text-theme-900`}\n ${tw`tw-leading-regular`}\n ${tw`tw-tracking-regular`}\n ${tw`tw-font-regular`}\n border-width: 1px;\n border-style: solid;\n ${tw`tw-border-theme-500`}\n border-radius: 8px;\n padding: 4px 8px 6px 8px;\n height: auto;\n background-color: var(--input-background-color);\n transition: all 0.3s ease;\n width: 360px;\n min-height: 90px;\n outline: none;\n ${FontStyle}\n ${BoxSizingStyle}\n\n ${(props) =>\n props.disabled &&\n css`\n ${tw`tw-cursor-not-allowed tw-opacity-50`}\n `}\n\n ${(props) =>\n !props.disabled &&\n !props.$invalid &&\n css`\n &:active,\n &:focus,\n &:hover {\n ${tw`tw-border-primary`}\n }\n `}\n\n &::placeholder {\n ${tw`tw-text-theme-transparent-500`}\n }\n\n ${(props) =>\n !props.disabled &&\n props.$invalid &&\n css`\n ${tw`tw-border-alert`}\n `}\n`;\n\nStyledTextarea.displayName = \"StyledTextarea\";\n"],"mappings":"AAAA,OAAOA,MAAM,IAAIC,GAAG,QAAQ,mBAAmB;AAG/C,SAASC,cAAc,QAAQ,mBAAmB;AAClD,SAASC,SAAS,QAAQ,cAAc;AAOxC,OAAO,MAAMC,cAAc,GAAGJ,MAAM,CAACK,QAAQ,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,8RACvC;EAAA;AAAe,CAAC,EAChB;EAAA;AAAkB,CAAC,EACnB;EAAA;AAAmB,CAAC,EACpB;EAAA;AAAoB,CAAC,EACrB;EAAA;AAAgB,CAAC,EAGjB;EAAA;AAAoB,CAAC,EASvBL,SAAS,EACTD,cAAc,EAEbO,KAAK,IACNA,KAAK,CAACC,QAAQ,IACdT,GAAG,WACG;EAAA;EAAA;AAAoC,CAAC,CAC1C,EAEAQ,KAAK,IACN,CAACA,KAAK,CAACC,QAAQ,IACf,CAACD,KAAK,CAACE,QAAQ,IACfV,GAAG,qCAIK;EAAA;AAAkB,CAAC,CAE1B,EAGG;EAAA;AAA8B,CAAC,EAGlCQ,KAAK,IACN,CAACA,KAAK,CAACC,QAAQ,IACfD,KAAK,CAACE,QAAQ,IACdV,GAAG,WACG;EAAA;AAAgB,CAAC,CACtB,CACJ;AAEDG,cAAc,CAACG,WAAW,GAAG,gBAAgB"}
1
+ {"version":3,"file":"Styles.js","names":["styled","css","BoxSizingStyle","FontStyle","StyledTextarea","textarea","withConfig","displayName","componentId","props","$mode","disabled","$invalid"],"sources":["../../../../src/components/Textarea/Styles.ts"],"sourcesContent":["import styled, { css } from \"styled-components\";\nimport tw from \"twin.macro\";\n\nimport { BoxSizingStyle } from \"../BoxSizingStyle\";\nimport { FontStyle } from \"../FontStyle\";\nimport { InputMode } from \"../Input/types\";\n\ninterface StyledTextareaProps {\n disabled: boolean;\n $invalid: boolean;\n $mode: InputMode;\n}\n\nexport const StyledTextarea = styled.textarea<StyledTextareaProps>`\n ${tw`tw-text-body-2`}\n ${tw`tw-text-theme-900`}\n ${tw`tw-leading-regular`}\n ${tw`tw-tracking-regular`}\n ${tw`tw-font-regular`}\n border-width: 1px;\n border-style: solid;\n background-color: var(--input-background-color);\n ${tw`tw-border-theme-500`}\n border-radius: 8px;\n padding: 4px 8px 6px 8px;\n height: auto;\n transition: all 0.3s ease;\n width: 360px;\n min-height: 90px;\n outline: none;\n ${FontStyle}\n ${BoxSizingStyle}\n\n ${(props) =>\n props.$mode === \"flat\" &&\n css`\n border: none;\n background-color: transparent;\n `}\n\n ${(props) =>\n props.disabled &&\n css`\n ${tw`tw-cursor-not-allowed tw-opacity-50`}\n `}\n\n ${(props) =>\n !props.disabled &&\n !props.$invalid &&\n props.$mode === \"outlined\" &&\n css`\n &:active,\n &:focus,\n &:hover {\n ${tw`tw-border-primary`}\n }\n `}\n\n &::placeholder {\n ${tw`tw-text-theme-transparent-500`}\n }\n\n ${(props) =>\n !props.disabled &&\n props.$invalid &&\n props.$mode === \"outlined\" &&\n css`\n ${tw`tw-border-alert`}\n `}\n\n ${(props) =>\n !props.disabled &&\n props.$invalid &&\n props.$mode === \"flat\" &&\n css`\n color: var(--red-alert);\n `}\n`;\n\nStyledTextarea.displayName = \"StyledTextarea\";\n"],"mappings":"AAAA,OAAOA,MAAM,IAAIC,GAAG,QAAQ,mBAAmB;AAG/C,SAASC,cAAc,QAAQ,mBAAmB;AAClD,SAASC,SAAS,QAAQ,cAAc;AASxC,OAAO,MAAMC,cAAc,GAAGJ,MAAM,CAACK,QAAQ,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,wSACvC;EAAA;AAAe,CAAC,EAChB;EAAA;AAAkB,CAAC,EACnB;EAAA;AAAmB,CAAC,EACpB;EAAA;AAAoB,CAAC,EACrB;EAAA;AAAgB,CAAC,EAIjB;EAAA;AAAoB,CAAC,EAQvBL,SAAS,EACTD,cAAc,EAEbO,KAAK,IACNA,KAAK,CAACC,KAAK,KAAK,MAAM,IACtBT,GAAG,+CAGF,EAEAQ,KAAK,IACNA,KAAK,CAACE,QAAQ,IACdV,GAAG,WACG;EAAA;EAAA;AAAoC,CAAC,CAC1C,EAEAQ,KAAK,IACN,CAACA,KAAK,CAACE,QAAQ,IACf,CAACF,KAAK,CAACG,QAAQ,IACfH,KAAK,CAACC,KAAK,KAAK,UAAU,IAC1BT,GAAG,qCAIK;EAAA;AAAkB,CAAC,CAE1B,EAGG;EAAA;AAA8B,CAAC,EAGlCQ,KAAK,IACN,CAACA,KAAK,CAACE,QAAQ,IACfF,KAAK,CAACG,QAAQ,IACdH,KAAK,CAACC,KAAK,KAAK,UAAU,IAC1BT,GAAG,WACG;EAAA;AAAgB,CAAC,CACtB,EAEAQ,KAAK,IACN,CAACA,KAAK,CAACE,QAAQ,IACfF,KAAK,CAACG,QAAQ,IACdH,KAAK,CAACC,KAAK,KAAK,MAAM,IACtBT,GAAG,6BAEF,CACJ;AAEDG,cAAc,CAACG,WAAW,GAAG,gBAAgB"}
@@ -1,6 +1,8 @@
1
1
  import React from "react";
2
+ import { InputMode } from "../Input/types";
2
3
  export interface TextareaProps {
3
4
  invalid?: boolean;
5
+ mode?: InputMode;
4
6
  }
5
- export declare const Textarea: React.ForwardRefExoticComponent<TextareaProps & Omit<Omit<React.DetailedHTMLProps<React.TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>, "ref">, "invalid"> & React.RefAttributes<HTMLTextAreaElement>>;
7
+ export declare const Textarea: React.ForwardRefExoticComponent<TextareaProps & Omit<Omit<React.DetailedHTMLProps<React.TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>, "ref">, keyof TextareaProps> & React.RefAttributes<HTMLTextAreaElement>>;
6
8
  //# sourceMappingURL=Textarea.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../../../src/components/Textarea/Textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAM/C,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,QAAQ,2NAyBpB,CAAC"}
1
+ {"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../../../src/components/Textarea/Textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAK/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,eAAO,MAAM,QAAQ,qOA4BpB,CAAC"}
@@ -7,12 +7,15 @@ export const Textarea = /*#__PURE__*/forwardRef((_ref, ref) => {
7
7
  className,
8
8
  disabled = false,
9
9
  invalid = false,
10
+ mode = "outlined",
10
11
  ...rest
11
12
  } = _ref;
12
13
  return /*#__PURE__*/React.createElement(StyledTextarea, _extends({}, rest, {
13
14
  $invalid: invalid,
14
15
  ref: ref,
16
+ $mode: mode,
15
17
  disabled: disabled,
18
+ "aria-invalid": invalid,
16
19
  className: classnames("c-textarea", {
17
20
  "c-textarea__disabled": disabled
18
21
  }, className)
@@ -1 +1 @@
1
- {"version":3,"file":"Textarea.js","names":["React","forwardRef","classnames","StyledTextarea","Textarea","_ref","ref","className","disabled","invalid","rest","createElement","_extends","$invalid","displayName"],"sources":["../../../../src/components/Textarea/Textarea.tsx"],"sourcesContent":["import React, { forwardRef, Ref } from \"react\";\n\nimport classnames from \"classnames\";\n\nimport { StyledTextarea } from \"./Styles\";\n\nexport interface TextareaProps {\n invalid?: boolean;\n}\n\nexport const Textarea = forwardRef(\n (\n {\n className,\n disabled = false,\n invalid = false,\n ...rest\n }: TextareaProps &\n Omit<React.ComponentPropsWithoutRef<\"textarea\">, keyof TextareaProps>,\n ref: Ref<HTMLTextAreaElement> | null | undefined\n ) => {\n return (\n <StyledTextarea\n {...rest}\n $invalid={invalid}\n ref={ref}\n disabled={disabled}\n className={classnames(\n \"c-textarea\",\n { \"c-textarea__disabled\": disabled },\n className\n )}\n />\n );\n }\n);\n\nTextarea.displayName = \"Textarea\";\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,UAAU,QAAa,OAAO;AAE9C,OAAOC,UAAU,MAAM,YAAY;AAEnC,SAASC,cAAc,QAAQ,UAAU;AAMzC,OAAO,MAAMC,QAAQ,gBAAGH,UAAU,CAChC,CAAAI,IAAA,EAQEC,GAAgD,KAC7C;EAAA,IARH;IACEC,SAAS;IACTC,QAAQ,GAAG,KAAK;IAChBC,OAAO,GAAG,KAAK;IACf,GAAGC;EAEiE,CAAC,GAAAL,IAAA;EAGvE,oBACEL,KAAA,CAAAW,aAAA,CAACR,cAAc,EAAAS,QAAA,KACTF,IAAI;IACRG,QAAQ,EAAEJ,OAAQ;IAClBH,GAAG,EAAEA,GAAI;IACTE,QAAQ,EAAEA,QAAS;IACnBD,SAAS,EAAEL,UAAU,CACnB,YAAY,EACZ;MAAE,sBAAsB,EAAEM;IAAS,CAAC,EACpCD,SACF;EAAE,EACH,CAAC;AAEN,CACF,CAAC;AAEDH,QAAQ,CAACU,WAAW,GAAG,UAAU"}
1
+ {"version":3,"file":"Textarea.js","names":["React","forwardRef","classnames","StyledTextarea","Textarea","_ref","ref","className","disabled","invalid","mode","rest","createElement","_extends","$invalid","$mode","displayName"],"sources":["../../../../src/components/Textarea/Textarea.tsx"],"sourcesContent":["import React, { forwardRef, Ref } from \"react\";\n\nimport classnames from \"classnames\";\n\nimport { StyledTextarea } from \"./Styles\";\nimport { InputMode } from \"../Input/types\";\n\nexport interface TextareaProps {\n invalid?: boolean;\n mode?: InputMode;\n}\n\nexport const Textarea = forwardRef(\n (\n {\n className,\n disabled = false,\n invalid = false,\n mode = \"outlined\",\n ...rest\n }: TextareaProps &\n Omit<React.ComponentPropsWithoutRef<\"textarea\">, keyof TextareaProps>,\n ref: Ref<HTMLTextAreaElement> | null | undefined\n ) => {\n return (\n <StyledTextarea\n {...rest}\n $invalid={invalid}\n ref={ref}\n $mode={mode}\n disabled={disabled}\n aria-invalid={invalid}\n className={classnames(\n \"c-textarea\",\n { \"c-textarea__disabled\": disabled },\n className\n )}\n />\n );\n }\n);\n\nTextarea.displayName = \"Textarea\";\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,UAAU,QAAa,OAAO;AAE9C,OAAOC,UAAU,MAAM,YAAY;AAEnC,SAASC,cAAc,QAAQ,UAAU;AAQzC,OAAO,MAAMC,QAAQ,gBAAGH,UAAU,CAChC,CAAAI,IAAA,EASEC,GAAgD,KAC7C;EAAA,IATH;IACEC,SAAS;IACTC,QAAQ,GAAG,KAAK;IAChBC,OAAO,GAAG,KAAK;IACfC,IAAI,GAAG,UAAU;IACjB,GAAGC;EAEiE,CAAC,GAAAN,IAAA;EAGvE,oBACEL,KAAA,CAAAY,aAAA,CAACT,cAAc,EAAAU,QAAA,KACTF,IAAI;IACRG,QAAQ,EAAEL,OAAQ;IAClBH,GAAG,EAAEA,GAAI;IACTS,KAAK,EAAEL,IAAK;IACZF,QAAQ,EAAEA,QAAS;IACnB,gBAAcC,OAAQ;IACtBF,SAAS,EAAEL,UAAU,CACnB,YAAY,EACZ;MAAE,sBAAsB,EAAEM;IAAS,CAAC,EACpCD,SACF;EAAE,EACH,CAAC;AAEN,CACF,CAAC;AAEDH,QAAQ,CAACY,WAAW,GAAG,UAAU"}
@@ -6,6 +6,7 @@ export interface IInputNumber {
6
6
  disableAbbreviation?: boolean;
7
7
  disableMacros?: boolean;
8
8
  thousandSeparator?: Separators;
9
+ trimDecimals?: boolean;
9
10
  onSave?: (e: Event) => void;
10
11
  value?: string | number;
11
12
  step?: number;
@@ -17,7 +18,7 @@ export interface IInputNumber {
17
18
  onCancel?: (e: Event) => void;
18
19
  validation?: (value: string, disableMacros: boolean, decimalSeparator: string, decimalLength: number, limit?: number) => boolean;
19
20
  }
20
- export declare const useInputNumber: ({ decimalSeparator, thousandSeparator, disableAbbreviation, disableMacros, decimalLength, value, onChange, onSave, onEnterKeyPress, onClick, onCancel, allowEmptyValue, step, limit, validation, }: IInputNumber, inputRef: RefObject<HTMLInputElement | null>) => {
21
+ export declare const useInputNumber: ({ decimalSeparator, thousandSeparator, disableAbbreviation, disableMacros, decimalLength, value, onChange, onSave, onEnterKeyPress, onClick, onCancel, allowEmptyValue, step, trimDecimals, limit, validation, }: IInputNumber, inputRef: RefObject<HTMLInputElement | null>) => {
21
22
  inputProps: {
22
23
  value: string | number;
23
24
  onBlur: (e: any) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"useInputNumber.d.ts","sourceRoot":"","sources":["../../../src/hooks/useInputNumber.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EAGV,SAAS,EAGV,MAAM,OAAO,CAAC;AASf,MAAM,MAAM,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEzC,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAC9B,UAAU,CAAC,EAAE,CACX,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,OAAO,EACtB,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,MAAM,KACX,OAAO,CAAC;CACd;AAED,eAAO,MAAM,cAAc,uMAiBtB,YAAY,YACL,UAAU,gBAAgB,GAAG,IAAI,CAAC;;;;;;;;;;;;;;CAsQ7C,CAAC"}
1
+ {"version":3,"file":"useInputNumber.d.ts","sourceRoot":"","sources":["../../../src/hooks/useInputNumber.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EAGV,SAAS,EAGV,MAAM,OAAO,CAAC;AASf,MAAM,MAAM,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEzC,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAC9B,UAAU,CAAC,EAAE,CACX,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,OAAO,EACtB,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,MAAM,KACX,OAAO,CAAC;CACd;AAED,eAAO,MAAM,cAAc,qNAkBtB,YAAY,YACL,UAAU,gBAAgB,GAAG,IAAI,CAAC;;;;;;;;;;;;;;CA8S7C,CAAC"}
@@ -16,20 +16,21 @@ export const useInputNumber = (_ref, inputRef) => {
16
16
  onCancel,
17
17
  allowEmptyValue,
18
18
  step = 1,
19
+ trimDecimals = true,
19
20
  limit,
20
21
  validation = validateNumberInput
21
22
  } = _ref;
22
- const [currentValue, setCurrentValue] = useState(() => disableAbbreviation ? value : formatNumber(value, thousandSeparator));
23
- const [prevValue, setPrevValue] = useState(() => disableAbbreviation ? value : formatNumber(value, thousandSeparator));
23
+ const [currentValue, setCurrentValue] = useState(() => disableAbbreviation ? value : formatNumber(value, thousandSeparator, decimalSeparator, trimDecimals, decimalLength));
24
+ const [prevValue, setPrevValue] = useState(() => disableAbbreviation ? value : formatNumber(value, thousandSeparator, decimalSeparator, trimDecimals, decimalLength));
24
25
  const [unformattedValue, setUnformattedValue] = useState(() => value);
25
26
  useEffect(() => {
26
27
  if (value !== prevValue) {
27
- setCurrentValue(disableAbbreviation ? value : formatNumber(value, thousandSeparator));
28
- setPrevValue(disableAbbreviation ? value : formatNumber(value, thousandSeparator));
28
+ setCurrentValue(disableAbbreviation ? value : formatNumber(value, thousandSeparator, decimalSeparator, trimDecimals, decimalLength));
29
+ setPrevValue(disableAbbreviation ? value : formatNumber(value, thousandSeparator, decimalSeparator, trimDecimals, decimalLength));
29
30
  setUnformattedValue(value);
30
31
  }
31
32
  // eslint-disable-next-line react-hooks/exhaustive-deps
32
- }, [disableAbbreviation, thousandSeparator, value]);
33
+ }, [disableAbbreviation, thousandSeparator, decimalSeparator, decimalLength, trimDecimals, value]);
33
34
  const [focused, setFocused] = useState(false);
34
35
  const escapeRef = useRef(false);
35
36
  const handleBlur = useCallback(e => {
@@ -38,7 +39,7 @@ export const useInputNumber = (_ref, inputRef) => {
38
39
  setUnformattedValue(prevValue);
39
40
  } else {
40
41
  if (e.target.value.trim().length > 0 && prevValue !== e.target.value) {
41
- const _value = disableAbbreviation ? currentValue : formatNumber(currentValue, thousandSeparator);
42
+ const _value = disableAbbreviation ? currentValue : formatNumber(currentValue, thousandSeparator, decimalSeparator, trimDecimals, decimalLength);
42
43
  setPrevValue(_value);
43
44
  setUnformattedValue(currentValue);
44
45
  setCurrentValue(_value);
@@ -58,7 +59,7 @@ export const useInputNumber = (_ref, inputRef) => {
58
59
  }
59
60
  }
60
61
  setFocused(false);
61
- }, [allowEmptyValue, disableAbbreviation, onCancel, onSave, prevValue, thousandSeparator, currentValue]);
62
+ }, [prevValue, disableAbbreviation, currentValue, thousandSeparator, decimalSeparator, decimalLength, trimDecimals, onSave, allowEmptyValue, onCancel]);
62
63
  const updateValue = useCallback(type => {
63
64
  const value = String(unformattedValue);
64
65
  let decimalPart = "";
@@ -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":"AAAA,SACEA,QAAQ,EAERC,MAAM,EACNC,WAAW,EAEXC,OAAO,EACPC,SAAS,QACJ,OAAO;AAEd,SAASC,mBAAmB,QAAQ,UAAU;AAC9C,SACEC,kBAAkB,EAClBC,YAAY,EACZC,mBAAmB,QACd,wBAAwB;AA6B/B,OAAO,MAAMC,cAAc,GAAGA,CAAAC,IAAA,EAmB5BC,QAA4C,KACzC;EAAA,IAnBH;IACEC,gBAAgB,GAAG,GAAG;IACtBC,iBAAiB,GAAG,GAAG;IACvBC,mBAAmB;IACnBC,aAAa;IACbC,aAAa;IACbC,KAAK,GAAG,EAAE;IACVC,QAAQ;IACRC,MAAM;IACNC,eAAe;IACfC,OAAO;IACPC,QAAQ;IACRC,eAAe;IACfC,IAAI,GAAG,CAAC;IACRC,YAAY,GAAG,IAAI;IACnBC,KAAK;IACLC,UAAU,GAAGtB;EACD,CAAC,GAAAK,IAAA;EAGf,MAAM,CAACkB,YAAY,EAAEC,eAAe,CAAC,GAAG7B,QAAQ,CAAC,MAC/Cc,mBAAmB,GACfG,KAAK,GACLV,YAAY,CACVU,KAAK,EACLJ,iBAAiB,EACjBD,gBAAgB,EAChBa,YAAY,EACZT,aACF,CACN,CAAC;EACD,MAAM,CAACc,SAAS,EAAEC,YAAY,CAAC,GAAG/B,QAAQ,CAAC,MACzCc,mBAAmB,GACfG,KAAK,GACLV,YAAY,CACVU,KAAK,EACLJ,iBAAiB,EACjBD,gBAAgB,EAChBa,YAAY,EACZT,aACF,CACN,CAAC;EACD,MAAM,CAACgB,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGjC,QAAQ,CAAC,MAAMiB,KAAK,CAAC;EAErEb,SAAS,CAAC,MAAM;IACd,IAAIa,KAAK,KAAKa,SAAS,EAAE;MACvBD,eAAe,CACbf,mBAAmB,GACfG,KAAK,GACLV,YAAY,CACVU,KAAK,EACLJ,iBAAiB,EACjBD,gBAAgB,EAChBa,YAAY,EACZT,aACF,CACN,CAAC;MACDe,YAAY,CACVjB,mBAAmB,GACfG,KAAK,GACLV,YAAY,CACVU,KAAK,EACLJ,iBAAiB,EACjBD,gBAAgB,EAChBa,YAAY,EACZT,aACF,CACN,CAAC;MACDiB,mBAAmB,CAAChB,KAAK,CAAC;IAC5B;IACA;EACF,CAAC,EAAE,CACDH,mBAAmB,EACnBD,iBAAiB,EACjBD,gBAAgB,EAChBI,aAAa,EACbS,YAAY,EACZR,KAAK,CACN,CAAC;EAEF,MAAM,CAACiB,OAAO,EAAEC,UAAU,CAAC,GAAGnC,QAAQ,CAAC,KAAK,CAAC;EAE7C,MAAMoC,SAAS,GAAGnC,MAAM,CAAC,KAAK,CAAC;EAE/B,MAAMoC,UAAU,GAAGnC,WAAW,CAC3BoC,CAAC,IAAK;IACL,IAAIF,SAAS,CAACG,OAAO,EAAE;MACrBV,eAAe,CAACC,SAAS,CAAC;MAC1BG,mBAAmB,CAACH,SAAS,CAAC;IAChC,CAAC,MAAM;MACL,IAAIQ,CAAC,CAACE,MAAM,CAACvB,KAAK,CAACwB,IAAI,CAAC,CAAC,CAACC,MAAM,GAAG,CAAC,IAAIZ,SAAS,KAAKQ,CAAC,CAACE,MAAM,CAACvB,KAAK,EAAE;QACpE,MAAM0B,MAAM,GAAG7B,mBAAmB,GAC9Bc,YAAY,GACZrB,YAAY,CACVqB,YAAY,EACZf,iBAAiB,EACjBD,gBAAgB,EAChBa,YAAY,EACZT,aACF,CAAC;QACLe,YAAY,CAACY,MAAM,CAAC;QACpBV,mBAAmB,CAACL,YAAY,CAAC;QACjCC,eAAe,CAACc,MAAM,CAAC;QACvB,OAAOxB,MAAM,KAAK,UAAU,IAAIA,MAAM,CAACmB,CAAC,CAAC;MAC3C,CAAC,MAAM;QACL,IAAI,CAACf,eAAe,EAAE;UACpBM,eAAe,CAACC,SAAS,CAAC;UAC1BG,mBAAmB,CAACH,SAAS,CAAC;UAC9B,OAAOR,QAAQ,KAAK,UAAU,IAAIA,QAAQ,CAACgB,CAAC,CAAC;QAC/C,CAAC,MAAM;UACL,IAAI,OAAOnB,MAAM,KAAK,UAAU,IAAIW,SAAS,KAAKQ,CAAC,CAACE,MAAM,CAACvB,KAAK,EAAE;YAChEE,MAAM,CAACmB,CAAC,CAAC;UACX,CAAC,MAAM;YACL,OAAOhB,QAAQ,KAAK,UAAU,IAAIA,QAAQ,CAACgB,CAAC,CAAC;UAC/C;QACF;MACF;IACF;IACAH,UAAU,CAAC,KAAK,CAAC;EACnB,CAAC,EACD,CACEL,SAAS,EACThB,mBAAmB,EACnBc,YAAY,EACZf,iBAAiB,EACjBD,gBAAgB,EAChBI,aAAa,EACbS,YAAY,EACZN,MAAM,EACNI,eAAe,EACfD,QAAQ,CAEZ,CAAC;EAED,MAAMsB,WAAW,GAAG1C,WAAW,CAC5B2C,IAA+B,IAAK;IACnC,MAAM5B,KAAK,GAAG6B,MAAM,CAACd,gBAAgB,CAAC;IAEtC,IAAIe,WAAW,GAAG,EAAE;IACpB,IAAIC,cAAc,GAAG,CAAC;IACtB,IAAIC,cAAc,GAAGhC,KAAK,CAACiC,UAAU,CAACrC,iBAAiB,EAAE,EAAE,CAAC;IAE5D,IAAI,CAACI,KAAK,EAAE;MACV;IACF;IAEA,IAAIA,KAAK,CAACkC,QAAQ,CAACvC,gBAAgB,CAAC,EAAE;MACpCqC,cAAc,GAAGhC,KAAK,CACnBmC,KAAK,CAAC,CAAC,EAAEnC,KAAK,CAACoC,OAAO,CAACzC,gBAAgB,CAAC,CAAC,CACzCsC,UAAU,CAACrC,iBAAiB,EAAE,EAAE,CAAC;IACtC;IAEA,IAAII,KAAK,CAACkC,QAAQ,CAACvC,gBAAgB,CAAC,EAAE;MACpCmC,WAAW,GAAG9B,KAAK,CAACmC,KAAK,CAACnC,KAAK,CAACoC,OAAO,CAACzC,gBAAgB,CAAC,CAAC;IAC5D;IAEA,IAAIiC,IAAI,KAAK,WAAW,EAAE;MACxBG,cAAc,GAAGM,UAAU,CAACL,cAAc,CAAC,GAAGzB,IAAI;IACpD,CAAC,MAAM;MACLwB,cAAc,GAAGM,UAAU,CAACL,cAAc,CAAC,GAAGzB,IAAI;IACpD;IAEA,IAAIP,KAAK,CAACkC,QAAQ,CAACvC,gBAAgB,CAAC,EAAE;MACpCoC,cAAc,GAAGM,UAAU,CAACN,cAAc,CAACO,OAAO,CAACvC,aAAa,CAAC,CAAC;IACpE;IAEA,MAAMwC,WAAW,GAAGhD,mBAAmB,CACrCwC,cAAc,EACdnC,iBAAiB,EACjBD,gBAAgB,EAChBK,KAAK,CAACkC,QAAQ,CAACtC,iBAAiB,CAClC,CAAC;IAEDoB,mBAAmB,CACjBc,WAAW,GAAGS,WAAW,GAAGT,WAAW,GAAGS,WAC5C,CAAC;IACD3B,eAAe,CAACkB,WAAW,GAAGS,WAAW,GAAGT,WAAW,GAAGS,WAAW,CAAC;EACxE,CAAC,EACD,CAACxC,aAAa,EAAEJ,gBAAgB,EAAEY,IAAI,EAAEX,iBAAiB,EAAEmB,gBAAgB,CAC7E,CAAC;EAED,MAAMyB,aAAa,GAAGvD,WAAW,CAC9BoC,CAAC,IAAK;IACL,IAAIA,CAAC,CAACoB,GAAG,KAAK,OAAO,EAAE;MACrBpB,CAAC,CAACE,MAAM,CAACmB,IAAI,CAAC,CAAC;MACf,IAAI,OAAOvC,eAAe,KAAK,UAAU,EACvCA,eAAe,CAACkB,CAAC,CAACE,MAAM,CAACvB,KAAK,CAAC;IACnC;IACA,IAAIqB,CAAC,CAACoB,GAAG,KAAK,WAAW,EAAE;MACzB;IACF;IACA,IAAIpB,CAAC,CAACoB,GAAG,KAAK,YAAY,EAAE;MAC1B;IACF;IACA,IAAIpB,CAAC,CAACoB,GAAG,KAAK,SAAS,EAAE;MACvBpB,CAAC,CAACsB,cAAc,CAAC,CAAC;MAClBhB,WAAW,CAAC,WAAW,CAAC;IAC1B;IACA,IAAIN,CAAC,CAACoB,GAAG,KAAK,WAAW,EAAE;MACzBpB,CAAC,CAACsB,cAAc,CAAC,CAAC;MAClBhB,WAAW,CAAC,WAAW,CAAC;IAC1B;IACA,IAAIN,CAAC,CAACoB,GAAG,KAAK,QAAQ,EAAE;MACtBtB,SAAS,CAACG,OAAO,GAAG,IAAI;MACxBD,CAAC,CAACE,MAAM,CAACmB,IAAI,CAAC,CAAC;MACf,OAAOrC,QAAQ,KAAK,UAAU,IAAIA,QAAQ,CAACgB,CAAC,CAAC;MAC7CF,SAAS,CAACG,OAAO,GAAG,KAAK;IAC3B;IACA,IAAID,CAAC,CAACoB,GAAG,KAAK,WAAW,EAAE;MACzB;IACF;IACA,IAAI,CAACpB,CAAC,CAACuB,OAAO,IAAIvB,CAAC,CAACwB,OAAO,KAAKxB,CAAC,CAACoB,GAAG,KAAK,GAAG,EAAE;MAAA,IAAAK,iBAAA;MAC7C,CAAAA,iBAAA,GAAApD,QAAQ,CAAC4B,OAAO,aAAhBwB,iBAAA,CAAkBC,MAAM,CAAC,CAAC;MAC1B;IACF;IACA,IAAI1B,CAAC,CAACoB,GAAG,KAAK,KAAK,EAAE;MACnB;IACF;IACA,IAAI,CAACpB,CAAC,CAACuB,OAAO,IAAIvB,CAAC,CAACwB,OAAO,KAAKxB,CAAC,CAACoB,GAAG,KAAK,GAAG,EAAE;MAC7CpB,CAAC,CAACsB,cAAc,CAAC,CAAC;MAClB;IACF;IACA,MAAMK,KAAK,GAAG3B,CAAC,CAACE,MAAM;IACtB,MAAMZ,YAAY,GAAGqC,KAAK,CAAChD,KAAK;IAChC,MAAMiD,KAAK,GAAGD,KAAK,CAACE,cAAc;IAClC,MAAMC,GAAG,GAAGH,KAAK,CAACI,YAAY;IAC9B,MAAMC,QAAQ,GACZ1C,YAAY,CAAC2C,SAAS,CAAC,CAAC,EAAEL,KAAK,CAAC,GAAG5B,CAAC,CAACoB,GAAG,GAAG9B,YAAY,CAAC2C,SAAS,CAACH,GAAG,CAAC;IACxE,IACE,CAACzC,UAAU,CACT2C,QAAQ,EACRE,OAAO,CAACzD,aAAa,CAAC,EACtBH,gBAAgB,EAChBI,aAAa,WAAbA,aAAa,GAAI,CAAC,EAClBU,KACF,CAAC,EACD;MACAY,CAAC,CAACsB,cAAc,CAAC,CAAC;MAClB;IACF;EACF,CAAC,EACD,CACE5C,aAAa,EACbJ,gBAAgB,EAChBG,aAAa,EACbJ,QAAQ,EACRe,KAAK,EACLJ,QAAQ,EACRF,eAAe,EACfwB,WAAW,EACXjB,UAAU,CAEd,CAAC;EAED,MAAM8C,YAAY,GAAGvE,WAAW,CAC7BoC,CAAC,IAAK;IACL,MAAMoC,UAAU,GAAGpC,CAAC,CAACE,MAAM,CAACvB,KAAK;IACjC,MAAM0D,YAAY,GAAG5D,aAAa,GAC9B2D,UAAU,GACVA,UAAU,CAACE,OAAO,CAAC,uBAAuB,EAAE,CAACC,CAAC,EAAEC,GAAG,EAAEC,IAAI,KAAK;MAC5D,OAAO,CACLzB,UAAU,CAACwB,GAAG,CAAC,GAAGxE,kBAAkB,CAACyE,IAAI,CAACC,WAAW,CAAC,CAAC,CAAC,EACxDC,QAAQ,CAAC,CAAC;IACd,CAAC,CAAC;IACNpD,eAAe,CAAC8C,YAAY,CAAC;IAC7B1C,mBAAmB,CAAC0C,YAAY,CAAC;IACjC,IAAIzD,QAAQ,EAAEA,QAAQ,CAACyD,YAAY,CAAC;EACtC,CAAC,EACD,CAAC5D,aAAa,EAAEG,QAAQ,CAC1B,CAAC;EAED,MAAMgE,WAAW,GAAGhF,WAAW,CAC5BoC,CAAC,IAAK;IACL,IAAI,OAAOjB,OAAO,KAAK,UAAU,EAAE;MACjCA,OAAO,CAACiB,CAAC,CAAC;IACZ;EACF,CAAC,EACD,CAACjB,OAAO,CACV,CAAC;EAED,MAAM8D,WAAW,GAAGjF,WAAW,CAAC,MAAM;IACpC2B,eAAe,CAACG,gBAAgB,CAAC;IACjCG,UAAU,CAAC,IAAI,CAAC;EAClB,CAAC,EAAE,CAACH,gBAAgB,CAAC,CAAC;EAEtB,MAAMoD,iBAAiB,GAAGlF,WAAW,CAAC,MAAM;IAC1C,IAAIS,QAAQ,CAAC4B,OAAO,EAAE;MAAA,IAAA8C,kBAAA;MACpB,CAAAA,kBAAA,GAAA1E,QAAQ,CAAC4B,OAAO,aAAhB8C,kBAAA,CAAkBrB,MAAM,CAAC,CAAC;IAC5B;EACF,CAAC,EAAE,CAACrD,QAAQ,CAAC,CAAC;EAEd,MAAM2E,UAAU,GAAGnF,OAAO,CAAC,MAAM;IAC/B,OAAO;MACLc,KAAK,EAAEW,YAAY;MACnB2D,MAAM,EAAElD,UAAU;MAClBmD,SAAS,EAAE/B,aAAa;MACxBvC,QAAQ,EAAEuD,YAAY;MACtBpD,OAAO,EAAE6D,WAAW;MACpBO,aAAa,EAAEL,iBAAiB;MAChCM,OAAO,EAAEP,WAAW;MACpBjD,OAAO;MACPF;IACF,CAAC;EACH,CAAC,EAAE,CACDJ,YAAY,EACZS,UAAU,EACVoB,aAAa,EACbgB,YAAY,EACZS,WAAW,EACXE,iBAAiB,EACjBD,WAAW,EACXjD,OAAO,EACPF,gBAAgB,CACjB,CAAC;EAEF,OAAO;IACLsD,UAAU;IACVzD,eAAe;IACfE;EACF,CAAC;AACH,CAAC"}
package/dist/index.js CHANGED
@@ -11527,7 +11527,9 @@
11527
11527
  var StyledInputWrapper = styled__default["default"].div.withConfig({
11528
11528
  displayName: "Styles__StyledInputWrapper",
11529
11529
  componentId: "sc-ce8kcp-0"
11530
- })(["align-items:center;background-color:var(--input-background-color);border-color:var(--color-theme-500);border-radius:8px;border-style:solid;border-width:1px;cursor:text;display:flex;height:32px;padding-block:4px;padding-inline:4px;transition:all 0.3s ease;width:360px;", " ", " ", " ", " ", " ", " ", " ", ""], FontStyle, BoxSizingStyle, function (props) {
11530
+ })(["align-items:center;cursor:text;display:flex;height:32px;padding-block:4px;padding-inline:4px;transition:all 0.3s ease;width:360px;", " ", " ", " ", " ", " ", " ", " ", " ", ""], FontStyle, BoxSizingStyle, function (props) {
11531
+ return props.$mode === "outlined" && styled.css(["background-color:var(--input-background-color);border-color:var(--color-theme-500);border-radius:8px;border-style:solid;border-width:1px;"]);
11532
+ }, function (props) {
11531
11533
  return props.$size === "small" && styled.css(["border-radius:6px;height:24px;"]);
11532
11534
  }, function (props) {
11533
11535
  return props.$size === "big" && styled.css(["height:40px;"]);
@@ -11538,13 +11540,13 @@
11538
11540
  }, function (props) {
11539
11541
  return !props.$disabled && !props.$invalid && styled.css(["&:focus-within,&:hover{border-color:var(--color-primary);}"]);
11540
11542
  }, function (props) {
11541
- return !props.$disabled && props.$invalid && styled.css(["border-color:var(--red-alert);"]);
11543
+ return !props.$disabled && props.$invalid && props.$mode === "outlined" && styled.css(["border-color:var(--red-alert);"]);
11542
11544
  });
11543
11545
  StyledInputWrapper.displayName = "StyledInputWrapper";
11544
11546
  var StyledInput$2 = styled__default["default"].input.withConfig({
11545
11547
  displayName: "Styles__StyledInput",
11546
11548
  componentId: "sc-ce8kcp-1"
11547
- })(["background-color:var(--input-background-color);border:none;color:var(--color-theme-900);font-size:0.875rem;font-weight:400;letter-spacing:0.02em;margin-block:0;margin-inline:4px;outline:none;padding:0;width:100%;&::placeholder{color:var(--color-theme-transparent-500);}", " ", " ", " ", " ", ""], function (props) {
11549
+ })(["background-color:var(--input-background-color);border:none;color:var(--color-theme-900);font-size:0.875rem;font-weight:400;letter-spacing:0.02em;margin-block:0;margin-inline:4px;outline:none;padding:0;width:100%;&::placeholder{color:var(--color-theme-transparent-500);}", " ", " ", " ", " ", " ", ""], function (props) {
11548
11550
  return props.$size === "big" && styled.css(["font-size:1rem;"]);
11549
11551
  }, function (props) {
11550
11552
  return props.$size === "biggest" && styled.css(["font-size:1.25rem;font-weight:700;"]);
@@ -11554,6 +11556,8 @@
11554
11556
  return props.$loading && styled.css(["cursor:progress;"]);
11555
11557
  }, function (props) {
11556
11558
  return props.align && styled.css(["text-align:", ";"], props.align);
11559
+ }, function (props) {
11560
+ return props.$mode === "flat" && props.$invalid && styled.css(["color:var(--red-alert);"]);
11557
11561
  });
11558
11562
  StyledInput$2.displayName = "StyledInput";
11559
11563
  var StyledPasswordIndicatorWrapper = styled__default["default"].div.withConfig({
@@ -11598,7 +11602,7 @@
11598
11602
  });
11599
11603
  StyledInputSelectTrigger.displayName = "StyledInputSelectTrigger";
11600
11604
 
11601
- var _excluded$R = ["className", "style", "type", "disabled", "size", "invalid", "startAdornment", "endAdornment", "wrapRef", "wrapperClick"];
11605
+ var _excluded$R = ["className", "style", "type", "disabled", "size", "invalid", "startAdornment", "endAdornment", "wrapRef", "wrapperClick", "mode"];
11602
11606
  var Input = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
11603
11607
  var _ref$className = _ref.className,
11604
11608
  className = _ref$className === void 0 ? "" : _ref$className,
@@ -11615,6 +11619,8 @@
11615
11619
  endAdornment = _ref.endAdornment,
11616
11620
  wrapRef = _ref.wrapRef,
11617
11621
  wrapperClick = _ref.wrapperClick,
11622
+ _ref$mode = _ref.mode,
11623
+ mode = _ref$mode === void 0 ? "outlined" : _ref$mode,
11618
11624
  rest = _objectWithoutProperties(_ref, _excluded$R);
11619
11625
  var intInputRef = React.useRef(null);
11620
11626
  var handleRef = useForkRef(ref, intInputRef);
@@ -11627,6 +11633,7 @@
11627
11633
  $size: size,
11628
11634
  $invalid: invalid,
11629
11635
  $disabled: disabled,
11636
+ $mode: mode,
11630
11637
  style: style,
11631
11638
  className: classNames__default["default"]("c-input-wrapper", className),
11632
11639
  onClick: handleWrapperClick,
@@ -11638,6 +11645,8 @@
11638
11645
  disabled: disabled,
11639
11646
  className: "c-input",
11640
11647
  "aria-invalid": invalid,
11648
+ $invalid: invalid,
11649
+ $mode: mode,
11641
11650
  "data-form-type": "other"
11642
11651
  }, rest)), endAdornment);
11643
11652
  });
@@ -11976,17 +11985,19 @@
11976
11985
  allowEmptyValue = _ref.allowEmptyValue,
11977
11986
  _ref$step = _ref.step,
11978
11987
  step = _ref$step === void 0 ? 1 : _ref$step,
11988
+ _ref$trimDecimals = _ref.trimDecimals,
11989
+ trimDecimals = _ref$trimDecimals === void 0 ? true : _ref$trimDecimals,
11979
11990
  limit = _ref.limit,
11980
11991
  _ref$validation = _ref.validation,
11981
11992
  validation = _ref$validation === void 0 ? validateNumberInput : _ref$validation;
11982
11993
  var _useState = React.useState(function () {
11983
- return disableAbbreviation ? value : formatNumber(value, thousandSeparator);
11994
+ return disableAbbreviation ? value : formatNumber(value, thousandSeparator, decimalSeparator, trimDecimals, decimalLength);
11984
11995
  }),
11985
11996
  _useState2 = _slicedToArray(_useState, 2),
11986
11997
  currentValue = _useState2[0],
11987
11998
  setCurrentValue = _useState2[1];
11988
11999
  var _useState3 = React.useState(function () {
11989
- return disableAbbreviation ? value : formatNumber(value, thousandSeparator);
12000
+ return disableAbbreviation ? value : formatNumber(value, thousandSeparator, decimalSeparator, trimDecimals, decimalLength);
11990
12001
  }),
11991
12002
  _useState4 = _slicedToArray(_useState3, 2),
11992
12003
  prevValue = _useState4[0],
@@ -11999,12 +12010,12 @@
11999
12010
  setUnformattedValue = _useState6[1];
12000
12011
  React.useEffect(function () {
12001
12012
  if (value !== prevValue) {
12002
- setCurrentValue(disableAbbreviation ? value : formatNumber(value, thousandSeparator));
12003
- setPrevValue(disableAbbreviation ? value : formatNumber(value, thousandSeparator));
12013
+ setCurrentValue(disableAbbreviation ? value : formatNumber(value, thousandSeparator, decimalSeparator, trimDecimals, decimalLength));
12014
+ setPrevValue(disableAbbreviation ? value : formatNumber(value, thousandSeparator, decimalSeparator, trimDecimals, decimalLength));
12004
12015
  setUnformattedValue(value);
12005
12016
  }
12006
12017
  // eslint-disable-next-line react-hooks/exhaustive-deps
12007
- }, [disableAbbreviation, thousandSeparator, value]);
12018
+ }, [disableAbbreviation, thousandSeparator, decimalSeparator, decimalLength, trimDecimals, value]);
12008
12019
  var _useState7 = React.useState(false),
12009
12020
  _useState8 = _slicedToArray(_useState7, 2),
12010
12021
  focused = _useState8[0],
@@ -12016,7 +12027,7 @@
12016
12027
  setUnformattedValue(prevValue);
12017
12028
  } else {
12018
12029
  if (e.target.value.trim().length > 0 && prevValue !== e.target.value) {
12019
- var _value = disableAbbreviation ? currentValue : formatNumber(currentValue, thousandSeparator);
12030
+ var _value = disableAbbreviation ? currentValue : formatNumber(currentValue, thousandSeparator, decimalSeparator, trimDecimals, decimalLength);
12020
12031
  setPrevValue(_value);
12021
12032
  setUnformattedValue(currentValue);
12022
12033
  setCurrentValue(_value);
@@ -12036,7 +12047,7 @@
12036
12047
  }
12037
12048
  }
12038
12049
  setFocused(false);
12039
- }, [allowEmptyValue, disableAbbreviation, onCancel, onSave, prevValue, thousandSeparator, currentValue]);
12050
+ }, [prevValue, disableAbbreviation, currentValue, thousandSeparator, decimalSeparator, decimalLength, trimDecimals, onSave, allowEmptyValue, onCancel]);
12040
12051
  var updateValue = React.useCallback(function (type) {
12041
12052
  var value = String(unformattedValue);
12042
12053
  var decimalPart = "";
@@ -13598,7 +13609,7 @@
13598
13609
  });
13599
13610
  InputHours.displayName = "InputHours";
13600
13611
 
13601
- var _excluded$K = ["decimalLength", "decimalSeparator", "disableAbbreviation", "disabled", "disableMacros", "invalid", "step", "thousandSeparator", "value", "onCancel", "onSave", "onEnterKeyPress", "allowEmptyValue", "onChange", "onClick", "limit", "placeholder"];
13612
+ var _excluded$K = ["decimalLength", "decimalSeparator", "disableAbbreviation", "disabled", "disableMacros", "invalid", "step", "thousandSeparator", "value", "onCancel", "onSave", "onEnterKeyPress", "allowEmptyValue", "onChange", "onClick", "limit", "placeholder", "trimDecimals"];
13602
13613
  var InputNumber = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
13603
13614
  var _ref$decimalLength = _ref.decimalLength,
13604
13615
  decimalLength = _ref$decimalLength === void 0 ? 2 : _ref$decimalLength,
@@ -13623,6 +13634,8 @@
13623
13634
  externalOnClick = _ref.onClick,
13624
13635
  limit = _ref.limit,
13625
13636
  placeholder = _ref.placeholder,
13637
+ _ref$trimDecimals = _ref.trimDecimals,
13638
+ trimDecimals = _ref$trimDecimals === void 0 ? true : _ref$trimDecimals,
13626
13639
  rest = _objectWithoutProperties(_ref, _excluded$K);
13627
13640
  var inputRef = React.useRef(null);
13628
13641
  var handleRef = useForkRef(ref, inputRef);
@@ -13640,7 +13653,8 @@
13640
13653
  onCancel,
13641
13654
  onSave,
13642
13655
  allowEmptyValue,
13643
- limit
13656
+ limit,
13657
+ trimDecimals
13644
13658
  }, inputRef),
13645
13659
  inputProps = _useInputNumber.inputProps;
13646
13660
  var value = inputProps.value,
@@ -14088,7 +14102,7 @@
14088
14102
  var StyledTextarea = styled__default["default"].textarea.withConfig({
14089
14103
  displayName: "Styles__StyledTextarea",
14090
14104
  componentId: "sc-m6jqw8-0"
14091
- })(["", " ", " ", " ", " ", " border-width:1px;border-style:solid;", " border-radius:8px;padding:4px 8px 6px 8px;height:auto;background-color:var(--input-background-color);transition:all 0.3s ease;width:360px;min-height:90px;outline:none;", " ", " ", " ", " &::placeholder{", "}", ""], {
14105
+ })(["", " ", " ", " ", " ", " border-width:1px;border-style:solid;background-color:var(--input-background-color);", " border-radius:8px;padding:4px 8px 6px 8px;height:auto;transition:all 0.3s ease;width:360px;min-height:90px;outline:none;", " ", " ", " ", " ", " &::placeholder{", "}", " ", ""], {
14092
14106
  "fontSize": "0.875rem"
14093
14107
  }, {
14094
14108
  "color": "var(--color-theme-900)"
@@ -14101,35 +14115,43 @@
14101
14115
  }, {
14102
14116
  "borderColor": "var(--color-theme-500)"
14103
14117
  }, FontStyle, BoxSizingStyle, function (props) {
14118
+ return props.$mode === "flat" && styled.css(["border:none;background-color:transparent;"]);
14119
+ }, function (props) {
14104
14120
  return props.disabled && styled.css(["", ""], {
14105
14121
  "cursor": "not-allowed",
14106
14122
  "opacity": "0.5"
14107
14123
  });
14108
14124
  }, function (props) {
14109
- return !props.disabled && !props.$invalid && styled.css(["&:active,&:focus,&:hover{", "}"], {
14125
+ return !props.disabled && !props.$invalid && props.$mode === "outlined" && styled.css(["&:active,&:focus,&:hover{", "}"], {
14110
14126
  "borderColor": "var(--color-primary)"
14111
14127
  });
14112
14128
  }, {
14113
14129
  "color": "var(--color-theme-transparent-500)"
14114
14130
  }, function (props) {
14115
- return !props.disabled && props.$invalid && styled.css(["", ""], {
14131
+ return !props.disabled && props.$invalid && props.$mode === "outlined" && styled.css(["", ""], {
14116
14132
  "borderColor": "var(--red-alert)"
14117
14133
  });
14134
+ }, function (props) {
14135
+ return !props.disabled && props.$invalid && props.$mode === "flat" && styled.css(["color:var(--red-alert);"]);
14118
14136
  });
14119
14137
  StyledTextarea.displayName = "StyledTextarea";
14120
14138
 
14121
- var _excluded$F = ["className", "disabled", "invalid"];
14139
+ var _excluded$F = ["className", "disabled", "invalid", "mode"];
14122
14140
  var Textarea = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
14123
14141
  var className = _ref.className,
14124
14142
  _ref$disabled = _ref.disabled,
14125
14143
  disabled = _ref$disabled === void 0 ? false : _ref$disabled,
14126
14144
  _ref$invalid = _ref.invalid,
14127
14145
  invalid = _ref$invalid === void 0 ? false : _ref$invalid,
14146
+ _ref$mode = _ref.mode,
14147
+ mode = _ref$mode === void 0 ? "outlined" : _ref$mode,
14128
14148
  rest = _objectWithoutProperties(_ref, _excluded$F);
14129
14149
  return /*#__PURE__*/React__default["default"].createElement(StyledTextarea, _extends({}, rest, {
14130
14150
  $invalid: invalid,
14131
14151
  ref: ref,
14152
+ $mode: mode,
14132
14153
  disabled: disabled,
14154
+ "aria-invalid": invalid,
14133
14155
  className: classNames__default["default"]("c-textarea", {
14134
14156
  "c-textarea__disabled": disabled
14135
14157
  }, className)
@@ -14457,7 +14479,7 @@
14457
14479
  })(["white-space:pre-wrap;overflow-wrap:break-word;resize:none;"]);
14458
14480
  StyledAutoResizeTextarea.displayName = "StyledAutoResizeTextarea";
14459
14481
 
14460
- var _excluded$B = ["minRows", "maxRows", "lineHeight", "onChange", "className", "preventNewRowOnEnter", "cursorAtTextEnd", "onKeyDown", "value"];
14482
+ var _excluded$B = ["minRows", "maxRows", "lineHeight", "onChange", "className", "preventNewRowOnEnter", "cursorAtTextEnd", "onKeyDown", "value", "mode"];
14461
14483
  var AutoResizeTextarea = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
14462
14484
  var _ref$minRows = _ref.minRows,
14463
14485
  minRows = _ref$minRows === void 0 ? 1 : _ref$minRows,
@@ -14473,6 +14495,8 @@
14473
14495
  cursorAtTextEnd = _ref$cursorAtTextEnd === void 0 ? false : _ref$cursorAtTextEnd,
14474
14496
  onKeyDown = _ref.onKeyDown,
14475
14497
  value = _ref.value,
14498
+ _ref$mode = _ref.mode,
14499
+ mode = _ref$mode === void 0 ? "outlined" : _ref$mode,
14476
14500
  rest = _objectWithoutProperties(_ref, _excluded$B);
14477
14501
  var innerRef = React.useRef(null);
14478
14502
  var _useState = React.useState(minRows),
@@ -14520,6 +14544,7 @@
14520
14544
  onKeyDown: handleTextAreaKeyDown,
14521
14545
  onFocus: handleFocus,
14522
14546
  rows: rows,
14547
+ mode: mode,
14523
14548
  className: classNames__default["default"]("c-autoresizetextarea", className),
14524
14549
  style: {
14525
14550
  minHeight: "".concat(lineHeight, "px"),
@@ -17688,7 +17713,7 @@
17688
17713
  });
17689
17714
  EditableHours.displayName = "EditableHours";
17690
17715
 
17691
- var _excluded$c = ["decimalLength", "decimalSeparator", "disableAbbreviation", "disabled", "disableMacros", "step", "thousandSeparator", "value", "onSave", "onCancel", "className", "allowEmptyValue", "onEnterKeyPress", "onClick", "onChange"];
17716
+ var _excluded$c = ["decimalLength", "decimalSeparator", "disableAbbreviation", "disabled", "disableMacros", "step", "thousandSeparator", "value", "onSave", "onCancel", "className", "allowEmptyValue", "onEnterKeyPress", "onClick", "onChange", "trimDecimals"];
17692
17717
  var EditableCurrency = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
17693
17718
  var _ref$decimalLength = _ref.decimalLength,
17694
17719
  decimalLength = _ref$decimalLength === void 0 ? 2 : _ref$decimalLength,
@@ -17711,6 +17736,8 @@
17711
17736
  externalEnterKeyPress = _ref.onEnterKeyPress,
17712
17737
  externalOnClick = _ref.onClick,
17713
17738
  externalOnChange = _ref.onChange,
17739
+ _ref$trimDecimals = _ref.trimDecimals,
17740
+ trimDecimals = _ref$trimDecimals === void 0 ? true : _ref$trimDecimals,
17714
17741
  rest = _objectWithoutProperties(_ref, _excluded$c);
17715
17742
  var inputRef = React.useRef(null);
17716
17743
  var handleRef = useForkRef(ref, inputRef);
@@ -17727,7 +17754,8 @@
17727
17754
  onCancel,
17728
17755
  onChange: externalOnChange,
17729
17756
  onEnterKeyPress: externalEnterKeyPress,
17730
- onClick: externalOnClick
17757
+ onClick: externalOnClick,
17758
+ trimDecimals
17731
17759
  }, inputRef),
17732
17760
  inputProps = _useInputNumber.inputProps;
17733
17761
  var value = inputProps.value,
@@ -17740,10 +17768,10 @@
17740
17768
  focused = inputProps.focused,
17741
17769
  unformattedValue = inputProps.unformattedValue;
17742
17770
  var formattedValue = React.useMemo(function () {
17743
- return focused ? value : numberWithSeparator(value !== null && value !== void 0 ? value : "", thousandSeparator);
17744
- }, [focused, value, thousandSeparator]);
17771
+ return focused ? value : numberWithSeparator(value !== null && value !== void 0 ? value : "", thousandSeparator, decimalSeparator);
17772
+ }, [focused, value, thousandSeparator, decimalSeparator]);
17745
17773
  return /*#__PURE__*/React__default["default"].createElement(Tooltip, {
17746
- title: unformattedValue,
17774
+ title: numberWithSeparator(unformattedValue !== null && unformattedValue !== void 0 ? unformattedValue : "", thousandSeparator, decimalSeparator),
17747
17775
  disable: focused
17748
17776
  }, /*#__PURE__*/React__default["default"].createElement(EditableContent, {
17749
17777
  disabled: disabled,