4.3 KiB
4.3 KiB
id, title, status, wave, depends_on, plan, requirements, acceptance_criteria, system_design
| id | title | status | wave | depends_on | plan | requirements | acceptance_criteria | system_design | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 02-enable-plan-resizing | Enable resizing in editable Plan view | done | 2 |
|
plan.md |
|
|
|
Task 02: Enable Resizing in Editable Plan View
Summary
Enable TipTap's native table-column drag behavior in the live Plan panel on desktop fine-pointer layouts. Keep widths ephemeral and source-preserving, and remove the resize plugin when the viewport or pointer capability becomes ineligible.
In scope
- Configure live Plan
Tableextensions with responsive resizing, a 64-pixel minimum, and internal boundaries only. - Recreate the editor from parent draft Markdown when resize capability changes.
- Add Plan-scoped wrapper, handle, cursor, and overflow CSS.
- Add focused desktop and Mobile Chrome Plan table E2E coverage.
Out of scope
- Changing read-only revision previews or comparison dialogs.
- Persisting ProseMirror
colwidthattributes. - Replacing TipTap's table plugin with a custom resize engine.
- Adding Plan table authoring, row, or column management commands.
Acceptance
- A desktop Plan table supports internal-boundary drag, enforces the 64-pixel minimum, and remains contained by its local table wrapper.
- Width-only editor state never changes persisted plan Markdown and clears after reload or capability loss without losing current draft text.
- Mobile and coarse-pointer Plan layouts expose no resize affordance, keep table content readable, and cause no document horizontal overflow.
Verification
(cd apps && pnpm install --frozen-lockfile)
(cd apps && pnpm --filter @kandev/web exec vitest run \
lib/markdown/table-resize.test.ts \
components/editors/tiptap/tiptap-plan-editor.test.tsx)
(cd apps/web && pnpm run typecheck)
(cd apps && pnpm --filter @kandev/web exec eslint \
components/editors/tiptap/tiptap-plan-editor.tsx \
e2e/tests/task/plan-table-resize.spec.ts \
e2e/tests/task/mobile-plan-table-resize.spec.ts)
(cd apps/web && pnpm e2e:run tests/task/plan-table-resize.spec.ts)
(cd apps/web && pnpm e2e:run --project mobile-chrome tests/task/mobile-plan-table-resize.spec.ts)
git diff --check
Files likely touched
apps/web/components/editors/tiptap/tiptap-plan-editor.tsxapps/web/components/editors/tiptap/tiptap-plan-editor.test.tsxapps/web/app/globals.cssapps/web/e2e/tests/task/plan-table-resize.spec.tsapps/web/e2e/tests/task/mobile-plan-table-resize.spec.ts
Dependencies
- Task 01 establishes the target cross-surface responsive contract and completes shared rendered-preview integration before the editor-specific variant.
Risks
useEditorrecreation must use current parent draft content or it can discard unsaved text on a responsive capability transition.- TipTap's mounted
colwidthattributes must stay absent from serialized and persisted Markdown. - ProseMirror handle classes are generated by the pinned table dependency, so styles and selectors must remain Plan-scoped.
Parallelism
sequential
Inputs
docs/specs/ui/requirements/resizable-markdown-tables.mddocs/specs/ui/system-design/resizable-markdown-tables.md- TipTap 3.19
Tableand ProseMirror tables 1.8.5 resize contracts installed by the workspace lockfile - Existing mobile Plan entry in
apps/web/components/task/mobile/session-mobile-layout.tsx
Results
Enabled TipTap's table resize plugin only on desktop fine-pointer layouts, with
the shared 64-pixel minimum, internal-boundary behavior, Plan-scoped overflow
and handle styles, and editor recreation when resize capability changes. Draft
Markdown survives that recreation, while transient colwidth state remains
absent from serialized and persisted Markdown.
Validation completed 2026-08-24:
- Focused Vitest suite: 10 tests passed.
- Web typecheck and scoped ESLint: passed.
- Desktop Plan table Playwright suite: 1 test passed, including the autosave window.
- Mobile Chrome Plan table Playwright suite: 1 test passed.
git diff --check: passed.