@bigtablet/design-system 1.24.2 → 1.26.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
@@ -1,5 +1,5 @@
1
+ import * as React$1 from 'react';
1
2
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import * as React from 'react';
3
3
 
4
4
  declare const a11y: {
5
5
  readonly focusRing: "0 0 0 3px rgba(0, 0, 0, 0.15)";
@@ -35,6 +35,7 @@ declare const baseColors: {
35
35
  readonly neutral300: "#999999";
36
36
  readonly neutral400: "#B3B3B3";
37
37
  readonly neutral500: "#888888";
38
+ readonly neutral600: "#6B6B6B";
38
39
  readonly neutral700: "#666666";
39
40
  readonly neutral900: "#121212";
40
41
  readonly statusError: "#EF4444";
@@ -128,7 +129,7 @@ declare const radius: {
128
129
  readonly full: "9999px";
129
130
  };
130
131
 
131
- declare const shadows: {
132
+ declare const elevation: {
132
133
  readonly level1: "0 1px 1px -1px rgba(0, 0, 0, 0.20), 0 3px 3px 0px rgba(0, 0, 0, 0.12)";
133
134
  readonly level2: "0 2px 2px -2px rgba(0, 0, 0, 0.20), 0 6px 6px 0px rgba(0, 0, 0, 0.12)";
134
135
  readonly level3: "0 3px 3px -3px rgba(0, 0, 0, 0.20), 0 9px 9px 0px rgba(0, 0, 0, 0.12)";
@@ -197,8 +198,15 @@ declare const baseTypography: {
197
198
  readonly "48": "48px";
198
199
  };
199
200
  readonly fontWeight: {
201
+ readonly thin: "Thin";
202
+ readonly extraLight: "ExtraLight";
203
+ readonly light: "Light";
200
204
  readonly regular: "Regular";
201
205
  readonly medium: "Medium";
206
+ readonly semiBold: "SemiBold";
207
+ readonly bold: "Bold";
208
+ readonly extraBold: "ExtraBold";
209
+ readonly black: "Black";
202
210
  };
203
211
  readonly lineHeight: {
204
212
  readonly "16": "16px";
@@ -422,35 +430,15 @@ declare const zIndex: {
422
430
  readonly level5: 1000;
423
431
  };
424
432
 
425
- interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
426
- /** 카드 상단에 표시할 제목 */
427
- heading?: React.ReactNode;
428
- /** 제목에 사용할 시맨틱 헤딩 태그 (기본값: "h3"). 스크린리더 outline에 반영됩니다. */
429
- headingAs?: "h2" | "h3" | "h4" | "h5" | "h6";
430
- /** 카드 그림자 크기 (기본값: "sm") */
431
- shadow?: "none" | "sm" | "md" | "lg";
432
- /** 카드 내부 여백 (기본값: "md") */
433
- padding?: "none" | "sm" | "md" | "lg";
434
- /** 테두리 표시 여부 (기본값: false) */
435
- bordered?: boolean;
436
- }
437
- /**
438
- * 카드 컴포넌트를 렌더링한다.
439
- * 그림자/패딩/테두리 옵션을 조합해 레이아웃 컨테이너를 구성한다.
440
- * @param props 카드 속성
441
- * @returns 렌더링된 카드 UI
442
- */
443
- declare const Card: ({ heading, headingAs: HeadingTag, shadow, padding, bordered, className, children, ...props }: CardProps) => react_jsx_runtime.JSX.Element;
444
-
445
433
  type AlertVariant = "info" | "success" | "warning" | "error";
446
434
  type AlertActionsAlign = "left" | "center" | "right";
447
435
  interface AlertOptions {
448
436
  /** 알림 스타일 변형 (기본값: "info") */
449
437
  variant?: AlertVariant;
450
438
  /** 알림 제목 */
451
- title?: React.ReactNode;
439
+ title?: React$1.ReactNode;
452
440
  /** 알림 본문 메시지 */
453
- message?: React.ReactNode;
441
+ message?: React$1.ReactNode;
454
442
  /** 확인 버튼 텍스트 (기본값: "확인") */
455
443
  confirmText?: string;
456
444
  /** 취소 버튼 텍스트 (기본값: "취소") */
@@ -479,99 +467,94 @@ declare const useAlert: () => AlertContextValue;
479
467
  * @param props Provider 속성
480
468
  * @returns 렌더링된 Provider와 모달
481
469
  */
482
- declare const AlertProvider: React.FC<{
483
- children: React.ReactNode;
470
+ declare const AlertProvider: React$1.FC<{
471
+ children: React$1.ReactNode;
484
472
  }>;
485
473
 
486
- interface SpinnerProps {
487
- /** 스피너 크기(px) (기본값: 24) */
488
- size?: number;
489
- /** 스피너 접근성 레이블 (기본값: "Loading") */
490
- ariaLabel?: string;
491
- }
492
- /**
493
- * 스피너를 렌더링한다.
494
- * 크기와 접근성 레이블을 적용한 뒤 상태 표시용 요소를 반환한다.
495
- * @param props 스피너 속성
496
- * @returns 렌더링된 스피너 요소
497
- */
498
- declare const Spinner: ({ size, ariaLabel }: SpinnerProps) => react_jsx_runtime.JSX.Element;
499
-
500
- interface ToastProviderProps {
501
- /** 앱 루트에서 감싸는 자식 요소 */
502
- children: React.ReactNode;
503
- /** 최대 동시 표시 토스트 수 (기본값: 5) */
504
- maxCount?: number;
505
- /** 토스트 닫기 버튼의 aria-label (기본값: "Close") */
506
- closeAriaLabel?: string;
474
+ type ButtonVariant = "filled" | "tonal" | "outline" | "text";
475
+ type ButtonSize = "sm" | "md" | "xl";
476
+ interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
477
+ /** 버튼 스타일 변형 (기본값: "filled") */
478
+ variant?: ButtonVariant;
479
+ /** 버튼 크기 (기본값: "md") */
480
+ size?: ButtonSize;
481
+ /** 버튼 앞에 표시할 아이콘 */
482
+ leadingIcon?: React$1.ReactNode;
483
+ /** 버튼 뒤에 표시할 아이콘 */
484
+ trailingIcon?: React$1.ReactNode;
485
+ /** 버튼이 컨테이너의 전체 너비를 차지할지 여부 */
486
+ fullWidth?: boolean;
487
+ /** border-radius 토큰 (기본값: "full") */
488
+ radius?: "none" | "xs" | "sm" | "md" | "lg" | "xl" | "full";
507
489
  }
508
490
  /**
509
- * 토스트 컨텍스트를 제공하는 Provider를 렌더링한다.
510
- * 최상단에서 children을 감싸야 useToast 훅을 사용할 수 있다.
511
- * @param props Provider 속성
512
- * @returns 렌더링된 Provider와 토스트 컨테이너
513
- */
514
- declare const ToastProvider: ({ children, maxCount, closeAriaLabel, }: ToastProviderProps) => react_jsx_runtime.JSX.Element;
515
-
516
- /**
517
- * 토스트 메시지를 표시하는 훅.
518
- * ToastProvider 내부에서만 사용할 수 있다.
519
- * @returns 토스트 메시지 표시 함수 객체
491
+ * 버튼을 렌더링한다.
492
+ * Figma DS 기준 4가지 variant(filled/tonal/outline/text)와 3가지 size(sm/md/xl)를 지원한다.
493
+ * @param props 버튼 속성
494
+ * @returns 렌더링된 버튼 요소
520
495
  */
521
- declare const useToast: () => {
522
- /** 성공 메시지를 표시한다 */
523
- success: (message: string, duration?: number) => void;
524
- /** 오류 메시지를 표시한다 */
525
- error: (message: string, duration?: number) => void;
526
- /** 경고 메시지를 표시한다 */
527
- warning: (message: string, duration?: number) => void;
528
- /** 정보 메시지를 표시한다 */
529
- info: (message: string, duration?: number) => void;
530
- /** 기본 메시지를 표시한다 */
531
- message: (message: string, duration?: number) => void;
532
- };
496
+ declare const Button: ({ variant, size, leadingIcon, trailingIcon, fullWidth, radius, className, children, ...props }: ButtonProps) => react_jsx_runtime.JSX.Element;
533
497
 
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;
498
+ interface CardProps extends React$1.HTMLAttributes<HTMLDivElement> {
499
+ /** 카드 상단에 표시할 제목 */
500
+ heading?: React$1.ReactNode;
501
+ /** 제목에 사용할 시맨틱 헤딩 태그 (기본값: "h3"). 스크린리더 outline에 반영됩니다. */
502
+ headingAs?: "h2" | "h3" | "h4" | "h5" | "h6";
503
+ /** 카드 그림자 크기 (기본값: "sm") */
504
+ shadow?: "none" | "sm" | "md" | "lg";
505
+ /** 카드 내부 여백 (기본값: "md") */
506
+ padding?: "none" | "sm" | "md" | "lg";
507
+ /** 테두리 표시 여부 (기본값: false) */
508
+ bordered?: boolean;
545
509
  }
546
510
  /**
547
- * 상단 로딩바를 렌더링한다.
548
- * 표시 여부와 진행률에 따라 determinate/indeterminate 상태를 구성한다.
549
- * @param props 로딩바 속성
550
- * @returns 렌더링된 로딩바 요소 또는 null
511
+ * 카드 컴포넌트를 렌더링한다.
512
+ * 그림자/패딩/테두리 옵션을 조합해 레이아웃 컨테이너를 구성한다.
513
+ * @param props 카드 속성
514
+ * @returns 렌더링된 카드 UI
551
515
  */
552
- declare const TopLoading: ({ progress, color, height, isLoading, ariaLabel, }: TopLoadingProps) => react_jsx_runtime.JSX.Element | null;
516
+ declare const Card: ({ heading, headingAs: HeadingTag, shadow, padding, bordered, className, children, ...props }: CardProps) => react_jsx_runtime.JSX.Element;
553
517
 
554
- interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "size"> {
518
+ interface CheckboxProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "size"> {
555
519
  /** 체크박스 옆에 표시할 라벨 */
556
- label?: React.ReactNode;
557
- /** 체크박스 크기 (기본값: "md") */
558
- size?: "sm" | "md" | "lg";
520
+ label?: React$1.ReactNode;
559
521
  /** 중간 선택(indeterminate) 상태 여부 */
560
522
  indeterminate?: boolean;
523
+ /** 에러 상태 여부 */
524
+ error?: boolean;
561
525
  /** 입력 요소 참조 */
562
- ref?: React.Ref<HTMLInputElement>;
526
+ ref?: React$1.Ref<HTMLInputElement>;
563
527
  }
564
528
  /**
565
529
  * 체크박스를 렌더링한다.
566
- * indeterminate 상태를 반영하고 라벨을 포함한 UI구성한다.
530
+ * Figma DS 기준 3가지 타입(Unselected/Checked/Indeterminate)과 state layer overlay지원한다.
567
531
  * @param props 체크박스 속성
568
532
  * @returns 렌더링된 체크박스 UI
569
533
  */
570
534
  declare const Checkbox: {
571
- ({ label, size, indeterminate, className, ref, ...props }: CheckboxProps): react_jsx_runtime.JSX.Element;
535
+ ({ label, indeterminate, error, className, ref, ...props }: CheckboxProps): react_jsx_runtime.JSX.Element;
572
536
  displayName: string;
573
537
  };
574
538
 
539
+ type ChipType = "basic" | "input" | "filter";
540
+ interface ChipProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onClick"> {
541
+ /** 칩 유형 (기본값: "basic") */
542
+ type?: ChipType;
543
+ /** 라벨 텍스트 */
544
+ label: string;
545
+ /** 선택 상태 */
546
+ selected?: boolean;
547
+ /** 삭제 가능 여부 (input 타입에서만 사용) */
548
+ removable?: boolean;
549
+ /** 비활성화 상태 */
550
+ disabled?: boolean;
551
+ /** 칩 클릭 시 콜백 */
552
+ onClick?: (event: React$1.MouseEvent<HTMLButtonElement>) => void;
553
+ /** 삭제 버튼 클릭 시 콜백 */
554
+ onRemove?: () => void;
555
+ }
556
+ declare const Chip: ({ type, label, selected, removable, disabled, onClick, onRemove, className, ...props }: ChipProps) => react_jsx_runtime.JSX.Element;
557
+
575
558
  type DatePickerMode = "year-month" | "year-month-day";
576
559
  type SelectableRange = "all" | "until-today";
577
560
  interface DatePickerProps {
@@ -620,18 +603,47 @@ interface DatePickerProps {
620
603
  /**
621
604
  * 연/월/일 선택형 데이트 피커를 렌더링한다.
622
605
  * 입력 값과 선택 범위를 기준으로 옵션을 계산하고, 선택 변경을 상위로 전달한다.
623
- * @param props 데이트 피커 속성
624
- * @returns 렌더링된 데이트 피커 UI
625
606
  */
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;
607
+ declare const DatePicker: ({ label, value, onChange, mode, startYear, endYear: endYearProp, minDate, selectableRange, disabled, fullWidth, width, yearLabel, monthLabel, dayLabel, minDateSrFormat, selectableRangeUntilTodaySrText, }: DatePickerProps) => react_jsx_runtime.JSX.Element;
608
+
609
+ interface DividerProps extends React$1.HTMLAttributes<HTMLHRElement> {
610
+ /** 구분선 두께 (기본값: "standard") */
611
+ weight?: "standard" | "heavy";
612
+ }
613
+ /**
614
+ * 구분선 컴포넌트를 렌더링한다.
615
+ * 콘텐츠 영역을 시각적으로 분리하는 수평 구분선을 표시한다.
616
+ * @param props 구분선 속성
617
+ * @returns 렌더링된 구분선 UI
618
+ */
619
+ declare const Divider: ({ weight, className, ...props }: DividerProps) => react_jsx_runtime.JSX.Element;
620
+
621
+ type FABVariant = "primary" | "additive";
622
+ interface FABProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
623
+ /** FAB 스타일 변형 (기본값: "primary") */
624
+ variant?: FABVariant;
625
+ /** 표시할 아이콘 */
626
+ icon: React$1.ReactNode;
627
+ /** 접근성 레이블 (스크린 리더용, 아이콘 전용 버튼이므로 필수) */
628
+ "aria-label": string;
629
+ }
630
+ /**
631
+ * FAB(Floating Action Button)을 렌더링한다.
632
+ * 화면에서 가장 중요한 단일 액션을 강조하는 플로팅 버튼이다.
633
+ * @param props FAB 속성
634
+ * @returns 렌더링된 FAB 요소
635
+ */
636
+ declare const FAB: ({ variant, icon, className, ...props }: FABProps) => react_jsx_runtime.JSX.Element;
627
637
 
628
- interface FileInputProps extends React.InputHTMLAttributes<HTMLInputElement> {
638
+ interface FileInputProps extends React$1.InputHTMLAttributes<HTMLInputElement> {
629
639
  /** 파일 선택 버튼 라벨 텍스트 (기본값: "Choose file") */
630
640
  label?: string;
631
641
  /** 파일 선택 시 호출되는 콜백 */
632
642
  onFiles?: (files: FileList | null) => void;
633
- /** 허용 파일 형식 안내 텍스트. 스크린리더에게 전달됩니다. (예: "PDF, DOC 파일만 업로드 가능합니다") */
634
- helperText?: string;
643
+ /** 입력 필드 아래에 표시할 도움말 텍스트 (예: "PDF, DOC 파일만 업로드 가능합니다") */
644
+ supportingText?: string;
645
+ /** 이미지 파일 선택 시 썸네일 미리보기 표시 여부 (기본값: false) */
646
+ preview?: boolean;
635
647
  }
636
648
  /**
637
649
  * 파일 입력 컴포넌트를 렌더링한다.
@@ -639,15 +651,119 @@ interface FileInputProps extends React.InputHTMLAttributes<HTMLInputElement> {
639
651
  * @param props 파일 입력 속성
640
652
  * @returns 렌더링된 파일 입력 UI
641
653
  */
642
- declare const FileInput: ({ label, onFiles, helperText, className, disabled, ...props }: FileInputProps) => react_jsx_runtime.JSX.Element;
654
+ declare const FileInput: ({ label, onFiles, supportingText, preview, className, disabled, ...props }: FileInputProps) => react_jsx_runtime.JSX.Element;
655
+
656
+ type IconButtonVariant = "standard" | "filled" | "tonal" | "outlined";
657
+ type IconButtonSize = "sm" | "md";
658
+ interface IconButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
659
+ /** 아이콘 버튼 스타일 변형 (기본값: "standard") */
660
+ variant?: IconButtonVariant;
661
+ /** 아이콘 버튼 크기 (기본값: "md") */
662
+ size?: IconButtonSize;
663
+ /** 표시할 아이콘 */
664
+ icon: React$1.ReactNode;
665
+ }
666
+ /**
667
+ * 아이콘만 표시하는 버튼을 렌더링한다.
668
+ * Figma DS 기준 4가지 variant(standard/filled/tonal/outlined)와 2가지 size(sm/md)를 지원한다.
669
+ * @param props 아이콘 버튼 속성
670
+ * @returns 렌더링된 아이콘 버튼 요소
671
+ */
672
+ declare const IconButton: ({ variant, size, icon, className, ...props }: IconButtonProps) => react_jsx_runtime.JSX.Element;
673
+
674
+ interface LinearProgressProps extends React.HTMLAttributes<HTMLDivElement> {
675
+ /** 전체 단계 수 */
676
+ totalSteps: number;
677
+ /** 현재 단계 (0부터 totalSteps까지) */
678
+ currentStep: number;
679
+ /** 접근성 레이블 (스크린 리더용) */
680
+ "aria-label": string;
681
+ }
682
+ /**
683
+ * 선형 진행 표시기를 렌더링한다.
684
+ * 현재 단계와 전체 단계를 기반으로 진행률을 시각적으로 표시한다.
685
+ * @param props 진행 표시기 속성
686
+ * @returns 렌더링된 진행 표시기 요소
687
+ */
688
+ declare const LinearProgress: ({ totalSteps, currentStep, className, ...props }: LinearProgressProps) => react_jsx_runtime.JSX.Element;
689
+
690
+ interface ListItemProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onClick"> {
691
+ /** 오버라인 텍스트 (상단 작은 글씨) */
692
+ overline?: string;
693
+ /** 라벨 텍스트 (주요 텍스트) */
694
+ label: string;
695
+ /** 보조 텍스트 (라벨 아래) */
696
+ supportingText?: string;
697
+ /** 메타데이터 텍스트 (보조 정보) */
698
+ metadata?: string;
699
+ /** 왼쪽에 표시할 요소 (아이콘, 이미지, 체크박스 등) */
700
+ leadingElement?: React$1.ReactNode;
701
+ /** 오른쪽에 표시할 요소 (아이콘 버튼, 체크박스 등) */
702
+ trailingElement?: React$1.ReactNode;
703
+ /** 요소 정렬 (기본값: "top") */
704
+ alignment?: "top" | "middle";
705
+ /** 비활성화 상태 */
706
+ disabled?: boolean;
707
+ /** 클릭 시 콜백 */
708
+ onClick?: (event: React$1.MouseEvent<HTMLDivElement>) => void;
709
+ }
710
+ /**
711
+ * 리스트 아이템 컴포넌트를 렌더링한다.
712
+ * 리딩/트레일링 슬롯과 다양한 텍스트 구조를 지원한다.
713
+ * @param props 리스트 아이템 속성
714
+ * @returns 렌더링된 리스트 아이템 UI
715
+ */
716
+ declare const ListItem: ({ overline, label, supportingText, metadata, leadingElement, trailingElement, alignment, disabled, onClick, className, ...props }: ListItemProps) => react_jsx_runtime.JSX.Element;
643
717
 
644
- interface RadioProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "size"> {
718
+ interface ModalProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
719
+ /** 모달 열림 여부 */
720
+ open: boolean;
721
+ /** 모달 닫기 콜백 */
722
+ onClose?: () => void;
723
+ /** 오버레이 클릭 시 닫기 여부 (기본값: true) */
724
+ closeOnOverlay?: boolean;
725
+ /** 모달 패널 너비 (기본값: 520) */
726
+ width?: number | string;
727
+ /** 모달 헤더에 표시할 제목 */
728
+ title?: React$1.ReactNode;
729
+ /** 모달 접근성 레이블(기본값: title 또는 "Dialog") */
730
+ ariaLabel?: string;
731
+ }
732
+ /**
733
+ * 모달을 렌더링한다.
734
+ * 포커스 트랩과 스크롤 잠금을 적용하고, 열림 상태에 따라 오버레이/패널을 구성한다.
735
+ * @param props 모달 속성
736
+ * @returns 열림 상태일 때 렌더링된 모달, 닫힘 상태면 null
737
+ */
738
+ declare const Modal: ({ open, onClose, closeOnOverlay, width, title, children, className, ariaLabel, ...props }: ModalProps) => react_jsx_runtime.JSX.Element | null;
739
+
740
+ interface PaginationProps {
741
+ /** 현재 페이지 번호 (1-based) */
742
+ page: number;
743
+ /** 전체 페이지 수 */
744
+ totalPages: number;
745
+ /** 페이지 변경 시 호출되는 콜백 */
746
+ onChange: (page: number) => void;
747
+ /** 이전 페이지 버튼 aria-label (기본값: "Previous page") */
748
+ prevLabel?: string;
749
+ /** 다음 페이지 버튼 aria-label (기본값: "Next page") */
750
+ nextLabel?: string;
751
+ }
752
+ /**
753
+ * 페이지네이션을 렌더링한다.
754
+ * 이전/다음 버튼과 페이지 목록을 구성해 전달된 콜백으로 페이지 변경을 전달한다.
755
+ * @param props 페이지네이션 속성
756
+ * @returns 렌더링된 페이지네이션 UI
757
+ */
758
+ declare const Pagination: ({ page, totalPages, onChange, prevLabel, nextLabel, }: PaginationProps) => react_jsx_runtime.JSX.Element;
759
+
760
+ interface RadioProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "size"> {
645
761
  /** 라디오 버튼 옆에 표시할 라벨 */
646
- label?: React.ReactNode;
762
+ label?: React$1.ReactNode;
647
763
  /** 라디오 버튼 크기 (기본값: "md") */
648
764
  size?: "sm" | "md" | "lg";
649
765
  /** 입력 요소 참조 */
650
- ref?: React.Ref<HTMLInputElement>;
766
+ ref?: React$1.Ref<HTMLInputElement>;
651
767
  }
652
768
  /**
653
769
  * 라디오 버튼을 렌더링한다.
@@ -660,7 +776,64 @@ declare const Radio: {
660
776
  displayName: string;
661
777
  };
662
778
 
663
- interface SwitchProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "onChange"> {
779
+ type SelectSize = "sm" | "md" | "lg";
780
+ type SelectVariant = "outline" | "filled" | "ghost";
781
+ interface SelectOption {
782
+ value: string;
783
+ label: string;
784
+ disabled?: boolean;
785
+ }
786
+ interface SelectProps {
787
+ /** 셀렉트 요소의 id (미입력 시 자동 생성) */
788
+ id?: string;
789
+ /** 셀렉트 위에 표시할 라벨 텍스트 */
790
+ label?: string;
791
+ /** 선택 전 표시할 플레이스홀더 (기본값: "Select…") */
792
+ placeholder?: string;
793
+ /** 표시할 옵션 목록 */
794
+ options: SelectOption[];
795
+ /** 제어형 선택 값 */
796
+ value?: string | null;
797
+ /** 값 변경 시 호출되는 콜백. 선택된 값과 전체 옵션 객체를 인자로 전달합니다. */
798
+ onChange?: (value: string | null, option?: SelectOption | null) => void;
799
+ /** 비제어형 초기 선택 값 */
800
+ defaultValue?: string | null;
801
+ /** 비활성화 여부 */
802
+ disabled?: boolean;
803
+ /** 셀렉트 크기 (기본값: "md") */
804
+ size?: SelectSize;
805
+ /** 셀렉트 스타일 변형 (기본값: "outline") */
806
+ variant?: SelectVariant;
807
+ /** 컨테이너 전체 너비 차지 여부 */
808
+ fullWidth?: boolean;
809
+ /** 루트 요소에 추가할 className */
810
+ className?: string;
811
+ /** 선택된 값 텍스트 정렬 (기본값: "left") */
812
+ textAlign?: "left" | "center";
813
+ }
814
+ /**
815
+ * 셀렉트 컴포넌트를 렌더링한다.
816
+ * 제어형/비제어형 상태를 정리하고, 키보드/마우스 상호작용과 드롭다운 표시를 관리한다.
817
+ * @param props 셀렉트 속성
818
+ * @returns 렌더링된 셀렉트 UI
819
+ */
820
+ declare const Select: ({ id, label, placeholder, options, value, onChange, defaultValue, disabled, size, variant, fullWidth, className, textAlign, }: SelectProps) => react_jsx_runtime.JSX.Element;
821
+
822
+ interface SpinnerProps {
823
+ /** 스피너 크기(px) (기본값: 24) */
824
+ size?: number;
825
+ /** 스피너 접근성 레이블 (기본값: "Loading") */
826
+ ariaLabel?: string;
827
+ }
828
+ /**
829
+ * 스피너를 렌더링한다.
830
+ * 크기와 접근성 레이블을 적용한 뒤 상태 표시용 요소를 반환한다.
831
+ * @param props 스피너 속성
832
+ * @returns 렌더링된 스피너 요소
833
+ */
834
+ declare const Spinner: ({ size, ariaLabel }: SpinnerProps) => react_jsx_runtime.JSX.Element;
835
+
836
+ interface SwitchProps extends Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, "onChange"> {
664
837
  /** 제어형 스위치 상태 */
665
838
  checked?: boolean;
666
839
  /** 비제어형 초기 스위치 상태 */
@@ -674,7 +847,7 @@ interface SwitchProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>
674
847
  /** 스위치 접근성 레이블(스크린 리더용) */
675
848
  ariaLabel: string;
676
849
  /** 버튼 요소 참조 */
677
- ref?: React.Ref<HTMLButtonElement>;
850
+ ref?: React$1.Ref<HTMLButtonElement>;
678
851
  }
679
852
  /**
680
853
  * 스위치를 렌더링한다.
@@ -687,25 +860,19 @@ declare const Switch: {
687
860
  displayName: string;
688
861
  };
689
862
 
690
- type TextFieldVariant = "outline" | "filled" | "ghost";
691
- type TextFieldSize = "sm" | "md" | "lg";
692
- interface TextFieldProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "size" | "onChange" | "value" | "defaultValue"> {
863
+ interface TextFieldProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "size" | "onChange" | "value" | "defaultValue"> {
693
864
  /** 입력 필드 위에 표시할 라벨 텍스트 */
694
865
  label?: string;
866
+ /** 라벨 표시 여부 (기본값: true) */
867
+ showLabel?: boolean;
695
868
  /** 입력 필드 아래에 표시할 도움말 텍스트 */
696
- helperText?: string;
869
+ supportingText?: string;
697
870
  /** 에러 상태 여부 */
698
871
  error?: boolean;
699
- /** 성공 상태 여부 */
700
- success?: boolean;
701
- /** 입력 필드 스타일 변형 (기본값: "outline") */
702
- variant?: TextFieldVariant;
703
- /** 입력 필드 크기 (기본값: "md") */
704
- size?: TextFieldSize;
705
872
  /** 입력 필드 왼쪽에 표시할 아이콘 */
706
- leftIcon?: React.ReactNode;
873
+ leadingIcon?: React$1.ReactNode;
707
874
  /** 입력 필드 오른쪽에 표시할 아이콘 */
708
- rightIcon?: React.ReactNode;
875
+ trailingIcon?: React$1.ReactNode;
709
876
  /** 컨테이너 전체 너비 차지 여부 */
710
877
  fullWidth?: boolean;
711
878
  /** 값 변경 시 호출되는 콜백 (IME 조합 완료 후 실행) */
@@ -717,123 +884,71 @@ interface TextFieldProps extends Omit<React.InputHTMLAttributes<HTMLInputElement
717
884
  /** 입력값 변환 함수 (예: 숫자만 허용, 대문자 변환) */
718
885
  transformValue?: (value: string) => string;
719
886
  /** 입력 요소 참조 */
720
- ref?: React.Ref<HTMLInputElement>;
887
+ ref?: React$1.Ref<HTMLInputElement>;
721
888
  }
722
889
  /**
723
890
  * 텍스트 필드를 렌더링한다.
724
- * 제어형/비제어형 값을 동기화하고, 조합 입력(IME)을 고려해 변경 이벤트를 전달한다.
891
+ * Figma DS 기준 outlined 스타일 + floating label을 지원한다.
725
892
  * @param props 텍스트 필드 속성
726
893
  * @returns 렌더링된 텍스트 필드 UI
727
894
  */
728
895
  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;
896
+ ({ id, label, showLabel, supportingText, error, leadingIcon, trailingIcon, fullWidth, className, onChangeAction, value, defaultValue, transformValue, ref, ...props }: TextFieldProps): react_jsx_runtime.JSX.Element;
730
897
  displayName: string;
731
898
  };
732
899
 
733
- interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
734
- /** 버튼 스타일 변형 (기본값: "primary") */
735
- variant?: "primary" | "secondary" | "ghost" | "danger";
736
- /** 버튼 크기 (기본값: "md") */
737
- size?: "sm" | "md" | "lg";
738
- /** 버튼이 컨테이너의 전체 너비를 차지할지 여부 */
739
- fullWidth?: boolean;
740
- /**
741
- * 버튼의 커스텀 너비
742
- * @deprecated `fullWidth` 사용 또는 CSS로 처리
743
- */
744
- width?: string;
745
- }
746
- /**
747
- * 버튼을 렌더링한다.
748
- * 전달된 props로 클래스 조합과 인라인 스타일을 계산한 뒤 버튼 요소를 반환한다.
749
- * @param props 버튼 속성
750
- * @returns 렌더링된 버튼 요소
751
- */
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";
900
+ interface ToastProviderProps {
901
+ /** 루트에서 감싸는 자식 요소 */
902
+ children: React$1.ReactNode;
903
+ /** 최대 동시 표시 토스트 수 (기본값: 5) */
904
+ maxCount?: number;
905
+ /** 토스트 닫기 버튼의 aria-label (기본값: "Close") */
906
+ closeAriaLabel?: string;
788
907
  }
789
908
  /**
790
- * 셀렉트 컴포넌트를 렌더링한다.
791
- * 제어형/비제어형 상태를 정리하고, 키보드/마우스 상호작용과 드롭다운 표시를 관리한다.
792
- * @param props 셀렉트 속성
793
- * @returns 렌더링된 셀렉트 UI
909
+ * 토스트 컨텍스트를 제공하는 Provider를 렌더링한다.
910
+ * 최상단에서 children을 감싸야 useToast 훅을 사용할 수 있다.
911
+ * @param props Provider 속성
912
+ * @returns 렌더링된 Provider와 토스트 컨테이너
794
913
  */
795
- declare const Select: ({ id, label, placeholder, options, value, onChange, defaultValue, disabled, size, variant, fullWidth, className, textAlign, }: SelectProps) => react_jsx_runtime.JSX.Element;
914
+ declare const ToastProvider: ({ children, maxCount, closeAriaLabel, }: ToastProviderProps) => react_jsx_runtime.JSX.Element;
796
915
 
797
- interface PaginationProps {
798
- /** 현재 페이지 번호 (1-based) */
799
- page: number;
800
- /** 전체 페이지 수 */
801
- totalPages: number;
802
- /** 페이지 변경 시 호출되는 콜백 */
803
- onChange: (page: number) => void;
804
- /** 이전 페이지 버튼 aria-label (기본값: "Previous page") */
805
- prevLabel?: string;
806
- /** 다음 페이지 버튼 aria-label (기본값: "Next page") */
807
- nextLabel?: string;
808
- }
809
916
  /**
810
- * 페이지네이션을 렌더링한다.
811
- * 이전/다음 버튼과 페이지 목록을 구성해 전달된 콜백으로 페이지 변경을 전달한다.
812
- * @param props 페이지네이션 속성
813
- * @returns 렌더링된 페이지네이션 UI
917
+ * 토스트 메시지를 표시하는 훅.
918
+ * ToastProvider 내부에서만 사용할 있다.
919
+ * @returns 토스트 메시지 표시 함수 객체
814
920
  */
815
- declare const Pagination: ({ page, totalPages, onChange, prevLabel, nextLabel, }: PaginationProps) => react_jsx_runtime.JSX.Element;
921
+ declare const useToast: () => {
922
+ /** 성공 메시지를 표시한다 */
923
+ success: (message: string, duration?: number) => void;
924
+ /** 오류 메시지를 표시한다 */
925
+ error: (message: string, duration?: number) => void;
926
+ /** 경고 메시지를 표시한다 */
927
+ warning: (message: string, duration?: number) => void;
928
+ /** 정보 메시지를 표시한다 */
929
+ info: (message: string, duration?: number) => void;
930
+ /** 기본 메시지를 표시한다 */
931
+ message: (message: string, duration?: number) => void;
932
+ };
816
933
 
817
- interface ModalProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
818
- /** 모달 열림 여부 */
819
- open: boolean;
820
- /** 모달 닫기 콜백 */
821
- onClose?: () => void;
822
- /** 오버레이 클릭 시 닫기 여부 (기본값: true) */
823
- closeOnOverlay?: boolean;
824
- /** 모달 패널 너비 (기본값: 520) */
825
- width?: number | string;
826
- /** 모달 헤더에 표시할 제목 */
827
- title?: React.ReactNode;
828
- /** 모달 접근성 레이블(기본값: title 또는 "Dialog") */
934
+ interface TopLoadingProps {
935
+ /** 진행률 (0-100). undefined면 indeterminate 모드 */
936
+ progress?: number;
937
+ /** 로딩바 색상 (기본: primary) */
938
+ color?: string;
939
+ /** 로딩바 높이 (기본: 3px) */
940
+ height?: number;
941
+ /** 표시 여부 */
942
+ isLoading?: boolean;
943
+ /** 프로그레스 바의 접근성 레이블 (기본값: "Page loading") */
829
944
  ariaLabel?: string;
830
945
  }
831
946
  /**
832
- * 모달을 렌더링한다.
833
- * 포커스 트랩과 스크롤 잠금을 적용하고, 열림 상태에 따라 오버레이/패널을 구성한다.
834
- * @param props 모달 속성
835
- * @returns 열림 상태일 때 렌더링된 모달, 닫힘 상태면 null
947
+ * 상단 로딩바를 렌더링한다.
948
+ * 표시 여부와 진행률에 따라 determinate/indeterminate 상태를 구성한다.
949
+ * @param props 로딩바 속성
950
+ * @returns 렌더링된 로딩바 요소 또는 null
836
951
  */
837
- declare const Modal: ({ open, onClose, closeOnOverlay, width, title, children, className, ariaLabel, ...props }: ModalProps) => react_jsx_runtime.JSX.Element | null;
952
+ declare const TopLoading: ({ progress, color, height, isLoading, ariaLabel, }: TopLoadingProps) => react_jsx_runtime.JSX.Element | null;
838
953
 
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 };
954
+ export { AlertProvider, Button, type ButtonProps, Card, type CardProps, Checkbox, type CheckboxProps, Chip, type ChipProps, type ChipType, DatePicker, Divider, type DividerProps, FAB, type FABProps, type FABVariant, FileInput, type FileInputProps, IconButton, type IconButtonProps, type IconButtonSize, type IconButtonVariant, LinearProgress, type LinearProgressProps, ListItem, type ListItemProps, Modal, type ModalProps, Pagination, type PaginationProps, Radio, type RadioProps, Select, type SelectOption, type SelectProps, Spinner, type SpinnerProps, Switch, type SwitchProps, TextField, type TextFieldProps, ToastProvider, TopLoading, type TopLoadingProps, a11y, baseBorderWidth, baseColors, baseTypography, borderWidth, breakpoints, colors, elevation, motion, opacity, radius, skeleton, spacing, typography, useAlert, useToast, zIndex };