Commit Graph

43 Commits

Author SHA1 Message Date
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 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 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 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 9a8b44380d Services: delete dead RelationshipService; rename persistence to snippet-persistence 2026-06-12 19:46:14 +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 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 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 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 62d0697f0e Chart builder: data-aware defaults, one-click hint fixes, canvas preview, fullscreen modal 2026-06-10 17:10:18 +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 7599acd25e Redesign the Storage Monitor as a storage-composition breakdown (snippets · datasets · app) 2026-06-10 01:32:22 +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 800a313be2 Add snippet-library search, sort, empty states, storage monitor (M6, §02/§09D) 2026-06-07 20:00:40 +03:00
oleh 9f7bf27b7a Add compact JSON formatter with format-on-paste (§03A) 2026-06-07 18:45:17 +03:00
oleh f92118712c Add storage-estimate core and adapter (M6 Storage Monitor groundwork)
Portable summarizer (clamped fraction, ok/warning/critical level, availability
flag, humanizeBytes) with the browser StorageManager.estimate() feature-detect
isolated to the infrastructure adapter. No UI consumer yet — core-first per the
AI developer protocol; the Storage Monitor panel (spec §02) wires to it next.
2026-06-07 17:14:07 +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 c11afc273d Add Chart Builder: no-JSON Vega-Lite composer from a dataset (M4) 2026-06-05 23:46:21 +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 ad239d7d49 Show size and a draft indicator in snippet-library rows 2026-06-05 14:11:00 +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 939950b136 Add ESLint + pre-commit hook and fix the issues it surfaced 2026-06-05 01:42:42 +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 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