@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/README.md +1 -1
- package/dist/chunk-PFEZ3D2H.js +212 -0
- package/dist/chunk-PFEZ3D2H.js.map +1 -0
- package/dist/client.js +3112 -0
- package/dist/client.js.map +1 -0
- package/dist/index.cjs +390 -388
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +101 -108
- package/dist/index.d.ts +101 -108
- package/dist/index.js +2 -3507
- package/dist/shared.js +246 -0
- package/dist/shared.js.map +1 -0
- package/package.json +14 -8
- package/dist/index.js.map +0 -1
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,
|
|
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
|
-
*
|
|
392
|
-
*
|
|
365
|
+
* 숫자만 있는 전화번호에 하이픈을 넣는다. 입력 중인 값도 자연스럽게 나눈다.
|
|
366
|
+
* @example formatPhoneNumber('01012345678') // '010-1234-5678'
|
|
367
|
+
* @example formatPhoneNumber('021234567') // '02-123-4567'
|
|
368
|
+
* @example formatPhoneNumber('15881234') // '1588-1234'
|
|
393
369
|
*/
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
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
|
-
/**
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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,
|
|
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
|
-
*
|
|
392
|
-
*
|
|
365
|
+
* 숫자만 있는 전화번호에 하이픈을 넣는다. 입력 중인 값도 자연스럽게 나눈다.
|
|
366
|
+
* @example formatPhoneNumber('01012345678') // '010-1234-5678'
|
|
367
|
+
* @example formatPhoneNumber('021234567') // '02-123-4567'
|
|
368
|
+
* @example formatPhoneNumber('15881234') // '1588-1234'
|
|
393
369
|
*/
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
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
|
-
/**
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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 };
|