@bigtablet/design-system 3.1.0 → 3.2.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.d.ts CHANGED
@@ -74,11 +74,11 @@ declare function useSpringHover({ scale, lift, }?: {
74
74
  * ```
75
75
  */
76
76
  declare function useSpringPresence({ visible, from, onExitComplete, }: {
77
- /** 보이는 상태인지 false면 사라짐 모션 */
77
+ /** 보이는 상태인지 - false면 사라짐 모션 */
78
78
  visible: boolean;
79
79
  /** 진입 시 시작 transform (기본: 아래에서 살짝 올라옴) */
80
80
  from?: string;
81
- /** exit 모션 완료 시 호출 부모에서 unmount 트리거용 */
81
+ /** exit 모션 완료 시 호출 - 부모에서 unmount 트리거용 */
82
82
  onExitComplete?: () => void;
83
83
  }): {
84
84
  opacity: _react_spring_web.SpringValue<number>;
@@ -94,7 +94,7 @@ interface AccordionItem {
94
94
  interface AccordionProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onChange"> {
95
95
  /** 아이템 목록 */
96
96
  items: AccordionItem[];
97
- /** 여러 개 동시에 펼침 허용 (기본 false 한 번에 하나) */
97
+ /** 여러 개 동시에 펼침 허용 (기본 false - 한 번에 하나) */
98
98
  multiple?: boolean;
99
99
  /** 기본으로 펼쳐진 키들 */
100
100
  defaultOpenKeys?: string[];
@@ -124,7 +124,7 @@ interface AvatarProps extends React$1.HTMLAttributes<HTMLSpanElement> {
124
124
  size?: AvatarSize;
125
125
  /** 모양 (기본값: "circle") */
126
126
  shape?: AvatarShape;
127
- /** 색상 (기본값: navy accent) */
127
+ /** 색상 (기본값: accent-default — 검정/흰색 테마 자동) */
128
128
  bgColor?: string;
129
129
  }
130
130
  /**
@@ -142,6 +142,7 @@ declare const Avatar: ({ src, name, size, shape, bgColor, className, style, ...p
142
142
  type BadgeVariant = "accent" | "neutral" | "info" | "success" | "warning" | "error";
143
143
  type BadgeShape = "dot" | "count" | "label";
144
144
  type BadgeSize = "sm" | "md" | "lg";
145
+ type BadgeAppearance = "solid" | "soft";
145
146
  interface BadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
146
147
  /** 색상 variant (기본값: "accent") */
147
148
  variant?: BadgeVariant;
@@ -154,6 +155,12 @@ interface BadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
154
155
  * - lg: 강조 (Hero 위 배지, 카테고리)
155
156
  */
156
157
  size?: BadgeSize;
158
+ /**
159
+ * 시각 강도 (기본값: "solid").
160
+ * - `solid`: 강한 fill bg + 흰/검 텍스트 - 기존 동작 (notification dot, status emphasis)
161
+ * - `soft`: tint 배경 + 진한 텍스트 - 차분한 정보 라벨 (WCAG AA 통과)
162
+ */
163
+ appearance?: BadgeAppearance;
157
164
  /** count shape 일 때 표시할 숫자. max를 넘으면 "max+" */
158
165
  count?: number;
159
166
  /** count 최댓값 (기본 99) */
@@ -167,9 +174,10 @@ interface BadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
167
174
  * <Badge shape="dot" variant="error" />
168
175
  * <Badge shape="count" count={5} />
169
176
  * <Badge>New</Badge>
177
+ * <Badge variant="success" appearance="soft">+5%</Badge>
170
178
  * ```
171
179
  */
172
- declare const Badge: ({ variant, shape, size, count, max, className, children, ...props }: BadgeProps) => react_jsx_runtime.JSX.Element;
180
+ declare const Badge: ({ variant, shape, size, appearance, count, max, className, children, ...props }: BadgeProps) => react_jsx_runtime.JSX.Element;
173
181
 
174
182
  interface BottomNavProps extends Omit<React$1.HTMLAttributes<HTMLElement>, "onChange"> {
175
183
  /** 스크린 리더 레이블 (기본 "주요 메뉴") */
@@ -198,7 +206,7 @@ declare const BottomNav: ({ ariaLabel, className, children, ...props }: BottomNa
198
206
  interface BottomNavItemCommon {
199
207
  /** 아이콘 (필수) */
200
208
  icon: React$1.ReactNode;
201
- /** 라벨 텍스트 (필수, 짧게 2–4자) */
209
+ /** 라벨 텍스트 (필수, 짧게 - 2–4자) */
202
210
  label: string;
203
211
  /** 활성 상태 */
204
212
  active?: boolean;
@@ -212,7 +220,7 @@ type BottomNavItemButton = BottomNavItemCommon & {
212
220
  type BottomNavItemAnchor = BottomNavItemCommon & {
213
221
  as: "a";
214
222
  href: string;
215
- /** anchor 에 native `disabled` 없음 `aria-disabled` + `preventDefault` 로 처리. */
223
+ /** anchor 에 native `disabled` 없음 - `aria-disabled` + `preventDefault` 로 처리. */
216
224
  disabled?: boolean;
217
225
  } & Omit<React$1.AnchorHTMLAttributes<HTMLAnchorElement>, "children" | "type">;
218
226
  type BottomNavItemProps = BottomNavItemButton | BottomNavItemAnchor;
@@ -268,7 +276,7 @@ interface EmptyStateProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "
268
276
  size?: "sm" | "md" | "lg";
269
277
  }
270
278
  /**
271
- * 빈 상태 표시 데이터 없음, 검색 결과 없음, 시작 가이드 등.
279
+ * 빈 상태 표시 - 데이터 없음, 검색 결과 없음, 시작 가이드 등.
272
280
  *
273
281
  * @example
274
282
  * ```tsx
@@ -282,27 +290,63 @@ interface EmptyStateProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "
282
290
  */
283
291
  declare const EmptyState: ({ illustration, title, description, action, size, className, ...props }: EmptyStateProps) => react_jsx_runtime.JSX.Element;
284
292
 
293
+ type ErrorStateVariant = "page" | "widget";
294
+ interface ErrorStateProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
295
+ /** 제목 (기본 "문제가 발생했습니다") */
296
+ title?: React$1.ReactNode;
297
+ /** 보조 설명 */
298
+ description?: React$1.ReactNode;
299
+ /** 아이콘/일러스트 (미지정 시 기본 경고 아이콘. `null` 로 숨김) */
300
+ icon?: React$1.ReactNode;
301
+ /** 액션 영역 (재시도 버튼 등) */
302
+ action?: React$1.ReactNode;
303
+ /**
304
+ * 레이아웃 모드 (기본 "page").
305
+ * - `page`: 전체 화면/영역 채움 - error boundary fallback. 큰 아이콘 + 넉넉한 패딩 + min-height.
306
+ * - `widget`: 인라인 컴팩트 - 위젯/카드 내부 error fallback. 작은 아이콘 + 좁은 패딩.
307
+ */
308
+ variant?: ErrorStateVariant;
309
+ }
310
+ /**
311
+ * 에러 상태 표시 - error boundary / 데이터 로드 실패 / 위젯 에러 fallback.
312
+ * `EmptyState` 의 형제. `status-error` 토큰 사용 (하드코딩 없음).
313
+ *
314
+ * @example
315
+ * ```tsx
316
+ * // 페이지 전체 (error boundary)
317
+ * <ErrorState
318
+ * title="페이지를 불러오지 못했습니다"
319
+ * description="잠시 후 다시 시도해 주세요."
320
+ * action={<Button onClick={retry}>다시 시도</Button>}
321
+ * />
322
+ *
323
+ * // 위젯 인라인
324
+ * <ErrorState variant="widget" title="불러오기 실패" action={<Button size="sm" onClick={retry}>재시도</Button>} />
325
+ * ```
326
+ */
327
+ declare const ErrorState: ({ title, description, icon, action, variant, className, ...props }: ErrorStateProps) => react_jsx_runtime.JSX.Element;
328
+
285
329
  interface MenuItem {
286
330
  key: string;
287
331
  label: React$1.ReactNode;
288
332
  icon?: React$1.ReactNode;
289
333
  disabled?: boolean;
290
- /** 클릭 시 호출 자동으로 메뉴 닫힘 */
334
+ /** 클릭 시 호출 - 자동으로 메뉴 닫힘 */
291
335
  onSelect?: () => void;
292
- /** destructive 액션 (삭제 등) 빨간 텍스트 */
336
+ /** destructive 액션 (삭제 등) - 빨간 텍스트 */
293
337
  destructive?: boolean;
294
338
  }
295
339
  interface MenuProps {
296
340
  /** 메뉴 아이템들 */
297
341
  items: MenuItem[];
298
- /** trigger 요소 클릭 시 메뉴 열림 */
342
+ /** trigger 요소 - 클릭 시 메뉴 열림 */
299
343
  trigger: React$1.ReactElement;
300
344
  /** 정렬 (기본 "start") */
301
345
  align?: "start" | "end";
302
346
  }
303
347
  /**
304
348
  * 컨텍스트 메뉴. trigger 클릭 시 아래에 메뉴 표시. 외부 클릭/Esc로 닫힘.
305
- * Form Dropdown과 다름 액션 메뉴 (Edit/Delete 등).
349
+ * Form Dropdown과 다름 - 액션 메뉴 (Edit/Delete 등).
306
350
  *
307
351
  * @example
308
352
  * ```tsx
@@ -330,7 +374,7 @@ interface NavBarLocaleConfig {
330
374
  options: NavBarLocaleOption[];
331
375
  /** locale 변경 콜백 */
332
376
  onChange: (next: string) => void;
333
- /** 표시 라벨 기본은 옵션의 label, 미지정 시 short code 표시 */
377
+ /** 표시 라벨 - 기본은 옵션의 label, 미지정 시 short code 표시 */
334
378
  hideLabel?: boolean;
335
379
  }
336
380
  interface NavBarProps extends React$1.HTMLAttributes<HTMLElement> {
@@ -346,9 +390,9 @@ interface NavBarProps extends React$1.HTMLAttributes<HTMLElement> {
346
390
  profile?: React$1.ReactNode;
347
391
  /** actions / locale 와 profile 사이 수직 divider 표시 (기본 true, profile 있을 때만 표시) */
348
392
  divider?: boolean;
349
- /** 시각 variant default(흰 bg + 회색 border), transparent(투명, hero 위에), accent(navy bg) */
393
+ /** 시각 variant - default(흰 bg + 회색 border), transparent(투명, hero 위에), accent(검정 bg) */
350
394
  variant?: NavBarVariant;
351
- /** 레이아웃 contained(max 1200, marketing) / fluid(full width, admin/dashboard) */
395
+ /** 레이아웃 - contained(max 1200, marketing) / fluid(full width, admin/dashboard) */
352
396
  layout?: NavBarLayout;
353
397
  /** sticky 고정 여부 */
354
398
  sticky?: boolean;
@@ -491,6 +535,51 @@ interface TabPanelProps extends React$1.HTMLAttributes<HTMLDivElement> {
491
535
  }
492
536
  declare const TabPanel: ({ value, unmountInactive, className, children, ...props }: TabPanelProps) => react_jsx_runtime.JSX.Element | null;
493
537
 
538
+ type PopoverPlacement = "top" | "bottom" | "left" | "right";
539
+ interface PopoverProps {
540
+ /** trigger 요소 - 클릭 시 팝오버 토글 */
541
+ trigger: React$1.ReactElement;
542
+ /** 팝오버 내부 콘텐츠 - 임의 ReactNode (폼/설명/액션 조합) */
543
+ content: React$1.ReactNode;
544
+ /** 위치 (기본값: "bottom") */
545
+ placement?: PopoverPlacement;
546
+ /** 제어 모드 - 열림 상태 */
547
+ open?: boolean;
548
+ /** 비제어 모드 초기 열림 상태 (기본값: false) */
549
+ defaultOpen?: boolean;
550
+ /** 열림 상태 변경 콜백 */
551
+ onOpenChange?: (open: boolean) => void;
552
+ /** dialog 의 접근성 라벨 - content 에 제목이 없을 때 권장 */
553
+ "aria-label"?: string;
554
+ /** dialog 의 접근성 라벨 요소 id */
555
+ "aria-labelledby"?: string;
556
+ /** 추가 className - 팝오버 패널에 적용 */
557
+ className?: string;
558
+ }
559
+ /**
560
+ * 클릭 트리거로 임의의 interactive content 를 띄우는 범용 non-modal 팝오버.
561
+ * Menu(액션 리스트) / Tooltip(hover 정보) 과 역할 분리 - 폼/설명/액션 조합을 담는다.
562
+ * 외부 클릭/Esc 로 닫히며, 열릴 때 content 로 포커스 이동, Esc 로 닫으면 trigger 로 복귀.
563
+ *
564
+ * @example
565
+ * ```tsx
566
+ * <Popover
567
+ * trigger={<Button>필터</Button>}
568
+ * aria-label="필터 옵션"
569
+ * content={
570
+ * <Stack gap={8}>
571
+ * <Checkbox label="활성" />
572
+ * <Button size="sm">적용</Button>
573
+ * </Stack>
574
+ * }
575
+ * />
576
+ * ```
577
+ */
578
+ declare const Popover: {
579
+ ({ trigger, content, placement, open: openProp, defaultOpen, onOpenChange, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, className, }: PopoverProps): react_jsx_runtime.JSX.Element;
580
+ displayName: string;
581
+ };
582
+
494
583
  type TooltipPlacement = "top" | "bottom" | "left" | "right";
495
584
  interface TooltipProps {
496
585
  /** 툴팁 콘텐츠 */
@@ -499,7 +588,7 @@ interface TooltipProps {
499
588
  placement?: TooltipPlacement;
500
589
  /** hover 후 지연 시간 ms (기본 200) */
501
590
  delay?: number;
502
- /** 비활성화 children만 그대로 렌더, 툴팁 없음 */
591
+ /** 비활성화 - children만 그대로 렌더, 툴팁 없음 */
503
592
  disabled?: boolean;
504
593
  children: React$1.ReactElement;
505
594
  }
@@ -561,20 +650,12 @@ declare const baseColors: {
561
650
  readonly neutral700: "#666666";
562
651
  readonly neutral800: "#333333";
563
652
  readonly neutral900: "#121212";
653
+ readonly neutral925: "#141414";
654
+ readonly neutral950: "#0A0A0A";
564
655
  readonly statusError: "#EF4444";
565
656
  readonly statusSuccess: "#10B981";
566
657
  readonly statusWarning: "#F59E0B";
567
658
  readonly statusInfo: "#3B82F6";
568
- readonly navy50: "#F2F5F8";
569
- readonly navy100: "#DDE3E9";
570
- readonly navy200: "#B4C2CD";
571
- readonly navy300: "#7AA5D2";
572
- readonly navy400: "#5A8DCB";
573
- readonly navy500: "#4C7CB6";
574
- readonly navy600: "#47555E";
575
- readonly navy700: "#3D4852";
576
- readonly navy800: "#303841";
577
- readonly navy900: "#1F2630";
578
659
  readonly alphaBlack5: "rgba(0, 0, 0, 0.05)";
579
660
  readonly alphaBlack8: "rgba(0, 0, 0, 0.08)";
580
661
  readonly alphaBlack12: "rgba(26, 26, 26, 0.12)";
@@ -625,11 +706,11 @@ declare const colors: {
625
706
  readonly info: "#3B82F6";
626
707
  };
627
708
  readonly accent: {
628
- readonly subtle: "#F2F5F8";
629
- readonly muted: "#DDE3E9";
630
- readonly light: "#7AA5D2";
631
- readonly default: "#47555E";
632
- readonly strong: "#303841";
709
+ readonly subtle: "rgba(0, 0, 0, 0.05)";
710
+ readonly muted: "rgba(26, 26, 26, 0.12)";
711
+ readonly light: "#B3B3B3";
712
+ readonly default: "#121212";
713
+ readonly strong: "#121212";
633
714
  readonly onSurface: "#FFFFFF";
634
715
  };
635
716
  };
@@ -1036,7 +1117,7 @@ interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
1036
1117
  /** border-radius 토큰 (기본값: "full") */
1037
1118
  radius?: "none" | "xs" | "sm" | "md" | "lg" | "xl" | "full";
1038
1119
  /**
1039
- * 위험한 액션 (삭제/취소 등) 빨간 강조.
1120
+ * 위험한 액션 (삭제/취소 등) - 빨간 강조.
1040
1121
  * filled: 빨간 bg, outline: 빨간 텍스트/border, tonal: 빨간 wash.
1041
1122
  */
1042
1123
  danger?: boolean;
@@ -1049,7 +1130,8 @@ interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
1049
1130
  */
1050
1131
  declare const Button: ({ variant, size, leadingIcon, trailingIcon, fullWidth, radius, danger, className, children, ...props }: ButtonProps) => react_jsx_runtime.JSX.Element;
1051
1132
 
1052
- type CardVariant = "default" | "accent";
1133
+ type CardVariant = "default" | "accent" | "glass" | "outlined";
1134
+ type CardFooterAlign = "start" | "between" | "end";
1053
1135
  interface CardProps extends React$1.HTMLAttributes<HTMLDivElement> {
1054
1136
  /** 카드 상단에 표시할 제목 */
1055
1137
  heading?: React$1.ReactNode;
@@ -1061,8 +1143,19 @@ interface CardProps extends React$1.HTMLAttributes<HTMLDivElement> {
1061
1143
  padding?: "none" | "sm" | "md" | "lg";
1062
1144
  /** 테두리 표시 여부 (기본값: false) */
1063
1145
  bordered?: boolean;
1064
- /** 카드 variant — "accent"는 navy bg + white text (강조 카드) */
1146
+ /**
1147
+ * 카드 variant (기본값: "default")
1148
+ * - "accent": inverted bg + white text (강조 카드)
1149
+ * - "glass": 반투명 + backdrop blur (컬러/이미지 배경 위에 권장)
1150
+ * - "outlined": 투명 bg + 테두리만 (shadow 무시)
1151
+ */
1065
1152
  variant?: CardVariant;
1153
+ /** hover 시 살짝 떠오르는 인터랙션 (기본값: false). 클릭 가능한 카드에 사용 */
1154
+ interactive?: boolean;
1155
+ /** 카드 하단 영역 - 액션 버튼 등 (구분선과 함께 표시) */
1156
+ footer?: React$1.ReactNode;
1157
+ /** footer 정렬 (기본값: "end") */
1158
+ footerAlign?: CardFooterAlign;
1066
1159
  }
1067
1160
  /**
1068
1161
  * 카드 컴포넌트를 렌더링한다.
@@ -1070,7 +1163,7 @@ interface CardProps extends React$1.HTMLAttributes<HTMLDivElement> {
1070
1163
  * @param props 카드 속성
1071
1164
  * @returns 렌더링된 카드 UI
1072
1165
  */
1073
- declare const Card: ({ heading, headingAs: HeadingTag, shadow, padding, bordered, variant, className, children, ...props }: CardProps) => react_jsx_runtime.JSX.Element;
1166
+ declare const Card: ({ heading, headingAs: HeadingTag, shadow, padding, bordered, variant, interactive, footer, footerAlign, className, children, ...props }: CardProps) => react_jsx_runtime.JSX.Element;
1074
1167
 
1075
1168
  interface CheckboxProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "size"> {
1076
1169
  /** 체크박스 옆에 표시할 라벨 */
@@ -1278,7 +1371,7 @@ interface HeroAction {
1278
1371
  }
1279
1372
  type HeroHeight = "sm" | "md" | "lg" | "full";
1280
1373
  type HeroAlign = "left" | "center" | "right";
1281
- type HeroOverlay = boolean | "dark" | "light" | "navy";
1374
+ type HeroOverlay = boolean | "dark" | "light";
1282
1375
  interface HeroProps extends Omit<React$1.HTMLAttributes<HTMLElement>, "title"> {
1283
1376
  /** 히어로 높이 (기본값: "md"). sm=320 / md=480 / lg=640 / full=100vh */
1284
1377
  height?: HeroHeight;
@@ -1286,26 +1379,25 @@ interface HeroProps extends Omit<React$1.HTMLAttributes<HTMLElement>, "title"> {
1286
1379
  align?: HeroAlign;
1287
1380
  /** 배경 이미지 URL (CSS background-image로 사용) */
1288
1381
  backgroundImage?: string;
1289
- /** 배경색 backgroundImage 없을 때 또는 그 위에 색 적용 */
1382
+ /** 배경색 - backgroundImage 없을 때 또는 그 위에 색 적용 */
1290
1383
  backgroundColor?: string;
1291
1384
  /**
1292
1385
  * 텍스트 대비를 위한 오버레이.
1293
1386
  * - `true`/"dark": 위→아래 검정 그라데이션
1294
1387
  * - "light": 흰색 그라데이션
1295
- * - "navy": Bigtablet brand navy 그라데이션 (marketing 강조)
1296
1388
  */
1297
1389
  overlay?: HeroOverlay;
1298
1390
  /** h1으로 렌더링되는 메인 제목 */
1299
1391
  title?: React$1.ReactNode;
1300
1392
  /** 제목 아래 부제목 */
1301
1393
  subtitle?: React$1.ReactNode;
1302
- /** Eyebrow 텍스트 제목 위에 작게 표시되는 카테고리/태그 */
1394
+ /** Eyebrow 텍스트 - 제목 위에 작게 표시되는 카테고리/태그 */
1303
1395
  eyebrow?: React$1.ReactNode;
1304
1396
  /** CTA 영역 (Button 등) */
1305
1397
  children?: React$1.ReactNode;
1306
- /** 텍스트 색상 배경이 어두우면 흰색 권장 (기본값: "auto" overlay가 dark면 white) */
1398
+ /** 텍스트 색상 - 배경이 어두우면 흰색 권장 (기본값: "auto" - overlay가 dark면 white) */
1307
1399
  textColor?: "auto" | "inverse" | "default";
1308
- /** Primary CTA 미지정 시 children으로 직접 Button 전달 가능 */
1400
+ /** Primary CTA - 미지정 시 children으로 직접 Button 전달 가능 */
1309
1401
  primaryAction?: HeroAction;
1310
1402
  /** Secondary CTA */
1311
1403
  secondaryAction?: HeroAction;
@@ -1377,14 +1469,14 @@ interface LinearProgressProps extends React.HTMLAttributes<HTMLDivElement> {
1377
1469
  declare const LinearProgress: ({ totalSteps, currentStep, className, ...props }: LinearProgressProps) => react_jsx_runtime.JSX.Element;
1378
1470
 
1379
1471
  interface ListItemProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onClick"> {
1380
- /** 오버라인 텍스트 (상단 작은 글씨) */
1381
- overline?: string;
1382
- /** 라벨 텍스트 (주요 텍스트) */
1383
- label: string;
1384
- /** 보조 텍스트 (라벨 아래) */
1385
- supportingText?: string;
1386
- /** 메타데이터 텍스트 (보조 정보) */
1387
- metadata?: string;
1472
+ /** 오버라인 (상단 작은 글씨). 문자열 또는 노드(강조/링크/아이콘) */
1473
+ overline?: React$1.ReactNode;
1474
+ /** 라벨 (주요 텍스트). 문자열 또는 노드(강조/링크/Badge 등) */
1475
+ label: React$1.ReactNode;
1476
+ /** 보조 텍스트 (라벨 아래). 문자열 또는 노드 */
1477
+ supportingText?: React$1.ReactNode;
1478
+ /** 메타데이터 (보조 정보). 문자열 또는 노드 */
1479
+ metadata?: React$1.ReactNode;
1388
1480
  /** 왼쪽에 표시할 요소 (아이콘, 이미지, 체크박스 등) */
1389
1481
  leadingElement?: React$1.ReactNode;
1390
1482
  /** 오른쪽에 표시할 요소 (아이콘 버튼, 체크박스 등) */
@@ -1393,7 +1485,7 @@ interface ListItemProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "on
1393
1485
  alignment?: "top" | "middle";
1394
1486
  /** 비활성화 상태 */
1395
1487
  disabled?: boolean;
1396
- /** 선택 상태 accent.subtle 배경 + accent.default 좌측 인디케이터 */
1488
+ /** 선택 상태 - accent.subtle 배경 + accent.default 좌측 인디케이터 */
1397
1489
  selected?: boolean;
1398
1490
  /** 클릭 시 콜백 */
1399
1491
  onClick?: (event: React$1.MouseEvent<HTMLDivElement>) => void;
@@ -1423,7 +1515,7 @@ interface MediaCardProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "t
1423
1515
  heading?: React$1.ReactNode;
1424
1516
  /** 제목 시맨틱 태그 (기본값: "h3") */
1425
1517
  headingAs?: "h2" | "h3" | "h4" | "h5" | "h6";
1426
- /** Eyebrow 제목 위 작은 라벨/카테고리 */
1518
+ /** Eyebrow - 제목 위 작은 라벨/카테고리 */
1427
1519
  eyebrow?: React$1.ReactNode;
1428
1520
  /** 카드 그림자 (기본값: "sm") */
1429
1521
  shadow?: MediaCardShadow;
@@ -1431,7 +1523,7 @@ interface MediaCardProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "t
1431
1523
  bordered?: boolean;
1432
1524
  /** 카드 클릭 가능 여부 (hover 강조 + cursor) */
1433
1525
  clickable?: boolean;
1434
- /** 메타 영역 (날짜/작성자/조회수 등) 본문 아래 작은 텍스트 */
1526
+ /** 메타 영역 (날짜/작성자/조회수 등) - 본문 아래 작은 텍스트 */
1435
1527
  meta?: React$1.ReactNode;
1436
1528
  }
1437
1529
  /**
@@ -1454,7 +1546,7 @@ interface ModalProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title
1454
1546
  width?: number | string;
1455
1547
  /** 모달 제목 (h2, heading_large_bold) */
1456
1548
  title?: React$1.ReactNode;
1457
- /** 제목 아래 본문 설명 paragraph로 자동 wrap */
1549
+ /** 제목 아래 본문 설명 - paragraph로 자동 wrap */
1458
1550
  description?: React$1.ReactNode;
1459
1551
  /** 하단 액션 영역 (Button들). 미지정 시 footer 영역 자체가 안 보임 */
1460
1552
  footer?: React$1.ReactNode;
@@ -1529,19 +1621,67 @@ declare const Pagination: ({ page, totalPages, onChange, prevLabel, nextLabel, }
1529
1621
  interface RadioProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "size"> {
1530
1622
  /** 라디오 버튼 옆에 표시할 라벨 */
1531
1623
  label?: React$1.ReactNode;
1532
- /** 라디오 버튼 크기 (기본값: "md") */
1624
+ /** 라디오 버튼 크기 (기본값: "md"). `RadioGroup` 안에서는 그룹 size 가 기본값. */
1533
1625
  size?: "sm" | "md" | "lg";
1534
1626
  /** 입력 요소 참조 */
1535
1627
  ref?: React$1.Ref<HTMLInputElement>;
1536
1628
  }
1537
1629
  /**
1538
1630
  * 라디오 버튼을 렌더링한다.
1539
- * 크기별 클래스와 라벨을 조합해 UI구성한다.
1631
+ * `RadioGroup` 안에서는 그룹 컨텍스트(name/value/size/disabled)자동 수신하고,
1632
+ * 밖에서는 native radio 로 standalone 동작한다 (기존 동작 유지).
1540
1633
  * @param props 라디오 속성
1541
1634
  * @returns 렌더링된 라디오 UI
1542
1635
  */
1543
1636
  declare const Radio: {
1544
- ({ label, size, className, ref, ...props }: RadioProps): react_jsx_runtime.JSX.Element;
1637
+ ({ label, size: sizeProp, className, ref, value, checked, onChange, name: nameProp, disabled: disabledProp, ...props }: RadioProps): react_jsx_runtime.JSX.Element;
1638
+ displayName: string;
1639
+ };
1640
+
1641
+ type RadioGroupSize = "sm" | "md" | "lg";
1642
+ type RadioGroupOrientation = "vertical" | "horizontal";
1643
+ interface RadioGroupProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onChange"> {
1644
+ /** 제어형: 선택된 value */
1645
+ value?: string;
1646
+ /** 비제어형: 초기 선택 value */
1647
+ defaultValue?: string;
1648
+ /** value 변경 콜백 */
1649
+ onValueChange?: (value: string) => void;
1650
+ /** 라디오 그룹 name (미지정 시 자동 생성) */
1651
+ name?: string;
1652
+ /** 그룹 라벨 (radiogroup 의 접근성 레이블) */
1653
+ label?: React$1.ReactNode;
1654
+ /** 라벨/옵션 아래 보조 설명. error 일 때 에러 색 */
1655
+ supportingText?: React$1.ReactNode;
1656
+ /** 에러 상태 */
1657
+ error?: boolean;
1658
+ /** 그룹 사이즈 — 자식 Radio 에 전파 (기본값: "md") */
1659
+ size?: RadioGroupSize;
1660
+ /** 배치 방향 (기본값: "vertical") */
1661
+ orientation?: RadioGroupOrientation;
1662
+ /** 그룹 전체 비활성화 */
1663
+ disabled?: boolean;
1664
+ /** `Radio` 들 */
1665
+ children: React$1.ReactNode;
1666
+ }
1667
+ /**
1668
+ * `Radio` 들을 묶는 합성 래퍼. Context 로 name/value/size/disabled 를 공유한다.
1669
+ * native `input[type=radio]` 라 같은 name 공유 시 브라우저가 방향키 이동을 기본 제공한다.
1670
+ *
1671
+ * - 제어형: `value` + `onValueChange`
1672
+ * - 비제어형: `defaultValue`
1673
+ *
1674
+ * @example
1675
+ * ```tsx
1676
+ * <RadioGroup label="크기" defaultValue="md" onValueChange={setSize}>
1677
+ * <Radio value="sm" label="작게" />
1678
+ * <Radio value="md" label="보통" />
1679
+ * <Radio value="lg" label="크게" />
1680
+ * </RadioGroup>
1681
+ * ```
1682
+ */
1683
+ declare const RadioGroup: {
1684
+ ({ value: controlledValue, defaultValue, onValueChange, name: nameProp, label, supportingText, error, size, orientation, disabled, className, children, ...props }: RadioGroupProps): react_jsx_runtime.JSX.Element;
1545
1685
  displayName: string;
1546
1686
  };
1547
1687
 
@@ -1571,7 +1711,7 @@ interface SpinnerProps {
1571
1711
  }
1572
1712
  /**
1573
1713
  * 스피너를 렌더링한다. 12개 bar 가 방사형으로 배치되어 페이드 인/아웃 으로 회전하는 효과.
1574
- * Vercel/iOS 스타일 클래식 border-spin 보다 부드럽고 미니멀.
1714
+ * Vercel/iOS 스타일 - 클래식 border-spin 보다 부드럽고 미니멀.
1575
1715
  * @param props 스피너 속성
1576
1716
  * @returns 렌더링된 스피너 요소
1577
1717
  */
@@ -1579,7 +1719,7 @@ declare const Spinner: ({ size, ariaLabel }: SpinnerProps) => react_jsx_runtime.
1579
1719
 
1580
1720
  type TableSize = "sm" | "md" | "lg";
1581
1721
  interface TableColumn<T extends object> {
1582
- /** 컬럼 식별자 `data[key]` 자동 렌더링에도 쓰임 */
1722
+ /** 컬럼 식별자 - `data[key]` 자동 렌더링에도 쓰임 */
1583
1723
  key: string;
1584
1724
  /** thead에 표시할 헤더 텍스트 */
1585
1725
  header: React$1.ReactNode;
@@ -1599,7 +1739,7 @@ interface TableProps<T extends object> {
1599
1739
  keyExtractor: (item: T, index: number) => string | number;
1600
1740
  /** 데이터 없을 때 표시 (기본값: "데이터가 없습니다") */
1601
1741
  emptyMessage?: React$1.ReactNode;
1602
- /** 로딩 상태 헤더 유지, 바디만 스켈레톤 */
1742
+ /** 로딩 상태 - 헤더 유지, 바디만 스켈레톤 */
1603
1743
  isLoading?: boolean;
1604
1744
  /** 로딩 시 스켈레톤 행 개수 (기본값: 5) */
1605
1745
  skeletonRows?: number;
@@ -1661,6 +1801,12 @@ interface ThemeProviderProps {
1661
1801
  declare const ThemeProvider: React$1.FC<ThemeProviderProps>;
1662
1802
 
1663
1803
  type TextFieldSize = "sm" | "md" | "lg";
1804
+ /**
1805
+ * IME 조합(한글/일본어/중국어) 중 외부 콜백 처리 전략.
1806
+ * - `delayed`: 조합 완료 후에만 `onChangeAction` 호출 (기본 - 폼 제출/검증용).
1807
+ * - `immediate`: 조합 중에도 매 입력마다 즉시 호출 (실시간 검색/필터/미리보기용).
1808
+ */
1809
+ type ImeStrategy = "delayed" | "immediate";
1664
1810
  interface TextFieldProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "size" | "onChange" | "value" | "defaultValue"> {
1665
1811
  /** 입력 필드 크기 (기본값: "md") */
1666
1812
  size?: TextFieldSize;
@@ -1680,8 +1826,13 @@ interface TextFieldProps extends Omit<React$1.InputHTMLAttributes<HTMLInputEleme
1680
1826
  clearable?: boolean;
1681
1827
  /** 컨테이너 전체 너비 차지 여부 */
1682
1828
  fullWidth?: boolean;
1683
- /** 값 변경 시 호출되는 콜백 (IME 조합 완료 후 실행) */
1829
+ /** 값 변경 시 호출되는 콜백. 호출 시점은 `imeStrategy` 에 따름 (기본: 조합 완료 후) */
1684
1830
  onChangeAction?: (value: string) => void;
1831
+ /**
1832
+ * IME 조합 중 콜백 전략 (기본값: "delayed").
1833
+ * 실시간 구독(검색/필터) 이 필요하면 "immediate" - 한글 조합 중에도 매 입력 즉시 반영.
1834
+ */
1835
+ imeStrategy?: ImeStrategy;
1685
1836
  /** 제어형 입력 값 */
1686
1837
  value?: string;
1687
1838
  /** 비제어형 초기 입력 값 */
@@ -1699,7 +1850,66 @@ interface TextFieldProps extends Omit<React$1.InputHTMLAttributes<HTMLInputEleme
1699
1850
  * @returns 렌더링된 텍스트 필드 UI
1700
1851
  */
1701
1852
  declare const TextField: {
1702
- ({ id, label, showLabel, supportingText, error, leadingIcon, trailingIcon, clearable, fullWidth, size, className, onChangeAction, value, defaultValue, transformValue, ref, ...props }: TextFieldProps): react_jsx_runtime.JSX.Element;
1853
+ ({ id, label, showLabel, supportingText, error, leadingIcon, trailingIcon, clearable, fullWidth, size, className, onChangeAction, imeStrategy, value, defaultValue, transformValue, ref, ...props }: TextFieldProps): react_jsx_runtime.JSX.Element;
1854
+ displayName: string;
1855
+ };
1856
+
1857
+ type TextareaSize = TextFieldSize;
1858
+ type TextareaResize = "none" | "vertical" | "both";
1859
+ interface TextareaProps extends Omit<React$1.TextareaHTMLAttributes<HTMLTextAreaElement>, "size" | "onChange" | "value" | "defaultValue" | "rows"> {
1860
+ /** 입력 필드 크기 (기본값: "md") */
1861
+ size?: TextareaSize;
1862
+ /** 입력 필드 위에 표시할 라벨 텍스트 */
1863
+ label?: string;
1864
+ /** 라벨 표시 여부 (기본값: true) */
1865
+ showLabel?: boolean;
1866
+ /** 입력 필드 아래에 표시할 도움말 텍스트 */
1867
+ supportingText?: string;
1868
+ /** 에러 상태 여부 */
1869
+ error?: boolean;
1870
+ /** 컨테이너 전체 너비 차지 여부 */
1871
+ fullWidth?: boolean;
1872
+ /** 값 변경 시 호출되는 콜백. 호출 시점은 `imeStrategy` 에 따름 (기본: 조합 완료 후) */
1873
+ onChangeAction?: (value: string) => void;
1874
+ /**
1875
+ * IME 조합 중 콜백 전략 (기본값: "delayed").
1876
+ * 실시간 구독이 필요하면 "immediate" - 한글 조합 중에도 매 입력 즉시 반영.
1877
+ */
1878
+ imeStrategy?: ImeStrategy;
1879
+ /** 제어형 입력 값 */
1880
+ value?: string;
1881
+ /** 비제어형 초기 입력 값 */
1882
+ defaultValue?: string;
1883
+ /** 입력값 변환 함수 */
1884
+ transformValue?: (value: string) => string;
1885
+ /**
1886
+ * 고정 행 수 (기본 3). `minRows`/`maxRows` 미지정 시 고정 높이.
1887
+ * auto-grow 를 원하면 `minRows`/`maxRows` 사용.
1888
+ */
1889
+ rows?: number;
1890
+ /** auto-grow 최소 행 수. 지정 시 내용에 따라 높이 자동 증가 */
1891
+ minRows?: number;
1892
+ /** auto-grow 최대 행 수. 초과 시 스크롤 */
1893
+ maxRows?: number;
1894
+ /** 글자 수 카운터 표시 (maxLength 와 함께 사용 권장) */
1895
+ showCounter?: boolean;
1896
+ /** resize 핸들 제어 (기본 "vertical") */
1897
+ resize?: TextareaResize;
1898
+ /** textarea 요소 참조 */
1899
+ ref?: React$1.Ref<HTMLTextAreaElement>;
1900
+ }
1901
+ /**
1902
+ * 멀티라인 텍스트 입력. `TextField` 와 동일한 시각/토큰 + textarea 특화 기능.
1903
+ * auto-grow (`minRows`/`maxRows`), 글자 수 카운터, resize 제어, 한글 IME 정책 지원.
1904
+ *
1905
+ * @example
1906
+ * ```tsx
1907
+ * <Textarea label="내용" minRows={3} maxRows={8} maxLength={500} showCounter
1908
+ * onChangeAction={(v) => setContent(v)} />
1909
+ * ```
1910
+ */
1911
+ declare const Textarea: {
1912
+ ({ id, label, showLabel, supportingText, error, fullWidth, size, className, onChangeAction, imeStrategy, value, defaultValue, transformValue, rows, minRows, maxRows, showCounter, resize, maxLength, ref, ...props }: TextareaProps): react_jsx_runtime.JSX.Element;
1703
1913
  displayName: string;
1704
1914
  };
1705
1915
 
@@ -1812,7 +2022,7 @@ interface ContainerProps extends React$1.HTMLAttributes<HTMLDivElement> {
1812
2022
  declare const Container: ({ size, center, as: Tag, className, children, ...props }: ContainerProps) => react_jsx_runtime.JSX.Element;
1813
2023
 
1814
2024
  type SectionSpacing = "xs" | "sm" | "md" | "lg" | "xl";
1815
- type SectionBg = "default" | "dim" | "accent" | "navy" | "transparent";
2025
+ type SectionBg = "default" | "dim" | "accent" | "inverted" | "transparent";
1816
2026
  interface SectionProps extends React$1.HTMLAttributes<HTMLElement> {
1817
2027
  /**
1818
2028
  * 수직 패딩 크기
@@ -1822,7 +2032,7 @@ interface SectionProps extends React$1.HTMLAttributes<HTMLElement> {
1822
2032
  spacing?: SectionSpacing;
1823
2033
  /**
1824
2034
  * 배경색 변형
1825
- * - default: bg-solid | dim: bg-solid-dim | accent: accent-subtle | navy: accent-default
2035
+ * - default: bg-solid | dim: bg-solid-dim | accent: accent-subtle | inverted: accent-default (검정/흰색 반전)
1826
2036
  * @default "default"
1827
2037
  */
1828
2038
  bg?: SectionBg;
@@ -1910,7 +2120,7 @@ interface GridProps extends React$1.HTMLAttributes<HTMLDivElement> {
1910
2120
  rowGap?: GridGap;
1911
2121
  /** 열 간격 (gap을 override) */
1912
2122
  colGap?: GridGap;
1913
- /** 반응형 compact(< 600px)에서 강제 1열 (기본 true) */
2123
+ /** 반응형 - compact(< 600px)에서 강제 1열 (기본 true) */
1914
2124
  singleColOnMobile?: boolean;
1915
2125
  /** 렌더링할 HTML 요소 */
1916
2126
  as?: React$1.ElementType;
@@ -1934,4 +2144,4 @@ interface GridProps extends React$1.HTMLAttributes<HTMLDivElement> {
1934
2144
  */
1935
2145
  declare const Grid: ({ cols, minColWidth, gap, rowGap, colGap, singleColOnMobile, as: Tag, className, children, style, ...props }: GridProps) => react_jsx_runtime.JSX.Element;
1936
2146
 
1937
- 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 CardProps, Checkbox, type CheckboxProps, Chip, type ChipProps, type ChipSize, type ChipTone, type ChipType, Container, type ContainerProps, type ContainerSize, DatePicker, type DatePickerProps, Divider, type DividerProps, Dropdown, type DropdownOption, type DropdownProps, type DropdownSize, EmptyState, type EmptyStateProps, 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, 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, Radio, 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, Tabs, type TabsProps, type TabsSize, type TabsVariant, TextField, type TextFieldProps, 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, motion, opacity, radius, skeleton, spacing, typography, useAlert, useFocusTrap, useSpringHover, useSpringPresence, useTheme, useToast, zIndex };
2147
+ 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, 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, 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, motion, opacity, radius, skeleton, spacing, typography, useAlert, useFocusTrap, useSpringHover, useSpringPresence, useTheme, useToast, zIndex };