@perspective-dev/viewer-charts 4.5.2 → 5.0.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 (61) hide show
  1. package/dist/cdn/perspective-viewer-charts.js +2 -2
  2. package/dist/cdn/perspective-viewer-charts.js.map +3 -3
  3. package/dist/esm/charts/candlestick/candlestick.d.ts +8 -10
  4. package/dist/esm/charts/chart-base.d.ts +58 -4
  5. package/dist/esm/charts/chart.d.ts +45 -9
  6. package/dist/esm/charts/series/glyphs/draw-areas.d.ts +3 -2
  7. package/dist/esm/charts/series/glyphs/draw-bars.d.ts +8 -1
  8. package/dist/esm/charts/series/glyphs/draw-lines.d.ts +3 -2
  9. package/dist/esm/charts/series/glyphs/draw-scatter.d.ts +5 -2
  10. package/dist/esm/charts/series/series-build.d.ts +11 -0
  11. package/dist/esm/charts/series/series-interact.d.ts +10 -0
  12. package/dist/esm/charts/series/series-render.d.ts +17 -1
  13. package/dist/esm/charts/series/series.d.ts +53 -10
  14. package/dist/esm/data/view-reader.d.ts +10 -1
  15. package/dist/esm/event-detail.d.ts +7 -0
  16. package/dist/esm/layout/ticks.d.ts +5 -0
  17. package/dist/esm/perspective-viewer-charts.js +2 -2
  18. package/dist/esm/perspective-viewer-charts.js.map +3 -3
  19. package/dist/esm/plugin/charts.d.ts +6 -3
  20. package/dist/esm/plugin/plugin.d.ts +31 -2
  21. package/dist/esm/render/scheduler.d.ts +11 -8
  22. package/dist/esm/transport/protocol.d.ts +31 -2
  23. package/dist/esm/transport/renderer-transport.d.ts +74 -3
  24. package/dist/esm/webgl/instanced-attrs.d.ts +7 -1
  25. package/dist/esm/worker/renderer.worker.d.ts +12 -0
  26. package/package.json +1 -1
  27. package/src/ts/charts/candlestick/candlestick-render.ts +4 -1
  28. package/src/ts/charts/candlestick/candlestick.ts +12 -17
  29. package/src/ts/charts/cartesian/cartesian-render.ts +80 -63
  30. package/src/ts/charts/chart-base.ts +85 -5
  31. package/src/ts/charts/chart.ts +47 -9
  32. package/src/ts/charts/common/category-axis-resolver.ts +5 -1
  33. package/src/ts/charts/common/tree-data.ts +61 -16
  34. package/src/ts/charts/heatmap/heatmap-render.ts +6 -2
  35. package/src/ts/charts/series/glyphs/draw-areas.ts +10 -1
  36. package/src/ts/charts/series/glyphs/draw-bars.ts +30 -9
  37. package/src/ts/charts/series/glyphs/draw-lines.ts +10 -1
  38. package/src/ts/charts/series/glyphs/draw-scatter.ts +56 -3
  39. package/src/ts/charts/series/series-build.ts +21 -3
  40. package/src/ts/charts/series/series-interact.ts +86 -13
  41. package/src/ts/charts/series/series-render.ts +660 -17
  42. package/src/ts/charts/series/series.ts +96 -26
  43. package/src/ts/charts/sunburst/sunburst-interact.ts +2 -3
  44. package/src/ts/charts/sunburst/sunburst-render.ts +3 -1
  45. package/src/ts/charts/treemap/treemap-interact.ts +2 -5
  46. package/src/ts/charts/treemap/treemap-render.ts +3 -1
  47. package/src/ts/charts/treemap/treemap.ts +6 -1
  48. package/src/ts/data/view-reader.ts +22 -2
  49. package/src/ts/event-detail.ts +8 -0
  50. package/src/ts/index.ts +13 -7
  51. package/src/ts/interaction/raw-event-forwarder.ts +7 -0
  52. package/src/ts/interaction/zoom-controller.ts +8 -0
  53. package/src/ts/layout/ticks.ts +9 -0
  54. package/src/ts/plugin/charts.ts +20 -4
  55. package/src/ts/plugin/plugin.ts +86 -16
  56. package/src/ts/render/scheduler.ts +39 -13
  57. package/src/ts/transport/protocol.ts +33 -0
  58. package/src/ts/transport/renderer-transport.ts +185 -9
  59. package/src/ts/webgl/instanced-attrs.ts +15 -1
  60. package/src/ts/worker/dispatch.ts +4 -1
  61. package/src/ts/worker/renderer.worker.ts +32 -3
@@ -40,9 +40,12 @@ export function dispatch(r: WorkerRenderer, msg: ControlMsg): void {
40
40
  case "redraw":
41
41
  r.redraw();
42
42
  break;
43
+ case "deselect":
44
+ r.chartImpl.deselect?.();
45
+ break;
43
46
  case "resize":
44
47
  r.resize(msg.cssWidth, msg.cssHeight, msg.dpr);
45
- r.redraw();
48
+ r.redrawAck(msg.msgId);
46
49
  break;
47
50
  case "clear":
48
51
  r.clear();
@@ -295,16 +295,23 @@ export class WorkerRenderer {
295
295
  try {
296
296
  await viewToColumnDataMap(
297
297
  this.view,
298
- async (cols) => {
298
+ async (cols, deliveredRows) => {
299
299
  if (this._renderGen !== myGen) {
300
300
  throw new StaleGenerationError();
301
301
  }
302
302
 
303
+ // `totalRows` came from a SEPARATE `num_rows()`
304
+ // round-trip; a fast-updating table with deletions
305
+ // can shrink the view before the Arrow fetch, which
306
+ // clamps its window silently. Iterating to the stale
307
+ // count reads typed arrays out-of-bounds (`undefined`
308
+ // values no validity bitmap covers) — clamp to what
309
+ // was actually delivered.
303
310
  await this.chartImpl.uploadAndRender(
304
311
  this.glManager,
305
312
  cols,
306
313
  0,
307
- totalRows,
314
+ Math.min(totalRows, deliveredRows),
308
315
  );
309
316
  },
310
317
  { end_row: totalRows, float32: msg.options.float32 },
@@ -327,6 +334,24 @@ export class WorkerRenderer {
327
334
  this.chartImpl.requestRender(this.glManager);
328
335
  }
329
336
 
337
+ /**
338
+ * `redraw`, acked to the host AFTER the frame's present completes —
339
+ * the reply backing the viewer's presize contract (`ResizeAckMsg`):
340
+ * `plugin.resize()` must not resolve until the resized frame is
341
+ * actually on screen. A resize landing mid-present defers its
342
+ * canvas mutation (`deferIfDraining`), but the redraw's own frame
343
+ * applies pending dimensions in `beginFrame`, so the present this
344
+ * awaits IS at the new size. Always acks — a failed present or a
345
+ * torn-down chart resolves the host's await rather than stranding
346
+ * it (completion, not success, is the contract).
347
+ */
348
+ redrawAck(msgId: number): void {
349
+ this.chartImpl
350
+ .requestRender(this.glManager)
351
+ .catch(() => {})
352
+ .finally(() => this.post({ kind: "resizeAck", msgId }));
353
+ }
354
+
330
355
  resize(cssWidth: number, cssHeight: number, dpr: number): void {
331
356
  // `glManager.resize` would set `canvas.width = N`, which the
332
357
  // spec mandates clears the drawing buffer immediately. In
@@ -572,7 +597,11 @@ export class WorkerRenderer {
572
597
  // chart left the shared canvas at its own size) would render at
573
598
  // the wrong dimensions.
574
599
  this.glManager.beginFrame();
575
- this.chartImpl._fullRender(this.glManager);
600
+ // `renderFrameSync` (not `_fullRender`) so the gridline + chrome
601
+ // 2D canvases are actually painted here — the scheduler normally
602
+ // defers those to a post-fence flush, but the snapshot path
603
+ // bypasses the scheduler and composites the 2D layers below.
604
+ this.chartImpl.renderFrameSync(this.glManager);
576
605
  const gl = this.glManager.gl;
577
606
  const glCanvas = gl.canvas as OffscreenCanvas;
578
607
  const w = glCanvas.width;