SESSION 12.24 PAGE BUILDER COMPLETE
Documentation for Sessions
Session 12.24 - Page Builder Complete Overhaul
๐ Overview
Complete rewrite of the Page Builder with:
- Interactive Drag/Move/Resize - Widgets can be dragged and resized on canvas
- Responsive Breakpoints - Mobile, Tablet, Desktop, Wide breakpoint switching
- AI Integration - Drag-drop from AI panel with smart positioning
- Modern Design - Beautiful dark theme with glassmorphism elements
- Pixel-Perfect Positioning - Platform-agnostic calculations
๐ฏ New Components Created
1. CanvasWidgetComponent
Path: libs/libs-structural/page-builder/src/lib/components/canvas-widget/
Interactive widget on canvas with:
- Drag - Click and drag to move widgets
- Resize - 8 resize handles (N, NE, E, SE, S, SW, W, NW)
- Selection - Click to select, visual feedback
- Keyboard shortcuts - Arrow keys to nudge, Delete to remove
- Snap to grid - Automatic grid snapping
- Zoom-aware - Calculations adjust for canvas zoom level
2. BuilderToolbarComponent
Path: libs/libs-structural/page-builder/src/lib/components/builder-toolbar/
Modern toolbar with:
- Breakpoint selector - Switch between Mobile/Tablet/Desktop/Wide
- Zoom controls - 25% to 200% with +/- buttons
- Grid toggle - Show/hide grid
- Snap toggle - Enable/disable snap to grid
- Rulers toggle - Show/hide rulers
- Undo/Redo - History controls (placeholder)
- Preview mode - Toggle between design and preview
- Save button - With unsaved indicator
3. PageCanvasComponent (Updated)
Path: libs/libs-structural/page-builder/src/lib/canvas/
Enhanced canvas with:
- Drag-drop from palette - Widget type data
- Drag-drop from AI panel - Full widget data with config
- Responsive width - Adjusts based on current breakpoint
- Grid pattern - CSS grid that respects gridSize
- Empty state - Beautiful call-to-action when no widgets
- Drop indicator - Shows where widget will be placed
4. WidgetPaletteComponent (Updated)
Path: libs/libs-structural/page-builder/src/lib/components/widget-palette/
Improved widget selection with:
- Search - Filter widgets by name/description
- Categories - All, Basic, Layout, Form, Media
- Drag-drop - Drag widgets to canvas
- AI hint - Prompt to use AI for custom widgets
๐ฑ Responsive Breakpoint System
Breakpoints Defined
| Breakpoint | Min Width | Max Width | Default Canvas |
|---|---|---|---|
mobile |
0px | 767px | 375px |
tablet |
768px | 1023px | 768px |
desktop |
1024px | 1439px | 1200px |
wide |
1440px | โ | 1440px |
Per-Breakpoint Positioning
Widgets can have different positions per breakpoint:
interface WidgetInstance {
positions: {
mobile?: ResponsivePosition;
tablet?: ResponsivePosition;
desktop?: ResponsivePosition;
wide?: ResponsivePosition;
};
}
๐ค AI Panel Integration
The canvas accepts drag-drop from the AI panel in application/json format:
interface AIDragData {
type: 'module' | 'widget' | 'template';
data: {
id: string;
name: string;
widgetType?: string;
config?: Record<string, unknown>;
ai?: {
generatedAt: string;
prompt?: string;
confidence?: number;
};
};
source: 'ai-panel' | 'palette' | 'module-generator';
}
When AI-generated widgets are dropped:
aiGenerated: trueis set on the widgetaiPromptstores the original prompt- AI indicator badge appears on widget
๐จ Design System
Color Palette
- Background:
#0d0d1ato#1a1a2egradient - Primary:
#667eea(indigo) - Secondary:
#764ba2(purple) - Success:
#10b981(emerald) - Warning:
#f59e0b(amber)
Visual Elements
- Glassmorphism - Transparent backgrounds with blur
- Gradient accents - Purple-indigo gradients
- Smooth animations - 0.2s ease transitions
- Selection pulse - Animated selection border
๐ง State Management
PageStateService
Persisted with Flash Persistence:
page-builder:current-page- Current page datapage-builder:canvas-state- Zoom, grid, breakpoint settings
Key methods:
addWidget(widget)- Add widget to pageupdateWidget(id, updates)- Update widget propertiesdeleteWidget(id)- Remove widgetselectWidget(id)- Select widgetupdateCanvasState(updates)- Update canvas settings
๐ Files Changed/Created
Created
components/canvas-widget/canvas-widget.component.tscomponents/canvas-widget/canvas-widget.component.htmlcomponents/canvas-widget/canvas-widget.component.scsscomponents/builder-toolbar/builder-toolbar.component.tscomponents/builder-toolbar/builder-toolbar.component.htmlcomponents/builder-toolbar/builder-toolbar.component.scsscomponents/index.ts
Updated
types/page-builder.types.ts- Added breakpoints, responsive typescanvas/page-canvas.component.ts- Added interactive canvascanvas/page-canvas.component.html- New templatecanvas/page-canvas.component.scss- Beautiful stylingcomponents/widget-palette/*- Improved designpage-builder.component.ts- Full orchestrationpage-builder.component.html- New layoutpage-builder.component.scss- Dark themestate/page-state.service.ts- Added breakpoint supportsrc/index.ts- Updated exports
๐งช Testing
- Navigate to
/space/{spaceSlug}/page-builder - Drag widgets from left palette to canvas
- Click widget to select - shows resize handles
- Drag widget to move it
- Drag handles to resize
- Switch breakpoints in toolbar
- Zoom in/out with +/- buttons
- Toggle grid with grid button
- Preview mode with eye button
โญ๏ธ Next Steps
- Properties Panel - Edit widget properties when selected
- Undo/Redo - Implement history system
- Multi-select - Shift+click for multiple selection
- Copy/Paste - Ctrl+C/Ctrl+V support
- Rulers - Visual rulers on canvas edges
- Layers panel - Widget z-index management
- Export - Export to HTML/CSS code