-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Feat] Home 페이지 퍼블리싱 #128
[Feat] Home 페이지 퍼블리싱 #128
Conversation
Walkthrough이번 PR은 전반적인 UI 및 테마 스타일 업데이트와 함께 새로운 React 컴포넌트와 유틸리티 함수들을 추가합니다. 전역 CSS에서는 미디어 쿼리를 통해 반응형 폰트 크기를 설정하고, 폰트 패밀리를 사용자 정의 변수로 변경했습니다. 또한 Home 및 관련 구성 요소(예: AccountItem, AccountSidebar, CTACard, ContentGroupCard, PersonalCard, UploadContentCard)들이 새로 도입되었으며, 페이지 파일과 타입 정의, 유틸리티 함수 등이 보강되었습니다. 테마 및 UI 관련 파일들에서는 기존의 Changes
Sequence Diagram(s)sequenceDiagram
participant U as 사용자
participant H as Home 컴포넌트
participant A as Account 관련 컴포넌트
participant C as CTA/컨텐츠 카드들
U->>H: 페이지 로드 요청
H->>A: AccountSidebar 및 AccountItem 렌더링
H->>C: CTACard, PersonalCard, UploadContentCard 등 렌더링
U->>C: 버튼 클릭 및 항목 선택 이벤트 발생
C->>H: 이벤트 콜백 호출
Suggested labels
Suggested reviewers
Poem
Warning There were issues while running some tools. Please review the errors and either fix the tool’s configuration or disable the tool if it’s a critical failure. 🔧 ESLint
apps/web/src/app/(prompt)/edit/[agentId]/[postGroupId]/log/[postId]/_components/LogSidebar/LogSidebar.css.tsOops! Something went wrong! :( ESLint: 9.17.0 Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@repo/eslint-config' imported from /eslint.config.mjs apps/web/src/app/(prompt)/edit/[agentId]/[postGroupId]/detail/_components/PostEditor/PostEditor.css.tsOops! Something went wrong! :( ESLint: 9.17.0 Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@repo/eslint-config' imported from /eslint.config.mjs apps/web/src/app/(prompt)/edit/[agentId]/[postGroupId]/log/[postId]/_components/LogContentItem/LogContentItem.css.tsOops! Something went wrong! :( ESLint: 9.17.0 Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@repo/eslint-config' imported from /eslint.config.mjs
✨ Finishing Touches
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 15
🔭 Outside diff range comments (1)
apps/web/src/components/common/MainBreadcrumbItem/MainBreadcrumbItem.tsx (1)
5-5
: 🛠️ Refactor suggestion사용하지 않는 import 제거 필요
InsteadLogoImage
import가 더 이상 사용되지 않으므로 제거해 주세요.-import InsteadLogoImage from '@web/assets/images/instead.webp';
🧹 Nitpick comments (20)
apps/web/src/components/common/MainBreadcrumbItem/MainBreadcrumbItem.tsx (1)
38-85
: SVG 그라디언트 색상을 상수로 추출하면 좋을 것 같습니다.유지보수성을 높이기 위해 하드코딩된 그라디언트 색상값들을 상수나 테마 변수로 추출하는 것을 고려해 보세요.
+const GRADIENT_COLORS = { + start: '#142FE6', + end: '#7B61FF', +} as const; function InsteadLogo() { return ( <svg width="120" height="32" viewBox="0 0 120 32" fill="none" xmlns="http://www.w3.org/2000/svg" > {/* ... paths ... */} <defs> <linearGradient id="paint0_linear_4947_13638" x1="-5.24203" y1="3.16043" x2="89.4571" y2="66.9482" gradientUnits="userSpaceOnUse" > - <stop stopColor="#142FE6" /> - <stop offset="1" stopColor="#7B61FF" /> + <stop stopColor={GRADIENT_COLORS.start} /> + <stop offset="1" stopColor={GRADIENT_COLORS.end} /> </linearGradient> <linearGradient id="paint1_linear_4947_13638" x1="-2.30333" y1="23.7561" x2="16.037" y2="53.3906" gradientUnits="userSpaceOnUse" > - <stop stopColor="#142FE6" /> - <stop offset="1" stopColor="#7B61FF" /> + <stop stopColor={GRADIENT_COLORS.start} /> + <stop offset="1" stopColor={GRADIENT_COLORS.end} /> </linearGradient> </defs> </svg> ); }packages/ui/src/components/Icon/assets/IconInstead.tsx (1)
3-3
: 사용되지 않는 인터페이스를 제거하세요.
IconInsteadProps
인터페이스가 정의되어 있지만 사용되지 않습니다. 컴포넌트가 직접SVGProps<SVGSVGElement>
를 사용하고 있으므로 이 인터페이스는 불필요합니다.-interface IconInsteadProps extends React.SVGProps<SVGSVGElement> {}
apps/web/src/utils/getFormattedYearMonthDayHour.ts (1)
7-27
: 날짜 형식 변환 함수의 개선이 필요합니다.다음과 같은 개선사항을 제안합니다:
- 잘못된 날짜 입력에 대한 예외 처리가 필요합니다.
- 국제화를 위해
Intl.DateTimeFormat
의 사용을 고려해보세요.다음과 같이 개선하는 것을 제안합니다:
export function getFormattedYearMonthDayHour( inputDatetime: Date | string ): string { + try { const date = typeof inputDatetime === 'string' ? new Date(inputDatetime) : inputDatetime; + if (isNaN(date.getTime())) { + throw new Error('유효하지 않은 날짜입니다.'); + } + + const formatter = new Intl.DateTimeFormat('ko-KR', { + year: 'numeric', + month: 'numeric', + day: 'numeric', + hour: 'numeric', + hour12: true, + }); + + return formatter.format(date) + .replace('년 ', '년 ') + .replace('월 ', '월 ') + .replace('일 ', '일 '); + } catch (error) { + console.error('날짜 형식 변환 중 오류 발생:', error); + throw error; + } }apps/web/src/app/home/_components/CTACard/CTACard.css.ts (1)
13-13
: 박스 그림자 값의 단위를 일관되게 사용하세요.박스 그림자 값에
rem
단위를 일관되게 사용하지 않았습니다.다음과 같이 수정하는 것을 제안합니다:
- boxShadow: '0rem 1.6rem 1.6rem 0rem rgba(74, 98, 139, 0.10)', + boxShadow: '0 1.6rem 1.6rem 0 rgba(74, 98, 139, 0.10)',apps/web/src/app/home/_components/AccountItem/AccountItem.css.ts (2)
10-12
: hover 효과에 transition 속성 추가 필요사용자 경험을 향상시키기 위해 hover 효과에 부드러운 전환 애니메이션을 추가하는 것이 좋습니다.
':hover': { marginLeft: '0.8rem', + transition: 'margin-left 0.2s ease-in-out', },
15-31
: 이미지 스타일 중복 제거 필요
image
와emptyImage
스타일에 중복된 속성들이 있습니다. 공통 스타일을 추출하여 재사용하면 유지보수가 용이해질 것 같습니다.+const baseImageStyle = style({ + borderRadius: '100%', + width: '6rem', + height: '6rem', + border: `0.1rem solid ${tokens.colors.grey200}`, + backgroundColor: tokens.colors.grey25, +}); -export const image = style({ - borderRadius: '100%', - width: '6rem', - height: '6rem', - backgroundColor: tokens.colors.grey25, - border: `0.1rem solid ${tokens.colors.grey200}`, +export const image = style([ + baseImageStyle, + { objectFit: 'cover', -}); +}]); -export const emptyImage = style({ - borderRadius: '100%', - width: '6rem', - height: '6rem', - border: `0.1rem solid ${tokens.colors.grey200}`, - backgroundColor: tokens.colors.grey25, +export const emptyImage = style([ + baseImageStyle, + { flexShrink: 0, -}); +}]);apps/web/src/app/home/_components/UploadContentCard/UploadContentCard.css.ts (1)
28-38
: hover 효과 개선 필요
uploadContentItem
의 hover 효과에서 패딩 변경이 부자연스러울 수 있습니다. transform을 사용하면 더 부드러운 효과를 얻을 수 있습니다.export const uploadContentItem = style({ display: 'flex', justifyContent: 'space-between', borderRadius: tokens.radius[12], padding: '1.2rem 1.6rem 1.2rem 1.2rem', cursor: 'pointer', + transition: 'all 0.2s ease-in-out', ':hover': { backgroundColor: tokens.colors.hover, - padding: '1.2rem 1.6rem 1.2rem 2rem', + transform: 'translateX(0.8rem)', }, });apps/web/src/app/home/_components/CTACard/CTACard.tsx (2)
40-40
: 이미지 alt 텍스트 개선 필요접근성을 위해 더 구체적인 alt 텍스트를 제공하는 것이 좋습니다. 현재 'create image'는 이미지의 목적이나 내용을 충분히 설명하지 못합니다.
-<Image className={createImage} src={imageSrc} alt={'create image'} /> +<Image className={createImage} src={imageSrc} alt={`${text} 관련 일러스트레이션`} />
22-26
: motion 설정을 상수로 분리재사용성과 일관성을 위해 motion 관련 설정을 상수로 분리하는 것이 좋습니다.
+const HOVER_ANIMATION = { + whileHover: { y: -8 }, + transition: { duration: 0.3 } +} as const; <motion.div className={card} - whileHover={{ y: -8 }} - transition={{ duration: 0.3 }} + {...HOVER_ANIMATION} >packages/theme/src/tokens/colors.ts (1)
11-11
: 색상 이름 및 문서화 개선 필요hover 색상의 이름과 문서화를 개선하면 좋을 것 같습니다:
- 기존
shadow
색상과 비슷한 용도이므로 일관된 이름 사용- 색상의 용도에 대한 주석 추가
- hover: 'rgba(94, 134, 176, 0.08)', + // 호버 상태에서 사용되는 반투명 오버레이 색상 + hoverOverlay: 'rgba(94, 134, 176, 0.08)',apps/web/src/app/home/_components/PersonalCard/PersonalCard.css.ts (2)
13-15
: 박스 쉐도우 단위를 픽셀로 변경하는 것이 좋습니다.rem 단위는 루트 폰트 크기에 영향을 받으므로, 박스 쉐도우와 같은 시각적 효과에는 픽셀 단위를 사용하는 것이 더 안정적입니다.
':hover': { - boxShadow: '0rem 1.6rem 1.6rem 0rem rgba(74, 98, 139, 0.10)', + boxShadow: '0px 16px 16px 0px rgba(74, 98, 139, 0.10)', },
4-16
: 반응형 디자인을 위한 미디어 쿼리가 필요합니다.PR 목표에 따르면 1680px 미만의 화면에 대한 폰트 크기 조정이 필요합니다. 카드 컴포넌트의 패딩과 갭도 이에 맞춰 조정되어야 합니다.
export const card = style({ width: '100%', display: 'flex', flexDirection: 'column', gap: '2rem', borderRadius: tokens.radius[24], backgroundColor: tokens.colors.grey0, padding: '2.8rem 3.2rem', ':hover': { boxShadow: '0px 16px 16px 0px rgba(74, 98, 139, 0.10)', }, + '@media': { + 'screen and (max-width: 1680px)': { + gap: '1.6rem', + padding: '2.2rem 2.6rem', + }, + }, });apps/web/src/app/home/_components/ContentGroupCard/ContentGroupCard.css.ts (1)
31-38
: 이미지 크기에 대한 반응형 처리가 필요합니다.고정된 최소 너비는 작은 화면에서 레이아웃을 깨뜨릴 수 있습니다.
export const contentGroupImage = style({ width: '100%', height: 'auto', - minWidth: '20rem', + minWidth: 'min(20rem, 100%)', aspectRatio: '392 / 224', objectFit: 'cover', borderRadius: tokens.radius[16], });apps/web/src/app/home/_components/AccountItem/AccountItem.tsx (1)
32-32
: onClick 이벤트 핸들러 타입 안전성 개선이 필요합니다.
onClick
이 옵셔널이므로 undefined일 수 있습니다.다음과 같이 수정하는 것을 제안합니다:
- <div className={wrapper} onClick={onClick}> + <div className={wrapper} onClick={onClick ?? undefined}>apps/web/src/app/home/_components/PersonalCard/PersonalCard.tsx (1)
35-39
: 성능 최적화를 위한 애니메이션 설정이 필요합니다.motion 컴포넌트의 애니메이션이 레이아웃 변경을 발생시킬 수 있습니다.
다음과 같이
layout={false}
를 추가하는 것을 제안합니다:<motion.div className={card} whileHover={{ y: -8 }} transition={{ duration: 0.3 }} + layout={false} >
apps/web/src/app/home/_components/ContentGroupCard/ContentGroupCard.tsx (3)
41-41
: 안전하지 않은 옵셔널 체이닝 사용이 있습니다.
postGroups?.length
는postGroups
가 필수 prop이므로 불필요합니다.다음과 같이 수정하는 것을 제안합니다:
- {postGroups?.length || 0} + {postGroups.length}
82-88
: 이미지 최적화가 필요합니다.Next.js Image 컴포넌트에 성능 최적화를 위한 속성들이 누락되어 있습니다.
다음과 같이 수정하는 것을 제안합니다:
<Image width={392} height={224} src={item.thumbnailImageUrl} alt="content thumbnail" className={contentGroupImage} + priority={false} + loading="lazy" + quality={75} />
109-112
: 드롭다운 아이템의 value가 의미 있는 값이 아닙니다.드롭다운 아이템의
value
가 "option1"로 하드코딩되어 있습니다.다음과 같이 수정하는 것을 제안합니다:
<Dropdown.Item - value="option1" + value="delete" className={dropdownItem} onClick={onItemRemove} >apps/web/src/app/home/Home.tsx (1)
114-116
: 콘솔 로그 제거가 필요합니다.프로덕션 코드에 디버깅용 콘솔 로그가 남아있습니다.
- console.log('클릭한 아이템 id:', id); + // TODO: 아이템 클릭 핸들링 구현apps/web/src/app/test/page.tsx (1)
475-496
: 주석 처리된 코드를 정리해주세요.사용하지 않는 코드는 제거하는 것이 좋습니다.
- {/* <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}> - <Chip variant="green" leftAddon={<Chip.Icon variant="green" />}> - 업로드할 글 - </Chip> - ... - </div> */}
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
packages/ui/src/assets/icons/IconInstead.svg
is excluded by!**/*.svg
📒 Files selected for processing (30)
apps/web/src/app/globals.css
(1 hunks)apps/web/src/app/home/Home.tsx
(1 hunks)apps/web/src/app/home/_components/AccountItem/AccountItem.css.ts
(1 hunks)apps/web/src/app/home/_components/AccountItem/AccountItem.tsx
(1 hunks)apps/web/src/app/home/_components/AccountSidebar/AccountSidebar.css.ts
(1 hunks)apps/web/src/app/home/_components/AccountSidebar/AccountSidebar.tsx
(1 hunks)apps/web/src/app/home/_components/CTACard/CTACard.css.ts
(1 hunks)apps/web/src/app/home/_components/CTACard/CTACard.tsx
(1 hunks)apps/web/src/app/home/_components/ContentGroupCard/ContentGroupCard.css.ts
(1 hunks)apps/web/src/app/home/_components/ContentGroupCard/ContentGroupCard.tsx
(1 hunks)apps/web/src/app/home/_components/PersonalCard/PersonalCard.css.ts
(1 hunks)apps/web/src/app/home/_components/PersonalCard/PersonalCard.tsx
(1 hunks)apps/web/src/app/home/_components/UploadContentCard/UploadContentCard.css.ts
(1 hunks)apps/web/src/app/home/_components/UploadContentCard/UploadContentCard.tsx
(1 hunks)apps/web/src/app/home/page.css.ts
(1 hunks)apps/web/src/app/home/page.tsx
(1 hunks)apps/web/src/app/page.tsx
(1 hunks)apps/web/src/app/test/page.tsx
(1 hunks)apps/web/src/components/common/MainBreadcrumbItem/MainBreadcrumbItem.css.ts
(1 hunks)apps/web/src/components/common/MainBreadcrumbItem/MainBreadcrumbItem.tsx
(1 hunks)apps/web/src/types/agent.ts
(1 hunks)apps/web/src/types/index.ts
(1 hunks)apps/web/src/types/post.ts
(2 hunks)apps/web/src/utils/getFormattedDatetime.ts
(1 hunks)apps/web/src/utils/getFormattedYearMonthDayHour.ts
(1 hunks)apps/web/src/utils/index.ts
(1 hunks)packages/theme/src/tokens/colors.ts
(1 hunks)packages/ui/src/components/Button/Button.css.ts
(1 hunks)packages/ui/src/components/Icon/assets.ts
(2 hunks)packages/ui/src/components/Icon/assets/IconInstead.tsx
(1 hunks)
✅ Files skipped from review due to trivial changes (4)
- apps/web/src/app/home/page.tsx
- apps/web/src/utils/index.ts
- apps/web/src/app/home/_components/AccountSidebar/AccountSidebar.css.ts
- apps/web/src/components/common/MainBreadcrumbItem/MainBreadcrumbItem.css.ts
🧰 Additional context used
🪛 Biome (1.9.4)
apps/web/src/app/test/page.tsx
[error] 260-260: Avoid using unnecessary Fragment.
A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
(lint/complexity/noUselessFragments)
🔇 Additional comments (9)
apps/web/src/components/common/MainBreadcrumbItem/MainBreadcrumbItem.tsx (1)
9-36
: 구현이 깔끔합니다!타입 정의가 명확하고 클릭 핸들러 로직이 잘 구현되어 있습니다.
packages/ui/src/components/Icon/assets.ts (1)
18-18
: 변경사항이 적절합니다!새로운 아이콘 임포트와 매핑이 알파벳 순서에 맞게 잘 추가되었습니다.
Also applies to: 56-56
apps/web/src/app/page.tsx (1)
1-4
: 홈 페이지 렌더링 로직 단순화
이전의 복잡한Home
컴포넌트 대신HomePage
를 직접 반환하도록 변경되어 구조가 간소화되었습니다. 필요한 UI 로직과 상태 관리는HomePage
내부로 정상 이관되었는지 확인해 주세요.apps/web/src/types/index.ts (1)
3-3
: 새로운 에이전트 타입 Export 추가
AgentPlan
,AgentTone
타입을 새로 export하여, 다른 모듈에서 활용할 수 있게 되었습니다. 문제 없어 보입니다.apps/web/src/types/agent.ts (2)
1-6
: 에이전트 플랜 타입 및 한글 매핑
AgentPlan
타입을 통해BASIC
,PREMIUM
을 명시적으로 구분하고, 각 플랜에 대해 한글 매핑을 제공하여 가독성과 유지보수성이 향상되었습니다.
8-15
: 에이전트 톤 타입 및 매핑 추가
AgentTone
타입에 다양한 톤을 정의하고,as const
를 사용해 각각에 대한 한글 표현을 안전하게 매핑함으로써 명확한 선택 옵션을 제공하고 있습니다.packages/ui/src/components/Button/Button.css.ts (1)
12-12
: 버튼 너비가 콘텐츠에 맞게 조정되도록 개선되었습니다.콘텐츠의 길이에 따라 버튼의 너비가 자동으로 조정되어 더 나은 사용자 경험을 제공합니다.
apps/web/src/app/test/page.tsx (1)
79-79
: TODO 주석을 해결해주세요.디자이너와 협의하여 스타일을 확정해야 합니다.
apps/web/src/app/globals.css (1)
19-21
: 화면 크기에 따른 폰트 크기 조정이 적절한지 확인이 필요합니다.1680px 이하에서 폰트 크기를 50%로 줄이는 것이 너무 급격한 변화일 수 있습니다. 중간 단계의 브레이크포인트 추가를 고려해보세요.
apps/web/src/app/home/_components/ContentGroupCard/ContentGroupCard.css.ts
Show resolved
Hide resolved
} | ||
|
||
body { | ||
color: var(--foreground); | ||
background: var(--background); | ||
font-family: Arial, Helvetica, sans-serif; | ||
font-family: var(--font-pretendard); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
커스텀 폰트 변수가 정의되어 있는지 확인이 필요합니다.
--font-pretendard
변수가 올바르게 정의되어 있는지 확인해주세요.
🏁 Script executed:
#!/bin/bash
# Description: Check if the font variable is defined
# Search for the font variable definition
rg --type css "font-pretendard"
Length of output: 171
커스텀 폰트 변수 정의 추가 필요
현재 apps/web/src/app/globals.css
(라인 27)에서 아래와 같이 변수 --font-pretendard
를 사용하고 있습니다.
font-family: var(--font-pretendard);
검증 스크립트 결과, 동일한 변수가 apps/web/src/app/page.module.css
와 globals.css
에서 사용되는 것으로 확인되었으나, 해당 변수를 정의하는 코드(예: :root { --font-pretendard: ...; }
)는 검색되지 않았습니다.
- 확인 사항:
--font-pretendard
변수가 전역 또는 관련 CSS 파일(예::root
블록 내)에서 올바르게 정의되어 있는지 재검토해 주세요.- 만약 정의가 누락되었다면, 적절한 위치에 명시적으로 변수 정의를 추가해주시기 바랍니다.
</Link> | ||
</Breadcrumb.Item> | ||
); | ||
} | ||
|
||
function InsteadLogo() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p3: 이거 원래대로 되돌려주실 수 있을까요? 그라데이션이 있는 이미지라 webp로 했어서요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
요러한 내용도 있던데 참고하셔도 좋을 것 같아요!
ref: https://fe-developers.kakaoent.com/2022/220714-next-image/
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
제 환경에서는 왼(png) 오(svg) 화질 차이가 심한데 민성님 환경에서는 괜찮으신가요?
요건 디자이너님께 비트를 올려달라고 하면 될 것 같네요..!
저는 자잘하더라도 next/images의 이점을 활용한 최적화의 우선순위가 높다고 생각했어서 말씀드린거구, 사용자가 메인 로고가 확대했을 때 깨지는지 확인할 거라고는 생각을 못했어요.
서로가 생각했던 이점에 대한 관점이 달랐던 것 같아요. 나연님의 우선순위가 확대했을 때 깨지지 않는 이미지라면, svg로 반영해도 좋아요~!
다만, svg 파일을 import 해서 사용하는 게 좋지 않을까요? function으로 감싸는 이유도 궁금해요.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
비트 올리는 게 어떤 건지 모르겠는데 디자이너 분들께 여쭤 보고 생각보다 흐리지 않게 개선할 수 있으면 민성님께서 확인해 주셨던 것처럼 용량이 더 적은 png를 사용하는 것도 좋을 것 같아요. 이건 제가 오늘 여쭤 보고 변경해야 하면 api 연동 pr에서 함께 반영해 둘게요!
svg 파일을 그대로 import 하면 리액트 컴포넌트 형태로 import 하게 되는데 web app 내에는 svgr 관련 라이브러리를 설치해 두지 않았고 이걸 사용하기 위해 해당 라이브러리를 설치하면 용량이 더 늘어날 것 같아서 직접 감쌌어요! 근데 저희 이미 svgr 설치를 했었군요?... import로 수정하겠습니다 ㅎㅎ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
네 감사합니다
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
반영했습니다! 확인 부탁드려요!
@@ -0,0 +1,47 @@ | |||
import { tokens } from '@repo/theme'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p3: ThemeProvider에서 light에 해당하는 색상으로 이미 주입받고 있어서 vars로 변경가능하실까요? 나중에 다른 부분도 token으로 관리되는 부분 vars로 변경이 필요할 것 같아요.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
헉 지금까지 토큰 추가되면 아예 vars에 추가를 안 했어서 현재 vars로는 토큰을 모두 사용할 수 없거든요(purple 계열 등...) 이건 일괄 수정 pr 올려도 될까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
여기서 진행해주셔도 됩니다~ 다른 부분은 다 확인해서 추가되는 커밋으로 확인할게요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
요거 방금 진행했습니다!
apps/web/src/app/home/_components/UploadContentCard/UploadContentCard.tsx
Outdated
Show resolved
Hide resolved
apps/web/src/app/home/_components/ContentGroupCard/ContentGroupCard.tsx
Outdated
Show resolved
Hide resolved
apps/web/src/app/home/_components/UploadContentCard/UploadContentCard.tsx
Outdated
Show resolved
Hide resolved
apps/web/src/app/test/page.tsx
Outdated
@@ -0,0 +1,668 @@ | |||
'use client'; | |||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p4: 이젠 이거 없애도 될 것 같아요! JSDoc으로 충분히 설명이 된다고 생각해요.
tone: AgentTone; | ||
customTone?: string; | ||
introduction?: string; | ||
onIconClick: () => void; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p4: 전반적으로 VoidFunction으로 변경해도 되겠네요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
VoidFunction 타입을 선호하시는 이유가 있을까요?? 기능적으로 차이가 없는 것 같아서요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
VoidFunction이 명시적이고, 자동완성이 되어서 편해요! 그리고, typescript에서 제공하는 내장타입이 있다면 그걸 사용하자는 주의여서요
나연님 코드에 충분한 근거가 있으실거라 믿고 p4로 지정한거기도 하고, 참고삼아 말씀드린거예요! 굳이굳이 안바꾸셔도 됩니다.
@minseong0324 리뷰 반영했습니다! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (2)
apps/web/src/app/home/_components/ContentGroupCard/ContentGroupCard.tsx (2)
28-56
: 빈 배열 처리에 대한 개선이 필요합니다.
postGroups.map
을 실행하기 전에 빈 배열인 경우에 대한 처리가 없습니다. 데이터가 없는 경우 사용자에게 적절한 메시지를 보여주는 것이 좋을 것 같습니다.다음과 같이 개선해 보세요:
<div className={items}> + {postGroups.length === 0 ? ( + <Text fontSize={18} color="grey400"> + 생성된 컨텐츠가 없습니다 + </Text> + ) : ( {postGroups.map((item) => ( <ContentGroupItem key={item.id} onItemClick={() => onItemClick(item.id)} onItemRemove={() => onItemRemove(item.id)} item={item} /> ))} + )} </div>
82-88
: 이미지 반응형 처리가 필요합니다.현재 이미지 크기가 고정값으로 설정되어 있어 화면 크기에 따라 적절히 조절되지 않을 수 있습니다. 또한 alt 텍스트가 더 구체적이면 좋겠습니다.
다음과 같이 개선해 보세요:
<Image - width={392} - height={224} + width="100%" + height="auto" src={item.thumbnailImageUrl} - alt="content thumbnail" + alt={`${item.topic} 컨텐츠 썸네일`} className={contentGroupImage} />
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
apps/web/src/app/home/_components/CTACard/CTACard.css.ts
(1 hunks)apps/web/src/app/home/_components/ContentGroupCard/ContentGroupCard.tsx
(1 hunks)apps/web/src/app/home/_components/UploadContentCard/UploadContentCard.tsx
(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
- apps/web/src/app/home/_components/CTACard/CTACard.css.ts
- apps/web/src/app/home/_components/UploadContentCard/UploadContentCard.tsx
🔇 Additional comments (1)
apps/web/src/app/home/_components/ContentGroupCard/ContentGroupCard.tsx (1)
21-26
: 타입 정의가 명확하고 깔끔합니다!props 타입이 잘 정의되어 있으며, 이전 리뷰에서 논의된 대로 id를 number 타입으로 통일한 것이 좋습니다.
Also applies to: 58-62
<motion.div | ||
className={contentGroupItem} | ||
onClick={onItemClick} | ||
initial="rest" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
클릭 이벤트 전파 방지가 필요합니다.
현재 컨테이너의 onClick
이벤트와 드롭다운 메뉴의 클릭 이벤트가 충돌할 수 있습니다. 드롭다운 영역에서는 컨테이너의 클릭 이벤트가 발생하지 않도록 처리가 필요합니다.
다음과 같이 수정해 주세요:
<motion.div
className={contentGroupItem}
- onClick={onItemClick}
+ onClick={(e) => {
+ // 드롭다운 영역 클릭 시 이벤트 전파 방지
+ if (e.target.closest(`.${dropdownWrapper}`)) return;
+ onItemClick();
+ }}
initial="rest"
whileHover="hover"
>
Also applies to: 102-120
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
🧹 Nitpick comments (16)
packages/ui/src/components/Spacing/Spacing.tsx (1)
14-19
: 조건문을 최적화할 수 있습니다.현재 코드에서는
row
와column
방향 모두 동일한 값vars.space[size]
를 반환하고 있습니다. 조건문을 단순화하여 가독성을 높일 수 있습니다.다음과 같이 리팩토링하는 것을 제안합니다:
const sizeValue = - direction === 'row' - ? vars.space[size] - : direction === 'column' - ? vars.space[size] - : 'auto'; + direction === 'row' || direction === 'column' + ? vars.space[size] + : 'auto';packages/ui/src/components/Button/LineButtonAnimate.css.ts (1)
33-34
: 그라데이션 스타일 개선을 제안드립니다.복잡한 그라데이션 값을 변수로 분리하면 유지보수가 더 용이해질 것 같습니다.
다음과 같이 개선해보시는 건 어떨까요?
+const BUTTON_GRADIENT = 'linear-gradient(115deg, #B68AE7 44.22%, #3348D6 48.73%, #9290DC 51.48%, #F8B3EC 55.15%)'; export const gradient = style({ // ...other properties borderRadius: vars.borderRadius[12], - backgroundImage: `linear-gradient(115deg, #B68AE7 44.22%, #3348D6 48.73%, #9290DC 51.48%, #F8B3EC 55.15%);`, + backgroundImage: BUTTON_GRADIENT, // ...other properties });apps/web/src/app/home/page.css.ts (2)
4-12
: 반응형 디자인을 위한 미디어 쿼리 추가 필요
background
스타일에 작은 화면 크기를 위한 반응형 처리가 필요합니다.다음과 같이 미디어 쿼리를 추가하는 것을 제안합니다:
export const background = style({ maxWidth: '100%', height: '100vh', margin: '0 auto', paddingTop: '8rem', background: 'linear-gradient(0deg, #F6F7FC 0%, #F6F7FC 100%), linear-gradient(180deg, #F8F8FF 0%, #F4F5F9 48.16%, #E9F0FA 84.19%)', overflow: 'hidden', + '@media': { + 'screen and (max-width: 1680px)': { + paddingTop: '6rem', + }, + }, });
32-68
: UI 요소들의 반응형 처리 개선 필요이미지 크기와 여백이 고정값으로 설정되어 있어 작은 화면에서 UI가 부자연스러울 수 있습니다.
다음과 같이 반응형 처리를 추가하는 것을 제안합니다:
export const image = style({ borderRadius: '100%', width: '4rem', height: '4rem', backgroundColor: vars.colors.grey25, border: `0.1rem solid ${vars.colors.grey200}`, objectFit: 'cover', + '@media': { + 'screen and (max-width: 1680px)': { + width: '3.2rem', + height: '3.2rem', + }, + }, }); export const cardRow = style({ display: 'flex', gap: '2.4rem', + '@media': { + 'screen and (max-width: 1680px)': { + gap: '1.6rem', + }, + }, }); export const cardColumn = style({ display: 'flex', flexDirection: 'column', gap: '2.4rem', + '@media': { + 'screen and (max-width: 1680px)': { + gap: '1.6rem', + }, + }, });packages/ui/src/components/Toast/Toast.css.ts (2)
5-7
: 반응형 디자인 고려 필요현재 Toast의 위치가 고정값(
bottom: 40, right: 40
)으로 설정되어 있습니다. 작은 화면에서도 적절하게 표시될 수 있도록 반응형 값을 고려해보시는 것은 어떨까요?export const container = style({ position: 'fixed', - bottom: 40, - right: 40, + bottom: vars.space[40], + right: vars.space[40], padding: `${vars.space[20]} ${vars.space[32]}`, borderRadius: 100, backgroundColor: vars.colors.grey700, color: vars.colors.grey, });
20-24
: 타이포그래피 일관성 개선 제안
fontSize
와fontWeight
는vars
시스템을 사용하고 있지만,lineHeight
는 고정값을 사용하고 있습니다. 일관성을 위해lineHeight
도vars
시스템을 사용하는 것이 좋을 것 같습니다.export const message = style({ fontSize: vars.typography.fontSize[20], fontWeight: vars.typography.fontWeight.semibold, - lineHeight: '2.4rem', + lineHeight: vars.typography.lineHeight.normal, });packages/ui/src/components/Text/Text.tsx (1)
1-1
: 테마 시스템 마이그레이션이 잘 이루어졌습니다.
tokens
에서vars
로의 마이그레이션이 일관성 있게 적용되었습니다. 다만, 이러한 변경사항을 문서화하는 것이 좋을 것 같습니다.컴포넌트 문서나 CHANGELOG에 다음과 같은 변경사항을 추가하는 것을 제안합니다:
tokens
→vars
마이그레이션- 스타일 시스템 업데이트
Also applies to: 19-19, 39-41
apps/web/src/app/home/_components/PersonalCard/PersonalCard.css.ts (2)
4-16
: 박스 쉐도우 값을 테마 변수로 이동하는 것을 고려해보세요.현재 박스 쉐도우 값이 하드코딩되어 있습니다. 일관성 있는 디자인 시스템을 위해 이 값을 테마 변수로 이동하는 것이 좋습니다.
다음과 같이 수정하는 것을 제안합니다:
// @repo/theme에서 +export const shadows = { + card: '0rem 1.6rem 1.6rem 0rem rgba(74, 98, 139, 0.10)', +}; // PersonalCard.css.ts에서 ':hover': { - boxShadow: '0rem 1.6rem 1.6rem 0rem rgba(74, 98, 139, 0.10)', + boxShadow: vars.shadows.card, },
45-62
: 브라우저 호환성을 위한 fallback 스타일을 추가하는 것이 좋습니다.webkit-line-clamp를 지원하지 않는 브라우저를 위한 대체 스타일이 필요합니다.
다음과 같이 fallback 스타일을 추가하는 것을 제안합니다:
export const introductionText = style({ overflow: 'hidden', whiteSpace: 'normal', textOverflow: 'ellipsis', display: '-webkit-box', WebkitBoxOrient: 'vertical', WebkitLineClamp: 2, wordBreak: 'keep-all', + maxHeight: '3.6em', // line-height * 2 lines + lineHeight: '1.8em', });apps/web/src/app/home/_components/UploadContentCard/UploadContentCard.css.ts (3)
4-13
: 반응형 디자인 고려가 필요합니다.
maxWidth: '62.8rem'
와 같은 고정된 값은 작은 화면에서 문제가 될 수 있습니다. 미디어 쿼리를 사용하여 반응형으로 처리하는 것을 고려해보세요.예시:
export const card = style({ width: '100%', - maxWidth: '62.8rem', + '@media': { + 'screen and (min-width: 1024px)': { + maxWidth: '62.8rem' + }, + 'screen and (max-width: 1023px)': { + maxWidth: '100%' + } + }, display: 'flex', // ... rest of the styles });
15-21
: 패딩값을 변수로 관리하면 좋을 것 같습니다.
paddingLeft: '1.2rem'
와 같은 값은 여러 곳에서 재사용될 수 있으므로, 테마 변수로 관리하는 것이 좋습니다.import { vars } from '@repo/theme'; + // theme 파일에 spacing 변수 추가 후: export const cardText = style({ display: 'flex', width: '100%', justifyContent: 'space-between', flexShrink: 0, - paddingLeft: '1.2rem', + paddingLeft: vars.spacing[3], // 1.2rem에 해당하는 spacing 값 });
40-47
: 텍스트 요약 부분도 반응형으로 처리가 필요합니다.
maxWidth: '33.2rem'
도 고정된 값 대신 컨테이너의 크기에 따라 동적으로 조정되도록 하는 것이 좋습니다.export const uploadContentSummary = style({ display: 'inline-block', - maxWidth: '33.2rem', + maxWidth: 'calc(100% - 4rem)', // 우측 여백을 고려한 동적 너비 whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis', wordBreak: 'break-all', });packages/theme/src/themes/contract.ts (1)
65-70
: 새로운 색상 시스템에 대한 문서화가 필요합니다.purple 색상 계열이 새롭게 추가되었습니다. 각 색상의 용도와 사용 가이드라인을 문서화해주세요.
packages/theme/src/themes/dark.ts (1)
47-51
: 테마 시스템의 일관성 검토가 필요합니다.
- 삭제 예정인 green 색상들과 새로 추가된 purple 색상들의 사용처를 확인해주세요.
- warning 색상 시스템이 300/500으로 분리되었는데, 이에 따른 마이그레이션 가이드가 필요합니다.
Also applies to: 72-80
packages/ui/src/components/TextField/TextField.css.ts (2)
41-87
: 텍스트 필드의 스크롤바 스타일 최적화를 고려해보세요.현재 스크롤바 스타일링이 webkit 브라우저와 표준 스크롤바에 대해 각각 다르게 정의되어 있습니다. 크로스 브라우저 일관성을 위해 통합된 접근 방식을 고려해볼 수 있습니다.
다음과 같은 방식으로 스크롤바 스타일을 통합할 수 있습니다:
base: { // ... other styles ... - selectors: { - '&::-webkit-scrollbar': { - width: '0.6rem', - }, - '&::-webkit-scrollbar-thumb': { - backgroundColor: vars.colors.grey200, - borderRadius: '0.4rem', - backgroundClip: 'padding-box', - }, - '&::-webkit-scrollbar-track': { - backgroundColor: 'transparent', - }, - // ... other selectors ... - }, - scrollbarWidth: 'thin', - scrollbarColor: `${vars.colors.grey200} transparent`, + '@supports selector(::-webkit-scrollbar)': { + '&': { + '&::-webkit-scrollbar': { + width: '0.6rem', + }, + '&::-webkit-scrollbar-thumb': { + backgroundColor: vars.colors.grey200, + borderRadius: '0.4rem', + backgroundClip: 'padding-box', + }, + '&::-webkit-scrollbar-track': { + backgroundColor: 'transparent', + }, + }, + }, + '@supports not selector(::-webkit-scrollbar)': { + '&': { + scrollbarWidth: 'thin', + scrollbarColor: `${vars.colors.grey200} transparent`, + }, + }, },
89-116
: 제출 버튼의 비활성화 상태 스타일을 개선해보세요.현재
isError
와isDisabled
상태에서 동일한 스타일(cursor: 'not-allowed'
)이 중복 정의되어 있습니다. 이를 통합하여 코드를 더 효율적으로 만들 수 있습니다.다음과 같이 스타일을 통합할 수 있습니다:
variants: { - isError: { - true: { - cursor: 'not-allowed', - }, - }, - isDisabled: { - true: { - cursor: 'not-allowed', - }, - }, + state: { + error: { + cursor: 'not-allowed', + opacity: 0.7, + }, + disabled: { + cursor: 'not-allowed', + opacity: 0.5, + }, + default: {}, + }, },
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
apps/web/src/assets/images/instead.svg
is excluded by!**/*.svg
📒 Files selected for processing (28)
apps/web/src/app/(prompt)/edit/[agentId]/[postGroupId]/detail/_components/PostEditor/PostEditor.css.ts
(3 hunks)apps/web/src/app/(prompt)/edit/[agentId]/[postGroupId]/log/[postId]/_components/LogContentItem/LogContentItem.css.ts
(2 hunks)apps/web/src/app/(prompt)/edit/[agentId]/[postGroupId]/log/[postId]/_components/LogSidebar/LogSidebar.css.ts
(1 hunks)apps/web/src/app/home/_components/AccountItem/AccountItem.css.ts
(1 hunks)apps/web/src/app/home/_components/AccountItem/AccountItem.tsx
(1 hunks)apps/web/src/app/home/_components/CTACard/CTACard.css.ts
(1 hunks)apps/web/src/app/home/_components/ContentGroupCard/ContentGroupCard.css.ts
(1 hunks)apps/web/src/app/home/_components/PersonalCard/PersonalCard.css.ts
(1 hunks)apps/web/src/app/home/_components/UploadContentCard/UploadContentCard.css.ts
(1 hunks)apps/web/src/app/home/page.css.ts
(1 hunks)apps/web/src/components/common/MainBreadcrumbItem/MainBreadcrumbItem.tsx
(2 hunks)packages/theme/src/themes/contract.ts
(3 hunks)packages/theme/src/themes/dark.ts
(2 hunks)packages/theme/src/themes/light.ts
(3 hunks)packages/ui/src/components/Accordion/Accordion.css.ts
(2 hunks)packages/ui/src/components/Button/Button.css.ts
(3 hunks)packages/ui/src/components/Button/LineButtonAnimate.css.ts
(3 hunks)packages/ui/src/components/Checkbox/Checkbox.css.ts
(1 hunks)packages/ui/src/components/Chip/Chip.css.ts
(3 hunks)packages/ui/src/components/Chip/ChipIcon.tsx
(2 hunks)packages/ui/src/components/Dropdown/Dropdown.css.ts
(3 hunks)packages/ui/src/components/Icon/Icon.tsx
(3 hunks)packages/ui/src/components/IconButton/IconButton.css.ts
(2 hunks)packages/ui/src/components/Spacing/Spacing.tsx
(1 hunks)packages/ui/src/components/Spinner/Spinner.css.ts
(2 hunks)packages/ui/src/components/Text/Text.tsx
(3 hunks)packages/ui/src/components/TextField/TextField.css.ts
(2 hunks)packages/ui/src/components/Toast/Toast.css.ts
(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (5)
- apps/web/src/components/common/MainBreadcrumbItem/MainBreadcrumbItem.tsx
- packages/ui/src/components/Button/Button.css.ts
- apps/web/src/app/home/_components/CTACard/CTACard.css.ts
- apps/web/src/app/home/_components/AccountItem/AccountItem.css.ts
- apps/web/src/app/home/_components/ContentGroupCard/ContentGroupCard.css.ts
🔇 Additional comments (39)
packages/ui/src/components/Spacing/Spacing.tsx (1)
2-2
: 테마 시스템 마이그레이션이 잘 이루어졌습니다!
tokens
에서vars
로의 전환이 일관성 있게 잘 적용되었습니다.Also applies to: 10-10, 16-16, 18-18
packages/ui/src/components/Dropdown/Dropdown.css.ts (3)
1-1
: 테마 관리 방식의 일관성 있는 변경을 확인했습니다!
tokens
에서vars
로의 변경이 전체 프로젝트의 테마 관리 방식 업데이트와 일치합니다.
17-19
: 드롭다운 컨텐츠의 스타일 속성이 적절하게 업데이트되었습니다!
backgroundColor
,boxShadow
,borderRadius
속성이 새로운vars
시스템을 사용하도록 일관성 있게 변경되었습니다.
49-54
: 드롭다운 아이템의 스타일 속성이 적절하게 업데이트되었습니다!
borderRadius
와 hover 상태의backgroundColor
속성이 새로운vars
시스템을 사용하도록 일관성 있게 변경되었습니다.packages/ui/src/components/Chip/ChipIcon.tsx (3)
1-1
: 테마 시스템 마이그레이션이 올바르게 적용되었습니다!
@repo/theme
에서vars
를 import하는 변경사항이 전체 코드베이스의 테마 시스템 마이그레이션 방향과 일치합니다.
11-11
: 타입 정의가 개선되었습니다!
typeof vars.colors
를 사용하여 타입을 정의함으로써 테마 시스템과의 타입 안정성이 향상되었습니다. 이는 색상 값이 변경될 때 타입 체크를 통해 오류를 사전에 방지할 수 있는 좋은 방법입니다.
17-24
: 컴포넌트 구현이 깔끔합니다!
- Props 인터페이스가 명확하게 정의되어 있습니다
- 선택적 props에 대한 기본값이 적절히 설정되어 있습니다
- Rest props의 전달이 올바르게 구현되어 있습니다
packages/ui/src/components/Chip/Chip.css.ts (3)
1-1
: 스타일 시스템 마이그레이션이 잘 진행되었습니다!
tokens
에서vars
로의 전환이 일관성 있게 이루어졌습니다. grey와 purple 변형의 색상 정의가 새로운 시스템에 맞게 잘 업데이트되었습니다.Also applies to: 21-22, 25-26
28-31
: green 변형에 blue 색상을 사용하는 것이 의도된 변경인지 확인이 필요합니다.green 변형에서
green200
/green800
대신blue200
/blue800
을 사용하고 있습니다. 이는 시각적/의미적 변화를 초래할 수 있습니다.다음 사항들을 확인해 주시기 바랍니다:
- 이 변경이 의도적인지
- 디자인 시스템 문서에 이 변경사항이 반영되어 있는지
- 이 컴포넌트를 사용하는 다른 페이지들에 미치는 영향
45-45
: addon 색상도 일관성 있게 변경되었습니다.
addonRootRecipe
의 색상 정의도vars
시스템으로 잘 전환되었습니다. 단, green 변형에서blue400
을 사용하는 것이chipRecipe
의 변경사항과 일치하는지 함께 검토가 필요합니다.Also applies to: 48-48, 51-51
packages/ui/src/components/Button/LineButtonAnimate.css.ts (2)
1-1
: 테마 시스템 업데이트가 올바르게 적용되었습니다!
tokens
에서vars
로의 마이그레이션이 일관성 있게 진행되었습니다.
7-8
: PR 목표에 맞게 Button 컴포넌트가 개선되었습니다.
width: fit-content
속성이 추가되어 버튼 크기 조정 이슈가 해결되었습니다.borderRadius
값이 새로운 테마 시스템을 따르도록 업데이트되었습니다.Also applies to: 16-20
apps/web/src/app/home/page.css.ts (1)
21-30
: 카드 컨텐츠의 최소 너비 설정이 문제가 될 수 있습니다.
minWidth: '128rem'
는 작은 화면에서 가로 스크롤을 발생시킬 수 있습니다. 반응형 디자인을 위해 이를 조정해야 합니다.packages/ui/src/components/Toast/Toast.css.ts (3)
2-2
: 테마 시스템 마이그레이션이 올바르게 적용되었습니다!
tokens
에서vars
로의 마이그레이션이 정확하게 이루어졌습니다.
8-8
: 스타일 변수가 올바르게 적용되었습니다!
padding
,backgroundColor
,color
속성들이 새로운vars
시스템을 사용하도록 올바르게 업데이트되었습니다.Also applies to: 10-11
14-18
: 레이아웃 구성이 적절합니다!Flex 레이아웃과 간격 설정이 Toast 컴포넌트에 적합하게 구성되었습니다.
packages/ui/src/components/Checkbox/Checkbox.css.ts (2)
2-2
: 테마 관리 방식 변경이 올바르게 적용되었습니다!
tokens
에서vars
로의 마이그레이션이 일관성 있게 진행되었습니다.
8-8
:✅ Verification successful
스타일 속성이 새로운 테마 시스템에 맞게 업데이트되었습니다.
vars.space[4]
로의 변경이 적절하게 이루어졌습니다. 다만, 다른 컴포넌트들에서도 동일한 방식으로 적용되었는지 확인이 필요합니다.다음 스크립트를 실행하여 다른 컴포넌트들의 일관성을 확인해주세요:
🏁 Script executed:
#!/bin/bash # Description: 다른 컴포넌트들에서 tokens.spacing이 여전히 사용되고 있는지 확인 echo "Checking for remaining tokens.spacing usage..." rg "tokens\.spacing" packages/ui/src/components/ echo "Checking for new vars.space usage..." rg "vars\.space" packages/ui/src/components/Length of output: 2098
스타일 속성이 새로운 테마 시스템에 일관되게 업데이트되었습니다.
Checkbox 컴포넌트의
gap: vars.space[4]
변경 사항은 적절하게 적용되었으며, 검증 결과 다른 컴포넌트들에서도tokens.spacing
대신vars.space
가 일관되게 사용되고 있음을 확인했습니다. 앞으로도 동일한 패턴이 유지되도록 주의해 주시기 바랍니다.apps/web/src/app/home/_components/AccountItem/AccountItem.tsx (2)
40-41
: 이미지 처리 관련 이슈이전 리뷰에서 지적된 사항들이 아직 해결되지 않았습니다.
58-76
: AgentPlanBadge 컴포넌트가 잘 구현되었습니다.Record를 사용하여 plan과 color 매핑을 관리하는 방식이 깔끔합니다.
apps/web/src/app/home/_components/PersonalCard/PersonalCard.css.ts (2)
1-2
: 의존성 import가 적절합니다!테마 변수와 vanilla-extract 스타일 함수를 올바르게 가져오고 있습니다.
31-43
: 유틸리티 스타일이 잘 정의되어 있습니다!레이아웃과 커서 스타일이 명확하고 재사용 가능하게 작성되어 있습니다.
apps/web/src/app/(prompt)/edit/[agentId]/[postGroupId]/log/[postId]/_components/LogSidebar/LogSidebar.css.ts (2)
4-15
: 전반적인 스타일 구조가 잘 작성되었습니다!
- 스타일 네이밍이 명확하고 의미있게 작성되었습니다
- rem 단위를 일관되게 사용하여 반응형 디자인을 지원합니다
- vanilla-extract의 style 함수를 적절히 활용하고 있습니다
1-1
:❓ Verification inconclusive
테마 시스템 업데이트 검증이 필요합니다.
tokens
에서vars
로의 마이그레이션이 올바르게 이루어졌습니다. 다만, 새로운 색상 시스템에서vars.colors.grey
가 이전의tokens.colors.grey0
와 동일한 색상값을 가지는지 확인이 필요합니다.디자인 시스템과의 일관성을 확인하기 위해 다음 스크립트를 실행해주세요:
Also applies to: 8-8
🏁 Script executed:
#!/bin/bash # Description: 테마 파일에서 색상 정의를 확인합니다. # vars와 tokens의 색상 정의를 검색 rg -A 5 "grey[0-9]* =|grey =|colors: {" packages/theme/Length of output: 179
테마 시스템 업데이트 검증 필요 – 색상 값 확인 지연됨
현재
import { vars } from '@repo/theme';
구문을 통해tokens
에서vars
로의 마이그레이션은 정상적으로 적용된 것으로 보입니다. 다만, 변경된 스타일에서 사용되는vars.colors.grey
값이 이전tokens.colors.grey0
의 의도한 색상과 일치하는지 검증이 필요합니다.
문제점:
- 제시된 테마 색상 검증 스크립트 실행 시 정규식 구문 오류가 발생하여 색상 정의를 제대로 확인할 수 없었습니다.
요청사항:
- 아래와 같이 정규식 오류를 수정한 새로운 검증 스크립트를 실행하거나 디자인 시스템 문서를 참조하여
vars.colors.grey
의 색상 값이 디자인 사양과 일치하는지 수동으로 검증해 주시기 바랍니다.#!/bin/bash # Description: 테마 파일 내 "colors: {" 및 "grey" 관련 색상 정의를 확인합니다. # colors 블록 확인 rg -n "colors: {" packages/theme/ # 'grey' 관련 색상 값 확인 rg -n "grey[0-9]+" packages/theme/추가 확인:
- 위 결과를 바탕으로 디자인 문서와 색상 값이 일치하는지 다시 한번 검토 부탁드립니다.
apps/web/src/app/home/_components/UploadContentCard/UploadContentCard.css.ts (2)
1-3
: 테마 변수 사용이 적절합니다!이전 리뷰 의견대로
vars
를 사용하여 테마 변수를 가져오고 있습니다.
23-26
: 깔끔한 구현입니다!flex와 gap을 적절히 사용하여 간단하고 명확하게 구현되었습니다.
apps/web/src/app/(prompt)/edit/[agentId]/[postGroupId]/log/[postId]/_components/LogContentItem/LogContentItem.css.ts (1)
1-1
: 스타일 변수 업데이트가 올바르게 적용되었습니다!
tokens
에서vars
로의 전환이 일관성 있게 이루어졌습니다.Also applies to: 11-11, 13-13
packages/ui/src/components/Accordion/Accordion.css.ts (1)
1-1
: 공유 UI 컴포넌트의 스타일 변수가 성공적으로 업데이트되었습니다!
tokens
에서vars
로의 전환이 올바르게 이루어졌으며, 스타일의 기능적 동등성이 유지되었습니다.Also applies to: 20-20
packages/ui/src/components/IconButton/IconButton.css.ts (2)
1-1
: 스타일 시스템 마이그레이션이 정확하게 수행되었습니다!모든 색상 및 테두리 속성이 새로운
vars
시스템으로 올바르게 전환되었습니다.Also applies to: 14-16, 19-19, 23-23
22-23
: 디자이너와의 색상 논의가 필요합니다.TODO 주석에 언급된 대로 비활성화 상태의 색상에 대해 디자이너와 추가 논의가 필요합니다.
이 사항이 해결되면 알려주시겠습니까?
apps/web/src/app/(prompt)/edit/[agentId]/[postGroupId]/detail/_components/PostEditor/PostEditor.css.ts (1)
1-1
: 스타일 시스템 업데이트가 완벽하게 구현되었습니다!테두리, 색상, 타이포그래피 관련 모든 속성이 새로운
vars
시스템으로 성공적으로 마이그레이션되었습니다.Also applies to: 7-8, 17-17, 41-41
packages/ui/src/components/Spinner/Spinner.css.ts (3)
1-1
: 테마 시스템 업데이트가 올바르게 적용되었습니다.
tokens
에서vars
로의 마이그레이션이 일관성 있게 이루어졌습니다.
74-85
: 스피너 컴포넌트의 색상 변형이 새로운 테마 시스템과 잘 통합되었습니다.각 색상 변형(
black
,white
,line
,icon
)이 새로운vars.colors
시스템을 사용하여 적절하게 업데이트되었습니다. 이는 전체 애플리케이션의 일관된 디자인 시스템 적용을 보장합니다.다만, 다음 사항을 확인해 주시면 좋겠습니다:
grey1000
과grey
의 차이가 의도적인지primary800
이 스피너의 'line' 변형에 적절한 색상인지
74-85
:❓ Verification inconclusive
색상 토큰 사용의 일관성을 확인해주세요.
다른 컴포넌트들에서 동일한 색상 토큰들이 어떻게 사용되고 있는지 확인이 필요합니다.
🏁 Script executed:
#!/bin/bash # Description: Check color token usage across the codebase # Search for grey1000 usage echo "Checking grey1000 usage:" rg "grey1000" --type ts # Search for primary800 usage echo "Checking primary800 usage:" rg "primary800" --type ts # Search for grey300 usage echo "Checking grey300 usage:" rg "grey300" --type tsLength of output: 5418
토큰 사용 일관성 확인 결과 및 추가 확인 요청
Spinner 컴포넌트 (packages/ui/src/components/Spinner/Spinner.css.ts)
"black"
:stroke: ${vars.colors.grey1000}
"line"
:stroke: ${vars.colors.primary800}
"icon"
:stroke: ${vars.colors.grey300}
전체 코드베이스에서의 토큰 사용
grey1000
,primary800
,grey300
토큰은 Button, Modal 등 여러 컴포넌트와 테마 파일(예: packages/theme/src/themes/…)에서 동일하게 사용되고 있음을 확인했습니다.- 다크 테마에서는
grey1000
이tokens.colors.grey0
로 매핑된 부분 등 일부 매핑 차이가 보이는데, 이는 의도된 변경인지 재검토해주시면 좋겠습니다.추가 검토 요청
"white"
스타일에서 사용된vars.colors.grey
의 값이 다른 컴포넌트에서 사용되는 구체적인 색상 토큰과 일치하는지 확인하시기 바랍니다.- 테마별(특히 다크 모드) 토큰 매핑이 디자인 의도에 부합하는지 최종적으로 검토해 주십시오.
packages/ui/src/components/Icon/Icon.tsx (1)
3-3
: 테마 시스템 마이그레이션이 올바르게 적용되었습니다!
tokens
에서vars
로의 마이그레이션이 일관성 있게 구현되었으며, 타입 안전성도 잘 유지되었습니다.Also applies to: 12-12, 31-31, 34-34
packages/theme/src/themes/contract.ts (1)
46-50
: 기술 부채 관리가 필요합니다.삭제 예정인 green 색상들에 대한 구체적인 제거 계획과 일정을 수립해주세요.
packages/theme/src/themes/light.ts (2)
6-8
: primary 색상 관련 기술 부채 해결이 필요합니다.primary 색상들이 삭제 예정으로 표시되어 있습니다. 다음 사항들을 명확히 해주세요:
- 대체될 색상 시스템은 무엇인가요?
- 마이그레이션 일정은 어떻게 되나요?
- 의존성이 있는 컴포넌트들은 어떻게 처리할 예정인가요?
63-80
:❓ Verification inconclusive
라이트/다크 테마 간의 대칭성 검토가 필요합니다.
- green 색상과 purple 색상이 양쪽 테마에 동일하게 추가되었는지 확인해주세요.
- 색상 값들이 테마 특성에 맞게 적절히 매핑되었는지 검토해주세요.
다음 스크립트로 테마 간의 색상 정의를 비교할 수 있습니다:
🏁 Script executed:
#!/bin/bash # Description: Compare color definitions between light and dark themes echo "Comparing theme color properties..." diff <(grep -A 100 "colors: {" packages/theme/src/themes/light.ts | grep ":" | sort) \ <(grep -A 100 "colors: {" packages/theme/src/themes/dark.ts | grep ":" | sort)Length of output: 356
검증 스크립트 업데이트 필요
현재 제공된 스크립트는 프로세스 서브스티튜션 사용 중
/dev/fd/63
,/dev/fd/62
등의 파일 디스크립터 오류가 발생하여 색상 비교 결과를 확인할 수 없었습니다. 이로 인해 라이트/다크 테마 간의 색상 정의 대칭성 검토가 원활하게 이루어지지 않았습니다.다음의 개선된 스크립트를 사용하여 임시 파일에 색상 정의를 저장한 후 diff를 수행함으로써 양측 테마의 색상 매핑을 확인해주시기 바랍니다:
검토 사항:
- 라이트 테마(
packages/theme/src/themes/light.ts
)와 다크 테마(packages/theme/src/themes/dark.ts
)에서 green 및 purple 색상의 정의가 대칭적으로 추가되어 있는지 확인해주세요.- 각 테마의 색상 값이 의도한 테마 특성에 적절히 매핑되었는지 수동 검증이 필요합니다.
🏁 Script executed:
[run_scripts] #!/bin/bash # 개선된 버전: 임시 파일을 사용한 라이트/다크 테마 간 색상 정의 비교 light_tmp=$(mktemp) dark_tmp=$(mktemp) grep -A 100 "colors: {" packages/theme/src/themes/light.ts | grep ":" | sort > "$light_tmp" grep -A 100 "colors: {" packages/theme/src/themes/dark.ts | grep ":" | sort > "$dark_tmp" echo "라이트/다크 테마 색상 정의 비교 결과:" diff "$light_tmp" "$dark_tmp" || true rm "$light_tmp" "$dark_tmp"Length of output: 2775
라이트/다크 테마 색상 매핑 검증 및 재검토 요청
- 라이트 테마의 green 및 purple 계열 색상(
green200
,green400
,green600
,green800
,violet*
,purple*
)이 다크 테마에도 동일하게 추가되어 있는지 재확인해 주세요.- 개선된 스크립트를 통해 비교한 결과, grey 및 primary 관련 토큰(예:
grey0to700
,grey1000
,primary400to200
등)에서 매핑 차이가 발생했습니다. 이러한 변경사항이 의도된 디자인 명세와 일치하는지 수동으로 검토해 주시기 바랍니다.다음의 개선된 스크립트를 이용하여 양 테마의 색상 정의 비교 결과를 다시 확인할 수 있으니, 검토 후 이상 여부를 확인해 주세요:
#!/bin/bash # 개선된 버전: 임시 파일을 사용한 라이트/다크 테마 간 색상 정의 비교 light_tmp=$(mktemp) dark_tmp=$(mktemp) grep -A 100 "colors: {" packages/theme/src/themes/light.ts | grep ":" | sort > "$light_tmp" grep -A 100 "colors: {" packages/theme/src/themes/dark.ts | grep ":" | sort > "$dark_tmp" echo "라이트/다크 테마 색상 정의 비교 결과:" diff "$light_tmp" "$dark_tmp" || true rm "$light_tmp" "$dark_tmp"위 사항들을 바탕으로 의도된 색상 매핑이 정확히 반영되었는지 재확인 부탁드립니다.
packages/ui/src/components/TextField/TextField.css.ts (1)
132-132
: 경고 상태의 색상 업데이트가 일관성 있게 적용되었습니다.
warning
에서warning500
으로의 색상 변경이 적절하게 이루어졌습니다. 이는 디자인 시스템의 색상 체계를 더욱 체계적으로 만들어주는 변경사항입니다.Also applies to: 145-145
apps/web/src/app/home/_components/UploadContentCard/UploadContentCard.css.ts
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨어요~!
관련 이슈
close #125
변경 사항
홈 화면 퍼블리싱을 진행했습니다!
거의 홈 화면 내에서만 작업해서 다른 코드에 영향은 딱히 없을 것으로 예상되지만 몇 가지 변경 사항 함께 전달드려요!
레퍼런스
Summary by CodeRabbit