@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.
- package/LICENSE.md +193 -0
- package/dist/cdn/perspective-viewer-charts.js +3 -0
- package/dist/cdn/perspective-viewer-charts.js.map +7 -0
- package/dist/esm/axis/axis-primitives.d.ts +24 -0
- package/dist/esm/axis/bar-axis.d.ts +51 -0
- package/dist/esm/axis/canvas.d.ts +24 -0
- package/dist/esm/axis/categorical-axis-core.d.ts +42 -0
- package/dist/esm/axis/categorical-axis.d.ts +27 -0
- package/dist/esm/axis/facet-chrome.d.ts +13 -0
- package/dist/esm/axis/label-geometry.d.ts +41 -0
- package/dist/esm/axis/legend.d.ts +44 -0
- package/dist/esm/axis/numeric-axis.d.ts +20 -0
- package/dist/esm/charts/candlestick/candlestick-build.d.ts +129 -0
- package/dist/esm/charts/candlestick/candlestick-interact.d.ts +10 -0
- package/dist/esm/charts/candlestick/candlestick-render.d.ts +24 -0
- package/dist/esm/charts/candlestick/candlestick.d.ts +144 -0
- package/dist/esm/charts/candlestick/glyphs/draw-candlesticks.d.ts +36 -0
- package/dist/esm/charts/candlestick/glyphs/draw-ohlc.d.ts +33 -0
- package/dist/esm/charts/canvas-types.d.ts +15 -0
- package/dist/esm/charts/cartesian/cartesian-build.d.ts +14 -0
- package/dist/esm/charts/cartesian/cartesian-interact.d.ts +20 -0
- package/dist/esm/charts/cartesian/cartesian-render.d.ts +26 -0
- package/dist/esm/charts/cartesian/cartesian.d.ts +239 -0
- package/dist/esm/charts/cartesian/glyph.d.ts +53 -0
- package/dist/esm/charts/cartesian/glyphs/density.d.ts +142 -0
- package/dist/esm/charts/cartesian/glyphs/lines.d.ts +23 -0
- package/dist/esm/charts/cartesian/glyphs/points.d.ts +24 -0
- package/dist/esm/charts/cartesian/label-interner.d.ts +21 -0
- package/dist/esm/charts/cartesian/tooltip-lines.d.ts +11 -0
- package/dist/esm/charts/chart-base.d.ts +402 -0
- package/dist/esm/charts/chart.d.ts +338 -0
- package/dist/esm/charts/common/band-layout.d.ts +32 -0
- package/dist/esm/charts/common/categorical-y-chart.d.ts +53 -0
- package/dist/esm/charts/common/category-axis-resolver.d.ts +90 -0
- package/dist/esm/charts/common/chrome-cache.d.ts +18 -0
- package/dist/esm/charts/common/draw-tooltip-box.d.ts +9 -0
- package/dist/esm/charts/common/leaf-color.d.ts +33 -0
- package/dist/esm/charts/common/node-store.d.ts +81 -0
- package/dist/esm/charts/common/tree-chart.d.ts +48 -0
- package/dist/esm/charts/common/tree-chrome.d.ts +31 -0
- package/dist/esm/charts/common/tree-data.d.ts +54 -0
- package/dist/esm/charts/common/visible-extent.d.ts +51 -0
- package/dist/esm/charts/heatmap/heatmap-build.d.ts +86 -0
- package/dist/esm/charts/heatmap/heatmap-interact.d.ts +19 -0
- package/dist/esm/charts/heatmap/heatmap-render.d.ts +19 -0
- package/dist/esm/charts/heatmap/heatmap-y-axis.d.ts +46 -0
- package/dist/esm/charts/heatmap/heatmap.d.ts +117 -0
- package/dist/esm/charts/map/map.d.ts +67 -0
- package/dist/esm/charts/registry.d.ts +14 -0
- package/dist/esm/charts/series/glyphs/draw-areas.d.ts +30 -0
- package/dist/esm/charts/series/glyphs/draw-bars.d.ts +15 -0
- package/dist/esm/charts/series/glyphs/draw-lines.d.ts +34 -0
- package/dist/esm/charts/series/glyphs/draw-scatter.d.ts +33 -0
- package/dist/esm/charts/series/series-build.d.ts +228 -0
- package/dist/esm/charts/series/series-interact.d.ts +35 -0
- package/dist/esm/charts/series/series-render.d.ts +41 -0
- package/dist/esm/charts/series/series-type.d.ts +49 -0
- package/dist/esm/charts/series/series.d.ts +317 -0
- package/dist/esm/charts/sunburst/sunburst-interact.d.ts +7 -0
- package/dist/esm/charts/sunburst/sunburst-layout.d.ts +33 -0
- package/dist/esm/charts/sunburst/sunburst-render.d.ts +22 -0
- package/dist/esm/charts/sunburst/sunburst.d.ts +85 -0
- package/dist/esm/charts/treemap/treemap-interact.d.ts +12 -0
- package/dist/esm/charts/treemap/treemap-layout.d.ts +28 -0
- package/dist/esm/charts/treemap/treemap-render.d.ts +18 -0
- package/dist/esm/charts/treemap/treemap.d.ts +74 -0
- package/dist/esm/config.d.ts +27 -0
- package/dist/esm/data/lazy-row.d.ts +32 -0
- package/dist/esm/data/split-groups.d.ts +20 -0
- package/dist/esm/data/view-reader.d.ts +35 -0
- package/dist/esm/event-detail.d.ts +28 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/interaction/hit-test.d.ts +30 -0
- package/dist/esm/interaction/host-sink-dom.d.ts +19 -0
- package/dist/esm/interaction/host-sink-message.d.ts +46 -0
- package/dist/esm/interaction/lazy-tooltip.d.ts +61 -0
- package/dist/esm/interaction/raw-event-forwarder.d.ts +27 -0
- package/dist/esm/interaction/spatial-grid.d.ts +15 -0
- package/dist/esm/interaction/tooltip-controller.d.ts +193 -0
- package/dist/esm/interaction/zoom-controller.d.ts +106 -0
- package/dist/esm/interaction/zoom-router.d.ts +48 -0
- package/dist/esm/layout/facet-grid.d.ts +126 -0
- package/dist/esm/layout/plot-layout.d.ts +104 -0
- package/dist/esm/layout/ticks.d.ts +17 -0
- package/dist/esm/map/mercator.d.ts +102 -0
- package/dist/esm/map/tile-cache.d.ts +38 -0
- package/dist/esm/map/tile-layer.d.ts +66 -0
- package/dist/esm/map/tile-loader.d.ts +52 -0
- package/dist/esm/map/tile-source.d.ts +66 -0
- package/dist/esm/perspective-viewer-charts.js +3 -0
- package/dist/esm/perspective-viewer-charts.js.map +7 -0
- package/dist/esm/plugin/charts.d.ts +40 -0
- package/dist/esm/plugin/plugin.d.ts +95 -0
- package/dist/esm/render/scheduler.d.ts +41 -0
- package/dist/esm/theme/gradient.d.ts +48 -0
- package/dist/esm/theme/palette.d.ts +13 -0
- package/dist/esm/theme/theme-snapshot.d.ts +7 -0
- package/dist/esm/theme/theme.d.ts +53 -0
- package/dist/esm/transport/protocol.d.ts +430 -0
- package/dist/esm/transport/renderer-transport.d.ts +201 -0
- package/dist/esm/utils/css.d.ts +1 -0
- package/dist/esm/utils/font-snapshot.d.ts +50 -0
- package/dist/esm/webgl/buffer-pool.d.ts +62 -0
- package/dist/esm/webgl/context-manager.d.ts +184 -0
- package/dist/esm/webgl/gradient-texture.d.ts +17 -0
- package/dist/esm/webgl/instanced-attrs.d.ts +44 -0
- package/dist/esm/webgl/plot-frame.d.ts +39 -0
- package/dist/esm/webgl/program-cache.d.ts +13 -0
- package/dist/esm/webgl/shader-manifest.d.ts +53 -0
- package/dist/esm/webgl/shader-registry.d.ts +22 -0
- package/dist/esm/worker/boot.d.ts +0 -0
- package/dist/esm/worker/dispatch.d.ts +9 -0
- package/dist/esm/worker/font-loader.d.ts +2 -0
- package/dist/esm/worker/renderer.worker.d.ts +115 -0
- package/dist/esm/worker/session-host.d.ts +26 -0
- package/package.json +47 -0
- package/src/css/perspective-viewer-charts.css +95 -0
- package/src/ts/axis/axis-primitives.ts +125 -0
- package/src/ts/axis/bar-axis.ts +345 -0
- package/src/ts/axis/canvas.ts +64 -0
- package/src/ts/axis/categorical-axis-core.ts +125 -0
- package/src/ts/axis/categorical-axis.ts +716 -0
- package/src/ts/axis/facet-chrome.ts +42 -0
- package/src/ts/axis/label-geometry.ts +188 -0
- package/src/ts/axis/legend.ts +218 -0
- package/src/ts/axis/numeric-axis.ts +353 -0
- package/src/ts/charts/candlestick/candlestick-build.ts +516 -0
- package/src/ts/charts/candlestick/candlestick-interact.ts +256 -0
- package/src/ts/charts/candlestick/candlestick-render.ts +387 -0
- package/src/ts/charts/candlestick/candlestick.ts +367 -0
- package/src/ts/charts/candlestick/glyphs/draw-candlesticks.ts +432 -0
- package/src/ts/charts/candlestick/glyphs/draw-ohlc.ts +317 -0
- package/src/ts/charts/canvas-types.ts +30 -0
- package/src/ts/charts/cartesian/cartesian-build.ts +616 -0
- package/src/ts/charts/cartesian/cartesian-interact.ts +355 -0
- package/src/ts/charts/cartesian/cartesian-render.ts +948 -0
- package/src/ts/charts/cartesian/cartesian.ts +469 -0
- package/src/ts/charts/cartesian/glyph.ts +81 -0
- package/src/ts/charts/cartesian/glyphs/density.ts +1263 -0
- package/src/ts/charts/cartesian/glyphs/lines.ts +320 -0
- package/src/ts/charts/cartesian/glyphs/points.ts +239 -0
- package/src/ts/charts/cartesian/label-interner.ts +56 -0
- package/src/ts/charts/cartesian/tooltip-lines.ts +80 -0
- package/src/ts/charts/chart-base.ts +840 -0
- package/src/ts/charts/chart.ts +427 -0
- package/src/ts/charts/common/band-layout.ts +63 -0
- package/src/ts/charts/common/categorical-y-chart.ts +81 -0
- package/src/ts/charts/common/category-axis-resolver.ts +314 -0
- package/src/ts/charts/common/chrome-cache.ts +79 -0
- package/src/ts/charts/common/draw-tooltip-box.ts +84 -0
- package/src/ts/charts/common/leaf-color.ts +92 -0
- package/src/ts/charts/common/node-store.ts +235 -0
- package/src/ts/charts/common/tree-chart.ts +76 -0
- package/src/ts/charts/common/tree-chrome.ts +123 -0
- package/src/ts/charts/common/tree-data.ts +623 -0
- package/src/ts/charts/common/visible-extent.ts +112 -0
- package/src/ts/charts/heatmap/heatmap-build.ts +426 -0
- package/src/ts/charts/heatmap/heatmap-interact.ts +274 -0
- package/src/ts/charts/heatmap/heatmap-render.ts +815 -0
- package/src/ts/charts/heatmap/heatmap-y-axis.ts +351 -0
- package/src/ts/charts/heatmap/heatmap.ts +368 -0
- package/src/ts/charts/map/map.ts +201 -0
- package/src/ts/charts/registry.ts +65 -0
- package/src/ts/charts/series/glyphs/draw-areas.ts +331 -0
- package/src/ts/charts/series/glyphs/draw-bars.ts +113 -0
- package/src/ts/charts/series/glyphs/draw-lines.ts +320 -0
- package/src/ts/charts/series/glyphs/draw-scatter.ts +328 -0
- package/src/ts/charts/series/series-build.ts +848 -0
- package/src/ts/charts/series/series-interact.ts +604 -0
- package/src/ts/charts/series/series-render.ts +1109 -0
- package/src/ts/charts/series/series-type.ts +99 -0
- package/src/ts/charts/series/series.ts +794 -0
- package/src/ts/charts/sunburst/sunburst-interact.ts +460 -0
- package/src/ts/charts/sunburst/sunburst-layout.ts +238 -0
- package/src/ts/charts/sunburst/sunburst-render.ts +887 -0
- package/src/ts/charts/sunburst/sunburst.ts +248 -0
- package/src/ts/charts/treemap/treemap-interact.ts +445 -0
- package/src/ts/charts/treemap/treemap-layout.ts +328 -0
- package/src/ts/charts/treemap/treemap-render.ts +886 -0
- package/src/ts/charts/treemap/treemap.ts +247 -0
- package/src/ts/config.ts +41 -0
- package/src/ts/data/lazy-row.ts +140 -0
- package/src/ts/data/split-groups.ts +97 -0
- package/src/ts/data/view-reader.ts +107 -0
- package/src/ts/event-detail.ts +44 -0
- package/src/ts/index.ts +53 -0
- package/src/ts/interaction/hit-test.ts +106 -0
- package/src/ts/interaction/host-sink-dom.ts +85 -0
- package/src/ts/interaction/host-sink-message.ts +75 -0
- package/src/ts/interaction/lazy-tooltip.ts +102 -0
- package/src/ts/interaction/raw-event-forwarder.ts +175 -0
- package/src/ts/interaction/spatial-grid.ts +100 -0
- package/src/ts/interaction/tooltip-controller.ts +407 -0
- package/src/ts/interaction/zoom-controller.ts +468 -0
- package/src/ts/interaction/zoom-router.ts +230 -0
- package/src/ts/layout/facet-grid.ts +346 -0
- package/src/ts/layout/plot-layout.ts +277 -0
- package/src/ts/layout/ticks.ts +168 -0
- package/src/ts/map/mercator.ts +204 -0
- package/src/ts/map/tile-cache.ts +96 -0
- package/src/ts/map/tile-layer.ts +382 -0
- package/src/ts/map/tile-loader.ts +143 -0
- package/src/ts/map/tile-source.ts +156 -0
- package/src/ts/plugin/charts.ts +286 -0
- package/src/ts/plugin/plugin.ts +668 -0
- package/src/ts/render/scheduler.ts +339 -0
- package/src/ts/shaders/area.frag.glsl +20 -0
- package/src/ts/shaders/area.vert.glsl +19 -0
- package/src/ts/shaders/bar.frag.glsl +25 -0
- package/src/ts/shaders/bar.vert.glsl +60 -0
- package/src/ts/shaders/candlestick-body.frag.glsl +19 -0
- package/src/ts/shaders/candlestick-body.vert.glsl +34 -0
- package/src/ts/shaders/density-extreme.frag.glsl +30 -0
- package/src/ts/shaders/density-mrt.frag.glsl +44 -0
- package/src/ts/shaders/density-mrt.vert.glsl +48 -0
- package/src/ts/shaders/density-resolve.frag.glsl +89 -0
- package/src/ts/shaders/density-resolve.vert.glsl +23 -0
- package/src/ts/shaders/density-splat.frag.glsl +34 -0
- package/src/ts/shaders/density-splat.vert.glsl +52 -0
- package/src/ts/shaders/gridline.frag.glsl +18 -0
- package/src/ts/shaders/gridline.vert.glsl +18 -0
- package/src/ts/shaders/heatmap.frag.glsl +23 -0
- package/src/ts/shaders/heatmap.vert.glsl +42 -0
- package/src/ts/shaders/line-uniform.frag.glsl +26 -0
- package/src/ts/shaders/line-uniform.vert.glsl +54 -0
- package/src/ts/shaders/line.frag.glsl +28 -0
- package/src/ts/shaders/line.vert.glsl +87 -0
- package/src/ts/shaders/scatter.frag.glsl +39 -0
- package/src/ts/shaders/scatter.vert.glsl +67 -0
- package/src/ts/shaders/sunburst-arc.frag.glsl +19 -0
- package/src/ts/shaders/sunburst-arc.vert.glsl +79 -0
- package/src/ts/shaders/tile.frag.glsl +27 -0
- package/src/ts/shaders/tile.vert.glsl +35 -0
- package/src/ts/shaders/treemap.frag.glsl +19 -0
- package/src/ts/shaders/treemap.vert.glsl +25 -0
- package/src/ts/shaders/y-scatter.frag.glsl +30 -0
- package/src/ts/shaders/y-scatter.vert.glsl +31 -0
- package/src/ts/theme/gradient.ts +312 -0
- package/src/ts/theme/palette.ts +64 -0
- package/src/ts/theme/theme-snapshot.ts +66 -0
- package/src/ts/theme/theme.ts +166 -0
- package/src/ts/transport/protocol.ts +497 -0
- package/src/ts/transport/renderer-transport.ts +788 -0
- package/src/ts/utils/css.ts +36 -0
- package/src/ts/utils/font-snapshot.ts +159 -0
- package/src/ts/webgl/buffer-pool.ts +163 -0
- package/src/ts/webgl/context-manager.ts +414 -0
- package/src/ts/webgl/gradient-texture.ts +84 -0
- package/src/ts/webgl/instanced-attrs.ts +139 -0
- package/src/ts/webgl/plot-frame.ts +91 -0
- package/src/ts/webgl/program-cache.ts +46 -0
- package/src/ts/webgl/shader-manifest.ts +148 -0
- package/src/ts/webgl/shader-registry.ts +97 -0
- package/src/ts/worker/boot.ts +22 -0
- package/src/ts/worker/dispatch.ts +99 -0
- package/src/ts/worker/font-loader.ts +89 -0
- package/src/ts/worker/renderer.worker.ts +734 -0
- 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
|
+
}
|