minerva-design 1.0.2 → 1.2.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 (354) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +21 -19
  3. package/dist/charts/canvas.d.cts +7 -0
  4. package/dist/charts/canvas.d.ts +7 -0
  5. package/dist/charts/core.cjs +1 -0
  6. package/dist/charts/core.d.cts +7 -0
  7. package/dist/charts/core.d.ts +7 -0
  8. package/dist/charts/core.js +6 -0
  9. package/dist/charts/engine/axis.cjs +2 -0
  10. package/dist/charts/engine/axis.cjs.map +1 -0
  11. package/dist/charts/engine/axis.d.cts +13 -0
  12. package/dist/charts/engine/axis.d.ts +13 -0
  13. package/dist/charts/engine/axis.js +38 -0
  14. package/dist/charts/engine/axis.js.map +1 -0
  15. package/dist/charts/engine/canvas.cjs +2 -0
  16. package/dist/charts/engine/canvas.cjs.map +1 -0
  17. package/dist/charts/engine/canvas.d.cts +85 -0
  18. package/dist/charts/engine/canvas.d.ts +85 -0
  19. package/dist/charts/engine/canvas.js +165 -0
  20. package/dist/charts/engine/canvas.js.map +1 -0
  21. package/dist/charts/engine/chart.cjs +3 -0
  22. package/dist/charts/engine/chart.cjs.map +1 -0
  23. package/dist/charts/engine/chart.d.cts +6 -0
  24. package/dist/charts/engine/chart.d.ts +6 -0
  25. package/dist/charts/engine/chart.js +566 -0
  26. package/dist/charts/engine/chart.js.map +1 -0
  27. package/dist/charts/engine/color.cjs +2 -0
  28. package/dist/charts/engine/color.cjs.map +1 -0
  29. package/dist/charts/engine/color.d.cts +33 -0
  30. package/dist/charts/engine/color.d.ts +33 -0
  31. package/dist/charts/engine/color.js +167 -0
  32. package/dist/charts/engine/color.js.map +1 -0
  33. package/dist/charts/engine/controller.cjs +3 -0
  34. package/dist/charts/engine/controller.cjs.map +1 -0
  35. package/dist/charts/engine/controller.d.cts +182 -0
  36. package/dist/charts/engine/controller.d.ts +182 -0
  37. package/dist/charts/engine/controller.js +528 -0
  38. package/dist/charts/engine/controller.js.map +1 -0
  39. package/dist/charts/engine/data.cjs +2 -0
  40. package/dist/charts/engine/data.cjs.map +1 -0
  41. package/dist/charts/engine/data.d.cts +29 -0
  42. package/dist/charts/engine/data.d.ts +29 -0
  43. package/dist/charts/engine/data.js +104 -0
  44. package/dist/charts/engine/data.js.map +1 -0
  45. package/dist/charts/engine/decimate.cjs +2 -0
  46. package/dist/charts/engine/decimate.cjs.map +1 -0
  47. package/dist/charts/engine/decimate.d.cts +13 -0
  48. package/dist/charts/engine/decimate.d.ts +13 -0
  49. package/dist/charts/engine/decimate.js +28 -0
  50. package/dist/charts/engine/decimate.js.map +1 -0
  51. package/dist/charts/engine/dom.cjs +2 -0
  52. package/dist/charts/engine/dom.cjs.map +1 -0
  53. package/dist/charts/engine/dom.d.cts +21 -0
  54. package/dist/charts/engine/dom.d.ts +21 -0
  55. package/dist/charts/engine/dom.js +125 -0
  56. package/dist/charts/engine/dom.js.map +1 -0
  57. package/dist/charts/engine/format.cjs +2 -0
  58. package/dist/charts/engine/format.cjs.map +1 -0
  59. package/dist/charts/engine/format.d.cts +9 -0
  60. package/dist/charts/engine/format.d.ts +9 -0
  61. package/dist/charts/engine/format.js +34 -0
  62. package/dist/charts/engine/format.js.map +1 -0
  63. package/dist/charts/engine/items.cjs +2 -0
  64. package/dist/charts/engine/items.cjs.map +1 -0
  65. package/dist/charts/engine/items.d.cts +8 -0
  66. package/dist/charts/engine/items.d.ts +8 -0
  67. package/dist/charts/engine/items.js +91 -0
  68. package/dist/charts/engine/items.js.map +1 -0
  69. package/dist/charts/engine/layout.cjs +2 -0
  70. package/dist/charts/engine/layout.cjs.map +1 -0
  71. package/dist/charts/engine/layout.d.cts +37 -0
  72. package/dist/charts/engine/layout.d.ts +37 -0
  73. package/dist/charts/engine/layout.js +26 -0
  74. package/dist/charts/engine/layout.js.map +1 -0
  75. package/dist/charts/engine/model.cjs +2 -0
  76. package/dist/charts/engine/model.cjs.map +1 -0
  77. package/dist/charts/engine/model.d.cts +74 -0
  78. package/dist/charts/engine/model.d.ts +74 -0
  79. package/dist/charts/engine/model.js +175 -0
  80. package/dist/charts/engine/model.js.map +1 -0
  81. package/dist/charts/engine/overlay.cjs +2 -0
  82. package/dist/charts/engine/overlay.cjs.map +1 -0
  83. package/dist/charts/engine/overlay.d.cts +78 -0
  84. package/dist/charts/engine/overlay.d.ts +78 -0
  85. package/dist/charts/engine/overlay.js +137 -0
  86. package/dist/charts/engine/overlay.js.map +1 -0
  87. package/dist/charts/engine/presets.cjs +3 -0
  88. package/dist/charts/engine/presets.cjs.map +1 -0
  89. package/dist/charts/engine/presets.d.cts +103 -0
  90. package/dist/charts/engine/presets.d.ts +103 -0
  91. package/dist/charts/engine/presets.js +153 -0
  92. package/dist/charts/engine/presets.js.map +1 -0
  93. package/dist/charts/engine/renderers/canvas2d.cjs +2 -0
  94. package/dist/charts/engine/renderers/canvas2d.cjs.map +1 -0
  95. package/dist/charts/engine/renderers/canvas2d.d.cts +20 -0
  96. package/dist/charts/engine/renderers/canvas2d.d.ts +20 -0
  97. package/dist/charts/engine/renderers/canvas2d.js +193 -0
  98. package/dist/charts/engine/renderers/canvas2d.js.map +1 -0
  99. package/dist/charts/engine/renderers/detect.cjs +2 -0
  100. package/dist/charts/engine/renderers/detect.cjs.map +1 -0
  101. package/dist/charts/engine/renderers/detect.d.cts +12 -0
  102. package/dist/charts/engine/renderers/detect.d.ts +12 -0
  103. package/dist/charts/engine/renderers/detect.js +33 -0
  104. package/dist/charts/engine/renderers/detect.js.map +1 -0
  105. package/dist/charts/engine/renderers/range.cjs +2 -0
  106. package/dist/charts/engine/renderers/range.cjs.map +1 -0
  107. package/dist/charts/engine/renderers/range.d.cts +5 -0
  108. package/dist/charts/engine/renderers/range.d.ts +5 -0
  109. package/dist/charts/engine/renderers/range.js +32 -0
  110. package/dist/charts/engine/renderers/range.js.map +1 -0
  111. package/dist/charts/engine/renderers/shaders.cjs +266 -0
  112. package/dist/charts/engine/renderers/shaders.cjs.map +1 -0
  113. package/dist/charts/engine/renderers/shaders.d.cts +20 -0
  114. package/dist/charts/engine/renderers/shaders.d.ts +20 -0
  115. package/dist/charts/engine/renderers/shaders.js +251 -0
  116. package/dist/charts/engine/renderers/shaders.js.map +1 -0
  117. package/dist/charts/engine/renderers/types.cjs +2 -0
  118. package/dist/charts/engine/renderers/types.cjs.map +1 -0
  119. package/dist/charts/engine/renderers/types.d.cts +83 -0
  120. package/dist/charts/engine/renderers/types.d.ts +83 -0
  121. package/dist/charts/engine/renderers/types.js +6 -0
  122. package/dist/charts/engine/renderers/types.js.map +1 -0
  123. package/dist/charts/engine/renderers/webgl2.cjs +2 -0
  124. package/dist/charts/engine/renderers/webgl2.cjs.map +1 -0
  125. package/dist/charts/engine/renderers/webgl2.d.cts +5 -0
  126. package/dist/charts/engine/renderers/webgl2.d.ts +5 -0
  127. package/dist/charts/engine/renderers/webgl2.js +134 -0
  128. package/dist/charts/engine/renderers/webgl2.js.map +1 -0
  129. package/dist/charts/engine/renderers/webgpu.cjs +2 -0
  130. package/dist/charts/engine/renderers/webgpu.cjs.map +1 -0
  131. package/dist/charts/engine/renderers/webgpu.d.cts +6 -0
  132. package/dist/charts/engine/renderers/webgpu.d.ts +6 -0
  133. package/dist/charts/engine/renderers/webgpu.js +220 -0
  134. package/dist/charts/engine/renderers/webgpu.js.map +1 -0
  135. package/dist/charts/engine/scale.cjs +2 -0
  136. package/dist/charts/engine/scale.cjs.map +1 -0
  137. package/dist/charts/engine/scale.d.cts +13 -0
  138. package/dist/charts/engine/scale.d.ts +13 -0
  139. package/dist/charts/engine/scale.js +37 -0
  140. package/dist/charts/engine/scale.js.map +1 -0
  141. package/dist/charts/engine/scene.cjs +2 -0
  142. package/dist/charts/engine/scene.cjs.map +1 -0
  143. package/dist/charts/engine/scene.d.cts +89 -0
  144. package/dist/charts/engine/scene.d.ts +89 -0
  145. package/dist/charts/engine/scene.js +241 -0
  146. package/dist/charts/engine/scene.js.map +1 -0
  147. package/dist/charts/engine/spatial.cjs +2 -0
  148. package/dist/charts/engine/spatial.cjs.map +1 -0
  149. package/dist/charts/engine/spatial.d.cts +18 -0
  150. package/dist/charts/engine/spatial.d.ts +18 -0
  151. package/dist/charts/engine/spatial.js +53 -0
  152. package/dist/charts/engine/spatial.js.map +1 -0
  153. package/dist/charts/engine/theme.cjs +2 -0
  154. package/dist/charts/engine/theme.cjs.map +1 -0
  155. package/dist/charts/engine/theme.d.cts +45 -0
  156. package/dist/charts/engine/theme.d.ts +45 -0
  157. package/dist/charts/engine/theme.js +86 -0
  158. package/dist/charts/engine/theme.js.map +1 -0
  159. package/dist/charts/engine/time.cjs +2 -0
  160. package/dist/charts/engine/time.cjs.map +1 -0
  161. package/dist/charts/engine/time.d.cts +10 -0
  162. package/dist/charts/engine/time.d.ts +10 -0
  163. package/dist/charts/engine/time.js +189 -0
  164. package/dist/charts/engine/time.js.map +1 -0
  165. package/dist/charts/engine/types.d.cts +356 -0
  166. package/dist/charts/engine/types.d.ts +356 -0
  167. package/dist/charts/engine/viewport.cjs +2 -0
  168. package/dist/charts/engine/viewport.cjs.map +1 -0
  169. package/dist/charts/engine/viewport.d.cts +12 -0
  170. package/dist/charts/engine/viewport.d.ts +12 -0
  171. package/dist/charts/engine/viewport.js +15 -0
  172. package/dist/charts/engine/viewport.js.map +1 -0
  173. package/dist/charts/index.cjs +1 -0
  174. package/dist/charts/index.d.cts +4 -0
  175. package/dist/charts/index.d.ts +4 -0
  176. package/dist/charts/index.js +10 -0
  177. package/dist/charts/react/Chart.cjs +2 -0
  178. package/dist/charts/react/Chart.cjs.map +1 -0
  179. package/dist/charts/react/Chart.d.cts +35 -0
  180. package/dist/charts/react/Chart.d.ts +35 -0
  181. package/dist/charts/react/Chart.js +117 -0
  182. package/dist/charts/react/Chart.js.map +1 -0
  183. package/dist/charts/react/charts.cjs +2 -0
  184. package/dist/charts/react/charts.cjs.map +1 -0
  185. package/dist/charts/react/charts.d.cts +13 -0
  186. package/dist/charts/react/charts.d.ts +13 -0
  187. package/dist/charts/react/charts.js +133 -0
  188. package/dist/charts/react/charts.js.map +1 -0
  189. package/dist/charts/react/types.d.cts +136 -0
  190. package/dist/charts/react/types.d.ts +136 -0
  191. package/dist/native/charts/src/canvas.cjs +1 -0
  192. package/dist/native/charts/src/canvas.js +6 -0
  193. package/dist/native/charts/src/engine/axis.cjs +2 -0
  194. package/dist/native/charts/src/engine/axis.cjs.map +1 -0
  195. package/dist/native/charts/src/engine/axis.js +38 -0
  196. package/dist/native/charts/src/engine/axis.js.map +1 -0
  197. package/dist/native/charts/src/engine/canvas.cjs +1 -0
  198. package/dist/native/charts/src/engine/canvas.js +1 -0
  199. package/dist/native/charts/src/engine/color.cjs +2 -0
  200. package/dist/native/charts/src/engine/color.cjs.map +1 -0
  201. package/dist/native/charts/src/engine/color.js +130 -0
  202. package/dist/native/charts/src/engine/color.js.map +1 -0
  203. package/dist/native/charts/src/engine/controller.cjs +3 -0
  204. package/dist/native/charts/src/engine/controller.cjs.map +1 -0
  205. package/dist/native/charts/src/engine/controller.js +528 -0
  206. package/dist/native/charts/src/engine/controller.js.map +1 -0
  207. package/dist/native/charts/src/engine/data.cjs +2 -0
  208. package/dist/native/charts/src/engine/data.cjs.map +1 -0
  209. package/dist/native/charts/src/engine/data.js +104 -0
  210. package/dist/native/charts/src/engine/data.js.map +1 -0
  211. package/dist/native/charts/src/engine/decimate.cjs +2 -0
  212. package/dist/native/charts/src/engine/decimate.cjs.map +1 -0
  213. package/dist/native/charts/src/engine/decimate.js +28 -0
  214. package/dist/native/charts/src/engine/decimate.js.map +1 -0
  215. package/dist/native/charts/src/engine/format.cjs +2 -0
  216. package/dist/native/charts/src/engine/format.cjs.map +1 -0
  217. package/dist/native/charts/src/engine/format.js +34 -0
  218. package/dist/native/charts/src/engine/format.js.map +1 -0
  219. package/dist/native/charts/src/engine/layout.cjs +2 -0
  220. package/dist/native/charts/src/engine/layout.cjs.map +1 -0
  221. package/dist/native/charts/src/engine/layout.js +26 -0
  222. package/dist/native/charts/src/engine/layout.js.map +1 -0
  223. package/dist/native/charts/src/engine/model.cjs +2 -0
  224. package/dist/native/charts/src/engine/model.cjs.map +1 -0
  225. package/dist/native/charts/src/engine/model.js +175 -0
  226. package/dist/native/charts/src/engine/model.js.map +1 -0
  227. package/dist/native/charts/src/engine/overlay.cjs +2 -0
  228. package/dist/native/charts/src/engine/overlay.cjs.map +1 -0
  229. package/dist/native/charts/src/engine/overlay.js +49 -0
  230. package/dist/native/charts/src/engine/overlay.js.map +1 -0
  231. package/dist/native/charts/src/engine/presets.cjs +3 -0
  232. package/dist/native/charts/src/engine/presets.cjs.map +1 -0
  233. package/dist/native/charts/src/engine/presets.js +147 -0
  234. package/dist/native/charts/src/engine/presets.js.map +1 -0
  235. package/dist/native/charts/src/engine/scale.cjs +2 -0
  236. package/dist/native/charts/src/engine/scale.cjs.map +1 -0
  237. package/dist/native/charts/src/engine/scale.js +37 -0
  238. package/dist/native/charts/src/engine/scale.js.map +1 -0
  239. package/dist/native/charts/src/engine/scene.cjs +2 -0
  240. package/dist/native/charts/src/engine/scene.cjs.map +1 -0
  241. package/dist/native/charts/src/engine/scene.js +241 -0
  242. package/dist/native/charts/src/engine/scene.js.map +1 -0
  243. package/dist/native/charts/src/engine/spatial.cjs +2 -0
  244. package/dist/native/charts/src/engine/spatial.cjs.map +1 -0
  245. package/dist/native/charts/src/engine/spatial.js +53 -0
  246. package/dist/native/charts/src/engine/spatial.js.map +1 -0
  247. package/dist/native/charts/src/engine/theme.cjs +2 -0
  248. package/dist/native/charts/src/engine/theme.cjs.map +1 -0
  249. package/dist/native/charts/src/engine/theme.js +62 -0
  250. package/dist/native/charts/src/engine/theme.js.map +1 -0
  251. package/dist/native/charts/src/engine/time.cjs +2 -0
  252. package/dist/native/charts/src/engine/time.cjs.map +1 -0
  253. package/dist/native/charts/src/engine/time.js +189 -0
  254. package/dist/native/charts/src/engine/time.js.map +1 -0
  255. package/dist/native/charts/src/engine/viewport.cjs +2 -0
  256. package/dist/native/charts/src/engine/viewport.cjs.map +1 -0
  257. package/dist/native/charts/src/engine/viewport.js +12 -0
  258. package/dist/native/charts/src/engine/viewport.js.map +1 -0
  259. package/dist/native/components/Chart/ChartBase.cjs +2 -0
  260. package/dist/native/components/Chart/ChartBase.cjs.map +1 -0
  261. package/dist/native/components/Chart/ChartBase.d.cts +29 -0
  262. package/dist/native/components/Chart/ChartBase.d.ts +29 -0
  263. package/dist/native/components/Chart/ChartBase.js +287 -0
  264. package/dist/native/components/Chart/ChartBase.js.map +1 -0
  265. package/dist/native/components/Chart/charts.cjs +2 -0
  266. package/dist/native/components/Chart/charts.cjs.map +1 -0
  267. package/dist/native/components/Chart/charts.d.cts +19 -0
  268. package/dist/native/components/Chart/charts.d.ts +19 -0
  269. package/dist/native/components/Chart/charts.js +173 -0
  270. package/dist/native/components/Chart/charts.js.map +1 -0
  271. package/dist/native/components/Chart/index.cjs +1 -0
  272. package/dist/native/components/Chart/index.d.cts +2 -0
  273. package/dist/native/components/Chart/index.d.ts +2 -0
  274. package/dist/native/components/Chart/index.js +2 -0
  275. package/dist/native/components/Chart/measure.cjs +2 -0
  276. package/dist/native/components/Chart/measure.cjs.map +1 -0
  277. package/dist/native/components/Chart/measure.d.cts +5 -0
  278. package/dist/native/components/Chart/measure.d.ts +5 -0
  279. package/dist/native/components/Chart/measure.js +11 -0
  280. package/dist/native/components/Chart/measure.js.map +1 -0
  281. package/dist/native/components/Chart/scene.cjs +2 -0
  282. package/dist/native/components/Chart/scene.cjs.map +1 -0
  283. package/dist/native/components/Chart/scene.d.cts +41 -0
  284. package/dist/native/components/Chart/scene.d.ts +41 -0
  285. package/dist/native/components/Chart/scene.js +419 -0
  286. package/dist/native/components/Chart/scene.js.map +1 -0
  287. package/dist/native/components/Chart/theme.cjs +2 -0
  288. package/dist/native/components/Chart/theme.cjs.map +1 -0
  289. package/dist/native/components/Chart/theme.d.cts +10 -0
  290. package/dist/native/components/Chart/theme.d.ts +10 -0
  291. package/dist/native/components/Chart/theme.js +10 -0
  292. package/dist/native/components/Chart/theme.js.map +1 -0
  293. package/dist/native/components/Chart/types.d.cts +129 -0
  294. package/dist/native/components/Chart/types.d.ts +129 -0
  295. package/dist/native/index.cjs +1 -1
  296. package/dist/native/index.d.cts +1 -0
  297. package/dist/native/index.d.ts +1 -0
  298. package/dist/native/index.js +6 -4
  299. package/dist/native/manifest.d.cts +7 -0
  300. package/dist/native/manifest.d.ts +7 -0
  301. package/dist/native/source/components/Chart/ChartBase.tsx +545 -0
  302. package/dist/native/source/components/Chart/charts.tsx +291 -0
  303. package/dist/native/source/components/Chart/index.ts +8 -0
  304. package/dist/native/source/components/Chart/measure.ts +50 -0
  305. package/dist/native/source/components/Chart/scene.tsx +987 -0
  306. package/dist/native/source/components/Chart/theme.ts +16 -0
  307. package/dist/native/source/components/Chart/types.ts +194 -0
  308. package/dist/native/source/index.ts +1 -0
  309. package/dist/native/source/manifest.ts +14 -0
  310. package/dist/taro/charts.d.ts +144 -0
  311. package/dist/taro/index.d.ts +1 -0
  312. package/dist/taro/index.js +3064 -618
  313. package/dist/uni/BarChart.vue +75 -0
  314. package/dist/uni/BarChart.vue.d.ts +111 -0
  315. package/dist/uni/Chart.vue +68 -0
  316. package/dist/uni/Chart.vue.d.ts +100 -0
  317. package/dist/uni/LineChart.vue +75 -0
  318. package/dist/uni/LineChart.vue.d.ts +111 -0
  319. package/dist/uni/ProgressIndicator.vue.d.ts +1 -1
  320. package/dist/uni/QuadrantChart.vue +184 -0
  321. package/dist/uni/QuadrantChart.vue.d.ts +173 -0
  322. package/dist/uni/ScatterChart.vue +69 -0
  323. package/dist/uni/ScatterChart.vue.d.ts +100 -0
  324. package/dist/uni/chart-canvas.d.ts +68 -0
  325. package/dist/uni/chart-canvas.js +363 -0
  326. package/dist/uni/chart-types.d.ts +135 -0
  327. package/dist/uni/chart-types.js +84 -0
  328. package/dist/uni/charts-canvas.d.ts +1 -0
  329. package/dist/uni/charts-canvas.js +8 -0
  330. package/dist/uni/index.d.ts +6 -0
  331. package/dist/uni/index.js +6 -0
  332. package/dist/weapp/bar-chart/index.js +1 -0
  333. package/dist/weapp/bar-chart/index.json +1 -0
  334. package/dist/weapp/bar-chart/index.wxml +1 -0
  335. package/dist/weapp/bar-chart/index.wxss +1 -0
  336. package/dist/weapp/chart/index.js +1 -0
  337. package/dist/weapp/chart/index.json +1 -0
  338. package/dist/weapp/chart/index.wxml +1 -0
  339. package/dist/weapp/chart/index.wxss +1 -0
  340. package/dist/weapp/controls.js +4019 -266
  341. package/dist/weapp/line-chart/index.js +1 -0
  342. package/dist/weapp/line-chart/index.json +1 -0
  343. package/dist/weapp/line-chart/index.wxml +1 -0
  344. package/dist/weapp/line-chart/index.wxss +1 -0
  345. package/dist/weapp/quadrant-chart/index.js +1 -0
  346. package/dist/weapp/quadrant-chart/index.json +1 -0
  347. package/dist/weapp/quadrant-chart/index.wxml +1 -0
  348. package/dist/weapp/quadrant-chart/index.wxss +1 -0
  349. package/dist/weapp/scatter-chart/index.js +1 -0
  350. package/dist/weapp/scatter-chart/index.json +1 -0
  351. package/dist/weapp/scatter-chart/index.wxml +1 -0
  352. package/dist/weapp/scatter-chart/index.wxss +1 -0
  353. package/dist/weapp/types.d.ts +295 -0
  354. package/package.json +48 -2
@@ -0,0 +1,528 @@
1
+ import { lowerBound as e } from "./data.js";
2
+ import { toCss as t } from "./color.js";
3
+ import { createScales as n } from "./layout.js";
4
+ import { buildModel as r } from "./model.js";
5
+ import { font as i, placeLabels as a, textBox as o } from "./overlay.js";
6
+ import { decimateMinMax as s } from "./decimate.js";
7
+ import { collectPointLabels as c, dotSize as l, hitTest as u, hoverMarks as d, layoutChart as f, resolveAnnotations as p, sameHover as m, showsCrosshair as h, tooltipContent as g } from "./scene.js";
8
+ import { createTheme as _ } from "./theme.js";
9
+ import { clampRange as v, panRange as y, sameRange as b, zoomRange as x } from "./viewport.js";
10
+ //#region src/engine/controller.ts
11
+ var S = (e) => ({
12
+ x: [e.x[0], e.x[1]],
13
+ y: [e.y[0], e.y[1]]
14
+ }), ee = 6, te = 10, ne = 320, C = 20, w = (e) => {
15
+ let t = e.options, s = e.theme, w = _(s, t.palette), T = /* @__PURE__ */ new Map(), E = /* @__PURE__ */ new Set(), D = {}, O, k = {
16
+ x: [0, 1],
17
+ y: [0, 1]
18
+ }, A = !1, j = 0, M = 0, N = [], P = null, F = !0, I = "", L = !1, R = null, z = /* @__PURE__ */ new Map(), B = null, V = {
19
+ time: 0,
20
+ x: 0,
21
+ y: 0
22
+ }, H = (e, t) => {
23
+ D[e]?.forEach((e) => e(t));
24
+ }, U = () => {
25
+ F = !0, L || e.onInvalidate?.();
26
+ }, re = () => {
27
+ let e = t.interaction;
28
+ if (e === !1) return null;
29
+ let n = typeof e == "object" ? e : {};
30
+ return {
31
+ pan: n.pan ?? !0,
32
+ dragPoints: n.dragPoints ?? !1
33
+ };
34
+ }, W = (t, n = w.fontSize, r = 400) => e.measureText(t, i(w, n, r)), G = () => {
35
+ O = r(t, w, E, T);
36
+ let { base: e, minSpan: n } = O;
37
+ A ? (k = {
38
+ x: O.zoom.x ? v(k.x, e.x, n.x) : [...e.x],
39
+ y: O.zoom.y ? v(k.y, e.y, n.y) : [...e.y]
40
+ }, A = !b(k.x, e.x) || !b(k.y, e.y)) : k = S(e), N = p(t.annotations, w), R && (R.event.items.every((e) => O.series[e.seriesIndex] && !O.series[e.seriesIndex].hidden && e.index < O.series[e.seriesIndex].cols.count) || J(null)), U();
41
+ }, ie = () => {
42
+ let e = t.legend, n = t.series.filter((e) => e.name).length;
43
+ if (!(e === void 0 ? n > 1 : e)) return null;
44
+ let r = typeof e == "object" ? e : {}, i = r.position === "bottom" ? "bottom" : "top", a = [], o = 4, s = 0;
45
+ for (let e of O.series) {
46
+ let t = 14 + W(e.name, 12) + 8;
47
+ o + t > j - 4 && o > 4 && (o = 4, s++), a.push({
48
+ id: e.id,
49
+ name: e.name,
50
+ color: e.colorCss,
51
+ shape: e.type === "scatter" ? "dot" : e.type === "line" ? "line" : "square",
52
+ hidden: e.hidden,
53
+ box: {
54
+ x: o,
55
+ y: s * C,
56
+ width: t,
57
+ height: C
58
+ }
59
+ }), o += t + 10;
60
+ }
61
+ let c = (s + 1) * C + 6;
62
+ if (i === "bottom") for (let e of a) e.box.y += M - c + 6;
63
+ return {
64
+ entries: a,
65
+ position: i,
66
+ toggle: r.toggle ?? !0,
67
+ height: c
68
+ };
69
+ }, ae = (e, n, r) => {
70
+ let i = t.tooltip;
71
+ if (i === !1) return null;
72
+ let a = typeof i == "object" ? i.render : void 0, o = null;
73
+ if (a) {
74
+ let t = a(e);
75
+ if (t === null || t === "") return null;
76
+ typeof t == "string" && (o = t.split("\n"));
77
+ }
78
+ let s = g(O, e, P?.layout.yTicks ?? null), c = 0, l;
79
+ if (o) {
80
+ for (let e of o) c = Math.max(c, W(e, 12));
81
+ l = o.length;
82
+ } else {
83
+ c = W(s.title, 12, 600) + (s.titleColor ? 14 : 0);
84
+ for (let e of s.rows) c = Math.max(c, (e.color ? 14 : 0) + W(e.name, 12) + 16 + W(e.value, 12, 600));
85
+ l = 1 + s.rows.length;
86
+ }
87
+ let u = Math.ceil(Math.max(c, 96) + 16 + 4), d = l * 18 + 16, f = n + 14;
88
+ f + u > j - 4 && (f = n - 14 - u), f = Math.max(4, Math.min(f, j - u - 4));
89
+ let p = Math.max(4, Math.min(r - d / 2, M - d - 4));
90
+ return {
91
+ content: s,
92
+ text: o,
93
+ box: {
94
+ x: f,
95
+ y: p,
96
+ width: u,
97
+ height: d
98
+ },
99
+ lineHeight: 18,
100
+ padding: 8
101
+ };
102
+ }, oe = () => {
103
+ if (j <= 0 || M <= 0) return null;
104
+ let e = ie(), n = e?.position === "top" ? e.height : 0, r = f({
105
+ model: O,
106
+ view: k,
107
+ theme: w,
108
+ width: j,
109
+ height: M - (e?.height ?? 0),
110
+ padding: t.padding,
111
+ top: n,
112
+ measure: (e) => W(e)
113
+ }), i = c(O, k, r.scales), s = [], u = w.fontSize + 4;
114
+ for (let e of N) {
115
+ if (e.type === "text" && e.text) {
116
+ s.push(o(e, r.scales, W(e.text, w.fontSize, e.weight), u));
117
+ continue;
118
+ }
119
+ if (e.type !== "rect" || !e.label) continue;
120
+ let t = r.scales, n = e.x0 === void 0 ? r.plot.x : t.xToPx(e.x0), i = e.x1 === void 0 ? r.plot.x + r.plot.width : t.xToPx(e.x1), a = e.y0 === void 0 ? r.plot.y + r.plot.height : t.yToPx(e.y0), c = e.y1 === void 0 ? r.plot.y : t.yToPx(e.y1), l = W(e.label, w.fontSize + 1, 600), d = Math.min(n, i), f = Math.max(n, i), p = Math.min(a, c), m = Math.max(a, c), h = e.labelPosition;
121
+ s.push({
122
+ x: h.endsWith("left") ? d + 10 : h.endsWith("right") ? f - 10 - l : (d + f - l) / 2,
123
+ y: h.startsWith("top") ? p + 10 : h.startsWith("bottom") ? m - 10 - u : (p + m - u) / 2,
124
+ width: l,
125
+ height: u
126
+ });
127
+ }
128
+ let p = a(i, r.plot, (e) => W(e), u - 2, s), m = {
129
+ width: j,
130
+ height: M,
131
+ theme: w,
132
+ model: O,
133
+ view: S(k),
134
+ layout: r,
135
+ annotations: N,
136
+ pointLabels: p,
137
+ legend: e,
138
+ hover: null,
139
+ dragging: null
140
+ };
141
+ if (P = m, R) {
142
+ let e = h(O, R.event, t.crosshair), n = r.scales.xToPx(R.event.items[0].x);
143
+ m.hover = {
144
+ event: R.event,
145
+ marks: d(O, r.scales, R.event),
146
+ crosshairX: e && n >= r.plot.x && n <= r.plot.x + r.plot.width ? n : null,
147
+ tooltip: B?.kind === "pan" || B?.kind === "point" ? null : ae(R.event, R.x, R.y)
148
+ };
149
+ }
150
+ if (B?.kind === "point") {
151
+ let e = O.series[B.item.seriesIndex];
152
+ m.dragging = {
153
+ x: B.x,
154
+ y: B.y,
155
+ color: B.item.color,
156
+ size: (e ? l(e, B.item.index) : 8) + 6
157
+ };
158
+ }
159
+ let g = r.plot, _ = `${g.x},${g.y},${g.width},${g.height}`;
160
+ return _ !== I && (I = _, H("layout", { ...g })), m;
161
+ }, K = () => ((F || !P) && (F = !1, P = oe()), P), q = () => K()?.layout.scales ?? null, J = (e) => {
162
+ let t = !m(R?.event ?? null, e?.event ?? null);
163
+ R = e, U(), t && H("hover", e ? e.event : null);
164
+ }, Y = (e, t, n) => {
165
+ let r = q();
166
+ return r ? u(O, r, P?.layout.xTicks ?? null, e, t, n ? 8 : 0) : null;
167
+ }, X = (e, t) => {
168
+ let n = q()?.plot;
169
+ return !!n && e >= n.x && e <= n.x + n.width && t >= n.y && t <= n.y + n.height;
170
+ }, Z = (e, t) => {
171
+ let n = q();
172
+ if (!n) return null;
173
+ let { plot: r } = n, i = Math.max(r.x, Math.min(r.x + r.width, e)), a = Math.max(r.y, Math.min(r.y + r.height, t));
174
+ return {
175
+ x: n.pxToX(i),
176
+ y: n.pxToY(a)
177
+ };
178
+ }, Q = (e, t) => {
179
+ let { base: n, minSpan: r } = O;
180
+ k = {
181
+ x: v(e.x, n.x, r.x),
182
+ y: v(e.y, n.y, r.y)
183
+ }, A = !b(k.x, n.x) || !b(k.y, n.y), t && H("zoom", S(k)), U();
184
+ }, se = (e, t, n) => {
185
+ let r = q();
186
+ if (!r || !O.zoom.x && !O.zoom.y) return;
187
+ let i = S(k);
188
+ O.zoom.x && (i.x = x(k.x, r.pxToX(e), n)), O.zoom.y && (i.y = x(k.y, r.pxToY(t), n)), Q(i, !0);
189
+ }, $ = () => {
190
+ A && Q(S(O.base), !0);
191
+ }, ce = (e, t) => K()?.legend?.entries.find((n) => e >= n.box.x && e <= n.box.x + n.box.width && t >= n.box.y && t <= n.box.y + n.box.height) ?? null, le = (e) => {
192
+ E.has(e) ? E.delete(e) : E.add(e), G();
193
+ }, ue = () => {
194
+ let [e, t] = [...z.values()];
195
+ B = {
196
+ kind: "pinch",
197
+ view: S(k),
198
+ distance: Math.max(1, Math.hypot(e.x - t.x, e.y - t.y)),
199
+ midX: (e.x + t.x) / 2,
200
+ midY: (e.y + t.y) / 2
201
+ }, J(null);
202
+ };
203
+ return O = r(t, w, E, T), G(), {
204
+ setOptions(e) {
205
+ if (L) return;
206
+ let n = (e.palette ?? []).join() !== (t.palette ?? []).join();
207
+ t = e, n && (w = _(s, t.palette)), G();
208
+ },
209
+ setTheme(e) {
210
+ L || (s = e, w = _(s, t.palette), G());
211
+ },
212
+ setSize(e, t) {
213
+ (e !== j || t !== M) && (j = Math.max(0, e), M = Math.max(0, t), U());
214
+ },
215
+ getScene: K,
216
+ pointerDown: (e, t, n = {}) => {
217
+ if (L) return;
218
+ let r = n.id ?? 0, i = !!n.touch;
219
+ z.set(r, {
220
+ x: e,
221
+ y: t,
222
+ startX: e,
223
+ startY: t,
224
+ touch: i,
225
+ moved: !1
226
+ });
227
+ let a = re();
228
+ if (z.size === 2) {
229
+ a && (O.zoom.x || O.zoom.y) && B?.kind !== "point" && ue();
230
+ return;
231
+ }
232
+ if (z.size > 2 || !a) {
233
+ if (!a && i) {
234
+ let n = Y(e, t, !0);
235
+ J(n ? {
236
+ event: n,
237
+ x: e,
238
+ y: t
239
+ } : null);
240
+ }
241
+ return;
242
+ }
243
+ if (a.dragPoints) {
244
+ let n = Y(e, t, i)?.items.find((e) => O.series[e.seriesIndex].type === "scatter");
245
+ if (n) {
246
+ B = {
247
+ kind: "point",
248
+ item: n,
249
+ x: e,
250
+ y: t
251
+ };
252
+ return;
253
+ }
254
+ }
255
+ if (A && a.pan && X(e, t)) {
256
+ B = {
257
+ kind: "pan",
258
+ view: S(k),
259
+ x: e,
260
+ y: t
261
+ };
262
+ return;
263
+ }
264
+ if (B = null, i) {
265
+ let n = Y(e, t, !0);
266
+ J(n ? {
267
+ event: n,
268
+ x: e,
269
+ y: t
270
+ } : null);
271
+ }
272
+ },
273
+ pointerMove: (e, t, r = {}) => {
274
+ if (L) return;
275
+ let i = r.id ?? 0, a = z.get(i);
276
+ if (a && (a.x = e, a.y = t, !a.moved && Math.hypot(e - a.startX, t - a.startY) > (a.touch ? te : ee) && (a.moved = !0)), B?.kind === "pinch" && z.size >= 2) {
277
+ let [e, t] = [...z.values()], r = Math.max(1, Math.hypot(e.x - t.x, e.y - t.y)), i = (e.x + t.x) / 2, a = (e.y + t.y) / 2, o = q();
278
+ if (!o) return;
279
+ let s = n(o.plot, B.view, O.x.reverse, O.y.reverse), c = B.distance / r, l = S(B.view);
280
+ if (O.zoom.x) {
281
+ l.x = x(B.view.x, s.pxToX(B.midX), c);
282
+ let e = (i - B.midX) * s.xPerPx * c;
283
+ l.x = y(l.x, O.x.reverse ? e : -e);
284
+ }
285
+ if (O.zoom.y) {
286
+ l.y = x(B.view.y, s.pxToY(B.midY), c);
287
+ let e = (a - B.midY) * s.yPerPx * c;
288
+ l.y = y(l.y, O.y.reverse ? -e : e);
289
+ }
290
+ Q(l, !0);
291
+ return;
292
+ }
293
+ if (B?.kind === "point" && a) {
294
+ if (!a.moved) return;
295
+ B.x = e, B.y = t;
296
+ let n = Z(e, t);
297
+ U(), n && H("drag", {
298
+ item: B.item,
299
+ x: n.x,
300
+ y: n.y
301
+ });
302
+ return;
303
+ }
304
+ if (B?.kind === "pan" && a) {
305
+ if (!a.moved) return;
306
+ let n = q();
307
+ if (!n) return;
308
+ let r = e - B.x, i = t - B.y, o = S(B.view);
309
+ O.zoom.x && (o.x = y(B.view.x, -r * n.xPerPx * (O.x.reverse ? -1 : 1))), O.zoom.y && (o.y = y(B.view.y, i * n.yPerPx * (O.y.reverse ? -1 : 1))), Q(o, !0);
310
+ return;
311
+ }
312
+ if (!(z.size > 1) && (!a || a.touch || !r.touch)) {
313
+ let n = Y(e, t, !!a?.touch || !!r.touch);
314
+ (n || !a?.touch) && J(n ? {
315
+ event: n,
316
+ x: e,
317
+ y: t
318
+ } : null);
319
+ }
320
+ },
321
+ pointerUp: (e, t, n = {}) => {
322
+ if (L) return;
323
+ let r = n.id ?? 0, i = z.get(r);
324
+ z.delete(r);
325
+ let a = B;
326
+ if (a?.kind === "pinch") {
327
+ z.size < 2 && (B = null);
328
+ return;
329
+ }
330
+ if (B = null, !i) return;
331
+ if (a?.kind === "point") {
332
+ if (i.moved) {
333
+ let n = Z(e, t);
334
+ U(), n && H("drop", {
335
+ item: a.item,
336
+ x: n.x,
337
+ y: n.y
338
+ });
339
+ return;
340
+ }
341
+ } else if (a?.kind === "pan" && i.moved) {
342
+ U();
343
+ return;
344
+ }
345
+ if (i.moved) {
346
+ i.touch && U();
347
+ return;
348
+ }
349
+ let o = Date.now();
350
+ if (i.touch && o - V.time < ne && Math.hypot(e - V.x, t - V.y) < 24 && A) {
351
+ V = {
352
+ time: 0,
353
+ x: e,
354
+ y: t
355
+ }, $();
356
+ return;
357
+ }
358
+ V = {
359
+ time: o,
360
+ x: e,
361
+ y: t
362
+ };
363
+ let s = ce(e, t);
364
+ if (s) {
365
+ K()?.legend?.toggle && le(s.id);
366
+ return;
367
+ }
368
+ let c = Y(e, t, i.touch);
369
+ if (c) {
370
+ i.touch && J({
371
+ event: c,
372
+ x: e,
373
+ y: t
374
+ }), H("click", c);
375
+ return;
376
+ }
377
+ if (i.touch && J(null), X(e, t)) {
378
+ let n = Z(e, t);
379
+ n && H("plotClick", n);
380
+ }
381
+ },
382
+ pointerCancel: (e = {}) => {
383
+ z.delete(e.id ?? 0), (B?.kind === "point" || z.size < 2) && (B = null), U();
384
+ },
385
+ pointerLeave() {
386
+ !B && R && J(null);
387
+ },
388
+ zoomAt: se,
389
+ resetZoom: $,
390
+ getView: () => S(k),
391
+ setView(e) {
392
+ L || Q({
393
+ x: e.x ?? k.x,
394
+ y: e.y ?? k.y
395
+ }, !1);
396
+ },
397
+ toggleSeries: le,
398
+ clearHover() {
399
+ R && J(null);
400
+ },
401
+ getPlotRect() {
402
+ let e = K()?.layout.plot;
403
+ return e ? { ...e } : null;
404
+ },
405
+ toPixel(e, t) {
406
+ let n = q();
407
+ return n ? {
408
+ x: n.xToPx(e),
409
+ y: n.yToPx(t)
410
+ } : null;
411
+ },
412
+ fromPixel(e, t) {
413
+ let n = q();
414
+ return n ? {
415
+ x: n.pxToX(e),
416
+ y: n.pxToY(t)
417
+ } : null;
418
+ },
419
+ on(e, t) {
420
+ let n = D[e];
421
+ return n || (n = /* @__PURE__ */ new Set(), D[e] = n), n.add(t), () => {
422
+ n.delete(t);
423
+ };
424
+ },
425
+ destroy() {
426
+ L = !0, z.clear();
427
+ for (let e of Object.keys(D)) delete D[e];
428
+ }
429
+ };
430
+ }, T = (t, n, r, i) => {
431
+ if (!r) return [0, n];
432
+ let [a, o] = i[0] <= i[1] ? i : [i[1], i[0]];
433
+ return [Math.max(0, e(t, n, a) - 1), Math.min(n, e(t, n, o) + 1)];
434
+ }, E = (e, n = {}) => {
435
+ let { model: r, view: i, layout: a } = e, o = a.scales, { plot: c } = a, u = n.maxDots ?? 4e3, d = n.maxBars ?? 2e3, f = Math.max(1, n.columnWidth ?? 1), p = {
436
+ area: 0,
437
+ bar: 1,
438
+ line: 2,
439
+ scatter: 3
440
+ }, m = [], h = r.series.filter((e) => !e.hidden && e.cols.count > 0).sort((e, t) => p[e.type] - p[t.type] || e.index - t.index);
441
+ for (let e of h) {
442
+ let { x: a, y: p, count: h, sorted: g } = e.cols;
443
+ if (e.type === "line" || e.type === "area") {
444
+ let [t, n] = T(a, h, g, i.x), l = new Float64Array((n - t) * 2);
445
+ for (let e = t; e < n; e++) l[(e - t) * 2] = a[e], l[(e - t) * 2 + 1] = p[e];
446
+ let u = n - t, d = g && u > c.width * 2 / f ? s(l, 0, u, (e) => o.xToPx(e) / f) : {
447
+ points: l,
448
+ length: u
449
+ }, _ = [], v = [];
450
+ for (let e = 0; e < d.length; e++) {
451
+ let t = d.points[e * 2], n = d.points[e * 2 + 1];
452
+ if (!Number.isFinite(t) || !Number.isFinite(n)) {
453
+ v.length && _.push(v), v = [];
454
+ continue;
455
+ }
456
+ v.push(o.xToPx(t), o.yToPx(n));
457
+ }
458
+ v.length && _.push(v), e.type === "area" && m.push({
459
+ kind: "area",
460
+ seriesIndex: e.index,
461
+ color: e.colorCss,
462
+ opacity: e.opacity,
463
+ baseline: o.yToPx(r.baseline),
464
+ segments: _
465
+ }), m.push({
466
+ kind: "line",
467
+ seriesIndex: e.index,
468
+ color: e.colorCss,
469
+ width: e.type === "area" ? Math.min(e.lineWidth, 2) : e.lineWidth,
470
+ segments: _
471
+ });
472
+ continue;
473
+ }
474
+ if (e.type === "bar" && e.barBase && e.barTop) {
475
+ let [t, n] = T(a, h, g, i.x), r = Math.max(e.barHalfWidth / o.xPerPx, .5), s = [], l = n - t > d, u = NaN;
476
+ for (let i = t; i < n; i++) {
477
+ let t = e.barBase[i], n = e.barTop[i];
478
+ if (!Number.isFinite(t) || !Number.isFinite(n)) continue;
479
+ let d = o.xToPx(a[i] + e.barOffset);
480
+ if (d + r < c.x || d - r > c.x + c.width) continue;
481
+ let f = o.yToPx(t), p = o.yToPx(n), m = Math.min(f, p), h = Math.max(1, Math.abs(f - p)), g = Math.floor(d);
482
+ if (l && g === u && s.length) {
483
+ let e = s.length - 4, t = Math.max(s[e + 1] + s[e + 3], m + h);
484
+ s[e + 1] = Math.min(s[e + 1], m), s[e + 3] = t - s[e + 1];
485
+ continue;
486
+ }
487
+ u = g, s.push(d - r, m, r * 2, h);
488
+ }
489
+ m.push({
490
+ kind: "bars",
491
+ seriesIndex: e.index,
492
+ color: e.colorCss,
493
+ rects: s
494
+ });
495
+ continue;
496
+ }
497
+ let _ = [], v = [], y = (n) => {
498
+ let r = e.pointColors?.[n];
499
+ return r ? t(r) : e.colorCss;
500
+ }, b = [];
501
+ for (let e = 0; e < h; e++) {
502
+ let t = a[e], n = p[e];
503
+ if (!Number.isFinite(t) || !Number.isFinite(n)) continue;
504
+ let r = o.xToPx(t), i = o.yToPx(n);
505
+ r < c.x || r > c.x + c.width || i < c.y || i > c.y + c.height || b.push(e);
506
+ }
507
+ if (b.length > u) {
508
+ let t = Math.max(2, n.dotCell ?? e.pointSize * .8), r = Math.ceil(c.width / t) + 1, i = /* @__PURE__ */ new Map();
509
+ for (let e of b) {
510
+ let n = Math.floor((o.xToPx(a[e]) - c.x) / t), s = Math.floor((o.yToPx(p[e]) - c.y) / t);
511
+ i.set(s * r + n, e);
512
+ }
513
+ for (let [e, n] of i) _.push(c.x + (e % r + .5) * t, c.y + (Math.floor(e / r) + .5) * t, t), v.push(y(n));
514
+ } else for (let t of b) _.push(o.xToPx(a[t]), o.yToPx(p[t]), l(e, t)), v.push(y(t));
515
+ m.push({
516
+ kind: "dots",
517
+ seriesIndex: e.index,
518
+ opacity: e.opacity,
519
+ dots: _,
520
+ colors: v
521
+ });
522
+ }
523
+ return m;
524
+ };
525
+ //#endregion
526
+ export { w as createChartController, E as scenePrimitives };
527
+
528
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.js","names":["copyView","v","TAP_SLOP","TOUCH_SLOP","DOUBLE_TAP_MS","LEGEND_ROW","createChartController","options","config","themeInput","theme","createTheme","cache","hidden","listeners","model","view","zoomed","width","height","annotations","scene","sceneDirty","lastPlot","destroyed","hover","pointers","gesture","lastTap","emit","type","listener","event","invalidate","interaction","value","o","measure","text","font","size","weight","rebuild","buildModel","clampRange","base","minSpan","sameRange","resolveAnnotations","it","setHover","legendLayout","option","named","s","cfg","position","entries","x","row","w","legendHeight","tooltipLayout","tooltip","custom","result","content","tooltipContent","lines","line","boxW","boxH","left","anchorX","top","anchorY","computeScene","legend","legendTop","layout","layoutChart","labels","collectPointLabels","occupied","labelHeight","a","textBox","x0","x1","y0","y1","right","bottom","pos","pointLabels","placeLabels","t","next","crosshair","showsCrosshair","cx","hoverMarks","dotSize","rect","key","getScene","scales","changed","sameHover","hitAt","sc","hitTest","y","touch","inPlot","p","dataAt","plot","cy","setViewInternal","notify","zoomAt","zoomRange","factor","resetZoom","legendAt","e","toggleSeries","id","startPinch","b","paletteChanged","h","item","i","distance","midX","midY","start","createScales","shift","panRange","at","dx","dy","current","now","hit","set","visibleRange","sorted","count","range","lowerBound","scenePrimitives","maxDots","limits","maxBars","column","order","out","series","end","interleaved","n","decimateMinMax","segments","run","xv","yv","half","rects","merge","lastCol","ya","yb","col","k","dots","colors","colorOf","c","toCss","visible","px","py","cell","cols","owner"],"sources":["../../../../charts/src/engine/controller.ts"],"sourcesContent":["// createChartController: the platform-free chart. It owns the options, the\n// theme, the model, the visible range and the interactions (pointer / touch\n// gestures fed by the host) and describes what to draw (`getScene`). Hosts\n// only draw: createCanvasChart on any 2D context, the React Native charts\n// with views.\n\nimport { toCss } from \"./color\";\nimport { lowerBound } from \"./data\";\nimport { decimateMinMax } from \"./decimate\";\nimport { createScales, type Rect } from \"./layout\";\nimport { buildModel, type ChartModel, type DataCache } from \"./model\";\nimport {\n font,\n placeLabels,\n textBox,\n type PointLabel,\n type ResolvedAnnotation,\n} from \"./overlay\";\nimport {\n collectPointLabels,\n dotSize,\n hitTest,\n hoverMarks,\n layoutChart,\n resolveAnnotations,\n sameHover,\n showsCrosshair,\n tooltipContent,\n type ChartLayout,\n type HoverMark,\n type TooltipContent,\n} from \"./scene\";\nimport { createTheme, type ChartTheme, type ChartThemeInput } from \"./theme\";\nimport type {\n ChartEventMap,\n ChartHoverEvent,\n ChartHoverItem,\n ChartOptions,\n ChartPlotClickEvent,\n ChartRect,\n ChartView,\n} from \"./types\";\nimport {\n clampRange,\n panRange,\n sameRange,\n zoomRange,\n type Range,\n} from \"./viewport\";\n\n/** Events of a controller (no renderer events: hosts draw themselves) */\nexport type ChartControllerEventMap = Omit<ChartEventMap, \"renderer\">;\n\nexport interface ChartControllerConfig {\n options: ChartOptions;\n /** Colors and fonts (Minerva variables); light defaults when omitted */\n theme?: ChartThemeInput;\n /** Width in pixels of `text` drawn with the CSS `font` */\n measureText: (text: string, font: string) => number;\n /** Called when the scene changed and must be drawn again */\n onInvalidate?: () => void;\n}\n\nexport interface ChartLegendEntry {\n id: string;\n name: string;\n /** CSS color */\n color: string;\n shape: \"dot\" | \"line\" | \"square\";\n hidden: boolean;\n /** Hit / draw box of the entry, pixels of the chart */\n box: Rect;\n}\n\nexport interface ChartLegendLayout {\n entries: ChartLegendEntry[];\n position: \"top\" | \"bottom\";\n /** Whether a tap toggles the series */\n toggle: boolean;\n /** Height taken by the legend */\n height: number;\n}\n\nexport interface ChartTooltipLayout {\n /** Default content (`text` is set instead when `tooltip.render` returns a string) */\n content: TooltipContent;\n /** Lines of a custom string tooltip */\n text: string[] | null;\n /** Box of the tooltip, pixels of the chart */\n box: Rect;\n /** Line height used to lay the box out */\n lineHeight: number;\n padding: number;\n}\n\nexport interface ChartHoverLayout {\n event: ChartHoverEvent;\n marks: HoverMark[];\n /** X pixel of the guide line (`null` when hidden) */\n crosshairX: number | null;\n tooltip: ChartTooltipLayout | null;\n}\n\n/** Everything a host draws, in CSS pixels of the chart */\nexport interface ChartScene {\n width: number;\n height: number;\n theme: ChartTheme;\n model: ChartModel;\n view: ChartView;\n layout: ChartLayout;\n annotations: ResolvedAnnotation[];\n /** Labels of the dots that found a free slot */\n pointLabels: { label: PointLabel; box: Rect }[];\n legend: ChartLegendLayout | null;\n hover: ChartHoverLayout | null;\n /** Point being dragged (`interaction.dragPoints`) */\n dragging: { x: number; y: number; color: string; size: number } | null;\n}\n\nexport interface ChartPointerOptions {\n /** Pointer id (touch identifier); 0 by default */\n id?: number;\n /** Touch input: the tooltip follows the finger and stays after a tap */\n touch?: boolean;\n}\n\nexport interface ChartController {\n setOptions(options: ChartOptions): void;\n setTheme(theme: ChartThemeInput | undefined): void;\n /** Size of the chart in CSS pixels */\n setSize(width: number, height: number): void;\n /** What to draw (`null` until the size is known) */\n getScene(): ChartScene | null;\n pointerDown(x: number, y: number, options?: ChartPointerOptions): void;\n pointerMove(x: number, y: number, options?: ChartPointerOptions): void;\n pointerUp(x: number, y: number, options?: ChartPointerOptions): void;\n pointerCancel(options?: ChartPointerOptions): void;\n /** The mouse left the chart */\n pointerLeave(): void;\n /** Zooms around a pixel (factor < 1 zooms in) */\n zoomAt(x: number, y: number, factor: number): void;\n resetZoom(): void;\n getView(): ChartView;\n setView(view: Partial<ChartView>): void;\n /** Shows / hides a series (like a legend click) */\n toggleSeries(id: string): void;\n /** Hides the tooltip */\n clearHover(): void;\n getPlotRect(): ChartRect | null;\n toPixel(x: number, y: number): { x: number; y: number } | null;\n fromPixel(x: number, y: number): { x: number; y: number } | null;\n on<K extends keyof ChartControllerEventMap>(\n type: K,\n listener: (event: ChartControllerEventMap[K]) => void,\n ): () => void;\n destroy(): void;\n}\n\nconst copyView = (v: ChartView): ChartView => ({\n x: [v.x[0], v.x[1]],\n y: [v.y[0], v.y[1]],\n});\n\nconst TAP_SLOP = 6;\nconst TOUCH_SLOP = 10;\nconst DOUBLE_TAP_MS = 320;\nconst LEGEND_ROW = 20;\n\ninterface PointerState {\n x: number;\n y: number;\n startX: number;\n startY: number;\n touch: boolean;\n moved: boolean;\n}\n\nexport const createChartController = (\n config: ChartControllerConfig,\n): ChartController => {\n let options = config.options;\n let themeInput = config.theme;\n let theme = createTheme(themeInput, options.palette);\n const cache: DataCache = new Map();\n const hidden = new Set<string>();\n const listeners: {\n [K in keyof ChartControllerEventMap]?: Set<\n (event: ChartControllerEventMap[K]) => void\n >;\n } = {};\n let model: ChartModel;\n let view: ChartView = { x: [0, 1], y: [0, 1] };\n let zoomed = false;\n let width = 0;\n let height = 0;\n let annotations: ResolvedAnnotation[] = [];\n let scene: ChartScene | null = null;\n let sceneDirty = true;\n let lastPlot = \"\";\n let destroyed = false;\n\n let hover: { event: ChartHoverEvent; x: number; y: number } | null = null;\n const pointers = new Map<number, PointerState>();\n let gesture:\n | { kind: \"pan\"; view: ChartView; x: number; y: number }\n | {\n kind: \"pinch\";\n view: ChartView;\n distance: number;\n midX: number;\n midY: number;\n }\n | { kind: \"point\"; item: ChartHoverItem; x: number; y: number }\n | null = null;\n let lastTap = { time: 0, x: 0, y: 0 };\n\n const emit = <K extends keyof ChartControllerEventMap>(\n type: K,\n event: ChartControllerEventMap[K],\n ) => {\n listeners[type]?.forEach((listener) => listener(event));\n };\n\n const invalidate = () => {\n sceneDirty = true;\n if (!destroyed) config.onInvalidate?.();\n };\n\n const interaction = () => {\n const value = options.interaction;\n if (value === false) return null;\n const o = typeof value === \"object\" ? value : {};\n return {\n pan: o.pan ?? true,\n dragPoints: o.dragPoints ?? false,\n };\n };\n\n const measure = (text: string, size = theme.fontSize, weight = 400) =>\n config.measureText(text, font(theme, size, weight));\n\n const rebuild = () => {\n model = buildModel(options, theme, hidden, cache);\n const { base, minSpan } = model;\n if (!zoomed) {\n view = copyView(base);\n } else {\n view = {\n x: model.zoom.x ? clampRange(view.x, base.x, minSpan.x) : [...base.x],\n y: model.zoom.y ? clampRange(view.y, base.y, minSpan.y) : [...base.y],\n };\n zoomed = !sameRange(view.x, base.x) || !sameRange(view.y, base.y);\n }\n annotations = resolveAnnotations(options.annotations, theme);\n if (hover) {\n const stillThere = hover.event.items.every(\n (it) =>\n model.series[it.seriesIndex] &&\n !model.series[it.seriesIndex].hidden &&\n it.index < model.series[it.seriesIndex].cols.count,\n );\n if (!stillThere) setHover(null);\n }\n invalidate();\n };\n\n // --------------------------------------------------------------- legend\n\n const legendLayout = (): ChartLegendLayout | null => {\n const option = options.legend;\n const named = options.series.filter((s) => s.name).length;\n const show = option === undefined ? named > 1 : !!option;\n if (!show) return null;\n const cfg = typeof option === \"object\" ? option : {};\n const position = cfg.position === \"bottom\" ? \"bottom\" : \"top\";\n const entries: ChartLegendEntry[] = [];\n let x = 4;\n let row = 0;\n for (const s of model.series) {\n const w = 14 + measure(s.name, 12) + 8;\n if (x + w > width - 4 && x > 4) {\n x = 4;\n row++;\n }\n entries.push({\n id: s.id,\n name: s.name,\n color: s.colorCss,\n shape:\n s.type === \"scatter\" ? \"dot\" : s.type === \"line\" ? \"line\" : \"square\",\n hidden: s.hidden,\n box: { x, y: row * LEGEND_ROW, width: w, height: LEGEND_ROW },\n });\n x += w + 10;\n }\n const legendHeight = (row + 1) * LEGEND_ROW + 6;\n if (position === \"bottom\") {\n for (const e of entries) e.box.y += height - legendHeight + 6;\n }\n return {\n entries,\n position,\n toggle: cfg.toggle ?? true,\n height: legendHeight,\n };\n };\n\n // ---------------------------------------------------------------- scene\n\n const tooltipLayout = (\n event: ChartHoverEvent,\n anchorX: number,\n anchorY: number,\n ): ChartTooltipLayout | null => {\n const tooltip = options.tooltip;\n if (tooltip === false) return null;\n const custom = typeof tooltip === \"object\" ? tooltip.render : undefined;\n let text: string[] | null = null;\n if (custom) {\n const result = custom(event);\n if (result === null || result === \"\") return null;\n if (typeof result === \"string\") text = result.split(\"\\n\");\n }\n const content = tooltipContent(model, event, scene?.layout.yTicks ?? null);\n const lineHeight = 18;\n const padding = 8;\n let w = 0;\n let lines: number;\n if (text) {\n for (const line of text) w = Math.max(w, measure(line, 12));\n lines = text.length;\n } else {\n w = measure(content.title, 12, 600) + (content.titleColor ? 14 : 0);\n for (const row of content.rows) {\n w = Math.max(\n w,\n (row.color ? 14 : 0) +\n measure(row.name, 12) +\n 16 +\n measure(row.value, 12, 600),\n );\n }\n lines = 1 + content.rows.length;\n }\n const boxW = Math.ceil(Math.max(w, 96) + padding * 2 + 4);\n const boxH = lines * lineHeight + padding * 2;\n let left = anchorX + 14;\n if (left + boxW > width - 4) left = anchorX - 14 - boxW;\n left = Math.max(4, Math.min(left, width - boxW - 4));\n const top = Math.max(4, Math.min(anchorY - boxH / 2, height - boxH - 4));\n return {\n content,\n text,\n box: { x: left, y: top, width: boxW, height: boxH },\n lineHeight,\n padding,\n };\n };\n\n const computeScene = (): ChartScene | null => {\n if (width <= 0 || height <= 0) return null;\n const legend = legendLayout();\n const legendTop = legend?.position === \"top\" ? legend.height : 0;\n const layout = layoutChart({\n model,\n view,\n theme,\n width,\n height: height - (legend?.height ?? 0),\n padding: options.padding,\n top: legendTop,\n measure: (text) => measure(text),\n });\n const labels = collectPointLabels(model, view, layout.scales);\n const occupied: Rect[] = [];\n const labelHeight = theme.fontSize + 4;\n for (const a of annotations) {\n if (a.type === \"text\" && a.text) {\n occupied.push(\n textBox(\n a,\n layout.scales,\n measure(a.text, theme.fontSize, a.weight),\n labelHeight,\n ),\n );\n continue;\n }\n if (a.type !== \"rect\" || !a.label) continue;\n // keep the dot labels off the area titles (drawForeground does the same)\n const s = layout.scales;\n const x0 = a.x0 === undefined ? layout.plot.x : s.xToPx(a.x0);\n const x1 =\n a.x1 === undefined ? layout.plot.x + layout.plot.width : s.xToPx(a.x1);\n const y0 =\n a.y0 === undefined ? layout.plot.y + layout.plot.height : s.yToPx(a.y0);\n const y1 = a.y1 === undefined ? layout.plot.y : s.yToPx(a.y1);\n const w = measure(a.label, theme.fontSize + 1, 600);\n const left = Math.min(x0, x1);\n const right = Math.max(x0, x1);\n const top = Math.min(y0, y1);\n const bottom = Math.max(y0, y1);\n const pos = a.labelPosition;\n occupied.push({\n x: pos.endsWith(\"left\")\n ? left + 10\n : pos.endsWith(\"right\")\n ? right - 10 - w\n : (left + right - w) / 2,\n y: pos.startsWith(\"top\")\n ? top + 10\n : pos.startsWith(\"bottom\")\n ? bottom - 10 - labelHeight\n : (top + bottom - labelHeight) / 2,\n width: w,\n height: labelHeight,\n });\n }\n const pointLabels = placeLabels(\n labels,\n layout.plot,\n (t) => measure(t),\n labelHeight - 2,\n occupied,\n );\n const next: ChartScene = {\n width,\n height,\n theme,\n model,\n view: copyView(view),\n layout,\n annotations,\n pointLabels,\n legend,\n hover: null,\n dragging: null,\n };\n scene = next;\n if (hover) {\n const crosshair = showsCrosshair(model, hover.event, options.crosshair);\n const cx = layout.scales.xToPx(hover.event.items[0].x);\n next.hover = {\n event: hover.event,\n marks: hoverMarks(model, layout.scales, hover.event),\n crosshairX:\n crosshair &&\n cx >= layout.plot.x &&\n cx <= layout.plot.x + layout.plot.width\n ? cx\n : null,\n tooltip:\n gesture?.kind === \"pan\" || gesture?.kind === \"point\"\n ? null\n : tooltipLayout(hover.event, hover.x, hover.y),\n };\n }\n if (gesture?.kind === \"point\") {\n const s = model.series[gesture.item.seriesIndex];\n next.dragging = {\n x: gesture.x,\n y: gesture.y,\n color: gesture.item.color,\n size: (s ? dotSize(s, gesture.item.index) : 8) + 6,\n };\n }\n const rect = layout.plot;\n const key = `${rect.x},${rect.y},${rect.width},${rect.height}`;\n if (key !== lastPlot) {\n lastPlot = key;\n emit(\"layout\", { ...rect });\n }\n return next;\n };\n\n const getScene = () => {\n if (sceneDirty || !scene) {\n sceneDirty = false;\n scene = computeScene();\n }\n return scene;\n };\n\n // ---------------------------------------------------------- interaction\n\n const scales = () => getScene()?.layout.scales ?? null;\n\n const setHover = (\n next: { event: ChartHoverEvent; x: number; y: number } | null,\n ) => {\n const changed = !sameHover(hover?.event ?? null, next?.event ?? null);\n hover = next;\n invalidate();\n if (changed) emit(\"hover\", next ? next.event : null);\n };\n\n const hitAt = (x: number, y: number, touch: boolean) => {\n const sc = scales();\n return sc\n ? hitTest(model, sc, scene?.layout.xTicks ?? null, x, y, touch ? 8 : 0)\n : null;\n };\n\n const inPlot = (x: number, y: number) => {\n const p = scales()?.plot;\n return (\n !!p && x >= p.x && x <= p.x + p.width && y >= p.y && y <= p.y + p.height\n );\n };\n\n const dataAt = (x: number, y: number) => {\n const sc = scales();\n if (!sc) return null;\n const { plot } = sc;\n const cx = Math.max(plot.x, Math.min(plot.x + plot.width, x));\n const cy = Math.max(plot.y, Math.min(plot.y + plot.height, y));\n return { x: sc.pxToX(cx), y: sc.pxToY(cy) };\n };\n\n const setViewInternal = (next: ChartView, notify: boolean) => {\n const { base, minSpan } = model;\n view = {\n x: clampRange(next.x, base.x, minSpan.x),\n y: clampRange(next.y, base.y, minSpan.y),\n };\n zoomed = !sameRange(view.x, base.x) || !sameRange(view.y, base.y);\n if (notify) emit(\"zoom\", copyView(view));\n invalidate();\n };\n\n const zoomAt = (x: number, y: number, factor: number) => {\n const sc = scales();\n if (!sc || (!model.zoom.x && !model.zoom.y)) return;\n const next = copyView(view);\n if (model.zoom.x) next.x = zoomRange(view.x, sc.pxToX(x), factor);\n if (model.zoom.y) next.y = zoomRange(view.y, sc.pxToY(y), factor);\n setViewInternal(next, true);\n };\n\n const resetZoom = () => {\n if (!zoomed) return;\n setViewInternal(copyView(model.base), true);\n };\n\n const legendAt = (x: number, y: number) =>\n getScene()?.legend?.entries.find(\n (e) =>\n x >= e.box.x &&\n x <= e.box.x + e.box.width &&\n y >= e.box.y &&\n y <= e.box.y + e.box.height,\n ) ?? null;\n\n const toggleSeries = (id: string) => {\n if (hidden.has(id)) hidden.delete(id);\n else hidden.add(id);\n rebuild();\n };\n\n const startPinch = () => {\n const [a, b] = [...pointers.values()];\n gesture = {\n kind: \"pinch\",\n view: copyView(view),\n distance: Math.max(1, Math.hypot(a.x - b.x, a.y - b.y)),\n midX: (a.x + b.x) / 2,\n midY: (a.y + b.y) / 2,\n };\n setHover(null);\n };\n\n const pointerDown = (x: number, y: number, o: ChartPointerOptions = {}) => {\n if (destroyed) return;\n const id = o.id ?? 0;\n const touch = !!o.touch;\n pointers.set(id, { x, y, startX: x, startY: y, touch, moved: false });\n const it = interaction();\n if (pointers.size === 2) {\n if (it && (model.zoom.x || model.zoom.y) && gesture?.kind !== \"point\")\n startPinch();\n return;\n }\n if (pointers.size > 2 || !it) {\n if (!it && touch) {\n const event = hitAt(x, y, true);\n setHover(event ? { event, x, y } : null);\n }\n return;\n }\n if (it.dragPoints) {\n const item = hitAt(x, y, touch)?.items.find(\n (i) => model.series[i.seriesIndex].type === \"scatter\",\n );\n if (item) {\n gesture = { kind: \"point\", item, x, y };\n return;\n }\n }\n if (zoomed && it.pan && inPlot(x, y)) {\n gesture = { kind: \"pan\", view: copyView(view), x, y };\n return;\n }\n gesture = null;\n if (touch) {\n const event = hitAt(x, y, true);\n setHover(event ? { event, x, y } : null);\n }\n };\n\n const pointerMove = (x: number, y: number, o: ChartPointerOptions = {}) => {\n if (destroyed) return;\n const id = o.id ?? 0;\n const p = pointers.get(id);\n if (p) {\n p.x = x;\n p.y = y;\n if (\n !p.moved &&\n Math.hypot(x - p.startX, y - p.startY) >\n (p.touch ? TOUCH_SLOP : TAP_SLOP)\n )\n p.moved = true;\n }\n if (gesture?.kind === \"pinch\" && pointers.size >= 2) {\n const [a, b] = [...pointers.values()];\n const distance = Math.max(1, Math.hypot(a.x - b.x, a.y - b.y));\n const midX = (a.x + b.x) / 2;\n const midY = (a.y + b.y) / 2;\n const sc = scales();\n if (!sc) return;\n const start = createScales(\n sc.plot,\n gesture.view,\n model.x.reverse,\n model.y.reverse,\n );\n const factor = gesture.distance / distance;\n const next = copyView(gesture.view);\n if (model.zoom.x) {\n next.x = zoomRange(gesture.view.x, start.pxToX(gesture.midX), factor);\n const shift = (midX - gesture.midX) * start.xPerPx * factor;\n next.x = panRange(next.x, model.x.reverse ? shift : -shift);\n }\n if (model.zoom.y) {\n next.y = zoomRange(gesture.view.y, start.pxToY(gesture.midY), factor);\n const shift = (midY - gesture.midY) * start.yPerPx * factor;\n next.y = panRange(next.y, model.y.reverse ? -shift : shift);\n }\n setViewInternal(next, true);\n return;\n }\n if (gesture?.kind === \"point\" && p) {\n if (!p.moved) return;\n gesture.x = x;\n gesture.y = y;\n const at = dataAt(x, y);\n invalidate();\n if (at) emit(\"drag\", { item: gesture.item, x: at.x, y: at.y });\n return;\n }\n if (gesture?.kind === \"pan\" && p) {\n if (!p.moved) return;\n const sc = scales();\n if (!sc) return;\n const dx = x - gesture.x;\n const dy = y - gesture.y;\n const next = copyView(gesture.view);\n if (model.zoom.x)\n next.x = panRange(\n gesture.view.x,\n -dx * sc.xPerPx * (model.x.reverse ? -1 : 1),\n );\n if (model.zoom.y)\n next.y = panRange(\n gesture.view.y,\n dy * sc.yPerPx * (model.y.reverse ? -1 : 1),\n );\n setViewInternal(next, true);\n return;\n }\n if (pointers.size > 1) return;\n // mouse hover, or a finger scrubbing along the data\n if (!p || p.touch || !o.touch) {\n const event = hitAt(x, y, !!p?.touch || !!o.touch);\n if (event || !p?.touch) setHover(event ? { event, x, y } : null);\n }\n };\n\n const pointerUp = (x: number, y: number, o: ChartPointerOptions = {}) => {\n if (destroyed) return;\n const id = o.id ?? 0;\n const p = pointers.get(id);\n pointers.delete(id);\n const current = gesture;\n if (current?.kind === \"pinch\") {\n if (pointers.size < 2) gesture = null;\n return;\n }\n gesture = null;\n if (!p) return;\n if (current?.kind === \"point\") {\n if (p.moved) {\n const at = dataAt(x, y);\n invalidate();\n if (at) emit(\"drop\", { item: current.item, x: at.x, y: at.y });\n return;\n }\n } else if (current?.kind === \"pan\" && p.moved) {\n invalidate();\n return;\n }\n if (p.moved) {\n if (p.touch) invalidate();\n return;\n }\n // tap / click\n const now = Date.now();\n if (\n p.touch &&\n now - lastTap.time < DOUBLE_TAP_MS &&\n Math.hypot(x - lastTap.x, y - lastTap.y) < 24 &&\n zoomed\n ) {\n lastTap = { time: 0, x, y };\n resetZoom();\n return;\n }\n lastTap = { time: now, x, y };\n const legend = legendAt(x, y);\n if (legend) {\n if (getScene()?.legend?.toggle) toggleSeries(legend.id);\n return;\n }\n const hit = hitAt(x, y, p.touch);\n if (hit) {\n if (p.touch) setHover({ event: hit, x, y });\n emit(\"click\", hit);\n return;\n }\n if (p.touch) setHover(null);\n if (inPlot(x, y)) {\n const at = dataAt(x, y);\n if (at) emit(\"plotClick\", at as ChartPlotClickEvent);\n }\n };\n\n const pointerCancel = (o: ChartPointerOptions = {}) => {\n pointers.delete(o.id ?? 0);\n if (gesture?.kind === \"point\" || pointers.size < 2) gesture = null;\n invalidate();\n };\n\n model = buildModel(options, theme, hidden, cache);\n rebuild();\n\n return {\n setOptions(next) {\n if (destroyed) return;\n const paletteChanged =\n (next.palette ?? []).join() !== (options.palette ?? []).join();\n options = next;\n if (paletteChanged) theme = createTheme(themeInput, options.palette);\n rebuild();\n },\n setTheme(next) {\n if (destroyed) return;\n themeInput = next;\n theme = createTheme(themeInput, options.palette);\n rebuild();\n },\n setSize(w, h) {\n if (w === width && h === height) return;\n width = Math.max(0, w);\n height = Math.max(0, h);\n invalidate();\n },\n getScene,\n pointerDown,\n pointerMove,\n pointerUp,\n pointerCancel,\n pointerLeave() {\n if (!gesture && hover) setHover(null);\n },\n zoomAt,\n resetZoom,\n getView: () => copyView(view),\n setView(next) {\n if (destroyed) return;\n setViewInternal({ x: next.x ?? view.x, y: next.y ?? view.y }, false);\n },\n toggleSeries,\n clearHover() {\n if (hover) setHover(null);\n },\n getPlotRect() {\n const p = getScene()?.layout.plot;\n return p ? { ...p } : null;\n },\n toPixel(x, y) {\n const sc = scales();\n return sc ? { x: sc.xToPx(x), y: sc.yToPx(y) } : null;\n },\n fromPixel(x, y) {\n const sc = scales();\n return sc ? { x: sc.pxToX(x), y: sc.pxToY(y) } : null;\n },\n on(type, listener) {\n let set = listeners[type] as Set<typeof listener> | undefined;\n if (!set) {\n set = new Set();\n (listeners as Record<string, unknown>)[type] = set;\n }\n set.add(listener);\n return () => {\n set.delete(listener);\n };\n },\n destroy() {\n destroyed = true;\n pointers.clear();\n for (const key of Object.keys(listeners))\n delete (listeners as Record<string, unknown>)[key];\n },\n };\n};\n\n// ------------------------------------------------------------- primitives\n\n/** A polyline (pixels of the chart): interleaved x, y */\nexport interface ChartLinePrimitive {\n kind: \"line\";\n seriesIndex: number;\n color: string;\n width: number;\n /** Runs of points without gaps */\n segments: number[][];\n}\n\nexport interface ChartAreaPrimitive {\n kind: \"area\";\n seriesIndex: number;\n color: string;\n opacity: number;\n /** Y pixel of the baseline */\n baseline: number;\n segments: number[][];\n}\n\nexport interface ChartBarPrimitive {\n kind: \"bars\";\n seriesIndex: number;\n color: string;\n /** Interleaved x, y, width, height */\n rects: number[];\n}\n\nexport interface ChartDotPrimitive {\n kind: \"dots\";\n seriesIndex: number;\n opacity: number;\n /** Interleaved x, y, diameter */\n dots: number[];\n /** CSS color of every dot */\n colors: string[];\n}\n\nexport type ChartPrimitive =\n | ChartLinePrimitive\n | ChartAreaPrimitive\n | ChartBarPrimitive\n | ChartDotPrimitive;\n\nexport interface ChartPrimitiveOptions {\n /**\n * Upper bound of the dots drawn per series: above it the dots are merged\n * into one per occupied cell of their size\n * @default 4000\n */\n maxDots?: number;\n /**\n * Upper bound of the bars drawn per series: above it neighboring bars\n * sharing a pixel column are merged\n * @default 2000\n */\n maxBars?: number;\n /**\n * Width in pixels of the columns lines are decimated to (at most four\n * points per column); larger values mean fewer shapes\n * @default 1\n */\n columnWidth?: number;\n /** Size of the cells dots are merged into (the dot size by default) */\n dotCell?: number;\n}\n\nconst visibleRange = (\n x: Float64Array,\n count: number,\n sorted: boolean,\n range: Range,\n): [number, number] => {\n if (!sorted) return [0, count];\n const [a, b] = range[0] <= range[1] ? range : [range[1], range[0]];\n return [\n Math.max(0, lowerBound(x, count, a) - 1),\n Math.min(count, lowerBound(x, count, b) + 1),\n ];\n};\n\n/**\n * Data of a scene as simple shapes in pixels of the chart, for hosts\n * without a canvas (React Native views, SVG): lines are decimated to a few\n * points per pixel column and large point sets are merged per cell, so the\n * number of shapes stays bounded by the size of the chart.\n */\nexport const scenePrimitives = (\n scene: ChartScene,\n limits: ChartPrimitiveOptions = {},\n): ChartPrimitive[] => {\n const { model, view, layout } = scene;\n const sc = layout.scales;\n const { plot } = layout;\n const maxDots = limits.maxDots ?? 4000;\n const maxBars = limits.maxBars ?? 2000;\n const column = Math.max(1, limits.columnWidth ?? 1);\n const order = { area: 0, bar: 1, line: 2, scatter: 3 } as const;\n const out: ChartPrimitive[] = [];\n const series = model.series\n .filter((s) => !s.hidden && s.cols.count > 0)\n .sort((a, b) => order[a.type] - order[b.type] || a.index - b.index);\n for (const s of series) {\n const { x, y, count, sorted } = s.cols;\n if (s.type === \"line\" || s.type === \"area\") {\n const [start, end] = visibleRange(x, count, sorted, view.x);\n const interleaved = new Float64Array((end - start) * 2);\n for (let i = start; i < end; i++) {\n interleaved[(i - start) * 2] = x[i];\n interleaved[(i - start) * 2 + 1] = y[i];\n }\n const n = end - start;\n const line =\n sorted && n > (plot.width * 2) / column\n ? decimateMinMax(interleaved, 0, n, (v) => sc.xToPx(v) / column)\n : { points: interleaved, length: n };\n const segments: number[][] = [];\n let run: number[] = [];\n for (let i = 0; i < line.length; i++) {\n const xv = line.points[i * 2];\n const yv = line.points[i * 2 + 1];\n if (!Number.isFinite(xv) || !Number.isFinite(yv)) {\n if (run.length) segments.push(run);\n run = [];\n continue;\n }\n run.push(sc.xToPx(xv), sc.yToPx(yv));\n }\n if (run.length) segments.push(run);\n if (s.type === \"area\") {\n out.push({\n kind: \"area\",\n seriesIndex: s.index,\n color: s.colorCss,\n opacity: s.opacity,\n baseline: sc.yToPx(model.baseline),\n segments,\n });\n }\n out.push({\n kind: \"line\",\n seriesIndex: s.index,\n color: s.colorCss,\n width: s.type === \"area\" ? Math.min(s.lineWidth, 2) : s.lineWidth,\n segments,\n });\n continue;\n }\n if (s.type === \"bar\" && s.barBase && s.barTop) {\n const [start, end] = visibleRange(x, count, sorted, view.x);\n const half = Math.max(s.barHalfWidth / sc.xPerPx, 0.5);\n const rects: number[] = [];\n const merge = end - start > maxBars;\n let lastCol = NaN;\n for (let i = start; i < end; i++) {\n const a = s.barBase[i];\n const b = s.barTop[i];\n if (!Number.isFinite(a) || !Number.isFinite(b)) continue;\n const cx = sc.xToPx(x[i] + s.barOffset);\n if (cx + half < plot.x || cx - half > plot.x + plot.width) continue;\n const ya = sc.yToPx(a);\n const yb = sc.yToPx(b);\n const top = Math.min(ya, yb);\n const h = Math.max(1, Math.abs(ya - yb));\n const col = Math.floor(cx);\n if (merge && col === lastCol && rects.length) {\n // widen the previous bar of the same pixel column vertically\n const k = rects.length - 4;\n const bottom = Math.max(rects[k + 1] + rects[k + 3], top + h);\n rects[k + 1] = Math.min(rects[k + 1], top);\n rects[k + 3] = bottom - rects[k + 1];\n continue;\n }\n lastCol = col;\n rects.push(cx - half, top, half * 2, h);\n }\n out.push({\n kind: \"bars\",\n seriesIndex: s.index,\n color: s.colorCss,\n rects,\n });\n continue;\n }\n // scatter\n const dots: number[] = [];\n const colors: string[] = [];\n const colorOf = (i: number) => {\n const c = s.pointColors?.[i];\n return c ? toCss(c) : s.colorCss;\n };\n const visible: number[] = [];\n for (let i = 0; i < count; i++) {\n const xv = x[i];\n const yv = y[i];\n if (!Number.isFinite(xv) || !Number.isFinite(yv)) continue;\n const px = sc.xToPx(xv);\n const py = sc.yToPx(yv);\n if (\n px < plot.x ||\n px > plot.x + plot.width ||\n py < plot.y ||\n py > plot.y + plot.height\n )\n continue;\n visible.push(i);\n }\n if (visible.length > maxDots) {\n const cell = Math.max(2, limits.dotCell ?? s.pointSize * 0.8);\n const cols = Math.ceil(plot.width / cell) + 1;\n const owner = new Map<number, number>();\n for (const i of visible) {\n const cx = Math.floor((sc.xToPx(x[i]) - plot.x) / cell);\n const cy = Math.floor((sc.yToPx(y[i]) - plot.y) / cell);\n owner.set(cy * cols + cx, i);\n }\n for (const [key, i] of owner) {\n dots.push(\n plot.x + ((key % cols) + 0.5) * cell,\n plot.y + (Math.floor(key / cols) + 0.5) * cell,\n cell,\n );\n colors.push(colorOf(i));\n }\n } else {\n for (const i of visible) {\n dots.push(sc.xToPx(x[i]), sc.yToPx(y[i]), dotSize(s, i));\n colors.push(colorOf(i));\n }\n }\n out.push({\n kind: \"dots\",\n seriesIndex: s.index,\n opacity: s.opacity,\n dots,\n colors,\n });\n }\n return out;\n};\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ var e=e=>typeof e==`object`&&!!e&&!(`length`in e)&&`y`in e,t=(e,t)=>(n,r)=>{if(typeof n==`number`)return n;if(n instanceof Date)return n.getTime();if(typeof n==`string`){if(e===`category`)return t(n);if(e===`time`)return Date.parse(n);let i=Number(n);return Number.isNaN(i)?r:i}return r},n=e=>typeof e==`number`?e:e==null?NaN:Number(e),r=t=>{let n=new Set,r=e=>{typeof e==`string`&&n.add(e)};for(let n of t){if(e(n)){let e=n.x;if(e&&!ArrayBuffer.isView(e))for(let t=0;t<e.length;t++)r(e[t]);continue}let t=n;for(let e=0;e<t.length;e++){let n=t[e];Array.isArray(n)?r(n[0]):n&&typeof n==`object`&&r(n.x)}}return[...n]},i=(e,t,n,r)=>{let i=1/0,a=-1/0,o=1/0,s=-1/0,c=!0,l=-1/0;for(let r=0;r<n;r++){let n=e[r];if(!Number.isFinite(n)){t[r]=NaN;continue}n<l&&(c=!1),l=n;let u=t[r];Number.isFinite(u)&&(n<i&&(i=n),n>a&&(a=n),u<o&&(o=u),u>s&&(s=u))}let u=i>a;return{x:e,y:t,count:n,sorted:c,xMin:u?NaN:i,xMax:u?NaN:a,yMin:u?NaN:o,yMax:u?NaN:s,...r}},a=(t,r)=>{let a={size:null,colors:null,labels:null};if(e(t)){let e=t.y.length,o=new Float64Array(e),s=new Float64Array(e),c=t.x;for(let i=0;i<e;i++)s[i]=n(t.y[i]),o[i]=c?r(c[i],i):i;let l=null;if(t.size){l=new Float32Array(e);for(let r=0;r<e;r++)l[r]=n(t.size[r])}return i(o,s,e,{...a,size:l})}let o=t,s=o.length,c=new Float64Array(s),l=new Float64Array(s),u=null,d=null,f=null;for(let e=0;e<s;e++){let t=o[e];if(t==null||typeof t==`number`)c[e]=e,l[e]=n(t);else if(Array.isArray(t))c[e]=r(t[0],e),l[e]=n(t[1]);else if(typeof t==`object`){let i=t;c[e]=i.x===void 0?e:r(i.x,e),l[e]=n(i.y),i.size!==void 0&&(u??(u=new Float32Array(s).fill(NaN)),u[e]=i.size),i.color!==void 0&&(d??(d=Array(s)),d[e]=i.color),i.label!==void 0&&(f??(f=Array(s)),f[e]=i.label)}else c[e]=e,l[e]=NaN}return i(c,l,s,{size:u,colors:d,labels:f})},o=(e,t,n)=>{let r=0,i=t;for(;r<i;){let t=r+i>>>1;e[t]<n?r=t+1:i=t}return r},s=(e,t,n,r)=>{if(n===0)return-1;let i=o(e,n,r),a=i-1,s=i;for(;a>=0&&!Number.isFinite(t[a]);)a--;for(;s<n&&!Number.isFinite(t[s]);)s++;return a<0?s<n?s:-1:s>=n||r-e[a]<=e[s]-r?a:s};exports.collectCategories=r,exports.lowerBound=o,exports.nearestIndex=s,exports.normalizeData=a,exports.xResolver=t;
2
+ //# sourceMappingURL=data.cjs.map