@activecollab/components 2.0.159 → 2.0.161
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/CounterButton/Styles.js +4 -2
- package/dist/cjs/components/CounterButton/Styles.js.map +1 -1
- package/dist/cjs/components/EntitiesHeader/EntitiesHeader.js +12 -5
- package/dist/cjs/components/EntitiesHeader/EntitiesHeader.js.map +1 -1
- package/dist/cjs/components/EntitiesHeader/Styles.js +6 -3
- package/dist/cjs/components/EntitiesHeader/Styles.js.map +1 -1
- package/dist/cjs/components/ProgressRing/ProgressRing.js +3 -1
- package/dist/cjs/components/ProgressRing/ProgressRing.js.map +1 -1
- package/dist/cjs/hooks/useInputHours.js +3 -0
- package/dist/cjs/hooks/useInputHours.js.map +1 -1
- package/dist/cjs/hooks/useInputNumber.js +3 -0
- package/dist/cjs/hooks/useInputNumber.js.map +1 -1
- package/dist/esm/components/CounterButton/Styles.d.ts.map +1 -1
- package/dist/esm/components/CounterButton/Styles.js +2 -2
- package/dist/esm/components/CounterButton/Styles.js.map +1 -1
- package/dist/esm/components/EntitiesHeader/EntitiesHeader.d.ts +1 -0
- package/dist/esm/components/EntitiesHeader/EntitiesHeader.d.ts.map +1 -1
- package/dist/esm/components/EntitiesHeader/EntitiesHeader.js +11 -5
- package/dist/esm/components/EntitiesHeader/EntitiesHeader.js.map +1 -1
- package/dist/esm/components/EntitiesHeader/Styles.d.ts +3 -1
- package/dist/esm/components/EntitiesHeader/Styles.d.ts.map +1 -1
- package/dist/esm/components/EntitiesHeader/Styles.js +8 -3
- package/dist/esm/components/EntitiesHeader/Styles.js.map +1 -1
- package/dist/esm/components/ProgressRing/ProgressRing.d.ts.map +1 -1
- package/dist/esm/components/ProgressRing/ProgressRing.js +3 -1
- package/dist/esm/components/ProgressRing/ProgressRing.js.map +1 -1
- package/dist/esm/hooks/useInputHours.d.ts.map +1 -1
- package/dist/esm/hooks/useInputHours.js +3 -0
- package/dist/esm/hooks/useInputHours.js.map +1 -1
- package/dist/esm/hooks/useInputNumber.d.ts.map +1 -1
- package/dist/esm/hooks/useInputNumber.js +3 -0
- package/dist/esm/hooks/useInputNumber.js.map +1 -1
- package/dist/index.js +31 -11
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -7,13 +7,14 @@ export const EntitiesHeader = _ref => {
|
|
|
7
7
|
title,
|
|
8
8
|
children,
|
|
9
9
|
expanded = true,
|
|
10
|
+
readOnly = false,
|
|
10
11
|
className
|
|
11
12
|
} = _ref;
|
|
12
13
|
const ref = useRef(null);
|
|
13
|
-
const [open, setOpen] = useState(expanded);
|
|
14
|
+
const [open, setOpen] = useState(expanded || readOnly);
|
|
14
15
|
useEffect(() => {
|
|
15
|
-
setOpen(expanded);
|
|
16
|
-
}, [expanded]);
|
|
16
|
+
setOpen(expanded || readOnly);
|
|
17
|
+
}, [expanded, readOnly]);
|
|
17
18
|
const handleOnClick = useCallback(() => {
|
|
18
19
|
var _ref$current;
|
|
19
20
|
(_ref$current = ref.current) == null || _ref$current.focus();
|
|
@@ -25,16 +26,21 @@ export const EntitiesHeader = _ref => {
|
|
|
25
26
|
tabIndex: 0,
|
|
26
27
|
ref: ref,
|
|
27
28
|
$expanded: open
|
|
28
|
-
}, /*#__PURE__*/React.createElement(Button, {
|
|
29
|
+
}, !readOnly ? /*#__PURE__*/React.createElement(Button, {
|
|
29
30
|
variant: "text gray",
|
|
30
31
|
size: "small",
|
|
31
32
|
onClick: handleOnClick
|
|
32
33
|
}, /*#__PURE__*/React.createElement(StyledCollapseExpandSingleIcon, {
|
|
33
34
|
$expanded: open
|
|
34
35
|
}), /*#__PURE__*/React.createElement(StyledTitle, {
|
|
36
|
+
$readOnly: readOnly,
|
|
35
37
|
color: "secondary",
|
|
36
38
|
weight: "medium"
|
|
37
|
-
}, title))
|
|
39
|
+
}, title)) : /*#__PURE__*/React.createElement(StyledTitle, {
|
|
40
|
+
$readOnly: readOnly,
|
|
41
|
+
color: "secondary",
|
|
42
|
+
weight: "medium"
|
|
43
|
+
}, title), !open && /*#__PURE__*/React.createElement(StyledDividerLine, {
|
|
38
44
|
"data-testid": "divider-line"
|
|
39
45
|
}), open && /*#__PURE__*/React.createElement(StyledChildrenWrapper, null, children));
|
|
40
46
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntitiesHeader.js","names":["React","useCallback","useEffect","useRef","useState","StyledChildrenWrapper","StyledCollapseExpandSingleIcon","StyledDividerLine","StyledTitle","StyledWrapper","Button","EntitiesHeader","_ref","onClick","title","children","expanded","className","ref","open","setOpen","handleOnClick","_ref$current","current","focus","prev","createElement","tabIndex","$expanded","variant","size","color","weight"],"sources":["../../../../src/components/EntitiesHeader/EntitiesHeader.tsx"],"sourcesContent":["import React, {\n ReactNode,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport {\n StyledChildrenWrapper,\n StyledCollapseExpandSingleIcon,\n StyledDividerLine,\n StyledTitle,\n StyledWrapper,\n} from \"./Styles\";\nimport { Button } from \"../Button\";\n\nexport interface EntitiesHeaderProps {\n className?: string;\n title: ReactNode;\n expanded?: boolean;\n onClick?: () => void;\n children?: ReactNode;\n}\n\nexport const EntitiesHeader: React.FC<EntitiesHeaderProps> = ({\n onClick,\n title,\n children,\n expanded = true,\n className,\n}) => {\n const ref = useRef<HTMLDivElement | null>(null);\n const [open, setOpen] = useState(expanded);\n\n useEffect(() => {\n setOpen(expanded);\n }, [expanded]);\n\n const handleOnClick = useCallback(() => {\n ref.current?.focus();\n setOpen((prev) => !prev);\n if (onClick) onClick();\n }, [onClick]);\n\n return (\n <StyledWrapper\n className={className}\n tabIndex={0}\n ref={ref}\n $expanded={open}\n >\n <Button variant=\"text gray\" size=\"small\" onClick={handleOnClick}>\n
|
|
1
|
+
{"version":3,"file":"EntitiesHeader.js","names":["React","useCallback","useEffect","useRef","useState","StyledChildrenWrapper","StyledCollapseExpandSingleIcon","StyledDividerLine","StyledTitle","StyledWrapper","Button","EntitiesHeader","_ref","onClick","title","children","expanded","readOnly","className","ref","open","setOpen","handleOnClick","_ref$current","current","focus","prev","createElement","tabIndex","$expanded","variant","size","$readOnly","color","weight"],"sources":["../../../../src/components/EntitiesHeader/EntitiesHeader.tsx"],"sourcesContent":["import React, {\n ReactNode,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport {\n StyledChildrenWrapper,\n StyledCollapseExpandSingleIcon,\n StyledDividerLine,\n StyledTitle,\n StyledWrapper,\n} from \"./Styles\";\nimport { Button } from \"../Button\";\n\nexport interface EntitiesHeaderProps {\n className?: string;\n title: ReactNode;\n expanded?: boolean;\n onClick?: () => void;\n children?: ReactNode;\n readOnly?: boolean;\n}\n\nexport const EntitiesHeader: React.FC<EntitiesHeaderProps> = ({\n onClick,\n title,\n children,\n expanded = true,\n readOnly = false,\n className,\n}) => {\n const ref = useRef<HTMLDivElement | null>(null);\n const [open, setOpen] = useState(expanded || readOnly);\n\n useEffect(() => {\n setOpen(expanded || readOnly);\n }, [expanded, readOnly]);\n\n const handleOnClick = useCallback(() => {\n ref.current?.focus();\n setOpen((prev) => !prev);\n if (onClick) onClick();\n }, [onClick]);\n\n return (\n <StyledWrapper\n className={className}\n tabIndex={0}\n ref={ref}\n $expanded={open}\n >\n {!readOnly ? (\n <Button variant=\"text gray\" size=\"small\" onClick={handleOnClick}>\n <StyledCollapseExpandSingleIcon $expanded={open} />\n <StyledTitle $readOnly={readOnly} color=\"secondary\" weight=\"medium\">\n {title}\n </StyledTitle>\n </Button>\n ) : (\n <StyledTitle $readOnly={readOnly} color=\"secondary\" weight=\"medium\">\n {title}\n </StyledTitle>\n )}\n {!open && <StyledDividerLine data-testid=\"divider-line\" />}\n {open && <StyledChildrenWrapper>{children}</StyledChildrenWrapper>}\n </StyledWrapper>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAEVC,WAAW,EACXC,SAAS,EACTC,MAAM,EACNC,QAAQ,QACH,OAAO;AAEd,SACEC,qBAAqB,EACrBC,8BAA8B,EAC9BC,iBAAiB,EACjBC,WAAW,EACXC,aAAa,QACR,UAAU;AACjB,SAASC,MAAM,QAAQ,WAAW;AAWlC,OAAO,MAAMC,cAA6C,GAAGC,IAAA,IAOvD;EAAA,IAPwD;IAC5DC,OAAO;IACPC,KAAK;IACLC,QAAQ;IACRC,QAAQ,GAAG,IAAI;IACfC,QAAQ,GAAG,KAAK;IAChBC;EACF,CAAC,GAAAN,IAAA;EACC,MAAMO,GAAG,GAAGhB,MAAM,CAAwB,IAAI,CAAC;EAC/C,MAAM,CAACiB,IAAI,EAAEC,OAAO,CAAC,GAAGjB,QAAQ,CAACY,QAAQ,IAAIC,QAAQ,CAAC;EAEtDf,SAAS,CAAC,MAAM;IACdmB,OAAO,CAACL,QAAQ,IAAIC,QAAQ,CAAC;EAC/B,CAAC,EAAE,CAACD,QAAQ,EAAEC,QAAQ,CAAC,CAAC;EAExB,MAAMK,aAAa,GAAGrB,WAAW,CAAC,MAAM;IAAA,IAAAsB,YAAA;IACtC,CAAAA,YAAA,GAAAJ,GAAG,CAACK,OAAO,aAAXD,YAAA,CAAaE,KAAK,CAAC,CAAC;IACpBJ,OAAO,CAAEK,IAAI,IAAK,CAACA,IAAI,CAAC;IACxB,IAAIb,OAAO,EAAEA,OAAO,CAAC,CAAC;EACxB,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;EAEb,oBACEb,KAAA,CAAA2B,aAAA,CAAClB,aAAa;IACZS,SAAS,EAAEA,SAAU;IACrBU,QAAQ,EAAE,CAAE;IACZT,GAAG,EAAEA,GAAI;IACTU,SAAS,EAAET;EAAK,GAEf,CAACH,QAAQ,gBACRjB,KAAA,CAAA2B,aAAA,CAACjB,MAAM;IAACoB,OAAO,EAAC,WAAW;IAACC,IAAI,EAAC,OAAO;IAAClB,OAAO,EAAES;EAAc,gBAC9DtB,KAAA,CAAA2B,aAAA,CAACrB,8BAA8B;IAACuB,SAAS,EAAET;EAAK,CAAE,CAAC,eACnDpB,KAAA,CAAA2B,aAAA,CAACnB,WAAW;IAACwB,SAAS,EAAEf,QAAS;IAACgB,KAAK,EAAC,WAAW;IAACC,MAAM,EAAC;EAAQ,GAChEpB,KACU,CACP,CAAC,gBAETd,KAAA,CAAA2B,aAAA,CAACnB,WAAW;IAACwB,SAAS,EAAEf,QAAS;IAACgB,KAAK,EAAC,WAAW;IAACC,MAAM,EAAC;EAAQ,GAChEpB,KACU,CACd,EACA,CAACM,IAAI,iBAAIpB,KAAA,CAAA2B,aAAA,CAACpB,iBAAiB;IAAC,eAAY;EAAc,CAAE,CAAC,EACzDa,IAAI,iBAAIpB,KAAA,CAAA2B,aAAA,CAACtB,qBAAqB,QAAEU,QAAgC,CACpD,CAAC;AAEpB,CAAC"}
|
|
@@ -3,7 +3,9 @@ export declare const StyledChildrenWrapper: import("styled-components").StyledCo
|
|
|
3
3
|
export declare const StyledWrapper: import("styled-components").StyledComponent<"div", any, {
|
|
4
4
|
$expanded: boolean;
|
|
5
5
|
}, never>;
|
|
6
|
-
export declare const StyledTitle: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("../Typography").IBodyProps & Omit<import("../Typography/Typography").ITypographyProps, "variant" | "weight"> & import("react").RefAttributes<HTMLDivElement>>, any, {
|
|
6
|
+
export declare const StyledTitle: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("../Typography").IBodyProps & Omit<import("../Typography/Typography").ITypographyProps, "variant" | "weight"> & import("react").RefAttributes<HTMLDivElement>>, any, {
|
|
7
|
+
$readOnly: boolean;
|
|
8
|
+
}, never>;
|
|
7
9
|
export declare const StyledDividerLine: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
8
10
|
export declare const StyledCollapseExpandSingleIcon: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<Omit<import("react").SVGProps<SVGSVGElement>, "ref"> & import("react").RefAttributes<SVGSVGElement>>, any, {
|
|
9
11
|
$expanded: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Styles.d.ts","sourceRoot":"","sources":["../../../../src/components/EntitiesHeader/Styles.ts"],"names":[],"mappings":";AAMA,eAAO,MAAM,qBAAqB,oEAEjC,CAAC;AAIF,eAAO,MAAM,aAAa;eAA2B,OAAO;SAI3D,CAAC;AAIF,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"Styles.d.ts","sourceRoot":"","sources":["../../../../src/components/EntitiesHeader/Styles.ts"],"names":[],"mappings":";AAMA,eAAO,MAAM,qBAAqB,oEAEjC,CAAC;AAIF,eAAO,MAAM,aAAa;eAA2B,OAAO;SAI3D,CAAC;AAIF,eAAO,MAAM,WAAW;eAA8B,OAAO;SAG5D,CAAC;AAIF,eAAO,MAAM,iBAAiB,oEAG7B,CAAC;AAIF,eAAO,MAAM,8BAA8B;eAC9B,OAAO;SAMnB,CAAC"}
|
|
@@ -26,10 +26,15 @@ StyledWrapper.displayName = "StyledWrapper";
|
|
|
26
26
|
export const StyledTitle = styled(Body2).withConfig({
|
|
27
27
|
displayName: "Styles__StyledTitle",
|
|
28
28
|
componentId: "sc-13n85xv-2"
|
|
29
|
-
})(["", ""], {
|
|
29
|
+
})(["", " cursor:", ";"], {
|
|
30
30
|
"overflow": "hidden",
|
|
31
31
|
"textOverflow": "ellipsis",
|
|
32
32
|
"whiteSpace": "nowrap"
|
|
33
|
+
}, _ref2 => {
|
|
34
|
+
let {
|
|
35
|
+
$readOnly
|
|
36
|
+
} = _ref2;
|
|
37
|
+
return $readOnly ? "default" : "pointer";
|
|
33
38
|
});
|
|
34
39
|
StyledTitle.displayName = "StyledTitle";
|
|
35
40
|
export const StyledDividerLine = styled.div.withConfig({
|
|
@@ -45,10 +50,10 @@ export const StyledCollapseExpandSingleIcon = styled(CollapseExpandSingleIcon).w
|
|
|
45
50
|
})(["", " transform:", ";transition:all 0.2s ease;"], {
|
|
46
51
|
"marginRight": "0.25rem",
|
|
47
52
|
"cursor": "pointer"
|
|
48
|
-
},
|
|
53
|
+
}, _ref3 => {
|
|
49
54
|
let {
|
|
50
55
|
$expanded
|
|
51
|
-
} =
|
|
56
|
+
} = _ref3;
|
|
52
57
|
return $expanded ? "rotate(0deg)" : "rotate(180deg)";
|
|
53
58
|
});
|
|
54
59
|
StyledCollapseExpandSingleIcon.displayName = "StyledCollapseExpandSingleIcon";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Styles.js","names":["styled","CollapseExpandSingleIcon","Body2","StyledChildrenWrapper","div","withConfig","displayName","componentId","StyledWrapper","_ref","$expanded","StyledTitle","StyledDividerLine","StyledCollapseExpandSingleIcon","
|
|
1
|
+
{"version":3,"file":"Styles.js","names":["styled","CollapseExpandSingleIcon","Body2","StyledChildrenWrapper","div","withConfig","displayName","componentId","StyledWrapper","_ref","$expanded","StyledTitle","_ref2","$readOnly","StyledDividerLine","StyledCollapseExpandSingleIcon","_ref3"],"sources":["../../../../src/components/EntitiesHeader/Styles.ts"],"sourcesContent":["import styled from \"styled-components\";\nimport tw from \"twin.macro\";\n\nimport { CollapseExpandSingleIcon } from \"../Icons\";\nimport { Body2 } from \"../Typography\";\n\nexport const StyledChildrenWrapper = styled.div`\n ${tw`tw-shrink-0`}\n`;\n\nStyledChildrenWrapper.displayName = \"StyledChildrenWrapper\";\n\nexport const StyledWrapper = styled.div<{ $expanded: boolean }>`\n ${tw`tw-flex tw-items-center tw-mb-4 tw-gap-4`}\n justify-content: ${({ $expanded }) =>\n $expanded ? \"space-between\" : \"flex-start\"};\n`;\n\nStyledWrapper.displayName = \"StyledWrapper\";\n\nexport const StyledTitle = styled(Body2)<{ $readOnly: boolean }>`\n ${tw`tw-truncate`}\n cursor: ${({ $readOnly }) => ($readOnly ? \"default\" : \"pointer\")};\n`;\n\nStyledTitle.displayName = \"StyledTitle\";\n\nexport const StyledDividerLine = styled.div`\n ${tw`tw-flex-1`}\n border-top: 1px solid var(--border-primary);\n`;\n\nStyledDividerLine.displayName = \"StyledDividerLine\";\n\nexport const StyledCollapseExpandSingleIcon = styled(CollapseExpandSingleIcon)<{\n $expanded: boolean;\n}>`\n ${tw`tw-cursor-pointer tw-mr-1`}\n transform: ${({ $expanded }) =>\n $expanded ? \"rotate(0deg)\" : \"rotate(180deg)\"};\n transition: all 0.2s ease;\n`;\n\nStyledCollapseExpandSingleIcon.displayName = \"StyledCollapseExpandSingleIcon\";\n"],"mappings":"AAAA,OAAOA,MAAM,MAAM,mBAAmB;AAGtC,SAASC,wBAAwB,QAAQ,UAAU;AACnD,SAASC,KAAK,QAAQ,eAAe;AAErC,OAAO,MAAMC,qBAAqB,GAAGH,MAAM,CAACI,GAAG,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,aACzC;EAAA;AAAY,CAAC,CAClB;AAEDJ,qBAAqB,CAACG,WAAW,GAAG,uBAAuB;AAE3D,OAAO,MAAME,aAAa,GAAGR,MAAM,CAACI,GAAG,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,mCACjC;EAAA;EAAA;EAAA;EAAA;AAAyC,CAAC,EAC3BE,IAAA;EAAA,IAAC;IAAEC;EAAU,CAAC,GAAAD,IAAA;EAAA,OAC/BC,SAAS,GAAG,eAAe,GAAG,YAAY;AAAA,EAC7C;AAEDF,aAAa,CAACF,WAAW,GAAG,eAAe;AAE3C,OAAO,MAAMK,WAAW,GAAGX,MAAM,CAACE,KAAK,CAAC,CAAAG,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,0BAClC;EAAA;EAAA;EAAA;AAAY,CAAC,EACPK,KAAA;EAAA,IAAC;IAAEC;EAAU,CAAC,GAAAD,KAAA;EAAA,OAAMC,SAAS,GAAG,SAAS,GAAG,SAAS;AAAA,CAAC,CACjE;AAEDF,WAAW,CAACL,WAAW,GAAG,aAAa;AAEvC,OAAO,MAAMQ,iBAAiB,GAAGd,MAAM,CAACI,GAAG,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,yDACrC;EAAA;AAAU,CAAC,CAEhB;AAEDO,iBAAiB,CAACR,WAAW,GAAG,mBAAmB;AAEnD,OAAO,MAAMS,8BAA8B,GAAGf,MAAM,CAACC,wBAAwB,CAAC,CAAAI,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,sDAGxE;EAAA;EAAA;AAA0B,CAAC,EAClBS,KAAA;EAAA,IAAC;IAAEN;EAAU,CAAC,GAAAM,KAAA;EAAA,OACzBN,SAAS,GAAG,cAAc,GAAG,gBAAgB;AAAA,EAEhD;AAEDK,8BAA8B,CAACT,WAAW,GAAG,gCAAgC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProgressRing.d.ts","sourceRoot":"","sources":["../../../../src/components/ProgressRing/ProgressRing.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAW,MAAM,OAAO,CAAC;AAalD,MAAM,WAAW,mBAAmB;IAClC,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB;IAC5D,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,eAAO,MAAM,cAAc,oHAUxB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"ProgressRing.d.ts","sourceRoot":"","sources":["../../../../src/components/ProgressRing/ProgressRing.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAW,MAAM,OAAO,CAAC;AAalD,MAAM,WAAW,mBAAmB;IAClC,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB;IAC5D,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,eAAO,MAAM,cAAc,oHAUxB,mBAAmB,sBAsErB,CAAC;AAEF,eAAO,MAAM,YAAY;uCAItB,iBAAiB;;CAYnB,CAAC"}
|
|
@@ -34,7 +34,9 @@ export const ProgressCircle = _ref => {
|
|
|
34
34
|
return /*#__PURE__*/React.createElement(StyledSvg, {
|
|
35
35
|
height: radius * 2,
|
|
36
36
|
width: radius * 2,
|
|
37
|
-
className: className
|
|
37
|
+
className: className,
|
|
38
|
+
"data-progress": progressNumber,
|
|
39
|
+
"data-testid": "progress-circle"
|
|
38
40
|
}, /*#__PURE__*/React.createElement(StyledBackgroundCircle, {
|
|
39
41
|
$color: backgroundColor,
|
|
40
42
|
$strokeDashOffset: -strokeDashoffsetOuter,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProgressRing.js","names":["React","useMemo","classNames","StyledWrapper","StyledChildrenWrapper","StyledBackgroundCircle","StyledForegroundCircle","StyledSvg","StyledProgressRingPercentage","ProgressCircle","_ref","backgroundColor","progressColor","progress","radius","stroke","roundStroke","className","showPercentage","fontSize","console","warn","progressNumber","width","normalizedRadius","circumference","Math","PI","strokeDashoffsetOuter","strokeDashoffsetInner","createElement","height","$color","$strokeDashOffset","strokeWidth","strokeDasharray","r","cx","cy","$roundStroke","$fontSize","x","y","dominantBaseline","textAnchor","ProgressRing","_ref2","children","rest","displayName"],"sources":["../../../../src/components/ProgressRing/ProgressRing.tsx"],"sourcesContent":["import React, { ReactNode, useMemo } from \"react\";\n\nimport classNames from \"classnames\";\n\nimport {\n StyledWrapper,\n StyledChildrenWrapper,\n StyledBackgroundCircle,\n StyledForegroundCircle,\n StyledSvg,\n StyledProgressRingPercentage,\n} from \"./Styles\";\n\nexport interface ProgressCircleProps {\n /** Progress prop can be number */\n progress?: number;\n /** Background color */\n backgroundColor?: string;\n /** Progress color */\n progressColor?: string;\n /** Radius size */\n radius?: number;\n /** Stroke size */\n stroke?: number;\n /** Should stroke line be rounded */\n roundStroke?: boolean;\n /** Applies passed classes */\n className?: string;\n /** Should the percentage be displayed inside ring or not */\n showPercentage?: boolean;\n /** Size of displayed percentage */\n fontSize?: number;\n}\n\nexport interface ProgressRingProps extends ProgressCircleProps {\n children?: ReactNode;\n}\n\nexport const ProgressCircle = ({\n backgroundColor,\n progressColor,\n progress = 0,\n radius = 20,\n stroke = 3,\n roundStroke = false,\n className,\n showPercentage = false,\n fontSize,\n}: ProgressCircleProps) => {\n if (stroke > radius) {\n console.warn(\"Stroke can not have value greater than the radius.\");\n stroke = radius;\n }\n const progressNumber = useMemo(() => {\n let width = progress;\n if (progress > 100) {\n width = 100;\n }\n if (progress < 0) {\n width = 0;\n }\n return width;\n }, [progress]);\n\n const normalizedRadius = useMemo(() => radius - stroke / 2, [radius, stroke]);\n const circumference = useMemo(\n () => normalizedRadius * 2 * Math.PI,\n [normalizedRadius]\n );\n const strokeDashoffsetOuter = useMemo(\n () => circumference - ((100 - progressNumber) / 100) * circumference,\n [circumference, progressNumber]\n );\n const strokeDashoffsetInner = useMemo(\n () => circumference - (progressNumber / 100) * circumference,\n [circumference, progressNumber]\n );\n return (\n <StyledSvg
|
|
1
|
+
{"version":3,"file":"ProgressRing.js","names":["React","useMemo","classNames","StyledWrapper","StyledChildrenWrapper","StyledBackgroundCircle","StyledForegroundCircle","StyledSvg","StyledProgressRingPercentage","ProgressCircle","_ref","backgroundColor","progressColor","progress","radius","stroke","roundStroke","className","showPercentage","fontSize","console","warn","progressNumber","width","normalizedRadius","circumference","Math","PI","strokeDashoffsetOuter","strokeDashoffsetInner","createElement","height","$color","$strokeDashOffset","strokeWidth","strokeDasharray","r","cx","cy","$roundStroke","$fontSize","x","y","dominantBaseline","textAnchor","ProgressRing","_ref2","children","rest","displayName"],"sources":["../../../../src/components/ProgressRing/ProgressRing.tsx"],"sourcesContent":["import React, { ReactNode, useMemo } from \"react\";\n\nimport classNames from \"classnames\";\n\nimport {\n StyledWrapper,\n StyledChildrenWrapper,\n StyledBackgroundCircle,\n StyledForegroundCircle,\n StyledSvg,\n StyledProgressRingPercentage,\n} from \"./Styles\";\n\nexport interface ProgressCircleProps {\n /** Progress prop can be number */\n progress?: number;\n /** Background color */\n backgroundColor?: string;\n /** Progress color */\n progressColor?: string;\n /** Radius size */\n radius?: number;\n /** Stroke size */\n stroke?: number;\n /** Should stroke line be rounded */\n roundStroke?: boolean;\n /** Applies passed classes */\n className?: string;\n /** Should the percentage be displayed inside ring or not */\n showPercentage?: boolean;\n /** Size of displayed percentage */\n fontSize?: number;\n}\n\nexport interface ProgressRingProps extends ProgressCircleProps {\n children?: ReactNode;\n}\n\nexport const ProgressCircle = ({\n backgroundColor,\n progressColor,\n progress = 0,\n radius = 20,\n stroke = 3,\n roundStroke = false,\n className,\n showPercentage = false,\n fontSize,\n}: ProgressCircleProps) => {\n if (stroke > radius) {\n console.warn(\"Stroke can not have value greater than the radius.\");\n stroke = radius;\n }\n const progressNumber = useMemo(() => {\n let width = progress;\n if (progress > 100) {\n width = 100;\n }\n if (progress < 0) {\n width = 0;\n }\n return width;\n }, [progress]);\n\n const normalizedRadius = useMemo(() => radius - stroke / 2, [radius, stroke]);\n const circumference = useMemo(\n () => normalizedRadius * 2 * Math.PI,\n [normalizedRadius]\n );\n const strokeDashoffsetOuter = useMemo(\n () => circumference - ((100 - progressNumber) / 100) * circumference,\n [circumference, progressNumber]\n );\n const strokeDashoffsetInner = useMemo(\n () => circumference - (progressNumber / 100) * circumference,\n [circumference, progressNumber]\n );\n return (\n <StyledSvg\n height={radius * 2}\n width={radius * 2}\n className={className}\n data-progress={progressNumber}\n data-testid=\"progress-circle\"\n >\n <StyledBackgroundCircle\n $color={backgroundColor}\n $strokeDashOffset={-strokeDashoffsetOuter}\n strokeWidth={stroke}\n strokeDasharray={`${circumference} ${circumference}`}\n r={normalizedRadius}\n cx={radius}\n cy={radius}\n />\n <StyledForegroundCircle\n $color={progressColor}\n $strokeDashOffset={strokeDashoffsetInner}\n strokeWidth={stroke}\n strokeDasharray={`${circumference} ${circumference}`}\n $roundStroke={roundStroke}\n r={normalizedRadius}\n cx={radius}\n cy={radius}\n />\n {showPercentage ? (\n <StyledProgressRingPercentage\n $color={progressColor}\n $fontSize={fontSize}\n x=\"50%\"\n y=\"-50%\"\n dominantBaseline=\"central\"\n textAnchor=\"middle\"\n >\n {progressNumber}%\n </StyledProgressRingPercentage>\n ) : null}\n </StyledSvg>\n );\n};\n\nexport const ProgressRing = ({\n className,\n children,\n ...rest\n}: ProgressRingProps) => {\n return (\n <StyledWrapper\n className={classNames(className)}\n data-testid=\"progress-ring\"\n >\n <ProgressCircle {...rest} />\n {children ? (\n <StyledChildrenWrapper>{children}</StyledChildrenWrapper>\n ) : null}\n </StyledWrapper>\n );\n};\n\nProgressRing.displayName = \"ProgressRing\";\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInputHours.d.ts","sourceRoot":"","sources":["../../../src/hooks/useInputHours.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAKT,UAAU,EACX,MAAM,OAAO,CAAC;AAKf,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAC5B,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,OAAA,KAAK,OAAO,CAAC;IAClC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,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;CACzD;AAED,eAAO,MAAM,aAAa,2JAarB,WAAW,YACJ,UAAU,gBAAgB,GAAG,IAAI,CAAC;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"useInputHours.d.ts","sourceRoot":"","sources":["../../../src/hooks/useInputHours.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAKT,UAAU,EACX,MAAM,OAAO,CAAC;AAKf,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAC5B,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,OAAA,KAAK,OAAO,CAAC;IAClC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,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;CACzD;AAED,eAAO,MAAM,aAAa,2JAarB,WAAW,YACJ,UAAU,gBAAgB,GAAG,IAAI,CAAC;;;;;;;;;;;CAoR7C,CAAC"}
|
|
@@ -116,6 +116,9 @@ export const useInputHours = (_ref, inputRef) => {
|
|
|
116
116
|
if (e.key === "Backspace") {
|
|
117
117
|
return;
|
|
118
118
|
}
|
|
119
|
+
if (e.key === "Delete") {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
119
122
|
if ((e.metaKey || e.ctrlKey) && e.key === "a") {
|
|
120
123
|
var _inputRef$current2;
|
|
121
124
|
(_inputRef$current2 = inputRef.current) == null || _inputRef$current2.select();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInputHours.js","names":["useCallback","useMemo","useRef","useState","formatHours","validateTimeInput","useInputHours","_ref","inputRef","value","withLeadingZero","onSave","validation","allowEmptyValue","onCancel","minuteIncrement","incrementOnlySelected","onEnterKeyPress","onChange","onClick","currentValue","setCurrentValue","prevValue","setPrevValue","escapeRef","handleBlur","e","current","target","trim","length","_value","handleIncrementDecrement","increment","selectionStart","dotsIndex","indexOf","hours","minutes","split","map","Number","newHours","newMinutes","newMinutesString","newHoursString","newValue","requestAnimationFrame","_inputRef$current","newDotsIndex","isHoursSelected","newSelectionStart","selectionEnd","setSelectionRange","handleKeyDown","key","blur","metaKey","ctrlKey","_inputRef$current2","select","input","start","end","shiftKey","isMinutesSelected","_inputRef$current3","preventDefault","_inputRef$current4","substring","handleChange","handleClick","_inputRef$current5","_inputRef$current6","_inputRef$current7","handleDoubleClick","_inputRef$current8","inputProps","onBlur","onKeyDown","onDoubleClick"],"sources":["../../../src/hooks/useInputHours.tsx"],"sourcesContent":["import {\n RefObject,\n useCallback,\n useMemo,\n useRef,\n useState,\n MouseEvent,\n} from \"react\";\n\nimport { formatHours } from \"../utils\";\nimport { validateTimeInput } from \"../utils\";\n\nexport interface IInputHours {\n value?: string | number;\n withLeadingZero?: boolean;\n onSave?: (e: Event) => void;\n validation?: (...args) => boolean;\n allowEmptyValue?: boolean;\n onCancel?: (e: Event) => void;\n minuteIncrement?: number;\n incrementOnlySelected?: boolean;\n onEnterKeyPress?: (val: string) => void;\n onChange?: (val: string) => void;\n onClick?: (event: MouseEvent<HTMLInputElement>) => void;\n}\n\nexport const useInputHours = (\n {\n value,\n withLeadingZero,\n onSave,\n validation = validateTimeInput,\n allowEmptyValue,\n onCancel,\n minuteIncrement = 1,\n incrementOnlySelected,\n onEnterKeyPress,\n onChange,\n onClick,\n }: IInputHours,\n inputRef: RefObject<HTMLInputElement | null>\n) => {\n const [currentValue, setCurrentValue] = useState(() =>\n formatHours(value, withLeadingZero)\n );\n const [prevValue, setPrevValue] = useState(() =>\n formatHours(value, withLeadingZero)\n );\n\n const escapeRef = useRef(false);\n\n const handleBlur = useCallback(\n (e) => {\n if (escapeRef.current) {\n setCurrentValue(prevValue);\n } else {\n if (e.target.value.trim().length > 0 && prevValue !== e.target.value) {\n const _value = formatHours(e.target.value, withLeadingZero);\n setPrevValue(_value);\n setCurrentValue(_value);\n typeof onSave === \"function\" && onSave(e);\n } else {\n if (!allowEmptyValue) {\n setCurrentValue(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 },\n [allowEmptyValue, onCancel, onSave, prevValue, withLeadingZero]\n );\n\n const handleIncrementDecrement = useCallback(\n (increment: boolean) => {\n if (inputRef.current) {\n const selectionStart = inputRef.current.selectionStart;\n if (selectionStart !== null) {\n const dotsIndex = currentValue.indexOf(\":\");\n const [hours, minutes] = currentValue.split(\":\").map(Number);\n let newHours = hours;\n let newMinutes = minutes;\n\n if (selectionStart < dotsIndex) {\n if (increment) {\n newHours += 1;\n } else {\n newHours -= 1;\n if (newHours < 0) newHours = 0;\n }\n } else if (selectionStart > dotsIndex) {\n if (increment) {\n newMinutes += minuteIncrement;\n if (newMinutes > 59) {\n newMinutes = 0;\n if (!incrementOnlySelected) newHours += 1;\n }\n } else {\n if (newMinutes >= minuteIncrement || newMinutes === 0) {\n newMinutes -= minuteIncrement;\n if (newMinutes < 0 && newHours > 0) {\n newMinutes = 60 - minuteIncrement;\n if (!incrementOnlySelected) newHours -= 1;\n }\n if (newHours < 0) {\n newHours = 0;\n }\n } else {\n newMinutes = 0;\n }\n }\n }\n\n const newMinutesString =\n newMinutes < 10 ? `0${newMinutes}` : newMinutes;\n const newHoursString =\n withLeadingZero && newHours < 10 ? `0${newHours}` : newHours;\n const newValue = `${newHoursString}:${newMinutesString}`;\n\n if (validation(newValue, withLeadingZero)) {\n setCurrentValue(newValue);\n\n if (onChange) onChange(newValue);\n\n requestAnimationFrame(() => {\n const newDotsIndex = newValue.indexOf(\":\");\n const isHoursSelected = selectionStart < newDotsIndex;\n const newSelectionStart = isHoursSelected ? 0 : newDotsIndex + 1;\n const selectionEnd = isHoursSelected\n ? newDotsIndex\n : newValue.length;\n inputRef.current?.setSelectionRange(\n newSelectionStart,\n selectionEnd\n );\n });\n }\n }\n }\n },\n [\n currentValue,\n incrementOnlySelected,\n inputRef,\n minuteIncrement,\n onChange,\n validation,\n withLeadingZero,\n ]\n );\n\n const handleKeyDown = useCallback(\n (e) => {\n if (e.key === \"Enter\") {\n e.target.blur();\n if (typeof onEnterKeyPress === \"function\")\n onEnterKeyPress(e.target.value);\n }\n if (e.key === \"ArrowLeft\") {\n return;\n }\n if (e.key === \"ArrowRight\") {\n return;\n }\n if (e.key === \"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 const input = e.target;\n const start = input.selectionStart;\n const end = input.selectionEnd;\n const currentValue = input.value;\n if (e.key === \"Tab\") {\n if (start !== end) {\n if (e.shiftKey) {\n const newDotsIndex = currentValue.indexOf(\":\");\n const isMinutesSelected = start > newDotsIndex;\n if (isMinutesSelected) {\n e.preventDefault();\n inputRef.current?.setSelectionRange(0, newDotsIndex);\n }\n } else {\n const newDotsIndex = currentValue.indexOf(\":\");\n const isHoursSelected = start < newDotsIndex;\n if (isHoursSelected) {\n e.preventDefault();\n inputRef.current?.setSelectionRange(\n newDotsIndex + 1,\n currentValue.length\n );\n }\n }\n }\n return;\n }\n\n if (start !== end) {\n if (e.key === \"ArrowUp\") {\n handleIncrementDecrement(true);\n return;\n }\n if (e.key === \"ArrowDown\") {\n handleIncrementDecrement(false);\n return;\n }\n const newValue =\n currentValue.substring(0, start) +\n e.key +\n currentValue.substring(end);\n if (!validation(newValue, withLeadingZero)) {\n e.preventDefault();\n return;\n }\n } else {\n const newValue =\n currentValue.substring(0, start) +\n e.key +\n currentValue.substring(end);\n\n if (!validation(newValue, withLeadingZero)) {\n e.preventDefault();\n return;\n }\n }\n },\n [\n handleIncrementDecrement,\n inputRef,\n onCancel,\n onEnterKeyPress,\n validation,\n withLeadingZero,\n ]\n );\n\n const handleChange = useCallback(\n (e) => {\n setCurrentValue(e.target.value);\n if (onChange) onChange(e.target.value);\n },\n [onChange]\n );\n\n const handleClick = useCallback(\n (e) => {\n const selectionStart = inputRef.current?.selectionStart;\n if (\n inputRef.current &&\n currentValue &&\n currentValue.length > 0 &&\n typeof selectionStart === \"number\"\n ) {\n const dotsIndex = currentValue.indexOf(\":\");\n if (selectionStart < dotsIndex) {\n inputRef.current?.setSelectionRange(0, dotsIndex);\n } else if (selectionStart >= dotsIndex) {\n inputRef.current?.setSelectionRange(\n dotsIndex + 1,\n currentValue.length\n );\n }\n }\n\n if (typeof onClick === \"function\") {\n onClick(e);\n }\n },\n [currentValue, inputRef, onClick]\n );\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 };\n }, [\n currentValue,\n handleBlur,\n handleChange,\n handleClick,\n handleDoubleClick,\n handleKeyDown,\n ]);\n\n return {\n inputProps,\n setCurrentValue,\n setPrevValue,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useInputHours.js","names":["useCallback","useMemo","useRef","useState","formatHours","validateTimeInput","useInputHours","_ref","inputRef","value","withLeadingZero","onSave","validation","allowEmptyValue","onCancel","minuteIncrement","incrementOnlySelected","onEnterKeyPress","onChange","onClick","currentValue","setCurrentValue","prevValue","setPrevValue","escapeRef","handleBlur","e","current","target","trim","length","_value","handleIncrementDecrement","increment","selectionStart","dotsIndex","indexOf","hours","minutes","split","map","Number","newHours","newMinutes","newMinutesString","newHoursString","newValue","requestAnimationFrame","_inputRef$current","newDotsIndex","isHoursSelected","newSelectionStart","selectionEnd","setSelectionRange","handleKeyDown","key","blur","metaKey","ctrlKey","_inputRef$current2","select","input","start","end","shiftKey","isMinutesSelected","_inputRef$current3","preventDefault","_inputRef$current4","substring","handleChange","handleClick","_inputRef$current5","_inputRef$current6","_inputRef$current7","handleDoubleClick","_inputRef$current8","inputProps","onBlur","onKeyDown","onDoubleClick"],"sources":["../../../src/hooks/useInputHours.tsx"],"sourcesContent":["import {\n RefObject,\n useCallback,\n useMemo,\n useRef,\n useState,\n MouseEvent,\n} from \"react\";\n\nimport { formatHours } from \"../utils\";\nimport { validateTimeInput } from \"../utils\";\n\nexport interface IInputHours {\n value?: string | number;\n withLeadingZero?: boolean;\n onSave?: (e: Event) => void;\n validation?: (...args) => boolean;\n allowEmptyValue?: boolean;\n onCancel?: (e: Event) => void;\n minuteIncrement?: number;\n incrementOnlySelected?: boolean;\n onEnterKeyPress?: (val: string) => void;\n onChange?: (val: string) => void;\n onClick?: (event: MouseEvent<HTMLInputElement>) => void;\n}\n\nexport const useInputHours = (\n {\n value,\n withLeadingZero,\n onSave,\n validation = validateTimeInput,\n allowEmptyValue,\n onCancel,\n minuteIncrement = 1,\n incrementOnlySelected,\n onEnterKeyPress,\n onChange,\n onClick,\n }: IInputHours,\n inputRef: RefObject<HTMLInputElement | null>\n) => {\n const [currentValue, setCurrentValue] = useState(() =>\n formatHours(value, withLeadingZero)\n );\n const [prevValue, setPrevValue] = useState(() =>\n formatHours(value, withLeadingZero)\n );\n\n const escapeRef = useRef(false);\n\n const handleBlur = useCallback(\n (e) => {\n if (escapeRef.current) {\n setCurrentValue(prevValue);\n } else {\n if (e.target.value.trim().length > 0 && prevValue !== e.target.value) {\n const _value = formatHours(e.target.value, withLeadingZero);\n setPrevValue(_value);\n setCurrentValue(_value);\n typeof onSave === \"function\" && onSave(e);\n } else {\n if (!allowEmptyValue) {\n setCurrentValue(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 },\n [allowEmptyValue, onCancel, onSave, prevValue, withLeadingZero]\n );\n\n const handleIncrementDecrement = useCallback(\n (increment: boolean) => {\n if (inputRef.current) {\n const selectionStart = inputRef.current.selectionStart;\n if (selectionStart !== null) {\n const dotsIndex = currentValue.indexOf(\":\");\n const [hours, minutes] = currentValue.split(\":\").map(Number);\n let newHours = hours;\n let newMinutes = minutes;\n\n if (selectionStart < dotsIndex) {\n if (increment) {\n newHours += 1;\n } else {\n newHours -= 1;\n if (newHours < 0) newHours = 0;\n }\n } else if (selectionStart > dotsIndex) {\n if (increment) {\n newMinutes += minuteIncrement;\n if (newMinutes > 59) {\n newMinutes = 0;\n if (!incrementOnlySelected) newHours += 1;\n }\n } else {\n if (newMinutes >= minuteIncrement || newMinutes === 0) {\n newMinutes -= minuteIncrement;\n if (newMinutes < 0 && newHours > 0) {\n newMinutes = 60 - minuteIncrement;\n if (!incrementOnlySelected) newHours -= 1;\n }\n if (newHours < 0) {\n newHours = 0;\n }\n } else {\n newMinutes = 0;\n }\n }\n }\n\n const newMinutesString =\n newMinutes < 10 ? `0${newMinutes}` : newMinutes;\n const newHoursString =\n withLeadingZero && newHours < 10 ? `0${newHours}` : newHours;\n const newValue = `${newHoursString}:${newMinutesString}`;\n\n if (validation(newValue, withLeadingZero)) {\n setCurrentValue(newValue);\n\n if (onChange) onChange(newValue);\n\n requestAnimationFrame(() => {\n const newDotsIndex = newValue.indexOf(\":\");\n const isHoursSelected = selectionStart < newDotsIndex;\n const newSelectionStart = isHoursSelected ? 0 : newDotsIndex + 1;\n const selectionEnd = isHoursSelected\n ? newDotsIndex\n : newValue.length;\n inputRef.current?.setSelectionRange(\n newSelectionStart,\n selectionEnd\n );\n });\n }\n }\n }\n },\n [\n currentValue,\n incrementOnlySelected,\n inputRef,\n minuteIncrement,\n onChange,\n validation,\n withLeadingZero,\n ]\n );\n\n const handleKeyDown = useCallback(\n (e) => {\n if (e.key === \"Enter\") {\n e.target.blur();\n if (typeof onEnterKeyPress === \"function\")\n onEnterKeyPress(e.target.value);\n }\n if (e.key === \"ArrowLeft\") {\n return;\n }\n if (e.key === \"ArrowRight\") {\n return;\n }\n if (e.key === \"Escape\") {\n escapeRef.current = true;\n e.target.blur();\n typeof onCancel === \"function\" && onCancel(e);\n escapeRef.current = false;\n }\n if (e.key === \"Backspace\") {\n return;\n }\n if (e.key === \"Delete\") {\n return;\n }\n if ((e.metaKey || e.ctrlKey) && e.key === \"a\") {\n inputRef.current?.select();\n return;\n }\n const input = e.target;\n const start = input.selectionStart;\n const end = input.selectionEnd;\n const currentValue = input.value;\n if (e.key === \"Tab\") {\n if (start !== end) {\n if (e.shiftKey) {\n const newDotsIndex = currentValue.indexOf(\":\");\n const isMinutesSelected = start > newDotsIndex;\n if (isMinutesSelected) {\n e.preventDefault();\n inputRef.current?.setSelectionRange(0, newDotsIndex);\n }\n } else {\n const newDotsIndex = currentValue.indexOf(\":\");\n const isHoursSelected = start < newDotsIndex;\n if (isHoursSelected) {\n e.preventDefault();\n inputRef.current?.setSelectionRange(\n newDotsIndex + 1,\n currentValue.length\n );\n }\n }\n }\n return;\n }\n\n if (start !== end) {\n if (e.key === \"ArrowUp\") {\n handleIncrementDecrement(true);\n return;\n }\n if (e.key === \"ArrowDown\") {\n handleIncrementDecrement(false);\n return;\n }\n const newValue =\n currentValue.substring(0, start) +\n e.key +\n currentValue.substring(end);\n if (!validation(newValue, withLeadingZero)) {\n e.preventDefault();\n return;\n }\n } else {\n const newValue =\n currentValue.substring(0, start) +\n e.key +\n currentValue.substring(end);\n\n if (!validation(newValue, withLeadingZero)) {\n e.preventDefault();\n return;\n }\n }\n },\n [\n handleIncrementDecrement,\n inputRef,\n onCancel,\n onEnterKeyPress,\n validation,\n withLeadingZero,\n ]\n );\n\n const handleChange = useCallback(\n (e) => {\n setCurrentValue(e.target.value);\n if (onChange) onChange(e.target.value);\n },\n [onChange]\n );\n\n const handleClick = useCallback(\n (e) => {\n const selectionStart = inputRef.current?.selectionStart;\n if (\n inputRef.current &&\n currentValue &&\n currentValue.length > 0 &&\n typeof selectionStart === \"number\"\n ) {\n const dotsIndex = currentValue.indexOf(\":\");\n if (selectionStart < dotsIndex) {\n inputRef.current?.setSelectionRange(0, dotsIndex);\n } else if (selectionStart >= dotsIndex) {\n inputRef.current?.setSelectionRange(\n dotsIndex + 1,\n currentValue.length\n );\n }\n }\n\n if (typeof onClick === \"function\") {\n onClick(e);\n }\n },\n [currentValue, inputRef, onClick]\n );\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 };\n }, [\n currentValue,\n handleBlur,\n handleChange,\n handleClick,\n handleDoubleClick,\n handleKeyDown,\n ]);\n\n return {\n inputProps,\n setCurrentValue,\n setPrevValue,\n };\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInputNumber.d.ts","sourceRoot":"","sources":["../../../src/hooks/useInputNumber.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EAGV,SAAS,EAEV,MAAM,OAAO,CAAC;AAKf,MAAM,MAAM,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;AAE9C,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;IACb,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,cAAc,+NAoBtB,YAAY,YACL,UAAU,gBAAgB,GAAG,IAAI,CAAC;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"useInputNumber.d.ts","sourceRoot":"","sources":["../../../src/hooks/useInputNumber.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EAGV,SAAS,EAEV,MAAM,OAAO,CAAC;AAKf,MAAM,MAAM,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;AAE9C,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;IACb,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,cAAc,+NAoBtB,YAAY,YACL,UAAU,gBAAgB,GAAG,IAAI,CAAC;;;;;;;;;;CAkW7C,CAAC"}
|
|
@@ -130,6 +130,9 @@ export const useInputNumber = (_ref, inputRef) => {
|
|
|
130
130
|
if (e.key === "Backspace") {
|
|
131
131
|
return;
|
|
132
132
|
}
|
|
133
|
+
if (e.key === "Delete") {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
133
136
|
if ((e.metaKey || e.ctrlKey) && e.key === "a") {
|
|
134
137
|
var _inputRef$current;
|
|
135
138
|
(_inputRef$current = inputRef.current) == null || _inputRef$current.select();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInputNumber.js","names":["useState","useRef","useCallback","useEffect","validateNumberInput","currencyMultiplier","formatNumber","useInputNumber","_ref","inputRef","decimalSeparator","thousandSeparator","disableAbbreviation","disableMacros","decimalLength","value","onChange","onSave","onEnterKeyPress","onClick","onCancel","allowEmptyValue","step","trimDecimals","limit","validation","min","max","isMaxValid","undefined","Number","console","warn","currentValue","setCurrentValue","prevValue","setPrevValue","unformattedValue","setUnformattedValue","unformattedPrevValue","setUnformattedPrevValue","focused","setFocused","escapeRef","handleBlur","e","current","String","target","trim","length","_value","updateValue","type","preformattedValue","replace","numericValue","parseFloat","isNaN","newValue","toFixed","Math","round","updatedValue","includes","handleKeyDown","key","blur","preventDefault","metaKey","ctrlKey","_inputRef$current","select","input","start","selectionStart","end","selectionEnd","substring","Boolean","handleChange","inputValue","numericInput","_","num","unit","toLowerCase","toString","handleClick","handleFocus","handleDoubleClick","_inputRef$current2","onBlur","onKeyDown","onDoubleClick","onFocus"],"sources":["../../../src/hooks/useInputNumber.tsx"],"sourcesContent":["import {\n useState,\n MouseEvent,\n useRef,\n useCallback,\n RefObject,\n useEffect,\n} from \"react\";\n\nimport { validateNumberInput } from \"../utils\";\nimport { currencyMultiplier, formatNumber } from \"../utils/currencyUtils\";\n\nexport type Separators = \".\" | \",\" | \" \" | \"\";\n\nexport interface IInputNumber {\n decimalLength?: number;\n decimalSeparator?: Separators;\n disableAbbreviation?: boolean;\n disableMacros?: boolean;\n thousandSeparator?: Separators;\n trimDecimals?: boolean;\n onSave?: (e: Event) => void;\n value?: string | number;\n step?: number;\n limit?: number;\n onEnterKeyPress?: (val: string) => void;\n onChange?: (val: string) => void;\n onClick?: (event: MouseEvent<HTMLInputElement>) => void;\n allowEmptyValue?: boolean;\n onCancel?: (e: Event) => void;\n validation?: (\n value: string,\n disableMacros: boolean,\n decimalSeparator: string,\n decimalLength: number,\n limit?: number\n ) => boolean;\n min?: string | number;\n max?: string | number;\n}\n\nexport const useInputNumber = (\n {\n decimalSeparator = \".\",\n thousandSeparator = \",\",\n disableAbbreviation,\n disableMacros,\n decimalLength,\n value = \"\",\n onChange,\n onSave,\n onEnterKeyPress,\n onClick,\n onCancel,\n allowEmptyValue,\n step = 1,\n trimDecimals = true,\n limit,\n validation = validateNumberInput,\n min,\n max,\n }: IInputNumber,\n inputRef: RefObject<HTMLInputElement | null>\n) => {\n const isMaxValid =\n max === undefined || min === undefined || Number(max) >= Number(min);\n\n if (!isMaxValid) {\n console.warn(\n \"Warning: The maximum value is set to be lower than the minimum value. The maximum value will be ignored.\"\n );\n }\n\n const [currentValue, setCurrentValue] = useState(() =>\n formatNumber(\n value as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\"\n )\n );\n const [prevValue, setPrevValue] = useState(() =>\n formatNumber(\n value as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\"\n )\n );\n const [unformattedValue, setUnformattedValue] = useState(() =>\n formatNumber(\n value as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\"\n )\n );\n const [unformattedPrevValue, setUnformattedPrevValue] = useState(() =>\n formatNumber(\n value as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\"\n )\n );\n\n useEffect(() => {\n if (value !== prevValue) {\n setCurrentValue(\n formatNumber(\n value as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\"\n )\n );\n setPrevValue(\n formatNumber(\n value as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\"\n )\n );\n setUnformattedValue(\n formatNumber(\n value as string,\n \"\",\n decimalSeparator,\n trimDecimals,\n decimalLength,\n \"long\"\n )\n );\n setUnformattedPrevValue(\n formatNumber(\n value as string,\n \"\",\n decimalSeparator,\n trimDecimals,\n decimalLength,\n \"long\"\n )\n );\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n disableAbbreviation,\n thousandSeparator,\n decimalSeparator,\n decimalLength,\n trimDecimals,\n value,\n ]);\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(unformattedPrevValue);\n if (onChange) onChange(String(unformattedPrevValue));\n } else {\n if (e.target.value.trim().length > 0 && prevValue !== e.target.value) {\n const _value = formatNumber(\n currentValue as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\"\n );\n setPrevValue(_value);\n setUnformattedPrevValue(currentValue as string);\n setUnformattedValue(currentValue as string);\n setCurrentValue(_value);\n typeof onSave === \"function\" && onSave(e);\n } else {\n if (!allowEmptyValue) {\n setCurrentValue(prevValue);\n setUnformattedValue(unformattedPrevValue);\n typeof onCancel === \"function\" && onCancel(e);\n } else {\n if (typeof onSave === \"function\" && prevValue !== e.target.value) {\n onSave(e);\n } else {\n typeof onCancel === \"function\" && onCancel(e);\n }\n }\n }\n }\n setFocused(false);\n },\n [\n prevValue,\n unformattedPrevValue,\n onChange,\n disableAbbreviation,\n currentValue,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n onSave,\n allowEmptyValue,\n onCancel,\n ]\n );\n\n const updateValue = useCallback(\n (type: \"increment\" | \"decrement\") => {\n const preformattedValue = String(unformattedValue).replace(\",\", \".\");\n const numericValue = parseFloat(preformattedValue);\n\n if (isNaN(numericValue)) return;\n\n let newValue = numericValue;\n\n if (type === \"increment\") {\n newValue += step;\n } else if (type === \"decrement\") {\n newValue -= step;\n }\n\n if (decimalLength !== undefined) {\n newValue = parseFloat(newValue.toFixed(decimalLength));\n } else {\n newValue = parseFloat(newValue.toFixed(2));\n }\n\n if (min !== undefined && newValue < Number(min)) {\n newValue = Number(min);\n }\n\n if (max !== undefined && newValue > Number(max) && isMaxValid) {\n newValue = Number(max);\n }\n\n if (decimalLength !== undefined && decimalLength === 0) {\n newValue = Math.round(newValue);\n }\n\n let updatedValue = String(newValue);\n if (updatedValue.includes(\".\") || updatedValue.includes(\",\")) {\n updatedValue = updatedValue.replace(\".\", decimalSeparator);\n }\n\n setUnformattedValue(updatedValue);\n setCurrentValue(updatedValue);\n if (onChange) onChange(updatedValue);\n },\n [\n unformattedValue,\n decimalLength,\n min,\n max,\n isMaxValid,\n onChange,\n step,\n decimalSeparator,\n ]\n );\n\n const handleKeyDown = useCallback(\n (e) => {\n if (e.key === \"Enter\") {\n e.target.blur();\n if (typeof onEnterKeyPress === \"function\")\n onEnterKeyPress(e.target.value);\n }\n if (e.key === \"ArrowLeft\") {\n return;\n }\n if (e.key === \"ArrowRight\") {\n return;\n }\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n updateValue(\"increment\");\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n updateValue(\"decrement\");\n }\n if (e.key === \"Escape\") {\n escapeRef.current = true;\n e.target.blur();\n typeof onCancel === \"function\" && onCancel(e);\n escapeRef.current = false;\n }\n if (e.key === \"Backspace\") {\n return;\n }\n if ((e.metaKey || e.ctrlKey) && e.key === \"a\") {\n inputRef.current?.select();\n return;\n }\n if (e.key === \"Tab\") {\n return;\n }\n if ((e.metaKey || e.ctrlKey) && e.key === \"v\") {\n e.preventDefault();\n return;\n }\n\n // Disallow \"-\" if min is 0 or greater\n if (e.key === \"-\" && min !== undefined && Number(min) >= 0) {\n e.preventDefault();\n return;\n }\n\n // Disallow decimal separator if decimalLength is 0\n if (e.key === decimalSeparator && decimalLength === 0) {\n e.preventDefault();\n return;\n }\n\n const input = e.target;\n const currentValue = input.value;\n const start = input.selectionStart;\n const end = input.selectionEnd;\n const newValue =\n currentValue.substring(0, start) + e.key + currentValue.substring(end);\n if (\n !validation(\n newValue,\n Boolean(disableMacros),\n decimalSeparator,\n decimalLength ?? 0,\n limit\n )\n ) {\n e.preventDefault();\n return;\n }\n },\n [\n decimalLength,\n decimalSeparator,\n disableMacros,\n inputRef,\n limit,\n min,\n onCancel,\n onEnterKeyPress,\n updateValue,\n validation,\n ]\n );\n\n const handleChange = useCallback(\n (e) => {\n const inputValue = e.target.value;\n const numericInput = disableMacros\n ? inputValue\n : inputValue.replace(/([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 return {\n value: currentValue,\n onBlur: handleBlur,\n onKeyDown: handleKeyDown,\n onChange: handleChange,\n onClick: handleClick,\n onDoubleClick: handleDoubleClick,\n onFocus: handleFocus,\n focused,\n unformattedValue,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useInputNumber.js","names":["useState","useRef","useCallback","useEffect","validateNumberInput","currencyMultiplier","formatNumber","useInputNumber","_ref","inputRef","decimalSeparator","thousandSeparator","disableAbbreviation","disableMacros","decimalLength","value","onChange","onSave","onEnterKeyPress","onClick","onCancel","allowEmptyValue","step","trimDecimals","limit","validation","min","max","isMaxValid","undefined","Number","console","warn","currentValue","setCurrentValue","prevValue","setPrevValue","unformattedValue","setUnformattedValue","unformattedPrevValue","setUnformattedPrevValue","focused","setFocused","escapeRef","handleBlur","e","current","String","target","trim","length","_value","updateValue","type","preformattedValue","replace","numericValue","parseFloat","isNaN","newValue","toFixed","Math","round","updatedValue","includes","handleKeyDown","key","blur","preventDefault","metaKey","ctrlKey","_inputRef$current","select","input","start","selectionStart","end","selectionEnd","substring","Boolean","handleChange","inputValue","numericInput","_","num","unit","toLowerCase","toString","handleClick","handleFocus","handleDoubleClick","_inputRef$current2","onBlur","onKeyDown","onDoubleClick","onFocus"],"sources":["../../../src/hooks/useInputNumber.tsx"],"sourcesContent":["import {\n useState,\n MouseEvent,\n useRef,\n useCallback,\n RefObject,\n useEffect,\n} from \"react\";\n\nimport { validateNumberInput } from \"../utils\";\nimport { currencyMultiplier, formatNumber } from \"../utils/currencyUtils\";\n\nexport type Separators = \".\" | \",\" | \" \" | \"\";\n\nexport interface IInputNumber {\n decimalLength?: number;\n decimalSeparator?: Separators;\n disableAbbreviation?: boolean;\n disableMacros?: boolean;\n thousandSeparator?: Separators;\n trimDecimals?: boolean;\n onSave?: (e: Event) => void;\n value?: string | number;\n step?: number;\n limit?: number;\n onEnterKeyPress?: (val: string) => void;\n onChange?: (val: string) => void;\n onClick?: (event: MouseEvent<HTMLInputElement>) => void;\n allowEmptyValue?: boolean;\n onCancel?: (e: Event) => void;\n validation?: (\n value: string,\n disableMacros: boolean,\n decimalSeparator: string,\n decimalLength: number,\n limit?: number\n ) => boolean;\n min?: string | number;\n max?: string | number;\n}\n\nexport const useInputNumber = (\n {\n decimalSeparator = \".\",\n thousandSeparator = \",\",\n disableAbbreviation,\n disableMacros,\n decimalLength,\n value = \"\",\n onChange,\n onSave,\n onEnterKeyPress,\n onClick,\n onCancel,\n allowEmptyValue,\n step = 1,\n trimDecimals = true,\n limit,\n validation = validateNumberInput,\n min,\n max,\n }: IInputNumber,\n inputRef: RefObject<HTMLInputElement | null>\n) => {\n const isMaxValid =\n max === undefined || min === undefined || Number(max) >= Number(min);\n\n if (!isMaxValid) {\n console.warn(\n \"Warning: The maximum value is set to be lower than the minimum value. The maximum value will be ignored.\"\n );\n }\n\n const [currentValue, setCurrentValue] = useState(() =>\n formatNumber(\n value as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\"\n )\n );\n const [prevValue, setPrevValue] = useState(() =>\n formatNumber(\n value as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\"\n )\n );\n const [unformattedValue, setUnformattedValue] = useState(() =>\n formatNumber(\n value as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\"\n )\n );\n const [unformattedPrevValue, setUnformattedPrevValue] = useState(() =>\n formatNumber(\n value as string,\n \"\",\n decimalSeparator,\n false,\n decimalLength,\n \"long\"\n )\n );\n\n useEffect(() => {\n if (value !== prevValue) {\n setCurrentValue(\n formatNumber(\n value as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\"\n )\n );\n setPrevValue(\n formatNumber(\n value as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\"\n )\n );\n setUnformattedValue(\n formatNumber(\n value as string,\n \"\",\n decimalSeparator,\n trimDecimals,\n decimalLength,\n \"long\"\n )\n );\n setUnformattedPrevValue(\n formatNumber(\n value as string,\n \"\",\n decimalSeparator,\n trimDecimals,\n decimalLength,\n \"long\"\n )\n );\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n disableAbbreviation,\n thousandSeparator,\n decimalSeparator,\n decimalLength,\n trimDecimals,\n value,\n ]);\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(unformattedPrevValue);\n if (onChange) onChange(String(unformattedPrevValue));\n } else {\n if (e.target.value.trim().length > 0 && prevValue !== e.target.value) {\n const _value = formatNumber(\n currentValue as string,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n disableAbbreviation ? \"long\" : \"short\"\n );\n setPrevValue(_value);\n setUnformattedPrevValue(currentValue as string);\n setUnformattedValue(currentValue as string);\n setCurrentValue(_value);\n typeof onSave === \"function\" && onSave(e);\n } else {\n if (!allowEmptyValue) {\n setCurrentValue(prevValue);\n setUnformattedValue(unformattedPrevValue);\n typeof onCancel === \"function\" && onCancel(e);\n } else {\n if (typeof onSave === \"function\" && prevValue !== e.target.value) {\n onSave(e);\n } else {\n typeof onCancel === \"function\" && onCancel(e);\n }\n }\n }\n }\n setFocused(false);\n },\n [\n prevValue,\n unformattedPrevValue,\n onChange,\n disableAbbreviation,\n currentValue,\n thousandSeparator,\n decimalSeparator,\n trimDecimals,\n decimalLength,\n onSave,\n allowEmptyValue,\n onCancel,\n ]\n );\n\n const updateValue = useCallback(\n (type: \"increment\" | \"decrement\") => {\n const preformattedValue = String(unformattedValue).replace(\",\", \".\");\n const numericValue = parseFloat(preformattedValue);\n\n if (isNaN(numericValue)) return;\n\n let newValue = numericValue;\n\n if (type === \"increment\") {\n newValue += step;\n } else if (type === \"decrement\") {\n newValue -= step;\n }\n\n if (decimalLength !== undefined) {\n newValue = parseFloat(newValue.toFixed(decimalLength));\n } else {\n newValue = parseFloat(newValue.toFixed(2));\n }\n\n if (min !== undefined && newValue < Number(min)) {\n newValue = Number(min);\n }\n\n if (max !== undefined && newValue > Number(max) && isMaxValid) {\n newValue = Number(max);\n }\n\n if (decimalLength !== undefined && decimalLength === 0) {\n newValue = Math.round(newValue);\n }\n\n let updatedValue = String(newValue);\n if (updatedValue.includes(\".\") || updatedValue.includes(\",\")) {\n updatedValue = updatedValue.replace(\".\", decimalSeparator);\n }\n\n setUnformattedValue(updatedValue);\n setCurrentValue(updatedValue);\n if (onChange) onChange(updatedValue);\n },\n [\n unformattedValue,\n decimalLength,\n min,\n max,\n isMaxValid,\n onChange,\n step,\n decimalSeparator,\n ]\n );\n\n const handleKeyDown = useCallback(\n (e) => {\n if (e.key === \"Enter\") {\n e.target.blur();\n if (typeof onEnterKeyPress === \"function\")\n onEnterKeyPress(e.target.value);\n }\n if (e.key === \"ArrowLeft\") {\n return;\n }\n if (e.key === \"ArrowRight\") {\n return;\n }\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n updateValue(\"increment\");\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n updateValue(\"decrement\");\n }\n if (e.key === \"Escape\") {\n escapeRef.current = true;\n e.target.blur();\n typeof onCancel === \"function\" && onCancel(e);\n escapeRef.current = false;\n }\n if (e.key === \"Backspace\") {\n return;\n }\n if (e.key === \"Delete\") {\n return;\n }\n if ((e.metaKey || e.ctrlKey) && e.key === \"a\") {\n inputRef.current?.select();\n return;\n }\n if (e.key === \"Tab\") {\n return;\n }\n if ((e.metaKey || e.ctrlKey) && e.key === \"v\") {\n e.preventDefault();\n return;\n }\n\n // Disallow \"-\" if min is 0 or greater\n if (e.key === \"-\" && min !== undefined && Number(min) >= 0) {\n e.preventDefault();\n return;\n }\n\n // Disallow decimal separator if decimalLength is 0\n if (e.key === decimalSeparator && decimalLength === 0) {\n e.preventDefault();\n return;\n }\n\n const input = e.target;\n const currentValue = input.value;\n const start = input.selectionStart;\n const end = input.selectionEnd;\n const newValue =\n currentValue.substring(0, start) + e.key + currentValue.substring(end);\n if (\n !validation(\n newValue,\n Boolean(disableMacros),\n decimalSeparator,\n decimalLength ?? 0,\n limit\n )\n ) {\n e.preventDefault();\n return;\n }\n },\n [\n decimalLength,\n decimalSeparator,\n disableMacros,\n inputRef,\n limit,\n min,\n onCancel,\n onEnterKeyPress,\n updateValue,\n validation,\n ]\n );\n\n const handleChange = useCallback(\n (e) => {\n const inputValue = e.target.value;\n const numericInput = disableMacros\n ? inputValue\n : inputValue.replace(/([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 return {\n value: currentValue,\n onBlur: handleBlur,\n onKeyDown: handleKeyDown,\n onChange: handleChange,\n onClick: handleClick,\n onDoubleClick: handleDoubleClick,\n onFocus: handleFocus,\n focused,\n unformattedValue,\n };\n};\n"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -9169,10 +9169,12 @@
|
|
|
9169
9169
|
var StyledCounterButton = styled__default["default"](Button).withConfig({
|
|
9170
9170
|
displayName: "Styles__StyledCounterButton",
|
|
9171
9171
|
componentId: "sc-1ecrcba-1"
|
|
9172
|
-
})(["", " ", " ", ""], function (props) {
|
|
9172
|
+
})(["", " ", " ", " ", ""], function (props) {
|
|
9173
9173
|
return props.$active && !props.disabled && styled.css(["padding:0 8px;svg{fill:var(--color-primary);}&:hover{background:var(--color-primary-300);}"]);
|
|
9174
9174
|
}, function (props) {
|
|
9175
9175
|
return props.$selected && styled.css(["border-top-right-radius:0;border-bottom-right-radius:0;background-color:var(--color-primary-200);"]);
|
|
9176
|
+
}, function (props) {
|
|
9177
|
+
return !props.$selected && styled.css(["@media (max-width:768px){width:32px;}"]);
|
|
9176
9178
|
}, function (props) {
|
|
9177
9179
|
return props.disabled && styled.css(["pointer-events:none;opacity:0.5;"]);
|
|
9178
9180
|
});
|
|
@@ -9185,7 +9187,7 @@
|
|
|
9185
9187
|
var StyledCounterButtonLabel = styled__default["default"](Body2).withConfig({
|
|
9186
9188
|
displayName: "Styles__StyledCounterButtonLabel",
|
|
9187
9189
|
componentId: "sc-1ecrcba-3"
|
|
9188
|
-
})(["", " ", ":hover &&{", "}", ""], {
|
|
9190
|
+
})(["", " @media (max-width:768px){display:none;}", ":hover &&{", "}", ""], {
|
|
9189
9191
|
"pointerEvents": "none"
|
|
9190
9192
|
}, StyledCounterButton, function (props) {
|
|
9191
9193
|
return !props.$active && styled.css(["color:var(--color-theme-900);"]);
|
|
@@ -13100,10 +13102,13 @@
|
|
|
13100
13102
|
var StyledTitle = styled__default["default"](Body2).withConfig({
|
|
13101
13103
|
displayName: "Styles__StyledTitle",
|
|
13102
13104
|
componentId: "sc-13n85xv-2"
|
|
13103
|
-
})(["", ""], {
|
|
13105
|
+
})(["", " cursor:", ";"], {
|
|
13104
13106
|
"overflow": "hidden",
|
|
13105
13107
|
"textOverflow": "ellipsis",
|
|
13106
13108
|
"whiteSpace": "nowrap"
|
|
13109
|
+
}, function (_ref2) {
|
|
13110
|
+
var $readOnly = _ref2.$readOnly;
|
|
13111
|
+
return $readOnly ? "default" : "pointer";
|
|
13107
13112
|
});
|
|
13108
13113
|
StyledTitle.displayName = "StyledTitle";
|
|
13109
13114
|
var StyledDividerLine = styled__default["default"].div.withConfig({
|
|
@@ -13119,8 +13124,8 @@
|
|
|
13119
13124
|
})(["", " transform:", ";transition:all 0.2s ease;"], {
|
|
13120
13125
|
"marginRight": "0.25rem",
|
|
13121
13126
|
"cursor": "pointer"
|
|
13122
|
-
}, function (
|
|
13123
|
-
var $expanded =
|
|
13127
|
+
}, function (_ref3) {
|
|
13128
|
+
var $expanded = _ref3.$expanded;
|
|
13124
13129
|
return $expanded ? "rotate(0deg)" : "rotate(180deg)";
|
|
13125
13130
|
});
|
|
13126
13131
|
StyledCollapseExpandSingleIcon.displayName = "StyledCollapseExpandSingleIcon";
|
|
@@ -13131,15 +13136,17 @@
|
|
|
13131
13136
|
children = _ref.children,
|
|
13132
13137
|
_ref$expanded = _ref.expanded,
|
|
13133
13138
|
expanded = _ref$expanded === void 0 ? true : _ref$expanded,
|
|
13139
|
+
_ref$readOnly = _ref.readOnly,
|
|
13140
|
+
readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
|
|
13134
13141
|
className = _ref.className;
|
|
13135
13142
|
var ref = React.useRef(null);
|
|
13136
|
-
var _useState = React.useState(expanded),
|
|
13143
|
+
var _useState = React.useState(expanded || readOnly),
|
|
13137
13144
|
_useState2 = _slicedToArray(_useState, 2),
|
|
13138
13145
|
open = _useState2[0],
|
|
13139
13146
|
setOpen = _useState2[1];
|
|
13140
13147
|
React.useEffect(function () {
|
|
13141
|
-
setOpen(expanded);
|
|
13142
|
-
}, [expanded]);
|
|
13148
|
+
setOpen(expanded || readOnly);
|
|
13149
|
+
}, [expanded, readOnly]);
|
|
13143
13150
|
var handleOnClick = React.useCallback(function () {
|
|
13144
13151
|
var _ref$current;
|
|
13145
13152
|
(_ref$current = ref.current) === null || _ref$current === void 0 || _ref$current.focus();
|
|
@@ -13153,16 +13160,21 @@
|
|
|
13153
13160
|
tabIndex: 0,
|
|
13154
13161
|
ref: ref,
|
|
13155
13162
|
$expanded: open
|
|
13156
|
-
}, /*#__PURE__*/React__default["default"].createElement(Button, {
|
|
13163
|
+
}, !readOnly ? /*#__PURE__*/React__default["default"].createElement(Button, {
|
|
13157
13164
|
variant: "text gray",
|
|
13158
13165
|
size: "small",
|
|
13159
13166
|
onClick: handleOnClick
|
|
13160
13167
|
}, /*#__PURE__*/React__default["default"].createElement(StyledCollapseExpandSingleIcon, {
|
|
13161
13168
|
$expanded: open
|
|
13162
13169
|
}), /*#__PURE__*/React__default["default"].createElement(StyledTitle, {
|
|
13170
|
+
$readOnly: readOnly,
|
|
13171
|
+
color: "secondary",
|
|
13172
|
+
weight: "medium"
|
|
13173
|
+
}, title)) : /*#__PURE__*/React__default["default"].createElement(StyledTitle, {
|
|
13174
|
+
$readOnly: readOnly,
|
|
13163
13175
|
color: "secondary",
|
|
13164
13176
|
weight: "medium"
|
|
13165
|
-
}, title)
|
|
13177
|
+
}, title), !open && /*#__PURE__*/React__default["default"].createElement(StyledDividerLine, {
|
|
13166
13178
|
"data-testid": "divider-line"
|
|
13167
13179
|
}), open && /*#__PURE__*/React__default["default"].createElement(StyledChildrenWrapper$1, null, children));
|
|
13168
13180
|
};
|
|
@@ -14552,6 +14564,9 @@
|
|
|
14552
14564
|
if (e.key === "Backspace") {
|
|
14553
14565
|
return;
|
|
14554
14566
|
}
|
|
14567
|
+
if (e.key === "Delete") {
|
|
14568
|
+
return;
|
|
14569
|
+
}
|
|
14555
14570
|
if ((e.metaKey || e.ctrlKey) && e.key === "a") {
|
|
14556
14571
|
var _inputRef$current;
|
|
14557
14572
|
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.select();
|
|
@@ -15906,6 +15921,9 @@
|
|
|
15906
15921
|
if (e.key === "Backspace") {
|
|
15907
15922
|
return;
|
|
15908
15923
|
}
|
|
15924
|
+
if (e.key === "Delete") {
|
|
15925
|
+
return;
|
|
15926
|
+
}
|
|
15909
15927
|
if ((e.metaKey || e.ctrlKey) && e.key === "a") {
|
|
15910
15928
|
var _inputRef$current2;
|
|
15911
15929
|
(_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 || _inputRef$current2.select();
|
|
@@ -19417,7 +19435,9 @@
|
|
|
19417
19435
|
return /*#__PURE__*/React__default["default"].createElement(StyledSvg, {
|
|
19418
19436
|
height: radius * 2,
|
|
19419
19437
|
width: radius * 2,
|
|
19420
|
-
className: className
|
|
19438
|
+
className: className,
|
|
19439
|
+
"data-progress": progressNumber,
|
|
19440
|
+
"data-testid": "progress-circle"
|
|
19421
19441
|
}, /*#__PURE__*/React__default["default"].createElement(StyledBackgroundCircle, {
|
|
19422
19442
|
$color: backgroundColor,
|
|
19423
19443
|
$strokeDashOffset: -strokeDashoffsetOuter,
|