sales-frontend-components 0.0.53 → 0.0.54
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 +7 -12
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.esm.js.map +1 -1
- package/dist/modal/standard/address-search/select-address.module.scss +14 -7
- package/dist/modal/standard/nationality-search/select-nationality.module.scss +6 -3
- package/dist/modal/standard/visa-search/select-visa.module.scss +6 -3
- package/package.json +9 -9
|
@@ -119,7 +119,14 @@
|
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
.add-photo-item {
|
|
122
|
+
// 카메라 아이콘 크기 조정1
|
|
123
|
+
svg {
|
|
124
|
+
width: 40px;
|
|
125
|
+
height: 40px;
|
|
126
|
+
}
|
|
127
|
+
|
|
122
128
|
background-color: colors(background-200);
|
|
129
|
+
|
|
123
130
|
.add-photo-button {
|
|
124
131
|
position: relative;
|
|
125
132
|
display: flex;
|
|
@@ -140,12 +147,6 @@
|
|
|
140
147
|
&:hover {
|
|
141
148
|
background-color: colors(surface-neutral_2);
|
|
142
149
|
}
|
|
143
|
-
|
|
144
|
-
// 카메라 아이콘 크기 조정
|
|
145
|
-
svg {
|
|
146
|
-
width: 40px;
|
|
147
|
-
height: 40px;
|
|
148
|
-
}
|
|
149
150
|
}
|
|
150
151
|
|
|
151
152
|
span {
|
|
@@ -173,12 +174,6 @@
|
|
|
173
174
|
&:hover {
|
|
174
175
|
background-color: colors(surface-neutral_2);
|
|
175
176
|
}
|
|
176
|
-
|
|
177
|
-
// 카메라 아이콘 크기 조정
|
|
178
|
-
svg {
|
|
179
|
-
width: 40px;
|
|
180
|
-
height: 40px;
|
|
181
|
-
}
|
|
182
177
|
}
|
|
183
178
|
|
|
184
179
|
.photo-count {
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../src/form/form-date-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 { 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","/*!\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 } 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\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","DatePicker","SegmentGroup","FormField","cx","jsxs","styles","Icon","useState","useEffect","useRef","useCallback"],"mappings":"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","x_google_ignoreList":[3]}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/form/form-date-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 { DatePicker, type DatePickerSingleHtmlProps } 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'> & DatePickerSingleHtmlProps) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n const baseProps: DatePickerSingleHtmlProps = {\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","/*!\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 } 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\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","DatePicker","SegmentGroup","FormField","cx","jsxs","styles","Icon","useState","useEffect","useRef","useCallback"],"mappings":"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","x_google_ignoreList":[3]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { FieldValues, UseControllerProps } from 'react-hook-form';
|
|
3
|
-
import {
|
|
3
|
+
import { DatePickerSingleHtmlProps, SegmentGroupHtmlProps, FormField } from 'sales-frontend-design-system';
|
|
4
4
|
import * as react from 'react';
|
|
5
5
|
|
|
6
|
-
declare const FormDatePicker: <TFormValues extends FieldValues>({ name, control, disabled, ...props }: Pick<UseControllerProps<TFormValues>, "name" | "control" | "disabled"> &
|
|
6
|
+
declare const FormDatePicker: <TFormValues extends FieldValues>({ name, control, disabled, ...props }: Pick<UseControllerProps<TFormValues>, "name" | "control" | "disabled"> & DatePickerSingleHtmlProps) => react_jsx_runtime.JSX.Element;
|
|
7
7
|
|
|
8
8
|
declare const FormSegmentGroup: <TFormValues extends FieldValues>({ name, control, disabled, ...props }: Pick<UseControllerProps<TFormValues>, "name" | "control" | "disabled"> & SegmentGroupHtmlProps) => react_jsx_runtime.JSX.Element;
|
|
9
9
|
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/form/form-date-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 { 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","/*!\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 } 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\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":["cx","styles"],"mappings":"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","x_google_ignoreList":[3]}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/form/form-date-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 { DatePicker, type DatePickerSingleHtmlProps } 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'> & DatePickerSingleHtmlProps) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n const baseProps: DatePickerSingleHtmlProps = {\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","/*!\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 } 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\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":["cx","styles"],"mappings":"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","x_google_ignoreList":[3]}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
.guide {
|
|
4
4
|
button {
|
|
5
5
|
color: colors(text-body-2);
|
|
6
|
+
|
|
6
7
|
@include apply-typography(subtitle3);
|
|
7
8
|
}
|
|
8
9
|
|
|
@@ -11,25 +12,27 @@
|
|
|
11
12
|
margin-top: padding(small);
|
|
12
13
|
margin-bottom: padding(xxxsmall);
|
|
13
14
|
}
|
|
15
|
+
|
|
14
16
|
&:nth-child(even) {
|
|
15
|
-
color: colors(text-primary);
|
|
16
17
|
margin-top: padding(xxxsmall);
|
|
17
18
|
margin-bottom: padding(small);
|
|
19
|
+
color: colors(text-primary);
|
|
18
20
|
}
|
|
19
21
|
}
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
.guide-title {
|
|
23
|
-
color: colors(text-body);
|
|
24
|
-
@include apply-typography(title5);
|
|
25
25
|
margin-top: padding(xxlarge);
|
|
26
26
|
margin-bottom: padding(medium);
|
|
27
|
+
color: colors(text-body);
|
|
28
|
+
|
|
29
|
+
@include apply-typography(title5);
|
|
27
30
|
}
|
|
28
31
|
|
|
29
32
|
.search-result {
|
|
30
33
|
display: flex;
|
|
31
34
|
flex-direction: row;
|
|
32
|
-
padding: 0 0 padding(small)
|
|
35
|
+
padding: 0 0 padding(small);
|
|
33
36
|
}
|
|
34
37
|
|
|
35
38
|
.address-info {
|
|
@@ -40,29 +43,33 @@
|
|
|
40
43
|
|
|
41
44
|
.radio-group {
|
|
42
45
|
label {
|
|
43
|
-
padding: padding(small) 0;
|
|
44
46
|
display: flex;
|
|
45
47
|
align-items: flex-start;
|
|
48
|
+
padding: padding(small) 0;
|
|
46
49
|
}
|
|
47
50
|
}
|
|
48
51
|
|
|
49
52
|
.address {
|
|
50
53
|
color: colors(text-body);
|
|
54
|
+
|
|
51
55
|
@include apply-typography(subtitle3);
|
|
52
56
|
}
|
|
57
|
+
|
|
53
58
|
.old-address {
|
|
54
59
|
color: colors(text-body_3);
|
|
60
|
+
|
|
55
61
|
@include apply-typography(subtitle3);
|
|
56
62
|
}
|
|
57
63
|
|
|
58
64
|
.zipcode {
|
|
59
65
|
color: colors(text-body_2);
|
|
66
|
+
|
|
60
67
|
@include apply-typography(body2);
|
|
61
68
|
}
|
|
62
69
|
|
|
63
70
|
.divider {
|
|
64
|
-
border: 1px solid colors(border-neutral_3);
|
|
65
|
-
height: 12px;
|
|
66
71
|
width: 1px;
|
|
72
|
+
height: 12px;
|
|
67
73
|
margin: padding(xsmall);
|
|
74
|
+
border: 1px solid colors(border-neutral_3);
|
|
68
75
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
.favorite {
|
|
4
4
|
button {
|
|
5
5
|
color: colors(text-body-2);
|
|
6
|
+
|
|
6
7
|
@include apply-typography(subtitle3);
|
|
7
8
|
}
|
|
8
9
|
|
|
@@ -13,14 +14,16 @@
|
|
|
13
14
|
}
|
|
14
15
|
|
|
15
16
|
.favorite-title {
|
|
16
|
-
color: colors(text-body);
|
|
17
|
-
@include apply-typography(title5);
|
|
18
17
|
margin-top: padding(xxlarge);
|
|
19
18
|
margin-bottom: padding(medium);
|
|
19
|
+
color: colors(text-body);
|
|
20
|
+
|
|
21
|
+
@include apply-typography(title5);
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
.search-result {
|
|
25
|
+
padding: padding(small) 0;
|
|
23
26
|
color: colors(text-body2);
|
|
27
|
+
|
|
24
28
|
@include apply-typography(body2);
|
|
25
|
-
padding: padding(small) 0;
|
|
26
29
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
.favorite {
|
|
4
4
|
button {
|
|
5
5
|
color: colors(text-body-2);
|
|
6
|
+
|
|
6
7
|
@include apply-typography(subtitle3);
|
|
7
8
|
}
|
|
8
9
|
|
|
@@ -13,14 +14,16 @@
|
|
|
13
14
|
}
|
|
14
15
|
|
|
15
16
|
.favorite-title {
|
|
16
|
-
color: colors(text-body);
|
|
17
|
-
@include apply-typography(title5);
|
|
18
17
|
margin-top: padding(xxlarge);
|
|
19
18
|
margin-bottom: padding(medium);
|
|
19
|
+
color: colors(text-body);
|
|
20
|
+
|
|
21
|
+
@include apply-typography(title5);
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
.search-result {
|
|
25
|
+
padding: padding(small) 0;
|
|
23
26
|
color: colors(text-body2);
|
|
27
|
+
|
|
24
28
|
@include apply-typography(body2);
|
|
25
|
-
padding: padding(small) 0;
|
|
26
29
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sales-frontend-components",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.54",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs.js",
|
|
@@ -41,24 +41,24 @@
|
|
|
41
41
|
"sass": "^1.86.3",
|
|
42
42
|
"typescript": "5.8.2",
|
|
43
43
|
"zod": "^3.25.67",
|
|
44
|
-
"sales-frontend-api": "0.0.
|
|
45
|
-
"sales-frontend-
|
|
46
|
-
"sales-frontend-
|
|
44
|
+
"sales-frontend-api": "0.0.22",
|
|
45
|
+
"sales-frontend-design-system": "0.0.47",
|
|
46
|
+
"sales-frontend-hooks": "0.0.25",
|
|
47
47
|
"sales-frontend-utils": "0.0.6",
|
|
48
48
|
"sales-frontend-typescript-config": "0.0.2",
|
|
49
49
|
"eslint-config-sales-frontend-eslint-config-v8": "^0.0.6",
|
|
50
|
-
"sales-frontend-
|
|
50
|
+
"sales-frontend-stores": "0.0.2"
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
53
53
|
"@tanstack/react-query": ">=5.0.0",
|
|
54
54
|
"react": ">=18.0.0",
|
|
55
55
|
"react-dom": ">=18.0.0",
|
|
56
56
|
"react-hook-form": "^7.58.1",
|
|
57
|
-
"sales-frontend-
|
|
58
|
-
"sales-frontend-
|
|
59
|
-
"sales-frontend-
|
|
57
|
+
"sales-frontend-api": "0.0.22",
|
|
58
|
+
"sales-frontend-design-system": "0.0.47",
|
|
59
|
+
"sales-frontend-utils": "0.0.6",
|
|
60
60
|
"sales-frontend-stores": "0.0.2",
|
|
61
|
-
"sales-frontend-
|
|
61
|
+
"sales-frontend-hooks": "0.0.25"
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
64
|
"classnames": "^2.5.1"
|