bo-ui-kit 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +54 -95
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -1,32 +1,17 @@
1
1
  # bo-ui-kit
2
2
 
3
- Figma **"BO UI Kit"** 디자인 시스템을 React 컴포넌트로 만들고, **디자인 변경을 자동으로 코드에 동기화**하는 프로젝트.
4
-
5
- `React 18 · TypeScript · Tailwind v3 · cva` · 컴포넌트 10종 · npm 라이브러리(ESM+CJS) · 5종 CI 게이트
6
-
7
- ---
8
-
9
- ## 이 저장소가 하는 일 (3가지)
10
-
11
- | | 무엇 | 핵심 |
12
- |---|---|---|
13
- | 1. **컴포넌트 라이브러리** | `bo-ui-kit` — 설치해서 쓰는 React UI | ESM+CJS, Tailwind 없이도 동작(프리빌드 CSS), 타입 포함 |
14
- | 2. **자동 동기화 파이프라인** | Figma 변경 → 감지 → 추출 → PR | 헤드리스 Claude가 변경분만 추출, 사람은 머지만 |
15
- | 3. **품질 게이트(CI)** | 시각 회귀 + 소비자 스모크 | 컴포넌트/배포물이 깨지면 PR에서 빨강 |
16
-
17
- > 한 줄 요약: **디자이너가 Figma를 바꾸면 → 코드 PR이 알아서 생기고(증거 스크린샷 첨부) → 라이브러리로 배포 가능**.
18
-
19
- ---
20
-
21
- ## 빠른 시작 — 라이브러리로 쓰기
3
+ Figma **"BO UI Kit"** 디자인 시스템에서 추출한 **React UI 컴포넌트 라이브러리**.
4
+ Tailwind 설정 없이 바로 쓰는 프리빌드 CSS · ESM·CJS 듀얼 번들 · 타입 포함.
22
5
 
23
6
  ```bash
24
- npm i bo-ui-kit # peer: react, react-dom >=18
7
+ npm i bo-ui-kit # peer: react, react-dom >= 18
25
8
  ```
26
9
 
10
+ ## 사용법
11
+
27
12
  ```tsx
28
- import { Button, Meter, Field, Input } from "bo-ui-kit";
29
- import "bo-ui-kit/styles.css"; // 토큰+유틸 (앱 진입점에서 1회)
13
+ import { Button, Field, Input } from "bo-ui-kit";
14
+ import "bo-ui-kit/styles.css"; // 디자인 토큰 + 컴포넌트 스타일 (앱 진입점에서 1회)
30
15
 
31
16
  export default function App() {
32
17
  return (
@@ -37,88 +22,62 @@ export default function App() {
37
22
  }
38
23
  ```
39
24
 
40
- - **ESM·CommonJS 모두 지원** (`import` / `require` 다)
41
- - **Tailwind 불필요** — `styles.css` 한 줄이면 토큰·유틸 전부 포함
42
- - **다크 모드** — 상위 요소에 `class="dark"`
43
- - **테마 변경** — `styles.css`의 CSS 변수(`--primary` 등)를 덮어쓰기
44
- - **폰트** — Pretendard 우선, 없으면 시스템 산세리프 폴백
25
+ > `styles.css`는 앱에서 **한 번만** import 하면 됩니다. **Tailwind를 설치하거나 설정할 필요가 없습니다.**
45
26
 
46
- ---
27
+ ## 특징
47
28
 
48
- ## 컴포넌트 (10종)
29
+ - **Tailwind 불필요** — `bo-ui-kit/styles.css` 한 줄에 디자인 토큰 + 컴포넌트 스타일이 모두 들어 있습니다. 전역 리셋(preflight)이 없어 기존 앱 스타일을 건드리지 않습니다.
30
+ - **ESM · CommonJS** — `import` / `require` 모두 지원.
31
+ - **TypeScript** — 타입 선언(`.d.ts`) 포함.
32
+ - **다크 모드** — 상위 요소에 `class="dark"`.
33
+ - **테마 변경** — `styles.css`의 CSS 변수(`--primary`, `--radius` 등)를 앱에서 덮어쓰면 색·반경 등이 바뀝니다.
34
+ - **폰트** — Pretendard 우선, 없으면 시스템 산세리프로 폴백.
49
35
 
50
- | 컴포넌트 | export | Figma node |
51
- |---|---|---|
52
- | Button | `Button` | 1692:74 |
53
- | Checkbox | `Checkbox` | 5667:129 |
54
- | Input | `Input` | 7745:699 |
55
- | Label | `Label` | 7658:2157 |
56
- | Field | `Field` | 7745:713 |
57
- | Input OTP | `InputOTP` `InputOTPSlot` `InputOTPSeparator` | 8060:1580 |
58
- | Meter | `Meter` | 7664:31 |
59
- | Toggle | `Toggle` | 5685:204 |
60
- | Toggle Group | `ToggleGroup` `ToggleGroupItem` | 5686:270 |
61
- | Select | `Select` | 7751:1561 |
36
+ ## 컴포넌트
62
37
 
63
- 미리보기(자체 플레이그라운드): `npm run dev` → 좌측 컴포넌트 목록.
64
- 추출 대상 단일 소스: `figma.manifest.json`.
38
+ | 컴포넌트 | export |
39
+ |---|---|
40
+ | Button | `Button` |
41
+ | Checkbox | `Checkbox` |
42
+ | Input | `Input` |
43
+ | Label | `Label` |
44
+ | Field | `Field` |
45
+ | Input OTP | `InputOTP`, `InputOTPSlot`, `InputOTPSeparator` |
46
+ | Meter | `Meter` |
47
+ | Toggle | `Toggle` |
48
+ | Toggle Group | `ToggleGroup`, `ToggleGroupItem` |
49
+ | Select | `Select` |
65
50
 
66
- ---
51
+ 모든 컴포넌트는 `className`으로 스타일 합성이 가능하고 `forwardRef`로 ref를 전달받습니다.
67
52
 
68
- ## 자동 동기화 파이프라인
53
+ ### 예시
69
54
 
55
+ ```tsx
56
+ import { Toggle, ToggleGroup, ToggleGroupItem, Select } from "bo-ui-kit";
57
+
58
+ // 제어형 Toggle (2-state 버튼)
59
+ <Toggle pressed={on} onPressedChange={setOn}>굵게</Toggle>
60
+
61
+ // Select (드롭다운)
62
+ <Select
63
+ options={[{ value: "apple", label: "Apple" }, { value: "banana", label: "Banana" }]}
64
+ value={fruit}
65
+ onValueChange={setFruit}
66
+ placeholder="과일 선택…"
67
+ />
68
+
69
+ // Toggle Group (세그먼티드, 단일 선택)
70
+ <ToggleGroup type="single" value={align} onValueChange={setAlign}>
71
+ <ToggleGroupItem value="left">왼쪽</ToggleGroupItem>
72
+ <ToggleGroupItem value="center">가운데</ToggleGroupItem>
73
+ <ToggleGroupItem value="right">오른쪽</ToggleGroupItem>
74
+ </ToggleGroup>
70
75
  ```
71
- Figma (BO UI Kit)
72
- │ 디자인 변경
73
-
74
- ① 감지 figma-poll.yml (cron) — 파일 버전 + 추적 노드 지문 비교
75
- │ 실제 컴포넌트가 바뀐 경우에만
76
-
77
- ② 추출 figma-sync.yml — 헤드리스 Claude가 변경분만 추출 → 검증(tsc+build) → PR
78
- │ (PR에 "Closes #이슈" 연결)
79
-
80
- ③ 검증 visual.yml — 시각 회귀 + Figma/Before/After/Diff 증거 코멘트
81
- │ smoke.yml — 소비자 설치·렌더 + tarball 검증
82
-
83
- ④ 사람 PR 증거 보고 머지 → 이슈 자동 종료 → baseline 자동 갱신
84
- ```
85
-
86
- - **autosave는 무시**: 버전만 올라가고 추적 노드(컴포넌트)가 안 바뀌면 헤드리스를 돌리지 않음(`figma.fingerprints.json` 지문 비교).
87
- - **PR 시각 증거**: 변경된 컴포넌트의 Figma 원본 + 렌더 Before/After/Diff를 PR 코멘트로 자동 첨부.
88
- - **토큰 점검**: `token-health.yml`이 `FIGMA_TOKEN` 만료를 매일 점검(만료 시 Issue).
89
-
90
- > 파이프라인 구성·운영·시크릿·함정 상세는 **[docs/CONFLUENCE.md](docs/CONFLUENCE.md)**.
91
76
 
92
- ---
77
+ ## 요구사항
93
78
 
94
- ## 개발
95
-
96
- | 명령 | 설명 |
97
- |---|---|
98
- | `npm run dev` | 플레이그라운드(컴포넌트 카탈로그) |
99
- | `npm run verify` | 타입체크 + 빌드 |
100
- | `npm run build:lib` | 라이브러리 빌드 → `dist/`(ESM+CJS+타입+styles.css) |
101
- | `npm run test:visual` | 시각 회귀(로컬은 비교 생략, CI=Linux 기준) |
102
- | `npm run check:figma` | Figma 변경 감지(exit 10=변경) |
103
- | `npm run pack:test` | tarball 만들어 `examples/pack-consumer`에 설치(배포물 검증) |
79
+ - **React 18+** — `react`, `react-dom`은 peer dependency.
104
80
 
105
- 소비자 검증 예시: `examples/consumer`(워크스페이스 링크) · `examples/pack-consumer`(tarball 전용).
81
+ ## 라이선스
106
82
 
107
- ---
108
-
109
- ## 프로젝트 구조
110
-
111
- ```
112
- src/
113
- components/ui/ 컴포넌트 (배럴: index.ts)
114
- stories/ 플레이그라운드 스토리
115
- tokens.css 디자인 토큰(단일 소스 — 앱·라이브러리 공유)
116
- index.css 앱 진입 CSS (tokens 임포트)
117
- lib/styles.css 라이브러리 CSS 입력(프리빌드용)
118
- scripts/ 감지/빌드/검증 스크립트
119
- .github/workflows/ figma-poll · figma-sync · visual · smoke · token-health
120
- examples/ consumer(링크) · pack-consumer(tarball)
121
- figma.manifest.json / figma.fingerprints.json 추출 대상 + 노드 지문
122
- CLAUDE.md 컴포넌트 작성 규칙(★ Variant 매핑)
123
- docs/CONFLUENCE.md 파이프라인/운영 레퍼런스
124
- ```
83
+ MIT © eromnet
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bo-ui-kit",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "BO UI Kit — Figma 디자인 시스템에서 추출한 React 컴포넌트 라이브러리 (Tailwind 토큰 기반).",
5
5
  "license": "MIT",
6
6
  "type": "module",