Skip to content
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

Merged
merged 12 commits into from
Feb 15, 2025
Merged

[Feat] Home 페이지 퍼블리싱 #128

merged 12 commits into from
Feb 15, 2025

Conversation

kongnayeon
Copy link
Member

@kongnayeon kongnayeon commented Feb 14, 2025

관련 이슈

close #125

변경 사항

홈 화면 퍼블리싱을 진행했습니다!
거의 홈 화면 내에서만 작업해서 다른 코드에 영향은 딱히 없을 것으로 예상되지만 몇 가지 변경 사항 함께 전달드려요!

  • 기존 컴포넌트들은 test 페이지로 임시로 옮겨 두었어요! (이거 때문에 변경점이 꽤 잡힐 듯해요)
  • MainBreadcrumbItem 컴포넌트의 로고가 확대해 보니 화질이 꽤 깨져서 svg로 교체했습니다.
  • 퍼블리싱 진행하며 14인치 환경에서 너무 깨져서 사이드바 + 본문 콘텐츠의 합인 1680px 이하 화면에서는 font-size를 62.5%의 80%인 50%로 설정했습니다.
  • Button 컴포넌트에 width: fit-content 속성이 들어가 있지 않아서 추가해 줬습니다.
image image

레퍼런스

Summary by CodeRabbit

  • New Features
    • 홈 페이지에 다양한 콘텐츠 카드와 계정 관리 인터페이스가 추가되어, 사용자들이 쉽고 직관적으로 콘텐츠 업로드 및 그룹 관리를 경험할 수 있습니다.
  • Style
    • 응답형 폰트 사이징과 커스텀 폰트 적용 등 디자인 요소가 개선되어 전반적인 UI 일관성과 사용성이 향상되었습니다.
  • Chores
    • 테마 관리 체계와 코드 리펙토링을 통해 향후 유지보수 및 확장성이 강화되었습니다.

@kongnayeon kongnayeon self-assigned this Feb 14, 2025
Copy link

coderabbitai bot commented Feb 14, 2025

Walkthrough

이번 PR은 전반적인 UI 및 테마 스타일 업데이트와 함께 새로운 React 컴포넌트와 유틸리티 함수들을 추가합니다. 전역 CSS에서는 미디어 쿼리를 통해 반응형 폰트 크기를 설정하고, 폰트 패밀리를 사용자 정의 변수로 변경했습니다. 또한 Home 및 관련 구성 요소(예: AccountItem, AccountSidebar, CTACard, ContentGroupCard, PersonalCard, UploadContentCard)들이 새로 도입되었으며, 페이지 파일과 타입 정의, 유틸리티 함수 등이 보강되었습니다. 테마 및 UI 관련 파일들에서는 기존의 tokens에서 vars로 변경되는 등 스타일 관리 방식이 업데이트 되었습니다.

Changes

파일 변경사항 요약
apps/web/src/app/globals.css 미디어 쿼리 추가 (최대 1680px 시 font-size 50%), body 폰트 패밀리 변경 (Arial, Helvetica, sans-serifvar(--font-pretendard))
apps/web/src/app/home/... Home 관련 컴포넌트 추가/수정: Home, AccountItem, AccountSidebar, CTACard, ContentGroupCard, PersonalCard, UploadContentCard 및 관련 CSS 모듈 추가
apps/web/src/app/home/page.css.ts & page.tsx 홈 페이지 레이아웃 및 HomePage 컴포넌트 추가
apps/web/src/app/page.tsx 기존 Home 컴포넌트 제거 후 HomePage를 반환하도록 변경
apps/web/src/components/common/MainBreadcrumbItem/... CSS 패딩 변경 및 로고 이미지 컴포넌트를 <InsteadLogoImage>로 대체
apps/web/src/types/... & apps/web/src/utils/... AgentPlan, AgentTone, PostGroup 타입 개정; getFormattedDatetime, getFormattedYearMonthDayHour 함수 추가 및 유틸리티 확장
packages/theme/... & packages/ui/src/... 테마/컬러 설정 확장 및 tokensvars 전환; IconInstead 컴포넌트 추가; UI 컴포넌트들의 스타일 변수 변경
apps/web/src/app/(prompt)/edit/[...]/... PostEditor, LogContentItem, LogSidebar 등에서 tokensvars로 전환하는 CSS 수정

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: 이벤트 콜백 호출
Loading

Suggested labels

enhancement

Suggested reviewers

  • minseong0324

Poem

귀여운 토끼가 말하노라,
새 코드 숲속에 뛰어노는 날,
CSS와 컴포넌트 깔끔하게 춤추고,
테마와 타입이 반짝이며 빛나네.
혁신의 발자국, 한 걸음 한 걸음,
🐰 코드의 숲에서 행운을 빌어!
즐거운 개발, 모두 함께 달려가자!

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

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

apps/web/src/app/(prompt)/edit/[agentId]/[postGroupId]/log/[postId]/_components/LogSidebar/LogSidebar.css.ts

Oops! Something went wrong! :(

ESLint: 9.17.0

Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@repo/eslint-config' imported from /eslint.config.mjs
at packageResolve (node:internal/modules/esm/resolve:839:9)
at moduleResolve (node:internal/modules/esm/resolve:908:18)
at defaultResolve (node:internal/modules/esm/resolve:1038:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:557:12)
at ModuleLoader.resolve (node:internal/modules/esm/loader:525:25)
at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:246:38)
at ModuleJob._link (node:internal/modules/esm/module_job:126:49)

apps/web/src/app/(prompt)/edit/[agentId]/[postGroupId]/detail/_components/PostEditor/PostEditor.css.ts

Oops! Something went wrong! :(

ESLint: 9.17.0

Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@repo/eslint-config' imported from /eslint.config.mjs
at packageResolve (node:internal/modules/esm/resolve:839:9)
at moduleResolve (node:internal/modules/esm/resolve:908:18)
at defaultResolve (node:internal/modules/esm/resolve:1038:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:557:12)
at ModuleLoader.resolve (node:internal/modules/esm/loader:525:25)
at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:246:38)
at ModuleJob._link (node:internal/modules/esm/module_job:126:49)

apps/web/src/app/(prompt)/edit/[agentId]/[postGroupId]/log/[postId]/_components/LogContentItem/LogContentItem.css.ts

Oops! Something went wrong! :(

ESLint: 9.17.0

Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@repo/eslint-config' imported from /eslint.config.mjs
at packageResolve (node:internal/modules/esm/resolve:839:9)
at moduleResolve (node:internal/modules/esm/resolve:908:18)
at defaultResolve (node:internal/modules/esm/resolve:1038:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:557:12)
at ModuleLoader.resolve (node:internal/modules/esm/loader:525:25)
at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:246:38)
at ModuleJob._link (node:internal/modules/esm/module_job:126:49)

  • 25 others
✨ Finishing Touches
  • 📝 Generate Docstrings (Beta)

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?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

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)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a 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: 날짜 형식 변환 함수의 개선이 필요합니다.

다음과 같은 개선사항을 제안합니다:

  1. 잘못된 날짜 입력에 대한 예외 처리가 필요합니다.
  2. 국제화를 위해 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: 이미지 스타일 중복 제거 필요

imageemptyImage 스타일에 중복된 속성들이 있습니다. 공통 스타일을 추출하여 재사용하면 유지보수가 용이해질 것 같습니다.

+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 색상의 이름과 문서화를 개선하면 좋을 것 같습니다:

  1. 기존 shadow 색상과 비슷한 용도이므로 일관된 이름 사용
  2. 색상의 용도에 대한 주석 추가
-  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?.lengthpostGroups가 필수 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

📥 Commits

Reviewing files that changed from the base of the PR and between 0e3d4a9 and 535a49a.

⛔ 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/utils/getFormattedDatetime.ts Show resolved Hide resolved
apps/web/src/app/home/_components/CTACard/CTACard.css.ts Outdated Show resolved Hide resolved
apps/web/src/types/post.ts Show resolved Hide resolved
apps/web/src/app/home/Home.tsx Show resolved Hide resolved
apps/web/src/app/home/Home.tsx Show resolved Hide resolved
}

body {
color: var(--foreground);
background: var(--background);
font-family: Arial, Helvetica, sans-serif;
font-family: var(--font-pretendard);
Copy link

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.cssglobals.css에서 사용되는 것으로 확인되었으나, 해당 변수를 정의하는 코드(예: :root { --font-pretendard: ...; })는 검색되지 않았습니다.

  • 확인 사항:
    • --font-pretendard 변수가 전역 또는 관련 CSS 파일(예: :root 블록 내)에서 올바르게 정의되어 있는지 재검토해 주세요.
    • 만약 정의가 누락되었다면, 적절한 위치에 명시적으로 변수 정의를 추가해주시기 바랍니다.

</Link>
</Breadcrumb.Item>
);
}

function InsteadLogo() {
Copy link
Contributor

Choose a reason for hiding this comment

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

p3: 이거 원래대로 되돌려주실 수 있을까요? 그라데이션이 있는 이미지라 webp로 했어서요!

Copy link
Member Author

Choose a reason for hiding this comment

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

svg로도 그라데이션이 반영되는데 혹시 webp로 해야 하는 이유가 있을까요?
image

Copy link
Contributor

Choose a reason for hiding this comment

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

그라데이션 적용 관점에서 말씀드린건 아니구,
image
용량 관점에서 말씀드린거였어요! 그리고, icon처럼 색상 변경이 필요한 이미지도 아니기도 해서 webp(4x로 png 추출 -> webp로 변환)로 했었어요.

그리고 좀 더 알아보니까, webp로 굳이 바꿀 필요도 없었더라구요! 4x로 피그마에서 추출해서 가져다써도(이미지 고화질을 위해) next/image가 브라우저 우선순위에 맞춰 알아서 최적화를 해준다고 합니다. 그리고 최적화된 이미지를 Next.js 웹 서버 캐싱까지 지원해주고요!

image

빌드된 파일에서 확인가능해요!

Copy link
Contributor

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/

Copy link
Contributor

Choose a reason for hiding this comment

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

나연님~ 제가 간단하게 실험을 하나 했는데요!

구두 논의에서 svg가 아닌 포멧으로 하면 깨짐 현상이 일어난다고 했고, 용량 관련해서도 테스트를 진행해보았어요.

기존 4x 이미지에서 구글링해서 어떤 사이트에서 2x 더 업스케일링(총 8x)을 하고 next/image로 적용을 하고 용량을 살펴봤는데요,

image

next/image가 똑똑하게 최적화를 해줘서 2.2kb로 잡히네요!

Copy link
Member Author

Choose a reason for hiding this comment

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

image 제 환경에서는 왼(png) 오(svg) 화질 차이가 심한데 민성님 환경에서는 괜찮으신가요?

Copy link
Contributor

@minseong0324 minseong0324 Feb 15, 2025

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으로 감싸는 이유도 궁금해요.

Copy link
Member Author

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로 수정하겠습니다 ㅎㅎ

Copy link
Contributor

Choose a reason for hiding this comment

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

네 감사합니다

Copy link
Member Author

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';
Copy link
Contributor

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로 변경이 필요할 것 같아요.

Copy link
Member Author

Choose a reason for hiding this comment

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

헉 지금까지 토큰 추가되면 아예 vars에 추가를 안 했어서 현재 vars로는 토큰을 모두 사용할 수 없거든요(purple 계열 등...) 이건 일괄 수정 pr 올려도 될까요?

Copy link
Contributor

Choose a reason for hiding this comment

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

여기서 진행해주셔도 됩니다~ 다른 부분은 다 확인해서 추가되는 커밋으로 확인할게요!

Copy link
Member Author

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/CTACard/CTACard.css.ts Outdated Show resolved Hide resolved
@@ -0,0 +1,668 @@
'use client';

Copy link
Contributor

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;
Copy link
Contributor

Choose a reason for hiding this comment

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

p4: 전반적으로 VoidFunction으로 변경해도 되겠네요!

Copy link
Member Author

Choose a reason for hiding this comment

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

VoidFunction 타입을 선호하시는 이유가 있을까요?? 기능적으로 차이가 없는 것 같아서요!

Copy link
Contributor

Choose a reason for hiding this comment

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

VoidFunction이 명시적이고, 자동완성이 되어서 편해요! 그리고, typescript에서 제공하는 내장타입이 있다면 그걸 사용하자는 주의여서요

나연님 코드에 충분한 근거가 있으실거라 믿고 p4로 지정한거기도 하고, 참고삼아 말씀드린거예요! 굳이굳이 안바꾸셔도 됩니다.

@kongnayeon
Copy link
Member Author

@minseong0324 리뷰 반영했습니다!

Copy link

@coderabbitai coderabbitai bot left a 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

📥 Commits

Reviewing files that changed from the base of the PR and between 535a49a and 48ac142.

📒 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

Comment on lines +75 to +78
<motion.div
className={contentGroupItem}
onClick={onItemClick}
initial="rest"
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

클릭 이벤트 전파 방지가 필요합니다.

현재 컨테이너의 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

Copy link

@coderabbitai coderabbitai bot left a 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: 조건문을 최적화할 수 있습니다.

현재 코드에서는 rowcolumn 방향 모두 동일한 값 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: 타이포그래피 일관성 개선 제안

fontSizefontWeightvars 시스템을 사용하고 있지만, lineHeight는 고정값을 사용하고 있습니다. 일관성을 위해 lineHeightvars 시스템을 사용하는 것이 좋을 것 같습니다.

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에 다음과 같은 변경사항을 추가하는 것을 제안합니다:

  • tokensvars 마이그레이션
  • 스타일 시스템 업데이트

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: 테마 시스템의 일관성 검토가 필요합니다.

  1. 삭제 예정인 green 색상들과 새로 추가된 purple 색상들의 사용처를 확인해주세요.
  2. 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: 제출 버튼의 비활성화 상태 스타일을 개선해보세요.

현재 isErrorisDisabled 상태에서 동일한 스타일(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

📥 Commits

Reviewing files that changed from the base of the PR and between 48ac142 and 8eb4132.

⛔ 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을 사용하고 있습니다. 이는 시각적/의미적 변화를 초래할 수 있습니다.

다음 사항들을 확인해 주시기 바랍니다:

  1. 이 변경이 의도적인지
  2. 디자인 시스템 문서에 이 변경사항이 반영되어 있는지
  3. 이 컴포넌트를 사용하는 다른 페이지들에 미치는 영향

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 시스템을 사용하여 적절하게 업데이트되었습니다. 이는 전체 애플리케이션의 일관된 디자인 시스템 적용을 보장합니다.

다만, 다음 사항을 확인해 주시면 좋겠습니다:

  • grey1000grey의 차이가 의도적인지
  • 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 ts

Length 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/…)에서 동일하게 사용되고 있음을 확인했습니다.
    • 다크 테마에서는 grey1000tokens.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 색상들이 삭제 예정으로 표시되어 있습니다. 다음 사항들을 명확히 해주세요:

  1. 대체될 색상 시스템은 무엇인가요?
  2. 마이그레이션 일정은 어떻게 되나요?
  3. 의존성이 있는 컴포넌트들은 어떻게 처리할 예정인가요?

63-80:

❓ Verification inconclusive

라이트/다크 테마 간의 대칭성 검토가 필요합니다.

  1. green 색상과 purple 색상이 양쪽 테마에 동일하게 추가되었는지 확인해주세요.
  2. 색상 값들이 테마 특성에 맞게 적절히 매핑되었는지 검토해주세요.

다음 스크립트로 테마 간의 색상 정의를 비교할 수 있습니다:


🏁 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

Copy link
Contributor

@minseong0324 minseong0324 left a comment

Choose a reason for hiding this comment

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

고생하셨어요~!

@kongnayeon kongnayeon merged commit e123b40 into develop Feb 15, 2025
4 of 7 checks passed
@kongnayeon kongnayeon deleted the feat/#1992106a0 branch February 15, 2025 18:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Feature] Home 페이지 퍼블리싱
2 participants