diff --git a/components/agents/AgentGenerationWorkspaceDarkV2.tsx b/components/agents/AgentGenerationWorkspaceDarkV2.tsx
index c4d94252d..0c0d3af96 100644
--- a/components/agents/AgentGenerationWorkspaceDarkV2.tsx
+++ b/components/agents/AgentGenerationWorkspaceDarkV2.tsx
@@ -5335,8 +5335,39 @@ export function AgentGenerationWorkspaceDarkV2({
currentPsdWorkflowContext?.fifthCategory || ""
).trim();
+ useEffect(() => {
+ if (typeof document === "undefined") {
+ return;
+ }
+
+ const html = document.documentElement;
+ const body = document.body;
+ const previousHtmlOverflow = html.style.overflow;
+ const previousBodyOverflow = body.style.overflow;
+ const previousHtmlOverscrollBehavior = html.style.overscrollBehavior;
+ const previousBodyOverscrollBehavior = body.style.overscrollBehavior;
+ const previousHtmlBackgroundColor = html.style.backgroundColor;
+ const previousBodyBackgroundColor = body.style.backgroundColor;
+
+ html.style.overflow = "hidden";
+ body.style.overflow = "hidden";
+ html.style.overscrollBehavior = "none";
+ body.style.overscrollBehavior = "none";
+ html.style.backgroundColor = "#050607";
+ body.style.backgroundColor = "#050607";
+
+ return () => {
+ html.style.overflow = previousHtmlOverflow;
+ body.style.overflow = previousBodyOverflow;
+ html.style.overscrollBehavior = previousHtmlOverscrollBehavior;
+ body.style.overscrollBehavior = previousBodyOverscrollBehavior;
+ html.style.backgroundColor = previousHtmlBackgroundColor;
+ body.style.backgroundColor = previousBodyBackgroundColor;
+ };
+ }, []);
+
return (
-
+
{/* Main Content */}
-
+
{showcaseConfig ? (
"
@@ -1642,6 +1645,7 @@ export function ImageNode({
const [angleZoom, setAngleZoom] = useState(50);
const [isApplyingAngleEdit, setIsApplyingAngleEdit] = useState(false);
const [isAnglePreviewDragging, setIsAnglePreviewDragging] = useState(false);
+ const [anglePanelOpening, setAnglePanelOpening] = useState(false);
const [sceneFusionDialogOpen, setSceneFusionDialogOpen] = useState(false);
const [resizeAnnotatorOpen, setResizeAnnotatorOpen] = useState(false);
const [promptDialogOpen, setPromptDialogOpen] = useState(false);
@@ -1796,6 +1800,19 @@ export function ImageNode({
setAngleZoom(clampNumber(savedSettings.zoom, 0, 100));
}
}, [anglePanelOpen, data.metadata]);
+ useEffect(() => {
+ if (!anglePanelOpen || typeof window === "undefined") {
+ setAnglePanelOpening(false);
+ return;
+ }
+
+ setAnglePanelOpening(true);
+ const timer = window.setTimeout(() => {
+ setAnglePanelOpening(false);
+ }, 560);
+
+ return () => window.clearTimeout(timer);
+ }, [anglePanelOpen]);
useEffect(() => {
const nextDefaultTripoModelId =
getDefaultThreeDModelAliasId(publicModelAliasConfig.tripoModels) ||
@@ -2140,13 +2157,18 @@ export function ImageNode({
}, [angleCameraOrbitPosition]);
const angleOrbitWireframeStyle = useMemo(
() => ({
- transform: `rotateX(${-angleVerticalAngle * 0.22}deg) rotateY(${angleHorizontalAngle * 0.28}deg) rotateZ(${angleHorizontalAngle * 0.04}deg)`,
+ transform: `rotateX(${(-angleVerticalAngle * 0.24) + (anglePanelOpening ? 14 : 0)}deg) rotateY(${(angleHorizontalAngle * 0.34) + (anglePanelOpening ? -34 : 0)}deg) rotateZ(${(angleHorizontalAngle * 0.05) + (anglePanelOpening ? 7 : 0)}deg)`,
transformStyle: "preserve-3d",
transition: isAnglePreviewDragging
? "none"
- : "transform 180ms cubic-bezier(0.22, 1, 0.36, 1)",
+ : `transform ${anglePanelOpening ? 560 : 180}ms cubic-bezier(0.22, 1, 0.36, 1)`,
}),
- [angleHorizontalAngle, angleVerticalAngle, isAnglePreviewDragging]
+ [
+ angleHorizontalAngle,
+ anglePanelOpening,
+ angleVerticalAngle,
+ isAnglePreviewDragging,
+ ]
);
const angleCameraSceneScale = useMemo(
() => Number((0.94 + (angleZoom / 100) * 0.22).toFixed(3)),
@@ -3607,8 +3629,8 @@ export function ImageNode({
}
const rect = containerRef.current.getBoundingClientRect();
- const panelWidth = ANGLE_PANEL_SOURCE_WIDTH * IMAGE_EDIT_PANEL_SCALE;
- const panelHeight = ANGLE_PANEL_SOURCE_HEIGHT * IMAGE_EDIT_PANEL_SCALE;
+ const panelWidth = ANGLE_PANEL_SOURCE_WIDTH * ANGLE_PANEL_SCALE;
+ const panelHeight = ANGLE_PANEL_SOURCE_HEIGHT * ANGLE_PANEL_SCALE;
const spacing = 16;
const maxTop = Math.max(12, window.innerHeight - panelHeight);
@@ -4678,6 +4700,7 @@ export function ImageNode({
setTextEditPanelOpen(false);
setNotePanelOpen(false);
resetBoxCutoutState();
+ setAnglePanelOpening(true);
setAnglePanelOpen(true);
return;
}
@@ -8219,7 +8242,7 @@ export function ImageNode({
style={{
top: anglePanelPosition.top,
left: anglePanelPosition.left,
- transform: `scale(${IMAGE_EDIT_PANEL_SCALE})`,
+ transform: `scale(${ANGLE_PANEL_SCALE})`,
transformOrigin: "top left",
}}
>
@@ -8287,61 +8310,64 @@ export function ImageNode({
className="pointer-events-none absolute inset-0 flex items-center justify-center"
style={angleOrbitWireframeStyle}
>
-
+