Commit Graph

35 Commits

Author SHA1 Message Date
oleh 2410c6e965 Snapshot URL datasets locally on add; preview tabular data as a table 2026-06-10 10:24:42 +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 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 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 1cad9ba140 Extract reverse-lookup scan to core/relationships (one shared impl) 2026-06-07 23:04:20 +03:00
oleh 39555322e4 Profile per-column cardinality and extent; add data-aware chart warnings (M4, A3/A4) 2026-06-07 23:03:17 +03:00
oleh dcb7037a71 Seat web.dev on the design council; record PWA backfill 2026-06-07 20:39:56 +03:00
oleh 30ff7ae357 Roll back import atomically on storage-quota failure (M6, §08) 2026-06-07 20:03:47 +03:00
oleh 800a313be2 Add snippet-library search, sort, empty states, storage monitor (M6, §02/§09D) 2026-06-07 20:00:40 +03:00
oleh 807d3c8e3c Add global keyboard EventRouter and unify publish (M6, §01D)
One module owns the document keydown listener and dispatches the shortcut map
(Cmd/Ctrl+Shift+N / +K / +S / +, / Escape), platform-aware, via the single-source
focus-utils interactive-context gate. Escape and Cmd/Ctrl+S run before the gate so
save works while editing; the rest are suppressed mid-typing. Publish + its toast
move into services/snippet-actions so the button and Cmd/Ctrl+S behave identically.
Removes the ad-hoc keydown handler from App and Monaco's Cmd+S command.
2026-06-07 17:18:55 +03:00
oleh f365258fcc Add URL hash view-state routing with Back/Forward and restore (M6, §01E)
The hash becomes the single serialized view (snippet / Datasets list / a dataset
/ new-dataset form / Chart Builder). url-hash is the sole reader/writer of
location+history (total, never-throwing parse; hash-only canonical URLs).
UrlStateSync grows from the modal↔URL seam into the full router: state→hash is
derived from the stores (so in-modal dataset sub-views reach the hash), hash→state
restores on load and on Back/Forward, validating ids and cleaning stale links.
startRouting() runs after store hydrate.
2026-06-07 17:18:10 +03:00
oleh 8c0a6b9239 Add pane show/hide toggle strip with persisted visibility (M6, §01A)
A persistent left-rail toolbar (APG toolbar + roving tabindex) toggles the
library / editor / preview panes; a hidden pane frees its space and the rest
redistribute proportionally to their remembered widths. Visibility persists to
astrolabe:ux-prefs (separate key from widths, so a hidden pane keeps its width).
Adds the positional pane-* glyph sub-family to Icon and a Datasets shortcut
button in the strip.
2026-06-07 17:15:58 +03:00
oleh 548aa199d9 Add distributed settings and workspace import/export (M5) 2026-06-07 15:51:00 +03:00
oleh 80bedd2a8d Add snippet metadata panel, duplicate, and immediate-load preview (M4.5) 2026-06-06 23:54:59 +03:00
oleh 3e89d9a531 Add shared Icon primitive and controlled glyph vocabulary (Carbon, filled) 2026-06-06 23:51:47 +03:00
oleh af9ee1e4c0 Add aggregation, binning, granularity, sort, and stacking to the Chart Builder
- Per-channel transforms: aggregate (sum/mean/median/min/max), quantitative
  bin, and temporal timeUnit granularity; bin and aggregate are mutually
  exclusive. A field-less "Count of records" measure (Voyager's count(*)).
- Chart-level sort (rank a categorical axis by its measure) and stacking
  (zero / 100% normalize), each shown only when it applies.
- Field type is a fixed N|O|Q|T segmented control with the column's invalid
  types disabled; SegmentedControl gains APG-correct disabled options.
- A crowded-category-axis warning (a raw measure drawing one mark per row over
  a large dataset) and a disabled-Create hint (says why it's disabled).
- Drop the Create success toast — the new snippet is immediately visible.
- Docs: spec §06, research-doc §8 backlog (incl. the cardinality/extent
  profiling TODO), architecture 01 (stable-selector rule) and 05 (builder-local
  preview), and a profiling breadcrumb.
2026-06-06 18:04:24 +03:00
oleh 693f5d7073 Fix dataset-ref walk false positive and wire spec-mandated success toasts
- Prune the data payload and top-level datasets keys in all three ref walks
  (extractDatasetRefs, renameDatasetInSpec, resolveDatasetRefs) so a data row
  carrying a field named "data" is no longer misread as a library reference,
  spuriously rewritten, or made to throw DatasetNotFoundError. Adds tests,
  including a guard that lookup-transform refs (from.data) still resolve.
- Wire the deferred success toasts now the Toaster has landed: publish, revert,
  extract-to-dataset, and snippet/dataset delete. Copy follows the council
  title-vs-message rule (title states the action, message adds the consequence).
- Reconcile the spec's blanket toast mandate to "toast only what the user can't
  already see": no toast on visible-result creates (snippet, dataset form);
  Copy Reference stays inline and gains an aria-live announcement (new shared
  .visually-hidden utility) instead of a toast-per-copy.
- Move the toast region to bottom-right so it stops covering the header action
  cluster (Publish/Revert, theme/datasets).
- Update docs/spec 01F/02/05 and docs/architecture/07 + 10 to match.
2026-06-05 16:34:58 +03:00
oleh a4e4d96d3b Add dataset library, extract-to-dataset, and render-time reference resolution 2026-06-05 15:49:40 +03:00
oleh 25849461e0 Reconcile visual specimen with the resolved status indicator and toggle 2026-06-05 14:11:05 +03:00
oleh da20475d2f Record council resolutions for Draft/Published toggle and status dot 2026-06-05 14:10:56 +03:00
oleh 29217aefcf Switch default accent to deep teal 2026-06-05 13:41:34 +03:00
oleh 3dd8187ee6 Document persistence failure-surfacing and overlay-store conventions 2026-06-05 13:07:55 +03:00
oleh 331ce93fb9 Record council backfill rules in the interaction contract 2026-06-05 12:58:59 +03:00
oleh 7b8115f623 Add design council skill and interaction-and-feedback contract 2026-06-05 12:33:00 +03:00
oleh c50f141d57 Add resizable panes with drag handles, min widths, and persistence 2026-06-05 10:46:07 +03:00
oleh 411bfbc6c2 Implement fit-mode rendering contract with container sizing and pane re-fit 2026-06-05 10:45:41 +03:00
oleh 7d7034ef1a Add in-app confirmation dialog replacing window.confirm 2026-06-05 02:28:37 +03:00
oleh 0c7297624e Format entire codebase with Prettier (mechanical, no behavior change) 2026-06-05 01:43:28 +03:00
oleh 22f0556ef8 Implement M1.5 visual design foundation: tokens, IBM Plex, theme toggle, chart themes 2026-06-05 01:29:10 +03:00
oleh 094e5f6e4e Add visual design language (IBM/Carbon-inspired) and schedule it as M1.5
Defines the visual contract before the design-application work, so M2+ build on settled tokens.

- docs/architecture/09-visual-design.md: principles + deliberate divergences (square chrome, free color/theming), token system (IBM Plex type, 8px spacing, role-based color, motion), component conventions, and a source-repo map for extending the research
- docs/architecture/visual-specimen.html: standalone kitchen-sink specimen with a live theme x accent switcher; doubles as the tokens.css sandbox
- IMPLEMENTATION-PLAN: new M1.5 'Visual design foundation' milestone, plus ground-rule/cross-cutting/reference wiring
- index links: 00-overview, CLAUDE.md, AGENTS.md (architecture playbook now 00-09)

Applying the design to the M1 surfaces is deferred to a separate session.
2026-06-05 00:25:11 +03:00
oleh ca54bb66b1 Implement M1 authoring loop: library, editor, live preview, persistence
M1 MVP from docs/IMPLEMENTATION-PLAN.md, with the /alignment pass applied.

- core: Snippet model + factory; prepareSpecForRender (copy-not-mutate); per-theme Vega chart config
- state/orchestration: SnippetStore with debounced auto-save; IndexedDB adapter + read-time migration; startup hydration + write-through persistence
- ui: SnippetLibrary, SpecEditor (Monaco edcore.main — full editor features, JSON-only languages), LivePreview
- build: Monaco/Vega manual chunks; raised PWA precache ceiling
- alignment: flush a valid draft on snippet switch (+regression tests); TODO breadcrumbs for the preview render race and the window.confirm delete
- housekeeping: gitignore .claude/projects/
2026-06-05 00:16:24 +03:00
oleh 056644450c Initial scaffold: spec, architecture playbook, and M0 skeleton 2026-06-04 22:14:33 +03:00