@aspprev/versi-ds 0.4.0 → 0.4.1

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 (79) hide show
  1. package/README.md +7 -0
  2. package/dist/charts.js +1 -2
  3. package/dist/{chunk-ATWH3MA6.js → chunk-2XXVEFFY.js} +18 -35
  4. package/dist/{chunk-ATWH3MA6.js.map → chunk-2XXVEFFY.js.map} +1 -1
  5. package/dist/{chunk-V66QL3TD.js → chunk-5MRS4PDD.js} +200 -211
  6. package/dist/{chunk-V66QL3TD.js.map → chunk-5MRS4PDD.js.map} +1 -1
  7. package/dist/{chunk-LPLXAKPJ.js → chunk-6NVJWI5B.js} +551 -603
  8. package/dist/chunk-6NVJWI5B.js.map +1 -0
  9. package/dist/chunk-7IY43S3Y.js +2833 -0
  10. package/dist/chunk-7IY43S3Y.js.map +1 -0
  11. package/dist/{chunk-LTW323JQ.js → chunk-JGCZAVYV.js} +420 -594
  12. package/dist/{chunk-LTW323JQ.js.map → chunk-JGCZAVYV.js.map} +1 -1
  13. package/dist/{chunk-FTRF27XF.js → chunk-MMTKCHRP.js} +7 -17
  14. package/dist/{chunk-FTRF27XF.js.map → chunk-MMTKCHRP.js.map} +1 -1
  15. package/dist/{chunk-7JI5637G.js → chunk-YIUITJ4V.js} +45 -77
  16. package/dist/{chunk-7JI5637G.js.map → chunk-YIUITJ4V.js.map} +1 -1
  17. package/dist/{chunk-WOD44OEH.js → chunk-ZPY72ILO.js} +41 -58
  18. package/dist/{chunk-WOD44OEH.js.map → chunk-ZPY72ILO.js.map} +1 -1
  19. package/dist/core.js +3 -4
  20. package/dist/countries-browser.d.ts +11 -0
  21. package/dist/countries-browser.js +44 -0
  22. package/dist/countries-browser.js.map +1 -0
  23. package/dist/countries.d.ts +6 -46
  24. package/dist/countries.js +280 -7
  25. package/dist/countries.js.map +1 -1
  26. package/dist/country-metadata-DOgzawAc.d.ts +27 -0
  27. package/dist/documents.js +2 -3
  28. package/dist/flags-00-MPU4ISEM.js +85 -0
  29. package/dist/flags-00-MPU4ISEM.js.map +1 -0
  30. package/dist/flags-01-PWC64NSQ.js +13 -0
  31. package/dist/flags-01-PWC64NSQ.js.map +1 -0
  32. package/dist/flags-02-GNF7X6MP.js +10 -0
  33. package/dist/flags-02-GNF7X6MP.js.map +1 -0
  34. package/dist/flags-03-STVDA6UG.js +82 -0
  35. package/dist/flags-03-STVDA6UG.js.map +1 -0
  36. package/dist/flags-04-Z6AHZIWG.js +31 -0
  37. package/dist/flags-04-Z6AHZIWG.js.map +1 -0
  38. package/dist/flags-05-QBADBC6C.js +13 -0
  39. package/dist/flags-05-QBADBC6C.js.map +1 -0
  40. package/dist/flags-06-O55E67OI.js +28 -0
  41. package/dist/flags-06-O55E67OI.js.map +1 -0
  42. package/dist/flags-07-RSWJQIRW.js +64 -0
  43. package/dist/flags-07-RSWJQIRW.js.map +1 -0
  44. package/dist/flags-08-HHXIPTKX.js +31 -0
  45. package/dist/flags-08-HHXIPTKX.js.map +1 -0
  46. package/dist/flags-09-OEZBQ62G.js +64 -0
  47. package/dist/flags-09-OEZBQ62G.js.map +1 -0
  48. package/dist/flags-10-XJY5UMQR.js +73 -0
  49. package/dist/flags-10-XJY5UMQR.js.map +1 -0
  50. package/dist/flags-11-7M75OPUJ.js +34 -0
  51. package/dist/flags-11-7M75OPUJ.js.map +1 -0
  52. package/dist/flags-12-JY22PFQH.js +31 -0
  53. package/dist/flags-12-JY22PFQH.js.map +1 -0
  54. package/dist/flags-13-BERDGZCT.js +52 -0
  55. package/dist/flags-13-BERDGZCT.js.map +1 -0
  56. package/dist/flags-14-XVPM2GQ2.js +31 -0
  57. package/dist/flags-14-XVPM2GQ2.js.map +1 -0
  58. package/dist/flags-15-WESIXIDR.js +64 -0
  59. package/dist/flags-15-WESIXIDR.js.map +1 -0
  60. package/dist/flags-16-PTNHBPYG.js +40 -0
  61. package/dist/flags-16-PTNHBPYG.js.map +1 -0
  62. package/dist/flags-17-UYXBV5BH.js +10 -0
  63. package/dist/flags-17-UYXBV5BH.js.map +1 -0
  64. package/dist/flags-18-VMKDO7W4.js +91 -0
  65. package/dist/flags-18-VMKDO7W4.js.map +1 -0
  66. package/dist/flags-19-635PQOEQ.js +43 -0
  67. package/dist/flags-19-635PQOEQ.js.map +1 -0
  68. package/dist/forms.d.ts +2 -2
  69. package/dist/forms.js +3 -4
  70. package/dist/index.d.ts +1 -1
  71. package/dist/index.js +8 -9
  72. package/dist/manifest.json +32 -10
  73. package/dist/overlays.js +1 -2
  74. package/package.json +4 -2
  75. package/dist/chunk-2NMEKWO5.js +0 -38
  76. package/dist/chunk-2NMEKWO5.js.map +0 -1
  77. package/dist/chunk-LPLXAKPJ.js.map +0 -1
  78. package/dist/chunk-YCW3REQK.js +0 -3102
  79. package/dist/chunk-YCW3REQK.js.map +0 -1
@@ -1,8 +1,3 @@
1
- import {
2
- __spreadProps,
3
- __spreadValues
4
- } from "./chunk-2NMEKWO5.js";
5
-
6
1
  // src/hooks/useBreakpoint.tsx
7
2
  import { useSyncExternalStore } from "react";
8
3
  var breakpoints = {
@@ -106,7 +101,7 @@ function calculateTooltipPosition({
106
101
  viewportHeight,
107
102
  margin
108
103
  )) {
109
- return __spreadProps(__spreadValues({}, coordinates), { position });
104
+ return { ...coordinates, position };
110
105
  }
111
106
  }
112
107
  const fallback = coordinatesFor(target, tooltip, preferred, gap);
@@ -122,23 +117,19 @@ import { useEffect } from "react";
122
117
 
123
118
  // src/utils/accessibility.ts
124
119
  function mergeAriaDescribedBy(...values) {
125
- const identifiers = values.flatMap((value) => {
126
- var _a;
127
- return (_a = value == null ? void 0 : value.trim().split(/\s+/)) != null ? _a : [];
128
- }).filter(Boolean);
120
+ const identifiers = values.flatMap((value) => value?.trim().split(/\s+/) ?? []).filter(Boolean);
129
121
  return identifiers.length > 0 ? Array.from(new Set(identifiers)).join(" ") : void 0;
130
122
  }
131
123
 
132
124
  // src/components/tooltip/use-tooltip-relationship.ts
133
125
  function useTooltipRelationship(targetRef, tooltipId, visible) {
134
126
  useEffect(() => {
135
- var _a;
136
- const target = targetRef == null ? void 0 : targetRef.current;
127
+ const target = targetRef?.current;
137
128
  if (!target || !visible) return;
138
129
  const previousDescription = target.getAttribute("aria-describedby");
139
130
  target.setAttribute(
140
131
  "aria-describedby",
141
- (_a = mergeAriaDescribedBy(previousDescription, tooltipId)) != null ? _a : tooltipId
132
+ mergeAriaDescribedBy(previousDescription, tooltipId) ?? tooltipId
142
133
  );
143
134
  return () => {
144
135
  if (previousDescription) {
@@ -152,7 +143,7 @@ function useTooltipRelationship(targetRef, tooltipId, visible) {
152
143
 
153
144
  // src/utils/floating-layer.ts
154
145
  function getFloatingLayerClass(trigger, layer) {
155
- if (trigger == null ? void 0 : trigger.closest('[role="dialog"][aria-modal="true"]')) {
146
+ if (trigger?.closest('[role="dialog"][aria-modal="true"]')) {
156
147
  return "z-modal-overlay";
157
148
  }
158
149
  return layer === "popover" ? "z-popover" : "z-tooltip";
@@ -244,9 +235,8 @@ var Tooltip = ({
244
235
  arrow.style.top = `${verticalCenter}px`;
245
236
  }, [coords, finalPosition, isMobile, targetRef, visible]);
246
237
  useEffect2(() => {
247
- var _a;
248
238
  if (!visible) return;
249
- (_a = tooltipRef.current) == null ? void 0 : _a.animate([{ opacity: 0 }, { opacity: 1 }], {
239
+ tooltipRef.current?.animate([{ opacity: 0 }, { opacity: 1 }], {
250
240
  duration: 150,
251
241
  easing: "ease-out"
252
242
  });
@@ -309,4 +299,4 @@ export {
309
299
  getFloatingLayerClass,
310
300
  Tooltip_default
311
301
  };
312
- //# sourceMappingURL=chunk-FTRF27XF.js.map
302
+ //# sourceMappingURL=chunk-MMTKCHRP.js.map
@@ -1 +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 { useSyncExternalStore } from \"react\";\n\nexport const breakpoints = {\n mobile: 640,\n tablet: 1024,\n desktop: 1440,\n tv: 1920,\n};\n\nexport type Breakpoint = keyof typeof breakpoints;\n\nexport function getBreakpoint(width: number): Breakpoint {\n const entries = Object.entries(breakpoints) as [Breakpoint, number][];\n return entries.reduce<Breakpoint>(\n (previous, [name, minimumWidth]) =>\n width >= minimumWidth ? name : previous,\n \"mobile\",\n );\n}\n\nfunction subscribe(onStoreChange: () => void) {\n window.addEventListener(\"resize\", onStoreChange);\n return () => window.removeEventListener(\"resize\", onStoreChange);\n}\n\nfunction getSnapshot() {\n return getBreakpoint(window.innerWidth);\n}\n\nfunction getServerSnapshot(): Breakpoint {\n return \"mobile\";\n}\n\nexport const useBreakpoint = (): Breakpoint =>\n useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\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","useEffect"]}
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 { useSyncExternalStore } from \"react\";\n\nexport const breakpoints = {\n mobile: 640,\n tablet: 1024,\n desktop: 1440,\n tv: 1920,\n};\n\nexport type Breakpoint = keyof typeof breakpoints;\n\nexport function getBreakpoint(width: number): Breakpoint {\n const entries = Object.entries(breakpoints) as [Breakpoint, number][];\n return entries.reduce<Breakpoint>(\n (previous, [name, minimumWidth]) =>\n width >= minimumWidth ? name : previous,\n \"mobile\",\n );\n}\n\nfunction subscribe(onStoreChange: () => void) {\n window.addEventListener(\"resize\", onStoreChange);\n return () => window.removeEventListener(\"resize\", onStoreChange);\n}\n\nfunction getSnapshot() {\n return getBreakpoint(window.innerWidth);\n}\n\nfunction getServerSnapshot(): Breakpoint {\n return \"mobile\";\n}\n\nexport const useBreakpoint = (): Breakpoint =>\n useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\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","useEffect"]}
@@ -1,9 +1,3 @@
1
- import {
2
- __objRest,
3
- __spreadProps,
4
- __spreadValues
5
- } from "./chunk-2NMEKWO5.js";
6
-
7
1
  // src/components/barcode/barcode.tsx
8
2
  import JsBarcode from "jsbarcode";
9
3
  import { useEffect, useRef } from "react";
@@ -47,7 +41,7 @@ function BoletoBarCode({ linhaDigitavel }) {
47
41
 
48
42
  // src/components/file-upload/validation.ts
49
43
  function acceptsFile(file, accept) {
50
- if (!(accept == null ? void 0 : accept.trim())) return true;
44
+ if (!accept?.trim()) return true;
51
45
  return accept.split(",").map((item) => item.trim().toLowerCase()).some((rule) => {
52
46
  if (rule.endsWith("/*")) return file.type.toLowerCase().startsWith(rule.slice(0, -1));
53
47
  if (rule.startsWith(".")) return file.name.toLowerCase().endsWith(rule);
@@ -108,7 +102,7 @@ function FileDropzone({
108
102
  onFilesRejected
109
103
  }) {
110
104
  const generatedInputId = useId();
111
- const inputId = id != null ? id : generatedInputId;
105
+ const inputId = id ?? generatedInputId;
112
106
  const messageId = `${inputId}-message`;
113
107
  const inputRef = useRef2(null);
114
108
  const [isDragging, setIsDragging] = useState(false);
@@ -122,8 +116,8 @@ function FileDropzone({
122
116
  multiple
123
117
  });
124
118
  setRejectionMessage(rejected.length ? rejected.map((item) => item.message).join(" ") : void 0);
125
- if (accepted.length) onFilesAccepted == null ? void 0 : onFilesAccepted(accepted);
126
- if (rejected.length) onFilesRejected == null ? void 0 : onFilesRejected(rejected);
119
+ if (accepted.length) onFilesAccepted?.(accepted);
120
+ if (rejected.length) onFilesRejected?.(rejected);
127
121
  };
128
122
  const handleInputChange = (event) => {
129
123
  if (event.target.files) processFiles(event.target.files);
@@ -232,10 +226,7 @@ var FileUploadProgress_default = FileUploadProgress;
232
226
  import classNames3 from "classnames";
233
227
  import { MdClose, MdRefresh } from "react-icons/md";
234
228
  import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
235
- var fileId = (item, index) => {
236
- var _a;
237
- return (_a = item.id) != null ? _a : `${item.file.name}-${item.file.size}-${item.file.lastModified}-${index}`;
238
- };
229
+ var fileId = (item, index) => item.id ?? `${item.file.name}-${item.file.size}-${item.file.lastModified}-${index}`;
239
230
  var statusDescription = (status) => {
240
231
  if (status === "uploading") return "Enviando";
241
232
  if (status === "success") return "Enviado";
@@ -244,8 +235,7 @@ var statusDescription = (status) => {
244
235
  };
245
236
  function FileList({ files, accessibleName = "Arquivos selecionados", onRemove, onRetry, className }) {
246
237
  return /* @__PURE__ */ jsx4("ul", { "aria-label": accessibleName, className: classNames3("w-full space-y-2", className), children: files.map((item, index) => {
247
- var _a;
248
- const status = (_a = item.status) != null ? _a : "pending";
238
+ const status = item.status ?? "pending";
249
239
  const progressStatus = status === "pending" ? "idle" : status;
250
240
  return /* @__PURE__ */ jsxs4("li", { "aria-busy": status === "uploading" || void 0, className: "flex min-w-0 flex-wrap items-center gap-3 rounded-sm border border-border-default bg-surface-card p-3", children: [
251
241
  /* @__PURE__ */ jsxs4("div", { className: "min-w-0 flex-1", children: [
@@ -275,13 +265,12 @@ import classNames4 from "classnames";
275
265
  import { useEffect as useEffect2, useRef as useRef3, useState as useState2 } from "react";
276
266
  import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
277
267
  var extensionType = (fileName) => {
278
- var _a;
279
- const extension = (_a = fileName == null ? void 0 : fileName.split(".").pop()) == null ? void 0 : _a.toLowerCase();
268
+ const extension = fileName?.split(".").pop()?.toLowerCase();
280
269
  if (extension === "pdf") return "application/pdf";
281
- if (["png", "jpg", "jpeg", "gif", "webp", "svg"].includes(extension != null ? extension : "")) {
270
+ if (["png", "jpg", "jpeg", "gif", "webp", "svg"].includes(extension ?? "")) {
282
271
  return `image/${extension === "jpg" ? "jpeg" : extension}`;
283
272
  }
284
- if (["txt", "csv", "json", "xml", "md"].includes(extension != null ? extension : "")) return "text/plain";
273
+ if (["txt", "csv", "json", "xml", "md"].includes(extension ?? "")) return "text/plain";
285
274
  return "application/octet-stream";
286
275
  };
287
276
  var normalizeContentType = (contentType) => contentType.split(";", 1)[0].trim().toLowerCase();
@@ -296,7 +285,7 @@ function FileViewer({
296
285
  onError,
297
286
  onDownload,
298
287
  fallback,
299
- title = fileName != null ? fileName : "Visualiza\xE7\xE3o do arquivo",
288
+ title = fileName ?? "Visualiza\xE7\xE3o do arquivo",
300
289
  className
301
290
  }) {
302
291
  const [objectUrl, setObjectUrl] = useState2();
@@ -305,13 +294,13 @@ function FileViewer({
305
294
  const onLoadRef = useRef3(onLoad);
306
295
  const onErrorRef = useRef3(onError);
307
296
  const resolved = typeof source === "object" && source !== null && !(source instanceof Blob) ? source : void 0;
308
- const blob = source instanceof Blob ? source : resolved == null ? void 0 : resolved.blob;
309
- const url = typeof source === "string" ? source : resolved == null ? void 0 : resolved.url;
310
- const resolvedName = fileName != null ? fileName : resolved == null ? void 0 : resolved.fileName;
311
- const rawType = (contentType == null ? void 0 : contentType.trim()) || (resolved == null ? void 0 : resolved.contentType) || (blob == null ? void 0 : blob.type) || extensionType(resolvedName);
297
+ const blob = source instanceof Blob ? source : resolved?.blob;
298
+ const url = typeof source === "string" ? source : resolved?.url;
299
+ const resolvedName = fileName ?? resolved?.fileName;
300
+ const rawType = contentType?.trim() || resolved?.contentType || blob?.type || extensionType(resolvedName);
312
301
  const resolvedType = normalizeContentType(rawType);
313
302
  const isText = resolvedType.startsWith("text/") || resolvedType === "application/json";
314
- const displayError = error != null ? error : readError == null ? void 0 : readError.message;
303
+ const displayError = error ?? readError?.message;
315
304
  useEffect2(() => {
316
305
  onLoadRef.current = onLoad;
317
306
  }, [onLoad]);
@@ -319,7 +308,6 @@ function FileViewer({
319
308
  onErrorRef.current = onError;
320
309
  }, [onError]);
321
310
  useEffect2(() => {
322
- var _a;
323
311
  let active = true;
324
312
  setReadError(null);
325
313
  setTextContent(void 0);
@@ -336,23 +324,21 @@ function FileViewer({
336
324
  } catch (cause) {
337
325
  const nextError = toError(cause);
338
326
  setReadError(nextError);
339
- (_a = onErrorRef.current) == null ? void 0 : _a.call(onErrorRef, nextError);
327
+ onErrorRef.current?.(nextError);
340
328
  return () => {
341
329
  active = false;
342
330
  };
343
331
  }
344
332
  if (isText) {
345
333
  blob.text().then((text) => {
346
- var _a2;
347
334
  if (!active) return;
348
335
  setTextContent(text);
349
- (_a2 = onLoadRef.current) == null ? void 0 : _a2.call(onLoadRef);
336
+ onLoadRef.current?.();
350
337
  }).catch((cause) => {
351
- var _a2;
352
338
  if (!active) return;
353
339
  const nextError = toError(cause);
354
340
  setReadError(nextError);
355
- (_a2 = onErrorRef.current) == null ? void 0 : _a2.call(onErrorRef, nextError);
341
+ onErrorRef.current?.(nextError);
356
342
  });
357
343
  }
358
344
  return () => {
@@ -361,15 +347,11 @@ function FileViewer({
361
347
  };
362
348
  }, [blob, isText]);
363
349
  const handleMediaError = () => {
364
- var _a;
365
350
  const nextError = new Error("N\xE3o foi poss\xEDvel carregar a visualiza\xE7\xE3o do arquivo.");
366
351
  setReadError(nextError);
367
- (_a = onErrorRef.current) == null ? void 0 : _a.call(onErrorRef, nextError);
368
- };
369
- const handleLoad = () => {
370
- var _a;
371
- return (_a = onLoadRef.current) == null ? void 0 : _a.call(onLoadRef);
352
+ onErrorRef.current?.(nextError);
372
353
  };
354
+ const handleLoad = () => onLoadRef.current?.();
373
355
  if (loading) {
374
356
  return /* @__PURE__ */ jsx5(
375
357
  "div",
@@ -385,7 +367,7 @@ function FileViewer({
385
367
  if (displayError) {
386
368
  return /* @__PURE__ */ jsx5("div", { className: classNames4("rounded-sm border border-field-border-error bg-surface-card p-4 text-field-assistive-error", className), role: "alert", children: displayError });
387
369
  }
388
- const displayUrl = objectUrl != null ? objectUrl : url;
370
+ const displayUrl = objectUrl ?? url;
389
371
  if (!displayUrl && !textContent) {
390
372
  return /* @__PURE__ */ jsx5(
391
373
  "div",
@@ -393,7 +375,7 @@ function FileViewer({
393
375
  className: classNames4("rounded-sm border border-border-default bg-surface-card p-4 text-content-secondary", className),
394
376
  role: "region",
395
377
  "aria-label": title,
396
- children: fallback != null ? fallback : "Arquivo indispon\xEDvel."
378
+ children: fallback ?? "Arquivo indispon\xEDvel."
397
379
  }
398
380
  );
399
381
  }
@@ -408,7 +390,7 @@ function FileViewer({
408
390
  resolvedType.startsWith("image/") && displayUrl && /* @__PURE__ */ jsx5("img", { src: displayUrl, alt: title, onLoad: handleLoad, onError: handleMediaError, className: "max-h-[70vh] max-w-full object-contain" }),
409
391
  resolvedType === "application/pdf" && displayUrl && /* @__PURE__ */ jsx5("iframe", { src: displayUrl, title, onLoad: handleLoad, onError: handleMediaError, sandbox: "", className: "min-h-[32rem] w-full border-0" }),
410
392
  isText && (textContent !== void 0 ? /* @__PURE__ */ jsx5("pre", { className: "max-h-[70vh] overflow-auto whitespace-pre-wrap break-words text-sm text-content-primary", children: textContent }) : displayUrl && /* @__PURE__ */ jsx5("iframe", { src: displayUrl, title, onLoad: handleLoad, onError: handleMediaError, sandbox: "", className: "min-h-64 w-full border-0" })),
411
- !resolvedType.startsWith("image/") && resolvedType !== "application/pdf" && !isText && (fallback != null ? fallback : /* @__PURE__ */ jsx5("p", { className: "text-content-secondary", children: "Este tipo de arquivo n\xE3o possui visualiza\xE7\xE3o dispon\xEDvel." })),
393
+ !resolvedType.startsWith("image/") && resolvedType !== "application/pdf" && !isText && (fallback ?? /* @__PURE__ */ jsx5("p", { className: "text-content-secondary", children: "Este tipo de arquivo n\xE3o possui visualiza\xE7\xE3o dispon\xEDvel." })),
412
394
  download && /* @__PURE__ */ jsx5("div", { className: "flex justify-end", children: download })
413
395
  ]
414
396
  }
@@ -439,47 +421,33 @@ function resolveAccessibleColors(fgColor, bgColor) {
439
421
  const contrastRatio = (lighter + 0.05) / (darker + 0.05);
440
422
  return contrastRatio >= 3 ? { dark: fgColor, light: bgColor } : { dark: "#000000", light: "#FFFFFF" };
441
423
  }
442
- function QRCode(_a) {
443
- var _b = _a, {
444
- value,
445
- size = 192,
446
- level = "M",
447
- includeMargin = true,
448
- fgColor = "#000000",
449
- bgColor = "#FFFFFF",
450
- ariaLabel = "C\xF3digo QR",
451
- description,
452
- loading = false,
453
- error,
454
- onError,
455
- className
456
- } = _b, rest = __objRest(_b, [
457
- "value",
458
- "size",
459
- "level",
460
- "includeMargin",
461
- "fgColor",
462
- "bgColor",
463
- "ariaLabel",
464
- "description",
465
- "loading",
466
- "error",
467
- "onError",
468
- "className"
469
- ]);
470
- var _a2;
424
+ function QRCode({
425
+ value,
426
+ size = 192,
427
+ level = "M",
428
+ includeMargin = true,
429
+ fgColor = "#000000",
430
+ bgColor = "#FFFFFF",
431
+ ariaLabel = "C\xF3digo QR",
432
+ description,
433
+ loading = false,
434
+ error,
435
+ onError,
436
+ className,
437
+ ...rest
438
+ }) {
471
439
  const [dataUrl, setDataUrl] = useState3(null);
472
440
  const [generationError, setGenerationError] = useState3(null);
473
441
  const onErrorRef = useRef4(onError);
474
442
  const generatedId = useId2();
475
443
  const resolvedSize = Math.max(1, Number.isFinite(size) ? Math.floor(size) : 192);
476
- const descriptionId = description ? `${(_a2 = rest.id) != null ? _a2 : generatedId}-description` : void 0;
444
+ const descriptionId = description ? `${rest.id ?? generatedId}-description` : void 0;
477
445
  const colors = useMemo(
478
446
  () => resolveAccessibleColors(fgColor, bgColor),
479
447
  [bgColor, fgColor]
480
448
  );
481
449
  const describedBy = [rest["aria-describedby"], descriptionId].filter(Boolean).join(" ") || void 0;
482
- const displayError = error != null ? error : generationError == null ? void 0 : generationError.message;
450
+ const displayError = error ?? generationError?.message;
483
451
  const isLoading = loading || !dataUrl && !displayError;
484
452
  useEffect3(() => {
485
453
  onErrorRef.current = onError;
@@ -503,12 +471,11 @@ function QRCode(_a) {
503
471
  }).then((url) => {
504
472
  if (active) setDataUrl(url);
505
473
  }).catch((cause) => {
506
- var _a3;
507
474
  if (!active) return;
508
475
  const nextError = cause instanceof Error ? cause : new Error("N\xE3o foi poss\xEDvel gerar o c\xF3digo QR.");
509
476
  setDataUrl(null);
510
477
  setGenerationError(nextError);
511
- (_a3 = onErrorRef.current) == null ? void 0 : _a3.call(onErrorRef, nextError);
478
+ onErrorRef.current?.(nextError);
512
479
  });
513
480
  return () => {
514
481
  active = false;
@@ -516,7 +483,8 @@ function QRCode(_a) {
516
483
  }, [colors, error, includeMargin, level, resolvedSize, value]);
517
484
  return /* @__PURE__ */ jsxs6(
518
485
  "div",
519
- __spreadProps(__spreadValues({}, rest), {
486
+ {
487
+ ...rest,
520
488
  role: "img",
521
489
  "aria-label": ariaLabel,
522
490
  "aria-describedby": describedBy,
@@ -534,7 +502,7 @@ function QRCode(_a) {
534
502
  ),
535
503
  description && /* @__PURE__ */ jsx6("span", { id: descriptionId, className: "sr-only", children: description })
536
504
  ]
537
- })
505
+ }
538
506
  );
539
507
  }
540
508
  var QRCode_default = QRCode;
@@ -548,4 +516,4 @@ export {
548
516
  FileViewer_default,
549
517
  QRCode_default
550
518
  };
551
- //# sourceMappingURL=chunk-7JI5637G.js.map
519
+ //# sourceMappingURL=chunk-YIUITJ4V.js.map