@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,132 @@
1
+ // src/series/line/shared.ts
2
+ var DEFAULT_TENSION = 0.5;
3
+ function createSvgLinePathBuilder() {
4
+ const parts = [];
5
+ return {
6
+ moveTo: (x, y) => parts.push(`M ${x} ${y}`),
7
+ lineTo: (x, y) => parts.push(`L ${x} ${y}`),
8
+ bezierCurveTo: (cp1x, cp1y, cp2x, cp2y, x, y) => parts.push(`C ${cp1x} ${cp1y} ${cp2x} ${cp2y} ${x} ${y}`),
9
+ closePath: () => parts.push("Z"),
10
+ build: () => parts.join(" ")
11
+ };
12
+ }
13
+ function createCanvasLinePathBuilder(ctx) {
14
+ return {
15
+ moveTo: (x, y) => ctx.moveTo(x, y),
16
+ lineTo: (x, y) => ctx.lineTo(x, y),
17
+ bezierCurveTo: (cp1x, cp1y, cp2x, cp2y, x, y) => ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y),
18
+ closePath: () => ctx.closePath()
19
+ };
20
+ }
21
+ function traceLinear(builder, points) {
22
+ for (let i = 1; i < points.length; i++) {
23
+ builder.lineTo(points[i].x, points[i].y);
24
+ }
25
+ }
26
+ function traceStepBefore(builder, points) {
27
+ for (let i = 1; i < points.length; i++) {
28
+ builder.lineTo(points[i - 1].x, points[i].y);
29
+ builder.lineTo(points[i].x, points[i].y);
30
+ }
31
+ }
32
+ function traceStepAfter(builder, points) {
33
+ for (let i = 1; i < points.length; i++) {
34
+ builder.lineTo(points[i].x, points[i - 1].y);
35
+ builder.lineTo(points[i].x, points[i].y);
36
+ }
37
+ }
38
+ function traceStepCenter(builder, points) {
39
+ for (let i = 1; i < points.length; i++) {
40
+ const mid = (points[i - 1].x + points[i].x) / 2;
41
+ builder.lineTo(mid, points[i - 1].y);
42
+ builder.lineTo(mid, points[i].y);
43
+ builder.lineTo(points[i].x, points[i].y);
44
+ }
45
+ }
46
+ function traceSmooth(builder, points) {
47
+ const n = points.length;
48
+ if (n < 2) return;
49
+ const slopes = new Array(n - 1);
50
+ for (let i = 0; i < n - 1; i++) {
51
+ const dx = points[i + 1].x - points[i].x;
52
+ slopes[i] = dx !== 0 ? (points[i + 1].y - points[i].y) / dx : 0;
53
+ }
54
+ const tangents = new Array(n);
55
+ tangents[0] = slopes[0];
56
+ tangents[n - 1] = slopes[n - 2];
57
+ for (let i = 1; i < n - 1; i++) {
58
+ tangents[i] = (slopes[i - 1] + slopes[i]) / 2;
59
+ }
60
+ for (let i = 0; i < n - 1; i++) {
61
+ const d = slopes[i];
62
+ if (d === 0) {
63
+ tangents[i] = 0;
64
+ tangents[i + 1] = 0;
65
+ } else {
66
+ const alpha = tangents[i] / d;
67
+ const beta = tangents[i + 1] / d;
68
+ const sqNorm = alpha * alpha + beta * beta;
69
+ if (sqNorm > 9) {
70
+ const scale = 3 / Math.sqrt(sqNorm);
71
+ tangents[i] = scale * alpha * d;
72
+ tangents[i + 1] = scale * beta * d;
73
+ }
74
+ }
75
+ }
76
+ for (let i = 0; i < n - 1; i++) {
77
+ const p0 = points[i];
78
+ const p1 = points[i + 1];
79
+ const dx = (p1.x - p0.x) / 3;
80
+ builder.bezierCurveTo(p0.x + dx, p0.y + tangents[i] * dx, p1.x - dx, p1.y - tangents[i + 1] * dx, p1.x, p1.y);
81
+ }
82
+ }
83
+ function traceSpline(builder, points, tension) {
84
+ const n = points.length;
85
+ if (n < 2) return;
86
+ const k = tension / 3;
87
+ for (let i = 0; i < n - 1; i++) {
88
+ const p0 = i > 0 ? points[i - 1] : points[0];
89
+ const p1 = points[i];
90
+ const p2 = points[i + 1];
91
+ const p3 = i < n - 2 ? points[i + 2] : points[n - 1];
92
+ builder.bezierCurveTo(p1.x + (p2.x - p0.x) * k, p1.y + (p2.y - p0.y) * k, p2.x + (p1.x - p3.x) * k, p2.y + (p1.y - p3.y) * k, p2.x, p2.y);
93
+ }
94
+ }
95
+ function invertCurveForReverse(curve) {
96
+ if (curve === "step-before") return "step-after";
97
+ if (curve === "step-after") return "step-before";
98
+ return curve;
99
+ }
100
+ function traceCurve(builder, points, curve, tension = DEFAULT_TENSION) {
101
+ if (points.length < 2) return;
102
+ switch (curve) {
103
+ case "smooth":
104
+ return traceSmooth(builder, points);
105
+ case "spline":
106
+ return traceSpline(builder, points, tension);
107
+ case "step-before":
108
+ return traceStepBefore(builder, points);
109
+ case "step-after":
110
+ return traceStepAfter(builder, points);
111
+ case "step":
112
+ return traceStepCenter(builder, points);
113
+ default:
114
+ return traceLinear(builder, points);
115
+ }
116
+ }
117
+ var _stackBaseEdge = [];
118
+ function reversedBaseEdge(points) {
119
+ const n = points.length;
120
+ const buf = _stackBaseEdge;
121
+ while (buf.length < n) buf.push({ x: 0, y: 0, dataIndex: 0, value: 0, visible: true, category: "" });
122
+ if (buf.length > n) buf.length = n;
123
+ for (let i = 0; i < n; i++) {
124
+ const src = points[n - 1 - i];
125
+ const dst = buf[i];
126
+ dst.x = src.x;
127
+ dst.y = src.baseY ?? src.y;
128
+ }
129
+ return buf;
130
+ }
131
+
132
+ export { createCanvasLinePathBuilder, createSvgLinePathBuilder, invertCurveForReverse, reversedBaseEdge, traceCurve };
@@ -0,0 +1,42 @@
1
+ // src/utils/render/path.utils.ts
2
+ function createSvgPathBuilder() {
3
+ const parts = [];
4
+ return {
5
+ moveTo: (x, y) => parts.push(`M ${x} ${y}`),
6
+ lineTo: (x, y) => parts.push(`L ${x} ${y}`),
7
+ bezierCurveTo: (cp1x, cp1y, cp2x, cp2y, x, y) => parts.push(`C ${cp1x} ${cp1y} ${cp2x} ${cp2y} ${x} ${y}`),
8
+ closePath: () => parts.push("Z"),
9
+ build: () => parts.join(" ")
10
+ };
11
+ }
12
+ function createCanvasPathBuilder(ctx) {
13
+ return {
14
+ moveTo: (x, y) => ctx.moveTo(x, y),
15
+ lineTo: (x, y) => ctx.lineTo(x, y),
16
+ bezierCurveTo: (cp1x, cp1y, cp2x, cp2y, x, y) => ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y),
17
+ closePath: () => ctx.closePath()
18
+ };
19
+ }
20
+ function traceClosedSpline(builder, points, tension = 0.3) {
21
+ const n = points.length;
22
+ if (n < 3) {
23
+ for (let i = 0; i < n; i++) {
24
+ if (i === 0) builder.moveTo(points[i].x, points[i].y);
25
+ else builder.lineTo(points[i].x, points[i].y);
26
+ }
27
+ builder.closePath();
28
+ return;
29
+ }
30
+ const k = tension / 3;
31
+ builder.moveTo(points[0].x, points[0].y);
32
+ for (let i = 0; i < n; i++) {
33
+ const p0 = points[(i - 1 + n) % n];
34
+ const p1 = points[i];
35
+ const p2 = points[(i + 1) % n];
36
+ const p3 = points[(i + 2) % n];
37
+ builder.bezierCurveTo(p1.x + (p2.x - p0.x) * k, p1.y + (p2.y - p0.y) * k, p2.x + (p1.x - p3.x) * k, p2.y + (p1.y - p3.y) * k, p2.x, p2.y);
38
+ }
39
+ builder.closePath();
40
+ }
41
+
42
+ export { createCanvasPathBuilder, createSvgPathBuilder, traceClosedSpline };
@@ -0,0 +1,220 @@
1
+ import { MARKER_SHAPE_NAMES, renderMarkerShapeSvg } from './chunk-PRDVPOZX.mjs';
2
+ import { formatPointDescription } from './chunk-OGJ6IIBW.mjs';
3
+ import { DEFAULT_HOVER_POINT_RADIUS_MULTIPLIER, DEFAULT_LINE_MARKER_SIZE } from './chunk-NKUYIWAP.mjs';
4
+ import { createSvgGradientFromColor, makeItemContext, resolveDash, resolveAccessor, getPrimaryColor } from './chunk-O2X6FF45.mjs';
5
+ import { createSvgPathBuilder, traceClosedSpline } from './chunk-IEGLX7VL.mjs';
6
+ import { createSvgGroup, setAttr, adjustBrightness, createSvgDefs, appendChild, prependChild, svgClass, createSvgPath, svgNode } from './chunk-SSLTFJ3U.mjs';
7
+
8
+ // src/series/radar/shared.ts
9
+ function buildSmoothPath(points) {
10
+ if (points.length < 3) return buildPointsPath(points);
11
+ const builder = createSvgPathBuilder();
12
+ traceClosedSpline(builder, points);
13
+ return builder.build();
14
+ }
15
+ function buildPointsPath(points) {
16
+ if (points.length === 0) return "";
17
+ const parts = [];
18
+ for (let i = 0; i < points.length; i++) {
19
+ parts.push(`${i === 0 ? "M" : "L"} ${points[i].x} ${points[i].y}`);
20
+ }
21
+ parts.push("Z");
22
+ return parts.join(" ");
23
+ }
24
+ function buildPointsPathReversed(points) {
25
+ if (points.length === 0) return "";
26
+ const parts = [];
27
+ for (let i = points.length - 1; i >= 0; i--) {
28
+ parts.push(`${i === points.length - 1 ? "M" : "L"} ${points[i].x} ${points[i].y}`);
29
+ }
30
+ parts.push("Z");
31
+ return parts.join(" ");
32
+ }
33
+
34
+ // src/series/radar/svg/index.ts
35
+ function renderRadarSeriesSvg(layout, seriesIndex, hoverState, theme, effectConfig, seriesProps, a11y, context) {
36
+ const sd = layout.series[seriesIndex];
37
+ if (!sd || !sd.visible || sd.points.length === 0) return createSvgGroup();
38
+ const group = createSvgGroup();
39
+ if (a11y?.enabled) {
40
+ setAttr(group, "role", "region");
41
+ setAttr(group, "aria-label", seriesProps?.name ?? sd.id);
42
+ }
43
+ const sharedAxisIdx = hoverState.axisIndex ?? null;
44
+ const isSharedHover = sharedAxisIdx !== null;
45
+ const isSeriesHovered = isSharedHover ? true : hoverState.datasetId === sd.id;
46
+ const anyHover = hoverState.datasetId !== null || isSharedHover;
47
+ let seriesOpacity = 1;
48
+ if (anyHover && !isSharedHover && !isSeriesHovered && effectConfig?.dimOpacity !== void 0) {
49
+ seriesOpacity = effectConfig.dimOpacity;
50
+ }
51
+ const isSmooth = sd.curve === "smooth";
52
+ const outerPathD = isSmooth ? buildSmoothPath(sd.points) : buildPointsPath(sd.points);
53
+ const isStacked = sd.basePoints && sd.basePoints.length > 0;
54
+ const innerPathD = isStacked ? isSmooth ? buildSmoothPath([...sd.basePoints].reverse()) : buildPointsPathReversed(sd.basePoints) : "";
55
+ const fillPathD = isStacked ? `${outerPathD} ${innerPathD}` : outerPathD;
56
+ const colorClassN = `p-chart-color-${sd.seriesIdx % 10}`;
57
+ const seriesIsHoveredJs = !isSharedHover && isSeriesHovered;
58
+ let fillColor = sd.color;
59
+ let strokeColor = sd.color;
60
+ if (sd.color !== void 0 && seriesIsHoveredJs && effectConfig?.hoverBrightness) {
61
+ fillColor = adjustBrightness(sd.color, effectConfig.hoverBrightness);
62
+ strokeColor = adjustBrightness(sd.color, effectConfig.hoverBrightness);
63
+ }
64
+ let fillValue = fillColor;
65
+ let strokeValue = strokeColor;
66
+ let gradientUrl = null;
67
+ if (sd.gradientColor && context) {
68
+ const defs = createSvgDefs();
69
+ const gradId = `${context.chartId}-radar-${seriesIndex}-grad`;
70
+ const gradNode = createSvgGradientFromColor(sd.gradientColor, gradId, layout.center, layout.radius);
71
+ setAttr(defs, "id", `${gradId}-defs`);
72
+ appendChild(defs, gradNode);
73
+ prependChild(group, defs);
74
+ gradientUrl = `url(#${gradId})`;
75
+ fillValue = gradientUrl;
76
+ strokeValue = sd.gradientColor.stops[0]?.color ?? strokeColor;
77
+ }
78
+ const borderColor = seriesProps?.borderColor && typeof seriesProps.borderColor === "string" ? seriesProps.borderColor : void 0;
79
+ const borderWidth = typeof seriesProps?.borderStrokeWidth === "number" ? seriesProps.borderStrokeWidth : 0;
80
+ const dashAttrs = {};
81
+ const dashPattern = sd.lineDash ?? (sd.lineStyle === "dashed" ? [6, 4] : sd.lineStyle === "dotted" ? [2, 3] : null);
82
+ if (dashPattern?.length) dashAttrs["stroke-dasharray"] = dashPattern.join(" ");
83
+ const fillAreaCls = svgClass("p-chart-area", `p-chart-series-${sd.seriesIdx}`, fillValue === void 0 && colorClassN, seriesIsHoveredJs && "p-chart-point-hover", anyHover && !isSeriesHovered && "p-chart-series-inactive");
84
+ const themedSeriesColor = theme.series[sd.seriesIdx % theme.series.length];
85
+ const areaEl = createSvgPath(fillPathD, {
86
+ fill: fillValue ?? themedSeriesColor,
87
+ "fill-opacity": sd.fillOpacity * seriesOpacity,
88
+ "fill-rule": isStacked ? "evenodd" : "nonzero",
89
+ stroke: "none",
90
+ class: fillAreaCls
91
+ });
92
+ setAttr(areaEl, "data-layer", "area");
93
+ appendChild(group, areaEl);
94
+ const borderAlign = seriesProps?.borderAlign ?? "center";
95
+ const radarDataArr = seriesProps?.data;
96
+ const radarSeriesDashCtx = makeItemContext(radarDataArr?.[0], 0);
97
+ const borderDash = resolveDash(seriesProps?.borderDash, radarSeriesDashCtx);
98
+ const borderDashOffset = resolveAccessor(seriesProps?.borderDashOffset, radarSeriesDashCtx, { arrayMode: "clip", fallback: 0 }) ?? 0;
99
+ if (borderColor && borderWidth > 0 && borderAlign === "center") {
100
+ const borderAttrs = {
101
+ fill: "none",
102
+ stroke: borderColor,
103
+ "stroke-width": sd.lineStrokeWidth + borderWidth * 2,
104
+ "stroke-opacity": seriesOpacity,
105
+ "stroke-linejoin": seriesProps?.borderJoinStyle ?? "round"
106
+ };
107
+ if (borderDash && borderDash.length > 0) borderAttrs["stroke-dasharray"] = borderDash.join(" ");
108
+ if (borderDashOffset) borderAttrs["stroke-dashoffset"] = borderDashOffset;
109
+ const centerBorderEl = createSvgPath(outerPathD, borderAttrs);
110
+ setAttr(centerBorderEl, "data-layer", "center-border");
111
+ appendChild(group, centerBorderEl);
112
+ }
113
+ const strokeLineCls = svgClass("p-chart-line", `p-chart-series-${sd.seriesIdx}`, strokeValue === void 0 && colorClassN, seriesIsHoveredJs && "p-chart-point-hover", anyHover && !isSeriesHovered && "p-chart-series-inactive");
114
+ const lineEl = createSvgPath(outerPathD, {
115
+ fill: "none",
116
+ stroke: strokeValue ?? themedSeriesColor,
117
+ "stroke-width": sd.lineStrokeWidth,
118
+ "stroke-opacity": seriesOpacity,
119
+ "stroke-linejoin": "round",
120
+ class: strokeLineCls,
121
+ ...dashAttrs
122
+ });
123
+ setAttr(lineEl, "data-layer", "line");
124
+ appendChild(group, lineEl);
125
+ if (borderColor && borderWidth > 0 && borderAlign === "inner") {
126
+ const clipId = context ? `${context.chartId}-radar-${seriesIndex}-border-clip` : `radar-${seriesIndex}-border-clip`;
127
+ const clipPathEl = svgNode("clipPath", { id: clipId });
128
+ appendChild(clipPathEl, createSvgPath(outerPathD, {}));
129
+ const defs = createSvgDefs();
130
+ appendChild(defs, clipPathEl);
131
+ prependChild(group, defs);
132
+ const borderAttrs = {
133
+ fill: "none",
134
+ stroke: borderColor,
135
+ "stroke-width": borderWidth * 2,
136
+ "stroke-opacity": seriesOpacity,
137
+ "stroke-linejoin": seriesProps?.borderJoinStyle ?? "round",
138
+ "clip-path": `url(#${clipId})`
139
+ };
140
+ if (borderDash && borderDash.length > 0) borderAttrs["stroke-dasharray"] = borderDash.join(" ");
141
+ if (borderDashOffset) borderAttrs["stroke-dashoffset"] = borderDashOffset;
142
+ const innerBorderEl = createSvgPath(outerPathD, borderAttrs);
143
+ setAttr(innerBorderEl, "data-layer", "inner-border");
144
+ appendChild(group, innerBorderEl);
145
+ }
146
+ const showMarkers = seriesProps?.showMarkers !== false;
147
+ const a11yEnabled = !!(a11y?.enabled && sd.points.length <= (a11y.pointDescriptionThreshold ?? 200));
148
+ const seriesName = seriesProps?.name ?? sd.id;
149
+ const anyPointHovered = isSharedHover ? sharedAxisIdx !== null : isSeriesHovered && hoverState.index !== null;
150
+ if ((showMarkers || anyPointHovered) && !seriesProps?.renderMarker) {
151
+ const dataArr = seriesProps?.data;
152
+ const ptValue = (idx) => sd.points[idx]?.value;
153
+ const ptCategory = (idx) => layout.categories[sd.points[idx]?.categoryIndex ?? idx];
154
+ const seriesExtras = { seriesIndex, seriesId: sd.id ?? "" };
155
+ const resolveMarkerSize = (idx) => resolveAccessor(seriesProps?.markerSize, makeItemContext(dataArr?.[idx], idx, { value: ptValue(idx), category: ptCategory(idx), ...seriesExtras }), { arrayMode: "clip", fallback: DEFAULT_LINE_MARKER_SIZE }) ?? DEFAULT_LINE_MARKER_SIZE;
156
+ const resolvePointRotation = (idx) => resolveAccessor(seriesProps?.pointRotation, makeItemContext(dataArr?.[idx], idx, { value: ptValue(idx), category: ptCategory(idx), ...seriesExtras }), { arrayMode: "clip", fallback: 0 }) ?? 0;
157
+ const resolveMarkerHoverColor = (idx) => {
158
+ const v = resolveAccessor(seriesProps?.hoverColor, makeItemContext(dataArr?.[idx], idx, { value: ptValue(idx), category: ptCategory(idx), ...seriesExtras }), { arrayMode: "cycle" });
159
+ return typeof v === "string" ? v : v ? getPrimaryColor(v) : void 0;
160
+ };
161
+ const resolveMarkerHoverBorderColor = (idx) => {
162
+ const v = resolveAccessor(seriesProps?.hoverBorderColor, makeItemContext(dataArr?.[idx], idx, { value: ptValue(idx), category: ptCategory(idx), ...seriesExtras }), { arrayMode: "cycle" });
163
+ return typeof v === "string" ? v : v ? getPrimaryColor(v) : void 0;
164
+ };
165
+ const resolveMarkerShape = (idx, size) => resolveAccessor(seriesProps?.markerShape, makeItemContext(dataArr?.[idx], idx, { size, value: ptValue(idx), category: ptCategory(idx), ...seriesExtras }), { arrayMode: "clip" }) ?? "circle";
166
+ for (let pi = 0; pi < sd.points.length; pi++) {
167
+ const pt = sd.points[pi];
168
+ const isPointHovered = isSharedHover ? pi === sharedAxisIdx : isSeriesHovered && hoverState.index === pi;
169
+ if (!showMarkers && !isPointHovered) continue;
170
+ const ptMarkerSize = resolveMarkerSize(pi);
171
+ const pointR = isPointHovered ? ptMarkerSize * (effectConfig?.hoverRadiusMultiplier ?? DEFAULT_HOVER_POINT_RADIUS_MULTIPLIER) : ptMarkerSize;
172
+ let ptColor = gradientUrl ?? strokeColor;
173
+ if (isPointHovered) {
174
+ const ptHoverColor = resolveMarkerHoverColor(pi);
175
+ if (ptHoverColor) {
176
+ ptColor = ptHoverColor;
177
+ } else if (typeof ptColor === "string" && !gradientUrl && effectConfig?.hoverBrightness && effectConfig.hoverBrightness !== 1) {
178
+ ptColor = adjustBrightness(ptColor, effectConfig.hoverBrightness);
179
+ }
180
+ }
181
+ const userPointBorder = seriesProps?.pointBorderColor;
182
+ const ptHoverBorderColor = isPointHovered ? resolveMarkerHoverBorderColor(pi) : void 0;
183
+ const markerStrokeStr = ptHoverBorderColor ?? userPointBorder ?? ptColor;
184
+ const markerCls = svgClass("p-chart-marker", `p-chart-series-${sd.seriesIdx}`, ptColor === void 0 && colorClassN, isPointHovered && "p-chart-point-hover", anyHover && !isSeriesHovered && "p-chart-point-inactive");
185
+ const radarMarkerAttrs = {
186
+ fill: ptColor ?? themedSeriesColor,
187
+ stroke: markerStrokeStr ?? themedSeriesColor,
188
+ "stroke-width": resolveAccessor(seriesProps?.pointBorderStrokeWidth, makeItemContext(dataArr?.[pi], pi, { value: pt.value, category: ptCategory(pi), ...seriesExtras }), { arrayMode: "clip", fallback: 0 }) ?? 0,
189
+ "stroke-linejoin": seriesProps?.pointBorderJoinStyle ?? "miter",
190
+ opacity: seriesOpacity,
191
+ class: markerCls
192
+ };
193
+ const ptDash = resolveDash(seriesProps?.pointBorderDash, makeItemContext(dataArr?.[pi], pi, { value: pt.value, category: ptCategory(pi), ...seriesExtras }));
194
+ const ptDashOffset = resolveAccessor(seriesProps?.pointBorderDashOffset, makeItemContext(dataArr?.[pi], pi, { value: pt.value, category: ptCategory(pi), ...seriesExtras }), { arrayMode: "clip", fallback: 0 }) ?? 0;
195
+ if (ptDash && ptDash.length > 0) radarMarkerAttrs["stroke-dasharray"] = ptDash.join(" ");
196
+ if (ptDashOffset) radarMarkerAttrs["stroke-dashoffset"] = ptDashOffset;
197
+ const ptShape = resolveMarkerShape(pi, pointR);
198
+ let markerEl;
199
+ const ptRotation = resolvePointRotation(pi);
200
+ if (MARKER_SHAPE_NAMES.has(ptShape)) {
201
+ if (ptRotation) radarMarkerAttrs.transform = `rotate(${ptRotation}, ${pt.x}, ${pt.y})`;
202
+ markerEl = renderMarkerShapeSvg(ptShape, pt.x, pt.y, pointR, radarMarkerAttrs);
203
+ } else {
204
+ radarMarkerAttrs.transform = ptRotation ? `translate(${pt.x}, ${pt.y}) rotate(${ptRotation})` : `translate(${pt.x}, ${pt.y})`;
205
+ markerEl = createSvgPath(ptShape, radarMarkerAttrs);
206
+ }
207
+ setAttr(markerEl, "data-index", String(pi));
208
+ if (a11yEnabled) {
209
+ const category = layout.categories[pt.categoryIndex] ?? `Category ${pt.categoryIndex + 1}`;
210
+ const desc = formatPointDescription({ category, value: pt.value, seriesName, index: pt.categoryIndex }, a11y.pointDescriptionFormatter);
211
+ setAttr(markerEl, "role", "img");
212
+ setAttr(markerEl, "aria-label", desc);
213
+ }
214
+ appendChild(group, markerEl);
215
+ }
216
+ }
217
+ return group;
218
+ }
219
+
220
+ export { renderRadarSeriesSvg };
@@ -0,0 +1,114 @@
1
+ import { computeSliceRenderStates } from './chunk-53HW45JB.mjs';
2
+ import { buildSvgArcPath, CLIP_PIXEL_MARGIN } from './chunk-LVMDQ4OJ.mjs';
3
+ import { formatPointDescription } from './chunk-OGJ6IIBW.mjs';
4
+ import { FIELD_DEFAULTS, batchResolveAccessor, isGradientColor, remapStopsForDonut, createSvgGradientFromColor } from './chunk-O2X6FF45.mjs';
5
+ import { createSvgGroup, createSvgDefs, setAttr, appendChild, svgClass, svgNode, createSvgPath, prependChild } from './chunk-SSLTFJ3U.mjs';
6
+ import { toRad } from './chunk-RQ3CKQOX.mjs';
7
+
8
+ // src/series/pie/svg/index.ts
9
+ function renderPieSvg(props, layout, context) {
10
+ const renderStates = computeSliceRenderStates(props, layout, context.theme);
11
+ const { slices: sliceStates, center, outerRadius, innerRadius, isFullCircle: fullCircle } = renderStates;
12
+ const borderJoinStyle = props.borderJoinStyle ?? "miter";
13
+ const borderAlign = props.borderAlign ?? "inner";
14
+ const group = createSvgGroup(`translate(${center.x}, ${center.y})`);
15
+ const defs = createSvgDefs();
16
+ let hasDefs = false;
17
+ const dsIdx = layout.datasetIndex;
18
+ const a11y = context.accessibility;
19
+ const a11yEnabled = !!(a11y?.enabled && layout.visibleSlices.length <= (a11y.pointDescriptionThreshold ?? 200));
20
+ const categoryAccessor = props.categoryField ?? props.labelField ?? FIELD_DEFAULTS.categoryField;
21
+ const a11yLabels = a11yEnabled && categoryAccessor ? batchResolveAccessor(categoryAccessor, props.data) : [];
22
+ const total = layout.visibleSlices.reduce((sum, s) => sum + s.value, 0);
23
+ for (const state of sliceStates) {
24
+ const { slice, dataIndex, effectBorderColor, effectBorderWidth, effectBorderDash, effectBorderDashOffset, userFill, isHovered, isInactive, offset, scale, arcConfig } = state;
25
+ const { dx, dy } = offset;
26
+ const colorClassN = `p-chart-color-${dataIndex % 10}`;
27
+ const parts = [];
28
+ if (dx !== 0 || dy !== 0) parts.push(`translate(${dx}, ${dy})`);
29
+ if (scale !== 1) parts.push(`scale(${scale})`);
30
+ const sliceGroup = createSvgGroup(parts.length > 0 ? parts.join(" ") : void 0);
31
+ setAttr(sliceGroup, "data-slice-index", dataIndex);
32
+ setAttr(sliceGroup, "data-index", dataIndex);
33
+ if (a11yEnabled) {
34
+ const label = a11yLabels[dataIndex] ?? `Slice ${dataIndex + 1}`;
35
+ const desc = formatPointDescription({ category: label, value: slice.value, seriesName: props.name ?? "Chart", index: dataIndex, total, percentage: slice.percentage }, a11y.pointDescriptionFormatter);
36
+ setAttr(sliceGroup, "role", "img");
37
+ setAttr(sliceGroup, "aria-label", desc);
38
+ }
39
+ const pathD = buildSvgArcPath(arcConfig, fullCircle);
40
+ let fill;
41
+ if (userFill && isGradientColor(userFill)) {
42
+ const gradientId = `${context.chartId}-pie-${dsIdx}-grad-${dataIndex}`;
43
+ const gradientColor = innerRadius > 0 && userFill.radialGradient ? { ...userFill, stops: remapStopsForDonut(userFill.stops, innerRadius / outerRadius) } : userFill;
44
+ const gradient = createSvgGradientFromColor(gradientColor, gradientId, { x: 0, y: 0 }, outerRadius);
45
+ appendChild(defs, gradient);
46
+ hasDefs = true;
47
+ fill = `url(#${gradientId})`;
48
+ } else if (typeof userFill === "string") {
49
+ fill = userFill;
50
+ }
51
+ const sliceCls = svgClass("p-chart-arc", `p-chart-series-${dataIndex}`, fill === void 0 && colorClassN, isHovered && "p-chart-point-hover", isInactive && "p-chart-point-inactive");
52
+ const pathAttrs = {
53
+ fill: fill ?? context.theme.series[dataIndex % context.theme.series.length],
54
+ "data-index": dataIndex,
55
+ class: sliceCls
56
+ };
57
+ const hasBorder = effectBorderWidth > 0 && effectBorderColor !== "transparent";
58
+ const PIXEL_MARGIN = CLIP_PIXEL_MARGIN;
59
+ const angleDelta = arcConfig.outerRadius > 0 ? PIXEL_MARGIN / arcConfig.outerRadius * (180 / Math.PI) : 0;
60
+ const clipId = `${context.chartId}-pie-${dsIdx}-clip-${dataIndex}`;
61
+ const clipPathNode = svgNode("clipPath", { id: clipId });
62
+ const expandedClipPath = buildSvgArcPath(
63
+ {
64
+ ...arcConfig,
65
+ rotation: arcConfig.rotation - angleDelta,
66
+ endAngle: arcConfig.endAngle + angleDelta
67
+ },
68
+ fullCircle
69
+ );
70
+ const clipPathEl = createSvgPath(expandedClipPath, {});
71
+ appendChild(clipPathNode, clipPathEl);
72
+ appendChild(defs, clipPathNode);
73
+ hasDefs = true;
74
+ const fillPath = createSvgPath(pathD, { ...pathAttrs, "data-fill-path": "true" });
75
+ appendChild(sliceGroup, fillPath);
76
+ const strokeColor = hasBorder ? typeof effectBorderColor === "string" ? effectBorderColor : context.theme.borderColor : "transparent";
77
+ const strokeWidth = hasBorder ? borderAlign === "inner" ? effectBorderWidth * 2 : effectBorderWidth : 0;
78
+ const strokeAttrs = {
79
+ fill: "none",
80
+ stroke: strokeColor,
81
+ "stroke-width": strokeWidth,
82
+ "stroke-linejoin": borderJoinStyle,
83
+ "data-stroke-path": "true",
84
+ "data-clip-id": clipId
85
+ };
86
+ if (borderAlign === "inner") {
87
+ strokeAttrs["clip-path"] = `url(#${clipId})`;
88
+ }
89
+ if (hasBorder && effectBorderDash && effectBorderDash.length > 0) {
90
+ strokeAttrs["stroke-dasharray"] = effectBorderDash.join(" ");
91
+ if (effectBorderDashOffset > 0) {
92
+ strokeAttrs["stroke-dashoffset"] = effectBorderDashOffset;
93
+ }
94
+ }
95
+ const strokePath = createSvgPath(pathD, strokeAttrs);
96
+ appendChild(sliceGroup, strokePath);
97
+ const valueRadius = (outerRadius + innerRadius) / 2;
98
+ const midAngle = slice.rotation + (slice.endAngle - slice.rotation) / 2;
99
+ const contentX = Math.cos(toRad(midAngle)) * valueRadius;
100
+ const contentY = Math.sin(toRad(midAngle)) * valueRadius;
101
+ const contentSlot = createSvgGroup(`translate(${contentX}, ${contentY})`, {
102
+ class: "slice-content",
103
+ "data-content-index": dataIndex
104
+ });
105
+ appendChild(sliceGroup, contentSlot);
106
+ appendChild(group, sliceGroup);
107
+ }
108
+ if (hasDefs) {
109
+ prependChild(group, defs);
110
+ }
111
+ return group;
112
+ }
113
+
114
+ export { renderPieSvg };