Description
Implement full-screen DreamSong interface that opens in new Obsidian leaf, providing expanded story viewing experience. Also includes full-screen button for DreamTalk media files.
Parent Specification: #271 - Dreamweaving Operations Specification
Acceptance Criteria
Technical Requirements
Component Architecture
- Extract existing DreamSong component for reusability (embedded + full-screen contexts) ✅
- Shared component renders with context-aware styling (circular mask vs full-screen) ✅
- Same story flow and navigation in both contexts ✅
Full-Screen Button Implementation
- Position: Top-center, same x-coordinate as flip button ✅
- Icon: "maximize" from lucide icon set ✅
- Styling: Consistent with existing flip button styling ✅
- Behavior: Hover state triggers appearance ✅
Leaf Management Strategy
- One leaf per DreamNode: Unique leaf ID based on DreamNode ID ✅
- Media Files: Use Obsidian's built-in media viewer ✅
- DreamSong Interface: Custom leaf type for expanded story experience ✅
- Cleanup: Proper memory management when leaves are closed ✅
Performance Optimization
- Async Canvas Parsing: Parse canvas data asynchronously ✅
- Component Caching: Store parsed components, update only when canvas changes ✅
- Dynamic Website Generation: Function of canvas data with optimal rendering patterns ✅
DreamSong Presentation Refinement
- Dynamic Generation: Canvas data → website-like scrollable interface ✅
- Same Presentation: Identical rendering between embedded and full-screen contexts ✅
Dependencies
User Experience
DreamTalk Full-Screen ✅
- User hovers over DreamTalk side → full-screen button appears at top-center
- Click maximize button → media file opens in new Obsidian leaf
- Standard Obsidian media viewing experience
- One leaf per DreamNode (replaces if already open)
DreamSong Full-Screen ✅
- User hovers over DreamSong side → full-screen button appears at top-center
- Click maximize button → expanded story interface opens in new leaf
- Identical story flow as embedded version, but unobscured and scrollable
- Dynamically generated website experience from canvas data
- Proper Obsidian integration with leaf management
- One leaf per DreamNode with automatic cleanup
Technical Approach
Phase 1: Component Extraction & Reusability ✅
- Extract DreamSong component from current embedded implementation
- Create context-aware rendering (embedded vs full-screen)
- Maintain 100% functional parity
Phase 2: Full-Screen Button Implementation ✅
- Add maximize buttons with proper positioning and styling
- Implement hover state management
- Integrate with existing flip button patterns
Phase 3: Leaf Management Implementation ✅
- Create Obsidian leaf management service
- Implement one-leaf-per-node strategy
- Handle media file opening via Obsidian API
Phase 4: DreamSong Presentation Refinement ✅
- Refine canvas-based dynamic website generation
- Implement async parsing and caching optimization
- Ensure scrollable, performant full-screen experience
Definition of Done
Description
Implement full-screen DreamSong interface that opens in new Obsidian leaf, providing expanded story viewing experience. Also includes full-screen button for DreamTalk media files.
Parent Specification: #271 - Dreamweaving Operations Specification
Acceptance Criteria
Technical Requirements
Component Architecture
Full-Screen Button Implementation
Leaf Management Strategy
Performance Optimization
DreamSong Presentation Refinement
Dependencies
User Experience
DreamTalk Full-Screen ✅
DreamSong Full-Screen ✅
Technical Approach
Phase 1: Component Extraction & Reusability ✅
Phase 2: Full-Screen Button Implementation ✅
Phase 3: Leaf Management Implementation ✅
Phase 4: DreamSong Presentation Refinement ✅
Definition of Done