mirror of
https://github.com/olehomelchenko/astrolabe.git
synced 2026-08-08 02:02:33 +00:00
Per-chart export: copy/download spec and PNG/SVG from the preview header
This commit is contained in:
@@ -101,6 +101,20 @@ async function rerender(node: HTMLElement, spec: TopLevelSpec, config: Config) {
|
||||
|
||||
- **Do** pass `actions: false`. Astrolabe owns its own export/copy affordances;
|
||||
the library's overlay menu does not belong on the preview.
|
||||
- **The per-chart export goes through the handle, not the raw view.** `RenderHandle`
|
||||
exposes `toImageURL('png' | 'svg', { scale, background })` so the preview's Export
|
||||
control can rasterize/serialize the live chart without any component importing
|
||||
`vega-embed` or touching the `View` directly — the embedding boundary holds. PNG goes
|
||||
via `view.toCanvas` → `blob:` URL (revoked after the download); SVG via `view.toSVG`
|
||||
→ `data:` URL. Renderer-agnostic: both work from the SVG-backed LivePreview view, since
|
||||
Vega draws to its own off-screen surface here. Two non-obvious details live in the
|
||||
handle, not the caller: **(1) dpr-aware scale** — the PNG is drawn at
|
||||
`scale × devicePixelRatio`, so a `1×` export is as crisp as the chart on a Retina
|
||||
screen (raw `toImageURL` scaleFactor ignores dpr, so a naive 1× looks half-resolution
|
||||
on a 2× display). **(2) background fill** — the chart config renders a transparent
|
||||
background (so the on-screen chart shows the pane colour), which would make a naive
|
||||
export transparent; an opaque colour is composited under the PNG canvas and added as a
|
||||
full-bleed `<rect>` to the SVG. The spec-text exports (copy / `.vl.json`) need no view.
|
||||
- **SVG is the default renderer, canvas is an opt-in for many-mark previews.** SVG is
|
||||
crisp/inspectable/copyable and stays the default for the editor's LivePreview. But an
|
||||
SVG chart renders one DOM node per mark, so a many-mark chart (e.g. the Chart Builder's
|
||||
|
||||
Reference in New Issue
Block a user