@gusun/design-system 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 (121) hide show
  1. package/README.md +16 -0
  2. package/dist-lib/Editor-wECQz1CV.js +1994 -0
  3. package/dist-lib/Editor-wECQz1CV.js.map +1 -0
  4. package/dist-lib/components/Accordion.d.ts +25 -0
  5. package/dist-lib/components/Button.d.ts +27 -0
  6. package/dist-lib/components/ButtonGroup.d.ts +18 -0
  7. package/dist-lib/components/CalendarDayButton.d.ts +39 -0
  8. package/dist-lib/components/Checkbox.d.ts +34 -0
  9. package/dist-lib/components/Chip.d.ts +12 -0
  10. package/dist-lib/components/ConditionOrderSlot.d.ts +31 -0
  11. package/dist-lib/components/DateField.d.ts +39 -0
  12. package/dist-lib/components/DatePicker.d.ts +49 -0
  13. package/dist-lib/components/Divider.d.ts +12 -0
  14. package/dist-lib/components/Editor.d.ts +23 -0
  15. package/dist-lib/components/EditorToolbar.d.ts +12 -0
  16. package/dist-lib/components/ErrorBoundary.d.ts +30 -0
  17. package/dist-lib/components/Field.d.ts +32 -0
  18. package/dist-lib/components/FileUploadButton.d.ts +22 -0
  19. package/dist-lib/components/FileUploadMenu.d.ts +24 -0
  20. package/dist-lib/components/FormTemplate.d.ts +33 -0
  21. package/dist-lib/components/ImageUploadButton.d.ts +14 -0
  22. package/dist-lib/components/ImageUploadMenu.d.ts +17 -0
  23. package/dist-lib/components/InlineFieldTrigger.d.ts +18 -0
  24. package/dist-lib/components/Input.d.ts +28 -0
  25. package/dist-lib/components/JobPositionTemplate.d.ts +41 -0
  26. package/dist-lib/components/Label.d.ts +18 -0
  27. package/dist-lib/components/List.d.ts +46 -0
  28. package/dist-lib/components/ListEmpty.d.ts +6 -0
  29. package/dist-lib/components/ListGroup.d.ts +13 -0
  30. package/dist-lib/components/MarkdownDoc.d.ts +5 -0
  31. package/dist-lib/components/MergeFieldNode.d.ts +2 -0
  32. package/dist-lib/components/Modal.d.ts +90 -0
  33. package/dist-lib/components/NoticeWritingTemplate.d.ts +38 -0
  34. package/dist-lib/components/Pagination.d.ts +27 -0
  35. package/dist-lib/components/Popover.d.ts +16 -0
  36. package/dist-lib/components/PopoverMenu.d.ts +54 -0
  37. package/dist-lib/components/Radio.d.ts +33 -0
  38. package/dist-lib/components/ScreeningBuilderTemplate.d.ts +53 -0
  39. package/dist-lib/components/ScreeningConditionCard.d.ts +56 -0
  40. package/dist-lib/components/ScreeningFormula.d.ts +17 -0
  41. package/dist-lib/components/ScreeningIndividualSettingModal.d.ts +10 -0
  42. package/dist-lib/components/ScrollArea.d.ts +30 -0
  43. package/dist-lib/components/SearchBar.d.ts +14 -0
  44. package/dist-lib/components/SegmentControl.d.ts +46 -0
  45. package/dist-lib/components/SegmentedTabs.d.ts +20 -0
  46. package/dist-lib/components/Select.d.ts +67 -0
  47. package/dist-lib/components/SelectGroup.d.ts +18 -0
  48. package/dist-lib/components/SelectOrInput.d.ts +49 -0
  49. package/dist-lib/components/SideNavigation.d.ts +33 -0
  50. package/dist-lib/components/SideNavigationTemplate.d.ts +29 -0
  51. package/dist-lib/components/Slot.d.ts +16 -0
  52. package/dist-lib/components/Switch.d.ts +6 -0
  53. package/dist-lib/components/Table.d.ts +66 -0
  54. package/dist-lib/components/TableTemplate.d.ts +52 -0
  55. package/dist-lib/components/Tabs.d.ts +40 -0
  56. package/dist-lib/components/Tag.d.ts +25 -0
  57. package/dist-lib/components/TextArea.d.ts +26 -0
  58. package/dist-lib/components/TimeField.d.ts +15 -0
  59. package/dist-lib/components/ToolBar.d.ts +5 -0
  60. package/dist-lib/components/Tooltip.d.ts +25 -0
  61. package/dist-lib/components/TruncatingText.d.ts +7 -0
  62. package/dist-lib/components/TwoDepthList.d.ts +41 -0
  63. package/dist-lib/components/UsageExample.d.ts +16 -0
  64. package/dist-lib/components/chipStyles.d.ts +11 -0
  65. package/dist-lib/components/formulaFunctions.d.ts +75 -0
  66. package/dist-lib/components/modalContext.d.ts +1 -0
  67. package/dist-lib/components/popoverLayers.d.ts +6 -0
  68. package/dist-lib/components/tableView.d.ts +17 -0
  69. package/dist-lib/components/useFocusTrap.d.ts +6 -0
  70. package/dist-lib/components/useHoverTooltip.d.ts +10 -0
  71. package/dist-lib/components/useOutsideDismiss.d.ts +9 -0
  72. package/dist-lib/components/usePanelKeyboard.d.ts +11 -0
  73. package/dist-lib/components/usePopoverPosition.d.ts +11 -0
  74. package/dist-lib/editor.d.ts +3 -0
  75. package/dist-lib/editor.js +2 -0
  76. package/dist-lib/index.d.ts +68 -0
  77. package/dist-lib/index.js +4707 -0
  78. package/dist-lib/index.js.map +1 -0
  79. package/dist-lib/navContext.d.ts +8 -0
  80. package/dist-lib/styles.css +1 -0
  81. package/dist-lib/tailwind-preset.cjs +1023 -0
  82. package/dist-lib/tailwind-preset.mjs +1000 -0
  83. package/dist-lib/tokens/border.d.ts +6 -0
  84. package/dist-lib/tokens/colors/accordionColors.d.ts +3 -0
  85. package/dist-lib/tokens/colors/builderAreaColors.d.ts +12 -0
  86. package/dist-lib/tokens/colors/buttonColors.d.ts +37 -0
  87. package/dist-lib/tokens/colors/calendarColors.d.ts +12 -0
  88. package/dist-lib/tokens/colors/checkboxColors.d.ts +12 -0
  89. package/dist-lib/tokens/colors/chipColors.d.ts +82 -0
  90. package/dist-lib/tokens/colors/conditionCardColors.d.ts +10 -0
  91. package/dist-lib/tokens/colors/conditionOrderSlotColors.d.ts +15 -0
  92. package/dist-lib/tokens/colors/dividerColors.d.ts +5 -0
  93. package/dist-lib/tokens/colors/editorColors.d.ts +30 -0
  94. package/dist-lib/tokens/colors/formulaColors.d.ts +26 -0
  95. package/dist-lib/tokens/colors/labelFieldColors.d.ts +6 -0
  96. package/dist-lib/tokens/colors/listColors.d.ts +20 -0
  97. package/dist-lib/tokens/colors/modalColors.d.ts +7 -0
  98. package/dist-lib/tokens/colors/newTagColors.d.ts +6 -0
  99. package/dist-lib/tokens/colors/radioColors.d.ts +12 -0
  100. package/dist-lib/tokens/colors/segmentedColors.d.ts +9 -0
  101. package/dist-lib/tokens/colors/sideNavColors.d.ts +13 -0
  102. package/dist-lib/tokens/colors/switchColors.d.ts +13 -0
  103. package/dist-lib/tokens/colors/tabColors.d.ts +9 -0
  104. package/dist-lib/tokens/colors/tableColors.d.ts +8 -0
  105. package/dist-lib/tokens/colors/tagColors.d.ts +10 -0
  106. package/dist-lib/tokens/colors/textFieldColors.d.ts +25 -0
  107. package/dist-lib/tokens/colors/toolbarColors.d.ts +5 -0
  108. package/dist-lib/tokens/colors.d.ts +176 -0
  109. package/dist-lib/tokens/fontIconColors.d.ts +7 -0
  110. package/dist-lib/tokens/icon.d.ts +5 -0
  111. package/dist-lib/tokens/index.d.ts +32 -0
  112. package/dist-lib/tokens/lineHeight.d.ts +11 -0
  113. package/dist-lib/tokens/radius.d.ts +14 -0
  114. package/dist-lib/tokens/spacing.d.ts +16 -0
  115. package/dist-lib/tokens/typography.d.ts +33 -0
  116. package/dist-lib/tokens-CbcaxhkP.js +583 -0
  117. package/dist-lib/tokens-CbcaxhkP.js.map +1 -0
  118. package/dist-lib/tokens.js +2 -0
  119. package/dist-lib/utils/datetime.d.ts +6 -0
  120. package/dist-lib/utils/phone.d.ts +1 -0
  121. package/package.json +163 -0
@@ -0,0 +1,25 @@
1
+ import { ComponentPropsWithoutRef } from 'react';
2
+ export declare function Accordion({ children, className, ...props }: ComponentPropsWithoutRef<'div'>): import("react").JSX.Element;
3
+ export interface AccordionItemProps extends ComponentPropsWithoutRef<'div'> {
4
+ title?: string;
5
+ defaultOpen?: boolean;
6
+ /** controlled 펼침(선택) */
7
+ open?: boolean;
8
+ /** (open) => void */
9
+ onOpenChange?: (open: boolean) => void;
10
+ /** 이름 편집 버튼(SquarePen) 노출 */
11
+ nameEditable?: boolean;
12
+ /** (title) => void — 저장 시에만(취소/Esc는 폐기) */
13
+ onTitleChange?: (title: string) => void;
14
+ /** 삭제 버튼(Trash2) 노출 */
15
+ deletable?: boolean;
16
+ /** 삭제 버튼 비활성(예: 마지막 항목은 삭제 불가) */
17
+ deleteDisabled?: boolean;
18
+ /** () => void */
19
+ onDelete?: () => void;
20
+ /** 접힌 상태에서도 본문 마운트(폼 상태 유지 등) */
21
+ keepMounted?: boolean;
22
+ /** 본문 내부 스크롤 상한(px) — 미지정 시 자연 확장(페이지 스크롤) */
23
+ maxHeight?: number | string;
24
+ }
25
+ export declare function AccordionItem({ title, children, defaultOpen, open: openProp, onOpenChange, nameEditable, onTitleChange, deletable, deleteDisabled, onDelete, keepMounted, maxHeight, className, ...props }: AccordionItemProps): import("react").JSX.Element;
@@ -0,0 +1,27 @@
1
+ import { ComponentPropsWithoutRef, ElementType, ReactNode } from 'react';
2
+ interface ButtonProps extends ComponentPropsWithoutRef<'button'> {
3
+ size?: '32' | '24' | '18';
4
+ variant?: 'fill' | 'line' | 'ghost' | 'underline';
5
+ color?: 'black' | 'red' | 'blue' | 'green' | 'violet' | 'pink' | 'orange';
6
+ weight?: 'normal' | 'semibold';
7
+ leftIcon?: ElementType | null;
8
+ rightIcon?: ElementType | null;
9
+ icon?: ElementType | null;
10
+ loading?: boolean;
11
+ truncate?: boolean;
12
+ width?: 'hug' | 'fill';
13
+ showTooltip?: boolean;
14
+ tooltip?: ReactNode;
15
+ asChild?: boolean;
16
+ }
17
+ export declare function Button({ children, size, // '32' | '24' | '18'(아이콘 전용 소형 — 버튼 18×18·아이콘 14×14)
18
+ variant, // 'fill' | 'line' | 'ghost' | 'underline'(밑줄 텍스트 버튼)
19
+ color, // underline 전용 색 — 'black'(기본) | 'red' | 'blue' | 'green' | 'violet' | 'pink' | 'orange'
20
+ weight, // underline 전용 두께 — 'normal'(기본) | 'semibold'
21
+ leftIcon: LeftIcon, rightIcon: RightIcon, icon: Icon, disabled, loading, truncate, // 라벨이 부모 폭을 넘으면 말줄임(테이블 셀 등 좁은 영역용)
22
+ width, // 'hug'(콘텐츠 폭) | 'fill'(부모 전체 폭) — underline 변형엔 미적용
23
+ showTooltip, // 아이콘 전용 버튼 hover 명칭 툴팁 on/off (기본 켬)
24
+ tooltip, // 툴팁 문구 커스텀. 미지정 시 aria-label 사용
25
+ asChild, // <button> 대신 자식 엘리먼트를 루트로(Slot 합성)
26
+ onClick, onMouseEnter, onMouseLeave, className, ...props }: ButtonProps): import("react").JSX.Element;
27
+ export {};
@@ -0,0 +1,18 @@
1
+ import { ComponentPropsWithoutRef } from 'react';
2
+ declare const GAP_STYLE: {
3
+ '3': string;
4
+ '4': string;
5
+ '5': string;
6
+ '6': string;
7
+ '7': string;
8
+ };
9
+ interface ButtonGroupProps extends ComponentPropsWithoutRef<'div'> {
10
+ direction?: 'horizontal' | 'vertical';
11
+ gap?: keyof typeof GAP_STYLE;
12
+ width?: 'hug' | 'fill';
13
+ }
14
+ export declare function ButtonGroup({ children, direction, // 'horizontal' | 'vertical'
15
+ gap, // 간격 토큰 키 — 기본 '5'(8px)
16
+ width, // 'hug'(콘텐츠 폭) | 'fill'(부모 전체 폭 — 버튼들 균등 분할)
17
+ className, ...props }: ButtonGroupProps): import("react").JSX.Element;
18
+ export {};
@@ -0,0 +1,39 @@
1
+ import { ComponentPropsWithoutRef } from 'react';
2
+ declare const HALF_FILL: {
3
+ default: {
4
+ left: string;
5
+ right: string;
6
+ };
7
+ muted: {
8
+ left: string;
9
+ right: string;
10
+ };
11
+ today: {
12
+ left: string;
13
+ right: string;
14
+ };
15
+ selected: {
16
+ left: string;
17
+ right: string;
18
+ };
19
+ 'range-start': {
20
+ left: string;
21
+ right: string;
22
+ };
23
+ 'range-end': {
24
+ left: string;
25
+ right: string;
26
+ };
27
+ 'in-range': {
28
+ left: string;
29
+ right: string;
30
+ };
31
+ };
32
+ interface CalendarDayButtonProps extends ComponentPropsWithoutRef<'button'> {
33
+ state?: keyof typeof HALF_FILL;
34
+ edge?: 'left' | 'right';
35
+ }
36
+ export declare function CalendarDayButton({ children, state, // 'default' | 'muted' | 'today' | 'selected' | 'range-start' | 'range-end' | 'in-range'
37
+ edge, // 'left'(행 첫 칸) | 'right'(행 마지막 칸) — 범위 띠가 줄에서 끊길 때 바깥 모서리를 둥글게
38
+ disabled, onClick, className, ...props }: CalendarDayButtonProps): import("react").JSX.Element;
39
+ export {};
@@ -0,0 +1,34 @@
1
+ import { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ import { OptionItem } from './formulaFunctions';
3
+ declare const GAP_STYLE: {
4
+ '3': string;
5
+ '4': string;
6
+ '5': string;
7
+ '6': string;
8
+ '7': string;
9
+ };
10
+ interface CheckboxProps extends ComponentPropsWithoutRef<'input'> {
11
+ label?: ReactNode;
12
+ }
13
+ export declare function Checkbox({ checked, defaultChecked, onChange, disabled, label, className, ...props }: CheckboxProps): import("react").JSX.Element;
14
+ interface CheckboxGroupProps extends Omit<ComponentPropsWithoutRef<'div'>, 'onChange'> {
15
+ items?: OptionItem[];
16
+ value?: string[];
17
+ defaultValue?: string[];
18
+ onChange?: (nextValues: string[], meta: {
19
+ value: string;
20
+ checked: boolean;
21
+ }) => void;
22
+ direction?: 'vertical' | 'horizontal';
23
+ gap?: keyof typeof GAP_STYLE;
24
+ disabled?: boolean;
25
+ }
26
+ export declare function CheckboxGroup({ items, // [{ value, label, disabled }]
27
+ value, // controlled 선택값 배열
28
+ defaultValue, // uncontrolled 초기 선택값 배열
29
+ onChange, // (nextValues, { value, checked }) => void
30
+ direction, // 'vertical' | 'horizontal'
31
+ gap, // 간격 토큰 키 — 기본 '7'(16px)
32
+ disabled, // 그룹 전체 비활성
33
+ className, ...props }: CheckboxGroupProps): import("react").JSX.Element;
34
+ export {};
@@ -0,0 +1,12 @@
1
+ import { ComponentPropsWithoutRef, MouseEvent } from 'react';
2
+ import { ChipColor } from './chipStyles';
3
+ interface ChipProps extends ComponentPropsWithoutRef<'span'> {
4
+ onRemove?: (e: MouseEvent<HTMLButtonElement>) => void;
5
+ color?: ChipColor;
6
+ removeAriaLabel?: string;
7
+ }
8
+ export declare function Chip({ children, onRemove, // X 클릭 콜백 — 있으면 X 노출
9
+ onClick, // 칩 전체 클릭(선택 등)
10
+ color, // gray | red | blue | black
11
+ removeAriaLabel, className, ...props }: ChipProps): import("react").JSX.Element;
12
+ export {};
@@ -0,0 +1,31 @@
1
+ import { ComponentPropsWithoutRef, HTMLAttributes, ReactNode } from 'react';
2
+ interface ConditionSlotCardProps extends ComponentPropsWithoutRef<'div'> {
3
+ title?: string;
4
+ enabled?: boolean;
5
+ onEnabledChange?: (checked: boolean) => void;
6
+ dragging?: boolean;
7
+ width?: number | string;
8
+ dragHandleProps?: HTMLAttributes<HTMLSpanElement> | null;
9
+ children?: ReactNode;
10
+ }
11
+ export declare function ConditionSlotCard({ title, enabled, onEnabledChange, dragging, width, dragHandleProps, children, className, ...props }: ConditionSlotCardProps): import("react").JSX.Element;
12
+ interface ConditionOrderItem {
13
+ id: string;
14
+ body?: ReactNode;
15
+ }
16
+ interface ConditionOrderSlotProps extends ComponentPropsWithoutRef<'div'> {
17
+ items?: ConditionOrderItem[];
18
+ direction?: 'vertical' | 'horizontal';
19
+ order?: string[];
20
+ defaultOrder?: string[];
21
+ onOrderChange?: (ids: string[]) => void;
22
+ enabledIds?: string[];
23
+ onEnabledChange?: (nextEnabledIds: string[], info: {
24
+ id: string;
25
+ enabled: boolean;
26
+ }) => void;
27
+ titlePrefix?: string;
28
+ cardWidth?: number | string;
29
+ }
30
+ export declare function ConditionOrderSlot({ items, direction, order, defaultOrder, onOrderChange, enabledIds, onEnabledChange, titlePrefix, cardWidth, className, ...props }: ConditionOrderSlotProps): import("react").JSX.Element;
31
+ export {};
@@ -0,0 +1,39 @@
1
+ type DateRange = {
2
+ start: Date | null;
3
+ end: Date | null;
4
+ };
5
+ type DateFieldValue = Date | null | DateRange;
6
+ interface DateFieldProps {
7
+ mode?: 'single' | 'range';
8
+ value?: DateFieldValue;
9
+ defaultValue?: DateFieldValue;
10
+ onChange?: (value: DateFieldValue) => void;
11
+ showTime?: boolean;
12
+ startTime?: string;
13
+ defaultStartTime?: string;
14
+ onStartTimeChange?: (time: string) => void;
15
+ endTime?: string;
16
+ defaultEndTime?: string;
17
+ onEndTimeChange?: (time: string) => void;
18
+ placeholder?: string;
19
+ disabled?: boolean;
20
+ readOnly?: boolean;
21
+ error?: boolean;
22
+ errorMessage?: string;
23
+ formatErrorMessage?: string;
24
+ closeOnSelect?: boolean;
25
+ width?: number | string;
26
+ className?: string;
27
+ disablePast?: boolean;
28
+ disableFuture?: boolean;
29
+ minDate?: Date;
30
+ maxDate?: Date;
31
+ disabledDate?: (date: Date) => boolean;
32
+ weekStartsOn?: number;
33
+ minYear?: number;
34
+ maxYear?: number;
35
+ }
36
+ export declare function DateField({ mode, // 'single' | 'range'
37
+ value, defaultValue, onChange, showTime, startTime, defaultStartTime, onStartTimeChange, endTime, defaultEndTime, onEndTimeChange, placeholder, disabled, readOnly, error, errorMessage, formatErrorMessage, // 직접 입력 형식 오류 메시지
38
+ closeOnSelect, width, className, disablePast, disableFuture, minDate, maxDate, disabledDate, weekStartsOn, minYear, maxYear, ...props }: DateFieldProps): import("react").JSX.Element;
39
+ export {};
@@ -0,0 +1,49 @@
1
+ import { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ export interface DateRange {
3
+ start: Date | null;
4
+ end: Date | null;
5
+ }
6
+ export type DatePickerValue = Date | DateRange | null;
7
+ export interface DatePickerProps extends Omit<ComponentPropsWithoutRef<'div'>, 'onChange' | 'defaultValue'> {
8
+ /** 'single' | 'range' */
9
+ mode?: 'single' | 'range';
10
+ value?: DatePickerValue;
11
+ defaultValue?: DatePickerValue;
12
+ onChange?: (value: DatePickerValue) => void;
13
+ /** 오늘 이전 날짜 선택 불가(오늘은 선택 가능) */
14
+ disablePast?: boolean;
15
+ /** 오늘 이후 날짜 선택 불가(오늘은 선택 가능) */
16
+ disableFuture?: boolean;
17
+ /** 이 날짜 이전은 비활성 (Date) */
18
+ minDate?: Date;
19
+ /** 이 날짜 이후는 비활성 (Date) */
20
+ maxDate?: Date;
21
+ /** (date) => boolean — 커스텀 비활성 판정 */
22
+ disabledDate?: (date: Date) => boolean;
23
+ /** 표시 월(controlled) — Date */
24
+ month?: Date;
25
+ defaultMonth?: Date;
26
+ onMonthChange?: (month: Date) => void;
27
+ /** 하단 시간 영역 표시 — 범위=시작/마감 2칸 · 단일=시간 1칸(startTime 사용, 마감 없음) */
28
+ showTime?: boolean;
29
+ startTime?: string;
30
+ endTime?: string;
31
+ onStartTimeChange?: (time: string) => void;
32
+ onEndTimeChange?: (time: string) => void;
33
+ /** 단일 모드 시간 칸 라벨 */
34
+ timeLabel?: ReactNode;
35
+ /** 0=일요일 시작 */
36
+ weekStartsOn?: number;
37
+ weekdayLabels?: string[];
38
+ todayLabel?: string;
39
+ /** 날짜 영역에서 휠 세로 스크롤로 이전/다음 달 이동 */
40
+ scrollNavigate?: boolean;
41
+ rangeTooltip?: boolean;
42
+ rangeStartLabel?: string;
43
+ rangeEndLabel?: string;
44
+ /** 연도 선택 범위(미지정 시 표시 연도 ±12) */
45
+ minYear?: number;
46
+ maxYear?: number;
47
+ width?: number | string;
48
+ }
49
+ export declare function DatePicker({ mode, value, defaultValue, onChange, disablePast, disableFuture, minDate, maxDate, disabledDate, month, defaultMonth, onMonthChange, showTime, startTime, endTime, onStartTimeChange, onEndTimeChange, timeLabel, weekStartsOn, weekdayLabels, todayLabel, scrollNavigate, rangeTooltip, rangeStartLabel, rangeEndLabel, minYear, maxYear, width, className, ...props }: DatePickerProps): import("react").JSX.Element;
@@ -0,0 +1,12 @@
1
+ import { ComponentPropsWithoutRef } from 'react';
2
+ declare const COLOR: {
3
+ subtle: string;
4
+ default: string;
5
+ strong: string;
6
+ };
7
+ interface DividerProps extends ComponentPropsWithoutRef<'div'> {
8
+ direction?: 'horizontal' | 'vertical';
9
+ color?: keyof typeof COLOR;
10
+ }
11
+ export declare function Divider({ direction, color, className, ...props }: DividerProps): import("react").JSX.Element;
12
+ export {};
@@ -0,0 +1,23 @@
1
+ import { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ type EditorMode = 'edit' | 'source' | 'preview';
3
+ interface EditorProps extends Omit<ComponentPropsWithoutRef<'div'>, 'onChange' | 'placeholder'> {
4
+ value?: string;
5
+ defaultValue?: string;
6
+ onChange?: (html: string) => void;
7
+ mode?: EditorMode;
8
+ onModeChange?: (mode: EditorMode) => void;
9
+ toolbar?: string[];
10
+ mergeFields?: (string | {
11
+ label: string;
12
+ value: string;
13
+ })[];
14
+ readOnly?: boolean;
15
+ showSource?: boolean;
16
+ placeholder?: ReactNode;
17
+ minHeight?: number | string;
18
+ maxHeight?: number | string;
19
+ width?: number | string;
20
+ allowSourceEdit?: boolean;
21
+ }
22
+ export declare function Editor({ value, defaultValue, onChange, mode: modeProp, onModeChange, toolbar, mergeFields, readOnly, showSource, placeholder, minHeight, maxHeight, width, allowSourceEdit, className, ...props }: EditorProps): import("react").JSX.Element;
23
+ export {};
@@ -0,0 +1,12 @@
1
+ import { Editor } from '@tiptap/react';
2
+ type MergeFieldItem = string | {
3
+ label: string;
4
+ value: string;
5
+ };
6
+ interface EditorToolbarProps {
7
+ editor: Editor | null;
8
+ toolbar?: string[];
9
+ mergeFields?: MergeFieldItem[];
10
+ }
11
+ export declare function EditorToolbar({ editor, toolbar, mergeFields }: EditorToolbarProps): import("react").JSX.Element | null;
12
+ export {};
@@ -0,0 +1,30 @@
1
+ import { Component, ErrorInfo, ReactNode } from 'react';
2
+ interface ErrorBoundaryProps {
3
+ children?: ReactNode;
4
+ resetKey?: unknown;
5
+ title?: ReactNode;
6
+ description?: ReactNode;
7
+ fallback?: (args: {
8
+ error: Error;
9
+ reset: () => void;
10
+ }) => ReactNode;
11
+ onError?: (error: Error, info: ErrorInfo) => void;
12
+ }
13
+ interface ErrorBoundaryState {
14
+ error: Error | null;
15
+ prevResetKey: unknown;
16
+ }
17
+ export declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
18
+ constructor(props: ErrorBoundaryProps);
19
+ static getDerivedStateFromError(error: Error): {
20
+ error: Error;
21
+ };
22
+ static getDerivedStateFromProps(props: ErrorBoundaryProps, state: ErrorBoundaryState): {
23
+ error: null;
24
+ prevResetKey: unknown;
25
+ } | null;
26
+ componentDidCatch(error: Error, info: ErrorInfo): void;
27
+ reset(): void;
28
+ render(): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import('react').ReactPortal | import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | import("react").JSX.Element | null | undefined;
29
+ }
30
+ export {};
@@ -0,0 +1,32 @@
1
+ import { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ declare const GAP_CLASS: {
3
+ 'spacing-2': string;
4
+ 'spacing-3': string;
5
+ 'spacing-5': string;
6
+ 'spacing-6': string;
7
+ 'spacing-7': string;
8
+ };
9
+ interface FieldProps extends ComponentPropsWithoutRef<'div'> {
10
+ label?: ReactNode;
11
+ htmlFor?: string;
12
+ required?: boolean;
13
+ disabled?: boolean;
14
+ description?: ReactNode;
15
+ direction?: 'vertical' | 'horizontal';
16
+ controlsDirection?: 'column' | 'row';
17
+ labelWidth?: number | string;
18
+ labelSize?: '12' | '13' | '14' | '15' | '16';
19
+ gap?: keyof typeof GAP_CLASS;
20
+ }
21
+ export declare function Field({ label, // string | ReactNode — 주면 내부 Label 렌더
22
+ htmlFor, // 컨트롤 id와 연결(라벨 클릭 시 포커스). 컨트롤에 같은 id 부여 필요
23
+ required, disabled, // 라벨 비활성 스타일(컨트롤 disabled는 컨트롤에 직접 전달)
24
+ description, // 보조 설명(helper) — 컨트롤 아래 회색 텍스트
25
+ direction, // 'vertical' | 'horizontal' (라벨↔컨트롤 배치)
26
+ controlsDirection, // 'column' | 'row' — 컨트롤 여러 개일 때 배치(복합 필드, row=한 줄 등분)
27
+ labelWidth, // horizontal일 때 라벨 영역 너비(number=px | CSS 문자열)
28
+ labelSize, // Label size (12~16). 미지정 시 '14' (2026-07-06 세로도 12→14 통일)
29
+ gap, // 라벨↔컨트롤 간격 토큰 키 override (예: 'spacing-5')
30
+ className, children, // 컨트롤
31
+ ...props }: FieldProps): import("react").JSX.Element;
32
+ export {};
@@ -0,0 +1,22 @@
1
+ import { LucideIcon } from 'lucide-react';
2
+ import { FileUploadMenuProps } from './FileUploadMenu';
3
+ export interface UploadTriggerButtonProps {
4
+ leftIcon?: LucideIcon | null;
5
+ variant?: 'fill' | 'line' | 'ghost' | 'underline';
6
+ [key: string]: unknown;
7
+ }
8
+ export interface FileUploadButtonProps extends Omit<FileUploadMenuProps, 'width'> {
9
+ triggerText?: string;
10
+ /** 파일 N개 시 라벨 = `${triggerText} (N${countSuffix})` */
11
+ countSuffix?: string;
12
+ showCount?: boolean;
13
+ /** 모든 Button 스타일 props 통과(variant/size/leftIcon/...). 기본 variant=line·leftIcon=Upload */
14
+ buttonProps?: UploadTriggerButtonProps;
15
+ placement?: string;
16
+ /** 팝오버(=FileUploadMenu) 너비 */
17
+ menuWidth?: number | string;
18
+ open?: boolean;
19
+ onOpenChange?: (open: boolean) => void;
20
+ disabled?: boolean;
21
+ }
22
+ export declare function FileUploadButton({ files, triggerText, countSuffix, showCount, buttonProps, placement, menuWidth, open, onOpenChange, disabled, className, ...menuProps }: FileUploadButtonProps): import("react").JSX.Element;
@@ -0,0 +1,24 @@
1
+ import { PopoverMenuProps } from './PopoverMenu';
2
+ export interface UploadFileItem {
3
+ name: string;
4
+ size?: number | string;
5
+ id?: string | number;
6
+ }
7
+ export interface FileUploadMenuProps extends PopoverMenuProps {
8
+ /** [{ name, size?, id? }] */
9
+ files?: UploadFileItem[];
10
+ /** 안내 문구(여러 줄은 \n) */
11
+ guide?: string;
12
+ maxCount?: number;
13
+ /** <input accept> 실제 필터 (예: '.pdf,.doc,.xlsx'). ⚠️ guide 표시와 직접 일치시킬 것 */
14
+ accept?: string;
15
+ multiple?: boolean;
16
+ /** (FileList) => void — '파일 찾기'로 선택 */
17
+ onAdd?: (files: FileList) => void;
18
+ /** (file, index) => void — 행 삭제 */
19
+ onDelete?: (file: UploadFileItem, index: number) => void;
20
+ findText?: string;
21
+ /** 기본 `최대 ${maxCount}개까지 업로드할 수 있습니다` */
22
+ maxText?: string;
23
+ }
24
+ export declare function FileUploadMenu({ files, guide, maxCount, accept, multiple, onAdd, onDelete, findText, maxText, width, className, ...props }: FileUploadMenuProps): import("react").JSX.Element;
@@ -0,0 +1,33 @@
1
+ import { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ declare const GAP_X: {
3
+ 16: string;
4
+ 20: string;
5
+ 24: string;
6
+ 28: string;
7
+ 32: string;
8
+ };
9
+ declare const GAP_Y: {
10
+ 16: string;
11
+ 20: string;
12
+ 24: string;
13
+ 28: string;
14
+ 32: string;
15
+ };
16
+ interface FormTemplateField {
17
+ key: string;
18
+ label?: ReactNode;
19
+ required?: boolean;
20
+ disabled?: boolean;
21
+ description?: ReactNode;
22
+ span?: number;
23
+ control?: ReactNode;
24
+ }
25
+ interface FormTemplateProps extends ComponentPropsWithoutRef<'div'> {
26
+ fields?: FormTemplateField[];
27
+ columns?: 1 | 2 | 3;
28
+ columnGap?: keyof typeof GAP_X;
29
+ rowGap?: keyof typeof GAP_Y;
30
+ labelSize?: '12' | '13' | '14' | '15' | '16';
31
+ }
32
+ export declare function FormTemplate({ fields, columns, columnGap, rowGap, labelSize, className, ...props }: FormTemplateProps): import("react").JSX.Element;
33
+ export {};
@@ -0,0 +1,14 @@
1
+ import { ImageUploadMenuProps } from './ImageUploadMenu';
2
+ import { UploadTriggerButtonProps } from './FileUploadButton';
3
+ export interface ImageUploadButtonProps extends Omit<ImageUploadMenuProps, 'width'> {
4
+ triggerText?: string;
5
+ /** 모든 Button 스타일 props 통과. 기본 variant=line·leftIcon=Image */
6
+ buttonProps?: UploadTriggerButtonProps;
7
+ placement?: string;
8
+ /** 팝오버(=ImageUploadMenu) 너비 */
9
+ menuWidth?: number | string;
10
+ open?: boolean;
11
+ onOpenChange?: (open: boolean) => void;
12
+ disabled?: boolean;
13
+ }
14
+ export declare function ImageUploadButton({ triggerText, buttonProps, placement, menuWidth, open, onOpenChange, disabled, className, ...menuProps }: ImageUploadButtonProps): import("react").JSX.Element;
@@ -0,0 +1,17 @@
1
+ import { PopoverMenuProps } from './PopoverMenu';
2
+ export interface ImageUploadMenuProps extends Omit<PopoverMenuProps, 'onSelect'> {
3
+ /** 미리보기 이미지 URL (없으면 empty) */
4
+ image?: string;
5
+ /** 안내 문구(여러 줄은 \n) */
6
+ guide?: string;
7
+ /** <input accept> 실제 필터 (예: '.jpeg,.png,.webp'). ⚠️ guide 표시와 직접 일치시킬 것 */
8
+ accept?: string;
9
+ /** (File) => void — '파일 찾기'로 선택 */
10
+ onSelect?: (file: File) => void;
11
+ /** () => void — '파일 삭제' */
12
+ onRemove?: () => void;
13
+ findText?: string;
14
+ removeText?: string;
15
+ imageAlt?: string;
16
+ }
17
+ export declare function ImageUploadMenu({ image, guide, accept, onSelect, onRemove, findText, removeText, imageAlt, width, className, ...props }: ImageUploadMenuProps): import("react").JSX.Element;
@@ -0,0 +1,18 @@
1
+ import { ComponentPropsWithoutRef, ComponentType, CSSProperties } from 'react';
2
+ type IconComponent = ComponentType<{
3
+ size?: number | string;
4
+ strokeWidth?: number | string;
5
+ className?: string;
6
+ }>;
7
+ interface InlineFieldTriggerProps extends ComponentPropsWithoutRef<'span'> {
8
+ icon?: IconComponent | null;
9
+ size?: '24' | '20';
10
+ open?: boolean;
11
+ disabled?: boolean;
12
+ readOnly?: boolean;
13
+ interactive?: boolean;
14
+ maxWidth?: CSSProperties['maxWidth'];
15
+ fill?: boolean;
16
+ }
17
+ export declare const InlineFieldTrigger: import('react').ForwardRefExoticComponent<InlineFieldTriggerProps & import('react').RefAttributes<HTMLSpanElement>>;
18
+ export {};
@@ -0,0 +1,28 @@
1
+ import { ChangeEvent, ComponentPropsWithoutRef } from 'react';
2
+ declare const SIZE_STYLE: {
3
+ '32': {
4
+ box: string;
5
+ text: string;
6
+ };
7
+ '22': {
8
+ box: string;
9
+ text: string;
10
+ };
11
+ };
12
+ interface InputProps extends Omit<ComponentPropsWithoutRef<'div'>, 'onChange'> {
13
+ value?: string | number;
14
+ defaultValue?: string | number;
15
+ onChange?: (e: ChangeEvent<HTMLInputElement>) => void;
16
+ placeholder?: string;
17
+ size?: keyof typeof SIZE_STYLE;
18
+ disabled?: boolean;
19
+ readOnly?: boolean;
20
+ error?: boolean;
21
+ errorMessage?: string;
22
+ width?: number | string;
23
+ inputProps?: ComponentPropsWithoutRef<'input'>;
24
+ }
25
+ export declare function Input({ value, defaultValue, onChange, placeholder, size, // '32'(32px·14px) | '22'(22px·12px, 라인하이트 핏)
26
+ disabled, readOnly, error, errorMessage, width, // 너비: 숫자(px) 또는 CSS 길이 문자열('100%' 등). 미지정 시 200px
27
+ className, inputProps, ...props }: InputProps): import("react").JSX.Element;
28
+ export {};
@@ -0,0 +1,41 @@
1
+ import { ComponentPropsWithoutRef, Ref } from 'react';
2
+ interface JobOption {
3
+ value: string;
4
+ label: string;
5
+ disabled?: boolean;
6
+ }
7
+ interface JobRowItem {
8
+ criteria: string;
9
+ value: string;
10
+ }
11
+ interface JobRow {
12
+ id: string;
13
+ items: JobRowItem[];
14
+ }
15
+ export interface JobPositionTemplateHandle {
16
+ validate: () => boolean;
17
+ getRows: () => JobRow[];
18
+ }
19
+ interface JobPositionTemplateProps extends Omit<ComponentPropsWithoutRef<'div'>, 'onChange'> {
20
+ criteriaOptions?: JobOption[];
21
+ valueOptions?: Record<string, JobOption[]>;
22
+ conditionCount?: number;
23
+ defaultDisabledIds?: string[];
24
+ multiLastValue?: boolean;
25
+ defaultRows?: JobRow[];
26
+ onChange?: (rows: JobRow[]) => void;
27
+ step1Title?: string;
28
+ step2Title?: string;
29
+ addLabel?: string;
30
+ inputPlaceholder?: string;
31
+ orderLabel?: string;
32
+ jobLabel?: string;
33
+ manageLabel?: string;
34
+ tableHeight?: number | 'fill';
35
+ emptyMessage?: string;
36
+ duplicateMessage?: string;
37
+ emptyValueMessage?: string;
38
+ ref?: Ref<JobPositionTemplateHandle>;
39
+ }
40
+ export declare function JobPositionTemplate({ criteriaOptions, valueOptions, conditionCount, defaultDisabledIds, multiLastValue, defaultRows, onChange, step1Title, step2Title, addLabel, inputPlaceholder, orderLabel, jobLabel, manageLabel, tableHeight, emptyMessage, duplicateMessage, emptyValueMessage, ref, className, ...props }: JobPositionTemplateProps): import("react").JSX.Element;
41
+ export {};
@@ -0,0 +1,18 @@
1
+ import { ComponentPropsWithoutRef } from 'react';
2
+ declare const SIZE_STYLES: {
3
+ '12': string;
4
+ '13': string;
5
+ '14': string;
6
+ '15': string;
7
+ '16': string;
8
+ };
9
+ interface LabelProps extends ComponentPropsWithoutRef<'label'> {
10
+ size?: keyof typeof SIZE_STYLES;
11
+ required?: boolean;
12
+ disabled?: boolean;
13
+ }
14
+ export declare function Label({ children, htmlFor, size, // '12' | '13' | '14' | '15' | '16' (Figma size variant)
15
+ required, // 필수 표시(빨강 점) — Figma state=required
16
+ disabled, // 비활성 — Figma state=disabled
17
+ className, ...props }: LabelProps): import("react").JSX.Element;
18
+ export {};