@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,46 @@
1
+ import { LucideIcon } from 'lucide-react';
2
+ import { ComponentPropsWithoutRef, MouseEvent, ReactNode } from 'react';
3
+ type CheckChangeEvent = {
4
+ target: {
5
+ checked: boolean;
6
+ };
7
+ };
8
+ interface ListProps extends Omit<ComponentPropsWithoutRef<'div'>, 'title'> {
9
+ title?: ReactNode;
10
+ tag?: boolean;
11
+ tagText?: ReactNode;
12
+ icon?: LucideIcon | null;
13
+ checkbox?: boolean;
14
+ radio?: boolean;
15
+ checked?: boolean;
16
+ onCheckChange?: (e: CheckChangeEvent) => void;
17
+ showSwitch?: boolean;
18
+ switchChecked?: boolean;
19
+ onSwitchChange?: (e: CheckChangeEvent) => void;
20
+ rightButton?: boolean;
21
+ rightButtonIcon?: LucideIcon;
22
+ rightButtonAriaLabel?: string;
23
+ endIcon?: boolean;
24
+ rightSlot?: ReactNode;
25
+ selected?: boolean;
26
+ highlighted?: boolean;
27
+ disabled?: boolean;
28
+ onButtonClick?: (e: MouseEvent<HTMLButtonElement>) => void;
29
+ }
30
+ export declare function List({ title, tag, // 태그 표시 여부
31
+ tagText, icon: Icon, // 왼쪽 lucide 아이콘 (예: User)
32
+ checkbox, // 왼쪽 체크박스 표시(다중 선택)
33
+ radio, // 왼쪽 라디오 표시(단일 선택) — checkbox와 배타. checked/onCheckChange 공용
34
+ checked, // 체크박스/라디오 선택 상태
35
+ onCheckChange, // (e) => void — 체크박스/라디오 변경(e.target.checked)
36
+ showSwitch, // 오른쪽 스위치 표시
37
+ switchChecked, // 스위치 상태
38
+ onSwitchChange, // (e) => void — 스위치 변경
39
+ rightButton, // 고스트 아이콘 버튼 (기본 ⋯)
40
+ rightButtonIcon: RightButtonIcon, // 우측 버튼 아이콘(lucide) — 예: Trash2(삭제)
41
+ rightButtonAriaLabel, // 우측 버튼 aria-label
42
+ endIcon, // chevron-right
43
+ rightSlot, // 우측 임의 콘텐츠(입력칸+단위 등) — 행 클릭과 분리(자체 stopPropagation은 사용처가)
44
+ selected, highlighted, // 키보드 내비게이션 강조 (hover 색)
45
+ disabled, onClick, onButtonClick, className, ...props }: ListProps): import("react").JSX.Element;
46
+ export {};
@@ -0,0 +1,6 @@
1
+ import { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ interface ListEmptyProps extends ComponentPropsWithoutRef<'div'> {
3
+ message?: ReactNode;
4
+ }
5
+ export declare function ListEmpty({ message, className, ...props }: ListEmptyProps): import("react").JSX.Element;
6
+ export {};
@@ -0,0 +1,13 @@
1
+ import { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ declare const GAP_STYLE: {
3
+ '2': string;
4
+ '3': string;
5
+ };
6
+ interface ListGroupProps extends ComponentPropsWithoutRef<'div'> {
7
+ maxVisible?: number;
8
+ gap?: keyof typeof GAP_STYLE;
9
+ empty?: boolean;
10
+ emptyMessage?: ReactNode;
11
+ }
12
+ export declare function ListGroup({ children, maxVisible, gap, empty, emptyMessage, className, ...props }: ListGroupProps): import("react").JSX.Element;
13
+ export {};
@@ -0,0 +1,5 @@
1
+ interface MarkdownDocProps {
2
+ source?: string;
3
+ }
4
+ export declare function MarkdownDoc({ source }: MarkdownDocProps): import("react").JSX.Element;
5
+ export {};
@@ -0,0 +1,2 @@
1
+ import { Node } from '@tiptap/core';
2
+ export declare const MergeFieldNode: Node<any, any>;
@@ -0,0 +1,90 @@
1
+ import { ChangeEvent, ComponentPropsWithoutRef, FormEvent, ReactNode } from 'react';
2
+ declare const SIZE_WIDTH: {
3
+ sm: string;
4
+ md: string;
5
+ lg: string;
6
+ xl: string;
7
+ '2xl': string;
8
+ '3xl': string;
9
+ '4xl': string;
10
+ fill: string;
11
+ };
12
+ export interface ModalProps extends Omit<ComponentPropsWithoutRef<'div'>, 'title' | 'onSubmit'> {
13
+ open: boolean;
14
+ onClose: () => void;
15
+ title?: ReactNode;
16
+ /** 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | 'fill'(좌우 16씩 제외) */
17
+ size?: keyof typeof SIZE_WIDTH;
18
+ /** 'center'(브라우저 중앙) | 'top'(상단 정렬, 여백 16 ~ 화면높이/2−150 가변). 일반 팝업·FormModal 기본=top, Alert/Confirm은 center */
19
+ placement?: 'center' | 'top';
20
+ showHeader?: boolean;
21
+ /** 헤더 우측 닫기(X) 버튼 */
22
+ showClose?: boolean;
23
+ showFooter?: boolean;
24
+ /** 푸터 전체 커스텀 노드(주면 아래 버튼 props 무시) */
25
+ footer?: ReactNode;
26
+ /** 푸터 좌측 영역 — 새로고침/불러오기 버튼, 안내글, 유효성 메시지 등(텍스트/컴포넌트) */
27
+ footerStart?: ReactNode;
28
+ /** 'text' | 'button' — footerStart 내용 유형. 좌측 여백 결정: text=16(spacing-7) / button=12(spacing-6, 버튼 자체 여백 감안) — 2026-07-06 지시 */
29
+ footerStartType?: 'text' | 'button';
30
+ confirmText?: ReactNode;
31
+ cancelText?: ReactNode;
32
+ onConfirm?: () => void;
33
+ /** 미지정 시 onClose */
34
+ onCancel?: () => void;
35
+ /** 주동작 버튼 variant */
36
+ confirmVariant?: 'fill' | 'line' | 'ghost' | 'underline';
37
+ confirmDisabled?: boolean;
38
+ confirmLoading?: boolean;
39
+ /** 취소(보조) 버튼 노출 여부 */
40
+ showCancel?: boolean;
41
+ /** 푸터 버튼을 전체 폭으로 균등 분할(footerStart 없는 단순 액션용 — Alert/Confirm) */
42
+ footerFullWidth?: boolean;
43
+ closeOnOverlayClick?: boolean;
44
+ closeOnEsc?: boolean;
45
+ /** 본문 최대 높이(초과 시 내부 스크롤) */
46
+ bodyMaxHeight?: number | string;
47
+ /** 본문 패딩(토큰 클래스). Alert/Confirm은 p-spacing-8 */
48
+ bodyPadding?: string;
49
+ /** 푸터 패딩 직접 지정(토큰 클래스) — 미지정 시 footerStartType 기반 기본값(좌 16/12·우 12·상하 12). Alert/Confirm은 px-spacing-8 py-spacing-7 */
50
+ footerPadding?: string | null;
51
+ bodyClassName?: string;
52
+ /** 주면 본문+푸터를 <form>으로 감싸고 주동작 버튼 type=submit */
53
+ onSubmit?: (e: FormEvent<HTMLFormElement>) => void;
54
+ }
55
+ export declare function Modal({ open, onClose, title, children, // ModalContent — 본문에 주입할 내용
56
+ size, placement, showHeader, showClose, showFooter, footer, footerStart, footerStartType, confirmText, cancelText, onConfirm, onCancel, confirmVariant, confirmDisabled, confirmLoading, showCancel, footerFullWidth, closeOnOverlayClick, closeOnEsc, bodyMaxHeight, bodyPadding, footerPadding, bodyClassName, onSubmit, className, ...props }: ModalProps): import('react').ReactPortal | null;
57
+ export interface AlertModalProps extends ModalProps {
58
+ /** 설명글(여러 줄은 \n) */
59
+ description?: ReactNode;
60
+ /** 2뎁스 상세 설명(회색 박스) */
61
+ descriptionDetail?: ReactNode;
62
+ }
63
+ export declare function AlertModal({ title, description, descriptionDetail, confirmText, onConfirm, onClose, size, // Alert/Confirm 기본 360px
64
+ placement, // 알럿은 중앙 기본(필요 시 override)
65
+ ...props }: AlertModalProps): import("react").JSX.Element;
66
+ export interface ConfirmModalProps extends ModalProps {
67
+ /** 설명글(여러 줄은 \n) */
68
+ description?: ReactNode;
69
+ /** 2뎁스 상세 설명(회색 박스) */
70
+ descriptionDetail?: ReactNode;
71
+ /** 주면 본문에 재확인 체크박스 노출 */
72
+ checkboxLabel?: ReactNode;
73
+ /** controlled 체크 상태(미지정 시 내부 상태로 동작) */
74
+ checked?: boolean;
75
+ /** (checked, event) — 체크 변경 콜백 */
76
+ onCheckChange?: (checked: boolean, e: ChangeEvent<HTMLInputElement>) => void;
77
+ /** checkboxLabel 있을 때 체크해야 확인 활성화 */
78
+ requireCheck?: boolean;
79
+ }
80
+ export declare function ConfirmModal({ title, description, descriptionDetail, checkboxLabel, checked, onCheckChange, requireCheck, confirmText, cancelText, onConfirm, onCancel, onClose, confirmVariant, confirmDisabled, open, size, // Alert/Confirm 기본 360px
81
+ placement, // 컨펌은 중앙 기본(필요 시 override)
82
+ ...props }: ConfirmModalProps): import("react").JSX.Element;
83
+ export interface FormModalProps extends ModalProps {
84
+ /** 저장/등록 등 목적별 라벨 */
85
+ submitText?: ReactNode;
86
+ submitDisabled?: boolean;
87
+ loading?: boolean;
88
+ }
89
+ export declare function FormModal({ submitText, cancelText, onSubmit, onCancel, onClose, submitDisabled, loading, ...props }: FormModalProps): import("react").JSX.Element;
90
+ export {};
@@ -0,0 +1,38 @@
1
+ import { ComponentPropsWithoutRef } from 'react';
2
+ type NoticeChannel = 'site' | 'email' | 'sms';
3
+ interface NoticeAttachment {
4
+ name: string;
5
+ size: number;
6
+ id: string;
7
+ file: File;
8
+ }
9
+ interface NoticeWritingValues {
10
+ channel: NoticeChannel;
11
+ titles: Record<NoticeChannel, string>;
12
+ bodies: Record<NoticeChannel, string>;
13
+ attachments: Record<NoticeChannel, NoticeAttachment[]>;
14
+ }
15
+ interface NoticeWritingTemplateProps extends Omit<ComponentPropsWithoutRef<'div'>, 'onChange'> {
16
+ channel?: NoticeChannel;
17
+ defaultChannel?: NoticeChannel;
18
+ onChannelChange?: (channel: NoticeChannel) => void;
19
+ onChange?: (values: NoticeWritingValues) => void;
20
+ showTabs?: boolean;
21
+ tabVariant?: 'fill' | 'hug';
22
+ enabledChannels?: NoticeChannel[];
23
+ mergeFields?: (string | {
24
+ label: string;
25
+ value: string;
26
+ })[];
27
+ defaultBodies?: Partial<Record<NoticeChannel, string>>;
28
+ showAttach?: boolean;
29
+ maxAttachments?: number;
30
+ attachGuide?: string;
31
+ attachAccept?: string;
32
+ editorMinHeight?: number | string;
33
+ editorMaxHeight?: number | string;
34
+ editorReadOnly?: boolean;
35
+ editorPlaceholder?: string;
36
+ }
37
+ export declare function NoticeWritingTemplate({ channel: channelProp, defaultChannel, onChannelChange, onChange, showTabs, tabVariant, enabledChannels, mergeFields, defaultBodies, showAttach, maxAttachments, attachGuide, attachAccept, editorMinHeight, editorMaxHeight, editorReadOnly, editorPlaceholder, className, ...props }: NoticeWritingTemplateProps): import("react").JSX.Element;
38
+ export {};
@@ -0,0 +1,27 @@
1
+ import { ComponentPropsWithoutRef } from 'react';
2
+ export interface PaginationProps extends Omit<ComponentPropsWithoutRef<'div'>, 'onChange'> {
3
+ /** 현재 페이지(1-base) — controlled */
4
+ page?: number;
5
+ /** uncontrolled 초기값 */
6
+ defaultPage?: number;
7
+ /** (page: number) => void */
8
+ onChange?: (page: number) => void;
9
+ /** 총 항목 수 — totalPages 미지정 시 페이지 수 계산에 사용 */
10
+ totalCount?: number;
11
+ /** 총 페이지 수(지정 시 totalCount/pageSize보다 우선) */
12
+ totalPages?: number;
13
+ /** 페이지당 행 수 — controlled */
14
+ pageSize?: number;
15
+ /** 페이지당 행 수 초기값(옵션 5/10/20/50 중 기본 10) */
16
+ defaultPageSize?: number;
17
+ /** (size: number) => void */
18
+ onPageSizeChange?: (size: number) => void;
19
+ pageSizeOptions?: number[];
20
+ /** 번호 노출 개수(윈도우) — 보통 10 또는 5 */
21
+ maxButtons?: number;
22
+ /** 좌측 '총 N개' 표시 */
23
+ showTotal?: boolean;
24
+ /** 우측 '페이지 행' Select 표시 */
25
+ showPageSize?: boolean;
26
+ }
27
+ export declare function Pagination({ page, defaultPage, onChange, totalCount, totalPages, pageSize, defaultPageSize, onPageSizeChange, pageSizeOptions, maxButtons, showTotal, showPageSize, className, ...props }: PaginationProps): import("react").JSX.Element;
@@ -0,0 +1,16 @@
1
+ import { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ export interface PopoverProps extends Omit<ComponentPropsWithoutRef<'span'>, 'children'> {
3
+ /** 트리거 ReactNode (예: <Button>) — 클릭 시 패널 토글 */
4
+ trigger?: ReactNode;
5
+ /** 패널 내용: ReactNode 또는 (close) => ReactNode */
6
+ children?: ReactNode | ((close: () => void) => ReactNode);
7
+ /** 'auto' | '{top|bottom|auto}-{left|right|auto}' (예: 'bottom-right', 'auto-right'=상하 자동·우측 고정) */
8
+ placement?: string;
9
+ /** 패널 너비: 숫자(px)/CSS 길이. 미지정 시 트리거 너비 */
10
+ menuWidth?: number | string;
11
+ /** controlled (선택) */
12
+ open?: boolean;
13
+ onOpenChange?: (open: boolean) => void;
14
+ disabled?: boolean;
15
+ }
16
+ export declare function Popover({ trigger, children, placement, menuWidth, open: openProp, onOpenChange, disabled, className, ...props }: PopoverProps): import("react").JSX.Element;
@@ -0,0 +1,54 @@
1
+ import { LucideIcon } from 'lucide-react';
2
+ import { ChangeEvent, ComponentPropsWithoutRef, ReactNode } from 'react';
3
+ export interface PopoverMenuProps extends ComponentPropsWithoutRef<'div'> {
4
+ /** 'none'=없음 | 'search'=검색바(SearchBar) | 'input'=일반 텍스트 입력(Input). 셋 중 하나만 선택. */
5
+ topArea?: 'none' | 'search' | 'input';
6
+ searchValue?: string;
7
+ onSearchChange?: (e: ChangeEvent<HTMLInputElement>) => void;
8
+ searchPlaceholder?: string;
9
+ /** 검색 input에 전달(autoFocus·onKeyDown 등) */
10
+ searchInputProps?: ComponentPropsWithoutRef<'input'>;
11
+ inputValue?: string;
12
+ onInputChange?: (e: ChangeEvent<HTMLInputElement>) => void;
13
+ inputPlaceholder?: string;
14
+ /** Input의 inputProps로 전달(autoFocus 등) */
15
+ inputProps?: ComponentPropsWithoutRef<'input'>;
16
+ /** 하단 푸터 영역 표시 여부 */
17
+ footer?: boolean;
18
+ /** 푸터 좌측 범용 슬롯 — 문자열(자동 텍스트 스타일) 또는 임의 노드 */
19
+ footerStart?: ReactNode;
20
+ /** 좌측 텍스트(선택 개수·가이드 문구 등) */
21
+ footerText?: ReactNode;
22
+ /** 좌측 전체 선택 체크박스 */
23
+ footerCheckbox?: boolean;
24
+ footerChecked?: boolean;
25
+ onFooterCheckChange?: (e: ChangeEvent<HTMLInputElement>) => void;
26
+ footerCheckLabel?: ReactNode;
27
+ /** 좌측 초기화 언더라인 버튼 */
28
+ footerReset?: boolean;
29
+ onFooterReset?: () => void;
30
+ footerResetLabel?: ReactNode;
31
+ footerResetIcon?: LucideIcon;
32
+ cancelText?: ReactNode;
33
+ onCancel?: () => void;
34
+ confirmText?: ReactNode;
35
+ onConfirm?: () => void;
36
+ /** 확인 버튼 variant ('fill' | 'line' | 'ghost') */
37
+ confirmVariant?: 'fill' | 'line' | 'ghost';
38
+ confirmDisabled?: boolean;
39
+ confirmLoading?: boolean;
40
+ showCancel?: boolean;
41
+ showConfirm?: boolean;
42
+ /** 푸터 버튼 그룹을 fill(균등 분할 전체폭)로 — 좌측 슬롯 없이 버튼만 꽉 채움 */
43
+ footerButtonsFill?: boolean;
44
+ width?: number | string;
45
+ }
46
+ export declare function PopoverMenu({ children, topArea, searchValue, onSearchChange, searchPlaceholder, searchInputProps, inputValue, onInputChange, inputPlaceholder, inputProps, footer, footerStart, footerText, footerCheckbox, footerChecked, onFooterCheckChange, footerCheckLabel, footerReset, onFooterReset, footerResetLabel, footerResetIcon: FooterResetIcon, cancelText, onCancel, confirmText, onConfirm, confirmVariant, confirmDisabled, confirmLoading, showCancel, showConfirm, footerButtonsFill, width, className, ...props }: PopoverMenuProps): import("react").JSX.Element;
47
+ export declare function PopoverMenuColumns({ children, className, ...props }: ComponentPropsWithoutRef<'div'>): import("react").JSX.Element;
48
+ export declare function PopoverMenuColumn({ children, className, ...props }: ComponentPropsWithoutRef<'div'>): import("react").JSX.Element;
49
+ interface PopoverMenuSectionProps extends Omit<ComponentPropsWithoutRef<'div'>, 'title'> {
50
+ title?: ReactNode;
51
+ grow?: boolean;
52
+ }
53
+ export declare function PopoverMenuSection({ title, children, grow, className, ...props }: PopoverMenuSectionProps): import("react").JSX.Element;
54
+ export {};
@@ -0,0 +1,33 @@
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 RadioProps extends ComponentPropsWithoutRef<'input'> {
11
+ label?: ReactNode;
12
+ }
13
+ export declare function Radio({ checked, defaultChecked, onChange, disabled, label, name, value, className, ...props }: RadioProps): import("react").JSX.Element;
14
+ interface RadioGroupProps extends Omit<ComponentPropsWithoutRef<'div'>, 'onChange'> {
15
+ items?: OptionItem[];
16
+ value?: string;
17
+ defaultValue?: string;
18
+ onChange?: (value: string) => void;
19
+ name?: string;
20
+ direction?: 'vertical' | 'horizontal';
21
+ gap?: keyof typeof GAP_STYLE;
22
+ disabled?: boolean;
23
+ }
24
+ export declare function RadioGroup({ items, // [{ value, label, disabled }]
25
+ value, // controlled 선택값
26
+ defaultValue, // uncontrolled 초기 선택값
27
+ onChange, // (value) => void
28
+ name, // 라디오 그룹 name (미지정 시 자동 생성)
29
+ direction, // 'vertical' | 'horizontal'
30
+ gap, // 간격 토큰 키 — 기본 '7'(16px)
31
+ disabled, // 그룹 전체 비활성
32
+ className, ...props }: RadioGroupProps): import("react").JSX.Element;
33
+ export {};
@@ -0,0 +1,53 @@
1
+ import { ComponentPropsWithoutRef } from 'react';
2
+ import { ConditionTab, FormulaNode, IndividualSetting, OptionItem } from './formulaFunctions';
3
+ export interface ScreeningCard {
4
+ id: string;
5
+ name: string;
6
+ conditionTabs?: ConditionTab[];
7
+ conditionOptionsByTab?: Record<string, OptionItem[]>;
8
+ conditionOptions?: OptionItem[];
9
+ conditionPlaceholder?: string;
10
+ condition?: {
11
+ tab?: string | null;
12
+ option?: string | null;
13
+ items?: string[];
14
+ } | null;
15
+ score?: {
16
+ type: string;
17
+ points?: string;
18
+ } | IndividualSetting | null;
19
+ }
20
+ type ScreeningCardSnapshot = Pick<ScreeningCard, 'id' | 'name' | 'condition' | 'score'>;
21
+ interface ScreeningZone {
22
+ id: string;
23
+ name: string;
24
+ formulas: FormulaNode[];
25
+ }
26
+ interface ScreeningCardMenuItem {
27
+ name: string;
28
+ conditionTabs?: ConditionTab[];
29
+ conditionOptionsByTab?: Record<string, OptionItem[]>;
30
+ conditionOptions?: OptionItem[];
31
+ conditionPlaceholder?: string;
32
+ }
33
+ interface ScreeningCardMenuSection {
34
+ title: string;
35
+ items: ScreeningCardMenuItem[];
36
+ }
37
+ export interface ScreeningBuilderTemplateHandle {
38
+ getCards: () => ScreeningCardSnapshot[];
39
+ addCard: (card: ScreeningCard) => void;
40
+ getFormulas: () => ScreeningZone[];
41
+ }
42
+ interface ScreeningBuilderTemplateProps extends Omit<ComponentPropsWithoutRef<'div'>, 'onChange'> {
43
+ defaultCards?: ScreeningCard[];
44
+ onChange?: (cards: ScreeningCardSnapshot[]) => void;
45
+ onFormulaChange?: (formulas: ScreeningZone[]) => void;
46
+ cardWidth?: number | string;
47
+ formulaArea?: boolean;
48
+ onAddCard?: () => void;
49
+ cardMenu?: ScreeningCardMenuSection[][];
50
+ boxHeight?: number;
51
+ }
52
+ export declare const ScreeningBuilderTemplate: import('react').ForwardRefExoticComponent<ScreeningBuilderTemplateProps & import('react').RefAttributes<ScreeningBuilderTemplateHandle>>;
53
+ export {};
@@ -0,0 +1,56 @@
1
+ import { ComponentPropsWithoutRef, CSSProperties, HTMLAttributes } from 'react';
2
+ import { ConditionTab, IndividualSetting, OptionItem } from './formulaFunctions';
3
+ export interface ScreeningConditionValue {
4
+ tab?: string | null;
5
+ option?: string | null;
6
+ items?: string[];
7
+ }
8
+ export type ScreeningScoreValue = {
9
+ type: string;
10
+ points?: string;
11
+ } | IndividualSetting;
12
+ interface ScreeningConditionCardProps extends ComponentPropsWithoutRef<'div'> {
13
+ cardName?: string;
14
+ conditionTabs?: ConditionTab[];
15
+ conditionOptionsByTab?: Record<string, OptionItem[]>;
16
+ conditionOptions?: OptionItem[];
17
+ conditionValue?: ScreeningConditionValue | null;
18
+ onConditionChange?: (value: ScreeningConditionValue) => void;
19
+ conditionPlaceholder?: string;
20
+ scoreValue?: ScreeningScoreValue | null;
21
+ onScoreChange?: (value: ScreeningScoreValue) => void;
22
+ scorePlaceholder?: string;
23
+ onDelete?: () => void;
24
+ dragging?: boolean;
25
+ dragHandleProps?: HTMLAttributes<HTMLSpanElement>;
26
+ width?: number | string;
27
+ }
28
+ export declare function ScreeningConditionCard({ cardName, conditionTabs, conditionOptionsByTab, conditionOptions, conditionValue, onConditionChange, conditionPlaceholder, scoreValue, onScoreChange, scorePlaceholder, onDelete, dragging, dragHandleProps, width, className, ...props }: ScreeningConditionCardProps): import("react").JSX.Element;
29
+ interface ConditionSettingMenuProps {
30
+ tabs?: ConditionTab[];
31
+ optionsByTab?: Record<string, OptionItem[]>;
32
+ options?: OptionItem[];
33
+ initialTab?: string | null;
34
+ initialOption?: string | null;
35
+ initialItems?: string[] | null;
36
+ onSave?: (v: ScreeningConditionValue) => void;
37
+ onCancel?: () => void;
38
+ onTabNext?: () => void;
39
+ onSkip?: () => void;
40
+ style?: CSSProperties;
41
+ }
42
+ export declare function ConditionSettingMenu({ tabs, optionsByTab, options, initialTab, initialOption, initialItems, onSave, onCancel, onTabNext, onSkip, style, }: ConditionSettingMenuProps): import("react").JSX.Element;
43
+ interface ScoreSettingMenuProps {
44
+ initialType?: string | null;
45
+ initialPoints?: string;
46
+ disablePoints?: boolean;
47
+ onSave?: (v: {
48
+ type: string;
49
+ points?: string;
50
+ }) => void;
51
+ onCancel?: () => void;
52
+ onTabNext?: () => void;
53
+ onSkip?: () => void;
54
+ }
55
+ export declare function ScoreSettingMenu({ initialType, initialPoints, disablePoints, onSave, onCancel, onTabNext, onSkip, }: ScoreSettingMenuProps): import("react").JSX.Element;
56
+ export {};
@@ -0,0 +1,17 @@
1
+ import { FormulaCatalog, FormulaNode } from './formulaFunctions';
2
+ type FormulaVariant = 'formula' | 'natural';
3
+ export interface ScreeningFormulaProps {
4
+ node: FormulaNode;
5
+ root?: boolean;
6
+ checked?: boolean;
7
+ onCheckChange?: (checked: boolean) => void;
8
+ onChange?: (nextNode: FormulaNode) => void;
9
+ onDelete?: () => void;
10
+ getDropLeaf?: () => FormulaNode | null;
11
+ catalog?: FormulaCatalog | null;
12
+ variant?: FormulaVariant;
13
+ inIf?: boolean;
14
+ className?: string;
15
+ }
16
+ export declare function ScreeningFormula({ node, root, checked, onCheckChange, onChange, onDelete, getDropLeaf, catalog, variant, inIf, className, }: ScreeningFormulaProps): import("react").JSX.Element;
17
+ export {};
@@ -0,0 +1,10 @@
1
+ import { IndividualSetting, OptionItem } from './formulaFunctions';
2
+ interface ScreeningIndividualSettingModalProps {
3
+ items?: OptionItem[];
4
+ value?: IndividualSetting | null;
5
+ fitnessOnly?: boolean;
6
+ onClose: () => void;
7
+ onConfirm?: (payload: IndividualSetting) => void;
8
+ }
9
+ export declare function ScreeningIndividualSettingModal({ items, value, fitnessOnly, onClose, onConfirm, }: ScreeningIndividualSettingModalProps): import("react").JSX.Element;
10
+ export {};
@@ -0,0 +1,30 @@
1
+ import { ComponentPropsWithoutRef, UIEvent } from 'react';
2
+ declare const THUMB_COLORS: {
3
+ default: {
4
+ base: string;
5
+ active: string;
6
+ };
7
+ light: {
8
+ base: string;
9
+ active: string;
10
+ };
11
+ };
12
+ export interface ScrollAreaProps extends ComponentPropsWithoutRef<'div'> {
13
+ maxHeight?: number | string;
14
+ horizontal?: boolean;
15
+ /** 'default'(밝은 배경) | 'light'(어두운 배경 위 흰색 thumb) */
16
+ variant?: keyof typeof THUMB_COLORS;
17
+ /** (선택) 내부 스크롤 요소를 넘겨받는 콜백 — 부모가 scrollTop 등을 직접 제어할 때 */
18
+ onViewport?: (el: HTMLDivElement | null) => void;
19
+ /** (선택) 스크롤 이벤트 패스스루(내부 thumb 갱신과 함께 호출) */
20
+ onScroll?: (e: UIEvent<HTMLDivElement>) => void;
21
+ /**
22
+ * (선택) 세로 thumb를 자신의 viewport 대신 이 요소의 세로 스크롤에 연동.
23
+ * 가로 스크롤 콘텐츠 '안'에 세로 스크롤 영역이 중첩될 때(표 바디 등) 세로 thumb를
24
+ * 가로 스크롤을 안 받는 이 컴포넌트(고정 폭)에서 그려 항상 보이게 한다(2026-07-06).
25
+ */
26
+ vScrollEl?: HTMLElement | null;
27
+ contentClassName?: string;
28
+ }
29
+ export declare function ScrollArea({ children, maxHeight, horizontal, variant, onViewport, onScroll, vScrollEl, className, contentClassName, ...props }: ScrollAreaProps): import("react").JSX.Element;
30
+ export {};
@@ -0,0 +1,14 @@
1
+ import { ChangeEvent, ComponentPropsWithoutRef } from 'react';
2
+ interface SearchBarProps extends Omit<ComponentPropsWithoutRef<'div'>, 'onChange' | 'onSubmit'> {
3
+ value?: string;
4
+ defaultValue?: string;
5
+ onChange?: (e: ChangeEvent<HTMLInputElement>) => void;
6
+ onSubmit?: (value: string) => void;
7
+ placeholder?: string;
8
+ disabled?: boolean;
9
+ width?: number | string;
10
+ inputProps?: ComponentPropsWithoutRef<'input'>;
11
+ }
12
+ export declare function SearchBar({ value, defaultValue, onChange, onSubmit, placeholder, disabled, width, // 너비: 숫자(px) 또는 CSS 길이 문자열('100%' 등). 미지정 시 200px
13
+ className, inputProps, ...props }: SearchBarProps): import("react").JSX.Element;
14
+ export {};
@@ -0,0 +1,46 @@
1
+ import { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ import { LucideIcon } from 'lucide-react';
3
+ declare const GAP_STYLE: {
4
+ '3': string;
5
+ '4': string;
6
+ '5': string;
7
+ '6': string;
8
+ '7': string;
9
+ };
10
+ interface SegmentControlButtonProps extends ComponentPropsWithoutRef<'button'> {
11
+ size?: '32' | '24';
12
+ selected?: boolean;
13
+ leftIcon?: LucideIcon | null;
14
+ rightIcon?: LucideIcon | null;
15
+ icon?: LucideIcon | null;
16
+ }
17
+ export declare function SegmentControlButton({ children, size, // '32' | '24'
18
+ selected, disabled, leftIcon: LeftIcon, rightIcon: RightIcon, icon: Icon, // 아이콘 전용(텍스트 없음)
19
+ onClick, className, ...props }: SegmentControlButtonProps): import("react").JSX.Element;
20
+ interface SegmentControlItem {
21
+ value: string | number;
22
+ label?: ReactNode;
23
+ leftIcon?: LucideIcon;
24
+ rightIcon?: LucideIcon;
25
+ icon?: LucideIcon;
26
+ disabled?: boolean;
27
+ ariaLabel?: string;
28
+ }
29
+ interface SegmentControlGroupProps extends Omit<ComponentPropsWithoutRef<'div'>, 'onChange'> {
30
+ items?: SegmentControlItem[];
31
+ value?: string | number;
32
+ defaultValue?: string | number;
33
+ onChange?: (value: string | number) => void;
34
+ size?: '32' | '24';
35
+ gap?: keyof typeof GAP_STYLE;
36
+ disabled?: boolean;
37
+ }
38
+ export declare function SegmentControlGroup({ items, // [{ value, label, leftIcon, rightIcon, icon, disabled, ariaLabel }]
39
+ value, // controlled 선택값
40
+ defaultValue, // uncontrolled 초기 선택값
41
+ onChange, // (value) => void
42
+ size, // '32' | '24' — 모든 버튼에 적용
43
+ gap, // 간격 토큰 키 — 기본 '5'(8px)
44
+ disabled, // 그룹 전체 비활성
45
+ className, ...props }: SegmentControlGroupProps): import("react").JSX.Element;
46
+ export {};
@@ -0,0 +1,20 @@
1
+ import { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ interface SegmentedTabItem<V extends string | number> {
3
+ value: V;
4
+ label: ReactNode;
5
+ disabled?: boolean;
6
+ }
7
+ interface SegmentedTabsProps<V extends string | number> extends Omit<ComponentPropsWithoutRef<'div'>, 'onChange'> {
8
+ items?: SegmentedTabItem<V>[];
9
+ value?: V | null;
10
+ defaultValue?: V;
11
+ onChange?: (value: V) => void;
12
+ width?: number | string;
13
+ }
14
+ export declare function SegmentedTabs<V extends string | number>({ items, // [{ value, label, disabled? }] — 2개 이상, 개수 가변
15
+ value, // controlled 선택값
16
+ defaultValue, // uncontrolled 초기 선택값
17
+ onChange, // (value) => void
18
+ width, // 컨테이너 너비 — 숫자(px)/CSS 길이. 미지정 시 부모 전체 폭(w-full)
19
+ className, ...props }: SegmentedTabsProps<V>): import("react").JSX.Element;
20
+ export {};