@bigtablet/design-system 1.23.0 → 1.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,96 +1,94 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
 
4
- declare const colors: {
5
- readonly primary: "#000000";
6
- readonly primaryHover: "#333333";
7
- readonly background: "#ffffff";
8
- readonly backgroundSecondary: "#fafafa";
9
- readonly backgroundNeutral: "#f3f3f3";
10
- readonly backgroundMuted: "#f0f0f0";
11
- readonly textPrimary: "#1a1a1a";
12
- readonly textSecondary: "#666666";
13
- readonly textTertiary: "#999999";
14
- readonly border: "#e5e5e5";
15
- readonly borderLight: "rgba(0, 0, 0, 0.08)";
16
- readonly success: "#10b981";
17
- readonly error: "#ef4444";
18
- readonly warning: "#f59e0b";
19
- readonly info: "#3b82f6";
20
- readonly overlay: "rgba(0, 0, 0, 0.5)";
21
- readonly hoverSubtle: "rgba(0, 0, 0, 0.03)";
22
- readonly hoverLight: "rgba(0, 0, 0, 0.05)";
23
- readonly textStrong: "#1F2937";
24
- readonly textNormal: "#3B3B3B";
25
- readonly textSubtle: "#6B7280";
26
- readonly textDisabled: "#9CA3AF";
27
- readonly textInverse: "#FFFFFF";
4
+ declare const a11y: {
5
+ readonly focusRing: "0 0 0 3px rgba(0, 0, 0, 0.15)";
6
+ readonly focusRingError: "0 0 0 3px rgba(239, 68, 68, 0.15)";
7
+ readonly focusRingSuccess: "0 0 0 3px rgba(16, 185, 129, 0.15)";
8
+ readonly tapMinSize: "44px";
28
9
  };
29
10
 
30
- declare const spacing: {
31
- readonly xs: "0.25rem";
32
- readonly sm: "0.5rem";
33
- readonly md: "0.75rem";
34
- readonly lg: "1rem";
35
- readonly xl: "1.25rem";
36
- readonly "2xl": "1.5rem";
37
- readonly "3xl": "2rem";
38
- readonly "4xl": "2.5rem";
39
- readonly "5xl": "3rem";
11
+ declare const baseBorderWidth: {
12
+ readonly "0": "0px";
13
+ readonly "1": "1px";
14
+ readonly "2": "2px";
15
+ };
16
+ declare const borderWidth: {
17
+ readonly none: "0px";
18
+ readonly standard: "1px";
19
+ readonly indicator: "2px";
40
20
  };
41
21
 
42
- declare const typography: {
43
- readonly fontFamily: {
44
- readonly primary: "'Pretendard', sans-serif";
22
+ declare const breakpoints: {
23
+ readonly compact: 0;
24
+ readonly medium: 600;
25
+ readonly expanded: 840;
26
+ readonly large: 1200;
27
+ };
28
+
29
+ declare const baseColors: {
30
+ readonly brandPrimary: "#121212";
31
+ readonly blue600: "#1A73E8";
32
+ readonly neutral0: "#FFFFFF";
33
+ readonly neutral50: "#F4F4F4";
34
+ readonly neutral200: "#E5E5E5";
35
+ readonly neutral300: "#999999";
36
+ readonly neutral400: "#B3B3B3";
37
+ readonly neutral500: "#888888";
38
+ readonly neutral700: "#666666";
39
+ readonly neutral900: "#121212";
40
+ readonly statusError: "#EF4444";
41
+ readonly statusSuccess: "#10B981";
42
+ readonly statusWarning: "#F59E0B";
43
+ readonly statusInfo: "#3B82F6";
44
+ readonly alphaBlack5: "rgba(0, 0, 0, 0.05)";
45
+ readonly alphaBlack8: "rgba(0, 0, 0, 0.08)";
46
+ readonly alphaBlack12: "rgba(26, 26, 26, 0.12)";
47
+ readonly alphaBlack38: "rgba(26, 26, 26, 0.38)";
48
+ readonly alphaBlack50: "rgba(0, 0, 0, 0.50)";
49
+ readonly alphaWhite5: "rgba(255, 255, 255, 0.05)";
50
+ readonly alphaWhite8: "rgba(255, 255, 255, 0.08)";
51
+ readonly alphaWhite12: "rgba(255, 255, 255, 0.12)";
52
+ };
53
+ declare const colors: {
54
+ readonly brand: {
55
+ readonly primary: "#121212";
56
+ readonly onPrimary: "#FFFFFF";
45
57
  };
46
- readonly fontSize: {
47
- readonly xs: "0.75rem";
48
- readonly sm: "0.875rem";
49
- readonly base: "0.9375rem";
50
- readonly md: "1rem";
51
- readonly lg: "1.125rem";
52
- readonly xl: "1.25rem";
53
- readonly "2xl": "1.5rem";
54
- readonly "3xl": "2rem";
55
- readonly "4xl": "2.5rem";
58
+ readonly text: {
59
+ readonly heading: "#121212";
60
+ readonly body: "#666666";
61
+ readonly caption: "#888888";
62
+ readonly brand: "#121212";
63
+ readonly inverse: "#FFFFFF";
64
+ readonly disabled: "rgba(26, 26, 26, 0.38)";
56
65
  };
57
- readonly fontWeight: {
58
- readonly thin: 100;
59
- readonly extralight: 200;
60
- readonly light: 300;
61
- readonly regular: 400;
62
- readonly medium: 500;
63
- readonly semibold: 600;
64
- readonly bold: 700;
65
- readonly extrabold: 800;
66
- readonly black: 900;
66
+ readonly bg: {
67
+ readonly solid: "#FFFFFF";
68
+ readonly solidDim: "#F4F4F4";
69
+ readonly additive: "rgba(0, 0, 0, 0.05)";
70
+ readonly disabled: "rgba(26, 26, 26, 0.12)";
71
+ readonly overlay: "rgba(0, 0, 0, 0.50)";
67
72
  };
68
- readonly lineHeight: {
69
- readonly tight: 1.25;
70
- readonly snug: 1.3;
71
- readonly normal: 1.5;
72
- readonly relaxed: 1.75;
73
+ readonly state: {
74
+ readonly hoverOnLight: "rgba(0, 0, 0, 0.05)";
75
+ readonly pressedOnLight: "rgba(26, 26, 26, 0.12)";
76
+ readonly hoverOnDark: "rgba(255, 255, 255, 0.05)";
77
+ readonly pressedOnDark: "rgba(255, 255, 255, 0.12)";
73
78
  };
74
- readonly letterSpacing: {
75
- readonly tight: "-0.02em";
76
- readonly normal: "0";
77
- readonly wide: "0.02em";
79
+ readonly border: {
80
+ readonly default: "#E5E5E5";
81
+ readonly hover: "#B3B3B3";
82
+ readonly subtle: "rgba(0, 0, 0, 0.08)";
83
+ readonly focus: "#121212";
84
+ readonly disabled: "#F2F2F2";
85
+ };
86
+ readonly status: {
87
+ readonly error: "#EF4444";
88
+ readonly success: "#10B981";
89
+ readonly warning: "#F59E0B";
90
+ readonly info: "#3B82F6";
78
91
  };
79
- };
80
-
81
- declare const radius: {
82
- readonly sm: "6px";
83
- readonly md: "8px";
84
- readonly lg: "12px";
85
- readonly xl: "16px";
86
- readonly full: "9999px";
87
- };
88
-
89
- declare const shadows: {
90
- readonly sm: "0 2px 4px rgba(0, 0, 0, 0.04)";
91
- readonly md: "0 4px 12px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.04)";
92
- readonly lg: "0 8px 20px rgba(0, 0, 0, 0.12), 0 4px 8px rgba(0, 0, 0, 0.06)";
93
- readonly xl: "0 20px 25px -5px rgba(0,0,0,0.1), 0 10px 10px -5px rgba(0,0,0,0.04)";
94
92
  };
95
93
 
96
94
  declare const motion: {
@@ -107,24 +105,55 @@ declare const motion: {
107
105
  };
108
106
  };
109
107
 
108
+ declare const opacity: {
109
+ readonly "0": 0;
110
+ readonly "5": 0.05;
111
+ readonly "8": 0.08;
112
+ readonly "12": 0.12;
113
+ readonly "16": 0.16;
114
+ readonly "38": 0.38;
115
+ readonly "50": 0.5;
116
+ readonly "80": 0.8;
117
+ readonly "90": 0.9;
118
+ readonly "100": 1;
119
+ };
120
+
121
+ declare const radius: {
122
+ readonly none: "0px";
123
+ readonly xs: "4px";
124
+ readonly sm: "6px";
125
+ readonly md: "8px";
126
+ readonly lg: "12px";
127
+ readonly xl: "16px";
128
+ readonly full: "9999px";
129
+ };
130
+
131
+ declare const shadows: {
132
+ readonly level1: "0 1px 1px -1px rgba(0, 0, 0, 0.20), 0 3px 3px 0px rgba(0, 0, 0, 0.12)";
133
+ readonly level2: "0 2px 2px -2px rgba(0, 0, 0, 0.20), 0 6px 6px 0px rgba(0, 0, 0, 0.12)";
134
+ readonly level3: "0 3px 3px -3px rgba(0, 0, 0, 0.20), 0 9px 9px 0px rgba(0, 0, 0, 0.12)";
135
+ readonly level4: "0 5px 5px -5px rgba(0, 0, 0, 0.20), 0 15px 15px 0px rgba(0, 0, 0, 0.12)";
136
+ readonly level5: "0 8px 10px -5px rgba(0, 0, 0, 0.20), 0 20px 20px 0px rgba(0, 0, 0, 0.12)";
137
+ };
138
+
110
139
  declare const skeleton: {
111
140
  readonly color: {
112
- readonly base: "#f3f3f3";
113
- readonly wave: "#f0f0f0";
114
- readonly highlight: "#fafafa";
141
+ readonly base: "#F4F4F4";
142
+ readonly wave: "#E5E5E5";
143
+ readonly highlight: "#FFFFFF";
115
144
  };
116
- readonly gradient: "linear-gradient(90deg, #f3f3f3 25%, #fafafa 37%, #f0f0f0 63%)";
145
+ readonly gradient: "linear-gradient(90deg, #F4F4F4 25%, #FFFFFF 37%, #E5E5E5 63%)";
117
146
  readonly radius: {
118
147
  readonly sm: "6px";
119
148
  readonly md: "8px";
120
149
  readonly lg: "12px";
121
150
  };
122
151
  readonly height: {
123
- readonly xs: "0.25rem";
124
- readonly sm: "0.5rem";
125
- readonly md: "0.75rem";
126
- readonly lg: "1rem";
127
- readonly xl: "1.25rem";
152
+ readonly xs: "4px";
153
+ readonly sm: "8px";
154
+ readonly md: "12px";
155
+ readonly lg: "16px";
156
+ readonly xl: "20px";
128
157
  };
129
158
  readonly animation: {
130
159
  readonly duration: "1.4s";
@@ -132,24 +161,265 @@ declare const skeleton: {
132
161
  };
133
162
  };
134
163
 
135
- declare const breakpoints: {
136
- readonly mobile: 0;
137
- readonly tablet: 768;
138
- readonly laptop: 1024;
139
- readonly desktop: 1440;
164
+ declare const spacing: {
165
+ readonly "0": "0px";
166
+ readonly "1": "1px";
167
+ readonly "2": "2px";
168
+ readonly "3": "3px";
169
+ readonly "4": "4px";
170
+ readonly "6": "6px";
171
+ readonly "8": "8px";
172
+ readonly "12": "12px";
173
+ readonly "16": "16px";
174
+ readonly "20": "20px";
175
+ readonly "24": "24px";
176
+ readonly "32": "32px";
177
+ readonly "40": "40px";
178
+ readonly "48": "48px";
140
179
  };
141
180
 
142
- declare const zIndex: {
143
- readonly loading: 9999;
144
- readonly modal: 10000;
145
- readonly toast: 10001;
181
+ declare const baseTypography: {
182
+ readonly fontFamily: {
183
+ readonly primary: "Pretendard";
184
+ };
185
+ readonly fontSize: {
186
+ readonly "12": "12px";
187
+ readonly "13": "13px";
188
+ readonly "14": "14px";
189
+ readonly "15": "15px";
190
+ readonly "16": "16px";
191
+ readonly "18": "18px";
192
+ readonly "20": "20px";
193
+ readonly "24": "24px";
194
+ readonly "28": "28px";
195
+ readonly "32": "32px";
196
+ readonly "40": "40px";
197
+ readonly "48": "48px";
198
+ };
199
+ readonly fontWeight: {
200
+ readonly regular: "Regular";
201
+ readonly medium: "Medium";
202
+ };
203
+ readonly lineHeight: {
204
+ readonly "16": "16px";
205
+ readonly "18": "18px";
206
+ readonly "20": "20px";
207
+ readonly "22-5": "22.5px";
208
+ readonly "24": "24px";
209
+ readonly "28": "28px";
210
+ readonly "32": "32px";
211
+ readonly "36": "36px";
212
+ readonly "40": "40px";
213
+ readonly "50": "50px";
214
+ readonly "60": "60px";
215
+ };
216
+ readonly letterSpacing: {
217
+ readonly normal: "0px";
218
+ };
219
+ };
220
+ declare const typography: {
221
+ readonly fontFamily: {
222
+ readonly primary: "'Pretendard', sans-serif";
223
+ };
224
+ readonly display: {
225
+ readonly large: {
226
+ readonly fontSize: "48px";
227
+ readonly fontWeight: "Regular";
228
+ readonly lineHeight: "60px";
229
+ readonly letterSpacing: "0px";
230
+ };
231
+ readonly largeMedium: {
232
+ readonly fontSize: "48px";
233
+ readonly fontWeight: "Medium";
234
+ readonly lineHeight: "60px";
235
+ readonly letterSpacing: "0px";
236
+ };
237
+ readonly medium: {
238
+ readonly fontSize: "40px";
239
+ readonly fontWeight: "Regular";
240
+ readonly lineHeight: "50px";
241
+ readonly letterSpacing: "0px";
242
+ };
243
+ readonly mediumMedium: {
244
+ readonly fontSize: "40px";
245
+ readonly fontWeight: "Medium";
246
+ readonly lineHeight: "50px";
247
+ readonly letterSpacing: "0px";
248
+ };
249
+ readonly small: {
250
+ readonly fontSize: "32px";
251
+ readonly fontWeight: "Regular";
252
+ readonly lineHeight: "40px";
253
+ readonly letterSpacing: "0px";
254
+ };
255
+ readonly smallMedium: {
256
+ readonly fontSize: "32px";
257
+ readonly fontWeight: "Medium";
258
+ readonly lineHeight: "40px";
259
+ readonly letterSpacing: "0px";
260
+ };
261
+ };
262
+ readonly heading: {
263
+ readonly large: {
264
+ readonly fontSize: "28px";
265
+ readonly fontWeight: "Regular";
266
+ readonly lineHeight: "36px";
267
+ readonly letterSpacing: "0px";
268
+ };
269
+ readonly largeMedium: {
270
+ readonly fontSize: "28px";
271
+ readonly fontWeight: "Medium";
272
+ readonly lineHeight: "36px";
273
+ readonly letterSpacing: "0px";
274
+ };
275
+ readonly medium: {
276
+ readonly fontSize: "24px";
277
+ readonly fontWeight: "Regular";
278
+ readonly lineHeight: "32px";
279
+ readonly letterSpacing: "0px";
280
+ };
281
+ readonly mediumMedium: {
282
+ readonly fontSize: "24px";
283
+ readonly fontWeight: "Medium";
284
+ readonly lineHeight: "32px";
285
+ readonly letterSpacing: "0px";
286
+ };
287
+ readonly small: {
288
+ readonly fontSize: "20px";
289
+ readonly fontWeight: "Regular";
290
+ readonly lineHeight: "28px";
291
+ readonly letterSpacing: "0px";
292
+ };
293
+ readonly smallMedium: {
294
+ readonly fontSize: "20px";
295
+ readonly fontWeight: "Medium";
296
+ readonly lineHeight: "28px";
297
+ readonly letterSpacing: "0px";
298
+ };
299
+ };
300
+ readonly title: {
301
+ readonly large: {
302
+ readonly fontSize: "18px";
303
+ readonly fontWeight: "Regular";
304
+ readonly lineHeight: "24px";
305
+ readonly letterSpacing: "0px";
306
+ };
307
+ readonly largeMedium: {
308
+ readonly fontSize: "18px";
309
+ readonly fontWeight: "Medium";
310
+ readonly lineHeight: "24px";
311
+ readonly letterSpacing: "0px";
312
+ };
313
+ readonly medium: {
314
+ readonly fontSize: "16px";
315
+ readonly fontWeight: "Regular";
316
+ readonly lineHeight: "24px";
317
+ readonly letterSpacing: "0px";
318
+ };
319
+ readonly mediumMedium: {
320
+ readonly fontSize: "16px";
321
+ readonly fontWeight: "Medium";
322
+ readonly lineHeight: "24px";
323
+ readonly letterSpacing: "0px";
324
+ };
325
+ readonly small: {
326
+ readonly fontSize: "14px";
327
+ readonly fontWeight: "Regular";
328
+ readonly lineHeight: "20px";
329
+ readonly letterSpacing: "0px";
330
+ };
331
+ readonly smallMedium: {
332
+ readonly fontSize: "14px";
333
+ readonly fontWeight: "Medium";
334
+ readonly lineHeight: "20px";
335
+ readonly letterSpacing: "0px";
336
+ };
337
+ };
338
+ readonly body: {
339
+ readonly large: {
340
+ readonly fontSize: "16px";
341
+ readonly fontWeight: "Regular";
342
+ readonly lineHeight: "24px";
343
+ readonly letterSpacing: "0px";
344
+ };
345
+ readonly largeMedium: {
346
+ readonly fontSize: "16px";
347
+ readonly fontWeight: "Medium";
348
+ readonly lineHeight: "24px";
349
+ readonly letterSpacing: "0px";
350
+ };
351
+ readonly medium: {
352
+ readonly fontSize: "15px";
353
+ readonly fontWeight: "Regular";
354
+ readonly lineHeight: "22.5px";
355
+ readonly letterSpacing: "0px";
356
+ };
357
+ readonly mediumMedium: {
358
+ readonly fontSize: "15px";
359
+ readonly fontWeight: "Medium";
360
+ readonly lineHeight: "22.5px";
361
+ readonly letterSpacing: "0px";
362
+ };
363
+ readonly small: {
364
+ readonly fontSize: "14px";
365
+ readonly fontWeight: "Regular";
366
+ readonly lineHeight: "20px";
367
+ readonly letterSpacing: "0px";
368
+ };
369
+ readonly smallMedium: {
370
+ readonly fontSize: "14px";
371
+ readonly fontWeight: "Medium";
372
+ readonly lineHeight: "20px";
373
+ readonly letterSpacing: "0px";
374
+ };
375
+ };
376
+ readonly label: {
377
+ readonly large: {
378
+ readonly fontSize: "14px";
379
+ readonly fontWeight: "Regular";
380
+ readonly lineHeight: "20px";
381
+ readonly letterSpacing: "0px";
382
+ };
383
+ readonly largeMedium: {
384
+ readonly fontSize: "14px";
385
+ readonly fontWeight: "Medium";
386
+ readonly lineHeight: "20px";
387
+ readonly letterSpacing: "0px";
388
+ };
389
+ readonly medium: {
390
+ readonly fontSize: "13px";
391
+ readonly fontWeight: "Regular";
392
+ readonly lineHeight: "18px";
393
+ readonly letterSpacing: "0px";
394
+ };
395
+ readonly mediumMedium: {
396
+ readonly fontSize: "13px";
397
+ readonly fontWeight: "Medium";
398
+ readonly lineHeight: "18px";
399
+ readonly letterSpacing: "0px";
400
+ };
401
+ readonly small: {
402
+ readonly fontSize: "12px";
403
+ readonly fontWeight: "Regular";
404
+ readonly lineHeight: "16px";
405
+ readonly letterSpacing: "0px";
406
+ };
407
+ readonly smallMedium: {
408
+ readonly fontSize: "12px";
409
+ readonly fontWeight: "Medium";
410
+ readonly lineHeight: "16px";
411
+ readonly letterSpacing: "0px";
412
+ };
413
+ };
146
414
  };
147
415
 
148
- declare const a11y: {
149
- readonly focusRing: "0 0 0 3px rgba(0, 0, 0, 0.15)";
150
- readonly focusRingError: "0 0 0 3px rgba(239, 68, 68, 0.15)";
151
- readonly focusRingSuccess: "0 0 0 3px rgba(16, 185, 129, 0.15)";
152
- readonly tapMinSize: "44px";
416
+ declare const zIndex: {
417
+ readonly level0: 0;
418
+ readonly level1: 10;
419
+ readonly level2: 100;
420
+ readonly level3: 200;
421
+ readonly level4: 500;
422
+ readonly level5: 1000;
153
423
  };
154
424
 
155
425
  interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
@@ -227,26 +497,6 @@ interface SpinnerProps {
227
497
  */
228
498
  declare const Spinner: ({ size, ariaLabel }: SpinnerProps) => react_jsx_runtime.JSX.Element;
229
499
 
230
- interface TopLoadingProps {
231
- /** 진행률 (0-100). undefined면 indeterminate 모드 */
232
- progress?: number;
233
- /** 로딩바 색상 (기본: primary) */
234
- color?: string;
235
- /** 로딩바 높이 (기본: 3px) */
236
- height?: number;
237
- /** 표시 여부 */
238
- isLoading?: boolean;
239
- /** 프로그레스 바의 접근성 레이블 (기본값: "Page loading") */
240
- ariaLabel?: string;
241
- }
242
- /**
243
- * 상단 로딩바를 렌더링한다.
244
- * 표시 여부와 진행률에 따라 determinate/indeterminate 상태를 구성한다.
245
- * @param props 로딩바 속성
246
- * @returns 렌더링된 로딩바 요소 또는 null
247
- */
248
- declare const TopLoading: ({ progress, color, height, isLoading, ariaLabel, }: TopLoadingProps) => react_jsx_runtime.JSX.Element | null;
249
-
250
500
  interface ToastProviderProps {
251
501
  /** 앱 루트에서 감싸는 자식 요소 */
252
502
  children: React.ReactNode;
@@ -261,7 +511,7 @@ interface ToastProviderProps {
261
511
  * @param props Provider 속성
262
512
  * @returns 렌더링된 Provider와 토스트 컨테이너
263
513
  */
264
- declare const ToastProvider: ({ children, maxCount, closeAriaLabel }: ToastProviderProps) => react_jsx_runtime.JSX.Element;
514
+ declare const ToastProvider: ({ children, maxCount, closeAriaLabel, }: ToastProviderProps) => react_jsx_runtime.JSX.Element;
265
515
 
266
516
  /**
267
517
  * 토스트 메시지를 표시하는 훅.
@@ -281,26 +531,25 @@ declare const useToast: () => {
281
531
  message: (message: string, duration?: number) => void;
282
532
  };
283
533
 
284
- interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
285
- /** 버튼 스타일 변형 (기본값: "primary") */
286
- variant?: "primary" | "secondary" | "ghost" | "danger";
287
- /** 버튼 크기 (기본값: "md") */
288
- size?: "sm" | "md" | "lg";
289
- /** 버튼이 컨테이너의 전체 너비를 차지할지 여부 */
290
- fullWidth?: boolean;
291
- /**
292
- * 버튼의 커스텀 너비
293
- * @deprecated `fullWidth` 사용 또는 CSS로 처리
294
- */
295
- width?: string;
534
+ interface TopLoadingProps {
535
+ /** 진행률 (0-100). undefined면 indeterminate 모드 */
536
+ progress?: number;
537
+ /** 로딩바 색상 (기본: primary) */
538
+ color?: string;
539
+ /** 로딩바 높이 (기본: 3px) */
540
+ height?: number;
541
+ /** 표시 여부 */
542
+ isLoading?: boolean;
543
+ /** 프로그레스 바의 접근성 레이블 (기본값: "Page loading") */
544
+ ariaLabel?: string;
296
545
  }
297
546
  /**
298
- * 버튼을 렌더링한다.
299
- * 전달된 props로 클래스 조합과 인라인 스타일을 계산한 뒤 버튼 요소를 반환한다.
300
- * @param props 버튼 속성
301
- * @returns 렌더링된 버튼 요소
547
+ * 상단 로딩바를 렌더링한다.
548
+ * 표시 여부와 진행률에 따라 determinate/indeterminate 상태를 구성한다.
549
+ * @param props 로딩바 속성
550
+ * @returns 렌더링된 로딩바 요소 또는 null
302
551
  */
303
- declare const Button: ({ variant, size, fullWidth, width, className, style, ...props }: ButtonProps) => react_jsx_runtime.JSX.Element;
552
+ declare const TopLoading: ({ progress, color, height, isLoading, ariaLabel, }: TopLoadingProps) => react_jsx_runtime.JSX.Element | null;
304
553
 
305
554
  interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "size"> {
306
555
  /** 체크박스 옆에 표시할 라벨 */
@@ -309,15 +558,72 @@ interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>
309
558
  size?: "sm" | "md" | "lg";
310
559
  /** 중간 선택(indeterminate) 상태 여부 */
311
560
  indeterminate?: boolean;
561
+ /** 입력 요소 참조 */
562
+ ref?: React.Ref<HTMLInputElement>;
312
563
  }
313
564
  /**
314
565
  * 체크박스를 렌더링한다.
315
566
  * indeterminate 상태를 반영하고 라벨을 포함한 UI를 구성한다.
316
567
  * @param props 체크박스 속성
317
- * @param ref 입력 요소 참조
318
568
  * @returns 렌더링된 체크박스 UI
319
569
  */
320
- declare const Checkbox: React.ForwardRefExoticComponent<CheckboxProps & React.RefAttributes<HTMLInputElement>>;
570
+ declare const Checkbox: {
571
+ ({ label, size, indeterminate, className, ref, ...props }: CheckboxProps): react_jsx_runtime.JSX.Element;
572
+ displayName: string;
573
+ };
574
+
575
+ type DatePickerMode = "year-month" | "year-month-day";
576
+ type SelectableRange = "all" | "until-today";
577
+ interface DatePickerProps {
578
+ /** 데이트 피커 위에 표시할 라벨 텍스트 */
579
+ label?: string;
580
+ /** 제어형 날짜 값 ("YYYY-MM" 또는 "YYYY-MM-DD" 형식) */
581
+ value?: string;
582
+ /** 날짜 변경 시 호출되는 콜백. `mode` 값에 따라 "YYYY-MM" 또는 "YYYY-MM-DD" 형식의 문자열이 전달됩니다. */
583
+ onChange: (value: string) => void;
584
+ /** 선택 모드 (기본값: "year-month-day") */
585
+ mode?: DatePickerMode;
586
+ /** 연도 선택 범위 시작 (기본값: 1950) */
587
+ startYear?: number;
588
+ /** 연도 선택 범위 끝 (기본값: 현재 연도 + 10) */
589
+ endYear?: number;
590
+ /** 선택 가능한 최소 날짜 ("YYYY-MM-DD" 형식) */
591
+ minDate?: string;
592
+ /** 선택 가능한 날짜 범위 ("all": 제한 없음, "until-today": 오늘까지) */
593
+ selectableRange?: SelectableRange;
594
+ /** 비활성화 여부 */
595
+ disabled?: boolean;
596
+ /** 데이트 피커가 컨테이너의 전체 너비를 차지할지 여부 */
597
+ fullWidth?: boolean;
598
+ /**
599
+ * 데이트 피커의 커스텀 너비
600
+ * @deprecated `fullWidth` 사용 또는 CSS로 처리
601
+ */
602
+ width?: number | string;
603
+ /** 연도 select의 aria-label 및 빈 옵션 텍스트 (기본값: "Year") */
604
+ yearLabel?: string;
605
+ /** 월 select의 aria-label 및 빈 옵션 텍스트 (기본값: "Month") */
606
+ monthLabel?: string;
607
+ /** 일 select의 aria-label 및 빈 옵션 텍스트 (기본값: "Day") */
608
+ dayLabel?: string;
609
+ /**
610
+ * minDate 설정 시 스크린리더에 전달할 안내 문구 포맷.
611
+ * `{date}` 자리에 minDate 값이 치환됩니다. (기본값: "Minimum date: {date}")
612
+ */
613
+ minDateSrFormat?: string;
614
+ /**
615
+ * selectableRange="until-today" 설정 시 스크린리더에 전달할 안내 문구.
616
+ * (기본값: "Selectable up to today")
617
+ */
618
+ selectableRangeUntilTodaySrText?: string;
619
+ }
620
+ /**
621
+ * 연/월/일 선택형 데이트 피커를 렌더링한다.
622
+ * 입력 값과 선택 범위를 기준으로 옵션을 계산하고, 선택 변경을 상위로 전달한다.
623
+ * @param props 데이트 피커 속성
624
+ * @returns 렌더링된 데이트 피커 UI
625
+ */
626
+ declare const DatePicker: ({ label, value, onChange, mode, startYear, endYear, minDate, selectableRange, disabled, fullWidth, width, yearLabel, monthLabel, dayLabel, minDateSrFormat, selectableRangeUntilTodaySrText, }: DatePickerProps) => react_jsx_runtime.JSX.Element;
321
627
 
322
628
  interface FileInputProps extends React.InputHTMLAttributes<HTMLInputElement> {
323
629
  /** 파일 선택 버튼 라벨 텍스트 (기본값: "Choose file") */
@@ -340,58 +646,19 @@ interface RadioProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "
340
646
  label?: React.ReactNode;
341
647
  /** 라디오 버튼 크기 (기본값: "md") */
342
648
  size?: "sm" | "md" | "lg";
649
+ /** 입력 요소 참조 */
650
+ ref?: React.Ref<HTMLInputElement>;
343
651
  }
344
652
  /**
345
653
  * 라디오 버튼을 렌더링한다.
346
654
  * 크기별 클래스와 라벨을 조합해 UI를 구성한다.
347
655
  * @param props 라디오 속성
348
- * @param ref 입력 요소 참조
349
656
  * @returns 렌더링된 라디오 UI
350
657
  */
351
- declare const Radio: React.ForwardRefExoticComponent<RadioProps & React.RefAttributes<HTMLInputElement>>;
352
-
353
- type SelectSize = "sm" | "md" | "lg";
354
- type SelectVariant = "outline" | "filled" | "ghost";
355
- interface SelectOption {
356
- value: string;
357
- label: string;
358
- disabled?: boolean;
359
- }
360
- interface SelectProps {
361
- /** 셀렉트 요소의 id (미입력 시 자동 생성) */
362
- id?: string;
363
- /** 셀렉트 위에 표시할 라벨 텍스트 */
364
- label?: string;
365
- /** 선택 전 표시할 플레이스홀더 (기본값: "Select…") */
366
- placeholder?: string;
367
- /** 표시할 옵션 목록 */
368
- options: SelectOption[];
369
- /** 제어형 선택 값 */
370
- value?: string | null;
371
- /** 값 변경 시 호출되는 콜백. 선택된 값과 전체 옵션 객체를 인자로 전달합니다. */
372
- onChange?: (value: string | null, option?: SelectOption | null) => void;
373
- /** 비제어형 초기 선택 값 */
374
- defaultValue?: string | null;
375
- /** 비활성화 여부 */
376
- disabled?: boolean;
377
- /** 셀렉트 크기 (기본값: "md") */
378
- size?: SelectSize;
379
- /** 셀렉트 스타일 변형 (기본값: "outline") */
380
- variant?: SelectVariant;
381
- /** 컨테이너 전체 너비 차지 여부 */
382
- fullWidth?: boolean;
383
- /** 루트 요소에 추가할 className */
384
- className?: string;
385
- /** 선택된 값 텍스트 정렬 (기본값: "left") */
386
- textAlign?: "left" | "center";
387
- }
388
- /**
389
- * 셀렉트 컴포넌트를 렌더링한다.
390
- * 제어형/비제어형 상태를 정리하고, 키보드/마우스 상호작용과 드롭다운 표시를 관리한다.
391
- * @param props 셀렉트 속성
392
- * @returns 렌더링된 셀렉트 UI
393
- */
394
- declare const Select: ({ id, label, placeholder, options, value, onChange, defaultValue, disabled, size, variant, fullWidth, className, textAlign, }: SelectProps) => react_jsx_runtime.JSX.Element;
658
+ declare const Radio: {
659
+ ({ label, size, className, ref, ...props }: RadioProps): react_jsx_runtime.JSX.Element;
660
+ displayName: string;
661
+ };
395
662
 
396
663
  interface SwitchProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "onChange"> {
397
664
  /** 제어형 스위치 상태 */
@@ -406,15 +673,19 @@ interface SwitchProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>
406
673
  disabled?: boolean;
407
674
  /** 스위치 접근성 레이블(스크린 리더용) */
408
675
  ariaLabel: string;
676
+ /** 버튼 요소 참조 */
677
+ ref?: React.Ref<HTMLButtonElement>;
409
678
  }
410
679
  /**
411
680
  * 스위치를 렌더링한다.
412
681
  * 제어형/비제어형 상태를 판별해 토글 로직을 수행하고 버튼 형태의 스위치 UI를 반환한다.
413
682
  * @param props 스위치 속성
414
- * @param ref 버튼 참조
415
683
  * @returns 렌더링된 스위치 요소
416
684
  */
417
- declare const Switch: React.ForwardRefExoticComponent<SwitchProps & React.RefAttributes<HTMLButtonElement>>;
685
+ declare const Switch: {
686
+ ({ checked, defaultChecked, onChange, size, disabled, className, ariaLabel, ref, ...props }: SwitchProps): react_jsx_runtime.JSX.Element;
687
+ displayName: string;
688
+ };
418
689
 
419
690
  type TextFieldVariant = "outline" | "filled" | "ghost";
420
691
  type TextFieldSize = "sm" | "md" | "lg";
@@ -445,68 +716,83 @@ interface TextFieldProps extends Omit<React.InputHTMLAttributes<HTMLInputElement
445
716
  defaultValue?: string;
446
717
  /** 입력값 변환 함수 (예: 숫자만 허용, 대문자 변환) */
447
718
  transformValue?: (value: string) => string;
719
+ /** 입력 요소 참조 */
720
+ ref?: React.Ref<HTMLInputElement>;
448
721
  }
449
722
  /**
450
723
  * 텍스트 필드를 렌더링한다.
451
724
  * 제어형/비제어형 값을 동기화하고, 조합 입력(IME)을 고려해 변경 이벤트를 전달한다.
452
725
  * @param props 텍스트 필드 속성
453
- * @param ref 입력 요소 참조
454
726
  * @returns 렌더링된 텍스트 필드 UI
455
727
  */
456
- declare const TextField: React.ForwardRefExoticComponent<TextFieldProps & React.RefAttributes<HTMLInputElement>>;
728
+ declare const TextField: {
729
+ ({ id, label, helperText, error, success, variant, size, leftIcon, rightIcon, fullWidth, className, onChangeAction, value, defaultValue, transformValue, ref, ...props }: TextFieldProps): react_jsx_runtime.JSX.Element;
730
+ displayName: string;
731
+ };
457
732
 
458
- type DatePickerMode = "year-month" | "year-month-day";
459
- type SelectableRange = "all" | "until-today";
460
- interface DatePickerProps {
461
- /** 데이트 피커 위에 표시할 라벨 텍스트 */
462
- label?: string;
463
- /** 제어형 날짜 ("YYYY-MM" 또는 "YYYY-MM-DD" 형식) */
464
- value?: string;
465
- /** 날짜 변경 시 호출되는 콜백. `mode` 값에 따라 "YYYY-MM" 또는 "YYYY-MM-DD" 형식의 문자열이 전달됩니다. */
466
- onChange: (value: string) => void;
467
- /** 선택 모드 (기본값: "year-month-day") */
468
- mode?: DatePickerMode;
469
- /** 연도 선택 범위 시작 (기본값: 1950) */
470
- startYear?: number;
471
- /** 연도 선택 범위 끝 (기본값: 현재 연도 + 10) */
472
- endYear?: number;
473
- /** 선택 가능한 최소 날짜 ("YYYY-MM-DD" 형식) */
474
- minDate?: string;
475
- /** 선택 가능한 날짜 범위 ("all": 제한 없음, "until-today": 오늘까지) */
476
- selectableRange?: SelectableRange;
477
- /** 비활성화 여부 */
478
- disabled?: boolean;
479
- /** 데이트 피커가 컨테이너의 전체 너비를 차지할지 여부 */
733
+ interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
734
+ /** 버튼 스타일 변형 (기본값: "primary") */
735
+ variant?: "primary" | "secondary" | "ghost" | "danger";
736
+ /** 버튼 크기 (기본값: "md") */
737
+ size?: "sm" | "md" | "lg";
738
+ /** 버튼이 컨테이너의 전체 너비를 차지할지 여부 */
480
739
  fullWidth?: boolean;
481
740
  /**
482
- * 데이트 피커의 커스텀 너비
741
+ * 버튼의 커스텀 너비
483
742
  * @deprecated `fullWidth` 사용 또는 CSS로 처리
484
743
  */
485
- width?: number | string;
486
- /** 연도 select의 aria-label 및 빈 옵션 텍스트 (기본값: "Year") */
487
- yearLabel?: string;
488
- /** 월 select의 aria-label 및 빈 옵션 텍스트 (기본값: "Month") */
489
- monthLabel?: string;
490
- /** 일 select의 aria-label 및 빈 옵션 텍스트 (기본값: "Day") */
491
- dayLabel?: string;
492
- /**
493
- * minDate 설정 시 스크린리더에 전달할 안내 문구 포맷.
494
- * `{date}` 자리에 minDate 값이 치환됩니다. (기본값: "Minimum date: {date}")
495
- */
496
- minDateSrFormat?: string;
497
- /**
498
- * selectableRange="until-today" 설정 시 스크린리더에 전달할 안내 문구.
499
- * (기본값: "Selectable up to today")
500
- */
501
- selectableRangeUntilTodaySrText?: string;
744
+ width?: string;
502
745
  }
503
746
  /**
504
- * 연/월/일 선택형 데이트 피커를 렌더링한다.
505
- * 입력 값과 선택 범위를 기준으로 옵션을 계산하고, 선택 변경을 상위로 전달한다.
506
- * @param props 데이트 피커 속성
507
- * @returns 렌더링된 데이트 피커 UI
747
+ * 버튼을 렌더링한다.
748
+ * 전달된 props로 클래스 조합과 인라인 스타일을 계산한 버튼 요소를 반환한다.
749
+ * @param props 버튼 속성
750
+ * @returns 렌더링된 버튼 요소
508
751
  */
509
- declare const DatePicker: ({ label, value, onChange, mode, startYear, endYear, minDate, selectableRange, disabled, fullWidth, width, yearLabel, monthLabel, dayLabel, minDateSrFormat, selectableRangeUntilTodaySrText, }: DatePickerProps) => react_jsx_runtime.JSX.Element;
752
+ declare const Button: ({ variant, size, fullWidth, width, className, style, ...props }: ButtonProps) => react_jsx_runtime.JSX.Element;
753
+
754
+ type SelectSize = "sm" | "md" | "lg";
755
+ type SelectVariant = "outline" | "filled" | "ghost";
756
+ interface SelectOption {
757
+ value: string;
758
+ label: string;
759
+ disabled?: boolean;
760
+ }
761
+ interface SelectProps {
762
+ /** 셀렉트 요소의 id (미입력 시 자동 생성) */
763
+ id?: string;
764
+ /** 셀렉트 위에 표시할 라벨 텍스트 */
765
+ label?: string;
766
+ /** 선택 전 표시할 플레이스홀더 (기본값: "Select…") */
767
+ placeholder?: string;
768
+ /** 표시할 옵션 목록 */
769
+ options: SelectOption[];
770
+ /** 제어형 선택 값 */
771
+ value?: string | null;
772
+ /** 값 변경 시 호출되는 콜백. 선택된 값과 전체 옵션 객체를 인자로 전달합니다. */
773
+ onChange?: (value: string | null, option?: SelectOption | null) => void;
774
+ /** 비제어형 초기 선택 값 */
775
+ defaultValue?: string | null;
776
+ /** 비활성화 여부 */
777
+ disabled?: boolean;
778
+ /** 셀렉트 크기 (기본값: "md") */
779
+ size?: SelectSize;
780
+ /** 셀렉트 스타일 변형 (기본값: "outline") */
781
+ variant?: SelectVariant;
782
+ /** 컨테이너 전체 너비 차지 여부 */
783
+ fullWidth?: boolean;
784
+ /** 루트 요소에 추가할 className */
785
+ className?: string;
786
+ /** 선택된 값 텍스트 정렬 (기본값: "left") */
787
+ textAlign?: "left" | "center";
788
+ }
789
+ /**
790
+ * 셀렉트 컴포넌트를 렌더링한다.
791
+ * 제어형/비제어형 상태를 정리하고, 키보드/마우스 상호작용과 드롭다운 표시를 관리한다.
792
+ * @param props 셀렉트 속성
793
+ * @returns 렌더링된 셀렉트 UI
794
+ */
795
+ declare const Select: ({ id, label, placeholder, options, value, onChange, defaultValue, disabled, size, variant, fullWidth, className, textAlign, }: SelectProps) => react_jsx_runtime.JSX.Element;
510
796
 
511
797
  interface PaginationProps {
512
798
  /** 현재 페이지 번호 (1-based) */
@@ -526,7 +812,7 @@ interface PaginationProps {
526
812
  * @param props 페이지네이션 속성
527
813
  * @returns 렌더링된 페이지네이션 UI
528
814
  */
529
- declare const Pagination: ({ page, totalPages, onChange, prevLabel, nextLabel }: PaginationProps) => react_jsx_runtime.JSX.Element;
815
+ declare const Pagination: ({ page, totalPages, onChange, prevLabel, nextLabel, }: PaginationProps) => react_jsx_runtime.JSX.Element;
530
816
 
531
817
  interface ModalProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
532
818
  /** 모달 열림 여부 */
@@ -550,4 +836,4 @@ interface ModalProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title">
550
836
  */
551
837
  declare const Modal: ({ open, onClose, closeOnOverlay, width, title, children, className, ariaLabel, ...props }: ModalProps) => react_jsx_runtime.JSX.Element | null;
552
838
 
553
- export { AlertProvider, Button, Card, Checkbox, DatePicker, FileInput, Modal, Pagination, Radio, Select, type SelectOption, Spinner, Switch, TextField, ToastProvider, TopLoading, a11y, breakpoints, colors, motion, radius, shadows, skeleton, spacing, typography, useAlert, useToast, zIndex };
839
+ export { AlertProvider, Button, Card, Checkbox, DatePicker, FileInput, Modal, Pagination, Radio, Select, type SelectOption, Spinner, Switch, TextField, ToastProvider, TopLoading, a11y, baseBorderWidth, baseColors, baseTypography, borderWidth, breakpoints, colors, motion, opacity, radius, shadows, skeleton, spacing, typography, useAlert, useToast, zIndex };