Skip to content

Chore(hds): 디자인시스템 agent harness 및 컴포넌트 generator 정비 - #23

Merged
chungyo merged 5 commits into
developfrom
chore/HASHI-40-hds-agent-harness
Jun 29, 2026
Merged

chungyo merged 5 commits into
developfrom
chore/HASHI-40-hds-agent-harness

Conversation

@chungyo

@chungyo chungyo commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

📌 Summary

HDS 디자인시스템 작업을 Codex/AI agent가 일관된 흐름으로 수행할 수 있도록 agent routing, repo-scoped skill, HDS component generator를 정비했습니다.

이번 PR은 실제 HDS 컴포넌트를 추가하는 작업이 아니라, 앞으로 packages/hds-ui와 packages/hds-icons 작업을 시작할 때 agent가 어떤 문서를 읽고, 어떤 경계 안에서 컴포넌트를 생성하고, 어떤 검증을 수행해야 하는지 고정하는 작업입니다.

Jira: HASHI-39, HASHI-40

📚 Tasks

  • packages/AGENTS.md 추가

    • packages/ 하위 작업에서 먼저 읽을 디자인시스템 문서를 라우팅합니다.
    • packages/hds-ui, packages/hds-icons, configs/tsconfig의 책임 경계를 정리했습니다.
    • app route, query, mutation, tracking, product copy, domain data가 HDS 패키지로 들어가지 않도록 명시했습니다.
  • hds-component-creator repo-scoped skill 추가

    • HDS UI component, HDS icon, component spec 작업 시 읽을 문서를 분리했습니다.
    • 기존 HDS component/icon 확인 → 배치 판단 → generator 사용 → public API/export 확인 → spec/story 확인 → 검증 명령 선택 흐름을 정리했습니다.
    • Quality Pass로 추가했습니다.
    • 나중에 Storybook 전용 skill이 추가될 경우, 상세 story authoring은 해당 skill에 위임하고 이 skill은 HDS 경계/생성/검증에 집중하도록 책임 경계를 남겼습니다.
  • gen:ds-component generator 개선

    • 새 HDS component 생성 시 아래 파일을 함께 생성하도록 변경했습니다.
      • {ComponentName}.tsx
      • {ComponentName}.spec.md
      • {ComponentName}.stories.tsx
      • local index.ts
    • packages/hds-ui/src/components/index.ts에 component export와 props type export를 함께 append하도록 수정했습니다.
    • 생성 직후 Prettier를 실행하는 formatGeneratedFiles action을 추가해, 컴포넌트 이름 길이와 관계없이 생성 파일이 format:check를 통과하도록 했습니다.
  • HDS/agent 관련 문서 동기화

    • AGENTS.md, .agents/README.md, .agents/checklists/pre-work.md, .agents/recipes/hds-component.md의 HDS 라우팅을 갱신했습니다.
    • docs/agent/skills.md에 hds-component-creator를 등록했습니다.
    • docs/workflows/turbo-generators.md에 ds-component 생성 결과와 생성 후 formatting 동작을 문서화했습니다.
    • docs/architecture/design-system*, docs/rules/design-system-instructions.md, docs/workflows/spec-templates/*의 Storybook/spec/generator 기준을 현재 repo 상태와 맞췄습니다.
    • 실제 설치 상태와 문서가 어긋난 부분도 정리했습니다. 예: Storybook/Tailwind/SVGR/Playwright 상태.

🧭 설계 의도

1. docs/는 source of truth, .agents/는 실행 라우팅

디자인시스템 규칙 원문은 계속 docs/에 둡니다.
AGENTS.md, packages/AGENTS.md, .agents/skills/*, .agents/recipes/*는 규칙을 중복 설명하기보다 agent가 어떤 문서를 읽고 어떤 순서로 작업해야 하는지 안내하는 역할로 제한했습니다.

이렇게 둔 이유는 사람이 읽는 문서와 agent 실행 지침이 따로 진화하면서 충돌하는 문제를 줄이기 위해서입니다.

2. HDS skill은 “컴포넌트 생성 전체”가 아니라 “경계와 검증”을 담당

hds-component-creator는 HDS 컴포넌트를 실제로 어떻게 디자인할지 전부 결정하는 skill이 아닙니다.

이 skill의 책임은 다음으로 제한했습니다.

  • HDS에 둘 수 있는 컴포넌트인지 판단
  • app domain 로직이 HDS로 들어오지 않도록 차단
  • generator 사용 여부 판단
  • public API/export/spec/story 누락 방지
  • 검증 명령 선택
  • Storybook 전용 skill과의 미래 역할 충돌 방지

상세 Storybook authoring은 나중에 별도 skill이 생기면 그쪽으로 넘길 수 있게 문서에 명시했습니다.

3. generator는 “완성 컴포넌트”가 아니라 “일관된 시작점” 제공

gen:ds-component는 최종 컴포넌트를 자동으로 완성하지 않습니다.
대신 모든 사람이 같은 구조에서 시작하도록 다음 파일을 생성합니다.

packages/hds-ui/src/components/{componentFolder}/
  {ComponentName}.tsx
  {ComponentName}.spec.md
  {ComponentName}.stories.tsx
  index.ts

현재 component template은 가장 중립적인 div 기반 scaffold입니다.
실제 컴포넌트 구현 시에는 Button, Input, Dialog 등 semantic element와 accessibility 요구사항에 맞게 수정하는 전제입니다.

4. 생성 후 formatting을 generator 책임으로 포함

처음에는 template만 Prettier 스타일에 맞추려 했지만, 컴포넌트 이름 길이에 따라 Prettier가 한 줄/여러 줄을 다르게 선택하는 문제가 있었습니다.

그래서 ds-component generator 마지막에 생성 파일만 Prettier로 정리하는 action을 추가했습니다.
이제 Commit Smoke, Quality Gate Smoke처럼 이름 길이가 달라도 생성 직후 format:check를 통과합니다.

🧩 주요 변경 파일

packages/AGENTS.md

  • packages/ 작업용 package-level routing hub를 추가했습니다.
  • HDS UI component, HDS icon, agent harness 작업별 Read First 문서를 정리했습니다.
  • packages/hds-ui와 packages/hds-icons에 들어가면 안 되는 app domain 책임을 명시했습니다.

.agents/skills/hds-component-creator/SKILL.md

  • HDS component/icon 생성 및 수정용 repo-scoped skill을 추가했습니다.
  • Read First, Workflow, Quality Pass, Verification, Report 기준을 정의했습니다.
  • Frontend Fundamentals 기준을 HDS 품질 체크에 맞게 축약해 포함했습니다.

turbo/generators/config.ts

  • ds-component generator가 component/spec/story/local index를 생성하도록 확장했습니다.
  • public component export와 props type export를 함께 append하도록 변경했습니다.
  • formatGeneratedFiles action을 추가해 생성 직후 Prettier를 실행합니다.

turbo/generators/templates/ds-component/*

  • component template을 유효한 React/TypeScript scaffold로 수정했습니다.
  • spec template과 Storybook story template을 추가했습니다.
  • local index template에서 component와 props type을 함께 export하도록 변경했습니다.

docs/agent/skills.md

  • hds-component-creator를 registered skill로 추가했습니다.
  • 나중에 Storybook generation skill이 추가될 때의 책임 경계를 문서화했습니다.

docs/workflows/turbo-generators.md

  • gen:ds-component 생성 결과를 최신화했습니다.
  • HDS component generator가 spec/story를 함께 만들고, 생성 직후 Prettier를 실행한다는 점을 문서화했습니다.

✅ Verification

아래 검증을 수행했습니다.

  • corepack pnpm gen:ds-component

    • 임시 입력: Quality Gate Smoke
    • component/spec/story/local index/public export 생성 확인
    • generator 내부 formatGeneratedFiles action 실행 확인
  • generated HDS component formatting

    • corepack pnpm exec prettier --check packages/hds-ui/src/components/qualityGateSmoke packages/hds-ui/src/components/index.ts
  • HDS UI package checks

    • corepack pnpm --filter @hashi/hds-ui lint
    • corepack pnpm --filter @hashi/hds-ui typecheck
    • corepack pnpm --filter @hashi/hds-ui build
    • corepack pnpm --filter @hashi/hds-ui test
    • corepack pnpm --filter @hashi/hds-ui build-storybook
  • repo checks

    • corepack pnpm format:check
    • corepack pnpm lint
    • corepack pnpm typecheck
    • git diff --check
  • agent harness checks

    • bash .agents/scripts/check-harness.sh
    • python3 /Users/chuchu/.codex/skills/.system/skill-creator/scripts/quick_validate.py .agents/skills/hds-component-creator

👀 To Reviewer

  • 이 PR은 실제 HDS 컴포넌트를 추가하지 않습니다. 임시 smoke 컴포넌트는 생성 검증 후 삭제했습니다.
  • hds-component-creator는 Storybook 세부 작성까지 담당하지 않도록 의도했습니다. 추후 Storybook 전용 skill이 생기면 story variant/interaction 작성은 해당 skill로 넘길 수 있습니다.
  • gen:ds-component의 기본 component root는 div입니다. 이는 최소 scaffold이며, 실제 컴포넌트 구현 시 semantic element와 접근성 요구사항에 맞게 수정해야 합니다.
  • root lint/typecheck는 Codex 환경에서 PATH의 [email protected]이 먼저 잡히는 문제가 있어, 프로젝트 선언 버전인 [email protected] Corepack shim을 앞세워 검증했습니다.
  • @hashi/hds-ui test는 현재 테스트 파일이 없어 Vitest가 No test files found, exiting with code 0으로 종료합니다.

📸 Screenshot

화면 변경이 없어 생략합니다.

@chungyo chungyo self-assigned this Jun 29, 2026
@chungyo
chungyo requested a review from a team as a code owner June 29, 2026 05:18
@github-actions github-actions Bot added 🥸 충영 38기 WEB 김충영 🧹 CHORE 빌드 설정, 패키지 관리, 기타 잡무 labels Jun 29, 2026
@github-actions

Copy link
Copy Markdown

@chungyo chungyo changed the title Chore(hds): 디자인시스템 agent harness 및 컴포넌트 생성기 정비 Chore(hds): 디자인시스템 agent harness 및 컴포넌트 generator 정비 Jun 29, 2026

@jyeon03 jyeon03 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.

명령어 하나로 component, spec, story, local index, public export까지 한 번에 생성되는 구조가 너무 신기하네요...🫪
이번 PR 보면서 agent harness와 generator를 어떻게 연결해서 반복 작업을 정리할 수 있는지 많이 배웠습니닷!!

코멘트 남긴 부분만 확인 부탁드릴게요~!

Comment on lines +10 to +16
execFileSync(
'corepack',
[
'pnpm',
'exec',
'prettier',
'--write',

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.

파일 생성 자체는 되는 것 같은데 마지막에 generator가 실패로 종료되는 문제가 있는 것 같아요! 확인 부탁드릴게요!

Image

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

확인했습니다! 파일 생성 이후 포맷 action에서 corepack pnpm exec prettier를 다시 호출하고 있어서, 환경에 따라 corepack 실행 실패 시 generator가 마지막에 실패하는 것 같네용. generator는 이미 pnpm gen:ds-component로 실행되는 흐름이라 내부 후처리는 pnpm exec prettier만 사용하도록 수정했습니다. 임시 컴포넌트 생성으로 성공 종료도 확인했습니다~~

꼼꼼한 확인 감사합니다!!

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

이렇게 script를 작성해두면, AI가 가진 비결정론적인 단점을 어느정도 해결할 수 있는 장점이 있어용. 어쨌든 LLM은 확률을 기반으로 작동하는 친구니까, 이런식으로 결정론적인 구조로 바꿔주는것도 좋아보여서 작성했습니다!

- 리뷰어 환경에서 corepack이 없을 때 scaffold 생성 후 실패하는 문제를 막기 위해
- generator 후처리는 실행 중인 pnpm 환경의 prettier를 사용하도록 단순화
@github-actions

Copy link
Copy Markdown

@MinseoSONG MinseoSONG 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.

AI 설정 자체가 꼼꼼히 잘 되어있는 것 같습니다. 정말 수고 많으셨어요 !!
이번 공통 컴포넌트 작업부터 요긴하게 사용하도록 하겠습니다. 사용해나가며 더 보완할 부분이 있다면 디벨롭하면 좋을 것 같아요 👍 👍

@chungyo
chungyo merged commit 31903d7 into develop Jun 29, 2026
11 checks passed
@chungyo
chungyo deleted the chore/HASHI-40-hds-agent-harness branch June 29, 2026 09:31
gyeongbibin added a commit that referenced this pull request Jul 10, 2026
* init: 모노레포 설정 및 프로젝트 초기세팅

* init: 폴더 구조 세팅

* init: 절대경로 설정

* init: ESLint, Prettier 및 경로 alias 설정

* init: Turborepo 설정 추가

* init: PR 및 이슈 템플릿 추가

* chore: update branch protection status

* init: sds 패키지 scope 통일

* init: Turbo generator 구조 추가

* fix: 이슈 템플릿 제거 및 PR 템플릿 수정

* init: Tailwind CSS 기본 설정

* init: Tailwind class 병합 유틸 추가

* init: prettier-plugin-tailwindcss 추가 설정

* Init(project): 개발 워크플로우 자동화 구축 (#12)

* init: 오토리뷰어 설정

* init: 라벨 자동 할당 설정

* init: assignee 자동 할당 설정

* init: Discord PR 알림 자동화 설정

* fix: Auto Label workflow 권한 수정 (#15)

* Init(project) : CI/CD 파이프라인 구축  (#10)

* feat : ci/cd yml 파일 생성

* refactor: 리뷰사항 반영

* feat :  format:check, typecheck 설정 추가

* Init(project) : Vitest 및 Playwright 테스트 환경 설정 (#11)

* Vitest 및 Playwright 테스트 환경 설정

* init : vercel git 추적 제거

* init: 테스트 공통 설정 패키지 추가 및 인프라 정리

* refactor : sds-icons 테스트코드 인프라 제거

* refactor: E2E 테스트 없을 때 test:e2e 통과하도록 수정

* style: Prettier 포맷 수정으로 format:check CI 통과

* init: husky 및 lint-staged 설정 (#13)

* Init(project): ky 및 TanStack Query 세팅 (#7)

* Init(project): SVGR 설정 (#8)

* init: SVGR 의존성 추가

* init: Vite에 SVGR 플러그인 연결

* init: SVG React 컴포넌트 타입 선언 추가

* init: SVGR 적용 위치를 sds-icons로 변경

* init: sds-icons SVG 자동 생성 스크립트 추가

* refactor: SVGR 아이콘 생성 스크립트 개선

* Init(project): Storybook 초기 세팅 (#9)

* init: Storybook 의존성 및 실행 스크립트 추가

* init: sds-ui Storybook 설정 추가

* init: Button Storybook 예시 추가

* init: Storybook 빌드 산출물 제외 설정

* init: Chromatic 연동 및 배포 검증

* init: Storybook 빌드 산출물 제외 설정

* chore: Chromatic CI 설정 추가

* chore: package 중복 의존성 제거

* Init(project): Sentry 세팅 및 디스코드 알림 연동  (#14)

* init: @sentry/react 의존성 추가

* init: Sentry environment/release용 Vite env 설정

* init: Sentry 초기화 및 ErrorBoundary 연동

* fix: Auto Label 워크플로 PR 라벨 추가 권한 수정

pull-requests: read로는 PR 라벨 API 호출이 403으로 실패하므로 write 권한을 부여합니다.

* init : Source Map 업로드 자동화

* refactor: Session Replay 제외

* Init(project): AI 작업 환경 골격 추가 (#6)

* docs(docs): SIKSA-20 컨벤션 문서 추가

* docs(docs): SIKSA-20 아키텍처 문서 추가

* init(root): SIKSA-20 문서 라우팅 허브 추가

* init(root): SIKSA-20 Codex 스킬 골격 추가

* docs(docs): SIKSA-20 디자인시스템 관련 문서 추가

* docs(docs): SIKSA-20 agent workflow 문서 보강

* docs(docs): HASHI-20 프로젝트명 변경 반영

* style(root): HASHI-20 skill 설정 포맷 수정

* style(docs): HASHI-20 Tailwind 예시 포맷 수정

* chore(root): HASHI-33 FE agent harness 구조 개선 (#16)

* fix(root): HASHI-31 서비스명 및 패키지명 변경 (#17)

* Chore(project): HASHI-34 CI 및 배포 워크플로우 분리 (#18)

* fix(root): HASHI-31 서비스명 및 패키지명 변경

* chore(project): HASHI-34 CI 및 배포 워크플로우 분리

* fix(project): HASHI-34 GitHub Actions Node 버전 수정

* Chore(hds): HASHI-35 HDS 패키지 entry 설정 보강 (#19)

* chore(hds): HASHI-35 HDS 패키지 entry 설정 보강

* chore(root): HASHI-35 Vercel preview deployment 확인

* Chore(hds): HASHI-36 HDS 디자인 토큰 및 Storybook 스타일 환경 설정 (#21)

* chore(hds): HASHI-36 HDS 디자인 토큰 추가

* chore(hds): HASHI-36 Storybook 토큰 스타일 환경 설정

* Chore(hds): 디자인시스템 agent harness 및 컴포넌트 generator 정비 (#23)

* Feat(icon): HASHI-37 디자인 시스템 아이콘 추가 (#22)

* feat: HASHI-37 Navigation 아이콘 추가

* feat: HASHI-37 Navigation icon 추가

* fix(icon): HASHI-37 Navigation icon 최종 아이콘 반영

* fix(icon): HASHI-37 Plus/Minus 아이콘 구조 개선

* fix(icon): HASHI-37 Star 아이콘 구조 개선

* fix(icon): HASHI-37 Search 아이콘 구조 개선

* fix(icon): HASHI-37 Check 아이콘 구조 개선

* fix(icon): HASHI-37 Cancle 아이콘 구조 개선

* fix(icon): HASHI-37 아이콘 네이밍 수정

* feat(icon): HASHI-37 Menu 아이콘 추가

* Chore(agent): HASHI-41 Storybook agent skill 추가 및 문서 정리 (#24)

* chore(agent): HASHI-41 Storybook agent skill 추가 및 문서 정리

* chore(hds): HASHI-41 CVA 의존성 추가

* Feat(api): HASHI-38 공통 응답 스키마 정의 및 헬퍼 추가  (#20)

* feat(api) : HASHI-38 백엔드 공통 응답 스키마 타입 추가

* feat(api): HASHI-38 API 응답 파싱용 request 헬퍼 추가

* chore(github): HASHI-38 preview build 재실행

* fix(api): HASHI-38 API 응답 헬퍼 에러 처리 단순화

* fix(api): HASHI-38 공통 응답 스키마 및 에러 처리 적용

* test(api): HASHI-38 request 헬퍼 단위 테스트 추가 및 env 예시 설정

* Feat(hds-ui): HASHI-51 Bottom Navigation 구현 (#25)

* feat(packages/hds-icons): HASHI-51 내비게이션 아이콘 색상 제어 지원

* feat(packages/hds-ui): HASHI-51 BottomNavigation 컴포넌트 추가

* Feat(hds-ui): HASHI-46 Tabs 공통 컴포넌트 구현 (#26)

* feat(hds-ui): HASHI-46 Tabs 공통 컴포넌트 구현

* chore(hds-ui): HASHI-46 Storybook Pretendard 폰트 적용

* fix(hds-ui): HASHI-46 Tabs 접근성 속성 추가

* Feat(hds-ui): HASHI-52 Dialog 컴포넌트 구현 (#29)

* feat(packages/hds-ui): HASHI-52 Dialog 컴포넌트 추가

* style(packages/hds-ui): HASHI-52 Dialog 리뷰 반영

* docs(packages/hds-ui): HASHI-52 Dialog 구현 기준 보강

* chore(root): HASHI-57 Codex hook 추가 (#30)

* Feat(hds-ui): HASHI-49 CollapsibleText 컴포넌트 구현 (#27)

* feat(hds-ui): HASHI-49 CollapsibleText 컴포넌트 구현

* refactor(hds-ui): HASHI-49 CollapsibleText public API 정리

* fix(hds-ui): HASHI-49 CollapsibleText 더보기 노출 조건 수정

* fix(hds-icons): HASHI-49 아이콘 색상 currentColor 적용

* Feat(hds-ui): HASHI-50 Button 컴포넌트 구현 (#28)

* docs(docs): HASHI-50 border/radius px rem 사용 가이드 추가

Figma 고정 수치와 대응되는 border 계열 값은 root font-size 영향을 받지 않도록 px 또는 token을 쓰도록 명시합니다.

* docs(packages/hds-ui): HASHI-50 Button 컴포넌트 spec 추가

Figma 기준 primary/neutral variant, size, width, 상태, 접근성, v1 범위를 정의합니다.

* feat(packages/hds-ui): HASHI-50 Button variant/size/width 구현

cva 기반 primary/neutral 스타일, icon slot, disabled/loading, public type export를 추가합니다.

* test(packages/hds-ui): HASHI-50 Button 단위 테스트 추가

type 기본값, submit, loading interaction 차단, icon slot 렌더링을 검증합니다.

* docs(packages/hds-ui): HASHI-50 Button Storybook story 추가

variant, size, full width, 탈퇴 2버튼, disabled, loading, icon, overflow 케이스를 문서화합니다.

* refactor(packages/hds-ui): HASHI-50 Button Storybook Tailwind 스케일 적용

arbitrary rem/px를 text-sm, w-60 utility로 정리합니다.

* fix(packages/hds-ui): HASHI-50 Button loading 중 slot icon 숨김

loading 상태에서는 leftIcon/rightIcon을 숨기고 spinner만 표시합니다.

* test(packages/hds-ui): HASHI-50 Button loading icon 숨김 테스트 추가

* docs(packages/hds-ui): HASHI-50 Button spec 및 Storybook 리뷰 반영

currentColor icon 정책, loading icon 정책을 spec에 반영하고 HDS icon 기반 story를 추가합니다.

* Feat(client): HASHI-58 모바일 뷰포트 레이아웃 설정 (#32)

* feat(client): HASHI-58 모바일 뷰포트 레이아웃 설정

* feat(client): HASHI-58 모바일 레이아웃 변수 추가

* style(client): HASHI-58 모바일 fixed 상하단 UI 유틸 추가

* Feat(hds-ui): HASHI-55 IconButton 컴포넌트 구현 (#31)

* docs(packages/hds-ui): HASHI-55 IconButton 컴포넌트 spec 추가

Figma 기준 xs/md size, plain surface, aria-label 필수, v1 범위와 deferred 결정을 정의합니다.

* feat(packages/hds-ui): HASHI-55 IconButton size/loading 구현

cva 기반 xs/md touch target, bare surface, disabled/loading, aria-label 계약과 public type export를 추가합니다.

* test(packages/hds-ui): HASHI-55 IconButton 단위 테스트 추가

accessible name, type 기본값, disabled/loading interaction 차단을 검증합니다.

* docs(packages/hds-ui): HASHI-55 IconButton Storybook story 추가

topbar, edit className, size, disabled, loading, 넓은 hit area 케이스를 문서화합니다.

* chore(packages/hds-ui): HASHI-55 develop 병합 후 충돌 해결 완료

* refactor(packages/hds-ui): HASHI-55 IconButton Tailwind 스케일 utility 적용

size arbitrary rem을 size-6/size-10으로 바꾸고 story viewport 폭을 393px 기준으로 정리합니다.

* refactor(packages/hds-ui): Button export를 folder index 경로로 정리

button/index.ts barrel export를 추가하고 components/index.ts에서 ./button 경로를 사용합니다.

* Feat(hds-ui): HASHI-56 SearchField 공통 컴포넌트 구현  (#36)

* docs(packages/hds-ui): HASHI-56 SearchField 컴포넌트 spec 추가

* fix(packages/hds-icons): SearchIcon stroke를 currentColor로 통일

SearchField에서 아이콘 색상을 컨테이너 text color로 상속받도록 합니다.

* feat(packages/hds-ui): HASHI-56 SearchField 구현

검색 아이콘 고정, native search input, disabled/focus-within 상태를 지원합니다.
@hashi/hds-icons를 runtime dependency로 이동합니다.

* test(packages/hds-ui): HASHI-56 SearchField 단위 테스트 추가

* docs(packages/hds-ui): HASHI-56 SearchField Storybook story 추가

* docs(packages/hds-ui): HASHI-56 SearchField 모바일 viewport를 430px로 수정

Storybook wrapper와 spec 체크리스트를 430px 기준으로 맞춥니다.

* feat(packages/hds-ui): HASHI-56 SearchField ref forwarding 및 focus 스타일 정리

* test(packages/hds-ui): HASHI-56 SearchField ref forwarding 테스트 추가

* docs(packages/hds-ui): HASHI-56 SearchField spec 및 Storybook 리뷰 반영

* Feat(hds-ui): HASHI-53 Checkbox 공통 컴포넌트 구현 (#35)

* chore(hds-ui): HASHI-53 hds-icons 의존성 추가

* feat(hds-ui): HASHI-53 Checkbox 공통 컴포넌트 구현

* docs(hds-ui): HASHI-53 Checkbox 컴포넌트 스펙 추가

* test(hds-ui): HASHI-53 Checkbox 동작 테스트 추가

* fix(hds-ui): HASHI-53 Checkbox ref 전달 및 접근성 보완

* Feat(hds-ui): HASHI-44 chip 공통 컴포넌트 구현 (#33)

* feat(hds-ui): HASHI-44 chip 공통 컴포넌트 구현

* feat(hds-ui): HASHI-44 chip 공통 컴포넌트 코드리뷰 반영

* feat(hds-ui): HASHI-44 chip 공통 컴포넌트 disabled 제거

* Feat(hds-ui): HASHI-45 badge 공통 컴포넌트 구현 (#34)

* feat(hds-ui): HASHI-45 badge 공통 컴포넌트 구현

* feat(hds-ui): HASHI-45 badge 공통 컴포넌트 코드리뷰 반영

* Feat(hds-ui): HASHI-61 Carousel 컴포넌트 구현 (#38)

* feat(packages/hds-ui): HASHI-61 Carousel 컴포넌트 추가

* test(packages/hds-ui): HASHI-61 Carousel 테스트 추가

* docs(packages/hds-ui): HASHI-61 Carousel 문서와 스토리 추가

* fix(packages/hds-ui): HASHI-61 Carousel resize 위치 보정

* Feat(hds-ui): HASHI-54 Avatar 공통 컴포넌트 구현 (#40)

* feat(hds-ui): HASHI-54 Avatar 공통 컴포넌트 추가

* fix(hds-ui): HASHI-54 Avatar placeholder 표시 수정

* fix(hds-ui): HASHI-58 Avatar 이미지 로딩 실패 fallback 처리

* Feat(hds-ui): HASHI-60 Header 공통 컴포넌트 구현  (#43)

* docs(packages/hds-ui): HASHI-60 Header 컴포넌트 spec 추가

* feat(packages/hds-ui): HASHI-60 Header 구현

* test(packages/hds-ui): HASHI-60 Header 단위 테스트 추가

* docs(packages/hds-ui): HASHI-60 Header Storybook story 추가

* docs(packages/hds-ui): HASHI-60 Header 중복 MobileViewport393 story 제거

* fix(packages/hds-ui): HASHI-60 빈 subtitle이 Header 높이를 확장하지 않도록 수정

* Feat(project): HASHI-47 BottomSheet 공통 컴포넌트 & 로그인 바텀시트/ 필터 바텀시트 컴포넌트 구현 (#37)

* feat(hds-ui): HASHI-47 바텀시트 컴포넌트 구현

* feat(client): HASHI-47 로그인 바텀시트 구현

* feat(client): HASHI-47 검색 필터 바텀시트 구현

* chore(hds): HASHI-47 색상 및 아이콘 추가

* fix(hds-ui): HASHI-47 BottomSheet 모바일 프레임 너비 제한 적용

* refactor(client): HASHI-47 카카오 시작 버튼 분리 및 KakaoIcon 적용

* fix(client): HASHI-47 제목과 리스트 사이 간격 수정

* refactor(client): HASHI-47 FilterBottomSheet를 shared 컴포넌트로 이동

* fix(hds-ui): HASHI-47  BottomSheet 접근성 동작 보완

* docs(hds-ui): HASHI-47  BottomSheet 스토리북 예시 정리

* refactor(client): HASHI-47  카카오 로그인 아이콘 위치 조정

* Feat(hds-ui): HASHI 63 textarea 공통 컴포넌트 구현 (#42)

* feat(hds-ui): HASHI-63 Textarea 공통 컴포넌트 추가

* docs(hds-ui): HASHI-63 Textarea Storybook 추가

* fix(hds-ui): HASHI-63 Textarea 글자 수 제한 보강

* fix(hds-ui): HASHI-63 textarea 리뷰 피드백 반영

* fix(hds-ui): HASHI-63 textarea 너비 코드리뷰 반영

* Feat(hds-ui): HASHI-59 StarRating 공통 컴포넌트 구현  (#41)

* docs(packages/hds-ui): HASHI-59 StarRating 컴포넌트 spec 추가

* feat(packages/hds-ui): HASHI-59 StarRating 구현

* test(packages/hds-ui): HASHI-59 StarRating 단위 테스트 추가

* docs(packages/hds-ui): HASHI-59 StarRating Storybook story 추가

* fix(packages/hds-ui): HASHI-59 StarRating value를 0~5로 clamp해 별 표시와 aria-label 정합성 보장

* Chore(client): HASHI-62 레이아웃 및 라우팅/접근 권한 정책 설정 (#46)

* chore(client): HASHI-62 페이지 라우트 스캐폴드 추가

* chore(client): HASHI-62 라우터 구조 설정

* docs(client): HASHI-62 라우팅 및 접근 권한 정책 문서 수정

* refactor(client): HASHI-62 클라이언트 내부 import 경로 정리

* chore(client): HASHI-62 하단 네비게이션 레이아웃 설정

* feat(client): HASHI-62 준비중 페이지 라우트 추가

* feat(client): HASHI-62 하단 네비게이션 저장 지도 경로 연결

* feat(client): HASHI-62 홈 진입 로그인 유도 바텀시트 연결

* fix(hds-ui): HASHI-62 하단 네비게이션 아이템 간격 수정

* chore(root): HASHI-69 README 작성 (#50)

* Feat(hds-ui): HASHI-64 InputField 공통 컴포넌트 구현 (#44)

* feat(hds-ui): HASHI-64 InputField 공통 컴포넌트 구

* fix(hds-ui): HASHI-64 InputField 리뷰 피드백 반영

* Feat(hds-ui): HASHI-43 counter 컴포넌트 구현 (#48)

* feat(hds-ui): HASHI-43 counter 컴포넌트 구현

* feat(hds-ui): HASHI-43 counter 컴포넌트 코드리뷰 반영

* Feat(hds-ui): HASHI-42 calendar 공통 컴포넌트 구현 (#47)

* feat(hds-ui): HASHI-42 calendar 공통 컴포넌트 구현

* feat(hds-ui): HASHI-42 calendar 공통 컴포넌트 접근성 수정

* feat(hds-ui): HASHI-42 calendar 공통 컴포넌트 color 추가

* feat(hds-ui): HASHI-42 calendar 공통 컴포넌트 디자인 세부사항 반영

* feat(hds-ui): HASHI-42 calendar 컴포넌트 코드리뷰 반영

* Chore(turbo): HASHI-65 페이지 스펙 하네스 추가 (#45)

* Feat(client): HASHI-66 ComingSoon 페이지 퍼블리싱 (#49)

* style(client): HASHI-66 하단 네비 콘텐츠 영역 유틸 추가

* feat(client): HASHI-66 ComingSoon 페이지 퍼블리싱

* refactor(client): HASHI-66 준비중 페이지 이미지 접근성 정리

* fix(client): HASHI-66 empty 이미지 경로 수정

* fix(client): HASHI-66 ComingSoonPage main 중첩 제거

* Feat(client): HASHI-68 NotFound 페이지 구현 (#51)

* feat(client): HASHI-68 404 페이지 구현

* fix(hds-ui): HASHI-68 BottomNavigation 선택 상태 optional 처리

* fix(client): HASHI-68 404 페이지 접근성 제목 추가

* fix(client): HASHI-68 NotFoundPage main 중첩 제거

* fix(client): HASHI-68 하단 네비 콘텐츠 높이 유틸 적용

* Feat(reservation): HASHI-78 예약하기 페이지 구현 (#53)

* feat(apps/client): HASHI-78 예약 날짜 유틸 추가

* feat(apps/client): HASHI-78 예약하기 페이지 구현

* fix(apps/client): HASHI-78 GuestCounter 숫자 폭 고정

* chore(root): HASHI-78 lint 및 import 규칙 강화

* fix(packages/hds-ui): HASHI-78 캘린더 헤더 연도 표시

* style(apps/client): HASHI-78 예약 페이지 spacing 조정

* Feat(client): HASHI-70 LoginRequired 페이지 퍼블리싱 (#52)

* feat(hds-icons): HASHI-70 KakaoIcon 추가

* refactor(client): HASHI-70 KakaoStartButton shared로 이동

* feat(client): HASHI-70 로그인 필요 페이지 구현

* fix(hds-ui): HASHI-70 BottomNavigation 선택 상태 optional 처리

* chore(client): HASHI-70 임시 인증 상태 기본값 변경

* fix(client): HASHI-70 LoginRequiredPage main 중첩 제거

* feat(client): HASHI-70 KakaoStartButton className 확장

* fix(client): HASHI-70 로그인 바텀시트 전역 노출 제거

* Feat(client): HASHI-71 예약 상세 페이지 퍼블리싱 (#54)

* feat(hds-tokens): HASHI-71 z-index 토큰 추가

* feat(client): DefaultImage 공통 컴포넌트 추가 구현

* feat(client): 날짜 포맷 유틸 함수 추가

* feat(client): HASHI-71 예약 진행 상태 섹션 구현

* feat(client): HASHI-71 예약 접수 정보 카드 구현

* feat(client): HASHI-71 예약 안내 문구 섹션 구현

* feat(client): HASHI-71 예약 상세 하단 액션바 구현

* feat(client): HASHI-71 예약 상세 페이지 퍼블리싱

* docs(github): HASHI-71 PR 템플릿 Description 섹션 추가

* refactor(client): HASHI-71 예약 상세 컴포넌트 page-local 구조로 정리

* refactor(client): HASHI-71 예약 상세 페이지 로직 hook 분리

* fix(client): HASHI-71 예약 진행 날짜 표시 규칙 수정

* fix(client): HASHI-78 예약하기 페이지 fixed UI 기준 반영

* docs(reservation-detail): HASHI-71 예약 상세 페이지 스펙 추가

* refactor(client): HASHI-71 예약 상세 route param 연결

* fix(client): HASHI-71 예약 상세 진행 상태 UI 보정

* fix(client): HASHI-71 format 에러 해결

* Feat(client): HASHI-82 예약 요청 페이지 퍼블리싱 (#59)

* feat(apps/client): HASHI-82 예약 요청 페이지 구현

* style(apps/client): HASHI-82 예약 요청 페이지 포맷 적용

* fix(apps/client): HASHI-82 예약 요청 페이지 리뷰 반영

* fix(apps/client): HASHI-82 포인트 마크 HDS 아이콘 적용

* Feat(client): HASHI-74 홈 페이지 퍼블리싱 (#55)

* feat(client): HASHI-74 홈 페이지 퍼블리싱

* feat(client): HASHI-74 홈 페이지 퍼블리싱 코드리뷰 반영

* feat(client): HASHI-74 홈 페이지 퍼블리싱 큐레이션 캐러셀

* feat(client): HASHI-74 홈 페이지 퍼블리싱 큐레이션 캐러셀

* feat(client): HASHI-74 홈 페이지 퍼블리싱 코드리뷰 반영

* feat(client): HASHI-74 홈 페이지 퍼블리싱 코드리뷰 반영

* Feat(client): HASHI-72 리뷰 작성  페이지 퍼블리싱 (#58)

* Feat(hds-ui): HASHI-72 Badge interactive 모드 추가

* Feat(hds-ui): HASHI-72 Textarea showCounter 옵션 추가

* Feat(client): HASHI-72 review 입력 규칙 및 validation utils 추가

* Feat(client): HASHI-72 review 표시용 feature components 추가

* Feat(client): HASHI-72 InputReviewRate 구현

* Feat(client): HASHI-72 InputReviewKeyword 및 InputReviewMain 구현

* Feat(client): HASHI-72 ReviewNewPage 구현

* Refactor(client): HASHI-72 useReviewForm을 review feature hooks로 승격

* Update apps/client/src/features/review/components/inputReviewKeyword/InputReviewKeyword.tsx

* Apply suggestions from code review

* fix(client): HASHI-72 리뷰 작성 화면 반응형 레이아웃 개선

* docs(review): HASHI-72 ReviewSubmitBar spec 반응형 기준 반영

* refactor(client): HASHI-72 ReviewReservationSummary DefaultImage fallback 적용

* Feat(client): HASHI-75 검색 페이지 퍼블리싱 (#60)

* feat(client): HASHI-75 검색 페이지 퍼블리싱

* feat(client): HASHI-75 검색 페이지 퍼블리싱 구조 개선

* feat(client): HASHI-75 검색 페이지 퍼블리싱 스크롤바 제거

* feat(client): HASHI-75 검색 페이지 퍼블리싱 encodeURIComponent 적용

* feat(client): HASHI-75 검색 페이지 퍼블리싱 코드리뷰 반영

* Feat(client): HASHI-73 예약 정보 페이지 퍼블리싱 (#63)

* docs(client): HASHI-73 예약 정보 페이지 스펙 작성

* feat(client): HASHI-73 Empty 공통 컴포넌트 구현

* chore(client): 개발용 인증 상태 기본값 변경

* feat(hds-tokens): HASHI-73 z-index, gradient 토큰 추가

* docs(my-reservations): HASHI-73 예약 정보 페이지 구현 기준 정리

* feat(client): HASHI-73 예약 정보 상태 및 mock 데이터 구성

* feat(client): HASHI-73 예약 정보 헤더와 리스트 영역 구현

* feat(client): HASHI-73 예약 상태별 카드와 취소 모달 구현

* feat(client): HASHI-73 예약 필터 상태 URL query 연동

* fix(client): HASHI-73 auth 상태 원복 및 Empty spec 추가

* fix(client): HASHI-73 예약 상태 필터 중복 선택 방지

* docs(client): HASHI-73 예약 정보 empty 문구 정책 수정

* Feat(client): HASHI-77 매거진 리스트 페이지 퍼블리싱 (#61)

* feat(client): HASHI-77 매거진 리스트 페이지 퍼블리싱

* feat(client): HASHI-77 매거진 리스트 페이지 퍼블리싱 정규화 적용

* feat(client): HASHI-77 매거진 리스트 페이지 퍼블리싱 코드리뷰 반영

* feat(client): HASHI-77 매거진 리스트 페이지 퍼블리싱 검색 페이지 stickyHeader 적용

* Feat(client): HASHI-79 마이페이지 화면 퍼블리싱 (#64)

* docs(mypage): HASHI-79 마이페이지 구현 기준 정리

* feat(client): HASHI-79 준비중 안내 모달 구현

* feat(client): HASHI-79 마이페이지 상태와 메뉴 데이터 구성

* feat(client): HASHI-79 마이페이지 화면 퍼블리싱

* docs(conventions): HASHI-79 Tailwind scale class 사용 기준 추가

* fix(client): HASHI-79 마이페이지 외부 링크 처리 개선

* docs(client): HASHI-79 ComingSoonDialog spec 추가

* docs(hds-ui): HASHI-79 Dialog dim overlay 기준 반영

* Feat(client): HASHI-83 마이 리뷰 페이지 구현  (#62)

* fix(hds-ui): HASHI-83 StarRating filled 색상을 primary-400으로 수정

* feat(client): HASHI-83 myReviews 타입·상수·mock 데이터 추가

* feat(client): HASHI-83 myReviews 표시용 page-local components 추가

* feat(client): HASHI-83 WrittenReviewCard 구현

* feat(client): HASHI-83 useMyReviewsPage hook 추가

* feat(client): HASHI-83 MyReviewsPage 구현

* refactor(client): HASHI-83 ReviewDeleteConfirmDialog을 review feature로 분리

* chore(client): HASHI-83 MyReviewEmptyState 그래픽 슬롯 TODO 주석 정리

* fix(client): HASHI-83 마이 리뷰 화면 반응형 레이아웃 개선

* Fix(client): HASHI-83 마이리뷰 UI/a11y 정리

* Feat(client): HASHI-86 어디든 예약 페이지 구현 (#65)

* feat(apps/client): HASHI-86 어디든 예약 페이지 구현

* fix(apps/client): HASHI-86 어디든 예약 고정 레이어 정리

* fix(apps/client): HASHI-86 고정 헤더 important 제거

* fix(apps/client): HASHI-86 고정 헤더 위치 복구

* fix: HASHI-86 예약 흐름 QA 보강

* refactor(root): HASHI-86 예약 공통 UI 정리

* fix(apps/client): HASHI-86 예약 헤더 고정 복구

* Feat(client): HASHI-87 리뷰 상세 페이지 퍼블리싱 (#66)

* Feat(client): HASHI-87 리뷰 상세 페이지 퍼블리싱

* Feat(client): HASHI-87 리뷰 상세 UI 조정

* Chore(client): 테스트용 auth true

* Docs(client): 리뷰 상세 a11y 문구 정리

* Chore(client): auth status 기본값 원복

* feat(apps/client): HASHI-87 수정 준비중 안내 연결

* Feat(client): HASHI-76 프로필 생성 페이지 퍼블리싱 (#67)

* feat(client): HASHI-76 프로필 생성 페이지 퍼블리싱

* feat(client): HASHI-76 프로필 생성 페이지 퍼블리싱

* feat(client): HASHI-76 프로필 생성 페이지 퍼블리싱 코드리뷰 반영

* feat(client): HASHI-76 프로필 생성 페이지 퍼블리싱 코드리뷰 반영

* feat(client): HASHI-76 프로필 생성 페이지 authStatus 롤백

* Feat(hds-ui): HASHI-88 Toast 컴포넌트 구현 (#69)

* feat(hds-icons): HASHI-88 LinkIcon 추가

* feat(hds-ui): HASHI-88 Toast 컴포넌트  구현

* fix(hds-ui): HASHI-88 Toast 컴포넌트 스토리북 수정

* feat(hds-ui): HASHI-88 Toast 기본 자동 닫힘 헬퍼 추가

* fix(hds-ui): HASHI-88 Toast helper 루트 export 추가

* Feat(client): HASHI-90 로딩 페이지 구현 (#70)

* feat(apps/client): HASHI-90 로딩 화면 구현

* Fix(client): HASHI-90 chopsticks 그래픽 svg로 교체

* Fix(client): HASHI-90 lazy fallback route branch 적용

* Feat(client): HASHI-80 Hashi-Pick 페이지 퍼블리싱 (#56)

* feat(hds-ui): HASHI-80 BottomSheet 닫힘 옵션 추가

* feat(client): HASHI-80 식당 리스트 공통 UI 구현

* feat(client): HASHI-80 하시 Pick 페이지 퍼블리싱

* fix(client): HASHI-80 하시 Pick 라우트 연결

* fix(client): HASHI-80 식당 카드 디자인 QA 반영

* fix(client): HASHI-80 식당 카드 모바일 레이아웃 QA 반영

* refactor(client): HASHI-80 식당 리스트 기능 구조 이동

* fix(apps/client): HASHI-80 하시픽 코드리뷰 반영

* fix(apps/client): HASHI-80 하시픽 공통 리뷰 반영

* fix(apps/client): HASHI-80 리스트 back 홈 이동 반영

* fix(apps/client): HASHI-80 리스트 헤더 고정 반영

* Feat(client): HASHI-81 인기 맛집 페이지 퍼블리싱 (#57)

* feat(hds-ui): HASHI-80 BottomSheet 닫힘 옵션 추가

* feat(client): HASHI-80 식당 리스트 공통 UI 구현

* feat(client): HASHI-80 하시 Pick 페이지 퍼블리싱

* feat(client): HASHI-81 인기 맛집 페이지 퍼블리싱

* fix(client): HASHI-80 하시 Pick 라우트 연결

* fix(client): HASHI-81 인기 맛집 라우트 연결

* fix(client): HASHI-80 식당 카드 디자인 QA 반영

* fix(client): HASHI-80 식당 카드 모바일 레이아웃 QA 반영

* refactor(client): HASHI-80 식당 리스트 기능 구조 이동

* refactor(client): HASHI-81 식당 리스트 기능 경로 적용

* fix(apps/client): HASHI-81 인기맛집 코드리뷰 반영

* fix(apps/client): HASHI-81 인기맛집 코드리뷰 반영

* fix(apps/client): HASHI-81 리스트 back 홈 이동 반영

* fix(apps/client): HASHI-81 리스트 헤더 고정 반영

* fix(apps/client): HASHI-81 필터 초기화 닫힘 반영

* Feat(client): HASHI-84 오늘의 식당 및 메뉴 상세 페이지 퍼블리싱 (#68)

* feat(client): HASHI-84 오늘의 식당 및 메뉴 상세 페이지 퍼블리싱

* fix(apps/client): HASHI-84 식당 상세 리뷰 반영

* feat(apps/client): HASHI-84 공유 토스트 및 리뷰 CTA 여백 정리

* fix(apps/client): HASHI-84 토스트 위치 및 여백 조정

* chore(root): HASHI-92 API 연동 하네스 구성 (#71)

* chore(apps/client): HASHI-101 PWA 설정 추가 (#80)

- 모바일 환경에서 홈 화면 설치와 정적 앱 셸 오프라인 사용을 지원합니다.
- API 및 인증 응답은 캐시하지 않아 서버 상태 정합성을 유지합니다.

* Fix(client): HASHI-96 예약 정보 및 예약 상세 페이지 QA 반영 (#74)

* fix(hds-ui): HASHI-96 로그인 바텀시트 접근성 outlined 제거

* fix(client): HASHI-96 배경색 변경

* fix(client): HASHI-96 마이페이지 수정 버튼 disabled 처리

* fix(hds-ui): HASHI-96 마이페이지 Avatar default 이미지 적용

* fix(hds-ui): HASHI-96 로그인 바텀시트 디자인 수정

* fix(hds-ui): HASHI-96 Header shadow 적용

* fix(hds-ui): HASHI-96 예약 상세 페이지 CTA 경로 연결

* fix(client): HASHI-96 라우트 전환 시 스크롤 위치 초기화

* fix(client): HASHI-96 마이 리뷰 페이지 헤더 shadow 제거

* fix(client): HASHI-96 예약 정보 및 예약 상세 페이지 인터랙션 추가

* fix(client): HASHI-96 예약 취소 후 진행 중 예약 정보로 이동

* test(client): HASHI-96 브라우저 API 테스트 환경 보강

* fix(client): HASHI-96 예약 정보 및 예약 상세 페이지 proressbar 디자인 수정

* Fix(reservation): HASHI-98 예약 플로우 1차 QA 피드백 반영 (#75)

* docs(docs): HASHI-98 캐러셀 인터랙션 설계 추가

* feat(packages/hds-ui): HASHI-98 캐러셀 인터랙션 보강

* fix(packages/hds-ui): HASHI-98 달력 월 이동 제한

예약 달력에서 현재 월 이전으로 이동해 과거 날짜를 노출하지 않도록 하한을 추가한다.

* fix(apps/client): HASHI-98 예약 화면 QA 반영

고정 헤더, 요청 CTA 문구, 날짜 변경 시 시간 초기화를 반영해 예약 초안 상태가 화면과 일치하도록 한다.

* fix(apps/client): HASHI-98 예약 CTA 문구 수정

예약 입력 후 확인 단계로 이어지는 동작을 명확히 전달하기 위해 CTA를 다음으로 통일한다.

* Chore(client): HASHI-93 split vendor chunks (#72)

* fix(client): HASHI-94 1차 자체 QA 반영 (#79)

* Fix(client): HASHI-95 QA 버튼 스타일 및 마이리뷰 화면 보정 (#76)

* style(packages/hds-ui): HASHI-95 Button press 상태 적용

* feat(apps/client): HASHI-95 마이리뷰 QA 반영

* style(apps/client): HASHI-95 버튼 토큰 기준 정리

* style(apps/client): HASHI-95 포맷 정리

* style(packages/hds-ui): HASHI-95 Button active feedback 적용

* fix(apps/client): HASHI-95 카카오 버튼 press 색상 유지

* fix(apps/client): HASHI-95 카카오 버튼 active opacity 조정

* style(apps/client): HASHI-95 리뷰 CTA 색상 조정

* Fix(toast): HASHI-103 Toast 인터랙션 수정 (#81)

* fix(toast): HASHI-103 Toast 인터랙션 수정

* fix(client): HASHI-103 Toast 컴포넌트 애니메이션 적용

---------

Co-authored-by: jyeon03 <[email protected]>

* Feat(client): HASHI-100 라우트 로딩 플리커링 개선 (#78)

* feat(apps/client): HASHI-100 라우트 로딩 플리커링 완화

* fix(apps/client): HASHI-100 fallback 표시 시에만 최소 로딩 시간 적용

* Init(client):HASHI-28 swagger-typescript-api 세팅 (#82)

* init(client):HASHI-28 swagger-typescript-api 세팅

* init(root): HASHI-28 OpenAPI 타입 생성 skill 추가

* chore(root): HASHI-28 openapi-typescript peer 범위에 맞춰 TypeScript 버전 조정

---------

Co-authored-by: jyeon03 <[email protected]>
Co-authored-by: 백지연 <[email protected]>
Co-authored-by: 송민서 <[email protected]>
Co-authored-by: yurimidaH <[email protected]>
Co-authored-by: chungyoung kim <[email protected]>
gyeongbibin added a commit that referenced this pull request Jul 13, 2026
* init: 모노레포 설정 및 프로젝트 초기세팅

* init: 폴더 구조 세팅

* init: 절대경로 설정

* init: ESLint, Prettier 및 경로 alias 설정

* init: Turborepo 설정 추가

* init: PR 및 이슈 템플릿 추가

* chore: update branch protection status

* init: sds 패키지 scope 통일

* init: Turbo generator 구조 추가

* fix: 이슈 템플릿 제거 및 PR 템플릿 수정

* init: Tailwind CSS 기본 설정

* init: Tailwind class 병합 유틸 추가

* init: prettier-plugin-tailwindcss 추가 설정

* Init(project): 개발 워크플로우 자동화 구축 (#12)

* init: 오토리뷰어 설정

* init: 라벨 자동 할당 설정

* init: assignee 자동 할당 설정

* init: Discord PR 알림 자동화 설정

* fix: Auto Label workflow 권한 수정 (#15)

* Init(project) : CI/CD 파이프라인 구축  (#10)

* feat : ci/cd yml 파일 생성

* refactor: 리뷰사항 반영

* feat :  format:check, typecheck 설정 추가

* Init(project) : Vitest 및 Playwright 테스트 환경 설정 (#11)

* Vitest 및 Playwright 테스트 환경 설정

* init : vercel git 추적 제거

* init: 테스트 공통 설정 패키지 추가 및 인프라 정리

* refactor : sds-icons 테스트코드 인프라 제거

* refactor: E2E 테스트 없을 때 test:e2e 통과하도록 수정

* style: Prettier 포맷 수정으로 format:check CI 통과

* init: husky 및 lint-staged 설정 (#13)

* Init(project): ky 및 TanStack Query 세팅 (#7)

* Init(project): SVGR 설정 (#8)

* init: SVGR 의존성 추가

* init: Vite에 SVGR 플러그인 연결

* init: SVG React 컴포넌트 타입 선언 추가

* init: SVGR 적용 위치를 sds-icons로 변경

* init: sds-icons SVG 자동 생성 스크립트 추가

* refactor: SVGR 아이콘 생성 스크립트 개선

* Init(project): Storybook 초기 세팅 (#9)

* init: Storybook 의존성 및 실행 스크립트 추가

* init: sds-ui Storybook 설정 추가

* init: Button Storybook 예시 추가

* init: Storybook 빌드 산출물 제외 설정

* init: Chromatic 연동 및 배포 검증

* init: Storybook 빌드 산출물 제외 설정

* chore: Chromatic CI 설정 추가

* chore: package 중복 의존성 제거

* Init(project): Sentry 세팅 및 디스코드 알림 연동  (#14)

* init: @sentry/react 의존성 추가

* init: Sentry environment/release용 Vite env 설정

* init: Sentry 초기화 및 ErrorBoundary 연동

* fix: Auto Label 워크플로 PR 라벨 추가 권한 수정

pull-requests: read로는 PR 라벨 API 호출이 403으로 실패하므로 write 권한을 부여합니다.

* init : Source Map 업로드 자동화

* refactor: Session Replay 제외

* Init(project): AI 작업 환경 골격 추가 (#6)

* docs(docs): SIKSA-20 컨벤션 문서 추가

* docs(docs): SIKSA-20 아키텍처 문서 추가

* init(root): SIKSA-20 문서 라우팅 허브 추가

* init(root): SIKSA-20 Codex 스킬 골격 추가

* docs(docs): SIKSA-20 디자인시스템 관련 문서 추가

* docs(docs): SIKSA-20 agent workflow 문서 보강

* docs(docs): HASHI-20 프로젝트명 변경 반영

* style(root): HASHI-20 skill 설정 포맷 수정

* style(docs): HASHI-20 Tailwind 예시 포맷 수정

* chore(root): HASHI-33 FE agent harness 구조 개선 (#16)

* fix(root): HASHI-31 서비스명 및 패키지명 변경 (#17)

* Chore(project): HASHI-34 CI 및 배포 워크플로우 분리 (#18)

* fix(root): HASHI-31 서비스명 및 패키지명 변경

* chore(project): HASHI-34 CI 및 배포 워크플로우 분리

* fix(project): HASHI-34 GitHub Actions Node 버전 수정

* Chore(hds): HASHI-35 HDS 패키지 entry 설정 보강 (#19)

* chore(hds): HASHI-35 HDS 패키지 entry 설정 보강

* chore(root): HASHI-35 Vercel preview deployment 확인

* Chore(hds): HASHI-36 HDS 디자인 토큰 및 Storybook 스타일 환경 설정 (#21)

* chore(hds): HASHI-36 HDS 디자인 토큰 추가

* chore(hds): HASHI-36 Storybook 토큰 스타일 환경 설정

* Chore(hds): 디자인시스템 agent harness 및 컴포넌트 generator 정비 (#23)

* Feat(icon): HASHI-37 디자인 시스템 아이콘 추가 (#22)

* feat: HASHI-37 Navigation 아이콘 추가

* feat: HASHI-37 Navigation icon 추가

* fix(icon): HASHI-37 Navigation icon 최종 아이콘 반영

* fix(icon): HASHI-37 Plus/Minus 아이콘 구조 개선

* fix(icon): HASHI-37 Star 아이콘 구조 개선

* fix(icon): HASHI-37 Search 아이콘 구조 개선

* fix(icon): HASHI-37 Check 아이콘 구조 개선

* fix(icon): HASHI-37 Cancle 아이콘 구조 개선

* fix(icon): HASHI-37 아이콘 네이밍 수정

* feat(icon): HASHI-37 Menu 아이콘 추가

* Chore(agent): HASHI-41 Storybook agent skill 추가 및 문서 정리 (#24)

* chore(agent): HASHI-41 Storybook agent skill 추가 및 문서 정리

* chore(hds): HASHI-41 CVA 의존성 추가

* Feat(api): HASHI-38 공통 응답 스키마 정의 및 헬퍼 추가  (#20)

* feat(api) : HASHI-38 백엔드 공통 응답 스키마 타입 추가

* feat(api): HASHI-38 API 응답 파싱용 request 헬퍼 추가

* chore(github): HASHI-38 preview build 재실행

* fix(api): HASHI-38 API 응답 헬퍼 에러 처리 단순화

* fix(api): HASHI-38 공통 응답 스키마 및 에러 처리 적용

* test(api): HASHI-38 request 헬퍼 단위 테스트 추가 및 env 예시 설정

* Feat(hds-ui): HASHI-51 Bottom Navigation 구현 (#25)

* feat(packages/hds-icons): HASHI-51 내비게이션 아이콘 색상 제어 지원

* feat(packages/hds-ui): HASHI-51 BottomNavigation 컴포넌트 추가

* Feat(hds-ui): HASHI-46 Tabs 공통 컴포넌트 구현 (#26)

* feat(hds-ui): HASHI-46 Tabs 공통 컴포넌트 구현

* chore(hds-ui): HASHI-46 Storybook Pretendard 폰트 적용

* fix(hds-ui): HASHI-46 Tabs 접근성 속성 추가

* Feat(hds-ui): HASHI-52 Dialog 컴포넌트 구현 (#29)

* feat(packages/hds-ui): HASHI-52 Dialog 컴포넌트 추가

* style(packages/hds-ui): HASHI-52 Dialog 리뷰 반영

* docs(packages/hds-ui): HASHI-52 Dialog 구현 기준 보강

* chore(root): HASHI-57 Codex hook 추가 (#30)

* Feat(hds-ui): HASHI-49 CollapsibleText 컴포넌트 구현 (#27)

* feat(hds-ui): HASHI-49 CollapsibleText 컴포넌트 구현

* refactor(hds-ui): HASHI-49 CollapsibleText public API 정리

* fix(hds-ui): HASHI-49 CollapsibleText 더보기 노출 조건 수정

* fix(hds-icons): HASHI-49 아이콘 색상 currentColor 적용

* Feat(hds-ui): HASHI-50 Button 컴포넌트 구현 (#28)

* docs(docs): HASHI-50 border/radius px rem 사용 가이드 추가

Figma 고정 수치와 대응되는 border 계열 값은 root font-size 영향을 받지 않도록 px 또는 token을 쓰도록 명시합니다.

* docs(packages/hds-ui): HASHI-50 Button 컴포넌트 spec 추가

Figma 기준 primary/neutral variant, size, width, 상태, 접근성, v1 범위를 정의합니다.

* feat(packages/hds-ui): HASHI-50 Button variant/size/width 구현

cva 기반 primary/neutral 스타일, icon slot, disabled/loading, public type export를 추가합니다.

* test(packages/hds-ui): HASHI-50 Button 단위 테스트 추가

type 기본값, submit, loading interaction 차단, icon slot 렌더링을 검증합니다.

* docs(packages/hds-ui): HASHI-50 Button Storybook story 추가

variant, size, full width, 탈퇴 2버튼, disabled, loading, icon, overflow 케이스를 문서화합니다.

* refactor(packages/hds-ui): HASHI-50 Button Storybook Tailwind 스케일 적용

arbitrary rem/px를 text-sm, w-60 utility로 정리합니다.

* fix(packages/hds-ui): HASHI-50 Button loading 중 slot icon 숨김

loading 상태에서는 leftIcon/rightIcon을 숨기고 spinner만 표시합니다.

* test(packages/hds-ui): HASHI-50 Button loading icon 숨김 테스트 추가

* docs(packages/hds-ui): HASHI-50 Button spec 및 Storybook 리뷰 반영

currentColor icon 정책, loading icon 정책을 spec에 반영하고 HDS icon 기반 story를 추가합니다.

* Feat(client): HASHI-58 모바일 뷰포트 레이아웃 설정 (#32)

* feat(client): HASHI-58 모바일 뷰포트 레이아웃 설정

* feat(client): HASHI-58 모바일 레이아웃 변수 추가

* style(client): HASHI-58 모바일 fixed 상하단 UI 유틸 추가

* Feat(hds-ui): HASHI-55 IconButton 컴포넌트 구현 (#31)

* docs(packages/hds-ui): HASHI-55 IconButton 컴포넌트 spec 추가

Figma 기준 xs/md size, plain surface, aria-label 필수, v1 범위와 deferred 결정을 정의합니다.

* feat(packages/hds-ui): HASHI-55 IconButton size/loading 구현

cva 기반 xs/md touch target, bare surface, disabled/loading, aria-label 계약과 public type export를 추가합니다.

* test(packages/hds-ui): HASHI-55 IconButton 단위 테스트 추가

accessible name, type 기본값, disabled/loading interaction 차단을 검증합니다.

* docs(packages/hds-ui): HASHI-55 IconButton Storybook story 추가

topbar, edit className, size, disabled, loading, 넓은 hit area 케이스를 문서화합니다.

* chore(packages/hds-ui): HASHI-55 develop 병합 후 충돌 해결 완료

* refactor(packages/hds-ui): HASHI-55 IconButton Tailwind 스케일 utility 적용

size arbitrary rem을 size-6/size-10으로 바꾸고 story viewport 폭을 393px 기준으로 정리합니다.

* refactor(packages/hds-ui): Button export를 folder index 경로로 정리

button/index.ts barrel export를 추가하고 components/index.ts에서 ./button 경로를 사용합니다.

* Feat(hds-ui): HASHI-56 SearchField 공통 컴포넌트 구현  (#36)

* docs(packages/hds-ui): HASHI-56 SearchField 컴포넌트 spec 추가

* fix(packages/hds-icons): SearchIcon stroke를 currentColor로 통일

SearchField에서 아이콘 색상을 컨테이너 text color로 상속받도록 합니다.

* feat(packages/hds-ui): HASHI-56 SearchField 구현

검색 아이콘 고정, native search input, disabled/focus-within 상태를 지원합니다.
@hashi/hds-icons를 runtime dependency로 이동합니다.

* test(packages/hds-ui): HASHI-56 SearchField 단위 테스트 추가

* docs(packages/hds-ui): HASHI-56 SearchField Storybook story 추가

* docs(packages/hds-ui): HASHI-56 SearchField 모바일 viewport를 430px로 수정

Storybook wrapper와 spec 체크리스트를 430px 기준으로 맞춥니다.

* feat(packages/hds-ui): HASHI-56 SearchField ref forwarding 및 focus 스타일 정리

* test(packages/hds-ui): HASHI-56 SearchField ref forwarding 테스트 추가

* docs(packages/hds-ui): HASHI-56 SearchField spec 및 Storybook 리뷰 반영

* Feat(hds-ui): HASHI-53 Checkbox 공통 컴포넌트 구현 (#35)

* chore(hds-ui): HASHI-53 hds-icons 의존성 추가

* feat(hds-ui): HASHI-53 Checkbox 공통 컴포넌트 구현

* docs(hds-ui): HASHI-53 Checkbox 컴포넌트 스펙 추가

* test(hds-ui): HASHI-53 Checkbox 동작 테스트 추가

* fix(hds-ui): HASHI-53 Checkbox ref 전달 및 접근성 보완

* Feat(hds-ui): HASHI-44 chip 공통 컴포넌트 구현 (#33)

* feat(hds-ui): HASHI-44 chip 공통 컴포넌트 구현

* feat(hds-ui): HASHI-44 chip 공통 컴포넌트 코드리뷰 반영

* feat(hds-ui): HASHI-44 chip 공통 컴포넌트 disabled 제거

* Feat(hds-ui): HASHI-45 badge 공통 컴포넌트 구현 (#34)

* feat(hds-ui): HASHI-45 badge 공통 컴포넌트 구현

* feat(hds-ui): HASHI-45 badge 공통 컴포넌트 코드리뷰 반영

* Feat(hds-ui): HASHI-61 Carousel 컴포넌트 구현 (#38)

* feat(packages/hds-ui): HASHI-61 Carousel 컴포넌트 추가

* test(packages/hds-ui): HASHI-61 Carousel 테스트 추가

* docs(packages/hds-ui): HASHI-61 Carousel 문서와 스토리 추가

* fix(packages/hds-ui): HASHI-61 Carousel resize 위치 보정

* Feat(hds-ui): HASHI-54 Avatar 공통 컴포넌트 구현 (#40)

* feat(hds-ui): HASHI-54 Avatar 공통 컴포넌트 추가

* fix(hds-ui): HASHI-54 Avatar placeholder 표시 수정

* fix(hds-ui): HASHI-58 Avatar 이미지 로딩 실패 fallback 처리

* Feat(hds-ui): HASHI-60 Header 공통 컴포넌트 구현  (#43)

* docs(packages/hds-ui): HASHI-60 Header 컴포넌트 spec 추가

* feat(packages/hds-ui): HASHI-60 Header 구현

* test(packages/hds-ui): HASHI-60 Header 단위 테스트 추가

* docs(packages/hds-ui): HASHI-60 Header Storybook story 추가

* docs(packages/hds-ui): HASHI-60 Header 중복 MobileViewport393 story 제거

* fix(packages/hds-ui): HASHI-60 빈 subtitle이 Header 높이를 확장하지 않도록 수정

* Feat(project): HASHI-47 BottomSheet 공통 컴포넌트 & 로그인 바텀시트/ 필터 바텀시트 컴포넌트 구현 (#37)

* feat(hds-ui): HASHI-47 바텀시트 컴포넌트 구현

* feat(client): HASHI-47 로그인 바텀시트 구현

* feat(client): HASHI-47 검색 필터 바텀시트 구현

* chore(hds): HASHI-47 색상 및 아이콘 추가

* fix(hds-ui): HASHI-47 BottomSheet 모바일 프레임 너비 제한 적용

* refactor(client): HASHI-47 카카오 시작 버튼 분리 및 KakaoIcon 적용

* fix(client): HASHI-47 제목과 리스트 사이 간격 수정

* refactor(client): HASHI-47 FilterBottomSheet를 shared 컴포넌트로 이동

* fix(hds-ui): HASHI-47  BottomSheet 접근성 동작 보완

* docs(hds-ui): HASHI-47  BottomSheet 스토리북 예시 정리

* refactor(client): HASHI-47  카카오 로그인 아이콘 위치 조정

* Feat(hds-ui): HASHI 63 textarea 공통 컴포넌트 구현 (#42)

* feat(hds-ui): HASHI-63 Textarea 공통 컴포넌트 추가

* docs(hds-ui): HASHI-63 Textarea Storybook 추가

* fix(hds-ui): HASHI-63 Textarea 글자 수 제한 보강

* fix(hds-ui): HASHI-63 textarea 리뷰 피드백 반영

* fix(hds-ui): HASHI-63 textarea 너비 코드리뷰 반영

* Feat(hds-ui): HASHI-59 StarRating 공통 컴포넌트 구현  (#41)

* docs(packages/hds-ui): HASHI-59 StarRating 컴포넌트 spec 추가

* feat(packages/hds-ui): HASHI-59 StarRating 구현

* test(packages/hds-ui): HASHI-59 StarRating 단위 테스트 추가

* docs(packages/hds-ui): HASHI-59 StarRating Storybook story 추가

* fix(packages/hds-ui): HASHI-59 StarRating value를 0~5로 clamp해 별 표시와 aria-label 정합성 보장

* Chore(client): HASHI-62 레이아웃 및 라우팅/접근 권한 정책 설정 (#46)

* chore(client): HASHI-62 페이지 라우트 스캐폴드 추가

* chore(client): HASHI-62 라우터 구조 설정

* docs(client): HASHI-62 라우팅 및 접근 권한 정책 문서 수정

* refactor(client): HASHI-62 클라이언트 내부 import 경로 정리

* chore(client): HASHI-62 하단 네비게이션 레이아웃 설정

* feat(client): HASHI-62 준비중 페이지 라우트 추가

* feat(client): HASHI-62 하단 네비게이션 저장 지도 경로 연결

* feat(client): HASHI-62 홈 진입 로그인 유도 바텀시트 연결

* fix(hds-ui): HASHI-62 하단 네비게이션 아이템 간격 수정

* chore(root): HASHI-69 README 작성 (#50)

* Feat(hds-ui): HASHI-64 InputField 공통 컴포넌트 구현 (#44)

* feat(hds-ui): HASHI-64 InputField 공통 컴포넌트 구

* fix(hds-ui): HASHI-64 InputField 리뷰 피드백 반영

* Feat(hds-ui): HASHI-43 counter 컴포넌트 구현 (#48)

* feat(hds-ui): HASHI-43 counter 컴포넌트 구현

* feat(hds-ui): HASHI-43 counter 컴포넌트 코드리뷰 반영

* Feat(hds-ui): HASHI-42 calendar 공통 컴포넌트 구현 (#47)

* feat(hds-ui): HASHI-42 calendar 공통 컴포넌트 구현

* feat(hds-ui): HASHI-42 calendar 공통 컴포넌트 접근성 수정

* feat(hds-ui): HASHI-42 calendar 공통 컴포넌트 color 추가

* feat(hds-ui): HASHI-42 calendar 공통 컴포넌트 디자인 세부사항 반영

* feat(hds-ui): HASHI-42 calendar 컴포넌트 코드리뷰 반영

* Chore(turbo): HASHI-65 페이지 스펙 하네스 추가 (#45)

* Feat(client): HASHI-66 ComingSoon 페이지 퍼블리싱 (#49)

* style(client): HASHI-66 하단 네비 콘텐츠 영역 유틸 추가

* feat(client): HASHI-66 ComingSoon 페이지 퍼블리싱

* refactor(client): HASHI-66 준비중 페이지 이미지 접근성 정리

* fix(client): HASHI-66 empty 이미지 경로 수정

* fix(client): HASHI-66 ComingSoonPage main 중첩 제거

* Feat(client): HASHI-68 NotFound 페이지 구현 (#51)

* feat(client): HASHI-68 404 페이지 구현

* fix(hds-ui): HASHI-68 BottomNavigation 선택 상태 optional 처리

* fix(client): HASHI-68 404 페이지 접근성 제목 추가

* fix(client): HASHI-68 NotFoundPage main 중첩 제거

* fix(client): HASHI-68 하단 네비 콘텐츠 높이 유틸 적용

* Feat(reservation): HASHI-78 예약하기 페이지 구현 (#53)

* feat(apps/client): HASHI-78 예약 날짜 유틸 추가

* feat(apps/client): HASHI-78 예약하기 페이지 구현

* fix(apps/client): HASHI-78 GuestCounter 숫자 폭 고정

* chore(root): HASHI-78 lint 및 import 규칙 강화

* fix(packages/hds-ui): HASHI-78 캘린더 헤더 연도 표시

* style(apps/client): HASHI-78 예약 페이지 spacing 조정

* Feat(client): HASHI-70 LoginRequired 페이지 퍼블리싱 (#52)

* feat(hds-icons): HASHI-70 KakaoIcon 추가

* refactor(client): HASHI-70 KakaoStartButton shared로 이동

* feat(client): HASHI-70 로그인 필요 페이지 구현

* fix(hds-ui): HASHI-70 BottomNavigation 선택 상태 optional 처리

* chore(client): HASHI-70 임시 인증 상태 기본값 변경

* fix(client): HASHI-70 LoginRequiredPage main 중첩 제거

* feat(client): HASHI-70 KakaoStartButton className 확장

* fix(client): HASHI-70 로그인 바텀시트 전역 노출 제거

* Feat(client): HASHI-71 예약 상세 페이지 퍼블리싱 (#54)

* feat(hds-tokens): HASHI-71 z-index 토큰 추가

* feat(client): DefaultImage 공통 컴포넌트 추가 구현

* feat(client): 날짜 포맷 유틸 함수 추가

* feat(client): HASHI-71 예약 진행 상태 섹션 구현

* feat(client): HASHI-71 예약 접수 정보 카드 구현

* feat(client): HASHI-71 예약 안내 문구 섹션 구현

* feat(client): HASHI-71 예약 상세 하단 액션바 구현

* feat(client): HASHI-71 예약 상세 페이지 퍼블리싱

* docs(github): HASHI-71 PR 템플릿 Description 섹션 추가

* refactor(client): HASHI-71 예약 상세 컴포넌트 page-local 구조로 정리

* refactor(client): HASHI-71 예약 상세 페이지 로직 hook 분리

* fix(client): HASHI-71 예약 진행 날짜 표시 규칙 수정

* fix(client): HASHI-78 예약하기 페이지 fixed UI 기준 반영

* docs(reservation-detail): HASHI-71 예약 상세 페이지 스펙 추가

* refactor(client): HASHI-71 예약 상세 route param 연결

* fix(client): HASHI-71 예약 상세 진행 상태 UI 보정

* fix(client): HASHI-71 format 에러 해결

* Feat(client): HASHI-82 예약 요청 페이지 퍼블리싱 (#59)

* feat(apps/client): HASHI-82 예약 요청 페이지 구현

* style(apps/client): HASHI-82 예약 요청 페이지 포맷 적용

* fix(apps/client): HASHI-82 예약 요청 페이지 리뷰 반영

* fix(apps/client): HASHI-82 포인트 마크 HDS 아이콘 적용

* Feat(client): HASHI-74 홈 페이지 퍼블리싱 (#55)

* feat(client): HASHI-74 홈 페이지 퍼블리싱

* feat(client): HASHI-74 홈 페이지 퍼블리싱 코드리뷰 반영

* feat(client): HASHI-74 홈 페이지 퍼블리싱 큐레이션 캐러셀

* feat(client): HASHI-74 홈 페이지 퍼블리싱 큐레이션 캐러셀

* feat(client): HASHI-74 홈 페이지 퍼블리싱 코드리뷰 반영

* feat(client): HASHI-74 홈 페이지 퍼블리싱 코드리뷰 반영

* Feat(client): HASHI-72 리뷰 작성  페이지 퍼블리싱 (#58)

* Feat(hds-ui): HASHI-72 Badge interactive 모드 추가

* Feat(hds-ui): HASHI-72 Textarea showCounter 옵션 추가

* Feat(client): HASHI-72 review 입력 규칙 및 validation utils 추가

* Feat(client): HASHI-72 review 표시용 feature components 추가

* Feat(client): HASHI-72 InputReviewRate 구현

* Feat(client): HASHI-72 InputReviewKeyword 및 InputReviewMain 구현

* Feat(client): HASHI-72 ReviewNewPage 구현

* Refactor(client): HASHI-72 useReviewForm을 review feature hooks로 승격

* Update apps/client/src/features/review/components/inputReviewKeyword/InputReviewKeyword.tsx

* Apply suggestions from code review

* fix(client): HASHI-72 리뷰 작성 화면 반응형 레이아웃 개선

* docs(review): HASHI-72 ReviewSubmitBar spec 반응형 기준 반영

* refactor(client): HASHI-72 ReviewReservationSummary DefaultImage fallback 적용

* Feat(client): HASHI-75 검색 페이지 퍼블리싱 (#60)

* feat(client): HASHI-75 검색 페이지 퍼블리싱

* feat(client): HASHI-75 검색 페이지 퍼블리싱 구조 개선

* feat(client): HASHI-75 검색 페이지 퍼블리싱 스크롤바 제거

* feat(client): HASHI-75 검색 페이지 퍼블리싱 encodeURIComponent 적용

* feat(client): HASHI-75 검색 페이지 퍼블리싱 코드리뷰 반영

* Feat(client): HASHI-73 예약 정보 페이지 퍼블리싱 (#63)

* docs(client): HASHI-73 예약 정보 페이지 스펙 작성

* feat(client): HASHI-73 Empty 공통 컴포넌트 구현

* chore(client): 개발용 인증 상태 기본값 변경

* feat(hds-tokens): HASHI-73 z-index, gradient 토큰 추가

* docs(my-reservations): HASHI-73 예약 정보 페이지 구현 기준 정리

* feat(client): HASHI-73 예약 정보 상태 및 mock 데이터 구성

* feat(client): HASHI-73 예약 정보 헤더와 리스트 영역 구현

* feat(client): HASHI-73 예약 상태별 카드와 취소 모달 구현

* feat(client): HASHI-73 예약 필터 상태 URL query 연동

* fix(client): HASHI-73 auth 상태 원복 및 Empty spec 추가

* fix(client): HASHI-73 예약 상태 필터 중복 선택 방지

* docs(client): HASHI-73 예약 정보 empty 문구 정책 수정

* Feat(client): HASHI-77 매거진 리스트 페이지 퍼블리싱 (#61)

* feat(client): HASHI-77 매거진 리스트 페이지 퍼블리싱

* feat(client): HASHI-77 매거진 리스트 페이지 퍼블리싱 정규화 적용

* feat(client): HASHI-77 매거진 리스트 페이지 퍼블리싱 코드리뷰 반영

* feat(client): HASHI-77 매거진 리스트 페이지 퍼블리싱 검색 페이지 stickyHeader 적용

* Feat(client): HASHI-79 마이페이지 화면 퍼블리싱 (#64)

* docs(mypage): HASHI-79 마이페이지 구현 기준 정리

* feat(client): HASHI-79 준비중 안내 모달 구현

* feat(client): HASHI-79 마이페이지 상태와 메뉴 데이터 구성

* feat(client): HASHI-79 마이페이지 화면 퍼블리싱

* docs(conventions): HASHI-79 Tailwind scale class 사용 기준 추가

* fix(client): HASHI-79 마이페이지 외부 링크 처리 개선

* docs(client): HASHI-79 ComingSoonDialog spec 추가

* docs(hds-ui): HASHI-79 Dialog dim overlay 기준 반영

* Feat(client): HASHI-83 마이 리뷰 페이지 구현  (#62)

* fix(hds-ui): HASHI-83 StarRating filled 색상을 primary-400으로 수정

* feat(client): HASHI-83 myReviews 타입·상수·mock 데이터 추가

* feat(client): HASHI-83 myReviews 표시용 page-local components 추가

* feat(client): HASHI-83 WrittenReviewCard 구현

* feat(client): HASHI-83 useMyReviewsPage hook 추가

* feat(client): HASHI-83 MyReviewsPage 구현

* refactor(client): HASHI-83 ReviewDeleteConfirmDialog을 review feature로 분리

* chore(client): HASHI-83 MyReviewEmptyState 그래픽 슬롯 TODO 주석 정리

* fix(client): HASHI-83 마이 리뷰 화면 반응형 레이아웃 개선

* Fix(client): HASHI-83 마이리뷰 UI/a11y 정리

* Feat(client): HASHI-86 어디든 예약 페이지 구현 (#65)

* feat(apps/client): HASHI-86 어디든 예약 페이지 구현

* fix(apps/client): HASHI-86 어디든 예약 고정 레이어 정리

* fix(apps/client): HASHI-86 고정 헤더 important 제거

* fix(apps/client): HASHI-86 고정 헤더 위치 복구

* fix: HASHI-86 예약 흐름 QA 보강

* refactor(root): HASHI-86 예약 공통 UI 정리

* fix(apps/client): HASHI-86 예약 헤더 고정 복구

* Feat(client): HASHI-87 리뷰 상세 페이지 퍼블리싱 (#66)

* Feat(client): HASHI-87 리뷰 상세 페이지 퍼블리싱

* Feat(client): HASHI-87 리뷰 상세 UI 조정

* Chore(client): 테스트용 auth true

* Docs(client): 리뷰 상세 a11y 문구 정리

* Chore(client): auth status 기본값 원복

* feat(apps/client): HASHI-87 수정 준비중 안내 연결

* Feat(client): HASHI-76 프로필 생성 페이지 퍼블리싱 (#67)

* feat(client): HASHI-76 프로필 생성 페이지 퍼블리싱

* feat(client): HASHI-76 프로필 생성 페이지 퍼블리싱

* feat(client): HASHI-76 프로필 생성 페이지 퍼블리싱 코드리뷰 반영

* feat(client): HASHI-76 프로필 생성 페이지 퍼블리싱 코드리뷰 반영

* feat(client): HASHI-76 프로필 생성 페이지 authStatus 롤백

* Feat(hds-ui): HASHI-88 Toast 컴포넌트 구현 (#69)

* feat(hds-icons): HASHI-88 LinkIcon 추가

* feat(hds-ui): HASHI-88 Toast 컴포넌트  구현

* fix(hds-ui): HASHI-88 Toast 컴포넌트 스토리북 수정

* feat(hds-ui): HASHI-88 Toast 기본 자동 닫힘 헬퍼 추가

* fix(hds-ui): HASHI-88 Toast helper 루트 export 추가

* Feat(client): HASHI-90 로딩 페이지 구현 (#70)

* feat(apps/client): HASHI-90 로딩 화면 구현

* Fix(client): HASHI-90 chopsticks 그래픽 svg로 교체

* Fix(client): HASHI-90 lazy fallback route branch 적용

* Feat(client): HASHI-80 Hashi-Pick 페이지 퍼블리싱 (#56)

* feat(hds-ui): HASHI-80 BottomSheet 닫힘 옵션 추가

* feat(client): HASHI-80 식당 리스트 공통 UI 구현

* feat(client): HASHI-80 하시 Pick 페이지 퍼블리싱

* fix(client): HASHI-80 하시 Pick 라우트 연결

* fix(client): HASHI-80 식당 카드 디자인 QA 반영

* fix(client): HASHI-80 식당 카드 모바일 레이아웃 QA 반영

* refactor(client): HASHI-80 식당 리스트 기능 구조 이동

* fix(apps/client): HASHI-80 하시픽 코드리뷰 반영

* fix(apps/client): HASHI-80 하시픽 공통 리뷰 반영

* fix(apps/client): HASHI-80 리스트 back 홈 이동 반영

* fix(apps/client): HASHI-80 리스트 헤더 고정 반영

* Feat(client): HASHI-81 인기 맛집 페이지 퍼블리싱 (#57)

* feat(hds-ui): HASHI-80 BottomSheet 닫힘 옵션 추가

* feat(client): HASHI-80 식당 리스트 공통 UI 구현

* feat(client): HASHI-80 하시 Pick 페이지 퍼블리싱

* feat(client): HASHI-81 인기 맛집 페이지 퍼블리싱

* fix(client): HASHI-80 하시 Pick 라우트 연결

* fix(client): HASHI-81 인기 맛집 라우트 연결

* fix(client): HASHI-80 식당 카드 디자인 QA 반영

* fix(client): HASHI-80 식당 카드 모바일 레이아웃 QA 반영

* refactor(client): HASHI-80 식당 리스트 기능 구조 이동

* refactor(client): HASHI-81 식당 리스트 기능 경로 적용

* fix(apps/client): HASHI-81 인기맛집 코드리뷰 반영

* fix(apps/client): HASHI-81 인기맛집 코드리뷰 반영

* fix(apps/client): HASHI-81 리스트 back 홈 이동 반영

* fix(apps/client): HASHI-81 리스트 헤더 고정 반영

* fix(apps/client): HASHI-81 필터 초기화 닫힘 반영

* Feat(client): HASHI-84 오늘의 식당 및 메뉴 상세 페이지 퍼블리싱 (#68)

* feat(client): HASHI-84 오늘의 식당 및 메뉴 상세 페이지 퍼블리싱

* fix(apps/client): HASHI-84 식당 상세 리뷰 반영

* feat(apps/client): HASHI-84 공유 토스트 및 리뷰 CTA 여백 정리

* fix(apps/client): HASHI-84 토스트 위치 및 여백 조정

* chore(root): HASHI-92 API 연동 하네스 구성 (#71)

* chore(apps/client): HASHI-101 PWA 설정 추가 (#80)

- 모바일 환경에서 홈 화면 설치와 정적 앱 셸 오프라인 사용을 지원합니다.
- API 및 인증 응답은 캐시하지 않아 서버 상태 정합성을 유지합니다.

* Fix(client): HASHI-96 예약 정보 및 예약 상세 페이지 QA 반영 (#74)

* fix(hds-ui): HASHI-96 로그인 바텀시트 접근성 outlined 제거

* fix(client): HASHI-96 배경색 변경

* fix(client): HASHI-96 마이페이지 수정 버튼 disabled 처리

* fix(hds-ui): HASHI-96 마이페이지 Avatar default 이미지 적용

* fix(hds-ui): HASHI-96 로그인 바텀시트 디자인 수정

* fix(hds-ui): HASHI-96 Header shadow 적용

* fix(hds-ui): HASHI-96 예약 상세 페이지 CTA 경로 연결

* fix(client): HASHI-96 라우트 전환 시 스크롤 위치 초기화

* fix(client): HASHI-96 마이 리뷰 페이지 헤더 shadow 제거

* fix(client): HASHI-96 예약 정보 및 예약 상세 페이지 인터랙션 추가

* fix(client): HASHI-96 예약 취소 후 진행 중 예약 정보로 이동

* test(client): HASHI-96 브라우저 API 테스트 환경 보강

* fix(client): HASHI-96 예약 정보 및 예약 상세 페이지 proressbar 디자인 수정

* Fix(reservation): HASHI-98 예약 플로우 1차 QA 피드백 반영 (#75)

* docs(docs): HASHI-98 캐러셀 인터랙션 설계 추가

* feat(packages/hds-ui): HASHI-98 캐러셀 인터랙션 보강

* fix(packages/hds-ui): HASHI-98 달력 월 이동 제한

예약 달력에서 현재 월 이전으로 이동해 과거 날짜를 노출하지 않도록 하한을 추가한다.

* fix(apps/client): HASHI-98 예약 화면 QA 반영

고정 헤더, 요청 CTA 문구, 날짜 변경 시 시간 초기화를 반영해 예약 초안 상태가 화면과 일치하도록 한다.

* fix(apps/client): HASHI-98 예약 CTA 문구 수정

예약 입력 후 확인 단계로 이어지는 동작을 명확히 전달하기 위해 CTA를 다음으로 통일한다.

* Chore(client): HASHI-93 split vendor chunks (#72)

* fix(client): HASHI-94 1차 자체 QA 반영 (#79)

* Fix(client): HASHI-95 QA 버튼 스타일 및 마이리뷰 화면 보정 (#76)

* style(packages/hds-ui): HASHI-95 Button press 상태 적용

* feat(apps/client): HASHI-95 마이리뷰 QA 반영

* style(apps/client): HASHI-95 버튼 토큰 기준 정리

* style(apps/client): HASHI-95 포맷 정리

* style(packages/hds-ui): HASHI-95 Button active feedback 적용

* fix(apps/client): HASHI-95 카카오 버튼 press 색상 유지

* fix(apps/client): HASHI-95 카카오 버튼 active opacity 조정

* style(apps/client): HASHI-95 리뷰 CTA 색상 조정

* Fix(toast): HASHI-103 Toast 인터랙션 수정 (#81)

* fix(toast): HASHI-103 Toast 인터랙션 수정

* fix(client): HASHI-103 Toast 컴포넌트 애니메이션 적용

---------



* Feat(client): HASHI-100 라우트 로딩 플리커링 개선 (#78)

* feat(apps/client): HASHI-100 라우트 로딩 플리커링 완화

* fix(apps/client): HASHI-100 fallback 표시 시에만 최소 로딩 시간 적용

* Init(client):HASHI-28 swagger-typescript-api 세팅 (#82)

* init(client):HASHI-28 swagger-typescript-api 세팅

* init(root): HASHI-28 OpenAPI 타입 생성 skill 추가

* chore(root): HASHI-28 openapi-typescript peer 범위에 맞춰 TypeScript 버전 조정

---------

Co-authored-by: jyeon03 <[email protected]>
Co-authored-by: 백지연 <[email protected]>
Co-authored-by: 송민서 <[email protected]>
Co-authored-by: yurimidaH <[email protected]>
Co-authored-by: chungyoung kim <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🥸 충영 38기 WEB 김충영 🧹 CHORE 빌드 설정, 패키지 관리, 기타 잡무

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants