@amcharts/amcharts5 5.17.0 → 5.17.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 (170) hide show
  1. package/.internal/charts/map/MapSankeySeries.d.ts +29 -0
  2. package/.internal/charts/map/MapSankeySeries.d.ts.map +1 -1
  3. package/.internal/charts/map/MapSankeySeries.js +126 -52
  4. package/.internal/charts/map/MapSankeySeries.js.map +1 -1
  5. package/.internal/core/Registry.js +1 -1
  6. package/.internal/core/Registry.js.map +1 -1
  7. package/CHANGELOG.md +6 -0
  8. package/examples/javascript/flow-arc-horizontal/package.json +1 -1
  9. package/examples/javascript/flow-arc-vertical/package.json +1 -1
  10. package/examples/javascript/flow-chord/package.json +1 -1
  11. package/examples/javascript/flow-chord-directed/package.json +1 -1
  12. package/examples/javascript/flow-chord-non-ribbon/package.json +1 -1
  13. package/examples/javascript/flow-sankey/package.json +1 -1
  14. package/examples/javascript/gantt/package.json +1 -1
  15. package/examples/javascript/gantt-multilevel/package.json +1 -1
  16. package/examples/javascript/gantt-simple/package.json +1 -1
  17. package/examples/javascript/gauge/package.json +1 -1
  18. package/examples/javascript/gauge-bands/package.json +1 -1
  19. package/examples/javascript/hierarchy-force-directed/package.json +1 -1
  20. package/examples/javascript/hierarchy-pack/package.json +1 -1
  21. package/examples/javascript/hierarchy-partition/package.json +1 -1
  22. package/examples/javascript/hierarchy-sunburst/package.json +1 -1
  23. package/examples/javascript/hierarchy-tree/package.json +1 -1
  24. package/examples/javascript/hierarchy-treemap/package.json +1 -1
  25. package/examples/javascript/hierarchy-voronoi-treemap/package.json +1 -1
  26. package/examples/javascript/jest/package.json +1 -1
  27. package/examples/javascript/json-pie/package.json +1 -1
  28. package/examples/javascript/json-xy/package.json +1 -1
  29. package/examples/javascript/map-animating-along-lines/package.json +1 -1
  30. package/examples/javascript/map-clustered-points/package.json +1 -1
  31. package/examples/javascript/map-day-and-night/package.json +1 -1
  32. package/examples/javascript/map-globe-rotate-to-country/package.json +1 -1
  33. package/examples/javascript/map-globe-with-projected-circles/package.json +1 -1
  34. package/examples/javascript/map-sankey/index.js +48 -55
  35. package/examples/javascript/map-sankey/package.json +1 -1
  36. package/examples/javascript/map-sankey-waypoints/package.json +1 -1
  37. package/examples/javascript/map-with-bubbles/package.json +1 -1
  38. package/examples/javascript/map-zoom-to-country/package.json +1 -1
  39. package/examples/javascript/misc-40-charts/package.json +1 -1
  40. package/examples/javascript/misc-microchart-grid/package.json +1 -1
  41. package/examples/javascript/pie-chart/package.json +1 -1
  42. package/examples/javascript/pie-donut-chart/package.json +1 -1
  43. package/examples/javascript/pie-variable-radius/package.json +1 -1
  44. package/examples/javascript/radar-column-iwatch-style/package.json +1 -1
  45. package/examples/javascript/radar-heat-map/package.json +1 -1
  46. package/examples/javascript/radar-line/package.json +1 -1
  47. package/examples/javascript/radar-time-line/package.json +1 -1
  48. package/examples/javascript/sliced-funnel/package.json +1 -1
  49. package/examples/javascript/sliced-pictorial-stacked/package.json +1 -1
  50. package/examples/javascript/sliced-pyramid/package.json +1 -1
  51. package/examples/javascript/stock-chart/package.json +1 -1
  52. package/examples/javascript/stock-chart-comparing-stocks/package.json +1 -1
  53. package/examples/javascript/stock-chart-data-granularity/package.json +1 -1
  54. package/examples/javascript/stock-chart-data-grouping/package.json +1 -1
  55. package/examples/javascript/stock-chart-intraday/package.json +1 -1
  56. package/examples/javascript/stock-chart-live/package.json +1 -1
  57. package/examples/javascript/stock-chart-volume-separate-panel/package.json +1 -1
  58. package/examples/javascript/timeline-horizontal-serpentine-chart/package.json +1 -1
  59. package/examples/javascript/timeline-linear-process-diagram/package.json +1 -1
  60. package/examples/javascript/timeline-serpentine-chart/package.json +1 -1
  61. package/examples/javascript/timeline-spiral-chart/package.json +1 -1
  62. package/examples/javascript/venn-diagram/package.json +1 -1
  63. package/examples/javascript/wordcloud-with-data/package.json +1 -1
  64. package/examples/javascript/wordcloud-with-text/package.json +1 -1
  65. package/examples/javascript/xy-100-percent-stacked-column/package.json +1 -1
  66. package/examples/javascript/xy-animated-bullet-at-the-end-of-the-series/package.json +1 -1
  67. package/examples/javascript/xy-bubble/package.json +1 -1
  68. package/examples/javascript/xy-candlestick/package.json +1 -1
  69. package/examples/javascript/xy-clustered-column/package.json +1 -1
  70. package/examples/javascript/xy-column/package.json +1 -1
  71. package/examples/javascript/xy-comparing-series-google-analytics-style/package.json +1 -1
  72. package/examples/javascript/xy-data-grouping/package.json +1 -1
  73. package/examples/javascript/xy-draggable-range/package.json +1 -1
  74. package/examples/javascript/xy-drawing-series-with-mouse-or-touch/package.json +1 -1
  75. package/examples/javascript/xy-dumbbell plot/package.json +1 -1
  76. package/examples/javascript/xy-evenly-spaced-date-axis/package.json +1 -1
  77. package/examples/javascript/xy-line/package.json +1 -1
  78. package/examples/javascript/xy-line-highlight-on-legend-hover/package.json +1 -1
  79. package/examples/javascript/xy-live-data/package.json +1 -1
  80. package/examples/javascript/xy-multiple-synced-value-axes/package.json +1 -1
  81. package/examples/javascript/xy-ohlc/package.json +1 -1
  82. package/examples/javascript/xy-real-time-data-sorting/package.json +1 -1
  83. package/examples/javascript/xy-smoothed-line/package.json +1 -1
  84. package/examples/javascript/xy-stacked-and-clustered-column/package.json +1 -1
  85. package/examples/javascript/xy-stacked-column/package.json +1 -1
  86. package/examples/javascript/xy-stacked-step/package.json +1 -1
  87. package/examples/javascript/xy-stock/package.json +1 -1
  88. package/examples/javascript/xy-stock-comparing/package.json +1 -1
  89. package/examples/typescript/flow-arc-horizontal/package.json +1 -1
  90. package/examples/typescript/flow-arc-vertical/package.json +1 -1
  91. package/examples/typescript/flow-chord/package.json +1 -1
  92. package/examples/typescript/flow-chord-directed/package.json +1 -1
  93. package/examples/typescript/flow-chord-non-ribbon/package.json +1 -1
  94. package/examples/typescript/flow-sankey/package.json +1 -1
  95. package/examples/typescript/gantt/package.json +1 -1
  96. package/examples/typescript/gantt-multilevel/package.json +1 -1
  97. package/examples/typescript/gantt-simple/package.json +1 -1
  98. package/examples/typescript/gauge/package.json +1 -1
  99. package/examples/typescript/gauge-bands/package.json +1 -1
  100. package/examples/typescript/hierarchy-force-directed/package.json +1 -1
  101. package/examples/typescript/hierarchy-pack/package.json +1 -1
  102. package/examples/typescript/hierarchy-partition/package.json +1 -1
  103. package/examples/typescript/hierarchy-sunburst/package.json +1 -1
  104. package/examples/typescript/hierarchy-tree/package.json +1 -1
  105. package/examples/typescript/hierarchy-treemap/package.json +1 -1
  106. package/examples/typescript/hierarchy-voronoi-treemap/package.json +1 -1
  107. package/examples/typescript/jest/package.json +1 -1
  108. package/examples/typescript/json-pie/package.json +1 -1
  109. package/examples/typescript/json-xy/package.json +1 -1
  110. package/examples/typescript/map-animating-along-lines/package.json +1 -1
  111. package/examples/typescript/map-clustered-points/package.json +1 -1
  112. package/examples/typescript/map-day-and-night/package.json +1 -1
  113. package/examples/typescript/map-globe-rotate-to-country/package.json +1 -1
  114. package/examples/typescript/map-globe-with-projected-circles/package.json +1 -1
  115. package/examples/typescript/map-sankey/index.ts +48 -55
  116. package/examples/typescript/map-sankey/package.json +1 -1
  117. package/examples/typescript/map-sankey-waypoints/package.json +1 -1
  118. package/examples/typescript/map-with-bubbles/package.json +1 -1
  119. package/examples/typescript/map-zoom-to-country/package.json +1 -1
  120. package/examples/typescript/misc-40-charts/package.json +1 -1
  121. package/examples/typescript/misc-microchart-grid/package.json +1 -1
  122. package/examples/typescript/pie-chart/package.json +1 -1
  123. package/examples/typescript/pie-donut-chart/package.json +1 -1
  124. package/examples/typescript/pie-variable-radius/package.json +1 -1
  125. package/examples/typescript/radar-column-iwatch-style/package.json +1 -1
  126. package/examples/typescript/radar-heat-map/package.json +1 -1
  127. package/examples/typescript/radar-line/package.json +1 -1
  128. package/examples/typescript/radar-time-line/package.json +1 -1
  129. package/examples/typescript/sliced-funnel/package.json +1 -1
  130. package/examples/typescript/sliced-pictorial-stacked/package.json +1 -1
  131. package/examples/typescript/sliced-pyramid/package.json +1 -1
  132. package/examples/typescript/stock-chart/package.json +1 -1
  133. package/examples/typescript/stock-chart-comparing-stocks/package.json +1 -1
  134. package/examples/typescript/stock-chart-data-granularity/package.json +1 -1
  135. package/examples/typescript/stock-chart-data-grouping/package.json +1 -1
  136. package/examples/typescript/stock-chart-intraday/package.json +1 -1
  137. package/examples/typescript/stock-chart-live/package.json +1 -1
  138. package/examples/typescript/stock-chart-volume-separate-panel/package.json +1 -1
  139. package/examples/typescript/timeline-horizontal-serpentine-chart/package.json +1 -1
  140. package/examples/typescript/timeline-linear-process-diagram/package.json +1 -1
  141. package/examples/typescript/timeline-serpentine-chart/package.json +1 -1
  142. package/examples/typescript/timeline-spiral-chart/package.json +1 -1
  143. package/examples/typescript/venn-diagram/package.json +1 -1
  144. package/examples/typescript/wordcloud-with-data/package.json +1 -1
  145. package/examples/typescript/wordcloud-with-text/package.json +1 -1
  146. package/examples/typescript/xy-100-percent-stacked-column/package.json +1 -1
  147. package/examples/typescript/xy-animated-bullet-at-the-end-of-the-series/package.json +1 -1
  148. package/examples/typescript/xy-bubble/package.json +1 -1
  149. package/examples/typescript/xy-candlestick/package.json +1 -1
  150. package/examples/typescript/xy-clustered-column/package.json +1 -1
  151. package/examples/typescript/xy-column/package.json +1 -1
  152. package/examples/typescript/xy-comparing-series-google-analytics-style/package.json +1 -1
  153. package/examples/typescript/xy-data-grouping/package.json +1 -1
  154. package/examples/typescript/xy-draggable-range/package.json +1 -1
  155. package/examples/typescript/xy-drawing-series-with-mouse-or-touch/package.json +1 -1
  156. package/examples/typescript/xy-dumbbell plot/package.json +1 -1
  157. package/examples/typescript/xy-evenly-spaced-date-axis/package.json +1 -1
  158. package/examples/typescript/xy-line/package.json +1 -1
  159. package/examples/typescript/xy-line-highlight-on-legend-hover/package.json +1 -1
  160. package/examples/typescript/xy-live-data/package.json +1 -1
  161. package/examples/typescript/xy-multiple-synced-value-axes/package.json +1 -1
  162. package/examples/typescript/xy-ohlc/package.json +1 -1
  163. package/examples/typescript/xy-real-time-data-sorting/package.json +1 -1
  164. package/examples/typescript/xy-smoothed-line/package.json +1 -1
  165. package/examples/typescript/xy-stacked-and-clustered-column/package.json +1 -1
  166. package/examples/typescript/xy-stacked-column/package.json +1 -1
  167. package/examples/typescript/xy-stacked-step/package.json +1 -1
  168. package/examples/typescript/xy-stock/package.json +1 -1
  169. package/examples/typescript/xy-stock-comparing/package.json +1 -1
  170. package/package.json +1 -1
@@ -1 +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"]}
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\";\nimport type { IDisposer } from \"../../core/util/Disposer\";\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 * Disposer for the polygonSeries `datavalidated` listener. Re-attached\n\t * whenever the `polygonSeries` setting changes.\n\t */\n\tprivate _polygonSeriesDP?: IDisposer;\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\t// Watch for polygonSeries changes — re-attach the datavalidated\n\t\t// listener so users don't have to wait for the polygon series to\n\t\t// be ready before calling sankey.data.setAll().\n\t\tthis.on(\"polygonSeries\", () => {\n\t\t\tthis._setupPolygonSeriesListener();\n\t\t});\n\n\t\tsuper._afterNew();\n\n\t\t// Initial setup in case polygonSeries was passed in constructor settings.\n\t\tthis._setupPolygonSeriesListener();\n\t}\n\n\t/**\n\t * (Re)subscribes to the current `polygonSeries` `datavalidated` event so\n\t * that any data items added before the polygon series finished loading\n\t * its geoJSON get their endpoints resolved automatically.\n\t */\n\tprivate _setupPolygonSeriesListener() {\n\t\tif (this._polygonSeriesDP) {\n\t\t\tthis._polygonSeriesDP.dispose();\n\t\t\tthis._polygonSeriesDP = undefined;\n\t\t}\n\n\t\tconst polygonSeries = this.get(\"polygonSeries\");\n\t\tif (polygonSeries) {\n\t\t\tthis._polygonSeriesDP = polygonSeries.events.on(\"datavalidated\", () => {\n\t\t\t\tthis._resolvePendingDataItems();\n\t\t\t});\n\n\t\t\t// If the polygon series already has data items (e.g. it was\n\t\t\t// validated before our data was set), resolve immediately.\n\t\t\tif (polygonSeries.dataItems.length > 0) {\n\t\t\t\tthis._resolvePendingDataItems();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Walks all data items and resolves any whose source/target endpoints\n\t * weren't resolved during the initial `processDataItem` call (because\n\t * the polygon series wasn't ready yet). Marks values dirty so the\n\t * geometries get regenerated.\n\t */\n\tprivate _resolvePendingDataItems() {\n\t\tlet anyResolved = false;\n\t\t$array.each(this.dataItems, (dataItem) => {\n\t\t\tif (this._resolveEndpoints(dataItem)) {\n\t\t\t\tanyResolved = true;\n\t\t\t}\n\t\t});\n\t\tif (anyResolved) {\n\t\t\t// Trigger geometry regeneration on next validation cycle.\n\t\t\t// Mirrors Component.markDirtyValues without the parent's\n\t\t\t// MapPolygon geometry sync (handled later in _generateGeometries).\n\t\t\tthis._valuesDirty = true;\n\t\t\tthis.markDirty();\n\t\t}\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\tif (this._polygonSeriesDP) {\n\t\t\tthis._polygonSeriesDP.dispose();\n\t\t\tthis._polygonSeriesDP = undefined;\n\t\t}\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\tthis._resolveEndpoints(dataItem);\n\t}\n\n\t/**\n\t * Resolves the source/target endpoints for a single data item:\n\t * looks up centroids on the polygon series (if `sourceId`/`targetId` is set),\n\t * then creates or attaches the appropriate sankey nodes.\n\t *\n\t * Returns `true` if anything was newly resolved, so callers can decide\n\t * whether to mark geometries dirty.\n\t *\n\t * Safe to call repeatedly: skips endpoints that are already resolved.\n\t */\n\tprivate _resolveEndpoints(dataItem: DataItem<this[\"_dataItemSettings\"]>): boolean {\n\t\tconst polygonSeries = this.get(\"polygonSeries\");\n\t\tlet resolved = false;\n\n\t\t// -- Source --\n\t\tif (!dataItem.get(\"sourceNode\")) {\n\t\t\tlet sourceLon = dataItem.get(\"sourceLongitude\");\n\t\t\tlet sourceLat = dataItem.get(\"sourceLatitude\");\n\t\t\tconst sourceId = dataItem.get(\"sourceId\");\n\n\t\t\tif (sourceId && polygonSeries) {\n\t\t\t\tconst polygonDI = polygonSeries.getDataItemById(sourceId);\n\t\t\t\tif (polygonDI) {\n\t\t\t\t\tconst geometry = polygonDI.get(\"geometry\");\n\t\t\t\t\tif (geometry) {\n\t\t\t\t\t\tconst centroid = getGeoCentroid(geometry);\n\t\t\t\t\t\tsourceLon = centroid.longitude;\n\t\t\t\t\t\tsourceLat = centroid.latitude;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (sourceLon != null && sourceLat != null) {\n\t\t\t\tconst sourceKey = sourceId ?? (Number(sourceLon) + \",\" + Number(sourceLat));\n\t\t\t\tlet sourceNode = this.nodes.getDataItemById(sourceKey);\n\t\t\t\tif (!sourceNode) {\n\t\t\t\t\tconst ctx: any = dataItem.dataContext;\n\t\t\t\t\tconst name = (ctx && ctx.source) || sourceKey;\n\t\t\t\t\tthis.nodes.data.push({ id: sourceKey, name, longitude: Number(sourceLon), latitude: Number(sourceLat) });\n\t\t\t\t\tsourceNode = this.nodes.dataItems[this.nodes.dataItems.length - 1];\n\t\t\t\t}\n\t\t\t\tif (sourceNode) {\n\t\t\t\t\tdataItem.setRaw(\"sourceNode\", sourceNode);\n\t\t\t\t\tthis.nodes.addOutgoingLink(sourceNode, dataItem);\n\t\t\t\t\tresolved = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// -- Target --\n\t\tif (!dataItem.get(\"targetNode\")) {\n\t\t\tlet targetLon = dataItem.get(\"targetLongitude\");\n\t\t\tlet targetLat = dataItem.get(\"targetLatitude\");\n\t\t\tconst targetId = dataItem.get(\"targetId\");\n\n\t\t\tif (targetId && polygonSeries) {\n\t\t\t\tconst polygonDI = polygonSeries.getDataItemById(targetId);\n\t\t\t\tif (polygonDI) {\n\t\t\t\t\tconst geometry = polygonDI.get(\"geometry\");\n\t\t\t\t\tif (geometry) {\n\t\t\t\t\t\tconst centroid = getGeoCentroid(geometry);\n\t\t\t\t\t\ttargetLon = centroid.longitude;\n\t\t\t\t\t\ttargetLat = centroid.latitude;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (targetLon != null && targetLat != null) {\n\t\t\t\tconst targetKey = targetId ?? (Number(targetLon) + \",\" + Number(targetLat));\n\t\t\t\tlet targetNode = this.nodes.getDataItemById(targetKey);\n\t\t\t\tif (!targetNode) {\n\t\t\t\t\tconst ctx: any = dataItem.dataContext;\n\t\t\t\t\tconst name = (ctx && ctx.target) || targetKey;\n\t\t\t\t\tthis.nodes.data.push({ id: targetKey, name, longitude: Number(targetLon), latitude: Number(targetLat) });\n\t\t\t\t\ttargetNode = this.nodes.dataItems[this.nodes.dataItems.length - 1];\n\t\t\t\t}\n\t\t\t\tif (targetNode) {\n\t\t\t\t\tdataItem.setRaw(\"targetNode\", targetNode);\n\t\t\t\t\tthis.nodes.addIncomingLink(targetNode, dataItem);\n\t\t\t\t\tresolved = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn resolved;\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"]}
@@ -6,7 +6,7 @@ export class Registry {
6
6
  /**
7
7
  * Currently running version of amCharts.
8
8
  */
9
- this.version = "5.17.0";
9
+ this.version = "5.17.1";
10
10
  /**
11
11
  * List of applied licenses.
12
12
  * @ignore
@@ -1 +1 @@
1
- {"version":3,"file":"Registry.js","sourceRoot":"","sources":["../../../../src/.internal/core/Registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,QAAQ;IAArB;QACC;;WAEG;QACM,YAAO,GAAW,QAAQ,CAAC;QAEpC;;;WAGG;QACH,aAAQ,GAAa,EAAE,CAAC;QAExB;;WAEG;QACH,iBAAY,GAA6B,EAAE,CAAC;QAE5C;;WAEG;QACH,iBAAY,GAAU,EAAE,CAAC;QAEzB;;;;WAIG;QACH,gBAAW,GAAY,KAAK,CAAC;IAC9B,CAAC;CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;AAEvC;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe;IACzC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACrC,IAAI,IAAI,CAAC;IACT,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;KACf;AACF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,EAAU;IACrC,IAAI,KAAK,CAAC;IACV,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACtC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE;YACtB,KAAK,GAAG,IAAI,CAAC;SACb;IACF,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACd,CAAC","sourcesContent":["/**\n * @ignore\n */\nexport class Registry {\n\t/**\n\t * Currently running version of amCharts.\n\t */\n\treadonly version: string = \"5.17.0\";\n\n\t/**\n\t * List of applied licenses.\n\t * @ignore\n\t */\n\tlicenses: String[] = [];\n\n\t/**\n\t * Entities that have their `id` setting set.\n\t */\n\tentitiesById: { [index: string]: any } = {};\n\n\t/**\n\t * All created [[Root]] elements.\n\t */\n\trootElements: any[] = [];\n\n\t/**\n\t * Automatically dispose a [[Root]] element if it exists in the target container.\n\t *\n\t * @since 5.14.4\n\t */\n\tautoDispose: boolean = false;\n}\n\n/**\n * @ignore\n */\nexport const registry = new Registry();\n\n/**\n * Adds a license, e.g.:\n *\n * ```TypeScript\n * am5.addLicense(\"xxxxxxxx\");\n * ```\n * ```JavaScript\n * am5.addLicense(\"xxxxxxxx\");\n * ```\n *\n * Multiple licenses can be added to cover for multiple products.\n *\n * @param license License key\n */\nexport function addLicense(license: string): void {\n\tregistry.licenses.push(license);\n}\n\n/**\n * Disposes all [[Root]] elements.\n */\nexport function disposeAllRootElements(): void {\n\tlet root;\n\twhile ((root = registry.rootElements.pop())) {\n\t\troot.dispose();\n\t}\n}\n\n/**\n * Finds and returns a `Root` element assigned to a container with `id`.\n *\n * @param id Container ID\n * @return Root\n * @since 5.9.2\n */\nexport function getRootById(id: string): any {\n\tlet found;\n\tregistry.rootElements.forEach((item) => {\n\t\tif (item.dom.id == id) {\n\t\t\tfound = item;\n\t\t}\n\t});\n\treturn found;\n}\n"]}
1
+ {"version":3,"file":"Registry.js","sourceRoot":"","sources":["../../../../src/.internal/core/Registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,QAAQ;IAArB;QACC;;WAEG;QACM,YAAO,GAAW,QAAQ,CAAC;QAEpC;;;WAGG;QACH,aAAQ,GAAa,EAAE,CAAC;QAExB;;WAEG;QACH,iBAAY,GAA6B,EAAE,CAAC;QAE5C;;WAEG;QACH,iBAAY,GAAU,EAAE,CAAC;QAEzB;;;;WAIG;QACH,gBAAW,GAAY,KAAK,CAAC;IAC9B,CAAC;CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;AAEvC;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe;IACzC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACrC,IAAI,IAAI,CAAC;IACT,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;KACf;AACF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,EAAU;IACrC,IAAI,KAAK,CAAC;IACV,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACtC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE;YACtB,KAAK,GAAG,IAAI,CAAC;SACb;IACF,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACd,CAAC","sourcesContent":["/**\n * @ignore\n */\nexport class Registry {\n\t/**\n\t * Currently running version of amCharts.\n\t */\n\treadonly version: string = \"5.17.1\";\n\n\t/**\n\t * List of applied licenses.\n\t * @ignore\n\t */\n\tlicenses: String[] = [];\n\n\t/**\n\t * Entities that have their `id` setting set.\n\t */\n\tentitiesById: { [index: string]: any } = {};\n\n\t/**\n\t * All created [[Root]] elements.\n\t */\n\trootElements: any[] = [];\n\n\t/**\n\t * Automatically dispose a [[Root]] element if it exists in the target container.\n\t *\n\t * @since 5.14.4\n\t */\n\tautoDispose: boolean = false;\n}\n\n/**\n * @ignore\n */\nexport const registry = new Registry();\n\n/**\n * Adds a license, e.g.:\n *\n * ```TypeScript\n * am5.addLicense(\"xxxxxxxx\");\n * ```\n * ```JavaScript\n * am5.addLicense(\"xxxxxxxx\");\n * ```\n *\n * Multiple licenses can be added to cover for multiple products.\n *\n * @param license License key\n */\nexport function addLicense(license: string): void {\n\tregistry.licenses.push(license);\n}\n\n/**\n * Disposes all [[Root]] elements.\n */\nexport function disposeAllRootElements(): void {\n\tlet root;\n\twhile ((root = registry.rootElements.pop())) {\n\t\troot.dispose();\n\t}\n}\n\n/**\n * Finds and returns a `Root` element assigned to a container with `id`.\n *\n * @param id Container ID\n * @return Root\n * @since 5.9.2\n */\nexport function getRootById(id: string): any {\n\tlet found;\n\tregistry.rootElements.forEach((item) => {\n\t\tif (item.dom.id == id) {\n\t\t\tfound = item;\n\t\t}\n\t});\n\treturn found;\n}\n"]}
package/CHANGELOG.md CHANGED
@@ -5,6 +5,12 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
5
5
  Please note, that this project, while following numbering syntax, it DOES NOT
6
6
  adhere to [Semantic Versioning](http://semver.org/spec/v2.0.0.html) rules.
7
7
 
8
+ ## [5.17.1] - 2026-04-07
9
+
10
+ ### Changed
11
+ - `MapSankeySeries` now automatically resolves `sourceId`/`targetId` endpoints once the referenced `polygonSeries` finishes loading its geoJSON. Users no longer need to wrap `sankeySeries.data.setAll()` in a `polygonSeries.events.once("datavalidated", ...)` callback.
12
+
13
+
8
14
  ## [5.17.0] - 2026-04-06
9
15
 
10
16
  ### Added
@@ -3,7 +3,7 @@
3
3
  "name": "amcharts5-example-flow-arc-horizontal",
4
4
  "version": "0.1.0",
5
5
  "devDependencies": {
6
- "@amcharts/amcharts5": "^5.17.0",
6
+ "@amcharts/amcharts5": "^5.17.1",
7
7
  "source-map-loader": "^4.0.1",
8
8
  "webpack": "^5.1.3",
9
9
  "webpack-cli": "^5.1.1",
@@ -3,7 +3,7 @@
3
3
  "name": "amcharts5-example-flow-arc-vertical",
4
4
  "version": "0.1.0",
5
5
  "devDependencies": {
6
- "@amcharts/amcharts5": "^5.17.0",
6
+ "@amcharts/amcharts5": "^5.17.1",
7
7
  "source-map-loader": "^4.0.1",
8
8
  "webpack": "^5.1.3",
9
9
  "webpack-cli": "^5.1.1",
@@ -3,7 +3,7 @@
3
3
  "name": "amcharts5-example-flow-chord",
4
4
  "version": "0.1.0",
5
5
  "devDependencies": {
6
- "@amcharts/amcharts5": "^5.17.0",
6
+ "@amcharts/amcharts5": "^5.17.1",
7
7
  "source-map-loader": "^4.0.1",
8
8
  "webpack": "^5.1.3",
9
9
  "webpack-cli": "^5.1.1",
@@ -3,7 +3,7 @@
3
3
  "name": "amcharts5-example-flow-chord-directed",
4
4
  "version": "0.1.0",
5
5
  "devDependencies": {
6
- "@amcharts/amcharts5": "^5.17.0",
6
+ "@amcharts/amcharts5": "^5.17.1",
7
7
  "source-map-loader": "^4.0.1",
8
8
  "webpack": "^5.1.3",
9
9
  "webpack-cli": "^5.1.1",
@@ -3,7 +3,7 @@
3
3
  "name": "amcharts5-example-flow-chord-non-ribbon",
4
4
  "version": "0.1.0",
5
5
  "devDependencies": {
6
- "@amcharts/amcharts5": "^5.17.0",
6
+ "@amcharts/amcharts5": "^5.17.1",
7
7
  "source-map-loader": "^4.0.1",
8
8
  "webpack": "^5.1.3",
9
9
  "webpack-cli": "^5.1.1",
@@ -3,7 +3,7 @@
3
3
  "name": "amcharts5-example-flow-sankey",
4
4
  "version": "0.1.0",
5
5
  "devDependencies": {
6
- "@amcharts/amcharts5": "^5.17.0",
6
+ "@amcharts/amcharts5": "^5.17.1",
7
7
  "source-map-loader": "^4.0.1",
8
8
  "webpack": "^5.1.3",
9
9
  "webpack-cli": "^5.1.1",
@@ -3,7 +3,7 @@
3
3
  "name": "amcharts5-example-gantt",
4
4
  "version": "0.1.0",
5
5
  "devDependencies": {
6
- "@amcharts/amcharts5": "^5.17.0",
6
+ "@amcharts/amcharts5": "^5.17.1",
7
7
  "source-map-loader": "^4.0.1",
8
8
  "webpack": "^5.1.3",
9
9
  "webpack-cli": "^5.1.1",
@@ -3,7 +3,7 @@
3
3
  "name": "amcharts5-example-gantt-multilevel",
4
4
  "version": "0.1.0",
5
5
  "devDependencies": {
6
- "@amcharts/amcharts5": "^5.17.0",
6
+ "@amcharts/amcharts5": "^5.17.1",
7
7
  "source-map-loader": "^4.0.1",
8
8
  "webpack": "^5.1.3",
9
9
  "webpack-cli": "^5.1.1",
@@ -3,7 +3,7 @@
3
3
  "name": "amcharts5-example-gantt-simple",
4
4
  "version": "0.1.0",
5
5
  "devDependencies": {
6
- "@amcharts/amcharts5": "^5.17.0",
6
+ "@amcharts/amcharts5": "^5.17.1",
7
7
  "source-map-loader": "^4.0.1",
8
8
  "webpack": "^5.1.3",
9
9
  "webpack-cli": "^5.1.1",
@@ -3,7 +3,7 @@
3
3
  "name": "amcharts5-example-gauge",
4
4
  "version": "0.1.0",
5
5
  "devDependencies": {
6
- "@amcharts/amcharts5": "^5.17.0",
6
+ "@amcharts/amcharts5": "^5.17.1",
7
7
  "source-map-loader": "^4.0.1",
8
8
  "webpack": "^5.1.3",
9
9
  "webpack-cli": "^5.1.1",
@@ -3,7 +3,7 @@
3
3
  "name": "amcharts5-example-gauge-bands",
4
4
  "version": "0.1.0",
5
5
  "devDependencies": {
6
- "@amcharts/amcharts5": "^5.17.0",
6
+ "@amcharts/amcharts5": "^5.17.1",
7
7
  "source-map-loader": "^4.0.1",
8
8
  "webpack": "^5.1.3",
9
9
  "webpack-cli": "^5.1.1",
@@ -3,7 +3,7 @@
3
3
  "name": "amcharts5-example-hierarchy-force-directed",
4
4
  "version": "0.1.0",
5
5
  "devDependencies": {
6
- "@amcharts/amcharts5": "^5.17.0",
6
+ "@amcharts/amcharts5": "^5.17.1",
7
7
  "source-map-loader": "^4.0.1",
8
8
  "webpack": "^5.1.3",
9
9
  "webpack-cli": "^5.1.1",
@@ -3,7 +3,7 @@
3
3
  "name": "amcharts5-example-hierarchy-pack",
4
4
  "version": "0.1.0",
5
5
  "devDependencies": {
6
- "@amcharts/amcharts5": "^5.17.0",
6
+ "@amcharts/amcharts5": "^5.17.1",
7
7
  "source-map-loader": "^4.0.1",
8
8
  "webpack": "^5.1.3",
9
9
  "webpack-cli": "^5.1.1",
@@ -3,7 +3,7 @@
3
3
  "name": "amcharts5-example-hierarchy-partition",
4
4
  "version": "0.1.0",
5
5
  "devDependencies": {
6
- "@amcharts/amcharts5": "^5.17.0",
6
+ "@amcharts/amcharts5": "^5.17.1",
7
7
  "source-map-loader": "^4.0.1",
8
8
  "webpack": "^5.1.3",
9
9
  "webpack-cli": "^5.1.1",
@@ -3,7 +3,7 @@
3
3
  "name": "amcharts5-example-hierarchy-sunburst",
4
4
  "version": "0.1.0",
5
5
  "devDependencies": {
6
- "@amcharts/amcharts5": "^5.17.0",
6
+ "@amcharts/amcharts5": "^5.17.1",
7
7
  "source-map-loader": "^4.0.1",
8
8
  "webpack": "^5.1.3",
9
9
  "webpack-cli": "^5.1.1",
@@ -3,7 +3,7 @@
3
3
  "name": "amcharts5-example-hierarchy-tree",
4
4
  "version": "0.1.0",
5
5
  "devDependencies": {
6
- "@amcharts/amcharts5": "^5.17.0",
6
+ "@amcharts/amcharts5": "^5.17.1",
7
7
  "source-map-loader": "^4.0.1",
8
8
  "webpack": "^5.1.3",
9
9
  "webpack-cli": "^5.1.1",
@@ -3,7 +3,7 @@
3
3
  "name": "amcharts5-example-hierarchy-treemap",
4
4
  "version": "0.1.0",
5
5
  "devDependencies": {
6
- "@amcharts/amcharts5": "^5.17.0",
6
+ "@amcharts/amcharts5": "^5.17.1",
7
7
  "source-map-loader": "^4.0.1",
8
8
  "webpack": "^5.1.3",
9
9
  "webpack-cli": "^5.1.1",
@@ -3,7 +3,7 @@
3
3
  "name": "amcharts5-example-hierarchy-voronoi-treemap",
4
4
  "version": "0.1.0",
5
5
  "devDependencies": {
6
- "@amcharts/amcharts5": "^5.17.0",
6
+ "@amcharts/amcharts5": "^5.17.1",
7
7
  "source-map-loader": "^4.0.1",
8
8
  "webpack": "^5.1.3",
9
9
  "webpack-cli": "^5.1.1",
@@ -3,7 +3,7 @@
3
3
  "name": "amcharts5-example-jest",
4
4
  "version": "0.1.0",
5
5
  "devDependencies": {
6
- "@amcharts/amcharts5": "^5.17.0",
6
+ "@amcharts/amcharts5": "^5.17.1",
7
7
  "source-map-loader": "^4.0.1",
8
8
  "webpack": "^5.1.3",
9
9
  "webpack-cli": "^5.1.1",