@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,497 @@
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 { FacetConfig, PluginConfig } from "../charts/chart";
14
+ import type { PerspectiveClickDetail } from "../event-detail";
15
+ import type { ViewConfig } from "@perspective-dev/client";
16
+
17
+ /**
18
+ * Worker-mode control-channel messages. Distinct from the perspective
19
+ * `ProxySession` channel that the worker's `Client` uses to talk to the
20
+ * host's real `Client` — that's pure protobuf bytes; this one is the
21
+ * chart's own renderer control plane.
22
+ */
23
+ export type ControlMsg =
24
+ | InitMsg
25
+ | SetViewByNameMsg
26
+ | SetColumnsConfigMsg
27
+ | SetPluginConfigMsg
28
+ | SetBufferMaxCapacityMsg
29
+ | LoadAndRenderMsg
30
+ | RedrawMsg
31
+ | ResizeMsg
32
+ | ClearMsg
33
+ | InvalidateThemeMsg
34
+ | RestoreZoomMsg
35
+ | ResetAllZoomsMsg
36
+ | ResetExpandedDomainMsg
37
+ | SaveZoomReqMsg
38
+ | SnapshotPngReqMsg
39
+ | InteractionMsg
40
+ | DestroyMsg;
41
+
42
+ export type WorkerMsg =
43
+ | ReadyMsg
44
+ | ZoomChangedMsg
45
+ | SaveZoomReplyMsg
46
+ | SnapshotPngReplyMsg
47
+ | PinTooltipMsg
48
+ | DismissTooltipMsg
49
+ | SetCursorMsg
50
+ | UserClickMsg
51
+ | UserSelectMsg
52
+ | LoadAndRenderAckMsg
53
+ | FrameBitmapMsg
54
+ | ErrorMsg;
55
+
56
+ /**
57
+ * Session-tagged envelopes for the shared-worker transport. Every
58
+ * message between the host and the shared `Worker` carries a numeric
59
+ * `sessionId` that addresses a specific `WorkerRenderer` slot in the
60
+ * worker's `RENDERERS` map.
61
+ *
62
+ * In-process mode bypasses these — its `MessageChannel` is per-
63
+ * transport, so messages are already private and routing isn't
64
+ * needed. Only worker-mode `RendererTransport` and the worker-scope
65
+ * message handler wrap / unwrap envelopes.
66
+ */
67
+ export interface ControlEnvelope {
68
+ sessionId: number;
69
+ msg: ControlMsg;
70
+ }
71
+
72
+ export interface WorkerEnvelope {
73
+ sessionId: number;
74
+ msg: WorkerMsg;
75
+ }
76
+
77
+ export interface InitMsg {
78
+ kind: "init";
79
+
80
+ /**
81
+ * GL canvas display strategy. `"direct"` means `glCanvas` below is
82
+ * the host's `.webgl-canvas` transferred via
83
+ * `transferControlToOffscreen` and the renderer paints straight
84
+ * into it. `"blit"` means `glCanvas` is omitted; the renderer
85
+ * allocates its own internal `OffscreenCanvas`, renders into it,
86
+ * and posts each completed frame back as a `FrameBitmapMsg` for
87
+ * the host to draw into a 2D-context display canvas.
88
+ */
89
+ renderMode: "direct" | "blit";
90
+
91
+ /**
92
+ * Transferred via `transferControlToOffscreen` on the host. Present
93
+ * iff `renderMode === "direct"`. In blit mode the renderer
94
+ * constructs its own offscreen surface from `cssWidth`/`cssHeight`/
95
+ * `dpr` and there is no host-side GL drawing buffer.
96
+ */
97
+ glCanvas?: OffscreenCanvas;
98
+ gridlinesCanvas: OffscreenCanvas;
99
+ chromeCanvas: OffscreenCanvas;
100
+
101
+ /**
102
+ * `MessagePort` to the host's `ProxySession`. Worker mode only —
103
+ * the worker bootstraps a fresh `Client` and bridges it through
104
+ * this port. In-process mode uses the host's `Client` directly
105
+ * (handed in via `bootstrapInProcess`'s `client` option), so no
106
+ * proxy bridge is needed.
107
+ */
108
+ proxyPort?: MessagePort;
109
+
110
+ /**
111
+ * Compiled perspective-js client wasm forwarded from the host.
112
+ * Worker mode only — passed to `module.initSync(...)` after the
113
+ * worker dynamic-imports `clientWorkerURL`. In-process mode
114
+ * inherits the host's already-bound wasm via the supplied
115
+ * `Client` instance.
116
+ */
117
+ clientWasm?: WebAssembly.Module;
118
+
119
+ /**
120
+ * URL the worker uses to dynamic-import the perspective-viewer
121
+ * wasm-bindgen JS module. Worker mode only — required because
122
+ * the worker scope can't share module instances with the host.
123
+ * In-process mode uses the host's already-loaded module via
124
+ * the supplied `Client` instance.
125
+ */
126
+ clientWorkerURL?: URL;
127
+
128
+ /**
129
+ * `ChartTypeConfig.tag` — selects which `ChartImplementation` to
130
+ * construct in the worker. The worker has its own copy of the
131
+ * chart class registry.
132
+ */
133
+ chartTag: string;
134
+
135
+ /**
136
+ * Server-assigned `View` name for `client.__unsafe_open_view(name)`.
137
+ */
138
+ viewName: string;
139
+
140
+ /**
141
+ * `Table` name for the worker to resolve via `client.open_table(...)`
142
+ * once at bootstrap. Used for source-schema lookups (group-by level
143
+ * types) on the render path so the host doesn't have to await
144
+ * `table.schema()` on every draw. May be omitted if the host viewer
145
+ * has no table loaded yet — `loadAndRender` falls back to an empty
146
+ * source schema in that case.
147
+ */
148
+ tableName?: string;
149
+ facetConfig: FacetConfig;
150
+
151
+ /**
152
+ * Initial plugin-scoped global config. Seeds the chart impl's
153
+ * `_pluginConfig` before the first `loadAndRender` so the build
154
+ * pipeline (`auto_alt_y_axis`, `band_inner_frac`, `bar_inner_pad`)
155
+ * and render-path uniforms see correct values on the very first
156
+ * frame. The host's later `restore({ plugin_config })` arrives as
157
+ * a `setPluginConfig` control msg.
158
+ */
159
+ pluginConfig: PluginConfig;
160
+ defaultChartType?: string;
161
+
162
+ /**
163
+ * Pre-resolved CSS-variable theme snapshot from the host.
164
+ */
165
+ themeVars: ThemeSnapshot;
166
+
167
+ /**
168
+ * `@font-face` rules captured from the host document, to be
169
+ * re-loaded into the worker's `self.fonts` set before first
170
+ * paint. Worker mode only — workers don't share `FontFaceSet`
171
+ * with the document, so any font referenced via `font-family`
172
+ * must be reloaded there. In-process mode shares
173
+ * `document.fonts` with the host so the array is empty / unused.
174
+ * See `snapshotFontFaces()` for CORS / scope caveats.
175
+ */
176
+ fontFaces: FontFaceDescriptor[];
177
+
178
+ /**
179
+ * Initial CSS size + DPR; subsequent resizes arrive as `resize`.
180
+ */
181
+ cssWidth: number;
182
+ cssHeight: number;
183
+ dpr: number;
184
+
185
+ /**
186
+ * `ChartTypeConfig.max_cells` for the buffer pool.
187
+ */
188
+ bufferMaxCapacity: number;
189
+
190
+ /**
191
+ * If `true`, the `WebGLContextManager` constructed on the
192
+ * renderer side compiles + links every shader in
193
+ * `SHADER_MANIFEST` during construction. Trades a known init-time
194
+ * cost for elimination of inline compile latency on first frame.
195
+ * Default behavior (when undefined) is lazy compilation as a
196
+ * side effect of each glyph's first `getOrCreate` call.
197
+ */
198
+ precompileShaders?: boolean;
199
+ }
200
+
201
+ /**
202
+ * Plain-object form of an `@font-face` rule, structured-cloneable for
203
+ * `postMessage`. The worker reconstitutes a `FontFace` via
204
+ * `new FontFace(family, src, descriptors)`, awaits its load, and
205
+ * registers it in `self.fonts`.
206
+ *
207
+ * `src` is the raw CSS `src:` value (e.g.
208
+ * `url(https://…/foo.woff2) format("woff2")`), with every `url(...)`
209
+ * already absolutized on the host against the parent stylesheet's
210
+ * `href` — the worker's script URL is a Blob URL, so relative URLs
211
+ * would otherwise fail to resolve.
212
+ */
213
+ export interface FontFaceDescriptor {
214
+ family: string;
215
+ src: string;
216
+ style?: string;
217
+ weight?: string;
218
+ stretch?: string;
219
+ unicodeRange?: string;
220
+ variant?: string;
221
+ featureSettings?: string;
222
+ display?: string;
223
+ }
224
+
225
+ /**
226
+ * Theme values resolved on the host via `getComputedStyle` and shipped
227
+ * to the renderer scope, which has no DOM. Decoded by the chart via
228
+ * `theme/theme.ts::resolveThemeFromVars`. Plain map for
229
+ * structured-clone.
230
+ */
231
+ export type ThemeSnapshot = Record<string, string>;
232
+
233
+ export interface SetViewByNameMsg {
234
+ kind: "setViewByName";
235
+ name: string;
236
+ }
237
+
238
+ export interface SetColumnsConfigMsg {
239
+ kind: "setColumnsConfig";
240
+ cfg: Record<string, any>;
241
+ }
242
+
243
+ /**
244
+ * Host → worker: replace the chart impl's `_pluginConfig` with a new
245
+ * snapshot. Sent on every `plugin.restore({ plugin_config })`. The
246
+ * chart re-syncs derived state (`_facetConfig.facet_mode`,
247
+ * `_facetConfig.zoom_mode`, `_autoFitValue`) in `setPluginConfig` and
248
+ * the host posts a `redraw` so render-path uniform changes (line
249
+ * widths, point size) take effect on the next frame. Build-time
250
+ * fields (`auto_alt_y_axis`, `band_inner_frac`, `bar_inner_pad`) take
251
+ * effect on the next `loadAndRender`.
252
+ */
253
+ export interface SetPluginConfigMsg {
254
+ kind: "setPluginConfig";
255
+ cfg: PluginConfig;
256
+ }
257
+
258
+ export interface SetBufferMaxCapacityMsg {
259
+ kind: "setBufferMaxCapacity";
260
+ n: number;
261
+ }
262
+
263
+ /**
264
+ * Host → worker: trigger a full data-fetch + render cycle. The worker
265
+ * resolves all schema / row-count metadata against its own `View` and
266
+ * `Table` (no host-side `Client`/`Table`/`View` await on the render
267
+ * path), runs `view.with_typed_arrays`, and uploads the resulting
268
+ * column data straight into the chart impl on the same thread —
269
+ * eliminating the prior cross-boundary `postMessage` of column buffers.
270
+ *
271
+ * `viewerConfig` ships the bits the worker can't read for itself
272
+ * (`<perspective-viewer>` element APIs, not `Client`/`Table`/`View`).
273
+ *
274
+ * Mid-flight cancellation: each call increments a worker-side
275
+ * generation counter. A newer `loadAndRender` arriving while one is in
276
+ * flight causes the older call's `with_typed_arrays` callback to throw
277
+ * a sentinel before any chart mutation, unwinding the wasm Arrow
278
+ * buffer release before the new call proceeds. Both calls reply with
279
+ * `loadAndRenderAck` so the host promise resolves either way.
280
+ */
281
+ export interface LoadAndRenderMsg {
282
+ kind: "loadAndRender";
283
+ msgId: number;
284
+ viewerConfig: {
285
+ group_by: string[];
286
+ split_by: string[];
287
+ columns: (string | null)[];
288
+ };
289
+ options: {
290
+ float32: boolean;
291
+ };
292
+ }
293
+
294
+ /**
295
+ * Worker → host reply to a `LoadAndRenderMsg`. Always sent — including
296
+ * on stale-generation drop — so the host's awaited promise resolves
297
+ * deterministically.
298
+ */
299
+ export interface LoadAndRenderAckMsg {
300
+ kind: "loadAndRenderAck";
301
+ msgId: number;
302
+ }
303
+
304
+ export interface RedrawMsg {
305
+ kind: "redraw";
306
+ }
307
+
308
+ export interface ResizeMsg {
309
+ kind: "resize";
310
+ cssWidth: number;
311
+ cssHeight: number;
312
+ dpr: number;
313
+ }
314
+
315
+ export interface ClearMsg {
316
+ kind: "clear";
317
+ }
318
+
319
+ export interface InvalidateThemeMsg {
320
+ kind: "invalidateTheme";
321
+
322
+ /**
323
+ * Fresh CSS-variable snapshot — the worker can't read DOM.
324
+ */
325
+ themeVars: ThemeSnapshot;
326
+ }
327
+
328
+ export interface RestoreZoomMsg {
329
+ kind: "restoreZoom";
330
+ state: any;
331
+ }
332
+
333
+ export interface ResetAllZoomsMsg {
334
+ kind: "resetAllZooms";
335
+ }
336
+
337
+ /**
338
+ * Host → worker: clear the chart's `domain_mode: "expand"` accumulator
339
+ * so the next data load starts from a fresh extent. Sent at the head
340
+ * of every `plugin.draw()` (which always indicates a view-level
341
+ * change). `plugin.update()` does not send this — same view, more
342
+ * data, the accumulator should keep growing.
343
+ */
344
+ export interface ResetExpandedDomainMsg {
345
+ kind: "resetExpandedDomain";
346
+ }
347
+
348
+ export interface SaveZoomReqMsg {
349
+ kind: "saveZoom";
350
+ requestId: number;
351
+ }
352
+
353
+ /**
354
+ * Host → worker: ask the renderer to flush a frame and return a PNG of
355
+ * the composited canvas stack. The reply ships a `Blob` correlated to
356
+ * the request via `requestId` (allocated by the host's
357
+ * `RendererTransport.snapshotPng()`).
358
+ */
359
+ export interface SnapshotPngReqMsg {
360
+ kind: "snapshotPng";
361
+ requestId: number;
362
+ }
363
+
364
+ /**
365
+ * Worker → host reply to a `SnapshotPngReqMsg`. Resolves the
366
+ * corresponding host-side promise with the encoded `Blob`.
367
+ */
368
+ export interface SnapshotPngReplyMsg {
369
+ kind: "snapshotPngReply";
370
+ requestId: number;
371
+ blob: Blob;
372
+ }
373
+
374
+ export interface DestroyMsg {
375
+ kind: "destroy";
376
+ }
377
+
378
+ /**
379
+ * Raw pointer / wheel event forwarded from the host's
380
+ * `RawEventForwarder` to the renderer. Coordinates are canvas-relative
381
+ * CSS pixels (host already subtracted `getBoundingClientRect`).
382
+ *
383
+ * `pointerdown` carries `pointerId` so the host can drive
384
+ * `setPointerCapture` while the corresponding `pointermove` /
385
+ * `pointerup` events fire even when the cursor leaves the canvas.
386
+ *
387
+ * `pointermove` drives both pan (when a drag is active) and tooltip
388
+ * hover (when not). `pointerleave` drives tooltip leave. `click` /
389
+ * `dblclick` drive tooltip click handling. One channel per cursor
390
+ * stream — no parallel `mouse*` mirror.
391
+ */
392
+ export type InteractionEvent =
393
+ | { type: "wheel"; mx: number; my: number; deltaY: number }
394
+ | { type: "pointerdown"; mx: number; my: number; pointerId: number }
395
+ | { type: "pointermove"; mx: number; my: number }
396
+ | { type: "pointerup" }
397
+ | { type: "pointerleave" }
398
+ | { type: "click"; mx: number; my: number }
399
+ | { type: "dblclick"; mx: number; my: number };
400
+
401
+ export interface InteractionMsg {
402
+ kind: "interaction";
403
+ event: InteractionEvent;
404
+ }
405
+
406
+ export interface ReadyMsg {
407
+ kind: "ready";
408
+ }
409
+
410
+ export interface ZoomChangedMsg {
411
+ kind: "zoomChanged";
412
+ isDefault: boolean;
413
+ }
414
+
415
+ export interface SaveZoomReplyMsg {
416
+ kind: "saveZoomReply";
417
+ requestId: number;
418
+ state: any;
419
+ }
420
+
421
+ export interface ErrorMsg {
422
+ kind: "error";
423
+ message: string;
424
+ }
425
+
426
+ /**
427
+ * Worker-side request to render a pinned tooltip on the host. The
428
+ * worker has no DOM, so the persistent tooltip `<div>` is materialized
429
+ * by `RendererTransport` (via a `DomHostSink`) on receipt. `bounds` ships
430
+ * the chart's CSS size so the host can clamp the tooltip without
431
+ * reading the canvas geometry itself.
432
+ */
433
+ export interface PinTooltipMsg {
434
+ kind: "pinTooltip";
435
+ lines: string[];
436
+ pos: { px: number; py: number };
437
+ bounds: { cssWidth: number; cssHeight: number };
438
+ }
439
+
440
+ export interface DismissTooltipMsg {
441
+ kind: "dismissTooltip";
442
+ }
443
+
444
+ /**
445
+ * Renderer → host: set the GL canvas's `style.cursor`. The renderer
446
+ * has no DOM (worker mode) — `cursor` is a CSS cursor value
447
+ * (`"pointer"`, `"default"`, etc.) applied directly by the host on
448
+ * receipt.
449
+ */
450
+ export interface SetCursorMsg {
451
+ kind: "setCursor";
452
+ cursor: string;
453
+ }
454
+
455
+ /**
456
+ * Renderer → host: a user click landed on a chart glyph. Host
457
+ * re-dispatches as `CustomEvent<PerspectiveClickDetail>` on the
458
+ * `<perspective-viewer>` ancestor. Payload is a plain object so it
459
+ * survives `postMessage` without losing the class prototype.
460
+ */
461
+ export interface UserClickMsg {
462
+ kind: "userClick";
463
+ detail: PerspectiveClickDetail;
464
+ }
465
+
466
+ /**
467
+ * Renderer → host: a user click pinned or unpinned a chart target.
468
+ * Host materializes a `PerspectiveSelectDetail` from this payload plus
469
+ * its own cached previous-insert config and dispatches as
470
+ * `CustomEvent<PerspectiveSelectDetail>` (`perspective-global-filter`).
471
+ * `removeConfigs` is computed host-side — not sent.
472
+ */
473
+ export interface UserSelectMsg {
474
+ kind: "userSelect";
475
+ selected: boolean;
476
+ row: Record<string, unknown>;
477
+ column_names: string[];
478
+ insertConfig: Partial<ViewConfig>;
479
+ }
480
+
481
+ /**
482
+ * Worker → host: a completed GL frame, materialized as an
483
+ * `ImageBitmap` from the renderer's internal offscreen canvas via
484
+ * `transferToImageBitmap()`. Sent only in `renderMode === "blit"`,
485
+ * after each `_fullRender` completes. The host draws the bitmap into
486
+ * its 2D-context display canvas and calls `bitmap.close()` to release
487
+ * the GPU-backed surface.
488
+ *
489
+ * The bitmap MUST appear in the postMessage transfer list — the
490
+ * underlying surface is moved, not copied, so failing to transfer
491
+ * renders the host's drawImage a no-op (or worse, a Safari crash on
492
+ * older WebKits).
493
+ */
494
+ export interface FrameBitmapMsg {
495
+ kind: "frameBitmap";
496
+ bitmap: ImageBitmap;
497
+ }