@bigtablet/design-system 3.5.0 → 3.6.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.
- package/dist/index.css +3018 -2877
- package/dist/index.d.ts +866 -788
- package/dist/index.js +2572 -2272
- package/package.json +8 -23
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as React$1 from 'react';
|
|
2
|
+
import { Ref } from 'react';
|
|
2
3
|
import * as _react_spring_web from '@react-spring/web';
|
|
3
4
|
import { LucideProps, LucideIcon } from 'lucide-react';
|
|
4
5
|
export { LucideIcon, LucideProps } from 'lucide-react';
|
|
@@ -195,6 +196,69 @@ interface BadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
|
|
|
195
196
|
*/
|
|
196
197
|
declare const Badge: ({ variant, shape, size, appearance, count, max, className, children, ...props }: BadgeProps) => React$1.JSX.Element;
|
|
197
198
|
|
|
199
|
+
interface EmptyStateProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
|
|
200
|
+
/** 일러스트 영역 (아이콘/이미지 등) */
|
|
201
|
+
illustration?: React$1.ReactNode;
|
|
202
|
+
/** 제목 */
|
|
203
|
+
title?: React$1.ReactNode;
|
|
204
|
+
/** 보조 설명 */
|
|
205
|
+
description?: React$1.ReactNode;
|
|
206
|
+
/** 액션 영역 (Button 등) */
|
|
207
|
+
action?: React$1.ReactNode;
|
|
208
|
+
/** 크기 (기본 "md") */
|
|
209
|
+
size?: "sm" | "md" | "lg";
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* 빈 상태 표시 - 데이터 없음, 검색 결과 없음, 시작 가이드 등.
|
|
213
|
+
*
|
|
214
|
+
* @example
|
|
215
|
+
* ```tsx
|
|
216
|
+
* <EmptyState
|
|
217
|
+
* illustration={<InboxIcon size={64} />}
|
|
218
|
+
* title="받은 메일이 없습니다"
|
|
219
|
+
* description="새 메일이 오면 여기 표시됩니다."
|
|
220
|
+
* action={<Button>새 메일 작성</Button>}
|
|
221
|
+
* />
|
|
222
|
+
* ```
|
|
223
|
+
*/
|
|
224
|
+
declare const EmptyState: ({ illustration, title, description, action, size, className, ...props }: EmptyStateProps) => React$1.JSX.Element;
|
|
225
|
+
|
|
226
|
+
type ErrorStateVariant = "page" | "widget";
|
|
227
|
+
interface ErrorStateProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
|
|
228
|
+
/** 제목 (기본 "문제가 발생했습니다") */
|
|
229
|
+
title?: React$1.ReactNode;
|
|
230
|
+
/** 보조 설명 */
|
|
231
|
+
description?: React$1.ReactNode;
|
|
232
|
+
/** 아이콘/일러스트 (미지정 시 기본 경고 아이콘. `null` 로 숨김) */
|
|
233
|
+
icon?: React$1.ReactNode;
|
|
234
|
+
/** 액션 영역 (재시도 버튼 등) */
|
|
235
|
+
action?: React$1.ReactNode;
|
|
236
|
+
/**
|
|
237
|
+
* 레이아웃 모드 (기본 "page").
|
|
238
|
+
* - `page`: 전체 화면/영역 채움 - error boundary fallback. 큰 아이콘 + 넉넉한 패딩 + min-height.
|
|
239
|
+
* - `widget`: 인라인 컴팩트 - 위젯/카드 내부 error fallback. 작은 아이콘 + 좁은 패딩.
|
|
240
|
+
*/
|
|
241
|
+
variant?: ErrorStateVariant;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* 에러 상태 표시 - error boundary / 데이터 로드 실패 / 위젯 에러 fallback.
|
|
245
|
+
* `EmptyState` 의 형제. `status-error` 토큰 사용 (하드코딩 없음).
|
|
246
|
+
*
|
|
247
|
+
* @example
|
|
248
|
+
* ```tsx
|
|
249
|
+
* // 페이지 전체 (error boundary)
|
|
250
|
+
* <ErrorState
|
|
251
|
+
* title="페이지를 불러오지 못했습니다"
|
|
252
|
+
* description="잠시 후 다시 시도해 주세요."
|
|
253
|
+
* action={<Button onClick={retry}>다시 시도</Button>}
|
|
254
|
+
* />
|
|
255
|
+
*
|
|
256
|
+
* // 위젯 인라인
|
|
257
|
+
* <ErrorState variant="widget" title="불러오기 실패" action={<Button size="sm" onClick={retry}>재시도</Button>} />
|
|
258
|
+
* ```
|
|
259
|
+
*/
|
|
260
|
+
declare const ErrorState: ({ title, description, icon, action, variant, className, ...props }: ErrorStateProps) => React$1.JSX.Element;
|
|
261
|
+
|
|
198
262
|
interface BottomNavProps extends Omit<React$1.HTMLAttributes<HTMLElement>, "onChange"> {
|
|
199
263
|
/** 스크린 리더 레이블 (기본 "주요 메뉴") */
|
|
200
264
|
ariaLabel?: string;
|
|
@@ -279,69 +343,6 @@ interface BreadcrumbProps extends React$1.HTMLAttributes<HTMLElement> {
|
|
|
279
343
|
*/
|
|
280
344
|
declare const Breadcrumb: ({ items, separator, className, ...props }: BreadcrumbProps) => React$1.JSX.Element;
|
|
281
345
|
|
|
282
|
-
interface EmptyStateProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
|
|
283
|
-
/** 일러스트 영역 (아이콘/이미지 등) */
|
|
284
|
-
illustration?: React$1.ReactNode;
|
|
285
|
-
/** 제목 */
|
|
286
|
-
title?: React$1.ReactNode;
|
|
287
|
-
/** 보조 설명 */
|
|
288
|
-
description?: React$1.ReactNode;
|
|
289
|
-
/** 액션 영역 (Button 등) */
|
|
290
|
-
action?: React$1.ReactNode;
|
|
291
|
-
/** 크기 (기본 "md") */
|
|
292
|
-
size?: "sm" | "md" | "lg";
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* 빈 상태 표시 - 데이터 없음, 검색 결과 없음, 시작 가이드 등.
|
|
296
|
-
*
|
|
297
|
-
* @example
|
|
298
|
-
* ```tsx
|
|
299
|
-
* <EmptyState
|
|
300
|
-
* illustration={<InboxIcon size={64} />}
|
|
301
|
-
* title="받은 메일이 없습니다"
|
|
302
|
-
* description="새 메일이 오면 여기 표시됩니다."
|
|
303
|
-
* action={<Button>새 메일 작성</Button>}
|
|
304
|
-
* />
|
|
305
|
-
* ```
|
|
306
|
-
*/
|
|
307
|
-
declare const EmptyState: ({ illustration, title, description, action, size, className, ...props }: EmptyStateProps) => React$1.JSX.Element;
|
|
308
|
-
|
|
309
|
-
type ErrorStateVariant = "page" | "widget";
|
|
310
|
-
interface ErrorStateProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
|
|
311
|
-
/** 제목 (기본 "문제가 발생했습니다") */
|
|
312
|
-
title?: React$1.ReactNode;
|
|
313
|
-
/** 보조 설명 */
|
|
314
|
-
description?: React$1.ReactNode;
|
|
315
|
-
/** 아이콘/일러스트 (미지정 시 기본 경고 아이콘. `null` 로 숨김) */
|
|
316
|
-
icon?: React$1.ReactNode;
|
|
317
|
-
/** 액션 영역 (재시도 버튼 등) */
|
|
318
|
-
action?: React$1.ReactNode;
|
|
319
|
-
/**
|
|
320
|
-
* 레이아웃 모드 (기본 "page").
|
|
321
|
-
* - `page`: 전체 화면/영역 채움 - error boundary fallback. 큰 아이콘 + 넉넉한 패딩 + min-height.
|
|
322
|
-
* - `widget`: 인라인 컴팩트 - 위젯/카드 내부 error fallback. 작은 아이콘 + 좁은 패딩.
|
|
323
|
-
*/
|
|
324
|
-
variant?: ErrorStateVariant;
|
|
325
|
-
}
|
|
326
|
-
/**
|
|
327
|
-
* 에러 상태 표시 - error boundary / 데이터 로드 실패 / 위젯 에러 fallback.
|
|
328
|
-
* `EmptyState` 의 형제. `status-error` 토큰 사용 (하드코딩 없음).
|
|
329
|
-
*
|
|
330
|
-
* @example
|
|
331
|
-
* ```tsx
|
|
332
|
-
* // 페이지 전체 (error boundary)
|
|
333
|
-
* <ErrorState
|
|
334
|
-
* title="페이지를 불러오지 못했습니다"
|
|
335
|
-
* description="잠시 후 다시 시도해 주세요."
|
|
336
|
-
* action={<Button onClick={retry}>다시 시도</Button>}
|
|
337
|
-
* />
|
|
338
|
-
*
|
|
339
|
-
* // 위젯 인라인
|
|
340
|
-
* <ErrorState variant="widget" title="불러오기 실패" action={<Button size="sm" onClick={retry}>재시도</Button>} />
|
|
341
|
-
* ```
|
|
342
|
-
*/
|
|
343
|
-
declare const ErrorState: ({ title, description, icon, action, variant, className, ...props }: ErrorStateProps) => React$1.JSX.Element;
|
|
344
|
-
|
|
345
346
|
interface MenuItem {
|
|
346
347
|
key: string;
|
|
347
348
|
label: React$1.ReactNode;
|
|
@@ -1089,109 +1090,6 @@ declare const zIndex: {
|
|
|
1089
1090
|
readonly level5: 1000;
|
|
1090
1091
|
};
|
|
1091
1092
|
|
|
1092
|
-
type AlertVariant = "info" | "success" | "warning" | "error";
|
|
1093
|
-
type AlertActionsAlign = "left" | "center" | "right";
|
|
1094
|
-
interface AlertOptions {
|
|
1095
|
-
/** 알림 스타일 변형 (기본값: "info") */
|
|
1096
|
-
variant?: AlertVariant;
|
|
1097
|
-
/** 알림 제목 */
|
|
1098
|
-
title?: React$1.ReactNode;
|
|
1099
|
-
/** 알림 본문 메시지 */
|
|
1100
|
-
message?: React$1.ReactNode;
|
|
1101
|
-
/** 확인 버튼 텍스트 (기본값: "확인") */
|
|
1102
|
-
confirmText?: string;
|
|
1103
|
-
/** 취소 버튼 텍스트 (기본값: "취소") */
|
|
1104
|
-
cancelText?: string;
|
|
1105
|
-
/** 취소 버튼 표시 여부 (기본값: false) */
|
|
1106
|
-
showCancel?: boolean;
|
|
1107
|
-
/**
|
|
1108
|
-
* Destructive 액션 여부. true 시 확인 버튼이 빨간 강조(danger)로 표시되고
|
|
1109
|
-
* 취소 버튼은 outline으로 유지. 위험성을 시각적으로 표현해 사용자가 인지 가능.
|
|
1110
|
-
* (Material/shadcn/Radix 표준 패턴)
|
|
1111
|
-
* @default false
|
|
1112
|
-
*/
|
|
1113
|
-
destructive?: boolean;
|
|
1114
|
-
/** 액션 버튼 정렬 (기본값: "right") */
|
|
1115
|
-
actionsAlign?: AlertActionsAlign;
|
|
1116
|
-
/** 변형 아이콘 표시 여부 (기본값: false). 원하면 명시적으로 켜기 */
|
|
1117
|
-
showIcon?: boolean;
|
|
1118
|
-
/** 확인 버튼 클릭 시 호출되는 콜백 */
|
|
1119
|
-
onConfirm?: () => void;
|
|
1120
|
-
/** 취소 버튼 클릭 시 호출되는 콜백 */
|
|
1121
|
-
onCancel?: () => void;
|
|
1122
|
-
/**
|
|
1123
|
-
* 오버레이 클릭으로 닫기 허용 여부 (기본값: true).
|
|
1124
|
-
* destructive 확인처럼 실수 닫힘을 막아야 하면 false 로.
|
|
1125
|
-
*/
|
|
1126
|
-
closeOnOverlay?: boolean;
|
|
1127
|
-
}
|
|
1128
|
-
interface AlertContextValue {
|
|
1129
|
-
showAlert: (options: AlertOptions) => void;
|
|
1130
|
-
}
|
|
1131
|
-
declare const useAlert: () => AlertContextValue;
|
|
1132
|
-
declare const AlertProvider: React$1.FC<{
|
|
1133
|
-
children: React$1.ReactNode;
|
|
1134
|
-
}>;
|
|
1135
|
-
|
|
1136
|
-
type ButtonVariant = "filled" | "tonal" | "outline" | "text";
|
|
1137
|
-
type ButtonSize = "sm" | "md" | "lg" | "xl";
|
|
1138
|
-
/** button/anchor 공통 스타일·콘텐츠 props */
|
|
1139
|
-
interface ButtonBaseProps {
|
|
1140
|
-
/** 버튼 스타일 변형 (기본값: "filled") */
|
|
1141
|
-
variant?: ButtonVariant;
|
|
1142
|
-
/** 버튼 크기 (기본값: "md") */
|
|
1143
|
-
size?: ButtonSize;
|
|
1144
|
-
/** 버튼 앞에 표시할 아이콘 */
|
|
1145
|
-
leadingIcon?: React$1.ReactNode;
|
|
1146
|
-
/** 버튼 뒤에 표시할 아이콘 */
|
|
1147
|
-
trailingIcon?: React$1.ReactNode;
|
|
1148
|
-
/** 버튼이 컨테이너의 전체 너비를 차지할지 여부 */
|
|
1149
|
-
fullWidth?: boolean;
|
|
1150
|
-
/** border-radius 토큰 (기본값: "full") */
|
|
1151
|
-
radius?: "none" | "xs" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1152
|
-
/**
|
|
1153
|
-
* 위험한 액션 (삭제/취소 등) - 빨간 강조.
|
|
1154
|
-
* filled: 빨간 bg, outline: 빨간 텍스트/border, tonal: 빨간 wash.
|
|
1155
|
-
*/
|
|
1156
|
-
danger?: boolean;
|
|
1157
|
-
/**
|
|
1158
|
-
* 비활성화. button 은 native `disabled`, anchor 는 `aria-disabled`+`tabIndex=-1`+
|
|
1159
|
-
* 클릭 차단으로 처리(anchor 엔 native disabled 가 없으므로).
|
|
1160
|
-
*/
|
|
1161
|
-
disabled?: boolean;
|
|
1162
|
-
}
|
|
1163
|
-
/** `<button>` 으로 렌더링 (기본) */
|
|
1164
|
-
interface ButtonAsButton extends ButtonBaseProps, Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, keyof ButtonBaseProps> {
|
|
1165
|
-
/** 렌더링할 요소 (기본값: "button") */
|
|
1166
|
-
as?: "button";
|
|
1167
|
-
/** button 렌더 시엔 href 를 허용하지 않음 (href 만 주면 anchor 로 분기되도록) */
|
|
1168
|
-
href?: never;
|
|
1169
|
-
/** 루트 button 요소 ref (React 19 ref-as-prop) */
|
|
1170
|
-
ref?: React$1.Ref<HTMLButtonElement>;
|
|
1171
|
-
}
|
|
1172
|
-
/** `<a>` 로 렌더링 - 링크 시맨틱(우클릭 새 탭·미들클릭·SR 링크 안내) */
|
|
1173
|
-
interface ButtonAsAnchor extends ButtonBaseProps, Omit<React$1.AnchorHTMLAttributes<HTMLAnchorElement>, keyof ButtonBaseProps> {
|
|
1174
|
-
/** anchor 로 렌더링 - 생략 가능(href 만 줘도 anchor 로 분기) */
|
|
1175
|
-
as?: "a";
|
|
1176
|
-
/** 링크 대상 (anchor 필수) */
|
|
1177
|
-
href: string;
|
|
1178
|
-
/** 루트 anchor 요소 ref (React 19 ref-as-prop) */
|
|
1179
|
-
ref?: React$1.Ref<HTMLAnchorElement>;
|
|
1180
|
-
}
|
|
1181
|
-
/**
|
|
1182
|
-
* Button props - `as`/`href` 에 따라 button 또는 anchor 로 렌더링되는 discriminated union.
|
|
1183
|
-
* `as` 미지정 시 기본 `<button>` (기존 동작과 100% 호환).
|
|
1184
|
-
*/
|
|
1185
|
-
type ButtonProps = ButtonAsButton | ButtonAsAnchor;
|
|
1186
|
-
/**
|
|
1187
|
-
* 버튼을 렌더링한다.
|
|
1188
|
-
* Figma DS 기준 4가지 variant(filled/tonal/outline/text)와 4가지 size(sm/md/lg/xl)를 지원한다.
|
|
1189
|
-
* `as="a"` (또는 `href` 지정) 시 동일 스타일의 anchor 로 렌더링한다.
|
|
1190
|
-
* @param props 버튼 속성
|
|
1191
|
-
* @returns 렌더링된 button 또는 anchor 요소
|
|
1192
|
-
*/
|
|
1193
|
-
declare const Button: (props: ButtonProps) => React$1.JSX.Element;
|
|
1194
|
-
|
|
1195
1093
|
type CardVariant = "default" | "accent" | "glass" | "outlined";
|
|
1196
1094
|
type CardFooterAlign = "start" | "between" | "end";
|
|
1197
1095
|
interface CardProps extends React$1.HTMLAttributes<HTMLDivElement> {
|
|
@@ -1229,27 +1127,6 @@ interface CardProps extends React$1.HTMLAttributes<HTMLDivElement> {
|
|
|
1229
1127
|
*/
|
|
1230
1128
|
declare const Card: ({ heading, headingAs: HeadingTag, shadow, padding, bordered, variant, interactive, footer, footerAlign, ref, className, children, ...props }: CardProps) => React$1.JSX.Element;
|
|
1231
1129
|
|
|
1232
|
-
interface CheckboxProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "size"> {
|
|
1233
|
-
/** 체크박스 옆에 표시할 라벨 */
|
|
1234
|
-
label?: React$1.ReactNode;
|
|
1235
|
-
/** 중간 선택(indeterminate) 상태 여부 */
|
|
1236
|
-
indeterminate?: boolean;
|
|
1237
|
-
/** 에러 상태 여부 */
|
|
1238
|
-
error?: boolean;
|
|
1239
|
-
/** 입력 요소 참조 */
|
|
1240
|
-
ref?: React$1.Ref<HTMLInputElement>;
|
|
1241
|
-
}
|
|
1242
|
-
/**
|
|
1243
|
-
* 체크박스를 렌더링한다.
|
|
1244
|
-
* Figma DS 기준 3가지 타입(Unselected/Checked/Indeterminate)과 state layer overlay를 지원한다.
|
|
1245
|
-
* @param props 체크박스 속성
|
|
1246
|
-
* @returns 렌더링된 체크박스 UI
|
|
1247
|
-
*/
|
|
1248
|
-
declare const Checkbox: {
|
|
1249
|
-
({ label, indeterminate, error, className, ref, ...props }: CheckboxProps): React$1.JSX.Element;
|
|
1250
|
-
displayName: string;
|
|
1251
|
-
};
|
|
1252
|
-
|
|
1253
1130
|
type ChipType = "basic" | "input" | "filter" | "static";
|
|
1254
1131
|
type ChipSize = "sm" | "md";
|
|
1255
1132
|
type ChipTone = "default" | "accent" | "info" | "success" | "warning" | "error";
|
|
@@ -1281,63 +1158,6 @@ interface ChipProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onClic
|
|
|
1281
1158
|
}
|
|
1282
1159
|
declare const Chip: ({ type, size, tone, label, selected, removable, disabled, open, leadingIcon, onClick, onRemove, removeLabel, className, ...props }: ChipProps) => React$1.JSX.Element;
|
|
1283
1160
|
|
|
1284
|
-
type DatePickerMode = "year-month" | "year-month-day";
|
|
1285
|
-
type SelectableRange = "all" | "until-today";
|
|
1286
|
-
interface DatePickerBaseProps {
|
|
1287
|
-
/** 데이트 피커 위에 표시할 라벨 텍스트 */
|
|
1288
|
-
label?: string;
|
|
1289
|
-
/** 제어형 날짜 값 ("YYYY-MM" 또는 "YYYY-MM-DD" 형식) */
|
|
1290
|
-
value?: string;
|
|
1291
|
-
/** 선택 모드 (기본값: "year-month-day") */
|
|
1292
|
-
mode?: DatePickerMode;
|
|
1293
|
-
/** 연도 선택 범위 시작 (기본값: 1950) */
|
|
1294
|
-
startYear?: number;
|
|
1295
|
-
/** 연도 선택 범위 끝 (기본값: 현재 연도 + 10) */
|
|
1296
|
-
endYear?: number;
|
|
1297
|
-
/** 선택 가능한 최소 날짜 ("YYYY-MM-DD" 형식) */
|
|
1298
|
-
minDate?: string;
|
|
1299
|
-
/** 선택 가능한 날짜 범위 ("all": 제한 없음, "until-today": 오늘까지) */
|
|
1300
|
-
selectableRange?: SelectableRange;
|
|
1301
|
-
/** 비활성화 여부 */
|
|
1302
|
-
disabled?: boolean;
|
|
1303
|
-
/** 데이트 피커가 컨테이너의 전체 너비를 차지할지 여부 */
|
|
1304
|
-
fullWidth?: boolean;
|
|
1305
|
-
/**
|
|
1306
|
-
* 데이트 피커의 커스텀 너비
|
|
1307
|
-
* @deprecated `fullWidth` 사용 또는 CSS로 처리
|
|
1308
|
-
*/
|
|
1309
|
-
width?: number | string;
|
|
1310
|
-
/** 연도 select의 라벨/플레이스홀더 (기본값: "Year") */
|
|
1311
|
-
yearLabel?: string;
|
|
1312
|
-
/** 월 select의 라벨/플레이스홀더 (기본값: "Month") */
|
|
1313
|
-
monthLabel?: string;
|
|
1314
|
-
/** 일 select의 라벨/플레이스홀더 (기본값: "Day") */
|
|
1315
|
-
dayLabel?: string;
|
|
1316
|
-
/**
|
|
1317
|
-
* minDate 설정 시 스크린리더에 전달할 안내 문구 포맷.
|
|
1318
|
-
* `{date}` 자리에 minDate 값이 치환됩니다. (기본값: "Minimum date: {date}")
|
|
1319
|
-
*/
|
|
1320
|
-
minDateSrFormat?: string;
|
|
1321
|
-
/**
|
|
1322
|
-
* selectableRange="until-today" 설정 시 스크린리더에 전달할 안내 문구.
|
|
1323
|
-
* (기본값: "Selectable up to today")
|
|
1324
|
-
*/
|
|
1325
|
-
selectableRangeUntilTodaySrText?: string;
|
|
1326
|
-
}
|
|
1327
|
-
type DatePickerCallbacks = {
|
|
1328
|
-
onValueChange: (value: string) => void;
|
|
1329
|
-
onChange?: (value: string) => void;
|
|
1330
|
-
} | {
|
|
1331
|
-
onValueChange?: (value: string) => void;
|
|
1332
|
-
onChange: (value: string) => void;
|
|
1333
|
-
};
|
|
1334
|
-
type DatePickerProps = DatePickerBaseProps & DatePickerCallbacks;
|
|
1335
|
-
/**
|
|
1336
|
-
* 연/월/일 선택형 데이트 피커를 렌더링한다.
|
|
1337
|
-
* 내부적으로 DS Dropdown 3개를 조합해 드롭다운 UX 일관성을 유지한다.
|
|
1338
|
-
*/
|
|
1339
|
-
declare const DatePicker: ({ label, value, onValueChange, onChange, mode, startYear, endYear: endYearProp, minDate, selectableRange, disabled, fullWidth, width, yearLabel, monthLabel, dayLabel, minDateSrFormat, selectableRangeUntilTodaySrText, }: DatePickerProps) => React$1.JSX.Element;
|
|
1340
|
-
|
|
1341
1161
|
interface DividerProps extends React$1.HTMLAttributes<HTMLHRElement> {
|
|
1342
1162
|
/** 구분선 두께 (기본값: "standard") */
|
|
1343
1163
|
weight?: "standard" | "heavy";
|
|
@@ -1350,164 +1170,6 @@ interface DividerProps extends React$1.HTMLAttributes<HTMLHRElement> {
|
|
|
1350
1170
|
*/
|
|
1351
1171
|
declare const Divider: ({ weight, className, ...props }: DividerProps) => React$1.JSX.Element;
|
|
1352
1172
|
|
|
1353
|
-
/** Drawer 가 미끄러져 들어오는 방향 (top 은 범위 외) */
|
|
1354
|
-
type DrawerPlacement = "left" | "right" | "bottom";
|
|
1355
|
-
interface DrawerProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title" | "onClick" | "onKeyDown" | "role"> {
|
|
1356
|
-
/** 드로어 열림 여부 */
|
|
1357
|
-
open: boolean;
|
|
1358
|
-
/** 드로어 닫기 콜백 */
|
|
1359
|
-
onClose?: () => void;
|
|
1360
|
-
/** 슬라이드 방향 (기본값: "right") */
|
|
1361
|
-
placement?: DrawerPlacement;
|
|
1362
|
-
/** 패널 크기 - left/right 는 너비, bottom 은 높이 (기본값: 360). number ⇒ px */
|
|
1363
|
-
size?: number | string;
|
|
1364
|
-
/** 드로어 제목 (헤더 h2, heading_small_bold) */
|
|
1365
|
-
title?: React$1.ReactNode;
|
|
1366
|
-
/** 하단 액션 영역 (Button들). 미지정 시 footer 영역 자체가 안 보임 */
|
|
1367
|
-
footer?: React$1.ReactNode;
|
|
1368
|
-
/** 오버레이 클릭 시 닫기 여부 (기본값: true) */
|
|
1369
|
-
closeOnOverlay?: boolean;
|
|
1370
|
-
/** 우상단 X 닫기 아이콘 표시 여부 (기본값: true) */
|
|
1371
|
-
showCloseIcon?: boolean;
|
|
1372
|
-
/** X 닫기 버튼 접근성 레이블 (기본값: "닫기") */
|
|
1373
|
-
closeLabel?: string;
|
|
1374
|
-
/** 드로어 접근성 레이블 (title 없을 때 사용, 기본값: "Dialog") */
|
|
1375
|
-
ariaLabel?: string;
|
|
1376
|
-
}
|
|
1377
|
-
/**
|
|
1378
|
-
* 화면 가장자리에서 미끄러져 들어오는 패널(Drawer)을 렌더링한다.
|
|
1379
|
-
* react-spring 기반 방향별 슬라이드 진입/퇴출 + 포커스 트랩 + 바디 스크롤 잠금.
|
|
1380
|
-
*
|
|
1381
|
-
* @param props 드로어 속성
|
|
1382
|
-
* @returns 열림 상태일 때 렌더링된 드로어, 닫힘 상태면 null
|
|
1383
|
-
*/
|
|
1384
|
-
declare const Drawer: {
|
|
1385
|
-
({ open, onClose, placement, size, title, footer, closeOnOverlay, showCloseIcon, closeLabel, ariaLabel, children, className, ...props }: DrawerProps): React$1.ReactPortal | null;
|
|
1386
|
-
displayName: string;
|
|
1387
|
-
};
|
|
1388
|
-
|
|
1389
|
-
type DropdownSize = "sm" | "md" | "lg";
|
|
1390
|
-
interface DropdownOption {
|
|
1391
|
-
value: string;
|
|
1392
|
-
label: string;
|
|
1393
|
-
disabled?: boolean;
|
|
1394
|
-
/** 옵션 아래에 표시할 보조 텍스트 */
|
|
1395
|
-
supportingText?: string;
|
|
1396
|
-
/** 옵션 왼쪽 아이콘 */
|
|
1397
|
-
leadingIcon?: React$1.ReactNode;
|
|
1398
|
-
/** 옵션 오른쪽 아이콘 (미지정 시 선택 상태에 체크 아이콘 자동 표시) */
|
|
1399
|
-
trailingIcon?: React$1.ReactNode;
|
|
1400
|
-
/** 아이템 아래 구분선 표시 여부 */
|
|
1401
|
-
showDivider?: boolean;
|
|
1402
|
-
}
|
|
1403
|
-
/** single/multiple 공통 속성 */
|
|
1404
|
-
interface DropdownCommonProps {
|
|
1405
|
-
/** 드롭다운 요소의 id (미입력 시 자동 생성) */
|
|
1406
|
-
id?: string;
|
|
1407
|
-
/** 드롭다운 위에 표시할 플로팅 라벨 텍스트 */
|
|
1408
|
-
label?: string;
|
|
1409
|
-
/** 선택 전 표시할 플레이스홀더 (기본값: "Select…") */
|
|
1410
|
-
placeholder?: string;
|
|
1411
|
-
/** 표시할 옵션 목록 */
|
|
1412
|
-
options: DropdownOption[];
|
|
1413
|
-
/** 비활성화 여부 */
|
|
1414
|
-
disabled?: boolean;
|
|
1415
|
-
/** 드롭다운 크기 (기본값: "md") */
|
|
1416
|
-
size?: DropdownSize;
|
|
1417
|
-
/**
|
|
1418
|
-
* @deprecated Dropdown 은 이제 항상 부모 너비를 채웁니다. 인라인 사용 시 부모를 `inline-block + width` 로 감싸세요.
|
|
1419
|
-
*/
|
|
1420
|
-
fullWidth?: boolean;
|
|
1421
|
-
/** 루트 요소에 추가할 className */
|
|
1422
|
-
className?: string;
|
|
1423
|
-
/**
|
|
1424
|
-
* @deprecated variant는 더 이상 지원되지 않습니다. Dropdown은 outline 스타일만 사용합니다.
|
|
1425
|
-
*/
|
|
1426
|
-
variant?: "outline" | "filled" | "ghost";
|
|
1427
|
-
/**
|
|
1428
|
-
* @deprecated textAlign은 더 이상 지원되지 않습니다.
|
|
1429
|
-
*/
|
|
1430
|
-
textAlign?: "left" | "center";
|
|
1431
|
-
/**
|
|
1432
|
-
* 검색 가능 여부. 활성화 시 열린 패널 상단에 검색 입력이 표시되고, 옵션 `label` 부분 일치로 필터링됩니다.
|
|
1433
|
-
* (기본값: false)
|
|
1434
|
-
*/
|
|
1435
|
-
searchable?: boolean;
|
|
1436
|
-
/** 검색 입력의 placeholder (기본값: "검색…") */
|
|
1437
|
-
searchPlaceholder?: string;
|
|
1438
|
-
/** 필터 결과가 0개일 때 표시할 텍스트 (기본값: "결과 없음") */
|
|
1439
|
-
emptyText?: string;
|
|
1440
|
-
/** 멀티 선택 요약 텍스트 (기본값: "N개 선택") */
|
|
1441
|
-
selectedSummary?: (count: number) => string;
|
|
1442
|
-
/**
|
|
1443
|
-
* 네이티브 폼 제출 참여용 name. 지정 시 선택 값이 hidden input 으로 렌더되어
|
|
1444
|
-
* `<form>` POST 에 포함됩니다 (multiple 은 같은 name 의 hidden input 반복).
|
|
1445
|
-
*/
|
|
1446
|
-
name?: string;
|
|
1447
|
-
}
|
|
1448
|
-
/** 단일 선택 (기본) */
|
|
1449
|
-
interface DropdownSingleProps extends DropdownCommonProps {
|
|
1450
|
-
/** 다중 선택 모드 (기본값: false) */
|
|
1451
|
-
multiple?: false;
|
|
1452
|
-
/** 제어형 선택 값 */
|
|
1453
|
-
value?: string | null;
|
|
1454
|
-
/** 값 변경 콜백 (canonical). 선택된 값과 전체 옵션 객체를 전달합니다. */
|
|
1455
|
-
onValueChange?: (value: string | null, option?: DropdownOption | null) => void;
|
|
1456
|
-
/** @deprecated `onValueChange` 를 사용하세요. */
|
|
1457
|
-
onChange?: (value: string | null, option?: DropdownOption | null) => void;
|
|
1458
|
-
/** 비제어형 초기 선택 값 */
|
|
1459
|
-
defaultValue?: string | null;
|
|
1460
|
-
}
|
|
1461
|
-
/** 다중 선택 */
|
|
1462
|
-
interface DropdownMultipleProps extends DropdownCommonProps {
|
|
1463
|
-
/** 다중 선택 모드 */
|
|
1464
|
-
multiple: true;
|
|
1465
|
-
/** 제어형 선택 값 목록 */
|
|
1466
|
-
value?: string[];
|
|
1467
|
-
/** 값 변경 콜백 (canonical). 선택된 값 목록과 옵션 객체 목록을 전달합니다. */
|
|
1468
|
-
onValueChange?: (values: string[], options: DropdownOption[]) => void;
|
|
1469
|
-
/** @deprecated `onValueChange` 를 사용하세요. */
|
|
1470
|
-
onChange?: (values: string[], options: DropdownOption[]) => void;
|
|
1471
|
-
/** 비제어형 초기 선택 값 목록 */
|
|
1472
|
-
defaultValue?: string[];
|
|
1473
|
-
}
|
|
1474
|
-
type DropdownProps = DropdownSingleProps | DropdownMultipleProps;
|
|
1475
|
-
/**
|
|
1476
|
-
* 드롭다운 컴포넌트를 렌더링한다.
|
|
1477
|
-
* 제어형/비제어형 상태를 지원하며, 키보드/마우스 상호작용과 정적 라벨을 관리한다.
|
|
1478
|
-
* `searchable` 로 라벨 부분 일치 검색을, `multiple` 로 다중 선택을 opt-in 할 수 있다.
|
|
1479
|
-
* @param props 드롭다운 속성
|
|
1480
|
-
* @returns 렌더링된 드롭다운 UI
|
|
1481
|
-
*/
|
|
1482
|
-
declare const Dropdown: (props: DropdownProps) => React$1.JSX.Element;
|
|
1483
|
-
|
|
1484
|
-
type FileInputVariant = "button" | "preview";
|
|
1485
|
-
interface FileInputProps extends React$1.InputHTMLAttributes<HTMLInputElement> {
|
|
1486
|
-
/** 파일 선택 버튼 라벨 / preview variant 빈 상태 텍스트 (기본값: "Choose file") */
|
|
1487
|
-
label?: string;
|
|
1488
|
-
/** 파일 선택 시 호출되는 콜백 */
|
|
1489
|
-
onFiles?: (files: FileList | null) => void;
|
|
1490
|
-
/** 입력 필드 아래에 표시할 도움말 텍스트 (예: "PDF, DOC 파일만 업로드 가능합니다") */
|
|
1491
|
-
supportingText?: string;
|
|
1492
|
-
/** 이미지 파일 선택 시 64×64 썸네일을 버튼 아래 나열 (variant="button" 전용) */
|
|
1493
|
-
preview?: boolean;
|
|
1494
|
-
/**
|
|
1495
|
-
* 표시 형태 (기본값: "button").
|
|
1496
|
-
* - `"button"`: 일반 파일 선택 버튼. `preview=true` 면 아래에 작은 썸네일 표시.
|
|
1497
|
-
* - `"preview"`: 큰 박스 안에 이미지 채움 (avatar / 이미지 업로더 패턴). 단일 이미지.
|
|
1498
|
-
*/
|
|
1499
|
-
variant?: FileInputVariant;
|
|
1500
|
-
/** variant="preview" 박스 크기 (px, 기본값: 160) */
|
|
1501
|
-
previewSize?: number;
|
|
1502
|
-
}
|
|
1503
|
-
/**
|
|
1504
|
-
* 파일 입력 컴포넌트를 렌더링한다.
|
|
1505
|
-
* 내부 input 변경을 감지해 파일 목록을 콜백으로 전달한다.
|
|
1506
|
-
* @param props 파일 입력 속성
|
|
1507
|
-
* @returns 렌더링된 파일 입력 UI
|
|
1508
|
-
*/
|
|
1509
|
-
declare const FileInput: ({ label, onFiles, supportingText, preview, variant, previewSize, className, disabled, accept, onChange, ...props }: FileInputProps) => React$1.JSX.Element;
|
|
1510
|
-
|
|
1511
1173
|
interface HeroAction {
|
|
1512
1174
|
/** 버튼 라벨 */
|
|
1513
1175
|
label: React$1.ReactNode;
|
|
@@ -1581,42 +1243,6 @@ declare const Icon: {
|
|
|
1581
1243
|
displayName: string;
|
|
1582
1244
|
};
|
|
1583
1245
|
|
|
1584
|
-
type IconButtonVariant = "standard" | "filled" | "tonal" | "outlined";
|
|
1585
|
-
type IconButtonSize = "sm" | "md";
|
|
1586
|
-
interface IconButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
1587
|
-
/** 아이콘 버튼 스타일 변형 (기본값: "standard") */
|
|
1588
|
-
variant?: IconButtonVariant;
|
|
1589
|
-
/** 아이콘 버튼 크기 (기본값: "md") */
|
|
1590
|
-
size?: IconButtonSize;
|
|
1591
|
-
/** 표시할 아이콘 */
|
|
1592
|
-
icon: React$1.ReactNode;
|
|
1593
|
-
/** 루트 button 요소 ref (React 19 ref-as-prop) */
|
|
1594
|
-
ref?: React$1.Ref<HTMLButtonElement>;
|
|
1595
|
-
}
|
|
1596
|
-
/**
|
|
1597
|
-
* 아이콘만 표시하는 버튼을 렌더링한다.
|
|
1598
|
-
* Figma DS 기준 4가지 variant(standard/filled/tonal/outlined)와 2가지 size(sm/md)를 지원한다.
|
|
1599
|
-
* @param props 아이콘 버튼 속성
|
|
1600
|
-
* @returns 렌더링된 아이콘 버튼 요소
|
|
1601
|
-
*/
|
|
1602
|
-
declare const IconButton: ({ variant, size, icon, type, ref, className, ...props }: IconButtonProps) => React$1.JSX.Element;
|
|
1603
|
-
|
|
1604
|
-
interface LinearProgressProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
1605
|
-
/** 전체 단계 수 */
|
|
1606
|
-
totalSteps: number;
|
|
1607
|
-
/** 현재 단계 (0부터 totalSteps까지) */
|
|
1608
|
-
currentStep: number;
|
|
1609
|
-
/** 접근성 레이블 (스크린 리더용) */
|
|
1610
|
-
"aria-label": string;
|
|
1611
|
-
}
|
|
1612
|
-
/**
|
|
1613
|
-
* 선형 진행 표시기를 렌더링한다.
|
|
1614
|
-
* `totalSteps + 1` 개 dot (체크포인트) + 진행 바. Dot `i` 는 `i <= currentStep` 이면 채워짐.
|
|
1615
|
-
* @param props 진행 표시기 속성
|
|
1616
|
-
* @returns 렌더링된 진행 표시기 요소
|
|
1617
|
-
*/
|
|
1618
|
-
declare const LinearProgress: ({ totalSteps, currentStep, className, ...props }: LinearProgressProps) => React$1.JSX.Element;
|
|
1619
|
-
|
|
1620
1246
|
interface ListItemProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onClick"> {
|
|
1621
1247
|
/** 오버라인 (상단 작은 글씨). 문자열 또는 노드(강조/링크/아이콘) */
|
|
1622
1248
|
overline?: React$1.ReactNode;
|
|
@@ -1683,197 +1309,6 @@ interface MediaCardProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "t
|
|
|
1683
1309
|
*/
|
|
1684
1310
|
declare const MediaCard: ({ image, imagePosition, aspectRatio, heading, headingAs: HeadingTag, eyebrow, shadow, bordered, clickable, meta, children, className, ...props }: MediaCardProps) => React$1.JSX.Element;
|
|
1685
1311
|
|
|
1686
|
-
type ModalFooterAlign = "end" | "between" | "start";
|
|
1687
|
-
interface ModalProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title" | "onClick" | "onKeyDown" | "role"> {
|
|
1688
|
-
/** 모달 열림 여부 */
|
|
1689
|
-
open: boolean;
|
|
1690
|
-
/** 모달 닫기 콜백 */
|
|
1691
|
-
onClose?: () => void;
|
|
1692
|
-
/** 오버레이 클릭 시 닫기 여부 (기본값: true) */
|
|
1693
|
-
closeOnOverlay?: boolean;
|
|
1694
|
-
/** 모달 패널 너비 (기본값: 480) */
|
|
1695
|
-
width?: number | string;
|
|
1696
|
-
/** 모달 제목 (h2, heading_large_bold) */
|
|
1697
|
-
title?: React$1.ReactNode;
|
|
1698
|
-
/** 제목 아래 본문 설명 - paragraph로 자동 wrap */
|
|
1699
|
-
description?: React$1.ReactNode;
|
|
1700
|
-
/** 하단 액션 영역 (Button들). 미지정 시 footer 영역 자체가 안 보임 */
|
|
1701
|
-
footer?: React$1.ReactNode;
|
|
1702
|
-
/** Footer 정렬 (기본값: "end"). between은 좌우 분리 패턴 (destructive 액션 등) */
|
|
1703
|
-
footerAlign?: ModalFooterAlign;
|
|
1704
|
-
/** 우상단 X 닫기 아이콘 표시 여부 (기본값: true) */
|
|
1705
|
-
showCloseIcon?: boolean;
|
|
1706
|
-
/** X 닫기 버튼 접근성 레이블 (기본값: "닫기") */
|
|
1707
|
-
closeLabel?: string;
|
|
1708
|
-
/** 모달 접근성 레이블(기본값: title 또는 "Dialog") */
|
|
1709
|
-
ariaLabel?: string;
|
|
1710
|
-
}
|
|
1711
|
-
/**
|
|
1712
|
-
* 모달을 렌더링한다.
|
|
1713
|
-
* react-spring 기반 진입/퇴출 모션 + 포커스 트랩 + 바디 스크롤 잠금.
|
|
1714
|
-
* @param props 모달 속성
|
|
1715
|
-
* @returns 열림 상태일 때 렌더링된 모달, 닫힘 상태면 null
|
|
1716
|
-
*/
|
|
1717
|
-
declare const Modal: ({ open, onClose, closeOnOverlay, width, title, description, footer, footerAlign, showCloseIcon, closeLabel, children, className, ariaLabel, ...props }: ModalProps) => React$1.ReactPortal | null;
|
|
1718
|
-
|
|
1719
|
-
interface OtpInputProps {
|
|
1720
|
-
/** OTP 자릿수 (기본값: 6) */
|
|
1721
|
-
length?: 4 | 6;
|
|
1722
|
-
/** 제어형 값 */
|
|
1723
|
-
value?: string;
|
|
1724
|
-
/** 값 변경 콜백 (canonical) */
|
|
1725
|
-
onValueChange?: (value: string) => void;
|
|
1726
|
-
/** @deprecated `onValueChange` 를 사용하세요. */
|
|
1727
|
-
onChange?: (value: string) => void;
|
|
1728
|
-
/** 에러 상태 */
|
|
1729
|
-
error?: boolean;
|
|
1730
|
-
/** 비활성화 */
|
|
1731
|
-
disabled?: boolean;
|
|
1732
|
-
/** 하단 도움말 텍스트 */
|
|
1733
|
-
supportingText?: string;
|
|
1734
|
-
/** 첫 번째 입력에 자동 포커스 */
|
|
1735
|
-
autoFocus?: boolean;
|
|
1736
|
-
/** 접근성 레이블 */
|
|
1737
|
-
ariaLabel?: string;
|
|
1738
|
-
/** 추가 className */
|
|
1739
|
-
className?: string;
|
|
1740
|
-
}
|
|
1741
|
-
/**
|
|
1742
|
-
* OTP 입력 컴포넌트를 렌더링한다.
|
|
1743
|
-
* 각 자리를 개별 입력으로 분리하고, 자동 포커스 이동·붙여넣기를 지원한다.
|
|
1744
|
-
* @param props OTP 입력 속성
|
|
1745
|
-
* @returns 렌더링된 OTP 입력 요소
|
|
1746
|
-
*/
|
|
1747
|
-
declare const OtpInput: {
|
|
1748
|
-
({ length, value, onValueChange, onChange, error, disabled, supportingText, autoFocus, ariaLabel, className, }: OtpInputProps): React$1.JSX.Element;
|
|
1749
|
-
displayName: string;
|
|
1750
|
-
};
|
|
1751
|
-
|
|
1752
|
-
interface PaginationBaseProps {
|
|
1753
|
-
/** 현재 페이지 번호 (1-based) */
|
|
1754
|
-
page: number;
|
|
1755
|
-
/** 전체 페이지 수 */
|
|
1756
|
-
totalPages: number;
|
|
1757
|
-
/** 이전 페이지 버튼 aria-label (기본값: "Previous page") */
|
|
1758
|
-
prevLabel?: string;
|
|
1759
|
-
/** 다음 페이지 버튼 aria-label (기본값: "Next page") */
|
|
1760
|
-
nextLabel?: string;
|
|
1761
|
-
}
|
|
1762
|
-
type PaginationCallbacks = {
|
|
1763
|
-
onPageChange: (page: number) => void;
|
|
1764
|
-
onChange?: (page: number) => void;
|
|
1765
|
-
} | {
|
|
1766
|
-
onPageChange?: (page: number) => void;
|
|
1767
|
-
onChange: (page: number) => void;
|
|
1768
|
-
};
|
|
1769
|
-
type PaginationProps = PaginationBaseProps & PaginationCallbacks;
|
|
1770
|
-
/**
|
|
1771
|
-
* 페이지네이션을 렌더링한다.
|
|
1772
|
-
* 이전/다음 버튼과 페이지 목록을 구성해 전달된 콜백으로 페이지 변경을 전달한다.
|
|
1773
|
-
* @param props 페이지네이션 속성
|
|
1774
|
-
* @returns 렌더링된 페이지네이션 UI
|
|
1775
|
-
*/
|
|
1776
|
-
declare const Pagination: ({ page, totalPages, onPageChange, onChange, prevLabel, nextLabel, }: PaginationProps) => React$1.JSX.Element;
|
|
1777
|
-
|
|
1778
|
-
interface RadioProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "size"> {
|
|
1779
|
-
/** 라디오 버튼 옆에 표시할 라벨 */
|
|
1780
|
-
label?: React$1.ReactNode;
|
|
1781
|
-
/** 라디오 버튼 크기 (기본값: "md"). `RadioGroup` 안에서는 그룹 size 가 기본값. */
|
|
1782
|
-
size?: "sm" | "md" | "lg";
|
|
1783
|
-
/** 입력 요소 참조 */
|
|
1784
|
-
ref?: React$1.Ref<HTMLInputElement>;
|
|
1785
|
-
}
|
|
1786
|
-
/**
|
|
1787
|
-
* 라디오 버튼을 렌더링한다.
|
|
1788
|
-
* `RadioGroup` 안에서는 그룹 컨텍스트(name/value/size/disabled)를 자동 수신하고,
|
|
1789
|
-
* 밖에서는 native radio 로 standalone 동작한다 (기존 동작 유지).
|
|
1790
|
-
* @param props 라디오 속성
|
|
1791
|
-
* @returns 렌더링된 라디오 UI
|
|
1792
|
-
*/
|
|
1793
|
-
declare const Radio: {
|
|
1794
|
-
({ label, size: sizeProp, className, ref, value, checked, onChange, name: nameProp, disabled: disabledProp, ...props }: RadioProps): React$1.JSX.Element;
|
|
1795
|
-
displayName: string;
|
|
1796
|
-
};
|
|
1797
|
-
|
|
1798
|
-
type RadioGroupSize = "sm" | "md" | "lg";
|
|
1799
|
-
type RadioGroupOrientation = "vertical" | "horizontal";
|
|
1800
|
-
interface RadioGroupProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onChange"> {
|
|
1801
|
-
/** 제어형: 선택된 value */
|
|
1802
|
-
value?: string;
|
|
1803
|
-
/** 비제어형: 초기 선택 value */
|
|
1804
|
-
defaultValue?: string;
|
|
1805
|
-
/** value 변경 콜백 */
|
|
1806
|
-
onValueChange?: (value: string) => void;
|
|
1807
|
-
/** 라디오 그룹 name (미지정 시 자동 생성) */
|
|
1808
|
-
name?: string;
|
|
1809
|
-
/** 그룹 라벨 (radiogroup 의 접근성 레이블) */
|
|
1810
|
-
label?: React$1.ReactNode;
|
|
1811
|
-
/** 라벨/옵션 아래 보조 설명. error 일 때 에러 색 */
|
|
1812
|
-
supportingText?: React$1.ReactNode;
|
|
1813
|
-
/** 에러 상태 */
|
|
1814
|
-
error?: boolean;
|
|
1815
|
-
/** 그룹 사이즈 — 자식 Radio 에 전파 (기본값: "md") */
|
|
1816
|
-
size?: RadioGroupSize;
|
|
1817
|
-
/** 배치 방향 (기본값: "vertical") */
|
|
1818
|
-
orientation?: RadioGroupOrientation;
|
|
1819
|
-
/** 그룹 전체 비활성화 */
|
|
1820
|
-
disabled?: boolean;
|
|
1821
|
-
/** `Radio` 들 */
|
|
1822
|
-
children: React$1.ReactNode;
|
|
1823
|
-
}
|
|
1824
|
-
/**
|
|
1825
|
-
* `Radio` 들을 묶는 합성 래퍼. Context 로 name/value/size/disabled 를 공유한다.
|
|
1826
|
-
* native `input[type=radio]` 라 같은 name 공유 시 브라우저가 방향키 이동을 기본 제공한다.
|
|
1827
|
-
*
|
|
1828
|
-
* - 제어형: `value` + `onValueChange`
|
|
1829
|
-
* - 비제어형: `defaultValue`
|
|
1830
|
-
*
|
|
1831
|
-
* @example
|
|
1832
|
-
* ```tsx
|
|
1833
|
-
* <RadioGroup label="크기" defaultValue="md" onValueChange={setSize}>
|
|
1834
|
-
* <Radio value="sm" label="작게" />
|
|
1835
|
-
* <Radio value="md" label="보통" />
|
|
1836
|
-
* <Radio value="lg" label="크게" />
|
|
1837
|
-
* </RadioGroup>
|
|
1838
|
-
* ```
|
|
1839
|
-
*/
|
|
1840
|
-
declare const RadioGroup: {
|
|
1841
|
-
({ value: controlledValue, defaultValue, onValueChange, name: nameProp, label, supportingText, error, size, orientation, disabled, className, children, ...props }: RadioGroupProps): React$1.JSX.Element;
|
|
1842
|
-
displayName: string;
|
|
1843
|
-
};
|
|
1844
|
-
|
|
1845
|
-
type SkeletonVariant = "text" | "title" | "avatar" | "rect";
|
|
1846
|
-
interface SkeletonProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children"> {
|
|
1847
|
-
/** 스켈레톤 모양 (기본값: "text") */
|
|
1848
|
-
variant?: SkeletonVariant;
|
|
1849
|
-
/** CSS width 값 (예: "100%", 200, "16rem"). variant=avatar는 width=height로 사용 */
|
|
1850
|
-
width?: number | string;
|
|
1851
|
-
/** CSS height 값 */
|
|
1852
|
-
height?: number | string;
|
|
1853
|
-
/** border-radius 토큰 (sm/md/lg) 또는 임의 CSS 값 */
|
|
1854
|
-
radius?: "sm" | "md" | "lg" | "full" | string;
|
|
1855
|
-
}
|
|
1856
|
-
/**
|
|
1857
|
-
* 로딩 상태를 표현하는 스켈레톤 플레이스홀더를 렌더링한다.
|
|
1858
|
-
* @param props 스켈레톤 속성
|
|
1859
|
-
* @returns 스켈레톤 요소
|
|
1860
|
-
*/
|
|
1861
|
-
declare const Skeleton: ({ variant, width, height, radius, className, style, ...props }: SkeletonProps) => React$1.JSX.Element;
|
|
1862
|
-
|
|
1863
|
-
interface SpinnerProps {
|
|
1864
|
-
/** 스피너 크기(px) (기본값: 24) */
|
|
1865
|
-
size?: number;
|
|
1866
|
-
/** 스피너 접근성 레이블 (기본값: "Loading") */
|
|
1867
|
-
ariaLabel?: string;
|
|
1868
|
-
}
|
|
1869
|
-
/**
|
|
1870
|
-
* 스피너를 렌더링한다. 12개 bar 가 방사형으로 배치되어 페이드 인/아웃 으로 회전하는 효과.
|
|
1871
|
-
* Vercel/iOS 스타일 - 클래식 border-spin 보다 부드럽고 미니멀.
|
|
1872
|
-
* @param props 스피너 속성
|
|
1873
|
-
* @returns 렌더링된 스피너 요소
|
|
1874
|
-
*/
|
|
1875
|
-
declare const Spinner: ({ size, ariaLabel }: SpinnerProps) => React$1.JSX.Element;
|
|
1876
|
-
|
|
1877
1312
|
type TableSize = "sm" | "md" | "lg";
|
|
1878
1313
|
type TableSortDirection = "asc" | "desc";
|
|
1879
1314
|
interface TableSort {
|
|
@@ -1955,48 +1390,534 @@ type TableProps<T extends object> = {
|
|
|
1955
1390
|
selectRowAriaLabel?: (index: number) => string;
|
|
1956
1391
|
} & TableSelectionProps<T>;
|
|
1957
1392
|
/**
|
|
1958
|
-
* 데이터 테이블을 렌더링한다. 로딩 중에는 헤더 유지, 바디에 스켈레톤 행을 표시한다.
|
|
1959
|
-
* @param props 테이블 속성
|
|
1960
|
-
* @returns 테이블 컴포넌트
|
|
1393
|
+
* 데이터 테이블을 렌더링한다. 로딩 중에는 헤더 유지, 바디에 스켈레톤 행을 표시한다.
|
|
1394
|
+
* @param props 테이블 속성
|
|
1395
|
+
* @returns 테이블 컴포넌트
|
|
1396
|
+
*/
|
|
1397
|
+
declare const Table: <T extends object>({ columns, data, keyExtractor, emptyMessage, isLoading, skeletonRows, size, hoverable, stickyHeader, ariaLabel, className, onRowClick, rowClickHint, sort, onSortChange, selectAllAriaLabel, selectRowAriaLabel, selectable, rowKey, selectedKeys, onSelectionChange, }: TableProps<T>) => React$1.JSX.Element;
|
|
1398
|
+
|
|
1399
|
+
type AlertVariant = "info" | "success" | "warning" | "error";
|
|
1400
|
+
type AlertActionsAlign = "left" | "center" | "right";
|
|
1401
|
+
interface AlertOptions {
|
|
1402
|
+
/** 알림 스타일 변형 (기본값: "info") */
|
|
1403
|
+
variant?: AlertVariant;
|
|
1404
|
+
/** 알림 제목 */
|
|
1405
|
+
title?: React$1.ReactNode;
|
|
1406
|
+
/** 알림 본문 메시지 */
|
|
1407
|
+
message?: React$1.ReactNode;
|
|
1408
|
+
/** 확인 버튼 텍스트 (기본값: "확인") */
|
|
1409
|
+
confirmText?: string;
|
|
1410
|
+
/** 취소 버튼 텍스트 (기본값: "취소") */
|
|
1411
|
+
cancelText?: string;
|
|
1412
|
+
/** 취소 버튼 표시 여부 (기본값: false) */
|
|
1413
|
+
showCancel?: boolean;
|
|
1414
|
+
/**
|
|
1415
|
+
* Destructive 액션 여부. true 시 확인 버튼이 빨간 강조(danger)로 표시되고
|
|
1416
|
+
* 취소 버튼은 outline으로 유지. 위험성을 시각적으로 표현해 사용자가 인지 가능.
|
|
1417
|
+
* (Material/shadcn/Radix 표준 패턴)
|
|
1418
|
+
* @default false
|
|
1419
|
+
*/
|
|
1420
|
+
destructive?: boolean;
|
|
1421
|
+
/** 액션 버튼 정렬 (기본값: "right") */
|
|
1422
|
+
actionsAlign?: AlertActionsAlign;
|
|
1423
|
+
/** 변형 아이콘 표시 여부 (기본값: false). 원하면 명시적으로 켜기 */
|
|
1424
|
+
showIcon?: boolean;
|
|
1425
|
+
/** 확인 버튼 클릭 시 호출되는 콜백 */
|
|
1426
|
+
onConfirm?: () => void;
|
|
1427
|
+
/** 취소 버튼 클릭 시 호출되는 콜백 */
|
|
1428
|
+
onCancel?: () => void;
|
|
1429
|
+
/**
|
|
1430
|
+
* 오버레이 클릭으로 닫기 허용 여부 (기본값: true).
|
|
1431
|
+
* destructive 확인처럼 실수 닫힘을 막아야 하면 false 로.
|
|
1432
|
+
*/
|
|
1433
|
+
closeOnOverlay?: boolean;
|
|
1434
|
+
}
|
|
1435
|
+
interface AlertContextValue {
|
|
1436
|
+
showAlert: (options: AlertOptions) => void;
|
|
1437
|
+
}
|
|
1438
|
+
declare const useAlert: () => AlertContextValue;
|
|
1439
|
+
declare const AlertProvider: React$1.FC<{
|
|
1440
|
+
children: React$1.ReactNode;
|
|
1441
|
+
}>;
|
|
1442
|
+
|
|
1443
|
+
interface LinearProgressProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
1444
|
+
/** 전체 단계 수 */
|
|
1445
|
+
totalSteps: number;
|
|
1446
|
+
/** 현재 단계 (0부터 totalSteps까지) */
|
|
1447
|
+
currentStep: number;
|
|
1448
|
+
/** 접근성 레이블 (스크린 리더용) */
|
|
1449
|
+
"aria-label": string;
|
|
1450
|
+
}
|
|
1451
|
+
/**
|
|
1452
|
+
* 선형 진행 표시기를 렌더링한다.
|
|
1453
|
+
* `totalSteps + 1` 개 dot (체크포인트) + 진행 바. Dot `i` 는 `i <= currentStep` 이면 채워짐.
|
|
1454
|
+
* @param props 진행 표시기 속성
|
|
1455
|
+
* @returns 렌더링된 진행 표시기 요소
|
|
1456
|
+
*/
|
|
1457
|
+
declare const LinearProgress: ({ totalSteps, currentStep, className, ...props }: LinearProgressProps) => React$1.JSX.Element;
|
|
1458
|
+
|
|
1459
|
+
type SkeletonVariant = "text" | "title" | "avatar" | "rect";
|
|
1460
|
+
interface SkeletonProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children"> {
|
|
1461
|
+
/** 스켈레톤 모양 (기본값: "text") */
|
|
1462
|
+
variant?: SkeletonVariant;
|
|
1463
|
+
/** CSS width 값 (예: "100%", 200, "16rem"). variant=avatar는 width=height로 사용 */
|
|
1464
|
+
width?: number | string;
|
|
1465
|
+
/** CSS height 값 */
|
|
1466
|
+
height?: number | string;
|
|
1467
|
+
/** border-radius 토큰 (sm/md/lg) 또는 임의 CSS 값 */
|
|
1468
|
+
radius?: "sm" | "md" | "lg" | "full" | string;
|
|
1469
|
+
}
|
|
1470
|
+
/**
|
|
1471
|
+
* 로딩 상태를 표현하는 스켈레톤 플레이스홀더를 렌더링한다.
|
|
1472
|
+
* @param props 스켈레톤 속성
|
|
1473
|
+
* @returns 스켈레톤 요소
|
|
1474
|
+
*/
|
|
1475
|
+
declare const Skeleton: ({ variant, width, height, radius, className, style, ...props }: SkeletonProps) => React$1.JSX.Element;
|
|
1476
|
+
|
|
1477
|
+
interface SpinnerProps {
|
|
1478
|
+
/** 스피너 크기(px) (기본값: 24) */
|
|
1479
|
+
size?: number;
|
|
1480
|
+
/** 스피너 접근성 레이블 (기본값: "Loading") */
|
|
1481
|
+
ariaLabel?: string;
|
|
1482
|
+
}
|
|
1483
|
+
/**
|
|
1484
|
+
* 스피너를 렌더링한다. 12개 bar 가 방사형으로 배치되어 페이드 인/아웃 으로 회전하는 효과.
|
|
1485
|
+
* Vercel/iOS 스타일 - 클래식 border-spin 보다 부드럽고 미니멀.
|
|
1486
|
+
* @param props 스피너 속성
|
|
1487
|
+
* @returns 렌더링된 스피너 요소
|
|
1488
|
+
*/
|
|
1489
|
+
declare const Spinner: ({ size, ariaLabel }: SpinnerProps) => React$1.JSX.Element;
|
|
1490
|
+
|
|
1491
|
+
interface ToastProviderProps {
|
|
1492
|
+
/** 앱 루트에서 감싸는 자식 요소 */
|
|
1493
|
+
children: React$1.ReactNode;
|
|
1494
|
+
/** 최대 동시 표시 토스트 수 (기본값: 5) */
|
|
1495
|
+
maxCount?: number;
|
|
1496
|
+
/** 토스트 닫기 버튼의 aria-label (기본값: "Close") */
|
|
1497
|
+
closeAriaLabel?: string;
|
|
1498
|
+
}
|
|
1499
|
+
/**
|
|
1500
|
+
* 토스트 컨텍스트를 제공하는 Provider를 렌더링한다.
|
|
1501
|
+
* 앱 최상단에서 children을 감싸야 useToast 훅을 사용할 수 있다.
|
|
1502
|
+
* @param props Provider 속성
|
|
1503
|
+
* @returns 렌더링된 Provider와 토스트 컨테이너
|
|
1504
|
+
*/
|
|
1505
|
+
declare const ToastProvider: ({ children, maxCount, closeAriaLabel, }: ToastProviderProps) => React$1.JSX.Element;
|
|
1506
|
+
|
|
1507
|
+
/**
|
|
1508
|
+
* 토스트 메시지를 표시하는 훅.
|
|
1509
|
+
* ToastProvider 내부에서만 사용할 수 있다.
|
|
1510
|
+
* @returns 토스트 메시지 표시 함수 객체
|
|
1511
|
+
*/
|
|
1512
|
+
declare const useToast: () => {
|
|
1513
|
+
/** 성공 메시지를 표시한다 */
|
|
1514
|
+
success: (message: string, duration?: number) => void;
|
|
1515
|
+
/** 오류 메시지를 표시한다 */
|
|
1516
|
+
error: (message: string, duration?: number) => void;
|
|
1517
|
+
/** 경고 메시지를 표시한다 */
|
|
1518
|
+
warning: (message: string, duration?: number) => void;
|
|
1519
|
+
/** 정보 메시지를 표시한다 */
|
|
1520
|
+
info: (message: string, duration?: number) => void;
|
|
1521
|
+
/** 기본 메시지를 표시한다 */
|
|
1522
|
+
message: (message: string, duration?: number) => void;
|
|
1523
|
+
};
|
|
1524
|
+
|
|
1525
|
+
interface TopLoadingProps {
|
|
1526
|
+
/** 진행률 (0-100). undefined면 indeterminate 모드 */
|
|
1527
|
+
progress?: number;
|
|
1528
|
+
/** 로딩바 색상 (기본: primary) */
|
|
1529
|
+
color?: string;
|
|
1530
|
+
/** 로딩바 높이 (기본: 3px) */
|
|
1531
|
+
height?: number;
|
|
1532
|
+
/** 표시 여부 */
|
|
1533
|
+
isLoading?: boolean;
|
|
1534
|
+
/** 프로그레스 바의 접근성 레이블 (기본값: "Page loading") */
|
|
1535
|
+
ariaLabel?: string;
|
|
1536
|
+
}
|
|
1537
|
+
/**
|
|
1538
|
+
* 상단 로딩바를 렌더링한다.
|
|
1539
|
+
* 표시 여부와 진행률에 따라 determinate/indeterminate 상태를 구성한다.
|
|
1540
|
+
* @param props 로딩바 속성
|
|
1541
|
+
* @returns 렌더링된 로딩바 요소 또는 null
|
|
1542
|
+
*/
|
|
1543
|
+
declare const TopLoading: ({ progress, color, height, isLoading, ariaLabel, }: TopLoadingProps) => React$1.JSX.Element | null;
|
|
1544
|
+
|
|
1545
|
+
interface CheckboxProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "size"> {
|
|
1546
|
+
/** 체크박스 옆에 표시할 라벨 */
|
|
1547
|
+
label?: React$1.ReactNode;
|
|
1548
|
+
/** 중간 선택(indeterminate) 상태 여부 */
|
|
1549
|
+
indeterminate?: boolean;
|
|
1550
|
+
/** 에러 상태 여부 */
|
|
1551
|
+
error?: boolean;
|
|
1552
|
+
/** 입력 요소 참조 */
|
|
1553
|
+
ref?: React$1.Ref<HTMLInputElement>;
|
|
1554
|
+
}
|
|
1555
|
+
/**
|
|
1556
|
+
* 체크박스를 렌더링한다.
|
|
1557
|
+
* Figma DS 기준 3가지 타입(Unselected/Checked/Indeterminate)과 state layer overlay를 지원한다.
|
|
1558
|
+
* @param props 체크박스 속성
|
|
1559
|
+
* @returns 렌더링된 체크박스 UI
|
|
1560
|
+
*/
|
|
1561
|
+
declare const Checkbox: {
|
|
1562
|
+
({ label, indeterminate, error, className, ref, ...props }: CheckboxProps): React$1.JSX.Element;
|
|
1563
|
+
displayName: string;
|
|
1564
|
+
};
|
|
1565
|
+
|
|
1566
|
+
type DatePickerMode = "year-month" | "year-month-day";
|
|
1567
|
+
type SelectableRange = "all" | "until-today";
|
|
1568
|
+
interface DatePickerBaseProps {
|
|
1569
|
+
/** 데이트 피커 위에 표시할 라벨 텍스트 */
|
|
1570
|
+
label?: string;
|
|
1571
|
+
/** 제어형 날짜 값 ("YYYY-MM" 또는 "YYYY-MM-DD" 형식) */
|
|
1572
|
+
value?: string;
|
|
1573
|
+
/** 선택 모드 (기본값: "year-month-day") */
|
|
1574
|
+
mode?: DatePickerMode;
|
|
1575
|
+
/** 연도 선택 범위 시작 (기본값: 1950) */
|
|
1576
|
+
startYear?: number;
|
|
1577
|
+
/** 연도 선택 범위 끝 (기본값: 현재 연도 + 10) */
|
|
1578
|
+
endYear?: number;
|
|
1579
|
+
/** 선택 가능한 최소 날짜 ("YYYY-MM-DD" 형식) */
|
|
1580
|
+
minDate?: string;
|
|
1581
|
+
/** 선택 가능한 날짜 범위 ("all": 제한 없음, "until-today": 오늘까지) */
|
|
1582
|
+
selectableRange?: SelectableRange;
|
|
1583
|
+
/** 비활성화 여부 */
|
|
1584
|
+
disabled?: boolean;
|
|
1585
|
+
/** 데이트 피커가 컨테이너의 전체 너비를 차지할지 여부 */
|
|
1586
|
+
fullWidth?: boolean;
|
|
1587
|
+
/**
|
|
1588
|
+
* 데이트 피커의 커스텀 너비
|
|
1589
|
+
* @deprecated `fullWidth` 사용 또는 CSS로 처리
|
|
1590
|
+
*/
|
|
1591
|
+
width?: number | string;
|
|
1592
|
+
/** 연도 select의 라벨/플레이스홀더 (기본값: "Year") */
|
|
1593
|
+
yearLabel?: string;
|
|
1594
|
+
/** 월 select의 라벨/플레이스홀더 (기본값: "Month") */
|
|
1595
|
+
monthLabel?: string;
|
|
1596
|
+
/** 일 select의 라벨/플레이스홀더 (기본값: "Day") */
|
|
1597
|
+
dayLabel?: string;
|
|
1598
|
+
/**
|
|
1599
|
+
* minDate 설정 시 스크린리더에 전달할 안내 문구 포맷.
|
|
1600
|
+
* `{date}` 자리에 minDate 값이 치환됩니다. (기본값: "Minimum date: {date}")
|
|
1601
|
+
*/
|
|
1602
|
+
minDateSrFormat?: string;
|
|
1603
|
+
/**
|
|
1604
|
+
* selectableRange="until-today" 설정 시 스크린리더에 전달할 안내 문구.
|
|
1605
|
+
* (기본값: "Selectable up to today")
|
|
1606
|
+
*/
|
|
1607
|
+
selectableRangeUntilTodaySrText?: string;
|
|
1608
|
+
}
|
|
1609
|
+
type DatePickerCallbacks = {
|
|
1610
|
+
onValueChange: (value: string) => void;
|
|
1611
|
+
onChange?: (value: string) => void;
|
|
1612
|
+
} | {
|
|
1613
|
+
onValueChange?: (value: string) => void;
|
|
1614
|
+
onChange: (value: string) => void;
|
|
1615
|
+
};
|
|
1616
|
+
type DatePickerProps = DatePickerBaseProps & DatePickerCallbacks;
|
|
1617
|
+
/**
|
|
1618
|
+
* 연/월/일 선택형 데이트 피커를 렌더링한다.
|
|
1619
|
+
* 내부적으로 DS Dropdown 3개를 조합해 드롭다운 UX 일관성을 유지한다.
|
|
1620
|
+
*/
|
|
1621
|
+
declare const DatePicker: ({ label, value, onValueChange, onChange, mode, startYear, endYear: endYearProp, minDate, selectableRange, disabled, fullWidth, width, yearLabel, monthLabel, dayLabel, minDateSrFormat, selectableRangeUntilTodaySrText, }: DatePickerProps) => React$1.JSX.Element;
|
|
1622
|
+
|
|
1623
|
+
type DropdownSize = "sm" | "md" | "lg";
|
|
1624
|
+
interface DropdownOption {
|
|
1625
|
+
value: string;
|
|
1626
|
+
label: string;
|
|
1627
|
+
disabled?: boolean;
|
|
1628
|
+
/** 옵션 아래에 표시할 보조 텍스트 */
|
|
1629
|
+
supportingText?: string;
|
|
1630
|
+
/** 옵션 왼쪽 아이콘 */
|
|
1631
|
+
leadingIcon?: React$1.ReactNode;
|
|
1632
|
+
/** 옵션 오른쪽 아이콘 (미지정 시 선택 상태에 체크 아이콘 자동 표시) */
|
|
1633
|
+
trailingIcon?: React$1.ReactNode;
|
|
1634
|
+
/** 아이템 아래 구분선 표시 여부 */
|
|
1635
|
+
showDivider?: boolean;
|
|
1636
|
+
}
|
|
1637
|
+
/** single/multiple 공통 속성 */
|
|
1638
|
+
interface DropdownCommonProps {
|
|
1639
|
+
/** 드롭다운 요소의 id (미입력 시 자동 생성) */
|
|
1640
|
+
id?: string;
|
|
1641
|
+
/** 드롭다운 위에 표시할 플로팅 라벨 텍스트 */
|
|
1642
|
+
label?: string;
|
|
1643
|
+
/** 선택 전 표시할 플레이스홀더 (기본값: "Select…") */
|
|
1644
|
+
placeholder?: string;
|
|
1645
|
+
/** 표시할 옵션 목록 */
|
|
1646
|
+
options: DropdownOption[];
|
|
1647
|
+
/** 비활성화 여부 */
|
|
1648
|
+
disabled?: boolean;
|
|
1649
|
+
/** 드롭다운 크기 (기본값: "md") */
|
|
1650
|
+
size?: DropdownSize;
|
|
1651
|
+
/**
|
|
1652
|
+
* @deprecated Dropdown 은 이제 항상 부모 너비를 채웁니다. 인라인 사용 시 부모를 `inline-block + width` 로 감싸세요.
|
|
1653
|
+
*/
|
|
1654
|
+
fullWidth?: boolean;
|
|
1655
|
+
/** 루트 요소에 추가할 className */
|
|
1656
|
+
className?: string;
|
|
1657
|
+
/**
|
|
1658
|
+
* @deprecated variant는 더 이상 지원되지 않습니다. Dropdown은 outline 스타일만 사용합니다.
|
|
1659
|
+
*/
|
|
1660
|
+
variant?: "outline" | "filled" | "ghost";
|
|
1661
|
+
/**
|
|
1662
|
+
* @deprecated textAlign은 더 이상 지원되지 않습니다.
|
|
1663
|
+
*/
|
|
1664
|
+
textAlign?: "left" | "center";
|
|
1665
|
+
/**
|
|
1666
|
+
* 검색 가능 여부. 활성화 시 열린 패널 상단에 검색 입력이 표시되고, 옵션 `label` 부분 일치로 필터링됩니다.
|
|
1667
|
+
* (기본값: false)
|
|
1668
|
+
*/
|
|
1669
|
+
searchable?: boolean;
|
|
1670
|
+
/** 검색 입력의 placeholder (기본값: "검색…") */
|
|
1671
|
+
searchPlaceholder?: string;
|
|
1672
|
+
/** 필터 결과가 0개일 때 표시할 텍스트 (기본값: "결과 없음") */
|
|
1673
|
+
emptyText?: string;
|
|
1674
|
+
/** 멀티 선택 요약 텍스트 (기본값: "N개 선택") */
|
|
1675
|
+
selectedSummary?: (count: number) => string;
|
|
1676
|
+
/**
|
|
1677
|
+
* 네이티브 폼 제출 참여용 name. 지정 시 선택 값이 hidden input 으로 렌더되어
|
|
1678
|
+
* `<form>` POST 에 포함됩니다 (multiple 은 같은 name 의 hidden input 반복).
|
|
1679
|
+
*/
|
|
1680
|
+
name?: string;
|
|
1681
|
+
}
|
|
1682
|
+
/** 단일 선택 (기본) */
|
|
1683
|
+
interface DropdownSingleProps extends DropdownCommonProps {
|
|
1684
|
+
/** 다중 선택 모드 (기본값: false) */
|
|
1685
|
+
multiple?: false;
|
|
1686
|
+
/** 제어형 선택 값 */
|
|
1687
|
+
value?: string | null;
|
|
1688
|
+
/** 값 변경 콜백 (canonical). 선택된 값과 전체 옵션 객체를 전달합니다. */
|
|
1689
|
+
onValueChange?: (value: string | null, option?: DropdownOption | null) => void;
|
|
1690
|
+
/** @deprecated `onValueChange` 를 사용하세요. */
|
|
1691
|
+
onChange?: (value: string | null, option?: DropdownOption | null) => void;
|
|
1692
|
+
/** 비제어형 초기 선택 값 */
|
|
1693
|
+
defaultValue?: string | null;
|
|
1694
|
+
}
|
|
1695
|
+
/** 다중 선택 */
|
|
1696
|
+
interface DropdownMultipleProps extends DropdownCommonProps {
|
|
1697
|
+
/** 다중 선택 모드 */
|
|
1698
|
+
multiple: true;
|
|
1699
|
+
/** 제어형 선택 값 목록 */
|
|
1700
|
+
value?: string[];
|
|
1701
|
+
/** 값 변경 콜백 (canonical). 선택된 값 목록과 옵션 객체 목록을 전달합니다. */
|
|
1702
|
+
onValueChange?: (values: string[], options: DropdownOption[]) => void;
|
|
1703
|
+
/** @deprecated `onValueChange` 를 사용하세요. */
|
|
1704
|
+
onChange?: (values: string[], options: DropdownOption[]) => void;
|
|
1705
|
+
/** 비제어형 초기 선택 값 목록 */
|
|
1706
|
+
defaultValue?: string[];
|
|
1707
|
+
}
|
|
1708
|
+
type DropdownProps = DropdownSingleProps | DropdownMultipleProps;
|
|
1709
|
+
/**
|
|
1710
|
+
* 드롭다운 컴포넌트를 렌더링한다.
|
|
1711
|
+
* 제어형/비제어형 상태를 지원하며, 키보드/마우스 상호작용과 정적 라벨을 관리한다.
|
|
1712
|
+
* `searchable` 로 라벨 부분 일치 검색을, `multiple` 로 다중 선택을 opt-in 할 수 있다.
|
|
1713
|
+
* @param props 드롭다운 속성
|
|
1714
|
+
* @returns 렌더링된 드롭다운 UI
|
|
1715
|
+
*/
|
|
1716
|
+
declare const Dropdown: (props: DropdownProps) => React$1.JSX.Element;
|
|
1717
|
+
|
|
1718
|
+
type FileInputVariant = "button" | "preview";
|
|
1719
|
+
interface FileInputProps extends React$1.InputHTMLAttributes<HTMLInputElement> {
|
|
1720
|
+
/** 파일 선택 버튼 라벨 / preview variant 빈 상태 텍스트 (기본값: "Choose file") */
|
|
1721
|
+
label?: string;
|
|
1722
|
+
/** 파일 선택 시 호출되는 콜백 */
|
|
1723
|
+
onFiles?: (files: FileList | null) => void;
|
|
1724
|
+
/** 입력 필드 아래에 표시할 도움말 텍스트 (예: "PDF, DOC 파일만 업로드 가능합니다") */
|
|
1725
|
+
supportingText?: string;
|
|
1726
|
+
/** 이미지 파일 선택 시 64×64 썸네일을 버튼 아래 나열 (variant="button" 전용) */
|
|
1727
|
+
preview?: boolean;
|
|
1728
|
+
/**
|
|
1729
|
+
* 표시 형태 (기본값: "button").
|
|
1730
|
+
* - `"button"`: 일반 파일 선택 버튼. `preview=true` 면 아래에 작은 썸네일 표시.
|
|
1731
|
+
* - `"preview"`: 큰 박스 안에 이미지 채움 (avatar / 이미지 업로더 패턴). 단일 이미지.
|
|
1732
|
+
*/
|
|
1733
|
+
variant?: FileInputVariant;
|
|
1734
|
+
/** variant="preview" 박스 크기 (px, 기본값: 160) */
|
|
1735
|
+
previewSize?: number;
|
|
1736
|
+
}
|
|
1737
|
+
/**
|
|
1738
|
+
* 파일 입력 컴포넌트를 렌더링한다.
|
|
1739
|
+
* 내부 input 변경을 감지해 파일 목록을 콜백으로 전달한다.
|
|
1740
|
+
* @param props 파일 입력 속성
|
|
1741
|
+
* @returns 렌더링된 파일 입력 UI
|
|
1742
|
+
*/
|
|
1743
|
+
declare const FileInput: ({ label, onFiles, supportingText, preview, variant, previewSize, className, disabled, accept, onChange, ...props }: FileInputProps) => React$1.JSX.Element;
|
|
1744
|
+
|
|
1745
|
+
/**
|
|
1746
|
+
* 정사각 이미지 크롭의 좌표 계산. 화면 조작(드래그 이동량 + 확대 배율)을 원본 픽셀 기준
|
|
1747
|
+
* 정사각 영역으로 환산하는 순수 함수만 모은다 — canvas / DOM 을 모르므로 그대로 단위 테스트
|
|
1748
|
+
* 할 수 있다.
|
|
1749
|
+
*
|
|
1750
|
+
* 좌표 규약:
|
|
1751
|
+
* - 뷰포트는 한 변이 `viewportSize` 인 정사각형이고, 이미지는 그 중앙을 기준으로 놓인다.
|
|
1752
|
+
* - `offset` 은 이미지 중심이 뷰포트 중심에서 얼마나 밀렸는지(CSS px). 오른쪽/아래가 +.
|
|
1753
|
+
* - 배율은 항상 `cover` 배율 × zoom 이라 zoom=1 이면 이미지가 뷰포트를 정확히 덮는다.
|
|
1754
|
+
*/
|
|
1755
|
+
/** 이미지 중심의 이동량(CSS px) */
|
|
1756
|
+
interface CropOffset {
|
|
1757
|
+
x: number;
|
|
1758
|
+
y: number;
|
|
1759
|
+
}
|
|
1760
|
+
/** 원본 이미지의 natural 크기(px) */
|
|
1761
|
+
interface CropImageSize {
|
|
1762
|
+
width: number;
|
|
1763
|
+
height: number;
|
|
1764
|
+
}
|
|
1765
|
+
/** 원본 픽셀 기준 정사각 크롭 영역 (`canvas.drawImage` 의 source 인자로 그대로 사용) */
|
|
1766
|
+
interface CropRect {
|
|
1767
|
+
x: number;
|
|
1768
|
+
y: number;
|
|
1769
|
+
size: number;
|
|
1770
|
+
}
|
|
1771
|
+
|
|
1772
|
+
interface ImageCropperHandle {
|
|
1773
|
+
/** 현재 보이는 정사각 영역을 잘라 Blob 으로 돌려준다. 소비자의 "적용" 버튼에서 호출. */
|
|
1774
|
+
crop: () => Promise<Blob>;
|
|
1775
|
+
/** 배율·위치를 초기 상태(전체가 보이는 zoom=min, 중앙)로 되돌린다. */
|
|
1776
|
+
reset: () => void;
|
|
1777
|
+
}
|
|
1778
|
+
interface ImageCropperProps {
|
|
1779
|
+
/** 크롭/리셋을 호출할 imperative 핸들 (React 19 ref-as-prop). */
|
|
1780
|
+
ref?: Ref<ImageCropperHandle>;
|
|
1781
|
+
/** 크롭할 이미지. `File`/`Blob`(로컬) 또는 이미지 URL 문자열. */
|
|
1782
|
+
src: File | Blob | string;
|
|
1783
|
+
/** 결과물 한 변 길이(px). 기본 512. */
|
|
1784
|
+
outputSize?: number;
|
|
1785
|
+
/** 결과 MIME. `"auto"`(기본)는 PNG 는 PNG 로, 나머지는 JPEG 로 통일. */
|
|
1786
|
+
outputType?: "auto" | "image/jpeg" | "image/png" | "image/webp";
|
|
1787
|
+
/** JPEG/WebP 인코딩 품질(0~1). 기본 0.92. */
|
|
1788
|
+
quality?: number;
|
|
1789
|
+
/** 원형 가이드(아바타용). 기본 false(둥근 사각형 가이드). */
|
|
1790
|
+
circular?: boolean;
|
|
1791
|
+
/** 뷰포트 한 변 길이(px). 기본 240. */
|
|
1792
|
+
viewportSize?: number;
|
|
1793
|
+
/** 최소 배율. 기본 1(이미지가 뷰포트를 딱 덮음). */
|
|
1794
|
+
minZoom?: number;
|
|
1795
|
+
/** 최대 배율. 기본 3. */
|
|
1796
|
+
maxZoom?: number;
|
|
1797
|
+
/** 이미지 로드 완료 시. */
|
|
1798
|
+
onReady?: (size: CropImageSize) => void;
|
|
1799
|
+
/** 이미지 디코딩 실패 시(손상 파일 등). */
|
|
1800
|
+
onError?: () => void;
|
|
1801
|
+
className?: string;
|
|
1802
|
+
/** 뷰포트 접근성 레이블. 기본 "이미지 위치와 배율 조정". */
|
|
1803
|
+
label?: string;
|
|
1804
|
+
}
|
|
1805
|
+
/**
|
|
1806
|
+
* 업로드 전에 이미지에서 보일 정사각 영역을 정하는 크로퍼. 뷰포트 안에서 **드래그(또는 방향키)**
|
|
1807
|
+
* 로 위치를, **휠·슬라이더·+/- 버튼(또는 `+`/`-` 키)** 으로 배율을 맞춘다. 모달은 포함하지
|
|
1808
|
+
* 않으므로 소비자가 `Modal` 등으로 감싸고, 적용 버튼에서 `ref.crop()` 을 호출해 Blob 을 받는다.
|
|
1809
|
+
*
|
|
1810
|
+
* ```tsx
|
|
1811
|
+
* const cropperRef = useRef<ImageCropperHandle>(null);
|
|
1812
|
+
* <ImageCropper ref={cropperRef} src={file} circular />
|
|
1813
|
+
* // 적용:
|
|
1814
|
+
* const blob = await cropperRef.current!.crop();
|
|
1815
|
+
* ```
|
|
1816
|
+
*
|
|
1817
|
+
* 원격 URL 을 넘기면 `canvas.drawImage` 가 서버의 CORS(`Access-Control-Allow-Origin`)에
|
|
1818
|
+
* 의존한다 — 확실히 자르려면 로컬 `File`/`Blob` 을 권장한다.
|
|
1819
|
+
*/
|
|
1820
|
+
declare function ImageCropper({ ref, src, outputSize, outputType, quality, circular, viewportSize, minZoom, maxZoom, onReady, onError, className, label, }: ImageCropperProps): React$1.JSX.Element;
|
|
1821
|
+
|
|
1822
|
+
interface OtpInputProps {
|
|
1823
|
+
/** OTP 자릿수 (기본값: 6) */
|
|
1824
|
+
length?: 4 | 6;
|
|
1825
|
+
/** 제어형 값 */
|
|
1826
|
+
value?: string;
|
|
1827
|
+
/** 값 변경 콜백 (canonical) */
|
|
1828
|
+
onValueChange?: (value: string) => void;
|
|
1829
|
+
/** @deprecated `onValueChange` 를 사용하세요. */
|
|
1830
|
+
onChange?: (value: string) => void;
|
|
1831
|
+
/** 에러 상태 */
|
|
1832
|
+
error?: boolean;
|
|
1833
|
+
/** 비활성화 */
|
|
1834
|
+
disabled?: boolean;
|
|
1835
|
+
/** 하단 도움말 텍스트 */
|
|
1836
|
+
supportingText?: string;
|
|
1837
|
+
/** 첫 번째 입력에 자동 포커스 */
|
|
1838
|
+
autoFocus?: boolean;
|
|
1839
|
+
/** 접근성 레이블 */
|
|
1840
|
+
ariaLabel?: string;
|
|
1841
|
+
/** 추가 className */
|
|
1842
|
+
className?: string;
|
|
1843
|
+
}
|
|
1844
|
+
/**
|
|
1845
|
+
* OTP 입력 컴포넌트를 렌더링한다.
|
|
1846
|
+
* 각 자리를 개별 입력으로 분리하고, 자동 포커스 이동·붙여넣기를 지원한다.
|
|
1847
|
+
* @param props OTP 입력 속성
|
|
1848
|
+
* @returns 렌더링된 OTP 입력 요소
|
|
1961
1849
|
*/
|
|
1962
|
-
declare const
|
|
1850
|
+
declare const OtpInput: {
|
|
1851
|
+
({ length, value, onValueChange, onChange, error, disabled, supportingText, autoFocus, ariaLabel, className, }: OtpInputProps): React$1.JSX.Element;
|
|
1852
|
+
displayName: string;
|
|
1853
|
+
};
|
|
1963
1854
|
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
/**
|
|
1968
|
-
|
|
1969
|
-
/**
|
|
1970
|
-
|
|
1971
|
-
/** 모드 변경 */
|
|
1972
|
-
setMode: (mode: ThemeMode) => void;
|
|
1855
|
+
interface RadioProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "size"> {
|
|
1856
|
+
/** 라디오 버튼 옆에 표시할 라벨 */
|
|
1857
|
+
label?: React$1.ReactNode;
|
|
1858
|
+
/** 라디오 버튼 크기 (기본값: "md"). `RadioGroup` 안에서는 그룹 size 가 기본값. */
|
|
1859
|
+
size?: "sm" | "md" | "lg";
|
|
1860
|
+
/** 입력 요소 참조 */
|
|
1861
|
+
ref?: React$1.Ref<HTMLInputElement>;
|
|
1973
1862
|
}
|
|
1974
1863
|
/**
|
|
1975
|
-
*
|
|
1976
|
-
*
|
|
1864
|
+
* 라디오 버튼을 렌더링한다.
|
|
1865
|
+
* `RadioGroup` 안에서는 그룹 컨텍스트(name/value/size/disabled)를 자동 수신하고,
|
|
1866
|
+
* 밖에서는 native radio 로 standalone 동작한다 (기존 동작 유지).
|
|
1867
|
+
* @param props 라디오 속성
|
|
1868
|
+
* @returns 렌더링된 라디오 UI
|
|
1977
1869
|
*/
|
|
1978
|
-
declare const
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1870
|
+
declare const Radio: {
|
|
1871
|
+
({ label, size: sizeProp, className, ref, value, checked, onChange, name: nameProp, disabled: disabledProp, ...props }: RadioProps): React$1.JSX.Element;
|
|
1872
|
+
displayName: string;
|
|
1873
|
+
};
|
|
1874
|
+
|
|
1875
|
+
type RadioGroupSize = "sm" | "md" | "lg";
|
|
1876
|
+
type RadioGroupOrientation = "vertical" | "horizontal";
|
|
1877
|
+
interface RadioGroupProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onChange"> {
|
|
1878
|
+
/** 제어형: 선택된 value */
|
|
1879
|
+
value?: string;
|
|
1880
|
+
/** 비제어형: 초기 선택 value */
|
|
1881
|
+
defaultValue?: string;
|
|
1882
|
+
/** value 변경 콜백 */
|
|
1883
|
+
onValueChange?: (value: string) => void;
|
|
1884
|
+
/** 라디오 그룹 name (미지정 시 자동 생성) */
|
|
1885
|
+
name?: string;
|
|
1886
|
+
/** 그룹 라벨 (radiogroup 의 접근성 레이블) */
|
|
1887
|
+
label?: React$1.ReactNode;
|
|
1888
|
+
/** 라벨/옵션 아래 보조 설명. error 일 때 에러 색 */
|
|
1889
|
+
supportingText?: React$1.ReactNode;
|
|
1890
|
+
/** 에러 상태 */
|
|
1891
|
+
error?: boolean;
|
|
1892
|
+
/** 그룹 사이즈 — 자식 Radio 에 전파 (기본값: "md") */
|
|
1893
|
+
size?: RadioGroupSize;
|
|
1894
|
+
/** 배치 방향 (기본값: "vertical") */
|
|
1895
|
+
orientation?: RadioGroupOrientation;
|
|
1896
|
+
/** 그룹 전체 비활성화 */
|
|
1897
|
+
disabled?: boolean;
|
|
1898
|
+
/** `Radio` 들 */
|
|
1986
1899
|
children: React$1.ReactNode;
|
|
1987
1900
|
}
|
|
1988
1901
|
/**
|
|
1989
|
-
*
|
|
1990
|
-
* `
|
|
1902
|
+
* `Radio` 들을 묶는 합성 래퍼. Context 로 name/value/size/disabled 를 공유한다.
|
|
1903
|
+
* native `input[type=radio]` 라 같은 name 공유 시 브라우저가 방향키 이동을 기본 제공한다.
|
|
1904
|
+
*
|
|
1905
|
+
* - 제어형: `value` + `onValueChange`
|
|
1906
|
+
* - 비제어형: `defaultValue`
|
|
1991
1907
|
*
|
|
1992
1908
|
* @example
|
|
1993
1909
|
* ```tsx
|
|
1994
|
-
* <
|
|
1995
|
-
* <
|
|
1996
|
-
*
|
|
1910
|
+
* <RadioGroup label="크기" defaultValue="md" onValueChange={setSize}>
|
|
1911
|
+
* <Radio value="sm" label="작게" />
|
|
1912
|
+
* <Radio value="md" label="보통" />
|
|
1913
|
+
* <Radio value="lg" label="크게" />
|
|
1914
|
+
* </RadioGroup>
|
|
1997
1915
|
* ```
|
|
1998
1916
|
*/
|
|
1999
|
-
declare const
|
|
1917
|
+
declare const RadioGroup: {
|
|
1918
|
+
({ value: controlledValue, defaultValue, onValueChange, name: nameProp, label, supportingText, error, size, orientation, disabled, className, children, ...props }: RadioGroupProps): React$1.JSX.Element;
|
|
1919
|
+
displayName: string;
|
|
1920
|
+
};
|
|
2000
1921
|
|
|
2001
1922
|
type TextFieldSize = "sm" | "md" | "lg";
|
|
2002
1923
|
/**
|
|
@@ -2101,102 +2022,259 @@ interface TextareaProps extends Omit<React$1.TextareaHTMLAttributes<HTMLTextArea
|
|
|
2101
2022
|
ref?: React$1.Ref<HTMLTextAreaElement>;
|
|
2102
2023
|
}
|
|
2103
2024
|
/**
|
|
2104
|
-
* 멀티라인 텍스트 입력. `TextField` 와 동일한 시각/토큰 + textarea 특화 기능.
|
|
2105
|
-
* auto-grow (`minRows`/`maxRows`), 글자 수 카운터, resize 제어, 한글 IME 정책 지원.
|
|
2025
|
+
* 멀티라인 텍스트 입력. `TextField` 와 동일한 시각/토큰 + textarea 특화 기능.
|
|
2026
|
+
* auto-grow (`minRows`/`maxRows`), 글자 수 카운터, resize 제어, 한글 IME 정책 지원.
|
|
2027
|
+
*
|
|
2028
|
+
* @example
|
|
2029
|
+
* ```tsx
|
|
2030
|
+
* <Textarea label="내용" minRows={3} maxRows={8} maxLength={500} showCounter
|
|
2031
|
+
* onChangeAction={(v) => setContent(v)} />
|
|
2032
|
+
* ```
|
|
2033
|
+
*/
|
|
2034
|
+
declare const Textarea: {
|
|
2035
|
+
({ id, label, showLabel, supportingText, error, fullWidth, size, className, onValueChange, onChangeAction, imeStrategy, value, defaultValue, transformValue, rows, minRows, maxRows, showCounter, resize, maxLength, ref, ...props }: TextareaProps): React$1.JSX.Element;
|
|
2036
|
+
displayName: string;
|
|
2037
|
+
};
|
|
2038
|
+
|
|
2039
|
+
interface ToggleProps extends Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, "onChange"> {
|
|
2040
|
+
/** 제어형 토글 상태 */
|
|
2041
|
+
checked?: boolean;
|
|
2042
|
+
/** 비제어형 초기 토글 상태 */
|
|
2043
|
+
defaultChecked?: boolean;
|
|
2044
|
+
/** 상태 변경 콜백 (canonical) */
|
|
2045
|
+
onCheckedChange?: (checked: boolean) => void;
|
|
2046
|
+
/** @deprecated `onCheckedChange` 를 사용하세요. */
|
|
2047
|
+
onChange?: (checked: boolean) => void;
|
|
2048
|
+
/** 토글 크기 (기본값: "sm") */
|
|
2049
|
+
size?: "sm" | "md";
|
|
2050
|
+
/** 비활성화 여부 */
|
|
2051
|
+
disabled?: boolean;
|
|
2052
|
+
/** 토글 접근성 레이블(스크린 리더용) */
|
|
2053
|
+
ariaLabel: string;
|
|
2054
|
+
/** 버튼 요소 참조 */
|
|
2055
|
+
ref?: React$1.Ref<HTMLButtonElement>;
|
|
2056
|
+
}
|
|
2057
|
+
/**
|
|
2058
|
+
* 토글을 렌더링한다.
|
|
2059
|
+
* 제어형/비제어형 상태를 판별해 토글 로직을 수행하고 버튼 형태의 토글 UI를 반환한다.
|
|
2060
|
+
* @param props 토글 속성
|
|
2061
|
+
* @returns 렌더링된 토글 요소
|
|
2062
|
+
*/
|
|
2063
|
+
declare const Toggle: {
|
|
2064
|
+
({ checked, defaultChecked, onCheckedChange, onChange, size, disabled, className, ariaLabel, ref, ...props }: ToggleProps): React$1.JSX.Element;
|
|
2065
|
+
displayName: string;
|
|
2066
|
+
};
|
|
2067
|
+
|
|
2068
|
+
type ButtonVariant = "filled" | "tonal" | "outline" | "text";
|
|
2069
|
+
type ButtonSize = "sm" | "md" | "lg" | "xl";
|
|
2070
|
+
/** button/anchor 공통 스타일·콘텐츠 props */
|
|
2071
|
+
interface ButtonBaseProps {
|
|
2072
|
+
/** 버튼 스타일 변형 (기본값: "filled") */
|
|
2073
|
+
variant?: ButtonVariant;
|
|
2074
|
+
/** 버튼 크기 (기본값: "md") */
|
|
2075
|
+
size?: ButtonSize;
|
|
2076
|
+
/** 버튼 앞에 표시할 아이콘 */
|
|
2077
|
+
leadingIcon?: React$1.ReactNode;
|
|
2078
|
+
/** 버튼 뒤에 표시할 아이콘 */
|
|
2079
|
+
trailingIcon?: React$1.ReactNode;
|
|
2080
|
+
/** 버튼이 컨테이너의 전체 너비를 차지할지 여부 */
|
|
2081
|
+
fullWidth?: boolean;
|
|
2082
|
+
/** border-radius 토큰 (기본값: "full") */
|
|
2083
|
+
radius?: "none" | "xs" | "sm" | "md" | "lg" | "xl" | "full";
|
|
2084
|
+
/**
|
|
2085
|
+
* 위험한 액션 (삭제/취소 등) - 빨간 강조.
|
|
2086
|
+
* filled: 빨간 bg, outline: 빨간 텍스트/border, tonal: 빨간 wash.
|
|
2087
|
+
*/
|
|
2088
|
+
danger?: boolean;
|
|
2089
|
+
/**
|
|
2090
|
+
* 비활성화. button 은 native `disabled`, anchor 는 `aria-disabled`+`tabIndex=-1`+
|
|
2091
|
+
* 클릭 차단으로 처리(anchor 엔 native disabled 가 없으므로).
|
|
2092
|
+
*/
|
|
2093
|
+
disabled?: boolean;
|
|
2094
|
+
}
|
|
2095
|
+
/** `<button>` 으로 렌더링 (기본) */
|
|
2096
|
+
interface ButtonAsButton extends ButtonBaseProps, Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, keyof ButtonBaseProps> {
|
|
2097
|
+
/** 렌더링할 요소 (기본값: "button") */
|
|
2098
|
+
as?: "button";
|
|
2099
|
+
/** button 렌더 시엔 href 를 허용하지 않음 (href 만 주면 anchor 로 분기되도록) */
|
|
2100
|
+
href?: never;
|
|
2101
|
+
/** 루트 button 요소 ref (React 19 ref-as-prop) */
|
|
2102
|
+
ref?: React$1.Ref<HTMLButtonElement>;
|
|
2103
|
+
}
|
|
2104
|
+
/** `<a>` 로 렌더링 - 링크 시맨틱(우클릭 새 탭·미들클릭·SR 링크 안내) */
|
|
2105
|
+
interface ButtonAsAnchor extends ButtonBaseProps, Omit<React$1.AnchorHTMLAttributes<HTMLAnchorElement>, keyof ButtonBaseProps> {
|
|
2106
|
+
/** anchor 로 렌더링 - 생략 가능(href 만 줘도 anchor 로 분기) */
|
|
2107
|
+
as?: "a";
|
|
2108
|
+
/** 링크 대상 (anchor 필수) */
|
|
2109
|
+
href: string;
|
|
2110
|
+
/** 루트 anchor 요소 ref (React 19 ref-as-prop) */
|
|
2111
|
+
ref?: React$1.Ref<HTMLAnchorElement>;
|
|
2112
|
+
}
|
|
2113
|
+
/**
|
|
2114
|
+
* Button props - `as`/`href` 에 따라 button 또는 anchor 로 렌더링되는 discriminated union.
|
|
2115
|
+
* `as` 미지정 시 기본 `<button>` (기존 동작과 100% 호환).
|
|
2116
|
+
*/
|
|
2117
|
+
type ButtonProps = ButtonAsButton | ButtonAsAnchor;
|
|
2118
|
+
/**
|
|
2119
|
+
* 버튼을 렌더링한다.
|
|
2120
|
+
* Figma DS 기준 4가지 variant(filled/tonal/outline/text)와 4가지 size(sm/md/lg/xl)를 지원한다.
|
|
2121
|
+
* `as="a"` (또는 `href` 지정) 시 동일 스타일의 anchor 로 렌더링한다.
|
|
2122
|
+
* @param props 버튼 속성
|
|
2123
|
+
* @returns 렌더링된 button 또는 anchor 요소
|
|
2124
|
+
*/
|
|
2125
|
+
declare const Button: (props: ButtonProps) => React$1.JSX.Element;
|
|
2126
|
+
|
|
2127
|
+
type IconButtonVariant = "standard" | "filled" | "tonal" | "outlined";
|
|
2128
|
+
type IconButtonSize = "sm" | "md";
|
|
2129
|
+
interface IconButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
2130
|
+
/** 아이콘 버튼 스타일 변형 (기본값: "standard") */
|
|
2131
|
+
variant?: IconButtonVariant;
|
|
2132
|
+
/** 아이콘 버튼 크기 (기본값: "md") */
|
|
2133
|
+
size?: IconButtonSize;
|
|
2134
|
+
/** 표시할 아이콘 */
|
|
2135
|
+
icon: React$1.ReactNode;
|
|
2136
|
+
/** 루트 button 요소 ref (React 19 ref-as-prop) */
|
|
2137
|
+
ref?: React$1.Ref<HTMLButtonElement>;
|
|
2138
|
+
}
|
|
2139
|
+
/**
|
|
2140
|
+
* 아이콘만 표시하는 버튼을 렌더링한다.
|
|
2141
|
+
* Figma DS 기준 4가지 variant(standard/filled/tonal/outlined)와 2가지 size(sm/md)를 지원한다.
|
|
2142
|
+
* @param props 아이콘 버튼 속성
|
|
2143
|
+
* @returns 렌더링된 아이콘 버튼 요소
|
|
2144
|
+
*/
|
|
2145
|
+
declare const IconButton: ({ variant, size, icon, type, ref, className, ...props }: IconButtonProps) => React$1.JSX.Element;
|
|
2146
|
+
|
|
2147
|
+
interface PaginationBaseProps {
|
|
2148
|
+
/** 현재 페이지 번호 (1-based) */
|
|
2149
|
+
page: number;
|
|
2150
|
+
/** 전체 페이지 수 */
|
|
2151
|
+
totalPages: number;
|
|
2152
|
+
/** 이전 페이지 버튼 aria-label (기본값: "Previous page") */
|
|
2153
|
+
prevLabel?: string;
|
|
2154
|
+
/** 다음 페이지 버튼 aria-label (기본값: "Next page") */
|
|
2155
|
+
nextLabel?: string;
|
|
2156
|
+
}
|
|
2157
|
+
type PaginationCallbacks = {
|
|
2158
|
+
onPageChange: (page: number) => void;
|
|
2159
|
+
onChange?: (page: number) => void;
|
|
2160
|
+
} | {
|
|
2161
|
+
onPageChange?: (page: number) => void;
|
|
2162
|
+
onChange: (page: number) => void;
|
|
2163
|
+
};
|
|
2164
|
+
type PaginationProps = PaginationBaseProps & PaginationCallbacks;
|
|
2165
|
+
/**
|
|
2166
|
+
* 페이지네이션을 렌더링한다.
|
|
2167
|
+
* 이전/다음 버튼과 페이지 목록을 구성해 전달된 콜백으로 페이지 변경을 전달한다.
|
|
2168
|
+
* @param props 페이지네이션 속성
|
|
2169
|
+
* @returns 렌더링된 페이지네이션 UI
|
|
2170
|
+
*/
|
|
2171
|
+
declare const Pagination: ({ page, totalPages, onPageChange, onChange, prevLabel, nextLabel, }: PaginationProps) => React$1.JSX.Element;
|
|
2172
|
+
|
|
2173
|
+
/** Drawer 가 미끄러져 들어오는 방향 (top 은 범위 외) */
|
|
2174
|
+
type DrawerPlacement = "left" | "right" | "bottom";
|
|
2175
|
+
interface DrawerProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title" | "onClick" | "onKeyDown" | "role"> {
|
|
2176
|
+
/** 드로어 열림 여부 */
|
|
2177
|
+
open: boolean;
|
|
2178
|
+
/** 드로어 닫기 콜백 */
|
|
2179
|
+
onClose?: () => void;
|
|
2180
|
+
/** 슬라이드 방향 (기본값: "right") */
|
|
2181
|
+
placement?: DrawerPlacement;
|
|
2182
|
+
/** 패널 크기 - left/right 는 너비, bottom 은 높이 (기본값: 360). number ⇒ px */
|
|
2183
|
+
size?: number | string;
|
|
2184
|
+
/** 드로어 제목 (헤더 h2, heading_small_bold) */
|
|
2185
|
+
title?: React$1.ReactNode;
|
|
2186
|
+
/** 하단 액션 영역 (Button들). 미지정 시 footer 영역 자체가 안 보임 */
|
|
2187
|
+
footer?: React$1.ReactNode;
|
|
2188
|
+
/** 오버레이 클릭 시 닫기 여부 (기본값: true) */
|
|
2189
|
+
closeOnOverlay?: boolean;
|
|
2190
|
+
/** 우상단 X 닫기 아이콘 표시 여부 (기본값: true) */
|
|
2191
|
+
showCloseIcon?: boolean;
|
|
2192
|
+
/** X 닫기 버튼 접근성 레이블 (기본값: "닫기") */
|
|
2193
|
+
closeLabel?: string;
|
|
2194
|
+
/** 드로어 접근성 레이블 (title 없을 때 사용, 기본값: "Dialog") */
|
|
2195
|
+
ariaLabel?: string;
|
|
2196
|
+
}
|
|
2197
|
+
/**
|
|
2198
|
+
* 화면 가장자리에서 미끄러져 들어오는 패널(Drawer)을 렌더링한다.
|
|
2199
|
+
* react-spring 기반 방향별 슬라이드 진입/퇴출 + 포커스 트랩 + 바디 스크롤 잠금.
|
|
2106
2200
|
*
|
|
2107
|
-
* @
|
|
2108
|
-
*
|
|
2109
|
-
* <Textarea label="내용" minRows={3} maxRows={8} maxLength={500} showCounter
|
|
2110
|
-
* onChangeAction={(v) => setContent(v)} />
|
|
2111
|
-
* ```
|
|
2201
|
+
* @param props 드로어 속성
|
|
2202
|
+
* @returns 열림 상태일 때 렌더링된 드로어, 닫힘 상태면 null
|
|
2112
2203
|
*/
|
|
2113
|
-
declare const
|
|
2114
|
-
({
|
|
2204
|
+
declare const Drawer: {
|
|
2205
|
+
({ open, onClose, placement, size, title, footer, closeOnOverlay, showCloseIcon, closeLabel, ariaLabel, children, className, ...props }: DrawerProps): React$1.ReactPortal | null;
|
|
2115
2206
|
displayName: string;
|
|
2116
2207
|
};
|
|
2117
2208
|
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2209
|
+
type ModalFooterAlign = "end" | "between" | "start";
|
|
2210
|
+
interface ModalProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title" | "onClick" | "onKeyDown" | "role"> {
|
|
2211
|
+
/** 모달 열림 여부 */
|
|
2212
|
+
open: boolean;
|
|
2213
|
+
/** 모달 닫기 콜백 */
|
|
2214
|
+
onClose?: () => void;
|
|
2215
|
+
/** 오버레이 클릭 시 닫기 여부 (기본값: true) */
|
|
2216
|
+
closeOnOverlay?: boolean;
|
|
2217
|
+
/** 모달 패널 너비 (기본값: 480) */
|
|
2218
|
+
width?: number | string;
|
|
2219
|
+
/** 모달 제목 (h2, heading_large_bold) */
|
|
2220
|
+
title?: React$1.ReactNode;
|
|
2221
|
+
/** 제목 아래 본문 설명 - paragraph로 자동 wrap */
|
|
2222
|
+
description?: React$1.ReactNode;
|
|
2223
|
+
/** 하단 액션 영역 (Button들). 미지정 시 footer 영역 자체가 안 보임 */
|
|
2224
|
+
footer?: React$1.ReactNode;
|
|
2225
|
+
/** Footer 정렬 (기본값: "end"). between은 좌우 분리 패턴 (destructive 액션 등) */
|
|
2226
|
+
footerAlign?: ModalFooterAlign;
|
|
2227
|
+
/** 우상단 X 닫기 아이콘 표시 여부 (기본값: true) */
|
|
2228
|
+
showCloseIcon?: boolean;
|
|
2229
|
+
/** X 닫기 버튼 접근성 레이블 (기본값: "닫기") */
|
|
2230
|
+
closeLabel?: string;
|
|
2231
|
+
/** 모달 접근성 레이블(기본값: title 또는 "Dialog") */
|
|
2232
|
+
ariaLabel?: string;
|
|
2125
2233
|
}
|
|
2126
2234
|
/**
|
|
2127
|
-
*
|
|
2128
|
-
*
|
|
2129
|
-
* @param props
|
|
2130
|
-
* @returns 렌더링된
|
|
2131
|
-
*/
|
|
2132
|
-
declare const ToastProvider: ({ children, maxCount, closeAriaLabel, }: ToastProviderProps) => React$1.JSX.Element;
|
|
2133
|
-
|
|
2134
|
-
/**
|
|
2135
|
-
* 토스트 메시지를 표시하는 훅.
|
|
2136
|
-
* ToastProvider 내부에서만 사용할 수 있다.
|
|
2137
|
-
* @returns 토스트 메시지 표시 함수 객체
|
|
2235
|
+
* 모달을 렌더링한다.
|
|
2236
|
+
* react-spring 기반 진입/퇴출 모션 + 포커스 트랩 + 바디 스크롤 잠금.
|
|
2237
|
+
* @param props 모달 속성
|
|
2238
|
+
* @returns 열림 상태일 때 렌더링된 모달, 닫힘 상태면 null
|
|
2138
2239
|
*/
|
|
2139
|
-
declare const
|
|
2140
|
-
/** 성공 메시지를 표시한다 */
|
|
2141
|
-
success: (message: string, duration?: number) => void;
|
|
2142
|
-
/** 오류 메시지를 표시한다 */
|
|
2143
|
-
error: (message: string, duration?: number) => void;
|
|
2144
|
-
/** 경고 메시지를 표시한다 */
|
|
2145
|
-
warning: (message: string, duration?: number) => void;
|
|
2146
|
-
/** 정보 메시지를 표시한다 */
|
|
2147
|
-
info: (message: string, duration?: number) => void;
|
|
2148
|
-
/** 기본 메시지를 표시한다 */
|
|
2149
|
-
message: (message: string, duration?: number) => void;
|
|
2150
|
-
};
|
|
2240
|
+
declare const Modal: ({ open, onClose, closeOnOverlay, width, title, description, footer, footerAlign, showCloseIcon, closeLabel, children, className, ariaLabel, ...props }: ModalProps) => React$1.ReactPortal | null;
|
|
2151
2241
|
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
|
|
2155
|
-
/**
|
|
2156
|
-
|
|
2157
|
-
/**
|
|
2158
|
-
|
|
2159
|
-
/**
|
|
2160
|
-
|
|
2161
|
-
/** 토글 크기 (기본값: "sm") */
|
|
2162
|
-
size?: "sm" | "md";
|
|
2163
|
-
/** 비활성화 여부 */
|
|
2164
|
-
disabled?: boolean;
|
|
2165
|
-
/** 토글 접근성 레이블(스크린 리더용) */
|
|
2166
|
-
ariaLabel: string;
|
|
2167
|
-
/** 버튼 요소 참조 */
|
|
2168
|
-
ref?: React$1.Ref<HTMLButtonElement>;
|
|
2242
|
+
type ThemeMode = "light" | "dark" | "system";
|
|
2243
|
+
type ResolvedTheme = "light" | "dark";
|
|
2244
|
+
interface ThemeContextValue {
|
|
2245
|
+
/** 현재 선택된 모드 (system 포함) */
|
|
2246
|
+
mode: ThemeMode;
|
|
2247
|
+
/** 실제로 적용된 테마 (system은 prefers-color-scheme으로 해석됨) */
|
|
2248
|
+
resolved: ResolvedTheme;
|
|
2249
|
+
/** 모드 변경 */
|
|
2250
|
+
setMode: (mode: ThemeMode) => void;
|
|
2169
2251
|
}
|
|
2170
2252
|
/**
|
|
2171
|
-
*
|
|
2172
|
-
*
|
|
2173
|
-
* @param props 토글 속성
|
|
2174
|
-
* @returns 렌더링된 토글 요소
|
|
2253
|
+
* ThemeProvider 안에서 호출. mode/resolved/setMode를 반환.
|
|
2254
|
+
* Provider 외부에서 호출하면 에러를 던진다.
|
|
2175
2255
|
*/
|
|
2176
|
-
declare const
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
/**
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
color?: string;
|
|
2186
|
-
/** 로딩바 높이 (기본: 3px) */
|
|
2187
|
-
height?: number;
|
|
2188
|
-
/** 표시 여부 */
|
|
2189
|
-
isLoading?: boolean;
|
|
2190
|
-
/** 프로그레스 바의 접근성 레이블 (기본값: "Page loading") */
|
|
2191
|
-
ariaLabel?: string;
|
|
2256
|
+
declare const useTheme: () => ThemeContextValue;
|
|
2257
|
+
interface ThemeProviderProps {
|
|
2258
|
+
/** 초기 테마 (기본값: "system") */
|
|
2259
|
+
defaultMode?: ThemeMode;
|
|
2260
|
+
/** localStorage 키 (기본값: "bt-theme"). null이면 저장 안 함 */
|
|
2261
|
+
storageKey?: string | null;
|
|
2262
|
+
/** 적용 대상 element selector (기본값: document.documentElement) */
|
|
2263
|
+
targetSelector?: string;
|
|
2264
|
+
children: React$1.ReactNode;
|
|
2192
2265
|
}
|
|
2193
2266
|
/**
|
|
2194
|
-
*
|
|
2195
|
-
*
|
|
2196
|
-
*
|
|
2197
|
-
* @
|
|
2267
|
+
* Bigtablet DS 테마 컨텍스트를 제공한다.
|
|
2268
|
+
* `data-theme` attribute를 root element에 적용해서 CSS 변수 레이어를 전환한다.
|
|
2269
|
+
*
|
|
2270
|
+
* @example
|
|
2271
|
+
* ```tsx
|
|
2272
|
+
* <ThemeProvider defaultMode="system">
|
|
2273
|
+
* <App />
|
|
2274
|
+
* </ThemeProvider>
|
|
2275
|
+
* ```
|
|
2198
2276
|
*/
|
|
2199
|
-
declare const
|
|
2277
|
+
declare const ThemeProvider: React$1.FC<ThemeProviderProps>;
|
|
2200
2278
|
|
|
2201
2279
|
type ContainerSize = "sm" | "md" | "lg" | "xl" | "full";
|
|
2202
2280
|
interface ContainerProps extends React$1.HTMLAttributes<HTMLDivElement> {
|
|
@@ -2227,6 +2305,54 @@ interface ContainerProps extends React$1.HTMLAttributes<HTMLDivElement> {
|
|
|
2227
2305
|
*/
|
|
2228
2306
|
declare const Container: ({ size, center, as: Tag, ref, className, children, ...props }: ContainerProps) => React$1.JSX.Element;
|
|
2229
2307
|
|
|
2308
|
+
type GridCols = 1 | 2 | 3 | 4 | 5 | 6 | "auto";
|
|
2309
|
+
type GridGap = 0 | 4 | 8 | 12 | 16 | 20 | 24 | 32 | 40 | 48;
|
|
2310
|
+
interface GridProps extends React$1.HTMLAttributes<HTMLDivElement> {
|
|
2311
|
+
/**
|
|
2312
|
+
* 열 수. "auto" = auto-fill (minColWidth 사용)
|
|
2313
|
+
* @default 3
|
|
2314
|
+
*/
|
|
2315
|
+
cols?: GridCols;
|
|
2316
|
+
/**
|
|
2317
|
+
* auto-fill 모드일 때 최소 열 너비
|
|
2318
|
+
* @default "280px"
|
|
2319
|
+
*/
|
|
2320
|
+
minColWidth?: string;
|
|
2321
|
+
/**
|
|
2322
|
+
* 아이템 간격 (px). gap과 rowGap/colGap 동시 적용.
|
|
2323
|
+
* @default 24
|
|
2324
|
+
*/
|
|
2325
|
+
gap?: GridGap;
|
|
2326
|
+
/** 행 간격 (gap을 override) */
|
|
2327
|
+
rowGap?: GridGap;
|
|
2328
|
+
/** 열 간격 (gap을 override) */
|
|
2329
|
+
colGap?: GridGap;
|
|
2330
|
+
/** 반응형 - compact(< 600px)에서 강제 1열 (기본 true) */
|
|
2331
|
+
singleColOnMobile?: boolean;
|
|
2332
|
+
/** 렌더링할 HTML 요소 */
|
|
2333
|
+
as?: React$1.ElementType;
|
|
2334
|
+
/** 루트 요소 ref (React 19 ref-as-prop) */
|
|
2335
|
+
ref?: React$1.Ref<HTMLElement>;
|
|
2336
|
+
}
|
|
2337
|
+
/**
|
|
2338
|
+
* CSS Grid 기반 2D 레이아웃 컨테이너.
|
|
2339
|
+
* 고정 열 수 또는 auto-fill 반응형 그리드.
|
|
2340
|
+
*
|
|
2341
|
+
* @example
|
|
2342
|
+
* ```tsx
|
|
2343
|
+
* // 3열 고정
|
|
2344
|
+
* <Grid cols={3} gap={24}>
|
|
2345
|
+
* <Card /><Card /><Card />
|
|
2346
|
+
* </Grid>
|
|
2347
|
+
*
|
|
2348
|
+
* // auto-fill (최소 280px)
|
|
2349
|
+
* <Grid cols="auto" minColWidth="280px" gap={16}>
|
|
2350
|
+
* {products.map(p => <MediaCard key={p.id} {...p} />)}
|
|
2351
|
+
* </Grid>
|
|
2352
|
+
* ```
|
|
2353
|
+
*/
|
|
2354
|
+
declare const Grid: ({ cols, minColWidth, gap, rowGap, colGap, singleColOnMobile, as: Tag, ref, className, children, style, ...props }: GridProps) => React$1.JSX.Element;
|
|
2355
|
+
|
|
2230
2356
|
type SectionSpacing = "xs" | "sm" | "md" | "lg" | "xl";
|
|
2231
2357
|
type SectionBg = "default" | "dim" | "accent" | "inverted" | "transparent";
|
|
2232
2358
|
interface SectionProps extends React$1.HTMLAttributes<HTMLElement> {
|
|
@@ -2308,52 +2434,4 @@ interface StackProps extends React$1.HTMLAttributes<HTMLDivElement> {
|
|
|
2308
2434
|
*/
|
|
2309
2435
|
declare const Stack: ({ direction, gap, align, justify, wrap, as: Tag, ref, className, children, style, ...props }: StackProps) => React$1.JSX.Element;
|
|
2310
2436
|
|
|
2311
|
-
type GridCols
|
|
2312
|
-
type GridGap = 0 | 4 | 8 | 12 | 16 | 20 | 24 | 32 | 40 | 48;
|
|
2313
|
-
interface GridProps extends React$1.HTMLAttributes<HTMLDivElement> {
|
|
2314
|
-
/**
|
|
2315
|
-
* 열 수. "auto" = auto-fill (minColWidth 사용)
|
|
2316
|
-
* @default 3
|
|
2317
|
-
*/
|
|
2318
|
-
cols?: GridCols;
|
|
2319
|
-
/**
|
|
2320
|
-
* auto-fill 모드일 때 최소 열 너비
|
|
2321
|
-
* @default "280px"
|
|
2322
|
-
*/
|
|
2323
|
-
minColWidth?: string;
|
|
2324
|
-
/**
|
|
2325
|
-
* 아이템 간격 (px). gap과 rowGap/colGap 동시 적용.
|
|
2326
|
-
* @default 24
|
|
2327
|
-
*/
|
|
2328
|
-
gap?: GridGap;
|
|
2329
|
-
/** 행 간격 (gap을 override) */
|
|
2330
|
-
rowGap?: GridGap;
|
|
2331
|
-
/** 열 간격 (gap을 override) */
|
|
2332
|
-
colGap?: GridGap;
|
|
2333
|
-
/** 반응형 - compact(< 600px)에서 강제 1열 (기본 true) */
|
|
2334
|
-
singleColOnMobile?: boolean;
|
|
2335
|
-
/** 렌더링할 HTML 요소 */
|
|
2336
|
-
as?: React$1.ElementType;
|
|
2337
|
-
/** 루트 요소 ref (React 19 ref-as-prop) */
|
|
2338
|
-
ref?: React$1.Ref<HTMLElement>;
|
|
2339
|
-
}
|
|
2340
|
-
/**
|
|
2341
|
-
* CSS Grid 기반 2D 레이아웃 컨테이너.
|
|
2342
|
-
* 고정 열 수 또는 auto-fill 반응형 그리드.
|
|
2343
|
-
*
|
|
2344
|
-
* @example
|
|
2345
|
-
* ```tsx
|
|
2346
|
-
* // 3열 고정
|
|
2347
|
-
* <Grid cols={3} gap={24}>
|
|
2348
|
-
* <Card /><Card /><Card />
|
|
2349
|
-
* </Grid>
|
|
2350
|
-
*
|
|
2351
|
-
* // auto-fill (최소 280px)
|
|
2352
|
-
* <Grid cols="auto" minColWidth="280px" gap={16}>
|
|
2353
|
-
* {products.map(p => <MediaCard key={p.id} {...p} />)}
|
|
2354
|
-
* </Grid>
|
|
2355
|
-
* ```
|
|
2356
|
-
*/
|
|
2357
|
-
declare const Grid: ({ cols, minColWidth, gap, rowGap, colGap, singleColOnMobile, as: Tag, ref, className, children, style, ...props }: GridProps) => React$1.JSX.Element;
|
|
2358
|
-
|
|
2359
|
-
export { Accordion, type AccordionItem, type AccordionProps, AlertProvider, Avatar, type AvatarProps, type AvatarShape, type AvatarSize, Badge, type BadgeProps, type BadgeShape, type BadgeSize, type BadgeVariant, BottomNav, BottomNavItem, type BottomNavItemProps, type BottomNavProps, BottomNavSpacer, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, Button, type ButtonProps, Card, type CardFooterAlign, type CardProps, type CardVariant, Checkbox, type CheckboxProps, Chip, type ChipProps, type ChipSize, type ChipTone, type ChipType, Container, type ContainerProps, type ContainerSize, DatePicker, type DatePickerProps, Divider, type DividerProps, Drawer, type DrawerPlacement, type DrawerProps, Dropdown, type DropdownOption, type DropdownProps, type DropdownSize, EmptyState, type EmptyStateProps, ErrorState, type ErrorStateProps, type ErrorStateVariant, FileInput, type FileInputProps, Grid, type GridCols, type GridGap, type GridProps, Hero, type HeroAction, type HeroAlign, type HeroHeight, type HeroOverlay, type HeroProps, Icon, IconButton, type IconButtonProps, type IconButtonSize, type IconButtonVariant, type IconProps, type ImeStrategy, LinearProgress, type LinearProgressProps, ListItem, type ListItemProps, MediaCard, type MediaCardImage, type MediaCardImagePosition, type MediaCardProps, type MediaCardShadow, Menu, type MenuItem, type MenuProps, Modal, type ModalProps, NavBar, type NavBarLayout, type NavBarLocaleConfig, type NavBarLocaleOption, type NavBarProps, type NavBarVariant, NavLink, type NavLinkProps, OtpInput, type OtpInputProps, Pagination, type PaginationProps, Popover, type PopoverPlacement, type PopoverProps, Radio, RadioGroup, type RadioGroupOrientation, type RadioGroupProps, type RadioGroupSize, type RadioProps, type ResolvedTheme, Section, type SectionBg, type SectionProps, type SectionSpacing, Sidebar, SidebarItem, type SidebarItemProps, type SidebarMode, type SidebarProps, SidebarSection, type SidebarSectionProps, Skeleton, type SkeletonProps, type SkeletonVariant, Spinner, type SpinnerProps, Stack, type StackAlign, type StackDirection, type StackGap, type StackJustify, type StackProps, type StackWrap, Tab, TabList, type TabListProps, TabPanel, type TabPanelProps, type TabProps, Table, type TableColumn, type TableProps, type TableSize, type TableSort, type TableSortDirection, Tabs, type TabsProps, type TabsSize, type TabsVariant, TextField, type TextFieldProps, type TextFieldSize, Textarea, type TextareaProps, type TextareaResize, type TextareaSize, type ThemeMode, ThemeProvider, type ThemeProviderProps, ToastProvider, Toggle, type ToggleProps, Tooltip, type TooltipPlacement, type TooltipProps, TopLoading, type TopLoadingProps, a11y, baseBorderWidth, baseColors, baseTypography, borderWidth, breakpoints, cn, colors, elevation, iconSize, motion, opacity, radius, skeleton, spacing, typography, useAlert, useFocusTrap, useReducedMotion, useSpringHover, useSpringPresence, useTheme, useToast, zIndex };
|
|
2437
|
+
export { Accordion, type AccordionItem, type AccordionProps, AlertProvider, Avatar, type AvatarProps, type AvatarShape, type AvatarSize, Badge, type BadgeProps, type BadgeShape, type BadgeSize, type BadgeVariant, BottomNav, BottomNavItem, type BottomNavItemProps, type BottomNavProps, BottomNavSpacer, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, Button, type ButtonProps, Card, type CardFooterAlign, type CardProps, type CardVariant, Checkbox, type CheckboxProps, Chip, type ChipProps, type ChipSize, type ChipTone, type ChipType, Container, type ContainerProps, type ContainerSize, type CropImageSize, type CropOffset, type CropRect, DatePicker, type DatePickerProps, Divider, type DividerProps, Drawer, type DrawerPlacement, type DrawerProps, Dropdown, type DropdownOption, type DropdownProps, type DropdownSize, EmptyState, type EmptyStateProps, ErrorState, type ErrorStateProps, type ErrorStateVariant, FileInput, type FileInputProps, Grid, type GridCols, type GridGap, type GridProps, Hero, type HeroAction, type HeroAlign, type HeroHeight, type HeroOverlay, type HeroProps, Icon, IconButton, type IconButtonProps, type IconButtonSize, type IconButtonVariant, type IconProps, ImageCropper, type ImageCropperHandle, type ImageCropperProps, type ImeStrategy, LinearProgress, type LinearProgressProps, ListItem, type ListItemProps, MediaCard, type MediaCardImage, type MediaCardImagePosition, type MediaCardProps, type MediaCardShadow, Menu, type MenuItem, type MenuProps, Modal, type ModalProps, NavBar, type NavBarLayout, type NavBarLocaleConfig, type NavBarLocaleOption, type NavBarProps, type NavBarVariant, NavLink, type NavLinkProps, OtpInput, type OtpInputProps, Pagination, type PaginationProps, Popover, type PopoverPlacement, type PopoverProps, Radio, RadioGroup, type RadioGroupOrientation, type RadioGroupProps, type RadioGroupSize, type RadioProps, type ResolvedTheme, Section, type SectionBg, type SectionProps, type SectionSpacing, Sidebar, SidebarItem, type SidebarItemProps, type SidebarMode, type SidebarProps, SidebarSection, type SidebarSectionProps, Skeleton, type SkeletonProps, type SkeletonVariant, Spinner, type SpinnerProps, Stack, type StackAlign, type StackDirection, type StackGap, type StackJustify, type StackProps, type StackWrap, Tab, TabList, type TabListProps, TabPanel, type TabPanelProps, type TabProps, Table, type TableColumn, type TableProps, type TableSize, type TableSort, type TableSortDirection, Tabs, type TabsProps, type TabsSize, type TabsVariant, TextField, type TextFieldProps, type TextFieldSize, Textarea, type TextareaProps, type TextareaResize, type TextareaSize, type ThemeMode, ThemeProvider, type ThemeProviderProps, ToastProvider, Toggle, type ToggleProps, Tooltip, type TooltipPlacement, type TooltipProps, TopLoading, type TopLoadingProps, a11y, baseBorderWidth, baseColors, baseTypography, borderWidth, breakpoints, cn, colors, elevation, iconSize, motion, opacity, radius, skeleton, spacing, typography, useAlert, useFocusTrap, useReducedMotion, useSpringHover, useSpringPresence, useTheme, useToast, zIndex };
|