@x-plat/design-system 0.7.2 → 0.8.0

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 (41) hide show
  1. package/dist/components/AutoResizeTextArea/index.css +2 -0
  2. package/dist/components/Button/index.css +2 -1
  3. package/dist/components/Button/index.d.cts +6 -0
  4. package/dist/components/Button/index.d.ts +6 -0
  5. package/dist/components/Chart/index.cjs +8 -1
  6. package/dist/components/Chart/index.js +8 -1
  7. package/dist/components/ChatInput/index.css +4 -0
  8. package/dist/components/DatePicker/index.css +4 -1
  9. package/dist/components/Input/index.css +2 -0
  10. package/dist/components/Link/index.cjs +64 -0
  11. package/dist/components/Link/index.css +25 -0
  12. package/dist/components/Link/index.d.cts +27 -0
  13. package/dist/components/Link/index.d.ts +27 -0
  14. package/dist/components/Link/index.js +37 -0
  15. package/dist/components/LinkButton/index.cjs +64 -0
  16. package/dist/components/LinkButton/index.css +106 -0
  17. package/dist/components/LinkButton/index.d.cts +28 -0
  18. package/dist/components/LinkButton/index.d.ts +28 -0
  19. package/dist/components/LinkButton/index.js +37 -0
  20. package/dist/components/TextArea/index.css +2 -0
  21. package/dist/components/Tooltip/index.cjs +77 -32
  22. package/dist/components/Tooltip/index.d.cts +10 -2
  23. package/dist/components/Tooltip/index.d.ts +10 -2
  24. package/dist/components/Tooltip/index.js +77 -32
  25. package/dist/components/index.cjs +247 -153
  26. package/dist/components/index.css +36 -1
  27. package/dist/components/index.d.cts +2 -0
  28. package/dist/components/index.d.ts +2 -0
  29. package/dist/components/index.js +222 -130
  30. package/dist/index.cjs +266 -172
  31. package/dist/index.css +36 -1
  32. package/dist/index.d.cts +2 -0
  33. package/dist/index.d.ts +2 -0
  34. package/dist/index.js +239 -147
  35. package/guidelines/AGENT_PROMPT.md +2 -2
  36. package/guidelines/Guidelines.md +2 -1
  37. package/guidelines/components/button.md +54 -0
  38. package/guidelines/components/card.md +15 -19
  39. package/guidelines/components/link.md +35 -0
  40. package/guidelines/components/overlay.md +30 -1
  41. package/package.json +1 -1
@@ -594,9 +594,9 @@ CSS 변수 `--semantic-{category}-{role}` 사용.
594
594
  | 카테고리 | 컴포넌트 |
595
595
  |---|---|
596
596
  | 입력 | `Button`, `Input`, `PasswordInput`, `TextArea`, `Select`, `CheckBox`, `Radio`, `Switch`, `DatePicker`, `Calendar` |
597
- | 표시 | `Table`, `Card`, `Tag`, `Chip`, `Avatar`, `NotificationBadge`, `Skeleton`, `Spinner`, `Divider`, `EmptyState`, `Progress` |
597
+ | 표시 | `Table`, `Box`, `Tag`, `Chip`, `Avatar`, `NotificationBadge`, `Skeleton`, `Spinner`, `Divider`, `EmptyState`, `Progress` |
598
598
  | 오버레이 | `Modal`, `Drawer`, `PopOver`, `Tooltip`, `Alert`, `Toast` (`ToastProvider` 필요) |
599
- | 네비 | `Tab`, `CardTab`, `Breadcrumb`, `Pagination`, `Steps`, `Dropdown` |
599
+ | 네비 | `Tab`, `CardTab`, `Breadcrumb`, `Pagination`, `Steps`, `Dropdown`, `Link`, `LinkButton` |
600
600
  | 미디어 | `Video`, `FileUpload`, `ImageSelector`, `Swiper` |
601
601
  | 기타 | `Accordion`, `Chart`, `HtmlTypeWriter` |
602
602
 
@@ -60,12 +60,13 @@ React 기반 디자인 시스템 라이브러리이다. Figma Make Kit과 1:1
60
60
  - [DatePicker](./components/datepicker.md) - Calendar, DatePicker 4종
61
61
  - [Accordion](./components/accordion.md)
62
62
  - [Avatar](./components/avatar.md)
63
- - [Card](./components/card.md)
63
+ - [Card → Box](./components/card.md)
64
64
  - [Chart](./components/chart.md)
65
65
  - [데이터 표시](./components/data-display.md) - Divider, EmptyState, Skeleton, Spinner
66
66
  - [Dropdown](./components/dropdown.md)
67
67
  - [파일 & 미디어](./components/file-media.md) - FileUpload, ImageSelector, Video
68
68
  - [Swiper](./components/swiper.md)
69
+ - [Link](./components/link.md)
69
70
  - [HtmlTypeWriter](./components/html-typewriter.md)
70
71
  4. **컴포지션**
71
72
  - [Grid](./composition/grid.md) - Grid 시스템, 위젯 패턴
@@ -1,5 +1,59 @@
1
1
  # Button
2
2
 
3
+ <!-- props:Button -->
4
+ | Prop | 타입 | 기본값 | 설명 |
5
+ |------|------|--------|------|
6
+ | children * | `ReactNode` | - | |
7
+ | type | `"primary" \| "secondary" \| "danger" \| "ghost"` | `"primary"` | |
8
+ | size | `"sm" \| "md" \| "lg"` | `"md"` | |
9
+
10
+ `*` = 필수
11
+ <!-- /props:Button -->
12
+
13
+ ## 버튼 / 링크버튼 / 링크
14
+
15
+ 셋은 의미가 다르다. 생김새가 아니라 **무슨 일이 일어나는지**로 고른다.
16
+
17
+ | 컴포넌트 | 렌더 | 쓰는 곳 |
18
+ |---|---|---|
19
+ | `Button` | `<button>` | 누르면 **무언가 일어난다** — 저장, 삭제, 모달 열기 |
20
+ | `LinkButton` | `<a>` | **이동한다.** 버튼처럼 보여야 하는 자리 |
21
+ | `Link` | `<a>` | **이동한다.** 본문 속 텍스트 링크 |
22
+
23
+ ```tsx
24
+ <Button onClick={save}>저장</Button>
25
+ <LinkButton href="/terms">약관 보기</LinkButton>
26
+ <p>자세한 내용은 <Link href="/terms">약관</Link>을 확인하세요.</p>
27
+ ```
28
+
29
+ 이동하는 자리를 `<button>` 으로 만들면 **우클릭 메뉴·새 탭으로 열기·링크 미리보기가
30
+ 전부 막힌다.** 반대로 동작하는 자리를 `<a href="#">` 으로 만들면 주소가 바뀌고
31
+ 뒤로가기가 깨진다.
32
+
33
+ `LinkButton` 은 `Button` 의 스타일시트를 그대로 쓴다. `type`·`size` 값도 같다.
34
+ `width: 100%` 가 들어 있으니 내용만큼만 차지해야 하면 감싸는 요소에
35
+ `width: fit-content` 를 준다.
36
+
37
+ <!-- props:LinkButton -->
38
+ | Prop | 타입 | 기본값 | 설명 |
39
+ |------|------|--------|------|
40
+ | children * | `ReactNode` | - | |
41
+ | href * | `string` | - | |
42
+ | type | `"primary" \| "secondary" \| "danger" \| "ghost"` | `"primary"` | |
43
+ | size | `"sm" \| "md" \| "lg"` | `"md"` | |
44
+
45
+ `*` = 필수
46
+ 표준 HTML 속성(`onClick`, `aria-*` 등 280개)도 그대로 전달된다.
47
+ <!-- /props:LinkButton -->
48
+
49
+ ### 클래스를 직접 빌리지 말 것
50
+
51
+ `<a className="lib-xplat-button primary md">` 는 동작하지만 클래스 이름이 바뀌면
52
+ 컴파일·런타임 에러 없이 **스타일만 조용히 빠진다.** `LinkButton` 을 쓴다.
53
+
54
+ 라우터 링크(`NextLink` 등)를 버튼처럼 보이게 해야 하는 경우는 아직 지원하지 않는다.
55
+ 필요해지면 알려달라.
56
+
3
57
  ## Type
4
58
 
5
59
  | type | 용도 |
@@ -1,28 +1,24 @@
1
- # Card
1
+ # Card → Box
2
2
 
3
- 콘텐츠를 카드 형태로 감싸는 컨테이너이다.
3
+ **`Card` 라는 컴포넌트는 없다.** 이 역할은 `Box` 가 한다.
4
4
 
5
5
  ```tsx
6
- import { Card } from "@x-plat/design-system";
7
- ```
6
+ import { Box } from "@x-plat/design-system";
8
7
 
9
- ## Props
8
+ <Box title="매출 현황">
9
+ <p>이번 달 매출: 1,200만원</p>
10
+ </Box>
11
+ ```
10
12
 
13
+ <!-- props:Box -->
11
14
  | Prop | 타입 | 기본값 | 설명 |
12
15
  |------|------|--------|------|
13
- | children `*` | `ReactNode` | — | 카드 본문 |
14
- | title | `string` | — | 카드 상단 제목 |
15
-
16
- ---
16
+ | children * | `ReactNode` | - | |
17
+ | title | `ReactNode` | - | |
18
+ | variant | `"outlined" \| "elevated" \| "flat"` | - | |
19
+ | padding | `"none" \| "sm" \| "md" \| "lg"` | - | |
17
20
 
18
- ## 사용 예시
21
+ `*` = 필수
22
+ <!-- /props:Box -->
19
23
 
20
- ```tsx
21
- <Card title="매출 현황">
22
- <p>이번 달 매출: 1,200만원</p>
23
- </Card>
24
-
25
- <Card>
26
- <p>제목 없는 카드</p>
27
- </Card>
28
- ```
24
+ `variant` 로 테두리/그림자 방식을, `padding` 으로 안쪽 여백을 정한다.
@@ -0,0 +1,35 @@
1
+ # Link
2
+
3
+ 본문 속 텍스트 링크. 크기·굵기는 **주변 텍스트를 그대로 물려받는다.**
4
+ 색과 밑줄만 정의한다.
5
+
6
+ ```tsx
7
+ <p>자세한 내용은 <Link href="/terms">약관</Link>을 확인하세요.</p>
8
+ <Link href="https://x.com" target="_blank">외부 문서</Link>
9
+ ```
10
+
11
+ <!-- props:Link -->
12
+ | Prop | 타입 | 기본값 | 설명 |
13
+ |------|------|--------|------|
14
+ | children * | `ReactNode` | - | |
15
+ | href * | `string` | - | |
16
+ | underline | `"always" \| "hover" \| "none"` | `"always"` | 밑줄 표시 방식. 기본은 `"always"`. 본문 속 링크는 색만으로 구분하면 색각 이상이 있는 사용자가 놓친다. 주변 텍스트와 확실히 구분되는 자리(내비게이션·목록 등)에서만 `"hover"` 나 `"none"` 으로 내린다. |
17
+
18
+ `*` = 필수
19
+ 표준 HTML 속성(`onClick`, `aria-*` 등 281개)도 그대로 전달된다.
20
+ <!-- /props:Link -->
21
+
22
+ ## underline
23
+
24
+ 기본값은 `"always"` 다. 본문 속 링크를 **색만으로 구분하면 색각 이상이 있는 사용자가
25
+ 놓친다.** 주변 텍스트와 확실히 구분되는 자리(내비게이션·목록 등)에서만 내린다.
26
+
27
+ ```tsx
28
+ <Link href="/a">본문 링크</Link> {/* 항상 밑줄 */}
29
+ <Link href="/a" underline="hover">목록 항목</Link> {/* 호버 시에만 */}
30
+ <Link href="/a" underline="none">내비게이션</Link> {/* 없음 */}
31
+ ```
32
+
33
+ - `target="_blank"` 면 `rel="noopener noreferrer"` 가 자동으로 붙는다.
34
+ - 버튼처럼 보여야 하는 링크는 `LinkButton`, 누르면 무언가 일어나는 자리는 `Button` 이다.
35
+ [button.md](./button.md) 참고.
@@ -52,7 +52,8 @@
52
52
 
53
53
  ## Tooltip
54
54
 
55
- 부가 정보를 표시한다. **description이 필수이다.** children이 트리거이다.
55
+ 부가 정보를 표시한다. `children` 이 트리거다.
56
+ `title` 과 `description` 중 **하나 이상**이 있어야 뜬다 (둘 다 없으면 children 만 렌더된다).
56
57
 
57
58
  ```tsx
58
59
  <Tooltip description="도움말 텍스트">
@@ -60,6 +61,34 @@
60
61
  </Tooltip>
61
62
  ```
62
63
 
64
+ <!-- props:Tooltip -->
65
+ | Prop | 타입 | 기본값 | 설명 |
66
+ |------|------|--------|------|
67
+ | children * | `ReactNode` | - | |
68
+ | title | `ReactNode` | - | |
69
+ | description | `ReactNode` | - | |
70
+ | type | `"dark" \| "light"` | `"dark"` | |
71
+ | follow | `boolean` | `false` | 커서를 따라다닌다. 기본값은 `false` — 트리거 요소 기준으로 고정된다 (PopOver/Dropdown/Select 와 같은 방식). 넓은 영역 안에서 **가리키는 지점**이 의미를 가질 때만 켠다. 버튼이나 아이콘처럼 대상이 작은 경우는 고정이 읽기 편하다. |
72
+ | disabled | `boolean` | `false` | |
73
+
74
+ `*` = 필수
75
+ <!-- /props:Tooltip -->
76
+
77
+ ### 위치 방식
78
+
79
+ 기본은 **트리거 요소 기준 고정**이다 (PopOver/Dropdown/Select 와 같은 방식).
80
+ `follow` 를 주면 커서를 따라다닌다.
81
+
82
+ ```tsx
83
+ <Tooltip description="..." follow>
84
+ <div className="wide-area">넓은 영역</div>
85
+ </Tooltip>
86
+ ```
87
+
88
+ 넓은 영역 안에서 **가리키는 지점**이 의미를 가질 때만 `follow` 를 켠다.
89
+ 버튼·아이콘처럼 대상이 작으면 고정이 읽기 편하다.
90
+ 키보드 포커스로 뜰 때는 커서가 없으므로 `follow` 여부와 무관하게 트리거 기준으로 뜬다.
91
+
63
92
  ---
64
93
 
65
94
  ## 의사결정
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@x-plat/design-system",
3
- "version": "0.7.2",
3
+ "version": "0.8.0",
4
4
  "description": "XPLAT UI Design System",
5
5
  "author": "XPLAT WOONG",
6
6
  "main": "dist/index.cjs",