@activecollab/components 2.0.182 → 2.0.184

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/cjs/components/DatePicker/DatePickerV2.js +1 -0
  2. package/dist/cjs/components/DatePicker/DatePickerV2.js.map +1 -1
  3. package/dist/cjs/components/Display/DisplayHours.js +4 -2
  4. package/dist/cjs/components/Display/DisplayHours.js.map +1 -1
  5. package/dist/cjs/components/Display/types.js.map +1 -1
  6. package/dist/cjs/components/Menu/Menu.js +1 -0
  7. package/dist/cjs/components/Menu/Menu.js.map +1 -1
  8. package/dist/cjs/components/Select/Select.js +1 -0
  9. package/dist/cjs/components/Select/Select.js.map +1 -1
  10. package/dist/cjs/utils/timeUtils.js +17 -11
  11. package/dist/cjs/utils/timeUtils.js.map +1 -1
  12. package/dist/cjs/utils/timeUtils.test.js +3 -2
  13. package/dist/cjs/utils/timeUtils.test.js.map +1 -1
  14. package/dist/esm/components/DatePicker/DatePickerV2.d.ts.map +1 -1
  15. package/dist/esm/components/DatePicker/DatePickerV2.js +1 -0
  16. package/dist/esm/components/DatePicker/DatePickerV2.js.map +1 -1
  17. package/dist/esm/components/Display/DisplayHours.d.ts.map +1 -1
  18. package/dist/esm/components/Display/DisplayHours.js +2 -1
  19. package/dist/esm/components/Display/DisplayHours.js.map +1 -1
  20. package/dist/esm/components/Display/types.d.ts +1 -0
  21. package/dist/esm/components/Display/types.d.ts.map +1 -1
  22. package/dist/esm/components/Display/types.js.map +1 -1
  23. package/dist/esm/components/Menu/Menu.d.ts.map +1 -1
  24. package/dist/esm/components/Menu/Menu.js +1 -0
  25. package/dist/esm/components/Menu/Menu.js.map +1 -1
  26. package/dist/esm/components/Select/Select.d.ts.map +1 -1
  27. package/dist/esm/components/Select/Select.js +1 -0
  28. package/dist/esm/components/Select/Select.js.map +1 -1
  29. package/dist/esm/utils/timeUtils.d.ts +2 -1
  30. package/dist/esm/utils/timeUtils.d.ts.map +1 -1
  31. package/dist/esm/utils/timeUtils.js +20 -12
  32. package/dist/esm/utils/timeUtils.js.map +1 -1
  33. package/dist/esm/utils/timeUtils.test.js +5 -2
  34. package/dist/esm/utils/timeUtils.test.js.map +1 -1
  35. package/dist/index.js +24 -13
  36. package/dist/index.js.map +1 -1
  37. package/dist/index.min.js +1 -1
  38. package/dist/index.min.js.map +1 -1
  39. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Select.js","names":["React","useCallback","useState","useMemo","useEffect","useRef","classNames","OptionContent","StyledSelectForm","StyledSelectInput","StyledCheckbox","StyledRadioButton","StyledStartAdornment","StyledEndAdornment","useForkRef","Autocomplete","isOptionGroup","Menu","Select","_ref","type","mode","target","options","selected","mixed","position","onChange","placeholder","emptyAction","disableSearch","forceCloseMenu","selectClassName","keepSameOptionsOrder","onSelectOpen","onSelectClose","renderOption","handleDefaultOptionChange","preselectDefaultValue","startAdornment","endAdornment","focusInput","prop","console","warn","childNode","elementRef","handleRef","Tag","formRef","open","setOpen","selectedOptions","Array","selectOptions","allOptionValues","reduce","acc","option","id","allGroupOptions","map","mixedOptions","length","removeFromMixedOptions","idsToRemove","current","filter","mixedOption","includes","isAllOptionsChecked","every","someOptionsChecked","some","_childNode$current","focus","handleChange","selectedValue","undefined","onClose","onOpen","props","menuClassName","onPopperOpen","_elementRef$current","className","handleEmptyAction","value","_formRef$current","reset","handleDefaultOptionChangeCallback","handleRenderOption","createElement","Fragment","imageUrl","image","color","textColor","name","additionalInfo","_extends","checked","ref","clearInputOnSelect","inputEl","displayName"],"sources":["../../../../src/components/Select/Select.tsx"],"sourcesContent":["import React, {\n FC,\n useCallback,\n useState,\n ReactElement,\n useMemo,\n useEffect,\n useRef,\n Ref,\n ReactNode,\n} from \"react\";\n\nimport { Placement } from \"@popperjs/core\";\nimport classNames from \"classnames\";\n\nimport { OptionContent } from \"./OptionContent/OptionContent\";\nimport {\n StyledSelectForm,\n StyledSelectInput,\n StyledCheckbox,\n StyledRadioButton,\n StyledStartAdornment,\n StyledEndAdornment,\n} from \"./Styles\";\nimport useForkRef from \"../../utils/useForkRef\";\nimport { Autocomplete, isOptionGroup } from \"../Autocomplete\";\nimport { IAutocompleteProps } from \"../Autocomplete/Autocomplete\";\nimport { Menu } from \"../Menu/Menu\";\nimport { IOptionItemProps } from \"../Select/Option\";\nimport { IOptionGroupProps } from \"../Select/OptionGroup\";\n\nexport interface ElementWithRef<T> extends ReactElement {\n ref?: Ref<T>;\n}\n\nexport interface ISelectProps\n extends Omit<\n IAutocompleteProps,\n | \"handleChange\"\n | \"inputEl\"\n | \"handleEmptyAction\"\n | \"clearInputOnSelect\"\n | \"mixedOptions\"\n > {\n /** Menu width mode */\n mode?: \"normal\" | \"wider\" | \"tiny\";\n /** Set select target element */\n target?: ElementWithRef<Element>;\n /** Set Select position */\n position?: Placement;\n /** onChange callback */\n onChange?: (e: (string | number)[] | string | number) => void;\n /** Placeholder for Select input */\n placeholder?: string;\n /** Function that triggers when empty is clicked */\n emptyAction?: (e: string | undefined) => void;\n /** Removes input from Select */\n disableSearch?: boolean;\n /** Close menu on select */\n forceCloseMenu?: boolean;\n /** Set select classNames */\n selectClassName?: string;\n /** Callback called when the Select menu is opened */\n onSelectOpen?: () => void;\n /** Callback called when the Select menu is closed */\n onSelectClose?: () => void;\n /** Node element on the left side */\n startAdornment?: ReactNode;\n /** Node element on the right side */\n endAdornment?: ReactNode;\n /** Focus search input on inline select */\n focusInput?: boolean;\n /** Mixed options values */\n mixed?: (string | number)[];\n}\n\nexport const Select: FC<ISelectProps> = ({\n type = \"single\",\n mode,\n target,\n options,\n selected = [],\n mixed = [],\n position = \"bottom-start\",\n onChange = () => null,\n placeholder,\n emptyAction = (): null => null,\n disableSearch = false,\n forceCloseMenu,\n selectClassName,\n keepSameOptionsOrder = false,\n onSelectOpen,\n onSelectClose,\n renderOption,\n handleDefaultOptionChange,\n preselectDefaultValue = type === \"single\",\n startAdornment,\n endAdornment,\n focusInput = false,\n ...prop\n}) => {\n if (disableSearch && (startAdornment || endAdornment)) {\n console.warn(\"Adornments are not visible when search bar is hidden\");\n }\n const childNode = useRef<HTMLInputElement | null>();\n const elementRef = useRef<HTMLInputElement | null>(null);\n\n const handleRef = useForkRef(childNode, elementRef);\n\n const Tag = !target ? \"div\" : Menu;\n const formRef = useRef<HTMLFormElement | null>(null);\n\n const [open, setOpen] = useState(false);\n\n const selectedOptions = useMemo(\n () => (selected instanceof Array ? selected : [selected]),\n [selected]\n );\n\n const selectOptions = useMemo(() => {\n if (!options) {\n return [];\n }\n return options;\n }, [options]);\n\n const allOptionValues = useMemo(() => {\n return selectOptions.reduce(\n (\n acc: (string | number)[],\n option: IOptionGroupProps | IOptionItemProps\n ) => {\n if (!isOptionGroup(option)) {\n return [...acc, option.id];\n }\n const allGroupOptions = option.options.map((option) => option.id);\n return [...acc, ...allGroupOptions];\n },\n []\n );\n }, [selectOptions]);\n\n const mixedOptions = useRef(type === \"multiple\" && mixed.length ? mixed : []);\n\n const removeFromMixedOptions = useCallback(\n (idsToRemove: (string | number)[]) => {\n mixedOptions.current = mixedOptions.current.filter(\n (mixedOption) => !idsToRemove.includes(mixedOption)\n );\n },\n []\n );\n\n const isAllOptionsChecked = useMemo(\n () => allOptionValues.every((option) => selectedOptions.includes(option)),\n [allOptionValues, selectedOptions]\n );\n\n const someOptionsChecked = useMemo(\n () => allOptionValues.some((option) => selectedOptions.includes(option)),\n [allOptionValues, selectedOptions]\n );\n\n useEffect(() => {\n if ((open && target) || (!target && focusInput)) {\n childNode?.current?.focus();\n }\n }, [focusInput, open, target]);\n\n const handleChange = useCallback(\n (selectedValue) => {\n if (forceCloseMenu) {\n if (typeof onSelectClose === \"function\") onSelectClose();\n setOpen(false);\n }\n if (\n selectedValue !== undefined &&\n selectedValue !== selected &&\n !(selectedValue instanceof Array && selectedValue.includes(undefined))\n ) {\n onChange(selectedValue);\n type === \"multiple\" &&\n mixedOptions.current.length &&\n removeFromMixedOptions(selectedValue);\n }\n },\n [\n forceCloseMenu,\n selected,\n onSelectClose,\n onChange,\n type,\n removeFromMixedOptions,\n ]\n );\n\n const onClose = useCallback(() => {\n setOpen(false);\n if (onSelectClose) {\n onSelectClose();\n }\n }, [onSelectClose]);\n\n const onOpen = useCallback(() => {\n setOpen(true);\n if (onSelectOpen) {\n onSelectOpen();\n }\n }, [onSelectOpen]);\n\n const props = useMemo(() => {\n if (target) {\n return {\n menuClassName: classNames(\"c-select\", selectClassName),\n onClose,\n onOpen,\n target,\n mode,\n open,\n position,\n onPopperOpen: () => elementRef?.current?.focus(),\n };\n }\n return { className: classNames(\"c-select\", selectClassName) };\n }, [target, selectClassName, onClose, onOpen, mode, open, position]);\n\n const handleEmptyAction = useCallback(\n (value) => {\n emptyAction(value);\n if (forceCloseMenu) {\n setOpen(false);\n }\n formRef.current?.reset();\n },\n [emptyAction, forceCloseMenu]\n );\n\n const handleDefaultOptionChangeCallback = useCallback(() => {\n if (type === \"multiple\") {\n if (selectedOptions.length === allOptionValues.length) {\n if (typeof handleDefaultOptionChange === \"function\") {\n handleDefaultOptionChange();\n } else {\n onChange([]);\n }\n } else {\n if (typeof handleDefaultOptionChange === \"function\") {\n handleDefaultOptionChange();\n } else {\n onChange(allOptionValues);\n }\n }\n } else {\n if (typeof handleDefaultOptionChange === \"function\") {\n handleDefaultOptionChange();\n } else {\n onChange(\"\");\n }\n }\n if (forceCloseMenu) {\n setOpen(false);\n }\n }, [\n onChange,\n type,\n forceCloseMenu,\n selectedOptions.length,\n allOptionValues,\n handleDefaultOptionChange,\n ]);\n\n const handleRenderOption = useCallback(\n (option, props) => {\n if (typeof renderOption === \"function\") {\n return renderOption(option, props);\n }\n return (\n <>\n <OptionContent\n imageUrl={option.image}\n color={option.color}\n textColor={option.textColor}\n name={option.name}\n additionalInfo={option.additionalInfo}\n />\n {option.id === null ? (\n type === \"multiple\" ? (\n <StyledCheckbox\n checked={isAllOptionsChecked}\n mixed={someOptionsChecked && !isAllOptionsChecked}\n {...props}\n />\n ) : (\n <StyledRadioButton\n checked={selectedOptions.length < 1 || !selectedOptions[0]}\n {...props}\n />\n )\n ) : type === \"multiple\" ? (\n <StyledCheckbox\n mixed={mixedOptions.current.includes(option.id)}\n {...props}\n />\n ) : (\n <StyledRadioButton {...props} />\n )}\n </>\n );\n },\n [\n isAllOptionsChecked,\n renderOption,\n type,\n someOptionsChecked,\n selectedOptions,\n ]\n );\n\n return (\n <Tag {...props}>\n <div>\n {!disableSearch ? (\n <StyledSelectForm ref={formRef}>\n {startAdornment ? (\n <StyledStartAdornment>{startAdornment}</StyledStartAdornment>\n ) : null}\n <StyledSelectInput ref={handleRef} placeholder={placeholder} />\n {endAdornment ? (\n <StyledEndAdornment>{endAdornment}</StyledEndAdornment>\n ) : null}\n </StyledSelectForm>\n ) : null}\n <Autocomplete\n {...prop}\n clearInputOnSelect\n inputEl={childNode}\n handleEmptyAction={handleEmptyAction}\n selected={selected}\n handleChange={handleChange}\n renderOption={handleRenderOption}\n options={options}\n mixedOptions={mixedOptions.current}\n handleDefaultOptionChange={handleDefaultOptionChangeCallback}\n type={type}\n preselectDefaultValue={preselectDefaultValue}\n keepSameOptionsOrder={keepSameOptionsOrder}\n />\n </div>\n </Tag>\n );\n};\n\nSelect.displayName = \"Select\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"Select.js","names":["React","useCallback","useState","useMemo","useEffect","useRef","classNames","OptionContent","StyledSelectForm","StyledSelectInput","StyledCheckbox","StyledRadioButton","StyledStartAdornment","StyledEndAdornment","useForkRef","Autocomplete","isOptionGroup","Menu","Select","_ref","type","mode","target","options","selected","mixed","position","onChange","placeholder","emptyAction","disableSearch","forceCloseMenu","selectClassName","keepSameOptionsOrder","onSelectOpen","onSelectClose","renderOption","handleDefaultOptionChange","preselectDefaultValue","startAdornment","endAdornment","focusInput","prop","console","warn","childNode","elementRef","handleRef","Tag","formRef","open","setOpen","selectedOptions","Array","selectOptions","allOptionValues","reduce","acc","option","id","allGroupOptions","map","mixedOptions","length","removeFromMixedOptions","idsToRemove","current","filter","mixedOption","includes","isAllOptionsChecked","every","someOptionsChecked","some","_childNode$current","focus","handleChange","selectedValue","undefined","onClose","onOpen","props","menuClassName","active","onPopperOpen","_elementRef$current","className","handleEmptyAction","value","_formRef$current","reset","handleDefaultOptionChangeCallback","handleRenderOption","createElement","Fragment","imageUrl","image","color","textColor","name","additionalInfo","_extends","checked","ref","clearInputOnSelect","inputEl","displayName"],"sources":["../../../../src/components/Select/Select.tsx"],"sourcesContent":["import React, {\n FC,\n useCallback,\n useState,\n ReactElement,\n useMemo,\n useEffect,\n useRef,\n Ref,\n ReactNode,\n} from \"react\";\n\nimport { Placement } from \"@popperjs/core\";\nimport classNames from \"classnames\";\n\nimport { OptionContent } from \"./OptionContent/OptionContent\";\nimport {\n StyledSelectForm,\n StyledSelectInput,\n StyledCheckbox,\n StyledRadioButton,\n StyledStartAdornment,\n StyledEndAdornment,\n} from \"./Styles\";\nimport useForkRef from \"../../utils/useForkRef\";\nimport { Autocomplete, isOptionGroup } from \"../Autocomplete\";\nimport { IAutocompleteProps } from \"../Autocomplete/Autocomplete\";\nimport { Menu } from \"../Menu/Menu\";\nimport { IOptionItemProps } from \"../Select/Option\";\nimport { IOptionGroupProps } from \"../Select/OptionGroup\";\n\nexport interface ElementWithRef<T> extends ReactElement {\n ref?: Ref<T>;\n}\n\nexport interface ISelectProps\n extends Omit<\n IAutocompleteProps,\n | \"handleChange\"\n | \"inputEl\"\n | \"handleEmptyAction\"\n | \"clearInputOnSelect\"\n | \"mixedOptions\"\n > {\n /** Menu width mode */\n mode?: \"normal\" | \"wider\" | \"tiny\";\n /** Set select target element */\n target?: ElementWithRef<Element>;\n /** Set Select position */\n position?: Placement;\n /** onChange callback */\n onChange?: (e: (string | number)[] | string | number) => void;\n /** Placeholder for Select input */\n placeholder?: string;\n /** Function that triggers when empty is clicked */\n emptyAction?: (e: string | undefined) => void;\n /** Removes input from Select */\n disableSearch?: boolean;\n /** Close menu on select */\n forceCloseMenu?: boolean;\n /** Set select classNames */\n selectClassName?: string;\n /** Callback called when the Select menu is opened */\n onSelectOpen?: () => void;\n /** Callback called when the Select menu is closed */\n onSelectClose?: () => void;\n /** Node element on the left side */\n startAdornment?: ReactNode;\n /** Node element on the right side */\n endAdornment?: ReactNode;\n /** Focus search input on inline select */\n focusInput?: boolean;\n /** Mixed options values */\n mixed?: (string | number)[];\n}\n\nexport const Select: FC<ISelectProps> = ({\n type = \"single\",\n mode,\n target,\n options,\n selected = [],\n mixed = [],\n position = \"bottom-start\",\n onChange = () => null,\n placeholder,\n emptyAction = (): null => null,\n disableSearch = false,\n forceCloseMenu,\n selectClassName,\n keepSameOptionsOrder = false,\n onSelectOpen,\n onSelectClose,\n renderOption,\n handleDefaultOptionChange,\n preselectDefaultValue = type === \"single\",\n startAdornment,\n endAdornment,\n focusInput = false,\n ...prop\n}) => {\n if (disableSearch && (startAdornment || endAdornment)) {\n console.warn(\"Adornments are not visible when search bar is hidden\");\n }\n const childNode = useRef<HTMLInputElement | null>();\n const elementRef = useRef<HTMLInputElement | null>(null);\n\n const handleRef = useForkRef(childNode, elementRef);\n\n const Tag = !target ? \"div\" : Menu;\n const formRef = useRef<HTMLFormElement | null>(null);\n\n const [open, setOpen] = useState(false);\n\n const selectedOptions = useMemo(\n () => (selected instanceof Array ? selected : [selected]),\n [selected]\n );\n\n const selectOptions = useMemo(() => {\n if (!options) {\n return [];\n }\n return options;\n }, [options]);\n\n const allOptionValues = useMemo(() => {\n return selectOptions.reduce(\n (\n acc: (string | number)[],\n option: IOptionGroupProps | IOptionItemProps\n ) => {\n if (!isOptionGroup(option)) {\n return [...acc, option.id];\n }\n const allGroupOptions = option.options.map((option) => option.id);\n return [...acc, ...allGroupOptions];\n },\n []\n );\n }, [selectOptions]);\n\n const mixedOptions = useRef(type === \"multiple\" && mixed.length ? mixed : []);\n\n const removeFromMixedOptions = useCallback(\n (idsToRemove: (string | number)[]) => {\n mixedOptions.current = mixedOptions.current.filter(\n (mixedOption) => !idsToRemove.includes(mixedOption)\n );\n },\n []\n );\n\n const isAllOptionsChecked = useMemo(\n () => allOptionValues.every((option) => selectedOptions.includes(option)),\n [allOptionValues, selectedOptions]\n );\n\n const someOptionsChecked = useMemo(\n () => allOptionValues.some((option) => selectedOptions.includes(option)),\n [allOptionValues, selectedOptions]\n );\n\n useEffect(() => {\n if ((open && target) || (!target && focusInput)) {\n childNode?.current?.focus();\n }\n }, [focusInput, open, target]);\n\n const handleChange = useCallback(\n (selectedValue) => {\n if (forceCloseMenu) {\n if (typeof onSelectClose === \"function\") onSelectClose();\n setOpen(false);\n }\n if (\n selectedValue !== undefined &&\n selectedValue !== selected &&\n !(selectedValue instanceof Array && selectedValue.includes(undefined))\n ) {\n onChange(selectedValue);\n type === \"multiple\" &&\n mixedOptions.current.length &&\n removeFromMixedOptions(selectedValue);\n }\n },\n [\n forceCloseMenu,\n selected,\n onSelectClose,\n onChange,\n type,\n removeFromMixedOptions,\n ]\n );\n\n const onClose = useCallback(() => {\n setOpen(false);\n if (onSelectClose) {\n onSelectClose();\n }\n }, [onSelectClose]);\n\n const onOpen = useCallback(() => {\n setOpen(true);\n if (onSelectOpen) {\n onSelectOpen();\n }\n }, [onSelectOpen]);\n\n const props = useMemo(() => {\n if (target) {\n return {\n menuClassName: classNames(\"c-select\", selectClassName),\n onClose,\n onOpen,\n target,\n mode,\n open,\n active: open,\n position,\n onPopperOpen: () => elementRef?.current?.focus(),\n };\n }\n return { className: classNames(\"c-select\", selectClassName) };\n }, [target, selectClassName, onClose, onOpen, mode, open, position]);\n\n const handleEmptyAction = useCallback(\n (value) => {\n emptyAction(value);\n if (forceCloseMenu) {\n setOpen(false);\n }\n formRef.current?.reset();\n },\n [emptyAction, forceCloseMenu]\n );\n\n const handleDefaultOptionChangeCallback = useCallback(() => {\n if (type === \"multiple\") {\n if (selectedOptions.length === allOptionValues.length) {\n if (typeof handleDefaultOptionChange === \"function\") {\n handleDefaultOptionChange();\n } else {\n onChange([]);\n }\n } else {\n if (typeof handleDefaultOptionChange === \"function\") {\n handleDefaultOptionChange();\n } else {\n onChange(allOptionValues);\n }\n }\n } else {\n if (typeof handleDefaultOptionChange === \"function\") {\n handleDefaultOptionChange();\n } else {\n onChange(\"\");\n }\n }\n if (forceCloseMenu) {\n setOpen(false);\n }\n }, [\n onChange,\n type,\n forceCloseMenu,\n selectedOptions.length,\n allOptionValues,\n handleDefaultOptionChange,\n ]);\n\n const handleRenderOption = useCallback(\n (option, props) => {\n if (typeof renderOption === \"function\") {\n return renderOption(option, props);\n }\n return (\n <>\n <OptionContent\n imageUrl={option.image}\n color={option.color}\n textColor={option.textColor}\n name={option.name}\n additionalInfo={option.additionalInfo}\n />\n {option.id === null ? (\n type === \"multiple\" ? (\n <StyledCheckbox\n checked={isAllOptionsChecked}\n mixed={someOptionsChecked && !isAllOptionsChecked}\n {...props}\n />\n ) : (\n <StyledRadioButton\n checked={selectedOptions.length < 1 || !selectedOptions[0]}\n {...props}\n />\n )\n ) : type === \"multiple\" ? (\n <StyledCheckbox\n mixed={mixedOptions.current.includes(option.id)}\n {...props}\n />\n ) : (\n <StyledRadioButton {...props} />\n )}\n </>\n );\n },\n [\n isAllOptionsChecked,\n renderOption,\n type,\n someOptionsChecked,\n selectedOptions,\n ]\n );\n\n return (\n <Tag {...props}>\n <div>\n {!disableSearch ? (\n <StyledSelectForm ref={formRef}>\n {startAdornment ? (\n <StyledStartAdornment>{startAdornment}</StyledStartAdornment>\n ) : null}\n <StyledSelectInput ref={handleRef} placeholder={placeholder} />\n {endAdornment ? (\n <StyledEndAdornment>{endAdornment}</StyledEndAdornment>\n ) : null}\n </StyledSelectForm>\n ) : null}\n <Autocomplete\n {...prop}\n clearInputOnSelect\n inputEl={childNode}\n handleEmptyAction={handleEmptyAction}\n selected={selected}\n handleChange={handleChange}\n renderOption={handleRenderOption}\n options={options}\n mixedOptions={mixedOptions.current}\n handleDefaultOptionChange={handleDefaultOptionChangeCallback}\n type={type}\n preselectDefaultValue={preselectDefaultValue}\n keepSameOptionsOrder={keepSameOptionsOrder}\n />\n </div>\n </Tag>\n );\n};\n\nSelect.displayName = \"Select\";\n"],"mappings":"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"}
@@ -7,6 +7,7 @@
7
7
  *
8
8
  * @param {number | string | undefined} num - The input representing the hours, which can be in decimal format, a time string, or undefined.
9
9
  * @param {boolean} [withLeadingZeroHours=false] - Whether to add a leading zero to the hours part of the output.
10
+ * @param {boolean} [trimZeroes=false] - Whether to remove minutes if they are zero.
10
11
  *
11
12
  * @returns {string} - A formatted time string in HH:MM format.
12
13
  *
@@ -14,7 +15,7 @@
14
15
  * formatHours(1.5) // "1:30"
15
16
  * formatHours("3.5", true) // "03:30"
16
17
  */
17
- export declare const formatHours: (num: number | string | undefined, withLeadingZeroHours?: boolean) => string;
18
+ export declare const formatHours: (num: number | string | undefined, withLeadingZeroHours?: boolean, trimZeroes?: boolean) => string;
18
19
  export declare const withLeadingZero: (num: string | number, size?: number) => string;
19
20
  export declare const isDecimal: (num: number) => boolean;
20
21
  export declare const isValidTime: (time: string | undefined) => boolean;
@@ -1 +1 @@
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,eAAO,MAAM,eAAe,QAAS,MAAM,GAAG,MAAM,0BAInD,CAAC;AAEF,eAAO,MAAM,SAAS,QAAS,MAAM,KAAG,OAEvC,CAAC;AAEF,eAAO,MAAM,WAAW,SAAU,MAAM,GAAG,SAAS,KAAG,OAEtD,CAAC"}
1
+ {"version":3,"file":"timeUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/timeUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,WAAW,QACjB,MAAM,GAAG,MAAM,GAAG,SAAS,2DAG/B,MA+DF,CAAC;AAEF,eAAO,MAAM,eAAe,QAAS,MAAM,GAAG,MAAM,0BAInD,CAAC;AAEF,eAAO,MAAM,SAAS,QAAS,MAAM,KAAG,OAEvC,CAAC;AAEF,eAAO,MAAM,WAAW,SAAU,MAAM,GAAG,SAAS,KAAG,OAEtD,CAAC"}
@@ -7,6 +7,7 @@
7
7
  *
8
8
  * @param {number | string | undefined} num - The input representing the hours, which can be in decimal format, a time string, or undefined.
9
9
  * @param {boolean} [withLeadingZeroHours=false] - Whether to add a leading zero to the hours part of the output.
10
+ * @param {boolean} [trimZeroes=false] - Whether to remove minutes if they are zero.
10
11
  *
11
12
  * @returns {string} - A formatted time string in HH:MM format.
12
13
  *
@@ -14,44 +15,48 @@
14
15
  * formatHours(1.5) // "1:30"
15
16
  * formatHours("3.5", true) // "03:30"
16
17
  */
17
- export const formatHours = function (num, withLeadingZeroHours) {
18
+ export const formatHours = function (num, withLeadingZeroHours, trimZeroes) {
18
19
  if (withLeadingZeroHours === void 0) {
19
20
  withLeadingZeroHours = false;
20
21
  }
22
+ if (trimZeroes === void 0) {
23
+ trimZeroes = false;
24
+ }
21
25
  if (num === 0 || num === "0") {
22
- return withLeadingZeroHours ? "00:00" : "0:00";
26
+ return trimZeroes ? "0" : withLeadingZeroHours ? "00:00" : "0:00";
23
27
  }
24
28
  if (!num) {
25
29
  return "";
26
30
  }
27
31
  if (typeof num === "string" && num.indexOf(":") >= 0) {
28
- //eslint-disable-next-line
32
+ // eslint-disable-next-line prefer-const
29
33
  let [_hours, _minutes] = num.split(":");
30
34
  if (_minutes && _minutes.length === 1 && Number(_minutes) < 10) {
31
35
  _minutes = Number(_minutes) + "0";
32
36
  }
33
37
  if (_hours && _minutes) {
34
- if (withLeadingZeroHours) {
35
- return withLeadingZero(_hours) + ":" + _minutes;
38
+ if (trimZeroes && _minutes === "00") {
39
+ return withLeadingZeroHours ? withLeadingZero(_hours) : String(Number(_hours));
36
40
  }
37
- return _hours + ":" + _minutes;
41
+ return withLeadingZeroHours ? withLeadingZero(_hours) + ":" + _minutes : _hours + ":" + _minutes;
42
+ } else if (_hours && !_minutes) {
43
+ return withLeadingZeroHours ? withLeadingZero(_hours) + ":00" : _hours + ":00";
38
44
  } else if (!_hours && _minutes) {
39
45
  return withLeadingZeroHours ? "00:" + _minutes : "0:" + _minutes;
40
- } else if (!_minutes && _hours) {
41
- return withLeadingZeroHours ? withLeadingZero(_hours) + ":00" : _hours + ":00";
42
- } else {
46
+ } else if (!_hours && !_minutes) {
43
47
  return withLeadingZeroHours ? "00:00" : "0:00";
44
48
  }
49
+ return withLeadingZeroHours ? "00:" + _minutes : "0:" + _minutes;
45
50
  }
46
51
  if (typeof num === "string" && num.indexOf(",") >= 0) {
47
52
  num = num.replace(",", ".");
48
53
  }
49
54
  const input = typeof num === "string" ? parseFloat(num) : num;
50
55
  if (!isDecimal(input)) {
51
- if (withLeadingZeroHours) {
52
- return withLeadingZero(input) + ":00";
56
+ if (trimZeroes) {
57
+ return withLeadingZeroHours ? withLeadingZero(input) : String(Number(input));
53
58
  }
54
- return input + ":00";
59
+ return withLeadingZeroHours ? withLeadingZero(input) + ":00" : input + ":00";
55
60
  }
56
61
  const decimal = input.toFixed(2);
57
62
  const time = decimal.toString().split(".");
@@ -61,6 +66,9 @@ export const formatHours = function (num, withLeadingZeroHours) {
61
66
  }
62
67
  const minutes = time[1];
63
68
  const minutes_formatted = Math.round(parseInt(minutes, 10) / 100 * 60);
69
+ if (trimZeroes && minutes_formatted === 0) {
70
+ return hours;
71
+ }
64
72
  return hours + ":" + withLeadingZero(minutes_formatted);
65
73
  };
66
74
  export const withLeadingZero = function (num, size) {
@@ -1 +1 @@
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","size","s","isInteger","isValidTime","undefined","test"],"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 === 0 || num === \"0\") {\n return withLeadingZeroHours ? \"00:00\" : \"0:00\";\n }\n if (!num) {\n return \"\";\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\nexport const isValidTime = (time: string | undefined): boolean => {\n return time === undefined || /^([01]\\d|2[0-3]):([0-5]\\d)$/.test(time);\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"timeUtils.js","names":["formatHours","num","withLeadingZeroHours","trimZeroes","indexOf","_hours","_minutes","split","length","Number","withLeadingZero","String","replace","input","parseFloat","isDecimal","decimal","toFixed","time","toString","hours","minutes","minutes_formatted","Math","round","parseInt","size","s","isInteger","isValidTime","undefined","test"],"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 * @param {boolean} [trimZeroes=false] - Whether to remove minutes if they are zero.\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 trimZeroes = false\n): string => {\n if (num === 0 || num === \"0\") {\n return trimZeroes ? \"0\" : withLeadingZeroHours ? \"00:00\" : \"0:00\";\n }\n if (!num) {\n return \"\";\n }\n if (typeof num === \"string\" && num.indexOf(\":\") >= 0) {\n // eslint-disable-next-line prefer-const\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 (trimZeroes && _minutes === \"00\") {\n return withLeadingZeroHours\n ? withLeadingZero(_hours)\n : String(Number(_hours));\n }\n return withLeadingZeroHours\n ? `${withLeadingZero(_hours)}:${_minutes}`\n : `${_hours}:${_minutes}`;\n } else if (_hours && !_minutes) {\n return withLeadingZeroHours\n ? `${withLeadingZero(_hours)}:00`\n : `${_hours}:00`;\n } else if (!_hours && _minutes) {\n return withLeadingZeroHours ? `00:${_minutes}` : `0:${_minutes}`;\n } else if (!_hours && !_minutes) {\n return withLeadingZeroHours ? \"00:00\" : \"0:00\";\n }\n return withLeadingZeroHours ? `00:${_minutes}` : `0:${_minutes}`;\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 (trimZeroes) {\n return withLeadingZeroHours\n ? withLeadingZero(input)\n : String(Number(input));\n }\n return withLeadingZeroHours\n ? `${withLeadingZero(input)}:00`\n : `${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 if (trimZeroes && minutes_formatted === 0) {\n return hours;\n }\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\nexport const isValidTime = (time: string | undefined): boolean => {\n return time === undefined || /^([01]\\d|2[0-3]):([0-5]\\d)$/.test(time);\n};\n"],"mappings":"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"}
@@ -1,10 +1,13 @@
1
1
  import { formatHours } from "./timeUtils";
2
2
  describe("timeUtis.ts", () => {
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) {
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], ["5:00", "5", false, true], ["05:00", "05", true, true], ["12:00", "12", false, true], ["12:30", "12:30", false, true], [5, "5:00", false, false], [5, "5", false, true], [0, "0:00", false, false], [0, "0", false, true], [5, "05", true, true], ["5:00", "05", true, true], ["05:00", "5", false, true]])("should formatTime", function (value, expected, leadingZero, trimZeroes) {
4
4
  if (leadingZero === void 0) {
5
5
  leadingZero = false;
6
6
  }
7
- expect(formatHours(value, leadingZero)).toEqual(expected);
7
+ if (trimZeroes === void 0) {
8
+ trimZeroes = false;
9
+ }
10
+ expect(formatHours(value, leadingZero, trimZeroes)).toEqual(expected);
8
11
  });
9
12
  });
10
13
  //# sourceMappingURL=timeUtils.test.js.map
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"timeUtils.test.js","names":["formatHours","describe","it","each","value","expected","leadingZero","trimZeroes","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 [\"5:00\", \"5\", false, true],\n [\"05:00\", \"05\", true, true],\n [\"12:00\", \"12\", false, true],\n [\"12:30\", \"12:30\", false, true],\n [5, \"5:00\", false, false],\n [5, \"5\", false, true],\n [0, \"0:00\", false, false],\n [0, \"0\", false, true],\n [5, \"05\", true, true],\n [\"5:00\", \"05\", true, true],\n [\"05:00\", \"5\", false, true],\n ])(\n \"should formatTime\",\n (value, expected, leadingZero = false, trimZeroes = false) => {\n expect(formatHours(value, leadingZero, trimZeroes)).toEqual(expected);\n }\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,EACxB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,EAC1B,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAC3B,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EAC5B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAC/B,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,EACzB,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,EACrB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,EACzB,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,EACrB,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EACrB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAC1B,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAC5B,CAAC,CACA,mBAAmB,EACnB,UAACC,KAAK,EAAEC,QAAQ,EAAEC,WAAW,EAAUC,UAAU,EAAa;IAAA,IAA5CD,WAAW;MAAXA,WAAW,GAAG,KAAK;IAAA;IAAA,IAAEC,UAAU;MAAVA,UAAU,GAAG,KAAK;IAAA;IACvDC,MAAM,CAACR,WAAW,CAACI,KAAK,EAAEE,WAAW,EAAEC,UAAU,CAAC,CAAC,CAACE,OAAO,CAACJ,QAAQ,CAAC;EACvE,CACF,CAAC;AACH,CAAC,CAAC"}
package/dist/index.js CHANGED
@@ -801,6 +801,7 @@
801
801
  *
802
802
  * @param {number | string | undefined} num - The input representing the hours, which can be in decimal format, a time string, or undefined.
803
803
  * @param {boolean} [withLeadingZeroHours=false] - Whether to add a leading zero to the hours part of the output.
804
+ * @param {boolean} [trimZeroes=false] - Whether to remove minutes if they are zero.
804
805
  *
805
806
  * @returns {string} - A formatted time string in HH:MM format.
806
807
  *
@@ -810,14 +811,15 @@
810
811
  */
811
812
  var formatHours = function formatHours(num) {
812
813
  var withLeadingZeroHours = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
814
+ var trimZeroes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
813
815
  if (num === 0 || num === "0") {
814
- return withLeadingZeroHours ? "00:00" : "0:00";
816
+ return trimZeroes ? "0" : withLeadingZeroHours ? "00:00" : "0:00";
815
817
  }
816
818
  if (!num) {
817
819
  return "";
818
820
  }
819
821
  if (typeof num === "string" && num.indexOf(":") >= 0) {
820
- //eslint-disable-next-line
822
+ // eslint-disable-next-line prefer-const
821
823
  var _num$split = num.split(":"),
822
824
  _num$split2 = _slicedToArray(_num$split, 2),
823
825
  _hours = _num$split2[0],
@@ -826,27 +828,28 @@
826
828
  _minutes = "".concat(Number(_minutes), "0");
827
829
  }
828
830
  if (_hours && _minutes) {
829
- if (withLeadingZeroHours) {
830
- return "".concat(withLeadingZero(_hours), ":").concat(_minutes);
831
+ if (trimZeroes && _minutes === "00") {
832
+ return withLeadingZeroHours ? withLeadingZero(_hours) : String(Number(_hours));
831
833
  }
832
- return "".concat(_hours, ":").concat(_minutes);
834
+ return withLeadingZeroHours ? "".concat(withLeadingZero(_hours), ":").concat(_minutes) : "".concat(_hours, ":").concat(_minutes);
835
+ } else if (_hours && !_minutes) {
836
+ return withLeadingZeroHours ? "".concat(withLeadingZero(_hours), ":00") : "".concat(_hours, ":00");
833
837
  } else if (!_hours && _minutes) {
834
838
  return withLeadingZeroHours ? "00:".concat(_minutes) : "0:".concat(_minutes);
835
- } else if (!_minutes && _hours) {
836
- return withLeadingZeroHours ? "".concat(withLeadingZero(_hours), ":00") : "".concat(_hours, ":00");
837
- } else {
839
+ } else if (!_hours && !_minutes) {
838
840
  return withLeadingZeroHours ? "00:00" : "0:00";
839
841
  }
842
+ return withLeadingZeroHours ? "00:".concat(_minutes) : "0:".concat(_minutes);
840
843
  }
841
844
  if (typeof num === "string" && num.indexOf(",") >= 0) {
842
845
  num = num.replace(",", ".");
843
846
  }
844
847
  var input = typeof num === "string" ? parseFloat(num) : num;
845
848
  if (!isDecimal(input)) {
846
- if (withLeadingZeroHours) {
847
- return "".concat(withLeadingZero(input), ":00");
849
+ if (trimZeroes) {
850
+ return withLeadingZeroHours ? withLeadingZero(input) : String(Number(input));
848
851
  }
849
- return "".concat(input, ":00");
852
+ return withLeadingZeroHours ? "".concat(withLeadingZero(input), ":00") : "".concat(input, ":00");
850
853
  }
851
854
  var decimal = input.toFixed(2);
852
855
  var time = decimal.toString().split(".");
@@ -856,6 +859,9 @@
856
859
  }
857
860
  var minutes = time[1];
858
861
  var minutes_formatted = Math.round(parseInt(minutes, 10) / 100 * 60);
862
+ if (trimZeroes && minutes_formatted === 0) {
863
+ return hours;
864
+ }
859
865
  return "".concat(hours, ":").concat(withLeadingZero(minutes_formatted));
860
866
  };
861
867
  var withLeadingZero = function withLeadingZero(num) {
@@ -8834,6 +8840,7 @@
8834
8840
  };
8835
8841
  var targetProps = {
8836
8842
  open,
8843
+ active: open,
8837
8844
  ref: handleRef,
8838
8845
  onClick: handleOpen
8839
8846
  };
@@ -11578,6 +11585,7 @@
11578
11585
  onBeforeClose: handleBeforeClose,
11579
11586
  onClose: handleClose,
11580
11587
  open: isOpen,
11588
+ active: isOpen,
11581
11589
  onOpen: toggleCalendar,
11582
11590
  position,
11583
11591
  menuClassName,
@@ -15589,6 +15597,7 @@
15589
15597
  target,
15590
15598
  mode,
15591
15599
  open,
15600
+ active: open,
15592
15601
  position,
15593
15602
  onPopperOpen: function onPopperOpen() {
15594
15603
  var _elementRef$current;
@@ -17594,7 +17603,7 @@
17594
17603
  });
17595
17604
  DisplayCurrency.displayName = "DisplayCurrency";
17596
17605
 
17597
- var _excluded$x = ["value", "variant", "thousandSeparator", "decimalSeparator", "trimDecimals", "decimalSpaces", "format", "disableTooltip", "className", "withLeadingZero", "as"];
17606
+ var _excluded$x = ["value", "variant", "thousandSeparator", "decimalSeparator", "trimZeroes", "trimDecimals", "decimalSpaces", "format", "disableTooltip", "className", "withLeadingZero", "as"];
17598
17607
  var DisplayHours = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
17599
17608
  var value = _ref.value,
17600
17609
  _ref$variant = _ref.variant,
@@ -17603,6 +17612,8 @@
17603
17612
  thousandSeparator = _ref$thousandSeparato === void 0 ? "," : _ref$thousandSeparato,
17604
17613
  _ref$decimalSeparator = _ref.decimalSeparator,
17605
17614
  decimalSeparator = _ref$decimalSeparator === void 0 ? "." : _ref$decimalSeparator,
17615
+ _ref$trimZeroes = _ref.trimZeroes,
17616
+ trimZeroes = _ref$trimZeroes === void 0 ? false : _ref$trimZeroes,
17606
17617
  _ref$trimDecimals = _ref.trimDecimals,
17607
17618
  trimDecimals = _ref$trimDecimals === void 0 ? true : _ref$trimDecimals,
17608
17619
  _ref$decimalSpaces = _ref.decimalSpaces,
@@ -17618,7 +17629,7 @@
17618
17629
  rest = _objectWithoutProperties(_ref, _excluded$x);
17619
17630
  var numberValue = +String(value).replaceAll(thousandSeparator, "").replace(decimalSeparator, ".");
17620
17631
  var formattedValue = formatNumber(numberValue, thousandSeparator, decimalSeparator, trimDecimals, decimalSpaces, "short");
17621
- var formattedLongValue = formatHours(numberValue, withLeadingZero);
17632
+ var formattedLongValue = formatHours(numberValue, withLeadingZero, trimZeroes);
17622
17633
  var showShortVersion = numberValue > 1000;
17623
17634
  if (format === "short" && showShortVersion) {
17624
17635
  return /*#__PURE__*/React__default["default"].createElement(Tooltip, {