@simplysm/solid 13.0.96 → 13.0.98
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/README.md +314 -123
- package/docs/data.md +216 -0
- package/docs/disclosure.md +164 -0
- package/docs/display.md +94 -0
- package/docs/features.md +211 -625
- package/docs/feedback.md +210 -0
- package/docs/form-control.md +537 -0
- package/docs/helpers.md +168 -0
- package/docs/hooks.md +143 -0
- package/docs/layout.md +182 -0
- package/docs/providers.md +177 -0
- package/docs/styles.md +127 -0
- package/package.json +19 -26
- package/docs/display-feedback.md +0 -404
- package/docs/form-controls.md +0 -587
- package/docs/layout-data.md +0 -392
- package/docs/providers-hooks.md +0 -516
package/docs/display-feedback.md
DELETED
|
@@ -1,404 +0,0 @@
|
|
|
1
|
-
# 디스플레이 & 피드백
|
|
2
|
-
|
|
3
|
-
## Card
|
|
4
|
-
|
|
5
|
-
그림자와 호버 효과가 있는 카드 컨테이너. 페이드 인 애니메이션 포함.
|
|
6
|
-
|
|
7
|
-
```tsx
|
|
8
|
-
import { Card } from "@simplysm/solid";
|
|
9
|
-
|
|
10
|
-
<Card>카드 내용</Card>
|
|
11
|
-
<Card class="p-4">커스텀 패딩</Card>
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
`<div>` HTML 속성을 모두 상속한다.
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## Alert
|
|
19
|
-
|
|
20
|
-
의미론적 테마의 알림 배너.
|
|
21
|
-
|
|
22
|
-
```tsx
|
|
23
|
-
import { Alert } from "@simplysm/solid";
|
|
24
|
-
|
|
25
|
-
<Alert theme="success">저장되었습니다.</Alert>
|
|
26
|
-
<Alert theme="danger">오류가 발생했습니다.</Alert>
|
|
27
|
-
<Alert theme="warning">주의가 필요합니다.</Alert>
|
|
28
|
-
<Alert theme="info">참고 사항입니다.</Alert>
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
| Prop | 타입 | 기본값 | 설명 |
|
|
32
|
-
|------|------|--------|------|
|
|
33
|
-
| `theme` | `SemanticTheme` | `"base"` | 색상 테마 |
|
|
34
|
-
|
|
35
|
-
`<div>` HTML 속성을 모두 상속한다.
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
## Icon
|
|
40
|
-
|
|
41
|
-
Tabler Icons 래퍼.
|
|
42
|
-
|
|
43
|
-
```tsx
|
|
44
|
-
import { Icon } from "@simplysm/solid";
|
|
45
|
-
import { IconUser, IconSettings } from "@tabler/icons-solidjs";
|
|
46
|
-
|
|
47
|
-
<Icon icon={IconUser} size="1.5em" />
|
|
48
|
-
<Icon icon={IconSettings} size={24} />
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
| Prop | 타입 | 기본값 | 설명 |
|
|
52
|
-
|------|------|--------|------|
|
|
53
|
-
| `icon` | `Component<TablerIconProps>` | (필수) | Tabler 아이콘 컴포넌트 |
|
|
54
|
-
| `size` | `string \| number` | `"1.25em"` | 아이콘 크기 |
|
|
55
|
-
|
|
56
|
-
Tabler `IconProps`의 나머지 속성(`class`, `color` 등)을 모두 상속한다.
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
## Link
|
|
61
|
-
|
|
62
|
-
테마 색상의 링크 컴포넌트.
|
|
63
|
-
|
|
64
|
-
```tsx
|
|
65
|
-
import { Link } from "@simplysm/solid";
|
|
66
|
-
|
|
67
|
-
<Link href="/users">사용자 목록</Link>
|
|
68
|
-
<Link theme="danger" onClick={handleDelete}>삭제</Link>
|
|
69
|
-
<Link disabled>비활성 링크</Link>
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
| Prop | 타입 | 기본값 | 설명 |
|
|
73
|
-
|------|------|--------|------|
|
|
74
|
-
| `theme` | `SemanticTheme` | `"primary"` | 색상 테마 |
|
|
75
|
-
| `disabled` | `boolean` | `false` | 비활성화 |
|
|
76
|
-
|
|
77
|
-
`<a>` HTML 속성을 모두 상속한다.
|
|
78
|
-
|
|
79
|
-
---
|
|
80
|
-
|
|
81
|
-
## Tag
|
|
82
|
-
|
|
83
|
-
테마 색상의 태그/배지.
|
|
84
|
-
|
|
85
|
-
```tsx
|
|
86
|
-
import { Tag } from "@simplysm/solid";
|
|
87
|
-
|
|
88
|
-
<Tag>기본</Tag>
|
|
89
|
-
<Tag theme="primary">Primary</Tag>
|
|
90
|
-
<Tag theme="success">완료</Tag>
|
|
91
|
-
<Tag theme="danger">긴급</Tag>
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
| Prop | 타입 | 기본값 | 설명 |
|
|
95
|
-
|------|------|--------|------|
|
|
96
|
-
| `theme` | `SemanticTheme` | `"base"` | 색상 테마 |
|
|
97
|
-
|
|
98
|
-
`<span>` HTML 속성을 모두 상속한다.
|
|
99
|
-
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
## Barcode
|
|
103
|
-
|
|
104
|
-
바코드/QR 코드 생성 (bwip-js 기반).
|
|
105
|
-
|
|
106
|
-
```tsx
|
|
107
|
-
import { Barcode } from "@simplysm/solid";
|
|
108
|
-
|
|
109
|
-
<Barcode type="qrcode" value="https://example.com" />
|
|
110
|
-
<Barcode type="code128" value="1234567890" />
|
|
111
|
-
<Barcode type="ean13" value="4006381333931" />
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
| Prop | 타입 | 설명 |
|
|
115
|
-
|------|------|------|
|
|
116
|
-
| `type` | `BarcodeType` | 바코드 타입 (필수). `"qrcode"`, `"code128"`, `"ean13"` 등 100+ 타입 |
|
|
117
|
-
| `value` | `string` | 바코드 값 |
|
|
118
|
-
|
|
119
|
-
`<div>` HTML 속성을 모두 상속한다.
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
## Echarts
|
|
124
|
-
|
|
125
|
-
ECharts 차트 래퍼. 자동 리사이즈, 로딩 상태 지원. `echarts` peer dependency 필요.
|
|
126
|
-
|
|
127
|
-
```tsx
|
|
128
|
-
import { Echarts } from "@simplysm/solid";
|
|
129
|
-
|
|
130
|
-
<Echarts
|
|
131
|
-
option={{
|
|
132
|
-
xAxis: { type: "category", data: ["Mon", "Tue", "Wed"] },
|
|
133
|
-
yAxis: { type: "value" },
|
|
134
|
-
series: [{ data: [120, 200, 150], type: "bar" }],
|
|
135
|
-
}}
|
|
136
|
-
busy={loading()}
|
|
137
|
-
/>
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
| Prop | 타입 | 설명 |
|
|
141
|
-
|------|------|------|
|
|
142
|
-
| `option` | `EChartsOption` | ECharts 옵션 (필수) |
|
|
143
|
-
| `busy` | `boolean` | 로딩 상태 (`showLoading`/`hideLoading`) |
|
|
144
|
-
|
|
145
|
-
`<div>` HTML 속성을 모두 상속한다. 내부적으로 SVG 렌더러를 사용하며, 컨테이너 크기 변경 시 자동 리사이즈한다.
|
|
146
|
-
|
|
147
|
-
---
|
|
148
|
-
|
|
149
|
-
## Dialog
|
|
150
|
-
|
|
151
|
-
모달/플로팅 다이얼로그. 리사이즈, 드래그, z-index 자동 관리.
|
|
152
|
-
|
|
153
|
-
```tsx
|
|
154
|
-
import { Dialog } from "@simplysm/solid";
|
|
155
|
-
|
|
156
|
-
<Dialog open={isOpen()} onOpenChange={setIsOpen} width="600px" resizable draggable>
|
|
157
|
-
<Dialog.Header>제목</Dialog.Header>
|
|
158
|
-
<div>내용</div>
|
|
159
|
-
<Dialog.Action>
|
|
160
|
-
<Button onClick={() => setIsOpen(false)}>닫기</Button>
|
|
161
|
-
</Dialog.Action>
|
|
162
|
-
</Dialog>
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
| Prop | 타입 | 기본값 | 설명 |
|
|
166
|
-
|------|------|--------|------|
|
|
167
|
-
| `open` | `boolean` | | 열림 상태 |
|
|
168
|
-
| `onOpenChange` | `(v: boolean) => void` | | 상태 콜백 |
|
|
169
|
-
| `mode` | `"float" \| "fill"` | `"float"` | 모드 |
|
|
170
|
-
| `resizable` | `boolean` | `false` | 리사이즈 가능 |
|
|
171
|
-
| `draggable` | `boolean` | `false` | 드래그 가능 |
|
|
172
|
-
| `width` | `string` | | 너비 |
|
|
173
|
-
| `height` | `string` | | 높이 |
|
|
174
|
-
| `closeOnEscape` | `boolean` | `true` | ESC 닫기 |
|
|
175
|
-
| `beforeClose` | `() => boolean` | | 닫기 전 확인 (false 반환 시 취소) |
|
|
176
|
-
|
|
177
|
-
### 서브 컴포넌트
|
|
178
|
-
|
|
179
|
-
| 컴포넌트 | 설명 |
|
|
180
|
-
|----------|------|
|
|
181
|
-
| `Dialog.Header` | 다이얼로그 헤더 (닫기 버튼 포함) |
|
|
182
|
-
| `Dialog.Action` | 하단 액션 영역 |
|
|
183
|
-
|
|
184
|
-
### 프로그래밍 방식 다이얼로그
|
|
185
|
-
|
|
186
|
-
```tsx
|
|
187
|
-
const dialog = useDialog();
|
|
188
|
-
|
|
189
|
-
const result = await dialog.show(MyComponent, { data: "value" }, {
|
|
190
|
-
header: "제목",
|
|
191
|
-
width: "500px",
|
|
192
|
-
resizable: true,
|
|
193
|
-
});
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
---
|
|
197
|
-
|
|
198
|
-
## Dropdown
|
|
199
|
-
|
|
200
|
-
팝업 메뉴/드롭다운.
|
|
201
|
-
|
|
202
|
-
```tsx
|
|
203
|
-
import { Dropdown } from "@simplysm/solid";
|
|
204
|
-
|
|
205
|
-
<Dropdown>
|
|
206
|
-
<Dropdown.Trigger>
|
|
207
|
-
<Button>메뉴</Button>
|
|
208
|
-
</Dropdown.Trigger>
|
|
209
|
-
<Dropdown.Content>
|
|
210
|
-
<div>메뉴 항목 1</div>
|
|
211
|
-
<div>메뉴 항목 2</div>
|
|
212
|
-
</Dropdown.Content>
|
|
213
|
-
</Dropdown>
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
| Prop | 타입 | 기본값 | 설명 |
|
|
217
|
-
|------|------|--------|------|
|
|
218
|
-
| `open` | `boolean` | | 열림 상태 |
|
|
219
|
-
| `onOpenChange` | `(v: boolean) => void` | | 상태 콜백 |
|
|
220
|
-
| `position` | `{ x: number; y: number }` | | 절대 위치 (컨텍스트 메뉴용) |
|
|
221
|
-
| `maxHeight` | `number` | `300` | 최대 높이 (px) |
|
|
222
|
-
| `disabled` | `boolean` | `false` | 비활성화 |
|
|
223
|
-
| `keyboardNav` | `boolean` | `false` | 키보드 네비게이션 (Select 등에서 사용) |
|
|
224
|
-
|
|
225
|
-
### 서브 컴포넌트
|
|
226
|
-
|
|
227
|
-
| 컴포넌트 | 설명 |
|
|
228
|
-
|----------|------|
|
|
229
|
-
| `Dropdown.Trigger` | 드롭다운 트리거 |
|
|
230
|
-
| `Dropdown.Content` | 드롭다운 콘텐츠 |
|
|
231
|
-
|
|
232
|
-
---
|
|
233
|
-
|
|
234
|
-
## Collapse
|
|
235
|
-
|
|
236
|
-
접기/펼치기 (아코디언).
|
|
237
|
-
|
|
238
|
-
```tsx
|
|
239
|
-
import { Collapse } from "@simplysm/solid";
|
|
240
|
-
|
|
241
|
-
<Button aria-expanded={expanded()} onClick={() => setExpanded(!expanded())}>
|
|
242
|
-
토글
|
|
243
|
-
</Button>
|
|
244
|
-
<Collapse open={expanded()}>
|
|
245
|
-
<div>접힌 내용</div>
|
|
246
|
-
</Collapse>
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
| Prop | 타입 | 기본값 | 설명 |
|
|
250
|
-
|------|------|--------|------|
|
|
251
|
-
| `open` | `boolean` | `false` | 열림 상태 |
|
|
252
|
-
|
|
253
|
-
`<div>` HTML 속성을 모두 상속한다. 높이 애니메이션이 자동 적용된다.
|
|
254
|
-
|
|
255
|
-
---
|
|
256
|
-
|
|
257
|
-
## Tabs
|
|
258
|
-
|
|
259
|
-
탭 전환.
|
|
260
|
-
|
|
261
|
-
```tsx
|
|
262
|
-
import { Tabs } from "@simplysm/solid";
|
|
263
|
-
|
|
264
|
-
<Tabs value={tab()} onValueChange={setTab}>
|
|
265
|
-
<Tabs.Tab value="info">정보</Tabs.Tab>
|
|
266
|
-
<Tabs.Tab value="settings">설정</Tabs.Tab>
|
|
267
|
-
</Tabs>
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
| Prop (Tabs) | 타입 | 설명 |
|
|
271
|
-
|------------|------|------|
|
|
272
|
-
| `value` | `string` | 선택된 탭 값 |
|
|
273
|
-
| `onValueChange` | `(v: string) => void` | 변경 콜백 |
|
|
274
|
-
| `size` | `ComponentSize` | 크기 |
|
|
275
|
-
|
|
276
|
-
| Prop (Tabs.Tab) | 타입 | 설명 |
|
|
277
|
-
|-----------------|------|------|
|
|
278
|
-
| `value` | `string` | 탭 식별 값 |
|
|
279
|
-
| `disabled` | `boolean` | 비활성화 |
|
|
280
|
-
|
|
281
|
-
---
|
|
282
|
-
|
|
283
|
-
## Notification
|
|
284
|
-
|
|
285
|
-
알림 시스템. `NotificationProvider`로 감싸고 `useNotification()` 훅으로 사용.
|
|
286
|
-
|
|
287
|
-
```tsx
|
|
288
|
-
import { NotificationProvider, useNotification, NotificationBell, NotificationBanner } from "@simplysm/solid";
|
|
289
|
-
|
|
290
|
-
// 프로바이더 설정
|
|
291
|
-
<NotificationProvider>
|
|
292
|
-
<NotificationBanner />
|
|
293
|
-
<NotificationBell />
|
|
294
|
-
<App />
|
|
295
|
-
</NotificationProvider>
|
|
296
|
-
|
|
297
|
-
// 사용
|
|
298
|
-
const noti = useNotification();
|
|
299
|
-
|
|
300
|
-
noti.success("저장 완료", "데이터가 성공적으로 저장되었습니다.");
|
|
301
|
-
noti.danger("오류", "서버 연결에 실패했습니다.");
|
|
302
|
-
noti.info("안내", "새 버전이 있습니다.");
|
|
303
|
-
noti.warning("경고", "저장되지 않은 변경사항이 있습니다.");
|
|
304
|
-
|
|
305
|
-
// 에러 자동 처리
|
|
306
|
-
noti.error(err, "작업 실패");
|
|
307
|
-
|
|
308
|
-
// 업데이트
|
|
309
|
-
const id = noti.info("업로드 중...");
|
|
310
|
-
noti.update(id, { message: "업로드 완료!" });
|
|
311
|
-
|
|
312
|
-
// 액션 버튼 포함 알림
|
|
313
|
-
noti.info("업데이트 가능", "새 버전이 있습니다.", {
|
|
314
|
-
action: {
|
|
315
|
-
label: "새로고침",
|
|
316
|
-
onClick: () => window.location.reload(),
|
|
317
|
-
},
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
// 읽음 처리
|
|
321
|
-
noti.markAsRead(id);
|
|
322
|
-
noti.markAllAsRead();
|
|
323
|
-
noti.clear();
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
---
|
|
327
|
-
|
|
328
|
-
## Busy
|
|
329
|
-
|
|
330
|
-
로딩 오버레이. 중첩 호출 지원.
|
|
331
|
-
|
|
332
|
-
```tsx
|
|
333
|
-
import { BusyProvider, useBusy, BusyContainer } from "@simplysm/solid";
|
|
334
|
-
|
|
335
|
-
<BusyProvider variant="spinner">
|
|
336
|
-
<App />
|
|
337
|
-
</BusyProvider>
|
|
338
|
-
|
|
339
|
-
const busy = useBusy();
|
|
340
|
-
|
|
341
|
-
busy.show("로딩 중...");
|
|
342
|
-
// ... 작업 ...
|
|
343
|
-
busy.hide();
|
|
344
|
-
|
|
345
|
-
// 프로그레스 바
|
|
346
|
-
busy.show("업로드 중...");
|
|
347
|
-
busy.setProgress(50); // 50%
|
|
348
|
-
busy.setProgress(100);
|
|
349
|
-
busy.hide();
|
|
350
|
-
```
|
|
351
|
-
|
|
352
|
-
### BusyContainer
|
|
353
|
-
|
|
354
|
-
로컬 영역에 로딩 오버레이를 표시한다.
|
|
355
|
-
|
|
356
|
-
```tsx
|
|
357
|
-
<BusyContainer busy={isLoading()} variant="bar">
|
|
358
|
-
<div>컨텐츠</div>
|
|
359
|
-
</BusyContainer>
|
|
360
|
-
```
|
|
361
|
-
|
|
362
|
-
---
|
|
363
|
-
|
|
364
|
-
## Progress
|
|
365
|
-
|
|
366
|
-
프로그레스 바.
|
|
367
|
-
|
|
368
|
-
```tsx
|
|
369
|
-
import { Progress } from "@simplysm/solid";
|
|
370
|
-
|
|
371
|
-
<Progress value={progress()} />
|
|
372
|
-
<Progress value={75} theme="success" />
|
|
373
|
-
|
|
374
|
-
// 커스텀 콘텐츠
|
|
375
|
-
<Progress value={50} theme="primary" size="lg">
|
|
376
|
-
<span>50% 완료</span>
|
|
377
|
-
</Progress>
|
|
378
|
-
```
|
|
379
|
-
|
|
380
|
-
| Prop | 타입 | 기본값 | 설명 |
|
|
381
|
-
|------|------|--------|------|
|
|
382
|
-
| `value` | `number` | (필수) | 진행률 (0-100) |
|
|
383
|
-
| `theme` | `SemanticTheme` | `"primary"` | 색상 테마 |
|
|
384
|
-
| `size` | `ComponentSize` | `"md"` | 크기 |
|
|
385
|
-
| `inset` | `boolean` | `false` | 테두리 없음 |
|
|
386
|
-
|
|
387
|
-
`<div>` HTML 속성을 모두 상속한다. children이 있으면 퍼센트 텍스트 대신 커스텀 콘텐츠를 표시한다.
|
|
388
|
-
|
|
389
|
-
---
|
|
390
|
-
|
|
391
|
-
## Print
|
|
392
|
-
|
|
393
|
-
인쇄 기능. `PrintProvider`로 감싸고 `usePrint()` 훅으로 사용.
|
|
394
|
-
|
|
395
|
-
```tsx
|
|
396
|
-
import { PrintProvider, usePrint } from "@simplysm/solid";
|
|
397
|
-
|
|
398
|
-
<PrintProvider>
|
|
399
|
-
<App />
|
|
400
|
-
</PrintProvider>
|
|
401
|
-
|
|
402
|
-
const print = usePrint();
|
|
403
|
-
// print 호출로 인쇄 다이얼로그 표시
|
|
404
|
-
```
|