@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.
Files changed (41) hide show
  1. package/README.md +116 -396
  2. package/dist/charts.js +1 -1
  3. package/dist/{chunk-OWXG2A4N.js → chunk-ATWH3MA6.js} +1 -1
  4. package/dist/chunk-ATWH3MA6.js.map +1 -0
  5. package/dist/{chunk-CWIPMGCA.js → chunk-ET2BGHTO.js} +2 -1
  6. package/dist/chunk-ET2BGHTO.js.map +1 -0
  7. package/dist/{chunk-BY4HJZFJ.js → chunk-FR5W52XU.js} +283 -23
  8. package/dist/chunk-FR5W52XU.js.map +1 -0
  9. package/dist/chunk-H4BBKKRZ.js +380 -0
  10. package/dist/chunk-H4BBKKRZ.js.map +1 -0
  11. package/dist/{chunk-2ACDV5D5.js → chunk-JSPXVXUY.js} +1 -1
  12. package/dist/chunk-JSPXVXUY.js.map +1 -0
  13. package/dist/{chunk-OPUUOVCL.js → chunk-PIXRKI25.js} +84 -10
  14. package/dist/chunk-PIXRKI25.js.map +1 -0
  15. package/dist/{chunk-6MXHE5MD.js → chunk-V66QL3TD.js} +1 -1
  16. package/dist/chunk-V66QL3TD.js.map +1 -0
  17. package/dist/chunk-YCW3REQK.js +3102 -0
  18. package/dist/chunk-YCW3REQK.js.map +1 -0
  19. package/dist/core.d.ts +23 -4
  20. package/dist/core.js +12 -6
  21. package/dist/countries.js +1 -1
  22. package/dist/documents.d.ts +81 -1
  23. package/dist/documents.js +14 -4
  24. package/dist/forms.d.ts +26 -2
  25. package/dist/forms.js +5 -3
  26. package/dist/index.d.ts +3 -3
  27. package/dist/index.js +30 -12
  28. package/dist/manifest.json +9 -9
  29. package/dist/overlays.js +1 -1
  30. package/dist/styles.css +1 -1
  31. package/package.json +27 -19
  32. package/dist/chunk-2ACDV5D5.js.map +0 -1
  33. package/dist/chunk-6MXHE5MD.js.map +0 -1
  34. package/dist/chunk-A3PA5H7L.js +0 -3099
  35. package/dist/chunk-A3PA5H7L.js.map +0 -1
  36. package/dist/chunk-BY4HJZFJ.js.map +0 -1
  37. package/dist/chunk-CWIPMGCA.js.map +0 -1
  38. package/dist/chunk-OPUUOVCL.js.map +0 -1
  39. package/dist/chunk-OWXG2A4N.js.map +0 -1
  40. package/dist/chunk-XGWGBD7X.js +0 -45
  41. 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-CWIPMGCA.js";
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-A3PA5H7L.js";
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
- getCountryFlagUrl(option == null ? void 0 : option.cca2) || ((_a = option == null ? void 0 : option.flags) == null ? void 0 : _a.svg) || ""
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(navigationVariant === "dropdown" ? "days" : defaultView);
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
- getCountryFlagUrl(option.cca2) || ((_a = option.flags) == null ? void 0 : _a.svg) || ""
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-BY4HJZFJ.js.map
3568
+ //# sourceMappingURL=chunk-FR5W52XU.js.map