@perspective-dev/viewer-charts 4.3.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 (258) hide show
  1. package/LICENSE.md +193 -0
  2. package/dist/cdn/perspective-viewer-charts.js +3 -0
  3. package/dist/cdn/perspective-viewer-charts.js.map +7 -0
  4. package/dist/esm/axis/axis-primitives.d.ts +24 -0
  5. package/dist/esm/axis/bar-axis.d.ts +51 -0
  6. package/dist/esm/axis/canvas.d.ts +24 -0
  7. package/dist/esm/axis/categorical-axis-core.d.ts +42 -0
  8. package/dist/esm/axis/categorical-axis.d.ts +27 -0
  9. package/dist/esm/axis/facet-chrome.d.ts +13 -0
  10. package/dist/esm/axis/label-geometry.d.ts +41 -0
  11. package/dist/esm/axis/legend.d.ts +44 -0
  12. package/dist/esm/axis/numeric-axis.d.ts +20 -0
  13. package/dist/esm/charts/candlestick/candlestick-build.d.ts +129 -0
  14. package/dist/esm/charts/candlestick/candlestick-interact.d.ts +10 -0
  15. package/dist/esm/charts/candlestick/candlestick-render.d.ts +24 -0
  16. package/dist/esm/charts/candlestick/candlestick.d.ts +144 -0
  17. package/dist/esm/charts/candlestick/glyphs/draw-candlesticks.d.ts +36 -0
  18. package/dist/esm/charts/candlestick/glyphs/draw-ohlc.d.ts +33 -0
  19. package/dist/esm/charts/canvas-types.d.ts +15 -0
  20. package/dist/esm/charts/cartesian/cartesian-build.d.ts +14 -0
  21. package/dist/esm/charts/cartesian/cartesian-interact.d.ts +20 -0
  22. package/dist/esm/charts/cartesian/cartesian-render.d.ts +26 -0
  23. package/dist/esm/charts/cartesian/cartesian.d.ts +239 -0
  24. package/dist/esm/charts/cartesian/glyph.d.ts +53 -0
  25. package/dist/esm/charts/cartesian/glyphs/density.d.ts +142 -0
  26. package/dist/esm/charts/cartesian/glyphs/lines.d.ts +23 -0
  27. package/dist/esm/charts/cartesian/glyphs/points.d.ts +24 -0
  28. package/dist/esm/charts/cartesian/label-interner.d.ts +21 -0
  29. package/dist/esm/charts/cartesian/tooltip-lines.d.ts +11 -0
  30. package/dist/esm/charts/chart-base.d.ts +402 -0
  31. package/dist/esm/charts/chart.d.ts +338 -0
  32. package/dist/esm/charts/common/band-layout.d.ts +32 -0
  33. package/dist/esm/charts/common/categorical-y-chart.d.ts +53 -0
  34. package/dist/esm/charts/common/category-axis-resolver.d.ts +90 -0
  35. package/dist/esm/charts/common/chrome-cache.d.ts +18 -0
  36. package/dist/esm/charts/common/draw-tooltip-box.d.ts +9 -0
  37. package/dist/esm/charts/common/leaf-color.d.ts +33 -0
  38. package/dist/esm/charts/common/node-store.d.ts +81 -0
  39. package/dist/esm/charts/common/tree-chart.d.ts +48 -0
  40. package/dist/esm/charts/common/tree-chrome.d.ts +31 -0
  41. package/dist/esm/charts/common/tree-data.d.ts +54 -0
  42. package/dist/esm/charts/common/visible-extent.d.ts +51 -0
  43. package/dist/esm/charts/heatmap/heatmap-build.d.ts +86 -0
  44. package/dist/esm/charts/heatmap/heatmap-interact.d.ts +19 -0
  45. package/dist/esm/charts/heatmap/heatmap-render.d.ts +19 -0
  46. package/dist/esm/charts/heatmap/heatmap-y-axis.d.ts +46 -0
  47. package/dist/esm/charts/heatmap/heatmap.d.ts +117 -0
  48. package/dist/esm/charts/map/map.d.ts +67 -0
  49. package/dist/esm/charts/registry.d.ts +14 -0
  50. package/dist/esm/charts/series/glyphs/draw-areas.d.ts +30 -0
  51. package/dist/esm/charts/series/glyphs/draw-bars.d.ts +15 -0
  52. package/dist/esm/charts/series/glyphs/draw-lines.d.ts +34 -0
  53. package/dist/esm/charts/series/glyphs/draw-scatter.d.ts +33 -0
  54. package/dist/esm/charts/series/series-build.d.ts +228 -0
  55. package/dist/esm/charts/series/series-interact.d.ts +35 -0
  56. package/dist/esm/charts/series/series-render.d.ts +41 -0
  57. package/dist/esm/charts/series/series-type.d.ts +49 -0
  58. package/dist/esm/charts/series/series.d.ts +317 -0
  59. package/dist/esm/charts/sunburst/sunburst-interact.d.ts +7 -0
  60. package/dist/esm/charts/sunburst/sunburst-layout.d.ts +33 -0
  61. package/dist/esm/charts/sunburst/sunburst-render.d.ts +22 -0
  62. package/dist/esm/charts/sunburst/sunburst.d.ts +85 -0
  63. package/dist/esm/charts/treemap/treemap-interact.d.ts +12 -0
  64. package/dist/esm/charts/treemap/treemap-layout.d.ts +28 -0
  65. package/dist/esm/charts/treemap/treemap-render.d.ts +18 -0
  66. package/dist/esm/charts/treemap/treemap.d.ts +74 -0
  67. package/dist/esm/config.d.ts +27 -0
  68. package/dist/esm/data/lazy-row.d.ts +32 -0
  69. package/dist/esm/data/split-groups.d.ts +20 -0
  70. package/dist/esm/data/view-reader.d.ts +35 -0
  71. package/dist/esm/event-detail.d.ts +28 -0
  72. package/dist/esm/index.d.ts +3 -0
  73. package/dist/esm/interaction/hit-test.d.ts +30 -0
  74. package/dist/esm/interaction/host-sink-dom.d.ts +19 -0
  75. package/dist/esm/interaction/host-sink-message.d.ts +46 -0
  76. package/dist/esm/interaction/lazy-tooltip.d.ts +61 -0
  77. package/dist/esm/interaction/raw-event-forwarder.d.ts +27 -0
  78. package/dist/esm/interaction/spatial-grid.d.ts +15 -0
  79. package/dist/esm/interaction/tooltip-controller.d.ts +193 -0
  80. package/dist/esm/interaction/zoom-controller.d.ts +106 -0
  81. package/dist/esm/interaction/zoom-router.d.ts +48 -0
  82. package/dist/esm/layout/facet-grid.d.ts +126 -0
  83. package/dist/esm/layout/plot-layout.d.ts +104 -0
  84. package/dist/esm/layout/ticks.d.ts +17 -0
  85. package/dist/esm/map/mercator.d.ts +102 -0
  86. package/dist/esm/map/tile-cache.d.ts +38 -0
  87. package/dist/esm/map/tile-layer.d.ts +66 -0
  88. package/dist/esm/map/tile-loader.d.ts +52 -0
  89. package/dist/esm/map/tile-source.d.ts +66 -0
  90. package/dist/esm/perspective-viewer-charts.js +3 -0
  91. package/dist/esm/perspective-viewer-charts.js.map +7 -0
  92. package/dist/esm/plugin/charts.d.ts +40 -0
  93. package/dist/esm/plugin/plugin.d.ts +95 -0
  94. package/dist/esm/render/scheduler.d.ts +41 -0
  95. package/dist/esm/theme/gradient.d.ts +48 -0
  96. package/dist/esm/theme/palette.d.ts +13 -0
  97. package/dist/esm/theme/theme-snapshot.d.ts +7 -0
  98. package/dist/esm/theme/theme.d.ts +53 -0
  99. package/dist/esm/transport/protocol.d.ts +430 -0
  100. package/dist/esm/transport/renderer-transport.d.ts +201 -0
  101. package/dist/esm/utils/css.d.ts +1 -0
  102. package/dist/esm/utils/font-snapshot.d.ts +50 -0
  103. package/dist/esm/webgl/buffer-pool.d.ts +62 -0
  104. package/dist/esm/webgl/context-manager.d.ts +184 -0
  105. package/dist/esm/webgl/gradient-texture.d.ts +17 -0
  106. package/dist/esm/webgl/instanced-attrs.d.ts +44 -0
  107. package/dist/esm/webgl/plot-frame.d.ts +39 -0
  108. package/dist/esm/webgl/program-cache.d.ts +13 -0
  109. package/dist/esm/webgl/shader-manifest.d.ts +53 -0
  110. package/dist/esm/webgl/shader-registry.d.ts +22 -0
  111. package/dist/esm/worker/boot.d.ts +0 -0
  112. package/dist/esm/worker/dispatch.d.ts +9 -0
  113. package/dist/esm/worker/font-loader.d.ts +2 -0
  114. package/dist/esm/worker/renderer.worker.d.ts +115 -0
  115. package/dist/esm/worker/session-host.d.ts +26 -0
  116. package/package.json +47 -0
  117. package/src/css/perspective-viewer-charts.css +95 -0
  118. package/src/ts/axis/axis-primitives.ts +125 -0
  119. package/src/ts/axis/bar-axis.ts +345 -0
  120. package/src/ts/axis/canvas.ts +64 -0
  121. package/src/ts/axis/categorical-axis-core.ts +125 -0
  122. package/src/ts/axis/categorical-axis.ts +716 -0
  123. package/src/ts/axis/facet-chrome.ts +42 -0
  124. package/src/ts/axis/label-geometry.ts +188 -0
  125. package/src/ts/axis/legend.ts +218 -0
  126. package/src/ts/axis/numeric-axis.ts +353 -0
  127. package/src/ts/charts/candlestick/candlestick-build.ts +516 -0
  128. package/src/ts/charts/candlestick/candlestick-interact.ts +256 -0
  129. package/src/ts/charts/candlestick/candlestick-render.ts +387 -0
  130. package/src/ts/charts/candlestick/candlestick.ts +367 -0
  131. package/src/ts/charts/candlestick/glyphs/draw-candlesticks.ts +432 -0
  132. package/src/ts/charts/candlestick/glyphs/draw-ohlc.ts +317 -0
  133. package/src/ts/charts/canvas-types.ts +30 -0
  134. package/src/ts/charts/cartesian/cartesian-build.ts +616 -0
  135. package/src/ts/charts/cartesian/cartesian-interact.ts +355 -0
  136. package/src/ts/charts/cartesian/cartesian-render.ts +948 -0
  137. package/src/ts/charts/cartesian/cartesian.ts +469 -0
  138. package/src/ts/charts/cartesian/glyph.ts +81 -0
  139. package/src/ts/charts/cartesian/glyphs/density.ts +1263 -0
  140. package/src/ts/charts/cartesian/glyphs/lines.ts +320 -0
  141. package/src/ts/charts/cartesian/glyphs/points.ts +239 -0
  142. package/src/ts/charts/cartesian/label-interner.ts +56 -0
  143. package/src/ts/charts/cartesian/tooltip-lines.ts +80 -0
  144. package/src/ts/charts/chart-base.ts +840 -0
  145. package/src/ts/charts/chart.ts +427 -0
  146. package/src/ts/charts/common/band-layout.ts +63 -0
  147. package/src/ts/charts/common/categorical-y-chart.ts +81 -0
  148. package/src/ts/charts/common/category-axis-resolver.ts +314 -0
  149. package/src/ts/charts/common/chrome-cache.ts +79 -0
  150. package/src/ts/charts/common/draw-tooltip-box.ts +84 -0
  151. package/src/ts/charts/common/leaf-color.ts +92 -0
  152. package/src/ts/charts/common/node-store.ts +235 -0
  153. package/src/ts/charts/common/tree-chart.ts +76 -0
  154. package/src/ts/charts/common/tree-chrome.ts +123 -0
  155. package/src/ts/charts/common/tree-data.ts +623 -0
  156. package/src/ts/charts/common/visible-extent.ts +112 -0
  157. package/src/ts/charts/heatmap/heatmap-build.ts +426 -0
  158. package/src/ts/charts/heatmap/heatmap-interact.ts +274 -0
  159. package/src/ts/charts/heatmap/heatmap-render.ts +815 -0
  160. package/src/ts/charts/heatmap/heatmap-y-axis.ts +351 -0
  161. package/src/ts/charts/heatmap/heatmap.ts +368 -0
  162. package/src/ts/charts/map/map.ts +201 -0
  163. package/src/ts/charts/registry.ts +65 -0
  164. package/src/ts/charts/series/glyphs/draw-areas.ts +331 -0
  165. package/src/ts/charts/series/glyphs/draw-bars.ts +113 -0
  166. package/src/ts/charts/series/glyphs/draw-lines.ts +320 -0
  167. package/src/ts/charts/series/glyphs/draw-scatter.ts +328 -0
  168. package/src/ts/charts/series/series-build.ts +848 -0
  169. package/src/ts/charts/series/series-interact.ts +604 -0
  170. package/src/ts/charts/series/series-render.ts +1109 -0
  171. package/src/ts/charts/series/series-type.ts +99 -0
  172. package/src/ts/charts/series/series.ts +794 -0
  173. package/src/ts/charts/sunburst/sunburst-interact.ts +460 -0
  174. package/src/ts/charts/sunburst/sunburst-layout.ts +238 -0
  175. package/src/ts/charts/sunburst/sunburst-render.ts +887 -0
  176. package/src/ts/charts/sunburst/sunburst.ts +248 -0
  177. package/src/ts/charts/treemap/treemap-interact.ts +445 -0
  178. package/src/ts/charts/treemap/treemap-layout.ts +328 -0
  179. package/src/ts/charts/treemap/treemap-render.ts +886 -0
  180. package/src/ts/charts/treemap/treemap.ts +247 -0
  181. package/src/ts/config.ts +41 -0
  182. package/src/ts/data/lazy-row.ts +140 -0
  183. package/src/ts/data/split-groups.ts +97 -0
  184. package/src/ts/data/view-reader.ts +107 -0
  185. package/src/ts/event-detail.ts +44 -0
  186. package/src/ts/index.ts +53 -0
  187. package/src/ts/interaction/hit-test.ts +106 -0
  188. package/src/ts/interaction/host-sink-dom.ts +85 -0
  189. package/src/ts/interaction/host-sink-message.ts +75 -0
  190. package/src/ts/interaction/lazy-tooltip.ts +102 -0
  191. package/src/ts/interaction/raw-event-forwarder.ts +175 -0
  192. package/src/ts/interaction/spatial-grid.ts +100 -0
  193. package/src/ts/interaction/tooltip-controller.ts +407 -0
  194. package/src/ts/interaction/zoom-controller.ts +468 -0
  195. package/src/ts/interaction/zoom-router.ts +230 -0
  196. package/src/ts/layout/facet-grid.ts +346 -0
  197. package/src/ts/layout/plot-layout.ts +277 -0
  198. package/src/ts/layout/ticks.ts +168 -0
  199. package/src/ts/map/mercator.ts +204 -0
  200. package/src/ts/map/tile-cache.ts +96 -0
  201. package/src/ts/map/tile-layer.ts +382 -0
  202. package/src/ts/map/tile-loader.ts +143 -0
  203. package/src/ts/map/tile-source.ts +156 -0
  204. package/src/ts/plugin/charts.ts +286 -0
  205. package/src/ts/plugin/plugin.ts +668 -0
  206. package/src/ts/render/scheduler.ts +339 -0
  207. package/src/ts/shaders/area.frag.glsl +20 -0
  208. package/src/ts/shaders/area.vert.glsl +19 -0
  209. package/src/ts/shaders/bar.frag.glsl +25 -0
  210. package/src/ts/shaders/bar.vert.glsl +60 -0
  211. package/src/ts/shaders/candlestick-body.frag.glsl +19 -0
  212. package/src/ts/shaders/candlestick-body.vert.glsl +34 -0
  213. package/src/ts/shaders/density-extreme.frag.glsl +30 -0
  214. package/src/ts/shaders/density-mrt.frag.glsl +44 -0
  215. package/src/ts/shaders/density-mrt.vert.glsl +48 -0
  216. package/src/ts/shaders/density-resolve.frag.glsl +89 -0
  217. package/src/ts/shaders/density-resolve.vert.glsl +23 -0
  218. package/src/ts/shaders/density-splat.frag.glsl +34 -0
  219. package/src/ts/shaders/density-splat.vert.glsl +52 -0
  220. package/src/ts/shaders/gridline.frag.glsl +18 -0
  221. package/src/ts/shaders/gridline.vert.glsl +18 -0
  222. package/src/ts/shaders/heatmap.frag.glsl +23 -0
  223. package/src/ts/shaders/heatmap.vert.glsl +42 -0
  224. package/src/ts/shaders/line-uniform.frag.glsl +26 -0
  225. package/src/ts/shaders/line-uniform.vert.glsl +54 -0
  226. package/src/ts/shaders/line.frag.glsl +28 -0
  227. package/src/ts/shaders/line.vert.glsl +87 -0
  228. package/src/ts/shaders/scatter.frag.glsl +39 -0
  229. package/src/ts/shaders/scatter.vert.glsl +67 -0
  230. package/src/ts/shaders/sunburst-arc.frag.glsl +19 -0
  231. package/src/ts/shaders/sunburst-arc.vert.glsl +79 -0
  232. package/src/ts/shaders/tile.frag.glsl +27 -0
  233. package/src/ts/shaders/tile.vert.glsl +35 -0
  234. package/src/ts/shaders/treemap.frag.glsl +19 -0
  235. package/src/ts/shaders/treemap.vert.glsl +25 -0
  236. package/src/ts/shaders/y-scatter.frag.glsl +30 -0
  237. package/src/ts/shaders/y-scatter.vert.glsl +31 -0
  238. package/src/ts/theme/gradient.ts +312 -0
  239. package/src/ts/theme/palette.ts +64 -0
  240. package/src/ts/theme/theme-snapshot.ts +66 -0
  241. package/src/ts/theme/theme.ts +166 -0
  242. package/src/ts/transport/protocol.ts +497 -0
  243. package/src/ts/transport/renderer-transport.ts +788 -0
  244. package/src/ts/utils/css.ts +36 -0
  245. package/src/ts/utils/font-snapshot.ts +159 -0
  246. package/src/ts/webgl/buffer-pool.ts +163 -0
  247. package/src/ts/webgl/context-manager.ts +414 -0
  248. package/src/ts/webgl/gradient-texture.ts +84 -0
  249. package/src/ts/webgl/instanced-attrs.ts +139 -0
  250. package/src/ts/webgl/plot-frame.ts +91 -0
  251. package/src/ts/webgl/program-cache.ts +46 -0
  252. package/src/ts/webgl/shader-manifest.ts +148 -0
  253. package/src/ts/webgl/shader-registry.ts +97 -0
  254. package/src/ts/worker/boot.ts +22 -0
  255. package/src/ts/worker/dispatch.ts +99 -0
  256. package/src/ts/worker/font-loader.ts +89 -0
  257. package/src/ts/worker/renderer.worker.ts +734 -0
  258. package/src/ts/worker/session-host.ts +118 -0
@@ -0,0 +1,286 @@
1
+ // ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
2
+ // ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
3
+ // ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
4
+ // ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
5
+ // ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
6
+ // ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
7
+ // ┃ Copyright (c) 2017, the Perspective Authors. ┃
8
+ // ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
9
+ // ┃ This file is part of the Perspective library, distributed under the terms ┃
10
+ // ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
11
+ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
12
+
13
+ import type { PluginConfig } from "../charts/chart";
14
+
15
+ export type ChartType = "bar" | "line" | "scatter" | "area";
16
+
17
+ export type PluginChartType = ChartType | "candlestick" | "ohlc";
18
+
19
+ /**
20
+ * Subset of `PluginConfig` keys that a chart impl actually consumes.
21
+ * Drives `plugin_config_schema()` filtering — the host only renders
22
+ * the controls listed here, and `plugin.restore({ plugin_config })`
23
+ * still hands the full struct to the worker (other keys are inert).
24
+ */
25
+ export type PluginConfigField = keyof PluginConfig;
26
+
27
+ export interface ChartTypeConfig {
28
+ name: string;
29
+ tag: string;
30
+ category: string;
31
+ selectMode: "select" | "toggle";
32
+ initial: {
33
+ count: number;
34
+ names: string[];
35
+ };
36
+ max_cells: number;
37
+ max_columns: number;
38
+ default_chart_type?: PluginChartType;
39
+
40
+ /**
41
+ * Plugin-config keys this chart type renders controls for. Empty
42
+ * for plugins with no global settings (heatmap / treemap /
43
+ * sunburst). See {@link PluginConfig} for field semantics.
44
+ */
45
+ applicable_plugin_fields: readonly PluginConfigField[];
46
+
47
+ /**
48
+ * Per-chart-type overrides for `DEFAULT_PLUGIN_CONFIG`. Used when a
49
+ * field's sensible default differs by chart family — currently
50
+ * `include_zero` (true for Y Bar / Y Area / X Bar, false for line
51
+ * / scatter / cartesian / financial). Applied at schema generation
52
+ * and at `restore({})` so the effective default matches the
53
+ * surfaced UI default.
54
+ */
55
+ plugin_field_defaults?: Partial<PluginConfig>;
56
+ }
57
+
58
+ const SERIES = "Series Charts";
59
+ const CART = "Cartesian Charts";
60
+ const HIER = "Hierarchical Charts";
61
+ const FIN = "Financial Charts";
62
+ const MAP = "Map Charts";
63
+ const X_AXIS = ["X Axis"];
64
+ const Y_AXIS = ["Y Axis"];
65
+ const SELECT = "select";
66
+ const TOGGLE = "toggle";
67
+
68
+ const DEFAULT_MAX_CELLS = 2_000_000;
69
+ const DEFAULT_MAX_COLUMNS = 10_000;
70
+
71
+ // Plugin-config field sets, by chart family.
72
+ //
73
+ // Series charts paint bars / lines / scatter / area glyphs (selected
74
+ // per-column via `chart_type`), so the union covers every glyph that
75
+ // might appear. `auto_alt_y_axis` + `series_zoom_mode` are Series-only.
76
+ const SERIES_FIELDS: readonly PluginConfigField[] = [
77
+ "auto_alt_y_axis",
78
+ "facet_mode",
79
+ "series_zoom_mode",
80
+ "include_zero",
81
+ "domain_mode",
82
+ "line_width_px",
83
+ "point_size_px",
84
+ "band_inner_frac",
85
+ "bar_inner_pad",
86
+ ];
87
+
88
+ // Bar / area series glyphs grow from the zero baseline, so the value
89
+ // axis must enclose 0 to render correctly. Line / scatter glyphs have
90
+ // no such constraint — their default `include_zero` stays `false`.
91
+ const ZERO_ANCHORED_DEFAULTS: Partial<PluginConfig> = { include_zero: true };
92
+
93
+ // Pure Cartesian (X/Y Scatter, X/Y Line) — no categorical axis, so no
94
+ // band geometry; gets the facet-routing variant of zoom_mode.
95
+ const CARTESIAN_FIELDS: readonly PluginConfigField[] = [
96
+ "facet_mode",
97
+ "facet_zoom_mode",
98
+ "domain_mode",
99
+ "line_width_px",
100
+ "point_size_px",
101
+ ];
102
+
103
+ // Candlestick/OHLC share the categorical-X build pipeline (band slots)
104
+ // and add their two stroke widths.
105
+ const FIN_FIELDS: readonly PluginConfigField[] = [
106
+ "facet_mode",
107
+ "series_zoom_mode",
108
+ "domain_mode",
109
+ "band_inner_frac",
110
+ "bar_inner_pad",
111
+ "wick_width_px",
112
+ "ohlc_line_width_px",
113
+ ];
114
+
115
+ // Hierarchical — none of the listed fields apply.
116
+ const NO_FIELDS: readonly PluginConfigField[] = [];
117
+
118
+ // Heatmap
119
+ const HEATMAP_FIELDS: readonly PluginConfigField[] = ["facet_zoom_mode"];
120
+
121
+ // Map — reuses the cartesian build pipeline with a Mercator
122
+ // projection hook. Carries the basemap controls (`map_tile_provider`,
123
+ // `map_tile_alpha`) plus the relevant glyph-styling fields the
124
+ // underlying chart type already uses. Density-on-map adds the four
125
+ // gradient knobs on top.
126
+ const MAP_BASE_FIELDS: readonly PluginConfigField[] = [
127
+ "facet_mode",
128
+ "facet_zoom_mode",
129
+ "domain_mode",
130
+ "map_tile_provider",
131
+ "map_tile_alpha",
132
+ ];
133
+ const MAP_SCATTER_FIELDS: readonly PluginConfigField[] = [
134
+ ...MAP_BASE_FIELDS,
135
+ "point_size_px",
136
+ ];
137
+ const MAP_LINE_FIELDS: readonly PluginConfigField[] = [
138
+ ...MAP_BASE_FIELDS,
139
+ "line_width_px",
140
+ ];
141
+ const MAP_DENSITY_FIELDS: readonly PluginConfigField[] = [
142
+ ...MAP_BASE_FIELDS,
143
+ "gradient_color_mode",
144
+ "gradient_radius_px",
145
+ "gradient_intensity",
146
+ "gradient_heat_max",
147
+ ];
148
+
149
+ // Density — shares the cartesian build pipeline (X/Y numeric
150
+ // with an optional Color column), then routes through the density-field
151
+ // glyph. Reuses the cartesian facet/zoom controls and adds the three
152
+ // shader-specific knobs.
153
+ const DENSITY_FIELDS: readonly PluginConfigField[] = [
154
+ "facet_mode",
155
+ "facet_zoom_mode",
156
+ "domain_mode",
157
+ "gradient_color_mode",
158
+ "gradient_radius_px",
159
+ "gradient_intensity",
160
+ "gradient_heat_max",
161
+ ];
162
+
163
+ function make(
164
+ name: string,
165
+ tag: string,
166
+ category: string,
167
+ selectMode: "select" | "toggle",
168
+ count: number,
169
+ names: readonly string[],
170
+ applicable_plugin_fields: readonly PluginConfigField[],
171
+ overrides?: Partial<
172
+ Pick<
173
+ ChartTypeConfig,
174
+ | "max_cells"
175
+ | "max_columns"
176
+ | "default_chart_type"
177
+ | "plugin_field_defaults"
178
+ >
179
+ >,
180
+ ): ChartTypeConfig {
181
+ return {
182
+ name,
183
+ tag,
184
+ category,
185
+ selectMode,
186
+ initial: { count, names: names as string[] },
187
+ max_cells: overrides?.max_cells ?? DEFAULT_MAX_CELLS,
188
+ max_columns: overrides?.max_columns ?? DEFAULT_MAX_COLUMNS,
189
+ applicable_plugin_fields,
190
+ ...(overrides?.default_chart_type
191
+ ? { default_chart_type: overrides.default_chart_type }
192
+ : {}),
193
+ ...(overrides?.plugin_field_defaults
194
+ ? { plugin_field_defaults: overrides.plugin_field_defaults }
195
+ : {}),
196
+ };
197
+ }
198
+
199
+ const FIN_NAMES = ["Open", "Close", "High", "Low", "Tooltip"];
200
+ const HIER_NAMES = ["Size", "Color", "Tooltip"];
201
+
202
+ const CHARTS: ChartTypeConfig[] = [
203
+ make("X Bar", "x-bar", SERIES, SELECT, 1, X_AXIS, SERIES_FIELDS, {
204
+ default_chart_type: "bar",
205
+ plugin_field_defaults: ZERO_ANCHORED_DEFAULTS,
206
+ }),
207
+ make("Y Bar", "y-bar", SERIES, SELECT, 1, Y_AXIS, SERIES_FIELDS, {
208
+ default_chart_type: "bar",
209
+ plugin_field_defaults: ZERO_ANCHORED_DEFAULTS,
210
+ }),
211
+ make("Y Line", "y-line", SERIES, SELECT, 1, Y_AXIS, SERIES_FIELDS, {
212
+ default_chart_type: "line",
213
+ }),
214
+ make("Y Scatter", "y-scatter", SERIES, SELECT, 1, Y_AXIS, SERIES_FIELDS, {
215
+ default_chart_type: "scatter",
216
+ }),
217
+ make("Y Area", "y-area", SERIES, SELECT, 1, Y_AXIS, SERIES_FIELDS, {
218
+ default_chart_type: "area",
219
+ plugin_field_defaults: ZERO_ANCHORED_DEFAULTS,
220
+ }),
221
+ make(
222
+ "X/Y Scatter",
223
+ "scatter",
224
+ CART,
225
+ TOGGLE,
226
+ 2,
227
+ ["X Axis", "Y Axis", "Color", "Size", "Label", "Tooltip"],
228
+ CARTESIAN_FIELDS,
229
+ ),
230
+ make(
231
+ "X/Y Line",
232
+ "line",
233
+ CART,
234
+ SELECT,
235
+ 2,
236
+ ["X Axis", "Y Axis", "Tooltip"],
237
+ CARTESIAN_FIELDS,
238
+ ),
239
+ make(
240
+ "Density",
241
+ "density",
242
+ CART,
243
+ TOGGLE,
244
+ 2,
245
+ ["X Axis", "Y Axis", "Color", "Tooltip"],
246
+ DENSITY_FIELDS,
247
+ ),
248
+ make("Treemap", "treemap", HIER, TOGGLE, 1, HIER_NAMES, NO_FIELDS),
249
+ make("Sunburst", "sunburst", HIER, TOGGLE, 1, HIER_NAMES, NO_FIELDS),
250
+ make("Heatmap", "heatmap", HIER, SELECT, 1, ["Color"], HEATMAP_FIELDS),
251
+ make("Candlestick", "candlestick", FIN, TOGGLE, 1, FIN_NAMES, FIN_FIELDS, {
252
+ default_chart_type: "candlestick",
253
+ }),
254
+ make("OHLC", "ohlc", FIN, TOGGLE, 1, FIN_NAMES, FIN_FIELDS, {
255
+ default_chart_type: "ohlc",
256
+ }),
257
+ make(
258
+ "Map Scatter",
259
+ "map-scatter",
260
+ MAP,
261
+ TOGGLE,
262
+ 2,
263
+ ["Longitude", "Latitude", "Color", "Size", "Label", "Tooltip"],
264
+ MAP_SCATTER_FIELDS,
265
+ ),
266
+ make(
267
+ "Map Line",
268
+ "map-line",
269
+ MAP,
270
+ SELECT,
271
+ 2,
272
+ ["Longitude", "Latitude", "Tooltip"],
273
+ MAP_LINE_FIELDS,
274
+ ),
275
+ make(
276
+ "Map Density",
277
+ "map-density",
278
+ MAP,
279
+ TOGGLE,
280
+ 2,
281
+ ["Longitude", "Latitude", "Color", "Tooltip"],
282
+ MAP_DENSITY_FIELDS,
283
+ ),
284
+ ];
285
+
286
+ export default CHARTS;