jongsultest 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/index.d.mts +339 -0
  2. package/dist/index.d.ts +339 -0
  3. package/dist/index.js +1280 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/index.mjs +1234 -0
  6. package/dist/index.mjs.map +1 -0
  7. package/package.json +59 -0
  8. package/src/atoms/Badge.stories.tsx +136 -0
  9. package/src/atoms/Badge.tsx +46 -0
  10. package/src/atoms/Button.stories.tsx +142 -0
  11. package/src/atoms/Button.tsx +50 -0
  12. package/src/atoms/ComboboxAutocomplete.stories.tsx +43 -0
  13. package/src/atoms/ComboboxAutocomplete.tsx +6 -0
  14. package/src/atoms/ComboboxSelect.stories.tsx +56 -0
  15. package/src/atoms/ComboboxSelect.tsx +6 -0
  16. package/src/atoms/DateTimePicker.stories.tsx +42 -0
  17. package/src/atoms/DateTimePicker.tsx +6 -0
  18. package/src/atoms/Icon.stories.tsx +86 -0
  19. package/src/atoms/Icon.tsx +81 -0
  20. package/src/atoms/IconButton.stories.tsx +59 -0
  21. package/src/atoms/IconButton.tsx +19 -0
  22. package/src/atoms/InputColor.stories.tsx +42 -0
  23. package/src/atoms/InputColor.tsx +6 -0
  24. package/src/atoms/InputDatePicker.stories.tsx +55 -0
  25. package/src/atoms/InputDatePicker.tsx +6 -0
  26. package/src/atoms/InputFile.stories.tsx +57 -0
  27. package/src/atoms/InputFile.tsx +15 -0
  28. package/src/atoms/InputNumber.stories.tsx +58 -0
  29. package/src/atoms/InputNumber.tsx +15 -0
  30. package/src/atoms/InputPassword.stories.tsx +42 -0
  31. package/src/atoms/InputPassword.tsx +24 -0
  32. package/src/atoms/InputRadio.stories.tsx +65 -0
  33. package/src/atoms/InputRadio.tsx +19 -0
  34. package/src/atoms/InputSegmentedControl.stories.tsx +44 -0
  35. package/src/atoms/InputSegmentedControl.tsx +15 -0
  36. package/src/atoms/InputSwitch.stories.tsx +45 -0
  37. package/src/atoms/InputSwitch.tsx +23 -0
  38. package/src/atoms/InputSwitchInTable.stories.tsx +43 -0
  39. package/src/atoms/InputSwitchInTable.tsx +35 -0
  40. package/src/atoms/InputText.stories.tsx +42 -0
  41. package/src/atoms/InputText.tsx +7 -0
  42. package/src/atoms/InputTextarea.stories.tsx +50 -0
  43. package/src/atoms/InputTextarea.tsx +6 -0
  44. package/src/atoms/index.ts +20 -0
  45. package/src/atoms/inputClassNames.ts +20 -0
  46. package/src/blocks/Accordion.stories.tsx +102 -0
  47. package/src/blocks/Accordion.tsx +124 -0
  48. package/src/blocks/AccordionDraggable.stories.tsx +169 -0
  49. package/src/blocks/AccordionDraggable.tsx +200 -0
  50. package/src/blocks/BoxContainer.stories.tsx +34 -0
  51. package/src/blocks/BoxContainer.tsx +16 -0
  52. package/src/blocks/DataTable.tsx +127 -0
  53. package/src/blocks/DescriptionRow.stories.tsx +34 -0
  54. package/src/blocks/DescriptionRow.tsx +22 -0
  55. package/src/blocks/EditorLayout.stories.tsx +79 -0
  56. package/src/blocks/EditorLayout.tsx +43 -0
  57. package/src/blocks/ImageUpload.tsx +292 -0
  58. package/src/blocks/LabeledField.stories.tsx +34 -0
  59. package/src/blocks/LabeledField.tsx +31 -0
  60. package/src/blocks/MediDrawer.stories.tsx +58 -0
  61. package/src/blocks/MediDrawer.tsx +34 -0
  62. package/src/blocks/Modal.stories.tsx +42 -0
  63. package/src/blocks/Modal.tsx +31 -0
  64. package/src/blocks/ModalDeleteConfirm.stories.tsx +31 -0
  65. package/src/blocks/ModalDeleteConfirm.tsx +56 -0
  66. package/src/blocks/ModalTokenExpired.tsx +52 -0
  67. package/src/blocks/NavigationBanner.tsx +100 -0
  68. package/src/blocks/PageHeader.tsx +24 -0
  69. package/src/blocks/PageLoading.stories.tsx +22 -0
  70. package/src/blocks/PageLoading.tsx +19 -0
  71. package/src/blocks/PageTitle.stories.tsx +39 -0
  72. package/src/blocks/PageTitle.tsx +25 -0
  73. package/src/blocks/Pagination.tsx +49 -0
  74. package/src/blocks/Panel.stories.tsx +84 -0
  75. package/src/blocks/Panel.tsx +97 -0
  76. package/src/blocks/SectionGroupWithTitle.stories.tsx +24 -0
  77. package/src/blocks/SectionGroupWithTitle.tsx +21 -0
  78. package/src/blocks/Table.tsx +114 -0
  79. package/src/blocks/TagInput.stories.tsx +74 -0
  80. package/src/blocks/TagInput.tsx +93 -0
  81. package/src/blocks/index.ts +25 -0
  82. package/src/index.ts +51 -0
  83. package/src/utils/file.ts +7 -0
@@ -0,0 +1,339 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as _mantine_core from '@mantine/core';
3
+ import { ButtonProps, TextInputProps, PasswordInputProps, NumberInputProps, ColorInputProps, FileInputProps, FileInput, TextareaProps, RadioProps, RadioGroupProps, SwitchProps as SwitchProps$1, SegmentedControlProps, SelectProps, AutocompleteProps, BadgeProps, ActionIconProps, AccordionProps as AccordionProps$1, Accordion as Accordion$1, TitleProps, PaperProps, ModalProps as ModalProps$1, CSSProperties } from '@mantine/core';
4
+ import React, { ComponentPropsWithoutRef, ComponentType, ReactNode, PropsWithChildren } from 'react';
5
+ import { DatePickerInputProps, DateTimePickerProps } from '@mantine/dates';
6
+ import { DropResult } from '@hello-pangea/dnd';
7
+
8
+ type Props$2 = ButtonProps & ComponentPropsWithoutRef<"button">;
9
+ declare const Button: ({ style, ...props }: Props$2) => react_jsx_runtime.JSX.Element;
10
+
11
+ declare const InputText: (props: TextInputProps) => react_jsx_runtime.JSX.Element;
12
+
13
+ declare const InputPassword: (props: PasswordInputProps) => react_jsx_runtime.JSX.Element;
14
+
15
+ declare const InputNumber: (props: NumberInputProps) => react_jsx_runtime.JSX.Element;
16
+
17
+ declare const InputColor: (props: ColorInputProps) => react_jsx_runtime.JSX.Element;
18
+
19
+ type FileInputComponentProps<Multiple extends boolean = false> = Omit<FileInputProps<Multiple>, "translate"> & {
20
+ translate?: string;
21
+ };
22
+ type FileInputComponent = (<Multiple extends boolean = false>(props: FileInputComponentProps<Multiple>) => React.JSX.Element) & {
23
+ extend: typeof FileInput.extend;
24
+ };
25
+ declare const InputFile: FileInputComponent;
26
+
27
+ declare const InputDatePicker: (props: DatePickerInputProps) => react_jsx_runtime.JSX.Element;
28
+
29
+ declare const InputTextarea: (props: TextareaProps) => react_jsx_runtime.JSX.Element;
30
+
31
+ declare const InputRadio: ((props: RadioProps) => react_jsx_runtime.JSX.Element) & {
32
+ Group: (props: RadioGroupProps) => react_jsx_runtime.JSX.Element;
33
+ };
34
+
35
+ type SwitchProps = SwitchProps$1;
36
+ declare const InputSwitch: ({ checked, style, classNames, ...props }: SwitchProps) => react_jsx_runtime.JSX.Element;
37
+
38
+ interface SwitchInTableProps<T extends string> {
39
+ status: T;
40
+ onStatusChange: (id: number, status: T) => void;
41
+ id: number;
42
+ activeValue?: T;
43
+ inactiveValue?: T;
44
+ activeLabel?: string;
45
+ inactiveLabel?: string;
46
+ }
47
+ declare const InputSwitchInTable: <T extends string>({ status, onStatusChange, id, activeValue, inactiveValue, activeLabel, inactiveLabel, }: SwitchInTableProps<T>) => react_jsx_runtime.JSX.Element;
48
+
49
+ declare const InputSegmentedControl: (props: SegmentedControlProps) => react_jsx_runtime.JSX.Element;
50
+
51
+ declare const ComboboxSelect: (props: SelectProps) => react_jsx_runtime.JSX.Element;
52
+
53
+ declare const ComboboxAutocomplete: (props: AutocompleteProps) => react_jsx_runtime.JSX.Element;
54
+
55
+ declare const DateTimePicker: (props: DateTimePickerProps) => react_jsx_runtime.JSX.Element;
56
+
57
+ declare const Badge: ({ className, classNames, isRemoveAble, onRemove, ...props }: BadgeProps & {
58
+ isRemoveAble?: boolean;
59
+ onRemove?: () => void;
60
+ }) => react_jsx_runtime.JSX.Element;
61
+
62
+ interface IconSvgProps {
63
+ size?: number;
64
+ /** 프리셋("red", "white", "gray", "disabled") 또는 hex 값 */
65
+ color?: string;
66
+ disabled?: boolean;
67
+ }
68
+ /** 원형 배경 + 십자 아이콘 (활성: #666666 / 비활성: #DDDDDD) */
69
+ declare const PlusIcon: ({ size, color, disabled }: IconSvgProps) => react_jsx_runtime.JSX.Element;
70
+ /** 휴지통 아이콘 (기본: "gray" / 삭제: "red" / 흰색: "white") */
71
+ declare const TrashIcon: ({ size, color }: IconSvgProps) => react_jsx_runtime.JSX.Element;
72
+ /** 드래그 핸들 아이콘 (6점 그리드) */
73
+ declare const GripVerticalIcon: ({ size, color }: IconSvgProps) => react_jsx_runtime.JSX.Element;
74
+ /** 하단 화살표 아이콘 */
75
+ declare const ChevronDownIcon: ({ size, color }: IconSvgProps) => react_jsx_runtime.JSX.Element;
76
+
77
+ type Props$1 = ActionIconProps & ComponentPropsWithoutRef<"button"> & {
78
+ icon?: ComponentType<IconSvgProps>;
79
+ iconSize?: number;
80
+ iconColor?: string;
81
+ children?: ReactNode;
82
+ };
83
+ declare const IconButton: ({ icon: Icon, iconSize, iconColor, disabled, children, ...props }: Props$1) => react_jsx_runtime.JSX.Element;
84
+
85
+ declare const inputClassNames: {
86
+ input: string;
87
+ label: string;
88
+ placeholder: string;
89
+ error: string;
90
+ description: string;
91
+ root: string;
92
+ };
93
+
94
+ interface TableColumn<T> {
95
+ id: string;
96
+ header: string;
97
+ accessor?: keyof T;
98
+ render?: (row: T, index: number) => ReactNode;
99
+ align?: "left" | "center" | "right";
100
+ width?: number | string;
101
+ }
102
+ interface TableProps<T> {
103
+ columns: TableColumn<T>[];
104
+ data: T[];
105
+ rowKey?: keyof T | ((row: T, index: number) => string);
106
+ emptyMessage?: string;
107
+ striped?: boolean;
108
+ highlightOnHover?: boolean;
109
+ onRowClick?: (row: T, index: number) => void;
110
+ }
111
+ declare function Table<T>({ columns, data, rowKey, emptyMessage, highlightOnHover, onRowClick, }: TableProps<T>): react_jsx_runtime.JSX.Element;
112
+
113
+ interface PaginationProps {
114
+ total: number;
115
+ page: number;
116
+ onChange: (page: number) => void;
117
+ siblings?: number;
118
+ boundaries?: number;
119
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
120
+ withEdges?: boolean;
121
+ position?: "left" | "center" | "right";
122
+ }
123
+ declare function Pagination({ total, page, onChange, siblings, boundaries, size, withEdges, position, }: PaginationProps): react_jsx_runtime.JSX.Element | null;
124
+
125
+ interface AccordionItemData {
126
+ id: string;
127
+ title: string;
128
+ description?: string;
129
+ icon?: ReactNode;
130
+ rightSection?: ReactNode;
131
+ content: ReactNode;
132
+ disabled?: boolean;
133
+ }
134
+ interface AccordionProps {
135
+ items: AccordionItemData[];
136
+ defaultOpen?: string[];
137
+ multiple?: boolean;
138
+ variant?: AccordionProps$1["variant"];
139
+ onChange?: (value: string | string[] | null) => void;
140
+ }
141
+ declare function Accordion({ items, defaultOpen, multiple, variant, onChange, }: AccordionProps): react_jsx_runtime.JSX.Element;
142
+ declare namespace Accordion {
143
+ var Root: typeof Accordion$1;
144
+ var Item: _mantine_core.MantineComponent<{
145
+ props: _mantine_core.AccordionItemProps;
146
+ ref: HTMLDivElement;
147
+ stylesNames: "item";
148
+ compound: true;
149
+ }>;
150
+ var Control;
151
+ var Panel;
152
+ }
153
+
154
+ interface AccordionDraggableItem {
155
+ id: string;
156
+ title: string;
157
+ content: ReactNode;
158
+ icon?: ReactNode;
159
+ rightSection?: ReactNode;
160
+ isRequired?: boolean;
161
+ isUsed?: boolean;
162
+ }
163
+ interface AccordionDraggableProps {
164
+ items: AccordionDraggableItem[];
165
+ droppableId?: string;
166
+ activeId?: string | null;
167
+ onActiveChange?: (id: string | null) => void;
168
+ onReorder: (result: DropResult) => void;
169
+ onDelete?: (id: string) => void;
170
+ onRequiredChange?: (id: string, value: boolean) => void;
171
+ onUsedChange?: (id: string, value: boolean) => void;
172
+ emptyMessage?: string;
173
+ showDeleteButton?: boolean;
174
+ showRequiredToggle?: boolean;
175
+ showUsedToggle?: boolean;
176
+ draggingBgColor?: string;
177
+ }
178
+ declare function AccordionDraggable({ items, droppableId, activeId, onActiveChange, onReorder, onDelete, onRequiredChange, onUsedChange, emptyMessage, showDeleteButton, showRequiredToggle, showUsedToggle, draggingBgColor, }: AccordionDraggableProps): react_jsx_runtime.JSX.Element;
179
+
180
+ interface NavigationBannerItem {
181
+ id: string;
182
+ image: string;
183
+ title: string;
184
+ }
185
+ interface NavigationBannerProps {
186
+ items: NavigationBannerItem[];
187
+ currentIndex?: number;
188
+ onIndexChange?: (index: number) => void;
189
+ imageSize?: number;
190
+ emptyText?: string;
191
+ showNavigation?: boolean;
192
+ className?: string;
193
+ }
194
+ declare function NavigationBanner({ items, currentIndex: controlledIndex, onIndexChange, imageSize, emptyText, showNavigation, className, }: NavigationBannerProps): react_jsx_runtime.JSX.Element;
195
+
196
+ interface ImageUploadProps {
197
+ value: string[];
198
+ onChange: (images: string[]) => void;
199
+ maxCount?: number;
200
+ variant?: "gallery" | "area" | "input";
201
+ previewWidth?: number;
202
+ previewHeight?: number;
203
+ previewFit?: "cover" | "contain";
204
+ label?: string;
205
+ buttonText?: string;
206
+ placeholder?: string;
207
+ description?: string;
208
+ accept?: string;
209
+ showCount?: boolean;
210
+ /** 업로드 허용 최대 가로 크기(px) */
211
+ maxWidth?: number;
212
+ /** 업로드 허용 최대 세로 크기(px) */
213
+ maxHeight?: number;
214
+ }
215
+ declare function ImageUpload({ value, onChange, maxCount, variant, previewWidth, previewHeight, previewFit, label, buttonText, placeholder, description, accept, showCount, maxWidth, maxHeight, }: ImageUploadProps): react_jsx_runtime.JSX.Element;
216
+
217
+ declare function PageTitle({ title, subText, rightContent, leftContent, ...props }: TitleProps & {
218
+ subText?: string;
219
+ rightContent?: React.ReactNode;
220
+ leftContent?: React.ReactNode;
221
+ }): react_jsx_runtime.JSX.Element;
222
+
223
+ interface PageLoadingProps {
224
+ bg?: string;
225
+ }
226
+ declare function PageLoading({ bg }: PageLoadingProps): react_jsx_runtime.JSX.Element;
227
+
228
+ /**
229
+ *
230
+ * @param title - 패널 제목
231
+ * @param totalCount - 내부 데이터 총 개수
232
+ * @param description - 패널 설명
233
+ * @param children - 패널 컨텐츠
234
+ * @param headerRightContent - 패널 헤더 오른쪽 컨텐츠
235
+ * @param contentBottomPadding - 패널 컨텐츠 하단 패딩 (기본값: 40px)
236
+ * @param footer - 패널 푸터
237
+ * @returns 패널 컴포넌트
238
+ */
239
+ declare const Panel: {
240
+ ({ title, totalCount, description, children, headerRightContent, contentBottomPadding, footer, ...props }: PaperProps & {
241
+ title?: string | React.ReactNode;
242
+ totalCount?: number;
243
+ description?: string;
244
+ children?: React.ReactNode;
245
+ headerRightContent?: React.ReactNode;
246
+ contentBottomPadding?: number;
247
+ footer?: React.ReactNode;
248
+ }): react_jsx_runtime.JSX.Element;
249
+ Section: typeof Section;
250
+ };
251
+ /**
252
+ *
253
+ * @param title - 섹션 제목 (스타일은 패널 제목과 동일)
254
+ * @param children - 섹션 컨텐츠
255
+ * @returns
256
+ */
257
+ declare function Section({ title, children }: {
258
+ title?: string;
259
+ children: ReactNode;
260
+ }): react_jsx_runtime.JSX.Element;
261
+
262
+ declare function BoxContainer({ children }: PropsWithChildren): react_jsx_runtime.JSX.Element;
263
+
264
+ interface EditorLayoutProps {
265
+ leftPanel: ReactNode;
266
+ centerPanel: ReactNode;
267
+ rightPanel: ReactNode;
268
+ leftSpan?: number;
269
+ centerSpan?: number;
270
+ rightSpan?: number;
271
+ }
272
+ declare function EditorLayout({ leftPanel, centerPanel, rightPanel, leftSpan, centerSpan, rightSpan, }: EditorLayoutProps): react_jsx_runtime.JSX.Element;
273
+
274
+ declare function Modal({ opened, onClose, title, size, styles, children, ...props }: ModalProps$1 & {
275
+ children: React.ReactNode;
276
+ }): react_jsx_runtime.JSX.Element;
277
+
278
+ interface ModalProps {
279
+ opened: boolean;
280
+ onClose: () => void;
281
+ onConfirm: () => void;
282
+ message?: string | React.ReactNode;
283
+ }
284
+ declare function ModalDeleteConfirm({ opened, onClose, onConfirm, message }: ModalProps): react_jsx_runtime.JSX.Element;
285
+
286
+ declare function ModalTokenExpired(): react_jsx_runtime.JSX.Element;
287
+
288
+ interface Column<T> {
289
+ id: string;
290
+ label: string;
291
+ minWidth?: number;
292
+ align?: "left" | "right" | "center";
293
+ format?: (value: any, row: T) => React.ReactNode;
294
+ style?: CSSProperties;
295
+ headerStyle?: CSSProperties;
296
+ }
297
+ interface DataTableProps<T> {
298
+ columns: Column<T>[];
299
+ data: T[];
300
+ getRowId: (row: T) => string | number;
301
+ onRowClick?: (row: T) => void;
302
+ rowsPerPageOptions?: number[];
303
+ defaultRowsPerPage?: number;
304
+ style?: CSSProperties;
305
+ containerStyle?: CSSProperties;
306
+ rowStyle?: CSSProperties;
307
+ emptyMessage?: string;
308
+ }
309
+ declare function DataTable<T extends Record<string, any>>({ columns, data, getRowId, onRowClick, rowsPerPageOptions, defaultRowsPerPage, style, containerStyle, rowStyle, emptyMessage, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
310
+
311
+ declare function PageHeader({ headerText, back }: {
312
+ headerText: string;
313
+ back?: boolean;
314
+ }): react_jsx_runtime.JSX.Element;
315
+
316
+ interface Props {
317
+ title: string;
318
+ children: React.ReactNode;
319
+ }
320
+ declare const SectionGroupWithTitle: ({ title, children }: Props) => react_jsx_runtime.JSX.Element;
321
+
322
+ interface TagInputItem {
323
+ id: string;
324
+ label: string;
325
+ }
326
+ interface TagInputProps {
327
+ label?: string;
328
+ placeholder?: string;
329
+ items: TagInputItem[];
330
+ onAdd: (values: string[]) => void;
331
+ onRemove: (id: string) => void;
332
+ badgeVariant?: "filled" | "light";
333
+ badgeColor?: string;
334
+ }
335
+ declare function TagInput({ label, placeholder, items, onAdd, onRemove, badgeVariant, badgeColor, }: TagInputProps): react_jsx_runtime.JSX.Element;
336
+
337
+ declare function readFileAsDataURL(file: File): Promise<string>;
338
+
339
+ export { Accordion, AccordionDraggable, type AccordionDraggableItem, type AccordionDraggableProps, type AccordionItemData, type AccordionProps, Badge, BoxContainer, Button, ChevronDownIcon, type Column, ComboboxAutocomplete, ComboboxSelect, DataTable, DateTimePicker, EditorLayout, GripVerticalIcon, IconButton, type IconSvgProps, ImageUpload, InputColor, InputDatePicker, InputFile, InputNumber, InputPassword, InputRadio, InputSegmentedControl, InputSwitch, InputSwitchInTable, InputText, InputTextarea, Modal, ModalDeleteConfirm, ModalTokenExpired, NavigationBanner, type NavigationBannerItem, type NavigationBannerProps, PageHeader, PageLoading, PageTitle, Pagination, type PaginationProps, Panel, PlusIcon, SectionGroupWithTitle, Table, type TableColumn, type TableProps, TagInput, type TagInputItem, type TagInputProps, TrashIcon, inputClassNames, readFileAsDataURL };
@@ -0,0 +1,339 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as _mantine_core from '@mantine/core';
3
+ import { ButtonProps, TextInputProps, PasswordInputProps, NumberInputProps, ColorInputProps, FileInputProps, FileInput, TextareaProps, RadioProps, RadioGroupProps, SwitchProps as SwitchProps$1, SegmentedControlProps, SelectProps, AutocompleteProps, BadgeProps, ActionIconProps, AccordionProps as AccordionProps$1, Accordion as Accordion$1, TitleProps, PaperProps, ModalProps as ModalProps$1, CSSProperties } from '@mantine/core';
4
+ import React, { ComponentPropsWithoutRef, ComponentType, ReactNode, PropsWithChildren } from 'react';
5
+ import { DatePickerInputProps, DateTimePickerProps } from '@mantine/dates';
6
+ import { DropResult } from '@hello-pangea/dnd';
7
+
8
+ type Props$2 = ButtonProps & ComponentPropsWithoutRef<"button">;
9
+ declare const Button: ({ style, ...props }: Props$2) => react_jsx_runtime.JSX.Element;
10
+
11
+ declare const InputText: (props: TextInputProps) => react_jsx_runtime.JSX.Element;
12
+
13
+ declare const InputPassword: (props: PasswordInputProps) => react_jsx_runtime.JSX.Element;
14
+
15
+ declare const InputNumber: (props: NumberInputProps) => react_jsx_runtime.JSX.Element;
16
+
17
+ declare const InputColor: (props: ColorInputProps) => react_jsx_runtime.JSX.Element;
18
+
19
+ type FileInputComponentProps<Multiple extends boolean = false> = Omit<FileInputProps<Multiple>, "translate"> & {
20
+ translate?: string;
21
+ };
22
+ type FileInputComponent = (<Multiple extends boolean = false>(props: FileInputComponentProps<Multiple>) => React.JSX.Element) & {
23
+ extend: typeof FileInput.extend;
24
+ };
25
+ declare const InputFile: FileInputComponent;
26
+
27
+ declare const InputDatePicker: (props: DatePickerInputProps) => react_jsx_runtime.JSX.Element;
28
+
29
+ declare const InputTextarea: (props: TextareaProps) => react_jsx_runtime.JSX.Element;
30
+
31
+ declare const InputRadio: ((props: RadioProps) => react_jsx_runtime.JSX.Element) & {
32
+ Group: (props: RadioGroupProps) => react_jsx_runtime.JSX.Element;
33
+ };
34
+
35
+ type SwitchProps = SwitchProps$1;
36
+ declare const InputSwitch: ({ checked, style, classNames, ...props }: SwitchProps) => react_jsx_runtime.JSX.Element;
37
+
38
+ interface SwitchInTableProps<T extends string> {
39
+ status: T;
40
+ onStatusChange: (id: number, status: T) => void;
41
+ id: number;
42
+ activeValue?: T;
43
+ inactiveValue?: T;
44
+ activeLabel?: string;
45
+ inactiveLabel?: string;
46
+ }
47
+ declare const InputSwitchInTable: <T extends string>({ status, onStatusChange, id, activeValue, inactiveValue, activeLabel, inactiveLabel, }: SwitchInTableProps<T>) => react_jsx_runtime.JSX.Element;
48
+
49
+ declare const InputSegmentedControl: (props: SegmentedControlProps) => react_jsx_runtime.JSX.Element;
50
+
51
+ declare const ComboboxSelect: (props: SelectProps) => react_jsx_runtime.JSX.Element;
52
+
53
+ declare const ComboboxAutocomplete: (props: AutocompleteProps) => react_jsx_runtime.JSX.Element;
54
+
55
+ declare const DateTimePicker: (props: DateTimePickerProps) => react_jsx_runtime.JSX.Element;
56
+
57
+ declare const Badge: ({ className, classNames, isRemoveAble, onRemove, ...props }: BadgeProps & {
58
+ isRemoveAble?: boolean;
59
+ onRemove?: () => void;
60
+ }) => react_jsx_runtime.JSX.Element;
61
+
62
+ interface IconSvgProps {
63
+ size?: number;
64
+ /** 프리셋("red", "white", "gray", "disabled") 또는 hex 값 */
65
+ color?: string;
66
+ disabled?: boolean;
67
+ }
68
+ /** 원형 배경 + 십자 아이콘 (활성: #666666 / 비활성: #DDDDDD) */
69
+ declare const PlusIcon: ({ size, color, disabled }: IconSvgProps) => react_jsx_runtime.JSX.Element;
70
+ /** 휴지통 아이콘 (기본: "gray" / 삭제: "red" / 흰색: "white") */
71
+ declare const TrashIcon: ({ size, color }: IconSvgProps) => react_jsx_runtime.JSX.Element;
72
+ /** 드래그 핸들 아이콘 (6점 그리드) */
73
+ declare const GripVerticalIcon: ({ size, color }: IconSvgProps) => react_jsx_runtime.JSX.Element;
74
+ /** 하단 화살표 아이콘 */
75
+ declare const ChevronDownIcon: ({ size, color }: IconSvgProps) => react_jsx_runtime.JSX.Element;
76
+
77
+ type Props$1 = ActionIconProps & ComponentPropsWithoutRef<"button"> & {
78
+ icon?: ComponentType<IconSvgProps>;
79
+ iconSize?: number;
80
+ iconColor?: string;
81
+ children?: ReactNode;
82
+ };
83
+ declare const IconButton: ({ icon: Icon, iconSize, iconColor, disabled, children, ...props }: Props$1) => react_jsx_runtime.JSX.Element;
84
+
85
+ declare const inputClassNames: {
86
+ input: string;
87
+ label: string;
88
+ placeholder: string;
89
+ error: string;
90
+ description: string;
91
+ root: string;
92
+ };
93
+
94
+ interface TableColumn<T> {
95
+ id: string;
96
+ header: string;
97
+ accessor?: keyof T;
98
+ render?: (row: T, index: number) => ReactNode;
99
+ align?: "left" | "center" | "right";
100
+ width?: number | string;
101
+ }
102
+ interface TableProps<T> {
103
+ columns: TableColumn<T>[];
104
+ data: T[];
105
+ rowKey?: keyof T | ((row: T, index: number) => string);
106
+ emptyMessage?: string;
107
+ striped?: boolean;
108
+ highlightOnHover?: boolean;
109
+ onRowClick?: (row: T, index: number) => void;
110
+ }
111
+ declare function Table<T>({ columns, data, rowKey, emptyMessage, highlightOnHover, onRowClick, }: TableProps<T>): react_jsx_runtime.JSX.Element;
112
+
113
+ interface PaginationProps {
114
+ total: number;
115
+ page: number;
116
+ onChange: (page: number) => void;
117
+ siblings?: number;
118
+ boundaries?: number;
119
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
120
+ withEdges?: boolean;
121
+ position?: "left" | "center" | "right";
122
+ }
123
+ declare function Pagination({ total, page, onChange, siblings, boundaries, size, withEdges, position, }: PaginationProps): react_jsx_runtime.JSX.Element | null;
124
+
125
+ interface AccordionItemData {
126
+ id: string;
127
+ title: string;
128
+ description?: string;
129
+ icon?: ReactNode;
130
+ rightSection?: ReactNode;
131
+ content: ReactNode;
132
+ disabled?: boolean;
133
+ }
134
+ interface AccordionProps {
135
+ items: AccordionItemData[];
136
+ defaultOpen?: string[];
137
+ multiple?: boolean;
138
+ variant?: AccordionProps$1["variant"];
139
+ onChange?: (value: string | string[] | null) => void;
140
+ }
141
+ declare function Accordion({ items, defaultOpen, multiple, variant, onChange, }: AccordionProps): react_jsx_runtime.JSX.Element;
142
+ declare namespace Accordion {
143
+ var Root: typeof Accordion$1;
144
+ var Item: _mantine_core.MantineComponent<{
145
+ props: _mantine_core.AccordionItemProps;
146
+ ref: HTMLDivElement;
147
+ stylesNames: "item";
148
+ compound: true;
149
+ }>;
150
+ var Control;
151
+ var Panel;
152
+ }
153
+
154
+ interface AccordionDraggableItem {
155
+ id: string;
156
+ title: string;
157
+ content: ReactNode;
158
+ icon?: ReactNode;
159
+ rightSection?: ReactNode;
160
+ isRequired?: boolean;
161
+ isUsed?: boolean;
162
+ }
163
+ interface AccordionDraggableProps {
164
+ items: AccordionDraggableItem[];
165
+ droppableId?: string;
166
+ activeId?: string | null;
167
+ onActiveChange?: (id: string | null) => void;
168
+ onReorder: (result: DropResult) => void;
169
+ onDelete?: (id: string) => void;
170
+ onRequiredChange?: (id: string, value: boolean) => void;
171
+ onUsedChange?: (id: string, value: boolean) => void;
172
+ emptyMessage?: string;
173
+ showDeleteButton?: boolean;
174
+ showRequiredToggle?: boolean;
175
+ showUsedToggle?: boolean;
176
+ draggingBgColor?: string;
177
+ }
178
+ declare function AccordionDraggable({ items, droppableId, activeId, onActiveChange, onReorder, onDelete, onRequiredChange, onUsedChange, emptyMessage, showDeleteButton, showRequiredToggle, showUsedToggle, draggingBgColor, }: AccordionDraggableProps): react_jsx_runtime.JSX.Element;
179
+
180
+ interface NavigationBannerItem {
181
+ id: string;
182
+ image: string;
183
+ title: string;
184
+ }
185
+ interface NavigationBannerProps {
186
+ items: NavigationBannerItem[];
187
+ currentIndex?: number;
188
+ onIndexChange?: (index: number) => void;
189
+ imageSize?: number;
190
+ emptyText?: string;
191
+ showNavigation?: boolean;
192
+ className?: string;
193
+ }
194
+ declare function NavigationBanner({ items, currentIndex: controlledIndex, onIndexChange, imageSize, emptyText, showNavigation, className, }: NavigationBannerProps): react_jsx_runtime.JSX.Element;
195
+
196
+ interface ImageUploadProps {
197
+ value: string[];
198
+ onChange: (images: string[]) => void;
199
+ maxCount?: number;
200
+ variant?: "gallery" | "area" | "input";
201
+ previewWidth?: number;
202
+ previewHeight?: number;
203
+ previewFit?: "cover" | "contain";
204
+ label?: string;
205
+ buttonText?: string;
206
+ placeholder?: string;
207
+ description?: string;
208
+ accept?: string;
209
+ showCount?: boolean;
210
+ /** 업로드 허용 최대 가로 크기(px) */
211
+ maxWidth?: number;
212
+ /** 업로드 허용 최대 세로 크기(px) */
213
+ maxHeight?: number;
214
+ }
215
+ declare function ImageUpload({ value, onChange, maxCount, variant, previewWidth, previewHeight, previewFit, label, buttonText, placeholder, description, accept, showCount, maxWidth, maxHeight, }: ImageUploadProps): react_jsx_runtime.JSX.Element;
216
+
217
+ declare function PageTitle({ title, subText, rightContent, leftContent, ...props }: TitleProps & {
218
+ subText?: string;
219
+ rightContent?: React.ReactNode;
220
+ leftContent?: React.ReactNode;
221
+ }): react_jsx_runtime.JSX.Element;
222
+
223
+ interface PageLoadingProps {
224
+ bg?: string;
225
+ }
226
+ declare function PageLoading({ bg }: PageLoadingProps): react_jsx_runtime.JSX.Element;
227
+
228
+ /**
229
+ *
230
+ * @param title - 패널 제목
231
+ * @param totalCount - 내부 데이터 총 개수
232
+ * @param description - 패널 설명
233
+ * @param children - 패널 컨텐츠
234
+ * @param headerRightContent - 패널 헤더 오른쪽 컨텐츠
235
+ * @param contentBottomPadding - 패널 컨텐츠 하단 패딩 (기본값: 40px)
236
+ * @param footer - 패널 푸터
237
+ * @returns 패널 컴포넌트
238
+ */
239
+ declare const Panel: {
240
+ ({ title, totalCount, description, children, headerRightContent, contentBottomPadding, footer, ...props }: PaperProps & {
241
+ title?: string | React.ReactNode;
242
+ totalCount?: number;
243
+ description?: string;
244
+ children?: React.ReactNode;
245
+ headerRightContent?: React.ReactNode;
246
+ contentBottomPadding?: number;
247
+ footer?: React.ReactNode;
248
+ }): react_jsx_runtime.JSX.Element;
249
+ Section: typeof Section;
250
+ };
251
+ /**
252
+ *
253
+ * @param title - 섹션 제목 (스타일은 패널 제목과 동일)
254
+ * @param children - 섹션 컨텐츠
255
+ * @returns
256
+ */
257
+ declare function Section({ title, children }: {
258
+ title?: string;
259
+ children: ReactNode;
260
+ }): react_jsx_runtime.JSX.Element;
261
+
262
+ declare function BoxContainer({ children }: PropsWithChildren): react_jsx_runtime.JSX.Element;
263
+
264
+ interface EditorLayoutProps {
265
+ leftPanel: ReactNode;
266
+ centerPanel: ReactNode;
267
+ rightPanel: ReactNode;
268
+ leftSpan?: number;
269
+ centerSpan?: number;
270
+ rightSpan?: number;
271
+ }
272
+ declare function EditorLayout({ leftPanel, centerPanel, rightPanel, leftSpan, centerSpan, rightSpan, }: EditorLayoutProps): react_jsx_runtime.JSX.Element;
273
+
274
+ declare function Modal({ opened, onClose, title, size, styles, children, ...props }: ModalProps$1 & {
275
+ children: React.ReactNode;
276
+ }): react_jsx_runtime.JSX.Element;
277
+
278
+ interface ModalProps {
279
+ opened: boolean;
280
+ onClose: () => void;
281
+ onConfirm: () => void;
282
+ message?: string | React.ReactNode;
283
+ }
284
+ declare function ModalDeleteConfirm({ opened, onClose, onConfirm, message }: ModalProps): react_jsx_runtime.JSX.Element;
285
+
286
+ declare function ModalTokenExpired(): react_jsx_runtime.JSX.Element;
287
+
288
+ interface Column<T> {
289
+ id: string;
290
+ label: string;
291
+ minWidth?: number;
292
+ align?: "left" | "right" | "center";
293
+ format?: (value: any, row: T) => React.ReactNode;
294
+ style?: CSSProperties;
295
+ headerStyle?: CSSProperties;
296
+ }
297
+ interface DataTableProps<T> {
298
+ columns: Column<T>[];
299
+ data: T[];
300
+ getRowId: (row: T) => string | number;
301
+ onRowClick?: (row: T) => void;
302
+ rowsPerPageOptions?: number[];
303
+ defaultRowsPerPage?: number;
304
+ style?: CSSProperties;
305
+ containerStyle?: CSSProperties;
306
+ rowStyle?: CSSProperties;
307
+ emptyMessage?: string;
308
+ }
309
+ declare function DataTable<T extends Record<string, any>>({ columns, data, getRowId, onRowClick, rowsPerPageOptions, defaultRowsPerPage, style, containerStyle, rowStyle, emptyMessage, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
310
+
311
+ declare function PageHeader({ headerText, back }: {
312
+ headerText: string;
313
+ back?: boolean;
314
+ }): react_jsx_runtime.JSX.Element;
315
+
316
+ interface Props {
317
+ title: string;
318
+ children: React.ReactNode;
319
+ }
320
+ declare const SectionGroupWithTitle: ({ title, children }: Props) => react_jsx_runtime.JSX.Element;
321
+
322
+ interface TagInputItem {
323
+ id: string;
324
+ label: string;
325
+ }
326
+ interface TagInputProps {
327
+ label?: string;
328
+ placeholder?: string;
329
+ items: TagInputItem[];
330
+ onAdd: (values: string[]) => void;
331
+ onRemove: (id: string) => void;
332
+ badgeVariant?: "filled" | "light";
333
+ badgeColor?: string;
334
+ }
335
+ declare function TagInput({ label, placeholder, items, onAdd, onRemove, badgeVariant, badgeColor, }: TagInputProps): react_jsx_runtime.JSX.Element;
336
+
337
+ declare function readFileAsDataURL(file: File): Promise<string>;
338
+
339
+ export { Accordion, AccordionDraggable, type AccordionDraggableItem, type AccordionDraggableProps, type AccordionItemData, type AccordionProps, Badge, BoxContainer, Button, ChevronDownIcon, type Column, ComboboxAutocomplete, ComboboxSelect, DataTable, DateTimePicker, EditorLayout, GripVerticalIcon, IconButton, type IconSvgProps, ImageUpload, InputColor, InputDatePicker, InputFile, InputNumber, InputPassword, InputRadio, InputSegmentedControl, InputSwitch, InputSwitchInTable, InputText, InputTextarea, Modal, ModalDeleteConfirm, ModalTokenExpired, NavigationBanner, type NavigationBannerItem, type NavigationBannerProps, PageHeader, PageLoading, PageTitle, Pagination, type PaginationProps, Panel, PlusIcon, SectionGroupWithTitle, Table, type TableColumn, type TableProps, TagInput, type TagInputItem, type TagInputProps, TrashIcon, inputClassNames, readFileAsDataURL };