@t3q-ui/design-system 0.0.0-stage → 1.56.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.
package/LICENSE.md ADDED
@@ -0,0 +1,88 @@
1
+ T3Q 디자인 시스템 라이선스 (@t3q-ui/design-system)
2
+
3
+ Copyright (c) 2025-present 티쓰리큐 주식회사 (T3Q Inc.)
4
+
5
+ 1. 사용 허락
6
+ 티쓰리큐 주식회사(이하 "T3Q")는 이 패키지에 포함된 코드, 스타일, 문서와 스킬 파일(이하 "본 소프트웨어")을
7
+ 2조의 범위 안에서 사용·복제·수정·병합·배포할 수 있도록 무상으로 허락합니다.
8
+
9
+ 2. 허락 범위
10
+ 본 소프트웨어는 다음 목적으로만 사용할 수 있습니다.
11
+ 가. T3Q와 맺은 계약(그 하위 계약을 포함합니다)에 따라 수행하는 프로젝트의 산출물을 개발·운영·유지보수하는 일
12
+ 나. 가.의 산출물을 발주하거나 소유한 기관·기업(이하 "발주자")과 발주자가 지정한 후속 유지보수 수행자가
13
+ 그 산출물을 운영·기능개선·재개발·유지보수하는 일
14
+ 다. 가.·나.의 산출물에 포함된 형태로 본 소프트웨어를 납품·배포하는 일, 그리고 법령이나 계약에 따라
15
+ 소스코드를 제3의 기관에 임치하는 일
16
+ 라. 가.~다.를 위해 도입 전에 검토·평가하는 일
17
+ 위 범위를 벗어난 사용, 그리고 본 소프트웨어나 그 일부를 별도의 디자인 시스템·UI 라이브러리로 재배포하거나
18
+ 판매하는 일에는 T3Q의 서면 동의가 필요합니다.
19
+
20
+ 3. 이름과 상표
21
+ 이 라이선스는 T3Q의 이름, 로고, 상표를 사용할 권리를 주지 않습니다. 본 소프트웨어의 출처를 밝히는 데 필요한
22
+ 범위는 예외로 합니다.
23
+
24
+ 4. 고지 유지
25
+ 본 소프트웨어를 복제하거나 배포할 때는 위 저작권 표시와 이 라이선스 전문을 함께 포함해야 합니다.
26
+
27
+ 5. 제3자 구성요소
28
+ 본 소프트웨어가 의존하는 제3자 구성요소는 각자의 라이선스를 따릅니다. Pretendard 글꼴은 SIL Open Font
29
+ License 1.1, lucide 아이콘은 ISC 라이선스입니다. 이 라이선스는 그 조건을 바꾸지 않습니다.
30
+
31
+ 6. 보증의 부인과 책임의 제한
32
+ 본 소프트웨어는 "있는 그대로" 제공되며, 상품성, 특정 목적 적합성, 권리 비침해를 포함한 어떠한 명시적·묵시적
33
+ 보증도 하지 않습니다. 법이 허용하는 최대 범위에서 T3Q는 본 소프트웨어의 사용 또는 사용 불능으로 생긴 손해에
34
+ 책임지지 않습니다. 기술 지원·유지보수·하자보수는 별도 계약에서 정한 경우에만 제공합니다.
35
+
36
+ 7. 종료
37
+ 2조의 범위를 벗어나 사용한 자의 권리는 자동으로 종료됩니다. 이 종료는 위반한 자에게만 적용되며, 이미 적법하게
38
+ 납품된 산출물에 대한 발주자의 권리에는 영향을 주지 않습니다.
39
+
40
+ 8. 해석
41
+ 한국어본과 영어본의 내용이 다르면 한국어본을 따릅니다.
42
+
43
+ ---
44
+
45
+ T3Q Design System License (@t3q-ui/design-system)
46
+
47
+ Copyright (c) 2025-present T3Q Inc.
48
+
49
+ 1. Grant
50
+ T3Q Inc. ("T3Q") grants you, free of charge, the right to use, copy, modify, merge and distribute the code,
51
+ styles, documentation and skill files included in this package (the "Software"), within the scope of Section 2.
52
+
53
+ 2. Scope
54
+ The Software may be used only for the following purposes:
55
+ (a) development, operation and maintenance of deliverables of a project performed under a contract with
56
+ T3Q (including any subcontract thereof);
57
+ (b) operation, improvement, redevelopment and maintenance of a deliverable under (a) by the organization
58
+ that ordered or owns it (the "Client") and by any subsequent maintainer designated by the Client;
59
+ (c) delivery and distribution of the Software as part of the deliverables under (a) and (b), and deposit
60
+ of source code with a third-party escrow agent as required by law or contract; and
61
+ (d) review and evaluation of the Software before adopting it for the purposes above.
62
+ Any other use, including redistributing or selling the Software or any part of it as a separate design system
63
+ or UI library, requires T3Q's prior written consent.
64
+
65
+ 3. Name and Trademarks
66
+ This license does not grant any right to use T3Q's name, logos or trademarks, except as needed to identify
67
+ the origin of the Software.
68
+
69
+ 4. Notice
70
+ You must include the above copyright notice and this license in all copies or distributions of the Software.
71
+
72
+ 5. Third-Party Components
73
+ Third-party components the Software depends on remain under their own licenses, including the Pretendard font
74
+ (SIL Open Font License 1.1) and lucide icons (ISC License). This license does not change those terms.
75
+
76
+ 6. Disclaimer and Limitation of Liability
77
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING MERCHANTABILITY,
78
+ FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. TO THE MAXIMUM EXTENT PERMITTED BY LAW, T3Q SHALL NOT BE
79
+ LIABLE FOR ANY DAMAGES ARISING FROM THE USE OF OR INABILITY TO USE THE SOFTWARE. Technical support, maintenance
80
+ and warranty service are provided only as agreed in a separate contract.
81
+
82
+ 7. Termination
83
+ Your rights under this license terminate automatically if you use the Software outside the scope of Section 2.
84
+ Termination applies only to the party in breach and does not affect the Client's rights in deliverables that
85
+ were lawfully delivered.
86
+
87
+ 8. Interpretation
88
+ If the Korean and English versions differ, the Korean version prevails.
package/README.md CHANGED
@@ -1,3 +1,465 @@
1
- # Temporary Holding Version
1
+ # T3Q-UI (Design System)
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ T3Q 프로젝트를 위한 React 컴포넌트 라이브러리입니다.
4
+
5
+ ---
6
+
7
+ ## 빠른 시작
8
+
9
+ 공개 npm(npmjs.com)에서 받습니다. 별도 레지스트리·토큰 설정이 필요 없습니다.
10
+
11
+ **사용 범위**: T3Q와 계약한 프로젝트와 그 유지보수에 한해 쓸 수 있습니다. 전문은 패키지의 [`LICENSE.md`](./LICENSE.md)를 보세요.
12
+
13
+ **버전은 정확히 고정하세요.** 자동으로 게시되므로 `^` 범위로 두면 호환되지 않는 변경이 들어올 수 있습니다. 올릴 때는 변경 기록을 먼저 확인합니다.
14
+
15
+ ### Step 1. 설치하고 setup 실행
16
+
17
+ ```bash
18
+ pnpm add --save-exact @t3q-ui/design-system
19
+ pnpm exec t3q-design setup
20
+ ```
21
+
22
+ npm 이면 `npm install --save-exact @t3q-ui/design-system` 뒤 `npx t3q-design setup`.
23
+
24
+ `setup` 이 만들거나 갱신하는 것입니다. 이미 맞으면 건너뛰고, 패키지를 올린 뒤 다시 돌리면 최신으로 갱신됩니다.
25
+
26
+ | 파일 | 내용 |
27
+ |---|---|
28
+ | 진입 CSS (`@import 'tailwindcss'` 가 있는 파일) | TDS `styles.css` import(새로 넣을 때는 `fonts.css` 도 함께). 이미 `styles.css` 를 쓰는 레포엔 `fonts.css` 를 넣지 않습니다. 후보가 둘 이상이면 손대지 않고 붙여넣을 줄을 알려 줍니다 |
29
+ | `AGENTS.md` | TDS UI 규칙 블록(`<!-- tds:start -->` … `<!-- tds:end -->`). 블록 밖은 건드리지 않습니다 |
30
+ | `CLAUDE.md` | `@AGENTS.md` 한 줄 (없을 때만 추가) |
31
+ | `.claude/skills/tds/` | `/tds` Skill — 새 화면을 만드는 절차 |
32
+ | `.agents/skills/tds/` | 같은 Skill 의 Codex 사본 (Codex 는 `.agents/skills/` 에서 Skill 을 찾습니다) |
33
+
34
+ `.npmrc`·`.mcp.json`·`.codex/config.toml` 은 `--registry`·`--mcp-url` 을 줄 때만 씁니다. 공개 패키지에는 접속할 MCP 서버가 없으므로 AI 도구는 Skill 의 `reference/components.md` 로 컴포넌트와 props 를 읽습니다(아래 "참조 문서"). 사내 설치는 [docs/INTERNAL_SETUP.md](./docs/INTERNAL_SETUP.md) 를 보세요.
35
+
36
+ > Tailwind v4 가 아직 없는 프로젝트는 setup 전에 아래 "Tailwind 설정" 을 먼저 합니다.
37
+
38
+ 막히면 점검합니다:
39
+
40
+ ```bash
41
+ pnpm exec t3q-design doctor
42
+ ```
43
+
44
+ Node·패키지와 peer·CSS·Skill·규칙을 검사하고, 실패 항목마다 할 일을 알려 줍니다. `.npmrc` 에 `@t3q-ui:registry` 줄이 있으면 토큰·레지스트리를, `.mcp.json` 에 항목이 있으면 MCP 도 점검합니다.
45
+
46
+ **AI 도구별**: Claude Code 는 첫 실행 때 `.mcp.json` 의 서버 승인을 묻습니다(승인하면 됩니다). Cursor·Copilot 은 `AGENTS.md` 와 `.claude/skills/` 를 그대로 읽고, MCP 는 각 도구의 설정(`.cursor/mcp.json`, `.vscode/mcp.json`)에 같은 URL 을 등록합니다. Codex 는 `AGENTS.md`·`.agents/skills/tds/`·`.codex/config.toml` 을 읽습니다 — setup 이 셋 다 쓰며, Codex 에서 이 프로젝트를 trust 해야 `.codex/config.toml` 이 적용됩니다. 공개 설치에는 MCP 가 없어 모든 도구가 Skill 안의 `reference/components.md`(컴포넌트·패턴 참조, 생성물)로 컴포넌트를 읽습니다.
47
+
48
+ ### Tailwind 설정 (v4)
49
+
50
+ T3Q-UI는 **Tailwind CSS v4**를 사용합니다.
51
+
52
+ ```bash
53
+ pnpm add -D tailwindcss @tailwindcss/postcss postcss
54
+ ```
55
+
56
+ 프로젝트 루트에 `postcss.config.cjs` 파일을 생성합니다:
57
+
58
+ ```javascript
59
+ module.exports = {
60
+ plugins: {
61
+ '@tailwindcss/postcss': {},
62
+ },
63
+ }
64
+ ```
65
+
66
+ > **Note:** Tailwind v4는 `tailwind.config.js` 파일이 필요 없습니다. CSS에서 직접 설정합니다.
67
+
68
+ ### CSS 설정 — setup 이 넣는 줄
69
+
70
+ `setup` 이 진입 CSS(예: **src/index.css**)를 아래처럼 만듭니다. 손으로 할 때도 같습니다 (Tailwind v4 문법):
71
+
72
+ ```css
73
+ @import 'tailwindcss';
74
+ @import '@t3q-ui/design-system/styles.css'; /* T3Q-UI 테마 (@theme 블록) */
75
+ @import '@t3q-ui/design-system/fonts.css'; /* Pretendard 로드 */
76
+
77
+ @source "../index.html";
78
+ @source "./**/*.{js,jsx,ts,tsx}";
79
+ ```
80
+
81
+ TDS 컴포넌트의 클래스는 패키지의 `styles.css` 가 스스로 `@source` 로 등록하므로, `node_modules` 를 가리키는 `@source` 줄은 필요 없습니다.
82
+
83
+ `fonts.css` 는 TDS 가 Pretendard 를 로드하는 선택지입니다. `next/font` 등으로 직접 로드하는 앱은 생략해도 됩니다(`doctor` 는 경고만 냅니다).
84
+
85
+ **src/main.jsx**에서는 index.css만 import:
86
+
87
+ ```jsx
88
+ import './index.css'
89
+
90
+ import React from 'react'
91
+ import ReactDOM from 'react-dom/client'
92
+ // ... 나머지 코드
93
+ ```
94
+
95
+ > **왜 index.css에서 T3Q-UI를 import 하나요?** T3Q-UI의 `@theme` 블록이 Tailwind 테마를 확장하려면 Tailwind 처리 파이프라인 내에서 import되어야 합니다.
96
+
97
+ ### 사용하기
98
+
99
+ 이제 T3Q-UI 컴포넌트를 import해서 사용할 수 있습니다!
100
+
101
+ ```jsx
102
+ import { Button, Badge, Dialog } from '@t3q-ui/design-system'
103
+
104
+ function MyPage() {
105
+ return (
106
+ <div>
107
+ <Button variant='primaryBold'>저장</Button>
108
+ <Button variant='secondary'>취소</Button>
109
+ <Badge variant='success'>완료</Badge>
110
+ </div>
111
+ )
112
+ }
113
+ ```
114
+
115
+ ### 참조 문서와 변경 기록
116
+
117
+ 공개 문서 사이트는 없습니다. 패키지에 들어 있는 파일을 jsDelivr 로 바로 열 수 있습니다(`<버전>` 은 설치한 버전).
118
+
119
+ - 컴포넌트·패턴 참조(언제 쓰나·props·예시): https://cdn.jsdelivr.net/npm/@t3q-ui/design-system@<버전>/skills/tds/reference/components.md
120
+ - 변경 기록: https://cdn.jsdelivr.net/npm/@t3q-ui/design-system@<버전>/CHANGELOG.md
121
+
122
+ 설치한 뒤에는 `node_modules/@t3q-ui/design-system/` 아래 같은 경로에서도 읽을 수 있습니다. 타입은 패키지의 `.d.ts` 가 맡습니다.
123
+
124
+ ---
125
+
126
+ ## 컴포넌트 목록
127
+
128
+ ### 버튼/뱃지
129
+
130
+ | 컴포넌트 | 설명 | 예시 |
131
+ | ------------ | ----------- | --------------------------------------------- |
132
+ | `Button` | 버튼 | `<Button variant="primaryBold">저장</Button>` |
133
+ | `IconButton` | 아이콘 버튼 | `<IconButton icon={Plus} />` |
134
+ | `Badge` | 상태 뱃지 | `<Badge variant="success">완료</Badge>` |
135
+ | `Tag` | 태그 | `<Tag>React</Tag>` |
136
+
137
+ ### 폼
138
+
139
+ | 컴포넌트 | 설명 | 예시 |
140
+ | ---------- | ------------ | ------------------------------ |
141
+ | `TextField` | 텍스트 입력 (floating label — 컨테이너 div 구조라 `<input>` drop-in 아님) | `<TextField placeholder="이름" />` |
142
+ | `Textarea` | 여러 줄 입력 | `<Textarea rows={4} />` |
143
+ | `Select` | 드롭다운 | `<Select options={[...]} />` |
144
+ | `Checkbox` | 체크박스 | `<Checkbox label="동의" />` |
145
+ | `Switch` | 토글 | `<Switch />` |
146
+ | `Range` | 슬라이더 (± 스테퍼·숫자 입력 포함 — 순수 슬라이더는 `RangeSlider`) | `<Range min={0} max={100} />` |
147
+
148
+ > 레거시 로컬 DS에서 옮겨올 때 **이름이 바뀐 것은 `Input` → `TextField` 하나**입니다. 이름이 같은 나머지는 import 경로만 바꾸면 됩니다.
149
+
150
+ ### 팝업/오버레이
151
+
152
+ | 컴포넌트 | 설명 |
153
+ | -------------- | ------------- |
154
+ | `Dialog` | 모달 창 |
155
+ | `Drawer` | 사이드 패널 |
156
+ | `Popover` | 말풍선 팝업 |
157
+ | `Tooltip` | 툴팁 |
158
+ | `DropdownMenu` | 드롭다운 메뉴 |
159
+ | `toast` / `Toaster` | 토스트 알림 (`Toaster`를 앱 루트에 두고 `toast()` 호출) |
160
+
161
+ ### 테이블
162
+
163
+ | 컴포넌트 | 설명 |
164
+ | ------------- | ------------------------------------- |
165
+ | `AgGridTable` | AG Grid 테이블 (T3Q-UI 스타일 적용됨) |
166
+ | `Table` | 기본 HTML 테이블 래퍼 |
167
+
168
+ ### 기타
169
+
170
+ | 컴포넌트 | 설명 |
171
+ | ------------ | ------------- |
172
+ | `Card` | 카드 컨테이너 |
173
+ | `Tabs` | 탭 |
174
+ | `Skeleton` | 로딩 스켈레톤 |
175
+ | `Spinner` | 로딩 스피너 |
176
+ | `Progress` | 진행 바 |
177
+ | `Calendar` | 캘린더 |
178
+ | `DatePicker` | 날짜 선택 |
179
+
180
+ ---
181
+
182
+ ## 자주 쓰는 예시
183
+
184
+ ### Button
185
+
186
+ ```jsx
187
+ import { Button } from '@t3q-ui/design-system'
188
+
189
+ // 기본 버튼들
190
+ <Button variant="primaryBold">주요 액션</Button>
191
+ <Button variant="primary">일반 액션</Button>
192
+ <Button variant="secondary">보조 액션</Button>
193
+ <Button variant="danger">삭제</Button>
194
+
195
+ // 로딩 상태
196
+ <Button variant="primaryBold" loading>저장 중...</Button>
197
+
198
+ // 비활성화
199
+ <Button disabled>비활성화</Button>
200
+ ```
201
+
202
+ ### Badge
203
+
204
+ ```jsx
205
+ import { Badge } from '@t3q-ui/design-system'
206
+
207
+ <Badge variant="success">성공</Badge>
208
+ <Badge variant="danger">실패</Badge>
209
+ <Badge variant="warning">주의</Badge>
210
+ <Badge variant="info">정보</Badge>
211
+ <Badge variant="primary">기본</Badge>
212
+ ```
213
+
214
+ ### Dialog (모달)
215
+
216
+ ```jsx
217
+ import {
218
+ Dialog,
219
+ DialogTrigger,
220
+ DialogContent,
221
+ DialogHeader,
222
+ DialogTitle,
223
+ } from '@t3q-ui/design-system'
224
+
225
+ ;<Dialog>
226
+ <DialogTrigger asChild>
227
+ <Button>열기</Button>
228
+ </DialogTrigger>
229
+ <DialogContent>
230
+ <DialogHeader>
231
+ <DialogTitle>제목</DialogTitle>
232
+ </DialogHeader>
233
+ <p>내용</p>
234
+ </DialogContent>
235
+ </Dialog>
236
+ ```
237
+
238
+ ### AlertDialog
239
+
240
+ `AlertDialogAction`의 `variant`를 생략하면 `AlertDialog`의 `variant`에 따라 아래 버튼 variant로 폴백됩니다.
241
+
242
+ | `AlertDialog`의 variant | `AlertDialogAction` 폴백 |
243
+ | ------------------------ | ------------------------ |
244
+ | `variant="success"` | `primaryBold` |
245
+ | `variant="info"` (기본값) | `primaryBold` |
246
+ | `variant="warning"` | `warningBold` |
247
+ | `variant="danger"` | `dangerBold` |
248
+
249
+ 폴백은 전부 Bold 계열이므로, `variant`를 직접 명시하면 폴백보다 한 톤 낮은 버튼이 됩니다(예: `variant="primary"`).
250
+
251
+ ### AgGridTable
252
+
253
+ ```jsx
254
+ import { AgGridTable } from '@t3q-ui/design-system'
255
+
256
+ const columns = [
257
+ { field: 'name', headerName: '이름' },
258
+ { field: 'status', headerName: '상태' },
259
+ ]
260
+
261
+ const data = [
262
+ { name: 'Kafka', status: 'Running' },
263
+ { name: 'Spark', status: 'Stopped' },
264
+ ]
265
+
266
+ <AgGridTable
267
+ columnDefs={columns}
268
+ rowData={data}
269
+ domLayout="autoHeight"
270
+ />
271
+
272
+ // 주의: ag-theme-alpine 같은 legacy 테마 className을 직접 붙이지 마세요.
273
+ // v33 Theming API를 내부 기본값으로 사용합니다.
274
+ ```
275
+
276
+ ---
277
+
278
+ ## 문제 해결
279
+
280
+ 먼저 `pnpm exec t3q-design doctor` 를 돌립니다. 실패 항목마다 조치가 같이 나옵니다.
281
+
282
+ ### "Cannot find module '@t3q-ui/design-system/styles.css'"
283
+
284
+ T3Q-UI 버전이 오래됐을 수 있습니다.
285
+
286
+ ```bash
287
+ npm update @t3q-ui/design-system
288
+ ```
289
+
290
+ ### AG Grid 스타일이 안 먹어요
291
+
292
+ 1. `@t3q-ui/design-system/styles.css`가 `index.css` **이후에** import 되는지 확인
293
+ 2. `@t3q-ui/design-system/fonts.css` import 여부 확인
294
+ 3. `AgGridReact` 대신 `AgGridTable` 사용
295
+ 4. `AgGridTable`에 `ag-theme-*` className을 직접 전달하지 않기
296
+
297
+ ```jsx
298
+ // ❌
299
+ import { AgGridReact } from 'ag-grid-react'
300
+
301
+ // ✅
302
+ import { AgGridTable } from '@t3q-ui/design-system'
303
+ ```
304
+
305
+ ---
306
+
307
+ ## 유틸리티 함수
308
+
309
+ ### cn()
310
+
311
+ Tailwind 클래스를 조건부로 합치는 함수:
312
+
313
+ ```jsx
314
+ import { cn } from '@t3q-ui/design-system'
315
+
316
+ ;<div className={cn('p-4 rounded', isActive && 'bg-blue-500', isDisabled && 'opacity-50')} />
317
+ ```
318
+
319
+ ---
320
+
321
+ # 개발자 가이드
322
+
323
+ > 아래 내용은 T3Q-UI를 **유지보수하거나 수정**하는 개발자를 위한 내용입니다.
324
+
325
+ ## 로컬 개발 (npm link)
326
+
327
+ T3Q-UI 코드를 수정하면서 다른 프로젝트에서 바로 테스트하고 싶을 때:
328
+
329
+ ```bash
330
+ # 1. T3Q-UI 폴더에서 link 생성
331
+ cd /path/to/t3q-ui
332
+ npm link
333
+
334
+ # 2. 테스트할 프로젝트에서 link 연결
335
+ cd /path/to/my-project
336
+ npm link @t3q-ui/design-system
337
+
338
+ # 3. T3Q-UI 폴더에서 watch 모드 실행
339
+ cd /path/to/t3q-ui
340
+ npm run dev
341
+ ```
342
+
343
+ 이제 T3Q-UI 코드 수정하면 프로젝트에 바로 반영됩니다.
344
+
345
+ ### link 해제
346
+
347
+ ```bash
348
+ cd /path/to/my-project
349
+ npm unlink @t3q-ui/design-system
350
+ npm install @t3q-ui/design-system # registry 버전으로 재설치
351
+ ```
352
+
353
+ ### link 상태 확인
354
+
355
+ ```bash
356
+ ls -la node_modules/@t3q-ui/design-system
357
+ # lrwxr-xr-x ... -> /path/to/t3q-ui ← link 상태
358
+ # drwxr-xr-x ... ← 일반 설치
359
+ ```
360
+
361
+ ---
362
+
363
+ ## 배포
364
+
365
+ ### 배포용 토큰 발급
366
+
367
+ 배포하려면 `write_registry` 권한이 필요합니다.
368
+
369
+ GitLab → Preferences → Access Tokens에서:
370
+
371
+ - Scopes: `api`, `write_registry` 체크
372
+
373
+ ### 스크립트로 배포 (권장)
374
+
375
+ 배포 스크립트를 사용하면 빌드, 버전 업데이트, 배포, Git push가 자동으로 처리됩니다.
376
+
377
+ **macOS / Linux:**
378
+
379
+ ```bash
380
+ # patch 버전 배포 (0.1.6 → 0.1.7)
381
+ ./publish.sh
382
+
383
+ # minor 버전 배포 (0.1.6 → 0.2.0)
384
+ ./publish.sh minor
385
+
386
+ # major 버전 배포 (0.1.6 → 1.0.0)
387
+ ./publish.sh major
388
+ ```
389
+
390
+ **Windows:**
391
+
392
+ ```cmd
393
+ # patch 버전 배포
394
+ publish.bat
395
+
396
+ # minor 버전 배포
397
+ publish.bat minor
398
+
399
+ # major 버전 배포
400
+ publish.bat major
401
+ ```
402
+
403
+ > **스크립트 동작 순서:**
404
+ >
405
+ > 1. 커밋되지 않은 변경사항 확인 → 커밋 유도
406
+ > 2. 빌드 (`npm run build` + `npm run build:css`)
407
+ > 3. 버전 업데이트 + 태그 생성
408
+ > 4. GitLab npm 레지스트리에 배포
409
+ > 5. Git push + 태그 push
410
+
411
+ ### 수동 배포
412
+
413
+ 스크립트 없이 수동으로 배포하려면:
414
+
415
+ ```bash
416
+ # 버전 올리기
417
+ npm version patch # 0.1.1 → 0.1.2
418
+
419
+ # 배포
420
+ GITLAB_TOKEN="토큰" npm publish
421
+
422
+ # Git push
423
+ git push && git push --tags
424
+ ```
425
+
426
+ ### 배포 확인
427
+
428
+ ```bash
429
+ npm view @t3q-ui/design-system version
430
+ ```
431
+
432
+ ---
433
+
434
+ ## Storybook
435
+
436
+ 컴포넌트 개발 및 문서화를 위한 Storybook을 제공합니다.
437
+
438
+ ```bash
439
+ # Storybook 실행 (Local)
440
+ npm run storybook
441
+ ```
442
+
443
+ 실행 후 `http://localhost:6006`에서 확인할 수 있습니다.
444
+
445
+ ---
446
+
447
+ ## 프로젝트 구조
448
+
449
+ ```
450
+ t3q-ui/
451
+ ├── src/
452
+ │ ├── index.ts # 메인 export
453
+ │ ├── components/ # 컴포넌트들
454
+ │ ├── utils/cn.ts # 유틸리티
455
+ │ └── styles/tokens.css # CSS 변수 (@theme 블록)
456
+ ├── dist/ # 빌드 결과물
457
+ ├── postcss.config.cjs # PostCSS 설정
458
+ └── package.json
459
+ ```
460
+
461
+ ---
462
+
463
+ ## 라이선스
464
+
465
+ T3Q와 계약한 프로젝트와 그 유지보수에 한해 사용할 수 있습니다. 전문은 [LICENSE.md](./LICENSE.md) 를 보세요.