+
+ {(Object.keys(PRESET_COLORS) as MaterialPreset[]).map((preset) => (
+
+
+ {showCustom && (
+
+ )}
+
+ )
+}
diff --git a/packages/editor/src/components/ui/panels/ceiling-panel.tsx b/packages/editor/src/components/ui/panels/ceiling-panel.tsx
index 71ec87c1..ee85f956 100644
--- a/packages/editor/src/components/ui/panels/ceiling-panel.tsx
+++ b/packages/editor/src/components/ui/panels/ceiling-panel.tsx
@@ -1,11 +1,12 @@
'use client'
-import { type AnyNode, type CeilingNode, useScene } from '@pascal-app/core'
+import { type AnyNode, type CeilingNode, type MaterialSchema, useScene } from '@pascal-app/core'
import { useViewer } from '@pascal-app/viewer'
import { Edit, Plus, Trash2 } from 'lucide-react'
import { useCallback, useEffect } from 'react'
import useEditor from '../../../store/use-editor'
import { ActionButton } from '../controls/action-button'
+import { MaterialPicker } from '../controls/material-picker'
import { PanelSection } from '../controls/panel-section'
import { SliderControl } from '../controls/slider-control'
import { PanelWrapper } from './panel-wrapper'
@@ -94,6 +95,10 @@ export function CeilingPanel() {
[selectedId, node?.holes, handleUpdate, editingHole, setEditingHole],
)
+ const handleMaterialChange = useCallback((material: MaterialSchema) => {
+ handleUpdate({ material })
+ }, [handleUpdate])
+
if (!node || node.type !== 'ceiling' || selectedIds.length !== 1) return null
const calculateArea = (polygon: Array<[number, number]>): number => {
@@ -217,6 +222,13 @@ export function CeilingPanel() {
/>
+
+