You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/restart-plan/README.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# DeepNotes Restart Plan — Index
2
2
3
-
> **Last updated:** 2026-05-31 (Phase 6 re-evaluated. Status corrected from "Complete" to "In Progress". See `phase-6-spatial-polish.md` and `SPATIAL_PARITY_CHECKLIST.md` for details. Phase 9 pending.)
3
+
> **Last updated:** 2026-05-31 (Phase 6 in progress. `useSpatialEditing`, `bringToTop`, line-body arrow geometry, and `useSpatialKeyboard` extracted. See `phase-6-spatial-polish.md` and `SPATIAL_PARITY_CHECKLIST.md` for details. Phase 9 pending.)
4
4
> **This document replaces `docs/RESTART_PLAN.md`.** If a prior statement conflicts with this one, this version wins.
5
5
6
6
---
@@ -86,12 +86,12 @@ A criterion is **not met** until the verification command or check passes in CI.
86
86
-**Note drag `Teleport` overlay fixed.** Overlay now applies `scale(zoom)` and uses `posOverride` so the preview tracks the cursor correctly at all zoom levels.
87
87
-**Page state screens exist but 4 states are indistinguishable.**`page-deleted`, `group-deleted`, `invited`, `rejected` all map to the same generic error UI because the API does not return distinct error codes.
88
88
-**Context menu exists for canvas but not for individual notes.**`CanvasContextMenu.vue` (right-click on empty canvas) is implemented. No per-note context menu exists.
89
-
-**Arrow geometry is oversimplified.**New `DisplayArrow.vue` uses center-point math. Legacy had rectangle-edge intersection for `bodyType === 'line'`, interregional coordinate transforms, and `fakePos`/`looseEndpoint` rendering.
89
+
-**Arrow geometry partially fixed.**`DisplayArrow.vue`now uses rectangle-edge intersection for `bodyType === 'line'` via `arrow-geometry.ts`. Interregional coordinate transforms and `fakePos`/`looseEndpoint` rendering remain missing.
90
90
-**No `PageElem` abstraction.** Legacy notes and arrows inherit from `PageElem`, sharing selected/active/editing/visible/region state. New code treats them as completely separate types.
91
-
-**No `editing` state management.**Legacy tracks which element is being edited, stopping editing when clicking elsewhere. New relies on Tiptap's internal focus, which can lead to conflicting edits.
91
+
-**`editing` state management implemented.**`useSpatialEditing.ts` tracks which note/arrow is being edited. Escape stops editing; canvas click stops editing; Delete/Backspace is suppressed while editing to avoid deleting selected elements.
92
92
-**Container rendering lacks legacy depth.**`stretchChildren`, `wrapChildren`, `originOffset`, and overflow detection are in the model but not enforced in rendering. Spatial vs non-spatial container distinction is not fully implemented.
93
-
-**`SpatialPageView.vue`is a 1,070-line god component.**Legacy distributed responsibility across `Page`, `PageNotes`, `PageArrows`, `PageSelection`, `PageCamera`, `NoteDragging`, `NoteResizing`, etc. The monolithic component violates the spirit of the "No composable > 300 lines" success criterion.
94
-
-**Selection lacks legacy depth.**No `bringToTop` on selection, no formatting integration across selected editors, no active element/region meaningful UI or keyboard navigation. `selectAll`only selects root notes, not descendant arrows.
93
+
-**`SpatialPageView.vue`partially refactored.**Keyboard shortcuts (~150 lines) extracted to `useSpatialKeyboard.ts`. Still a large component; further extraction needed for drag, resize, box-select, and arrow-reconnection logic.
94
+
-**Selection partially improved.**`bringToTop`zIndex bump on selection is now implemented. Formatting integration across selected editors, active element/region keyboard navigation, and `selectAll`including descendant arrows remain missing.
95
95
-**Missing floating UI:** back/forward nav, screenshot, user avatars on canvas.
Copy file name to clipboardExpand all lines: docs/restart-plan/phase-6-spatial-polish.md
+9-7Lines changed: 9 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,7 @@
1
1
# Phase 6: Spatial canvas polish
2
2
3
3
> **Prerequisites:** Phase 5 done.
4
-
> **Status:** In progress (2026-05-31 — status corrected after evaluation. Multiple "Done" items were over-reported; see notes below.)
4
+
> **Status:** In progress (2026-05-31 — `useSpatialEditing`, `bringToTop`, line-body arrow geometry, and `useSpatialKeyboard` extracted since last evaluation. Multiple "Done" items were over-reported; see notes below.)
5
5
6
6
---
7
7
@@ -20,6 +20,8 @@ Achieve parity with the legacy `/pages/:pageId` immersive spatial canvas experie
| Select all (`Ctrl+A`) |**Done**|`onKeyDown` in `SpatialPageView.vue`|
22
22
| Active element / active region tracking |**Partial**|`useSpatialSelection` has `activeId` and `activeRegionId` ref but no real active-region UI or keyboard navigation |
23
+
|`bringToTop` on selection |**Done**|`useSpatialSelection` bumps selected note `zIndex` above other selected notes |
24
+
|`editing` state management |**Done**|`useSpatialEditing.ts` tracks editing note/arrow; Escape and canvas click stop editing; Delete suppressed while editing |
23
25
24
26
### 2. Containers
25
27
| Item | Status | Notes |
@@ -81,12 +83,12 @@ Achieve parity with the legacy `/pages/:pageId` immersive spatial canvas experie
81
83
| Item | Status | Notes |
82
84
|------|--------|-------|
83
85
| Curve body (`CurveArrow.vue`) |**Done**| Quadratic bezier with perpendicular offset; `bodyType === 'curve'`|
84
-
| Line body (`LineArrow.vue`) |**Done**| Straight line when `bodyType === 'line'`|
86
+
| Line body (`LineArrow.vue`) |**Done**| Straight line when `bodyType === 'line'`; rectangle-edge intersection via `arrow-geometry.ts`|
| Drag-to-reconnect |**Done**| Connection zones + `onReconnectPointerMove/Up` in `SpatialPageView.vue` wired |
89
-
| Arrow source/target anchor positioning |**Done**|`DisplayArrow.vue` geometry now uses `sourceAnchor`/`targetAnchor` when provided |
91
+
| Arrow source/target anchor positioning |**Done**|`DisplayArrow.vue` geometry uses `sourceAnchor`/`targetAnchor` when provided; line body falls back to rectangle-edge intersection|
90
92
| Color matching note color logic |**Partial**| Same hardcoded 10-color map used, but `inherit` logic may not cascade correctly for arrows |
91
93
92
94
### 9. Find and replace
@@ -108,7 +110,7 @@ Achieve parity with the legacy `/pages/:pageId` immersive spatial canvas experie
108
110
109
111
## Verification
110
112
111
-
-[ ] Each deliverable has a test (unit, component, or integration). **Major gaps remain:**`DisplayNote.vue` (only basic render tests), `DisplayArrow.vue` (no tests), `SpatialPageView.vue` (no component/integration tests), drag/resize interaction tests, box selection tests, arrow creation/reconnection tests, sidebar/toolbar integration tests.
113
+
-[ ] Each deliverable has a test (unit, component, or integration). **Partially improved.** New tests: `arrow-geometry.test.ts` (5 tests), `useSpatialEditing.test.ts` (4 tests). Major gaps remain: `DisplayNote.vue` (only basic render tests), `DisplayArrow.vue` (no component tests), `SpatialPageView.vue` (no component/integration tests), drag/resize interaction tests, box selection tests, arrow creation/reconnection tests, sidebar/toolbar integration tests.
112
114
-[ ] Phase 1 checklist is >80% marked done. **NOT MET.** Strict enforcement of the checklist's "Done = implemented + passing test" rule drops the true completion rate well below 80%.
113
115
114
116
---
@@ -121,11 +123,11 @@ Achieve parity with the legacy `/pages/:pageId` immersive spatial canvas experie
121
123
-[x]`PageEditorView.vue` renders as a full-screen immersive shell (no scrolling card page).
122
124
-[x] All 8 dedicated page-state screens exist and are reachable. (`page-deleted`/`group-deleted`/`invited`/`rejected` are indistinguishable without richer API error codes.)
123
125
-[ ]`DisplayNote.vue` matches legacy note visuals. **PARTIAL.** Colors use hardcoded 10-color map instead of legacy `colorNameToColorHex` with `lightenByRatio`. Drop zones, arrow handles, and frame styling are simplified. No custom scrollbar handling.
124
-
-[ ]`DisplayArrow.vue` supports full legacy arrow behavior. **PARTIAL.** Curve/line bodies and heads work, but line body lacks rectangle-edge intersection, interregional arrows don't transform coordinate spaces, and`fakePos`/`looseEndpoint` are not rendered.
126
+
-[ ]`DisplayArrow.vue` supports full legacy arrow behavior. **PARTIAL.** Curve/line bodies and heads work; line body now has rectangle-edge intersection. Interregional arrows don't transform coordinate spaces;`fakePos`/`looseEndpoint` are not rendered.
125
127
-[x]`MainToolbar`, `LeftSidebar`, `RightSidebar`, and `TableContextMenu` are implemented as standalone shadcn components and visible on `/pages/:pageId`.
126
128
-[x] Sidebar panels (`RecentPages`, `FavoritePages`) display real data from API.
127
129
-[x] Arrow geometry reads actual note heights instead of hardcoding `80px`.
128
-
-[ ]`SpatialPageView.vue` is refactored to avoid god-component anti-pattern. Currently 1,070 lines.
129
-
-[] Selection implements `bringToTop`, formatting integration, and active element/region navigation.
130
+
-[ ]`SpatialPageView.vue` is refactored to avoid god-component anti-pattern. Keyboard shortcuts extracted to `useSpatialKeyboard.ts`; drag, resize, box-select, and arrow-reconnection logic still inline.
131
+
-[x] Selection implements `bringToTop`. Formatting integration and active element/region navigation remain missing.
130
132
-[ ] Container rendering enforces `stretchChildren`, `wrapChildren`, and spatial vs non-spatial layout modes.
131
133
-[ ] Manual QA session with 3+ users finds no blocking usability issues.
0 commit comments