softable-pixels-web 1.2.19 → 1.2.20
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/{Button-BPzDonEf.js → Button-BDIvDFeK.js} +2 -3
- package/dist/Button-BDIvDFeK.js.map +1 -0
- package/dist/{ColorPicker-DRm-i16g.js → ColorPicker-B5O5LXWt.js} +2 -2
- package/dist/ColorPicker-B5O5LXWt.js.map +1 -0
- package/dist/{DatePicker-C6WesC4Z.js → DatePicker-Y5IyaCoK.js} +2 -2
- package/dist/{DatePicker-C6WesC4Z.js.map → DatePicker-Y5IyaCoK.js.map} +1 -1
- package/dist/{IconButton-BZwW87Wk.js → IconButton-YJZyDEN9.js} +7 -7
- package/dist/IconButton-YJZyDEN9.js.map +1 -0
- package/dist/{Loader-I09c5F6g.js → Loader-1l1G52jQ.js} +1 -1
- package/dist/{Loader-I09c5F6g.js.map → Loader-1l1G52jQ.js.map} +1 -1
- package/dist/{Pagination-BWNhdXyr.js → Pagination-xaORAUQv.js} +34 -40
- package/dist/Pagination-xaORAUQv.js.map +1 -0
- package/dist/{Select-RG9mDJW6.js → Select-DMf8DtA7.js} +2 -2
- package/dist/{Select-RG9mDJW6.js.map → Select-DMf8DtA7.js.map} +1 -1
- package/dist/button.d.ts +2 -8
- package/dist/button.js +2 -2
- package/dist/color-picker.js +1 -1
- package/dist/date-picker.js +3 -3
- package/dist/icon-button.d.ts +2 -7
- package/dist/icon-button.js +1 -1
- package/dist/{types-3y-Tdp7y.d.ts → index-B8FSkZw8.d.ts} +8 -5
- package/dist/{index-CZV5emQj.d.ts → index-BKDFgQvq.d.ts} +2 -2
- package/dist/{index-DfvWcRHm.d.ts → index-BbEesOsh.d.ts} +2 -2
- package/dist/index-BpVdXtFT.d.ts +15 -0
- package/dist/{types-CKTC5ZCk.d.ts → index-C1oJWGwe.d.ts} +6 -4
- package/dist/{index-DxxZyWpv.d.ts → index-CXRUoQ4f.d.ts} +2 -2
- package/dist/index.d.ts +6 -8
- package/dist/index.js +7 -7
- package/dist/input.d.ts +1 -1
- package/dist/pagination.d.ts +1 -4
- package/dist/pagination.js +4 -4
- package/dist/select.d.ts +1 -1
- package/dist/select.js +2 -2
- package/dist/text-area.d.ts +1 -1
- package/package.json +1 -1
- package/dist/Button-BPzDonEf.js.map +0 -1
- package/dist/ColorPicker-DRm-i16g.js.map +0 -1
- package/dist/IconButton-BZwW87Wk.js.map +0 -1
- package/dist/Pagination-BWNhdXyr.js.map +0 -1
- package/dist/index-BWoyVnHt.d.ts +0 -24
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as styled, t as useThemedStyles } from "./useThemedStyles-CUbWXrNN.js";
|
|
2
2
|
import { t as Typography } from "./Typography-4iQDPw2N.js";
|
|
3
|
-
import { t as Loader } from "./Loader-
|
|
3
|
+
import { t as Loader } from "./Loader-1l1G52jQ.js";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
import { AnimatePresence, motion } from "framer-motion";
|
|
6
6
|
|
|
@@ -49,7 +49,6 @@ function createButtonStyles({ size, color, variant, fullWidth, textAlign, outlin
|
|
|
49
49
|
borderRadius: "var(--px-radius-lg)",
|
|
50
50
|
cursor: "pointer",
|
|
51
51
|
overflow: "hidden",
|
|
52
|
-
transition: "background-color 0.5s",
|
|
53
52
|
border: getBorder(finalVariant, outlineColor || color),
|
|
54
53
|
backgroundColor: getBackgroundColor(finalVariant, color),
|
|
55
54
|
boxShadow: variant === "outlined" ? "var(--px-shadow-xs)" : "none",
|
|
@@ -163,4 +162,4 @@ const Button = ({ type = "button", variant = "filled", ...rest }) => {
|
|
|
163
162
|
|
|
164
163
|
//#endregion
|
|
165
164
|
export { Button as t };
|
|
166
|
-
//# sourceMappingURL=Button-
|
|
165
|
+
//# sourceMappingURL=Button-BDIvDFeK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button-BDIvDFeK.js","names":["ButtonLoader: React.FC<Props>","Button: React.FC<ButtonProps>"],"sources":["../src/components/commons/buttons/Button/components/ButtonLoader/styles.ts","../src/components/commons/buttons/Button/components/ButtonLoader/index.tsx","../src/components/commons/buttons/Button/styles.ts","../src/components/commons/buttons/Button/index.tsx"],"sourcesContent":["// Types\nimport { styled, type StyleMap } from '@hooks/useThemedStyles/types'\n\nexport function createButtonLoaderStyles(): StyleMap {\n return styled({\n container: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n\n borderRadius: 'var(--px-border-radius-button)',\n backgroundColor: 'inherit'\n }\n })\n}\n","// External Libraries\nimport type React from 'react'\nimport { motion } from 'framer-motion'\n\n// Components\nimport { Loader } from '@components/commons/toolkit/Loader'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Styles\nimport { createButtonLoaderStyles } from './styles'\n\ntype Props = {\n color: string\n}\n\nexport const ButtonLoader: React.FC<Props> = ({ color }) => {\n // Hooks\n const { styles } = useThemedStyles({}, createButtonLoaderStyles, {})\n\n return (\n <motion.div\n style={styles.container}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n >\n <Loader color={color} />\n </motion.div>\n )\n}\n","// Types\nimport { styled } from '@hooks/useThemedStyles/types'\nimport type { ButtonProps, ButtonSize, ButtonVariant } from './types'\n\nexport function createButtonStyles({\n size,\n color,\n variant,\n fullWidth,\n textAlign,\n outlineColor\n}: ButtonProps) {\n const finalVariant = variant ?? 'filled'\n\n return styled({\n container: {\n minHeight: getSize(size ?? 'md'),\n width: fullWidth ? '100%' : 'fit-content',\n\n position: 'relative',\n display: 'flex',\n justifyContent: textAlign || 'center',\n\n padding: '0.625rem var(--px-space-xl)',\n gap: 'var(--px-space-sm)',\n\n borderRadius: 'var(--px-radius-lg)',\n\n cursor: 'pointer',\n overflow: 'hidden',\n\n border: getBorder(finalVariant, outlineColor || color),\n backgroundColor: getBackgroundColor(finalVariant, color),\n boxShadow: variant === 'outlined' ? 'var(--px-shadow-xs)' : 'none',\n\n __rules: {\n '&:hover': {\n opacity: '0.85 !important'\n },\n\n '&:disabled': {\n opacity: '0.5 !important',\n cursor: 'not-allowed !important'\n },\n\n '&:focus': {\n outlineOffset: '2px',\n outline: '2px solid var(--px-color-primary) !important'\n }\n }\n },\n\n content: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n\n padding: '0',\n borderRadius: 'inherit',\n\n whiteSpace: 'nowrap',\n columnGap: 'var(--px-space-sm)',\n\n backgroundColor: 'inherit'\n }\n })\n}\n\nfunction getSize(size: ButtonSize | string): string {\n switch (size) {\n case 'lg':\n return '3.25rem'\n case 'md':\n return '2.75rem'\n case 'sm':\n return '2.25rem'\n case 'xs':\n return '1.75rem'\n default:\n return size\n }\n}\n\nfunction getBackgroundColor(variant: ButtonVariant, color?: string): string {\n if (color) return color\n\n if (variant === 'filled') return 'var(--px-btn-filled-bg)'\n\n if (variant === 'outlined') return 'transparent'\n\n if (variant === 'ghost') return 'transparent'\n\n return 'var(--px-btn-filled-bg)'\n}\n\nfunction getBorder(variant: ButtonVariant, color?: string): string {\n if (color) return `1px solid ${color}`\n\n if (variant === 'filled') return '1px solid var(--px-btn-filled-bg)'\n\n if (variant === 'outlined') return '1px solid var(--px-border-primary)'\n\n if (variant === 'ghost') return 'none'\n\n return '1px solid var(--px-color-primary)'\n}\n\nexport function getTextColor({ variant, labelColor }: ButtonProps): string {\n if (labelColor) return labelColor\n\n if (variant === 'filled') return 'var(--px-btn-filled-label)'\n\n if (variant === 'outlined') return 'var(--px-btn-outlined-label)'\n\n if (variant === 'ghost') return '--px-btn-ghost-label'\n\n return 'var(--px-btn-filled-label)'\n}\n","// External Libraries\nimport type React from 'react'\nimport type { MouseEvent } from 'react'\nimport { AnimatePresence } from 'framer-motion'\n\n// Components\nimport { ButtonLoader } from './components/ButtonLoader'\nimport { Typography } from '@components/commons/toolkit/Typography'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Types\nimport type { ButtonProps } from './types'\n\n// Styles\nimport { createButtonStyles, getTextColor } from './styles'\n\nexport const Button: React.FC<ButtonProps> = ({\n type = 'button',\n variant = 'filled',\n ...rest\n}) => {\n // Constants\n const disabled = rest.disabled || rest.loading\n const resolvedProps = { type, variant, disabled, ...rest }\n const textColor = getTextColor(resolvedProps)\n const { label, endIcon, startIcon, loading } = resolvedProps\n\n // Hooks\n const { styles, classes } = useThemedStyles(\n resolvedProps,\n createButtonStyles,\n {\n override: rest.styles,\n applyCommonProps: true,\n commonSlot: 'container',\n pick: p => [p.disabled, p.loading, p.variant, p.label, p.color]\n }\n )\n\n // Functions\n function handleButtonClick(event: MouseEvent<HTMLButtonElement>) {\n if (disabled) return\n\n if (rest.onClick) rest.onClick(event)\n }\n\n return (\n <button\n type={type}\n form={rest.form}\n disabled={disabled}\n aria-busy={rest.loading}\n style={styles.container}\n className={classes.container}\n onClick={handleButtonClick}\n >\n <div style={styles.content}>\n {startIcon ?? null}\n\n <Typography\n color={textColor}\n fontSize={resolvedProps.fontSize}\n variant={rest.labelVariant || 'b1'}\n >\n {label}\n </Typography>\n\n {endIcon ?? null}\n\n {loading ? (\n <AnimatePresence>\n <ButtonLoader color={textColor} />\n </AnimatePresence>\n ) : null}\n </div>\n </button>\n )\n}\n"],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ function createColorButtonStyles(props) {
|
|
|
21
21
|
outlineOffset: "2px",
|
|
22
22
|
outline: props.isSelected ? "2px solid var(--px-color-primary)" : "none",
|
|
23
23
|
__rules: {
|
|
24
|
-
"&:hover": { opacity: "0.85 !important" },
|
|
24
|
+
"&:not(:disabled):hover": { opacity: "0.85 !important" },
|
|
25
25
|
"&:focus": {
|
|
26
26
|
outlineOffset: "2px",
|
|
27
27
|
outline: "2px solid var(--px-color-primary) !important"
|
|
@@ -181,4 +181,4 @@ const ColorPicker = (props) => {
|
|
|
181
181
|
|
|
182
182
|
//#endregion
|
|
183
183
|
export { types_exports as n, ColorPicker as t };
|
|
184
|
-
//# sourceMappingURL=ColorPicker-
|
|
184
|
+
//# sourceMappingURL=ColorPicker-B5O5LXWt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColorPicker-B5O5LXWt.js","names":["ColorButton: React.FC<ColorButtonProps>","ColorsLoader: React.FC<Props>","ColorPicker: React.FC<ColorPickerProps>"],"sources":["../src/components/commons/inputs/ColorPicker/components/ColorButton/styles.ts","../src/components/commons/inputs/ColorPicker/components/ColorButton/index.tsx","../src/components/commons/inputs/ColorPicker/components/ColorsLoader/index.tsx","../src/components/commons/inputs/ColorPicker/styles.ts","../src/components/commons/inputs/ColorPicker/types.ts","../src/components/commons/inputs/ColorPicker/index.tsx"],"sourcesContent":["import { styled } from '@hooks/useThemedStyles/types'\n\ninterface Params {\n size?: string\n color: string\n isSelected: boolean\n borderRadius?: string\n}\n\nexport const DEFAULT_BUTTON_SIZE = '2.25rem'\n\nexport function createColorButtonStyles(props: Params) {\n const resolvedSize = props.size || DEFAULT_BUTTON_SIZE\n\n return styled({\n container: {\n width: resolvedSize,\n height: resolvedSize,\n\n cursor: 'pointer',\n position: 'relative',\n\n borderWidth: 1,\n borderRadius: props.borderRadius || resolvedSize,\n\n backgroundColor: props.color,\n borderColor: 'var(--px-border-primary)',\n\n outlineOffset: '2px',\n outline: props.isSelected ? '2px solid var(--px-color-primary)' : 'none',\n\n __rules: {\n '&:not(:disabled):hover': {\n opacity: '0.85 !important'\n },\n\n '&:focus': {\n outlineOffset: '2px',\n outline: '2px solid var(--px-color-primary) !important'\n },\n\n '&:disabled': {\n opacity: '0.5 !important',\n cursor: 'not-allowed !important'\n }\n }\n }\n })\n}\n","// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Types\nimport type { ColorButtonProps } from './types'\n\n// Styles\nimport { createColorButtonStyles } from './styles'\n\nexport const ColorButton: React.FC<ColorButtonProps> = ({\n color,\n disabled,\n onClick,\n ...rest\n}) => {\n // Hooks\n const { styles, classes } = useThemedStyles(\n { ...rest, color },\n createColorButtonStyles\n )\n\n // Functions\n function handleClick() {\n if (disabled) return\n onClick(color)\n }\n\n return (\n <button\n type=\"button\"\n disabled={disabled}\n style={styles.container}\n className={classes.container}\n onClick={handleClick}\n />\n )\n}\n","// External Libraries\nimport type React from 'react'\n\n// Components\nimport { Skeleton } from '@components/commons/structure/Skeleton'\n\n// Constants\nimport { DEFAULT_BUTTON_SIZE } from '../ColorButton/styles'\n\ninterface Props {\n size?: string\n borderRadius?: string\n}\n\nexport const ColorsLoader: React.FC<Props> = ({ size, borderRadius }) => {\n // Constants\n const resolvedSize = size || DEFAULT_BUTTON_SIZE\n const resolvedRadius = borderRadius || DEFAULT_BUTTON_SIZE\n\n // Functions\n function renderContent() {\n return Array.from({ length: 5 }).map((_, idx) => (\n <Skeleton\n key={idx.toString()}\n width={resolvedSize}\n height={resolvedSize}\n borderRadius={resolvedRadius}\n />\n ))\n }\n\n return <>{renderContent()}</>\n}\n","// Hooks\nimport { styled } from '@hooks/useThemedStyles/types'\n\n// Types\nimport type { ColorPickerProps } from './types'\nimport { DEFAULT_BUTTON_SIZE } from './components/ColorButton/styles'\n\nexport function createColorPickerStyles(props: ColorPickerProps) {\n const isCustomColor = !props.options.includes(props.value)\n\n return styled({\n container: {\n width: '100%',\n\n display: 'flex',\n flexDirection: 'column',\n\n rowGap: '0.375rem'\n },\n content: {\n width: '100%',\n\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n\n gap: '0.625rem'\n },\n inputWrapper: {\n width: props.size || DEFAULT_BUTTON_SIZE,\n height: props.size || DEFAULT_BUTTON_SIZE,\n\n cursor: 'pointer',\n overflow: 'hidden',\n position: 'relative',\n\n borderWidth: 1,\n borderColor: 'var(--px-border-primary)',\n borderRadius: props.borderRadius || DEFAULT_BUTTON_SIZE,\n\n outlineOffset: '2px',\n outline:\n isCustomColor && props.value\n ? `2px solid var(--px-color-primary)`\n : 'none',\n\n background:\n isCustomColor && props.value\n ? props.value\n : 'linear-gradient(90deg, #ff6b6b 0%, #ffd93d 16.66%, #6bff95 33.33%, #6be7ff 50%, #6b83ff 66.66%, #d36bff 83.33%, #ff6bb5 100%)',\n\n __rules: {\n '&:focus-within': {\n outlineOffset: '2px',\n outline: `2px solid var(--px-color-primary) !important`\n }\n }\n },\n\n nativeInput: {\n width: '100%',\n height: '100%',\n\n position: 'absolute',\n inset: 0,\n\n opacity: 0,\n border: 'none',\n cursor: 'pointer'\n }\n })\n}\n","import type {\n TextProps,\n LayoutProps,\n MarginProps,\n TypeStyles\n} from '@hooks/useThemedStyles/types'\nimport type { createColorPickerStyles } from './styles'\n\nexport interface ColorPickerProps extends LayoutProps, MarginProps {\n id?: string\n\n label: string\n value: string\n options: string[]\n\n size?: string\n required?: boolean\n disabled?: boolean\n hideLabel?: boolean\n errorMessage?: string\n canPickCustom?: boolean\n isLoading?: boolean\n\n borderRadius?: string\n requiredColor?: string\n labelConfig?: TextProps\n styles?: TypeStyles<typeof createColorPickerStyles>\n\n onChange: (value: string) => void\n}\n","// External Libraries\nimport { useId, useMemo } from 'react'\n\n// Components\nimport { ColorButton } from './components/ColorButton'\nimport { ColorsLoader } from './components/ColorsLoader'\nimport { Label } from '@components/commons/toolkit/Label'\nimport { ErrorMessage } from '@components/commons/toolkit/ErrorMessage'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Types\nimport type { ColorPickerProps } from './types'\n\n// Styles\nimport { createColorPickerStyles } from './styles'\n\nexport * as ColorPickerTypes from './types'\n\nexport const ColorPicker: React.FC<ColorPickerProps> = props => {\n // Constants\n const reactId = useId()\n const inputId = useMemo(() => {\n return props.id || `color-picker-${reactId}`\n }, [props.id, reactId])\n\n // Hooks\n const { styles, classes } = useThemedStyles(props, createColorPickerStyles, {\n override: props.styles,\n applyCommonProps: true,\n commonSlot: 'container'\n })\n\n // Functions\n function handleInputChange(e: React.ChangeEvent<HTMLInputElement>) {\n props.onChange(e.target.value)\n }\n\n function renderColors() {\n if (props.isLoading) {\n return (\n <ColorsLoader size={props.size} borderRadius={props.borderRadius} />\n )\n }\n\n return props.options.map(option => (\n <ColorButton\n key={option}\n color={option}\n size={props.size}\n disabled={props.disabled}\n borderRadius={props.borderRadius}\n isSelected={props.value === option}\n onClick={props.onChange}\n />\n ))\n }\n\n return (\n <div style={styles.container}>\n {!props.hideLabel ? (\n <Label\n htmlFor={inputId}\n label={props.label}\n required={props.required}\n requiredColor={props.requiredColor}\n {...props.labelConfig}\n />\n ) : null}\n\n <div id={inputId} style={styles.content}>\n {renderColors()}\n\n {props.canPickCustom ? (\n <div style={styles.inputWrapper} className={classes.inputWrapper}>\n <input\n type=\"color\"\n value={props.value}\n style={styles.nativeInput}\n aria-label=\"Pick a custom color\"\n onChange={handleInputChange}\n />\n </div>\n ) : null}\n </div>\n\n {props.errorMessage ? (\n <ErrorMessage message={props.errorMessage} />\n ) : null}\n </div>\n )\n}\n"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { t as Typography } from "./Typography-4iQDPw2N.js";
|
|
|
4
4
|
import { t as BasePopover } from "./BasePopover-T1mEexwp.js";
|
|
5
5
|
import { t as Label } from "./Label-CaQSxOx8.js";
|
|
6
6
|
import { t as ErrorMessage } from "./ErrorMessage-C_XOzH00.js";
|
|
7
|
-
import { t as Button } from "./Button-
|
|
7
|
+
import { t as Button } from "./Button-BDIvDFeK.js";
|
|
8
8
|
import { a as Locale, i as DateMask, n as DateValidator, o as MaskType, s as MaskModule, t as TimeValidator } from "./MaskModule-ZvZ8AfTB.js";
|
|
9
9
|
import { forwardRef, useEffect, useId, useMemo, useState } from "react";
|
|
10
10
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -1225,4 +1225,4 @@ const DatePicker = (props) => {
|
|
|
1225
1225
|
|
|
1226
1226
|
//#endregion
|
|
1227
1227
|
export { types_exports as n, DatePicker as t };
|
|
1228
|
-
//# sourceMappingURL=DatePicker-
|
|
1228
|
+
//# sourceMappingURL=DatePicker-Y5IyaCoK.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePicker-C6WesC4Z.js","names":["CalendarDay: React.FC<CalendarDayProps>","CalendarMonth: React.FC<CalendarMonthProps>","NavButton: React.FC<NavButtonProps>","CalendarHeader: React.FC<Props>","PeriodSwitchItem: React.FC<Props>","PERIOD_OPTIONS: PeriodOption[]","PeriodSwitch: React.FC<PeriodSwitchProps>","DEFAULT_TIME_FORMAT: TimeFormat","DEFAULT_VIEW_MODE: CalendarViewMode","DEFAULT_DATE_FORMAT: DateFormat","DATE_FORMAT_MASK_MAPPER: Record<DateFormat, DateMaskFormat>","maskFormat: DateMaskFormat","day: string","month: string","year: string","format","time: string","period: 'am' | 'pm'","formattedChanges: Partial<DateTimeValues>","DateTimeInput: React.FC<DateTimeInputProps>","draft: DraftPickedDate","newValues: PickedDate","DateTimeControl: React.FC<DateTimeControlProps>","days","Calendar: React.FC<CalendarProps>","DatePickerTrigger","DatePicker: React.FC<DatePickerProps>"],"sources":["../src/utils/functions/capitalize.ts","../src/components/commons/toolkit/Calendar/components/CalendarMonth/components/CalendarDay/utils.ts","../src/components/commons/toolkit/Calendar/components/CalendarMonth/components/CalendarDay/styles.ts","../src/components/commons/toolkit/Calendar/components/CalendarMonth/components/CalendarDay/index.tsx","../src/components/commons/toolkit/Calendar/components/CalendarMonth/constants.ts","../src/components/commons/toolkit/Calendar/components/CalendarMonth/styles.ts","../src/components/commons/toolkit/Calendar/components/CalendarMonth/index.tsx","../src/components/commons/toolkit/Calendar/components/CalendarHeader/components/NavButton/styles.ts","../src/components/commons/toolkit/Calendar/components/CalendarHeader/components/NavButton/index.tsx","../src/components/commons/toolkit/Calendar/components/CalendarHeader/utils.ts","../src/components/commons/toolkit/Calendar/components/CalendarHeader/styles.ts","../src/components/commons/toolkit/Calendar/components/CalendarHeader/index.tsx","../src/components/commons/toolkit/Calendar/components/DateTimeControl/components/DateTimeInput/components/PeriodSwitch/components/PeriodSwitchItem/styles.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/components/DateTimeInput/components/PeriodSwitch/components/PeriodSwitchItem/index.tsx","../src/components/commons/toolkit/Calendar/components/DateTimeControl/components/DateTimeInput/components/PeriodSwitch/constants.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/components/DateTimeInput/components/PeriodSwitch/styles.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/components/DateTimeInput/components/PeriodSwitch/index.tsx","../src/components/commons/toolkit/Calendar/constants.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/constants.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/components/DateTimeInput/hooks/useDateTimeInput/utils/buildISODate.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/components/DateTimeInput/hooks/useDateTimeInput/utils/errors.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/components/DateTimeInput/hooks/useDateTimeInput/index.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/components/DateTimeInput/styles.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/components/DateTimeInput/index.tsx","../src/components/commons/toolkit/Calendar/components/DateTimeControl/hooks/useDateTimeControl/index.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/styles.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/index.tsx","../src/components/commons/toolkit/Calendar/hooks/useCalendar.ts","../src/components/commons/toolkit/Calendar/styles.ts","../src/components/commons/toolkit/Calendar/index.tsx","../src/components/commons/inputs/DatePicker/components/DatePickerTrigger/utils.ts","../src/components/commons/inputs/DatePicker/components/DatePickerTrigger/styles.ts","../src/components/commons/inputs/DatePicker/components/DatePickerTrigger/index.tsx","../src/components/commons/inputs/DatePicker/hooks/useDatePicker.ts","../src/components/commons/inputs/DatePicker/styles.ts","../src/components/commons/inputs/DatePicker/types.ts","../src/components/commons/inputs/DatePicker/index.tsx"],"sourcesContent":["export function capitalize(text: string) {\n if (!text) return ''\n return text.charAt(0).toUpperCase() + text.slice(1)\n}\n","// External Libraries\nimport {\n format,\n isAfter,\n isBefore,\n endOfDay,\n isSameDay,\n startOfDay,\n isSameMonth,\n isWithinInterval\n} from 'date-fns'\nimport { ptBR } from 'date-fns/locale'\n\n// Types\nimport type { PickedDate } from '../../../../types'\n\ninterface DayMetadataParams {\n day: Date\n currentMonth: Date\n selection?: PickedDate\n disablePastDates?: boolean\n disableFutureDates?: boolean\n}\n\nexport function getDayMetadata(params: DayMetadataParams) {\n const { day, currentMonth, selection, disablePastDates, disableFutureDates } =\n params\n\n const endOfToday = endOfDay(new Date())\n const startOfToday = startOfDay(new Date())\n const isPastDate = isBefore(day, startOfToday)\n const isFutureDate = isAfter(day, endOfToday)\n const isOutsideMonth = !isSameMonth(day, currentMonth)\n const isDisabled =\n isOutsideMonth ||\n (disablePastDates && isPastDate) ||\n (disableFutureDates && isFutureDate) ||\n false\n\n if (!selection) {\n const ariaLabel = getAriaLabel(day, {\n isDisabled,\n isBetween: false,\n isSelected: false\n })\n\n return {\n ariaLabel,\n isDisabled,\n isSelected: false,\n isBetween: false,\n isRangeEnd: false,\n isRangeStart: false\n }\n }\n\n const { start, end } = selection\n\n const isRangeStart = start ? isSameDay(day, start) : false\n const isRangeEnd = end ? isSameDay(day, end) : false\n\n const isBetween =\n start && end\n ? isWithinInterval(startOfDay(day), {\n start: startOfDay(start),\n end: startOfDay(end)\n })\n : false\n const isSelected = isRangeStart || isRangeEnd\n\n const ariaLabel = getAriaLabel(day, { isSelected, isBetween, isDisabled })\n\n return {\n ariaLabel,\n isBetween,\n isDisabled,\n isSelected,\n isRangeEnd,\n isRangeStart\n }\n}\n\nfunction getAriaLabel(\n day: Date,\n options: { isSelected: boolean; isBetween: boolean; isDisabled: boolean }\n) {\n const { isSelected, isBetween, isDisabled } = options\n const baseLabel = format(day, \"d 'de' MMMM 'de' yyyy\", { locale: ptBR })\n\n if (isSelected) return `${baseLabel}, selecionado`\n if (isBetween) return `${baseLabel}, dentro do intervalo`\n if (isDisabled) return `${baseLabel}, indisponível`\n\n return baseLabel\n}\n","import type { CalendarDayProps } from './types'\nimport { styled } from '@hooks/useThemedStyles/types'\n\ninterface StylesProps extends CalendarDayProps {\n isBetween: boolean\n isSelected: boolean\n isRangeStart: boolean\n isRangeEnd: boolean\n isDisabled: boolean\n}\n\nexport function createCalendarDayStyles(params: StylesProps) {\n return styled({\n container: {\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n\n backgroundColor: getContainerBackgroundColor(params),\n\n borderTopLeftRadius: getContainerBorderLeft(params),\n borderBottomLeftRadius: getContainerBorderLeft(params),\n borderTopRightRadius: getContainerBorderRight(params),\n borderBottomRightRadius: getContainerBorderRight(params)\n },\n\n button: {\n display: 'flex',\n width: '2.2rem',\n height: '2.2rem',\n alignItems: 'center',\n justifyContent: 'center',\n\n backgroundColor: getButtonBackgroundColor(params),\n borderRadius: getButtonBorderRadius(params),\n\n transition: 'all 200ms ease-in-out',\n cursor: params.isDisabled ? 'not-allowed' : 'pointer',\n opacity: params.isDisabled ? 0.5 : 1,\n\n __rules: {\n '&:hover': {\n opacity: '0.85'\n },\n '&:disabled': {\n opacity: '0.5',\n cursor: 'not-allowed'\n }\n }\n }\n })\n}\n\nfunction getContainerBackgroundColor({ isBetween }: StylesProps): string {\n if (isBetween) {\n return 'rgba(14, 178, 76, 0.1)'\n }\n\n return 'transparent'\n}\n\nfunction getContainerBorderLeft({ isRangeStart }: StylesProps) {\n return isRangeStart ? '50%' : '0'\n}\n\nfunction getContainerBorderRight({ isRangeEnd }: StylesProps) {\n return isRangeEnd ? '50%' : '0'\n}\n\nfunction getButtonBackgroundColor({\n isSelected,\n isRangeStart,\n isRangeEnd\n}: StylesProps): string {\n if (isSelected || isRangeStart || isRangeEnd) {\n return 'var(--px-btn-filled-bg)'\n }\n\n return 'transparent'\n}\n\nfunction getButtonBorderRadius({\n isBetween,\n isRangeStart,\n isRangeEnd\n}: StylesProps): string {\n if (isBetween && !isRangeStart && !isRangeEnd) {\n return '0'\n }\n\n return '50%'\n}\n","// External Libraries\nimport type React from 'react'\nimport { useMemo } from 'react'\n\n// Components\nimport { Typography } from '@components/commons/toolkit/Typography'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Utils\nimport { getDayMetadata } from './utils'\n\n// Types\nimport type { CalendarDayProps } from './types'\n\n// Styles\nimport { createCalendarDayStyles } from './styles'\n\nexport const CalendarDay: React.FC<CalendarDayProps> = props => {\n // Constants\n const {\n day,\n selection,\n currentMonth,\n disablePastDates,\n disableFutureDates,\n onClick\n } = props\n const dayConfig = useMemo(\n () =>\n getDayMetadata({\n day,\n selection,\n currentMonth,\n disablePastDates,\n disableFutureDates\n }),\n [day, selection, currentMonth, disablePastDates, disableFutureDates]\n )\n\n // Hooks\n const { styles, classes } = useThemedStyles(\n { ...props, ...dayConfig },\n createCalendarDayStyles,\n {\n applyCommonProps: true\n }\n )\n\n // Functions\n function handleClick() {\n onClick(day)\n }\n\n return (\n <div style={styles.container}>\n <button\n type=\"button\"\n style={styles.button}\n className={classes.button}\n disabled={dayConfig.isDisabled}\n aria-label={dayConfig.ariaLabel}\n onClick={handleClick}\n >\n <Typography\n variant=\"b2\"\n color={dayConfig.isSelected ? 'white' : 'var(--px-text-secondary)'}\n fontWeight={\n dayConfig.isSelected || dayConfig.isBetween ? 'medium' : 'regular'\n }\n >\n {day.getDate()}\n </Typography>\n </button>\n </div>\n )\n}\n","export const WEEK_DAYS = [\n { short: 'D', full: 'Domingo' },\n { short: 'S', full: 'Segunda' },\n { short: 'T', full: 'Terça' },\n { short: 'Q', full: 'Quarta' },\n { short: 'Q', full: 'Quinta' },\n { short: 'S', full: 'Sexta' },\n { short: 'S', full: 'Sábado' }\n] as const\n","import { styled } from '@hooks/useThemedStyles/types'\nimport type { CalendarMonthProps } from './types'\n\nexport function createCalendarMonthStyles(props: CalendarMonthProps) {\n return styled({\n weekDays: {\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 2.5rem)'\n },\n calendarDays: {\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 2.5rem)'\n },\n weekDay: {\n width: '2.5rem',\n height: '2.5rem',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }\n })\n}\n","// External Libraries\nimport type React from 'react'\n\n// Components\nimport { CalendarDay } from './components/CalendarDay'\nimport { Typography } from '@components/commons/toolkit/Typography'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Utils\nimport { WEEK_DAYS } from './constants'\n\n// Types\nimport type { CalendarMonthProps } from './types'\n\n// Styles\nimport { createCalendarMonthStyles } from './styles'\n\nexport const CalendarMonth: React.FC<CalendarMonthProps> = props => {\n // Hooks\n const { styles } = useThemedStyles(props, createCalendarMonthStyles)\n\n // Constants\n const currentMonth = props.days.length\n ? props.days[Math.floor(props.days.length / 2)]\n : new Date()\n\n // Functions\n function renderWeekDays() {\n return WEEK_DAYS.map(day => (\n <div key={day.full} style={styles.weekDay}>\n <Typography variant=\"b2\" className=\"text-tx-primary\">\n {day.short}\n </Typography>\n </div>\n ))\n }\n\n return (\n <div>\n <div style={styles.weekDays}>{renderWeekDays()}</div>\n\n <div style={styles.calendarDays}>\n {props.days.map(day => (\n <CalendarDay\n day={day}\n key={day.toISOString()}\n selection={props.selection}\n currentMonth={currentMonth}\n disablePastDates={props.disablePastDates}\n disableFutureDates={props.disableFutureDates}\n onClick={props.onDayClick}\n />\n ))}\n </div>\n </div>\n )\n}\n","import { styled } from '@hooks/useThemedStyles/types'\nimport type { NavButtonProps } from './types'\n\nexport function createNavButtonStyles(_props: NavButtonProps) {\n return styled({\n container: {\n display: 'flex',\n\n cursor: 'pointer',\n padding: '0.125rem',\n\n borderRadius: '50%',\n transition: 'background-color 0.2s ease-out',\n rotate: _props.next ? '180deg' : '0deg',\n\n __rules: {\n '&:hover': {\n backgroundColor: 'var(--color-gray-50)'\n }\n }\n }\n })\n}\n","// External Libraries\nimport type React from 'react'\n\n// Components\nimport { Icon } from '@components/commons/toolkit/Icon'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Types\nimport type { NavButtonProps } from './types'\n\n// Styles\nimport { createNavButtonStyles } from './styles'\n\nexport const NavButton: React.FC<NavButtonProps> = ({\n visible = true,\n ...props\n}) => {\n // Hooks\n\n const { styles, classes } = useThemedStyles(\n { visible, ...props },\n createNavButtonStyles,\n {\n applyCommonProps: true,\n pick: p => [p.next, p.visible]\n }\n )\n\n if (!visible) return null\n\n return (\n <button\n type=\"button\"\n style={styles.container}\n className={classes.container}\n onClick={props.onClick}\n >\n <Icon name={props.icon} color=\"var(--px-text-secondary)\" />\n </button>\n )\n}\n","// External Libraries\nimport { isBefore, startOfMonth, startOfYear } from 'date-fns'\n\ninterface NavMetadataParams {\n currentDate: Date\n isDualView: boolean\n position: 'left' | 'right'\n disablePastDates?: boolean\n disableFutureDates?: boolean\n}\n\nexport function getNavMetadata(params: NavMetadataParams) {\n const {\n position,\n isDualView,\n currentDate,\n disablePastDates,\n disableFutureDates\n } = params\n const today = new Date()\n\n const hasPrevMonthAvailable =\n !disablePastDates ||\n isBefore(startOfMonth(today), startOfMonth(currentDate))\n\n const hasPrevYearAvailable =\n !disablePastDates || isBefore(startOfYear(today), startOfYear(currentDate))\n\n const showPrevButtons = !isDualView\n ? hasPrevMonthAvailable || hasPrevYearAvailable\n : position !== 'right'\n\n function checkRenderShowNextButton() {\n if (disableFutureDates) return false\n else {\n return !isDualView ? true : position !== 'left'\n }\n }\n\n const showNextButtons = checkRenderShowNextButton()\n\n return {\n showPrevButtons,\n showNextButtons,\n hasPrevYearAvailable,\n hasPrevMonthAvailable\n }\n}\n","import { styled } from '@hooks/useThemedStyles/types'\nimport type { CalendarHeaderProps } from './types'\n\nexport function createCalendarHeaderStyles(_props: CalendarHeaderProps) {\n return styled({\n container: {\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingBlock: '0.375rem'\n },\n\n leftButtonsContainer: {\n minWidth: '3.5rem',\n minHeight: '1.5rem',\n\n display: 'flex',\n alignItems: 'center',\n gap: '0.25rem'\n },\n\n rightButtonsContainer: {\n minWidth: '3.5rem',\n minHeight: '1.5rem',\n\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: '0.25rem'\n }\n })\n}\n","// External Libraries\nimport type React from 'react'\nimport { format } from 'date-fns'\nimport { ptBR } from 'date-fns/locale'\n\n// Components\nimport { NavButton } from './components/NavButton'\nimport { Typography } from '@components/commons/toolkit/Typography'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Utils\nimport { getNavMetadata } from './utils'\nimport { capitalize } from '@utils/functions'\n\n// Types\nimport type { CalendarNavAction } from '../../types'\n\n// Styles\nimport { createCalendarHeaderStyles } from './styles'\n\ninterface Props {\n currentDate: Date\n isDualView: boolean\n position: 'left' | 'right'\n disablePastDates?: boolean\n disableFutureDates?: boolean\n onNavAction: (action: CalendarNavAction) => void\n}\n\nexport const CalendarHeader: React.FC<Props> = props => {\n // Constants\n const { onNavAction, ...rest } = props\n const {\n showPrevButtons,\n showNextButtons,\n hasPrevYearAvailable,\n hasPrevMonthAvailable\n } = getNavMetadata(rest)\n\n // Hooks\n const { styles } = useThemedStyles(props, createCalendarHeaderStyles, {\n applyCommonProps: true,\n pick: p => [p.currentDate, p.isDualView, p.position]\n })\n\n // Functions\n function renderMonthName() {\n const name = format(rest.currentDate, 'MMMM yyyy', { locale: ptBR })\n return capitalize(name)\n }\n\n return (\n <div style={styles.container}>\n {showPrevButtons ? (\n <div style={styles.leftButtonsContainer}>\n <NavButton\n icon=\"chevrons-left\"\n visible={hasPrevMonthAvailable}\n onClick={() => onNavAction('prev-month')}\n />\n\n <NavButton\n icon=\"chevrons-double-left\"\n visible={hasPrevYearAvailable}\n onClick={() => onNavAction('prev-year')}\n />\n </div>\n ) : (\n <div style={styles.leftButtonsContainer} />\n )}\n\n <Typography variant=\"b2\" align=\"center\" fontWeight=\"semibold\">\n {renderMonthName()}\n </Typography>\n\n {showNextButtons ? (\n <div style={styles.rightButtonsContainer}>\n <NavButton\n next\n icon=\"chevrons-double-left\"\n onClick={() => onNavAction('next-year')}\n />\n\n <NavButton\n next\n icon=\"chevrons-left\"\n onClick={() => onNavAction('next-month')}\n />\n </div>\n ) : (\n <div style={styles.rightButtonsContainer} />\n )}\n </div>\n )\n}\n","// External Libraries\nimport { styled } from '@hooks/useThemedStyles/types'\n\ninterface Params {\n selected?: boolean\n}\n\nexport function createTabSwitchItemStyles({ selected }: Params) {\n return styled({\n item: {\n minHeight: '1rem',\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 4,\n background: 'transparent',\n border: 0,\n padding: '0.25rem',\n\n userSelect: 'none',\n whiteSpace: 'nowrap',\n __rules: { '& > p': { zIndex: 1 } }\n },\n\n selectedBg: {\n position: 'absolute',\n inset: 0,\n borderRadius: 6,\n border: '1px solid var(--px-border-primary)'\n }\n })\n}\n","// External Libraries\nimport { motion } from 'framer-motion'\n\n// Components\nimport { Typography } from '@components/commons/toolkit/Typography'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Types\nimport type { PeriodOption } from '../../types'\nimport type { DateTimePeriod } from '../../../../types'\n\n// Styles\nimport { createTabSwitchItemStyles } from './styles'\n\ninterface Props {\n layoutId: string\n selected: boolean\n option: PeriodOption\n onClick: (value: DateTimePeriod) => void\n onBlur?: () => void\n}\n\nexport const PeriodSwitchItem: React.FC<Props> = props => {\n const { option, selected, onClick } = props\n\n const { styles, classes } = useThemedStyles(\n props,\n createTabSwitchItemStyles,\n {\n pick: p => [p.selected]\n }\n )\n\n return (\n <button\n tabIndex={0}\n type=\"button\"\n style={styles.item}\n className={classes.item}\n onBlur={props.onBlur}\n onClick={() => onClick(option.value)}\n >\n {selected ? (\n <motion.div layoutId={props.layoutId} style={styles.selectedBg} />\n ) : null}\n\n <Typography variant=\"b1\" fontSize=\"0.625rem\" fontWeight=\"semibold\">\n {option.label}\n </Typography>\n </button>\n )\n}\n","import type { PeriodOption } from './types'\n\nexport const PERIOD_OPTIONS: PeriodOption[] = [\n { value: 'am', label: 'AM' },\n { value: 'pm', label: 'PM' }\n]\n","// Types\nimport type { PeriodSwitchProps } from './types'\nimport { styled } from '@hooks/useThemedStyles/types'\n\nexport function createTabSwitchStyles(props: PeriodSwitchProps) {\n return styled({\n container: {\n width: 'fit-content',\n\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n color: 'var(--px-text-primary, #4b5563)',\n\n gap: 0,\n __rules: { '& svg': { zIndex: 1 } }\n }\n })\n}\n","// External Libraries\nimport type React from 'react'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Components\nimport { PeriodSwitchItem } from './components/PeriodSwitchItem'\n\n// Utils\nimport { PERIOD_OPTIONS } from './constants'\n\n// Types\nimport type { PeriodSwitchProps } from './types'\n\n// Styles\nimport { createTabSwitchStyles } from './styles'\n\nexport * from './types'\n\nexport const PeriodSwitch: React.FC<PeriodSwitchProps> = props => {\n {\n const { currentValue, onChange } = props\n\n const { styles, classes } = useThemedStyles(props, createTabSwitchStyles, {\n pick: p => [p.currentValue],\n applyCommonProps: true\n })\n\n return (\n <div style={styles.container} className={classes.container}>\n {PERIOD_OPTIONS.map(opt => (\n <PeriodSwitchItem\n option={opt}\n key={String(opt.value)}\n layoutId={props.layoutId}\n selected={currentValue === opt.value}\n onClick={onChange}\n onBlur={props.onBlur}\n />\n ))}\n </div>\n )\n }\n}\n","import type { CalendarViewMode, DateFormat, TimeFormat } from './types'\n\nexport const DEFAULT_TIME_FORMAT: TimeFormat = '24h'\nexport const DEFAULT_VIEW_MODE: CalendarViewMode = 'double'\nexport const DEFAULT_DATE_FORMAT: DateFormat = 'dd/MM/yyyy'\nexport const DEFAULT_DISPLAY_DATE_FORMAT = 'dd MMMM yyyy'\n","import type { DateFormat } from '@components/commons/toolkit/Calendar/types'\nimport type { DateMaskFormat } from '@services/MaskModule/locales/br/masks/DateMask'\n\nexport const DATE_FORMAT_MASK_MAPPER: Record<DateFormat, DateMaskFormat> = {\n 'dd/MM/yyyy': 'DD/MM/YYYY',\n 'MM/dd/yyyy': 'MM/DD/YYYY',\n 'yyyy/MM/dd': 'YYYY/MM/DD'\n}\n","// External Libraries\nimport { parse, setHours, setMinutes } from 'date-fns'\n\n// Utils\nimport {\n DEFAULT_DATE_FORMAT,\n DEFAULT_TIME_FORMAT\n} from '@components/commons/toolkit/Calendar/constants'\n\n// Types\nimport type { DateTimeValues } from '../../../types'\nimport type { CalendarFormatValues } from '@components/commons/toolkit/Calendar/types'\n\nexport function makeInitialDateTime(): DateTimeValues {\n return { time: '', date: '', period: 'am' }\n}\n\ninterface BuildISOParams extends CalendarFormatValues {\n date: string\n time: string\n period?: string\n}\n\nexport function buildISO({\n date,\n time,\n period = 'am',\n timeFormat = DEFAULT_TIME_FORMAT,\n dateFormat = DEFAULT_DATE_FORMAT\n}: BuildISOParams) {\n const baseDate = parse(date, dateFormat, new Date())\n let [hours, minutes] = time.split(':').map(Number)\n\n if (timeFormat === '12h') {\n if (period === 'pm' && hours !== 12) {\n hours += 12\n } else if (period === 'am' && hours === 12) {\n hours = 0\n }\n }\n\n const withTime = setMinutes(setHours(baseDate, hours || 0), minutes || 0)\n\n return withTime.toISOString()\n}\n","// External Libraries\nimport { endOfDay, isAfter, isBefore, startOfDay } from 'date-fns'\n\n// Services\nimport { DateValidator } from '@services/MaskModule/locales/br/validators/DateValidator'\nimport { TimeValidator } from '@services/MaskModule/locales/br/validators/TimeValidator'\n\n// Utils\nimport {\n DEFAULT_DATE_FORMAT,\n DEFAULT_TIME_FORMAT\n} from '@components/commons/toolkit/Calendar/constants'\nimport { DATE_FORMAT_MASK_MAPPER } from '../../../../../constants'\n\n// Types\nimport type {\n DateFormat,\n TimeFormat\n} from '@components/commons/toolkit/Calendar/types'\nimport type { DateTimeValues } from '../../../types'\nimport type { DateMaskFormat } from '@services/MaskModule/locales/br/masks/DateMask'\n\ninterface CheckErrorsParams {\n values: DateTimeValues\n dateFormat?: DateFormat\n timeFormat?: TimeFormat\n disableFutureDates?: boolean\n disablePastDates?: boolean\n}\n\nexport function checkErrors({\n values,\n disablePastDates,\n disableFutureDates,\n timeFormat = DEFAULT_TIME_FORMAT,\n dateFormat = DEFAULT_DATE_FORMAT\n}: CheckErrorsParams): string | null {\n const maskFormat: DateMaskFormat = DATE_FORMAT_MASK_MAPPER[dateFormat]\n\n const dateValidator = new DateValidator({ dateFormat: maskFormat })\n const timeValidator = new TimeValidator({ format: timeFormat })\n\n const isValidDate = dateValidator.validate(values.date)\n const isValidTime = timeValidator.validate(values.time)\n\n let error = ''\n\n if (!isValidTime) error = 'Formato de hora inválida'\n\n if (!isValidDate) error = 'Formato de data inválida'\n\n if (isValidDate) {\n const endOfToday = endOfDay(new Date())\n const startOfToday = startOfDay(new Date())\n\n const dateISO = createISODate(values.date, dateFormat)\n\n if (\n dateISO &&\n disableFutureDates &&\n isAfter(dateISO, endOfToday.toISOString())\n ) {\n error = 'Data futura indisponível'\n }\n\n if (\n dateISO &&\n disablePastDates &&\n isBefore(dateISO, startOfToday.toISOString())\n ) {\n error = 'Data passada indisponível'\n }\n }\n\n return error ?? null\n}\n\nexport function createISODate(value: string, format: DateFormat): Date | null {\n const parts = value.split('/')\n\n if (parts.length !== 3) return null\n\n let day: string\n let month: string\n let year: string\n\n switch (format) {\n case 'dd/MM/yyyy':\n ;[day, month, year] = parts\n break\n\n case 'MM/dd/yyyy':\n ;[month, day, year] = parts\n break\n\n case 'yyyy/MM/dd':\n ;[year, month, day] = parts\n break\n }\n\n return new Date(Number(year), Number(month) - 1, Number(day))\n}\n","// External Libraries\nimport { useEffect, useState } from 'react'\nimport { format, parseISO } from 'date-fns'\n\n// Utils\nimport {\n DEFAULT_DATE_FORMAT,\n DEFAULT_TIME_FORMAT\n} from '@components/commons/toolkit/Calendar/constants'\nimport { DATE_FORMAT_MASK_MAPPER } from '../../../../constants'\nimport { buildISO, checkErrors, makeInitialDateTime } from './utils'\n\n// Types\nimport type { UseDateTimeInputParams } from './types'\nimport type { DateTimePeriod, DateTimeValues } from '../../types'\nimport { Locale, MaskModule, MaskType } from '@services/MaskModule'\nimport { DateMask } from '@services/MaskModule/locales/br/masks/DateMask'\n\nexport function useDateTimeInput({\n value,\n disablePastDates,\n disableFutureDates,\n timeFormat = DEFAULT_TIME_FORMAT,\n dateFormat = DEFAULT_DATE_FORMAT,\n onChange\n}: UseDateTimeInputParams) {\n // States\n const [errorMessage, setErrorMessage] = useState('')\n const [datetimeValue, setDatetimeValue] = useState(makeInitialDateTime)\n\n useEffect(() => {\n if (!value) return\n\n const date = parseISO(value)\n\n let time: string\n let period: 'am' | 'pm' = 'am'\n\n if (timeFormat === '12h') {\n time = format(date, 'hh:mm')\n period = format(date, 'a').toLowerCase() as DateTimePeriod\n } else {\n time = format(date, 'HH:mm')\n }\n\n setDatetimeValue(prev => ({\n ...prev,\n time,\n period,\n date: format(date, dateFormat)\n }))\n }, [value, dateFormat, timeFormat])\n\n function emitChange() {\n const error = checkErrors({\n dateFormat,\n timeFormat,\n disablePastDates,\n disableFutureDates,\n values: datetimeValue\n })\n\n if (error) return setErrorMessage(error)\n\n const iso = buildISO({ ...datetimeValue, dateFormat, timeFormat })\n\n onChange(iso)\n }\n\n function handleDateTimeChange(changes: Partial<DateTimeValues>) {\n const formattedChanges: Partial<DateTimeValues> = {}\n setErrorMessage('')\n\n if (changes.date != null && changes.date !== undefined) {\n const maskDateFormat = DATE_FORMAT_MASK_MAPPER[dateFormat]\n\n const module = new DateMask({ dateFormat: maskDateFormat })\n formattedChanges.date = module\n ? module.format(changes.date)\n : changes.date\n }\n\n if (changes.time != null && changes.time !== undefined) {\n const module =\n timeFormat === '12h'\n ? MaskModule.getMask(Locale.BR, MaskType.TIME_12H)\n : MaskModule.getMask(Locale.BR, MaskType.TIME_24H)\n\n formattedChanges.time = module\n ? module.format(changes.time)\n : changes.time\n }\n\n if (changes.period) {\n formattedChanges.period = changes.period\n }\n\n setDatetimeValue(prev => ({ ...prev, ...formattedChanges }))\n }\n\n return {\n errorMessage,\n datetimeValue,\n emitChange,\n handleDateTimeChange\n }\n}\n","import type { DateTimeInputProps } from './types'\nimport { styled } from '@hooks/useThemedStyles/types'\n\nexport function createDateTimeInputStyles(_props: DateTimeInputProps) {\n return styled({\n container: {\n width: '17.5rem',\n\n display: 'flex',\n flexDirection: 'column',\n gap: '0.25rem'\n },\n\n content: {\n width: '100%',\n height: '2.5rem',\n\n display: 'flex',\n alignItems: 'center',\n columnGap: '0.25rem',\n\n borderWidth: 1,\n borderStyle: 'solid',\n borderRadius: '0.5rem',\n padding: '0.625rem 0.875rem',\n boxShadow: 'var(--px-shadow-default)',\n borderColor: _props.errorMessage\n ? 'var(--px-color-error)'\n : 'var(--px-border-primary)',\n\n __rules: {\n '&:focus-within': {\n outlineOffset: '-1px',\n outline: '2px solid var(--px-color-primary)'\n }\n }\n },\n\n wrapper: {\n width: '100%',\n minWidth: 0,\n display: 'flex',\n alignItems: 'center',\n\n gap: '0.25rem'\n },\n\n divider: {\n border: 0,\n width: '1px',\n height: '1rem',\n\n marginInline: '0.5rem',\n backgroundColor: 'var(--px-border-primary)'\n },\n\n input: {\n flex: 1,\n width: '100%',\n minWidth: 0,\n fontWeight: 500,\n fontSize: '0.875rem',\n lineHeight: '1.5rem',\n fontFamily: 'inherit',\n color: 'var(--px-text-primary)',\n backgroundColor: 'transparent',\n border: 'none',\n padding: 0,\n __rules: {\n '&:disabled': {\n cursor: 'not-allowed'\n },\n '&:focus': {\n outline: 'none'\n },\n '&::placeholder': {\n fontWeight: 400,\n color: 'var(--px-text-secondary)'\n }\n }\n }\n })\n}\n","// External Libraries\nimport type React from 'react'\n\n// Components\nimport { Icon } from '@components/commons/toolkit/Icon'\nimport { PeriodSwitch } from './components/PeriodSwitch'\nimport { ErrorMessage } from '@components/commons/toolkit/ErrorMessage'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\nimport { useDateTimeInput } from './hooks/useDateTimeInput'\n\n// Types\nimport type { DateTimeInputProps } from './types'\n\n// Styles\nimport { createDateTimeInputStyles } from './styles'\n\nexport const DateTimeInput: React.FC<DateTimeInputProps> = props => {\n // Hooks\n const { styles, classes } = useThemedStyles(\n props,\n createDateTimeInputStyles,\n { applyCommonProps: true }\n )\n const { errorMessage, datetimeValue, emitChange, handleDateTimeChange } =\n useDateTimeInput(props)\n\n // Functions\n function handleKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n if (e.key === 'Enter') {\n emitChange()\n }\n }\n\n function handleBlur() {\n emitChange()\n }\n\n return (\n <div style={styles.container}>\n <div style={styles.content} className={classes.content}>\n <div style={styles.wrapper}>\n <Icon\n size=\"sm\"\n name=\"general-calendar\"\n color=\"var(--px-text-disabled)\"\n />\n\n <input\n style={styles.input}\n className={classes.input}\n value={datetimeValue.date}\n placeholder={props.dateFormat}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onChange={e => handleDateTimeChange({ date: e.target.value })}\n />\n </div>\n\n <hr style={styles.divider} />\n\n <div style={styles.wrapper}>\n <Icon\n size=\"sm\"\n name=\"general-clock\"\n color=\"var(--px-text-disabled)\"\n />\n\n <input\n placeholder=\"12:00\"\n style={styles.input}\n className={classes.input}\n value={datetimeValue.time}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onChange={e => handleDateTimeChange({ time: e.target.value })}\n />\n\n {props.timeFormat === '12h' ? (\n <PeriodSwitch\n layoutId={props.layoutId}\n currentValue={datetimeValue.period}\n onBlur={handleBlur}\n onChange={value => handleDateTimeChange({ period: value })}\n />\n ) : null}\n </div>\n </div>\n\n {errorMessage ? <ErrorMessage message={errorMessage} /> : null}\n </div>\n )\n}\n","// External Libraries\nimport { isAfter } from 'date-fns'\n\n// Types\nimport type { UseDateTimeControlParams } from './types'\nimport type { PickedDate } from '@components/commons/toolkit/Calendar/types'\n\ntype DraftPickedDate = {\n start?: string\n end?: string\n}\n\nexport function useDateTimeControl({\n value,\n onChange\n}: UseDateTimeControlParams) {\n function handleDateTimeChange(changes: DraftPickedDate) {\n const draft: DraftPickedDate = {\n start: changes.start ?? value?.start,\n end: changes.end ?? value?.end\n }\n\n if (!draft.start) {\n return\n }\n\n const newValues: PickedDate = {\n start: draft.start,\n end: draft.end\n }\n\n if (newValues.end) {\n const startIsAfterEnd = isAfter(newValues.start, newValues.end)\n\n if (startIsAfterEnd) {\n const tempStart = newValues.start\n const tempEnd = newValues.end\n\n newValues.start = tempEnd\n newValues.end = tempStart\n }\n }\n\n onChange(newValues)\n }\n\n return { handleDateTimeChange }\n}\n","// Types\nimport type { DateTimeControlProps } from './types'\nimport type { StyleMap } from '@hooks/useThemedStyles/types'\n\n// Hooks\nimport { styled } from '@hooks/useThemedStyles/types'\n\nexport function createDateTimeControlStyles(\n _props: DateTimeControlProps\n): StyleMap {\n return styled({\n container: {\n width: '100%',\n\n display: 'flex',\n alignItems: _props.viewMode === 'double' ? 'center' : undefined,\n flexDirection: _props.viewMode === 'single' ? 'column' : 'row',\n\n gap: '0.5rem'\n }\n })\n}\n","// External Libraries\nimport type React from 'react'\n\n// Components\nimport { Icon } from '@components/commons/toolkit/Icon'\nimport { DateTimeInput } from './components/DateTimeInput'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\nimport { useDateTimeControl } from './hooks/useDateTimeControl'\n\n// Utils\nimport { DEFAULT_VIEW_MODE } from '../../constants'\n\n// Types\nimport type { DateTimeControlProps } from './types'\n\n// Styles\nimport { createDateTimeControlStyles } from './styles'\n\nexport const DateTimeControl: React.FC<DateTimeControlProps> = ({\n viewMode = DEFAULT_VIEW_MODE,\n ...props\n}) => {\n // Constants\n const resolvedProps = { viewMode, ...props }\n\n // Hooks\n const { styles } = useThemedStyles(\n resolvedProps,\n createDateTimeControlStyles,\n {\n applyCommonProps: true\n }\n )\n const { handleDateTimeChange } = useDateTimeControl(resolvedProps)\n\n return (\n <div style={styles.container}>\n <DateTimeInput\n layoutId=\"start-date\"\n dateFormat={resolvedProps.dateFormat}\n timeFormat={resolvedProps.timeFormat}\n value={resolvedProps.value?.start ?? ''}\n disablePastDates={resolvedProps.disablePastDates}\n disableFutureDates={resolvedProps.disableFutureDates}\n onChange={start => handleDateTimeChange({ start })}\n />\n\n {resolvedProps.viewMode === 'double' &&\n resolvedProps.selectionMode === 'range' ? (\n <Icon\n size=\"sm\"\n name=\"arrows-arrow-right\"\n color=\"var(--px-text-secondary)\"\n />\n ) : null}\n\n {resolvedProps.selectionMode === 'range' ? (\n <DateTimeInput\n layoutId=\"end-date\"\n value={resolvedProps?.value?.end}\n timeFormat={resolvedProps.timeFormat}\n dateFormat={resolvedProps.dateFormat}\n disablePastDates={resolvedProps.disablePastDates}\n disableFutureDates={resolvedProps.disableFutureDates}\n onChange={end => handleDateTimeChange({ end })}\n />\n ) : null}\n </div>\n )\n}\n","// External Libraries\nimport {\n addDays,\n addYears,\n addMonths,\n endOfWeek,\n endOfMonth,\n startOfWeek,\n startOfMonth,\n eachDayOfInterval\n} from 'date-fns'\nimport { useMemo, useState } from 'react'\n\n// Types\nimport type { CalendarNavAction } from '../types'\n\nexport function useCalendar(initialDate = new Date()) {\n // States\n const [currentDate, setCurrentDate] = useState(initialDate)\n\n // Constants\n const days = useMemo(() => {\n const start = startOfWeek(startOfMonth(currentDate), { weekStartsOn: 0 })\n const end = endOfWeek(endOfMonth(currentDate), { weekStartsOn: 0 })\n let days = eachDayOfInterval({ start, end })\n\n if (days.length < 42) {\n const diff = 42 - days.length\n const last = end\n\n const extraDays = Array.from({ length: diff }, (_, i) =>\n addDays(last, i + 1)\n )\n\n days = [...days, ...extraDays]\n }\n\n return days\n }, [currentDate])\n\n // Functions\n function handleNavAction(action: CalendarNavAction) {\n switch (action) {\n case 'next-month':\n setCurrentDate(prev => addMonths(prev, 1))\n break\n\n case 'prev-month':\n setCurrentDate(prev => addMonths(prev, -1))\n break\n\n case 'next-year':\n setCurrentDate(prev => addYears(prev, 1))\n break\n\n case 'prev-year':\n setCurrentDate(prev => addYears(prev, -1))\n break\n }\n }\n\n return { currentDate, days, handleNavAction, setCurrentDate }\n}\n","import { styled } from '@hooks/useThemedStyles/types'\n\nexport function createCalendarStyles() {\n return styled({\n container: {\n display: 'flex',\n flexDirection: 'column'\n },\n dateTimeControlContent: {\n display: 'flex',\n\n padding: '0.75rem 1rem',\n paddingBottom: '0'\n },\n monthsContainer: {\n display: 'flex',\n flexDirection: 'row',\n\n alignItems: 'center'\n },\n monthContainer: {\n display: 'flex',\n flexDirection: 'column',\n\n gap: '0.75rem',\n padding: '0.75rem 1rem'\n }\n })\n}\n","// External Libraries\nimport type React from 'react'\nimport { useEffect } from 'react'\nimport { addMonths, isAfter, isSameDay, parseISO } from 'date-fns'\n\n// Components\nimport { CalendarMonth } from './components/CalendarMonth'\nimport { CalendarHeader } from './components/CalendarHeader'\nimport { DateTimeControl } from './components/DateTimeControl'\n\n// Hooks\nimport { useCalendar } from './hooks/useCalendar'\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Utils\nimport {\n DEFAULT_VIEW_MODE,\n DEFAULT_DATE_FORMAT,\n DEFAULT_TIME_FORMAT\n} from './constants'\n\n// Types\nimport type { CalendarProps } from './types'\n\n// Styles\nimport { createCalendarStyles } from './styles'\n\nexport const Calendar: React.FC<CalendarProps> = ({\n viewMode = DEFAULT_VIEW_MODE,\n dateFormat = DEFAULT_DATE_FORMAT,\n timeFormat = DEFAULT_TIME_FORMAT,\n ...props\n}) => {\n const resolvedProps = { timeFormat, dateFormat, viewMode, ...props }\n\n // Hooks\n const mainCalendar = useCalendar()\n const secondaryCalendar = useCalendar(addMonths(mainCalendar.currentDate, 1))\n const { styles } = useThemedStyles(resolvedProps, createCalendarStyles, {\n applyCommonProps: true\n })\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n secondaryCalendar.setCurrentDate(addMonths(mainCalendar.currentDate, 1))\n }, [mainCalendar.currentDate])\n\n // Functions\n function handleSelect(day: Date) {\n const { value, selectionMode, onChange } = resolvedProps\n\n if (selectionMode === 'single') {\n onChange({ start: day.toISOString() })\n } else {\n const start = value?.start ? parseISO(value.start) : null\n const end = value?.end ? parseISO(value.end) : null\n\n if (!start || (start && end)) {\n onChange({ start: day.toISOString(), end: undefined })\n } else if (start && !end) {\n const [from, to] =\n isAfter(day, start) || isSameDay(day, start)\n ? [start, day]\n : [day, start]\n\n onChange({ start: from.toISOString(), end: to.toISOString() })\n }\n }\n }\n\n return (\n <div style={styles.container}>\n {resolvedProps.isDateTimePicker ? (\n <div style={styles.dateTimeControlContent}>\n <DateTimeControl {...resolvedProps} />\n </div>\n ) : null}\n\n <div style={styles.monthsContainer}>\n <div style={styles.monthContainer}>\n <CalendarHeader\n position=\"left\"\n currentDate={mainCalendar.currentDate}\n isDualView={resolvedProps.viewMode === 'double'}\n disablePastDates={resolvedProps.disablePastDates}\n disableFutureDates={resolvedProps.disableFutureDates}\n onNavAction={mainCalendar.handleNavAction}\n />\n\n <CalendarMonth\n days={mainCalendar.days}\n selection={resolvedProps.value}\n disablePastDates={resolvedProps.disablePastDates}\n disableFutureDates={resolvedProps.disableFutureDates}\n onDayClick={handleSelect}\n />\n </div>\n\n {resolvedProps.viewMode === 'double' ? (\n <div style={styles.monthContainer}>\n <CalendarHeader\n isDualView\n position=\"right\"\n currentDate={secondaryCalendar.currentDate}\n disablePastDates={resolvedProps.disablePastDates}\n disableFutureDates={resolvedProps.disableFutureDates}\n onNavAction={mainCalendar.handleNavAction}\n />\n\n <CalendarMonth\n days={secondaryCalendar.days}\n selection={resolvedProps.value}\n disablePastDates={resolvedProps.disablePastDates}\n disableFutureDates={resolvedProps.disableFutureDates}\n onDayClick={handleSelect}\n />\n </div>\n ) : null}\n </div>\n </div>\n )\n}\n","import type { TimeFormat } from '../../types'\n\ninterface BuildDisplayFormatParams {\n displayDateFormat: string\n isDateTimePicker: boolean\n timeFormat: TimeFormat\n}\n\nfunction hasTimeTokens(formatStr: string) {\n return /(H{1,2}|h{1,2}|m{1,2}|a)/.test(formatStr)\n}\n\nfunction normalizeTimeFormat(formatStr: string, timeFormat: '12h' | '24h') {\n if (timeFormat === '24h') {\n return formatStr\n .replace(/h{1,2}/g, match => (match.length === 2 ? 'HH' : 'H'))\n .replace(/\\s*a/g, '')\n }\n\n return formatStr.replace(/H{1,2}/g, match =>\n match.length === 2 ? 'hh' : 'h'\n )\n}\n\nfunction getDefaultTimeFormat(timeFormat: '12h' | '24h') {\n return timeFormat === '24h' ? 'HH:mm' : 'hh:mm a'\n}\n\nexport function buildDisplayFormat({\n displayDateFormat,\n isDateTimePicker,\n timeFormat\n}: BuildDisplayFormatParams) {\n const formatHasTime = hasTimeTokens(displayDateFormat)\n\n if (!isDateTimePicker) {\n return formatHasTime\n ? displayDateFormat.replace(/\\s*(H{1,2}|h{1,2}|m{1,2}|a|:)+/g, '')\n : displayDateFormat\n }\n\n if (formatHasTime) {\n return normalizeTimeFormat(displayDateFormat, timeFormat)\n }\n\n const timeFormatStr = getDefaultTimeFormat(timeFormat)\n return `${displayDateFormat} ${timeFormatStr}`\n}\n","import { styled } from '@hooks/useThemedStyles/types'\nimport type { DatePickerTriggerProps } from './types'\n\nexport function createDatePickerTriggerStyles(props: DatePickerTriggerProps) {\n return styled({\n container: {\n width: '100%',\n\n display: 'flex',\n flexDirection: 'column',\n\n gap: '0.5rem',\n\n opacity: props.disabled ? 0.5 : 1,\n cursor: props.disabled ? 'not-allowed' : 'pointer'\n },\n button: {\n width: '100%',\n\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n\n gap: '0.5rem',\n borderRadius: '0.5rem',\n padding: '0.625rem 0.875rem',\n\n border: props.errorMessage\n ? '1px solid var(--px-color-error)'\n : '1px solid var(--px-border-primary)',\n\n __rules: {\n '&:hover': {\n boxShadow: 'var(--px-shadow-default)',\n borderColor: 'var(--px-color-primary)'\n },\n '&:focus-within': {\n outlineOffset: '-1px',\n outline: props.errorMessage\n ? '2px solid var(--px-color-error)'\n : `2px solid var(--px-color-primary)`\n }\n }\n },\n buttonContent: {\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem'\n }\n })\n}\n","// External Libraries\nimport { format } from 'date-fns'\nimport { forwardRef, useId } from 'react'\n\n// Components\nimport { Icon } from '@components/commons/toolkit/Icon'\nimport { Label } from '@components/commons/toolkit/Label'\nimport { Typography } from '@components/commons/toolkit/Typography'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Utils\nimport { buildDisplayFormat } from './utils'\nimport {\n DEFAULT_TIME_FORMAT,\n DEFAULT_DISPLAY_DATE_FORMAT\n} from '@components/commons/toolkit/Calendar/constants'\n\n// Types\nimport type { DatePickerTriggerProps } from './types'\n\n// Styles\nimport { createDatePickerTriggerStyles } from './styles'\nimport { ptBR } from 'date-fns/locale'\n\nexport const DatePickerTrigger = forwardRef<\n HTMLButtonElement,\n DatePickerTriggerProps\n>(function DatePickerTrigger(\n {\n timeFormat = DEFAULT_TIME_FORMAT,\n displayDateFormat = DEFAULT_DISPLAY_DATE_FORMAT,\n ...props\n },\n ref\n) {\n // Hooks\n const inputId = useId()\n const { styles, classes } = useThemedStyles(\n props,\n createDatePickerTriggerStyles,\n {\n pick: p => [p.disabled, p.errorMessage],\n applyCommonProps: true,\n commonSlot: 'container'\n }\n )\n\n // Constants\n const { label, value, disabled, required, placeholder, onClick } = props\n const hasValue = !!value?.start\n\n // Functions\n function renderDate() {\n if (!hasValue) return placeholder ?? 'Selecione uma data'\n\n const { start, end } = value\n\n const finalFormat = buildDisplayFormat({\n timeFormat,\n displayDateFormat,\n isDateTimePicker: !!props.isDateTimePicker\n })\n\n const startDate = format(start, finalFormat, { locale: ptBR })\n const endDate = end ? format(end, finalFormat, { locale: ptBR }) : ''\n\n return `${startDate}${endDate ? ` - ${endDate}` : ''}`\n }\n\n return (\n <div style={styles.container}>\n <Label\n label={label}\n htmlFor={inputId}\n required={required}\n requiredColor=\"var(--color-error)\"\n />\n\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n style={styles.button}\n aria-labelledby={inputId}\n aria-expanded={props.ariaExpanded}\n className={classes.button}\n onClick={onClick}\n >\n <div style={styles.buttonContent}>\n <Icon\n size=\"sm\"\n name=\"general-calendar\"\n color=\"var(--px-text-primary)\"\n />\n\n <Typography variant=\"b1\" className=\"font-normal\">\n {renderDate()}\n </Typography>\n </div>\n\n <Icon\n size=\"sm\"\n color=\"var(--px-text-primary)\"\n name={props.ariaExpanded ? 'chevrons-up' : 'chevrons-down'}\n />\n </button>\n\n {props.errorMessage ? (\n <Typography\n variant=\"b2\"\n fontSize=\"0.75rem\"\n fontWeight=\"regular\"\n color=\"var(--px-color-error)\"\n >\n {props.errorMessage}\n </Typography>\n ) : null}\n </div>\n )\n})\n","// External Libraries\nimport { useState } from 'react'\n\n// Types\nimport type { DatePickerProps } from '../types'\nimport type { PickedDate } from '@components/commons/toolkit/Calendar/types'\n\nexport function useDatePicker(params: DatePickerProps) {\n // States\n const [isOpen, setOpen] = useState(false)\n const [selectedDate, setSelectedDate] = useState<PickedDate>()\n\n // Functions\n function toggleDialog(status: boolean) {\n if (status) setSelectedDate(params.value)\n\n setOpen(status)\n }\n\n function handleDateChange(value: PickedDate) {\n setSelectedDate(value)\n }\n\n function handleConfirmClick() {\n if (!selectedDate) return\n\n setOpen(false)\n params.onChange(selectedDate)\n }\n\n return {\n isOpen,\n selectedDate,\n toggleDialog,\n handleDateChange,\n handleConfirmClick\n }\n}\n","import { styled } from '@hooks/useThemedStyles/types'\nimport type { DatePickerProps } from './types'\n\nexport function createDatePickerStyles(props: DatePickerProps) {\n return styled({\n container: {\n width: '100%'\n },\n\n divider: {\n border: 0,\n display: 'flex',\n marginBlock: '0.1rem',\n borderTop: '1px solid var(--px-border-primary)'\n },\n\n buttonsContainer: {\n width: '100%',\n display: 'flex',\n\n alignItems: 'center',\n justifyContent: props.viewMode === 'single' ? 'center' : 'flex-end',\n\n gap: '0.75rem',\n padding: '0.5rem 1rem'\n }\n })\n}\n","import type { CalendarProps } from '@components/commons/toolkit/Calendar/types'\n\nexport * from '@components/commons/toolkit/Calendar/types'\n\nexport interface DatePickerProps extends CalendarProps {\n label: string\n\n required?: boolean\n disabled?: boolean\n placeholder?: string\n errorMessage?: string\n scrollContainerId: string\n}\n","// External Libraries\nimport type React from 'react'\n\n// Components\nimport { Button } from '@components/commons/buttons/Button'\nimport { Calendar } from '@components/commons/toolkit/Calendar'\nimport { DatePickerTrigger } from './components/DatePickerTrigger'\nimport { BasePopover } from '@components/commons/structure/BasePopover'\n\n// Hooks\nimport { useDatePicker } from './hooks/useDatePicker'\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Types\nimport type { DatePickerProps } from './types'\nimport type { PopoverTriggerRenderProps } from '@components/commons/toolkit/Popover/types'\n\n// Styles\nimport { createDatePickerStyles } from './styles'\n\nexport * as DatePickerTypes from './types'\n\nexport const DatePicker: React.FC<DatePickerProps> = props => {\n // Hooks\n const {\n isOpen,\n selectedDate,\n toggleDialog,\n handleDateChange,\n handleConfirmClick\n } = useDatePicker(props)\n const { styles } = useThemedStyles(props, createDatePickerStyles, {\n applyCommonProps: true,\n commonSlot: 'container'\n })\n\n // Constants\n const isSingleMode = props.viewMode === 'single'\n\n // Functions\n function renderTrigger({\n ref,\n ariaExpanded,\n onClick\n }: PopoverTriggerRenderProps) {\n return (\n <DatePickerTrigger\n {...props}\n ref={ref as any}\n ariaExpanded={ariaExpanded}\n onClick={onClick}\n />\n )\n }\n\n return (\n <div style={styles.container}>\n <BasePopover\n open={isOpen}\n maxWidth=\"fit-content\"\n minWidth=\"fit-content\"\n maxHeight=\"fit-content\"\n trigger={renderTrigger}\n onOpenChange={toggleDialog}\n floatingOptions={{\n strategy: 'fixed',\n placement: 'bottom-start',\n scrollContainerId: props.scrollContainerId\n }}\n >\n <Calendar\n {...props}\n value={selectedDate}\n selectionMode={props.selectionMode ?? 'range'}\n onChange={handleDateChange}\n />\n\n {isSingleMode ? <hr style={styles.divider} /> : null}\n\n <div style={styles.buttonsContainer}>\n <Button\n size=\"sm\"\n type=\"button\"\n label=\"Cancelar\"\n variant=\"outlined\"\n fullWidth={isSingleMode}\n onClick={() => toggleDialog(false)}\n />\n\n <Button\n type=\"button\"\n label=\"Aplicar\"\n variant=\"filled\"\n fullWidth={isSingleMode}\n onClick={handleConfirmClick}\n />\n </div>\n </BasePopover>\n </div>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DatePicker-Y5IyaCoK.js","names":["CalendarDay: React.FC<CalendarDayProps>","CalendarMonth: React.FC<CalendarMonthProps>","NavButton: React.FC<NavButtonProps>","CalendarHeader: React.FC<Props>","PeriodSwitchItem: React.FC<Props>","PERIOD_OPTIONS: PeriodOption[]","PeriodSwitch: React.FC<PeriodSwitchProps>","DEFAULT_TIME_FORMAT: TimeFormat","DEFAULT_VIEW_MODE: CalendarViewMode","DEFAULT_DATE_FORMAT: DateFormat","DATE_FORMAT_MASK_MAPPER: Record<DateFormat, DateMaskFormat>","maskFormat: DateMaskFormat","day: string","month: string","year: string","format","time: string","period: 'am' | 'pm'","formattedChanges: Partial<DateTimeValues>","DateTimeInput: React.FC<DateTimeInputProps>","draft: DraftPickedDate","newValues: PickedDate","DateTimeControl: React.FC<DateTimeControlProps>","days","Calendar: React.FC<CalendarProps>","DatePickerTrigger","DatePicker: React.FC<DatePickerProps>"],"sources":["../src/utils/functions/capitalize.ts","../src/components/commons/toolkit/Calendar/components/CalendarMonth/components/CalendarDay/utils.ts","../src/components/commons/toolkit/Calendar/components/CalendarMonth/components/CalendarDay/styles.ts","../src/components/commons/toolkit/Calendar/components/CalendarMonth/components/CalendarDay/index.tsx","../src/components/commons/toolkit/Calendar/components/CalendarMonth/constants.ts","../src/components/commons/toolkit/Calendar/components/CalendarMonth/styles.ts","../src/components/commons/toolkit/Calendar/components/CalendarMonth/index.tsx","../src/components/commons/toolkit/Calendar/components/CalendarHeader/components/NavButton/styles.ts","../src/components/commons/toolkit/Calendar/components/CalendarHeader/components/NavButton/index.tsx","../src/components/commons/toolkit/Calendar/components/CalendarHeader/utils.ts","../src/components/commons/toolkit/Calendar/components/CalendarHeader/styles.ts","../src/components/commons/toolkit/Calendar/components/CalendarHeader/index.tsx","../src/components/commons/toolkit/Calendar/components/DateTimeControl/components/DateTimeInput/components/PeriodSwitch/components/PeriodSwitchItem/styles.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/components/DateTimeInput/components/PeriodSwitch/components/PeriodSwitchItem/index.tsx","../src/components/commons/toolkit/Calendar/components/DateTimeControl/components/DateTimeInput/components/PeriodSwitch/constants.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/components/DateTimeInput/components/PeriodSwitch/styles.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/components/DateTimeInput/components/PeriodSwitch/index.tsx","../src/components/commons/toolkit/Calendar/constants.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/constants.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/components/DateTimeInput/hooks/useDateTimeInput/utils/buildISODate.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/components/DateTimeInput/hooks/useDateTimeInput/utils/errors.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/components/DateTimeInput/hooks/useDateTimeInput/index.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/components/DateTimeInput/styles.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/components/DateTimeInput/index.tsx","../src/components/commons/toolkit/Calendar/components/DateTimeControl/hooks/useDateTimeControl/index.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/styles.ts","../src/components/commons/toolkit/Calendar/components/DateTimeControl/index.tsx","../src/components/commons/toolkit/Calendar/hooks/useCalendar.ts","../src/components/commons/toolkit/Calendar/styles.ts","../src/components/commons/toolkit/Calendar/index.tsx","../src/components/commons/inputs/DatePicker/components/DatePickerTrigger/utils.ts","../src/components/commons/inputs/DatePicker/components/DatePickerTrigger/styles.ts","../src/components/commons/inputs/DatePicker/components/DatePickerTrigger/index.tsx","../src/components/commons/inputs/DatePicker/hooks/useDatePicker.ts","../src/components/commons/inputs/DatePicker/styles.ts","../src/components/commons/inputs/DatePicker/types.ts","../src/components/commons/inputs/DatePicker/index.tsx"],"sourcesContent":["export function capitalize(text: string) {\n if (!text) return ''\n return text.charAt(0).toUpperCase() + text.slice(1)\n}\n","// External Libraries\nimport {\n format,\n isAfter,\n isBefore,\n endOfDay,\n isSameDay,\n startOfDay,\n isSameMonth,\n isWithinInterval\n} from 'date-fns'\nimport { ptBR } from 'date-fns/locale'\n\n// Types\nimport type { PickedDate } from '../../../../types'\n\ninterface DayMetadataParams {\n day: Date\n currentMonth: Date\n selection?: PickedDate\n disablePastDates?: boolean\n disableFutureDates?: boolean\n}\n\nexport function getDayMetadata(params: DayMetadataParams) {\n const { day, currentMonth, selection, disablePastDates, disableFutureDates } =\n params\n\n const endOfToday = endOfDay(new Date())\n const startOfToday = startOfDay(new Date())\n const isPastDate = isBefore(day, startOfToday)\n const isFutureDate = isAfter(day, endOfToday)\n const isOutsideMonth = !isSameMonth(day, currentMonth)\n const isDisabled =\n isOutsideMonth ||\n (disablePastDates && isPastDate) ||\n (disableFutureDates && isFutureDate) ||\n false\n\n if (!selection) {\n const ariaLabel = getAriaLabel(day, {\n isDisabled,\n isBetween: false,\n isSelected: false\n })\n\n return {\n ariaLabel,\n isDisabled,\n isSelected: false,\n isBetween: false,\n isRangeEnd: false,\n isRangeStart: false\n }\n }\n\n const { start, end } = selection\n\n const isRangeStart = start ? isSameDay(day, start) : false\n const isRangeEnd = end ? isSameDay(day, end) : false\n\n const isBetween =\n start && end\n ? isWithinInterval(startOfDay(day), {\n start: startOfDay(start),\n end: startOfDay(end)\n })\n : false\n const isSelected = isRangeStart || isRangeEnd\n\n const ariaLabel = getAriaLabel(day, { isSelected, isBetween, isDisabled })\n\n return {\n ariaLabel,\n isBetween,\n isDisabled,\n isSelected,\n isRangeEnd,\n isRangeStart\n }\n}\n\nfunction getAriaLabel(\n day: Date,\n options: { isSelected: boolean; isBetween: boolean; isDisabled: boolean }\n) {\n const { isSelected, isBetween, isDisabled } = options\n const baseLabel = format(day, \"d 'de' MMMM 'de' yyyy\", { locale: ptBR })\n\n if (isSelected) return `${baseLabel}, selecionado`\n if (isBetween) return `${baseLabel}, dentro do intervalo`\n if (isDisabled) return `${baseLabel}, indisponível`\n\n return baseLabel\n}\n","import type { CalendarDayProps } from './types'\nimport { styled } from '@hooks/useThemedStyles/types'\n\ninterface StylesProps extends CalendarDayProps {\n isBetween: boolean\n isSelected: boolean\n isRangeStart: boolean\n isRangeEnd: boolean\n isDisabled: boolean\n}\n\nexport function createCalendarDayStyles(params: StylesProps) {\n return styled({\n container: {\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n\n backgroundColor: getContainerBackgroundColor(params),\n\n borderTopLeftRadius: getContainerBorderLeft(params),\n borderBottomLeftRadius: getContainerBorderLeft(params),\n borderTopRightRadius: getContainerBorderRight(params),\n borderBottomRightRadius: getContainerBorderRight(params)\n },\n\n button: {\n display: 'flex',\n width: '2.2rem',\n height: '2.2rem',\n alignItems: 'center',\n justifyContent: 'center',\n\n backgroundColor: getButtonBackgroundColor(params),\n borderRadius: getButtonBorderRadius(params),\n\n transition: 'all 200ms ease-in-out',\n cursor: params.isDisabled ? 'not-allowed' : 'pointer',\n opacity: params.isDisabled ? 0.5 : 1,\n\n __rules: {\n '&:hover': {\n opacity: '0.85'\n },\n '&:disabled': {\n opacity: '0.5',\n cursor: 'not-allowed'\n }\n }\n }\n })\n}\n\nfunction getContainerBackgroundColor({ isBetween }: StylesProps): string {\n if (isBetween) {\n return 'rgba(14, 178, 76, 0.1)'\n }\n\n return 'transparent'\n}\n\nfunction getContainerBorderLeft({ isRangeStart }: StylesProps) {\n return isRangeStart ? '50%' : '0'\n}\n\nfunction getContainerBorderRight({ isRangeEnd }: StylesProps) {\n return isRangeEnd ? '50%' : '0'\n}\n\nfunction getButtonBackgroundColor({\n isSelected,\n isRangeStart,\n isRangeEnd\n}: StylesProps): string {\n if (isSelected || isRangeStart || isRangeEnd) {\n return 'var(--px-btn-filled-bg)'\n }\n\n return 'transparent'\n}\n\nfunction getButtonBorderRadius({\n isBetween,\n isRangeStart,\n isRangeEnd\n}: StylesProps): string {\n if (isBetween && !isRangeStart && !isRangeEnd) {\n return '0'\n }\n\n return '50%'\n}\n","// External Libraries\nimport type React from 'react'\nimport { useMemo } from 'react'\n\n// Components\nimport { Typography } from '@components/commons/toolkit/Typography'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Utils\nimport { getDayMetadata } from './utils'\n\n// Types\nimport type { CalendarDayProps } from './types'\n\n// Styles\nimport { createCalendarDayStyles } from './styles'\n\nexport const CalendarDay: React.FC<CalendarDayProps> = props => {\n // Constants\n const {\n day,\n selection,\n currentMonth,\n disablePastDates,\n disableFutureDates,\n onClick\n } = props\n const dayConfig = useMemo(\n () =>\n getDayMetadata({\n day,\n selection,\n currentMonth,\n disablePastDates,\n disableFutureDates\n }),\n [day, selection, currentMonth, disablePastDates, disableFutureDates]\n )\n\n // Hooks\n const { styles, classes } = useThemedStyles(\n { ...props, ...dayConfig },\n createCalendarDayStyles,\n {\n applyCommonProps: true\n }\n )\n\n // Functions\n function handleClick() {\n onClick(day)\n }\n\n return (\n <div style={styles.container}>\n <button\n type=\"button\"\n style={styles.button}\n className={classes.button}\n disabled={dayConfig.isDisabled}\n aria-label={dayConfig.ariaLabel}\n onClick={handleClick}\n >\n <Typography\n variant=\"b2\"\n color={dayConfig.isSelected ? 'white' : 'var(--px-text-secondary)'}\n fontWeight={\n dayConfig.isSelected || dayConfig.isBetween ? 'medium' : 'regular'\n }\n >\n {day.getDate()}\n </Typography>\n </button>\n </div>\n )\n}\n","export const WEEK_DAYS = [\n { short: 'D', full: 'Domingo' },\n { short: 'S', full: 'Segunda' },\n { short: 'T', full: 'Terça' },\n { short: 'Q', full: 'Quarta' },\n { short: 'Q', full: 'Quinta' },\n { short: 'S', full: 'Sexta' },\n { short: 'S', full: 'Sábado' }\n] as const\n","import { styled } from '@hooks/useThemedStyles/types'\nimport type { CalendarMonthProps } from './types'\n\nexport function createCalendarMonthStyles(props: CalendarMonthProps) {\n return styled({\n weekDays: {\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 2.5rem)'\n },\n calendarDays: {\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 2.5rem)'\n },\n weekDay: {\n width: '2.5rem',\n height: '2.5rem',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }\n })\n}\n","// External Libraries\nimport type React from 'react'\n\n// Components\nimport { CalendarDay } from './components/CalendarDay'\nimport { Typography } from '@components/commons/toolkit/Typography'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Utils\nimport { WEEK_DAYS } from './constants'\n\n// Types\nimport type { CalendarMonthProps } from './types'\n\n// Styles\nimport { createCalendarMonthStyles } from './styles'\n\nexport const CalendarMonth: React.FC<CalendarMonthProps> = props => {\n // Hooks\n const { styles } = useThemedStyles(props, createCalendarMonthStyles)\n\n // Constants\n const currentMonth = props.days.length\n ? props.days[Math.floor(props.days.length / 2)]\n : new Date()\n\n // Functions\n function renderWeekDays() {\n return WEEK_DAYS.map(day => (\n <div key={day.full} style={styles.weekDay}>\n <Typography variant=\"b2\" className=\"text-tx-primary\">\n {day.short}\n </Typography>\n </div>\n ))\n }\n\n return (\n <div>\n <div style={styles.weekDays}>{renderWeekDays()}</div>\n\n <div style={styles.calendarDays}>\n {props.days.map(day => (\n <CalendarDay\n day={day}\n key={day.toISOString()}\n selection={props.selection}\n currentMonth={currentMonth}\n disablePastDates={props.disablePastDates}\n disableFutureDates={props.disableFutureDates}\n onClick={props.onDayClick}\n />\n ))}\n </div>\n </div>\n )\n}\n","import { styled } from '@hooks/useThemedStyles/types'\nimport type { NavButtonProps } from './types'\n\nexport function createNavButtonStyles(_props: NavButtonProps) {\n return styled({\n container: {\n display: 'flex',\n\n cursor: 'pointer',\n padding: '0.125rem',\n\n borderRadius: '50%',\n transition: 'background-color 0.2s ease-out',\n rotate: _props.next ? '180deg' : '0deg',\n\n __rules: {\n '&:hover': {\n backgroundColor: 'var(--color-gray-50)'\n }\n }\n }\n })\n}\n","// External Libraries\nimport type React from 'react'\n\n// Components\nimport { Icon } from '@components/commons/toolkit/Icon'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Types\nimport type { NavButtonProps } from './types'\n\n// Styles\nimport { createNavButtonStyles } from './styles'\n\nexport const NavButton: React.FC<NavButtonProps> = ({\n visible = true,\n ...props\n}) => {\n // Hooks\n\n const { styles, classes } = useThemedStyles(\n { visible, ...props },\n createNavButtonStyles,\n {\n applyCommonProps: true,\n pick: p => [p.next, p.visible]\n }\n )\n\n if (!visible) return null\n\n return (\n <button\n type=\"button\"\n style={styles.container}\n className={classes.container}\n onClick={props.onClick}\n >\n <Icon name={props.icon} color=\"var(--px-text-secondary)\" />\n </button>\n )\n}\n","// External Libraries\nimport { isBefore, startOfMonth, startOfYear } from 'date-fns'\n\ninterface NavMetadataParams {\n currentDate: Date\n isDualView: boolean\n position: 'left' | 'right'\n disablePastDates?: boolean\n disableFutureDates?: boolean\n}\n\nexport function getNavMetadata(params: NavMetadataParams) {\n const {\n position,\n isDualView,\n currentDate,\n disablePastDates,\n disableFutureDates\n } = params\n const today = new Date()\n\n const hasPrevMonthAvailable =\n !disablePastDates ||\n isBefore(startOfMonth(today), startOfMonth(currentDate))\n\n const hasPrevYearAvailable =\n !disablePastDates || isBefore(startOfYear(today), startOfYear(currentDate))\n\n const showPrevButtons = !isDualView\n ? hasPrevMonthAvailable || hasPrevYearAvailable\n : position !== 'right'\n\n function checkRenderShowNextButton() {\n if (disableFutureDates) return false\n else {\n return !isDualView ? true : position !== 'left'\n }\n }\n\n const showNextButtons = checkRenderShowNextButton()\n\n return {\n showPrevButtons,\n showNextButtons,\n hasPrevYearAvailable,\n hasPrevMonthAvailable\n }\n}\n","import { styled } from '@hooks/useThemedStyles/types'\nimport type { CalendarHeaderProps } from './types'\n\nexport function createCalendarHeaderStyles(_props: CalendarHeaderProps) {\n return styled({\n container: {\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingBlock: '0.375rem'\n },\n\n leftButtonsContainer: {\n minWidth: '3.5rem',\n minHeight: '1.5rem',\n\n display: 'flex',\n alignItems: 'center',\n gap: '0.25rem'\n },\n\n rightButtonsContainer: {\n minWidth: '3.5rem',\n minHeight: '1.5rem',\n\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: '0.25rem'\n }\n })\n}\n","// External Libraries\nimport type React from 'react'\nimport { format } from 'date-fns'\nimport { ptBR } from 'date-fns/locale'\n\n// Components\nimport { NavButton } from './components/NavButton'\nimport { Typography } from '@components/commons/toolkit/Typography'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Utils\nimport { getNavMetadata } from './utils'\nimport { capitalize } from '@utils/functions'\n\n// Types\nimport type { CalendarNavAction } from '../../types'\n\n// Styles\nimport { createCalendarHeaderStyles } from './styles'\n\ninterface Props {\n currentDate: Date\n isDualView: boolean\n position: 'left' | 'right'\n disablePastDates?: boolean\n disableFutureDates?: boolean\n onNavAction: (action: CalendarNavAction) => void\n}\n\nexport const CalendarHeader: React.FC<Props> = props => {\n // Constants\n const { onNavAction, ...rest } = props\n const {\n showPrevButtons,\n showNextButtons,\n hasPrevYearAvailable,\n hasPrevMonthAvailable\n } = getNavMetadata(rest)\n\n // Hooks\n const { styles } = useThemedStyles(props, createCalendarHeaderStyles, {\n applyCommonProps: true,\n pick: p => [p.currentDate, p.isDualView, p.position]\n })\n\n // Functions\n function renderMonthName() {\n const name = format(rest.currentDate, 'MMMM yyyy', { locale: ptBR })\n return capitalize(name)\n }\n\n return (\n <div style={styles.container}>\n {showPrevButtons ? (\n <div style={styles.leftButtonsContainer}>\n <NavButton\n icon=\"chevrons-left\"\n visible={hasPrevMonthAvailable}\n onClick={() => onNavAction('prev-month')}\n />\n\n <NavButton\n icon=\"chevrons-double-left\"\n visible={hasPrevYearAvailable}\n onClick={() => onNavAction('prev-year')}\n />\n </div>\n ) : (\n <div style={styles.leftButtonsContainer} />\n )}\n\n <Typography variant=\"b2\" align=\"center\" fontWeight=\"semibold\">\n {renderMonthName()}\n </Typography>\n\n {showNextButtons ? (\n <div style={styles.rightButtonsContainer}>\n <NavButton\n next\n icon=\"chevrons-double-left\"\n onClick={() => onNavAction('next-year')}\n />\n\n <NavButton\n next\n icon=\"chevrons-left\"\n onClick={() => onNavAction('next-month')}\n />\n </div>\n ) : (\n <div style={styles.rightButtonsContainer} />\n )}\n </div>\n )\n}\n","// External Libraries\nimport { styled } from '@hooks/useThemedStyles/types'\n\ninterface Params {\n selected?: boolean\n}\n\nexport function createTabSwitchItemStyles({ selected }: Params) {\n return styled({\n item: {\n minHeight: '1rem',\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 4,\n background: 'transparent',\n border: 0,\n padding: '0.25rem',\n\n userSelect: 'none',\n whiteSpace: 'nowrap',\n __rules: { '& > p': { zIndex: 1 } }\n },\n\n selectedBg: {\n position: 'absolute',\n inset: 0,\n borderRadius: 6,\n border: '1px solid var(--px-border-primary)'\n }\n })\n}\n","// External Libraries\nimport { motion } from 'framer-motion'\n\n// Components\nimport { Typography } from '@components/commons/toolkit/Typography'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Types\nimport type { PeriodOption } from '../../types'\nimport type { DateTimePeriod } from '../../../../types'\n\n// Styles\nimport { createTabSwitchItemStyles } from './styles'\n\ninterface Props {\n layoutId: string\n selected: boolean\n option: PeriodOption\n onClick: (value: DateTimePeriod) => void\n onBlur?: () => void\n}\n\nexport const PeriodSwitchItem: React.FC<Props> = props => {\n const { option, selected, onClick } = props\n\n const { styles, classes } = useThemedStyles(\n props,\n createTabSwitchItemStyles,\n {\n pick: p => [p.selected]\n }\n )\n\n return (\n <button\n tabIndex={0}\n type=\"button\"\n style={styles.item}\n className={classes.item}\n onBlur={props.onBlur}\n onClick={() => onClick(option.value)}\n >\n {selected ? (\n <motion.div layoutId={props.layoutId} style={styles.selectedBg} />\n ) : null}\n\n <Typography variant=\"b1\" fontSize=\"0.625rem\" fontWeight=\"semibold\">\n {option.label}\n </Typography>\n </button>\n )\n}\n","import type { PeriodOption } from './types'\n\nexport const PERIOD_OPTIONS: PeriodOption[] = [\n { value: 'am', label: 'AM' },\n { value: 'pm', label: 'PM' }\n]\n","// Types\nimport type { PeriodSwitchProps } from './types'\nimport { styled } from '@hooks/useThemedStyles/types'\n\nexport function createTabSwitchStyles(props: PeriodSwitchProps) {\n return styled({\n container: {\n width: 'fit-content',\n\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n color: 'var(--px-text-primary, #4b5563)',\n\n gap: 0,\n __rules: { '& svg': { zIndex: 1 } }\n }\n })\n}\n","// External Libraries\nimport type React from 'react'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Components\nimport { PeriodSwitchItem } from './components/PeriodSwitchItem'\n\n// Utils\nimport { PERIOD_OPTIONS } from './constants'\n\n// Types\nimport type { PeriodSwitchProps } from './types'\n\n// Styles\nimport { createTabSwitchStyles } from './styles'\n\nexport * from './types'\n\nexport const PeriodSwitch: React.FC<PeriodSwitchProps> = props => {\n {\n const { currentValue, onChange } = props\n\n const { styles, classes } = useThemedStyles(props, createTabSwitchStyles, {\n pick: p => [p.currentValue],\n applyCommonProps: true\n })\n\n return (\n <div style={styles.container} className={classes.container}>\n {PERIOD_OPTIONS.map(opt => (\n <PeriodSwitchItem\n option={opt}\n key={String(opt.value)}\n layoutId={props.layoutId}\n selected={currentValue === opt.value}\n onClick={onChange}\n onBlur={props.onBlur}\n />\n ))}\n </div>\n )\n }\n}\n","import type { CalendarViewMode, DateFormat, TimeFormat } from './types'\n\nexport const DEFAULT_TIME_FORMAT: TimeFormat = '24h'\nexport const DEFAULT_VIEW_MODE: CalendarViewMode = 'double'\nexport const DEFAULT_DATE_FORMAT: DateFormat = 'dd/MM/yyyy'\nexport const DEFAULT_DISPLAY_DATE_FORMAT = 'dd MMMM yyyy'\n","import type { DateFormat } from '@components/commons/toolkit/Calendar/types'\nimport type { DateMaskFormat } from '@services/MaskModule/locales/br/masks/DateMask'\n\nexport const DATE_FORMAT_MASK_MAPPER: Record<DateFormat, DateMaskFormat> = {\n 'dd/MM/yyyy': 'DD/MM/YYYY',\n 'MM/dd/yyyy': 'MM/DD/YYYY',\n 'yyyy/MM/dd': 'YYYY/MM/DD'\n}\n","// External Libraries\nimport { parse, setHours, setMinutes } from 'date-fns'\n\n// Utils\nimport {\n DEFAULT_DATE_FORMAT,\n DEFAULT_TIME_FORMAT\n} from '@components/commons/toolkit/Calendar/constants'\n\n// Types\nimport type { DateTimeValues } from '../../../types'\nimport type { CalendarFormatValues } from '@components/commons/toolkit/Calendar/types'\n\nexport function makeInitialDateTime(): DateTimeValues {\n return { time: '', date: '', period: 'am' }\n}\n\ninterface BuildISOParams extends CalendarFormatValues {\n date: string\n time: string\n period?: string\n}\n\nexport function buildISO({\n date,\n time,\n period = 'am',\n timeFormat = DEFAULT_TIME_FORMAT,\n dateFormat = DEFAULT_DATE_FORMAT\n}: BuildISOParams) {\n const baseDate = parse(date, dateFormat, new Date())\n let [hours, minutes] = time.split(':').map(Number)\n\n if (timeFormat === '12h') {\n if (period === 'pm' && hours !== 12) {\n hours += 12\n } else if (period === 'am' && hours === 12) {\n hours = 0\n }\n }\n\n const withTime = setMinutes(setHours(baseDate, hours || 0), minutes || 0)\n\n return withTime.toISOString()\n}\n","// External Libraries\nimport { endOfDay, isAfter, isBefore, startOfDay } from 'date-fns'\n\n// Services\nimport { DateValidator } from '@services/MaskModule/locales/br/validators/DateValidator'\nimport { TimeValidator } from '@services/MaskModule/locales/br/validators/TimeValidator'\n\n// Utils\nimport {\n DEFAULT_DATE_FORMAT,\n DEFAULT_TIME_FORMAT\n} from '@components/commons/toolkit/Calendar/constants'\nimport { DATE_FORMAT_MASK_MAPPER } from '../../../../../constants'\n\n// Types\nimport type {\n DateFormat,\n TimeFormat\n} from '@components/commons/toolkit/Calendar/types'\nimport type { DateTimeValues } from '../../../types'\nimport type { DateMaskFormat } from '@services/MaskModule/locales/br/masks/DateMask'\n\ninterface CheckErrorsParams {\n values: DateTimeValues\n dateFormat?: DateFormat\n timeFormat?: TimeFormat\n disableFutureDates?: boolean\n disablePastDates?: boolean\n}\n\nexport function checkErrors({\n values,\n disablePastDates,\n disableFutureDates,\n timeFormat = DEFAULT_TIME_FORMAT,\n dateFormat = DEFAULT_DATE_FORMAT\n}: CheckErrorsParams): string | null {\n const maskFormat: DateMaskFormat = DATE_FORMAT_MASK_MAPPER[dateFormat]\n\n const dateValidator = new DateValidator({ dateFormat: maskFormat })\n const timeValidator = new TimeValidator({ format: timeFormat })\n\n const isValidDate = dateValidator.validate(values.date)\n const isValidTime = timeValidator.validate(values.time)\n\n let error = ''\n\n if (!isValidTime) error = 'Formato de hora inválida'\n\n if (!isValidDate) error = 'Formato de data inválida'\n\n if (isValidDate) {\n const endOfToday = endOfDay(new Date())\n const startOfToday = startOfDay(new Date())\n\n const dateISO = createISODate(values.date, dateFormat)\n\n if (\n dateISO &&\n disableFutureDates &&\n isAfter(dateISO, endOfToday.toISOString())\n ) {\n error = 'Data futura indisponível'\n }\n\n if (\n dateISO &&\n disablePastDates &&\n isBefore(dateISO, startOfToday.toISOString())\n ) {\n error = 'Data passada indisponível'\n }\n }\n\n return error ?? null\n}\n\nexport function createISODate(value: string, format: DateFormat): Date | null {\n const parts = value.split('/')\n\n if (parts.length !== 3) return null\n\n let day: string\n let month: string\n let year: string\n\n switch (format) {\n case 'dd/MM/yyyy':\n ;[day, month, year] = parts\n break\n\n case 'MM/dd/yyyy':\n ;[month, day, year] = parts\n break\n\n case 'yyyy/MM/dd':\n ;[year, month, day] = parts\n break\n }\n\n return new Date(Number(year), Number(month) - 1, Number(day))\n}\n","// External Libraries\nimport { useEffect, useState } from 'react'\nimport { format, parseISO } from 'date-fns'\n\n// Utils\nimport {\n DEFAULT_DATE_FORMAT,\n DEFAULT_TIME_FORMAT\n} from '@components/commons/toolkit/Calendar/constants'\nimport { DATE_FORMAT_MASK_MAPPER } from '../../../../constants'\nimport { buildISO, checkErrors, makeInitialDateTime } from './utils'\n\n// Types\nimport type { UseDateTimeInputParams } from './types'\nimport type { DateTimePeriod, DateTimeValues } from '../../types'\nimport { Locale, MaskModule, MaskType } from '@services/MaskModule'\nimport { DateMask } from '@services/MaskModule/locales/br/masks/DateMask'\n\nexport function useDateTimeInput({\n value,\n disablePastDates,\n disableFutureDates,\n timeFormat = DEFAULT_TIME_FORMAT,\n dateFormat = DEFAULT_DATE_FORMAT,\n onChange\n}: UseDateTimeInputParams) {\n // States\n const [errorMessage, setErrorMessage] = useState('')\n const [datetimeValue, setDatetimeValue] = useState(makeInitialDateTime)\n\n useEffect(() => {\n if (!value) return\n\n const date = parseISO(value)\n\n let time: string\n let period: 'am' | 'pm' = 'am'\n\n if (timeFormat === '12h') {\n time = format(date, 'hh:mm')\n period = format(date, 'a').toLowerCase() as DateTimePeriod\n } else {\n time = format(date, 'HH:mm')\n }\n\n setDatetimeValue(prev => ({\n ...prev,\n time,\n period,\n date: format(date, dateFormat)\n }))\n }, [value, dateFormat, timeFormat])\n\n function emitChange() {\n const error = checkErrors({\n dateFormat,\n timeFormat,\n disablePastDates,\n disableFutureDates,\n values: datetimeValue\n })\n\n if (error) return setErrorMessage(error)\n\n const iso = buildISO({ ...datetimeValue, dateFormat, timeFormat })\n\n onChange(iso)\n }\n\n function handleDateTimeChange(changes: Partial<DateTimeValues>) {\n const formattedChanges: Partial<DateTimeValues> = {}\n setErrorMessage('')\n\n if (changes.date != null && changes.date !== undefined) {\n const maskDateFormat = DATE_FORMAT_MASK_MAPPER[dateFormat]\n\n const module = new DateMask({ dateFormat: maskDateFormat })\n formattedChanges.date = module\n ? module.format(changes.date)\n : changes.date\n }\n\n if (changes.time != null && changes.time !== undefined) {\n const module =\n timeFormat === '12h'\n ? MaskModule.getMask(Locale.BR, MaskType.TIME_12H)\n : MaskModule.getMask(Locale.BR, MaskType.TIME_24H)\n\n formattedChanges.time = module\n ? module.format(changes.time)\n : changes.time\n }\n\n if (changes.period) {\n formattedChanges.period = changes.period\n }\n\n setDatetimeValue(prev => ({ ...prev, ...formattedChanges }))\n }\n\n return {\n errorMessage,\n datetimeValue,\n emitChange,\n handleDateTimeChange\n }\n}\n","import type { DateTimeInputProps } from './types'\nimport { styled } from '@hooks/useThemedStyles/types'\n\nexport function createDateTimeInputStyles(_props: DateTimeInputProps) {\n return styled({\n container: {\n width: '17.5rem',\n\n display: 'flex',\n flexDirection: 'column',\n gap: '0.25rem'\n },\n\n content: {\n width: '100%',\n height: '2.5rem',\n\n display: 'flex',\n alignItems: 'center',\n columnGap: '0.25rem',\n\n borderWidth: 1,\n borderStyle: 'solid',\n borderRadius: '0.5rem',\n padding: '0.625rem 0.875rem',\n boxShadow: 'var(--px-shadow-default)',\n borderColor: _props.errorMessage\n ? 'var(--px-color-error)'\n : 'var(--px-border-primary)',\n\n __rules: {\n '&:focus-within': {\n outlineOffset: '-1px',\n outline: '2px solid var(--px-color-primary)'\n }\n }\n },\n\n wrapper: {\n width: '100%',\n minWidth: 0,\n display: 'flex',\n alignItems: 'center',\n\n gap: '0.25rem'\n },\n\n divider: {\n border: 0,\n width: '1px',\n height: '1rem',\n\n marginInline: '0.5rem',\n backgroundColor: 'var(--px-border-primary)'\n },\n\n input: {\n flex: 1,\n width: '100%',\n minWidth: 0,\n fontWeight: 500,\n fontSize: '0.875rem',\n lineHeight: '1.5rem',\n fontFamily: 'inherit',\n color: 'var(--px-text-primary)',\n backgroundColor: 'transparent',\n border: 'none',\n padding: 0,\n __rules: {\n '&:disabled': {\n cursor: 'not-allowed'\n },\n '&:focus': {\n outline: 'none'\n },\n '&::placeholder': {\n fontWeight: 400,\n color: 'var(--px-text-secondary)'\n }\n }\n }\n })\n}\n","// External Libraries\nimport type React from 'react'\n\n// Components\nimport { Icon } from '@components/commons/toolkit/Icon'\nimport { PeriodSwitch } from './components/PeriodSwitch'\nimport { ErrorMessage } from '@components/commons/toolkit/ErrorMessage'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\nimport { useDateTimeInput } from './hooks/useDateTimeInput'\n\n// Types\nimport type { DateTimeInputProps } from './types'\n\n// Styles\nimport { createDateTimeInputStyles } from './styles'\n\nexport const DateTimeInput: React.FC<DateTimeInputProps> = props => {\n // Hooks\n const { styles, classes } = useThemedStyles(\n props,\n createDateTimeInputStyles,\n { applyCommonProps: true }\n )\n const { errorMessage, datetimeValue, emitChange, handleDateTimeChange } =\n useDateTimeInput(props)\n\n // Functions\n function handleKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n if (e.key === 'Enter') {\n emitChange()\n }\n }\n\n function handleBlur() {\n emitChange()\n }\n\n return (\n <div style={styles.container}>\n <div style={styles.content} className={classes.content}>\n <div style={styles.wrapper}>\n <Icon\n size=\"sm\"\n name=\"general-calendar\"\n color=\"var(--px-text-disabled)\"\n />\n\n <input\n style={styles.input}\n className={classes.input}\n value={datetimeValue.date}\n placeholder={props.dateFormat}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onChange={e => handleDateTimeChange({ date: e.target.value })}\n />\n </div>\n\n <hr style={styles.divider} />\n\n <div style={styles.wrapper}>\n <Icon\n size=\"sm\"\n name=\"general-clock\"\n color=\"var(--px-text-disabled)\"\n />\n\n <input\n placeholder=\"12:00\"\n style={styles.input}\n className={classes.input}\n value={datetimeValue.time}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onChange={e => handleDateTimeChange({ time: e.target.value })}\n />\n\n {props.timeFormat === '12h' ? (\n <PeriodSwitch\n layoutId={props.layoutId}\n currentValue={datetimeValue.period}\n onBlur={handleBlur}\n onChange={value => handleDateTimeChange({ period: value })}\n />\n ) : null}\n </div>\n </div>\n\n {errorMessage ? <ErrorMessage message={errorMessage} /> : null}\n </div>\n )\n}\n","// External Libraries\nimport { isAfter } from 'date-fns'\n\n// Types\nimport type { UseDateTimeControlParams } from './types'\nimport type { PickedDate } from '@components/commons/toolkit/Calendar/types'\n\ntype DraftPickedDate = {\n start?: string\n end?: string\n}\n\nexport function useDateTimeControl({\n value,\n onChange\n}: UseDateTimeControlParams) {\n function handleDateTimeChange(changes: DraftPickedDate) {\n const draft: DraftPickedDate = {\n start: changes.start ?? value?.start,\n end: changes.end ?? value?.end\n }\n\n if (!draft.start) {\n return\n }\n\n const newValues: PickedDate = {\n start: draft.start,\n end: draft.end\n }\n\n if (newValues.end) {\n const startIsAfterEnd = isAfter(newValues.start, newValues.end)\n\n if (startIsAfterEnd) {\n const tempStart = newValues.start\n const tempEnd = newValues.end\n\n newValues.start = tempEnd\n newValues.end = tempStart\n }\n }\n\n onChange(newValues)\n }\n\n return { handleDateTimeChange }\n}\n","// Types\nimport type { DateTimeControlProps } from './types'\nimport type { StyleMap } from '@hooks/useThemedStyles/types'\n\n// Hooks\nimport { styled } from '@hooks/useThemedStyles/types'\n\nexport function createDateTimeControlStyles(\n _props: DateTimeControlProps\n): StyleMap {\n return styled({\n container: {\n width: '100%',\n\n display: 'flex',\n alignItems: _props.viewMode === 'double' ? 'center' : undefined,\n flexDirection: _props.viewMode === 'single' ? 'column' : 'row',\n\n gap: '0.5rem'\n }\n })\n}\n","// External Libraries\nimport type React from 'react'\n\n// Components\nimport { Icon } from '@components/commons/toolkit/Icon'\nimport { DateTimeInput } from './components/DateTimeInput'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\nimport { useDateTimeControl } from './hooks/useDateTimeControl'\n\n// Utils\nimport { DEFAULT_VIEW_MODE } from '../../constants'\n\n// Types\nimport type { DateTimeControlProps } from './types'\n\n// Styles\nimport { createDateTimeControlStyles } from './styles'\n\nexport const DateTimeControl: React.FC<DateTimeControlProps> = ({\n viewMode = DEFAULT_VIEW_MODE,\n ...props\n}) => {\n // Constants\n const resolvedProps = { viewMode, ...props }\n\n // Hooks\n const { styles } = useThemedStyles(\n resolvedProps,\n createDateTimeControlStyles,\n {\n applyCommonProps: true\n }\n )\n const { handleDateTimeChange } = useDateTimeControl(resolvedProps)\n\n return (\n <div style={styles.container}>\n <DateTimeInput\n layoutId=\"start-date\"\n dateFormat={resolvedProps.dateFormat}\n timeFormat={resolvedProps.timeFormat}\n value={resolvedProps.value?.start ?? ''}\n disablePastDates={resolvedProps.disablePastDates}\n disableFutureDates={resolvedProps.disableFutureDates}\n onChange={start => handleDateTimeChange({ start })}\n />\n\n {resolvedProps.viewMode === 'double' &&\n resolvedProps.selectionMode === 'range' ? (\n <Icon\n size=\"sm\"\n name=\"arrows-arrow-right\"\n color=\"var(--px-text-secondary)\"\n />\n ) : null}\n\n {resolvedProps.selectionMode === 'range' ? (\n <DateTimeInput\n layoutId=\"end-date\"\n value={resolvedProps?.value?.end}\n timeFormat={resolvedProps.timeFormat}\n dateFormat={resolvedProps.dateFormat}\n disablePastDates={resolvedProps.disablePastDates}\n disableFutureDates={resolvedProps.disableFutureDates}\n onChange={end => handleDateTimeChange({ end })}\n />\n ) : null}\n </div>\n )\n}\n","// External Libraries\nimport {\n addDays,\n addYears,\n addMonths,\n endOfWeek,\n endOfMonth,\n startOfWeek,\n startOfMonth,\n eachDayOfInterval\n} from 'date-fns'\nimport { useMemo, useState } from 'react'\n\n// Types\nimport type { CalendarNavAction } from '../types'\n\nexport function useCalendar(initialDate = new Date()) {\n // States\n const [currentDate, setCurrentDate] = useState(initialDate)\n\n // Constants\n const days = useMemo(() => {\n const start = startOfWeek(startOfMonth(currentDate), { weekStartsOn: 0 })\n const end = endOfWeek(endOfMonth(currentDate), { weekStartsOn: 0 })\n let days = eachDayOfInterval({ start, end })\n\n if (days.length < 42) {\n const diff = 42 - days.length\n const last = end\n\n const extraDays = Array.from({ length: diff }, (_, i) =>\n addDays(last, i + 1)\n )\n\n days = [...days, ...extraDays]\n }\n\n return days\n }, [currentDate])\n\n // Functions\n function handleNavAction(action: CalendarNavAction) {\n switch (action) {\n case 'next-month':\n setCurrentDate(prev => addMonths(prev, 1))\n break\n\n case 'prev-month':\n setCurrentDate(prev => addMonths(prev, -1))\n break\n\n case 'next-year':\n setCurrentDate(prev => addYears(prev, 1))\n break\n\n case 'prev-year':\n setCurrentDate(prev => addYears(prev, -1))\n break\n }\n }\n\n return { currentDate, days, handleNavAction, setCurrentDate }\n}\n","import { styled } from '@hooks/useThemedStyles/types'\n\nexport function createCalendarStyles() {\n return styled({\n container: {\n display: 'flex',\n flexDirection: 'column'\n },\n dateTimeControlContent: {\n display: 'flex',\n\n padding: '0.75rem 1rem',\n paddingBottom: '0'\n },\n monthsContainer: {\n display: 'flex',\n flexDirection: 'row',\n\n alignItems: 'center'\n },\n monthContainer: {\n display: 'flex',\n flexDirection: 'column',\n\n gap: '0.75rem',\n padding: '0.75rem 1rem'\n }\n })\n}\n","// External Libraries\nimport type React from 'react'\nimport { useEffect } from 'react'\nimport { addMonths, isAfter, isSameDay, parseISO } from 'date-fns'\n\n// Components\nimport { CalendarMonth } from './components/CalendarMonth'\nimport { CalendarHeader } from './components/CalendarHeader'\nimport { DateTimeControl } from './components/DateTimeControl'\n\n// Hooks\nimport { useCalendar } from './hooks/useCalendar'\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Utils\nimport {\n DEFAULT_VIEW_MODE,\n DEFAULT_DATE_FORMAT,\n DEFAULT_TIME_FORMAT\n} from './constants'\n\n// Types\nimport type { CalendarProps } from './types'\n\n// Styles\nimport { createCalendarStyles } from './styles'\n\nexport const Calendar: React.FC<CalendarProps> = ({\n viewMode = DEFAULT_VIEW_MODE,\n dateFormat = DEFAULT_DATE_FORMAT,\n timeFormat = DEFAULT_TIME_FORMAT,\n ...props\n}) => {\n const resolvedProps = { timeFormat, dateFormat, viewMode, ...props }\n\n // Hooks\n const mainCalendar = useCalendar()\n const secondaryCalendar = useCalendar(addMonths(mainCalendar.currentDate, 1))\n const { styles } = useThemedStyles(resolvedProps, createCalendarStyles, {\n applyCommonProps: true\n })\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n secondaryCalendar.setCurrentDate(addMonths(mainCalendar.currentDate, 1))\n }, [mainCalendar.currentDate])\n\n // Functions\n function handleSelect(day: Date) {\n const { value, selectionMode, onChange } = resolvedProps\n\n if (selectionMode === 'single') {\n onChange({ start: day.toISOString() })\n } else {\n const start = value?.start ? parseISO(value.start) : null\n const end = value?.end ? parseISO(value.end) : null\n\n if (!start || (start && end)) {\n onChange({ start: day.toISOString(), end: undefined })\n } else if (start && !end) {\n const [from, to] =\n isAfter(day, start) || isSameDay(day, start)\n ? [start, day]\n : [day, start]\n\n onChange({ start: from.toISOString(), end: to.toISOString() })\n }\n }\n }\n\n return (\n <div style={styles.container}>\n {resolvedProps.isDateTimePicker ? (\n <div style={styles.dateTimeControlContent}>\n <DateTimeControl {...resolvedProps} />\n </div>\n ) : null}\n\n <div style={styles.monthsContainer}>\n <div style={styles.monthContainer}>\n <CalendarHeader\n position=\"left\"\n currentDate={mainCalendar.currentDate}\n isDualView={resolvedProps.viewMode === 'double'}\n disablePastDates={resolvedProps.disablePastDates}\n disableFutureDates={resolvedProps.disableFutureDates}\n onNavAction={mainCalendar.handleNavAction}\n />\n\n <CalendarMonth\n days={mainCalendar.days}\n selection={resolvedProps.value}\n disablePastDates={resolvedProps.disablePastDates}\n disableFutureDates={resolvedProps.disableFutureDates}\n onDayClick={handleSelect}\n />\n </div>\n\n {resolvedProps.viewMode === 'double' ? (\n <div style={styles.monthContainer}>\n <CalendarHeader\n isDualView\n position=\"right\"\n currentDate={secondaryCalendar.currentDate}\n disablePastDates={resolvedProps.disablePastDates}\n disableFutureDates={resolvedProps.disableFutureDates}\n onNavAction={mainCalendar.handleNavAction}\n />\n\n <CalendarMonth\n days={secondaryCalendar.days}\n selection={resolvedProps.value}\n disablePastDates={resolvedProps.disablePastDates}\n disableFutureDates={resolvedProps.disableFutureDates}\n onDayClick={handleSelect}\n />\n </div>\n ) : null}\n </div>\n </div>\n )\n}\n","import type { TimeFormat } from '../../types'\n\ninterface BuildDisplayFormatParams {\n displayDateFormat: string\n isDateTimePicker: boolean\n timeFormat: TimeFormat\n}\n\nfunction hasTimeTokens(formatStr: string) {\n return /(H{1,2}|h{1,2}|m{1,2}|a)/.test(formatStr)\n}\n\nfunction normalizeTimeFormat(formatStr: string, timeFormat: '12h' | '24h') {\n if (timeFormat === '24h') {\n return formatStr\n .replace(/h{1,2}/g, match => (match.length === 2 ? 'HH' : 'H'))\n .replace(/\\s*a/g, '')\n }\n\n return formatStr.replace(/H{1,2}/g, match =>\n match.length === 2 ? 'hh' : 'h'\n )\n}\n\nfunction getDefaultTimeFormat(timeFormat: '12h' | '24h') {\n return timeFormat === '24h' ? 'HH:mm' : 'hh:mm a'\n}\n\nexport function buildDisplayFormat({\n displayDateFormat,\n isDateTimePicker,\n timeFormat\n}: BuildDisplayFormatParams) {\n const formatHasTime = hasTimeTokens(displayDateFormat)\n\n if (!isDateTimePicker) {\n return formatHasTime\n ? displayDateFormat.replace(/\\s*(H{1,2}|h{1,2}|m{1,2}|a|:)+/g, '')\n : displayDateFormat\n }\n\n if (formatHasTime) {\n return normalizeTimeFormat(displayDateFormat, timeFormat)\n }\n\n const timeFormatStr = getDefaultTimeFormat(timeFormat)\n return `${displayDateFormat} ${timeFormatStr}`\n}\n","import { styled } from '@hooks/useThemedStyles/types'\nimport type { DatePickerTriggerProps } from './types'\n\nexport function createDatePickerTriggerStyles(props: DatePickerTriggerProps) {\n return styled({\n container: {\n width: '100%',\n\n display: 'flex',\n flexDirection: 'column',\n\n gap: '0.5rem',\n\n opacity: props.disabled ? 0.5 : 1,\n cursor: props.disabled ? 'not-allowed' : 'pointer'\n },\n button: {\n width: '100%',\n\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n\n gap: '0.5rem',\n borderRadius: '0.5rem',\n padding: '0.625rem 0.875rem',\n\n border: props.errorMessage\n ? '1px solid var(--px-color-error)'\n : '1px solid var(--px-border-primary)',\n\n __rules: {\n '&:hover': {\n boxShadow: 'var(--px-shadow-default)',\n borderColor: 'var(--px-color-primary)'\n },\n '&:focus-within': {\n outlineOffset: '-1px',\n outline: props.errorMessage\n ? '2px solid var(--px-color-error)'\n : `2px solid var(--px-color-primary)`\n }\n }\n },\n buttonContent: {\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem'\n }\n })\n}\n","// External Libraries\nimport { format } from 'date-fns'\nimport { forwardRef, useId } from 'react'\n\n// Components\nimport { Icon } from '@components/commons/toolkit/Icon'\nimport { Label } from '@components/commons/toolkit/Label'\nimport { Typography } from '@components/commons/toolkit/Typography'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Utils\nimport { buildDisplayFormat } from './utils'\nimport {\n DEFAULT_TIME_FORMAT,\n DEFAULT_DISPLAY_DATE_FORMAT\n} from '@components/commons/toolkit/Calendar/constants'\n\n// Types\nimport type { DatePickerTriggerProps } from './types'\n\n// Styles\nimport { createDatePickerTriggerStyles } from './styles'\nimport { ptBR } from 'date-fns/locale'\n\nexport const DatePickerTrigger = forwardRef<\n HTMLButtonElement,\n DatePickerTriggerProps\n>(function DatePickerTrigger(\n {\n timeFormat = DEFAULT_TIME_FORMAT,\n displayDateFormat = DEFAULT_DISPLAY_DATE_FORMAT,\n ...props\n },\n ref\n) {\n // Hooks\n const inputId = useId()\n const { styles, classes } = useThemedStyles(\n props,\n createDatePickerTriggerStyles,\n {\n pick: p => [p.disabled, p.errorMessage],\n applyCommonProps: true,\n commonSlot: 'container'\n }\n )\n\n // Constants\n const { label, value, disabled, required, placeholder, onClick } = props\n const hasValue = !!value?.start\n\n // Functions\n function renderDate() {\n if (!hasValue) return placeholder ?? 'Selecione uma data'\n\n const { start, end } = value\n\n const finalFormat = buildDisplayFormat({\n timeFormat,\n displayDateFormat,\n isDateTimePicker: !!props.isDateTimePicker\n })\n\n const startDate = format(start, finalFormat, { locale: ptBR })\n const endDate = end ? format(end, finalFormat, { locale: ptBR }) : ''\n\n return `${startDate}${endDate ? ` - ${endDate}` : ''}`\n }\n\n return (\n <div style={styles.container}>\n <Label\n label={label}\n htmlFor={inputId}\n required={required}\n requiredColor=\"var(--color-error)\"\n />\n\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n style={styles.button}\n aria-labelledby={inputId}\n aria-expanded={props.ariaExpanded}\n className={classes.button}\n onClick={onClick}\n >\n <div style={styles.buttonContent}>\n <Icon\n size=\"sm\"\n name=\"general-calendar\"\n color=\"var(--px-text-primary)\"\n />\n\n <Typography variant=\"b1\" className=\"font-normal\">\n {renderDate()}\n </Typography>\n </div>\n\n <Icon\n size=\"sm\"\n color=\"var(--px-text-primary)\"\n name={props.ariaExpanded ? 'chevrons-up' : 'chevrons-down'}\n />\n </button>\n\n {props.errorMessage ? (\n <Typography\n variant=\"b2\"\n fontSize=\"0.75rem\"\n fontWeight=\"regular\"\n color=\"var(--px-color-error)\"\n >\n {props.errorMessage}\n </Typography>\n ) : null}\n </div>\n )\n})\n","// External Libraries\nimport { useState } from 'react'\n\n// Types\nimport type { DatePickerProps } from '../types'\nimport type { PickedDate } from '@components/commons/toolkit/Calendar/types'\n\nexport function useDatePicker(params: DatePickerProps) {\n // States\n const [isOpen, setOpen] = useState(false)\n const [selectedDate, setSelectedDate] = useState<PickedDate>()\n\n // Functions\n function toggleDialog(status: boolean) {\n if (status) setSelectedDate(params.value)\n\n setOpen(status)\n }\n\n function handleDateChange(value: PickedDate) {\n setSelectedDate(value)\n }\n\n function handleConfirmClick() {\n if (!selectedDate) return\n\n setOpen(false)\n params.onChange(selectedDate)\n }\n\n return {\n isOpen,\n selectedDate,\n toggleDialog,\n handleDateChange,\n handleConfirmClick\n }\n}\n","import { styled } from '@hooks/useThemedStyles/types'\nimport type { DatePickerProps } from './types'\n\nexport function createDatePickerStyles(props: DatePickerProps) {\n return styled({\n container: {\n width: '100%'\n },\n\n divider: {\n border: 0,\n display: 'flex',\n marginBlock: '0.1rem',\n borderTop: '1px solid var(--px-border-primary)'\n },\n\n buttonsContainer: {\n width: '100%',\n display: 'flex',\n\n alignItems: 'center',\n justifyContent: props.viewMode === 'single' ? 'center' : 'flex-end',\n\n gap: '0.75rem',\n padding: '0.5rem 1rem'\n }\n })\n}\n","import type { CalendarProps } from '@components/commons/toolkit/Calendar/types'\n\nexport * from '@components/commons/toolkit/Calendar/types'\n\nexport interface DatePickerProps extends CalendarProps {\n label: string\n\n required?: boolean\n disabled?: boolean\n placeholder?: string\n errorMessage?: string\n scrollContainerId: string\n}\n","// External Libraries\nimport type React from 'react'\n\n// Components\nimport { Button } from '@components/commons/buttons/Button'\nimport { Calendar } from '@components/commons/toolkit/Calendar'\nimport { DatePickerTrigger } from './components/DatePickerTrigger'\nimport { BasePopover } from '@components/commons/structure/BasePopover'\n\n// Hooks\nimport { useDatePicker } from './hooks/useDatePicker'\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Types\nimport type { DatePickerProps } from './types'\nimport type { PopoverTriggerRenderProps } from '@components/commons/toolkit/Popover/types'\n\n// Styles\nimport { createDatePickerStyles } from './styles'\n\nexport * as DatePickerTypes from './types'\n\nexport const DatePicker: React.FC<DatePickerProps> = props => {\n // Hooks\n const {\n isOpen,\n selectedDate,\n toggleDialog,\n handleDateChange,\n handleConfirmClick\n } = useDatePicker(props)\n const { styles } = useThemedStyles(props, createDatePickerStyles, {\n applyCommonProps: true,\n commonSlot: 'container'\n })\n\n // Constants\n const isSingleMode = props.viewMode === 'single'\n\n // Functions\n function renderTrigger({\n ref,\n ariaExpanded,\n onClick\n }: PopoverTriggerRenderProps) {\n return (\n <DatePickerTrigger\n {...props}\n ref={ref as any}\n ariaExpanded={ariaExpanded}\n onClick={onClick}\n />\n )\n }\n\n return (\n <div style={styles.container}>\n <BasePopover\n open={isOpen}\n maxWidth=\"fit-content\"\n minWidth=\"fit-content\"\n maxHeight=\"fit-content\"\n trigger={renderTrigger}\n onOpenChange={toggleDialog}\n floatingOptions={{\n strategy: 'fixed',\n placement: 'bottom-start',\n scrollContainerId: props.scrollContainerId\n }}\n >\n <Calendar\n {...props}\n value={selectedDate}\n selectionMode={props.selectionMode ?? 'range'}\n onChange={handleDateChange}\n />\n\n {isSingleMode ? <hr style={styles.divider} /> : null}\n\n <div style={styles.buttonsContainer}>\n <Button\n size=\"sm\"\n type=\"button\"\n label=\"Cancelar\"\n variant=\"outlined\"\n fullWidth={isSingleMode}\n onClick={() => toggleDialog(false)}\n />\n\n <Button\n type=\"button\"\n label=\"Aplicar\"\n variant=\"filled\"\n fullWidth={isSingleMode}\n onClick={handleConfirmClick}\n />\n </div>\n </BasePopover>\n </div>\n )\n}\n"],"mappings":"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"}
|
|
@@ -16,10 +16,10 @@ function createIconButtonStyles(props) {
|
|
|
16
16
|
backgroundColor: getBackgroundColor(variant, backgroundColor),
|
|
17
17
|
boxShadow: "var(--px-shadow-xs)",
|
|
18
18
|
__rules: {
|
|
19
|
-
"&:hover": { opacity: "0.85 !important" },
|
|
19
|
+
"&:not(:disabled):hover": { opacity: "0.85 !important" },
|
|
20
20
|
"&:disabled": {
|
|
21
|
-
opacity: "0.5",
|
|
22
|
-
cursor: "not-allowed"
|
|
21
|
+
opacity: "0.5 !important",
|
|
22
|
+
cursor: "not-allowed !important"
|
|
23
23
|
},
|
|
24
24
|
"&:focus": {
|
|
25
25
|
outlineOffset: "2px",
|
|
@@ -83,11 +83,11 @@ const IconButton = (props) => {
|
|
|
83
83
|
commonSlot: "button"
|
|
84
84
|
});
|
|
85
85
|
return /* @__PURE__ */ jsx("button", {
|
|
86
|
-
disabled,
|
|
87
|
-
"aria-busy": props.isLoading,
|
|
88
86
|
type: "button",
|
|
89
|
-
|
|
87
|
+
disabled,
|
|
90
88
|
style: styles.button,
|
|
89
|
+
className: classes.button,
|
|
90
|
+
"aria-busy": props.isLoading,
|
|
91
91
|
onClick: props.onClick,
|
|
92
92
|
children: props.icon
|
|
93
93
|
});
|
|
@@ -95,4 +95,4 @@ const IconButton = (props) => {
|
|
|
95
95
|
|
|
96
96
|
//#endregion
|
|
97
97
|
export { IconButton as t };
|
|
98
|
-
//# sourceMappingURL=IconButton-
|
|
98
|
+
//# sourceMappingURL=IconButton-YJZyDEN9.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IconButton-YJZyDEN9.js","names":["IconButton: React.FC<IconButtonProps>"],"sources":["../src/components/commons/buttons/IconButton/styles.ts","../src/components/commons/buttons/IconButton/index.tsx"],"sourcesContent":["// Types\nimport type {\n IconButtonSize,\n IconButtonProps,\n IconButtonVariant\n} from './types'\nimport { styled } from '@hooks/useThemedStyles/types'\n\nexport function createIconButtonStyles(props: IconButtonProps) {\n const {\n variant = 'outlined',\n size = 'md',\n borderColor,\n backgroundColor,\n rounded = 'var(--px-radius-lg)'\n } = props\n\n return styled({\n button: {\n ...getSize(size),\n\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n\n cursor: 'pointer',\n userSelect: 'none',\n\n borderRadius: rounded,\n border: getBorder(variant, borderColor),\n backgroundColor: getBackgroundColor(variant, backgroundColor),\n boxShadow: 'var(--px-shadow-xs)',\n\n __rules: {\n '&:not(:disabled):hover': {\n opacity: '0.85 !important'\n },\n\n '&:disabled': {\n opacity: '0.5 !important',\n cursor: 'not-allowed !important'\n },\n\n '&:focus': {\n outlineOffset: '2px',\n outline: '2px solid var(--px-color-primary) !important'\n }\n }\n }\n })\n}\n\nfunction getSize(size: IconButtonSize) {\n switch (size) {\n case 'lg':\n return { minHeight: '3.25rem', minWidth: '3.25rem' }\n case 'md':\n return { minHeight: '2.75rem', minWidth: '2.75rem' }\n case 'sm':\n return { minHeight: '2.25rem', minWidth: '2.25rem' }\n case 'xs':\n return { minHeight: '1.75rem', minWidth: '1.75rem' }\n default:\n return { minHeight: size, minWidth: size }\n }\n}\n\nfunction getBackgroundColor(\n variant?: IconButtonVariant,\n color?: string\n): string {\n if (color) return color\n\n if (variant === 'filled') return 'var(--px-btn-filled-bg)'\n\n if (variant === 'outlined') return 'transparent'\n\n if (variant === 'ghost') return 'transparent'\n\n return 'var(--px-btn-outlined-bg)'\n}\n\nfunction getBorder(variant?: IconButtonVariant, color?: string): string {\n if (color) return `1px solid ${color}`\n\n if (variant === 'filled') return '1px solid var(--px-btn-filled-bg)'\n\n if (variant === 'outlined') return '1px solid var(--px-border-primary)'\n\n if (variant === 'ghost') return 'none'\n\n return '1px solid var(--px-color-primary)'\n}\n","// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Types\nimport type { IconButtonProps } from './types'\n\n// Styles\nimport { createIconButtonStyles } from './styles'\n\nexport const IconButton: React.FC<IconButtonProps> = props => {\n // Constants\n const disabled = props.isDisabled || props.isLoading\n\n // Hooks\n const { styles, classes } = useThemedStyles(props, createIconButtonStyles, {\n pick: p => [p.size, p.variant, p.borderColor, p.backgroundColor],\n override: props.styles,\n applyCommonProps: true,\n commonSlot: 'button'\n })\n\n return (\n <button\n type=\"button\"\n disabled={disabled}\n style={styles.button}\n className={classes.button}\n aria-busy={props.isLoading}\n onClick={props.onClick}\n >\n {props.icon}\n </button>\n )\n}\n"],"mappings":";;;;AAQA,SAAgB,uBAAuB,OAAwB;CAC7D,MAAM,EACJ,UAAU,YACV,OAAO,MACP,aACA,iBACA,UAAU,0BACR;AAEJ,QAAO,OAAO,EACZ,QAAQ;EACN,GAAG,QAAQ,KAAK;EAEhB,SAAS;EACT,YAAY;EACZ,gBAAgB;EAEhB,QAAQ;EACR,YAAY;EAEZ,cAAc;EACd,QAAQ,UAAU,SAAS,YAAY;EACvC,iBAAiB,mBAAmB,SAAS,gBAAgB;EAC7D,WAAW;EAEX,SAAS;GACP,0BAA0B,EACxB,SAAS,mBACV;GAED,cAAc;IACZ,SAAS;IACT,QAAQ;IACT;GAED,WAAW;IACT,eAAe;IACf,SAAS;IACV;GACF;EACF,EACF,CAAC;;AAGJ,SAAS,QAAQ,MAAsB;AACrC,SAAQ,MAAR;EACE,KAAK,KACH,QAAO;GAAE,WAAW;GAAW,UAAU;GAAW;EACtD,KAAK,KACH,QAAO;GAAE,WAAW;GAAW,UAAU;GAAW;EACtD,KAAK,KACH,QAAO;GAAE,WAAW;GAAW,UAAU;GAAW;EACtD,KAAK,KACH,QAAO;GAAE,WAAW;GAAW,UAAU;GAAW;EACtD,QACE,QAAO;GAAE,WAAW;GAAM,UAAU;GAAM;;;AAIhD,SAAS,mBACP,SACA,OACQ;AACR,KAAI,MAAO,QAAO;AAElB,KAAI,YAAY,SAAU,QAAO;AAEjC,KAAI,YAAY,WAAY,QAAO;AAEnC,KAAI,YAAY,QAAS,QAAO;AAEhC,QAAO;;AAGT,SAAS,UAAU,SAA6B,OAAwB;AACtE,KAAI,MAAO,QAAO,aAAa;AAE/B,KAAI,YAAY,SAAU,QAAO;AAEjC,KAAI,YAAY,WAAY,QAAO;AAEnC,KAAI,YAAY,QAAS,QAAO;AAEhC,QAAO;;;;;AClFT,MAAaA,cAAwC,UAAS;CAE5D,MAAM,WAAW,MAAM,cAAc,MAAM;CAG3C,MAAM,EAAE,QAAQ,YAAY,gBAAgB,OAAO,wBAAwB;EACzE,OAAM,MAAK;GAAC,EAAE;GAAM,EAAE;GAAS,EAAE;GAAa,EAAE;GAAgB;EAChE,UAAU,MAAM;EAChB,kBAAkB;EAClB,YAAY;EACb,CAAC;AAEF,QACE,oBAAC;EACC,MAAK;EACK;EACV,OAAO,OAAO;EACd,WAAW,QAAQ;EACnB,aAAW,MAAM;EACjB,SAAS,MAAM;YAEd,MAAM;GACA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Loader-
|
|
1
|
+
{"version":3,"file":"Loader-1l1G52jQ.js","names":["Loader: React.FC<LoaderProps>"],"sources":["../src/utils/animations/spiner.ts","../src/components/commons/toolkit/Loader/constants.ts","../src/components/commons/toolkit/Loader/utils.ts","../src/components/commons/toolkit/Loader/styles.ts","../src/components/commons/toolkit/Loader/index.tsx"],"sourcesContent":["export const SPINNER_ANIMATION = {\n animate: { rotate: 360 },\n transition: {\n repeat: Infinity,\n duration: 1,\n ease: 'linear'\n }\n}\n","const DEFAULT_SIZE = '20px'\nconst DEFAULT_THICKNESS = '2px'\n\nconst DEFAULT_COLOR = 'white'\nconst DEFAULT_EMPTY_COLOR = 'transparent'\n\nexport { DEFAULT_SIZE, DEFAULT_THICKNESS, DEFAULT_COLOR, DEFAULT_EMPTY_COLOR }\n","// Utils\nimport { DEFAULT_THICKNESS, DEFAULT_EMPTY_COLOR } from './constants'\n\n// Types\nimport type { LoaderProps } from './types'\n\nexport function getBorder(props: LoaderProps) {\n const thickness = props.thickness || DEFAULT_THICKNESS\n const emptyColor = props.emptyColor || DEFAULT_EMPTY_COLOR\n\n return `${thickness} solid ${emptyColor}`\n}\n","// Types\nimport { styled, type StyleMap } from '@hooks/useThemedStyles/types'\nimport type { LoaderProps } from './types'\nimport { getBorder } from './utils'\nimport { DEFAULT_COLOR, DEFAULT_SIZE } from './constants'\n\nexport function createButtonLoaderStyles(props: LoaderProps): StyleMap {\n return styled({\n container: {\n display: ' inline-block',\n\n width: props.size || DEFAULT_SIZE,\n height: props.size || DEFAULT_SIZE,\n\n borderRadius: '50%',\n border: getBorder(props),\n borderLeftColor: props.color || DEFAULT_COLOR\n }\n })\n}\n","// External Libraries\nimport type React from 'react'\nimport { motion } from 'framer-motion'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Utils\nimport { SPINNER_ANIMATION } from '@utils/animations'\n\n// Types\nimport type { LoaderProps } from './types'\n\n// Styles\nimport { createButtonLoaderStyles } from './styles'\n\nexport const Loader: React.FC<LoaderProps> = props => {\n // Hooks\n const { styles } = useThemedStyles(props, createButtonLoaderStyles, {})\n\n return (\n <motion.div\n role=\"status\"\n aria-label=\"Loading\"\n style={styles.container}\n {...SPINNER_ANIMATION}\n />\n )\n}\n"],"mappings":";;;;;AAAA,MAAa,oBAAoB;CAC/B,SAAS,EAAE,QAAQ,KAAK;CACxB,YAAY;EACV,QAAQ;EACR,UAAU;EACV,MAAM;EACP;CACF;;;;ACPD,MAAM,eAAe;AACrB,MAAM,oBAAoB;AAE1B,MAAM,gBAAgB;AACtB,MAAM,sBAAsB;;;;ACE5B,SAAgB,UAAU,OAAoB;AAI5C,QAAO,GAHW,MAAM,aAAa,kBAGjB,SAFD,MAAM,cAAc;;;;;ACFzC,SAAgB,yBAAyB,OAA8B;AACrE,QAAO,OAAO,EACZ,WAAW;EACT,SAAS;EAET,OAAO,MAAM,QAAQ;EACrB,QAAQ,MAAM,QAAQ;EAEtB,cAAc;EACd,QAAQ,UAAU,MAAM;EACxB,iBAAiB,MAAM,SAAS;EACjC,EACF,CAAC;;;;;ACFJ,MAAaA,UAAgC,UAAS;CAEpD,MAAM,EAAE,WAAW,gBAAgB,OAAO,0BAA0B,EAAE,CAAC;AAEvE,QACE,oBAAC,OAAO;EACN,MAAK;EACL,cAAW;EACX,OAAO,OAAO;EACd,GAAI;GACJ"}
|