Skip to content

feat/SlidePage 구현과 ScriptBox 애니메이션 변화#19

Merged
wonellyho merged 4 commits intodevelopfrom
feat/pd-sld-01#18
Jan 3, 2026
Merged

feat/SlidePage 구현과 ScriptBox 애니메이션 변화#19
wonellyho merged 4 commits intodevelopfrom
feat/pd-sld-01#18

Conversation

@wonellyho
Copy link
Collaborator

@wonellyho wonellyho commented Jan 2, 2026

📌 관련 이슈

✨ 변경 내용

  1. ScriptBox 레이아웃 구조 개선
  • fixed + translate 방식 대신, 부모 레이아웃(SlidePage) 기준으로 하단에 고정되는 구조로 변경했습니다.
  • 접힘/펼침 시 박스 전체를 이동시키지 않고, 헤더는 유지한 채 콘텐츠 영역만 높이를 0 ↔︎ 확장하도록 수정했습니다.
  1. SlidePage 왼쪽 오른쪽 영역 레이아웃 설계(스크립트박스 접힘에 따른 애니메이션 효과를 위해)
  • 오른쪽 영역을 relative 기준으로 구성하고, 슬라이드 영역 ScriptBox 영역을 absolute 레이어로 분리했습니다.
  • ScriptBox가 접힐 때 슬라이드가 화면 전체 중앙에서 독립적으로 아래로 살짝 이동하도록 transform 기반 애니메이션을 적용했습니다.
  1. Layout에서 화면 높이 계산 방식 개선
  • min-h-screen 대신 h-screen + overflow-hidden을 사용하여 전체 페이지 스크롤을 제거하고, 스크롤을 페이지 내부에서만 제어하도록 변경했습니다.
  • 태그<* Outlet />을 h-full wrapper로 감싸, 하위 페이지에서 h-full / absolute 레이아웃이 안정적으로 동작하도록 했습니다.
  1. ScriptBoxContent 스크롤 및 높이 처리 개선
  • ScriptBox 전체 높이에 의존하던 구조를 제거하고, 콘텐츠 영역 자체를 h-full + overflow-y-auto로 단순화했습니다.
  • textarea는 항상 헤더 바로 아래부터 하단까지 채워지며, 내용이 많아질 때만 스크롤이 나타나도록 동작하게 수정했습니다.

💡 참고 사항

  1. ScriptBox 상태(isCollapsed)를 부모로 전달하여, 슬라이드 영역과 연동된 UI 동작이 가능하도록 했습니다.
  2. 왼쪽 썸네일 슬라이드 선택 시 파랑색 border로 추가효과 주었고, 디테일한 스타일 맞출 계획입니다.
  • 아래 1/3 comment 확인!

@wonellyho wonellyho self-assigned this Jan 2, 2026
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @wonellyho, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

이 PR은 SlidePage를 구현하고 ScriptBox의 애니메이션 동작을 개선하는 것을 목표로 합니다. ScriptBox의 레이아웃 구조를 재정비하여 반응성과 애니메이션을 향상시키고, SlidePage의 레이아웃을 재설계하여 ScriptBox의 접힘 상태에 따라 슬라이드 영역이 독립적으로 움직이도록 했습니다. 또한, Layout 컴포넌트의 전반적인 화면 높이 계산 방식을 개선하여 스크롤 관리를 더욱 효율적으로 만들었습니다.

Highlights

  • ScriptBox 레이아웃 및 애니메이션 개선: ScriptBox의 위치 고정 방식을 'fixed + translate'에서 부모 레이아웃 기준 하단 고정으로 변경하여 안정성을 높였습니다. 접힘/펼침 애니메이션은 박스 전체 이동 대신, 헤더는 유지하고 콘텐츠 영역의 높이를 조절하는 방식으로 변경하여 부드러운 전환을 구현했습니다. ScriptBox의 접힘 상태를 부모 컴포넌트(SlidePage)로 전달하는 'onCollapsedChange' prop을 추가하여 UI 연동성을 확보했습니다.
  • SlidePage 레이아웃 재설계 및 슬라이드 연동 애니메이션: SlidePage의 오른쪽 메인 영역을 'relative' 기준으로 설정하고, 슬라이드 영역과 ScriptBox 영역을 'absolute' 레이어로 분리했습니다. ScriptBox가 접힐 때 메인 슬라이드 영역이 'transform' 속성을 이용해 독립적으로 아래로 살짝 이동하는 애니메이션 효과를 적용했습니다. 왼쪽 썸네일 슬라이드 목록을 구현하고, 현재 선택된 슬라이드에 파란색 테두리 효과를 추가했습니다.
  • 전역 레이아웃의 화면 높이 관리 개선: Layout 컴포넌트에서 'min-h-screen' 대신 'h-screen'과 'overflow-hidden'을 사용하여 전체 페이지 스크롤을 제거하고, 스크롤을 페이지 내부에서만 제어하도록 변경했습니다. 을 'h-full' 래퍼로 감싸 하위 페이지에서 'h-full' 또는 'absolute' 레이아웃이 안정적으로 동작하도록 기반을 마련했습니다.
  • ScriptBoxContent 스크롤 및 높이 처리 최적화: ScriptBoxContent의 높이 계산 방식을 ScriptBox 전체 높이에 의존하지 않고 'h-full'을 사용하여 콘텐츠 영역 자체의 스크롤을 효율적으로 관리하도록 개선했습니다. textarea가 헤더 바로 아래부터 하단까지 채워지며, 내용이 많아질 때만 스크롤이 나타나도록 동작을 수정했습니다.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

이번 PR은 SlidePage를 구현하고 ScriptBox의 애니메이션을 개선하는 중요한 변경사항을 담고 있네요. 전체적인 레이아웃 구조를 fixed 방식에서 부모 컴포넌트 기준의 absolute 레이어로 변경하고, 상태를 부모로 끌어올려 연동된 애니메이션을 구현한 점이 인상적입니다. 코드의 가독성과 유지보수성을 높이기 위해 몇 가지 제안을 드립니다. ScriptBox 컴포넌트의 높이 값 오류로 인한 레이아웃 문제를 수정하고, SlidePage에서 하드코딩된 숫자들(매직 넘버)을 상수로 추출하여 관리하는 것을 제안했습니다. 이를 통해 코드를 더 명확하게 만들고 향후 변경에 유연하게 대응할 수 있을 것입니다. 전체적으로 복잡한 UI 로직을 깔끔하게 개선하려는 노력이 돋보이는 좋은 작업입니다.

<ScriptBoxContent />
<div className={clsx('w-full rounded-t-lg bg-white shadow-sm', isCollapsed ? 'h-10' : 'h-80')}>
{/* 헤더는 그대로 */}
<div className="h-12 relative">
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

헤더를 감싸는 div의 높이가 h-12(48px)로 설정되어 있습니다. 하지만 ScriptBox가 접혔을 때 부모 div의 높이는 h-10(40px)이고, ScriptBoxHeader 컴포넌트 자체의 높이도 h-10입니다. 이로 인해 자식 요소가 부모 요소보다 커져 레이아웃이 깨질 수 있습니다. h-10으로 수정하여 높이를 일치시키는 것이 좋아 보입니다.

Suggested change
<div className="h-12 relative">
<div className="h-10 relative">

Comment on lines 166 to 170
style={{
paddingBottom: isScriptCollapsed ? 40 : 100,

paddingTop: 50,
}}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

스크립트 박스가 펼쳐졌을 때(isScriptCollapsedfalse) paddingBottom100으로 설정되어 있습니다. ScriptBox의 실제 높이는 320px이므로, 이 값은 슬라이드 하단이 ScriptBox에 의해 가려지게 만듭니다. 접혔을 때의 높이 40px와 일관되게, 펼쳐졌을 때의 높이 320pxpaddingBottom으로 설정하여 레이아웃이 깨지지 않도록 하는 것을 제안합니다.

Suggested change
style={{
paddingBottom: isScriptCollapsed ? 40 : 100,
paddingTop: 50,
}}
style={{
paddingBottom: isScriptCollapsed ? 40 : 320,
paddingTop: 50,
}}

Comment on lines 166 to 181
style={{
paddingBottom: isScriptCollapsed ? 40 : 100,

paddingTop: 50,
}}
>
{/* 슬라이드 컨테이너
- ScriptBox 접힘 상태에 따라 translateY로 "조금만" 이동
- 레이아웃 계산이 아닌 명시적 이동을 사용 */}
<div
className="w-[2200px] flex flex-col items-center"
style={{
// ✅ 여기서 '독립적으로' 내려가게 만듦 (원하는 만큼만)
transform: `translateY(${isScriptCollapsed ? 120 : 0}px)`,
transition: 'transform 300ms ease-out',
}}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

레이아웃 및 애니메이션과 관련된 여러 숫자 값들(padding, transform, 너비/높이 등)이 코드 곳곳에 "매직 넘버"로 하드코딩되어 있습니다. (예: 40, 50, 120, 2200, 1238) 이는 코드의 가독성을 떨어뜨리고, 나중에 값을 일관성 있게 변경하기 어렵게 만듭니다.

이러한 값들을 컴포넌트 상단에 의미있는 이름의 상수로 선언하여 사용하면 코드의 의도를 더 명확히 하고 유지보수성을 크게 향상시킬 수 있습니다.

예시:

const SCRIPT_BOX_COLLAPSED_HEIGHT = 40;
const SCRIPT_BOX_EXPANDED_HEIGHT = 320; // 이전 댓글에서 제안한 수정값
const SLIDE_AREA_TOP_PADDING = 50;
const SLIDE_TRANSLATE_Y_ON_COLLAPSE = 120;
const SLIDE_WIDTH = 2200;
const SLIDE_HEIGHT = 1238;

@AndyH0ng AndyH0ng changed the title feat: SlidePage 구현과 ScriptBox 애니메이션 변화 (#18) feat/SlidePage 구현과 ScriptBox 애니메이션 변화 Jan 3, 2026
@github-actions github-actions bot added component 컴포넌트 관련 변경 page 페이지 관련 변경 labels Jan 3, 2026
@wonellyho
Copy link
Collaborator Author

✨ 변경 내용

  1. SlidePage 레이아웃 개선
  • 노트북(작은화면)에서는 슬라이드가 ScirptBox에 의해 가려지는 문제가 있었습니다.
    -> a-=spect-video를 사용해 16:9 슬라이드 비율을 고정하고, 작은 화면에서도 “한 장”이 잘리지 않도록 max-w를 세로 기준(calc)으로 제한
  • 슬라이드/ScriptBox를 동일한 컨테이너 폭(max-w)으로 감싸 항상 너비가 일치하도록 수정
    ScriptBox 토글 시 슬라이드가 독립적으로 살짝 내려오는 애니메이션 유지 + 슬라이드/ScriptBox 사이 여백(h-6) 확보
  1. 전체 상단 여백 추가

  2. 왼쪽 썸네일 리스트의 흰 배경 제거, 기본 gray 톤으로 통일

  3. ScriptBox 높이 개선

  • 고정 높이(h-80) 대신 clamp(12rem, 30vh, 19rem)로 변경하여 작은 화면에서 과도하게 커지지 않도록 조정
  • 접힘 상태에서 content 영역은 h-0으로 처리하여 불필요한 영역 잔상 제거
  1. ScriptBoxContent 스크롤 UX 개선
  • “텍스트가 빈 상태에서도 스크롤바가 보이는 현상” -> textarea에 overflow-y-auto 넣어서 개선

🔧 참고 사항

  • Figma 시안처럼 화면을 가득 채우는 레이아웃 구현을 목표로 했습니다. 슬라이드가 16:9 비율을 유지한 상태로 항상 전체 노출되어야 하는게 우선인 것 같아 이를 중점으로 작업함

  • 화면 높이가 제한된 환경(작은 모니터)에서는 해당 비율을 유지할 경우 좌우에 여백이 일부 발생할 수 있습니다.
    이는 슬라이드가 잘리거나 가려지는 문제를 방지.

  • 슬라이드 자체에 스크롤을 적용하는 방식으로도 문제를 해결할 수 있었지만,
    하나의 슬라이드는 한 화면에 온전히 보여야 하는 것이 PD 입장에서 더 친화적라고 생각했습니다.
    현재 구조(슬라이드 전체 고정 + ScriptBox 분리)를 유지했습니다.

<큰 모니터>
image
<작은 모니터>
image

@wonellyho wonellyho merged commit 7a01d82 into develop Jan 3, 2026
4 checks passed
@AndyH0ng AndyH0ng deleted the feat/pd-sld-01#18 branch January 12, 2026 13:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

component 컴포넌트 관련 변경 page 페이지 관련 변경

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: PD_SLD_01 화면 구현

2 participants