@yeongseoksong/framework 1.3.1 → 1.5.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.
@@ -1,21 +1,26 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as _mantine_core from '@mantine/core';
3
- import { MantineSize, TabsProps, TabsListProps, TabsPanelProps, TitleProps, TextProps, ButtonProps, BoxProps, TableProps, ModalProps, ThemeIconProps, ContainerProps, BadgeProps, TextInputProps, PasswordInputProps, TextareaProps, SelectProps, SkeletonProps, AnchorProps, StackProps, StyleProp, MantineColor, SimpleGridProps, CardProps as CardProps$1, MantineColorsTuple } from '@mantine/core';
3
+ import { MantineSize, TabsProps, TabsListProps, TabsPanelProps, TitleProps, TextProps, ButtonProps, BoxProps, TableProps, ModalProps, ThemeIconProps, ContainerProps, BadgeProps, TextInputProps, PasswordInputProps, TextareaProps, JsonInputProps, NumberInputProps, SliderProps, InputWrapperProps, RatingProps, PinInputProps, SelectProps, NativeSelectProps, MultiSelectProps, AutocompleteProps, TagsInputProps, RadioGroupProps, SegmentedControlProps, CheckboxProps, SwitchProps, FileInputProps, ColorInputProps, SkeletonProps, AnchorProps, StackProps, StyleProp, MantineColor, SimpleGridProps, CardProps as CardProps$1, MantineColorsTuple } from '@mantine/core';
4
4
  import React$1, { ReactNode, ComponentPropsWithoutRef, AnchorHTMLAttributes } from 'react';
5
5
  import * as _mantine_core_lib_components_Modal_ModalCloseButton from '@mantine/core/lib/components/Modal/ModalCloseButton';
6
6
  import * as _mantine_core_lib_components_Modal_ModalBody from '@mantine/core/lib/components/Modal/ModalBody';
7
7
  import * as _mantine_core_lib_components_Modal_ModalTitle from '@mantine/core/lib/components/Modal/ModalTitle';
8
8
  import * as _mantine_core_lib_components_Modal_ModalHeader from '@mantine/core/lib/components/Modal/ModalHeader';
9
+ import { DateInputProps, DatePickerInputProps, TimeInputProps } from '@mantine/dates';
10
+ import { NotificationData, NotificationsProps } from '@mantine/notifications';
9
11
 
10
12
  interface LogoProps {
11
13
  size?: MantineSize;
12
14
  }
13
15
  declare function Logo(_props: LogoProps): react_jsx_runtime.JSX.Element;
14
16
 
17
+ type SdTabsRootProps = TabsProps & {
18
+ syncHash?: boolean;
19
+ };
15
20
  declare function SdPanel({ children, ...props }: TabsPanelProps): react_jsx_runtime.JSX.Element;
16
21
  declare const SdTabs: {
17
22
  Pills: {
18
- (props: TabsProps): react_jsx_runtime.JSX.Element;
23
+ ({ syncHash, value, onChange, ...props }: SdTabsRootProps): react_jsx_runtime.JSX.Element;
19
24
  List: _mantine_core.MantineComponent<{
20
25
  props: TabsListProps;
21
26
  ref: HTMLDivElement;
@@ -31,7 +36,7 @@ declare const SdTabs: {
31
36
  Panel: typeof SdPanel;
32
37
  };
33
38
  Underline: {
34
- (props: TabsProps): react_jsx_runtime.JSX.Element;
39
+ ({ syncHash, value, onChange, ...props }: SdTabsRootProps): react_jsx_runtime.JSX.Element;
35
40
  List: _mantine_core.MantineComponent<{
36
41
  props: TabsListProps;
37
42
  ref: HTMLDivElement;
@@ -47,7 +52,7 @@ declare const SdTabs: {
47
52
  Panel: typeof SdPanel;
48
53
  };
49
54
  Outline: {
50
- (props: TabsProps): react_jsx_runtime.JSX.Element;
55
+ ({ syncHash, value, onChange, ...props }: SdTabsRootProps): react_jsx_runtime.JSX.Element;
51
56
  List: _mantine_core.MantineComponent<{
52
57
  props: TabsListProps;
53
58
  ref: HTMLDivElement;
@@ -64,7 +69,7 @@ declare const SdTabs: {
64
69
  };
65
70
  };
66
71
  declare const SdTabsPills: {
67
- (props: TabsProps): react_jsx_runtime.JSX.Element;
72
+ ({ syncHash, value, onChange, ...props }: SdTabsRootProps): react_jsx_runtime.JSX.Element;
68
73
  List: _mantine_core.MantineComponent<{
69
74
  props: TabsListProps;
70
75
  ref: HTMLDivElement;
@@ -80,7 +85,7 @@ declare const SdTabsPills: {
80
85
  Panel: typeof SdPanel;
81
86
  };
82
87
  declare const SdTabsUnderline: {
83
- (props: TabsProps): react_jsx_runtime.JSX.Element;
88
+ ({ syncHash, value, onChange, ...props }: SdTabsRootProps): react_jsx_runtime.JSX.Element;
84
89
  List: _mantine_core.MantineComponent<{
85
90
  props: TabsListProps;
86
91
  ref: HTMLDivElement;
@@ -96,7 +101,7 @@ declare const SdTabsUnderline: {
96
101
  Panel: typeof SdPanel;
97
102
  };
98
103
  declare const SdTabsOutline: {
99
- (props: TabsProps): react_jsx_runtime.JSX.Element;
104
+ ({ syncHash, value, onChange, ...props }: SdTabsRootProps): react_jsx_runtime.JSX.Element;
100
105
  List: _mantine_core.MantineComponent<{
101
106
  props: TabsListProps;
102
107
  ref: HTMLDivElement;
@@ -372,23 +377,89 @@ declare const SdBadgePrimary: ({ children, ...props }: Props$1) => react_jsx_run
372
377
  declare const SdBadgeSuccess: ({ children, ...props }: Props$1) => react_jsx_runtime.JSX.Element;
373
378
  declare const SdBadgeWarning: ({ children, ...props }: Props$1) => react_jsx_runtime.JSX.Element;
374
379
 
380
+ /** Input.Wrapper가 대신 받아 주는 필드들. */
381
+ type WrapperFields = Pick<InputWrapperProps, 'label' | 'description' | 'error' | 'required' | 'withAsterisk'>;
382
+ /** 라디오는 그룹 단위로 쓰인다 — 항목을 `data`로 받아 Select류와 호출부를 맞춘다. */
383
+ interface SdRadioProps extends Omit<RadioGroupProps, 'children'> {
384
+ data: {
385
+ value: string;
386
+ label: ReactNode;
387
+ disabled?: boolean;
388
+ }[];
389
+ orientation?: 'horizontal' | 'vertical';
390
+ }
391
+ declare function SdInputRadio({ data, orientation, ...props }: SdRadioProps): react_jsx_runtime.JSX.Element;
375
392
  declare const SdInput: {
376
393
  /** 일반 텍스트 — 이름, 회사명 등 */
377
- Text: ({ ...props }: TextInputProps) => react_jsx_runtime.JSX.Element;
394
+ Text: (props: TextInputProps) => react_jsx_runtime.JSX.Element;
378
395
  /** 이메일 입력 */
379
- Email: ({ ...props }: TextInputProps) => react_jsx_runtime.JSX.Element;
396
+ Email: (props: TextInputProps) => react_jsx_runtime.JSX.Element;
380
397
  /** 비밀번호 입력 — 마스킹 토글 포함 */
381
- Password: ({ ...props }: PasswordInputProps) => react_jsx_runtime.JSX.Element;
398
+ Password: (props: PasswordInputProps) => react_jsx_runtime.JSX.Element;
382
399
  /** 멀티라인 텍스트 — 문의 메시지 등 */
383
- Textarea: ({ ...props }: TextareaProps) => react_jsx_runtime.JSX.Element;
400
+ Textarea: (props: TextareaProps) => react_jsx_runtime.JSX.Element;
401
+ /** JSON 입력 — 포맷·검증 버튼 포함 */
402
+ Json: (props: JsonInputProps) => react_jsx_runtime.JSX.Element;
403
+ /** 숫자 입력 — 증감 컨트롤 포함 */
404
+ Number: (props: NumberInputProps<number>) => react_jsx_runtime.JSX.Element;
405
+ /** 범위 선택 슬라이더 */
406
+ Slider: ({ label, description, error, required, withAsterisk, ...rest }: Omit<SliderProps, "label" | "error" | "description" | "required" | "withAsterisk"> & WrapperFields) => react_jsx_runtime.JSX.Element;
407
+ /** 별점 */
408
+ Rating: ({ label, description, error, required, withAsterisk, ...rest }: Omit<RatingProps, "label" | "error" | "description" | "required" | "withAsterisk"> & WrapperFields) => react_jsx_runtime.JSX.Element;
409
+ /** 인증번호 등 자리수가 고정된 코드 */
410
+ PinCode: ({ label, description, error, required, withAsterisk, ...rest }: Omit<PinInputProps, "label" | "error" | "description" | "required" | "withAsterisk"> & WrapperFields) => react_jsx_runtime.JSX.Element;
384
411
  /** 드롭다운 선택 */
385
- Select: ({ ...props }: SelectProps) => react_jsx_runtime.JSX.Element;
412
+ Select: (props: SelectProps<string>) => react_jsx_runtime.JSX.Element;
413
+ /** 브라우저 기본 select — 모바일·간단한 목록 */
414
+ NativeSelect: (props: NativeSelectProps) => react_jsx_runtime.JSX.Element;
415
+ /** 다중 선택 */
416
+ MultiSelect: (props: MultiSelectProps<string>) => react_jsx_runtime.JSX.Element;
417
+ /** 입력하며 후보를 좁히는 자동완성(자유 입력 허용) */
418
+ Autocomplete: (props: AutocompleteProps) => react_jsx_runtime.JSX.Element;
419
+ /** 자유롭게 추가하는 태그 목록 */
420
+ Tags: (props: TagsInputProps) => react_jsx_runtime.JSX.Element;
421
+ /** 라디오 그룹 — data로 항목을 넘긴다 */
422
+ Radio: typeof SdInputRadio;
423
+ /** 두세 개 중 하나 — 탭처럼 보이는 선택 */
424
+ Segmented: ({ label, description, error, required, withAsterisk, ...rest }: Omit<SegmentedControlProps<string>, "label" | "error" | "description" | "required" | "withAsterisk"> & WrapperFields) => react_jsx_runtime.JSX.Element;
425
+ /** 체크박스 — getInputProps(name, { type: 'checkbox' }) */
426
+ Checkbox: (props: CheckboxProps) => react_jsx_runtime.JSX.Element;
427
+ /** 스위치 — 즉시 반영되는 on/off */
428
+ Switch: (props: SwitchProps) => react_jsx_runtime.JSX.Element;
429
+ /** 파일 선택 */
430
+ File: (props: FileInputProps<false>) => react_jsx_runtime.JSX.Element;
431
+ /** 색상 선택 */
432
+ Color: (props: ColorInputProps) => react_jsx_runtime.JSX.Element;
433
+ /** 날짜 — 직접 입력 + 달력 팝오버. 값은 'YYYY-MM-DD' 문자열 */
434
+ Date: (props: DateInputProps) => react_jsx_runtime.JSX.Element;
435
+ /** 기간 — 시작·종료 두 날짜 */
436
+ DateRange: (props: DatePickerInputProps<"range">) => react_jsx_runtime.JSX.Element;
437
+ /** 시각 */
438
+ Time: (props: TimeInputProps) => react_jsx_runtime.JSX.Element;
386
439
  };
387
- declare const SdInputText: ({ ...props }: TextInputProps) => react_jsx_runtime.JSX.Element;
388
- declare const SdInputEmail: ({ ...props }: TextInputProps) => react_jsx_runtime.JSX.Element;
389
- declare const SdInputPassword: ({ ...props }: PasswordInputProps) => react_jsx_runtime.JSX.Element;
390
- declare const SdInputTextarea: ({ ...props }: TextareaProps) => react_jsx_runtime.JSX.Element;
391
- declare const SdInputSelect: ({ ...props }: SelectProps) => react_jsx_runtime.JSX.Element;
440
+ declare const SdInputText: (props: TextInputProps) => react_jsx_runtime.JSX.Element;
441
+ declare const SdInputEmail: (props: TextInputProps) => react_jsx_runtime.JSX.Element;
442
+ declare const SdInputPassword: (props: PasswordInputProps) => react_jsx_runtime.JSX.Element;
443
+ declare const SdInputTextarea: (props: TextareaProps) => react_jsx_runtime.JSX.Element;
444
+ declare const SdInputJson: (props: JsonInputProps) => react_jsx_runtime.JSX.Element;
445
+ declare const SdInputNumber: (props: NumberInputProps<number>) => react_jsx_runtime.JSX.Element;
446
+ declare const SdInputSlider: ({ label, description, error, required, withAsterisk, ...rest }: Omit<SliderProps, "label" | "error" | "description" | "required" | "withAsterisk"> & WrapperFields) => react_jsx_runtime.JSX.Element;
447
+ declare const SdInputRating: ({ label, description, error, required, withAsterisk, ...rest }: Omit<RatingProps, "label" | "error" | "description" | "required" | "withAsterisk"> & WrapperFields) => react_jsx_runtime.JSX.Element;
448
+ declare const SdInputPinCode: ({ label, description, error, required, withAsterisk, ...rest }: Omit<PinInputProps, "label" | "error" | "description" | "required" | "withAsterisk"> & WrapperFields) => react_jsx_runtime.JSX.Element;
449
+ declare const SdInputSelect: (props: SelectProps<string>) => react_jsx_runtime.JSX.Element;
450
+ declare const SdInputNativeSelect: (props: NativeSelectProps) => react_jsx_runtime.JSX.Element;
451
+ declare const SdInputMultiSelect: (props: MultiSelectProps<string>) => react_jsx_runtime.JSX.Element;
452
+ declare const SdInputAutocomplete: (props: AutocompleteProps) => react_jsx_runtime.JSX.Element;
453
+ declare const SdInputTags: (props: TagsInputProps) => react_jsx_runtime.JSX.Element;
454
+ declare const SdInputRadioGroup: typeof SdInputRadio;
455
+ declare const SdInputSegmented: ({ label, description, error, required, withAsterisk, ...rest }: Omit<SegmentedControlProps<string>, "label" | "error" | "description" | "required" | "withAsterisk"> & WrapperFields) => react_jsx_runtime.JSX.Element;
456
+ declare const SdInputCheckbox: (props: CheckboxProps) => react_jsx_runtime.JSX.Element;
457
+ declare const SdInputSwitch: (props: SwitchProps) => react_jsx_runtime.JSX.Element;
458
+ declare const SdInputFile: (props: FileInputProps<false>) => react_jsx_runtime.JSX.Element;
459
+ declare const SdInputColor: (props: ColorInputProps) => react_jsx_runtime.JSX.Element;
460
+ declare const SdInputDate: (props: DateInputProps) => react_jsx_runtime.JSX.Element;
461
+ declare const SdInputDateRange: (props: DatePickerInputProps<"range">) => react_jsx_runtime.JSX.Element;
462
+ declare const SdInputTime: (props: TimeInputProps) => react_jsx_runtime.JSX.Element;
392
463
 
393
464
  declare function SkeletonText({ width, ...props }: SkeletonProps): react_jsx_runtime.JSX.Element;
394
465
  declare function SkeletonTitle({ width, ...props }: SkeletonProps): react_jsx_runtime.JSX.Element;
@@ -434,6 +505,77 @@ declare const SdLinkBody: ({ children, onMouseEnter, onMouseLeave, ...props }: P
434
505
  declare const SdLinkSub: ({ children, onMouseEnter, onMouseLeave, ...props }: Props) => react_jsx_runtime.JSX.Element;
435
506
  declare const SdLinkHint: ({ children, onMouseEnter, onMouseLeave, ...props }: Props) => react_jsx_runtime.JSX.Element;
436
507
 
508
+ /**
509
+ * 변형별 색·아이콘·기본 제목. 토스트의 유일한 출처다.
510
+ *
511
+ * `SdToast.Update`가 같은 맵을 읽어 이미 떠 있는 알림을 다른 변형으로 바꾸므로,
512
+ * 톤을 고치려면 여기만 고치면 된다.
513
+ */
514
+ declare const toastStyles: {
515
+ /** 성공 — 저장·전송 완료 */
516
+ Success: {
517
+ color: "green";
518
+ icon: react_jsx_runtime.JSX.Element;
519
+ title: string;
520
+ };
521
+ /** 실패 — 요청 오류·검증 실패 */
522
+ Error: {
523
+ color: "red";
524
+ icon: react_jsx_runtime.JSX.Element;
525
+ title: string;
526
+ };
527
+ /** 주의 — 되돌릴 수 없는 동작 안내 등 */
528
+ Warning: {
529
+ color: "amber";
530
+ icon: react_jsx_runtime.JSX.Element;
531
+ title: string;
532
+ };
533
+ /** 안내 — 중립 정보 */
534
+ Info: {
535
+ color: "primary";
536
+ icon: react_jsx_runtime.JSX.Element;
537
+ title: string;
538
+ };
539
+ /** 진행 중 — 스피너 + 자동 닫힘 없음. Update로 결과 변형으로 바꾼다. */
540
+ Loading: {
541
+ loading: true;
542
+ autoClose: false;
543
+ withCloseButton: false;
544
+ title: string;
545
+ };
546
+ };
547
+ type ToastVariant = keyof typeof toastStyles;
548
+ declare const SdToast: {
549
+ Success: (message: ReactNode, options?: Partial<NotificationData>) => string;
550
+ Error: (message: ReactNode, options?: Partial<NotificationData>) => string;
551
+ Warning: (message: ReactNode, options?: Partial<NotificationData>) => string;
552
+ Info: (message: ReactNode, options?: Partial<NotificationData>) => string;
553
+ Loading: (message: ReactNode, options?: Partial<NotificationData>) => string;
554
+ /**
555
+ * 이미 떠 있는 알림을 다른 변형으로 교체한다 — `Loading` → `Success`/`Error` 전환용.
556
+ * `loading: false`·`autoClose`를 먼저 깔아 두므로 스피너가 그대로 남지 않는다.
557
+ */
558
+ Update: (id: string, variant: ToastVariant, message: ReactNode, options?: Partial<NotificationData>) => string | undefined;
559
+ /** 특정 알림 닫기 */
560
+ Hide: (id: string) => string;
561
+ /** 떠 있는 알림 전부 닫기 */
562
+ Clean: () => void;
563
+ };
564
+ /**
565
+ * 토스트가 실제로 렌더되는 곳. `MantineProvider` 안에 **한 번** 놓는다.
566
+ * 이게 없으면 `SdToast.*` 호출은 조용히 아무 일도 하지 않는다.
567
+ * 소비자 앱에서 `@mantine/notifications/styles.css` 임포트도 필요하다.
568
+ */
569
+ declare function SdToastProvider(props: NotificationsProps): react_jsx_runtime.JSX.Element;
570
+ declare const SdToastSuccess: (message: ReactNode, options?: Partial<NotificationData>) => string;
571
+ declare const SdToastError: (message: ReactNode, options?: Partial<NotificationData>) => string;
572
+ declare const SdToastWarning: (message: ReactNode, options?: Partial<NotificationData>) => string;
573
+ declare const SdToastInfo: (message: ReactNode, options?: Partial<NotificationData>) => string;
574
+ declare const SdToastLoading: (message: ReactNode, options?: Partial<NotificationData>) => string;
575
+ declare const SdToastUpdate: (id: string, variant: ToastVariant, message: ReactNode, options?: Partial<NotificationData>) => string | undefined;
576
+ declare const SdToastHide: (id: string) => string;
577
+ declare const SdToastClean: () => void;
578
+
437
579
  type TitleVariant = 'Display' | 'Section' | 'Card' | 'Sub';
438
580
  type ColorVariant = StyleProp<MantineColor> | undefined;
439
581
  interface TextBoxProps extends Omit<StackProps, 'title' | 'color'> {
@@ -761,6 +903,24 @@ declare const SdMap: {
761
903
  declare const SdMapSingle: typeof Single;
762
904
  declare const SdMapTabs: typeof Tabs;
763
905
 
906
+ interface SdBreadcrumbProps extends BoxProps {
907
+ navItems: NavItem[];
908
+ /** 현재 경로. 생략하면 `usePathname()`으로 자동 추론한다. */
909
+ currentHref?: string;
910
+ /** 홈(첫 크럼) 링크 대상. 기본 `/`. */
911
+ homeHref?: string;
912
+ /** 홈 아이콘의 접근성 라벨. 기본 `홈`. */
913
+ homeLabel?: string;
914
+ }
915
+ /**
916
+ * 네비게이션 계층 기반 브레드크럼 — `홈 아이콘 > a > b > c`.
917
+ *
918
+ * navItems의 `parentId` 트리에서 현재 경로가 놓인 위치를 찾아 루트까지의 경로를 그린다.
919
+ * 조상 크럼은 클릭 가능한 링크(`SdLink.Sub`), 마지막(현재 페이지) 크럼은 href 없는
920
+ * `SdLink.Body`라 링크가 아닌 강조 텍스트(`SdText.Body`)로 폴백해 현재 위치를 나타낸다.
921
+ */
922
+ declare function SdBreadcrumb({ navItems, currentHref, homeHref, homeLabel, ...boxProps }: SdBreadcrumbProps): react_jsx_runtime.JSX.Element;
923
+
764
924
  interface HeroCarouselProps {
765
925
  slides: HeroSlide[];
766
926
  children?: React$1.ReactNode;
@@ -771,7 +931,32 @@ interface HeaderProps {
771
931
  navItems: NavItem[];
772
932
  loginFlag?: boolean;
773
933
  }
774
- declare function SdHeader({ navItems, loginFlag }: HeaderProps): react_jsx_runtime.JSX.Element;
934
+ /**
935
+ * Mega 변형(기본) — 헤더 전체가 아래로 확장되며 하위 링크가 상위 항목 아래 컬럼으로
936
+ * 한꺼번에 노출되는 메가 메뉴.
937
+ */
938
+ declare function MegaHeader({ navItems, loginFlag }: HeaderProps): react_jsx_runtime.JSX.Element;
939
+ /**
940
+ * Simple 변형 — 헤더 바 높이는 고정이고, 자식을 가진 상위 항목마다
941
+ * Mantine `Menu`가 하나씩 붙어 개별 드롭다운으로 열린다.
942
+ * 바가 자라지 않으므로 AppShell.Header 높이를 그대로 쓰는 레이아웃에 적합하다.
943
+ */
944
+ declare function SimpleHeader({ navItems, loginFlag }: HeaderProps): react_jsx_runtime.JSX.Element;
945
+ /**
946
+ * Panel 변형 — Simple처럼 바 높이는 60px로 고정하고 상위 항목마다 Mantine `Menu`가 붙지만,
947
+ * 드롭다운 내부는 Mega와 동일한 그룹 레이아웃으로 편다: 손자가 없는 자식은 단일 링크,
948
+ * 손자가 있는 자식은 그룹 제목(`SdLink.Body`) 아래로 손자를 `SdLink.Sub`로 얹는다.
949
+ * Simple의 개별 드롭다운 안정성 + Mega의 풍부한 그룹 구성이 함께 필요할 때 쓴다.
950
+ */
951
+ declare function PanelHeader({ navItems, loginFlag }: HeaderProps): react_jsx_runtime.JSX.Element;
952
+ declare const SdHeader: typeof MegaHeader & {
953
+ Mega: typeof MegaHeader;
954
+ Simple: typeof SimpleHeader;
955
+ Panel: typeof PanelHeader;
956
+ };
957
+ declare const SdHeaderMega: typeof MegaHeader;
958
+ declare const SdHeaderSimple: typeof SimpleHeader;
959
+ declare const SdHeaderPanel: typeof PanelHeader;
775
960
 
776
961
  interface SdFooterProps {
777
962
  company: CompanyInfo;
@@ -830,14 +1015,109 @@ declare const SdErrorView: {
830
1015
  declare const SdErrorViewPage: typeof Page;
831
1016
  declare const SdErrorViewNotFound: typeof NotFound;
832
1017
 
833
- declare function MainLayout({ children, navItems, companyInfo, loginFlag, }: {
1018
+ /** 소셜 로그인 제공자 아이콘·기본 라벨이 고정된 목록. */
1019
+ type LoginProvider = 'google' | 'kakao' | 'naver' | 'apple' | 'github';
1020
+ interface LoginSocial {
1021
+ provider: LoginProvider;
1022
+ /** 버튼 라벨. 생략하면 제공자 기본 라벨("구글로 로그인" 등)을 쓴다. */
1023
+ label?: ReactNode;
1024
+ /** OAuth 시작 핸들러. 리다이렉트가 필요하면 여기서 이동시킨다. */
1025
+ onClick?: () => void;
1026
+ }
1027
+ /** 폼 제출 값. 비제어 폼이라 소비자는 이 값만 받아 인증 로직을 붙이면 된다. */
1028
+ interface LoginValues {
1029
+ email: string;
1030
+ password: string;
1031
+ remember: boolean;
1032
+ }
1033
+ interface SdLoginViewProps {
1034
+ title?: ReactNode;
1035
+ description?: ReactNode;
1036
+ /** 제출 시 폼 값 전달. 소비자가 인증 호출을 담당한다. */
1037
+ onSubmit?: (values: LoginValues) => void;
1038
+ /** 제출 버튼 로딩 상태 */
1039
+ loading?: boolean;
1040
+ /** 인증 실패 메시지 — 폼 상단에 SdText.Error로 노출 */
1041
+ error?: ReactNode;
1042
+ submitLabel?: ReactNode;
1043
+ /** 자동 로그인 체크박스 노출 여부 */
1044
+ withRemember?: boolean;
1045
+ /** 비밀번호 찾기 링크. 없으면 렌더하지 않는다. */
1046
+ findPasswordHref?: string;
1047
+ /** 회원가입 링크. 없으면 하단 안내가 사라진다. */
1048
+ signUpHref?: string;
1049
+ /** 소셜 로그인 버튼. 비어 있으면 구분선까지 함께 사라진다. */
1050
+ socials?: LoginSocial[];
1051
+ /** 폼 아래 추가 슬롯 — 약관 안내·사업자 정보 등 */
1052
+ children?: ReactNode;
1053
+ /** 화면 최소 높이. 카탈로그처럼 좁은 프레임에 담을 때 줄인다. */
1054
+ mih?: string | number;
1055
+ }
1056
+ declare function Card({ title, description, mih, ...formProps }: SdLoginViewProps): react_jsx_runtime.JSX.Element;
1057
+ interface SdLoginSplitProps extends SdLoginViewProps {
1058
+ brandTitle?: ReactNode;
1059
+ brandDescription?: ReactNode;
1060
+ }
1061
+ declare function Split({ title, description, brandTitle, brandDescription, mih, ...formProps }: SdLoginSplitProps): react_jsx_runtime.JSX.Element;
1062
+ declare const SdLoginView: {
1063
+ /** 중앙 정렬 카드 — 기본 로그인 화면 */
1064
+ Card: typeof Card;
1065
+ /** 좌측 브랜드 패널 + 우측 폼 — 넓은 화면용 */
1066
+ Split: typeof Split;
1067
+ };
1068
+ declare const SdLoginViewCard: typeof Card;
1069
+ declare const SdLoginViewSplit: typeof Split;
1070
+
1071
+ /** 결과 화면의 액션 버튼. SdButton은 component prop을 받지 못해 href가 아닌 onClick만 받는다. */
1072
+ interface ResultAction {
1073
+ label: ReactNode;
1074
+ onClick: () => void;
1075
+ }
1076
+ interface SdResultProps {
1077
+ title?: ReactNode;
1078
+ description?: ReactNode;
1079
+ /** 주 액션 — filled primary */
1080
+ primaryAction?: ResultAction;
1081
+ /** 보조 액션 — ghost */
1082
+ secondaryAction?: ResultAction;
1083
+ /** 제목·설명과 버튼 사이 상세 슬롯 (주문번호 요약 등) */
1084
+ children?: ReactNode;
1085
+ /** 화면 최소 높이. 좁은 프레임에 담을 때 줄인다. SdErrorView와 같은 기본값. */
1086
+ mih?: string | number;
1087
+ }
1088
+ declare const SdResult: {
1089
+ /** 성공 — 가입 완료·결제 완료 등 */
1090
+ Success: ({ title, description, primaryAction, secondaryAction, children, mih, }: SdResultProps) => react_jsx_runtime.JSX.Element;
1091
+ /** 실패 — 결제 실패·처리 중 오류 등. 서버 오류·404는 SdErrorView를 쓴다. */
1092
+ Error: ({ title, description, primaryAction, secondaryAction, children, mih, }: SdResultProps) => react_jsx_runtime.JSX.Element;
1093
+ };
1094
+ declare const SdResultSuccess: ({ title, description, primaryAction, secondaryAction, children, mih, }: SdResultProps) => react_jsx_runtime.JSX.Element;
1095
+ declare const SdResultError: ({ title, description, primaryAction, secondaryAction, children, mih, }: SdResultProps) => react_jsx_runtime.JSX.Element;
1096
+
1097
+ /** 헤더 변형 선택자 — SdHeader의 네임스페이스 키와 1:1로 대응한다. */
1098
+ type HeaderVariant = 'mega' | 'simple' | 'panel';
1099
+ declare function MainLayout({ children, navItems, companyInfo, loginFlag, headerVariant, }: {
834
1100
  children: React.ReactNode;
835
1101
  navItems: NavItem[];
836
1102
  companyInfo: CompanyInfo;
837
1103
  loginFlag?: boolean;
1104
+ /** 기본 `mega` — hover 시 헤더가 확장되는 메가 메뉴. `simple`은 바 높이 고정 + 개별 드롭다운. `panel`은 바 높이 고정 + 드롭다운 내부를 Mega식 그룹 컬럼으로. */
1105
+ headerVariant?: HeaderVariant;
838
1106
  }): react_jsx_runtime.JSX.Element;
839
1107
 
840
- interface PageHeroBaseProps {
1108
+ /**
1109
+ * 모든 변형이 공유하는 브레드크럼 설정.
1110
+ * `navItems`가 있고 `breadcrumb`이 false가 아니면 본문 최상단에 브레드크럼을 그린다.
1111
+ */
1112
+ interface BreadcrumbProps {
1113
+ /** 브레드크럼용 네비 트리. 없으면 브레드크럼을 렌더하지 않는다. */
1114
+ navItems?: NavItem[];
1115
+ /** 브레드크럼 표시 여부. 기본 `true` — `navItems`가 있을 때만 실제로 그려진다. `false`로 끈다. */
1116
+ breadcrumb?: boolean;
1117
+ /** 현재 경로 강제 지정. 생략 시 `SdBreadcrumb`가 `usePathname()`으로 추론한다. */
1118
+ currentHref?: string;
1119
+ }
1120
+ interface PageHeroBaseProps extends BreadcrumbProps {
841
1121
  label?: ReactNode;
842
1122
  title: ReactNode;
843
1123
  description?: ReactNode;
@@ -846,22 +1126,26 @@ interface PageHeroBaseProps {
846
1126
  interface WithImageProps extends PageHeroBaseProps {
847
1127
  image?: string;
848
1128
  }
849
- declare function Minimal({ label, title, description, children }: PageHeroBaseProps): react_jsx_runtime.JSX.Element;
850
- declare function Plain({ children }: {
1129
+ declare function Minimal({ label, title, description, children, navItems, breadcrumb, currentHref, }: PageHeroBaseProps): react_jsx_runtime.JSX.Element;
1130
+ declare function Plain({ children, navItems, breadcrumb, currentHref, }: BreadcrumbProps & {
851
1131
  children: ReactNode;
852
1132
  }): react_jsx_runtime.JSX.Element;
853
- declare function Image({ image, label, title, description, children }: WithImageProps): react_jsx_runtime.JSX.Element;
854
- declare function Brand({ label, title, description, children }: PageHeroBaseProps): react_jsx_runtime.JSX.Element;
1133
+ declare function Image({ image, label, title, description, children, navItems, breadcrumb, currentHref, }: WithImageProps): react_jsx_runtime.JSX.Element;
1134
+ declare function Brand({ label, title, description, children, navItems, breadcrumb, currentHref, }: PageHeroBaseProps): react_jsx_runtime.JSX.Element;
855
1135
  declare const PageLayout: {
856
- /** 이미지 배경 + 대각선 그라디언트 + 좌하단 텍스트 */
1136
+ /** 사진 배경 + 하단 스크림 + 좌측 정렬 텍스트 */
857
1137
  Image: typeof Image;
858
1138
  /** SdTextBox.Section 타이틀 + Plain 컨테이너 */
859
1139
  Minimal: typeof Minimal;
860
- /** primary 그라디언트 배경 + 중앙 텍스트 */
1140
+ /** slate 바탕 + primary 라이트 + 도트 텍스처 */
861
1141
  Brand: typeof Brand;
862
1142
  /** 히어로 없이 SdContainer + py="xl" 만 */
863
1143
  Plain: typeof Plain;
864
1144
  };
1145
+ declare const PageLayoutImage: typeof Image;
1146
+ declare const PageLayoutMinimal: typeof Minimal;
1147
+ declare const PageLayoutBrand: typeof Brand;
1148
+ declare const PageLayoutPlain: typeof Plain;
865
1149
 
866
1150
  declare const theme: {
867
1151
  focusRing?: "auto" | "always" | "never" | undefined;
@@ -1011,4 +1295,4 @@ declare const theme: {
1011
1295
  } | undefined;
1012
1296
  };
1013
1297
 
1014
- export { HeroCarousel, Logo, MainLayout, type NavItem, PageLayout, SdBadge, SdBadgeDefault, SdBadgePrimary, SdBadgeSuccess, SdBadgeWarning, SdButton, SdButtonCancel, SdButtonDelete, SdButtonDownload, SdButtonExcel, SdButtonGhost, SdButtonOutline, SdButtonPrimary, SdButtonSecondary, SdButtonSubmit, SdButtonWhite, SdClients, SdClientsGrid, SdClientsMarquee, SdContainer, SdCta, SdCtaBanner, SdCtaInline, SdCtaSubtle, SdErrorView, SdErrorViewNotFound, SdErrorViewPage, SdFaq, SdFaqDefault, SdFaqFilled, SdFaqWithHeader, SdFeatureSection, SdFeatures, SdFooter, SdHeader, SdInput, SdInputEmail, SdInputPassword, SdInputSelect, SdInputText, SdInputTextarea, SdLink, SdLinkBody, SdLinkHint, SdLinkStrong, SdLinkSub, SdMap, SdMapSingle, SdMapTabs, SdModal, SdNumberIcon, SdPricingCard, SdPricingCardDefault, SdPricingCardFeatured, SdPricingCardGrid, SdQuote, SdQuoteCard, SdQuotePlain, SdSkeleton, SdSkeletonAvatar, SdSkeletonCard, SdSkeletonImage, SdSkeletonText, SdSkeletonTitle, SdSolution, SdSolutionCard, SdSolutionCardGrid, SdSolutionCardItem, SdSolutionFiltered, SdSolutionList, SdSteps, SdStepsBubble, SdStepsCard, SdStepsSection, SdStepsStrip, SdTable, SdTableSpec, SdTabs, SdTabsOutline, SdTabsPills, SdTabsUnderline, SdTestimonial, SdTestimonialCard, SdTestimonialGrid, SdTestimonialStrip, SdText, SdTextBody, SdTextBox, SdTextBoxCard, SdTextBoxHero, SdTextBoxSection, SdTextBoxSub, SdTextError, SdTextEyebrow, SdTextHint, SdTextNumeric, SdTextStrong, SdTextSub, SdTimeline, SdTimelineSection, SdTitle, SdTitleCard, SdTitleDisplay, SdTitleSection, SdTitleSub, theme };
1298
+ export { type HeaderVariant, HeroCarousel, Logo, MainLayout, type NavItem, PageLayout, PageLayoutBrand, PageLayoutImage, PageLayoutMinimal, PageLayoutPlain, SdBadge, SdBadgeDefault, SdBadgePrimary, SdBadgeSuccess, SdBadgeWarning, SdBreadcrumb, SdButton, SdButtonCancel, SdButtonDelete, SdButtonDownload, SdButtonExcel, SdButtonGhost, SdButtonOutline, SdButtonPrimary, SdButtonSecondary, SdButtonSubmit, SdButtonWhite, SdClients, SdClientsGrid, SdClientsMarquee, SdContainer, SdCta, SdCtaBanner, SdCtaInline, SdCtaSubtle, SdErrorView, SdErrorViewNotFound, SdErrorViewPage, SdFaq, SdFaqDefault, SdFaqFilled, SdFaqWithHeader, SdFeatureSection, SdFeatures, SdFooter, SdHeader, SdHeaderMega, SdHeaderPanel, SdHeaderSimple, SdInput, SdInputAutocomplete, SdInputCheckbox, SdInputColor, SdInputDate, SdInputDateRange, SdInputEmail, SdInputFile, SdInputJson, SdInputMultiSelect, SdInputNativeSelect, SdInputNumber, SdInputPassword, SdInputPinCode, SdInputRadioGroup, SdInputRating, SdInputSegmented, SdInputSelect, SdInputSlider, SdInputSwitch, SdInputTags, SdInputText, SdInputTextarea, SdInputTime, SdLink, SdLinkBody, SdLinkHint, SdLinkStrong, SdLinkSub, SdLoginView, SdLoginViewCard, SdLoginViewSplit, SdMap, SdMapSingle, SdMapTabs, SdModal, SdNumberIcon, SdPricingCard, SdPricingCardDefault, SdPricingCardFeatured, SdPricingCardGrid, SdQuote, SdQuoteCard, SdQuotePlain, SdResult, SdResultError, SdResultSuccess, SdSkeleton, SdSkeletonAvatar, SdSkeletonCard, SdSkeletonImage, SdSkeletonText, SdSkeletonTitle, SdSolution, SdSolutionCard, SdSolutionCardGrid, SdSolutionCardItem, SdSolutionFiltered, SdSolutionList, SdSteps, SdStepsBubble, SdStepsCard, SdStepsSection, SdStepsStrip, SdTable, SdTableSpec, SdTabs, SdTabsOutline, SdTabsPills, SdTabsUnderline, SdTestimonial, SdTestimonialCard, SdTestimonialGrid, SdTestimonialStrip, SdText, SdTextBody, SdTextBox, SdTextBoxCard, SdTextBoxHero, SdTextBoxSection, SdTextBoxSub, SdTextError, SdTextEyebrow, SdTextHint, SdTextNumeric, SdTextStrong, SdTextSub, SdTimeline, SdTimelineSection, SdTitle, SdTitleCard, SdTitleDisplay, SdTitleSection, SdTitleSub, SdToast, SdToastClean, SdToastError, SdToastHide, SdToastInfo, SdToastLoading, SdToastProvider, SdToastSuccess, SdToastUpdate, SdToastWarning, theme };