+
+
+
+ {title}
+
+
{subtitle}
+
+
+ {showMultiView && (
+ <>
+ onChange({ frontImage: img })}
+ onPickFromLibrary={
+ onPickSlotFromLibrary
+ ? () => onPickSlotFromLibrary("front")
+ : undefined
+ }
+ />
+ onChange({ backImage: img })}
+ onPickFromLibrary={
+ onPickSlotFromLibrary
+ ? () => onPickSlotFromLibrary("back")
+ : undefined
+ }
+ />
+ onChange({ leftImage: img })}
+ onPickFromLibrary={
+ onPickSlotFromLibrary
+ ? () => onPickSlotFromLibrary("left")
+ : undefined
+ }
+ />
+ onChange({ rightImage: img })}
+ onPickFromLibrary={
+ onPickSlotFromLibrary
+ ? () => onPickSlotFromLibrary("right")
+ : undefined
+ }
+ />
+ >
+ )}
+ {showMeshInput && (
+ onChange({ inputMesh: img })}
+ />
+ )}
+
+
+ );
+}
+
+// ── Slots ──────────────────────────────────────────────────────────────────
+
+const SLOT_CLASS =
+ "flex aspect-square w-14 items-center justify-center overflow-hidden rounded-lg border-2 border-dashed border-white/25 bg-white/5 transition-all hover:border-white/40 hover:bg-white/10";
+
+function SlotShell({
+ label,
+ children,
+}: {
+ label: string;
+ children: React.ReactNode;
+}) {
+ return (
+