Skip to content

[UI] 타임 셀렉터 AI 추천 배지 디자인 반영 - #298

Open
jjangminii wants to merge 3 commits into
developfrom
ui/design-system/297-time-selector-ai-badge
Open

jjangminii wants to merge 3 commits into
developfrom
ui/design-system/297-time-selector-ai-badge

Conversation

@jjangminii

@jjangminii jjangminii commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

ISSUE 🔗

close #297



What is this PR? 🔍

TimeSelector의 AI 추천 배지를 최신 피그마 디자인에 맞춰 반영했습니다.

배경

  • 기존 구조: AI 추천 배지가 아이콘만 노출하고 텍스트 라벨 없이 aria-label로만 접근성을 확보했으며, 아이콘과 시간 입력이 한 줄에 배치되고 AI 배지와 하단 시간 목록 사이 구분선이 없었습니다.
  • 발생 문제: 피그마에서 AI 추천 배지 디자인이 텍스트 라벨 추가 + 2줄 레이아웃 + 구분선 추가로 업데이트되어 실제 구현과 괴리가 생겼습니다.
  • 해결 방향: 피그마 노드(4459-90992 Default, 4459-90974 Selected)를 기준으로 마크업 구조를 재배치하고 기존 디자인 토큰(timo-black, timo-blue-300, timo-gray-500)에 매핑했습니다.

TimeSelector AI 추천 배지

  • 변경 요약: 아이콘 옆에 "AI 추천" 텍스트 라벨을 추가하고, 아이콘+라벨 줄과 시간 표시 줄을 세로로 분리했습니다. AI 배지와 시간 목록 사이 구분선을 추가하고 AI 아이콘 크기를 14px로 고정했습니다.
  • 이유: 아이콘만으로는 배지의 의미가 시각적으로 드러나지 않았고, 피그마 디자인에 새로 추가된 구분선·레이아웃이 기존 마크업에 반영되어 있지 않았습니다.
  • 구현 방식: 기존 아이콘 전용 <button>에 <span>AI 추천</span>을 추가해 클릭 가능 영역과 접근 가능한 이름을 함께 확보했습니다(시각적 텍스트가 생겨 aria-label은 제거). 시간 입력(분/초 input 2개, 직접 수정 기능은 그대로 유지)은 별도 줄로 내렸습니다. 하단 시간 목록 wrapper에 border-t border-timo-gray-500 pt-2를 추가해 구분선을 표현했습니다.
  • 경계 · 제약: 시간 표시 텍스트의 폰트 굵기를 typo-headline-r-14(Regular)에서 typo-headline-m-14(Medium)로 변경했으나, 디자인팀에서 폰트 스펙이 아직 확정되지 않아 추후 다시 반영될 예정입니다.

타이포그래피 · 시간 목록 형식 수정 (후속)

  • 변경 요약: "AI 추천" 라벨 폰트를 캡션 토큰으로 교체하고, 시간 목록 항목 표기를 피그마 원본과 동일한 단일 라벨 형식으로 변경했습니다.
  • 이유: "AI 추천" 라벨이 tokens.md에 없는 text-[8px] 임의값이었는데(위 섹션 최초 작업 당시 매핑 가능한 토큰을 찾지 못했던 부분), 재확인 결과 Figma 스펙은 Caption/Caption_R_10(10px)이었습니다. 시간 목록도 실제로는 value + unit(15 / min)을 양끝 정렬하는 구조였는데, 피그마 원본은 "00 : 15" 같은 콜론 구분 단일 텍스트였습니다.
  • 구현 방식: text-[8px] → typo-caption-r-10으로 교체했습니다. TimeOption 타입을 {minute, value, unit}에서 {minute, label}로 바꾸고, 목록 렌더링을 span 2개(justify-between)에서 단일 span으로 단순화했습니다. apps/timo-web의 두 호출부(use-time-field.ts, use-detail-todo-form.ts)는 기존 convertDurationToTimeText 유틸을 재사용해 "00 : 15" 형식 라벨을 생성하도록 맞췄습니다.
  • 경계 · 제약: 위 "TimeSelector AI 추천 배지" 섹션에서 언급했던 "타이포 토큰 없음" 캐비트는 이번 커밋으로 해소됐습니다. 폰트 굵기(typo-headline-m-14 vs -r-14) 디자인팀 확정 대기 이슈는 이번 범위와 무관하게 그대로 남아 있습니다.



To Reviewers

최종 디자인에 맞춰 업데이트 했습니다.
후속 커밋(타이포·시간 형식)은 디자이너 피드백을 받아 Figma 노드를 다시 대조하며 수정한 부분이라 TimeOption 타입 변경(value/unit → label)이 호출부 두 곳에 제대로 반영됐는지 확인 부탁드립니다.

Screenshot 📷

image



Test Checklist ✔

  • pnpm --filter @repo/timo-design-system check-types 통과
  • pnpm --filter @repo/timo-design-system lint 통과
  • pnpm --filter timo-web check-types 통과
  • pnpm --filter timo-web lint 통과
  • Storybook 시각 확인 — 미실행: 이 세션에 브라우저 도구 없음, reviewer 확인 필요

- AI 추천 배지에 텍스트 라벨을 추가했습니다
- 아이콘·라벨 줄과 시간 표시 줄을 세로로 분리했습니다
- 시간 텍스트 폰트를 Medium 굵기로 변경했습니다
- AI 배지와 시간 목록 사이에 구분선을 추가했습니다
- AI 아이콘 크기를 14px로 고정했습니다

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Sep 26, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
timo-client-timo-web Ready Ready Preview Sep 30, 2026 1:10pm UTC

@coderabbitai

coderabbitai Bot commented Sep 26, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: Team-Timo/Timo-client/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: ac529135-fc81-40a5-85f6-c16ab7b6a5ec

📥 Commits

Reviewing files that changed from the base of the PR and between 947f60c and 8205019.

📒 Files selected for processing (4)
  • apps/timo-web/hooks/todo-modal/create/use-time-field.ts
  • apps/timo-web/hooks/todo-modal/detail/use-detail-todo-form.ts
  • packages/timo-design-system/src/components/time/time-selector/TimeSelector.stories.tsx
  • packages/timo-design-system/src/components/time/time-selector/TimeSelector.tsx

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.


Walkthrough

시간 옵션의 표시 데이터를 value와 unit에서 label로 변경했습니다. 생성 및 상세 폼은 분 목록에서 레이블을 만들고, TimeSelector는 AI 추천 영역과 시간 입력 및 옵션 목록의 표시를 조정합니다.

Changes

시간 선택기 변경

Layer / File(s) Summary
시간 옵션 데이터와 레이블 생성
packages/timo-design-system/src/components/time/time-selector/TimeSelector.tsx, apps/timo-web/hooks/todo-modal/create/use-time-field.ts, apps/timo-web/hooks/todo-modal/detail/use-detail-todo-form.ts, packages/timo-design-system/src/components/time/time-selector/TimeSelector.stories.tsx
TimeOption의 표시 필드를 label로 변경했습니다. 생성 및 상세 폼은 [15, 30, 45, 60, 90]분 목록에서 변환된 레이블을 생성합니다. Storybook 옵션에서 120분을 90분으로 바꾸고, 각 옵션을 minute과 label로 구성했습니다.
TimeSelector 옵션 및 AI 추천 표시
packages/timo-design-system/src/components/time/time-selector/TimeSelector.tsx
AI 추천 버튼을 행 전체 너비로 배치하고 선택 상태에 따라 아이콘과 텍스트를 변경합니다. 시간 입력 필드의 타이포그래피와 정렬, 옵션 목록의 경계·간격·표시 형식을 조정했습니다.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Feature · Severity of issue fixed: Low

Merge Risk: ⚪ Minimal · up to 82050

The time-option contract is consistent across both forms and the selector, and the AI recommendation button retains an accessible name. No concrete merge-blocking issue remains; normal checks and visual confirmation are appropriate.

Security Architecture Review

Security architecture risk: 🔵 Low · up to 82050

The known forms adopt the new option format while keeping numeric selection values and application-owned duration handling. No new privileged operation or weakened control was identified. Exposure is bounded by a private workspace package, but the exact historical comparison and wider integration coverage remain incomplete.

Retained concerns
No architecture-level concerns identified.

Security review details

Security Blast Radius

  • inferred — The demonstrated change surface is shared time-option presentation and the application's create/detail duration selection paths. The private package and fixed option producers limit the observed exposure; broader tenant, service, credential, or data-store authority expansion is not established by these paths.

Security Findings and Attack Paths

  • inferred — No introduced or materially worsened attack path was established in the inspected contract migration. Labels come from fixed minute arrays, are rendered as text, and do not determine selection identity or API duration. The wider AI button retains the existing draft-selection callback. This conclusion is limited to the inspected change, not a complete security assessment of the application.

Trust Boundaries and Controls

  • observed — The shared selector renders supplied data and emits callbacks. The application retains recommendation-response validation and conversion into its duration field. Display labels are not used as authorization inputs or parsed back into persisted duration in the inspected handlers.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Linked Issues check ✅ Passed 직접 연결된 공개 이슈 #297의 코딩 요구사항을 충족합니다. TimeSelector.tsx는 AI 추천 라벨을 추가하고, 아이콘·라벨 행과 시간 입력 행을 세로로 배치합니다. 시간 텍스트에 typo-headline-m-14를 적용하고, 시간 목록 위에 border-t 구분선을 추가합니다. Default, Selected, `AiSel…
Out of Scope Changes check ✅ Passed 변경 범위는 #297의 TimeSelector 디자인 변경과 그에 필요한 시간 옵션 데이터·호출부·Storybook 스토리 연동으로 제한됩니다. TimeOption을 { minute, label }로 변경하고 시간 라벨을 00 : 15 형식으로 생성한 작업은 새 표시 요구사항을 지원합니다. 검토 가능한 요약과 파일 내용에서 관련 없는 기능 변…
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 4…
Title check ✅ Passed PR 제목은 TimeSelector의 AI 추천 배지 디자인 반영이라는 주요 변경 사항을 정확하고 간결하게 설명합니다.
Description check ✅ Passed PR 설명은 AI 추천 라벨, 2줄 레이아웃, 구분선, 시간 옵션 형식 변경 등 변경 사항을 구체적으로 설명하며 변경 내용과 직접 관련됩니다.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Sep 26, 2026 •

Copy link
Copy Markdown

Storybook Preview

항목 링크
Storybook 열기
Chromatic 빌드 확인

마지막 업데이트: 2026-09-30 13:09 UTC

@github-actions

github-actions Bot commented Sep 26, 2026 •

Copy link
Copy Markdown

Timo Performance Report

Bundle Size — timo-web
라우트 크기 First Load JS
/[locale]/home 275.80 kB 🔴 481.62 kB
/[locale]/today 260.02 kB 🔴 465.83 kB
/[locale]/focus 222.32 kB 🔴 428.13 kB
/[locale]/settings 228.90 kB 🔴 434.71 kB
/[locale]/statistics 210.79 kB 🔴 416.60 kB
/[locale]/[...rest] 0 B 🟡 205.82 kB
/[locale]/login 282.28 kB 🔴 488.09 kB
/[locale]/oauth/calendar/callback 121.37 kB 🟡 327.19 kB
/[locale]/oauth/callback 121.03 kB 🟡 326.85 kB
/[locale]/onboarding 294.75 kB 🔴 500.57 kB
/[locale] 120.35 kB 🟡 326.17 kB
/[locale]/policy 121.32 kB 🟡 327.13 kB
/robots.txt/route 0 B 🟡 205.82 kB
/sitemap.xml/route 0 B 🟡 205.82 kB

공유 번들: 205.82 kB
🟢 < 200kB  |  🟡 < 350kB  |  🔴 ≥ 350kB (First Load JS · gzip)

Lighthouse — timo-web
URL Perf A11y LCP CLS TBT
/en/home 🔴 45 🟢 96 🔴 16.3s 🟢 0.000 🔴 2118ms
/en/today 🔴 61 🟢 96 🔴 16.2s 🟢 0.000 🟡 528ms
/en/focus 🔴 60 🟢 96 🔴 16.1s 🟢 0.000 🟡 582ms
/en/statistics 🔴 61 🟢 96 🔴 16.1s 🟢 0.000 🟡 526ms

Perf ≥ 70 / A11y ≥ 85 목표
LCP 🟢 < 2.5s 🟡 < 4s 🔴 ≥ 4s  |  CLS 🟢 < 0.1 🟡 < 0.25 🔴 ≥ 0.25  |  TBT 🟢 < 200ms 🟡 < 600ms 🔴 ≥ 600ms

Image Optimization — timo-web
파일 크기 포맷 상태
favicon.png 27.84 kB PNG ⚠️ 🟢
images/google-calendar.png 36.20 kB PNG ⚠️ 🟢
images/google-logo.png 26.79 kB PNG ⚠️ 🟢
og.png 437.44 kB PNG ⚠️ 🟡

총 4개 · 528.28 kB  |  🟢 < 200KB  |  🟡 < 500KB  |  🔴 ≥ 500KB
⚠️ 4개 파일 WebP/AVIF 변환 권장

측정 커밋: 753e4d9

@ehye1 ehye1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

빠르게 디자인 반영해주셨네요! 굿굿👍

@yumin-kim2 yumin-kim2 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

변경된 디자인 바로 반영해주셨네요!! 수고하셨습니다 👍👍

@github-actions github-actions Bot added the 🫵🏻 Reminded 리마인드 완료 label Sep 28, 2026
jjangminii and others added 2 commits September 30, 2026 22:07
- AI 추천 라벨 폰트를 8px 하드코딩에서 caption 토큰(typo-caption-r-10)으로 변경했습니다
- 시간 목록 항목을 value/unit 분리 표기에서 "00 : 15" 형태의 단일 라벨로 변경했습니다
- TimeOption 타입을 {minute, label} 구조로 변경했습니다

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- TimeOption 타입 변경에 맞춰 생성/상세 모달의 시간 옵션 라벨을 "00 : 15" 형식으로 생성하도록 수정했습니다

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

This branch was successfully deployed

1 active deployment
Preview — 82050196 Deployed Sep 30, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

⌚ Timo-Design-system Timo 디자인 시스템 ⏰ Timo-web Timo 웹 서비스 ♠️ 정민 정민양 🫵🏻 Reminded 리마인드 완료

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[UI] 타임 셀렉터 AI 추천 배지 디자인 반영

3 participants