sales-frontend-components 0.0.58 → 0.0.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/camera/camera.module.scss +2 -4
- package/dist/debug-tool/debug-tool.module.scss +212 -0
- package/dist/debug-tool/features/network-log/network-log.module.scss +22 -0
- package/dist/index.cjs.js +681 -0
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +41 -1
- package/dist/index.esm.js +683 -3
- package/dist/index.esm.js.map +1 -1
- package/package.json +11 -10
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.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"],"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"],"names":["useController","jsx","CheckboxButton","Checkbox","DatePicker","DateRangePicker","SegmentGroup","FormField","cx","jsxs","styles","Icon","useState","useEffect","useRef","useCallback"],"mappings":"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","x_google_ignoreList":[6]}
|
|
1
|
+
{"version":3,"file":"index.cjs.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/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"],"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 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 return (\n <Button\n variant=\"secondary\"\n appearance=\"filled\"\n size=\"xsmall\"\n className={styles['debug-floating-button']}\n onClick={onClick}\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 } 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: string, 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 { useDebugStore, RequestInfo, ResponseInfo, ErrorInfo } from 'sales-frontend-api';\nimport { Accordion, Button, FormField, Modal, Select } 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) & { type: string };\n\nconst NetworkLog: React.FC<NetworkLogProps> = ({ onClose }) => {\n const { requests, responses, errors, clear } = 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 logs.sort((a, b) => {\n const aTime = 'startTime' in a ? a.startTime : 0;\n const bTime = 'startTime' in b ? b.startTime : 0;\n\n return bTime - aTime;\n });\n\n return logs;\n }, [requests, responses, errors]);\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 switch (searchSection) {\n case 'url':\n return log.url?.toLowerCase().includes(lowercasedTerm);\n case 'headers':\n return 'headers' in log && log.headers && JSON.stringify(log.headers)?.toLowerCase().includes(lowercasedTerm);\n case 'params':\n return 'params' in log && log.params && JSON.stringify(log.params)?.toLowerCase().includes(lowercasedTerm);\n case 'data':\n return (\n 'data' in log &&\n log.data &&\n log.type === 'request' &&\n JSON.stringify(log.data)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'response':\n return (\n 'data' in log &&\n log.data &&\n log.type === 'response' &&\n JSON.stringify(log.data)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'error':\n return log.type === 'error' && JSON.stringify(log)?.toLowerCase().includes(lowercasedTerm);\n case 'all':\n default:\n return JSON.stringify(log).toLowerCase().includes(lowercasedTerm);\n }\n });\n }, [allLogs, searchTerm, searchSection]);\n\n const renderLogSummary = (log: Log) => {\n if (log.type === 'request') {\n return `[REQ] ${log.method.toUpperCase()} ${log.url}`;\n }\n if (log.type === 'response' && 'status' in log) {\n return `[RES] ${log.method.toUpperCase()} ${log.url} - ${log.status}`;\n }\n if (log.type === 'error' && 'message' in log) {\n return `[ERR] ${log.method.toUpperCase()} ${log.url} - ${log.message}`;\n }\n\n return 'Unknown Log';\n };\n\n const renderLogContent = (log: Log) => {\n return <pre>{JSON.stringify(log, 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 <Button variant=\"neutral\" appearance=\"outline\" size=\"xsmall\" onClick={clear}>\n clear\n </Button>\n </div>\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/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 { Environment, 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: 'unknown'\n });\n\n useEffect(() => {\n // `window.location.hostname`을 분석하여 현재 환경을 결정합니다.\n // 이 로직은 프로젝트의 도메인 정책에 따라 수정될 수 있습니다.\n const { hostname } = window.location;\n let currentEnv: Environment = 'unknown';\n\n if (hostname.includes('localhost') || hostname.includes('127.0.0.1')) {\n currentEnv = 'local';\n } else if (hostname.includes('dev.')) {\n currentEnv = 'dev';\n } else if (hostname.includes('stg.')) {\n currentEnv = 'stage';\n } else {\n // 위 조건에 해당하지 않으면 기본적으로 'prod'로 간주합니다.\n // 특정 상용 도메인 규칙이 있다면 여기에 추가할 수 있습니다.\n currentEnv = 'prod';\n }\n\n setEnvInfo({ env: currentEnv });\n }, []);\n\n return envInfo;\n};\n","import 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', 'stage' 환경에서만 툴을 보여줍니다.\n const isVisible = ['local', 'dev', 'stage'].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"],"names":["useController","jsx","CheckboxButton","Checkbox","DatePicker","DateRangePicker","SegmentGroup","FormField","cx","jsxs","styles","Icon","useState","useEffect","useRef","useCallback","Button","Modal","List","ListItem","isClient","safeStringify","useMemo","Segment","Select","useDebugStore","Accordion","menuItems","defaultMenuItems"],"mappings":"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","x_google_ignoreList":[6]}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import { FieldValues, UseControllerProps } from 'react-hook-form';
|
|
3
3
|
import { CheckboxButtonProps, CheckboxProps, DatePickerSingleHtmlProps, DatePickerRangeHtmlProps, SegmentGroupHtmlProps, FormField } from 'sales-frontend-design-system';
|
|
4
4
|
import * as react from 'react';
|
|
5
|
+
import react__default from 'react';
|
|
5
6
|
|
|
6
7
|
declare const FormCheckboxButton: <TFormValues extends FieldValues>({ name, control, disabled, children, ...props }: Pick<UseControllerProps<TFormValues>, "name" | "control" | "disabled"> & Omit<CheckboxButtonProps, "id">) => react_jsx_runtime.JSX.Element;
|
|
7
8
|
|
|
@@ -146,5 +147,44 @@ declare function useCanvasPaint(paintProps?: PaintProps): {
|
|
|
146
147
|
*/
|
|
147
148
|
declare const testSignatureBase64Data = "data:image/png;base64,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";
|
|
148
149
|
|
|
149
|
-
|
|
150
|
+
/**
|
|
151
|
+
* @file 디버그 툴 전체에서 사용되는 공용 TypeScript 타입을 정의합니다.
|
|
152
|
+
*/
|
|
153
|
+
/** 실행 환경 (local, dev, stage, prod 등) */
|
|
154
|
+
type Environment = 'local' | 'dev' | 'stage' | 'prod' | 'unknown';
|
|
155
|
+
/** `config.ts`에서 메뉴 아이템을 정의하기 위한 구조 */
|
|
156
|
+
interface MenuItem {
|
|
157
|
+
/** 메뉴의 고유 식별자 (예: 'console-log') */
|
|
158
|
+
id: string;
|
|
159
|
+
/** 메뉴에 표시될 이름 (예: '콘솔 로그 확인') */
|
|
160
|
+
label: string;
|
|
161
|
+
/** 메뉴 클릭 시 렌더링될 리액트 컴포넌트 */
|
|
162
|
+
component: React.ComponentType<any>;
|
|
163
|
+
/** 메뉴 노출 여부. `false`이면 메뉴에 표시되지 않습니다. */
|
|
164
|
+
display: boolean;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* @file DebugTool의 메인 컴포넌트 파일입니다.
|
|
169
|
+
* @description
|
|
170
|
+
* - 환경에 따라 디버그 툴의 노출 여부를 결정합니다.
|
|
171
|
+
* - 플로팅 버튼과 메뉴 패널의 상태를 관리합니다.
|
|
172
|
+
* - 선택된 기능(Feature) 컴포넌트를 렌더링합니다.
|
|
173
|
+
* - `onLogin`, `envOverride`, `menuItemsOverride` 등의 props를 통해 외부에서 동작을 제어할 수 있습니다.
|
|
174
|
+
*/
|
|
175
|
+
interface DebugToolProps {
|
|
176
|
+
/** 간편 로그인 기능을 위한 콜백 함수. 이 함수가 제공되어야 '간편 로그인' 메뉴가 활성화됩니다. */
|
|
177
|
+
onLogin?: (loginType: string, data: Record<string, string>) => void;
|
|
178
|
+
/** 현재 환경을 강제로 재정의합니다. 'prod' 환경에서도 디버그 툴을 테스트할 때 유용합니다. */
|
|
179
|
+
envOverride?: Environment;
|
|
180
|
+
/** 기본 메뉴 설정을 재정의합니다. 동적으로 메뉴를 추가하거나 변경할 때 사용합니다. */
|
|
181
|
+
menuItemsOverride?: (Omit<MenuItem, 'component'> & {
|
|
182
|
+
component: react__default.ComponentType<any>;
|
|
183
|
+
})[];
|
|
184
|
+
/** @deprecated Storybook 전용 prop으로, 실제 사용되지 않습니다. */
|
|
185
|
+
menuConfig?: Record<string, boolean>;
|
|
186
|
+
}
|
|
187
|
+
declare const DebugTool: react__default.FC<DebugToolProps>;
|
|
188
|
+
|
|
189
|
+
export { Attachment, DebugTool, FormCheckbox, FormCheckboxButton, FormDatePicker, FormDateRangePicker, FormSegmentGroup, FormTextField, StepIndicator, resize, testSignatureBase64Data, useCamera, useCanvasPaint };
|
|
150
190
|
export type { AttachedPhoto, AttachmentProps, DownloadProps, PaintProps, Pen, StepIndicatorProps, StepItem, cameraItemType, cameraOptions };
|