sales-frontend-components 0.0.48 → 0.0.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/bind.js","../src/data-table/data-table.tsx","../src/data-table/use-table.ts","../src/form/form-date-picker.tsx","../src/form/form-segment.tsx","../src/form/form-text-field.tsx","../src/form/form-signautre/form-signature.tsx","../src/form/form-signautre/use-form-signature.tsx","../src/step-indicator/step-indicator.tsx","../src/camera/attachment.tsx","../src/camera/resize.ts","../src/camera/use-camera.tsx"],"sourcesContent":["/*!\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 { flexRender, type RowData } from '@tanstack/react-table';\nimport classNames from 'classnames/bind';\nimport { Table } from 'sales-frontend-design-system';\n\nimport styles from './data-table.module.scss';\n\nimport type { DataTableProps } from './data-table.types';\n\nconst cx = classNames.bind(styles);\n\nexport const DataTable = <T extends RowData>({ table, isError, isLoading, msgText, ...props }: DataTableProps<T>) => {\n return (\n <Table\n {...props}\n selectable\n style={\n {\n // minWidth: table.getCenterTotalSize() // 테이블 전체 너비를 컬럼 너비의 합으로 설정\n }\n }\n >\n <thead>\n {table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <th\n key={header.id}\n colSpan={header.colSpan}\n className={cx({\n 'is-resizing': header.column.getIsResizing() // 3. 리사이징 중일 때 클래스 추가\n })}\n style={\n header.column.columnDef.size\n ? { width: header.getSize(), minWidth: header.getSize(), maxWidth: header.getSize() } // 4. TanStack이 계산한 너비를 직접 적용\n : undefined\n }\n >\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n\n {/* 컬럼 리사이징 핸들 */}\n {header.column.getCanResize() && (\n <div\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n className={cx('resize-handle')}\n />\n )}\n </th>\n ))}\n </tr>\n ))}\n </thead>\n\n <tbody>\n {!isLoading && !isError && table.getRowModel().rows.length > 0 ? (\n table.getRowModel().rows.map((row) => (\n // TODO aria-disabled 스타일을 어떻게 적용할 것인지?\n <tr key={row.id} aria-selected={row.getIsSelected()}>\n {row.getVisibleCells().map((cell) => (\n <td\n key={cell.id}\n style={\n cell.column.columnDef.size\n ? {\n width: cell.column.getSize(),\n minWidth: cell.column.getSize(),\n maxWidth: cell.column.getSize()\n }\n : undefined\n }\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n ))}\n </tr>\n ))\n ) : (\n <tr>\n <td className={cx('feedback-cell')} colSpan={table.getVisibleLeafColumns().length}>\n {isLoading ? <div>Loading...</div> : <div>{msgText || (isError ? 'Error' : 'No data')}</div>}\n </td>\n </tr>\n )}\n </tbody>\n </Table>\n );\n};\n","'use client';\n\nimport React, { useState } from 'react';\n\nimport {\n type PaginationState,\n type RowData,\n type RowSelectionState,\n type TableOptions,\n getCoreRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table';\n\ntype RenderingMode = 'CSR' | 'SSR';\n\nexport const useTable = <TData extends RowData>({\n data,\n columns,\n defaultColumn = { size: 150, enableResizing: true },\n initialState,\n onSortingChange,\n enableRowSelection,\n enableColumnResizing,\n mode = 'SSR',\n meta,\n debug\n}: Pick<\n TableOptions<TData>,\n | 'data'\n | 'columns'\n | 'initialState'\n | 'onSortingChange'\n | 'enableRowSelection'\n | 'enableColumnResizing'\n | 'defaultColumn'\n | 'meta'\n> & {\n mode?: RenderingMode;\n debug?: boolean;\n}) => {\n const [sorting, setSorting] = React.useState(initialState?.sorting || []);\n const [rowSelection, setRowSelection] = useState<RowSelectionState>(initialState?.rowSelection || {});\n const [pagination, setPagination] = React.useState((initialState?.pagination as PaginationState) || {});\n const [columnVisibility, setColumnVisibility] = React.useState(initialState?.columnVisibility || {});\n\n const getOption = (mode: RenderingMode): Partial<TableOptions<TData>> => {\n if (mode === 'SSR') {\n return {\n manualSorting: true,\n manualPagination: true,\n onSortingChange\n };\n } else {\n return {\n getPaginationRowModel: getPaginationRowModel(),\n onPaginationChange: setPagination,\n onSortingChange: setSorting\n };\n }\n };\n\n const table = useReactTable({\n meta,\n data,\n columns,\n columnResizeMode: 'onChange',\n defaultColumn,\n enableColumnResizing,\n enableRowSelection,\n initialState,\n state: {\n sorting,\n rowSelection,\n pagination,\n columnVisibility\n },\n onRowSelectionChange: setRowSelection,\n onColumnVisibilityChange: setColumnVisibility,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n ...getOption(mode),\n debugTable: debug,\n debugHeaders: debug,\n debugColumns: debug\n });\n\n return table;\n};\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { DatePicker, type DatePickerHtmlProps } from 'sales-frontend-design-system';\n\nexport const FormDatePicker = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & DatePickerHtmlProps) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n const baseProps: DatePickerHtmlProps = {\n ...props,\n id: field.name,\n defaultValue: field.value,\n disabled: field.disabled,\n error: fieldState.invalid,\n onBlur: field.onBlur\n };\n\n // if (props.mode === 'range') {\n // return (\n // <DatePicker\n // {...baseProps}\n // onValueChange={(selected: PeriodDate) => {\n // if (props.mode === 'range') {\n // }\n // field.onChange(selected);\n // // props.onValueChange?.(selected);\n // }}\n // />\n // );\n // }\n\n return <DatePicker {...baseProps} />;\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'> & SegmentGroupHtmlProps) => {\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 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=\"medium\"\n autoComplete=\"off\"\n name={field.name}\n value={field.value ?? ''}\n disabled={field.disabled}\n error={fieldState.invalid || error}\n onChange={(e) => {\n field.onChange(e);\n onChange?.(e);\n }}\n onBlur={(e) => {\n field.onBlur();\n onBlur?.(e);\n }}\n rootProps={{\n ...rootProps,\n onClear: () => {\n field.onChange('');\n rootProps?.onClear?.();\n }\n }}\n />\n );\n};\n","import React, { useRef, useState, useEffect, useImperativeHandle, useCallback } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { Button } from 'sales-frontend-design-system';\n\nimport styles from './form-signature.module.scss';\n\nimport type { FormSignatureProps, SignatureData } from './form-signature.types';\n\nconst cx = classNames.bind(styles);\n\nexport const FormSignature = ({\n label,\n error,\n errorMsg,\n onSubmit,\n onRecentSignatureLoad,\n onChangeSignature,\n onReset,\n isShowRecentSignatureButton,\n isShowResetButton,\n ref,\n canvasWidth = 632,\n canvasHeight = 230\n}: FormSignatureProps) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const [isDrawing, setIsDrawing] = useState(false);\n const [isEmpty, setIsEmpty] = useState(true);\n const [signatureData, setSignatureData] = useState('');\n const [isLoadingSignature, setIsLoadingSignature] = useState(false);\n\n // 마우스 버튼 상태 추적 (캔버스 밖에서도 추적)\n const [isMousePressed, setIsMousePressed] = useState(false);\n\n // 선의 길이 측정을 위한 상태\n const [totalLineLength, setTotalLineLength] = useState(0);\n const [lastPoint, setLastPoint] = useState<{ x: number; y: number } | null>(null);\n const [strokeLengths, setStrokeLengths] = useState<number[]>([]);\n const [currentStrokeLength, setCurrentStrokeLength] = useState(0);\n\n // Canvas 스타일 설정\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n\n // Canvas 초기 설정\n ctx.strokeStyle = '#000000';\n ctx.lineWidth = Math.max(1, canvasWidth / 400); // 크기에 비례한 선 두께\n ctx.lineCap = 'round';\n ctx.lineJoin = 'round';\n }, [canvasWidth]);\n\n // 전역 마우스 이벤트 리스너 등록 (마우스 버튼 상태 추적)\n useEffect(() => {\n const handleGlobalMouseUp = () => {\n setIsMousePressed(false);\n if (isDrawing) {\n stopDrawing();\n }\n };\n\n document.addEventListener('mouseup', handleGlobalMouseUp);\n\n return () => {\n document.removeEventListener('mouseup', handleGlobalMouseUp);\n };\n }, [isDrawing]);\n\n // 캔버스 크기와 실제 렌더링 크기 간의 비율 계산\n const getCanvasCoordinates = useCallback((e: React.MouseEvent<HTMLCanvasElement>) => {\n const canvas = canvasRef.current;\n if (!canvas) {\n return { x: 0, y: 0 };\n }\n\n const rect = canvas.getBoundingClientRect();\n const scaleX = canvas.width / rect.width;\n const scaleY = canvas.height / rect.height;\n\n return {\n x: (e.clientX - rect.left) * scaleX,\n y: (e.clientY - rect.top) * scaleY\n };\n }, []);\n\n // 두 점 사이의 거리 계산\n const calculateDistance = useCallback((point1: { x: number; y: number }, point2: { x: number; y: number }) => {\n return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));\n }, []);\n\n // 그리기 시작\n const startDrawing = useCallback(\n (e: React.MouseEvent<HTMLCanvasElement>) => {\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n\n const { x, y } = getCanvasCoordinates(e);\n\n setIsDrawing(true);\n setIsMousePressed(true);\n setIsEmpty(false);\n setLastPoint({ x, y });\n setCurrentStrokeLength(0);\n\n ctx.beginPath();\n ctx.moveTo(x, y);\n },\n [getCanvasCoordinates]\n );\n\n // 그리기\n const draw = useCallback(\n (e: React.MouseEvent<HTMLCanvasElement>) => {\n if (!isDrawing) {\n return;\n }\n\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n\n const { x, y } = getCanvasCoordinates(e);\n const currentPoint = { x, y };\n\n // 이전 점과 현재 점 사이의 거리 계산\n if (lastPoint) {\n const distance = calculateDistance(lastPoint, currentPoint);\n\n // 최소 거리 임계값 추가 (너무 작은 움직임은 무시)\n if (distance > 0.5) {\n setCurrentStrokeLength((prev) => prev + distance);\n setTotalLineLength((prev) => prev + distance);\n }\n }\n\n ctx.lineTo(x, y);\n ctx.stroke();\n\n // 다음 계산을 위해 현재 점을 저장\n setLastPoint(currentPoint);\n\n // 서명 데이터 저장\n const data = canvas.toDataURL();\n setSignatureData(data);\n\n onChangeSignature?.();\n },\n [isDrawing, getCanvasCoordinates, calculateDistance, lastPoint, onChangeSignature]\n );\n\n // 그리기 중지\n const stopDrawing = useCallback(() => {\n // 실제로 그리기 상태였고, 획 길이가 있을 때만 추가\n if (isDrawing && currentStrokeLength > 0) {\n setStrokeLengths((prev) => [...prev, currentStrokeLength]);\n }\n\n setIsDrawing(false);\n setLastPoint(null);\n }, [isDrawing, currentStrokeLength]);\n\n // 마우스가 캔버스로 다시 들어올 때 처리\n const handleMouseEnter = useCallback(\n (e: React.MouseEvent<HTMLCanvasElement>) => {\n // 마우스 버튼이 여전히 눌려있는 상태라면 그리기 재개\n if (isMousePressed && !isDrawing) {\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n\n const { x, y } = getCanvasCoordinates(e);\n\n setIsDrawing(true);\n setLastPoint({ x, y });\n\n // 새로운 패스 시작 (이전 위치에서 끊어진 상태로)\n ctx.beginPath();\n ctx.moveTo(x, y);\n }\n },\n [isMousePressed, isDrawing, getCanvasCoordinates]\n );\n\n // 마우스가 캔버스를 벗어날 때 처리\n const handleMouseLeave = useCallback(() => {\n // 그리기 상태만 중지하고 마우스 버튼 상태는 유지\n if (isDrawing) {\n setIsDrawing(false);\n setLastPoint(null);\n }\n }, [isDrawing]);\n\n // 캔버스 클리어\n const clearSignature = useCallback(() => {\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n\n ctx.clearRect(0, 0, canvasWidth, canvasHeight);\n setIsEmpty(true);\n setSignatureData('');\n setTotalLineLength(0);\n setLastPoint(null);\n setStrokeLengths([]);\n setCurrentStrokeLength(0);\n }, [canvasWidth, canvasHeight]);\n\n // 서명 이미지를 캔버스에 로드\n const loadSignatureToCanvas = useCallback(\n (imageDataURL: string): Promise<void> => {\n return new Promise((resolve, reject) => {\n const canvas = canvasRef.current;\n if (!canvas) {\n reject(new Error('Canvas not found'));\n\n return;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n reject(new Error('Canvas context not found'));\n\n return;\n }\n\n const img = new Image();\n\n img.onload = () => {\n // 기존 캔버스 클리어\n ctx.clearRect(0, 0, canvasWidth, canvasHeight);\n\n // 이미지를 캔버스에 그리기\n ctx.drawImage(img, 0, 0, canvasWidth, canvasHeight);\n\n // 상태 업데이트\n setIsEmpty(false);\n setSignatureData(imageDataURL);\n\n // 불러온 서명은 통계 정보 초기화 (실제 그린 것이 아니므로)\n setTotalLineLength(0);\n setStrokeLengths([]);\n setCurrentStrokeLength(0);\n setLastPoint(null);\n\n resolve();\n };\n\n img.onerror = () => {\n reject(new Error('Failed to load signature image'));\n };\n\n img.src = imageDataURL;\n });\n },\n [canvasWidth, canvasHeight]\n );\n\n // 유효성 검사\n const validateForm = useCallback(() => {\n return !(!signatureData || isEmpty);\n }, [signatureData, isEmpty]);\n\n // 서명 데이터 생성\n const getSignatureDataObject = useCallback((): SignatureData | null => {\n if (!signatureData || isEmpty) {\n return null;\n }\n\n return {\n signature: signatureData,\n totalLineLength: Math.round(totalLineLength),\n strokeCount: strokeLengths.length,\n strokeLengths: strokeLengths.map((length) => Math.round(length)),\n averageStrokeLength: strokeLengths.length > 0 ? Math.round(totalLineLength / strokeLengths.length) : 0\n };\n }, [signatureData, isEmpty, totalLineLength, strokeLengths]);\n\n // 제출 처리\n const handleSubmit = useCallback(() => {\n if (!validateForm()) {\n return;\n }\n\n const data = getSignatureDataObject();\n if (data) {\n console.log('제출된 데이터:', data);\n onSubmit(data);\n }\n }, [validateForm, getSignatureDataObject, onSubmit]);\n\n // 리셋 처리\n const handleReset = useCallback(() => {\n clearSignature();\n onReset?.(); // 다시 작성 콜백 호출\n }, [clearSignature, onReset]);\n\n // 최근 서명 불러오기\n const handleRecentSignatureLoad = useCallback(async () => {\n if (!onRecentSignatureLoad) {\n return;\n }\n\n try {\n setIsLoadingSignature(true);\n\n const loadedSignature = await onRecentSignatureLoad();\n\n if (loadedSignature) {\n await loadSignatureToCanvas(loadedSignature);\n console.log('최근 서명을 성공적으로 불러왔습니다.');\n } else {\n alert('불러올 최근 서명이 없습니다.');\n }\n } catch (error) {\n console.error('최근 서명 불러오기 실패:', error);\n alert('최근 서명을 불러오는데 실패했습니다.');\n } finally {\n setIsLoadingSignature(false);\n }\n }, [onRecentSignatureLoad, loadSignatureToCanvas]);\n\n // 외부에서 호출할 수 있는 메서드들을 노출\n useImperativeHandle(\n ref,\n () => ({\n submit: handleSubmit,\n clear: clearSignature,\n getSignatureData: getSignatureDataObject,\n isValid: validateForm\n }),\n [handleSubmit, clearSignature, getSignatureDataObject, validateForm]\n );\n\n return (\n <div>\n <div className={cx('form-label')}>\n <label className=\"typo-subtitle3 text-body_1\">{label}</label>\n <div className={cx('form-label-button-box')}>\n {isShowResetButton && (\n <Button\n appearance=\"filled\"\n variant=\"neutral\"\n size=\"xsmall\"\n onClick={handleReset}\n className=\"text-nowrap-i\"\n disabled={isEmpty}\n >\n 다시 작성\n </Button>\n )}\n {isShowRecentSignatureButton && (\n <Button\n appearance=\"filled\"\n variant=\"neutral\"\n size=\"xsmall\"\n className=\"text-nowrap-i\"\n onClick={handleRecentSignatureLoad}\n disabled={isLoadingSignature}\n >\n {isLoadingSignature ? '불러오는 중...' : '최근 성명 불러오기'}\n </Button>\n )}\n </div>\n </div>\n\n {/* 서명 통계 정보 */}\n {/* {showStatistics && !isEmpty && strokeLengths.length > 0 && (\n <div className=\"mb-2 text-xs text-gray-600\">\n <span>총 길이: {Math.round(totalLineLength)}px</span>\n <span className=\"ml-4\">획 수: {strokeLengths.length}개</span>\n <span className=\"ml-4\">평균 길이: {Math.round(totalLineLength / strokeLengths.length)}px</span>\n </div>\n )} */}\n\n <div className={cx('form-signature', error && 'is-error')} ref={containerRef}>\n <canvas\n ref={canvasRef}\n width={canvasWidth}\n height={canvasHeight}\n className=\"border border-gray-200 rounded cursor-crosshair bg-white\"\n style={{ width: '100%', height: `${canvasHeight}px` }}\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n />\n </div>\n\n {error && (\n <div className={cx('error-msg-box')}>\n <span className={cx('error-msg')}>{errorMsg || '서명을 입력해 주세요.'}</span>\n </div>\n )}\n </div>\n );\n};\n","import { useRef, useState, useCallback } from 'react';\n\nimport type { FormSignatureRef, SignatureData } from './form-signature.types';\n\ninterface UseFormSignatureProps {\n onSubmit?: (data: SignatureData) => void;\n onError?: (error: Error) => void;\n onClear?: () => void;\n minLength?: number; // 최소 서명 길이 (기본값: 100px)\n}\n\nexport const useFormSignature = ({ onSubmit, onError, onClear, minLength = 100 }: UseFormSignatureProps = {}) => {\n const signatureRef = useRef<FormSignatureRef>(null);\n const [signatureData, setSignatureData] = useState<SignatureData | null>(null);\n const [isError, setIsError] = useState(false);\n const [errorMessage, setErrorMessage] = useState<string>('');\n const [isLoadedFromRecent, setIsLoadedFromRecent] = useState(false); // 최근 서명 불러옴 여부\n\n // 서명 데이터 업데이트 핸들러\n const handleSignatureSubmit = useCallback(\n (data: SignatureData) => {\n setSignatureData(data);\n // 최근 서명을 불러온 상태는 유지 (사용자가 추가로 그려도 불러온 서명으로 취급)\n // setIsLoadedFromRecent(false); <- 이 줄 제거\n // 서명 입력시에는 에러 상태 초기화만\n setIsError(false);\n setErrorMessage('');\n onSubmit?.(data);\n },\n [onSubmit]\n );\n\n // 서명 제출 (등록 버튼 클릭시에만 호출)\n const submit = useCallback(() => {\n try {\n if (!signatureRef.current?.isValid()) {\n setIsError(true);\n setErrorMessage('서명을 입력해 주세요.');\n\n return false;\n }\n\n const data = signatureRef.current.getSignatureData();\n if (!data) {\n setIsError(true);\n setErrorMessage('서명 데이터를 가져올 수 없습니다.');\n\n return false;\n }\n\n // 최근 서명을 불러온 경우 최소 길이 검증 건너뛰기\n if (!isLoadedFromRecent && data.totalLineLength < minLength) {\n setIsError(true);\n // 100px 이하일 경우 에러메세지 세팅\n setErrorMessage(`서명을 다시 확인해 주세요.`);\n\n return false;\n }\n\n // 성공시에만 에러 상태 초기화\n setIsError(false);\n setErrorMessage('');\n signatureRef.current.submit();\n\n return true;\n } catch (error) {\n const errorObj = error instanceof Error ? error : new Error('알 수 없는 오류가 발생했습니다.');\n setIsError(true);\n setErrorMessage(errorObj.message);\n onError?.(errorObj);\n\n return false;\n }\n }, [onError, minLength, isLoadedFromRecent]);\n\n // 서명 클리어\n const clear = useCallback(() => {\n signatureRef.current?.clear();\n setSignatureData(null);\n setIsError(false);\n setErrorMessage('');\n setIsLoadedFromRecent(false); // 클리어시 최근 서명 상태도 초기화\n onClear?.();\n }, [onClear]);\n\n // 최근 서명 불러오기\n const loadRecentSignature = useCallback(async (): Promise<string> => {\n // TODO: 서버에서 최근 서명 데이터 불러오기\n // 실제 구현시에는 API 호출로 대체\n\n // 최근 서명을 불러왔다고 표시\n setIsLoadedFromRecent(true);\n setIsError(false); // 에러 상태 초기화\n setErrorMessage('');\n\n return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAADmCAYAAAAtKeFcAAAAAXNSR0IArs4c6QAAH/dJREFUeF7t3U3vNFlZB+AbeRsYYVQmBsYYwYkxMRFN1I0BGXcaV6zcupeFfgKBLyALXLDR+AlgYeISEFzhQtQQYxBFhTHKxAHD8Cbqc4Yupp6m+9/1cs5dp6qvTp7MzDNd5+U6p0/Vr6ur6lXhRYAAAQIECBAgQIAAgSSBVyXVoxoCBAgQIECAAAECBAiEAGISECBAgAABAgQIECCQJiCApFGriAABAgQIECBAgAABAcQcIECAAAECBAgQIEAgTUAASaNWEQECBAgQIECAAAECAog5QIAAAQIECBAgQIBAmoAAkkatIgIECBAgQIAAAQIEBBBzgAABAgQIECBAgACBNAEBJI1aRQQIECBAgAABAgQICCDmAAECBAgQIECAAAECaQICSBq1iggQIECAAAECBAgQEEDMAQIECBAgQIAAAQIE0gQEkDRqFREgQIAAAQIECBAgIICYAwQIECBAgAABAgQIpAkIIGnUKiJAgAABAgQIECBAQAAxBwgQIECAAAECBAgQSBMQQNKoVUSAAAECBAgQIECAgABiDhAgQIAAAQIECBAgkCYggKRRq4gAAQIECBAgQIAAAQHEHCBAgAABAgQIECBAIE1AAEmjVhEBAgQIECBAgAABAgKIOUCAAAECBAgQIECAQJqAAJJGrSICBAgQIECAAAECBAQQc4AAAQIECBAgQIAAgTQBASSNWkUECBAgQIAAAQIECAgg5gABAgQIECBAgAABAmkCAkgatYoIECBAgAABAgQIEBBAzAECBAgQIECAAAECBNIEBJA0ahURIECAAAECBAgQICCAmAMECBAgQIAAAQIECKQJCCBp1CoiQIAAAQIECBAgQEAAMQcIECBAgAABAgQIEEgTEEDSqFVEgAABAgQIECBAgIAAYg4QIECAAAECBAgQIJAmIICkUauIAAECBAgQIECAAAEBxBwgQIAAAQIECBAgQCBNQABJo1YRAQIECBAgQIAAAQICiDlAgAABAgQIECBAgECagACSRq0iAgQIECBAgAABAgQEEHOAAAECBAgQIECAAIE0AQEkjVpFBAgQIECAAAECBAgIINvPgf87NeGJiPjW9s2p2oKhb+WfP1S1ZIURIECAAAECBAjsUkAA2X7YhoP0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AgQIECBAgMAPCgggZgUBAgQIECBAgAABAmkCAkgatYoIECBAgAABAgQIEBBAzAECBAgQIECAAAECBNIEBJA0ahURIECAAAECBAgQICCAmAMECBAgQIAAAQIECKQJCCBp1CoiQIAAAQIECBAgQEAAMQcIECBAgAABAgQIEEgTEEDSqFVEgAABAgQIECBAgIAAYg4QIECAAAECBAgQIJAmIICkUauIAAECBAgQIECAAAEBxBwgQIAAAQIECBAgQCBNQABJo1YRAQIECBAgQIAAAQICiDlAgAABAgQIECBAgECagACSRq0iAgQIECBAgAABAgQEEHOAAAECBAgQIECAAIE0AQEkjVpFBAgQIECAAAECBAgIIOYAAQIECBAgQIAAAQJpAgJIGrWKCBAgQIAAAQIECBAQQMwBAgQIECBAgAABAgTSBASQNGoVESBAgAABAgQIECAggJgDBAgQIECAAAECBAikCQggadQqIkCAAAECBAgQIEBAADEHCBAgQIAAAQIECBBIExBA0qhVRIAAAQIECBAgQICAAGIOECBAgAABAgQIECCQJiCApFGriAABAgQIECBAgAABAcQcIECAAAECBAgQIEAgTUAASaNWEQECBAgQIECAAAECAog5QIAAAQIECBAgQIBAmoAAkkatIgIECBAgQIAAAQIEBBBzgAABAgQIECBAgACBNAEBJI1aRQQIECBAgAABAgQICCDmAAECBAgQIECAAAECaQICSBq1iggQIECAAAECBAgQEEDMAQIECBAgQIAAAQIE0gQEkDRqFREgQIAAAQIECBAgIICYAwQIECBAgAABAgQIpAkIIGnUKiJAgAABAgQIECBAQAAxBwgQIECAAAECBAgQSBMQQNKoVUSAAAECBAgQIECAgABiDhAgQIAAAQIECBAgkCYggKRRq4gAAQIECBAgQIAAAQHEHCBAgAABAgQIECBAIE1AAEmjVhEBAgQIECBAgAABAgKIOUCAAAECBAgQIECAQJqAAJJGrSICBAgQIECAAAECBAQQc4AAAQIECBAgQIAAgTQBASSNWkUECBAgQIAAAQIECAgg5gABAgQIECBAgAABAmkCAkgatYoIECBAgAABAgQIEBBAzAECBAgQIECAAAECBNIEBJA0ahURIECAAAECBAgQICCAmAMECBAgQIAAAQIECKQJCCBp1CoiQIAAAQIECBAgQEAAMQcIECBAgAABAgQIEEgTEEDSqFVEgAABAgQIECBAgIAAYg4QIECAAAECBAgQIJAmIICkUauIAAECBAgQIECAAAEBxBwgQIAAAQIECBAgQCBNQABJo1YRAQIECBAgQIAAAQICiDlAgAABAgQIECBAgECagACSRq0iAgQIECBAgAABAgQEEHOAAAECBAgQIECAAIE0AQEkjVpFBAgQIECAAAECBAgIIOYAAQIECBAgQIAAAQJpAgJIGrWKCBAgQIAAAQIECBAQQMwBAgQIECBAgAABAgTSBASQNGoVESBAgAABAgQIECAggJgDBAgQIECAAAECBAikCQggadQqIkCAAAECBAgQIEBAADEHCBAgQIAAAQIECBBIExBA0qhVRIAAAQIECBAgQICAAGIOECBAgAABAgQIECCQJiCApFGriAABAgQIECBAgAABAcQcIECAAAECBAgQIEAgTUAASaNWEQECBAgQIECAAAECAog5QIAAAQIECBAgQIBAmoAAkkatIgIECBAgQIAAAQIEBBBzgAABAgQIECBAgACBNAEBJI1aRQQIECBAgAABAgQICCDmAAECBAgQIECAAAECaQICSBq1iggQIECAAAECBAgQEEDMAQIECBAgQIAAAQIE0gQEkDRqFREgQIAAAQIECBAgIICYAwQIECBAgAABAgQIpAkIIGnUKiJAgAABAgQIECBAQAAxBwgQIECAAAECBAgQSBMQQNKoVUSAAAECBAgQIECAgABiDhAgQIAAAQIECBAgkCYggKRRq4gAAQIECBAgQIAAAQHEHCBAgAABAgQIECBAIE1AAEmjVhEBAgQIECBAgAABAgKIOUCAAAECBAgQIECAQJqAAJJGrSICBAgQIECAAAECBAQQc4AAAQIECBAgQIAAgTQBASSNWkUECBAgQIAAAQIECAgg5gABAgQIECBAgAABAmkCAkgatYoIECBAgAABAgQIEBBAzAECBAgQIECAAAECBNIEBJA0ahURIECAAAECBAgQICCAmAMECBAgQIAAAQIECKQJCCBp1CoiQIAAAQIECBAgQEAAMQcIECBAgAABAgQIEEgTEEDSqFVEgAABAgQIECBAgIAAYg4QIECAAAECBAgQIJAmIICkUauIAAECBAgQIECAAAEBxBwgQIAAAQIECBAgQCBNQABJo1YRAQIECBAgQIAAAQICiDlAgAABAgQIECBAgECagACSRq0iAgQIECBAgAABAgQEEHOAAAECBAgQIECAAIE0AQEkjVpFBAgQIECAAAECBAgIIOYAAQIECBAgQIAAAQJpAgJIGrWKCBAgQIAAAQIECBAQQMwBAgQIECBAgAABAgTSBASQNGoVESBAgAABAgQIECDw/zxD0hRoJglmAAAAAElFTkSuQmCC';\n }, []);\n\n // 유효성 검사 (서명 존재 여부 + 최소 길이)\n const isValid = useCallback(() => {\n const basicValid = signatureRef.current?.isValid() ?? false;\n if (!basicValid) {\n return false;\n }\n\n const data = signatureRef.current?.getSignatureData();\n if (!data) {\n return false;\n }\n\n // 최근 서명을 불러온 경우 최소 길이 검증 건너뛰기\n if (isLoadedFromRecent) {\n return true;\n }\n\n return data.totalLineLength >= minLength;\n }, [minLength, isLoadedFromRecent]);\n\n // 서명 데이터 가져오기\n const getSignatureData = useCallback(() => {\n return signatureRef.current?.getSignatureData() ?? null;\n }, []);\n\n // 서명 변경 시 호출 (일반적인 그리기)\n const handleSignatureChange = useCallback(() => {\n setIsError(false);\n setErrorMessage('');\n // 일반적인 서명 변경시에는 최근 서명 상태 유지\n }, []);\n\n // 다시 작성 시 호출 (완전 초기화)\n const handleReset = useCallback(() => {\n setSignatureData(null);\n setIsError(false);\n setErrorMessage('');\n setIsLoadedFromRecent(false); // 다시 작성시에는 최근 서명 상태 해제\n onClear?.();\n }, [onClear]);\n\n // 에러 메시지 가져오기\n const getErrorMessage = useCallback(() => {\n return errorMessage;\n }, [errorMessage]);\n\n return {\n // ref\n signatureRef,\n\n // state\n signatureData,\n isError,\n isLoadedFromRecent, // 최근 서명 불러옴 여부 노출\n\n // actions\n submit,\n clear,\n loadRecentSignature,\n handleSignatureChange, // 일반적인 서명 변경\n handleReset, // 다시 작성\n handleSignatureSubmit,\n\n // utilities\n isValid,\n getSignatureData,\n getErrorMessage\n };\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 } 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?: 'single' | 'multiple';\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')}>{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"],"names":["cx","jsxs","Table","jsx","flexRender","useState","mode","getPaginationRowModel","useReactTable","getCoreRowModel","getSortedRowModel","useController","DatePicker","SegmentGroup","FormField","styles","useRef","useEffect","useCallback","error","useImperativeHandle","Button","Icon"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/bind.js","../src/data-table/data-table.tsx","../src/data-table/use-table.ts","../src/form/form-date-picker.tsx","../src/form/form-segment.tsx","../src/form/form-text-field.tsx","../src/form/form-signautre/form-signature.tsx","../src/form/form-signautre/use-form-signature.tsx","../src/step-indicator/step-indicator.tsx","../src/camera/attachment.tsx","../src/camera/resize.ts","../src/camera/use-camera.tsx","../src/paint/index.ts"],"sourcesContent":["/*!\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 { flexRender, type RowData } from '@tanstack/react-table';\nimport classNames from 'classnames/bind';\nimport { Table } from 'sales-frontend-design-system';\n\nimport styles from './data-table.module.scss';\n\nimport type { DataTableProps } from './data-table.types';\n\nconst cx = classNames.bind(styles);\n\nexport const DataTable = <T extends RowData>({ table, isError, isLoading, msgText, ...props }: DataTableProps<T>) => {\n return (\n <Table\n {...props}\n selectable\n style={\n {\n // minWidth: table.getCenterTotalSize() // 테이블 전체 너비를 컬럼 너비의 합으로 설정\n }\n }\n >\n <thead>\n {table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <th\n key={header.id}\n colSpan={header.colSpan}\n className={cx({\n 'is-resizing': header.column.getIsResizing() // 3. 리사이징 중일 때 클래스 추가\n })}\n style={\n header.column.columnDef.size\n ? { width: header.getSize(), minWidth: header.getSize(), maxWidth: header.getSize() } // 4. TanStack이 계산한 너비를 직접 적용\n : undefined\n }\n >\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n\n {/* 컬럼 리사이징 핸들 */}\n {header.column.getCanResize() && (\n <div\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n className={cx('resize-handle')}\n />\n )}\n </th>\n ))}\n </tr>\n ))}\n </thead>\n\n <tbody>\n {!isLoading && !isError && table.getRowModel().rows.length > 0 ? (\n table.getRowModel().rows.map((row) => (\n // TODO aria-disabled 스타일을 어떻게 적용할 것인지?\n <tr key={row.id} aria-selected={row.getIsSelected()}>\n {row.getVisibleCells().map((cell) => (\n <td\n key={cell.id}\n style={\n cell.column.columnDef.size\n ? {\n width: cell.column.getSize(),\n minWidth: cell.column.getSize(),\n maxWidth: cell.column.getSize()\n }\n : undefined\n }\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n ))}\n </tr>\n ))\n ) : (\n <tr>\n <td className={cx('feedback-cell')} colSpan={table.getVisibleLeafColumns().length}>\n {isLoading ? <div>Loading...</div> : <div>{msgText || (isError ? 'Error' : 'No data')}</div>}\n </td>\n </tr>\n )}\n </tbody>\n </Table>\n );\n};\n","'use client';\n\nimport React, { useState } from 'react';\n\nimport {\n type PaginationState,\n type RowData,\n type RowSelectionState,\n type TableOptions,\n getCoreRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table';\n\ntype RenderingMode = 'CSR' | 'SSR';\n\nexport const useTable = <TData extends RowData>({\n data,\n columns,\n defaultColumn = { size: 150, enableResizing: true },\n initialState,\n onSortingChange,\n enableRowSelection,\n enableColumnResizing,\n mode = 'SSR',\n meta,\n debug\n}: Pick<\n TableOptions<TData>,\n | 'data'\n | 'columns'\n | 'initialState'\n | 'onSortingChange'\n | 'enableRowSelection'\n | 'enableColumnResizing'\n | 'defaultColumn'\n | 'meta'\n> & {\n mode?: RenderingMode;\n debug?: boolean;\n}) => {\n const [sorting, setSorting] = React.useState(initialState?.sorting || []);\n const [rowSelection, setRowSelection] = useState<RowSelectionState>(initialState?.rowSelection || {});\n const [pagination, setPagination] = React.useState((initialState?.pagination as PaginationState) || {});\n const [columnVisibility, setColumnVisibility] = React.useState(initialState?.columnVisibility || {});\n\n const getOption = (mode: RenderingMode): Partial<TableOptions<TData>> => {\n if (mode === 'SSR') {\n return {\n manualSorting: true,\n manualPagination: true,\n onSortingChange\n };\n } else {\n return {\n getPaginationRowModel: getPaginationRowModel(),\n onPaginationChange: setPagination,\n onSortingChange: setSorting\n };\n }\n };\n\n const table = useReactTable({\n meta,\n data,\n columns,\n columnResizeMode: 'onChange',\n defaultColumn,\n enableColumnResizing,\n enableRowSelection,\n initialState,\n state: {\n sorting,\n rowSelection,\n pagination,\n columnVisibility\n },\n onRowSelectionChange: setRowSelection,\n onColumnVisibilityChange: setColumnVisibility,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n ...getOption(mode),\n debugTable: debug,\n debugHeaders: debug,\n debugColumns: debug\n });\n\n return table;\n};\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { DatePicker, type DatePickerHtmlProps } from 'sales-frontend-design-system';\n\nexport const FormDatePicker = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & DatePickerHtmlProps) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n const baseProps: DatePickerHtmlProps = {\n ...props,\n id: field.name,\n defaultValue: field.value,\n disabled: field.disabled,\n error: fieldState.invalid,\n onBlur: field.onBlur\n };\n\n // if (props.mode === 'range') {\n // return (\n // <DatePicker\n // {...baseProps}\n // onValueChange={(selected: PeriodDate) => {\n // if (props.mode === 'range') {\n // }\n // field.onChange(selected);\n // // props.onValueChange?.(selected);\n // }}\n // />\n // );\n // }\n\n return <DatePicker {...baseProps} />;\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'> & SegmentGroupHtmlProps) => {\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 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=\"medium\"\n autoComplete=\"off\"\n name={field.name}\n value={field.value ?? ''}\n disabled={field.disabled}\n error={fieldState.invalid || error}\n onChange={(e) => {\n field.onChange(e);\n onChange?.(e);\n }}\n onBlur={(e) => {\n field.onBlur();\n onBlur?.(e);\n }}\n rootProps={{\n ...rootProps,\n onClear: () => {\n field.onChange('');\n rootProps?.onClear?.();\n }\n }}\n />\n );\n};\n","import React, { useRef, useState, useEffect, useImperativeHandle, useCallback } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { Button } from 'sales-frontend-design-system';\n\nimport styles from './form-signature.module.scss';\n\nimport type { FormSignatureProps, SignatureData } from './form-signature.types';\n\nconst cx = classNames.bind(styles);\n\nexport const FormSignature = ({\n label,\n error,\n errorMsg,\n onSubmit,\n onRecentSignatureLoad,\n onChangeSignature,\n onReset,\n isShowRecentSignatureButton,\n isShowResetButton,\n ref,\n canvasWidth = 632,\n canvasHeight = 230\n}: FormSignatureProps) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const [isDrawing, setIsDrawing] = useState(false);\n const [isEmpty, setIsEmpty] = useState(true);\n const [signatureData, setSignatureData] = useState('');\n const [isLoadingSignature, setIsLoadingSignature] = useState(false);\n\n // 마우스 버튼 상태 추적 (캔버스 밖에서도 추적)\n const [isMousePressed, setIsMousePressed] = useState(false);\n\n // 선의 길이 측정을 위한 상태\n const [totalLineLength, setTotalLineLength] = useState(0);\n const [lastPoint, setLastPoint] = useState<{ x: number; y: number } | null>(null);\n const [strokeLengths, setStrokeLengths] = useState<number[]>([]);\n const [currentStrokeLength, setCurrentStrokeLength] = useState(0);\n\n // Canvas 스타일 설정\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n\n // Canvas 초기 설정\n ctx.strokeStyle = '#000000';\n ctx.lineWidth = Math.max(1, canvasWidth / 400); // 크기에 비례한 선 두께\n ctx.lineCap = 'round';\n ctx.lineJoin = 'round';\n }, [canvasWidth]);\n\n // 전역 마우스 이벤트 리스너 등록 (마우스 버튼 상태 추적)\n useEffect(() => {\n const handleGlobalMouseUp = () => {\n setIsMousePressed(false);\n if (isDrawing) {\n stopDrawing();\n }\n };\n\n document.addEventListener('mouseup', handleGlobalMouseUp);\n\n return () => {\n document.removeEventListener('mouseup', handleGlobalMouseUp);\n };\n }, [isDrawing]);\n\n // 캔버스 크기와 실제 렌더링 크기 간의 비율 계산\n const getCanvasCoordinates = useCallback((e: React.MouseEvent<HTMLCanvasElement>) => {\n const canvas = canvasRef.current;\n if (!canvas) {\n return { x: 0, y: 0 };\n }\n\n const rect = canvas.getBoundingClientRect();\n const scaleX = canvas.width / rect.width;\n const scaleY = canvas.height / rect.height;\n\n return {\n x: (e.clientX - rect.left) * scaleX,\n y: (e.clientY - rect.top) * scaleY\n };\n }, []);\n\n // 두 점 사이의 거리 계산\n const calculateDistance = useCallback((point1: { x: number; y: number }, point2: { x: number; y: number }) => {\n return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));\n }, []);\n\n // 그리기 시작\n const startDrawing = useCallback(\n (e: React.MouseEvent<HTMLCanvasElement>) => {\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n\n const { x, y } = getCanvasCoordinates(e);\n\n setIsDrawing(true);\n setIsMousePressed(true);\n setIsEmpty(false);\n setLastPoint({ x, y });\n setCurrentStrokeLength(0);\n\n ctx.beginPath();\n ctx.moveTo(x, y);\n },\n [getCanvasCoordinates]\n );\n\n // 그리기\n const draw = useCallback(\n (e: React.MouseEvent<HTMLCanvasElement>) => {\n if (!isDrawing) {\n return;\n }\n\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n\n const { x, y } = getCanvasCoordinates(e);\n const currentPoint = { x, y };\n\n // 이전 점과 현재 점 사이의 거리 계산\n if (lastPoint) {\n const distance = calculateDistance(lastPoint, currentPoint);\n\n // 최소 거리 임계값 추가 (너무 작은 움직임은 무시)\n if (distance > 0.5) {\n setCurrentStrokeLength((prev) => prev + distance);\n setTotalLineLength((prev) => prev + distance);\n }\n }\n\n ctx.lineTo(x, y);\n ctx.stroke();\n\n // 다음 계산을 위해 현재 점을 저장\n setLastPoint(currentPoint);\n\n // 서명 데이터 저장\n const data = canvas.toDataURL();\n setSignatureData(data);\n\n onChangeSignature?.();\n },\n [isDrawing, getCanvasCoordinates, calculateDistance, lastPoint, onChangeSignature]\n );\n\n // 그리기 중지\n const stopDrawing = useCallback(() => {\n // 실제로 그리기 상태였고, 획 길이가 있을 때만 추가\n if (isDrawing && currentStrokeLength > 0) {\n setStrokeLengths((prev) => [...prev, currentStrokeLength]);\n }\n\n setIsDrawing(false);\n setLastPoint(null);\n }, [isDrawing, currentStrokeLength]);\n\n // 마우스가 캔버스로 다시 들어올 때 처리\n const handleMouseEnter = useCallback(\n (e: React.MouseEvent<HTMLCanvasElement>) => {\n // 마우스 버튼이 여전히 눌려있는 상태라면 그리기 재개\n if (isMousePressed && !isDrawing) {\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n\n const { x, y } = getCanvasCoordinates(e);\n\n setIsDrawing(true);\n setLastPoint({ x, y });\n\n // 새로운 패스 시작 (이전 위치에서 끊어진 상태로)\n ctx.beginPath();\n ctx.moveTo(x, y);\n }\n },\n [isMousePressed, isDrawing, getCanvasCoordinates]\n );\n\n // 마우스가 캔버스를 벗어날 때 처리\n const handleMouseLeave = useCallback(() => {\n // 그리기 상태만 중지하고 마우스 버튼 상태는 유지\n if (isDrawing) {\n setIsDrawing(false);\n setLastPoint(null);\n }\n }, [isDrawing]);\n\n // 캔버스 클리어\n const clearSignature = useCallback(() => {\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n\n ctx.clearRect(0, 0, canvasWidth, canvasHeight);\n setIsEmpty(true);\n setSignatureData('');\n setTotalLineLength(0);\n setLastPoint(null);\n setStrokeLengths([]);\n setCurrentStrokeLength(0);\n }, [canvasWidth, canvasHeight]);\n\n // 서명 이미지를 캔버스에 로드\n const loadSignatureToCanvas = useCallback(\n (imageDataURL: string): Promise<void> => {\n return new Promise((resolve, reject) => {\n const canvas = canvasRef.current;\n if (!canvas) {\n reject(new Error('Canvas not found'));\n\n return;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n reject(new Error('Canvas context not found'));\n\n return;\n }\n\n const img = new Image();\n\n img.onload = () => {\n // 기존 캔버스 클리어\n ctx.clearRect(0, 0, canvasWidth, canvasHeight);\n\n // 이미지를 캔버스에 그리기\n ctx.drawImage(img, 0, 0, canvasWidth, canvasHeight);\n\n // 상태 업데이트\n setIsEmpty(false);\n setSignatureData(imageDataURL);\n\n // 불러온 서명은 통계 정보 초기화 (실제 그린 것이 아니므로)\n setTotalLineLength(0);\n setStrokeLengths([]);\n setCurrentStrokeLength(0);\n setLastPoint(null);\n\n resolve();\n };\n\n img.onerror = () => {\n reject(new Error('Failed to load signature image'));\n };\n\n img.src = imageDataURL;\n });\n },\n [canvasWidth, canvasHeight]\n );\n\n // 유효성 검사\n const validateForm = useCallback(() => {\n return !(!signatureData || isEmpty);\n }, [signatureData, isEmpty]);\n\n // 서명 데이터 생성\n const getSignatureDataObject = useCallback((): SignatureData | null => {\n if (!signatureData || isEmpty) {\n return null;\n }\n\n return {\n signature: signatureData,\n totalLineLength: Math.round(totalLineLength),\n strokeCount: strokeLengths.length,\n strokeLengths: strokeLengths.map((length) => Math.round(length)),\n averageStrokeLength: strokeLengths.length > 0 ? Math.round(totalLineLength / strokeLengths.length) : 0\n };\n }, [signatureData, isEmpty, totalLineLength, strokeLengths]);\n\n // 제출 처리\n const handleSubmit = useCallback(() => {\n if (!validateForm()) {\n return;\n }\n\n const data = getSignatureDataObject();\n if (data) {\n console.log('제출된 데이터:', data);\n onSubmit(data);\n }\n }, [validateForm, getSignatureDataObject, onSubmit]);\n\n // 리셋 처리\n const handleReset = useCallback(() => {\n clearSignature();\n onReset?.(); // 다시 작성 콜백 호출\n }, [clearSignature, onReset]);\n\n // 최근 서명 불러오기\n const handleRecentSignatureLoad = useCallback(async () => {\n if (!onRecentSignatureLoad) {\n return;\n }\n\n try {\n setIsLoadingSignature(true);\n\n const loadedSignature = await onRecentSignatureLoad();\n\n if (loadedSignature) {\n await loadSignatureToCanvas(loadedSignature);\n console.log('최근 서명을 성공적으로 불러왔습니다.');\n } else {\n alert('불러올 최근 서명이 없습니다.');\n }\n } catch (error) {\n console.error('최근 서명 불러오기 실패:', error);\n alert('최근 서명을 불러오는데 실패했습니다.');\n } finally {\n setIsLoadingSignature(false);\n }\n }, [onRecentSignatureLoad, loadSignatureToCanvas]);\n\n // 외부에서 호출할 수 있는 메서드들을 노출\n useImperativeHandle(\n ref,\n () => ({\n submit: handleSubmit,\n clear: clearSignature,\n getSignatureData: getSignatureDataObject,\n isValid: validateForm\n }),\n [handleSubmit, clearSignature, getSignatureDataObject, validateForm]\n );\n\n return (\n <div>\n <div className={cx('form-label')}>\n <label className=\"typo-subtitle3 text-body_1\">{label}</label>\n <div className={cx('form-label-button-box')}>\n {isShowResetButton && (\n <Button\n appearance=\"filled\"\n variant=\"neutral\"\n size=\"xsmall\"\n onClick={handleReset}\n className=\"text-nowrap-i\"\n disabled={isEmpty}\n >\n 다시 작성\n </Button>\n )}\n {isShowRecentSignatureButton && (\n <Button\n appearance=\"filled\"\n variant=\"neutral\"\n size=\"xsmall\"\n className=\"text-nowrap-i\"\n onClick={handleRecentSignatureLoad}\n disabled={isLoadingSignature}\n >\n {isLoadingSignature ? '불러오는 중...' : '최근 성명 불러오기'}\n </Button>\n )}\n </div>\n </div>\n\n {/* 서명 통계 정보 */}\n {/* {showStatistics && !isEmpty && strokeLengths.length > 0 && (\n <div className=\"mb-2 text-xs text-gray-600\">\n <span>총 길이: {Math.round(totalLineLength)}px</span>\n <span className=\"ml-4\">획 수: {strokeLengths.length}개</span>\n <span className=\"ml-4\">평균 길이: {Math.round(totalLineLength / strokeLengths.length)}px</span>\n </div>\n )} */}\n\n <div className={cx('form-signature', error && 'is-error')} ref={containerRef}>\n <canvas\n ref={canvasRef}\n width={canvasWidth}\n height={canvasHeight}\n className=\"border border-gray-200 rounded cursor-crosshair bg-white\"\n style={{ width: '100%', height: `${canvasHeight}px` }}\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n />\n </div>\n\n {error && (\n <div className={cx('error-msg-box')}>\n <span className={cx('error-msg')}>{errorMsg || '서명을 입력해 주세요.'}</span>\n </div>\n )}\n </div>\n );\n};\n","import { useRef, useState, useCallback } from 'react';\n\nimport type { FormSignatureRef, SignatureData } from './form-signature.types';\n\ninterface UseFormSignatureProps {\n onSubmit?: (data: SignatureData) => void;\n onError?: (error: Error) => void;\n onClear?: () => void;\n minLength?: number; // 최소 서명 길이 (기본값: 100px)\n}\n\nexport const useFormSignature = ({ onSubmit, onError, onClear, minLength = 100 }: UseFormSignatureProps = {}) => {\n const signatureRef = useRef<FormSignatureRef>(null);\n const [signatureData, setSignatureData] = useState<SignatureData | null>(null);\n const [isError, setIsError] = useState(false);\n const [errorMessage, setErrorMessage] = useState<string>('');\n const [isLoadedFromRecent, setIsLoadedFromRecent] = useState(false); // 최근 서명 불러옴 여부\n\n // 서명 데이터 업데이트 핸들러\n const handleSignatureSubmit = useCallback(\n (data: SignatureData) => {\n setSignatureData(data);\n // 최근 서명을 불러온 상태는 유지 (사용자가 추가로 그려도 불러온 서명으로 취급)\n // setIsLoadedFromRecent(false); <- 이 줄 제거\n // 서명 입력시에는 에러 상태 초기화만\n setIsError(false);\n setErrorMessage('');\n onSubmit?.(data);\n },\n [onSubmit]\n );\n\n // 서명 제출 (등록 버튼 클릭시에만 호출)\n const submit = useCallback(() => {\n try {\n if (!signatureRef.current?.isValid()) {\n setIsError(true);\n setErrorMessage('서명을 입력해 주세요.');\n\n return false;\n }\n\n const data = signatureRef.current.getSignatureData();\n if (!data) {\n setIsError(true);\n setErrorMessage('서명 데이터를 가져올 수 없습니다.');\n\n return false;\n }\n\n // 최근 서명을 불러온 경우 최소 길이 검증 건너뛰기\n if (!isLoadedFromRecent && data.totalLineLength < minLength) {\n setIsError(true);\n // 100px 이하일 경우 에러메세지 세팅\n setErrorMessage(`서명을 다시 확인해 주세요.`);\n\n return false;\n }\n\n // 성공시에만 에러 상태 초기화\n setIsError(false);\n setErrorMessage('');\n signatureRef.current.submit();\n\n return true;\n } catch (error) {\n const errorObj = error instanceof Error ? error : new Error('알 수 없는 오류가 발생했습니다.');\n setIsError(true);\n setErrorMessage(errorObj.message);\n onError?.(errorObj);\n\n return false;\n }\n }, [onError, minLength, isLoadedFromRecent]);\n\n // 서명 클리어\n const clear = useCallback(() => {\n signatureRef.current?.clear();\n setSignatureData(null);\n setIsError(false);\n setErrorMessage('');\n setIsLoadedFromRecent(false); // 클리어시 최근 서명 상태도 초기화\n onClear?.();\n }, [onClear]);\n\n // 최근 서명 불러오기\n const loadRecentSignature = useCallback(async (): Promise<string> => {\n // TODO: 서버에서 최근 서명 데이터 불러오기\n // 실제 구현시에는 API 호출로 대체\n\n // 최근 서명을 불러왔다고 표시\n setIsLoadedFromRecent(true);\n setIsError(false); // 에러 상태 초기화\n setErrorMessage('');\n\n return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAADmCAYAAAAtKeFcAAAAAXNSR0IArs4c6QAAH/dJREFUeF7t3U3vNFlZB+AbeRsYYVQmBsYYwYkxMRFN1I0BGXcaV6zcupeFfgKBLyALXLDR+AlgYeISEFzhQtQQYxBFhTHKxAHD8Cbqc4Yupp6m+9/1cs5dp6qvTp7MzDNd5+U6p0/Vr6ur6lXhRYAAAQIECBAgQIAAgSSBVyXVoxoCBAgQIECAAAECBAiEAGISECBAgAABAgQIECCQJiCApFGriAABAgQIECBAgAABAcQcIECAAAECBAgQIEAgTUAASaNWEQECBAgQIECAAAECAog5QIAAAQIECBAgQIBAmoAAkkatIgIECBAgQIAAAQIEBBBzgAABAgQIECBAgACBNAEBJI1aRQQIECBAgAABAgQICCDmAAECBAgQIECAAAECaQICSBq1iggQIECAAAECBAgQEEDMAQIECBAgQIAAAQIE0gQEkDRqFREgQIAAAQIECBAgIICYAwQIECBAgAABAgQIpAkIIGnUKiJAgAABAgQIECBAQAAxBwgQIECAAAECBAgQSBMQQNKoVUSAAAECBAgQIECAgABiDhAgQIAAAQIECBAgkCYggKRRq4gAAQIECBAgQIAAAQHEHCBAgAABAgQIECBAIE1AAEmjVhEBAgQIECBAgAABAgKIOUCAAAECBAgQIECAQJqAAJJGrSICBAgQIECAAAECBAQQc4AAAQIECBAgQIAAgTQBASSNWkUECBAgQIAAAQIECAgg5gABAgQIECBAgAABAmkCAkgatYoIECBAgAABAgQIEBBAzAECBAgQIECAAAECBNIEBJA0ahURIECAAAECBAgQICCAmAMECBAgQIAAAQIECKQJCCBp1CoiQIAAAQIECBAgQEAAMQcIECBAgAABAgQIEEgTEEDSqFVEgAABAgQIECBAgIAAYg4QIECAAAECBAgQIJAmIICkUauIAAECBAgQIECAAAEBxBwgQIAAAQIECBAgQCBNQABJo1YRAQIECBAgQIAAAQICiDlAgAABAgQIECBAgECagACSRq0iAgQIECBAgAABAgQEEHOAAAECBAgQIECAAIE0AQEkjVpFBAgQIECAAAECBAgIINvPgf87NeGJiPjW9s2p2oKhb+WfP1S1ZIURIECAAAECBAjsUkAA2X7YhoP0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AgQIECBAgMAPCgggZgUBAgQIECBAgAABAmkCAkgatYoIECBAgAABAgQIEBBAzAECBAgQIECAAAECBNIEBJA0ahURIECAAAECBAgQICCAmAMECBAgQIAAAQIECKQJCCBp1CoiQIAAAQIECBAgQEAAMQcIECBAgAABAgQIEEgTEEDSqFVEgAABAgQIECBAgIAAYg4QIECAAAECBAgQIJAmIICkUauIAAECBAgQIECAAAEBxBwgQIAAAQIECBAgQCBNQABJo1YRAQIECBAgQIAAAQICiDlAgAABAgQIECBAgECagACSRq0iAgQIECBAgAABAgQEEHOAAAECBAgQIECAAIE0AQEkjVpFBAgQIECAAAECBAgIIOYAAQIECBAgQIAAAQJpAgJIGrWKCBAgQIAAAQIECBAQQMwBAgQIECBAgAABAgTSBASQNGoVESBAgAABAgQIECAggJgDBAgQIECAAAECBAikCQggadQqIkCAAAECBAgQIEBAADEHCBAgQIAAAQIECBBIExBA0qhVRIAAAQIECBAgQICAAGIOECBAgAABAgQIECCQJiCApFGriAABAgQIECBAgAABAcQcIECAAAECBAgQIEAgTUAASaNWEQECBAgQIECAAAECAog5QIAAAQIECBAgQIBAmoAAkkatIgIECBAgQIAAAQIEBBBzgAABAgQIECBAgACBNAEBJI1aRQQIECBAgAABAgQICCDmAAECBAgQIECAAAECaQICSBq1iggQIECAAAECBAgQEEDMAQIECBAgQIAAAQIE0gQEkDRqFREgQIAAAQIECBAgIICYAwQIECBAgAABAgQIpAkIIGnUKiJAgAABAgQIECBAQAAxBwgQIECAAAECBAgQSBMQQNKoVUSAAAECBAgQIECAgABiDhAgQIAAAQIECBAgkCYggKRRq4gAAQIECBAgQIAAAQHEHCBAgAABAgQIECBAIE1AAEmjVhEBAgQIECBAgAABAgKIOUCAAAECBAgQIECAQJqAAJJGrSICBAgQIECAAAECBAQQc4AAAQIECBAgQIAAgTQBASSNWkUECBAgQIAAAQIECAgg5gABAgQIECBAgAABAmkCAkgatYoIECBAgAABAgQIEBBAzAECBAgQIECAAAECBNIEBJA0ahURIECAAAECBAgQICCAmAMECBAgQIAAAQIECKQJCCBp1CoiQIAAAQIECBAgQEAAMQcIECBAgAABAgQIEEgTEEDSqFVEgAABAgQIECBAgIAAYg4QIECAAAECBAgQIJAmIICkUauIAAECBAgQIECAAAEBxBwgQIAAAQIECBAgQCBNQABJo1YRAQIECBAgQIAAAQICiDlAgAABAgQIECBAgECagACSRq0iAgQIECBAgAABAgQEEHOAAAECBAgQIECAAIE0AQEkjVpFBAgQIECAAAECBAgIIOYAAQIECBAgQIAAAQJpAgJIGrWKCBAgQIAAAQIECBAQQMwBAgQIECBAgAABAgTSBASQNGoVESBAgAABAgQIECAggJgDBAgQIECAAAECBAikCQggadQqIkCAAAECBAgQIEBAADEHCBAgQIAAAQIECBBIExBA0qhVRIAAAQIECBAgQICAAGIOECBAgAABAgQIECCQJiCApFGriAABAgQIECBAgAABAcQcIECAAAECBAgQIEAgTUAASaNWEQECBAgQIECAAAECAog5QIAAAQIECBAgQIBAmoAAkkatIgIECBAgQIAAAQIEBBBzgAABAgQIECBAgACBNAEBJI1aRQQIECBAgAABAgQICCDmAAECBAgQIECAAAECaQICSBq1iggQIECAAAECBAgQEEDMAQIECBAgQIAAAQIE0gQEkDRqFREgQIAAAQIECBAgIICYAwQIECBAgAABAgQIpAkIIGnUKiJAgAABAgQIECBAQAAxBwgQIECAAAECBAgQSBMQQNKoVUSAAAECBAgQIECAgABiDhAgQIAAAQIECBAgkCYggKRRq4gAAQIECBAgQIAAAQHEHCBAgAABAgQIECBAIE1AAEmjVhEBAgQIECBAgAABAgKIOUCAAAECBAgQIECAQJqAAJJGrSICBAgQIECAAAECBAQQc4AAAQIECBAgQIAAgTQBASSNWkUECBAgQIAAAQIECAgg5gABAgQIECBAgAABAmkCAkgatYoIECBAgAABAgQIEBBAzAECBAgQIECAAAECBNIEBJA0ahURIECAAAECBAgQICCAmAMECBAgQIAAAQIECKQJCCBp1CoiQIAAAQIECBAgQEAAMQcIECBAgAABAgQIEEgTEEDSqFVEgAABAgQIECBAgIAAYg4QIECAAAECBAgQIJAmIICkUauIAAECBAgQIECAAAEBxBwgQIAAAQIECBAgQCBNQABJo1YRAQIECBAgQIAAAQICiDlAgAABAgQIECBAgECagACSRq0iAgQIECBAgAABAgQEEHOAAAECBAgQIECAAIE0AQEkjVpFBAgQIECAAAECBAgIIOYAAQIECBAgQIAAAQJpAgJIGrWKCBAgQIAAAQIECBAQQMwBAgQIECBAgAABAgTSBASQNGoVESBAgAABAgQIECDw/zxD0hRoJglmAAAAAElFTkSuQmCC';\n }, []);\n\n // 유효성 검사 (서명 존재 여부 + 최소 길이)\n const isValid = useCallback(() => {\n const basicValid = signatureRef.current?.isValid() ?? false;\n if (!basicValid) {\n return false;\n }\n\n const data = signatureRef.current?.getSignatureData();\n if (!data) {\n return false;\n }\n\n // 최근 서명을 불러온 경우 최소 길이 검증 건너뛰기\n if (isLoadedFromRecent) {\n return true;\n }\n\n return data.totalLineLength >= minLength;\n }, [minLength, isLoadedFromRecent]);\n\n // 서명 데이터 가져오기\n const getSignatureData = useCallback(() => {\n return signatureRef.current?.getSignatureData() ?? null;\n }, []);\n\n // 서명 변경 시 호출 (일반적인 그리기)\n const handleSignatureChange = useCallback(() => {\n setIsError(false);\n setErrorMessage('');\n // 일반적인 서명 변경시에는 최근 서명 상태 유지\n }, []);\n\n // 다시 작성 시 호출 (완전 초기화)\n const handleReset = useCallback(() => {\n setSignatureData(null);\n setIsError(false);\n setErrorMessage('');\n setIsLoadedFromRecent(false); // 다시 작성시에는 최근 서명 상태 해제\n onClear?.();\n }, [onClear]);\n\n // 에러 메시지 가져오기\n const getErrorMessage = useCallback(() => {\n return errorMessage;\n }, [errorMessage]);\n\n return {\n // ref\n signatureRef,\n\n // state\n signatureData,\n isError,\n isLoadedFromRecent, // 최근 서명 불러옴 여부 노출\n\n // actions\n submit,\n clear,\n loadRecentSignature,\n handleSignatureChange, // 일반적인 서명 변경\n handleReset, // 다시 작성\n handleSignatureSubmit,\n\n // utilities\n isValid,\n getSignatureData,\n getErrorMessage\n };\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 } 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?: 'single' | 'multiple';\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')}>{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\ninterface Pen {\n /** 펜 굵기 */\n strokeWeight: number;\n\n /** 펜 컬로 */\n strokeColor: string;\n}\n\ninterface PaintProps {\n pen?: Pen;\n /** canvas의 값이 변하는 경우 */\n onChange?: () => void;\n /** 드래그 시작 */\n onStart?: () => void;\n /** 드래그 종료 */\n onEnd?: () => void;\n}\n\ninterface DownloadProps {\n /** 파일 확장자 */\n fileExtendsion?: 'png' | 'jpg';\n /** 파일명 */\n fileName?: string;\n /** 추출된 이미지 배경 투명여부, true이면 투명, false이면 backgroundColor prop에 설정된 컬러 적용 */\n transparent?: boolean;\n /** transparent가 false인 경우 사용할 배경컬러 , 기본값은 white */\n backgroundColor?: string;\n /** canvas에서 추출된 이미지 가로 사이즈 */\n width?: number;\n /** canvas에서 추출된 이미지 세로 사이즈 */\n height?: number;\n}\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 usePaint(paintProps: PaintProps = {}) {\n const { pen = { strokeWeight: 5, strokeColor: 'black' }, onChange, onStart, onEnd } = paintProps;\n const canvasRef = useRef<HTMLCanvasElement>(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 const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n const dataUrl = canvas.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]);\n\n const restoreState = useCallback(\n (index: number) => {\n const canvas = canvasRef.current;\n const context = contextRef.current;\n if (!canvas || !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, canvas.width, canvas.height);\n context.drawImage(img, 0, 0);\n };\n img.src = dataUrl;\n onChange && onChange();\n },\n [history, onChange]\n );\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n const context = canvas.getContext('2d', { willReadFrequently: true });\n if (!context) {\n return;\n }\n contextRef.current = context;\n\n const initialDataUrl = canvas.toDataURL();\n setHistory([initialDataUrl]);\n setHistoryIndex(0);\n }, []);\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 const startPainting = useCallback(\n (event: MouseEvent) => {\n const context = contextRef.current;\n if (!context) {\n return;\n }\n onStart && onStart();\n const { offsetX, offsetY } = event;\n context.beginPath();\n context.moveTo(offsetX, offsetY);\n setIsPainting(true);\n },\n [onStart]\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) => {\n if (!isPainting || !contextRef.current) {\n return;\n }\n const { offsetX, offsetY } = event;\n contextRef.current.lineTo(offsetX, offsetY);\n contextRef.current.stroke();\n },\n [isPainting]\n );\n\n const handleMouseEnter = useCallback(\n (event: MouseEvent) => {\n if (event.buttons === 1 && !isPainting) {\n startPainting(event);\n }\n },\n [isPainting, startPainting]\n );\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n\n canvas.addEventListener('mousedown', startPainting);\n canvas.addEventListener('mouseup', stopPainting);\n canvas.addEventListener('mousemove', paint);\n canvas.addEventListener('mouseleave', stopPainting);\n canvas.addEventListener('mouseenter', handleMouseEnter);\n\n return () => {\n canvas.removeEventListener('mousedown', startPainting);\n canvas.removeEventListener('mouseup', stopPainting);\n canvas.removeEventListener('mousemove', paint);\n canvas.removeEventListener('mouseleave', stopPainting);\n canvas.removeEventListener('mouseenter', handleMouseEnter);\n };\n }, [startPainting, stopPainting, paint, handleMouseEnter]);\n\n const clear = () => {\n const canvas = canvasRef.current;\n const context = contextRef.current;\n if (canvas && context) {\n context.clearRect(0, 0, canvas.width, canvas.height);\n const initialDataUrl = canvas.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 canvas = canvasRef.current;\n const context = contextRef.current;\n if (!canvas || !context) {\n return;\n }\n\n const img = new Image();\n img.onload = () => {\n context.clearRect(0, 0, canvas.width, canvas.height);\n context.drawImage(img, 0, 0, canvas.width, canvas.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 = canvasRef.current;\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 = canvasRef.current;\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 return {\n clear,\n undo,\n redo,\n loadImage,\n download,\n canvasRef,\n getBase64String\n };\n}\n"],"names":["cx","jsxs","Table","jsx","flexRender","useState","mode","getPaginationRowModel","useReactTable","getCoreRowModel","getSortedRowModel","useController","DatePicker","SegmentGroup","FormField","styles","useRef","useEffect","useCallback","error","useImperativeHandle","Button","Icon"],"mappings":"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","x_google_ignoreList":[0]}
package/dist/index.d.ts CHANGED
@@ -185,5 +185,44 @@ interface AttachmentProps {
185
185
  }
186
186
  declare function Attachment({ photos, onAddPhoto, onRemovePhoto, show, type, buttonText }: AttachmentProps): react_jsx_runtime.JSX.Element | null;
187
187
 
188
- export { Attachment, DataTable, FormDatePicker, FormSegmentGroup, FormSignature, FormTextField, StepIndicator, resize, useCamera, useFormSignature, useTable };
188
+ interface Pen {
189
+ /** 펜 굵기 */
190
+ strokeWeight: number;
191
+ /** 펜 컬로 */
192
+ strokeColor: string;
193
+ }
194
+ interface PaintProps {
195
+ pen?: Pen;
196
+ /** canvas의 값이 변하는 경우 */
197
+ onChange?: () => void;
198
+ /** 드래그 시작 */
199
+ onStart?: () => void;
200
+ /** 드래그 종료 */
201
+ onEnd?: () => void;
202
+ }
203
+ interface DownloadProps {
204
+ /** 파일 확장자 */
205
+ fileExtendsion?: 'png' | 'jpg';
206
+ /** 파일명 */
207
+ fileName?: string;
208
+ /** 추출된 이미지 배경 투명여부, true이면 투명, false이면 backgroundColor prop에 설정된 컬러 적용 */
209
+ transparent?: boolean;
210
+ /** transparent가 false인 경우 사용할 배경컬러 , 기본값은 white */
211
+ backgroundColor?: string;
212
+ /** canvas에서 추출된 이미지 가로 사이즈 */
213
+ width?: number;
214
+ /** canvas에서 추출된 이미지 세로 사이즈 */
215
+ height?: number;
216
+ }
217
+ declare function usePaint(paintProps?: PaintProps): {
218
+ clear: () => void;
219
+ undo: () => void;
220
+ redo: () => void;
221
+ loadImage: (base64String: string) => void;
222
+ download: (downloadProps: DownloadProps) => void;
223
+ canvasRef: react.RefObject<HTMLCanvasElement | null>;
224
+ getBase64String: (imageProps: DownloadProps) => string | undefined;
225
+ };
226
+
227
+ export { Attachment, DataTable, FormDatePicker, FormSegmentGroup, FormSignature, FormTextField, StepIndicator, resize, useCamera, useFormSignature, usePaint, useTable };
189
228
  export type { AttachedPhoto, AttachmentProps, DataTableProps, FormSignatureProps, FormSignatureRef, SignatureData, StepIndicatorProps, StepItem, cameraOptions };