feat: floor plan viewport rendering, per-canvas config, server media upload
- Render floor plan inside React Flow ViewportPortal so it pans/zooms with nodes (was screen-fixed, desynced on pan/zoom); zoom-stable resize handles. - Move floor plan config from the left panel into the canvas (design) edit modal; attach per-design and fix cross-design bleed on load. - Store images via a new generic backend media endpoint (POST/GET/DELETE /api/v1/media) on disk under <data_dir>/uploads, not base64 in the canvas. - Disable floor plans in standalone mode (no backend to upload/serve); drop base64 localStorage persistence. See ADR-001 in CLAUDE.md. - Tests: backend media route, DesignModal floor plan + upload, store floorMap. ha-relevant: maybe
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
* default design on first run so existing users keep their canvas.
|
||||
*/
|
||||
import type { Node, Edge } from '@xyflow/react'
|
||||
import type { Design, DesignType, NodeData, EdgeData, CustomStyleDef, FloorMapConfig } from '@/types'
|
||||
import type { Design, DesignType, NodeData, EdgeData, CustomStyleDef } from '@/types'
|
||||
import type { ThemeId } from '@/utils/themes'
|
||||
import { generateUUID } from '@/utils/uuid'
|
||||
|
||||
@@ -24,7 +24,8 @@ export interface StandaloneCanvas {
|
||||
edges: Edge<EdgeData>[]
|
||||
theme_id?: ThemeId
|
||||
custom_style?: CustomStyleDef | null
|
||||
floorMap?: FloorMapConfig
|
||||
// NOTE: no floor plan here — floor plans need a backend to upload/serve the
|
||||
// image, so they are disabled in standalone mode (see homelable/CLAUDE.md ADR).
|
||||
}
|
||||
|
||||
function readJSON<T>(key: string): T | null {
|
||||
|
||||
Reference in New Issue
Block a user