@aspprev/versi-ds 0.1.0 → 0.2.0
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/README.md +116 -396
- package/dist/charts.js +1 -1
- package/dist/{chunk-OWXG2A4N.js → chunk-ATWH3MA6.js} +1 -1
- package/dist/chunk-ATWH3MA6.js.map +1 -0
- package/dist/{chunk-CWIPMGCA.js → chunk-ET2BGHTO.js} +2 -1
- package/dist/chunk-ET2BGHTO.js.map +1 -0
- package/dist/{chunk-BY4HJZFJ.js → chunk-FR5W52XU.js} +283 -23
- package/dist/chunk-FR5W52XU.js.map +1 -0
- package/dist/chunk-H4BBKKRZ.js +380 -0
- package/dist/chunk-H4BBKKRZ.js.map +1 -0
- package/dist/{chunk-2ACDV5D5.js → chunk-JSPXVXUY.js} +1 -1
- package/dist/chunk-JSPXVXUY.js.map +1 -0
- package/dist/{chunk-OPUUOVCL.js → chunk-PIXRKI25.js} +84 -10
- package/dist/chunk-PIXRKI25.js.map +1 -0
- package/dist/{chunk-6MXHE5MD.js → chunk-V66QL3TD.js} +1 -1
- package/dist/chunk-V66QL3TD.js.map +1 -0
- package/dist/chunk-YCW3REQK.js +3102 -0
- package/dist/chunk-YCW3REQK.js.map +1 -0
- package/dist/core.d.ts +23 -4
- package/dist/core.js +12 -6
- package/dist/countries.js +1 -1
- package/dist/documents.d.ts +81 -1
- package/dist/documents.js +14 -4
- package/dist/forms.d.ts +26 -2
- package/dist/forms.js +5 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +30 -12
- package/dist/manifest.json +9 -9
- package/dist/overlays.js +1 -1
- package/dist/styles.css +1 -1
- package/package.json +27 -19
- package/dist/chunk-2ACDV5D5.js.map +0 -1
- package/dist/chunk-6MXHE5MD.js.map +0 -1
- package/dist/chunk-A3PA5H7L.js +0 -3099
- package/dist/chunk-A3PA5H7L.js.map +0 -1
- package/dist/chunk-BY4HJZFJ.js.map +0 -1
- package/dist/chunk-CWIPMGCA.js.map +0 -1
- package/dist/chunk-OPUUOVCL.js.map +0 -1
- package/dist/chunk-OWXG2A4N.js.map +0 -1
- package/dist/chunk-XGWGBD7X.js +0 -45
- package/dist/chunk-XGWGBD7X.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useBreakpoint.tsx","../src/components/tooltip/Tooltip.tsx","../src/components/tooltip/calculate-tooltip-position.ts","../src/components/tooltip/use-tooltip-relationship.ts","../src/utils/accessibility.ts","../src/utils/floating-layer.ts"],"sourcesContent":["\"use client\";\n\nimport { useState, useEffect } from \"react\";\n\nexport const breakpoints = {\n mobile: 640,\n tablet: 1024,\n desktop: 1440,\n tv: 1920,\n};\n\ntype Breakpoint = keyof typeof breakpoints;\n\nexport const useBreakpoint = (): Breakpoint => {\n const getBreakpoint = (width: number): Breakpoint => {\n const entries = Object.entries(breakpoints) as [Breakpoint, number][];\n return entries.reduce<Breakpoint>(\n (prev, [key, minWidth]) => (width >= minWidth ? key : prev),\n \"mobile\"\n );\n };\n\n const [currentBreakpoint, setCurrentBreakpoint] =\n useState<Breakpoint>(\"mobile\");\n\n useEffect(() => {\n const handleResize = () => {\n const newBreakpoint = getBreakpoint(window.innerWidth);\n setCurrentBreakpoint(newBreakpoint);\n };\n\n handleResize();\n\n window.addEventListener(\"resize\", handleResize);\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n\n return currentBreakpoint;\n};\n","\"use client\";\nimport { useBreakpoint } from \"../../hooks/useBreakpoint\";\nimport React, {\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {\n calculateTooltipPosition,\n type TooltipPosition,\n} from \"./calculate-tooltip-position\";\nimport { useTooltipRelationship } from \"./use-tooltip-relationship\";\nimport { getFloatingLayerClass } from \"../../utils/floating-layer\";\n\nexport type TooltipProps = {\n targetRef: React.RefObject<HTMLElement | null>;\n content: React.ReactNode;\n visible: boolean;\n preferredPosition?: \"top\" | \"bottom\" | \"left\" | \"right\";\n};\n\nconst Tooltip: React.FC<TooltipProps> = ({\n targetRef,\n content,\n visible,\n preferredPosition = \"bottom\",\n}) => {\n const tooltipRef = useRef<HTMLDivElement>(null);\n const arrowRef = useRef<HTMLDivElement>(null);\n const tooltipId = useId();\n const [coords, setCoords] = useState({ top: 0, left: 0 });\n const [finalPosition, setFinalPosition] =\n useState<TooltipPosition>(preferredPosition);\n const breakpoint = useBreakpoint();\n const isMobile = breakpoint === \"mobile\";\n\n useTooltipRelationship(targetRef, tooltipId, visible);\n\n const updatePosition = useCallback(() => {\n if (!targetRef.current || !tooltipRef.current) return;\n\n const target = targetRef.current.getBoundingClientRect();\n const tooltip = tooltipRef.current.getBoundingClientRect();\n\n if (isMobile) {\n setCoords({\n top: Math.max(8, (window.innerHeight - tooltip.height) / 2),\n left: Math.max(8, (window.innerWidth - tooltip.width) / 2),\n });\n setFinalPosition(\"bottom\");\n return;\n }\n\n const nextPosition = calculateTooltipPosition({\n target,\n tooltip,\n preferred: preferredPosition,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n });\n setCoords({ top: nextPosition.top, left: nextPosition.left });\n setFinalPosition(nextPosition.position);\n }, [isMobile, preferredPosition, targetRef]);\n\n useLayoutEffect(() => {\n if (!visible) return;\n updatePosition();\n\n window.addEventListener(\"resize\", updatePosition);\n window.addEventListener(\"scroll\", updatePosition, true);\n\n return () => {\n window.removeEventListener(\"resize\", updatePosition);\n window.removeEventListener(\"scroll\", updatePosition, true);\n };\n }, [content, updatePosition, visible]);\n\n useLayoutEffect(() => {\n if (\n !arrowRef.current ||\n isMobile ||\n !targetRef.current ||\n !tooltipRef.current\n ) {\n return;\n }\n\n const arrow = arrowRef.current;\n const tooltip = tooltipRef.current;\n const rect = targetRef.current.getBoundingClientRect();\n const horizontalCenter = Math.min(\n Math.max(rect.left + rect.width / 2 - coords.left - 6, 8),\n Math.max(8, tooltip.offsetWidth - 20),\n );\n const verticalCenter = Math.min(\n Math.max(rect.top + rect.height / 2 - coords.top - 6, 8),\n Math.max(8, tooltip.offsetHeight - 20),\n );\n\n arrow.style.top = \"\";\n arrow.style.bottom = \"\";\n arrow.style.left = \"\";\n arrow.style.right = \"\";\n\n if (finalPosition === \"bottom\") {\n arrow.style.top = \"-6px\";\n arrow.style.left = `${horizontalCenter}px`;\n return;\n }\n\n if (finalPosition === \"top\") {\n arrow.style.bottom = \"-6px\";\n arrow.style.left = `${horizontalCenter}px`;\n return;\n }\n\n if (finalPosition === \"right\") {\n arrow.style.left = \"-6px\";\n arrow.style.top = `${verticalCenter}px`;\n return;\n }\n\n arrow.style.right = \"-6px\";\n arrow.style.top = `${verticalCenter}px`;\n }, [coords, finalPosition, isMobile, targetRef, visible]);\n\n useEffect(() => {\n if (!visible) return;\n\n tooltipRef.current?.animate([{ opacity: 0 }, { opacity: 1 }], {\n duration: 150,\n easing: \"ease-out\",\n });\n }, [visible]);\n\n if (typeof window === \"undefined\") return null;\n\n return ReactDOM.createPortal(\n visible ? (\n <div\n id={tooltipId}\n ref={tooltipRef}\n role=\"tooltip\"\n style={{ top: coords.top, left: coords.left }}\n className={`fixed ${getFloatingLayerClass(targetRef.current, \"tooltip\")} max-h-[calc(100dvh-1rem)] overflow-y-auto overscroll-contain break-words whitespace-normal rounded-sm bg-surface-tooltip px-3 py-2 text-sm text-content-inverse shadow-lg ${\n isMobile ? \"w-[90vw] max-w-[90vw]\" : \"w-max max-w-sm\"\n }`}\n >\n {content}\n\n {/* Setinha só no desktop */}\n {!isMobile && (\n <>\n {finalPosition === \"bottom\" && (\n <div\n ref={arrowRef}\n className=\"absolute h-0 w-0 border-b-[6px] border-l-[6px] border-r-[6px] border-b-surface-tooltip border-l-transparent border-r-transparent\"\n />\n )}\n {finalPosition === \"top\" && (\n <div\n ref={arrowRef}\n className=\"absolute h-0 w-0 border-l-[6px] border-r-[6px] border-t-[6px] border-l-transparent border-r-transparent border-t-surface-tooltip\"\n />\n )}\n {finalPosition === \"right\" && (\n <div\n ref={arrowRef}\n className=\"absolute h-0 w-0 border-b-[6px] border-r-[6px] border-t-[6px] border-b-transparent border-r-surface-tooltip border-t-transparent\"\n />\n )}\n {finalPosition === \"left\" && (\n <div\n ref={arrowRef}\n className=\"absolute h-0 w-0 border-b-[6px] border-l-[6px] border-t-[6px] border-b-transparent border-l-surface-tooltip border-t-transparent\"\n />\n )}\n </>\n )}\n </div>\n ) : null,\n document.body,\n );\n};\n\nexport default Tooltip;\n\n\n","export type TooltipPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\n\ntype Rect = {\n top: number;\n right: number;\n bottom: number;\n left: number;\n width: number;\n height: number;\n};\n\ntype Size = {\n width: number;\n height: number;\n};\n\ntype CalculateTooltipPositionParams = {\n target: Rect;\n tooltip: Size;\n preferred: TooltipPosition;\n viewportWidth: number;\n viewportHeight: number;\n gap?: number;\n margin?: number;\n};\n\ntype TooltipCoordinates = {\n top: number;\n left: number;\n position: TooltipPosition;\n};\n\nconst OPPOSITE_POSITION: Record<TooltipPosition, TooltipPosition> = {\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\",\n};\n\nfunction coordinatesFor(\n target: Rect,\n tooltip: Size,\n position: TooltipPosition,\n gap: number,\n) {\n if (position === \"top\") {\n return {\n top: target.top - tooltip.height - gap,\n left: target.left + target.width / 2 - tooltip.width / 2,\n };\n }\n if (position === \"bottom\") {\n return {\n top: target.bottom + gap,\n left: target.left + target.width / 2 - tooltip.width / 2,\n };\n }\n if (position === \"left\") {\n return {\n top: target.top + target.height / 2 - tooltip.height / 2,\n left: target.left - tooltip.width - gap,\n };\n }\n return {\n top: target.top + target.height / 2 - tooltip.height / 2,\n left: target.right + gap,\n };\n}\n\nfunction fitsViewport(\n coordinates: { top: number; left: number },\n tooltip: Size,\n viewportWidth: number,\n viewportHeight: number,\n margin: number,\n) {\n return (\n coordinates.top >= margin &&\n coordinates.left >= margin &&\n coordinates.top + tooltip.height <= viewportHeight - margin &&\n coordinates.left + tooltip.width <= viewportWidth - margin\n );\n}\n\nfunction clamp(value: number, minimum: number, maximum: number) {\n return Math.min(Math.max(value, minimum), Math.max(minimum, maximum));\n}\n\nexport function calculateTooltipPosition({\n target,\n tooltip,\n preferred,\n viewportWidth,\n viewportHeight,\n gap = 8,\n margin = 8,\n}: CalculateTooltipPositionParams): TooltipCoordinates {\n const positions = [\n preferred,\n OPPOSITE_POSITION[preferred],\n \"bottom\",\n \"top\",\n \"right\",\n \"left\",\n ].filter(\n (position, index, values): position is TooltipPosition =>\n values.indexOf(position) === index,\n );\n\n for (const position of positions) {\n const coordinates = coordinatesFor(target, tooltip, position, gap);\n if (\n fitsViewport(\n coordinates,\n tooltip,\n viewportWidth,\n viewportHeight,\n margin,\n )\n ) {\n return { ...coordinates, position };\n }\n }\n\n const fallback = coordinatesFor(target, tooltip, preferred, gap);\n return {\n top: clamp(fallback.top, margin, viewportHeight - tooltip.height - margin),\n left: clamp(fallback.left, margin, viewportWidth - tooltip.width - margin),\n position: preferred,\n };\n}\n\n","\"use client\";\n\nimport { useEffect, type RefObject } from \"react\";\nimport { mergeAriaDescribedBy } from \"../../utils/accessibility\";\n\nexport function useTooltipRelationship(\n targetRef: RefObject<HTMLElement | null> | undefined,\n tooltipId: string,\n visible: boolean,\n) {\n useEffect(() => {\n const target = targetRef?.current;\n if (!target || !visible) return;\n\n const previousDescription = target.getAttribute(\"aria-describedby\");\n target.setAttribute(\n \"aria-describedby\",\n mergeAriaDescribedBy(previousDescription, tooltipId) ?? tooltipId,\n );\n\n return () => {\n if (previousDescription) {\n target.setAttribute(\"aria-describedby\", previousDescription);\n } else {\n target.removeAttribute(\"aria-describedby\");\n }\n };\n }, [targetRef, tooltipId, visible]);\n}\n\n\n","export function mergeAriaDescribedBy(\n ...values: Array<string | null | undefined>\n) {\n const identifiers = values\n .flatMap((value) => value?.trim().split(/\\s+/) ?? [])\n .filter(Boolean);\n\n return identifiers.length > 0\n ? Array.from(new Set(identifiers)).join(\" \")\n : undefined;\n}\n","export type FloatingLayer = \"popover\" | \"tooltip\";\n\nexport function getFloatingLayerClass(\n trigger: HTMLElement | null | undefined,\n layer: FloatingLayer,\n) {\n if (trigger?.closest('[role=\"dialog\"][aria-modal=\"true\"]')) {\n return \"z-modal-overlay\";\n }\n\n return layer === \"popover\" ? \"z-popover\" : \"z-tooltip\";\n}\n"],"mappings":"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","names":["useEffect","useState","useEffect","useEffect","useState","useEffect"]}
|
|
@@ -2,13 +2,13 @@ import {
|
|
|
2
2
|
Tooltip_default,
|
|
3
3
|
getFloatingLayerClass,
|
|
4
4
|
mergeAriaDescribedBy
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-ET2BGHTO.js";
|
|
6
6
|
import {
|
|
7
7
|
COUNTRY_OPTIONS,
|
|
8
8
|
PHONE_COUNTRY_OPTIONS,
|
|
9
9
|
filterCountryOptions,
|
|
10
10
|
getCountryFlagUrl
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-YCW3REQK.js";
|
|
12
12
|
import {
|
|
13
13
|
__objRest,
|
|
14
14
|
__spreadProps,
|
|
@@ -1756,9 +1756,9 @@ function parsePhonePayload(rawValue, countries = PHONE_COUNTRY_OPTIONS) {
|
|
|
1756
1756
|
return parseStoredPhoneValue(rawValue, countries);
|
|
1757
1757
|
}
|
|
1758
1758
|
function renderFlag(option) {
|
|
1759
|
-
var _a;
|
|
1759
|
+
var _a, _b;
|
|
1760
1760
|
const svgSrc = String(
|
|
1761
|
-
|
|
1761
|
+
((_b = (_a = option == null ? void 0 : option.flags) == null ? void 0 : _a.svg) == null ? void 0 : _b.trim()) || getCountryFlagUrl(option == null ? void 0 : option.cca2)
|
|
1762
1762
|
).trim();
|
|
1763
1763
|
if (!svgSrc) {
|
|
1764
1764
|
return /* @__PURE__ */ jsx5("span", { className: "h-5 w-7 shrink-0 rounded-sm bg-surface-muted" });
|
|
@@ -2181,12 +2181,13 @@ var MONTHS = [
|
|
|
2181
2181
|
"Novembro",
|
|
2182
2182
|
"Dezembro"
|
|
2183
2183
|
];
|
|
2184
|
-
var formatDateForInput = (date) => {
|
|
2184
|
+
var formatDateForInput = (date, selectionMode = "day") => {
|
|
2185
2185
|
if (!date || !isValid(date)) return "";
|
|
2186
|
-
return format(date, "dd/MM/yyyy");
|
|
2186
|
+
return format(date, selectionMode === "year" ? "yyyy" : "dd/MM/yyyy");
|
|
2187
2187
|
};
|
|
2188
|
-
var formatInputValue = (value) => {
|
|
2189
|
-
const digits = value.replace(/\D/g, "").slice(0, 8);
|
|
2188
|
+
var formatInputValue = (value, selectionMode = "day") => {
|
|
2189
|
+
const digits = value.replace(/\D/g, "").slice(0, selectionMode === "year" ? 4 : 8);
|
|
2190
|
+
if (selectionMode === "year") return digits;
|
|
2190
2191
|
if (digits.length <= 2) return digits;
|
|
2191
2192
|
if (digits.length <= 4) return `${digits.slice(0, 2)}/${digits.slice(2)}`;
|
|
2192
2193
|
return `${digits.slice(0, 2)}/${digits.slice(2, 4)}/${digits.slice(4)}`;
|
|
@@ -2224,6 +2225,7 @@ var UnifiedDatePicker = ({
|
|
|
2224
2225
|
errorText,
|
|
2225
2226
|
defaultView = "days",
|
|
2226
2227
|
navigationVariant = "drilldown",
|
|
2228
|
+
selectionMode = "day",
|
|
2227
2229
|
showAdjacentDays = true,
|
|
2228
2230
|
className
|
|
2229
2231
|
}) => {
|
|
@@ -2239,10 +2241,11 @@ var UnifiedDatePicker = ({
|
|
|
2239
2241
|
const formikTouched = hasFormikField && formik ? Boolean(getIn(formik.touched, name)) : false;
|
|
2240
2242
|
const formikError = hasFormikField && formik ? getIn(formik.errors, name) : void 0;
|
|
2241
2243
|
const isFieldDisabled = disabled || isDisabled;
|
|
2244
|
+
const resolvedPlaceholder = selectionMode === "year" ? "aaaa" : placeholder;
|
|
2242
2245
|
const [isOpen, setIsOpen] = useState4(false);
|
|
2243
2246
|
const [isEditing, setIsEditing] = useState4(false);
|
|
2244
2247
|
const [draftValue, setDraftValue] = useState4(
|
|
2245
|
-
formatDateForInput(selectedDate)
|
|
2248
|
+
formatDateForInput(selectedDate, selectionMode)
|
|
2246
2249
|
);
|
|
2247
2250
|
const [viewDate, setViewDate] = useState4(getSafeViewDate(selectedDate));
|
|
2248
2251
|
const [mode, setMode] = useState4(defaultView);
|
|
@@ -2259,13 +2262,15 @@ var UnifiedDatePicker = ({
|
|
|
2259
2262
|
}, []);
|
|
2260
2263
|
useEffect3(() => {
|
|
2261
2264
|
if (!isEditing) {
|
|
2262
|
-
setDraftValue(formatDateForInput(selectedDate));
|
|
2265
|
+
setDraftValue(formatDateForInput(selectedDate, selectionMode));
|
|
2263
2266
|
}
|
|
2264
2267
|
setViewDate(getSafeViewDate(selectedDate));
|
|
2265
|
-
}, [isEditing, selectedDate]);
|
|
2268
|
+
}, [isEditing, selectedDate, selectionMode]);
|
|
2266
2269
|
useEffect3(() => {
|
|
2267
2270
|
if (!isOpen) return;
|
|
2268
|
-
setMode(
|
|
2271
|
+
setMode(
|
|
2272
|
+
selectionMode === "year" ? "years" : selectionMode === "month" ? "months" : navigationVariant === "dropdown" ? "days" : defaultView
|
|
2273
|
+
);
|
|
2269
2274
|
const onMouseDown = (event) => {
|
|
2270
2275
|
var _a, _b;
|
|
2271
2276
|
if (!((_a = containerRef.current) == null ? void 0 : _a.contains(event.target)) && !((_b = dropdownRef.current) == null ? void 0 : _b.contains(event.target))) {
|
|
@@ -2281,7 +2286,7 @@ var UnifiedDatePicker = ({
|
|
|
2281
2286
|
document.removeEventListener("mousedown", onMouseDown);
|
|
2282
2287
|
document.removeEventListener("keydown", onKeyDown);
|
|
2283
2288
|
};
|
|
2284
|
-
}, [defaultView, isOpen, navigationVariant]);
|
|
2289
|
+
}, [defaultView, isOpen, navigationVariant, selectionMode]);
|
|
2285
2290
|
useEffect3(() => {
|
|
2286
2291
|
if (!isOpen) return;
|
|
2287
2292
|
const updateDropdownPosition = () => {
|
|
@@ -2360,6 +2365,7 @@ var UnifiedDatePicker = ({
|
|
|
2360
2365
|
return eachDayOfInterval({ start, end });
|
|
2361
2366
|
};
|
|
2362
2367
|
const handleDayClick = (day) => {
|
|
2368
|
+
if (selectionMode !== "day") return;
|
|
2363
2369
|
if (isBefore(day, startOfDay(minDate)) || isAfter(day, startOfDay(maxDate)))
|
|
2364
2370
|
return;
|
|
2365
2371
|
syncValue(day);
|
|
@@ -2370,6 +2376,18 @@ var UnifiedDatePicker = ({
|
|
|
2370
2376
|
setIsOpen(false);
|
|
2371
2377
|
};
|
|
2372
2378
|
const handleMonthClick = (monthIndex) => {
|
|
2379
|
+
const candidate = new Date(viewDate.getFullYear(), monthIndex, 1);
|
|
2380
|
+
const monthDisabled = isBefore(endOfMonth(candidate), startOfDay(minDate)) || isAfter(startOfMonth(candidate), startOfDay(maxDate));
|
|
2381
|
+
if (monthDisabled) return;
|
|
2382
|
+
if (selectionMode === "month") {
|
|
2383
|
+
const nextDate = isBefore(candidate, minDate) ? minDate : isAfter(candidate, maxDate) ? maxDate : candidate;
|
|
2384
|
+
syncValue(nextDate);
|
|
2385
|
+
setDraftValue(formatDateForInput(nextDate, selectionMode));
|
|
2386
|
+
setInputError(null);
|
|
2387
|
+
touchField();
|
|
2388
|
+
setIsOpen(false);
|
|
2389
|
+
return;
|
|
2390
|
+
}
|
|
2373
2391
|
setViewDate((currentDate) => {
|
|
2374
2392
|
const nextDate = new Date(currentDate);
|
|
2375
2393
|
nextDate.setMonth(monthIndex);
|
|
@@ -2386,12 +2404,23 @@ var UnifiedDatePicker = ({
|
|
|
2386
2404
|
});
|
|
2387
2405
|
};
|
|
2388
2406
|
const handleYearClick = (year) => {
|
|
2407
|
+
if (year < minDate.getFullYear() || year > maxDate.getFullYear()) return;
|
|
2408
|
+
if (selectionMode === "year") {
|
|
2409
|
+
const firstDay = new Date(year, 0, 1);
|
|
2410
|
+
const nextDate = year === minDate.getFullYear() && firstDay < minDate ? minDate : year === maxDate.getFullYear() && firstDay > maxDate ? maxDate : firstDay;
|
|
2411
|
+
syncValue(nextDate);
|
|
2412
|
+
setDraftValue(formatDateForInput(nextDate, selectionMode));
|
|
2413
|
+
setInputError(null);
|
|
2414
|
+
touchField();
|
|
2415
|
+
setIsOpen(false);
|
|
2416
|
+
return;
|
|
2417
|
+
}
|
|
2389
2418
|
setViewDate((currentDate) => {
|
|
2390
2419
|
const nextDate = new Date(currentDate);
|
|
2391
2420
|
nextDate.setFullYear(year);
|
|
2392
2421
|
return nextDate;
|
|
2393
2422
|
});
|
|
2394
|
-
setMode("days");
|
|
2423
|
+
setMode(selectionMode === "month" ? "months" : "days");
|
|
2395
2424
|
};
|
|
2396
2425
|
const handleYearChange = (year) => {
|
|
2397
2426
|
setViewDate((currentDate) => {
|
|
@@ -2408,7 +2437,7 @@ var UnifiedDatePicker = ({
|
|
|
2408
2437
|
});
|
|
2409
2438
|
};
|
|
2410
2439
|
const commitDraftValue = (rawValue) => {
|
|
2411
|
-
const normalizedValue = formatInputValue(rawValue);
|
|
2440
|
+
const normalizedValue = formatInputValue(rawValue, selectionMode);
|
|
2412
2441
|
setDraftValue(normalizedValue);
|
|
2413
2442
|
touchField();
|
|
2414
2443
|
if (!normalizedValue) {
|
|
@@ -2416,6 +2445,22 @@ var UnifiedDatePicker = ({
|
|
|
2416
2445
|
setInputError(null);
|
|
2417
2446
|
return;
|
|
2418
2447
|
}
|
|
2448
|
+
if (selectionMode === "year") {
|
|
2449
|
+
if (normalizedValue.length < 4) {
|
|
2450
|
+
syncValue(null);
|
|
2451
|
+
setInputError("Ano incompleto");
|
|
2452
|
+
return;
|
|
2453
|
+
}
|
|
2454
|
+
const year = Number(normalizedValue);
|
|
2455
|
+
if (year < minDate.getFullYear() || year > maxDate.getFullYear()) {
|
|
2456
|
+
syncValue(null);
|
|
2457
|
+
setInputError("Ano fora do intervalo permitido");
|
|
2458
|
+
return;
|
|
2459
|
+
}
|
|
2460
|
+
handleYearClick(year);
|
|
2461
|
+
setInputError(null);
|
|
2462
|
+
return;
|
|
2463
|
+
}
|
|
2419
2464
|
if (normalizedValue.length < 10) {
|
|
2420
2465
|
syncValue(null);
|
|
2421
2466
|
setInputError("Data incompleta");
|
|
@@ -2498,9 +2543,9 @@ var UnifiedDatePicker = ({
|
|
|
2498
2543
|
type: "text",
|
|
2499
2544
|
inputMode: "numeric",
|
|
2500
2545
|
autoComplete: "off",
|
|
2501
|
-
maxLength: 10,
|
|
2546
|
+
maxLength: selectionMode === "year" ? 4 : 10,
|
|
2502
2547
|
disabled: isFieldDisabled,
|
|
2503
|
-
placeholder,
|
|
2548
|
+
placeholder: resolvedPlaceholder,
|
|
2504
2549
|
value: draftValue,
|
|
2505
2550
|
onClick: openCalendar,
|
|
2506
2551
|
onFocus: () => {
|
|
@@ -2508,10 +2553,10 @@ var UnifiedDatePicker = ({
|
|
|
2508
2553
|
openCalendar();
|
|
2509
2554
|
},
|
|
2510
2555
|
onChange: (event) => {
|
|
2511
|
-
const nextValue = formatInputValue(event.target.value);
|
|
2556
|
+
const nextValue = formatInputValue(event.target.value, selectionMode);
|
|
2512
2557
|
setDraftValue(nextValue);
|
|
2513
2558
|
setInputError(null);
|
|
2514
|
-
if (nextValue.length === 10) {
|
|
2559
|
+
if (selectionMode === "day" && nextValue.length === 10) {
|
|
2515
2560
|
const parsedDate = parseDateValue(nextValue);
|
|
2516
2561
|
if (parsedDate) {
|
|
2517
2562
|
setViewDate(parsedDate);
|
|
@@ -3018,9 +3063,9 @@ var SelectMulti_default = SelectMulti;
|
|
|
3018
3063
|
// src/components/selectCountry/SelectCountry.tsx
|
|
3019
3064
|
import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
3020
3065
|
function renderFlag2(option) {
|
|
3021
|
-
var _a;
|
|
3066
|
+
var _a, _b;
|
|
3022
3067
|
const svgSrc = String(
|
|
3023
|
-
|
|
3068
|
+
((_b = (_a = option.flags) == null ? void 0 : _a.svg) == null ? void 0 : _b.trim()) || getCountryFlagUrl(option.cca2)
|
|
3024
3069
|
).trim();
|
|
3025
3070
|
if (!svgSrc) {
|
|
3026
3071
|
return /* @__PURE__ */ jsx9(
|
|
@@ -3287,6 +3332,220 @@ function RadioCardGroup({
|
|
|
3287
3332
|
);
|
|
3288
3333
|
}
|
|
3289
3334
|
|
|
3335
|
+
// src/components/otp-code-input/OtpCodeInput.tsx
|
|
3336
|
+
import classNames8 from "classnames";
|
|
3337
|
+
import {
|
|
3338
|
+
forwardRef as forwardRef2,
|
|
3339
|
+
useEffect as useEffect5,
|
|
3340
|
+
useId as useId6,
|
|
3341
|
+
useImperativeHandle,
|
|
3342
|
+
useRef as useRef7,
|
|
3343
|
+
useState as useState7
|
|
3344
|
+
} from "react";
|
|
3345
|
+
import { jsx as jsx12 } from "react/jsx-runtime";
|
|
3346
|
+
import { createElement } from "react";
|
|
3347
|
+
var normalizeMask = (value, mask) => {
|
|
3348
|
+
if (typeof mask === "function") return mask(value).slice(0, 1);
|
|
3349
|
+
if (mask instanceof RegExp) return mask.test(value) ? value.slice(0, 1) : "";
|
|
3350
|
+
if (mask === "alphanumeric") return value.replace(/[^a-z\d]/gi, "").slice(0, 1);
|
|
3351
|
+
return value.replace(/\D/g, "").slice(0, 1);
|
|
3352
|
+
};
|
|
3353
|
+
var normalizeValues = (source, length, mask) => {
|
|
3354
|
+
const values = Array.isArray(source) ? source : Array.from(source != null ? source : "");
|
|
3355
|
+
return Array.from({ length }, (_, index) => {
|
|
3356
|
+
var _a;
|
|
3357
|
+
return normalizeMask((_a = values[index]) != null ? _a : "", mask);
|
|
3358
|
+
});
|
|
3359
|
+
};
|
|
3360
|
+
var OtpCodeInput = forwardRef2(
|
|
3361
|
+
function OtpCodeInput2(_a, ref) {
|
|
3362
|
+
var _b = _a, {
|
|
3363
|
+
length = 6,
|
|
3364
|
+
value,
|
|
3365
|
+
values,
|
|
3366
|
+
onChange,
|
|
3367
|
+
onComplete,
|
|
3368
|
+
onPaste,
|
|
3369
|
+
autoFocus = false,
|
|
3370
|
+
disabled = false,
|
|
3371
|
+
error = false,
|
|
3372
|
+
errorText,
|
|
3373
|
+
helperText,
|
|
3374
|
+
label = "C\xF3digo de uso \xFAnico",
|
|
3375
|
+
inputMode = "numeric",
|
|
3376
|
+
mask = "numeric",
|
|
3377
|
+
name,
|
|
3378
|
+
className
|
|
3379
|
+
} = _b, inputProps = __objRest(_b, [
|
|
3380
|
+
"length",
|
|
3381
|
+
"value",
|
|
3382
|
+
"values",
|
|
3383
|
+
"onChange",
|
|
3384
|
+
"onComplete",
|
|
3385
|
+
"onPaste",
|
|
3386
|
+
"autoFocus",
|
|
3387
|
+
"disabled",
|
|
3388
|
+
"error",
|
|
3389
|
+
"errorText",
|
|
3390
|
+
"helperText",
|
|
3391
|
+
"label",
|
|
3392
|
+
"inputMode",
|
|
3393
|
+
"mask",
|
|
3394
|
+
"name",
|
|
3395
|
+
"className"
|
|
3396
|
+
]);
|
|
3397
|
+
const safeLength = Math.max(1, Math.floor(length));
|
|
3398
|
+
const groupId = useId6();
|
|
3399
|
+
const errorId = `${groupId}-error`;
|
|
3400
|
+
const helperId = `${groupId}-helper`;
|
|
3401
|
+
const inputRefs = useRef7([]);
|
|
3402
|
+
const isControlled = value !== void 0 || values !== void 0;
|
|
3403
|
+
const [internalValues, setInternalValues] = useState7(
|
|
3404
|
+
() => normalizeValues(values != null ? values : value, safeLength, mask)
|
|
3405
|
+
);
|
|
3406
|
+
const currentValues = isControlled ? normalizeValues(values != null ? values : value, safeLength, mask) : internalValues;
|
|
3407
|
+
useEffect5(() => {
|
|
3408
|
+
if (!isControlled) {
|
|
3409
|
+
setInternalValues(
|
|
3410
|
+
(previous) => previous.length === safeLength ? previous : normalizeValues(previous, safeLength, mask)
|
|
3411
|
+
);
|
|
3412
|
+
}
|
|
3413
|
+
}, [isControlled, mask, safeLength]);
|
|
3414
|
+
useImperativeHandle(ref, () => ({
|
|
3415
|
+
focus: (index = 0) => {
|
|
3416
|
+
var _a2;
|
|
3417
|
+
return (_a2 = inputRefs.current[Math.min(Math.max(index, 0), safeLength - 1)]) == null ? void 0 : _a2.focus();
|
|
3418
|
+
},
|
|
3419
|
+
clear: () => {
|
|
3420
|
+
var _a2;
|
|
3421
|
+
const next = Array.from({ length: safeLength }, () => "");
|
|
3422
|
+
if (!isControlled) setInternalValues(next);
|
|
3423
|
+
onChange == null ? void 0 : onChange("", next);
|
|
3424
|
+
(_a2 = inputRefs.current[0]) == null ? void 0 : _a2.focus();
|
|
3425
|
+
}
|
|
3426
|
+
}), [isControlled, onChange, safeLength]);
|
|
3427
|
+
useEffect5(() => {
|
|
3428
|
+
var _a2;
|
|
3429
|
+
if (autoFocus) (_a2 = inputRefs.current[0]) == null ? void 0 : _a2.focus();
|
|
3430
|
+
}, [autoFocus]);
|
|
3431
|
+
const emit = (next, focusIndex) => {
|
|
3432
|
+
var _a2;
|
|
3433
|
+
const normalized = normalizeValues(next, safeLength, mask);
|
|
3434
|
+
if (!isControlled) setInternalValues(normalized);
|
|
3435
|
+
const nextValue = normalized.join("");
|
|
3436
|
+
onChange == null ? void 0 : onChange(nextValue, normalized);
|
|
3437
|
+
if (normalized.every(Boolean) && nextValue.length === safeLength) {
|
|
3438
|
+
onComplete == null ? void 0 : onComplete(nextValue);
|
|
3439
|
+
}
|
|
3440
|
+
if (focusIndex !== void 0) (_a2 = inputRefs.current[focusIndex]) == null ? void 0 : _a2.focus();
|
|
3441
|
+
};
|
|
3442
|
+
const handlePaste = (event, index) => {
|
|
3443
|
+
onPaste == null ? void 0 : onPaste(event);
|
|
3444
|
+
if (event.defaultPrevented) return;
|
|
3445
|
+
event.preventDefault();
|
|
3446
|
+
const pasted = Array.from(event.clipboardData.getData("text")).map((item) => normalizeMask(item, mask)).filter(Boolean).slice(0, safeLength - index);
|
|
3447
|
+
if (!pasted.length) return;
|
|
3448
|
+
const next = [...currentValues];
|
|
3449
|
+
pasted.forEach((item, offset) => {
|
|
3450
|
+
next[index + offset] = item;
|
|
3451
|
+
});
|
|
3452
|
+
emit(next, Math.min(index + pasted.length, safeLength - 1));
|
|
3453
|
+
};
|
|
3454
|
+
const handleKeyDown = (event, index) => {
|
|
3455
|
+
var _a2, _b2, _c, _d;
|
|
3456
|
+
if (event.key === "ArrowLeft" && index > 0) {
|
|
3457
|
+
event.preventDefault();
|
|
3458
|
+
(_a2 = inputRefs.current[index - 1]) == null ? void 0 : _a2.focus();
|
|
3459
|
+
} else if (event.key === "ArrowRight" && index < safeLength - 1) {
|
|
3460
|
+
event.preventDefault();
|
|
3461
|
+
(_b2 = inputRefs.current[index + 1]) == null ? void 0 : _b2.focus();
|
|
3462
|
+
} else if (event.key === "Backspace") {
|
|
3463
|
+
if (currentValues[index]) {
|
|
3464
|
+
const next = [...currentValues];
|
|
3465
|
+
next[index] = "";
|
|
3466
|
+
emit(next);
|
|
3467
|
+
} else if (index > 0) {
|
|
3468
|
+
event.preventDefault();
|
|
3469
|
+
const next = [...currentValues];
|
|
3470
|
+
next[index - 1] = "";
|
|
3471
|
+
emit(next, index - 1);
|
|
3472
|
+
}
|
|
3473
|
+
} else if (event.key === "Delete" && currentValues[index]) {
|
|
3474
|
+
const next = [...currentValues];
|
|
3475
|
+
next[index] = "";
|
|
3476
|
+
emit(next);
|
|
3477
|
+
} else if (event.key === "Home") {
|
|
3478
|
+
event.preventDefault();
|
|
3479
|
+
(_c = inputRefs.current[0]) == null ? void 0 : _c.focus();
|
|
3480
|
+
} else if (event.key === "End") {
|
|
3481
|
+
event.preventDefault();
|
|
3482
|
+
(_d = inputRefs.current[safeLength - 1]) == null ? void 0 : _d.focus();
|
|
3483
|
+
}
|
|
3484
|
+
};
|
|
3485
|
+
const hasError = Boolean(error || errorText);
|
|
3486
|
+
const describedBy = [helperText ? helperId : "", hasError && errorText ? errorId : ""].filter(Boolean).join(" ") || void 0;
|
|
3487
|
+
return /* @__PURE__ */ jsx12(
|
|
3488
|
+
FieldFrame_default,
|
|
3489
|
+
{
|
|
3490
|
+
label,
|
|
3491
|
+
labelId: `${groupId}-label`,
|
|
3492
|
+
labelFor: `${groupId}-0`,
|
|
3493
|
+
message: errorText,
|
|
3494
|
+
messageId: errorId,
|
|
3495
|
+
description: helperText,
|
|
3496
|
+
descriptionId: helperId,
|
|
3497
|
+
invalid: hasError,
|
|
3498
|
+
className,
|
|
3499
|
+
children: /* @__PURE__ */ jsx12(
|
|
3500
|
+
"div",
|
|
3501
|
+
{
|
|
3502
|
+
role: "group",
|
|
3503
|
+
"aria-labelledby": label ? `${groupId}-label` : void 0,
|
|
3504
|
+
"aria-describedby": describedBy,
|
|
3505
|
+
"aria-invalid": hasError || void 0,
|
|
3506
|
+
className: "mt-1 flex flex-wrap gap-2",
|
|
3507
|
+
children: Array.from({ length: safeLength }, (_, index) => /* @__PURE__ */ createElement(
|
|
3508
|
+
"input",
|
|
3509
|
+
__spreadProps(__spreadValues({}, inputProps), {
|
|
3510
|
+
key: index,
|
|
3511
|
+
ref: (element) => {
|
|
3512
|
+
inputRefs.current[index] = element;
|
|
3513
|
+
},
|
|
3514
|
+
id: `${groupId}-${index}`,
|
|
3515
|
+
name: index === 0 ? name : void 0,
|
|
3516
|
+
type: "text",
|
|
3517
|
+
inputMode,
|
|
3518
|
+
autoComplete: index === 0 ? "one-time-code" : "off",
|
|
3519
|
+
maxLength: 1,
|
|
3520
|
+
value: currentValues[index],
|
|
3521
|
+
disabled,
|
|
3522
|
+
"aria-label": `${label}, d\xEDgito ${index + 1} de ${safeLength}`,
|
|
3523
|
+
"aria-invalid": hasError || void 0,
|
|
3524
|
+
"aria-describedby": describedBy,
|
|
3525
|
+
onChange: (event) => {
|
|
3526
|
+
const next = [...currentValues];
|
|
3527
|
+
const nextValue = normalizeMask(event.target.value, mask);
|
|
3528
|
+
next[index] = nextValue;
|
|
3529
|
+
emit(next, nextValue && index < safeLength - 1 ? index + 1 : void 0);
|
|
3530
|
+
},
|
|
3531
|
+
onPaste: (event) => handlePaste(event, index),
|
|
3532
|
+
onKeyDown: (event) => handleKeyDown(event, index),
|
|
3533
|
+
onFocus: (event) => event.currentTarget.select(),
|
|
3534
|
+
className: classNames8(
|
|
3535
|
+
"h-11 w-11 rounded-sm border bg-field-surface text-center text-lg font-bold text-field-content outline-none transition-colors focus-visible:border-field-border-active focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring disabled:cursor-not-allowed disabled:bg-field-surface-disabled",
|
|
3536
|
+
hasError ? "border-field-border-error" : "border-field-border-default"
|
|
3537
|
+
)
|
|
3538
|
+
})
|
|
3539
|
+
))
|
|
3540
|
+
}
|
|
3541
|
+
)
|
|
3542
|
+
}
|
|
3543
|
+
);
|
|
3544
|
+
}
|
|
3545
|
+
);
|
|
3546
|
+
OtpCodeInput.displayName = "OtpCodeInput";
|
|
3547
|
+
var OtpCodeInput_default = OtpCodeInput;
|
|
3548
|
+
|
|
3290
3549
|
export {
|
|
3291
3550
|
Input_default,
|
|
3292
3551
|
InputStandalone,
|
|
@@ -3303,6 +3562,7 @@ export {
|
|
|
3303
3562
|
CountrySelect,
|
|
3304
3563
|
SelectCountry_default,
|
|
3305
3564
|
RadioGroup,
|
|
3306
|
-
RadioCardGroup
|
|
3565
|
+
RadioCardGroup,
|
|
3566
|
+
OtpCodeInput_default
|
|
3307
3567
|
};
|
|
3308
|
-
//# sourceMappingURL=chunk-
|
|
3568
|
+
//# sourceMappingURL=chunk-FR5W52XU.js.map
|