@nexus-cross/design-system 1.0.3-beta.1 → 1.0.5-beta.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 (104) hide show
  1. package/cursor-rules/nexus-project-setup.mdc +86 -4
  2. package/cursor-rules/nexus-ui-components.mdc +53 -43
  3. package/dist/avatar.d.mts +1 -1
  4. package/dist/avatar.d.ts +1 -1
  5. package/dist/button.d.mts +4 -2
  6. package/dist/button.d.ts +4 -2
  7. package/dist/button.js +3 -3
  8. package/dist/button.mjs +1 -1
  9. package/dist/checkbox.d.mts +2 -2
  10. package/dist/checkbox.d.ts +2 -2
  11. package/dist/chip.d.mts +2 -2
  12. package/dist/chip.d.ts +2 -2
  13. package/dist/chunks/chunk-5XVEYVYA.js +59 -0
  14. package/dist/chunks/chunk-B7UU3FSS.mjs +37 -0
  15. package/dist/chunks/{chunk-FKHW7QYG.js → chunk-DDMZSNTG.js} +3 -3
  16. package/dist/chunks/{chunk-IUNNTSD2.mjs → chunk-GQP7IXH2.mjs} +87 -31
  17. package/dist/chunks/chunk-JUZHWKGS.mjs +61 -0
  18. package/dist/chunks/chunk-LKZ7B6DP.mjs +15 -0
  19. package/dist/chunks/chunk-NTN55ZIX.mjs +113 -0
  20. package/dist/chunks/{chunk-EIOP4DOE.mjs → chunk-OGUTGD4J.mjs} +2 -1
  21. package/dist/chunks/chunk-RXVYL4AU.js +83 -0
  22. package/dist/chunks/{chunk-UH667FUK.mjs → chunk-SXLMI7CZ.mjs} +3 -3
  23. package/dist/chunks/chunk-SYELYJPQ.js +17 -0
  24. package/dist/chunks/{chunk-TPBKQ3WC.js → chunk-TXYYBJBQ.js} +2 -1
  25. package/dist/chunks/{chunk-6MRM5K2N.js → chunk-WVIEIRK2.js} +43 -13
  26. package/dist/chunks/{chunk-53A2SL62.js → chunk-ZINDMFOI.js} +87 -30
  27. package/dist/data-list.d.mts +33 -0
  28. package/dist/data-list.d.ts +33 -0
  29. package/dist/data-list.js +14 -0
  30. package/dist/data-list.mjs +5 -0
  31. package/dist/drawer.d.mts +1 -1
  32. package/dist/drawer.d.ts +1 -1
  33. package/dist/index.d.mts +3 -1
  34. package/dist/index.d.ts +3 -1
  35. package/dist/index.js +229 -116
  36. package/dist/index.mjs +182 -81
  37. package/dist/modal/index.js +12 -12
  38. package/dist/modal/index.mjs +3 -3
  39. package/dist/number-input.d.mts +20 -3
  40. package/dist/number-input.d.ts +20 -3
  41. package/dist/number-input.js +7 -3
  42. package/dist/number-input.mjs +1 -1
  43. package/dist/pagination.d.mts +2 -2
  44. package/dist/pagination.d.ts +2 -2
  45. package/dist/radio-group.d.mts +1 -1
  46. package/dist/radio-group.d.ts +1 -1
  47. package/dist/schemas/_all.json +1707 -0
  48. package/dist/schemas/accordion.json +98 -0
  49. package/dist/schemas/avatar.json +49 -0
  50. package/dist/schemas/button.json +71 -0
  51. package/dist/schemas/carousel.json +26 -0
  52. package/dist/schemas/checkBox.json +50 -0
  53. package/dist/schemas/chip.json +46 -0
  54. package/dist/schemas/countdown.json +55 -0
  55. package/dist/schemas/counter.json +54 -0
  56. package/dist/schemas/dataList.json +56 -0
  57. package/dist/schemas/divider.json +40 -0
  58. package/dist/schemas/drawer.json +24 -0
  59. package/dist/schemas/drawerContent.json +47 -0
  60. package/dist/schemas/ellipsis.json +39 -0
  61. package/dist/schemas/infiniteScroll.json +56 -0
  62. package/dist/schemas/marquee.json +43 -0
  63. package/dist/schemas/modalCall.json +21 -0
  64. package/dist/schemas/modalTemplate.json +73 -0
  65. package/dist/schemas/numberInput.json +65 -0
  66. package/dist/schemas/pagination.json +43 -0
  67. package/dist/schemas/popover.json +58 -0
  68. package/dist/schemas/radioGroup.json +58 -0
  69. package/dist/schemas/radioItem.json +35 -0
  70. package/dist/schemas/select.json +56 -0
  71. package/dist/schemas/selectItem.json +28 -0
  72. package/dist/schemas/skeleton.json +45 -0
  73. package/dist/schemas/spinner.json +27 -0
  74. package/dist/schemas/switch.json +34 -0
  75. package/dist/schemas/tab.json +86 -0
  76. package/dist/schemas/textArea.json +37 -0
  77. package/dist/schemas/textInput.json +45 -0
  78. package/dist/schemas/tooltip.json +64 -0
  79. package/dist/schemas/typography.json +70 -0
  80. package/dist/schemas/virtualGrid.json +51 -0
  81. package/dist/schemas/virtualList.json +51 -0
  82. package/dist/schemas.d.mts +882 -0
  83. package/dist/schemas.d.ts +882 -0
  84. package/dist/schemas.js +384 -0
  85. package/dist/schemas.mjs +349 -0
  86. package/dist/select.d.mts +3 -3
  87. package/dist/select.d.ts +3 -3
  88. package/dist/skeleton.d.mts +15 -0
  89. package/dist/skeleton.d.ts +15 -0
  90. package/dist/skeleton.js +12 -0
  91. package/dist/skeleton.mjs +3 -0
  92. package/dist/styles.css +1 -1
  93. package/dist/styles.js +5 -13
  94. package/dist/styles.mjs +1 -16
  95. package/dist/switch.d.mts +1 -1
  96. package/dist/switch.d.ts +1 -1
  97. package/dist/tab.d.mts +1 -1
  98. package/dist/tab.d.ts +1 -1
  99. package/dist/table.js +8 -7
  100. package/dist/table.mjs +2 -1
  101. package/dist/text-input.d.mts +1 -1
  102. package/dist/text-input.d.ts +1 -1
  103. package/package.json +30 -7
  104. package/dist/chunks/chunk-4ITJA3IS.mjs +0 -83
@@ -32,12 +32,39 @@ alwaysApply: true
32
32
  - Figma 디자인과 공용 UI의 스타일이 다를 경우, `className`으로 Figma에 맞게 오버라이드한다
33
33
  - Figma에 없는 커스텀 스타일만 Tailwind 유틸리티로 작성한다
34
34
 
35
- ## Figma MCP 코드 변환 체크리스트
35
+ ## Figma MCP NEXUS 변환 워크플로우
36
36
 
37
- **Figma MCP에서 받은 코드를 그대로 사용하지 않는다.** 반드시 아래 교체를 수행한다:
37
+ **Figma MCP 도구(get_design_context, get_code 등)의 출력을 절대 그대로 사용하지 않는다.**
38
+ Figma MCP는 바닐라 HTML + Tailwind를 출력하지만, 이 프로젝트는 `@nexus-cross/design-system`을 사용한다.
39
+ **MCP 출력은 "디자인 의도를 파악하는 참고 자료"일 뿐, 최종 코드가 아니다.**
38
40
 
39
- | Figma MCP 결과 (네이티브 HTML) | 교체 대상 (`@nexus-cross/design-system`) |
40
- |-------------------------------|------------------------------|
41
+ ### 필수 3단계 워크플로우
42
+
43
+ **1단계: 디자인 분석 (MCP 호출)**
44
+ - `get_design_context`로 구조와 레이아웃 파악
45
+ - `get_screenshot`으로 시각적 참조 확인
46
+ - 이 단계에서 MCP가 출력하는 코드는 **읽기만 하고 사용하지 않는다**
47
+
48
+ **2단계: 컴포넌트 매핑 (코드 작성 전에 반드시 수행)**
49
+ MCP 출력의 각 요소를 NEXUS 컴포넌트로 매핑한다. **코드를 한 줄이라도 쓰기 전에** 이 매핑을 먼저 완료한다.
50
+
51
+ ```
52
+ MCP 출력 분석:
53
+ - <button> 2개 발견 → Button (primary, ghost)
54
+ - <input type="text"> 1개 → TextInput
55
+ - <select> 1개 → Select + SelectItem
56
+ - 색상 #09B498 → bg-accent-primary (NEXUS 토큰)
57
+ - 색상 #1E232E → text-text-primary (NEXUS 토큰)
58
+ - 간격 16px → var(--spacing-padding-md)
59
+ ```
60
+
61
+ **3단계: NEXUS 코드 생성**
62
+ 매핑을 기반으로 코드를 작성한다. 이 단계에서는 MCP 출력 코드를 참조하지 않는다.
63
+
64
+ ### 컴포넌트 변환 테이블
65
+
66
+ | MCP 출력 (네이티브 HTML) | → NEXUS 컴포넌트 |
67
+ |---|---|
41
68
  | `<button>`, `<a>` 버튼 스타일 | `<Button>` (variant, size 지정) |
42
69
  | `<input type="text">` | `<TextInput>` (prefixIcon, suffixIcon 지원) |
43
70
  | `<textarea>` | `<TextArea>` (showCount, maxLength 지원) |
@@ -59,10 +86,65 @@ alwaysApply: true
59
86
  | 토스트/알림 | `toast()` |
60
87
  | 드로어/바텀시트 | `<Drawer>` |
61
88
  | 로딩 스피너 | `<Spinner>` |
89
+ | 스켈레톤 로딩 | `<Skeleton>` |
90
+ | 데이터 리스트 | `<DataList>` |
91
+ | 테이블 | `<Table>` + `<TableRow>` + `<TdColumn>` |
92
+ | 숫자 카운트 애니메이션 | `<Counter>` |
93
+ | 카운트다운 타이머 | `<Countdown>` |
94
+ | 텍스트 말줄임 | `<Ellipsis>` |
62
95
  | 흐르는 텍스트 | `<Marquee>` |
96
+ | 무한 스크롤 리스트 | `<InfiniteScroll>` |
97
+ | 대량 리스트 (가상 스크롤) | `<VirtualList>` / `<VirtualGrid>` |
63
98
 
64
99
  **위 교체를 하지 않고 네이티브 HTML을 사용하면 규칙 위반이다.**
65
100
 
101
+ ### 색상 변환 테이블
102
+
103
+ MCP가 출력하는 색상값을 NEXUS 토큰으로 변환한다:
104
+
105
+ | MCP 출력 색상 | → NEXUS 토큰 |
106
+ |---|---|
107
+ | `#FFFFFF`, `bg-white` | `bg-bg-default` |
108
+ | `#F3F6F8`, `bg-gray-50` | `bg-bg-subtle` |
109
+ | `#1E232E`, `text-gray-900` | `text-text-primary` |
110
+ | `#7E8597`, `text-gray-500` | `text-text-secondary` |
111
+ | `#A2AABA`, `text-gray-400` | `text-text-muted` |
112
+ | `#ECF0F2`, `border-gray-200` | `border-border-default` |
113
+ | `#09B498`, `bg-green-*`, `bg-teal-*` | `bg-accent-primary` |
114
+ | `#7346F3`, `bg-purple-*`, `bg-violet-*` | `bg-accent-secondary` |
115
+ | `#DB0A2D`, `bg-red-*` | `bg-status-danger` |
116
+ | `#00B784` | `bg-status-success` |
117
+ | `#FF9D00`, `bg-amber-*` | `bg-status-warning` |
118
+ | `#0095FF`, `bg-blue-*` | `bg-status-info` |
119
+
120
+ 위에 정확히 매칭되지 않는 색상은 가장 가까운 NEXUS 토큰을 선택한다.
121
+ **어떤 경우에도 hex 값이나 Tailwind 기본 색상(bg-blue-500 등)을 사용하지 않는다.**
122
+
123
+ ### Button variant 판단 기준
124
+
125
+ Figma에서 버튼의 시각적 스타일을 보고 variant를 결정한다:
126
+
127
+ | Figma 시각적 특징 | → variant |
128
+ |---|---|
129
+ | 채워진 accent 색상 배경 (초록/틸) | `variant="primary"` |
130
+ | 채워진 회색/중립 배경 | `variant="secondary"` |
131
+ | 테두리만 있고 배경 투명 | `variant="outline"` |
132
+ | 배경/테두리 없이 텍스트만 | `variant="ghost"` |
133
+ | 빨간색/위험 표시 | `variant="danger"` |
134
+
135
+ ### 자기 검증 체크리스트
136
+
137
+ 코드를 출력하기 전에 아래를 확인한다:
138
+
139
+ - [ ] `<button>`, `<input>`, `<select>`, `<textarea>` 등 네이티브 HTML 폼 요소가 없는가?
140
+ - [ ] hex 색상값(`#...`)이 없는가?
141
+ - [ ] Tailwind 기본 색상(`bg-blue-500`, `text-gray-900` 등)이 없는가?
142
+ - [ ] 모든 import가 `@nexus-cross/design-system`에서 오는가?
143
+ - [ ] 모달은 `ModalTemplate`으로 감쌌는가?
144
+ - [ ] 간격/크기에 하드코딩 px이 없는가?
145
+
146
+ **하나라도 실패하면 코드를 수정한 후 출력한다.**
147
+
66
148
  ```tsx
67
149
  // ❌ Figma MCP 코드 그대로 사용 (금지)
68
150
  <button className="bg-[#09B498] text-white px-4 py-2 rounded-lg">확인</button>
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: "@nexus-cross/design-system 공용 컴포넌트 사용 규칙 — AI가 코드 생성 시 반드시 따라야 하는 컴포넌트 사용 지침"
2
+ description: '@nexus-cross/design-system 공용 컴포넌트 사용 규칙 — AI가 코드 생성 시 반드시 따라야 하는 컴포넌트 사용 지침'
3
3
  alwaysApply: true
4
4
  ---
5
5
 
@@ -14,51 +14,54 @@ alwaysApply: true
14
14
  2. **동일 기능의 컴포넌트를 직접 구현하지 않는다.** 예: 직접 `<button className="...">` 대신 `<Button>`을 사용.
15
15
  3. **스타일 커스텀은 `className` prop으로 오버라이드**한다. 래퍼 div를 추가하지 않는다.
16
16
  4. **`asChild` prop**을 지원하는 컴포넌트는 렌더링 요소를 변경할 수 있다.
17
- 5. **variants 함수만 가져다 쓸 수도 있다** (예: `buttonVariants({ variant: 'primary', size: 'lg' })`).
17
+ 5. **variants 함수만 가져다 쓸 수도 있다** (예: `buttonVariants({ semantic: 'primary', variant: 'contained', size: 'lg' })`).
18
18
 
19
19
  ## 컴포넌트 매핑 가이드
20
20
 
21
- | Figma 요소 | 사용할 컴포넌트 | import |
22
- |---|---|---|
23
- | 버튼 | `<Button>` | `import { Button } from '@nexus-cross/design-system'` |
24
- | 텍스트 입력 필드 | `<TextInput>` | `import { TextInput } from '@nexus-cross/design-system'` |
25
- | 텍스트 영역 | `<TextArea>` | `import { TextArea } from '@nexus-cross/design-system'` |
26
- | 셀렉트/드롭다운 | `<Select>` + `<SelectItem>` | `import { Select, SelectItem } from '@nexus-cross/design-system'` |
27
- | 체크박스 | `<CheckBox>` | `import { CheckBox } from '@nexus-cross/design-system'` |
28
- | 라디오 그룹 | `<RadioGroup>` + `<RadioItem>` | `import { RadioGroup, RadioItem } from '@nexus-cross/design-system'` |
29
- | 토글/스위치 | `<Switch>` | `import { Switch } from '@nexus-cross/design-system'` |
30
- | 칩/태그/뱃지 | `<Chip>` | `import { Chip } from '@nexus-cross/design-system'` |
31
- | 로딩 스피너 | `<Spinner>` | `import { Spinner } from '@nexus-cross/design-system'` |
32
- | 구분선 | `<Divider>` | `import { Divider } from '@nexus-cross/design-system'` |
33
- | 툴팁 | `<Tooltip>` | `import { Tooltip } from '@nexus-cross/design-system'` |
34
- | 팝오버 | `<Popover>` | `import { Popover } from '@nexus-cross/design-system'` |
35
- | 아코디언/접기 | `<Accordion>` | `import { Accordion } from '@nexus-cross/design-system'` |
36
- | 드로어/바텀시트 | `<Drawer>` | `import { Drawer } from '@nexus-cross/design-system'` |
37
- | 모달/다이얼로그 | `openModal()` | `import { openModal } from '@nexus-cross/design-system'` |
38
- | 토스트/알림 | `toast()` | `import { toast } from '@nexus-cross/design-system'` |
39
- | 테이블 | `<Table>` | `import { Table, TableRow, TdColumn } from '@nexus-cross/design-system'` |
40
- | 무한 스크롤 | `<InfiniteScroll>` | `import { InfiniteScroll } from '@nexus-cross/design-system'` |
41
- | 텍스트 말줄임 | `<Ellipsis>` | `import { Ellipsis } from '@nexus-cross/design-system'` |
42
- | 페이지네이션 | `<Pagination>` | `import { Pagination } from '@nexus-cross/design-system'` |
43
- | 숫자 입력 | `<NumberInput>` | `import { NumberInput } from '@nexus-cross/design-system'` |
44
- | 아바타/프로필 | `<Avatar>` | `import { Avatar } from '@nexus-cross/design-system'` |
45
- | 숫자 카운트 | `<Counter>` | `import { Counter } from '@nexus-cross/design-system'` |
46
- | 카운트다운 | `<Countdown>` | `import { Countdown } from '@nexus-cross/design-system'` |
47
- | 마퀴/흐르는 텍스트 | `<Marquee>` | `import { Marquee } from '@nexus-cross/design-system'` |
48
- | 탭 | `<Tab>` | `import { Tab } from '@nexus-cross/design-system'` |
49
- | 캐러셀/슬라이더 | `<Carousel>` | `import { Carousel, CarouselSlide } from '@nexus-cross/design-system'` |
50
- | 가상 스크롤 리스트 | `<VirtualList>` | `import { VirtualList } from '@nexus-cross/design-system'` |
51
- | 가상 스크롤 그리드 | `<VirtualGrid>` | `import { VirtualGrid } from '@nexus-cross/design-system'` |
21
+ | Figma 요소 | 사용할 컴포넌트 | import |
22
+ | ------------------ | ------------------------------ | ------------------------------------------------------------------------ |
23
+ | 버튼 | `<Button>` | `import { Button } from '@nexus-cross/design-system'` |
24
+ | 텍스트 입력 필드 | `<TextInput>` | `import { TextInput } from '@nexus-cross/design-system'` |
25
+ | 텍스트 영역 | `<TextArea>` | `import { TextArea } from '@nexus-cross/design-system'` |
26
+ | 셀렉트/드롭다운 | `<Select>` + `<SelectItem>` | `import { Select, SelectItem } from '@nexus-cross/design-system'` |
27
+ | 체크박스 | `<CheckBox>` | `import { CheckBox } from '@nexus-cross/design-system'` |
28
+ | 라디오 그룹 | `<RadioGroup>` + `<RadioItem>` | `import { RadioGroup, RadioItem } from '@nexus-cross/design-system'` |
29
+ | 토글/스위치 | `<Switch>` | `import { Switch } from '@nexus-cross/design-system'` |
30
+ | 칩/태그/뱃지 | `<Chip>` | `import { Chip } from '@nexus-cross/design-system'` |
31
+ | 로딩 스피너 | `<Spinner>` | `import { Spinner } from '@nexus-cross/design-system'` |
32
+ | 구분선 | `<Divider>` | `import { Divider } from '@nexus-cross/design-system'` |
33
+ | 툴팁 | `<Tooltip>` | `import { Tooltip } from '@nexus-cross/design-system'` |
34
+ | 팝오버 | `<Popover>` | `import { Popover } from '@nexus-cross/design-system'` |
35
+ | 아코디언/접기 | `<Accordion>` | `import { Accordion } from '@nexus-cross/design-system'` |
36
+ | 드로어/바텀시트 | `<Drawer>` | `import { Drawer } from '@nexus-cross/design-system'` |
37
+ | 모달/다이얼로그 | `openModal()` | `import { openModal } from '@nexus-cross/design-system'` |
38
+ | 토스트/알림 | `toast()` | `import { toast } from '@nexus-cross/design-system'` |
39
+ | 테이블 | `<Table>` | `import { Table, TableRow, TdColumn } from '@nexus-cross/design-system'` |
40
+ | 무한 스크롤 | `<InfiniteScroll>` | `import { InfiniteScroll } from '@nexus-cross/design-system'` |
41
+ | 텍스트 말줄임 | `<Ellipsis>` | `import { Ellipsis } from '@nexus-cross/design-system'` |
42
+ | 페이지네이션 | `<Pagination>` | `import { Pagination } from '@nexus-cross/design-system'` |
43
+ | 숫자 입력 | `<NumberInput>` | `import { NumberInput } from '@nexus-cross/design-system'` |
44
+ | 아바타/프로필 | `<Avatar>` | `import { Avatar } from '@nexus-cross/design-system'` |
45
+ | 숫자 카운트 | `<Counter>` | `import { Counter } from '@nexus-cross/design-system'` |
46
+ | 카운트다운 | `<Countdown>` | `import { Countdown } from '@nexus-cross/design-system'` |
47
+ | 마퀴/흐르는 텍스트 | `<Marquee>` | `import { Marquee } from '@nexus-cross/design-system'` |
48
+ | 탭 | `<Tab>` | `import { Tab } from '@nexus-cross/design-system'` |
49
+ | 캐러셀/슬라이더 | `<Carousel>` | `import { Carousel, CarouselSlide } from '@nexus-cross/design-system'` |
50
+ | 가상 스크롤 리스트 | `<VirtualList>` | `import { VirtualList } from '@nexus-cross/design-system'` |
51
+ | 가상 스크롤 그리드 | `<VirtualGrid>` | `import { VirtualGrid } from '@nexus-cross/design-system'` |
52
+ | 데이터 리스트 | `<DataList>` | `import { DataList } from '@nexus-cross/design-system'` |
53
+ | 스켈레톤 로딩 | `<Skeleton>` | `import { Skeleton } from '@nexus-cross/design-system'` |
52
54
 
53
55
  ## 유틸리티 & 훅
54
56
 
55
- | 기능 | 사용 | import |
56
- |---|---|---|
57
- | 클래스 병합 | `cn()` | `import { cn } from '@nexus-cross/design-system'` |
58
- | 모달 훅 | `useModal()` | `import { useModal } from '@nexus-cross/design-system'` |
59
- | 뷰포트 감지 | `useInView()` | `import { useInView } from '@nexus-cross/design-system'` |
60
- | 디바이스 체크 | `useCheckDevice()` | `import { useCheckDevice } from '@nexus-cross/design-system'` |
61
- | 외부 클릭 | `useClickOutside()` | `import { useClickOutside } from '@nexus-cross/design-system'` |
57
+ | 기능 | 사용 | import |
58
+ | ----------------------- | --------------------------------- | ----------------------------------------------------------------------------------- |
59
+ | 클래스 병합 | `cn()` | `import { cn } from '@nexus-cross/design-system'` |
60
+ | 모달 훅 | `useModal()` | `import { useModal } from '@nexus-cross/design-system'` |
61
+ | 뷰포트 감지 | `useInView()` | `import { useInView } from '@nexus-cross/design-system'` |
62
+ | 디바이스 체크 | `useCheckDevice()` | `import { useCheckDevice } from '@nexus-cross/design-system'` |
63
+ | 외부 클릭 | `useClickOutside()` | `import { useClickOutside } from '@nexus-cross/design-system'` |
64
+ | NumberInput 외부 바인딩 | `numberInputBind(ref, direction)` | `import { numberInputBind, type NumberInputRef } from '@nexus-cross/design-system'` |
62
65
 
63
66
  ## asChild 패턴
64
67
 
@@ -66,7 +69,7 @@ alwaysApply: true
66
69
 
67
70
  ```tsx
68
71
  // Button을 <a> 태그로 렌더링
69
- <Button asChild variant="primary">
72
+ <Button asChild semantic="primary" variant="contained">
70
73
  <a href="/about">About</a>
71
74
  </Button>
72
75
 
@@ -81,10 +84,17 @@ alwaysApply: true
81
84
  컴포넌트를 사용하지 않고 variant 클래스만 필요할 때:
82
85
 
83
86
  ```tsx
84
- import { buttonVariants } from '@nexus-cross/design-system';
87
+ import { buttonVariants } from '@nexus-cross/design-system'
85
88
 
86
89
  // 직접 <a> 태그에 Button 스타일 적용
87
- <a href="/link" className={buttonVariants({ variant: 'outline', size: 'sm' })}>
90
+ ;<a
91
+ href="/link"
92
+ className={buttonVariants({
93
+ semantic: 'primary',
94
+ variant: 'outlined',
95
+ size: 'sm',
96
+ })}
97
+ >
88
98
  링크
89
99
  </a>
90
100
  ```
package/dist/avatar.d.mts CHANGED
@@ -3,7 +3,7 @@ import * as React from 'react';
3
3
  import { VariantProps } from 'class-variance-authority';
4
4
 
5
5
  declare const avatarVariants: (props?: ({
6
- size?: "sm" | "md" | "lg" | "xs" | "xl" | null | undefined;
6
+ size?: "xl" | "lg" | "md" | "sm" | "xs" | null | undefined;
7
7
  shape?: "circle" | "square" | null | undefined;
8
8
  } & class_variance_authority_types.ClassProp) | undefined) => string;
9
9
  interface AvatarProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof avatarVariants> {
package/dist/avatar.d.ts CHANGED
@@ -3,7 +3,7 @@ import * as React from 'react';
3
3
  import { VariantProps } from 'class-variance-authority';
4
4
 
5
5
  declare const avatarVariants: (props?: ({
6
- size?: "sm" | "md" | "lg" | "xs" | "xl" | null | undefined;
6
+ size?: "xl" | "lg" | "md" | "sm" | "xs" | null | undefined;
7
7
  shape?: "circle" | "square" | null | undefined;
8
8
  } & class_variance_authority_types.ClassProp) | undefined) => string;
9
9
  interface AvatarProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof avatarVariants> {
package/dist/button.d.mts CHANGED
@@ -3,8 +3,10 @@ import * as React from 'react';
3
3
  import { VariantProps } from 'class-variance-authority';
4
4
 
5
5
  declare const buttonVariants: (props?: ({
6
- variant?: "primary" | "secondary" | "outline" | "ghost" | "danger" | null | undefined;
7
- size?: "sm" | "md" | "lg" | null | undefined;
6
+ semantic?: "primary" | "secondary" | "normal" | "danger" | null | undefined;
7
+ variant?: "contained" | "outlined" | "subtle" | "ghost" | null | undefined;
8
+ size?: "xl" | "lg" | "md" | "sm" | null | undefined;
9
+ radius?: "default" | "circle" | null | undefined;
8
10
  } & class_variance_authority_types.ClassProp) | undefined) => string;
9
11
  interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
10
12
  asChild?: boolean;
package/dist/button.d.ts CHANGED
@@ -3,8 +3,10 @@ import * as React from 'react';
3
3
  import { VariantProps } from 'class-variance-authority';
4
4
 
5
5
  declare const buttonVariants: (props?: ({
6
- variant?: "primary" | "secondary" | "outline" | "ghost" | "danger" | null | undefined;
7
- size?: "sm" | "md" | "lg" | null | undefined;
6
+ semantic?: "primary" | "secondary" | "normal" | "danger" | null | undefined;
7
+ variant?: "contained" | "outlined" | "subtle" | "ghost" | null | undefined;
8
+ size?: "xl" | "lg" | "md" | "sm" | null | undefined;
9
+ radius?: "default" | "circle" | null | undefined;
8
10
  } & class_variance_authority_types.ClassProp) | undefined) => string;
9
11
  interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
10
12
  asChild?: boolean;
package/dist/button.js CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunk6MRM5K2N_js = require('./chunks/chunk-6MRM5K2N.js');
3
+ var chunkWVIEIRK2_js = require('./chunks/chunk-WVIEIRK2.js');
4
4
  require('./chunks/chunk-QJNQCLMV.js');
5
5
  require('./chunks/chunk-JNMCYWGY.js');
6
6
 
@@ -8,9 +8,9 @@ require('./chunks/chunk-JNMCYWGY.js');
8
8
 
9
9
  Object.defineProperty(exports, "Button", {
10
10
  enumerable: true,
11
- get: function () { return chunk6MRM5K2N_js.Button; }
11
+ get: function () { return chunkWVIEIRK2_js.Button; }
12
12
  });
13
13
  Object.defineProperty(exports, "buttonVariants", {
14
14
  enumerable: true,
15
- get: function () { return chunk6MRM5K2N_js.buttonVariants; }
15
+ get: function () { return chunkWVIEIRK2_js.buttonVariants; }
16
16
  });
package/dist/button.mjs CHANGED
@@ -1,3 +1,3 @@
1
- export { Button, buttonVariants } from './chunks/chunk-4ITJA3IS.mjs';
1
+ export { Button, buttonVariants } from './chunks/chunk-NTN55ZIX.mjs';
2
2
  import './chunks/chunk-XALPBGSC.mjs';
3
3
  import './chunks/chunk-CVYXRSXT.mjs';
@@ -3,11 +3,11 @@ import * as React from 'react';
3
3
  import { VariantProps } from 'class-variance-authority';
4
4
 
5
5
  declare const checkBoxVariants: (props?: ({
6
- size?: "sm" | "md" | null | undefined;
6
+ size?: "md" | "sm" | null | undefined;
7
7
  shape?: "round" | "square" | null | undefined;
8
8
  } & class_variance_authority_types.ClassProp) | undefined) => string;
9
9
  declare const boxVariants: (props?: ({
10
- size?: "sm" | "md" | null | undefined;
10
+ size?: "md" | "sm" | null | undefined;
11
11
  shape?: "round" | "square" | null | undefined;
12
12
  } & class_variance_authority_types.ClassProp) | undefined) => string;
13
13
  interface CheckBoxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'>, VariantProps<typeof checkBoxVariants> {
@@ -3,11 +3,11 @@ import * as React from 'react';
3
3
  import { VariantProps } from 'class-variance-authority';
4
4
 
5
5
  declare const checkBoxVariants: (props?: ({
6
- size?: "sm" | "md" | null | undefined;
6
+ size?: "md" | "sm" | null | undefined;
7
7
  shape?: "round" | "square" | null | undefined;
8
8
  } & class_variance_authority_types.ClassProp) | undefined) => string;
9
9
  declare const boxVariants: (props?: ({
10
- size?: "sm" | "md" | null | undefined;
10
+ size?: "md" | "sm" | null | undefined;
11
11
  shape?: "round" | "square" | null | undefined;
12
12
  } & class_variance_authority_types.ClassProp) | undefined) => string;
13
13
  interface CheckBoxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'>, VariantProps<typeof checkBoxVariants> {
package/dist/chip.d.mts CHANGED
@@ -3,8 +3,8 @@ import * as React from 'react';
3
3
  import { VariantProps } from 'class-variance-authority';
4
4
 
5
5
  declare const chipVariants: (props?: ({
6
- variant?: "accent" | "outline" | "default" | "filled" | null | undefined;
7
- size?: "sm" | "md" | "lg" | null | undefined;
6
+ variant?: "accent" | "default" | "filled" | "outline" | null | undefined;
7
+ size?: "lg" | "md" | "sm" | null | undefined;
8
8
  } & class_variance_authority_types.ClassProp) | undefined) => string;
9
9
  interface ChipProps extends React.HTMLAttributes<HTMLElement>, VariantProps<typeof chipVariants> {
10
10
  asChild?: boolean;
package/dist/chip.d.ts CHANGED
@@ -3,8 +3,8 @@ import * as React from 'react';
3
3
  import { VariantProps } from 'class-variance-authority';
4
4
 
5
5
  declare const chipVariants: (props?: ({
6
- variant?: "accent" | "outline" | "default" | "filled" | null | undefined;
7
- size?: "sm" | "md" | "lg" | null | undefined;
6
+ variant?: "accent" | "default" | "filled" | "outline" | null | undefined;
7
+ size?: "lg" | "md" | "sm" | null | undefined;
8
8
  } & class_variance_authority_types.ClassProp) | undefined) => string;
9
9
  interface ChipProps extends React.HTMLAttributes<HTMLElement>, VariantProps<typeof chipVariants> {
10
10
  asChild?: boolean;
@@ -0,0 +1,59 @@
1
+ 'use strict';
2
+
3
+ var chunkQJNQCLMV_js = require('./chunk-QJNQCLMV.js');
4
+ var React = require('react');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+
7
+ function _interopNamespace(e) {
8
+ if (e && e.__esModule) return e;
9
+ var n = Object.create(null);
10
+ if (e) {
11
+ Object.keys(e).forEach(function (k) {
12
+ if (k !== 'default') {
13
+ var d = Object.getOwnPropertyDescriptor(e, k);
14
+ Object.defineProperty(n, k, d.get ? d : {
15
+ enumerable: true,
16
+ get: function () { return e[k]; }
17
+ });
18
+ }
19
+ });
20
+ }
21
+ n.default = e;
22
+ return Object.freeze(n);
23
+ }
24
+
25
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
26
+
27
+ var Skeleton = React__namespace.forwardRef(
28
+ ({
29
+ className,
30
+ children,
31
+ as: Tag = "div",
32
+ circle = false,
33
+ width,
34
+ height,
35
+ style,
36
+ ...props
37
+ }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
38
+ Tag,
39
+ {
40
+ ref,
41
+ role: "status",
42
+ "aria-label": "Loading",
43
+ className: chunkQJNQCLMV_js.cn(
44
+ "nx:relative nx:overflow-hidden",
45
+ circle ? "nx:rounded-full" : "nx:rounded-md",
46
+ "nx:bg-gradient-to-r nx:from-surface-hover nx:via-surface-default nx:to-surface-hover",
47
+ "nx:bg-[length:300%_100%]",
48
+ "nx:animate-skeleton",
49
+ className
50
+ ),
51
+ style: { width, height, ...style },
52
+ ...props,
53
+ children: children && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "nx:opacity-0", children })
54
+ }
55
+ )
56
+ );
57
+ Skeleton.displayName = "Skeleton";
58
+
59
+ exports.Skeleton = Skeleton;
@@ -0,0 +1,37 @@
1
+ import { cn } from './chunk-XALPBGSC.mjs';
2
+ import * as React from 'react';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ var Skeleton = React.forwardRef(
6
+ ({
7
+ className,
8
+ children,
9
+ as: Tag = "div",
10
+ circle = false,
11
+ width,
12
+ height,
13
+ style,
14
+ ...props
15
+ }, ref) => /* @__PURE__ */ jsx(
16
+ Tag,
17
+ {
18
+ ref,
19
+ role: "status",
20
+ "aria-label": "Loading",
21
+ className: cn(
22
+ "nx:relative nx:overflow-hidden",
23
+ circle ? "nx:rounded-full" : "nx:rounded-md",
24
+ "nx:bg-gradient-to-r nx:from-surface-hover nx:via-surface-default nx:to-surface-hover",
25
+ "nx:bg-[length:300%_100%]",
26
+ "nx:animate-skeleton",
27
+ className
28
+ ),
29
+ style: { width, height, ...style },
30
+ ...props,
31
+ children: children && /* @__PURE__ */ jsx("span", { className: "nx:opacity-0", children })
32
+ }
33
+ )
34
+ );
35
+ Skeleton.displayName = "Skeleton";
36
+
37
+ export { Skeleton };
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
+ var chunkHHXDOKXY_js = require('./chunk-HHXDOKXY.js');
4
+ var chunkNHDGKOAM_js = require('./chunk-NHDGKOAM.js');
3
5
  var chunkT2IY2TSR_js = require('./chunk-T2IY2TSR.js');
4
6
  var chunkXEHFB62A_js = require('./chunk-XEHFB62A.js');
5
7
  var chunkINP2AH3B_js = require('./chunk-INP2AH3B.js');
6
8
  var chunkHUPAHDJ7_js = require('./chunk-HUPAHDJ7.js');
7
- var chunkHHXDOKXY_js = require('./chunk-HHXDOKXY.js');
8
- var chunkNHDGKOAM_js = require('./chunk-NHDGKOAM.js');
9
9
  var chunkQJNQCLMV_js = require('./chunk-QJNQCLMV.js');
10
10
  var React = require('react');
11
11
  var jsxRuntime = require('react/jsx-runtime');
@@ -287,7 +287,7 @@ var modalInnerVariants = classVarianceAuthority.cva(
287
287
  "slide-right": "nx:h-full nx:rounded-none",
288
288
  "full-page": "nx:h-full nx:w-full nx:sm:w-full nx:rounded-none nx:border-transparent",
289
289
  "full-page-reverse": "nx:h-full nx:w-full nx:sm:w-full nx:rounded-none nx:border-transparent",
290
- draggable: "nx:w-auto nx:min-w-[320px] nx:sm:w-auto nx:overflow-visible"
290
+ draggable: "nx:min-w-[320px] nx:overflow-visible"
291
291
  },
292
292
  hasFooter: {
293
293
  true: "",