diff --git a/apps/editor/components/ui/sidebar/panels/site-panel/ceiling-tree-node.tsx b/apps/editor/components/ui/sidebar/panels/site-panel/ceiling-tree-node.tsx
index ea87fb74..017d4dba 100644
--- a/apps/editor/components/ui/sidebar/panels/site-panel/ceiling-tree-node.tsx
+++ b/apps/editor/components/ui/sidebar/panels/site-panel/ceiling-tree-node.tsx
@@ -59,6 +59,7 @@ export function CeilingTreeNode({ node, depth }: CeilingTreeNodeProps) {
onMouseLeave={handleMouseLeave}
isSelected={isSelected}
isHovered={isHovered}
+ isVisible={node.visible !== false}
actions={}
>
{node.children.map((childId) => (
diff --git a/apps/editor/components/ui/sidebar/panels/site-panel/item-tree-node.tsx b/apps/editor/components/ui/sidebar/panels/site-panel/item-tree-node.tsx
index d64b53e3..3443ce30 100644
--- a/apps/editor/components/ui/sidebar/panels/site-panel/item-tree-node.tsx
+++ b/apps/editor/components/ui/sidebar/panels/site-panel/item-tree-node.tsx
@@ -67,6 +67,7 @@ export function ItemTreeNode({ node, depth }: ItemTreeNodeProps) {
onMouseLeave={handleMouseLeave}
isSelected={isSelected}
isHovered={isHovered}
+ isVisible={node.visible !== false}
actions={}
/>
diff --git a/apps/editor/components/ui/sidebar/panels/site-panel/roof-tree-node.tsx b/apps/editor/components/ui/sidebar/panels/site-panel/roof-tree-node.tsx
index 26f2ac0b..026020bf 100644
--- a/apps/editor/components/ui/sidebar/panels/site-panel/roof-tree-node.tsx
+++ b/apps/editor/components/ui/sidebar/panels/site-panel/roof-tree-node.tsx
@@ -59,6 +59,7 @@ export function RoofTreeNode({ node, depth }: RoofTreeNodeProps) {
onMouseLeave={handleMouseLeave}
isSelected={isSelected}
isHovered={isHovered}
+ isVisible={node.visible !== false}
actions={}
/>
diff --git a/apps/editor/components/ui/sidebar/panels/site-panel/slab-tree-node.tsx b/apps/editor/components/ui/sidebar/panels/site-panel/slab-tree-node.tsx
index 86c43860..9c222102 100644
--- a/apps/editor/components/ui/sidebar/panels/site-panel/slab-tree-node.tsx
+++ b/apps/editor/components/ui/sidebar/panels/site-panel/slab-tree-node.tsx
@@ -58,6 +58,7 @@ export function SlabTreeNode({ node, depth }: SlabTreeNodeProps) {
onMouseLeave={handleMouseLeave}
isSelected={isSelected}
isHovered={isHovered}
+ isVisible={node.visible !== false}
actions={}
/>
diff --git a/apps/editor/components/ui/sidebar/panels/site-panel/tree-node.tsx b/apps/editor/components/ui/sidebar/panels/site-panel/tree-node.tsx
index f5a447fc..a7f829f9 100644
--- a/apps/editor/components/ui/sidebar/panels/site-panel/tree-node.tsx
+++ b/apps/editor/components/ui/sidebar/panels/site-panel/tree-node.tsx
@@ -58,6 +58,7 @@ interface TreeNodeWrapperProps {
children?: React.ReactNode;
isSelected?: boolean;
isHovered?: boolean;
+ isVisible?: boolean;
}
export const TreeNodeWrapper = forwardRef(
@@ -77,6 +78,7 @@ export const TreeNodeWrapper = forwardRef(
children,
isSelected,
isHovered,
+ isVisible = true,
},
ref
) {
@@ -89,7 +91,8 @@ export const TreeNodeWrapper = forwardRef(
? "text-primary-foreground bg-primary/80 hover:bg-primary/90"
: isHovered
? "bg-accent/70 text-foreground"
- : "text-muted-foreground hover:bg-accent/50"
+ : "text-muted-foreground hover:bg-accent/50",
+ !isVisible && "opacity-50"
)}
style={{ paddingLeft: depth * 12 + 4 }}
onMouseEnter={onMouseEnter}
diff --git a/apps/editor/components/ui/sidebar/panels/site-panel/wall-tree-node.tsx b/apps/editor/components/ui/sidebar/panels/site-panel/wall-tree-node.tsx
index a5a4625e..e55b9bc1 100644
--- a/apps/editor/components/ui/sidebar/panels/site-panel/wall-tree-node.tsx
+++ b/apps/editor/components/ui/sidebar/panels/site-panel/wall-tree-node.tsx
@@ -62,6 +62,7 @@ export function WallTreeNode({ node, depth }: WallTreeNodeProps) {
onMouseLeave={handleMouseLeave}
isSelected={isSelected}
isHovered={isHovered}
+ isVisible={node.visible !== false}
actions={}
>
{node.children.map((childId) => (
diff --git a/packages/viewer/src/components/renderers/item/item-renderer.tsx b/packages/viewer/src/components/renderers/item/item-renderer.tsx
index 563742fd..ad07d14a 100644
--- a/packages/viewer/src/components/renderers/item/item-renderer.tsx
+++ b/packages/viewer/src/components/renderers/item/item-renderer.tsx
@@ -37,7 +37,7 @@ export const ItemRenderer = ({ node }: { node: ItemNode }) => {
useRegistry(node.id, node.type, ref)
return (
-
+
diff --git a/packages/viewer/src/components/renderers/roof/roof-renderer.tsx b/packages/viewer/src/components/renderers/roof/roof-renderer.tsx
index 31156860..fcdd063f 100644
--- a/packages/viewer/src/components/renderers/roof/roof-renderer.tsx
+++ b/packages/viewer/src/components/renderers/roof/roof-renderer.tsx
@@ -17,6 +17,7 @@ export const RoofRenderer = ({ node }: { node: RoofNode }) => {
receiveShadow
position={node.position}
rotation-y={node.rotation}
+ visible={node.visible}
{...handlers}
>
{/* RoofSystem will replace this geometry in the next frame */}
diff --git a/packages/viewer/src/components/renderers/slab/slab-renderer.tsx b/packages/viewer/src/components/renderers/slab/slab-renderer.tsx
index e7207eab..5390fc08 100644
--- a/packages/viewer/src/components/renderers/slab/slab-renderer.tsx
+++ b/packages/viewer/src/components/renderers/slab/slab-renderer.tsx
@@ -11,7 +11,7 @@ export const SlabRenderer = ({ node }: { node: SlabNode }) => {
const handlers = useNodeEvents(node, 'slab')
return (
-
+
{/* SlabSystem will replace this geometry in the next frame */}
diff --git a/packages/viewer/src/components/renderers/wall/wall-renderer.tsx b/packages/viewer/src/components/renderers/wall/wall-renderer.tsx
index 3895c20c..436e324a 100644
--- a/packages/viewer/src/components/renderers/wall/wall-renderer.tsx
+++ b/packages/viewer/src/components/renderers/wall/wall-renderer.tsx
@@ -12,7 +12,7 @@ export const WallRenderer = ({ node }: { node: WallNode }) => {
const handlers = useNodeEvents(node, 'wall')
return (
-
+
{/* WallSystem will replace this geometry in the next frame */}