@aspprev/versi-ds 0.1.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 (295) hide show
  1. package/README.md +463 -0
  2. package/dist/DocumentItem-BU0J2QGP.d.ts +21 -0
  3. package/dist/charts.d.ts +82 -0
  4. package/dist/charts.js +31 -0
  5. package/dist/charts.js.map +1 -0
  6. package/dist/chunk-2ACDV5D5.js +560 -0
  7. package/dist/chunk-2ACDV5D5.js.map +1 -0
  8. package/dist/chunk-2NMEKWO5.js +38 -0
  9. package/dist/chunk-2NMEKWO5.js.map +1 -0
  10. package/dist/chunk-6MXHE5MD.js +769 -0
  11. package/dist/chunk-6MXHE5MD.js.map +1 -0
  12. package/dist/chunk-A3PA5H7L.js +3099 -0
  13. package/dist/chunk-A3PA5H7L.js.map +1 -0
  14. package/dist/chunk-BY4HJZFJ.js +3308 -0
  15. package/dist/chunk-BY4HJZFJ.js.map +1 -0
  16. package/dist/chunk-CWIPMGCA.js +314 -0
  17. package/dist/chunk-CWIPMGCA.js.map +1 -0
  18. package/dist/chunk-OPUUOVCL.js +3226 -0
  19. package/dist/chunk-OPUUOVCL.js.map +1 -0
  20. package/dist/chunk-OWXG2A4N.js +77 -0
  21. package/dist/chunk-OWXG2A4N.js.map +1 -0
  22. package/dist/chunk-XGWGBD7X.js +45 -0
  23. package/dist/chunk-XGWGBD7X.js.map +1 -0
  24. package/dist/core.d.ts +471 -0
  25. package/dist/core.js +86 -0
  26. package/dist/core.js.map +1 -0
  27. package/dist/countries.d.ts +52 -0
  28. package/dist/countries.js +18 -0
  29. package/dist/countries.js.map +1 -0
  30. package/dist/documents.d.ts +9 -0
  31. package/dist/documents.js +13 -0
  32. package/dist/documents.js.map +1 -0
  33. package/dist/flags/ad.svg +1 -0
  34. package/dist/flags/ae.svg +1 -0
  35. package/dist/flags/af.svg +5 -0
  36. package/dist/flags/ag.svg +1 -0
  37. package/dist/flags/ai.svg +1 -0
  38. package/dist/flags/al.svg +1 -0
  39. package/dist/flags/am.svg +1 -0
  40. package/dist/flags/ao.svg +1 -0
  41. package/dist/flags/aq.svg +1 -0
  42. package/dist/flags/ar.svg +1 -0
  43. package/dist/flags/as.svg +1 -0
  44. package/dist/flags/at.svg +1 -0
  45. package/dist/flags/au.svg +1 -0
  46. package/dist/flags/aw.svg +1 -0
  47. package/dist/flags/ax.svg +1 -0
  48. package/dist/flags/az.svg +1 -0
  49. package/dist/flags/ba.svg +1 -0
  50. package/dist/flags/bb.svg +1 -0
  51. package/dist/flags/bd.svg +1 -0
  52. package/dist/flags/be.svg +1 -0
  53. package/dist/flags/bf.svg +1 -0
  54. package/dist/flags/bg.svg +1 -0
  55. package/dist/flags/bh.svg +1 -0
  56. package/dist/flags/bi.svg +1 -0
  57. package/dist/flags/bj.svg +1 -0
  58. package/dist/flags/bl.svg +1 -0
  59. package/dist/flags/bm.svg +1 -0
  60. package/dist/flags/bn.svg +1 -0
  61. package/dist/flags/bo.svg +1 -0
  62. package/dist/flags/bq.svg +1 -0
  63. package/dist/flags/br.svg +1 -0
  64. package/dist/flags/bs.svg +1 -0
  65. package/dist/flags/bt.svg +1 -0
  66. package/dist/flags/bv.svg +1 -0
  67. package/dist/flags/bw.svg +1 -0
  68. package/dist/flags/by.svg +1 -0
  69. package/dist/flags/bz.svg +1 -0
  70. package/dist/flags/ca.svg +1 -0
  71. package/dist/flags/cc.svg +1 -0
  72. package/dist/flags/cd.svg +1 -0
  73. package/dist/flags/cf.svg +1 -0
  74. package/dist/flags/cg.svg +1 -0
  75. package/dist/flags/ch.svg +1 -0
  76. package/dist/flags/ci.svg +1 -0
  77. package/dist/flags/ck.svg +1 -0
  78. package/dist/flags/cl.svg +1 -0
  79. package/dist/flags/cm.svg +1 -0
  80. package/dist/flags/cn.svg +1 -0
  81. package/dist/flags/co.svg +1 -0
  82. package/dist/flags/cr.svg +1 -0
  83. package/dist/flags/cu.svg +1 -0
  84. package/dist/flags/cv.svg +1 -0
  85. package/dist/flags/cw.svg +1 -0
  86. package/dist/flags/cx.svg +1 -0
  87. package/dist/flags/cy.svg +1 -0
  88. package/dist/flags/cz.svg +1 -0
  89. package/dist/flags/de.svg +1 -0
  90. package/dist/flags/dj.svg +1 -0
  91. package/dist/flags/dk.svg +1 -0
  92. package/dist/flags/dm.svg +1 -0
  93. package/dist/flags/do.svg +1 -0
  94. package/dist/flags/dz.svg +1 -0
  95. package/dist/flags/ec.svg +1 -0
  96. package/dist/flags/ee.svg +1 -0
  97. package/dist/flags/eg.svg +1 -0
  98. package/dist/flags/eh.svg +1 -0
  99. package/dist/flags/er.svg +1 -0
  100. package/dist/flags/es.svg +1 -0
  101. package/dist/flags/et.svg +1 -0
  102. package/dist/flags/fi.svg +1 -0
  103. package/dist/flags/fj.svg +1 -0
  104. package/dist/flags/fk.svg +1 -0
  105. package/dist/flags/fm.svg +1 -0
  106. package/dist/flags/fo.svg +1 -0
  107. package/dist/flags/fr.svg +1 -0
  108. package/dist/flags/ga.svg +1 -0
  109. package/dist/flags/gb.svg +1 -0
  110. package/dist/flags/gd.svg +1 -0
  111. package/dist/flags/ge.svg +1 -0
  112. package/dist/flags/gf.svg +1 -0
  113. package/dist/flags/gg.svg +1 -0
  114. package/dist/flags/gh.svg +1 -0
  115. package/dist/flags/gi.svg +1 -0
  116. package/dist/flags/gl.svg +1 -0
  117. package/dist/flags/gm.svg +1 -0
  118. package/dist/flags/gn.svg +1 -0
  119. package/dist/flags/gp.svg +1 -0
  120. package/dist/flags/gq.svg +1 -0
  121. package/dist/flags/gr.svg +1 -0
  122. package/dist/flags/gs.svg +1 -0
  123. package/dist/flags/gt.svg +1 -0
  124. package/dist/flags/gu.svg +1 -0
  125. package/dist/flags/gw.svg +1 -0
  126. package/dist/flags/gy.svg +1 -0
  127. package/dist/flags/hk.svg +1 -0
  128. package/dist/flags/hm.svg +1 -0
  129. package/dist/flags/hn.svg +1 -0
  130. package/dist/flags/hr.svg +1 -0
  131. package/dist/flags/ht.svg +1 -0
  132. package/dist/flags/hu.svg +1 -0
  133. package/dist/flags/id.svg +1 -0
  134. package/dist/flags/ie.svg +1 -0
  135. package/dist/flags/il.svg +1 -0
  136. package/dist/flags/im.svg +1 -0
  137. package/dist/flags/in.svg +1 -0
  138. package/dist/flags/io.svg +1 -0
  139. package/dist/flags/iq.svg +1 -0
  140. package/dist/flags/ir.svg +1 -0
  141. package/dist/flags/is.svg +1 -0
  142. package/dist/flags/it.svg +1 -0
  143. package/dist/flags/je.svg +1 -0
  144. package/dist/flags/jm.svg +1 -0
  145. package/dist/flags/jo.svg +1 -0
  146. package/dist/flags/jp.svg +1 -0
  147. package/dist/flags/ke.svg +1 -0
  148. package/dist/flags/kg.svg +1 -0
  149. package/dist/flags/kh.svg +1 -0
  150. package/dist/flags/ki.svg +1 -0
  151. package/dist/flags/km.svg +1 -0
  152. package/dist/flags/kn.svg +1 -0
  153. package/dist/flags/kp.svg +1 -0
  154. package/dist/flags/kr.svg +1 -0
  155. package/dist/flags/kw.svg +1 -0
  156. package/dist/flags/ky.svg +1 -0
  157. package/dist/flags/kz.svg +1 -0
  158. package/dist/flags/la.svg +1 -0
  159. package/dist/flags/lb.svg +1 -0
  160. package/dist/flags/lc.svg +1 -0
  161. package/dist/flags/li.svg +1 -0
  162. package/dist/flags/lk.svg +1 -0
  163. package/dist/flags/lr.svg +1 -0
  164. package/dist/flags/ls.svg +1 -0
  165. package/dist/flags/lt.svg +1 -0
  166. package/dist/flags/lu.svg +1 -0
  167. package/dist/flags/lv.svg +1 -0
  168. package/dist/flags/ly.svg +1 -0
  169. package/dist/flags/ma.svg +1 -0
  170. package/dist/flags/mc.svg +1 -0
  171. package/dist/flags/md.svg +1 -0
  172. package/dist/flags/me.svg +1 -0
  173. package/dist/flags/mf.svg +1 -0
  174. package/dist/flags/mg.svg +1 -0
  175. package/dist/flags/mh.svg +1 -0
  176. package/dist/flags/mk.svg +1 -0
  177. package/dist/flags/ml.svg +1 -0
  178. package/dist/flags/mm.svg +1 -0
  179. package/dist/flags/mn.svg +1 -0
  180. package/dist/flags/mo.svg +1 -0
  181. package/dist/flags/mp.svg +1 -0
  182. package/dist/flags/mq.svg +1 -0
  183. package/dist/flags/mr.svg +1 -0
  184. package/dist/flags/ms.svg +1 -0
  185. package/dist/flags/mt.svg +1 -0
  186. package/dist/flags/mu.svg +1 -0
  187. package/dist/flags/mv.svg +1 -0
  188. package/dist/flags/mw.svg +1 -0
  189. package/dist/flags/mx.svg +1 -0
  190. package/dist/flags/my.svg +1 -0
  191. package/dist/flags/mz.svg +1 -0
  192. package/dist/flags/na.svg +1 -0
  193. package/dist/flags/nc.svg +1 -0
  194. package/dist/flags/ne.svg +1 -0
  195. package/dist/flags/nf.svg +1 -0
  196. package/dist/flags/ng.svg +1 -0
  197. package/dist/flags/ni.svg +1 -0
  198. package/dist/flags/nl.svg +1 -0
  199. package/dist/flags/no.svg +1 -0
  200. package/dist/flags/np.svg +1 -0
  201. package/dist/flags/nr.svg +1 -0
  202. package/dist/flags/nu.svg +1 -0
  203. package/dist/flags/nz.svg +1 -0
  204. package/dist/flags/om.svg +1 -0
  205. package/dist/flags/pa.svg +1 -0
  206. package/dist/flags/pe.svg +1 -0
  207. package/dist/flags/pf.svg +1 -0
  208. package/dist/flags/pg.svg +1 -0
  209. package/dist/flags/ph.svg +1 -0
  210. package/dist/flags/pk.svg +1 -0
  211. package/dist/flags/pl.svg +1 -0
  212. package/dist/flags/pm.svg +1 -0
  213. package/dist/flags/pn.svg +1 -0
  214. package/dist/flags/pr.svg +1 -0
  215. package/dist/flags/ps.svg +1 -0
  216. package/dist/flags/pt.svg +1 -0
  217. package/dist/flags/pw.svg +1 -0
  218. package/dist/flags/py.svg +1 -0
  219. package/dist/flags/qa.svg +1 -0
  220. package/dist/flags/re.svg +1 -0
  221. package/dist/flags/ro.svg +1 -0
  222. package/dist/flags/rs.svg +1 -0
  223. package/dist/flags/ru.svg +1 -0
  224. package/dist/flags/rw.svg +1 -0
  225. package/dist/flags/sa.svg +1 -0
  226. package/dist/flags/sb.svg +1 -0
  227. package/dist/flags/sc.svg +1 -0
  228. package/dist/flags/sd.svg +1 -0
  229. package/dist/flags/se.svg +1 -0
  230. package/dist/flags/sg.svg +1 -0
  231. package/dist/flags/sh.svg +1 -0
  232. package/dist/flags/si.svg +1 -0
  233. package/dist/flags/sj.svg +1 -0
  234. package/dist/flags/sk.svg +1 -0
  235. package/dist/flags/sl.svg +1 -0
  236. package/dist/flags/sm.svg +1 -0
  237. package/dist/flags/sn.svg +1 -0
  238. package/dist/flags/so.svg +1 -0
  239. package/dist/flags/sr.svg +1 -0
  240. package/dist/flags/ss.svg +1 -0
  241. package/dist/flags/st.svg +1 -0
  242. package/dist/flags/sv.svg +1 -0
  243. package/dist/flags/sx.svg +1 -0
  244. package/dist/flags/sy.svg +1 -0
  245. package/dist/flags/sz.svg +1 -0
  246. package/dist/flags/tc.svg +1 -0
  247. package/dist/flags/td.svg +1 -0
  248. package/dist/flags/tf.svg +1 -0
  249. package/dist/flags/tg.svg +1 -0
  250. package/dist/flags/th.svg +1 -0
  251. package/dist/flags/tj.svg +1 -0
  252. package/dist/flags/tk.svg +1 -0
  253. package/dist/flags/tl.svg +1 -0
  254. package/dist/flags/tm.svg +1 -0
  255. package/dist/flags/tn.svg +1 -0
  256. package/dist/flags/to.svg +1 -0
  257. package/dist/flags/tr.svg +1 -0
  258. package/dist/flags/tt.svg +1 -0
  259. package/dist/flags/tv.svg +1 -0
  260. package/dist/flags/tw.svg +1 -0
  261. package/dist/flags/tz.svg +1 -0
  262. package/dist/flags/ua.svg +1 -0
  263. package/dist/flags/ug.svg +1 -0
  264. package/dist/flags/um.svg +1 -0
  265. package/dist/flags/us.svg +1 -0
  266. package/dist/flags/uy.svg +1 -0
  267. package/dist/flags/uz.svg +1 -0
  268. package/dist/flags/va.svg +1 -0
  269. package/dist/flags/vc.svg +1 -0
  270. package/dist/flags/ve.svg +1 -0
  271. package/dist/flags/vg.svg +1 -0
  272. package/dist/flags/vi.svg +1 -0
  273. package/dist/flags/vn.svg +1 -0
  274. package/dist/flags/vu.svg +1 -0
  275. package/dist/flags/wf.svg +1 -0
  276. package/dist/flags/ws.svg +1 -0
  277. package/dist/flags/xk.svg +1 -0
  278. package/dist/flags/ye.svg +1 -0
  279. package/dist/flags/yt.svg +1 -0
  280. package/dist/flags/za.svg +1 -0
  281. package/dist/flags/zm.svg +1 -0
  282. package/dist/flags/zw.svg +1 -0
  283. package/dist/forms.d.ts +242 -0
  284. package/dist/forms.js +41 -0
  285. package/dist/forms.js.map +1 -0
  286. package/dist/index.d.ts +12 -0
  287. package/dist/index.js +163 -0
  288. package/dist/index.js.map +1 -0
  289. package/dist/manifest.json +33 -0
  290. package/dist/overlays.d.ts +75 -0
  291. package/dist/overlays.js +17 -0
  292. package/dist/overlays.js.map +1 -0
  293. package/dist/styles.css +3 -0
  294. package/dist/themes.css +125 -0
  295. package/package.json +156 -0
@@ -0,0 +1,769 @@
1
+ import {
2
+ __objRest,
3
+ __spreadProps,
4
+ __spreadValues
5
+ } from "./chunk-2NMEKWO5.js";
6
+
7
+ // src/components/chart/LazyApexChart.tsx
8
+ import { useEffect, useState } from "react";
9
+ import { jsx } from "react/jsx-runtime";
10
+ function LazyApexChart(props) {
11
+ const [ApexChart, setApexChart] = useState(null);
12
+ useEffect(() => {
13
+ let active = true;
14
+ import("react-apexcharts").then(({ default: component }) => {
15
+ if (active) setApexChart(() => component);
16
+ });
17
+ return () => {
18
+ active = false;
19
+ };
20
+ }, []);
21
+ if (!ApexChart) {
22
+ return /* @__PURE__ */ jsx(
23
+ "div",
24
+ {
25
+ className: "flex min-h-40 items-center justify-center text-sm text-content-muted",
26
+ role: "status",
27
+ "aria-label": "Carregando grafico",
28
+ children: "Carregando grafico..."
29
+ }
30
+ );
31
+ }
32
+ return /* @__PURE__ */ jsx(ApexChart, __spreadValues({}, props));
33
+ }
34
+
35
+ // src/utils/chart-theme.ts
36
+ var SERIES_FALLBACKS = [
37
+ "#0f62c1",
38
+ "#16d39a",
39
+ "#feb019",
40
+ "#ff4560",
41
+ "#775dd0",
42
+ "#00b8d9",
43
+ "#ff8f00",
44
+ "#26a69a",
45
+ "#ec407a",
46
+ "#7cb342",
47
+ "#5c6bc0",
48
+ "#8d6e63"
49
+ ];
50
+ var DONUT_SERIES_FALLBACKS = [
51
+ "#66d288",
52
+ "#3182f6",
53
+ "#ffc25c",
54
+ "#7c58e8",
55
+ "#ff6b6b",
56
+ ...SERIES_FALLBACKS.slice(5)
57
+ ];
58
+ var MUTED_SERIES_FALLBACKS = [
59
+ "#c5cad0",
60
+ "#d9dde1",
61
+ "#eceef0",
62
+ "#aeb5bd"
63
+ ];
64
+ var readColorToken = (token, fallback) => {
65
+ var _a;
66
+ if (typeof window === "undefined") return fallback;
67
+ const value = window.getComputedStyle((_a = document.body) != null ? _a : document.documentElement).getPropertyValue(token).trim();
68
+ return value ? `rgb(${value})` : fallback;
69
+ };
70
+ var getChartTheme = () => ({
71
+ series: SERIES_FALLBACKS.map(
72
+ (fallback, index) => readColorToken(`--chart-${index + 1}`, fallback)
73
+ ),
74
+ donutSeries: DONUT_SERIES_FALLBACKS.map(
75
+ (fallback, index) => readColorToken(`--chart-donut-${index + 1}`, fallback)
76
+ ),
77
+ mutedSeries: MUTED_SERIES_FALLBACKS.map(
78
+ (fallback, index) => readColorToken(`--chart-muted-${index + 1}`, fallback)
79
+ ),
80
+ balance: readColorToken("--chart-balance", "#00a76f"),
81
+ invested: readColorToken("--chart-invested", "#1e90ff"),
82
+ grid: readColorToken("--chart-grid", "#e5e7eb"),
83
+ axis: readColorToken("--chart-axis", "#6b7280"),
84
+ axisBorder: readColorToken("--chart-axis-border", "#d1d5db"),
85
+ tooltipText: readColorToken("--chart-tooltip-text", "#111827"),
86
+ neutralLine: readColorToken("--chart-line-neutral", "#181818"),
87
+ surface: readColorToken("--surface-card", "#ffffff")
88
+ });
89
+ var getChartSeriesRecord = (backendColors, count = 5) => {
90
+ const { series } = getChartTheme();
91
+ const fallbackColors = Object.fromEntries(
92
+ Array.from({ length: count }, (_, index) => [index + 1, series[index]])
93
+ );
94
+ const isDarkSchemeActive = typeof document !== "undefined" && document.documentElement.dataset.colorScheme === "dark";
95
+ const highContrastActive = typeof document !== "undefined" && document.documentElement.dataset.contrast === "high";
96
+ return highContrastActive || isDarkSchemeActive ? fallbackColors : __spreadValues(__spreadValues({}, fallbackColors), backendColors);
97
+ };
98
+
99
+ // src/components/chart/interactive-donut-utils.ts
100
+ function resolveInteractiveDonutColors({
101
+ count,
102
+ colors,
103
+ mutedColors,
104
+ selectedIndex
105
+ }) {
106
+ if (colors.length === 0 || mutedColors.length === 0) return [];
107
+ return Array.from({ length: count }, (_, index) => {
108
+ const color = colors[index % colors.length];
109
+ if (selectedIndex === null || index === selectedIndex) return color;
110
+ return mutedColors[index % mutedColors.length];
111
+ });
112
+ }
113
+ function resolveRelativeDonutSelection({
114
+ currentIndex,
115
+ direction,
116
+ count
117
+ }) {
118
+ if (count <= 0) return null;
119
+ if (currentIndex === null) return direction > 0 ? 0 : count - 1;
120
+ return (currentIndex + direction + count) % count;
121
+ }
122
+ var TOOLTIP_ENTITIES = {
123
+ "&": "&amp;",
124
+ "<": "&lt;",
125
+ ">": "&gt;",
126
+ '"': "&quot;",
127
+ "'": "&#039;"
128
+ };
129
+ function escapeDonutTooltipText(value) {
130
+ return String(value != null ? value : "").replace(
131
+ /[&<>"']/g,
132
+ (character) => TOOLTIP_ENTITIES[character]
133
+ );
134
+ }
135
+
136
+ // src/hooks/useHighContrastPreference.ts
137
+ import { useEffect as useEffect2, useState as useState2 } from "react";
138
+ function useHighContrastPreference() {
139
+ const [highContrast, setHighContrast] = useState2(false);
140
+ useEffect2(() => {
141
+ const root = document.documentElement;
142
+ const read = () => setHighContrast(root.dataset.contrast === "high");
143
+ read();
144
+ const observer = new MutationObserver(read);
145
+ observer.observe(root, {
146
+ attributes: true,
147
+ attributeFilter: ["data-contrast"]
148
+ });
149
+ return () => observer.disconnect();
150
+ }, []);
151
+ return highContrast;
152
+ }
153
+
154
+ // src/components/chart/InteractiveDonutChart.tsx
155
+ import {
156
+ useEffect as useEffect3,
157
+ useId,
158
+ useMemo,
159
+ useRef,
160
+ useState as useState3
161
+ } from "react";
162
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
163
+ function InteractiveDonutChart(_a) {
164
+ var _b = _a, {
165
+ options = {},
166
+ series,
167
+ colors,
168
+ mutedColors,
169
+ valueFormatter = (value) => new Intl.NumberFormat("pt-BR", {
170
+ style: "currency",
171
+ currency: "BRL"
172
+ }).format(value),
173
+ ariaLabel = "Gr\xE1fico de distribui\xE7\xE3o",
174
+ className,
175
+ chartClassName,
176
+ responsiveHeight = false,
177
+ highContrastOverride
178
+ } = _b, rest = __objRest(_b, [
179
+ "options",
180
+ "series",
181
+ "colors",
182
+ "mutedColors",
183
+ "valueFormatter",
184
+ "ariaLabel",
185
+ "className",
186
+ "chartClassName",
187
+ "responsiveHeight",
188
+ "highContrastOverride"
189
+ ]);
190
+ var _a2, _b2, _c, _d, _e, _f, _g, _h, _i;
191
+ const storedHighContrast = useHighContrastPreference();
192
+ const highContrast = highContrastOverride != null ? highContrastOverride : storedHighContrast;
193
+ const [selectedIndex, setSelectedIndex] = useState3(null);
194
+ const [legendSelectedIndex, setLegendSelectedIndex] = useState3(
195
+ null
196
+ );
197
+ const containerRef = useRef(null);
198
+ const instructionsId = useId();
199
+ const chartTheme = getChartTheme();
200
+ const baseColors = !highContrast && (colors == null ? void 0 : colors.length) ? colors : chartTheme.donutSeries;
201
+ const neutralColors = !highContrast && (mutedColors == null ? void 0 : mutedColors.length) ? mutedColors : chartTheme.mutedSeries;
202
+ const labels = useMemo(() => {
203
+ var _a3;
204
+ return (_a3 = options.labels) != null ? _a3 : [];
205
+ }, [options.labels]);
206
+ useEffect3(() => {
207
+ setSelectedIndex(
208
+ (current) => current !== null && current >= series.length ? null : current
209
+ );
210
+ setLegendSelectedIndex(
211
+ (current) => current !== null && current >= series.length ? null : current
212
+ );
213
+ }, [series.length]);
214
+ useEffect3(() => {
215
+ const resetOnOutsideClick = (event) => {
216
+ var _a3;
217
+ if ((_a3 = containerRef.current) == null ? void 0 : _a3.contains(event.target)) return;
218
+ setSelectedIndex(null);
219
+ setLegendSelectedIndex(null);
220
+ };
221
+ document.addEventListener("pointerdown", resetOnOutsideClick);
222
+ return () => document.removeEventListener("pointerdown", resetOnOutsideClick);
223
+ }, []);
224
+ const [pieCircle, setPieCircle] = useState3(null);
225
+ const [measuredChartHeight, setMeasuredChartHeight] = useState3(
226
+ null
227
+ );
228
+ useEffect3(() => {
229
+ const container = containerRef.current;
230
+ if (!container) return;
231
+ const measure = () => {
232
+ const containerRect = container.getBoundingClientRect();
233
+ if (responsiveHeight) {
234
+ const fallbackHeight = typeof rest.height === "number" ? rest.height : 0;
235
+ const nextHeight = Math.max(
236
+ fallbackHeight,
237
+ Math.floor(containerRect.height)
238
+ );
239
+ if (nextHeight > 0) {
240
+ setMeasuredChartHeight(
241
+ (current) => current === nextHeight ? current : nextHeight
242
+ );
243
+ }
244
+ }
245
+ const areas = container.querySelectorAll(
246
+ ".apexcharts-pie-area"
247
+ );
248
+ if (!areas.length) return;
249
+ let minX = Infinity;
250
+ let minY = Infinity;
251
+ let maxX = -Infinity;
252
+ let maxY = -Infinity;
253
+ areas.forEach((area) => {
254
+ const rect = area.getBoundingClientRect();
255
+ minX = Math.min(minX, rect.left);
256
+ minY = Math.min(minY, rect.top);
257
+ maxX = Math.max(maxX, rect.right);
258
+ maxY = Math.max(maxY, rect.bottom);
259
+ });
260
+ setPieCircle({
261
+ cx: (minX + maxX) / 2 - containerRect.left,
262
+ cy: (minY + maxY) / 2 - containerRect.top,
263
+ diameter: Math.min(maxX - minX, maxY - minY)
264
+ });
265
+ };
266
+ measure();
267
+ const resizeObserver = new ResizeObserver(measure);
268
+ resizeObserver.observe(container);
269
+ const mutationObserver = new MutationObserver(measure);
270
+ mutationObserver.observe(container, {
271
+ childList: true,
272
+ subtree: true,
273
+ attributes: true,
274
+ attributeFilter: ["d"]
275
+ });
276
+ return () => {
277
+ resizeObserver.disconnect();
278
+ mutationObserver.disconnect();
279
+ };
280
+ }, [responsiveHeight, rest.height, series.length]);
281
+ const donutSizeRatio = useMemo(() => {
282
+ var _a3, _b3, _c2, _d2;
283
+ const size = (_d2 = (_c2 = (_b3 = (_a3 = options.plotOptions) == null ? void 0 : _a3.pie) == null ? void 0 : _b3.donut) == null ? void 0 : _c2.size) != null ? _d2 : "65%";
284
+ const parsed = parseFloat(String(size));
285
+ return Number.isFinite(parsed) ? parsed / 100 : 0.65;
286
+ }, [(_c = (_b2 = (_a2 = options.plotOptions) == null ? void 0 : _a2.pie) == null ? void 0 : _b2.donut) == null ? void 0 : _c.size]);
287
+ const displayColors = resolveInteractiveDonutColors({
288
+ count: series.length,
289
+ colors: baseColors,
290
+ mutedColors: neutralColors,
291
+ selectedIndex
292
+ });
293
+ const legendValue = legendSelectedIndex !== null ? {
294
+ label: (_d = labels[legendSelectedIndex]) != null ? _d : `Categoria ${legendSelectedIndex + 1}`,
295
+ value: Number((_e = series[legendSelectedIndex]) != null ? _e : 0)
296
+ } : null;
297
+ const interactiveOptions = useMemo(() => {
298
+ var _a3, _b3, _c2, _d2, _e2, _f2, _g2, _h2, _i2, _j, _k, _l, _m;
299
+ const originalSelection = (_b3 = (_a3 = options.chart) == null ? void 0 : _a3.events) == null ? void 0 : _b3.dataPointSelection;
300
+ const originalLegendClick = (_d2 = (_c2 = options.chart) == null ? void 0 : _c2.events) == null ? void 0 : _d2.legendClick;
301
+ return __spreadProps(__spreadValues({}, options), {
302
+ colors: displayColors,
303
+ fill: highContrast ? {
304
+ type: "pattern",
305
+ pattern: {
306
+ style: [
307
+ "verticalLines",
308
+ "horizontalLines",
309
+ "slantedLines",
310
+ "squares",
311
+ "circles"
312
+ ],
313
+ width: 6,
314
+ height: 6,
315
+ strokeWidth: 2
316
+ }
317
+ } : __spreadProps(__spreadValues({}, options.fill), {
318
+ type: (_f2 = (_e2 = options.fill) == null ? void 0 : _e2.type) != null ? _f2 : "solid",
319
+ opacity: (_h2 = (_g2 = options.fill) == null ? void 0 : _g2.opacity) != null ? _h2 : 1
320
+ }),
321
+ stroke: highContrast ? __spreadProps(__spreadValues({}, options.stroke), { colors: ["#ffffff"], width: 2 }) : options.stroke,
322
+ chart: __spreadProps(__spreadValues({}, options.chart), {
323
+ events: __spreadProps(__spreadValues({}, (_i2 = options.chart) == null ? void 0 : _i2.events), {
324
+ dataPointSelection(event, chart, config) {
325
+ originalSelection == null ? void 0 : originalSelection(event, chart, config);
326
+ const nextIndex = Number(config == null ? void 0 : config.dataPointIndex);
327
+ if (!Number.isInteger(nextIndex) || nextIndex < 0) return;
328
+ setSelectedIndex(
329
+ (current) => current === nextIndex ? null : nextIndex
330
+ );
331
+ },
332
+ legendClick(chartContext, seriesIndex, config) {
333
+ originalLegendClick == null ? void 0 : originalLegendClick(chartContext, seriesIndex, config);
334
+ if (typeof seriesIndex !== "number" || seriesIndex < 0) return;
335
+ setLegendSelectedIndex(
336
+ (current) => current === seriesIndex ? null : seriesIndex
337
+ );
338
+ }
339
+ })
340
+ }),
341
+ legend: __spreadProps(__spreadValues({}, options.legend), {
342
+ labels: __spreadProps(__spreadValues({}, (_j = options.legend) == null ? void 0 : _j.labels), {
343
+ colors: chartTheme.axis
344
+ }),
345
+ onItemClick: __spreadProps(__spreadValues({}, (_k = options.legend) == null ? void 0 : _k.onItemClick), {
346
+ toggleDataSeries: false
347
+ })
348
+ }),
349
+ states: __spreadProps(__spreadValues({}, options.states), {
350
+ hover: __spreadProps(__spreadValues({}, (_l = options.states) == null ? void 0 : _l.hover), {
351
+ filter: { type: "none" }
352
+ }),
353
+ active: __spreadProps(__spreadValues({}, (_m = options.states) == null ? void 0 : _m.active), {
354
+ allowMultipleDataPointsSelection: false,
355
+ filter: { type: "none" }
356
+ })
357
+ }),
358
+ tooltip: __spreadProps(__spreadValues({}, options.tooltip), {
359
+ enabled: true,
360
+ followCursor: true,
361
+ custom({ series: tooltipSeries, seriesIndex }) {
362
+ var _a4, _b4;
363
+ const value = Number((_a4 = tooltipSeries == null ? void 0 : tooltipSeries[seriesIndex]) != null ? _a4 : 0);
364
+ const label = escapeDonutTooltipText(
365
+ (_b4 = labels[seriesIndex]) != null ? _b4 : `Categoria ${seriesIndex + 1}`
366
+ );
367
+ const formattedValue = escapeDonutTooltipText(valueFormatter(value));
368
+ return `<div class="donut-chart-tooltip"><span class="donut-chart-tooltip-label">${label}</span><strong class="donut-chart-tooltip-value">${formattedValue}</strong></div>`;
369
+ }
370
+ })
371
+ });
372
+ }, [
373
+ chartTheme.axis,
374
+ displayColors,
375
+ highContrast,
376
+ labels,
377
+ options,
378
+ valueFormatter
379
+ ]);
380
+ const selectedLabel = selectedIndex === null ? "Nenhuma categoria selecionada" : `${(_f = labels[selectedIndex]) != null ? _f : `Categoria ${selectedIndex + 1}`}: ${valueFormatter(
381
+ Number((_g = series[selectedIndex]) != null ? _g : 0)
382
+ )}`;
383
+ const legendValueLabel = legendSelectedIndex === null ? "" : `Valor em destaque: ${(_h = labels[legendSelectedIndex]) != null ? _h : `Categoria ${legendSelectedIndex + 1}`}: ${valueFormatter(Number((_i = series[legendSelectedIndex]) != null ? _i : 0))}`;
384
+ const handleKeyDown = (event) => {
385
+ if (["ArrowRight", "ArrowDown", "ArrowLeft", "ArrowUp"].includes(event.key)) {
386
+ event.preventDefault();
387
+ const direction = event.key === "ArrowRight" || event.key === "ArrowDown" ? 1 : -1;
388
+ setSelectedIndex(
389
+ (current) => resolveRelativeDonutSelection({
390
+ currentIndex: current,
391
+ direction,
392
+ count: series.length
393
+ })
394
+ );
395
+ }
396
+ if (event.key === "Escape") {
397
+ setSelectedIndex(null);
398
+ setLegendSelectedIndex(null);
399
+ }
400
+ };
401
+ return /* @__PURE__ */ jsxs(
402
+ "div",
403
+ {
404
+ ref: containerRef,
405
+ role: "group",
406
+ tabIndex: 0,
407
+ "aria-label": ariaLabel,
408
+ "aria-describedby": instructionsId,
409
+ onKeyDown: handleKeyDown,
410
+ className: `chart-keyboard-focus-ring relative min-w-0 rounded-sm ${className != null ? className : ""}`.trim(),
411
+ children: [
412
+ /* @__PURE__ */ jsx2(
413
+ LazyApexChart,
414
+ __spreadProps(__spreadValues({}, rest), {
415
+ className: chartClassName,
416
+ height: responsiveHeight && measuredChartHeight ? measuredChartHeight : rest.height,
417
+ options: interactiveOptions,
418
+ series,
419
+ type: "donut"
420
+ }),
421
+ highContrast ? "donut-high-contrast" : "donut-standard"
422
+ ),
423
+ legendValue && pieCircle && /* @__PURE__ */ jsxs(
424
+ "div",
425
+ {
426
+ "aria-hidden": "true",
427
+ className: "pointer-events-none absolute flex flex-col items-center justify-center text-center",
428
+ style: {
429
+ left: pieCircle.cx,
430
+ top: pieCircle.cy,
431
+ width: pieCircle.diameter * donutSizeRatio * 0.94,
432
+ transform: "translate(-50%, -50%)"
433
+ },
434
+ children: [
435
+ /* @__PURE__ */ jsx2("span", { className: "w-full truncate text-xs leading-tight text-content-secondary", children: legendValue.label }),
436
+ /* @__PURE__ */ jsx2("span", { className: "w-full break-words text-md font-bold leading-tight text-content-primary", children: valueFormatter(legendValue.value) })
437
+ ]
438
+ }
439
+ ),
440
+ /* @__PURE__ */ jsx2("span", { className: "sr-only", "aria-live": "polite", children: selectedLabel }),
441
+ /* @__PURE__ */ jsx2("span", { className: "sr-only", "aria-live": "polite", children: legendValueLabel }),
442
+ /* @__PURE__ */ jsx2("span", { id: instructionsId, className: "sr-only", children: "Use as setas para navegar pelas categorias e Escape para limpar a sele\xE7\xE3o." })
443
+ ]
444
+ }
445
+ );
446
+ }
447
+
448
+ // src/components/chart/TimeSeriesChart.tsx
449
+ import { useEffect as useEffect4, useRef as useRef2, useState as useState4 } from "react";
450
+ import { jsx as jsx3 } from "react/jsx-runtime";
451
+ function TimeSeriesChart(_a) {
452
+ var _b = _a, {
453
+ options,
454
+ ariaLabel,
455
+ className,
456
+ chartClassName,
457
+ responsiveHeight = false,
458
+ highContrastOverride
459
+ } = _b, chartProps = __objRest(_b, [
460
+ "options",
461
+ "ariaLabel",
462
+ "className",
463
+ "chartClassName",
464
+ "responsiveHeight",
465
+ "highContrastOverride"
466
+ ]);
467
+ var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
468
+ const storedHighContrast = useHighContrastPreference();
469
+ const highContrast = highContrastOverride != null ? highContrastOverride : storedHighContrast;
470
+ const theme = getChartTheme();
471
+ const containerRef = useRef2(null);
472
+ const [measuredHeight, setMeasuredHeight] = useState4(null);
473
+ const [measuredWidth, setMeasuredWidth] = useState4(null);
474
+ const themeKey = [
475
+ highContrast ? "high-contrast" : "standard",
476
+ theme.axis,
477
+ theme.axisBorder,
478
+ theme.grid,
479
+ theme.surface,
480
+ ...theme.series
481
+ ].join("|");
482
+ useEffect4(() => {
483
+ if (!responsiveHeight) {
484
+ setMeasuredHeight(null);
485
+ setMeasuredWidth(null);
486
+ return;
487
+ }
488
+ const container = containerRef.current;
489
+ if (!container || typeof ResizeObserver === "undefined") return;
490
+ const fallbackHeight = typeof chartProps.height === "number" ? chartProps.height : 0;
491
+ let frame = 0;
492
+ const measure = () => {
493
+ cancelAnimationFrame(frame);
494
+ frame = requestAnimationFrame(() => {
495
+ const bounds = container.getBoundingClientRect();
496
+ const nextWidth = Math.floor(bounds.width);
497
+ const nextHeight = Math.max(
498
+ fallbackHeight,
499
+ Math.floor(bounds.height)
500
+ );
501
+ if (nextWidth > 0) {
502
+ setMeasuredWidth(
503
+ (current) => current === nextWidth ? current : nextWidth
504
+ );
505
+ }
506
+ if (nextHeight > 0) {
507
+ setMeasuredHeight(
508
+ (current) => current === nextHeight ? current : nextHeight
509
+ );
510
+ }
511
+ });
512
+ };
513
+ measure();
514
+ const resizeObserver = new ResizeObserver(measure);
515
+ resizeObserver.observe(container);
516
+ return () => {
517
+ cancelAnimationFrame(frame);
518
+ resizeObserver.disconnect();
519
+ };
520
+ }, [chartProps.height, responsiveHeight]);
521
+ const renderedHeight = responsiveHeight && measuredHeight ? measuredHeight : chartProps.height;
522
+ const renderedWidth = responsiveHeight && measuredWidth ? measuredWidth : chartProps.width;
523
+ const xAxis = options.xaxis;
524
+ const xAxisCategories = Array.isArray(xAxis == null ? void 0 : xAxis.categories) ? xAxis.categories : [];
525
+ const availableWidth = typeof renderedWidth === "number" ? renderedWidth : 720;
526
+ const maxVisibleXAxisLabels = Math.max(
527
+ 4,
528
+ Math.min(12, Math.floor(availableWidth / 88))
529
+ );
530
+ const xAxisLabelStep = Math.max(
531
+ 1,
532
+ Math.ceil(xAxisCategories.length / maxVisibleXAxisLabels)
533
+ );
534
+ const hasDenseXAxis = xAxisCategories.length > maxVisibleXAxisLabels;
535
+ const xAxisCategoriesKey = JSON.stringify(xAxisCategories);
536
+ const responsiveXAxisFormatter = xAxisCategories.length ? (value, _timestamp, opts) => {
537
+ var _a3, _b3;
538
+ const fallbackIndex = xAxisCategories.findIndex(
539
+ (category) => String(category) === String(value)
540
+ );
541
+ const index = (_a3 = opts == null ? void 0 : opts.dataPointIndex) != null ? _a3 : fallbackIndex >= 0 ? fallbackIndex : 0;
542
+ const isLast = index === xAxisCategories.length - 1;
543
+ return index % xAxisLabelStep === 0 || isLast ? String((_b3 = xAxisCategories[index]) != null ? _b3 : value) : "";
544
+ } : (_a2 = xAxis == null ? void 0 : xAxis.labels) == null ? void 0 : _a2.formatter;
545
+ const renderKey = [
546
+ themeKey,
547
+ renderedWidth != null ? renderedWidth : "auto-width",
548
+ renderedHeight != null ? renderedHeight : "auto-height",
549
+ xAxisCategoriesKey
550
+ ].join("|");
551
+ const yAxis = Array.isArray(options.yaxis) ? options.yaxis.map((axis) => {
552
+ var _a3;
553
+ return __spreadProps(__spreadValues({}, axis), {
554
+ labels: __spreadProps(__spreadValues({}, axis.labels), {
555
+ show: true,
556
+ style: __spreadProps(__spreadValues({
557
+ fontSize: "11px",
558
+ fontWeight: 500
559
+ }, (_a3 = axis.labels) == null ? void 0 : _a3.style), {
560
+ colors: theme.axis
561
+ })
562
+ })
563
+ });
564
+ }) : __spreadProps(__spreadValues({}, options.yaxis), {
565
+ labels: __spreadProps(__spreadValues({}, (_b2 = options.yaxis) == null ? void 0 : _b2.labels), {
566
+ show: true,
567
+ style: __spreadProps(__spreadValues({
568
+ fontSize: "11px",
569
+ fontWeight: 500
570
+ }, (_d = (_c = options.yaxis) == null ? void 0 : _c.labels) == null ? void 0 : _d.style), {
571
+ colors: theme.axis
572
+ })
573
+ })
574
+ });
575
+ const sharedOptions = __spreadProps(__spreadValues({}, options), {
576
+ colors: highContrast ? [...theme.series] : options.colors,
577
+ chart: __spreadProps(__spreadValues({
578
+ toolbar: { show: false },
579
+ zoom: { enabled: false },
580
+ parentHeightOffset: 0,
581
+ redrawOnParentResize: true,
582
+ redrawOnWindowResize: true
583
+ }, options.chart), {
584
+ foreColor: theme.axis
585
+ }),
586
+ dataLabels: __spreadValues({
587
+ enabled: false
588
+ }, options.dataLabels),
589
+ grid: __spreadProps(__spreadValues({
590
+ show: true,
591
+ borderColor: theme.grid,
592
+ strokeDashArray: 0
593
+ }, options.grid), {
594
+ xaxis: {
595
+ lines: __spreadProps(__spreadValues({}, (_f = (_e = options.grid) == null ? void 0 : _e.xaxis) == null ? void 0 : _f.lines), {
596
+ show: hasDenseXAxis ? false : (_j = (_i = (_h = (_g = options.grid) == null ? void 0 : _g.xaxis) == null ? void 0 : _h.lines) == null ? void 0 : _i.show) != null ? _j : true
597
+ })
598
+ },
599
+ yaxis: {
600
+ lines: __spreadValues({ show: true }, (_l = (_k = options.grid) == null ? void 0 : _k.yaxis) == null ? void 0 : _l.lines)
601
+ },
602
+ padding: __spreadValues({
603
+ top: 0,
604
+ right: 8,
605
+ bottom: 8,
606
+ left: 8
607
+ }, (_m = options.grid) == null ? void 0 : _m.padding)
608
+ }),
609
+ stroke: __spreadProps(__spreadValues({
610
+ width: 2,
611
+ curve: "straight"
612
+ }, options.stroke), {
613
+ colors: highContrast ? [...theme.series] : (_n = options.stroke) == null ? void 0 : _n.colors,
614
+ dashArray: highContrast ? [0, 6, 2, 8, 4, 10, 1, 7, 3, 9, 5, 11] : (_p = (_o = options.stroke) == null ? void 0 : _o.dashArray) != null ? _p : 0
615
+ }),
616
+ markers: __spreadProps(__spreadValues({
617
+ strokeWidth: 1,
618
+ strokeColors: [theme.surface]
619
+ }, options.markers), {
620
+ size: highContrast ? 4 : (_r = (_q = options.markers) == null ? void 0 : _q.size) != null ? _r : 3,
621
+ hover: __spreadValues({ size: 4 }, (_s = options.markers) == null ? void 0 : _s.hover)
622
+ }),
623
+ annotations: highContrast ? __spreadProps(__spreadValues({}, options.annotations), {
624
+ xaxis: (_u = (_t = options.annotations) == null ? void 0 : _t.xaxis) == null ? void 0 : _u.map((annotation, index) => __spreadProps(__spreadValues({}, annotation), {
625
+ fillColor: theme.series[index % theme.series.length],
626
+ opacity: 0.28
627
+ }))
628
+ }) : options.annotations,
629
+ xaxis: __spreadProps(__spreadValues({
630
+ tooltip: { enabled: false },
631
+ axisBorder: { color: theme.axisBorder }
632
+ }, xAxis), {
633
+ tickAmount: xAxisCategories.length ? void 0 : xAxis == null ? void 0 : xAxis.tickAmount,
634
+ axisTicks: __spreadProps(__spreadValues({
635
+ color: theme.axisBorder
636
+ }, xAxis == null ? void 0 : xAxis.axisTicks), {
637
+ show: hasDenseXAxis ? false : (_w = (_v = xAxis == null ? void 0 : xAxis.axisTicks) == null ? void 0 : _v.show) != null ? _w : true
638
+ }),
639
+ labels: __spreadProps(__spreadValues({}, xAxis == null ? void 0 : xAxis.labels), {
640
+ show: true,
641
+ formatter: responsiveXAxisFormatter,
642
+ style: __spreadProps(__spreadValues({
643
+ fontSize: "11px",
644
+ fontWeight: 500
645
+ }, (_x = xAxis == null ? void 0 : xAxis.labels) == null ? void 0 : _x.style), {
646
+ colors: theme.axis
647
+ })
648
+ })
649
+ }),
650
+ yaxis: yAxis,
651
+ tooltip: __spreadValues({
652
+ shared: true,
653
+ intersect: false,
654
+ followCursor: true
655
+ }, options.tooltip),
656
+ legend: __spreadProps(__spreadValues({}, options.legend), {
657
+ labels: __spreadProps(__spreadValues({}, (_y = options.legend) == null ? void 0 : _y.labels), {
658
+ colors: theme.axis
659
+ })
660
+ }),
661
+ noData: __spreadProps(__spreadValues({
662
+ text: "Nenhum dado dispon\xEDvel no per\xEDodo selecionado"
663
+ }, options.noData), {
664
+ style: __spreadProps(__spreadValues({
665
+ fontSize: "15px"
666
+ }, (_z = options.noData) == null ? void 0 : _z.style), {
667
+ color: theme.axis
668
+ })
669
+ })
670
+ });
671
+ return /* @__PURE__ */ jsx3(
672
+ "div",
673
+ {
674
+ ref: containerRef,
675
+ role: "img",
676
+ "aria-label": ariaLabel,
677
+ className,
678
+ children: /* @__PURE__ */ jsx3(
679
+ LazyApexChart,
680
+ __spreadProps(__spreadValues({}, chartProps), {
681
+ className: chartClassName,
682
+ width: renderedWidth,
683
+ height: renderedHeight,
684
+ options: sharedOptions
685
+ }),
686
+ renderKey
687
+ )
688
+ }
689
+ );
690
+ }
691
+
692
+ // src/components/chart/TimeRangeSelector.tsx
693
+ import { jsx as jsx4 } from "react/jsx-runtime";
694
+ function TimeRangeSelector({
695
+ options,
696
+ selected,
697
+ onSelect,
698
+ ariaLabel = "Per\xEDodo do gr\xE1fico",
699
+ className
700
+ }) {
701
+ return /* @__PURE__ */ jsx4(
702
+ "div",
703
+ {
704
+ role: "group",
705
+ "aria-label": ariaLabel,
706
+ className: `flex min-w-0 flex-wrap justify-start gap-1.5 ${className != null ? className : ""}`.trim(),
707
+ children: options.map((range) => {
708
+ const isSelected = selected === range;
709
+ return /* @__PURE__ */ jsx4(
710
+ "button",
711
+ {
712
+ type: "button",
713
+ "aria-pressed": isSelected,
714
+ onClick: () => onSelect(range),
715
+ className: `shrink-0 whitespace-nowrap rounded-sm border px-2.5 py-1 text-sm font-semibold transition-colors ${isSelected ? "border-selection-border bg-selection-background text-selection-content" : "border-primary-1 text-primary-1 hover:bg-primary-5"}`,
716
+ children: range
717
+ },
718
+ range
719
+ );
720
+ })
721
+ }
722
+ );
723
+ }
724
+
725
+ // src/components/chart/time-series-chart-utils.ts
726
+ var TOOLTIP_ENTITIES2 = {
727
+ "&": "&amp;",
728
+ "<": "&lt;",
729
+ ">": "&gt;",
730
+ '"': "&quot;",
731
+ "'": "&#039;"
732
+ };
733
+ function escapeTimeSeriesTooltipText(value) {
734
+ return String(value != null ? value : "").replace(
735
+ /[&<>"']/g,
736
+ (character) => TOOLTIP_ENTITIES2[character]
737
+ );
738
+ }
739
+ var SAFE_TOOLTIP_COLOR = /^(?:#[\da-f]{3,8}|rgba?\([\d\s.,%]+\)|hsla?\([\d\s.,%]+\)|var\(--[\w-]+\)|[a-z]+)$/i;
740
+ function normalizeTimeSeriesTooltipColor(value) {
741
+ const color = String(value != null ? value : "").trim();
742
+ return SAFE_TOOLTIP_COLOR.test(color) ? color : "currentColor";
743
+ }
744
+ function buildTimeSeriesTooltip({
745
+ reference,
746
+ rows
747
+ }) {
748
+ const content = rows.map(({ label, value, color }) => {
749
+ const marker = color ? `<span class="time-series-chart-tooltip-marker" style="background-color:${normalizeTimeSeriesTooltipColor(color)}"></span>` : "";
750
+ return `<div class="time-series-chart-tooltip-row"><span class="time-series-chart-tooltip-name">${marker}${escapeTimeSeriesTooltipText(label)}</span><strong>${escapeTimeSeriesTooltipText(value)}</strong></div>`;
751
+ }).join("");
752
+ return `<div class="time-series-chart-tooltip"><div class="time-series-chart-tooltip-reference">${escapeTimeSeriesTooltipText(reference)}</div>${content}</div>`;
753
+ }
754
+
755
+ export {
756
+ LazyApexChart,
757
+ getChartTheme,
758
+ getChartSeriesRecord,
759
+ resolveInteractiveDonutColors,
760
+ resolveRelativeDonutSelection,
761
+ escapeDonutTooltipText,
762
+ InteractiveDonutChart,
763
+ TimeSeriesChart,
764
+ TimeRangeSelector,
765
+ escapeTimeSeriesTooltipText,
766
+ normalizeTimeSeriesTooltipColor,
767
+ buildTimeSeriesTooltip
768
+ };
769
+ //# sourceMappingURL=chunk-6MXHE5MD.js.map