6 Commits

Author SHA1 Message Date
Ilya Ashikhmin
701ed61a82 fix(icons): emit valid single-fill SVG so node icons render as image resources
Icon markup had duplicate 'fill' attributes (white body + stroke's fill:none on
one element). Inline SVG parses leniently, but as an <image>/<img> data-URI the
SVG is parsed as strict XML where duplicate attributes are fatal, showing broken
icons on the canvas. Split fill into FILL/NONE/SOLID so each element declares
exactly one fill, and add width/height for intrinsic sizing.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 23:43:04 +02:00
Ilya Ashikhmin
d495401bc1 feat(ui): full React editor UI, IO, demo seed, and tests
- graphOps: paper-independent graph logic (add/connect/network/flow/serialize)
  so core is unit-testable in jsdom; CanvasController delegates to it
- App shell: toolbar, node palette (grouped/searchable/draggable), tabbed
  properties + configuration panels, status bar with calc summary
- PropertyField editors for all 8 property types with validation
- Keyboard shortcuts (undo/redo/copy/cut/paste/dup/select-all/delete/zoom)
- Document IO (Tauri dialog+fs with browser download/upload fallback), SVG/PNG
- Demo network seeded on first launch
- Tests: 5 graphOps integration + 9 UI component (47 total)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 23:32:27 +02:00
Ilya Ashikhmin
ab5a5e1a15 feat(canvas): JointJS shapes + CanvasController engine
- PipelineNode custom element (card + SVG icon + medium-colored ports) and
  standard.Link with style-driven markers/dash
- CanvasController: paper/graph setup, relation-based validateConnection,
  manhattan routing + jumpover arc connector toggle, grid/snap, color scheme
- Selection (single/multi/shift), element & link tools, drop-to-add node
- Undo/redo via graph snapshots, copy/cut/paste/duplicate, zoom/pan/fit
- Flow calc integration + dash animation (direction=sign, speed=volume)
- SVG/PNG export from paper SVG root; document (de)serialization
- Zustand editor store (config, selection, catalogues, calc summary)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 23:21:09 +02:00
Ilya Ashikhmin
22ad8b3e0c feat(calc): add mock flow-distribution solver with tests
- Deterministic heuristic solver: topo sweep with downstream-demand-weighted
  splits at junctions, supply/demand conservation, cycle tolerance
- Reports per-edge signed flow, node inflow/imbalance, balance + warnings, maxFlow
- 8 unit tests: line, split, merge, equal-split, unbalanced, cycle, empty

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 23:13:31 +02:00
Ilya Ashikhmin
e28a0ef074 feat(model): add domain model — mediums, properties, catalogues, node/edge types
- Relation registry with medium & direction connection validation (canConnect)
- Color schemes (default/dark/blueprint/high-contrast) keyed by medium
- Typed property schema (string/int/float/enum/catalogueItem(s)/color/list)
  with grouping and pure coercion/validation
- Catalogues (pipes/pumps/materials) with item attributes
- Node type library with SVG icon set + port layouts
- Edge style presets with arrow/circle/diamond/bar marker specs
- 25 unit tests covering validation, coercion and lookups

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 23:11:42 +02:00
Ilya Ashikhmin
3758164635 chore: scaffold Tauri v2 + React + Vite project and add implementation plan
- Scaffold Vite React-TS frontend and Tauri v2 shell
- Install JointJS (@joint/core), Zustand, Vitest + Testing Library
- Configure Vite (fixed port 1420) and Vitest (jsdom, coverage)
- Add docs/plan with milestone checklist and JointJS rationale

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 23:07:28 +02:00