feat: refine codex live chat context flows
This commit is contained in:
@@ -1,61 +1,25 @@
|
||||
# Components Package Guide
|
||||
# Components
|
||||
|
||||
`src/components`는 앱 전용 화면이 아니라 여러 화면과 샘플, 문서에서 공통 재사용할 UI 조각을 두는 패키지입니다. 컴포넌트 추가나 수정 시 이 문서를 기본 규약으로 사용합니다.
|
||||
`src/components`는 여러 화면에서 재사용하는 공통 UI 패키지입니다.
|
||||
|
||||
## 목적
|
||||
|
||||
- 화면 조합에 재사용되는 공통 UI를 보관합니다.
|
||||
- 라이브러리 export 대상과 앱 내부 재사용 대상을 같은 폴더 기준으로 관리합니다.
|
||||
- 컴포넌트 문서(`docs/components`)와 샘플(`samples`)의 기준 소스 역할을 합니다.
|
||||
|
||||
## 공통 설계 원칙
|
||||
|
||||
- 샘플(`samples`)을 제외한 컴포넌트에는 API 호출, DB 접근, 라우팅, 화면 전용 상태, 비즈니스 로직을 직접 넣지 않습니다.
|
||||
- 컴포넌트 설계는 최대한 멍청하게 유지합니다. 직관적인 props를 받고, 그 props에 따라 직관적인 UI 동작만 수행합니다.
|
||||
- 기능 처리와 상태 orchestration은 `src/features` 또는 해당 화면 전용 패키지 레벨에서 담당합니다.
|
||||
- 공통 컴포넌트는 어디에서나 재사용될 수 있으므로, 수정 시에는 기존 동작을 바꾸지 않는 범위에서 확장하거나 보완합니다.
|
||||
|
||||
## 현재 하위 구조
|
||||
|
||||
- `common`: 범용 보조 컴포넌트
|
||||
- `dashboard`: 진행률, 다중 progress 등 대시보드 계열 공통 UI
|
||||
- `dataListTable`, `dataStatePanel`, `embeddedMap`, `emptyIllustrationCard`, `evidenceAttachmentStrip`, `formField`, `markdownPreview`, `navigation`, `previewer`, `processFlow`, `queryFilterBuilder`, `search`, `stateKit`, `status-badge`, `stepper`, `timelinePanel`, `window`: 독립 재사용 가능한 컴포넌트 패키지
|
||||
- `inputs`: 입력 계열 공통 UI
|
||||
- `primitives`: 가장 작은 입력 단위
|
||||
- `specialized`: 목적이 뚜렷한 파생 입력
|
||||
- `composite`: 여러 입력을 묶은 조합형 UI
|
||||
- `select`, `checkCombo`, `popup`: plugin 확장과 샘플이 포함된 입력 패키지
|
||||
|
||||
## 폴더 구성 규약
|
||||
|
||||
컴포넌트 패키지는 가능하면 아래 구조를 따릅니다.
|
||||
## 구조
|
||||
|
||||
```text
|
||||
component-name/
|
||||
├─ ComponentName.tsx
|
||||
├─ ComponentName.css
|
||||
├─ index.ts
|
||||
├─ types/ # 외부 노출 타입 또는 내부 분리 타입
|
||||
├─ plugins/ # plugin factory 또는 preset
|
||||
└─ samples/ # Docs/APIs 화면에서 쓰는 예제
|
||||
src/components
|
||||
├─ common
|
||||
├─ inputs
|
||||
├─ markdownPreview
|
||||
├─ navigation
|
||||
├─ previewer
|
||||
└─ ...
|
||||
```
|
||||
|
||||
- 진입점은 항상 해당 폴더의 `index.ts`로 둡니다.
|
||||
- 외부에서 직접 import 해야 하는 타입은 `index.ts` 또는 `types/index.ts`를 통해 다시 export 합니다.
|
||||
- CSS가 필요하면 컴포넌트 폴더 내부에 함께 둡니다.
|
||||
- 복잡한 로직이 생기면 `types`, `plugins`, `samples`처럼 역할별 하위 폴더로 분리합니다.
|
||||
- `common`: 범용 보조 UI
|
||||
- `inputs`: 입력 계열 컴포넌트
|
||||
- 그 외 폴더: 독립 재사용 컴포넌트 패키지
|
||||
|
||||
## 구현 규약
|
||||
## 기준
|
||||
|
||||
- 공통 패키지에는 프로젝트 화면에 종속된 상태나 라우팅 의존을 넣지 않습니다.
|
||||
- 컴포넌트 이름, 파일명, export 이름은 PascalCase를 유지합니다. 폴더명은 기존 저장소 스타일대로 kebab-case 또는 lowerCamelCase를 따릅니다.
|
||||
- 라이브러리로 공개할 컴포넌트는 최종적으로 `src/index.ts`에서 다시 export 되어야 합니다.
|
||||
- 샘플이 필요한 컴포넌트는 `samples/Sample.tsx`를 기본 진입 예제로 두고, 변형 예제는 같은 폴더에 추가합니다.
|
||||
- plugin 확장형 컴포넌트는 `plugins/*.plugin.ts` 또는 `plugins/index.ts`에서 생성 함수를 모읍니다.
|
||||
- 공통 타입은 컴포넌트 폴더 안에서 우선 관리하고, 여러 컴포넌트가 공유할 때만 상위 공통 타입으로 승격합니다.
|
||||
|
||||
## 문서 규약
|
||||
|
||||
- 화면 사용법과 제약은 `docs/components/*.md`에 문서화합니다.
|
||||
- 새 컴포넌트를 추가하면 최소한 목적, 주요 props, 샘플 위치, plugin 여부를 문서에 남깁니다.
|
||||
- 패키지 구조나 규약이 바뀌면 이 문서와 해당 컴포넌트 문서를 함께 갱신합니다.
|
||||
- 화면 전용 상태와 비즈니스 로직은 넣지 않습니다.
|
||||
- 외부 진입점은 각 폴더의 `index.ts`를 사용합니다.
|
||||
- 복잡도가 커지면 `types`, `plugins`, `samples`로 분리합니다.
|
||||
|
||||
Reference in New Issue
Block a user