diff --git a/apps/editor/app/viewer/[id]/viewer-overlay.tsx b/apps/editor/app/viewer/[id]/viewer-overlay.tsx
index 0cbb053c..49c8fd5f 100644
--- a/apps/editor/app/viewer/[id]/viewer-overlay.tsx
+++ b/apps/editor/app/viewer/[id]/viewer-overlay.tsx
@@ -1,9 +1,26 @@
'use client'
-import { type AnyNode, type AnyNodeId, type BuildingNode, type LevelNode, type ZoneNode, useScene } from '@pascal-app/core'
+import {
+ type AnyNode,
+ type AnyNodeId,
+ type BuildingNode,
+ type LevelNode,
+ useScene,
+ type ZoneNode,
+} from '@pascal-app/core'
import { useViewer } from '@pascal-app/viewer'
+import {
+ ArrowLeft,
+ Box,
+ ChevronRight,
+ Diamond,
+ Eye,
+ EyeOff,
+ Image,
+ Layers,
+ Layers2,
+} from 'lucide-react'
import Link from 'next/link'
-import { ArrowLeft, Box, ChevronRight, Diamond, Eye, EyeOff, Image, Layers, Layers2 } from 'lucide-react'
import type { ProjectOwner } from '@/features/community/lib/projects/types'
const getNodeName = (node: AnyNode): string => {
@@ -23,7 +40,12 @@ interface ViewerOverlayProps {
canShowGuides?: boolean
}
-export const ViewerOverlay = ({ projectName, owner, canShowScans = true, canShowGuides = true }: ViewerOverlayProps) => {
+export const ViewerOverlay = ({
+ projectName,
+ owner,
+ canShowScans = true,
+ canShowGuides = true,
+}: ViewerOverlayProps) => {
const selection = useViewer((s) => s.selection)
const nodes = useScene((s) => s.nodes)
const showScans = useViewer((s) => s.showScans)
@@ -32,20 +54,24 @@ export const ViewerOverlay = ({ projectName, owner, canShowScans = true, canShow
const levelMode = useViewer((s) => s.levelMode)
const wallMode = useViewer((s) => s.wallMode)
- const building = selection.buildingId ? (nodes[selection.buildingId] as BuildingNode | undefined) : null
+ const building = selection.buildingId
+ ? (nodes[selection.buildingId] as BuildingNode | undefined)
+ : null
const level = selection.levelId ? (nodes[selection.levelId] as LevelNode | undefined) : null
const zone = selection.zoneId ? (nodes[selection.zoneId] as ZoneNode | undefined) : null
// Get the first selected item (if any)
- const selectedNode = selection.selectedIds.length > 0
- ? (nodes[selection.selectedIds[0] as AnyNodeId] as AnyNode | undefined)
- : null
+ const selectedNode =
+ selection.selectedIds.length > 0
+ ? (nodes[selection.selectedIds[0] as AnyNodeId] as AnyNode | undefined)
+ : null
// Get all levels for the selected building
- const levels = building?.children
- .map((id) => nodes[id as AnyNodeId] as LevelNode | undefined)
- .filter((n): n is LevelNode => n?.type === 'level')
- .sort((a, b) => a.level - b.level) ?? []
+ const levels =
+ building?.children
+ .map((id) => nodes[id as AnyNodeId] as LevelNode | undefined)
+ .filter((n): n is LevelNode => n?.type === 'level')
+ .sort((a, b) => a.level - b.level) ?? []
const handleLevelClick = (levelId: LevelNode['id']) => {
// When switching levels, deselect zone and items
@@ -68,219 +94,249 @@ export const ViewerOverlay = ({ projectName, owner, canShowScans = true, canShow
return (
<>
- {/* Unified top-left card */}
-
-
- {/* Project info + back */}
-
-
-
-
-
-
- {projectName || 'Untitled'}
+ {/* Unified top-left card */}
+
+
+ {/* Project info + back */}
+
+
+
+
+
+
+ {projectName || 'Untitled'}
+
+ {owner?.username && (
+
+ @{owner.username}
+
+ )}
- {owner?.username && (
-
- @{owner.username}
-
- )}
-
- {/* Breadcrumb — only shown when navigated into a building */}
- {building && (
-
-
-
-
- {building && (
- <>
-
+ {/* Breadcrumb — only shown when navigated into a building */}
+ {building && (
+
+
- >
- )}
- {level && (
- <>
-
-
- >
- )}
+ {building && (
+ <>
+
+
+ >
+ )}
- {zone && (
- <>
-
-
- {zone.name}
-
- >
- )}
+ {level && (
+ <>
+
+
+ >
+ )}
- {selectedNode && zone && (
- <>
-
- {getNodeName(selectedNode)}
- >
- )}
-
-
- )}
-
+ {zone && (
+ <>
+
+
+ {zone.name}
+
+ >
+ )}
- {/* Level List (only when building is selected) */}
- {building && levels.length > 0 && (
-
- Levels
- {levels.map((lvl) => (
-
- ))}
-
- )}
-
-
- {/* Controls Panel - Top Right */}
-
- {/* Visibility Controls */}
- {(canShowScans || canShowGuides) && (
-
- Visibility
- {canShowScans && (
-
- )}
- {canShowGuides && (
-
- )}
-
- )}
-
- {/* Camera Mode */}
-
- Camera
-
+
)}
- {cameraMode === 'perspective' ? 'Perspective' : 'Orthographic'}
-
+
+
+ {/* Level List (only when building is selected) */}
+ {building && levels.length > 0 && (
+
+ Levels
+ {levels.map((lvl) => (
+
+ ))}
+
+ )}
- {/* Level Mode */}
-
- Level Mode
-
-
-
-
+ {/* Controls Panel - Top Right */}
+
+ {/* Visibility Controls */}
+ {(canShowScans || canShowGuides) && (
+
+ Visibility
+ {canShowScans && (
+
+ )}
+ {canShowGuides && (
+
+ )}
+
+ )}
- {/* Wall Mode */}
-
-
Wall Mode
-
-
-
+ {/* Camera Mode */}
+
+ Camera
+
+
+
+ {/* Level Mode */}
+
+ Level Mode
+
+
+
+
+
+ {/* Wall Mode */}
+
+
Wall Mode
+
+
+
+
-
>
)
}