mirror of
https://github.com/olehomelchenko/astrolabe.git
synced 2026-08-08 02:02:33 +00:00
Implement fit-mode rendering contract with container sizing and pane re-fit
This commit is contained in:
@@ -170,10 +170,14 @@ vega/editor's hand-rolled renderer (`src/components/renderer/renderer.tsx`) reve
|
||||
(`config-editor/config-editor-header.tsx:5-37`). For Astrolabe: pass the chosen `theme`/`config`
|
||||
to `vegaEmbed`, and when our theme changes, re-embed with the new config.
|
||||
- **`"width":"container"` / `"height":"container"` is how VL responsiveness works** — it
|
||||
compiles to a `containerSize` signal (`renderer.tsx:78-90` detects this). Pair it with a
|
||||
**`ResizeObserver`** on the preview pane → `view.resize().runAsync()`. This is cleaner than
|
||||
vega/editor's `window.dispatchEvent(new Event('resize'))` hack (`renderer.tsx:101-122`) and is
|
||||
the mechanism behind our M2 fit-mode contract.
|
||||
compiles `width`/`height` to signals that re-read `containerSize()` **only on a
|
||||
`window:resize` event** (`renderer.tsx:78-90` detects container sizing). Two things a
|
||||
from-scratch impl _will_ get wrong (we did): (1) `view.resize().runAsync()` does **not**
|
||||
re-measure — it re-runs layout with the stale size; (2) a pane drag fires no window resize, so
|
||||
nothing re-fits on its own. The fix is exactly vega/editor's
|
||||
`window.dispatchEvent(new Event('resize'))` (`renderer.tsx:101-122`) — **not a hack, the
|
||||
actual mechanism** — driven by a `ResizeObserver` on the pane. It also leaves a non-container
|
||||
dimension natural for free. Full write-up in doc [05](05-rendering-theming-preview.md) §8.
|
||||
- **Reuse the view for cheap changes.** They rebuild the `View` only on spec change; renderer
|
||||
(svg/canvas) and tooltip toggles re-`initialize()` the existing view (`renderer.tsx:367-371`).
|
||||
- **Capture warnings separately from errors** via a buffering logger (see §4's `LocalLogger`).
|
||||
@@ -273,20 +277,20 @@ defaults-spread" discipline is worth keeping.
|
||||
|
||||
## Borrow list (where each lands)
|
||||
|
||||
| Technique | Lands in | Milestone |
|
||||
| ---------------------------------------------------------------------------------------- | -------------------------------------- | --------- |
|
||||
| Bundle VL schema from package `build/`; `setDiagnosticsOptions` | `src/app/infrastructure/` Monaco setup | M2 |
|
||||
| `markdownDescription` patch + compact formatter | Monaco setup | M2 |
|
||||
| Explicit Vite worker wiring (`MonacoEnvironment.getWorker`) | Monaco setup | M2 |
|
||||
| `fileMatch` schema binding (improvement over `$schema`-only) | Monaco setup | M2 |
|
||||
| jsonc-parser tolerant parse + line/col syntax errors | `src/core/` | M1/M2 |
|
||||
| ajv wrapper (`strict:false`, draft-06, color-hex, compile-once) → structured diagnostics | `src/core/` | M2 |
|
||||
| `LocalLogger`-style buffered diagnostics from pure compile | `src/core/` | M2 |
|
||||
| Fatal-vs-advisory two-tier error model | rendering/store contract | M1/M2 |
|
||||
| `"container"` sizing + `ResizeObserver` → `view.resize()` | `rendering.ts` + LivePreview | M2 |
|
||||
| `finalize()`-before-reembed + **render-generation guard** | LivePreview | M1 |
|
||||
| theme = `vega-themes` config merged into `vegaEmbed` | preview + settings | M5 |
|
||||
| `json-stringify-pretty-compact` format action | editor | M2 |
|
||||
| Technique | Lands in | Milestone |
|
||||
| ----------------------------------------------------------------------------------------- | -------------------------------------- | --------- |
|
||||
| Bundle VL schema from package `build/`; `setDiagnosticsOptions` | `src/app/infrastructure/` Monaco setup | M2 |
|
||||
| `markdownDescription` patch + compact formatter | Monaco setup | M2 |
|
||||
| Explicit Vite worker wiring (`MonacoEnvironment.getWorker`) | Monaco setup | M2 |
|
||||
| `fileMatch` schema binding (improvement over `$schema`-only) | Monaco setup | M2 |
|
||||
| jsonc-parser tolerant parse + line/col syntax errors | `src/core/` | M1/M2 |
|
||||
| ajv wrapper (`strict:false`, draft-06, color-hex, compile-once) → structured diagnostics | `src/core/` | M2 |
|
||||
| `LocalLogger`-style buffered diagnostics from pure compile | `src/core/` | M2 |
|
||||
| Fatal-vs-advisory two-tier error model | rendering/store contract | M1/M2 |
|
||||
| `"container"` sizing + `ResizeObserver` → synthetic `window:resize` (not `view.resize()`) | `chart-renderer` + LivePreview | M2 |
|
||||
| `finalize()`-before-reembed + **render-generation guard** | LivePreview | M1 |
|
||||
| theme = `vega-themes` config merged into `vegaEmbed` | preview + settings | M5 |
|
||||
| `json-stringify-pretty-compact` format action | editor | M2 |
|
||||
|
||||
## Where we deliberately do better than the reference
|
||||
|
||||
|
||||
Reference in New Issue
Block a user