graphein 0.18.0 → 0.20.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 (910) hide show
  1. package/README.md +24 -0
  2. package/dist/a11y/apply.d.ts +10 -0
  3. package/dist/a11y/apply.d.ts.map +1 -0
  4. package/dist/a11y/apply.js +24 -0
  5. package/dist/a11y/apply.js.map +7 -0
  6. package/dist/a11y/describe.d.ts +26 -0
  7. package/dist/a11y/describe.d.ts.map +1 -0
  8. package/dist/a11y/describe.js +37 -0
  9. package/dist/a11y/describe.js.map +7 -0
  10. package/dist/a11y/index.d.ts +4 -0
  11. package/dist/a11y/index.d.ts.map +1 -0
  12. package/dist/a11y/index.js +4 -0
  13. package/dist/a11y/index.js.map +7 -0
  14. package/dist/a11y/table.d.ts +18 -0
  15. package/dist/a11y/table.d.ts.map +1 -0
  16. package/dist/a11y/table.js +72 -0
  17. package/dist/a11y/table.js.map +7 -0
  18. package/dist/analyze/autoInsights.d.ts +22 -0
  19. package/dist/analyze/autoInsights.d.ts.map +1 -0
  20. package/dist/analyze/autoInsights.js +63 -0
  21. package/dist/analyze/autoInsights.js.map +7 -0
  22. package/dist/analyze/index.d.ts +10 -0
  23. package/dist/analyze/index.d.ts.map +1 -0
  24. package/dist/analyze/index.js +6 -0
  25. package/dist/analyze/index.js.map +7 -0
  26. package/dist/analyze/insights.d.ts +142 -0
  27. package/dist/analyze/insights.d.ts.map +1 -0
  28. package/dist/analyze/insights.js +293 -0
  29. package/dist/analyze/insights.js.map +7 -0
  30. package/dist/analyze/recommend.d.ts +40 -0
  31. package/dist/analyze/recommend.d.ts.map +1 -0
  32. package/dist/analyze/recommend.js +717 -0
  33. package/dist/analyze/recommend.js.map +7 -0
  34. package/dist/analyze/regression.d.ts +26 -0
  35. package/dist/analyze/regression.d.ts.map +1 -0
  36. package/dist/analyze/regression.js +21 -0
  37. package/dist/analyze/regression.js.map +7 -0
  38. package/dist/analyze/summarize.d.ts +18 -0
  39. package/dist/analyze/summarize.d.ts.map +1 -0
  40. package/dist/analyze/summarize.js +122 -0
  41. package/dist/analyze/summarize.js.map +7 -0
  42. package/dist/animation/animate.d.ts +14 -0
  43. package/dist/animation/animate.d.ts.map +1 -0
  44. package/dist/animation/animate.js +68 -0
  45. package/dist/animation/animate.js.map +7 -0
  46. package/dist/animation/easing.d.ts +16 -0
  47. package/dist/animation/easing.d.ts.map +1 -0
  48. package/dist/animation/easing.js +116 -0
  49. package/dist/animation/easing.js.map +7 -0
  50. package/dist/animation/entrance.d.ts +31 -0
  51. package/dist/animation/entrance.d.ts.map +1 -0
  52. package/dist/animation/entrance.js +18 -0
  53. package/dist/animation/entrance.js.map +7 -0
  54. package/dist/animation/env.d.ts +2 -0
  55. package/dist/animation/env.d.ts.map +1 -0
  56. package/dist/animation/env.js +7 -0
  57. package/dist/animation/env.js.map +7 -0
  58. package/dist/animation/index.d.ts +7 -0
  59. package/dist/animation/index.d.ts.map +1 -0
  60. package/dist/animation/index.js +7 -0
  61. package/dist/animation/index.js.map +7 -0
  62. package/dist/animation/interpolate.d.ts +7 -0
  63. package/dist/animation/interpolate.d.ts.map +1 -0
  64. package/dist/animation/interpolate.js +62 -0
  65. package/dist/animation/interpolate.js.map +7 -0
  66. package/dist/animation/transition.d.ts +27 -0
  67. package/dist/animation/transition.d.ts.map +1 -0
  68. package/dist/animation/transition.js +18 -0
  69. package/dist/animation/transition.js.map +7 -0
  70. package/dist/axes/draw.d.ts +16 -0
  71. package/dist/axes/draw.d.ts.map +1 -0
  72. package/dist/axes/draw.js +152 -0
  73. package/dist/axes/draw.js.map +7 -0
  74. package/dist/axes/index.d.ts +2 -0
  75. package/dist/axes/index.d.ts.map +1 -0
  76. package/dist/axes/index.js +2 -0
  77. package/dist/axes/index.js.map +7 -0
  78. package/dist/axes/legend.d.ts +5 -0
  79. package/dist/axes/legend.d.ts.map +1 -0
  80. package/dist/axes/legend.js +165 -0
  81. package/dist/axes/legend.js.map +7 -0
  82. package/dist/axes/overlay.d.ts +5 -0
  83. package/dist/axes/overlay.d.ts.map +1 -0
  84. package/dist/axes/overlay.js +130 -0
  85. package/dist/axes/overlay.js.map +7 -0
  86. package/dist/axes/text.d.ts +27 -0
  87. package/dist/axes/text.d.ts.map +1 -0
  88. package/dist/axes/text.js +60 -0
  89. package/dist/axes/text.js.map +7 -0
  90. package/dist/axes/tickLabels.d.ts +40 -0
  91. package/dist/axes/tickLabels.d.ts.map +1 -0
  92. package/dist/axes/tickLabels.js +131 -0
  93. package/dist/axes/tickLabels.js.map +7 -0
  94. package/dist/axes/title.d.ts +7 -0
  95. package/dist/axes/title.d.ts.map +1 -0
  96. package/dist/axes/title.js +151 -0
  97. package/dist/axes/title.js.map +7 -0
  98. package/dist/charts/annotations.d.ts +22 -0
  99. package/dist/charts/annotations.d.ts.map +1 -0
  100. package/dist/charts/annotations.js +233 -0
  101. package/dist/charts/annotations.js.map +7 -0
  102. package/dist/charts/area.d.ts +14 -0
  103. package/dist/charts/area.d.ts.map +1 -0
  104. package/dist/charts/area.js +273 -0
  105. package/dist/charts/area.js.map +7 -0
  106. package/dist/charts/bar.d.ts +4 -0
  107. package/dist/charts/bar.d.ts.map +1 -0
  108. package/dist/charts/bar.js +206 -0
  109. package/dist/charts/bar.js.map +7 -0
  110. package/dist/charts/boundary.d.ts +7 -0
  111. package/dist/charts/boundary.d.ts.map +1 -0
  112. package/dist/charts/boundary.js +37 -0
  113. package/dist/charts/boundary.js.map +7 -0
  114. package/dist/charts/box.d.ts +41 -0
  115. package/dist/charts/box.d.ts.map +1 -0
  116. package/dist/charts/box.js +303 -0
  117. package/dist/charts/box.js.map +7 -0
  118. package/dist/charts/bullet.d.ts +9 -0
  119. package/dist/charts/bullet.d.ts.map +1 -0
  120. package/dist/charts/bullet.js +239 -0
  121. package/dist/charts/bullet.js.map +7 -0
  122. package/dist/charts/calendarHeatmap.d.ts +36 -0
  123. package/dist/charts/calendarHeatmap.d.ts.map +1 -0
  124. package/dist/charts/calendarHeatmap.js +379 -0
  125. package/dist/charts/calendarHeatmap.js.map +7 -0
  126. package/dist/charts/choropleth.d.ts +8 -0
  127. package/dist/charts/choropleth.d.ts.map +1 -0
  128. package/dist/charts/choropleth.js +399 -0
  129. package/dist/charts/choropleth.js.map +7 -0
  130. package/dist/charts/chrome.d.ts +90 -0
  131. package/dist/charts/chrome.d.ts.map +1 -0
  132. package/dist/charts/chrome.js +253 -0
  133. package/dist/charts/chrome.js.map +7 -0
  134. package/dist/charts/colorRamp.d.ts +15 -0
  135. package/dist/charts/colorRamp.d.ts.map +1 -0
  136. package/dist/charts/colorRamp.js +84 -0
  137. package/dist/charts/colorRamp.js.map +7 -0
  138. package/dist/charts/combo.d.ts +16 -0
  139. package/dist/charts/combo.d.ts.map +1 -0
  140. package/dist/charts/combo.js +212 -0
  141. package/dist/charts/combo.js.map +7 -0
  142. package/dist/charts/condFormat.d.ts +18 -0
  143. package/dist/charts/condFormat.d.ts.map +1 -0
  144. package/dist/charts/condFormat.js +88 -0
  145. package/dist/charts/condFormat.js.map +7 -0
  146. package/dist/charts/domIds.d.ts +2 -0
  147. package/dist/charts/domIds.d.ts.map +1 -0
  148. package/dist/charts/domIds.js +13 -0
  149. package/dist/charts/domIds.js.map +7 -0
  150. package/dist/charts/dumbbell.d.ts +8 -0
  151. package/dist/charts/dumbbell.d.ts.map +1 -0
  152. package/dist/charts/dumbbell.js +320 -0
  153. package/dist/charts/dumbbell.js.map +7 -0
  154. package/dist/charts/emphasis.d.ts +30 -0
  155. package/dist/charts/emphasis.d.ts.map +1 -0
  156. package/dist/charts/emphasis.js +27 -0
  157. package/dist/charts/emphasis.js.map +7 -0
  158. package/dist/charts/emptyOverlay.d.ts +5 -0
  159. package/dist/charts/emptyOverlay.d.ts.map +1 -0
  160. package/dist/charts/emptyOverlay.js +16 -0
  161. package/dist/charts/emptyOverlay.js.map +7 -0
  162. package/dist/charts/fill.d.ts +19 -0
  163. package/dist/charts/fill.d.ts.map +1 -0
  164. package/dist/charts/fill.js +32 -0
  165. package/dist/charts/fill.js.map +7 -0
  166. package/dist/charts/funnel.d.ts +20 -0
  167. package/dist/charts/funnel.d.ts.map +1 -0
  168. package/dist/charts/funnel.js +300 -0
  169. package/dist/charts/funnel.js.map +7 -0
  170. package/dist/charts/gauge.d.ts +8 -0
  171. package/dist/charts/gauge.d.ts.map +1 -0
  172. package/dist/charts/gauge.js +304 -0
  173. package/dist/charts/gauge.js.map +7 -0
  174. package/dist/charts/heatmap.d.ts +9 -0
  175. package/dist/charts/heatmap.d.ts.map +1 -0
  176. package/dist/charts/heatmap.js +389 -0
  177. package/dist/charts/heatmap.js.map +7 -0
  178. package/dist/charts/histogram.d.ts +15 -0
  179. package/dist/charts/histogram.d.ts.map +1 -0
  180. package/dist/charts/histogram.js +91 -0
  181. package/dist/charts/histogram.js.map +7 -0
  182. package/dist/charts/index.d.ts +101 -0
  183. package/dist/charts/index.d.ts.map +1 -0
  184. package/dist/charts/index.js +94 -0
  185. package/dist/charts/index.js.map +7 -0
  186. package/dist/charts/kpi.d.ts +24 -0
  187. package/dist/charts/kpi.d.ts.map +1 -0
  188. package/dist/charts/kpi.js +782 -0
  189. package/dist/charts/kpi.js.map +7 -0
  190. package/dist/charts/labelLayout.d.ts +3 -0
  191. package/dist/charts/labelLayout.d.ts.map +1 -0
  192. package/dist/charts/labelLayout.js +25 -0
  193. package/dist/charts/labelLayout.js.map +7 -0
  194. package/dist/charts/line.d.ts +8 -0
  195. package/dist/charts/line.d.ts.map +1 -0
  196. package/dist/charts/line.js +280 -0
  197. package/dist/charts/line.js.map +7 -0
  198. package/dist/charts/matrix.d.ts +7 -0
  199. package/dist/charts/matrix.d.ts.map +1 -0
  200. package/dist/charts/matrix.js +379 -0
  201. package/dist/charts/matrix.js.map +7 -0
  202. package/dist/charts/noData.d.ts +6 -0
  203. package/dist/charts/noData.d.ts.map +1 -0
  204. package/dist/charts/noData.js +17 -0
  205. package/dist/charts/noData.js.map +7 -0
  206. package/dist/charts/pie.d.ts +8 -0
  207. package/dist/charts/pie.d.ts.map +1 -0
  208. package/dist/charts/pie.js +433 -0
  209. package/dist/charts/pie.js.map +7 -0
  210. package/dist/charts/pieLabels.d.ts +84 -0
  211. package/dist/charts/pieLabels.d.ts.map +1 -0
  212. package/dist/charts/pieLabels.js +207 -0
  213. package/dist/charts/pieLabels.js.map +7 -0
  214. package/dist/charts/pointMarkers.d.ts +22 -0
  215. package/dist/charts/pointMarkers.d.ts.map +1 -0
  216. package/dist/charts/pointMarkers.js +38 -0
  217. package/dist/charts/pointMarkers.js.map +7 -0
  218. package/dist/charts/sankey.d.ts +44 -0
  219. package/dist/charts/sankey.d.ts.map +1 -0
  220. package/dist/charts/sankey.js +656 -0
  221. package/dist/charts/sankey.js.map +7 -0
  222. package/dist/charts/scatter.d.ts +11 -0
  223. package/dist/charts/scatter.d.ts.map +1 -0
  224. package/dist/charts/scatter.js +147 -0
  225. package/dist/charts/scatter.js.map +7 -0
  226. package/dist/charts/slicers/common.d.ts +61 -0
  227. package/dist/charts/slicers/common.d.ts.map +1 -0
  228. package/dist/charts/slicers/common.js +142 -0
  229. package/dist/charts/slicers/common.js.map +7 -0
  230. package/dist/charts/slicers/dateRange.d.ts +15 -0
  231. package/dist/charts/slicers/dateRange.d.ts.map +1 -0
  232. package/dist/charts/slicers/dateRange.js +243 -0
  233. package/dist/charts/slicers/dateRange.js.map +7 -0
  234. package/dist/charts/slicers/dropdown.d.ts +14 -0
  235. package/dist/charts/slicers/dropdown.d.ts.map +1 -0
  236. package/dist/charts/slicers/dropdown.js +320 -0
  237. package/dist/charts/slicers/dropdown.js.map +7 -0
  238. package/dist/charts/slicers/index.d.ts +12 -0
  239. package/dist/charts/slicers/index.d.ts.map +1 -0
  240. package/dist/charts/slicers/index.js +27 -0
  241. package/dist/charts/slicers/index.js.map +7 -0
  242. package/dist/charts/slicers/list.d.ts +14 -0
  243. package/dist/charts/slicers/list.d.ts.map +1 -0
  244. package/dist/charts/slicers/list.js +340 -0
  245. package/dist/charts/slicers/list.js.map +7 -0
  246. package/dist/charts/slicers/range.d.ts +14 -0
  247. package/dist/charts/slicers/range.d.ts.map +1 -0
  248. package/dist/charts/slicers/range.js +137 -0
  249. package/dist/charts/slicers/range.js.map +7 -0
  250. package/dist/charts/slicers/search.d.ts +14 -0
  251. package/dist/charts/slicers/search.d.ts.map +1 -0
  252. package/dist/charts/slicers/search.js +105 -0
  253. package/dist/charts/slicers/search.js.map +7 -0
  254. package/dist/charts/slope.d.ts +14 -0
  255. package/dist/charts/slope.d.ts.map +1 -0
  256. package/dist/charts/slope.js +264 -0
  257. package/dist/charts/slope.js.map +7 -0
  258. package/dist/charts/table.d.ts +6 -0
  259. package/dist/charts/table.d.ts.map +1 -0
  260. package/dist/charts/table.js +324 -0
  261. package/dist/charts/table.js.map +7 -0
  262. package/dist/charts/tableView/canvas.d.ts +3 -0
  263. package/dist/charts/tableView/canvas.d.ts.map +1 -0
  264. package/dist/charts/tableView/canvas.js +314 -0
  265. package/dist/charts/tableView/canvas.js.map +7 -0
  266. package/dist/charts/tableView/conditional.d.ts +51 -0
  267. package/dist/charts/tableView/conditional.d.ts.map +1 -0
  268. package/dist/charts/tableView/conditional.js +285 -0
  269. package/dist/charts/tableView/conditional.js.map +7 -0
  270. package/dist/charts/tableView/dom.d.ts +3 -0
  271. package/dist/charts/tableView/dom.d.ts.map +1 -0
  272. package/dist/charts/tableView/dom.js +299 -0
  273. package/dist/charts/tableView/dom.js.map +7 -0
  274. package/dist/charts/tableView/sketch.d.ts +38 -0
  275. package/dist/charts/tableView/sketch.d.ts.map +1 -0
  276. package/dist/charts/tableView/sketch.js +74 -0
  277. package/dist/charts/tableView/sketch.js.map +7 -0
  278. package/dist/charts/tableView/types.d.ts +103 -0
  279. package/dist/charts/tableView/types.d.ts.map +1 -0
  280. package/dist/charts/tableView/types.js +118 -0
  281. package/dist/charts/tableView/types.js.map +7 -0
  282. package/dist/charts/tableView.d.ts +7 -0
  283. package/dist/charts/tableView.d.ts.map +1 -0
  284. package/dist/charts/tableView.js +16 -0
  285. package/dist/charts/tableView.js.map +7 -0
  286. package/dist/charts/treemap.d.ts +17 -0
  287. package/dist/charts/treemap.d.ts.map +1 -0
  288. package/dist/charts/treemap.js +404 -0
  289. package/dist/charts/treemap.js.map +7 -0
  290. package/dist/charts/trendline.d.ts +25 -0
  291. package/dist/charts/trendline.d.ts.map +1 -0
  292. package/dist/charts/trendline.js +125 -0
  293. package/dist/charts/trendline.js.map +7 -0
  294. package/dist/charts/waterfall.d.ts +17 -0
  295. package/dist/charts/waterfall.d.ts.map +1 -0
  296. package/dist/charts/waterfall.js +206 -0
  297. package/dist/charts/waterfall.js.map +7 -0
  298. package/dist/color/contrast.d.ts +16 -0
  299. package/dist/color/contrast.d.ts.map +1 -0
  300. package/dist/color/contrast.js +37 -0
  301. package/dist/color/contrast.js.map +7 -0
  302. package/dist/color/convert.d.ts +26 -0
  303. package/dist/color/convert.d.ts.map +1 -0
  304. package/dist/color/convert.js +59 -0
  305. package/dist/color/convert.js.map +7 -0
  306. package/dist/color/format.d.ts +11 -0
  307. package/dist/color/format.d.ts.map +1 -0
  308. package/dist/color/format.js +28 -0
  309. package/dist/color/format.js.map +7 -0
  310. package/dist/color/index.d.ts +8 -0
  311. package/dist/color/index.d.ts.map +1 -0
  312. package/dist/color/index.js +8 -0
  313. package/dist/color/index.js.map +7 -0
  314. package/dist/color/interpolate.d.ts +10 -0
  315. package/dist/color/interpolate.d.ts.map +1 -0
  316. package/dist/color/interpolate.js +32 -0
  317. package/dist/color/interpolate.js.map +7 -0
  318. package/dist/color/palettes.d.ts +21 -0
  319. package/dist/color/palettes.d.ts.map +1 -0
  320. package/dist/color/palettes.js +112 -0
  321. package/dist/color/palettes.js.map +7 -0
  322. package/dist/color/parse.d.ts +8 -0
  323. package/dist/color/parse.d.ts.map +1 -0
  324. package/dist/color/parse.js +115 -0
  325. package/dist/color/parse.js.map +7 -0
  326. package/dist/color/scales.d.ts +23 -0
  327. package/dist/color/scales.d.ts.map +1 -0
  328. package/dist/color/scales.js +60 -0
  329. package/dist/color/scales.js.map +7 -0
  330. package/dist/decimate/index.d.ts +2 -0
  331. package/dist/decimate/index.d.ts.map +1 -0
  332. package/dist/decimate/index.js +6 -0
  333. package/dist/decimate/index.js.map +7 -0
  334. package/dist/decimate/lttb.d.ts +29 -0
  335. package/dist/decimate/lttb.d.ts.map +1 -0
  336. package/dist/decimate/lttb.js +118 -0
  337. package/dist/decimate/lttb.js.map +7 -0
  338. package/dist/format/date.d.ts +14 -0
  339. package/dist/format/date.d.ts.map +1 -0
  340. package/dist/format/date.js +81 -0
  341. package/dist/format/date.js.map +7 -0
  342. package/dist/format/index.d.ts +26 -0
  343. package/dist/format/index.d.ts.map +1 -0
  344. package/dist/format/index.js +53 -0
  345. package/dist/format/index.js.map +7 -0
  346. package/dist/format/number.d.ts +29 -0
  347. package/dist/format/number.d.ts.map +1 -0
  348. package/dist/format/number.js +122 -0
  349. package/dist/format/number.js.map +7 -0
  350. package/dist/index.d.ts +60 -4424
  351. package/dist/index.d.ts.map +1 -0
  352. package/dist/index.js +239 -21456
  353. package/dist/index.js.map +7 -1
  354. package/dist/interaction/cartesian.d.ts +16 -0
  355. package/dist/interaction/cartesian.d.ts.map +1 -0
  356. package/dist/interaction/cartesian.js +300 -0
  357. package/dist/interaction/cartesian.js.map +7 -0
  358. package/dist/interaction/controller.d.ts +48 -0
  359. package/dist/interaction/controller.d.ts.map +1 -0
  360. package/dist/interaction/controller.js +126 -0
  361. package/dist/interaction/controller.js.map +7 -0
  362. package/dist/interaction/index.d.ts +16 -0
  363. package/dist/interaction/index.d.ts.map +1 -0
  364. package/dist/interaction/index.js +40 -0
  365. package/dist/interaction/index.js.map +7 -0
  366. package/dist/interaction/predicate.d.ts +29 -0
  367. package/dist/interaction/predicate.d.ts.map +1 -0
  368. package/dist/interaction/predicate.js +132 -0
  369. package/dist/interaction/predicate.js.map +7 -0
  370. package/dist/interaction/select.d.ts +37 -0
  371. package/dist/interaction/select.d.ts.map +1 -0
  372. package/dist/interaction/select.js +78 -0
  373. package/dist/interaction/select.js.map +7 -0
  374. package/dist/interaction/store.d.ts +32 -0
  375. package/dist/interaction/store.d.ts.map +1 -0
  376. package/dist/interaction/store.js +99 -0
  377. package/dist/interaction/store.js.map +7 -0
  378. package/dist/interaction/tooltip.d.ts +27 -0
  379. package/dist/interaction/tooltip.d.ts.map +1 -0
  380. package/dist/interaction/tooltip.js +132 -0
  381. package/dist/interaction/tooltip.js.map +7 -0
  382. package/dist/interaction/types.d.ts +85 -0
  383. package/dist/interaction/types.d.ts.map +1 -0
  384. package/dist/interaction/types.js +1 -0
  385. package/dist/interaction/types.js.map +7 -0
  386. package/dist/internal.d.ts +28 -0
  387. package/dist/internal.d.ts.map +1 -0
  388. package/dist/internal.js +21 -0
  389. package/dist/internal.js.map +7 -0
  390. package/dist/layout/frame.d.ts +133 -0
  391. package/dist/layout/frame.d.ts.map +1 -0
  392. package/dist/layout/frame.js +322 -0
  393. package/dist/layout/frame.js.map +7 -0
  394. package/dist/layout/index.d.ts +2 -0
  395. package/dist/layout/index.d.ts.map +1 -0
  396. package/dist/layout/index.js +2 -0
  397. package/dist/layout/index.js.map +7 -0
  398. package/dist/pivot/index.d.ts +2 -0
  399. package/dist/pivot/index.d.ts.map +1 -0
  400. package/dist/pivot/index.js +2 -0
  401. package/dist/pivot/index.js.map +7 -0
  402. package/dist/pivot/pivot.d.ts +61 -0
  403. package/dist/pivot/pivot.d.ts.map +1 -0
  404. package/dist/pivot/pivot.js +447 -0
  405. package/dist/pivot/pivot.js.map +7 -0
  406. package/dist/render/canvasLayer.d.ts +24 -0
  407. package/dist/render/canvasLayer.d.ts.map +1 -0
  408. package/dist/render/canvasLayer.js +84 -0
  409. package/dist/render/canvasLayer.js.map +7 -0
  410. package/dist/render/controls.d.ts +114 -0
  411. package/dist/render/controls.d.ts.map +1 -0
  412. package/dist/render/controls.js +467 -0
  413. package/dist/render/controls.js.map +7 -0
  414. package/dist/render/dom.d.ts +9 -0
  415. package/dist/render/dom.d.ts.map +1 -0
  416. package/dist/render/dom.js +32 -0
  417. package/dist/render/dom.js.map +7 -0
  418. package/dist/render/env.d.ts +5 -0
  419. package/dist/render/env.d.ts.map +1 -0
  420. package/dist/render/env.js +10 -0
  421. package/dist/render/env.js.map +7 -0
  422. package/dist/render/evidence.d.ts +126 -0
  423. package/dist/render/evidence.d.ts.map +1 -0
  424. package/dist/render/evidence.js +221 -0
  425. package/dist/render/evidence.js.map +7 -0
  426. package/dist/render/fonts.d.ts +23 -0
  427. package/dist/render/fonts.d.ts.map +1 -0
  428. package/dist/render/fonts.js +36 -0
  429. package/dist/render/fonts.js.map +7 -0
  430. package/dist/render/index.d.ts +9 -0
  431. package/dist/render/index.d.ts.map +1 -0
  432. package/dist/render/index.js +9 -0
  433. package/dist/render/index.js.map +7 -0
  434. package/dist/render/labelLedger.d.ts +114 -0
  435. package/dist/render/labelLedger.d.ts.map +1 -0
  436. package/dist/render/labelLedger.js +237 -0
  437. package/dist/render/labelLedger.js.map +7 -0
  438. package/dist/render/metrics.d.ts +43 -0
  439. package/dist/render/metrics.d.ts.map +1 -0
  440. package/dist/render/metrics.js +46 -0
  441. package/dist/render/metrics.js.map +7 -0
  442. package/dist/render/overlayText.d.ts +69 -0
  443. package/dist/render/overlayText.d.ts.map +1 -0
  444. package/dist/render/overlayText.js +99 -0
  445. package/dist/render/overlayText.js.map +7 -0
  446. package/dist/render/sizing.d.ts +31 -0
  447. package/dist/render/sizing.d.ts.map +1 -0
  448. package/dist/render/sizing.js +36 -0
  449. package/dist/render/sizing.js.map +7 -0
  450. package/dist/render/surface.d.ts +49 -0
  451. package/dist/render/surface.d.ts.map +1 -0
  452. package/dist/render/surface.js +107 -0
  453. package/dist/render/surface.js.map +7 -0
  454. package/dist/render/text.d.ts +27 -0
  455. package/dist/render/text.d.ts.map +1 -0
  456. package/dist/render/text.js +88 -0
  457. package/dist/render/text.js.map +7 -0
  458. package/dist/rough/draw.d.ts +93 -0
  459. package/dist/rough/draw.d.ts.map +1 -0
  460. package/dist/rough/draw.js +259 -0
  461. package/dist/rough/draw.js.map +7 -0
  462. package/dist/rough/geom.d.ts +26 -0
  463. package/dist/rough/geom.d.ts.map +1 -0
  464. package/dist/rough/geom.js +82 -0
  465. package/dist/rough/geom.js.map +7 -0
  466. package/dist/rough/index.d.ts +10 -0
  467. package/dist/rough/index.d.ts.map +1 -0
  468. package/dist/rough/index.js +17 -0
  469. package/dist/rough/index.js.map +7 -0
  470. package/dist/rough/rng.d.ts +20 -0
  471. package/dist/rough/rng.d.ts.map +1 -0
  472. package/dist/rough/rng.js +22 -0
  473. package/dist/rough/rng.js.map +7 -0
  474. package/dist/rough/types.d.ts +41 -0
  475. package/dist/rough/types.d.ts.map +1 -0
  476. package/dist/rough/types.js +13 -0
  477. package/dist/rough/types.js.map +7 -0
  478. package/dist/runtime/cartesian.d.ts +138 -0
  479. package/dist/runtime/cartesian.d.ts.map +1 -0
  480. package/dist/runtime/cartesian.js +528 -0
  481. package/dist/runtime/cartesian.js.map +7 -0
  482. package/dist/runtime/categories.d.ts +11 -0
  483. package/dist/runtime/categories.d.ts.map +1 -0
  484. package/dist/runtime/categories.js +45 -0
  485. package/dist/runtime/categories.js.map +7 -0
  486. package/dist/runtime/chartAnimation.d.ts +45 -0
  487. package/dist/runtime/chartAnimation.d.ts.map +1 -0
  488. package/dist/runtime/chartAnimation.js +119 -0
  489. package/dist/runtime/chartAnimation.js.map +7 -0
  490. package/dist/runtime/chartRuntime.d.ts +88 -0
  491. package/dist/runtime/chartRuntime.d.ts.map +1 -0
  492. package/dist/runtime/chartRuntime.js +597 -0
  493. package/dist/runtime/chartRuntime.js.map +7 -0
  494. package/dist/runtime/combo.d.ts +56 -0
  495. package/dist/runtime/combo.d.ts.map +1 -0
  496. package/dist/runtime/combo.js +450 -0
  497. package/dist/runtime/combo.js.map +7 -0
  498. package/dist/runtime/dashboard.d.ts +58 -0
  499. package/dist/runtime/dashboard.d.ts.map +1 -0
  500. package/dist/runtime/dashboard.js +21 -0
  501. package/dist/runtime/dashboard.js.map +7 -0
  502. package/dist/runtime/dashboardChrome.d.ts +20 -0
  503. package/dist/runtime/dashboardChrome.d.ts.map +1 -0
  504. package/dist/runtime/dashboardChrome.js +49 -0
  505. package/dist/runtime/dashboardChrome.js.map +7 -0
  506. package/dist/runtime/dashboardDom.d.ts +7 -0
  507. package/dist/runtime/dashboardDom.d.ts.map +1 -0
  508. package/dist/runtime/dashboardDom.js +595 -0
  509. package/dist/runtime/dashboardDom.js.map +7 -0
  510. package/dist/runtime/dashboardHeadless.d.ts +14 -0
  511. package/dist/runtime/dashboardHeadless.d.ts.map +1 -0
  512. package/dist/runtime/dashboardHeadless.js +8 -0
  513. package/dist/runtime/dashboardHeadless.js.map +7 -0
  514. package/dist/runtime/dashboardLayout.d.ts +18 -0
  515. package/dist/runtime/dashboardLayout.d.ts.map +1 -0
  516. package/dist/runtime/dashboardLayout.js +18 -0
  517. package/dist/runtime/dashboardLayout.js.map +7 -0
  518. package/dist/runtime/dashboardPlacement.d.ts +54 -0
  519. package/dist/runtime/dashboardPlacement.d.ts.map +1 -0
  520. package/dist/runtime/dashboardPlacement.js +206 -0
  521. package/dist/runtime/dashboardPlacement.js.map +7 -0
  522. package/dist/runtime/dashboardSelection.d.ts +23 -0
  523. package/dist/runtime/dashboardSelection.d.ts.map +1 -0
  524. package/dist/runtime/dashboardSelection.js +77 -0
  525. package/dist/runtime/dashboardSelection.js.map +7 -0
  526. package/dist/runtime/debug.d.ts +48 -0
  527. package/dist/runtime/debug.d.ts.map +1 -0
  528. package/dist/runtime/debug.js +384 -0
  529. package/dist/runtime/debug.js.map +7 -0
  530. package/dist/runtime/diagnostics.d.ts +56 -0
  531. package/dist/runtime/diagnostics.d.ts.map +1 -0
  532. package/dist/runtime/diagnostics.js +59 -0
  533. package/dist/runtime/diagnostics.js.map +7 -0
  534. package/dist/runtime/draft.d.ts +95 -0
  535. package/dist/runtime/draft.d.ts.map +1 -0
  536. package/dist/runtime/draft.js +112 -0
  537. package/dist/runtime/draft.js.map +7 -0
  538. package/dist/runtime/dumbbell.d.ts +46 -0
  539. package/dist/runtime/dumbbell.d.ts.map +1 -0
  540. package/dist/runtime/dumbbell.js +116 -0
  541. package/dist/runtime/dumbbell.js.map +7 -0
  542. package/dist/runtime/facet.d.ts +74 -0
  543. package/dist/runtime/facet.d.ts.map +1 -0
  544. package/dist/runtime/facet.js +354 -0
  545. package/dist/runtime/facet.js.map +7 -0
  546. package/dist/runtime/headless.d.ts +54 -0
  547. package/dist/runtime/headless.d.ts.map +1 -0
  548. package/dist/runtime/headless.js +159 -0
  549. package/dist/runtime/headless.js.map +7 -0
  550. package/dist/runtime/headlessDashboardRenderer.d.ts +14 -0
  551. package/dist/runtime/headlessDashboardRenderer.d.ts.map +1 -0
  552. package/dist/runtime/headlessDashboardRenderer.js +484 -0
  553. package/dist/runtime/headlessDashboardRenderer.js.map +7 -0
  554. package/dist/runtime/histogram.d.ts +49 -0
  555. package/dist/runtime/histogram.d.ts.map +1 -0
  556. package/dist/runtime/histogram.js +162 -0
  557. package/dist/runtime/histogram.js.map +7 -0
  558. package/dist/runtime/index.d.ts +14 -0
  559. package/dist/runtime/index.d.ts.map +1 -0
  560. package/dist/runtime/index.js +14 -0
  561. package/dist/runtime/index.js.map +7 -0
  562. package/dist/runtime/inspect.d.ts +57 -0
  563. package/dist/runtime/inspect.d.ts.map +1 -0
  564. package/dist/runtime/inspect.js +83 -0
  565. package/dist/runtime/inspect.js.map +7 -0
  566. package/dist/runtime/quality.d.ts +54 -0
  567. package/dist/runtime/quality.d.ts.map +1 -0
  568. package/dist/runtime/quality.js +359 -0
  569. package/dist/runtime/quality.js.map +7 -0
  570. package/dist/runtime/qualityTarget.d.ts +9 -0
  571. package/dist/runtime/qualityTarget.d.ts.map +1 -0
  572. package/dist/runtime/qualityTarget.js +120 -0
  573. package/dist/runtime/qualityTarget.js.map +7 -0
  574. package/dist/runtime/render.d.ts +91 -0
  575. package/dist/runtime/render.d.ts.map +1 -0
  576. package/dist/runtime/render.js +14 -0
  577. package/dist/runtime/render.js.map +7 -0
  578. package/dist/runtime/report/build.d.ts +7 -0
  579. package/dist/runtime/report/build.d.ts.map +1 -0
  580. package/dist/runtime/report/build.js +180 -0
  581. package/dist/runtime/report/build.js.map +7 -0
  582. package/dist/runtime/report/cartesian.d.ts +37 -0
  583. package/dist/runtime/report/cartesian.d.ts.map +1 -0
  584. package/dist/runtime/report/cartesian.js +283 -0
  585. package/dist/runtime/report/cartesian.js.map +7 -0
  586. package/dist/runtime/report/constants.d.ts +18 -0
  587. package/dist/runtime/report/constants.d.ts.map +1 -0
  588. package/dist/runtime/report/constants.js +22 -0
  589. package/dist/runtime/report/constants.js.map +7 -0
  590. package/dist/runtime/report/dashboard.d.ts +17 -0
  591. package/dist/runtime/report/dashboard.d.ts.map +1 -0
  592. package/dist/runtime/report/dashboard.js +81 -0
  593. package/dist/runtime/report/dashboard.js.map +7 -0
  594. package/dist/runtime/report/evidence.d.ts +4 -0
  595. package/dist/runtime/report/evidence.d.ts.map +1 -0
  596. package/dist/runtime/report/evidence.js +47 -0
  597. package/dist/runtime/report/evidence.js.map +7 -0
  598. package/dist/runtime/report/text.d.ts +15 -0
  599. package/dist/runtime/report/text.d.ts.map +1 -0
  600. package/dist/runtime/report/text.js +208 -0
  601. package/dist/runtime/report/text.js.map +7 -0
  602. package/dist/runtime/report/types.d.ts +92 -0
  603. package/dist/runtime/report/types.d.ts.map +1 -0
  604. package/dist/runtime/report/types.js +1 -0
  605. package/dist/runtime/report/types.js.map +7 -0
  606. package/dist/runtime/report/utils.d.ts +6 -0
  607. package/dist/runtime/report/utils.d.ts.map +1 -0
  608. package/dist/runtime/report/utils.js +27 -0
  609. package/dist/runtime/report/utils.js.map +7 -0
  610. package/dist/runtime/report.d.ts +27 -0
  611. package/dist/runtime/report.d.ts.map +1 -0
  612. package/dist/runtime/report.js +17 -0
  613. package/dist/runtime/report.js.map +7 -0
  614. package/dist/runtime/resolve.d.ts +27 -0
  615. package/dist/runtime/resolve.d.ts.map +1 -0
  616. package/dist/runtime/resolve.js +109 -0
  617. package/dist/runtime/resolve.js.map +7 -0
  618. package/dist/runtime/runtimeShared.d.ts +37 -0
  619. package/dist/runtime/runtimeShared.d.ts.map +1 -0
  620. package/dist/runtime/runtimeShared.js +110 -0
  621. package/dist/runtime/runtimeShared.js.map +7 -0
  622. package/dist/runtime/slope.d.ts +46 -0
  623. package/dist/runtime/slope.d.ts.map +1 -0
  624. package/dist/runtime/slope.js +210 -0
  625. package/dist/runtime/slope.js.map +7 -0
  626. package/dist/runtime/waterfall.d.ts +76 -0
  627. package/dist/runtime/waterfall.d.ts.map +1 -0
  628. package/dist/runtime/waterfall.js +239 -0
  629. package/dist/runtime/waterfall.js.map +7 -0
  630. package/dist/runtime/wire.d.ts +30 -0
  631. package/dist/runtime/wire.d.ts.map +1 -0
  632. package/dist/runtime/wire.js +194 -0
  633. package/dist/runtime/wire.js.map +7 -0
  634. package/dist/scales/band.d.ts +17 -0
  635. package/dist/scales/band.d.ts.map +1 -0
  636. package/dist/scales/band.js +80 -0
  637. package/dist/scales/band.js.map +7 -0
  638. package/dist/scales/continuous.d.ts +12 -0
  639. package/dist/scales/continuous.d.ts.map +1 -0
  640. package/dist/scales/continuous.js +45 -0
  641. package/dist/scales/continuous.js.map +7 -0
  642. package/dist/scales/format.d.ts +3 -0
  643. package/dist/scales/format.d.ts.map +1 -0
  644. package/dist/scales/format.js +24 -0
  645. package/dist/scales/format.js.map +7 -0
  646. package/dist/scales/index.d.ts +10 -0
  647. package/dist/scales/index.d.ts.map +1 -0
  648. package/dist/scales/index.js +12 -0
  649. package/dist/scales/index.js.map +7 -0
  650. package/dist/scales/linear.d.ts +8 -0
  651. package/dist/scales/linear.d.ts.map +1 -0
  652. package/dist/scales/linear.js +22 -0
  653. package/dist/scales/linear.js.map +7 -0
  654. package/dist/scales/log.d.ts +9 -0
  655. package/dist/scales/log.d.ts.map +1 -0
  656. package/dist/scales/log.js +153 -0
  657. package/dist/scales/log.js.map +7 -0
  658. package/dist/scales/time.d.ts +8 -0
  659. package/dist/scales/time.d.ts.map +1 -0
  660. package/dist/scales/time.js +24 -0
  661. package/dist/scales/time.js.map +7 -0
  662. package/dist/scales/types.d.ts +24 -0
  663. package/dist/scales/types.d.ts.map +1 -0
  664. package/dist/scales/types.js +1 -0
  665. package/dist/scales/types.js.map +7 -0
  666. package/dist/shape/arc.d.ts +18 -0
  667. package/dist/shape/arc.d.ts.map +1 -0
  668. package/dist/shape/arc.js +51 -0
  669. package/dist/shape/arc.js.map +7 -0
  670. package/dist/shape/area.d.ts +12 -0
  671. package/dist/shape/area.d.ts.map +1 -0
  672. package/dist/shape/area.js +49 -0
  673. package/dist/shape/area.js.map +7 -0
  674. package/dist/shape/curves.d.ts +11 -0
  675. package/dist/shape/curves.d.ts.map +1 -0
  676. package/dist/shape/curves.js +123 -0
  677. package/dist/shape/curves.js.map +7 -0
  678. package/dist/shape/index.d.ts +7 -0
  679. package/dist/shape/index.d.ts.map +1 -0
  680. package/dist/shape/index.js +27 -0
  681. package/dist/shape/index.js.map +7 -0
  682. package/dist/shape/line.d.ts +8 -0
  683. package/dist/shape/line.d.ts.map +1 -0
  684. package/dist/shape/line.js +26 -0
  685. package/dist/shape/line.js.map +7 -0
  686. package/dist/shape/roundedRect.d.ts +3 -0
  687. package/dist/shape/roundedRect.d.ts.map +1 -0
  688. package/dist/shape/roundedRect.js +52 -0
  689. package/dist/shape/roundedRect.js.map +7 -0
  690. package/dist/shape/sink.d.ts +9 -0
  691. package/dist/shape/sink.d.ts.map +1 -0
  692. package/dist/shape/sink.js +1 -0
  693. package/dist/shape/sink.js.map +7 -0
  694. package/dist/spec/chartDefinitions.d.ts +57 -0
  695. package/dist/spec/chartDefinitions.d.ts.map +1 -0
  696. package/dist/spec/chartDefinitions.js +55 -0
  697. package/dist/spec/chartDefinitions.js.map +7 -0
  698. package/dist/spec/dashboard.d.ts +161 -0
  699. package/dist/spec/dashboard.d.ts.map +1 -0
  700. package/dist/spec/dashboard.js +1 -0
  701. package/dist/spec/dashboard.js.map +7 -0
  702. package/dist/spec/index.d.ts +12 -0
  703. package/dist/spec/index.d.ts.map +1 -0
  704. package/dist/spec/index.js +12 -0
  705. package/dist/spec/index.js.map +7 -0
  706. package/dist/spec/infer.d.ts +11 -0
  707. package/dist/spec/infer.d.ts.map +1 -0
  708. package/dist/spec/infer.js +20 -0
  709. package/dist/spec/infer.js.map +7 -0
  710. package/dist/spec/jsonpatch.d.ts +28 -0
  711. package/dist/spec/jsonpatch.d.ts.map +1 -0
  712. package/dist/spec/jsonpatch.js +100 -0
  713. package/dist/spec/jsonpatch.js.map +7 -0
  714. package/dist/spec/lint.d.ts +24 -0
  715. package/dist/spec/lint.d.ts.map +1 -0
  716. package/dist/spec/lint.js +175 -0
  717. package/dist/spec/lint.js.map +7 -0
  718. package/dist/spec/repair.d.ts +48 -0
  719. package/dist/spec/repair.d.ts.map +1 -0
  720. package/dist/spec/repair.js +131 -0
  721. package/dist/spec/repair.js.map +7 -0
  722. package/dist/spec/selection.d.ts +104 -0
  723. package/dist/spec/selection.d.ts.map +1 -0
  724. package/dist/spec/selection.js +1 -0
  725. package/dist/spec/selection.js.map +7 -0
  726. package/dist/spec/sketch.d.ts +22 -0
  727. package/dist/spec/sketch.d.ts.map +1 -0
  728. package/dist/spec/sketch.js +26 -0
  729. package/dist/spec/sketch.js.map +7 -0
  730. package/dist/spec/suggest.d.ts +19 -0
  731. package/dist/spec/suggest.d.ts.map +1 -0
  732. package/dist/spec/suggest.js +52 -0
  733. package/dist/spec/suggest.js.map +7 -0
  734. package/dist/spec/templates.d.ts +63 -0
  735. package/dist/spec/templates.d.ts.map +1 -0
  736. package/dist/spec/templates.js +621 -0
  737. package/dist/spec/templates.js.map +7 -0
  738. package/dist/spec/transform/aggregate.d.ts +10 -0
  739. package/dist/spec/transform/aggregate.d.ts.map +1 -0
  740. package/dist/spec/transform/aggregate.js +40 -0
  741. package/dist/spec/transform/aggregate.js.map +7 -0
  742. package/dist/spec/transform/apply.d.ts +12 -0
  743. package/dist/spec/transform/apply.d.ts.map +1 -0
  744. package/dist/spec/transform/apply.js +28 -0
  745. package/dist/spec/transform/apply.js.map +7 -0
  746. package/dist/spec/transform/bin.d.ts +28 -0
  747. package/dist/spec/transform/bin.d.ts.map +1 -0
  748. package/dist/spec/transform/bin.js +71 -0
  749. package/dist/spec/transform/bin.js.map +7 -0
  750. package/dist/spec/transform/calculate.d.ts +9 -0
  751. package/dist/spec/transform/calculate.d.ts.map +1 -0
  752. package/dist/spec/transform/calculate.js +10 -0
  753. package/dist/spec/transform/calculate.js.map +7 -0
  754. package/dist/spec/transform/expr/error.d.ts +7 -0
  755. package/dist/spec/transform/expr/error.d.ts.map +1 -0
  756. package/dist/spec/transform/expr/error.js +16 -0
  757. package/dist/spec/transform/expr/error.js.map +7 -0
  758. package/dist/spec/transform/expr/evaluate.d.ts +14 -0
  759. package/dist/spec/transform/expr/evaluate.d.ts.map +1 -0
  760. package/dist/spec/transform/expr/evaluate.js +163 -0
  761. package/dist/spec/transform/expr/evaluate.js.map +7 -0
  762. package/dist/spec/transform/expr/index.d.ts +22 -0
  763. package/dist/spec/transform/expr/index.d.ts.map +1 -0
  764. package/dist/spec/transform/expr/index.js +109 -0
  765. package/dist/spec/transform/expr/index.js.map +7 -0
  766. package/dist/spec/transform/expr/parse.d.ts +70 -0
  767. package/dist/spec/transform/expr/parse.d.ts.map +1 -0
  768. package/dist/spec/transform/expr/parse.js +199 -0
  769. package/dist/spec/transform/expr/parse.js.map +7 -0
  770. package/dist/spec/transform/expr/tokenize.d.ts +18 -0
  771. package/dist/spec/transform/expr/tokenize.d.ts.map +1 -0
  772. package/dist/spec/transform/expr/tokenize.js +88 -0
  773. package/dist/spec/transform/expr/tokenize.js.map +7 -0
  774. package/dist/spec/transform/filter.d.ts +12 -0
  775. package/dist/spec/transform/filter.d.ts.map +1 -0
  776. package/dist/spec/transform/filter.js +115 -0
  777. package/dist/spec/transform/filter.js.map +7 -0
  778. package/dist/spec/transform/fold.d.ts +10 -0
  779. package/dist/spec/transform/fold.d.ts.map +1 -0
  780. package/dist/spec/transform/fold.js +14 -0
  781. package/dist/spec/transform/fold.js.map +7 -0
  782. package/dist/spec/transform/index.d.ts +17 -0
  783. package/dist/spec/transform/index.d.ts.map +1 -0
  784. package/dist/spec/transform/index.js +27 -0
  785. package/dist/spec/transform/index.js.map +7 -0
  786. package/dist/spec/transform/timeUnit.d.ts +11 -0
  787. package/dist/spec/transform/timeUnit.d.ts.map +1 -0
  788. package/dist/spec/transform/timeUnit.js +43 -0
  789. package/dist/spec/transform/timeUnit.js.map +7 -0
  790. package/dist/spec/transform/types.d.ts +141 -0
  791. package/dist/spec/transform/types.d.ts.map +1 -0
  792. package/dist/spec/transform/types.js +16 -0
  793. package/dist/spec/transform/types.js.map +7 -0
  794. package/dist/spec/types.d.ts +1067 -0
  795. package/dist/spec/types.d.ts.map +1 -0
  796. package/dist/spec/types.js +41 -0
  797. package/dist/spec/types.js.map +7 -0
  798. package/dist/spec/validate/charts.d.ts +11 -0
  799. package/dist/spec/validate/charts.d.ts.map +1 -0
  800. package/dist/spec/validate/charts.js +416 -0
  801. package/dist/spec/validate/charts.js.map +7 -0
  802. package/dist/spec/validate/chrome.d.ts +4 -0
  803. package/dist/spec/validate/chrome.d.ts.map +1 -0
  804. package/dist/spec/validate/chrome.js +45 -0
  805. package/dist/spec/validate/chrome.js.map +7 -0
  806. package/dist/spec/validate/common.d.ts +101 -0
  807. package/dist/spec/validate/common.d.ts.map +1 -0
  808. package/dist/spec/validate/common.js +47 -0
  809. package/dist/spec/validate/common.js.map +7 -0
  810. package/dist/spec/validate/conditional.d.ts +8 -0
  811. package/dist/spec/validate/conditional.d.ts.map +1 -0
  812. package/dist/spec/validate/conditional.js +89 -0
  813. package/dist/spec/validate/conditional.js.map +7 -0
  814. package/dist/spec/validate/dashboard.d.ts +9 -0
  815. package/dist/spec/validate/dashboard.d.ts.map +1 -0
  816. package/dist/spec/validate/dashboard.js +183 -0
  817. package/dist/spec/validate/dashboard.js.map +7 -0
  818. package/dist/spec/validate/fieldDef.d.ts +14 -0
  819. package/dist/spec/validate/fieldDef.d.ts.map +1 -0
  820. package/dist/spec/validate/fieldDef.js +137 -0
  821. package/dist/spec/validate/fieldDef.js.map +7 -0
  822. package/dist/spec/validate/interaction.d.ts +10 -0
  823. package/dist/spec/validate/interaction.d.ts.map +1 -0
  824. package/dist/spec/validate/interaction.js +92 -0
  825. package/dist/spec/validate/interaction.js.map +7 -0
  826. package/dist/spec/validate/overlays.d.ts +28 -0
  827. package/dist/spec/validate/overlays.d.ts.map +1 -0
  828. package/dist/spec/validate/overlays.js +110 -0
  829. package/dist/spec/validate/overlays.js.map +7 -0
  830. package/dist/spec/validate/spec.d.ts +25 -0
  831. package/dist/spec/validate/spec.d.ts.map +1 -0
  832. package/dist/spec/validate/spec.js +141 -0
  833. package/dist/spec/validate/spec.js.map +7 -0
  834. package/dist/spec/validate/transform.d.ts +12 -0
  835. package/dist/spec/validate/transform.d.ts.map +1 -0
  836. package/dist/spec/validate/transform.js +168 -0
  837. package/dist/spec/validate/transform.js.map +7 -0
  838. package/dist/spec/validate.d.ts +3 -0
  839. package/dist/spec/validate.d.ts.map +1 -0
  840. package/dist/spec/validate.data.d.ts +5 -0
  841. package/dist/spec/validate.data.d.ts.map +1 -0
  842. package/dist/spec/validate.data.js +91 -0
  843. package/dist/spec/validate.data.js.map +7 -0
  844. package/dist/spec/validate.js +7 -0
  845. package/dist/spec/validate.js.map +7 -0
  846. package/dist/theme/fonts/patrickHand.d.ts +13 -0
  847. package/dist/theme/fonts/patrickHand.d.ts.map +1 -0
  848. package/dist/theme/fonts/patrickHand.js +7 -0
  849. package/dist/theme/fonts/patrickHand.js.map +7 -0
  850. package/dist/theme/index.d.ts +3 -0
  851. package/dist/theme/index.d.ts.map +1 -0
  852. package/dist/theme/index.js +3 -0
  853. package/dist/theme/index.js.map +7 -0
  854. package/dist/theme/sketch.d.ts +26 -0
  855. package/dist/theme/sketch.d.ts.map +1 -0
  856. package/dist/theme/sketch.js +49 -0
  857. package/dist/theme/sketch.js.map +7 -0
  858. package/dist/theme/tokens.d.ts +112 -0
  859. package/dist/theme/tokens.d.ts.map +1 -0
  860. package/dist/theme/tokens.js +176 -0
  861. package/dist/theme/tokens.js.map +7 -0
  862. package/dist/ticks/index.d.ts +3 -0
  863. package/dist/ticks/index.d.ts.map +1 -0
  864. package/dist/ticks/index.js +16 -0
  865. package/dist/ticks/index.js.map +7 -0
  866. package/dist/ticks/numeric.d.ts +5 -0
  867. package/dist/ticks/numeric.d.ts.map +1 -0
  868. package/dist/ticks/numeric.js +98 -0
  869. package/dist/ticks/numeric.js.map +7 -0
  870. package/dist/ticks/time.d.ts +3 -0
  871. package/dist/ticks/time.d.ts.map +1 -0
  872. package/dist/ticks/time.js +182 -0
  873. package/dist/ticks/time.js.map +7 -0
  874. package/dist/types.d.ts +54 -0
  875. package/dist/types.d.ts.map +1 -0
  876. package/dist/types.js +1 -0
  877. package/dist/types.js.map +7 -0
  878. package/dist/util/calendar.d.ts +27 -0
  879. package/dist/util/calendar.d.ts.map +1 -0
  880. package/dist/util/calendar.js +147 -0
  881. package/dist/util/calendar.js.map +7 -0
  882. package/dist/util/data.d.ts +60 -0
  883. package/dist/util/data.d.ts.map +1 -0
  884. package/dist/util/data.js +145 -0
  885. package/dist/util/data.js.map +7 -0
  886. package/dist/util/field.d.ts +4 -0
  887. package/dist/util/field.d.ts.map +1 -0
  888. package/dist/util/field.js +15 -0
  889. package/dist/util/field.js.map +7 -0
  890. package/dist/util/index.d.ts +5 -0
  891. package/dist/util/index.d.ts.map +1 -0
  892. package/dist/util/index.js +5 -0
  893. package/dist/util/index.js.map +7 -0
  894. package/dist/util/infer.d.ts +8 -0
  895. package/dist/util/infer.d.ts.map +1 -0
  896. package/dist/util/infer.js +62 -0
  897. package/dist/util/infer.js.map +7 -0
  898. package/dist/util/math.d.ts +41 -0
  899. package/dist/util/math.d.ts.map +1 -0
  900. package/dist/util/math.js +123 -0
  901. package/dist/util/math.js.map +7 -0
  902. package/dist/util/profile.d.ts +133 -0
  903. package/dist/util/profile.d.ts.map +1 -0
  904. package/dist/util/profile.js +314 -0
  905. package/dist/util/profile.js.map +7 -0
  906. package/package.json +10 -5
  907. package/dist/chunk-V6TY7KAL.js +0 -7
  908. package/dist/chunk-V6TY7KAL.js.map +0 -1
  909. package/dist/patrickHand-ITDQJJE2.js +0 -9
  910. package/dist/patrickHand-ITDQJJE2.js.map +0 -1
@@ -0,0 +1,404 @@
1
+ import { ordinalColorScale, sequentialColorScale, sequential, rgbaToCss, parseColor } from "../color/index.js";
2
+ import { formatValue } from "../format/index.js";
3
+ import { fontString, measureText, ellipsize } from "../render/text.js";
4
+ import { accessor, toNumber, toKey } from "../util/data.js";
5
+ import { RoughPen } from "../rough/index.js";
6
+ import { resolveSketch } from "../spec/sketch.js";
7
+ import { addOverlayText, drawTitleBlock } from "./chrome.js";
8
+ import { addCenteredEmptyMessage } from "./emptyOverlay.js";
9
+ const MIN_LABEL_WIDTH = 38;
10
+ const MIN_LABEL_HEIGHT = 24;
11
+ function cleanRect(rect) {
12
+ return {
13
+ x: Number.isFinite(rect.x) ? rect.x : 0,
14
+ y: Number.isFinite(rect.y) ? rect.y : 0,
15
+ width: Math.max(0, Number.isFinite(rect.width) ? rect.width : 0),
16
+ height: Math.max(0, Number.isFinite(rect.height) ? rect.height : 0)
17
+ };
18
+ }
19
+ function worst(row, side) {
20
+ if (row.length === 0 || side <= 0) return Infinity;
21
+ let sum = 0;
22
+ let min = Infinity;
23
+ let max = 0;
24
+ for (const area of row) {
25
+ sum += area;
26
+ min = Math.min(min, area);
27
+ max = Math.max(max, area);
28
+ }
29
+ if (sum <= 0 || min <= 0) return Infinity;
30
+ const side2 = side * side;
31
+ return Math.max(side2 * max / (sum * sum), sum * sum / (side2 * min));
32
+ }
33
+ function layoutRow(row, rect, out) {
34
+ const area = row.reduce((sum, d) => sum + d.area, 0);
35
+ if (area <= 0 || rect.width <= 0 || rect.height <= 0) return rect;
36
+ if (rect.height >= rect.width) {
37
+ const h = Math.min(rect.height, area / rect.width);
38
+ let x = rect.x;
39
+ for (let i = 0; i < row.length; i++) {
40
+ const w2 = i === row.length - 1 ? rect.x + rect.width - x : row[i].area / h;
41
+ out.push({ item: row[i].item, rect: { x, y: rect.y, width: Math.max(0, w2), height: h } });
42
+ x += w2;
43
+ }
44
+ return { x: rect.x, y: rect.y + h, width: rect.width, height: Math.max(0, rect.height - h) };
45
+ }
46
+ const w = Math.min(rect.width, area / rect.height);
47
+ let y = rect.y;
48
+ for (let i = 0; i < row.length; i++) {
49
+ const h = i === row.length - 1 ? rect.y + rect.height - y : row[i].area / w;
50
+ out.push({ item: row[i].item, rect: { x: rect.x, y, width: w, height: Math.max(0, h) } });
51
+ y += h;
52
+ }
53
+ return { x: rect.x + w, y: rect.y, width: Math.max(0, rect.width - w), height: rect.height };
54
+ }
55
+ function layoutTreemap(items, rect) {
56
+ const box = cleanRect(rect);
57
+ const total = items.reduce((sum, item) => Number.isFinite(item.value) && item.value > 0 ? sum + item.value : sum, 0);
58
+ const area = box.width * box.height;
59
+ if (total <= 0 || area <= 0) return [];
60
+ const pending = items.filter((item) => Number.isFinite(item.value) && item.value > 0).map((item) => ({ item, area: item.value / total * area }));
61
+ const out = [];
62
+ let rest = box;
63
+ let row = [];
64
+ let rowAreas = [];
65
+ const flush = () => {
66
+ if (row.length === 0) return;
67
+ rest = layoutRow(row, rest, out);
68
+ row = [];
69
+ rowAreas = [];
70
+ };
71
+ for (const next of pending) {
72
+ const side = Math.min(rest.width, rest.height);
73
+ if (row.length === 0 || worst([...rowAreas, next.area], side) <= worst(rowAreas, side)) {
74
+ row.push(next);
75
+ rowAreas.push(next.area);
76
+ } else {
77
+ flush();
78
+ row.push(next);
79
+ rowAreas.push(next.area);
80
+ }
81
+ }
82
+ flush();
83
+ return out;
84
+ }
85
+ function insetRect(rect, pad) {
86
+ return {
87
+ x: rect.x + pad,
88
+ y: rect.y + pad,
89
+ width: Math.max(0, rect.width - pad * 2),
90
+ height: Math.max(0, rect.height - pad * 2)
91
+ };
92
+ }
93
+ function labelFor(value) {
94
+ const key = toKey(value);
95
+ return key === "" ? "(blank)" : key;
96
+ }
97
+ function textureShade(fill) {
98
+ const lum = (0.299 * fill.r + 0.587 * fill.g + 0.114 * fill.b) / 255;
99
+ const k = lum > 0.5 ? 0.68 : 1.4;
100
+ const c = (n) => Math.max(0, Math.min(255, Math.round(n * k)));
101
+ return rgbaToCss({ r: c(fill.r), g: c(fill.g), b: c(fill.b), a: 1 });
102
+ }
103
+ function buildLeaves(treemap) {
104
+ const readCategory = accessor(treemap.encoding.category.field);
105
+ const readValue = accessor(treemap.encoding.value.field);
106
+ const readGroup = treemap.encoding.group ? accessor(treemap.encoding.group.field) : null;
107
+ const readColor = treemap.encoding.color ? accessor(treemap.encoding.color.field) : null;
108
+ const order = [];
109
+ const totals = /* @__PURE__ */ new Map();
110
+ for (const row of treemap.data ?? []) {
111
+ const rawCategory = readCategory(row);
112
+ const categoryKey = toKey(rawCategory);
113
+ const rawGroup = readGroup ? readGroup(row) : void 0;
114
+ const groupKey = readGroup ? toKey(rawGroup) : void 0;
115
+ const key = groupKey === void 0 ? categoryKey : `${groupKey}\0${categoryKey}`;
116
+ const value = toNumber(readValue(row));
117
+ if (!Number.isFinite(value) || value <= 0) continue;
118
+ let leaf = totals.get(key);
119
+ if (!leaf) {
120
+ const colorValue = readColor ? readColor(row) : void 0;
121
+ const colorNumber = colorValue === void 0 ? void 0 : toNumber(colorValue);
122
+ leaf = {
123
+ key,
124
+ category: rawCategory,
125
+ categoryLabel: labelFor(rawCategory),
126
+ value: 0,
127
+ group: rawGroup,
128
+ groupKey,
129
+ groupLabel: groupKey === void 0 ? void 0 : labelFor(rawGroup),
130
+ colorValue,
131
+ colorNumber: Number.isFinite(colorNumber) ? colorNumber : void 0,
132
+ fill: { r: 0, g: 0, b: 0, a: 1 },
133
+ fillCss: "#000",
134
+ sourceRows: 0
135
+ };
136
+ totals.set(key, leaf);
137
+ order.push(key);
138
+ }
139
+ leaf.value += value;
140
+ leaf.sourceRows++;
141
+ }
142
+ return order.map((key) => totals.get(key));
143
+ }
144
+ function colorLeaves(leaves, treemap, tokens) {
145
+ const fallback = parseColor(tokens.color.surface) ?? parseColor(tokens.color.palette[0] ?? "#14b8a6") ?? { r: 20, g: 184, b: 166, a: 1 };
146
+ const color = treemap.encoding.color;
147
+ const ordinal = ordinalColorScale({ palette: tokens.color.palette });
148
+ const numericValues = color ? leaves.map((leaf) => leaf.colorNumber).filter((n) => n !== void 0) : [];
149
+ const numericColor = Boolean(color && (color.type === "quantitative" || numericValues.length > 0 && numericValues.length === leaves.length));
150
+ const domain = numericValues.length ? [Math.min(...numericValues), Math.max(...numericValues)] : [0, 1];
151
+ const continuous = sequentialColorScale({ domain, interpolator: sequential(treemap.scheme ?? "teal") });
152
+ for (const leaf of leaves) {
153
+ let fill = fallback;
154
+ if (color) {
155
+ if (numericColor) {
156
+ if (leaf.colorNumber === void 0) {
157
+ fill = parseColor(tokens.color.border) ?? fallback;
158
+ leaf.colorNoData = true;
159
+ } else {
160
+ fill = continuous.map(leaf.colorNumber);
161
+ }
162
+ } else fill = ordinal.map(toKey(leaf.colorValue));
163
+ } else if (treemap.encoding.group && leaf.groupKey !== void 0) {
164
+ fill = ordinal.map(leaf.groupKey);
165
+ } else {
166
+ fill = ordinal.map(leaf.categoryLabel);
167
+ }
168
+ leaf.fill = fill;
169
+ leaf.fillCss = rgbaToCss(fill);
170
+ }
171
+ }
172
+ function buildGroups(leaves) {
173
+ const order = [];
174
+ const groups = /* @__PURE__ */ new Map();
175
+ for (const leaf of leaves) {
176
+ const key = leaf.groupKey ?? "";
177
+ let group = groups.get(key);
178
+ if (!group) {
179
+ group = { key, label: leaf.groupLabel ?? "(blank)", value: 0, leaves: [] };
180
+ groups.set(key, group);
181
+ order.push(key);
182
+ }
183
+ group.value += leaf.value;
184
+ group.leaves.push(leaf);
185
+ }
186
+ return order.map((key) => groups.get(key));
187
+ }
188
+ function tileProbe(treemap, tile) {
189
+ const probe = { [treemap.encoding.category.field]: tile.category };
190
+ const groupField = treemap.encoding.group?.field;
191
+ if (groupField) probe[groupField] = tile.group;
192
+ return probe;
193
+ }
194
+ function drawRect(ctx, pen, rect, fill, fillCss, stroke) {
195
+ if (rect.width <= 0 || rect.height <= 0) return;
196
+ if (pen) {
197
+ pen.rect(rect.x, rect.y, rect.width, rect.height, { fill: fillCss, fillStyle: "solid" });
198
+ pen.rect(rect.x, rect.y, rect.width, rect.height, {
199
+ fill: textureShade(fill),
200
+ fillStyle: "hachure",
201
+ fillAlpha: 0.4,
202
+ hachureGap: 7,
203
+ stroke
204
+ });
205
+ return;
206
+ }
207
+ ctx.fillStyle = fillCss;
208
+ ctx.fillRect(rect.x, rect.y, rect.width, rect.height);
209
+ ctx.strokeStyle = stroke;
210
+ ctx.lineWidth = 1;
211
+ ctx.strokeRect(rect.x + 0.5, rect.y + 0.5, Math.max(0, rect.width - 1), Math.max(0, rect.height - 1));
212
+ }
213
+ function addTileLabels(surface, tokens, tile, valueFormat) {
214
+ const compact = tile.rect.width < MIN_LABEL_WIDTH || tile.rect.height < MIN_LABEL_HEIGHT;
215
+ const pad = compact ? 2 : 5;
216
+ const padX = compact ? 3 : 6;
217
+ const padY = compact ? 1 : 2;
218
+ const labelSize = tokens.font.size.small;
219
+ if (tile.rect.width <= pad * 2 + padX * 2 + 2 || tile.rect.height < labelSize + padY * 2 + pad * 2 + 2) {
220
+ surface.labels?.omit({ role: "data-label", reason: "space", required: true, example: tile.categoryLabel, path: "/labels" });
221
+ return;
222
+ }
223
+ const valueSize = tokens.font.size.tiny;
224
+ const labelFont = fontString(labelSize, tokens.font.family, tokens.font.weight.bold);
225
+ const valueFont = fontString(valueSize, tokens.font.family);
226
+ const maxTextWidth = tile.rect.width - pad * 2 - padX * 2 - 2;
227
+ const labelText = ellipsize(tile.categoryLabel, maxTextWidth, labelFont);
228
+ if (labelText === "" || labelText === "\u2026" || compact && labelText.length / Math.max(1, tile.categoryLabel.length) < 0.5) {
229
+ surface.labels?.omit({ role: "data-label", reason: "unreadable", required: true, example: tile.categoryLabel, path: "/labels" });
230
+ return;
231
+ }
232
+ const pill = { background: tokens.color.surface, border: tokens.color.border, padX, padY };
233
+ addOverlayText(surface, tokens, {
234
+ left: tile.rect.x + pad + 2,
235
+ top: tile.rect.y + pad,
236
+ text: tile.categoryLabel,
237
+ maxWidth: maxTextWidth,
238
+ color: tokens.color.text,
239
+ size: labelSize,
240
+ weight: tokens.font.weight.bold,
241
+ pill
242
+ });
243
+ const labelPillH = labelSize + padY * 2 + 2;
244
+ const valuePillH = valueSize + padY * 2 + 2;
245
+ const valueText = formatValue(tile.value, valueFormat);
246
+ if (tile.rect.height >= pad * 2 + labelPillH + 2 + valuePillH && measureText(valueText, valueFont).width <= maxTextWidth) {
247
+ addOverlayText(surface, tokens, {
248
+ left: tile.rect.x + pad + 2,
249
+ top: tile.rect.y + pad + labelPillH + 2,
250
+ text: valueText,
251
+ color: tokens.color.textMuted,
252
+ size: valueSize,
253
+ pill
254
+ });
255
+ } else {
256
+ surface.labels?.omit({ role: "data-label", reason: "space", required: false, example: valueText, path: "/labels" });
257
+ }
258
+ }
259
+ function drawNoPositiveTreemap(surface, tokens, content) {
260
+ addCenteredEmptyMessage(surface, tokens, content, "No positive values");
261
+ }
262
+ function drawTreemapTiles(surface, treemap, tokens, content, leaves, context) {
263
+ const ctx = surface.marks.ctx;
264
+ const emphasis = context?.emphasis ?? null;
265
+ const sketch = resolveSketch(treemap);
266
+ const pen = sketch ? new RoughPen(ctx, sketch) : null;
267
+ const tiles = [];
268
+ const groupRects = [];
269
+ const stroke = tokens.color.textMuted;
270
+ let represented = 0;
271
+ const drawTile = (tile) => {
272
+ const alpha = emphasis ? emphasis.match(tileProbe(treemap, tile)) ? 1 : emphasis.dim : 1;
273
+ if (alpha !== 1) ctx.globalAlpha = alpha;
274
+ drawRect(ctx, pen, tile.rect, tile.fill, tile.fillCss, stroke);
275
+ if (tile.rect.width > 0 && tile.rect.height > 0) {
276
+ surface.evidence?.mark("tile", tile.rect.x, tile.rect.y, tile.rect.width, tile.rect.height, tile.fillCss, alpha, void 0, 1, void 0, alpha < 1, { color: stroke, opacity: 0.65, width: 1 });
277
+ represented += tile.sourceRows;
278
+ }
279
+ if (alpha !== 1) ctx.globalAlpha = 1;
280
+ };
281
+ ctx.save();
282
+ if (treemap.encoding.group) {
283
+ const groups = buildGroups(leaves);
284
+ for (const groupNode of layoutTreemap(groups, content)) {
285
+ const gRect = groupNode.rect;
286
+ const headerH = gRect.width >= 46 && gRect.height >= 40 ? tokens.font.size.tiny + 8 : 0;
287
+ groupRects.push({ group: groupNode.item, rect: gRect, headerH });
288
+ const inner = insetRect(
289
+ { x: gRect.x, y: gRect.y + headerH, width: gRect.width, height: Math.max(0, gRect.height - headerH) },
290
+ 2
291
+ );
292
+ for (const leafNode of layoutTreemap(groupNode.item.leaves, inner)) {
293
+ const tile = { ...leafNode.item, rect: leafNode.rect };
294
+ tiles.push(tile);
295
+ drawTile(tile);
296
+ }
297
+ }
298
+ } else {
299
+ for (const leafNode of layoutTreemap(leaves, content)) {
300
+ const tile = { ...leafNode.item, rect: leafNode.rect };
301
+ tiles.push(tile);
302
+ drawTile(tile);
303
+ }
304
+ }
305
+ ctx.restore();
306
+ return { tiles, groupRects, represented, pen, sketch };
307
+ }
308
+ function drawGroupFrames(surface, tokens, treemap, groups, pen, sketch) {
309
+ const ctx = surface.marks.ctx;
310
+ const stroke = tokens.color.background;
311
+ for (const { group, rect, headerH } of groups) {
312
+ if (pen) pen.rect(rect.x, rect.y, rect.width, rect.height, { stroke, roughness: sketch.roughness * 0.6 });
313
+ else {
314
+ ctx.strokeStyle = stroke;
315
+ ctx.lineWidth = 1;
316
+ ctx.strokeRect(rect.x + 0.5, rect.y + 0.5, Math.max(0, rect.width - 1), Math.max(0, rect.height - 1));
317
+ }
318
+ if (headerH > 0) {
319
+ const headerW = Math.max(0, rect.width - 10);
320
+ addOverlayText(surface, tokens, {
321
+ left: rect.x + 5,
322
+ top: rect.y + 4,
323
+ width: headerW,
324
+ text: group.label,
325
+ maxWidth: headerW,
326
+ color: tokens.color.text,
327
+ size: tokens.font.size.tiny,
328
+ weight: tokens.font.weight.bold,
329
+ opacity: 0.78
330
+ });
331
+ } else if (treemap.labels !== false) {
332
+ surface.labels?.omit({ role: "data-label", reason: "space", required: true, example: group.label, path: "/encoding/group" });
333
+ }
334
+ }
335
+ }
336
+ function buildTreemapInteraction(treemap, content, tiles, total) {
337
+ const valueLabel = treemap.encoding.value.title ?? treemap.encoding.value.field;
338
+ const colorLabel = treemap.encoding.color?.title ?? treemap.encoding.color?.field;
339
+ const categoryField = treemap.encoding.category.field;
340
+ const groupField = treemap.encoding.group?.field;
341
+ const hitTile = (px, py) => {
342
+ for (let i = tiles.length - 1; i >= 0; i--) {
343
+ const tile = tiles[i];
344
+ if (px >= tile.rect.x && px <= tile.rect.x + tile.rect.width && py >= tile.rect.y && py <= tile.rect.y + tile.rect.height) return tile;
345
+ }
346
+ return null;
347
+ };
348
+ return {
349
+ region: { x: content.x, y: content.y, width: content.width, height: content.height },
350
+ hitTest: (px, py) => {
351
+ const tile = hitTile(px, py);
352
+ if (!tile) return null;
353
+ return {
354
+ key: tile.key,
355
+ anchorX: px,
356
+ anchorY: py,
357
+ content: {
358
+ title: groupField ? `${tile.groupLabel ?? "(blank)"} \u25B8 ${tile.categoryLabel}` : tile.categoryLabel,
359
+ rows: [
360
+ { swatch: tile.fillCss, label: valueLabel, value: formatValue(tile.value, treemap.encoding.value.format) },
361
+ ...colorLabel ? [{
362
+ label: colorLabel,
363
+ value: tile.colorNoData ? "no data" : formatValue(tile.colorValue, treemap.encoding.color?.format),
364
+ muted: true
365
+ }] : [],
366
+ { label: "share", value: `${(tile.value / total * 100).toFixed(1)}%`, muted: true }
367
+ ]
368
+ }
369
+ };
370
+ },
371
+ pick: (px, py) => {
372
+ const tile = hitTile(px, py);
373
+ if (!tile) return null;
374
+ return groupField ? { kind: "point", fields: [categoryField, groupField], tuples: [[tile.category, tile.group]] } : { kind: "point", fields: [categoryField], tuples: [[tile.category]] };
375
+ }
376
+ };
377
+ }
378
+ function drawTreemap(surface, spec, tokens, size, context) {
379
+ surface.evidence?.begin("aggregate");
380
+ surface.evidence?.data(0, "aggregate");
381
+ const treemap = spec;
382
+ const content = drawTitleBlock(surface, tokens, size, treemap.title);
383
+ const leaves = buildLeaves(treemap);
384
+ colorLeaves(leaves, treemap, tokens);
385
+ const total = leaves.reduce((sum, leaf) => sum + leaf.value, 0);
386
+ if (leaves.length === 0 || total <= 0 || content.width <= 0 || content.height <= 0) {
387
+ drawNoPositiveTreemap(surface, tokens, content);
388
+ return;
389
+ }
390
+ const { tiles, groupRects, represented, pen, sketch } = drawTreemapTiles(surface, treemap, tokens, content, leaves, context);
391
+ surface.evidence?.data(represented, "aggregate");
392
+ if (treemap.encoding.group) {
393
+ drawGroupFrames(surface, tokens, treemap, groupRects, pen, sketch);
394
+ }
395
+ if (treemap.labels !== false) {
396
+ for (const tile of tiles) addTileLabels(surface, tokens, tile, treemap.encoding.value.format);
397
+ }
398
+ return buildTreemapInteraction(treemap, content, tiles, total);
399
+ }
400
+ export {
401
+ drawTreemap,
402
+ layoutTreemap
403
+ };
404
+ //# sourceMappingURL=treemap.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/charts/treemap.ts"],
4
+ "sourcesContent": ["import { ordinalColorScale, sequentialColorScale, sequential, rgbaToCss, parseColor } from '../color';\nimport { formatValue } from '../format';\nimport { fontString, measureText, ellipsize } from '../render/text';\nimport { accessor, toNumber, toKey } from '../util/data';\nimport { RoughPen } from '../rough';\nimport { resolveSketch } from '../spec/sketch';\nimport { addOverlayText, drawTitleBlock } from './chrome';\nimport type { ChartSpec, TreemapSpec } from '../spec/types';\nimport type { Surface } from '../render/surface';\nimport type { ThemeTokens } from '../theme';\nimport type { InteractionModel } from '../interaction/types';\nimport type { RenderContext } from './index';\nimport type { Datum, Rect, RGBA, Size } from '../types';\nimport { addCenteredEmptyMessage } from './emptyOverlay';\n\nexport interface TreemapLayoutInput {\n value: number;\n}\n\nexport interface TreemapLayoutNode<T extends TreemapLayoutInput = TreemapLayoutInput> {\n item: T;\n rect: Rect;\n}\n\ninterface Leaf extends TreemapLayoutInput {\n key: string;\n category: unknown;\n categoryLabel: string;\n value: number;\n group?: unknown;\n groupKey?: string;\n groupLabel?: string;\n colorValue?: unknown;\n colorNumber?: number;\n colorNoData?: boolean;\n fill: RGBA;\n fillCss: string;\n sourceRows: number;\n}\n\ninterface GroupItem extends TreemapLayoutInput {\n key: string;\n label: string;\n value: number;\n leaves: Leaf[];\n}\n\ninterface Tile extends Leaf {\n rect: Rect;\n}\n\nconst MIN_LABEL_WIDTH = 38;\nconst MIN_LABEL_HEIGHT = 24;\n\nfunction cleanRect(rect: Rect): Rect {\n return {\n x: Number.isFinite(rect.x) ? rect.x : 0,\n y: Number.isFinite(rect.y) ? rect.y : 0,\n width: Math.max(0, Number.isFinite(rect.width) ? rect.width : 0),\n height: Math.max(0, Number.isFinite(rect.height) ? rect.height : 0),\n };\n}\n\nfunction worst(row: readonly number[], side: number): number {\n if (row.length === 0 || side <= 0) return Infinity;\n let sum = 0;\n let min = Infinity;\n let max = 0;\n for (const area of row) {\n sum += area;\n min = Math.min(min, area);\n max = Math.max(max, area);\n }\n if (sum <= 0 || min <= 0) return Infinity;\n const side2 = side * side;\n return Math.max((side2 * max) / (sum * sum), (sum * sum) / (side2 * min));\n}\n\nfunction layoutRow<T extends TreemapLayoutInput>(\n row: readonly { item: T; area: number }[],\n rect: Rect,\n out: TreemapLayoutNode<T>[],\n): Rect {\n const area = row.reduce((sum, d) => sum + d.area, 0);\n if (area <= 0 || rect.width <= 0 || rect.height <= 0) return rect;\n\n if (rect.height >= rect.width) {\n const h = Math.min(rect.height, area / rect.width);\n let x = rect.x;\n for (let i = 0; i < row.length; i++) {\n const w = i === row.length - 1 ? rect.x + rect.width - x : row[i].area / h;\n out.push({ item: row[i].item, rect: { x, y: rect.y, width: Math.max(0, w), height: h } });\n x += w;\n }\n return { x: rect.x, y: rect.y + h, width: rect.width, height: Math.max(0, rect.height - h) };\n }\n\n const w = Math.min(rect.width, area / rect.height);\n let y = rect.y;\n for (let i = 0; i < row.length; i++) {\n const h = i === row.length - 1 ? rect.y + rect.height - y : row[i].area / w;\n out.push({ item: row[i].item, rect: { x: rect.x, y, width: w, height: Math.max(0, h) } });\n y += h;\n }\n return { x: rect.x + w, y: rect.y, width: Math.max(0, rect.width - w), height: rect.height };\n}\n\n/** Squarified treemap layout. Input order is preserved for deterministic agent output. */\nexport function layoutTreemap<T extends TreemapLayoutInput>(items: readonly T[], rect: Rect): TreemapLayoutNode<T>[] {\n const box = cleanRect(rect);\n const total = items.reduce((sum, item) => (Number.isFinite(item.value) && item.value > 0 ? sum + item.value : sum), 0);\n const area = box.width * box.height;\n if (total <= 0 || area <= 0) return [];\n\n const pending = items\n .filter((item) => Number.isFinite(item.value) && item.value > 0)\n .map((item) => ({ item, area: (item.value / total) * area }));\n const out: TreemapLayoutNode<T>[] = [];\n let rest = box;\n let row: { item: T; area: number }[] = [];\n let rowAreas: number[] = [];\n\n const flush = () => {\n if (row.length === 0) return;\n rest = layoutRow(row, rest, out);\n row = [];\n rowAreas = [];\n };\n\n for (const next of pending) {\n const side = Math.min(rest.width, rest.height);\n if (row.length === 0 || worst([...rowAreas, next.area], side) <= worst(rowAreas, side)) {\n row.push(next);\n rowAreas.push(next.area);\n } else {\n flush();\n row.push(next);\n rowAreas.push(next.area);\n }\n }\n flush();\n return out;\n}\n\nfunction insetRect(rect: Rect, pad: number): Rect {\n return {\n x: rect.x + pad,\n y: rect.y + pad,\n width: Math.max(0, rect.width - pad * 2),\n height: Math.max(0, rect.height - pad * 2),\n };\n}\n\nfunction labelFor(value: unknown): string {\n const key = toKey(value);\n return key === '' ? '(blank)' : key;\n}\n\n/**\n * A hand-drawn hachure shade for a tile fill: shifted *away* from the fill's own\n * luminance (darker for light tiles, lighter for dark tiles) so the \"marker\"\n * streaks stay visible on any colour in the sequential/ordinal scale.\n */\nfunction textureShade(fill: RGBA): string {\n const lum = (0.299 * fill.r + 0.587 * fill.g + 0.114 * fill.b) / 255;\n const k = lum > 0.5 ? 0.68 : 1.4;\n const c = (n: number) => Math.max(0, Math.min(255, Math.round(n * k)));\n return rgbaToCss({ r: c(fill.r), g: c(fill.g), b: c(fill.b), a: 1 });\n}\n\nfunction buildLeaves(treemap: TreemapSpec): Leaf[] {\n const readCategory = accessor(treemap.encoding.category.field);\n const readValue = accessor(treemap.encoding.value.field);\n const readGroup = treemap.encoding.group ? accessor(treemap.encoding.group.field) : null;\n const readColor = treemap.encoding.color ? accessor(treemap.encoding.color.field) : null;\n const order: string[] = [];\n const totals = new Map<string, Leaf>();\n\n for (const row of treemap.data ?? []) {\n const rawCategory = readCategory(row);\n const categoryKey = toKey(rawCategory);\n const rawGroup = readGroup ? readGroup(row) : undefined;\n const groupKey = readGroup ? toKey(rawGroup) : undefined;\n const key = groupKey === undefined ? categoryKey : `${groupKey}\\u0000${categoryKey}`;\n const value = toNumber(readValue(row));\n if (!Number.isFinite(value) || value <= 0) continue;\n\n let leaf = totals.get(key);\n if (!leaf) {\n const colorValue = readColor ? readColor(row) : undefined;\n const colorNumber = colorValue === undefined ? undefined : toNumber(colorValue);\n leaf = {\n key,\n category: rawCategory,\n categoryLabel: labelFor(rawCategory),\n value: 0,\n group: rawGroup,\n groupKey,\n groupLabel: groupKey === undefined ? undefined : labelFor(rawGroup),\n colorValue,\n colorNumber: Number.isFinite(colorNumber) ? colorNumber : undefined,\n fill: { r: 0, g: 0, b: 0, a: 1 },\n fillCss: '#000',\n sourceRows: 0,\n };\n totals.set(key, leaf);\n order.push(key);\n }\n leaf.value += value;\n leaf.sourceRows++;\n }\n\n return order.map((key) => totals.get(key)!);\n}\n\nfunction colorLeaves(leaves: Leaf[], treemap: TreemapSpec, tokens: ThemeTokens): void {\n const fallback = parseColor(tokens.color.surface) ?? parseColor(tokens.color.palette[0] ?? '#14b8a6') ?? { r: 20, g: 184, b: 166, a: 1 };\n const color = treemap.encoding.color;\n const ordinal = ordinalColorScale({ palette: tokens.color.palette });\n const numericValues = color ? leaves.map((leaf) => leaf.colorNumber).filter((n): n is number => n !== undefined) : [];\n const numericColor = Boolean(color && (color.type === 'quantitative' || (numericValues.length > 0 && numericValues.length === leaves.length)));\n const domain: [number, number] = numericValues.length\n ? [Math.min(...numericValues), Math.max(...numericValues)]\n : [0, 1];\n const continuous = sequentialColorScale({ domain, interpolator: sequential(treemap.scheme ?? 'teal') });\n\n for (const leaf of leaves) {\n let fill: RGBA = fallback;\n if (color) {\n if (numericColor) {\n if (leaf.colorNumber === undefined) {\n fill = parseColor(tokens.color.border) ?? fallback;\n leaf.colorNoData = true;\n } else {\n fill = continuous.map(leaf.colorNumber);\n }\n }\n else fill = ordinal.map(toKey(leaf.colorValue));\n } else if (treemap.encoding.group && leaf.groupKey !== undefined) {\n fill = ordinal.map(leaf.groupKey);\n } else {\n fill = ordinal.map(leaf.categoryLabel);\n }\n leaf.fill = fill;\n leaf.fillCss = rgbaToCss(fill);\n }\n}\n\nfunction buildGroups(leaves: readonly Leaf[]): GroupItem[] {\n const order: string[] = [];\n const groups = new Map<string, GroupItem>();\n for (const leaf of leaves) {\n const key = leaf.groupKey ?? '';\n let group = groups.get(key);\n if (!group) {\n group = { key, label: leaf.groupLabel ?? '(blank)', value: 0, leaves: [] };\n groups.set(key, group);\n order.push(key);\n }\n group.value += leaf.value;\n group.leaves.push(leaf);\n }\n return order.map((key) => groups.get(key)!);\n}\n\nfunction tileProbe(treemap: TreemapSpec, tile: Tile): Datum {\n const probe: Datum = { [treemap.encoding.category.field]: tile.category };\n const groupField = treemap.encoding.group?.field;\n if (groupField) probe[groupField] = tile.group;\n return probe;\n}\n\nfunction drawRect(ctx: CanvasRenderingContext2D, pen: RoughPen | null, rect: Rect, fill: RGBA, fillCss: string, stroke: string): void {\n if (rect.width <= 0 || rect.height <= 0) return;\n if (pen) {\n // A solid base keeps the value-encoding colour crisp (light tiles stay\n // legible on a dark page), while a same-family hachure overlay adds\n // hand-drawn \"marker shading\" so the tile doesn't read as a flat digital\n // block trapped inside a wobbly outline. The overlay carries the outline.\n pen.rect(rect.x, rect.y, rect.width, rect.height, { fill: fillCss, fillStyle: 'solid' });\n pen.rect(rect.x, rect.y, rect.width, rect.height, {\n fill: textureShade(fill),\n fillStyle: 'hachure',\n fillAlpha: 0.4,\n hachureGap: 7,\n stroke,\n });\n return;\n }\n ctx.fillStyle = fillCss;\n ctx.fillRect(rect.x, rect.y, rect.width, rect.height);\n ctx.strokeStyle = stroke;\n ctx.lineWidth = 1;\n ctx.strokeRect(rect.x + 0.5, rect.y + 0.5, Math.max(0, rect.width - 1), Math.max(0, rect.height - 1));\n}\n\nfunction addTileLabels(surface: Surface, tokens: ThemeTokens, tile: Tile, valueFormat?: string): void {\n const compact = tile.rect.width < MIN_LABEL_WIDTH || tile.rect.height < MIN_LABEL_HEIGHT;\n const pad = compact ? 2 : 5;\n const padX = compact ? 3 : 6;\n const padY = compact ? 1 : 2;\n const labelSize = tokens.font.size.small;\n if (tile.rect.width <= pad * 2 + padX * 2 + 2 ||\n tile.rect.height < labelSize + padY * 2 + pad * 2 + 2) {\n surface.labels?.omit({ role: 'data-label', reason: 'space', required: true, example: tile.categoryLabel, path: '/labels' });\n return;\n }\n const valueSize = tokens.font.size.tiny;\n const labelFont = fontString(labelSize, tokens.font.family, tokens.font.weight.bold);\n const valueFont = fontString(valueSize, tokens.font.family);\n // Text budget inside the tile padding and the pill's own padding + 1px border\n // on each side, so the rounded badge never spills past the tile edge.\n const maxTextWidth = tile.rect.width - pad * 2 - padX * 2 - 2;\n const labelText = ellipsize(tile.categoryLabel, maxTextWidth, labelFont);\n if (labelText === '' || labelText === '\u2026' || (compact && labelText.length / Math.max(1, tile.categoryLabel.length) < 0.5)) {\n surface.labels?.omit({ role: 'data-label', reason: 'unreadable', required: true, example: tile.categoryLabel, path: '/labels' });\n return;\n }\n\n // A themed pill (solid fill + hairline border) keeps every label legible on\n // any tile colour, so labels read identically across fills \u2014 like the funnel.\n const pill = { background: tokens.color.surface, border: tokens.color.border, padX, padY } as const;\n\n addOverlayText(surface, tokens, {\n left: tile.rect.x + pad + 2,\n top: tile.rect.y + pad,\n text: tile.categoryLabel,\n maxWidth: maxTextWidth,\n color: tokens.color.text,\n size: labelSize,\n weight: tokens.font.weight.bold,\n pill,\n });\n\n const labelPillH = labelSize + padY * 2 + 2;\n const valuePillH = valueSize + padY * 2 + 2;\n const valueText = formatValue(tile.value, valueFormat);\n // Stack the value in its own pill only when the whole number fits (a truncated\n // number would mislead) and the tile is tall enough for a second row.\n if (\n tile.rect.height >= pad * 2 + labelPillH + 2 + valuePillH &&\n measureText(valueText, valueFont).width <= maxTextWidth\n ) {\n addOverlayText(surface, tokens, {\n left: tile.rect.x + pad + 2,\n top: tile.rect.y + pad + labelPillH + 2,\n text: valueText,\n color: tokens.color.textMuted,\n size: valueSize,\n pill,\n });\n } else {\n surface.labels?.omit({ role: 'data-label', reason: 'space', required: false, example: valueText, path: '/labels' });\n }\n}\n\ninterface GroupRect {\n group: GroupItem;\n rect: Rect;\n headerH: number;\n}\n\nfunction drawNoPositiveTreemap(\n surface: Surface,\n tokens: ThemeTokens,\n content: Rect,\n): void {\n addCenteredEmptyMessage(surface, tokens, content, 'No positive values');\n}\n\nfunction drawTreemapTiles(\n surface: Surface,\n treemap: TreemapSpec,\n tokens: ThemeTokens,\n content: Rect,\n leaves: Leaf[],\n context?: RenderContext,\n): { tiles: Tile[]; groupRects: GroupRect[]; represented: number; pen: RoughPen | null; sketch: ReturnType<typeof resolveSketch> } {\n const ctx = surface.marks.ctx;\n const emphasis = context?.emphasis ?? null;\n const sketch = resolveSketch(treemap);\n const pen = sketch ? new RoughPen(ctx, sketch) : null;\n const tiles: Tile[] = [];\n const groupRects: GroupRect[] = [];\n const stroke = tokens.color.textMuted;\n let represented = 0;\n const drawTile = (tile: Tile) => {\n const alpha = emphasis ? (emphasis.match(tileProbe(treemap, tile)) ? 1 : emphasis.dim) : 1;\n if (alpha !== 1) ctx.globalAlpha = alpha;\n drawRect(ctx, pen, tile.rect, tile.fill, tile.fillCss, stroke);\n if (tile.rect.width > 0 && tile.rect.height > 0) {\n surface.evidence?.mark('tile', tile.rect.x, tile.rect.y, tile.rect.width, tile.rect.height, tile.fillCss, alpha, undefined, 1, undefined, alpha < 1, { color: stroke, opacity: 0.65, width: 1 });\n represented += tile.sourceRows;\n }\n if (alpha !== 1) ctx.globalAlpha = 1;\n };\n\n ctx.save();\n if (treemap.encoding.group) {\n const groups = buildGroups(leaves);\n for (const groupNode of layoutTreemap(groups, content)) {\n const gRect = groupNode.rect;\n const headerH = gRect.width >= 46 && gRect.height >= 40 ? tokens.font.size.tiny + 8 : 0;\n groupRects.push({ group: groupNode.item, rect: gRect, headerH });\n const inner = insetRect(\n { x: gRect.x, y: gRect.y + headerH, width: gRect.width, height: Math.max(0, gRect.height - headerH) },\n 2,\n );\n for (const leafNode of layoutTreemap(groupNode.item.leaves, inner)) {\n const tile = { ...leafNode.item, rect: leafNode.rect };\n tiles.push(tile);\n drawTile(tile);\n }\n }\n } else {\n for (const leafNode of layoutTreemap(leaves, content)) {\n const tile = { ...leafNode.item, rect: leafNode.rect };\n tiles.push(tile);\n drawTile(tile);\n }\n }\n ctx.restore();\n\n return { tiles, groupRects, represented, pen, sketch };\n}\n\nfunction drawGroupFrames(\n surface: Surface,\n tokens: ThemeTokens,\n treemap: TreemapSpec,\n groups: readonly GroupRect[],\n pen: RoughPen | null,\n sketch: ReturnType<typeof resolveSketch>,\n): void {\n const ctx = surface.marks.ctx;\n const stroke = tokens.color.background;\n for (const { group, rect, headerH } of groups) {\n if (pen) pen.rect(rect.x, rect.y, rect.width, rect.height, { stroke, roughness: sketch!.roughness * 0.6 });\n else {\n ctx.strokeStyle = stroke;\n ctx.lineWidth = 1;\n ctx.strokeRect(rect.x + 0.5, rect.y + 0.5, Math.max(0, rect.width - 1), Math.max(0, rect.height - 1));\n }\n if (headerH > 0) {\n const headerW = Math.max(0, rect.width - 10);\n addOverlayText(surface, tokens, {\n left: rect.x + 5,\n top: rect.y + 4,\n width: headerW,\n text: group.label,\n maxWidth: headerW,\n color: tokens.color.text,\n size: tokens.font.size.tiny,\n weight: tokens.font.weight.bold,\n opacity: 0.78,\n });\n } else if (treemap.labels !== false) {\n surface.labels?.omit({ role: 'data-label', reason: 'space', required: true, example: group.label, path: '/encoding/group' });\n }\n }\n}\n\nfunction buildTreemapInteraction(\n treemap: TreemapSpec,\n content: Rect,\n tiles: readonly Tile[],\n total: number,\n): InteractionModel {\n const valueLabel = treemap.encoding.value.title ?? treemap.encoding.value.field;\n const colorLabel = treemap.encoding.color?.title ?? treemap.encoding.color?.field;\n const categoryField = treemap.encoding.category.field;\n const groupField = treemap.encoding.group?.field;\n const hitTile = (px: number, py: number): Tile | null => {\n for (let i = tiles.length - 1; i >= 0; i--) {\n const tile = tiles[i];\n if (px >= tile.rect.x && px <= tile.rect.x + tile.rect.width && py >= tile.rect.y && py <= tile.rect.y + tile.rect.height) return tile;\n }\n return null;\n };\n\n return {\n region: { x: content.x, y: content.y, width: content.width, height: content.height },\n hitTest: (px, py) => {\n const tile = hitTile(px, py);\n if (!tile) return null;\n return {\n key: tile.key,\n anchorX: px,\n anchorY: py,\n content: {\n title: groupField ? `${tile.groupLabel ?? '(blank)'} \u25B8 ${tile.categoryLabel}` : tile.categoryLabel,\n rows: [\n { swatch: tile.fillCss, label: valueLabel, value: formatValue(tile.value, treemap.encoding.value.format) },\n ...(colorLabel\n ? [{\n label: colorLabel,\n value: tile.colorNoData ? 'no data' : formatValue(tile.colorValue, treemap.encoding.color?.format),\n muted: true,\n }]\n : []),\n { label: 'share', value: `${((tile.value / total) * 100).toFixed(1)}%`, muted: true },\n ],\n },\n };\n },\n pick: (px, py) => {\n const tile = hitTile(px, py);\n if (!tile) return null;\n return groupField\n ? { kind: 'point', fields: [categoryField, groupField], tuples: [[tile.category, tile.group]] }\n : { kind: 'point', fields: [categoryField], tuples: [[tile.category]] };\n },\n };\n}\n\nexport function drawTreemap(\n surface: Surface,\n spec: ChartSpec,\n tokens: ThemeTokens,\n size: Size,\n context?: RenderContext,\n): InteractionModel | void {\n surface.evidence?.begin('aggregate');\n surface.evidence?.data(0, 'aggregate');\n const treemap = spec as TreemapSpec;\n const content = drawTitleBlock(surface, tokens, size, treemap.title);\n const leaves = buildLeaves(treemap);\n colorLeaves(leaves, treemap, tokens);\n const total = leaves.reduce((sum, leaf) => sum + leaf.value, 0);\n\n if (leaves.length === 0 || total <= 0 || content.width <= 0 || content.height <= 0) {\n drawNoPositiveTreemap(surface, tokens, content);\n return;\n }\n\n const { tiles, groupRects, represented, pen, sketch } = drawTreemapTiles(surface, treemap, tokens, content, leaves, context);\n surface.evidence?.data(represented, 'aggregate');\n\n if (treemap.encoding.group) {\n drawGroupFrames(surface, tokens, treemap, groupRects, pen, sketch);\n }\n\n if (treemap.labels !== false) {\n for (const tile of tiles) addTileLabels(surface, tokens, tile, treemap.encoding.value.format);\n }\n\n return buildTreemapInteraction(treemap, content, tiles, total);\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["w"]
7
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Derived trendlines for cartesian charts — a linear line of best fit overlaid
3
+ * on a scatter, line, or area plot via `spec.trendline`.
4
+ *
5
+ * The regression is computed from the already-resolved `CartesianModel` series
6
+ * (one fit per group, or a single overall fit), and the fitted line is stroked
7
+ * across each group's x-extent. Marks land on the marks canvas; optional `R²`
8
+ * labels live in the HTML overlay (or are painted to canvas when headless),
9
+ * mirroring how `annotations` render. Pure presentation — no data reshaping.
10
+ */
11
+ import type { Surface } from '../render/surface.js';
12
+ import type { CartesianModel } from '../runtime/cartesian.js';
13
+ /**
14
+ * Stroke the fitted line(s) on the marks canvas, clipped to the plot. Call after
15
+ * the chart's data marks so the trendline sits on top. No-op unless the spec
16
+ * opts in via `trendline` and the x-axis is continuous/temporal.
17
+ */
18
+ export declare function drawTrendlines(surface: Surface, model: CartesianModel): void;
19
+ /**
20
+ * Append `R²` labels for each fitted line to the HTML overlay (or paint them to
21
+ * canvas when headless). Call after `drawAnnotationLabels`. No-op unless
22
+ * `trendline.label` is set.
23
+ */
24
+ export declare function drawTrendlineLabels(surface: Surface, model: CartesianModel): void;
25
+ //# sourceMappingURL=trendline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trendline.d.ts","sourceRoot":"","sources":["../../src/charts/trendline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AA+E3D;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAyC5E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAiDjF"}
@@ -0,0 +1,125 @@
1
+ import { linearRegression } from "../analyze/regression.js";
2
+ import { fontString, measureText } from "../render/text.js";
3
+ import { overlayTextToCanvasCmd, paintCanvasText } from "../render/overlayText.js";
4
+ import { accessor, toDate, toNumber } from "../util/data.js";
5
+ import { crisp } from "../util/math.js";
6
+ const DEFAULT_STROKE_WIDTH = 2;
7
+ function resolveTrendline(value) {
8
+ if (!value) return null;
9
+ const cfg = typeof value === "object" ? value : {};
10
+ return {
11
+ method: "linear",
12
+ groupBy: cfg.groupBy,
13
+ label: cfg.label ?? false,
14
+ color: cfg.color,
15
+ strokeWidth: cfg.strokeWidth ?? DEFAULT_STROKE_WIDTH,
16
+ strokeDash: cfg.strokeDash ?? []
17
+ };
18
+ }
19
+ function xToNum(model, value) {
20
+ if (model.x.kind === "time") {
21
+ const d = toDate(value);
22
+ return d ? d.getTime() : NaN;
23
+ }
24
+ return toNumber(value);
25
+ }
26
+ function trendGroups(model, cfg) {
27
+ const readX = accessor(model.x.field);
28
+ const readY = accessor(model.y.field ?? "");
29
+ const grouped = cfg.groupBy ?? model.series.length > 1;
30
+ const muted = cfg.color ?? model.tokens.color.textMuted;
31
+ const buckets = grouped ? model.series.map((s) => ({ color: cfg.color ?? s.color, rows: s.rows })) : [{ color: muted, rows: model.series.flatMap((s) => s.rows) }];
32
+ const out = [];
33
+ for (const bucket of buckets) {
34
+ const xs = [];
35
+ const ys = [];
36
+ for (const row of bucket.rows) {
37
+ const xn = xToNum(model, readX(row));
38
+ const yn = toNumber(readY(row));
39
+ if (!Number.isFinite(xn) || !Number.isFinite(yn)) continue;
40
+ xs.push(xn);
41
+ ys.push(yn);
42
+ }
43
+ const fit = linearRegression(xs, ys);
44
+ if (!fit) continue;
45
+ out.push({ color: bucket.color, fit, xMin: Math.min(...xs), xMax: Math.max(...xs) });
46
+ }
47
+ return out;
48
+ }
49
+ function drawTrendlines(surface, model) {
50
+ const cfg = resolveTrendline(model.spec.trendline);
51
+ if (!cfg || model.x.kind === "band" || model.x.kind === "point") return;
52
+ const groups = trendGroups(model, cfg);
53
+ if (groups.length === 0) return;
54
+ const ctx = surface.marks.ctx;
55
+ const { plot } = model;
56
+ ctx.save();
57
+ ctx.beginPath();
58
+ ctx.rect(plot.x, plot.y, plot.width, plot.height);
59
+ ctx.clip();
60
+ ctx.lineWidth = cfg.strokeWidth;
61
+ ctx.setLineDash(cfg.strokeDash);
62
+ ctx.lineCap = "round";
63
+ for (const g of groups) {
64
+ const x0 = model.x.pixel(g.xMin);
65
+ const x1 = model.x.pixel(g.xMax);
66
+ const y0 = model.y.pixel(g.fit.predict(g.xMin));
67
+ const y1 = model.y.pixel(g.fit.predict(g.xMax));
68
+ if (x0 == null || x1 == null || !Number.isFinite(x0) || !Number.isFinite(x1) || !Number.isFinite(y0) || !Number.isFinite(y1)) {
69
+ continue;
70
+ }
71
+ ctx.strokeStyle = g.color;
72
+ ctx.beginPath();
73
+ ctx.moveTo(x0, crisp(y0));
74
+ ctx.lineTo(x1, crisp(y1));
75
+ ctx.stroke();
76
+ }
77
+ ctx.restore();
78
+ }
79
+ function drawTrendlineLabels(surface, model) {
80
+ const cfg = resolveTrendline(model.spec.trendline);
81
+ if (!cfg || !cfg.label || model.x.kind === "band" || model.x.kind === "point") return;
82
+ const groups = trendGroups(model, cfg);
83
+ if (groups.length === 0) return;
84
+ const { tokens, plot } = model;
85
+ const f = tokens.font;
86
+ const font = fontString(f.size.small, f.family, f.weight.medium);
87
+ for (const g of groups) {
88
+ const x1 = model.x.pixel(g.xMax);
89
+ const y1 = model.y.pixel(g.fit.predict(g.xMax));
90
+ if (x1 == null || !Number.isFinite(x1) || !Number.isFinite(y1)) continue;
91
+ const text = `R\xB2=${g.fit.r2.toFixed(2)}`;
92
+ const labelW = measureText(text, font).width;
93
+ const nearRight = x1 + 6 + labelW > plot.x + plot.width;
94
+ const left = nearRight ? x1 - 6 : x1 + 6;
95
+ const align = nearRight ? "right" : "left";
96
+ const transform = nearRight ? "translateX(-100%) translateY(-50%)" : "translateY(-50%)";
97
+ const top = Math.min(Math.max(y1, plot.y + f.size.small), plot.y + plot.height - 2);
98
+ const color = g.color;
99
+ if (surface.headless) {
100
+ paintCanvasText(
101
+ surface.marks.ctx,
102
+ overlayTextToCanvasCmd({ left, top, text, color, size: f.size.small, align, transform }, font)
103
+ );
104
+ continue;
105
+ }
106
+ const el = document.createElement("div");
107
+ el.textContent = text;
108
+ el.style.position = "absolute";
109
+ el.style.font = font;
110
+ el.style.fontSize = `${f.size.small}px`;
111
+ el.style.fontWeight = String(f.weight.medium);
112
+ el.style.color = color;
113
+ el.style.whiteSpace = "nowrap";
114
+ el.style.left = `${left}px`;
115
+ el.style.top = `${top}px`;
116
+ el.style.transform = transform;
117
+ el.style.pointerEvents = "none";
118
+ surface.overlay.appendChild(el);
119
+ }
120
+ }
121
+ export {
122
+ drawTrendlineLabels,
123
+ drawTrendlines
124
+ };
125
+ //# sourceMappingURL=trendline.js.map