@amcharts/amcharts5 5.16.1 → 5.17.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 (257) hide show
  1. package/.internal/charts/hierarchy/Hierarchy.d.ts +21 -0
  2. package/.internal/charts/hierarchy/Hierarchy.d.ts.map +1 -1
  3. package/.internal/charts/hierarchy/Hierarchy.js +60 -3
  4. package/.internal/charts/hierarchy/Hierarchy.js.map +1 -1
  5. package/.internal/charts/hierarchy/HierarchyDefaultTheme.d.ts.map +1 -1
  6. package/.internal/charts/hierarchy/HierarchyDefaultTheme.js +1 -0
  7. package/.internal/charts/hierarchy/HierarchyDefaultTheme.js.map +1 -1
  8. package/.internal/charts/hierarchy/LinkedHierarchy.d.ts +1 -0
  9. package/.internal/charts/hierarchy/LinkedHierarchy.d.ts.map +1 -1
  10. package/.internal/charts/hierarchy/LinkedHierarchy.js +9 -9
  11. package/.internal/charts/hierarchy/LinkedHierarchy.js.map +1 -1
  12. package/.internal/charts/hierarchy/Tree.d.ts +20 -0
  13. package/.internal/charts/hierarchy/Tree.d.ts.map +1 -1
  14. package/.internal/charts/hierarchy/Tree.js +11 -1
  15. package/.internal/charts/hierarchy/Tree.js.map +1 -1
  16. package/.internal/charts/map/MapChartDefaultTheme.d.ts.map +1 -1
  17. package/.internal/charts/map/MapChartDefaultTheme.js +3 -0
  18. package/.internal/charts/map/MapChartDefaultTheme.js.map +1 -1
  19. package/.internal/charts/map/MapSankeyNodes.d.ts +155 -0
  20. package/.internal/charts/map/MapSankeyNodes.d.ts.map +1 -0
  21. package/.internal/charts/map/MapSankeyNodes.js +151 -0
  22. package/.internal/charts/map/MapSankeyNodes.js.map +1 -0
  23. package/.internal/charts/map/MapSankeySeries.d.ts +383 -0
  24. package/.internal/charts/map/MapSankeySeries.d.ts.map +1 -0
  25. package/.internal/charts/map/MapSankeySeries.js +794 -0
  26. package/.internal/charts/map/MapSankeySeries.js.map +1 -0
  27. package/.internal/charts/xy/axes/ValueAxis.d.ts +15 -2
  28. package/.internal/charts/xy/axes/ValueAxis.d.ts.map +1 -1
  29. package/.internal/charts/xy/axes/ValueAxis.js +102 -79
  30. package/.internal/charts/xy/axes/ValueAxis.js.map +1 -1
  31. package/.internal/charts/xy/series/XYSeries.js +1 -1
  32. package/.internal/charts/xy/series/XYSeries.js.map +1 -1
  33. package/.internal/core/Classes.d.ts +6 -0
  34. package/.internal/core/Classes.d.ts.map +1 -1
  35. package/.internal/core/Classes.js.map +1 -1
  36. package/.internal/core/Registry.js +1 -1
  37. package/.internal/core/Registry.js.map +1 -1
  38. package/.internal/core/util/Entity.d.ts.map +1 -1
  39. package/.internal/core/util/Entity.js +6 -0
  40. package/.internal/core/util/Entity.js.map +1 -1
  41. package/.internal/core/util/Math.d.ts +132 -49
  42. package/.internal/core/util/Math.d.ts.map +1 -1
  43. package/.internal/core/util/Math.js +151 -50
  44. package/.internal/core/util/Math.js.map +1 -1
  45. package/.internal/core/util/Object.d.ts +24 -1
  46. package/.internal/core/util/Object.d.ts.map +1 -1
  47. package/.internal/core/util/Object.js +24 -1
  48. package/.internal/core/util/Object.js.map +1 -1
  49. package/.internal/core/util/PopulateString.d.ts +23 -1
  50. package/.internal/core/util/PopulateString.d.ts.map +1 -1
  51. package/.internal/core/util/PopulateString.js +19 -5
  52. package/.internal/core/util/PopulateString.js.map +1 -1
  53. package/.internal/core/util/Utils.d.ts +69 -3
  54. package/.internal/core/util/Utils.d.ts.map +1 -1
  55. package/.internal/core/util/Utils.js +72 -18
  56. package/.internal/core/util/Utils.js.map +1 -1
  57. package/.internal/plugins/json/Classes-script.d.ts +6 -0
  58. package/.internal/plugins/json/Classes-script.d.ts.map +1 -1
  59. package/.internal/plugins/json/Classes-script.js +3 -0
  60. package/.internal/plugins/json/Classes-script.js.map +1 -1
  61. package/.internal/plugins/json/Classes.d.ts +6 -0
  62. package/.internal/plugins/json/Classes.d.ts.map +1 -1
  63. package/.internal/plugins/json/Classes.js +3 -0
  64. package/.internal/plugins/json/Classes.js.map +1 -1
  65. package/CHANGELOG.md +30 -6
  66. package/README.md +12 -0
  67. package/examples/javascript/flow-arc-horizontal/package.json +1 -1
  68. package/examples/javascript/flow-arc-vertical/package.json +1 -1
  69. package/examples/javascript/flow-chord/package.json +1 -1
  70. package/examples/javascript/flow-chord-directed/package.json +1 -1
  71. package/examples/javascript/flow-chord-non-ribbon/package.json +1 -1
  72. package/examples/javascript/flow-sankey/package.json +1 -1
  73. package/examples/javascript/gantt/package.json +1 -1
  74. package/examples/javascript/gantt-multilevel/package.json +1 -1
  75. package/examples/javascript/gantt-simple/package.json +1 -1
  76. package/examples/javascript/gauge/package.json +1 -1
  77. package/examples/javascript/gauge-bands/package.json +1 -1
  78. package/examples/javascript/hierarchy-force-directed/package.json +1 -1
  79. package/examples/javascript/hierarchy-pack/package.json +1 -1
  80. package/examples/javascript/hierarchy-partition/package.json +1 -1
  81. package/examples/javascript/hierarchy-sunburst/package.json +1 -1
  82. package/examples/javascript/hierarchy-tree/package.json +1 -1
  83. package/examples/javascript/hierarchy-treemap/package.json +1 -1
  84. package/examples/javascript/hierarchy-voronoi-treemap/package.json +1 -1
  85. package/examples/javascript/jest/package.json +1 -1
  86. package/examples/javascript/json-pie/package.json +1 -1
  87. package/examples/javascript/json-xy/package.json +1 -1
  88. package/examples/javascript/map-animating-along-lines/package.json +1 -1
  89. package/examples/javascript/map-clustered-points/package.json +1 -1
  90. package/examples/javascript/map-day-and-night/package.json +1 -1
  91. package/examples/javascript/map-globe-rotate-to-country/package.json +1 -1
  92. package/examples/javascript/map-globe-with-projected-circles/package.json +1 -1
  93. package/examples/javascript/map-sankey/README.md +6 -0
  94. package/examples/javascript/map-sankey/index.css +11 -0
  95. package/examples/javascript/map-sankey/index.html +13 -0
  96. package/examples/javascript/map-sankey/index.js +368 -0
  97. package/examples/javascript/map-sankey/package.json +17 -0
  98. package/examples/javascript/map-sankey/webpack.config.js +38 -0
  99. package/examples/javascript/map-sankey-waypoints/README.md +6 -0
  100. package/examples/javascript/map-sankey-waypoints/index.css +11 -0
  101. package/examples/javascript/map-sankey-waypoints/index.html +13 -0
  102. package/examples/javascript/map-sankey-waypoints/index.js +394 -0
  103. package/examples/javascript/map-sankey-waypoints/package.json +17 -0
  104. package/examples/javascript/map-sankey-waypoints/webpack.config.js +38 -0
  105. package/examples/javascript/map-with-bubbles/package.json +1 -1
  106. package/examples/javascript/map-zoom-to-country/package.json +1 -1
  107. package/examples/javascript/misc-40-charts/package.json +1 -1
  108. package/examples/javascript/misc-microchart-grid/package.json +1 -1
  109. package/examples/javascript/pie-chart/package.json +1 -1
  110. package/examples/javascript/pie-donut-chart/package.json +1 -1
  111. package/examples/javascript/pie-variable-radius/package.json +1 -1
  112. package/examples/javascript/radar-column-iwatch-style/package.json +1 -1
  113. package/examples/javascript/radar-heat-map/package.json +1 -1
  114. package/examples/javascript/radar-line/package.json +1 -1
  115. package/examples/javascript/radar-time-line/package.json +1 -1
  116. package/examples/javascript/sliced-funnel/package.json +1 -1
  117. package/examples/javascript/sliced-pictorial-stacked/package.json +1 -1
  118. package/examples/javascript/sliced-pyramid/package.json +1 -1
  119. package/examples/javascript/stock-chart/package.json +1 -1
  120. package/examples/javascript/stock-chart-comparing-stocks/package.json +1 -1
  121. package/examples/javascript/stock-chart-data-granularity/package.json +1 -1
  122. package/examples/javascript/stock-chart-data-grouping/package.json +1 -1
  123. package/examples/javascript/stock-chart-intraday/package.json +1 -1
  124. package/examples/javascript/stock-chart-live/package.json +1 -1
  125. package/examples/javascript/stock-chart-volume-separate-panel/package.json +1 -1
  126. package/examples/javascript/timeline-horizontal-serpentine-chart/package.json +1 -1
  127. package/examples/javascript/timeline-linear-process-diagram/package.json +1 -1
  128. package/examples/javascript/timeline-serpentine-chart/package.json +1 -1
  129. package/examples/javascript/timeline-spiral-chart/package.json +1 -1
  130. package/examples/javascript/venn-diagram/package.json +1 -1
  131. package/examples/javascript/wordcloud-with-data/package.json +1 -1
  132. package/examples/javascript/wordcloud-with-text/package.json +1 -1
  133. package/examples/javascript/xy-100-percent-stacked-column/package.json +1 -1
  134. package/examples/javascript/xy-animated-bullet-at-the-end-of-the-series/package.json +1 -1
  135. package/examples/javascript/xy-bubble/package.json +1 -1
  136. package/examples/javascript/xy-candlestick/package.json +1 -1
  137. package/examples/javascript/xy-clustered-column/package.json +1 -1
  138. package/examples/javascript/xy-column/package.json +1 -1
  139. package/examples/javascript/xy-comparing-series-google-analytics-style/package.json +1 -1
  140. package/examples/javascript/xy-data-grouping/package.json +1 -1
  141. package/examples/javascript/xy-draggable-range/package.json +1 -1
  142. package/examples/javascript/xy-drawing-series-with-mouse-or-touch/package.json +1 -1
  143. package/examples/javascript/xy-dumbbell plot/package.json +1 -1
  144. package/examples/javascript/xy-evenly-spaced-date-axis/package.json +1 -1
  145. package/examples/javascript/xy-line/package.json +1 -1
  146. package/examples/javascript/xy-line-highlight-on-legend-hover/package.json +1 -1
  147. package/examples/javascript/xy-live-data/package.json +1 -1
  148. package/examples/javascript/xy-multiple-synced-value-axes/package.json +1 -1
  149. package/examples/javascript/xy-ohlc/package.json +1 -1
  150. package/examples/javascript/xy-real-time-data-sorting/package.json +1 -1
  151. package/examples/javascript/xy-smoothed-line/package.json +1 -1
  152. package/examples/javascript/xy-stacked-and-clustered-column/package.json +1 -1
  153. package/examples/javascript/xy-stacked-column/package.json +1 -1
  154. package/examples/javascript/xy-stacked-step/package.json +1 -1
  155. package/examples/javascript/xy-stock/package.json +1 -1
  156. package/examples/javascript/xy-stock-comparing/package.json +1 -1
  157. package/examples/typescript/flow-arc-horizontal/package.json +1 -1
  158. package/examples/typescript/flow-arc-vertical/package.json +1 -1
  159. package/examples/typescript/flow-chord/package.json +1 -1
  160. package/examples/typescript/flow-chord-directed/package.json +1 -1
  161. package/examples/typescript/flow-chord-non-ribbon/package.json +1 -1
  162. package/examples/typescript/flow-sankey/package.json +1 -1
  163. package/examples/typescript/gantt/package.json +1 -1
  164. package/examples/typescript/gantt-multilevel/package.json +1 -1
  165. package/examples/typescript/gantt-simple/package.json +1 -1
  166. package/examples/typescript/gauge/package.json +1 -1
  167. package/examples/typescript/gauge-bands/package.json +1 -1
  168. package/examples/typescript/hierarchy-force-directed/package.json +1 -1
  169. package/examples/typescript/hierarchy-pack/package.json +1 -1
  170. package/examples/typescript/hierarchy-partition/package.json +1 -1
  171. package/examples/typescript/hierarchy-sunburst/package.json +1 -1
  172. package/examples/typescript/hierarchy-tree/package.json +1 -1
  173. package/examples/typescript/hierarchy-treemap/package.json +1 -1
  174. package/examples/typescript/hierarchy-voronoi-treemap/package.json +1 -1
  175. package/examples/typescript/jest/package.json +1 -1
  176. package/examples/typescript/json-pie/package.json +1 -1
  177. package/examples/typescript/json-xy/package.json +1 -1
  178. package/examples/typescript/map-animating-along-lines/package.json +1 -1
  179. package/examples/typescript/map-clustered-points/package.json +1 -1
  180. package/examples/typescript/map-day-and-night/package.json +1 -1
  181. package/examples/typescript/map-globe-rotate-to-country/package.json +1 -1
  182. package/examples/typescript/map-globe-with-projected-circles/package.json +1 -1
  183. package/examples/typescript/map-sankey/README.md +6 -0
  184. package/examples/typescript/map-sankey/index.css +11 -0
  185. package/examples/typescript/map-sankey/index.html +13 -0
  186. package/examples/typescript/map-sankey/index.ts +368 -0
  187. package/examples/typescript/map-sankey/package.json +19 -0
  188. package/examples/typescript/map-sankey/tsconfig.json +12 -0
  189. package/examples/typescript/map-sankey/webpack.config.js +45 -0
  190. package/examples/typescript/map-sankey-waypoints/README.md +6 -0
  191. package/examples/typescript/map-sankey-waypoints/index.css +11 -0
  192. package/examples/typescript/map-sankey-waypoints/index.html +13 -0
  193. package/examples/typescript/map-sankey-waypoints/index.ts +394 -0
  194. package/examples/typescript/map-sankey-waypoints/package.json +19 -0
  195. package/examples/typescript/map-sankey-waypoints/tsconfig.json +12 -0
  196. package/examples/typescript/map-sankey-waypoints/webpack.config.js +45 -0
  197. package/examples/typescript/map-with-bubbles/package.json +1 -1
  198. package/examples/typescript/map-zoom-to-country/package.json +1 -1
  199. package/examples/typescript/misc-40-charts/package.json +1 -1
  200. package/examples/typescript/misc-microchart-grid/package.json +1 -1
  201. package/examples/typescript/pie-chart/package.json +1 -1
  202. package/examples/typescript/pie-donut-chart/package.json +1 -1
  203. package/examples/typescript/pie-variable-radius/package.json +1 -1
  204. package/examples/typescript/radar-column-iwatch-style/package.json +1 -1
  205. package/examples/typescript/radar-heat-map/package.json +1 -1
  206. package/examples/typescript/radar-line/package.json +1 -1
  207. package/examples/typescript/radar-time-line/package.json +1 -1
  208. package/examples/typescript/sliced-funnel/package.json +1 -1
  209. package/examples/typescript/sliced-pictorial-stacked/package.json +1 -1
  210. package/examples/typescript/sliced-pyramid/package.json +1 -1
  211. package/examples/typescript/stock-chart/package.json +1 -1
  212. package/examples/typescript/stock-chart-comparing-stocks/package.json +1 -1
  213. package/examples/typescript/stock-chart-data-granularity/package.json +1 -1
  214. package/examples/typescript/stock-chart-data-grouping/package.json +1 -1
  215. package/examples/typescript/stock-chart-intraday/package.json +1 -1
  216. package/examples/typescript/stock-chart-live/package.json +1 -1
  217. package/examples/typescript/stock-chart-volume-separate-panel/package.json +1 -1
  218. package/examples/typescript/timeline-horizontal-serpentine-chart/package.json +1 -1
  219. package/examples/typescript/timeline-linear-process-diagram/package.json +1 -1
  220. package/examples/typescript/timeline-serpentine-chart/package.json +1 -1
  221. package/examples/typescript/timeline-spiral-chart/package.json +1 -1
  222. package/examples/typescript/venn-diagram/package.json +1 -1
  223. package/examples/typescript/wordcloud-with-data/package.json +1 -1
  224. package/examples/typescript/wordcloud-with-text/package.json +1 -1
  225. package/examples/typescript/xy-100-percent-stacked-column/package.json +1 -1
  226. package/examples/typescript/xy-animated-bullet-at-the-end-of-the-series/package.json +1 -1
  227. package/examples/typescript/xy-bubble/package.json +1 -1
  228. package/examples/typescript/xy-candlestick/package.json +1 -1
  229. package/examples/typescript/xy-clustered-column/package.json +1 -1
  230. package/examples/typescript/xy-column/package.json +1 -1
  231. package/examples/typescript/xy-comparing-series-google-analytics-style/package.json +1 -1
  232. package/examples/typescript/xy-data-grouping/package.json +1 -1
  233. package/examples/typescript/xy-draggable-range/package.json +1 -1
  234. package/examples/typescript/xy-drawing-series-with-mouse-or-touch/package.json +1 -1
  235. package/examples/typescript/xy-dumbbell plot/package.json +1 -1
  236. package/examples/typescript/xy-evenly-spaced-date-axis/package.json +1 -1
  237. package/examples/typescript/xy-line/package.json +1 -1
  238. package/examples/typescript/xy-line-highlight-on-legend-hover/package.json +1 -1
  239. package/examples/typescript/xy-live-data/package.json +1 -1
  240. package/examples/typescript/xy-multiple-synced-value-axes/package.json +1 -1
  241. package/examples/typescript/xy-ohlc/package.json +1 -1
  242. package/examples/typescript/xy-real-time-data-sorting/package.json +1 -1
  243. package/examples/typescript/xy-smoothed-line/package.json +1 -1
  244. package/examples/typescript/xy-stacked-and-clustered-column/package.json +1 -1
  245. package/examples/typescript/xy-stacked-column/package.json +1 -1
  246. package/examples/typescript/xy-stacked-step/package.json +1 -1
  247. package/examples/typescript/xy-stock/package.json +1 -1
  248. package/examples/typescript/xy-stock-comparing/package.json +1 -1
  249. package/index.d.ts +1 -0
  250. package/index.d.ts.map +1 -1
  251. package/index.js +1 -0
  252. package/index.js.map +1 -1
  253. package/map.d.ts +2 -0
  254. package/map.d.ts.map +1 -1
  255. package/map.js +2 -0
  256. package/map.js.map +1 -1
  257. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapSankeySeries.js","sourceRoot":"","sources":["../../../../../src/.internal/charts/map/MapSankeySeries.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DataItem } from \"../../core/render/Component\";\nimport type { Bullet } from \"../../core/render/Bullet\";\nimport type { IOrientationPoint } from \"../../core/util/IPoint\";\nimport type { IGeoPoint } from \"../../core/util/IGeoPoint\";\n\nimport { MapPolygonSeries, IMapPolygonSeriesSettings, IMapPolygonSeriesDataItem, IMapPolygonSeriesPrivate } from \"./MapPolygonSeries\";\nimport { MapSankeyNodes, IMapSankeyNodesDataItem } from \"./MapSankeyNodes\";\nimport { getGeoCentroid, getGeoCircle } from \"./MapUtils\";\nimport { geoArea } from \"d3-geo\";\n\nimport * as $array from \"../../core/util/Array\";\nimport * as $math from \"../../core/util/Math\";\n\n/**\n * Parameters for a single cubic bezier segment in geographic coordinates.\n * @ignore\n */\nexport interface IBezierSegment {\n\tp0Lon: number; p0Lat: number;\n\tp1Lon: number; p1Lat: number;\n\tcp0Lon: number; cp0Lat: number;\n\tcp1Lon: number; cp1Lat: number;\n}\n\nexport interface IMapSankeySeriesPrivate extends IMapPolygonSeriesPrivate {\n}\n\nexport interface IMapSankeySeriesDataItem extends IMapPolygonSeriesDataItem {\n\n\t/**\n\t * Source polygon ID (matches id in polygonSeries).\n\t */\n\tsourceId?: string;\n\n\t/**\n\t * Target polygon ID (matches id in polygonSeries).\n\t */\n\ttargetId?: string;\n\n\t/**\n\t * Source longitude (if not using sourceId).\n\t */\n\tsourceLongitude?: number;\n\n\t/**\n\t * Source latitude (if not using sourceId).\n\t */\n\tsourceLatitude?: number;\n\n\t/**\n\t * Target longitude (if not using targetId).\n\t */\n\ttargetLongitude?: number;\n\n\t/**\n\t * Target latitude (if not using targetId).\n\t */\n\ttargetLatitude?: number;\n\n\t/**\n\t * Numeric value controlling band thickness.\n\t */\n\tvalue?: number;\n\n\t/**\n\t * Waypoints for routing the band through intermediate geographic points.\n\t */\n\twaypoints?: Array<IGeoPoint>;\n\n\t/**\n\t * Per-link control point distance. Overrides series-level `controlPointDistance`.\n\t */\n\tcontrolPointDistance?: number;\n\n\t/**\n\t * Per-link control point distance at the source end.\n\t * Overrides series-level `controlPointDistanceSource`.\n\t */\n\tcontrolPointDistanceSource?: number;\n\n\t/**\n\t * Per-link control point distance at the target end.\n\t * Overrides series-level `controlPointDistanceTarget`.\n\t */\n\tcontrolPointDistanceTarget?: number;\n\n\t/**\n\t * Reference to the source node data item.\n\t * @readonly\n\t */\n\tsourceNode?: DataItem<IMapSankeyNodesDataItem>;\n\n\t/**\n\t * Reference to the target node data item.\n\t * @readonly\n\t */\n\ttargetNode?: DataItem<IMapSankeyNodesDataItem>;\n\n}\n\nexport interface IMapSankeySeriesSettings extends IMapPolygonSeriesSettings {\n\n\t/**\n\t * A [[MapPolygonSeries]] to use for resolving `sourceId`/`targetId` to geographic centroids.\n\t */\n\tpolygonSeries?: MapPolygonSeries;\n\n\t/**\n\t * Control point distance for bezier curves (0-0.5). Higher values =\n\t * longer straight sections before the S-curve transition.\n\t *\n\t * Used as fallback when `controlPointDistanceSource` or\n\t * `controlPointDistanceTarget` are not set.\n\t *\n\t * @default 0.5\n\t */\n\tcontrolPointDistance?: number;\n\n\t/**\n\t * Control point distance at the source (departure) end.\n\t * Higher values = longer straight section leaving the source node.\n\t *\n\t * Falls back to `controlPointDistance` if not set.\n\t */\n\tcontrolPointDistanceSource?: number;\n\n\t/**\n\t * Control point distance at the target (arrival) end.\n\t * Higher values = longer straight section approaching the target node.\n\t *\n\t * Falls back to `controlPointDistance` if not set.\n\t */\n\tcontrolPointDistanceTarget?: number;\n\n\t/**\n\t * Orientation of the S-curve links.\n\t *\n\t * `\"horizontal\"` — links depart and arrive horizontally (east/west).\n\t * Bands stack vertically at each endpoint.\n\t * `\"vertical\"` — links depart and arrive vertically (north/south).\n\t * Bands stack horizontally at each endpoint.\n\t *\n\t * @default \"horizontal\"\n\t */\n\torientation?: \"horizontal\" | \"vertical\";\n\n\t/**\n\t * Maximum band width in geographic degrees.\n\t * @default 5\n\t */\n\tmaxWidth?: number;\n\n\t/**\n\t * Number of sample points per bezier segment. Higher = smoother curves.\n\t * @default 50\n\t */\n\tresolution?: number;\n\n\t/**\n\t * Extra padding added to endpoint nodes in geographic degrees.\n\t * For circles, added to the radius. For bars, added to the half-height.\n\t * Helps avoid subpixel gaps between bands and the node shape.\n\t * @default 0.3\n\t */\n\tnodePadding?: number;\n\n\t/**\n\t * When `true`, bands at each endpoint are sorted by the latitude of\n\t * their target/source so that bands heading north are stacked above\n\t * bands heading south. This prevents bands from overlapping.\n\t * @default true\n\t */\n\tautoSort?: boolean;\n\n\t/**\n\t * Controls how links handle the antimeridian (±180° longitude).\n\t *\n\t * `\"short\"` — links always take the shorter path, crossing the\n\t * antimeridian if needed (e.g. China → US goes east across the Pacific).\n\t * `\"long\"` — links never cross the antimeridian, always going the\n\t * long way around.\n\t *\n\t * Only applies to links without waypoints; waypoints define the\n\t * route explicitly.\n\t *\n\t * @default \"short\"\n\t */\n\tantimeridian?: \"short\" | \"long\";\n\n\t/**\n\t * Shape of the endpoint node. Styled via `nodes.mapPolygons.template`.\n\t *\n\t * `\"circle\"` — a circle covering all flows at the endpoint.\n\t * `\"bar\"` — a rectangular bar like in a traditional Sankey diagram.\n\t * Bar orientation is perpendicular to the flow direction.\n\t *\n\t * @default \"circle\"\n\t */\n\tnodeType?: \"circle\" | \"bar\";\n\n\t/**\n\t * Width of the bar at endpoint nodes in geographic degrees.\n\t * Only used when `nodeType` is `\"bar\"`.\n\t * @default 1\n\t */\n\tnodeWidth?: number;\n\n\t/**\n\t * Controls how link bands are colored.\n\t *\n\t * `\"solid\"` — all links use the template fill (default).\n\t * `\"source\"` — each link inherits the source node's fill.\n\t * `\"target\"` — each link inherits the target node's fill.\n\t *\n\t * @default \"solid\"\n\t */\n\tlinkColorMode?: \"solid\" | \"source\" | \"target\";\n\n\t/**\n\t * A field in data that holds the source polygon ID.\n\t * @default \"sourceId\"\n\t */\n\tsourceIdField?: string;\n\n\t/**\n\t * A field in data that holds the target polygon ID.\n\t * @default \"targetId\"\n\t */\n\ttargetIdField?: string;\n\n\t/**\n\t * A field in data that holds the source longitude.\n\t * @default \"sourceLongitude\"\n\t */\n\tsourceLongitudeField?: string;\n\n\t/**\n\t * A field in data that holds the source latitude.\n\t * @default \"sourceLatitude\"\n\t */\n\tsourceLatitudeField?: string;\n\n\t/**\n\t * A field in data that holds the target longitude.\n\t * @default \"targetLongitude\"\n\t */\n\ttargetLongitudeField?: string;\n\n\t/**\n\t * A field in data that holds the target latitude.\n\t * @default \"targetLatitude\"\n\t */\n\ttargetLatitudeField?: string;\n\n\t/**\n\t * A field in data that holds the waypoints array.\n\t * @default \"waypoints\"\n\t */\n\twaypointsField?: string;\n\n}\n\n/**\n * Creates a map series for displaying Sankey-style flow bands on a map.\n *\n * Generates actual GeoJSON polygon geometries for each flow, so they\n * properly follow the map projection during panning, zooming, and rotation.\n *\n * @see {@link https://www.amcharts.com/docs/v5/charts/map-chart/map-sankey-series/} for more info\n * @since 5.17.0\n * @important\n */\nexport class MapSankeySeries extends MapPolygonSeries {\n\n\t/**\n\t * Don't consume polygon features from geodata - our data comes from user's data array.\n\t */\n\tprotected _types: Array<GeoJSON.GeoJsonGeometryTypes> = [];\n\n\t/**\n\t * A sub-series that manages node data items and visuals.\n\t *\n\t * Nodes are auto-created from link data. You can also set\n\t * `nodes.data.setAll([...])` with custom names and fills.\n\t *\n\t * `nodes.mapPolygons.template` configures node appearance.\n\t */\n\tpublic readonly nodes: MapSankeyNodes = this.addDisposer(\n\t\tMapSankeyNodes.new(this._root, {})\n\t);\n\n\t/**\n\t * Stored bezier segment params per data item for bullet positioning.\n\t * Each link can have multiple segments (when waypoints are used).\n\t * @ignore\n\t */\n\tpublic _bezierSegments: Map<DataItem<IMapSankeySeriesDataItem>, Array<IBezierSegment>> = new Map();\n\n\t/**\n\t * Cumulative arc-length array per data item for uniform-speed bullet positioning.\n\t * Entry i = cumulative length from segment 0 through segment i.\n\t * Last entry = total path length.\n\t * @ignore\n\t */\n\tpublic _segmentCumulativeLengths: Map<DataItem<IMapSankeySeriesDataItem>, number[]> = new Map();\n\n\t// Reusable scratch Maps for _generateGeometries — cleared and reused each call\n\t// to avoid allocating 10 fresh Maps per dirty cycle.\n\tprivate _geoSourceCoords: Map<DataItem<IMapSankeySeriesDataItem>, IGeoPoint> = new Map();\n\tprivate _geoTargetCoords: Map<DataItem<IMapSankeySeriesDataItem>, IGeoPoint> = new Map();\n\tprivate _geoWidths: Map<DataItem<IMapSankeySeriesDataItem>, number> = new Map();\n\tprivate _geoSourceGroups: Map<string, Array<DataItem<IMapSankeySeriesDataItem>>> = new Map();\n\tprivate _geoTargetGroups: Map<string, Array<DataItem<IMapSankeySeriesDataItem>>> = new Map();\n\tprivate _geoNodeSourceTotal: Map<string, number> = new Map();\n\tprivate _geoNodeTargetTotal: Map<string, number> = new Map();\n\tprivate _geoNodeRange: Map<string, number> = new Map();\n\tprivate _geoSourceOffsets: Map<DataItem<IMapSankeySeriesDataItem>, number> = new Map();\n\tprivate _geoTargetOffsets: Map<DataItem<IMapSankeySeriesDataItem>, number> = new Map();\n\n\t/**\n\t * @ignore\n\t */\n\tprotected _afterNew() {\n\t\tthis.fields.push(\"sourceId\", \"targetId\", \"sourceLongitude\", \"sourceLatitude\", \"targetLongitude\", \"targetLatitude\", \"waypoints\");\n\t\tthis.valueFields.push(\"value\");\n\n\t\tthis._setRawDefault(\"sourceIdField\", \"sourceId\");\n\t\tthis._setRawDefault(\"targetIdField\", \"targetId\");\n\t\tthis._setRawDefault(\"sourceLongitudeField\", \"sourceLongitude\");\n\t\tthis._setRawDefault(\"sourceLatitudeField\", \"sourceLatitude\");\n\t\tthis._setRawDefault(\"targetLongitudeField\", \"targetLongitude\");\n\t\tthis._setRawDefault(\"targetLatitudeField\", \"targetLatitude\");\n\t\tthis._setRawDefault(\"valueField\", \"value\");\n\t\tthis._setRawDefault(\"waypointsField\", \"waypoints\");\n\n\t\tthis.nodes.flow = this;\n\n\t\tsuper._afterNew();\n\t}\n\n\tpublic static className: string = \"MapSankeySeries\";\n\tpublic static classNames: Array<string> = MapPolygonSeries.classNames.concat([MapSankeySeries.className]);\n\n\tdeclare public _settings: IMapSankeySeriesSettings;\n\tdeclare public _privateSettings: IMapSankeySeriesPrivate;\n\tdeclare public _dataItemSettings: IMapSankeySeriesDataItem;\n\n\t/**\n\t * @ignore\n\t */\n\tpublic markDirtyProjection() {\n\t\tsuper.markDirtyProjection();\n\t\t$array.each(this.nodes.dataItems, (nodeDataItem) => {\n\t\t\tconst mapPolygon = nodeDataItem.get(\"mapPolygon\");\n\t\t\tif (mapPolygon) {\n\t\t\t\tmapPolygon.markDirtyProjection();\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Evaluate a single bezier segment at parameter t.\n\t *\n\t * Same formula as $math.getPointOnCubicCurve but operates on flat\n\t * IBezierSegment fields (lon/lat) to avoid IPoint object allocation.\n\t */\n\tprotected _evalBezier(bp: IBezierSegment, t: number): IGeoPoint {\n\t\tconst s = 1 - t;\n\t\treturn {\n\t\t\tlongitude: s * s * s * bp.p0Lon + 3 * s * s * t * bp.cp0Lon + 3 * s * t * t * bp.cp1Lon + t * t * t * bp.p1Lon,\n\t\t\tlatitude: s * s * s * bp.p0Lat + 3 * s * s * t * bp.cp0Lat + 3 * s * t * t * bp.cp1Lat + t * t * t * bp.p1Lat\n\t\t};\n\t}\n\n\t/**\n\t * Approximates the arc length of a single bezier segment by sampling\n\t * points along the curve and summing Haversine distances.\n\t *\n\t * @param bp Bezier segment parameters\n\t * @param samples Number of sample intervals (default 20)\n\t * @return Approximate arc length in radians\n\t */\n\tprotected _segmentArcLength(bp: IBezierSegment, samples: number = 20): number {\n\t\tlet length = 0;\n\t\tlet prev = this._evalBezier(bp, 0);\n\t\tfor (let i = 1; i <= samples; i++) {\n\t\t\tconst pt = this._evalBezier(bp, i / samples);\n\t\t\tconst dLon = (pt.longitude - prev.longitude) * Math.PI / 180;\n\t\t\tconst dLat = (pt.latitude - prev.latitude) * Math.PI / 180;\n\t\t\t// Haversine approximation\n\t\t\tconst a = Math.sin(dLat / 2) ** 2 + Math.cos(prev.latitude * Math.PI / 180) * Math.cos(pt.latitude * Math.PI / 180) * Math.sin(dLon / 2) ** 2;\n\t\t\tlength += 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n\t\t\tprev = pt;\n\t\t}\n\t\treturn length;\n\t}\n\n\t/**\n\t * Computes cumulative arc lengths for a set of bezier segments and\n\t * stores them in `_segmentCumulativeLengths` for arc-length parameterization.\n\t *\n\t * @param dataItem Link data item (used as cache key)\n\t * @param segments Array of bezier segment parameters\n\t */\n\tprotected _computeCumulativeLengths(dataItem: DataItem<IMapSankeySeriesDataItem>, segments: Array<IBezierSegment>): void {\n\t\tconst cumulative: number[] = [];\n\t\tlet total = 0;\n\t\tfor (let i = 0; i < segments.length; i++) {\n\t\t\ttotal += this._segmentArcLength(segments[i]);\n\t\t\tcumulative.push(total);\n\t\t}\n\t\tthis._segmentCumulativeLengths.set(dataItem, cumulative);\n\t}\n\n\t/**\n\t * Resolves a normalized location (0–1) to a segment index and local t\n\t * using arc-length parameterization. Delegates to `$math.resolveLocationOnPath`\n\t * when cumulative lengths are available; falls back to equal distribution.\n\t *\n\t * @param dataItem Link data item (for cumulative length lookup)\n\t * @param location Relative position along the full path (0–1)\n\t * @param segments Array of bezier segment parameters (used for fallback)\n\t * @return Segment index and local t (0–1)\n\t */\n\tprotected _resolveLocation(dataItem: DataItem<IMapSankeySeriesDataItem>, location: number, segments: Array<IBezierSegment>): { segIdx: number; t: number } {\n\t\tconst cumLengths = this._segmentCumulativeLengths.get(dataItem);\n\n\t\tif (cumLengths && cumLengths.length > 0) {\n\t\t\tconst result = $math.resolveLocationOnPath(location, cumLengths);\n\t\t\treturn { segIdx: result.index, t: result.t };\n\t\t}\n\n\t\t// Fallback: equal distribution\n\t\tconst n = segments.length;\n\t\tconst scaled = location * n;\n\t\tconst segIdx = Math.min(Math.floor(scaled), n - 1);\n\t\treturn { segIdx, t: scaled - segIdx };\n\t}\n\n\t/**\n\t * Returns a screen-space point at a relative position (0-1) along\n\t * the center-line bezier for the given data item.\n\t *\n\t * Used internally for bullet positioning, but can also be called\n\t * directly to get coordinates along a flow path.\n\t *\n\t * @param dataItem Target data item\n\t * @param location Relative position (0 = source, 1 = target)\n\t * @return Screen coordinates and angle\n\t */\n\tpublic getPoint(dataItem: DataItem<IMapSankeySeriesDataItem>, location: number): IOrientationPoint {\n\t\tconst segments = this._bezierSegments.get(dataItem);\n\t\tconst chart = this.chart;\n\t\tif (!segments || segments.length === 0 || !chart) return { x: 0, y: 0, angle: 0 };\n\n\t\tconst { segIdx, t } = this._resolveLocation(dataItem, location, segments);\n\t\tconst bp = segments[segIdx];\n\n\t\tconst pt = this._evalBezier(bp, t);\n\t\tconst screenPoint = chart.convert({ longitude: pt.longitude, latitude: pt.latitude });\n\n\t\t// Angle from a nearby point — use backward difference near t=1 to avoid identical points\n\t\tconst dt = 0.001;\n\t\tlet pt2: IGeoPoint;\n\t\tlet sign = 1;\n\t\tif (t + dt <= 1) {\n\t\t\tpt2 = this._evalBezier(bp, t + dt);\n\t\t} else {\n\t\t\tpt2 = this._evalBezier(bp, t - dt);\n\t\t\tsign = -1;\n\t\t}\n\t\tconst screenPoint2 = chart.convert({ longitude: pt2.longitude, latitude: pt2.latitude });\n\n\t\tconst angle = Math.atan2(sign * (screenPoint2.y - screenPoint.y), sign * (screenPoint2.x - screenPoint.x)) * 180 / Math.PI;\n\n\t\treturn { x: screenPoint.x, y: screenPoint.y, angle };\n\t}\n\n\t/**\n\t * Returns a geo point at a relative position (0-1) along the center-line bezier.\n\t */\n\tpublic getGeoPoint(dataItem: DataItem<IMapSankeySeriesDataItem>, location: number): IGeoPoint | undefined {\n\t\tconst segments = this._bezierSegments.get(dataItem);\n\t\tif (!segments || segments.length === 0) return undefined;\n\n\t\tconst { segIdx, t } = this._resolveLocation(dataItem, location, segments);\n\t\treturn this._evalBezier(segments[segIdx], t);\n\t}\n\n\t/**\n\t * Returns the approximate arc length of the path for a data item.\n\t * Useful for scaling animation duration proportionally to distance.\n\t */\n\tpublic getPathLength(dataItem: DataItem<IMapSankeySeriesDataItem>): number {\n\t\tconst cumLengths = this._segmentCumulativeLengths.get(dataItem);\n\t\tif (cumLengths && cumLengths.length > 0) {\n\t\t\treturn cumLengths[cumLengths.length - 1];\n\t\t}\n\t\treturn 0;\n\t}\n\n\t/**\n\t * Combined getPoint + getGeoPoint in a single pass (avoids double\n\t * _resolveLocation + _evalBezier per bullet per frame).\n\t * @ignore\n\t */\n\tprivate _getPointWithGeo(dataItem: DataItem<IMapSankeySeriesDataItem>, location: number): { x: number; y: number; angle: number; geoPoint: IGeoPoint } | undefined {\n\t\tconst segments = this._bezierSegments.get(dataItem);\n\t\tconst chart = this.chart;\n\t\tif (!segments || segments.length === 0 || !chart) return undefined;\n\n\t\tconst { segIdx, t } = this._resolveLocation(dataItem, location, segments);\n\t\tconst bp = segments[segIdx];\n\t\tconst geoPoint = this._evalBezier(bp, t);\n\t\tconst screenPoint = chart.convert({ longitude: geoPoint.longitude, latitude: geoPoint.latitude });\n\n\t\tconst dt = 0.001;\n\t\tlet pt2: IGeoPoint;\n\t\tlet sign = 1;\n\t\tif (t + dt <= 1) {\n\t\t\tpt2 = this._evalBezier(bp, t + dt);\n\t\t} else {\n\t\t\tpt2 = this._evalBezier(bp, t - dt);\n\t\t\tsign = -1;\n\t\t}\n\t\tconst screenPoint2 = chart.convert({ longitude: pt2.longitude, latitude: pt2.latitude });\n\t\tconst angle = Math.atan2(sign * (screenPoint2.y - screenPoint.y), sign * (screenPoint2.x - screenPoint.x)) * 180 / Math.PI;\n\n\t\treturn { x: screenPoint.x, y: screenPoint.y, angle, geoPoint };\n\t}\n\n\t/**\n\t * Positions a bullet along its parent link's bezier path.\n\t *\n\t * @param bullet Bullet to position\n\t */\n\tpublic _positionBullet(bullet: Bullet) {\n\t\tconst sprite = bullet.get(\"sprite\");\n\t\tif (sprite) {\n\t\t\tconst dataItem = sprite.dataItem as DataItem<IMapSankeySeriesDataItem>;\n\t\t\tif (dataItem) {\n\t\t\t\tconst location = bullet.get(\"locationX\", 0.5);\n\t\t\t\tconst result = this._getPointWithGeo(dataItem, location);\n\t\t\t\tif (!result) return;\n\n\t\t\t\tsprite.setAll({ x: result.x, y: result.y });\n\n\t\t\t\tif (bullet.get(\"autoRotate\")) {\n\t\t\t\t\tsprite.set(\"rotation\", result.angle + bullet.get(\"autoRotateAngle\", 0));\n\t\t\t\t}\n\n\t\t\t\t// Hide bullets on the back side of the globe (like MapPointSeries clipBack)\n\t\t\t\tconst chart = this.chart;\n\t\t\t\tif (chart) {\n\t\t\t\t\tconst geoPath = chart.getPrivate(\"geoPath\");\n\t\t\t\t\tif (geoPath) {\n\t\t\t\t\t\tconst geometry: GeoJSON.Point = { type: \"Point\", coordinates: [result.geoPoint.longitude, result.geoPoint.latitude] };\n\t\t\t\t\t\tsprite.setPrivate(\"visible\", !!geoPath(geometry));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic disposeDataItem(dataItem: DataItem<this[\"_dataItemSettings\"]>) {\n\t\tsuper.disposeDataItem(dataItem);\n\t\tthis._bezierSegments.delete(dataItem);\n\t\tthis._segmentCumulativeLengths.delete(dataItem);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tprotected _dispose() {\n\t\tsuper._dispose();\n\t\tthis._bezierSegments.clear();\n\t\tthis._segmentCumulativeLengths.clear();\n\t\tthis._geoSourceCoords.clear();\n\t\tthis._geoTargetCoords.clear();\n\t\tthis._geoWidths.clear();\n\t\tthis._geoSourceGroups.clear();\n\t\tthis._geoTargetGroups.clear();\n\t\tthis._geoNodeSourceTotal.clear();\n\t\tthis._geoNodeTargetTotal.clear();\n\t\tthis._geoNodeRange.clear();\n\t\tthis._geoSourceOffsets.clear();\n\t\tthis._geoTargetOffsets.clear();\n\t}\n\n\t/**\n\t * Processes a newly added data item, creating placeholder geometry and\n\t * registering it with source/target nodes.\n\t *\n\t * @param dataItem Data item to process\n\t */\n\tprotected processDataItem(dataItem: DataItem<this[\"_dataItemSettings\"]>) {\n\t\t// Set placeholder geometry so parent creates the MapPolygon\n\t\t// Use empty coordinates array (no rings) to avoid d3-geo crash on empty ring\n\t\tif (!dataItem.get(\"geometry\")) {\n\t\t\tdataItem.set(\"geometry\", { type: \"Polygon\", coordinates: [] } as GeoJSON.Polygon);\n\t\t}\n\t\tsuper.processDataItem(dataItem);\n\n\t\tconst polygonSeries = this.get(\"polygonSeries\");\n\n\t\t// Resolve source coordinates\n\t\tlet sourceLon = dataItem.get(\"sourceLongitude\");\n\t\tlet sourceLat = dataItem.get(\"sourceLatitude\");\n\t\tconst sourceId = dataItem.get(\"sourceId\");\n\n\t\tif (sourceId && polygonSeries) {\n\t\t\tconst polygonDI = polygonSeries.getDataItemById(sourceId);\n\t\t\tif (polygonDI) {\n\t\t\t\tconst geometry = polygonDI.get(\"geometry\");\n\t\t\t\tif (geometry) {\n\t\t\t\t\tconst centroid = getGeoCentroid(geometry);\n\t\t\t\t\tsourceLon = centroid.longitude;\n\t\t\t\t\tsourceLat = centroid.latitude;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Resolve target coordinates\n\t\tlet targetLon = dataItem.get(\"targetLongitude\");\n\t\tlet targetLat = dataItem.get(\"targetLatitude\");\n\t\tconst targetId = dataItem.get(\"targetId\");\n\n\t\tif (targetId && polygonSeries) {\n\t\t\tconst polygonDI = polygonSeries.getDataItemById(targetId);\n\t\t\tif (polygonDI) {\n\t\t\t\tconst geometry = polygonDI.get(\"geometry\");\n\t\t\t\tif (geometry) {\n\t\t\t\t\tconst centroid = getGeoCentroid(geometry);\n\t\t\t\t\ttargetLon = centroid.longitude;\n\t\t\t\t\ttargetLat = centroid.latitude;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Create/find source node\n\t\tif (sourceLon != null && sourceLat != null) {\n\t\t\tconst sourceKey = sourceId ?? (Number(sourceLon) + \",\" + Number(sourceLat));\n\t\t\tlet sourceNode = this.nodes.getDataItemById(sourceKey);\n\t\t\tif (!sourceNode) {\n\t\t\t\tconst ctx: any = dataItem.dataContext;\n\t\t\t\tconst name = (ctx && ctx.source) || sourceKey;\n\t\t\t\tthis.nodes.data.push({ id: sourceKey, name, longitude: Number(sourceLon), latitude: Number(sourceLat) });\n\t\t\t\tsourceNode = this.nodes.dataItems[this.nodes.dataItems.length - 1];\n\t\t\t}\n\t\t\tif (sourceNode) {\n\t\t\t\tdataItem.setRaw(\"sourceNode\", sourceNode);\n\t\t\t\tthis.nodes.addOutgoingLink(sourceNode, dataItem);\n\t\t\t}\n\t\t}\n\n\t\t// Create/find target node\n\t\tif (targetLon != null && targetLat != null) {\n\t\t\tconst targetKey = targetId ?? (Number(targetLon) + \",\" + Number(targetLat));\n\t\t\tlet targetNode = this.nodes.getDataItemById(targetKey);\n\t\t\tif (!targetNode) {\n\t\t\t\tconst ctx: any = dataItem.dataContext;\n\t\t\t\tconst name = (ctx && ctx.target) || targetKey;\n\t\t\t\tthis.nodes.data.push({ id: targetKey, name, longitude: Number(targetLon), latitude: Number(targetLat) });\n\t\t\t\ttargetNode = this.nodes.dataItems[this.nodes.dataItems.length - 1];\n\t\t\t}\n\t\t\tif (targetNode) {\n\t\t\t\tdataItem.setRaw(\"targetNode\", targetNode);\n\t\t\t\tthis.nodes.addIncomingLink(targetNode, dataItem);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tprotected _onDataClear() {\n\t\t// Clear link references on preserved nodes\n\t\t$array.each(this.nodes.dataItems, (nodeDataItem) => {\n\t\t\tnodeDataItem.setRaw(\"incomingLinks\", []);\n\t\t\tnodeDataItem.setRaw(\"outgoingLinks\", []);\n\t\t});\n\n\t\tif (!this.nodes._userDataSet) {\n\t\t\t// setAll([]) triggers _onDataClear which sets _userDataSet = true;\n\t\t\t// reset it so auto-created nodes work again on next data cycle.\n\t\t\tthis.nodes.data.setAll([]);\n\t\t\tthis.nodes._userDataSet = false;\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic _prepareChildren() {\n\t\tif (this._valuesDirty || this._sizeDirty) {\n\t\t\tthis._generateGeometries();\n\t\t}\n\t\tsuper._prepareChildren();\n\t}\n\n\t/**\n\t * Rebuilds all link band geometries from current data.\n\t *\n\t * Computes bezier control points, stacking offsets, band polygons,\n\t * and cumulative arc lengths for each link.\n\t */\n\tprotected _generateGeometries() {\n\t\tconst maxWidthDeg = this.get(\"maxWidth\", 5);\n\t\tconst cpdBase = Math.min(0.4999, this.get(\"controlPointDistance\", 0.5));\n\t\tconst cpdSource = Math.min(0.4999, this.get(\"controlPointDistanceSource\", cpdBase));\n\t\tconst cpdTarget = Math.min(0.4999, this.get(\"controlPointDistanceTarget\", cpdBase));\n\t\tconst resolution = this.get(\"resolution\", 50);\n\t\tconst linkColorMode = this.get(\"linkColorMode\", \"solid\");\n\n\t\t// Find max value\n\t\tlet maxValue = 0;\n\t\t$array.each(this.dataItems, (dataItem) => {\n\t\t\tconst value = dataItem.get(\"value\");\n\t\t\tif (value != null && value > maxValue) {\n\t\t\t\tmaxValue = value;\n\t\t\t}\n\t\t});\n\t\tif (maxValue === 0) maxValue = 1;\n\n\t\tconst sourceCoords = this._geoSourceCoords; sourceCoords.clear();\n\t\tconst targetCoords = this._geoTargetCoords; targetCoords.clear();\n\t\tconst widths = this._geoWidths; widths.clear();\n\t\tconst sourceGroups = this._geoSourceGroups; sourceGroups.clear();\n\t\tconst targetGroups = this._geoTargetGroups; targetGroups.clear();\n\n\t\t// Build coord maps and groups from node references on links\n\t\t$array.each(this.dataItems, (dataItem) => {\n\t\t\tconst value = +(dataItem.get(\"value\") || 0);\n\t\t\twidths.set(dataItem, maxWidthDeg * value / maxValue);\n\n\t\t\tconst sourceNode = dataItem.get(\"sourceNode\");\n\t\t\tif (sourceNode) {\n\t\t\t\tconst lon = sourceNode.get(\"longitude\");\n\t\t\t\tconst lat = sourceNode.get(\"latitude\");\n\t\t\t\tif (lon != null && lat != null) {\n\t\t\t\t\tsourceCoords.set(dataItem, { longitude: lon, latitude: lat });\n\t\t\t\t\tconst key = sourceNode.get(\"id\")!;\n\t\t\t\t\tif (!sourceGroups.has(key)) sourceGroups.set(key, []);\n\t\t\t\t\tsourceGroups.get(key)!.push(dataItem);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst targetNode = dataItem.get(\"targetNode\");\n\t\t\tif (targetNode) {\n\t\t\t\tconst lon = targetNode.get(\"longitude\");\n\t\t\t\tconst lat = targetNode.get(\"latitude\");\n\t\t\t\tif (lon != null && lat != null) {\n\t\t\t\t\ttargetCoords.set(dataItem, { longitude: lon, latitude: lat });\n\t\t\t\t\tconst key = targetNode.get(\"id\")!;\n\t\t\t\t\tif (!targetGroups.has(key)) targetGroups.set(key, []);\n\t\t\t\t\ttargetGroups.get(key)!.push(dataItem);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// Coordinated stacking at intermediate nodes:\n\t\t// At nodes with both incoming and outgoing flows, use the same\n\t\t// vertical range for both sides so bands align like in a Sankey.\n\t\tconst nodePadding = this.get(\"nodePadding\", 0.3);\n\t\tconst autoSort = this.get(\"autoSort\", true);\n\n\t\t// First: compute the unified stacking range at each node\n\t\tconst nodeSourceTotal = this._geoNodeSourceTotal; nodeSourceTotal.clear();\n\t\tconst nodeTargetTotal = this._geoNodeTargetTotal; nodeTargetTotal.clear();\n\n\t\tsourceGroups.forEach((items, key) => {\n\t\t\tlet total = 0;\n\t\t\t$array.each(items, (item) => { total += widths.get(item) || 0; });\n\t\t\tnodeSourceTotal.set(key, total);\n\t\t});\n\n\t\ttargetGroups.forEach((items, key) => {\n\t\t\tlet total = 0;\n\t\t\t$array.each(items, (item) => { total += widths.get(item) || 0; });\n\t\t\tnodeTargetTotal.set(key, total);\n\t\t});\n\n\t\t// Unified range = max(incoming, outgoing) at each node\n\t\tconst nodeRange = this._geoNodeRange; nodeRange.clear();\n\t\tconst allKeys = new Set([...nodeSourceTotal.keys(), ...nodeTargetTotal.keys()]);\n\t\tallKeys.forEach((key) => {\n\t\t\tnodeRange.set(key, Math.max(nodeSourceTotal.get(key) || 0, nodeTargetTotal.get(key) || 0));\n\t\t});\n\n\t\t// Stack outgoing flows (sourceGroups) centered within the unified range\n\t\tconst sourceOffsets = this._geoSourceOffsets; sourceOffsets.clear();\n\t\tconst targetOffsets = this._geoTargetOffsets; targetOffsets.clear();\n\n\t\tsourceGroups.forEach((items, key) => {\n\t\t\tif (autoSort) {\n\t\t\t\titems.sort((a, b) => ((targetCoords.get(a)?.latitude || 0) - (targetCoords.get(b)?.latitude || 0)));\n\t\t\t}\n\t\t\tconst ownTotal = nodeSourceTotal.get(key) || 0;\n\t\t\tconst range = nodeRange.get(key) || ownTotal;\n\t\t\t// Center this side's bands within the unified range\n\t\t\tlet offset = -range / 2 + (range - ownTotal) / 2;\n\t\t\t$array.each(items, (item) => {\n\t\t\t\tconst w = widths.get(item) || 0;\n\t\t\t\tsourceOffsets.set(item, offset + w / 2);\n\t\t\t\toffset += w;\n\t\t\t});\n\t\t});\n\n\t\t// Stack incoming flows (targetGroups) centered within the unified range\n\t\ttargetGroups.forEach((items, key) => {\n\t\t\tif (autoSort) {\n\t\t\t\titems.sort((a, b) => ((sourceCoords.get(a)?.latitude || 0) - (sourceCoords.get(b)?.latitude || 0)));\n\t\t\t}\n\t\t\tconst ownTotal = nodeTargetTotal.get(key) || 0;\n\t\t\tconst range = nodeRange.get(key) || ownTotal;\n\t\t\tlet offset = -range / 2 + (range - ownTotal) / 2;\n\t\t\t$array.each(items, (item) => {\n\t\t\t\tconst w = widths.get(item) || 0;\n\t\t\t\ttargetOffsets.set(item, offset + w / 2);\n\t\t\t\toffset += w;\n\t\t\t});\n\t\t});\n\n\t\t// Generate polygon for each link\n\t\tconst orientationSetting = this.get(\"orientation\", \"horizontal\");\n\n\t\t$array.each(this.dataItems, (dataItem) => {\n\t\t\tconst source = sourceCoords.get(dataItem);\n\t\t\tconst target = targetCoords.get(dataItem);\n\t\t\tif (!source || !target) return;\n\n\t\t\tconst width = widths.get(dataItem) || 0;\n\t\t\tif (width <= 0) return;\n\n\t\t\tconst halfWidth = width / 2;\n\t\t\tconst sourceOff = sourceOffsets.get(dataItem) || 0;\n\t\t\tconst targetOff = targetOffsets.get(dataItem) || 0;\n\n\t\t\t// Build path points: [source, ...waypoints, target]\n\t\t\t// Apply stacking offset to source/target based on orientation\n\t\t\tlet startLon: number, startLat: number, endLon: number, endLat: number;\n\n\t\t\tif (orientationSetting === \"vertical\") {\n\t\t\t\tstartLon = source.longitude + sourceOff;\n\t\t\t\tstartLat = source.latitude;\n\t\t\t\tendLon = target.longitude + targetOff;\n\t\t\t\tendLat = target.latitude;\n\t\t\t} else {\n\t\t\t\tstartLon = source.longitude;\n\t\t\t\tstartLat = source.latitude + sourceOff;\n\t\t\t\tendLon = target.longitude;\n\t\t\t\tendLat = target.latitude + targetOff;\n\t\t\t}\n\n\t\t\t// Per-link control point distances (fall back to series-level)\n\t\t\tconst linkCpd = Math.min(0.4999, dataItem.get(\"controlPointDistance\") ?? cpdBase);\n\t\t\tconst linkCpdSource = Math.min(0.4999, dataItem.get(\"controlPointDistanceSource\") ?? dataItem.get(\"controlPointDistance\") ?? cpdSource);\n\t\t\tconst linkCpdTarget = Math.min(0.4999, dataItem.get(\"controlPointDistanceTarget\") ?? dataItem.get(\"controlPointDistance\") ?? cpdTarget);\n\n\t\t\tconst waypoints = dataItem.get(\"waypoints\");\n\t\t\tconst hasWaypoints = waypoints && waypoints.length > 0;\n\n\t\t\t// Adjust for antimeridian crossing (only without waypoints)\n\t\t\tif (!hasWaypoints) {\n\t\t\t\tconst antimeridian = this.get(\"antimeridian\", \"short\");\n\t\t\t\tif (antimeridian === \"short\") {\n\t\t\t\t\tlet dLon = endLon - startLon;\n\t\t\t\t\tif (dLon > 180) endLon -= 360;\n\t\t\t\t\telse if (dLon < -180) endLon += 360;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst pathPoints: IGeoPoint[] = [{ longitude: startLon, latitude: startLat }];\n\t\t\tif (hasWaypoints) {\n\t\t\t\tfor (const wp of waypoints!) {\n\t\t\t\t\tpathPoints.push({ longitude: wp.longitude, latitude: wp.latitude });\n\t\t\t\t}\n\t\t\t}\n\t\t\tpathPoints.push({ longitude: endLon, latitude: endLat });\n\n\t\t\t// Build bezier segments between consecutive path points\n\t\t\tconst segments: Array<IBezierSegment> = [];\n\n\t\t\tfor (let seg = 0; seg < pathPoints.length - 1; seg++) {\n\t\t\t\tconst p0 = pathPoints[seg];\n\t\t\t\tconst p1 = pathPoints[seg + 1];\n\n\t\t\t\t// Tangent direction at each point:\n\t\t\t\t// - First point: direction toward next point\n\t\t\t\t// - Last point: direction from previous point\n\t\t\t\t// - Middle points: average of incoming and outgoing directions\n\t\t\t\tlet tangent0Lon: number, tangent0Lat: number;\n\t\t\t\tlet tangent1Lon: number, tangent1Lat: number;\n\n\t\t\t\tif (seg === 0 && pathPoints.length === 2) {\n\t\t\t\t\t// Simple case: single segment, use S-curve logic\n\t\t\t\t\tif (orientationSetting === \"vertical\") {\n\t\t\t\t\t\tconst dLat = p1.latitude - p0.latitude;\n\t\t\t\t\t\ttangent0Lon = 0; tangent0Lat = dLat;\n\t\t\t\t\t\ttangent1Lon = 0; tangent1Lat = dLat;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst dLon = p1.longitude - p0.longitude;\n\t\t\t\t\t\ttangent0Lon = dLon; tangent0Lat = 0;\n\t\t\t\t\t\ttangent1Lon = dLon; tangent1Lat = 0;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Multi-point: use direction to neighbor\n\t\t\t\t\tif (seg === 0) {\n\t\t\t\t\t\t// First segment start: direction toward next\n\t\t\t\t\t\ttangent0Lon = p1.longitude - p0.longitude;\n\t\t\t\t\t\ttangent0Lat = p1.latitude - p0.latitude;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Average of incoming and outgoing\n\t\t\t\t\t\tconst prev = pathPoints[seg - 1];\n\t\t\t\t\t\ttangent0Lon = p1.longitude - prev.longitude;\n\t\t\t\t\t\ttangent0Lat = p1.latitude - prev.latitude;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (seg === pathPoints.length - 2) {\n\t\t\t\t\t\t// Last segment end: direction from previous\n\t\t\t\t\t\ttangent1Lon = p1.longitude - p0.longitude;\n\t\t\t\t\t\ttangent1Lat = p1.latitude - p0.latitude;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst next = pathPoints[seg + 2];\n\t\t\t\t\t\ttangent1Lon = next.longitude - p0.longitude;\n\t\t\t\t\t\ttangent1Lat = next.latitude - p0.latitude;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Normalize tangents and scale by cpd * segment distance\n\t\t\t\t// Use cpdSource at the start of the first segment, cpdTarget at the end of the last\n\t\t\t\tconst segDist = Math.sqrt((p1.longitude - p0.longitude) ** 2 + (p1.latitude - p0.latitude) ** 2);\n\t\t\t\tconst t0Len = Math.sqrt(tangent0Lon ** 2 + tangent0Lat ** 2);\n\t\t\t\tconst t1Len = Math.sqrt(tangent1Lon ** 2 + tangent1Lat ** 2);\n\t\t\t\tconst scale0 = segDist * (seg === 0 ? linkCpdSource : linkCpd);\n\t\t\t\tconst scale1 = segDist * (seg === pathPoints.length - 2 ? linkCpdTarget : linkCpd);\n\n\t\t\t\tconst cp0Lon = p0.longitude + (t0Len > 0 ? tangent0Lon / t0Len * scale0 : 0);\n\t\t\t\tconst cp0Lat = p0.latitude + (t0Len > 0 ? tangent0Lat / t0Len * scale0 : 0);\n\t\t\t\tconst cp1Lon = p1.longitude - (t1Len > 0 ? tangent1Lon / t1Len * scale1 : 0);\n\t\t\t\tconst cp1Lat = p1.latitude - (t1Len > 0 ? tangent1Lat / t1Len * scale1 : 0);\n\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0Lon: p0.longitude, p0Lat: p0.latitude,\n\t\t\t\t\tp1Lon: p1.longitude, p1Lat: p1.latitude,\n\t\t\t\t\tcp0Lon, cp0Lat, cp1Lon, cp1Lat\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Store for bullet positioning\n\t\t\tthis._bezierSegments.set(dataItem, segments);\n\t\t\tthis._computeCumulativeLengths(dataItem, segments);\n\n\t\t\t// Sample all segments to build left/right edges\n\t\t\tconst leftEdge: [number, number][] = [];\n\t\t\tconst rightEdge: [number, number][] = [];\n\n\t\t\tfor (let seg = 0; seg < segments.length; seg++) {\n\t\t\t\tconst bp = segments[seg];\n\t\t\t\tconst startI = (seg === 0) ? 0 : 1; // avoid duplicate at joins\n\t\t\t\tfor (let i = startI; i <= resolution; i++) {\n\t\t\t\t\tconst t = i / resolution;\n\t\t\t\t\tconst s = 1 - t;\n\n\t\t\t\t\tconst lon = s * s * s * bp.p0Lon + 3 * s * s * t * bp.cp0Lon + 3 * s * t * t * bp.cp1Lon + t * t * t * bp.p1Lon;\n\t\t\t\t\tconst lat = s * s * s * bp.p0Lat + 3 * s * s * t * bp.cp0Lat + 3 * s * t * t * bp.cp1Lat + t * t * t * bp.p1Lat;\n\n\t\t\t\t\tconst dtLon = 3 * s * s * (bp.cp0Lon - bp.p0Lon) + 6 * s * t * (bp.cp1Lon - bp.cp0Lon) + 3 * t * t * (bp.p1Lon - bp.cp1Lon);\n\t\t\t\t\tconst dtLat = 3 * s * s * (bp.cp0Lat - bp.p0Lat) + 6 * s * t * (bp.cp1Lat - bp.cp0Lat) + 3 * t * t * (bp.p1Lat - bp.cp1Lat);\n\n\t\t\t\t\tconst tLen = Math.sqrt(dtLon * dtLon + dtLat * dtLat);\n\t\t\t\t\tif (tLen === 0) continue;\n\n\t\t\t\t\tconst perpLon = -dtLat / tLen;\n\t\t\t\t\tconst perpLat = dtLon / tLen;\n\n\t\t\t\t\tleftEdge.push([lon + halfWidth * perpLon, lat + halfWidth * perpLat]);\n\t\t\t\t\trightEdge.push([lon - halfWidth * perpLon, lat - halfWidth * perpLat]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Simple closed polygon: leftEdge forward + rightEdge backward\n\t\t\tconst ring: [number, number][] = [];\n\t\t\tfor (let i = 0; i < leftEdge.length; i++) ring.push(leftEdge[i]);\n\t\t\tfor (let i = rightEdge.length - 1; i >= 0; i--) ring.push(rightEdge[i]);\n\t\t\tring.push(leftEdge[0]);\n\n\t\t\t// d3-geo requires clockwise winding for small polygons.\n\t\t\t// If geoArea > 2*PI the winding is inverted — reverse the ring.\n\t\t\tlet geometry: GeoJSON.Polygon = {\n\t\t\t\ttype: \"Polygon\",\n\t\t\t\tcoordinates: [ring]\n\t\t\t};\n\n\t\t\tif (geoArea(geometry) > 2 * Math.PI) {\n\t\t\t\tring.reverse();\n\t\t\t\tgeometry = {\n\t\t\t\t\ttype: \"Polygon\",\n\t\t\t\t\tcoordinates: [ring]\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tdataItem.setRaw(\"geometry\", geometry);\n\t\t\tconst mapPolygon = dataItem.get(\"mapPolygon\");\n\t\t\tif (mapPolygon) {\n\t\t\t\tmapPolygon.set(\"geometry\", geometry);\n\n\t\t\t\tif (linkColorMode !== \"solid\") {\n\t\t\t\t\tconst nodeDataItem = linkColorMode === \"source\"\n\t\t\t\t\t\t? dataItem.get(\"sourceNode\")\n\t\t\t\t\t\t: dataItem.get(\"targetNode\");\n\t\t\t\t\tif (nodeDataItem) {\n\t\t\t\t\t\tconst nodeFill = nodeDataItem.get(\"fill\");\n\t\t\t\t\t\tif (nodeFill) {\n\t\t\t\t\t\t\tmapPolygon.set(\"fill\", nodeFill);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// Compute sums and generate geometries for node shapes\n\t\tconst nodeType = this.get(\"nodeType\", \"circle\");\n\t\tconst nodeWidth = this.get(\"nodeWidth\", 1);\n\n\t\t$array.each(this.nodes.dataItems, (nodeDataItem) => {\n\t\t\tconst outgoing = nodeDataItem.get(\"outgoingLinks\") || [];\n\t\t\tconst incoming = nodeDataItem.get(\"incomingLinks\") || [];\n\t\t\tconst nodeKey = nodeDataItem.get(\"id\")!;\n\n\t\t\t// Compute sums and store on node data item for tooltip resolution\n\t\t\tlet sumOutgoing = 0;\n\t\t\t$array.each(outgoing, (link) => { sumOutgoing += link.get(\"value\") || 0; });\n\t\t\tlet sumIncoming = 0;\n\t\t\t$array.each(incoming, (link) => { sumIncoming += link.get(\"value\") || 0; });\n\n\t\t\tnodeDataItem.setRaw(\"sumOutgoing\", sumOutgoing);\n\t\t\tnodeDataItem.setRaw(\"sumIncoming\", sumIncoming);\n\t\t\tnodeDataItem.setRaw(\"sum\", sumOutgoing + sumIncoming);\n\n\t\t\tconst totalWidth = nodeRange.get(nodeKey) || 0;\n\t\t\tconst lon = nodeDataItem.get(\"longitude\");\n\t\t\tconst lat = nodeDataItem.get(\"latitude\");\n\t\t\tif (lon == null || lat == null) return;\n\n\t\t\tlet nodeGeo: GeoJSON.Polygon;\n\n\t\t\tif (nodeType === \"bar\") {\n\t\t\t\tconst steps = 10;\n\t\t\t\tconst halfSpan = totalWidth / 2 + nodePadding;\n\t\t\t\tconst halfW = nodeWidth / 2;\n\n\t\t\t\tconst ring: [number, number][] = [];\n\n\t\t\t\tif (orientationSetting === \"vertical\") {\n\t\t\t\t\tfor (let i = 0; i <= steps; i++) {\n\t\t\t\t\t\tconst t = i / steps;\n\t\t\t\t\t\tring.push([lon - halfSpan + totalWidth * t, lat - halfW]);\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i <= steps; i++) {\n\t\t\t\t\t\tconst t = i / steps;\n\t\t\t\t\t\tring.push([lon + halfSpan, lat - halfW + nodeWidth * t]);\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i <= steps; i++) {\n\t\t\t\t\t\tconst t = i / steps;\n\t\t\t\t\t\tring.push([lon + halfSpan - totalWidth * t, lat + halfW]);\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i <= steps; i++) {\n\t\t\t\t\t\tconst t = i / steps;\n\t\t\t\t\t\tring.push([lon - halfSpan, lat + halfW - nodeWidth * t]);\n\t\t\t\t\t}\n\t\t\t\t\tring.push([lon - halfSpan, lat - halfW]);\n\t\t\t\t} else {\n\t\t\t\t\tfor (let i = 0; i <= steps; i++) {\n\t\t\t\t\t\tconst t = i / steps;\n\t\t\t\t\t\tring.push([lon - halfW, lat - halfSpan + totalWidth * t]);\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i <= steps; i++) {\n\t\t\t\t\t\tconst t = i / steps;\n\t\t\t\t\t\tring.push([lon - halfW + nodeWidth * t, lat + halfSpan]);\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i <= steps; i++) {\n\t\t\t\t\t\tconst t = i / steps;\n\t\t\t\t\t\tring.push([lon + halfW, lat + halfSpan - totalWidth * t]);\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i <= steps; i++) {\n\t\t\t\t\t\tconst t = i / steps;\n\t\t\t\t\t\tring.push([lon + halfW - nodeWidth * t, lat - halfSpan]);\n\t\t\t\t\t}\n\t\t\t\t\tring.push([lon - halfW, lat - halfSpan]);\n\t\t\t\t}\n\n\t\t\t\tnodeGeo = { type: \"Polygon\", coordinates: [ring] };\n\t\t\t\tif (geoArea(nodeGeo) > 2 * Math.PI) {\n\t\t\t\t\tring.reverse();\n\t\t\t\t\tnodeGeo = { type: \"Polygon\", coordinates: [ring] };\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst radius = totalWidth / 2 + nodePadding;\n\t\t\t\tnodeGeo = getGeoCircle({ longitude: lon, latitude: lat }, radius);\n\t\t\t}\n\n\t\t\tconst mapPolygon = nodeDataItem.get(\"mapPolygon\");\n\t\t\tif (mapPolygon) {\n\t\t\t\tmapPolygon.set(\"geometry\", nodeGeo);\n\t\t\t\t// Reorder at display level so nodes render above bands.\n\t\t\t\t// Avoids Children.moveValue which triggers markDirty() loop.\n\t\t\t\tthis._childrenDisplay.removeChild(mapPolygon._display);\n\t\t\t\tthis._childrenDisplay.addChild(mapPolygon._display);\n\t\t\t}\n\t\t});\n\t}\n}\n"]}
@@ -155,6 +155,18 @@ export interface IValueAxisSettings<R extends AxisRenderer> extends IAxisSetting
155
155
  * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/axes/value-axis/#Syncing_grid} for more info
156
156
  */
157
157
  syncWithAxis?: ValueAxis<AxisRenderer>;
158
+ /**
159
+ * If set to `true` and `syncWithAxis` is set, the zero line of this axis
160
+ * will be aligned with the zero line of the target axis, and the remaining
161
+ * grid intervals will be distributed proportionally above and below zero.
162
+ *
163
+ * Only takes effect when both axes' ranges include zero.
164
+ *
165
+ * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/axes/value-axis/#Syncing_grid} for more info
166
+ * @default false
167
+ * @since 5.16.2
168
+ */
169
+ syncZeros?: boolean;
158
170
  /**
159
171
  * If set to `false`, the axis won't be auto-zoomed to a selection (this
160
172
  * works only if the other axis is a `DateAxis` or a `CategoryAxis`).
@@ -440,9 +452,10 @@ export declare class ValueAxis<R extends AxisRenderer> extends Axis<R> {
440
452
  step: number;
441
453
  };
442
454
  /**
443
- * Returns `true` if axis needs to be resunced with some other axis.
455
+ * Rounds a raw step value up to the nearest "nice" number
456
+ * (1, 2, 5, 10, 20, 50, etc.), respecting maxPrecision.
444
457
  */
445
- protected _checkSync(min: number, max: number, step: number, count: number): boolean;
458
+ protected _niceStep(rawStep: number): number;
446
459
  /**
447
460
  * Returns relative position between two grid lines of the axis.
448
461
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ValueAxis.d.ts","sourceRoot":"","sources":["../../../../../../src/.internal/charts/xy/axes/ValueAxis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ValueAxis.d.ts","sourceRoot":"","sources":["../../../../../../src/.internal/charts/xy/axes/ValueAxis.ts"],"names":[],"mappings":"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"}
@@ -561,38 +561,44 @@ export class ValueAxis extends Axis {
561
561
  }
562
562
  let fieldWorking = field + "Working";
563
563
  if (field) {
564
+ let seriesCount = this.series.length;
565
+ let includedSeries = [];
566
+ let vcValues = [];
567
+ for (let s = 0; s < seriesCount; s++) {
568
+ let ser = this.series[s];
569
+ if (!ser.get("excludeFromTotal")) {
570
+ includedSeries.push(ser);
571
+ vcValues.push(ser.get(vc));
572
+ }
573
+ }
574
+ let len = includedSeries.length;
575
+ let fieldTotal = (field + "Total");
576
+ let fieldSum = (field + "Sum");
577
+ let fieldTotalPercent = (field + "TotalPercent");
564
578
  for (let i = startIndex; i < endIndex; i++) {
565
579
  let sum = 0;
566
580
  let total = 0;
567
- $array.each(this.series, (series) => {
568
- if (!series.get("excludeFromTotal")) {
569
- let dataItem = series.dataItems[i];
570
- if (dataItem) {
571
- let value = dataItem.get(fieldWorking) * series.get(vc);
572
- if (!$type.isNaN(value)) {
573
- sum += value;
574
- total += Math.abs(value);
575
- }
581
+ for (let s = 0; s < len; s++) {
582
+ let dataItem = includedSeries[s].dataItems[i];
583
+ if (dataItem) {
584
+ let value = dataItem.get(fieldWorking) * vcValues[s];
585
+ if (!$type.isNaN(value)) {
586
+ sum += value;
587
+ total += Math.abs(value);
576
588
  }
577
589
  }
578
- });
579
- $array.each(this.series, (series) => {
580
- if (!series.get("excludeFromTotal")) {
581
- let dataItem = series.dataItems[i];
582
- if (dataItem) {
583
- let value = dataItem.get(fieldWorking) * series.get(vc);
584
- if (!$type.isNaN(value)) {
585
- dataItem.set((field + "Total"), total);
586
- dataItem.set((field + "Sum"), sum);
587
- let totalPercent = value / total * 100;
588
- if (total == 0) {
589
- totalPercent = 0;
590
- }
591
- dataItem.set((field + "TotalPercent"), totalPercent);
592
- }
590
+ }
591
+ for (let s = 0; s < len; s++) {
592
+ let dataItem = includedSeries[s].dataItems[i];
593
+ if (dataItem) {
594
+ let value = dataItem.get(fieldWorking) * vcValues[s];
595
+ if (!$type.isNaN(value)) {
596
+ dataItem.set(fieldTotal, total);
597
+ dataItem.set(fieldSum, sum);
598
+ dataItem.set(fieldTotalPercent, total == 0 ? 0 : value / total * 100);
593
599
  }
594
600
  }
595
- });
601
+ }
596
602
  }
597
603
  }
598
604
  }
@@ -731,7 +737,7 @@ export class ValueAxis extends Axis {
731
737
  selectionMax = minMaxStep.max;
732
738
  selectionMin = $math.fitToRange(selectionMin, min, max);
733
739
  selectionMax = $math.fitToRange(selectionMax, min, max);
734
- // do it for the second time !important
740
+ // do it for the second time !important
735
741
  minMaxStep = this._adjustMinMax(selectionMin, selectionMax, gridCount, true);
736
742
  if (!strictMinMax) {
737
743
  selectionMin = minMaxStep.min;
@@ -740,16 +746,10 @@ export class ValueAxis extends Axis {
740
746
  const syncWithAxis = this.get("syncWithAxis");
741
747
  if (syncWithAxis) {
742
748
  minMaxStep = this._syncAxes(selectionMin, selectionMax, minMaxStep.step, syncWithAxis.getPrivate("selectionMinFinal", syncWithAxis.getPrivate("minFinal", 0)), syncWithAxis.getPrivate("selectionMaxFinal", syncWithAxis.getPrivate("maxFinal", 1)), syncWithAxis.getPrivate("selectionStepFinal", syncWithAxis.getPrivate("step", 1)));
743
- if (minMaxStep.min < min) {
744
- minMaxStep.min = min;
745
- }
746
- if (minMaxStep.max > max) {
747
- minMaxStep.max = max;
748
- }
749
749
  selectionMin = minMaxStep.min;
750
750
  selectionMax = minMaxStep.max;
751
751
  }
752
- if (strictMinMax) {
752
+ if (strictMinMax && !syncWithAxis) {
753
753
  if ($type.isNumber(minDefined)) {
754
754
  selectionMin = Math.max(selectionMin, minDefined);
755
755
  }
@@ -757,11 +757,11 @@ export class ValueAxis extends Axis {
757
757
  selectionMax = Math.min(selectionMax, maxDefined);
758
758
  }
759
759
  }
760
- if (selectionStrictMinMax) {
760
+ if (selectionStrictMinMax && !syncWithAxis) {
761
761
  selectionMin = selectionMinReal - (selectionMaxReal - selectionMinReal) * extraMin;
762
762
  selectionMax = selectionMaxReal + (selectionMaxReal - selectionMinReal) * extraMax;
763
763
  }
764
- if (strictMinMax) {
764
+ if (strictMinMax && !syncWithAxis) {
765
765
  if ($type.isNumber(minDefined)) {
766
766
  selectionMin = minDefined;
767
767
  }
@@ -904,7 +904,7 @@ export class ValueAxis extends Axis {
904
904
  // DateAxis does some magic here
905
905
  min = this._fixMin(min);
906
906
  max = this._fixMax(max);
907
- // this happens if starLocation and endLocation are 0.5 and DateAxis has only one date
907
+ // this happens if starLocation and endLocation are 0.5 and DateAxis has only one date
908
908
  if (max - min <= 1 / Math.pow(10, 15)) {
909
909
  if (max - min !== 0) {
910
910
  this._deltaMinMax = (max - min) / 2;
@@ -1192,61 +1192,84 @@ export class ValueAxis extends Axis {
1192
1192
  _syncAxes(min, max, step, syncMin, syncMax, syncStep) {
1193
1193
  let axis = this.get("syncWithAxis");
1194
1194
  if (axis) {
1195
- let count = Math.round(syncMax - syncMin) / syncStep;
1196
- let currentCount = Math.round((max - min) / step);
1197
- let gridCount = this.get("renderer").gridCount();
1198
- if ($type.isNumber(count) && $type.isNumber(currentCount)) {
1199
- let synced = false;
1200
- let c = 0;
1201
- let diff = (max - min) * 0.01;
1202
- let omin = min;
1203
- let omax = max;
1204
- let ostep = step;
1205
- while (synced != true) {
1206
- synced = this._checkSync(omin, omax, ostep, count);
1207
- c++;
1208
- if (c > 500) {
1209
- synced = true;
1195
+ let targetCount = Math.round((syncMax - syncMin) / syncStep);
1196
+ if (targetCount > 0) {
1197
+ if (this.get("syncZeros") && syncMin <= 0 && syncMax >= 0) {
1198
+ // Count intervals below/above zero on source axis
1199
+ let belowCount = Math.round((0 - syncMin) / syncStep);
1200
+ let aboveCount = targetCount - belowCount;
1201
+ // Find the smallest nice step that covers this axis's
1202
+ // data on both sides with the same below/above split
1203
+ let rawStep = 0;
1204
+ if (belowCount > 0 && min < 0) {
1205
+ rawStep = Math.abs(min) / belowCount;
1210
1206
  }
1211
- if (!synced) {
1212
- if (c / 3 == Math.round(c / 3)) {
1213
- omin = min - diff * c;
1214
- if (min >= 0 && omin < 0) {
1215
- omin = 0;
1216
- }
1217
- }
1218
- else {
1219
- omax = max + diff * c;
1220
- if (omax <= 0 && omax > 0) {
1221
- omax = 0;
1222
- }
1223
- }
1224
- let minMaxStep = this._adjustMinMax(omin, omax, gridCount, true);
1225
- omin = minMaxStep.min;
1226
- omax = minMaxStep.max;
1227
- ostep = minMaxStep.step;
1207
+ if (aboveCount > 0 && max > 0) {
1208
+ rawStep = Math.max(rawStep, max / aboveCount);
1228
1209
  }
1229
- else {
1230
- min = omin;
1231
- max = omax;
1232
- step = ostep;
1210
+ // Fallback: if one side has no data but has intervals
1211
+ if (rawStep == 0) {
1212
+ rawStep = (max - min) / targetCount;
1213
+ }
1214
+ step = this._niceStep(rawStep);
1215
+ min = -step * belowCount;
1216
+ max = step * aboveCount;
1217
+ }
1218
+ else {
1219
+ // Regular grid count sync (no zero alignment)
1220
+ let rawStep = (max - min) / targetCount;
1221
+ step = this._niceStep(rawStep);
1222
+ // Snap min/max to step boundaries ensuring data coverage
1223
+ let newMin = Math.floor(min / step) * step;
1224
+ let newMax = newMin + step * targetCount;
1225
+ // Ensure max covers the data
1226
+ if (newMax < max) {
1227
+ newMin = Math.ceil(max / step) * step - step * targetCount;
1228
+ newMax = newMin + step * targetCount;
1229
+ }
1230
+ // Preserve zero boundaries
1231
+ if (min >= 0 && newMin < 0) {
1232
+ newMin = 0;
1233
+ newMax = step * targetCount;
1234
+ }
1235
+ if (max <= 0 && newMax > 0) {
1236
+ newMax = 0;
1237
+ newMin = -(step * targetCount);
1233
1238
  }
1239
+ min = newMin;
1240
+ max = newMax;
1234
1241
  }
1235
1242
  }
1236
1243
  }
1237
1244
  return { min: min, max: max, step: step };
1238
1245
  }
1239
1246
  /**
1240
- * Returns `true` if axis needs to be resunced with some other axis.
1247
+ * Rounds a raw step value up to the nearest "nice" number
1248
+ * (1, 2, 5, 10, 20, 50, etc.), respecting maxPrecision.
1241
1249
  */
1242
- _checkSync(min, max, step, count) {
1243
- let currentCount = (max - min) / step;
1244
- for (let i = 1; i < count; i++) {
1245
- if ($math.round(currentCount / i, 1) == count || currentCount * i == count) {
1246
- return true;
1250
+ _niceStep(rawStep) {
1251
+ let stepPower = Math.pow(10, Math.floor(Math.log(Math.abs(rawStep)) * Math.LOG10E));
1252
+ let normalized = rawStep / stepPower;
1253
+ if (normalized <= 1)
1254
+ normalized = 1;
1255
+ else if (normalized <= 2)
1256
+ normalized = 2;
1257
+ else if (normalized <= 5)
1258
+ normalized = 5;
1259
+ else
1260
+ normalized = 10;
1261
+ let step = normalized * stepPower;
1262
+ let maxPrecision = this.get("maxPrecision");
1263
+ if ($type.isNumber(maxPrecision)) {
1264
+ let ceiledStep = $math.ceil(step, maxPrecision);
1265
+ if (maxPrecision < Number.MAX_VALUE && step !== ceiledStep) {
1266
+ step = ceiledStep;
1267
+ if (step == 0) {
1268
+ step = 1;
1269
+ }
1247
1270
  }
1248
1271
  }
1249
- return false;
1272
+ return step;
1250
1273
  }
1251
1274
  /**
1252
1275
  * Returns relative position between two grid lines of the axis.