@ds-mo/ui 13.6.0 → 13.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +2 -2
  3. package/dist/agent.json +109 -371
  4. package/dist/angular/ds-card-chart.d.ts +18 -0
  5. package/dist/angular/{ds-card-data-viz.js → ds-card-chart.js} +10 -10
  6. package/dist/angular/ds-chart.d.ts +19 -0
  7. package/dist/angular/{ds-chart-donut.js → ds-chart.js} +15 -15
  8. package/dist/angular/ds-tooltip-chart.d.ts +12 -0
  9. package/dist/angular/{ds-chart-line.js → ds-tooltip-chart.js} +12 -12
  10. package/dist/angular/index.d.ts +1 -1
  11. package/dist/angular/index.js +3 -5
  12. package/dist/angular/proxies.d.ts +3 -5
  13. package/dist/angular/proxies.js +3 -5
  14. package/dist/components/ds-agent-activity.js +1 -1
  15. package/dist/components/ds-agent-response.js +1 -1
  16. package/dist/components/ds-agent-source-list.js +1 -1
  17. package/dist/components/ds-agent-tool-call.js +1 -1
  18. package/dist/components/ds-attachment-list.js +1 -1
  19. package/dist/components/ds-badge.js +1 -1
  20. package/dist/components/ds-banner.js +1 -1
  21. package/dist/components/ds-banner.js.map +1 -1
  22. package/dist/components/ds-bar-nav.js +1 -1
  23. package/dist/components/ds-bar-title.js +1 -1
  24. package/dist/components/ds-bar-workflow.js +1 -1
  25. package/dist/components/ds-breadcrumb.js +1 -1
  26. package/dist/components/ds-button-filled.js +1 -1
  27. package/dist/components/ds-button-unfilled.js +1 -1
  28. package/dist/components/{ds-chart-line.d.ts → ds-card-chart.d.ts} +4 -4
  29. package/dist/components/ds-card-chart.js +2 -0
  30. package/dist/components/ds-card-chart.js.map +1 -0
  31. package/dist/components/ds-card-overview.js +1 -1
  32. package/dist/components/ds-card-setting.js +1 -1
  33. package/dist/components/ds-card-setting.js.map +1 -1
  34. package/dist/components/ds-chart-legend.js +1 -1
  35. package/dist/components/ds-chart-legend.js.map +1 -1
  36. package/dist/components/{ds-chart-bar.d.ts → ds-chart.d.ts} +4 -4
  37. package/dist/components/ds-chart.js +2 -0
  38. package/dist/components/ds-chart.js.map +1 -0
  39. package/dist/components/ds-checkbox.js +1 -1
  40. package/dist/components/ds-chip.js +1 -1
  41. package/dist/components/ds-code-block.js +1 -1
  42. package/dist/components/ds-conversation-list-item.js +1 -1
  43. package/dist/components/ds-conversation-list-section.js +1 -1
  44. package/dist/components/ds-conversation-list.js +1 -1
  45. package/dist/components/ds-divider.js +1 -1
  46. package/dist/components/ds-empty-state.js +1 -1
  47. package/dist/components/ds-field.js +1 -1
  48. package/dist/components/ds-input.js +1 -1
  49. package/dist/components/ds-markdown.js +1 -1
  50. package/dist/components/ds-menu.js +1 -1
  51. package/dist/components/ds-message-actions.js +1 -1
  52. package/dist/components/ds-message-bubble.js +1 -1
  53. package/dist/components/ds-message-composer.js +1 -1
  54. package/dist/components/ds-message-composer.js.map +1 -1
  55. package/dist/components/ds-message-scroller.js +1 -1
  56. package/dist/components/ds-message.js +1 -1
  57. package/dist/components/ds-mobile-bar-nav.js +1 -1
  58. package/dist/components/ds-mobile-header.js +1 -1
  59. package/dist/components/ds-mobile-section-switcher.js +1 -1
  60. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  61. package/dist/components/ds-modal.js +1 -1
  62. package/dist/components/ds-modal.js.map +1 -1
  63. package/dist/components/ds-panel-nav.js +1 -1
  64. package/dist/components/ds-panel-sub-nav.js +1 -1
  65. package/dist/components/ds-panel-tool-header.js +1 -1
  66. package/dist/components/ds-panel-tool-search.js +1 -1
  67. package/dist/components/ds-panel-tools.js +1 -1
  68. package/dist/components/ds-radio.js +1 -1
  69. package/dist/components/ds-scroll-overlay.js +1 -1
  70. package/dist/components/ds-scroll-overlay.js.map +1 -1
  71. package/dist/components/ds-select.js +1 -1
  72. package/dist/components/ds-select.js.map +1 -1
  73. package/dist/components/ds-shell-app.js +1 -1
  74. package/dist/components/ds-shell-page.js +1 -1
  75. package/dist/components/ds-shell-tools.js +1 -1
  76. package/dist/components/ds-skeleton.js +1 -1
  77. package/dist/components/ds-slider.js +1 -1
  78. package/dist/components/ds-swatch-picker.js +1 -1
  79. package/dist/components/ds-switch.js +1 -1
  80. package/dist/components/ds-tab-group.js +1 -1
  81. package/dist/components/ds-tag.js +1 -1
  82. package/dist/components/ds-text.js +1 -1
  83. package/dist/components/ds-toast.js +1 -1
  84. package/dist/components/ds-toast.js.map +1 -1
  85. package/dist/components/{ds-card-data-viz.d.ts → ds-tooltip-chart.d.ts} +4 -4
  86. package/dist/components/ds-tooltip-chart.js +2 -0
  87. package/dist/components/ds-tooltip.js +1 -1
  88. package/dist/components/ds-typing-indicator.js +1 -1
  89. package/dist/components/{p-IYy-jODg.js → p-1Zbh1MRy.js} +2 -2
  90. package/dist/components/{p-wOOAzVMC.js → p-BVsLc3t5.js} +2 -2
  91. package/dist/components/p-BZCUFHYa.js +2 -0
  92. package/dist/components/{p-D0bM3cKj.js.map → p-BZCUFHYa.js.map} +1 -1
  93. package/dist/components/{p-BBtjABBS.js → p-BjiRqLtB.js} +2 -2
  94. package/dist/components/p-Bk1A9jLm.js +2 -0
  95. package/dist/components/p-Bk1A9jLm.js.map +1 -0
  96. package/dist/components/{p-Bsfpxto1.js → p-BsBw-w1q.js} +2 -2
  97. package/dist/components/p-ByfXC1wu.js +2 -0
  98. package/dist/components/{p-1S9AW2MA.js.map → p-ByfXC1wu.js.map} +1 -1
  99. package/dist/components/{p-B6RrZQqw.js → p-C-ENnZzq.js} +2 -2
  100. package/dist/components/{p-BPyymeuR.js → p-C2U48kDH.js} +2 -2
  101. package/dist/components/{p-CKRJX0Y0.js → p-C7mCjS2t.js} +2 -2
  102. package/dist/components/{p-6B411hQA.js → p-CL8XL1eh.js} +2 -2
  103. package/dist/components/{p-DfvDNcoq.js → p-CMZVPEZ_.js} +2 -2
  104. package/dist/components/{p-BtuYufL3.js → p-CWL61nKt.js} +2 -2
  105. package/dist/components/p-CWL61nKt.js.map +1 -0
  106. package/dist/components/p-CWLrXsDQ.js +2 -0
  107. package/dist/components/{p-D2cjoj2r.js.map → p-CWLrXsDQ.js.map} +1 -1
  108. package/dist/components/{p-Di81y9Q2.js → p-CX7QIytv.js} +2 -2
  109. package/dist/components/p-CXduurfd.js +2 -0
  110. package/dist/components/p-CXduurfd.js.map +1 -0
  111. package/dist/components/p-CbAfTqlb.js +2 -0
  112. package/dist/components/{p-CuJ3J6OJ.js.map → p-CbAfTqlb.js.map} +1 -1
  113. package/dist/components/{p-DVuxzrCC.js → p-CfTThRNX.js} +2 -2
  114. package/dist/components/{p-BmNpPyzf.js → p-CkLffZGn.js} +2 -2
  115. package/dist/components/{p-B4_0Ys4w.js → p-CkyXU1YX.js} +2 -2
  116. package/dist/components/{p-iCjUWcp7.js → p-CywKWfgD.js} +2 -2
  117. package/dist/components/{p-BR_oMaas.js → p-D3UKwTEo.js} +2 -2
  118. package/dist/components/{p-Bl6A5AJq.js → p-D7z9bJ6n.js} +2 -2
  119. package/dist/components/{p-DaqFuVKZ.js → p-DAftUxvL.js} +2 -2
  120. package/dist/components/{p-BFfHIu6y.js → p-DQ94PkZA.js} +2 -2
  121. package/dist/components/{p-B-kRByho.js → p-DSpq7xQF.js} +2 -2
  122. package/dist/components/{p-og48Kh2i.js → p-DzM3TcyQ.js} +2 -2
  123. package/dist/components/p-GbTasczF.js +2 -0
  124. package/dist/components/{p-Ca6s5fLR.js → p-Mmr9b1bB.js} +2 -2
  125. package/dist/components/p-UH2AGfR0.js +2 -0
  126. package/dist/components/{p-DX4c3kZ1.js.map → p-UH2AGfR0.js.map} +1 -1
  127. package/dist/components/{p-CxgMUvqg.js → p-Z2zfShlF.js} +2 -2
  128. package/dist/components/{p-Bmo4T96l.js → p-_mClULFL.js} +2 -2
  129. package/dist/components/{p-Bb4f5SuF.js → p-jf1zCsuw.js} +2 -2
  130. package/dist/components/{p-Eep5mxtv.js → p-oiR4IoH1.js} +2 -2
  131. package/dist/components/{p-DHF5cLzr.js → p-u2OZHaLY.js} +2 -2
  132. package/dist/docs/components.json +180 -662
  133. package/dist/lib/utils/chart-grammar.d.ts +359 -0
  134. package/dist/lib/utils/index.d.ts +2 -0
  135. package/dist/lib/utils/index.js +504 -0
  136. package/dist/lib/utils/index.js.map +4 -4
  137. package/dist/lib/utils/token-defaults.d.ts +3 -0
  138. package/dist/mcp-data/registry/banner.json +2 -2
  139. package/dist/mcp-data/registry/card-chart.json +238 -0
  140. package/dist/mcp-data/registry/card-overview.json +2 -2
  141. package/dist/mcp-data/registry/card-setting.json +2 -2
  142. package/dist/mcp-data/registry/chart-legend.json +11 -18
  143. package/dist/mcp-data/registry/chart.json +258 -0
  144. package/dist/mcp-data/registry/mobile-bar-nav.json +3 -3
  145. package/dist/mcp-data/registry/registry.json +108 -376
  146. package/dist/mcp-data/registry/tooltip-chart.json +253 -0
  147. package/dist/mcp-data/registry/tooltip.json +2 -2
  148. package/dist/react/components.d.ts +3 -5
  149. package/dist/react/components.js +3 -5
  150. package/dist/react/ds-card-chart.d.ts +12 -0
  151. package/dist/react/ds-card-chart.js +12 -0
  152. package/dist/react/ds-chart.d.ts +12 -0
  153. package/dist/react/ds-chart.js +12 -0
  154. package/dist/react/{ds-chart-bar.d.ts → ds-tooltip-chart.d.ts} +3 -3
  155. package/dist/react/ds-tooltip-chart.js +12 -0
  156. package/dist/types/components/{CardDataViz/CardDataViz.d.ts → CardChart/CardChart.d.ts} +9 -13
  157. package/dist/types/components/CardChart/index.d.ts +2 -0
  158. package/dist/types/components/Chart/Chart.d.ts +66 -0
  159. package/dist/types/components/Chart/index.d.ts +2 -0
  160. package/dist/types/components/ChartLegend/ChartLegend.d.ts +1 -1
  161. package/dist/types/components/{TooltipDataViz/TooltipDataViz.d.ts → TooltipChart/TooltipChart.d.ts} +15 -6
  162. package/dist/types/components/TooltipChart/index.d.ts +2 -0
  163. package/dist/types/components.d.ts +129 -294
  164. package/dist/types/utils/chart-grammar.d.ts +360 -0
  165. package/dist/types/utils/chart-scene.d.ts +128 -0
  166. package/dist/types/utils/chart-theme.d.ts +27 -0
  167. package/dist/types/utils/chart-types.d.ts +0 -13
  168. package/dist/types/utils/index.d.ts +2 -0
  169. package/dist/types/utils/token-defaults.d.ts +3 -0
  170. package/package.json +1 -1
  171. package/dist/angular/ds-card-data-viz.d.ts +0 -18
  172. package/dist/angular/ds-chart-bar.d.ts +0 -12
  173. package/dist/angular/ds-chart-bar.js +0 -38
  174. package/dist/angular/ds-chart-donut.d.ts +0 -19
  175. package/dist/angular/ds-chart-line.d.ts +0 -12
  176. package/dist/angular/ds-tooltip-data-viz.d.ts +0 -12
  177. package/dist/angular/ds-tooltip-data-viz.js +0 -38
  178. package/dist/components/ds-card-data-viz.js +0 -2
  179. package/dist/components/ds-card-data-viz.js.map +0 -1
  180. package/dist/components/ds-chart-bar.js +0 -2
  181. package/dist/components/ds-chart-bar.js.map +0 -1
  182. package/dist/components/ds-chart-donut.d.ts +0 -11
  183. package/dist/components/ds-chart-donut.js +0 -2
  184. package/dist/components/ds-chart-donut.js.map +0 -1
  185. package/dist/components/ds-chart-line.js +0 -2
  186. package/dist/components/ds-chart-line.js.map +0 -1
  187. package/dist/components/ds-tooltip-data-viz.d.ts +0 -11
  188. package/dist/components/ds-tooltip-data-viz.js +0 -2
  189. package/dist/components/p-1S9AW2MA.js +0 -2
  190. package/dist/components/p-B6Vuayt6.js +0 -2
  191. package/dist/components/p-B6Vuayt6.js.map +0 -1
  192. package/dist/components/p-BBpASejH.js +0 -2
  193. package/dist/components/p-BBpASejH.js.map +0 -1
  194. package/dist/components/p-BtuYufL3.js.map +0 -1
  195. package/dist/components/p-BybqPD8K.js +0 -2
  196. package/dist/components/p-BybqPD8K.js.map +0 -1
  197. package/dist/components/p-C4uYvyq6.js +0 -2
  198. package/dist/components/p-C4uYvyq6.js.map +0 -1
  199. package/dist/components/p-CbjFUpOj.js +0 -2
  200. package/dist/components/p-CbjFUpOj.js.map +0 -1
  201. package/dist/components/p-CrCGIx8s.js +0 -2
  202. package/dist/components/p-CrCGIx8s.js.map +0 -1
  203. package/dist/components/p-CuJ3J6OJ.js +0 -2
  204. package/dist/components/p-D0bM3cKj.js +0 -2
  205. package/dist/components/p-D2cjoj2r.js +0 -2
  206. package/dist/components/p-DX4c3kZ1.js +0 -2
  207. package/dist/components/p-DXewjzkM.js +0 -2
  208. package/dist/components/p-DXewjzkM.js.map +0 -1
  209. package/dist/components/p-yhj1lIPx.js +0 -2
  210. package/dist/mcp-data/registry/card-data-viz.json +0 -241
  211. package/dist/mcp-data/registry/chart-bar.json +0 -245
  212. package/dist/mcp-data/registry/chart-donut.json +0 -344
  213. package/dist/mcp-data/registry/chart-line.json +0 -223
  214. package/dist/mcp-data/registry/tooltip-data-viz.json +0 -224
  215. package/dist/react/ds-card-data-viz.d.ts +0 -12
  216. package/dist/react/ds-card-data-viz.js +0 -12
  217. package/dist/react/ds-chart-bar.js +0 -12
  218. package/dist/react/ds-chart-donut.d.ts +0 -12
  219. package/dist/react/ds-chart-donut.js +0 -12
  220. package/dist/react/ds-chart-line.d.ts +0 -9
  221. package/dist/react/ds-chart-line.js +0 -12
  222. package/dist/react/ds-tooltip-data-viz.d.ts +0 -9
  223. package/dist/react/ds-tooltip-data-viz.js +0 -12
  224. package/dist/types/components/CardDataViz/index.d.ts +0 -2
  225. package/dist/types/components/ChartBar/ChartBar.d.ts +0 -31
  226. package/dist/types/components/ChartBar/index.d.ts +0 -3
  227. package/dist/types/components/ChartDonut/ChartDonut.d.ts +0 -72
  228. package/dist/types/components/ChartDonut/index.d.ts +0 -2
  229. package/dist/types/components/ChartLine/ChartLine.d.ts +0 -23
  230. package/dist/types/components/ChartLine/index.d.ts +0 -2
  231. package/dist/types/components/TooltipDataViz/index.d.ts +0 -2
  232. /package/dist/components/{ds-tooltip-data-viz.js.map → ds-tooltip-chart.js.map} +0 -0
  233. /package/dist/components/{p-IYy-jODg.js.map → p-1Zbh1MRy.js.map} +0 -0
  234. /package/dist/components/{p-wOOAzVMC.js.map → p-BVsLc3t5.js.map} +0 -0
  235. /package/dist/components/{p-BBtjABBS.js.map → p-BjiRqLtB.js.map} +0 -0
  236. /package/dist/components/{p-Bsfpxto1.js.map → p-BsBw-w1q.js.map} +0 -0
  237. /package/dist/components/{p-B6RrZQqw.js.map → p-C-ENnZzq.js.map} +0 -0
  238. /package/dist/components/{p-BPyymeuR.js.map → p-C2U48kDH.js.map} +0 -0
  239. /package/dist/components/{p-CKRJX0Y0.js.map → p-C7mCjS2t.js.map} +0 -0
  240. /package/dist/components/{p-6B411hQA.js.map → p-CL8XL1eh.js.map} +0 -0
  241. /package/dist/components/{p-DfvDNcoq.js.map → p-CMZVPEZ_.js.map} +0 -0
  242. /package/dist/components/{p-Di81y9Q2.js.map → p-CX7QIytv.js.map} +0 -0
  243. /package/dist/components/{p-DVuxzrCC.js.map → p-CfTThRNX.js.map} +0 -0
  244. /package/dist/components/{p-BmNpPyzf.js.map → p-CkLffZGn.js.map} +0 -0
  245. /package/dist/components/{p-B4_0Ys4w.js.map → p-CkyXU1YX.js.map} +0 -0
  246. /package/dist/components/{p-iCjUWcp7.js.map → p-CywKWfgD.js.map} +0 -0
  247. /package/dist/components/{p-BR_oMaas.js.map → p-D3UKwTEo.js.map} +0 -0
  248. /package/dist/components/{p-Bl6A5AJq.js.map → p-D7z9bJ6n.js.map} +0 -0
  249. /package/dist/components/{p-DaqFuVKZ.js.map → p-DAftUxvL.js.map} +0 -0
  250. /package/dist/components/{p-BFfHIu6y.js.map → p-DQ94PkZA.js.map} +0 -0
  251. /package/dist/components/{p-B-kRByho.js.map → p-DSpq7xQF.js.map} +0 -0
  252. /package/dist/components/{p-og48Kh2i.js.map → p-DzM3TcyQ.js.map} +0 -0
  253. /package/dist/components/{p-yhj1lIPx.js.map → p-GbTasczF.js.map} +0 -0
  254. /package/dist/components/{p-Ca6s5fLR.js.map → p-Mmr9b1bB.js.map} +0 -0
  255. /package/dist/components/{p-CxgMUvqg.js.map → p-Z2zfShlF.js.map} +0 -0
  256. /package/dist/components/{p-Bmo4T96l.js.map → p-_mClULFL.js.map} +0 -0
  257. /package/dist/components/{p-Bb4f5SuF.js.map → p-jf1zCsuw.js.map} +0 -0
  258. /package/dist/components/{p-Eep5mxtv.js.map → p-oiR4IoH1.js.map} +0 -0
  259. /package/dist/components/{p-DHF5cLzr.js.map → p-u2OZHaLY.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ascending","a","b","NaN","descending","bisector","f","compare1","compare2","delta","length","d","x","zero","left","lo","hi","mid","right","center","i","number","ascendingBisect","bisectRight","InternMap","Map","constructor","entries","key","keyof","super","Object","defineProperties","this","_intern","value","_key","set","get","intern_get","has","intern_set","delete","intern_delete","valueOf","e10","Math","sqrt","e5","e2","tickSpec","start","stop","count","step","max","power","floor","log10","error","pow","factor","i1","i2","inc","round","ticks","reverse","n","Array","tickIncrement","tickStep","quantileSorted","values","p","valueof","isNaN","i0","value0","value1","range","arguments","ceil","channelValue","datum","index","data","channel","undefined","visualValue","fallback","boxStatistics","whisker","sorted","filter","Number","isFinite","sort","q1","median","q3","iqr","lowerFence","upperFence","lower","find","upper","outliers","chartValueKey","Date","getTime","String","initRange","domain","implicit","Symbol","ordinal","unknown","scale","push","_","slice","from","copy","apply","band","ordinalRange","r0","r1","bandwidth","paddingInner","paddingOuter","align","rescale","sequence","map","rangeRound","padding","min","define","factory","prototype","extend","parent","definition","create","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","RegExp","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color","channels","assign","displayable","rgb","hex","color_formatHex","formatHex","formatHex8","color_formatHex8","formatHsl","color_formatHsl","formatRgb","color_formatRgb","toString","hslConvert","format","m","l","trim","toLowerCase","exec","parseInt","rgbn","Rgb","rgba","hsla","hasOwnProperty","r","g","rgbConvert","o","opacity","k","clamp","clampi","clampa","rgb_formatHex","rgb_formatHex8","rgb_formatRgb","h","s","Hsl","hsl","m2","m1","hsl2rgb","clamph","clampt","constant$1","linear","t","exponential","y","gamma","nogamma","constant","rgbGamma","end","colorRgb","numberArray","c","isNumberArray","ArrayBuffer","isView","DataView","genericArray","nb","na","date","setTime","interpolateNumber","object","reA","reB","source","one","string","bi","lastIndex","am","bm","bs","q","join","interpolate","isArray","interpolateRound","constants","unit","identity","normalize","clamper","bimap","d0","d1","polymap","j","bisect","target","transformer","interpolateValue","transform","untransform","piecewise","output","input","invert","u","continuous","formatDecimal","abs","toLocaleString","replace","formatDecimalParts","toExponential","indexOf","coefficient","exponent","formatGroup","grouping","thousands","width","substring","formatNumerals","numerals","re","formatSpecifier","specifier","match","Error","FormatSpecifier","fill","sign","symbol","comma","precision","type","formatTrim","out","prefixExponent","formatPrefixAuto","toPrecision","formatRounded","formatTypes","toFixed","e","X","toUpperCase","prefixes","formatLocale","locale","group","call","currencyPrefix","currency","currencySuffix","decimal","percent","minus","nan","newFormat","options","prefix","test","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","charCodeAt","Infinity","formatPrefix","defaultLocale","precisionFixed","precisionPrefix","precisionRound","tickFormat","linearish","nice","prestep","maxIter","atan2","cos","sin","epsilon","pi","PI","halfPi","tau","acos","asin","tauEpsilon","append","strings","appendRound","digits","Path","_x0","_y0","_x1","_y1","_append","moveTo","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","x2","y2","arcTo","x0","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","t01","t21","arc","a0","a1","ccw","dx","dy","cw","da","rect","w","withPath","shape","RangeError","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","intersect","x3","y3","x10","y10","x32","y32","cornerTangents","rc","ox","oy","x11","y11","x00","y00","d2","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","arcShape","cornerRadius","padRadius","context","path","buffer","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","t0","t1","p0","p1","oc","ax","ay","bx","by","kc","lc","centroid","array","Linear","_context","areaStart","_line","areaEnd","lineStart","_point","lineEnd","point","curveLinear","lineShape","defined","curve","line","pointX","pointY","defined0","areaShape","area","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","curveRadialLinear","curveRadial","Radial","_curve","radial","lineRadial","angle","radius","lineRadial$1","areaRadial","lineStartAngle","lineEndAngle","lineInnerRadius","lineOuterRadius","noop","LinearClosed","curveLinearClosed","defaultChartTheme","seriesStrokeWidth","ruleStrokeWidth","gridStrokeWidth","barRadius","polarCornerRadius","polarLabelGap","dotRadius","dotHaloWidth","focusDotRadius","areaOpacity","boxFillOpacity","boxMaxWidth","heatmapMinimumOpacity","heatmapMaximumOpacity","cellGap","stackGap","donutGap","annotationFillOpacity","resolveChartTheme","element","style","getComputedStyle","lowOpacity","parseFloat","getPropertyValue","resolvedLowOpacity","resolveCssLengthPx","TOKEN_DEFAULTS","radius025","space200","strokeWidth025","strokeWidth012","strokeWidth037","size800","chartIntentColor","intent","DEFAULT_MARGIN","top","bottom","POLAR_MARGIN","DEFAULT_TICK_SPACING","DEFAULT_TICK_SIZE","DEFAULT_TICK_PADDING","EMPTY_AXIS","grid","rotate","tickSize","tickPadding","finiteNumber","validValue","numericValue","distinct","seen","Set","add","resolveSpec","height","chart","normalizeCoordinateContainers","spec","container","marks","mark","kind","coordinate","resolveMargin","polar","defaults","margin","developmentWarning","message","browserDevelopment","location","hostname","nodeProcess","globalThis","process","nodeDevelopment","env","NODE_ENV","console","warn","positionalKey","observation","coordinates","theta1","theta2","z","inferDatumKey","uniqueIds","uniquePositions","explicit","id","position","markId","uniqueValues","counts","forEach","observationsForMark","markIndex","bases","read","name","radius1","radius2","intensity","text","label","ids","base","datumKey","sceneKey","configuredScale","candidate","configured","TypeError","inferDomain","includeZero","unique","some","dates","every","numeric","minimum","maximum","resolveScale","resolved","existingDomain","scalePosition","resolution","result","formatTick","Intl","DateTimeFormat","month","day","NumberFormat","maximumFractionDigits","tickValues","axis","requested","thinTicks","horizontal","measurer","spacing","tick","labelVisible","kept","previousEnd","NEGATIVE_INFINITY","boundary","measurement","extent","last","candidateSize","lastSize","pop","visible","sceneAxis","ticksForAxis","all","size","rotatedMeasurement","degrees","radians","cosine","sine","plotFor","solveCartesianMargins","xAxis","yAxis","plot","visibleX","visibleY","xMeasurements","yMeasurements","widestY","item","tallestY","tallestX","styleFor","stroke","fillOpacity","strokeOpacity","strokeWidth","strokeDasharray","dotCircleRadius","coreRadius","haloWidth","groupObservations","observations","groups","pointFor","overrides","datumIndex","groupValue","groupLabel","xValue","yValue","angleValue","radiusValue","axisValues","relevant","layout","sums","category","sum","positive","negative","colorResolver","inferred","flatMap","categoryColor","rectNode","inset","buildCartesianNodes","allObservations","xScale","yScale","colorFor","theme","nodes","points","focusDotPointKeys","first","interactive","barOptions","vertical","categoryScale","valueScale","categories","categoryBand","seriesValues","groupedScale","scaleBand","stacks","stackSigns","rawValue","stackKey","signs","categoryCenter","hasPriorStackSegment","stack","startPosition","endPosition","zeroGap","segmentGap","renderedStartPosition","bandStart","bandSize","node","boxOptions","byCategory","statistics","boxWidth","yLower","yUpper","yQ1","yQ3","yMedian","lineStyle","boxNode","clipToPlot","summaryObservation","rectOptions","cellOptions","ratio","minOpacity","minimumOpacity","maxOpacity","maximumOpacity","fontFamily","fontSize","fontWeight","textAnchor","polarAngle","fraction","polarPoint","centerX","centerY","resolveDonutPadAngle","gap","hypot","buildPolarScene","arcHitRegions","angleDomain","angleFor","findIndex","requestedMargin","availableRadius","pass","overflowTop","overflowRight","overflowBottom","overflowLeft","localX","localY","defaultInnerRadius","radiusValues","radiusOptions","scaleLinear","radiusScale","guides","tickValuesForRadius","ringIndex","ringRadius","polygon","className","measure","dominantBaseline","markObservations","inner","outer","corner","defaultPadAngle","generator","arcDatum","valid","radialPosition","arcMarkIds","compileChartScene","built","focus","maxFocusDistance","tooltip","clip","focusDotCircleRadius","focusDotHaloWidth","xValues","yValues","nextMargin","settled","side","normalizeAngle","turn","arcContainsPoint","region","sweep","EPSILON","findChartFocus","mode","maxDistance","POSITIVE_INFINITY","hitRegion","hitPoint","primary","distance","reduce","nearest","chartCss","DEFAULT_WIDTH","DEFAULT_HEIGHT","Chart","__stencil_proxyCustomElement","HTMLElement","registerHost","surfaceWidth","warnedConflictingHeight","measuredLabels","descriptionId","random","clipId","onPointerMove","event","svg","currentTarget","getBoundingClientRect","clientX","clientY","pointerAnchor","scene","resolveFocus","onPointerLeave","clearFocus","onKeyDown","keyboardPoints","preventDefault","current","focusState","next","componentWillLoad","compile","componentDidLoad","connectResizeObserver","waitForFonts","componentDidRender","measureRenderedLabels","disconnectedCallback","resizeObserver","disconnect","resizeFrame","cancelAnimationFrame","compileFrame","onDefinitionInputChange","scheduleCompile","onWidthChange","measureHost","surfaceHeight","aspectRatio","containerHeight","ResizeObserver","entry","requestAnimationFrame","applyMeasuredSize","contentRect","observe","el","bounds","changed","nextWidth","nextHeight","previousKey","document","documentElement","lang","restored","grouped","fonts","ready","then","clear","labels","querySelectorAll","textContent","box","getBBox","previous","dsChartFocusChange","emit","renderNode","resolvedClassName","presentation","class","rx","renderMarkLayers","layers","clipped","layer","focusedDotPoints","tooltipContent","formatValue","heading","formatGroupHeading","items","formatGroupItem","statusText","content","Boolean","render","tooltipAnchor","groupedPointFocus","focused","Host","description","viewBox","role","tabindex","caption"],"sources":["node_modules/d3-array/src/ascending.js","node_modules/d3-array/src/descending.js","node_modules/d3-array/src/bisector.js","node_modules/d3-array/src/number.js","node_modules/d3-array/src/bisect.js","node_modules/internmap/src/index.js","node_modules/d3-array/src/ticks.js","node_modules/d3-array/src/quantile.js","node_modules/d3-array/src/range.js","src/wc/utils/chart-grammar.ts","node_modules/d3-scale/src/init.js","node_modules/d3-scale/src/ordinal.js","node_modules/d3-scale/src/band.js","node_modules/d3-color/src/define.js","node_modules/d3-color/src/color.js","node_modules/d3-interpolate/src/constant.js","node_modules/d3-interpolate/src/color.js","node_modules/d3-interpolate/src/rgb.js","node_modules/d3-interpolate/src/numberArray.js","node_modules/d3-interpolate/src/array.js","node_modules/d3-interpolate/src/date.js","node_modules/d3-interpolate/src/number.js","node_modules/d3-interpolate/src/object.js","node_modules/d3-interpolate/src/string.js","node_modules/d3-interpolate/src/value.js","node_modules/d3-interpolate/src/round.js","node_modules/d3-scale/src/constant.js","node_modules/d3-scale/src/number.js","node_modules/d3-scale/src/continuous.js","node_modules/d3-format/src/formatDecimal.js","node_modules/d3-format/src/exponent.js","node_modules/d3-format/src/formatGroup.js","node_modules/d3-format/src/formatNumerals.js","node_modules/d3-format/src/formatSpecifier.js","node_modules/d3-format/src/formatTrim.js","node_modules/d3-format/src/formatPrefixAuto.js","node_modules/d3-format/src/formatRounded.js","node_modules/d3-format/src/formatTypes.js","node_modules/d3-format/src/identity.js","node_modules/d3-format/src/locale.js","node_modules/d3-format/src/defaultLocale.js","node_modules/d3-format/src/precisionFixed.js","node_modules/d3-format/src/precisionPrefix.js","node_modules/d3-format/src/precisionRound.js","node_modules/d3-scale/src/tickFormat.js","node_modules/d3-scale/src/linear.js","node_modules/d3-shape/src/constant.js","node_modules/d3-shape/src/math.js","node_modules/d3-path/src/path.js","node_modules/d3-shape/src/path.js","node_modules/d3-shape/src/arc.js","node_modules/d3-shape/src/array.js","node_modules/d3-shape/src/curve/linear.js","node_modules/d3-shape/src/point.js","node_modules/d3-shape/src/line.js","node_modules/d3-shape/src/area.js","node_modules/d3-shape/src/curve/radial.js","node_modules/d3-shape/src/lineRadial.js","node_modules/d3-shape/src/areaRadial.js","node_modules/d3-shape/src/noop.js","node_modules/d3-shape/src/curve/linearClosed.js","src/wc/utils/chart-theme.ts","src/wc/utils/chart-scene.ts","src/wc/components/Chart/Chart.css?tag=ds-chart&encapsulation=scoped","src/wc/components/Chart/Chart.tsx"],"sourcesContent":["export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(key);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof = number) {\n if (isNaN(p = +p)) return;\n numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));\n if (p <= 0) return minIndex(numbers);\n if (p >= 1) return maxIndex(numbers);\n var numbers,\n index = Uint32Array.from(values, (_, i) => i),\n j = numbers.length - 1,\n i = Math.floor(j * p);\n quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\n i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\n return i >= 0 ? i : -1;\n}\n","export default function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","import { bin as d3Bin, deviation, extent, quantileSorted, ticks } from 'd3-array';\nimport type { CurveFactory } from 'd3-shape';\n\nexport type ChartValue = string | number | Date;\nexport type ChartKey = string | number;\nexport type ChartDataIntent =\n | 'brand'\n | 'caution'\n | 'negative'\n | 'neutral'\n | 'positive'\n | 'warning';\n\nexport type ChartChannel<TDatum, TValue> =\n | Extract<keyof TDatum, string>\n | ((datum: TDatum, index: number, data: readonly TDatum[]) => TValue);\n\nexport type ChartVisual<TDatum, TValue> =\n | TValue\n | ((datum: TDatum, index: number, data: readonly TDatum[]) => TValue);\n\n/** Structural boundary accepted by the chart compiler for native D3 scales. */\nexport type ChartScale = ((value: ChartValue) => unknown) & {\n copy?: () => ChartScale;\n domain: (...values: unknown[]) => unknown;\n range: (...values: unknown[]) => unknown;\n bandwidth?: () => number;\n ticks?: (count?: number) => ChartValue[];\n tickFormat?: (count?: number) => (value: ChartValue) => string;\n nice?: (count?: number) => unknown;\n};\n\n/** A configured D3 scale or a zero-argument D3 scale factory. */\nexport type ChartScaleSource = ChartScale | (() => unknown);\n\nexport interface ChartTickOptions {\n count?: number;\n values?: readonly ChartValue[];\n format?: (value: ChartValue, locale: string) => string;\n /** Minimum measured gap between adjacent tick labels, in CSS pixels. */\n spacing?: number;\n /** Length of the tick stub extending away from the plot, in CSS pixels. */\n size?: number;\n /** Gap between the end of a tick stub and its label, in CSS pixels. */\n padding?: number;\n /** Rotation in degrees. Negative values rotate counter-clockwise. */\n rotate?: number;\n}\n\nexport interface ChartAxisPresentation {\n label?: string;\n /** Render the axis baseline. Defaults to true. */\n line?: boolean;\n ticks?: ChartTickOptions;\n}\n\nexport interface ChartAxisOptions {\n scale: ChartScaleSource;\n nice?: boolean;\n grid?: boolean;\n axis?: false | ChartAxisPresentation;\n}\n\nexport interface ChartMargin {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n}\n\nexport type ChartFocusMode =\n | 'none'\n | 'nearest'\n | 'nearest-x'\n | 'nearest-y'\n | 'group-x'\n | 'group-y';\n\nexport interface ChartPoint<TDatum = unknown> {\n key: ChartKey;\n sceneKey: string;\n markId: string;\n datum: TDatum;\n datumIndex: number;\n groupValue?: ChartValue;\n groupLabel?: string;\n xValue: ChartValue;\n yValue: ChartValue;\n /** Primary semantic value for polar, heatmap, and distribution marks. */\n value?: ChartValue;\n angleValue?: ChartValue;\n radiusValue?: ChartValue;\n x: number;\n y: number;\n color: string;\n}\n\nexport interface ChartTooltipItem {\n label: string;\n value: string;\n color?: string;\n}\n\nexport interface ChartTooltipContext<TDatum = unknown> {\n locale: string;\n primary: ChartPoint<TDatum>;\n points: readonly ChartPoint<TDatum>[];\n}\n\nexport interface ChartTooltipOptions<TDatum = unknown> {\n format?: (point: ChartPoint<TDatum>, locale: string) => string;\n formatGroupHeading?: (\n points: readonly ChartPoint<TDatum>[],\n locale: string,\n ) => string;\n formatGroupItem?: (\n point: ChartPoint<TDatum>,\n locale: string,\n ) => ChartTooltipItem;\n}\n\nexport type ChartTooltip<TDatum = unknown> = boolean | ChartTooltipOptions<TDatum>;\n\nexport interface ChartColorOptions {\n domain?: readonly ChartValue[];\n range?: readonly string[];\n}\n\nexport interface ChartBuildContext {\n width: number;\n height: number;\n}\n\nexport interface ChartCartesianCoordinate {\n type?: 'cartesian';\n}\n\nexport interface ChartPolarCoordinate {\n type: 'polar';\n /** Radians measured clockwise from twelve o'clock. */\n startAngle?: number;\n /** Radians measured clockwise from twelve o'clock. */\n endAngle?: number;\n /** Default inner radius as a fraction of the available radius. */\n innerRadius?: number;\n /** Outer radius as a fraction of the available radius. */\n outerRadius?: number;\n grid?: 'none' | 'polygon';\n}\n\nexport type ChartCoordinate = ChartCartesianCoordinate | ChartPolarCoordinate;\n\nexport interface ChartPolarAxisOptions {\n domain?: readonly ChartValue[];\n label?: string;\n ticks?: ChartTickOptions;\n grid?: boolean;\n}\n\nexport interface ChartCenterContent {\n value?: string;\n caption?: string;\n}\n\nexport interface ChartCenterOptions extends ChartCenterContent {\n /** Optional focused content. Authored content remains the default. */\n focused?: (point: ChartPoint, locale: string) => ChartCenterContent;\n}\n\nexport type ChartMarkKind =\n | 'polar'\n | 'line-y'\n | 'area-y'\n | 'bar-x'\n | 'bar-y'\n | 'box-y'\n | 'dot'\n | 'rule-x'\n | 'rule-y'\n | 'band-x'\n | 'band-y'\n | 'rect'\n | 'cell'\n | 'text'\n | 'arc'\n | 'radial-line'\n | 'radial-area'\n | 'radial-dot';\n\nexport interface ChartMark<TDatum = unknown> {\n kind: ChartMarkKind;\n data: readonly TDatum[];\n options: ChartMarkOptions<TDatum>;\n}\n\nexport interface ChartPolarContainerOptions {\n id?: string;\n marks: readonly ChartMark[];\n angle?: ChartPolarAxisOptions;\n radius?: ChartAxisOptions;\n /** Radians measured clockwise from twelve o'clock. */\n startAngle?: number;\n /** Radians measured clockwise from twelve o'clock. */\n endAngle?: number;\n innerRadius?: number;\n outerRadius?: number;\n grid?: 'none' | 'polygon';\n center?: ChartCenterOptions;\n}\n\nexport interface ChartBaseMarkOptions<TDatum> {\n id?: string;\n /** Exclude decorative layers from semantic focus while retaining rendering. */\n interactive?: boolean;\n key?: ChartChannel<TDatum, ChartKey>;\n z?: ChartChannel<TDatum, ChartValue | null | undefined>;\n color?: ChartChannel<TDatum, ChartValue | null | undefined>;\n value?: ChartChannel<TDatum, ChartValue | null | undefined>;\n fill?: ChartVisual<TDatum, string>;\n stroke?: ChartVisual<TDatum, string>;\n opacity?: ChartVisual<TDatum, number>;\n fillOpacity?: ChartVisual<TDatum, number>;\n strokeOpacity?: ChartVisual<TDatum, number>;\n strokeWidth?: ChartVisual<TDatum, number | string>;\n strokeDasharray?: ChartVisual<TDatum, string>;\n}\n\nexport interface ChartLineYOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, number | null | undefined>;\n curve?: CurveFactory;\n}\n\nexport interface ChartAreaYOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, number | null | undefined>;\n y1?: ChartChannel<TDatum, number | null | undefined>;\n y2?: ChartChannel<TDatum, number | null | undefined>;\n curve?: CurveFactory;\n}\n\nexport type ChartBarLayout = 'single' | 'grouped' | 'stacked';\n\nexport interface ChartBarOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, ChartValue | null | undefined>;\n x1?: ChartChannel<TDatum, number | null | undefined>;\n x2?: ChartChannel<TDatum, number | null | undefined>;\n y1?: ChartChannel<TDatum, number | null | undefined>;\n y2?: ChartChannel<TDatum, number | null | undefined>;\n layout?: ChartBarLayout;\n inset?: ChartVisual<TDatum, number>;\n radius?: ChartVisual<TDatum, number | string>;\n}\n\nexport interface ChartBoxYOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, number | null | undefined>;\n /** Tukey whisker multiplier. */\n whisker?: number;\n inset?: number;\n radius?: number | string;\n}\n\nexport interface ChartDotOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, ChartValue | null | undefined>;\n r?: ChartVisual<TDatum, number | string>;\n}\n\nexport interface ChartRuleOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, ChartValue | null | undefined>;\n}\n\nexport interface ChartBandOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x1?: ChartChannel<TDatum, number | null | undefined>;\n x2?: ChartChannel<TDatum, number | null | undefined>;\n y1?: ChartChannel<TDatum, number | null | undefined>;\n y2?: ChartChannel<TDatum, number | null | undefined>;\n}\n\nexport interface ChartRectOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x1?: ChartChannel<TDatum, number | null | undefined>;\n x2?: ChartChannel<TDatum, number | null | undefined>;\n y1?: ChartChannel<TDatum, number | null | undefined>;\n y2?: ChartChannel<TDatum, number | null | undefined>;\n radius?: ChartVisual<TDatum, number | string>;\n inset?: ChartVisual<TDatum, number>;\n}\n\nexport interface ChartCellOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, ChartValue | null | undefined>;\n intensity?: ChartChannel<TDatum, number | null | undefined>;\n intent?: ChartDataIntent;\n minimumOpacity?: number;\n maximumOpacity?: number;\n inset?: number;\n radius?: number | string;\n}\n\nexport interface ChartTextOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, ChartValue | null | undefined>;\n text?: ChartChannel<TDatum, string | number | null | undefined>;\n fontFamily?: ChartVisual<TDatum, string>;\n fontSize?: ChartVisual<TDatum, number | string>;\n fontWeight?: ChartVisual<TDatum, number | string>;\n textAnchor?: ChartVisual<TDatum, 'start' | 'middle' | 'end'>;\n dx?: ChartVisual<TDatum, number>;\n dy?: ChartVisual<TDatum, number>;\n}\n\nexport interface ChartArcOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n theta1?: ChartChannel<TDatum, number | null | undefined>;\n theta2?: ChartChannel<TDatum, number | null | undefined>;\n innerRadius?: ChartVisual<TDatum, number>;\n outerRadius?: ChartVisual<TDatum, number>;\n cornerRadius?: ChartVisual<TDatum, number>;\n padAngle?: ChartVisual<TDatum, number>;\n label?: ChartChannel<TDatum, string | null | undefined>;\n}\n\nexport interface ChartRadialOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n angle?: ChartChannel<TDatum, ChartValue | null | undefined>;\n radius?: ChartChannel<TDatum, number | null | undefined>;\n radius1?: ChartChannel<TDatum, number | null | undefined>;\n radius2?: ChartChannel<TDatum, number | null | undefined>;\n curve?: CurveFactory;\n r?: ChartVisual<TDatum, number | string>;\n}\n\nexport type ChartMarkOptions<TDatum> =\n | ChartLineYOptions<TDatum>\n | ChartAreaYOptions<TDatum>\n | ChartBarOptions<TDatum>\n | ChartBoxYOptions<TDatum>\n | ChartDotOptions<TDatum>\n | ChartRuleOptions<TDatum>\n | ChartBandOptions<TDatum>\n | ChartRectOptions<TDatum>\n | ChartCellOptions<TDatum>\n | ChartTextOptions<TDatum>\n | ChartArcOptions<TDatum>\n | ChartRadialOptions<TDatum>;\n\nexport interface ChartSpec<TDatum = unknown> {\n marks: readonly ChartMark<TDatum>[] | readonly ChartMark<unknown>[];\n coordinate?: ChartCoordinate;\n x?: ChartAxisOptions;\n y?: ChartAxisOptions;\n angle?: ChartPolarAxisOptions;\n radius?: ChartAxisOptions;\n center?: ChartCenterOptions;\n margin?: number | ChartMargin;\n guides?: boolean;\n /** Clip graphical marks to the solved plot rectangle. Defaults to true. */\n clip?: boolean;\n color?: ChartColorOptions;\n focus?: ChartFocusMode;\n tooltip?: ChartTooltip<TDatum>;\n maxFocusDistance?: number;\n}\n\nexport type ChartSpecBuilder<TDatum = unknown> = (\n context: ChartBuildContext,\n) => ChartSpec<TDatum>;\n\nexport interface ChartDefinition<TDatum = unknown> {\n chart: ChartSpec<TDatum> | ChartSpecBuilder<TDatum>;\n}\n\nexport interface NormalizedStackDatum<TDatum> {\n data: TDatum;\n group: ChartKey;\n series: ChartKey;\n value: number;\n proportion: number;\n}\n\nexport interface NormalizeStackOptions<TDatum> {\n group: ChartChannel<TDatum, ChartKey>;\n series: ChartChannel<TDatum, ChartKey>;\n value: ChartChannel<TDatum, number>;\n}\n\nexport interface ChartPieDatum<TDatum> {\n data: TDatum;\n index: number;\n key: ChartKey;\n label: string;\n value: number;\n theta1: number;\n theta2: number;\n}\n\nexport interface ChartPieOptions<TDatum> {\n value: ChartChannel<TDatum, number>;\n key?: ChartChannel<TDatum, ChartKey>;\n label?: ChartChannel<TDatum, string>;\n sort?: (a: TDatum, b: TDatum) => number;\n}\n\nexport interface ChartBinDatum<TDatum> {\n key: string;\n x1: number;\n x2: number;\n x: number;\n count: number;\n cumulative: number;\n rows: readonly TDatum[];\n}\n\nexport interface ChartBinOptions<TDatum> {\n value: ChartChannel<TDatum, number>;\n thresholds?: number | readonly number[];\n}\n\nexport interface ChartDensityDatum {\n key: string;\n x: number;\n density: number;\n}\n\nexport interface ChartDensityOptions<TDatum> {\n value: ChartChannel<TDatum, number>;\n samples?: number;\n bandwidth?: number;\n}\n\nexport function defineChart<TDatum>(\n chart: ChartSpec<TDatum> | ChartSpecBuilder<TDatum>,\n): ChartDefinition<TDatum> {\n return { chart };\n}\n\nfunction createMark<TDatum, TOptions extends ChartMarkOptions<TDatum>>(\n kind: ChartMarkKind,\n data: readonly TDatum[],\n options: TOptions,\n): ChartMark<TDatum> {\n return { kind, data, options };\n}\n\n/** Compose polar marks and guides inside the shared chart scene. */\nexport function polar(options: ChartPolarContainerOptions): ChartMark {\n return { kind: 'polar', data: [], options: options as unknown as ChartMarkOptions<unknown> };\n}\n\nconst identity = <TValue>(value: TValue): TValue => value;\n\nexport function lineY<TDatum>(data: readonly TDatum[], options: ChartLineYOptions<TDatum> = {}): ChartMark<TDatum> {\n return createMark('line-y', data, { x: options.x ?? ((_, index) => index), y: options.y ?? (identity as ChartChannel<TDatum, number>), ...options });\n}\n\nexport function areaY<TDatum>(data: readonly TDatum[], options: ChartAreaYOptions<TDatum> = {}): ChartMark<TDatum> {\n return createMark('area-y', data, { x: options.x ?? ((_, index) => index), y: options.y ?? (identity as ChartChannel<TDatum, number>), ...options });\n}\n\nexport function barY<TDatum>(data: readonly TDatum[], options: ChartBarOptions<TDatum> = {}): ChartMark<TDatum> {\n return createMark('bar-y', data, { x: options.x ?? ((_, index) => index), y: options.y ?? (identity as ChartChannel<TDatum, number>), ...options });\n}\n\nexport function barX<TDatum>(data: readonly TDatum[], options: ChartBarOptions<TDatum> = {}): ChartMark<TDatum> {\n return createMark('bar-x', data, { x: options.x ?? (identity as ChartChannel<TDatum, number>), y: options.y ?? ((_, index) => index), ...options });\n}\n\nexport function boxY<TDatum>(data: readonly TDatum[], options: ChartBoxYOptions<TDatum> = {}): ChartMark<TDatum> {\n return createMark('box-y', data, { x: options.x ?? (() => 'distribution'), y: options.y ?? (identity as ChartChannel<TDatum, number>), ...options });\n}\n\nexport function dot<TDatum>(data: readonly TDatum[], options: ChartDotOptions<TDatum> = {}): ChartMark<TDatum> {\n return createMark('dot', data, { x: options.x ?? ((_, index) => index), y: options.y ?? (identity as ChartChannel<TDatum, number>), ...options });\n}\n\nexport function ruleX<TDatum>(data: readonly TDatum[], options: ChartRuleOptions<TDatum> = {}): ChartMark<TDatum> {\n return createMark('rule-x', data, { x: options.x ?? (identity as ChartChannel<TDatum, ChartValue>), ...options });\n}\n\nexport function ruleY<TDatum>(data: readonly TDatum[], options: ChartRuleOptions<TDatum> = {}): ChartMark<TDatum> {\n return createMark('rule-y', data, { y: options.y ?? (identity as ChartChannel<TDatum, ChartValue>), ...options });\n}\n\nexport function bandX<TDatum>(data: readonly TDatum[], options: ChartBandOptions<TDatum>): ChartMark<TDatum> {\n return createMark('band-x', data, options);\n}\n\nexport function bandY<TDatum>(data: readonly TDatum[], options: ChartBandOptions<TDatum>): ChartMark<TDatum> {\n return createMark('band-y', data, options);\n}\n\nexport function rect<TDatum>(data: readonly TDatum[], options: ChartRectOptions<TDatum>): ChartMark<TDatum> {\n return createMark('rect', data, options);\n}\n\nexport function cell<TDatum>(data: readonly TDatum[], options: ChartCellOptions<TDatum>): ChartMark<TDatum> {\n return createMark('cell', data, options);\n}\n\nexport function textMark<TDatum>(data: readonly TDatum[], options: ChartTextOptions<TDatum> = {}): ChartMark<TDatum> {\n return createMark('text', data, { x: options.x ?? ((_, index) => index), y: options.y ?? ((_, index) => index), text: options.text ?? (identity as ChartChannel<TDatum, string>), ...options });\n}\n\nexport function arcMark<TDatum>(data: readonly TDatum[], options: ChartArcOptions<TDatum> = {}): ChartMark<TDatum> {\n return createMark('arc', data, { theta1: options.theta1 ?? ('theta1' as ChartChannel<TDatum, number>), theta2: options.theta2 ?? ('theta2' as ChartChannel<TDatum, number>), ...options });\n}\n\nexport function radialLine<TDatum>(data: readonly TDatum[], options: ChartRadialOptions<TDatum> = {}): ChartMark<TDatum> {\n return createMark('radial-line', data, { angle: options.angle ?? ((_, index) => index), radius: options.radius ?? (identity as ChartChannel<TDatum, number>), ...options });\n}\n\nexport function radialArea<TDatum>(data: readonly TDatum[], options: ChartRadialOptions<TDatum> = {}): ChartMark<TDatum> {\n return createMark('radial-area', data, { angle: options.angle ?? ((_, index) => index), radius: options.radius ?? (identity as ChartChannel<TDatum, number>), ...options });\n}\n\nexport function radialDot<TDatum>(data: readonly TDatum[], options: ChartRadialOptions<TDatum> = {}): ChartMark<TDatum> {\n return createMark('radial-dot', data, { angle: options.angle ?? ((_, index) => index), radius: options.radius ?? (identity as ChartChannel<TDatum, number>), ...options });\n}\n\nexport function channelValue<TDatum, TValue>(\n datum: TDatum,\n index: number,\n data: readonly TDatum[],\n channel: ChartChannel<TDatum, TValue> | undefined,\n): TValue | undefined {\n if (channel === undefined) return undefined;\n if (typeof channel === 'function') return channel(datum, index, data);\n if (datum == null || typeof datum !== 'object') return undefined;\n return (datum as Record<string, TValue>)[channel];\n}\n\nexport function visualValue<TDatum, TValue>(\n datum: TDatum,\n index: number,\n data: readonly TDatum[],\n value: ChartVisual<TDatum, TValue> | undefined,\n fallback: TValue,\n): TValue {\n return typeof value === 'function'\n ? (value as (datum: TDatum, index: number, data: readonly TDatum[]) => TValue)(datum, index, data)\n : (value ?? fallback);\n}\n\nexport function normalizeStack<TDatum>(\n data: readonly TDatum[],\n options: NormalizeStackOptions<TDatum>,\n): NormalizedStackDatum<TDatum>[] {\n const rows = data.map((datum, index) => {\n const group = channelValue(datum, index, data, options.group);\n const series = channelValue(datum, index, data, options.series);\n const value = channelValue(datum, index, data, options.value);\n if (group === undefined || series === undefined) throw new TypeError('normalizeStack requires a group and series key for every row.');\n if (typeof value !== 'number' || !Number.isFinite(value) || value < 0) throw new RangeError('normalizeStack values must be finite, non-negative numbers.');\n return { data: datum, group, series, value };\n });\n const totals = new Map<string, number>();\n rows.forEach(row => totals.set(chartValueKey(row.group), (totals.get(chartValueKey(row.group)) ?? 0) + row.value));\n return rows.map(row => ({ ...row, proportion: (totals.get(chartValueKey(row.group)) ?? 0) > 0 ? row.value / (totals.get(chartValueKey(row.group)) as number) : 0 }));\n}\n\nexport function pieLayout<TDatum>(data: readonly TDatum[], options: ChartPieOptions<TDatum>): ChartPieDatum<TDatum>[] {\n const ordered = data.map((datum, index) => ({ datum, index }));\n if (options.sort) ordered.sort((a, b) => options.sort?.(a.datum, b.datum) ?? 0);\n const values = ordered.map(({ datum, index }) => {\n const value = channelValue(datum, index, data, options.value);\n return typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : 0;\n });\n const total = values.reduce((sum, value) => sum + value, 0);\n let position = 0;\n return ordered.flatMap(({ datum, index }, orderedIndex) => {\n const value = values[orderedIndex] ?? 0;\n if (!(value > 0) || !(total > 0)) return [];\n const theta1 = position;\n position += value / total;\n const key = channelValue(datum, index, data, options.key) ?? index;\n const label = channelValue(datum, index, data, options.label) ?? String(key);\n return [{ data: datum, index, key, label, value, theta1, theta2: position }];\n });\n}\n\nexport function binX<TDatum>(data: readonly TDatum[], options: ChartBinOptions<TDatum>): ChartBinDatum<TDatum>[] {\n const generator = d3Bin<TDatum, number>().value((datum, index, rows) => channelValue(datum, index, Array.from(rows), options.value) ?? Number.NaN);\n if (typeof options.thresholds === 'number') generator.thresholds(options.thresholds);\n else if (options.thresholds !== undefined) generator.thresholds([...options.thresholds]);\n const bins = generator(data as TDatum[]);\n let cumulative = 0;\n return bins.flatMap(bin => {\n const x1 = bin.x0;\n const x2 = bin.x1;\n if (x1 === undefined || x2 === undefined) return [];\n cumulative += bin.length;\n return [{ key: `bin:${x1}:${x2}`, x1, x2, x: (x1 + x2) / 2, count: bin.length, cumulative, rows: [...bin] }];\n });\n}\n\nexport function cumulativeBins<TDatum>(bins: readonly ChartBinDatum<TDatum>[]): ChartBinDatum<TDatum>[] {\n let cumulative = 0;\n return bins.map(bin => ({ ...bin, cumulative: (cumulative += bin.count) }));\n}\n\nexport function densityX<TDatum>(data: readonly TDatum[], options: ChartDensityOptions<TDatum>): ChartDensityDatum[] {\n const values = data.map((datum, index) => channelValue(datum, index, data, options.value)).filter((value): value is number => typeof value === 'number' && Number.isFinite(value)).sort((a, b) => a - b);\n if (values.length === 0) return [];\n const [minimum = 0, maximum = minimum + 1] = extent(values);\n const span = Math.max(Number.EPSILON, maximum - minimum);\n const sampleCount = Math.max(8, options.samples ?? 48);\n const sampleValues = ticks(minimum, maximum, sampleCount);\n const sigma = deviation(values) ?? span / 6;\n const bandwidth = Math.max(Number.EPSILON, options.bandwidth ?? 1.06 * sigma * Math.pow(values.length, -0.2));\n const normalizer = 1 / (Math.sqrt(2 * Math.PI) * bandwidth * values.length);\n return sampleValues.map(x => ({\n key: `density:${x}`,\n x,\n density: values.reduce((sum, value) => {\n const u = (x - value) / bandwidth;\n return sum + Math.exp(-0.5 * u * u);\n }, 0) * normalizer,\n }));\n}\n\nexport function boxStatistics(values: readonly number[], whisker = 1.5) {\n const sorted = values.filter(Number.isFinite).sort((a, b) => a - b);\n if (sorted.length === 0) return undefined;\n const q1 = quantileSorted(sorted, 0.25) as number;\n const median = quantileSorted(sorted, 0.5) as number;\n const q3 = quantileSorted(sorted, 0.75) as number;\n const iqr = q3 - q1;\n const lowerFence = q1 - whisker * iqr;\n const upperFence = q3 + whisker * iqr;\n const lower = sorted.find(value => value >= lowerFence) ?? sorted[0];\n const upper = [...sorted].reverse().find(value => value <= upperFence) ?? sorted[sorted.length - 1];\n return { q1, median, q3, lower, upper, outliers: sorted.filter(value => value < lower || value > upper) };\n}\n\nexport function chartValueKey(value: unknown): string {\n if (value instanceof Date) return `date:${value.getTime()}`;\n return `${typeof value}:${String(value)}`;\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n r0 = 0,\n r1 = 1,\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = r1 < r0,\n start = reverse ? r1 : r0,\n stop = reverse ? r0 : r1;\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n };\n\n scale.rangeRound = function(_) {\n return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band(domain(), [r0, r1])\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if (!isFinite(x) || x === 0) return null; // NaN, ±Infinity, ±0\n var i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\"), coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return prefixExponent = undefined, x.toPrecision(p);\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier, options) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = (options && options.prefix !== undefined ? options.prefix : \"\") + (symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\"),\n suffix = (symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\") + (options && options.suffix !== undefined ? options.suffix : \"\");\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" && !isNaN(value) && prefixExponent !== undefined ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier), {suffix: prefixes[8 + e / 3]});\n return function(value) {\n return f(k * value);\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n","import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it’s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n var x1 = null,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(area);\n\n x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n function area(data) {\n var i,\n j,\n k,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","import curveLinear from \"./linear.js\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial.js\";\nimport line from \"./line.js\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial.js\";\nimport area from \"./area.js\";\nimport {lineRadial} from \"./lineRadial.js\";\n\nexport default function() {\n var a = area().curve(curveRadialLinear),\n c = a.curve,\n x0 = a.lineX0,\n x1 = a.lineX1,\n y0 = a.lineY0,\n y1 = a.lineY1;\n\n a.angle = a.x, delete a.x;\n a.startAngle = a.x0, delete a.x0;\n a.endAngle = a.x1, delete a.x1;\n a.radius = a.y, delete a.y;\n a.innerRadius = a.y0, delete a.y0;\n a.outerRadius = a.y1, delete a.y1;\n a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;\n a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;\n a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;\n a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;\n\n a.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return a;\n}\n","export default function() {}\n","import noop from \"../noop.js\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","import type { ChartDataIntent } from './chart-grammar';\nimport { resolveCssLengthPx } from './resolve-css-length-px';\nimport { TOKEN_DEFAULTS } from './token-defaults';\n\n/** Private, renderer-neutral visual defaults resolved by the chart compiler. */\nexport interface ChartTheme {\n seriesStrokeWidth: string;\n ruleStrokeWidth: string;\n gridStrokeWidth: string;\n barRadius: string;\n polarCornerRadius: number;\n polarLabelGap: number;\n dotRadius: number | string;\n dotHaloWidth: number | string;\n focusDotRadius: number | string;\n areaOpacity: number;\n boxFillOpacity: number;\n boxMaxWidth: number;\n heatmapMinimumOpacity: number;\n heatmapMaximumOpacity: number;\n cellGap: number;\n stackGap: number;\n donutGap: number;\n annotationFillOpacity: number;\n}\n\nexport const defaultChartTheme: ChartTheme = {\n seriesStrokeWidth: 'var(--dimension-stroke-width-025)',\n ruleStrokeWidth: 'var(--dimension-stroke-width-012)',\n gridStrokeWidth: 'var(--dimension-stroke-width-012)',\n barRadius: 'var(--dimension-radius-025)',\n polarCornerRadius: 2,\n polarLabelGap: 16,\n dotRadius: 'var(--dimension-stroke-width-025)',\n dotHaloWidth: 'var(--dimension-stroke-width-012)',\n focusDotRadius: 'var(--dimension-stroke-width-037)',\n areaOpacity: 0.25,\n boxFillOpacity: 0.25,\n boxMaxWidth: 64,\n heatmapMinimumOpacity: 0.25,\n heatmapMaximumOpacity: 1,\n cellGap: 1,\n stackGap: 1,\n donutGap: 1,\n annotationFillOpacity: 0.25,\n};\n\n/** Resolve chart geometry and opacity recipes from the current TokoMo theme. */\nexport function resolveChartTheme(element?: Element): ChartTheme {\n const style = element && typeof getComputedStyle === 'function'\n ? getComputedStyle(element)\n : undefined;\n const lowOpacity = Number.parseFloat(\n style?.getPropertyValue('--effect-opacity-low') ?? '',\n );\n const resolvedLowOpacity = Number.isFinite(lowOpacity)\n ? lowOpacity\n : defaultChartTheme.heatmapMinimumOpacity;\n return {\n ...defaultChartTheme,\n polarCornerRadius: resolveCssLengthPx(TOKEN_DEFAULTS.radius025, 2),\n polarLabelGap: resolveCssLengthPx(TOKEN_DEFAULTS.space200, 16),\n dotRadius: resolveCssLengthPx(TOKEN_DEFAULTS.strokeWidth025, 2),\n dotHaloWidth: resolveCssLengthPx(TOKEN_DEFAULTS.strokeWidth012, 1),\n focusDotRadius: resolveCssLengthPx(TOKEN_DEFAULTS.strokeWidth037, 3),\n stackGap: resolveCssLengthPx(TOKEN_DEFAULTS.strokeWidth012, 1),\n donutGap: resolveCssLengthPx(TOKEN_DEFAULTS.strokeWidth012, 1),\n areaOpacity: resolvedLowOpacity,\n boxFillOpacity: resolvedLowOpacity,\n boxMaxWidth: resolveCssLengthPx(TOKEN_DEFAULTS.size800, 64),\n heatmapMinimumOpacity: resolvedLowOpacity,\n };\n}\n\nexport function chartIntentColor(intent: ChartDataIntent = 'brand'): string {\n return `var(--color-data-intent-${intent})`;\n}\n","import { scaleBand, scaleLinear } from 'd3-scale';\nimport {\n arc as arcShape,\n area as areaShape,\n areaRadial,\n curveLinearClosed,\n line as lineShape,\n lineRadial,\n} from 'd3-shape';\nimport { categoryColor } from './chart-colors';\nimport {\n boxStatistics,\n channelValue,\n chartValueKey,\n visualValue,\n type ChartAxisOptions,\n type ChartBarOptions,\n type ChartBoxYOptions,\n type ChartCellOptions,\n type ChartCenterOptions,\n type ChartDefinition,\n type ChartKey,\n type ChartMark,\n type ChartPoint,\n type ChartPolarContainerOptions,\n type ChartPolarCoordinate,\n type ChartRectOptions,\n type ChartScale,\n type ChartSpec,\n type ChartValue,\n} from './chart-grammar';\nimport {\n chartIntentColor,\n defaultChartTheme,\n type ChartTheme,\n} from './chart-theme';\n\nexport interface ChartTextMeasurement {\n width: number;\n height: number;\n}\n\nexport type ChartTextMeasurer = (text: string) => ChartTextMeasurement;\n\nexport interface ChartBounds {\n top: number;\n right: number;\n bottom: number;\n left: number;\n width: number;\n height: number;\n}\n\ninterface ChartSceneStyle {\n fill?: string;\n stroke?: string;\n opacity?: number;\n fillOpacity?: number;\n strokeOpacity?: number;\n strokeWidth?: number | string;\n strokeDasharray?: string;\n radius?: number | string;\n fontFamily?: string;\n fontSize?: number | string;\n fontWeight?: number | string;\n textAnchor?: 'start' | 'middle' | 'end';\n}\n\ninterface ChartSceneBaseNode {\n key: string;\n markId: string;\n style: ChartSceneStyle;\n className?: string;\n /** Keep discrete nodes visible when their center lies on a plot boundary. */\n clipToPlot?: boolean;\n}\n\nexport interface ChartScenePath extends ChartSceneBaseNode {\n type: 'path';\n d: string;\n transform?: string;\n}\n\nexport interface ChartSceneRect extends ChartSceneBaseNode {\n type: 'rect';\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface ChartSceneCircle extends ChartSceneBaseNode {\n type: 'circle';\n x: number;\n y: number;\n radius: number | string;\n}\n\nexport interface ChartSceneLine extends ChartSceneBaseNode {\n type: 'line';\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n}\n\nexport interface ChartSceneText extends ChartSceneBaseNode {\n type: 'text';\n x: number;\n y: number;\n text: string;\n dx?: number;\n dy?: number;\n rotate?: number;\n dominantBaseline?: 'auto' | 'middle' | 'hanging';\n measure?: boolean;\n}\n\nexport type ChartSceneNode =\n | ChartScenePath\n | ChartSceneRect\n | ChartSceneCircle\n | ChartSceneLine\n | ChartSceneText;\n\nexport interface ChartSceneTick {\n key: string;\n value: ChartValue;\n label: string;\n position: number;\n boundary: boolean;\n labelVisible: boolean;\n}\n\nexport interface ChartSceneAxis {\n label?: string;\n ticks: ChartSceneTick[];\n grid: boolean;\n rotate: number;\n line: boolean;\n tickSize: number;\n tickPadding: number;\n}\n\nexport interface ChartScene {\n width: number;\n height: number;\n coordinate: 'cartesian' | 'polar';\n plot: ChartBounds;\n xAxis: ChartSceneAxis;\n yAxis: ChartSceneAxis;\n guides: ChartSceneNode[];\n nodes: ChartSceneNode[];\n points: ChartPoint[];\n center?: ChartCenterOptions;\n focus: NonNullable<ChartSpec['focus']>;\n maxFocusDistance?: number;\n tooltip: ChartSpec['tooltip'];\n clip: boolean;\n focusDotCircleRadius: number | string;\n focusDotHaloWidth: number | string;\n focusDotPointKeys: readonly string[];\n arcHitRegions: readonly ChartArcHitRegion[];\n}\n\ninterface ChartArcHitRegion {\n sceneKey: string;\n centerX: number;\n centerY: number;\n innerRadius: number;\n outerRadius: number;\n startAngle: number;\n endAngle: number;\n}\n\ninterface Observation {\n datum: unknown;\n index: number;\n datumKey: ChartKey;\n sceneKey: string;\n markId: string;\n x?: ChartValue;\n y?: ChartValue;\n x1?: number;\n x2?: number;\n y1?: number;\n y2?: number;\n angle?: ChartValue;\n radius?: number;\n radius1?: number;\n radius2?: number;\n theta1?: number;\n theta2?: number;\n intensity?: number;\n value?: ChartValue;\n z?: ChartValue;\n color?: ChartValue;\n text?: string;\n label?: string;\n source: readonly unknown[];\n}\n\ninterface ScaleResolution {\n scale: ChartScale;\n domain: ChartValue[];\n}\n\nconst DEFAULT_MARGIN = { top: 16, right: 16, bottom: 32, left: 40 };\nconst POLAR_MARGIN = 24;\nconst DEFAULT_TICK_SPACING = 8;\nconst DEFAULT_TICK_SIZE = 4;\nconst DEFAULT_TICK_PADDING = 4;\nconst EMPTY_AXIS: ChartSceneAxis = { ticks: [], grid: false, rotate: 0, line: false, tickSize: 0, tickPadding: 0 };\n\nconst finiteNumber = (value: unknown): value is number =>\n typeof value === 'number' && Number.isFinite(value);\n\nconst validValue = (value: unknown): value is ChartValue =>\n value instanceof Date\n ? Number.isFinite(value.getTime())\n : typeof value === 'string' || finiteNumber(value);\n\nconst numericValue = (value: ChartValue): number =>\n value instanceof Date ? value.getTime() : Number(value);\n\nconst distinct = (values: readonly ChartValue[]): ChartValue[] => {\n const seen = new Set<string>();\n return values.filter(value => {\n const key = chartValueKey(value);\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n};\n\nfunction resolveSpec(definition: ChartDefinition, width: number, height: number): ChartSpec {\n const chart = definition.chart;\n return typeof chart === 'function' ? chart({ width, height }) : chart;\n}\n\nfunction normalizeCoordinateContainers(spec: ChartSpec): ChartSpec {\n const container = (spec.marks as readonly ChartMark[]).find(mark => mark.kind === 'polar');\n if (!container) return spec;\n const options = container.options as unknown as ChartPolarContainerOptions;\n return {\n ...spec,\n marks: options.marks,\n coordinate: {\n type: 'polar',\n startAngle: options.startAngle,\n endAngle: options.endAngle,\n innerRadius: options.innerRadius,\n outerRadius: options.outerRadius,\n grid: options.grid,\n },\n angle: options.angle,\n radius: options.radius,\n center: spec.center ?? options.center,\n };\n}\n\nfunction resolveMargin(spec: ChartSpec, polar = false): typeof DEFAULT_MARGIN {\n const defaults = polar\n ? { top: POLAR_MARGIN, right: POLAR_MARGIN, bottom: POLAR_MARGIN, left: POLAR_MARGIN }\n : DEFAULT_MARGIN;\n if (typeof spec.margin === 'number') {\n return { top: spec.margin, right: spec.margin, bottom: spec.margin, left: spec.margin };\n }\n return { ...defaults, ...spec.margin };\n}\n\nfunction developmentWarning(message: string): void {\n const browserDevelopment =\n typeof location !== 'undefined' &&\n (location.hostname === 'localhost' || location.hostname === '127.0.0.1');\n const nodeProcess = (globalThis as typeof globalThis & { process?: { env?: { NODE_ENV?: string } } }).process;\n const nodeDevelopment = nodeProcess !== undefined && nodeProcess.env?.NODE_ENV !== 'production';\n if (typeof console !== 'undefined' && (browserDevelopment || nodeDevelopment)) console.warn(message);\n}\n\nfunction positionalKey(observation: Omit<Observation, 'datumKey' | 'sceneKey'>): string | undefined {\n const coordinates = [\n observation.x,\n observation.y,\n observation.angle,\n observation.radius,\n observation.theta1,\n observation.theta2,\n observation.z,\n ]\n .filter(validValue)\n .map(chartValueKey);\n return coordinates.length > 0 ? coordinates.join('|') : undefined;\n}\n\nfunction inferDatumKey(\n observation: Omit<Observation, 'datumKey' | 'sceneKey'>,\n mark: ChartMark,\n uniqueIds: ReadonlySet<ChartKey>,\n uniquePositions: ReadonlySet<string>,\n): ChartKey {\n const explicit = channelValue(observation.datum, observation.index, observation.source, mark.options.key);\n if (explicit !== undefined && explicit !== null) return explicit;\n if (observation.datum && typeof observation.datum === 'object') {\n const id = (observation.datum as { id?: unknown }).id;\n if ((typeof id === 'string' || typeof id === 'number') && uniqueIds.has(id)) return id;\n }\n const position = positionalKey(observation);\n if (position && uniquePositions.has(position)) return position;\n developmentWarning(`[ds-chart] ${observation.markId} is using row index ${observation.index} as its datum key. Author a key channel for stable focus.`);\n return observation.index;\n}\n\nfunction uniqueValues<TValue>(values: readonly TValue[]): Set<TValue> {\n const counts = new Map<TValue, number>();\n values.forEach(value => counts.set(value, (counts.get(value) ?? 0) + 1));\n return new Set([...counts].filter(([, count]) => count === 1).map(([value]) => value));\n}\n\nfunction observationsForMark(mark: ChartMark, markIndex: number): Observation[] {\n const source = mark.data as readonly unknown[];\n const markId = mark.options.id ?? `${mark.kind}-${markIndex}`;\n const bases = source.map((datum, index) => {\n const options = mark.options;\n const read = <TValue>(name: string): TValue | undefined =>\n name in options\n ? channelValue(datum, index, source, (options as Record<string, unknown>)[name] as never)\n : undefined;\n const x = read<ChartValue>('x');\n const y = read<ChartValue>('y');\n const angle = read<ChartValue>('angle');\n const z = channelValue(datum, index, source, options.z);\n const color = channelValue(datum, index, source, options.color);\n const value = channelValue(datum, index, source, options.value);\n return {\n datum,\n index,\n markId,\n source,\n x: validValue(x) ? x : undefined,\n y: validValue(y) ? y : undefined,\n x1: read<number>('x1'),\n x2: read<number>('x2'),\n y1: read<number>('y1'),\n y2: read<number>('y2'),\n angle: validValue(angle) ? angle : undefined,\n radius: read<number>('radius'),\n radius1: read<number>('radius1'),\n radius2: read<number>('radius2'),\n theta1: read<number>('theta1'),\n theta2: read<number>('theta2'),\n intensity: read<number>('intensity'),\n value: validValue(value) ? value : undefined,\n z: validValue(z) ? z : undefined,\n color: validValue(color) ? color : undefined,\n text: 'text' in options ? String(read<string | number>('text') ?? '') : undefined,\n label: 'label' in options ? String(read<string>('label') ?? '') : undefined,\n };\n });\n const ids = bases\n .map(base => base.datum && typeof base.datum === 'object' ? (base.datum as { id?: unknown }).id : undefined)\n .filter((id): id is ChartKey => typeof id === 'string' || typeof id === 'number');\n const uniqueIds = uniqueValues(ids);\n const uniquePositions = uniqueValues(bases.map(positionalKey).filter((key): key is string => key !== undefined));\n return bases.map(base => {\n const datumKey = inferDatumKey(base, mark, uniqueIds, uniquePositions);\n return { ...base, datumKey, sceneKey: `${markId}:${chartValueKey(datumKey)}` };\n });\n}\n\nfunction configuredScale(source: ChartAxisOptions['scale']): { scale: ChartScale; configured: boolean } {\n const candidate = source as ChartScale;\n if (typeof candidate.domain === 'function' && typeof candidate.range === 'function') return { scale: candidate.copy?.() ?? candidate, configured: true };\n const scale = (source as () => unknown)() as ChartScale;\n if (!scale || typeof scale.domain !== 'function' || typeof scale.range !== 'function') throw new TypeError('Chart scales must be native D3 scale factories or configured scale instances.');\n return { scale, configured: false };\n}\n\nfunction inferDomain(values: readonly ChartValue[], includeZero: boolean): ChartValue[] {\n const unique = distinct(values);\n if (unique.length === 0) return [0, 1];\n if (unique.some(value => typeof value === 'string')) return unique;\n const dates = unique.every(value => value instanceof Date);\n const numeric = unique.map(numericValue);\n if (includeZero) numeric.push(0);\n let minimum = Math.min(...numeric);\n let maximum = Math.max(...numeric);\n if (minimum === maximum) {\n const padding = Math.abs(minimum) * 0.1 || 1;\n minimum -= padding;\n maximum += padding;\n }\n return dates ? [new Date(minimum), new Date(maximum)] : [minimum, maximum];\n}\n\nfunction resolveScale(options: ChartAxisOptions, values: readonly ChartValue[], range: [number, number], includeZero: boolean): ScaleResolution {\n const resolved = configuredScale(options.scale);\n const existingDomain = (resolved.scale.domain() as ChartValue[]) ?? [];\n const domain = resolved.configured && existingDomain.length > 0 ? existingDomain : inferDomain(values, includeZero);\n resolved.scale.domain(domain);\n if (options.nice && resolved.scale.nice) resolved.scale.nice();\n resolved.scale.range(range);\n return { scale: resolved.scale, domain: (resolved.scale.domain() as ChartValue[]) ?? domain };\n}\n\nfunction scalePosition(resolution: ScaleResolution, value: ChartValue): number | undefined {\n const result = resolution.scale(value);\n if (!finiteNumber(result)) return undefined;\n return result + (resolution.scale.bandwidth?.() ?? 0) / 2;\n}\n\nfunction formatTick(value: ChartValue, locale: string): string {\n if (value instanceof Date) return new Intl.DateTimeFormat(locale, { month: 'short', day: 'numeric' }).format(value);\n if (typeof value === 'number') return new Intl.NumberFormat(locale, { maximumFractionDigits: 2 }).format(value);\n return value;\n}\n\nfunction tickValues(axis: ChartAxisOptions, resolution: ScaleResolution, width: number): ChartValue[] {\n const requested = axis.axis === false ? undefined : axis.axis?.ticks?.values;\n if (requested) return [...requested];\n const count = axis.axis === false ? 0 : axis.axis?.ticks?.count ?? Math.max(2, Math.floor(width / 80));\n return resolution.scale.ticks ? resolution.scale.ticks(count) : resolution.domain;\n}\n\nfunction thinTicks(ticks: ChartSceneTick[], horizontal: boolean, measurer: ChartTextMeasurer, spacing: number): ChartSceneTick[] {\n if (ticks.length <= 2) return ticks.map(tick => ({ ...tick, labelVisible: true }));\n const kept: ChartSceneTick[] = [];\n let previousEnd = Number.NEGATIVE_INFINITY;\n ticks.forEach((tick, index) => {\n const boundary = index === 0 || index === ticks.length - 1;\n const measurement = measurer(tick.label);\n const extent = horizontal ? measurement.width : measurement.height;\n const start = tick.position - extent / 2;\n const end = tick.position + extent / 2;\n if (boundary || start >= previousEnd + spacing) {\n kept.push({ ...tick, boundary, labelVisible: true });\n previousEnd = end;\n }\n });\n const last = ticks[ticks.length - 1];\n if (!kept.some(tick => tick.key === last.key)) {\n while (kept.length > 1) {\n const candidate = kept[kept.length - 1];\n const candidateSize = horizontal ? measurer(candidate.label).width : measurer(candidate.label).height;\n const lastSize = horizontal ? measurer(last.label).width : measurer(last.label).height;\n if (candidate.position + candidateSize / 2 + spacing <= last.position - lastSize / 2) break;\n kept.pop();\n }\n kept.push({ ...last, boundary: true, labelVisible: true });\n }\n const visible = new Set(kept.map(tick => tick.key));\n return ticks.map(tick => ({ ...tick, labelVisible: visible.has(tick.key) }));\n}\n\nfunction sceneAxis(axis: ChartAxisOptions, resolution: ScaleResolution, locale: string, length: number, horizontal: boolean, measurer: ChartTextMeasurer): ChartSceneAxis {\n if (axis.axis === false) return { ...EMPTY_AXIS };\n const format = axis.axis?.ticks?.format;\n const ticksForAxis = tickValues(axis, resolution, length)\n .map((value, index, all) => ({\n key: chartValueKey(value),\n value,\n label: format ? format(value, locale) : formatTick(value, locale),\n position: scalePosition(resolution, value) ?? 0,\n boundary: index === 0 || index === all.length - 1,\n labelVisible: true,\n }))\n .filter(tick => Number.isFinite(tick.position));\n return {\n label: axis.axis?.label,\n ticks: thinTicks(ticksForAxis, horizontal, measurer, axis.axis?.ticks?.spacing ?? DEFAULT_TICK_SPACING),\n grid: axis.grid ?? false,\n rotate: axis.axis?.ticks?.rotate ?? 0,\n line: axis.axis?.line ?? true,\n tickSize: axis.axis?.ticks?.size ?? DEFAULT_TICK_SIZE,\n tickPadding: axis.axis?.ticks?.padding ?? DEFAULT_TICK_PADDING,\n };\n}\n\nfunction rotatedMeasurement(measurement: ChartTextMeasurement, degrees: number): ChartTextMeasurement {\n if (!degrees) return measurement;\n const radians = Math.abs(degrees) * Math.PI / 180;\n const cosine = Math.abs(Math.cos(radians));\n const sine = Math.abs(Math.sin(radians));\n return {\n width: measurement.width * cosine + measurement.height * sine,\n height: measurement.width * sine + measurement.height * cosine,\n };\n}\n\nfunction plotFor(width: number, height: number, margin: typeof DEFAULT_MARGIN): ChartBounds {\n const left = Math.min(width, Math.max(0, margin.left));\n const top = Math.min(height, Math.max(0, margin.top));\n const right = Math.max(left, width - Math.max(0, margin.right));\n const bottom = Math.max(top, height - Math.max(0, margin.bottom));\n return { top, right, bottom, left, width: right - left, height: bottom - top };\n}\n\nfunction solveCartesianMargins(\n width: number,\n height: number,\n requested: typeof DEFAULT_MARGIN,\n xAxis: ChartSceneAxis,\n yAxis: ChartSceneAxis,\n plot: ChartBounds,\n measurer: ChartTextMeasurer,\n): typeof DEFAULT_MARGIN {\n const visibleX = xAxis.ticks.filter(tick => tick.labelVisible);\n const visibleY = yAxis.ticks.filter(tick => tick.labelVisible);\n const xMeasurements = visibleX.map(tick => ({\n tick,\n measurement: rotatedMeasurement(measurer(tick.label), xAxis.rotate),\n }));\n const yMeasurements = visibleY.map(tick => ({ tick, measurement: measurer(tick.label) }));\n const widestY = Math.max(0, ...yMeasurements.map(item => item.measurement.width));\n const tallestY = Math.max(0, ...yMeasurements.map(item => item.measurement.height));\n const tallestX = Math.max(0, ...xMeasurements.map(item => item.measurement.height));\n let left = Math.max(requested.left, yAxis.ticks.length > 0 ? yAxis.tickSize + yAxis.tickPadding + widestY + (yAxis.label ? 18 : 0) : 0);\n let right = requested.right;\n let top = Math.max(requested.top, tallestY / 2);\n let bottom = Math.max(requested.bottom, xAxis.ticks.length > 0 ? xAxis.tickSize + xAxis.tickPadding + tallestX + (xAxis.label ? 18 : 0) : 0);\n xMeasurements.forEach(({ tick, measurement }) => {\n left = Math.max(left, measurement.width / 2 - (tick.position - plot.left));\n right = Math.max(right, measurement.width / 2 - (plot.right - tick.position));\n });\n yMeasurements.forEach(({ tick, measurement }) => {\n top = Math.max(top, measurement.height / 2 - (tick.position - plot.top));\n bottom = Math.max(bottom, measurement.height / 2 - (plot.bottom - tick.position));\n });\n return { top, right, bottom, left };\n}\n\nfunction styleFor(observation: Observation, mark: ChartMark, color: string, defaults: ChartSceneStyle): ChartSceneStyle {\n const { datum, index, source } = observation;\n const options = mark.options;\n return {\n ...defaults,\n fill: visualValue(datum, index, source, options.fill, defaults.fill ?? color),\n stroke: visualValue(datum, index, source, options.stroke, defaults.stroke ?? color),\n opacity: visualValue(datum, index, source, options.opacity, defaults.opacity ?? 1),\n fillOpacity: visualValue(datum, index, source, options.fillOpacity, defaults.fillOpacity ?? 1),\n strokeOpacity: visualValue(datum, index, source, options.strokeOpacity, defaults.strokeOpacity ?? 1),\n strokeWidth: visualValue(datum, index, source, options.strokeWidth, defaults.strokeWidth ?? defaultChartTheme.seriesStrokeWidth),\n strokeDasharray: visualValue(datum, index, source, options.strokeDasharray, defaults.strokeDasharray ?? ''),\n };\n}\n\nfunction dotCircleRadius(coreRadius: number | string, haloWidth: number | string): number | string {\n if (typeof coreRadius === 'number' && typeof haloWidth === 'number') {\n return coreRadius + haloWidth / 2;\n }\n return coreRadius;\n}\n\nfunction groupObservations(observations: Observation[]): Observation[][] {\n const groups = new Map<string, Observation[]>();\n observations.forEach(observation => {\n const key = chartValueKey(observation.z ?? observation.color ?? 'series');\n const group = groups.get(key) ?? [];\n group.push(observation);\n groups.set(key, group);\n });\n return [...groups.values()];\n}\n\nfunction pointFor(observation: Observation, x: number, y: number, color: string, overrides: Partial<ChartPoint> = {}): ChartPoint {\n return {\n key: observation.datumKey,\n sceneKey: observation.sceneKey,\n markId: observation.markId,\n datum: observation.datum,\n datumIndex: observation.index,\n groupValue: observation.z,\n groupLabel: observation.z === undefined ? observation.label : String(observation.z),\n xValue: observation.x ?? observation.angle ?? observation.label ?? x,\n yValue: observation.y ?? observation.radius ?? observation.value ?? y,\n value: observation.value ?? observation.y ?? observation.radius ?? observation.intensity,\n angleValue: observation.angle,\n radiusValue: observation.radius,\n x,\n y,\n color,\n ...overrides,\n };\n}\n\nfunction axisValues(marks: readonly ChartMark[], observations: Observation[][], axis: 'x' | 'y'): { values: ChartValue[]; includeZero: boolean } {\n const values: ChartValue[] = [];\n let includeZero = false;\n marks.forEach((mark, index) => {\n const relevant = observations[index];\n relevant.forEach(observation => {\n const value = observation[axis];\n if (validValue(value)) values.push(value);\n const start = axis === 'x' ? observation.x1 : observation.y1;\n const end = axis === 'x' ? observation.x2 : observation.y2;\n if (finiteNumber(start)) values.push(start);\n if (finiteNumber(end)) values.push(end);\n });\n if ((axis === 'y' && mark.kind === 'bar-y') || (axis === 'x' && mark.kind === 'bar-x')) {\n includeZero = true;\n if ('layout' in mark.options && mark.options.layout === 'stacked') {\n const sums = new Map<string, { positive: number; negative: number }>();\n relevant.forEach(observation => {\n const category = axis === 'y' ? observation.x : observation.y;\n const value = observation[axis];\n if (category === undefined || !finiteNumber(value)) return;\n const key = chartValueKey(category);\n const sum = sums.get(key) ?? { positive: 0, negative: 0 };\n if (value >= 0) sum.positive += value;\n else sum.negative += value;\n sums.set(key, sum);\n });\n sums.forEach(sum => values.push(sum.positive, sum.negative));\n }\n }\n if (\n axis === 'y' &&\n mark.kind === 'area-y' &&\n !('y1' in mark.options && mark.options.y1 !== undefined)\n ) {\n includeZero = true;\n }\n });\n return { values, includeZero };\n}\n\nfunction colorResolver(spec: ChartSpec, observations: Observation[][]) {\n const inferred = distinct(observations.flatMap(group => group.map(observation => observation.color ?? observation.z).filter(validValue)));\n const domain = distinct([...(spec.color?.domain ?? []), ...inferred]);\n const range = spec.color?.range ?? [];\n const map = new Map(domain.map((value, index) => [chartValueKey(value), range[index % Math.max(1, range.length)] ?? categoryColor(index)]));\n return (observation: Observation): string => {\n const value = observation.color ?? observation.z;\n return value === undefined ? range[0] ?? categoryColor(0) : map.get(chartValueKey(value)) ?? categoryColor(0);\n };\n}\n\nfunction rectNode(observation: Observation, mark: ChartMark, color: string, x1: number, x2: number, y1: number, y2: number, radius: number | string, inset = 0): ChartSceneRect {\n return {\n type: 'rect',\n key: observation.sceneKey,\n markId: observation.markId,\n x: Math.min(x1, x2) + inset,\n y: Math.min(y1, y2) + inset,\n width: Math.max(0, Math.abs(x2 - x1) - inset * 2),\n height: Math.max(0, Math.abs(y2 - y1) - inset * 2),\n style: { ...styleFor(observation, mark, color, { fill: color, stroke: 'none' }), radius },\n };\n}\n\nfunction buildCartesianNodes(\n marks: readonly ChartMark[],\n allObservations: Observation[][],\n xScale: ScaleResolution,\n yScale: ScaleResolution,\n plot: ChartBounds,\n colorFor: (observation: Observation) => string,\n theme: ChartTheme,\n): { nodes: ChartSceneNode[]; points: ChartPoint[]; focusDotPointKeys: string[] } {\n const nodes: ChartSceneNode[] = [];\n const points: ChartPoint[] = [];\n const focusDotPointKeys = new Set<string>();\n\n marks.forEach((mark, markIndex) => {\n const observations = allObservations[markIndex];\n const groups = groupObservations(observations);\n\n if (mark.kind === 'line-y' || mark.kind === 'area-y') {\n groups.forEach(group => {\n const first = group[0];\n if (!first) return;\n const color = colorFor(first);\n if (mark.kind === 'line-y') {\n const line = lineShape<Observation>()\n .defined(observation => observation.x !== undefined && observation.y !== undefined && scalePosition(xScale, observation.x) !== undefined && scalePosition(yScale, observation.y) !== undefined)\n .x(observation => scalePosition(xScale, observation.x as ChartValue) ?? 0)\n .y(observation => scalePosition(yScale, observation.y as ChartValue) ?? 0);\n if ('curve' in mark.options && mark.options.curve) line.curve(mark.options.curve);\n const d = line(group);\n if (d) nodes.push({ type: 'path', key: `${first.markId}:series:${chartValueKey(first.z ?? first.color ?? 'series')}`, markId: first.markId, d, style: styleFor(first, mark, color, { fill: 'none', stroke: color, strokeWidth: theme.seriesStrokeWidth }) });\n } else {\n const area = areaShape<Observation>()\n .defined(observation => {\n const lower = observation.y1 ?? observation.y ?? 0;\n const upper = observation.y2 ?? observation.y;\n return observation.x !== undefined && finiteNumber(lower) && finiteNumber(upper) && scalePosition(xScale, observation.x) !== undefined;\n })\n .x(observation => scalePosition(xScale, observation.x as ChartValue) ?? 0)\n .y0(observation => scalePosition(yScale, observation.y1 ?? 0) ?? 0)\n .y1(observation => scalePosition(yScale, observation.y2 ?? observation.y ?? 0) ?? 0);\n if ('curve' in mark.options && mark.options.curve) area.curve(mark.options.curve);\n const d = area(group);\n if (d) nodes.push({ type: 'path', key: `${first.markId}:series:${chartValueKey(first.z ?? first.color ?? 'series')}`, markId: first.markId, d, style: styleFor(first, mark, color, { fill: color, stroke: 'none', fillOpacity: theme.areaOpacity }) });\n }\n group.forEach(observation => {\n if (observation.x === undefined || observation.y === undefined) return;\n const x = scalePosition(xScale, observation.x);\n const y = scalePosition(yScale, observation.y);\n if (mark.options.interactive !== false && x !== undefined && y !== undefined) {\n points.push(pointFor(observation, x, y, color));\n focusDotPointKeys.add(observation.sceneKey);\n }\n });\n });\n return;\n }\n\n if (mark.kind === 'bar-y' || mark.kind === 'bar-x') {\n const barOptions = mark.options as ChartBarOptions<unknown>;\n const vertical = mark.kind === 'bar-y';\n const categoryScale = vertical ? xScale : yScale;\n const valueScale = vertical ? yScale : xScale;\n const categories = distinct(observations.map(observation => vertical ? observation.x : observation.y).filter(validValue));\n const categoryBand = categoryScale.scale.bandwidth?.() ?? Math.max(1, (vertical ? plot.width : plot.height) / Math.max(1, categories.length) * 0.75);\n const seriesValues = distinct(observations.map(observation => observation.z).filter(validValue));\n const groupedScale = scaleBand<ChartValue>().domain(seriesValues.length > 0 ? seriesValues : ['series']).range([0, categoryBand]).padding(0.08);\n const stacks = new Map<string, { positive: number; negative: number }>();\n const stackSigns = new Map<string, { positive: boolean; negative: boolean }>();\n observations.forEach(observation => {\n const category = vertical ? observation.x : observation.y;\n const rawValue = vertical ? observation.y : observation.x;\n if (category === undefined || !finiteNumber(rawValue) || rawValue === 0) return;\n const stackKey = chartValueKey(category);\n const signs = stackSigns.get(stackKey) ?? { positive: false, negative: false };\n if (rawValue > 0) signs.positive = true;\n else signs.negative = true;\n stackSigns.set(stackKey, signs);\n });\n observations.forEach(observation => {\n const category = vertical ? observation.x : observation.y;\n const rawValue = vertical ? observation.y : observation.x;\n if (category === undefined || !finiteNumber(rawValue)) return;\n const categoryCenter = scalePosition(categoryScale, category);\n if (categoryCenter === undefined) return;\n let start = vertical ? observation.y1 : observation.x1;\n let end = vertical ? observation.y2 : observation.x2;\n const layout = barOptions.layout ?? 'single';\n let hasPriorStackSegment = layout === 'stacked' && finiteNumber(start) && start !== 0;\n if (!finiteNumber(start) || !finiteNumber(end)) {\n if (layout === 'stacked') {\n const stackKey = chartValueKey(category);\n const stack = stacks.get(stackKey) ?? { positive: 0, negative: 0 };\n start = rawValue >= 0 ? stack.positive : stack.negative;\n hasPriorStackSegment = start !== 0;\n end = start + rawValue;\n if (rawValue >= 0) stack.positive = end;\n else stack.negative = end;\n stacks.set(stackKey, stack);\n } else {\n start = 0;\n end = rawValue;\n }\n }\n const startPosition = scalePosition(valueScale, start);\n const endPosition = scalePosition(valueScale, end);\n if (startPosition === undefined || endPosition === undefined) return;\n const signs = stackSigns.get(chartValueKey(category));\n const zeroGap = layout === 'stacked' && signs?.positive && signs.negative\n ? theme.stackGap / 2\n : 0;\n const segmentGap = hasPriorStackSegment ? theme.stackGap : zeroGap;\n const renderedStartPosition = startPosition +\n Math.sign(endPosition - startPosition) *\n Math.min(segmentGap, Math.abs(endPosition - startPosition));\n const inset = visualValue(observation.datum, observation.index, observation.source, barOptions.inset, categoryBand * 0.1);\n let bandStart = categoryCenter - categoryBand / 2 + inset;\n let bandSize = Math.max(0, categoryBand - inset * 2);\n if (layout === 'grouped' && seriesValues.length > 0 && observation.z !== undefined) {\n bandStart = categoryCenter - categoryBand / 2 + (groupedScale(observation.z) ?? 0);\n bandSize = Math.max(0, groupedScale.bandwidth());\n }\n const color = colorFor(observation);\n const radius = visualValue(observation.datum, observation.index, observation.source, barOptions.radius, theme.barRadius);\n const node = vertical\n ? rectNode(observation, mark, color, bandStart, bandStart + bandSize, renderedStartPosition, endPosition, radius)\n : rectNode(observation, mark, color, renderedStartPosition, endPosition, bandStart, bandStart + bandSize, radius);\n nodes.push(node);\n if (mark.options.interactive !== false) points.push(pointFor(observation, vertical ? bandStart + bandSize / 2 : endPosition, vertical ? endPosition : bandStart + bandSize / 2, color));\n });\n return;\n }\n\n if (mark.kind === 'box-y') {\n const boxOptions = mark.options as ChartBoxYOptions<unknown>;\n const byCategory = new Map<string, Observation[]>();\n observations.forEach(observation => {\n if (observation.x === undefined || !finiteNumber(observation.y)) return;\n const key = chartValueKey(observation.x);\n const group = byCategory.get(key) ?? [];\n group.push(observation);\n byCategory.set(key, group);\n });\n byCategory.forEach(group => {\n const first = group[0];\n if (!first || first.x === undefined) return;\n const statistics = boxStatistics(group.map(observation => observation.y as number), boxOptions.whisker ?? 1.5);\n const center = scalePosition(xScale, first.x);\n if (!statistics || center === undefined) return;\n const categoryBand = xScale.scale.bandwidth?.() ?? Math.max(24, plot.width / Math.max(1, byCategory.size) * 0.6);\n const boxWidth = boxOptions.inset === undefined\n ? Math.min(categoryBand * 0.6, theme.boxMaxWidth)\n : Math.max(0, categoryBand - boxOptions.inset * 2);\n const left = center - boxWidth / 2;\n const right = center + boxWidth / 2;\n // Box categories share one data-intent treatment by default. A color\n // channel remains the explicit escape hatch for semantic series color.\n const color = first.color === undefined ? chartIntentColor() : colorFor(first);\n const yLower = scalePosition(yScale, statistics.lower);\n const yUpper = scalePosition(yScale, statistics.upper);\n const yQ1 = scalePosition(yScale, statistics.q1);\n const yQ3 = scalePosition(yScale, statistics.q3);\n const yMedian = scalePosition(yScale, statistics.median);\n if ([yLower, yUpper, yQ1, yQ3, yMedian].some(value => value === undefined)) return;\n const lineStyle = styleFor(first, mark, color, { fill: 'none', stroke: color, strokeWidth: theme.seriesStrokeWidth });\n const boxNode = rectNode(first, mark, color, left, right, yQ3 as number, yQ1 as number, boxOptions.radius ?? theme.barRadius);\n boxNode.style.fillOpacity = visualValue(first.datum, first.index, first.source, boxOptions.fillOpacity, theme.boxFillOpacity);\n nodes.push(\n { type: 'line', key: `${first.sceneKey}:whisker`, markId: first.markId, x1: center, x2: center, y1: yUpper as number, y2: yLower as number, style: lineStyle },\n boxNode,\n { type: 'line', key: `${first.sceneKey}:median`, markId: first.markId, x1: left, x2: right, y1: yMedian as number, y2: yMedian as number, style: lineStyle },\n );\n statistics.outliers.forEach((value, index) => {\n const y = scalePosition(yScale, value);\n if (y !== undefined) nodes.push({ type: 'circle', key: `${first.sceneKey}:outlier:${index}`, markId: first.markId, x: center, y, radius: dotCircleRadius(theme.dotRadius, theme.dotHaloWidth), clipToPlot: false, style: styleFor(first, mark, color, { fill: 'var(--color-background-primary)', stroke: color, strokeWidth: theme.dotHaloWidth }) });\n });\n const summaryObservation: Observation = { ...first, y: statistics.median, value: statistics.median, datumKey: chartValueKey(first.x), sceneKey: `${first.markId}:${chartValueKey(first.x)}` };\n if (mark.options.interactive !== false) points.push(pointFor(summaryObservation, center, yMedian as number, color));\n });\n return;\n }\n\n if (mark.kind === 'rect') {\n const rectOptions = mark.options as ChartRectOptions<unknown>;\n observations.forEach(observation => {\n if (![observation.x1, observation.x2, observation.y1, observation.y2].every(finiteNumber)) return;\n const x1 = scalePosition(xScale, observation.x1 as number);\n const x2 = scalePosition(xScale, observation.x2 as number);\n const y1 = scalePosition(yScale, observation.y1 as number);\n const y2 = scalePosition(yScale, observation.y2 as number);\n if ([x1, x2, y1, y2].some(value => value === undefined)) return;\n const color = colorFor(observation);\n const inset = visualValue(observation.datum, observation.index, observation.source, rectOptions.inset, 1);\n const radius = visualValue(observation.datum, observation.index, observation.source, rectOptions.radius, theme.barRadius);\n nodes.push(rectNode(observation, mark, color, x1 as number, x2 as number, y1 as number, y2 as number, radius, inset));\n if (mark.options.interactive !== false) points.push(pointFor(observation, ((x1 as number) + (x2 as number)) / 2, Math.min(y1 as number, y2 as number), color, { xValue: (observation.x1 as number + (observation.x2 as number)) / 2, yValue: observation.y2 as number }));\n });\n return;\n }\n\n if (mark.kind === 'cell') {\n const cellOptions = mark.options as ChartCellOptions<unknown>;\n const values = observations.map(observation => observation.intensity).filter(finiteNumber);\n const minimum = values.length > 0 ? Math.min(...values) : 0;\n const maximum = values.length > 0 ? Math.max(...values) : 1;\n observations.forEach(observation => {\n if (observation.x === undefined || observation.y === undefined || !finiteNumber(observation.intensity)) return;\n const x = scalePosition(xScale, observation.x);\n const y = scalePosition(yScale, observation.y);\n if (x === undefined || y === undefined) return;\n const width = xScale.scale.bandwidth?.() ?? plot.width / Math.max(1, distinct(observations.map(item => item.x).filter(validValue)).length);\n const height = yScale.scale.bandwidth?.() ?? plot.height / Math.max(1, distinct(observations.map(item => item.y).filter(validValue)).length);\n const options = cellOptions;\n const color = visualValue(observation.datum, observation.index, observation.source, options.fill, chartIntentColor(options.intent));\n const ratio = maximum === minimum ? 1 : (observation.intensity - minimum) / (maximum - minimum);\n const minOpacity = options.minimumOpacity ?? theme.heatmapMinimumOpacity;\n const maxOpacity = options.maximumOpacity ?? theme.heatmapMaximumOpacity;\n const inset = options.inset ?? theme.cellGap / 2;\n const radius = options.radius ?? 0;\n const node = rectNode(observation, mark, color, x - width / 2, x + width / 2, y - height / 2, y + height / 2, radius, inset);\n node.style.fillOpacity = visualValue(observation.datum, observation.index, observation.source, options.fillOpacity, minOpacity + ratio * (maxOpacity - minOpacity));\n nodes.push(node);\n if (mark.options.interactive !== false) points.push(pointFor(observation, x, y, color, { value: observation.intensity }));\n });\n return;\n }\n\n observations.forEach(observation => {\n const color = colorFor(observation);\n if ((mark.kind === 'rule-x' || mark.kind === 'band-x') && (observation.x !== undefined || finiteNumber(observation.x1))) {\n const x1 = scalePosition(xScale, (observation.x1 ?? observation.x) as ChartValue);\n const x2 = scalePosition(xScale, (observation.x2 ?? observation.x) as ChartValue);\n if (x1 === undefined || x2 === undefined) return;\n if (mark.kind === 'rule-x') nodes.push({ type: 'line', key: observation.sceneKey, markId: observation.markId, x1, x2: x1, y1: plot.top, y2: plot.bottom, style: styleFor(observation, mark, 'var(--color-foreground-tertiary)', { stroke: 'var(--color-foreground-tertiary)', fill: 'none', strokeWidth: theme.ruleStrokeWidth }) });\n else {\n const node = rectNode(observation, mark, 'var(--color-foreground-tertiary)', x1, x2, plot.top, plot.bottom, 0);\n node.style.fillOpacity = visualValue(observation.datum, observation.index, observation.source, mark.options.fillOpacity, theme.annotationFillOpacity);\n nodes.push(node);\n }\n return;\n }\n if ((mark.kind === 'rule-y' || mark.kind === 'band-y') && (observation.y !== undefined || finiteNumber(observation.y1))) {\n const y1 = scalePosition(yScale, (observation.y1 ?? observation.y) as ChartValue);\n const y2 = scalePosition(yScale, (observation.y2 ?? observation.y) as ChartValue);\n if (y1 === undefined || y2 === undefined) return;\n if (mark.kind === 'rule-y') nodes.push({ type: 'line', key: observation.sceneKey, markId: observation.markId, x1: plot.left, x2: plot.right, y1, y2: y1, style: styleFor(observation, mark, 'var(--color-foreground-tertiary)', { stroke: 'var(--color-foreground-tertiary)', fill: 'none', strokeWidth: theme.ruleStrokeWidth }) });\n else {\n const node = rectNode(observation, mark, 'var(--color-foreground-tertiary)', plot.left, plot.right, y1, y2, 0);\n node.style.fillOpacity = visualValue(observation.datum, observation.index, observation.source, mark.options.fillOpacity, theme.annotationFillOpacity);\n nodes.push(node);\n }\n return;\n }\n if (observation.x === undefined || observation.y === undefined) return;\n const x = scalePosition(xScale, observation.x);\n const y = scalePosition(yScale, observation.y);\n if (x === undefined || y === undefined) return;\n if (mark.kind === 'dot') {\n const radius = 'r' in mark.options ? visualValue(observation.datum, observation.index, observation.source, mark.options.r, theme.dotRadius) : theme.dotRadius;\n nodes.push({ type: 'circle', key: observation.sceneKey, markId: observation.markId, x, y, radius: dotCircleRadius(radius, theme.dotHaloWidth), clipToPlot: false, style: styleFor(observation, mark, color, { fill: color, stroke: 'var(--color-background-primary)', strokeWidth: theme.dotHaloWidth }) });\n } else if (mark.kind === 'text' && observation.text) {\n const options = mark.options;\n nodes.push({\n type: 'text', key: observation.sceneKey, markId: observation.markId, x: Math.max(plot.left, Math.min(plot.right, x)), y: Math.max(plot.top, Math.min(plot.bottom, y)), text: observation.text,\n dx: 'dx' in options ? visualValue(observation.datum, observation.index, observation.source, options.dx, 0) : 0,\n dy: 'dy' in options ? visualValue(observation.datum, observation.index, observation.source, options.dy, 0) : 0,\n style: {\n ...styleFor(observation, mark, 'var(--color-foreground-primary)', { fill: 'var(--color-foreground-primary)', stroke: 'none' }),\n fontFamily: 'fontFamily' in options ? visualValue(observation.datum, observation.index, observation.source, options.fontFamily, 'var(--typography-font-family)') : undefined,\n fontSize: 'fontSize' in options ? visualValue(observation.datum, observation.index, observation.source, options.fontSize, 'var(--typography-fontsize-xs)') : undefined,\n fontWeight: 'fontWeight' in options ? visualValue(observation.datum, observation.index, observation.source, options.fontWeight, 'var(--typography-weight-medium)') : undefined,\n textAnchor: 'textAnchor' in options ? visualValue(observation.datum, observation.index, observation.source, options.textAnchor, 'middle') : 'middle',\n },\n });\n }\n if (mark.options.interactive !== false) {\n points.push(pointFor(observation, x, y, color));\n if (mark.kind === 'dot') focusDotPointKeys.add(observation.sceneKey);\n }\n });\n });\n return { nodes, points, focusDotPointKeys: [...focusDotPointKeys] };\n}\n\nfunction polarAngle(coordinate: ChartPolarCoordinate, fraction: number): number {\n const start = coordinate.startAngle ?? 0;\n const end = coordinate.endAngle ?? Math.PI * 2;\n return start + fraction * (end - start);\n}\n\nfunction polarPoint(centerX: number, centerY: number, angle: number, radius: number) {\n return { x: centerX + Math.sin(angle) * radius, y: centerY - Math.cos(angle) * radius };\n}\n\nexport function resolveDonutPadAngle(gap: number, innerRadius: number, outerRadius: number): number {\n return gap / Math.max(1, Math.hypot(innerRadius, outerRadius));\n}\n\nfunction buildPolarScene(\n spec: ChartSpec,\n marks: readonly ChartMark[],\n observations: Observation[][],\n width: number,\n height: number,\n locale: string,\n colorFor: (observation: Observation) => string,\n theme: ChartTheme,\n measurer: ChartTextMeasurer,\n): Pick<ChartScene, 'plot' | 'guides' | 'nodes' | 'points' | 'focusDotPointKeys' | 'arcHitRegions'> {\n const coordinate = spec.coordinate as ChartPolarCoordinate;\n const focusDotPointKeys = new Set<string>();\n const arcHitRegions: ChartArcHitRegion[] = [];\n const angleDomain = distinct([...(spec.angle?.domain ?? []), ...observations.flatMap(group => group.map(observation => observation.angle).filter(validValue))]);\n const angleFor = (value: ChartValue): number => {\n const index = Math.max(0, angleDomain.findIndex(candidate => chartValueKey(candidate) === chartValueKey(value)));\n return polarAngle(coordinate, angleDomain.length > 0 ? index / angleDomain.length : 0);\n };\n const requestedMargin = resolveMargin(spec, true);\n let margin = requestedMargin;\n let plot = plotFor(width, height, margin);\n let centerX = (plot.left + plot.right) / 2;\n let centerY = (plot.top + plot.bottom) / 2;\n let availableRadius = Math.max(0, Math.min(plot.width, plot.height) / 2);\n let outerRadius = availableRadius * (coordinate.outerRadius ?? 1);\n if ((coordinate.grid ?? 'polygon') === 'polygon') {\n for (let pass = 0; pass < 8; pass += 1) {\n let overflowTop = 0;\n let overflowRight = 0;\n let overflowBottom = 0;\n let overflowLeft = 0;\n angleDomain.forEach(angleValue => {\n const angle = angleFor(angleValue);\n const localX = Math.sin(angle);\n const localY = -Math.cos(angle);\n const position = polarPoint(centerX, centerY, angle, outerRadius + theme.polarLabelGap);\n const measurement = measurer(spec.angle?.ticks?.format?.(angleValue, locale) ?? formatTick(angleValue, locale));\n const left = localX < -0.01 ? position.x - measurement.width : localX > 0.01 ? position.x : position.x - measurement.width / 2;\n const right = localX < -0.01 ? position.x : localX > 0.01 ? position.x + measurement.width : position.x + measurement.width / 2;\n const top = localY < -0.01 ? position.y - measurement.height : localY > 0.01 ? position.y : position.y - measurement.height / 2;\n const bottom = localY < -0.01 ? position.y : localY > 0.01 ? position.y + measurement.height : position.y + measurement.height / 2;\n overflowTop = Math.max(overflowTop, -top);\n overflowRight = Math.max(overflowRight, right - width);\n overflowBottom = Math.max(overflowBottom, bottom - height);\n overflowLeft = Math.max(overflowLeft, -left);\n });\n if (Math.max(overflowTop, overflowRight, overflowBottom, overflowLeft) <= 0.25) break;\n margin = {\n top: margin.top + overflowTop,\n right: margin.right + overflowRight * 2,\n bottom: margin.bottom + overflowBottom,\n left: margin.left + overflowLeft * 2,\n };\n plot = plotFor(width, height, margin);\n centerX = (plot.left + plot.right) / 2;\n centerY = (plot.top + plot.bottom) / 2;\n availableRadius = Math.max(0, Math.min(plot.width, plot.height) / 2);\n outerRadius = availableRadius * (coordinate.outerRadius ?? 1);\n }\n }\n const defaultInnerRadius = outerRadius * (coordinate.innerRadius ?? 0);\n const radiusValues = observations.flatMap(group => group.flatMap(observation => [observation.radius, observation.radius1, observation.radius2].filter(finiteNumber)));\n const radiusOptions = spec.radius ?? { scale: scaleLinear, nice: true };\n const radiusScale = resolveScale(radiusOptions, radiusValues, [0, outerRadius], true);\n const guides: ChartSceneNode[] = [];\n const nodes: ChartSceneNode[] = [];\n const points: ChartPoint[] = [];\n\n if ((coordinate.grid ?? 'polygon') === 'polygon' && angleDomain.length >= 3) {\n const tickValuesForRadius = radiusScale.scale.ticks?.(4) ?? radiusScale.domain;\n tickValuesForRadius.filter(value => finiteNumber(value) && value > 0).forEach((value, ringIndex) => {\n const ringRadius = scalePosition(radiusScale, value);\n if (ringRadius === undefined) return;\n const polygon = [...angleDomain, angleDomain[0]].map(angle => polarPoint(centerX, centerY, angleFor(angle), ringRadius));\n const d = lineShape<{ x: number; y: number }>().x(point => point.x).y(point => point.y)(polygon);\n if (d) guides.push({ type: 'path', key: `polar-ring:${ringIndex}`, markId: 'polar-guide', d, style: { fill: 'none', stroke: 'var(--color-foreground-quaternary)', strokeWidth: theme.gridStrokeWidth } });\n });\n angleDomain.forEach((angleValue, index) => {\n const angle = angleFor(angleValue);\n const end = polarPoint(centerX, centerY, angle, outerRadius);\n const label = polarPoint(centerX, centerY, angle, outerRadius + theme.polarLabelGap);\n const localX = Math.sin(angle);\n const localY = -Math.cos(angle);\n guides.push(\n { type: 'line', key: `polar-spoke:${index}`, markId: 'polar-guide', className: 'chart__grid chart__polar-guide', x1: centerX, y1: centerY, x2: end.x, y2: end.y, style: { fill: 'none', stroke: 'var(--color-foreground-quaternary)', strokeWidth: theme.gridStrokeWidth } },\n { type: 'text', key: `polar-label:${index}`, markId: 'polar-guide', className: 'chart__tick chart__polar-label', measure: true, x: label.x, y: label.y, text: spec.angle?.ticks?.format?.(angleValue, locale) ?? formatTick(angleValue, locale), dominantBaseline: localY < -0.01 ? 'auto' : localY > 0.01 ? 'hanging' : 'middle', style: { fill: 'var(--color-foreground-secondary)', stroke: 'none', textAnchor: localX < -0.01 ? 'end' : localX > 0.01 ? 'start' : 'middle', fontFamily: 'var(--typography-font-family)', fontSize: 'var(--typography-fontsize-xs)', fontWeight: 'var(--typography-weight-medium)' } },\n );\n });\n }\n\n marks.forEach((mark, markIndex) => {\n const markObservations = observations[markIndex];\n if (mark.kind === 'arc') {\n markObservations.forEach(observation => {\n if (!finiteNumber(observation.theta1) || !finiteNumber(observation.theta2)) return;\n const options = mark.options;\n const inner = 'innerRadius' in options ? visualValue(observation.datum, observation.index, observation.source, options.innerRadius, defaultInnerRadius / Math.max(1, outerRadius)) * outerRadius : defaultInnerRadius;\n const outer = 'outerRadius' in options ? visualValue(observation.datum, observation.index, observation.source, options.outerRadius, 1) * outerRadius : outerRadius;\n const corner = 'cornerRadius' in options ? visualValue(observation.datum, observation.index, observation.source, options.cornerRadius, theme.polarCornerRadius) : theme.polarCornerRadius;\n const defaultPadAngle = markObservations.length > 1 && inner > 0\n ? resolveDonutPadAngle(theme.donutGap, inner, outer)\n : 0;\n const padAngle = 'padAngle' in options ? visualValue(observation.datum, observation.index, observation.source, options.padAngle, defaultPadAngle) : defaultPadAngle;\n const generator = arcShape<{ startAngle: number; endAngle: number }>().innerRadius(Math.max(0, inner)).outerRadius(Math.max(0, outer)).cornerRadius(corner).padAngle(padAngle);\n const arcDatum = { startAngle: polarAngle(coordinate, observation.theta1), endAngle: polarAngle(coordinate, observation.theta2) };\n const d = generator(arcDatum);\n if (!d) return;\n const color = colorFor(observation);\n nodes.push({ type: 'path', key: observation.sceneKey, markId: observation.markId, d, transform: `translate(${centerX} ${centerY})`, style: styleFor(observation, mark, color, { fill: color, stroke: 'var(--color-background-primary)', strokeWidth: 0 }) });\n arcHitRegions.push({\n sceneKey: observation.sceneKey,\n centerX,\n centerY,\n innerRadius: Math.max(0, inner),\n outerRadius: Math.max(0, outer),\n startAngle: arcDatum.startAngle,\n endAngle: arcDatum.endAngle,\n });\n const [localX, localY] = generator.centroid(arcDatum);\n if (mark.options.interactive !== false) points.push(pointFor(observation, centerX + localX, centerY + localY, color, { xValue: observation.label ?? observation.datumKey, yValue: observation.value ?? observation.theta2 - observation.theta1, value: observation.value ?? observation.theta2 - observation.theta1 }));\n });\n return;\n }\n\n if (mark.kind === 'radial-line' || mark.kind === 'radial-area') {\n groupObservations(markObservations).forEach(group => {\n const first = group[0];\n if (!first) return;\n const valid = group.filter(observation => observation.angle !== undefined && finiteNumber(observation.radius));\n if (valid.length === 0) return;\n const color = colorFor(first);\n if (mark.kind === 'radial-line') {\n const generator = lineRadial<Observation>().angle(observation => angleFor(observation.angle as ChartValue)).radius(observation => scalePosition(radiusScale, observation.radius as number) ?? 0).curve('curve' in mark.options && mark.options.curve ? mark.options.curve : curveLinearClosed);\n const d = generator(valid);\n if (d) nodes.push({ type: 'path', key: `${first.markId}:series:${chartValueKey(first.z ?? first.color ?? 'series')}`, markId: first.markId, d, transform: `translate(${centerX} ${centerY})`, style: styleFor(first, mark, color, { fill: 'none', stroke: color, strokeWidth: theme.seriesStrokeWidth }) });\n } else {\n const generator = areaRadial<Observation>().angle(observation => angleFor(observation.angle as ChartValue)).innerRadius(observation => scalePosition(radiusScale, observation.radius1 ?? 0) ?? 0).outerRadius(observation => scalePosition(radiusScale, observation.radius2 ?? observation.radius ?? 0) ?? 0).curve('curve' in mark.options && mark.options.curve ? mark.options.curve : curveLinearClosed);\n const d = generator(valid);\n if (d) nodes.push({ type: 'path', key: `${first.markId}:series:${chartValueKey(first.z ?? first.color ?? 'series')}`, markId: first.markId, d, transform: `translate(${centerX} ${centerY})`, style: styleFor(first, mark, color, { fill: color, stroke: color, fillOpacity: theme.areaOpacity, strokeWidth: theme.seriesStrokeWidth }) });\n }\n valid.forEach(observation => {\n const radialPosition = scalePosition(radiusScale, observation.radius as number);\n if (radialPosition === undefined || observation.angle === undefined) return;\n const position = polarPoint(centerX, centerY, angleFor(observation.angle), radialPosition);\n if (mark.options.interactive !== false) {\n points.push(pointFor(observation, position.x, position.y, color));\n focusDotPointKeys.add(observation.sceneKey);\n }\n });\n });\n return;\n }\n\n if (mark.kind === 'radial-dot') {\n markObservations.forEach(observation => {\n if (observation.angle === undefined || !finiteNumber(observation.radius)) return;\n const radialPosition = scalePosition(radiusScale, observation.radius);\n if (radialPosition === undefined) return;\n const position = polarPoint(centerX, centerY, angleFor(observation.angle), radialPosition);\n const color = colorFor(observation);\n const radius = 'r' in mark.options ? visualValue(observation.datum, observation.index, observation.source, mark.options.r, theme.dotRadius) : theme.dotRadius;\n nodes.push({ type: 'circle', key: observation.sceneKey, markId: observation.markId, x: position.x, y: position.y, radius: dotCircleRadius(radius, theme.dotHaloWidth), clipToPlot: false, style: styleFor(observation, mark, color, { fill: color, stroke: 'var(--color-background-primary)', strokeWidth: theme.dotHaloWidth }) });\n if (mark.options.interactive !== false) {\n points.push(pointFor(observation, position.x, position.y, color));\n focusDotPointKeys.add(observation.sceneKey);\n }\n });\n }\n });\n const arcMarkIds = new Set(\n marks\n .map((mark, index) => mark.kind === 'arc' ? mark.options.id ?? `${mark.kind}-${index}` : undefined)\n .filter((value): value is string => value !== undefined),\n );\n if (\n arcMarkIds.size > 0 &&\n defaultInnerRadius > 0 &&\n !nodes.some(node => arcMarkIds.has(node.markId))\n ) {\n const generator = arcShape<{ startAngle: number; endAngle: number }>()\n .innerRadius(defaultInnerRadius)\n .outerRadius(outerRadius);\n const d = generator({\n startAngle: coordinate.startAngle ?? 0,\n endAngle: coordinate.endAngle ?? Math.PI * 2,\n });\n if (d) {\n nodes.push({\n type: 'path',\n key: 'polar-empty-track',\n markId: 'polar-empty-track',\n d,\n transform: `translate(${centerX} ${centerY})`,\n style: { fill: 'var(--color-background-faint-neutral)', stroke: 'none' },\n });\n }\n }\n return { plot, guides, nodes, points, focusDotPointKeys: [...focusDotPointKeys], arcHitRegions };\n}\n\nexport function compileChartScene(\n definition: ChartDefinition,\n width: number,\n height: number,\n locale = 'en',\n measurer: ChartTextMeasurer = text => ({ width: text.length * 7, height: 14 }),\n theme: ChartTheme = defaultChartTheme,\n): ChartScene {\n const spec = normalizeCoordinateContainers(resolveSpec(definition, width, height));\n const marks = spec.marks as readonly ChartMark[];\n const observations = marks.map(observationsForMark);\n const colorFor = colorResolver(spec, observations);\n const polar = spec.coordinate?.type === 'polar';\n if (polar) {\n const built = buildPolarScene(spec, marks, observations, width, height, locale, colorFor, theme, measurer);\n return { width, height, coordinate: 'polar', ...built, xAxis: { ...EMPTY_AXIS }, yAxis: { ...EMPTY_AXIS }, center: spec.center, focus: spec.focus ?? 'nearest', maxFocusDistance: spec.maxFocusDistance, tooltip: spec.tooltip, clip: spec.clip ?? true, focusDotCircleRadius: dotCircleRadius(theme.focusDotRadius, theme.dotHaloWidth), focusDotHaloWidth: theme.dotHaloWidth };\n }\n\n if (!spec.x || !spec.y) throw new TypeError('Cartesian chart definitions require x and y scale options.');\n const requestedMargin = resolveMargin(spec);\n const xValues = axisValues(marks, observations, 'x');\n const yValues = axisValues(marks, observations, 'y');\n let margin = requestedMargin;\n let plot = plotFor(width, height, margin);\n let xScale = resolveScale(spec.x, xValues.values, [plot.left, plot.right], xValues.includeZero);\n let yScale = resolveScale(spec.y, yValues.values, [plot.bottom, plot.top], yValues.includeZero);\n let xAxis = sceneAxis(spec.x, xScale, locale, plot.width, true, measurer);\n let yAxis = sceneAxis(spec.y, yScale, locale, plot.height, false, measurer);\n for (let pass = 0; pass < 4; pass += 1) {\n const nextMargin = solveCartesianMargins(width, height, requestedMargin, xAxis, yAxis, plot, measurer);\n const settled = (['top', 'right', 'bottom', 'left'] as const).every(side => Math.abs(nextMargin[side] - margin[side]) <= 0.25);\n margin = nextMargin;\n plot = plotFor(width, height, margin);\n xScale = resolveScale(spec.x, xValues.values, [plot.left, plot.right], xValues.includeZero);\n yScale = resolveScale(spec.y, yValues.values, [plot.bottom, plot.top], yValues.includeZero);\n xAxis = sceneAxis(spec.x, xScale, locale, plot.width, true, measurer);\n yAxis = sceneAxis(spec.y, yScale, locale, plot.height, false, measurer);\n if (settled) break;\n }\n const built = buildCartesianNodes(marks, observations, xScale, yScale, plot, colorFor, theme);\n return { width, height, coordinate: 'cartesian', plot, xAxis, yAxis, guides: [], nodes: built.nodes, points: built.points, focusDotPointKeys: built.focusDotPointKeys, arcHitRegions: [], center: spec.center, focus: spec.focus ?? 'nearest', maxFocusDistance: spec.maxFocusDistance, tooltip: spec.tooltip, clip: spec.clip ?? true, focusDotCircleRadius: dotCircleRadius(theme.focusDotRadius, theme.dotHaloWidth), focusDotHaloWidth: theme.dotHaloWidth };\n}\n\nconst normalizeAngle = (angle: number): number => {\n const turn = Math.PI * 2;\n return ((angle % turn) + turn) % turn;\n};\n\nfunction arcContainsPoint(region: ChartArcHitRegion, x: number, y: number): boolean {\n const dx = x - region.centerX;\n const dy = y - region.centerY;\n const radius = Math.hypot(dx, dy);\n if (radius < region.innerRadius || radius > region.outerRadius) return false;\n const sweep = region.endAngle - region.startAngle;\n if (Math.abs(sweep) >= Math.PI * 2 - Number.EPSILON) return true;\n const angle = Math.atan2(dx, -dy);\n return sweep >= 0\n ? normalizeAngle(angle - region.startAngle) <= sweep\n : normalizeAngle(region.startAngle - angle) <= -sweep;\n}\n\nexport function findChartFocus(\n points: readonly ChartPoint[],\n mode: NonNullable<ChartSpec['focus']>,\n x: number,\n y: number,\n maxDistance = Number.POSITIVE_INFINITY,\n arcHitRegions: readonly ChartArcHitRegion[] = [],\n): { primary: ChartPoint; points: ChartPoint[] } | undefined {\n if (mode === 'none' || points.length === 0) return undefined;\n const hitRegion = [...arcHitRegions].reverse().find(region => arcContainsPoint(region, x, y));\n const hitPoint = hitRegion && points.find(point => point.sceneKey === hitRegion.sceneKey);\n if (hitPoint) return { primary: hitPoint, points: [hitPoint] };\n if (arcHitRegions.length > 0) return undefined;\n const distance = (point: ChartPoint): number => {\n if (mode === 'nearest-x' || mode === 'group-x') return Math.abs(point.x - x);\n if (mode === 'nearest-y' || mode === 'group-y') return Math.abs(point.y - y);\n return Math.hypot(point.x - x, point.y - y);\n };\n const primary = points.reduce((nearest, point) => distance(point) < distance(nearest) ? point : nearest);\n if (distance(primary) > maxDistance) return undefined;\n if (mode === 'group-x') return { primary, points: points.filter(point => chartValueKey(point.xValue) === chartValueKey(primary.xValue)) };\n if (mode === 'group-y') return { primary, points: points.filter(point => chartValueKey(point.yValue) === chartValueKey(primary.yValue)) };\n return { primary, points: [primary] };\n}\n","@import '../../utils/forced-colors.css';\n\n:host {\n position: relative;\n display: block;\n width: var(--ds-chart-width, 100%);\n max-width: 100%;\n height: var(--ds-chart-height, 320px);\n font-family: var(--typography-font-family);\n}\n\n.chart__surface {\n display: block;\n width: 100%;\n height: 100%;\n overflow: hidden;\n outline: none;\n touch-action: none;\n}\n\n.chart__surface:focus-visible {\n outline: var(--dimension-stroke-width-025) solid var(--color-border-focus);\n outline-offset: var(--dimension-space-025);\n}\n\n.chart__interaction-surface {\n fill: transparent;\n pointer-events: all;\n}\n\n.chart__grid,\n.chart__axis-line,\n.chart__plot-boundary,\n.chart__mark {\n vector-effect: non-scaling-stroke;\n}\n\n.chart__grid {\n stroke: var(--color-foreground-quaternary);\n stroke-width: var(--dimension-stroke-width-012);\n}\n\n.chart__plot-boundary {\n stroke: var(--color-foreground-quaternary);\n stroke-width: var(--dimension-stroke-width-012);\n}\n\n.chart__axis-line {\n stroke: var(--color-foreground-tertiary);\n stroke-width: var(--dimension-stroke-width-012);\n}\n\n.chart__tick,\n.chart__text-mark {\n fill: var(--color-foreground-secondary);\n font-family: var(--typography-font-family);\n font-size: var(--typography-fontsize-xs);\n font-weight: var(--typography-weight-medium);\n letter-spacing: var(--typography-letterspacing-positive);\n text-transform: uppercase;\n}\n\n.chart__axis-title {\n fill: var(--color-foreground-primary);\n font-family: var(--typography-font-family);\n font-size: var(--typography-fontsize-xs);\n font-weight: var(--typography-weight-semibold);\n letter-spacing: var(--typography-letterspacing-positive);\n text-transform: uppercase;\n}\n\n.chart__center-value {\n fill: var(--color-foreground-primary);\n font-family: var(--typography-font-family);\n font-size: var(--typography-fontsize-xl);\n font-weight: var(--typography-weight-semibold);\n letter-spacing: var(--typography-letterspacing-negative-double);\n}\n\n.chart__center-caption {\n fill: var(--color-foreground-secondary);\n font-family: var(--typography-font-family);\n font-size: var(--typography-fontsize-md);\n font-weight: var(--typography-weight-regular);\n letter-spacing: var(--typography-letterspacing-negative-half);\n}\n\n.chart__focus {\n fill: none;\n stroke: var(--color-border-focus);\n stroke-width: var(--dimension-stroke-width-025);\n vector-effect: non-scaling-stroke;\n pointer-events: none;\n}\n\n.chart__focus-guide {\n stroke: var(--color-foreground-quaternary);\n stroke-width: var(--dimension-stroke-width-012);\n vector-effect: non-scaling-stroke;\n pointer-events: none;\n}\n\n.chart__focus-point {\n vector-effect: non-scaling-stroke;\n pointer-events: none;\n}\n\n.chart__description,\n.chart__status {\n position: absolute;\n width: var(--dimension-stroke-width-012);\n height: var(--dimension-stroke-width-012);\n overflow: hidden;\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n white-space: nowrap;\n}\n\n@media (forced-colors: active) {\n .chart__mark,\n .chart__focus,\n .chart__focus-point {\n forced-color-adjust: none;\n }\n\n .chart__focus {\n stroke: var(--ds-forced-color-focus);\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Prop,\n State,\n Watch,\n h,\n Host,\n} from '@stencil/core';\nimport type {\n ChartDefinition,\n ChartPoint,\n ChartTooltipItem,\n ChartTooltipOptions,\n} from '../../utils/chart-grammar';\nimport {\n compileChartScene,\n findChartFocus,\n type ChartScene,\n type ChartSceneNode,\n} from '../../utils/chart-scene';\nimport { resolveChartTheme } from '../../utils/chart-theme';\n\nconst DEFAULT_WIDTH = 480;\nconst DEFAULT_HEIGHT = 320;\n\nexport type ChartFocusSource = 'pointer' | 'keyboard';\n\nexport interface ChartFocusChangeDetail {\n primary: ChartPoint | null;\n points: readonly ChartPoint[];\n source: ChartFocusSource;\n}\n\ninterface FocusState {\n primary: ChartPoint;\n points: ChartPoint[];\n source: ChartFocusSource;\n}\n\ninterface PointerAnchor {\n x: number;\n y: number;\n}\n\n@Component({\n tag: 'ds-chart',\n styleUrl: 'Chart.css',\n scoped: true,\n})\nexport class Chart {\n @Element() el!: HTMLElement;\n\n /** Typed chart definition. Set as a JavaScript property, not an HTML attribute. */\n @Prop() definition!: ChartDefinition;\n /** Required accessible name for the visualization. */\n @Prop() label!: string;\n /** Optional longer accessible description. */\n @Prop() description?: string;\n /** Locale used by axes and default tooltip formatters. */\n @Prop() locale?: string;\n /** Fixed surface width. Otherwise the chart observes its container. */\n @Prop() width?: number;\n /** Product-owned surface height. Wins over aspectRatio. */\n @Prop() height?: number;\n /** Derives height from the current width when height is not supplied. */\n @Prop() aspectRatio?: number;\n\n /** Fires whenever pointer or keyboard focus resolves to semantic chart points. */\n @Event() dsChartFocusChange!: EventEmitter<ChartFocusChangeDetail>;\n\n @State() private surfaceWidth = DEFAULT_WIDTH;\n @State() private containerHeight?: number;\n @State() private scene?: ChartScene;\n @State() private focusState?: FocusState;\n @State() private pointerAnchor?: PointerAnchor;\n\n private resizeObserver?: ResizeObserver;\n private resizeFrame?: number;\n private compileFrame?: number;\n private warnedConflictingHeight = false;\n private measuredLabels = new Map<string, { width: number; height: number }>();\n private descriptionId = `ds-chart-description-${Math.random().toString(36).slice(2)}`;\n private clipId = `ds-chart-clip-${Math.random().toString(36).slice(2)}`;\n\n componentWillLoad() {\n if (this.width && this.width > 0) this.surfaceWidth = this.width;\n this.compile();\n }\n\n componentDidLoad() {\n this.connectResizeObserver();\n this.waitForFonts();\n }\n\n componentDidRender() {\n this.measureRenderedLabels();\n }\n\n disconnectedCallback() {\n this.resizeObserver?.disconnect();\n if (this.resizeFrame) cancelAnimationFrame(this.resizeFrame);\n if (this.compileFrame) cancelAnimationFrame(this.compileFrame);\n }\n\n @Watch('definition')\n @Watch('locale')\n @Watch('height')\n @Watch('aspectRatio')\n onDefinitionInputChange() {\n this.scheduleCompile();\n }\n\n @Watch('width')\n onWidthChange() {\n if (this.width && this.width > 0) this.surfaceWidth = this.width;\n else this.measureHost();\n this.scheduleCompile();\n }\n\n private get surfaceHeight(): number {\n if (this.height && this.height > 0) {\n if (this.aspectRatio && !this.warnedConflictingHeight) {\n this.warnedConflictingHeight = true;\n console.warn('[ds-chart] height wins when both height and aspectRatio are supplied.');\n }\n return this.height;\n }\n if (this.aspectRatio && this.aspectRatio > 0) {\n return Math.max(1, this.surfaceWidth / this.aspectRatio);\n }\n return this.containerHeight ?? DEFAULT_HEIGHT;\n }\n\n private connectResizeObserver() {\n this.resizeObserver?.disconnect();\n if (typeof ResizeObserver === 'undefined') return;\n this.resizeObserver = new ResizeObserver(entries => {\n const entry = entries[0];\n if (!entry) return;\n if (this.resizeFrame) cancelAnimationFrame(this.resizeFrame);\n this.resizeFrame = requestAnimationFrame(() => {\n this.resizeFrame = undefined;\n this.applyMeasuredSize(entry.contentRect.width, entry.contentRect.height);\n });\n });\n this.resizeObserver.observe(this.el);\n this.measureHost();\n }\n\n private measureHost() {\n const bounds = this.el.getBoundingClientRect();\n this.applyMeasuredSize(bounds.width, bounds.height);\n }\n\n private applyMeasuredSize(width: number, height: number) {\n let changed = false;\n if (!this.width && width > 0) {\n const nextWidth = Math.round(width * 100) / 100;\n if (nextWidth !== this.surfaceWidth) {\n this.surfaceWidth = nextWidth;\n changed = true;\n }\n }\n if (!this.height && !this.aspectRatio && height > 0) {\n const nextHeight = Math.round(height * 100) / 100;\n if (nextHeight !== this.containerHeight) {\n this.containerHeight = nextHeight;\n changed = true;\n }\n }\n if (changed) {\n this.scheduleCompile();\n }\n }\n\n private scheduleCompile() {\n if (this.compileFrame) cancelAnimationFrame(this.compileFrame);\n this.compileFrame = requestAnimationFrame(() => {\n this.compileFrame = undefined;\n this.compile();\n });\n }\n\n private compile() {\n if (!this.definition || !(this.surfaceWidth > 0) || !(this.surfaceHeight > 0)) return;\n const previousKey = this.focusState?.primary.sceneKey;\n const scene = compileChartScene(\n this.definition,\n this.surfaceWidth,\n this.surfaceHeight,\n this.locale ?? document.documentElement.lang ?? 'en',\n text => this.measuredLabels.get(text) ?? { width: text.length * 7, height: 14 },\n resolveChartTheme(this.el),\n );\n this.scene = scene;\n if (previousKey) {\n const restored = scene.points.find(point => point.sceneKey === previousKey);\n if (restored && this.focusState) {\n const grouped = findChartFocus(\n scene.points,\n scene.focus,\n restored.x,\n restored.y,\n scene.maxFocusDistance,\n scene.arcHitRegions,\n );\n this.focusState = grouped\n ? { ...grouped, source: this.focusState.source }\n : undefined;\n } else {\n this.focusState = undefined;\n }\n }\n }\n\n private waitForFonts() {\n if (!document.fonts) return;\n void document.fonts.ready.then(() => {\n this.measuredLabels.clear();\n this.scheduleCompile();\n });\n }\n\n private measureRenderedLabels() {\n const labels = this.el.querySelectorAll<SVGTextElement>('[data-chart-measure]');\n let changed = false;\n labels.forEach(label => {\n const text = label.textContent ?? '';\n let box: DOMRect;\n try {\n box = label.getBBox();\n } catch {\n return;\n }\n const previous = this.measuredLabels.get(text);\n if (!previous || Math.abs(previous.width - box.width) > 0.5 || Math.abs(previous.height - box.height) > 0.5) {\n this.measuredLabels.set(text, { width: box.width, height: box.height });\n changed = true;\n }\n });\n if (changed) this.scheduleCompile();\n }\n\n private resolveFocus(x: number, y: number, source: ChartFocusSource) {\n if (!this.scene) return;\n const result = findChartFocus(\n this.scene.points,\n this.scene.focus,\n x,\n y,\n this.scene.maxFocusDistance,\n this.scene.arcHitRegions,\n );\n if (!result) {\n this.clearFocus(source);\n return;\n }\n if (\n this.focusState?.primary.sceneKey === result.primary.sceneKey &&\n this.focusState.source === source\n ) return;\n this.focusState = { ...result, source };\n this.dsChartFocusChange.emit({ ...result, source });\n }\n\n private clearFocus(source: ChartFocusSource) {\n if (!this.focusState) return;\n this.focusState = undefined;\n this.dsChartFocusChange.emit({ primary: null, points: [], source });\n }\n\n private onPointerMove = (event: PointerEvent) => {\n const svg = event.currentTarget as SVGSVGElement;\n const rect = svg.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n this.pointerAnchor = this.scene?.arcHitRegions.length ? { x, y } : undefined;\n this.resolveFocus(x, y, 'pointer');\n };\n\n private onPointerLeave = () => {\n this.pointerAnchor = undefined;\n this.clearFocus('pointer');\n };\n\n private keyboardPoints(): ChartPoint[] {\n if (!this.scene) return [];\n return [...this.scene.points].sort((a, b) => a.x - b.x || a.y - b.y);\n }\n\n private onKeyDown = (event: KeyboardEvent) => {\n const points = this.keyboardPoints();\n if (points.length === 0) return;\n if (event.key === 'Escape') {\n event.preventDefault();\n this.clearFocus('keyboard');\n return;\n }\n const current = this.focusState\n ? points.findIndex(point => point.sceneKey === this.focusState?.primary.sceneKey)\n : -1;\n let next: number | undefined;\n if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = points.length - 1;\n else if (event.key === 'ArrowRight' || event.key === 'ArrowDown') next = Math.min(points.length - 1, current + 1);\n else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') next = Math.max(0, current < 0 ? 0 : current - 1);\n else return;\n event.preventDefault();\n const point = points[next ?? 0] ?? points[0];\n this.resolveFocus(point.x, point.y, 'keyboard');\n };\n\n private renderNode(node: ChartSceneNode, className = 'chart__mark') {\n const resolvedClassName = node.className ?? className;\n const presentation = {\n fill: node.style.fill,\n stroke: node.style.stroke,\n opacity: node.style.opacity,\n 'fill-opacity': node.style.fillOpacity,\n 'stroke-opacity': node.style.strokeOpacity,\n 'stroke-width': node.style.strokeWidth,\n 'stroke-dasharray': node.style.strokeDasharray || undefined,\n };\n if (node.type === 'path') return <path key={node.key} class={resolvedClassName} d={node.d} transform={node.transform} {...presentation} />;\n if (node.type === 'rect') {\n return <rect key={node.key} class={resolvedClassName} x={node.x} y={node.y} width={node.width} height={node.height} rx={node.style.radius} {...presentation} />;\n }\n if (node.type === 'circle') return <circle key={node.key} class={resolvedClassName} cx={node.x} cy={node.y} r={node.radius} {...presentation} />;\n if (node.type === 'line') return <line key={node.key} class={resolvedClassName} x1={node.x1} x2={node.x2} y1={node.y1} y2={node.y2} {...presentation} />;\n return <text key={node.key} class={node.className ?? `${className} chart__text-mark`} data-chart-measure={node.measure ? '' : undefined} x={node.x} y={node.y} dx={node.dx} dy={node.dy} text-anchor={node.style.textAnchor} font-family={node.style.fontFamily} font-size={node.style.fontSize} font-weight={node.style.fontWeight} dominant-baseline={node.dominantBaseline ?? 'middle'} transform={node.rotate ? `rotate(${node.rotate} ${node.x} ${node.y})` : undefined} {...presentation}>{node.text}</text>;\n }\n\n private renderMarkLayers(scene: ChartScene) {\n const layers: Array<{ clipped: boolean; nodes: ChartSceneNode[] }> = [];\n scene.nodes.forEach(node => {\n const clipped = scene.clip && node.clipToPlot !== false;\n const current = layers[layers.length - 1];\n if (current?.clipped === clipped) current.nodes.push(node);\n else layers.push({ clipped, nodes: [node] });\n });\n return layers.map((layer, index) => (\n <g\n key={`marks-${index}`}\n class=\"chart__marks\"\n aria-hidden=\"true\"\n clip-path={layer.clipped ? `url(#${this.clipId})` : undefined}\n >\n {layer.nodes.map(node => this.renderNode(node))}\n </g>\n ));\n }\n\n private focusedDotPoints(scene: ChartScene): ChartPoint[] {\n if (!this.focusState) return [];\n const focusDotPointKeys = new Set(scene.focusDotPointKeys);\n return this.focusState.points.filter(point => focusDotPointKeys.has(point.sceneKey));\n }\n\n private tooltipContent(): { heading?: string; items: ChartTooltipItem[] } | undefined {\n if (!this.scene || !this.focusState || this.scene.tooltip === false) return undefined;\n const options: ChartTooltipOptions =\n typeof this.scene.tooltip === 'object' ? this.scene.tooltip : {};\n const locale = this.locale ?? document.documentElement.lang ?? 'en';\n const points = this.focusState.points;\n const formatValue = (point: ChartPoint) => {\n const value = point.value ?? point.yValue;\n return options.format?.(point, locale) ??\n (typeof value === 'number'\n ? new Intl.NumberFormat(locale, { maximumFractionDigits: 2 }).format(value)\n : String(value));\n };\n return {\n heading:\n points.length > 1\n ? options.formatGroupHeading?.(points, locale) ?? String(this.focusState.primary.xValue)\n : undefined,\n items: points.map(point =>\n options.formatGroupItem?.(point, locale) ?? {\n label: point.groupLabel ?? point.markId,\n value: formatValue(point),\n color: point.color,\n },\n ),\n };\n }\n\n private statusText(): string {\n const content = this.tooltipContent();\n if (!content) return '';\n return [content.heading, ...content.items.map(item => `${item.label}: ${item.value}`)]\n .filter(Boolean)\n .join('. ');\n }\n\n render() {\n const scene = this.scene;\n const tooltip = this.tooltipContent();\n const focus = this.focusState?.primary;\n const tooltipAnchor = focus &&\n this.focusState?.source === 'pointer' &&\n scene?.arcHitRegions.length &&\n this.pointerAnchor\n ? this.pointerAnchor\n : focus;\n const focusedDotPoints = scene ? this.focusedDotPoints(scene) : [];\n const groupedPointFocus = scene?.coordinate === 'cartesian' &&\n scene.focus === 'group-x' &&\n focusedDotPoints.length > 1;\n const center = focus && scene?.center?.focused\n ? scene.center.focused(focus, this.locale ?? document.documentElement.lang ?? 'en')\n : scene?.center;\n return (\n <Host\n class=\"chart\"\n style={{\n '--ds-chart-width': this.width ? `${this.width}px` : '100%',\n '--ds-chart-height': this.height || this.aspectRatio\n ? `${this.surfaceHeight}px`\n : 'var(--ds-chart-container-height, 320px)',\n }}\n >\n {this.description && <span id={this.descriptionId} class=\"chart__description\">{this.description}</span>}\n {scene && (\n /* eslint-disable-next-line local/prefer-ds-icon -- SVG is the chart renderer. */\n <svg\n class=\"chart__surface\"\n width={scene.width}\n height={scene.height}\n viewBox={`0 0 ${scene.width} ${scene.height}`}\n role=\"img\"\n aria-label={this.label || 'Chart'}\n aria-describedby={this.description ? this.descriptionId : undefined}\n tabindex={0}\n onPointerMove={this.onPointerMove}\n onPointerLeave={this.onPointerLeave}\n onKeyDown={this.onKeyDown}\n >\n <defs aria-hidden=\"true\">\n <clipPath id={this.clipId}>\n <rect x={scene.plot.left} y={scene.plot.top} width={scene.plot.width} height={scene.plot.height} />\n </clipPath>\n </defs>\n <rect\n class=\"chart__interaction-surface\"\n x=\"0\"\n y=\"0\"\n width={scene.width}\n height={scene.height}\n aria-hidden=\"true\"\n />\n <g class=\"chart__guides\" aria-hidden=\"true\">\n {scene.guides.map(node => this.renderNode(node, 'chart__grid chart__polar-guide'))}\n {scene.yAxis.line && <line class=\"chart__axis-line\" x1={scene.plot.left} x2={scene.plot.left} y1={scene.plot.top} y2={scene.plot.bottom} />}\n {scene.yAxis.ticks.map(tick => (\n <g key={`y-${tick.key}`}>\n {scene.yAxis.grid && <line class=\"chart__grid\" x1={scene.plot.left} x2={scene.plot.right} y1={tick.position} y2={tick.position} />}\n <line class=\"chart__axis-line chart__tick-stub\" x1={scene.plot.left - scene.yAxis.tickSize} x2={scene.plot.left} y1={tick.position} y2={tick.position} />\n {tick.labelVisible && <text data-chart-measure class=\"chart__tick chart__tick--y\" x={scene.plot.left - scene.yAxis.tickSize - scene.yAxis.tickPadding} y={tick.position} text-anchor=\"end\" dominant-baseline=\"middle\">{tick.label}</text>}\n </g>\n ))}\n {scene.xAxis.line && <line class=\"chart__axis-line\" x1={scene.plot.left} x2={scene.plot.right} y1={scene.plot.bottom} y2={scene.plot.bottom} />}\n {scene.xAxis.ticks.map(tick => (\n <g key={`x-${tick.key}`}>\n {scene.xAxis.grid && <line class=\"chart__grid\" x1={tick.position} x2={tick.position} y1={scene.plot.top} y2={scene.plot.bottom} />}\n <line class=\"chart__axis-line chart__tick-stub\" x1={tick.position} x2={tick.position} y1={scene.plot.bottom} y2={scene.plot.bottom + scene.xAxis.tickSize} />\n {tick.labelVisible && <text data-chart-measure class=\"chart__tick chart__tick--x\" x={tick.position} y={scene.plot.bottom + scene.xAxis.tickSize + scene.xAxis.tickPadding} text-anchor=\"middle\" dominant-baseline=\"hanging\" transform={scene.xAxis.rotate ? `rotate(${scene.xAxis.rotate} ${tick.position} ${scene.plot.bottom + scene.xAxis.tickSize + scene.xAxis.tickPadding})` : undefined}>{tick.label}</text>}\n </g>\n ))}\n {scene.xAxis.label && <text class=\"chart__axis-title\" x={(scene.plot.left + scene.plot.right) / 2} y={scene.height - 4} text-anchor=\"middle\">{scene.xAxis.label}</text>}\n {scene.yAxis.label && <text class=\"chart__axis-title\" x=\"8\" y={(scene.plot.top + scene.plot.bottom) / 2} text-anchor=\"middle\" dominant-baseline=\"middle\" transform={`rotate(-90 8 ${(scene.plot.top + scene.plot.bottom) / 2})`}>{scene.yAxis.label}</text>}\n {scene.coordinate === 'cartesian' && (\n <g class=\"chart__plot-frame\">\n <line class=\"chart__plot-boundary chart__plot-boundary--top\" x1={scene.plot.left} x2={scene.plot.right} y1={scene.plot.top} y2={scene.plot.top} />\n <line class=\"chart__plot-boundary chart__plot-boundary--right\" x1={scene.plot.right} x2={scene.plot.right} y1={scene.plot.top} y2={scene.plot.bottom} />\n </g>\n )}\n </g>\n {this.renderMarkLayers(scene)}\n {groupedPointFocus && focus && (\n <line\n class=\"chart__focus-guide\"\n x1={focus.x}\n x2={focus.x}\n y1={scene.plot.top}\n y2={scene.plot.bottom}\n aria-hidden=\"true\"\n />\n )}\n {focusedDotPoints.map(point => (\n <circle\n key={`focus-${point.sceneKey}`}\n class=\"chart__focus-point\"\n cx={point.x}\n cy={point.y}\n r={scene.focusDotCircleRadius}\n fill={point.color}\n stroke=\"var(--color-background-primary)\"\n stroke-width={scene.focusDotHaloWidth}\n aria-hidden=\"true\"\n />\n ))}\n {focus && focusedDotPoints.length === 0 && <circle class=\"chart__focus\" cx={focus.x} cy={focus.y} r=\"6\" aria-hidden=\"true\" />}\n {center?.value && (\n <text\n class=\"chart__center-value\"\n x={(scene.plot.left + scene.plot.right) / 2}\n y={(scene.plot.top + scene.plot.bottom) / 2 - (center.caption ? 10 : 0)}\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n aria-hidden=\"true\"\n >\n {center.value}\n </text>\n )}\n {center?.caption && (\n <text\n class=\"chart__center-caption\"\n x={(scene.plot.left + scene.plot.right) / 2}\n y={(scene.plot.top + scene.plot.bottom) / 2 + 14}\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n aria-hidden=\"true\"\n >\n {center.caption}\n </text>\n )}\n </svg>\n )}\n {tooltip && tooltipAnchor && (\n <ds-tooltip-chart\n heading={tooltip.heading}\n items={tooltip.items}\n x={tooltipAnchor.x}\n y={tooltipAnchor.y}\n />\n )}\n <span class=\"chart__status\" aria-live=\"polite\" aria-atomic=\"true\">{this.statusText()}</span>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}