@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,40 @@
1
+ import type { PluginConfig } from "../charts/chart";
2
+ export type ChartType = "bar" | "line" | "scatter" | "area";
3
+ export type PluginChartType = ChartType | "candlestick" | "ohlc";
4
+ /**
5
+ * Subset of `PluginConfig` keys that a chart impl actually consumes.
6
+ * Drives `plugin_config_schema()` filtering — the host only renders
7
+ * the controls listed here, and `plugin.restore({ plugin_config })`
8
+ * still hands the full struct to the worker (other keys are inert).
9
+ */
10
+ export type PluginConfigField = keyof PluginConfig;
11
+ export interface ChartTypeConfig {
12
+ name: string;
13
+ tag: string;
14
+ category: string;
15
+ selectMode: "select" | "toggle";
16
+ initial: {
17
+ count: number;
18
+ names: string[];
19
+ };
20
+ max_cells: number;
21
+ max_columns: number;
22
+ default_chart_type?: PluginChartType;
23
+ /**
24
+ * Plugin-config keys this chart type renders controls for. Empty
25
+ * for plugins with no global settings (heatmap / treemap /
26
+ * sunburst). See {@link PluginConfig} for field semantics.
27
+ */
28
+ applicable_plugin_fields: readonly PluginConfigField[];
29
+ /**
30
+ * Per-chart-type overrides for `DEFAULT_PLUGIN_CONFIG`. Used when a
31
+ * field's sensible default differs by chart family — currently
32
+ * `include_zero` (true for Y Bar / Y Area / X Bar, false for line
33
+ * / scatter / cartesian / financial). Applied at schema generation
34
+ * and at `restore({})` so the effective default matches the
35
+ * surfaced UI default.
36
+ */
37
+ plugin_field_defaults?: Partial<PluginConfig>;
38
+ }
39
+ declare const CHARTS: ChartTypeConfig[];
40
+ export default CHARTS;
@@ -0,0 +1,95 @@
1
+ import type { View } from "@perspective-dev/client";
2
+ import type { IPerspectiveViewerPlugin, PluginStaticConfig } from "@perspective-dev/viewer";
3
+ import { ChartTypeConfig } from "./charts";
4
+ export declare class HTMLPerspectiveViewerWebGLPluginElement extends HTMLElement implements IPerspectiveViewerPlugin {
5
+ _chartType: ChartTypeConfig;
6
+ private _initialized;
7
+ private _glCanvas;
8
+ private _gridlineCanvas;
9
+ private _chromeCanvas;
10
+ private _renderer;
11
+ private _rendererPromise;
12
+ private _rawEventForwarder;
13
+ private _generation;
14
+ private _renderBlitMode;
15
+ private _resetClickAbort;
16
+ /**
17
+ * Plugin-scoped global config. Seeded lazily from
18
+ * `_effectiveDefaults()` (which folds
19
+ * `_chartType.plugin_field_defaults` over `DEFAULT_PLUGIN_CONFIG`)
20
+ * because base-class field initializers run before the subclass
21
+ * `_chartType` assignment. `restore({ plugin_config })` merges
22
+ * incoming values on top of the same effective defaults so fields
23
+ * the host omits fall back to the chart-type default
24
+ * (`include_zero = true` for Y Bar / Y Area / X Bar, `false`
25
+ * elsewhere). Held on the element (not just inside the worker) so
26
+ * a `_buildRenderer` triggered after a `restore` ships the
27
+ * resolved values in the `InitMsg`.
28
+ */
29
+ private _pluginConfigStore;
30
+ private get _pluginConfig();
31
+ private set _pluginConfig(value);
32
+ private _effectiveDefaults;
33
+ connectedCallback(): void;
34
+ private _buildCanvasStack;
35
+ private _clearCanvasStack;
36
+ /**
37
+ * Fires when the host (`<perspective-viewer>`) removes this plugin
38
+ * from the DOM on chart-type switch — see
39
+ * `renderer/activate.rs::remove_inactive_plugin`. Without this,
40
+ * inactive plugin instances retain their `RendererTransport`
41
+ * (worker + WebGL context + compiled shader programs) until the
42
+ * entire viewer is torn down, so a user cycling all 12 chart kinds
43
+ * holds 12 GL contexts per viewer and routinely exceeds the
44
+ * browser's per-page context cap (~16) in workspaces.
45
+ */
46
+ disconnectedCallback(): void;
47
+ /**
48
+ * Lazy renderer construction. Memoizes the in-flight `init()`
49
+ * promise so concurrent `draw()` calls during async setup await
50
+ * the same initialization rather than racing.
51
+ */
52
+ private _ensureRenderer;
53
+ /**
54
+ * Capture raw DOM events on the GL canvas with `RawEventForwarder`
55
+ * and post them over the control channel. The renderer dispatches
56
+ * them through its own resolver + `applyWheel` / `applyPan` for
57
+ * zoom/pan, and through `TooltipController` virtual dispatch for
58
+ * hover/click; `zoomChanged` updates push back so the reset-zoom
59
+ * button visibility tracks the renderer-side state.
60
+ *
61
+ * The `zoomChanged` callback was wired at `RendererTransport`
62
+ * construction time; here we just attach the event forwarder and
63
+ * the reset-button click handler.
64
+ */
65
+ private _setupInteraction;
66
+ private _buildRenderer;
67
+ setBlitMode(mode: "direct" | "blit"): void;
68
+ get_static_config(): PluginStaticConfig;
69
+ column_config_schema(column_type: string, _group: string | undefined, _column_name: string, current_value: Record<string, unknown> | null, _viewer_config?: {
70
+ group_by?: string[];
71
+ group_rollup_mode?: string;
72
+ }): {
73
+ fields: (Record<string, unknown> & {
74
+ kind: string;
75
+ })[];
76
+ };
77
+ plugin_config_schema(_view_config?: {
78
+ group_by?: string[];
79
+ group_rollup_mode?: string;
80
+ }): {
81
+ fields: (Record<string, unknown> & {
82
+ kind: string;
83
+ })[];
84
+ };
85
+ draw(view: View): Promise<void>;
86
+ update(view: View): Promise<void>;
87
+ private _drawImpl;
88
+ clear(): Promise<void>;
89
+ resize(): Promise<void>;
90
+ restyle(): number;
91
+ save(): any;
92
+ render(view: View): Promise<Blob>;
93
+ restore(config: any, columns_config?: Record<string, any>): void;
94
+ delete(): void;
95
+ }
@@ -0,0 +1,41 @@
1
+ import type { WebGLContextManager } from "../webgl/context-manager";
2
+ /**
3
+ * Request a coalesced render of `glManager` whose body is
4
+ * `fullRender`. Returns a promise that resolves when this entry's
5
+ * Phase 2 (`awaitGpuFence` + `endFrame`) completes.
6
+ *
7
+ * If a request is already pending for the same glManager, the new
8
+ * call's `fullRender` closure replaces the prior one (latest call
9
+ * wins; closures read chart state lazily so this is functionally a
10
+ * no-op, but keeps the closure fresh) and the returned promise
11
+ * resolves alongside the existing waiters.
12
+ */
13
+ export declare function requestRender(glManager: WebGLContextManager, fullRender: () => void): Promise<void>;
14
+ /**
15
+ * Run `op` synchronously if no drain `present()` is currently active
16
+ * for `glManager`. Otherwise queue `op` to run as soon as that
17
+ * glManager's in-flight `present()` completes (after `endFrame`,
18
+ * after the resolved/rejected waiters).
19
+ *
20
+ * Used by canvas-mutating callers — `WorkerRenderer.resize`,
21
+ * `WorkerRenderer.clear` — to avoid wiping the offscreen between
22
+ * Phase 1 paint and Phase 2 `endFrame`. `glManager.resize` setting
23
+ * `canvas.width = N` clears the drawing buffer immediately
24
+ * (per the WebGL spec, out-of-band from the GL command queue), and
25
+ * a clear that lands in Phase 2's fence-wait yield window corrupts
26
+ * the bitmap that `transferToImageBitmap` ships, producing a blank
27
+ * frame on the host.
28
+ *
29
+ * Deferred ops execute in `present()`'s `finally` clause, so they
30
+ * land *after* the in-flight drain's bitmap has been shipped and
31
+ * before the next drain starts. If a deferred op itself triggers a
32
+ * `requestRender`, the resulting entry queues into `pending` and
33
+ * the drain's tail check (`pending.size > 0 → scheduleFrame(drain)`)
34
+ * picks it up for the next RAF.
35
+ */
36
+ export declare function deferIfDraining(glManager: WebGLContextManager, op: () => void): void;
37
+ /**
38
+ * Test-only: clear pending state. Production callers must not use
39
+ * this — outstanding waiters are silently dropped.
40
+ */
41
+ export declare function _resetForTest(): void;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * A single stop on a parsed CSS gradient. `offset` ∈ [0, 1].
3
+ */
4
+ export interface GradientStop {
5
+ offset: number;
6
+ color: [number, number, number, number];
7
+ }
8
+ /**
9
+ * Parse a `linear-gradient(...)` CSS expression into ordered stops. Tolerates
10
+ * missing percentages (distributes linearly between known offsets, matching
11
+ * the CSS standard) and leading direction tokens (`to right`, `90deg`, etc.)
12
+ * which are simply skipped.
13
+ *
14
+ * Returns the default blue → orange two-stop on any parse failure so themes
15
+ * that never set the gradient still produce sane output.
16
+ */
17
+ export declare function parseCssGradient(src: string | null | undefined): GradientStop[];
18
+ /**
19
+ * Piecewise-linear color sample at `t ∈ [0, 1]`. Returns RGBA in [0, 1].
20
+ * Clamps `t` to the gradient's first/last stop outside `[0, 1]`.
21
+ */
22
+ export declare function sampleGradient(stops: GradientStop[], t: number): [number, number, number, number];
23
+ /**
24
+ * Sign-aware normalization. Returns `t ∈ [0, 1]` where the 50% stop is
25
+ * always the sign pivot:
26
+ * - crosses zero → `[-maxAbs, maxAbs]` stretched symmetrically; 0 → 0.5.
27
+ * - all-positive → `[0, colorMax]` occupies top half `[0.5, 1]`.
28
+ * - all-negative → `[colorMin, 0]` occupies bottom half `[0, 0.5]`.
29
+ * - degenerate → 0.5 (single colour at the midpoint).
30
+ */
31
+ export declare function colorValueToT(value: number, colorMin: number, colorMax: number): number;
32
+ /**
33
+ * Convert a discrete series palette (from `--psp-charts--series-N--color`)
34
+ * into a `GradientStop[]` with stops at `i / (N - 1)`. The resulting
35
+ * stops can feed `buildGradientLUT` / `ensureGradientTexture` / any
36
+ * other code path that already accepts a gradient — so categorical
37
+ * coloring and numeric gradients share one LUT pipeline. Integer idx
38
+ * sampling via `t = idx / (N - 1)` lands exactly on a palette color;
39
+ * the linear blend between stops is only hit by non-integer samples
40
+ * (which categorical data doesn't produce).
41
+ */
42
+ export declare function paletteToStops(palette: [number, number, number][]): GradientStop[];
43
+ /**
44
+ * Bake a sampled LUT for GPU upload as RGBA8 (`size × 1`). Default 256
45
+ * samples — visually indistinguishable from a denser sample at typical
46
+ * viewport sizes and keeps the texture tiny (1 KB).
47
+ */
48
+ export declare function buildGradientLUT(stops: GradientStop[], size?: number): Uint8Array;
@@ -0,0 +1,13 @@
1
+ import { type GradientStop } from "./gradient";
2
+ export type Vec3 = [number, number, number];
3
+ /**
4
+ * Build a series palette of length `count` by sampling the theme gradient
5
+ * at evenly-spaced offsets. For count == 1 returns the 50% stop.
6
+ */
7
+ export declare function interpolatePalette(stops: GradientStop[], count: number): Vec3[];
8
+ /**
9
+ * Resolve a series palette: use the discrete `--psp-charts--series-N--color`
10
+ * palette when available, otherwise fall back to evenly-spaced samples of
11
+ * the theme gradient.
12
+ */
13
+ export declare function resolvePalette(discrete: Vec3[], stops: GradientStop[], count: number): Vec3[];
@@ -0,0 +1,7 @@
1
+ import type { ThemeSnapshot } from "./theme";
2
+ /**
3
+ * Capture every CSS variable the renderer cares about into a
4
+ * structured-cloneable map. Series-palette colours are walked until the
5
+ * first missing var.
6
+ */
7
+ export declare function snapshotThemeVars(el: Element): ThemeSnapshot;
@@ -0,0 +1,53 @@
1
+ import { type GradientStop } from "./gradient";
2
+ export type { GradientStop } from "./gradient";
3
+ export interface Theme {
4
+ fontFamily: string;
5
+ tickColor: string;
6
+ labelColor: string;
7
+ axisLineColor: string;
8
+ gridlineColor: string;
9
+ backgroundColor: string;
10
+ gradientStops: GradientStop[];
11
+ legendText: string;
12
+ legendBorder: string;
13
+ tooltipBg: string;
14
+ tooltipText: string;
15
+ tooltipBorder: string;
16
+ /**
17
+ * Fill opacity for area glyphs. `--psp-charts--area--opacity`.
18
+ */
19
+ areaOpacity: number;
20
+ /**
21
+ * Pixel gap between heatmap cells. Controls the inset applied in the
22
+ * heatmap vertex shader so neighbouring cells remain visually
23
+ * distinguishable. `--psp-charts--heatmap-gap--px`.
24
+ */
25
+ heatmapGapPx: number;
26
+ /**
27
+ * Pixel gap between sunburst arcs (both radial — between ring
28
+ * levels — and angular — between siblings). Works the same way as
29
+ * `heatmapGapPx`: a symmetric inset in the vertex shader so the
30
+ * transparent background shows through as a border.
31
+ * `--psp-charts--sunburst-gap--px`.
32
+ */
33
+ sunburstGapPx: number;
34
+ /**
35
+ * Discrete series palette read from `--psp-charts--series-N--color`
36
+ * (N = 1, 2, …). Empty when no palette is defined — callers should
37
+ * fall back to `gradientStops` sampling in that case.
38
+ */
39
+ seriesPalette: [number, number, number][];
40
+ }
41
+ /**
42
+ * Plain map of CSS variable name → resolved value. Produced on the
43
+ * main thread via `snapshotThemeVars` and shipped to the worker
44
+ * Renderer (which has no DOM and can't call `getComputedStyle`).
45
+ */
46
+ export type ThemeSnapshot = Record<string, string>;
47
+ /**
48
+ * Decode a `ThemeSnapshot` into the parsed `Theme` the renderer
49
+ * consumes. Workers reach this from a serialized snapshot; host code
50
+ * snapshots from the live DOM via `theme-snapshot.ts` and feeds it
51
+ * through here.
52
+ */
53
+ export declare function resolveThemeFromVars(vars: ThemeSnapshot): Theme;