@stn-uiux/pub-ui-react 0.1.49
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/CHANGELOG.md +387 -0
- package/README.md +75 -0
- package/bin/stn-pub-ui-react.mjs +9 -0
- package/dist/index.d.ts +3524 -0
- package/dist/index.js +8672 -0
- package/dist/index.js.map +1 -0
- package/package.json +38 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,3524 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as react from 'react';
|
|
3
|
+
import react__default, { ReactNode, ButtonHTMLAttributes, InputHTMLAttributes, CSSProperties, ComponentPropsWithoutRef, HTMLAttributes, ThHTMLAttributes, TdHTMLAttributes, FormHTMLAttributes, MouseEvent, SVGAttributes, ElementType } from 'react';
|
|
4
|
+
export { resolveSystemIconSrcFromName, systemIconSrc } from '@stn-uiux/pub-ui/data/stnSystemIcons';
|
|
5
|
+
export { STN_PAGINATION_EXAMPLE, STN_PAGINATION_FIGMA, STN_PAGINATION_INTRO, STN_PAGINATION_REACT } from '@stn-uiux/pub-ui/data/stnPagination';
|
|
6
|
+
import { StnToastKind } from '@stn-uiux/pub-ui/data/stnToast';
|
|
7
|
+
export { STN_TOAST_ICON_SLUG } from '@stn-uiux/pub-ui/data/stnToast';
|
|
8
|
+
import { StnChipGrade, StnChipBorderAccent } from '@stn-uiux/pub-ui/data/stnChip';
|
|
9
|
+
import { StnDropdownOption, StnDropdownSize, StnDropdownVariant, StnDropdownModifier, StnDropdownHelperTextPosition, StnDropdownDirection } from '@stn-uiux/pub-ui/data/stnDropdown';
|
|
10
|
+
export { STN_DROPDOWN_HTML_COUNTS, STN_DROPDOWN_INTRO, STN_DROPDOWN_INVENTORY, STN_DROPDOWN_MENU_INTRO, STN_DROPDOWN_MENU_USAGE, STN_DROPDOWN_SIZE_ROWS, STN_DROPDOWN_USAGE, StnDropdownHelperTextPosition, StnDropdownModifier, StnDropdownOption, StnDropdownSize, StnDropdownVariant } from '@stn-uiux/pub-ui/data/stnDropdown';
|
|
11
|
+
import { StnInputWidthValue } from '@stn-uiux/pub-ui/data/stnInputWidth';
|
|
12
|
+
import { StnTextFieldSize } from '@stn-uiux/pub-ui/data/stnTextField';
|
|
13
|
+
export { STN_TEXT_FIELD_FIGMA, STN_TEXT_FIELD_HTML, STN_TEXT_FIELD_INTRO, STN_TEXT_FIELD_SIZE_ROWS, STN_TEXT_FIELD_STATES, STN_TEXT_FIELD_USAGE, StnTextFieldSize } from '@stn-uiux/pub-ui/data/stnTextField';
|
|
14
|
+
import { StnDateRangeFieldSize } from '@stn-uiux/pub-ui/data/stnDateRangeField';
|
|
15
|
+
export { STN_DATE_RANGE_FIELD_DEMO, STN_DATE_RANGE_FIELD_FIGMA, STN_DATE_RANGE_FIELD_HTML, STN_DATE_RANGE_FIELD_INTRO, STN_DATE_RANGE_FIELD_NAME, STN_DATE_RANGE_FIELD_SIZE_ROWS, STN_DATE_RANGE_FIELD_USAGE, StnDateRangeFieldSize, formatStnDateRangeFieldValue, parseStnDateRangeFieldValue } from '@stn-uiux/pub-ui/data/stnDateRangeField';
|
|
16
|
+
export { STN_SEGMENTED_FIGMA, STN_SEGMENTED_HTML, STN_SEGMENTED_INTRO, STN_SEGMENTED_USAGE } from '@stn-uiux/pub-ui/data/stnSegmented';
|
|
17
|
+
export { STN_LOGIN_ASSETS, STN_LOGIN_FIGMA, STN_LOGIN_HTML, STN_LOGIN_INTRO, STN_LOGIN_USAGE } from '@stn-uiux/pub-ui/data/stnLogin';
|
|
18
|
+
export { STN_SEARCH_REQUIREMENT_DEMO_FIELDS, STN_SEARCH_REQUIREMENT_FIGMA, STN_SEARCH_REQUIREMENT_INTRO, STN_SEARCH_REQUIREMENT_KO_NAME, STN_SEARCH_REQUIREMENT_NAME, STN_SEARCH_REQUIREMENT_SPEC, STN_SEARCH_REQUIREMENT_USAGE } from '@stn-uiux/pub-ui/data/stnSearchRequirement';
|
|
19
|
+
import { StnHeaderVariant, StnHeaderPadding, StnHeaderGap } from '@stn-uiux/pub-ui/data/stnHeader';
|
|
20
|
+
export { STN_HEADER_INTRO, STN_HEADER_PAGE_TITLE_DEMO, STN_HEADER_USAGE, STN_HEADER_VARIANT_ROWS, STN_SYSTEM_CHIP_DEMO, StnHeaderGap, StnHeaderPadding, StnHeaderVariant } from '@stn-uiux/pub-ui/data/stnHeader';
|
|
21
|
+
import { StnLayer0BackgroundPreset, StnLayer0BackgroundKind } from '@stn-uiux/pub-ui/data/stnLayer0Background';
|
|
22
|
+
export { STN_LAYER0_BACKGROUND_DEMO_IMAGES, STN_LAYER0_BACKGROUND_FIGMA, STN_LAYER0_BACKGROUND_INTRO, STN_LAYER0_BACKGROUND_USAGE, STN_LAYER0_BACKGROUND_VARIANT_ROWS, STN_LAYER0_MAP_LIGHT_OVERLAY, StnLayer0BackgroundKind, StnLayer0BackgroundPreset } from '@stn-uiux/pub-ui/data/stnLayer0Background';
|
|
23
|
+
import { StnDateRange } from '@stn-uiux/pub-ui/data/stnDatePicker';
|
|
24
|
+
export { STN_DATE_PICKER_INTRO, STN_DATE_PICKER_KO_NAME, STN_DATE_PICKER_NAME, STN_DATE_PICKER_PANEL_USAGE, STN_DATE_PICKER_PART_ROWS, STN_DATE_PICKER_SPEC, STN_DATE_PICKER_USAGE, STN_DATE_PICKER_WEEKDAYS, StnDateRange } from '@stn-uiux/pub-ui/data/stnDatePicker';
|
|
25
|
+
import { StnWidgetShell, StnWidgetAppearance, StnWidgetBackgroundMode, StnWidgetGradeRowGrade } from '@stn-uiux/pub-ui/data/stnWidget';
|
|
26
|
+
export { STN_ALERT_CENTER_DASHBOARD_USAGE, STN_ALERT_CENTER_DASHBOARD_WIDGETS, STN_WIDGET_FIGMA, STN_WIDGET_FIGMA_DARK, STN_WIDGET_FIGMA_DARK_URL, STN_WIDGET_FIGMA_URL, STN_WIDGET_INTRO, STN_WIDGET_KINDS, STN_WIDGET_SHELL_ROWS, STN_WIDGET_USAGE, StnWidgetAppearance, StnWidgetBackgroundMode, StnWidgetContentFamily, StnWidgetGradeRowGrade, StnWidgetKind, StnWidgetShell, getStnWidgetKind, isStnWidgetKindSlug, resolveStnWidgetBackground, stnWidgetSampleUrl } from '@stn-uiux/pub-ui/data/stnWidget';
|
|
27
|
+
import { StnAlertCenterAlertItem, StnAlertCenterWorkItem, StnAlertCenterTab } from '@stn-uiux/pub-ui/data/stnAlertCenter';
|
|
28
|
+
export { STN_ALERT_CENTER_DEMO_ALERTS, STN_ALERT_CENTER_DEMO_DEPLOY, STN_ALERT_CENTER_DEMO_WORK, STN_ALERT_CENTER_INTRO, STN_ALERT_CENTER_TABS, STN_ALERT_CENTER_TAB_IDS, STN_ALERT_CENTER_USAGE, STN_GNB_ALERT_INTEGRATION_USAGE, StnAlertCenterAlertItem, StnAlertCenterTab, StnAlertCenterWorkItem } from '@stn-uiux/pub-ui/data/stnAlertCenter';
|
|
29
|
+
import { StnBreadcrumbIconId } from '@stn-uiux/pub-ui/data/stnBreadcrumb';
|
|
30
|
+
import { StnLnbSide } from '@stn-uiux/pub-ui/data/stnLayout';
|
|
31
|
+
export { STN_ALERT_CENTER_PAGE_SCAFFOLD_USAGE, STN_LAYER_SHELL_USAGE, STN_LAYOUT_ALERT_CENTER_USAGE, STN_LAYOUT_CONTENT_ROWS, STN_LAYOUT_INTRO, STN_LAYOUT_LAYER_PAGE_TREE, STN_LAYOUT_LIST_VIEW_INTRO, STN_LAYOUT_LIST_VIEW_USAGE, STN_LAYOUT_MAP_DASHBOARD_INTRO, STN_LAYOUT_MAP_DASHBOARD_USAGE, STN_LAYOUT_PLAYGROUND_TABS, STN_LAYOUT_RECIPES, STN_LAYOUT_REGION_ROWS, STN_LAYOUT_SCREEN_RECIPES, STN_LAYOUT_SHELL_USAGE, STN_LAYOUT_SLOT_USAGE, STN_LAYOUT_WHEN_TO_USE, STN_PAGE_SCAFFOLD_COMPOUND_USAGE, STN_PAGE_SCAFFOLD_INTRO, STN_PAGE_SCAFFOLD_KINDS, StnLayoutScreenKind, StnLnbSide, StnPageScaffoldKind, applyLnbSideToModifiers } from '@stn-uiux/pub-ui/data/stnLayout';
|
|
32
|
+
import { StnElevationLevel, StnLayerRole, StnLayerSurface } from '@stn-uiux/pub-ui/data/stnLayer';
|
|
33
|
+
export { STN_ELEVATION_Z_INDEX, STN_LAYER_INTRO, STN_LAYER_ROLE_ROWS, STN_LAYER_ROLE_TO_LEVEL, STN_LAYER_ROLE_USAGE, STN_LAYER_SURFACE_ROWS, StnElevationLevel, StnLayerRole, StnLayerSurface } from '@stn-uiux/pub-ui/data/stnLayer';
|
|
34
|
+
export { STN_LOADING_SKELETON_INTRO, STN_LOADING_SKELETON_PARTS, STN_LOADING_SKELETON_USAGE } from '@stn-uiux/pub-ui/data/stnLoadingSkeleton';
|
|
35
|
+
|
|
36
|
+
/** Join truthy class fragments (no dependency on clsx). */
|
|
37
|
+
declare function cn(...parts: Array<string | false | null | undefined>): string;
|
|
38
|
+
|
|
39
|
+
type StnPaginationItem = number | 'ellipsis';
|
|
40
|
+
/**
|
|
41
|
+
* Infomap Figma `paging` (node 40000042:210340)
|
|
42
|
+
* 시작 근처: 1 2 3 4 5 … N
|
|
43
|
+
* 끝 근처: 1 … N-4 … N
|
|
44
|
+
* 중간: 1 … c-1 c c+1 … N
|
|
45
|
+
*/
|
|
46
|
+
declare function buildPaginationItems(page: number, pageCount: number, siblingCount?: number): StnPaginationItem[];
|
|
47
|
+
|
|
48
|
+
type StnTheme = 'light' | 'dark';
|
|
49
|
+
type StnContextValue = {
|
|
50
|
+
theme: StnTheme;
|
|
51
|
+
setTheme: (theme: StnTheme) => void;
|
|
52
|
+
};
|
|
53
|
+
declare const StnContext: react.Context<StnContextValue | null>;
|
|
54
|
+
declare function useStn(): StnContextValue;
|
|
55
|
+
declare function useStnOptional(): StnContextValue | null;
|
|
56
|
+
|
|
57
|
+
type StnProviderProps = {
|
|
58
|
+
children: ReactNode;
|
|
59
|
+
theme?: StnTheme;
|
|
60
|
+
defaultTheme?: StnTheme;
|
|
61
|
+
onThemeChange?: (theme: StnTheme) => void;
|
|
62
|
+
applyThemeToDocument?: boolean;
|
|
63
|
+
className?: string;
|
|
64
|
+
};
|
|
65
|
+
declare function StnProvider({ children, theme: themeProp, defaultTheme, onThemeChange, applyThemeToDocument, className, }: StnProviderProps): react_jsx_runtime.JSX.Element;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* 디자인 가이드 준수 — 소비자가 `style`로 높이·색 등 모양을 바꾸지 못하게 차단.
|
|
69
|
+
* 모양 변경은 size · variant · width 등 패키지가 정의한 props만 사용.
|
|
70
|
+
*/
|
|
71
|
+
type StnWithoutStyle<T> = Omit<T, 'style'>;
|
|
72
|
+
|
|
73
|
+
/** 표준 2글자 사이즈: xl · lg · md · sm · xs (레거시 L/M/S/large/medium 등 호환) */
|
|
74
|
+
type StnButtonSize = 'xl' | 'lg' | 'md' | 'sm' | 'large' | 'medium' | 'small' | 'XL' | 'L' | 'M' | 'S';
|
|
75
|
+
/** 버튼 variant: contained · outlined · ghost · text */
|
|
76
|
+
type StnButtonVariant = 'contained' | 'outlined' | 'ghost' | 'text';
|
|
77
|
+
/** 색 — 기본 primary. 토큰: --stn-feedback-* */
|
|
78
|
+
type StnButtonColor = 'primary' | 'success' | 'error' | 'warning' | 'info';
|
|
79
|
+
/** 아이콘 위치 — left | right | none */
|
|
80
|
+
type StnButtonIconPosition = 'left' | 'right' | 'none';
|
|
81
|
+
/** 모서리 형태 — pill(기본 캡슐형) · square(사각 버튼: 4px, lg/xl: 6px) */
|
|
82
|
+
type StnButtonShape = 'pill' | 'square';
|
|
83
|
+
type StnButtonProps = StnWithoutStyle<Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'className' | 'color'>> & {
|
|
84
|
+
size?: StnButtonSize;
|
|
85
|
+
variant?: StnButtonVariant;
|
|
86
|
+
color?: StnButtonColor;
|
|
87
|
+
/** 모서리 형태 (기본 pill, 툴바 등 사각 아이콘 버튼에는 'square') */
|
|
88
|
+
shape?: StnButtonShape;
|
|
89
|
+
/** 아이콘 위치 · 기본 none (icon 지정 시 left 기본값) */
|
|
90
|
+
iconPosition?: StnButtonIconPosition;
|
|
91
|
+
/** 커스텀 아이콘 또는 아이콘 이름 ('line/pencil-minus' 또는 ReactNode) */
|
|
92
|
+
icon?: ReactNode;
|
|
93
|
+
/** width 100% — `.stn-btn.full` */
|
|
94
|
+
fullWidth?: boolean;
|
|
95
|
+
className?: string;
|
|
96
|
+
children?: ReactNode;
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Infomap Figma `btn` — `.stn-btn`
|
|
100
|
+
* 레이블을 생략하고 `icon`만 주면 아이콘 버튼 (`.stn-btn.icon`). 이때 `aria-label` 필수.
|
|
101
|
+
*/
|
|
102
|
+
declare const StnButton: react.ForwardRefExoticComponent<StnWithoutStyle<Omit<ButtonHTMLAttributes<HTMLButtonElement>, "className" | "color">> & {
|
|
103
|
+
size?: StnButtonSize;
|
|
104
|
+
variant?: StnButtonVariant;
|
|
105
|
+
color?: StnButtonColor;
|
|
106
|
+
/** 모서리 형태 (기본 pill, 툴바 등 사각 아이콘 버튼에는 'square') */
|
|
107
|
+
shape?: StnButtonShape;
|
|
108
|
+
/** 아이콘 위치 · 기본 none (icon 지정 시 left 기본값) */
|
|
109
|
+
iconPosition?: StnButtonIconPosition;
|
|
110
|
+
/** 커스텀 아이콘 또는 아이콘 이름 ('line/pencil-minus' 또는 ReactNode) */
|
|
111
|
+
icon?: ReactNode;
|
|
112
|
+
/** width 100% — `.stn-btn.full` */
|
|
113
|
+
fullWidth?: boolean;
|
|
114
|
+
className?: string;
|
|
115
|
+
children?: ReactNode;
|
|
116
|
+
} & react.RefAttributes<HTMLButtonElement>>;
|
|
117
|
+
|
|
118
|
+
type StnSliderSize = 'sm' | 'md' | 'lg';
|
|
119
|
+
type StnSliderColor = 'primary' | 'secondary' | 'success' | 'critical' | 'major' | 'minor' | 'warning' | 'error' | 'info' | (string & {});
|
|
120
|
+
type StnSliderGradient = boolean | 'main' | 'primary' | 'secondary' | 'critical' | 'major' | 'minor' | 'warning' | (string & {});
|
|
121
|
+
type StnSliderLabelPosition = 'top' | 'bottom' | 'left' | 'right';
|
|
122
|
+
type StnSliderLabelAlign = 'left' | 'center' | 'right';
|
|
123
|
+
type StnSliderProps = StnWithoutStyle<Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'className' | 'value' | 'defaultValue' | 'onChange' | 'size'>> & {
|
|
124
|
+
value?: number;
|
|
125
|
+
defaultValue?: number;
|
|
126
|
+
min?: number;
|
|
127
|
+
max?: number;
|
|
128
|
+
step?: number;
|
|
129
|
+
/** 슬라이더 상단/주변 레이블 */
|
|
130
|
+
label?: ReactNode;
|
|
131
|
+
/** 크기 ('sm', 'md' 기본, 'lg') @default 'md' */
|
|
132
|
+
size?: StnSliderSize;
|
|
133
|
+
/** 활성 채움 색상 @default 'primary' */
|
|
134
|
+
color?: StnSliderColor;
|
|
135
|
+
/** 활성화 트랙 그라데이션 ('blue', 'teal', 'purple', 'sunset', 'emerald' 또는 커스텀 linear-gradient) */
|
|
136
|
+
gradient?: StnSliderGradient;
|
|
137
|
+
/** 레이블 위치 ('top' 기본, 'bottom', 'left', 'right') @default 'top' */
|
|
138
|
+
labelPosition?: StnSliderLabelPosition;
|
|
139
|
+
/** 레이블 정렬 ('left' 기본, 'center', 'right') @default 'left' */
|
|
140
|
+
labelAlign?: StnSliderLabelAlign;
|
|
141
|
+
/** 값 말풍선 표시 (hover/focus에서도 CSS로 노출) */
|
|
142
|
+
showValue?: boolean;
|
|
143
|
+
/** 말풍선에 항상 표시 */
|
|
144
|
+
alwaysShowValue?: boolean;
|
|
145
|
+
/** 말풍선 포맷 */
|
|
146
|
+
formatValue?: (value: number) => ReactNode;
|
|
147
|
+
/** 필수 조절 여부 (레이블 옆에 붉은색 * 표시) */
|
|
148
|
+
required?: boolean;
|
|
149
|
+
onChange?: (value: number) => void;
|
|
150
|
+
className?: string;
|
|
151
|
+
};
|
|
152
|
+
/**
|
|
153
|
+
* Slider — continuous range. 모양: `stn-slider.css` (`.stn-slider`)
|
|
154
|
+
*/
|
|
155
|
+
declare const StnSlider: react.ForwardRefExoticComponent<StnWithoutStyle<Omit<InputHTMLAttributes<HTMLInputElement>, "className" | "value" | "size" | "type" | "defaultValue" | "onChange">> & {
|
|
156
|
+
value?: number;
|
|
157
|
+
defaultValue?: number;
|
|
158
|
+
min?: number;
|
|
159
|
+
max?: number;
|
|
160
|
+
step?: number;
|
|
161
|
+
/** 슬라이더 상단/주변 레이블 */
|
|
162
|
+
label?: ReactNode;
|
|
163
|
+
/** 크기 ('sm', 'md' 기본, 'lg') @default 'md' */
|
|
164
|
+
size?: StnSliderSize;
|
|
165
|
+
/** 활성 채움 색상 @default 'primary' */
|
|
166
|
+
color?: StnSliderColor;
|
|
167
|
+
/** 활성화 트랙 그라데이션 ('blue', 'teal', 'purple', 'sunset', 'emerald' 또는 커스텀 linear-gradient) */
|
|
168
|
+
gradient?: StnSliderGradient;
|
|
169
|
+
/** 레이블 위치 ('top' 기본, 'bottom', 'left', 'right') @default 'top' */
|
|
170
|
+
labelPosition?: StnSliderLabelPosition;
|
|
171
|
+
/** 레이블 정렬 ('left' 기본, 'center', 'right') @default 'left' */
|
|
172
|
+
labelAlign?: StnSliderLabelAlign;
|
|
173
|
+
/** 값 말풍선 표시 (hover/focus에서도 CSS로 노출) */
|
|
174
|
+
showValue?: boolean;
|
|
175
|
+
/** 말풍선에 항상 표시 */
|
|
176
|
+
alwaysShowValue?: boolean;
|
|
177
|
+
/** 말풍선 포맷 */
|
|
178
|
+
formatValue?: (value: number) => ReactNode;
|
|
179
|
+
/** 필수 조절 여부 (레이블 옆에 붉은색 * 표시) */
|
|
180
|
+
required?: boolean;
|
|
181
|
+
onChange?: (value: number) => void;
|
|
182
|
+
className?: string;
|
|
183
|
+
} & react.RefAttributes<HTMLInputElement>>;
|
|
184
|
+
|
|
185
|
+
type StnIconProps = {
|
|
186
|
+
/** Iconography slug (`line/home`) */
|
|
187
|
+
name?: string;
|
|
188
|
+
/** 정적 URL · `name`과 동시면 src 우선 */
|
|
189
|
+
src?: string;
|
|
190
|
+
/** 모노 아이콘 색 · primitive 변수 (`var(--stn-blue-400)`) 또는 CSS 색상 */
|
|
191
|
+
color?: string;
|
|
192
|
+
/** px */
|
|
193
|
+
size?: number;
|
|
194
|
+
className?: string;
|
|
195
|
+
style?: CSSProperties;
|
|
196
|
+
};
|
|
197
|
+
/**
|
|
198
|
+
* 아이콘 그림 — Button leading 등에서 사용
|
|
199
|
+
* color 전달 시 CSS Mask를 통해 Primitive 색상으로 실시간 틴트 적용
|
|
200
|
+
*/
|
|
201
|
+
declare function StnIcon({ name, src, color, size, className, style }: StnIconProps): react_jsx_runtime.JSX.Element | null;
|
|
202
|
+
|
|
203
|
+
type StnIconBoxSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
204
|
+
type StnIconBoxColor = 'primary' | 'secondary' | 'critical' | 'major' | 'minor' | 'warning' | 'success' | 'error' | 'info' | (string & {});
|
|
205
|
+
type StnIconBoxProps = {
|
|
206
|
+
/** Iconography slug (`line/user`) 또는 직접 전달하는 ReactNode */
|
|
207
|
+
icon?: ReactNode;
|
|
208
|
+
/** 박스 크기 ('xs' | 'sm' | 'md' | 'lg' | 'xl', 기본값: 'md') */
|
|
209
|
+
size?: StnIconBoxSize;
|
|
210
|
+
/** 시맨틱 색상 ('primary' | 'secondary' | 'critical' | 'major' | 'minor' | 'warning' 등) 또는 커스텀 CSS 색상 */
|
|
211
|
+
color?: StnIconBoxColor;
|
|
212
|
+
/** 아이콘 자체의 px 크기 (지정하지 않으면 size에 따라 12 / 14 / 16 / 20 / 24로 자동 결정) */
|
|
213
|
+
iconSize?: number;
|
|
214
|
+
/** 활성(Active) 상태 여부 */
|
|
215
|
+
active?: boolean;
|
|
216
|
+
className?: string;
|
|
217
|
+
style?: CSSProperties;
|
|
218
|
+
children?: ReactNode;
|
|
219
|
+
};
|
|
220
|
+
/**
|
|
221
|
+
* StnIconBox — Design System 표준 입체 아이콘 박스 컴포넌트
|
|
222
|
+
* Neumorphism inset + drop shadow 효과와 그라데이션 배경을 가집니다.
|
|
223
|
+
* 크기 variant: xs (20px) | sm (24px) | md (28px - default) | lg (36px) | xl (44px)
|
|
224
|
+
*/
|
|
225
|
+
declare function StnIconBox({ icon, size, color, iconSize, active, className, style, children, }: StnIconBoxProps): react_jsx_runtime.JSX.Element;
|
|
226
|
+
|
|
227
|
+
type StnPaginationProps = StnWithoutStyle<Omit<ComponentPropsWithoutRef<'nav'>, 'className' | 'children'>> & {
|
|
228
|
+
/** 1-based current page */
|
|
229
|
+
page: number;
|
|
230
|
+
/** Total page count */
|
|
231
|
+
count: number;
|
|
232
|
+
onPageChange?: (page: number) => void;
|
|
233
|
+
/** Pages shown on each side of current when ellipsis appear (Infomap middle) */
|
|
234
|
+
siblingCount?: number;
|
|
235
|
+
className?: string;
|
|
236
|
+
};
|
|
237
|
+
/**
|
|
238
|
+
* Infomap Figma `paging` — 모양: `stn-pagination.css`
|
|
239
|
+
*/
|
|
240
|
+
declare const StnPagination: react.ForwardRefExoticComponent<StnWithoutStyle<Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLElement>, HTMLElement>, "ref">, "children" | "className">> & {
|
|
241
|
+
/** 1-based current page */
|
|
242
|
+
page: number;
|
|
243
|
+
/** Total page count */
|
|
244
|
+
count: number;
|
|
245
|
+
onPageChange?: (page: number) => void;
|
|
246
|
+
/** Pages shown on each side of current when ellipsis appear (Infomap middle) */
|
|
247
|
+
siblingCount?: number;
|
|
248
|
+
className?: string;
|
|
249
|
+
} & react.RefAttributes<HTMLElement>>;
|
|
250
|
+
|
|
251
|
+
/** Matches `STN_POPUP_SIZES` in `@stn-uiux/pub-ui/data/stnPopup` */
|
|
252
|
+
type StnPopupSize = 'xs' | 's' | 'sm' | 'm' | 'md' | 'l' | 'lg' | 'xl' | 'xxl' | '2xl' | 'full';
|
|
253
|
+
type StnPopupProps = Omit<HTMLAttributes<HTMLDivElement>, 'className' | 'children' | 'title'> & {
|
|
254
|
+
open: boolean;
|
|
255
|
+
onClose: () => void;
|
|
256
|
+
title: ReactNode;
|
|
257
|
+
size?: StnPopupSize;
|
|
258
|
+
children: ReactNode;
|
|
259
|
+
/** Footer actions — maps to `.stn-pop__actions` */
|
|
260
|
+
actions?: ReactNode;
|
|
261
|
+
className?: string;
|
|
262
|
+
/** dim + modal portal (default true) — `StnLayer.Dim` / `StnLayer.Modal` 스택 */
|
|
263
|
+
portal?: boolean;
|
|
264
|
+
/** close when dim is clicked (default true) */
|
|
265
|
+
closeOnScrimClick?: boolean;
|
|
266
|
+
/** Dim(스크림) 배경 여부 (기본 true). false 시 어두운 배경 딤 없이 모달만 노출 */
|
|
267
|
+
dim?: boolean;
|
|
268
|
+
};
|
|
269
|
+
declare const StnPopup: react.ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLDivElement>, "children" | "className" | "title"> & {
|
|
270
|
+
open: boolean;
|
|
271
|
+
onClose: () => void;
|
|
272
|
+
title: ReactNode;
|
|
273
|
+
size?: StnPopupSize;
|
|
274
|
+
children: ReactNode;
|
|
275
|
+
/** Footer actions — maps to `.stn-pop__actions` */
|
|
276
|
+
actions?: ReactNode;
|
|
277
|
+
className?: string;
|
|
278
|
+
/** dim + modal portal (default true) — `StnLayer.Dim` / `StnLayer.Modal` 스택 */
|
|
279
|
+
portal?: boolean;
|
|
280
|
+
/** close when dim is clicked (default true) */
|
|
281
|
+
closeOnScrimClick?: boolean;
|
|
282
|
+
/** Dim(스크림) 배경 여부 (기본 true). false 시 어두운 배경 딤 없이 모달만 노출 */
|
|
283
|
+
dim?: boolean;
|
|
284
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
285
|
+
|
|
286
|
+
type StnToastCloseButtonProps = {
|
|
287
|
+
onClose?: () => void;
|
|
288
|
+
closeToast?: (dismissAll?: boolean) => void;
|
|
289
|
+
ariaLabel?: string;
|
|
290
|
+
className?: string;
|
|
291
|
+
};
|
|
292
|
+
/**
|
|
293
|
+
* Toast 닫기 — `StnButton` icon-only (`line/x` · tertiary ghost)
|
|
294
|
+
* 클래스: `.stn-toast-close`
|
|
295
|
+
*/
|
|
296
|
+
declare function StnToastCloseButton({ onClose, closeToast, ariaLabel, className, }: StnToastCloseButtonProps): react_jsx_runtime.JSX.Element;
|
|
297
|
+
|
|
298
|
+
type StnToastIconProps = {
|
|
299
|
+
type?: string;
|
|
300
|
+
kind?: StnToastKind;
|
|
301
|
+
theme?: string;
|
|
302
|
+
isLoading?: boolean;
|
|
303
|
+
size?: number;
|
|
304
|
+
className?: string;
|
|
305
|
+
};
|
|
306
|
+
/**
|
|
307
|
+
* Toast 유형 아이콘 — StnIcon 기반 (currentColor 연동)
|
|
308
|
+
*/
|
|
309
|
+
declare function StnToastIcon({ type, kind: kindProp, isLoading, size, className, }: StnToastIconProps): react_jsx_runtime.JSX.Element | null;
|
|
310
|
+
|
|
311
|
+
type StnProgressBarTone = 'primary' | 'secondary' | 'success' | 'critical' | 'major' | 'minor' | 'warning' | 'neutral' | 'info' | 'warn' | 'error' | (string & {});
|
|
312
|
+
type StnProgressBarGradient = 'none' | 'main' | 'primary' | 'secondary' | 'critical' | 'major' | 'minor' | 'warning';
|
|
313
|
+
type StnProgressBarSize = 'sm' | 'md' | 'lg';
|
|
314
|
+
type StnProgressBarTrack = 'default' | 'muted' | 'dark';
|
|
315
|
+
type StnProgressBarLabelPosition = 'top' | 'bottom' | 'inside' | 'side';
|
|
316
|
+
type StnProgressBarLabelAlign = 'between' | 'center' | 'start' | 'end';
|
|
317
|
+
type StnProgressBarProps = StnWithoutStyle<Omit<HTMLAttributes<HTMLDivElement>, 'children'>> & {
|
|
318
|
+
/** 정적 진행률 0–100 (countdown이 없을 때) */
|
|
319
|
+
value?: number;
|
|
320
|
+
/** 기본 100 */
|
|
321
|
+
max?: number;
|
|
322
|
+
tone?: StnProgressBarTone;
|
|
323
|
+
gradient?: StnProgressBarGradient;
|
|
324
|
+
size?: StnProgressBarSize;
|
|
325
|
+
/** 배경 트랙 색상 지정 (default: 회색 트랙, muted: 투명 트랙, dark: 짙은 회색) */
|
|
326
|
+
track?: StnProgressBarTrack;
|
|
327
|
+
/** 진행률 텍스트 표시 여부 */
|
|
328
|
+
showLabel?: boolean;
|
|
329
|
+
/** 텍스트 라벨 (미지정 시 `${Math.round(pct)}%`) */
|
|
330
|
+
label?: ReactNode;
|
|
331
|
+
/** 좌측 타이틀 텍스트 (기본 '진행률', null 지정 시 타이틀 생략) */
|
|
332
|
+
labelTitle?: ReactNode;
|
|
333
|
+
/** 레이블 위치 ('top' | 'bottom' | 'inside' | 'side') - 기본 'top' */
|
|
334
|
+
labelPosition?: StnProgressBarLabelPosition;
|
|
335
|
+
/** 레이블 정렬 방식 ('between' | 'center' | 'start' | 'end') - 기본 'between' */
|
|
336
|
+
labelAlign?: StnProgressBarLabelAlign;
|
|
337
|
+
/**
|
|
338
|
+
* ms — 설정 시 100%→0 countdown 애니메이션
|
|
339
|
+
* Toast autoClose와 맞춤 · `onComplete`에서 닫기
|
|
340
|
+
*/
|
|
341
|
+
duration?: number;
|
|
342
|
+
/** countdown pause (toastify isPaused) */
|
|
343
|
+
paused?: boolean;
|
|
344
|
+
onComplete?: () => void;
|
|
345
|
+
/** Toast 하단 슬롯 (`.stn-progress-bar.toast`) */
|
|
346
|
+
toastSlot?: boolean;
|
|
347
|
+
};
|
|
348
|
+
/**
|
|
349
|
+
* Progress Bar — `.stn-progress-bar`
|
|
350
|
+
* Modifiers: `.sm` · `.md` · `.lg` · `.info` · `.success` · `.warn` · `.error` · `.track-muted` · `.track-dark`
|
|
351
|
+
*/
|
|
352
|
+
declare const StnProgressBar: react.ForwardRefExoticComponent<StnWithoutStyle<Omit<HTMLAttributes<HTMLDivElement>, "children">> & {
|
|
353
|
+
/** 정적 진행률 0–100 (countdown이 없을 때) */
|
|
354
|
+
value?: number;
|
|
355
|
+
/** 기본 100 */
|
|
356
|
+
max?: number;
|
|
357
|
+
tone?: StnProgressBarTone;
|
|
358
|
+
gradient?: StnProgressBarGradient;
|
|
359
|
+
size?: StnProgressBarSize;
|
|
360
|
+
/** 배경 트랙 색상 지정 (default: 회색 트랙, muted: 투명 트랙, dark: 짙은 회색) */
|
|
361
|
+
track?: StnProgressBarTrack;
|
|
362
|
+
/** 진행률 텍스트 표시 여부 */
|
|
363
|
+
showLabel?: boolean;
|
|
364
|
+
/** 텍스트 라벨 (미지정 시 `${Math.round(pct)}%`) */
|
|
365
|
+
label?: ReactNode;
|
|
366
|
+
/** 좌측 타이틀 텍스트 (기본 '진행률', null 지정 시 타이틀 생략) */
|
|
367
|
+
labelTitle?: ReactNode;
|
|
368
|
+
/** 레이블 위치 ('top' | 'bottom' | 'inside' | 'side') - 기본 'top' */
|
|
369
|
+
labelPosition?: StnProgressBarLabelPosition;
|
|
370
|
+
/** 레이블 정렬 방식 ('between' | 'center' | 'start' | 'end') - 기본 'between' */
|
|
371
|
+
labelAlign?: StnProgressBarLabelAlign;
|
|
372
|
+
/**
|
|
373
|
+
* ms — 설정 시 100%→0 countdown 애니메이션
|
|
374
|
+
* Toast autoClose와 맞춤 · `onComplete`에서 닫기
|
|
375
|
+
*/
|
|
376
|
+
duration?: number;
|
|
377
|
+
/** countdown pause (toastify isPaused) */
|
|
378
|
+
paused?: boolean;
|
|
379
|
+
onComplete?: () => void;
|
|
380
|
+
/** Toast 하단 슬롯 (`.stn-progress-bar.toast`) */
|
|
381
|
+
toastSlot?: boolean;
|
|
382
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
383
|
+
|
|
384
|
+
type StnCircularProgressSize = 'sm' | 'md' | 'lg' | 'xl';
|
|
385
|
+
type StnCircularProgressTone = 'primary' | 'secondary' | 'success' | 'critical' | 'major' | 'minor' | 'warning' | 'info' | 'warn' | 'error' | (string & {});
|
|
386
|
+
type StnCircularProgressGradient = 'none' | 'main' | 'primary' | 'secondary' | 'critical' | 'major' | 'minor' | 'warning';
|
|
387
|
+
type StnCircularProgressTrack = 'default' | 'muted';
|
|
388
|
+
type StnCircularProgressLabelPosition = 'center' | 'top' | 'bottom' | 'left' | 'right';
|
|
389
|
+
type StnCircularProgressProps = StnWithoutStyle<Omit<HTMLAttributes<HTMLDivElement>, 'children'>> & {
|
|
390
|
+
/** 0 - 100 */
|
|
391
|
+
value?: number;
|
|
392
|
+
max?: number;
|
|
393
|
+
size?: StnCircularProgressSize;
|
|
394
|
+
tone?: StnCircularProgressTone;
|
|
395
|
+
gradient?: StnCircularProgressGradient;
|
|
396
|
+
track?: StnCircularProgressTrack;
|
|
397
|
+
showLabel?: boolean;
|
|
398
|
+
label?: ReactNode;
|
|
399
|
+
/** 레이블 표시 위치 ('center' | 'top' | 'bottom' | 'left' | 'right') - 기본 'center' */
|
|
400
|
+
labelPosition?: StnCircularProgressLabelPosition;
|
|
401
|
+
/** 외부 레이블 배치 시 원형 안쪽 중앙에 함께 표시할 레이블 */
|
|
402
|
+
innerLabel?: ReactNode | boolean;
|
|
403
|
+
};
|
|
404
|
+
/**
|
|
405
|
+
* Circular Progress ? `.stn-progress-circle`
|
|
406
|
+
* Modifiers: `.sm` �� `.md` �� `.lg` �� `.xl` �� `.info` �� `.success` �� `.warn` �� `.error` �� `.gradient-main` �� `.track-muted`
|
|
407
|
+
*/
|
|
408
|
+
declare const StnCircularProgress: react.ForwardRefExoticComponent<StnWithoutStyle<Omit<HTMLAttributes<HTMLDivElement>, "children">> & {
|
|
409
|
+
/** 0 - 100 */
|
|
410
|
+
value?: number;
|
|
411
|
+
max?: number;
|
|
412
|
+
size?: StnCircularProgressSize;
|
|
413
|
+
tone?: StnCircularProgressTone;
|
|
414
|
+
gradient?: StnCircularProgressGradient;
|
|
415
|
+
track?: StnCircularProgressTrack;
|
|
416
|
+
showLabel?: boolean;
|
|
417
|
+
label?: ReactNode;
|
|
418
|
+
/** 레이블 표시 위치 ('center' | 'top' | 'bottom' | 'left' | 'right') - 기본 'center' */
|
|
419
|
+
labelPosition?: StnCircularProgressLabelPosition;
|
|
420
|
+
/** 외부 레이블 배치 시 원형 안쪽 중앙에 함께 표시할 레이블 */
|
|
421
|
+
innerLabel?: ReactNode | boolean;
|
|
422
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
423
|
+
|
|
424
|
+
type StnCheckboxSize = 'sm' | 'md' | 'lg';
|
|
425
|
+
type StnCheckboxColor = 'primary' | 'secondary' | 'success' | 'critical' | 'major' | 'minor' | 'warning' | 'error' | 'neutral' | (string & {});
|
|
426
|
+
type StnCheckboxLabelPlacement = 'end' | 'start' | 'top' | 'bottom' | 'left' | 'right';
|
|
427
|
+
type StnCheckboxProps = StnWithoutStyle<Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'className' | 'children' | 'size'>> & {
|
|
428
|
+
/** 레이블 텍스트. 생략 시 단독 컨트롤로 표시 */
|
|
429
|
+
label?: ReactNode;
|
|
430
|
+
/** 체크박스 크기 ('sm': 14px, 'md': 18px, 'lg': 22px) @default 'md' */
|
|
431
|
+
size?: StnCheckboxSize;
|
|
432
|
+
/** 시멘틱 색상 또는 커스텀 색상 ('primary' | 'secondary' | 'success' | 'critical' | 'major' | 'minor' | 'warning' | 'error' | 'neutral') @default 'primary' */
|
|
433
|
+
color?: StnCheckboxColor;
|
|
434
|
+
/** 레이블 배치 위치 ('end' | 'start' | 'top' | 'bottom') @default 'end' */
|
|
435
|
+
labelPlacement?: StnCheckboxLabelPlacement;
|
|
436
|
+
/** 부분 선택 (Indeterminate) 상태 표시 */
|
|
437
|
+
indeterminate?: boolean;
|
|
438
|
+
/** 부분 선택(indeterminate) 시 표시할 커스텀 아이콘 / 이미지 */
|
|
439
|
+
indeterminateIcon?: ReactNode;
|
|
440
|
+
/** 선택(checked) 시 표시할 커스텀 아이콘 / 이미지 */
|
|
441
|
+
checkedIcon?: ReactNode;
|
|
442
|
+
/** 미선택(unchecked) 시 표시할 커스텀 아이콘 / 이미지 */
|
|
443
|
+
icon?: ReactNode;
|
|
444
|
+
/** 레이블 텍스트 숨기고 18px 컨트롤만 표시 (label이 없으면 자동 적용) */
|
|
445
|
+
controlOnly?: boolean;
|
|
446
|
+
/** `.checkbox` 래퍼 */
|
|
447
|
+
className?: string;
|
|
448
|
+
};
|
|
449
|
+
/**
|
|
450
|
+
* Checkbox — Figma `input`(default). 모양: `stn-checkbox.css`
|
|
451
|
+
* 토글 필(ON/OFF)은 `<StnToggleButton>` · 트랙 스위치는 `<StnSwitch>`
|
|
452
|
+
*/
|
|
453
|
+
declare const StnCheckbox: react.ForwardRefExoticComponent<StnWithoutStyle<Omit<InputHTMLAttributes<HTMLInputElement>, "children" | "className" | "size" | "type">> & {
|
|
454
|
+
/** 레이블 텍스트. 생략 시 단독 컨트롤로 표시 */
|
|
455
|
+
label?: ReactNode;
|
|
456
|
+
/** 체크박스 크기 ('sm': 14px, 'md': 18px, 'lg': 22px) @default 'md' */
|
|
457
|
+
size?: StnCheckboxSize;
|
|
458
|
+
/** 시멘틱 색상 또는 커스텀 색상 ('primary' | 'secondary' | 'success' | 'critical' | 'major' | 'minor' | 'warning' | 'error' | 'neutral') @default 'primary' */
|
|
459
|
+
color?: StnCheckboxColor;
|
|
460
|
+
/** 레이블 배치 위치 ('end' | 'start' | 'top' | 'bottom') @default 'end' */
|
|
461
|
+
labelPlacement?: StnCheckboxLabelPlacement;
|
|
462
|
+
/** 부분 선택 (Indeterminate) 상태 표시 */
|
|
463
|
+
indeterminate?: boolean;
|
|
464
|
+
/** 부분 선택(indeterminate) 시 표시할 커스텀 아이콘 / 이미지 */
|
|
465
|
+
indeterminateIcon?: ReactNode;
|
|
466
|
+
/** 선택(checked) 시 표시할 커스텀 아이콘 / 이미지 */
|
|
467
|
+
checkedIcon?: ReactNode;
|
|
468
|
+
/** 미선택(unchecked) 시 표시할 커스텀 아이콘 / 이미지 */
|
|
469
|
+
icon?: ReactNode;
|
|
470
|
+
/** 레이블 텍스트 숨기고 18px 컨트롤만 표시 (label이 없으면 자동 적용) */
|
|
471
|
+
controlOnly?: boolean;
|
|
472
|
+
/** `.checkbox` 래퍼 */
|
|
473
|
+
className?: string;
|
|
474
|
+
} & react.RefAttributes<HTMLInputElement>>;
|
|
475
|
+
|
|
476
|
+
/** footerRight 액션 슬롯 권장 상한 (문서·Figma 101782) */
|
|
477
|
+
declare const STN_TABLE_FOOTER_MAX_ACTIONS = 4;
|
|
478
|
+
type StnTableProps = {
|
|
479
|
+
/** Scroll area content — usually `<StnTable.Grid>` / `table.stn-table__grid` */
|
|
480
|
+
children: ReactNode;
|
|
481
|
+
/** `.stn-table__summary` */
|
|
482
|
+
summary?: ReactNode;
|
|
483
|
+
/** `.stn-table__footer-center` — e.g. `<StnPagination />` */
|
|
484
|
+
footerCenter?: ReactNode;
|
|
485
|
+
/** `.stn-table__page-size` — 행 수 드롭다운 (footer leading · summary 옆, `<StnDropdown size="sm" direction="up" />` 권장) */
|
|
486
|
+
pageSize?: ReactNode;
|
|
487
|
+
/**
|
|
488
|
+
* `.stn-table__footer-right` — 등록/수정/삭제 등 버튼 슬롯.
|
|
489
|
+
* 최대 {@link STN_TABLE_FOOTER_MAX_ACTIONS}개 (초과 시 console.warn + slice).
|
|
490
|
+
*/
|
|
491
|
+
footerRight?: ReactNode;
|
|
492
|
+
/** list view — `content_box` 높이에 맞춰 스크롤 영역 세로 채움 (`.stn-table--fill`) */
|
|
493
|
+
fill?: boolean;
|
|
494
|
+
/** `.stn-table__scroll`에 인라인 스타일 지정 */
|
|
495
|
+
scrollStyle?: React.CSSProperties;
|
|
496
|
+
/** 테이블 내의 rowId가 지정된 행 클릭 시 자동으로 visited 상태 관리 */
|
|
497
|
+
trackVisited?: boolean;
|
|
498
|
+
/** 모든 Th에 리사이징 핸들러 기본 표시 여부 */
|
|
499
|
+
resizable?: boolean;
|
|
500
|
+
/** 모든 Th를 기본적으로 드래그 가능하게 설정 */
|
|
501
|
+
draggable?: boolean;
|
|
502
|
+
/** 컬럼 리사이징 종료 시 호출되는 콜백 (StnTable.Th에 name 속성 필수) */
|
|
503
|
+
onColumnResize?: (name: string, newWidth: number) => void;
|
|
504
|
+
/** 컬럼 드래그 앤 드롭으로 순서 변경 시 호출되는 콜백 (StnTable.Th에 name 속성 필수) */
|
|
505
|
+
onColumnReorder?: (sourceName: string, targetName: string, position: 'left' | 'right') => void;
|
|
506
|
+
className?: string;
|
|
507
|
+
};
|
|
508
|
+
declare function StnTableBase({ children, summary, footerCenter, pageSize, footerRight, fill, scrollStyle, trackVisited, resizable, draggable, onColumnResize, onColumnReorder, className, }: StnTableProps): react_jsx_runtime.JSX.Element;
|
|
509
|
+
type StnTableGridProps = HTMLAttributes<HTMLTableElement>;
|
|
510
|
+
declare const StnTableGrid: react.ForwardRefExoticComponent<StnTableGridProps & react.RefAttributes<HTMLTableElement>>;
|
|
511
|
+
type StnTableHeadProps = HTMLAttributes<HTMLTableSectionElement>;
|
|
512
|
+
declare const StnTableHead: react.ForwardRefExoticComponent<StnTableHeadProps & react.RefAttributes<HTMLTableSectionElement>>;
|
|
513
|
+
type StnTableBodyProps = HTMLAttributes<HTMLTableSectionElement>;
|
|
514
|
+
declare const StnTableBody: react.ForwardRefExoticComponent<StnTableBodyProps & react.RefAttributes<HTMLTableSectionElement>>;
|
|
515
|
+
type StnTableRowProps = HTMLAttributes<HTMLTableRowElement> & {
|
|
516
|
+
/** hover background for body rows */
|
|
517
|
+
hoverable?: boolean;
|
|
518
|
+
/** 행 선택(Active/Selected) 하이라이트 배경 (푸른 계열) */
|
|
519
|
+
selected?: boolean;
|
|
520
|
+
/** 직전에 클릭했던 행 (보라 계열) */
|
|
521
|
+
visited?: boolean;
|
|
522
|
+
/** 행 강조 (초록 계열) */
|
|
523
|
+
highlighted?: boolean;
|
|
524
|
+
/** 클릭 가능한 행 포인터 커서 (cursor: pointer) */
|
|
525
|
+
clickable?: boolean;
|
|
526
|
+
/** 프레스 면 — 마우스 다운 고정(문서) 또는 `.is-pressed` */
|
|
527
|
+
pressed?: boolean;
|
|
528
|
+
/** StnTable에 trackVisited 설정 시 내부적으로 visited 상태를 추적하기 위한 고유 식별자 */
|
|
529
|
+
rowId?: string;
|
|
530
|
+
};
|
|
531
|
+
declare const StnTableRow: react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableRowElement> & {
|
|
532
|
+
/** hover background for body rows */
|
|
533
|
+
hoverable?: boolean;
|
|
534
|
+
/** 행 선택(Active/Selected) 하이라이트 배경 (푸른 계열) */
|
|
535
|
+
selected?: boolean;
|
|
536
|
+
/** 직전에 클릭했던 행 (보라 계열) */
|
|
537
|
+
visited?: boolean;
|
|
538
|
+
/** 행 강조 (초록 계열) */
|
|
539
|
+
highlighted?: boolean;
|
|
540
|
+
/** 클릭 가능한 행 포인터 커서 (cursor: pointer) */
|
|
541
|
+
clickable?: boolean;
|
|
542
|
+
/** 프레스 면 — 마우스 다운 고정(문서) 또는 `.is-pressed` */
|
|
543
|
+
pressed?: boolean;
|
|
544
|
+
/** StnTable에 trackVisited 설정 시 내부적으로 visited 상태를 추적하기 위한 고유 식별자 */
|
|
545
|
+
rowId?: string;
|
|
546
|
+
} & react.RefAttributes<HTMLTableRowElement>>;
|
|
547
|
+
/** Infomap 기본은 center. 텍스트 열은 left, 수치 열은 right. */
|
|
548
|
+
type StnTableAlign = 'left' | 'center' | 'right';
|
|
549
|
+
type StnTableThProps = Omit<ThHTMLAttributes<HTMLTableCellElement>, 'align'> & {
|
|
550
|
+
/** checkbox column — 60px */
|
|
551
|
+
check?: boolean;
|
|
552
|
+
/** 셀 텍스트 정렬 — `left` | `center`(기본) | `right` */
|
|
553
|
+
align?: StnTableAlign;
|
|
554
|
+
/** 프레스 면 — 마우스 다운 고정(문서) 또는 `.is-pressed` */
|
|
555
|
+
pressed?: boolean;
|
|
556
|
+
/**
|
|
557
|
+
* 열 너비. 사이즈 토큰 스텝만 클래스로 붙는다.
|
|
558
|
+
* `width={120}` → `.stn-table__col--120` → `var(--stn-size-120)`.
|
|
559
|
+
* 60 · 70 · 72 · 80 · 100 · 110 · 120 · 140 · 160 · 180 · 200.
|
|
560
|
+
* 빼 둔 열이 표의 남은 폭을 흡수한다. Body `Td`에는 두지 않는다.
|
|
561
|
+
*/
|
|
562
|
+
width?: number;
|
|
563
|
+
/** 열 너비 조절 기능을 사용할지 여부 */
|
|
564
|
+
resizable?: boolean;
|
|
565
|
+
/** 컬럼 식별자 (리사이징 및 드래그 앤 드롭 시 onColumnResize, onColumnReorder 콜백으로 전달됨) */
|
|
566
|
+
name?: string;
|
|
567
|
+
/** 다중 헤더 그룹인 경우, 하위에 속한 컬럼들의 식별자 배열 (배열을 넘기면 리사이징 시 하위 열들이 골고루 조절됨) */
|
|
568
|
+
groupCols?: string[];
|
|
569
|
+
};
|
|
570
|
+
declare const StnTableTh: react.ForwardRefExoticComponent<Omit<ThHTMLAttributes<HTMLTableCellElement>, "align"> & {
|
|
571
|
+
/** checkbox column — 60px */
|
|
572
|
+
check?: boolean;
|
|
573
|
+
/** 셀 텍스트 정렬 — `left` | `center`(기본) | `right` */
|
|
574
|
+
align?: StnTableAlign;
|
|
575
|
+
/** 프레스 면 — 마우스 다운 고정(문서) 또는 `.is-pressed` */
|
|
576
|
+
pressed?: boolean;
|
|
577
|
+
/**
|
|
578
|
+
* 열 너비. 사이즈 토큰 스텝만 클래스로 붙는다.
|
|
579
|
+
* `width={120}` → `.stn-table__col--120` → `var(--stn-size-120)`.
|
|
580
|
+
* 60 · 70 · 72 · 80 · 100 · 110 · 120 · 140 · 160 · 180 · 200.
|
|
581
|
+
* 빼 둔 열이 표의 남은 폭을 흡수한다. Body `Td`에는 두지 않는다.
|
|
582
|
+
*/
|
|
583
|
+
width?: number;
|
|
584
|
+
/** 열 너비 조절 기능을 사용할지 여부 */
|
|
585
|
+
resizable?: boolean;
|
|
586
|
+
/** 컬럼 식별자 (리사이징 및 드래그 앤 드롭 시 onColumnResize, onColumnReorder 콜백으로 전달됨) */
|
|
587
|
+
name?: string;
|
|
588
|
+
/** 다중 헤더 그룹인 경우, 하위에 속한 컬럼들의 식별자 배열 (배열을 넘기면 리사이징 시 하위 열들이 골고루 조절됨) */
|
|
589
|
+
groupCols?: string[];
|
|
590
|
+
} & react.RefAttributes<HTMLTableCellElement>>;
|
|
591
|
+
type StnTableTdProps = Omit<TdHTMLAttributes<HTMLTableCellElement>, 'align'> & {
|
|
592
|
+
check?: boolean;
|
|
593
|
+
/** 셀 텍스트 정렬 — `left` | `center`(기본) | `right` */
|
|
594
|
+
align?: StnTableAlign;
|
|
595
|
+
};
|
|
596
|
+
declare const StnTableTd: react.ForwardRefExoticComponent<Omit<TdHTMLAttributes<HTMLTableCellElement>, "align"> & {
|
|
597
|
+
check?: boolean;
|
|
598
|
+
/** 셀 텍스트 정렬 — `left` | `center`(기본) | `right` */
|
|
599
|
+
align?: StnTableAlign;
|
|
600
|
+
} & react.RefAttributes<HTMLTableCellElement>>;
|
|
601
|
+
type StnTableThCheckProps = Omit<StnCheckboxProps, 'controlOnly' | 'variant'> & Pick<ThHTMLAttributes<HTMLTableCellElement>, 'scope' | 'className'>;
|
|
602
|
+
/** Infomap th 체크박스 전용 — Figma node 40000042:209512 (열 60 · 18×18 · 전체 선택) */
|
|
603
|
+
declare const StnTableThCheck: react.ForwardRefExoticComponent<Omit<StnCheckboxProps, "variant" | "controlOnly"> & Pick<ThHTMLAttributes<HTMLTableCellElement>, "className" | "scope"> & react.RefAttributes<HTMLInputElement>>;
|
|
604
|
+
type StnTableTdCheckProps = Omit<StnCheckboxProps, 'controlOnly' | 'variant'> & Pick<TdHTMLAttributes<HTMLTableCellElement>, 'className'>;
|
|
605
|
+
/** tbody 체크박스 셀 — `StnTable.ThCheck`와 동일 60px 열 */
|
|
606
|
+
declare const StnTableTdCheck: react.ForwardRefExoticComponent<Omit<StnCheckboxProps, "variant" | "controlOnly"> & Pick<TdHTMLAttributes<HTMLTableCellElement>, "className"> & react.RefAttributes<HTMLInputElement>>;
|
|
607
|
+
type StnTableSortProps = ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
608
|
+
label: ReactNode;
|
|
609
|
+
/** none | ascending | descending */
|
|
610
|
+
sort?: 'none' | 'ascending' | 'descending';
|
|
611
|
+
/** 프레스 면 고정 — `.is-pressed` (문서·마우스 다운과 동일) */
|
|
612
|
+
pressed?: boolean;
|
|
613
|
+
};
|
|
614
|
+
/** Infomap sortable header — 텍스트+아이콘 inner + 클릭·`aria-sort` (Figma 40000042:209530) */
|
|
615
|
+
declare const StnTableSort: react.ForwardRefExoticComponent<ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
616
|
+
label: ReactNode;
|
|
617
|
+
/** none | ascending | descending */
|
|
618
|
+
sort?: "none" | "ascending" | "descending";
|
|
619
|
+
/** 프레스 면 고정 — `.is-pressed` (문서·마우스 다운과 동일) */
|
|
620
|
+
pressed?: boolean;
|
|
621
|
+
} & react.RefAttributes<HTMLButtonElement>>;
|
|
622
|
+
type StnTableCompound = typeof StnTableBase & {
|
|
623
|
+
Grid: typeof StnTableGrid;
|
|
624
|
+
Head: typeof StnTableHead;
|
|
625
|
+
Body: typeof StnTableBody;
|
|
626
|
+
Row: typeof StnTableRow;
|
|
627
|
+
Th: typeof StnTableTh;
|
|
628
|
+
Td: typeof StnTableTd;
|
|
629
|
+
ThCheck: typeof StnTableThCheck;
|
|
630
|
+
TdCheck: typeof StnTableTdCheck;
|
|
631
|
+
Sort: typeof StnTableSort;
|
|
632
|
+
};
|
|
633
|
+
/**
|
|
634
|
+
* Pub list table shell — Infomap Figma thead/tbody (node 40000042:209510).
|
|
635
|
+
* Markup: `.stn-table` > `.stn-table__scroll` + optional footer.
|
|
636
|
+
*/
|
|
637
|
+
declare const StnTable: StnTableCompound;
|
|
638
|
+
|
|
639
|
+
type StnTreeNodeKind = 'root' | 'folder' | 'server';
|
|
640
|
+
/** Tree 데이터 노드 — `StnTree`의 `nodes` 항목 (`StnTreeNode` 컴포넌트와 별개) */
|
|
641
|
+
type StnTreeItem = {
|
|
642
|
+
id: string;
|
|
643
|
+
label: string;
|
|
644
|
+
/** default `folder` · leaf는 `server` · 최상위 루트는 `root` */
|
|
645
|
+
kind?: StnTreeNodeKind;
|
|
646
|
+
children?: StnTreeItem[];
|
|
647
|
+
};
|
|
648
|
+
type StnTreeGuideCell = {
|
|
649
|
+
type: 'blank';
|
|
650
|
+
} | {
|
|
651
|
+
type: 'vertical';
|
|
652
|
+
} | {
|
|
653
|
+
type: 'connector';
|
|
654
|
+
variant: 'mid' | 'end';
|
|
655
|
+
} | {
|
|
656
|
+
type: 'toggle';
|
|
657
|
+
expanded: boolean;
|
|
658
|
+
};
|
|
659
|
+
type StnTreeFlatRow = {
|
|
660
|
+
id: string;
|
|
661
|
+
label: string;
|
|
662
|
+
kind: StnTreeNodeKind;
|
|
663
|
+
depth: number;
|
|
664
|
+
cells: StnTreeGuideCell[];
|
|
665
|
+
hasChildren: boolean;
|
|
666
|
+
expanded: boolean;
|
|
667
|
+
isLast: boolean;
|
|
668
|
+
};
|
|
669
|
+
/** 단일 Tree Node용 가이드/토글 셀 — depth · kind 기준으로 생성 */
|
|
670
|
+
declare function buildStnTreeNodeCells(options: {
|
|
671
|
+
depth: number;
|
|
672
|
+
kind: StnTreeNodeKind;
|
|
673
|
+
hasChildren?: boolean;
|
|
674
|
+
expanded?: boolean;
|
|
675
|
+
isLast?: boolean;
|
|
676
|
+
/** length = max(0, depth - 1) · true면 해당 조상 이후 vertical 숨김 */
|
|
677
|
+
ancestorIsLast?: boolean[];
|
|
678
|
+
}): StnTreeGuideCell[];
|
|
679
|
+
declare function flattenStnTree(nodes: StnTreeItem[], expandedIds: Iterable<string>): StnTreeFlatRow[];
|
|
680
|
+
declare function collectExpandableIds(nodes: StnTreeItem[]): string[];
|
|
681
|
+
|
|
682
|
+
type StnTreeNodeDocState = 'default' | 'hover' | 'pressed' | 'selected';
|
|
683
|
+
type StnTreeNodeProps = Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'onSelect' | 'onToggle'> & {
|
|
684
|
+
label: string;
|
|
685
|
+
/** default `folder` */
|
|
686
|
+
kind?: StnTreeNodeKind;
|
|
687
|
+
/** 0–3 · `data-depth` · 가이드 들여쓰기 */
|
|
688
|
+
depth?: number;
|
|
689
|
+
expanded?: boolean;
|
|
690
|
+
selected?: boolean;
|
|
691
|
+
/** folder/root에 자식이 있으면 chevron · server는 connector */
|
|
692
|
+
hasChildren?: boolean;
|
|
693
|
+
/** server connector end vs mid */
|
|
694
|
+
isLast?: boolean;
|
|
695
|
+
/** depth>1 가이드 · length = depth-1 */
|
|
696
|
+
ancestorIsLast?: boolean[];
|
|
697
|
+
/** 셀을 직접 넘기면 depth/kind 기반 생성을 건너뜁니다 */
|
|
698
|
+
cells?: StnTreeGuideCell[];
|
|
699
|
+
/**
|
|
700
|
+
* Docs Playground — hover/pressed/selected 비주얼 고정.
|
|
701
|
+
* 제품 코드에서는 쓰지 마세요.
|
|
702
|
+
*/
|
|
703
|
+
docState?: StnTreeNodeDocState;
|
|
704
|
+
onSelect?: () => void;
|
|
705
|
+
onToggle?: () => void;
|
|
706
|
+
};
|
|
707
|
+
/** Infomap FOLDER STRUCTURE 행 — Figma 40000042:210359 */
|
|
708
|
+
declare const StnTreeNode: react.ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLDivElement>, "children" | "onSelect" | "onToggle"> & {
|
|
709
|
+
label: string;
|
|
710
|
+
/** default `folder` */
|
|
711
|
+
kind?: StnTreeNodeKind;
|
|
712
|
+
/** 0–3 · `data-depth` · 가이드 들여쓰기 */
|
|
713
|
+
depth?: number;
|
|
714
|
+
expanded?: boolean;
|
|
715
|
+
selected?: boolean;
|
|
716
|
+
/** folder/root에 자식이 있으면 chevron · server는 connector */
|
|
717
|
+
hasChildren?: boolean;
|
|
718
|
+
/** server connector end vs mid */
|
|
719
|
+
isLast?: boolean;
|
|
720
|
+
/** depth>1 가이드 · length = depth-1 */
|
|
721
|
+
ancestorIsLast?: boolean[];
|
|
722
|
+
/** 셀을 직접 넘기면 depth/kind 기반 생성을 건너뜁니다 */
|
|
723
|
+
cells?: StnTreeGuideCell[];
|
|
724
|
+
/**
|
|
725
|
+
* Docs Playground — hover/pressed/selected 비주얼 고정.
|
|
726
|
+
* 제품 코드에서는 쓰지 마세요.
|
|
727
|
+
*/
|
|
728
|
+
docState?: StnTreeNodeDocState;
|
|
729
|
+
onSelect?: () => void;
|
|
730
|
+
onToggle?: () => void;
|
|
731
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
732
|
+
|
|
733
|
+
type StnTreeDocRowState = StnTreeNodeDocState;
|
|
734
|
+
type StnTreeProps = Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'onSelect'> & {
|
|
735
|
+
nodes: StnTreeItem[];
|
|
736
|
+
/** 섹션 제목 — Figma `FOLDER STRUCTURE` */
|
|
737
|
+
heading?: string;
|
|
738
|
+
defaultExpandedIds?: string[];
|
|
739
|
+
expandedIds?: string[];
|
|
740
|
+
onExpandedChange?: (ids: string[]) => void;
|
|
741
|
+
selectedId?: string | null;
|
|
742
|
+
defaultSelectedId?: string | null;
|
|
743
|
+
onSelect?: (id: string) => void;
|
|
744
|
+
/**
|
|
745
|
+
* Docs Playground — 특정 행에 hover/pressed/selected 비주얼을 고정합니다.
|
|
746
|
+
* 제품 코드에서는 쓰지 마세요.
|
|
747
|
+
*/
|
|
748
|
+
docRowState?: {
|
|
749
|
+
id: string;
|
|
750
|
+
state: StnTreeDocRowState;
|
|
751
|
+
};
|
|
752
|
+
};
|
|
753
|
+
/** Infomap folder structure tree — `StnTreeNode` 조립 · Figma 40000042:210359 */
|
|
754
|
+
declare const StnTree: react.ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLDivElement>, "children" | "onSelect"> & {
|
|
755
|
+
nodes: StnTreeItem[];
|
|
756
|
+
/** 섹션 제목 — Figma `FOLDER STRUCTURE` */
|
|
757
|
+
heading?: string;
|
|
758
|
+
defaultExpandedIds?: string[];
|
|
759
|
+
expandedIds?: string[];
|
|
760
|
+
onExpandedChange?: (ids: string[]) => void;
|
|
761
|
+
selectedId?: string | null;
|
|
762
|
+
defaultSelectedId?: string | null;
|
|
763
|
+
onSelect?: (id: string) => void;
|
|
764
|
+
/**
|
|
765
|
+
* Docs Playground — 특정 행에 hover/pressed/selected 비주얼을 고정합니다.
|
|
766
|
+
* 제품 코드에서는 쓰지 마세요.
|
|
767
|
+
*/
|
|
768
|
+
docRowState?: {
|
|
769
|
+
id: string;
|
|
770
|
+
state: StnTreeDocRowState;
|
|
771
|
+
};
|
|
772
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
773
|
+
|
|
774
|
+
type StnScrollOrientation = 'vertical' | 'horizontal' | 'both';
|
|
775
|
+
type StnScrollSize = 'thin' | 'default' | 'thick';
|
|
776
|
+
type StnScrollColor = 'default' | 'primary' | 'teal' | 'muted' | 'fade';
|
|
777
|
+
type StnScrollProps = HTMLAttributes<HTMLDivElement> & {
|
|
778
|
+
/** 스크롤 방향 @default 'vertical' */
|
|
779
|
+
orientation?: StnScrollOrientation;
|
|
780
|
+
/** 스크롤바 두께 preset @default 'default' (8px) */
|
|
781
|
+
size?: StnScrollSize;
|
|
782
|
+
/** 스크롤바 색상 preset */
|
|
783
|
+
color?: StnScrollColor;
|
|
784
|
+
/** 커스텀 thumb 색상 (CSS color value) */
|
|
785
|
+
thumbColor?: string;
|
|
786
|
+
/** 커스텀 track 배경색 */
|
|
787
|
+
trackColor?: string;
|
|
788
|
+
/** 커스텀 스크롤바 너비/높이 (px 숫자 또는 CSS string) */
|
|
789
|
+
scrollWidth?: number | string;
|
|
790
|
+
/** max-height shorthand (number → px) */
|
|
791
|
+
maxHeight?: number | string;
|
|
792
|
+
/** max-width shorthand (number → px) — 가로 스크롤 용 */
|
|
793
|
+
maxWidth?: number | string;
|
|
794
|
+
children?: ReactNode;
|
|
795
|
+
className?: string;
|
|
796
|
+
};
|
|
797
|
+
/**
|
|
798
|
+
* STN 커스텀 스크롤바 컨테이너
|
|
799
|
+
* - 색상, 두께, 방향을 토큰으로 제어
|
|
800
|
+
* - 화살표 버튼은 그리지 않는다
|
|
801
|
+
*/
|
|
802
|
+
declare const StnScroll: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
|
|
803
|
+
/** 스크롤 방향 @default 'vertical' */
|
|
804
|
+
orientation?: StnScrollOrientation;
|
|
805
|
+
/** 스크롤바 두께 preset @default 'default' (8px) */
|
|
806
|
+
size?: StnScrollSize;
|
|
807
|
+
/** 스크롤바 색상 preset */
|
|
808
|
+
color?: StnScrollColor;
|
|
809
|
+
/** 커스텀 thumb 색상 (CSS color value) */
|
|
810
|
+
thumbColor?: string;
|
|
811
|
+
/** 커스텀 track 배경색 */
|
|
812
|
+
trackColor?: string;
|
|
813
|
+
/** 커스텀 스크롤바 너비/높이 (px 숫자 또는 CSS string) */
|
|
814
|
+
scrollWidth?: number | string;
|
|
815
|
+
/** max-height shorthand (number → px) */
|
|
816
|
+
maxHeight?: number | string;
|
|
817
|
+
/** max-width shorthand (number → px) — 가로 스크롤 용 */
|
|
818
|
+
maxWidth?: number | string;
|
|
819
|
+
children?: ReactNode;
|
|
820
|
+
className?: string;
|
|
821
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
822
|
+
|
|
823
|
+
type StnSectionSideProps = Omit<HTMLAttributes<HTMLElement>, 'className' | 'children'> & {
|
|
824
|
+
children?: ReactNode;
|
|
825
|
+
className?: string;
|
|
826
|
+
/** true면 LNB 열 높이에 맞춰 패널을 세로로 채움 (list view + search) */
|
|
827
|
+
fill?: boolean;
|
|
828
|
+
/** StnScroll props (orientation 고정 vertical) */
|
|
829
|
+
scrollProps?: Omit<StnScrollProps, 'orientation' | 'children'>;
|
|
830
|
+
};
|
|
831
|
+
/**
|
|
832
|
+
* Infomap section-side — Figma 40000040:102539
|
|
833
|
+
* 사이드 패널 셸 + Pub 스크롤. 본문은 보통 `StnTree`.
|
|
834
|
+
*/
|
|
835
|
+
declare const StnSectionSide: react.ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLElement>, "children" | "className"> & {
|
|
836
|
+
children?: ReactNode;
|
|
837
|
+
className?: string;
|
|
838
|
+
/** true면 LNB 열 높이에 맞춰 패널을 세로로 채움 (list view + search) */
|
|
839
|
+
fill?: boolean;
|
|
840
|
+
/** StnScroll props (orientation 고정 vertical) */
|
|
841
|
+
scrollProps?: Omit<StnScrollProps, "orientation" | "children">;
|
|
842
|
+
} & react.RefAttributes<HTMLElement>>;
|
|
843
|
+
type StnSectionSidePresetProps = Omit<StnSectionSideProps, 'children'> & {
|
|
844
|
+
tree: StnTreeProps;
|
|
845
|
+
};
|
|
846
|
+
/** Figma 예제 — FOLDER STRUCTURE + scroll */
|
|
847
|
+
declare function StnSectionSidePreset({ tree, ...sideProps }: StnSectionSidePresetProps): react_jsx_runtime.JSX.Element;
|
|
848
|
+
|
|
849
|
+
type StnLoginCardBrandPosition = 'left' | 'right';
|
|
850
|
+
type StnLoginCardVariant = 'default' | 'glow';
|
|
851
|
+
type StnLoginCardProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
|
|
852
|
+
/** 좌측(또는 우측) 브랜드 영역 커스텀 콘텐츠 (로고 이미지, 서비스명, 설명 등) */
|
|
853
|
+
brand?: ReactNode;
|
|
854
|
+
/** 우측(또는 좌측) 폼 영역 커스텀 콘텐츠 (탭, 입력 필드, 로그인 버튼, 도움말 링크 등) */
|
|
855
|
+
children?: ReactNode;
|
|
856
|
+
/**
|
|
857
|
+
* 브랜드 영역 위치
|
|
858
|
+
* - 'left': [Brand - Form] (기본값)
|
|
859
|
+
* - 'right': [Form - Brand] (반전 레이아웃)
|
|
860
|
+
* @default 'left'
|
|
861
|
+
*/
|
|
862
|
+
brandPosition?: StnLoginCardBrandPosition;
|
|
863
|
+
/**
|
|
864
|
+
* 레이아웃 순서 반전 여부 (true면 [Form - Brand])
|
|
865
|
+
* brandPosition="right"와 동일하게 동작합니다.
|
|
866
|
+
*/
|
|
867
|
+
reverse?: boolean;
|
|
868
|
+
/**
|
|
869
|
+
* 카드 테두리 회전 레이저 빔 애니메이션 여부 (mockup/login.html 발)
|
|
870
|
+
* @default false
|
|
871
|
+
*/
|
|
872
|
+
glow?: boolean;
|
|
873
|
+
/**
|
|
874
|
+
* 카드 스타일 변형
|
|
875
|
+
* - 'default': 기본 정적 테두리
|
|
876
|
+
* - 'glow': 회전 레이저 빔 애니메이션 테두리
|
|
877
|
+
* @default 'default'
|
|
878
|
+
*/
|
|
879
|
+
variant?: StnLoginCardVariant;
|
|
880
|
+
/** 추가 커스텀 클래스 */
|
|
881
|
+
className?: string;
|
|
882
|
+
/** glow 래퍼에 적용할 추가 커스텀 클래스 */
|
|
883
|
+
wrapperClassName?: string;
|
|
884
|
+
};
|
|
885
|
+
type StnLoginCardGlowWrapperProps = HTMLAttributes<HTMLDivElement> & {
|
|
886
|
+
children?: ReactNode;
|
|
887
|
+
className?: string;
|
|
888
|
+
};
|
|
889
|
+
/**
|
|
890
|
+
* 로그인 카드 테두리 회전 레이저 빔 애니메이션 래퍼 (Card Glow Wrapper)
|
|
891
|
+
* 독립적으로 사용하거나 StnLoginCard의 `glow` 또는 `variant="glow"`로 자동 적용됩니다.
|
|
892
|
+
*/
|
|
893
|
+
declare const StnLoginCardGlowWrapper: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
|
|
894
|
+
children?: ReactNode;
|
|
895
|
+
className?: string;
|
|
896
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
897
|
+
/**
|
|
898
|
+
* Infomap / STN Login Card Pattern — Figma 40004209:78293
|
|
899
|
+
*
|
|
900
|
+
* 100% STN 공식 디자인 토큰 기반의 2열 로그인 카드 컨테이너입니다.
|
|
901
|
+
* 브랜드 슬롯(brand)과 폼 슬롯(children)을 자유롭게 조립할 수 있으며,
|
|
902
|
+
* brandPosition 또는 reverse prop으로 좌우/상하 배치를 자유롭게 바꿀 수 있습니다.
|
|
903
|
+
* `glow` 또는 `variant="glow"` 옵션으로 테두리 회전 레이저 빔 효과를 활성화할 수 있습니다.
|
|
904
|
+
* 폼 스택(max 320)은 유지하고, 카드가 좁아지면 브랜드·폼 패딩과 로고(xl→sm)를 같이 줄입니다.
|
|
905
|
+
* 900px 이하 뷰포트에서는 세로 1열 스택으로 자동 반응합니다.
|
|
906
|
+
*/
|
|
907
|
+
declare const StnLoginCard: react.ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLDivElement>, "children"> & {
|
|
908
|
+
/** 좌측(또는 우측) 브랜드 영역 커스텀 콘텐츠 (로고 이미지, 서비스명, 설명 등) */
|
|
909
|
+
brand?: ReactNode;
|
|
910
|
+
/** 우측(또는 좌측) 폼 영역 커스텀 콘텐츠 (탭, 입력 필드, 로그인 버튼, 도움말 링크 등) */
|
|
911
|
+
children?: ReactNode;
|
|
912
|
+
/**
|
|
913
|
+
* 브랜드 영역 위치
|
|
914
|
+
* - 'left': [Brand - Form] (기본값)
|
|
915
|
+
* - 'right': [Form - Brand] (반전 레이아웃)
|
|
916
|
+
* @default 'left'
|
|
917
|
+
*/
|
|
918
|
+
brandPosition?: StnLoginCardBrandPosition;
|
|
919
|
+
/**
|
|
920
|
+
* 레이아웃 순서 반전 여부 (true면 [Form - Brand])
|
|
921
|
+
* brandPosition="right"와 동일하게 동작합니다.
|
|
922
|
+
*/
|
|
923
|
+
reverse?: boolean;
|
|
924
|
+
/**
|
|
925
|
+
* 카드 테두리 회전 레이저 빔 애니메이션 여부 (mockup/login.html 발)
|
|
926
|
+
* @default false
|
|
927
|
+
*/
|
|
928
|
+
glow?: boolean;
|
|
929
|
+
/**
|
|
930
|
+
* 카드 스타일 변형
|
|
931
|
+
* - 'default': 기본 정적 테두리
|
|
932
|
+
* - 'glow': 회전 레이저 빔 애니메이션 테두리
|
|
933
|
+
* @default 'default'
|
|
934
|
+
*/
|
|
935
|
+
variant?: StnLoginCardVariant;
|
|
936
|
+
/** 추가 커스텀 클래스 */
|
|
937
|
+
className?: string;
|
|
938
|
+
/** glow 래퍼에 적용할 추가 커스텀 클래스 */
|
|
939
|
+
wrapperClassName?: string;
|
|
940
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
941
|
+
type StnLoginBrandStackProps = HTMLAttributes<HTMLDivElement> & {
|
|
942
|
+
children?: ReactNode;
|
|
943
|
+
className?: string;
|
|
944
|
+
};
|
|
945
|
+
/**
|
|
946
|
+
* 로그인 브랜드 세로 스택 — 로고 · 제목 · 캡션을 브랜드 간격(16px)으로 나열합니다.
|
|
947
|
+
*/
|
|
948
|
+
declare const StnLoginBrandStack: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
|
|
949
|
+
children?: ReactNode;
|
|
950
|
+
className?: string;
|
|
951
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
952
|
+
type StnLoginFormStackProps = FormHTMLAttributes<HTMLFormElement> & {
|
|
953
|
+
children?: ReactNode;
|
|
954
|
+
className?: string;
|
|
955
|
+
};
|
|
956
|
+
/**
|
|
957
|
+
* 로그인 폼 전체 스택 컨테이너
|
|
958
|
+
* 탭, 필드 그룹, 로그인 버튼, 하단 링크 등을 정해진 토큰 간격(24px)으로 세로 나열합니다.
|
|
959
|
+
*/
|
|
960
|
+
declare const StnLoginFormStack: react.ForwardRefExoticComponent<FormHTMLAttributes<HTMLFormElement> & {
|
|
961
|
+
children?: ReactNode;
|
|
962
|
+
className?: string;
|
|
963
|
+
} & react.RefAttributes<HTMLFormElement>>;
|
|
964
|
+
type StnLoginFormFieldsProps = HTMLAttributes<HTMLDivElement> & {
|
|
965
|
+
children?: ReactNode;
|
|
966
|
+
className?: string;
|
|
967
|
+
};
|
|
968
|
+
/**
|
|
969
|
+
* 로그인 입력 필드 묶음 컨테이너
|
|
970
|
+
* 아이디, 비밀번호 등의 입력 필드를 16px 간격으로 세로 나열합니다.
|
|
971
|
+
*/
|
|
972
|
+
declare const StnLoginFormFields: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
|
|
973
|
+
children?: ReactNode;
|
|
974
|
+
className?: string;
|
|
975
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
976
|
+
type StnLoginFormLinksProps = HTMLAttributes<HTMLElement> & {
|
|
977
|
+
children?: ReactNode;
|
|
978
|
+
className?: string;
|
|
979
|
+
};
|
|
980
|
+
/**
|
|
981
|
+
* 로그인 하단 링크 바 컨테이너
|
|
982
|
+
* 회원가입, 아이디/비밀번호 찾기 등의 텍스트 링크를 가로 중앙 정렬합니다.
|
|
983
|
+
*/
|
|
984
|
+
declare const StnLoginFormLinks: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & {
|
|
985
|
+
children?: ReactNode;
|
|
986
|
+
className?: string;
|
|
987
|
+
} & react.RefAttributes<HTMLElement>>;
|
|
988
|
+
type StnLoginPlaceholderProps = HTMLAttributes<HTMLParagraphElement> & {
|
|
989
|
+
children?: ReactNode;
|
|
990
|
+
};
|
|
991
|
+
/**
|
|
992
|
+
* 로그인 폼 내 준비 중 안내 영역 (예: 소셜 로그인 준비 중)
|
|
993
|
+
* 128px 최소 높이와 중앙 정렬, 토큰 폰트/색상(`--stn-login-link-fg`)이 적용됩니다.
|
|
994
|
+
*/
|
|
995
|
+
declare const StnLoginPlaceholder: react.ForwardRefExoticComponent<HTMLAttributes<HTMLParagraphElement> & {
|
|
996
|
+
children?: ReactNode;
|
|
997
|
+
} & react.RefAttributes<HTMLParagraphElement>>;
|
|
998
|
+
|
|
999
|
+
type StnLoginTextFieldProps = StnWithoutStyle<Omit<InputHTMLAttributes<HTMLInputElement>, 'size'>> & {
|
|
1000
|
+
/** 왼쪽 입체 아이콘 — Iconography slug (`line/user`) 또는 ReactNode */
|
|
1001
|
+
icon?: ReactNode;
|
|
1002
|
+
/** 아이콘 시맨틱 색상 ('primary' | 'success' | 'warning' | 'error' | 'info') */
|
|
1003
|
+
iconColor?: StnIconBoxColor;
|
|
1004
|
+
invalid?: boolean;
|
|
1005
|
+
className?: string;
|
|
1006
|
+
};
|
|
1007
|
+
/**
|
|
1008
|
+
* Login mockup `.input-group` — XL 56px, full width, left icon box.
|
|
1009
|
+
* 일반 검색·필터는 `StnTextField`를 사용합니다.
|
|
1010
|
+
*/
|
|
1011
|
+
declare const StnLoginTextField: react.ForwardRefExoticComponent<StnWithoutStyle<Omit<InputHTMLAttributes<HTMLInputElement>, "size">> & {
|
|
1012
|
+
/** 왼쪽 입체 아이콘 — Iconography slug (`line/user`) 또는 ReactNode */
|
|
1013
|
+
icon?: ReactNode;
|
|
1014
|
+
/** 아이콘 시맨틱 색상 ('primary' | 'success' | 'warning' | 'error' | 'info') */
|
|
1015
|
+
iconColor?: StnIconBoxColor;
|
|
1016
|
+
invalid?: boolean;
|
|
1017
|
+
className?: string;
|
|
1018
|
+
} & react.RefAttributes<HTMLInputElement>>;
|
|
1019
|
+
|
|
1020
|
+
/** horizontal = 가로 wordmark · vertical = 세로 mark · watermark = 워터마크 · onlyimg/symbol = 아이콘 단독 심볼 */
|
|
1021
|
+
type StnLogoVariant = 'horizontal' | 'vertical' | 'watermark' | 'onlyimg' | 'symbol';
|
|
1022
|
+
/** CSS tokens: xs sm md lg xl */
|
|
1023
|
+
type StnLogoSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
1024
|
+
type StnLogoTheme = 'dark' | 'light';
|
|
1025
|
+
type StnLogoProps = StnWithoutStyle<Omit<HTMLAttributes<HTMLSpanElement>, 'children'>> & {
|
|
1026
|
+
/**
|
|
1027
|
+
* horizontal: 가로 워드마크 (full PNG)
|
|
1028
|
+
* vertical: 세로 심볼 (single PNG)
|
|
1029
|
+
* watermark: 워터마크 SVG
|
|
1030
|
+
* onlyimg / symbol: 단독 로고 심볼 (logo-onlyimg.png)
|
|
1031
|
+
* @default 'horizontal'
|
|
1032
|
+
*/
|
|
1033
|
+
variant?: StnLogoVariant;
|
|
1034
|
+
/**
|
|
1035
|
+
* xs sm md lg xl — 픽셀 width 금지. 기본 md.
|
|
1036
|
+
* @default 'md'
|
|
1037
|
+
*/
|
|
1038
|
+
size?: StnLogoSize;
|
|
1039
|
+
/**
|
|
1040
|
+
* dark: 흰색 로고 (어두운 배경용, 기본값)
|
|
1041
|
+
* light: 검은색 로고 (밝은 배경용)
|
|
1042
|
+
* @default 'dark'
|
|
1043
|
+
*/
|
|
1044
|
+
theme?: StnLogoTheme;
|
|
1045
|
+
alt?: string;
|
|
1046
|
+
};
|
|
1047
|
+
declare const StnLogo: react.ForwardRefExoticComponent<StnWithoutStyle<Omit<HTMLAttributes<HTMLSpanElement>, "children">> & {
|
|
1048
|
+
/**
|
|
1049
|
+
* horizontal: 가로 워드마크 (full PNG)
|
|
1050
|
+
* vertical: 세로 심볼 (single PNG)
|
|
1051
|
+
* watermark: 워터마크 SVG
|
|
1052
|
+
* onlyimg / symbol: 단독 로고 심볼 (logo-onlyimg.png)
|
|
1053
|
+
* @default 'horizontal'
|
|
1054
|
+
*/
|
|
1055
|
+
variant?: StnLogoVariant;
|
|
1056
|
+
/**
|
|
1057
|
+
* xs sm md lg xl — 픽셀 width 금지. 기본 md.
|
|
1058
|
+
* @default 'md'
|
|
1059
|
+
*/
|
|
1060
|
+
size?: StnLogoSize;
|
|
1061
|
+
/**
|
|
1062
|
+
* dark: 흰색 로고 (어두운 배경용, 기본값)
|
|
1063
|
+
* light: 검은색 로고 (밝은 배경용)
|
|
1064
|
+
* @default 'dark'
|
|
1065
|
+
*/
|
|
1066
|
+
theme?: StnLogoTheme;
|
|
1067
|
+
alt?: string;
|
|
1068
|
+
} & react.RefAttributes<HTMLSpanElement>>;
|
|
1069
|
+
|
|
1070
|
+
type StnBadgeVariant = 'standard' | 'dot';
|
|
1071
|
+
type StnBadgeAppearance = 'subtle' | 'solid';
|
|
1072
|
+
type StnBadgeColor = 'primary' | 'secondary' | 'success' | 'critical' | 'major' | 'minor' | 'warning' | 'error' | 'neutral' | 'default' | (string & {});
|
|
1073
|
+
interface StnBadgeAnchorOrigin {
|
|
1074
|
+
vertical: 'top' | 'bottom';
|
|
1075
|
+
horizontal: 'left' | 'right';
|
|
1076
|
+
}
|
|
1077
|
+
interface StnBadgeProps extends react__default.HTMLAttributes<HTMLSpanElement> {
|
|
1078
|
+
/** 뱃지 내부에 표시할 숫자 또는 내용 (0일 경우 showZero가 false이면 숨김) */
|
|
1079
|
+
badgeContent?: react__default.ReactNode;
|
|
1080
|
+
/** 뱃지 형태: 'standard' (숫자/문자 pill) | 'dot' (작은 원형 점) */
|
|
1081
|
+
variant?: StnBadgeVariant;
|
|
1082
|
+
/** 외형 모드: 'subtle' (mockup .sb-badge 규격, 반투명 배경 + 컬러 텍스트, 기본값) | 'solid' (완전 채움 캡슐형) */
|
|
1083
|
+
appearance?: StnBadgeAppearance;
|
|
1084
|
+
/** 색상 테마: primary, secondary, success, critical/error, major, minor, warning, neutral */
|
|
1085
|
+
color?: StnBadgeColor;
|
|
1086
|
+
/** 최대 표시 수치 (기본값: 99, 99 초과 시 99+ 로 표시) */
|
|
1087
|
+
max?: number;
|
|
1088
|
+
/** badgeContent가 0일 때도 뱃지를 노출할지 여부 (기본값: false) */
|
|
1089
|
+
showZero?: boolean;
|
|
1090
|
+
/** 뱃지를 숨길지 여부 */
|
|
1091
|
+
invisible?: boolean;
|
|
1092
|
+
/** 자식 요소를 기준으로 뱃지가 배치될 위치 (기본값: top-right) */
|
|
1093
|
+
anchorOrigin?: StnBadgeAnchorOrigin;
|
|
1094
|
+
/** 뱃지 버블 요소에 직접 지정할 배경색 (디자인 토큰 또는 컬러값) */
|
|
1095
|
+
backgroundColor?: string;
|
|
1096
|
+
/** 뱃지 버블 요소에 직접 지정할 텍스트 색상 (디자인 토큰 또는 컬러값) */
|
|
1097
|
+
textColor?: string;
|
|
1098
|
+
/** 뱃지 버블 요소에 직접 전달할 인라인 스타일 */
|
|
1099
|
+
badgeStyle?: react__default.CSSProperties;
|
|
1100
|
+
/** 뱃지 자체의 추가 className */
|
|
1101
|
+
badgeClassName?: string;
|
|
1102
|
+
/** 추가 클래스 */
|
|
1103
|
+
className?: string;
|
|
1104
|
+
/** 뱃지가 부착될 대상 엘리먼트 (생략 시 독립 인라인 뱃지로 렌더링) */
|
|
1105
|
+
children?: react__default.ReactNode;
|
|
1106
|
+
}
|
|
1107
|
+
/**
|
|
1108
|
+
* StnBadge
|
|
1109
|
+
* 알림 개수(Notification count)나 활성 상태를 나타내는 오버레이 뱃지 컴포넌트입니다.
|
|
1110
|
+
* 자식 엘리먼트를 감싸 우측 상단/좌측 하단 등에 카운트나 점을 띄우거나, 단독 인라인 뱃지로 사용됩니다.
|
|
1111
|
+
*/
|
|
1112
|
+
declare const StnBadge: react__default.ForwardRefExoticComponent<StnBadgeProps & react__default.RefAttributes<HTMLSpanElement>>;
|
|
1113
|
+
|
|
1114
|
+
type StnChipVariant = 'filled' | 'outline' | 'outlined' | 'border';
|
|
1115
|
+
type StnChipSize = 'sm' | 'md' | 'lg';
|
|
1116
|
+
type StnChipShape = 'square' | 'pill' | 'round' | 'rounded';
|
|
1117
|
+
type StnChipIconPosition = 'left' | 'right';
|
|
1118
|
+
type StnChipLabelPosition = 'top' | 'bottom' | 'left' | 'right';
|
|
1119
|
+
type StnChipColor = 'cr' | 'mj' | 'mn' | 'wr' | 'CR' | 'MJ' | 'MN' | 'WR' | 'primary' | 'teal' | 'success' | 'error' | 'red' | 'warn' | 'warning' | 'purple' | 'secondary' | 'neutral' | 'gray' | 'critical' | 'major' | 'minor';
|
|
1120
|
+
type StnChipProps = StnWithoutStyle<Omit<HTMLAttributes<HTMLSpanElement>, 'className' | 'color'>> & {
|
|
1121
|
+
children?: ReactNode;
|
|
1122
|
+
/** 칩 본문 텍스트 (children이 없을 때 사용하거나, children과 함께 전달 시 외곽 라벨로 기능) */
|
|
1123
|
+
label?: ReactNode;
|
|
1124
|
+
variant?: StnChipVariant;
|
|
1125
|
+
size?: StnChipSize;
|
|
1126
|
+
shape?: StnChipShape;
|
|
1127
|
+
radius?: StnChipShape;
|
|
1128
|
+
color?: StnChipColor;
|
|
1129
|
+
icon?: ReactNode;
|
|
1130
|
+
/** 아이콘 위치 ('left': 기본, 'right') */
|
|
1131
|
+
iconPosition?: StnChipIconPosition;
|
|
1132
|
+
/** 외곽 보조 라벨 */
|
|
1133
|
+
sideLabel?: ReactNode;
|
|
1134
|
+
/** 외곽 보조 라벨 배치 위치 ('top' | 'bottom' | 'left' | 'right', 기본 'right') */
|
|
1135
|
+
labelPosition?: StnChipLabelPosition;
|
|
1136
|
+
/** `labelPosition` 별칭 */
|
|
1137
|
+
sideLabelPosition?: StnChipLabelPosition;
|
|
1138
|
+
/** 클릭 가능한 인터랙티브 칩 여부 (토글과 달리 On/Off 상태를 갖지 않는 액션 클릭용) */
|
|
1139
|
+
clickable?: boolean;
|
|
1140
|
+
/** 삭제 이벤트 콜백 (제공 시 삭제 버튼 렌더링) */
|
|
1141
|
+
onDelete?: (e: MouseEvent<HTMLButtonElement>) => void;
|
|
1142
|
+
/** 삭제 버튼 아이콘 (기본: SVG 닫기 아이콘) */
|
|
1143
|
+
deleteIcon?: ReactNode;
|
|
1144
|
+
/** 삭제 버튼 위치 ('left' | 'right', 기본 'right') */
|
|
1145
|
+
deleteIconPosition?: StnChipIconPosition;
|
|
1146
|
+
/** 삭제 버튼 접근성 라벨 @default '삭제' */
|
|
1147
|
+
deleteAriaLabel?: string;
|
|
1148
|
+
className?: string;
|
|
1149
|
+
/** Grade for status */
|
|
1150
|
+
grade?: StnChipGrade;
|
|
1151
|
+
/** Border accent */
|
|
1152
|
+
accent?: StnChipBorderAccent;
|
|
1153
|
+
};
|
|
1154
|
+
declare function StnChip(props: StnChipProps): react_jsx_runtime.JSX.Element;
|
|
1155
|
+
|
|
1156
|
+
type StnSeverityLevel = 'critical' | 'major' | 'minor' | 'warning';
|
|
1157
|
+
type StnSeverityVariant = 'badge' | 'filter' | 'glow' | 'solid';
|
|
1158
|
+
type StnSeveritySize = 'sm' | 'md' | 'lg';
|
|
1159
|
+
interface StnSeverityBadgeProps extends react__default.ButtonHTMLAttributes<HTMLButtonElement | HTMLSpanElement> {
|
|
1160
|
+
/** 심각도: critical, major, minor, warning */
|
|
1161
|
+
severity: StnSeverityLevel;
|
|
1162
|
+
/** 표시 모드: badge (기본 깔끔한 솔리드), glow (네온 블러/글로우 발광), filter (필터 토글 버튼) */
|
|
1163
|
+
variant?: StnSeverityVariant;
|
|
1164
|
+
/** 뱃지 크기: 'sm' (18px), 'md' (20px - 기본값), 'lg' (24px) */
|
|
1165
|
+
size?: StnSeveritySize;
|
|
1166
|
+
/** 라운드(알약/원형) 모서리 적용 여부 (기본값: false, 4px) */
|
|
1167
|
+
round?: boolean;
|
|
1168
|
+
/** 아이콘 표시 여부 (기본값: true) */
|
|
1169
|
+
showIcon?: boolean;
|
|
1170
|
+
/** 아이콘 전용 모드 (텍스트 없이 정사각/원형 심각도 아이콘만 표시) */
|
|
1171
|
+
iconOnly?: boolean;
|
|
1172
|
+
/** 블러 / 네온 글로우 발광 효과 적용 여부 (variant="glow"와 동일, 기본값: false) */
|
|
1173
|
+
glow?: boolean;
|
|
1174
|
+
/** glow의 별칭 prop (blur 발광 효과 제어) */
|
|
1175
|
+
blur?: boolean;
|
|
1176
|
+
/** 텍스트 라벨 (미지정 시 기본 라벨 표시) */
|
|
1177
|
+
label?: react__default.ReactNode;
|
|
1178
|
+
/** 필터 모드일 때 활성화(선택) 상태 */
|
|
1179
|
+
active?: boolean;
|
|
1180
|
+
/** 클릭 이벤트 핸들러 */
|
|
1181
|
+
onClick?: react__default.MouseEventHandler<HTMLElement>;
|
|
1182
|
+
/** 추가 클래스 */
|
|
1183
|
+
className?: string;
|
|
1184
|
+
children?: react__default.ReactNode;
|
|
1185
|
+
}
|
|
1186
|
+
/**
|
|
1187
|
+
* StnSeverityBadge
|
|
1188
|
+
* 알람 심각도(Critical, Major, Minor, Warning)를 명확하게 표시하거나
|
|
1189
|
+
* 대시보드에서 다중 필터 토글 용도로 사용하는 독립 컴포넌트입니다.
|
|
1190
|
+
*/
|
|
1191
|
+
declare const StnSeverityBadge: react__default.ForwardRefExoticComponent<StnSeverityBadgeProps & react__default.RefAttributes<HTMLElement>>;
|
|
1192
|
+
interface StnSeverityFilterProps {
|
|
1193
|
+
/** 현재 선택된 심각도 레벨 배열 */
|
|
1194
|
+
value?: StnSeverityLevel[];
|
|
1195
|
+
/** 선택 변경 콜백 */
|
|
1196
|
+
onChange?: (nextValue: StnSeverityLevel[]) => void;
|
|
1197
|
+
/** 비활성화할 심각도 목록 */
|
|
1198
|
+
disabledSeverities?: StnSeverityLevel[];
|
|
1199
|
+
/** 아이콘 표시 여부 (기본: true) */
|
|
1200
|
+
showIcon?: boolean;
|
|
1201
|
+
/** 추가 클래스 */
|
|
1202
|
+
className?: string;
|
|
1203
|
+
}
|
|
1204
|
+
/**
|
|
1205
|
+
* StnSeverityFilter
|
|
1206
|
+
* 대시보드 및 실시간 장애 목록 상단에서 사용되는 4단계 심각도 필터 그룹 컴포넌트입니다.
|
|
1207
|
+
*/
|
|
1208
|
+
declare const StnSeverityFilter: react__default.FC<StnSeverityFilterProps>;
|
|
1209
|
+
|
|
1210
|
+
type StnSystemChipTone = 'cr' | 'mj' | 'mn' | 'wr' | 'CR' | 'MJ' | 'MN' | 'WR' | 'info' | 'success' | 'purple' | 'neutral' | 'critical' | 'major' | 'minor' | 'warning' | 'teal' | 'error' | 'warn' | string;
|
|
1211
|
+
type StnSystemChipItem = {
|
|
1212
|
+
id: string;
|
|
1213
|
+
/** 점(dot) 색상 톤: 2글자 표준(cr, mj, mn, wr) 또는 info, success, purple 등 */
|
|
1214
|
+
tone?: StnSystemChipTone;
|
|
1215
|
+
/** 점(dot) 커스텀 색상 값 (CSS 컬러 또는 var(--...)) */
|
|
1216
|
+
dotColor?: string;
|
|
1217
|
+
/** 수치 카운트 또는 텍스트 */
|
|
1218
|
+
count?: number | string;
|
|
1219
|
+
value?: number | string;
|
|
1220
|
+
/** 텍스트 라벨 (선택) */
|
|
1221
|
+
label?: string;
|
|
1222
|
+
};
|
|
1223
|
+
type StnSystemChipProps = HTMLAttributes<HTMLDivElement> & {
|
|
1224
|
+
/** 1개, 2개, 3개, 4개 등 원하는 숫자만큼의 아이템 배열 */
|
|
1225
|
+
items: StnSystemChipItem[];
|
|
1226
|
+
/** 텍스트 라벨 표시 여부 */
|
|
1227
|
+
showLabel?: boolean;
|
|
1228
|
+
/**
|
|
1229
|
+
* 핵심 1개만 노출 · 호버/포커스 시 전체 펼침.
|
|
1230
|
+
* - 생략(`auto`): `stn-header` ≤1200px 에서 CSS 자동 적용
|
|
1231
|
+
* - `true`: 항상 compact
|
|
1232
|
+
* - `false`: 항상 전체 노출
|
|
1233
|
+
*/
|
|
1234
|
+
compact?: boolean;
|
|
1235
|
+
className?: string;
|
|
1236
|
+
};
|
|
1237
|
+
/**
|
|
1238
|
+
* System Chip (헤더 시스템 상태 요약 바)
|
|
1239
|
+
* [ 🔴 0 | 🟠 12 | 🟡 2 | 🔵 3 ] 형태.
|
|
1240
|
+
* compact 모드에서는 핵심 1개만 보이고 호버 시 전체가 펼쳐집니다.
|
|
1241
|
+
*/
|
|
1242
|
+
declare function StnSystemChip({ items, showLabel, compact, className, ...rest }: StnSystemChipProps): react_jsx_runtime.JSX.Element;
|
|
1243
|
+
|
|
1244
|
+
type StnToggleButtonSize = 'sm' | 'md' | 'lg';
|
|
1245
|
+
type StnToggleButtonColor = 'primary' | 'secondary' | 'success' | 'critical' | 'major' | 'minor' | 'warning' | 'neutral' | (string & {});
|
|
1246
|
+
type StnToggleButtonGradient = 'none' | 'main' | 'primary' | 'secondary' | 'critical' | 'major' | 'minor' | 'warning';
|
|
1247
|
+
type StnToggleButtonWidthPreset = 80 | 100 | 120 | 140 | 160 | 180 | 200;
|
|
1248
|
+
type StnToggleButtonWidthValue = StnToggleButtonWidthPreset | 'full' | number | string;
|
|
1249
|
+
type StnToggleButtonIconPosition = 'left' | 'right';
|
|
1250
|
+
type StnToggleButtonProps = StnWithoutStyle<Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'>> & {
|
|
1251
|
+
/** 켜짐(ON) 상태 여부 (제어 모드) */
|
|
1252
|
+
pressed?: boolean;
|
|
1253
|
+
/** 초기 켜짐(ON) 상태 (비제어 모드) @default false */
|
|
1254
|
+
defaultPressed?: boolean;
|
|
1255
|
+
/** 토글 상태 변경 콜백 (true: ON, false: OFF) */
|
|
1256
|
+
onChange?: (pressed: boolean) => void;
|
|
1257
|
+
/** 크기 ('sm': 26px, 'md': 34px 기본, 'lg': 42px) @default 'md' */
|
|
1258
|
+
size?: StnToggleButtonSize;
|
|
1259
|
+
/** 활성(ON) 상태 시맨틱 솔리드 색상 @default 'primary' */
|
|
1260
|
+
color?: StnToggleButtonColor;
|
|
1261
|
+
/** 활성(ON) 상태 7대 표준 시맨틱 그라데이션 ('main' | 'primary' | 'secondary' | 'critical' | 'major' | 'minor' | 'warning') */
|
|
1262
|
+
gradient?: StnToggleButtonGradient;
|
|
1263
|
+
/** 아이콘 요소 또는 시스템 아이콘 slug ('line/volume', 'line/pin' 등) */
|
|
1264
|
+
icon?: ReactNode;
|
|
1265
|
+
/** 아이콘 위치 ('left': 기본, 'right') @default 'left' */
|
|
1266
|
+
iconPosition?: StnToggleButtonIconPosition;
|
|
1267
|
+
/** 아이콘 전용 정사각/원형 모드 */
|
|
1268
|
+
iconOnly?: boolean;
|
|
1269
|
+
/**
|
|
1270
|
+
* 너비 프리셋 (80 | 100 | 120 | 140 | 160 | 180 | 200 | 'full') 또는 커스텀 px/string.
|
|
1271
|
+
* 토글 버튼 특성상 최소 고정 너비(min-width)로 작용하여 글자가 길어지면 자연스럽게 확장(Hug)됩니다.
|
|
1272
|
+
*/
|
|
1273
|
+
width?: StnToggleButtonWidthValue;
|
|
1274
|
+
/** 최소 너비(min-width) 명시적 지정 (width와 동일) */
|
|
1275
|
+
minWidth?: number | string;
|
|
1276
|
+
/** 100% 전체 폭 버튼 (`full`) */
|
|
1277
|
+
fullWidth?: boolean;
|
|
1278
|
+
disabled?: boolean;
|
|
1279
|
+
children?: ReactNode;
|
|
1280
|
+
className?: string;
|
|
1281
|
+
'aria-label'?: string;
|
|
1282
|
+
};
|
|
1283
|
+
declare const StnToggleButton: react.ForwardRefExoticComponent<StnWithoutStyle<Omit<ButtonHTMLAttributes<HTMLButtonElement>, "onChange">> & {
|
|
1284
|
+
/** 켜짐(ON) 상태 여부 (제어 모드) */
|
|
1285
|
+
pressed?: boolean;
|
|
1286
|
+
/** 초기 켜짐(ON) 상태 (비제어 모드) @default false */
|
|
1287
|
+
defaultPressed?: boolean;
|
|
1288
|
+
/** 토글 상태 변경 콜백 (true: ON, false: OFF) */
|
|
1289
|
+
onChange?: (pressed: boolean) => void;
|
|
1290
|
+
/** 크기 ('sm': 26px, 'md': 34px 기본, 'lg': 42px) @default 'md' */
|
|
1291
|
+
size?: StnToggleButtonSize;
|
|
1292
|
+
/** 활성(ON) 상태 시맨틱 솔리드 색상 @default 'primary' */
|
|
1293
|
+
color?: StnToggleButtonColor;
|
|
1294
|
+
/** 활성(ON) 상태 7대 표준 시맨틱 그라데이션 ('main' | 'primary' | 'secondary' | 'critical' | 'major' | 'minor' | 'warning') */
|
|
1295
|
+
gradient?: StnToggleButtonGradient;
|
|
1296
|
+
/** 아이콘 요소 또는 시스템 아이콘 slug ('line/volume', 'line/pin' 등) */
|
|
1297
|
+
icon?: ReactNode;
|
|
1298
|
+
/** 아이콘 위치 ('left': 기본, 'right') @default 'left' */
|
|
1299
|
+
iconPosition?: StnToggleButtonIconPosition;
|
|
1300
|
+
/** 아이콘 전용 정사각/원형 모드 */
|
|
1301
|
+
iconOnly?: boolean;
|
|
1302
|
+
/**
|
|
1303
|
+
* 너비 프리셋 (80 | 100 | 120 | 140 | 160 | 180 | 200 | 'full') 또는 커스텀 px/string.
|
|
1304
|
+
* 토글 버튼 특성상 최소 고정 너비(min-width)로 작용하여 글자가 길어지면 자연스럽게 확장(Hug)됩니다.
|
|
1305
|
+
*/
|
|
1306
|
+
width?: StnToggleButtonWidthValue;
|
|
1307
|
+
/** 최소 너비(min-width) 명시적 지정 (width와 동일) */
|
|
1308
|
+
minWidth?: number | string;
|
|
1309
|
+
/** 100% 전체 폭 버튼 (`full`) */
|
|
1310
|
+
fullWidth?: boolean;
|
|
1311
|
+
disabled?: boolean;
|
|
1312
|
+
children?: ReactNode;
|
|
1313
|
+
className?: string;
|
|
1314
|
+
'aria-label'?: string;
|
|
1315
|
+
} & react.RefAttributes<HTMLButtonElement>>;
|
|
1316
|
+
|
|
1317
|
+
type StnSwitchSize = 'sm' | 'md' | 'lg';
|
|
1318
|
+
type StnSwitchColor = 'primary' | 'secondary' | 'success' | 'critical' | 'major' | 'minor' | 'warning' | (string & {});
|
|
1319
|
+
type StnSwitchGradient = boolean | 'main' | 'primary' | 'secondary' | 'critical' | 'major' | 'minor' | 'warning' | (string & {});
|
|
1320
|
+
type StnSwitchLabelPosition = 'right' | 'left' | 'top' | 'bottom' | 'start' | 'end';
|
|
1321
|
+
type StnSwitchProps = StnWithoutStyle<Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'className' | 'children' | 'role' | 'size'>> & {
|
|
1322
|
+
/** 스위치 옆/맞은편 레이블 */
|
|
1323
|
+
label?: ReactNode;
|
|
1324
|
+
/** 크기 ('sm': 28×16, 'md': 36×20 기본, 'lg': 44×24) @default 'md' */
|
|
1325
|
+
size?: StnSwitchSize;
|
|
1326
|
+
/** 활성 트랙 색상 @default 'primary' */
|
|
1327
|
+
color?: StnSwitchColor;
|
|
1328
|
+
/**
|
|
1329
|
+
* 활성화 시 그라데이션 트랙 적용
|
|
1330
|
+
* boolean(기본 블루) 또는 'blue' | 'teal' | 'purple' | 'sunset' | 'emerald' | 커스텀 linear-gradient
|
|
1331
|
+
*/
|
|
1332
|
+
gradient?: StnSwitchGradient;
|
|
1333
|
+
/** 레이블 위치 ('right' 기본, 'left', 'top', 'bottom') @default 'right' */
|
|
1334
|
+
labelPosition?: StnSwitchLabelPosition;
|
|
1335
|
+
/**
|
|
1336
|
+
* true: 행 전체 100% width · 레이블 왼쪽 / 스위치 오른쪽 끝 분리 배치
|
|
1337
|
+
*/
|
|
1338
|
+
between?: boolean;
|
|
1339
|
+
/** 필수 입력 여부 (레이블 옆에 붉은색 * 표시) */
|
|
1340
|
+
required?: boolean;
|
|
1341
|
+
className?: string;
|
|
1342
|
+
};
|
|
1343
|
+
/**
|
|
1344
|
+
* Switch Toggle — ON/OFF. 모양: `stn-switch.css`
|
|
1345
|
+
* DOM: input → control → label (checked 스타일은 인접 형제)
|
|
1346
|
+
*/
|
|
1347
|
+
declare const StnSwitch: react.ForwardRefExoticComponent<StnWithoutStyle<Omit<InputHTMLAttributes<HTMLInputElement>, "children" | "className" | "size" | "type" | "role">> & {
|
|
1348
|
+
/** 스위치 옆/맞은편 레이블 */
|
|
1349
|
+
label?: ReactNode;
|
|
1350
|
+
/** 크기 ('sm': 28×16, 'md': 36×20 기본, 'lg': 44×24) @default 'md' */
|
|
1351
|
+
size?: StnSwitchSize;
|
|
1352
|
+
/** 활성 트랙 색상 @default 'primary' */
|
|
1353
|
+
color?: StnSwitchColor;
|
|
1354
|
+
/**
|
|
1355
|
+
* 활성화 시 그라데이션 트랙 적용
|
|
1356
|
+
* boolean(기본 블루) 또는 'blue' | 'teal' | 'purple' | 'sunset' | 'emerald' | 커스텀 linear-gradient
|
|
1357
|
+
*/
|
|
1358
|
+
gradient?: StnSwitchGradient;
|
|
1359
|
+
/** 레이블 위치 ('right' 기본, 'left', 'top', 'bottom') @default 'right' */
|
|
1360
|
+
labelPosition?: StnSwitchLabelPosition;
|
|
1361
|
+
/**
|
|
1362
|
+
* true: 행 전체 100% width · 레이블 왼쪽 / 스위치 오른쪽 끝 분리 배치
|
|
1363
|
+
*/
|
|
1364
|
+
between?: boolean;
|
|
1365
|
+
/** 필수 입력 여부 (레이블 옆에 붉은색 * 표시) */
|
|
1366
|
+
required?: boolean;
|
|
1367
|
+
className?: string;
|
|
1368
|
+
} & react.RefAttributes<HTMLInputElement>>;
|
|
1369
|
+
|
|
1370
|
+
type StnRadioSize = 'sm' | 'md' | 'lg';
|
|
1371
|
+
type StnRadioColor = 'primary' | 'secondary' | 'success' | 'critical' | 'major' | 'minor' | 'warning' | (string & {});
|
|
1372
|
+
type StnRadioLabelPlacement = 'end' | 'start' | 'top' | 'bottom' | 'left' | 'right';
|
|
1373
|
+
type StnRadioProps = StnWithoutStyle<Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'className' | 'children' | 'size'>> & {
|
|
1374
|
+
/** 레이블 텍스트. 생략 시 단독 컨트롤(control-only)로 표시 */
|
|
1375
|
+
label?: ReactNode;
|
|
1376
|
+
/** 라디오 버튼 크기 ('sm': 14px, 'md': 18px 기본, 'lg': 22px) @default 'md' */
|
|
1377
|
+
size?: StnRadioSize;
|
|
1378
|
+
/** 시멘틱 색상 또는 커스텀 색상 ('primary' | 'error' | 'success' | 'warn' | 'secondary' | 'neutral') @default 'primary' */
|
|
1379
|
+
color?: StnRadioColor;
|
|
1380
|
+
/** 레이블 배치 위치 ('end' | 'start' | 'top' | 'bottom') @default 'end' */
|
|
1381
|
+
labelPlacement?: StnRadioLabelPlacement;
|
|
1382
|
+
/** 레이블 텍스트 숨기고 컨트롤만 표시 (label이 없으면 자동 적용) */
|
|
1383
|
+
controlOnly?: boolean;
|
|
1384
|
+
/** 필수 선택 여부 (레이블 옆에 붉은색 * 표시) */
|
|
1385
|
+
required?: boolean;
|
|
1386
|
+
className?: string;
|
|
1387
|
+
};
|
|
1388
|
+
/**
|
|
1389
|
+
* Radio — Figma `input`(18×18 · cyan-350 점). 모양: `stn-radio.css`
|
|
1390
|
+
*/
|
|
1391
|
+
declare const StnRadio: react.ForwardRefExoticComponent<StnWithoutStyle<Omit<InputHTMLAttributes<HTMLInputElement>, "children" | "className" | "size" | "type">> & {
|
|
1392
|
+
/** 레이블 텍스트. 생략 시 단독 컨트롤(control-only)로 표시 */
|
|
1393
|
+
label?: ReactNode;
|
|
1394
|
+
/** 라디오 버튼 크기 ('sm': 14px, 'md': 18px 기본, 'lg': 22px) @default 'md' */
|
|
1395
|
+
size?: StnRadioSize;
|
|
1396
|
+
/** 시멘틱 색상 또는 커스텀 색상 ('primary' | 'error' | 'success' | 'warn' | 'secondary' | 'neutral') @default 'primary' */
|
|
1397
|
+
color?: StnRadioColor;
|
|
1398
|
+
/** 레이블 배치 위치 ('end' | 'start' | 'top' | 'bottom') @default 'end' */
|
|
1399
|
+
labelPlacement?: StnRadioLabelPlacement;
|
|
1400
|
+
/** 레이블 텍스트 숨기고 컨트롤만 표시 (label이 없으면 자동 적용) */
|
|
1401
|
+
controlOnly?: boolean;
|
|
1402
|
+
/** 필수 선택 여부 (레이블 옆에 붉은색 * 표시) */
|
|
1403
|
+
required?: boolean;
|
|
1404
|
+
className?: string;
|
|
1405
|
+
} & react.RefAttributes<HTMLInputElement>>;
|
|
1406
|
+
|
|
1407
|
+
type StnRadioGroupOption = {
|
|
1408
|
+
value: string;
|
|
1409
|
+
label: ReactNode;
|
|
1410
|
+
disabled?: boolean;
|
|
1411
|
+
};
|
|
1412
|
+
type StnRadioGroupLayout = 'column' | 'row';
|
|
1413
|
+
type StnRadioGroupOrientation = 'horizontal' | 'vertical';
|
|
1414
|
+
type StnRadioGroupProps = {
|
|
1415
|
+
name?: string;
|
|
1416
|
+
value?: string;
|
|
1417
|
+
defaultValue?: string;
|
|
1418
|
+
onChange?: (value: string) => void;
|
|
1419
|
+
options: readonly StnRadioGroupOption[];
|
|
1420
|
+
/** 배치 방향 ('horizontal' | 'vertical') @default 'vertical' */
|
|
1421
|
+
orientation?: StnRadioGroupOrientation;
|
|
1422
|
+
/** column — 세로 나열 · row — 가로 나열 (기존 호환성) */
|
|
1423
|
+
layout?: StnRadioGroupLayout | 'inline';
|
|
1424
|
+
/** 크기 ('sm' | 'md' | 'lg') */
|
|
1425
|
+
size?: StnRadioSize;
|
|
1426
|
+
/** 색상 톤 */
|
|
1427
|
+
color?: StnRadioColor;
|
|
1428
|
+
disabled?: boolean;
|
|
1429
|
+
className?: string;
|
|
1430
|
+
'aria-label'?: string;
|
|
1431
|
+
};
|
|
1432
|
+
declare function StnRadioGroup({ name: nameProp, value, defaultValue, onChange, options, orientation, layout, size, color, disabled, className, 'aria-label': ariaLabel, }: StnRadioGroupProps): react_jsx_runtime.JSX.Element;
|
|
1433
|
+
|
|
1434
|
+
type StnSegmentedSize = 'sm' | 'md' | 'lg';
|
|
1435
|
+
type StnSegmentedOrientation = 'horizontal' | 'vertical';
|
|
1436
|
+
type StnSegmentedColor = 'primary' | 'secondary' | 'success' | 'critical' | 'major' | 'minor' | 'warning' | 'neutral';
|
|
1437
|
+
type StnSegmentedOption = {
|
|
1438
|
+
value: string;
|
|
1439
|
+
label?: ReactNode;
|
|
1440
|
+
icon?: ReactNode;
|
|
1441
|
+
disabled?: boolean;
|
|
1442
|
+
'aria-label'?: string;
|
|
1443
|
+
};
|
|
1444
|
+
type StnSegmentedShared = StnWithoutStyle<{
|
|
1445
|
+
/** 탭 항목 목록 */
|
|
1446
|
+
options: readonly StnSegmentedOption[];
|
|
1447
|
+
/** 크기 ('sm': 26px, 'md': 32px 기본, 'lg': 40px) @default 'md' */
|
|
1448
|
+
size?: StnSegmentedSize;
|
|
1449
|
+
/** 활성 탭 시맨틱 솔리드 색상 */
|
|
1450
|
+
color?: StnSegmentedColor;
|
|
1451
|
+
/** 배치 방향 ('horizontal' | 'vertical') @default 'horizontal' */
|
|
1452
|
+
orientation?: StnSegmentedOrientation;
|
|
1453
|
+
/** 수직 세로 배치 여부 @default false */
|
|
1454
|
+
vertical?: boolean;
|
|
1455
|
+
/** 전체 너비 확장 여부 @default false */
|
|
1456
|
+
block?: boolean;
|
|
1457
|
+
/** 전체 비활성화 */
|
|
1458
|
+
disabled?: boolean;
|
|
1459
|
+
className?: string;
|
|
1460
|
+
name?: string;
|
|
1461
|
+
'aria-label'?: string;
|
|
1462
|
+
}>;
|
|
1463
|
+
type StnSegmentedSingleProps = StnSegmentedShared & {
|
|
1464
|
+
multiple?: false;
|
|
1465
|
+
value: string;
|
|
1466
|
+
onChange: (value: string) => void;
|
|
1467
|
+
};
|
|
1468
|
+
type StnSegmentedMultipleProps = StnSegmentedShared & {
|
|
1469
|
+
multiple: true;
|
|
1470
|
+
value: readonly string[];
|
|
1471
|
+
onChange: (value: string[]) => void;
|
|
1472
|
+
};
|
|
1473
|
+
type StnSegmentedProps = StnSegmentedSingleProps | StnSegmentedMultipleProps;
|
|
1474
|
+
/**
|
|
1475
|
+
* Pill segmented control — Pub `.stn-segmented`
|
|
1476
|
+
* 기본은 하나만 선택. `multiple`이면 1개도, 여러 개도 고를 수 있다.
|
|
1477
|
+
* 아이콘 전용, 아이콘 + 텍스트, 크기(sm/md/lg), 수직(vertical) 배치를 지원합니다.
|
|
1478
|
+
*/
|
|
1479
|
+
declare function StnSegmented(props: StnSegmentedProps): react_jsx_runtime.JSX.Element;
|
|
1480
|
+
|
|
1481
|
+
type StnDropdownProps = {
|
|
1482
|
+
/** 드롭다운 옵션 목록 */
|
|
1483
|
+
options: StnDropdownOption[];
|
|
1484
|
+
/** 드롭다운 높이 규격: sm (24px) | md (32px, 기본값) | lg (40px) | xl (52px) */
|
|
1485
|
+
size?: StnDropdownSize;
|
|
1486
|
+
/** 외형 스타일 변형: outline (기본) | standard (하단 라인만) | filled (배경 채움) */
|
|
1487
|
+
variant?: StnDropdownVariant;
|
|
1488
|
+
/** 특수 레이아웃 수식어 */
|
|
1489
|
+
modifier?: StnDropdownModifier;
|
|
1490
|
+
/** 선택된 값 (Controlled) */
|
|
1491
|
+
value?: string;
|
|
1492
|
+
/** 초기 기본값 (Uncontrolled) */
|
|
1493
|
+
defaultValue?: string;
|
|
1494
|
+
/** 선택 변경 핸들러 */
|
|
1495
|
+
onChange?: (value: string) => void;
|
|
1496
|
+
/** 비활성화 여부 */
|
|
1497
|
+
disabled?: boolean;
|
|
1498
|
+
/** 오류 상태 (빨간색 테두리 및 헬퍼 텍스트) */
|
|
1499
|
+
error?: boolean;
|
|
1500
|
+
/** 읽기 전용 상태 (선택 변경 불가) */
|
|
1501
|
+
readOnly?: boolean;
|
|
1502
|
+
/** 선택되지 않았을 때 표시할 안내 문구 */
|
|
1503
|
+
placeholder?: string;
|
|
1504
|
+
/** 필드 보조 텍스트 (도움말/에러 안내) */
|
|
1505
|
+
helperText?: ReactNode;
|
|
1506
|
+
/** 보조 텍스트 위치 (top | bottom | left | right, 기본값 bottom) */
|
|
1507
|
+
helperTextPosition?: StnDropdownHelperTextPosition;
|
|
1508
|
+
/** 메뉴 열림 방향: down (기본값 · 아래로 열림) | up (위로 열림) */
|
|
1509
|
+
direction?: StnDropdownDirection;
|
|
1510
|
+
/**
|
|
1511
|
+
* 검색 특화 52px 대형 메뉴 (`stn-dropdown--prominent`).
|
|
1512
|
+
* `size="xl"` 사용 권장.
|
|
1513
|
+
*/
|
|
1514
|
+
prominent?: boolean;
|
|
1515
|
+
/** width 100% — `stn-dropdown--full w100p` */
|
|
1516
|
+
fullWidth?: boolean;
|
|
1517
|
+
/** 프리셋 80·100·140·180·200 · `100%`/`full` · 그 외 px/string */
|
|
1518
|
+
width?: StnInputWidthValue;
|
|
1519
|
+
className?: string;
|
|
1520
|
+
id?: string;
|
|
1521
|
+
'aria-label'?: string;
|
|
1522
|
+
} & StnWithoutStyle<Omit<HTMLAttributes<HTMLDivElement>, 'value' | 'defaultValue' | 'onChange' | 'children' | 'className' | 'style' | 'id' | 'aria-label'>>;
|
|
1523
|
+
/**
|
|
1524
|
+
* StnDropdown — 디자인 시스템 표준 커스텀 드롭다운 (`div.selected` + `ul.select_option`).
|
|
1525
|
+
*/
|
|
1526
|
+
declare function StnDropdown({ options, size, variant, direction, modifier, value: valueProp, defaultValue, onChange, disabled, error, readOnly, placeholder, helperText, helperTextPosition, prominent, fullWidth, width, className, id: idProp, 'aria-label': ariaLabel, ...divRest }: StnDropdownProps): react_jsx_runtime.JSX.Element;
|
|
1527
|
+
|
|
1528
|
+
type StnDropdownMenuProps = Omit<StnDropdownProps, 'size' | 'modifier'>;
|
|
1529
|
+
/**
|
|
1530
|
+
* Pub 커스텀 메뉴 (`.stn-dropdown` + `.selected` + `.select_option`).
|
|
1531
|
+
* CCTV·simple_board 검색줄 — **52px prominent** (`stn-dropdown--prominent`).
|
|
1532
|
+
* 일반 sm/md/lg 스케일은 `StnDropdown` size prop 사용.
|
|
1533
|
+
*/
|
|
1534
|
+
declare function StnDropdownMenu({ className, ...rest }: StnDropdownMenuProps): react_jsx_runtime.JSX.Element;
|
|
1535
|
+
|
|
1536
|
+
type StnTextFieldVariant = 'outlined' | 'filled' | 'standard';
|
|
1537
|
+
/** 색 — 기본 primary. 토큰: --stn-feedback-* */
|
|
1538
|
+
type StnTextFieldColor = 'primary' | 'success' | 'error' | 'warning' | 'info' | 'secondary';
|
|
1539
|
+
/** 아이콘 위치 — left | right */
|
|
1540
|
+
type StnTextFieldIconPosition = 'left' | 'right';
|
|
1541
|
+
/** 라벨 위치 — left | right | top */
|
|
1542
|
+
type StnTextFieldLabelPosition = 'left' | 'right' | 'top';
|
|
1543
|
+
type StnTextFieldSizeProp = StnTextFieldSize | 's' | 'm' | 'l' | 'xl' | 'sm' | 'md' | 'lg';
|
|
1544
|
+
type StnTextFieldProps = StnWithoutStyle<Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'color'>> & {
|
|
1545
|
+
size?: StnTextFieldSizeProp;
|
|
1546
|
+
/** outlined = box · filled = fill · standard = underline */
|
|
1547
|
+
variant?: StnTextFieldVariant;
|
|
1548
|
+
/** 피드백 색 — primary/secondary는 기본 테두리. success·error·warning·info = --stn-feedback-* */
|
|
1549
|
+
color?: StnTextFieldColor;
|
|
1550
|
+
/** 오류 테두리 — `aria-invalid`도 함께 설정 */
|
|
1551
|
+
invalid?: boolean;
|
|
1552
|
+
/** width 100% — `stn-text-field--full` */
|
|
1553
|
+
fullWidth?: boolean;
|
|
1554
|
+
/** 프리셋 80·100·140·180·200 · `100%`/`full` · 그 외 px/string */
|
|
1555
|
+
width?: StnInputWidthValue;
|
|
1556
|
+
/** 라벨 텍스트 또는 노드 */
|
|
1557
|
+
label?: ReactNode;
|
|
1558
|
+
/** 라벨 위치 ('left' | 'right' | 'top') - 기본 'left' */
|
|
1559
|
+
labelPosition?: StnTextFieldLabelPosition;
|
|
1560
|
+
/** 필수 입력 여부 (`*` 표시) */
|
|
1561
|
+
required?: boolean;
|
|
1562
|
+
/** 왼쪽 아이콘 — Iconography slug (`line/user`) 또는 ReactNode. 로그인 등 고정 왼쪽 슬롯 */
|
|
1563
|
+
prefix?: ReactNode;
|
|
1564
|
+
/** 오른쪽 아이콘 — slug 또는 ReactNode */
|
|
1565
|
+
suffix?: ReactNode;
|
|
1566
|
+
/** 아이콘 — slug 또는 ReactNode. 위치는 iconPosition */
|
|
1567
|
+
icon?: ReactNode;
|
|
1568
|
+
/** 아이콘 위치 · icon 지정 시 기본 left */
|
|
1569
|
+
iconPosition?: StnTextFieldIconPosition;
|
|
1570
|
+
/** 필드 하단 왼쪽 캡션 */
|
|
1571
|
+
helperText?: ReactNode;
|
|
1572
|
+
className?: string;
|
|
1573
|
+
};
|
|
1574
|
+
declare const StnTextField: react.ForwardRefExoticComponent<StnWithoutStyle<Omit<InputHTMLAttributes<HTMLInputElement>, "color" | "size">> & {
|
|
1575
|
+
size?: StnTextFieldSizeProp;
|
|
1576
|
+
/** outlined = box · filled = fill · standard = underline */
|
|
1577
|
+
variant?: StnTextFieldVariant;
|
|
1578
|
+
/** 피드백 색 — primary/secondary는 기본 테두리. success·error·warning·info = --stn-feedback-* */
|
|
1579
|
+
color?: StnTextFieldColor;
|
|
1580
|
+
/** 오류 테두리 — `aria-invalid`도 함께 설정 */
|
|
1581
|
+
invalid?: boolean;
|
|
1582
|
+
/** width 100% — `stn-text-field--full` */
|
|
1583
|
+
fullWidth?: boolean;
|
|
1584
|
+
/** 프리셋 80·100·140·180·200 · `100%`/`full` · 그 외 px/string */
|
|
1585
|
+
width?: StnInputWidthValue;
|
|
1586
|
+
/** 라벨 텍스트 또는 노드 */
|
|
1587
|
+
label?: ReactNode;
|
|
1588
|
+
/** 라벨 위치 ('left' | 'right' | 'top') - 기본 'left' */
|
|
1589
|
+
labelPosition?: StnTextFieldLabelPosition;
|
|
1590
|
+
/** 필수 입력 여부 (`*` 표시) */
|
|
1591
|
+
required?: boolean;
|
|
1592
|
+
/** 왼쪽 아이콘 — Iconography slug (`line/user`) 또는 ReactNode. 로그인 등 고정 왼쪽 슬롯 */
|
|
1593
|
+
prefix?: ReactNode;
|
|
1594
|
+
/** 오른쪽 아이콘 — slug 또는 ReactNode */
|
|
1595
|
+
suffix?: ReactNode;
|
|
1596
|
+
/** 아이콘 — slug 또는 ReactNode. 위치는 iconPosition */
|
|
1597
|
+
icon?: ReactNode;
|
|
1598
|
+
/** 아이콘 위치 · icon 지정 시 기본 left */
|
|
1599
|
+
iconPosition?: StnTextFieldIconPosition;
|
|
1600
|
+
/** 필드 하단 왼쪽 캡션 */
|
|
1601
|
+
helperText?: ReactNode;
|
|
1602
|
+
className?: string;
|
|
1603
|
+
} & react.RefAttributes<HTMLInputElement>>;
|
|
1604
|
+
|
|
1605
|
+
type StnDateRangeFieldProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'value'> & {
|
|
1606
|
+
size?: StnDateRangeFieldSize | 's' | 'm' | 'l' | 'sm' | 'md' | 'lg';
|
|
1607
|
+
start?: Date | string | null;
|
|
1608
|
+
end?: Date | string | null;
|
|
1609
|
+
/** 표시 포맷 — 기본 `YYYY-MM-DD HH:mm:ss` */
|
|
1610
|
+
format?: (date: Date) => string;
|
|
1611
|
+
startPlaceholder?: string;
|
|
1612
|
+
endPlaceholder?: string;
|
|
1613
|
+
invalid?: boolean;
|
|
1614
|
+
fullWidth?: boolean;
|
|
1615
|
+
width?: number | string;
|
|
1616
|
+
className?: string;
|
|
1617
|
+
};
|
|
1618
|
+
declare const StnDateRangeField: react.ForwardRefExoticComponent<Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children" | "value"> & {
|
|
1619
|
+
size?: StnDateRangeFieldSize | "s" | "m" | "l" | "sm" | "md" | "lg";
|
|
1620
|
+
start?: Date | string | null;
|
|
1621
|
+
end?: Date | string | null;
|
|
1622
|
+
/** 표시 포맷 — 기본 `YYYY-MM-DD HH:mm:ss` */
|
|
1623
|
+
format?: (date: Date) => string;
|
|
1624
|
+
startPlaceholder?: string;
|
|
1625
|
+
endPlaceholder?: string;
|
|
1626
|
+
invalid?: boolean;
|
|
1627
|
+
fullWidth?: boolean;
|
|
1628
|
+
width?: number | string;
|
|
1629
|
+
className?: string;
|
|
1630
|
+
} & react.RefAttributes<HTMLButtonElement>>;
|
|
1631
|
+
|
|
1632
|
+
type StnSearchRequirementBarProps = HTMLAttributes<HTMLDivElement> & {
|
|
1633
|
+
children?: ReactNode;
|
|
1634
|
+
className?: string;
|
|
1635
|
+
/**
|
|
1636
|
+
* 여백 밀도
|
|
1637
|
+
* - default: padding 8px 16px, gap 16px
|
|
1638
|
+
* - compact: padding 6px 12px, gap 12px
|
|
1639
|
+
*/
|
|
1640
|
+
density?: 'default' | 'compact';
|
|
1641
|
+
};
|
|
1642
|
+
/**
|
|
1643
|
+
* 검색조건 바 — 직접 자식으로 Fields · SearchButton · Export(선택)를 둡니다.
|
|
1644
|
+
* Export는 `margin-left: auto`로 우측 정렬됩니다. Main/export 트레이 래퍼 없음.
|
|
1645
|
+
*/
|
|
1646
|
+
declare function StnSearchRequirementBar({ children, className, density, ...rest }: StnSearchRequirementBarProps): react_jsx_runtime.JSX.Element;
|
|
1647
|
+
declare namespace StnSearchRequirementBar {
|
|
1648
|
+
var Fields: typeof StnSearchRequirementBarFields;
|
|
1649
|
+
var Field: typeof StnSearchRequirementBarField;
|
|
1650
|
+
var SearchButton: typeof StnSearchRequirementBarSearchButton;
|
|
1651
|
+
var Export: typeof StnSearchRequirementBarExport;
|
|
1652
|
+
var Divider: typeof StnSearchRequirementBarDivider;
|
|
1653
|
+
}
|
|
1654
|
+
type StnSearchRequirementBarFieldsProps = HTMLAttributes<HTMLDivElement> & {
|
|
1655
|
+
children?: ReactNode;
|
|
1656
|
+
className?: string;
|
|
1657
|
+
};
|
|
1658
|
+
declare function StnSearchRequirementBarFields({ children, className, ...rest }: StnSearchRequirementBarFieldsProps): react_jsx_runtime.JSX.Element;
|
|
1659
|
+
type StnSearchRequirementBarFieldProps = HTMLAttributes<HTMLDivElement> & {
|
|
1660
|
+
label: ReactNode;
|
|
1661
|
+
children?: ReactNode;
|
|
1662
|
+
className?: string;
|
|
1663
|
+
labelClassName?: string;
|
|
1664
|
+
controlClassName?: string;
|
|
1665
|
+
};
|
|
1666
|
+
declare function StnSearchRequirementBarField({ label, children, className, labelClassName, controlClassName, ...rest }: StnSearchRequirementBarFieldProps): react_jsx_runtime.JSX.Element;
|
|
1667
|
+
type StnSearchRequirementBarSearchButtonProps = StnButtonProps;
|
|
1668
|
+
declare function StnSearchRequirementBarSearchButton({ children, size, icon, className, ...rest }: StnSearchRequirementBarSearchButtonProps): react_jsx_runtime.JSX.Element;
|
|
1669
|
+
type StnSearchRequirementBarExportProps = Omit<StnButtonProps, 'children' | 'icon'> & {
|
|
1670
|
+
/** 기본 `line/file-analytics` (엑셀/다운로드) */
|
|
1671
|
+
name?: string;
|
|
1672
|
+
icon?: StnButtonProps['icon'];
|
|
1673
|
+
};
|
|
1674
|
+
declare function StnSearchRequirementBarExport({ className, name, icon, variant, size, 'aria-label': ariaLabel, ...rest }: StnSearchRequirementBarExportProps): react_jsx_runtime.JSX.Element;
|
|
1675
|
+
type StnSearchRequirementBarDividerProps = HTMLAttributes<HTMLSpanElement> & {
|
|
1676
|
+
className?: string;
|
|
1677
|
+
};
|
|
1678
|
+
declare function StnSearchRequirementBarDivider({ className, ...rest }: StnSearchRequirementBarDividerProps): react_jsx_runtime.JSX.Element;
|
|
1679
|
+
|
|
1680
|
+
type StnSearchRequirementBarDemoProps = {
|
|
1681
|
+
onSearch?: () => void;
|
|
1682
|
+
onExport?: () => void;
|
|
1683
|
+
className?: string;
|
|
1684
|
+
};
|
|
1685
|
+
/** Figma 40000042:186893 — 보고서 검색조건 기본 조합 */
|
|
1686
|
+
declare function StnSearchRequirementBarDemo({ onSearch, onExport, className }: StnSearchRequirementBarDemoProps): react_jsx_runtime.JSX.Element;
|
|
1687
|
+
|
|
1688
|
+
type StnHeaderProps = HTMLAttributes<HTMLElement> & {
|
|
1689
|
+
/**
|
|
1690
|
+
* @deprecated Header는 Left, Center, Right 슬롯 구성에 따라 레이아웃이 자동 결정되므로 variant 지정이 필요하지 않습니다. 하위 호환성을 위해 유지됩니다.
|
|
1691
|
+
*/
|
|
1692
|
+
variant?: StnHeaderVariant;
|
|
1693
|
+
padding?: StnHeaderPadding | number | string;
|
|
1694
|
+
gap?: StnHeaderGap | number | string;
|
|
1695
|
+
children?: ReactNode;
|
|
1696
|
+
className?: string;
|
|
1697
|
+
style?: CSSProperties;
|
|
1698
|
+
};
|
|
1699
|
+
declare function StnHeader({ variant, padding, gap, children, className, style, ...rest }: StnHeaderProps): react_jsx_runtime.JSX.Element;
|
|
1700
|
+
declare namespace StnHeader {
|
|
1701
|
+
var Left: typeof StnHeaderLeft;
|
|
1702
|
+
var Center: typeof StnHeaderCenter;
|
|
1703
|
+
var Right: typeof StnHeaderRight;
|
|
1704
|
+
var TitleGroup: typeof StnHeaderTitleGroup;
|
|
1705
|
+
}
|
|
1706
|
+
type StnHeaderRegionProps = HTMLAttributes<HTMLDivElement> & {
|
|
1707
|
+
children?: ReactNode;
|
|
1708
|
+
className?: string;
|
|
1709
|
+
};
|
|
1710
|
+
declare function StnHeaderLeft({ children, className, ...rest }: StnHeaderRegionProps): react_jsx_runtime.JSX.Element;
|
|
1711
|
+
declare function StnHeaderCenter({ children, className, ...rest }: StnHeaderRegionProps): react_jsx_runtime.JSX.Element;
|
|
1712
|
+
declare function StnHeaderRight({ children, className, ...rest }: StnHeaderRegionProps): react_jsx_runtime.JSX.Element;
|
|
1713
|
+
type StnHeaderTitleGroupProps = HTMLAttributes<HTMLDivElement> & {
|
|
1714
|
+
children?: ReactNode;
|
|
1715
|
+
className?: string;
|
|
1716
|
+
};
|
|
1717
|
+
declare function StnHeaderTitleGroup({ children, className, ...rest }: StnHeaderTitleGroupProps): react_jsx_runtime.JSX.Element;
|
|
1718
|
+
type StnHeaderPageTitleProps = HTMLAttributes<HTMLHeadingElement> & {
|
|
1719
|
+
children: ReactNode;
|
|
1720
|
+
className?: string;
|
|
1721
|
+
};
|
|
1722
|
+
declare function StnHeaderPageTitle({ children, className, title, ...rest }: StnHeaderPageTitleProps): react_jsx_runtime.JSX.Element;
|
|
1723
|
+
declare function StnHeaderSubTitle({ children, className, title, ...rest }: StnHeaderPageTitleProps): react_jsx_runtime.JSX.Element;
|
|
1724
|
+
declare function StnHeaderContextTitle({ children, className, title, ...rest }: StnHeaderPageTitleProps): react_jsx_runtime.JSX.Element;
|
|
1725
|
+
type StnHeaderToolbarProps = HTMLAttributes<HTMLDivElement> & {
|
|
1726
|
+
children?: ReactNode;
|
|
1727
|
+
className?: string;
|
|
1728
|
+
};
|
|
1729
|
+
declare function StnHeaderToolbar({ children, className, ...rest }: StnHeaderToolbarProps): react_jsx_runtime.JSX.Element;
|
|
1730
|
+
|
|
1731
|
+
/** 단색 L0 — 지금은 default만. 장면이 생기면 타입을 추가합니다. */
|
|
1732
|
+
type StnLayer0BackgroundColor = 'default';
|
|
1733
|
+
type StnLayer0BackgroundProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
|
|
1734
|
+
/** 디자인 시스템 사전 정의 프리셋 ('dashboard' | 'login' | 'map-light' | 'showroom-a' | 'showroom-b' | 'none') */
|
|
1735
|
+
variant?: StnLayer0BackgroundPreset;
|
|
1736
|
+
/** 채움 방식. 기본 color. `src`가 있으면 image로 봅니다. */
|
|
1737
|
+
kind?: StnLayer0BackgroundKind;
|
|
1738
|
+
/** 단색 named look. 기본 default (`--stn-elevation-surface-0`) */
|
|
1739
|
+
color?: StnLayer0BackgroundColor;
|
|
1740
|
+
/** 이미지 배경 — light(또는 단일) URL. 있으면 단색이 아닙니다. */
|
|
1741
|
+
src?: string;
|
|
1742
|
+
/** image kind — dark 전용 이미지 (있으면 테마에 따라 전환) */
|
|
1743
|
+
srcDark?: string;
|
|
1744
|
+
/** image kind — 흰색 오버레이 0~1 (Figma map-light light: 0.2) · 다크에서는 숨김 */
|
|
1745
|
+
overlay?: number;
|
|
1746
|
+
/** image kind — dark 전용 radial vignette (Figma showroom-b dark) */
|
|
1747
|
+
overlayDarkRadial?: boolean;
|
|
1748
|
+
/** image kind — 장식 이미지 대체 텍스트 (빈 문자열이면 aria-hidden) */
|
|
1749
|
+
alt?: string;
|
|
1750
|
+
className?: string;
|
|
1751
|
+
};
|
|
1752
|
+
/**
|
|
1753
|
+
* Layer 0 page background — 프리셋은 `variant`, 단색은 `color`, 임의 URL은 `src`.
|
|
1754
|
+
* `src` + `srcDark` 를 같이 주면 `data-theme` 에 맞춰 전환합니다.
|
|
1755
|
+
*/
|
|
1756
|
+
declare function StnLayer0Background({ variant, kind: kindProp, color, src: srcProp, srcDark: srcDarkProp, overlay: overlayProp, overlayDarkRadial: overlayDarkRadialProp, alt, className, style, ...rest }: StnLayer0BackgroundProps): react_jsx_runtime.JSX.Element;
|
|
1757
|
+
|
|
1758
|
+
type StnDateRangePickerProps = {
|
|
1759
|
+
open: boolean;
|
|
1760
|
+
value: StnDateRange;
|
|
1761
|
+
onChange?: (value: StnDateRange) => void;
|
|
1762
|
+
onApply?: (value: StnDateRange) => void;
|
|
1763
|
+
onClose?: () => void;
|
|
1764
|
+
showTime?: boolean;
|
|
1765
|
+
className?: string;
|
|
1766
|
+
style?: CSSProperties;
|
|
1767
|
+
/** portal positioning — `StnDateRangePickerField`가 전달 */
|
|
1768
|
+
anchorRect?: DOMRect | null;
|
|
1769
|
+
};
|
|
1770
|
+
declare function StnDateRangePicker({ open, value, onChange, onApply, onClose, showTime, className, style, anchorRect, }: StnDateRangePickerProps): react_jsx_runtime.JSX.Element | null;
|
|
1771
|
+
|
|
1772
|
+
type StnDateRangePickerFieldProps = Omit<StnDateRangeFieldProps, 'start' | 'end' | 'onClick' | 'defaultValue' | 'value' | 'onChange'> & {
|
|
1773
|
+
value?: StnDateRange;
|
|
1774
|
+
defaultValue?: StnDateRange;
|
|
1775
|
+
onChange?: (value: StnDateRange) => void;
|
|
1776
|
+
showTime?: boolean;
|
|
1777
|
+
format?: (date: Date) => string;
|
|
1778
|
+
pickerClassName?: string;
|
|
1779
|
+
pickerStyle?: CSSProperties;
|
|
1780
|
+
};
|
|
1781
|
+
declare function StnDateRangePickerField({ value: valueProp, defaultValue, onChange, showTime, format, className, pickerClassName, pickerStyle, disabled, ...fieldProps }: StnDateRangePickerFieldProps): react_jsx_runtime.JSX.Element;
|
|
1782
|
+
|
|
1783
|
+
type StnTopologyNodeStatus = 'normal' | 'minor' | 'major' | 'critical' | 'warning';
|
|
1784
|
+
type StnTopologyNodeShape = 'circle' | 'hexagon' | 'diamond' | 'square';
|
|
1785
|
+
type StnTopologyNodeSize = 'xs' | 'sm' | 'md' | 'lg';
|
|
1786
|
+
/** 노드 본문 — 아이콘 또는 수량 숫자 */
|
|
1787
|
+
type StnTopologyNodeContent = 'icon' | 'count';
|
|
1788
|
+
type StnTopologyNodeIcon = 'server' | 'cloud' | 'ai' | 'network' | 'shield' | 'user' | 'database' | 'wifi';
|
|
1789
|
+
declare const STN_TOPOLOGY_NODE_SHAPES: readonly StnTopologyNodeShape[];
|
|
1790
|
+
declare const STN_TOPOLOGY_NODE_SIZES: readonly StnTopologyNodeSize[];
|
|
1791
|
+
declare const STN_TOPOLOGY_NODE_STATUSES: readonly StnTopologyNodeStatus[];
|
|
1792
|
+
declare const STN_TOPOLOGY_NODE_ICONS: readonly StnTopologyNodeIcon[];
|
|
1793
|
+
type StnTopologyStatusTone = {
|
|
1794
|
+
main: string;
|
|
1795
|
+
glow: string;
|
|
1796
|
+
text: string;
|
|
1797
|
+
label: string;
|
|
1798
|
+
};
|
|
1799
|
+
declare const STN_TOPOLOGY_STATUS_COLORS: Record<StnTopologyNodeStatus, StnTopologyStatusTone>;
|
|
1800
|
+
declare const STN_TOPOLOGY_NODE_SIZE: Record<StnTopologyNodeSize, {
|
|
1801
|
+
r: number;
|
|
1802
|
+
icon: number;
|
|
1803
|
+
countFont: number;
|
|
1804
|
+
labelFont: number;
|
|
1805
|
+
statusFont: number;
|
|
1806
|
+
stroke: number;
|
|
1807
|
+
}>;
|
|
1808
|
+
declare function formatTopologyCount(count: number | string | undefined): string;
|
|
1809
|
+
type StnTopologyNode = {
|
|
1810
|
+
id: string;
|
|
1811
|
+
label: string;
|
|
1812
|
+
status?: StnTopologyNodeStatus;
|
|
1813
|
+
statusLabel?: string;
|
|
1814
|
+
icon?: StnTopologyNodeIcon | ReactNode;
|
|
1815
|
+
shape?: StnTopologyNodeShape;
|
|
1816
|
+
size?: StnTopologyNodeSize;
|
|
1817
|
+
content?: StnTopologyNodeContent;
|
|
1818
|
+
/** 노드 본문 숫자(`content: 'count'`) 또는 아이콘 위 뱃지 */
|
|
1819
|
+
count?: number | string;
|
|
1820
|
+
color?: string;
|
|
1821
|
+
/** 링 상의 각도 (0~360). 미지정 시 균등 분할 */
|
|
1822
|
+
angle?: number;
|
|
1823
|
+
/** 1-based 궤도 번호 (안쪽 → 바깥쪽). 미지정 시 메인 궤도 */
|
|
1824
|
+
orbit?: number;
|
|
1825
|
+
subText?: string;
|
|
1826
|
+
data?: unknown;
|
|
1827
|
+
pulse?: boolean;
|
|
1828
|
+
};
|
|
1829
|
+
type StnTopologyCore = {
|
|
1830
|
+
title?: string;
|
|
1831
|
+
subTitle?: string;
|
|
1832
|
+
status?: StnTopologyNodeStatus;
|
|
1833
|
+
statusLabel?: string;
|
|
1834
|
+
icon?: ReactNode;
|
|
1835
|
+
color?: string;
|
|
1836
|
+
};
|
|
1837
|
+
|
|
1838
|
+
type StnTopologyRingProps = Omit<HTMLAttributes<HTMLDivElement>, 'title'> & {
|
|
1839
|
+
/** 중앙 코어 노드 정보 */
|
|
1840
|
+
core?: StnTopologyCore;
|
|
1841
|
+
/** 둘레 궤도 상의 관제 노드 목록 */
|
|
1842
|
+
nodes?: StnTopologyNode[];
|
|
1843
|
+
/** 궤도(링) 개수 (기본 3단계 동심원) */
|
|
1844
|
+
ringCount?: number;
|
|
1845
|
+
/** 메인 궤도 반경 (SVG 단위, 기본 115) */
|
|
1846
|
+
orbitRadius?: number;
|
|
1847
|
+
/** 궤도 간격 (기본 36) */
|
|
1848
|
+
ringGap?: number;
|
|
1849
|
+
/** 노드 기본 크기 */
|
|
1850
|
+
nodeSize?: StnTopologyNodeSize;
|
|
1851
|
+
/** 중앙 연결 선 스타일 */
|
|
1852
|
+
connectionLineStyle?: 'solid' | 'dashed' | 'none';
|
|
1853
|
+
/** 선택 하이라이트 노드 id */
|
|
1854
|
+
selectedId?: string;
|
|
1855
|
+
/** 노드 클릭 핸들러 */
|
|
1856
|
+
onNodeClick?: (node: StnTopologyNode) => void;
|
|
1857
|
+
/** 스켈레톤 로딩 상태 */
|
|
1858
|
+
loading?: boolean;
|
|
1859
|
+
className?: string;
|
|
1860
|
+
style?: CSSProperties;
|
|
1861
|
+
};
|
|
1862
|
+
/**
|
|
1863
|
+
* StnTopologyRing — 종합 관제 원형 궤도 토폴로지
|
|
1864
|
+
*
|
|
1865
|
+
* - 동심원 궤도 (orbitRadius · ringCount · 노드별 orbit)
|
|
1866
|
+
* - 노드 크기(xs~lg) · 모양(circle/hexagon/diamond/square) · 상태색
|
|
1867
|
+
* - 본문 타입: 아이콘 또는 수량 숫자
|
|
1868
|
+
*/
|
|
1869
|
+
declare function StnTopologyRing({ core, nodes, ringCount, orbitRadius, ringGap, nodeSize, connectionLineStyle, selectedId, onNodeClick, loading, className, style, ...rest }: StnTopologyRingProps): react_jsx_runtime.JSX.Element;
|
|
1870
|
+
|
|
1871
|
+
type StnTopologyGraphNode = {
|
|
1872
|
+
id: string;
|
|
1873
|
+
x: number;
|
|
1874
|
+
y: number;
|
|
1875
|
+
z?: number;
|
|
1876
|
+
label?: string;
|
|
1877
|
+
status?: StnTopologyNodeStatus;
|
|
1878
|
+
statusLabel?: string;
|
|
1879
|
+
isCore?: boolean;
|
|
1880
|
+
color?: string;
|
|
1881
|
+
pulse?: boolean;
|
|
1882
|
+
shape?: StnTopologyNodeShape;
|
|
1883
|
+
size?: StnTopologyNodeSize;
|
|
1884
|
+
content?: StnTopologyNodeContent;
|
|
1885
|
+
count?: number | string;
|
|
1886
|
+
icon?: StnTopologyNodeIcon;
|
|
1887
|
+
};
|
|
1888
|
+
type StnTopologyGraphLink = {
|
|
1889
|
+
source: string;
|
|
1890
|
+
target: string;
|
|
1891
|
+
status?: StnTopologyNodeStatus;
|
|
1892
|
+
dashed?: boolean;
|
|
1893
|
+
};
|
|
1894
|
+
type StnTopologyGraphProps = Omit<HTMLAttributes<HTMLDivElement>, 'title'> & {
|
|
1895
|
+
defaultMode?: '2D' | '3D';
|
|
1896
|
+
showModeToggle?: boolean;
|
|
1897
|
+
showMinimap?: boolean;
|
|
1898
|
+
nodes?: StnTopologyGraphNode[];
|
|
1899
|
+
links?: StnTopologyGraphLink[];
|
|
1900
|
+
nodeSize?: StnTopologyNodeSize;
|
|
1901
|
+
selectedId?: string;
|
|
1902
|
+
onNodeClick?: (node: StnTopologyGraphNode) => void;
|
|
1903
|
+
loading?: boolean;
|
|
1904
|
+
className?: string;
|
|
1905
|
+
style?: CSSProperties;
|
|
1906
|
+
};
|
|
1907
|
+
/**
|
|
1908
|
+
* StnTopologyGraph — 관제 2D/3D 퍼스펙티브 네트워크 토폴로지
|
|
1909
|
+
*/
|
|
1910
|
+
declare function StnTopologyGraph({ defaultMode, showModeToggle, showMinimap, nodes, links, nodeSize, selectedId, onNodeClick, loading, className, style, ...rest }: StnTopologyGraphProps): react_jsx_runtime.JSX.Element;
|
|
1911
|
+
|
|
1912
|
+
type StnTopologyNodeMarkProps = Omit<SVGAttributes<SVGGElement>, 'onClick'> & {
|
|
1913
|
+
x: number;
|
|
1914
|
+
y: number;
|
|
1915
|
+
size?: StnTopologyNodeSize;
|
|
1916
|
+
shape?: StnTopologyNodeShape;
|
|
1917
|
+
status?: StnTopologyNodeStatus;
|
|
1918
|
+
color?: string;
|
|
1919
|
+
content?: StnTopologyNodeContent;
|
|
1920
|
+
icon?: StnTopologyNodeIcon | ReactNode;
|
|
1921
|
+
count?: number | string;
|
|
1922
|
+
label?: string;
|
|
1923
|
+
statusLabel?: string;
|
|
1924
|
+
pulse?: boolean;
|
|
1925
|
+
selected?: boolean;
|
|
1926
|
+
showLabel?: boolean;
|
|
1927
|
+
showStatus?: boolean;
|
|
1928
|
+
onClick?: () => void;
|
|
1929
|
+
};
|
|
1930
|
+
/**
|
|
1931
|
+
* StnTopologyNodeMark — 토폴로지 노드 시각 단위 (크기 · 모양 · 색 · 아이콘/숫자)
|
|
1932
|
+
*/
|
|
1933
|
+
declare function StnTopologyNodeMark({ x, y, size, shape, status, color, content, icon, count, label, statusLabel, pulse, selected, showLabel, showStatus, onClick, className, ...rest }: StnTopologyNodeMarkProps): react_jsx_runtime.JSX.Element;
|
|
1934
|
+
type StnTopologyNodePreviewProps = Omit<StnTopologyNodeMarkProps, 'x' | 'y'> & {
|
|
1935
|
+
width?: number;
|
|
1936
|
+
height?: number;
|
|
1937
|
+
};
|
|
1938
|
+
/** 문서·팔레트용 단독 노드 프리뷰 */
|
|
1939
|
+
declare function StnTopologyNodePreview({ width, height, size, showLabel, showStatus, ...rest }: StnTopologyNodePreviewProps): react_jsx_runtime.JSX.Element;
|
|
1940
|
+
|
|
1941
|
+
type StnWidgetBackground = boolean | StnWidgetBackgroundMode;
|
|
1942
|
+
type StnWidgetStatus = 'default' | 'critical' | 'major' | 'minor' | 'warning';
|
|
1943
|
+
type StnWidgetPadding = 'default' | 'compact' | 'none';
|
|
1944
|
+
type StnWidgetProps = Omit<HTMLAttributes<HTMLDivElement>, 'className' | 'title'> & {
|
|
1945
|
+
className?: string;
|
|
1946
|
+
/** Pub 위젯 셸 — card | fault-panel | board | board-item | canvas (맵/토폴로지 마운트 셸) */
|
|
1947
|
+
shell?: StnWidgetShell;
|
|
1948
|
+
/** 위젯 variant 별칭 (shell과 동일: canvas 등 지정 가능) */
|
|
1949
|
+
variant?: StnWidgetShell;
|
|
1950
|
+
/**
|
|
1951
|
+
* Figma Widget Container 186:114582 — 설정 시 `background` 대신 appearance 면·그림자 사용
|
|
1952
|
+
*/
|
|
1953
|
+
appearance?: StnWidgetAppearance;
|
|
1954
|
+
/**
|
|
1955
|
+
* 배경 · L1 elevation (`appearance` 미설정 시)
|
|
1956
|
+
* - true | 'surface' — surface-widget + shadow
|
|
1957
|
+
* - false | 'none' — Pub `none-bg`
|
|
1958
|
+
*/
|
|
1959
|
+
background?: StnWidgetBackground;
|
|
1960
|
+
/** 위젯 관제/장애 상태 — 'critical' 시 2px 레드 보더 및 네온 글로우 */
|
|
1961
|
+
status?: StnWidgetStatus;
|
|
1962
|
+
/** 심각 장애 상태 편의 플래그 (.critical) */
|
|
1963
|
+
isCritical?: boolean;
|
|
1964
|
+
/** 위젯 종류 id (sample PNG 파일명 · data-stn-widget-kind) */
|
|
1965
|
+
kind?: string;
|
|
1966
|
+
title?: ReactNode;
|
|
1967
|
+
/** 타이틀 우측에 붙는 뱃지 슬롯 (예: <StnSeverityBadge />) */
|
|
1968
|
+
badge?: ReactNode;
|
|
1969
|
+
titleActions?: ReactNode;
|
|
1970
|
+
/** Figma 헤더 — 차트 아이콘 (appearance 설정 시 기본 true) */
|
|
1971
|
+
showHeaderIcon?: boolean;
|
|
1972
|
+
/** Iconography slug — `line/chart-histogram` 등 (`headerIcon` 미지정 시) */
|
|
1973
|
+
headerIconName?: string;
|
|
1974
|
+
headerIcon?: ReactNode;
|
|
1975
|
+
/** Figma 헤더 — 우측 슬롯: plain text (`periodLabel`) 또는 `periodActions` / `PeriodSelect` · `PeriodPager` */
|
|
1976
|
+
periodLabel?: ReactNode;
|
|
1977
|
+
periodActions?: ReactNode;
|
|
1978
|
+
/** card 셸 본문 — ds-widget-item__con */
|
|
1979
|
+
contentClassName?: string;
|
|
1980
|
+
/** 내부 여백 모드 — 기본(12px), compact(8px), none(0px) */
|
|
1981
|
+
padding?: StnWidgetPadding;
|
|
1982
|
+
/** padding: 0 (Pub none-bg 차트 위젯) */
|
|
1983
|
+
noPadding?: boolean;
|
|
1984
|
+
/** 로딩 상태 여부 */
|
|
1985
|
+
loading?: boolean;
|
|
1986
|
+
/** 빈 상태 여부 */
|
|
1987
|
+
empty?: boolean;
|
|
1988
|
+
/** 빈 상태 안내 문구 */
|
|
1989
|
+
emptyMessage?: ReactNode;
|
|
1990
|
+
/** 하단 푸터 슬롯 */
|
|
1991
|
+
footer?: ReactNode;
|
|
1992
|
+
/**
|
|
1993
|
+
* 카드 바깥에 붙는 플로팅 슬롯. `StnEventBanner`면 `status`와 같은 위험도로 맞춥니다.
|
|
1994
|
+
*/
|
|
1995
|
+
banner?: ReactNode;
|
|
1996
|
+
/** hover 애니메이션 및 인터랙션 유무 */
|
|
1997
|
+
interactive?: boolean;
|
|
1998
|
+
/** 문서용 hover 상태 고정 (appearance map · translucent) */
|
|
1999
|
+
docHover?: boolean;
|
|
2000
|
+
/** 너비 100% 채움 여부 (기본: true) */
|
|
2001
|
+
fullWidth?: boolean;
|
|
2002
|
+
/** 높이 100% 채움 여부 (기본: true) */
|
|
2003
|
+
fullHeight?: boolean;
|
|
2004
|
+
/** 헤더 우측 컨트롤이 많을 때 아랫줄로 개행(2행 구조) 허용 여부 (기본: false, 1줄 말줄임) */
|
|
2005
|
+
wrapActions?: boolean;
|
|
2006
|
+
children?: ReactNode;
|
|
2007
|
+
};
|
|
2008
|
+
/** 헤더 우측 — title과 동일 타이포의 plain text */
|
|
2009
|
+
declare function StnWidgetPeriodText({ children, className, ...rest }: {
|
|
2010
|
+
children: ReactNode;
|
|
2011
|
+
} & HTMLAttributes<HTMLSpanElement>): react_jsx_runtime.JSX.Element;
|
|
2012
|
+
/** 헤더 우측 — 드롭다운(라벨 + chevron). 메뉴는 `onClick` · 외부 Dropdown 연결 */
|
|
2013
|
+
declare function StnWidgetPeriodSelect({ label, className, ...rest }: {
|
|
2014
|
+
label: ReactNode;
|
|
2015
|
+
} & Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'color'>): react_jsx_runtime.JSX.Element;
|
|
2016
|
+
/** 헤더 우측 — 이전/다음 화살표 + 가운데 라벨 */
|
|
2017
|
+
declare function StnWidgetPeriodPager({ label, className, onPrev, onNext, prevLabel, nextLabel, ...rest }: {
|
|
2018
|
+
label: ReactNode;
|
|
2019
|
+
className?: string;
|
|
2020
|
+
onPrev?: () => void;
|
|
2021
|
+
onNext?: () => void;
|
|
2022
|
+
prevLabel?: string;
|
|
2023
|
+
nextLabel?: string;
|
|
2024
|
+
} & HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
2025
|
+
declare function StnWidgetRoot({ shell: shellProp, variant, appearance, background, status, isCritical, kind, title, badge, titleActions, showHeaderIcon, headerIconName, headerIcon, periodLabel, periodActions, children, className, contentClassName, padding, noPadding, loading, empty, emptyMessage, footer, banner, interactive, docHover, fullWidth, fullHeight, wrapActions, style, ...rest }: StnWidgetProps): react_jsx_runtime.JSX.Element;
|
|
2026
|
+
type StnWidgetHeaderProps = HTMLAttributes<HTMLDivElement> & {
|
|
2027
|
+
/** 헤더 우측 컨트롤이 많을 때 아랫줄로 개행(2행 구조) 허용 여부 */
|
|
2028
|
+
wrap?: boolean;
|
|
2029
|
+
};
|
|
2030
|
+
declare function StnWidgetHeader({ className, wrap, children, ...rest }: StnWidgetHeaderProps): react_jsx_runtime.JSX.Element;
|
|
2031
|
+
declare function StnWidgetTitle({ className, children, title, ...rest }: HTMLAttributes<HTMLHeadingElement>): react_jsx_runtime.JSX.Element;
|
|
2032
|
+
declare function StnWidgetActions({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
2033
|
+
type StnWidgetBodyProps = HTMLAttributes<HTMLDivElement> & {
|
|
2034
|
+
/** 본문 내부 여백 규격 — 기본 12px, compact 8px, none 0px */
|
|
2035
|
+
padding?: StnWidgetPadding;
|
|
2036
|
+
/** 내용이 넘칠 때 내부 스크롤 활성화 여부 (기본 true) */
|
|
2037
|
+
scrollable?: boolean;
|
|
2038
|
+
/** 본문 서피스 배경 — 'default' | 'canvas' (차트용 다크 캔버스) | 'transparent' | 'subtle' */
|
|
2039
|
+
surface?: 'default' | 'canvas' | 'transparent' | 'subtle';
|
|
2040
|
+
/** 빈 깡통 슬롯 표시 (점선 테두리 및 'Widget Content Shell' 라벨) */
|
|
2041
|
+
empty?: boolean | string;
|
|
2042
|
+
};
|
|
2043
|
+
declare function StnWidgetBody({ padding, scrollable, surface, empty, className, style, children, ...rest }: StnWidgetBodyProps): react_jsx_runtime.JSX.Element;
|
|
2044
|
+
type StnWidgetChartSlotProps = HTMLAttributes<HTMLDivElement> & {
|
|
2045
|
+
label?: string;
|
|
2046
|
+
};
|
|
2047
|
+
/** Figma slot — dashed chart mount area */
|
|
2048
|
+
declare function StnWidgetChartSlot({ label, className, children, ...rest }: StnWidgetChartSlotProps): react_jsx_runtime.JSX.Element;
|
|
2049
|
+
type StnWidgetStatusGrade = 'critical' | 'major' | 'minor' | 'info' | 'normal';
|
|
2050
|
+
type StnWidgetStatusItemProps = HTMLAttributes<HTMLDivElement> & {
|
|
2051
|
+
label: ReactNode;
|
|
2052
|
+
value: ReactNode;
|
|
2053
|
+
grade?: StnWidgetStatusGrade;
|
|
2054
|
+
/** @deprecated grade 사용 권장 */
|
|
2055
|
+
status?: StnWidgetStatusGrade | 'warning';
|
|
2056
|
+
showDot?: boolean;
|
|
2057
|
+
};
|
|
2058
|
+
declare function StnWidgetStatusItem({ label, value, grade: gradeProp, status, showDot, className, ...rest }: StnWidgetStatusItemProps): react_jsx_runtime.JSX.Element;
|
|
2059
|
+
declare function StnWidgetStatusList({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
2060
|
+
declare function StnWidgetStatGroup({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
2061
|
+
type StnWidgetStatCardProps = HTMLAttributes<HTMLDivElement> & {
|
|
2062
|
+
label: ReactNode;
|
|
2063
|
+
count: ReactNode;
|
|
2064
|
+
};
|
|
2065
|
+
declare function StnWidgetStatCard({ label, count, className, ...rest }: StnWidgetStatCardProps): react_jsx_runtime.JSX.Element;
|
|
2066
|
+
/** DS · 스토리용 빈 본문 */
|
|
2067
|
+
declare function StnWidgetPlaceholder({ label }: {
|
|
2068
|
+
label?: string;
|
|
2069
|
+
}): react_jsx_runtime.JSX.Element;
|
|
2070
|
+
type StnWidgetGradeRowProps = HTMLAttributes<HTMLDivElement> & {
|
|
2071
|
+
grade: StnWidgetGradeRowGrade;
|
|
2072
|
+
label: ReactNode;
|
|
2073
|
+
value: ReactNode;
|
|
2074
|
+
/** 0–100 — progress bar width · percent label */
|
|
2075
|
+
percent: number;
|
|
2076
|
+
percentLabel?: ReactNode;
|
|
2077
|
+
};
|
|
2078
|
+
/** Figma dark dashboard — grade row + 2px progress bar */
|
|
2079
|
+
declare function StnWidgetGradeRow({ grade, label, value, percent, percentLabel, className, ...rest }: StnWidgetGradeRowProps): react_jsx_runtime.JSX.Element;
|
|
2080
|
+
declare function StnWidgetGradeRowList({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
2081
|
+
declare function StnWidgetFooter({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
2082
|
+
declare function StnWidgetEmpty({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
2083
|
+
interface StnWidgetLoadingProps extends HTMLAttributes<HTMLDivElement> {
|
|
2084
|
+
lines?: number;
|
|
2085
|
+
}
|
|
2086
|
+
declare function StnWidgetLoading({ lines, className, children, ...rest }: StnWidgetLoadingProps): react_jsx_runtime.JSX.Element;
|
|
2087
|
+
type StnWidgetInsetIconProps = StnIconBoxProps;
|
|
2088
|
+
/** 위젯 헤더 아이콘 슬롯 — `StnIconBox` (기본 size=`sm`) */
|
|
2089
|
+
declare function StnWidgetInsetIcon({ className, size, ...rest }: StnWidgetInsetIconProps): react_jsx_runtime.JSX.Element;
|
|
2090
|
+
declare const StnWidget: typeof StnWidgetRoot & {
|
|
2091
|
+
Header: typeof StnWidgetHeader;
|
|
2092
|
+
Title: typeof StnWidgetTitle;
|
|
2093
|
+
Actions: typeof StnWidgetActions;
|
|
2094
|
+
Body: typeof StnWidgetBody;
|
|
2095
|
+
Footer: typeof StnWidgetFooter;
|
|
2096
|
+
Empty: typeof StnWidgetEmpty;
|
|
2097
|
+
Loading: typeof StnWidgetLoading;
|
|
2098
|
+
InsetIcon: typeof StnWidgetInsetIcon;
|
|
2099
|
+
ChartSlot: typeof StnWidgetChartSlot;
|
|
2100
|
+
PeriodText: typeof StnWidgetPeriodText;
|
|
2101
|
+
PeriodSelect: typeof StnWidgetPeriodSelect;
|
|
2102
|
+
PeriodPager: typeof StnWidgetPeriodPager;
|
|
2103
|
+
StatusList: typeof StnWidgetStatusList;
|
|
2104
|
+
StatusItem: typeof StnWidgetStatusItem;
|
|
2105
|
+
StatGroup: typeof StnWidgetStatGroup;
|
|
2106
|
+
StatCard: typeof StnWidgetStatCard;
|
|
2107
|
+
GradeRowList: typeof StnWidgetGradeRowList;
|
|
2108
|
+
GradeRow: typeof StnWidgetGradeRow;
|
|
2109
|
+
Placeholder: typeof StnWidgetPlaceholder;
|
|
2110
|
+
TopologyRing: typeof StnTopologyRing;
|
|
2111
|
+
TopologyGraph: typeof StnTopologyGraph;
|
|
2112
|
+
};
|
|
2113
|
+
|
|
2114
|
+
type AlertCenterDashboardProps = {
|
|
2115
|
+
className?: string;
|
|
2116
|
+
appearance?: StnWidgetAppearance;
|
|
2117
|
+
/** 위젯 본문 로딩 스켈레톤 표출 유무 */
|
|
2118
|
+
loading?: boolean;
|
|
2119
|
+
};
|
|
2120
|
+
/**
|
|
2121
|
+
* alert_center 우측 위젯 묶음 — `.dashboard_right` 슬롯(StnDashboard.Right) 안에 넣음
|
|
2122
|
+
*/
|
|
2123
|
+
declare function AlertCenterDashboard({ className, appearance, loading }: AlertCenterDashboardProps): react_jsx_runtime.JSX.Element;
|
|
2124
|
+
|
|
2125
|
+
/** Pub dashboard_right 위젯 본문 — alert_center.html · dashboard-map.html 공통 마크업 */
|
|
2126
|
+
type PubDisabilityStatusItem = {
|
|
2127
|
+
label: ReactNode;
|
|
2128
|
+
value: ReactNode;
|
|
2129
|
+
grade?: 'critical' | 'major' | 'minor' | 'warning' | 'normal';
|
|
2130
|
+
showDot?: boolean;
|
|
2131
|
+
};
|
|
2132
|
+
type PubDisabilityStatusListProps = {
|
|
2133
|
+
items: PubDisabilityStatusItem[];
|
|
2134
|
+
summary?: {
|
|
2135
|
+
label: string;
|
|
2136
|
+
value: ReactNode;
|
|
2137
|
+
}[];
|
|
2138
|
+
};
|
|
2139
|
+
declare function PubDisabilityStatusList({ items, summary }: PubDisabilityStatusListProps): react_jsx_runtime.JSX.Element;
|
|
2140
|
+
type PubTop5BarRow = {
|
|
2141
|
+
label: string;
|
|
2142
|
+
percent: number;
|
|
2143
|
+
status: string;
|
|
2144
|
+
};
|
|
2145
|
+
type PubTrafficTop5BarRow = {
|
|
2146
|
+
label: string;
|
|
2147
|
+
percent: number;
|
|
2148
|
+
value: string;
|
|
2149
|
+
};
|
|
2150
|
+
declare function PubTrafficTop5Bars({ rows }: {
|
|
2151
|
+
rows: PubTrafficTop5BarRow[];
|
|
2152
|
+
}): react_jsx_runtime.JSX.Element;
|
|
2153
|
+
declare function PubTop5EquipmentBars({ rows }: {
|
|
2154
|
+
rows: PubTop5BarRow[];
|
|
2155
|
+
}): react_jsx_runtime.JSX.Element;
|
|
2156
|
+
declare function PubChartSample({ src, alt, onError, }: {
|
|
2157
|
+
src: string;
|
|
2158
|
+
alt?: string;
|
|
2159
|
+
onError?: () => void;
|
|
2160
|
+
}): react_jsx_runtime.JSX.Element;
|
|
2161
|
+
|
|
2162
|
+
type StnAlertCenterPanelProps = {
|
|
2163
|
+
title?: string;
|
|
2164
|
+
alerts?: StnAlertCenterAlertItem[];
|
|
2165
|
+
workItems?: StnAlertCenterWorkItem[];
|
|
2166
|
+
deployItems?: StnAlertCenterWorkItem[];
|
|
2167
|
+
defaultTab?: StnAlertCenterTab;
|
|
2168
|
+
/** Pub `:has(#gnb-alert-tab-*)` — 기본 Pub id 사용 권장 */
|
|
2169
|
+
tabIds?: Partial<Record<StnAlertCenterTab, string>>;
|
|
2170
|
+
tabName?: string;
|
|
2171
|
+
onClose?: () => void;
|
|
2172
|
+
closeLabel?: string;
|
|
2173
|
+
className?: string;
|
|
2174
|
+
};
|
|
2175
|
+
declare function StnAlertCenterPanel({ title, alerts, workItems, deployItems, defaultTab, tabIds, tabName: tabNameProp, onClose, closeLabel, className, }: StnAlertCenterPanelProps): react_jsx_runtime.JSX.Element;
|
|
2176
|
+
|
|
2177
|
+
type StnAlertCenterDocPreviewProps = StnAlertCenterPanelProps & {
|
|
2178
|
+
theme?: StnTheme;
|
|
2179
|
+
/** DS iframe·Color doc용 GNB 크롬 래퍼 */
|
|
2180
|
+
withDocChrome?: boolean;
|
|
2181
|
+
children?: ReactNode;
|
|
2182
|
+
};
|
|
2183
|
+
/**
|
|
2184
|
+
* 문서·데모 — `stn-doc-frame--alert-center` + SideNav bottom shell.
|
|
2185
|
+
* 제품 앱에서는 `StnSideNavigation` bottom 슬롯에 `StnAlertCenterPanel`만 넣으면 됩니다.
|
|
2186
|
+
*/
|
|
2187
|
+
declare function StnAlertCenterDocPreview({ theme, withDocChrome, children, ...panelProps }: StnAlertCenterDocPreviewProps): react_jsx_runtime.JSX.Element;
|
|
2188
|
+
|
|
2189
|
+
type SideNavContextValue = {
|
|
2190
|
+
collapsed: boolean;
|
|
2191
|
+
activeId?: string;
|
|
2192
|
+
onSelect?: (id: string) => void;
|
|
2193
|
+
onToggleCollapse?: () => void;
|
|
2194
|
+
mobileOpen?: boolean;
|
|
2195
|
+
onToggleMobileOpen?: () => void;
|
|
2196
|
+
setMobileOpen?: (open: boolean) => void;
|
|
2197
|
+
isDrawer?: boolean;
|
|
2198
|
+
};
|
|
2199
|
+
declare const SideNavContext: react.Context<SideNavContextValue>;
|
|
2200
|
+
declare const useSideNav: () => SideNavContextValue;
|
|
2201
|
+
|
|
2202
|
+
type StnSideNavItemVariant = 'item' | 'sub';
|
|
2203
|
+
type StnSideNavItemIconPosition = 'left' | 'right';
|
|
2204
|
+
type StnSideNavItemProps = StnWithoutStyle<Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'>> & {
|
|
2205
|
+
label: string;
|
|
2206
|
+
id?: string;
|
|
2207
|
+
/** 1depth line icon (mask URL) 또는 2depth sub-icon mask URL */
|
|
2208
|
+
iconSrc?: string;
|
|
2209
|
+
/** active 시 대체 아이콘 — Figma apps gradient URL */
|
|
2210
|
+
activeIconSrc?: string;
|
|
2211
|
+
/** ReactNode 커스텀 아이콘 (1depth 및 2depth sub-icon 모두 지원) */
|
|
2212
|
+
icon?: ReactNode;
|
|
2213
|
+
/** 아이콘 위치 — 기본 left, 우측 배치 시 'right' */
|
|
2214
|
+
iconPosition?: StnSideNavItemIconPosition;
|
|
2215
|
+
variant?: StnSideNavItemVariant;
|
|
2216
|
+
/** 선택됨 (Figma의 state=clicked 동일) */
|
|
2217
|
+
active?: boolean;
|
|
2218
|
+
/** Figma state=clicked 지원용 별칭 (active와 동일하게 동작) */
|
|
2219
|
+
clicked?: boolean;
|
|
2220
|
+
/** hover 가상 상태 강제 적용 (문서/데모용) */
|
|
2221
|
+
hovered?: boolean;
|
|
2222
|
+
/** 사이드바 접힘 여부 (미지정 시 SideNavContext 값 사용) */
|
|
2223
|
+
collapsed?: boolean;
|
|
2224
|
+
/** 하위 메뉴 존재 표시 (chevron 꺽쇠) — 1depth/2depth 모두 지원 */
|
|
2225
|
+
showChevron?: boolean;
|
|
2226
|
+
/** 하위 메뉴 펼침 여부 (chevron 회전) */
|
|
2227
|
+
chevronOpen?: boolean;
|
|
2228
|
+
/** chevron 기본 방향 및 펼침 방향 (기본: 'down', 위로 펼쳐지는 경우 'up') */
|
|
2229
|
+
chevronDirection?: 'down' | 'up';
|
|
2230
|
+
/** 숫자/텍스트 배지 (StnBadge 자동 연동) 또는 StnBadge 컴포넌트 직주입 — 1depth/2depth 모두 지원 */
|
|
2231
|
+
badge?: ReactNode;
|
|
2232
|
+
/** 점 배지 표시 (StnBadge dot) */
|
|
2233
|
+
showBadgeDot?: boolean;
|
|
2234
|
+
/** 2depth 서브 도트(stn-side-nav-item__sub-dot) 표시 여부 (기본값: icon이 없으면 true, icon이 있으면 false. 둘 다 원할 시 true 지정) */
|
|
2235
|
+
showSubDot?: boolean;
|
|
2236
|
+
/** 2depth 서브 들여쓰기(stn-side-nav-item__sub-indent) 표시 여부 (기본값: variant="sub"일 때 true) */
|
|
2237
|
+
showSubIndent?: boolean;
|
|
2238
|
+
};
|
|
2239
|
+
/**
|
|
2240
|
+
* SideNav 메뉴 행 항목 컴포넌트 — 1depth 및 2depth sub 지원
|
|
2241
|
+
*/
|
|
2242
|
+
declare const StnSideNavItem: react.ForwardRefExoticComponent<StnWithoutStyle<Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children">> & {
|
|
2243
|
+
label: string;
|
|
2244
|
+
id?: string;
|
|
2245
|
+
/** 1depth line icon (mask URL) 또는 2depth sub-icon mask URL */
|
|
2246
|
+
iconSrc?: string;
|
|
2247
|
+
/** active 시 대체 아이콘 — Figma apps gradient URL */
|
|
2248
|
+
activeIconSrc?: string;
|
|
2249
|
+
/** ReactNode 커스텀 아이콘 (1depth 및 2depth sub-icon 모두 지원) */
|
|
2250
|
+
icon?: ReactNode;
|
|
2251
|
+
/** 아이콘 위치 — 기본 left, 우측 배치 시 'right' */
|
|
2252
|
+
iconPosition?: StnSideNavItemIconPosition;
|
|
2253
|
+
variant?: StnSideNavItemVariant;
|
|
2254
|
+
/** 선택됨 (Figma의 state=clicked 동일) */
|
|
2255
|
+
active?: boolean;
|
|
2256
|
+
/** Figma state=clicked 지원용 별칭 (active와 동일하게 동작) */
|
|
2257
|
+
clicked?: boolean;
|
|
2258
|
+
/** hover 가상 상태 강제 적용 (문서/데모용) */
|
|
2259
|
+
hovered?: boolean;
|
|
2260
|
+
/** 사이드바 접힘 여부 (미지정 시 SideNavContext 값 사용) */
|
|
2261
|
+
collapsed?: boolean;
|
|
2262
|
+
/** 하위 메뉴 존재 표시 (chevron 꺽쇠) — 1depth/2depth 모두 지원 */
|
|
2263
|
+
showChevron?: boolean;
|
|
2264
|
+
/** 하위 메뉴 펼침 여부 (chevron 회전) */
|
|
2265
|
+
chevronOpen?: boolean;
|
|
2266
|
+
/** chevron 기본 방향 및 펼침 방향 (기본: 'down', 위로 펼쳐지는 경우 'up') */
|
|
2267
|
+
chevronDirection?: "down" | "up";
|
|
2268
|
+
/** 숫자/텍스트 배지 (StnBadge 자동 연동) 또는 StnBadge 컴포넌트 직주입 — 1depth/2depth 모두 지원 */
|
|
2269
|
+
badge?: ReactNode;
|
|
2270
|
+
/** 점 배지 표시 (StnBadge dot) */
|
|
2271
|
+
showBadgeDot?: boolean;
|
|
2272
|
+
/** 2depth 서브 도트(stn-side-nav-item__sub-dot) 표시 여부 (기본값: icon이 없으면 true, icon이 있으면 false. 둘 다 원할 시 true 지정) */
|
|
2273
|
+
showSubDot?: boolean;
|
|
2274
|
+
/** 2depth 서브 들여쓰기(stn-side-nav-item__sub-indent) 표시 여부 (기본값: variant="sub"일 때 true) */
|
|
2275
|
+
showSubIndent?: boolean;
|
|
2276
|
+
} & react.RefAttributes<HTMLButtonElement>>;
|
|
2277
|
+
|
|
2278
|
+
type StnSideNavHeaderProps = HTMLAttributes<HTMLDivElement> & {
|
|
2279
|
+
children?: ReactNode;
|
|
2280
|
+
/** 하단 경계선(divider/border) 표시 여부 (기본값: false, 목업 규격 준수) */
|
|
2281
|
+
border?: boolean;
|
|
2282
|
+
/** border 별칭 */
|
|
2283
|
+
hasBorder?: boolean;
|
|
2284
|
+
/** 접기/펼치기 토글 버튼 표시 여부 @default true */
|
|
2285
|
+
showToggle?: boolean;
|
|
2286
|
+
/** 드로어 모드 닫기 버튼 표시 여부 (드로어 활성화 시 기본 true) */
|
|
2287
|
+
showClose?: boolean;
|
|
2288
|
+
};
|
|
2289
|
+
/**
|
|
2290
|
+
* SideNav 상단 헤더 영역
|
|
2291
|
+
* - 가운데: InfoMap 브랜드 로고 (펼침: horizontal, 접힘: onlyimg 자동 전환)
|
|
2292
|
+
* - 우측 플로팅: 표준 StnButton 기반 접기/펼치기 아이콘 버튼 또는 드로어 닫기 버튼
|
|
2293
|
+
* - 경계선: border / hasBorder prop으로 하단 구분선 유무 제어 가능 (기본값: false)
|
|
2294
|
+
*/
|
|
2295
|
+
declare const StnSideNavHeader: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
|
|
2296
|
+
children?: ReactNode;
|
|
2297
|
+
/** 하단 경계선(divider/border) 표시 여부 (기본값: false, 목업 규격 준수) */
|
|
2298
|
+
border?: boolean;
|
|
2299
|
+
/** border 별칭 */
|
|
2300
|
+
hasBorder?: boolean;
|
|
2301
|
+
/** 접기/펼치기 토글 버튼 표시 여부 @default true */
|
|
2302
|
+
showToggle?: boolean;
|
|
2303
|
+
/** 드로어 모드 닫기 버튼 표시 여부 (드로어 활성화 시 기본 true) */
|
|
2304
|
+
showClose?: boolean;
|
|
2305
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
2306
|
+
|
|
2307
|
+
type StnSideNavMenuProps = HTMLAttributes<HTMLElement> & {
|
|
2308
|
+
children?: ReactNode;
|
|
2309
|
+
/** StnScroll 두께 프리셋 ('thin' | 'default' | 'thick') @default 'thin' */
|
|
2310
|
+
scrollSize?: StnScrollSize;
|
|
2311
|
+
/** StnScroll 색상/스타일 프리셋 ('default' | 'primary' | 'teal' | 'muted' | 'fade') @default 'fade' */
|
|
2312
|
+
scrollColor?: StnScrollColor;
|
|
2313
|
+
};
|
|
2314
|
+
/**
|
|
2315
|
+
* SideNav 메인 내비게이션 메뉴 컨테이너 (`<nav>`)
|
|
2316
|
+
* - STN StnScroll (.stn-scroll) 커스텀 스크롤바 내장
|
|
2317
|
+
*/
|
|
2318
|
+
declare const StnSideNavMenu: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & {
|
|
2319
|
+
children?: ReactNode;
|
|
2320
|
+
/** StnScroll 두께 프리셋 ('thin' | 'default' | 'thick') @default 'thin' */
|
|
2321
|
+
scrollSize?: StnScrollSize;
|
|
2322
|
+
/** StnScroll 색상/스타일 프리셋 ('default' | 'primary' | 'teal' | 'muted' | 'fade') @default 'fade' */
|
|
2323
|
+
scrollColor?: StnScrollColor;
|
|
2324
|
+
} & react.RefAttributes<HTMLElement>>;
|
|
2325
|
+
|
|
2326
|
+
type StnSideNavGroupDirection = 'down' | 'up';
|
|
2327
|
+
type StnSideNavGroupVariant = 'inline' | 'dropdown';
|
|
2328
|
+
type StnSideNavDropdownVariant = 'filled' | 'transparent';
|
|
2329
|
+
type StnSideNavGroupProps = HTMLAttributes<HTMLDivElement> & {
|
|
2330
|
+
/** 그룹 타이틀 레이블 (대문자 캡션 형태로 표시) */
|
|
2331
|
+
label?: ReactNode;
|
|
2332
|
+
/** 펼침/접힘 트리 부모 아이템 (예: StnSideNavItem) */
|
|
2333
|
+
parent?: ReactNode;
|
|
2334
|
+
/** 펼침 방향 (기본: 'down' 아래로 펼쳐짐, 'up' 위로 펼쳐짐) */
|
|
2335
|
+
direction?: StnSideNavGroupDirection;
|
|
2336
|
+
/**
|
|
2337
|
+
* 서브메뉴 표시 모드
|
|
2338
|
+
* - 'inline': 일반 문서 흐름에서 상/하로 밀면서 펼침 (기본값)
|
|
2339
|
+
* - 'dropdown': 위아래 레이아웃 밀림 없이 플로팅 드롭다운/팝오버 형태로 띄움
|
|
2340
|
+
*/
|
|
2341
|
+
variant?: StnSideNavGroupVariant;
|
|
2342
|
+
/** dropdown 모드 단축 boolean prop (variant="dropdown"과 동일) */
|
|
2343
|
+
dropdown?: boolean;
|
|
2344
|
+
/**
|
|
2345
|
+
* 드롭다운 서브메뉴 배경 스타일
|
|
2346
|
+
* - 'filled': 배경, 경계선, 블러, 그림자가 적용된 카드 팝오버 (기본값)
|
|
2347
|
+
* - 'transparent': 배경 및 그림자 없이 투명하게 플로팅되는 형태
|
|
2348
|
+
* @default 'filled'
|
|
2349
|
+
*/
|
|
2350
|
+
dropdownVariant?: StnSideNavDropdownVariant;
|
|
2351
|
+
/** 드롭다운 배경 표시 여부 (false 시 dropdownVariant="transparent"와 동일) @default true */
|
|
2352
|
+
dropdownBackground?: boolean;
|
|
2353
|
+
/** 펼침 상태 (controlled) */
|
|
2354
|
+
open?: boolean;
|
|
2355
|
+
/** 기본 펼침 상태 (uncontrolled) */
|
|
2356
|
+
defaultOpen?: boolean;
|
|
2357
|
+
/** 펼침 상태 변경 핸들러 */
|
|
2358
|
+
onOpenChange?: (open: boolean) => void;
|
|
2359
|
+
children?: ReactNode;
|
|
2360
|
+
};
|
|
2361
|
+
/**
|
|
2362
|
+
* SideNav 메뉴 그룹 컴포넌트
|
|
2363
|
+
* - `label`: 섹션 헤더 레이블로 아이템 그룹핑
|
|
2364
|
+
* - `parent`: 1depth 부모 아이템 클릭 시 2depth 서브메뉴 펼침/접힘 제어
|
|
2365
|
+
* - `variant`: 'inline'(아코디언 형태) | 'dropdown'(플로팅 팝업 드롭다운 형태)
|
|
2366
|
+
* - `direction`: 'down'(아래 방향) | 'up'(위 방향)
|
|
2367
|
+
*/
|
|
2368
|
+
declare const StnSideNavGroup: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
|
|
2369
|
+
/** 그룹 타이틀 레이블 (대문자 캡션 형태로 표시) */
|
|
2370
|
+
label?: ReactNode;
|
|
2371
|
+
/** 펼침/접힘 트리 부모 아이템 (예: StnSideNavItem) */
|
|
2372
|
+
parent?: ReactNode;
|
|
2373
|
+
/** 펼침 방향 (기본: 'down' 아래로 펼쳐짐, 'up' 위로 펼쳐짐) */
|
|
2374
|
+
direction?: StnSideNavGroupDirection;
|
|
2375
|
+
/**
|
|
2376
|
+
* 서브메뉴 표시 모드
|
|
2377
|
+
* - 'inline': 일반 문서 흐름에서 상/하로 밀면서 펼침 (기본값)
|
|
2378
|
+
* - 'dropdown': 위아래 레이아웃 밀림 없이 플로팅 드롭다운/팝오버 형태로 띄움
|
|
2379
|
+
*/
|
|
2380
|
+
variant?: StnSideNavGroupVariant;
|
|
2381
|
+
/** dropdown 모드 단축 boolean prop (variant="dropdown"과 동일) */
|
|
2382
|
+
dropdown?: boolean;
|
|
2383
|
+
/**
|
|
2384
|
+
* 드롭다운 서브메뉴 배경 스타일
|
|
2385
|
+
* - 'filled': 배경, 경계선, 블러, 그림자가 적용된 카드 팝오버 (기본값)
|
|
2386
|
+
* - 'transparent': 배경 및 그림자 없이 투명하게 플로팅되는 형태
|
|
2387
|
+
* @default 'filled'
|
|
2388
|
+
*/
|
|
2389
|
+
dropdownVariant?: StnSideNavDropdownVariant;
|
|
2390
|
+
/** 드롭다운 배경 표시 여부 (false 시 dropdownVariant="transparent"와 동일) @default true */
|
|
2391
|
+
dropdownBackground?: boolean;
|
|
2392
|
+
/** 펼침 상태 (controlled) */
|
|
2393
|
+
open?: boolean;
|
|
2394
|
+
/** 기본 펼침 상태 (uncontrolled) */
|
|
2395
|
+
defaultOpen?: boolean;
|
|
2396
|
+
/** 펼침 상태 변경 핸들러 */
|
|
2397
|
+
onOpenChange?: (open: boolean) => void;
|
|
2398
|
+
children?: ReactNode;
|
|
2399
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
2400
|
+
|
|
2401
|
+
type StnSideNavSpacerProps = HTMLAttributes<HTMLDivElement>;
|
|
2402
|
+
/**
|
|
2403
|
+
* SideNav 상단 메뉴와 하단 푸터 사이의 여백을 밀어내는 Flex Spacer
|
|
2404
|
+
*/
|
|
2405
|
+
declare const StnSideNavSpacer: react.ForwardRefExoticComponent<StnSideNavSpacerProps & react.RefAttributes<HTMLDivElement>>;
|
|
2406
|
+
|
|
2407
|
+
type StnSideNavFooterProps = HTMLAttributes<HTMLElement> & {
|
|
2408
|
+
/** mockup/index.html 스타일의 상단 우측 32px 곡면 라운드 및 글래스 효과 */
|
|
2409
|
+
curved?: boolean;
|
|
2410
|
+
children?: ReactNode;
|
|
2411
|
+
};
|
|
2412
|
+
/**
|
|
2413
|
+
* SideNav 하단 푸터 영역 (도움말, 설정, 사용자 프로필, 로그아웃 등)
|
|
2414
|
+
*/
|
|
2415
|
+
declare const StnSideNavFooter: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & {
|
|
2416
|
+
/** mockup/index.html 스타일의 상단 우측 32px 곡면 라운드 및 글래스 효과 */
|
|
2417
|
+
curved?: boolean;
|
|
2418
|
+
children?: ReactNode;
|
|
2419
|
+
} & react.RefAttributes<HTMLElement>>;
|
|
2420
|
+
|
|
2421
|
+
type StnSideNavToggleProps = ButtonHTMLAttributes<HTMLButtonElement>;
|
|
2422
|
+
/**
|
|
2423
|
+
* mockup/index.html의 플로팅 원형 사이드바 접기/펼치기 버튼 (Figma 40004302:30002)
|
|
2424
|
+
* 접힘 시 사이드바 우측 경계선에 걸치고, 펼침 시 헤더 우측 상단으로 이동하며 180도 회전
|
|
2425
|
+
*/
|
|
2426
|
+
declare const StnSideNavToggle: react.ForwardRefExoticComponent<StnSideNavToggleProps & react.RefAttributes<HTMLButtonElement>>;
|
|
2427
|
+
|
|
2428
|
+
type StnSideNavLogoProps = HTMLAttributes<HTMLDivElement> & {
|
|
2429
|
+
logoProps?: Partial<StnLogoProps>;
|
|
2430
|
+
};
|
|
2431
|
+
/**
|
|
2432
|
+
* 사이드바 로고 영역
|
|
2433
|
+
* - 펼침 상태: InfoMap 가로 로고 (horizontal)
|
|
2434
|
+
* - 접힘 상태: logo-onlyimg 심볼 (onlyimg)로 자동 대체
|
|
2435
|
+
*/
|
|
2436
|
+
declare const StnSideNavLogo: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
|
|
2437
|
+
logoProps?: Partial<StnLogoProps>;
|
|
2438
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
2439
|
+
|
|
2440
|
+
type StnSideNavWatermarkProps = HTMLAttributes<HTMLDivElement> & {
|
|
2441
|
+
/**
|
|
2442
|
+
* 워터마크 로고 크기 (xs, sm, md, lg, xl).
|
|
2443
|
+
* 사이드바 기본 규격에 최적화된 'xl' (120px)이 기본값입니다.
|
|
2444
|
+
* @default 'xl'
|
|
2445
|
+
*/
|
|
2446
|
+
size?: StnLogoSize;
|
|
2447
|
+
/**
|
|
2448
|
+
* 다크 / 라이트 테마 (미지정 시 상위 data-theme에 따라 자동 전환)
|
|
2449
|
+
*/
|
|
2450
|
+
theme?: StnLogoTheme;
|
|
2451
|
+
};
|
|
2452
|
+
/**
|
|
2453
|
+
* 사이드바 하단 3D 엠보싱 브랜드 워터마크 카드 (Figma 40004218:102473)
|
|
2454
|
+
* StnLogo(variant="watermark") 기반으로 크기(size prop) 및 테마 제어를 지원합니다.
|
|
2455
|
+
*/
|
|
2456
|
+
declare const StnSideNavWatermark: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
|
|
2457
|
+
/**
|
|
2458
|
+
* 워터마크 로고 크기 (xs, sm, md, lg, xl).
|
|
2459
|
+
* 사이드바 기본 규격에 최적화된 'xl' (120px)이 기본값입니다.
|
|
2460
|
+
* @default 'xl'
|
|
2461
|
+
*/
|
|
2462
|
+
size?: StnLogoSize;
|
|
2463
|
+
/**
|
|
2464
|
+
* 다크 / 라이트 테마 (미지정 시 상위 data-theme에 따라 자동 전환)
|
|
2465
|
+
*/
|
|
2466
|
+
theme?: StnLogoTheme;
|
|
2467
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
2468
|
+
|
|
2469
|
+
type StnSideNavMobileTriggerProps = ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
2470
|
+
/** 화면 좌하단 플로팅 고정 여부 @default false */
|
|
2471
|
+
floating?: boolean;
|
|
2472
|
+
children?: ReactNode;
|
|
2473
|
+
};
|
|
2474
|
+
/**
|
|
2475
|
+
* 모바일 화면에서 사이드 내비게이션 드로어를 열고 닫는 햄버거 토글 버튼
|
|
2476
|
+
* - loating 속성 지정 시 화면 좌하단에 플로팅 버튼으로 고정됩니다.
|
|
2477
|
+
* - 컴포넌트 단독 또는 StnSideNavigation.MobileTrigger로 접근할 수 있습니다.
|
|
2478
|
+
*/
|
|
2479
|
+
declare const StnSideNavMobileTrigger: react.ForwardRefExoticComponent<ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
2480
|
+
/** 화면 좌하단 플로팅 고정 여부 @default false */
|
|
2481
|
+
floating?: boolean;
|
|
2482
|
+
children?: ReactNode;
|
|
2483
|
+
} & react.RefAttributes<HTMLButtonElement>>;
|
|
2484
|
+
|
|
2485
|
+
type StnSideNavSubProps = HTMLAttributes<HTMLDivElement> & {
|
|
2486
|
+
children?: ReactNode;
|
|
2487
|
+
};
|
|
2488
|
+
/**
|
|
2489
|
+
* SideNav 하단 푸터 바로 위의 서브/유틸리티 액션 영역 (화면 조정, 테마 전환 등)
|
|
2490
|
+
* - 내부에 StnButton(variant="ghost") 또는 StnSideNavigation.SubItem / Button을 배치할 수 있습니다.
|
|
2491
|
+
* - 접힘 상태(collapsed): 세로 1열 32px 원형 아이콘 버튼 배치
|
|
2492
|
+
* - 펼침 상태(expanded): 가로 2열 캡슐형 Ghost 버튼 배치
|
|
2493
|
+
*/
|
|
2494
|
+
declare const StnSideNavSub: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
|
|
2495
|
+
children?: ReactNode;
|
|
2496
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
2497
|
+
type StnSideNavSubItemProps = Omit<StnButtonProps, 'variant' | 'size' | 'shape'> & {
|
|
2498
|
+
/** 버튼 변형 (기본: 'ghost') */
|
|
2499
|
+
variant?: StnButtonProps['variant'];
|
|
2500
|
+
/** 버튼 크기 (기본: 'md') */
|
|
2501
|
+
size?: StnButtonProps['size'];
|
|
2502
|
+
/** 버튼 형태 (기본: 'pill') */
|
|
2503
|
+
shape?: StnButtonProps['shape'];
|
|
2504
|
+
/** 좌측 또는 단독 아이콘 (ReactNode 또는 아이콘명 slug) */
|
|
2505
|
+
icon?: ReactNode;
|
|
2506
|
+
/** 아이콘 이미지 경로 (SVG 등) */
|
|
2507
|
+
iconSrc?: string;
|
|
2508
|
+
/** 펼쳤을 때 표시되는 버튼 텍스트 라벨 (children 대신 지정 가능) */
|
|
2509
|
+
label?: string;
|
|
2510
|
+
/** 툴팁 또는 접근성 타이틀 (미지정 시 label 사용) */
|
|
2511
|
+
title?: string;
|
|
2512
|
+
children?: ReactNode;
|
|
2513
|
+
className?: string;
|
|
2514
|
+
};
|
|
2515
|
+
/**
|
|
2516
|
+
* StnSideNavSub 내부에서 사용하는 보조 액션 버튼 (StnButton variant="ghost" 기반)
|
|
2517
|
+
*/
|
|
2518
|
+
declare const StnSideNavSubItem: react.ForwardRefExoticComponent<Omit<StnButtonProps, "size" | "variant" | "shape"> & {
|
|
2519
|
+
/** 버튼 변형 (기본: 'ghost') */
|
|
2520
|
+
variant?: StnButtonProps["variant"];
|
|
2521
|
+
/** 버튼 크기 (기본: 'md') */
|
|
2522
|
+
size?: StnButtonProps["size"];
|
|
2523
|
+
/** 버튼 형태 (기본: 'pill') */
|
|
2524
|
+
shape?: StnButtonProps["shape"];
|
|
2525
|
+
/** 좌측 또는 단독 아이콘 (ReactNode 또는 아이콘명 slug) */
|
|
2526
|
+
icon?: ReactNode;
|
|
2527
|
+
/** 아이콘 이미지 경로 (SVG 등) */
|
|
2528
|
+
iconSrc?: string;
|
|
2529
|
+
/** 펼쳤을 때 표시되는 버튼 텍스트 라벨 (children 대신 지정 가능) */
|
|
2530
|
+
label?: string;
|
|
2531
|
+
/** 툴팁 또는 접근성 타이틀 (미지정 시 label 사용) */
|
|
2532
|
+
title?: string;
|
|
2533
|
+
children?: ReactNode;
|
|
2534
|
+
className?: string;
|
|
2535
|
+
} & react.RefAttributes<HTMLButtonElement>>;
|
|
2536
|
+
|
|
2537
|
+
type StnSideNavSubNavVariant = 'filled' | 'transparent';
|
|
2538
|
+
type StnSideNavSubNavDirection = 'down' | 'up';
|
|
2539
|
+
type StnSideNavSubNavProps = HTMLAttributes<HTMLDivElement> & {
|
|
2540
|
+
/** 드롭다운(플로팅 팝오버) 모드 여부 @default false */
|
|
2541
|
+
dropdown?: boolean;
|
|
2542
|
+
/** 드롭다운 펼침 방향 ('down' 아래로 | 'up' 위로) @default 'down' */
|
|
2543
|
+
direction?: StnSideNavSubNavDirection;
|
|
2544
|
+
/** 드롭다운 배경 스타일 ('filled' 기본 배경/보더/그림자 | 'transparent' 배경 없는 투명) @default 'filled' */
|
|
2545
|
+
variant?: StnSideNavSubNavVariant;
|
|
2546
|
+
/** 배경 표시 여부 (false 시 variant="transparent"와 동일) @default true */
|
|
2547
|
+
background?: boolean;
|
|
2548
|
+
children?: ReactNode;
|
|
2549
|
+
};
|
|
2550
|
+
/**
|
|
2551
|
+
* Side Navigation 서브메뉴(2depth) 컨테이너 컴포넌트 (`.stn-side-nav__subnav`)
|
|
2552
|
+
* - 인라인 아코디언 서브메뉴 목록 또는 플로팅 드롭다운 서브메뉴 목록을 감싸는 전용 래퍼입니다.
|
|
2553
|
+
* - `dropdown`: true 지정 시 플로팅 드롭다운 팝오버 모드로 전환됩니다.
|
|
2554
|
+
* - `variant`: 'filled'(배경/보더/그림자 카드) | 'transparent'(배경 없는 투명 모드)
|
|
2555
|
+
* - `background`: false 지정 시 투명 모드로 전환됩니다.
|
|
2556
|
+
*/
|
|
2557
|
+
declare const StnSideNavSubNav: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
|
|
2558
|
+
/** 드롭다운(플로팅 팝오버) 모드 여부 @default false */
|
|
2559
|
+
dropdown?: boolean;
|
|
2560
|
+
/** 드롭다운 펼침 방향 ('down' 아래로 | 'up' 위로) @default 'down' */
|
|
2561
|
+
direction?: StnSideNavSubNavDirection;
|
|
2562
|
+
/** 드롭다운 배경 스타일 ('filled' 기본 배경/보더/그림자 | 'transparent' 배경 없는 투명) @default 'filled' */
|
|
2563
|
+
variant?: StnSideNavSubNavVariant;
|
|
2564
|
+
/** 배경 표시 여부 (false 시 variant="transparent"와 동일) @default true */
|
|
2565
|
+
background?: boolean;
|
|
2566
|
+
children?: ReactNode;
|
|
2567
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
2568
|
+
|
|
2569
|
+
type StnSideNavigationVariant = 'default' | 'glassmorphism';
|
|
2570
|
+
type StnSideNavigationProps = HTMLAttributes<HTMLElement> & {
|
|
2571
|
+
/** 사이드바 배경 및 외형 스타일 ('default' 불투명 솔리드 | 'glassmorphism' 반투명 블러) @default 'default' */
|
|
2572
|
+
variant?: StnSideNavigationVariant;
|
|
2573
|
+
/** variant 별칭 */
|
|
2574
|
+
appearance?: StnSideNavigationVariant;
|
|
2575
|
+
/** 모바일 드로어 모드에서의 배경 스타일 (미지정 시 variant 값을 상속) */
|
|
2576
|
+
drawerVariant?: StnSideNavigationVariant;
|
|
2577
|
+
/** drawerVariant 별칭 */
|
|
2578
|
+
drawerAppearance?: StnSideNavigationVariant;
|
|
2579
|
+
/** 사이드바 접힘 상태 (controlled) */
|
|
2580
|
+
collapsed?: boolean;
|
|
2581
|
+
/** 기본 접힘 상태 (uncontrolled) @default false */
|
|
2582
|
+
defaultCollapsed?: boolean;
|
|
2583
|
+
/** 접힘 상태 변경 콜백 */
|
|
2584
|
+
onCollapseChange?: (collapsed: boolean) => void;
|
|
2585
|
+
/** 활성화된 메뉴 아이템 id (controlled) */
|
|
2586
|
+
activeId?: string;
|
|
2587
|
+
/** 기본 활성 메뉴 아이템 id (uncontrolled) */
|
|
2588
|
+
defaultActiveId?: string;
|
|
2589
|
+
/** 메뉴 선택 변경 콜백 */
|
|
2590
|
+
onActiveChange?: (activeId: string) => void;
|
|
2591
|
+
/** 모바일 드로어 열림 상태 (controlled) */
|
|
2592
|
+
mobileOpen?: boolean;
|
|
2593
|
+
/** 기본 모바일 드로어 열림 상태 (uncontrolled) @default false */
|
|
2594
|
+
defaultMobileOpen?: boolean;
|
|
2595
|
+
/** 모바일 드로어 열림 상태 변경 콜백 */
|
|
2596
|
+
onMobileOpenChange?: (open: boolean) => void;
|
|
2597
|
+
/** 상시 드로어 모드 활성화 (화면 오버레이 슬라이드아웃 패널) @default false */
|
|
2598
|
+
drawer?: boolean;
|
|
2599
|
+
/** 반응형 자동 드로어 모드 (모바일 화면 <= 768px / 1024px 시 자동으로 드로어로 변환) @default true */
|
|
2600
|
+
responsiveDrawer?: boolean;
|
|
2601
|
+
/** 화면 좌하단 플로팅 햄버거 토글 버튼 자동 렌더 여부 @default false */
|
|
2602
|
+
showMobileTrigger?: boolean;
|
|
2603
|
+
children?: ReactNode;
|
|
2604
|
+
};
|
|
2605
|
+
declare const StnSideNavigation: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & {
|
|
2606
|
+
/** 사이드바 배경 및 외형 스타일 ('default' 불투명 솔리드 | 'glassmorphism' 반투명 블러) @default 'default' */
|
|
2607
|
+
variant?: StnSideNavigationVariant;
|
|
2608
|
+
/** variant 별칭 */
|
|
2609
|
+
appearance?: StnSideNavigationVariant;
|
|
2610
|
+
/** 모바일 드로어 모드에서의 배경 스타일 (미지정 시 variant 값을 상속) */
|
|
2611
|
+
drawerVariant?: StnSideNavigationVariant;
|
|
2612
|
+
/** drawerVariant 별칭 */
|
|
2613
|
+
drawerAppearance?: StnSideNavigationVariant;
|
|
2614
|
+
/** 사이드바 접힘 상태 (controlled) */
|
|
2615
|
+
collapsed?: boolean;
|
|
2616
|
+
/** 기본 접힘 상태 (uncontrolled) @default false */
|
|
2617
|
+
defaultCollapsed?: boolean;
|
|
2618
|
+
/** 접힘 상태 변경 콜백 */
|
|
2619
|
+
onCollapseChange?: (collapsed: boolean) => void;
|
|
2620
|
+
/** 활성화된 메뉴 아이템 id (controlled) */
|
|
2621
|
+
activeId?: string;
|
|
2622
|
+
/** 기본 활성 메뉴 아이템 id (uncontrolled) */
|
|
2623
|
+
defaultActiveId?: string;
|
|
2624
|
+
/** 메뉴 선택 변경 콜백 */
|
|
2625
|
+
onActiveChange?: (activeId: string) => void;
|
|
2626
|
+
/** 모바일 드로어 열림 상태 (controlled) */
|
|
2627
|
+
mobileOpen?: boolean;
|
|
2628
|
+
/** 기본 모바일 드로어 열림 상태 (uncontrolled) @default false */
|
|
2629
|
+
defaultMobileOpen?: boolean;
|
|
2630
|
+
/** 모바일 드로어 열림 상태 변경 콜백 */
|
|
2631
|
+
onMobileOpenChange?: (open: boolean) => void;
|
|
2632
|
+
/** 상시 드로어 모드 활성화 (화면 오버레이 슬라이드아웃 패널) @default false */
|
|
2633
|
+
drawer?: boolean;
|
|
2634
|
+
/** 반응형 자동 드로어 모드 (모바일 화면 <= 768px / 1024px 시 자동으로 드로어로 변환) @default true */
|
|
2635
|
+
responsiveDrawer?: boolean;
|
|
2636
|
+
/** 화면 좌하단 플로팅 햄버거 토글 버튼 자동 렌더 여부 @default false */
|
|
2637
|
+
showMobileTrigger?: boolean;
|
|
2638
|
+
children?: ReactNode;
|
|
2639
|
+
} & react.RefAttributes<HTMLElement>> & {
|
|
2640
|
+
Header: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
|
|
2641
|
+
children?: ReactNode;
|
|
2642
|
+
border?: boolean;
|
|
2643
|
+
hasBorder?: boolean;
|
|
2644
|
+
showToggle?: boolean;
|
|
2645
|
+
showClose?: boolean;
|
|
2646
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
2647
|
+
Toggle: react.ForwardRefExoticComponent<StnSideNavToggleProps & react.RefAttributes<HTMLButtonElement>>;
|
|
2648
|
+
Logo: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
|
|
2649
|
+
logoProps?: Partial<StnLogoProps>;
|
|
2650
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
2651
|
+
Menu: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & {
|
|
2652
|
+
children?: ReactNode;
|
|
2653
|
+
scrollSize?: StnScrollSize;
|
|
2654
|
+
scrollColor?: StnScrollColor;
|
|
2655
|
+
} & react.RefAttributes<HTMLElement>>;
|
|
2656
|
+
Group: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
|
|
2657
|
+
label?: ReactNode;
|
|
2658
|
+
parent?: ReactNode;
|
|
2659
|
+
direction?: StnSideNavGroupDirection;
|
|
2660
|
+
variant?: StnSideNavGroupVariant;
|
|
2661
|
+
dropdown?: boolean;
|
|
2662
|
+
dropdownVariant?: StnSideNavDropdownVariant;
|
|
2663
|
+
dropdownBackground?: boolean;
|
|
2664
|
+
open?: boolean;
|
|
2665
|
+
defaultOpen?: boolean;
|
|
2666
|
+
onOpenChange?: (open: boolean) => void;
|
|
2667
|
+
children?: ReactNode;
|
|
2668
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
2669
|
+
Item: react.ForwardRefExoticComponent<StnWithoutStyle<Omit<react.ButtonHTMLAttributes<HTMLButtonElement>, "children">> & {
|
|
2670
|
+
label: string;
|
|
2671
|
+
id?: string;
|
|
2672
|
+
iconSrc?: string;
|
|
2673
|
+
activeIconSrc?: string;
|
|
2674
|
+
icon?: ReactNode;
|
|
2675
|
+
iconPosition?: StnSideNavItemIconPosition;
|
|
2676
|
+
variant?: StnSideNavItemVariant;
|
|
2677
|
+
active?: boolean;
|
|
2678
|
+
clicked?: boolean;
|
|
2679
|
+
hovered?: boolean;
|
|
2680
|
+
collapsed?: boolean;
|
|
2681
|
+
showChevron?: boolean;
|
|
2682
|
+
chevronOpen?: boolean;
|
|
2683
|
+
chevronDirection?: "down" | "up";
|
|
2684
|
+
badge?: ReactNode;
|
|
2685
|
+
showBadgeDot?: boolean;
|
|
2686
|
+
showSubDot?: boolean;
|
|
2687
|
+
showSubIndent?: boolean;
|
|
2688
|
+
} & react.RefAttributes<HTMLButtonElement>>;
|
|
2689
|
+
SubNav: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
|
|
2690
|
+
dropdown?: boolean;
|
|
2691
|
+
direction?: StnSideNavSubNavDirection;
|
|
2692
|
+
variant?: StnSideNavSubNavVariant;
|
|
2693
|
+
background?: boolean;
|
|
2694
|
+
children?: ReactNode;
|
|
2695
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
2696
|
+
Spacer: react.ForwardRefExoticComponent<StnSideNavSpacerProps & react.RefAttributes<HTMLDivElement>>;
|
|
2697
|
+
Sub: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
|
|
2698
|
+
children?: ReactNode;
|
|
2699
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
2700
|
+
SubItem: react.ForwardRefExoticComponent<Omit<StnButtonProps, "size" | "variant" | "shape"> & {
|
|
2701
|
+
variant?: StnButtonProps["variant"];
|
|
2702
|
+
size?: StnButtonProps["size"];
|
|
2703
|
+
shape?: StnButtonProps["shape"];
|
|
2704
|
+
icon?: ReactNode;
|
|
2705
|
+
iconSrc?: string;
|
|
2706
|
+
label?: string;
|
|
2707
|
+
title?: string;
|
|
2708
|
+
children?: ReactNode;
|
|
2709
|
+
className?: string;
|
|
2710
|
+
} & react.RefAttributes<HTMLButtonElement>>;
|
|
2711
|
+
Footer: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & {
|
|
2712
|
+
curved?: boolean;
|
|
2713
|
+
children?: ReactNode;
|
|
2714
|
+
} & react.RefAttributes<HTMLElement>>;
|
|
2715
|
+
Watermark: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
|
|
2716
|
+
size?: StnLogoSize;
|
|
2717
|
+
theme?: StnLogoTheme;
|
|
2718
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
2719
|
+
MobileTrigger: react.ForwardRefExoticComponent<react.ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
2720
|
+
floating?: boolean;
|
|
2721
|
+
children?: ReactNode;
|
|
2722
|
+
} & react.RefAttributes<HTMLButtonElement>>;
|
|
2723
|
+
};
|
|
2724
|
+
|
|
2725
|
+
type StnBreadcrumbSize = 'sm' | 'md' | 'lg';
|
|
2726
|
+
type StnBreadcrumbVariant = 'default' | 'chip';
|
|
2727
|
+
/** Sibling / alternate path option shown in a segment dropdown */
|
|
2728
|
+
type StnBreadcrumbMenuItem = {
|
|
2729
|
+
id: string;
|
|
2730
|
+
label: string;
|
|
2731
|
+
href?: string;
|
|
2732
|
+
onClick?: () => void;
|
|
2733
|
+
/** Marks the active sibling in the menu */
|
|
2734
|
+
current?: boolean;
|
|
2735
|
+
};
|
|
2736
|
+
type StnBreadcrumbItem = {
|
|
2737
|
+
id: string;
|
|
2738
|
+
label: string;
|
|
2739
|
+
/** line icon mask src — defaults from `icon` id */
|
|
2740
|
+
iconSrc?: string;
|
|
2741
|
+
icon?: Exclude<StnBreadcrumbIconId, 'home' | 'separator' | 'caret'>;
|
|
2742
|
+
/**
|
|
2743
|
+
* Show caret and open sibling picker when `menuItems` is provided.
|
|
2744
|
+
* Without `menuItems`, caret is decorative only (prefer passing `menuItems`).
|
|
2745
|
+
*/
|
|
2746
|
+
menu?: boolean;
|
|
2747
|
+
/** Dropdown options under this segment */
|
|
2748
|
+
menuItems?: StnBreadcrumbMenuItem[];
|
|
2749
|
+
href?: string;
|
|
2750
|
+
onClick?: () => void;
|
|
2751
|
+
current?: boolean;
|
|
2752
|
+
};
|
|
2753
|
+
type StnBreadcrumbProps = {
|
|
2754
|
+
items: StnBreadcrumbItem[];
|
|
2755
|
+
className?: string;
|
|
2756
|
+
/** 크기: sm · md(기본) · lg — 클래스 `.sm` `.md` `.lg` */
|
|
2757
|
+
size?: StnBreadcrumbSize;
|
|
2758
|
+
/** `chip`이면 루트에 `.chip` */
|
|
2759
|
+
variant?: StnBreadcrumbVariant;
|
|
2760
|
+
/** 이 개수를 넘으면 중간을 `.collapsed` 버튼으로 접음 */
|
|
2761
|
+
maxItems?: number;
|
|
2762
|
+
itemsBeforeCollapse?: number;
|
|
2763
|
+
itemsAfterCollapse?: number;
|
|
2764
|
+
homeHref?: string;
|
|
2765
|
+
onHomeClick?: () => void;
|
|
2766
|
+
showHome?: boolean;
|
|
2767
|
+
homeLabel?: string;
|
|
2768
|
+
renderItem?: (item: StnBreadcrumbItem, segment: ReactNode) => ReactNode;
|
|
2769
|
+
};
|
|
2770
|
+
declare function StnBreadcrumb({ items, className, size, variant, maxItems, itemsBeforeCollapse, itemsAfterCollapse, homeHref, onHomeClick, showHome, homeLabel, renderItem, }: StnBreadcrumbProps): react_jsx_runtime.JSX.Element;
|
|
2771
|
+
|
|
2772
|
+
interface StnHeaderTitleDateOptions {
|
|
2773
|
+
/** 요일 포함 여부 (기본 true) */
|
|
2774
|
+
includeWeekday?: boolean;
|
|
2775
|
+
/** 요일 표기 형식 ('short': '(화)' · 'long': '(화요일)', 기본 'short') */
|
|
2776
|
+
weekdayFormat?: 'short' | 'long';
|
|
2777
|
+
}
|
|
2778
|
+
interface StnHeaderTitleTimeOptions {
|
|
2779
|
+
/** 초(Seconds) 포함 여부 (기본 true, false 시 'HH:mm') */
|
|
2780
|
+
showSeconds?: boolean;
|
|
2781
|
+
}
|
|
2782
|
+
declare function formatStnHeaderTitleDate(date: Date, options?: StnHeaderTitleDateOptions): string;
|
|
2783
|
+
declare function formatStnHeaderTitleWeekday(date: Date, format?: 'short' | 'long', wrapped?: boolean): string;
|
|
2784
|
+
declare function formatStnHeaderTitleTime(date: Date, options?: StnHeaderTitleTimeOptions): string;
|
|
2785
|
+
type StnHeaderTitleVariant = 'title' | 'dual' | 'clock';
|
|
2786
|
+
type StnHeaderTitleSize = 'sm' | 'md' | 'lg';
|
|
2787
|
+
type StnHeaderTitleBaseProps = Omit<HTMLAttributes<HTMLElement>, 'children' | 'title'> & {
|
|
2788
|
+
className?: string;
|
|
2789
|
+
/** 프레임 그래픽 표시 · 기본 true · false면 텍스트만 */
|
|
2790
|
+
framed?: boolean;
|
|
2791
|
+
/** 글자 크기 ('sm': 24/16px · 'md': 32/18px · 'lg': 40/20px) · 기본 'md' */
|
|
2792
|
+
size?: StnHeaderTitleSize;
|
|
2793
|
+
};
|
|
2794
|
+
type StnHeaderTitleTitleProps = StnHeaderTitleBaseProps & {
|
|
2795
|
+
variant?: 'title';
|
|
2796
|
+
/** 단일 타이틀 텍스트 (children 또는 title) */
|
|
2797
|
+
title?: ReactNode;
|
|
2798
|
+
children?: ReactNode;
|
|
2799
|
+
};
|
|
2800
|
+
type StnHeaderTitleDualProps = StnHeaderTitleBaseProps & {
|
|
2801
|
+
variant?: 'dual';
|
|
2802
|
+
/** 앞부분 일반 굵기 보조 텍스트 (18px Medium) */
|
|
2803
|
+
subText?: ReactNode;
|
|
2804
|
+
/** 뒷부분 굵은 메인 타이틀 텍스트 (32px SemiBold) */
|
|
2805
|
+
mainText?: ReactNode;
|
|
2806
|
+
/** title 또는 children도 mainText로 사용 가능 */
|
|
2807
|
+
title?: ReactNode;
|
|
2808
|
+
children?: ReactNode;
|
|
2809
|
+
};
|
|
2810
|
+
type StnHeaderTitleClockProps = StnHeaderTitleBaseProps & {
|
|
2811
|
+
variant: 'clock';
|
|
2812
|
+
/** 지정 날짜 문자열 (생략 시 현재 날짜) */
|
|
2813
|
+
date?: string;
|
|
2814
|
+
/** 지정 시각 문자열 (생략 시 현재 시각) */
|
|
2815
|
+
time?: string;
|
|
2816
|
+
/** 지정 요일 문자열 (생략 시 현재 요일 또는 날짜 포맷에 포함) */
|
|
2817
|
+
weekday?: string;
|
|
2818
|
+
/** 1초마다 실시간 갱신 (기본: date와 time이 모두 없을 때 true) */
|
|
2819
|
+
live?: boolean;
|
|
2820
|
+
/** 날짜 표시 여부 (기본 true) */
|
|
2821
|
+
showDate?: boolean;
|
|
2822
|
+
/** 요일 표시 여부 (기본 true, showDate=true일 때 날짜 뒤에 포함되거나 단독 표시) */
|
|
2823
|
+
showWeekday?: boolean;
|
|
2824
|
+
/** 시각 표시 여부 (기본 true) */
|
|
2825
|
+
showTime?: boolean;
|
|
2826
|
+
/** 시각 표시 시 초(Seconds) 포함 여부 (기본 true, false 시 'HH:mm') */
|
|
2827
|
+
showSeconds?: boolean;
|
|
2828
|
+
/** 요일 표기 형식 ('short': '(화)' · 'long': '(화요일)', 기본 'short') */
|
|
2829
|
+
weekdayFormat?: 'short' | 'long';
|
|
2830
|
+
/** 커스텀 날짜 포맷 함수 */
|
|
2831
|
+
dateFormat?: (date: Date) => string;
|
|
2832
|
+
/** 커스텀 시간 포맷 함수 */
|
|
2833
|
+
timeFormat?: (date: Date) => string;
|
|
2834
|
+
/** 커스텀 요일 포맷 함수 */
|
|
2835
|
+
weekdayFormatFn?: (date: Date) => string;
|
|
2836
|
+
/** 직접 하위 컴포넌트(StnHeaderTitle.Date, Time, Weekday 등)를 구성할 경우 */
|
|
2837
|
+
children?: ReactNode;
|
|
2838
|
+
};
|
|
2839
|
+
type StnHeaderTitleProps = StnHeaderTitleTitleProps | StnHeaderTitleDualProps | StnHeaderTitleClockProps;
|
|
2840
|
+
/** 문서용 — 프레임 그래픽만 */
|
|
2841
|
+
declare function StnHeaderTitleFramePreview({ className }: {
|
|
2842
|
+
className?: string;
|
|
2843
|
+
}): react_jsx_runtime.JSX.Element;
|
|
2844
|
+
declare function StnHeaderTitleMainText({ className, children, ...rest }: HTMLAttributes<HTMLHeadingElement>): react_jsx_runtime.JSX.Element;
|
|
2845
|
+
declare function StnHeaderTitleSubText({ className, children, ...rest }: HTMLAttributes<HTMLSpanElement>): react_jsx_runtime.JSX.Element;
|
|
2846
|
+
declare function StnHeaderTitleDate({ className, children, ...rest }: HTMLAttributes<HTMLElement>): react_jsx_runtime.JSX.Element;
|
|
2847
|
+
declare function StnHeaderTitleWeekday({ className, children, ...rest }: HTMLAttributes<HTMLSpanElement>): react_jsx_runtime.JSX.Element;
|
|
2848
|
+
declare function StnHeaderTitleTime({ className, children, ...rest }: HTMLAttributes<HTMLSpanElement>): react_jsx_runtime.JSX.Element;
|
|
2849
|
+
declare function StnHeaderTitleRoot(props: StnHeaderTitleProps): react_jsx_runtime.JSX.Element;
|
|
2850
|
+
declare const StnHeaderTitle: typeof StnHeaderTitleRoot & {
|
|
2851
|
+
Text: typeof StnHeaderTitleMainText;
|
|
2852
|
+
SubText: typeof StnHeaderTitleSubText;
|
|
2853
|
+
Date: typeof StnHeaderTitleDate;
|
|
2854
|
+
Weekday: typeof StnHeaderTitleWeekday;
|
|
2855
|
+
Time: typeof StnHeaderTitleTime;
|
|
2856
|
+
Frame: typeof StnHeaderTitleFramePreview;
|
|
2857
|
+
};
|
|
2858
|
+
|
|
2859
|
+
type StnContainerMaxWidth = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | false;
|
|
2860
|
+
type StnContainerProps<T extends ElementType = 'div'> = {
|
|
2861
|
+
/** 렌더링할 HTML 태그 또는 컴포넌트 (기본: 'div') */
|
|
2862
|
+
component?: T;
|
|
2863
|
+
/** @alias component */
|
|
2864
|
+
as?: T;
|
|
2865
|
+
/**
|
|
2866
|
+
* 콘텐츠 최대 너비. 기본은 화면이 커지면 따라 늘다 이 값에서 멈춘다.
|
|
2867
|
+
* - 'xs' (444px)
|
|
2868
|
+
* - 'sm' (768px)
|
|
2869
|
+
* - 'md' (1024px)
|
|
2870
|
+
* - 'lg' (1280px)
|
|
2871
|
+
* - 'xl' (1440px)
|
|
2872
|
+
* - false (상한 없음)
|
|
2873
|
+
* @default 'lg'
|
|
2874
|
+
*/
|
|
2875
|
+
maxWidth?: StnContainerMaxWidth;
|
|
2876
|
+
/** 좌우 패딩 거터 비활성화 여부 */
|
|
2877
|
+
disableGutters?: boolean;
|
|
2878
|
+
/**
|
|
2879
|
+
* true면 breakpoint마다 그 구간 폭으로 고정된다. 구간 안에서는 안 늘어난다.
|
|
2880
|
+
* `maxWidth`가 마지막 계단이다. 기본 `lg`면 768 → 1024 → 1280에서 멈춘다.
|
|
2881
|
+
*/
|
|
2882
|
+
fixed?: boolean;
|
|
2883
|
+
className?: string;
|
|
2884
|
+
style?: CSSProperties;
|
|
2885
|
+
children?: ReactNode;
|
|
2886
|
+
} & Omit<React.ComponentPropsWithoutRef<T>, 'as' | 'component' | 'children' | 'className' | 'style'>;
|
|
2887
|
+
/**
|
|
2888
|
+
* 본문 폭을 가운데로 제한하는 컨테이너.
|
|
2889
|
+
* 기본은 화면이 커지면 따라 늘다 `maxWidth`에서 멈춘다.
|
|
2890
|
+
* `fixed`는 breakpoint(768 / 1024 / 1280 / 1440)마다 폭이 한 단계씩 고정된다.
|
|
2891
|
+
*/
|
|
2892
|
+
declare const StnContainer: react.ForwardRefExoticComponent<Omit<StnContainerProps<ElementType>, "ref"> & react.RefAttributes<any>>;
|
|
2893
|
+
|
|
2894
|
+
type StnStackDirection = 'row' | 'row-reverse' | 'column' | 'column-reverse';
|
|
2895
|
+
type StnStackBreakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
2896
|
+
/** 값 하나, 또는 xs 기본 · sm 768 · md 1024 · lg 1280 · xl 1440 */
|
|
2897
|
+
type StnStackResponsive<T> = T | Partial<Record<StnStackBreakpoint, T>>;
|
|
2898
|
+
type StnStackWrap = 'nowrap' | 'wrap' | 'wrap-reverse';
|
|
2899
|
+
type StnStackScrollable = boolean | 'auto' | 'y' | 'x';
|
|
2900
|
+
type StnStackProps<T extends ElementType = 'div'> = {
|
|
2901
|
+
/** 렌더링할 HTML 태그 또는 컴포넌트 (기본: 'div') */
|
|
2902
|
+
component?: T;
|
|
2903
|
+
/** @alias component */
|
|
2904
|
+
as?: T;
|
|
2905
|
+
/**
|
|
2906
|
+
* 플렉스 방향. 브레이크포인트 맵이면 xs가 기본이다.
|
|
2907
|
+
* `direction={{ xs: 'column', sm: 'row' }}`
|
|
2908
|
+
* @default 'column'
|
|
2909
|
+
*/
|
|
2910
|
+
direction?: StnStackResponsive<StnStackDirection>;
|
|
2911
|
+
/**
|
|
2912
|
+
* 아이템 간격.
|
|
2913
|
+
* 숫자는 8px 스텝으로 `.stn-stack--spacing-*`가 `--stn-spacing-stack-*`를 고른다.
|
|
2914
|
+
* `1` → `--stn-spacing-stack-8`. `spacing={{ xs: 1, sm: 2, md: 4 }}`
|
|
2915
|
+
* @default 0
|
|
2916
|
+
*/
|
|
2917
|
+
spacing?: StnStackResponsive<number | string>;
|
|
2918
|
+
/** 가로/세로 정렬 */
|
|
2919
|
+
alignItems?: CSSProperties['alignItems'];
|
|
2920
|
+
/** 주축 정렬 */
|
|
2921
|
+
justifyContent?: CSSProperties['justifyContent'];
|
|
2922
|
+
/** 줄바꿈 여부 */
|
|
2923
|
+
wrap?: StnStackWrap;
|
|
2924
|
+
/**
|
|
2925
|
+
* 스크롤 가능 여부 및 축
|
|
2926
|
+
* - true | 'auto' | 'y': 세로 스크롤 (overflow-y: auto, overflow-x: hidden, min-height: 0, flex: 1 1 0%)
|
|
2927
|
+
* - 'x': 가로 스크롤 (overflow-x: auto, overflow-y: hidden, min-width: 0)
|
|
2928
|
+
*/
|
|
2929
|
+
scrollable?: StnStackScrollable;
|
|
2930
|
+
/**
|
|
2931
|
+
* 주축 방향으로 자식을 균등 분할 (`.is-fill`).
|
|
2932
|
+
* L1 높이 체인 안에서 위젯·패널을 세로/가로로 나눠 채울 때 사용.
|
|
2933
|
+
*/
|
|
2934
|
+
fill?: boolean;
|
|
2935
|
+
/**
|
|
2936
|
+
* 자식 사이에 끼우는 구분선. 선 자체에는 간격을 넣지 않습니다.
|
|
2937
|
+
* `spacing`(gap)이 선 양쪽에 그대로 적용됩니다.
|
|
2938
|
+
*/
|
|
2939
|
+
divider?: ReactNode;
|
|
2940
|
+
className?: string;
|
|
2941
|
+
style?: CSSProperties;
|
|
2942
|
+
children?: ReactNode;
|
|
2943
|
+
} & Omit<React.ComponentPropsWithoutRef<T>, 'as' | 'component' | 'children' | 'className' | 'style'>;
|
|
2944
|
+
/**
|
|
2945
|
+
* 1차원 Flex 스택 레이아웃 컴포넌트.
|
|
2946
|
+
* 수직/수평 방향(direction), 간격(spacing), 구분선(divider)을 쉽게 다룰 수 있습니다.
|
|
2947
|
+
*/
|
|
2948
|
+
declare const StnStack: react.ForwardRefExoticComponent<Omit<StnStackProps<ElementType>, "ref"> & react.RefAttributes<any>>;
|
|
2949
|
+
|
|
2950
|
+
type StnGridBreakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
2951
|
+
/** 숫자 또는 브레이크포인트 맵. xs는 기본, sm 768 · md 1024 · lg 1280 · xl 1440 */
|
|
2952
|
+
type StnGridResponsive<T> = T | Partial<Record<StnGridBreakpoint, T>>;
|
|
2953
|
+
/**
|
|
2954
|
+
* MUI spacing 스텝. 8px 단위로 `--stn-spacing-grid-*`에 연결된다.
|
|
2955
|
+
* 0 → 0, 0.5 → 4, 1 → 8, 2 → 16, 3 → 24, 4 → 32, 8 → 64, 12 → 96
|
|
2956
|
+
*/
|
|
2957
|
+
type StnGridSpacing = 0 | 0.5 | 1 | 2 | 3 | 4 | 8 | 12;
|
|
2958
|
+
type StnGridDirection = 'row' | 'row-reverse' | 'column' | 'column-reverse';
|
|
2959
|
+
/** 12열 기준 칸 수, 남는 폭을 나누는 grow, 콘텐츠 폭 auto */
|
|
2960
|
+
type StnGridSize = number | 'grow' | 'auto';
|
|
2961
|
+
type StnGridProps<T extends ElementType = 'div'> = {
|
|
2962
|
+
/** 렌더링할 HTML 태그 또는 컴포넌트 (기본: 'div') */
|
|
2963
|
+
component?: T;
|
|
2964
|
+
/** @alias component */
|
|
2965
|
+
as?: T;
|
|
2966
|
+
/** true면 그리드 컨테이너 */
|
|
2967
|
+
container?: boolean;
|
|
2968
|
+
/**
|
|
2969
|
+
* 열 수. 기본 12.
|
|
2970
|
+
* `columns={{ xs: 4, sm: 8, md: 12 }}`
|
|
2971
|
+
*/
|
|
2972
|
+
columns?: StnGridResponsive<number>;
|
|
2973
|
+
/**
|
|
2974
|
+
* 행·열 간격 스텝. `--stn-spacing-grid-*`를 사용한다.
|
|
2975
|
+
* `spacing={2}` → `var(--stn-spacing-grid-16)`
|
|
2976
|
+
*/
|
|
2977
|
+
spacing?: StnGridResponsive<StnGridSpacing>;
|
|
2978
|
+
/** 행 간격. 없으면 spacing을 따른다 */
|
|
2979
|
+
rowSpacing?: StnGridResponsive<StnGridSpacing>;
|
|
2980
|
+
/** 열 간격. 없으면 spacing을 따른다 */
|
|
2981
|
+
columnSpacing?: StnGridResponsive<StnGridSpacing>;
|
|
2982
|
+
/**
|
|
2983
|
+
* 칸 너비. 12열 기준 숫자, 남는 폭을 나누는 grow, 콘텐츠 폭 auto.
|
|
2984
|
+
* `size={8}` · `size="grow"` · `size="auto"` · `size={{ xs: 6, md: 'grow' }}`
|
|
2985
|
+
*/
|
|
2986
|
+
size?: StnGridResponsive<StnGridSize>;
|
|
2987
|
+
/**
|
|
2988
|
+
* 정렬 축. 지정하면 flex wrap 컨테이너가 된다.
|
|
2989
|
+
* row · row-reverse · column · column-reverse
|
|
2990
|
+
*/
|
|
2991
|
+
direction?: StnGridDirection;
|
|
2992
|
+
/** 주축 정렬. flex-start · center · flex-end · space-between · space-around · space-evenly */
|
|
2993
|
+
justifyContent?: CSSProperties['justifyContent'];
|
|
2994
|
+
/** 교차축 정렬. flex-start · center · flex-end · stretch · baseline */
|
|
2995
|
+
alignItems?: CSSProperties['alignItems'];
|
|
2996
|
+
className?: string;
|
|
2997
|
+
style?: CSSProperties;
|
|
2998
|
+
children?: ReactNode;
|
|
2999
|
+
} & Omit<React.ComponentPropsWithoutRef<T>, 'as' | 'component' | 'children' | 'className' | 'style'>;
|
|
3000
|
+
/**
|
|
3001
|
+
* 12열 flex 그리드. 컨테이너와 칸을 같은 컴포넌트로 쓴다.
|
|
3002
|
+
*/
|
|
3003
|
+
declare const StnGrid: react.ForwardRefExoticComponent<Omit<StnGridProps<ElementType>, "ref"> & react.RefAttributes<any>>;
|
|
3004
|
+
|
|
3005
|
+
type StnLayerShellProps = {
|
|
3006
|
+
/** L1 Main UI — 사이드 내비게이션 레일 (StnSideNavigation 등) */
|
|
3007
|
+
gnb?: ReactNode;
|
|
3008
|
+
/** L1 Main UI — 사이드 네비 위치 @default 'left' */
|
|
3009
|
+
gnbSide?: StnLnbSide;
|
|
3010
|
+
/** L1 Main UI — 상단 바 (StnHeader 등) · 네비 제외 영역 */
|
|
3011
|
+
header?: ReactNode;
|
|
3012
|
+
/** L1 Content 본문 — layer1 미지정 시 children 사용 */
|
|
3013
|
+
children?: ReactNode;
|
|
3014
|
+
/** 루트 래퍼 id */
|
|
3015
|
+
wrapId?: string;
|
|
3016
|
+
/** 루트 래퍼 추가 클래스명 */
|
|
3017
|
+
wrapClassName?: string;
|
|
3018
|
+
/** L1 Content 컨테이너 id */
|
|
3019
|
+
containerId?: string;
|
|
3020
|
+
/** L1 Content 컨테이너 추가 클래스명 */
|
|
3021
|
+
containerClassName?: string;
|
|
3022
|
+
/** 본문 추가 클래스명 */
|
|
3023
|
+
contentClassName?: string;
|
|
3024
|
+
/** LNB·데이터 트리 열 위치 */
|
|
3025
|
+
lnbSide?: StnLnbSide;
|
|
3026
|
+
/** 본문 스크롤 허용 여부 (기본: true). 화면 높이 초과 시 내부 스크롤 허용 */
|
|
3027
|
+
scrollable?: boolean | 'auto' | 'y' | 'x';
|
|
3028
|
+
/** L0 배경 레이어 — `StnLayer.Background` / `StnLayer0Background` 등 (z-index: 0) */
|
|
3029
|
+
layer0?: ReactNode;
|
|
3030
|
+
/** L1 메인 화면 본문 — `children`의 명시적 3단계 층위 슬롯 명칭 (z-index: 100) */
|
|
3031
|
+
layer1?: ReactNode;
|
|
3032
|
+
/** L2 모달 다이얼로그 — `StnPopup` 등 (Dim 스크림 내장, z-index: 200) */
|
|
3033
|
+
layer2?: ReactNode;
|
|
3034
|
+
/** toast · audio 등 유틸리티 오버레이 — `data-stn-layer-role="utility"` */
|
|
3035
|
+
utilities?: ReactNode;
|
|
3036
|
+
};
|
|
3037
|
+
/**
|
|
3038
|
+
* StnLayer role 기반 페이지 셸 — 3단계 층위 표준:
|
|
3039
|
+
* L0 Background · L1 Main UI (사이드바 + 우측 헤더/본문 스택 2분할 구조) · L2 Modal
|
|
3040
|
+
*/
|
|
3041
|
+
declare function StnLayerShell({ gnb, gnbSide, header, children, wrapId, wrapClassName, containerId, containerClassName, contentClassName, lnbSide: _lnbSide, scrollable, layer0, layer1, layer2, utilities, }: StnLayerShellProps): react_jsx_runtime.JSX.Element;
|
|
3042
|
+
|
|
3043
|
+
type StnListViewLayoutProps = Omit<HTMLAttributes<HTMLDivElement>, 'title'> & {
|
|
3044
|
+
/**
|
|
3045
|
+
* `StnLayerShell` / `ListPageScaffold` 안에서 쓸 때 `true`.
|
|
3046
|
+
* L0 · GNB · Header · `stn-content-area` 래퍼 없이
|
|
3047
|
+
* `StnPageScaffold`(LNB · search · table)만 렌더합니다.
|
|
3048
|
+
* @alias noShell
|
|
3049
|
+
*/
|
|
3050
|
+
bare?: boolean;
|
|
3051
|
+
/** @deprecated `bare` 사용 */
|
|
3052
|
+
noShell?: boolean;
|
|
3053
|
+
/** 페이지 타이틀 (header 미지정 시 기본 StnHeader에 전달) */
|
|
3054
|
+
title?: string;
|
|
3055
|
+
/** 상단 헤더 슬롯 (null 전달 시 헤더 안 함). `bare`일 때는 무시(셸이 담당) */
|
|
3056
|
+
header?: ReactNode | null;
|
|
3057
|
+
/** 검색 조건 슬롯 (StnSearchRequirementBar 등) */
|
|
3058
|
+
search?: ReactNode;
|
|
3059
|
+
/** LNB 사이드바 슬롯 (StnSectionSide + StnTree 등) */
|
|
3060
|
+
sidebar?: ReactNode;
|
|
3061
|
+
/** 메인 데이터 테이블 슬롯 (StnTable 등) */
|
|
3062
|
+
table?: ReactNode;
|
|
3063
|
+
/** 테이블 하단 페이징 슬롯 (StnPagination 등) */
|
|
3064
|
+
pagination?: ReactNode;
|
|
3065
|
+
/** LNB 위치 — 'left' | 'right' (기본 'left') */
|
|
3066
|
+
lnbSide?: 'left' | 'right';
|
|
3067
|
+
/** 커스텀 본문 (search, table, pagination 조합 대신 직접 전달할 때) */
|
|
3068
|
+
children?: ReactNode;
|
|
3069
|
+
};
|
|
3070
|
+
type StnListViewLayoutBodyProps = Pick<StnListViewLayoutProps, 'search' | 'sidebar' | 'table' | 'pagination' | 'lnbSide' | 'children' | 'className'>;
|
|
3071
|
+
/** L1 listview 그리드 — `StnLayerShell` `stn-content-area` 직하위 또는 `bare` 루트 */
|
|
3072
|
+
declare function StnListViewLayoutBody({ search, sidebar, table, pagination, lnbSide, children, className, }: StnListViewLayoutBodyProps): react_jsx_runtime.JSX.Element;
|
|
3073
|
+
declare function StnListViewLayoutRoot({ bare: bareProp, noShell, title, header, search, sidebar, table, pagination, lnbSide, children, className, ...rest }: StnListViewLayoutProps): react_jsx_runtime.JSX.Element;
|
|
3074
|
+
declare function StnListViewLayoutHeader({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
3075
|
+
declare function StnListViewLayoutSearch({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
3076
|
+
declare function StnListViewLayoutSidebar({ side, className, children, ...rest }: HTMLAttributes<HTMLElement> & {
|
|
3077
|
+
side?: 'left' | 'right';
|
|
3078
|
+
}): react_jsx_runtime.JSX.Element;
|
|
3079
|
+
declare function StnListViewLayoutContent({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
3080
|
+
declare function StnListViewLayoutTable({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
3081
|
+
declare function StnListViewLayoutPagination({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
3082
|
+
declare const StnListViewLayout: typeof StnListViewLayoutRoot & {
|
|
3083
|
+
Body: typeof StnListViewLayoutBody;
|
|
3084
|
+
Header: typeof StnListViewLayoutHeader;
|
|
3085
|
+
Search: typeof StnListViewLayoutSearch;
|
|
3086
|
+
Sidebar: typeof StnListViewLayoutSidebar;
|
|
3087
|
+
Content: typeof StnListViewLayoutContent;
|
|
3088
|
+
Table: typeof StnListViewLayoutTable;
|
|
3089
|
+
Pagination: typeof StnListViewLayoutPagination;
|
|
3090
|
+
};
|
|
3091
|
+
|
|
3092
|
+
type StnLayerProps = Omit<HTMLAttributes<HTMLDivElement>, 'className'> & {
|
|
3093
|
+
/** L0~L4 · map — 고정 z-index 층 */
|
|
3094
|
+
level: StnElevationLevel;
|
|
3095
|
+
/**
|
|
3096
|
+
* Infomap 화면 역할. 미지정 시 level 기본값(0→background · 1→content · 2→modal).
|
|
3097
|
+
* `StnLayer.Dim` 은 같은 L2 elevation이어도 role이 달라야 함.
|
|
3098
|
+
*/
|
|
3099
|
+
role?: StnLayerRole | 'map';
|
|
3100
|
+
/**
|
|
3101
|
+
* 면 채움 방식. 기본: L0=default, L1~L4=transparent(투명 셸).
|
|
3102
|
+
* - widget / panel: L1 카드·패널 + shadow.2
|
|
3103
|
+
* - solid: 레벨 surface-N (L2~L4 선택)
|
|
3104
|
+
* - gnb: L2 GNB 투명 크롬
|
|
3105
|
+
* - dim: L3 딤 스크림 (--stn-dim-bg)
|
|
3106
|
+
*/
|
|
3107
|
+
surface?: StnLayerSurface;
|
|
3108
|
+
/** solid·widget·panel 에 elevation shadow 적용 (L1 widget/panel은 기본 on) */
|
|
3109
|
+
withShadow?: boolean;
|
|
3110
|
+
className?: string;
|
|
3111
|
+
children?: ReactNode;
|
|
3112
|
+
};
|
|
3113
|
+
/** role 별칭 — level은 역할에서 고정 */
|
|
3114
|
+
type StnLayerRoleProps = Omit<StnLayerProps, 'level' | 'role'>;
|
|
3115
|
+
/**
|
|
3116
|
+
* Elevation 레이어(도화지) — z-index 층을 고정하고, 면·shadow는 surface로 선택.
|
|
3117
|
+
* Pub: `stn-elev-{0-4}` + `stn-elev--shell|--panel|--solid|--dim|…`
|
|
3118
|
+
*
|
|
3119
|
+
* 역할: `StnLayer.Background` · `Content` · `Dim` · `Modal` (flat `StnLayerBackground` …)
|
|
3120
|
+
*/
|
|
3121
|
+
declare const StnLayerRoot: react.ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLDivElement>, "className"> & {
|
|
3122
|
+
/** L0~L4 · map — 고정 z-index 층 */
|
|
3123
|
+
level: StnElevationLevel;
|
|
3124
|
+
/**
|
|
3125
|
+
* Infomap 화면 역할. 미지정 시 level 기본값(0→background · 1→content · 2→modal).
|
|
3126
|
+
* `StnLayer.Dim` 은 같은 L2 elevation이어도 role이 달라야 함.
|
|
3127
|
+
*/
|
|
3128
|
+
role?: StnLayerRole | "map";
|
|
3129
|
+
/**
|
|
3130
|
+
* 면 채움 방식. 기본: L0=default, L1~L4=transparent(투명 셸).
|
|
3131
|
+
* - widget / panel: L1 카드·패널 + shadow.2
|
|
3132
|
+
* - solid: 레벨 surface-N (L2~L4 선택)
|
|
3133
|
+
* - gnb: L2 GNB 투명 크롬
|
|
3134
|
+
* - dim: L3 딤 스크림 (--stn-dim-bg)
|
|
3135
|
+
*/
|
|
3136
|
+
surface?: StnLayerSurface;
|
|
3137
|
+
/** solid·widget·panel 에 elevation shadow 적용 (L1 widget/panel은 기본 on) */
|
|
3138
|
+
withShadow?: boolean;
|
|
3139
|
+
className?: string;
|
|
3140
|
+
children?: ReactNode;
|
|
3141
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
3142
|
+
declare const StnLayerBackground: react.ForwardRefExoticComponent<StnLayerRoleProps & react.RefAttributes<HTMLDivElement>>;
|
|
3143
|
+
declare const StnLayerContent: react.ForwardRefExoticComponent<StnLayerRoleProps & react.RefAttributes<HTMLDivElement>>;
|
|
3144
|
+
declare const StnLayerDim: react.ForwardRefExoticComponent<StnLayerRoleProps & react.RefAttributes<HTMLDivElement>>;
|
|
3145
|
+
declare const StnLayerModal: react.ForwardRefExoticComponent<StnLayerRoleProps & react.RefAttributes<HTMLDivElement>>;
|
|
3146
|
+
type StnLayerComponent = typeof StnLayerRoot & {
|
|
3147
|
+
Background: typeof StnLayerBackground;
|
|
3148
|
+
Content: typeof StnLayerContent;
|
|
3149
|
+
Dim: typeof StnLayerDim;
|
|
3150
|
+
Modal: typeof StnLayerModal;
|
|
3151
|
+
};
|
|
3152
|
+
declare const StnLayer: StnLayerComponent;
|
|
3153
|
+
|
|
3154
|
+
type StnPageScaffoldRootProps = HTMLAttributes<HTMLDivElement> & {
|
|
3155
|
+
children?: ReactNode;
|
|
3156
|
+
className?: string;
|
|
3157
|
+
};
|
|
3158
|
+
/** 페이지 뼈대 루트 — 구역 조립용 래퍼 (로딩 UI 아님) */
|
|
3159
|
+
declare function StnPageScaffoldRoot({ children, className, ...rest }: StnPageScaffoldRootProps): react_jsx_runtime.JSX.Element;
|
|
3160
|
+
type StnPageScaffoldRegionProps = HTMLAttributes<HTMLDivElement> & {
|
|
3161
|
+
label: string;
|
|
3162
|
+
hint?: string;
|
|
3163
|
+
children?: ReactNode;
|
|
3164
|
+
className?: string;
|
|
3165
|
+
};
|
|
3166
|
+
/** 빈 구역 라벨 — LNB·search·팝업 본문 등 */
|
|
3167
|
+
declare function StnPageScaffoldRegion({ label, hint, children, className, ...rest }: StnPageScaffoldRegionProps): react_jsx_runtime.JSX.Element;
|
|
3168
|
+
type StnPageScaffoldMapPlaceholderProps = HTMLAttributes<HTMLDivElement> & {
|
|
3169
|
+
message?: string;
|
|
3170
|
+
note?: string;
|
|
3171
|
+
className?: string;
|
|
3172
|
+
};
|
|
3173
|
+
/** 맵·토폴로지 자리 — 실제 맵 JS 대신 안내 박스 */
|
|
3174
|
+
declare function StnPageScaffoldMapPlaceholder({ message, note, className, children, ...rest }: StnPageScaffoldMapPlaceholderProps): react_jsx_runtime.JSX.Element;
|
|
3175
|
+
type StnPageScaffoldMapCanvasProps = HTMLAttributes<HTMLDivElement> & {
|
|
3176
|
+
className?: string;
|
|
3177
|
+
};
|
|
3178
|
+
/** 맵·토폴로지 마운트 — L0 배경만 보이는 빈 본문 (placeholder 박스 없음) */
|
|
3179
|
+
declare function StnPageScaffoldMapCanvas({ className, children, ...rest }: StnPageScaffoldMapCanvasProps): react_jsx_runtime.JSX.Element;
|
|
3180
|
+
type StnPageScaffoldLayerProps = StnLayerProps & {
|
|
3181
|
+
/** DS·개발용 구역 라벨 (L3 팝업 본문 등) */
|
|
3182
|
+
label?: string;
|
|
3183
|
+
hint?: string;
|
|
3184
|
+
};
|
|
3185
|
+
/**
|
|
3186
|
+
* StnLayer + 뼈대 슬롯 — 예: L3 팝업 층에 “여기 본문” 표시
|
|
3187
|
+
* elevation은 StnLayer가 담당, 레이아웃 구역은 Page scaffold.
|
|
3188
|
+
*/
|
|
3189
|
+
declare function StnPageScaffoldLayer({ label, hint, children, className, ...layerProps }: StnPageScaffoldLayerProps): react_jsx_runtime.JSX.Element;
|
|
3190
|
+
/** 토스 ListRow.AssetIcon 스타일 — StnPageScaffold.Region 조합 */
|
|
3191
|
+
declare const StnPageScaffold: typeof StnPageScaffoldRoot & {
|
|
3192
|
+
Region: typeof StnPageScaffoldRegion;
|
|
3193
|
+
MapPlaceholder: typeof StnPageScaffoldMapPlaceholder;
|
|
3194
|
+
MapCanvas: typeof StnPageScaffoldMapCanvas;
|
|
3195
|
+
Layer: typeof StnPageScaffoldLayer;
|
|
3196
|
+
};
|
|
3197
|
+
type ListPageScaffoldProps = Omit<StnLayerShellProps, 'children' | 'header'> & {
|
|
3198
|
+
/** L1 Main UI — 사이드 네비 (StnSideNavigation) */
|
|
3199
|
+
gnb?: ReactNode;
|
|
3200
|
+
/**
|
|
3201
|
+
* L1 Main UI — App header (`StnHeader` page 등).
|
|
3202
|
+
* `null`이면 헤더 없음. Map과 같이 `StnHeader` 전달 가능.
|
|
3203
|
+
*/
|
|
3204
|
+
header?: ReactNode | null;
|
|
3205
|
+
/** `header` 미지정 시 page title 기본값 */
|
|
3206
|
+
title?: string;
|
|
3207
|
+
lnbHint?: string;
|
|
3208
|
+
searchHint?: string;
|
|
3209
|
+
tableHint?: string;
|
|
3210
|
+
/** false면 LNB 영역 미렌더 */
|
|
3211
|
+
showLnb?: boolean;
|
|
3212
|
+
/** `lnb_box` 슬롯 — 미지정 시 placeholder Region (보통 `StnSectionSide` + `StnTree`) */
|
|
3213
|
+
lnb?: ReactNode;
|
|
3214
|
+
/** `search_area` 슬롯 — 미지정 시 placeholder Region */
|
|
3215
|
+
search?: ReactNode;
|
|
3216
|
+
/** false면 search_area 미렌더 (has_sch는 호출측에서 빼세요) */
|
|
3217
|
+
showSearch?: boolean;
|
|
3218
|
+
children?: ReactNode;
|
|
3219
|
+
/** @deprecated StnLayerShell이 기본 표준 셸입니다. 생략 가능합니다. */
|
|
3220
|
+
shell?: 'layer';
|
|
3221
|
+
/** LNB 열 위치 — `has_lnb` ↔ `has_lnb_right` 자동 치환 (layer 셸) */
|
|
3222
|
+
lnbSide?: StnLnbSide;
|
|
3223
|
+
/** L0 배경 — `StnLayer0Background` 등 */
|
|
3224
|
+
layer0?: ReactNode;
|
|
3225
|
+
/** L1 메인 화면 본문 — `children`의 명시적 레이어 슬롯 명칭 */
|
|
3226
|
+
layer1?: ReactNode;
|
|
3227
|
+
/** L2 모달 다이얼로그 — `StnPopup` 등 (Dim 스크림 내장) */
|
|
3228
|
+
layer2?: ReactNode;
|
|
3229
|
+
};
|
|
3230
|
+
/** interface_list 계열 — Header · LNB · search · table 구역 */
|
|
3231
|
+
declare function ListPageScaffold({ gnb, header, title, lnbHint, searchHint, tableHint, showLnb, lnb, search, showSearch, children, lnbSide, scrollable, layer0, layer1, layer2, ...shellProps }: ListPageScaffoldProps & {
|
|
3232
|
+
scrollable?: boolean | 'auto' | 'y' | 'x';
|
|
3233
|
+
}): react_jsx_runtime.JSX.Element;
|
|
3234
|
+
type DashboardType = 'map' | 'topology' | 'widget-grid';
|
|
3235
|
+
type DashboardPageScaffoldProps = Omit<StnLayerShellProps, 'children' | 'header' | 'layer1'> & {
|
|
3236
|
+
/** 대시보드 스펙 구분자 — 'map' (GIS/맵) | 'topology' (네트워크 토폴로지) | 'widget-grid' (자유 위젯 그리드) */
|
|
3237
|
+
type?: DashboardType;
|
|
3238
|
+
/** L1 content 본문 커스텀 — 미지정 시 left/right/MapPlaceholder 로 `.dashboard` 조립. layer1 슬롯을 따로 두지 않음 */
|
|
3239
|
+
children?: ReactNode;
|
|
3240
|
+
gnb: ReactNode;
|
|
3241
|
+
header?: ReactNode;
|
|
3242
|
+
mapMessage?: string;
|
|
3243
|
+
mapNote?: string;
|
|
3244
|
+
kind?: 'map' | 'topology' | 'canvas';
|
|
3245
|
+
left?: ReactNode | null;
|
|
3246
|
+
right?: ReactNode | null;
|
|
3247
|
+
faultPanel?: ReactNode;
|
|
3248
|
+
/** 위젯 패널 배치 위치 — 'right' (우측) | 'left' (좌측) | 'both' (양쪽) | 'none' (없음 - 100% Full Map) */
|
|
3249
|
+
widgetPosition?: 'right' | 'left' | 'both' | 'none';
|
|
3250
|
+
/** 우측 `stn-page-scaffold__region` / `dashboard_right` 영역 표시 여부 (기본 true, false 시 100% Full Map) */
|
|
3251
|
+
showRightRegion?: boolean;
|
|
3252
|
+
/**
|
|
3253
|
+
* L1 content 비움 — `.dashboard` 자식 없이 L0 배경만
|
|
3254
|
+
* (`stn-dashboard--empty`)
|
|
3255
|
+
*/
|
|
3256
|
+
bodyEmpty?: boolean;
|
|
3257
|
+
wrapClassName?: string;
|
|
3258
|
+
/** 본문 Container 스크롤 가능 여부 (기본: true). 초과 컨텐츠 시 내부 스크롤 허용 */
|
|
3259
|
+
scrollable?: boolean | 'auto' | 'y' | 'x';
|
|
3260
|
+
/** @deprecated StnLayerShell이 기본 표준 셸입니다. 생략 가능합니다. */
|
|
3261
|
+
shell?: 'layer';
|
|
3262
|
+
/** L0 배경 — `StnLayer0Background` */
|
|
3263
|
+
layer0?: ReactNode;
|
|
3264
|
+
/** L2 모달 / 팝업 다이얼로그 (StnPopup 등) */
|
|
3265
|
+
layer2?: ReactNode;
|
|
3266
|
+
};
|
|
3267
|
+
/** 대시보드 공통 스캐폴드 — type('map' | 'topology' | 'widget-grid')에 맞춰 Header/GNB/캔버스/L0 자동 매핑.
|
|
3268
|
+
* L1 `.stn-layer-1`: 좌측 사이드바 + 우측 본문 스택(Header + Grid) 2분할 구조.
|
|
3269
|
+
*/
|
|
3270
|
+
declare function DashboardPageScaffold({ type, children, gnb, header, mapMessage, mapNote, kind, left, right, faultPanel, widgetPosition, showRightRegion, bodyEmpty, wrapClassName, scrollable, layer0, layer2, ...shellProps }: DashboardPageScaffoldProps): react_jsx_runtime.JSX.Element;
|
|
3271
|
+
|
|
3272
|
+
type AlertCenterPageScaffoldProps = Omit<DashboardPageScaffoldProps, 'gnb' | 'right' | 'faultPanel' | 'mapMessage' | 'mapNote'> & {
|
|
3273
|
+
/** 알림 패널 — 미지정 시 데모 StnAlertCenterPanel */
|
|
3274
|
+
gnbAlertPanel?: ReactNode;
|
|
3275
|
+
defaultAlertOpen?: boolean;
|
|
3276
|
+
mapMessage?: string;
|
|
3277
|
+
mapNote?: string;
|
|
3278
|
+
/** `.real_time_fault_status` 자리 placeholder */
|
|
3279
|
+
showFaultPanelPlaceholder?: boolean;
|
|
3280
|
+
faultPanel?: ReactNode;
|
|
3281
|
+
/** 우측 4위젯 — 기본 AlertCenterDashboard */
|
|
3282
|
+
right?: ReactNode;
|
|
3283
|
+
clock?: ReactNode;
|
|
3284
|
+
gnb?: ReactNode;
|
|
3285
|
+
defaultGnbOpen?: boolean;
|
|
3286
|
+
};
|
|
3287
|
+
/**
|
|
3288
|
+
* `alert_center.html` 1단계 페이지 뼈대 — 맵 빈 칸 + 사이드바·알림 + 헤더(StnHeader widget) + 우측 위젯
|
|
3289
|
+
*/
|
|
3290
|
+
declare function AlertCenterPageScaffold({ gnbAlertPanel, defaultAlertOpen: _defaultAlertOpen, mapMessage, mapNote, showFaultPanelPlaceholder, faultPanel, right, clock, header, wrapId, gnb: gnbProp, defaultGnbOpen, ...shellProps }: AlertCenterPageScaffoldProps): react_jsx_runtime.JSX.Element;
|
|
3291
|
+
|
|
3292
|
+
type LoginPageScaffoldProps = Omit<StnLayerShellProps, 'children' | 'gnb' | 'header' | 'layer1' | 'layer2'> & {
|
|
3293
|
+
/** L0 배경 — 기본 `StnLayer0Background variant="login"` */
|
|
3294
|
+
layer0?: ReactNode;
|
|
3295
|
+
/** 기본 카드의 로고 — `children`을 넘기면 무시 */
|
|
3296
|
+
logo?: ReactNode;
|
|
3297
|
+
productCaption?: string;
|
|
3298
|
+
/** 카드 테두리 회전 레이저 빔 애니메이션 여부 */
|
|
3299
|
+
cardGlow?: boolean;
|
|
3300
|
+
/** 카드 스타일 변형 ('default' | 'glow') */
|
|
3301
|
+
cardVariant?: StnLoginCardVariant;
|
|
3302
|
+
/** 소셜 로그인 탭 선택 시 노출할 커스텀 콘텐츠. 미지정 시 기본 `<StnLoginPlaceholder />` 노출 */
|
|
3303
|
+
socialContent?: ReactNode;
|
|
3304
|
+
/** L1 카드. 기본은 `StnLoginCard` + 기본 폼. 직접 넘기면 카드 전체를 교체 */
|
|
3305
|
+
children?: ReactNode;
|
|
3306
|
+
onLogin?: (id: string, password: string) => void;
|
|
3307
|
+
signUpHref?: string;
|
|
3308
|
+
recoverHref?: string;
|
|
3309
|
+
};
|
|
3310
|
+
/**
|
|
3311
|
+
* Login 화면 레시피 — L0 + L1 중앙. 카드는 `StnLoginCard`, 배경은 `StnLayer0Background`.
|
|
3312
|
+
*/
|
|
3313
|
+
declare function LoginPageScaffold({ layer0, logo, productCaption, cardGlow, cardVariant, socialContent, children, wrapClassName, onLogin, signUpHref, recoverHref, ...shellProps }: LoginPageScaffoldProps): react_jsx_runtime.JSX.Element;
|
|
3314
|
+
|
|
3315
|
+
type StnMapCanvasProps = HTMLAttributes<HTMLDivElement> & {
|
|
3316
|
+
children?: ReactNode;
|
|
3317
|
+
className?: string;
|
|
3318
|
+
};
|
|
3319
|
+
/**
|
|
3320
|
+
* 맵·토폴로지·차트 캔버스 마운트 컨테이너 컴포넌트
|
|
3321
|
+
* `.stn-map-canvas`를 제공하여 GIS 엔진 및 토폴로지 라이브러리를 안전하게 마운트합니다.
|
|
3322
|
+
*/
|
|
3323
|
+
declare function StnMapCanvas({ children, className, ...rest }: StnMapCanvasProps): react_jsx_runtime.JSX.Element;
|
|
3324
|
+
|
|
3325
|
+
type StnDashboardWidgetPosition = 'right' | 'left' | 'both' | 'none';
|
|
3326
|
+
type StnDashboardProps = HTMLAttributes<HTMLDivElement> & {
|
|
3327
|
+
children?: ReactNode;
|
|
3328
|
+
className?: string;
|
|
3329
|
+
/** 위젯 패널 위치 — 기본값 'right' */
|
|
3330
|
+
widgetPosition?: StnDashboardWidgetPosition;
|
|
3331
|
+
/** 빈 대시보드 상태 (L0 배경만 노출) */
|
|
3332
|
+
empty?: boolean;
|
|
3333
|
+
};
|
|
3334
|
+
type StnDashboardRegionProps = HTMLAttributes<HTMLDivElement> & {
|
|
3335
|
+
children?: ReactNode;
|
|
3336
|
+
className?: string;
|
|
3337
|
+
};
|
|
3338
|
+
declare function StnDashboardRoot({ children, className, widgetPosition, empty, style, ...rest }: StnDashboardProps): react_jsx_runtime.JSX.Element;
|
|
3339
|
+
declare function StnDashboardLeft({ children, className, style, ...rest }: StnDashboardRegionProps): react_jsx_runtime.JSX.Element;
|
|
3340
|
+
declare function StnDashboardRight({ children, className, style, ...rest }: StnDashboardRegionProps): react_jsx_runtime.JSX.Element;
|
|
3341
|
+
declare function StnDashboardTopRight({ children, className, ...rest }: StnDashboardRegionProps): react_jsx_runtime.JSX.Element;
|
|
3342
|
+
/**
|
|
3343
|
+
* 대시보드 레이아웃 — Pub 클래스(`.dashboard` / `_left` / `_right`)
|
|
3344
|
+
* Compound: `Left` · `Right` · `TopRight` · `Canvas`
|
|
3345
|
+
*/
|
|
3346
|
+
declare const StnDashboard: typeof StnDashboardRoot & {
|
|
3347
|
+
Root: typeof StnDashboardRoot;
|
|
3348
|
+
Left: typeof StnDashboardLeft;
|
|
3349
|
+
Right: typeof StnDashboardRight;
|
|
3350
|
+
TopRight: typeof StnDashboardTopRight;
|
|
3351
|
+
Canvas: typeof StnMapCanvas;
|
|
3352
|
+
};
|
|
3353
|
+
|
|
3354
|
+
type StnLoadingSkeletonVariant = 'line' | 'circle' | 'block' | 'profile' | 'widget' | 'table';
|
|
3355
|
+
type StnLoadingSkeletonLineProps = HTMLAttributes<HTMLDivElement> & {
|
|
3356
|
+
width?: 'full' | 'medium' | 'short';
|
|
3357
|
+
className?: string;
|
|
3358
|
+
style?: CSSProperties;
|
|
3359
|
+
};
|
|
3360
|
+
declare function StnLoadingSkeletonLine({ width, className, style, ...rest }: StnLoadingSkeletonLineProps): react_jsx_runtime.JSX.Element;
|
|
3361
|
+
type StnLoadingSkeletonBlockProps = HTMLAttributes<HTMLDivElement> & {
|
|
3362
|
+
minHeight?: number | string;
|
|
3363
|
+
className?: string;
|
|
3364
|
+
style?: CSSProperties;
|
|
3365
|
+
};
|
|
3366
|
+
declare function StnLoadingSkeletonBlock({ minHeight, className, style, ...rest }: StnLoadingSkeletonBlockProps): react_jsx_runtime.JSX.Element;
|
|
3367
|
+
type StnLoadingSkeletonCircleProps = HTMLAttributes<HTMLDivElement> & {
|
|
3368
|
+
size?: number;
|
|
3369
|
+
className?: string;
|
|
3370
|
+
style?: CSSProperties;
|
|
3371
|
+
};
|
|
3372
|
+
declare function StnLoadingSkeletonCircle({ size, className, style, ...rest }: StnLoadingSkeletonCircleProps): react_jsx_runtime.JSX.Element;
|
|
3373
|
+
type StnLoadingSkeletonProfileProps = HTMLAttributes<HTMLDivElement> & {
|
|
3374
|
+
/** 아바타 원형 크기 (기본: 40px) */
|
|
3375
|
+
avatarSize?: number;
|
|
3376
|
+
className?: string;
|
|
3377
|
+
style?: CSSProperties;
|
|
3378
|
+
};
|
|
3379
|
+
declare function StnLoadingSkeletonProfile({ avatarSize, className, style, ...rest }: StnLoadingSkeletonProfileProps): react_jsx_runtime.JSX.Element;
|
|
3380
|
+
type StnLoadingSkeletonWidgetProps = HTMLAttributes<HTMLDivElement> & {
|
|
3381
|
+
lines?: number;
|
|
3382
|
+
className?: string;
|
|
3383
|
+
style?: CSSProperties;
|
|
3384
|
+
};
|
|
3385
|
+
/** 위젯 본문 로딩 — StnWidget children 자리 */
|
|
3386
|
+
declare function StnLoadingSkeletonWidget({ lines, className, style, ...rest }: StnLoadingSkeletonWidgetProps): react_jsx_runtime.JSX.Element;
|
|
3387
|
+
type StnLoadingSkeletonTableProps = HTMLAttributes<HTMLDivElement> & {
|
|
3388
|
+
rows?: number;
|
|
3389
|
+
cols?: number;
|
|
3390
|
+
className?: string;
|
|
3391
|
+
style?: CSSProperties;
|
|
3392
|
+
};
|
|
3393
|
+
declare function StnLoadingSkeletonTable({ rows, cols, className, style, ...rest }: StnLoadingSkeletonTableProps): react_jsx_runtime.JSX.Element;
|
|
3394
|
+
type StnLoadingSkeletonProps = HTMLAttributes<HTMLDivElement> & {
|
|
3395
|
+
/**
|
|
3396
|
+
* 스켈레톤 형태:
|
|
3397
|
+
* - 'line': 텍스트 라인 (기본)
|
|
3398
|
+
* - 'circle': 원형 아바타 / 아이콘
|
|
3399
|
+
* - 'block': 카드 / 차트 / 배너 면 영역
|
|
3400
|
+
* - 'profile': 아바타 + 2줄 텍스트 복합 프리셋
|
|
3401
|
+
* - 'widget': 위젯용 다중 라인
|
|
3402
|
+
* - 'table': 그리드형 테이블 프리셋
|
|
3403
|
+
*/
|
|
3404
|
+
variant?: StnLoadingSkeletonVariant;
|
|
3405
|
+
/** variant="line" 전용: 가로 너비 ('full' | 'medium' | 'short') */
|
|
3406
|
+
width?: 'full' | 'medium' | 'short';
|
|
3407
|
+
/** variant="circle" 및 "profile" 아바타 크기 (px) */
|
|
3408
|
+
size?: number;
|
|
3409
|
+
avatarSize?: number;
|
|
3410
|
+
/** variant="block" 전용: 최소 높이 (px 또는 string) */
|
|
3411
|
+
minHeight?: number | string;
|
|
3412
|
+
/** variant="widget" 전용: 라인 수 */
|
|
3413
|
+
lines?: number;
|
|
3414
|
+
/** variant="table" 전용: 행/열 수 */
|
|
3415
|
+
rows?: number;
|
|
3416
|
+
cols?: number;
|
|
3417
|
+
className?: string;
|
|
3418
|
+
style?: CSSProperties;
|
|
3419
|
+
children?: ReactNode;
|
|
3420
|
+
};
|
|
3421
|
+
/**
|
|
3422
|
+
* StnLoadingSkeleton
|
|
3423
|
+
* 단일 컴포넌트에 variant prop을 지정하거나, children을 넘겨 복합 레이아웃 컨테이너로 사용합니다.
|
|
3424
|
+
* 하위 호환을 위해 StnLoadingSkeleton.Line 등의 서브컴포넌트도 동일하게 지원합니다.
|
|
3425
|
+
*/
|
|
3426
|
+
declare function StnLoadingSkeletonRoot({ variant, width, size, avatarSize, minHeight, lines, rows, cols, children, className, style, ...rest }: StnLoadingSkeletonProps): react_jsx_runtime.JSX.Element;
|
|
3427
|
+
/** 로딩 스켈레톤 UI — 단일 컴포넌트(<StnLoadingSkeleton variant="..." />) 또는 서브컴포넌트 네임스페이스 지원 */
|
|
3428
|
+
declare const StnLoadingSkeleton: typeof StnLoadingSkeletonRoot & {
|
|
3429
|
+
Line: typeof StnLoadingSkeletonLine;
|
|
3430
|
+
Block: typeof StnLoadingSkeletonBlock;
|
|
3431
|
+
Circle: typeof StnLoadingSkeletonCircle;
|
|
3432
|
+
Profile: typeof StnLoadingSkeletonProfile;
|
|
3433
|
+
Widget: typeof StnLoadingSkeletonWidget;
|
|
3434
|
+
Table: typeof StnLoadingSkeletonTable;
|
|
3435
|
+
};
|
|
3436
|
+
/** 레거시 RootProps 호환 alias */
|
|
3437
|
+
type StnLoadingSkeletonRootProps = StnLoadingSkeletonProps;
|
|
3438
|
+
|
|
3439
|
+
type StnToolbarOrientation = 'horizontal' | 'vertical';
|
|
3440
|
+
type StnFloatingToolbarPlacement = 'none' | 'bottom-left' | 'bottom-center' | 'bottom-right' | 'top-left' | 'top-right' | 'center-left' | 'center-right';
|
|
3441
|
+
interface StnFloatingToolbarProps extends react__default.HTMLAttributes<HTMLDivElement> {
|
|
3442
|
+
/** 캔버스 기준 고정 위치 (기본값: 'none' - 인라인 플렉스) */
|
|
3443
|
+
placement?: StnFloatingToolbarPlacement;
|
|
3444
|
+
/** 툴바 방향 (기본값: 'horizontal') */
|
|
3445
|
+
orientation?: StnToolbarOrientation;
|
|
3446
|
+
/** 추가 클래스 */
|
|
3447
|
+
className?: string;
|
|
3448
|
+
children?: react__default.ReactNode;
|
|
3449
|
+
}
|
|
3450
|
+
interface StnMapToolbarProps extends StnFloatingToolbarProps {
|
|
3451
|
+
/** 뷰 모드 드롭다운 옵션 (미지정 시 기본 ['구면', '평면', '원형'] 제공) */
|
|
3452
|
+
modeOptions?: StnDropdownOption[];
|
|
3453
|
+
/** 현재 선택된 뷰 모드 값 */
|
|
3454
|
+
modeValue?: string;
|
|
3455
|
+
/** 뷰 모드 변경 콜백 */
|
|
3456
|
+
onModeChange?: (value: string) => void;
|
|
3457
|
+
/** 드롭다운 너비 (기본값: 110px) */
|
|
3458
|
+
dropdownWidth?: number | string;
|
|
3459
|
+
/** 툴바 버튼 스타일 (기본값: 'ghost') */
|
|
3460
|
+
buttonVariant?: 'ghost' | 'outlined';
|
|
3461
|
+
/** 초기화(Restore) 버튼 클릭 핸들러 */
|
|
3462
|
+
onRestore?: () => void;
|
|
3463
|
+
/** 전체화면(Fullscreen) 버튼 클릭 핸들러 */
|
|
3464
|
+
onFullscreen?: () => void;
|
|
3465
|
+
/** 확대(Zoom In) 버튼 클릭 핸들러 */
|
|
3466
|
+
onZoomIn?: () => void;
|
|
3467
|
+
/** 축소(Zoom Out) 버튼 클릭 핸들러 */
|
|
3468
|
+
onZoomOut?: () => void;
|
|
3469
|
+
/** 새로고침(Refresh) 버튼 클릭 핸들러 */
|
|
3470
|
+
onRefresh?: () => void;
|
|
3471
|
+
/** 추가 커스텀 액션 버튼들 */
|
|
3472
|
+
extraActions?: react__default.ReactNode;
|
|
3473
|
+
}
|
|
3474
|
+
/**
|
|
3475
|
+
* StnFloatingToolbar
|
|
3476
|
+
* 지도, 차트, 토폴로지 캔버스 위에 플로팅되는 툴바 컨테이너입니다.
|
|
3477
|
+
*/
|
|
3478
|
+
declare const StnFloatingToolbar: react__default.ForwardRefExoticComponent<StnFloatingToolbarProps & react__default.RefAttributes<HTMLDivElement>>;
|
|
3479
|
+
/**
|
|
3480
|
+
* StnMapToolbar
|
|
3481
|
+
* mockup/index.html의 토폴로지/지도 하단 툴바(topo-toolbar-container)를
|
|
3482
|
+
* 완벽히 재현한 통합 패턴 컴포넌트입니다.
|
|
3483
|
+
* 32px 드롭다운과 4px 각진 아이콘 버튼(StnButton shape="square")으로 구성됩니다.
|
|
3484
|
+
*/
|
|
3485
|
+
declare const StnMapToolbar: react__default.ForwardRefExoticComponent<StnMapToolbarProps & react__default.RefAttributes<HTMLDivElement>>;
|
|
3486
|
+
type StnFloatingToolbarPresetProps = StnMapToolbarProps;
|
|
3487
|
+
declare const StnFloatingToolbarPreset: react__default.ForwardRefExoticComponent<StnMapToolbarProps & react__default.RefAttributes<HTMLDivElement>>;
|
|
3488
|
+
|
|
3489
|
+
type StnEventBannerPlacement = 'top' | 'bottom' | 'inline';
|
|
3490
|
+
type StnEventBannerSeverity = 'critical' | 'major' | 'minor' | 'warning';
|
|
3491
|
+
/** 위젯과 배너 사이. 시맨틱 스페이스 토큰 space-0 / 4 / 8 / 16. 기본은 `--stn-spacing-event-banner-gap` */
|
|
3492
|
+
type StnEventBannerGap = 0 | 4 | 8 | 16;
|
|
3493
|
+
interface StnEventBannerProps extends Omit<react__default.HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
3494
|
+
/** 위험도 레벨: 'critical' | 'major' | 'minor' | 'warning' (기본값: 'critical') */
|
|
3495
|
+
severity?: StnEventBannerSeverity;
|
|
3496
|
+
/** 경보 메인 타이틀 (예: 'DISK 임계치 92.4% 초과', 'CPU/MEM 자원 사용률 초과') */
|
|
3497
|
+
title?: react__default.ReactNode;
|
|
3498
|
+
/** 발생 시간 또는 부가 정보 (예: '발생 시간 09:25:11') */
|
|
3499
|
+
time?: react__default.ReactNode;
|
|
3500
|
+
/** 우측 액션 버튼 텍스트 (예: '이벤트 정보') */
|
|
3501
|
+
actionText?: react__default.ReactNode;
|
|
3502
|
+
/** 우측 액션 버튼 클릭 핸들러 */
|
|
3503
|
+
onAction?: (e: react__default.MouseEvent<HTMLButtonElement>) => void;
|
|
3504
|
+
/** 커스텀 좌측 아이콘 (미지정 시 위험도별 기본 시스템 아이콘) */
|
|
3505
|
+
icon?: react__default.ReactNode;
|
|
3506
|
+
/** 배치. top/bottom은 위젯 바깥 위·아래에 자리를 차지하지 않음. inline은 흐름 안에 둠 */
|
|
3507
|
+
placement?: StnEventBannerPlacement;
|
|
3508
|
+
/** 위젯과의 간격. 0=붙임, 4/8/16은 `--stn-space-*`. 생략하면 `--stn-spacing-event-banner-gap` */
|
|
3509
|
+
gap?: StnEventBannerGap;
|
|
3510
|
+
/** 네온 인셋 숨쉬기 애니메이션 활성화 여부 (기본값: true) */
|
|
3511
|
+
blink?: boolean;
|
|
3512
|
+
/** 우측 추가 커스텀 액션 컨트롤 */
|
|
3513
|
+
actions?: react__default.ReactNode;
|
|
3514
|
+
/** 닫기 버튼 핸들러 (지정 시 닫기 버튼 노출) */
|
|
3515
|
+
onClose?: (e: react__default.MouseEvent<HTMLButtonElement>) => void;
|
|
3516
|
+
/** 추가 클래스 */
|
|
3517
|
+
className?: string;
|
|
3518
|
+
/** 인라인 스타일 */
|
|
3519
|
+
style?: react__default.CSSProperties;
|
|
3520
|
+
}
|
|
3521
|
+
/** 위험도별 이벤트 배너. placement와 severity로 배치·스타일을 고릅니다. */
|
|
3522
|
+
declare const StnEventBanner: react__default.ForwardRefExoticComponent<StnEventBannerProps & react__default.RefAttributes<HTMLDivElement>>;
|
|
3523
|
+
|
|
3524
|
+
export { AlertCenterDashboard, type AlertCenterDashboardProps, AlertCenterPageScaffold, type AlertCenterPageScaffoldProps, DashboardPageScaffold, type DashboardPageScaffoldProps, type DashboardType, ListPageScaffold, type ListPageScaffoldProps, LoginPageScaffold, type LoginPageScaffoldProps, PubChartSample, type PubDisabilityStatusItem, PubDisabilityStatusList, type PubTop5BarRow, PubTop5EquipmentBars, type PubTrafficTop5BarRow, PubTrafficTop5Bars, STN_TABLE_FOOTER_MAX_ACTIONS, STN_TOPOLOGY_NODE_ICONS, STN_TOPOLOGY_NODE_SHAPES, STN_TOPOLOGY_NODE_SIZE, STN_TOPOLOGY_NODE_SIZES, STN_TOPOLOGY_NODE_STATUSES, STN_TOPOLOGY_STATUS_COLORS, SideNavContext, type SideNavContextValue, StnAlertCenterDocPreview, type StnAlertCenterDocPreviewProps, StnAlertCenterPanel, type StnAlertCenterPanelProps, StnBadge, type StnBadgeAnchorOrigin, type StnBadgeColor, type StnBadgeProps, type StnBadgeVariant, StnBreadcrumb, type StnBreadcrumbItem, type StnBreadcrumbMenuItem, type StnBreadcrumbProps, type StnBreadcrumbSize, type StnBreadcrumbVariant, StnButton, type StnButtonColor, type StnButtonIconPosition, type StnButtonProps, type StnButtonShape, type StnButtonSize, type StnButtonVariant, StnCheckbox, type StnCheckboxColor, type StnCheckboxLabelPlacement, type StnCheckboxProps, type StnCheckboxSize, StnChip, type StnChipColor, type StnChipIconPosition, type StnChipLabelPosition, type StnChipProps, type StnChipShape, type StnChipSize, type StnChipVariant, StnCircularProgress, type StnCircularProgressGradient, type StnCircularProgressLabelPosition, type StnCircularProgressProps, type StnCircularProgressSize, type StnCircularProgressTone, type StnCircularProgressTrack, StnContainer, type StnContainerMaxWidth, type StnContainerProps, StnContext, type StnContextValue, StnDashboard, type StnDashboardProps, type StnDashboardRegionProps, type StnDashboardWidgetPosition, StnDateRangeField, type StnDateRangeFieldProps, StnDateRangePicker, StnDateRangePickerField, type StnDateRangePickerFieldProps, type StnDateRangePickerProps, StnDropdown, StnDropdownMenu, type StnDropdownMenuProps, type StnDropdownProps, StnEventBanner, type StnEventBannerGap, type StnEventBannerPlacement, type StnEventBannerProps, type StnEventBannerSeverity, StnFloatingToolbar, type StnFloatingToolbarPlacement, StnFloatingToolbarPreset, type StnFloatingToolbarPresetProps, type StnFloatingToolbarProps, StnGrid, type StnGridBreakpoint, type StnGridDirection, type StnGridProps, type StnGridResponsive, type StnGridSize, type StnGridSpacing, StnHeader, StnHeaderContextTitle, StnHeaderPageTitle, type StnHeaderPageTitleProps, type StnHeaderProps, type StnHeaderRegionProps, StnHeaderSubTitle, StnHeaderTitle, type StnHeaderTitleClockProps, StnHeaderTitleDate, type StnHeaderTitleDateOptions, type StnHeaderTitleDualProps, StnHeaderTitleFramePreview, StnHeaderTitleGroup, type StnHeaderTitleGroupProps, StnHeaderTitleMainText, type StnHeaderTitleProps, type StnHeaderTitleSize, StnHeaderTitleSubText, StnHeaderTitleTime, type StnHeaderTitleTimeOptions, type StnHeaderTitleTitleProps, type StnHeaderTitleVariant, StnHeaderTitleWeekday, StnHeaderToolbar, type StnHeaderToolbarProps, StnIcon, StnIconBox, type StnIconBoxColor, type StnIconBoxProps, type StnIconBoxSize, type StnIconProps, StnLayer, StnLayer0Background, type StnLayer0BackgroundColor, type StnLayer0BackgroundProps, StnLayerBackground, StnLayerContent, StnLayerDim, StnLayerModal, type StnLayerProps, type StnLayerRoleProps, StnLayerShell, type StnLayerShellProps, StnListViewLayout, StnListViewLayoutBody, type StnListViewLayoutBodyProps, StnListViewLayoutContent, StnListViewLayoutHeader, StnListViewLayoutPagination, type StnListViewLayoutProps, StnListViewLayoutSearch, StnListViewLayoutSidebar, StnListViewLayoutTable, StnLoadingSkeleton, StnLoadingSkeletonBlock, type StnLoadingSkeletonBlockProps, StnLoadingSkeletonCircle, type StnLoadingSkeletonCircleProps, StnLoadingSkeletonLine, type StnLoadingSkeletonLineProps, StnLoadingSkeletonProfile, type StnLoadingSkeletonProfileProps, type StnLoadingSkeletonProps, type StnLoadingSkeletonRootProps, StnLoadingSkeletonTable, type StnLoadingSkeletonTableProps, type StnLoadingSkeletonVariant, StnLoadingSkeletonWidget, type StnLoadingSkeletonWidgetProps, StnLoginBrandStack, type StnLoginBrandStackProps, StnLoginCard, type StnLoginCardBrandPosition, StnLoginCardGlowWrapper, type StnLoginCardGlowWrapperProps, type StnLoginCardProps, type StnLoginCardVariant, StnLoginFormFields, type StnLoginFormFieldsProps, StnLoginFormLinks, type StnLoginFormLinksProps, StnLoginFormStack, type StnLoginFormStackProps, StnLoginPlaceholder, type StnLoginPlaceholderProps, StnLoginTextField, type StnLoginTextFieldProps, StnLogo, type StnLogoProps, type StnLogoSize, type StnLogoTheme, type StnLogoVariant, StnMapCanvas, type StnMapCanvasProps, StnMapToolbar, type StnMapToolbarProps, StnPageScaffold, StnPageScaffoldLayer, type StnPageScaffoldLayerProps, StnPageScaffoldMapCanvas, type StnPageScaffoldMapCanvasProps, StnPageScaffoldMapPlaceholder, type StnPageScaffoldMapPlaceholderProps, StnPageScaffoldRegion, type StnPageScaffoldRegionProps, StnPageScaffoldRoot, type StnPageScaffoldRootProps, StnPagination, type StnPaginationItem, type StnPaginationProps, StnPopup, type StnPopupProps, type StnPopupSize, StnProgressBar, type StnProgressBarGradient, type StnProgressBarLabelAlign, type StnProgressBarLabelPosition, type StnProgressBarProps, type StnProgressBarSize, type StnProgressBarTone, type StnProgressBarTrack, StnProvider, type StnProviderProps, StnRadio, type StnRadioColor, StnRadioGroup, type StnRadioGroupLayout, type StnRadioGroupOption, type StnRadioGroupOrientation, type StnRadioGroupProps, type StnRadioLabelPlacement, type StnRadioProps, type StnRadioSize, StnScroll, type StnScrollColor, type StnScrollOrientation, type StnScrollProps, type StnScrollSize, StnSearchRequirementBar, StnSearchRequirementBarDemo, type StnSearchRequirementBarDemoProps, type StnSearchRequirementBarDividerProps, type StnSearchRequirementBarExportProps, type StnSearchRequirementBarFieldProps, type StnSearchRequirementBarFieldsProps, type StnSearchRequirementBarProps, type StnSearchRequirementBarSearchButtonProps, StnSectionSide, StnSectionSidePreset, type StnSectionSidePresetProps, type StnSectionSideProps, StnSegmented, type StnSegmentedMultipleProps, type StnSegmentedOption, type StnSegmentedProps, type StnSegmentedSingleProps, StnSeverityBadge, type StnSeverityBadgeProps, StnSeverityFilter, type StnSeverityFilterProps, type StnSeverityLevel, type StnSeverityVariant, type StnSideNavDropdownVariant, StnSideNavFooter, type StnSideNavFooterProps, StnSideNavGroup, type StnSideNavGroupProps, StnSideNavHeader, type StnSideNavHeaderProps, StnSideNavItem, type StnSideNavItemProps, type StnSideNavItemVariant, StnSideNavLogo, type StnSideNavLogoProps, StnSideNavMenu, type StnSideNavMenuProps, StnSideNavMobileTrigger, type StnSideNavMobileTriggerProps, StnSideNavSpacer, type StnSideNavSpacerProps, StnSideNavSub, StnSideNavSubItem, type StnSideNavSubItemProps, StnSideNavSubNav, type StnSideNavSubNavProps, type StnSideNavSubNavVariant, type StnSideNavSubProps, StnSideNavToggle, type StnSideNavToggleProps, StnSideNavWatermark, type StnSideNavWatermarkProps, StnSideNavigation, type StnSideNavigationProps, type StnSideNavigationVariant, StnSlider, type StnSliderColor, type StnSliderGradient, type StnSliderLabelAlign, type StnSliderLabelPosition, type StnSliderProps, type StnSliderSize, StnStack, type StnStackBreakpoint, type StnStackDirection, type StnStackProps, type StnStackResponsive, type StnStackScrollable, type StnStackWrap, StnSwitch, type StnSwitchColor, type StnSwitchGradient, type StnSwitchLabelPosition, type StnSwitchProps, type StnSwitchSize, StnSystemChip, type StnSystemChipItem, type StnSystemChipProps, type StnSystemChipTone, StnTable, type StnTableAlign, StnTableBody, type StnTableBodyProps, StnTableGrid, type StnTableGridProps, StnTableHead, type StnTableHeadProps, type StnTableProps, StnTableRow, type StnTableRowProps, StnTableSort, type StnTableSortProps, StnTableTd, StnTableTdCheck, type StnTableTdCheckProps, type StnTableTdProps, StnTableTh, StnTableThCheck, type StnTableThCheckProps, type StnTableThProps, StnTextField, type StnTextFieldColor, type StnTextFieldIconPosition, type StnTextFieldLabelPosition, type StnTextFieldProps, type StnTextFieldVariant, type StnTheme, StnToastCloseButton, StnToastIcon, type StnToastIconProps, StnToggleButton, type StnToggleButtonColor, type StnToggleButtonIconPosition, type StnToggleButtonProps, type StnToggleButtonSize, type StnToolbarOrientation, type StnTopologyCore, StnTopologyGraph, type StnTopologyGraphLink, type StnTopologyGraphNode, type StnTopologyGraphProps, type StnTopologyNode, type StnTopologyNodeContent, type StnTopologyNodeIcon, StnTopologyNodeMark, type StnTopologyNodeMarkProps, StnTopologyNodePreview, type StnTopologyNodePreviewProps, type StnTopologyNodeShape, type StnTopologyNodeSize, type StnTopologyNodeStatus, StnTopologyRing, type StnTopologyRingProps, StnTree, type StnTreeDocRowState, type StnTreeItem, StnTreeNode, type StnTreeNodeDocState, type StnTreeNodeKind, type StnTreeNodeProps, type StnTreeProps, StnWidget, StnWidgetActions, type StnWidgetBackground, StnWidgetBody, StnWidgetChartSlot, type StnWidgetChartSlotProps, StnWidgetEmpty, StnWidgetFooter, StnWidgetGradeRow, StnWidgetGradeRowList, type StnWidgetGradeRowProps, StnWidgetHeader, StnWidgetInsetIcon, type StnWidgetInsetIconProps, StnWidgetLoading, type StnWidgetPadding, StnWidgetPlaceholder, type StnWidgetProps, StnWidgetStatCard, type StnWidgetStatCardProps, StnWidgetStatGroup, type StnWidgetStatus, type StnWidgetStatusGrade, StnWidgetStatusItem, type StnWidgetStatusItemProps, StnWidgetStatusList, StnWidgetTitle, buildPaginationItems, buildStnTreeNodeCells, cn, collectExpandableIds, flattenStnTree, formatStnHeaderTitleDate, formatStnHeaderTitleTime, formatStnHeaderTitleWeekday, formatTopologyCount, useSideNav, useStn, useStnOptional };
|