Commit Graph
100 Commits
Author SHA1 Message Date
oleh 26b383ff33 Editor: render a layer as one framed row of mark glyphs
A layer is one plotting space with several marks stacked in z-order, so it now renders as a single frame holding its child marks as a row of glyphs, badged with a new 'layers' glyph — instead of offset stacked cards that read as separate spaces and hid the lower glyphs. Each mark stays an individual treeitem, so selection and Alt+up/down z-order reorder are unchanged.
2026-06-29 14:59:01 +03:00
oleh 216797ff9b Editor: interactive composition wireframe — drag to reorder and restructure
Drag a view's box (or Alt+up/down) to reorder it within its container; drag onto another view's edge to pair the two in a new row/column, move across containers, or insert. Each leaf shows a glyph of its mark type.

Core: spec-restructure.wrapViews (wrap, with flatten-to-insert, collapse, and data-pin invariants) and spec-insert.moveViewTo; the editor applies every drag as one undoable edit via AppStore.composeRequest, keeping the editor the single text source.
2026-06-29 14:25:31 +03:00
oleh 57604a80a6 Editor: composition structure wireframe (read-only) 2026-06-29 12:39:59 +03:00
oleh 345ecef5a3 Docs: explore visual composition editing (wireframe + on-chart overlay) 2026-06-29 12:39:40 +03:00
oleh 4d1825b5ff Editor: cursor-scoped Add view and reorder for composition views 2026-06-29 11:06:56 +03:00
oleh 01df58acf1 Editor: field hints show the column's raw data type, not the encoding type 2026-06-29 11:06:37 +03:00
oleh 8aa05e503d Inspector: live data updates under interactive selections 2026-06-29 09:58:32 +03:00
oleh 6656811b8e Editor: view-scoped Extract-to-Dataset for inline and self-defined data 2026-06-29 02:08:59 +03:00
oleh 8cad80f738 Inspector: multi-view data inspection with a per-table view picker 2026-06-28 22:16:59 +03:00
oleh a75ea5b59e Editor: view-scoped data context — per-view dataset columns in hints and transforms 2026-06-28 20:54:46 +03:00
oleh e69430834a Core: classify spec data blocks by Vega-Lite fidelity (spec-data) for dataset refs 2026-06-28 19:48:24 +03:00
oleh 31458114fb Editor: spec transforms (wrap/simplify/add-view) and dataset-aware hints 2026-06-28 16:56:20 +03:00
oleh 20e70bee0e Learn: per-lesson URLs, a :::data shared-dataset construct, and a linked-views deep dive 2026-06-28 12:34:30 +03:00
oleh fd5c51a761 Copy: state the AI-free stance as a confidentiality benefit; record the exploration 2026-06-27 23:11:20 +03:00
oleh 0c592fa81e Plan: add arch 11 (Learning Section) to the reference table 2026-06-27 22:38:57 +03:00
oleh 64977f961b Docs: field guide on embedding Vega-Lite in a live app 2026-06-26 23:17:00 +03:00
oleh fff7ae98f2 Plan: mark M0–M6 complete, replace milestone detail with a post-M6 backlog 2026-06-26 23:15:55 +03:00
oleh 43d3b480d9 Copy: pare product claims to what we can certify, cut rule-of-three cadence, record arch 10 §10 2026-06-26 23:09:47 +03:00
oleh c19857b0a7 Learn: a /learn/ deep-dive section — markdown lessons as before/after spec progressions 2026-06-25 12:02:39 +03:00
oleh c6ca988e40 Tests: drop change-detector component tests 2026-06-25 01:08:56 +03:00
oleh 2dce270ac7 About: acknowledge the projects Astrolabe is built on and shaped by 2026-06-25 01:08:24 +03:00
oleh d76a7a5014 Theme Builder: accordion panels across the full config surface, vertical-tab nav, reflective gallery 2026-06-21 17:14:58 +03:00
oleh 318a0919c6 Support: add a feedback email, rebrand from Donate, tighten privacy copy 2026-06-21 01:46:19 +03:00
oleh ae9d897e50 Pin Node 22 for Cloudflare Pages builds (.nvmrc) 2026-06-20 23:00:06 +03:00
oleh be8cfc402d Chart Builder: open a snippet in the builder to edit it in place 2026-06-20 12:36:37 +03:00
oleh efb5a9bbe0 Data inspector: input/resolved rows below the chart, with a resizable divider
A collapsible Data panel under the Live Preview and Chart Builder charts shows the rows the chart actually uses, switching between Input (parsed source) and Resolved (post-transform) views read from the live Vega view. Collapsed by default; the open-state and a draggable height divider persist.

Rows come through a new RenderHandle.inspectData() accessor, so no component touches the view: core/result-data picks the most-upstream source and most-downstream result from the compiled dataflow, read lazily. The divider reuses the window-splitter pattern (horizontal variant).

Consolidations: a shared DataTable primitive replaces the inspector's and the builder's duplicate read-only tables; useResizeDrag merges the col/row drag-gesture twins.

Docs: spec 04/06 and arch 05/10 updated; the now-shipped exploration memo removed.
2026-06-18 02:22:03 +03:00
oleh 223646398e Landing: add marketing page at /, move the app to /app/
Multi-page Vite build: index.html serves a new standalone landing
(src/landing), app/index.html serves the app at /app/. The PWA service
worker and manifest are scoped to /app/, so the landing stays
uncontrolled and always-fresh; hash view-state routing is unchanged.

The landing reuses src/core and the chart-renderer service only (never
stores/orchestration/modals/components) and lazy-loads Vega. Its demos
drive the real core: a hero snippet switcher over CHART_EXAMPLES, an
interactive Chart Builder over a new profiled core fixture
(sample-dataset), and a Theme Builder gallery with three from-scratch
custom themes plus built-in presets.
2026-06-17 16:43:01 +03:00
oleh d8a7bcb7c1 Fonts: carry uploaded faces through export/import + embed in SVG export 2026-06-16 23:52:16 +03:00
oleh 2ed9db3792 Persistence: share entity write-through helper; normalize quota at db.put 2026-06-16 23:06:37 +03:00
oleh 778b4d848a Donate: redirect to Ukraine's defense (savelife.in.ua) 2026-06-16 23:05:05 +03:00
oleh 96a3e121eb PWA: iPad apple-touch-icon for home-screen install 2026-06-16 23:04:17 +03:00
oleh a997a862b9 Docs: log remaining theming/builder follow-ups + entity-persistence consolidation candidate 2026-06-16 21:44:53 +03:00
oleh a833e019d6 Skills: eng-council consult leads with need/laziest-rung; alignment flags known-ceiling shortcuts 2026-06-16 21:44:43 +03:00
oleh 5d3aba608a Chart theming: user font upload (FontFace-from-IndexedDB) + variable-font weight support 2026-06-16 21:41:04 +03:00
oleh 713f396c5c Docs: trim arch 05 debounced-renderer sketch to its generation-guard insight 2026-06-15 00:51:30 +03:00
oleh 66c123e15e Docs: move point-in-time records to exploration/, trim build-narration, lift open items to plan 2026-06-14 23:58:06 +03:00
oleh de9dbf3ec8 Docs hygiene: enforce in /alignment, add eng-council Documentation seat and beyond-scope notes 2026-06-14 23:57:39 +03:00
oleh 6fc8c29b50 Image export: surface rasterize/serialize failures instead of reporting 'not ready' 2026-06-14 20:39:10 +03:00
oleh 91b8b1e7fe Theme Builder: Layout/Axes/Legend/Type panels, scheme-render fix, fail-loud gallery 2026-06-14 13:08:29 +03:00
oleh b03c3b08ab Chart fonts: self-hosted roster + document.fonts.load render gate 2026-06-14 13:08:16 +03:00
oleh df6a0b3845 ColorField: shared color-input primitive, Theme Builder + Chart Builder migration 2026-06-14 11:02:20 +03:00
oleh 236b1c8a37 Chart tooltip: app-owned token styling, drop vega-tooltip's default sheet 2026-06-14 01:25:58 +03:00
oleh e4d1466ab0 Theme Builder: structured color/type controls, scheme catalog, diverging preview 2026-06-14 01:25:44 +03:00
oleh 0470389b41 Chart builder: intent front door, Heatmap mark, role-aware guidance 2026-06-13 12:08:11 +03:00
oleh 4e5108f434 Snippet naming: content-derived on publish, frozen on explicit rename 2026-06-13 10:13:57 +03:00
oleh 92bfe888b5 UX second pass: icon-only header, pane-toggle cue, schema columns, facet cleanup 2026-06-13 10:13:40 +03:00
oleh e0806bf3db Quiet fields: base.css field baseline, --field tokens, 3:1 border-strong, app-wide migration 2026-06-13 00:06:33 +03:00
oleh ebdeac7747 Docs: park border-identity question and UX follow-ups for batched council 2026-06-12 23:13:37 +03:00
oleh b8f0b97f22 Chart builder: equal shelf heights, pill floor, flat field rows, scroll affordance 2026-06-12 23:13:26 +03:00
oleh 7d4906ec38 Control scale: Button/IconButton primitives, two-height tokens, app-wide migration 2026-06-12 23:13:13 +03:00
oleh af9cc8a716 Docs: build hash grammar, theme rollback, reference-identity change detection, option-list boundary rule 2026-06-12 21:53:42 +03:00
oleh 5fe5aed50f Process: session wrap-up protocol — doc-update, then clean-context review subagents 2026-06-12 21:48:29 +03:00
oleh d1ba921141 SelectControl: 32px trigger scale + option-group divider in the theme picker 2026-06-12 21:46:53 +03:00
oleh ca70b3e491 Chart builder: discoverable entry points — Build Chart door, dataset picker, no-datasets state 2026-06-12 21:46:25 +03:00
oleh dbb4522d78 Workspace transfer: custom themes ride the export/import envelope 2026-06-12 21:45:44 +03:00
oleh 80d13c9b6f Prettier: reflow visual-specimen.html 2026-06-12 19:46:46 +03:00
oleh 331b0a31f5 Eng-council: alignment checks from sweep findings + metrics baseline 2026-06-12 19:46:38 +03:00
oleh 9a8b44380d Services: delete dead RelationshipService; rename persistence to snippet-persistence 2026-06-12 19:46:14 +03:00
oleh 538882b342 Modal system: break import cycles — component map moves to the shell 2026-06-12 19:45:50 +03:00
oleh 91b6e102eb Pane handles: extract shared useColResizeDrag pointer gesture 2026-06-12 19:42:24 +03:00
oleh 20d593a6a3 Popovers: extract shared usePopover hook; SettingsPopoverStore becomes PopoverStore 2026-06-12 19:40:35 +03:00
oleh 0e225d7d5c Eng-council sweep: export hygiene, dead code, helper dedup, declare vega-expression 2026-06-12 19:39:54 +03:00
oleh f26ac66633 Skills: eng-council — evidence-grounded structural review with deletion bias 2026-06-12 18:54:40 +03:00
oleh 887de7412e Docs: new-entity persistence stack, modal size tiers, spec anchor stability, test harness notes 2026-06-12 18:16:34 +03:00
oleh 0baac3c64b Editor: Extract Config to New Theme as a third Config action 2026-06-12 18:16:15 +03:00
oleh b193464f55 Chart theming: custom named themes + Theme Builder 2026-06-12 18:15:54 +03:00
oleh 44a601affd Chart theming: selectable chart theme + spec↔config merge/extract 2026-06-12 16:48:48 +03:00
oleh fe9d588103 Sort control: open with focus on the checked option, not the first 2026-06-12 14:45:45 +03:00
oleh ed66fe9c05 Chart builder: SelectControl pickers, channel chooser, per-type aggregates 2026-06-12 14:45:31 +03:00
oleh 4dcff4601d Chart builder: field-first shelf + value-or-field channels 2026-06-11 23:56:40 +03:00
oleh 9ebe398e75 Onboarding: re-fit container-width thumbnails on resize 2026-06-11 19:28:27 +03:00
oleh 1de8682b61 Datasets: make preview scroll region keyboard-reachable 2026-06-11 19:28:12 +03:00
oleh 2a0b4794df Chart builder: fold render diagnostic behind a disclosure 2026-06-11 19:27:03 +03:00
oleh 181b9da8ab Datasets: URL→inline conversion drops url/fetchedAt 2026-06-11 19:26:47 +03:00
oleh fe2b039698 Remote datasets: cap fetch body size 2026-06-11 19:21:51 +03:00
oleh 983c052f3b Chart builder: escape ./[/] in built field names 2026-06-11 19:21:28 +03:00
oleh d666599a58 Chart builder: drop unparseable expressions mid-edit, polite glyphed inline feedback 2026-06-11 16:08:03 +03:00
oleh 05df0cd7d3 Chart builder: filter/calculate transforms, data preview, and inline expression validation 2026-06-11 13:01:23 +03:00
oleh 1791ee9f8d Per-chart export: copy/download spec and PNG/SVG from the preview header 2026-06-10 18:30:31 +03:00
oleh cad19445b0 Add matter-of-fact comment/doc voice rule to alignment and doc-update skills 2026-06-10 17:11:15 +03:00
oleh 62d0697f0e Chart builder: data-aware defaults, one-click hint fixes, canvas preview, fullscreen modal 2026-06-10 17:10:18 +03:00
oleh 68a044752f Refine header emphasis, field-on-layer treatment, and narrow-pane control collapse 2026-06-10 14:14:02 +03:00
oleh 2410c6e965 Snapshot URL datasets locally on add; preview tabular data as a table 2026-06-10 10:24:42 +03:00
oleh eb5e7ac53a Add vega/lyra review notes for chart-builder ideas 2026-06-10 10:07:10 +03:00
oleh 0b8c1785fe Capture the monetization & sync exploration as a standing memo 2026-06-10 01:33:24 +03:00
oleh bc23f15c98 Add a standing manual-verification QA checklist for what tests can't cover 2026-06-10 01:33:17 +03:00
oleh 54d68af7e0 Prune resolved seating notes from the council skill and generalize the backfill rule 2026-06-10 01:33:10 +03:00
oleh a5e5d1a2ad Ship PWA app icons and correct the manifest theme color 2026-06-10 01:32:52 +03:00
oleh 7599acd25e Redesign the Storage Monitor as a storage-composition breakdown (snippets · datasets · app) 2026-06-10 01:32:22 +03:00
oleh e7de0cbb8a Mark M4 (Chart Builder) and M5 (Settings + Import/Export) done in the plan 2026-06-09 23:54:32 +03:00
oleh 3c053310ac Re-split library and preview when the editor is hidden; remember the editor's width 2026-06-09 23:54:20 +03:00
oleh 418bf23cd8 Fix documentation drift surfaced by the full-docs consistency review 2026-06-09 16:51:43 +03:00
oleh 0a652cf04b Remove the stale spec-implementation audit (superseded by tests + the live spec) 2026-06-09 16:50:28 +03:00
oleh 29b0d1adb0 Codify the spec-vs-playbook boundary: cite behavior, don't restate it 2026-06-09 15:02:12 +03:00
oleh 81f563a3e7 Replace the first-run placeholder seed with an onboarding canvas 2026-06-09 14:03:47 +03:00
oleh 7d247e8d2c Track datasetRefs against the live draft so manual edits and extract link immediately 2026-06-07 23:54:01 +03:00
oleh cdd5cf149f Emit pane aria-controls only while the pane is mounted 2026-06-07 23:11:32 +03:00
oleh 1d7798abc5 Serialize live-preview renders to prevent concurrent embeds (M3) 2026-06-07 23:08:56 +03:00
oleh 5ea2a0d038 Make DatasetStore the collision-free id authority 2026-06-07 23:05:51 +03:00
oleh 1cad9ba140 Extract reverse-lookup scan to core/relationships (one shared impl) 2026-06-07 23:04:20 +03:00