Conversation
added 30 commits
April 3, 2026 11:05
Made-with: Cursor
Made-with: Cursor
…#75) Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
…efs #75) Made-with: Cursor
Made-with: Cursor
… plan (refs #75) Made-with: Cursor
… (refs #75) Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
…type Made-with: Cursor
…hook Made-with: Cursor
Made-with: Cursor
… API - Add ContainerPoint/ContainerDelta, WorldPoint/WORLD_ORIGIN, ClientPoint - Camera: pan getter, panBy, containerToWorld; constructor uses position config - Extract applyCameraTransformToCanvas; hex/renderers use WorldPoint centers - Share pointer pan session between canvas InputManager and SVG hooks - Document rendering/canvas architecture; fix drift (pan vs position, panBy, apply helper)
- Rename PointerPanZoomSession methods (beginLeftButton, onClientMove, endLeftButton) - Move cursor styling to session.cursorStyle(); internalize CAMERA_INTERACTION - Add clientToContainerPoint helper; use mouse button constants - Update tests; drop redundant ContainerToWorldFn JSDoc in useCameraControls
- Add factories/brands for ClientPoint/ClientDelta, ContainerPoint/ContainerDelta, WorldPoint - PointerPanZoomSession: ClientDelta threshold and between(); bind maps to Container* for Camera - HexUtils/Camera return WorldPoint.xy; stories and SvgGameView use typed constructors - Sync rendering + canvas ARCHITECTURE; tidy useCameraControls import
…ransform - Add common/camera/CameraSnapshot; drop svg/cameraSnapshot and applyCameraTransform.ts - CanvasController applies center→rotate→scale→pan on Context2D; DebugStats.camera is CameraSnapshot - DebugOverlay reads camera.position; update tests and common README - Architecture: canvas hooks folder, CameraSnapshot in cross-links; components ARCHITECTURE note - README: 2026-04-06 journal entry
Made-with: Cursor
- useCanvasControllerDebugStats: relative import for CameraSnapshot - useGameSnapshotBridge: shorter interface and hook JSDoc - PointerPanZoomSession: rename internal client fields to *Point; onZoom param zoomDelta - canvas/ARCHITECTURE: align bridge + debug stats with CameraSnapshot and useCanvasControllerDebugStats
Made-with: Cursor
Made-with: Cursor
added 25 commits
April 6, 2026 19:25
- Remove DEV console.table from SvgBoard - useCameraControls: satisfies CameraSnapshot/readTransform/containerToWorld - useSvgBoardInteraction and tests: satisfies UseCameraControlsCallbacks
- Return CameraSnapshot as camera; rename ref model binding to cameraModel in listener setup - SvgGameView: pass hook camera to SvgBoard; drop redundant useMemo snapshot - Tests and rendering ARCHITECTURE hooks section updated
- Camera clones CameraSnapshot in ctor; pan/zoom/rotation getters; reset restores default - Add DEFAULT_CAMERA_SNAPSHOT; CanvasController and tests use it for construction and debug defaults - useCameraControls/useCanvasControllerDebugStats: DRY initial empty state - Docs: rendering + canvas ARCHITECTURE, common README; JSDoc on Camera and default snapshot
- CameraSnapshot as Readonly<>; document replace-whole-object convention - Camera panBy/zoomBy/rotateBy/reset assign new snapshot; reset clones default - Sync rendering + canvas ARCHITECTURE and common README
…refs #75) Made-with: Cursor
#75) Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
- Extract world transform + Q/E rAF into SvgBoardCameraShell; SvgGameView composes it - SvgBoard: board + ref only; shell sets world g transform via setAttribute - Storybook uses shell (same surface as game); restore svgBoardWorldTransform helper - Update architecture docs Made-with: Cursor
…string (refs #75) - SvgBoardCameraShell: cameraSnapshotRef + windowInputCallbacks required; drop svgBoardWorldTransform module - SvgBoard: data-world-transform-group on world <g> - Stories: sync camera ref in useLayoutEffect (eslint refs) - Docs: architecture wording Made-with: Cursor
Rotate snapshot position opposite the applied rotation delta so continuous Q/E rotation preserves the world point under the same screen pixel. Made-with: Cursor
…cators - Mark approved tasks with `[X]` to indicate completion and approval. - Clarify movement of `approved/<branch>` tag only upon user approval of the specific commit. - Ensure that if the latest commit is approved, all previous commits are also considered approved.
Eliminate the cross-hook containerToWorld ref bridge by wiring camera-first callbacks and passing containerToWorld into hover handling directly. Made-with: Cursor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
"## Track\n\nConductor:
conductor/tracks/dual_rendering_engines_20260403/plan.md— GitHub #75\n\n## Status (high level)\n\n- Phase 1–2 done: SVG surface (SvgGameView,SvgBoard,SvgBoardCameraShell), shared pointer path (useSvgBoardPointerCamera,useSvgBoardInteraction,cameraInteraction),CameraSnapshot/cameraTransforms.\n- Phase 3 gate closed (maintainer review).\n- Phase 4 in progress: window-level input viauseSvgWindowInput(fromSvgBoardCameraShell), continuous camera rotation via rAF + world<g>transform,useSvgGameViewLayout. F3 overlay, extra tests, and phase gate remain inplan.md.\n- Phases 5–7 (settings, dual engine, E2E) still open.\n\nApproval pointer:approved/worker1→2579ca6(pre-push:typecheck,test:unit:raw,test:ui:raw).\n\n## Review\n\nDraft for GitHub / Reviewable. E2E still assumesgame-canvasin places while the app may usegame-svg— expect CI e2e gaps until Phase 7.\n\n## Issue\n\nCloses / tracks: #75\n\nMade with Cursor\n"