@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.
- package/README.md +330 -6
- package/dist/store/index.cjs +384 -0
- package/dist/store/index.d.mts +207 -0
- package/dist/store/index.d.ts +207 -0
- package/dist/store/index.mjs +355 -0
- package/dist/ui/index.cjs +1280 -494
- package/dist/ui/index.d.mts +311 -27
- package/dist/ui/index.d.ts +311 -27
- package/dist/ui/index.mjs +1232 -459
- package/dist/util/index.cjs +144 -20
- package/dist/util/index.d.mts +87 -12
- package/dist/util/index.d.ts +87 -12
- package/dist/util/index.mjs +139 -18
- package/package.json +15 -2
package/dist/ui/index.d.ts
CHANGED
|
@@ -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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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: (
|
|
394
|
+
Text: (props: TextInputProps) => react_jsx_runtime.JSX.Element;
|
|
378
395
|
/** 이메일 입력 */
|
|
379
|
-
Email: (
|
|
396
|
+
Email: (props: TextInputProps) => react_jsx_runtime.JSX.Element;
|
|
380
397
|
/** 비밀번호 입력 — 마스킹 토글 포함 */
|
|
381
|
-
Password: (
|
|
398
|
+
Password: (props: PasswordInputProps) => react_jsx_runtime.JSX.Element;
|
|
382
399
|
/** 멀티라인 텍스트 — 문의 메시지 등 */
|
|
383
|
-
Textarea: (
|
|
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: (
|
|
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: (
|
|
388
|
-
declare const SdInputEmail: (
|
|
389
|
-
declare const SdInputPassword: (
|
|
390
|
-
declare const SdInputTextarea: (
|
|
391
|
-
declare const
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 };
|