@activecollab/components 2.0.117 → 2.0.119
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/EditableHours/EditableHours.js +1 -1
- package/dist/cjs/components/EditableHours/EditableHours.js.map +1 -1
- package/dist/cjs/components/Icons/collection/ArrowRestore.js +46 -0
- package/dist/cjs/components/Icons/collection/ArrowRestore.js.map +1 -0
- package/dist/cjs/components/Icons/collection/index.js +7 -0
- package/dist/cjs/components/Icons/collection/index.js.map +1 -1
- package/dist/cjs/components/SelectTrigger/SelectTrigger.js +11 -1
- package/dist/cjs/components/SelectTrigger/SelectTrigger.js.map +1 -1
- package/dist/cjs/components/SelectTrigger/Styles.js +6 -3
- package/dist/cjs/components/SelectTrigger/Styles.js.map +1 -1
- package/dist/cjs/hooks/useInputHours.js +3 -3
- package/dist/cjs/hooks/useInputHours.js.map +1 -1
- package/dist/cjs/utils/index.js +7 -0
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/timeUtils.js +87 -33
- package/dist/cjs/utils/timeUtils.js.map +1 -1
- package/dist/cjs/utils/timeUtils.test.js +1 -1
- package/dist/cjs/utils/timeUtils.test.js.map +1 -1
- package/dist/esm/components/EditableHours/EditableHours.js +2 -2
- package/dist/esm/components/EditableHours/EditableHours.js.map +1 -1
- package/dist/esm/components/Icons/collection/ArrowRestore.d.ts +23 -0
- package/dist/esm/components/Icons/collection/ArrowRestore.d.ts.map +1 -0
- package/dist/esm/components/Icons/collection/ArrowRestore.js +38 -0
- package/dist/esm/components/Icons/collection/ArrowRestore.js.map +1 -0
- package/dist/esm/components/Icons/collection/index.d.ts +1 -0
- package/dist/esm/components/Icons/collection/index.d.ts.map +1 -1
- package/dist/esm/components/Icons/collection/index.js +1 -0
- package/dist/esm/components/Icons/collection/index.js.map +1 -1
- package/dist/esm/components/SelectTrigger/SelectTrigger.d.ts +2 -3
- package/dist/esm/components/SelectTrigger/SelectTrigger.d.ts.map +1 -1
- package/dist/esm/components/SelectTrigger/SelectTrigger.js +12 -2
- package/dist/esm/components/SelectTrigger/SelectTrigger.js.map +1 -1
- package/dist/esm/components/SelectTrigger/Styles.d.ts +2 -3
- package/dist/esm/components/SelectTrigger/Styles.d.ts.map +1 -1
- package/dist/esm/components/SelectTrigger/Styles.js +8 -3
- package/dist/esm/components/SelectTrigger/Styles.js.map +1 -1
- package/dist/esm/hooks/useInputHours.js +4 -4
- package/dist/esm/hooks/useInputHours.js.map +1 -1
- package/dist/esm/utils/index.d.ts +1 -1
- package/dist/esm/utils/index.d.ts.map +1 -1
- package/dist/esm/utils/index.js +1 -1
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/timeUtils.d.ts +34 -0
- package/dist/esm/utils/timeUtils.d.ts.map +1 -1
- package/dist/esm/utils/timeUtils.js +83 -30
- package/dist/esm/utils/timeUtils.js.map +1 -1
- package/dist/esm/utils/timeUtils.test.js +2 -2
- package/dist/esm/utils/timeUtils.test.js.map +1 -1
- package/dist/index.js +146 -40
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectTrigger.js","names":["React","forwardRef","StyledCaretIcon","StyledSelectTrigger","Typography","SelectTrigger","_ref","ref","children","type","size","invalid","open","endAdornment","typographyProps","mode","rest","createElement","_extends","role","$size","$invalid","$mode","as","overflow","whitespace","
|
|
1
|
+
{"version":3,"file":"SelectTrigger.js","names":["React","forwardRef","useMemo","StyledCaretIcon","StyledSelectTrigger","Typography","SelectTrigger","_ref","ref","children","type","size","invalid","open","endAdornment","typographyProps","mode","rest","variant","createElement","_extends","role","$size","$invalid","$mode","as","overflow","whitespace","weight","color","undefined","$open","displayName"],"sources":["../../../../src/components/SelectTrigger/SelectTrigger.tsx"],"sourcesContent":["import React, { forwardRef, ComponentPropsWithoutRef, useMemo } from \"react\";\n\nimport { StyledCaretIcon, StyledSelectTrigger } from \"./Styles\";\nimport { InputMode, InputSize } from \"../Input/types\";\nimport { ITypographyProps, Typography } from \"../Typography/Typography\";\n\nexport interface SelectTriggerProps extends ComponentPropsWithoutRef<\"button\"> {\n size?: InputSize;\n invalid?: boolean;\n endAdornment?: JSX.Element;\n open?: boolean;\n typographyProps?: ITypographyProps;\n mode?: InputMode;\n}\n\nexport const SelectTrigger = forwardRef<HTMLButtonElement, SelectTriggerProps>(\n (\n {\n children,\n type = \"button\",\n size = \"regular\",\n invalid = false,\n open = false,\n endAdornment,\n typographyProps,\n mode = \"outlined\",\n ...rest\n },\n ref\n ) => {\n const variant = useMemo(() => {\n if (size === \"big\") {\n return \"Body 1\";\n }\n if (size === \"biggest\") {\n return \"Header 2\";\n }\n return \"Body 2\";\n }, [size]);\n return (\n <StyledSelectTrigger\n ref={ref}\n role=\"button\"\n type={type}\n $size={size}\n $invalid={invalid}\n aria-invalid={invalid}\n $mode={mode}\n {...rest}\n >\n <Typography\n as=\"div\"\n overflow=\"truncate\"\n whitespace=\"no-wrap\"\n variant={variant}\n weight={size === \"biggest\" ? \"bold\" : \"regular\"}\n color={mode === \"flat\" && invalid ? \"alert\" : undefined}\n {...typographyProps}\n >\n {children}\n </Typography>\n\n {endAdornment ? endAdornment : <StyledCaretIcon $open={open} />}\n </StyledSelectTrigger>\n );\n }\n);\n\nSelectTrigger.displayName = \"SelectTrigger\";\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,UAAU,EAA4BC,OAAO,QAAQ,OAAO;AAE5E,SAASC,eAAe,EAAEC,mBAAmB,QAAQ,UAAU;AAE/D,SAA2BC,UAAU,QAAQ,0BAA0B;AAWvE,OAAO,MAAMC,aAAa,gBAAGL,UAAU,CACrC,CAAAM,IAAA,EAYEC,GAAG,KACA;EAAA,IAZH;IACEC,QAAQ;IACRC,IAAI,GAAG,QAAQ;IACfC,IAAI,GAAG,SAAS;IAChBC,OAAO,GAAG,KAAK;IACfC,IAAI,GAAG,KAAK;IACZC,YAAY;IACZC,eAAe;IACfC,IAAI,GAAG,UAAU;IACjB,GAAGC;EACL,CAAC,GAAAV,IAAA;EAGD,MAAMW,OAAO,GAAGhB,OAAO,CAAC,MAAM;IAC5B,IAAIS,IAAI,KAAK,KAAK,EAAE;MAClB,OAAO,QAAQ;IACjB;IACA,IAAIA,IAAI,KAAK,SAAS,EAAE;MACtB,OAAO,UAAU;IACnB;IACA,OAAO,QAAQ;EACjB,CAAC,EAAE,CAACA,IAAI,CAAC,CAAC;EACV,oBACEX,KAAA,CAAAmB,aAAA,CAACf,mBAAmB,EAAAgB,QAAA;IAClBZ,GAAG,EAAEA,GAAI;IACTa,IAAI,EAAC,QAAQ;IACbX,IAAI,EAAEA,IAAK;IACXY,KAAK,EAAEX,IAAK;IACZY,QAAQ,EAAEX,OAAQ;IAClB,gBAAcA,OAAQ;IACtBY,KAAK,EAAER;EAAK,GACRC,IAAI,gBAERjB,KAAA,CAAAmB,aAAA,CAACd,UAAU,EAAAe,QAAA;IACTK,EAAE,EAAC,KAAK;IACRC,QAAQ,EAAC,UAAU;IACnBC,UAAU,EAAC,SAAS;IACpBT,OAAO,EAAEA,OAAQ;IACjBU,MAAM,EAAEjB,IAAI,KAAK,SAAS,GAAG,MAAM,GAAG,SAAU;IAChDkB,KAAK,EAAEb,IAAI,KAAK,MAAM,IAAIJ,OAAO,GAAG,OAAO,GAAGkB;EAAU,GACpDf,eAAe,GAElBN,QACS,CAAC,EAEZK,YAAY,GAAGA,YAAY,gBAAGd,KAAA,CAAAmB,aAAA,CAAChB,eAAe;IAAC4B,KAAK,EAAElB;EAAK,CAAE,CAC3C,CAAC;AAE1B,CACF,CAAC;AAEDP,aAAa,CAAC0B,WAAW,GAAG,eAAe"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import {
|
|
3
|
-
import { InputMode } from "../Input/types";
|
|
2
|
+
import { InputMode, InputSize } from "../Input/types";
|
|
4
3
|
export declare const StyledSelectTrigger: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & import("react").RefAttributes<HTMLButtonElement>>, any, {
|
|
5
|
-
$size?:
|
|
4
|
+
$size?: InputSize | undefined;
|
|
6
5
|
$invalid?: boolean | undefined;
|
|
7
6
|
$mode?: InputMode | undefined;
|
|
8
7
|
}, never>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Styles.d.ts","sourceRoot":"","sources":["../../../../src/components/SelectTrigger/Styles.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"Styles.d.ts","sourceRoot":"","sources":["../../../../src/components/SelectTrigger/Styles.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGtD,eAAO,MAAM,mBAAmB;;;;SA6E/B,CAAC;AAIF,eAAO,MAAM,eAAe;WACnB,OAAO;SAWf,CAAC"}
|
|
@@ -4,7 +4,7 @@ import { Trigger } from "../Trigger";
|
|
|
4
4
|
export const StyledSelectTrigger = styled(Trigger).withConfig({
|
|
5
5
|
displayName: "Styles__StyledSelectTrigger",
|
|
6
6
|
componentId: "sc-9799p2-0"
|
|
7
|
-
})(["display:flex;align-items:center;justify-content:space-between;padding:0 4px 0 8px;width:300px;transition:border-color 0.3s ease;background-color:transparent;border:none;", " ", " ", " ", " ", " ", " ", ";"], _ref => {
|
|
7
|
+
})(["display:flex;align-items:center;justify-content:space-between;padding:0 4px 0 8px;width:300px;transition:border-color 0.3s ease;background-color:transparent;border:none;", " ", " ", " ", " ", " ", " ", ";", ";"], _ref => {
|
|
8
8
|
let {
|
|
9
9
|
$mode
|
|
10
10
|
} = _ref;
|
|
@@ -46,15 +46,20 @@ export const StyledSelectTrigger = styled(Trigger).withConfig({
|
|
|
46
46
|
$size
|
|
47
47
|
} = _ref7;
|
|
48
48
|
return $size === "big" && css(["height:40px;border-radius:var(--ac-br-8);"]);
|
|
49
|
+
}, _ref8 => {
|
|
50
|
+
let {
|
|
51
|
+
$size
|
|
52
|
+
} = _ref8;
|
|
53
|
+
return $size === "biggest" && css(["height:48px;border-radius:var(--ac-br-8);"]);
|
|
49
54
|
});
|
|
50
55
|
StyledSelectTrigger.displayName = "StyledSelectTrigger";
|
|
51
56
|
export const StyledCaretIcon = styled(CollapseExpandSingleIcon).withConfig({
|
|
52
57
|
displayName: "Styles__StyledCaretIcon",
|
|
53
58
|
componentId: "sc-9799p2-1"
|
|
54
|
-
})(["margin-left:8px;flex-shrink:0;transition:transform 200ms ease;", ""],
|
|
59
|
+
})(["margin-left:8px;flex-shrink:0;transition:transform 200ms ease;", ""], _ref9 => {
|
|
55
60
|
let {
|
|
56
61
|
$open
|
|
57
|
-
} =
|
|
62
|
+
} = _ref9;
|
|
58
63
|
return !$open && css(["transform:rotate(180deg);"]);
|
|
59
64
|
});
|
|
60
65
|
StyledCaretIcon.displayName = "StyledCaretIcon";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Styles.js","names":["styled","css","CollapseExpandSingleIcon","Trigger","StyledSelectTrigger","withConfig","displayName","componentId","_ref","$mode","_ref2","disabled","_ref3","$invalid","_ref4","_ref5","$size","_ref6","_ref7","StyledCaretIcon","
|
|
1
|
+
{"version":3,"file":"Styles.js","names":["styled","css","CollapseExpandSingleIcon","Trigger","StyledSelectTrigger","withConfig","displayName","componentId","_ref","$mode","_ref2","disabled","_ref3","$invalid","_ref4","_ref5","$size","_ref6","_ref7","_ref8","StyledCaretIcon","_ref9","$open"],"sources":["../../../../src/components/SelectTrigger/Styles.ts"],"sourcesContent":["import styled, { css } from \"styled-components\";\nimport tw from \"twin.macro\";\n\nimport { CollapseExpandSingleIcon } from \"../Icons\";\nimport { InputMode, InputSize } from \"../Input/types\";\nimport { Trigger } from \"../Trigger\";\n\nexport const StyledSelectTrigger = styled(Trigger)<{\n $size?: InputSize;\n $invalid?: boolean;\n $mode?: InputMode;\n}>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 4px 0 8px;\n width: 300px;\n transition: border-color 0.3s ease;\n background-color: transparent;\n border: none;\n\n ${({ $mode }) =>\n $mode === \"outlined\" &&\n css`\n border: 1px solid var(--color-theme-500);\n background-color: var(--input-background-color);\n `}\n\n ${({ disabled }) =>\n disabled &&\n css`\n opacity: 50%;\n cursor: default;\n `}\n\n ${({ $invalid, disabled, $mode }) =>\n !$invalid &&\n !disabled &&\n $mode === \"outlined\" &&\n css`\n &:hover,\n &:focus {\n border-color: var(--color-primary-700);\n }\n `}\n\n ${({ $invalid, $mode }) =>\n $invalid &&\n $mode === \"outlined\" &&\n css`\n ${tw`tw-border-alert`}\n\n &:hover {\n ${tw`tw-border-alert`}\n }\n `}\n\n ${({ $size }) =>\n $size === \"small\" &&\n css`\n height: 24px;\n border-radius: var(--ac-br-6);\n `}\n\n ${({ $size }) =>\n $size === \"regular\" &&\n css`\n height: 32px;\n border-radius: var(--ac-br-8);\n `}\n\n ${({ $size }) =>\n $size === \"big\" &&\n css`\n height: 40px;\n border-radius: var(--ac-br-8);\n `};\n\n ${({ $size }) =>\n $size === \"biggest\" &&\n css`\n height: 48px;\n border-radius: var(--ac-br-8);\n `};\n`;\n\nStyledSelectTrigger.displayName = \"StyledSelectTrigger\";\n\nexport const StyledCaretIcon = styled(CollapseExpandSingleIcon)<{\n $open: boolean;\n}>`\n margin-left: 8px;\n flex-shrink: 0;\n transition: transform 200ms ease;\n\n ${({ $open }) =>\n !$open &&\n css`\n transform: rotate(180deg);\n `}\n`;\n\nStyledCaretIcon.displayName = \"StyledCaretIcon\";\n"],"mappings":"AAAA,OAAOA,MAAM,IAAIC,GAAG,QAAQ,mBAAmB;AAG/C,SAASC,wBAAwB,QAAQ,UAAU;AAEnD,SAASC,OAAO,QAAQ,YAAY;AAEpC,OAAO,MAAMC,mBAAmB,GAAGJ,MAAM,CAACG,OAAO,CAAC,CAAAE,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,0NAc9CC,IAAA;EAAA,IAAC;IAAEC;EAAM,CAAC,GAAAD,IAAA;EAAA,OACVC,KAAK,KAAK,UAAU,IACpBR,GAAG,6FAGF;AAAA,GAEDS,KAAA;EAAA,IAAC;IAAEC;EAAS,CAAC,GAAAD,KAAA;EAAA,OACbC,QAAQ,IACRV,GAAG,iCAGF;AAAA,GAEDW,KAAA;EAAA,IAAC;IAAEC,QAAQ;IAAEF,QAAQ;IAAEF;EAAM,CAAC,GAAAG,KAAA;EAAA,OAC9B,CAACC,QAAQ,IACT,CAACF,QAAQ,IACTF,KAAK,KAAK,UAAU,IACpBR,GAAG,6DAKF;AAAA,GAEDa,KAAA;EAAA,IAAC;IAAED,QAAQ;IAAEJ;EAAM,CAAC,GAAAK,KAAA;EAAA,OACpBD,QAAQ,IACRJ,KAAK,KAAK,UAAU,IACpBR,GAAG,yBACG;IAAA;EAAgB,CAAC,EAGf;IAAA;EAAgB,CAAC,CAExB;AAAA,GAEDc,KAAA;EAAA,IAAC;IAAEC;EAAM,CAAC,GAAAD,KAAA;EAAA,OACVC,KAAK,KAAK,OAAO,IACjBf,GAAG,+CAGF;AAAA,GAEDgB,KAAA;EAAA,IAAC;IAAED;EAAM,CAAC,GAAAC,KAAA;EAAA,OACVD,KAAK,KAAK,SAAS,IACnBf,GAAG,+CAGF;AAAA,GAECiB,KAAA;EAAA,IAAC;IAAEF;EAAM,CAAC,GAAAE,KAAA;EAAA,OACZF,KAAK,KAAK,KAAK,IACff,GAAG,+CAGF;AAAA,GAEDkB,KAAA;EAAA,IAAC;IAAEH;EAAM,CAAC,GAAAG,KAAA;EAAA,OACVH,KAAK,KAAK,SAAS,IACnBf,GAAG,+CAGF;AAAA,EACJ;AAEDG,mBAAmB,CAACE,WAAW,GAAG,qBAAqB;AAEvD,OAAO,MAAMc,eAAe,GAAGpB,MAAM,CAACE,wBAAwB,CAAC,CAAAG,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,2EAO3Dc,KAAA;EAAA,IAAC;IAAEC;EAAM,CAAC,GAAAD,KAAA;EAAA,OACV,CAACC,KAAK,IACNrB,GAAG,+BAEF;AAAA,EACJ;AAEDmB,eAAe,CAACd,WAAW,GAAG,iBAAiB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useCallback, useMemo, useRef, useState } from "react";
|
|
2
|
-
import {
|
|
2
|
+
import { formatHours } from "../utils";
|
|
3
3
|
import { validateTimeInput } from "../utils";
|
|
4
4
|
export const useInputHours = (_ref, inputRef) => {
|
|
5
5
|
let {
|
|
@@ -15,15 +15,15 @@ export const useInputHours = (_ref, inputRef) => {
|
|
|
15
15
|
onChange,
|
|
16
16
|
onClick
|
|
17
17
|
} = _ref;
|
|
18
|
-
const [currentValue, setCurrentValue] = useState(() =>
|
|
19
|
-
const [prevValue, setPrevValue] = useState(() =>
|
|
18
|
+
const [currentValue, setCurrentValue] = useState(() => formatHours(value, withLeadingZero));
|
|
19
|
+
const [prevValue, setPrevValue] = useState(() => formatHours(value, withLeadingZero));
|
|
20
20
|
const escapeRef = useRef(false);
|
|
21
21
|
const handleBlur = useCallback(e => {
|
|
22
22
|
if (escapeRef.current) {
|
|
23
23
|
setCurrentValue(prevValue);
|
|
24
24
|
} else {
|
|
25
25
|
if (e.target.value.trim().length > 0 && prevValue !== e.target.value) {
|
|
26
|
-
const _value =
|
|
26
|
+
const _value = formatHours(e.target.value, withLeadingZero);
|
|
27
27
|
setPrevValue(_value);
|
|
28
28
|
setCurrentValue(_value);
|
|
29
29
|
typeof onSave === "function" && onSave(e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInputHours.js","names":["useCallback","useMemo","useRef","useState","decimalToHours","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 { decimalToHours } 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 decimalToHours(value, withLeadingZero)\n );\n const [prevValue, setPrevValue] = useState(() =>\n decimalToHours(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 = decimalToHours(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.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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"}
|
|
@@ -3,6 +3,6 @@ export * from "./colors";
|
|
|
3
3
|
export * from "./validation";
|
|
4
4
|
export { default as useForkRef } from "./useForkRef";
|
|
5
5
|
export { default as useResizeObserver } from "./useResizeObserver";
|
|
6
|
-
export { decimalToHours } from "./timeUtils";
|
|
6
|
+
export { decimalToHours, formatHours } from "./timeUtils";
|
|
7
7
|
export { formatNumber, formatCurrency, numberWithSeparator, getNumberFromString, } from "./currencyUtils";
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC"}
|
package/dist/esm/utils/index.js
CHANGED
|
@@ -3,6 +3,6 @@ export * from "./colors";
|
|
|
3
3
|
export * from "./validation";
|
|
4
4
|
export { default as useForkRef } from "./useForkRef";
|
|
5
5
|
export { default as useResizeObserver } from "./useResizeObserver";
|
|
6
|
-
export { decimalToHours } from "./timeUtils";
|
|
6
|
+
export { decimalToHours, formatHours } from "./timeUtils";
|
|
7
7
|
export { formatNumber, formatCurrency, numberWithSeparator, getNumberFromString } from "./currencyUtils";
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["default","useForkRef","useResizeObserver","decimalToHours","formatNumber","formatCurrency","numberWithSeparator","getNumberFromString"],"sources":["../../../src/utils/index.ts"],"sourcesContent":["export * from \"./layers\";\nexport * from \"./colors\";\nexport * from \"./validation\";\nexport { default as useForkRef } from \"./useForkRef\";\nexport { default as useResizeObserver } from \"./useResizeObserver\";\nexport { decimalToHours } from \"./timeUtils\";\nexport {\n formatNumber,\n formatCurrency,\n numberWithSeparator,\n getNumberFromString,\n} from \"./currencyUtils\";\n"],"mappings":"AAAA,cAAc,UAAU;AACxB,cAAc,UAAU;AACxB,cAAc,cAAc;AAC5B,SAASA,OAAO,IAAIC,UAAU,QAAQ,cAAc;AACpD,SAASD,OAAO,IAAIE,iBAAiB,QAAQ,qBAAqB;AAClE,SAASC,cAAc,QAAQ,aAAa;
|
|
1
|
+
{"version":3,"file":"index.js","names":["default","useForkRef","useResizeObserver","decimalToHours","formatHours","formatNumber","formatCurrency","numberWithSeparator","getNumberFromString"],"sources":["../../../src/utils/index.ts"],"sourcesContent":["export * from \"./layers\";\nexport * from \"./colors\";\nexport * from \"./validation\";\nexport { default as useForkRef } from \"./useForkRef\";\nexport { default as useResizeObserver } from \"./useResizeObserver\";\nexport { decimalToHours, formatHours } from \"./timeUtils\";\nexport {\n formatNumber,\n formatCurrency,\n numberWithSeparator,\n getNumberFromString,\n} from \"./currencyUtils\";\n"],"mappings":"AAAA,cAAc,UAAU;AACxB,cAAc,UAAU;AACxB,cAAc,cAAc;AAC5B,SAASA,OAAO,IAAIC,UAAU,QAAQ,cAAc;AACpD,SAASD,OAAO,IAAIE,iBAAiB,QAAQ,qBAAqB;AAClE,SAASC,cAAc,EAAEC,WAAW,QAAQ,aAAa;AACzD,SACEC,YAAY,EACZC,cAAc,EACdC,mBAAmB,EACnBC,mBAAmB,QACd,iBAAiB"}
|
|
@@ -1,3 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @function formatHours
|
|
3
|
+
* @description
|
|
4
|
+
* Formats a decimal number representing hours into a formatted string (HH:MM).
|
|
5
|
+
* The input can be a number, string, or undefined. The function handles various formats
|
|
6
|
+
* and can optionally add a leading zero to the hours component.
|
|
7
|
+
*
|
|
8
|
+
* @param {number | string | undefined} num - The input representing the hours, which can be in decimal format, a time string, or undefined.
|
|
9
|
+
* @param {boolean} [withLeadingZeroHours=false] - Whether to add a leading zero to the hours part of the output.
|
|
10
|
+
*
|
|
11
|
+
* @returns {string} - A formatted time string in HH:MM format.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* formatHours(1.5) // "1:30"
|
|
15
|
+
* formatHours("3.5", true) // "03:30"
|
|
16
|
+
*/
|
|
17
|
+
export declare const formatHours: (num: number | string | undefined, withLeadingZeroHours?: boolean) => string;
|
|
18
|
+
/**
|
|
19
|
+
* @function decimalToHours
|
|
20
|
+
* @deprecated
|
|
21
|
+
* @description
|
|
22
|
+
* Converts a decimal number representing hours into a formatted string (HH:MM).
|
|
23
|
+
* The input can be a number, string, or undefined. The function handles various formats
|
|
24
|
+
* and can optionally add a leading zero to the hours component.
|
|
25
|
+
*
|
|
26
|
+
* @param {number | string | undefined} num - The input representing the hours, which can be in decimal format, a time string, or undefined.
|
|
27
|
+
* @param {boolean} [withLeadingZeroHours=false] - Whether to add a leading zero to the hours part of the output.
|
|
28
|
+
*
|
|
29
|
+
* @returns {string} - A formatted time string in HH:MM format.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* decimalToHours(1.5) // "1:30"
|
|
33
|
+
* decimalToHours("3.5", true) // "03:30"
|
|
34
|
+
*/
|
|
1
35
|
export declare const decimalToHours: (num: number | string | undefined, withLeadingZeroHours?: boolean) => string;
|
|
2
36
|
export declare const withLeadingZero: (num: string | number, size?: number) => string;
|
|
3
37
|
export declare const isDecimal: (num: number) => boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/timeUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"timeUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/timeUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,WAAW,QACjB,MAAM,GAAG,MAAM,GAAG,SAAS,qCAE/B,MAkDF,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,cAAc,QACpB,MAAM,GAAG,MAAM,GAAG,SAAS,qCAE/B,MAqDF,CAAC;AAEF,eAAO,MAAM,eAAe,QAAS,MAAM,GAAG,MAAM,0BAInD,CAAC;AAEF,eAAO,MAAM,SAAS,QAAS,MAAM,KAAG,OAEvC,CAAC"}
|
|
@@ -1,38 +1,91 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
//
|
|
29
|
-
|
|
30
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @function formatHours
|
|
3
|
+
* @description
|
|
4
|
+
* Formats a decimal number representing hours into a formatted string (HH:MM).
|
|
5
|
+
* The input can be a number, string, or undefined. The function handles various formats
|
|
6
|
+
* and can optionally add a leading zero to the hours component.
|
|
7
|
+
*
|
|
8
|
+
* @param {number | string | undefined} num - The input representing the hours, which can be in decimal format, a time string, or undefined.
|
|
9
|
+
* @param {boolean} [withLeadingZeroHours=false] - Whether to add a leading zero to the hours part of the output.
|
|
10
|
+
*
|
|
11
|
+
* @returns {string} - A formatted time string in HH:MM format.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* formatHours(1.5) // "1:30"
|
|
15
|
+
* formatHours("3.5", true) // "03:30"
|
|
16
|
+
*/
|
|
17
|
+
export const formatHours = function (num, withLeadingZeroHours) {
|
|
18
|
+
if (withLeadingZeroHours === void 0) {
|
|
19
|
+
withLeadingZeroHours = false;
|
|
20
|
+
}
|
|
21
|
+
if (!num) {
|
|
22
|
+
return "";
|
|
23
|
+
}
|
|
24
|
+
if (typeof num === "string" && !num) {
|
|
25
|
+
return withLeadingZeroHours ? "00:00" : "0:00";
|
|
26
|
+
}
|
|
27
|
+
if (typeof num === "string" && num.indexOf(":") >= 0) {
|
|
28
|
+
//eslint-disable-next-line
|
|
29
|
+
let [_hours, _minutes] = num.split(":");
|
|
30
|
+
if (_minutes && _minutes.length === 1 && Number(_minutes) < 10) {
|
|
31
|
+
_minutes = Number(_minutes) + "0";
|
|
32
|
+
}
|
|
33
|
+
if (_hours && _minutes) {
|
|
34
|
+
if (withLeadingZeroHours) {
|
|
35
|
+
return withLeadingZero(_hours) + ":" + _minutes;
|
|
36
|
+
}
|
|
37
|
+
return _hours + ":" + _minutes;
|
|
38
|
+
} else if (!_hours && _minutes) {
|
|
39
|
+
return withLeadingZeroHours ? "00:" + _minutes : "0:" + _minutes;
|
|
40
|
+
} else if (!_minutes && _hours) {
|
|
41
|
+
return withLeadingZeroHours ? withLeadingZero(_hours) + ":00" : _hours + ":00";
|
|
42
|
+
} else {
|
|
43
|
+
return withLeadingZeroHours ? "00:00" : "0:00";
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (typeof num === "string" && num.indexOf(",") >= 0) {
|
|
47
|
+
num = num.replace(",", ".");
|
|
48
|
+
}
|
|
49
|
+
const input = typeof num === "string" ? parseFloat(num) : num;
|
|
50
|
+
if (!isDecimal(input)) {
|
|
51
|
+
if (withLeadingZeroHours) {
|
|
52
|
+
return withLeadingZero(input) + ":00";
|
|
53
|
+
}
|
|
54
|
+
return input + ":00";
|
|
55
|
+
}
|
|
56
|
+
const decimal = input.toFixed(2);
|
|
57
|
+
const time = decimal.toString().split(".");
|
|
58
|
+
let hours = time[0];
|
|
59
|
+
if (withLeadingZeroHours) {
|
|
60
|
+
hours = withLeadingZero(hours);
|
|
61
|
+
}
|
|
62
|
+
const minutes = time[1];
|
|
63
|
+
const minutes_formatted = Math.round(parseInt(minutes, 10) / 100 * 60);
|
|
64
|
+
return hours + ":" + withLeadingZero(minutes_formatted);
|
|
65
|
+
};
|
|
31
66
|
|
|
67
|
+
/**
|
|
68
|
+
* @function decimalToHours
|
|
69
|
+
* @deprecated
|
|
70
|
+
* @description
|
|
71
|
+
* Converts a decimal number representing hours into a formatted string (HH:MM).
|
|
72
|
+
* The input can be a number, string, or undefined. The function handles various formats
|
|
73
|
+
* and can optionally add a leading zero to the hours component.
|
|
74
|
+
*
|
|
75
|
+
* @param {number | string | undefined} num - The input representing the hours, which can be in decimal format, a time string, or undefined.
|
|
76
|
+
* @param {boolean} [withLeadingZeroHours=false] - Whether to add a leading zero to the hours part of the output.
|
|
77
|
+
*
|
|
78
|
+
* @returns {string} - A formatted time string in HH:MM format.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* decimalToHours(1.5) // "1:30"
|
|
82
|
+
* decimalToHours("3.5", true) // "03:30"
|
|
83
|
+
*/
|
|
32
84
|
export const decimalToHours = function (num, withLeadingZeroHours) {
|
|
33
85
|
if (withLeadingZeroHours === void 0) {
|
|
34
86
|
withLeadingZeroHours = false;
|
|
35
87
|
}
|
|
88
|
+
console.warn("Deprecated. Please use formatHours from @activecollab/components.");
|
|
36
89
|
if (!num) {
|
|
37
90
|
return "";
|
|
38
91
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeUtils.js","names":["
|
|
1
|
+
{"version":3,"file":"timeUtils.js","names":["formatHours","num","withLeadingZeroHours","indexOf","_hours","_minutes","split","length","Number","withLeadingZero","replace","input","parseFloat","isDecimal","decimal","toFixed","time","toString","hours","minutes","minutes_formatted","Math","round","parseInt","decimalToHours","console","warn","size","s","isInteger"],"sources":["../../../src/utils/timeUtils.ts"],"sourcesContent":["/**\n * @function formatHours\n * @description\n * Formats a decimal number representing hours into a formatted string (HH:MM).\n * The input can be a number, string, or undefined. The function handles various formats\n * and can optionally add a leading zero to the hours component.\n *\n * @param {number | string | undefined} num - The input representing the hours, which can be in decimal format, a time string, or undefined.\n * @param {boolean} [withLeadingZeroHours=false] - Whether to add a leading zero to the hours part of the output.\n *\n * @returns {string} - A formatted time string in HH:MM format.\n *\n * @example\n * formatHours(1.5) // \"1:30\"\n * formatHours(\"3.5\", true) // \"03:30\"\n */\nexport const formatHours = (\n num: number | string | undefined,\n withLeadingZeroHours = false\n): string => {\n if (!num) {\n return \"\";\n }\n if (typeof num === \"string\" && !num) {\n return withLeadingZeroHours ? `00:00` : \"0:00\";\n }\n if (typeof num === \"string\" && num.indexOf(\":\") >= 0) {\n //eslint-disable-next-line\n let [_hours, _minutes] = num.split(\":\");\n if (_minutes && _minutes.length === 1 && Number(_minutes) < 10) {\n _minutes = `${Number(_minutes)}0`;\n }\n if (_hours && _minutes) {\n if (withLeadingZeroHours) {\n return `${withLeadingZero(_hours)}:${_minutes}`;\n }\n return `${_hours}:${_minutes}`;\n } else if (!_hours && _minutes) {\n return withLeadingZeroHours ? `00:${_minutes}` : `0:${_minutes}`;\n } else if (!_minutes && _hours) {\n return withLeadingZeroHours\n ? `${withLeadingZero(_hours)}:00`\n : `${_hours}:00`;\n } else {\n return withLeadingZeroHours ? `00:00` : \"0:00\";\n }\n }\n if (typeof num === \"string\" && num.indexOf(\",\") >= 0) {\n num = num.replace(\",\", \".\");\n }\n const input = typeof num === \"string\" ? parseFloat(num) : num;\n\n if (!isDecimal(input)) {\n if (withLeadingZeroHours) {\n return `${withLeadingZero(input)}:00`;\n }\n return `${input}:00`;\n }\n\n const decimal = input.toFixed(2);\n const time = decimal.toString().split(\".\");\n let hours: string = time[0];\n if (withLeadingZeroHours) {\n hours = withLeadingZero(hours);\n }\n const minutes: string = time[1];\n const minutes_formatted = Math.round((parseInt(minutes, 10) / 100) * 60);\n\n return `${hours}:${withLeadingZero(minutes_formatted)}`;\n};\n\n/**\n * @function decimalToHours\n * @deprecated\n * @description\n * Converts a decimal number representing hours into a formatted string (HH:MM).\n * The input can be a number, string, or undefined. The function handles various formats\n * and can optionally add a leading zero to the hours component.\n *\n * @param {number | string | undefined} num - The input representing the hours, which can be in decimal format, a time string, or undefined.\n * @param {boolean} [withLeadingZeroHours=false] - Whether to add a leading zero to the hours part of the output.\n *\n * @returns {string} - A formatted time string in HH:MM format.\n *\n * @example\n * decimalToHours(1.5) // \"1:30\"\n * decimalToHours(\"3.5\", true) // \"03:30\"\n */\nexport const decimalToHours = (\n num: number | string | undefined,\n withLeadingZeroHours = false\n): string => {\n console.warn(\n \"Deprecated. Please use formatHours from @activecollab/components.\"\n );\n if (!num) {\n return \"\";\n }\n if (typeof num === \"string\" && !num) {\n return withLeadingZeroHours ? `00:00` : \"0:00\";\n }\n if (typeof num === \"string\" && num.indexOf(\":\") >= 0) {\n //eslint-disable-next-line\n let [_hours, _minutes] = num.split(\":\");\n if (_minutes && _minutes.length === 1 && Number(_minutes) < 10) {\n _minutes = `${Number(_minutes)}0`;\n }\n if (_hours && _minutes) {\n if (withLeadingZeroHours) {\n return `${withLeadingZero(_hours)}:${_minutes}`;\n }\n return `${_hours}:${_minutes}`;\n } else if (!_hours && _minutes) {\n return withLeadingZeroHours ? `00:${_minutes}` : `0:${_minutes}`;\n } else if (!_minutes && _hours) {\n return withLeadingZeroHours\n ? `${withLeadingZero(_hours)}:00`\n : `${_hours}:00`;\n } else {\n return withLeadingZeroHours ? `00:00` : \"0:00\";\n }\n }\n if (typeof num === \"string\" && num.indexOf(\",\") >= 0) {\n num = num.replace(\",\", \".\");\n }\n const input = typeof num === \"string\" ? parseFloat(num) : num;\n\n if (!isDecimal(input)) {\n if (withLeadingZeroHours) {\n return `${withLeadingZero(input)}:00`;\n }\n return `${input}:00`;\n }\n\n const decimal = input.toFixed(2);\n const time = decimal.toString().split(\".\");\n let hours: string = time[0];\n if (withLeadingZeroHours) {\n hours = withLeadingZero(hours);\n }\n const minutes: string = time[1];\n const minutes_formatted = Math.round((parseInt(minutes, 10) / 100) * 60);\n\n return `${hours}:${withLeadingZero(minutes_formatted)}`;\n};\n\nexport const withLeadingZero = (num: string | number, size = 2) => {\n let s = `${num}`;\n while (s.length < size) s = `0` + s;\n return s;\n};\n\nexport const isDecimal = (num: number): boolean => {\n return !Number.isInteger(num);\n};\n"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { formatHours } from "./timeUtils";
|
|
2
2
|
describe("timeUtis.ts", () => {
|
|
3
3
|
it.each([["1:30", "1:30"], ["1:30", "01:30", true], ["1.5", "1:30"], ["1.05", "1:03"], ["5,5", "5:30"], ["5.5", "5:30"], ["5:30", "5:30"], [",5", "0:30"], [".5", "0:30"], ["", ""], [":", "0:00"], ["1:", "1:00"], ["1:", "01:00", true], [":05", "00:05", true], [",05", "00:03", true], [0.5, "00:30", true], [1.5, "01:30", true], [1.5, "1:30", false], ["0:3", "0:30", false], ["555:35", "555:35", false], ["555", "555:00", false], [555.5, "555:30", false]])("should formatTime", function (value, expected, leadingZero) {
|
|
4
4
|
if (leadingZero === void 0) {
|
|
5
5
|
leadingZero = false;
|
|
6
6
|
}
|
|
7
|
-
expect(
|
|
7
|
+
expect(formatHours(value, leadingZero)).toEqual(expected);
|
|
8
8
|
});
|
|
9
9
|
});
|
|
10
10
|
//# sourceMappingURL=timeUtils.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeUtils.test.js","names":["
|
|
1
|
+
{"version":3,"file":"timeUtils.test.js","names":["formatHours","describe","it","each","value","expected","leadingZero","expect","toEqual"],"sources":["../../../src/utils/timeUtils.test.ts"],"sourcesContent":["import { formatHours } from \"./timeUtils\";\n\ndescribe(\"timeUtis.ts\", () => {\n it.each([\n [\"1:30\", \"1:30\"],\n [\"1:30\", \"01:30\", true],\n [\"1.5\", \"1:30\"],\n [\"1.05\", \"1:03\"],\n [\"5,5\", \"5:30\"],\n [\"5.5\", \"5:30\"],\n [\"5:30\", \"5:30\"],\n [\",5\", \"0:30\"],\n [\".5\", \"0:30\"],\n [\"\", \"\"],\n [\":\", \"0:00\"],\n [\"1:\", \"1:00\"],\n [\"1:\", \"01:00\", true],\n [\":05\", \"00:05\", true],\n [\",05\", \"00:03\", true],\n [0.5, \"00:30\", true],\n [1.5, \"01:30\", true],\n [1.5, \"1:30\", false],\n [\"0:3\", \"0:30\", false],\n [\"555:35\", \"555:35\", false],\n [\"555\", \"555:00\", false],\n [555.5, \"555:30\", false],\n ])(\"should formatTime\", (value, expected, leadingZero = false) => {\n expect(formatHours(value, leadingZero)).toEqual(expected);\n });\n});\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,aAAa;AAEzCC,QAAQ,CAAC,aAAa,EAAE,MAAM;EAC5BC,EAAE,CAACC,IAAI,CAAC,CACN,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EACvB,CAAC,KAAK,EAAE,MAAM,CAAC,EACf,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,KAAK,EAAE,MAAM,CAAC,EACf,CAAC,KAAK,EAAE,MAAM,CAAC,EACf,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,IAAI,EAAE,MAAM,CAAC,EACd,CAAC,IAAI,EAAE,MAAM,CAAC,EACd,CAAC,EAAE,EAAE,EAAE,CAAC,EACR,CAAC,GAAG,EAAE,MAAM,CAAC,EACb,CAAC,IAAI,EAAE,MAAM,CAAC,EACd,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EACrB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EACtB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EACtB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EACpB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EACpB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EACpB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EACtB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,EAC3B,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,EACxB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CACzB,CAAC,CAAC,mBAAmB,EAAE,UAACC,KAAK,EAAEC,QAAQ,EAAEC,WAAW,EAAa;IAAA,IAAxBA,WAAW;MAAXA,WAAW,GAAG,KAAK;IAAA;IAC3DC,MAAM,CAACP,WAAW,CAACI,KAAK,EAAEE,WAAW,CAAC,CAAC,CAACE,OAAO,CAACH,QAAQ,CAAC;EAC3D,CAAC,CAAC;AACJ,CAAC,CAAC"}
|