@bestow-ui/react 0.12.0 → 1.0.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, ReactNode, ComponentPropsWithoutRef, InputHTMLAttributes, ElementType, ButtonHTMLAttributes, AnchorHTMLAttributes, ReactElement, TdHTMLAttributes, ThHTMLAttributes, TextareaHTMLAttributes } from 'react';
4
+ import { ReactNode, HTMLAttributes, CSSProperties, ComponentPropsWithoutRef, InputHTMLAttributes, ElementType, ButtonHTMLAttributes, 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';
@@ -250,7 +250,8 @@ declare function contrastRatio(a: string, b: string): number;
250
250
  type IntentName = 'primary' | 'neutral' | 'danger' | 'success' | 'warning';
251
251
  /**
252
252
  * 대표색 하나로 intent(primary 등)의 라이트·다크 색 세트를 만든다. 결과는 createTheme 에 넘긴다.
253
- * - solid 는 넘긴 색을 그대로 쓴다 (다크모드에서 너무 어두우면 조금 밝힌다).
253
+ * - solid 는 넘긴 색을 그대로 쓴다 (다크모드에서 너무 어두우면 조금 밝힌다). 단 흰 글자·짙은 글자 모두
254
+ * 대비 4.5:1 이 안 나오는 중간 밝기 색이면 4.5 가 나올 만큼만 밝기를 옮긴다.
254
255
  * - text 와 contrast(solid 위 글자색)는 WCAG AA 대비 4.5:1 을 만족하도록 계산한다.
255
256
  * - intent 가 'primary' 면 포커스 링 색(border.focus)도 함께 바꾼다.
256
257
  *
@@ -258,33 +259,6 @@ type IntentName = 'primary' | 'neutral' | 'danger' | 'success' | 'warning';
258
259
  */
259
260
  declare function createIntentColors(intent: IntentName, color: string): ThemeInput;
260
261
 
261
- interface ThemeProviderProps extends HTMLAttributes<HTMLDivElement> {
262
- /** 라이트/다크 모드. 생략하면 바깥 ThemeProvider 의 모드를 이어받는다 (최상위는 light). */
263
- theme?: ThemeName;
264
- /**
265
- * createTheme 으로 만든 브랜드 테마. 모드를 바꿔도 유지되고, 중첩된 ThemeProvider 는 바깥 값을 이어받는다
266
- * (안쪽에서 준 값이 우선).
267
- */
268
- overrides?: BestowTheme;
269
- }
270
- declare const ThemeProvider: react.ForwardRefExoticComponent<ThemeProviderProps & react.RefAttributes<HTMLDivElement>>;
271
- /** 현재 적용 중인 모드(light/dark)를 반환한다. */
272
- declare function useTheme(): ThemeName;
273
- /**
274
- * Portal 로 ThemeProvider 바깥(body)에 렌더링되는 요소에 펼쳐 넣을 props.
275
- * 현재 모드의 CSS 변수, 브랜드 오버라이드, 기본 글꼴을 다시 적용한다.
276
- *
277
- * @example const portal = usePortalProps(); <Content className={cx(portal.className, styles.content)} style={portal.style} />
278
- */
279
- declare function usePortalProps(): {
280
- className: string;
281
- style?: CSSProperties;
282
- };
283
- /**
284
- * @deprecated usePortalProps() 를 쓰세요. className 만으로는 overrides(브랜드 테마)가 portal 에 적용되지 않습니다.
285
- */
286
- declare function usePortalClassName(): string;
287
-
288
262
  /**
289
263
  * 컴포넌트의 기본 문구. 모두 생략할 수 있고, 생략하면 각 컴포넌트의 한국어 기본값을 쓴다.
290
264
  * 우선순위: 컴포넌트에 직접 준 prop > LocaleProvider 의 messages > 한국어 기본값.
@@ -388,22 +362,39 @@ declare function useMessages(): Messages;
388
362
  declare const en: BestowMessages;
389
363
 
390
364
  /**
391
- * `type="single"`: 한 번에 하나만 열린다 (`value: string`). `collapsible` 이면 열린 항목을 다시 눌러 닫을 수 있다.
392
- * `type="multiple"`: 여러 개를 함께 열 수 있다 (`value: string[]`).
365
+ * 숫자만 있는 전화번호에 하이픈을 넣는다. 입력 중인 값도 자연스럽게 나눈다.
366
+ * @example formatPhoneNumber('01012345678') // '010-1234-5678'
367
+ * @example formatPhoneNumber('021234567') // '02-123-4567'
368
+ * @example formatPhoneNumber('15881234') // '1588-1234'
393
369
  */
394
- type AccordionProps = ComponentPropsWithoutRef<typeof RadixAccordion.Root>;
395
- declare const Accordion: react.ForwardRefExoticComponent<AccordionProps & react.RefAttributes<HTMLDivElement>>;
396
- interface AccordionItemProps extends Omit<ComponentPropsWithoutRef<typeof RadixAccordion.Item>, 'title'> {
397
- /** 항목 값. Accordion 의 value 와 비교한다 */
398
- value: string;
399
- /** 항목 제목 (펼침 버튼의 이름) */
400
- title: ReactNode;
401
- /** 제목을 감싸는 heading 수준. 페이지의 heading 구조에 맞춘다 (기본 3) */
402
- headingLevel?: 2 | 3 | 4 | 5 | 6;
403
- /** 펼쳤을 때 보이는 내용 */
404
- children?: ReactNode;
405
- }
406
- declare const AccordionItem: react.ForwardRefExoticComponent<AccordionItemProps & react.RefAttributes<HTMLDivElement>>;
370
+ declare function formatPhoneNumber(input: string): string;
371
+ /**
372
+ * 사업자등록번호(10자리)에 하이픈을 넣는다.
373
+ * @example formatBusinessNumber('1234567890') // '123-45-67890'
374
+ */
375
+ declare function formatBusinessNumber(input: string): string;
376
+ /**
377
+ * 사업자등록번호 검증 공식(가중치 1,3,7,1,3,7,1,3,5)으로 확인한다. 실제로 등록된 번호인지는 국세청 조회가 필요하다.
378
+ * @example isValidBusinessNumber('124-81-00998') // true
379
+ */
380
+ declare function isValidBusinessNumber(input: string): boolean;
381
+ /**
382
+ * 금액을 만·억·조 단위로 읽기 쉽게 쓴다.
383
+ * @example formatKoreanAmount(125000) // '12만 5,000원'
384
+ * @example formatKoreanAmount(150000000) // '1억 5,000만원'
385
+ * @example formatKoreanAmount(0) // '0원'
386
+ */
387
+ declare function formatKoreanAmount(amount: number, unit?: string): string;
388
+
389
+ /** Date → 'YYYY-MM-DD' (로컬 기준) */
390
+ declare function toISODate(date: Date): string;
391
+ /** 'YYYY-MM-DD' → Date (로컬 자정). 형식이 틀리거나 없는 날짜(2월 30일 등)면 null */
392
+ declare function parseISODate(value: string | null | undefined): Date | null;
393
+ /**
394
+ * 한국어 날짜. 스크린리더용 날짜 이름 등에 쓴다.
395
+ * @example formatKoreanDate(new Date(2026, 9, 15)) // '2026년 10월 15일 목요일'
396
+ */
397
+ declare function formatKoreanDate(date: Date, withWeekday?: boolean): string;
407
398
 
408
399
  /** 주소 검색 결과 */
409
400
  interface AddressSearchResult {
@@ -437,6 +428,59 @@ declare function composeExtraAddress(data: Pick<KakaoPostcodeData, 'userSelected
437
428
  */
438
429
  declare const kakaoPostcodeProvider: AddressProvider;
439
430
 
431
+ interface AgreementItem {
432
+ value: string;
433
+ /** 약관 이름 (예: "서비스 이용약관 동의") */
434
+ label: ReactNode;
435
+ /** 필수 동의 여부. 이름 앞에 "필수"/"선택" 이 붙는다 */
436
+ required?: boolean;
437
+ /** 펼쳐서 보여 줄 약관 내용. 있으면 "보기" 버튼이 생긴다 */
438
+ content?: ReactNode;
439
+ }
440
+ /** 필수 항목에 모두 동의했는지 */
441
+ declare function hasAllRequiredAgreements(items: AgreementItem[], value: string[]): boolean;
442
+
443
+ interface ThemeProviderProps extends HTMLAttributes<HTMLDivElement> {
444
+ /** 라이트/다크 모드. 생략하면 바깥 ThemeProvider 의 모드를 이어받는다 (최상위는 light). */
445
+ theme?: ThemeName;
446
+ /**
447
+ * createTheme 으로 만든 브랜드 테마. 모드를 바꿔도 유지되고, 중첩된 ThemeProvider 는 바깥 값을 이어받는다
448
+ * (안쪽에서 준 값이 우선).
449
+ */
450
+ overrides?: BestowTheme;
451
+ }
452
+ declare const ThemeProvider: react.ForwardRefExoticComponent<ThemeProviderProps & react.RefAttributes<HTMLDivElement>>;
453
+ /** 현재 적용 중인 모드(light/dark)를 반환한다. */
454
+ declare function useTheme(): ThemeName;
455
+ /**
456
+ * Portal 로 ThemeProvider 바깥(body)에 렌더링되는 요소에 펼쳐 넣을 props.
457
+ * 현재 모드의 CSS 변수, 브랜드 오버라이드, 기본 글꼴을 다시 적용한다.
458
+ *
459
+ * @example const portal = usePortalProps(); <Content className={cx(portal.className, styles.content)} style={portal.style} />
460
+ */
461
+ declare function usePortalProps(): {
462
+ className: string;
463
+ style?: CSSProperties;
464
+ };
465
+
466
+ /**
467
+ * `type="single"`: 한 번에 하나만 열린다 (`value: string`). `collapsible` 이면 열린 항목을 다시 눌러 닫을 수 있다.
468
+ * `type="multiple"`: 여러 개를 함께 열 수 있다 (`value: string[]`).
469
+ */
470
+ type AccordionProps = ComponentPropsWithoutRef<typeof RadixAccordion.Root>;
471
+ declare const Accordion: react.ForwardRefExoticComponent<AccordionProps & react.RefAttributes<HTMLDivElement>>;
472
+ interface AccordionItemProps extends Omit<ComponentPropsWithoutRef<typeof RadixAccordion.Item>, 'title'> {
473
+ /** 항목 값. Accordion 의 value 와 비교한다 */
474
+ value: string;
475
+ /** 항목 제목 (펼침 버튼의 이름) */
476
+ title: ReactNode;
477
+ /** 제목을 감싸는 heading 수준. 페이지의 heading 구조에 맞춘다 (기본 3) */
478
+ headingLevel?: 2 | 3 | 4 | 5 | 6;
479
+ /** 펼쳤을 때 보이는 내용 */
480
+ children?: ReactNode;
481
+ }
482
+ declare const AccordionItem: react.ForwardRefExoticComponent<AccordionItemProps & react.RefAttributes<HTMLDivElement>>;
483
+
440
484
  interface AddressValue {
441
485
  /** 우편번호 */
442
486
  zonecode: string;
@@ -478,15 +522,6 @@ interface AddressInputProps {
478
522
  */
479
523
  declare const AddressInput: react.ForwardRefExoticComponent<AddressInputProps & react.RefAttributes<HTMLFieldSetElement>>;
480
524
 
481
- interface AgreementItem {
482
- value: string;
483
- /** 약관 이름 (예: "서비스 이용약관 동의") */
484
- label: ReactNode;
485
- /** 필수 동의 여부. 이름 앞에 "필수"/"선택" 이 붙는다 */
486
- required?: boolean;
487
- /** 펼쳐서 보여 줄 약관 내용. 있으면 "보기" 버튼이 생긴다 */
488
- content?: ReactNode;
489
- }
490
525
  interface AgreementGroupProps {
491
526
  items: AgreementItem[];
492
527
  /** 동의한 항목의 value 목록 (제어 모드) */
@@ -513,8 +548,6 @@ interface AgreementGroupProps {
513
548
  name?: string;
514
549
  className?: string;
515
550
  }
516
- /** 필수 항목에 모두 동의했는지 */
517
- declare function hasAllRequiredAgreements(items: AgreementItem[], value: string[]): boolean;
518
551
  /**
519
552
  * 약관 동의 묶음. "전체 동의" 와 개별 항목이 서로 맞춰지고(일부만 동의하면 전체 동의는 부분 선택 상태),
520
553
  * 항목마다 필수·선택 표시와 약관 내용 펼쳐 보기를 지원한다.
@@ -703,7 +736,11 @@ interface CalendarProps {
703
736
  isDateDisabled?: (date: Date) => boolean;
704
737
  /** 공휴일. 일요일처럼 빨갛게 표시하고 스크린리더에 "공휴일" 을 덧붙인다 */
705
738
  isHoliday?: (date: Date) => boolean;
706
- /** 오늘 날짜 'YYYY-MM-DD'. 기본은 실제 오늘 — 테스트·스크린샷에서 고정할 때 쓴다 */
739
+ /**
740
+ * 오늘 날짜 'YYYY-MM-DD'. 기본은 브라우저의 오늘 — 테스트·스크린샷에서 고정할 때 쓴다.
741
+ * 서버 렌더링에서는 서버와 브라우저의 날짜(시간대)가 다를 수 있어, 없으면 hydration 이 끝난 뒤에 정한다
742
+ * (선택된 날짜도 없으면 그 전까지 날짜 칸을 비워 둔다).
743
+ */
707
744
  today?: string;
708
745
  /** 처음 그릴 때 날짜(선택된 날짜, 없으면 오늘)로 포커스를 옮긴다 — 팝업 안에서 쓸 때 */
709
746
  initialFocus?: boolean;
@@ -908,11 +945,8 @@ interface DropdownMenuItemProps extends Omit<ComponentPropsWithoutRef<typeof Rad
908
945
  icon?: ReactNode;
909
946
  /** 오른쪽에 표시할 단축키 (예: "⌘K"). 표시용이라 항목 이름에는 포함되지 않는다 */
910
947
  shortcut?: string;
911
- /**
912
- * danger 는 삭제처럼 되돌리기 어려운 동작.
913
- * `default` 는 0.x 의 옛 이름으로 `neutral` 과 같다 — **deprecated, 1.0 에서 제거**.
914
- */
915
- color?: 'neutral' | 'danger' | 'default';
948
+ /** danger 는 삭제처럼 되돌리기 어려운 동작 */
949
+ color?: 'neutral' | 'danger';
916
950
  }
917
951
  declare const DropdownMenuItem: react.ForwardRefExoticComponent<DropdownMenuItemProps & react.RefAttributes<HTMLDivElement>>;
918
952
  type DropdownMenuLabelProps = ComponentPropsWithoutRef<typeof RadixMenu.Label>;
@@ -1005,7 +1039,8 @@ declare function Modal({ open, defaultOpen, onOpenChange, trigger, title, descri
1005
1039
  */
1006
1040
  declare const ModalClose: react.ForwardRefExoticComponent<Dialog.DialogCloseProps & react.RefAttributes<HTMLButtonElement>>;
1007
1041
 
1008
- type ItemType = 'previous' | 'next' | 'page';
1042
+ /** getItemLabel 이 이름을 만드는 버튼 종류 */
1043
+ type PaginationItemType = 'previous' | 'next' | 'page';
1009
1044
  interface PaginationProps extends Omit<HTMLAttributes<HTMLElement>, 'onChange'> {
1010
1045
  /** 전체 페이지 수. 1 미만이면 아무것도 렌더링하지 않는다 */
1011
1046
  totalPages: number;
@@ -1022,7 +1057,7 @@ interface PaginationProps extends Omit<HTMLAttributes<HTMLElement>, 'onChange'>
1022
1057
  /** 크기 */
1023
1058
  size?: 'sm' | 'md';
1024
1059
  /** 버튼의 스크린리더용 이름 (다국어 대응). 기본: "이전 페이지", "다음 페이지", "3 페이지" */
1025
- getItemLabel?: (type: ItemType, page: number) => string;
1060
+ getItemLabel?: (type: PaginationItemType, page: number) => string;
1026
1061
  }
1027
1062
  declare const Pagination: react.ForwardRefExoticComponent<PaginationProps & react.RefAttributes<HTMLElement>>;
1028
1063
 
@@ -1236,11 +1271,8 @@ declare const Slider: react.ForwardRefExoticComponent<SliderProps & react.RefAtt
1236
1271
  interface SpinnerProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {
1237
1272
  /** 크기 (sm 16px, md 20px, lg 28px) */
1238
1273
  size?: 'sm' | 'md' | 'lg';
1239
- /**
1240
- * 색상. `inherit`(기본)는 부모 글자색을 그대로 쓴다.
1241
- * `current` 는 0.x 의 옛 이름으로 `inherit` 와 같다 — **deprecated, 1.0 에서 제거**.
1242
- */
1243
- color?: 'inherit' | 'primary' | 'neutral' | 'danger' | 'current';
1274
+ /** 색상. `inherit`(기본)는 부모 글자색을 그대로 쓴다 */
1275
+ color?: 'inherit' | 'primary' | 'neutral' | 'danger';
1244
1276
  /**
1245
1277
  * 스크린리더가 읽을 텍스트 (기본 "로딩 중").
1246
1278
  * 빈 문자열이면 장식용으로 보고 `aria-hidden` 처리한다 — 버튼처럼 바깥 요소가 이미 상태를 알릴 때 쓴다.
@@ -1399,10 +1431,6 @@ interface ToastOptions {
1399
1431
  description?: ReactNode;
1400
1432
  /** 의미 색상 (기본 neutral) — Alert·Badge 의 `color` 와 같은 이름 */
1401
1433
  color?: ToastColor;
1402
- /**
1403
- * @deprecated `color` 를 쓰세요 (`'default'` → `'neutral'`). 1.0 에서 제거.
1404
- */
1405
- variant?: 'default' | 'success' | 'warning' | 'danger';
1406
1434
  /** 자동으로 닫히기까지 시간(ms). Infinity 면 자동으로 닫히지 않는다 */
1407
1435
  duration?: number;
1408
1436
  /** 실행 버튼 */
@@ -1510,39 +1538,4 @@ interface VerificationCodeInputProps {
1510
1538
  */
1511
1539
  declare const VerificationCodeInput: react.ForwardRefExoticComponent<VerificationCodeInputProps & react.RefAttributes<HTMLInputElement>>;
1512
1540
 
1513
- /**
1514
- * 숫자만 있는 전화번호에 하이픈을 넣는다. 입력 중인 값도 자연스럽게 나눈다.
1515
- * @example formatPhoneNumber('01012345678') // '010-1234-5678'
1516
- * @example formatPhoneNumber('021234567') // '02-123-4567'
1517
- * @example formatPhoneNumber('15881234') // '1588-1234'
1518
- */
1519
- declare function formatPhoneNumber(input: string): string;
1520
- /**
1521
- * 사업자등록번호(10자리)에 하이픈을 넣는다.
1522
- * @example formatBusinessNumber('1234567890') // '123-45-67890'
1523
- */
1524
- declare function formatBusinessNumber(input: string): string;
1525
- /**
1526
- * 사업자등록번호 검증 공식(가중치 1,3,7,1,3,7,1,3,5)으로 확인한다. 실제로 등록된 번호인지는 국세청 조회가 필요하다.
1527
- * @example isValidBusinessNumber('124-81-00998') // true
1528
- */
1529
- declare function isValidBusinessNumber(input: string): boolean;
1530
- /**
1531
- * 금액을 만·억·조 단위로 읽기 쉽게 쓴다.
1532
- * @example formatKoreanAmount(125000) // '12만 5,000원'
1533
- * @example formatKoreanAmount(150000000) // '1억 5,000만원'
1534
- * @example formatKoreanAmount(0) // '0원'
1535
- */
1536
- declare function formatKoreanAmount(amount: number, unit?: string): string;
1537
-
1538
- /** Date → 'YYYY-MM-DD' (로컬 기준) */
1539
- declare function toISODate(date: Date): string;
1540
- /** 'YYYY-MM-DD' → Date (로컬 자정). 형식이 틀리거나 없는 날짜(2월 30일 등)면 null */
1541
- declare function parseISODate(value: string | null | undefined): Date | null;
1542
- /**
1543
- * 한국어 날짜. 스크린리더용 날짜 이름 등에 쓴다.
1544
- * @example formatKoreanDate(new Date(2026, 9, 15)) // '2026년 10월 15일 목요일'
1545
- */
1546
- declare function formatKoreanDate(date: Date, withWeekday?: boolean): string;
1547
-
1548
- export { Accordion, AccordionItem, type AccordionItemProps, type AccordionProps, AddressInput, type AddressInputProps, type AddressProvider, type AddressSearchResult, type AddressValue, AgreementGroup, type AgreementGroupProps, type AgreementItem, Alert, type AlertColor, type AlertProps, AmountInput, type AmountInputProps, Avatar, type AvatarProps, Badge, type BadgeProps, type BestowMessages, type BestowTheme, Breadcrumb, type BreadcrumbItemData, type BreadcrumbProps, BusinessNumberInput, type BusinessNumberInputProps, Button, type ButtonProps, Calendar, type CalendarProps, Card, CardBody, CardFooter, CardHeader, type CardProps, type CardSectionProps, Checkbox, type CheckboxProps, Combobox, type ComboboxOption, type ComboboxProps, DatePicker, type DatePickerProps, 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, LocaleProvider, type LocaleProviderProps, type Messages, Modal, ModalClose, type ModalProps, Pagination, type PaginationProps, PhoneNumberInput, type PhoneNumberInputProps, 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, type TableAlign, TableBody, TableCell, type TableCellProps, TableFooter, TableHead, type TableHeadProps, TableHeader, type TableProps, TableRow, type TableRowProps, type TableSize, 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 ToastColor, type ToastContextValue, type ToastOptions, ToastProvider, type ToastProviderProps, Tooltip, type TooltipProps, Typography, type TypographyProps, type TypographyVariant, VerificationCodeInput, type VerificationCodeInputProps, composeExtraAddress, contrastRatio, createIntentColors, createTheme, en, formatBusinessNumber, formatKoreanAmount, formatKoreanDate, formatPhoneNumber, hasAllRequiredAgreements, isValidBusinessNumber, kakaoPostcodeProvider, parseISODate, themeClass, toISODate, useMessages, usePortalClassName, usePortalProps, useTheme, useToast, vars };
1541
+ export { Accordion, AccordionItem, type AccordionItemProps, type AccordionProps, AddressInput, type AddressInputProps, type AddressProvider, type AddressSearchResult, type AddressValue, AgreementGroup, type AgreementGroupProps, type AgreementItem, Alert, type AlertColor, type AlertProps, AmountInput, type AmountInputProps, Avatar, type AvatarProps, Badge, type BadgeProps, type BestowMessages, type BestowTheme, Breadcrumb, type BreadcrumbItemData, type BreadcrumbProps, BusinessNumberInput, type BusinessNumberInputProps, Button, type ButtonProps, Calendar, type CalendarProps, Card, CardBody, CardFooter, CardHeader, type CardProps, type CardSectionProps, Checkbox, type CheckboxProps, Combobox, type ComboboxOption, type ComboboxProps, DatePicker, type DatePickerProps, 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, LocaleProvider, type LocaleProviderProps, type Messages, Modal, ModalClose, type ModalProps, Pagination, type PaginationItemType, type PaginationProps, PhoneNumberInput, type PhoneNumberInputProps, 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, type TableAlign, TableBody, TableCell, type TableCellProps, TableFooter, TableHead, type TableHeadProps, TableHeader, type TableProps, TableRow, type TableRowProps, type TableSize, 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 ToastColor, type ToastContextValue, type ToastOptions, ToastProvider, type ToastProviderProps, Tooltip, type TooltipProps, Typography, type TypographyProps, type TypographyVariant, VerificationCodeInput, type VerificationCodeInputProps, composeExtraAddress, contrastRatio, createIntentColors, createTheme, en, formatBusinessNumber, formatKoreanAmount, formatKoreanDate, formatPhoneNumber, hasAllRequiredAgreements, isValidBusinessNumber, kakaoPostcodeProvider, parseISODate, themeClass, toISODate, useMessages, 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, ReactNode, ComponentPropsWithoutRef, InputHTMLAttributes, ElementType, ButtonHTMLAttributes, AnchorHTMLAttributes, ReactElement, TdHTMLAttributes, ThHTMLAttributes, TextareaHTMLAttributes } from 'react';
4
+ import { ReactNode, HTMLAttributes, CSSProperties, ComponentPropsWithoutRef, InputHTMLAttributes, ElementType, ButtonHTMLAttributes, 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';
@@ -250,7 +250,8 @@ declare function contrastRatio(a: string, b: string): number;
250
250
  type IntentName = 'primary' | 'neutral' | 'danger' | 'success' | 'warning';
251
251
  /**
252
252
  * 대표색 하나로 intent(primary 등)의 라이트·다크 색 세트를 만든다. 결과는 createTheme 에 넘긴다.
253
- * - solid 는 넘긴 색을 그대로 쓴다 (다크모드에서 너무 어두우면 조금 밝힌다).
253
+ * - solid 는 넘긴 색을 그대로 쓴다 (다크모드에서 너무 어두우면 조금 밝힌다). 단 흰 글자·짙은 글자 모두
254
+ * 대비 4.5:1 이 안 나오는 중간 밝기 색이면 4.5 가 나올 만큼만 밝기를 옮긴다.
254
255
  * - text 와 contrast(solid 위 글자색)는 WCAG AA 대비 4.5:1 을 만족하도록 계산한다.
255
256
  * - intent 가 'primary' 면 포커스 링 색(border.focus)도 함께 바꾼다.
256
257
  *
@@ -258,33 +259,6 @@ type IntentName = 'primary' | 'neutral' | 'danger' | 'success' | 'warning';
258
259
  */
259
260
  declare function createIntentColors(intent: IntentName, color: string): ThemeInput;
260
261
 
261
- interface ThemeProviderProps extends HTMLAttributes<HTMLDivElement> {
262
- /** 라이트/다크 모드. 생략하면 바깥 ThemeProvider 의 모드를 이어받는다 (최상위는 light). */
263
- theme?: ThemeName;
264
- /**
265
- * createTheme 으로 만든 브랜드 테마. 모드를 바꿔도 유지되고, 중첩된 ThemeProvider 는 바깥 값을 이어받는다
266
- * (안쪽에서 준 값이 우선).
267
- */
268
- overrides?: BestowTheme;
269
- }
270
- declare const ThemeProvider: react.ForwardRefExoticComponent<ThemeProviderProps & react.RefAttributes<HTMLDivElement>>;
271
- /** 현재 적용 중인 모드(light/dark)를 반환한다. */
272
- declare function useTheme(): ThemeName;
273
- /**
274
- * Portal 로 ThemeProvider 바깥(body)에 렌더링되는 요소에 펼쳐 넣을 props.
275
- * 현재 모드의 CSS 변수, 브랜드 오버라이드, 기본 글꼴을 다시 적용한다.
276
- *
277
- * @example const portal = usePortalProps(); <Content className={cx(portal.className, styles.content)} style={portal.style} />
278
- */
279
- declare function usePortalProps(): {
280
- className: string;
281
- style?: CSSProperties;
282
- };
283
- /**
284
- * @deprecated usePortalProps() 를 쓰세요. className 만으로는 overrides(브랜드 테마)가 portal 에 적용되지 않습니다.
285
- */
286
- declare function usePortalClassName(): string;
287
-
288
262
  /**
289
263
  * 컴포넌트의 기본 문구. 모두 생략할 수 있고, 생략하면 각 컴포넌트의 한국어 기본값을 쓴다.
290
264
  * 우선순위: 컴포넌트에 직접 준 prop > LocaleProvider 의 messages > 한국어 기본값.
@@ -388,22 +362,39 @@ declare function useMessages(): Messages;
388
362
  declare const en: BestowMessages;
389
363
 
390
364
  /**
391
- * `type="single"`: 한 번에 하나만 열린다 (`value: string`). `collapsible` 이면 열린 항목을 다시 눌러 닫을 수 있다.
392
- * `type="multiple"`: 여러 개를 함께 열 수 있다 (`value: string[]`).
365
+ * 숫자만 있는 전화번호에 하이픈을 넣는다. 입력 중인 값도 자연스럽게 나눈다.
366
+ * @example formatPhoneNumber('01012345678') // '010-1234-5678'
367
+ * @example formatPhoneNumber('021234567') // '02-123-4567'
368
+ * @example formatPhoneNumber('15881234') // '1588-1234'
393
369
  */
394
- type AccordionProps = ComponentPropsWithoutRef<typeof RadixAccordion.Root>;
395
- declare const Accordion: react.ForwardRefExoticComponent<AccordionProps & react.RefAttributes<HTMLDivElement>>;
396
- interface AccordionItemProps extends Omit<ComponentPropsWithoutRef<typeof RadixAccordion.Item>, 'title'> {
397
- /** 항목 값. Accordion 의 value 와 비교한다 */
398
- value: string;
399
- /** 항목 제목 (펼침 버튼의 이름) */
400
- title: ReactNode;
401
- /** 제목을 감싸는 heading 수준. 페이지의 heading 구조에 맞춘다 (기본 3) */
402
- headingLevel?: 2 | 3 | 4 | 5 | 6;
403
- /** 펼쳤을 때 보이는 내용 */
404
- children?: ReactNode;
405
- }
406
- declare const AccordionItem: react.ForwardRefExoticComponent<AccordionItemProps & react.RefAttributes<HTMLDivElement>>;
370
+ declare function formatPhoneNumber(input: string): string;
371
+ /**
372
+ * 사업자등록번호(10자리)에 하이픈을 넣는다.
373
+ * @example formatBusinessNumber('1234567890') // '123-45-67890'
374
+ */
375
+ declare function formatBusinessNumber(input: string): string;
376
+ /**
377
+ * 사업자등록번호 검증 공식(가중치 1,3,7,1,3,7,1,3,5)으로 확인한다. 실제로 등록된 번호인지는 국세청 조회가 필요하다.
378
+ * @example isValidBusinessNumber('124-81-00998') // true
379
+ */
380
+ declare function isValidBusinessNumber(input: string): boolean;
381
+ /**
382
+ * 금액을 만·억·조 단위로 읽기 쉽게 쓴다.
383
+ * @example formatKoreanAmount(125000) // '12만 5,000원'
384
+ * @example formatKoreanAmount(150000000) // '1억 5,000만원'
385
+ * @example formatKoreanAmount(0) // '0원'
386
+ */
387
+ declare function formatKoreanAmount(amount: number, unit?: string): string;
388
+
389
+ /** Date → 'YYYY-MM-DD' (로컬 기준) */
390
+ declare function toISODate(date: Date): string;
391
+ /** 'YYYY-MM-DD' → Date (로컬 자정). 형식이 틀리거나 없는 날짜(2월 30일 등)면 null */
392
+ declare function parseISODate(value: string | null | undefined): Date | null;
393
+ /**
394
+ * 한국어 날짜. 스크린리더용 날짜 이름 등에 쓴다.
395
+ * @example formatKoreanDate(new Date(2026, 9, 15)) // '2026년 10월 15일 목요일'
396
+ */
397
+ declare function formatKoreanDate(date: Date, withWeekday?: boolean): string;
407
398
 
408
399
  /** 주소 검색 결과 */
409
400
  interface AddressSearchResult {
@@ -437,6 +428,59 @@ declare function composeExtraAddress(data: Pick<KakaoPostcodeData, 'userSelected
437
428
  */
438
429
  declare const kakaoPostcodeProvider: AddressProvider;
439
430
 
431
+ interface AgreementItem {
432
+ value: string;
433
+ /** 약관 이름 (예: "서비스 이용약관 동의") */
434
+ label: ReactNode;
435
+ /** 필수 동의 여부. 이름 앞에 "필수"/"선택" 이 붙는다 */
436
+ required?: boolean;
437
+ /** 펼쳐서 보여 줄 약관 내용. 있으면 "보기" 버튼이 생긴다 */
438
+ content?: ReactNode;
439
+ }
440
+ /** 필수 항목에 모두 동의했는지 */
441
+ declare function hasAllRequiredAgreements(items: AgreementItem[], value: string[]): boolean;
442
+
443
+ interface ThemeProviderProps extends HTMLAttributes<HTMLDivElement> {
444
+ /** 라이트/다크 모드. 생략하면 바깥 ThemeProvider 의 모드를 이어받는다 (최상위는 light). */
445
+ theme?: ThemeName;
446
+ /**
447
+ * createTheme 으로 만든 브랜드 테마. 모드를 바꿔도 유지되고, 중첩된 ThemeProvider 는 바깥 값을 이어받는다
448
+ * (안쪽에서 준 값이 우선).
449
+ */
450
+ overrides?: BestowTheme;
451
+ }
452
+ declare const ThemeProvider: react.ForwardRefExoticComponent<ThemeProviderProps & react.RefAttributes<HTMLDivElement>>;
453
+ /** 현재 적용 중인 모드(light/dark)를 반환한다. */
454
+ declare function useTheme(): ThemeName;
455
+ /**
456
+ * Portal 로 ThemeProvider 바깥(body)에 렌더링되는 요소에 펼쳐 넣을 props.
457
+ * 현재 모드의 CSS 변수, 브랜드 오버라이드, 기본 글꼴을 다시 적용한다.
458
+ *
459
+ * @example const portal = usePortalProps(); <Content className={cx(portal.className, styles.content)} style={portal.style} />
460
+ */
461
+ declare function usePortalProps(): {
462
+ className: string;
463
+ style?: CSSProperties;
464
+ };
465
+
466
+ /**
467
+ * `type="single"`: 한 번에 하나만 열린다 (`value: string`). `collapsible` 이면 열린 항목을 다시 눌러 닫을 수 있다.
468
+ * `type="multiple"`: 여러 개를 함께 열 수 있다 (`value: string[]`).
469
+ */
470
+ type AccordionProps = ComponentPropsWithoutRef<typeof RadixAccordion.Root>;
471
+ declare const Accordion: react.ForwardRefExoticComponent<AccordionProps & react.RefAttributes<HTMLDivElement>>;
472
+ interface AccordionItemProps extends Omit<ComponentPropsWithoutRef<typeof RadixAccordion.Item>, 'title'> {
473
+ /** 항목 값. Accordion 의 value 와 비교한다 */
474
+ value: string;
475
+ /** 항목 제목 (펼침 버튼의 이름) */
476
+ title: ReactNode;
477
+ /** 제목을 감싸는 heading 수준. 페이지의 heading 구조에 맞춘다 (기본 3) */
478
+ headingLevel?: 2 | 3 | 4 | 5 | 6;
479
+ /** 펼쳤을 때 보이는 내용 */
480
+ children?: ReactNode;
481
+ }
482
+ declare const AccordionItem: react.ForwardRefExoticComponent<AccordionItemProps & react.RefAttributes<HTMLDivElement>>;
483
+
440
484
  interface AddressValue {
441
485
  /** 우편번호 */
442
486
  zonecode: string;
@@ -478,15 +522,6 @@ interface AddressInputProps {
478
522
  */
479
523
  declare const AddressInput: react.ForwardRefExoticComponent<AddressInputProps & react.RefAttributes<HTMLFieldSetElement>>;
480
524
 
481
- interface AgreementItem {
482
- value: string;
483
- /** 약관 이름 (예: "서비스 이용약관 동의") */
484
- label: ReactNode;
485
- /** 필수 동의 여부. 이름 앞에 "필수"/"선택" 이 붙는다 */
486
- required?: boolean;
487
- /** 펼쳐서 보여 줄 약관 내용. 있으면 "보기" 버튼이 생긴다 */
488
- content?: ReactNode;
489
- }
490
525
  interface AgreementGroupProps {
491
526
  items: AgreementItem[];
492
527
  /** 동의한 항목의 value 목록 (제어 모드) */
@@ -513,8 +548,6 @@ interface AgreementGroupProps {
513
548
  name?: string;
514
549
  className?: string;
515
550
  }
516
- /** 필수 항목에 모두 동의했는지 */
517
- declare function hasAllRequiredAgreements(items: AgreementItem[], value: string[]): boolean;
518
551
  /**
519
552
  * 약관 동의 묶음. "전체 동의" 와 개별 항목이 서로 맞춰지고(일부만 동의하면 전체 동의는 부분 선택 상태),
520
553
  * 항목마다 필수·선택 표시와 약관 내용 펼쳐 보기를 지원한다.
@@ -703,7 +736,11 @@ interface CalendarProps {
703
736
  isDateDisabled?: (date: Date) => boolean;
704
737
  /** 공휴일. 일요일처럼 빨갛게 표시하고 스크린리더에 "공휴일" 을 덧붙인다 */
705
738
  isHoliday?: (date: Date) => boolean;
706
- /** 오늘 날짜 'YYYY-MM-DD'. 기본은 실제 오늘 — 테스트·스크린샷에서 고정할 때 쓴다 */
739
+ /**
740
+ * 오늘 날짜 'YYYY-MM-DD'. 기본은 브라우저의 오늘 — 테스트·스크린샷에서 고정할 때 쓴다.
741
+ * 서버 렌더링에서는 서버와 브라우저의 날짜(시간대)가 다를 수 있어, 없으면 hydration 이 끝난 뒤에 정한다
742
+ * (선택된 날짜도 없으면 그 전까지 날짜 칸을 비워 둔다).
743
+ */
707
744
  today?: string;
708
745
  /** 처음 그릴 때 날짜(선택된 날짜, 없으면 오늘)로 포커스를 옮긴다 — 팝업 안에서 쓸 때 */
709
746
  initialFocus?: boolean;
@@ -908,11 +945,8 @@ interface DropdownMenuItemProps extends Omit<ComponentPropsWithoutRef<typeof Rad
908
945
  icon?: ReactNode;
909
946
  /** 오른쪽에 표시할 단축키 (예: "⌘K"). 표시용이라 항목 이름에는 포함되지 않는다 */
910
947
  shortcut?: string;
911
- /**
912
- * danger 는 삭제처럼 되돌리기 어려운 동작.
913
- * `default` 는 0.x 의 옛 이름으로 `neutral` 과 같다 — **deprecated, 1.0 에서 제거**.
914
- */
915
- color?: 'neutral' | 'danger' | 'default';
948
+ /** danger 는 삭제처럼 되돌리기 어려운 동작 */
949
+ color?: 'neutral' | 'danger';
916
950
  }
917
951
  declare const DropdownMenuItem: react.ForwardRefExoticComponent<DropdownMenuItemProps & react.RefAttributes<HTMLDivElement>>;
918
952
  type DropdownMenuLabelProps = ComponentPropsWithoutRef<typeof RadixMenu.Label>;
@@ -1005,7 +1039,8 @@ declare function Modal({ open, defaultOpen, onOpenChange, trigger, title, descri
1005
1039
  */
1006
1040
  declare const ModalClose: react.ForwardRefExoticComponent<Dialog.DialogCloseProps & react.RefAttributes<HTMLButtonElement>>;
1007
1041
 
1008
- type ItemType = 'previous' | 'next' | 'page';
1042
+ /** getItemLabel 이 이름을 만드는 버튼 종류 */
1043
+ type PaginationItemType = 'previous' | 'next' | 'page';
1009
1044
  interface PaginationProps extends Omit<HTMLAttributes<HTMLElement>, 'onChange'> {
1010
1045
  /** 전체 페이지 수. 1 미만이면 아무것도 렌더링하지 않는다 */
1011
1046
  totalPages: number;
@@ -1022,7 +1057,7 @@ interface PaginationProps extends Omit<HTMLAttributes<HTMLElement>, 'onChange'>
1022
1057
  /** 크기 */
1023
1058
  size?: 'sm' | 'md';
1024
1059
  /** 버튼의 스크린리더용 이름 (다국어 대응). 기본: "이전 페이지", "다음 페이지", "3 페이지" */
1025
- getItemLabel?: (type: ItemType, page: number) => string;
1060
+ getItemLabel?: (type: PaginationItemType, page: number) => string;
1026
1061
  }
1027
1062
  declare const Pagination: react.ForwardRefExoticComponent<PaginationProps & react.RefAttributes<HTMLElement>>;
1028
1063
 
@@ -1236,11 +1271,8 @@ declare const Slider: react.ForwardRefExoticComponent<SliderProps & react.RefAtt
1236
1271
  interface SpinnerProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {
1237
1272
  /** 크기 (sm 16px, md 20px, lg 28px) */
1238
1273
  size?: 'sm' | 'md' | 'lg';
1239
- /**
1240
- * 색상. `inherit`(기본)는 부모 글자색을 그대로 쓴다.
1241
- * `current` 는 0.x 의 옛 이름으로 `inherit` 와 같다 — **deprecated, 1.0 에서 제거**.
1242
- */
1243
- color?: 'inherit' | 'primary' | 'neutral' | 'danger' | 'current';
1274
+ /** 색상. `inherit`(기본)는 부모 글자색을 그대로 쓴다 */
1275
+ color?: 'inherit' | 'primary' | 'neutral' | 'danger';
1244
1276
  /**
1245
1277
  * 스크린리더가 읽을 텍스트 (기본 "로딩 중").
1246
1278
  * 빈 문자열이면 장식용으로 보고 `aria-hidden` 처리한다 — 버튼처럼 바깥 요소가 이미 상태를 알릴 때 쓴다.
@@ -1399,10 +1431,6 @@ interface ToastOptions {
1399
1431
  description?: ReactNode;
1400
1432
  /** 의미 색상 (기본 neutral) — Alert·Badge 의 `color` 와 같은 이름 */
1401
1433
  color?: ToastColor;
1402
- /**
1403
- * @deprecated `color` 를 쓰세요 (`'default'` → `'neutral'`). 1.0 에서 제거.
1404
- */
1405
- variant?: 'default' | 'success' | 'warning' | 'danger';
1406
1434
  /** 자동으로 닫히기까지 시간(ms). Infinity 면 자동으로 닫히지 않는다 */
1407
1435
  duration?: number;
1408
1436
  /** 실행 버튼 */
@@ -1510,39 +1538,4 @@ interface VerificationCodeInputProps {
1510
1538
  */
1511
1539
  declare const VerificationCodeInput: react.ForwardRefExoticComponent<VerificationCodeInputProps & react.RefAttributes<HTMLInputElement>>;
1512
1540
 
1513
- /**
1514
- * 숫자만 있는 전화번호에 하이픈을 넣는다. 입력 중인 값도 자연스럽게 나눈다.
1515
- * @example formatPhoneNumber('01012345678') // '010-1234-5678'
1516
- * @example formatPhoneNumber('021234567') // '02-123-4567'
1517
- * @example formatPhoneNumber('15881234') // '1588-1234'
1518
- */
1519
- declare function formatPhoneNumber(input: string): string;
1520
- /**
1521
- * 사업자등록번호(10자리)에 하이픈을 넣는다.
1522
- * @example formatBusinessNumber('1234567890') // '123-45-67890'
1523
- */
1524
- declare function formatBusinessNumber(input: string): string;
1525
- /**
1526
- * 사업자등록번호 검증 공식(가중치 1,3,7,1,3,7,1,3,5)으로 확인한다. 실제로 등록된 번호인지는 국세청 조회가 필요하다.
1527
- * @example isValidBusinessNumber('124-81-00998') // true
1528
- */
1529
- declare function isValidBusinessNumber(input: string): boolean;
1530
- /**
1531
- * 금액을 만·억·조 단위로 읽기 쉽게 쓴다.
1532
- * @example formatKoreanAmount(125000) // '12만 5,000원'
1533
- * @example formatKoreanAmount(150000000) // '1억 5,000만원'
1534
- * @example formatKoreanAmount(0) // '0원'
1535
- */
1536
- declare function formatKoreanAmount(amount: number, unit?: string): string;
1537
-
1538
- /** Date → 'YYYY-MM-DD' (로컬 기준) */
1539
- declare function toISODate(date: Date): string;
1540
- /** 'YYYY-MM-DD' → Date (로컬 자정). 형식이 틀리거나 없는 날짜(2월 30일 등)면 null */
1541
- declare function parseISODate(value: string | null | undefined): Date | null;
1542
- /**
1543
- * 한국어 날짜. 스크린리더용 날짜 이름 등에 쓴다.
1544
- * @example formatKoreanDate(new Date(2026, 9, 15)) // '2026년 10월 15일 목요일'
1545
- */
1546
- declare function formatKoreanDate(date: Date, withWeekday?: boolean): string;
1547
-
1548
- export { Accordion, AccordionItem, type AccordionItemProps, type AccordionProps, AddressInput, type AddressInputProps, type AddressProvider, type AddressSearchResult, type AddressValue, AgreementGroup, type AgreementGroupProps, type AgreementItem, Alert, type AlertColor, type AlertProps, AmountInput, type AmountInputProps, Avatar, type AvatarProps, Badge, type BadgeProps, type BestowMessages, type BestowTheme, Breadcrumb, type BreadcrumbItemData, type BreadcrumbProps, BusinessNumberInput, type BusinessNumberInputProps, Button, type ButtonProps, Calendar, type CalendarProps, Card, CardBody, CardFooter, CardHeader, type CardProps, type CardSectionProps, Checkbox, type CheckboxProps, Combobox, type ComboboxOption, type ComboboxProps, DatePicker, type DatePickerProps, 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, LocaleProvider, type LocaleProviderProps, type Messages, Modal, ModalClose, type ModalProps, Pagination, type PaginationProps, PhoneNumberInput, type PhoneNumberInputProps, 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, type TableAlign, TableBody, TableCell, type TableCellProps, TableFooter, TableHead, type TableHeadProps, TableHeader, type TableProps, TableRow, type TableRowProps, type TableSize, 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 ToastColor, type ToastContextValue, type ToastOptions, ToastProvider, type ToastProviderProps, Tooltip, type TooltipProps, Typography, type TypographyProps, type TypographyVariant, VerificationCodeInput, type VerificationCodeInputProps, composeExtraAddress, contrastRatio, createIntentColors, createTheme, en, formatBusinessNumber, formatKoreanAmount, formatKoreanDate, formatPhoneNumber, hasAllRequiredAgreements, isValidBusinessNumber, kakaoPostcodeProvider, parseISODate, themeClass, toISODate, useMessages, usePortalClassName, usePortalProps, useTheme, useToast, vars };
1541
+ export { Accordion, AccordionItem, type AccordionItemProps, type AccordionProps, AddressInput, type AddressInputProps, type AddressProvider, type AddressSearchResult, type AddressValue, AgreementGroup, type AgreementGroupProps, type AgreementItem, Alert, type AlertColor, type AlertProps, AmountInput, type AmountInputProps, Avatar, type AvatarProps, Badge, type BadgeProps, type BestowMessages, type BestowTheme, Breadcrumb, type BreadcrumbItemData, type BreadcrumbProps, BusinessNumberInput, type BusinessNumberInputProps, Button, type ButtonProps, Calendar, type CalendarProps, Card, CardBody, CardFooter, CardHeader, type CardProps, type CardSectionProps, Checkbox, type CheckboxProps, Combobox, type ComboboxOption, type ComboboxProps, DatePicker, type DatePickerProps, 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, LocaleProvider, type LocaleProviderProps, type Messages, Modal, ModalClose, type ModalProps, Pagination, type PaginationItemType, type PaginationProps, PhoneNumberInput, type PhoneNumberInputProps, 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, type TableAlign, TableBody, TableCell, type TableCellProps, TableFooter, TableHead, type TableHeadProps, TableHeader, type TableProps, TableRow, type TableRowProps, type TableSize, 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 ToastColor, type ToastContextValue, type ToastOptions, ToastProvider, type ToastProviderProps, Tooltip, type TooltipProps, Typography, type TypographyProps, type TypographyVariant, VerificationCodeInput, type VerificationCodeInputProps, composeExtraAddress, contrastRatio, createIntentColors, createTheme, en, formatBusinessNumber, formatKoreanAmount, formatKoreanDate, formatPhoneNumber, hasAllRequiredAgreements, isValidBusinessNumber, kakaoPostcodeProvider, parseISODate, themeClass, toISODate, useMessages, usePortalProps, useTheme, useToast, vars };