@primeui/chart-core 0.0.1-alpha.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 (299) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +1 -0
  3. package/dist/animations/index.d.mts +136 -0
  4. package/dist/animations/index.mjs +18 -0
  5. package/dist/annotation.utils-Bm0lOO1o.d.mts +290 -0
  6. package/dist/borderRadius.utils-Cz73LLR_.d.mts +54 -0
  7. package/dist/canvas-D4vigq47.d.mts +34 -0
  8. package/dist/canvas.utils-D2WHi2gL.d.mts +167 -0
  9. package/dist/cartesian/index.d.mts +94 -0
  10. package/dist/cartesian/index.mjs +93 -0
  11. package/dist/chunk-22ST6YPP.mjs +304 -0
  12. package/dist/chunk-2QK2KOBN.mjs +10 -0
  13. package/dist/chunk-2QRS4YQ5.mjs +18 -0
  14. package/dist/chunk-3FFJEX4A.mjs +261 -0
  15. package/dist/chunk-3IYSJ2U7.mjs +567 -0
  16. package/dist/chunk-3OZLP4I4.mjs +190 -0
  17. package/dist/chunk-3WEMHXZI.mjs +198 -0
  18. package/dist/chunk-3Z62EUJN.mjs +138 -0
  19. package/dist/chunk-4C6EVJ54.mjs +362 -0
  20. package/dist/chunk-53HW45JB.mjs +102 -0
  21. package/dist/chunk-55Y3WI6S.mjs +186 -0
  22. package/dist/chunk-5JCI2DEB.mjs +97 -0
  23. package/dist/chunk-66T4MRC5.mjs +113 -0
  24. package/dist/chunk-6HSEJLSR.mjs +376 -0
  25. package/dist/chunk-6STOLMCA.mjs +187 -0
  26. package/dist/chunk-7CMVDIOU.mjs +54 -0
  27. package/dist/chunk-7QQ6ETB4.mjs +228 -0
  28. package/dist/chunk-A6ZQZFL2.mjs +272 -0
  29. package/dist/chunk-ADKLH73T.mjs +1 -0
  30. package/dist/chunk-AGU3NG6D.mjs +22 -0
  31. package/dist/chunk-AHYIS6EB.mjs +230 -0
  32. package/dist/chunk-AP3UYWYT.mjs +4 -0
  33. package/dist/chunk-ARB5T6MP.mjs +326 -0
  34. package/dist/chunk-ARRGOEFX.mjs +585 -0
  35. package/dist/chunk-AUF4CHDP.mjs +422 -0
  36. package/dist/chunk-B4FTADAZ.mjs +561 -0
  37. package/dist/chunk-BABQKA6K.mjs +339 -0
  38. package/dist/chunk-BETFQBM2.mjs +197 -0
  39. package/dist/chunk-BKP26M4K.mjs +413 -0
  40. package/dist/chunk-BZN2QHGP.mjs +200 -0
  41. package/dist/chunk-C36VWQ7A.mjs +86 -0
  42. package/dist/chunk-CHW4RKY3.mjs +16 -0
  43. package/dist/chunk-CINXJIRR.mjs +120 -0
  44. package/dist/chunk-DN6AXQYZ.mjs +667 -0
  45. package/dist/chunk-DP2IZNN3.mjs +92 -0
  46. package/dist/chunk-DTWTCFRG.mjs +119 -0
  47. package/dist/chunk-EAMUNLRU.mjs +172 -0
  48. package/dist/chunk-EDAKJLNA.mjs +17 -0
  49. package/dist/chunk-ERVQB2VZ.mjs +59 -0
  50. package/dist/chunk-FFMT6OCO.mjs +92 -0
  51. package/dist/chunk-FHTC2YDB.mjs +102 -0
  52. package/dist/chunk-FRST55HY.mjs +16 -0
  53. package/dist/chunk-HDFGCN2F.mjs +132 -0
  54. package/dist/chunk-IEGLX7VL.mjs +42 -0
  55. package/dist/chunk-ILUWFYGY.mjs +220 -0
  56. package/dist/chunk-IXOWSEHO.mjs +114 -0
  57. package/dist/chunk-J4RI2C2G.mjs +172 -0
  58. package/dist/chunk-J65DBT4R.mjs +13 -0
  59. package/dist/chunk-JGOVWSKH.mjs +179 -0
  60. package/dist/chunk-JO7VACY2.mjs +25 -0
  61. package/dist/chunk-JWFBOPM6.mjs +122 -0
  62. package/dist/chunk-KNDZP446.mjs +895 -0
  63. package/dist/chunk-KP2TWD4Z.mjs +90 -0
  64. package/dist/chunk-KQIFO5I3.mjs +225 -0
  65. package/dist/chunk-KVDEROP6.mjs +59 -0
  66. package/dist/chunk-LKC7MZKK.mjs +87 -0
  67. package/dist/chunk-LVMDQ4OJ.mjs +305 -0
  68. package/dist/chunk-M7B3JF43.mjs +90 -0
  69. package/dist/chunk-MTGMXRNF.mjs +136 -0
  70. package/dist/chunk-N3TIT3OH.mjs +1040 -0
  71. package/dist/chunk-NHRK5KU2.mjs +890 -0
  72. package/dist/chunk-NKUYIWAP.mjs +243 -0
  73. package/dist/chunk-NPDZLYIF.mjs +238 -0
  74. package/dist/chunk-O2X6FF45.mjs +499 -0
  75. package/dist/chunk-OGJ6IIBW.mjs +176 -0
  76. package/dist/chunk-OHGCZZPZ.mjs +403 -0
  77. package/dist/chunk-OWW3K55O.mjs +351 -0
  78. package/dist/chunk-OXTFAWSK.mjs +60 -0
  79. package/dist/chunk-PLSDU3C2.mjs +890 -0
  80. package/dist/chunk-PRDVPOZX.mjs +223 -0
  81. package/dist/chunk-Q6PPVIHU.mjs +21 -0
  82. package/dist/chunk-QQBXUDM4.mjs +885 -0
  83. package/dist/chunk-QS76E3TD.mjs +111 -0
  84. package/dist/chunk-QWQ6HY4I.mjs +209 -0
  85. package/dist/chunk-R6Y3R7EW.mjs +135 -0
  86. package/dist/chunk-RBLZRT5K.mjs +190 -0
  87. package/dist/chunk-RO4N6YFS.mjs +167 -0
  88. package/dist/chunk-RQ3CKQOX.mjs +984 -0
  89. package/dist/chunk-SALTGZFR.mjs +208 -0
  90. package/dist/chunk-SANZPAJ4.mjs +14 -0
  91. package/dist/chunk-SDBPQ5CF.mjs +624 -0
  92. package/dist/chunk-SSLTFJ3U.mjs +364 -0
  93. package/dist/chunk-SXHVDJGF.mjs +77 -0
  94. package/dist/chunk-TA4MVAEX.mjs +243 -0
  95. package/dist/chunk-TAHCOZHF.mjs +1772 -0
  96. package/dist/chunk-TQ6S34QZ.mjs +152 -0
  97. package/dist/chunk-UPRXABX5.mjs +90 -0
  98. package/dist/chunk-VGLSBZDN.mjs +71 -0
  99. package/dist/chunk-VN7CKCSE.mjs +364 -0
  100. package/dist/chunk-VVI3OBPJ.mjs +524 -0
  101. package/dist/chunk-VWF57TS3.mjs +62 -0
  102. package/dist/chunk-WA3OVISZ.mjs +179 -0
  103. package/dist/chunk-WCG35U6M.mjs +964 -0
  104. package/dist/chunk-WFTX4AQJ.mjs +194 -0
  105. package/dist/chunk-WFVOQ2QZ.mjs +18 -0
  106. package/dist/chunk-WH3C3Y7P.mjs +149 -0
  107. package/dist/chunk-WPFUV7K3.mjs +488 -0
  108. package/dist/chunk-WRULPWHD.mjs +492 -0
  109. package/dist/chunk-WS64BZXT.mjs +1 -0
  110. package/dist/chunk-WY4AURRE.mjs +2419 -0
  111. package/dist/chunk-WYLILAOO.mjs +167 -0
  112. package/dist/chunk-X4D7FKUS.mjs +62 -0
  113. package/dist/chunk-X7T34OLW.mjs +139 -0
  114. package/dist/chunk-XIHBK5D3.mjs +68 -0
  115. package/dist/chunk-XQQCGFYB.mjs +50 -0
  116. package/dist/chunk-XTVE4P3L.mjs +214 -0
  117. package/dist/chunk-XUAASRXW.mjs +579 -0
  118. package/dist/chunk-Y3L3D4GQ.mjs +685 -0
  119. package/dist/chunk-YBJ56XJS.mjs +132 -0
  120. package/dist/chunk-ZQFK6CAE.mjs +1 -0
  121. package/dist/chunk-ZT2Z7ERM.mjs +874 -0
  122. package/dist/chunk-ZTL2FQEW.mjs +714 -0
  123. package/dist/circular/arc/index.d.mts +8 -0
  124. package/dist/circular/arc/index.mjs +3 -0
  125. package/dist/circular/index.d.mts +44 -0
  126. package/dist/circular/index.mjs +13 -0
  127. package/dist/collect.utils-DiKB4ciO.d.mts +12 -0
  128. package/dist/computeChartState-BTVIqwyO.d.mts +304 -0
  129. package/dist/controller-BJE1AZ3q.d.mts +82 -0
  130. package/dist/controller-BoNigQJr.d.mts +63 -0
  131. package/dist/controllers/index.d.mts +16 -0
  132. package/dist/controllers/index.mjs +110 -0
  133. package/dist/datalabel.utils-CkjGeB8S.d.mts +122 -0
  134. package/dist/decimation.utils-CcvJVhI4.d.mts +244 -0
  135. package/dist/geometry-DUUQJXVM.d.mts +60 -0
  136. package/dist/index-DseIZa1j.d.mts +167 -0
  137. package/dist/index.d.mts +88 -0
  138. package/dist/index.mjs +110 -0
  139. package/dist/orchestrator/index.d.mts +264 -0
  140. package/dist/orchestrator/index.mjs +33 -0
  141. package/dist/plugins/index.d.mts +18 -0
  142. package/dist/plugins/index.mjs +1 -0
  143. package/dist/property-animations-D433wXzz.d.mts +580 -0
  144. package/dist/property-store-NORUWFND.d.mts +17 -0
  145. package/dist/radial/index.d.mts +14 -0
  146. package/dist/radial/index.mjs +37 -0
  147. package/dist/renderers/axis/index.d.mts +39 -0
  148. package/dist/renderers/axis/index.mjs +8 -0
  149. package/dist/renderers/circular/index.d.mts +13 -0
  150. package/dist/renderers/circular/index.mjs +13 -0
  151. package/dist/renderers/index.d.mts +83 -0
  152. package/dist/renderers/index.mjs +75 -0
  153. package/dist/renderers/navigator/index.d.mts +103 -0
  154. package/dist/renderers/navigator/index.mjs +8 -0
  155. package/dist/resize.utils-D_2qm6rv.d.mts +142 -0
  156. package/dist/ring.utils-DXvrxMkU.d.mts +138 -0
  157. package/dist/scale-KFv30jqZ.d.mts +307 -0
  158. package/dist/scales-Drf8AIhL.d.mts +75 -0
  159. package/dist/series/bar/canvas/index.d.mts +8 -0
  160. package/dist/series/bar/canvas/index.mjs +10 -0
  161. package/dist/series/bar/controller/index.d.mts +105 -0
  162. package/dist/series/bar/controller/index.mjs +44 -0
  163. package/dist/series/bar/controller-canvas/index.d.mts +7 -0
  164. package/dist/series/bar/controller-canvas/index.mjs +49 -0
  165. package/dist/series/bar/controller-svg/index.d.mts +7 -0
  166. package/dist/series/bar/controller-svg/index.mjs +49 -0
  167. package/dist/series/bar/index.d.mts +60 -0
  168. package/dist/series/bar/index.mjs +13 -0
  169. package/dist/series/bar/svg/index.d.mts +8 -0
  170. package/dist/series/bar/svg/index.mjs +11 -0
  171. package/dist/series/candlestick/canvas/index.d.mts +8 -0
  172. package/dist/series/candlestick/canvas/index.mjs +8 -0
  173. package/dist/series/candlestick/controller/index.d.mts +123 -0
  174. package/dist/series/candlestick/controller/index.mjs +40 -0
  175. package/dist/series/candlestick/controller-canvas/index.d.mts +7 -0
  176. package/dist/series/candlestick/controller-canvas/index.mjs +45 -0
  177. package/dist/series/candlestick/controller-svg/index.d.mts +7 -0
  178. package/dist/series/candlestick/controller-svg/index.mjs +45 -0
  179. package/dist/series/candlestick/index.d.mts +11 -0
  180. package/dist/series/candlestick/index.mjs +10 -0
  181. package/dist/series/candlestick/svg/index.d.mts +8 -0
  182. package/dist/series/candlestick/svg/index.mjs +8 -0
  183. package/dist/series/heatmap/canvas/index.d.mts +16 -0
  184. package/dist/series/heatmap/canvas/index.mjs +9 -0
  185. package/dist/series/heatmap/controller/index.d.mts +110 -0
  186. package/dist/series/heatmap/controller/index.mjs +23 -0
  187. package/dist/series/heatmap/controller-canvas/index.d.mts +7 -0
  188. package/dist/series/heatmap/controller-canvas/index.mjs +28 -0
  189. package/dist/series/heatmap/controller-svg/index.d.mts +7 -0
  190. package/dist/series/heatmap/controller-svg/index.mjs +28 -0
  191. package/dist/series/heatmap/index.d.mts +34 -0
  192. package/dist/series/heatmap/index.mjs +13 -0
  193. package/dist/series/heatmap/svg/index.d.mts +15 -0
  194. package/dist/series/heatmap/svg/index.mjs +10 -0
  195. package/dist/series/line/canvas/index.d.mts +6 -0
  196. package/dist/series/line/canvas/index.mjs +9 -0
  197. package/dist/series/line/controller/index.d.mts +111 -0
  198. package/dist/series/line/controller/index.mjs +47 -0
  199. package/dist/series/line/controller-canvas/index.d.mts +7 -0
  200. package/dist/series/line/controller-canvas/index.mjs +54 -0
  201. package/dist/series/line/controller-svg/index.d.mts +7 -0
  202. package/dist/series/line/controller-svg/index.mjs +54 -0
  203. package/dist/series/line/index.d.mts +49 -0
  204. package/dist/series/line/index.mjs +13 -0
  205. package/dist/series/line/svg/index.d.mts +6 -0
  206. package/dist/series/line/svg/index.mjs +9 -0
  207. package/dist/series/pie/canvas/index.d.mts +8 -0
  208. package/dist/series/pie/canvas/index.mjs +10 -0
  209. package/dist/series/pie/controller/index.d.mts +174 -0
  210. package/dist/series/pie/controller/index.mjs +110 -0
  211. package/dist/series/pie/controller-canvas/index.d.mts +8 -0
  212. package/dist/series/pie/controller-canvas/index.mjs +119 -0
  213. package/dist/series/pie/controller-svg/index.d.mts +8 -0
  214. package/dist/series/pie/controller-svg/index.mjs +118 -0
  215. package/dist/series/pie/index.d.mts +59 -0
  216. package/dist/series/pie/index.mjs +15 -0
  217. package/dist/series/pie/svg/index.d.mts +6 -0
  218. package/dist/series/pie/svg/index.mjs +11 -0
  219. package/dist/series/polar/canvas/index.d.mts +6 -0
  220. package/dist/series/polar/canvas/index.mjs +7 -0
  221. package/dist/series/polar/controller/index.d.mts +102 -0
  222. package/dist/series/polar/controller/index.mjs +46 -0
  223. package/dist/series/polar/controller-canvas/index.d.mts +8 -0
  224. package/dist/series/polar/controller-canvas/index.mjs +52 -0
  225. package/dist/series/polar/controller-svg/index.d.mts +8 -0
  226. package/dist/series/polar/controller-svg/index.mjs +52 -0
  227. package/dist/series/polar/index.d.mts +25 -0
  228. package/dist/series/polar/index.mjs +16 -0
  229. package/dist/series/polar/svg/index.d.mts +10 -0
  230. package/dist/series/polar/svg/index.mjs +8 -0
  231. package/dist/series/radar/canvas/index.d.mts +6 -0
  232. package/dist/series/radar/canvas/index.mjs +8 -0
  233. package/dist/series/radar/controller/index.d.mts +121 -0
  234. package/dist/series/radar/controller/index.mjs +43 -0
  235. package/dist/series/radar/controller-canvas/index.d.mts +8 -0
  236. package/dist/series/radar/controller-canvas/index.mjs +51 -0
  237. package/dist/series/radar/controller-svg/index.d.mts +8 -0
  238. package/dist/series/radar/controller-svg/index.mjs +51 -0
  239. package/dist/series/radar/index.d.mts +40 -0
  240. package/dist/series/radar/index.mjs +13 -0
  241. package/dist/series/radar/svg/index.d.mts +12 -0
  242. package/dist/series/radar/svg/index.mjs +9 -0
  243. package/dist/series/scatter/canvas/index.d.mts +8 -0
  244. package/dist/series/scatter/canvas/index.mjs +11 -0
  245. package/dist/series/scatter/controller/index.d.mts +124 -0
  246. package/dist/series/scatter/controller/index.mjs +44 -0
  247. package/dist/series/scatter/controller-canvas/index.d.mts +7 -0
  248. package/dist/series/scatter/controller-canvas/index.mjs +51 -0
  249. package/dist/series/scatter/controller-svg/index.d.mts +7 -0
  250. package/dist/series/scatter/controller-svg/index.mjs +51 -0
  251. package/dist/series/scatter/index.d.mts +25 -0
  252. package/dist/series/scatter/index.mjs +14 -0
  253. package/dist/series/scatter/svg/index.d.mts +8 -0
  254. package/dist/series/scatter/svg/index.mjs +12 -0
  255. package/dist/series/treemap/canvas/index.d.mts +50 -0
  256. package/dist/series/treemap/canvas/index.mjs +10 -0
  257. package/dist/series/treemap/controller/index.d.mts +130 -0
  258. package/dist/series/treemap/controller/index.mjs +20 -0
  259. package/dist/series/treemap/controller-canvas/index.d.mts +7 -0
  260. package/dist/series/treemap/controller-canvas/index.mjs +25 -0
  261. package/dist/series/treemap/controller-svg/index.d.mts +7 -0
  262. package/dist/series/treemap/controller-svg/index.mjs +25 -0
  263. package/dist/series/treemap/index.d.mts +15 -0
  264. package/dist/series/treemap/index.mjs +12 -0
  265. package/dist/series/treemap/svg/index.d.mts +15 -0
  266. package/dist/series/treemap/svg/index.mjs +9 -0
  267. package/dist/slices-DtewiwJx.d.mts +72 -0
  268. package/dist/spatialIndex.utils-B_GJkotZ.d.mts +5 -0
  269. package/dist/squarify.utils-B9CQBpa1.d.mts +50 -0
  270. package/dist/stacking-CChuAcLN.d.mts +319 -0
  271. package/dist/streaming.utils-DH-g1gNP.d.mts +49 -0
  272. package/dist/sync/index.d.mts +130 -0
  273. package/dist/sync/index.mjs +5 -0
  274. package/dist/tooltip.renderer-D5wpSlBa.d.mts +210 -0
  275. package/dist/utils/color/index.d.mts +58 -0
  276. package/dist/utils/color/index.mjs +4 -0
  277. package/dist/utils/data/index.d.mts +180 -0
  278. package/dist/utils/data/index.mjs +7 -0
  279. package/dist/utils/export/index.d.mts +14 -0
  280. package/dist/utils/export/index.mjs +6 -0
  281. package/dist/utils/index.d.mts +49 -0
  282. package/dist/utils/index.mjs +29 -0
  283. package/dist/utils/interaction/index.d.mts +255 -0
  284. package/dist/utils/interaction/index.mjs +9 -0
  285. package/dist/utils/layout/index.d.mts +3 -0
  286. package/dist/utils/layout/index.mjs +10 -0
  287. package/dist/utils/math/index.d.mts +162 -0
  288. package/dist/utils/math/index.mjs +1 -0
  289. package/dist/utils/render/index.d.mts +19 -0
  290. package/dist/utils/render/index.mjs +3 -0
  291. package/dist/utils/specialized/index.d.mts +37 -0
  292. package/dist/utils/specialized/index.mjs +66 -0
  293. package/dist/utils/text/index.d.mts +39 -0
  294. package/dist/utils/text/index.mjs +8 -0
  295. package/dist/utils/theme/index.d.mts +295 -0
  296. package/dist/utils/theme/index.mjs +5 -0
  297. package/dist/utils/zoom/index.d.mts +90 -0
  298. package/dist/utils/zoom/index.mjs +3 -0
  299. package/package.json +56 -0
@@ -0,0 +1,351 @@
1
+ import { FIELD_DEFAULTS } from './chunk-O2X6FF45.mjs';
2
+
3
+ // src/utils/specialized/exportMenu.utils.ts
4
+ var EXPORT_MENU_CONSTANTS = {
5
+ /** Button size in pixels */
6
+ BUTTON_SIZE: 36,
7
+ /** Button padding */
8
+ BUTTON_PADDING: 8,
9
+ /** Menu width */
10
+ MENU_WIDTH: 180,
11
+ /** Menu item height */
12
+ MENU_ITEM_HEIGHT: 32,
13
+ /** Separator height */
14
+ SEPARATOR_HEIGHT: 1,
15
+ /** Menu border radius */
16
+ BORDER_RADIUS: 4,
17
+ /** Z-index for menu overlay */
18
+ Z_INDEX: 1e3
19
+ };
20
+ var DEFAULT_EXPORT_MENU_ITEMS = ["downloadPNG", "downloadJPEG", "downloadSVG", "downloadPDF", "downloadCSV", "separator", "downloadPNGTransparent", "downloadSVGTransparent"];
21
+ var DEFAULT_EXPORT_MENU_PROPS = {
22
+ enabled: true,
23
+ filename: "chart",
24
+ menuItems: DEFAULT_EXPORT_MENU_ITEMS,
25
+ buttons: {
26
+ align: "right",
27
+ verticalAlign: "top",
28
+ x: -10,
29
+ y: 10
30
+ },
31
+ scale: 2,
32
+ backgroundColor: "auto",
33
+ buttonClass: "",
34
+ menuClass: ""
35
+ };
36
+ var EXPORT_MENU_LABELS = {
37
+ downloadPNG: "Download PNG",
38
+ downloadJPEG: "Download JPEG",
39
+ downloadSVG: "Download SVG",
40
+ downloadPDF: "Download PDF",
41
+ downloadCSV: "Download CSV",
42
+ downloadPNGTransparent: "Download PNG (Transparent)",
43
+ downloadSVGTransparent: "Download SVG (Transparent)"
44
+ };
45
+ var HAMBURGER_ICON_PATH = "M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z";
46
+ function resolveExportMenuProps(props) {
47
+ return {
48
+ enabled: props.enabled ?? DEFAULT_EXPORT_MENU_PROPS.enabled,
49
+ filename: props.filename ?? DEFAULT_EXPORT_MENU_PROPS.filename,
50
+ menuItems: props.menuItems ?? DEFAULT_EXPORT_MENU_PROPS.menuItems,
51
+ buttons: {
52
+ ...DEFAULT_EXPORT_MENU_PROPS.buttons,
53
+ ...props.buttons
54
+ },
55
+ scale: props.scale ?? DEFAULT_EXPORT_MENU_PROPS.scale,
56
+ backgroundColor: props.backgroundColor ?? DEFAULT_EXPORT_MENU_PROPS.backgroundColor,
57
+ buttonClass: props.buttonClass ?? "",
58
+ menuClass: props.menuClass ?? ""
59
+ };
60
+ }
61
+ function isExportMenuSeparator(item) {
62
+ return item === "separator";
63
+ }
64
+ function filterExportMenuItems(items) {
65
+ return items.filter((item, i, arr) => {
66
+ if (item !== "separator") return true;
67
+ if (i === 0 || i === arr.length - 1) return false;
68
+ return arr[i - 1] !== "separator";
69
+ });
70
+ }
71
+ function estimateExportMenuHeight(items) {
72
+ const MENU_PADDING_Y = 8;
73
+ const SEPARATOR_SPACE = 9;
74
+ let height = MENU_PADDING_Y;
75
+ for (const item of items) {
76
+ height += item === "separator" ? SEPARATOR_SPACE : EXPORT_MENU_CONSTANTS.MENU_ITEM_HEIGHT;
77
+ }
78
+ return height;
79
+ }
80
+ function resolveExportMenuPlacement(input) {
81
+ const { align, verticalAlign, x, y, buttonSize, menuWidth, menuHeight, chartWidth, chartHeight } = input;
82
+ const gap = input.gap ?? 4;
83
+ const absX = Math.abs(x);
84
+ const absY = Math.abs(y);
85
+ const buttonLeft = align === "right" ? chartWidth - absX - buttonSize : absX;
86
+ const buttonTop = verticalAlign === "top" ? absY : chartHeight - absY - buttonSize;
87
+ const placement = {};
88
+ if (buttonLeft + menuWidth > chartWidth) {
89
+ placement.right = chartWidth - buttonLeft - buttonSize;
90
+ } else {
91
+ placement.left = buttonLeft;
92
+ }
93
+ if (buttonTop + buttonSize + menuHeight > chartHeight && verticalAlign !== "top") {
94
+ placement.bottom = chartHeight - buttonTop + gap;
95
+ } else {
96
+ placement.top = buttonTop + buttonSize + gap;
97
+ }
98
+ return placement;
99
+ }
100
+ function getExportAction(item) {
101
+ switch (item) {
102
+ case "downloadPNG":
103
+ return { format: "png", transparent: false };
104
+ case "downloadJPEG":
105
+ return { format: "jpeg", transparent: false };
106
+ case "downloadSVG":
107
+ return { format: "svg", transparent: false };
108
+ case "downloadPDF":
109
+ return { format: "pdf", transparent: false };
110
+ case "downloadCSV":
111
+ return { format: "csv", transparent: false };
112
+ case "downloadPNGTransparent":
113
+ return { format: "png", transparent: true };
114
+ case "downloadSVGTransparent":
115
+ return { format: "svg", transparent: true };
116
+ }
117
+ }
118
+
119
+ // src/utils/specialized/decimation.utils.ts
120
+ function decimateLTTB(yValues, targetCount, xValues) {
121
+ const n = yValues.length;
122
+ if (targetCount >= n || targetCount < 3) {
123
+ return Array.from({ length: n }, (_, i) => i);
124
+ }
125
+ const result = new Array(targetCount);
126
+ result[0] = 0;
127
+ const bucketCount = targetCount - 2;
128
+ const bucketSize = (n - 2) / bucketCount;
129
+ let prevSelectedIdx = 0;
130
+ for (let bucket = 0; bucket < bucketCount; bucket++) {
131
+ const bucketStart = Math.floor(bucket * bucketSize) + 1;
132
+ const bucketEnd = Math.min(Math.floor((bucket + 1) * bucketSize) + 1, n - 1);
133
+ let avgX = 0;
134
+ let avgY = 0;
135
+ if (bucket === bucketCount - 1) {
136
+ avgX = xValues ? xValues[n - 1] : n - 1;
137
+ avgY = yValues[n - 1];
138
+ } else {
139
+ const nextStart = Math.floor((bucket + 1) * bucketSize) + 1;
140
+ const nextEnd = Math.min(Math.floor((bucket + 2) * bucketSize) + 1, n - 1);
141
+ let count = 0;
142
+ for (let j = nextStart; j < nextEnd; j++) {
143
+ avgX += xValues ? xValues[j] : j;
144
+ avgY += yValues[j];
145
+ count++;
146
+ }
147
+ if (count > 0) {
148
+ avgX /= count;
149
+ avgY /= count;
150
+ }
151
+ }
152
+ const ax = xValues ? xValues[prevSelectedIdx] : prevSelectedIdx;
153
+ const ay = yValues[prevSelectedIdx];
154
+ const cx = avgX;
155
+ const cy = avgY;
156
+ let maxArea = -1;
157
+ let bestIdx = bucketStart;
158
+ for (let j = bucketStart; j < bucketEnd; j++) {
159
+ const bx = xValues ? xValues[j] : j;
160
+ const by = yValues[j];
161
+ const area = Math.abs(ax * (by - cy) + bx * (cy - ay) + cx * (ay - by));
162
+ if (area > maxArea) {
163
+ maxArea = area;
164
+ bestIdx = j;
165
+ }
166
+ }
167
+ result[bucket + 1] = bestIdx;
168
+ prevSelectedIdx = bestIdx;
169
+ }
170
+ result[targetCount - 1] = n - 1;
171
+ return result;
172
+ }
173
+ function decimateMinMax(yValues, targetCount) {
174
+ const n = yValues.length;
175
+ if (targetCount >= n || targetCount < 2) {
176
+ return Array.from({ length: n }, (_, i) => i);
177
+ }
178
+ const indexSet = /* @__PURE__ */ new Set();
179
+ indexSet.add(0);
180
+ indexSet.add(n - 1);
181
+ const bucketSize = n / targetCount;
182
+ for (let bucket = 0; bucket < targetCount; bucket++) {
183
+ const bucketStart = Math.floor(bucket * bucketSize);
184
+ const bucketEnd = Math.min(Math.floor((bucket + 1) * bucketSize), n);
185
+ let minIdx = bucketStart;
186
+ let maxIdx = bucketStart;
187
+ let minVal = yValues[bucketStart];
188
+ let maxVal = yValues[bucketStart];
189
+ for (let j = bucketStart + 1; j < bucketEnd; j++) {
190
+ const val = yValues[j];
191
+ if (val < minVal) {
192
+ minVal = val;
193
+ minIdx = j;
194
+ }
195
+ if (val > maxVal) {
196
+ maxVal = val;
197
+ maxIdx = j;
198
+ }
199
+ }
200
+ indexSet.add(minIdx);
201
+ indexSet.add(maxIdx);
202
+ }
203
+ const result = Array.from(indexSet);
204
+ result.sort((a, b) => a - b);
205
+ return result;
206
+ }
207
+ function decimateKMeans(xValues, yValues, targetCount) {
208
+ const n = xValues.length;
209
+ if (targetCount >= n || targetCount < 2) {
210
+ return Array.from({ length: n }, (_, i) => ({ x: xValues[i], y: yValues[i] }));
211
+ }
212
+ const k = targetCount;
213
+ let xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity;
214
+ for (let i = 0; i < n; i++) {
215
+ if (xValues[i] < xMin) xMin = xValues[i];
216
+ if (xValues[i] > xMax) xMax = xValues[i];
217
+ if (yValues[i] < yMin) yMin = yValues[i];
218
+ if (yValues[i] > yMax) yMax = yValues[i];
219
+ }
220
+ const xRange = xMax - xMin || 1;
221
+ const yRange = yMax - yMin || 1;
222
+ const normX = new Float64Array(n);
223
+ const normY = new Float64Array(n);
224
+ for (let i = 0; i < n; i++) {
225
+ normX[i] = (xValues[i] - xMin) / xRange;
226
+ normY[i] = (yValues[i] - yMin) / yRange;
227
+ }
228
+ const centX = new Float64Array(k);
229
+ const centY = new Float64Array(k);
230
+ const pool = new Int32Array(n);
231
+ for (let i = 0; i < n; i++) pool[i] = i;
232
+ for (let c = 0; c < k; c++) {
233
+ const j = c + Math.floor(Math.random() * (n - c));
234
+ const picked = pool[j];
235
+ pool[j] = pool[c];
236
+ pool[c] = picked;
237
+ centX[c] = normX[picked];
238
+ centY[c] = normY[picked];
239
+ }
240
+ const batchSize = Math.min(n, 1e4);
241
+ const iterations = 5;
242
+ const clusterCounts = new Float64Array(k);
243
+ for (let iter = 0; iter < iterations; iter++) {
244
+ const sumX = new Float64Array(k);
245
+ const sumY = new Float64Array(k);
246
+ const counts = new Float64Array(k);
247
+ for (let b = 0; b < batchSize; b++) {
248
+ const i = Math.floor(Math.random() * n);
249
+ const px = normX[i];
250
+ const py = normY[i];
251
+ let bestC = 0;
252
+ let bestDist = Infinity;
253
+ for (let c = 0; c < k; c++) {
254
+ const dx = px - centX[c];
255
+ const dy = py - centY[c];
256
+ const d = dx * dx + dy * dy;
257
+ if (d < bestDist) {
258
+ bestDist = d;
259
+ bestC = c;
260
+ }
261
+ }
262
+ sumX[bestC] += px;
263
+ sumY[bestC] += py;
264
+ counts[bestC]++;
265
+ }
266
+ for (let c = 0; c < k; c++) {
267
+ if (counts[c] > 0) {
268
+ clusterCounts[c] += counts[c];
269
+ const lr = counts[c] / clusterCounts[c];
270
+ centX[c] = centX[c] * (1 - lr) + sumX[c] / counts[c] * lr;
271
+ centY[c] = centY[c] * (1 - lr) + sumY[c] / counts[c] * lr;
272
+ }
273
+ }
274
+ }
275
+ const result = [];
276
+ for (let c = 0; c < k; c++) {
277
+ if (clusterCounts[c] > 0) {
278
+ result.push({
279
+ x: centX[c] * xRange + xMin,
280
+ y: centY[c] * yRange + yMin
281
+ });
282
+ }
283
+ }
284
+ return result;
285
+ }
286
+ var DEFAULT_SAMPLES = 500;
287
+ function decimate(yValues, config, xValues) {
288
+ const samples = config.samples ?? DEFAULT_SAMPLES;
289
+ const threshold = config.threshold ?? samples;
290
+ if (yValues.length <= threshold) {
291
+ return Array.from({ length: yValues.length }, (_, i) => i);
292
+ }
293
+ switch (config.algorithm) {
294
+ case "lttb":
295
+ case "k-means":
296
+ return decimateLTTB(yValues, samples, xValues);
297
+ case "min-max":
298
+ return decimateMinMax(yValues, samples);
299
+ default:
300
+ return Array.from({ length: yValues.length }, (_, i) => i);
301
+ }
302
+ }
303
+ var ScatterDecimator = class {
304
+ constructor() {
305
+ this.cache = /* @__PURE__ */ new Map();
306
+ }
307
+ /**
308
+ * Apply viewport-aware decimation to scatter datasets.
309
+ * Returns a new array with the same shape as `datasets`, with `props.data` replaced where decimated.
310
+ */
311
+ apply(datasets, config, zoomX, zoomY) {
312
+ const samples = config.samples ?? DEFAULT_SAMPLES;
313
+ const threshold = config.threshold ?? samples;
314
+ const activeDataRefs = /* @__PURE__ */ new Set();
315
+ const result = datasets.map((sd) => {
316
+ const originalData = sd.props.data ?? [];
317
+ if (originalData.length <= threshold && !zoomX && !zoomY) return sd;
318
+ activeDataRefs.add(originalData);
319
+ const xField = String(sd.props.xField ?? FIELD_DEFAULTS.xField);
320
+ const yField = String(sd.props.yField ?? FIELD_DEFAULTS.yField);
321
+ let visibleData = originalData;
322
+ if (zoomX || zoomY) {
323
+ visibleData = originalData.filter((row) => {
324
+ const inX = !zoomX || row[xField] >= zoomX.min && row[xField] <= zoomX.max;
325
+ const inY = !zoomY || row[yField] >= zoomY.min && row[yField] <= zoomY.max;
326
+ return inX && inY;
327
+ });
328
+ }
329
+ if (visibleData.length <= samples) {
330
+ return { ...sd, props: { ...sd.props, data: visibleData } };
331
+ }
332
+ const vpKey = `${zoomX?.min ?? ""},${zoomX?.max ?? ""},${zoomY?.min ?? ""},${zoomY?.max ?? ""}`;
333
+ const cached = this.cache.get(originalData);
334
+ if (cached && cached.samples === samples && cached.viewportKey === vpKey) {
335
+ return { ...sd, props: { ...sd.props, data: cached.result } };
336
+ }
337
+ const xVals = visibleData.map((r) => r[xField]);
338
+ const yVals = visibleData.map((r) => r[yField]);
339
+ const decimated = decimateKMeans(xVals, yVals, samples);
340
+ const decimatedData = decimated.map((pt) => ({ [xField]: pt.x, [yField]: pt.y }));
341
+ this.cache.set(originalData, { samples, viewportKey: vpKey, result: decimatedData });
342
+ return { ...sd, props: { ...sd.props, data: decimatedData } };
343
+ });
344
+ for (const key of this.cache.keys()) {
345
+ if (!activeDataRefs.has(key)) this.cache.delete(key);
346
+ }
347
+ return result;
348
+ }
349
+ };
350
+
351
+ export { DEFAULT_EXPORT_MENU_ITEMS, DEFAULT_EXPORT_MENU_PROPS, EXPORT_MENU_CONSTANTS, EXPORT_MENU_LABELS, HAMBURGER_ICON_PATH, ScatterDecimator, decimate, decimateKMeans, decimateLTTB, decimateMinMax, estimateExportMenuHeight, filterExportMenuItems, getExportAction, isExportMenuSeparator, resolveExportMenuPlacement, resolveExportMenuProps };
@@ -0,0 +1,60 @@
1
+ import { DEFAULT_DATA_LABEL_FONT_FAMILY, resolveFontFamily, resolveFontSize, DEFAULT_DATA_LABEL_FONT_SIZE } from './chunk-NKUYIWAP.mjs';
2
+
3
+ // src/utils/text/datalabel.utils.ts
4
+ function normalizeDataLabelConfig(props, adaptiveFontSize, adaptiveRotation, globalFont) {
5
+ if (!props) return null;
6
+ const fontSizeAccessor = props.fontSize;
7
+ const colorAccessor = props.color;
8
+ const connectorColorAccessor = props.connectorColor;
9
+ const connectorWidthAccessor = props.connectorWidth;
10
+ const scalarFontSize = typeof fontSizeAccessor === "number" ? fontSizeAccessor : void 0;
11
+ const scalarColor = typeof colorAccessor === "string" ? colorAccessor : void 0;
12
+ return {
13
+ display: props.display ?? "percentage",
14
+ fontSize: scalarFontSize ?? adaptiveFontSize ?? resolveFontSize(DEFAULT_DATA_LABEL_FONT_SIZE, globalFont),
15
+ fontWeight: props.fontWeight ?? "normal",
16
+ fontFamily: props.fontFamily ?? resolveFontFamily(void 0, globalFont) ?? DEFAULT_DATA_LABEL_FONT_FAMILY,
17
+ color: scalarColor,
18
+ // Pass the raw accessors through when the user supplied a non-scalar form so
19
+ // renderers can resolve per-label values from each item's ItemContext.
20
+ fontSizeAccessor: scalarFontSize === void 0 ? fontSizeAccessor : void 0,
21
+ colorAccessor: scalarColor === void 0 ? colorAccessor : void 0,
22
+ connectorColorAccessor,
23
+ connectorWidthAccessor,
24
+ minPercentage: props.minPercentage ?? 5,
25
+ formatter: props.formatter,
26
+ rotation: props.rotation ?? adaptiveRotation ?? 0,
27
+ leaderOffset: props.leaderOffset ?? 10,
28
+ horizontalOffset: props.horizontalOffset ?? 15,
29
+ textOffset: props.textOffset ?? 4,
30
+ lineHeight: props.lineHeight ?? 1.2,
31
+ lineStyle: props.lineStyle ?? "angled",
32
+ alignTo: props.alignTo ?? "labelLine",
33
+ render: props.render
34
+ };
35
+ }
36
+ function formatLabelValue(value) {
37
+ return Number.isFinite(value) ? String(Number(value.toFixed(2))) : String(value);
38
+ }
39
+ function formatDataLabelText(value, percentage, display, formatter, label) {
40
+ if (formatter) {
41
+ return formatter(value, percentage, label);
42
+ }
43
+ switch (display) {
44
+ case "percentage":
45
+ return `${Math.round(percentage)}%`;
46
+ case "value":
47
+ return formatLabelValue(value);
48
+ case "both":
49
+ return `${formatLabelValue(value)} (${Math.round(percentage)}%)`;
50
+ case "label":
51
+ return label ?? null;
52
+ case "label-percentage":
53
+ return label ? `${label} ${Math.round(percentage)}%` : `${Math.round(percentage)}%`;
54
+ case "none":
55
+ default:
56
+ return null;
57
+ }
58
+ }
59
+
60
+ export { formatDataLabelText, normalizeDataLabelConfig };