sales-frontend-components 0.0.67 → 0.0.69

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/form/form-checkbox-button.tsx","../src/form/form-checkbox.tsx","../src/form/form-date-picker.tsx","../src/form/form-date-range-picker.tsx","../src/form/form-segment.tsx","../src/form/form-text-field.tsx","../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/bind.js","../src/step-indicator/step-indicator.tsx","../src/camera/attachment.tsx","../src/camera/resize.ts","../src/camera/use-camera.tsx","../src/canvas-paint/use-canvas-paint.ts","../src/canvas-paint/dummyData.ts","../src/debug-tool/components/floating-button.tsx","../src/debug-tool/components/menu-panel.tsx","../src/debug-tool/features/console-log/use-console-log.ts","../src/debug-tool/features/console-log/console-log-panel.tsx","../src/debug-tool/features/login-dsp/login-panel.tsx","../src/debug-tool/features/network-log/index.tsx","../src/debug-tool/features/page-navigation/page-navigation-panel.tsx","../src/debug-tool/features/script-executor/script-executor-panel.tsx","../src/debug-tool/features/storage/use-storage.ts","../src/debug-tool/features/storage/storage-panel.tsx","../src/debug-tool/config.tsx","../src/debug-tool/hooks/use-environment.ts","../src/debug-tool/debug-tool.tsx","../src/modal/common.tsx","../src/modal/standard/address-search/address-search-modal.tsx","../src/modal/standard/address-search/use-search-address.tsx","../src/modal/pre-standard/job-vehicle-search-modal/job-vehicle-search-grade.tsx","../src/modal/pre-standard/job-search-modal/constants.ts","../src/modal/pre-standard/job-search-modal/job-search-category.tsx","../src/modal/pre-standard/job-search-modal/job-search-favorite.tsx","../src/modal/pre-standard/job-search-modal/job-search-result.tsx","../src/modal/pre-standard/job-search-modal/job-search.tsx","../src/modal/pre-standard/job-search-modal/use-job-search.tsx","../src/modal/pre-standard/vehicle-search-modal/vehicle-search.tsx","../src/modal/pre-standard/vehicle-search-modal/use-vehicle-search.tsx","../src/modal/pre-standard/job-vehicle-search-modal/use-job-vehicle-search.tsx","../src/modal/pre-standard/job-vehicle-search-modal/job-vehicle-search.tsx"],"sourcesContent":["import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { CheckboxButton, type CheckboxButtonProps } from 'sales-frontend-design-system';\n\nexport const FormCheckboxButton = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n children,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & Omit<CheckboxButtonProps, 'id'>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <CheckboxButton {...props} {...field} id={field.name} checked={field.value} error={fieldState.invalid}>\n {children}\n </CheckboxButton>\n );\n};\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { Checkbox, CheckboxProps } from 'sales-frontend-design-system';\n\nexport const FormCheckbox = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n children,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & Omit<CheckboxProps, 'id'>) => {\n const { field } = useController({ name, control, disabled });\n\n return (\n <Checkbox {...props} {...field} id={field.name} checked={field.value} onChange={field.onChange}>\n {children}\n </Checkbox>\n );\n};\n","import React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { DatePicker, type DatePickerSingleHtmlProps } from 'sales-frontend-design-system';\n\nexport const FormDatePicker = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n defaultValue,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled' | 'defaultValue'> &\n DatePickerSingleHtmlProps) => {\n const { field, fieldState } = useController({ name, control, disabled, defaultValue });\n const [initialDate, setInitialDate] = React.useState<Date>();\n\n React.useEffect(() => {\n if (field.value) {\n setInitialDate(field.value);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [defaultValue]);\n\n return (\n <DatePicker\n tabIndex={0}\n {...{\n ...props,\n ...field,\n id: field.name,\n defaultValue: initialDate,\n error: fieldState.invalid,\n onValueChange: field.onChange\n }}\n />\n );\n};\n","import React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { DateRangePicker, type PeriodDate, type DatePickerRangeHtmlProps } from 'sales-frontend-design-system';\n\nexport const FormDateRangePicker = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n defaultValue,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled' | 'defaultValue'> &\n DatePickerRangeHtmlProps) => {\n const { field, fieldState } = useController({ name, control, disabled, defaultValue });\n const [initialDate, setInitialDate] = React.useState<PeriodDate>();\n\n React.useEffect(() => {\n if (field.value) {\n setInitialDate(field.value);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [defaultValue]);\n\n return (\n <DateRangePicker\n tabIndex={0}\n {...{\n ...props,\n ...field,\n id: field.name,\n defaultValue: initialDate,\n error: fieldState.invalid,\n onValueChange: (selected) => {\n if (field.value !== selected) {\n field.onChange(selected);\n }\n }\n }}\n />\n );\n};\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { SegmentGroup, type SegmentGroupHtmlProps } from 'sales-frontend-design-system';\n\nexport const FormSegmentGroup = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> &\n Omit<SegmentGroupHtmlProps, 'defaultValue'>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <SegmentGroup\n {...props}\n tabIndex={0}\n id={field.name}\n ref={field.ref}\n defaultValue={field.value}\n disabled={field.disabled}\n error={fieldState.invalid}\n onBlur={field.onBlur}\n onValueChange={(selected) => {\n field.onChange(selected);\n props.onValueChange?.(selected);\n }}\n />\n );\n};\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { FormField } from 'sales-frontend-design-system';\n\nexport const FormTextField = <TFormValues extends FieldValues>({\n name,\n control,\n size = 'medium',\n disabled,\n error,\n onBlur,\n onChange,\n rootProps,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & FormField.TextFieldProps) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <FormField.TextField\n {...props}\n id={field.name}\n size={size}\n autoComplete=\"off\"\n name={field.name}\n value={field.value ?? ''}\n disabled={field.disabled}\n error={fieldState.invalid || error}\n onChange={(e) => {\n field.onChange(e);\n onChange?.(e);\n }}\n onBlur={(e) => {\n field.onBlur();\n onBlur?.(e);\n }}\n rootProps={{\n ...rootProps,\n onClear: () => {\n field.onChange('');\n rootProps?.onClear?.();\n }\n }}\n />\n );\n};\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue.call(this, arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn this && this[arg] || arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(this, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, this && this[key] || key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\n\nimport styles from './step-indicator.module.scss';\n\nimport type { StepIndicatorProps } from './step-indicator.types';\n\nconst cx = classNames.bind(styles);\n\nexport const StepIndicator = ({\n items,\n onClickItem,\n currentIndex = 0,\n defaultValue = '',\n dotCount = 3\n}: StepIndicatorProps) => {\n const [current, setCurrent] = React.useState(currentIndex);\n\n React.useEffect(() => {\n items.map((item, idx) => {\n if (item.value === defaultValue) {\n setCurrent(idx);\n }\n });\n }, [items, defaultValue]);\n\n return (\n <div className={cx('stepper-layout')}>\n <div className={cx('stepper')}>\n {items.map((item, idx) => (\n <React.Fragment key={`num-${idx}`}>\n <div\n className={cx('circle', (defaultValue === item.value || current === idx) && 'active')}\n onClick={() => onClickItem?.(item)}\n >\n {item.isCompleted || idx < current ? <span className={cx('completed')} /> : ++idx}\n </div>\n\n {/* 다음 단계가 있을 때만 dot 렌더링 */}\n {idx < items.length &&\n Array.from({ length: dotCount }).map((_, dotIdx) => (\n <span key={`dot-${idx}-${dotIdx}`} className={cx('dot')} />\n ))}\n </React.Fragment>\n ))}\n </div>\n\n <ul className={cx('step-labels')}>\n {items.map((item, idx) => (\n <li key={`label-${idx}`} className={cx((defaultValue === item.value || current === idx) && 'active')}>\n <span>{item.label ?? item.value}</span>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n","import classNames from 'classnames/bind';\nimport { Icon } from 'sales-frontend-design-system';\n\nimport styles from './camera.module.scss';\nimport { AttachedPhoto, cameraItemType } from './camera.types';\n\nconst cx = classNames.bind(styles);\n\nexport interface AttachmentProps {\n photos: AttachedPhoto[];\n onAddPhoto: () => void;\n onRemovePhoto: (id: string) => void;\n /* false이면 사진이 1장 이상일 때만 표시 */\n show: boolean;\n type?: cameraItemType;\n buttonText?: string;\n}\n\nexport function Attachment({\n photos,\n onAddPhoto,\n onRemovePhoto,\n show,\n type = 'multiple',\n buttonText\n}: AttachmentProps) {\n const handleAddPhoto = () => {\n onAddPhoto();\n };\n\n const handleRemovePhoto = (id: string) => {\n onRemovePhoto(id);\n };\n\n const renderPhotoSingle = () => {\n if (photos.length === 0) {\n return (\n <div className={cx('single-photo-item', 'add-photo-item')}>\n <button className={cx('add-photo-button-single')} onClick={handleAddPhoto}>\n <Icon name=\"illust/camera\" />\n <span>{buttonText || '사진 첨부하기'}</span>\n </button>\n </div>\n );\n }\n\n return photos.map((photo) => (\n <div key={photo.id} className={cx('single-photo-item')}>\n <div className={cx('photo-placeholder')}>\n <img src={photo.src} alt={photo.name} className={cx('photo-image')} />\n </div>\n <button className={cx('remove-button')} onClick={() => handleRemovePhoto(photo.id)} aria-label=\"사진 삭제\">\n ×\n </button>\n </div>\n ));\n };\n\n const renderPhotoGrid = () => {\n const maxPhotos = type === 'single' ? 1 : 4;\n const gridItems = [];\n\n if (photos.length < maxPhotos) {\n gridItems.push(\n <div key=\"add-photo\" className={cx('photo-item', 'add-photo-item')}>\n <button className={cx('add-photo-button')} onClick={handleAddPhoto}>\n <Icon name=\"illust/camera\" />\n <span>{buttonText || '첨부하기'}</span>\n <span className={cx('photo-count')}>\n (<span className={cx('photo-count-number')}>{photos.length}</span>/{maxPhotos})\n </span>\n </button>\n </div>\n );\n }\n\n photos.forEach((photo) => {\n gridItems.push(\n <div key={photo.id} className={cx('photo-item')}>\n <div className={cx('photo-placeholder')}>\n <img src={photo.src} alt={photo.name} className={cx('photo-image')} />\n </div>\n <button className={cx('remove-button')} onClick={() => handleRemovePhoto(photo.id)} aria-label=\"사진 삭제\">\n ×\n </button>\n </div>\n );\n });\n\n return gridItems;\n };\n\n const isVisible = show || (!show && photos.length > 0);\n\n if (!isVisible) {\n return null;\n }\n\n if (type === 'single') {\n return <div className={cx('photo-single')}>{renderPhotoSingle()}</div>;\n }\n\n return <div className={cx('photo-grid', { linear: type === 'linear' })}>{renderPhotoGrid()}</div>;\n}\n","import { cameraOptions } from './camera.types';\n\n// 3mb\nconst maxImageSize = 3 * 1024 * 1024;\n/**\n *\n * 이미지를 파라미터로 전달하고, 설정한 리사이즈 옵션에 따라 이미지를 리사이징하고 리턴한다.\n * 리턴하는 데이터타입은 전달받은 데이터 타입과 동일하게 한다.\n * base64 string을 전달받은 경우는 base64 string을 리턴하고\n * file 타입을 전달받은 경우는 file 타입을 리턴한다.\n *\n * options 규칙\n * width 와 height 중 1개가 존재하는 경우 해당 사이즈에 맞게 원본비율유지하여 축소한다.\n * width 와 height 가 모두 존재하는 경우 해당 사이즈에 맞게 원본비율을 무시하고 리사이즈한다.\n *\n * filesize 옵션이 존재하는 경우는 width,height 옵션을 무시하고, filesize 이하로 원본비율 축소한다.\n *\n * width, height 의 단위는 px 이다.\n *\n * ext는 리턴데이터 타입이 파일인 경우, 사용할 파일확장자 이다.\n * ext가 설정된 값이 없는 경우는, 기본값으로 jpeg를 사용한다.\n *\n */\nexport function resize<T extends string | File>(\n image: T,\n options: cameraOptions['resize'] = { ext: 'jpeg', filesize: maxImageSize }\n): Promise<T> {\n return new Promise((resolve, reject) => {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n reject(new Error('Canvas context를 생성할 수 없습니다.'));\n\n return;\n }\n\n const img = new Image();\n img.crossOrigin = 'anonymous';\n\n img.onload = () => {\n let { width, height } = img;\n const { filesize, ext } = options;\n\n // filesize 옵션이 있는 경우 width, height 옵션을 무시하고 filesize 이하로 원본비율 축소\n if (filesize) {\n const originalSize = width * height * 4; // RGBA 4바이트\n if (originalSize > filesize) {\n const ratio = Math.sqrt(filesize / originalSize);\n width = Math.floor(width * ratio);\n height = Math.floor(height * ratio);\n }\n } else {\n // width, height 옵션 처리\n const { width: targetWidth, height: targetHeight } = options;\n\n if (targetWidth && targetHeight) {\n // width와 height가 모두 존재하는 경우 원본비율 무시하고 리사이즈\n width = targetWidth;\n height = targetHeight;\n } else if (targetWidth) {\n // width만 존재하는 경우 원본비율 유지하여 축소\n const ratio = targetWidth / width;\n width = targetWidth;\n height = Math.floor(height * ratio);\n } else if (targetHeight) {\n // height만 존재하는 경우 원본비율 유지하여 축소\n const ratio = targetHeight / height;\n height = targetHeight;\n width = Math.floor(width * ratio);\n }\n }\n\n // canvas 크기 설정\n canvas.width = width;\n canvas.height = height;\n\n // 이미지 그리기\n ctx.drawImage(img, 0, 0, width, height);\n\n // 결과 반환\n if (typeof image === 'string') {\n // base64 string인 경우\n const mimeType = ext === 'png' ? 'image/png' : 'image/jpeg';\n const quality = ext === 'png' ? 1.0 : 0.8;\n const base64 = canvas.toDataURL(mimeType, quality);\n resolve(base64 as T);\n } else {\n // File인 경우\n canvas.toBlob(\n (blob) => {\n if (!blob) {\n reject(new Error('Blob을 생성할 수 없습니다.'));\n\n return;\n }\n\n const mimeType = ext === 'png' ? 'image/png' : 'image/jpeg';\n const fileName = image.name ? `${image.name.replace(/\\.[^/.]+$/, '') }.${ ext}` : `resized.${ ext}`;\n\n const resizedFile = new File([blob], fileName, { type: mimeType });\n resolve(resizedFile as T);\n },\n ext === 'png' ? 'image/png' : 'image/jpeg',\n ext === 'png' ? 1.0 : 0.8\n );\n }\n };\n\n img.onerror = () => {\n reject(new Error('이미지를 로드할 수 없습니다.'));\n };\n\n // 이미지 소스 설정\n if (typeof image === 'string') {\n img.src = image;\n } else {\n const reader = new FileReader();\n reader.onload = (e) => {\n if (e.target?.result) {\n img.src = e.target.result as string;\n } else {\n reject(new Error('파일을 읽을 수 없습니다.'));\n }\n };\n reader.onerror = () => {\n reject(new Error('파일을 읽을 수 없습니다.'));\n };\n reader.readAsDataURL(image);\n }\n });\n}\n","import { useEffect, useState } from 'react';\n\nimport { Attachment } from './attachment';\nimport { resize } from './resize';\n\nimport type { AttachedPhoto, cameraOptions } from './camera.types';\n\nconst genImageId = () => `camera-${Date.now()}-${Math.random()}`;\n\nexport function useCamera({\n onChange,\n resize: resizeOption,\n cameraOnly,\n onDelete,\n show,\n type = 'multiple',\n buttonText\n}: Partial<cameraOptions> = {}) {\n const [attachedPhotos, setAttachedPhotos] = useState<AttachedPhoto[]>([]);\n\n const findImage = (imageId: string) => {\n return attachedPhotos.find((image) => image.id === imageId);\n };\n\n /**\n * onClick시, input File생성후 카메라 또는 파일선택 호출\n */\n const onClick = () => {\n // input을 dom으로 생성, type='file' , cameraOnly 가 true이면 카메라만 실행가능하도록 input 을 설정\n // true가 아니면 이미지확장자파일과, 카메라선택 둘다 가능하도록 설정\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = 'image/*';\n\n if (cameraOnly) {\n // 카메라만 실행 가능하도록 설정\n input.capture = 'camera';\n }\n\n // 파일 선택 이벤트 리스너 추가\n input.addEventListener('change', async (event) => {\n const target = event.target as HTMLInputElement;\n const { files } = target;\n\n if (files && files.length > 0) {\n const file = files[0];\n // onChange 콜백 호출\n if (file) {\n const resizedFile = await resize(file, resizeOption);\n const newPhoto: AttachedPhoto = {\n id: genImageId(),\n src: URL.createObjectURL(resizedFile),\n name: `서류사진_${attachedPhotos.length + 1}`\n };\n\n if (type === 'single') {\n setAttachedPhotos([newPhoto]);\n } else {\n setAttachedPhotos([...attachedPhotos, newPhoto]);\n }\n\n onChange && onChange(file);\n }\n }\n\n // input 요소 제거\n document.body.removeChild(input);\n });\n\n // input을 body에 추가하고 click 이벤트 발생\n input.style.display = 'none';\n document.body.appendChild(input);\n input.click();\n };\n\n /**\n * 선택한 이미지 삭제\n * @param imageId 이미지아이디\n */\n const deleteImage = (imageId: string) => {\n const imageIndex = attachedPhotos.findIndex((image) => image.id === imageId);\n if (imageIndex > -1) {\n const item = attachedPhotos.splice(imageIndex, 1);\n item[0] && URL.revokeObjectURL(item[0].src);\n setAttachedPhotos([...attachedPhotos]);\n onDelete && onDelete(imageId);\n }\n };\n\n const CameraComponent = () => (\n <Attachment\n show={!!show}\n onAddPhoto={onClick}\n onRemovePhoto={deleteImage}\n photos={attachedPhotos}\n type={type}\n buttonText={buttonText}\n />\n );\n\n useEffect(() => {\n return () => {\n // revoke all images url\n attachedPhotos.forEach((image) => {\n URL.revokeObjectURL(image.src);\n });\n };\n }, []);\n\n return {\n onClick,\n getImage: findImage,\n deleteImage,\n attachedPhotos,\n Attachment: CameraComponent\n };\n}\n","import { useRef, useEffect, useState, useCallback } from 'react';\n\nimport { DownloadProps, PaintProps } from './canvas-paint.types';\n\n/** undo, redo 가능한 히스토리 최대 저장 갯수 */\nconst HISTORY_SIZE = 100;\n\n/** 기본 다운로드 값 */\nconst DEFAULT_DOWNLOAD_PROPS: Required<DownloadProps> = {\n fileExtendsion: 'png',\n fileName: 'image',\n transparent: true,\n backgroundColor: 'white',\n width: 500,\n height: 500\n};\nexport function useCanvasPaint(paintProps: PaintProps = {}) {\n const { pen = { strokeWeight: 5, strokeColor: 'black' }, onChange, onStart, onEnd } = paintProps;\n const [canvasRefState, setCanvasRefState] = useState<HTMLCanvasElement | null>(null);\n const contextRef = useRef<CanvasRenderingContext2D | null>(null);\n\n const [isPainting, setIsPainting] = useState(false);\n const [history, setHistory] = useState<string[]>([]);\n const [historyIndex, setHistoryIndex] = useState(-1);\n\n const saveState = useCallback(() => {\n if (!canvasRefState) {\n return;\n }\n const dataUrl = canvasRefState.toDataURL();\n\n const newHistory = history.slice(0, historyIndex + 1);\n if (newHistory.length >= HISTORY_SIZE) {\n newHistory.shift();\n }\n newHistory.push(dataUrl);\n\n setHistory(newHistory);\n setHistoryIndex(newHistory.length - 1);\n onChange && onChange();\n }, [history, historyIndex, onChange, canvasRefState]);\n\n const restoreState = useCallback(\n (index: number) => {\n const context = contextRef.current;\n if (!canvasRefState || !context || !history[index]) {\n return;\n }\n\n const dataUrl = history[index];\n const img = new Image();\n img.onload = () => {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n context.drawImage(img, 0, 0);\n };\n img.src = dataUrl;\n onChange && onChange();\n },\n [history, onChange, canvasRefState]\n );\n\n useEffect(() => {\n if (!canvasRefState) {\n return;\n }\n const context = canvasRefState.getContext('2d', { willReadFrequently: true });\n if (!context) {\n return;\n }\n contextRef.current = context;\n\n const initialDataUrl = canvasRefState.toDataURL();\n setHistory([initialDataUrl]);\n setHistoryIndex(0);\n }, [canvasRefState]);\n\n useEffect(() => {\n const context = contextRef.current;\n if (context) {\n context.lineWidth = pen.strokeWeight;\n context.strokeStyle = pen.strokeColor;\n }\n }, [pen]);\n\n /**\n * @description canvas의 크기가 동적으로 생성되는 경우,\n * 포인터의 위치가 맞지않는 이슈를 해결하기위한,\n * scale조정하는 함수입니다.\n */\n const getEventPosition = useCallback(\n (event: MouseEvent | TouchEvent) => {\n if (!canvasRefState) {\n return null;\n }\n\n const rect = canvasRefState.getBoundingClientRect();\n const scaleX = canvasRefState.width / rect.width;\n const scaleY = canvasRefState.height / rect.height;\n\n let clientX;\n let clientY;\n\n if (event instanceof MouseEvent) {\n clientX = event.clientX;\n clientY = event.clientY;\n } else if (event instanceof TouchEvent) {\n const touch = event.touches[0];\n if (!touch) {\n return null;\n }\n clientX = touch.clientX;\n clientY = touch.clientY;\n } else {\n return null;\n }\n\n const offsetX = (clientX - rect.left) * scaleX;\n const offsetY = (clientY - rect.top) * scaleY;\n\n return { offsetX, offsetY };\n },\n [canvasRefState]\n );\n\n const startPainting = useCallback(\n (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n const context = contextRef.current;\n if (!context) {\n return;\n }\n const pos = getEventPosition(event);\n if (!pos) {\n return;\n }\n onStart && onStart();\n const { offsetX, offsetY } = pos;\n context.beginPath();\n context.moveTo(offsetX, offsetY);\n setIsPainting(true);\n },\n [onStart, getEventPosition]\n );\n\n const stopPainting = useCallback(() => {\n const context = contextRef.current;\n if (!context || !isPainting) {\n return;\n }\n context.closePath();\n setIsPainting(false);\n onEnd && onEnd();\n saveState();\n }, [isPainting, onEnd, saveState]);\n\n const paint = useCallback(\n (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n if (!isPainting || !contextRef.current) {\n return;\n }\n const pos = getEventPosition(event);\n if (!pos) {\n return;\n }\n const { offsetX, offsetY } = pos;\n contextRef.current.lineTo(offsetX, offsetY);\n contextRef.current.stroke();\n },\n [isPainting, getEventPosition]\n );\n\n useEffect(() => {\n if (!canvasRefState) {\n return;\n }\n\n canvasRefState.addEventListener('mousedown', startPainting);\n canvasRefState.addEventListener('mouseup', stopPainting);\n canvasRefState.addEventListener('mousemove', paint);\n canvasRefState.addEventListener('mouseleave', stopPainting);\n\n canvasRefState.addEventListener('touchstart', startPainting);\n canvasRefState.addEventListener('touchend', stopPainting);\n canvasRefState.addEventListener('touchmove', paint);\n canvasRefState.addEventListener('touchcancel', stopPainting);\n\n return () => {\n canvasRefState.removeEventListener('mousedown', startPainting);\n canvasRefState.removeEventListener('mouseup', stopPainting);\n canvasRefState.removeEventListener('mousemove', paint);\n canvasRefState.removeEventListener('mouseleave', stopPainting);\n\n canvasRefState.removeEventListener('touchstart', startPainting);\n canvasRefState.removeEventListener('touchend', stopPainting);\n canvasRefState.removeEventListener('touchmove', paint);\n canvasRefState.removeEventListener('touchcancel', stopPainting);\n };\n }, [startPainting, stopPainting, paint, canvasRefState]);\n\n const clear = () => {\n const context = contextRef.current;\n if (canvasRefState && context) {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n const initialDataUrl = canvasRefState.toDataURL();\n setHistory([initialDataUrl]);\n setHistoryIndex(0);\n onChange && onChange();\n }\n };\n\n const undo = () => {\n if (historyIndex > 0) {\n const newIndex = historyIndex - 1;\n setHistoryIndex(newIndex);\n restoreState(newIndex);\n }\n };\n\n const redo = () => {\n if (historyIndex < history.length - 1) {\n const newIndex = historyIndex + 1;\n setHistoryIndex(newIndex);\n restoreState(newIndex);\n }\n };\n\n const loadImage = (base64String: string) => {\n const context = contextRef.current;\n if (!canvasRefState || !context) {\n return;\n }\n\n const img = new Image();\n img.onload = () => {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n context.drawImage(img, 0, 0, canvasRefState.width, canvasRefState.height);\n saveState();\n };\n img.src = base64String;\n };\n\n const getBase64String = (imageProps: DownloadProps) => {\n const props = { ...DEFAULT_DOWNLOAD_PROPS, ...imageProps };\n const { fileExtendsion, transparent, backgroundColor, width, height } = props;\n const originalCanvas = canvasRefState;\n if (!originalCanvas) {\n return;\n }\n\n const tempCanvas = document.createElement('canvas');\n tempCanvas.width = width;\n tempCanvas.height = height;\n const tempCtx = tempCanvas.getContext('2d');\n\n if (tempCtx) {\n if (!transparent) {\n tempCtx.fillStyle = backgroundColor || 'white';\n tempCtx.fillRect(0, 0, width, height);\n }\n tempCtx.drawImage(originalCanvas, 0, 0, width, height);\n\n return tempCanvas.toDataURL(`image/${fileExtendsion}`);\n }\n };\n\n const download = (downloadProps: DownloadProps) => {\n const props = { ...DEFAULT_DOWNLOAD_PROPS, ...downloadProps };\n const { fileName, fileExtendsion, transparent, backgroundColor, width, height } = props;\n const originalCanvas = canvasRefState;\n if (!originalCanvas) {\n return;\n }\n\n const tempCanvas = document.createElement('canvas');\n tempCanvas.width = width;\n tempCanvas.height = height;\n const tempCtx = tempCanvas.getContext('2d');\n\n if (tempCtx) {\n if (!transparent) {\n tempCtx.fillStyle = backgroundColor || 'white';\n tempCtx.fillRect(0, 0, width, height);\n }\n tempCtx.drawImage(originalCanvas, 0, 0, width, height);\n\n const link = document.createElement('a');\n link.download = `${fileName}.${fileExtendsion}`;\n link.href = tempCanvas.toDataURL(`image/${fileExtendsion}`);\n link.click();\n }\n };\n /**\n * canvasRef.current canvas 에 데이터가 있는지 확인후 boolean 리턴\n * @returns boolean\n */\n const isCanvasBlank = () => {\n if (!canvasRefState) {\n return true;\n }\n\n // 캔버스 크기 가져오기\n const { width, height } = canvasRefState;\n\n // 2D 렌더링 컨텍스트 가져오기\n const ctx = canvasRefState.getContext('2d');\n if (!ctx) {\n console.error('2D context not available');\n\n return true; // 컨텍스트가 없으면 비어있는 것으로 간주\n }\n\n // 캔버스 전체 영역의 픽셀 데이터 가져오기\n const imageData = ctx.getImageData(0, 0, width, height);\n const { data } = imageData;\n\n // 픽셀 데이터의 알파(alpha) 값을 순회하며 확인\n // RGBA 순서이므로 알파 값은 3, 7, 11, ... 인덱스에 위치\n for (let i = 0; i < data.length; i += 4) {\n // 알파 값이 0이 아니면 (불투명한 부분이 있으면)\n if (data[i + 3] !== 0) {\n return false; // 캔버스가 비어있지 않음\n }\n }\n\n // 모든 픽셀의 알파 값이 0이면 (모두 투명하면)\n return true; // 캔버스가 비어있음\n };\n\n return {\n clear,\n undo,\n redo,\n loadImage,\n download,\n getBase64String,\n isCanvasBlank,\n setCanvasRefState,\n canvasRefState\n };\n}\n","/**\n * 서명로드용 base64 string\n */\nexport const testSignatureBase64Data =\n 'data:image/png;base64,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';\n","import React, { useState, useRef } from 'react';\n\nimport { Button } from 'sales-frontend-design-system';\n\nimport styles from '../debug-tool.module.scss';\n\n/**\n * @file 디버그 툴을 열기 위한 플로팅 버튼 컴포넌트입니다.\n * @description 화면 우측 하단에 고정되어 있으며, 클릭 시 메뉴 패널을 토글합니다. 버튼을 드래그하여 위치를 이동할 수 있습니다.\n */\n\ninterface FloatingButtonProps {\n /** 버튼 클릭 시 호출될 함수 */\n onClick: () => void;\n}\n\nconst FloatingButton: React.FC<FloatingButtonProps> = ({ onClick }) => {\n const [position, setPosition] = useState({ x: 0, y: 0 });\n const [isDragging, setIsDragging] = useState(false);\n const dragHappened = useRef(false);\n const dragStartPos = useRef({ x: 0, y: 0 });\n const elementStartPos = useRef({ x: 0, y: 0 });\n\n const handleMouseDown = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (e.button !== 0) {\n return;\n }\n dragHappened.current = false;\n setIsDragging(true);\n dragStartPos.current = { x: e.clientX, y: e.clientY };\n elementStartPos.current = { ...position };\n\n const handleMouseMove = (event: MouseEvent) => {\n const dx = event.clientX - dragStartPos.current.x;\n const dy = event.clientY - dragStartPos.current.y;\n\n if (!dragHappened.current && (Math.abs(dx) > 5 || Math.abs(dy) > 5)) {\n dragHappened.current = true;\n }\n\n setPosition({\n x: elementStartPos.current.x + dx,\n y: elementStartPos.current.y + dy\n });\n };\n\n const handleMouseUp = () => {\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n setIsDragging(false);\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n };\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (dragHappened.current) {\n e.preventDefault();\n e.stopPropagation();\n\n return;\n }\n onClick();\n };\n\n return (\n <Button\n variant=\"secondary\"\n appearance=\"filled\"\n size=\"xsmall\"\n className={styles['debug-floating-button']}\n style={{\n transform: `translate(${position.x}px, ${position.y}px)`,\n cursor: isDragging ? 'grabbing' : 'grab'\n }}\n onMouseDown={handleMouseDown}\n onClick={handleClick}\n >\n DEBUG\n </Button>\n );\n};\n\nexport default FloatingButton;\n","import React from 'react';\n\nimport { List, ListItem, Modal } from 'sales-frontend-design-system';\n\nimport styles from '../debug-tool.module.scss';\nimport { MenuItem } from '../types';\n\n/**\n * @file 디버그 툴의 기능 목록을 보여주는 메뉴 패널 컴포넌트입니다.\n * @description `config.ts`에서 정의된 메뉴 아이템들을 리스트 형태로 보여줍니다.\n */\n\ninterface MenuPanelProps {\n /** 표시할 메뉴 아이템의 배열 */\n menuItems: (Omit<MenuItem, 'component'> & { component: React.ComponentType<any> })[];\n /** 메뉴 아이템 클릭 시 호출될 콜백 함수 */\n onMenuItemClick: (component: React.ComponentType) => void;\n /** 패널을 닫을 때 호출될 콜백 함수 */\n onClose: () => void;\n}\n\nconst MenuPanel: React.FC<MenuPanelProps> = ({ menuItems, onMenuItemClick, onClose }) => {\n return (\n <Modal.Root isOpen={true} onClose={onClose} modalSize=\"small\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"Debug Menu\" showCloseButton />\n <Modal.Body>\n <List selectable>\n {menuItems.map((item) => (\n <ListItem key={item.id} onClick={() => onMenuItemClick(item.component)}>\n {item.label}\n </ListItem>\n ))}\n </List>\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n );\n};\n\nexport default MenuPanel;\n","import { useState, useEffect, useCallback } from 'react';\n\nimport { isClient } from 'sales-frontend-utils';\n\nimport { LogEntry, LogType } from '../../types';\n\n/**\n * @file '콘솔 로그 확인' 기능의 핵심 로직을 담당하는 훅입니다.\n * @description\n * - 전역(모듈 스코프) 상태로 로그를 관리하여, 컴포넌트의 생명주기와 관계없이 로그를 수집합니다.\n * - `console` 객체의 메서드를 오버라이드하여 로그를 가로챕니다.\n * - 옵저버 패턴(listeners)을 사용해 여러 컴포넌트에서 로그 상태를 구독하고 업데이트를 받을 수 있도록 합니다.\n */\n\n// 전역으로 관리되는 로그 배열. 앱 전체의 로그가 여기에 쌓입니다.\nlet globalLogs: LogEntry[] = [];\n// 로그 상태의 변경을 구독하는 컴포넌트(의 setState 함수) 목록입니다.\nlet listeners: React.Dispatch<React.SetStateAction<LogEntry[]>>[] = [];\n\n// 기존 console 메서드를 백업하기 위한 객체입니다.\nconst originalConsoleMethods: { [key in LogType]?: (...args: any[]) => void } = {};\n// 콘솔이 이미 오버라이드되었는지 확인하는 플래그입니다.\nlet isConsoleOverridden = false;\n\n// 새로운 로그를 전역 로그 배열에 추가하고, 모든 구독자에게 알립니다.\nconst addLog = (type: LogType, ...args: any[]) => {\n const newLog: LogEntry = {\n id: Date.now() + Math.random(),\n type,\n timestamp: new Date().toLocaleTimeString(),\n message: args\n };\n globalLogs = [...globalLogs, newLog];\n listeners.forEach((listener) => listener([...globalLogs]));\n};\n\n/**\n * `console` 객체의 메서드를 오버라이드하여 로그 수집을 시작합니다.\n * 중복 실행을 방지하기 위해 `isConsoleOverridden` 플래그를 사용합니다.\n */\nexport const initializeConsoleLogOverride = () => {\n if (!isClient() || isConsoleOverridden) {\n return;\n }\n const logTypes: LogType[] = ['log', 'info', 'warn', 'error', 'debug'];\n\n logTypes.forEach((type) => {\n // 기존 메서드 저장\n originalConsoleMethods[type] = console[type];\n\n // 메서드 오버라이드\n console[type] = (...args: any[]) => {\n // 기존 메서드를 먼저 호출하여 브라우저 콘솔에는 정상적으로 로그가 표시되도록 합니다.\n if (originalConsoleMethods[type]) {\n originalConsoleMethods[type]?.apply(console, args);\n }\n // 그 다음, 디버그 툴의 로그 상태에 추가합니다.\n addLog(type, ...args);\n };\n });\n\n isConsoleOverridden = true;\n};\n\n/**\n * 오버라이드했던 `console` 메서드를 원래대로 복원합니다.\n * `DebugTool` 컴포넌트가 언마운트될 때 호출됩니다.\n */\nexport const restoreConsoleLog = () => {\n if (!isClient() || !isConsoleOverridden) {\n return;\n }\n\n const logTypes: LogType[] = ['log', 'info', 'warn', 'error', 'debug'];\n logTypes.forEach((type) => {\n if (originalConsoleMethods[type]) {\n console[type] = originalConsoleMethods[type];\n }\n });\n isConsoleOverridden = false;\n};\n\n/**\n * 컴포넌트에서 콘솔 로그 데이터를 사용하기 위한 훅입니다.\n * @returns { logs, clearLogs }\n */\nexport const useConsoleLog = () => {\n const [logs, setLogs] = useState<LogEntry[]>(globalLogs);\n\n useEffect(() => {\n // 컴포넌트가 마운트될 때, 자신의 setState 함수를 listener로 등록합니다.\n listeners.push(setLogs);\n\n // 컴포넌트가 언마운트될 때, listener에서 제거하여 메모리 누수를 방지합니다.\n return () => {\n listeners = listeners.filter((l) => l !== setLogs);\n };\n }, []);\n\n // 모든 로그를 지우는 함수입니다.\n const clearLogs = useCallback(() => {\n globalLogs = [];\n listeners.forEach((listener) => listener([]));\n }, []);\n\n return { logs, clearLogs };\n};\n","import React, { useState, useMemo, useRef, useEffect } from 'react';\n\nimport { Button, Modal, Segment } from 'sales-frontend-design-system';\n\nimport styles from '../../debug-tool.module.scss';\nimport { FeaturePanelProps, LogType, LogEntry } from '../../types';\n\nimport { useConsoleLog } from './use-console-log';\n\n/**\n * @file '콘솔 로그 확인' 기능의 UI를 담당하는 패널 컴포넌트입니다.\n * @description `useConsoleLog` 훅으로부터 로그 데이터를 받아와 화면에 표시하며, 필터링 및 초기화 기능을 제공합니다.\n */\n\n// 객체나 배열을 포함한 모든 타입의 로그 메시지를 안전하게 문자열로 변환하는 헬퍼 함수입니다.\n// 순환 참조 등으로 인해 JSON.stringify가 실패할 경우 에러 메시지를 반환합니다.\nconst safeStringify = (obj: any): string => {\n try {\n return JSON.stringify(obj, null, 2);\n } catch (e) {\n return '[Unserializable Object]';\n }\n};\n\n// 단일 로그 메시지를 포맷팅하여 표시하는 내부 컴포넌트입니다.\nconst LogMessage: React.FC<{ entry: LogEntry }> = ({ entry }) => {\n const messageParts = entry.message.map((part) => {\n if (typeof part === 'object' && part !== null) {\n return safeStringify(part);\n }\n\n return String(part);\n });\n\n return <pre className={`${styles['log-message']} ${styles[`log-${entry.type}`]}`}>{messageParts.join(' ')}</pre>;\n};\n\nconst ConsoleLogPanel: React.FC<FeaturePanelProps> = ({ onClose }) => {\n // useConsoleLog 훅을 통해 전역으로 수집된 로그와 로그 초기화 함수를 가져옵니다.\n const { logs, clearLogs } = useConsoleLog();\n // 현재 활성화된 로그 필터 상태 ('all', 'log', 'warn', 'error')\n const [filter, setFilter] = useState<LogType | 'all'>('all');\n const logContainerRef = useRef<HTMLDivElement>(null);\n\n // 필터 상태에 따라 보여줄 로그 목록을 계산합니다. `useMemo`를 사용해 성능을 최적화합니다.\n const filteredLogs = useMemo(() => {\n if (filter === 'all') {\n return logs;\n }\n\n return logs.filter((log) => log.type === filter);\n }, [logs, filter]);\n\n // 새로운 로그가 추가될 때마다 스크롤을 자동으로 맨 아래로 내립니다.\n useEffect(() => {\n if (logContainerRef.current) {\n logContainerRef.current.scrollTop = logContainerRef.current.scrollHeight;\n }\n }, [filteredLogs]);\n\n return (\n <Modal.Root isOpen={true} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Content>\n <Modal.Header headerTitle=\"Console Logs\" showCloseButton />\n <Modal.Body>\n <div className={styles['panel-toolbar']}>\n {/* 로그 타입 필터링을 위한 세그먼트 UI */}\n <Segment.Root\n size=\"xsmall\"\n appearance=\"outline\"\n align=\"left\"\n defaultValue={filter}\n onValueChange={(value) => setFilter(value as LogType | 'all')}\n >\n <Segment.Item value=\"all\">All</Segment.Item>\n <Segment.Item value=\"log\">Log</Segment.Item>\n <Segment.Item value=\"warn\">Warn</Segment.Item>\n <Segment.Item value=\"error\">Error</Segment.Item>\n </Segment.Root>\n {/* 로그 초기화 버튼 */}\n <Button\n variant=\"neutral\"\n appearance=\"outline\"\n size=\"xsmall\"\n onClick={clearLogs}\n style={{ marginLeft: 'auto' }}\n >\n Clear\n </Button>\n </div>\n {/* 로그 목록을 표시하는 컨테이너 */}\n <div className={styles['log-list-container']} ref={logContainerRef}>\n {filteredLogs.map((log) => (\n <div key={log.id} className={styles['log-item']}>\n <span className={styles['log-timestamp']}>{log.timestamp}</span>\n <LogMessage entry={log} />\n </div>\n ))}\n </div>\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n );\n};\n\nexport default ConsoleLogPanel;\n","import React, { useState, useMemo, useEffect } from 'react';\n\nimport { Button, Modal, Select, FormField } from 'sales-frontend-design-system';\n\nimport { loginTypes } from '../../config';\nimport styles from '../../debug-tool.module.scss';\nimport { FeaturePanelProps, LoginTypeConfig } from '../../types';\n\n/**\n * @file '간편 로그인' 기능의 UI를 담당하는 패널 컴포넌트입니다.\n * @description\n * - `config.ts`의 `loginTypes` 설정을 기반으로 동적인 로그인 폼을 생성합니다.\n * - 실제 로그인 로직은 `onLogin` prop으로 외부에서 주입받아 처리합니다.\n * 이 컴포넌트는 UI와 데이터 수집의 역할만 수행하여 재사용성을 높입니다.\n */\n\ninterface LoginPanelProps extends FeaturePanelProps {\n /**\n * '로그인' 버튼 클릭 시 호출될 콜백 함수입니다.\n * @param loginType - 선택된 로그인 유형의 `id` (e.g., 'fp', 'customer')\n * @param data - 폼에 입력된 데이터 객체 (e.g., { employeeId: '12345' })\n */\n onLogin: (loginType: LoginTypeConfig['id'], data: Record<string, string>) => void;\n}\n\nconst LoginPanel: React.FC<LoginPanelProps> = ({ onClose, onLogin }) => {\n // 현재 선택된 로그인 유형의 ID를 상태로 관리합니다.\n const [selectedTypeId, setSelectedTypeId] = useState<string>(loginTypes[0]?.id || '');\n // 폼 입력 데이터를 상태로 관리합니다.\n const [formData, setFormData] = useState<Record<string, string>>({});\n\n // 선택된 로그인 유형의 전체 설정 객체를 찾습니다.\n const selectedType = useMemo(() => loginTypes.find((t) => t.id === selectedTypeId), [selectedTypeId]);\n\n // 입력 필드 값이 변경될 때마다 formData 상태를 업데이트합니다.\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { name, value } = e.target;\n setFormData((prev) => ({ ...prev, [name]: value }));\n };\n\n // 폼 제출(로그인 버튼 클릭) 시 호출됩니다.\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (selectedType) {\n // 부모 컴포넌트로부터 받은 onLogin 콜백을 호출하여 로그인 처리를 위임합니다.\n onLogin(selectedType.id, formData);\n // 실제 로그인 성공 여부와 관계없이, 호출 후에는 패널을 닫습니다.\n // 성공 시에만 닫고 싶다면 onLogin 콜백이 Promise를 반환하게 하고 .then()으로 처리할 수 있습니다.\n onClose();\n }\n };\n\n // 로그인 유형이 변경될 때마다 폼 데이터를 초기화합니다.\n useEffect(() => {\n setFormData({});\n }, [selectedType]);\n\n return (\n <Modal.Root isOpen={true} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Content>\n <Modal.Header headerTitle=\"간편 로그인\" showCloseButton />\n <Modal.Body>\n <form className={styles['login-form-container']} onSubmit={handleSubmit}>\n {/* 로그인 유형 선택 드롭다운 */}\n <FormField.FieldControl>\n <FormField.Label htmlFor=\"login-type-select\">로그인 유형</FormField.Label>\n <Select\n value={selectedTypeId}\n onChange={setSelectedTypeId}\n size=\"xsmall\"\n rootProps={{ style: { width: '100%' } }}\n >\n {loginTypes.map((type) => (\n <Select.Option key={type.id} value={type.id}>\n {type.label}\n </Select.Option>\n ))}\n </Select>\n </FormField.FieldControl>\n\n {/* 선택된 유형에 따라 동적으로 생성되는 입력 필드 */}\n {selectedType?.fields.map((field) => (\n <FormField.FieldControl key={field.name}>\n <FormField.Label htmlFor={field.name}>{field.label}</FormField.Label>\n <FormField.TextField\n size=\"xsmall\"\n type={field.type}\n id={field.name}\n name={field.name}\n placeholder={field.placeholder}\n value={formData[field.name] || ''}\n onChange={handleInputChange}\n required\n />\n </FormField.FieldControl>\n ))}\n\n <div className={styles['form-actions']}>\n <Button type=\"submit\" variant=\"primary\" appearance=\"filled\" size=\"xsmall\">\n 로그인\n </Button>\n </div>\n </form>\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n );\n};\n\nexport default LoginPanel;\n","import React, { useState, useMemo } from 'react';\n\nimport {\n useDebugStore,\n RequestInfo,\n ResponseInfo,\n ErrorInfo,\n HeldRequest,\n HeldResponse,\n HeldError\n} from 'sales-frontend-api';\nimport { Accordion, Button, FormField, Modal, Select, Checkbox } from 'sales-frontend-design-system';\n\nimport styles from './network-log.module.scss';\n\ninterface NetworkLogProps {\n onClose: () => void;\n}\n\nconst SEARCH_SECTIONS = [\n { value: 'all', label: '전체' },\n { value: 'url', label: '주소' },\n { value: 'headers', label: '헤더' },\n { value: 'params', label: '파라미터' },\n { value: 'data', label: '요청' },\n { value: 'response', label: '응답' },\n { value: 'error', label: '에러' }\n];\n\ntype Log = (RequestInfo | ResponseInfo | ErrorInfo | HeldRequest | HeldResponse | HeldError) & {\n type: string;\n holdStatus?: 'held' | 'playing';\n};\n\nconst getLogInfo = (log: Log): RequestInfo | ResponseInfo | ErrorInfo => {\n if (log.holdStatus === 'held') {\n if ('request' in log) {\n return (log as HeldRequest).request;\n }\n if ('response' in log) {\n return (log as HeldResponse).response;\n }\n if ('error' in log) {\n return (log as HeldError).error;\n }\n }\n\n return log as RequestInfo | ResponseInfo | ErrorInfo;\n};\n\nconst NetworkLog: React.FC<NetworkLogProps> = ({ onClose }) => {\n const {\n requests,\n responses,\n errors,\n clear,\n isHold,\n toggleHold,\n heldRequests,\n heldResponses,\n heldErrors,\n playAllRequests,\n playAllResponses\n } = useDebugStore();\n const [searchTerm, setSearchTerm] = useState('');\n const [searchSection, setSearchSection] = useState(SEARCH_SECTIONS[0]?.value);\n\n const allLogs = useMemo(() => {\n const logs: Log[] = [];\n requests.forEach((req: RequestInfo) => logs.push({ ...req, type: 'request' }));\n responses.forEach((res: ResponseInfo) => logs.push({ ...res, type: 'response' }));\n errors.forEach((err: ErrorInfo) => logs.push({ ...err, type: 'error' }));\n heldRequests.forEach((req: HeldRequest) => logs.push({ ...req, type: 'request', holdStatus: 'held' }));\n heldResponses.forEach((res: HeldResponse) => logs.push({ ...res, type: 'response', holdStatus: 'held' }));\n heldErrors.forEach((err: HeldError) => logs.push({ ...err, type: 'error', holdStatus: 'held' }));\n\n logs.sort((a, b) => {\n const aInfo = getLogInfo(a);\n const bInfo = getLogInfo(b);\n const aTime = 'startTime' in aInfo ? aInfo.startTime : 0;\n const bTime = 'startTime' in bInfo ? bInfo.startTime : 0;\n\n return bTime - aTime;\n });\n\n return logs;\n }, [requests, responses, errors, heldRequests, heldResponses, heldErrors]);\n\n const filteredLogs = useMemo(() => {\n if (!searchTerm) {\n return allLogs;\n }\n const lowercasedTerm = searchTerm.toLowerCase();\n\n return allLogs.filter((log: Log) => {\n const logInfo = getLogInfo(log);\n switch (searchSection) {\n case 'url':\n return logInfo.url?.toLowerCase().includes(lowercasedTerm);\n case 'headers':\n return (\n 'headers' in logInfo &&\n logInfo.headers &&\n JSON.stringify(logInfo.headers)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'params':\n return (\n 'params' in logInfo &&\n logInfo.params &&\n JSON.stringify(logInfo.params)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'data':\n return (\n 'data' in logInfo &&\n logInfo.data &&\n log.type === 'request' &&\n JSON.stringify(logInfo.data)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'response':\n return (\n 'data' in logInfo &&\n logInfo.data &&\n log.type === 'response' &&\n JSON.stringify(logInfo.data)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'error':\n return log.type === 'error' && JSON.stringify(logInfo)?.toLowerCase().includes(lowercasedTerm);\n case 'all':\n default:\n return JSON.stringify(logInfo).toLowerCase().includes(lowercasedTerm);\n }\n });\n }, [allLogs, searchTerm, searchSection]);\n\n const renderLogSummary = (log: Log) => {\n const logInfo = getLogInfo(log);\n const prefix = log.holdStatus === 'held' ? '[HELD] ' : '';\n if (log.type === 'request') {\n return `${prefix}[REQ] ${logInfo.method.toUpperCase()} ${logInfo.url}`;\n }\n if (log.type === 'response' && 'status' in logInfo) {\n return `${prefix}[RES] ${logInfo.method.toUpperCase()} ${logInfo.url} - ${logInfo.status}`;\n }\n if (log.type === 'error' && 'message' in logInfo) {\n return `${prefix}[ERR] ${logInfo.method.toUpperCase()} ${logInfo.url} - ${logInfo.message}`;\n }\n\n return 'Unknown Log';\n };\n\n const renderLogContent = (log: Log) => {\n const logInfo = getLogInfo(log);\n\n return <pre>{JSON.stringify(logInfo, null, 2)}</pre>;\n };\n\n return (\n <Modal.Root isOpen={true} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"네트워크 로그\" showCloseButton />\n <Modal.Body>\n <div className={styles['search-container']}>\n <Select value={searchSection} onChange={(value) => setSearchSection(value as string)} size=\"xsmall\">\n {SEARCH_SECTIONS.map((option) => (\n <Select.Option key={option.value} value={option.value}>\n {option.label}\n </Select.Option>\n ))}\n </Select>\n <FormField.TextField\n placeholder=\"검색...\"\n value={searchTerm}\n size=\"xsmall\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setSearchTerm(e.target.value)}\n />\n <Checkbox id=\"hold-checkbox\" checked={isHold} onChange={toggleHold} size=\"small\" variant=\"main\">\n Hold\n </Checkbox>\n <Button variant=\"neutral\" appearance=\"outline\" size=\"xsmall\" onClick={clear}>\n clear\n </Button>\n </div>\n {isHold && (\n <div style={{ display: 'flex', flexDirection: 'row' }}>\n <Button size=\"xsmall\" onClick={() => playAllRequests()} variant=\"primary\" appearance=\"outline\">\n REQ Resolve\n </Button>\n <Button size=\"xsmall\" onClick={() => playAllResponses()} variant=\"primary\" appearance=\"outline\">\n RES Resolve\n </Button>\n </div>\n )}\n <div className={styles['log-list']}>\n {filteredLogs.length === 0 ? (\n <p>표시할 로그가 없습니다.</p>\n ) : (\n <Accordion.Root>\n {filteredLogs.map((log, index) => (\n <Accordion.Item key={index}>\n <Accordion.HeaderButton>\n <p className={styles['log-summary']}>{renderLogSummary(log)}</p>\n </Accordion.HeaderButton>\n <Accordion.Content variant=\"text\">\n <div className={styles['log-content']}>{renderLogContent(log)}</div>\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Accordion.Root>\n )}\n </div>\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n );\n};\n\nexport default NetworkLog;\n","import React, { useState } from 'react';\n\nimport { Button, Modal, FormField } from 'sales-frontend-design-system';\n\nimport styles from '../../debug-tool.module.scss';\nimport { FeaturePanelProps } from '../../types';\n\n/**\n * @file '페이지 이동' 기능의 UI를 담당하는 패널 컴포넌트입니다.\n * @description 사용자가 입력한 URL로 페이지를 이동시킵니다.\n */\nconst PageNavigationPanel: React.FC<FeaturePanelProps> = ({ onClose }) => {\n // 사용자가 입력한 URL을 상태로 관리합니다.\n const [url, setUrl] = useState<string>('');\n\n // '이동' 버튼 클릭 시 호출됩니다.\n const handleNavigate = () => {\n if (url) {\n // `window.location.href`를 변경하여 페이지를 이동시킵니다.\n self.location.href = url;\n }\n };\n\n return (\n <Modal.Root isOpen={true} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Content>\n <Modal.Header headerTitle=\"페이지 이동\" showCloseButton />\n <Modal.Body>\n <div className={styles['page-navigation-content']}>\n <FormField.TextField\n size=\"xsmall\"\n type=\"text\"\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n placeholder=\"이동할 URL을 입력하세요 (예: /main)\"\n rootProps={{ style: { flex: 1 } }}\n />\n <Button variant=\"primary\" appearance=\"filled\" size=\"xsmall\" onClick={handleNavigate}>\n 이동\n </Button>\n </div>\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n );\n};\n\nexport default PageNavigationPanel;\n","import React, { useState } from 'react';\n\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport styles from '../../debug-tool.module.scss';\n\nimport type { FeaturePanelProps } from '../../types';\n\n/**\n * @file '스크립트 실행' 기능의 UI 및 로직을 담당하는 패널 컴포넌트입니다.\n * @description\n * - 사용자가 입력한 JavaScript 코드를 `new Function()`을 통해 안전하게 실행합니다.\n * - 실행 중 발생하는 `console` 로그, 반환 값, 에러를 모두 캡처하여 결과 패널에 표시합니다.\n */\n\n// 스크립트 실행 결과로 표시될 로그의 종류입니다.\ntype ResultLogType = 'log' | 'warn' | 'error' | 'return';\n\n// 단일 결과 로그의 데이터 구조입니다.\ninterface ResultLog {\n id: number;\n type: ResultLogType;\n timestamp: string;\n message: any[];\n}\n\n// 객체를 안전하게 문자열로 변환하는 함수입니다.\nconst safeStringify = (obj: any): string => {\n try {\n // BigInt는 JSON.stringify에서 오류를 발생시키므로 문자열로 변환하는 replacer를 사용합니다.\n const replacer = (key: any, value: any) => (typeof value === 'bigint' ? value.toString() : value);\n\n return JSON.stringify(obj, replacer, 2);\n } catch (e) {\n return '[Unserializable Object]';\n }\n};\n\n// 단일 결과 로그를 포맷팅하여 표시하는 내부 컴포넌트입니다.\nconst ResultMessage: React.FC<{ log: ResultLog }> = ({ log }) => {\n const messageParts = log.message.map((part) => {\n if (typeof part === 'object' && part !== null) {\n return safeStringify(part);\n }\n\n return String(part);\n });\n\n // 반환 값일 경우, 앞에 화살표 아이콘을 추가합니다.\n const prefix = log.type === 'return' ? '↩ ' : '';\n\n return (\n <pre className={`${styles['log-message']} ${styles[`log-${log.type}`]}`}>\n {prefix}\n {messageParts.join(' ')}\n </pre>\n );\n};\n\nexport const ScriptExecutorPanel: React.FC<FeaturePanelProps> = ({ onClose }) => {\n // 사용자가 입력한 코드를 상태로 관리합니다.\n const [code, setCode] = useState<string>('// 여기에 실행할 코드를 입력하세요\\nconsole.log(\"Hello, World!\");');\n // 실행 결과를 담는 로그 배열 상태입니다.\n const [results, setResults] = useState<ResultLog[]>([]);\n\n // 결과 로그 배열에 새로운 로그를 추가하는 함수입니다.\n const addResult = (type: ResultLogType, ...args: any[]) => {\n setResults((prevResults) => [\n ...prevResults,\n {\n id: Date.now() + Math.random(),\n type,\n timestamp: new Date().toLocaleTimeString(),\n message: args\n }\n ]);\n };\n\n // '실행' 버튼 클릭 시 호출됩니다.\n const handleExecute = () => {\n const originalConsole = { ...console };\n // 실행될 코드 내부의 console 출력을 가로채기 위해 임시 console 객체를 만듭니다.\n const newConsole = {\n log: (...args: any[]) => {\n originalConsole.log(...args); // 원래 콘솔에도 출력\n addResult('log', ...args); // 결과 패널에도 추가\n },\n warn: (...args: any[]) => {\n originalConsole.warn(...args);\n addResult('warn', ...args);\n },\n error: (...args: any[]) => {\n originalConsole.error(...args);\n addResult('error', ...args);\n }\n };\n\n try {\n // 실행 컨텍스트의 console을 임시로 교체합니다.\n Object.assign(console, newConsole);\n\n // `new Function()`을 사용하여 `eval`보다 안전하게 스코프를 격리하여 코드를 실행합니다.\n // eslint-disable-next-line no-new-func -- 동적 코드 실행을 위해 new Function() 사용이 필수적입니다.\n const result = new Function(code)();\n\n // 코드의 반환 값이 있으면 결과 패널에 표시합니다.\n if (result !== undefined) {\n addResult('return', result);\n }\n } catch (e: any) {\n // 코드 실행 중 에러가 발생하면 에러를 결과 패널에 표시합니다.\n addResult('error', e.name, e.message);\n } finally {\n // 코드 실행 후, 가로챘던 console 객체를 원래대로 복원합니다.\n Object.assign(console, originalConsole);\n }\n };\n\n // '결과 지우기' 버튼 클릭 시 호출됩니다.\n const handleClear = () => {\n setResults([]);\n };\n\n return (\n <Modal.Root isOpen={true} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Content>\n <Modal.Header headerTitle=\"스크립트 실행\" showCloseButton />\n <Modal.Body>\n <div className={`${styles['debug-feature-panel']} ${styles['script-executor-panel']}`}>\n <div className={styles['script-executor-content']}>\n <div className={styles['script-input-section']}>\n <textarea\n className={styles['script-textarea']}\n value={code}\n onChange={(e) => setCode(e.target.value)}\n spellCheck=\"false\"\n />\n <div className={styles['script-actions']}>\n <Button variant=\"neutral\" appearance=\"outline\" size=\"xsmall\" onClick={handleExecute}>\n 실행 (▶)\n </Button>\n <Button variant=\"neutral\" appearance=\"outline\" size=\"xsmall\" onClick={handleClear}>\n 결과 지우기\n </Button>\n </div>\n </div>\n <div className={styles['script-output-section']}>\n <div className={styles['panel-header']}>\n <h3>결과</h3>\n </div>\n <div className={styles['log-list-container']}>\n {results.map((log) => (\n <div key={log.id} className={styles['log-item']}>\n <span className={styles['log-timestamp']}>{log.timestamp}</span>\n <ResultMessage log={log} />\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n );\n};\n\n\nexport default ScriptExecutorPanel;\n","import { useState, useEffect, useCallback } from 'react';\n\nimport { StorageType, StorageItem } from '../../types';\n\n/**\n * @file '스토리지 관리' 기능의 핵심 로직을 담당하는 훅입니다.\n * @description\n * - `localStorage`와 `document.cookie`의 복잡한 API를 추상화합니다.\n * - `storageType` prop에 따라 두 스토리지에 대한 CRUD 로직을 동일한 인터페이스로 제공합니다.\n */\n\n// 쿠키를 설정하는 헬퍼 함수입니다.\nconst setCookie = (name: string, value: string) => {\n document.cookie = `${name}=${encodeURIComponent(value)};path=/`;\n};\n\n// 쿠키를 제거하는 헬퍼 함수입니다.\nconst removeCookie = (name: string) => {\n document.cookie = `${name}=;path=/;expires=Thu, 01 Jan 1970 00:00:01 GMT;`;\n};\n\n/**\n * `localStorage` 또는 `cookie` 데이터를 관리하기 위한 훅입니다.\n * @param storageType - 관리할 스토리지의 종류 ('localStorage' 또는 'cookie')\n * @returns { items, setItem, removeItem, loadItems }\n */\nexport const useStorage = (storageType: StorageType) => {\n const [items, setItems] = useState<StorageItem[]>([]);\n\n // 스토리지에서 모든 아이템을 불러와 상태를 업데이트하는 함수입니다.\n const loadItems = useCallback(() => {\n const newItems: StorageItem[] = [];\n if (storageType === 'localStorage') {\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key) {\n newItems.push({ key, value: localStorage.getItem(key) || '' });\n }\n }\n } else {\n const cookies = document.cookie.split(';');\n cookies.forEach((cookie) => {\n const parts = cookie.split('=');\n const key = parts.shift()?.trim();\n if (key) {\n newItems.push({ key, value: decodeURIComponent(parts.join('=')) });\n }\n });\n }\n setItems(newItems);\n }, [storageType]);\n\n // 컴포넌트 마운트 시 아이템을 불러옵니다.\n useEffect(() => {\n loadItems();\n }, [loadItems]);\n\n // 스토리지에 아이템을 추가하거나 수정하는 함수입니다.\n const setItem = useCallback(\n (key: string, value: string) => {\n if (storageType === 'localStorage') {\n localStorage.setItem(key, value);\n } else {\n setCookie(key, value);\n }\n loadItems(); // 목록 새로고침\n },\n [storageType, loadItems]\n );\n\n // 스토리지에서 아이템을 제거하는 함수입니다.\n const removeItem = useCallback(\n (key: string) => {\n if (storageType === 'localStorage') {\n localStorage.removeItem(key);\n } else {\n removeCookie(key);\n }\n loadItems(); // 목록 새로고침\n },\n [storageType, loadItems]\n );\n\n return { items, setItem, removeItem, loadItems };\n};\n","import React, { useState, useMemo } from 'react';\n\nimport { Accordion, Button, FormField, Modal } from 'sales-frontend-design-system';\n\nimport styles from '../../debug-tool.module.scss';\nimport { FeaturePanelProps, StorageType, StorageItem } from '../../types';\n\nimport { useStorage } from './use-storage';\n\n/**\n * @file '스토리지 관리' 기능의 UI를 담당하는 패널 컴포넌트입니다.\n * @description `storageType` prop에 따라 'localStorage' 또는 'cookie'를 관리하는 UI를 렌더링합니다.\n */\n\ninterface StoragePanelProps extends FeaturePanelProps {\n /** 이 패널이 다룰 스토리지의 종류 */\n storageType: StorageType;\n}\n\n/**\n * 스토리지 값을 포맷팅하여 보여주는 컴포넌트입니다.\n * JSON 객체인 경우 보기 좋게 들여쓰기하여 표시합니다.\n */\nconst ValueDisplay: React.FC<{ value: string }> = ({ value }) => {\n try {\n const parsed = JSON.parse(value);\n if (typeof parsed === 'object' && parsed !== null) {\n return <pre className={styles['log-content']}>{JSON.stringify(parsed, null, 2)}</pre>;\n }\n } catch (e) {\n // 값이 JSON이 아니면 원본 문자열을 그대로 보여줍니다.\n }\n\n return <div className={styles['log-content']}>{value}</div>;\n};\n\n/**\n * 스토리지의 각 아이템(Key-Value)을 표시하고 수정/삭제할 수 있는 행(Row) 컴포넌트입니다.\n * 자체적으로 '수정 모드' 상태를 가집니다.\n */\nconst EditableRow: React.FC<{\n item: StorageItem;\n onSave: (key: string, value: string) => void;\n onRemove: (key: string) => void;\n}> = ({ item, onSave, onRemove }) => {\n // 수정 모드 상태\n const [isEditing, setIsEditing] = useState(false);\n // 수정 중인 입력 값을 관리하는 상태\n const [value, setValue] = useState(item.value);\n\n const handleSave = () => {\n onSave(item.key, value);\n setIsEditing(false);\n };\n\n const handleEdit = () => {\n setValue(item.value);\n setIsEditing(true);\n };\n\n return (\n <Accordion.Root>\n <Accordion.Item>\n <Accordion.HeaderButton> {item.key}</Accordion.HeaderButton>\n <Accordion.Content variant=\"text\" style={{ flex: 1, display: 'flex', flexDirection: 'column' }}>\n {isEditing ? (\n <Button variant=\"neutral\" appearance=\"outline\" size=\"xsmall\" onClick={handleSave}>\n Save\n </Button>\n ) : (\n <Button variant=\"neutral\" appearance=\"outline\" size=\"xsmall\" onClick={handleEdit}>\n Edit\n </Button>\n )}\n <Button variant=\"neutral\" appearance=\"outline\" size=\"xsmall\" onClick={() => onRemove(item.key)}>\n Remove\n </Button>\n {isEditing ? (\n <textarea value={value} onChange={(e) => setValue(e.target.value)} />\n ) : (\n <ValueDisplay value={item.value} />\n )}\n </Accordion.Content>\n </Accordion.Item>\n </Accordion.Root>\n );\n};\n\nconst StoragePanel: React.FC<StoragePanelProps> = ({ onClose, storageType }) => {\n // useStorage 훅을 통해 스토리지 데이터와 제어 함수들을 가져옵니다.\n const { items, setItem, removeItem } = useStorage(storageType);\n // 검색어 상태\n const [filter, setFilter] = useState('');\n\n // 검색어에 따라 필터링된 아이템 목록을 계산합니다.\n const filteredItems = useMemo(() => {\n if (!filter) {\n return items;\n }\n\n return items.filter(\n (item) =>\n item.key.toLowerCase().includes(filter.toLowerCase()) || item.value.toLowerCase().includes(filter.toLowerCase())\n );\n }, [items, filter]);\n\n return (\n <Modal.Root isOpen={true} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Content>\n <Modal.Header headerTitle={storageType === 'localStorage' ? 'Local Storage' : 'Cookies'} showCloseButton />\n <Modal.Body>\n <div className={styles['panel-toolbar']}>\n <FormField.TextField\n placeholder=\"Search key or value...\"\n size=\"xsmall\"\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n rootProps={{ style: { width: '100%' } }}\n />\n </div>\n <ul>\n {filteredItems.map((item) => (\n <li key={item.key}>\n {/* TODO: 아이템 추가/수정 UI를 별도 모달로 개선하는 것을 고려해볼 수 있습니다. */}\n <EditableRow item={item} onSave={setItem} onRemove={removeItem} />\n </li>\n ))}\n </ul>\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n );\n};\n\nexport default StoragePanel;\n","import React from 'react';\n\nimport ConsoleLogPanel from './features/console-log/console-log-panel';\nimport LoginPanel from './features/login-dsp/login-panel';\nimport NetworkLog from './features/network-log';\nimport PageNavigationPanel from './features/page-navigation/page-navigation-panel';\nimport ScriptExecutorPanel from './features/script-executor/script-executor-panel';\nimport StoragePanel from './features/storage/storage-panel';\nimport { MenuItem, LoginTypeConfig } from './types';\n\n/**\n * @file 디버그 툴의 모든 설정을 관리하는 중앙 설정 파일입니다.\n * @description\n * - 새로운 기능을 추가하거나 기존 기능을 수정/제거할 때 이 파일을 수정합니다.\n * - `menuItems`: 디버그 툴에 표시될 메뉴 목록을 정의합니다.\n * - `loginTypes`: '간편 로그인' 기능에서 사용할 로그인 유형과 필드를 정의합니다.\n */\n\n// '간편 로그인' 기능에서 사용할 로그인 유형 목록입니다.\n// 새로운 로그인 유형을 추가하려면 이 배열에 객체를 추가하면 됩니다.\nexport const loginTypes: LoginTypeConfig[] = [\n {\n id: 'fp',\n label: 'FP 로그인',\n fields: [{ name: 'employeeId', label: '사번', type: 'text', placeholder: '사번을 입력하세요' }]\n },\n {\n id: 'customer',\n label: '고객 로그인',\n fields: [\n { name: 'name', label: '이름', type: 'text', placeholder: '이름' },\n { name: 'phone', label: '전화번호', type: 'tel', placeholder: '전화번호' },\n { name: 'residentNumber', label: '주민번호', type: 'text', placeholder: '주민번호 앞 7자리' },\n { name: 'userId', label: '아이디', type: 'text', placeholder: '아이디' },\n { name: 'password', label: '비밀번호', type: 'password', placeholder: '비밀번호' }\n ]\n }\n];\n\n/**\n * 디버그 툴에 표시될 메뉴 아이템 목록입니다.\n * 새로운 기능을 개발하고 여기에 추가하여 메뉴에 노출시킬 수 있습니다.\n *\n * @property {string} id - 메뉴의 고유 식별자입니다.\n * @property {string} label - 메뉴에 표시될 텍스트입니다.\n * @property {React.ComponentType} component - 메뉴 클릭 시 렌더링될 리액트 컴포넌트입니다.\n * @property {boolean} display - `true`일 경우 메뉴에 표시되고, `false`일 경우 숨겨집니다. 개발 중인 기능을 숨길 때 유용합니다.\n */\nexport const menuItems: (Omit<MenuItem, 'component'> & { component: React.ComponentType<any> })[] = [\n {\n id: 'network-log',\n label: '네트워크 로그',\n component: NetworkLog,\n display: true\n },\n {\n id: 'console-log',\n label: '콘솔 로그 확인',\n component: ConsoleLogPanel,\n display: true\n },\n {\n id: 'local-storage',\n label: '로컬 스토리지 관리',\n // StoragePanel은 재사용 가능한 컴포넌트이므로, props를 통해 어떤 스토리지를 다룰지 지정합니다.\n component: (props) => <StoragePanel {...props} storageType=\"localStorage\" />,\n display: true\n },\n {\n id: 'cookie-management',\n label: '쿠키 관리',\n component: (props) => <StoragePanel {...props} storageType=\"cookie\" />,\n display: true\n },\n {\n id: 'quick-login',\n label: '간편 로그인',\n component: LoginPanel,\n display: true // 실제 표시는 DebugTool.tsx에서 onLogin prop 존재 여부에 따라 결정됩니다.\n },\n {\n id: 'script-executor',\n label: '스크립트 실행',\n component: ScriptExecutorPanel,\n display: true\n },\n {\n id: 'page-navigation',\n label: '페이지 이동',\n component: PageNavigationPanel,\n display: true\n }\n];\n","import { useState, useEffect } from 'react';\n\nimport { getEnvironmentFromHostname } from 'sales-frontend-utils';\n\nimport { EnvironmentInfo } from '../types';\n\n/**\n * 현재 애플리케이션의 실행 환경(호스트 기준)을 감지하는 훅입니다.\n * @returns {EnvironmentInfo} 환경 정보 객체 (e.g., { env: 'local' })\n */\nexport const useEnvironment = (): EnvironmentInfo => {\n const [envInfo, setEnvInfo] = useState<EnvironmentInfo>({\n env: 'prd'\n });\n\n useEffect(() => {\n const { hostname } = window.location;\n setEnvInfo({ env: getEnvironmentFromHostname(hostname) });\n }, []);\n\n return envInfo;\n};\n","'use client';\nimport React, { useState, useEffect } from 'react';\n\nimport FloatingButton from './components/floating-button';\nimport MenuPanel from './components/menu-panel';\nimport { menuItems as defaultMenuItems } from './config';\nimport { initializeConsoleLogOverride, restoreConsoleLog } from './features/console-log/use-console-log';\nimport { useEnvironment } from './hooks/use-environment';\nimport { Environment, MenuItem } from './types';\n\n/**\n * @file DebugTool의 메인 컴포넌트 파일입니다.\n * @description\n * - 환경에 따라 디버그 툴의 노출 여부를 결정합니다.\n * - 플로팅 버튼과 메뉴 패널의 상태를 관리합니다.\n * - 선택된 기능(Feature) 컴포넌트를 렌더링합니다.\n * - `onLogin`, `envOverride`, `menuItemsOverride` 등의 props를 통해 외부에서 동작을 제어할 수 있습니다.\n */\n\n// onLogin 콜백을 optional prop으로 받습니다.\ninterface DebugToolProps {\n /** 간편 로그인 기능을 위한 콜백 함수. 이 함수가 제공되어야 '간편 로그인' 메뉴가 활성화됩니다. */\n onLogin?: (loginType: string, data: Record<string, string>) => void;\n /** 현재 환경을 강제로 재정의합니다. 'prod' 환경에서도 디버그 툴을 테스트할 때 유용합니다. */\n envOverride?: Environment;\n /** 기본 메뉴 설정을 재정의합니다. 동적으로 메뉴를 추가하거나 변경할 때 사용합니다. */\n menuItemsOverride?: (Omit<MenuItem, 'component'> & { component: React.ComponentType<any> })[];\n /** @deprecated Storybook 전용 prop으로, 실제 사용되지 않습니다. */\n menuConfig?: Record<string, boolean>;\n}\n\nexport const DebugTool: React.FC<DebugToolProps> = ({ onLogin, envOverride, menuItemsOverride }) => {\n // 마운트 시 콘솔 오버라이드를 초기화하고 언마운트 시 복원합니다.\n // 이를 통해 '콘솔 로그' 기능이 페이지의 모든 로그를 수집할 수 있습니다.\n useEffect(() => {\n initializeConsoleLogOverride();\n\n return () => {\n restoreConsoleLog();\n };\n }, []); // 빈 의존성 배열은 마운트와 언마운트 시 한 번만 실행되도록 보장합니다.\n\n const environment = useEnvironment();\n // envOverride prop이 있으면 환경을 강제로 설정하고, 없으면 감지된 환경을 사용합니다.\n const env = envOverride || environment.env;\n\n // menuItemsOverride prop이 있으면 메뉴를 강제로 설정하고, 없으면 config 파일의 기본 메뉴를 사용합니다.\n const menuItems = menuItemsOverride || defaultMenuItems;\n const [isMenuOpen, setMenuOpen] = useState(false);\n // 현재 활성화된 기능 컴포넌트를 상태로 관리합니다. null이면 메뉴가 보입니다.\n const [activeFeature, setActiveFeature] = useState<React.ComponentType<any> | null>(null);\n\n // 'local', 'dev', 'stg' 환경에서만 툴을 보여줍니다.\n const isVisible = ['local', 'dev', 'stg'].includes(env);\n\n // 메뉴 아이템을 클릭했을 때 호출되는 핸들러입니다.\n const handleMenuClick = (itemComponent: React.ComponentType<any>) => {\n setActiveFeature(() => itemComponent); // 클릭된 기능의 컴포넌트를 활성화합니다.\n setMenuOpen(false); // 메뉴 패널을 닫습니다.\n };\n\n // 기능 패널의 닫기 버튼을 눌렀을 때 호출되는 핸들러입니다.\n const handleCloseFeature = () => {\n setActiveFeature(null); // 활성화된 기능 컴포넌트를 null로 만들어 메뉴로 돌아갑니다.\n };\n\n // 허용된 환경이 아니면 아무것도 렌더링하지 않습니다.\n if (!isVisible) {\n return null;\n }\n\n // 플로팅 버튼 클릭 시 메뉴 패널의 열림/닫힘 상태를 토글합니다.\n const toggleMenu = () => {\n setMenuOpen((prev) => !prev);\n // 메뉴가 열릴 때, 이전에 활성화된 기능이 있었다면 초기화합니다.\n if (!isMenuOpen) {\n setActiveFeature(null);\n }\n };\n\n // 실제 화면에 보여줄 메뉴 아이템 목록을 필터링합니다.\n const availableMenuItems = menuItems.filter(\n (item) =>\n item.display && // config에서 display가 true인 항목만 필터링합니다.\n // 'quick-login' 기능은 onLogin prop이 제공된 경우에만 활성화합니다.\n (item.id !== 'quick-login' || (item.id === 'quick-login' && onLogin))\n );\n\n // 활성화된 기능 컴포넌트가 있으면 해당 컴포넌트를 렌더링합니다.\n if (activeFeature) {\n const FeatureComponent = activeFeature;\n\n // 모든 기능 컴포넌트에 공통적으로 onClose 핸들러와 onLogin 콜백을 전달합니다.\n return <FeatureComponent onClose={handleCloseFeature} onLogin={onLogin} />;\n }\n\n // 활성화된 기능이 없으면 플로팅 버튼과 메뉴 패널(isMenuOpen이 true일 경우)을 렌더링합니다.\n return (\n <div className=\"debug-tool-container\">\n <FloatingButton onClick={toggleMenu} />\n {isMenuOpen && (\n <MenuPanel\n menuItems={availableMenuItems}\n onMenuItemClick={handleMenuClick}\n onClose={() => setMenuOpen(false)}\n />\n )}\n </div>\n );\n};\n","export const highlightOnSearchKeyword = (originalText: string, targetString: string) => {\n if (originalText?.includes(targetString)) {\n const replacedText = [];\n\n const splitText = originalText.split(targetString);\n\n for (let i = 0; i < splitText.length; i++) {\n replacedText.push(splitText[i]);\n\n if (i !== splitText.length - 1) {\n replacedText.push(<span className=\"text-primary\">{targetString}</span>);\n }\n }\n\n return replacedText;\n }\n\n return originalText;\n};\n","import React, { useEffect, useState } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { Address } from 'sales-frontend-api/method';\nimport { Button, FormCore, Icon, Modal, ModalBaseProps, RadioGroup, FormField } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport { AddressSearchDetailInputProps, AddressSearchResultProps, FullAddress, Step } from './address.types';\nimport styles from './select-address.module.scss';\nimport { useSearchAddress } from './use-search-address';\n\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\n\nexport const AddressSearchInitialText = () => {\n return (\n <div>\n <p className={cx('guide-title')}>이렇게 검색해 보세요.</p>\n <ul className={cx('guide')}>\n <li>도로명/지명과 건물번호를 함께 입력해주세요</li>\n <li>예) 63로 50, 여의도동 60</li>\n <li>지명은 동/읍/면/리로 입력해주세요</li>\n <li>예) 여의도동, 역삼동</li>\n <li>우편번호 다섯자리를 모두 입력해주세요</li>\n <li>예) 07345, 06232</li>\n </ul>\n </div>\n );\n};\n\nexport const AddressSearchResult = ({\n addressSearchList,\n onChange,\n searchKeyword,\n selectedAddress\n}: AddressSearchResultProps) => {\n const [filterList, setFilterList] = useState<Address[]>([]);\n\n useEffect(() => {\n const filterList =\n addressSearchList.filter(\n (item) => item.address.includes(searchKeyword) || item.oldAddress.includes(searchKeyword)\n ) || [];\n setFilterList(filterList);\n }, [addressSearchList, searchKeyword]);\n\n return (\n <div>\n <p className={cx('guide-title')}>\n 총 <span className=\"text-primary\">{filterList.length}</span>건의 검색결과\n </p>\n {filterList.length > 0 && (\n <RadioGroup\n items={filterList.map((item: Address) => ({\n value: item.address,\n select: item.address === selectedAddress?.address && item.zipCode === selectedAddress?.zipCode,\n label: (\n <div className={cx('search-result')}>\n <div className={cx('zipcode')}> {highlightOnSearchKeyword(item.zipCode, searchKeyword)}</div>\n <div className={cx('divider')}></div>\n <div className={cx('address-info')}>\n <span className={cx('address')}>{highlightOnSearchKeyword(item.address, searchKeyword)}</span>\n <span className={cx('old-address')}>{highlightOnSearchKeyword(item.oldAddress, searchKeyword)}</span>\n </div>\n </div>\n ),\n id: item.address\n }))}\n className={cx('radio-group')}\n name=\"address-search\"\n size=\"medium\"\n defaultValue={''}\n onChange={onChange}\n />\n )}\n {filterList.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchKeyword}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n );\n};\n\nexport const AddressSearchDetailInput = ({\n selectedAddress,\n onDetailChange,\n step,\n detailAddressInput\n}: AddressSearchDetailInputProps) => {\n return (\n <div>\n <div>\n <div> {selectedAddress.zipCode}</div>\n <div>\n |<span>{`${selectedAddress.address}`}</span>\n </div>\n </div>\n <div>\n <FormField.Label id=\"detail\" style={{ width: '90px' }}>\n 상세주소\n </FormField.Label>\n <Input\n placeholder=\"상세주소 입력\"\n onChange={onDetailChange}\n size=\"large\"\n value={detailAddressInput}\n {...(step === 'detail-input' && { autoFocus: true })}\n />\n </div>\n </div>\n );\n};\n\nexport interface AddressSearchModalProps extends ModalBaseProps {\n onClose: () => void;\n isOpen: boolean;\n searchKeyword: string;\n step: Step;\n selectedAddress: Address | null;\n addressList: Address[];\n filterList: Address[];\n onClear: () => void;\n onSearch: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onKeyUp: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n onNext: () => void;\n setSelectedAddress: (address: Address) => void;\n setDetailAddress: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onSelectChange: (value: string) => void;\n}\n\ninterface Props {\n setValue: (address: FullAddress) => void;\n onClose: () => void;\n isOpen: boolean;\n}\n\nexport function AddressComponent({ isOpen, onClose, setValue }: Props) {\n const {\n onAddressSearchClear,\n addressSearchKeyword,\n addressSearchStep,\n onAddressSearchNext,\n nextButtonDisabled,\n detailAddressInput,\n addressSearchList,\n onSearch,\n onKeyUp,\n onSelectChange,\n setDetail,\n search,\n searchInput,\n selectedAddress\n } = useSearchAddress({\n setValue,\n onClose,\n isOpen\n });\n\n return (\n <>\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"주소 검색\" showCloseButton />\n <Modal.Body>\n <InputBox\n clearable\n endElement={<Icon name=\"sub-ui/search\" onClick={search} />}\n onClear={onAddressSearchClear}\n >\n <Input\n {...(addressSearchStep !== 'detail-input' && { autoFocus: true })}\n onChange={onSearch}\n onKeyUp={onKeyUp}\n value={searchInput}\n placeholder=\"지번, 도로명, 건물명, 우편번호 입력\"\n size=\"large\"\n />\n </InputBox>\n {addressSearchStep === 'initial' && <AddressSearchInitialText />}\n {addressSearchStep === 'search-result' && (\n <AddressSearchResult\n onChange={onSelectChange}\n addressSearchList={addressSearchList || []}\n searchKeyword={addressSearchKeyword}\n selectedAddress={selectedAddress}\n />\n )}\n {addressSearchStep === 'detail-input' && selectedAddress && (\n <AddressSearchDetailInput\n selectedAddress={selectedAddress}\n onDetailChange={setDetail}\n step={addressSearchStep}\n detailAddressInput={detailAddressInput}\n />\n )}\n </Modal.Body>\n <Modal.Footer>\n {addressSearchStep !== 'initial' && (\n <Button\n onClick={onAddressSearchNext}\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n disabled={nextButtonDisabled}\n >\n {addressSearchStep === 'search-result' && '다음(1/2)'}\n {addressSearchStep === 'detail-input' && '확인(2/2)'}\n </Button>\n )}\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n </>\n );\n}\n","import React, { useState, useEffect, useCallback } from 'react';\n\nimport { Address, useSearchModalAddressQuery } from 'sales-frontend-api/method';\nimport { useModalState } from 'sales-frontend-design-system';\n\nimport { AddressComponent } from './address-search-modal';\nimport { FullAddress, Step } from './address.types';\ninterface Props {\n setValue: (address: FullAddress) => void;\n onClose: () => void;\n isOpen: boolean;\n}\nexport function useSearchAddress({ setValue, onClose, isOpen }: Props) {\n const [searchKeyword, setSearchKeyword] = useState<string>('');\n const [step, setStep] = useState<Step>('initial');\n const [selectedAddress, setSelectedAddress] = useState<Address | null>(null);\n const [searchInput, setSearchInput] = useState<string>('');\n const [detailAddressInput, setDetailAddressInput] = useState<string>('');\n\n const { data: addressList } = useSearchModalAddressQuery({ searchKeyword });\n const [nextButtonDisabled, setNextButtonDisabled] = useState<boolean>(false);\n const onNext = () => {\n if (step === 'search-result') {\n setStep('detail-input');\n setNextButtonDisabled(true);\n } else {\n setValue({\n address: selectedAddress?.address || '',\n oldAddress: selectedAddress?.oldAddress || '',\n zipCode: selectedAddress?.zipCode || '',\n detail: detailAddressInput || ''\n });\n onClose();\n }\n };\n\n /**\n * 검색어 입력창 onChange\n */\n const onSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n const typeStr = e.target.value;\n setSearchInput(typeStr);\n };\n\n /**\n * 검색\n */\n const search = () => {\n if (searchInput === '') {\n onClear();\n\n return;\n }\n if (searchInput && searchInput.length > 1) {\n setSearchKeyword(searchInput);\n setStep('search-result');\n setSelectedAddress(null);\n setDetailAddressInput('');\n setNextButtonDisabled(true);\n }\n };\n\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 엔터키 입력시 검색\n */\n if (e.key === 'Enter') {\n search();\n }\n };\n\n /**\n * 검색결과 Radio 버튼 선택시, onChange\n */\n const onSelectChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const selectedAddress = e.target.value;\n if (selectedAddress) {\n const adr = addressList?.find((addr) => {\n return addr.address === selectedAddress;\n });\n setSelectedAddress(adr || null);\n setNextButtonDisabled(false);\n }\n };\n\n /**\n * 검색어입력창 초기화\n */\n const onClear = useCallback(() => {\n setSearchKeyword('');\n setSearchInput('');\n setSelectedAddress(null);\n setDetailAddressInput('');\n setStep('initial');\n }, []);\n\n /**\n * 상세주소 저장\n */\n const setDetail = (e: React.ChangeEvent<HTMLInputElement>) => {\n const detail = e.target.value;\n setDetailAddressInput(detail);\n if (detail) {\n setNextButtonDisabled(false);\n } else {\n setNextButtonDisabled(true);\n }\n };\n\n useEffect(() => {\n /**\n * 모달 오픈시, 상태 초기화\n */\n if (isOpen) {\n setSelectedAddress(null);\n setDetailAddressInput('');\n\n setStep('initial');\n setSearchKeyword('');\n }\n }, [isOpen]);\n\n return {\n onAddressSearchClear: onClear,\n onAddressSearchNext: onNext,\n addressSearchKeyword: searchKeyword,\n addressSearchList: addressList,\n addressSearchStep: step,\n selectedAddress,\n addressSearchOnValueChange: onSelectChange,\n nextButtonDisabled,\n detailAddressInput,\n onSearch,\n onKeyUp,\n onSelectChange,\n setDetail,\n search,\n searchInput\n };\n}\n\nexport const useAddressComponent = () => {\n const [fullAddress, setFullAddress] = useState<FullAddress | null>(null);\n\n const { isOpen, closeModal, openModal } = useModalState();\n\n const AddressSearchComponent = () => (\n <AddressComponent isOpen={isOpen} onClose={closeModal} setValue={setFullAddress} />\n );\n\n return {\n fullAddress,\n openModal,\n AddressSearchComponent\n };\n};\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { Icon } from 'sales-frontend-design-system';\n\nimport styles from './job-vehicle-search-modal.module.scss';\nconst cx = classNames.bind(styles);\n\ninterface JobVehicleSearchGradeProps {\n riskGrade?: string | number;\n hospitalizationGrade?: string | number;\n}\n\nexport const JobVehicleSearchGrade = ({ riskGrade, hospitalizationGrade }: JobVehicleSearchGradeProps) => {\n return (\n <div className={cx('grade-section')}>\n <div className={cx('icon-title')}>\n <Icon name=\"illust/grade\" />\n <span className=\"typo-title5 text-body\">등급</span>\n </div>\n <p className=\"typo-body2 text-body_3\">직종, 운전 여부 선택시 자동으로 산정됩니다.</p>\n\n <div className={cx('grade-list')}>\n <div className={cx('grade')}>\n <span>위험등급</span>\n <span className=\"text-primary typo-subtitle3\">{riskGrade || '-'}</span>\n </div>\n <div className={cx('grade')}>\n <span>입원등급</span>\n <span className=\"text-primary typo-subtitle3\">{hospitalizationGrade || '-'}</span>\n </div>\n </div>\n </div>\n );\n};\n","export const JOB_SEARCH_TABS = [\n { value: 'jobName', label: '직종명 검색' },\n { value: 'jobCode', label: '분류로 검색' }\n];\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Button, Radio, Table } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchCategory({ filteredJobs, onJobSelect, searchTerm }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('category-section')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredJobs.length}</span>건의 검색결과\n </p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')} onToggle={() => {}}>\n {filteredJobs.map((job, index) => (\n <Accordion.Item\n id={`item-${job.occupationIndustryCode}-${index}-accordion`}\n key={`item-${job.occupationIndustryCode}-${index}`}\n >\n <Accordion.HeaderDiv>\n <div style={{ flex: 1 }}>\n <Radio.Item size=\"small\" value={job.occupationIndustryCode} onChange={() => onJobSelect(job)}>\n {highlightOnSearchKeyword(job.occupationIndustryName, searchTerm)}({job.occupationIndustryCode})\n </Radio.Item>\n </div>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">\n <Table variant=\"horizontal\">\n <tbody>\n <tr>\n <th>헤더 1</th>\n <td className=\"px-24\">1행 1번째</td>\n <th>헤더 1-2</th>\n <td className=\"px-24 \">1행 2번째</td>\n </tr>\n <tr>\n <th>헤더 2</th>\n <td className=\"pl-24 pr-16\" colSpan={3}>\n <p className=\"d-flex-center-center\">\n 2행 1번째 <span className=\"flex-1 pipe-left\">서브텍스트</span>\n <Button variant=\"neutral\" size=\"xsmall\" appearance=\"outline\">\n 버튼명\n </Button>\n </p>\n </td>\n </tr>\n </tbody>\n </Table>\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n {filteredJobs.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchTerm}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n </>\n );\n}\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Radio } from 'sales-frontend-design-system';\n\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchFavorite({ filteredJobs, onJobSelect }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('popular-jobs')}>\n <p>많이 찾는 직종</p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')}>\n {filteredJobs.map((job, index) => (\n <Accordion.Item\n key={`item-${job.occupationIndustryCode}-${index}`}\n id={`item-${job.occupationIndustryCode}-${index}`}\n className={cx('accordion-item')}\n >\n <Accordion.HeaderDiv className={cx('accordion-header-item')}>\n <Radio.Item\n size=\"small\"\n value={job.occupationIndustryCode}\n onChange={() => onJobSelect(job)}\n className={cx('radio-item')}\n >\n {job.occupationIndustryName}({job.occupationIndustryCode})\n </Radio.Item>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">항목 1 내용</Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n </div>\n </>\n );\n}\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Button, Radio, Table } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchResult({ filteredJobs, onJobSelect, searchTerm }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('popular-jobs')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredJobs.length}</span>건의 검색결과\n </p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')}>\n {filteredJobs.map((job) => (\n <Accordion.Item\n id={`item-${job.occupationIndustryCode}`}\n key={job.occupationIndustryCode}\n // onClick={() => accordion.toggleItem(`item-${job.code}`)}\n >\n <Accordion.HeaderDiv>\n <div style={{ flex: 1 }}>\n <Radio.Item\n id={`item-${job.occupationIndustryCode}`}\n size=\"small\"\n value={job.occupationIndustryCode}\n onChange={() => {\n onJobSelect(job);\n }}\n >\n {highlightOnSearchKeyword(job.occupationIndustryName, searchTerm)}\n </Radio.Item>\n </div>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">\n <Table variant=\"horizontal\">\n <tbody>\n <tr>\n <th>헤더 1</th>\n <td className=\"px-24\">1행 1번째</td>\n <th>헤더 1-2</th>\n <td className=\"px-24 \">1행 2번째</td>\n </tr>\n <tr>\n <th>헤더 2</th>\n <td className=\"pl-24 pr-16\" colSpan={3}>\n <p className=\"d-flex-center-center\">\n 2행 1번째 <span className=\"flex-1 pipe-left\">서브텍스트</span>\n <Button variant=\"neutral\" size=\"xsmall\" appearance=\"outline\">\n 버튼명\n </Button>\n </p>\n </td>\n </tr>\n </tbody>\n </Table>\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n {filteredJobs.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchTerm}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n </>\n );\n}\n","import { Dispatch, SetStateAction } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Tab, FormField, Icon, Select } from 'sales-frontend-design-system';\n\nimport { JOB_SEARCH_TABS } from './constants';\nimport { JobSearchCategory } from './job-search-category';\nimport { JobSearchFavorite } from './job-search-favorite';\nimport styles from './job-search-modal.module.scss';\nimport { JobSearchResult } from './job-search-result';\n\nconst { TextField } = FormField;\ninterface JobSearchProps {\n activeTab: string;\n onTabChange: (value: string) => void;\n searchTerm: string;\n setSearchInput: (value: string) => void;\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchInput: string;\n setSearchTerm: (value: string) => void;\n firstCategory: string;\n setFirstCategory: Dispatch<SetStateAction<string>>;\n secondCategory: string;\n setSecondCategory: Dispatch<SetStateAction<string>>;\n firstCategoryList: OccupationResponseDto[];\n secondCategoryList: OccupationResponseDto[];\n jobList?: OccupationResponseDto[];\n}\nconst cx = classNames.bind(styles);\nconst { Option } = Select;\nexport function JobSearch({\n activeTab,\n onTabChange,\n searchTerm,\n setSearchInput,\n filteredJobs,\n onJobSelect,\n setSearchTerm,\n searchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n firstCategoryList,\n secondCategoryList\n}: JobSearchProps) {\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 엔터키 입력시 검색\n */\n if (e.key === 'Enter') {\n setSearchTerm(searchInput);\n }\n };\n\n return (\n <>\n <Tab.Root\n defaultValue={activeTab}\n onValueChange={onTabChange}\n scroll=\"fixed\"\n size=\"small\"\n variant=\"sub\"\n style={{ gap: 0, overflow: 'visible' }}\n >\n {JOB_SEARCH_TABS.map((tab) => (\n <Tab.Item key={tab.value} value={tab.value}>\n {tab.label}\n </Tab.Item>\n ))}\n </Tab.Root>\n <div>\n {activeTab === 'jobName' && (\n <div className={cx('favorite-jobs-section')}>\n <TextField\n placeholder=\"직종명 검색\"\n value={searchInput}\n onKeyUp={onKeyUp}\n onChange={(e) => setSearchInput(e.target.value)}\n className={styles.searchInput}\n size=\"medium\"\n rootProps={{\n endElement: <Icon name=\"sub-ui/search\" onClick={() => setSearchTerm(searchInput)} />,\n onClear: () => {\n setSearchTerm('');\n setSearchInput('');\n }\n }}\n />\n {!searchTerm && <JobSearchFavorite filteredJobs={filteredJobs} onJobSelect={onJobSelect} />}\n {searchTerm && (\n <JobSearchResult filteredJobs={filteredJobs} onJobSelect={onJobSelect} searchTerm={searchTerm} />\n )}\n </div>\n )}\n {activeTab === 'jobCode' && (\n <div className={cx('select-jobs-section')}>\n <div className={cx('category-section')}>\n <Select\n name=\"first_category\"\n onChange={(value) => {\n setFirstCategory(value);\n setSecondCategory('');\n }}\n placeholder=\"대분류 선택\"\n rootProps={{\n style: {\n // width: '300px'\n }\n }}\n size=\"large\"\n value={firstCategory}\n >\n {firstCategoryList.map((option, index) => (\n <Option key={`${index}-${option.occupationIndustryCode}`} value={option.occupationIndustryCode}>\n {option.occupationIndustryName}\n </Option>\n ))}\n </Select>\n <Select\n name=\"second_category\"\n onChange={setSecondCategory}\n placeholder=\"중분류 선택\"\n rootProps={{\n style: {\n // width: '300px'\n }\n }}\n size=\"large\"\n value={secondCategory}\n disabled={!firstCategory}\n >\n {secondCategoryList.map((option, index) => (\n <Option key={`${index}-${option.occupationIndustryCode}`} value={option.occupationIndustryCode}>\n {option.occupationIndustryName}\n </Option>\n ))}\n </Select>\n </div>\n\n {firstCategory && secondCategory && (\n <JobSearchCategory filteredJobs={filteredJobs} onJobSelect={onJobSelect} searchTerm={searchTerm} />\n )}\n </div>\n )}\n </div>\n </>\n );\n}\n","import { useEffect, useState } from 'react';\n\nimport { OccupationResponseDto, useSearchOccupationQuery } from 'sales-frontend-api/method';\nimport { Button, Modal, useModalState } from 'sales-frontend-design-system';\n\nimport { JOB_SEARCH_TABS } from './constants';\nimport { JobSearch } from './job-search';\n\n/**\n * 초기값(많이 찾는 직종)\n * 회사 사무직 종사자\n * 경영지원 사무직 종사자\n * 주부\n * 주방장 및 조리사\n * 보험설계사(당사)\n */\nconst initData: OccupationResponseDto[] = [\n {\n occupationIndustryCode: '430101',\n occupationIndustryName: '회사 사무직 종사자',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '400301',\n occupationIndustryName: '경영지원 사무직 관리자',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '510201',\n occupationIndustryName: '전업주부',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '442501',\n occupationIndustryName: '주방장 및 조리사(선박 조리사 제외)',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '450303',\n occupationIndustryName: '보험설계사(당사)',\n occupationTypeCode: null,\n historySequence: 0\n }\n];\n\nconst useJobSearch = () => {\n const [activeTab, setActiveTab] = useState<string>(JOB_SEARCH_TABS[0]?.value ?? '');\n const [selectedJob, setSelectedJob] = useState<OccupationResponseDto | null>(null);\n const [searchTerm, setSearchTerm] = useState<string>('');\n const [searchInput, setSearchInput] = useState<string>('');\n const handleJobSelect = (job: OccupationResponseDto) => {\n setSelectedJob(job);\n };\n const [firstCategory, setFirstCategory] = useState<string>('');\n const [secondCategory, setSecondCategory] = useState<string>('');\n const [jobList, setJobList] = useState<OccupationResponseDto[]>(initData);\n const [firstCategoryList, setFirstCategoryList] = useState<OccupationResponseDto[]>([]);\n const [secondCategoryList, setSecondCategoryList] = useState<OccupationResponseDto[]>([]);\n const { data } = useSearchOccupationQuery({\n occupationMajorCategoryCode: firstCategory,\n occupationSearchTypeCode: searchTerm ? '4' : '3',\n occupationSubCategoryCode: secondCategory,\n searchOccupationIndustryName: searchTerm\n });\n const { data: firstCategoryData } = useSearchOccupationQuery({\n occupationMajorCategoryCode: '',\n occupationSearchTypeCode: '1',\n occupationSubCategoryCode: '',\n searchOccupationIndustryName: ''\n });\n const { data: secondCategoryData } = useSearchOccupationQuery({\n occupationMajorCategoryCode: firstCategory,\n occupationSearchTypeCode: '2',\n occupationSubCategoryCode: '',\n searchOccupationIndustryName: ''\n });\n\n useEffect(() => {\n if (data && searchTerm && activeTab === 'jobName') {\n /** 검색어가 있고, 검색된 데이터가 있는 경우 */\n const filteredJobs = data.data.occupationList.filter((job) => job.occupationIndustryName.includes(searchTerm));\n setJobList(filteredJobs);\n } else if (!data && searchTerm && activeTab === 'jobName') {\n /** 검색어가 있고, 검색된 데이터가 없는 경우 */\n setJobList([]);\n } else if (!searchTerm && activeTab === 'jobName') {\n /** 검색어가 없고, 검색된 데이터가 없는 경우 , 많이 찾는 직종 노출 */\n setJobList(initData);\n } else if (activeTab === 'jobCode' && firstCategory && secondCategory) {\n /** 대분류, 중분류 선택된 경우 */\n setJobList(data?.data.occupationList || []);\n }\n }, [searchTerm, data, firstCategory, secondCategory, secondCategoryData, activeTab]);\n\n useEffect(() => {\n console.log('jobList', jobList);\n }, [jobList]);\n\n useEffect(() => {\n if (firstCategoryData) {\n setFirstCategoryList(firstCategoryData.data.occupationList);\n }\n }, [firstCategoryData]);\n\n useEffect(() => {\n if (secondCategoryData) {\n setSecondCategoryList(secondCategoryData.data.occupationList);\n }\n }, [secondCategoryData]);\n\n return {\n activeTab,\n setActiveTab,\n selectedJob,\n searchTerm,\n setSearchTerm,\n handleJobSelect,\n filteredJobs: jobList,\n searchInput,\n setSearchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n secondCategoryList,\n firstCategoryList\n };\n};\n\nexport function useJobSearchModal() {\n const {\n activeTab,\n setActiveTab,\n searchTerm,\n setSearchTerm,\n filteredJobs,\n handleJobSelect,\n selectedJob,\n searchInput,\n setSearchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n firstCategoryList,\n secondCategoryList\n } = useJobSearch();\n\n const { isOpen, openModal, closeModal } = useModalState();\n const onTabChange = (value: string) => {\n setSearchTerm('');\n setFirstCategory('');\n setSecondCategory('');\n setActiveTab(value);\n };\n\n return {\n JobSearchModal: (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"직종 검색\" showCloseButton />\n <Modal.Body raw>\n <JobSearch\n firstCategory={firstCategory}\n firstCategoryList={firstCategoryList}\n secondCategoryList={secondCategoryList}\n setFirstCategory={setFirstCategory}\n secondCategory={secondCategory}\n activeTab={activeTab}\n onTabChange={onTabChange}\n searchTerm={searchTerm}\n setSearchInput={setSearchInput}\n filteredJobs={filteredJobs || []}\n onJobSelect={handleJobSelect}\n searchInput={searchInput}\n setSearchTerm={setSearchTerm}\n setSecondCategory={setSecondCategory}\n />\n </Modal.Body>\n <Modal.Footer>\n <Button variant=\"primary\" size=\"medium\" appearance=\"filled\" width=\"full\" onClick={closeModal}>\n 확인\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n ),\n JobSearchComponent: (\n <JobSearch\n firstCategoryList={firstCategoryList}\n secondCategoryList={secondCategoryList}\n firstCategory={firstCategory}\n setFirstCategory={setFirstCategory}\n secondCategory={secondCategory}\n setSecondCategory={setSecondCategory}\n activeTab={activeTab}\n onTabChange={onTabChange}\n searchTerm={searchTerm}\n setSearchInput={setSearchInput}\n filteredJobs={filteredJobs || []}\n onJobSelect={handleJobSelect}\n searchInput={searchInput}\n setSearchTerm={setSearchTerm}\n />\n ),\n isJobSearchOpen: isOpen,\n openJobSearchModal: openModal,\n closeJobSearchModal: closeModal,\n selectedJob\n };\n}\n","import classNames from 'classnames/bind';\nimport { VehicleTypeResponseDto } from 'sales-frontend-api/method';\nimport { Radio } from 'sales-frontend-design-system';\n\nimport styles from './vehicle-search-modal.module.scss';\nconst cx = classNames.bind(styles);\ninterface VehicleSearchProps {\n vehicles: VehicleTypeResponseDto[];\n onVehicleSelect: (vehicle: VehicleTypeResponseDto) => void;\n}\n\nexport function VehicleSearch({ vehicles, onVehicleSelect }: VehicleSearchProps) {\n return (\n <div className={cx('vehicle-search-section')}>\n <p>운전 차종</p>\n <Radio.Root name=\"vehicle-selection\" size=\"small\" className={cx('vehicle-radio-root')}>\n {vehicles.map((vehicle, index) => (\n <Radio.Item\n key={`item-${vehicle.integrationCodeValue}-${index}`}\n id={`item-${vehicle.integrationCodeValue}`}\n size=\"small\"\n value={vehicle.integrationCodeValue || ''}\n onChange={(e) => {\n const { value } = e.target;\n console.log(e.target.value);\n const selected = vehicles.find((v) => v.integrationCodeValue === value);\n if (selected) {\n onVehicleSelect(selected);\n }\n }}\n className={cx('item')}\n >\n {vehicle.integrationCodeValueName}({vehicle.integrationCodeValue})\n </Radio.Item>\n ))}\n </Radio.Root>\n </div>\n );\n}\n","import { useState } from 'react';\n\nimport { useSearchVehicleQuery, VehicleTypeResponseDto } from 'sales-frontend-api/method';\n\nimport { VehicleSearch } from './vehicle-search';\n\nexport const useVehicleSearch = () => {\n const [selectedVehicle, setSelectedVehicle] = useState<VehicleTypeResponseDto>();\n const { data } = useSearchVehicleQuery();\n\n // useSearchVehicleQuery\n return {\n VehicleSearchComponent: (\n <VehicleSearch vehicles={data?.data?.vehicleTypeList || []} onVehicleSelect={setSelectedVehicle} />\n ),\n selectedVehicle,\n setSelectedVehicle,\n vehicleList: data\n };\n};\n","import { useEffect, useState } from 'react';\n\nimport { useJobSearchModal } from '../job-search-modal/use-job-search';\nimport { useVehicleSearch } from '../vehicle-search-modal/use-vehicle-search';\n\nexport const useJobVehicleSearch = () => {\n const [rightPanelView, setRightPanelView] = useState('jobSearch'); // 'jobSearch' or 'vehicleSelection'\n const [riskGrade, setRiskGrade] = useState<string>('');\n const [hospitalizationGrade, setHospitalizationGrade] = useState<string>('');\n const { selectedJob, JobSearchComponent } = useJobSearchModal();\n const { selectedVehicle, VehicleSearchComponent } = useVehicleSearch();\n\n useEffect(() => {\n if (selectedJob && selectedVehicle) {\n /**\n * 직종,차종이 모두 선택된 경우 등급 계산 API 호출\n * @todo\n */\n setRiskGrade('일반(비위험직)(0)');\n setHospitalizationGrade('일반입원(비위험직)(0)');\n }\n }, [selectedJob, selectedVehicle]);\n\n return {\n selectedVehicle,\n rightPanelView,\n setRightPanelView,\n selectedJob,\n JobSearch: JobSearchComponent,\n VehicleSearch: VehicleSearchComponent,\n riskGrade,\n hospitalizationGrade\n };\n};\n","import classNames from 'classnames/bind';\nimport { Icon, ModalUtils, useModalState } from 'sales-frontend-design-system';\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { JobVehicleSearchGrade } from './job-vehicle-search-grade';\nconst cx = classNames.bind(styles);\nimport styles from './job-vehicle-search-modal.module.scss';\nimport { useJobVehicleSearch } from './use-job-vehicle-search';\n\nexport function useJobVehicleSearchModal() {\n const {\n selectedVehicle,\n rightPanelView,\n setRightPanelView,\n selectedJob,\n JobSearch,\n VehicleSearch,\n riskGrade,\n hospitalizationGrade\n } = useJobVehicleSearch();\n const { isOpen, openModal, closeModal } = useModalState({ initialValue: true });\n\n const validate = () => {\n console.log({ selectedJob, selectedVehicle });\n if (!selectedJob && !selectedVehicle) {\n return ModalUtils.alert(\n '직종과 운전 여부·차종을 모두 선택해야 등급 산정이 가능합니다.',\n '직종과 운전 여부·차종을 선택해주세요',\n {\n modalSize: 'small'\n }\n );\n }\n if (!selectedJob) {\n return ModalUtils.alert('직종을 선택해야 등급 산정이 가능합니다.', '직종을 선택해주세요', {\n modalSize: 'small'\n });\n }\n if (!selectedVehicle) {\n return ModalUtils.alert('운전 여부·차종을 선택해야 등급 산정이 가능합니다.', '운전 여부·차종을 선택해주세요', {\n modalSize: 'small'\n });\n }\n closeModal();\n };\n\n return {\n selectedJob,\n selectedVehicle,\n riskGrade,\n hospitalizationGrade,\n openJobVehicleModal: openModal,\n JobVehicleSearchModalComponent: (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"직종·운전차종 검색\" showCloseButton />\n <Modal.Body className={cx('job-vehicle-search-modal')} raw>\n <>\n <div className={cx('left-panel')}>\n <div className={cx('card-section')}>\n <div\n className={cx('card-menu', { 'card-selected': rightPanelView === 'jobSearch' })}\n onClick={() => setRightPanelView('jobSearch')}\n >\n <div className={cx('card-title')}>\n <Icon name=\"illust/job\" className={cx('card-icon')} />\n <span className={cx('card-text', 'typo-title5', 'text-body')}>직종</span>\n <Icon name=\"sub-ui/arrow/right\" />\n </div>\n <div className=\"typo-body2 text-body_2\">\n {selectedJob ? selectedJob.occupationIndustryName : '미선택'}\n </div>\n </div>\n <div\n className={cx('card-menu', { 'card-selected': rightPanelView === 'vehicleSelection' })}\n onClick={() => setRightPanelView('vehicleSelection')}\n >\n <div className={cx('card-title')}>\n <Icon name=\"illust/vehicle\" className={cx('card-icon')} />\n <span className={cx('card-text', 'typo-title5', 'text-body')}>운전 여부·차종</span>\n <Icon name=\"sub-ui/arrow/right\" />\n </div>\n <div className=\"typo-body2 text-body_2\">\n {selectedVehicle?.integrationCodeValueName}\n {selectedVehicle?.integrationCodeValue || '미선택'}\n </div>\n </div>\n </div>\n <JobVehicleSearchGrade riskGrade={riskGrade} hospitalizationGrade={hospitalizationGrade} />\n </div>\n <div className={cx('right-panel')}>{rightPanelView === 'jobSearch' ? JobSearch : VehicleSearch}</div>\n </>\n </Modal.Body>\n <Modal.Footer style={{ marginTop: 0 }}>\n <Button variant=\"primary\" size=\"medium\" appearance=\"filled\" width=\"full\" onClick={validate}>\n 확인\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n )\n };\n}\n"],"names":["cx","styles","safeStringify","menuItems","defaultMenuItems","filterList","selectedAddress"],"mappings":"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","x_google_ignoreList":[6]}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/form/form-checkbox-button.tsx","../src/form/form-checkbox.tsx","../src/form/form-date-picker.tsx","../src/form/form-date-range-picker.tsx","../src/modal/pre-standard/job-search-modal/constants.ts","../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/bind.js","../src/modal/common.tsx","../src/modal/pre-standard/job-search-modal/job-search-category.tsx","../src/modal/pre-standard/job-search-modal/job-search-favorite.tsx","../src/modal/pre-standard/job-search-modal/job-search-result.tsx","../src/modal/pre-standard/job-search-modal/job-search.tsx","../src/modal/pre-standard/job-search-modal/use-job-search.tsx","../src/form/form-search-job-field.tsx","../src/form/form-segment.tsx","../src/form/form-select.tsx","../src/form/form-text-field.tsx","../src/step-indicator/step-indicator.tsx","../src/camera/attachment.tsx","../src/camera/resize.ts","../src/camera/use-camera.tsx","../src/canvas-paint/use-canvas-paint.ts","../src/canvas-paint/dummyData.ts","../src/modal/standard/address-search/address-search-modal.tsx","../src/modal/standard/address-search/use-search-address.tsx","../src/modal/pre-standard/job-vehicle-search-modal/job-vehicle-search-grade.tsx","../src/modal/pre-standard/vehicle-search-modal/vehicle-search.tsx","../src/modal/pre-standard/vehicle-search-modal/use-vehicle-search.tsx","../src/modal/pre-standard/job-vehicle-search-modal/use-job-vehicle-search.tsx","../src/modal/pre-standard/job-vehicle-search-modal/job-vehicle-search.tsx","../src/modal/pre-standard/job-search-modal/job-search-modal.tsx"],"sourcesContent":["import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { CheckboxButton, type CheckboxButtonProps } from 'sales-frontend-design-system';\n\nexport const FormCheckboxButton = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n children,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & Omit<CheckboxButtonProps, 'id'>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <CheckboxButton\n {...props}\n {...field}\n id={field.name}\n checked={field.value ?? false}\n error={fieldState.invalid}\n onChange={(checked) => {\n field.onChange(checked);\n props.onChange?.(checked);\n }}\n >\n {children}\n </CheckboxButton>\n );\n};\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { Checkbox, CheckboxProps } from 'sales-frontend-design-system';\n\nexport const FormCheckbox = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n children,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & Omit<CheckboxProps, 'id'>) => {\n const { field } = useController({ name, control, disabled });\n\n return (\n <Checkbox {...props} {...field} id={field.name} checked={field.value} onChange={field.onChange}>\n {children}\n </Checkbox>\n );\n};\n","import React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { DatePicker, type DatePickerSingleHtmlProps } from 'sales-frontend-design-system';\n\nexport const FormDatePicker = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n defaultValue,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled' | 'defaultValue'> &\n DatePickerSingleHtmlProps) => {\n const { field, fieldState } = useController({ name, control, disabled, defaultValue });\n const [initialDate, setInitialDate] = React.useState<Date>();\n\n React.useEffect(() => {\n if (field.value) {\n setInitialDate(field.value);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [defaultValue]);\n\n return (\n <DatePicker\n tabIndex={0}\n {...{\n ...props,\n ...field,\n id: field.name,\n defaultValue: initialDate,\n error: fieldState.invalid,\n onValueChange: field.onChange\n }}\n />\n );\n};\n","import React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { DateRangePicker, type PeriodDate, type DatePickerRangeHtmlProps } from 'sales-frontend-design-system';\n\nexport const FormDateRangePicker = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n defaultValue,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled' | 'defaultValue'> &\n DatePickerRangeHtmlProps) => {\n const { field, fieldState } = useController({ name, control, disabled, defaultValue });\n const [initialDate, setInitialDate] = React.useState<PeriodDate>();\n\n React.useEffect(() => {\n if (field.value) {\n setInitialDate(field.value);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [defaultValue]);\n\n return (\n <DateRangePicker\n tabIndex={0}\n {...{\n ...props,\n ...field,\n id: field.name,\n defaultValue: initialDate,\n error: fieldState.invalid,\n onValueChange: (selected) => {\n if (field.value !== selected) {\n field.onChange(selected);\n }\n }\n }}\n />\n );\n};\n","export const JOB_SEARCH_TABS = [\n { value: 'jobName', label: '직종명 검색' },\n { value: 'jobCode', label: '분류로 검색' }\n];\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue.call(this, arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn this && this[arg] || arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(this, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, this && this[key] || key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","export const highlightOnSearchKeyword = (originalText: string, targetString: string) => {\n if (originalText?.includes(targetString)) {\n const replacedText = [];\n\n const splitText = originalText.split(targetString);\n\n for (let i = 0; i < splitText.length; i++) {\n replacedText.push(splitText[i]);\n\n if (i !== splitText.length - 1) {\n replacedText.push(<span className=\"text-primary\">{targetString}</span>);\n }\n }\n\n return replacedText;\n }\n\n return originalText;\n};\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Button, Radio, Table } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchCategory({ filteredJobs, onJobSelect, searchTerm }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('category-section')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredJobs.length}</span>건의 검색결과\n </p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')} onToggle={() => {}}>\n {filteredJobs.map((job, index) => (\n <Accordion.Item\n id={`item-${job.occupationIndustryCode}-${index}-accordion`}\n key={`item-${job.occupationIndustryCode}-${index}`}\n >\n <Accordion.HeaderDiv>\n <div style={{ flex: 1 }}>\n <Radio.Item size=\"small\" value={job.occupationIndustryCode} onChange={() => onJobSelect(job)}>\n {highlightOnSearchKeyword(job.occupationIndustryName, searchTerm)}({job.occupationIndustryCode})\n </Radio.Item>\n </div>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">\n <Table variant=\"horizontal\">\n <tbody>\n <tr>\n <th>헤더 1</th>\n <td className=\"px-24\">1행 1번째</td>\n <th>헤더 1-2</th>\n <td className=\"px-24 \">1행 2번째</td>\n </tr>\n <tr>\n <th>헤더 2</th>\n <td className=\"pl-24 pr-16\" colSpan={3}>\n <p className=\"d-flex-center-center\">\n 2행 1번째 <span className=\"flex-1 pipe-left\">서브텍스트</span>\n <Button variant=\"neutral\" size=\"xsmall\" appearance=\"outline\">\n 버튼명\n </Button>\n </p>\n </td>\n </tr>\n </tbody>\n </Table>\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n {filteredJobs.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchTerm}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n </>\n );\n}\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Radio } from 'sales-frontend-design-system';\n\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchFavorite({ filteredJobs, onJobSelect }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('popular-jobs')}>\n <p>많이 찾는 직종</p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')}>\n {filteredJobs.map((job, index) => (\n <Accordion.Item\n key={`item-${job.occupationIndustryCode}-${index}`}\n id={`item-${job.occupationIndustryCode}-${index}`}\n className={cx('accordion-item')}\n >\n <Accordion.HeaderDiv className={cx('accordion-header-item')}>\n <Radio.Item\n size=\"small\"\n value={job.occupationIndustryCode}\n onChange={() => onJobSelect(job)}\n className={cx('radio-item')}\n >\n {job.occupationIndustryName}({job.occupationIndustryCode})\n </Radio.Item>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">항목 1 내용</Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n </div>\n </>\n );\n}\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Button, Radio, Table } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchResult({ filteredJobs, onJobSelect, searchTerm }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('popular-jobs')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredJobs.length}</span>건의 검색결과\n </p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')}>\n {filteredJobs.map((job) => (\n <Accordion.Item\n id={`item-${job.occupationIndustryCode}`}\n key={job.occupationIndustryCode}\n // onClick={() => accordion.toggleItem(`item-${job.code}`)}\n >\n <Accordion.HeaderDiv>\n <div style={{ flex: 1 }}>\n <Radio.Item\n id={`item-${job.occupationIndustryCode}`}\n size=\"small\"\n value={job.occupationIndustryCode}\n onChange={() => {\n onJobSelect(job);\n }}\n >\n {highlightOnSearchKeyword(job.occupationIndustryName, searchTerm)}\n </Radio.Item>\n </div>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">\n <Table variant=\"horizontal\">\n <tbody>\n <tr>\n <th>헤더 1</th>\n <td className=\"px-24\">1행 1번째</td>\n <th>헤더 1-2</th>\n <td className=\"px-24 \">1행 2번째</td>\n </tr>\n <tr>\n <th>헤더 2</th>\n <td className=\"pl-24 pr-16\" colSpan={3}>\n <p className=\"d-flex-center-center\">\n 2행 1번째 <span className=\"flex-1 pipe-left\">서브텍스트</span>\n <Button variant=\"neutral\" size=\"xsmall\" appearance=\"outline\">\n 버튼명\n </Button>\n </p>\n </td>\n </tr>\n </tbody>\n </Table>\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n {filteredJobs.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchTerm}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n </>\n );\n}\n","import { Dispatch, SetStateAction } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Tab, FormField, Icon, Select } from 'sales-frontend-design-system';\n\nimport { JOB_SEARCH_TABS } from './constants';\nimport { JobSearchCategory } from './job-search-category';\nimport { JobSearchFavorite } from './job-search-favorite';\nimport styles from './job-search-modal.module.scss';\nimport { JobSearchResult } from './job-search-result';\n\nconst { TextField } = FormField;\ninterface JobSearchProps {\n activeTab: string;\n onTabChange: (value: string) => void;\n searchTerm: string;\n setSearchInput: (value: string) => void;\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchInput: string;\n setSearchTerm: (value: string) => void;\n firstCategory: string;\n setFirstCategory: Dispatch<SetStateAction<string>>;\n secondCategory: string;\n setSecondCategory: Dispatch<SetStateAction<string>>;\n firstCategoryList: OccupationResponseDto[];\n secondCategoryList: OccupationResponseDto[];\n jobList?: OccupationResponseDto[];\n}\nconst cx = classNames.bind(styles);\nconst { Option } = Select;\nexport function JobSearch({\n activeTab,\n onTabChange,\n searchTerm,\n setSearchInput,\n filteredJobs,\n onJobSelect,\n setSearchTerm,\n searchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n firstCategoryList,\n secondCategoryList\n}: JobSearchProps) {\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 엔터키 입력시 검색\n */\n if (e.key === 'Enter') {\n setSearchTerm(searchInput);\n }\n };\n\n return (\n <>\n <Tab.Root\n defaultValue={activeTab}\n onValueChange={onTabChange}\n scroll=\"fixed\"\n size=\"small\"\n variant=\"sub\"\n style={{ gap: 0, overflow: 'visible' }}\n >\n {JOB_SEARCH_TABS.map((tab) => (\n <Tab.Item key={tab.value} value={tab.value}>\n {tab.label}\n </Tab.Item>\n ))}\n </Tab.Root>\n <div>\n {activeTab === 'jobName' && (\n <div className={cx('favorite-jobs-section')}>\n <TextField\n placeholder=\"직종명 검색\"\n value={searchInput}\n onKeyUp={onKeyUp}\n onChange={(e) => setSearchInput(e.target.value)}\n className={styles.searchInput}\n size=\"medium\"\n rootProps={{\n endElement: <Icon name=\"sub-ui/search\" onClick={() => setSearchTerm(searchInput)} />,\n onClear: () => {\n setSearchTerm('');\n setSearchInput('');\n }\n }}\n />\n {!searchTerm && <JobSearchFavorite filteredJobs={filteredJobs} onJobSelect={onJobSelect} />}\n {searchTerm && (\n <JobSearchResult filteredJobs={filteredJobs} onJobSelect={onJobSelect} searchTerm={searchTerm} />\n )}\n </div>\n )}\n {activeTab === 'jobCode' && (\n <div className={cx('select-jobs-section')}>\n <div className={cx('category-section')}>\n <Select\n name=\"first_category\"\n onChange={(value) => {\n setFirstCategory(value);\n setSecondCategory('');\n }}\n placeholder=\"대분류 선택\"\n rootProps={{\n style: {\n // width: '300px'\n }\n }}\n size=\"large\"\n value={firstCategory}\n >\n {firstCategoryList.map((option, index) => (\n <Option key={`${index}-${option.occupationIndustryCode}`} value={option.occupationIndustryCode}>\n {option.occupationIndustryName}\n </Option>\n ))}\n </Select>\n <Select\n name=\"second_category\"\n onChange={setSecondCategory}\n placeholder=\"중분류 선택\"\n rootProps={{\n style: {\n // width: '300px'\n }\n }}\n size=\"large\"\n value={secondCategory}\n disabled={!firstCategory}\n >\n {secondCategoryList.map((option, index) => (\n <Option key={`${index}-${option.occupationIndustryCode}`} value={option.occupationIndustryCode}>\n {option.occupationIndustryName}\n </Option>\n ))}\n </Select>\n </div>\n\n {firstCategory && secondCategory && (\n <JobSearchCategory filteredJobs={filteredJobs} onJobSelect={onJobSelect} searchTerm={searchTerm} />\n )}\n </div>\n )}\n </div>\n </>\n );\n}\n","import { useEffect, useState } from 'react';\n\nimport { OccupationResponseDto, useSearchOccupationQuery } from 'sales-frontend-api/method';\nimport { Button, Modal, useModalState } from 'sales-frontend-design-system';\n\nimport { JOB_SEARCH_TABS } from './constants';\nimport { JobSearch } from './job-search';\n\n/**\n * 초기값(많이 찾는 직종)\n * 회사 사무직 종사자\n * 경영지원 사무직 종사자\n * 주부\n * 주방장 및 조리사\n * 보험설계사(당사)\n */\nconst initData: OccupationResponseDto[] = [\n {\n occupationIndustryCode: '430101',\n occupationIndustryName: '회사 사무직 종사자',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '400301',\n occupationIndustryName: '경영지원 사무직 관리자',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '510201',\n occupationIndustryName: '전업주부',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '442501',\n occupationIndustryName: '주방장 및 조리사(선박 조리사 제외)',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '450303',\n occupationIndustryName: '보험설계사(당사)',\n occupationTypeCode: null,\n historySequence: 0\n }\n];\n\nconst useJobSearch = () => {\n const [activeTab, setActiveTab] = useState<string>(JOB_SEARCH_TABS[0]?.value ?? '');\n const [selectedJob, setSelectedJob] = useState<OccupationResponseDto | null>(null);\n const [searchTerm, setSearchTerm] = useState<string>('');\n const [searchInput, setSearchInput] = useState<string>('');\n const handleJobSelect = (job: OccupationResponseDto) => {\n setSelectedJob(job);\n };\n const [firstCategory, setFirstCategory] = useState<string>('');\n const [secondCategory, setSecondCategory] = useState<string>('');\n const [jobList, setJobList] = useState<OccupationResponseDto[]>(initData);\n const [firstCategoryList, setFirstCategoryList] = useState<OccupationResponseDto[]>([]);\n const [secondCategoryList, setSecondCategoryList] = useState<OccupationResponseDto[]>([]);\n const { data } = useSearchOccupationQuery({\n occupationMajorCategoryCode: firstCategory,\n occupationSearchTypeCode: searchTerm ? '4' : '3',\n occupationSubCategoryCode: secondCategory,\n searchOccupationIndustryName: searchTerm\n });\n const { data: firstCategoryData } = useSearchOccupationQuery({\n occupationMajorCategoryCode: '',\n occupationSearchTypeCode: '1',\n occupationSubCategoryCode: '',\n searchOccupationIndustryName: ''\n });\n const { data: secondCategoryData } = useSearchOccupationQuery({\n occupationMajorCategoryCode: firstCategory,\n occupationSearchTypeCode: '2',\n occupationSubCategoryCode: '',\n searchOccupationIndustryName: ''\n });\n\n useEffect(() => {\n if (data && searchTerm && activeTab === 'jobName') {\n /** 검색어가 있고, 검색된 데이터가 있는 경우 */\n const filteredJobs = data.data.occupationList.filter((job) => job.occupationIndustryName.includes(searchTerm));\n setJobList(filteredJobs);\n } else if (!data && searchTerm && activeTab === 'jobName') {\n /** 검색어가 있고, 검색된 데이터가 없는 경우 */\n setJobList([]);\n } else if (!searchTerm && activeTab === 'jobName') {\n /** 검색어가 없고, 검색된 데이터가 없는 경우 , 많이 찾는 직종 노출 */\n setJobList(initData);\n } else if (activeTab === 'jobCode' && firstCategory && secondCategory) {\n /** 대분류, 중분류 선택된 경우 */\n setJobList(data?.data.occupationList || []);\n }\n }, [searchTerm, data, firstCategory, secondCategory, secondCategoryData, activeTab]);\n\n useEffect(() => {\n console.log('jobList', jobList);\n }, [jobList]);\n\n useEffect(() => {\n if (firstCategoryData) {\n setFirstCategoryList(firstCategoryData.data.occupationList);\n }\n }, [firstCategoryData]);\n\n useEffect(() => {\n if (secondCategoryData) {\n setSecondCategoryList(secondCategoryData.data.occupationList);\n }\n }, [secondCategoryData]);\n\n return {\n activeTab,\n setActiveTab,\n selectedJob,\n searchTerm,\n setSearchTerm,\n handleJobSelect,\n filteredJobs: jobList,\n searchInput,\n setSearchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n secondCategoryList,\n firstCategoryList\n };\n};\n\nexport function useJobSearchModal() {\n const {\n activeTab,\n setActiveTab,\n searchTerm,\n setSearchTerm,\n filteredJobs,\n handleJobSelect,\n selectedJob,\n searchInput,\n setSearchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n firstCategoryList,\n secondCategoryList\n } = useJobSearch();\n\n const { isOpen, openModal, closeModal } = useModalState();\n const onTabChange = (value: string) => {\n setSearchTerm('');\n setFirstCategory('');\n setSecondCategory('');\n setActiveTab(value);\n };\n\n return {\n JobSearchModal: (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"직종 검색\" showCloseButton />\n <Modal.Body raw>\n <JobSearch\n firstCategory={firstCategory}\n firstCategoryList={firstCategoryList}\n secondCategoryList={secondCategoryList}\n setFirstCategory={setFirstCategory}\n secondCategory={secondCategory}\n activeTab={activeTab}\n onTabChange={onTabChange}\n searchTerm={searchTerm}\n setSearchInput={setSearchInput}\n filteredJobs={filteredJobs || []}\n onJobSelect={handleJobSelect}\n searchInput={searchInput}\n setSearchTerm={setSearchTerm}\n setSecondCategory={setSecondCategory}\n />\n </Modal.Body>\n <Modal.Footer>\n <Button variant=\"primary\" size=\"medium\" appearance=\"filled\" width=\"full\" onClick={closeModal}>\n 확인\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n ),\n JobSearchComponent: (\n <JobSearch\n firstCategoryList={firstCategoryList}\n secondCategoryList={secondCategoryList}\n firstCategory={firstCategory}\n setFirstCategory={setFirstCategory}\n secondCategory={secondCategory}\n setSecondCategory={setSecondCategory}\n activeTab={activeTab}\n onTabChange={onTabChange}\n searchTerm={searchTerm}\n setSearchInput={setSearchInput}\n filteredJobs={filteredJobs || []}\n onJobSelect={handleJobSelect}\n searchInput={searchInput}\n setSearchTerm={setSearchTerm}\n />\n ),\n isJobSearchOpen: isOpen,\n openJobSearchModal: openModal,\n closeJobSearchModal: closeModal,\n selectedJob\n };\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\n\nimport { useEffect, useState } from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { FormField, Icon } from 'sales-frontend-design-system';\n\nimport { useJobSearchModal } from '../modal/pre-standard/job-search-modal/use-job-search';\n\nexport const FormSearchJobField = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n rootProps,\n error,\n size = 'medium',\n placeholder = '직종 검색',\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> &\n FormField.TextFieldProps & { onValueChange?: (value?: OccupationResponseDto) => void }) => {\n const [selected, setSelected] = useState<OccupationResponseDto>();\n\n const { field, fieldState } = useController({ name, control, disabled });\n const { JobSearchModal, openJobSearchModal, selectedJob } = useJobSearchModal();\n\n useEffect(() => {\n if (selectedJob) {\n setSelected(selectedJob);\n field.onChange(selectedJob.occupationIndustryCode);\n props.onValueChange?.(selectedJob);\n }\n }, [selectedJob]);\n\n return (\n <>\n <FormField.TextField\n {...props}\n {...field}\n id={field.name}\n error={fieldState.invalid || error}\n value={selected?.occupationIndustryName ?? ''}\n rootProps={{\n ...rootProps,\n endElement: <Icon name=\"sub-ui/search\" />\n }}\n readOnly\n size={size}\n placeholder={placeholder}\n style={{ background: '#fff', cursor: 'pointer' }}\n autoComplete=\"off\"\n onClick={openJobSearchModal}\n />\n {JobSearchModal}\n </>\n );\n};\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { SegmentGroup, type SegmentGroupHtmlProps } from 'sales-frontend-design-system';\n\ninterface FormSegmentGroupProps<TFormValues extends FieldValues>\n extends Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'>,\n Omit<SegmentGroupHtmlProps, 'defaultValue'> {\n disabledItems?: string[];\n}\n\nexport const FormSegmentGroup = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n disabledItems,\n items,\n ...props\n}: FormSegmentGroupProps<TFormValues>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n const itemList = items.map((item) => {\n return {\n ...item,\n disabled: disabledItems?.includes(item.value)\n };\n });\n\n return (\n <SegmentGroup\n {...props}\n tabIndex={0}\n id={field.name}\n ref={field.ref}\n defaultValue={field.value}\n disabled={field.disabled}\n error={fieldState.invalid}\n onBlur={field.onBlur}\n items={itemList}\n onValueChange={(selected) => {\n field.onChange(selected);\n props.onValueChange?.(selected);\n }}\n />\n );\n};\n","import React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { OptionProps, Select, SelectProps } from 'sales-frontend-design-system';\n\n/**\n * 영업지원 시스템 셀렉트필드\n * @param param0\n * @returns\n */\n\ntype FormSelectProps<TFormValues extends FieldValues> = Pick<\n UseControllerProps<TFormValues>,\n 'name' | 'control' | 'disabled'\n> &\n Omit<SelectProps, 'defaultValue'>;\n\nexport const FormSelect = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n error,\n children,\n ...props\n}: FormSelectProps<TFormValues>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <Select\n {...props}\n id={field.name}\n disabled={field.disabled}\n error={fieldState.invalid || error}\n onBlur={field.onBlur}\n value={field.value}\n onChange={(selected) => {\n field.onChange(selected);\n }}\n >\n {children}\n </Select>\n );\n};\n\nconst FormSelectOption = ({ children, value, ...rest }: OptionProps) => {\n return (\n <Select.Option value={value} {...rest}>\n {children}\n </Select.Option>\n );\n};\n\ninterface IFormSelectGroupProps<TFormValues extends FieldValues> extends FormSelectProps<TFormValues> {\n options: { label: string; value: string }[];\n optionsProps?: Omit<OptionProps, 'children' | 'value'>;\n}\n\nconst FormSelectGroup = <TFormValues extends FieldValues>({\n options,\n optionsProps,\n ...props\n}: Omit<IFormSelectGroupProps<TFormValues>, 'children'>) => {\n return (\n <FormSelect {...props}>\n {options.map((option) => (\n <FormSelectOption key={option.value} value={option.value} {...optionsProps}>\n {option.label}\n </FormSelectOption>\n ))}\n </FormSelect>\n );\n};\n\nFormSelect.Option = FormSelectOption;\nFormSelect.Group = FormSelectGroup;\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { FormField } from 'sales-frontend-design-system';\n\nexport const FormTextField = <TFormValues extends FieldValues>({\n name,\n control,\n size = 'medium',\n disabled,\n error,\n onBlur,\n onChange,\n rootProps,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & FormField.TextFieldProps) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <FormField.TextField\n {...props}\n id={field.name}\n size={size}\n autoComplete=\"off\"\n name={field.name}\n value={field.value ?? ''}\n disabled={field.disabled}\n error={fieldState.invalid || error}\n onChange={(e) => {\n field.onChange(e);\n onChange?.(e);\n }}\n onBlur={(e) => {\n field.onBlur();\n onBlur?.(e);\n }}\n rootProps={{\n ...rootProps,\n onClear: () => {\n field.onChange('');\n rootProps?.onClear?.();\n }\n }}\n />\n );\n};\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { ModalUtils } from 'sales-frontend-design-system';\n\nimport styles from './step-indicator.module.scss';\n\nimport type { StepIndicatorProps, StepItem } from './step-indicator.types';\n\nconst cx = classNames.bind(styles);\n\nexport const StepIndicator = ({\n items,\n onClickItem,\n currentIndex = 0,\n defaultValue = '',\n dotCount = 3,\n isLoading\n}: StepIndicatorProps) => {\n const [steps, setSteps] = React.useState<StepItem[]>(\n Array.from({ length: 10 }).map(() => ({ label: '-', value: '' }))\n );\n const [current, setCurrent] = React.useState(currentIndex);\n\n React.useEffect(() => {\n if (items.length > 0) {\n setSteps(items);\n items.map((item, idx) => {\n if (item.value === defaultValue) {\n setCurrent(idx);\n }\n });\n }\n }, [items, defaultValue]);\n\n const handleClickStep = (item: StepItem) => {\n const index = steps.findIndex((step) => step.value === item.value);\n\n if (index === -1) {\n console.error('error not found index');\n\n return;\n }\n\n if (steps[index < 1 ? index : index - 1]?.isCompleted) {\n onClickItem?.(item);\n } else {\n ModalUtils.alert('이전 단계를 모두 완료해야 선택한 단계로\\n이동할 수 있습니다.', '이전 단계를 먼저 진행해주세요');\n }\n };\n\n return (\n <div className={cx('stepper-layout', { loading: isLoading })}>\n <div className={cx('stepper')}>\n {steps.map((item, idx) => (\n <React.Fragment key={`num-${idx}`}>\n <div\n className={cx(\n 'circle',\n { completed: item.isCompleted ?? false },\n { active: defaultValue === item.value || current === idx }\n )}\n onClick={() => handleClickStep?.(item)}\n >\n {item.isCompleted ? <span className={cx('completed-icon')} /> : idx + 1}\n </div>\n {/* 다음 단계가 있을 때만 dot 렌더링 */}\n {idx < steps.length - 1 &&\n Array.from({ length: dotCount }).map((_, dotIdx) => (\n <span key={`dot-${idx}-${dotIdx}`} className={cx('dot')} />\n ))}\n </React.Fragment>\n ))}\n </div>\n\n <ul className={cx('step-labels')}>\n {steps.map((item, idx) => (\n <li\n key={`label-${idx}`}\n className={cx(\n { completed: steps[idx < 1 ? idx : idx - 1]?.isCompleted ?? false },\n { active: defaultValue === item.value || current === idx }\n )}\n onClick={() => handleClickStep?.(item)}\n >\n <span className=\"text-ellipsis\">{item.label ?? item.value}</span>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n","import classNames from 'classnames/bind';\nimport { Icon } from 'sales-frontend-design-system';\n\nimport styles from './camera.module.scss';\nimport { AttachedPhoto, cameraItemType } from './camera.types';\n\nconst cx = classNames.bind(styles);\n\nexport interface AttachmentProps {\n photos: AttachedPhoto[];\n onAddPhoto: () => void;\n onRemovePhoto: (id: string) => void;\n /* false이면 사진이 1장 이상일 때만 표시 */\n show: boolean;\n type?: cameraItemType;\n buttonText?: string;\n}\n\nexport function Attachment({\n photos,\n onAddPhoto,\n onRemovePhoto,\n show,\n type = 'multiple',\n buttonText\n}: AttachmentProps) {\n const handleAddPhoto = () => {\n onAddPhoto();\n };\n\n const handleRemovePhoto = (id: string) => {\n onRemovePhoto(id);\n };\n\n const renderPhotoSingle = () => {\n if (photos.length === 0) {\n return (\n <div className={cx('single-photo-item', 'add-photo-item')}>\n <button className={cx('add-photo-button-single')} onClick={handleAddPhoto}>\n <Icon name=\"illust/camera\" />\n <span>{buttonText || '사진 첨부하기'}</span>\n </button>\n </div>\n );\n }\n\n return photos.map((photo) => (\n <div key={photo.id} className={cx('single-photo-item')}>\n <div className={cx('photo-placeholder')}>\n <img src={photo.src} alt={photo.name} className={cx('photo-image')} />\n </div>\n <button className={cx('remove-button')} onClick={() => handleRemovePhoto(photo.id)} aria-label=\"사진 삭제\">\n ×\n </button>\n </div>\n ));\n };\n\n const renderPhotoGrid = () => {\n const maxPhotos = type === 'single' ? 1 : 4;\n const gridItems = [];\n\n if (photos.length < maxPhotos) {\n gridItems.push(\n <div key=\"add-photo\" className={cx('photo-item', 'add-photo-item')}>\n <button className={cx('add-photo-button')} onClick={handleAddPhoto}>\n <Icon name=\"illust/camera\" />\n <span>{buttonText || '첨부하기'}</span>\n <span className={cx('photo-count')}>\n (<span className={cx('photo-count-number')}>{photos.length}</span>/{maxPhotos})\n </span>\n </button>\n </div>\n );\n }\n\n photos.forEach((photo) => {\n gridItems.push(\n <div key={photo.id} className={cx('photo-item')}>\n <div className={cx('photo-placeholder')}>\n <img src={photo.src} alt={photo.name} className={cx('photo-image')} />\n </div>\n <button className={cx('remove-button')} onClick={() => handleRemovePhoto(photo.id)} aria-label=\"사진 삭제\">\n ×\n </button>\n </div>\n );\n });\n\n return gridItems;\n };\n\n const isVisible = show || (!show && photos.length > 0);\n\n if (!isVisible) {\n return null;\n }\n\n if (type === 'single') {\n return <div className={cx('photo-single')}>{renderPhotoSingle()}</div>;\n }\n\n return <div className={cx('photo-grid', { linear: type === 'linear' })}>{renderPhotoGrid()}</div>;\n}\n","import { cameraOptions } from './camera.types';\n\n// 3mb\nconst maxImageSize = 3 * 1024 * 1024;\n/**\n *\n * 이미지를 파라미터로 전달하고, 설정한 리사이즈 옵션에 따라 이미지를 리사이징하고 리턴한다.\n * 리턴하는 데이터타입은 전달받은 데이터 타입과 동일하게 한다.\n * base64 string을 전달받은 경우는 base64 string을 리턴하고\n * file 타입을 전달받은 경우는 file 타입을 리턴한다.\n *\n * options 규칙\n * width 와 height 중 1개가 존재하는 경우 해당 사이즈에 맞게 원본비율유지하여 축소한다.\n * width 와 height 가 모두 존재하는 경우 해당 사이즈에 맞게 원본비율을 무시하고 리사이즈한다.\n *\n * filesize 옵션이 존재하는 경우는 width,height 옵션을 무시하고, filesize 이하로 원본비율 축소한다.\n *\n * width, height 의 단위는 px 이다.\n *\n * ext는 리턴데이터 타입이 파일인 경우, 사용할 파일확장자 이다.\n * ext가 설정된 값이 없는 경우는, 기본값으로 jpeg를 사용한다.\n *\n */\nexport function resize<T extends string | File>(\n image: T,\n options: cameraOptions['resize'] = { ext: 'jpeg', filesize: maxImageSize }\n): Promise<T> {\n return new Promise((resolve, reject) => {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n reject(new Error('Canvas context를 생성할 수 없습니다.'));\n\n return;\n }\n\n const img = new Image();\n img.crossOrigin = 'anonymous';\n\n img.onload = () => {\n let { width, height } = img;\n const { filesize, ext } = options;\n\n // filesize 옵션이 있는 경우 width, height 옵션을 무시하고 filesize 이하로 원본비율 축소\n if (filesize) {\n const originalSize = width * height * 4; // RGBA 4바이트\n if (originalSize > filesize) {\n const ratio = Math.sqrt(filesize / originalSize);\n width = Math.floor(width * ratio);\n height = Math.floor(height * ratio);\n }\n } else {\n // width, height 옵션 처리\n const { width: targetWidth, height: targetHeight } = options;\n\n if (targetWidth && targetHeight) {\n // width와 height가 모두 존재하는 경우 원본비율 무시하고 리사이즈\n width = targetWidth;\n height = targetHeight;\n } else if (targetWidth) {\n // width만 존재하는 경우 원본비율 유지하여 축소\n const ratio = targetWidth / width;\n width = targetWidth;\n height = Math.floor(height * ratio);\n } else if (targetHeight) {\n // height만 존재하는 경우 원본비율 유지하여 축소\n const ratio = targetHeight / height;\n height = targetHeight;\n width = Math.floor(width * ratio);\n }\n }\n\n // canvas 크기 설정\n canvas.width = width;\n canvas.height = height;\n\n // 이미지 그리기\n ctx.drawImage(img, 0, 0, width, height);\n\n // 결과 반환\n if (typeof image === 'string') {\n // base64 string인 경우\n const mimeType = ext === 'png' ? 'image/png' : 'image/jpeg';\n const quality = ext === 'png' ? 1.0 : 0.8;\n const base64 = canvas.toDataURL(mimeType, quality);\n resolve(base64 as T);\n } else {\n // File인 경우\n canvas.toBlob(\n (blob) => {\n if (!blob) {\n reject(new Error('Blob을 생성할 수 없습니다.'));\n\n return;\n }\n\n const mimeType = ext === 'png' ? 'image/png' : 'image/jpeg';\n const fileName = image.name ? `${image.name.replace(/\\.[^/.]+$/, '') }.${ ext}` : `resized.${ ext}`;\n\n const resizedFile = new File([blob], fileName, { type: mimeType });\n resolve(resizedFile as T);\n },\n ext === 'png' ? 'image/png' : 'image/jpeg',\n ext === 'png' ? 1.0 : 0.8\n );\n }\n };\n\n img.onerror = () => {\n reject(new Error('이미지를 로드할 수 없습니다.'));\n };\n\n // 이미지 소스 설정\n if (typeof image === 'string') {\n img.src = image;\n } else {\n const reader = new FileReader();\n reader.onload = (e) => {\n if (e.target?.result) {\n img.src = e.target.result as string;\n } else {\n reject(new Error('파일을 읽을 수 없습니다.'));\n }\n };\n reader.onerror = () => {\n reject(new Error('파일을 읽을 수 없습니다.'));\n };\n reader.readAsDataURL(image);\n }\n });\n}\n","import { useEffect, useState } from 'react';\n\nimport { Attachment } from './attachment';\nimport { resize } from './resize';\n\nimport type { AttachedPhoto, cameraOptions } from './camera.types';\n\nconst genImageId = () => `camera-${Date.now()}-${Math.random()}`;\n\nexport function useCamera({\n onChange,\n resize: resizeOption,\n cameraOnly,\n onDelete,\n show,\n type = 'multiple',\n buttonText\n}: Partial<cameraOptions> = {}) {\n const [attachedPhotos, setAttachedPhotos] = useState<AttachedPhoto[]>([]);\n\n const findImage = (imageId: string) => {\n return attachedPhotos.find((image) => image.id === imageId);\n };\n\n /**\n * onClick시, input File생성후 카메라 또는 파일선택 호출\n */\n const onClick = () => {\n // input을 dom으로 생성, type='file' , cameraOnly 가 true이면 카메라만 실행가능하도록 input 을 설정\n // true가 아니면 이미지확장자파일과, 카메라선택 둘다 가능하도록 설정\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = 'image/*';\n\n if (cameraOnly) {\n // 카메라만 실행 가능하도록 설정\n input.capture = 'camera';\n }\n\n // 파일 선택 이벤트 리스너 추가\n input.addEventListener('change', async (event) => {\n const target = event.target as HTMLInputElement;\n const { files } = target;\n\n if (files && files.length > 0) {\n const file = files[0];\n // onChange 콜백 호출\n if (file) {\n const resizedFile = await resize(file, resizeOption);\n const newPhoto: AttachedPhoto = {\n id: genImageId(),\n src: URL.createObjectURL(resizedFile),\n name: `서류사진_${attachedPhotos.length + 1}`\n };\n\n if (type === 'single') {\n setAttachedPhotos([newPhoto]);\n } else {\n setAttachedPhotos([...attachedPhotos, newPhoto]);\n }\n\n onChange && onChange(file);\n }\n }\n\n // input 요소 제거\n document.body.removeChild(input);\n });\n\n // input을 body에 추가하고 click 이벤트 발생\n input.style.display = 'none';\n document.body.appendChild(input);\n input.click();\n };\n\n /**\n * 선택한 이미지 삭제\n * @param imageId 이미지아이디\n */\n const deleteImage = (imageId: string) => {\n const imageIndex = attachedPhotos.findIndex((image) => image.id === imageId);\n if (imageIndex > -1) {\n const item = attachedPhotos.splice(imageIndex, 1);\n item[0] && URL.revokeObjectURL(item[0].src);\n setAttachedPhotos([...attachedPhotos]);\n onDelete && onDelete(imageId);\n }\n };\n\n const CameraComponent = () => (\n <Attachment\n show={!!show}\n onAddPhoto={onClick}\n onRemovePhoto={deleteImage}\n photos={attachedPhotos}\n type={type}\n buttonText={buttonText}\n />\n );\n\n useEffect(() => {\n return () => {\n // revoke all images url\n attachedPhotos.forEach((image) => {\n URL.revokeObjectURL(image.src);\n });\n };\n }, []);\n\n return {\n onClick,\n getImage: findImage,\n deleteImage,\n attachedPhotos,\n Attachment: CameraComponent\n };\n}\n","import { useRef, useEffect, useState, useCallback } from 'react';\n\nimport { DownloadProps, PaintProps } from './canvas-paint.types';\n\n/** undo, redo 가능한 히스토리 최대 저장 갯수 */\nconst HISTORY_SIZE = 100;\n\n/** 기본 다운로드 값 */\nconst DEFAULT_DOWNLOAD_PROPS: Required<DownloadProps> = {\n fileExtendsion: 'png',\n fileName: 'image',\n transparent: true,\n backgroundColor: 'white',\n width: 500,\n height: 500\n};\nexport function useCanvasPaint(paintProps: PaintProps = {}) {\n const { pen = { strokeWeight: 5, strokeColor: 'black' }, onChange, onStart, onEnd } = paintProps;\n const [canvasRefState, setCanvasRefState] = useState<HTMLCanvasElement | null>(null);\n const contextRef = useRef<CanvasRenderingContext2D | null>(null);\n\n const [isPainting, setIsPainting] = useState(false);\n const [history, setHistory] = useState<string[]>([]);\n const [historyIndex, setHistoryIndex] = useState(-1);\n\n const saveState = useCallback(() => {\n if (!canvasRefState) {\n return;\n }\n const dataUrl = canvasRefState.toDataURL();\n\n const newHistory = history.slice(0, historyIndex + 1);\n if (newHistory.length >= HISTORY_SIZE) {\n newHistory.shift();\n }\n newHistory.push(dataUrl);\n\n setHistory(newHistory);\n setHistoryIndex(newHistory.length - 1);\n onChange && onChange();\n }, [history, historyIndex, onChange, canvasRefState]);\n\n const restoreState = useCallback(\n (index: number) => {\n const context = contextRef.current;\n if (!canvasRefState || !context || !history[index]) {\n return;\n }\n\n const dataUrl = history[index];\n const img = new Image();\n img.onload = () => {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n context.drawImage(img, 0, 0);\n };\n img.src = dataUrl;\n onChange && onChange();\n },\n [history, onChange, canvasRefState]\n );\n\n useEffect(() => {\n if (!canvasRefState) {\n return;\n }\n const context = canvasRefState.getContext('2d', { willReadFrequently: true });\n if (!context) {\n return;\n }\n contextRef.current = context;\n\n const initialDataUrl = canvasRefState.toDataURL();\n setHistory([initialDataUrl]);\n setHistoryIndex(0);\n }, [canvasRefState]);\n\n useEffect(() => {\n const context = contextRef.current;\n if (context) {\n context.lineWidth = pen.strokeWeight;\n context.strokeStyle = pen.strokeColor;\n }\n }, [pen]);\n\n /**\n * @description canvas의 크기가 동적으로 생성되는 경우,\n * 포인터의 위치가 맞지않는 이슈를 해결하기위한,\n * scale조정하는 함수입니다.\n */\n const getEventPosition = useCallback(\n (event: MouseEvent | TouchEvent) => {\n if (!canvasRefState) {\n return null;\n }\n\n const rect = canvasRefState.getBoundingClientRect();\n const scaleX = canvasRefState.width / rect.width;\n const scaleY = canvasRefState.height / rect.height;\n\n let clientX;\n let clientY;\n\n if (event instanceof MouseEvent) {\n clientX = event.clientX;\n clientY = event.clientY;\n } else if (event instanceof TouchEvent) {\n const touch = event.touches[0];\n if (!touch) {\n return null;\n }\n clientX = touch.clientX;\n clientY = touch.clientY;\n } else {\n return null;\n }\n\n const offsetX = (clientX - rect.left) * scaleX;\n const offsetY = (clientY - rect.top) * scaleY;\n\n return { offsetX, offsetY };\n },\n [canvasRefState]\n );\n\n const startPainting = useCallback(\n (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n const context = contextRef.current;\n if (!context) {\n return;\n }\n const pos = getEventPosition(event);\n if (!pos) {\n return;\n }\n onStart && onStart();\n const { offsetX, offsetY } = pos;\n context.beginPath();\n context.moveTo(offsetX, offsetY);\n setIsPainting(true);\n },\n [onStart, getEventPosition]\n );\n\n const stopPainting = useCallback(() => {\n const context = contextRef.current;\n if (!context || !isPainting) {\n return;\n }\n context.closePath();\n setIsPainting(false);\n onEnd && onEnd();\n saveState();\n }, [isPainting, onEnd, saveState]);\n\n const paint = useCallback(\n (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n if (!isPainting || !contextRef.current) {\n return;\n }\n const pos = getEventPosition(event);\n if (!pos) {\n return;\n }\n const { offsetX, offsetY } = pos;\n contextRef.current.lineTo(offsetX, offsetY);\n contextRef.current.stroke();\n },\n [isPainting, getEventPosition]\n );\n\n useEffect(() => {\n if (!canvasRefState) {\n return;\n }\n\n canvasRefState.addEventListener('mousedown', startPainting);\n canvasRefState.addEventListener('mouseup', stopPainting);\n canvasRefState.addEventListener('mousemove', paint);\n canvasRefState.addEventListener('mouseleave', stopPainting);\n\n canvasRefState.addEventListener('touchstart', startPainting);\n canvasRefState.addEventListener('touchend', stopPainting);\n canvasRefState.addEventListener('touchmove', paint);\n canvasRefState.addEventListener('touchcancel', stopPainting);\n\n return () => {\n canvasRefState.removeEventListener('mousedown', startPainting);\n canvasRefState.removeEventListener('mouseup', stopPainting);\n canvasRefState.removeEventListener('mousemove', paint);\n canvasRefState.removeEventListener('mouseleave', stopPainting);\n\n canvasRefState.removeEventListener('touchstart', startPainting);\n canvasRefState.removeEventListener('touchend', stopPainting);\n canvasRefState.removeEventListener('touchmove', paint);\n canvasRefState.removeEventListener('touchcancel', stopPainting);\n };\n }, [startPainting, stopPainting, paint, canvasRefState]);\n\n const clear = () => {\n const context = contextRef.current;\n if (canvasRefState && context) {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n const initialDataUrl = canvasRefState.toDataURL();\n setHistory([initialDataUrl]);\n setHistoryIndex(0);\n onChange && onChange();\n }\n };\n\n const undo = () => {\n if (historyIndex > 0) {\n const newIndex = historyIndex - 1;\n setHistoryIndex(newIndex);\n restoreState(newIndex);\n }\n };\n\n const redo = () => {\n if (historyIndex < history.length - 1) {\n const newIndex = historyIndex + 1;\n setHistoryIndex(newIndex);\n restoreState(newIndex);\n }\n };\n\n const loadImage = (base64String: string) => {\n const context = contextRef.current;\n if (!canvasRefState || !context) {\n return;\n }\n\n const img = new Image();\n img.onload = () => {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n context.drawImage(img, 0, 0, canvasRefState.width, canvasRefState.height);\n saveState();\n };\n img.src = base64String;\n };\n\n const getBase64String = (imageProps: DownloadProps) => {\n const props = { ...DEFAULT_DOWNLOAD_PROPS, ...imageProps };\n const { fileExtendsion, transparent, backgroundColor, width, height } = props;\n const originalCanvas = canvasRefState;\n if (!originalCanvas) {\n return;\n }\n\n const tempCanvas = document.createElement('canvas');\n tempCanvas.width = width;\n tempCanvas.height = height;\n const tempCtx = tempCanvas.getContext('2d');\n\n if (tempCtx) {\n if (!transparent) {\n tempCtx.fillStyle = backgroundColor || 'white';\n tempCtx.fillRect(0, 0, width, height);\n }\n tempCtx.drawImage(originalCanvas, 0, 0, width, height);\n\n return tempCanvas.toDataURL(`image/${fileExtendsion}`);\n }\n };\n\n const download = (downloadProps: DownloadProps) => {\n const props = { ...DEFAULT_DOWNLOAD_PROPS, ...downloadProps };\n const { fileName, fileExtendsion, transparent, backgroundColor, width, height } = props;\n const originalCanvas = canvasRefState;\n if (!originalCanvas) {\n return;\n }\n\n const tempCanvas = document.createElement('canvas');\n tempCanvas.width = width;\n tempCanvas.height = height;\n const tempCtx = tempCanvas.getContext('2d');\n\n if (tempCtx) {\n if (!transparent) {\n tempCtx.fillStyle = backgroundColor || 'white';\n tempCtx.fillRect(0, 0, width, height);\n }\n tempCtx.drawImage(originalCanvas, 0, 0, width, height);\n\n const link = document.createElement('a');\n link.download = `${fileName}.${fileExtendsion}`;\n link.href = tempCanvas.toDataURL(`image/${fileExtendsion}`);\n link.click();\n }\n };\n /**\n * canvasRef.current canvas 에 데이터가 있는지 확인후 boolean 리턴\n * @returns boolean\n */\n const isCanvasBlank = () => {\n if (!canvasRefState) {\n return true;\n }\n\n // 캔버스 크기 가져오기\n const { width, height } = canvasRefState;\n\n // 2D 렌더링 컨텍스트 가져오기\n const ctx = canvasRefState.getContext('2d');\n if (!ctx) {\n console.error('2D context not available');\n\n return true; // 컨텍스트가 없으면 비어있는 것으로 간주\n }\n\n // 캔버스 전체 영역의 픽셀 데이터 가져오기\n const imageData = ctx.getImageData(0, 0, width, height);\n const { data } = imageData;\n\n // 픽셀 데이터의 알파(alpha) 값을 순회하며 확인\n // RGBA 순서이므로 알파 값은 3, 7, 11, ... 인덱스에 위치\n for (let i = 0; i < data.length; i += 4) {\n // 알파 값이 0이 아니면 (불투명한 부분이 있으면)\n if (data[i + 3] !== 0) {\n return false; // 캔버스가 비어있지 않음\n }\n }\n\n // 모든 픽셀의 알파 값이 0이면 (모두 투명하면)\n return true; // 캔버스가 비어있음\n };\n\n return {\n clear,\n undo,\n redo,\n loadImage,\n download,\n getBase64String,\n isCanvasBlank,\n setCanvasRefState,\n canvasRefState\n };\n}\n","/**\n * 서명로드용 base64 string\n */\nexport const testSignatureBase64Data =\n 'data:image/png;base64,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';\n","import React, { useEffect, useState } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { Address } from 'sales-frontend-api/method';\nimport { Button, FormCore, Icon, Modal, ModalBaseProps, RadioGroup, FormField } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport { AddressSearchDetailInputProps, AddressSearchResultProps, FullAddress, Step } from './address.types';\nimport styles from './select-address.module.scss';\nimport { useSearchAddress } from './use-search-address';\n\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\n\nexport const AddressSearchInitialText = () => {\n return (\n <div>\n <p className={cx('guide-title')}>이렇게 검색해 보세요.</p>\n <ul className={cx('guide')}>\n <li>도로명/지명과 건물번호를 함께 입력해주세요</li>\n <li>예) 63로 50, 여의도동 60</li>\n <li>지명은 동/읍/면/리로 입력해주세요</li>\n <li>예) 여의도동, 역삼동</li>\n <li>우편번호 다섯자리를 모두 입력해주세요</li>\n <li>예) 07345, 06232</li>\n </ul>\n </div>\n );\n};\n\nexport const AddressSearchResult = ({\n addressSearchList,\n onChange,\n searchKeyword,\n selectedAddress\n}: AddressSearchResultProps) => {\n const [filterList, setFilterList] = useState<Address[]>([]);\n\n useEffect(() => {\n const filterList =\n addressSearchList.filter(\n (item) => item.address.includes(searchKeyword) || item.oldAddress.includes(searchKeyword)\n ) || [];\n setFilterList(filterList);\n }, [addressSearchList, searchKeyword]);\n\n return (\n <div>\n <p className={cx('guide-title')}>\n 총 <span className=\"text-primary\">{filterList.length}</span>건의 검색결과\n </p>\n {filterList.length > 0 && (\n <RadioGroup\n items={filterList.map((item: Address) => ({\n value: item.address,\n select: item.address === selectedAddress?.address && item.zipCode === selectedAddress?.zipCode,\n label: (\n <div className={cx('search-result')}>\n <div className={cx('zipcode')}> {highlightOnSearchKeyword(item.zipCode, searchKeyword)}</div>\n <div className={cx('divider')}></div>\n <div className={cx('address-info')}>\n <span className={cx('address')}>{highlightOnSearchKeyword(item.address, searchKeyword)}</span>\n <span className={cx('old-address')}>{highlightOnSearchKeyword(item.oldAddress, searchKeyword)}</span>\n </div>\n </div>\n ),\n id: item.address\n }))}\n className={cx('radio-group')}\n name=\"address-search\"\n size=\"medium\"\n defaultValue={''}\n onChange={onChange}\n />\n )}\n {filterList.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchKeyword}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n );\n};\n\nexport const AddressSearchDetailInput = ({\n selectedAddress,\n onDetailChange,\n step,\n detailAddressInput\n}: AddressSearchDetailInputProps) => {\n return (\n <div>\n <div>\n <div> {selectedAddress.zipCode}</div>\n <div>\n |<span>{`${selectedAddress.address}`}</span>\n </div>\n </div>\n <div>\n <FormField.Label id=\"detail\" style={{ width: '90px' }}>\n 상세주소\n </FormField.Label>\n <Input\n placeholder=\"상세주소 입력\"\n onChange={onDetailChange}\n size=\"large\"\n value={detailAddressInput}\n {...(step === 'detail-input' && { autoFocus: true })}\n />\n </div>\n </div>\n );\n};\n\nexport interface AddressSearchModalProps extends ModalBaseProps {\n onClose: () => void;\n isOpen: boolean;\n searchKeyword: string;\n step: Step;\n selectedAddress: Address | null;\n addressList: Address[];\n filterList: Address[];\n onClear: () => void;\n onSearch: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onKeyUp: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n onNext: () => void;\n setSelectedAddress: (address: Address) => void;\n setDetailAddress: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onSelectChange: (value: string) => void;\n}\n\ninterface Props {\n setValue: (address: FullAddress) => void;\n onClose: () => void;\n isOpen: boolean;\n}\n\nexport function AddressComponent({ isOpen, onClose, setValue }: Props) {\n const {\n onAddressSearchClear,\n addressSearchKeyword,\n addressSearchStep,\n onAddressSearchNext,\n nextButtonDisabled,\n detailAddressInput,\n addressSearchList,\n onSearch,\n onKeyUp,\n onSelectChange,\n setDetail,\n search,\n searchInput,\n selectedAddress\n } = useSearchAddress({\n setValue,\n onClose,\n isOpen\n });\n\n return (\n <>\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"주소 검색\" showCloseButton />\n <Modal.Body>\n <InputBox\n clearable\n endElement={<Icon name=\"sub-ui/search\" onClick={search} />}\n onClear={onAddressSearchClear}\n >\n <Input\n {...(addressSearchStep !== 'detail-input' && { autoFocus: true })}\n onChange={onSearch}\n onKeyUp={onKeyUp}\n value={searchInput}\n placeholder=\"지번, 도로명, 건물명, 우편번호 입력\"\n size=\"large\"\n />\n </InputBox>\n {addressSearchStep === 'initial' && <AddressSearchInitialText />}\n {addressSearchStep === 'search-result' && (\n <AddressSearchResult\n onChange={onSelectChange}\n addressSearchList={addressSearchList || []}\n searchKeyword={addressSearchKeyword}\n selectedAddress={selectedAddress}\n />\n )}\n {addressSearchStep === 'detail-input' && selectedAddress && (\n <AddressSearchDetailInput\n selectedAddress={selectedAddress}\n onDetailChange={setDetail}\n step={addressSearchStep}\n detailAddressInput={detailAddressInput}\n />\n )}\n </Modal.Body>\n <Modal.Footer>\n {addressSearchStep !== 'initial' && (\n <Button\n onClick={onAddressSearchNext}\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n disabled={nextButtonDisabled}\n >\n {addressSearchStep === 'search-result' && '다음(1/2)'}\n {addressSearchStep === 'detail-input' && '확인(2/2)'}\n </Button>\n )}\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n </>\n );\n}\n","import React, { useState, useEffect, useCallback } from 'react';\n\nimport { Address, useSearchModalAddressQuery } from 'sales-frontend-api/method';\nimport { useModalState } from 'sales-frontend-design-system';\n\nimport { AddressComponent } from './address-search-modal';\nimport { FullAddress, Step } from './address.types';\ninterface Props {\n setValue: (address: FullAddress) => void;\n onClose: () => void;\n isOpen: boolean;\n}\nexport function useSearchAddress({ setValue, onClose, isOpen }: Props) {\n const [searchKeyword, setSearchKeyword] = useState<string>('');\n const [step, setStep] = useState<Step>('initial');\n const [selectedAddress, setSelectedAddress] = useState<Address | null>(null);\n const [searchInput, setSearchInput] = useState<string>('');\n const [detailAddressInput, setDetailAddressInput] = useState<string>('');\n\n const { data: addressList } = useSearchModalAddressQuery({ searchKeyword });\n const [nextButtonDisabled, setNextButtonDisabled] = useState<boolean>(false);\n const onNext = () => {\n if (step === 'search-result') {\n setStep('detail-input');\n setNextButtonDisabled(true);\n } else {\n setValue({\n address: selectedAddress?.address || '',\n oldAddress: selectedAddress?.oldAddress || '',\n zipCode: selectedAddress?.zipCode || '',\n detail: detailAddressInput || ''\n });\n onClose();\n }\n };\n\n /**\n * 검색어 입력창 onChange\n */\n const onSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n const typeStr = e.target.value;\n setSearchInput(typeStr);\n };\n\n /**\n * 검색\n */\n const search = () => {\n if (searchInput === '') {\n onClear();\n\n return;\n }\n if (searchInput && searchInput.length > 1) {\n setSearchKeyword(searchInput);\n setStep('search-result');\n setSelectedAddress(null);\n setDetailAddressInput('');\n setNextButtonDisabled(true);\n }\n };\n\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 엔터키 입력시 검색\n */\n if (e.key === 'Enter') {\n search();\n }\n };\n\n /**\n * 검색결과 Radio 버튼 선택시, onChange\n */\n const onSelectChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const selectedAddress = e.target.value;\n if (selectedAddress) {\n const adr = addressList?.find((addr) => {\n return addr.address === selectedAddress;\n });\n setSelectedAddress(adr || null);\n setNextButtonDisabled(false);\n }\n };\n\n /**\n * 검색어입력창 초기화\n */\n const onClear = useCallback(() => {\n setSearchKeyword('');\n setSearchInput('');\n setSelectedAddress(null);\n setDetailAddressInput('');\n setStep('initial');\n }, []);\n\n /**\n * 상세주소 저장\n */\n const setDetail = (e: React.ChangeEvent<HTMLInputElement>) => {\n const detail = e.target.value;\n setDetailAddressInput(detail);\n if (detail) {\n setNextButtonDisabled(false);\n } else {\n setNextButtonDisabled(true);\n }\n };\n\n useEffect(() => {\n /**\n * 모달 오픈시, 상태 초기화\n */\n if (isOpen) {\n setSelectedAddress(null);\n setDetailAddressInput('');\n\n setStep('initial');\n setSearchKeyword('');\n }\n }, [isOpen]);\n\n return {\n onAddressSearchClear: onClear,\n onAddressSearchNext: onNext,\n addressSearchKeyword: searchKeyword,\n addressSearchList: addressList,\n addressSearchStep: step,\n selectedAddress,\n addressSearchOnValueChange: onSelectChange,\n nextButtonDisabled,\n detailAddressInput,\n onSearch,\n onKeyUp,\n onSelectChange,\n setDetail,\n search,\n searchInput\n };\n}\n\nexport const useAddressComponent = () => {\n const [fullAddress, setFullAddress] = useState<FullAddress | null>(null);\n\n const { isOpen, closeModal, openModal } = useModalState();\n\n const AddressSearchComponent = () => (\n <AddressComponent isOpen={isOpen} onClose={closeModal} setValue={setFullAddress} />\n );\n\n return {\n fullAddress,\n openModal,\n AddressSearchComponent\n };\n};\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { Icon } from 'sales-frontend-design-system';\n\nimport styles from './job-vehicle-search-modal.module.scss';\nconst cx = classNames.bind(styles);\n\ninterface JobVehicleSearchGradeProps {\n riskGrade?: string | number;\n hospitalizationGrade?: string | number;\n}\n\nexport const JobVehicleSearchGrade = ({ riskGrade, hospitalizationGrade }: JobVehicleSearchGradeProps) => {\n return (\n <div className={cx('grade-section')}>\n <div className={cx('icon-title')}>\n <Icon name=\"illust/grade\" />\n <span className=\"typo-title5 text-body\">등급</span>\n </div>\n <p className=\"typo-body2 text-body_3\">직종, 운전 여부 선택시 자동으로 산정됩니다.</p>\n\n <div className={cx('grade-list')}>\n <div className={cx('grade')}>\n <span>위험등급</span>\n <span className=\"text-primary typo-subtitle3\">{riskGrade || '-'}</span>\n </div>\n <div className={cx('grade')}>\n <span>입원등급</span>\n <span className=\"text-primary typo-subtitle3\">{hospitalizationGrade || '-'}</span>\n </div>\n </div>\n </div>\n );\n};\n","import classNames from 'classnames/bind';\nimport { VehicleTypeResponseDto } from 'sales-frontend-api/method';\nimport { Radio } from 'sales-frontend-design-system';\n\nimport styles from './vehicle-search-modal.module.scss';\nconst cx = classNames.bind(styles);\ninterface VehicleSearchProps {\n vehicles: VehicleTypeResponseDto[];\n onVehicleSelect: (vehicle: VehicleTypeResponseDto) => void;\n}\n\nexport function VehicleSearch({ vehicles, onVehicleSelect }: VehicleSearchProps) {\n return (\n <div className={cx('vehicle-search-section')}>\n <p>운전 차종</p>\n <Radio.Root name=\"vehicle-selection\" size=\"small\" className={cx('vehicle-radio-root')}>\n {vehicles.map((vehicle, index) => (\n <Radio.Item\n key={`item-${vehicle.integrationCodeValue}-${index}`}\n id={`item-${vehicle.integrationCodeValue}`}\n size=\"small\"\n value={vehicle.integrationCodeValue || ''}\n onChange={(e) => {\n const { value } = e.target;\n console.log(e.target.value);\n const selected = vehicles.find((v) => v.integrationCodeValue === value);\n if (selected) {\n onVehicleSelect(selected);\n }\n }}\n className={cx('item')}\n >\n {vehicle.integrationCodeValueName}({vehicle.integrationCodeValue})\n </Radio.Item>\n ))}\n </Radio.Root>\n </div>\n );\n}\n","import { useState } from 'react';\n\nimport { useSearchVehicleQuery, VehicleTypeResponseDto } from 'sales-frontend-api/method';\n\nimport { VehicleSearch } from './vehicle-search';\n\nexport const useVehicleSearch = () => {\n const [selectedVehicle, setSelectedVehicle] = useState<VehicleTypeResponseDto>();\n const { data } = useSearchVehicleQuery();\n\n // useSearchVehicleQuery\n return {\n VehicleSearchComponent: (\n <VehicleSearch vehicles={data?.data?.vehicleTypeList || []} onVehicleSelect={setSelectedVehicle} />\n ),\n selectedVehicle,\n setSelectedVehicle,\n vehicleList: data\n };\n};\n","import { useEffect, useState } from 'react';\n\nimport { useJobSearchModal } from '../job-search-modal/use-job-search';\nimport { useVehicleSearch } from '../vehicle-search-modal/use-vehicle-search';\n\nexport const useJobVehicleSearch = () => {\n const [rightPanelView, setRightPanelView] = useState('jobSearch'); // 'jobSearch' or 'vehicleSelection'\n const [riskGrade, setRiskGrade] = useState<string>('');\n const [hospitalizationGrade, setHospitalizationGrade] = useState<string>('');\n const { selectedJob, JobSearchComponent } = useJobSearchModal();\n const { selectedVehicle, VehicleSearchComponent } = useVehicleSearch();\n\n useEffect(() => {\n if (selectedJob && selectedVehicle) {\n /**\n * 직종,차종이 모두 선택된 경우 등급 계산 API 호출\n * @todo\n */\n setRiskGrade('일반(비위험직)(0)');\n setHospitalizationGrade('일반입원(비위험직)(0)');\n }\n }, [selectedJob, selectedVehicle]);\n\n return {\n selectedVehicle,\n rightPanelView,\n setRightPanelView,\n selectedJob,\n JobSearch: JobSearchComponent,\n VehicleSearch: VehicleSearchComponent,\n riskGrade,\n hospitalizationGrade\n };\n};\n","import classNames from 'classnames/bind';\nimport { Icon, ModalUtils, useModalState } from 'sales-frontend-design-system';\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { JobVehicleSearchGrade } from './job-vehicle-search-grade';\nconst cx = classNames.bind(styles);\nimport styles from './job-vehicle-search-modal.module.scss';\nimport { useJobVehicleSearch } from './use-job-vehicle-search';\n\nexport function useJobVehicleSearchModal() {\n const {\n selectedVehicle,\n rightPanelView,\n setRightPanelView,\n selectedJob,\n JobSearch,\n VehicleSearch,\n riskGrade,\n hospitalizationGrade\n } = useJobVehicleSearch();\n const { isOpen, openModal, closeModal } = useModalState({ initialValue: true });\n\n const validate = () => {\n console.log({ selectedJob, selectedVehicle });\n if (!selectedJob && !selectedVehicle) {\n return ModalUtils.alert(\n '직종과 운전 여부·차종을 모두 선택해야 등급 산정이 가능합니다.',\n '직종과 운전 여부·차종을 선택해주세요',\n {\n modalSize: 'small'\n }\n );\n }\n if (!selectedJob) {\n return ModalUtils.alert('직종을 선택해야 등급 산정이 가능합니다.', '직종을 선택해주세요', {\n modalSize: 'small'\n });\n }\n if (!selectedVehicle) {\n return ModalUtils.alert('운전 여부·차종을 선택해야 등급 산정이 가능합니다.', '운전 여부·차종을 선택해주세요', {\n modalSize: 'small'\n });\n }\n closeModal();\n };\n\n return {\n selectedJob,\n selectedVehicle,\n riskGrade,\n hospitalizationGrade,\n openJobVehicleModal: openModal,\n JobVehicleSearchModalComponent: (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"직종·운전차종 검색\" showCloseButton />\n <Modal.Body className={cx('job-vehicle-search-modal')} raw>\n <>\n <div className={cx('left-panel')}>\n <div className={cx('card-section')}>\n <div\n className={cx('card-menu', { 'card-selected': rightPanelView === 'jobSearch' })}\n onClick={() => setRightPanelView('jobSearch')}\n >\n <div className={cx('card-title')}>\n <Icon name=\"illust/job\" className={cx('card-icon')} />\n <span className={cx('card-text', 'typo-title5', 'text-body')}>직종</span>\n <Icon name=\"sub-ui/arrow/right\" />\n </div>\n <div className=\"typo-body2 text-body_2\">\n {selectedJob ? selectedJob.occupationIndustryName : '미선택'}\n </div>\n </div>\n <div\n className={cx('card-menu', { 'card-selected': rightPanelView === 'vehicleSelection' })}\n onClick={() => setRightPanelView('vehicleSelection')}\n >\n <div className={cx('card-title')}>\n <Icon name=\"illust/vehicle\" className={cx('card-icon')} />\n <span className={cx('card-text', 'typo-title5', 'text-body')}>운전 여부·차종</span>\n <Icon name=\"sub-ui/arrow/right\" />\n </div>\n <div className=\"typo-body2 text-body_2\">\n {selectedVehicle?.integrationCodeValueName}\n {selectedVehicle?.integrationCodeValue || '미선택'}\n </div>\n </div>\n </div>\n <JobVehicleSearchGrade riskGrade={riskGrade} hospitalizationGrade={hospitalizationGrade} />\n </div>\n <div className={cx('right-panel')}>{rightPanelView === 'jobSearch' ? JobSearch : VehicleSearch}</div>\n </>\n </Modal.Body>\n <Modal.Footer style={{ marginTop: 0 }}>\n <Button variant=\"primary\" size=\"medium\" appearance=\"filled\" width=\"full\" onClick={validate}>\n 확인\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n )\n };\n}\n","import React from 'react';\n\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { useJobSearchModal } from './use-job-search';\n\ninterface JobSearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport const JobSearchModal: React.FC<JobSearchModalProps> = ({ onClose }) => {\n const { JobSearchComponent } = useJobSearchModal();\n\n return (\n <Modal.Root isOpen={true} onClose={onClose} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"직종 검색\" showCloseButton />\n <Modal.Body raw>{JobSearchComponent}</Modal.Body>\n <Modal.Footer>\n <Button variant=\"primary\" size=\"medium\" appearance=\"filled\" width=\"full\" onClick={onClose}>\n 확인\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["cx","styles","filterList","selectedAddress"],"mappings":"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","x_google_ignoreList":[5]}