@nexus-cross/design-system 1.0.3-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.
- package/cursor-rules/nexus-project-setup.mdc +188 -0
- package/cursor-rules/nexus-ui-api.mdc +698 -0
- package/cursor-rules/nexus-ui-components.mdc +104 -0
- package/dist/accordion.d.mts +28 -0
- package/dist/accordion.d.ts +28 -0
- package/dist/accordion.js +28 -0
- package/dist/accordion.mjs +3 -0
- package/dist/avatar.d.mts +17 -0
- package/dist/avatar.d.ts +17 -0
- package/dist/avatar.js +16 -0
- package/dist/avatar.mjs +3 -0
- package/dist/button.d.mts +15 -0
- package/dist/button.d.ts +15 -0
- package/dist/button.js +16 -0
- package/dist/button.mjs +3 -0
- package/dist/carousel.d.mts +36 -0
- package/dist/carousel.d.ts +36 -0
- package/dist/carousel.js +32 -0
- package/dist/carousel.mjs +3 -0
- package/dist/checkbox.d.mts +21 -0
- package/dist/checkbox.d.ts +21 -0
- package/dist/checkbox.js +20 -0
- package/dist/checkbox.mjs +3 -0
- package/dist/chip.d.mts +16 -0
- package/dist/chip.d.ts +16 -0
- package/dist/chip.js +16 -0
- package/dist/chip.mjs +3 -0
- package/dist/chunks/chunk-22ULI3BF.js +21 -0
- package/dist/chunks/chunk-2JTPRBHZ.mjs +36 -0
- package/dist/chunks/chunk-377KBJQG.js +74 -0
- package/dist/chunks/chunk-3CHRUKSJ.mjs +120 -0
- package/dist/chunks/chunk-4ITJA3IS.mjs +83 -0
- package/dist/chunks/chunk-4J3GCZ7W.mjs +102 -0
- package/dist/chunks/chunk-53A2SL62.js +218 -0
- package/dist/chunks/chunk-54IA2P2Z.mjs +40 -0
- package/dist/chunks/chunk-5I2VRWWU.js +172 -0
- package/dist/chunks/chunk-5TBXVD56.js +88 -0
- package/dist/chunks/chunk-6DZVNFVY.js +82 -0
- package/dist/chunks/chunk-6FHK6CBR.js +117 -0
- package/dist/chunks/chunk-6H7V2I3X.mjs +270 -0
- package/dist/chunks/chunk-6MRM5K2N.js +106 -0
- package/dist/chunks/chunk-6NTASYZO.js +132 -0
- package/dist/chunks/chunk-76CY4STF.js +165 -0
- package/dist/chunks/chunk-76K6KXCT.js +100 -0
- package/dist/chunks/chunk-7MT3QYE6.js +92 -0
- package/dist/chunks/chunk-7OEK2KX3.mjs +81 -0
- package/dist/chunks/chunk-AKIBUO5A.mjs +83 -0
- package/dist/chunks/chunk-AOVU67NI.mjs +139 -0
- package/dist/chunks/chunk-AOXXE5UQ.mjs +14 -0
- package/dist/chunks/chunk-AWBGWBFS.js +135 -0
- package/dist/chunks/chunk-AZ2URLDD.js +39 -0
- package/dist/chunks/chunk-BEA727LO.mjs +108 -0
- package/dist/chunks/chunk-C3E7CSKG.mjs +115 -0
- package/dist/chunks/chunk-C6H2UNOX.js +83 -0
- package/dist/chunks/chunk-CVYXRSXT.mjs +8 -0
- package/dist/chunks/chunk-EIOP4DOE.mjs +292 -0
- package/dist/chunks/chunk-FA2OPP3U.mjs +140 -0
- package/dist/chunks/chunk-FHPHDK3O.mjs +89 -0
- package/dist/chunks/chunk-FKHW7QYG.js +725 -0
- package/dist/chunks/chunk-FKZI2HTI.js +104 -0
- package/dist/chunks/chunk-G4XJG7XI.js +66 -0
- package/dist/chunks/chunk-GMIGQ5VP.mjs +86 -0
- package/dist/chunks/chunk-GSLIY6WW.js +109 -0
- package/dist/chunks/chunk-HHXDOKXY.js +108 -0
- package/dist/chunks/chunk-HUPAHDJ7.js +273 -0
- package/dist/chunks/chunk-I252NERB.mjs +21 -0
- package/dist/chunks/chunk-I7YJB2F5.js +143 -0
- package/dist/chunks/chunk-IB5UCYQY.mjs +66 -0
- package/dist/chunks/chunk-IJG7J2VU.mjs +148 -0
- package/dist/chunks/chunk-INP2AH3B.js +27 -0
- package/dist/chunks/chunk-IUNNTSD2.mjs +195 -0
- package/dist/chunks/chunk-JNMCYWGY.js +10 -0
- package/dist/chunks/chunk-JZ3PWHKS.mjs +51 -0
- package/dist/chunks/chunk-KWPIEHD2.mjs +78 -0
- package/dist/chunks/chunk-LBKBCI2K.mjs +44 -0
- package/dist/chunks/chunk-LVTD2UQN.mjs +48 -0
- package/dist/chunks/chunk-MPKRXMCJ.js +93 -0
- package/dist/chunks/chunk-NCQDOPBR.mjs +86 -0
- package/dist/chunks/chunk-NHDGKOAM.js +104 -0
- package/dist/chunks/chunk-OTGS6BDQ.mjs +25 -0
- package/dist/chunks/chunk-Q2TMXHPK.js +178 -0
- package/dist/chunks/chunk-Q7GQVAYY.js +88 -0
- package/dist/chunks/chunk-Q7H6LCNN.js +169 -0
- package/dist/chunks/chunk-QJNQCLMV.js +25 -0
- package/dist/chunks/chunk-QK6NCII4.js +36 -0
- package/dist/chunks/chunk-RLP3U52D.mjs +153 -0
- package/dist/chunks/chunk-T2IY2TSR.js +43 -0
- package/dist/chunks/chunk-TLTEUIBY.js +112 -0
- package/dist/chunks/chunk-TPBKQ3WC.js +303 -0
- package/dist/chunks/chunk-TR5JBBEA.mjs +116 -0
- package/dist/chunks/chunk-TWHDXCKR.js +61 -0
- package/dist/chunks/chunk-U56AGSLE.mjs +106 -0
- package/dist/chunks/chunk-U6KOUYWX.mjs +66 -0
- package/dist/chunks/chunk-U76LT5GE.js +70 -0
- package/dist/chunks/chunk-UDQXLI5Y.mjs +81 -0
- package/dist/chunks/chunk-UH667FUK.mjs +712 -0
- package/dist/chunks/chunk-UR6JOKVB.mjs +65 -0
- package/dist/chunks/chunk-VH5FF6DZ.mjs +38 -0
- package/dist/chunks/chunk-WJ2OVQD3.mjs +105 -0
- package/dist/chunks/chunk-WNFJ4NJN.mjs +55 -0
- package/dist/chunks/chunk-WSWD5ZUJ.js +106 -0
- package/dist/chunks/chunk-XALPBGSC.mjs +23 -0
- package/dist/chunks/chunk-XEHFB62A.js +82 -0
- package/dist/chunks/chunk-YEGPB7A7.js +83 -0
- package/dist/chunks/chunk-YEWKPWK3.mjs +80 -0
- package/dist/chunks/chunk-Z7OKV6NW.mjs +59 -0
- package/dist/chunks/chunk-ZCMKIB5U.js +140 -0
- package/dist/client-only.d.mts +13 -0
- package/dist/client-only.d.ts +13 -0
- package/dist/client-only.js +11 -0
- package/dist/client-only.mjs +2 -0
- package/dist/countdown.d.mts +27 -0
- package/dist/countdown.d.ts +27 -0
- package/dist/countdown.js +16 -0
- package/dist/countdown.mjs +3 -0
- package/dist/counter.d.mts +15 -0
- package/dist/counter.d.ts +15 -0
- package/dist/counter.js +11 -0
- package/dist/counter.mjs +2 -0
- package/dist/divider.d.mts +14 -0
- package/dist/divider.d.ts +14 -0
- package/dist/divider.js +16 -0
- package/dist/divider.mjs +3 -0
- package/dist/drawer.d.mts +42 -0
- package/dist/drawer.d.ts +42 -0
- package/dist/drawer.js +44 -0
- package/dist/drawer.mjs +3 -0
- package/dist/ellipsis.d.mts +16 -0
- package/dist/ellipsis.d.ts +16 -0
- package/dist/ellipsis.js +12 -0
- package/dist/ellipsis.mjs +3 -0
- package/dist/error-boundary.d.mts +20 -0
- package/dist/error-boundary.d.ts +20 -0
- package/dist/error-boundary.js +11 -0
- package/dist/error-boundary.mjs +2 -0
- package/dist/hooks/useCheckDevice.d.mts +47 -0
- package/dist/hooks/useCheckDevice.d.ts +47 -0
- package/dist/hooks/useCheckDevice.js +8 -0
- package/dist/hooks/useCheckDevice.mjs +2 -0
- package/dist/hooks/useClickOutside.d.mts +12 -0
- package/dist/hooks/useClickOutside.d.ts +12 -0
- package/dist/hooks/useClickOutside.js +8 -0
- package/dist/hooks/useClickOutside.mjs +2 -0
- package/dist/hooks/useDraggableBottomSheet.d.mts +24 -0
- package/dist/hooks/useDraggableBottomSheet.d.ts +24 -0
- package/dist/hooks/useDraggableBottomSheet.js +11 -0
- package/dist/hooks/useDraggableBottomSheet.mjs +2 -0
- package/dist/hooks/useDraggableWindow.d.mts +21 -0
- package/dist/hooks/useDraggableWindow.d.ts +21 -0
- package/dist/hooks/useDraggableWindow.js +11 -0
- package/dist/hooks/useDraggableWindow.mjs +2 -0
- package/dist/hooks/useInView.d.mts +14 -0
- package/dist/hooks/useInView.d.ts +14 -0
- package/dist/hooks/useInView.js +17 -0
- package/dist/hooks/useInView.mjs +2 -0
- package/dist/hooks/useModal.d.mts +2 -0
- package/dist/hooks/useModal.d.ts +2 -0
- package/dist/hooks/useModal.js +11 -0
- package/dist/hooks/useModal.mjs +2 -0
- package/dist/index.d.mts +74 -0
- package/dist/index.d.ts +74 -0
- package/dist/index.js +633 -0
- package/dist/index.mjs +227 -0
- package/dist/infinite-scroll.d.mts +26 -0
- package/dist/infinite-scroll.d.ts +26 -0
- package/dist/infinite-scroll.js +12 -0
- package/dist/infinite-scroll.mjs +3 -0
- package/dist/marquee.d.mts +12 -0
- package/dist/marquee.d.ts +12 -0
- package/dist/marquee.js +12 -0
- package/dist/marquee.mjs +3 -0
- package/dist/modal/index.d.mts +87 -0
- package/dist/modal/index.d.ts +87 -0
- package/dist/modal/index.js +54 -0
- package/dist/modal/index.mjs +9 -0
- package/dist/number-input.d.mts +21 -0
- package/dist/number-input.d.ts +21 -0
- package/dist/number-input.js +16 -0
- package/dist/number-input.mjs +3 -0
- package/dist/pagination.d.mts +21 -0
- package/dist/pagination.d.ts +21 -0
- package/dist/pagination.js +20 -0
- package/dist/pagination.mjs +3 -0
- package/dist/popover.d.mts +25 -0
- package/dist/popover.d.ts +25 -0
- package/dist/popover.js +32 -0
- package/dist/popover.mjs +3 -0
- package/dist/radio-group.d.mts +29 -0
- package/dist/radio-group.d.ts +29 -0
- package/dist/radio-group.js +24 -0
- package/dist/radio-group.mjs +3 -0
- package/dist/select.d.mts +31 -0
- package/dist/select.d.ts +31 -0
- package/dist/select.js +24 -0
- package/dist/select.mjs +3 -0
- package/dist/spinner.d.mts +9 -0
- package/dist/spinner.d.ts +9 -0
- package/dist/spinner.js +12 -0
- package/dist/spinner.mjs +3 -0
- package/dist/styles.css +2 -0
- package/dist/styles.d.mts +3 -0
- package/dist/styles.d.ts +3 -0
- package/dist/styles.js +19 -0
- package/dist/styles.mjs +17 -0
- package/dist/switch.d.mts +15 -0
- package/dist/switch.d.ts +15 -0
- package/dist/switch.js +16 -0
- package/dist/switch.mjs +3 -0
- package/dist/tab.d.mts +36 -0
- package/dist/tab.d.ts +36 -0
- package/dist/tab.js +20 -0
- package/dist/tab.mjs +3 -0
- package/dist/table.d.mts +80 -0
- package/dist/table.d.ts +80 -0
- package/dist/table.js +32 -0
- package/dist/table.mjs +3 -0
- package/dist/text-area.d.mts +15 -0
- package/dist/text-area.d.ts +15 -0
- package/dist/text-area.js +16 -0
- package/dist/text-area.mjs +3 -0
- package/dist/text-input.d.mts +17 -0
- package/dist/text-input.d.ts +17 -0
- package/dist/text-input.js +16 -0
- package/dist/text-input.mjs +3 -0
- package/dist/theme-provider.d.mts +25 -0
- package/dist/theme-provider.d.ts +25 -0
- package/dist/theme-provider.js +15 -0
- package/dist/theme-provider.mjs +2 -0
- package/dist/toast.d.mts +42 -0
- package/dist/toast.d.ts +42 -0
- package/dist/toast.js +20 -0
- package/dist/toast.mjs +3 -0
- package/dist/tooltip.d.mts +24 -0
- package/dist/tooltip.d.ts +24 -0
- package/dist/tooltip.js +20 -0
- package/dist/tooltip.mjs +3 -0
- package/dist/typography.d.mts +19 -0
- package/dist/typography.d.ts +19 -0
- package/dist/typography.js +102 -0
- package/dist/typography.mjs +79 -0
- package/dist/useModal-BsGIcP8t.d.mts +128 -0
- package/dist/useModal-BsGIcP8t.d.ts +128 -0
- package/dist/utils/cn.d.mts +15 -0
- package/dist/utils/cn.d.ts +15 -0
- package/dist/utils/cn.js +11 -0
- package/dist/utils/cn.mjs +2 -0
- package/dist/utils/scroll.d.mts +4 -0
- package/dist/utils/scroll.d.ts +4 -0
- package/dist/utils/scroll.js +15 -0
- package/dist/utils/scroll.mjs +2 -0
- package/dist/virtual-scroll.d.mts +34 -0
- package/dist/virtual-scroll.d.ts +34 -0
- package/dist/virtual-scroll.js +16 -0
- package/dist/virtual-scroll.mjs +3 -0
- package/package.json +271 -0
- package/scripts/setup-cursor-rules.cjs +92 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "NEXUS Design System 프로젝트 설정 — 이 프로젝트의 기술 스택과 필수 규칙"
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# NEXUS Design System 프로젝트 설정
|
|
7
|
+
|
|
8
|
+
이 프로젝트는 NEXUS Design System을 사용한다. 코드를 생성할 때 반드시 아래를 따른다.
|
|
9
|
+
|
|
10
|
+
## 기술 스택
|
|
11
|
+
|
|
12
|
+
- **디자인 토큰**: `@nexus-cross/tokens` (CSS 변수 기반)
|
|
13
|
+
- **UI 컴포넌트**: `@nexus-cross/design-system` (React, CVA + Tailwind)
|
|
14
|
+
- **스타일링**: Tailwind CSS v4 + NEXUS 시맨틱 토큰
|
|
15
|
+
|
|
16
|
+
## 절대 규칙
|
|
17
|
+
|
|
18
|
+
1. **색상은 반드시 NEXUS 토큰을 사용한다.** 하드코딩 금지.
|
|
19
|
+
- `bg-bg-default`, `text-text-primary`, `border-border-default` 등
|
|
20
|
+
- `#ffffff`, `#000000`, `rgb()` 등 직접 색상값 사용 금지
|
|
21
|
+
- 참고: `.cursor/rules/nexus-tokens.mdc`
|
|
22
|
+
|
|
23
|
+
2. **UI 컴포넌트는 반드시 `@nexus-cross/design-system`에서 import한다.** 직접 구현 금지.
|
|
24
|
+
- `<Button>`, `<TextInput>`, `<Modal>`, `<Toast>` 등
|
|
25
|
+
- Radix UI, Headless UI 등을 직접 import하여 동일 기능 컴포넌트를 만들지 않는다
|
|
26
|
+
- 참고: `.cursor/rules/nexus-ui-components.mdc`, `.cursor/rules/nexus-ui-api.mdc`
|
|
27
|
+
|
|
28
|
+
3. **Figma 디자인 구현 시:**
|
|
29
|
+
- NEXUS 토큰과 공용 UI를 적극 활용하되, **Figma 디자인에 충실하게** 구현한다
|
|
30
|
+
- Figma의 색상값을 보고 가장 가까운 NEXUS 토큰으로 매핑한다
|
|
31
|
+
- Figma의 UI 요소(버튼, 입력필드 등)는 `@nexus-cross/design-system` 컴포넌트로 구현한다
|
|
32
|
+
- Figma 디자인과 공용 UI의 스타일이 다를 경우, `className`으로 Figma에 맞게 오버라이드한다
|
|
33
|
+
- Figma에 없는 커스텀 스타일만 Tailwind 유틸리티로 작성한다
|
|
34
|
+
|
|
35
|
+
## Figma MCP 코드 변환 체크리스트
|
|
36
|
+
|
|
37
|
+
**Figma MCP에서 받은 코드를 그대로 사용하지 않는다.** 반드시 아래 교체를 수행한다:
|
|
38
|
+
|
|
39
|
+
| Figma MCP 결과 (네이티브 HTML) | 교체 대상 (`@nexus-cross/design-system`) |
|
|
40
|
+
|-------------------------------|------------------------------|
|
|
41
|
+
| `<button>`, `<a>` 버튼 스타일 | `<Button>` (variant, size 지정) |
|
|
42
|
+
| `<input type="text">` | `<TextInput>` (prefixIcon, suffixIcon 지원) |
|
|
43
|
+
| `<textarea>` | `<TextArea>` (showCount, maxLength 지원) |
|
|
44
|
+
| `<input type="number">` | `<NumberInput>` |
|
|
45
|
+
| `<select>` | `<Select>` + `<SelectItem>` |
|
|
46
|
+
| `<input type="checkbox">` | `<CheckBox>` |
|
|
47
|
+
| `<input type="radio">` | `<RadioGroup>` + `<RadioItem>` |
|
|
48
|
+
| 토글/스위치 UI | `<Switch>` |
|
|
49
|
+
| 탭 UI | `<Tab>` (items 배열로 구성) |
|
|
50
|
+
| 칩/태그/필터/뱃지 | `<Chip>` (variant, onClose 지원) |
|
|
51
|
+
| 아바타/프로필 이미지 | `<Avatar>` (fallback, shape 지원) |
|
|
52
|
+
| 구분선/`<hr>` | `<Divider>` (orientation, variant 지정) |
|
|
53
|
+
| 드롭다운 메뉴 | `<Select>` 또는 `<Popover>` |
|
|
54
|
+
| 툴팁 | `<Tooltip>` |
|
|
55
|
+
| 아코디언/접기 | `<Accordion>` |
|
|
56
|
+
| 캐러셀/슬라이더 | `<Carousel>` + `<CarouselSlide>` |
|
|
57
|
+
| 페이지네이션 | `<Pagination>` |
|
|
58
|
+
| 모달/다이얼로그 | `modal()` + `<ModalTemplate>` |
|
|
59
|
+
| 토스트/알림 | `toast()` |
|
|
60
|
+
| 드로어/바텀시트 | `<Drawer>` |
|
|
61
|
+
| 로딩 스피너 | `<Spinner>` |
|
|
62
|
+
| 흐르는 텍스트 | `<Marquee>` |
|
|
63
|
+
|
|
64
|
+
**위 교체를 하지 않고 네이티브 HTML을 사용하면 규칙 위반이다.**
|
|
65
|
+
|
|
66
|
+
```tsx
|
|
67
|
+
// ❌ Figma MCP 코드 그대로 사용 (금지)
|
|
68
|
+
<button className="bg-[#09B498] text-white px-4 py-2 rounded-lg">확인</button>
|
|
69
|
+
<input className="border border-[#C6D0DA] px-3 py-2 rounded" placeholder="검색" />
|
|
70
|
+
<div className="w-8 h-8 rounded-full bg-gray-200" /> {/* 아바타 */}
|
|
71
|
+
<hr className="border-[#ECF0F2]" /> {/* 구분선 */}
|
|
72
|
+
|
|
73
|
+
// ✅ NEXUS 컴포넌트로 교체 (필수)
|
|
74
|
+
<Button variant="primary">확인</Button>
|
|
75
|
+
<TextInput placeholder="검색" prefixIcon={<SearchIcon />} />
|
|
76
|
+
<Avatar fallback="JD" size="sm" />
|
|
77
|
+
<Divider />
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## 전역 설정 (앱 루트에 필수)
|
|
81
|
+
|
|
82
|
+
아래 컴포넌트를 앱 루트(layout.tsx 또는 App.tsx)에 **반드시** 배치한다.
|
|
83
|
+
|
|
84
|
+
| 컴포넌트 | import | 필수 조건 | 설명 |
|
|
85
|
+
|----------|--------|----------|------|
|
|
86
|
+
| `<ModalContainer />` | `@nexus-cross/design-system/modal` | `modal()` 또는 `useModal()` 사용 시 | 모달 렌더링 컨테이너 |
|
|
87
|
+
| `<Toaster />` | `@nexus-cross/design-system` | `toast()` 사용 시 | 토스트 알림 렌더링 |
|
|
88
|
+
|
|
89
|
+
```tsx
|
|
90
|
+
// layout.tsx 또는 App.tsx
|
|
91
|
+
import { ModalContainer } from '@nexus-cross/design-system/modal';
|
|
92
|
+
import { Toaster } from '@nexus-cross/design-system';
|
|
93
|
+
|
|
94
|
+
export default function RootLayout({ children }) {
|
|
95
|
+
return (
|
|
96
|
+
<>
|
|
97
|
+
{children}
|
|
98
|
+
<ModalContainer />
|
|
99
|
+
<Toaster position="top-right" />
|
|
100
|
+
</>
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**전역 설정이 필요 없는 컴포넌트** (별도 Provider 없이 바로 사용 가능):
|
|
106
|
+
- Tooltip (내부에 Provider 내장)
|
|
107
|
+
- Popover, Drawer, Select, Accordion 등 모든 나머지 컴포넌트
|
|
108
|
+
|
|
109
|
+
## Import 패턴
|
|
110
|
+
|
|
111
|
+
```tsx
|
|
112
|
+
// 일반 컴포넌트
|
|
113
|
+
import { Button, TextInput, TextArea, Select, Switch, Chip, Spinner, Divider } from '@nexus-cross/design-system';
|
|
114
|
+
|
|
115
|
+
// 오버레이 컴포넌트
|
|
116
|
+
import { Tooltip, Popover, Drawer, Accordion } from '@nexus-cross/design-system';
|
|
117
|
+
|
|
118
|
+
// 토스트
|
|
119
|
+
import { toast, Toaster } from '@nexus-cross/design-system';
|
|
120
|
+
|
|
121
|
+
// 모달 시스템 (별도 서브패스)
|
|
122
|
+
import { modal, useModal, ModalTemplate, ModalContainer } from '@nexus-cross/design-system/modal';
|
|
123
|
+
|
|
124
|
+
// 토큰 (JS API가 필요한 경우만)
|
|
125
|
+
import { getTheme } from '@nexus-cross/tokens';
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## 모달 작성 규칙
|
|
129
|
+
|
|
130
|
+
모달 컴포넌트는 **반드시 `ModalTemplate`으로 감싸야 한다.** `<div>`만으로 모달을 만들지 않는다.
|
|
131
|
+
|
|
132
|
+
```tsx
|
|
133
|
+
// ✅ 올바른 모달
|
|
134
|
+
import { ModalTemplate } from '@nexus-cross/design-system/modal';
|
|
135
|
+
|
|
136
|
+
function MyModal({ close, resolve }: { close: () => void; resolve: (value: any) => void }) {
|
|
137
|
+
return (
|
|
138
|
+
<ModalTemplate title="제목" close={close}>
|
|
139
|
+
<p className="text-text-secondary">내용</p>
|
|
140
|
+
<Button onClick={() => resolve({ confirmed: true })}>확인</Button>
|
|
141
|
+
</ModalTemplate>
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// 호출
|
|
146
|
+
const result = await modal({ component: MyModal });
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
```tsx
|
|
150
|
+
// ❌ 잘못된 모달 — ModalTemplate 없이 div만 사용
|
|
151
|
+
function MyModal({ close }: { close: () => void }) {
|
|
152
|
+
return (
|
|
153
|
+
<div className="p-6 bg-white rounded-lg">
|
|
154
|
+
<h2>제목</h2>
|
|
155
|
+
<p>내용</p>
|
|
156
|
+
</div>
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## 토스트 사용 규칙
|
|
162
|
+
|
|
163
|
+
```tsx
|
|
164
|
+
import { toast } from '@nexus-cross/design-system';
|
|
165
|
+
|
|
166
|
+
toast('기본 메시지');
|
|
167
|
+
toast.success('성공!');
|
|
168
|
+
toast.error('오류가 발생했습니다');
|
|
169
|
+
toast.loading('처리 중...');
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
루트에 `<Toaster />` 없이 `toast()`를 호출하면 아무것도 표시되지 않는다.
|
|
173
|
+
|
|
174
|
+
## 토큰 사용 예시
|
|
175
|
+
|
|
176
|
+
```tsx
|
|
177
|
+
// ✅ 올바른 사용
|
|
178
|
+
<div className="bg-bg-default text-text-primary border border-border-default">
|
|
179
|
+
<Button variant="primary">확인</Button>
|
|
180
|
+
<TextInput placeholder="검색..." />
|
|
181
|
+
</div>
|
|
182
|
+
|
|
183
|
+
// ❌ 잘못된 사용
|
|
184
|
+
<div className="bg-white text-gray-900 border border-gray-200">
|
|
185
|
+
<button className="bg-green-500 text-white px-4 py-2 rounded">확인</button>
|
|
186
|
+
<input className="border border-gray-300 px-3 py-2" placeholder="검색..." />
|
|
187
|
+
</div>
|
|
188
|
+
```
|