# HM Custom Implementation Inventory > 조사 기준일: 2026-10-06. 실제 코드(`packages/ui/src`) 기준의 현황 기록이며 확정 규격이 아니다. 구현은 바꾸지 않았다. > 신규 구현은 [AI/Component 구현 원칙](shadcn-기반-구현-원칙.md)과 [Navigation Single Mode Policy](navigation-single-mode.md)의 2026-10-07 확정 정책을 따른다. 아래 조사 이력은 운영 예제나 정책 예외를 허용하는 근거가 아니다. > Select의 `UNDER_REVIEW`는 2026-10-06 조사 당시 설계 평가이며 현재 작업 진행 상태를 뜻하지 않는다. 현재 API·동작은 `docs/components/select.md`와 실제 구현·대표 Story를 따른다. > **현재 탐색 기준 (2026-10-08 개발 저장소)**: UI 구현 TSX 44개, 공개 Component 모듈 44개(222 named export), Component Story 파일/그룹 44개, Component 문서 45개(`field.md`는 독립 구현이 아닌 소비 가이드)다. Pattern은 소스 디렉터리/공개 모듈 8개(62 named export), Story 파일/그룹 6개, Pattern 문서 7개다. 확정 배포 기준 `HMDesignTest.zip`에는 Component 구성은 동일하고 Pattern 모듈 7개(50 named export)가 포함되며 Dashboard Status 모듈은 없다. 파일·심볼·그룹은 서로 다른 집계 단위다. 현재 경로 연결은 [Component / Pattern Reference Index](component-pattern-reference.md)를 따른다. 아래 표와 분석은 2026-10-06 당시의 분류 기록이다. ## 0. 한 줄 요약 shadcn/Radix를 그대로 쓰지 않고 **실제로 API·State·Behavior·Structure가 추가된 Component는 44개 중 15개**다. 나머지 29개는 shadcn 구조를 유지하고 CSS/Token만 얹었다. Pattern 7종은 모두 기존 Component의 조합이다. | 질문 | 답 | |---|---| | 꼭 필요한가? | Component 기준 15개 중 `REQUIRED` 13, `CAN_SIMPLIFY` 1(Textarea), `UNDER_REVIEW` 1(Select). 항목 단위로는 `CAN_SIMPLIFY` 3건, `LEGACY` 1건(Button alias) (§4, §11, §12) | | Public API에 영향을 주는가? | 12건이 consumer에게 노출된다 (§8). 내부 전용은 6건 (§7) | | shadcn 업데이트 시 관리해야 하는가? | **Tabs(HIGH)** 우선, 이어서 Button·Select(MEDIUM). 나머지는 LOW | > 위 숫자는 아래 표의 합이다. 표를 고치면 이 요약도 함께 고친다. ## 1. 목적 - shadcn 업데이트·재생성 시 "무엇을 손으로 지켜야 하는가"를 한 문서에서 확인한다. - HM 스타일이 들어갔다는 이유만으로 Custom으로 부르지 않는다. Behavior / Structure를 유지하고 CSS/Token만 바꾼 것은 `HM_THEME`다. - 이 문서는 가시화·분류·유지보수 기준만 다룬다. 제거·단순화 판단은 별도 작업이다. - Visual 값(height, radius, color 등)은 각 `docs/components/.md`, `docs/patterns/.md`가 담당하므로 여기에 나열하지 않는다. ## 2. 분류 기준 | 분류 | 정의 | |---|---| | `SHADCN_BASE` | shadcn/Radix 구조·API 그대로. `.tsx`에 HM 전용 코드가 없고 Theme CSS도 얇은 Token 매핑 수준 | | `HM_THEME` | Behavior / Structure는 shadcn/Radix 그대로, Visual만 HM CSS / Token. 독립 Custom 아님 | | `HM_CUSTOM` | shadcn에 없는 Public API, 상태/behavior, Radix 동작 확장, 추가 Context/state, helper logic, 구조 확장 중 하나 이상 | | `HM_COMPOSITION` | 기존 HM/shadcn Component를 조합한 Pattern | | `STORY_ONLY` | 검증용 Story, StateBoard 등. Production Custom 아님 | 조사 한계(반드시 읽을 것): - 현재 저장소는 Git으로 관리한다. 2026-10-06 조사는 shadcn 원본 사본과의 Git diff를 수행하지 않았다. 따라서 당시 분류는 "shadcn 원본과의 diff"가 아니라 **현재 코드와 코드 주석을 읽고 shadcn v4(Radix) 구조에 대한 지식과 대조**해 판정했다. 경계 항목은 `shadcn add`로 원본을 받아 diff하면 확정할 수 있다. - `SHADCN_BASE`와 `HM_THEME`의 경계는 휴리스틱이다: `.tsx`가 shadcn 그대로이면서 `packages/ui/src/theme/.css`가 약 70줄 이하이면 `SHADCN_BASE`, 그보다 크면 `HM_THEME`. 둘 다 "Custom 아님"이므로 유지보수 판단에는 영향이 없다. - Story는 전수 검토하지 않고 공용 helper와 파일 구성만 확인했다. ## 3. 전체 요약 | Category | Count | 비고 | |---|---:|---| | Component 총계 | 44 | `packages/ui/src/components/ui/` | | `SHADCN_BASE` | 16 | §5 | | `HM_THEME` | 13 | §5 | | `HM_CUSTOM` | 15 | §4 (Public 12건 + Internal 6건이 이 15개에 걸쳐 있음) | | `HM_COMPOSITION` | 7 | Pattern (§6, Component 44개와 별도) | | `STORY_ONLY` | 4 묶음 | §9 | ## 4. Components — HM_CUSTOM 한 Component 안에 Visual(HM_THEME)과 구조 Custom이 함께 있을 수 있다. 아래는 구조·API·상태 부분만 적었다. 평가: `REQUIRED` 현재 필요 / `CAN_SIMPLIFY` shadcn 방식으로 단순화 가능 / `LEGACY` 필요성 불명확 / `UNDER_REVIEW` 작업 중·미결정. | Component | Base | Custom 종류 | Scope | 평가 | Risk | |---|---|---|---|---|---| | Button | shadcn + Radix Slot + CVA | API, Structure | Public | REQUIRED (+ alias는 LEGACY) | MEDIUM | | Input | shadcn | API | Public | REQUIRED | LOW | | Textarea | shadcn | API | Public | CAN_SIMPLIFY | LOW | | Card | shadcn | API | Public | REQUIRED | LOW | | Select | Radix Select | API, State, Structure | Public + Internal | UNDER_REVIEW | MEDIUM | | Tabs | Radix Tabs | API, State, Behavior, Structure | Public + Internal | REQUIRED | HIGH | | Dialog | Radix Dialog | API(Structure), Behavior | Public + Internal | REQUIRED | LOW | | Sheet | Radix Dialog | API(Structure), Behavior | Public + Internal | REQUIRED | LOW | | Drawer | vaul | API(Structure), Behavior | Public + Internal | REQUIRED | LOW | | Alert Dialog | Radix Alert Dialog | API | Public | REQUIRED | LOW | | Combobox | Popover + Command (cmdk) | API, State, Composition | Public | REQUIRED | LOW | | Date Picker | Popover + Calendar (react-day-picker) | API, State, Behavior | Public + Internal | REQUIRED | LOW | | Popover | Radix Popover | Behavior | Internal | REQUIRED | LOW | | Collapsible | Radix Collapsible | Behavior | Internal | REQUIRED | LOW | | Slider | Radix Slider | Behavior | Internal | REQUIRED | LOW | ### 4.1 항목별 기록 **Button** — `button.tsx`, `theme/button.css` - 추가: `variant`를 역할(`primary|secondary|modify|destructive|cancel`)로 교체, `appearance`(`brand|solid|outline`) 추가, `data-variant/data-appearance/data-size`. `default`·`outline`은 shadcn 호환 alias로 `primary`/`primary+outline`에 매핑, `ghost`·`link`는 shadcn 기본 유지. - 이유: ui_viz 역할/처리(treatment) 2축 규격. `