@bestow-ui/react 0.9.0 → 0.10.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.cts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as _bestow_ui_tokens from '@bestow-ui/tokens';
2
2
  import { space } from '@bestow-ui/tokens';
3
3
  import * as react from 'react';
4
- import { HTMLAttributes, CSSProperties, ComponentPropsWithoutRef, ReactNode, ElementType, ButtonHTMLAttributes, InputHTMLAttributes, AnchorHTMLAttributes, ReactElement, TextareaHTMLAttributes } from 'react';
4
+ import { HTMLAttributes, CSSProperties, ComponentPropsWithoutRef, ReactNode, ElementType, ButtonHTMLAttributes, InputHTMLAttributes, AnchorHTMLAttributes, ReactElement, TdHTMLAttributes, ThHTMLAttributes, TextareaHTMLAttributes } from 'react';
5
5
  import * as RadixAccordion from '@radix-ui/react-accordion';
6
6
  import * as Dialog from '@radix-ui/react-dialog';
7
7
  import * as RadixMenu from '@radix-ui/react-dropdown-menu';
@@ -430,6 +430,51 @@ interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'siz
430
430
  }
431
431
  declare const Checkbox: react.ForwardRefExoticComponent<CheckboxProps & react.RefAttributes<HTMLInputElement>>;
432
432
 
433
+ interface ComboboxOption {
434
+ value: string;
435
+ /** 표시·검색에 쓰는 이름 */
436
+ label: string;
437
+ disabled?: boolean;
438
+ }
439
+ interface ComboboxProps {
440
+ /** 선택지 목록 */
441
+ options: ComboboxOption[];
442
+ /** 선택된 값 (제어 모드). undefined 면 선택 없음 */
443
+ value?: string;
444
+ /** 처음 선택된 값 (비제어 모드) */
445
+ defaultValue?: string;
446
+ /** 값이 바뀔 때 호출된다 */
447
+ onValueChange?: (value: string) => void;
448
+ /** 입력한 글자로 선택지를 거르는 함수 (기본: 대소문자 구분 없이 label 에 포함) */
449
+ filter?: (option: ComboboxOption, query: string) => boolean;
450
+ /** 검색 결과가 없을 때 문구 */
451
+ emptyMessage?: ReactNode;
452
+ placeholder?: string;
453
+ /** 위에 표시할 레이블 */
454
+ label?: ReactNode;
455
+ /** 아래에 표시할 도움말. error 일 때는 에러 메시지로 표시된다 */
456
+ helperText?: ReactNode;
457
+ error?: boolean;
458
+ size?: 'sm' | 'md' | 'lg';
459
+ fullWidth?: boolean;
460
+ disabled?: boolean;
461
+ required?: boolean;
462
+ /** form 제출 시 사용할 이름 (선택된 value 가 제출된다) */
463
+ name?: string;
464
+ id?: string;
465
+ /** label 이 없을 때 스크린리더용 이름 */
466
+ 'aria-label'?: string;
467
+ /** 목록 열기 버튼의 이름 */
468
+ toggleLabel?: string;
469
+ /** 입력창 래퍼 className */
470
+ className?: string;
471
+ }
472
+ /**
473
+ * 입력해서 거르며 고르는 선택 상자 (WAI-ARIA combobox + listbox 패턴).
474
+ * ↓/↑ 로 목록을 열고 이동, Enter 로 선택, Esc 로 닫는다. 목록에 없는 값은 입력할 수 없다(선택만).
475
+ */
476
+ declare const Combobox: react.ForwardRefExoticComponent<ComboboxProps & react.RefAttributes<HTMLInputElement>>;
477
+
433
478
  interface DividerProps extends HTMLAttributes<HTMLDivElement> {
434
479
  /** 방향. vertical 은 flex 행 안에서 부모 높이를 채운다 */
435
480
  orientation?: 'horizontal' | 'vertical';
@@ -787,6 +832,48 @@ interface SkeletonProps extends HTMLAttributes<HTMLSpanElement> {
787
832
  */
788
833
  declare const Skeleton: react.ForwardRefExoticComponent<SkeletonProps & react.RefAttributes<HTMLSpanElement>>;
789
834
 
835
+ interface SliderProps {
836
+ /** 값 (제어 모드). 손잡이 하나면 `[50]`, 범위면 `[20, 80]` */
837
+ value?: number[];
838
+ /** 처음 값 (비제어 모드) */
839
+ defaultValue?: number[];
840
+ /** 값이 바뀌는 동안 계속 호출된다 */
841
+ onValueChange?: (value: number[]) => void;
842
+ /** 드래그·키 입력이 끝났을 때 한 번 호출된다 (서버 저장 등) */
843
+ onValueCommit?: (value: number[]) => void;
844
+ min?: number;
845
+ max?: number;
846
+ step?: number;
847
+ /** 범위 슬라이더에서 두 손잡이 사이 최소 간격(step 개수) */
848
+ minStepsBetweenThumbs?: number;
849
+ /** 위에 표시하는 레이블. 손잡이(slider)의 이름이 된다 */
850
+ label?: ReactNode;
851
+ /** label 이 없을 때 스크린리더용 이름 */
852
+ 'aria-label'?: string;
853
+ /** 아래에 표시하는 보조 설명 (aria-describedby 로 연결) */
854
+ helperText?: ReactNode;
855
+ /** 오른쪽 위에 현재 값을 보여 준다 */
856
+ showValue?: boolean;
857
+ /** 값 텍스트 형식. 화면 표시와 스크린리더(aria-valuetext)에 함께 쓴다 (예: v => `${v.toLocaleString()}원`) */
858
+ formatValue?: (value: number) => string;
859
+ /**
860
+ * 범위 슬라이더에서 손잡이마다 덧붙일 이름 (기본 ["최소", "최대"]).
861
+ * 스크린리더는 "가격 최소", "가격 최대" 처럼 레이블과 함께 읽는다
862
+ */
863
+ thumbLabels?: string[];
864
+ size?: 'sm' | 'md';
865
+ disabled?: boolean;
866
+ /** form 제출 시 사용할 이름 */
867
+ name?: string;
868
+ id?: string;
869
+ className?: string;
870
+ }
871
+ /**
872
+ * 범위 안에서 값을 고르는 슬라이더. 손잡이를 끌거나 키보드(←→↑↓, PageUp/Down, Home/End)로 조절한다.
873
+ * Radix Slider 기반이라 손잡이마다 role="slider" 와 aria-valuemin/max/now 가 붙는다.
874
+ */
875
+ declare const Slider: react.ForwardRefExoticComponent<SliderProps & react.RefAttributes<HTMLSpanElement>>;
876
+
790
877
  interface SpinnerProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {
791
878
  /** 크기 (sm 16px, md 20px, lg 28px) */
792
879
  size?: 'sm' | 'md' | 'lg';
@@ -841,6 +928,55 @@ interface SwitchProps {
841
928
  }
842
929
  declare const Switch: react.ForwardRefExoticComponent<SwitchProps & react.RefAttributes<HTMLButtonElement>>;
843
930
 
931
+ type TableSize = 'sm' | 'md';
932
+ interface TableProps extends HTMLAttributes<HTMLTableElement> {
933
+ /** 셀 여백 */
934
+ size?: TableSize;
935
+ /** 짝수 행 배경을 칠한다 */
936
+ striped?: boolean;
937
+ /** 세로로 스크롤할 때 머리 행을 위에 고정한다 (containerStyle 등으로 높이를 제한해 쓴다) */
938
+ stickyHeader?: boolean;
939
+ /** 표 위에 보이는 제목. 표의 이름이 되고, 스크롤 영역의 이름으로도 쓰인다 */
940
+ caption?: ReactNode;
941
+ /** caption 이 없을 때 표의 이름 (스크린리더용) */
942
+ 'aria-label'?: string;
943
+ /** 바깥 스크롤 영역의 className (높이 제한 등) */
944
+ containerClassName?: string;
945
+ /** 바깥 스크롤 영역의 style */
946
+ containerStyle?: CSSProperties;
947
+ }
948
+ /**
949
+ * 데이터 표. 네이티브 `<table>` 에 스타일을 입힌다.
950
+ * 표가 넘치면 바깥 영역이 스크롤되고, 키보드로도 스크롤할 수 있도록 그 영역이 포커스를 받는다.
951
+ */
952
+ declare const Table: react.ForwardRefExoticComponent<TableProps & react.RefAttributes<HTMLTableElement>>;
953
+ declare const TableHeader: react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableSectionElement> & react.RefAttributes<HTMLTableSectionElement>>;
954
+ declare const TableBody: react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableSectionElement> & react.RefAttributes<HTMLTableSectionElement>>;
955
+ declare const TableFooter: react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableSectionElement> & react.RefAttributes<HTMLTableSectionElement>>;
956
+ interface TableRowProps extends HTMLAttributes<HTMLTableRowElement> {
957
+ /** 선택된 행으로 강조한다 (`aria-selected` 는 grid 등 상호작용 표에서 직접 지정한다) */
958
+ selected?: boolean;
959
+ }
960
+ declare const TableRow: react.ForwardRefExoticComponent<TableRowProps & react.RefAttributes<HTMLTableRowElement>>;
961
+ type Align = 'left' | 'center' | 'right';
962
+ interface TableHeadProps extends Omit<ThHTMLAttributes<HTMLTableCellElement>, 'align'> {
963
+ /** 정렬 */
964
+ align?: Align;
965
+ /**
966
+ * 이 열의 정렬 상태. onSort 와 함께 주면 머리 셀이 정렬 버튼이 되고 `aria-sort` 를 붙인다.
967
+ * 정렬되지 않은 열은 'none'.
968
+ */
969
+ sortDirection?: 'ascending' | 'descending' | 'none';
970
+ /** 정렬 버튼을 눌렀을 때 호출된다. 다음 정렬 상태는 사용하는 쪽이 정한다 */
971
+ onSort?: () => void;
972
+ }
973
+ declare const TableHead: react.ForwardRefExoticComponent<TableHeadProps & react.RefAttributes<HTMLTableCellElement>>;
974
+ interface TableCellProps extends Omit<TdHTMLAttributes<HTMLTableCellElement>, 'align'> {
975
+ /** 정렬 (숫자는 right 권장) */
976
+ align?: Align;
977
+ }
978
+ declare const TableCell: react.ForwardRefExoticComponent<TableCellProps & react.RefAttributes<HTMLTableCellElement>>;
979
+
844
980
  interface TabsProps extends Omit<ComponentPropsWithoutRef<typeof RadixTabs.Root>, 'orientation'> {
845
981
  /** 시각적 스타일. line 은 밑줄, soft 는 배경이 있는 세그먼트 */
846
982
  variant?: 'line' | 'soft';
@@ -968,4 +1104,4 @@ interface TypographyProps extends Omit<HTMLAttributes<HTMLElement>, 'color'> {
968
1104
  }
969
1105
  declare const Typography: react.ForwardRefExoticComponent<TypographyProps & react.RefAttributes<HTMLElement>>;
970
1106
 
971
- export { Accordion, AccordionItem, type AccordionItemProps, type AccordionProps, Alert, type AlertProps, Avatar, type AvatarProps, Badge, type BadgeProps, type BestowTheme, Breadcrumb, type BreadcrumbItemData, type BreadcrumbProps, Button, type ButtonProps, Card, CardBody, CardFooter, CardHeader, type CardProps, type CardSectionProps, Checkbox, type CheckboxProps, type DeepPartial, Divider, type DividerProps, Drawer, DrawerClose, type DrawerProps, DropdownMenu, DropdownMenuContent, type DropdownMenuContentProps, DropdownMenuGroup, DropdownMenuItem, type DropdownMenuItemProps, DropdownMenuLabel, type DropdownMenuLabelProps, type DropdownMenuProps, DropdownMenuSeparator, type DropdownMenuSeparatorProps, DropdownMenuTrigger, type DropdownMenuTriggerProps, IconButton, type IconButtonProps, Input, type InputProps, type IntentName, Link, type LinkProps, Modal, ModalClose, type ModalProps, Pagination, type PaginationProps, Popover, PopoverClose, type PopoverProps, Progress, type ProgressProps, RadioGroup, type RadioGroupProps, type RadioOption, Select, type SelectOption, type SelectProps, Skeleton, type SkeletonProps, Spinner, type SpinnerProps, Stack, type StackProps, Switch, type SwitchProps, Tabs, TabsContent, type TabsContentProps, TabsList, type TabsListProps, type TabsProps, TabsTrigger, type TabsTriggerProps, TextField, type TextFieldProps, Textarea, type TextareaProps, type ThemeInput, type ThemeName, type ThemeOverrides, ThemeProvider, type ThemeProviderProps, type ThemeTokens, type ToastOptions, ToastProvider, type ToastProviderProps, Tooltip, type TooltipProps, Typography, type TypographyProps, type TypographyVariant, contrastRatio, createIntentColors, createTheme, themeClass, usePortalClassName, usePortalProps, useTheme, useToast, vars };
1107
+ export { Accordion, AccordionItem, type AccordionItemProps, type AccordionProps, Alert, type AlertProps, Avatar, type AvatarProps, Badge, type BadgeProps, type BestowTheme, Breadcrumb, type BreadcrumbItemData, type BreadcrumbProps, Button, type ButtonProps, Card, CardBody, CardFooter, CardHeader, type CardProps, type CardSectionProps, Checkbox, type CheckboxProps, Combobox, type ComboboxOption, type ComboboxProps, type DeepPartial, Divider, type DividerProps, Drawer, DrawerClose, type DrawerProps, DropdownMenu, DropdownMenuContent, type DropdownMenuContentProps, DropdownMenuGroup, DropdownMenuItem, type DropdownMenuItemProps, DropdownMenuLabel, type DropdownMenuLabelProps, type DropdownMenuProps, DropdownMenuSeparator, type DropdownMenuSeparatorProps, DropdownMenuTrigger, type DropdownMenuTriggerProps, IconButton, type IconButtonProps, Input, type InputProps, type IntentName, Link, type LinkProps, Modal, ModalClose, type ModalProps, Pagination, type PaginationProps, Popover, PopoverClose, type PopoverProps, Progress, type ProgressProps, RadioGroup, type RadioGroupProps, type RadioOption, Select, type SelectOption, type SelectProps, Skeleton, type SkeletonProps, Slider, type SliderProps, Spinner, type SpinnerProps, Stack, type StackProps, Switch, type SwitchProps, Table, TableBody, TableCell, type TableCellProps, TableFooter, TableHead, type TableHeadProps, TableHeader, type TableProps, TableRow, type TableRowProps, Tabs, TabsContent, type TabsContentProps, TabsList, type TabsListProps, type TabsProps, TabsTrigger, type TabsTriggerProps, TextField, type TextFieldProps, Textarea, type TextareaProps, type ThemeInput, type ThemeName, type ThemeOverrides, ThemeProvider, type ThemeProviderProps, type ThemeTokens, type ToastOptions, ToastProvider, type ToastProviderProps, Tooltip, type TooltipProps, Typography, type TypographyProps, type TypographyVariant, contrastRatio, createIntentColors, createTheme, themeClass, usePortalClassName, usePortalProps, useTheme, useToast, vars };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as _bestow_ui_tokens from '@bestow-ui/tokens';
2
2
  import { space } from '@bestow-ui/tokens';
3
3
  import * as react from 'react';
4
- import { HTMLAttributes, CSSProperties, ComponentPropsWithoutRef, ReactNode, ElementType, ButtonHTMLAttributes, InputHTMLAttributes, AnchorHTMLAttributes, ReactElement, TextareaHTMLAttributes } from 'react';
4
+ import { HTMLAttributes, CSSProperties, ComponentPropsWithoutRef, ReactNode, ElementType, ButtonHTMLAttributes, InputHTMLAttributes, AnchorHTMLAttributes, ReactElement, TdHTMLAttributes, ThHTMLAttributes, TextareaHTMLAttributes } from 'react';
5
5
  import * as RadixAccordion from '@radix-ui/react-accordion';
6
6
  import * as Dialog from '@radix-ui/react-dialog';
7
7
  import * as RadixMenu from '@radix-ui/react-dropdown-menu';
@@ -430,6 +430,51 @@ interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'siz
430
430
  }
431
431
  declare const Checkbox: react.ForwardRefExoticComponent<CheckboxProps & react.RefAttributes<HTMLInputElement>>;
432
432
 
433
+ interface ComboboxOption {
434
+ value: string;
435
+ /** 표시·검색에 쓰는 이름 */
436
+ label: string;
437
+ disabled?: boolean;
438
+ }
439
+ interface ComboboxProps {
440
+ /** 선택지 목록 */
441
+ options: ComboboxOption[];
442
+ /** 선택된 값 (제어 모드). undefined 면 선택 없음 */
443
+ value?: string;
444
+ /** 처음 선택된 값 (비제어 모드) */
445
+ defaultValue?: string;
446
+ /** 값이 바뀔 때 호출된다 */
447
+ onValueChange?: (value: string) => void;
448
+ /** 입력한 글자로 선택지를 거르는 함수 (기본: 대소문자 구분 없이 label 에 포함) */
449
+ filter?: (option: ComboboxOption, query: string) => boolean;
450
+ /** 검색 결과가 없을 때 문구 */
451
+ emptyMessage?: ReactNode;
452
+ placeholder?: string;
453
+ /** 위에 표시할 레이블 */
454
+ label?: ReactNode;
455
+ /** 아래에 표시할 도움말. error 일 때는 에러 메시지로 표시된다 */
456
+ helperText?: ReactNode;
457
+ error?: boolean;
458
+ size?: 'sm' | 'md' | 'lg';
459
+ fullWidth?: boolean;
460
+ disabled?: boolean;
461
+ required?: boolean;
462
+ /** form 제출 시 사용할 이름 (선택된 value 가 제출된다) */
463
+ name?: string;
464
+ id?: string;
465
+ /** label 이 없을 때 스크린리더용 이름 */
466
+ 'aria-label'?: string;
467
+ /** 목록 열기 버튼의 이름 */
468
+ toggleLabel?: string;
469
+ /** 입력창 래퍼 className */
470
+ className?: string;
471
+ }
472
+ /**
473
+ * 입력해서 거르며 고르는 선택 상자 (WAI-ARIA combobox + listbox 패턴).
474
+ * ↓/↑ 로 목록을 열고 이동, Enter 로 선택, Esc 로 닫는다. 목록에 없는 값은 입력할 수 없다(선택만).
475
+ */
476
+ declare const Combobox: react.ForwardRefExoticComponent<ComboboxProps & react.RefAttributes<HTMLInputElement>>;
477
+
433
478
  interface DividerProps extends HTMLAttributes<HTMLDivElement> {
434
479
  /** 방향. vertical 은 flex 행 안에서 부모 높이를 채운다 */
435
480
  orientation?: 'horizontal' | 'vertical';
@@ -787,6 +832,48 @@ interface SkeletonProps extends HTMLAttributes<HTMLSpanElement> {
787
832
  */
788
833
  declare const Skeleton: react.ForwardRefExoticComponent<SkeletonProps & react.RefAttributes<HTMLSpanElement>>;
789
834
 
835
+ interface SliderProps {
836
+ /** 값 (제어 모드). 손잡이 하나면 `[50]`, 범위면 `[20, 80]` */
837
+ value?: number[];
838
+ /** 처음 값 (비제어 모드) */
839
+ defaultValue?: number[];
840
+ /** 값이 바뀌는 동안 계속 호출된다 */
841
+ onValueChange?: (value: number[]) => void;
842
+ /** 드래그·키 입력이 끝났을 때 한 번 호출된다 (서버 저장 등) */
843
+ onValueCommit?: (value: number[]) => void;
844
+ min?: number;
845
+ max?: number;
846
+ step?: number;
847
+ /** 범위 슬라이더에서 두 손잡이 사이 최소 간격(step 개수) */
848
+ minStepsBetweenThumbs?: number;
849
+ /** 위에 표시하는 레이블. 손잡이(slider)의 이름이 된다 */
850
+ label?: ReactNode;
851
+ /** label 이 없을 때 스크린리더용 이름 */
852
+ 'aria-label'?: string;
853
+ /** 아래에 표시하는 보조 설명 (aria-describedby 로 연결) */
854
+ helperText?: ReactNode;
855
+ /** 오른쪽 위에 현재 값을 보여 준다 */
856
+ showValue?: boolean;
857
+ /** 값 텍스트 형식. 화면 표시와 스크린리더(aria-valuetext)에 함께 쓴다 (예: v => `${v.toLocaleString()}원`) */
858
+ formatValue?: (value: number) => string;
859
+ /**
860
+ * 범위 슬라이더에서 손잡이마다 덧붙일 이름 (기본 ["최소", "최대"]).
861
+ * 스크린리더는 "가격 최소", "가격 최대" 처럼 레이블과 함께 읽는다
862
+ */
863
+ thumbLabels?: string[];
864
+ size?: 'sm' | 'md';
865
+ disabled?: boolean;
866
+ /** form 제출 시 사용할 이름 */
867
+ name?: string;
868
+ id?: string;
869
+ className?: string;
870
+ }
871
+ /**
872
+ * 범위 안에서 값을 고르는 슬라이더. 손잡이를 끌거나 키보드(←→↑↓, PageUp/Down, Home/End)로 조절한다.
873
+ * Radix Slider 기반이라 손잡이마다 role="slider" 와 aria-valuemin/max/now 가 붙는다.
874
+ */
875
+ declare const Slider: react.ForwardRefExoticComponent<SliderProps & react.RefAttributes<HTMLSpanElement>>;
876
+
790
877
  interface SpinnerProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {
791
878
  /** 크기 (sm 16px, md 20px, lg 28px) */
792
879
  size?: 'sm' | 'md' | 'lg';
@@ -841,6 +928,55 @@ interface SwitchProps {
841
928
  }
842
929
  declare const Switch: react.ForwardRefExoticComponent<SwitchProps & react.RefAttributes<HTMLButtonElement>>;
843
930
 
931
+ type TableSize = 'sm' | 'md';
932
+ interface TableProps extends HTMLAttributes<HTMLTableElement> {
933
+ /** 셀 여백 */
934
+ size?: TableSize;
935
+ /** 짝수 행 배경을 칠한다 */
936
+ striped?: boolean;
937
+ /** 세로로 스크롤할 때 머리 행을 위에 고정한다 (containerStyle 등으로 높이를 제한해 쓴다) */
938
+ stickyHeader?: boolean;
939
+ /** 표 위에 보이는 제목. 표의 이름이 되고, 스크롤 영역의 이름으로도 쓰인다 */
940
+ caption?: ReactNode;
941
+ /** caption 이 없을 때 표의 이름 (스크린리더용) */
942
+ 'aria-label'?: string;
943
+ /** 바깥 스크롤 영역의 className (높이 제한 등) */
944
+ containerClassName?: string;
945
+ /** 바깥 스크롤 영역의 style */
946
+ containerStyle?: CSSProperties;
947
+ }
948
+ /**
949
+ * 데이터 표. 네이티브 `<table>` 에 스타일을 입힌다.
950
+ * 표가 넘치면 바깥 영역이 스크롤되고, 키보드로도 스크롤할 수 있도록 그 영역이 포커스를 받는다.
951
+ */
952
+ declare const Table: react.ForwardRefExoticComponent<TableProps & react.RefAttributes<HTMLTableElement>>;
953
+ declare const TableHeader: react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableSectionElement> & react.RefAttributes<HTMLTableSectionElement>>;
954
+ declare const TableBody: react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableSectionElement> & react.RefAttributes<HTMLTableSectionElement>>;
955
+ declare const TableFooter: react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableSectionElement> & react.RefAttributes<HTMLTableSectionElement>>;
956
+ interface TableRowProps extends HTMLAttributes<HTMLTableRowElement> {
957
+ /** 선택된 행으로 강조한다 (`aria-selected` 는 grid 등 상호작용 표에서 직접 지정한다) */
958
+ selected?: boolean;
959
+ }
960
+ declare const TableRow: react.ForwardRefExoticComponent<TableRowProps & react.RefAttributes<HTMLTableRowElement>>;
961
+ type Align = 'left' | 'center' | 'right';
962
+ interface TableHeadProps extends Omit<ThHTMLAttributes<HTMLTableCellElement>, 'align'> {
963
+ /** 정렬 */
964
+ align?: Align;
965
+ /**
966
+ * 이 열의 정렬 상태. onSort 와 함께 주면 머리 셀이 정렬 버튼이 되고 `aria-sort` 를 붙인다.
967
+ * 정렬되지 않은 열은 'none'.
968
+ */
969
+ sortDirection?: 'ascending' | 'descending' | 'none';
970
+ /** 정렬 버튼을 눌렀을 때 호출된다. 다음 정렬 상태는 사용하는 쪽이 정한다 */
971
+ onSort?: () => void;
972
+ }
973
+ declare const TableHead: react.ForwardRefExoticComponent<TableHeadProps & react.RefAttributes<HTMLTableCellElement>>;
974
+ interface TableCellProps extends Omit<TdHTMLAttributes<HTMLTableCellElement>, 'align'> {
975
+ /** 정렬 (숫자는 right 권장) */
976
+ align?: Align;
977
+ }
978
+ declare const TableCell: react.ForwardRefExoticComponent<TableCellProps & react.RefAttributes<HTMLTableCellElement>>;
979
+
844
980
  interface TabsProps extends Omit<ComponentPropsWithoutRef<typeof RadixTabs.Root>, 'orientation'> {
845
981
  /** 시각적 스타일. line 은 밑줄, soft 는 배경이 있는 세그먼트 */
846
982
  variant?: 'line' | 'soft';
@@ -968,4 +1104,4 @@ interface TypographyProps extends Omit<HTMLAttributes<HTMLElement>, 'color'> {
968
1104
  }
969
1105
  declare const Typography: react.ForwardRefExoticComponent<TypographyProps & react.RefAttributes<HTMLElement>>;
970
1106
 
971
- export { Accordion, AccordionItem, type AccordionItemProps, type AccordionProps, Alert, type AlertProps, Avatar, type AvatarProps, Badge, type BadgeProps, type BestowTheme, Breadcrumb, type BreadcrumbItemData, type BreadcrumbProps, Button, type ButtonProps, Card, CardBody, CardFooter, CardHeader, type CardProps, type CardSectionProps, Checkbox, type CheckboxProps, type DeepPartial, Divider, type DividerProps, Drawer, DrawerClose, type DrawerProps, DropdownMenu, DropdownMenuContent, type DropdownMenuContentProps, DropdownMenuGroup, DropdownMenuItem, type DropdownMenuItemProps, DropdownMenuLabel, type DropdownMenuLabelProps, type DropdownMenuProps, DropdownMenuSeparator, type DropdownMenuSeparatorProps, DropdownMenuTrigger, type DropdownMenuTriggerProps, IconButton, type IconButtonProps, Input, type InputProps, type IntentName, Link, type LinkProps, Modal, ModalClose, type ModalProps, Pagination, type PaginationProps, Popover, PopoverClose, type PopoverProps, Progress, type ProgressProps, RadioGroup, type RadioGroupProps, type RadioOption, Select, type SelectOption, type SelectProps, Skeleton, type SkeletonProps, Spinner, type SpinnerProps, Stack, type StackProps, Switch, type SwitchProps, Tabs, TabsContent, type TabsContentProps, TabsList, type TabsListProps, type TabsProps, TabsTrigger, type TabsTriggerProps, TextField, type TextFieldProps, Textarea, type TextareaProps, type ThemeInput, type ThemeName, type ThemeOverrides, ThemeProvider, type ThemeProviderProps, type ThemeTokens, type ToastOptions, ToastProvider, type ToastProviderProps, Tooltip, type TooltipProps, Typography, type TypographyProps, type TypographyVariant, contrastRatio, createIntentColors, createTheme, themeClass, usePortalClassName, usePortalProps, useTheme, useToast, vars };
1107
+ export { Accordion, AccordionItem, type AccordionItemProps, type AccordionProps, Alert, type AlertProps, Avatar, type AvatarProps, Badge, type BadgeProps, type BestowTheme, Breadcrumb, type BreadcrumbItemData, type BreadcrumbProps, Button, type ButtonProps, Card, CardBody, CardFooter, CardHeader, type CardProps, type CardSectionProps, Checkbox, type CheckboxProps, Combobox, type ComboboxOption, type ComboboxProps, type DeepPartial, Divider, type DividerProps, Drawer, DrawerClose, type DrawerProps, DropdownMenu, DropdownMenuContent, type DropdownMenuContentProps, DropdownMenuGroup, DropdownMenuItem, type DropdownMenuItemProps, DropdownMenuLabel, type DropdownMenuLabelProps, type DropdownMenuProps, DropdownMenuSeparator, type DropdownMenuSeparatorProps, DropdownMenuTrigger, type DropdownMenuTriggerProps, IconButton, type IconButtonProps, Input, type InputProps, type IntentName, Link, type LinkProps, Modal, ModalClose, type ModalProps, Pagination, type PaginationProps, Popover, PopoverClose, type PopoverProps, Progress, type ProgressProps, RadioGroup, type RadioGroupProps, type RadioOption, Select, type SelectOption, type SelectProps, Skeleton, type SkeletonProps, Slider, type SliderProps, Spinner, type SpinnerProps, Stack, type StackProps, Switch, type SwitchProps, Table, TableBody, TableCell, type TableCellProps, TableFooter, TableHead, type TableHeadProps, TableHeader, type TableProps, TableRow, type TableRowProps, Tabs, TabsContent, type TabsContentProps, TabsList, type TabsListProps, type TabsProps, TabsTrigger, type TabsTriggerProps, TextField, type TextFieldProps, Textarea, type TextareaProps, type ThemeInput, type ThemeName, type ThemeOverrides, ThemeProvider, type ThemeProviderProps, type ThemeTokens, type ToastOptions, ToastProvider, type ToastProviderProps, Tooltip, type TooltipProps, Typography, type TypographyProps, type TypographyVariant, contrastRatio, createIntentColors, createTheme, themeClass, usePortalClassName, usePortalProps, useTheme, useToast, vars };