@bestow-ui/react 0.10.0 → 0.12.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 +30 -12
- package/dist/index.cjs +2097 -731
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +1092 -754
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +480 -39
- package/dist/index.d.ts +480 -39
- package/dist/index.js +2066 -721
- package/dist/index.js.map +1 -1
- package/package.json +1 -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, ComponentPropsWithoutRef,
|
|
4
|
+
import { HTMLAttributes, CSSProperties, ReactNode, 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';
|
|
@@ -285,6 +285,108 @@ declare function usePortalProps(): {
|
|
|
285
285
|
*/
|
|
286
286
|
declare function usePortalClassName(): string;
|
|
287
287
|
|
|
288
|
+
/**
|
|
289
|
+
* 컴포넌트의 기본 문구. 모두 생략할 수 있고, 생략하면 각 컴포넌트의 한국어 기본값을 쓴다.
|
|
290
|
+
* 우선순위: 컴포넌트에 직접 준 prop > LocaleProvider 의 messages > 한국어 기본값.
|
|
291
|
+
*
|
|
292
|
+
* 한국어 기본값을 하나의 객체로 모으지 않고 각 컴포넌트에 두는 이유: 그 객체를 import 하면 Button 하나만 써도
|
|
293
|
+
* 모든 문구가 번들에 딸려 온다(Button → Spinner). 이 파일에는 타입과 Provider 만 둔다.
|
|
294
|
+
*/
|
|
295
|
+
interface BestowMessages {
|
|
296
|
+
/** 닫기 버튼 (Modal, Drawer, Popover, Toast, Alert) — "닫기" */
|
|
297
|
+
close: string;
|
|
298
|
+
/** Spinner — "로딩 중" */
|
|
299
|
+
loading: string;
|
|
300
|
+
/** Toast 영역 — "알림" */
|
|
301
|
+
notifications: string;
|
|
302
|
+
/** Breadcrumb — "이동 경로" */
|
|
303
|
+
breadcrumb: string;
|
|
304
|
+
/** Pagination — "페이지 탐색", "이전 페이지", "다음 페이지", "3 페이지" */
|
|
305
|
+
pagination: string;
|
|
306
|
+
paginationPrevious: string;
|
|
307
|
+
paginationNext: string;
|
|
308
|
+
paginationPage: (page: number) => string;
|
|
309
|
+
/** Link external — "(새 창)" */
|
|
310
|
+
newWindow: string;
|
|
311
|
+
/** Combobox — "결과가 없어요", "목록 열기" */
|
|
312
|
+
noResults: string;
|
|
313
|
+
openList: string;
|
|
314
|
+
/** Slider 범위 손잡이 — "최소", "최대" */
|
|
315
|
+
rangeStart: string;
|
|
316
|
+
rangeEnd: string;
|
|
317
|
+
/** AgreementGroup — "전체 동의", "필수", "선택", "보기", "접기" */
|
|
318
|
+
agreeAll: string;
|
|
319
|
+
required: string;
|
|
320
|
+
optional: string;
|
|
321
|
+
show: string;
|
|
322
|
+
hide: string;
|
|
323
|
+
/** VerificationCodeInput — "인증번호", "6자리 숫자를 입력하세요.", "재전송", "인증 시간이 지났어요. 재전송해 주세요." */
|
|
324
|
+
verificationCode: string;
|
|
325
|
+
verificationCodeHint: (length: number, type: 'numeric' | 'alphanumeric') => string;
|
|
326
|
+
resend: string;
|
|
327
|
+
verificationExpired: string;
|
|
328
|
+
/** PhoneNumberInput — "휴대폰 번호" */
|
|
329
|
+
phoneNumber: string;
|
|
330
|
+
/** BusinessNumberInput — "사업자등록번호" 와 검증 문구 */
|
|
331
|
+
businessNumber: string;
|
|
332
|
+
businessNumberInvalid: string;
|
|
333
|
+
businessNumberIncomplete: string;
|
|
334
|
+
/** AmountInput — "금액", "원" */
|
|
335
|
+
amount: string;
|
|
336
|
+
currencyUnit: string;
|
|
337
|
+
/** AddressInput */
|
|
338
|
+
address: string;
|
|
339
|
+
addressSearch: string;
|
|
340
|
+
addressSearchDescription: string;
|
|
341
|
+
postalCode: string;
|
|
342
|
+
baseAddress: string;
|
|
343
|
+
baseAddressPlaceholder: string;
|
|
344
|
+
detailAddress: string;
|
|
345
|
+
detailAddressPlaceholder: string;
|
|
346
|
+
addressLoading: string;
|
|
347
|
+
addressLoadError: string;
|
|
348
|
+
/** Calendar */
|
|
349
|
+
previousMonth: string;
|
|
350
|
+
nextMonth: string;
|
|
351
|
+
/** 달 제목 — month 는 1~12 */
|
|
352
|
+
monthTitle: (year: number, month: number) => string;
|
|
353
|
+
/** 요일 머리글 (일요일부터 7개) */
|
|
354
|
+
weekdaysShort: readonly string[];
|
|
355
|
+
/** 요일 전체 이름 (일요일부터 7개) */
|
|
356
|
+
weekdaysLong: readonly string[];
|
|
357
|
+
/** 날짜 버튼 이름 — 화면에 보이는 날짜 숫자로 시작해야 한다 (WCAG 2.5.3) */
|
|
358
|
+
dayLabel: (date: Date, weekdayLong: string) => string;
|
|
359
|
+
holiday: string;
|
|
360
|
+
today: string;
|
|
361
|
+
/** DatePicker */
|
|
362
|
+
date: string;
|
|
363
|
+
openCalendar: string;
|
|
364
|
+
calendar: string;
|
|
365
|
+
dateInvalid: string;
|
|
366
|
+
dateUnavailable: string;
|
|
367
|
+
dateIncomplete: string;
|
|
368
|
+
}
|
|
369
|
+
type Messages = Partial<BestowMessages>;
|
|
370
|
+
interface LocaleProviderProps {
|
|
371
|
+
/** 바꿀 문구. 일부만 넘기면 나머지는 바깥 LocaleProvider 또는 한국어 기본값을 쓴다 */
|
|
372
|
+
messages: Messages;
|
|
373
|
+
children?: ReactNode;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* 컴포넌트 기본 문구를 한곳에서 바꾼다 (다국어 대응 등). 중첩하면 바깥 값을 이어받고 안쪽이 우선한다.
|
|
377
|
+
* @example <LocaleProvider messages={en}>…</LocaleProvider>
|
|
378
|
+
* @example <LocaleProvider messages={{ close: '창 닫기' }}>…</LocaleProvider>
|
|
379
|
+
*/
|
|
380
|
+
declare function LocaleProvider({ messages, children }: LocaleProviderProps): react.JSX.Element;
|
|
381
|
+
/** LocaleProvider 로 바꾼 문구 (없으면 빈 객체 — 각 컴포넌트가 한국어 기본값을 쓴다) */
|
|
382
|
+
declare function useMessages(): Messages;
|
|
383
|
+
|
|
384
|
+
/**
|
|
385
|
+
* 영어 문구. `<LocaleProvider messages={en}>` 로 쓴다. 따로 import 할 때만 번들에 들어간다.
|
|
386
|
+
* 한국 서비스 전용 부품(사업자등록번호 등)의 문구도 영어로 바뀌지만 서식(하이픈 위치 등)은 그대로다.
|
|
387
|
+
*/
|
|
388
|
+
declare const en: BestowMessages;
|
|
389
|
+
|
|
288
390
|
/**
|
|
289
391
|
* `type="single"`: 한 번에 하나만 열린다 (`value: string`). `collapsible` 이면 열린 항목을 다시 눌러 닫을 수 있다.
|
|
290
392
|
* `type="multiple"`: 여러 개를 함께 열 수 있다 (`value: string[]`).
|
|
@@ -303,6 +405,122 @@ interface AccordionItemProps extends Omit<ComponentPropsWithoutRef<typeof RadixA
|
|
|
303
405
|
}
|
|
304
406
|
declare const AccordionItem: react.ForwardRefExoticComponent<AccordionItemProps & react.RefAttributes<HTMLDivElement>>;
|
|
305
407
|
|
|
408
|
+
/** 주소 검색 결과 */
|
|
409
|
+
interface AddressSearchResult {
|
|
410
|
+
/** 우편번호 (5자리 국가기초구역번호) */
|
|
411
|
+
zonecode: string;
|
|
412
|
+
/** 기본 주소 (도로명 또는 지번) */
|
|
413
|
+
address: string;
|
|
414
|
+
/** 참고 항목 (도로명 주소일 때 법정동·건물명, 예: " (역삼동, 래미안아파트)") */
|
|
415
|
+
extraAddress?: string;
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* 주소 검색 공급자. container 안에 검색 화면을 그리고, 사용자가 고르면 onSelect 를 부른다.
|
|
419
|
+
* 정리 함수를 돌려주면 검색 창이 닫힐 때 부른다. 다른 주소 서비스(행정안전부 도로명주소 API 등)로 바꿔 끼울 수 있다.
|
|
420
|
+
*/
|
|
421
|
+
type AddressProvider = (container: HTMLElement, onSelect: (result: AddressSearchResult) => void) => void | (() => void) | Promise<void | (() => void)>;
|
|
422
|
+
interface KakaoPostcodeData {
|
|
423
|
+
zonecode: string;
|
|
424
|
+
userSelectedType: 'R' | 'J';
|
|
425
|
+
roadAddress: string;
|
|
426
|
+
jibunAddress: string;
|
|
427
|
+
autoJibunAddress?: string;
|
|
428
|
+
bname: string;
|
|
429
|
+
buildingName: string;
|
|
430
|
+
apartment: 'Y' | 'N';
|
|
431
|
+
}
|
|
432
|
+
/** 카카오 가이드의 방식으로 도로명 주소의 참고 항목(법정동, 공동주택 건물명)을 만든다 */
|
|
433
|
+
declare function composeExtraAddress(data: Pick<KakaoPostcodeData, 'userSelectedType' | 'bname' | 'buildingName' | 'apartment'>): string;
|
|
434
|
+
/**
|
|
435
|
+
* 기본 공급자: 카카오(다음) 우편번호 서비스. 처음 쓸 때 스크립트를 불러오므로 코어 번들 크기에 영향이 없다.
|
|
436
|
+
* 사용 조건은 서비스 가이드를 따른다.
|
|
437
|
+
*/
|
|
438
|
+
declare const kakaoPostcodeProvider: AddressProvider;
|
|
439
|
+
|
|
440
|
+
interface AddressValue {
|
|
441
|
+
/** 우편번호 */
|
|
442
|
+
zonecode: string;
|
|
443
|
+
/** 기본 주소 */
|
|
444
|
+
address: string;
|
|
445
|
+
/** 참고 항목 (예: " (역삼동, 래미안아파트)") */
|
|
446
|
+
extraAddress?: string;
|
|
447
|
+
/** 상세 주소 (사용자가 입력) */
|
|
448
|
+
detail: string;
|
|
449
|
+
}
|
|
450
|
+
interface AddressInputProps {
|
|
451
|
+
/** 주소 값 (제어 모드) */
|
|
452
|
+
value?: AddressValue;
|
|
453
|
+
/** 처음 값 (비제어 모드) */
|
|
454
|
+
defaultValue?: AddressValue;
|
|
455
|
+
/** 주소를 고르거나 상세 주소를 입력할 때 호출된다 */
|
|
456
|
+
onValueChange?: (value: AddressValue) => void;
|
|
457
|
+
/** 그룹 제목 */
|
|
458
|
+
label?: ReactNode;
|
|
459
|
+
required?: boolean;
|
|
460
|
+
/** 아래 도움말. error 일 때는 에러 메시지로 표시된다 */
|
|
461
|
+
helperText?: ReactNode;
|
|
462
|
+
error?: boolean;
|
|
463
|
+
disabled?: boolean;
|
|
464
|
+
/** 주소 검색 공급자. 기본은 카카오(다음) 우편번호 서비스 — 처음 검색할 때 스크립트를 불러온다 */
|
|
465
|
+
provider?: AddressProvider;
|
|
466
|
+
/** 검색 버튼·검색 창 제목 */
|
|
467
|
+
searchLabel?: string;
|
|
468
|
+
detailPlaceholder?: string;
|
|
469
|
+
/** 검색 화면을 불러오지 못했을 때 문구 */
|
|
470
|
+
loadErrorText?: string;
|
|
471
|
+
/** form 제출 시 이름. `${name}[zonecode]`, `${name}[address]`, `${name}[detail]` 로 제출된다 */
|
|
472
|
+
name?: string;
|
|
473
|
+
className?: string;
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* 주소 입력 (우편번호 · 기본 주소 · 상세 주소). "주소 검색" 을 누르면 검색 창(Modal)에서 주소를 고르고,
|
|
477
|
+
* 고르면 상세 주소 입력창으로 포커스를 옮긴다.
|
|
478
|
+
*/
|
|
479
|
+
declare const AddressInput: react.ForwardRefExoticComponent<AddressInputProps & react.RefAttributes<HTMLFieldSetElement>>;
|
|
480
|
+
|
|
481
|
+
interface AgreementItem {
|
|
482
|
+
value: string;
|
|
483
|
+
/** 약관 이름 (예: "서비스 이용약관 동의") */
|
|
484
|
+
label: ReactNode;
|
|
485
|
+
/** 필수 동의 여부. 이름 앞에 "필수"/"선택" 이 붙는다 */
|
|
486
|
+
required?: boolean;
|
|
487
|
+
/** 펼쳐서 보여 줄 약관 내용. 있으면 "보기" 버튼이 생긴다 */
|
|
488
|
+
content?: ReactNode;
|
|
489
|
+
}
|
|
490
|
+
interface AgreementGroupProps {
|
|
491
|
+
items: AgreementItem[];
|
|
492
|
+
/** 동의한 항목의 value 목록 (제어 모드) */
|
|
493
|
+
value?: string[];
|
|
494
|
+
/** 처음 동의한 항목 (비제어 모드) */
|
|
495
|
+
defaultValue?: string[];
|
|
496
|
+
/** 동의 항목이 바뀔 때 호출된다 */
|
|
497
|
+
onValueChange?: (value: string[]) => void;
|
|
498
|
+
/** 그룹 제목 (fieldset 의 legend) */
|
|
499
|
+
label?: ReactNode;
|
|
500
|
+
/** "전체 동의" 문구 */
|
|
501
|
+
allLabel?: ReactNode;
|
|
502
|
+
/** 아래 도움말. error 일 때는 에러 메시지로 표시된다 (예: "필수 약관에 동의해 주세요") */
|
|
503
|
+
helperText?: ReactNode;
|
|
504
|
+
error?: boolean;
|
|
505
|
+
disabled?: boolean;
|
|
506
|
+
/** 필수·선택 표시 문구 (다국어) */
|
|
507
|
+
requiredText?: string;
|
|
508
|
+
optionalText?: string;
|
|
509
|
+
/** 약관 내용 펼치기 버튼 문구 */
|
|
510
|
+
showText?: string;
|
|
511
|
+
hideText?: string;
|
|
512
|
+
/** form 제출 시 사용할 이름. 동의한 value 마다 hidden input 이 생긴다 */
|
|
513
|
+
name?: string;
|
|
514
|
+
className?: string;
|
|
515
|
+
}
|
|
516
|
+
/** 필수 항목에 모두 동의했는지 */
|
|
517
|
+
declare function hasAllRequiredAgreements(items: AgreementItem[], value: string[]): boolean;
|
|
518
|
+
/**
|
|
519
|
+
* 약관 동의 묶음. "전체 동의" 와 개별 항목이 서로 맞춰지고(일부만 동의하면 전체 동의는 부분 선택 상태),
|
|
520
|
+
* 항목마다 필수·선택 표시와 약관 내용 펼쳐 보기를 지원한다.
|
|
521
|
+
*/
|
|
522
|
+
declare const AgreementGroup: react.ForwardRefExoticComponent<AgreementGroupProps & react.RefAttributes<HTMLFieldSetElement>>;
|
|
523
|
+
|
|
306
524
|
type AlertColor = 'primary' | 'neutral' | 'danger' | 'success' | 'warning';
|
|
307
525
|
interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color' | 'title'> {
|
|
308
526
|
/** 시각적 스타일 */
|
|
@@ -327,6 +545,55 @@ interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color' | 'tit
|
|
|
327
545
|
*/
|
|
328
546
|
declare const Alert: react.ForwardRefExoticComponent<AlertProps & react.RefAttributes<HTMLDivElement>>;
|
|
329
547
|
|
|
548
|
+
interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {
|
|
549
|
+
/** 크기 */
|
|
550
|
+
size?: 'sm' | 'md' | 'lg';
|
|
551
|
+
/** 에러 상태 표시 (aria-invalid 도 함께 설정된다) */
|
|
552
|
+
invalid?: boolean;
|
|
553
|
+
/** 부모 너비를 꽉 채운다 */
|
|
554
|
+
fullWidth?: boolean;
|
|
555
|
+
/** 입력창 앞에 표시할 요소 (아이콘, 단위 등) */
|
|
556
|
+
startAdornment?: ReactNode;
|
|
557
|
+
/** 입력창 뒤에 표시할 요소 */
|
|
558
|
+
endAdornment?: ReactNode;
|
|
559
|
+
/** 바깥 래퍼에 적용할 className. className 은 input 요소에 적용된다 */
|
|
560
|
+
rootClassName?: string;
|
|
561
|
+
}
|
|
562
|
+
declare const Input: react.ForwardRefExoticComponent<InputProps & react.RefAttributes<HTMLInputElement>>;
|
|
563
|
+
|
|
564
|
+
interface TextFieldProps extends Omit<InputProps, 'invalid'> {
|
|
565
|
+
/** 입력창 위에 표시할 레이블 */
|
|
566
|
+
label?: ReactNode;
|
|
567
|
+
/** 입력창 아래에 표시할 도움말. error 일 때는 에러 메시지로 표시된다 */
|
|
568
|
+
helperText?: ReactNode;
|
|
569
|
+
/** 에러 상태 */
|
|
570
|
+
error?: boolean;
|
|
571
|
+
}
|
|
572
|
+
declare const TextField: react.ForwardRefExoticComponent<TextFieldProps & react.RefAttributes<HTMLInputElement>>;
|
|
573
|
+
|
|
574
|
+
interface AmountInputProps extends Omit<TextFieldProps, 'value' | 'defaultValue' | 'onChange' | 'type' | 'inputMode' | 'endAdornment'> {
|
|
575
|
+
/** 금액 (제어 모드). 비어 있으면 null */
|
|
576
|
+
value?: number | null;
|
|
577
|
+
/** 처음 금액 (비제어 모드) */
|
|
578
|
+
defaultValue?: number | null;
|
|
579
|
+
/** 금액이 바뀔 때 호출된다. 비우면 null */
|
|
580
|
+
onValueChange?: (amount: number | null) => void;
|
|
581
|
+
/** 최댓값. 넘게 입력하면 최댓값으로 맞춘다 */
|
|
582
|
+
max?: number;
|
|
583
|
+
/** 단위 (입력창 뒤에 표시, 한글 읽기에도 붙는다) */
|
|
584
|
+
unit?: string;
|
|
585
|
+
/**
|
|
586
|
+
* 아래에 "12만 5,000원" 처럼 읽기 쉬운 금액을 보여 준다 (기본 true).
|
|
587
|
+
* helperText 를 주면 그 아래 줄로 함께 보여 준다.
|
|
588
|
+
*/
|
|
589
|
+
showKoreanAmount?: boolean;
|
|
590
|
+
}
|
|
591
|
+
/**
|
|
592
|
+
* 금액 입력. 천 단위 쉼표를 넣고 뒤에 단위("원")를 붙이며, 아래에 "12만 5,000원" 처럼 읽기 쉬운 금액을 보여 준다.
|
|
593
|
+
* 값은 숫자(number)로 넘긴다.
|
|
594
|
+
*/
|
|
595
|
+
declare const AmountInput: react.ForwardRefExoticComponent<AmountInputProps & react.RefAttributes<HTMLInputElement>>;
|
|
596
|
+
|
|
330
597
|
interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {
|
|
331
598
|
/** 이미지 주소. 없거나 불러오지 못하면 fallback 을 보여 준다 */
|
|
332
599
|
src?: string;
|
|
@@ -379,6 +646,27 @@ interface BreadcrumbProps extends HTMLAttributes<HTMLElement> {
|
|
|
379
646
|
*/
|
|
380
647
|
declare const Breadcrumb: react.ForwardRefExoticComponent<BreadcrumbProps & react.RefAttributes<HTMLElement>>;
|
|
381
648
|
|
|
649
|
+
interface BusinessNumberInputProps extends Omit<TextFieldProps, 'value' | 'defaultValue' | 'onChange' | 'type' | 'inputMode'> {
|
|
650
|
+
/** 숫자만 있는 사업자등록번호 (제어 모드). 예: "1248100998" */
|
|
651
|
+
value?: string;
|
|
652
|
+
/** 처음 값 (비제어 모드) */
|
|
653
|
+
defaultValue?: string;
|
|
654
|
+
/** 숫자만 있는 값과, 10자리를 다 채웠을 때 검증 공식 통과 여부로 호출된다 (다 채우기 전에는 valid 가 null) */
|
|
655
|
+
onValueChange?: (digits: string, valid: boolean | null) => void;
|
|
656
|
+
/**
|
|
657
|
+
* 10자리를 다 채웠는데 검증 공식에 맞지 않으면 자동으로 오류를 보여 준다 (기본 true).
|
|
658
|
+
* 직접 error·helperText 를 주면 그 값이 우선한다.
|
|
659
|
+
*/
|
|
660
|
+
validate?: boolean;
|
|
661
|
+
/** 자동 검증 오류 문구 */
|
|
662
|
+
invalidText?: string;
|
|
663
|
+
}
|
|
664
|
+
/**
|
|
665
|
+
* 사업자등록번호 입력. 123-45-67890 형식으로 하이픈을 넣고, 10자리를 채우면 검증 공식으로 확인한다.
|
|
666
|
+
* (검증 공식은 오타를 거르는 용도 — 실제 등록·휴폐업 여부는 국세청 조회가 필요하다)
|
|
667
|
+
*/
|
|
668
|
+
declare const BusinessNumberInput: react.ForwardRefExoticComponent<BusinessNumberInputProps & react.RefAttributes<HTMLInputElement>>;
|
|
669
|
+
|
|
382
670
|
interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'color'> {
|
|
383
671
|
/** 시각적 스타일 */
|
|
384
672
|
variant?: 'solid' | 'soft' | 'outline' | 'ghost';
|
|
@@ -400,6 +688,36 @@ interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'col
|
|
|
400
688
|
}
|
|
401
689
|
declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAttributes<HTMLButtonElement>>;
|
|
402
690
|
|
|
691
|
+
interface CalendarProps {
|
|
692
|
+
/** 선택된 날짜 'YYYY-MM-DD' (제어 모드) */
|
|
693
|
+
value?: string;
|
|
694
|
+
/** 처음 선택된 날짜 (비제어 모드) */
|
|
695
|
+
defaultValue?: string;
|
|
696
|
+
/** 날짜를 고를 때 호출된다 */
|
|
697
|
+
onValueChange?: (value: string) => void;
|
|
698
|
+
/** 고를 수 있는 가장 이른 날짜 'YYYY-MM-DD' */
|
|
699
|
+
min?: string;
|
|
700
|
+
/** 고를 수 있는 가장 늦은 날짜 'YYYY-MM-DD' */
|
|
701
|
+
max?: string;
|
|
702
|
+
/** 고를 수 없는 날짜 (예: 주말 제외) */
|
|
703
|
+
isDateDisabled?: (date: Date) => boolean;
|
|
704
|
+
/** 공휴일. 일요일처럼 빨갛게 표시하고 스크린리더에 "공휴일" 을 덧붙인다 */
|
|
705
|
+
isHoliday?: (date: Date) => boolean;
|
|
706
|
+
/** 오늘 날짜 'YYYY-MM-DD'. 기본은 실제 오늘 — 테스트·스크린샷에서 고정할 때 쓴다 */
|
|
707
|
+
today?: string;
|
|
708
|
+
/** 처음 그릴 때 날짜(선택된 날짜, 없으면 오늘)로 포커스를 옮긴다 — 팝업 안에서 쓸 때 */
|
|
709
|
+
initialFocus?: boolean;
|
|
710
|
+
/** 이전·다음 달 버튼 이름 */
|
|
711
|
+
prevMonthLabel?: string;
|
|
712
|
+
nextMonthLabel?: string;
|
|
713
|
+
className?: string;
|
|
714
|
+
}
|
|
715
|
+
/**
|
|
716
|
+
* 달력 (WAI-ARIA grid). 일요일부터 시작하고 일요일·공휴일은 빨강, 토요일은 파랑으로 표시한다.
|
|
717
|
+
* 키보드: ←→ 하루, ↑↓ 일주일, Home/End 주의 처음·끝, PageUp/PageDown 한 달(Shift 와 함께 1년), Enter/Space 선택.
|
|
718
|
+
*/
|
|
719
|
+
declare const Calendar: react.ForwardRefExoticComponent<CalendarProps & react.RefAttributes<HTMLDivElement>>;
|
|
720
|
+
|
|
403
721
|
interface CardProps extends HTMLAttributes<HTMLElement> {
|
|
404
722
|
/** 시각적 스타일. outline 은 테두리, elevated 는 그림자(다크 모드는 가장자리 ring 포함), soft 는 옅은 배경 */
|
|
405
723
|
variant?: 'outline' | 'elevated' | 'soft';
|
|
@@ -427,6 +745,8 @@ interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'siz
|
|
|
427
745
|
indeterminate?: boolean;
|
|
428
746
|
/** 에러 상태 */
|
|
429
747
|
invalid?: boolean;
|
|
748
|
+
/** 체크 상태가 바뀌면 호출된다 (Switch 와 같은 이름). 기본 `onChange` 도 그대로 쓸 수 있다 */
|
|
749
|
+
onCheckedChange?: (checked: boolean) => void;
|
|
430
750
|
}
|
|
431
751
|
declare const Checkbox: react.ForwardRefExoticComponent<CheckboxProps & react.RefAttributes<HTMLInputElement>>;
|
|
432
752
|
|
|
@@ -475,6 +795,47 @@ interface ComboboxProps {
|
|
|
475
795
|
*/
|
|
476
796
|
declare const Combobox: react.ForwardRefExoticComponent<ComboboxProps & react.RefAttributes<HTMLInputElement>>;
|
|
477
797
|
|
|
798
|
+
interface DatePickerProps {
|
|
799
|
+
/** 날짜 'YYYY-MM-DD' (제어 모드). 비어 있으면 '' */
|
|
800
|
+
value?: string;
|
|
801
|
+
/** 처음 날짜 (비제어 모드) */
|
|
802
|
+
defaultValue?: string;
|
|
803
|
+
/** 올바른 날짜를 다 입력하거나 달력에서 고르면 'YYYY-MM-DD', 지우거나 잘못되면 '' 로 호출된다 */
|
|
804
|
+
onValueChange?: (value: string) => void;
|
|
805
|
+
/** 고를 수 있는 가장 이른·늦은 날짜 'YYYY-MM-DD' */
|
|
806
|
+
min?: string;
|
|
807
|
+
max?: string;
|
|
808
|
+
/** 고를 수 없는 날짜 */
|
|
809
|
+
isDateDisabled?: (date: Date) => boolean;
|
|
810
|
+
/** 공휴일 (달력에 빨갛게 표시) */
|
|
811
|
+
isHoliday?: (date: Date) => boolean;
|
|
812
|
+
/** 오늘 날짜 'YYYY-MM-DD' (테스트·스크린샷 고정용) */
|
|
813
|
+
today?: string;
|
|
814
|
+
label?: ReactNode;
|
|
815
|
+
/** 아래 도움말. error 일 때는 에러 메시지로 표시된다 */
|
|
816
|
+
helperText?: ReactNode;
|
|
817
|
+
error?: boolean;
|
|
818
|
+
required?: boolean;
|
|
819
|
+
disabled?: boolean;
|
|
820
|
+
fullWidth?: boolean;
|
|
821
|
+
placeholder?: string;
|
|
822
|
+
/** 달력 버튼·달력 창 이름 */
|
|
823
|
+
calendarLabel?: string;
|
|
824
|
+
/** 자동 검증 문구 */
|
|
825
|
+
invalidText?: string;
|
|
826
|
+
unavailableText?: string;
|
|
827
|
+
incompleteText?: string;
|
|
828
|
+
/** form 제출 시 이름 ('YYYY-MM-DD' 가 제출된다) */
|
|
829
|
+
name?: string;
|
|
830
|
+
id?: string;
|
|
831
|
+
className?: string;
|
|
832
|
+
}
|
|
833
|
+
/**
|
|
834
|
+
* 날짜 입력. `YYYY-MM-DD` 로 직접 입력하거나(숫자만 쳐도 하이픈이 들어간다) 달력 버튼으로 고른다.
|
|
835
|
+
* 달력은 일요일부터 시작하고, 열면 선택된 날짜(없으면 오늘)로 포커스가 간다. 값은 시간대 문제가 없는 'YYYY-MM-DD' 문자열이다.
|
|
836
|
+
*/
|
|
837
|
+
declare const DatePicker: react.ForwardRefExoticComponent<DatePickerProps & react.RefAttributes<HTMLInputElement>>;
|
|
838
|
+
|
|
478
839
|
interface DividerProps extends HTMLAttributes<HTMLDivElement> {
|
|
479
840
|
/** 방향. vertical 은 flex 행 안에서 부모 높이를 채운다 */
|
|
480
841
|
orientation?: 'horizontal' | 'vertical';
|
|
@@ -547,8 +908,11 @@ interface DropdownMenuItemProps extends Omit<ComponentPropsWithoutRef<typeof Rad
|
|
|
547
908
|
icon?: ReactNode;
|
|
548
909
|
/** 오른쪽에 표시할 단축키 (예: "⌘K"). 표시용이라 항목 이름에는 포함되지 않는다 */
|
|
549
910
|
shortcut?: string;
|
|
550
|
-
/**
|
|
551
|
-
|
|
911
|
+
/**
|
|
912
|
+
* danger 는 삭제처럼 되돌리기 어려운 동작.
|
|
913
|
+
* `default` 는 0.x 의 옛 이름으로 `neutral` 과 같다 — **deprecated, 1.0 에서 제거**.
|
|
914
|
+
*/
|
|
915
|
+
color?: 'neutral' | 'danger' | 'default';
|
|
552
916
|
}
|
|
553
917
|
declare const DropdownMenuItem: react.ForwardRefExoticComponent<DropdownMenuItemProps & react.RefAttributes<HTMLDivElement>>;
|
|
554
918
|
type DropdownMenuLabelProps = ComponentPropsWithoutRef<typeof RadixMenu.Label>;
|
|
@@ -577,32 +941,6 @@ interface IconButtonProps extends Omit<ButtonProps, 'startIcon' | 'endIcon' | 'f
|
|
|
577
941
|
*/
|
|
578
942
|
declare const IconButton: react.ForwardRefExoticComponent<IconButtonProps & react.RefAttributes<HTMLButtonElement>>;
|
|
579
943
|
|
|
580
|
-
interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {
|
|
581
|
-
/** 크기 */
|
|
582
|
-
size?: 'sm' | 'md' | 'lg';
|
|
583
|
-
/** 에러 상태 표시 (aria-invalid 도 함께 설정된다) */
|
|
584
|
-
invalid?: boolean;
|
|
585
|
-
/** 부모 너비를 꽉 채운다 */
|
|
586
|
-
fullWidth?: boolean;
|
|
587
|
-
/** 입력창 앞에 표시할 요소 (아이콘, 단위 등) */
|
|
588
|
-
startAdornment?: ReactNode;
|
|
589
|
-
/** 입력창 뒤에 표시할 요소 */
|
|
590
|
-
endAdornment?: ReactNode;
|
|
591
|
-
/** 바깥 래퍼에 적용할 className. className 은 input 요소에 적용된다 */
|
|
592
|
-
rootClassName?: string;
|
|
593
|
-
}
|
|
594
|
-
declare const Input: react.ForwardRefExoticComponent<InputProps & react.RefAttributes<HTMLInputElement>>;
|
|
595
|
-
|
|
596
|
-
interface TextFieldProps extends Omit<InputProps, 'invalid'> {
|
|
597
|
-
/** 입력창 위에 표시할 레이블 */
|
|
598
|
-
label?: ReactNode;
|
|
599
|
-
/** 입력창 아래에 표시할 도움말. error 일 때는 에러 메시지로 표시된다 */
|
|
600
|
-
helperText?: ReactNode;
|
|
601
|
-
/** 에러 상태 */
|
|
602
|
-
error?: boolean;
|
|
603
|
-
}
|
|
604
|
-
declare const TextField: react.ForwardRefExoticComponent<TextFieldProps & react.RefAttributes<HTMLInputElement>>;
|
|
605
|
-
|
|
606
944
|
interface LinkProps extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'color'> {
|
|
607
945
|
/**
|
|
608
946
|
* 렌더링할 요소. Next.js 등의 라우터 링크를 넘기면 그 컴포넌트로 렌더링한다 (예: `as={NextLink}`).
|
|
@@ -654,8 +992,13 @@ interface ModalProps {
|
|
|
654
992
|
closeOnOverlayClick?: boolean;
|
|
655
993
|
/** 내용 영역 className */
|
|
656
994
|
className?: string;
|
|
995
|
+
/**
|
|
996
|
+
* 닫힐 때 포커스를 어디로 보낼지 정한다. 기본은 모달을 연 요소로 돌아간다.
|
|
997
|
+
* `event.preventDefault()` 후 원하는 요소에 focus() 하면 그쪽으로 보낸다 (예: 주소 선택 뒤 상세 주소 입력창).
|
|
998
|
+
*/
|
|
999
|
+
onCloseAutoFocus?: (event: Event) => void;
|
|
657
1000
|
}
|
|
658
|
-
declare function Modal({ open, defaultOpen, onOpenChange, trigger, title, description, children, footer, size, hideCloseButton, closeOnOverlayClick, className, }: ModalProps): react.JSX.Element;
|
|
1001
|
+
declare function Modal({ open, defaultOpen, onOpenChange, trigger, title, description, children, footer, size, hideCloseButton, closeOnOverlayClick, className, onCloseAutoFocus, }: ModalProps): react.JSX.Element;
|
|
659
1002
|
/**
|
|
660
1003
|
* 감싼 요소를 클릭하면 모달이 닫힌다.
|
|
661
1004
|
* @example <ModalClose asChild><Button>취소</Button></ModalClose>
|
|
@@ -683,6 +1026,20 @@ interface PaginationProps extends Omit<HTMLAttributes<HTMLElement>, 'onChange'>
|
|
|
683
1026
|
}
|
|
684
1027
|
declare const Pagination: react.ForwardRefExoticComponent<PaginationProps & react.RefAttributes<HTMLElement>>;
|
|
685
1028
|
|
|
1029
|
+
interface PhoneNumberInputProps extends Omit<TextFieldProps, 'value' | 'defaultValue' | 'onChange' | 'type' | 'inputMode'> {
|
|
1030
|
+
/** 숫자만 있는 전화번호 (제어 모드). 예: "01012345678" */
|
|
1031
|
+
value?: string;
|
|
1032
|
+
/** 처음 값 (비제어 모드) */
|
|
1033
|
+
defaultValue?: string;
|
|
1034
|
+
/** 숫자만 있는 값으로 호출된다 (하이픈 없음) */
|
|
1035
|
+
onValueChange?: (digits: string) => void;
|
|
1036
|
+
}
|
|
1037
|
+
/**
|
|
1038
|
+
* 전화번호 입력. 입력하는 대로 하이픈을 넣고(010-1234-5678, 02-123-4567, 1588-1234), 값은 숫자만 넘긴다.
|
|
1039
|
+
* 휴대폰에서 전화 키패드를 띄우고 브라우저의 전화번호 자동 완성을 받는다.
|
|
1040
|
+
*/
|
|
1041
|
+
declare const PhoneNumberInput: react.ForwardRefExoticComponent<PhoneNumberInputProps & react.RefAttributes<HTMLInputElement>>;
|
|
1042
|
+
|
|
686
1043
|
interface PopoverProps {
|
|
687
1044
|
/** 팝오버 내용 */
|
|
688
1045
|
content: ReactNode;
|
|
@@ -712,8 +1069,10 @@ interface PopoverProps {
|
|
|
712
1069
|
className?: string;
|
|
713
1070
|
/** 팝오버 style (너비 지정 등) */
|
|
714
1071
|
style?: CSSProperties;
|
|
1072
|
+
/** 열릴 때 포커스 처리. 기본은 내용의 첫 요소로 간다 — `event.preventDefault()` 후 원하는 요소에 focus() 할 수 있다 */
|
|
1073
|
+
onOpenAutoFocus?: (event: Event) => void;
|
|
715
1074
|
}
|
|
716
|
-
declare function Popover({ content, children, title, 'aria-label': ariaLabel, showClose, showArrow, side, align, open, defaultOpen, onOpenChange, modal, className, style, }: PopoverProps): react.JSX.Element;
|
|
1075
|
+
declare function Popover({ content, children, title, 'aria-label': ariaLabel, showClose, showArrow, side, align, open, defaultOpen, onOpenChange, modal, className, style, onOpenAutoFocus, }: PopoverProps): react.JSX.Element;
|
|
717
1076
|
/**
|
|
718
1077
|
* 팝오버 내용 안에서 누르면 팝오버를 닫는 요소.
|
|
719
1078
|
* @example <PopoverClose asChild><Button>확인</Button></PopoverClose>
|
|
@@ -877,8 +1236,11 @@ declare const Slider: react.ForwardRefExoticComponent<SliderProps & react.RefAtt
|
|
|
877
1236
|
interface SpinnerProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {
|
|
878
1237
|
/** 크기 (sm 16px, md 20px, lg 28px) */
|
|
879
1238
|
size?: 'sm' | 'md' | 'lg';
|
|
880
|
-
/**
|
|
881
|
-
|
|
1239
|
+
/**
|
|
1240
|
+
* 색상. `inherit`(기본)는 부모 글자색을 그대로 쓴다.
|
|
1241
|
+
* `current` 는 0.x 의 옛 이름으로 `inherit` 와 같다 — **deprecated, 1.0 에서 제거**.
|
|
1242
|
+
*/
|
|
1243
|
+
color?: 'inherit' | 'primary' | 'neutral' | 'danger' | 'current';
|
|
882
1244
|
/**
|
|
883
1245
|
* 스크린리더가 읽을 텍스트 (기본 "로딩 중").
|
|
884
1246
|
* 빈 문자열이면 장식용으로 보고 `aria-hidden` 처리한다 — 버튼처럼 바깥 요소가 이미 상태를 알릴 때 쓴다.
|
|
@@ -958,10 +1320,10 @@ interface TableRowProps extends HTMLAttributes<HTMLTableRowElement> {
|
|
|
958
1320
|
selected?: boolean;
|
|
959
1321
|
}
|
|
960
1322
|
declare const TableRow: react.ForwardRefExoticComponent<TableRowProps & react.RefAttributes<HTMLTableRowElement>>;
|
|
961
|
-
type
|
|
1323
|
+
type TableAlign = 'left' | 'center' | 'right';
|
|
962
1324
|
interface TableHeadProps extends Omit<ThHTMLAttributes<HTMLTableCellElement>, 'align'> {
|
|
963
1325
|
/** 정렬 */
|
|
964
|
-
align?:
|
|
1326
|
+
align?: TableAlign;
|
|
965
1327
|
/**
|
|
966
1328
|
* 이 열의 정렬 상태. onSort 와 함께 주면 머리 셀이 정렬 버튼이 되고 `aria-sort` 를 붙인다.
|
|
967
1329
|
* 정렬되지 않은 열은 'none'.
|
|
@@ -973,7 +1335,7 @@ interface TableHeadProps extends Omit<ThHTMLAttributes<HTMLTableCellElement>, 'a
|
|
|
973
1335
|
declare const TableHead: react.ForwardRefExoticComponent<TableHeadProps & react.RefAttributes<HTMLTableCellElement>>;
|
|
974
1336
|
interface TableCellProps extends Omit<TdHTMLAttributes<HTMLTableCellElement>, 'align'> {
|
|
975
1337
|
/** 정렬 (숫자는 right 권장) */
|
|
976
|
-
align?:
|
|
1338
|
+
align?: TableAlign;
|
|
977
1339
|
}
|
|
978
1340
|
declare const TableCell: react.ForwardRefExoticComponent<TableCellProps & react.RefAttributes<HTMLTableCellElement>>;
|
|
979
1341
|
|
|
@@ -1029,12 +1391,17 @@ interface TextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>
|
|
|
1029
1391
|
}
|
|
1030
1392
|
declare const Textarea: react.ForwardRefExoticComponent<TextareaProps & react.RefAttributes<HTMLTextAreaElement>>;
|
|
1031
1393
|
|
|
1394
|
+
type ToastColor = 'primary' | 'neutral' | 'danger' | 'success' | 'warning';
|
|
1032
1395
|
interface ToastOptions {
|
|
1033
1396
|
/** 제목 */
|
|
1034
1397
|
title: ReactNode;
|
|
1035
1398
|
/** 설명 */
|
|
1036
1399
|
description?: ReactNode;
|
|
1037
|
-
/** 의미 색상 */
|
|
1400
|
+
/** 의미 색상 (기본 neutral) — Alert·Badge 의 `color` 와 같은 이름 */
|
|
1401
|
+
color?: ToastColor;
|
|
1402
|
+
/**
|
|
1403
|
+
* @deprecated `color` 를 쓰세요 (`'default'` → `'neutral'`). 1.0 에서 제거.
|
|
1404
|
+
*/
|
|
1038
1405
|
variant?: 'default' | 'success' | 'warning' | 'danger';
|
|
1039
1406
|
/** 자동으로 닫히기까지 시간(ms). Infinity 면 자동으로 닫히지 않는다 */
|
|
1040
1407
|
duration?: number;
|
|
@@ -1060,7 +1427,7 @@ interface ToastProviderProps {
|
|
|
1060
1427
|
label?: string;
|
|
1061
1428
|
}
|
|
1062
1429
|
/** 앱 최상단(ThemeProvider 안쪽)에 한 번 감싸고, 하위에서 useToast() 로 토스트를 띄운다. */
|
|
1063
|
-
declare function ToastProvider({ children, duration, label }: ToastProviderProps): react.JSX.Element;
|
|
1430
|
+
declare function ToastProvider({ children, duration, label: labelProp }: ToastProviderProps): react.JSX.Element;
|
|
1064
1431
|
declare function useToast(): ToastContextValue;
|
|
1065
1432
|
|
|
1066
1433
|
interface TooltipProps {
|
|
@@ -1104,4 +1471,78 @@ interface TypographyProps extends Omit<HTMLAttributes<HTMLElement>, 'color'> {
|
|
|
1104
1471
|
}
|
|
1105
1472
|
declare const Typography: react.ForwardRefExoticComponent<TypographyProps & react.RefAttributes<HTMLElement>>;
|
|
1106
1473
|
|
|
1107
|
-
|
|
1474
|
+
interface VerificationCodeInputProps {
|
|
1475
|
+
/** 자릿수 */
|
|
1476
|
+
length?: number;
|
|
1477
|
+
/** 입력값 (제어 모드) */
|
|
1478
|
+
value?: string;
|
|
1479
|
+
/** 처음 입력값 (비제어 모드) */
|
|
1480
|
+
defaultValue?: string;
|
|
1481
|
+
/** 입력값이 바뀔 때 호출된다 */
|
|
1482
|
+
onValueChange?: (value: string) => void;
|
|
1483
|
+
/** 모든 자리를 채웠을 때 호출된다 (자동 제출 등) */
|
|
1484
|
+
onComplete?: (value: string) => void;
|
|
1485
|
+
/** 받을 문자. numeric 이면 숫자 키패드를 띄우고 숫자만 받는다 */
|
|
1486
|
+
type?: 'numeric' | 'alphanumeric';
|
|
1487
|
+
/** 레이블 (입력창의 이름) */
|
|
1488
|
+
label?: ReactNode;
|
|
1489
|
+
/** 아래 도움말. 생략하면 "6자리 숫자를 입력하세요" 처럼 자릿수를 안내한다. error 일 때는 에러 메시지로 표시된다 */
|
|
1490
|
+
helperText?: ReactNode;
|
|
1491
|
+
error?: boolean;
|
|
1492
|
+
disabled?: boolean;
|
|
1493
|
+
autoFocus?: boolean;
|
|
1494
|
+
/** 유효 시간(초). 주면 남은 시간을 보여 주고, 0 이 되면 onExpire 를 호출하고 만료 안내를 읽어 준다 */
|
|
1495
|
+
expiresIn?: number;
|
|
1496
|
+
onExpire?: () => void;
|
|
1497
|
+
/** 주면 재전송 버튼이 생긴다. 누르면 호출되고 입력값과 남은 시간을 처음으로 되돌린다 */
|
|
1498
|
+
onResend?: () => void;
|
|
1499
|
+
resendText?: string;
|
|
1500
|
+
/** 만료 안내 문구 */
|
|
1501
|
+
expiredText?: string;
|
|
1502
|
+
/** form 제출 시 사용할 이름 */
|
|
1503
|
+
name?: string;
|
|
1504
|
+
id?: string;
|
|
1505
|
+
className?: string;
|
|
1506
|
+
}
|
|
1507
|
+
/**
|
|
1508
|
+
* 문자로 받은 인증번호 입력. 실제 입력창은 하나라서 문자 자동 채우기(`autocomplete="one-time-code"`)·붙여넣기가 그대로 되고,
|
|
1509
|
+
* 스크린리더는 칸마다가 아니라 "인증번호" 하나로 읽는다. 칸 모양은 화면 표시용이다.
|
|
1510
|
+
*/
|
|
1511
|
+
declare const VerificationCodeInput: react.ForwardRefExoticComponent<VerificationCodeInputProps & react.RefAttributes<HTMLInputElement>>;
|
|
1512
|
+
|
|
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 };
|