2.4 KiB
2.4 KiB
Flexible Container — Implementation Todos
Phase 1: Data Model & Types
- Add
ColumnDef,RowDef,FlexibleContainertypes toLayoutManager.ts - Add Zod schemas to
schemas.ts(ColumnDefSchema,RowDefSchema,FlexibleContainerSchema,AnyContainerSchema) - Update
PageLayout.containerstoAnyContainer[]union type - Add
rowId,columnfields toWidgetInstancefor cell placement - Add type guards (
isLayoutContainer,isFlexibleContainer,getLayoutContainers) - Add
findLayoutContainer(),findFlexContainer()narrowing helpers - Add
generateRowId(),addFlexibleContainer()methods - Fix all internal closures in
LayoutManager.tsto handleAnyContainer[]
Phase 2: Renderer Component
- Create
FlexibleContainerRenderer.tsx— CSS Grid row-based renderer - Integrate type-based dispatch in
GenericCanvas.tsx - Fix all downstream type errors (
UserPageEdit.tsx,GenericCanvas.tsx)
Phase 3: UI Integration & Add Button
- Quick-add buttons in
GenericCanvas.tsxempty state AddFlexContainerCommandincommands.ts(with undo)addFlexPageContainermethod inLayoutContext.tsxhandleAddFlexContainerhandler inUserPageEdit.tsx- CommandPicker palette entry (Ctrl+K → "Add Flexible Container")
- Ribbon bar "Flex Container" button (purple icon,
Columns) - Update
commands.tshelpers forAnyContainer[]support
Phase 4: Row/Column Commands
FlexAddRowCommand— adds row with 2 equal columnsFlexRemoveRowCommand— removes row (with state capture for undo)FlexAddColumnCommand— adds 1fr column to rowFlexRemoveColumnCommand— removes column by index (with state capture)- Wire commands to
FlexibleContainerRendererUI buttons viaexecuteCommand
Phase 5: Edit-Mode UI Polish
- Column drag handles for width adjustment
- Column width presets dropdown
- Row reordering (move up/down)
Phase 6: Email Rendering
- Add
renderFlexibleContainer()topages-email.ts columnsToPercentages()utility- Dynamic
<table>generation with MSO conditionals
Phase 7: Iteration & Polish
- Settings panel for row sizing mode (constrained/unconstrained)
- Per-cell alignment overrides
- Mobile responsive collapse
- PDF rendering support