@scglab/admin-ui 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +100 -0
- package/dist/index.cjs +52 -30
- package/dist/index.cjs.map +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +57 -30
- package/dist/index.d.ts +57 -30
- package/dist/index.js +52 -30
- package/dist/index.js.map +1 -1
- package/dist/styles/index.css +55 -40
- package/package.json +20 -8
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/theme/index.ts","../src/components/ui/Text/Text.tsx","../src/utils/helperUtils.ts","../src/components/ui/BorderRadiusBox/BorderRadiusBox.tsx","../src/components/ui/Tooltip/Tooltip.tsx","../src/assets/colorIcon/ColorIcTagClose.tsx","../src/assets/colorIcon/ColorIcTooltip.tsx","../src/components/ui/BulletText/BulletText.tsx","../src/components/ui/Button/Button.tsx","../src/components/ui/Checkbox/Checkbox.tsx","../src/assets/colorIcon/ColorIcCheckDim.tsx","../src/components/ui/Divider/Divider.tsx","../src/components/ui/EmailInput/EmailInput.tsx","../src/components/ui/Stack/Stack.tsx","../src/components/ui/RequiredDot/RequiredDot.tsx","../src/components/ui/Label/Label.tsx","../src/components/ui/Input/Input.tsx","../src/components/ui/SelectBox/SelectBox.tsx","../src/assets/colorIcon/ColorIcArrow.tsx","../src/components/ui/MultiSelectCheckbox/MultiSelectCheckbox.tsx","../src/assets/colorIcon/ColorIcFormArrow.tsx","../src/components/ui/Paging/Paging.tsx","../src/components/ui/Radio/Radio.tsx","../src/components/ui/Table/Table.tsx","../src/constants/common.ts","../src/components/ui/Table/TableTop.tsx","../src/components/ui/Table/CommonTable.tsx","../src/components/ui/Tag/Tag.tsx","../src/components/ui/TagInput/TagInput.tsx","../src/components/ui/TextArea/TextArea.tsx","../src/components/ui/TextButton/TextButton.tsx","../src/components/ui/Toggle/Toggle.tsx","../src/components/ui/ToolTipBox/ToolTipBox.tsx","../src/assets/colorIcon/ColorIcTooltipArrow.tsx","../src/assets/colorIcon/ColorIcTooltipBlue.tsx","../src/components/ui/TooltipInfo/TooltipInfo.tsx","../src/assets/colorIcon/ColorIcInfo.tsx","../src/assets/colorIcon/ColorIcWarning.tsx","../src/components/ui/WarningBox/WarningBox.tsx"],"sourcesContent":["// Components\nexport { Text } from './components/ui/Text';\nexport type { TextProps } from './components/ui/Text';\n\nexport { BorderRadiusBox } from './components/ui/BorderRadiusBox';\nexport type { BorderRadiusBoxProps } from './components/ui/BorderRadiusBox';\n\nexport { BulletText } from './components/ui/BulletText';\nexport type { BulletTextProps } from './components/ui/BulletText';\n\nexport { Button } from './components/ui/Button';\nexport type { ButtonProps } from './components/ui/Button';\n\nexport { Checkbox } from './components/ui/Checkbox';\nexport type { CheckboxProps } from './components/ui/Checkbox';\n\nexport { Divider } from './components/ui/Divider';\nexport type { DividerProps } from './components/ui/Divider';\n\nexport { EmailInput } from './components/ui/EmailInput';\nexport type { EmailInputProps } from './components/ui/EmailInput';\n\nexport { Input } from './components/ui/Input';\nexport type { InputProps } from './components/ui/Input';\n\nexport { Label } from './components/ui/Label';\nexport type { LabelProps } from './components/ui/Label';\n\nexport { MultiSelectCheckbox } from './components/ui/MultiSelectCheckbox';\nexport type { MultiSelectCheckboxProps } from './components/ui/MultiSelectCheckbox';\n\nexport { Paging } from './components/ui/Paging';\nexport type { PagingProps } from './components/ui/Paging';\n\nexport { Radio } from './components/ui/Radio';\nexport type { RadioProps } from './components/ui/Radio';\n\nexport { RequiredDot } from './components/ui/RequiredDot';\n\nexport { SelectBox } from './components/ui/SelectBox';\nexport type { SelectBoxProps } from './components/ui/SelectBox';\n\nexport { Stack } from './components/ui/Stack';\nexport type { StackProps } from './components/ui/Stack';\n\nexport { Table, CommonTable, TableTop } from './components/ui/Table';\nexport type { TableProps, CommonTableProps, TableTopProps } from './components/ui/Table';\nexport type { ColumnDef, ColumnType, ColumnAlign } from './types/table';\n\nexport { Tag } from './components/ui/Tag';\nexport type { TagProps } from './components/ui/Tag';\n\nexport { TagInput } from './components/ui/TagInput';\n\nexport { TextArea } from './components/ui/TextArea';\nexport type { TextAreaProps } from './components/ui/TextArea';\n\nexport { TextButton } from './components/ui/TextButton';\nexport type { TextButtonProps } from './components/ui/TextButton';\n\nexport { Toggle } from './components/ui/Toggle';\nexport type { ToggleProps } from './components/ui/Toggle';\n\nexport { Tooltip } from './components/ui/Tooltip';\nexport type { TooltipProps } from './components/ui/Tooltip';\n\nexport { ToolTipBox } from './components/ui/ToolTipBox';\nexport type { ToolTipBoxProps } from './components/ui/ToolTipBox';\n\nexport { TooltipInfo } from './components/ui/TooltipInfo';\nexport type { TooltipInfoProps } from './components/ui/TooltipInfo';\n\nexport { WarningBox } from './components/ui/WarningBox';\nexport type { WarningBoxProps } from './components/ui/WarningBox';\n\n// Theme - 테마 상수와 타입들을 모두 export\nexport * from './theme';\n\n// Styles\nimport './styles/global.scss';","// import { toRemFunction } from \"@/utils/helperUtils\";\nconst toRemFunction = (value: number) => `${value / 14}rem`;\nexport const fontSize = {\n h1: toRemFunction(60),\n h2: toRemFunction(48),\n h3: toRemFunction(40),\n h4: toRemFunction(30),\n h5: toRemFunction(28),\n h6: toRemFunction(24),\n body18: toRemFunction(18),\n body16: toRemFunction(16),\n body14: toRemFunction(14),\n body12: toRemFunction(12),\n body10: toRemFunction(10),\n};\nexport const lineHeightSize = {\n h1: toRemFunction(60),\n h2: toRemFunction(48),\n h3: toRemFunction(40),\n h4: toRemFunction(40),\n h5: toRemFunction(40),\n h6: toRemFunction(40),\n body18: toRemFunction(24),\n body16: toRemFunction(24),\n body14: toRemFunction(22),\n body12: toRemFunction(18),\n body10: toRemFunction(14),\n};\n\nexport const colors = {\n white: \"#ffffff\",\n black: \"#000000\",\n gray: \"#6B7280\",\n primary: \"#3083FF\", // 기본 primary 색상\n primary10: \"#EAF3FF\",\n primary5: \"#F5F9FF\",\n primary3: \"#F9FBFF\",\n primary3Border: \"#3083FF4D\",\n primaryText: \"#111928\",\n text: \"#637381\",\n textLight: \"#F3F4F6\",\n secondary: \"#18FF82\", // 기본 secondary 색상\n secondaryText: \"#8899A8\",\n stroke: \"#DFE4EA\",\n line: \"#E7ECF3\",\n dark2: \"#1F2A37\",\n dark3: \"#374151\",\n dark4: \"#4B5563\",\n dark5: \"#6B7280\",\n dark6: \"#9CA3AF\",\n dark7: \"#D1D5DB\",\n dark8: \"#E5E7EB\",\n gray1: \"#F9FAFB\",\n gray2: \"#F3F4F6\",\n gray3: \"#E5E7EB\",\n gray4: \"#DEE2E6\",\n gray5: \"#CED4DA\",\n gray6: \"#CED4DA\",\n gray7: \"#CED4DA\",\n green: \"#016630\",\n greenLight: \"#DCFCE7\",\n red: \"#9F0712\",\n red5: \"#FEF6F6\",\n redLight: \"#FFE2E2\",\n orange: \"#9F2D00\",\n orangeLight: \"#FFEDD4\",\n blue: \"#193CB8\",\n blueLight: \"#DBEAFE\",\n warning: \"#F15050\",\n warningLight: \"#FEF6F6\",\n} as const;\n\nexport const fontWeight = {\n regular: \"400\",\n semibold: \"500\",\n bold: \"600\",\n} as const;\n\nexport const directions = {\n row: \"flex-row\",\n col: \"flex-col\",\n grid: \"grid\",\n} as const;\n\nexport const justifies = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n around: \"justify-around\",\n evenly: \"justify-evenly\",\n} as const;\n\nexport const justifySelfs = {\n start: \"justify-self-start\",\n center: \"justify-self-center\",\n end: \"justify-self-end\",\n stretch: \"justify-self-stretch\",\n} as const;\n\nexport const aligns = {\n baseline: \"items-baseline\",\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n} as const;\n\nexport const alignSelfs = {\n baseline: \"self-baseline\",\n auto: \"self-auto\",\n start: \"self-start\",\n center: \"self-center\",\n end: \"self-end\",\n stretch: \"self-stretch\",\n} as const;\n\nexport type ButtonVariantType =\n | \"primary\"\n | \"secondary\"\n | \"lower\"\n | \"neutral\"\n | \"neutralGray\"\n | \"danger\"\n | \"blue\"\n | \"orange\"\n | \"green\";\n\nexport type ColorType = keyof typeof colors;\nexport type FontSizeType = keyof typeof fontSize;\nexport type FontWeightType = keyof typeof fontWeight;\nexport type DirectionType = keyof typeof directions;\nexport type JustifyType = keyof typeof justifies;\nexport type JustifySelfType = keyof typeof justifySelfs;\nexport type AlignType = keyof typeof aligns;\nexport type AlignSelfType = keyof typeof alignSelfs;\n","import React from \"react\";\nimport {\n AlignType,\n JustifyType,\n ColorType,\n FontSizeType,\n fontSize,\n FontWeightType,\n fontWeight,\n lineHeightSize,\n colors,\n} from \"../../../theme\";\n\n// Tailwind 클래스명을 CSS 속성값으로 매핑\nconst justifyContentMap: Record<JustifyType, React.CSSProperties['justifyContent']> = {\n start: \"flex-start\",\n center: \"center\",\n end: \"flex-end\",\n between: \"space-between\",\n around: \"space-around\",\n evenly: \"space-evenly\",\n};\n\nconst alignItemsMap: Record<AlignType, React.CSSProperties['alignItems']> = {\n baseline: \"baseline\",\n start: \"flex-start\",\n center: \"center\",\n end: \"flex-end\",\n stretch: \"stretch\",\n};\n\nexport interface TextProps extends React.HTMLAttributes<HTMLDivElement> {\n id?: string;\n children: React.ReactNode;\n size?: FontSizeType;\n color?: ColorType;\n className?: string;\n fontWeight?: FontWeightType;\n justify?: JustifyType;\n align?: AlignType;\n textDecoration?: \"none\" | \"underline\" | \"line-through\";\n style?: React.CSSProperties;\n}\n\nexport default function Text({\n id,\n children,\n size = \"body14\",\n color = \"primaryText\",\n justify = \"start\",\n align = \"start\",\n className = \"\",\n fontWeight: fontWeightProp = \"regular\",\n textDecoration = \"none\",\n style,\n ...props\n}: TextProps) {\n const styles: React.CSSProperties = {\n fontSize: fontSize[size],\n lineHeight: lineHeightSize[size],\n fontWeight: fontWeight[fontWeightProp],\n color: colors[color],\n display: \"flex\",\n justifyContent: justifyContentMap[justify],\n alignItems: alignItemsMap[align],\n textDecoration,\n ...style, // 사용자 정의 style을 마지막에 배치하여 오버라이드 가능하게\n };\n\n return (\n <div id={id} style={styles} className={className} {...props}>\n {children}\n </div>\n );\n}\n","import moment from \"moment\";\nimport { OriginalObject, SelectOption } from \"../types/common\";\n\nexport const toRemFunction = (px: number) => {\n return `${px / 14}rem`;\n};\n\nexport const formatNumberWithComma = (num: number | string) => {\n if (!num) return \"0\";\n const numStr = num.toString().replace(/[^\\d]/g, \"\");\n return numStr.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n};\n\n/**************************************************\n * 객체 배열을 SelectOption 타입으로 변환\n **************************************************/\n\nexport const transformToSelectOptions = <T extends OriginalObject>(\n data: T[]\n) => {\n if (!Array.isArray(data)) {\n return [];\n }\n return data.map((item) => ({\n ...item,\n value: item.id,\n label: item.partnerName ? item.partnerName : item.name,\n })) as SelectOption[];\n};\n\n/**\n * HTML 콘텐츠에서 p 태그 안의 div 태그를 span으로 변환하여 DOM nesting 에러를 방지합니다.\n * @param html HTML 문자열\n * @returns 정리된 HTML 문자열\n */\nexport const sanitizeHtmlForParagraph = (html: string): string => {\n if (!html) return html;\n\n // p 태그 안의 div 태그를 span으로 변환\n return html.replace(\n /<p([^>]*)>([\\s\\S]*?)<\\/p>/gi,\n (match, pAttrs, content) => {\n // p 태그 안의 div 태그를 span으로 변환\n const sanitizedContent = content\n .replace(/<div([^>]*)>/gi, \"<span$1>\")\n .replace(/<\\/div>/gi, \"</span>\");\n return `<p${pAttrs}>${sanitizedContent}</p>`;\n }\n );\n};\n\n/**************************************************\n * 날짜 포맷 변경 (YYYY.MM.DD)\n **************************************************/\n\nexport const formatDate = (date?: string | null) => {\n return date ? moment(date).format(\"YYYY.MM.DD\") : \"\";\n};\n\n/**************************************************\n * 날짜 포맷 변경 (YYYY.MM.DD 오전 HH:mm:ss)\n **************************************************/\n\nexport const formatDateWithTime = (date?: string | null) => {\n // a 를 오전 / 오후 로 구분하여 표시\n const hours = moment(date).format(\"HH\");\n const minutes = moment(date).format(\"mm\");\n const ampm = parseInt(hours) < 12 ? \"오전\" : \"오후\";\n const hourstxt =\n parseInt(hours) > 12 ? parseInt(hours) - 12 : parseInt(hours);\n return date\n ? `${moment(date).format(\"YYYY.MM.DD\")} ${ampm} ${hourstxt}:${minutes\n .toString()\n .padStart(2, \"0\")}`\n : \"\";\n};\n\n/**************************************************\n * 날짜 시간 포맷 변경 (YYYY-MM-DD HH:mm:ss)\n **************************************************/\n\nexport const formatDateTime = (date?: string | null) => {\n return date ? moment(date).format(\"YYYY-MM-DD HH:mm:ss\") : \"\";\n};\n\n/**************************************************\n * 리퀘스트 날짜 시간 포맷 변경 (YYYY-MM-DD HH:mm:ss)\n **************************************************/\nexport const requestFormatDateTime = (\n dateTimeStr: string,\n isEndDate: boolean = false\n): string => {\n if (!dateTimeStr) return dateTimeStr;\n const date = dateTimeStr.split(\"T\")[0];\n return isEndDate ? `${date}T23:59:59` : `${date}T00:00:00`;\n};\n\n/**************************************************\n * 로컬 시간대 기준으로 ISO 문자열 변환 (타임존 문제 해결)\n **************************************************/\n\nexport const toLocalISOString = (date: Date | null | undefined): string => {\n if (!date) return \"\";\n\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n const seconds = String(date.getSeconds()).padStart(2, \"0\");\n\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`;\n};\n\n/**************************************************\n * 로컬 시간대 기준으로 ISO 문자열 변환 (endDate용 - 23:59:59)\n **************************************************/\n\nexport const toLocalISOStringEndOfDay = (\n date: Date | null | undefined\n): string => {\n if (!date) return \"\";\n\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(23).padStart(2, \"0\");\n const minutes = String(59).padStart(2, \"0\");\n const seconds = String(59).padStart(2, \"0\");\n\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.999Z`;\n};\n\n/**************************************************\n * 임시 기본 홈 페이지 이동 제어 함수\n **************************************************/\n\nexport const handleDefaultHomePage = () => {\n // 로컬스토리지에 저장된 유저정보 가져오기\n\n const userInfo = localStorage.getItem(\"safetyUserInfo\");\n if (userInfo) {\n const user = JSON.parse(userInfo);\n if (user.typeOfRole === \"MANAGER\") {\n // return \"/dashboard\";\n return \"/inspection/result\";\n } else if (user.typeOfRole === \"ADMIN\") {\n return \"/user/management\";\n } else {\n return \"/inspection/setting\";\n }\n }\n return \"/dashboard\";\n};\n\n/**************************************************\n * 점검 상태 컬러 타입 정의\n **************************************************/\n\nexport const getInspectionStatusColorName = (status: string) => {\n switch (status) {\n case \"SUBMITTED\":\n return { color: \"blue\", value: \"제출\" };\n case \"RE_INSPECTION\":\n return { color: \"orange\", value: \"재점검\" };\n case \"APPROVED\":\n return { color: \"green\", value: \"승인\" };\n case \"VISIT\":\n return { color: \"red\", value: \"방문 점검\" };\n }\n};\n\n// 점검 년도 옵션 생성 (검색용: 2025년부터 현재년도+5년까지)\nexport const getInspectionYearOptions = () => {\n const currentYear = new Date().getFullYear();\n const startYear = Math.max(2025, currentYear - 4);\n const endYear = currentYear === 2025 ? 2030 : currentYear;\n\n const yearOptions = [];\n for (let year = startYear; year <= endYear; year++) {\n yearOptions.push({ value: year.toString(), label: `${year}년` });\n }\n return yearOptions;\n};\n\n// 현재 년도와 반기를 계산하는 함수\nexport const getCurrentYearAndHalf = () => {\n const now = new Date();\n const currentYear = now.getFullYear().toString();\n const currentMonth = now.getMonth() + 1; // 0-11이므로 +1\n const currentHalfYear = currentMonth <= 6 ? \"H1\" : \"H2\";\n\n return {\n year: currentYear,\n halfYear: currentHalfYear,\n };\n};\n\n// 점검 년도 옵션 생성 (올해부터 +5년)\nexport const getYearOptions = () => {\n const currentYear = new Date().getFullYear();\n const years = [];\n for (let i = 0; i < 5; i++) {\n const year = currentYear + i;\n years.push({\n value: String(year),\n label: `${year}년`,\n });\n }\n return years;\n};\n","import { ColorType } from \"../../../theme\";\nimport { toRemFunction } from \"../../../utils/helperUtils\";\n\nexport interface BorderRadiusBoxProps {\n active?: boolean;\n paddingX?: number;\n paddingY?: number;\n radius?: number;\n children: React.ReactNode;\n onClick?: () => void;\n className?: string;\n fullWidth?: boolean;\n bgColor?: ColorType;\n borderColor?: ColorType;\n}\n\nfunction BorderRadiusBox({\n active = false,\n paddingX = 22,\n paddingY = 20,\n radius = 12,\n children,\n onClick,\n className,\n fullWidth = false,\n bgColor = \"white\",\n borderColor = \"line\",\n}: BorderRadiusBoxProps) {\n return (\n <div\n className={`border ${fullWidth ? \"w-full\" : \"\"} ${\n active\n ? \"border-primary bg-primary10\"\n : `border-${borderColor} bg-${bgColor}`\n } ${onClick ? \"cursor-pointer\" : \"\"} ${className}`}\n style={{\n paddingLeft: toRemFunction(paddingX),\n paddingRight: toRemFunction(paddingX),\n paddingTop: toRemFunction(paddingY),\n paddingBottom: toRemFunction(paddingY),\n borderRadius: toRemFunction(radius),\n }}\n onClick={onClick}\n >\n {children}\n </div>\n );\n}\n\nexport default BorderRadiusBox;\n","// import { IcTooltip, IcTooltipClose } from \"@/assets/images\";\nimport { useEffect, useState } from \"react\";\nimport ColorIcTagClose from \"../../../assets/colorIcon/ColorIcTagClose\";\nimport ColorIcTooltip from \"../../../assets/colorIcon/ColorIcTooltip\";\n\nexport interface TooltipProps {\n tooltipInfo: React.ReactNode;\n position?: \"bottom\" | \"right\";\n}\n\nfunction Tooltip({ tooltipInfo, position = \"right\" }: TooltipProps) {\n const [isOpen, setIsOpen] = useState(false);\n useEffect(() => {\n if (isOpen) {\n // setTimeout(() => {\n // setIsOpen(false);\n // }, 2000);\n }\n }, [isOpen]);\n\n const positionStyle = {\n left: position === \"right\" ? \"17px\" : \"50%\",\n top: position === \"right\" ? \"50%\" : \"17px\",\n transform:\n position === \"right\" ? \"translate(0, -50%)\" : \"translate(-62%, 0)\",\n };\n\n return (\n <div className=\"tooltip relative ml-2\">\n <div\n className=\"relative\"\n onClick={(e) => {\n e.stopPropagation();\n setIsOpen(!isOpen);\n }}\n >\n <ColorIcTooltip width={14} height={14} />\n \n </div>\n {isOpen && (\n <div\n className={`absolute z-10 rounded-md`}\n style={{\n ...positionStyle,\n }}\n >\n {tooltipInfo}\n <span className=\"absolute top-10 right-10 cursor-pointer\" onClick={(e) => {\n e.stopPropagation();\n setIsOpen(false);\n }}>\n <ColorIcTagClose width={10} height={10} color=\"text\" />\n </span>\n </div>\n )}\n </div>\n );\n}\n\nexport default Tooltip;\n","import { ColorType } from \"../../theme\";\n\nfunction ColorIcTagClose({\n width = 10,\n height = 10,\n color = \"text\",\n}: {\n width?: number;\n height?: number;\n color?: ColorType;\n}) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 10 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ color: `var(--color-${color})` }}\n >\n <g clipPath=\"url(#clip0_848_3903)\">\n <path\n d=\"M5.5 5L9.3125 1.1875C9.45312 1.04688 9.45312 0.828125 9.3125 0.6875C9.17188 0.546875 8.95312 0.546875 8.8125 0.6875L5 4.5L1.1875 0.6875C1.04687 0.546875 0.828125 0.546875 0.6875 0.6875C0.546875 0.828125 0.546875 1.04688 0.6875 1.1875L4.5 5L0.6875 8.8125C0.546875 8.95313 0.546875 9.17188 0.6875 9.3125C0.75 9.375 0.84375 9.42188 0.9375 9.42188C1.03125 9.42188 1.125 9.39063 1.1875 9.3125L5 5.5L8.8125 9.3125C8.875 9.375 8.96875 9.42188 9.0625 9.42188C9.15625 9.42188 9.25 9.39063 9.3125 9.3125C9.45312 9.17188 9.45312 8.95313 9.3125 8.8125L5.5 5Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_848_3903\">\n <rect width=\"10\" height=\"10\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n\nexport default ColorIcTagClose;\n","import { ColorType } from \"../../theme\";\n\nfunction ColorIcTooltip({\n width = 14,\n height = 14,\n color = \"text\",\n}: {\n width?: number;\n height?: number;\n color?: ColorType;\n}) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ color: `var(--color-${color})` }}\n >\n <path\n d=\"M6.97882 4.26364H6.95761C6.70306 4.26364 6.46973 4.47576 6.46973 4.75152C6.46973 5.02728 6.68185 5.2394 6.95761 5.2394H6.97882C7.23336 5.2394 7.4667 5.02728 7.4667 4.75152C7.4667 4.47576 7.25458 4.26364 6.97882 4.26364Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M6.97872 5.93941C6.72418 5.93941 6.49084 6.15153 6.49084 6.42729V9.69395C6.49084 9.9485 6.70297 10.1818 6.97872 10.1818C7.23327 10.1818 7.4666 9.96971 7.4666 9.69395V6.40607C7.4666 6.15153 7.25448 5.93941 6.97872 5.93941Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M6.97866 0.593945C3.43624 0.593945 0.551392 3.45758 0.551392 7.00001C0.551392 10.5424 3.43624 13.4273 6.97866 13.4273C10.5211 13.4273 13.3847 10.5424 13.3847 7.00001C13.3847 3.45758 10.5211 0.593945 6.97866 0.593945ZM6.97866 12.4727C3.96654 12.4727 1.50594 10.0121 1.50594 7.00001C1.50594 3.98788 3.96654 1.52728 6.97866 1.52728C9.99079 1.52728 12.4302 3.98788 12.4302 7.00001C12.4302 10.0121 9.99079 12.4727 6.97866 12.4727Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n\nexport default ColorIcTooltip;\n","import { Tooltip } from \"../Tooltip\";\nimport { Text } from \"../Text\";\nimport { ColorType, FontSizeType, FontWeightType } from \"../../../theme\";\n\nexport interface BulletTextProps {\n label?: string | React.ReactNode;\n bulletColor?: ColorType;\n tooltip?: React.ReactNode;\n textColor?: ColorType;\n textSize?: FontSizeType;\n fontWeight?: FontWeightType;\n}\n\nconst BulletText = ({\n label,\n bulletColor = \"secondaryText\",\n tooltip,\n textColor = \"text\",\n textSize = \"body14\",\n fontWeight = \"bold\",\n}: BulletTextProps) => {\n return (\n <div className={`flex flex-none relative label-mobile`}>\n <span\n className={`inline-block w-3 h-3 bg-${bulletColor} mr-4 ${\n textSize === \"body12\" ? \"mt-7\" : \"mt-9\"\n }`}\n ></span>\n <Text size={textSize} color={textColor} fontWeight={fontWeight}>\n {label}\n </Text>\n {tooltip && <Tooltip tooltipInfo={tooltip} />}\n </div>\n );\n};\n\nexport default BulletText;\n","import {\n alignSelfs,\n AlignSelfType,\n ButtonVariantType,\n justifySelfs,\n JustifySelfType,\n} from \"../../../theme\";\nimport React from \"react\";\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariantType;\n alignSelf?: AlignSelfType;\n justifySelf?: JustifySelfType;\n cornerStyle?: \"square\" | \"round\";\n size?: \"small\" | \"medium\" | \"large\";\n fontWeight?: \"bold\" | \"semibold\" | \"normal\";\n isLoading?: boolean;\n icon?: string | React.ReactNode;\n iconPosition?: \"left\" | \"right\";\n type?: \"button\" | \"submit\" | \"reset\";\n customWidth?: number;\n wFull?: boolean;\n}\n\nconst Button: React.FC<ButtonProps> = ({\n children,\n variant = \"primary\",\n size = \"large\",\n fontWeight = \"bold\",\n isLoading = false,\n disabled,\n className = \"\",\n alignSelf = \"center\",\n justifySelf = \"center\",\n cornerStyle = \"square\",\n icon,\n iconPosition = \"right\",\n type = \"button\",\n customWidth,\n wFull = false,\n ...props\n}) => {\n // 버튼 스타일 설정\n const getVariantStyles = () => {\n switch (variant) {\n case \"primary\":\n return `bg-primary text-white border border-primary hover:bg-blue-600 ${\n cornerStyle === \"round\" ? \"rounded-full\" : \"rounded-md\"\n }`;\n case \"secondary\":\n return `bg-primary10 border border-primary10 text-primary ${\n cornerStyle === \"round\" ? \"rounded-full\" : \"rounded-md\"\n }`;\n case \"danger\":\n return `bg-warningLight border border-warningLight text-warning hover:bg-warningLight ${\n cornerStyle === \"round\" ? \"rounded-full\" : \"rounded-md\"\n }`;\n case \"lower\":\n return `bg-gray2 text-dark5 border border-gray2 hover:bg-gray3 ${\n cornerStyle === \"round\" ? \"rounded-full\" : \"rounded-md\"\n }`;\n case \"neutral\":\n return `bg-white border border-primary text-primary ${\n cornerStyle === \"round\" ? \"rounded-full\" : \"rounded-md\"\n }`;\n case \"neutralGray\":\n return `bg-white border border-line text-text ${\n cornerStyle === \"round\" ? \"rounded-full\" : \"rounded-md\"\n }`;\n case \"blue\":\n return `bg-blueLight text-blue border border-blueLight ${\n cornerStyle === \"round\" ? \"rounded-full\" : \"rounded-md\"\n }`;\n case \"orange\":\n return `bg-orangeLight text-orange border border-orangeLight ${\n cornerStyle === \"round\" ? \"rounded-full\" : \"rounded-md\"\n }`;\n case \"green\":\n return `bg-greenLight text-green border border-greenLight ${\n cornerStyle === \"round\" ? \"rounded-full\" : \"rounded-md\"\n }`;\n }\n };\n\n const getSizeStyles = () => {\n switch (size) {\n case \"small\":\n return \"px-10 py-1 text-sm\";\n case \"medium\":\n return `px-16 pt-7 pb-8 text-body14 font-${fontWeight}`;\n case \"large\":\n return `px-28 py-13 text-body16 font-${fontWeight} min-w-[140px]`;\n }\n };\n\n const baseStyles =\n \"flex items-center justify-center transition-colors whitespace-nowrap cursor-pointer focus:outline-none\";\n const disabledStyles = `bg-gray1 text-dark7 cursor-not-allowed border border-gray1 ${\n cornerStyle === \"round\" ? \"rounded-full\" : \"rounded-md\"\n }`;\n\n const buttonStyles = `\n ${baseStyles} \n ${getSizeStyles()} \n ${disabled || isLoading ? disabledStyles : getVariantStyles()}\n ${alignSelfs[alignSelf]}\n ${justifySelfs[justifySelf]}\n `;\n\n return (\n <button\n className={`${buttonStyles} ${className}`}\n disabled={disabled || isLoading}\n type={type}\n style={{\n width: wFull ? \"100%\" : customWidth ? `${customWidth}px` : \"\",\n }}\n {...props}\n >\n {icon &&\n iconPosition === \"left\" &&\n (typeof icon === \"string\" ? (\n <img src={icon} alt=\"icon\" className=\"w-16 h-16 mr-4\" />\n ) : (\n <div className=\"mr-4\">{icon}</div>\n ))}\n {isLoading ? (\n <span className=\"flex items-center justify-center\">\n <svg\n className=\"animate-spin -ml-1 mr-2 h-14 w-14 text-current\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n ></circle>\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n 처리 중...\n </span>\n ) : (\n children\n )}\n {icon &&\n iconPosition === \"right\" &&\n (typeof icon === \"string\" ? (\n <img src={icon} alt=\"icon\" className=\"w-16 h-16 ml-3\" />\n ) : (\n <div className=\"mr-4\">{icon}</div>\n ))}\n </button>\n );\n};\n\nexport default Button;\n","import React, { forwardRef, useState, useEffect } from \"react\";\nimport { toRemFunction } from \"../../../utils/helperUtils\";\nimport ColorIcCheckDim from \"../../../assets/colorIcon/ColorIcCheckDim\";\n\nexport interface CheckboxProps extends React.InputHTMLAttributes<HTMLInputElement> {\n type?: \"filled\" | \"outline\";\n label?: string;\n error?: string;\n className?: string;\n checkboxWidth?: number;\n disabled?: boolean;\n}\n\nconst Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n label,\n error,\n className = \"\",\n id,\n type = \"filled\",\n checked,\n checkboxWidth,\n disabled = false,\n ...props\n },\n ref\n ) => {\n const checkboxId =\n id || `checkbox-${Math.random().toString(36).substring(2, 9)}`;\n\n const [isChecked, setIsChecked] = useState(checked || false);\n\n // props.checked가 변경될 때 내부 상태 동기화\n useEffect(() => {\n setIsChecked(checked || false);\n }, [checked]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsChecked(e.target.checked);\n if (props.onChange) {\n props.onChange(e);\n }\n };\n\n const handleCheckboxClick = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n // disabled 상태일 때는 클릭 이벤트 무시\n if (disabled) {\n return;\n }\n\n const newChecked = !isChecked;\n setIsChecked(newChecked);\n const event = {\n target: {\n checked: newChecked,\n value: props.value || \"\",\n name: props.name || \"\",\n type: \"checkbox\",\n },\n currentTarget: {\n checked: newChecked,\n value: props.value || \"\",\n name: props.name || \"\",\n type: \"checkbox\",\n },\n } as React.ChangeEvent<HTMLInputElement>;\n if (props.onChange) {\n props.onChange(event);\n }\n };\n\n const handleLabelClick = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n // disabled 상태일 때는 클릭 이벤트 무시\n if (disabled) {\n return;\n }\n\n const newChecked = !isChecked;\n setIsChecked(newChecked);\n const event = {\n target: {\n checked: newChecked,\n value: props.value || \"\",\n name: props.name || \"\",\n type: \"checkbox\",\n },\n currentTarget: {\n checked: newChecked,\n value: props.value || \"\",\n name: props.name || \"\",\n type: \"checkbox\",\n },\n } as React.ChangeEvent<HTMLInputElement>;\n if (props.onChange) {\n props.onChange(event);\n }\n };\n\n const getTypeNoneCheckedClass = () => {\n if (type === \"filled\") {\n return \"border border-line rounded\";\n }\n if (type === \"outline\") {\n return \"bg-white\";\n }\n };\n const getTypeCheckedClass = () => {\n if (type === \"filled\") {\n if (isChecked) {\n return \"bg-primary border-primary\";\n }\n return \"bg-white\";\n }\n if (type === \"outline\") {\n return \"bg-white\";\n }\n };\n\n const getTypeCheckedIconClass = () => {\n if (type === \"filled\") {\n return \"text-white\";\n }\n if (type === \"outline\") {\n if (isChecked) {\n return \"text-primary\";\n }\n return \"text-line\";\n }\n };\n\n return (\n <div\n className={`flex items-center py-1 px-1 ${checkboxWidth}`}\n style={{\n width: checkboxWidth ? `${toRemFunction(checkboxWidth)}` : \"\",\n }}\n >\n <div className=\"relative flex items-center\">\n <div className=\"flex items-center h-5\">\n <input\n ref={ref}\n id={checkboxId}\n type=\"checkbox\"\n checked={isChecked}\n onChange={handleInputChange}\n disabled={disabled}\n className=\"sr-only\"\n {...props}\n />\n {disabled ? (\n <ColorIcCheckDim width={18} height={18} />\n // <img src={IcCheckMarkDim} alt=\"check-dim\" className=\"w-18 h-18\" />\n ) : (\n <div\n className={`\n h-18 w-18 \n ${getTypeNoneCheckedClass()}\n transition-all duration-200\n flex items-center justify-center\n ${getTypeCheckedClass()}\n ${error ? \"border-red\" : \"\"}\n ${className}\n `}\n onClick={handleCheckboxClick}\n >\n <span className={`${getTypeCheckedIconClass()} flex items-center justify-center`}>\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M15.292 5.93848C15.5167 5.687 15.8864 5.68757 16.1104 5.94043L16.1172 5.94727L16.123 5.95508C16.2977 6.1856 16.3012 6.54196 16.0713 6.77832L16.0723 6.7793L9.55078 13.9229L9.55176 13.9238C9.36406 14.1357 9.1186 14.25 8.84668 14.25C8.59606 14.25 8.33167 14.1383 8.1416 13.9238V13.9229L4.90918 10.373L4.90625 10.3701C4.69767 10.1343 4.69773 9.77005 4.90625 9.53418C5.12992 9.2815 5.49974 9.28064 5.72461 9.53125L8.86426 12.9795L15.292 5.9375V5.93848Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth=\"0.5\"\n />\n </svg>\n </span>\n </div>\n )}\n </div>\n {label && (\n <div className={`text-sm ${type === \"outline\" ? \"ml-4\" : \"ml-8\"}`}>\n <label\n htmlFor={checkboxId}\n onClick={handleLabelClick}\n className={` text-body14 ${\n disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\"\n } select-none ${\n type === \"outline\" ? \"text-primaryText \" : \"text-primaryText\"\n }`}\n >\n {label}\n </label>\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nCheckbox.displayName = \"Checkbox\";\n\nexport default Checkbox;\n","import { ColorType } from \"../../theme\";\n\nfunction ColorIcCheckDim({\n width = 21,\n height = 20,\n fillColor = \"gray3\",\n strokeColor = \"stroke\",\n iconColor = \"white\",\n}: {\n width?: number;\n height?: number;\n fillColor?: ColorType;\n strokeColor?: ColorType;\n iconColor?: ColorType;\n}) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 21 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"1\"\n y=\"0.5\"\n width=\"19\"\n height=\"19\"\n rx=\"3.5\"\n fill={`var(--color-${fillColor})`}\n />\n <rect\n x=\"1\"\n y=\"0.5\"\n width=\"19\"\n height=\"19\"\n rx=\"3.5\"\n stroke={`var(--color-${strokeColor})`}\n />\n <path\n d=\"M13.9658 5.92676C14.1349 5.75801 14.4042 5.75793 14.5732 5.92676C14.7212 6.07465 14.74 6.29972 14.6289 6.4668L14.5732 6.53418L11.1133 10.001L14.5596 13.4688C14.7286 13.6376 14.7293 13.9071 14.5605 14.0762C14.4836 14.153 14.367 14.2002 14.2627 14.2002C14.1584 14.2002 14.0427 14.153 13.9658 14.0762H13.9648L10.5059 10.6084L7.03418 14.0762C6.95726 14.153 6.84163 14.2002 6.7373 14.2002C6.63295 14.2002 6.5164 14.153 6.43945 14.0762C6.27071 13.9072 6.27047 13.6376 6.43945 13.4688L9.89746 10.002L6.42676 6.54785V6.54688C6.25778 6.37786 6.25763 6.10837 6.42676 5.93945C6.59574 5.77069 6.8651 5.77085 7.03418 5.93945L10.5059 9.39453L13.9648 5.92676H13.9658Z\"\n fill={`var(--color-${iconColor})`}\n stroke={`var(--color-${iconColor})`}\n strokeWidth=\"0.4\"\n />\n </svg>\n );\n}\n\nexport default ColorIcCheckDim;\n","import { toRemFunction } from \"../../../utils/helperUtils\";\n\nexport interface DividerProps {\n className?: string;\n orientation?: \"horizontal\" | \"vertical\";\n variant?: \"solid\" | \"dashed\" | \"dotted\";\n width?: number;\n}\n\nfunction Divider({\n className = \"\",\n orientation = \"horizontal\",\n variant = \"solid\",\n width,\n}: DividerProps) {\n const baseClasses =\n orientation === \"horizontal\" ? \"w-full border-t\" : \"h-full border-l\";\n\n const variantClasses = {\n solid: \"border-solid\",\n dashed: \"border-dashed\",\n dotted: \"border-dotted\",\n };\n\n return (\n <div\n className={`${baseClasses} ${variantClasses[variant]} border-line ${className}`}\n style={{ width: width ? toRemFunction(width) : \"100%\" }}\n role=\"separator\"\n />\n );\n}\n\nexport default Divider;\n","import React, { useState, useEffect } from \"react\";\nimport { Input } from \"../Input\";\nimport { SelectBox, SelectOption } from \"../SelectBox\";\nimport { Stack } from \"../Stack\";\nimport { Label } from \"../Label\";\nimport { DirectionType } from \"../../../theme\";\nimport { toRemFunction } from \"../../../utils/helperUtils\";\n\nexport interface EmailInputProps {\n value: string;\n onChange: (value: string) => void;\n error?: string;\n label?: string;\n labelHidden?: boolean;\n placeholder?: string;\n required?: boolean;\n direction?: DirectionType;\n fullWidth?: boolean;\n className?: string;\n customWidth?: number;\n onBlur?: () => void;\n triggerValidation?: () => void;\n}\n\nconst EmailInput: React.FC<EmailInputProps> = ({\n value,\n onChange,\n error,\n label = \"이메일\",\n placeholder = \"이메일 주소\",\n required = false,\n direction = \"row\",\n fullWidth = false,\n onBlur,\n triggerValidation,\n labelHidden = false,\n className,\n customWidth,\n}) => {\n // 이메일 주소와 도메인 분리\n const [localPart, setLocalPart] = useState(\"\");\n const [domain, setDomain] = useState(\"\");\n const [selectedDomain, setSelectedDomain] = useState(\"\");\n const [isCustomDomain, setIsCustomDomain] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n // 도메인 옵션을 SelectOption 형식으로 변환\n const domainOptions: SelectOption[] = [\n { value: \"\", label: \"선택\" },\n { value: \"gmail.com\", label: \"gmail.com\" },\n { value: \"naver.com\", label: \"naver.com\" },\n { value: \"daum.net\", label: \"daum.net\" },\n { value: \"custom\", label: \"직접 입력\" },\n ];\n\n // 초기 값 설정\n useEffect(() => {\n if (value) {\n const parts = value.split(\"@\");\n if (parts.length === 2) {\n setLocalPart(parts[0]);\n setDomain(parts[1]);\n\n // 도메인이 옵션에 있는지 확인\n const domainOption = domainOptions.find(\n (option) => option.value === parts[1] && option.value !== \"custom\"\n );\n\n if (domainOption) {\n setSelectedDomain(parts[1]);\n setIsCustomDomain(false);\n } else {\n setSelectedDomain(\"custom\");\n setIsCustomDomain(true);\n }\n } else {\n setLocalPart(value);\n setSelectedDomain(\"\");\n setDomain(\"\");\n }\n }\n }, [value]);\n\n // 값이 변경될 때 호출되는 함수\n const handleValueChange = (newValue: string) => {\n onChange(newValue);\n // 유효성 검사 트리거 함수가 있으면 호출\n if (triggerValidation) {\n triggerValidation();\n }\n };\n\n // 이메일 로컬 파트 변경 핸들러\n const handleLocalPartChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newLocalPart = e.target.value;\n setLocalPart(newLocalPart);\n updateEmail(newLocalPart, domain);\n };\n\n // 도메인 선택 핸들러\n const handleDomainSelect = (selectedValue: string | number | null) => {\n setSelectedDomain(selectedValue as string);\n\n if (selectedValue === \"custom\") {\n setIsCustomDomain(true);\n // 직접 입력 시 기존 도메인 유지\n updateEmail(localPart, domain);\n } else {\n setIsCustomDomain(false);\n setDomain(selectedValue as string);\n updateEmail(localPart, selectedValue as string || \"\");\n }\n };\n\n // 커스텀 도메인 변경 핸들러\n const handleCustomDomainChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newDomain = e.target.value;\n // @ 기호가 포함된 경우 제거\n const cleanDomain = newDomain.replace(/@/g, \"\");\n setDomain(cleanDomain);\n updateEmail(localPart, cleanDomain);\n };\n\n // 이메일 업데이트 함수\n const updateEmail = (local: string, dmn: string) => {\n if (local && dmn) {\n handleValueChange(`${local}@${dmn}`);\n } else if (local) {\n handleValueChange(local);\n } else {\n handleValueChange(\"\");\n }\n };\n\n // 포커스 핸들러\n const handleFocus = () => {\n setIsFocused(true);\n };\n\n // 포커스 아웃 핸들러\n const handleBlur = () => {\n setIsFocused(false);\n if (onBlur) {\n onBlur();\n }\n };\n\n return (\n <div className={`${fullWidth ? \"w-full\" : \"\"}`} aria-required={required}>\n <Stack\n direction={direction}\n wFull={fullWidth}\n gap={direction === \"row\" ? 14 : 4}\n align={direction === \"row\" ? \"center\" : \"start\"}\n className={className}\n >\n {!labelHidden && <Label label={label} required={required} />}\n\n <Stack\n gap={10}\n className=\"flex-auto relative\"\n wFull={direction === \"row\" ? false : fullWidth}\n >\n <div\n className={`flex items-center border rounded-md ${\n error\n ? \"border-red\"\n : isFocused\n ? \"border-primary\"\n : \"border-line\"\n }`}\n style={\n !fullWidth\n ? {\n width: customWidth\n ? `${toRemFunction(customWidth)}`\n : \"100%\",\n }\n : {}\n }\n >\n <Input\n value={localPart}\n onChange={handleLocalPartChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={placeholder}\n className={`border-0 border-r rounded-r-none ${\n isFocused && \"border-primary\"\n }`}\n error=\"\"\n fullWidth={true}\n />\n\n <span className={`px-10 flex items-center`}>@</span>\n\n {isCustomDomain && (\n <Input\n value={domain}\n onChange={handleCustomDomainChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder=\"도메인 입력\"\n className={`border-0 border-l rounded-l-none ${\n isFocused && \"border-primary\"\n }`}\n error=\"\"\n fullWidth={true}\n />\n )}\n <SelectBox\n value={selectedDomain}\n onChange={handleDomainSelect}\n onFocus={handleFocus}\n onBlur={handleBlur}\n options={domainOptions}\n className={`border-0 border-l rounded-l-none ${\n isFocused && \"border-primary\"\n }`}\n fullWidth={true}\n />\n </div>\n </Stack>\n </Stack>\n </div>\n );\n};\n\nexport default EmailInput;\n","import {\n aligns,\n justifies,\n directions,\n AlignType,\n JustifyType,\n} from \"../../../theme\";\nimport { toRemFunction } from \"../../../utils/helperUtils\";\nimport clsx from \"clsx\";\nimport { Children, isValidElement, forwardRef } from \"react\";\nimport { Direction } from \"../../../types/common\";\n\nexport interface StackProps {\n direction?: Direction;\n justify?: JustifyType;\n align?: AlignType;\n even?: boolean;\n className?: string;\n children: React.ReactNode;\n wFull?: boolean;\n hFull?: boolean;\n gap?: number;\n rowGap?: number;\n columnGap?: number;\n onClick?: () => void;\n childSizes?: (number | string)[]; // 자식 요소들의 크기 배열 (%, px, rem 등)\n flexWrap?: boolean;\n}\n\nconst Stack = forwardRef<HTMLDivElement, StackProps>(\n (\n {\n direction = \"col\",\n justify,\n align,\n even = false,\n className = \"\",\n children,\n gap,\n rowGap = 0,\n columnGap = 0,\n wFull = false,\n hFull = false,\n onClick,\n childSizes,\n flexWrap = false,\n },\n ref\n ) => {\n const classes = clsx(\n \"flex\",\n flexWrap && \"flex-wrap\",\n directions[direction],\n justify && justifies[justify],\n align && aligns[align],\n {\n even: even,\n \"w-full\": wFull,\n \"h-full\": hFull,\n },\n className\n );\n\n const renderChildren = () => {\n if (!childSizes) return children;\n\n const childrenArray = Children.toArray(children);\n const result = [];\n\n // childSizes 배열의 길이와 children 배열의 길이 중 더 큰 값으로 순회\n const maxLength = Math.max(childSizes.length, childrenArray.length);\n\n for (let index = 0; index < maxLength; index++) {\n const size = childSizes[index];\n const child = childrenArray[index];\n\n if (!child) {\n // child가 없고 size가 있으면 spacer 생성\n if (size !== undefined && size !== null && size !== -1) {\n let sizeValue: string;\n if (typeof size === \"string\") {\n // string인 경우 숫자만 있으면 px, 아니면 그대로 사용\n if (/^\\d+$/.test(size)) {\n sizeValue = `${size}px`;\n } else {\n sizeValue = size;\n }\n } else if (typeof size === \"number\" && size > 0) {\n // number이고 > 0이면 px로 변환\n sizeValue = `${size}px`;\n } else {\n // number이고 <= 0이거나 다른 경우는 무시\n continue;\n }\n\n const sizeStyle = {\n flexBasis: sizeValue,\n flexShrink: 0,\n flexGrow: 0,\n };\n result.push(<div key={`spacer-${index}`} style={sizeStyle}></div>);\n }\n continue;\n }\n\n if (!isValidElement(child)) {\n result.push(child);\n continue;\n }\n\n // child가 있을 때 size 스타일 적용\n let sizeStyle: React.CSSProperties;\n if (size === -1 || size === undefined || size === null) {\n // -1이거나 없으면 나머지 공간을 자동으로 차지\n sizeStyle = {\n flex: 1,\n };\n } else {\n let sizeValue: string;\n if (typeof size === \"string\") {\n // string인 경우\n // 숫자만 있으면 px 단위로 해석, 이미 단위가 있으면 그대로 사용\n if (/^\\d+$/.test(size)) {\n sizeValue = `${size}px`;\n } else {\n sizeValue = size;\n }\n } else {\n // number인 경우\n // > 1이면 px 단위로 변환 (고정 크기)\n // <= 1이면 비율로 해석하지 않고 px로 변환 (고정 크기)\n sizeValue = `${size}px`;\n }\n // 고정 크기는 flexShrink: 0, flexGrow: 0으로 설정\n sizeStyle = {\n flexBasis: sizeValue,\n flexShrink: 0,\n flexGrow: 0,\n };\n }\n\n result.push(\n <div key={index} style={sizeStyle}>\n {child}\n </div>\n );\n }\n\n return result;\n };\n\n // gap이 있으면 gap만, gap이없으면 rowGap이나, columnGap이 있으면 그것만, 둘다 없으면 undefined\n const gapStyle = gap\n ? { gap: toRemFunction(gap) }\n : { rowGap: toRemFunction(rowGap), columnGap: toRemFunction(columnGap) };\n return (\n <div\n ref={ref}\n className={classes}\n style={gapStyle ? gapStyle : undefined}\n onClick={onClick}\n >\n {renderChildren()}\n </div>\n );\n }\n);\n\nStack.displayName = \"Stack\";\n\nexport default Stack;\n","function RequiredDot() {\n return (\n <span className=\"inline-block w-6 h-6 bg-red rounded-full bg-warning ml-4\"></span>\n );\n}\n\nexport default RequiredDot;\n","import { toRemFunction } from \"../../../utils/helperUtils\";\nimport { Tooltip } from \"../Tooltip\";\nimport { Text } from \"../Text\";\nimport { FontWeightType } from \"../../../theme\";\nimport { RequiredDot } from \"../RequiredDot\";\n\nexport interface LabelProps {\n isDot?: boolean;\n label?: string | React.ReactNode;\n required?: boolean;\n inputId?: string;\n width?: number;\n tooltip?: React.ReactNode;\n labelHidden?: boolean;\n subText?: string | React.ReactNode;\n fontWeight?: FontWeightType;\n align?: \"start\" | \"center\" | \"end\";\n}\n\nconst Label = ({\n isDot = true,\n label,\n required = false,\n inputId,\n width,\n tooltip,\n labelHidden = false,\n subText,\n fontWeight = \"bold\",\n align,\n}: LabelProps) => {\n if (!label || labelHidden) return null;\n return (\n <label\n htmlFor={inputId ? inputId : \"\"}\n className={`leading-none flex items-center flex-none relative label-mobile ${\n align === \"end\" ? \"justify-end\" : \"\"\n }`}\n style={{ width: width ? toRemFunction(width) : \"auto\" }}\n >\n \n <Text size=\"body14\" color={\"primaryText\"} fontWeight={fontWeight}>\n {label}\n </Text>\n {subText}\n {tooltip && <Tooltip tooltipInfo={tooltip} />}\n {required && <RequiredDot />}\n </label>\n );\n};\n\nexport default Label;\n","import React from \"react\";\nimport { formatNumberWithComma, toRemFunction } from \"../../../utils/helperUtils\";\nimport { Text } from \"../Text\";\nimport { Stack } from \"../Stack\";\nimport { Label } from \"../Label\";\nimport { CommonFormDataProps } from \"../../../types/common\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n CommonFormDataProps {\n type?: string;\n originRef?: React.LegacyRef<HTMLInputElement> | undefined;\n textAlign?: \"left\" | \"right\" | \"center\";\n value?: string | number | undefined;\n description?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onlyData?: boolean;\n rightIcon?: string; // 우측 아이콘 이미지 경로\n onRightIconClick?: () => void; // 우측 아이콘 클릭 핸들러\n}\n\nconst Input: React.FC<InputProps> = ({\n isDot = true,\n label,\n type = \"text\",\n error,\n fullWidth = false,\n id,\n className = \"\",\n originRef,\n direction = \"row\",\n textAlign = \"left\",\n value,\n description,\n onChange,\n customWidth,\n tooltip,\n labelWidth,\n disabled,\n onlyData = false,\n labelHidden,\n rightIcon,\n onRightIconClick,\n ...props\n}) => {\n const inputId = id || `input-${Math.random().toString(36).substring(2, 9)}`;\n\n const displayValue =\n type === \"number\" && value ? formatNumberWithComma(value) : value;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (type === \"number\") {\n // 입력값에서 콤마 제거하고 숫자만 추출\n const rawValue = e.target.value.replace(/[^\\d]/g, \"\");\n\n if (onChange) {\n // 원래 이벤트 객체를 복제하고 value만 변경\n const newEvent = {\n ...e,\n target: {\n ...e.target,\n value: rawValue, // 숫자값만 전달\n },\n };\n onChange(newEvent as React.ChangeEvent<HTMLInputElement>);\n }\n } else if (onChange) {\n onChange(e);\n }\n };\n return (\n <Stack\n direction={direction}\n wFull={fullWidth}\n gap={direction === \"row\" ? 14 : 4}\n align={direction === \"row\" ? \"center\" : \"start\"}\n >\n <Label\n label={label}\n isDot={isDot}\n width={labelWidth}\n required={props.required}\n inputId={inputId}\n tooltip={tooltip}\n labelHidden={labelHidden}\n />\n\n <Stack\n gap={5}\n className={`${fullWidth ? \"flex-auto\" : \"\"} relative`}\n wFull={direction === \"row\" ? false : fullWidth}\n >\n <div className=\"relative w-full\">\n <input\n id={inputId}\n ref={originRef}\n type={type === \"number\" ? \"text\" : type}\n value={displayValue}\n onChange={handleChange}\n autoComplete={props.autoComplete || \"off\"}\n className={`\n px-12 h-36 border rounded-md leading-[36px]\n ${error ? \"border-red\" : \"border-line\"}\n focus:border-primary\n ${fullWidth && \"w-full\"}\n ${className}\n ${type === \"number\" ? \"no-spinner\" : \"\"}\n ${disabled ? \"bg-gray1 border-line\" : \"\"}\n ${onlyData && \"bg-white\"}\n ${rightIcon ? \"pr-40\" : \"\"}\n `}\n style={{\n textAlign,\n // autofill 배경색 제거를 위한 강력한 스타일\n // WebkitBoxShadow: \"0 0 0 1000px white inset\",\n WebkitTextFillColor: \"inherit\",\n // transition: \"background-color 5000s ease-in-out 0s\",\n width: customWidth ? `${toRemFunction(customWidth)}` : \"100%\",\n // backgroundColor: disabled ? \"var(--gray)\" : \"white\",\n }}\n disabled={disabled || onlyData}\n {...props}\n aria-required={props.required}\n />\n {rightIcon && (\n <div\n className={`absolute inset-y-0 right-0 flex items-center pr-12 ${\n onRightIconClick ? \"cursor-pointer\" : \"pointer-events-none\"\n }`}\n onClick={onRightIconClick}\n >\n <img src={rightIcon} alt=\"icon\" width={16} height={16} />\n </div>\n )}\n </div>\n {description && (\n <Text size=\"body12\" color=\"gray\">\n {description}\n </Text>\n )}\n </Stack>\n </Stack>\n );\n};\n\nexport default Input;\n","import React, { forwardRef, useState, useRef, useEffect } from \"react\";\nimport { Stack } from \"../Stack\";\nimport { Label } from \"../Label\";\nimport { toRemFunction } from \"../../../utils/helperUtils\";\nimport ColorIcArrow from \"../../../assets/colorIcon/ColorIcArrow\";\nimport { Divider } from \"../Divider\";\nimport { CommonFormDataProps } from \"../../../types/common\";\n\nexport interface SelectOption {\n value: string | number | null;\n label: string;\n disabled?: boolean;\n icon?: React.ReactNode;\n description?: string;\n divider?: boolean;\n}\n\nexport interface SelectBoxProps extends CommonFormDataProps {\n options: SelectOption[];\n value?: string | number | null;\n onChange?: (value: string | number | null) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n onEmptyClick?: () => void;\n id?: string;\n}\n\nconst SelectBox = forwardRef<HTMLDivElement, SelectBoxProps>(\n (\n {\n isDot = true,\n label,\n error,\n fullWidth = false,\n options,\n id,\n direction = \"row\",\n className = \"\",\n placeholder = \"선택하세요\",\n value,\n onChange,\n onFocus,\n onBlur,\n onEmptyClick,\n disabled = false,\n required = false,\n customWidth,\n labelHidden,\n emptyMessage = \"데이터가 없습니다\",\n labelWidth,\n tooltip,\n },\n ref\n ) => {\n const [isOpen, setIsOpen] = useState(false);\n // const [selectedValue, setSelectedValue] = useState<string | number>(\n // value || \"\"\n // );\n const [dropdownPosition, setDropdownPosition] = useState<\"bottom\" | \"top\">(\n \"bottom\"\n );\n const dropdownRef = useRef<HTMLDivElement>(null);\n const selectButtonRef = useRef<HTMLDivElement>(null);\n\n const selectId =\n id || `select-${Math.random().toString(36).substring(2, 9)}`;\n\n const selectedOption = options.find((option) => option.value === value);\n\n const calculateMinWidth = () => {\n if (!options.length) return \"auto\";\n\n const maxLength = Math.max(\n ...options.map((option) => option.label.length),\n placeholder.length\n );\n\n const calculatedWidth = Math.min(Math.max(maxLength * 8 + 80, 120), 400);\n return `${calculatedWidth}px`;\n };\n\n const minWidth = calculateMinWidth();\n\n const calculateDropdownPosition = () => {\n if (!selectButtonRef.current) return \"bottom\";\n\n const selectRect = selectButtonRef.current.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const dropdownHeight = Math.min(240, options.length * 40 + 20);\n\n const spaceBelow = viewportHeight - selectRect.bottom;\n const spaceAbove = selectRect.top;\n\n if (spaceBelow >= dropdownHeight) {\n return \"bottom\";\n } else if (spaceAbove >= dropdownHeight) {\n return \"top\";\n } else {\n return spaceBelow > spaceAbove ? \"bottom\" : \"top\";\n }\n };\n\n useEffect(() => {\n if (isOpen) {\n const position = calculateDropdownPosition();\n setDropdownPosition(position);\n }\n }, [isOpen, options.length]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, []);\n\n const handleSelect = (optionValue: string | number | null) => {\n setIsOpen(false);\n onChange?.(optionValue);\n };\n\n const handleButtonClick = () => {\n if (disabled) return;\n\n if (!options || options.length === 0) {\n // 얼럿 대체 : 데이터가 없을 때 콜백 호출\n onEmptyClick?.();\n } else {\n setIsOpen(!isOpen);\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (event.key) {\n case \"Enter\":\n case \" \":\n event.preventDefault();\n handleButtonClick();\n break;\n case \"Escape\":\n setIsOpen(false);\n break;\n }\n };\n\n return (\n <Stack\n ref={ref}\n direction={direction}\n wFull={fullWidth}\n gap={direction === \"row\" ? 14 : 4}\n align={direction === \"row\" ? \"center\" : \"start\"}\n >\n <Label\n isDot={isDot}\n label={label}\n required={required}\n inputId={selectId}\n labelHidden={labelHidden}\n width={labelWidth}\n tooltip={tooltip}\n />\n <Stack\n gap={10}\n className=\"flex-auto relative\"\n wFull={direction === \"row\" ? false : fullWidth}\n >\n <div\n ref={dropdownRef}\n className={`relative ${fullWidth ? \"w-full\" : \"\"}`}\n style={\n !fullWidth\n ? {\n minWidth,\n width: customWidth\n ? `${toRemFunction(customWidth)}`\n : \"100%\",\n }\n : {}\n }\n >\n <div\n ref={selectButtonRef}\n id={selectId}\n className={`\n relative w-full px-12 h-36 text-left border rounded-md cursor-pointer\n content-center leading-none\n ${error ? \"border-red\" : \"border-line\"}\n ${\n disabled\n ? \"text-dark5 cursor-not-allowed bg-gray1 border-line\"\n : \"focus:border-primary bg-white\"\n }\n ${className}\n `}\n onClick={handleButtonClick}\n onKeyDown={handleKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n tabIndex={disabled ? -1 : 0}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-labelledby={label ? `${selectId}-label` : undefined}\n aria-required={required}\n >\n <div className=\"flex items-center justify-between h-full\">\n <div className=\"flex items-center space-x-2 h-full\">\n {selectedOption?.icon && (\n <span className=\"flex-shrink-0\">{selectedOption.icon}</span>\n )}\n <span\n className={`block truncate leading-36 ${\n !value && selectedOption?.label !== \"전체\"\n ? \"text-secondaryText\"\n : \"text-primaryText\"\n }`}\n >\n {selectedOption?.label || placeholder}\n </span>\n </div>\n <ColorIcArrow\n isOpen={isOpen}\n rotate={isOpen ? 270 : 90}\n color=\"text\"\n />\n </div>\n </div>\n\n {isOpen && (\n <div\n className={`absolute z-50 w-full bg-white border border-line rounded-md shadow-sm max-h-200 overflow-auto\n ${dropdownPosition === \"bottom\" ? \"mt-2\" : \"mb-2 bottom-full\"}\n `}\n >\n <ul className=\"py-4\" role=\"listbox\">\n {options.map((option, index) => {\n if (option.divider) {\n return <Divider key={index} className=\"my-10\" />;\n }\n return (\n <li\n key={option.value}\n className={`\n relative cursor-pointer select-none py-7 px-16\n ${\n option.disabled\n ? \"text-text cursor-not-allowed bg-gray-50\"\n : \"text-text hover:bg-primary hover:text-white\"\n }\n ${\n value === option.value\n ? \"bg-primary10 text-primary\"\n : \"\"\n }\n `}\n onClick={() =>\n !option.disabled && handleSelect(option.value)\n }\n role=\"option\"\n aria-selected={value === option.value}\n >\n <div className=\"flex items-center space-x-2\">\n {option.icon && (\n <span className=\"flex-shrink-0\">{option.icon}</span>\n )}\n <div className=\"flex-1\">\n <div className=\"font-medium\">{option.label}</div>\n {option.description && (\n <div className=\"text-sm text-gray\">\n {option.description}\n </div>\n )}\n </div>\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n )}\n </div>\n </Stack>\n </Stack>\n );\n }\n);\n\nSelectBox.displayName = \"SelectBox\";\n\nexport default SelectBox;\n","import { ColorType } from \"../../theme\";\n\nfunction ColorIcArrow({\n isOpen = false,\n rotate = 0,\n width = 14,\n height = 14,\n color = \"primary\",\n}: {\n isOpen?: boolean;\n rotate?: number;\n width?: number;\n height?: number;\n color?: ColorType;\n}) {\n const rotateAngle = isOpen ? 90 : 0;\n const finalRotate = rotate + rotateAngle;\n\n return (\n <span\n className=\"cursor-pointer\"\n style={{\n color: `var(--color-${color})`,\n transform: `rotate(${finalRotate}deg)`,\n transition: \"transform 200ms\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4.38402 1.8246C4.46631 1.74231 4.58724 1.74171 4.67015 1.82264V1.82362L9.61351 6.85487L9.61546 6.85585C9.69844 6.93882 9.69844 7.06096 9.61546 7.14393L9.61351 7.14589L4.6721 12.1752C4.62893 12.2184 4.56875 12.2424 4.52855 12.2426C4.47778 12.2426 4.43387 12.2297 4.37425 12.1849C4.30224 12.1026 4.30507 11.9888 4.38402 11.9096L4.38695 11.9066L8.9807 7.2035L9.17992 6.9994L8.97972 6.7953L4.38597 2.11464L4.38402 2.11268L4.35765 2.07948C4.30316 1.99948 4.3114 1.89721 4.38402 1.8246Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth=\"0.583333\"\n />\n </svg>\n </span>\n );\n}\n\nexport default ColorIcArrow;\n","import React, { forwardRef, useState, useRef, useEffect } from \"react\";\nimport { Label } from \"../Label\";\nimport { toRemFunction } from \"../../../utils/helperUtils\";\nimport ColorIcArrow from \"../../../assets/colorIcon/ColorIcArrow\";\nimport { CommonFormDataProps } from \"../../../types/common\";\nimport { Checkbox } from \"../Checkbox\";\nimport { Divider } from \"../Divider\";\nimport { Button } from \"../Button\";\nimport { Stack } from \"../Stack\";\nimport { Text } from \"../Text\";\n\nexport interface MultiSelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n color?: string; // 색상 옵션 추가\n}\n\nexport interface MultiSelectCheckboxProps extends CommonFormDataProps {\n options: MultiSelectOption[];\n value?: (string | number)[];\n onChange?: (value: (string | number)[]) => void;\n onConfirm?: (value: (string | number)[]) => void; // 선택 완료 버튼 클릭시 호출\n onFocus?: () => void;\n onBlur?: () => void;\n onEmptyClick?: () => void; // 데이터가 없을 때 콜백\n id?: string;\n confirmButtonText?: string; // 하단 버튼 텍스트 (기본값: \"선택 완료\")\n}\n\nconst MultiSelectCheckbox = forwardRef<\n HTMLDivElement,\n MultiSelectCheckboxProps\n>(\n (\n {\n isDot = true,\n label,\n error,\n fullWidth = false,\n options,\n id,\n direction = \"row\",\n className = \"\",\n placeholder = \"선택하세요\",\n value = [],\n onChange,\n onConfirm,\n onFocus,\n onBlur,\n onEmptyClick,\n disabled = false,\n required = false,\n customWidth,\n labelHidden,\n emptyMessage = \"데이터가 없습니다\",\n labelWidth,\n tooltip,\n confirmButtonText = \"선택 완료\",\n },\n ref\n ) => {\n // value를 안전하게 배열로 변환하는 헬퍼 함수\n const toSafeArray = (\n val: (string | number)[] | string | undefined\n ): (string | number)[] => {\n if (Array.isArray(val)) return val;\n if (typeof val === \"string\" && val.length > 0) {\n // 쉼표로 구분된 문자열이면 split해서 배열로 변환\n return val\n .split(\",\")\n .map((v) => v.trim())\n .filter((v) => v !== \"\");\n }\n return [];\n };\n\n const [isOpen, setIsOpen] = useState(false);\n const [tempSelectedValues, setTempSelectedValues] = useState<\n (string | number)[]\n >(toSafeArray(value));\n const [originalValues, setOriginalValues] = useState<(string | number)[]>(\n toSafeArray(value)\n ); // 드롭다운이 열릴 때의 원래 값 저장\n const [dropdownPosition, setDropdownPosition] = useState<\"bottom\" | \"top\">(\n \"bottom\"\n );\n const dropdownRef = useRef<HTMLDivElement>(null);\n const selectButtonRef = useRef<HTMLDivElement>(null);\n\n const selectId =\n id || `multi-select-${Math.random().toString(36).substring(2, 9)}`;\n\n // value가 변경되면 tempSelectedValues와 originalValues도 업데이트\n useEffect(() => {\n const safeValue = toSafeArray(value);\n setTempSelectedValues(safeValue);\n setOriginalValues(safeValue);\n }, [value]);\n\n // 선택된 옵션들의 라벨 표시\n const getDisplayText = () => {\n if (!tempSelectedValues || tempSelectedValues.length === 0) {\n return placeholder;\n }\n if (tempSelectedValues.length === options.length) {\n return \"전체\";\n }\n if (tempSelectedValues.length === 1) {\n const selectedOption = options.find(\n (opt) => opt.value === tempSelectedValues[0]\n );\n return selectedOption?.label || placeholder;\n }\n return `${tempSelectedValues.length}개 선택됨`;\n };\n\n const calculateMinWidth = () => {\n if (!options.length) return \"auto\";\n const maxLength = Math.max(\n ...options.map((option) => option.label.length),\n placeholder.length\n );\n const calculatedWidth = Math.min(Math.max(maxLength * 8 + 80, 120), 400);\n return `${calculatedWidth}px`;\n };\n\n const minWidth = calculateMinWidth();\n\n const calculateDropdownPosition = () => {\n if (!selectButtonRef.current) return \"bottom\";\n\n const selectRect = selectButtonRef.current.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const dropdownHeight = Math.min(320, options.length * 40 + 100);\n\n const spaceBelow = viewportHeight - selectRect.bottom;\n const spaceAbove = selectRect.top;\n\n if (spaceBelow >= dropdownHeight) {\n return \"bottom\";\n } else if (spaceAbove >= dropdownHeight) {\n return \"top\";\n } else {\n return spaceBelow > spaceAbove ? \"bottom\" : \"top\";\n }\n };\n\n useEffect(() => {\n if (isOpen) {\n const position = calculateDropdownPosition();\n setDropdownPosition(position);\n }\n }, [isOpen, options.length]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n // 외부 클릭 시 원래 값으로 복원\n setTempSelectedValues(originalValues);\n onChange?.(originalValues);\n setIsOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [originalValues, onChange]);\n\n const handleButtonClick = () => {\n if (disabled) return;\n\n if (!options || options.length === 0) {\n // 얼럿 대체 : 데이터가 없을 때 콜백 호출\n onEmptyClick?.();\n } else {\n if (!isOpen) {\n // 드롭다운을 열 때 현재 값을 백업\n setOriginalValues(tempSelectedValues);\n }\n setIsOpen(!isOpen);\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (event.key) {\n case \"Enter\":\n case \" \":\n event.preventDefault();\n handleButtonClick();\n break;\n case \"Escape\":\n // Escape 키로 닫을 때도 원래 값으로 복원\n setTempSelectedValues(originalValues);\n onChange?.(originalValues);\n setIsOpen(false);\n break;\n }\n };\n\n // 전체 선택/해제\n const handleSelectAll = () => {\n // disabled되지 않은 옵션만 선택\n const enabledOptions = options.filter((opt) => !opt.disabled);\n const allEnabledValues = enabledOptions.map((opt) => opt.value);\n\n // 모든 활성화된 옵션이 선택되었는지 확인\n const allEnabledSelected = enabledOptions.every((opt) =>\n tempSelectedValues.includes(opt.value)\n );\n\n if (allEnabledSelected) {\n // 전체 해제\n setTempSelectedValues([]);\n onChange?.([]);\n } else {\n // 전체 선택\n setTempSelectedValues(allEnabledValues);\n onChange?.(allEnabledValues);\n }\n };\n\n // 개별 체크박스 토글\n const handleCheckboxChange = (optionValue: string | number) => {\n const newValues = tempSelectedValues.includes(optionValue)\n ? tempSelectedValues.filter((v) => v !== optionValue)\n : [...tempSelectedValues, optionValue];\n\n setTempSelectedValues(newValues);\n onChange?.(newValues);\n };\n\n // 선택 완료 버튼 클릭\n const handleConfirm = () => {\n // 선택 완료 시 originalValues 업데이트 (다음에 열 때의 기준값)\n setOriginalValues(tempSelectedValues);\n setIsOpen(false);\n onConfirm?.(tempSelectedValues);\n };\n\n // disabled되지 않은 옵션들이 모두 선택되었는지 확인\n const enabledOptions = options.filter((opt) => !opt.disabled);\n const isAllSelected =\n enabledOptions.length > 0 &&\n enabledOptions.every((opt) => tempSelectedValues.includes(opt.value));\n\n return (\n <Stack\n ref={ref}\n direction={direction}\n wFull={fullWidth}\n gap={direction === \"row\" ? 14 : 4}\n align={direction === \"row\" ? \"center\" : \"start\"}\n >\n <Label\n isDot={isDot}\n label={label}\n required={required}\n inputId={selectId}\n labelHidden={labelHidden}\n width={labelWidth}\n tooltip={tooltip}\n />\n <Stack\n gap={10}\n className=\"flex-auto relative\"\n wFull={direction === \"row\" ? false : fullWidth}\n >\n <div\n ref={dropdownRef}\n className={`relative ${fullWidth ? \"w-full\" : \"\"}`}\n style={\n !fullWidth\n ? {\n minWidth,\n width: customWidth\n ? `${toRemFunction(customWidth)}`\n : \"100%\",\n }\n : {}\n }\n >\n <div\n ref={selectButtonRef}\n id={selectId}\n className={`\n relative w-full px-12 h-36 text-left border rounded-md cursor-pointer\n content-center leading-none\n ${error ? \"border-red\" : \"border-line\"}\n ${\n disabled\n ? \"text-dark5 cursor-not-allowed bg-gray1 border-line\"\n : \"focus:border-primary bg-white\"\n }\n ${className}\n `}\n onClick={handleButtonClick}\n onKeyDown={handleKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n tabIndex={disabled ? -1 : 0}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-labelledby={label ? `${selectId}-label` : undefined}\n aria-required={required}\n >\n <div className=\"flex items-center justify-between h-full\">\n <span\n className={`block truncate leading-36 ${\n tempSelectedValues.length === 0\n ? \"text-secondaryText\"\n : \"text-primaryText\"\n }`}\n >\n {getDisplayText()}\n </span>\n <ColorIcArrow\n isOpen={isOpen}\n rotate={isOpen ? 270 : 90}\n color=\"text\"\n />\n </div>\n </div>\n\n {isOpen && (\n <div\n className={`absolute z-50 w-full bg-white border border-line rounded-md shadow-sm\n ${dropdownPosition === \"bottom\" ? \"mt-2\" : \"mb-2 bottom-full\"}\n `}\n >\n {/* 전체 선택 체크박스 */}\n <div\n className=\" py-8 px-16 cursor-pointer hover:bg-gray1\"\n onClick={(e) => {\n e.stopPropagation();\n handleSelectAll();\n }}\n >\n <div className=\"flex items-center gap-8 pointer-events-none\">\n <Checkbox checked={isAllSelected} onChange={() => {}} />\n <Text>전체</Text>\n </div>\n </div>\n <div className=\"px-10\">\n <Divider />\n </div>\n\n {/* 옵션 리스트 */}\n <div className=\"max-h-200 overflow-auto py-4\">\n <ul role=\"listbox\">\n {options.map((option) => {\n const isChecked = tempSelectedValues.includes(\n option.value\n );\n return (\n <li\n key={option.value}\n className={`\n relative select-none py-7 px-16\n ${\n option.disabled\n ? \"text-text cursor-not-allowed bg-gray-50\"\n : \"text-text hover:bg-gray1 cursor-pointer\"\n }\n `}\n onClick={(e) => {\n e.stopPropagation();\n if (!option.disabled) {\n handleCheckboxChange(option.value);\n }\n }}\n role=\"option\"\n aria-selected={isChecked}\n >\n <div className=\"flex items-center gap-8 pointer-events-none\">\n <Checkbox\n checked={isChecked}\n onChange={() => {}}\n disabled={option.disabled}\n />\n {option.color && (\n <div\n className={`w-16 h-16 rounded-full flex-shrink-0 bg-${option.color}`}\n />\n )}\n <Text>{option.label}</Text>\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n\n {/* 선택 완료 버튼 */}\n <div className=\"px-10\">\n <Divider />\n </div>\n <div className=\" p-9\">\n <Stack direction=\"row\" align=\"end\" justify=\"end\" wFull>\n <Button\n variant=\"lower\"\n size=\"medium\"\n onClick={handleConfirm}\n >\n {confirmButtonText}\n </Button>\n </Stack>\n </div>\n </div>\n )}\n </div>\n </Stack>\n </Stack>\n );\n }\n);\n\nMultiSelectCheckbox.displayName = \"MultiSelectCheckbox\";\n\nexport default MultiSelectCheckbox;\n","import { ColorType } from \"../../theme\";\n\nfunction ColorIcFormArrow({\n isOpen = false,\n rotate = 0,\n width = 16,\n height = 16,\n color = \"secondaryText\",\n}: {\n isOpen?: boolean;\n rotate?: number;\n width?: number;\n height?: number;\n color?: ColorType;\n}) {\n const rotateAngle = isOpen ? 180 : 0;\n const finalRotate = rotate + rotateAngle;\n\n return (\n <span\n className=\"cursor-pointer\"\n style={{\n color: `var(--color-${color})`,\n transform: `rotate(${finalRotate}deg)`,\n transition: \"transform 200ms\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.5854 4.9856C13.6683 4.90272 13.7851 4.89236 13.8765 4.95435L13.9146 4.9856C14.0086 5.07977 14.0094 5.21801 13.9165 5.31274L8.1665 10.9622L8.16455 10.9641C8.06824 11.0604 8.02264 11.0667 7.99951 11.0667C7.93967 11.0666 7.88852 11.0508 7.81689 10.9954L2.0835 5.36255C2.0024 5.2798 1.9927 5.16414 2.0542 5.07349L2.08545 5.0354C2.16829 4.95264 2.28515 4.94226 2.37646 5.00415L2.41455 5.0354L2.41748 5.03833L7.76709 10.2639L8.00146 10.4924L8.23389 10.262L13.5835 4.98755L13.5854 4.9856Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth=\"0.666667\"\n />\n </svg>\n </span>\n );\n}\n\nexport default ColorIcFormArrow;\n","import ColorIcFormArrow from \"../../../assets/colorIcon/ColorIcFormArrow\";\n\nexport interface PagingProps {\n page: number;\n total: number;\n limit: number;\n onPageChange: (page: number) => void;\n}\n\nfunction getPagination(current: number, total: number) {\n const pages: (number | string)[] = [];\n if (total <= 7) {\n for (let i = 1; i <= total; i++) pages.push(i);\n return pages;\n }\n if (current <= 4) {\n pages.push(1, 2, 3, 4, 5, \"...\", total);\n } else if (current >= total - 3) {\n pages.push(1, \"...\", total - 4, total - 3, total - 2, total - 1, total);\n } else {\n pages.push(1, \"...\", current - 1, current, current + 1, \"...\", total);\n }\n return pages;\n}\n\nexport default function Paging({\n page,\n total,\n limit,\n onPageChange,\n}: PagingProps) {\n const totalPages = Math.ceil(total / limit);\n const pages = getPagination(page, totalPages);\n\n if (!total) return <></>;\n\n return (\n <div className=\"flex items-center justify-center gap-2 mt-8\">\n <span\n onClick={() => {\n if (page === 1) return;\n onPageChange(page - 2);\n }}\n className={`rounded flex p-6 ${\n page === 1 ? \"opacity-0 \" : \"cursor-pointer \"\n } hover:bg-gray2`}\n >\n <ColorIcFormArrow rotate={90} />\n </span>\n {pages.map((p, i) =>\n typeof p === \"number\" ? (\n <span\n key={p}\n onClick={() => onPageChange(p - 1)}\n className={`inline-block rounded h-24 w-24 pt-5 text-center leading-none text-body16 ${\n page === p\n ? \"bg-primary text-white cursor-not-allowed\"\n : \"text-text cursor-pointer\"\n }`}\n >\n {p}\n </span>\n ) : (\n <span\n key={`ellipsis-${i}`}\n className=\"px-10 inline-block text-gray-400 text-lg\"\n >\n ...\n </span>\n )\n )}\n <span\n onClick={() => {\n if (page === totalPages) return;\n onPageChange(page);\n }}\n className={`rounded flex p-6 ${\n page === totalPages ? \"opacity-0 \" : \"cursor-pointer\"\n } hover:bg-gray2`}\n >\n <ColorIcFormArrow rotate={270}/>\n </span>\n </div>\n );\n}\n","import React, { forwardRef } from \"react\";\nimport { toRemFunction } from \"../../../utils/helperUtils\";\n\nexport interface RadioProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n className?: string;\n radioWidth?: number;\n}\n\nconst Radio = forwardRef<HTMLInputElement, RadioProps>(\n (\n { label, error, className = \"\", id, radioWidth, checked, ...props },\n ref\n ) => {\n const radioId = id || `radio-${Math.random().toString(36).substring(2, 9)}`;\n\n return (\n <div\n className=\"flex items-center h-36\"\n style={{\n width: radioWidth ? `${toRemFunction(radioWidth)}` : \"auto\",\n }}\n >\n <div className=\"relative flex items-center gap-10\">\n <div className=\"flex items-center\">\n <input\n ref={ref}\n id={radioId}\n type=\"radio\"\n className=\"sr-only\"\n checked={checked}\n {...props}\n />\n\n <label\n htmlFor={radioId}\n className={`\n relative flex items-center justify-center w-20 h-20 rounded-full cursor-pointer\n border transition-all duration-100\n ${checked ? \"bg-primary border-primary\" : \"bg-line border-line\"}\n ${error ? \"border-red\" : \"\"}\n ${props.disabled ? \"opacity-50 cursor-not-allowed\" : \"\"}\n ${className}\n `}\n >\n <div\n className={` bg-white rounded-full items-center ${\n checked ? \"w-10 h-10 border-primary\" : \"w-18 h-18 border-line\"\n }`}\n ></div>\n </label>\n </div>\n {label && (\n <div className=\"text-sm\">\n <label\n htmlFor={radioId}\n className=\"text-body14 text-primaryText cursor-pointer\"\n >\n {label}\n </label>\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nRadio.displayName = \"Radio\";\n\nexport default Radio;\n","import { formatDate, formatDateTime, toRemFunction } from \"../../../utils/helperUtils\";\nimport { Text } from \"../Text\";\nimport { ColumnDef } from \"../../../types/table\";\nimport { Input } from \"../Input\";\nimport { useState, useEffect } from \"react\";\nimport { IcSortArrowUp, IcSortArrowDown } from \"../../../assets\";\nimport { formatNumberWithComma } from \"../../../utils/helperUtils\";\nimport { Stack } from \"../Stack\";\nimport { Checkbox } from \"../Checkbox\";\nimport { RequiredDot } from \"../RequiredDot\";\nimport { Radio } from \"../Radio\";\nimport React from \"react\";\n\nexport interface TableProps<T> {\n columns: ColumnDef<T>[]; // 컬럼 정의\n datas?: T[]; // 데이터\n footers?: React.ReactNode | null; // 푸터\n \n // 테이블 전역 옵션\n isRadioOption?: boolean; // 라디오 옵션 기능\n isCheckboxOption?: boolean; // 체크박스 기능\n isModify?: boolean; // 편집 기능\n overWidth?: number; // 스크롤해야하는 테이블 너비\n emptyMessage?: string; // 빈 메시지\n \n // 조건 및 핸들러\n disabledCheckboxCondition?: (data: T) => boolean; // 체크박스 disabled 조건\n onButtonClick?: (id: number, value: string, key: string) => void; // 버튼 클릭 시 호출\n onLinkClick?: (id: number, value: string, key: string) => void; // 링크 클릭 시 호출\n onChangeInput?: (id: number, value: string, headerKey: string) => void; // 인풋 변경 시 호출\n onChangeCheckbox?: (id: number, value: boolean, headerKey: string) => void; // 체크박스 변경 시 호출\n onChangeToggle?: (id: number, value: boolean, headerKey: string) => void; // 토글 변경 시 호출\n onCheckboxOption?: (selectedIds: string[] | number[]) => void; // 제일 앞에있는 체크박스 옵션 체크 시 호출\n onRadioOption?: (selectedId: string) => void; // 라디오 옵션 체크 시 호출\n onMoveUp?: (id: string) => void; // 위로 이동 시 호출\n onMoveDown?: (id: string) => void; // 아래로 이동 시 호출\n onSort?: (key: string, direction: \"asc\" | \"desc\" | \"none\") => void; // 정렬 시 호출\n}\n\nfunction Table<T extends Record<string, unknown>>({\n columns,\n datas = [],\n footers,\n isRadioOption = false,\n isCheckboxOption = false,\n isModify = false,\n overWidth,\n emptyMessage = \"데이터가 없습니다.\",\n disabledCheckboxCondition,\n onButtonClick,\n onLinkClick,\n onChangeInput,\n onChangeCheckbox,\n onChangeToggle,\n onCheckboxOption,\n onRadioOption,\n onMoveUp,\n onMoveDown,\n onSort,\n}: TableProps<T>) {\n // columns에서 각 옵션 키들 추출\n const headersKeys = columns.map(col => col.key);\n const linkKeys = columns.filter(col => col.type === 'link').map(col => col.key);\n const dateKeys = columns.filter(col => col.type === 'date').map(col => col.key);\n const dateTimeKeys = columns.filter(col => col.type === 'dateTime').map(col => col.key);\n const amountKeys = columns.filter(col => col.type === 'amount').map(col => col.key);\n const persentKeys = columns.filter(col => col.type === 'percent').map(col => col.key);\n const inputKeys = columns.filter(col => col.type === 'input').map(col => col.key);\n const checkboxKeys = columns.filter(col => col.type === 'checkbox').map(col => col.key);\n const thAlignLeftKeys = columns.filter(col => (col.thAlign || col.align) === 'left').map(col => col.key);\n const thAlignRightKeys = columns.filter(col => (col.thAlign || col.align) === 'right').map(col => col.key);\n const tdAlignLeftKeys = columns.filter(col => (col.tdAlign || col.align) === 'left').map(col => col.key);\n const tdAlignRightKeys = columns.filter(col => (col.tdAlign || col.align) === 'right').map(col => col.key);\n const textBoldKeys = columns.filter(col => col.bold).map(col => col.key);\n const noWrapKeys = columns.filter(col => col.noWrap).map(col => col.key);\n const requiredKeys = columns.filter(col => col.required).map(col => col.key);\n const importantColorKeys = columns.filter(col => col.important).map(col => col.key);\n const sortKeys = columns.filter(col => col.sortable).map(col => col.key);\n const mergeDuplicateKeys = columns.filter(col => col.mergeDuplicate).map(col => col.key);\n const [selectedIds, setSelectedIds] = useState<string[]>([]);\n const [sortState, setSortState] = useState<{\n key: string;\n direction: \"asc\" | \"desc\" | \"none\";\n } | null>(null);\n\n // 전체 선택/해제 상태 (disabled 항목 제외)\n const enabledDatas = datas.filter(\n (data) => !disabledCheckboxCondition?.(data)\n );\n const isAllSelected =\n enabledDatas.length > 0 && selectedIds.length === enabledDatas.length;\n\n // 중복 셀 병합을 위한 헬퍼 함수들\n const getCellSpan = (\n rowIndex: number,\n colIndex: number,\n headerKey: string\n ): number => {\n if (!mergeDuplicateKeys.includes(headerKey)) return 1;\n\n const currentRow = datas[rowIndex];\n const currentOrderNo = currentRow[\"orderNo\"];\n const currentValue = JSON.stringify(currentRow[headerKey]);\n let span = 1;\n\n // orderNo가 같은 행들 중에서 현재 컬럼 값이 같은 연속된 행들을 찾기\n for (let i = rowIndex + 1; i < datas.length; i++) {\n const nextRow = datas[i];\n const nextOrderNo = nextRow[\"orderNo\"];\n const nextValue = JSON.stringify(nextRow[headerKey]);\n\n // orderNo가 다르면 병합 중단\n if (JSON.stringify(nextOrderNo) !== JSON.stringify(currentOrderNo)) {\n break;\n }\n\n // orderNo는 같지만 현재 컬럼 값이 다르면 병합 중단\n if (nextValue !== currentValue) {\n break;\n }\n\n span++;\n }\n\n return span;\n };\n\n // 병합된 셀의 보더 스타일을 위한 클래스 생성\n const getMergedCellClassName = (rowSpan: number): string => {\n if (rowSpan <= 1) return \"border-b border-line px-20 py-8\";\n\n // 병합된 셀의 경우 오른쪽 보더를 강제로 표시\n return \"border-b border-r border-line px-20 py-8\";\n };\n\n const shouldRenderCell = (\n rowIndex: number,\n colIndex: number,\n headerKey: string\n ): boolean => {\n if (!mergeDuplicateKeys.includes(headerKey)) return true;\n\n // 바로 위 행에 같은 orderNo와 같은 값이 있는지 확인\n if (rowIndex > 0) {\n const currentRow = datas[rowIndex];\n const previousRow = datas[rowIndex - 1];\n\n const currentOrderNo = currentRow[\"orderNo\"];\n const previousOrderNo = previousRow[\"orderNo\"];\n const currentValue = JSON.stringify(currentRow[headerKey]);\n const previousValue = JSON.stringify(previousRow[headerKey]);\n\n // orderNo가 같고 현재 컬럼 값도 같으면 렌더링하지 않음 (병합됨)\n if (\n JSON.stringify(currentOrderNo) === JSON.stringify(previousOrderNo) &&\n currentValue === previousValue\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n // 전체 선택/해제 핸들러\n const handleSelectAll = () => {\n if (isAllSelected) {\n setSelectedIds([]);\n onCheckboxOption?.([]);\n } else {\n // disabled가 아닌 항목들만 선택\n const enabledIds = enabledDatas\n .map((data) => data.id as number)\n .filter(Boolean);\n setSelectedIds(enabledIds.map(String));\n onCheckboxOption?.(enabledIds.map(String));\n }\n };\n\n // 개별 체크박스 핸들러\n const handleSelectItem = (id: string) => {\n // disabled 조건 확인\n const data = datas.find((item) => String(item.id) === id);\n if (data && disabledCheckboxCondition?.(data)) {\n return;\n }\n\n const newSelectedIds = selectedIds.includes(id)\n ? selectedIds.filter((selectedId) => selectedId !== id)\n : [...selectedIds, id];\n\n setSelectedIds(newSelectedIds);\n onCheckboxOption?.(newSelectedIds);\n };\n\n // 개별 라디오 핸들러\n const handleSelectRadioItem = (id: string) => {\n setSelectedIds([id]);\n onRadioOption?.(id);\n };\n\n // 위로 이동 핸들러\n const handleMoveUp = (id: string) => {\n onMoveUp?.(id);\n };\n\n // 아래로 이동 핸들러\n const handleMoveDown = (id: string) => {\n onMoveDown?.(id);\n };\n\n // 정렬 핸들러\n const handleSort = (key: string) => {\n if (!sortKeys.includes(key)) return;\n\n let newDirection: \"asc\" | \"desc\" | \"none\";\n\n if (sortState?.key === key) {\n // 같은 컬럼 클릭 시: asc -> desc -> none -> asc 순환\n if (sortState.direction === \"asc\") {\n newDirection = \"desc\";\n } else if (sortState.direction === \"desc\") {\n newDirection = \"none\";\n } else {\n newDirection = \"asc\";\n }\n } else {\n // 다른 컬럼 클릭 시: asc로 시작\n newDirection = \"asc\";\n }\n\n if (newDirection === \"none\") {\n setSortState(null);\n } else {\n setSortState({ key, direction: newDirection });\n }\n\n // 부모 컴포넌트에 정렬 이벤트 전달\n onSort?.(key, newDirection);\n };\n\n // 데이터 정렬 함수\n const getSortedData = (\n data: T[],\n sortKey: string,\n direction: \"asc\" | \"desc\" | \"none\"\n ): T[] => {\n if (!sortKey || direction === \"none\") return data;\n\n return [...data].sort((a, b) => {\n const aValue = a[sortKey];\n const bValue = b[sortKey];\n\n // null/undefined 처리\n if (aValue === null || aValue === undefined)\n return direction === \"asc\" ? -1 : 1;\n if (bValue === null || bValue === undefined)\n return direction === \"asc\" ? 1 : -1;\n\n // 숫자 타입 처리\n if (typeof aValue === \"number\" && typeof bValue === \"number\") {\n return direction === \"asc\" ? aValue - bValue : bValue - aValue;\n }\n\n // 날짜 타입 처리\n if (dateKeys.includes(sortKey)) {\n const aDate = new Date(String(aValue)).getTime();\n const bDate = new Date(String(bValue)).getTime();\n return direction === \"asc\" ? aDate - bDate : bDate - aDate;\n }\n\n // 날짜 시간 타입 처리\n if (dateTimeKeys.includes(sortKey)) {\n const aDate = new Date(String(aValue)).getTime();\n const bDate = new Date(String(bValue)).getTime();\n return direction === \"asc\" ? aDate - bDate : bDate - aDate;\n }\n\n // 문자열 타입 처리\n const aString = String(aValue).toLowerCase();\n const bString = String(bValue).toLowerCase();\n\n if (aString < bString) return direction === \"asc\" ? -1 : 1;\n if (aString > bString) return direction === \"asc\" ? 1 : -1;\n return 0;\n });\n };\n\n // 정렬된 데이터 가져오기\n const sortedData = sortState\n ? getSortedData(datas, sortState.key, sortState.direction)\n : datas;\n\n // 데이터가 변경될 때 선택된 ID들 정리\n useEffect(() => {\n const currentIds = sortedData\n .map((data) => String(data.id))\n .filter(Boolean);\n const validSelectedIds = selectedIds.filter((id) =>\n currentIds.includes(id)\n );\n if (validSelectedIds.length !== selectedIds.length) {\n setSelectedIds(validSelectedIds);\n onCheckboxOption?.(validSelectedIds);\n }\n }, [sortedData, selectedIds, onCheckboxOption]);\n\n const cellData = (\n data: T,\n headerKey: string,\n rowIndex: number,\n colIndex: number\n ) => {\n const value = data[headerKey];\n\n // 중복 셀 병합이 활성화된 경우 렌더링 여부 확인\n if (!shouldRenderCell(rowIndex, colIndex, headerKey)) {\n return null;\n }\n\n const rowSpan = getCellSpan(rowIndex, colIndex, headerKey);\n \n // 🔥 커스텀 render 함수가 있으면 우선 사용\n const column = columns.find(col => col.key === headerKey);\n if (column?.render) {\n return (\n <td\n key={`${rowIndex}-${colIndex}`}\n className={`${getMergedCellClassName(rowSpan)} ${\n tdAlignLeftKeys?.includes(headerKey)\n ? \"text-left\"\n : tdAlignRightKeys?.includes(headerKey)\n ? \"text-right\"\n : \"text-center\"\n } ${noWrapKeys?.includes(headerKey) ? \"whitespace-nowrap\" : \"\"} ${\n textBoldKeys?.includes(headerKey) ? \"font-bold\" : \"\"\n } ${column.tdClassName || \"\"}`}\n rowSpan={rowSpan > 1 ? rowSpan : undefined}\n >\n {column.render(value, data, rowIndex)}\n </td>\n );\n }\n\n /**\n * input 형식\n */\n if (inputKeys?.includes(headerKey)) {\n return (\n <td\n key={`${rowIndex}-${colIndex}`}\n className={`${getMergedCellClassName(rowSpan)} ${\n tdAlignLeftKeys?.includes(headerKey)\n ? \"text-left\"\n : tdAlignRightKeys?.includes(headerKey)\n ? \"text-right\"\n : \"text-center\"\n } ${noWrapKeys?.includes(headerKey) ? \"whitespace-nowrap\" : \"\"}`}\n rowSpan={rowSpan > 1 ? rowSpan : undefined}\n >\n <Stack direction=\"row\" gap={4} align=\"center\" justify=\"center\">\n <Input\n type=\"number\"\n textAlign=\"right\"\n direction=\"row\"\n value={String(value)}\n customWidth={120}\n // fullWidth={true}\n onChange={(e) => {\n onChangeInput?.(\n data.id as number,\n String(e.target.value),\n headerKey\n );\n }}\n />\n <Text>원</Text>\n </Stack>\n </td>\n );\n }\n /**\n * 체크박스 형식\n */\n if (checkboxKeys?.includes(headerKey)) {\n return (\n <td\n key={`${rowIndex}-${colIndex}`}\n className={`${getMergedCellClassName(rowSpan)} ${\n noWrapKeys?.includes(headerKey) ? \"whitespace-nowrap\" : \"\"\n }`}\n rowSpan={rowSpan > 1 ? rowSpan : undefined}\n >\n <Stack direction=\"row\" gap={4} align=\"center\" justify=\"start\">\n <Checkbox\n checked={value as boolean}\n onChange={(e) =>\n onChangeCheckbox?.(\n data.id as number,\n e.target.checked,\n headerKey\n )\n }\n />\n </Stack>\n </td>\n );\n }\n /**\n * 금액 형식\n */\n if (amountKeys?.includes(headerKey)) {\n return (\n <td\n key={`${rowIndex}-${colIndex}`}\n className={`${getMergedCellClassName(rowSpan)} ${\n tdAlignLeftKeys?.includes(headerKey)\n ? \"text-left\"\n : tdAlignRightKeys?.includes(headerKey)\n ? \"text-right\"\n : \"text-center\"\n } ${noWrapKeys?.includes(headerKey) ? \"whitespace-nowrap\" : \"\"}`}\n rowSpan={rowSpan > 1 ? rowSpan : undefined}\n >\n {formatNumberWithComma(String(value))}원\n </td>\n );\n }\n\n /**\n * 날짜 형식\n */\n if (dateKeys?.includes(headerKey)) {\n return (\n <td\n key={`${rowIndex}-${colIndex}`}\n className={`${getMergedCellClassName(rowSpan)} ${\n tdAlignLeftKeys?.includes(headerKey)\n ? \"text-left\"\n : tdAlignRightKeys?.includes(headerKey)\n ? \"text-right\"\n : \"text-center\"\n } ${noWrapKeys?.includes(headerKey) ? \"whitespace-nowrap\" : \"\"}`}\n rowSpan={rowSpan > 1 ? rowSpan : undefined}\n >\n {formatDate(String(value))}\n </td>\n );\n }\n\n /**\n * 날짜 시간 형식\n */\n if (dateTimeKeys?.includes(headerKey)) {\n return (\n <td\n key={`${rowIndex}-${colIndex}`}\n className={`${getMergedCellClassName(rowSpan)} ${\n tdAlignLeftKeys?.includes(headerKey)\n ? \"text-left\"\n : tdAlignRightKeys?.includes(headerKey)\n ? \"text-right\"\n : \"text-center\"\n } ${noWrapKeys?.includes(headerKey) ? \"whitespace-nowrap\" : \"\"}`}\n rowSpan={rowSpan > 1 ? rowSpan : undefined}\n >\n {value ? formatDateTime(String(value)) : \"-\"}\n </td>\n );\n }\n\n /**\n * 커스텀 셀 컴포넌트 형식 (reactNodeConfig에 설정된 경우)\n */\n // const nodeConfig = reactNodeConfig?.[headerKey];\n // if (nodeConfig) {\n // const componentType = nodeConfig.type;\n\n // // 컴포넌트 타입을 TableCellComponentKey로 매핑\n // const componentKeyMap: Record<\n // ReactNodeComponentType,\n // TableCellComponentKey\n // > = {\n // toggle: \"active\",\n // buttons: \"tableButtons\",\n // tags: \"tableTags\",\n // textOverflow: \"textOverflow\",\n // textArrowButton: \"textArrowButton\",\n // };\n\n // const componentKey = componentKeyMap[componentType];\n // let componentProps: TableCellComponentPropsMap[TableCellComponentKey];\n\n // // 컴포넌트 타입별로 props 구성\n // if (componentType === \"buttons\") {\n // componentProps = {\n // buttons: value as TableButtonType[],\n // } as unknown as TableCellComponentPropsMap[TableCellComponentKey];\n // } else if (componentType === \"tags\") {\n // componentProps = {\n // tags: value as TableTagType[],\n // } as unknown as TableCellComponentPropsMap[TableCellComponentKey];\n // } else if (componentType === \"toggle\") {\n // // toggle인 경우 boolean 값 또는 TableToggleType 객체를 처리\n // const toggleValue = value as boolean | TableToggleType;\n // if (typeof toggleValue === \"boolean\") {\n // // boolean인 경우 onChangeToggle 핸들러를 사용하여 부모 컴포넌트에 알림\n // componentProps = {\n // checked: toggleValue,\n // onChange: (checked: boolean) => {\n // onChangeToggle?.(data.id as number, checked, headerKey);\n // },\n // } as unknown as TableCellComponentPropsMap[TableCellComponentKey];\n // } else {\n // // 객체인 경우 이미 onChange가 포함되어 있으므로 그대로 사용\n // componentProps =\n // toggleValue as TableCellComponentPropsMap[TableCellComponentKey];\n // }\n // } else if (componentType === \"textOverflow\") {\n // componentProps =\n // value as TableCellComponentPropsMap[TableCellComponentKey];\n // } else if (componentType === \"textArrowButton\") {\n // componentProps =\n // value as TableCellComponentPropsMap[TableCellComponentKey];\n // } else {\n // componentProps =\n // value as TableCellComponentPropsMap[TableCellComponentKey];\n // }\n\n // return (\n // <td\n // key={`${rowIndex}-${colIndex}`}\n // className={`${getMergedCellClassName(rowSpan)} ${\n // tdAlignLeftKeys?.includes(headerKey)\n // ? \"text-left\"\n // : tdAlignRightKeys?.includes(headerKey)\n // ? \"text-right\"\n // : \"text-center\"\n // } ${noWrapKeys?.includes(headerKey) ? \"whitespace-nowrap\" : \"\"}`}\n // rowSpan={rowSpan > 1 ? rowSpan : undefined}\n // >\n // {renderTableCellComponent(componentKey, componentProps)}\n // </td>\n // );\n // }\n\n /**\n * ReactNode 타입 체크 (React 엘리먼트, 문자열, 숫자, 배열 등)\n */\n if (React.isValidElement(value)) {\n return (\n <td\n key={`${rowIndex}-${colIndex}`}\n className={`${getMergedCellClassName(rowSpan)} ${\n tdAlignLeftKeys?.includes(headerKey)\n ? \"text-left\"\n : tdAlignRightKeys?.includes(headerKey)\n ? \"text-right\"\n : \"text-center\"\n } ${noWrapKeys?.includes(headerKey) ? \"whitespace-nowrap\" : \"\"}`}\n rowSpan={rowSpan > 1 ? rowSpan : undefined}\n >\n {value}\n </td>\n );\n }\n\n /**\n * 일반 텍스트\n */\n let cellContent: React.ReactNode = value?.toString() || \"\";\n\n /**\n * 퍼센트 유닛 추가\n */\n if (persentKeys?.includes(headerKey)) {\n cellContent = `${formatNumberWithComma(String(value))}%`;\n }\n\n /**\n * 객체, 링크 처리\n */\n if (typeof value === \"object\" && value !== null) {\n // object인 경우 각 키-값을 적절히 렌더링\n // 이미지 필드는 img 태그로, 텍스트는 span으로 렌더링\n cellContent = (\n <Stack direction=\"row\" gap={8} align=\"center\">\n {Object.entries(value as Record<string, unknown>).map(\n ([key, val], index) => {\n // 이미지 필드인 경우\n if (key === \"image\" && val) {\n return (\n <img\n key={`${key}-${index}`}\n src={String(val)}\n alt=\"상품 이미지\"\n className=\"w-40 h-40 object-cover rounded border border-line\"\n />\n );\n }\n // 텍스트 필드인 경우\n return (\n <span\n key={`${key}-${index}`}\n className={`${key === \"name\" || key === \"title\" ? \"\" : \"\"} `}\n >\n {val?.toString() || \"\"}\n </span>\n );\n }\n )}\n </Stack>\n );\n }\n return (\n <td\n key={`${rowIndex}-${colIndex}`}\n className={`${getMergedCellClassName(rowSpan)} \n ${\n linkKeys?.includes(headerKey) &&\n \"text-primary underline cursor-pointer\"\n }\n ${\n tdAlignLeftKeys?.includes(headerKey)\n ? \"text-left\"\n : tdAlignRightKeys?.includes(headerKey)\n ? \"text-right\"\n : \"text-center\"\n }\n ${noWrapKeys?.includes(headerKey) ? \"whitespace-nowrap\" : \"\"}\n ${textBoldKeys?.includes(headerKey) ? \"font-bold\" : \"\"}\n `}\n rowSpan={rowSpan > 1 ? rowSpan : undefined}\n onClick={() => {\n if (!linkKeys?.includes(headerKey)) {\n return;\n }\n onLinkClick?.(data.id as number, String(value), headerKey);\n }}\n >\n {cellContent}\n </td>\n );\n };\n\n const renderTableBody = () => {\n if (sortedData.length === 0) {\n const colSpanCount =\n headersKeys.length +\n (isCheckboxOption ? 1 : 0) +\n (isRadioOption ? 1 : 0) +\n (isModify ? 1 : 0);\n return (\n <tr>\n <td\n colSpan={colSpanCount}\n className=\"text-center border-b border-line px-20 py-8\"\n >\n {emptyMessage}\n </td>\n </tr>\n );\n }\n\n return sortedData.map((data, rowIndex) => (\n <tr\n key={data.id ? String(data.id) : rowIndex}\n className={`${\n mergeDuplicateKeys.length === 0 ? \"hover:bg-gray1\" : \"\"\n } ${\n isCheckboxOption &&\n mergeDuplicateKeys.length === 0 &&\n selectedIds.includes(String(data.id)) &&\n \"bg-primary5\"\n }`}\n >\n {isCheckboxOption && (\n <td className=\"border-b border-line px-20 py-8 text-center w-30 \">\n <Checkbox\n checked={selectedIds.includes(String(data.id))}\n disabled={disabledCheckboxCondition?.(data) || false}\n onChange={() => handleSelectItem(String(data.id))}\n />\n </td>\n )}\n {isRadioOption && (\n <td className=\"border-b border-line px-20 py-8 text-center w-50\">\n <Radio\n checked={selectedIds.includes(String(data.id))}\n onChange={() => handleSelectRadioItem(String(data.id))}\n />\n </td>\n )}\n {isModify && (\n <td className=\"border-b border-line px-20 py-8 text-center w-60\">\n <div className=\"flex justify-center gap-1\">\n <img\n src={IcSortArrowUp}\n alt=\"위로 이동\"\n className={`w-16 h-16 cursor-pointer ${\n rowIndex === 0\n ? \"opacity-30 cursor-not-allowed\"\n : \"hover:opacity-70\"\n }`}\n onClick={() => {\n if (rowIndex > 0) {\n handleMoveUp(String(data.id));\n }\n }}\n />\n <img\n src={IcSortArrowDown}\n alt=\"아래로 이동\"\n className={`w-16 h-16 cursor-pointer ${\n rowIndex === sortedData.length - 1\n ? \"opacity-30 cursor-not-allowed\"\n : \"hover:opacity-70\"\n }`}\n onClick={() => {\n if (rowIndex < sortedData.length - 1) {\n handleMoveDown(String(data.id));\n }\n }}\n />\n </div>\n </td>\n )}\n {headersKeys\n .map((headerKey, colIndex) => {\n const cell = cellData(data, headerKey, rowIndex, colIndex);\n return cell;\n })\n .filter(Boolean)}\n </tr>\n ));\n };\n\n useEffect(() => {\n if (selectedIds.length > 0) {\n setSelectedIds([]);\n }\n }, [datas]);\n\n return (\n <div className=\"w-full\">\n <div className={`${overWidth ? \"overflow-x-auto\" : \"\"}`}>\n <table\n className=\"border-collapse border-line border-t w-full table\"\n style={{\n minWidth: overWidth ? toRemFunction(overWidth) : \"100%\",\n }}\n >\n <thead>\n <tr>\n {isCheckboxOption && (\n <th className=\"border-b border-line px-20 py-8 bg-gray1 text-center w-30 vertical-middle\">\n <Checkbox\n checked={isAllSelected}\n onChange={handleSelectAll}\n />\n </th>\n )}\n {isRadioOption && (\n <th className=\"border-b border-line px-20 py-8 bg-gray1 text-center w-30\">\n 선택\n </th>\n )}\n {isModify && (\n <th className=\"border-b border-line px-20 py-8 bg-gray1 text-center w-60 whitespace-nowrap\">\n 편집\n </th>\n )}\n {columns.map((column, index) => {\n const title = column.header;\n const colSpan = column.colSpan;\n const headerKey = column.key;\n const isSortable = sortKeys.includes(headerKey);\n const isCurrentSort = sortState?.key === headerKey;\n const isImportantColor = importantColorKeys.includes(headerKey);\n\n return (\n <th\n key={index}\n colSpan={colSpan}\n className={`border-b border-line px-20 py-7 bg-gray1 whitespace-nowrap text-body14 text-text font-medium ${\n thAlignLeftKeys?.includes(headerKey)\n ? \"text-left\"\n : thAlignRightKeys?.includes(headerKey)\n ? \"text-right\"\n : \"text-center\"\n } ${isSortable ? \"cursor-pointer hover:bg-gray-200\" : \"\"}\n ${isImportantColor ? \"text-primary bg-primary10\" : \"\"}\n ${column.thClassName || \"\"}`}\n onClick={() => isSortable && handleSort(headerKey)}\n >\n <>\n {typeof title === \"string\" ? <span>{title}</span> : title}\n {requiredKeys?.includes(headerKey) && (\n <span\n className=\"inline-block -mt-2\"\n style={{ verticalAlign: \"top\" }}\n >\n <RequiredDot />\n </span>\n )}\n {isSortable && (\n <div className=\"flex flex-col inline-block ml-5 vertical-middle\">\n <img\n src={IcSortArrowUp}\n alt=\"오름차순\"\n className={`w-12 h-12 ${\n isCurrentSort && sortState.direction === \"asc\"\n ? \"opacity-100\"\n : \"opacity-30\"\n }`}\n />\n <img\n src={IcSortArrowDown}\n alt=\"내림차순\"\n className={`w-12 h-12 ${\n isCurrentSort && sortState.direction === \"desc\"\n ? \"opacity-100\"\n : \"opacity-30\"\n }`}\n />\n </div>\n )}\n </>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>{renderTableBody()}</tbody>\n {footers && <tfoot>{footers}</tfoot>}\n </table>\n </div>\n </div>\n );\n}\n\nexport default Table;\n","export const LIST_PAGE_SIZE = 10;","import { Button } from \"../Button\";\nimport { Divider } from \"../Divider\";\nimport { SelectBox } from \"../SelectBox\";\nimport { IcDelete } from \"../../../assets\";\nimport { Stack } from \"../Stack\";\nimport { Text } from \"../Text\";\nimport { LIST_PAGE_SIZE } from \"../../../constants/common\";\n\nexport interface TableTopProps {\n type?: \"search\" | \"option\";\n count?: number;\n pageSize?: number;\n countText?: string;\n leftButtons?: React.ReactNode;\n rightButtons?: React.ReactNode;\n registText?: string;\n sortOptionValue?: string;\n sortOptions?: { label: string; value: string }[];\n useDivider?: boolean;\n isPageCount?: boolean;\n useCountOption?: boolean;\n deleteText?: string;\n onChangeSort?: (value: string) => void;\n onChangePageSize?: (value: number) => void;\n onDelete?: () => void;\n onExcelDownload?: () => void;\n onSelectExcelDownload?: () => void;\n handleRegist?: () => void;\n}\n\nfunction TableTop({\n type = \"search\",\n count,\n pageSize = LIST_PAGE_SIZE,\n countText = \"개 상품 조회\",\n leftButtons,\n rightButtons,\n registText = \"상품 등록\",\n sortOptionValue,\n sortOptions,\n useDivider = true,\n isPageCount = true,\n useCountOption = true,\n deleteText = \"선택 삭제\",\n onChangeSort,\n onChangePageSize,\n onDelete,\n onExcelDownload,\n onSelectExcelDownload,\n handleRegist,\n}: TableTopProps) {\n return (\n <Stack direction=\"col\" gap={6}>\n {(sortOptions || useCountOption || isPageCount) && (\n <Stack direction=\"row\" gap={10} justify=\"between\" align=\"end\">\n {isPageCount && (\n <Stack direction=\"row\" gap={10}>\n <Text size=\"body14\" fontWeight=\"bold\">\n 총{\"\\u00A0\"}\n <Text size=\"body14\" fontWeight=\"bold\" color=\"primary\">\n {count}\n </Text>\n {countText}\n </Text>\n </Stack>\n )}\n\n <Stack direction=\"row\" gap={10} align=\"center\">\n {rightButtons}\n {sortOptions && (\n <SelectBox\n value={sortOptionValue}\n options={sortOptions}\n customWidth={160}\n onChange={(value) => {\n if (onChangeSort) {\n onChangeSort(value as string);\n }\n }}\n />\n )}\n {useCountOption && (\n <SelectBox\n value={pageSize}\n options={[\n { label: \"10 건씩 보기\", value: 10 },\n { label: \"20 건씩 보기\", value: 20 },\n { label: \"30 건씩 보기\", value: 30 },\n { label: \"50 건씩 보기\", value: 50 },\n { label: \"100 건씩 보기\", value: 100 },\n ]}\n customWidth={160}\n onChange={(value) => {\n if (onChangePageSize) {\n onChangePageSize(value as number);\n }\n }}\n />\n )}\n </Stack>\n </Stack>\n )}\n {type === \"search\" && (\n <>\n {useDivider && isPageCount && <Divider />}\n <Stack direction=\"row\" gap={10} justify=\"between\">\n <Stack direction=\"row\" gap={4}>\n {leftButtons}\n </Stack>\n <Stack direction=\"row\" gap={4}>\n {/* {onSelectExcelDownload && (\n <Button\n size=\"medium\"\n variant=\"secondary\"\n onClick={() => {\n onSelectExcelDownload?.();\n }}\n >\n 선택 엑셀 다운로드\n </Button>\n )} */}\n\n {handleRegist && (\n <Button\n size=\"medium\"\n variant=\"primary\"\n onClick={() => {\n handleRegist?.();\n }}\n >\n {registText}\n </Button>\n )}\n </Stack>\n </Stack>\n </>\n )}\n </Stack>\n );\n}\n\nexport default TableTop;\n","import { Stack } from \"../Stack\";\n\nexport interface CommonTableProps {\n tableTop?: React.ReactNode;\n tableBody?: React.ReactNode;\n pagination?: React.ReactNode;\n}\nfunction CommonTable({ tableTop, tableBody, pagination }: CommonTableProps) {\n return (\n <Stack direction=\"col\" gap={20} wFull={true}>\n <Stack direction=\"col\" gap={7}>\n {tableTop && tableTop}\n {tableBody && tableBody}\n {pagination && pagination}\n </Stack>\n </Stack>\n );\n}\n\nexport default CommonTable;\n","import React from \"react\";\nimport {\n ColorType,\n FontSizeType,\n FontWeightType,\n fontSize,\n fontWeight,\n colors,\n} from \"../../../theme\";\n\nexport interface TagProps extends React.HTMLAttributes<HTMLDivElement> {\n id?: string;\n children: React.ReactNode;\n color?: ColorType;\n bgColor?: ColorType;\n size?: FontSizeType;\n fontWeight?: FontWeightType;\n className?: string;\n variant?: \"filled\" | \"outlined\";\n style?: React.CSSProperties;\n}\n\nexport default function Tag({\n id,\n children,\n color = \"text\",\n bgColor,\n size = \"body12\",\n fontWeight: fontWeightProp = \"bold\",\n className = \"\",\n variant = \"filled\",\n style,\n ...props\n}: TagProps) {\n // variant에 따른 스타일 설정\n const getVariantStyles = (): React.CSSProperties => {\n if (variant === \"outlined\") {\n return {\n backgroundColor: colors.white,\n color: colors[color],\n border: `1px solid ${colors.line}`,\n };\n }\n\n // filled variant\n const bgColorKey = bgColor || `${color}Light` as ColorType;\n return {\n backgroundColor: colors[bgColorKey] || colors[`${color}Light` as ColorType] || colors.textLight,\n color: colors[color],\n };\n };\n\n const styles: React.CSSProperties = {\n display: \"inline-block\",\n fontSize: fontSize[size],\n fontWeight: fontWeight[fontWeightProp],\n paddingLeft: \"6px\",\n paddingRight: \"6px\",\n height: \"26px\",\n borderRadius: \"6px\",\n touchAction: \"none\",\n lineHeight: \"26px\",\n whiteSpace: \"nowrap\",\n ...getVariantStyles(),\n ...style, // 사용자 정의 style을 마지막에 배치하여 오버라이드 가능하게\n };\n\n return (\n <div id={id} style={styles} className={className} {...props}>\n {children}\n </div>\n );\n}\n","import React, { useState, KeyboardEvent, forwardRef, useMemo } from \"react\";\nimport { Stack } from \"../Stack\";\nimport { Label } from \"../Label\";\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n DragEndEvent,\n DragStartEvent,\n DragOverlay,\n MeasuringStrategy,\n} from \"@dnd-kit/core\";\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n useSortable,\n rectSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport ColorIcTagClose from \"../../../assets/colorIcon/ColorIcTagClose\";\n\n// 일반 태그 컴포넌트 (드래그 불가능)\nconst SimpleTag = ({\n tag,\n index,\n onRemove,\n disabled,\n}: {\n tag: string;\n index: number;\n onRemove: (index: number) => void;\n disabled: boolean;\n}) => {\n return (\n <div className=\"flex items-center justify-center gap-8 bg-primary3 text-text text-body14 font-medium px-12 h-36 rounded-md border border-line leading-[36px]\">\n {!disabled && (\n <span className=\"cursor-pointer\" onClick={() => onRemove(index)}>\n <ColorIcTagClose width={10} height={10} color=\"text\" />\n </span>\n )}\n <span>{tag}</span>\n </div>\n );\n};\n\n// 개별 태그를 위한 Sortable 아이템 컴포넌트 (드래그 가능)\nconst SortableTag = ({\n tag,\n index,\n onRemove,\n disabled,\n}: {\n tag: string;\n index: number;\n onRemove: (index: number) => void;\n disabled: boolean;\n}) => {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: tag });\n\n const style = {\n transform: transform\n ? `translate3d(${transform.x}px, ${transform.y}px, 0)`\n : undefined,\n transition,\n opacity: isDragging ? 0 : 1, // 드래그 중인 원본 항목은 투명하게 처리\n };\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n {...attributes}\n {...listeners}\n className=\"flex items-center justify-center gap-8 bg-primary3 text-text text-body14 font-medium px-12 h-36 rounded-md touch-none border border-line leading-[36px]\"\n >\n {!disabled && (\n <span\n onPointerDown={(e) => {\n e.stopPropagation(); // 드래그 이벤트 전파 방지\n onRemove(index);\n }}\n >\n <ColorIcTagClose width={10} height={10} color=\"text\" />\n </span>\n )}\n <span>{tag}</span>\n </div>\n );\n};\n\ninterface TagInputProps {\n label?: string;\n labelHidden?: boolean;\n tags: string[];\n onChange: (tags: string[]) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n id?: string;\n required?: boolean;\n error?: string;\n tooltip?: string | React.ReactNode;\n onlyView?: boolean;\n draggable?: boolean; // 드래그 가능 여부 (기본값: true)\n onDuplicateTag?: (tag: string) => void; // 중복 태그 입력 시 호출되는 콜백\n}\n\nconst TagInput = forwardRef<HTMLInputElement, TagInputProps>(\n (\n {\n label,\n labelHidden,\n tags,\n onChange,\n placeholder = \"입력 후 Enter\",\n disabled = false,\n className = \"\",\n id,\n required = false,\n error,\n tooltip,\n onlyView = true,\n draggable = true, // 기본값: 드래그 가능\n onDuplicateTag,\n },\n ref\n ) => {\n const [inputValue, setInputValue] = useState(\"\");\n const [activeId, setActiveId] = useState<string | null>(null);\n const [draggedWidth, setDraggedWidth] = useState<number | null>(null);\n const activeTag = useMemo(\n () => tags.find((tag) => tag === activeId),\n [activeId, tags]\n );\n\n const inputId =\n id || `tag-input-${Math.random().toString(36).substring(2, 9)}`;\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n );\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" && !e.nativeEvent.isComposing) {\n e.preventDefault();\n const newTag = inputValue.trim();\n if (newTag && !tags.includes(newTag)) {\n onChange([...tags, newTag]);\n setInputValue(\"\");\n } else if (newTag && onDuplicateTag) {\n // 얼럿 대체 : 입력한 내용과 동일한 항목이 존재합니다.\\n다시 입력해 주세요.\n // 중복 태그 입력 시 콜백 호출\n onDuplicateTag(newTag);\n }\n }\n };\n\n const removeTag = (indexToRemove: number) => {\n if (disabled) return;\n onChange(tags.filter((_, index) => index !== indexToRemove));\n };\n\n const handleDragStart = (event: DragStartEvent) => {\n setActiveId(event.active.id as string);\n if (event.active.rect.current.initial) {\n setDraggedWidth(event.active.rect.current.initial.width);\n }\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n\n if (over && active.id !== over.id) {\n const oldIndex = tags.findIndex((tag) => tag === active.id);\n const newIndex = tags.findIndex((tag) => tag === over.id);\n onChange(arrayMove(tags, oldIndex, newIndex));\n }\n\n setActiveId(null);\n setDraggedWidth(null);\n };\n\n const handleDragCancel = () => {\n setActiveId(null);\n setDraggedWidth(null);\n };\n\n // 드래그 불가능한 경우 일반 태그 렌더링\n if (!draggable) {\n return (\n <Stack direction=\"col\" gap={4} className={className} wFull={true}>\n <Label\n label={label}\n required={required}\n tooltip={tooltip}\n inputId={inputId}\n labelHidden={labelHidden}\n />\n <div\n className={`\n flex items-center flex-wrap gap-8 rounded-md\n min-h-36\n ${error ? \"border-red\" : \"border-line\"}\n ${disabled ? \"bg-gray1\" : \"bg-white\"}\n `}\n >\n {tags.map((tag, index) => (\n <SimpleTag\n key={tag}\n tag={tag}\n index={index}\n onRemove={removeTag}\n disabled={disabled}\n />\n ))}\n </div>\n </Stack>\n );\n }\n\n // 드래그 가능한 경우 DndContext 사용\n return (\n <Stack direction=\"col\" gap={4} className={className} wFull={true}>\n <Label\n label={label}\n required={required}\n tooltip={tooltip}\n inputId={inputId}\n labelHidden={labelHidden}\n />\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragCancel={handleDragCancel}\n measuring={{\n droppable: {\n strategy: MeasuringStrategy.Always,\n },\n }}\n >\n <SortableContext items={tags} strategy={rectSortingStrategy}>\n <div\n className={`\n flex items-center flex-wrap gap-8 rounded-md\n min-h-36\n ${error ? \"border-red\" : \"border-line\"}\n ${disabled ? \"bg-gray1\" : \"bg-white\"}\n `}\n >\n {tags.map((tag, index) => (\n <SortableTag\n key={tag}\n tag={tag}\n index={index}\n onRemove={removeTag}\n disabled={disabled}\n />\n ))}\n {!onlyView && (\n <input\n ref={ref}\n id={inputId}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n placeholder={tags.length === 0 ? placeholder : \"\"}\n disabled={disabled}\n className=\" text-text text-body14 font-medium px-12 h-36 rounded-md text-text \" //bg-primary3 border border-line\n />\n )}\n </div>\n </SortableContext>\n <DragOverlay dropAnimation={null} adjustScale={false}>\n {activeTag ? (\n <div\n className=\"flex items-center justify-center gap-8 bg-primary3 text-text text-body14 font-medium px-12 h-36 rounded-md border border-line leading-[36px] shadow-lg\"\n style={{\n width: draggedWidth ? `${draggedWidth}px` : \"auto\",\n }}\n >\n {!disabled && (\n <span>\n <ColorIcTagClose width={10} height={10} color=\"text\" />\n </span>\n )}\n <span>{activeTag}</span>\n </div>\n ) : null}\n </DragOverlay>\n </DndContext>\n </Stack>\n );\n }\n);\n\nTagInput.displayName = \"TagInput\";\n\nexport default TagInput;\n","import React from \"react\";\nimport { Stack } from \"../Stack\";\nimport { Label } from \"../Label\";\nimport { toRemFunction } from \"../../../utils/helperUtils\";\nimport { CommonFormDataProps } from \"../../../types/common\";\nimport { Text } from \"../Text\";\n\nexport interface TextAreaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n CommonFormDataProps {\n areaHeight?: number;\n maxLength?: number;\n}\n\nconst TextArea: React.FC<TextAreaProps> = ({\n label,\n labelHidden,\n labelWidth,\n error,\n fullWidth = false,\n required = false,\n direction = \"row\",\n id,\n className = \"\",\n rows = 5,\n areaHeight = 80,\n maxLength,\n ...props\n}) => {\n const textareaId =\n id || `textarea-${Math.random().toString(36).substring(2, 9)}`;\n\n return (\n <Stack\n direction={direction}\n wFull={fullWidth}\n gap={direction === \"row\" ? 14 : 4}\n align={direction === \"row\" ? \"center\" : \"start\"}\n >\n <Label\n label={label}\n required={required}\n width={labelWidth}\n labelHidden={labelHidden}\n />\n\n <Stack\n gap={0}\n className=\"flex-auto relative\"\n wFull={direction === \"row\" ? false : fullWidth}\n >\n <textarea\n id={textareaId}\n rows={rows}\n className={`\n px-12 py-10 border rounded-md w-full\n ${error ? \"border-red\" : \"border-line\"}\n focus:border-primary\n resize-vertical\n ${className}\n `}\n style={{ height: `${toRemFunction(areaHeight)}` }}\n {...props}\n maxLength={maxLength}\n />\n\n {maxLength && (\n <Text color=\"primaryText\" justify=\"end\">\n <Text color=\"red\">{props.value?.toString().length || 0}</Text>/\n {maxLength}\n </Text>\n )}\n </Stack>\n </Stack>\n );\n};\n\nexport default TextArea;\n","import { ColorType, FontSizeType } from \"../../../theme\";\nimport { Stack } from \"../Stack\";\nimport { Text } from \"../Text\";\nimport ColorIcArrow from \"../../../assets/colorIcon/ColorIcArrow\";\n\nexport interface TextButtonProps {\n text: string;\n isOpen?: boolean;\n onClick?: () => void;\n color?: ColorType;\n type?: \"none\" | \"arrow\" | \"underline\";\n size?: FontSizeType;\n}\n\nfunction TextButton({\n text,\n isOpen = false,\n onClick,\n color = \"primaryText\",\n type = \"arrow\",\n size = \"body14\",\n}: TextButtonProps) {\n return (\n <Stack\n direction=\"row\"\n align=\"center\"\n justify=\"center\"\n onClick={onClick}\n className=\"cursor-pointer\"\n >\n <Text\n size={size}\n fontWeight=\"bold\"\n color={color}\n textDecoration={type === \"underline\" ? \"underline\" : \"none\"}\n className=\"leading-none\"\n >\n {text}\n </Text>\n {type === \"arrow\" && <ColorIcArrow isOpen={isOpen} color={color} />}\n </Stack>\n );\n}\n\nexport default TextButton;\n","import React, { forwardRef, useRef, useState, useEffect } from \"react\";\nimport { Stack } from \"../Stack\";\nimport { Label } from \"../Label\";\nimport { toRemFunction } from \"../../../utils/helperUtils\";\n\nexport interface ToggleProps {\n checked?: boolean;\n onChange?: (checked: boolean) => void;\n label?: string;\n disabled?: boolean;\n size?: \"small\" | \"medium\" | \"large\";\n textToggleSize?: number;\n className?: string;\n id?: string;\n required?: boolean;\n error?: string;\n tooltip?: React.ReactNode;\n onText?: string;\n offText?: string;\n labelWidth?: number;\n isDot?: boolean;\n}\n\nconst Toggle = forwardRef<HTMLButtonElement, ToggleProps>(\n (\n {\n checked = false,\n onChange,\n label,\n disabled = false,\n size = \"medium\",\n textToggleSize = 76,\n className = \"\",\n id,\n required = false,\n error,\n tooltip,\n onText,\n offText,\n labelWidth,\n isDot = false,\n },\n ref\n ) => {\n const toggleId =\n id || `toggle-${Math.random().toString(36).substring(2, 9)}`;\n\n const onRef = useRef<HTMLSpanElement>(null);\n const offRef = useRef<HTMLSpanElement>(null);\n const [sliderStyle, setSliderStyle] = useState({});\n\n const handleToggle = () => {\n if (!disabled && onChange) {\n onChange(!checked);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleToggle();\n }\n };\n\n useEffect(() => {\n if (!onText || !offText) return;\n\n const targetRef = checked ? onRef : offRef;\n if (targetRef.current) {\n setSliderStyle({\n width: targetRef.current.offsetWidth,\n transform: `translateX(${targetRef.current.offsetLeft - 4}px)`,\n });\n }\n }, [checked, onText, offText]);\n\n // 텍스트 기반 토글\n if (onText && offText) {\n return (\n <Stack direction=\"row\" align=\"center\" gap={14} className={className}>\n {label && (\n <Label\n label={label}\n width={labelWidth}\n required={required}\n tooltip={tooltip}\n isDot={isDot}\n />\n )}\n\n <Stack direction=\"col\" gap={4} className=\"flex-auto\">\n <button\n ref={ref}\n id={toggleId}\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n disabled={disabled}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n className={`\n relative flex items-center rounded-full h-36 p-4\n bg-gray1 border border-line\n w-fit\n ${disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\"}\n `}\n >\n <div\n className=\"absolute h-[calc(100%-6px)] top-[3px] bg-primary rounded-full transition-all duration-300 ease-in-out\"\n style={sliderStyle}\n />\n\n <span\n ref={onRef}\n className={`relative text-center leading-none text-body14 ${\n checked ? \"text-white font-bold\" : \"font-semibold text-text\"\n }`}\n style={{ width: `${toRemFunction(textToggleSize)}` }}\n >\n {onText}\n </span>\n <span\n ref={offRef}\n className={`relative text-body14 leading-none ${\n !checked ? \"text-white font-bold\" : \"font-semibold text-text\"\n }`}\n style={{ width: `${toRemFunction(textToggleSize)}` }}\n >\n {offText}\n </span>\n </button>\n {error && <span className=\"text-red text-body12\">{error}</span>}\n </Stack>\n </Stack>\n );\n }\n\n // 사이즈별 클래스\n const getSizeClasses = () => {\n switch (size) {\n case \"small\":\n return \"w-32 h-18\";\n case \"large\":\n return \"w-56 h-32\";\n default: // medium\n return \"w-44 h-24\";\n }\n };\n\n // 슬라이더 사이즈별 클래스\n const getSliderSizeClasses = () => {\n switch (size) {\n case \"small\":\n return \"w-14 h-14\";\n case \"large\":\n return \"w-28 h-28\";\n default: // medium\n return \"w-20 h-20\";\n }\n };\n\n // 아래는 텍스트 없는 형태의 ui 인데 안쓸수도 있음\n return (\n <Stack direction=\"row\" gap={10} align=\"center\" className={className}>\n {/* 라벨 */}\n {label && <Label label={label} required={required} tooltip={tooltip} />}\n\n {/* 토글 버튼 */}\n <Stack direction=\"col\" gap={4} className=\"flex-auto\">\n <button\n ref={ref}\n id={toggleId}\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n aria-labelledby={label ? `${toggleId}-label` : undefined}\n disabled={disabled}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n className={`\n relative inline-flex items-center rounded-full transition-colors duration-200 ease-in-out\n focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2\n ${getSizeClasses()}\n ${checked ? \"bg-primary\" : \"bg-gray3 \"}\n ${\n disabled\n ? \"cursor-not-allowed opacity-50\"\n : \"cursor-pointer hover:opacity-80\"\n }\n `}\n tabIndex={disabled ? -1 : 0}\n >\n {/* 슬라이더 */}\n <span\n className={`\n inline-block rounded-full bg-white shadow-sm transition-transform duration-200 ease-in-out\n ${getSliderSizeClasses()}\n ${checked ? \"translate-x-22\" : \"translate-x-2\"}\n ${size === \"large\" ? \"translate-x-8\" : \"\"}\n ${size === \"small\" ? \"translate-x-4\" : \"\"}\n `}\n />\n </button>\n\n {/* 에러 메시지 */}\n {error && <span className=\"text-red text-body12\">{error}</span>}\n </Stack>\n </Stack>\n );\n }\n);\n\nToggle.displayName = \"Toggle\";\n\nexport default Toggle;\n","import { useState, useRef, useEffect } from \"react\";\nimport { BorderRadiusBox } from \"../BorderRadiusBox\";\nimport { Stack } from \"../Stack\";\nimport { Text } from \"../Text\";\nimport { BulletText } from \"../BulletText\";\nimport ColorIcTooltipArrow from \"../../../assets/colorIcon/ColorIcTooltipArrow\";\nimport ColorIcTooltipBlue from \"../../../assets/colorIcon/ColorIcTooltipBlue\";\n// import NotificationText from \"../ui/NotificationText\";\n\nexport interface ToolTipBoxProps {\n title: string;\n children: string[];\n}\n\nfunction ToolTipBox({ title, children }: ToolTipBoxProps) {\n const [isOpen, setIsOpen] = useState(false);\n const contentRef = useRef<HTMLDivElement>(null);\n const [contentHeight, setContentHeight] = useState(0);\n\n useEffect(() => {\n if (contentRef.current) {\n setContentHeight(contentRef.current.scrollHeight);\n }\n }, [children]);\n\n return (\n <BorderRadiusBox\n borderColor=\"primary3Border\"\n bgColor=\"primary3\"\n paddingX={20}\n paddingY={12}\n >\n <Stack direction=\"col\">\n <Stack\n direction=\"row\"\n gap={3}\n align=\"center\"\n justify=\"between\"\n onClick={() => {\n setIsOpen(!isOpen);\n }}\n className=\"cursor-pointer\"\n >\n <Stack direction=\"row\" gap={3} align=\"center\">\n <ColorIcTooltipBlue width={14} height={14} />\n <Text size=\"body14\" fontWeight=\"bold\" color=\"primary\">\n {title}\n </Text>\n </Stack>\n <span className={`w-16 h-16 cursor-pointer transition-transform duration-300 ${\n isOpen ? \"\" : \"rotate-180\"\n }`}>\n <ColorIcTooltipArrow width={14} height={14} color=\"primary\" />\n </span>\n \n </Stack>\n <div\n className=\"overflow-hidden transition-all duration-300 ease-in-out\"\n style={{\n height: isOpen ? `${contentHeight}px` : \"0px\",\n opacity: isOpen ? 1 : 0,\n }}\n >\n <div ref={contentRef} className=\"grid grid-cols-2 gap-2 mt-4\">\n {children.map((child, index) => (\n <BulletText\n key={index}\n label={child}\n textColor=\"primary\"\n textSize=\"body12\"\n fontWeight=\"regular\"\n bulletColor=\"dark6\"\n />\n ))}\n </div>\n </div>\n </Stack>\n </BorderRadiusBox>\n );\n}\n\nexport default ToolTipBox;\n","import { ColorType } from \"../../theme\";\n\nfunction ColorIcTooltipArrow({\n width = 14,\n height = 14,\n color = \"primary\",\n}: {\n width?: number;\n height?: number;\n color?: ColorType;\n}) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ color: `var(--color-${color})` }}\n >\n <path\n d=\"M12.0309 9.9748C11.8996 9.9748 11.7902 9.93106 11.6809 9.84356L6.99961 5.22793L2.31836 9.82168C2.12148 10.0186 1.81523 10.0186 1.61836 9.82168C1.42148 9.62481 1.42148 9.31856 1.61836 9.12168L6.64961 4.17793C6.84648 3.98105 7.15273 3.98105 7.34961 4.17793L12.3809 9.12168C12.5777 9.31856 12.5777 9.62481 12.3809 9.82168C12.2934 9.90918 12.1621 9.9748 12.0309 9.9748Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n\nexport default ColorIcTooltipArrow;\n","import { ColorType } from \"../../theme\";\n\nfunction ColorIcTooltipBlue({\n width = 16,\n height = 16,\n color = \"primary\",\n}: {\n width?: number;\n height?: number;\n color?: ColorType;\n}) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ color: `var(--color-${color})` }}\n >\n <g clipPath=\"url(#clip0_175_11783)\">\n <path\n d=\"M7.9744 4.87305H7.95015C7.65924 4.87305 7.39258 5.11547 7.39258 5.43062C7.39258 5.74577 7.635 5.9882 7.95015 5.9882H7.9744C8.26531 5.9882 8.53197 5.74577 8.53197 5.43062C8.53197 5.11547 8.28955 4.87305 7.9744 4.87305Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M7.97554 6.78809C7.68464 6.78809 7.41797 7.03051 7.41797 7.34566V11.079C7.41797 11.3699 7.66039 11.6366 7.97554 11.6366C8.26645 11.6366 8.53312 11.3941 8.53312 11.079V7.32142C8.53312 7.03051 8.2907 6.78809 7.97554 6.78809Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M7.97631 0.678711C3.92783 0.678711 0.630859 3.95144 0.630859 7.99992C0.630859 12.0484 3.92783 15.3454 7.97631 15.3454C12.0248 15.3454 15.2975 12.0484 15.2975 7.99992C15.2975 3.95144 12.0248 0.678711 7.97631 0.678711ZM7.97631 14.2545C4.53389 14.2545 1.72177 11.4423 1.72177 7.99992C1.72177 4.5575 4.53389 1.74538 7.97631 1.74538C11.4187 1.74538 14.2066 4.5575 14.2066 7.99992C14.2066 11.4423 11.4187 14.2545 7.97631 14.2545Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_175_11783\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n\nexport default ColorIcTooltipBlue;\n","import { Stack } from \"../Stack\";\nimport { Text } from \"../Text\";\nimport { BorderRadiusBox } from \"../BorderRadiusBox\";\n\nexport interface TooltipInfoProps {\n title?: string;\n children: string[] | React.ReactNode[];\n}\n\nfunction TooltipInfo({ title, children }: TooltipInfoProps) {\n return (\n <BorderRadiusBox\n key={\"tooltipInfo\"}\n radius={6}\n paddingX={0}\n paddingY={0}\n className=\" border-none overflow-hidden\"\n >\n <div style={{ backgroundColor: \"#4B5563E5\" }} className=\"px-12 py-10\">\n <Stack gap={5} direction=\"col\">\n <Text\n size=\"body14\"\n fontWeight=\"bold\"\n color=\"white\"\n className=\"whitespace-nowrap\"\n style={{\n lineHeight: \"1.4\",\n }}\n >\n {title}\n </Text>\n <Stack gap={2} direction=\"col\">\n {children.map((child, index) => (\n <div\n key={\"tooltipInfo\" + index}\n className={`whitespace-nowrap flex items-baseline flex-none relative w-full`}\n >\n <span\n className=\"inline-block w-3 h-3 bg-dark6 mr-4 \"\n style={{\n verticalAlign: \"top\",\n position: \"relative\",\n top: \"-2px\",\n }}\n ></span>\n <Text\n key={\"tooltipInfoText\" + index}\n size=\"body12\"\n color=\"white\"\n fontWeight=\"regular\"\n style={{\n lineHeight: \"1.4\",\n }}\n >\n {child}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n </div>\n </BorderRadiusBox>\n );\n}\n\nexport default TooltipInfo;\n","import { ColorType } from \"../../theme\";\n\nfunction ColorIcInfo({\n width = 12,\n height = 12,\n color = \"gray\",\n}: {\n width?: number;\n height?: number;\n color?: ColorType;\n}) {\n return (\n <span\n style={{\n color: `var(--color-${color})`,\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect width=\"12\" height=\"12\" rx=\"6\" fill=\"currentColor\" />\n <g clipPath=\"url(#clip0_603_10414)\">\n <path\n d=\"M6.81978 8.68161H6.09194V4.57706C6.09194 4.24297 5.81751 3.98047 5.49535 3.98047H4.82717C4.68398 3.98047 4.55273 4.09979 4.55273 4.2549C4.55273 4.41001 4.67205 4.52933 4.82717 4.52933H5.49535C5.53114 4.52933 5.55501 4.5532 5.55501 4.58899V8.68161H4.82717C4.68398 8.68161 4.55273 8.80092 4.55273 8.95604C4.55273 9.11115 4.67205 9.23047 4.82717 9.23047H6.83171C6.97489 9.23047 7.10614 9.11115 7.10614 8.95604C7.10614 8.80092 6.96296 8.68161 6.81978 8.68161Z\"\n fill=\"white\"\n />\n <path\n d=\"M5.75835 3.3956C5.95604 3.3956 6.1163 3.23533 6.1163 3.03764C6.1163 2.83995 5.95604 2.67969 5.75835 2.67969C5.56065 2.67969 5.40039 2.83995 5.40039 3.03764C5.40039 3.23533 5.56065 3.3956 5.75835 3.3956Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_603_10414\">\n <rect\n width=\"7.63636\"\n height=\"7.63636\"\n fill=\"white\"\n transform=\"translate(2 2)\"\n />\n </clipPath>\n </defs>\n </svg>\n </span>\n );\n}\n\nexport default ColorIcInfo;\n","import { ColorType } from \"../../theme\";\n\nfunction ColorIcWarning({\n width = 16,\n height = 16,\n color = \"warning\",\n}: {\n width?: number;\n height?: number;\n color?: ColorType;\n}) {\n return (\n <span\n style={{\n color: `var(--color-${color})`,\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect width=\"16\" height=\"16\" rx=\"8\" fill=\"currentColor\" />\n <path\n d=\"M12.5343 9.47947L9.1297 4.00144C8.85925 3.63553 8.44561 3.42871 8.00016 3.42871C7.53879 3.42871 7.12516 3.63553 6.87061 4.00144L3.46607 9.47947C3.14789 9.90901 3.10016 10.4658 3.3388 10.9431C3.57743 11.4204 4.0547 11.7227 4.59561 11.7227H11.4047C11.9456 11.7227 12.4229 11.4204 12.6615 10.9431C12.9002 10.4817 12.8524 9.90901 12.5343 9.47947ZM12.0252 10.6249C11.8979 10.8636 11.6752 11.0067 11.4047 11.0067H4.59561C4.32516 11.0067 4.10243 10.8636 3.97516 10.6249C3.8638 10.3863 3.8797 10.1158 4.0388 9.90901L7.44334 4.43098C7.57061 4.25598 7.77743 4.14462 8.00016 4.14462C8.22289 4.14462 8.4297 4.24007 8.55698 4.43098L11.9615 9.90901C12.1206 10.1158 12.1365 10.3863 12.0252 10.6249Z\"\n fill=\"white\"\n />\n <path\n d=\"M8.00067 6.3877C7.80977 6.3877 7.63477 6.54679 7.63477 6.7536V8.4877C7.63477 8.6786 7.79386 8.8536 8.00067 8.8536C8.20749 8.8536 8.36658 8.69451 8.36658 8.4877V6.7377C8.36658 6.54679 8.19158 6.3877 8.00067 6.3877Z\"\n fill=\"white\"\n />\n <path\n d=\"M8.00067 9.27246C7.80977 9.27246 7.63477 9.43155 7.63477 9.63837V9.71792C7.63477 9.90882 7.79386 10.0838 8.00067 10.0838C8.20749 10.0838 8.36658 9.92473 8.36658 9.71792V9.62246C8.36658 9.43155 8.19158 9.27246 8.00067 9.27246Z\"\n fill=\"white\"\n />\n </svg>\n </span>\n );\n}\n\nexport default ColorIcWarning;\n","import React from \"react\";\nimport { Stack } from \"../Stack\";\nimport ColorIcInfo from \"../../../assets/colorIcon/ColorIcInfo\";\nimport ColorIcWarning from \"../../../assets/colorIcon/ColorIcWarning\";\n\nexport interface WarningBoxProps extends React.HTMLAttributes<HTMLDivElement> {\n color?: string;\n children: React.ReactNode;\n}\n\nconst WarningBox: React.FC<WarningBoxProps> = ({\n children,\n color = \"warning\",\n}) => {\n const colorClass = `bg-${color}Light text-${color} `;\n const iconSize = color === \"text\" ? 14 : 16;\n const icon = color === \"text\" ? <ColorIcInfo width={iconSize} height={iconSize} /> : <ColorIcWarning width={iconSize} height={iconSize} />;\n return (\n <div\n className={`opacity-80 relative ${colorClass} rounded-sm pl-2 before:content-[''] before:absolute before:left-0 before:top-0 before:bottom-0 before:w-[50px] ${\n color === \"text\" ? \"before:bg-text\" : \"before:bg-warning\"\n } before:rounded-tl-warnOut before:rounded-bl-warnOut `}\n >\n <div\n className={`relative ${colorClass} inline-block text-body12 font-bold px-12 py-8 rounded-warn touch-none`}\n >\n <Stack direction=\"row\" align=\"start\" gap={4}>\n <span className={`${color==='text' ? 'mt-4' : 'mt-3'}`}>{icon}</span>\n {children}\n </Stack>\n </div>\n </div>\n );\n};\n\nexport default WarningBox;\n"],"mappings":"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","names":["toRemFunction","moment","moment","import_jsx_runtime","toRemFunction","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","fontWeight","import_jsx_runtime","fontWeight","import_react","import_jsx_runtime","import_jsx_runtime","toRemFunction","import_jsx_runtime","toRemFunction","import_react","import_react","import_jsx_runtime","clsx","sizeStyle","toRemFunction","import_jsx_runtime","import_jsx_runtime","fontWeight","toRemFunction","import_jsx_runtime","toRemFunction","import_react","import_jsx_runtime","import_jsx_runtime","toRemFunction","import_jsx_runtime","toRemFunction","import_react","import_jsx_runtime","enabledOptions","toRemFunction","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","toRemFunction","import_react","import_react","import_jsx_runtime","React","toRemFunction","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","toRemFunction","import_jsx_runtime","import_react","import_jsx_runtime","toRemFunction","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/theme/index.ts","../src/components/ui/Text/Text.tsx","../src/utils/helperUtils.ts","../src/components/ui/BorderRadiusBox/BorderRadiusBox.tsx","../src/components/ui/Tooltip/Tooltip.tsx","../src/assets/colorIcon/ColorIcTagClose.tsx","../src/assets/colorIcon/ColorIcTooltip.tsx","../src/components/ui/BulletText/BulletText.tsx","../src/components/ui/Button/Button.tsx","../src/components/ui/Checkbox/Checkbox.tsx","../src/assets/colorIcon/ColorIcCheckDim.tsx","../src/components/ui/Divider/Divider.tsx","../src/components/ui/EmailInput/EmailInput.tsx","../src/components/ui/Stack/Stack.tsx","../src/components/ui/RequiredDot/RequiredDot.tsx","../src/components/ui/Label/Label.tsx","../src/components/ui/Input/Input.tsx","../src/components/ui/SelectBox/SelectBox.tsx","../src/assets/colorIcon/ColorIcArrow.tsx","../src/components/ui/MultiSelectCheckbox/MultiSelectCheckbox.tsx","../src/assets/colorIcon/ColorIcFormArrow.tsx","../src/components/ui/Paging/Paging.tsx","../src/components/ui/Radio/Radio.tsx","../src/components/ui/Table/Table.tsx","../src/constants/common.ts","../src/components/ui/Table/TableTop.tsx","../src/components/ui/Table/CommonTable.tsx","../src/components/ui/Tag/Tag.tsx","../src/components/ui/TagInput/TagInput.tsx","../src/components/ui/TextArea/TextArea.tsx","../src/components/ui/TextButton/TextButton.tsx","../src/components/ui/Toggle/Toggle.tsx","../src/components/ui/ToolTipBox/ToolTipBox.tsx","../src/assets/colorIcon/ColorIcTooltipArrow.tsx","../src/assets/colorIcon/ColorIcTooltipBlue.tsx","../src/components/ui/TooltipInfo/TooltipInfo.tsx","../src/assets/colorIcon/ColorIcInfo.tsx","../src/assets/colorIcon/ColorIcWarning.tsx","../src/components/ui/WarningBox/WarningBox.tsx"],"sourcesContent":["// Components\nexport { Text } from './components/ui/Text';\nexport type { TextProps } from './components/ui/Text';\n\nexport { BorderRadiusBox } from './components/ui/BorderRadiusBox';\nexport type { BorderRadiusBoxProps } from './components/ui/BorderRadiusBox';\n\nexport { BulletText } from './components/ui/BulletText';\nexport type { BulletTextProps } from './components/ui/BulletText';\n\nexport { Button } from './components/ui/Button';\nexport type { ButtonProps } from './components/ui/Button';\n\nexport { Checkbox } from './components/ui/Checkbox';\nexport type { CheckboxProps } from './components/ui/Checkbox';\n\nexport { Divider } from './components/ui/Divider';\nexport type { DividerProps } from './components/ui/Divider';\n\nexport { EmailInput } from './components/ui/EmailInput';\nexport type { EmailInputProps } from './components/ui/EmailInput';\n\nexport { Input } from './components/ui/Input';\nexport type { InputProps } from './components/ui/Input';\n\nexport { Label } from './components/ui/Label';\nexport type { LabelProps } from './components/ui/Label';\n\nexport { MultiSelectCheckbox } from './components/ui/MultiSelectCheckbox';\nexport type { MultiSelectCheckboxProps } from './components/ui/MultiSelectCheckbox';\n\nexport { Paging } from './components/ui/Paging';\nexport type { PagingProps } from './components/ui/Paging';\n\nexport { Radio } from './components/ui/Radio';\nexport type { RadioProps } from './components/ui/Radio';\n\nexport { RequiredDot } from './components/ui/RequiredDot';\n\nexport { SelectBox } from './components/ui/SelectBox';\nexport type { SelectBoxProps } from './components/ui/SelectBox';\n\nexport { Stack } from './components/ui/Stack';\nexport type { StackProps } from './components/ui/Stack';\n\nexport { Table, CommonTable, TableTop } from './components/ui/Table';\nexport type {\n TableProps,\n CommonTableProps,\n TableTopProps\n} from './components/ui/Table';\nexport type { ColumnDef, ColumnType, ColumnAlign } from './types/table';\n\nexport { Tag } from './components/ui/Tag';\nexport type { TagProps } from './components/ui/Tag';\n\nexport { TagInput } from './components/ui/TagInput';\n\nexport { TextArea } from './components/ui/TextArea';\nexport type { TextAreaProps } from './components/ui/TextArea';\n\nexport { TextButton } from './components/ui/TextButton';\nexport type { TextButtonProps } from './components/ui/TextButton';\n\nexport { Toggle } from './components/ui/Toggle';\nexport type { ToggleProps } from './components/ui/Toggle';\n\nexport { Tooltip } from './components/ui/Tooltip';\nexport type { TooltipProps } from './components/ui/Tooltip';\n\nexport { ToolTipBox } from './components/ui/ToolTipBox';\nexport type { ToolTipBoxProps } from './components/ui/ToolTipBox';\n\nexport { TooltipInfo } from './components/ui/TooltipInfo';\nexport type { TooltipInfoProps } from './components/ui/TooltipInfo';\n\nexport { WarningBox } from './components/ui/WarningBox';\nexport type { WarningBoxProps } from './components/ui/WarningBox';\n\n// Theme - 테마 상수와 타입들을 모두 export\nexport * from './theme';\n\n// Common Types\nexport type {\n SelectOption,\n Paging as PagingType,\n OriginalObject,\n Direction,\n CommonFormDataProps,\n TreeData\n} from './types/common';\n\n// Styles\nimport './styles/global.scss';\n","// import { toRemFunction } from \"@/utils/helperUtils\";\nconst toRemFunction = (value: number) => `${value / 14}rem`;\nexport const fontSize = {\n h1: toRemFunction(60),\n h2: toRemFunction(48),\n h3: toRemFunction(40),\n h4: toRemFunction(30),\n h5: toRemFunction(28),\n h6: toRemFunction(24),\n body18: toRemFunction(18),\n body16: toRemFunction(16),\n body14: toRemFunction(14),\n body12: toRemFunction(12),\n body10: toRemFunction(10)\n};\nexport const lineHeightSize = {\n h1: toRemFunction(60),\n h2: toRemFunction(48),\n h3: toRemFunction(40),\n h4: toRemFunction(40),\n h5: toRemFunction(40),\n h6: toRemFunction(40),\n body18: toRemFunction(24),\n body16: toRemFunction(24),\n body14: toRemFunction(22),\n body12: toRemFunction(18),\n body10: toRemFunction(14)\n};\n\nexport const colors = {\n white: '#ffffff',\n black: '#000000',\n gray: '#6B7280',\n primary: '#3083FF', // 기본 primary 색상\n primary10: '#EAF3FF',\n primary5: '#F5F9FF',\n primary3: '#F9FBFF',\n primary3Border: '#3083FF4D',\n primaryText: '#111928',\n text: '#637381',\n textLight: '#F3F4F6',\n secondary: '#18FF82', // 기본 secondary 색상\n secondaryText: '#8899A8',\n stroke: '#DFE4EA',\n line: '#E7ECF3',\n dark2: '#1F2A37',\n dark3: '#374151',\n dark4: '#4B5563',\n dark5: '#6B7280',\n dark6: '#9CA3AF',\n dark7: '#D1D5DB',\n dark8: '#E5E7EB',\n gray1: '#F9FAFB',\n gray2: '#F3F4F6',\n gray3: '#E5E7EB',\n gray4: '#DEE2E6',\n gray5: '#CED4DA',\n gray6: '#CED4DA',\n gray7: '#CED4DA',\n green: '#016630',\n greenLight: '#DCFCE7',\n red: '#9F0712',\n red5: '#FEF6F6',\n redLight: '#FFE2E2',\n orange: '#9F2D00',\n orangeLight: '#FFEDD4',\n blue: '#193CB8',\n blueLight: '#DBEAFE',\n warning: '#F15050',\n warningLight: '#FEF6F6'\n} as const;\n\nexport const fontWeight = {\n regular: '400',\n semibold: '500',\n bold: '600'\n} as const;\n\nexport const directions = {\n row: 'flex-row',\n col: 'flex-col',\n grid: 'grid'\n} as const;\n\nexport const justifies = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly'\n} as const;\n\nexport const justifySelfs = {\n start: 'justify-self-start',\n center: 'justify-self-center',\n end: 'justify-self-end',\n stretch: 'justify-self-stretch'\n} as const;\n\nexport const aligns = {\n baseline: 'items-baseline',\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch'\n} as const;\n\nexport const alignSelfs = {\n baseline: 'self-baseline',\n auto: 'self-auto',\n start: 'self-start',\n center: 'self-center',\n end: 'self-end',\n stretch: 'self-stretch'\n} as const;\n\nexport type ButtonVariantType =\n | 'primary'\n | 'secondary'\n | 'lower'\n | 'neutral'\n | 'neutralGray'\n | 'danger'\n | 'blue'\n | 'orange'\n | 'green';\n\nexport type ColorType = keyof typeof colors;\nexport type FontSizeType = keyof typeof fontSize;\nexport type FontWeightType = keyof typeof fontWeight;\nexport type DirectionType = keyof typeof directions;\nexport type JustifyType = keyof typeof justifies;\nexport type JustifySelfType = keyof typeof justifySelfs;\nexport type AlignType = keyof typeof aligns;\nexport type AlignSelfType = keyof typeof alignSelfs;\n","import React from 'react';\nimport {\n AlignType,\n JustifyType,\n ColorType,\n FontSizeType,\n fontSize,\n FontWeightType,\n fontWeight,\n lineHeightSize,\n colors\n} from '../../../theme';\n\n// Tailwind 클래스명을 CSS 속성값으로 매핑\nconst justifyContentMap: Record<\n JustifyType,\n React.CSSProperties['justifyContent']\n> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n around: 'space-around',\n evenly: 'space-evenly'\n};\n\nconst alignItemsMap: Record<AlignType, React.CSSProperties['alignItems']> = {\n baseline: 'baseline',\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch'\n};\n\nexport interface TextProps extends React.HTMLAttributes<HTMLDivElement> {\n id?: string;\n children: React.ReactNode;\n size?: FontSizeType;\n color?: ColorType;\n className?: string;\n fontWeight?: FontWeightType;\n justify?: JustifyType;\n align?: AlignType;\n textDecoration?: 'none' | 'underline' | 'line-through';\n style?: React.CSSProperties;\n}\n\nexport default function Text({\n id,\n children,\n size = 'body14',\n color = 'primaryText',\n justify = 'start',\n align = 'start',\n className = '',\n fontWeight: fontWeightProp = 'regular',\n textDecoration = 'none',\n style,\n ...props\n}: TextProps) {\n const styles: React.CSSProperties = {\n fontSize: fontSize[size],\n lineHeight: lineHeightSize[size],\n fontWeight: fontWeight[fontWeightProp],\n color: colors[color],\n display: 'flex',\n justifyContent: justifyContentMap[justify],\n alignItems: alignItemsMap[align],\n textDecoration,\n ...style // 사용자 정의 style을 마지막에 배치하여 오버라이드 가능하게\n };\n\n return (\n <div id={id} style={styles} className={className} {...props}>\n {children}\n </div>\n );\n}\n","import moment from 'moment';\nimport { OriginalObject, SelectOption } from '../types/common';\n\nexport const toRemFunction = (px: number) => {\n return `${px / 14}rem`;\n};\n\nexport const formatNumberWithComma = (num: number | string) => {\n if (!num) return '0';\n const numStr = num.toString().replace(/[^\\d]/g, '');\n return numStr.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n};\n\n/**************************************************\n * 객체 배열을 SelectOption 타입으로 변환\n **************************************************/\n\nexport const transformToSelectOptions = <T extends OriginalObject>(\n data: T[]\n) => {\n if (!Array.isArray(data)) {\n return [];\n }\n return data.map((item) => ({\n ...item,\n value: item.id,\n label: item.partnerName ? item.partnerName : item.name\n })) as SelectOption[];\n};\n\n/**\n * HTML 콘텐츠에서 p 태그 안의 div 태그를 span으로 변환하여 DOM nesting 에러를 방지합니다.\n * @param html HTML 문자열\n * @returns 정리된 HTML 문자열\n */\nexport const sanitizeHtmlForParagraph = (html: string): string => {\n if (!html) return html;\n\n // p 태그 안의 div 태그를 span으로 변환\n return html.replace(\n /<p([^>]*)>([\\s\\S]*?)<\\/p>/gi,\n (match, pAttrs, content) => {\n // p 태그 안의 div 태그를 span으로 변환\n const sanitizedContent = content\n .replace(/<div([^>]*)>/gi, '<span$1>')\n .replace(/<\\/div>/gi, '</span>');\n return `<p${pAttrs}>${sanitizedContent}</p>`;\n }\n );\n};\n\n/**************************************************\n * 날짜 포맷 변경 (YYYY.MM.DD)\n **************************************************/\n\nexport const formatDate = (date?: string | null) => {\n return date ? moment(date).format('YYYY.MM.DD') : '';\n};\n\n/**************************************************\n * 날짜 포맷 변경 (YYYY.MM.DD 오전 HH:mm:ss)\n **************************************************/\n\nexport const formatDateWithTime = (date?: string | null) => {\n // a 를 오전 / 오후 로 구분하여 표시\n const hours = moment(date).format('HH');\n const minutes = moment(date).format('mm');\n const ampm = parseInt(hours) < 12 ? '오전' : '오후';\n const hourstxt =\n parseInt(hours) > 12 ? parseInt(hours) - 12 : parseInt(hours);\n return date\n ? `${moment(date).format('YYYY.MM.DD')} ${ampm} ${hourstxt}:${minutes\n .toString()\n .padStart(2, '0')}`\n : '';\n};\n\n/**************************************************\n * 날짜 시간 포맷 변경 (YYYY-MM-DD HH:mm:ss)\n **************************************************/\n\nexport const formatDateTime = (date?: string | null) => {\n return date ? moment(date).format('YYYY-MM-DD HH:mm:ss') : '';\n};\n\n/**************************************************\n * 리퀘스트 날짜 시간 포맷 변경 (YYYY-MM-DD HH:mm:ss)\n **************************************************/\nexport const requestFormatDateTime = (\n dateTimeStr: string,\n isEndDate: boolean = false\n): string => {\n if (!dateTimeStr) return dateTimeStr;\n const date = dateTimeStr.split('T')[0];\n return isEndDate ? `${date}T23:59:59` : `${date}T00:00:00`;\n};\n\n/**************************************************\n * 로컬 시간대 기준으로 ISO 문자열 변환 (타임존 문제 해결)\n **************************************************/\n\nexport const toLocalISOString = (date: Date | null | undefined): string => {\n if (!date) return '';\n\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const seconds = String(date.getSeconds()).padStart(2, '0');\n\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`;\n};\n\n/**************************************************\n * 로컬 시간대 기준으로 ISO 문자열 변환 (endDate용 - 23:59:59)\n **************************************************/\n\nexport const toLocalISOStringEndOfDay = (\n date: Date | null | undefined\n): string => {\n if (!date) return '';\n\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const hours = String(23).padStart(2, '0');\n const minutes = String(59).padStart(2, '0');\n const seconds = String(59).padStart(2, '0');\n\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.999Z`;\n};\n\n/**************************************************\n * 임시 기본 홈 페이지 이동 제어 함수\n **************************************************/\n\nexport const handleDefaultHomePage = () => {\n // 로컬스토리지에 저장된 유저정보 가져오기\n\n const userInfo = localStorage.getItem('safetyUserInfo');\n if (userInfo) {\n const user = JSON.parse(userInfo);\n if (user.typeOfRole === 'MANAGER') {\n // return \"/dashboard\";\n return '/inspection/result';\n } else if (user.typeOfRole === 'ADMIN') {\n return '/user/management';\n } else {\n return '/inspection/setting';\n }\n }\n return '/dashboard';\n};\n\n/**************************************************\n * 점검 상태 컬러 타입 정의\n **************************************************/\n\nexport const getInspectionStatusColorName = (status: string) => {\n switch (status) {\n case 'SUBMITTED':\n return { color: 'blue', value: '제출' };\n case 'RE_INSPECTION':\n return { color: 'orange', value: '재점검' };\n case 'APPROVED':\n return { color: 'green', value: '승인' };\n case 'VISIT':\n return { color: 'red', value: '방문 점검' };\n }\n};\n\n// 점검 년도 옵션 생성 (검색용: 2025년부터 현재년도+5년까지)\nexport const getInspectionYearOptions = () => {\n const currentYear = new Date().getFullYear();\n const startYear = Math.max(2025, currentYear - 4);\n const endYear = currentYear === 2025 ? 2030 : currentYear;\n\n const yearOptions = [];\n for (let year = startYear; year <= endYear; year++) {\n yearOptions.push({ value: year.toString(), label: `${year}년` });\n }\n return yearOptions;\n};\n\n// 현재 년도와 반기를 계산하는 함수\nexport const getCurrentYearAndHalf = () => {\n const now = new Date();\n const currentYear = now.getFullYear().toString();\n const currentMonth = now.getMonth() + 1; // 0-11이므로 +1\n const currentHalfYear = currentMonth <= 6 ? 'H1' : 'H2';\n\n return {\n year: currentYear,\n halfYear: currentHalfYear\n };\n};\n\n// 점검 년도 옵션 생성 (올해부터 +5년)\nexport const getYearOptions = () => {\n const currentYear = new Date().getFullYear();\n const years = [];\n for (let i = 0; i < 5; i++) {\n const year = currentYear + i;\n years.push({\n value: String(year),\n label: `${year}년`\n });\n }\n return years;\n};\n","import { ColorType } from '../../../theme';\nimport { toRemFunction } from '../../../utils/helperUtils';\n\nexport interface BorderRadiusBoxProps {\n active?: boolean;\n paddingX?: number;\n paddingY?: number;\n radius?: number;\n children: React.ReactNode;\n onClick?: () => void;\n className?: string;\n fullWidth?: boolean;\n bgColor?: ColorType;\n borderColor?: ColorType;\n}\n\nfunction BorderRadiusBox({\n active = false,\n paddingX = 22,\n paddingY = 20,\n radius = 12,\n children,\n onClick,\n className,\n fullWidth = false,\n bgColor = 'white',\n borderColor = 'line'\n}: BorderRadiusBoxProps) {\n return (\n <div\n className={`border ${fullWidth ? 'w-full' : ''} ${\n active\n ? 'border-primary bg-primary10'\n : `border-${borderColor} bg-${bgColor}`\n } ${onClick ? 'cursor-pointer' : ''} ${className}`}\n style={{\n paddingLeft: toRemFunction(paddingX),\n paddingRight: toRemFunction(paddingX),\n paddingTop: toRemFunction(paddingY),\n paddingBottom: toRemFunction(paddingY),\n borderRadius: toRemFunction(radius)\n }}\n onClick={onClick}\n >\n {children}\n </div>\n );\n}\n\nexport default BorderRadiusBox;\n","// import { IcTooltip, IcTooltipClose } from \"@/assets/images\";\nimport { useEffect, useState } from 'react';\nimport ColorIcTagClose from '../../../assets/colorIcon/ColorIcTagClose';\nimport ColorIcTooltip from '../../../assets/colorIcon/ColorIcTooltip';\n\nexport interface TooltipProps {\n tooltipInfo: React.ReactNode;\n position?: 'bottom' | 'right';\n}\n\nfunction Tooltip({ tooltipInfo, position = 'right' }: TooltipProps) {\n const [isOpen, setIsOpen] = useState(false);\n useEffect(() => {\n if (isOpen) {\n // setTimeout(() => {\n // setIsOpen(false);\n // }, 2000);\n }\n }, [isOpen]);\n\n const positionStyle = {\n left: position === 'right' ? '17px' : '50%',\n top: position === 'right' ? '50%' : '17px',\n transform:\n position === 'right' ? 'translate(0, -50%)' : 'translate(-62%, 0)'\n };\n\n return (\n <div className=\"tooltip relative ml-2\">\n <div\n className=\"relative\"\n onClick={(e) => {\n e.stopPropagation();\n setIsOpen(!isOpen);\n }}\n >\n <ColorIcTooltip width={14} height={14} />\n </div>\n {isOpen && (\n <div\n className={`absolute z-10 rounded-md`}\n style={{\n ...positionStyle\n }}\n >\n {tooltipInfo}\n <span\n className=\"absolute top-10 right-10 cursor-pointer\"\n onClick={(e) => {\n e.stopPropagation();\n setIsOpen(false);\n }}\n >\n <ColorIcTagClose width={10} height={10} color=\"text\" />\n </span>\n </div>\n )}\n </div>\n );\n}\n\nexport default Tooltip;\n","import { ColorType } from '../../theme';\n\nfunction ColorIcTagClose({\n width = 10,\n height = 10,\n color = 'text'\n}: {\n width?: number;\n height?: number;\n color?: ColorType;\n}) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 10 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ color: `var(--color-${color})` }}\n >\n <g clipPath=\"url(#clip0_848_3903)\">\n <path\n d=\"M5.5 5L9.3125 1.1875C9.45312 1.04688 9.45312 0.828125 9.3125 0.6875C9.17188 0.546875 8.95312 0.546875 8.8125 0.6875L5 4.5L1.1875 0.6875C1.04687 0.546875 0.828125 0.546875 0.6875 0.6875C0.546875 0.828125 0.546875 1.04688 0.6875 1.1875L4.5 5L0.6875 8.8125C0.546875 8.95313 0.546875 9.17188 0.6875 9.3125C0.75 9.375 0.84375 9.42188 0.9375 9.42188C1.03125 9.42188 1.125 9.39063 1.1875 9.3125L5 5.5L8.8125 9.3125C8.875 9.375 8.96875 9.42188 9.0625 9.42188C9.15625 9.42188 9.25 9.39063 9.3125 9.3125C9.45312 9.17188 9.45312 8.95313 9.3125 8.8125L5.5 5Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_848_3903\">\n <rect width=\"10\" height=\"10\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n\nexport default ColorIcTagClose;\n","import { ColorType } from '../../theme';\n\nfunction ColorIcTooltip({\n width = 14,\n height = 14,\n color = 'text'\n}: {\n width?: number;\n height?: number;\n color?: ColorType;\n}) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ color: `var(--color-${color})` }}\n >\n <path\n d=\"M6.97882 4.26364H6.95761C6.70306 4.26364 6.46973 4.47576 6.46973 4.75152C6.46973 5.02728 6.68185 5.2394 6.95761 5.2394H6.97882C7.23336 5.2394 7.4667 5.02728 7.4667 4.75152C7.4667 4.47576 7.25458 4.26364 6.97882 4.26364Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M6.97872 5.93941C6.72418 5.93941 6.49084 6.15153 6.49084 6.42729V9.69395C6.49084 9.9485 6.70297 10.1818 6.97872 10.1818C7.23327 10.1818 7.4666 9.96971 7.4666 9.69395V6.40607C7.4666 6.15153 7.25448 5.93941 6.97872 5.93941Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M6.97866 0.593945C3.43624 0.593945 0.551392 3.45758 0.551392 7.00001C0.551392 10.5424 3.43624 13.4273 6.97866 13.4273C10.5211 13.4273 13.3847 10.5424 13.3847 7.00001C13.3847 3.45758 10.5211 0.593945 6.97866 0.593945ZM6.97866 12.4727C3.96654 12.4727 1.50594 10.0121 1.50594 7.00001C1.50594 3.98788 3.96654 1.52728 6.97866 1.52728C9.99079 1.52728 12.4302 3.98788 12.4302 7.00001C12.4302 10.0121 9.99079 12.4727 6.97866 12.4727Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n\nexport default ColorIcTooltip;\n","import { Tooltip } from '../Tooltip';\nimport { Text } from '../Text';\nimport { ColorType, FontSizeType, FontWeightType } from '../../../theme';\n\nexport interface BulletTextProps {\n label?: string | React.ReactNode;\n bulletColor?: ColorType;\n tooltip?: React.ReactNode;\n textColor?: ColorType;\n textSize?: FontSizeType;\n fontWeight?: FontWeightType;\n}\n\nconst BulletText = ({\n label,\n bulletColor = 'secondaryText',\n tooltip,\n textColor = 'text',\n textSize = 'body14',\n fontWeight = 'bold'\n}: BulletTextProps) => {\n return (\n <div className={`flex flex-none relative label-mobile`}>\n <span\n className={`inline-block w-3 h-3 bg-${bulletColor} mr-4 ${\n textSize === 'body12' ? 'mt-7' : 'mt-9'\n }`}\n ></span>\n <Text size={textSize} color={textColor} fontWeight={fontWeight}>\n {label}\n </Text>\n {tooltip && <Tooltip tooltipInfo={tooltip} />}\n </div>\n );\n};\n\nexport default BulletText;\n","import {\n alignSelfs,\n AlignSelfType,\n ButtonVariantType,\n justifySelfs,\n JustifySelfType\n} from '../../../theme';\nimport React from 'react';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariantType;\n alignSelf?: AlignSelfType;\n justifySelf?: JustifySelfType;\n cornerStyle?: 'square' | 'round';\n size?: 'small' | 'medium' | 'large';\n fontWeight?: 'bold' | 'semibold' | 'normal';\n isLoading?: boolean;\n icon?: string | React.ReactNode;\n iconPosition?: 'left' | 'right';\n type?: 'button' | 'submit' | 'reset';\n customWidth?: number;\n wFull?: boolean;\n}\n\nconst Button: React.FC<ButtonProps> = ({\n children,\n variant = 'primary',\n size = 'large',\n fontWeight = 'bold',\n isLoading = false,\n disabled,\n className = '',\n alignSelf = 'center',\n justifySelf = 'center',\n cornerStyle = 'square',\n icon,\n iconPosition = 'right',\n type = 'button',\n customWidth,\n wFull = false,\n ...props\n}) => {\n // 버튼 스타일 설정\n const getVariantStyles = () => {\n switch (variant) {\n case 'primary':\n return `bg-primary text-white border border-primary hover:bg-blue-600 ${\n cornerStyle === 'round' ? 'rounded-full' : 'rounded-md'\n }`;\n case 'secondary':\n return `bg-primary10 border border-primary10 text-primary ${\n cornerStyle === 'round' ? 'rounded-full' : 'rounded-md'\n }`;\n case 'danger':\n return `bg-warningLight border border-warningLight text-warning hover:bg-warningLight ${\n cornerStyle === 'round' ? 'rounded-full' : 'rounded-md'\n }`;\n case 'lower':\n return `bg-gray2 text-dark5 border border-gray2 hover:bg-gray3 ${\n cornerStyle === 'round' ? 'rounded-full' : 'rounded-md'\n }`;\n case 'neutral':\n return `bg-white border border-primary text-primary ${\n cornerStyle === 'round' ? 'rounded-full' : 'rounded-md'\n }`;\n case 'neutralGray':\n return `bg-white border border-line text-text ${\n cornerStyle === 'round' ? 'rounded-full' : 'rounded-md'\n }`;\n case 'blue':\n return `bg-blueLight text-blue border border-blueLight ${\n cornerStyle === 'round' ? 'rounded-full' : 'rounded-md'\n }`;\n case 'orange':\n return `bg-orangeLight text-orange border border-orangeLight ${\n cornerStyle === 'round' ? 'rounded-full' : 'rounded-md'\n }`;\n case 'green':\n return `bg-greenLight text-green border border-greenLight ${\n cornerStyle === 'round' ? 'rounded-full' : 'rounded-md'\n }`;\n }\n };\n\n const getSizeStyles = () => {\n switch (size) {\n case 'small':\n return 'px-10 py-1 text-sm';\n case 'medium':\n return `px-16 pt-7 pb-8 text-body14 font-${fontWeight}`;\n case 'large':\n return `px-28 py-13 text-body16 font-${fontWeight} min-w-[140px]`;\n }\n };\n\n const baseStyles =\n 'flex items-center justify-center transition-colors whitespace-nowrap cursor-pointer focus:outline-none';\n const disabledStyles = `bg-gray1 text-dark7 cursor-not-allowed border border-gray1 ${\n cornerStyle === 'round' ? 'rounded-full' : 'rounded-md'\n }`;\n\n const buttonStyles = `\n ${baseStyles} \n ${getSizeStyles()} \n ${disabled || isLoading ? disabledStyles : getVariantStyles()}\n ${alignSelfs[alignSelf]}\n ${justifySelfs[justifySelf]}\n `;\n\n return (\n <button\n className={`${buttonStyles} ${className}`}\n disabled={disabled || isLoading}\n type={type}\n style={{\n width: wFull ? '100%' : customWidth ? `${customWidth}px` : ''\n }}\n {...props}\n >\n {icon &&\n iconPosition === 'left' &&\n (typeof icon === 'string' ? (\n <img src={icon} alt=\"icon\" className=\"w-16 h-16 mr-4\" />\n ) : (\n <div className=\"mr-4\">{icon}</div>\n ))}\n {isLoading ? (\n <span className=\"flex items-center justify-center\">\n <svg\n className=\"animate-spin -ml-1 mr-2 h-14 w-14 text-current\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n ></circle>\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n 처리 중...\n </span>\n ) : (\n children\n )}\n {icon &&\n iconPosition === 'right' &&\n (typeof icon === 'string' ? (\n <img src={icon} alt=\"icon\" className=\"w-16 h-16 ml-3\" />\n ) : (\n <div className=\"mr-4\">{icon}</div>\n ))}\n </button>\n );\n};\n\nexport default Button;\n","import React, { forwardRef, useState, useEffect } from 'react';\nimport { toRemFunction } from '../../../utils/helperUtils';\nimport ColorIcCheckDim from '../../../assets/colorIcon/ColorIcCheckDim';\n\nexport interface CheckboxProps extends React.InputHTMLAttributes<HTMLInputElement> {\n type?: 'filled' | 'outline';\n label?: string;\n error?: string;\n className?: string;\n checkboxWidth?: number;\n disabled?: boolean;\n}\n\nconst Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n label,\n error,\n className = '',\n id,\n type = 'filled',\n checked,\n checkboxWidth,\n disabled = false,\n ...props\n },\n ref\n ) => {\n const checkboxId =\n id || `checkbox-${Math.random().toString(36).substring(2, 9)}`;\n\n const [isChecked, setIsChecked] = useState(checked || false);\n\n // props.checked가 변경될 때 내부 상태 동기화\n useEffect(() => {\n setIsChecked(checked || false);\n }, [checked]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsChecked(e.target.checked);\n if (props.onChange) {\n props.onChange(e);\n }\n };\n\n const handleCheckboxClick = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n // disabled 상태일 때는 클릭 이벤트 무시\n if (disabled) {\n return;\n }\n\n const newChecked = !isChecked;\n setIsChecked(newChecked);\n const event = {\n target: {\n checked: newChecked,\n value: props.value || '',\n name: props.name || '',\n type: 'checkbox'\n },\n currentTarget: {\n checked: newChecked,\n value: props.value || '',\n name: props.name || '',\n type: 'checkbox'\n }\n } as React.ChangeEvent<HTMLInputElement>;\n if (props.onChange) {\n props.onChange(event);\n }\n };\n\n const handleLabelClick = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n // disabled 상태일 때는 클릭 이벤트 무시\n if (disabled) {\n return;\n }\n\n const newChecked = !isChecked;\n setIsChecked(newChecked);\n const event = {\n target: {\n checked: newChecked,\n value: props.value || '',\n name: props.name || '',\n type: 'checkbox'\n },\n currentTarget: {\n checked: newChecked,\n value: props.value || '',\n name: props.name || '',\n type: 'checkbox'\n }\n } as React.ChangeEvent<HTMLInputElement>;\n if (props.onChange) {\n props.onChange(event);\n }\n };\n\n const getTypeNoneCheckedClass = () => {\n if (type === 'filled') {\n return 'border border-line rounded';\n }\n if (type === 'outline') {\n return 'bg-white';\n }\n };\n const getTypeCheckedClass = () => {\n if (type === 'filled') {\n if (isChecked) {\n return 'bg-primary border-primary';\n }\n return 'bg-white';\n }\n if (type === 'outline') {\n return 'bg-white';\n }\n };\n\n const getTypeCheckedIconClass = () => {\n if (type === 'filled') {\n return 'text-white';\n }\n if (type === 'outline') {\n if (isChecked) {\n return 'text-primary';\n }\n return 'text-line';\n }\n };\n\n return (\n <div\n className={`flex items-center py-1 px-1 ${checkboxWidth}`}\n style={{\n width: checkboxWidth ? `${toRemFunction(checkboxWidth)}` : ''\n }}\n >\n <div className=\"relative flex items-center\">\n <div className=\"flex items-center h-5\">\n <input\n ref={ref}\n id={checkboxId}\n type=\"checkbox\"\n checked={isChecked}\n onChange={handleInputChange}\n disabled={disabled}\n className=\"sr-only\"\n {...props}\n />\n {disabled ? (\n <ColorIcCheckDim width={18} height={18} />\n ) : (\n // <img src={IcCheckMarkDim} alt=\"check-dim\" className=\"w-18 h-18\" />\n <div\n className={`\n h-18 w-18 \n ${getTypeNoneCheckedClass()}\n transition-all duration-200\n flex items-center justify-center\n ${getTypeCheckedClass()}\n ${error ? 'border-red' : ''}\n ${className}\n `}\n onClick={handleCheckboxClick}\n >\n <span\n className={`${getTypeCheckedIconClass()} flex items-center justify-center`}\n >\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M15.292 5.93848C15.5167 5.687 15.8864 5.68757 16.1104 5.94043L16.1172 5.94727L16.123 5.95508C16.2977 6.1856 16.3012 6.54196 16.0713 6.77832L16.0723 6.7793L9.55078 13.9229L9.55176 13.9238C9.36406 14.1357 9.1186 14.25 8.84668 14.25C8.59606 14.25 8.33167 14.1383 8.1416 13.9238V13.9229L4.90918 10.373L4.90625 10.3701C4.69767 10.1343 4.69773 9.77005 4.90625 9.53418C5.12992 9.2815 5.49974 9.28064 5.72461 9.53125L8.86426 12.9795L15.292 5.9375V5.93848Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth=\"0.5\"\n />\n </svg>\n </span>\n </div>\n )}\n </div>\n {label && (\n <div className={`text-sm ${type === 'outline' ? 'ml-4' : 'ml-8'}`}>\n <label\n htmlFor={checkboxId}\n onClick={handleLabelClick}\n className={` text-body14 ${\n disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\n } select-none ${\n type === 'outline' ? 'text-primaryText ' : 'text-primaryText'\n }`}\n >\n {label}\n </label>\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nCheckbox.displayName = 'Checkbox';\n\nexport default Checkbox;\n","import { ColorType } from '../../theme';\n\nfunction ColorIcCheckDim({\n width = 21,\n height = 20,\n fillColor = 'gray3',\n strokeColor = 'stroke',\n iconColor = 'white'\n}: {\n width?: number;\n height?: number;\n fillColor?: ColorType;\n strokeColor?: ColorType;\n iconColor?: ColorType;\n}) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 21 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"1\"\n y=\"0.5\"\n width=\"19\"\n height=\"19\"\n rx=\"3.5\"\n fill={`var(--color-${fillColor})`}\n />\n <rect\n x=\"1\"\n y=\"0.5\"\n width=\"19\"\n height=\"19\"\n rx=\"3.5\"\n stroke={`var(--color-${strokeColor})`}\n />\n <path\n d=\"M13.9658 5.92676C14.1349 5.75801 14.4042 5.75793 14.5732 5.92676C14.7212 6.07465 14.74 6.29972 14.6289 6.4668L14.5732 6.53418L11.1133 10.001L14.5596 13.4688C14.7286 13.6376 14.7293 13.9071 14.5605 14.0762C14.4836 14.153 14.367 14.2002 14.2627 14.2002C14.1584 14.2002 14.0427 14.153 13.9658 14.0762H13.9648L10.5059 10.6084L7.03418 14.0762C6.95726 14.153 6.84163 14.2002 6.7373 14.2002C6.63295 14.2002 6.5164 14.153 6.43945 14.0762C6.27071 13.9072 6.27047 13.6376 6.43945 13.4688L9.89746 10.002L6.42676 6.54785V6.54688C6.25778 6.37786 6.25763 6.10837 6.42676 5.93945C6.59574 5.77069 6.8651 5.77085 7.03418 5.93945L10.5059 9.39453L13.9648 5.92676H13.9658Z\"\n fill={`var(--color-${iconColor})`}\n stroke={`var(--color-${iconColor})`}\n strokeWidth=\"0.4\"\n />\n </svg>\n );\n}\n\nexport default ColorIcCheckDim;\n","import { toRemFunction } from '../../../utils/helperUtils';\n\nexport interface DividerProps {\n className?: string;\n orientation?: 'horizontal' | 'vertical';\n variant?: 'solid' | 'dashed' | 'dotted';\n width?: number;\n}\n\nfunction Divider({\n className = '',\n orientation = 'horizontal',\n variant = 'solid',\n width\n}: DividerProps) {\n const baseClasses =\n orientation === 'horizontal' ? 'w-full border-t' : 'h-full border-l';\n\n const variantClasses = {\n solid: 'border-solid',\n dashed: 'border-dashed',\n dotted: 'border-dotted'\n };\n\n return (\n <div\n className={`${baseClasses} ${variantClasses[variant]} border-line ${className}`}\n style={{ width: width ? toRemFunction(width) : '100%' }}\n role=\"separator\"\n />\n );\n}\n\nexport default Divider;\n","import React, { useState, useEffect } from 'react';\nimport { Input } from '../Input';\nimport { SelectBox, SelectOption } from '../SelectBox';\nimport { Stack } from '../Stack';\nimport { Label } from '../Label';\nimport { DirectionType } from '../../../theme';\nimport { toRemFunction } from '../../../utils/helperUtils';\n\nexport interface EmailInputProps {\n value: string;\n onChange: (value: string) => void;\n error?: string;\n label?: string;\n labelHidden?: boolean;\n placeholder?: string;\n required?: boolean;\n direction?: DirectionType;\n fullWidth?: boolean;\n className?: string;\n customWidth?: number;\n onBlur?: () => void;\n triggerValidation?: () => void;\n}\n\nconst EmailInput: React.FC<EmailInputProps> = ({\n value,\n onChange,\n error,\n label = '이메일',\n placeholder = '이메일 주소',\n required = false,\n direction = 'row',\n fullWidth = false,\n onBlur,\n triggerValidation,\n labelHidden = false,\n className,\n customWidth\n}) => {\n // 이메일 주소와 도메인 분리\n const [localPart, setLocalPart] = useState('');\n const [domain, setDomain] = useState('');\n const [selectedDomain, setSelectedDomain] = useState('');\n const [isCustomDomain, setIsCustomDomain] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n // 도메인 옵션을 SelectOption 형식으로 변환\n const domainOptions: SelectOption[] = [\n { value: '', label: '선택' },\n { value: 'gmail.com', label: 'gmail.com' },\n { value: 'naver.com', label: 'naver.com' },\n { value: 'daum.net', label: 'daum.net' },\n { value: 'custom', label: '직접 입력' }\n ];\n\n // 초기 값 설정\n useEffect(() => {\n if (value) {\n const parts = value.split('@');\n if (parts.length === 2) {\n setLocalPart(parts[0]);\n setDomain(parts[1]);\n\n // 도메인이 옵션에 있는지 확인\n const domainOption = domainOptions.find(\n (option) => option.value === parts[1] && option.value !== 'custom'\n );\n\n if (domainOption) {\n setSelectedDomain(parts[1]);\n setIsCustomDomain(false);\n } else {\n setSelectedDomain('custom');\n setIsCustomDomain(true);\n }\n } else {\n setLocalPart(value);\n setSelectedDomain('');\n setDomain('');\n }\n }\n }, [value]);\n\n // 값이 변경될 때 호출되는 함수\n const handleValueChange = (newValue: string) => {\n onChange(newValue);\n // 유효성 검사 트리거 함수가 있으면 호출\n if (triggerValidation) {\n triggerValidation();\n }\n };\n\n // 이메일 로컬 파트 변경 핸들러\n const handleLocalPartChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newLocalPart = e.target.value;\n setLocalPart(newLocalPart);\n updateEmail(newLocalPart, domain);\n };\n\n // 도메인 선택 핸들러\n const handleDomainSelect = (selectedValue: string | number | null) => {\n setSelectedDomain(selectedValue as string);\n\n if (selectedValue === 'custom') {\n setIsCustomDomain(true);\n // 직접 입력 시 기존 도메인 유지\n updateEmail(localPart, domain);\n } else {\n setIsCustomDomain(false);\n setDomain(selectedValue as string);\n updateEmail(localPart, (selectedValue as string) || '');\n }\n };\n\n // 커스텀 도메인 변경 핸들러\n const handleCustomDomainChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newDomain = e.target.value;\n // @ 기호가 포함된 경우 제거\n const cleanDomain = newDomain.replace(/@/g, '');\n setDomain(cleanDomain);\n updateEmail(localPart, cleanDomain);\n };\n\n // 이메일 업데이트 함수\n const updateEmail = (local: string, dmn: string) => {\n if (local && dmn) {\n handleValueChange(`${local}@${dmn}`);\n } else if (local) {\n handleValueChange(local);\n } else {\n handleValueChange('');\n }\n };\n\n // 포커스 핸들러\n const handleFocus = () => {\n setIsFocused(true);\n };\n\n // 포커스 아웃 핸들러\n const handleBlur = () => {\n setIsFocused(false);\n if (onBlur) {\n onBlur();\n }\n };\n\n return (\n <div className={`${fullWidth ? 'w-full' : ''}`} aria-required={required}>\n <Stack\n direction={direction}\n wFull={fullWidth}\n gap={direction === 'row' ? 14 : 4}\n align={direction === 'row' ? 'center' : 'start'}\n className={className}\n >\n {!labelHidden && <Label label={label} required={required} />}\n\n <Stack\n gap={10}\n className=\"flex-auto relative\"\n wFull={direction === 'row' ? false : fullWidth}\n >\n <div\n className={`flex items-center border rounded-md ${\n error\n ? 'border-red'\n : isFocused\n ? 'border-primary'\n : 'border-line'\n }`}\n style={\n !fullWidth\n ? {\n width: customWidth\n ? `${toRemFunction(customWidth)}`\n : '100%'\n }\n : {}\n }\n >\n <Input\n value={localPart}\n onChange={handleLocalPartChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={placeholder}\n className={`border-0 border-r rounded-r-none ${\n isFocused && 'border-primary'\n }`}\n error=\"\"\n fullWidth={true}\n />\n\n <span className={`px-10 flex items-center`}>@</span>\n\n {isCustomDomain && (\n <Input\n value={domain}\n onChange={handleCustomDomainChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder=\"도메인 입력\"\n className={`border-0 border-l rounded-l-none ${\n isFocused && 'border-primary'\n }`}\n error=\"\"\n fullWidth={true}\n />\n )}\n <SelectBox\n value={selectedDomain}\n onChange={handleDomainSelect}\n onFocus={handleFocus}\n onBlur={handleBlur}\n options={domainOptions}\n className={`border-0 border-l rounded-l-none ${\n isFocused && 'border-primary'\n }`}\n fullWidth={true}\n />\n </div>\n </Stack>\n </Stack>\n </div>\n );\n};\n\nexport default EmailInput;\n","import {\n aligns,\n justifies,\n directions,\n AlignType,\n JustifyType\n} from '../../../theme';\nimport { toRemFunction } from '../../../utils/helperUtils';\nimport clsx from 'clsx';\nimport { Children, isValidElement, forwardRef } from 'react';\nimport { Direction } from '../../../types/common';\n\nexport interface StackProps {\n direction?: Direction;\n justify?: JustifyType;\n align?: AlignType;\n even?: boolean;\n className?: string;\n children: React.ReactNode;\n wFull?: boolean;\n hFull?: boolean;\n gap?: number;\n rowGap?: number;\n columnGap?: number;\n onClick?: () => void;\n childSizes?: (number | string)[]; // 자식 요소들의 크기 배열 (%, px, rem 등)\n flexWrap?: boolean;\n}\n\nconst Stack = forwardRef<HTMLDivElement, StackProps>(\n (\n {\n direction = 'col',\n justify,\n align,\n even = false,\n className = '',\n children,\n gap,\n rowGap = 0,\n columnGap = 0,\n wFull = false,\n hFull = false,\n onClick,\n childSizes,\n flexWrap = false\n },\n ref\n ) => {\n const classes = clsx(\n 'flex',\n flexWrap && 'flex-wrap',\n directions[direction],\n justify && justifies[justify],\n align && aligns[align],\n {\n even: even,\n 'w-full': wFull,\n 'h-full': hFull\n },\n className\n );\n\n const renderChildren = () => {\n if (!childSizes) return children;\n\n const childrenArray = Children.toArray(children);\n const result = [];\n\n // childSizes 배열의 길이와 children 배열의 길이 중 더 큰 값으로 순회\n const maxLength = Math.max(childSizes.length, childrenArray.length);\n\n for (let index = 0; index < maxLength; index++) {\n const size = childSizes[index];\n const child = childrenArray[index];\n\n if (!child) {\n // child가 없고 size가 있으면 spacer 생성\n if (size !== undefined && size !== null && size !== -1) {\n let sizeValue: string;\n if (typeof size === 'string') {\n // string인 경우 숫자만 있으면 px, 아니면 그대로 사용\n if (/^\\d+$/.test(size)) {\n sizeValue = `${size}px`;\n } else {\n sizeValue = size;\n }\n } else if (typeof size === 'number' && size > 0) {\n // number이고 > 0이면 px로 변환\n sizeValue = `${size}px`;\n } else {\n // number이고 <= 0이거나 다른 경우는 무시\n continue;\n }\n\n const sizeStyle = {\n flexBasis: sizeValue,\n flexShrink: 0,\n flexGrow: 0\n };\n result.push(<div key={`spacer-${index}`} style={sizeStyle}></div>);\n }\n continue;\n }\n\n if (!isValidElement(child)) {\n result.push(child);\n continue;\n }\n\n // child가 있을 때 size 스타일 적용\n let sizeStyle: React.CSSProperties;\n if (size === -1 || size === undefined || size === null) {\n // -1이거나 없으면 나머지 공간을 자동으로 차지\n sizeStyle = {\n flex: 1\n };\n } else {\n let sizeValue: string;\n if (typeof size === 'string') {\n // string인 경우\n // 숫자만 있으면 px 단위로 해석, 이미 단위가 있으면 그대로 사용\n if (/^\\d+$/.test(size)) {\n sizeValue = `${size}px`;\n } else {\n sizeValue = size;\n }\n } else {\n // number인 경우\n // > 1이면 px 단위로 변환 (고정 크기)\n // <= 1이면 비율로 해석하지 않고 px로 변환 (고정 크기)\n sizeValue = `${size}px`;\n }\n // 고정 크기는 flexShrink: 0, flexGrow: 0으로 설정\n sizeStyle = {\n flexBasis: sizeValue,\n flexShrink: 0,\n flexGrow: 0\n };\n }\n\n result.push(\n <div key={index} style={sizeStyle}>\n {child}\n </div>\n );\n }\n\n return result;\n };\n\n // gap이 있으면 gap만, gap이없으면 rowGap이나, columnGap이 있으면 그것만, 둘다 없으면 undefined\n const gapStyle = gap\n ? { gap: toRemFunction(gap) }\n : { rowGap: toRemFunction(rowGap), columnGap: toRemFunction(columnGap) };\n return (\n <div\n ref={ref}\n className={classes}\n style={gapStyle ? gapStyle : undefined}\n onClick={onClick}\n >\n {renderChildren()}\n </div>\n );\n }\n);\n\nStack.displayName = 'Stack';\n\nexport default Stack;\n","function RequiredDot() {\n return (\n <span className=\"inline-block w-6 h-6 bg-red rounded-full bg-warning ml-4\"></span>\n );\n}\n\nexport default RequiredDot;\n","import { toRemFunction } from '../../../utils/helperUtils';\nimport { Tooltip } from '../Tooltip';\nimport { Text } from '../Text';\nimport { FontWeightType } from '../../../theme';\nimport { RequiredDot } from '../RequiredDot';\n\nexport interface LabelProps {\n isDot?: boolean;\n label?: string | React.ReactNode;\n required?: boolean;\n inputId?: string;\n width?: number;\n tooltip?: React.ReactNode;\n labelHidden?: boolean;\n subText?: string | React.ReactNode;\n fontWeight?: FontWeightType;\n align?: 'start' | 'center' | 'end';\n}\n\nconst Label = ({\n isDot = true,\n label,\n required = false,\n inputId,\n width,\n tooltip,\n labelHidden = false,\n subText,\n fontWeight = 'bold',\n align\n}: LabelProps) => {\n if (!label || labelHidden) return null;\n return (\n <label\n htmlFor={inputId ? inputId : ''}\n className={`leading-none flex items-center flex-none relative label-mobile ${\n align === 'end' ? 'justify-end' : ''\n }`}\n style={{ width: width ? toRemFunction(width) : 'auto' }}\n >\n <Text size=\"body14\" color={'primaryText'} fontWeight={fontWeight}>\n {label}\n </Text>\n {subText}\n {tooltip && <Tooltip tooltipInfo={tooltip} />}\n {required && <RequiredDot />}\n </label>\n );\n};\n\nexport default Label;\n","import React from 'react';\nimport {\n formatNumberWithComma,\n toRemFunction\n} from '../../../utils/helperUtils';\nimport { Text } from '../Text';\nimport { Stack } from '../Stack';\nimport { Label } from '../Label';\nimport { CommonFormDataProps } from '../../../types/common';\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement>, CommonFormDataProps {\n type?: string;\n originRef?: React.LegacyRef<HTMLInputElement> | undefined;\n textAlign?: 'left' | 'right' | 'center';\n value?: string | number | undefined;\n description?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onlyData?: boolean;\n rightIcon?: string; // 우측 아이콘 이미지 경로\n onRightIconClick?: () => void; // 우측 아이콘 클릭 핸들러\n}\n\nconst Input: React.FC<InputProps> = ({\n isDot = true,\n label,\n type = 'text',\n error,\n fullWidth = false,\n id,\n className = '',\n originRef,\n direction = 'row',\n textAlign = 'left',\n value,\n description,\n onChange,\n customWidth,\n tooltip,\n labelWidth,\n disabled,\n onlyData = false,\n labelHidden,\n rightIcon,\n onRightIconClick,\n ...props\n}) => {\n const inputId = id || `input-${Math.random().toString(36).substring(2, 9)}`;\n\n const displayValue =\n type === 'number' && value ? formatNumberWithComma(value) : value;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (type === 'number') {\n // 입력값에서 콤마 제거하고 숫자만 추출\n const rawValue = e.target.value.replace(/[^\\d]/g, '');\n\n if (onChange) {\n // 원래 이벤트 객체를 복제하고 value만 변경\n const newEvent = {\n ...e,\n target: {\n ...e.target,\n value: rawValue // 숫자값만 전달\n }\n };\n onChange(newEvent as React.ChangeEvent<HTMLInputElement>);\n }\n } else if (onChange) {\n onChange(e);\n }\n };\n return (\n <Stack\n direction={direction}\n wFull={fullWidth}\n gap={direction === 'row' ? 14 : 4}\n align={direction === 'row' ? 'center' : 'start'}\n >\n <Label\n label={label}\n isDot={isDot}\n width={labelWidth}\n required={props.required}\n inputId={inputId}\n tooltip={tooltip}\n labelHidden={labelHidden}\n />\n\n <Stack\n gap={5}\n className={`${fullWidth ? 'flex-auto' : ''} relative`}\n wFull={direction === 'row' ? false : fullWidth}\n >\n <div className=\"relative w-full\">\n <input\n id={inputId}\n ref={originRef}\n type={type === 'number' ? 'text' : type}\n value={displayValue}\n onChange={handleChange}\n autoComplete={props.autoComplete || 'off'}\n className={`\n px-12 h-36 border rounded-md leading-[36px]\n ${error ? 'border-red' : 'border-line'}\n focus:border-primary\n ${fullWidth && 'w-full'}\n ${className}\n ${type === 'number' ? 'no-spinner' : ''}\n ${disabled ? 'bg-gray1 border-line' : ''}\n ${onlyData && 'bg-white'}\n ${rightIcon ? 'pr-40' : ''}\n `}\n style={{\n textAlign,\n // autofill 배경색 제거를 위한 강력한 스타일\n // WebkitBoxShadow: \"0 0 0 1000px white inset\",\n WebkitTextFillColor: 'inherit',\n // transition: \"background-color 5000s ease-in-out 0s\",\n width: customWidth ? `${toRemFunction(customWidth)}` : '100%'\n // backgroundColor: disabled ? \"var(--gray)\" : \"white\",\n }}\n disabled={disabled || onlyData}\n {...props}\n aria-required={props.required}\n />\n {rightIcon && (\n <div\n className={`absolute inset-y-0 right-0 flex items-center pr-12 ${\n onRightIconClick ? 'cursor-pointer' : 'pointer-events-none'\n }`}\n onClick={onRightIconClick}\n >\n <img src={rightIcon} alt=\"icon\" width={16} height={16} />\n </div>\n )}\n </div>\n {description && (\n <Text size=\"body12\" color=\"gray\">\n {description}\n </Text>\n )}\n </Stack>\n </Stack>\n );\n};\n\nexport default Input;\n","import React, { forwardRef, useState, useRef, useEffect } from 'react';\nimport { Stack } from '../Stack';\nimport { Label } from '../Label';\nimport { toRemFunction } from '../../../utils/helperUtils';\nimport ColorIcArrow from '../../../assets/colorIcon/ColorIcArrow';\nimport { Divider } from '../Divider';\nimport { CommonFormDataProps } from '../../../types/common';\n\nexport interface SelectOption {\n value: string | number | null;\n label: string;\n disabled?: boolean;\n icon?: React.ReactNode;\n description?: string;\n divider?: boolean;\n}\n\nexport interface SelectBoxProps extends CommonFormDataProps {\n options: SelectOption[];\n value?: string | number | null;\n onChange?: (value: string | number | null) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n onEmptyClick?: () => void;\n id?: string;\n}\n\nconst SelectBox = forwardRef<HTMLDivElement, SelectBoxProps>(\n (\n {\n isDot = true,\n label,\n error,\n fullWidth = false,\n options,\n id,\n direction = 'row',\n className = '',\n placeholder = '선택하세요',\n value,\n onChange,\n onFocus,\n onBlur,\n onEmptyClick,\n disabled = false,\n required = false,\n customWidth,\n labelHidden,\n emptyMessage = '데이터가 없습니다',\n labelWidth,\n tooltip\n },\n ref\n ) => {\n const [isOpen, setIsOpen] = useState(false);\n // const [selectedValue, setSelectedValue] = useState<string | number>(\n // value || \"\"\n // );\n const [dropdownPosition, setDropdownPosition] = useState<'bottom' | 'top'>(\n 'bottom'\n );\n const dropdownRef = useRef<HTMLDivElement>(null);\n const selectButtonRef = useRef<HTMLDivElement>(null);\n\n const selectId =\n id || `select-${Math.random().toString(36).substring(2, 9)}`;\n\n const selectedOption = options.find((option) => option.value === value);\n\n const calculateMinWidth = () => {\n if (!options.length) return 'auto';\n\n const maxLength = Math.max(\n ...options.map((option) => option.label.length),\n placeholder.length\n );\n\n const calculatedWidth = Math.min(Math.max(maxLength * 8 + 80, 120), 400);\n return `${calculatedWidth}px`;\n };\n\n const minWidth = calculateMinWidth();\n\n const calculateDropdownPosition = () => {\n if (!selectButtonRef.current) return 'bottom';\n\n const selectRect = selectButtonRef.current.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const dropdownHeight = Math.min(240, options.length * 40 + 20);\n\n const spaceBelow = viewportHeight - selectRect.bottom;\n const spaceAbove = selectRect.top;\n\n if (spaceBelow >= dropdownHeight) {\n return 'bottom';\n } else if (spaceAbove >= dropdownHeight) {\n return 'top';\n } else {\n return spaceBelow > spaceAbove ? 'bottom' : 'top';\n }\n };\n\n useEffect(() => {\n if (isOpen) {\n const position = calculateDropdownPosition();\n setDropdownPosition(position);\n }\n }, [isOpen, options.length]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, []);\n\n const handleSelect = (optionValue: string | number | null) => {\n setIsOpen(false);\n onChange?.(optionValue);\n };\n\n const handleButtonClick = () => {\n if (disabled) return;\n\n if (!options || options.length === 0) {\n // 얼럿 대체 : 데이터가 없을 때 콜백 호출\n onEmptyClick?.();\n } else {\n setIsOpen(!isOpen);\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n handleButtonClick();\n break;\n case 'Escape':\n setIsOpen(false);\n break;\n }\n };\n\n return (\n <Stack\n ref={ref}\n direction={direction}\n wFull={fullWidth}\n gap={direction === 'row' ? 14 : 4}\n align={direction === 'row' ? 'center' : 'start'}\n >\n <Label\n isDot={isDot}\n label={label}\n required={required}\n inputId={selectId}\n labelHidden={labelHidden}\n width={labelWidth}\n tooltip={tooltip}\n />\n <Stack\n gap={10}\n className=\"flex-auto relative\"\n wFull={direction === 'row' ? false : fullWidth}\n >\n <div\n ref={dropdownRef}\n className={`relative ${fullWidth ? 'w-full' : ''}`}\n style={\n !fullWidth\n ? {\n minWidth,\n width: customWidth\n ? `${toRemFunction(customWidth)}`\n : '100%'\n }\n : {}\n }\n >\n <div\n ref={selectButtonRef}\n id={selectId}\n className={`\n relative w-full px-12 h-36 text-left border rounded-md cursor-pointer\n content-center leading-none\n ${error ? 'border-red' : 'border-line'}\n ${\n disabled\n ? 'text-dark5 cursor-not-allowed bg-gray1 border-line'\n : 'focus:border-primary bg-white'\n }\n ${className}\n `}\n onClick={handleButtonClick}\n onKeyDown={handleKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n tabIndex={disabled ? -1 : 0}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-labelledby={label ? `${selectId}-label` : undefined}\n aria-required={required}\n >\n <div className=\"flex items-center justify-between h-full\">\n <div className=\"flex items-center space-x-2 h-full\">\n {selectedOption?.icon && (\n <span className=\"flex-shrink-0\">{selectedOption.icon}</span>\n )}\n <span\n className={`block truncate leading-36 ${\n !value && selectedOption?.label !== '전체'\n ? 'text-secondaryText'\n : 'text-primaryText'\n }`}\n >\n {selectedOption?.label || placeholder}\n </span>\n </div>\n <ColorIcArrow\n isOpen={isOpen}\n rotate={isOpen ? 270 : 90}\n color=\"text\"\n />\n </div>\n </div>\n\n {isOpen && (\n <div\n className={`absolute z-50 w-full bg-white border border-line rounded-md shadow-sm max-h-200 overflow-auto\n ${dropdownPosition === 'bottom' ? 'mt-2' : 'mb-2 bottom-full'}\n `}\n >\n <ul className=\"py-4\" role=\"listbox\">\n {options.map((option, index) => {\n if (option.divider) {\n return <Divider key={index} className=\"my-10\" />;\n }\n return (\n <li\n key={option.value}\n className={`\n relative cursor-pointer select-none py-7 px-16\n ${\n option.disabled\n ? 'text-text cursor-not-allowed bg-gray-50'\n : 'text-text hover:bg-primary hover:text-white'\n }\n ${\n value === option.value\n ? 'bg-primary10 text-primary'\n : ''\n }\n `}\n onClick={() =>\n !option.disabled && handleSelect(option.value)\n }\n role=\"option\"\n aria-selected={value === option.value}\n >\n <div className=\"flex items-center space-x-2\">\n {option.icon && (\n <span className=\"flex-shrink-0\">{option.icon}</span>\n )}\n <div className=\"flex-1\">\n <div className=\"font-medium\">{option.label}</div>\n {option.description && (\n <div className=\"text-sm text-gray\">\n {option.description}\n </div>\n )}\n </div>\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n )}\n </div>\n </Stack>\n </Stack>\n );\n }\n);\n\nSelectBox.displayName = 'SelectBox';\n\nexport default SelectBox;\n","import { ColorType } from '../../theme';\n\nfunction ColorIcArrow({\n isOpen = false,\n rotate = 0,\n width = 14,\n height = 14,\n color = 'primary'\n}: {\n isOpen?: boolean;\n rotate?: number;\n width?: number;\n height?: number;\n color?: ColorType;\n}) {\n const rotateAngle = isOpen ? 90 : 0;\n const finalRotate = rotate + rotateAngle;\n\n return (\n <span\n className=\"cursor-pointer\"\n style={{\n color: `var(--color-${color})`,\n transform: `rotate(${finalRotate}deg)`,\n transition: 'transform 200ms',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n >\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4.38402 1.8246C4.46631 1.74231 4.58724 1.74171 4.67015 1.82264V1.82362L9.61351 6.85487L9.61546 6.85585C9.69844 6.93882 9.69844 7.06096 9.61546 7.14393L9.61351 7.14589L4.6721 12.1752C4.62893 12.2184 4.56875 12.2424 4.52855 12.2426C4.47778 12.2426 4.43387 12.2297 4.37425 12.1849C4.30224 12.1026 4.30507 11.9888 4.38402 11.9096L4.38695 11.9066L8.9807 7.2035L9.17992 6.9994L8.97972 6.7953L4.38597 2.11464L4.38402 2.11268L4.35765 2.07948C4.30316 1.99948 4.3114 1.89721 4.38402 1.8246Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth=\"0.583333\"\n />\n </svg>\n </span>\n );\n}\n\nexport default ColorIcArrow;\n","import React, { forwardRef, useState, useRef, useEffect } from 'react';\nimport { Label } from '../Label';\nimport { toRemFunction } from '../../../utils/helperUtils';\nimport ColorIcArrow from '../../../assets/colorIcon/ColorIcArrow';\nimport { CommonFormDataProps } from '../../../types/common';\nimport { Checkbox } from '../Checkbox';\nimport { Divider } from '../Divider';\nimport { Button } from '../Button';\nimport { Stack } from '../Stack';\nimport { Text } from '../Text';\n\nexport interface MultiSelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n color?: string; // 색상 옵션 추가\n}\n\nexport interface MultiSelectCheckboxProps extends CommonFormDataProps {\n options: MultiSelectOption[];\n value?: (string | number)[];\n onChange?: (value: (string | number)[]) => void;\n onConfirm?: (value: (string | number)[]) => void; // 선택 완료 버튼 클릭시 호출\n onFocus?: () => void;\n onBlur?: () => void;\n onEmptyClick?: () => void; // 데이터가 없을 때 콜백\n id?: string;\n confirmButtonText?: string; // 하단 버튼 텍스트 (기본값: \"선택 완료\")\n}\n\nconst MultiSelectCheckbox = forwardRef<\n HTMLDivElement,\n MultiSelectCheckboxProps\n>(\n (\n {\n isDot = true,\n label,\n error,\n fullWidth = false,\n options,\n id,\n direction = 'row',\n className = '',\n placeholder = '선택하세요',\n value = [],\n onChange,\n onConfirm,\n onFocus,\n onBlur,\n onEmptyClick,\n disabled = false,\n required = false,\n customWidth,\n labelHidden,\n emptyMessage = '데이터가 없습니다',\n labelWidth,\n tooltip,\n confirmButtonText = '선택 완료'\n },\n ref\n ) => {\n // value를 안전하게 배열로 변환하는 헬퍼 함수\n const toSafeArray = (\n val: (string | number)[] | string | undefined\n ): (string | number)[] => {\n if (Array.isArray(val)) return val;\n if (typeof val === 'string' && val.length > 0) {\n // 쉼표로 구분된 문자열이면 split해서 배열로 변환\n return val\n .split(',')\n .map((v) => v.trim())\n .filter((v) => v !== '');\n }\n return [];\n };\n\n const [isOpen, setIsOpen] = useState(false);\n const [tempSelectedValues, setTempSelectedValues] = useState<\n (string | number)[]\n >(toSafeArray(value));\n const [originalValues, setOriginalValues] = useState<(string | number)[]>(\n toSafeArray(value)\n ); // 드롭다운이 열릴 때의 원래 값 저장\n const [dropdownPosition, setDropdownPosition] = useState<'bottom' | 'top'>(\n 'bottom'\n );\n const dropdownRef = useRef<HTMLDivElement>(null);\n const selectButtonRef = useRef<HTMLDivElement>(null);\n\n const selectId =\n id || `multi-select-${Math.random().toString(36).substring(2, 9)}`;\n\n // value가 변경되면 tempSelectedValues와 originalValues도 업데이트\n useEffect(() => {\n const safeValue = toSafeArray(value);\n setTempSelectedValues(safeValue);\n setOriginalValues(safeValue);\n }, [value]);\n\n // 선택된 옵션들의 라벨 표시\n const getDisplayText = () => {\n if (!tempSelectedValues || tempSelectedValues.length === 0) {\n return placeholder;\n }\n if (tempSelectedValues.length === options.length) {\n return '전체';\n }\n if (tempSelectedValues.length === 1) {\n const selectedOption = options.find(\n (opt) => opt.value === tempSelectedValues[0]\n );\n return selectedOption?.label || placeholder;\n }\n return `${tempSelectedValues.length}개 선택됨`;\n };\n\n const calculateMinWidth = () => {\n if (!options.length) return 'auto';\n const maxLength = Math.max(\n ...options.map((option) => option.label.length),\n placeholder.length\n );\n const calculatedWidth = Math.min(Math.max(maxLength * 8 + 80, 120), 400);\n return `${calculatedWidth}px`;\n };\n\n const minWidth = calculateMinWidth();\n\n const calculateDropdownPosition = () => {\n if (!selectButtonRef.current) return 'bottom';\n\n const selectRect = selectButtonRef.current.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const dropdownHeight = Math.min(320, options.length * 40 + 100);\n\n const spaceBelow = viewportHeight - selectRect.bottom;\n const spaceAbove = selectRect.top;\n\n if (spaceBelow >= dropdownHeight) {\n return 'bottom';\n } else if (spaceAbove >= dropdownHeight) {\n return 'top';\n } else {\n return spaceBelow > spaceAbove ? 'bottom' : 'top';\n }\n };\n\n useEffect(() => {\n if (isOpen) {\n const position = calculateDropdownPosition();\n setDropdownPosition(position);\n }\n }, [isOpen, options.length]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n // 외부 클릭 시 원래 값으로 복원\n setTempSelectedValues(originalValues);\n onChange?.(originalValues);\n setIsOpen(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [originalValues, onChange]);\n\n const handleButtonClick = () => {\n if (disabled) return;\n\n if (!options || options.length === 0) {\n // 얼럿 대체 : 데이터가 없을 때 콜백 호출\n onEmptyClick?.();\n } else {\n if (!isOpen) {\n // 드롭다운을 열 때 현재 값을 백업\n setOriginalValues(tempSelectedValues);\n }\n setIsOpen(!isOpen);\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n handleButtonClick();\n break;\n case 'Escape':\n // Escape 키로 닫을 때도 원래 값으로 복원\n setTempSelectedValues(originalValues);\n onChange?.(originalValues);\n setIsOpen(false);\n break;\n }\n };\n\n // 전체 선택/해제\n const handleSelectAll = () => {\n // disabled되지 않은 옵션만 선택\n const enabledOptions = options.filter((opt) => !opt.disabled);\n const allEnabledValues = enabledOptions.map((opt) => opt.value);\n\n // 모든 활성화된 옵션이 선택되었는지 확인\n const allEnabledSelected = enabledOptions.every((opt) =>\n tempSelectedValues.includes(opt.value)\n );\n\n if (allEnabledSelected) {\n // 전체 해제\n setTempSelectedValues([]);\n onChange?.([]);\n } else {\n // 전체 선택\n setTempSelectedValues(allEnabledValues);\n onChange?.(allEnabledValues);\n }\n };\n\n // 개별 체크박스 토글\n const handleCheckboxChange = (optionValue: string | number) => {\n const newValues = tempSelectedValues.includes(optionValue)\n ? tempSelectedValues.filter((v) => v !== optionValue)\n : [...tempSelectedValues, optionValue];\n\n setTempSelectedValues(newValues);\n onChange?.(newValues);\n };\n\n // 선택 완료 버튼 클릭\n const handleConfirm = () => {\n // 선택 완료 시 originalValues 업데이트 (다음에 열 때의 기준값)\n setOriginalValues(tempSelectedValues);\n setIsOpen(false);\n onConfirm?.(tempSelectedValues);\n };\n\n // disabled되지 않은 옵션들이 모두 선택되었는지 확인\n const enabledOptions = options.filter((opt) => !opt.disabled);\n const isAllSelected =\n enabledOptions.length > 0 &&\n enabledOptions.every((opt) => tempSelectedValues.includes(opt.value));\n\n return (\n <Stack\n ref={ref}\n direction={direction}\n wFull={fullWidth}\n gap={direction === 'row' ? 14 : 4}\n align={direction === 'row' ? 'center' : 'start'}\n >\n <Label\n isDot={isDot}\n label={label}\n required={required}\n inputId={selectId}\n labelHidden={labelHidden}\n width={labelWidth}\n tooltip={tooltip}\n />\n <Stack\n gap={10}\n className=\"flex-auto relative\"\n wFull={direction === 'row' ? false : fullWidth}\n >\n <div\n ref={dropdownRef}\n className={`relative ${fullWidth ? 'w-full' : ''}`}\n style={\n !fullWidth\n ? {\n minWidth,\n width: customWidth\n ? `${toRemFunction(customWidth)}`\n : '100%'\n }\n : {}\n }\n >\n <div\n ref={selectButtonRef}\n id={selectId}\n className={`\n relative w-full px-12 h-36 text-left border rounded-md cursor-pointer\n content-center leading-none\n ${error ? 'border-red' : 'border-line'}\n ${\n disabled\n ? 'text-dark5 cursor-not-allowed bg-gray1 border-line'\n : 'focus:border-primary bg-white'\n }\n ${className}\n `}\n onClick={handleButtonClick}\n onKeyDown={handleKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n tabIndex={disabled ? -1 : 0}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-labelledby={label ? `${selectId}-label` : undefined}\n aria-required={required}\n >\n <div className=\"flex items-center justify-between h-full\">\n <span\n className={`block truncate leading-36 ${\n tempSelectedValues.length === 0\n ? 'text-secondaryText'\n : 'text-primaryText'\n }`}\n >\n {getDisplayText()}\n </span>\n <ColorIcArrow\n isOpen={isOpen}\n rotate={isOpen ? 270 : 90}\n color=\"text\"\n />\n </div>\n </div>\n\n {isOpen && (\n <div\n className={`absolute z-50 w-full bg-white border border-line rounded-md shadow-sm\n ${dropdownPosition === 'bottom' ? 'mt-2' : 'mb-2 bottom-full'}\n `}\n >\n {/* 전체 선택 체크박스 */}\n <div\n className=\" py-8 px-16 cursor-pointer hover:bg-gray1\"\n onClick={(e) => {\n e.stopPropagation();\n handleSelectAll();\n }}\n >\n <div className=\"flex items-center gap-8 pointer-events-none\">\n <Checkbox checked={isAllSelected} onChange={() => {}} />\n <Text>전체</Text>\n </div>\n </div>\n <div className=\"px-10\">\n <Divider />\n </div>\n\n {/* 옵션 리스트 */}\n <div className=\"max-h-200 overflow-auto py-4\">\n <ul role=\"listbox\">\n {options.map((option) => {\n const isChecked = tempSelectedValues.includes(\n option.value\n );\n return (\n <li\n key={option.value}\n className={`\n relative select-none py-7 px-16\n ${\n option.disabled\n ? 'text-text cursor-not-allowed bg-gray-50'\n : 'text-text hover:bg-gray1 cursor-pointer'\n }\n `}\n onClick={(e) => {\n e.stopPropagation();\n if (!option.disabled) {\n handleCheckboxChange(option.value);\n }\n }}\n role=\"option\"\n aria-selected={isChecked}\n >\n <div className=\"flex items-center gap-8 pointer-events-none\">\n <Checkbox\n checked={isChecked}\n onChange={() => {}}\n disabled={option.disabled}\n />\n {option.color && (\n <div\n className={`w-16 h-16 rounded-full flex-shrink-0 bg-${option.color}`}\n />\n )}\n <Text>{option.label}</Text>\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n\n {/* 선택 완료 버튼 */}\n <div className=\"px-10\">\n <Divider />\n </div>\n <div className=\" p-9\">\n <Stack direction=\"row\" align=\"end\" justify=\"end\" wFull>\n <Button\n variant=\"lower\"\n size=\"medium\"\n onClick={handleConfirm}\n >\n {confirmButtonText}\n </Button>\n </Stack>\n </div>\n </div>\n )}\n </div>\n </Stack>\n </Stack>\n );\n }\n);\n\nMultiSelectCheckbox.displayName = 'MultiSelectCheckbox';\n\nexport default MultiSelectCheckbox;\n","import { ColorType } from '../../theme';\n\nfunction ColorIcFormArrow({\n isOpen = false,\n rotate = 0,\n width = 16,\n height = 16,\n color = 'secondaryText'\n}: {\n isOpen?: boolean;\n rotate?: number;\n width?: number;\n height?: number;\n color?: ColorType;\n}) {\n const rotateAngle = isOpen ? 180 : 0;\n const finalRotate = rotate + rotateAngle;\n\n return (\n <span\n className=\"cursor-pointer\"\n style={{\n color: `var(--color-${color})`,\n transform: `rotate(${finalRotate}deg)`,\n transition: 'transform 200ms',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n >\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.5854 4.9856C13.6683 4.90272 13.7851 4.89236 13.8765 4.95435L13.9146 4.9856C14.0086 5.07977 14.0094 5.21801 13.9165 5.31274L8.1665 10.9622L8.16455 10.9641C8.06824 11.0604 8.02264 11.0667 7.99951 11.0667C7.93967 11.0666 7.88852 11.0508 7.81689 10.9954L2.0835 5.36255C2.0024 5.2798 1.9927 5.16414 2.0542 5.07349L2.08545 5.0354C2.16829 4.95264 2.28515 4.94226 2.37646 5.00415L2.41455 5.0354L2.41748 5.03833L7.76709 10.2639L8.00146 10.4924L8.23389 10.262L13.5835 4.98755L13.5854 4.9856Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth=\"0.666667\"\n />\n </svg>\n </span>\n );\n}\n\nexport default ColorIcFormArrow;\n","import ColorIcFormArrow from '../../../assets/colorIcon/ColorIcFormArrow';\n\nexport interface PagingProps {\n page: number;\n total: number;\n limit: number;\n onPageChange: (page: number) => void;\n}\n\nfunction getPagination(current: number, total: number) {\n const pages: (number | string)[] = [];\n if (total <= 7) {\n for (let i = 1; i <= total; i++) pages.push(i);\n return pages;\n }\n if (current <= 4) {\n pages.push(1, 2, 3, 4, 5, '...', total);\n } else if (current >= total - 3) {\n pages.push(1, '...', total - 4, total - 3, total - 2, total - 1, total);\n } else {\n pages.push(1, '...', current - 1, current, current + 1, '...', total);\n }\n return pages;\n}\n\nexport default function Paging({\n page,\n total,\n limit,\n onPageChange\n}: PagingProps) {\n const totalPages = Math.ceil(total / limit);\n const pages = getPagination(page, totalPages);\n\n if (!total) return <></>;\n\n return (\n <div className=\"flex items-center justify-center gap-2 mt-8\">\n <span\n onClick={() => {\n if (page === 1) return;\n onPageChange(page - 2);\n }}\n className={`rounded flex p-6 ${\n page === 1 ? 'opacity-0 ' : 'cursor-pointer '\n } hover:bg-gray2`}\n >\n <ColorIcFormArrow rotate={90} />\n </span>\n {pages.map((p, i) =>\n typeof p === 'number' ? (\n <span\n key={p}\n onClick={() => onPageChange(p - 1)}\n className={`inline-block rounded h-24 w-24 pt-5 text-center leading-none text-body16 ${\n page === p\n ? 'bg-primary text-white cursor-not-allowed'\n : 'text-text cursor-pointer'\n }`}\n >\n {p}\n </span>\n ) : (\n <span\n key={`ellipsis-${i}`}\n className=\"px-10 inline-block text-gray-400 text-lg\"\n >\n ...\n </span>\n )\n )}\n <span\n onClick={() => {\n if (page === totalPages) return;\n onPageChange(page);\n }}\n className={`rounded flex p-6 ${\n page === totalPages ? 'opacity-0 ' : 'cursor-pointer'\n } hover:bg-gray2`}\n >\n <ColorIcFormArrow rotate={270} />\n </span>\n </div>\n );\n}\n","import React, { forwardRef } from 'react';\nimport { toRemFunction } from '../../../utils/helperUtils';\n\nexport interface RadioProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n className?: string;\n radioWidth?: number;\n}\n\nconst Radio = forwardRef<HTMLInputElement, RadioProps>(\n (\n { label, error, className = '', id, radioWidth, checked, ...props },\n ref\n ) => {\n const radioId = id || `radio-${Math.random().toString(36).substring(2, 9)}`;\n\n return (\n <div\n className=\"flex items-center h-36\"\n style={{\n width: radioWidth ? `${toRemFunction(radioWidth)}` : 'auto'\n }}\n >\n <div className=\"relative flex items-center gap-10\">\n <div className=\"flex items-center\">\n <input\n ref={ref}\n id={radioId}\n type=\"radio\"\n className=\"sr-only\"\n checked={checked}\n {...props}\n />\n\n <label\n htmlFor={radioId}\n className={`\n relative flex items-center justify-center w-20 h-20 rounded-full cursor-pointer\n border transition-all duration-100\n ${checked ? 'bg-primary border-primary' : 'bg-line border-line'}\n ${error ? 'border-red' : ''}\n ${props.disabled ? 'opacity-50 cursor-not-allowed' : ''}\n ${className}\n `}\n >\n <div\n className={` bg-white rounded-full items-center ${\n checked ? 'w-10 h-10 border-primary' : 'w-18 h-18 border-line'\n }`}\n ></div>\n </label>\n </div>\n {label && (\n <div className=\"text-sm\">\n <label\n htmlFor={radioId}\n className=\"text-body14 text-primaryText cursor-pointer\"\n >\n {label}\n </label>\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nRadio.displayName = 'Radio';\n\nexport default Radio;\n","import {\n formatDate,\n formatDateTime,\n toRemFunction\n} from '../../../utils/helperUtils';\nimport { Text } from '../Text';\nimport { ColumnDef } from '../../../types/table';\nimport { Input } from '../Input';\nimport { useState, useEffect } from 'react';\nimport { IcSortArrowUp, IcSortArrowDown } from '../../../assets';\nimport { formatNumberWithComma } from '../../../utils/helperUtils';\nimport { Stack } from '../Stack';\nimport { Checkbox } from '../Checkbox';\nimport { RequiredDot } from '../RequiredDot';\nimport { Radio } from '../Radio';\nimport React from 'react';\n\nexport interface TableProps<T> {\n columns: ColumnDef<T>[]; // 컬럼 정의\n datas?: T[]; // 데이터\n footers?: React.ReactNode | null; // 푸터\n\n // 테이블 전역 옵션\n isRadioOption?: boolean; // 라디오 옵션 기능\n isCheckboxOption?: boolean; // 체크박스 기능\n isModify?: boolean; // 편집 기능\n overWidth?: number; // 스크롤해야하는 테이블 너비\n emptyMessage?: string; // 빈 메시지\n\n // 조건 및 핸들러\n disabledCheckboxCondition?: (data: T) => boolean; // 체크박스 disabled 조건\n onButtonClick?: (id: number, value: string, key: string) => void; // 버튼 클릭 시 호출\n onLinkClick?: (id: number, value: string, key: string) => void; // 링크 클릭 시 호출\n onChangeInput?: (id: number, value: string, headerKey: string) => void; // 인풋 변경 시 호출\n onChangeCheckbox?: (id: number, value: boolean, headerKey: string) => void; // 체크박스 변경 시 호출\n onChangeToggle?: (id: number, value: boolean, headerKey: string) => void; // 토글 변경 시 호출\n onCheckboxOption?: (selectedIds: string[] | number[]) => void; // 제일 앞에있는 체크박스 옵션 체크 시 호출\n onRadioOption?: (selectedId: string) => void; // 라디오 옵션 체크 시 호출\n onMoveUp?: (id: string) => void; // 위로 이동 시 호출\n onMoveDown?: (id: string) => void; // 아래로 이동 시 호출\n onSort?: (key: string, direction: 'asc' | 'desc' | 'none') => void; // 정렬 시 호출\n}\n\nfunction Table<T extends Record<string, unknown>>({\n columns,\n datas = [],\n footers,\n isRadioOption = false,\n isCheckboxOption = false,\n isModify = false,\n overWidth,\n emptyMessage = '데이터가 없습니다.',\n disabledCheckboxCondition,\n onButtonClick,\n onLinkClick,\n onChangeInput,\n onChangeCheckbox,\n onChangeToggle,\n onCheckboxOption,\n onRadioOption,\n onMoveUp,\n onMoveDown,\n onSort\n}: TableProps<T>) {\n // columns에서 각 옵션 키들 추출\n const headersKeys = columns.map((col) => col.key);\n const linkKeys = columns\n .filter((col) => col.type === 'link')\n .map((col) => col.key);\n const dateKeys = columns\n .filter((col) => col.type === 'date')\n .map((col) => col.key);\n const dateTimeKeys = columns\n .filter((col) => col.type === 'dateTime')\n .map((col) => col.key);\n const amountKeys = columns\n .filter((col) => col.type === 'amount')\n .map((col) => col.key);\n const persentKeys = columns\n .filter((col) => col.type === 'percent')\n .map((col) => col.key);\n const inputKeys = columns\n .filter((col) => col.type === 'input')\n .map((col) => col.key);\n const checkboxKeys = columns\n .filter((col) => col.type === 'checkbox')\n .map((col) => col.key);\n const thAlignLeftKeys = columns\n .filter((col) => (col.thAlign || col.align) === 'left')\n .map((col) => col.key);\n const thAlignRightKeys = columns\n .filter((col) => (col.thAlign || col.align) === 'right')\n .map((col) => col.key);\n const tdAlignLeftKeys = columns\n .filter((col) => (col.tdAlign || col.align) === 'left')\n .map((col) => col.key);\n const tdAlignRightKeys = columns\n .filter((col) => (col.tdAlign || col.align) === 'right')\n .map((col) => col.key);\n const textBoldKeys = columns.filter((col) => col.bold).map((col) => col.key);\n const noWrapKeys = columns.filter((col) => col.noWrap).map((col) => col.key);\n const requiredKeys = columns\n .filter((col) => col.required)\n .map((col) => col.key);\n const importantColorKeys = columns\n .filter((col) => col.important)\n .map((col) => col.key);\n const sortKeys = columns.filter((col) => col.sortable).map((col) => col.key);\n const mergeDuplicateKeys = columns\n .filter((col) => col.mergeDuplicate)\n .map((col) => col.key);\n const [selectedIds, setSelectedIds] = useState<string[]>([]);\n const [sortState, setSortState] = useState<{\n key: string;\n direction: 'asc' | 'desc' | 'none';\n } | null>(null);\n\n // 전체 선택/해제 상태 (disabled 항목 제외)\n const enabledDatas = datas.filter(\n (data) => !disabledCheckboxCondition?.(data)\n );\n const isAllSelected =\n enabledDatas.length > 0 && selectedIds.length === enabledDatas.length;\n\n // 중복 셀 병합을 위한 헬퍼 함수들\n const getCellSpan = (\n rowIndex: number,\n colIndex: number,\n headerKey: string\n ): number => {\n if (!mergeDuplicateKeys.includes(headerKey)) return 1;\n\n const currentRow = datas[rowIndex];\n const currentOrderNo = currentRow['orderNo'];\n const currentValue = JSON.stringify(currentRow[headerKey]);\n let span = 1;\n\n // orderNo가 같은 행들 중에서 현재 컬럼 값이 같은 연속된 행들을 찾기\n for (let i = rowIndex + 1; i < datas.length; i++) {\n const nextRow = datas[i];\n const nextOrderNo = nextRow['orderNo'];\n const nextValue = JSON.stringify(nextRow[headerKey]);\n\n // orderNo가 다르면 병합 중단\n if (JSON.stringify(nextOrderNo) !== JSON.stringify(currentOrderNo)) {\n break;\n }\n\n // orderNo는 같지만 현재 컬럼 값이 다르면 병합 중단\n if (nextValue !== currentValue) {\n break;\n }\n\n span++;\n }\n\n return span;\n };\n\n // 병합된 셀의 보더 스타일을 위한 클래스 생성\n const getMergedCellClassName = (rowSpan: number): string => {\n if (rowSpan <= 1) return 'border-b border-line px-20 py-8';\n\n // 병합된 셀의 경우 오른쪽 보더를 강제로 표시\n return 'border-b border-r border-line px-20 py-8';\n };\n\n const shouldRenderCell = (\n rowIndex: number,\n colIndex: number,\n headerKey: string\n ): boolean => {\n if (!mergeDuplicateKeys.includes(headerKey)) return true;\n\n // 바로 위 행에 같은 orderNo와 같은 값이 있는지 확인\n if (rowIndex > 0) {\n const currentRow = datas[rowIndex];\n const previousRow = datas[rowIndex - 1];\n\n const currentOrderNo = currentRow['orderNo'];\n const previousOrderNo = previousRow['orderNo'];\n const currentValue = JSON.stringify(currentRow[headerKey]);\n const previousValue = JSON.stringify(previousRow[headerKey]);\n\n // orderNo가 같고 현재 컬럼 값도 같으면 렌더링하지 않음 (병합됨)\n if (\n JSON.stringify(currentOrderNo) === JSON.stringify(previousOrderNo) &&\n currentValue === previousValue\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n // 전체 선택/해제 핸들러\n const handleSelectAll = () => {\n if (isAllSelected) {\n setSelectedIds([]);\n onCheckboxOption?.([]);\n } else {\n // disabled가 아닌 항목들만 선택\n const enabledIds = enabledDatas\n .map((data) => data.id as number)\n .filter(Boolean);\n setSelectedIds(enabledIds.map(String));\n onCheckboxOption?.(enabledIds.map(String));\n }\n };\n\n // 개별 체크박스 핸들러\n const handleSelectItem = (id: string) => {\n // disabled 조건 확인\n const data = datas.find((item) => String(item.id) === id);\n if (data && disabledCheckboxCondition?.(data)) {\n return;\n }\n\n const newSelectedIds = selectedIds.includes(id)\n ? selectedIds.filter((selectedId) => selectedId !== id)\n : [...selectedIds, id];\n\n setSelectedIds(newSelectedIds);\n onCheckboxOption?.(newSelectedIds);\n };\n\n // 개별 라디오 핸들러\n const handleSelectRadioItem = (id: string) => {\n setSelectedIds([id]);\n onRadioOption?.(id);\n };\n\n // 위로 이동 핸들러\n const handleMoveUp = (id: string) => {\n onMoveUp?.(id);\n };\n\n // 아래로 이동 핸들러\n const handleMoveDown = (id: string) => {\n onMoveDown?.(id);\n };\n\n // 정렬 핸들러\n const handleSort = (key: string) => {\n if (!sortKeys.includes(key)) return;\n\n let newDirection: 'asc' | 'desc' | 'none';\n\n if (sortState?.key === key) {\n // 같은 컬럼 클릭 시: asc -> desc -> none -> asc 순환\n if (sortState.direction === 'asc') {\n newDirection = 'desc';\n } else if (sortState.direction === 'desc') {\n newDirection = 'none';\n } else {\n newDirection = 'asc';\n }\n } else {\n // 다른 컬럼 클릭 시: asc로 시작\n newDirection = 'asc';\n }\n\n if (newDirection === 'none') {\n setSortState(null);\n } else {\n setSortState({ key, direction: newDirection });\n }\n\n // 부모 컴포넌트에 정렬 이벤트 전달\n onSort?.(key, newDirection);\n };\n\n // 데이터 정렬 함수\n const getSortedData = (\n data: T[],\n sortKey: string,\n direction: 'asc' | 'desc' | 'none'\n ): T[] => {\n if (!sortKey || direction === 'none') return data;\n\n return [...data].sort((a, b) => {\n const aValue = a[sortKey];\n const bValue = b[sortKey];\n\n // null/undefined 처리\n if (aValue === null || aValue === undefined)\n return direction === 'asc' ? -1 : 1;\n if (bValue === null || bValue === undefined)\n return direction === 'asc' ? 1 : -1;\n\n // 숫자 타입 처리\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return direction === 'asc' ? aValue - bValue : bValue - aValue;\n }\n\n // 날짜 타입 처리\n if (dateKeys.includes(sortKey)) {\n const aDate = new Date(String(aValue)).getTime();\n const bDate = new Date(String(bValue)).getTime();\n return direction === 'asc' ? aDate - bDate : bDate - aDate;\n }\n\n // 날짜 시간 타입 처리\n if (dateTimeKeys.includes(sortKey)) {\n const aDate = new Date(String(aValue)).getTime();\n const bDate = new Date(String(bValue)).getTime();\n return direction === 'asc' ? aDate - bDate : bDate - aDate;\n }\n\n // 문자열 타입 처리\n const aString = String(aValue).toLowerCase();\n const bString = String(bValue).toLowerCase();\n\n if (aString < bString) return direction === 'asc' ? -1 : 1;\n if (aString > bString) return direction === 'asc' ? 1 : -1;\n return 0;\n });\n };\n\n // 정렬된 데이터 가져오기\n const sortedData = sortState\n ? getSortedData(datas, sortState.key, sortState.direction)\n : datas;\n\n // 데이터가 변경될 때 선택된 ID들 정리\n useEffect(() => {\n const currentIds = sortedData\n .map((data) => String(data.id))\n .filter(Boolean);\n const validSelectedIds = selectedIds.filter((id) =>\n currentIds.includes(id)\n );\n if (validSelectedIds.length !== selectedIds.length) {\n setSelectedIds(validSelectedIds);\n onCheckboxOption?.(validSelectedIds);\n }\n }, [sortedData, selectedIds, onCheckboxOption]);\n\n const cellData = (\n data: T,\n headerKey: string,\n rowIndex: number,\n colIndex: number\n ) => {\n const value = data[headerKey];\n\n // 중복 셀 병합이 활성화된 경우 렌더링 여부 확인\n if (!shouldRenderCell(rowIndex, colIndex, headerKey)) {\n return null;\n }\n\n const rowSpan = getCellSpan(rowIndex, colIndex, headerKey);\n\n // 🔥 커스텀 render 함수가 있으면 우선 사용\n const column = columns.find((col) => col.key === headerKey);\n if (column?.render) {\n return (\n <td\n key={`${rowIndex}-${colIndex}`}\n className={`${getMergedCellClassName(rowSpan)} ${\n tdAlignLeftKeys?.includes(headerKey)\n ? 'text-left'\n : tdAlignRightKeys?.includes(headerKey)\n ? 'text-right'\n : 'text-center'\n } ${noWrapKeys?.includes(headerKey) ? 'whitespace-nowrap' : ''} ${\n textBoldKeys?.includes(headerKey) ? 'font-bold' : ''\n } ${column.tdClassName || ''}`}\n rowSpan={rowSpan > 1 ? rowSpan : undefined}\n >\n {column.render(value, data, rowIndex)}\n </td>\n );\n }\n\n /**\n * input 형식\n */\n if (inputKeys?.includes(headerKey)) {\n return (\n <td\n key={`${rowIndex}-${colIndex}`}\n className={`${getMergedCellClassName(rowSpan)} ${\n tdAlignLeftKeys?.includes(headerKey)\n ? 'text-left'\n : tdAlignRightKeys?.includes(headerKey)\n ? 'text-right'\n : 'text-center'\n } ${noWrapKeys?.includes(headerKey) ? 'whitespace-nowrap' : ''}`}\n rowSpan={rowSpan > 1 ? rowSpan : undefined}\n >\n <Stack direction=\"row\" gap={4} align=\"center\" justify=\"center\">\n <Input\n type=\"number\"\n textAlign=\"right\"\n direction=\"row\"\n value={String(value)}\n customWidth={120}\n // fullWidth={true}\n onChange={(e) => {\n onChangeInput?.(\n data.id as number,\n String(e.target.value),\n headerKey\n );\n }}\n />\n <Text>원</Text>\n </Stack>\n </td>\n );\n }\n /**\n * 체크박스 형식\n */\n if (checkboxKeys?.includes(headerKey)) {\n return (\n <td\n key={`${rowIndex}-${colIndex}`}\n className={`${getMergedCellClassName(rowSpan)} ${\n noWrapKeys?.includes(headerKey) ? 'whitespace-nowrap' : ''\n }`}\n rowSpan={rowSpan > 1 ? rowSpan : undefined}\n >\n <Stack direction=\"row\" gap={4} align=\"center\" justify=\"start\">\n <Checkbox\n checked={value as boolean}\n onChange={(e) =>\n onChangeCheckbox?.(\n data.id as number,\n e.target.checked,\n headerKey\n )\n }\n />\n </Stack>\n </td>\n );\n }\n /**\n * 금액 형식\n */\n if (amountKeys?.includes(headerKey)) {\n return (\n <td\n key={`${rowIndex}-${colIndex}`}\n className={`${getMergedCellClassName(rowSpan)} ${\n tdAlignLeftKeys?.includes(headerKey)\n ? 'text-left'\n : tdAlignRightKeys?.includes(headerKey)\n ? 'text-right'\n : 'text-center'\n } ${noWrapKeys?.includes(headerKey) ? 'whitespace-nowrap' : ''}`}\n rowSpan={rowSpan > 1 ? rowSpan : undefined}\n >\n {formatNumberWithComma(String(value))}원\n </td>\n );\n }\n\n /**\n * 날짜 형식\n */\n if (dateKeys?.includes(headerKey)) {\n return (\n <td\n key={`${rowIndex}-${colIndex}`}\n className={`${getMergedCellClassName(rowSpan)} ${\n tdAlignLeftKeys?.includes(headerKey)\n ? 'text-left'\n : tdAlignRightKeys?.includes(headerKey)\n ? 'text-right'\n : 'text-center'\n } ${noWrapKeys?.includes(headerKey) ? 'whitespace-nowrap' : ''}`}\n rowSpan={rowSpan > 1 ? rowSpan : undefined}\n >\n {formatDate(String(value))}\n </td>\n );\n }\n\n /**\n * 날짜 시간 형식\n */\n if (dateTimeKeys?.includes(headerKey)) {\n return (\n <td\n key={`${rowIndex}-${colIndex}`}\n className={`${getMergedCellClassName(rowSpan)} ${\n tdAlignLeftKeys?.includes(headerKey)\n ? 'text-left'\n : tdAlignRightKeys?.includes(headerKey)\n ? 'text-right'\n : 'text-center'\n } ${noWrapKeys?.includes(headerKey) ? 'whitespace-nowrap' : ''}`}\n rowSpan={rowSpan > 1 ? rowSpan : undefined}\n >\n {value ? formatDateTime(String(value)) : '-'}\n </td>\n );\n }\n\n /**\n * 커스텀 셀 컴포넌트 형식 (reactNodeConfig에 설정된 경우)\n */\n // const nodeConfig = reactNodeConfig?.[headerKey];\n // if (nodeConfig) {\n // const componentType = nodeConfig.type;\n\n // // 컴포넌트 타입을 TableCellComponentKey로 매핑\n // const componentKeyMap: Record<\n // ReactNodeComponentType,\n // TableCellComponentKey\n // > = {\n // toggle: \"active\",\n // buttons: \"tableButtons\",\n // tags: \"tableTags\",\n // textOverflow: \"textOverflow\",\n // textArrowButton: \"textArrowButton\",\n // };\n\n // const componentKey = componentKeyMap[componentType];\n // let componentProps: TableCellComponentPropsMap[TableCellComponentKey];\n\n // // 컴포넌트 타입별로 props 구성\n // if (componentType === \"buttons\") {\n // componentProps = {\n // buttons: value as TableButtonType[],\n // } as unknown as TableCellComponentPropsMap[TableCellComponentKey];\n // } else if (componentType === \"tags\") {\n // componentProps = {\n // tags: value as TableTagType[],\n // } as unknown as TableCellComponentPropsMap[TableCellComponentKey];\n // } else if (componentType === \"toggle\") {\n // // toggle인 경우 boolean 값 또는 TableToggleType 객체를 처리\n // const toggleValue = value as boolean | TableToggleType;\n // if (typeof toggleValue === \"boolean\") {\n // // boolean인 경우 onChangeToggle 핸들러를 사용하여 부모 컴포넌트에 알림\n // componentProps = {\n // checked: toggleValue,\n // onChange: (checked: boolean) => {\n // onChangeToggle?.(data.id as number, checked, headerKey);\n // },\n // } as unknown as TableCellComponentPropsMap[TableCellComponentKey];\n // } else {\n // // 객체인 경우 이미 onChange가 포함되어 있으므로 그대로 사용\n // componentProps =\n // toggleValue as TableCellComponentPropsMap[TableCellComponentKey];\n // }\n // } else if (componentType === \"textOverflow\") {\n // componentProps =\n // value as TableCellComponentPropsMap[TableCellComponentKey];\n // } else if (componentType === \"textArrowButton\") {\n // componentProps =\n // value as TableCellComponentPropsMap[TableCellComponentKey];\n // } else {\n // componentProps =\n // value as TableCellComponentPropsMap[TableCellComponentKey];\n // }\n\n // return (\n // <td\n // key={`${rowIndex}-${colIndex}`}\n // className={`${getMergedCellClassName(rowSpan)} ${\n // tdAlignLeftKeys?.includes(headerKey)\n // ? \"text-left\"\n // : tdAlignRightKeys?.includes(headerKey)\n // ? \"text-right\"\n // : \"text-center\"\n // } ${noWrapKeys?.includes(headerKey) ? \"whitespace-nowrap\" : \"\"}`}\n // rowSpan={rowSpan > 1 ? rowSpan : undefined}\n // >\n // {renderTableCellComponent(componentKey, componentProps)}\n // </td>\n // );\n // }\n\n /**\n * ReactNode 타입 체크 (React 엘리먼트, 문자열, 숫자, 배열 등)\n */\n if (React.isValidElement(value)) {\n return (\n <td\n key={`${rowIndex}-${colIndex}`}\n className={`${getMergedCellClassName(rowSpan)} ${\n tdAlignLeftKeys?.includes(headerKey)\n ? 'text-left'\n : tdAlignRightKeys?.includes(headerKey)\n ? 'text-right'\n : 'text-center'\n } ${noWrapKeys?.includes(headerKey) ? 'whitespace-nowrap' : ''}`}\n rowSpan={rowSpan > 1 ? rowSpan : undefined}\n >\n {value}\n </td>\n );\n }\n\n /**\n * 일반 텍스트\n */\n let cellContent: React.ReactNode = value?.toString() || '';\n\n /**\n * 퍼센트 유닛 추가\n */\n if (persentKeys?.includes(headerKey)) {\n cellContent = `${formatNumberWithComma(String(value))}%`;\n }\n\n /**\n * 객체, 링크 처리\n */\n if (typeof value === 'object' && value !== null) {\n // object인 경우 각 키-값을 적절히 렌더링\n // 이미지 필드는 img 태그로, 텍스트는 span으로 렌더링\n cellContent = (\n <Stack direction=\"row\" gap={8} align=\"center\">\n {Object.entries(value as Record<string, unknown>).map(\n ([key, val], index) => {\n // 이미지 필드인 경우\n if (key === 'image' && val) {\n return (\n <img\n key={`${key}-${index}`}\n src={String(val)}\n alt=\"상품 이미지\"\n className=\"w-40 h-40 object-cover rounded border border-line\"\n />\n );\n }\n // 텍스트 필드인 경우\n return (\n <span\n key={`${key}-${index}`}\n className={`${key === 'name' || key === 'title' ? '' : ''} `}\n >\n {val?.toString() || ''}\n </span>\n );\n }\n )}\n </Stack>\n );\n }\n return (\n <td\n key={`${rowIndex}-${colIndex}`}\n className={`${getMergedCellClassName(rowSpan)} \n ${\n linkKeys?.includes(headerKey) &&\n 'text-primary underline cursor-pointer'\n }\n ${\n tdAlignLeftKeys?.includes(headerKey)\n ? 'text-left'\n : tdAlignRightKeys?.includes(headerKey)\n ? 'text-right'\n : 'text-center'\n }\n ${noWrapKeys?.includes(headerKey) ? 'whitespace-nowrap' : ''}\n ${textBoldKeys?.includes(headerKey) ? 'font-bold' : ''}\n `}\n rowSpan={rowSpan > 1 ? rowSpan : undefined}\n onClick={() => {\n if (!linkKeys?.includes(headerKey)) {\n return;\n }\n onLinkClick?.(data.id as number, String(value), headerKey);\n }}\n >\n {cellContent}\n </td>\n );\n };\n\n const renderTableBody = () => {\n if (sortedData.length === 0) {\n const colSpanCount =\n headersKeys.length +\n (isCheckboxOption ? 1 : 0) +\n (isRadioOption ? 1 : 0) +\n (isModify ? 1 : 0);\n return (\n <tr>\n <td\n colSpan={colSpanCount}\n className=\"text-center border-b border-line px-20 py-8\"\n >\n {emptyMessage}\n </td>\n </tr>\n );\n }\n\n return sortedData.map((data, rowIndex) => (\n <tr\n key={data.id ? String(data.id) : rowIndex}\n className={`${\n mergeDuplicateKeys.length === 0 ? 'hover:bg-gray1' : ''\n } ${\n isCheckboxOption &&\n mergeDuplicateKeys.length === 0 &&\n selectedIds.includes(String(data.id)) &&\n 'bg-primary5'\n }`}\n >\n {isCheckboxOption && (\n <td className=\"border-b border-line px-20 py-8 text-center w-30 \">\n <Checkbox\n checked={selectedIds.includes(String(data.id))}\n disabled={disabledCheckboxCondition?.(data) || false}\n onChange={() => handleSelectItem(String(data.id))}\n />\n </td>\n )}\n {isRadioOption && (\n <td className=\"border-b border-line px-20 py-8 text-center w-50\">\n <Radio\n checked={selectedIds.includes(String(data.id))}\n onChange={() => handleSelectRadioItem(String(data.id))}\n />\n </td>\n )}\n {isModify && (\n <td className=\"border-b border-line px-20 py-8 text-center w-60\">\n <div className=\"flex justify-center gap-1\">\n <img\n src={IcSortArrowUp}\n alt=\"위로 이동\"\n className={`w-16 h-16 cursor-pointer ${\n rowIndex === 0\n ? 'opacity-30 cursor-not-allowed'\n : 'hover:opacity-70'\n }`}\n onClick={() => {\n if (rowIndex > 0) {\n handleMoveUp(String(data.id));\n }\n }}\n />\n <img\n src={IcSortArrowDown}\n alt=\"아래로 이동\"\n className={`w-16 h-16 cursor-pointer ${\n rowIndex === sortedData.length - 1\n ? 'opacity-30 cursor-not-allowed'\n : 'hover:opacity-70'\n }`}\n onClick={() => {\n if (rowIndex < sortedData.length - 1) {\n handleMoveDown(String(data.id));\n }\n }}\n />\n </div>\n </td>\n )}\n {headersKeys\n .map((headerKey, colIndex) => {\n const cell = cellData(data, headerKey, rowIndex, colIndex);\n return cell;\n })\n .filter(Boolean)}\n </tr>\n ));\n };\n\n useEffect(() => {\n if (selectedIds.length > 0) {\n setSelectedIds([]);\n }\n }, [datas]);\n\n return (\n <div className=\"w-full\">\n <div className={`${overWidth ? 'overflow-x-auto' : ''}`}>\n <table\n className=\"border-collapse border-line border-t w-full table\"\n style={{\n minWidth: overWidth ? toRemFunction(overWidth) : '100%'\n }}\n >\n <thead>\n <tr>\n {isCheckboxOption && (\n <th className=\"border-b border-line px-20 py-8 bg-gray1 text-center w-30 vertical-middle\">\n <Checkbox\n checked={isAllSelected}\n onChange={handleSelectAll}\n />\n </th>\n )}\n {isRadioOption && (\n <th className=\"border-b border-line px-20 py-8 bg-gray1 text-center w-30\">\n 선택\n </th>\n )}\n {isModify && (\n <th className=\"border-b border-line px-20 py-8 bg-gray1 text-center w-60 whitespace-nowrap\">\n 편집\n </th>\n )}\n {columns.map((column, index) => {\n const title = column.header;\n const colSpan = column.colSpan;\n const headerKey = column.key;\n const isSortable = sortKeys.includes(headerKey);\n const isCurrentSort = sortState?.key === headerKey;\n const isImportantColor = importantColorKeys.includes(headerKey);\n\n return (\n <th\n key={index}\n colSpan={colSpan}\n className={`border-b border-line px-20 py-7 bg-gray1 whitespace-nowrap text-body14 text-text font-medium ${\n thAlignLeftKeys?.includes(headerKey)\n ? 'text-left'\n : thAlignRightKeys?.includes(headerKey)\n ? 'text-right'\n : 'text-center'\n } ${isSortable ? 'cursor-pointer hover:bg-gray-200' : ''}\n ${isImportantColor ? 'text-primary bg-primary10' : ''}\n ${column.thClassName || ''}`}\n onClick={() => isSortable && handleSort(headerKey)}\n >\n <>\n {typeof title === 'string' ? <span>{title}</span> : title}\n {requiredKeys?.includes(headerKey) && (\n <span\n className=\"inline-block -mt-2\"\n style={{ verticalAlign: 'top' }}\n >\n <RequiredDot />\n </span>\n )}\n {isSortable && (\n <div className=\"flex flex-col inline-block ml-5 vertical-middle\">\n <img\n src={IcSortArrowUp}\n alt=\"오름차순\"\n className={`w-12 h-12 ${\n isCurrentSort && sortState.direction === 'asc'\n ? 'opacity-100'\n : 'opacity-30'\n }`}\n />\n <img\n src={IcSortArrowDown}\n alt=\"내림차순\"\n className={`w-12 h-12 ${\n isCurrentSort && sortState.direction === 'desc'\n ? 'opacity-100'\n : 'opacity-30'\n }`}\n />\n </div>\n )}\n </>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>{renderTableBody()}</tbody>\n {footers && <tfoot>{footers}</tfoot>}\n </table>\n </div>\n </div>\n );\n}\n\nexport default Table;\n","export const LIST_PAGE_SIZE = 10;\n","import { Button } from '../Button';\nimport { Divider } from '../Divider';\nimport { SelectBox } from '../SelectBox';\nimport { IcDelete } from '../../../assets';\nimport { Stack } from '../Stack';\nimport { Text } from '../Text';\nimport { LIST_PAGE_SIZE } from '../../../constants/common';\n\nexport interface TableTopProps {\n type?: 'search' | 'option';\n count?: number;\n pageSize?: number;\n countText?: string;\n leftButtons?: React.ReactNode;\n rightButtons?: React.ReactNode;\n registText?: string;\n sortOptionValue?: string;\n sortOptions?: { label: string; value: string }[];\n useDivider?: boolean;\n isPageCount?: boolean;\n useCountOption?: boolean;\n deleteText?: string;\n onChangeSort?: (value: string) => void;\n onChangePageSize?: (value: number) => void;\n onDelete?: () => void;\n onExcelDownload?: () => void;\n onSelectExcelDownload?: () => void;\n handleRegist?: () => void;\n}\n\nfunction TableTop({\n type = 'search',\n count,\n pageSize = LIST_PAGE_SIZE,\n countText = '개 상품 조회',\n leftButtons,\n rightButtons,\n registText = '상품 등록',\n sortOptionValue,\n sortOptions,\n useDivider = true,\n isPageCount = true,\n useCountOption = true,\n deleteText = '선택 삭제',\n onChangeSort,\n onChangePageSize,\n onDelete,\n onExcelDownload,\n onSelectExcelDownload,\n handleRegist\n}: TableTopProps) {\n return (\n <Stack direction=\"col\" gap={6}>\n {(sortOptions || useCountOption || isPageCount) && (\n <Stack direction=\"row\" gap={10} justify=\"between\" align=\"end\">\n {isPageCount && (\n <Stack direction=\"row\" gap={10}>\n <Text size=\"body14\" fontWeight=\"bold\">\n 총{'\\u00A0'}\n <Text size=\"body14\" fontWeight=\"bold\" color=\"primary\">\n {count}\n </Text>\n {countText}\n </Text>\n </Stack>\n )}\n\n <Stack direction=\"row\" gap={10} align=\"center\">\n {rightButtons}\n {sortOptions && (\n <SelectBox\n value={sortOptionValue}\n options={sortOptions}\n customWidth={160}\n onChange={(value) => {\n if (onChangeSort) {\n onChangeSort(value as string);\n }\n }}\n />\n )}\n {useCountOption && (\n <SelectBox\n value={pageSize}\n options={[\n { label: '10 건씩 보기', value: 10 },\n { label: '20 건씩 보기', value: 20 },\n { label: '30 건씩 보기', value: 30 },\n { label: '50 건씩 보기', value: 50 },\n { label: '100 건씩 보기', value: 100 }\n ]}\n customWidth={160}\n onChange={(value) => {\n if (onChangePageSize) {\n onChangePageSize(value as number);\n }\n }}\n />\n )}\n </Stack>\n </Stack>\n )}\n {type === 'search' && (\n <>\n {useDivider && isPageCount && <Divider />}\n <Stack direction=\"row\" gap={10} justify=\"between\">\n <Stack direction=\"row\" gap={4}>\n {leftButtons}\n </Stack>\n <Stack direction=\"row\" gap={4}>\n {/* {onSelectExcelDownload && (\n <Button\n size=\"medium\"\n variant=\"secondary\"\n onClick={() => {\n onSelectExcelDownload?.();\n }}\n >\n 선택 엑셀 다운로드\n </Button>\n )} */}\n\n {handleRegist && (\n <Button\n size=\"medium\"\n variant=\"primary\"\n onClick={() => {\n handleRegist?.();\n }}\n >\n {registText}\n </Button>\n )}\n </Stack>\n </Stack>\n </>\n )}\n </Stack>\n );\n}\n\nexport default TableTop;\n","import { Stack } from '../Stack';\n\nexport interface CommonTableProps {\n tableTop?: React.ReactNode;\n tableBody?: React.ReactNode;\n pagination?: React.ReactNode;\n}\nfunction CommonTable({ tableTop, tableBody, pagination }: CommonTableProps) {\n return (\n <Stack direction=\"col\" gap={20} wFull={true}>\n <Stack direction=\"col\" gap={7}>\n {tableTop && tableTop}\n {tableBody && tableBody}\n {pagination && pagination}\n </Stack>\n </Stack>\n );\n}\n\nexport default CommonTable;\n","import React from 'react';\nimport {\n ColorType,\n FontSizeType,\n FontWeightType,\n fontSize,\n fontWeight,\n colors\n} from '../../../theme';\n\nexport interface TagProps extends React.HTMLAttributes<HTMLDivElement> {\n id?: string;\n children: React.ReactNode;\n color?: ColorType;\n bgColor?: ColorType;\n size?: FontSizeType;\n fontWeight?: FontWeightType;\n className?: string;\n variant?: 'filled' | 'outlined';\n style?: React.CSSProperties;\n}\n\nexport default function Tag({\n id,\n children,\n color = 'text',\n bgColor,\n size = 'body12',\n fontWeight: fontWeightProp = 'bold',\n className = '',\n variant = 'filled',\n style,\n ...props\n}: TagProps) {\n // variant에 따른 스타일 설정\n const getVariantStyles = (): React.CSSProperties => {\n if (variant === 'outlined') {\n return {\n backgroundColor: colors.white,\n color: colors[color],\n border: `1px solid ${colors.line}`\n };\n }\n\n // filled variant\n const bgColorKey = bgColor || (`${color}Light` as ColorType);\n return {\n backgroundColor:\n colors[bgColorKey] ||\n colors[`${color}Light` as ColorType] ||\n colors.textLight,\n color: colors[color]\n };\n };\n\n const styles: React.CSSProperties = {\n display: 'inline-block',\n fontSize: fontSize[size],\n fontWeight: fontWeight[fontWeightProp],\n paddingLeft: '6px',\n paddingRight: '6px',\n height: '26px',\n borderRadius: '6px',\n touchAction: 'none',\n lineHeight: '26px',\n whiteSpace: 'nowrap',\n ...getVariantStyles(),\n ...style // 사용자 정의 style을 마지막에 배치하여 오버라이드 가능하게\n };\n\n return (\n <div id={id} style={styles} className={className} {...props}>\n {children}\n </div>\n );\n}\n","import React, { useState, KeyboardEvent, forwardRef, useMemo } from 'react';\nimport { Stack } from '../Stack';\nimport { Label } from '../Label';\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n DragEndEvent,\n DragStartEvent,\n DragOverlay,\n MeasuringStrategy\n} from '@dnd-kit/core';\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n useSortable,\n rectSortingStrategy\n} from '@dnd-kit/sortable';\nimport ColorIcTagClose from '../../../assets/colorIcon/ColorIcTagClose';\n\n// 일반 태그 컴포넌트 (드래그 불가능)\nconst SimpleTag = ({\n tag,\n index,\n onRemove,\n disabled\n}: {\n tag: string;\n index: number;\n onRemove: (index: number) => void;\n disabled: boolean;\n}) => {\n return (\n <div className=\"flex items-center justify-center gap-8 bg-primary3 text-text text-body14 font-medium px-12 h-36 rounded-md border border-line leading-[36px]\">\n {!disabled && (\n <span className=\"cursor-pointer\" onClick={() => onRemove(index)}>\n <ColorIcTagClose width={10} height={10} color=\"text\" />\n </span>\n )}\n <span>{tag}</span>\n </div>\n );\n};\n\n// 개별 태그를 위한 Sortable 아이템 컴포넌트 (드래그 가능)\nconst SortableTag = ({\n tag,\n index,\n onRemove,\n disabled\n}: {\n tag: string;\n index: number;\n onRemove: (index: number) => void;\n disabled: boolean;\n}) => {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging\n } = useSortable({ id: tag });\n\n const style = {\n transform: transform\n ? `translate3d(${transform.x}px, ${transform.y}px, 0)`\n : undefined,\n transition,\n opacity: isDragging ? 0 : 1 // 드래그 중인 원본 항목은 투명하게 처리\n };\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n {...attributes}\n {...listeners}\n className=\"flex items-center justify-center gap-8 bg-primary3 text-text text-body14 font-medium px-12 h-36 rounded-md touch-none border border-line leading-[36px]\"\n >\n {!disabled && (\n <span\n onPointerDown={(e) => {\n e.stopPropagation(); // 드래그 이벤트 전파 방지\n onRemove(index);\n }}\n >\n <ColorIcTagClose width={10} height={10} color=\"text\" />\n </span>\n )}\n <span>{tag}</span>\n </div>\n );\n};\n\ninterface TagInputProps {\n label?: string;\n labelHidden?: boolean;\n tags: string[];\n onChange: (tags: string[]) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n id?: string;\n required?: boolean;\n error?: string;\n tooltip?: string | React.ReactNode;\n onlyView?: boolean;\n draggable?: boolean; // 드래그 가능 여부 (기본값: true)\n onDuplicateTag?: (tag: string) => void; // 중복 태그 입력 시 호출되는 콜백\n}\n\nconst TagInput = forwardRef<HTMLInputElement, TagInputProps>(\n (\n {\n label,\n labelHidden,\n tags,\n onChange,\n placeholder = '입력 후 Enter',\n disabled = false,\n className = '',\n id,\n required = false,\n error,\n tooltip,\n onlyView = true,\n draggable = true, // 기본값: 드래그 가능\n onDuplicateTag\n },\n ref\n ) => {\n const [inputValue, setInputValue] = useState('');\n const [activeId, setActiveId] = useState<string | null>(null);\n const [draggedWidth, setDraggedWidth] = useState<number | null>(null);\n const activeTag = useMemo(\n () => tags.find((tag) => tag === activeId),\n [activeId, tags]\n );\n\n const inputId =\n id || `tag-input-${Math.random().toString(36).substring(2, 9)}`;\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates\n })\n );\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' && !e.nativeEvent.isComposing) {\n e.preventDefault();\n const newTag = inputValue.trim();\n if (newTag && !tags.includes(newTag)) {\n onChange([...tags, newTag]);\n setInputValue('');\n } else if (newTag && onDuplicateTag) {\n // 얼럿 대체 : 입력한 내용과 동일한 항목이 존재합니다.\\n다시 입력해 주세요.\n // 중복 태그 입력 시 콜백 호출\n onDuplicateTag(newTag);\n }\n }\n };\n\n const removeTag = (indexToRemove: number) => {\n if (disabled) return;\n onChange(tags.filter((_, index) => index !== indexToRemove));\n };\n\n const handleDragStart = (event: DragStartEvent) => {\n setActiveId(event.active.id as string);\n if (event.active.rect.current.initial) {\n setDraggedWidth(event.active.rect.current.initial.width);\n }\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n\n if (over && active.id !== over.id) {\n const oldIndex = tags.findIndex((tag) => tag === active.id);\n const newIndex = tags.findIndex((tag) => tag === over.id);\n onChange(arrayMove(tags, oldIndex, newIndex));\n }\n\n setActiveId(null);\n setDraggedWidth(null);\n };\n\n const handleDragCancel = () => {\n setActiveId(null);\n setDraggedWidth(null);\n };\n\n // 드래그 불가능한 경우 일반 태그 렌더링\n if (!draggable) {\n return (\n <Stack direction=\"col\" gap={4} className={className} wFull={true}>\n <Label\n label={label}\n required={required}\n tooltip={tooltip}\n inputId={inputId}\n labelHidden={labelHidden}\n />\n <div\n className={`\n flex items-center flex-wrap gap-8 rounded-md\n min-h-36\n ${error ? 'border-red' : 'border-line'}\n ${disabled ? 'bg-gray1' : 'bg-white'}\n `}\n >\n {tags.map((tag, index) => (\n <SimpleTag\n key={tag}\n tag={tag}\n index={index}\n onRemove={removeTag}\n disabled={disabled}\n />\n ))}\n </div>\n </Stack>\n );\n }\n\n // 드래그 가능한 경우 DndContext 사용\n return (\n <Stack direction=\"col\" gap={4} className={className} wFull={true}>\n <Label\n label={label}\n required={required}\n tooltip={tooltip}\n inputId={inputId}\n labelHidden={labelHidden}\n />\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragCancel={handleDragCancel}\n measuring={{\n droppable: {\n strategy: MeasuringStrategy.Always\n }\n }}\n >\n <SortableContext items={tags} strategy={rectSortingStrategy}>\n <div\n className={`\n flex items-center flex-wrap gap-8 rounded-md\n min-h-36\n ${error ? 'border-red' : 'border-line'}\n ${disabled ? 'bg-gray1' : 'bg-white'}\n `}\n >\n {tags.map((tag, index) => (\n <SortableTag\n key={tag}\n tag={tag}\n index={index}\n onRemove={removeTag}\n disabled={disabled}\n />\n ))}\n {!onlyView && (\n <input\n ref={ref}\n id={inputId}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n placeholder={tags.length === 0 ? placeholder : ''}\n disabled={disabled}\n className=\" text-text text-body14 font-medium px-12 h-36 rounded-md text-text \" //bg-primary3 border border-line\n />\n )}\n </div>\n </SortableContext>\n <DragOverlay dropAnimation={null} adjustScale={false}>\n {activeTag ? (\n <div\n className=\"flex items-center justify-center gap-8 bg-primary3 text-text text-body14 font-medium px-12 h-36 rounded-md border border-line leading-[36px] shadow-lg\"\n style={{\n width: draggedWidth ? `${draggedWidth}px` : 'auto'\n }}\n >\n {!disabled && (\n <span>\n <ColorIcTagClose width={10} height={10} color=\"text\" />\n </span>\n )}\n <span>{activeTag}</span>\n </div>\n ) : null}\n </DragOverlay>\n </DndContext>\n </Stack>\n );\n }\n);\n\nTagInput.displayName = 'TagInput';\n\nexport default TagInput;\n","import React from 'react';\nimport { Stack } from '../Stack';\nimport { Label } from '../Label';\nimport { toRemFunction } from '../../../utils/helperUtils';\nimport { CommonFormDataProps } from '../../../types/common';\nimport { Text } from '../Text';\n\nexport interface TextAreaProps\n extends\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n CommonFormDataProps {\n areaHeight?: number;\n maxLength?: number;\n}\n\nconst TextArea: React.FC<TextAreaProps> = ({\n label,\n labelHidden,\n labelWidth,\n error,\n fullWidth = false,\n required = false,\n direction = 'row',\n id,\n className = '',\n rows = 5,\n areaHeight = 80,\n maxLength,\n ...props\n}) => {\n const textareaId =\n id || `textarea-${Math.random().toString(36).substring(2, 9)}`;\n\n return (\n <Stack\n direction={direction}\n wFull={fullWidth}\n gap={direction === 'row' ? 14 : 4}\n align={direction === 'row' ? 'center' : 'start'}\n >\n <Label\n label={label}\n required={required}\n width={labelWidth}\n labelHidden={labelHidden}\n />\n\n <Stack\n gap={0}\n className=\"flex-auto relative\"\n wFull={direction === 'row' ? false : fullWidth}\n >\n <textarea\n id={textareaId}\n rows={rows}\n className={`\n px-12 py-10 border rounded-md w-full\n ${error ? 'border-red' : 'border-line'}\n focus:border-primary\n resize-vertical\n ${className}\n `}\n style={{ height: `${toRemFunction(areaHeight)}` }}\n {...props}\n maxLength={maxLength}\n />\n\n {maxLength && (\n <Text color=\"primaryText\" justify=\"end\">\n <Text color=\"red\">{props.value?.toString().length || 0}</Text>/\n {maxLength}\n </Text>\n )}\n </Stack>\n </Stack>\n );\n};\n\nexport default TextArea;\n","import { ColorType, FontSizeType } from '../../../theme';\nimport { Stack } from '../Stack';\nimport { Text } from '../Text';\nimport ColorIcArrow from '../../../assets/colorIcon/ColorIcArrow';\n\nexport interface TextButtonProps {\n text: string;\n isOpen?: boolean;\n onClick?: () => void;\n color?: ColorType;\n type?: 'none' | 'arrow' | 'underline';\n size?: FontSizeType;\n}\n\nfunction TextButton({\n text,\n isOpen = false,\n onClick,\n color = 'primaryText',\n type = 'arrow',\n size = 'body14'\n}: TextButtonProps) {\n return (\n <Stack\n direction=\"row\"\n align=\"center\"\n justify=\"center\"\n onClick={onClick}\n className=\"cursor-pointer\"\n >\n <Text\n size={size}\n fontWeight=\"bold\"\n color={color}\n textDecoration={type === 'underline' ? 'underline' : 'none'}\n className=\"leading-none\"\n >\n {text}\n </Text>\n {type === 'arrow' && <ColorIcArrow isOpen={isOpen} color={color} />}\n </Stack>\n );\n}\n\nexport default TextButton;\n","import React, { forwardRef, useRef, useState, useEffect } from 'react';\nimport { Stack } from '../Stack';\nimport { Label } from '../Label';\nimport { toRemFunction } from '../../../utils/helperUtils';\n\nexport interface ToggleProps {\n checked?: boolean;\n onChange?: (checked: boolean) => void;\n label?: string;\n disabled?: boolean;\n size?: 'small' | 'medium' | 'large';\n textToggleSize?: number;\n className?: string;\n id?: string;\n required?: boolean;\n error?: string;\n tooltip?: React.ReactNode;\n onText?: string;\n offText?: string;\n labelWidth?: number;\n isDot?: boolean;\n}\n\nconst Toggle = forwardRef<HTMLButtonElement, ToggleProps>(\n (\n {\n checked = false,\n onChange,\n label,\n disabled = false,\n size = 'medium',\n textToggleSize = 76,\n className = '',\n id,\n required = false,\n error,\n tooltip,\n onText,\n offText,\n labelWidth,\n isDot = false\n },\n ref\n ) => {\n const toggleId =\n id || `toggle-${Math.random().toString(36).substring(2, 9)}`;\n\n const onRef = useRef<HTMLSpanElement>(null);\n const offRef = useRef<HTMLSpanElement>(null);\n const [sliderStyle, setSliderStyle] = useState({});\n\n const handleToggle = () => {\n if (!disabled && onChange) {\n onChange(!checked);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleToggle();\n }\n };\n\n useEffect(() => {\n if (!onText || !offText) return;\n\n const targetRef = checked ? onRef : offRef;\n if (targetRef.current) {\n setSliderStyle({\n width: targetRef.current.offsetWidth,\n transform: `translateX(${targetRef.current.offsetLeft - 4}px)`\n });\n }\n }, [checked, onText, offText]);\n\n // 텍스트 기반 토글\n if (onText && offText) {\n return (\n <Stack direction=\"row\" align=\"center\" gap={14} className={className}>\n {label && (\n <Label\n label={label}\n width={labelWidth}\n required={required}\n tooltip={tooltip}\n isDot={isDot}\n />\n )}\n\n <Stack direction=\"col\" gap={4} className=\"flex-auto\">\n <button\n ref={ref}\n id={toggleId}\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n disabled={disabled}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n className={`\n relative flex items-center rounded-full h-36 p-4\n bg-gray1 border border-line\n w-fit\n ${disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'}\n `}\n >\n <div\n className=\"absolute h-[calc(100%-6px)] top-[3px] bg-primary rounded-full transition-all duration-300 ease-in-out\"\n style={sliderStyle}\n />\n\n <span\n ref={onRef}\n className={`relative text-center leading-none text-body14 ${\n checked ? 'text-white font-bold' : 'font-semibold text-text'\n }`}\n style={{ width: `${toRemFunction(textToggleSize)}` }}\n >\n {onText}\n </span>\n <span\n ref={offRef}\n className={`relative text-body14 leading-none ${\n !checked ? 'text-white font-bold' : 'font-semibold text-text'\n }`}\n style={{ width: `${toRemFunction(textToggleSize)}` }}\n >\n {offText}\n </span>\n </button>\n {error && <span className=\"text-red text-body12\">{error}</span>}\n </Stack>\n </Stack>\n );\n }\n\n // 사이즈별 클래스\n const getSizeClasses = () => {\n switch (size) {\n case 'small':\n return 'w-32 h-18';\n case 'large':\n return 'w-56 h-32';\n default: // medium\n return 'w-44 h-24';\n }\n };\n\n // 슬라이더 사이즈별 클래스\n const getSliderSizeClasses = () => {\n switch (size) {\n case 'small':\n return 'w-14 h-14';\n case 'large':\n return 'w-28 h-28';\n default: // medium\n return 'w-20 h-20';\n }\n };\n\n // 아래는 텍스트 없는 형태의 ui 인데 안쓸수도 있음\n return (\n <Stack direction=\"row\" gap={10} align=\"center\" className={className}>\n {/* 라벨 */}\n {label && <Label label={label} required={required} tooltip={tooltip} />}\n\n {/* 토글 버튼 */}\n <Stack direction=\"col\" gap={4} className=\"flex-auto\">\n <button\n ref={ref}\n id={toggleId}\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n aria-labelledby={label ? `${toggleId}-label` : undefined}\n disabled={disabled}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n className={`\n relative inline-flex items-center rounded-full transition-colors duration-200 ease-in-out\n focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2\n ${getSizeClasses()}\n ${checked ? 'bg-primary' : 'bg-gray3 '}\n ${\n disabled\n ? 'cursor-not-allowed opacity-50'\n : 'cursor-pointer hover:opacity-80'\n }\n `}\n tabIndex={disabled ? -1 : 0}\n >\n {/* 슬라이더 */}\n <span\n className={`\n inline-block rounded-full bg-white shadow-sm transition-transform duration-200 ease-in-out\n ${getSliderSizeClasses()}\n ${checked ? 'translate-x-22' : 'translate-x-2'}\n ${size === 'large' ? 'translate-x-8' : ''}\n ${size === 'small' ? 'translate-x-4' : ''}\n `}\n />\n </button>\n\n {/* 에러 메시지 */}\n {error && <span className=\"text-red text-body12\">{error}</span>}\n </Stack>\n </Stack>\n );\n }\n);\n\nToggle.displayName = 'Toggle';\n\nexport default Toggle;\n","import { useState, useRef, useEffect } from 'react';\nimport { BorderRadiusBox } from '../BorderRadiusBox';\nimport { Stack } from '../Stack';\nimport { Text } from '../Text';\nimport { BulletText } from '../BulletText';\nimport ColorIcTooltipArrow from '../../../assets/colorIcon/ColorIcTooltipArrow';\nimport ColorIcTooltipBlue from '../../../assets/colorIcon/ColorIcTooltipBlue';\n// import NotificationText from \"../ui/NotificationText\";\n\nexport interface ToolTipBoxProps {\n title: string;\n children: string[];\n}\n\nfunction ToolTipBox({ title, children }: ToolTipBoxProps) {\n const [isOpen, setIsOpen] = useState(false);\n const contentRef = useRef<HTMLDivElement>(null);\n const [contentHeight, setContentHeight] = useState(0);\n\n useEffect(() => {\n if (contentRef.current) {\n setContentHeight(contentRef.current.scrollHeight);\n }\n }, [children]);\n\n return (\n <BorderRadiusBox\n borderColor=\"primary3Border\"\n bgColor=\"primary3\"\n paddingX={20}\n paddingY={12}\n >\n <Stack direction=\"col\">\n <Stack\n direction=\"row\"\n gap={3}\n align=\"center\"\n justify=\"between\"\n onClick={() => {\n setIsOpen(!isOpen);\n }}\n className=\"cursor-pointer\"\n >\n <Stack direction=\"row\" gap={3} align=\"center\">\n <ColorIcTooltipBlue width={14} height={14} />\n <Text size=\"body14\" fontWeight=\"bold\" color=\"primary\">\n {title}\n </Text>\n </Stack>\n <span\n className={`w-16 h-16 cursor-pointer transition-transform duration-300 ${\n isOpen ? '' : 'rotate-180'\n }`}\n >\n <ColorIcTooltipArrow width={14} height={14} color=\"primary\" />\n </span>\n </Stack>\n <div\n className=\"overflow-hidden transition-all duration-300 ease-in-out\"\n style={{\n height: isOpen ? `${contentHeight}px` : '0px',\n opacity: isOpen ? 1 : 0\n }}\n >\n <div ref={contentRef} className=\"grid grid-cols-2 gap-2 mt-4\">\n {children.map((child, index) => (\n <BulletText\n key={index}\n label={child}\n textColor=\"primary\"\n textSize=\"body12\"\n fontWeight=\"regular\"\n bulletColor=\"dark6\"\n />\n ))}\n </div>\n </div>\n </Stack>\n </BorderRadiusBox>\n );\n}\n\nexport default ToolTipBox;\n","import { ColorType } from '../../theme';\n\nfunction ColorIcTooltipArrow({\n width = 14,\n height = 14,\n color = 'primary'\n}: {\n width?: number;\n height?: number;\n color?: ColorType;\n}) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ color: `var(--color-${color})` }}\n >\n <path\n d=\"M12.0309 9.9748C11.8996 9.9748 11.7902 9.93106 11.6809 9.84356L6.99961 5.22793L2.31836 9.82168C2.12148 10.0186 1.81523 10.0186 1.61836 9.82168C1.42148 9.62481 1.42148 9.31856 1.61836 9.12168L6.64961 4.17793C6.84648 3.98105 7.15273 3.98105 7.34961 4.17793L12.3809 9.12168C12.5777 9.31856 12.5777 9.62481 12.3809 9.82168C12.2934 9.90918 12.1621 9.9748 12.0309 9.9748Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n\nexport default ColorIcTooltipArrow;\n","import { ColorType } from '../../theme';\n\nfunction ColorIcTooltipBlue({\n width = 16,\n height = 16,\n color = 'primary'\n}: {\n width?: number;\n height?: number;\n color?: ColorType;\n}) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ color: `var(--color-${color})` }}\n >\n <g clipPath=\"url(#clip0_175_11783)\">\n <path\n d=\"M7.9744 4.87305H7.95015C7.65924 4.87305 7.39258 5.11547 7.39258 5.43062C7.39258 5.74577 7.635 5.9882 7.95015 5.9882H7.9744C8.26531 5.9882 8.53197 5.74577 8.53197 5.43062C8.53197 5.11547 8.28955 4.87305 7.9744 4.87305Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M7.97554 6.78809C7.68464 6.78809 7.41797 7.03051 7.41797 7.34566V11.079C7.41797 11.3699 7.66039 11.6366 7.97554 11.6366C8.26645 11.6366 8.53312 11.3941 8.53312 11.079V7.32142C8.53312 7.03051 8.2907 6.78809 7.97554 6.78809Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M7.97631 0.678711C3.92783 0.678711 0.630859 3.95144 0.630859 7.99992C0.630859 12.0484 3.92783 15.3454 7.97631 15.3454C12.0248 15.3454 15.2975 12.0484 15.2975 7.99992C15.2975 3.95144 12.0248 0.678711 7.97631 0.678711ZM7.97631 14.2545C4.53389 14.2545 1.72177 11.4423 1.72177 7.99992C1.72177 4.5575 4.53389 1.74538 7.97631 1.74538C11.4187 1.74538 14.2066 4.5575 14.2066 7.99992C14.2066 11.4423 11.4187 14.2545 7.97631 14.2545Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_175_11783\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n\nexport default ColorIcTooltipBlue;\n","import { Stack } from '../Stack';\nimport { Text } from '../Text';\nimport { BorderRadiusBox } from '../BorderRadiusBox';\n\nexport interface TooltipInfoProps {\n title?: string;\n children: string[] | React.ReactNode[];\n}\n\nfunction TooltipInfo({ title, children }: TooltipInfoProps) {\n return (\n <BorderRadiusBox\n key={'tooltipInfo'}\n radius={6}\n paddingX={0}\n paddingY={0}\n className=\" border-none overflow-hidden\"\n >\n <div style={{ backgroundColor: '#4B5563E5' }} className=\"px-12 py-10\">\n <Stack gap={5} direction=\"col\">\n <Text\n size=\"body14\"\n fontWeight=\"bold\"\n color=\"white\"\n className=\"whitespace-nowrap\"\n style={{\n lineHeight: '1.4'\n }}\n >\n {title}\n </Text>\n <Stack gap={2} direction=\"col\">\n {children.map((child, index) => (\n <div\n key={'tooltipInfo' + index}\n className={`whitespace-nowrap flex items-baseline flex-none relative w-full`}\n >\n <span\n className=\"inline-block w-3 h-3 bg-dark6 mr-4 \"\n style={{\n verticalAlign: 'top',\n position: 'relative',\n top: '-2px'\n }}\n ></span>\n <Text\n key={'tooltipInfoText' + index}\n size=\"body12\"\n color=\"white\"\n fontWeight=\"regular\"\n style={{\n lineHeight: '1.4'\n }}\n >\n {child}\n </Text>\n </div>\n ))}\n </Stack>\n </Stack>\n </div>\n </BorderRadiusBox>\n );\n}\n\nexport default TooltipInfo;\n","import { ColorType } from '../../theme';\n\nfunction ColorIcInfo({\n width = 12,\n height = 12,\n color = 'gray'\n}: {\n width?: number;\n height?: number;\n color?: ColorType;\n}) {\n return (\n <span\n style={{\n color: `var(--color-${color})`,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n >\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect width=\"12\" height=\"12\" rx=\"6\" fill=\"currentColor\" />\n <g clipPath=\"url(#clip0_603_10414)\">\n <path\n d=\"M6.81978 8.68161H6.09194V4.57706C6.09194 4.24297 5.81751 3.98047 5.49535 3.98047H4.82717C4.68398 3.98047 4.55273 4.09979 4.55273 4.2549C4.55273 4.41001 4.67205 4.52933 4.82717 4.52933H5.49535C5.53114 4.52933 5.55501 4.5532 5.55501 4.58899V8.68161H4.82717C4.68398 8.68161 4.55273 8.80092 4.55273 8.95604C4.55273 9.11115 4.67205 9.23047 4.82717 9.23047H6.83171C6.97489 9.23047 7.10614 9.11115 7.10614 8.95604C7.10614 8.80092 6.96296 8.68161 6.81978 8.68161Z\"\n fill=\"white\"\n />\n <path\n d=\"M5.75835 3.3956C5.95604 3.3956 6.1163 3.23533 6.1163 3.03764C6.1163 2.83995 5.95604 2.67969 5.75835 2.67969C5.56065 2.67969 5.40039 2.83995 5.40039 3.03764C5.40039 3.23533 5.56065 3.3956 5.75835 3.3956Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_603_10414\">\n <rect\n width=\"7.63636\"\n height=\"7.63636\"\n fill=\"white\"\n transform=\"translate(2 2)\"\n />\n </clipPath>\n </defs>\n </svg>\n </span>\n );\n}\n\nexport default ColorIcInfo;\n","import { ColorType } from '../../theme';\n\nfunction ColorIcWarning({\n width = 16,\n height = 16,\n color = 'warning'\n}: {\n width?: number;\n height?: number;\n color?: ColorType;\n}) {\n return (\n <span\n style={{\n color: `var(--color-${color})`,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n >\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect width=\"16\" height=\"16\" rx=\"8\" fill=\"currentColor\" />\n <path\n d=\"M12.5343 9.47947L9.1297 4.00144C8.85925 3.63553 8.44561 3.42871 8.00016 3.42871C7.53879 3.42871 7.12516 3.63553 6.87061 4.00144L3.46607 9.47947C3.14789 9.90901 3.10016 10.4658 3.3388 10.9431C3.57743 11.4204 4.0547 11.7227 4.59561 11.7227H11.4047C11.9456 11.7227 12.4229 11.4204 12.6615 10.9431C12.9002 10.4817 12.8524 9.90901 12.5343 9.47947ZM12.0252 10.6249C11.8979 10.8636 11.6752 11.0067 11.4047 11.0067H4.59561C4.32516 11.0067 4.10243 10.8636 3.97516 10.6249C3.8638 10.3863 3.8797 10.1158 4.0388 9.90901L7.44334 4.43098C7.57061 4.25598 7.77743 4.14462 8.00016 4.14462C8.22289 4.14462 8.4297 4.24007 8.55698 4.43098L11.9615 9.90901C12.1206 10.1158 12.1365 10.3863 12.0252 10.6249Z\"\n fill=\"white\"\n />\n <path\n d=\"M8.00067 6.3877C7.80977 6.3877 7.63477 6.54679 7.63477 6.7536V8.4877C7.63477 8.6786 7.79386 8.8536 8.00067 8.8536C8.20749 8.8536 8.36658 8.69451 8.36658 8.4877V6.7377C8.36658 6.54679 8.19158 6.3877 8.00067 6.3877Z\"\n fill=\"white\"\n />\n <path\n d=\"M8.00067 9.27246C7.80977 9.27246 7.63477 9.43155 7.63477 9.63837V9.71792C7.63477 9.90882 7.79386 10.0838 8.00067 10.0838C8.20749 10.0838 8.36658 9.92473 8.36658 9.71792V9.62246C8.36658 9.43155 8.19158 9.27246 8.00067 9.27246Z\"\n fill=\"white\"\n />\n </svg>\n </span>\n );\n}\n\nexport default ColorIcWarning;\n","import React from 'react';\nimport { Stack } from '../Stack';\nimport ColorIcInfo from '../../../assets/colorIcon/ColorIcInfo';\nimport ColorIcWarning from '../../../assets/colorIcon/ColorIcWarning';\n\nexport interface WarningBoxProps extends React.HTMLAttributes<HTMLDivElement> {\n color?: string;\n children: React.ReactNode;\n}\n\nconst WarningBox: React.FC<WarningBoxProps> = ({\n children,\n color = 'warning'\n}) => {\n const colorClass = `bg-${color}Light text-${color} `;\n const iconSize = color === 'text' ? 14 : 16;\n const icon =\n color === 'text' ? (\n <ColorIcInfo width={iconSize} height={iconSize} />\n ) : (\n <ColorIcWarning width={iconSize} height={iconSize} />\n );\n return (\n <div\n className={`opacity-80 relative ${colorClass} rounded-sm pl-2 before:content-[''] before:absolute before:left-0 before:top-0 before:bottom-0 before:w-[50px] ${\n color === 'text' ? 'before:bg-text' : 'before:bg-warning'\n } before:rounded-tl-warnOut before:rounded-bl-warnOut `}\n >\n <div\n className={`relative ${colorClass} inline-block text-body12 font-bold px-12 py-8 rounded-warn touch-none`}\n >\n <Stack direction=\"row\" align=\"start\" gap={4}>\n <span className={`${color === 'text' ? 'mt-4' : 'mt-3'}`}>\n {icon}\n </span>\n {children}\n </Stack>\n </div>\n </div>\n );\n};\n\nexport default WarningBox;\n"],"mappings":"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","names":["toRemFunction","moment","moment","import_jsx_runtime","toRemFunction","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","fontWeight","import_jsx_runtime","fontWeight","import_react","import_jsx_runtime","import_jsx_runtime","toRemFunction","import_jsx_runtime","toRemFunction","import_react","import_react","import_jsx_runtime","clsx","sizeStyle","toRemFunction","import_jsx_runtime","import_jsx_runtime","fontWeight","toRemFunction","import_jsx_runtime","toRemFunction","import_react","import_jsx_runtime","import_jsx_runtime","toRemFunction","import_jsx_runtime","toRemFunction","import_react","import_jsx_runtime","enabledOptions","toRemFunction","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","toRemFunction","import_react","import_react","import_jsx_runtime","React","toRemFunction","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","toRemFunction","import_jsx_runtime","import_react","import_jsx_runtime","toRemFunction","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
|