diff --git a/src/components/layout/Layout.tsx b/src/components/layout/Layout.tsx index 68a71961..b8e3a188 100644 --- a/src/components/layout/Layout.tsx +++ b/src/components/layout/Layout.tsx @@ -11,14 +11,18 @@ interface LayoutProps { export function Layout({ left, center, right }: LayoutProps) { return ( -
+
{left ?? }
{center}
{right}
-
- + +
+ {/* Outlet이 들어가는 영역(= 네 컨텐츠)이 이제 정확한 높이를 가짐 */} +
+ +
); diff --git a/src/components/script-box/ScriptBox.tsx b/src/components/script-box/ScriptBox.tsx index dae66eef..8e00e4c6 100644 --- a/src/components/script-box/ScriptBox.tsx +++ b/src/components/script-box/ScriptBox.tsx @@ -1,37 +1,60 @@ -import { useState } from 'react'; +import { useEffect, useState } from 'react'; import clsx from 'clsx'; import ScriptBoxContent from './ScriptBoxContent'; import ScriptBoxHeader from './ScriptBoxHeader'; +/** + * 목적: + * - ScriptBox 접힘/펼침 상태를 부모에게 전달 + * - 부모는 이 상태를 받아 슬라이드를 "살짝 내려오는" UI로 동기화 + */ interface ScriptBoxProps { slideTitle?: string; + onCollapsedChange?: (collapsed: boolean) => void; } -export default function ScriptBox({ slideTitle = '슬라이드 1' }: ScriptBoxProps) { +export default function ScriptBox({ + slideTitle = '슬라이드 1', + onCollapsedChange, +}: ScriptBoxProps) { const [isCollapsed, setIsCollapsed] = useState(false); const handleToggleCollapse = () => { setIsCollapsed((prev) => !prev); }; + useEffect(() => { + onCollapsedChange?.(isCollapsed); + }, [isCollapsed, onCollapsedChange]); + return (
- - +
+ +
+ +
+ {!isCollapsed && } +
); } diff --git a/src/components/script-box/ScriptBoxContent.tsx b/src/components/script-box/ScriptBoxContent.tsx index e18ea108..0337c589 100644 --- a/src/components/script-box/ScriptBoxContent.tsx +++ b/src/components/script-box/ScriptBoxContent.tsx @@ -4,13 +4,14 @@ export default function ScriptBoxContent() { const [script, setScript] = useState(''); return ( -
+ // ScriptBox 전체 높이에서 헤더만큼 뺀 영역을 그대로 사용 +