diff --git a/src/components/management/StuffSubHeader.jsx b/src/components/management/StuffSubHeader.jsx
index 1ea2a699..ab838335 100644
--- a/src/components/management/StuffSubHeader.jsx
+++ b/src/components/management/StuffSubHeader.jsx
@@ -1,19 +1,26 @@
'use client'
-import { useEffect } from 'react'
+import { useContext, useEffect } from 'react'
+
import Link from 'next/link'
import Image from 'next/image'
-import { useMessage } from '@/hooks/useMessage'
import { useRouter, useSearchParams } from 'next/navigation'
-import { floorPlanObjectState } from '@/store/floorPlanObjectAtom'
+
import { useSetRecoilState } from 'recoil'
+
+import { QcastContext } from '@/app/QcastProvider'
+import { useMessage } from '@/hooks/useMessage'
+import { floorPlanObjectState } from '@/store/floorPlanObjectAtom'
import { queryStringFormatter } from '@/util/common-utils'
+
export default function StuffSubHeader({ type }) {
const { getMessage } = useMessage()
const router = useRouter()
const setFloorPlanObjectNo = useSetRecoilState(floorPlanObjectState)
+ const { isGlobalLoading } = useContext(QcastContext)
+
useEffect(() => {
window.scrollTo(0, 0)
}, [])
@@ -35,85 +42,87 @@ export default function StuffSubHeader({ type }) {
}
return (
- <>
-
-
- {type === 'list' && (
- <>
-
-
{getMessage('header.menus.management')}
-
-
- -
-
-
-
-
- -
- {getMessage('header.menus.management')}
-
- -
- {getMessage('header.menus.management.stuffList')}
-
-
- >
- )}
- {type === 'temp' && (
- <>
-
- -
-
- {getMessage('stuff.temp.subTitle')}
-
-
-
-
- -
-
-
-
-
- -
- {getMessage('header.menus.management')}
-
- -
- {getMessage('header.menus.management.newStuff')}
-
-
- >
- )}
- {type === 'detail' && (
- <>
-
-
- -
-
-
-
-
- -
- {getMessage('header.menus.management')}
-
- -
- {getMessage('header.menus.management.detail')}
-
-
- >
- )}
+ !isGlobalLoading && (
+ <>
+
+
+ {type === 'list' && (
+ <>
+
+
{getMessage('header.menus.management')}
+
+
+ -
+
+
+
+
+ -
+ {getMessage('header.menus.management')}
+
+ -
+ {getMessage('header.menus.management.stuffList')}
+
+
+ >
+ )}
+ {type === 'temp' && (
+ <>
+
+ -
+
+ {getMessage('stuff.temp.subTitle')}
+
+
+
+
+ -
+
+
+
+
+ -
+ {getMessage('header.menus.management')}
+
+ -
+ {getMessage('header.menus.management.newStuff')}
+
+
+ >
+ )}
+ {type === 'detail' && (
+ <>
+
+
+ -
+
+
+
+
+ -
+ {getMessage('header.menus.management')}
+
+ -
+ {getMessage('header.menus.management.detail')}
+
+
+ >
+ )}
+
-
- >
+ >
+ )
)
}
diff --git a/src/hooks/common/useCommonCode.js b/src/hooks/common/useCommonCode.js
index f912beb9..bab32007 100644
--- a/src/hooks/common/useCommonCode.js
+++ b/src/hooks/common/useCommonCode.js
@@ -5,14 +5,28 @@ import { globalLocaleStore } from '@/store/localeAtom'
import { isObjectNotEmpty } from '@/util/common-utils'
import { useAxios } from '../useAxios'
+/**
+ * ๊ณตํต์ฝ๋ ๊ด๋ฆฌ๋ฅผ ์ํ ์ปค์คํ
ํ
+ *
+ * @description
+ * - ๊ณตํต์ฝ๋๋ฅผ ์ ์ญ ์ํ๋ก ๊ด๋ฆฌํ๊ณ ํ์ํ ๊ณณ์์ ์ฌ์ฉํ ์ ์๋๋ก ํจ
+ * - ์ต์ด 1ํ๋ง API๋ฅผ ํธ์ถํ์ฌ ๊ณตํต์ฝ๋๋ฅผ ๊ฐ์ ธ์ด
+ * - ์ธ์ด ์ค์ ์ ๋ฐ๋ผ ํ๊ตญ์ด/์ผ๋ณธ์ด ์ฝ๋๋ช
์ ์๋์ผ๋ก ๋ณํ
+ *
+ * @returns {Object}
+ * - commonCode: ์ ์ฒด ๊ณตํต์ฝ๋ ๊ฐ์ฒด(recoil state)
+ * - findCommonCode: ํน์ ๊ณตํต์ฝ๋ ๊ทธ๋ฃน์ ์กฐํํ๋ ํจ์
+ *
+ * @example
+ * const { commonCode, findCommonCode } = useCommonCode();
+ * const honorificCodes = findCommonCode(200800);
+ */
export const useCommonCode = () => {
const [commonCode, setCommonCode] = useRecoilState(commonCodeState)
const globalLocale = useRecoilValue(globalLocaleStore)
const { promiseGet } = useAxios()
const findCommonCode = (key) => {
- // const arr = commonCode[key]
- // return arr.sort((a, b) => a.clPriority - b.clPriority)
const resultCodes = commonCode[key]?.map((code) => {
const result = {
clHeadCd: code.clHeadCd,
diff --git a/src/hooks/common/useRefFiles.js b/src/hooks/common/useRefFiles.js
index 05f60afe..df0b5634 100644
--- a/src/hooks/common/useRefFiles.js
+++ b/src/hooks/common/useRefFiles.js
@@ -1,83 +1,161 @@
import { useEffect, useRef, useState } from 'react'
-import { useRecoilState } from 'recoil'
-import { v4 as uuidv4 } from 'uuid'
+import { useRecoilState, useRecoilValue } from 'recoil'
import { useSwal } from '@/hooks/useSwal'
import { useAxios } from '../useAxios'
-import { currentCanvasPlanState } from '@/store/canvasAtom'
-import { convertDwgToPng, writeImageBuffer } from '@/lib/fileAction'
+import { canvasState, currentCanvasPlanState } from '@/store/canvasAtom'
+import { convertDwgToPng, removeImage, writeImageBuffer, readImage } from '@/lib/fileAction'
+import { useCanvas } from '@/hooks/useCanvas'
export function useRefFiles() {
const converterUrl = process.env.NEXT_PUBLIC_CONVERTER_API_URL
const [refImage, setRefImage] = useState(null)
const [refFileMethod, setRefFileMethod] = useState('1')
const [mapPositionAddress, setMapPositionAddress] = useState('')
- const [currentCanvasPlan, setCurrentCanvasPlan] = useRecoilState(currentCanvasPlanState)
+ const [currentBgImage, setCurrentBgImage] = useState(null)
const queryRef = useRef(null)
-
+ const [currentCanvasPlan, setCurrentCanvasPlan] = useRecoilState(currentCanvasPlanState)
+ const canvas = useRecoilValue(canvasState)
+ const { handleBackImageLoadToCanvas } = useCanvas()
const { swalFire } = useSwal()
- const { get, promisePut, promisePost } = useAxios()
- // const { currentCanvasPlan, setCurrentCanvasPlan } = usePlan()
+ const { get, post, promisePost } = useAxios()
+
+ useEffect(() => {
+ if (refFileMethod === '1') {
+ // ํ์ผ ๋ถ๋ฌ์ค๊ธฐ
+ setMapPositionAddress('')
+ } else {
+ setRefImage(null)
+ }
+ }, [refFileMethod])
+
+ /**
+ * ํ์ฌ ํ๋์ด ๋ณ๊ฒฝ๋๋ฉด ํ๋ ์ํ ์ ์ฅ
+ */
+ useEffect(() => {
+ // console.log('๐ ~ useRefFiles ~ currentCanvasPlan:', currentCanvasPlan)
+ // const handleCurrentPlan = async () => {
+ // await promisePut({ url: '/api/canvas-management/canvas-statuses', data: currentCanvasPlan }).then((res) => {
+ // console.log('๐ ~ awaitpromisePut ~ res:', res)
+ // })
+ // }
+ // handleCurrentPlan()
+ }, [currentCanvasPlan])
/**
* ํ์ผ ๋ถ๋ฌ์ค๊ธฐ ๋ฒํผ ์ปจํธ๋กค
* @param {*} file
*/
const handleRefFile = (file) => {
- setRefImage(file)
- /**
- * ํ์ผ ํ์ฅ์๊ฐ dwg์ผ ๊ฒฝ์ฐ ๋ณํํ์ฌ ์ด๋ฏธ์ง๋ก ์ ์ฅ
- * ํ์ผ ํ์ฅ์๊ฐ ์ด๋ฏธ์ง์ผ ๊ฒฝ์ฐ ์ด๋ฏธ์ง ์ ์ฅ
- */
- file.name.split('.').pop() === 'dwg' ? handleUploadConvertRefFile(file) : handleUploadImageRefFile(file)
- // handleUploadRefFile(file)
+ console.log('handleRefFile', file)
+ console.log('refImage', refImage)
+
+ if (refImage) {
+ swalFire({
+ text: 'ํ์ผ์ ๋ณ๊ฒฝํ์๊ฒ ์ต๋๊น?',
+ type: 'confirm',
+ confirmFn: () => {
+ refFileSetting(file)
+ // setRefImage(file)
+ // file.name.split('.').pop() === 'dwg' ? handleUploadConvertRefFile(file) : handleUploadImageRefFile(file)
+ },
+ })
+ } else {
+ refFileSetting(file)
+ }
}
+ const refFileSetting = (file) => {
+ if (file && ['image/png', 'image/jpg', 'image/jpeg', 'image/bmp', 'image/gif'].includes(file.type)) {
+ // setRefImage(file)
+ file.name.split('.').pop() === 'dwg' ? handleUploadConvertRefFile(file) : handleUploadImageRefFile(file)
+ } else {
+ swalFire({
+ text: '์ด๋ฏธ์ง๊ฐ ์๋๋๋ค.',
+ type: 'alert',
+ icon: 'error',
+ })
+ }
+ }
/**
* ํ์ผ ์ญ์
*/
const handleFileDelete = () => {
- setRefImage(null)
- setCurrentCanvasPlan((prev) => ({ ...prev, bgFileName: null }))
+ swalFire({
+ text: '์ญ์ ํ์๊ฒ ์ต๋๊น?',
+ type: 'confirm',
+ confirmFn: () => {
+ setRefImage(null)
+ setCurrentCanvasPlan((prev) => ({ ...prev, bgFileName: null }))
+ removeImage(currentCanvasPlan.id).then((res) => {
+ console.log(res)
+ })
+ },
+ })
}
/**
* ์ฃผ์ ์ญ์
*/
const handleAddressDelete = () => {
- setCurrentCanvasPlan((prev) => ({ ...prev, mapPositionAddress: null }))
+ swalFire({
+ text: '์ญ์ ํ์๊ฒ ์ต๋๊น?',
+ type: 'confirm',
+ confirmFn: () => {
+ setMapPositionAddress('')
+ setCurrentCanvasPlan((prev) => ({ ...prev, mapPositionAddress: null }))
+ removeImage(currentCanvasPlan.id).then((res) => {
+ console.log(res)
+ })
+ },
+ })
}
/**
* ์ฃผ์๋ก ๊ตฌ๊ธ ๋งต ์ด๋ฏธ์ง ๋ค์ด๋ก๋
*/
const handleMapImageDown = async () => {
+ console.log('๐ ~ handleMapImageDown ~ handleMapImageDown:')
if (queryRef.current.value === '' || queryRef.current.value === null) {
return
}
- const res = await get({ url: `http://localhost:3000/api/html2canvas?q=${queryRef.current.value}&fileNm=${uuidv4()}&zoom=20` })
+ const res = await get({
+ url: `http://localhost:3000/api/html2canvas?q=${queryRef.current.value}&fileNm=${currentCanvasPlan.id}&zoom=20`,
+ })
console.log('๐ ~ handleMapImageDown ~ res:', res)
- setCurrentCanvasPlan((prev) => ({ ...prev, bgImageName: res.fileNm, mapPositionAddress: queryRef.current.value }))
+ const file = await readImage(res.fileNm)
+ console.log('๐ ~ handleMapImageDown ~ file:', file)
+ setCurrentBgImage(file)
+ // handleBackImageLoadToCanvas(`plan-images/${currentCanvasPlan.id}.png`)
+ // setCurrentCanvasPlan((prev) => ({ ...prev, bgImageName: currentCanvasPlan.id, mapPositionAddress: queryRef.current.value }))
}
+ useEffect(() => {
+ if (!currentBgImage) {
+ return
+ }
+ console.log('๐ ~ useEffect ~ currentBgImage:', currentBgImage)
+ handleBackImageLoadToCanvas(`plan-images/${currentCanvasPlan.id}.png`)
+ setCurrentCanvasPlan((prev) => ({ ...prev, bgImageName: refImage?.name ?? null, mapPositionAddress: queryRef.current.value }))
+ }, [currentBgImage])
+
/**
* ์ด๋ฏธ์ง ํ์ผ ์
๋ก๋
* @param {*} file
*/
const handleUploadImageRefFile = async (file) => {
- console.log('๐ ~ handleUploadImageRefFile ~ file:', file)
const formData = new FormData()
formData.append('file', file)
+ formData.append('fileName', currentCanvasPlan.id)
- const response = await fetch('http://localhost:3000/api/image-upload', {
- method: 'POST',
- body: formData,
- })
+ const res = await post({ url: 'http://localhost:3000/api/image-upload', data: formData })
+ console.log('๐ ~ handleUploadImageRefFile ~ res:', res)
+ const image = await readImage(res.fileNm)
+ console.log('๐ ~ handleUploadImageRefFile ~ file:', image)
- const result = await response.json()
- console.log('๐ ~ handleUploadImageRefFile ~ res:', result)
- // writeImageBuffer(file)
+ setCurrentBgImage(image)
+ setRefImage(file)
}
/**
@@ -92,6 +170,7 @@ export function useRefFiles() {
.then((res) => {
convertDwgToPng(res.data.Files[0].FileName, res.data.Files[0].FileData)
swalFire({ text: 'ํ์ผ ๋ณํ ์ฑ๊ณต' })
+ setRefImage(res.data.Files[0].FileData)
})
.catch((err) => {
swalFire({ text: 'ํ์ผ ๋ณํ ์คํจ', icon: 'error' })
@@ -106,19 +185,6 @@ export function useRefFiles() {
setRefFileMethod(e.target.value)
}
- /**
- * ํ์ฌ ํ๋์ด ๋ณ๊ฒฝ๋๋ฉด ํ๋ ์ํ ์ ์ฅ
- */
- useEffect(() => {
- console.log('๐ ~ useRefFiles ~ currentCanvasPlan:', currentCanvasPlan)
- // const handleCurrentPlan = async () => {
- // await promisePut({ url: '/api/canvas-management/canvas-statuses', data: currentCanvasPlan }).then((res) => {
- // console.log('๐ ~ awaitpromisePut ~ res:', res)
- // })
- // }
- // handleCurrentPlan()
- }, [currentCanvasPlan])
-
return {
refImage,
queryRef,
diff --git a/src/hooks/floorPlan/estimate/useEstimateController.js b/src/hooks/floorPlan/estimate/useEstimateController.js
index e48d6b76..6c9f221b 100644
--- a/src/hooks/floorPlan/estimate/useEstimateController.js
+++ b/src/hooks/floorPlan/estimate/useEstimateController.js
@@ -3,7 +3,7 @@ import { useContext, useEffect, useReducer, useState } from 'react'
import { useRecoilState, useRecoilValue } from 'recoil'
import { globalLocaleStore } from '@/store/localeAtom'
import { estimateState, floorPlanObjectState } from '@/store/floorPlanObjectAtom'
-import { isObjectNotEmpty, isNotEmptyArray } from '@/util/common-utils'
+import { isObjectNotEmpty, isEmptyArray, isNotEmptyArray } from '@/util/common-utils'
import { SessionContext } from '@/app/SessionProvider'
import { useMessage } from '@/hooks/useMessage'
import { useRouter } from 'next/navigation'
@@ -18,6 +18,9 @@ const updateItemInList = (itemList, dispOrder, updates) => {
}
export const useEstimateController = (planNo) => {
+ const [fileList, setFileList] = useState([])
+ const [deleteFileList, setDeleteFileList] = useState([])
+
const router = useRouter()
const { session } = useContext(SessionContext)
const globalLocaleState = useRecoilValue(globalLocaleStore)
@@ -39,6 +42,12 @@ export const useEstimateController = (planNo) => {
}
}, [])
+ useEffect(() => {
+ if (fileList.length > 0) {
+ realSave(fileList)
+ }
+ }, [fileList])
+
// ์์ธ ์กฐํ
const fetchSetting = async (objectNo, planNo) => {
try {
@@ -50,6 +59,14 @@ export const useEstimateController = (planNo) => {
item.delFlg = '0'
})
}
+ if (res.data.pkgAsp === null || res.data.pkgAsp == undefined) {
+ res.data.pkgAsp = '0.00'
+ } else {
+ const number = parseFloat(res.data.pkgAsp)
+ const roundedNumber = isNaN(number) ? '0.00' : number.toFixed(2)
+
+ res.data.pkgAsp = roundedNumber.toString()
+ }
setEstimateContextState(res.data)
}
}
@@ -68,7 +85,7 @@ export const useEstimateController = (planNo) => {
}
const addItem = () => {
- let newItemDispOrder = Math.max(...estimateContextState.itemList.map((item) => item.dispOrder))
+ let newItemDispOrder = estimateContextState.itemList.length === 0 ? 0 : Math.max(...estimateContextState.itemList.map((item) => item.dispOrder))
newItemDispOrder = (Math.floor(newItemDispOrder / 100) + 1) * 100
setEstimateContextState({
itemList: [
@@ -89,6 +106,7 @@ export const useEstimateController = (planNo) => {
partAdd: '1', //NEW ์ฒด์ธ์ง ํ๋๊ทธ
delFlg: '0', //์ญ์ ํ๋๊ทธ 0 ์ญ์ ํ๋ฉด 1
addFlg: true,
+ paDispOrder: null,
},
],
})
@@ -127,6 +145,7 @@ export const useEstimateController = (planNo) => {
const handleEstimateSubmit = async () => {
//0. ํ์์ฒดํฌ
let flag = true
+ let originFileFlg = false
let fileFlg = true
let itemFlg = true
if (estimateData.charger.trim().length === 0) {
@@ -144,23 +163,44 @@ export const useEstimateController = (planNo) => {
return alert(getMessage('estimate.detail.save.requiredEstimateDate'))
}
- //์ฒจ๋ถํ์ผ์ ์ฒจ๋ถ์ํ๋๋ฐ
- //์์ดํ
fileUploadFlg๊ฐ1(์ฒจ๋ถํ์ผ ํ์)์ด 1๊ฐ๋ผ๋ ์๋๋ฐ ํ์ผ ์๋ฃ ์ ์ถ(fileFlg) ์ฒดํฌ์ํ์ผ๋ฉด(0) alert ์ ์ฅ์๋ผ
+ if (estimateData.estimateType === 'YJSS') {
+ let pkgAsp = estimateData.pkgAsp
+ if (pkgAsp === '0') {
+ flag = false
+ return alert(getMessage('estimate.detail.save.requiredPkgAsp'))
+ }
+ }
+
+ //๊ธฐ์กด์ ์ฒจ๋ถ๋ ํ์ผ์ด ์์ผ๋ฉด ํ์ผ์ฒจ๋ถ๊ด๋ จ ํต๊ณผ
+ if (estimateData?.originFiles?.length > 0) {
+ let cnt = estimateData.originFiles.filter((file) => file.delFlg === '0').length
+
+ if (cnt == 0) {
+ originFileFlg = false
+ } else {
+ originFileFlg = true
+ }
+ }
+
if (flag) {
- if (estimateData.fileList.length < 1) {
- if (estimateData.itemList.length > 1) {
- estimateData.itemList.map((row) => {
- if (row.delFlg === '0') {
- if (row.fileUploadFlg === '1') {
- if (fileFlg) {
- if (estimateData.fileFlg === '0') {
- fileFlg = false
- return alert(getMessage('estimate.detail.save.requiredFileUpload'))
+ if (!originFileFlg) {
+ //๊ธฐ์กด์ ์ฒจ๋ถ๋ ํ์ผ์ด ์์ผ๋ฉด
+ if (isEmptyArray(estimateData.newFileList)) {
+ //์๋ก ์ฒจ๋ถํ ํ์ผ์ด ์์ผ๋ฉด
+ if (estimateData.itemList.length > 1) {
+ estimateData.itemList.map((row) => {
+ if (row.delFlg === '0') {
+ if (row.fileUploadFlg === '1') {
+ if (fileFlg) {
+ if (estimateData.fileFlg === '0') {
+ fileFlg = false
+ return alert(getMessage('estimate.detail.save.requiredFileUpload'))
+ }
}
}
}
- }
- })
+ })
+ }
}
}
}
@@ -168,10 +208,16 @@ export const useEstimateController = (planNo) => {
if (fileFlg) {
estimateData.itemList.map((item) => {
if (item.delFlg === '0') {
- item.amount = item.amount?.replaceAll(',', '')
- item.salePrice = parseFloat(item.salePrice?.replaceAll(',', '')).toFixed(2)
- item.saleTotPrice = parseFloat(item.saleTotPrice?.replaceAll(',', '')).toFixed(2)
+ if (item.addFlg) {
+ if (item.itemId === '') {
+ itemFlg = false
+ return alert(getMessage('estimate.detail.save.requiredItemId'))
+ }
+ }
+ item.amount = item.amount?.replaceAll(',', '')
+ item.salePrice = Number(item.salePrice?.replaceAll(',', '')).toFixed(2)
+ item.saleTotPrice = Number(item.saleTotPrice?.replaceAll(',', '')).toFixed(2)
if (!item.paDispOrder) {
if (itemFlg) {
if (isNaN(item.amount)) {
@@ -188,39 +234,27 @@ export const useEstimateController = (planNo) => {
item.salePrice = '0'
}
- if (item.salePrice < 1) {
- itemFlg = false
- return alert(getMessage('estimate.detail.save.requiredSalePrice'))
+ if (item.openFlg !== '1') {
+ if (item.salePrice < 1) {
+ itemFlg = false
+ return alert(getMessage('estimate.detail.save.requiredSalePrice'))
+ }
}
estimateData.pkgAsp = '0'
estimateData.pkgTotPrice = '0'
+ } else {
+ if (item.pkgMaterialFlg === '1') {
+ if (isNaN(item.salePrice)) {
+ itemFlg = false
+ return alert(getMessage('estimate.detail.save.requiredSalePrice'))
+ }
+ }
}
}
}
}
})
- }
-
- if (flag && fileFlg && itemFlg) {
- //1. ์ฒจ๋ถํ์ผ ์ ์ฅ์์
- const formData = new FormData()
- if (isNotEmptyArray(estimateData.tempFileList) > 1) {
- estimateData.tempFileList.forEach((file) => {
- formData.append('files', file)
- })
- formData.append('objectNo', estimateData.objectNo)
- formData.append('planNo', estimateData.planNo)
- formData.append('category', '10')
- formData.append('userId', estimateData.userId)
-
- await post({ url: '/api/file/fileUpload', data: formData })
- }
-
- //์ฒจ๋ถํ์ผ์ ์ฅ๋
-
- //์ ํ๋ผ์ธ ์ถ๊ฐํ๋๋ฐ ์์ดํ
์๊ณ ๋ฅด๊ณ ์ ์ฅํ๋ฉดitemId=''์ ๋ ๋ฆฌ๊ณ ๋๋จธ์ง ์ ์ฅํ๊ธฐ
- // estimateData.itemList = estimateData.itemList.filter((item) => item.itemId !== '')
estimateData.itemList = estimateData.itemList.filter((item) => item.delFlg === '0' || !item.addFlg)
let delCnt = 0
@@ -232,30 +266,104 @@ export const useEstimateController = (planNo) => {
if (delCnt === estimateData.itemList.length) {
return alert(getMessage('estimate.detail.save.requiredItem'))
}
+ }
- let option = []
- estimateData.itemList.forEach((item) => {
- if (item.specialNoteCd) {
- let split2 = item.specialNoteCd.split('ใ')
- option = option.concat(split2)
+ if (flag && fileFlg && itemFlg) {
+ //1. ์ฒจ๋ถํ์ผ ์ ์ฅ์์
+ const formData = new FormData()
+ if (estimateData?.newFileList?.length > 0) {
+ estimateData.newFileList.forEach((file) => {
+ formData.append('files', file)
+ })
+ formData.append('objectNo', estimateData.objectNo)
+ formData.append('planNo', estimateData.planNo)
+ formData.append('category', '10')
+ formData.append('userId', estimateData.userId)
+
+ await post({ url: '/api/file/fileUpload', data: formData }).then((res) => {
+ setFileList(res)
+ })
+ } else {
+ setFileList([])
+ realSave()
+ }
+ }
+ }
+
+ const realSave = async (fileList) => {
+ //์ฒจ๋ถํ์ผ์ ์ฅ๋
+
+ let option = []
+ estimateData.itemList.forEach((item) => {
+ if (item.specialNoteCd) {
+ let split2 = item.specialNoteCd.split('ใ')
+ option = option.concat(split2)
+ }
+ })
+
+ let estimateOptions = ''
+ let estimateOptionsArray
+ estimateData.specialNoteList.map((item) => {
+ if (item.pkgYn === '0') {
+ if (item.check) {
+ if (estimateOptions === '') {
+ estimateOptions = item.code
+ } else {
+ estimateOptions += 'ใ' + item.code
+ }
+ }
+ } else {
+ if (item.check) {
+ let flg = '0'
+ for (let i = 0; i < estimateData.uniqueData.length; i++) {
+ if (item.code.indexOf(estimateData.uniqueData[i]) > -1) {
+ flg = '1'
+ }
+ if (flg === '1') {
+ estimateOptions += 'ใ' + estimateData.uniqueData[i]
+ }
+ }
+ }
+ }
+ })
+
+ estimateOptionsArray = estimateOptions.split('ใ').sort()
+ estimateOptionsArray = Array.from(new Set(estimateOptionsArray))
+
+ estimateOptions = estimateOptionsArray.join('ใ')
+
+ estimateData.estimateOption = estimateOptions
+ // console.log('์ต์ข
์์ดํ
:::', estimateData.itemList)
+ if (fileList?.length > 0) {
+ estimateData.fileList = fileList
+ } else {
+ estimateData.fileList = []
+ }
+ if (estimateData.originFiles?.length > 0) {
+ estimateData.deleteFileList = estimateData.originFiles?.filter((item) => item.delFlg === '1')
+ } else {
+ estimateData.deleteFileList = []
+ }
+
+ if (estimateData.estimateType === 'YJSS') {
+ estimateData.pkgAsp = estimateData.pkgAsp.replaceAll(',', '')
+ }
+
+ console.log('์ต์ข
์ ์ฅ::', estimateData)
+ //2. ์์ธ๋ฐ์ดํฐ ์ ์ฅ
+ // return
+ try {
+ await promisePost({ url: `${ESTIMATE_API_ENDPOINT}/save-estimate`, data: estimateData }).then((res) => {
+ if (res.status === 201) {
+ estimateData.newFileList = []
+ // estimateData.originFiles = []
+ alert(getMessage('estimate.detail.save.alertMsg'))
+ //์ด๋๋ก ๋ณด๋ผ์ง
+ fetchSetting(objectRecoil.floorPlanObjectNo, estimateData.planNo)
}
})
-
- console.log('์์ดํ
๋ฆฌ์คํธ::', estimateData.itemList)
- console.log('์ต์ข
์ ๋ณด::;', estimateData)
- //2. ์์ธ๋ฐ์ดํฐ ์ ์ฅ
- // return
- try {
- await promisePost({ url: `${ESTIMATE_API_ENDPOINT}/save-estimate`, data: estimateData }).then((res) => {
- if (res.status === 201) {
- alert(getMessage('estimate.detail.save.alertMsg'))
- //์ด๋๋ก ๋ณด๋ผ์ง
- fetchSetting(objectRecoil.floorPlanObjectNo, estimateData.planNo)
- }
- })
- } catch (e) {
- console.log('error::::::::::::', e.response.data.message)
- }
+ } catch (e) {
+ console.log('error::::::::::::', e.response.data.message)
}
}
diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js
index 067d9f8a..f51cf00f 100644
--- a/src/hooks/module/useModuleBasicSetting.js
+++ b/src/hooks/module/useModuleBasicSetting.js
@@ -1,17 +1,17 @@
-import { useContext, useEffect, useState } from 'react'
-import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'
+import { useRecoilState, useRecoilValue } from 'recoil'
import { canvasState } from '@/store/canvasAtom'
import { rectToPolygon, setSurfaceShapePattern } from '@/util/canvas-util'
import { roofDisplaySelector } from '@/store/settingAtom'
-import offsetPolygon from '@/util/qpolygon-utils'
+import offsetPolygon, { calculateAngle } from '@/util/qpolygon-utils'
import { QPolygon } from '@/components/fabric/QPolygon'
-import { QLine } from '@/components/fabric/QLine'
import { moduleSetupSurfaceState, moduleIsSetupState } from '@/store/canvasAtom'
import { useEvent } from '@/hooks/useEvent'
import { POLYGON_TYPE, BATCH_TYPE } from '@/common/common'
-
import * as turf from '@turf/turf'
-import { EventContext } from '@/app/floor-plan/EventProvider'
+import { v4 as uuidv4 } from 'uuid'
+import { useSwal } from '@/hooks/useSwal'
+import { canvasSettingState } from '@/store/canvasAtom'
+import { compasDegAtom } from '@/store/orientationAtom'
export function useModuleBasicSetting() {
const canvas = useRecoilValue(canvasState)
@@ -19,10 +19,35 @@ export function useModuleBasicSetting() {
const [moduleSetupSurface, setModuleSetupSurface] = useRecoilState(moduleSetupSurfaceState)
const [moduleIsSetup, setModuleIsSetup] = useRecoilState(moduleIsSetupState)
const { addTargetMouseEventListener, addCanvasMouseEventListener, initEvent } = useEvent()
+ const { swalFire } = useSwal()
+ const canvasSetting = useRecoilValue(canvasSettingState)
+ const compasDeg = useRecoilValue(compasDegAtom)
+
// const { addTargetMouseEventListener, addCanvasMouseEventListener, initEvent } = useContext(EventContext)
- const [flowModuleLine, setFlowModuleLine] = useState({})
let selectedModuleInstSurfaceArray = []
+ //๋ชจ๋,ํ๋ก์์ ๋ค๋ฅธ๋ฉ๋ด -> ๋ฐฐ์น๋ฉด์ผ๋ก ๊ฐ ๊ฒฝ์ ์ด๊ธฐํ
+ const restoreModuleInstArea = () => {
+ //์ค์น๋ฉด ์ญ์
+ const setupArea = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE)
+
+ //๋ชจ๋ ์ญ์ ๋ฐ ์ด๊ธฐํ
+ setupArea.forEach((obj) => {
+ if (obj.modules.length > 0) {
+ obj.modules.forEach((module) => {
+ canvas.remove(module)
+ })
+ }
+ canvas.remove(obj)
+ obj.modules = []
+ })
+
+ //์ง๋ถํจํด ๋ณ๊ฒฝ
+ const roofs = canvas.getObjects().filter((obj) => obj.name === 'roof')
+ roofs.forEach((roof) => {
+ setSurfaceShapePattern(roof, roofDisplay.column, false) //ํจํด ๋ณ๊ฒฝ
+ })
+ }
const makeModuleInstArea = () => {
//์ง๋ถ ๊ฐ์ฒด ๋ฐํ
const roofs = canvas.getObjects().filter((obj) => obj.name === 'roof')
@@ -32,9 +57,19 @@ export function useModuleBasicSetting() {
}
roofs.forEach((roof) => {
+ const isExistSurface = canvas.getObjects().find((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && obj.parentId === roof.id)
+ if (isExistSurface) {
+ return
+ }
+
setSurfaceShapePattern(roof, roofDisplay.column, true) //ํจํด ๋ณ๊ฒฝ
const offsetPoints = offsetPolygon(roof.points, -20) //์์ชฝ offset
//๋ชจ๋์ค์น์์ญ?? ์์ฑ
+
+ const surfaceId = uuidv4()
+
+ console.log('roof.moduleCompass', roof.moduleCompass)
+
let setupSurface = new QPolygon(offsetPoints, {
stroke: 'red',
fill: 'transparent',
@@ -49,20 +84,25 @@ export function useModuleBasicSetting() {
parentId: roof.id, //๊ฐ๋ ํด๋ฆฌ๊ณค์ ์์ ์ธ๋ฑ์ค๋ฅผ ๋ฃ์ด์ค
name: POLYGON_TYPE.MODULE_SETUP_SURFACE,
flowDirection: roof.direction,
+ direction: roof.direction,
flipX: roof.flipX,
flipY: roof.flipY,
+ surfaceId: surfaceId,
+ modules: [],
})
setupSurface.setViewLengthText(false)
+ canvas.add(setupSurface) //๋ชจ๋์ค์น๋ฉด ๋ง๋ค๊ธฐ
- canvas.add(setupSurface)
-
- if (setupSurface.flowDirection === 'south' || setupSurface.flowDirection === 'north') {
- setFlowModuleLine(bottomTopFlowLine(setupSurface))
- } else {
- setFlowModuleLine(leftRightFlowLine(setupSurface))
+ const flowLines = {
+ bottom: bottomTopFlowLine(setupSurface).find((obj) => obj.target === 'bottom'),
+ top: bottomTopFlowLine(setupSurface).find((obj) => obj.target === 'top'),
+ left: leftRightFlowLine(setupSurface).find((obj) => obj.target === 'left'),
+ right: leftRightFlowLine(setupSurface).find((obj) => obj.target === 'right'),
}
+ setupSurface.set({ flowLines: flowLines })
+
//์ง๋ถ๋ฉด ์ ํ ๊ธ์ง
roof.set({
selectable: false,
@@ -128,13 +168,29 @@ export function useModuleBasicSetting() {
obj.name === BATCH_TYPE.SHADOW,
) //๋๋จธs ๊ฐ์ฒด
+ const moduleOptions = {
+ fill: '#BFFD9F',
+ stroke: 'black',
+ strokeWidth: 0.1,
+ selectable: false, // ์ ํ ๊ฐ๋ฅํ๊ฒ ์ค์
+ lockMovementX: true, // X ์ถ ์ด๋ ์ ๊ธ
+ lockMovementY: true, // Y ์ถ ์ด๋ ์ ๊ธ
+ lockRotation: true, // ํ์ ์ ๊ธ
+ lockScalingX: true, // X ์ถ ํฌ๊ธฐ ์กฐ์ ์ ๊ธ
+ lockScalingY: true, // Y ์ถ ํฌ๊ธฐ ์กฐ์ ์ ๊ธ
+ opacity: 0.8,
+ parentId: moduleSetupSurface.parentId,
+ name: 'module',
+ }
+
if (moduleSetupSurfaces.length !== 0) {
let tempModule
- let manualDrawModules = moduleIsSetup // ์์์ ์๋์ผ๋ก ํ์๋ ์ถ๊ฐ๋จ
+ let manualDrawModules = []
let inside = false
let turfPolygon
let flowDirection
let trestlePolygon
+
addCanvasMouseEventListener('mouse:move', (e) => {
//๋ง์ฐ์ค ์ด๋ฒคํธ ์ญ์ ํ ์ฌ์ถ๊ฐ
const mousePoint = canvas.getPointer(e.e)
@@ -142,6 +198,7 @@ export function useModuleBasicSetting() {
for (let i = 0; i < moduleSetupSurfaces.length; i++) {
turfPolygon = polygonToTurfPolygon(moduleSetupSurfaces[i])
trestlePolygon = moduleSetupSurfaces[i]
+ manualDrawModules = moduleSetupSurfaces[i].modules // ์์์ ์๋์ผ๋ก ํ์๋ ์ถ๊ฐ๋จ
flowDirection = moduleSetupSurfaces[i].flowDirection //๋ํ์ ๋ฐฉํฅ
let width = flowDirection === 'south' || flowDirection === 'north' ? 172 : 113
let height = flowDirection === 'south' || flowDirection === 'north' ? 113 : 172
@@ -319,6 +376,7 @@ export function useModuleBasicSetting() {
}
if (!inside) {
+ // tempModule.set({ fill: 'red' })
canvas?.remove(...canvas?.getObjects().filter((obj) => obj.name === 'tempModule'))
canvas?.renderAll()
}
@@ -371,14 +429,12 @@ export function useModuleBasicSetting() {
//๋ง์ฐ์ค ํด๋ฆญ์ set์ผ๋ก ํด๋น ์์น์ ์
์ ๋ฃ์
const isOverlap = manualDrawModules.some((module) => turf.booleanOverlap(tempTurfModule, polygonToTurfPolygon(module))) //๊ฒน์น๋์ง ํ์ธ
if (!isOverlap) {
+ canvas?.remove(tempModule)
//์๊ฒน์น๋ฉด ๋ฃ๋๋ค
- tempModule.setCoords()
- tempModule.set({ name: 'module', fill: '#BFFD9F' })
- manualDrawModules.push(tempModule) //๋ชจ๋๋ฐฐ์ด์ ์ถ๊ฐ
- //ํด๋น ๋ชจ๋์ ํ๋กํผํฐ๋ก ๋ฃ๋๋ค
- trestlePolygon.set({
- modules: manualDrawModules,
- })
+ // tempModule.setCoords()
+ let manualModule = new QPolygon(tempModule.points, { ...moduleOptions })
+ canvas?.add(manualModule)
+ manualDrawModules.push(manualModule)
} else {
alert('์
๋ผ๋ฆฌ ๊ฒน์น๋ฉด ์๋์ฃ ?')
}
@@ -392,11 +448,11 @@ export function useModuleBasicSetting() {
//์๋ ๋ชจ๋ ์ค์น(๊ทธ๋ฆฌ๋ ๋ฐฉ์)
const autoModuleSetup = (placementRef) => {
- const isChidori = placementRef.isChidori.current
+ initEvent() //๋ง์ฐ์ค ์ด๋ฒคํธ ์ด๊ธฐํ
+ const isChidori = placementRef.isChidori.current === 'true' ? true : false
const setupLocation = placementRef.setupLocation.current
- const isMaxSetup = placementRef.isMaxSetup.current
+ const isMaxSetup = placementRef.isMaxSetup.current === 'true' ? true : false
- initEvent()
const moduleSetupSurfaces = moduleSetupSurface //์ ํ ์ค์น๋ฉด
const notSelectedTrestlePolygons = canvas
@@ -418,12 +474,27 @@ export function useModuleBasicSetting() {
return
}
- if (moduleIsSetup.length > 0) {
- alert('๊ธฐ์กด ๋ชจ๋์ ์ ๊ฑฐ๋ฉ๋๋ค.')
- moduleIsSetup.forEach((module) => {
- canvas?.remove(module)
- })
- }
+ //์ด์งํผ ์๋์ผ๋ก ๋๋ฅด๋ฉด ์ ํ์๋๋ฐ๋ ๋ค ๋ ์๊ฐ๋ค
+ canvas.getObjects().forEach((obj) => {
+ if (obj.name === 'module') {
+ canvas.remove(obj)
+ }
+ })
+
+ // console.log('moduleIsSetup', moduleIsSetup)
+
+ // if (moduleIsSetup.length > 0) {
+ // swalFire({ text: 'alert ์์ด์ฝ ํ
์คํธ์
๋๋ค.', icon: 'error' })
+ // }
+
+ // moduleSetupSurfaces.forEach((obj) => {
+ // if (obj.modules) {
+ // obj.modules.forEach((module) => {
+ // canvas?.remove(module)
+ // })
+ // obj.modules = []
+ // }
+ // })
notSelectedTrestlePolygons.forEach((obj) => {
if (obj.modules) {
@@ -434,19 +505,27 @@ export function useModuleBasicSetting() {
}
})
- const moduleSetupArray = []
- moduleSetupSurfaces.forEach((moduleSetupSurface, index) => {
- moduleSetupSurface.fire('mousedown')
+ const moduleOptions = {
+ fill: '#BFFD9F',
+ stroke: 'black',
+ strokeWidth: 0.1,
+ selectable: false, // ์ ํ ๊ฐ๋ฅํ๊ฒ ์ค์
+ lockMovementX: true, // X ์ถ ์ด๋ ์ ๊ธ
+ lockMovementY: true, // Y ์ถ ์ด๋ ์ ๊ธ
+ lockRotation: true, // ํ์ ์ ๊ธ
+ lockScalingX: true, // X ์ถ ํฌ๊ธฐ ์กฐ์ ์ ๊ธ
+ lockScalingY: true, // Y ์ถ ํฌ๊ธฐ ์กฐ์ ์ ๊ธ
+ opacity: 0.8,
+ parentId: moduleSetupSurface.parentId,
+ name: 'module',
+ }
- const surfaceMaxLines = findSetupSurfaceMaxLines(moduleSetupSurface)
+ let leftMargin, bottomMargin, square, chidoriLength
- let maxLengthLine = moduleSetupSurface.lines.reduce((acc, cur) => {
- return acc.length > cur.length ? acc : cur
- })
-
- const turfModuleSetupSurface = polygonToTurfPolygon(moduleSetupSurface) //ํด๋ฆฌ๊ณค์ turf ๊ฐ์ฒด๋ก ๋ณํ
-
- const containsBatchObjects = batchObjects.filter((batchObject) => {
+ //์ ํ๋ ์ง๋ถ์์ ์ค๋ธ์ ํธ(๋๋จธ, ๊ฐ๊ตฌ๋ฑ)์ด ์๋์ง ํ์ธํ๋ ๋ก์ง ํฌํจ๋๋ฉด ๋ฐฐ์ด ๋ฐํ
+ const objectsIncludeSurface = (turfModuleSetupSurface) => {
+ let containsBatchObjects = []
+ containsBatchObjects = batchObjects.filter((batchObject) => {
let convertBatchObject
if (batchObject.type === 'group') {
@@ -454,9 +533,7 @@ export function useModuleBasicSetting() {
convertBatchObject = batchObjectGroupToTurfPolygon(batchObject)
} else {
//๊ฐ๊ตฌ, ๊ทธ๋ฆผ์
- batchObject.set({
- points: rectToPolygon(batchObject),
- })
+ batchObject.set({ points: rectToPolygon(batchObject) })
canvas?.renderAll() // set๋๊ฑธ ๋ฐ๋ก ์ ์ฉํ๊ธฐ ์ํด
convertBatchObject = polygonToTurfPolygon(batchObject) //rect๋ฅผ ํด๋ฆฌ๊ณค์ผ๋ก ๋ณํ -> turf ํด๋ฆฌ๊ณค์ผ๋ก ๋ณํ
}
@@ -465,19 +542,323 @@ export function useModuleBasicSetting() {
return turf.booleanContains(turfModuleSetupSurface, convertBatchObject) || turf.booleanWithin(convertBatchObject, turfModuleSetupSurface)
})
- let difference = turfModuleSetupSurface //๊ธฐ๋ณธ ๊ฐ์ฒด(๋ฉดํ์)
+ return containsBatchObjects
+ }
+
+ /**
+ * ๋๋จธ๋ ๊ฐ๊ตฌ๊ฐ ๋ชจ๋์ ๊ฑธ์น๋์ง ํ์ธํ๋ ๋ก์ง
+ * @param {*} squarePolygon
+ * @param {*} containsBatchObjects
+ * @returns
+ */
+ const checkModuleDisjointObjects = (squarePolygon, containsBatchObjects) => {
+ let isDisjoint = false
if (containsBatchObjects.length > 0) {
- //turf๋ก ๋๋จธ๋ฅผ ์ ์ธ์ํค๋ ๋ก์ง
- for (let i = 0; i < containsBatchObjects.length; i++) {
- let convertBatchObject
- if (containsBatchObjects[i].type === 'group') {
- convertBatchObject = batchObjectGroupToTurfPolygon(containsBatchObjects[i])
+ let convertBatchObject
+ //๋๋จธ๊ฐ ์์ผ๋ฉด ์ ์ฉ๋๋ ๋ก์ง
+ isDisjoint = containsBatchObjects.every((batchObject) => {
+ if (batchObject.type === 'group') {
+ convertBatchObject = batchObjectGroupToTurfPolygon(batchObject)
} else {
- convertBatchObject = polygonToTurfPolygon(containsBatchObjects[i])
+ convertBatchObject = polygonToTurfPolygon(batchObject)
+ }
+ /**
+ * ๋๋จธ๊ฐ ์ฌ๋ฌ๊ฐ์ผ์์์ผ๋ฏ๋ก ๊ฒน์น๋๊ฒ ์๋ค๋ฉด...
+ * ์๊ฒน์น๋์ง ํ์ธํ๋ ๋ก์ง์ด๋ผ ์๊ฒน์น๋ฉด true๋ฅผ ๋ฐํ
+ */
+ return turf.booleanDisjoint(squarePolygon, convertBatchObject)
+ })
+ } else {
+ isDisjoint = true
+ }
+ return isDisjoint
+ }
+
+ /**
+ * ๋ฐฐ์น๋ฉด ์์ ์๋์ง ํ์ธ
+ * @param {*} squarePolygon
+ * @param {*} turfModuleSetupSurface
+ * @returns
+ */
+ const checkModuleDisjointSurface = (squarePolygon, turfModuleSetupSurface) => {
+ return turf.booleanContains(turfModuleSetupSurface, squarePolygon) || turf.booleanWithin(squarePolygon, turfModuleSetupSurface)
+ }
+
+ const downFlowSetupModule = (surfaceMaxLines, width, height, moduleSetupArray, flowModuleLine, isCenter = false) => {
+ let startPoint = flowModuleLine.bottom
+
+ if (isCenter) {
+ //์ค์๋ฐฐ์น์ผ ๊ฒฝ์ฐ์๋ ๊ณ์ฐํ๋ค
+
+ if (flowModuleLine.bottom.type === 'flat' && flowModuleLine.left.type === 'flat' && flowModuleLine.right.type === 'flat') {
+ //ํ๋จ ๊ธฐ์ค์ผ๋ก ์๋ฉด์ด ์ง์ ์ด๋ฉด ํ๋จ ๋ฐฉ๋ฉด์ผ๋ก ๊ฐ์ด๋ฐ๋ก ๋ฐฐ์น
+ const halfWidthLength = Math.abs(startPoint.x1 + startPoint.x2) / 2 //๋ฐ์ ๊ธธ์ด์์ ๋ฐ์ ๊ฐ๋ฅธ๋ค
+ const halfModuleWidthLength = width / 2
+ startPoint = { ...startPoint, x1: halfWidthLength - halfModuleWidthLength }
+
+ if (flowModuleLine.top.type === 'flat') {
+ //์๋จ๊น์ง ํ๋ฉด์ด๋ฉด ์ง์ฌ๊ฐ,์ ์ฌ๊ฐ์ด๋ผ ๊ฐ์ ํ๊ณ ์์์ ์ค์ฌ์ผ๋ก ๊ณ์ฐ
+ const heightLength = Math.abs(flowModuleLine.left.y1 - flowModuleLine.left.y2) //์์์ ๊ธธ์ด์์ ๋ฐ์ ๊ฐ๋ฅธ๋ค
+ const heightMargin = Math.abs(heightLength - height * Math.floor(heightLength / height)) / 2
+ startPoint = { ...startPoint, y1: startPoint.y1 - heightMargin }
}
}
}
+ // else {
+ // //์ค์๋ฐฐ์น๊ฐ ์๋๋๋ ํ๋ฆ ๋ฐฉํฅ ๊ธฐ์ค๋ฉด์ผ๋ก ์๋ฉด์ด ์ง์ ์ด๋ฉด ๊ฐ์ด๋ฐ ๋ฐฐ์น
+ // if (flowModuleLine.bottom.type === 'flat' && flowModuleLine.left.type === 'flat' && flowModuleLine.right.type === 'flat') {
+ // //ํ๋จ ๊ธฐ์ค์ผ๋ก ์๋ฉด์ด ์ง์ ์ด๋ฉด ํ๋จ ๋ฐฉ๋ฉด์ผ๋ก ๊ฐ์ด๋ฐ๋ก ๋ฐฐ์น
+ // const halfWidthLength = Math.abs(startPoint.x1 + startPoint.x2) / 2 //๋ฐ์ ๊ธธ์ด์์ ๋ฐ์ ๊ฐ๋ฅธ๋ค
+ // const halfModuleWidthLength = width / 2
+ // startPoint = { ...startPoint, x1: halfWidthLength - halfModuleWidthLength }
+ // }
+ // }
+
+ const maxLeftEndPoint = surfaceMaxLines.left.x1 //์ต ์ข์ธก
+ const maxRightEndPoint = surfaceMaxLines.right.x1 //์ต ์ฐ์ธก
+ const maxTopEndPoint = surfaceMaxLines.top.y1 //์ต ์๋จ
+
+ let totalLeftEndPoint = maxLeftEndPoint - startPoint.x1
+ let totalTopEndPoint = maxTopEndPoint - startPoint.y1
+ let totalWidth = Math.ceil(Math.abs(maxRightEndPoint - maxLeftEndPoint) / width)
+ let diffLeftEndPoint = Math.abs(totalLeftEndPoint / width)
+ let diffTopEndPoint = Math.abs(totalTopEndPoint / height)
+ let startColPoint = Math.abs(width * Math.ceil(diffLeftEndPoint) - startPoint.x1)
+ let tempMaxWidth = isMaxSetup ? width / 2 : width //์ต๋๋ฐฐ์น์ธ์ง ํ์ธํ๋ ค๊ณ ๋ฃ์
+ if (isMaxSetup) totalWidth = totalWidth * 2 //์ต๋๋ฐฐ์น์ 2๋ฐฐ๋ก ๋๋ ค์ ๋ฐ์ฉ ๊ฒ์ฌํ๊ธฐ์ํจ
+
+ for (let j = 0; j < diffTopEndPoint; j++) {
+ bottomMargin = j === 0 ? 1 : 2
+ for (let i = 0; i <= totalWidth; i++) {
+ leftMargin = i === 0 ? 1 : 2
+ chidoriLength = 0
+ if (isChidori) {
+ chidoriLength = j % 2 === 0 ? 0 : width / 2
+ }
+
+ square = [
+ [startColPoint + tempMaxWidth * i - chidoriLength + leftMargin, startPoint.y1 - height * j - bottomMargin],
+ [startColPoint + tempMaxWidth * i + width - chidoriLength + leftMargin, startPoint.y1 - height * j - bottomMargin],
+ [startColPoint + tempMaxWidth * i + width - chidoriLength + leftMargin, startPoint.y1 - height * j - height - bottomMargin],
+ [startColPoint + tempMaxWidth * i - chidoriLength + leftMargin, startPoint.y1 - height * j - height - bottomMargin],
+ [startColPoint + tempMaxWidth * i - chidoriLength + leftMargin, startPoint.y1 - height * j - bottomMargin],
+ ]
+
+ let squarePolygon = turf.polygon([square])
+ let turfCoordnates = squarePolygon.geometry.coordinates[0].slice(0, -1)
+ let points = turfCoordnates.map((coord) => ({ x: coord[0], y: coord[1] }))
+
+ let tempModule = new QPolygon(points, { ...moduleOptions, turfPoints: squarePolygon })
+ canvas?.add(tempModule)
+ moduleSetupArray.push(tempModule)
+ }
+ }
+ }
+
+ const leftFlowSetupModule = (surfaceMaxLines, width, height, moduleSetupArray, flowModuleLine, isCenter = false) => {
+ let startPoint = flowModuleLine.left
+
+ //์ค์๋ฐฐ์น์ผ ๊ฒฝ์ฐ์๋ ๊ณ์ฐํ๋ค
+ if (isCenter) {
+ if (flowModuleLine.left.type === 'flat' && flowModuleLine.bottom.type === 'flat' && flowModuleLine.top.type === 'flat') {
+ //์ข์ธก ๊ธฐ์ค์ผ๋ก ์๋ฉด์ด ์ง์ ์ด๋ฉด ํ๋จ ๋ฐฉ๋ฉด์ผ๋ก ๊ฐ์ด๋ฐ๋ก ๋ฐฐ์น
+ const halfWidthLength = Math.abs(startPoint.y1 + startPoint.y2) / 2 //๋ฐ์ ๊ธธ์ด์์ ๋ฐ์ ๊ฐ๋ฅธ๋ค
+ const halfModuleWidthLength = height / 2
+ startPoint = { ...startPoint, y1: halfWidthLength - halfModuleWidthLength }
+ if (flowModuleLine.right.type === 'flat') {
+ //์ฐ์ธก๊น์ง ํ๋ฉด์ด๋ฉด ์ง์ฌ๊ฐ,์ ์ฌ๊ฐ์ด๋ผ ๊ฐ์ ํ๊ณ ์์์ ์ค์ฌ์ผ๋ก ๊ณ์ฐ
+ const widthLength = Math.abs(flowModuleLine.top.x1 - flowModuleLine.top.x2) //์์์ ๊ธธ์ด์์ ๋ฐ์ ๊ฐ๋ฅธ๋ค
+ const widthMargin = Math.abs(widthLength - width * Math.floor(widthLength / width)) / 2
+ startPoint = { ...startPoint, x1: startPoint.x1 + widthMargin }
+ }
+ }
+ }
+
+ const maxRightEndPoint = surfaceMaxLines.right.x1 //์ต ์ฐ์ธก
+ const maxTopEndPoint = surfaceMaxLines.top.y1 //์ต ์๋จ
+ const maxBottomEndPoint = surfaceMaxLines.bottom.y1 //์ตํ๋จ
+
+ let totalTopEndPoint = Math.abs(maxTopEndPoint - startPoint.y1) //์ ์ฒด ๋์ด์์ ํ์ฌ ๋์ด๋ฅผ ๋บ
+ let diffTopEndPoint = Math.abs(totalTopEndPoint / height)
+ let totalHeight = Math.ceil(Math.abs(maxBottomEndPoint - maxTopEndPoint) / height)
+ let totalWidth = Math.abs(startPoint.x1 - maxRightEndPoint) / width
+ let startRowPoint = startPoint.y1 - height * Math.ceil(diffTopEndPoint)
+
+ let tempMaxHeight = isMaxSetup ? height / 2 : height //์ต๋๋ฐฐ์น์ธ์ง ํ์ธํ๋ ค๊ณ ๋ฃ์
+ if (isMaxSetup) totalHeight = totalHeight * 2 //์ต๋๋ฐฐ์น์ 2๋ฐฐ๋ก ๋๋ ค์ ๋ฐ์ฉ ๊ฒ์ฌ
+
+ for (let i = 0; i <= totalWidth; i++) {
+ bottomMargin = i === 0 ? 1 : 2
+ for (let j = 0; j < totalHeight; j++) {
+ leftMargin = i === 0 ? 1 : 2
+ chidoriLength = 0
+ if (isChidori) {
+ chidoriLength = i % 2 === 0 ? 0 : height / 2
+ }
+
+ square = [
+ [startPoint.x1 + width * i + leftMargin, startRowPoint + tempMaxHeight * j + bottomMargin - chidoriLength],
+ [startPoint.x1 + width * i + width + leftMargin, startRowPoint + tempMaxHeight * j + bottomMargin - chidoriLength],
+ [startPoint.x1 + width * i + width + leftMargin, startRowPoint + tempMaxHeight * j + height + bottomMargin - chidoriLength],
+ [startPoint.x1 + width * i + leftMargin, startRowPoint + tempMaxHeight * j + height + bottomMargin - chidoriLength],
+ [startPoint.x1 + width * i + leftMargin, startRowPoint + tempMaxHeight * j + bottomMargin - chidoriLength],
+ ]
+
+ let squarePolygon = turf.polygon([square])
+ let turfCoordnates = squarePolygon.geometry.coordinates[0].slice(0, -1)
+ let points = turfCoordnates.map((coord) => ({ x: coord[0], y: coord[1] }))
+
+ // if (disjointFromTrestle && isDisjoint) {
+ let tempModule = new QPolygon(points, { ...moduleOptions, turfPoints: squarePolygon })
+ canvas?.add(tempModule)
+ moduleSetupArray.push(tempModule)
+ }
+ }
+ }
+
+ const topFlowSetupModule = (surfaceMaxLines, width, height, moduleSetupArray, flowModuleLine, isCenter = false) => {
+ let startPoint = flowModuleLine.top
+
+ if (isCenter) {
+ //์ค์๋ฐฐ์น์ผ ๊ฒฝ์ฐ์๋ ๊ณ์ฐํ๋ค
+ if (flowModuleLine.top.type === 'flat' && flowModuleLine.left.type === 'flat' && flowModuleLine.right.type === 'flat') {
+ //ํ๋จ ๊ธฐ์ค์ผ๋ก ์๋ฉด์ด ์ง์ ์ด๋ฉด ํ๋จ ๋ฐฉ๋ฉด์ผ๋ก ๊ฐ์ด๋ฐ๋ก ๋ฐฐ์น
+ const halfWidthLength = Math.abs(startPoint.x1 + startPoint.x2) / 2 //๋ฐ์ ๊ธธ์ด์์ ๋ฐ์ ๊ฐ๋ฅธ๋ค
+ const halfModuleWidthLength = width / 2
+ startPoint = { ...startPoint, x1: halfWidthLength - halfModuleWidthLength }
+
+ if (flowModuleLine.bottom.type === 'flat') {
+ //์๋จ๊น์ง ํ๋ฉด์ด๋ฉด ์ง์ฌ๊ฐ,์ ์ฌ๊ฐ์ด๋ผ ๊ฐ์ ํ๊ณ ์์์ ์ค์ฌ์ผ๋ก ๊ณ์ฐ
+ const heightLength = Math.abs(flowModuleLine.left.y1 - flowModuleLine.left.y2) //์์์ ๊ธธ์ด์์ ๋ฐ์ ๊ฐ๋ฅธ๋ค
+ const heightMargin = Math.abs(heightLength - height * Math.floor(heightLength / height)) / 2
+ startPoint = { ...startPoint, x1: halfWidthLength - halfModuleWidthLength, y1: startPoint.y1 - heightMargin }
+ }
+ }
+ }
+ // else {
+ // //์ค์๋ฐฐ์น๊ฐ ์๋๋๋ ํ๋ฆ ๋ฐฉํฅ ๊ธฐ์ค๋ฉด์ผ๋ก ์๋ฉด์ด ์ง์ ์ด๋ฉด ๊ฐ์ด๋ฐ ๋ฐฐ์น
+ // if (flowModuleLine.bottom.type === 'flat' && flowModuleLine.left.type === 'flat' && flowModuleLine.right.type === 'flat') {
+ // //ํ๋จ ๊ธฐ์ค์ผ๋ก ์๋ฉด์ด ์ง์ ์ด๋ฉด ํ๋จ ๋ฐฉ๋ฉด์ผ๋ก ๊ฐ์ด๋ฐ๋ก ๋ฐฐ์น
+ // const halfWidthLength = Math.abs(startPoint.x1 + startPoint.x2) / 2 //๋ฐ์ ๊ธธ์ด์์ ๋ฐ์ ๊ฐ๋ฅธ๋ค
+ // const halfModuleWidthLength = width / 2
+ // startPoint = { ...startPoint, x1: halfWidthLength - halfModuleWidthLength }
+ // }
+ // }
+
+ const maxLeftEndPoint = surfaceMaxLines.left.x1 //์ต ์ข์ธก
+ const maxRightEndPoint = surfaceMaxLines.right.x1 //์ต ์ฐ์ธก
+ const maxBottomEndPoint = surfaceMaxLines.bottom.y1 //์ตํ๋จ
+
+ let totalLeftEndPoint = maxLeftEndPoint - startPoint.x1
+ let totalRightEndPoint = maxLeftEndPoint - maxRightEndPoint
+ let totalBottomEndPoint = maxBottomEndPoint - startPoint.y1
+ let diffLeftEndPoint = Math.abs(totalLeftEndPoint / width)
+ let diffRightEndPoint = Math.ceil(Math.abs(totalRightEndPoint / width))
+ let diffBottomEndPoint = Math.ceil(Math.abs(totalBottomEndPoint / height))
+ let startColPoint = Math.abs(width * Math.ceil(diffLeftEndPoint) - startPoint.x1)
+ let tempMaxWidth = isMaxSetup ? width / 2 : width //์ต๋๋ฐฐ์น์ธ์ง ํ์ธํ๋ ค๊ณ ๋ฃ์
+ if (isMaxSetup) diffRightEndPoint = diffRightEndPoint * 2 //์ต๋๋ฐฐ์น์ 2๋ฐฐ๋ก ๋๋ ค์ ๋ฐ์ฉ ๊ฒ์ฌํ๊ธฐ์ํจ
+
+ for (let j = 0; j < diffBottomEndPoint; j++) {
+ bottomMargin = j === 0 ? 1 : 2
+ for (let i = 0; i < diffRightEndPoint; i++) {
+ leftMargin = i === 0 ? 1 : 2
+ chidoriLength = 0
+ if (isChidori) {
+ chidoriLength = j % 2 === 0 ? 0 : width / 2
+ }
+ square = [
+ [startColPoint + tempMaxWidth * i + chidoriLength + leftMargin, startPoint.y1 + height * j + bottomMargin],
+ [startColPoint + tempMaxWidth * i + chidoriLength + leftMargin, startPoint.y1 + height * j + height + bottomMargin],
+ [startColPoint + tempMaxWidth * i + width + chidoriLength + leftMargin, startPoint.y1 + height * j + height + bottomMargin],
+ [startColPoint + tempMaxWidth * i + width + chidoriLength + leftMargin, startPoint.y1 + height * j + bottomMargin],
+ [startColPoint + tempMaxWidth * i + chidoriLength + leftMargin, startPoint.y1 + height * j + bottomMargin],
+ ]
+
+ let squarePolygon = turf.polygon([square])
+ let turfCoordnates = squarePolygon.geometry.coordinates[0].slice(0, -1)
+ let points = turfCoordnates.map((coord) => ({ x: coord[0], y: coord[1] }))
+
+ // if (disjointFromTrestle && isDisjoint) {
+ let tempModule = new QPolygon(points, { ...moduleOptions, turfPoints: squarePolygon })
+ canvas?.add(tempModule)
+ moduleSetupArray.push(tempModule)
+ }
+ }
+ }
+
+ const rightFlowSetupModule = (surfaceMaxLines, width, height, moduleSetupArray, flowModuleLine, isCenter = false) => {
+ let startPoint = flowModuleLine.right
+
+ if (isCenter) {
+ if (flowModuleLine.left.type === 'flat' && flowModuleLine.bottom.type === 'flat' && flowModuleLine.top.type === 'flat') {
+ //์ข์ธก ๊ธฐ์ค์ผ๋ก ์๋ฉด์ด ์ง์ ์ด๋ฉด ํ๋จ ๋ฐฉ๋ฉด์ผ๋ก ๊ฐ์ด๋ฐ๋ก ๋ฐฐ์น
+ const halfWidthLength = Math.abs(startPoint.y1 + startPoint.y2) / 2 //๋ฐ์ ๊ธธ์ด์์ ๋ฐ์ ๊ฐ๋ฅธ๋ค
+ const halfModuleWidthLength = height / 2
+ startPoint = { ...startPoint, y1: halfWidthLength + halfModuleWidthLength }
+
+ if (flowModuleLine.right.type === 'flat') {
+ //์ฐ์ธก๊น์ง ํ๋ฉด์ด๋ฉด ์ง์ฌ๊ฐ,์ ์ฌ๊ฐ์ด๋ผ ๊ฐ์ ํ๊ณ ์์์ ์ค์ฌ์ผ๋ก ๊ณ์ฐ
+ const widthLength = Math.abs(flowModuleLine.top.x1 - flowModuleLine.top.x2) //์์์ ๊ธธ์ด์์ ๋ฐ์ ๊ฐ๋ฅธ๋ค
+ const widthMargin = Math.abs(widthLength - width * Math.floor(widthLength / width)) / 2
+ startPoint = { ...startPoint, x1: startPoint.x1 - widthMargin }
+ }
+ }
+ }
+
+ const maxLeftEndPoint = surfaceMaxLines.left.x1 //์ต ์ข์ธก
+ const maxTopEndPoint = surfaceMaxLines.top.y1 //์ต ์๋จ
+ const maxBottomEndPoint = surfaceMaxLines.bottom.y1 //์ตํ๋จ
+
+ let totalTopEndPoint = Math.abs(maxTopEndPoint - startPoint.y1) //์ ์ฒด ๋์ด์์ ํ์ฌ ๋์ด๋ฅผ ๋บ
+ let diffTopEndPoint = Math.abs(totalTopEndPoint / height)
+ let totalHeight = Math.ceil(Math.abs(maxBottomEndPoint - maxTopEndPoint) / height)
+ let totalWidth = Math.abs(startPoint.x1 - maxLeftEndPoint) / width
+ let startRowPoint = startPoint.y1 - height * Math.ceil(diffTopEndPoint) - 3 // -3์ผ๋ก ์์น์ด์ง ๋ณด์
+
+ let tempMaxHeight = isMaxSetup ? height / 2 : height //์ต๋๋ฐฐ์น์ธ์ง ํ์ธํ๋ ค๊ณ ๋ฃ์
+ if (isMaxSetup) totalHeight = totalHeight * 2 //์ต๋๋ฐฐ์น์ 2๋ฐฐ๋ก ๋๋ ค์ ๋ฐ์ฉ ๊ฒ์ฌ
+
+ for (let i = 0; i <= totalWidth; i++) {
+ bottomMargin = i === 0 ? 1 : 2
+ for (let j = 0; j < totalHeight; j++) {
+ leftMargin = j === 0 ? 1 : 2
+ chidoriLength = 0
+ if (isChidori) {
+ chidoriLength = i % 2 === 0 ? 0 : height / 2
+ }
+
+ square = [
+ [startPoint.x1 - width * i - leftMargin, startRowPoint + tempMaxHeight * j + bottomMargin + chidoriLength],
+ [startPoint.x1 - width * i - width - leftMargin, startRowPoint + tempMaxHeight * j + bottomMargin + chidoriLength],
+ [startPoint.x1 - width * i - width - leftMargin, startRowPoint + tempMaxHeight * j + height + bottomMargin + chidoriLength],
+ [startPoint.x1 - width * i - leftMargin, startRowPoint + tempMaxHeight * j + height + bottomMargin + chidoriLength],
+ [startPoint.x1 - width * i - leftMargin, startRowPoint + tempMaxHeight * j + bottomMargin + chidoriLength],
+ ]
+
+ let squarePolygon = turf.polygon([square])
+ let turfCoordnates = squarePolygon.geometry.coordinates[0].slice(0, -1)
+ let points = turfCoordnates.map((coord) => ({ x: coord[0], y: coord[1] }))
+
+ // if (disjointFromTrestle && isDisjoint) {
+ let tempModule = new QPolygon(points, { ...moduleOptions, turfPoints: squarePolygon })
+ canvas?.add(tempModule)
+ moduleSetupArray.push(tempModule)
+ }
+ }
+ }
+
+ moduleSetupSurfaces.forEach((moduleSetupSurface, index) => {
+ moduleSetupSurface.fire('mousedown')
+ const moduleSetupArray = []
+
+ let maxLengthLine = moduleSetupSurface.lines.reduce((acc, cur) => {
+ return acc.length > cur.length ? acc : cur
+ })
+
+ const turfModuleSetupSurface = polygonToTurfPolygon(moduleSetupSurface) //ํด๋ฆฌ๊ณค์ turf ๊ฐ์ฒด๋ก ๋ณํ
+ const containsBatchObjects = objectsIncludeSurface(turfModuleSetupSurface) //๋ฐฐ์น๋ฉด์ ์ค๋ธ์ ํธ(๋๋จธ, ๊ฐ๊ตฌ๋ฑ)์ด ์๋์ง ํ์ธํ๋ ๋ก์ง
let width = maxLengthLine.flowDirection === 'east' || maxLengthLine.flowDirection === 'west' ? 172.2 : 113.4
let height = maxLengthLine.flowDirection === 'east' || maxLengthLine.flowDirection === 'west' ? 113.4 : 172.2
@@ -488,205 +869,335 @@ export function useModuleBasicSetting() {
height = moduleSetupSurface.flowDirection === 'south' || moduleSetupSurface.flowDirection === 'north' ? 113.4 : 172.2
}
- let square
- let startPoint, endPoint
+ const surfaceMaxLines = findSetupSurfaceMaxLines(moduleSetupSurface)
+ //์ฒ๋ง๋ฉด ๋ฐฐ์น
if (setupLocation === 'eaves') {
+ // ํ๋ฆ๋ฐฉํฅ์ด ๋จ์ชฝ์ผ๋
if (moduleSetupSurface.flowDirection === 'south') {
- startPoint = flowModuleLine.find((obj) => obj.target === 'bottom')
- endPoint = flowModuleLine.find((obj) => obj.target === 'top')
- const totalHeight = endPoint.y1 - startPoint.y1
- const diffHeight = Math.abs(totalHeight / height)
- let leftMargin = 0
- let bottomMargin = 0
-
- for (let i = 0; i < diffHeight; i++) {
- leftMargin = i === 0 ? 1 : 0
- bottomMargin = i === 0 ? 0 : 1
-
- square = [
- [startPoint.x1 + leftMargin, startPoint.y1 - height - bottomMargin],
- [startPoint.x1 + leftMargin, startPoint.y1 - bottomMargin],
- [startPoint.x1 + leftMargin + width, startPoint.y1 - bottomMargin],
- [startPoint.x1 + leftMargin + width, startPoint.y1 - height - bottomMargin],
- [startPoint.x1 + leftMargin, startPoint.y1 - height - bottomMargin],
- ]
-
- const squarePolygon = turf.polygon([square])
-
- //์ค์น๋ฉด ์์ ์๋์ง ํ์ธ
- const disjointFromTrestle =
- turf.booleanContains(turfModuleSetupSurface, squarePolygon) || turf.booleanWithin(squarePolygon, turfModuleSetupSurface)
-
- if (disjointFromTrestle) {
- let turfCoordnates = squarePolygon.geometry.coordinates[0].slice(0, -1)
- const points = turfCoordnates.map((coord) => ({ x: coord[0], y: coord[1] }))
-
- if (containsBatchObjects.length > 0) {
- let convertBatchObject
- //๋๋จธ๊ฐ ์์ผ๋ฉด ์ ์ฉ๋๋ ๋ก์ง
- const isDisjoint = containsBatchObjects.every((batchObject) => {
- if (batchObject.type === 'group') {
- convertBatchObject = batchObjectGroupToTurfPolygon(batchObject)
- } else {
- convertBatchObject = polygonToTurfPolygon(batchObject)
- }
- return turf.booleanDisjoint(squarePolygon, convertBatchObject) //๋๋จธ๊ฐ ์ฌ๋ฌ๊ฐ์ผ์์์ผ๋ฏ๋ก ๊ฒน์น๋๊ฒ ์๋ค๋ฉด...
- })
- if (isDisjoint) {
- const tempModule = new QPolygon(points, {
- fill: '#BFFD9F',
- stroke: 'black',
- strokeWidth: 0.1,
- selectable: true, // ์ ํ ๊ฐ๋ฅํ๊ฒ ์ค์
- lockMovementX: false, // X ์ถ ์ด๋ ์ ๊ธ
- lockMovementY: false, // Y ์ถ ์ด๋ ์ ๊ธ
- lockRotation: false, // ํ์ ์ ๊ธ
- lockScalingX: false, // X ์ถ ํฌ๊ธฐ ์กฐ์ ์ ๊ธ
- lockScalingY: false, // Y ์ถ ํฌ๊ธฐ ์กฐ์ ์ ๊ธ
- opacity: 0.8,
- parentId: moduleSetupSurface.parentId,
- name: 'module',
- })
- tempModule.setViewLengthText(false)
- canvas?.add(tempModule)
- moduleSetupArray.push(tempModule)
- }
- } else {
- //๋๋จธ๊ฐ ์์๋ ๊ทธ๋ฅ ๊ทธ๋ฆผ
- const tempModule = new QPolygon(points, {
- fill: '#BFFD9F',
- stroke: 'black',
- selectable: true, // ์ ํ ๊ฐ๋ฅํ๊ฒ ์ค์
- lockMovementX: true, // X ์ถ ์ด๋ ์ ๊ธ
- lockMovementY: true, // Y ์ถ ์ด๋ ์ ๊ธ
- lockRotation: true, // ํ์ ์ ๊ธ
- lockScalingX: true, // X ์ถ ํฌ๊ธฐ ์กฐ์ ์ ๊ธ
- lockScalingY: true, // Y ์ถ ํฌ๊ธฐ ์กฐ์ ์ ๊ธ
- opacity: 0.8,
- parentId: moduleSetupSurface.parentId,
- name: 'module',
- })
- canvas?.add(tempModule)
- moduleSetupArray.push(tempModule)
- }
- startPoint = { x1: points[0].x, y1: points[0].y, x2: points[3].x, y2: points[3].y }
- }
- }
+ downFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines)
+ }
+ if (moduleSetupSurface.flowDirection === 'west') {
+ leftFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines)
+ }
+ if (moduleSetupSurface.flowDirection === 'east') {
+ rightFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines)
+ }
+ if (moduleSetupSurface.flowDirection === 'north') {
+ topFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines)
}
} else if (setupLocation === 'ridge') {
- } else {
+ //์ฉ๋ง๋ฃจ
+ if (moduleSetupSurface.flowDirection === 'south') {
+ topFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines)
+ }
+ if (moduleSetupSurface.flowDirection === 'west') {
+ rightFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines)
+ }
+ if (moduleSetupSurface.flowDirection === 'east') {
+ leftFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines)
+ }
+ if (moduleSetupSurface.flowDirection === 'north') {
+ downFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines)
+ }
+ } else if (setupLocation === 'center') {
+ //์ค๊ฐ๋ฉด
+ if (moduleSetupSurface.flowDirection === 'south') {
+ downFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines, true)
+ }
+ if (moduleSetupSurface.flowDirection === 'west') {
+ leftFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines, true)
+ }
+ if (moduleSetupSurface.flowDirection === 'east') {
+ rightFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines, true)
+ }
+ if (moduleSetupSurface.flowDirection === 'north') {
+ topFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines, true)
+ }
}
- moduleSetupSurface.set({ modules: moduleSetupArray })
+ const setupedModules = moduleSetupArray.filter((module, index) => {
+ let disjointFromTrestle = checkModuleDisjointSurface(module.turfPoints, turfModuleSetupSurface)
+ let isDisjoint = checkModuleDisjointObjects(module.turfPoints, containsBatchObjects)
+
+ if (!(disjointFromTrestle && isDisjoint)) {
+ canvas?.remove(module)
+ // module.set({ fill: 'rgba(255,190,41, 0.4)', stroke: 'black', strokeWidth: 1 })
+ return false
+ } else {
+ return module
+ }
+ })
+
+ canvas?.renderAll()
+
+ //๋๊ฐ์ ๋ค ์ ์ธํ๊ณ ์ค์น๋ ์ ๋ค๋ก ๊ฒน์น์ ๋ค ์ญ์ ํ๊ธฐ
+ setupedModules.forEach((module, index) => {
+ if (isMaxSetup && index > 0) {
+ const isOverlap = turf.booleanOverlap(polygonToTurfPolygon(setupedModules[index - 1]), polygonToTurfPolygon(module))
+ //๊ฒน์น๋์ง ํ์ธ
+ if (isOverlap) {
+ //๊ฒน์ณ์์ผ๋ฉด ์ญ์
+ canvas?.remove(module)
+ // module.set({ fill: 'rgba(72, 161, 250, 0.4)', stroke: 'black', strokeWidth: 0.1 })
+ canvas.renderAll()
+ setupedModules.splice(index, 1)
+ return false
+ }
+ }
+ })
+
+ moduleSetupSurface.set({ modules: setupedModules })
+
+ // const moduleArray = [...moduleIsSetup]
+ // moduleArray.push({
+ // surfaceId: moduleSetupSurface.surfaceId,
+ // moduleSetupArray: setupedModules,
+ // })
+ // setModuleIsSetup(moduleArray)
})
-
- setModuleIsSetup(moduleSetupArray)
-
- console.log(calculateForApi(moduleSetupArray))
+ calculateForApi()
}
- const calculateForApi = (moduleSetupArray) => {
- const centerPoints = []
- moduleSetupArray.forEach((module, index) => {
- module.tempIndex = index
- const { x, y } = module.getCenterPoint()
- const { width, height } = module
- centerPoints.push({ x, y, width, height, index })
- const circle = new fabric.Circle({
- radius: 5,
- fill: 'red',
- name: 'redCircle',
- left: x - 5,
- top: y - 5,
- index: index,
- selectable: false,
+ const calculateForApi = () => {
+ const moduleSufaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE)
+
+ const results = []
+
+ moduleSufaces.forEach((moduleSurface) => {
+ const centerPoints = []
+ const direction = moduleSurface.direction
+ const modules = moduleSurface.modules
+
+ modules.forEach((module, index) => {
+ module.tempIndex = index
+ const { x, y } = module.getCenterPoint()
+ const { width, height } = module
+ centerPoints.push({ x, y, width: Math.floor(width), height: Math.floor(height), index })
+ })
+
+ if (centerPoints.length === 0) return
+
+ //์์ ๋
ธ์ถ ํ๋ฉด
+ let exposedBottom = 0
+ // ๋ฐ ๋
ธ์ถ ํ๋ฉด
+ let exposedHalfBottom = 0
+ // ์์ ๋
ธ์ถ ์๋ฉด
+ let exposedTop = 0
+ //๋ฐ ๋
ธ์ถ ์๋ฉด
+ let exposedHalfTop = 0
+ // ์์ ์ ๋ฉด
+ let touchDimension = 0
+ //๋ฐ์ ๋ฉด
+ let halfTouchDimension = 0
+ // ๋
ธ์ถํ๋ฉด ์ฒดํฌ
+ centerPoints.forEach((centerPoint, index) => {
+ const { x, y, width, height } = centerPoint
+ // centerPoints์ค์ ํ์ฌ centerPoint์ x๊ฐ์ด ๊ฐ๊ณ , y๊ฐ์ด y-height๊ฐ๊ณผ ๊ฐ์ centerPoint๊ฐ ์๋์ง ํ์ธ
+ let bottomCell
+ let bottomLeftPoint
+ let bottomRightPoint
+ let leftBottomCnt
+ let rightBottomCnt
+
+ switch (direction) {
+ case 'south':
+ bottomCell = centerPoints.filter((centerPoint) => Math.abs(centerPoint.x - x) < 2 && Math.abs(centerPoint.y - (y + height)) < 2)
+ bottomLeftPoint = { x: x - width / 2, y: y + height }
+ bottomRightPoint = { x: x + width / 2, y: y + height }
+ break
+ case 'north':
+ bottomCell = centerPoints.filter((centerPoint) => Math.abs(centerPoint.x - x) < 2 && Math.abs(centerPoint.y - (y - height)) < 2)
+ bottomLeftPoint = { x: x + width / 2, y: y - height }
+ bottomRightPoint = { x: x - width / 2, y: y - height }
+ break
+ case 'east':
+ bottomCell = centerPoints.filter((centerPoint) => Math.abs(centerPoint.x - (x - width)) < 2 && Math.abs(centerPoint.y - y) < 2)
+ bottomLeftPoint = { x: x + width, y: y + height / 2 }
+ bottomRightPoint = { x: x + width, y: y - height / 2 }
+ break
+ case 'west':
+ bottomCell = centerPoints.filter((centerPoint) => Math.abs(centerPoint.x - (x + width)) < 2 && Math.abs(centerPoint.y - y) < 2)
+ bottomLeftPoint = { x: x - width, y: y - height / 2 }
+ bottomRightPoint = { x: x - width, y: y + height / 2 }
+ break
+ }
+
+ if (bottomCell.length === 1) {
+ return
+ }
+
+ // ๋ฐ๋ก ์๋์ ์
์ด ์๋ ๊ฒฝ์ฐ ๋ฌผ๋ผ์ธ ๋ฐฐ์น๊ฐ ์ผ์ชฝ ๋์ด์๋ ์
์ ์ฐพ๋๋ค.
+ leftBottomCnt = centerPoints.filter(
+ (centerPoint) => Math.abs(centerPoint.x - bottomLeftPoint.x) < 2 && Math.abs(centerPoint.y - bottomLeftPoint.y) < 2,
+ ).length
+ rightBottomCnt = centerPoints.filter(
+ (centerPoint) => Math.abs(centerPoint.x - bottomRightPoint.x) < 2 && Math.abs(centerPoint.y - bottomRightPoint.y) < 2,
+ ).length
+
+ if (leftBottomCnt + rightBottomCnt === 1) {
+ exposedHalfBottom++
+ return
+ }
+ })
+ // ๋
ธ์ถ์๋ฉด ์ฒดํฌ
+
+ centerPoints.forEach((centerPoint, index) => {
+ const { x, y, width, height } = centerPoint
+
+ let topCell
+ let topLeftPoint
+ let topRightPoint
+ let leftTopCnt
+ let rightTopCnt
+
+ switch (direction) {
+ case 'south':
+ topCell = centerPoints.filter((centerPoint) => Math.abs(centerPoint.x - x) < 2 && Math.abs(centerPoint.y - (y - height)) < 2)
+ topLeftPoint = { x: x - width / 2, y: y - height }
+ topRightPoint = { x: x + width / 2, y: y - height }
+ break
+ case 'north':
+ topCell = centerPoints.filter((centerPoint) => Math.abs(centerPoint.x - x) < 2 && Math.abs(centerPoint.y - (y + height)) < 2)
+ topLeftPoint = { x: x + width / 2, y: y + height }
+ topRightPoint = { x: x - width / 2, y: y + height }
+ break
+ case 'east':
+ topCell = centerPoints.filter((centerPoint) => Math.abs(centerPoint.x - (x - width)) < 2 && Math.abs(centerPoint.y - y) < 2)
+ topLeftPoint = { x: x - width, y: y + height / 2 }
+ topRightPoint = { x: x - width, y: y - height / 2 }
+ break
+ case 'west':
+ topCell = centerPoints.filter((centerPoint) => Math.abs(centerPoint.x - (x + width)) < 2 && Math.abs(centerPoint.y - y) < 2)
+ topLeftPoint = { x: x + width, y: y - height / 2 }
+ topRightPoint = { x: x + width, y: y + height / 2 }
+ break
+ }
+
+ if (topCell.length === 1) {
+ touchDimension++
+ return
+ }
+
+ leftTopCnt = centerPoints.filter(
+ (centerPoint) => Math.abs(centerPoint.x - topLeftPoint.x) < 2 && Math.abs(centerPoint.y - topLeftPoint.y) < 2,
+ ).length
+ rightTopCnt = centerPoints.filter(
+ (centerPoint) => Math.abs(centerPoint.x - topRightPoint.x) < 2 && Math.abs(centerPoint.y - topRightPoint.y) < 2,
+ ).length
+
+ if (leftTopCnt + rightTopCnt === 2) {
+ touchDimension++
+ return
+ }
+
+ if (leftTopCnt + rightTopCnt === 1) {
+ exposedHalfTop++
+ halfTouchDimension++
+ return
+ }
+ if (leftTopCnt + rightTopCnt === 0) {
+ exposedTop++
+ }
+ })
+ // ์์ ๋
ธ์ถ ํ๋ฉด ๊ณ์ฐ
+
+ /*const cells = canvas.getObjects().filter((obj) => polygon.id === obj.parentId)
+ const points = cells.map((cell) => {
+ return cell.getCenterPoint()
+ })*/
+ const groupPoints = groupCoordinates(centerPoints, modules[0], direction)
+
+ groupPoints.forEach((group) => {
+ let maxY = group.reduce((acc, cur) => (acc.y > cur.y ? acc : cur)).y
+ let minY = group.reduce((acc, cur) => (acc.y < cur.y ? acc : cur)).y
+ let maxX = group.reduce((acc, cur) => (acc.x > cur.x ? acc : cur)).x
+ let minX = group.reduce((acc, cur) => (acc.x < cur.x ? acc : cur)).x
+
+ let maxYCenterPoint = group.filter((centerPoint) => Math.abs(centerPoint.y - maxY) < 2)
+ let minYCenterPoint = group.filter((centerPoint) => Math.abs(centerPoint.y - minY) < 2)
+ let maxXCenterPoint = group.filter((centerPoint) => Math.abs(centerPoint.x - maxX) < 2)
+ let minXCenterPoint = group.filter((centerPoint) => Math.abs(centerPoint.x - minX) < 2)
+
+ switch (direction) {
+ case 'south':
+ exposedBottom += maxYCenterPoint.length
+ break
+ case 'north':
+ exposedBottom += minYCenterPoint.length
+ break
+ case 'east':
+ exposedBottom += maxXCenterPoint.length
+ break
+ case 'west':
+ exposedBottom += minXCenterPoint.length
+ break
+ }
+ })
+
+ results.push({
+ exposedBottom,
+ exposedHalfBottom,
+ exposedTop,
+ exposedHalfTop,
+ touchDimension,
+ halfTouchDimension,
+ })
+ console.log({
+ direction,
+ exposedBottom,
+ exposedHalfBottom,
+ exposedTop,
+ exposedHalfTop,
+ touchDimension,
+ halfTouchDimension,
})
- canvas.add(circle)
})
- //์์ ๋
ธ์ถ ํ๋ฉด
- let exposedBottom = 0
- // ๋ฐ ๋
ธ์ถ ํ๋ฉด
- let exposedHalfBottom = 0
- // ์์ ๋
ธ์ถ ์๋ฉด
- let exposedTop = 0
- //๋ฐ ๋
ธ์ถ ์๋ฉด
- let exposedHalfTop = 0
- // ์์ ์ ๋ฉด
- let touchDimension = 0
- //๋ฐ์ ๋ฉด
- let halfTouchDimension = 0
- // ๋
ธ์ถํ๋ฉด ์ฒดํฌ
- centerPoints.forEach((centerPoint, index) => {
- const { x, y, width, height } = centerPoint
- // centerPoints์ค์ ํ์ฌ centerPoint์ x๊ฐ์ด ๊ฐ๊ณ , y๊ฐ์ด y-height๊ฐ๊ณผ ๊ฐ์ centerPoint๊ฐ ์๋์ง ํ์ธ
- const bottomCell = centerPoints.filter((centerPoint) => centerPoint.x === x && Math.abs(centerPoint.y - (y + height)) < 2)
- if (bottomCell.length === 1) {
- touchDimension++
- return
- }
+ return results
+ }
- const bottomLeftPoint = { x: x - width / 2, y: y + height }
- const bottomRightPoint = { x: x + width / 2, y: y + height }
+ // polygon ๋ด๋ถ cell๋ค์ centerPoint ๋ฐฐ์ด์ ๊ทธ๋ฃนํ ํด์ ๋ฐํ
+ const groupCoordinates = (points, moduleExample, direction) => {
+ const groups = []
+ const visited = new Set()
+ const width = Math.floor(moduleExample.width)
+ const height = Math.floor(moduleExample.height)
+ const horizonPadding = 0 // ๊ฐ๋ก ํจ๋ฉ
+ const verticalPadding = 0 // ์ธ๋ก ํจ๋ฉ
- // ๋ฐ๋ก ์๋์ ์
์ด ์๋ ๊ฒฝ์ฐ ๋ฌผ๋ผ์ธ ๋ฐฐ์น๊ฐ ์ผ์ชฝ ๋์ด์๋ ์
์ ์ฐพ๋๋ค.
- const leftBottomCnt = centerPoints.filter(
- (centerPoint) => Math.abs(centerPoint.x - bottomLeftPoint.x) < 2 && Math.abs(centerPoint.y - bottomLeftPoint.y) < 2,
- ).length
- const rightBottomCnt = centerPoints.filter(
- (centerPoint) => Math.abs(centerPoint.x - bottomRightPoint.x) < 2 && Math.abs(centerPoint.y - bottomRightPoint.y) < 2,
- ).length
- if (leftBottomCnt + rightBottomCnt === 2) {
- touchDimension++
- return
- }
- if (leftBottomCnt + rightBottomCnt === 1) {
- halfTouchDimension++
- exposedHalfBottom++
- return
- }
- if (leftBottomCnt + rightBottomCnt === 0) {
- exposedBottom++
- return
- }
- })
- // ๋
ธ์ถ์๋ฉด ์ฒดํฌ
-
- centerPoints.forEach((centerPoint, index) => {
- const { x, y, width, height } = centerPoint
- const topCell = centerPoints.filter((centerPoint) => centerPoint.x === x && Math.abs(centerPoint.y - (y - height)) < 2)
- if (topCell.length === 1) {
- return
- }
-
- const topLeftPoint = { x: x - width / 2, y: y - height }
- const topRightPoint = { x: x + width / 2, y: y - height }
-
- const leftTopCnt = centerPoints.filter(
- (centerPoint) => Math.abs(centerPoint.x - topLeftPoint.x) < 2 && Math.abs(centerPoint.y - topRightPoint.y) < 2,
- ).length
- const rightTopCnt = centerPoints.filter(
- (centerPoint) => Math.abs(centerPoint.x - topRightPoint.x) < 2 && Math.abs(centerPoint.y - topRightPoint.y) < 2,
- ).length
-
- if (leftTopCnt + rightTopCnt === 1) {
- exposedHalfTop++
- return
- }
- if (leftTopCnt + rightTopCnt === 0) {
- exposedTop++
- return
- }
- })
- return {
- exposedBottom,
- exposedHalfBottom,
- exposedTop,
- exposedHalfTop,
- touchDimension,
- halfTouchDimension,
+ function isAdjacent(p1, p2) {
+ const dx = Math.abs(p1.x - p2.x)
+ const dy = Math.abs(p1.y - p2.y)
+ return (
+ (Math.abs(width + horizonPadding - dx) < 2 && dy < 2) ||
+ (dx < 2 && Math.abs(dy - height + verticalPadding)) < 2 ||
+ (Math.abs(dx - width / 2 + horizonPadding / 2) < 2 && Math.abs(dy - height + verticalPadding) < 2)
+ )
}
+
+ function dfs(point, group) {
+ visited.add(`${point.x},${point.y}`)
+ group.push(point)
+
+ for (const nextPoint of points) {
+ const key = `${nextPoint.x},${nextPoint.y}`
+ if (!visited.has(key) && isAdjacent(point, nextPoint)) {
+ dfs(nextPoint, group)
+ }
+ }
+ }
+
+ for (const point of points) {
+ const key = `${point.x},${point.y}`
+ if (!visited.has(key)) {
+ const group = []
+ dfs(point, group)
+ groups.push(group)
+ }
+ }
+
+ return groups
}
const coordToTurfPolygon = (points) => {
@@ -744,9 +1255,8 @@ export function useModuleBasicSetting() {
)
flowArray.push(topFlow)
- let idx = 0
let rtnObjArray = []
- flowArray.forEach((center) => {
+ flowArray.forEach((center, index) => {
const linesArray = new Array()
surface.lines.filter((line) => {
@@ -779,35 +1289,60 @@ export function useModuleBasicSetting() {
const angle2 = Math.abs(Math.round(Math.atan(height2 / adjust2) * (180 / Math.PI) * 1000) / 1000)
const angle3 = 180 - (angle1 + angle2)
- const charlie = 173.3 + 3 // ํํ์ ๊ธธ์ด ์ฝ๊ฐ ์ฌ์ ๋ฅผ ์ค
+ const charlie = 173.3 // ํํ์ ๊ธธ์ด ์ฝ๊ฐ ์ฌ์ ๋ฅผ ์ค
const alpha = (charlie * Math.sin((angle1 * Math.PI) / 180)) / Math.sin((angle3 * Math.PI) / 180)
const beta = Math.sqrt(alpha ** 2 + charlie ** 2 - 2 * alpha * charlie * Math.cos((angle2 * Math.PI) / 180))
const h = beta * Math.sin((angle1 * Math.PI) / 180) // ๋์ด
const sign = Math.sign(coords[0].y - coords[1].y) // ์งํ๋ฐฉํฅ
const top = coords[1].y + sign * h // ๋ณ๊ฒฝ๋๋ ๋์ด ์ขํ ๊ฐ
- // const line3 = new QLine([coords[1].x, coords[1].y, coords[1].x, top], {
- // stroke: 'blue',
- // strokeWidth: 1,
- // selectable: true,
- // })
- // // canvas?.add(line3)
const pointX1 = coords[0].x + ((coords[0].y - top) / (coords[0].y - coords[1].y)) * (coords[1].x - coords[0].x)
const pointY1 = top
const pointX2 = coords[2].x + ((coords[2].y - top) / (coords[2].y - coords[1].y)) * (coords[1].x - coords[2].x)
const pointY2 = top
- const finalLine = new QLine([pointX1, pointY1, pointX2, pointY2], {
- stroke: 'red',
- strokeWidth: 1,
- selectable: true,
- })
- canvas?.add(finalLine)
- canvas?.renderAll()
+ // const finalLine = new QLine([pointX1, pointY1, pointX2, pointY2], {
+ // stroke: 'red',
+ // strokeWidth: 1,
+ // selectable: true,
+ // })
+ // canvas?.add(finalLine)
+ // canvas?.renderAll()
+
+ let rtnObj
+ //ํํํ๋ฉด
+ if (alpha === 0 || beta === 0 || h === 0 || sign === 0) {
+ //๊ผญ์ง์ ์ด ์๊ณ ํํํ ๋ ex) ๋ค๋ชจ
+ let standardLine
+ if (index === 0) {
+ //bottom
+ standardLine = surface.lines.reduce((acc, line, index) => {
+ if (line.y1 > acc.y1 || (line.y1 === acc.y1 && line.y2 > acc.y2)) {
+ return { x1: line.x1, y1: line.y1, x2: line.x2, y2: line.y2, index: index }
+ }
+ return acc
+ })
+ } else {
+ standardLine = surface.lines.reduce((acc, line, index) => {
+ if (line.y1 < acc.y1 || (line.y1 === acc.y1 && line.y2 < acc.y2)) {
+ return { x1: line.x1, y1: line.y1, x2: line.x2, y2: line.y2, index: index }
+ }
+ return acc
+ })
+ }
+ rtnObj = {
+ target: index === 0 ? 'bottom' : 'top',
+ x1: standardLine.x1,
+ y1: standardLine.y1,
+ x2: standardLine.x2,
+ y2: standardLine.y2,
+ type: 'flat',
+ }
+ } else {
+ rtnObj = { target: index === 0 ? 'bottom' : 'top', x1: pointX1, y1: pointY1, x2: pointX2, y2: pointY2, type: 'curve' }
+ }
- const rtnObj = { target: idx === 0 ? 'bottom' : 'top', x1: pointX1, y1: pointY1, x2: pointX2, y2: pointY2 }
rtnObjArray.push(rtnObj)
- ++idx
})
return rtnObjArray
@@ -837,9 +1372,8 @@ export function useModuleBasicSetting() {
)
flowArray.push(rightFlow)
- let idx = 0
let rtnObjArray = []
- flowArray.forEach((center) => {
+ flowArray.forEach((center, index) => {
const linesArray = surface.lines.filter((line) => {
if ((center.x1 === line.x1 && center.y1 === line.y1) || (center.x1 === line.x2 && center.y1 === line.y2)) {
return line
@@ -870,7 +1404,7 @@ export function useModuleBasicSetting() {
const angle2 = Math.abs(Math.round(Math.atan(adjust2 / height2) * (180 / Math.PI) * 1000) / 1000)
const angle3 = 180 - (angle1 + angle2)
- const charlie = 173.3 + 3 // ํํ์ ๊ธธ์ด ์ฝ๊ฐ ์ฌ์ ๋ฅผ์ค
+ const charlie = 173.3 // ํํ์ ๊ธธ์ด ์ฝ๊ฐ ์ฌ์ ๋ฅผ์ค
const alpha = (charlie * Math.sin((angle1 * Math.PI) / 180)) / Math.sin((angle3 * Math.PI) / 180)
const beta = Math.sqrt(alpha ** 2 + charlie ** 2 - 2 * alpha * charlie * Math.cos((angle2 * Math.PI) / 180))
@@ -890,18 +1424,49 @@ export function useModuleBasicSetting() {
const pointX2 = top
const pointY2 = coords[2].y + ((coords[2].x - top) / (coords[2].x - coords[1].x)) * (coords[1].y - coords[2].y)
- const finalLine = new QLine([pointX1, pointY1, pointX2, pointY2], {
- stroke: 'red',
- strokeWidth: 1,
- selectable: true,
- })
- canvas?.add(finalLine)
- canvas?.renderAll()
+ // const finalLine = new QLine([pointX1, pointY1, pointX2, pointY2], {
+ // stroke: 'red',
+ // strokeWidth: 1,
+ // selectable: true,
+ // })
+ // canvas?.add(finalLine)
+ // canvas?.renderAll()
- const rtnObj = { target: idx === 0 ? 'left' : 'right', x1: pointX1, y1: pointY1, x2: pointX2, y2: pointY2 }
+ let rtnObj
+ //ํํํ๋ฉด
+ if (alpha === 0 || beta === 0 || h === 0 || sign === 0) {
+ //๊ผญ์ง์ ์ด ์๊ณ ํํํ ๋ ex) ๋ค๋ชจ
+ let standardLine
+ if (index === 0) {
+ //bottom
+ standardLine = surface.lines.reduce((acc, line, index) => {
+ if (line.x1 < acc.x1 || (line.x1 === acc.x1 && line.y1 < acc.y1)) {
+ return { x1: line.x1, y1: line.y1, x2: line.x2, y2: line.y2, index: index }
+ }
+ return acc
+ })
+ } else {
+ standardLine = surface.lines.reduce((acc, line, index) => {
+ if (line.x1 > acc.x1 || (line.x1 === acc.x1 && line.y1 > acc.y1)) {
+ return { x1: line.x1, y1: line.y1, x2: line.x2, y2: line.y2, index: index }
+ }
+ return acc
+ })
+ }
+ rtnObj = {
+ target: index === 0 ? 'left' : 'right',
+ x1: standardLine.x1,
+ y1: standardLine.y1,
+ x2: standardLine.x2,
+ y2: standardLine.y2,
+ type: 'flat',
+ }
+ } else {
+ rtnObj = { target: index === 0 ? 'left' : 'right', x1: pointX1, y1: pointY1, x2: pointX2, y2: pointY2, type: 'curve' }
+ }
rtnObjArray.push(rtnObj)
- ++idx
})
+ return rtnObjArray
}
const findSetupSurfaceMaxLines = (surface) => {
@@ -955,9 +1520,343 @@ export function useModuleBasicSetting() {
return obj
}
+ const manualFlatroofModuleSetup = (placementFlatRef) => {
+ const moduleSetupSurfaces = canvas?.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) //๋ชจ๋์ค์น๋ฉด๋ฅผ ๊ฐ์ ธ์ด
+ let applyAngle
+ let flatBatchType = placementFlatRef.setupLocation.current.value
+ let excretaLinesAngle = []
+
+ if (flatBatchType === 'south') {
+ applyAngle = compasDeg
+ } else {
+ const excretaLines = canvas.getObjects().filter((obj) => obj.name === 'flatExcretaLine' && obj.isSelected === true)
+ excretaLines.forEach((obj) => {
+ const points1 = { x: obj.x1, y: obj.y1 }
+ const points2 = { x: obj.x2, y: obj.y2 }
+ excretaLinesAngle.push({
+ surfaceId: obj.surfaceId,
+ angle: calculateAngle(points1, points2),
+ })
+ })
+ }
+
+ //calculateAngle
+
+ const batchObjects = canvas
+ ?.getObjects()
+ .filter(
+ (obj) =>
+ obj.name === BATCH_TYPE.OPENING ||
+ obj.name === BATCH_TYPE.TRIANGLE_DORMER ||
+ obj.name === BATCH_TYPE.PENTAGON_DORMER ||
+ obj.name === BATCH_TYPE.SHADOW,
+ ) //๋๋จธs ๊ฐ์ฒด
+
+ const moduleOptions = {
+ fill: '#BFFD9F',
+ stroke: 'black',
+ strokeWidth: 0.1,
+ selectable: false, // ์ ํ ๊ฐ๋ฅํ๊ฒ ์ค์
+ lockMovementX: true, // X ์ถ ์ด๋ ์ ๊ธ
+ lockMovementY: true, // Y ์ถ ์ด๋ ์ ๊ธ
+ lockRotation: true, // ํ์ ์ ๊ธ
+ lockScalingX: true, // X ์ถ ํฌ๊ธฐ ์กฐ์ ์ ๊ธ
+ lockScalingY: true, // Y ์ถ ํฌ๊ธฐ ์กฐ์ ์ ๊ธ
+ opacity: 0.8,
+ parentId: moduleSetupSurface.parentId,
+ name: 'module',
+ }
+
+ function getRotatedCorners(rect) {
+ // ์ฌ๊ฐํ์ ์ค์ฌ์
+ const center = rect.getCenterPoint()
+
+ // ์ฌ๊ฐํ์ ์๋ ๊ผญ์ง์ ์ขํ (๋ก์ปฌ ์ขํ ๊ธฐ์ค)
+ const halfWidth = (rect.width / 2) * rect.scaleX
+ const halfHeight = (rect.height / 2) * rect.scaleY
+
+ const corners = [
+ { x: -halfWidth, y: -halfHeight }, // ์ข์๋จ
+ { x: halfWidth, y: -halfHeight }, // ์ฐ์๋จ
+ { x: halfWidth, y: halfHeight }, // ์ฐํ๋จ
+ { x: -halfWidth, y: halfHeight }, // ์ขํ๋จ
+ ]
+
+ // ๊ฐ ๊ผญ์ง์ ์ขํ๋ฅผ ์บ๋ฒ์ค ์ขํ๋ก ๋ณํ
+ const transformedCorners = corners.map((corner) => {
+ const point = new fabric.Point(corner.x, corner.y)
+ return fabric.util.transformPoint(point, rect.calcTransformMatrix())
+ })
+
+ return transformedCorners
+ }
+
+ function getSelectedExcretaLine() {}
+
+ if (moduleSetupSurfaces.length !== 0) {
+ let tempModule
+ let manualDrawModules = []
+ let inside = false
+ let turfPolygon
+ let flowDirection
+ let trestlePolygon
+
+ addCanvasMouseEventListener('mouse:move', (e) => {
+ //๋ง์ฐ์ค ์ด๋ฒคํธ ์ญ์ ํ ์ฌ์ถ๊ฐ
+ const mousePoint = canvas.getPointer(e.e)
+
+ for (let i = 0; i < moduleSetupSurfaces.length; i++) {
+ turfPolygon = polygonToTurfPolygon(moduleSetupSurfaces[i])
+ trestlePolygon = moduleSetupSurfaces[i]
+ manualDrawModules = moduleSetupSurfaces[i].modules // ์์์ ์๋์ผ๋ก ํ์๋ ์ถ๊ฐ๋จ
+ flowDirection = moduleSetupSurfaces[i].flowDirection //๋ํ์ ๋ฐฉํฅ
+
+ if (flatBatchType === 'excreta') {
+ const tempLine = excretaLinesAngle.find((obj) => obj.surfaceId === trestlePolygon.surfaceId)
+ if (tempLine) {
+ applyAngle = tempLine.angle
+ } else {
+ applyAngle = compasDeg
+ }
+ }
+
+ // const excretaLine = excretaLines.find((obj) => obj.isSelected === true && obj.surfaceId === trestlePolygon.surfaceId)
+
+ // console.log('excretaLine', excretaLine.x1, excretaLine.y1, excretaLine.x2, excretaLine.y2)
+
+ // applyAngle = calculateAngle(excretaLine.x1, excretaLine.y1, excretaLine.x2, excretaLine.y2)
+
+ // console.log('applyAngle', applyAngle)
+
+ let width = flowDirection === 'south' || flowDirection === 'north' ? 172 : 113
+ let height = flowDirection === 'south' || flowDirection === 'north' ? 113 : 172
+
+ const angledModule = new fabric.Rect({
+ width: width,
+ height: height,
+ left: mousePoint.x - width / 2,
+ top: mousePoint.y - height / 2,
+ })
+
+ const center = angledModule.getCenterPoint()
+ angledModule.set('angle', applyAngle)
+ angledModule.setPositionByOrigin(center, 'center', 'center')
+
+ const points = getRotatedCorners(angledModule) //
+ const turfPoints = coordToTurfPolygon(points)
+
+ if (turf.booleanWithin(turfPoints, turfPolygon)) {
+ let isDrawing = false
+
+ if (isDrawing) return
+ canvas?.remove(...canvas?.getObjects().filter((obj) => obj.name === 'tempModule')) //์์ง์ผ๋ ์ผ๋จ ์ง์๊ฐ๋ฉด์ ์์ง์
+
+ tempModule = new QPolygon(points, {
+ fill: 'white',
+ stroke: 'black',
+ strokeWidth: 0.3,
+ name: 'tempModule',
+ })
+
+ canvas?.add(tempModule) //์์ง์ฌ๊ฐ๋ฉด์ ์ถ๊ฐ๋จ
+ canvas?.renderAll()
+
+ /**
+ * ์ค๋
๊ธฐ๋ฅ
+ */
+ let snapDistance = 10
+ let cellSnapDistance = 20
+
+ const trestleLeft = moduleSetupSurfaces[i].left
+ const trestleTop = moduleSetupSurfaces[i].top
+ const trestleRight = trestleLeft + moduleSetupSurfaces[i].width * moduleSetupSurfaces[i].scaleX
+ const trestleBottom = trestleTop + moduleSetupSurfaces[i].height * moduleSetupSurfaces[i].scaleY
+ const bigCenterY = (trestleTop + trestleTop + moduleSetupSurfaces[i].height) / 2
+
+ // ์์ ํด๋ฆฌ๊ณค์ ๊ฒฝ๊ณ ์ขํ ๊ณ์ฐ
+ const smallLeft = tempModule.left
+ const smallTop = tempModule.top
+ const smallRight = smallLeft + tempModule.width * tempModule.scaleX
+ const smallBottom = smallTop + tempModule.height * tempModule.scaleY
+ const smallCenterX = smallLeft + (tempModule.width * tempModule.scaleX) / 2
+ const smallCenterY = smallTop + (tempModule.height * tempModule.scaleX) / 2
+
+ if (manualDrawModules) {
+ manualDrawModules.forEach((cell) => {
+ const holdCellLeft = cell.left
+ const holdCellTop = cell.top
+ const holdCellRight = holdCellLeft + cell.width * cell.scaleX
+ const holdCellBottom = holdCellTop + cell.height * cell.scaleY
+ const holdCellCenterX = holdCellLeft + (cell.width * cell.scaleX) / 2
+ const holdCellCenterY = holdCellTop + (cell.height * cell.scaleY) / 2
+
+ //์ค์น๋ ์
์ ์ข์ธก์ ์ค๋
+ if (Math.abs(smallRight - holdCellLeft) < snapDistance) {
+ tempModule.left = holdCellLeft - width - 0.5
+ }
+
+ //์ค์น๋ ์
์ ์ฐ์ธก์ ์ค๋
+ if (Math.abs(smallLeft - holdCellRight) < snapDistance) {
+ tempModule.left = holdCellRight + 0.5
+ }
+
+ //์ค์น๋ ์
์ ์์ชฝ์ ์ค๋
+ if (Math.abs(smallBottom - holdCellTop) < snapDistance) {
+ tempModule.top = holdCellTop - height - 0.5
+ }
+
+ //์ค์น๋ ์
์ ๋ฐ์ชฝ์ ์ค๋
+ if (Math.abs(smallTop - holdCellBottom) < snapDistance) {
+ tempModule.top = holdCellBottom + 0.5
+ }
+ //๊ฐ์ด๋ฐ -> ๊ฐ์ด๋ฐ
+ if (Math.abs(smallCenterX - holdCellCenterX) < cellSnapDistance) {
+ tempModule.left = holdCellCenterX - width / 2
+ }
+ //์ผ์ชฝ -> ๊ฐ์ด๋ฐ
+ if (Math.abs(smallLeft - holdCellCenterX) < cellSnapDistance) {
+ tempModule.left = holdCellCenterX
+ }
+ // ์ค๋ฅธ์ชฝ -> ๊ฐ์ด๋ฐ
+ if (Math.abs(smallRight - holdCellCenterX) < cellSnapDistance) {
+ tempModule.left = holdCellCenterX - width
+ }
+ //์ธ๋ก ๊ฐ์ด๋ฐ -> ๊ฐ์ด๋ฐ
+ if (Math.abs(smallCenterY - holdCellCenterY) < cellSnapDistance) {
+ tempModule.top = holdCellCenterY - height / 2
+ }
+ //์์ชฝ -> ๊ฐ์ด๋ฐ
+ if (Math.abs(smallTop - holdCellCenterY) < cellSnapDistance) {
+ tempModule.top = holdCellCenterY
+ }
+ //์๋ซ์ชฝ -> ๊ฐ์ด๋ฐ
+ if (Math.abs(smallBottom - holdCellCenterY) < cellSnapDistance) {
+ tempModule.top = holdCellCenterY - height
+ }
+ })
+ }
+
+ // ์์ชฝ ๋ณ์ ์ค๋
+ if (Math.abs(smallTop - trestleTop) < snapDistance) {
+ tempModule.top = trestleTop
+ }
+
+ // ์๋์ชฝ ๋ณ์ ์ค๋
+ if (Math.abs(smallTop + tempModule.height * tempModule.scaleY - (trestleTop + moduleSetupSurfaces[i].height)) < snapDistance) {
+ tempModule.top = trestleTop + moduleSetupSurfaces[i].height - tempModule.height * tempModule.scaleY
+ }
+
+ // ์ผ์ชฝ๋ณ์ ์ค๋
+ if (Math.abs(smallLeft - trestleLeft) < snapDistance) {
+ tempModule.left = trestleLeft
+ }
+ //์ค๋ฅธ์ชฝ ๋ณ์ ์ค๋
+ if (Math.abs(smallRight - trestleRight) < snapDistance) {
+ tempModule.left = trestleRight - tempModule.width * tempModule.scaleX
+ }
+
+ if (flowDirection === 'south' || flowDirection === 'north') {
+ // ๋ชจ๋์ผ์ชฝ์ด ์ธ๋ก์ค์์ ์ ๋ถ๊ฒ ์ค๋
+ if (Math.abs(smallLeft - (trestleLeft + moduleSetupSurfaces[i].width / 2)) < snapDistance) {
+ tempModule.left = trestleLeft + moduleSetupSurfaces[i].width / 2
+ }
+
+ // ๋ชจ๋์ด ๊ฐ์ด๋ฐ๊ฐ ์ธ๋ก์ค์์ ์ ๋ถ๊ฒ ์ค๋
+ if (Math.abs(smallCenterX - (trestleLeft + moduleSetupSurfaces[i].width / 2)) < snapDistance) {
+ tempModule.left = trestleLeft + moduleSetupSurfaces[i].width / 2 - (tempModule.width * tempModule.scaleX) / 2
+ }
+
+ // ๋ชจ๋์ค๋ฅธ์ชฝ์ด ์ธ๋ก์ค์์ ์ ๋ถ๊ฒ ์ค๋
+ if (Math.abs(smallRight - (trestleLeft + moduleSetupSurfaces[i].width / 2)) < snapDistance) {
+ tempModule.left = trestleLeft + moduleSetupSurfaces[i].width / 2 - tempModule.width * tempModule.scaleX
+ }
+ } else {
+ // ๋ชจ๋์ด ๊ฐ๋ก์ค์์ ์ ์ค๋
+ if (Math.abs(smallTop + tempModule.height / 2 - bigCenterY) < snapDistance) {
+ tempModule.top = bigCenterY - tempModule.height / 2
+ }
+
+ if (Math.abs(smallTop - (trestleTop + moduleSetupSurfaces[i].height / 2)) < snapDistance) {
+ tempModule.top = trestleTop + moduleSetupSurfaces[i].height / 2
+ }
+ // ๋ชจ๋ ๋ฐ๋ฉด์ด ๊ฐ๋ก์ค์์ ์ ์ค๋
+ if (Math.abs(smallBottom - (trestleTop + moduleSetupSurfaces[i].height / 2)) < snapDistance) {
+ tempModule.top = trestleTop + moduleSetupSurfaces[i].height / 2 - tempModule.height * tempModule.scaleY
+ }
+ }
+
+ inside = true
+ break
+ } else {
+ inside = false
+ }
+ }
+
+ if (!inside) {
+ // tempModule.set({ fill: 'red' })
+ canvas?.remove(...canvas?.getObjects().filter((obj) => obj.name === 'tempModule'))
+ canvas?.renderAll()
+ }
+ })
+
+ addCanvasMouseEventListener('mouse:up', (e) => {
+ let isIntersection = true
+ if (!inside) return
+ if (tempModule) {
+ const tempTurfModule = polygonToTurfPolygon(tempModule)
+
+ //๋๋จธ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ด
+ if (batchObjects) {
+ batchObjects.forEach((object) => {
+ let dormerTurfPolygon
+
+ if (object.type === 'group') {
+ //๋๋จธ๋ ๊ทธ๋ฃนํํ์
+ dormerTurfPolygon = batchObjectGroupToTurfPolygon(object)
+ } else {
+ //๊ฐ๊ตฌ, ๊ทธ๋ฆผ์
+ dormerTurfPolygon = polygonToTurfPolygon(rectToPolygon(object))
+ }
+
+ const intersection = turf.intersect(turf.featureCollection([dormerTurfPolygon, tempTurfModule])) //๊ฒน์น๋์ง ํ์ธ
+ //๊ฒน์น๋ฉด ์๋จ
+ if (intersection) {
+ alert('๋๋จธ์์ ๋ชจ๋์ ์ฌ๋ฆด ์ ์์ต๋๋ค.')
+ isIntersection = false
+ }
+ })
+ }
+
+ if (!isIntersection) return
+
+ if (turf.booleanWithin(tempTurfModule, turfPolygon)) {
+ //๋ง์ฐ์ค ํด๋ฆญ์ set์ผ๋ก ํด๋น ์์น์ ์
์ ๋ฃ์
+ const isOverlap = manualDrawModules.some((module) => turf.booleanOverlap(tempTurfModule, polygonToTurfPolygon(module))) //๊ฒน์น๋์ง ํ์ธ
+ if (!isOverlap) {
+ console.log('tempModule.points', tempModule.points)
+
+ let manualModule = new QPolygon(tempModule.points, { ...moduleOptions })
+ canvas?.add(manualModule)
+ manualDrawModules.push(tempModule)
+ } else {
+ alert('์
๋ผ๋ฆฌ ๊ฒน์น๋ฉด ์๋์ฃ ?')
+ }
+ } else {
+ alert('๋๊ฐ์ฃ ?!!')
+ }
+ }
+ })
+ }
+ }
+
+ const autoFlatroofModuleSetup = (placementFlatRef) => {}
+
return {
makeModuleInstArea,
manualModuleSetup,
autoModuleSetup,
+ restoreModuleInstArea,
+ manualFlatroofModuleSetup,
+ autoFlatroofModuleSetup,
}
}
diff --git a/src/hooks/option/useCanvasSetting.js b/src/hooks/option/useCanvasSetting.js
index c3155512..77ff8bc3 100644
--- a/src/hooks/option/useCanvasSetting.js
+++ b/src/hooks/option/useCanvasSetting.js
@@ -1,16 +1,43 @@
import { useCallback, useEffect, useState } from 'react'
-import { useRecoilState, useRecoilValue } from 'recoil'
-import { adsorptionPointModeState, adsorptionRangeState, canvasState, planSizeSettingState } from '@/store/canvasAtom'
+import { useRecoilState, useRecoilValue, useResetRecoilState, useSetRecoilState } from 'recoil'
+import {
+ adsorptionPointModeState,
+ adsorptionRangeState,
+ canvasState,
+ planSizeSettingState,
+ dotLineGridSettingState,
+ canvasSettingState,
+} from '@/store/canvasAtom'
import { globalLocaleStore } from '@/store/localeAtom'
import { useMessage } from '@/hooks/useMessage'
import { useAxios } from '@/hooks/useAxios'
import { useSwal } from '@/hooks/useSwal'
-import { correntObjectNoState, corridorDimensionSelector, settingModalFirstOptionsState, settingModalSecondOptionsState } from '@/store/settingAtom'
+import {
+ correntObjectNoState,
+ corridorDimensionSelector,
+ settingModalFirstOptionsState,
+ settingModalSecondOptionsState,
+ settingModalGridOptionsState,
+ basicSettingState,
+ settingsState,
+} from '@/store/settingAtom'
import { POLYGON_TYPE } from '@/common/common'
import { globalFontAtom } from '@/store/fontAtom'
import { dimensionLineSettingsState } from '@/store/commonUtilsAtom'
+import { gridColorState } from '@/store/gridAtom'
+import { useColor } from 'react-color-palette'
-let objectNo
+const defaultDotLineGridSetting = {
+ INTERVAL: {
+ type: 2, // 1: ๊ฐ๋ก,์ธ๋ก ๊ฐ๊ฒฉ ์๋, 2: ๋น์จ ๊ฐ๊ฒฉ
+ ratioInterval: 910,
+ verticalInterval: 910,
+ horizontalInterval: 910,
+ dimension: 1, // ์น์
+ },
+ DOT: false,
+ LINE: false,
+}
export function useCanvasSetting() {
const canvas = useRecoilValue(canvasState)
@@ -20,8 +47,11 @@ export function useCanvasSetting() {
const [settingModalFirstOptions, setSettingModalFirstOptions] = useRecoilState(settingModalFirstOptionsState)
const [settingModalSecondOptions, setSettingModalSecondOptions] = useRecoilState(settingModalSecondOptionsState)
+
+ // const [settingsData, setSettingsData] = useRecoilState(settingsState)
+ const [settingsData, setSettingsData] = useState({ ...settingModalFirstOptions, ...settingModalSecondOptions })
const { option1, option2, dimensionDisplay } = settingModalFirstOptions
- const { option3, option4 } = settingModalSecondOptions
+ const { option4 } = settingModalSecondOptions
const corridorDimension = useRecoilValue(corridorDimensionSelector)
@@ -42,6 +72,27 @@ export function useCanvasSetting() {
const [globalFont, setGlobalFont] = useRecoilState(globalFontAtom)
const [dimensionLineSettings, setDimensionLineSettings] = useRecoilState(dimensionLineSettingsState)
+ const setSettingModalGridOptions = useSetRecoilState(settingModalGridOptionsState)
+ const [dotLineGridSetting, setDotLineGridSettingState] = useRecoilState(dotLineGridSettingState)
+ const resetDotLineGridSetting = useResetRecoilState(dotLineGridSettingState)
+ const [currentSetting, setCurrentSetting] = useState(
+ JSON.stringify(dotLineGridSetting) === JSON.stringify(defaultDotLineGridSetting) ? { ...defaultDotLineGridSetting } : { ...dotLineGridSetting },
+ )
+ const [gridColor, setGridColor] = useRecoilState(gridColorState)
+ const [color, setColor] = useColor(gridColor ?? '#FF0000')
+ const [colorTemp, setColorTemp] = useState()
+
+ const [canvasSetting, setCanvasSetting] = useRecoilState(canvasSettingState)
+ const [basicSetting, setBasicSettings] = useRecoilState(basicSettingState)
+
+ const SelectOptions = [
+ { id: 1, name: getMessage('modal.canvas.setting.grid.dot.line.setting.line.origin'), value: 1 },
+ { id: 2, name: '1/2', value: 1 / 2 },
+ { id: 3, name: '1/4', value: 1 / 4 },
+ { id: 4, name: '1/10', value: 1 / 10 },
+ ]
+ const [selectOption, setSelectOption] = useState(SelectOptions[0])
+
useEffect(() => {
if (!canvas) {
return
@@ -72,51 +123,66 @@ export function useCanvasSetting() {
canvas?.renderAll()
}, [corridorDimension])
+ // ๋ฐฐ์น๋ฉด ์ด๊ธฐ์ค์ ๋ณ๊ฒฝ ์
useEffect(() => {
- console.log('useCanvasSetting useEffect ์คํ1', correntObjectNo)
- }, [])
+ //console.log('useCanvasSetting canvasSetting ์คํ', canvasSetting)
+ if (canvasSetting.flag) {
+ basicSettingSave()
+ }
+ }, [canvasSetting])
+
+ useEffect(() => {
+ console.log('๐ ~ useEffect ~ settingsData:', settingsData)
+ }, [settingsData])
//ํก์ฐฉ์ ON/OFF ๋ณ๊ฒฝ ์
- useEffect(() => {
- console.log('useCanvasSetting useEffect ์คํ2', adsorptionPointMode.fontFlag, correntObjectNo)
-
- if (adsorptionPointMode.fontFlag) {
- onClickOption2()
- frontSettings()
- fetchSettings()
- }
- }, [adsorptionPointMode])
+ // useEffect(() => {
+ // //console.log('useCanvasSetting ์คํ2', adsorptionPointMode.fontFlag, correntObjectNo)
+ // if (adsorptionPointMode.fontFlag) {
+ // onClickOption2()
+ // }
+ // }, [adsorptionPointMode])
// 1 ๊ณผ 2 ๋ณ๊ฒฝ ์
- useEffect(() => {
- console.log('useCanvasSetting useEffect ์คํ3', settingModalFirstOptions.fontFlag, settingModalSecondOptions.fontFlag, correntObjectNo)
- if (settingModalFirstOptions.fontFlag || settingModalSecondOptions.fontFlag) {
- onClickOption2()
- frontSettings()
- fetchSettings()
- }
- }, [settingModalFirstOptions, settingModalSecondOptions])
+ // useEffect(() => {
+ // //console.log('useCanvasSetting ์คํ3', settingModalFirstOptions.fontFlag, settingModalSecondOptions.fontFlag, correntObjectNo)
+ // if (settingModalFirstOptions.fontFlag || settingModalSecondOptions.fontFlag) {
+ // onClickOption2()
+ // }
+ // }, [settingModalFirstOptions, settingModalSecondOptions])
// ๊ธ๊ผด ๋ณ๊ฒฝ ์
- useEffect(() => {
- console.log('useCanvasSetting useEffect ์คํ4', globalFont.fontFlag, correntObjectNo)
- if (globalFont.fontFlag) {
- onClickOption2()
- frontSettings()
- fetchSettings()
- }
- }, [globalFont])
+ // useEffect(() => {
+ // //console.log('useCanvasSetting ์คํ4', globalFont.fontFlag, correntObjectNo)
+ // if (globalFont.fontFlag) {
+ // onClickOption2()
+ // }
+ // }, [globalFont])
// ๋๋ช
ํฌ๊ธฐ ๋ณ๊ฒฝ ์
- useEffect(() => {
- console.log('useCanvasSetting useEffect ์คํ5', planSizeSettingMode.flag, correntObjectNo)
+ // useEffect(() => {
+ // //console.log('useCanvasSetting ์คํ5', planSizeSettingMode.flag, correntObjectNo)
+ // if (planSizeSettingMode.flag) {
+ // onClickOption2()
+ // }
+ // }, [planSizeSettingMode])
- if (planSizeSettingMode.flag) {
- onClickOption2()
- frontSettings()
- fetchSettings()
- }
- }, [planSizeSettingMode])
+ // ์ /์ ๊ทธ๋ฆฌ๋ ๋ณ๊ฒฝ ์
+ // useEffect(() => {
+ // //console.log('useCanvasSetting ์คํ6', dotLineGridSetting.flag)
+ // if (dotLineGridSetting.flag) {
+ // onClickOption2()
+ // }
+ // }, [dotLineGridSetting])
+
+ // ๊ทธ๋ฆฌ๋ ์ ์ค์ ๋ณ๊ฒฝ ์
+ // useEffect(() => {
+ // console.log('useCanvasSetting ์คํ7', colorTemp, gridColor)
+ // //colorTemp๋ ๋ณ๊ฒฝ ์ .. ๊ฐ์ด ์๊ณ ๋ณ๊ฒฝ๋ ์ปฌ๋ฌ์ ๋ค๋ฅผ ๋ ์คํ
+ // if (colorTemp !== undefined && colorTemp !== gridColor) {
+ // onClickOption2()
+ // }
+ // }, [color])
const getFonts = (itemValue) => {
if (!itemValue) return { id: 1, name: 'MS PGothic', value: 'MS PGothic' }
@@ -189,6 +255,95 @@ export function useCanvasSetting() {
}
}
+ // ๊ธฐ๋ณธ์ค์ (PlacementShapeSetting) ์กฐํ ๋ฐ ์ด๊ธฐํ
+ const fetchBasicSettings = async () => {
+ try {
+ await get({ url: `/api/canvas-management/canvas-basic-settings/by-object/${correntObjectNo}` }).then((res) => {
+ console.log('fetchBasicSettings res ', res)
+ if (res.length == 0) return
+
+ // 'roofs' ๋ฐฐ์ด์ ์์ฑํ์ฌ ๊ฐ ํญ๋ชฉ์ ์ถ๊ฐ
+ const roofsRow = res.map((item) => {
+ return {
+ roofSizeSet: item.roofSizeSet,
+ roofAngleSet: item.roofAngleSet,
+ }
+ })
+
+ const roofsArray = res.some((item) => !item.roofSeq)
+ ? //์ต์ด ์ง๋ถ์ฌ ์ถ๊ฐ ์ ๋ณด์ ๊ฒฝ์ฐ roofsArray๋ฅผ ์ด๊ธฐํ ์ค์
+ res.map(() => ({
+ flag: false,
+ roofApply: true,
+ roofSeq: 1,
+ roofType: 1,
+ roofWidth: 265,
+ roofHeight: 235,
+ roofHajebichi: 0,
+ roofGap: 455,
+ // roofType: 1,
+ // roofWidth: 200,
+ // roofHeight: 200,
+ // roofHajebichi: 200,
+ // roofGap: 0,
+ roofLayout: 'parallel',
+ }))
+ : res.map((item) => ({
+ flag: false,
+ roofApply: item.roofApply === '' || item.roofApply === false ? false : true,
+ roofSeq: item.roofSeq,
+ roofType: item.roofType,
+ roofWidth: item.roofWidth,
+ roofHeight: item.roofHeight,
+ roofHajebichi: item.roofHajebichi,
+ roofGap: item.roofGap,
+ roofLayout: item.roofLayout,
+ }))
+ console.log('roofsArray ', roofsArray)
+ // ๋๋จธ์ง ๋ฐ์ดํฐ์ ํจ๊ป 'roofs' ๋ฐฐ์ด์ patternData์ ๋ฃ์
+ const patternData = {
+ roofSizeSet: roofsRow[0].roofSizeSet, // ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ ๊ฐ์ ์ฌ์ฉ
+ roofAngleSet: roofsRow[0].roofAngleSet, // ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ ๊ฐ์ ์ฌ์ฉ
+ roofs: roofsArray, // ๋ง๋ค์ด์ง roofs ๋ฐฐ์ด
+ }
+
+ //console.error('patternData', patternData)
+
+ // ๋ฐ์ดํฐ ์ค์
+ setBasicSettings({ ...patternData })
+ })
+ } catch (error) {
+ console.error('Data fetching error:', error)
+ }
+
+ if (!(Object.keys(canvasSetting).length === 0 && canvasSetting.constructor === Object)) {
+ setBasicSettings({ ...canvasSetting })
+ }
+ //setCanvasSetting({ ...basicSetting })
+ }
+
+ // ๊ธฐ๋ณธ์ค์ (PlacementShapeSetting) ์ ์ฅ
+ const basicSettingSave = async () => {
+ try {
+ const patternData = {
+ objectNo: correntObjectNo,
+ roofSizeSet: basicSetting.roofSizeSet,
+ roofAngleSet: basicSetting.roofAngleSet,
+ roofMaterialsAddList: basicSetting.roofs,
+ }
+
+ await post({ url: `/api/canvas-management/canvas-basic-settings`, data: patternData }).then((res) => {
+ swalFire({ text: getMessage(res.returnMessage) })
+ })
+
+ //Recoil ์ค์
+ setCanvasSetting({ ...basicSetting, flag: false })
+ } catch (error) {
+ swalFire({ text: getMessage(res.returnMessage), icon: 'error' })
+ }
+ }
+
+ // CanvasSetting ์กฐํ ๋ฐ ์ด๊ธฐํ
const fetchSettings = async () => {
try {
const res = await get({ url: `/api/canvas-management/canvas-settings/by-object/${correntObjectNo}` })
@@ -269,10 +424,35 @@ export function useCanvasSetting() {
//๊ธ๊ผด ์ค์ Flag
fontFlag: false,
}
- console.log('fontPatternData', fontPatternData)
//์กฐํ๋ ๊ธ๊ผด ๋ฐ์ดํฐ set
setGlobalFont(fontPatternData)
+
+ //์ /์ ๊ทธ๋ฆฌ๋
+ const patternData = {
+ INTERVAL: {
+ type: res.gridType,
+ horizontalInterval: res.gridHorizon * 10,
+ verticalInterval: res.gridVertical * 10,
+ ratioInterval: res.gridRatio * 10,
+ dimension: res.gridDimen,
+ },
+ DOT: res.dotGridDisplay,
+ LINE: res.lineGridDisplay,
+ flag: false,
+ }
+
+ const matchedOption = SelectOptions.find((option) => option.value == res.gridDimen)
+
+ // dimension ๊ฐ์ ๋ง๋ ์ต์
์ ์ ํ
+ setSelectOption(matchedOption)
+
+ setDotLineGridSettingState(patternData)
+ //setCurrentSetting(patternData)
+
+ //๊ทธ๋ฆฌ๋ ์ ์ค์
+ setGridColor(res.gridColor)
+ setColorTemp(res.gridColor)
} else {
//์กฐํ๋ ๊ธ๊ผด ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ
@@ -299,6 +479,14 @@ export function useCanvasSetting() {
})
setGlobalFont({ ...globalFont, fontFlag: false })
+
+ //์ /์ ๊ทธ๋ฆฌ๋
+ setDotLineGridSettingState({ ...defaultDotLineGridSetting, flag: false })
+ //setCurrentSetting({ ...defaultDotLineGridSetting })
+
+ //๊ทธ๋ฆฌ๋ ์ ์ค์
+ setGridColor('#FF0000')
+ setColorTemp('#FF0000')
}
frontSettings()
} catch (error) {
@@ -306,8 +494,8 @@ export function useCanvasSetting() {
}
}
- // ์ต์
ํด๋ฆญ ํ ์ ์ฅ
- const onClickOption2 = useCallback(async () => {
+ // CanvasSetting ์ต์
ํด๋ฆญ ํ ์ ์ฅ
+ const onClickOption2 = async () => {
// ์๋ฒ์ ์ ์กํ ๋ฐ์ดํฐ
const dataToSend = {
firstOption1: option1.map((item) => ({
@@ -394,13 +582,26 @@ export function useCanvasSetting() {
originPixel: dimensionLineSettings.pixel,
originColor: dimensionLineSettings.color,
- //์น์์ ์ค์
+ //๋๋ฉดํฌ๊ธฐ ์ค์
originHorizon: planSizeSettingMode.originHorizon,
originVertical: planSizeSettingMode.originVertical,
+
+ dotGridDisplay: dotLineGridSetting.DOT,
+ lineGridDisplay: dotLineGridSetting.LINE,
+ gridType: dotLineGridSetting.INTERVAL.type,
+ gridHorizon: dotLineGridSetting.INTERVAL.horizontalInterval / 10,
+ gridVertical: dotLineGridSetting.INTERVAL.verticalInterval / 10,
+ gridRatio: dotLineGridSetting.INTERVAL.ratioInterval / 10,
+ gridDimen: dotLineGridSetting.INTERVAL.dimension,
+
+ //gridColor: gridColor.gridColor,
+ gridColor: gridColor,
}
console.log('patternData ', patternData)
+ setColorTemp(gridColor)
+
// HTTP POST ์์ฒญ ๋ณด๋ด๊ธฐ
await post({ url: `/api/canvas-management/canvas-settings`, data: patternData })
.then((res) => {
@@ -408,13 +609,15 @@ export function useCanvasSetting() {
// Canvas ๋์คํ๋ ์ด ์ค์ ์ ํด๋น ์ต์
์ ์ฉ
frontSettings()
+ // ์ ์ฅ ํ ์ฌ์กฐํ
+ fetchSettings()
})
.catch((error) => {
swalFire({ text: getMessage(res.returnMessage), icon: 'error' })
})
//setAdsorptionRange(item.range)
- }, [settingModalFirstOptions, settingModalSecondOptions, adsorptionPointMode, globalFont, planSizeSettingMode])
+ }
// Canvas ๋์คํ๋ ์ด ์ค์ ์ ํด๋น ์ต์
์ ์ฉ
const frontSettings = async () => {
@@ -491,6 +694,7 @@ export function useCanvasSetting() {
return {
canvas,
+ correntObjectNo,
settingModalFirstOptions,
setSettingModalFirstOptions,
settingModalSecondOptions,
@@ -500,7 +704,6 @@ export function useCanvasSetting() {
adsorptionRange,
setAdsorptionRange,
fetchSettings,
- //onClickOption,
frontSettings,
globalFont,
setGlobalFont,
@@ -516,5 +719,26 @@ export function useCanvasSetting() {
setDimensionLineSettings,
planSizeSettingMode,
setPlanSizeSettingMode,
+ selectOption,
+ setSelectOption,
+ SelectOptions,
+ currentSetting,
+ setCurrentSetting,
+ dotLineGridSettingState,
+ setSettingModalGridOptions,
+ setDotLineGridSettingState,
+ resetDotLineGridSetting,
+ gridColor,
+ setGridColor,
+ color,
+ setColor,
+ canvasSetting,
+ setCanvasSetting,
+ basicSetting,
+ setBasicSettings,
+ fetchBasicSettings,
+ basicSettingSave,
+ settingsData,
+ setSettingsData,
}
}
diff --git a/src/hooks/option/useCanvasSettingController.js b/src/hooks/option/useCanvasSettingController.js
deleted file mode 100644
index 48db6c08..00000000
--- a/src/hooks/option/useCanvasSettingController.js
+++ /dev/null
@@ -1,127 +0,0 @@
-import { settingModalFirstOptionsState, settingModalSecondOptionsState } from '@/store/settingAtom'
-import { useEffect, useState } from 'react'
-import { useRecoilState } from 'recoil'
-
-export const useCanvasSettingController = () => {
- const [settingModalFirstOptions, setSettingModalFirstOptions] = useRecoilState(settingModalFirstOptionsState)
- const [settingModalSecondOptions, setSettingModalSecondOptions] = useRecoilState(settingModalSecondOptionsState)
- const [objectNo, setObjectNo] = useState('test123240912001') // ์ดํ ์ญ์ ํ์
- const { get } = useAxios()
-
- useEffect(() => {
- fetchSettings()
- }, [objectNo])
-
- useEffect(() => {
- fetchSettings()
- }, [])
-
- useEffect(() => {
- onClickOnlyOne()
- fetchSettings()
- }, [settingModalFirstOptions, settingModalSecondOptions])
-
- const fetchSettings = async () => {
- try {
- const res = await get({ url: `/api/canvas-management/canvas-settings/by-object/${objectNo}` })
- const optionData1 = settingModalFirstOptions.option1.map((item) => ({ ...item, selected: res[item.column] }))
- const optionData2 = settingModalFirstOptions.option2.map((item) => ({ ...item, selected: res[item.column] }))
- const optionData3 = settingModalSecondOptions.option3.map((item) => ({ ...item }))
- const optionData4 = settingModalSecondOptions.option4.map((item) => ({ ...item, selected: res[item.column] }))
- const optionData5 = settingModalFirstOptions.dimensionDisplay.map((item) => ({
- ...item,
- }))
- // ๋ฐ์ดํฐ ์ค์
- setSettingModalFirstOptions({
- option1: optionData1,
- option2: optionData2,
- dimensionDisplay: optionData5,
- })
- setSettingModalSecondOptions({
- option3: optionData3,
- option4: optionData4,
- })
- } catch (error) {
- console.error('Data fetching error:', error)
- }
- }
-
- //
- const onClickOption = async (option) => {
- option.selected = !option.selected
-
- setSettingModalFirstOptions({ option1, option2, dimensionDisplay })
- setSettingModalSecondOptions({ option3, option4 })
-
- try {
- // ์๋ฒ์ ์ ์กํ ๋ฐ์ดํฐ
- const dataToSend = {
- firstOption1: option1.map((item) => ({
- column: item.column,
- selected: item.selected,
- })),
- firstOption2: option2.map((item) => ({
- column: item.column,
- selected: item.selected,
- })),
- firstOption3: dimensionDisplay.map((item) => ({
- column: item.column,
- selected: item.selected,
- })),
- // secondOption1: secondOptions[0].option1.map((item) => ({
- // name: item.id,
- // name: item.name,
- // // ํ์ํ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ํญ๋ชฉ ์ถ๊ฐ
- // })),
- secondOption2: option4.map((item) => ({
- column: item.column,
- selected: item.selected,
- })),
- }
-
- const patternData = {
- objectNo,
- //๋์คํ๋ ์ด ์ค์ (๋ค์ค)
- allocDisplay: dataToSend.firstOption1[0].selected,
- outlineDisplay: dataToSend.firstOption1[1].selected,
- gridDisplay: dataToSend.firstOption1[2].selected,
- lineDisplay: dataToSend.firstOption1[3].selected,
- wordDisplay: dataToSend.firstOption1[4].selected,
- circuitNumDisplay: dataToSend.firstOption1[5].selected,
- flowDisplay: dataToSend.firstOption1[6].selected,
- trestleDisplay: dataToSend.firstOption1[7].selected,
- totalDisplay: dataToSend.firstOption1[8].selected,
- //์ฐจ์ ํ์(๋ค๊ฑด)
- corridorDimension: dataToSend.firstOption3[0].selected,
- realDimension: dataToSend.firstOption3[1].selected,
- noneDimension: dataToSend.firstOption3[2].selected,
- //ํ๋ฉด ํ์(๋ค์ค)
- onlyBorder: dataToSend.firstOption2[0].selected,
- lineHatch: dataToSend.firstOption2[1].selected,
- allPainted: dataToSend.firstOption2[2].selected,
- //ํก์ฐฉ๋ฒ์ ์ค์ (๋จ๊ฑด)
- adsorpRangeSmall: dataToSend.secondOption2[0].selected,
- adsorpRangeSmallSemi: dataToSend.secondOption2[1].selected,
- adsorpRangeMedium: dataToSend.secondOption2[2].selected,
- adsorpRangeLarge: dataToSend.secondOption2[3].selected,
- }
-
- // HTTP POST ์์ฒญ ๋ณด๋ด๊ธฐ
- await post({ url: `/api/canvas-management/canvas-settings`, data: patternData }).then((res) => {
- swalFire({ text: getMessage(res.returnMessage) })
- })
- } catch (error) {
- swalFire({ text: getMessage(res.returnMessage), icon: 'error' })
- }
- }
-
- return {
- fetchSettings,
- settingModalFirstOptions,
- setSettingModalFirstOptions,
- settingModalSecondOptions,
- setSettingModalSecondOptions,
- onClickOption,
- ร,
- }
-}
diff --git a/src/hooks/roofcover/useOuterLineWall.js b/src/hooks/roofcover/useOuterLineWall.js
index c668dd60..74bfcbcc 100644
--- a/src/hooks/roofcover/useOuterLineWall.js
+++ b/src/hooks/roofcover/useOuterLineWall.js
@@ -1,4 +1,4 @@
-import { useContext, useEffect, useRef } from 'react'
+import { useEffect, useRef } from 'react'
import { distanceBetweenPoints } from '@/util/canvas-util'
import { useRecoilState, useRecoilValue, useResetRecoilState, useSetRecoilState } from 'recoil'
import {
@@ -31,7 +31,6 @@ import { fabric } from 'fabric'
import { outlineDisplaySelector } from '@/store/settingAtom'
import { usePopup } from '@/hooks/usePopup'
import PropertiesSetting from '@/components/floor-plan/modal/outerlinesetting/PropertiesSetting'
-import { EventContext } from '@/app/floor-plan/EventProvider'
//์ธ๋ฒฝ์ ๊ทธ๋ฆฌ๊ธฐ
export function useOuterLineWall(id, propertiesId) {
diff --git a/src/hooks/useCanvas.js b/src/hooks/useCanvas.js
index 46dbbb35..d6443c2a 100644
--- a/src/hooks/useCanvas.js
+++ b/src/hooks/useCanvas.js
@@ -507,18 +507,33 @@ export function useCanvas(id) {
* cad ํ์ผ ์ฌ์ฉ์ ์ด๋ฏธ์ง ๋ก๋ฉ ํจ์
*/
const handleBackImageLoadToCanvas = (url) => {
- console.log('image load url: ', url)
-
- fabric.Image.fromURL(url, function (img) {
+ canvas
+ .getObjects()
+ .filter((obj) => obj.name === 'backGroundImage')
+ .forEach((img) => {
+ canvas.remove(img)
+ canvas?.renderAll()
+ })
+ fabric.Image.fromURL(`${url}?${new Date().getTime()}`, function (img) {
+ console.log(img)
img.set({
left: 0,
top: 0,
- width: 1500,
- height: 1500,
- selectable: true,
+ width: img.width,
+ height: img.height,
+ name: 'backGroundImage',
+ selectable: false,
+ hasRotatingPoint: false, // ํ์ ํธ๋ค ํ์ฑํ
+ lockMovementX: false,
+ lockMovementY: false,
+ lockRotation: false,
+ lockScalingX: false,
+ lockScalingY: false,
})
- canvas.add(img)
- canvas.renderAll()
+ // image = img
+ canvas?.add(img)
+ canvas?.sendToBack(img)
+ canvas?.renderAll()
setBackImg(img)
})
}
diff --git a/src/hooks/useEvent.js b/src/hooks/useEvent.js
index 16d0896d..55058cf4 100644
--- a/src/hooks/useEvent.js
+++ b/src/hooks/useEvent.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useRef } from 'react'
+import { useRef } from 'react'
import { useRecoilValue, useSetRecoilState } from 'recoil'
import { canvasState, canvasZoomState, currentMenuState, textModeState } from '@/store/canvasAtom'
import { fabric } from 'fabric'
@@ -20,9 +20,15 @@ export function useEvent() {
const textMode = useRecoilValue(textModeState)
- useEffect(() => {
- initEvent()
- }, [currentMenu, canvas, adsorptionPointAddMode, adsorptionPointMode, adsorptionRange, dotLineGridSetting, tempGridMode])
+ // ์ด๋ฒคํธ ์ด๊ธฐํ ์์น ์์ -> useCanvasSetting์์ ์ธํ
๊ฐ ๋ถ๋ฌ์ค๊ณ ๋์ ์ด๊ธฐํ ํจ์ ํธ์ถ
+ // useEffect(() => {
+ // initEvent()
+ // }, [currentMenu, canvas, adsorptionPointAddMode, adsorptionPointMode, adsorptionRange, dotLineGridSetting])
+
+ // ์์ ๊ทธ๋ฆฌ๋ ๋ชจ๋ ๋ณ๊ฒฝ ์ ์ด๋ฒคํธ ์ด๊ธฐํ ํธ์ถ ์์น ์์ -> GridOption ์ปดํฌ๋ํธ์์ ์์ ๊ทธ๋ฆฌ๋ ๋ชจ๋ ๋ณ๊ฒฝ ์ ์ด๋ฒคํธ ์ด๊ธฐํ ํจ์ ํธ์ถ
+ // useEffect(() => {
+ // initEvent()
+ // }, [tempGridMode])
const initEvent = () => {
if (!canvas) {
diff --git a/src/hooks/usePlan.js b/src/hooks/usePlan.js
index 6b1336a5..532759a4 100644
--- a/src/hooks/usePlan.js
+++ b/src/hooks/usePlan.js
@@ -1,11 +1,13 @@
import { useEffect, useState } from 'react'
import { useRecoilState } from 'recoil'
-import { v4 as uuidv4, validate as isValidUUID } from 'uuid'
-import { canvasState, currentCanvasPlanState, initCanvasPlansState, plansState, modifiedPlansState, modifiedPlanFlagState } from '@/store/canvasAtom'
+import { v4 as uuidv4 } from 'uuid'
+import { canvasState, currentCanvasPlanState, plansState, modifiedPlansState, modifiedPlanFlagState } from '@/store/canvasAtom'
import { useAxios } from '@/hooks/useAxios'
import { useMessage } from '@/hooks/useMessage'
import { useSwal } from '@/hooks/useSwal'
import { SAVE_KEY } from '@/common/common'
+import { readImage, removeImage } from '@/lib/fileAction'
+import { useCanvas } from '@/hooks/useCanvas'
export function usePlan() {
const [planNum, setPlanNum] = useState(0)
@@ -13,9 +15,9 @@ export function usePlan() {
const [currentCanvasStatus, setCurrentCanvasStatus] = useState(null)
const [canvas, setCanvas] = useRecoilState(canvasState)
+
const [currentCanvasPlan, setCurrentCanvasPlan] = useRecoilState(currentCanvasPlanState)
- const [initCanvasPlans, setInitCanvasPlans] = useRecoilState(initCanvasPlansState) // DB์ ์ ์ฅ๋ plan
- const [plans, setPlans] = useRecoilState(plansState) // ์ ์ฒด plan (DB์ ์ ์ฅ๋ plan + ์ ์ฅ ์๋ ์๋ก์ด plan)
+ const [plans, setPlans] = useRecoilState(plansState) // ์ ์ฒด plan
const [modifiedPlans, setModifiedPlans] = useRecoilState(modifiedPlansState) // ๋ณ๊ฒฝ๋ canvas plan
const [modifiedPlanFlag, setModifiedPlanFlag] = useRecoilState(modifiedPlanFlagState) // ์บ๋ฒ์ค ์ค์๊ฐ ์ค๋ธ์ ํธ ์ด๋ฒคํธ ๊ฐ์ง flag
@@ -108,22 +110,22 @@ export function usePlan() {
setCurrentCanvasPlan((prev) => ({ ...prev, canvasStatus: currentCanvasStatus }))
}
}, [currentCanvasStatus])
+
/**
* ํ์ฌ ์บ๋ฒ์ค ์ํ์ DB์ ์ ์ฅ๋ ์บ๋ฒ์ค ์ํ๋ฅผ ๋น๊ตํ์ฌ ์์ ์ฌ๋ถ๋ฅผ ํ๋จ
*/
const checkModifiedCanvasPlan = (planId) => {
- const canvasStatus = currentCanvasData()
- if (isValidUUID(planId)) {
- // ์๋ก์ด ์บ๋ฒ์ค
- return JSON.parse(canvasStatus).objects.length > 0
- } else {
- // ์ ์ฅ๋ ์บ๋ฒ์ค
- // ๊ฐ๊ฐ object๋ค์ uuid ๋ชฉ๋ก์ ์ถ์ถํ์ฌ ๋น๊ต
- const canvasObjsUuids = getObjectUuids(JSON.parse(canvasStatus).objects)
- const initPlanData = initCanvasPlans.find((plan) => plan.id === planId)
- const dbObjsUuids = getObjectUuids(JSON.parse(initPlanData.canvasStatus).objects)
- return canvasObjsUuids.length !== dbObjsUuids.length || !canvasObjsUuids.every((uuid, index) => uuid === dbObjsUuids[index])
+ const planData = plans.find((plan) => plan.id === planId)
+ if (planData.canvasStatus === '') {
+ // ๋น ์ํ๋ก ์ ์ฅ๋ ์บ๋ฒ์ค
+ return true
}
+
+ // ๊ฐ๊ฐ object๋ค์ uuid ๋ชฉ๋ก์ ์ถ์ถํ์ฌ ๋น๊ต
+ const canvasStatus = currentCanvasData()
+ const canvasObjsUuids = getObjectUuids(JSON.parse(canvasStatus).objects)
+ const dbObjsUuids = getObjectUuids(JSON.parse(planData.canvasStatus).objects)
+ return canvasObjsUuids.length !== dbObjsUuids.length || !canvasObjsUuids.every((uuid, index) => uuid === dbObjsUuids[index])
}
const getObjectUuids = (objects) => {
return objects
@@ -140,16 +142,12 @@ export function usePlan() {
/**
* ์บ๋ฒ์ค์ ์ ์ฅ๋์ง ์์ ๋ณ๊ฒฝ์ฌํญ์ด ์์๋ ์ ์ฅ ์ฌ๋ถ๋ฅผ ํ์ธ ํ ์ ์ฅ
*/
- const checkUnsavedCanvasPlan = async (userId) => {
+ const checkUnsavedCanvasPlan = async () => {
swalFire({
- text:
- (!initCanvasPlans.some((initCanvasPlans) => initCanvasPlans.id === currentCanvasPlan.id) ? 'New ' : '') +
- `Plan ${currentCanvasPlan.ordering}์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฅํ์๊ฒ ์ต๋๊น?`,
+ text: `Plan ${currentCanvasPlan.ordering} ` + getMessage('plan.message.confirm.save.modified'),
type: 'confirm',
confirmFn: async () => {
- initCanvasPlans.some((plan) => plan.id === currentCanvasPlan.id)
- ? await putCanvasStatus(currentCanvasPlan.canvasStatus)
- : await postCanvasStatus(userId, currentCanvasPlan.canvasStatus)
+ await putCanvasStatus(currentCanvasPlan.canvasStatus)
},
})
resetModifiedPlans()
@@ -172,18 +170,16 @@ export function usePlan() {
/**
* ํ์ด์ง ๋ด ์บ๋ฒ์ค๋ฅผ ์ ์ฅ
*/
- const saveCanvas = async (userId) => {
+ const saveCanvas = async () => {
const canvasStatus = currentCanvasData('save')
- initCanvasPlans.some((plan) => plan.id === currentCanvasPlan.id)
- ? await putCanvasStatus(canvasStatus)
- : await postCanvasStatus(userId, canvasStatus)
+ await putCanvasStatus(canvasStatus)
}
/**
* objectNo์ ํด๋นํ๋ canvas ๋ชฉ๋ก์ ์กฐํ
*/
const getCanvasByObjectNo = async (userId, objectNo) => {
- return get({ url: `/api/canvas-management/canvas-statuses/by-object/${objectNo}/${userId}` }).then((res) =>
+ return await get({ url: `/api/canvas-management/canvas-statuses/by-object/${objectNo}/${userId}` }).then((res) =>
res.map((item, index) => ({
id: item.id,
userId: item.userId,
@@ -199,28 +195,20 @@ export function usePlan() {
/**
* ์ ๊ท canvas ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
*/
- const postCanvasStatus = async (userId, canvasStatus) => {
+ const postCanvasStatus = async (userId, objectNo, canvasStatus) => {
const planData = {
userId: userId,
imageName: 'image_name', // api ํ์ํญ๋ชฉ์ด์ฌ์ ์์๋ก ๋ฃ์, ์ดํ ์ญ์ ํ์
- objectNo: currentCanvasPlan.objectNo,
+ objectNo: objectNo,
+ bgImageName: currentCanvasPlan?.bgImageName ?? null,
+ mapPositionAddress: currentCanvasPlan?.mapPositionAddress ?? null,
canvasStatus: canvasToDbFormat(canvasStatus),
}
await promisePost({ url: '/api/canvas-management/canvas-statuses', data: planData })
.then((res) => {
- setInitCanvasPlans((initCanvasPlans) => [...initCanvasPlans, { id: res.data, canvasStatus: canvasStatus }])
- setPlans((plans) =>
- plans.map((plan) =>
- plan.id === currentCanvasPlan.id
- ? {
- ...plan,
- id: res.data,
- canvasStatus: canvasStatus,
- }
- : plan,
- ),
- )
- setModifiedPlans((modifiedPlans) => modifiedPlans.filter((planId) => planId !== currentCanvasPlan.id))
+ setPlans([...plans, { id: res.data, objectNo: objectNo, userId: userId, canvasStatus: canvasStatus, ordering: planNum + 1 }])
+ handleCurrentPlan(res.data)
+ setPlanNum(planNum + 1)
})
.catch((error) => {
swalFire({ text: error.message, icon: 'error' })
@@ -233,13 +221,12 @@ export function usePlan() {
const putCanvasStatus = async (canvasStatus) => {
const planData = {
id: currentCanvasPlan.id,
+ bgImageName: currentCanvasPlan?.bgImageName ?? null,
+ mapPositionAddress: currentCanvasPlan?.mapPositionAddress ?? null,
canvasStatus: canvasToDbFormat(canvasStatus),
}
await promisePut({ url: '/api/canvas-management/canvas-statuses', data: planData })
.then((res) => {
- setInitCanvasPlans((initCanvasPlans) =>
- initCanvasPlans.map((plan) => (plan.id === currentCanvasPlan.id ? { ...plan, canvasStatus: canvasStatus } : plan)),
- )
setPlans((plans) => plans.map((plan) => (plan.id === currentCanvasPlan.id ? { ...plan, canvasStatus: canvasStatus } : plan)))
setModifiedPlans((modifiedPlans) => modifiedPlans.filter((planId) => planId !== currentCanvasPlan.id))
})
@@ -251,40 +238,30 @@ export function usePlan() {
/**
* id์ ํด๋นํ๋ canvas ๋ฐ์ดํฐ๋ฅผ ์ญ์
*/
- const delCanvasById = (id) => {
- return promiseDel({ url: `/api/canvas-management/canvas-statuses/by-id/${id}` })
+ const delCanvasById = async (id) => {
+ return await promiseDel({ url: `/api/canvas-management/canvas-statuses/by-id/${id}` })
}
/**
* objectNo์ ํด๋นํ๋ canvas ๋ฐ์ดํฐ๋ค์ ์ญ์
*/
- const delCanvasByObjectNo = (objectNo) => {
- return promiseDel({ url: `/api/canvas-management/canvas-statuses/by-object/${objectNo}` })
+ const delCanvasByObjectNo = async (objectNo) => {
+ return await promiseDel({ url: `/api/canvas-management/canvas-statuses/by-object/${objectNo}` })
}
/**
* plan ์ด๋
* ํ์ฌ plan์ ์์
์ํ๋ฅผ ํ์ธ, ์ ์ฅ ํ ์ด๋
*/
- const handleCurrentPlan = async (userId, newCurrentId) => {
+ const handleCurrentPlan = async (newCurrentId) => {
if (!currentCanvasPlan || currentCanvasPlan.id !== newCurrentId) {
if (currentCanvasPlan?.id && modifiedPlans.some((modifiedPlan) => modifiedPlan === currentCanvasPlan.id)) {
- // swalFire({
- // text: `${currentCanvasPlan.name} ` + getMessage('plan.message.confirm.save'),
- // type: 'confirm',
- // confirmFn: async () => {
- // await saveCanvas(userId)
- // updateCurrentPlan(newCurrentId)
- // },
- // denyFn: () => {
- // updateCurrentPlan(newCurrentId)
- // },
- // })
- await saveCanvas(userId)
+ await saveCanvas()
}
updateCurrentPlan(newCurrentId)
}
}
+
const updateCurrentPlan = (newCurrentId) => {
setPlans((plans) =>
plans.map((plan) => {
@@ -295,29 +272,35 @@ export function usePlan() {
useEffect(() => {
setCurrentCanvasPlan(plans.find((plan) => plan.isCurrent) || null)
setSelectedPlan(plans.find((plan) => plan.isCurrent))
+ // setBgImage()
}, [plans])
+ const setBgImage = () => {
+ // readImage(selectedPlan?.id)
+ }
+
/**
* ์๋ก์ด plan ์์ฑ
* ํ์ฌ plan์ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ ๋ณต์ ์ฌ๋ถ๋ฅผ ํ์ธ
*/
- const handleAddPlan = (userId, objectNo) => {
+ const handleAddPlan = async (userId, objectNo) => {
JSON.parse(currentCanvasData()).objects.length > 0
? swalFire({
- text:
- (!initCanvasPlans.some((initCanvasPlans) => initCanvasPlans.id === currentCanvasPlan.id) ? 'New ' : '') +
- `Plan ${currentCanvasPlan.ordering} ` +
- getMessage('plan.message.confirm.copy'),
+ text: `Plan ${currentCanvasPlan.ordering} ` + getMessage('plan.message.confirm.copy'),
type: 'confirm',
- confirmFn: () => {
- addPlan(userId, objectNo, currentCanvasData())
+ confirmFn: async () => {
+ await postCanvasStatus(userId, objectNo, currentCanvasData())
},
- denyFn: () => {
- addPlan(userId, objectNo, '')
+ denyFn: async () => {
+ await postCanvasStatus(userId, objectNo, '')
},
})
- : addPlan(userId, objectNo, '')
+ : await postCanvasStatus(userId, objectNo, '')
}
+
+ /**
+ * DB์ ์ถ๊ฐํ์ง ์๊ณ ํ๋ฉด ์์์ plan์ ์ถ๊ฐํ๋ ํจ์
+ */
const addPlan = (userId, objectNo, canvasStatus) => {
const id = uuidv4()
const newPlan = {
@@ -328,32 +311,26 @@ export function usePlan() {
ordering: planNum + 1,
}
setPlans([...plans, newPlan])
- handleCurrentPlan(userId, id)
+ handleCurrentPlan(id)
setPlanNum(planNum + 1)
}
/**
* plan ์ญ์
*/
- const handleDeletePlan = (e, id) => {
+ const handleDeletePlan = async (e, id) => {
e.stopPropagation() // ์ด๋ฒคํธ ๋ฒ๋ธ๋ง ๋ฐฉ์ง
- if (initCanvasPlans.some((plan) => plan.id === id)) {
- delCanvasById(id)
- .then((res) => {
- setInitCanvasPlans((initCanvasPlans) => initCanvasPlans.filter((plan) => plan.id !== id))
- setPlans((plans) => plans.filter((plan) => plan.id !== id))
- setModifiedPlans((modifiedPlans) => modifiedPlans.filter((planId) => planId !== currentCanvasPlan.id))
- swalFire({ text: getMessage('plan.message.delete') })
- })
- .catch((error) => {
- swalFire({ text: error.message, icon: 'error' })
- })
- } else {
- setPlans((plans) => plans.filter((plan) => plan.id !== id))
- setModifiedPlans((modifiedPlans) => modifiedPlans.filter((planId) => planId !== currentCanvasPlan.id))
- swalFire({ text: getMessage('plan.message.delete') })
- }
+ await delCanvasById(id)
+ .then((res) => {
+ setPlans((plans) => plans.filter((plan) => plan.id !== id))
+ setModifiedPlans((modifiedPlans) => modifiedPlans.filter((planId) => planId !== currentCanvasPlan.id))
+ removeImage(currentCanvasPlan.id)
+ swalFire({ text: getMessage('plan.message.delete') })
+ })
+ .catch((error) => {
+ swalFire({ text: error.message, icon: 'error' })
+ })
// ์ญ์ ํ last ๋ฐ์ดํฐ์ ํฌ์ปค์ฑ
const lastPlan = plans.filter((plan) => plan.id !== id).at(-1)
@@ -368,16 +345,15 @@ export function usePlan() {
/**
* plan ์กฐํ
*/
- const loadCanvasPlanData = (userId, objectNo, pid) => {
- getCanvasByObjectNo(userId, objectNo).then((res) => {
+ const loadCanvasPlanData = async (userId, objectNo, pid) => {
+ await getCanvasByObjectNo(userId, objectNo).then((res) => {
// console.log('canvas ๋ชฉ๋ก ', res)
if (res.length > 0) {
- setInitCanvasPlans(res)
setPlans(res)
updateCurrentPlan(res[pid - 1].id)
setPlanNum(res.length)
} else {
- addPlan(userId, objectNo, '')
+ postCanvasStatus(userId, objectNo, '')
}
})
}
@@ -385,9 +361,9 @@ export function usePlan() {
return {
canvas,
plans,
- initCanvasPlans,
selectedPlan,
currentCanvasPlan,
+ setCurrentCanvasPlan,
modifiedPlans,
modifiedPlanFlag,
setModifiedPlanFlag,
diff --git a/src/lib/fileAction.js b/src/lib/fileAction.js
index d09473a8..d2c4cff9 100644
--- a/src/lib/fileAction.js
+++ b/src/lib/fileAction.js
@@ -4,6 +4,7 @@ import fs from 'fs/promises'
const CAD_FILE_PATH = 'public/cad-images'
const IMAGE_FILE_PATH = 'public/plan-bg-images'
+const FILE_PATH = 'public/plan-images'
/**
* ํ์ผ ๋ณํ & ์ ์ฅ
@@ -39,25 +40,56 @@ const writeImageBase64 = async (title, data) => {
return fs.writeFile(`${IMAGE_FILE_PATH}/${title}.png`, data, 'base64')
}
-/**
- * ์ด๋ฏธ์ง ์ ์ฅ
- * Buffer ํ์์ผ๋ก ์ ์ฅ
- * @param {*} title
- * @param {*} data
- * @returns
- */
-const writeImageBuffer = async (file) => {
- // ํด๋น ๊ฒฝ๋ก์ Directory ๊ฐ ์๋ค๋ฉด ์์ฑ
+// /**
+// * ์ด๋ฏธ์ง ์ ์ฅ
+// * Buffer ํ์์ผ๋ก ์ ์ฅ
+// * @param {*} title
+// * @param {*} data
+// * @returns
+// */
+// const writeImageBuffer = async (file) => {
+// // ํด๋น ๊ฒฝ๋ก์ Directory ๊ฐ ์๋ค๋ฉด ์์ฑ
+// try {
+// await fs.readdir(IMAGE_FILE_PATH)
+// } catch {
+// await fs.mkdir(IMAGE_FILE_PATH)
+// }
+//
+// const arrayBuffer = await fileURLToPath.arrayBuffer()
+// const buffer = new Uint8Array(arrayBuffer)
+//
+// return fs.writeFile(`${IMAGE_FILE_PATH}/${file.fileName}`, buffer)
+// }
+
+const writeImage = async (fileName, file) => {
try {
- await fs.readdir(IMAGE_FILE_PATH)
+ await fs.readdir(FILE_PATH)
} catch {
- await fs.mkdir(IMAGE_FILE_PATH)
+ await fs.mkdir(FILE_PATH)
}
- const arrayBuffer = await fileURLToPath.arrayBuffer()
- const buffer = new Uint8Array(arrayBuffer)
-
- return fs.writeFile(`${IMAGE_FILE_PATH}/${file.fileName}`, buffer)
+ return fs.writeFile(`${FILE_PATH}/${fileName}.png`, file)
}
-export { convertDwgToPng, writeImageBase64, writeImageBuffer }
+const readImage = async (fileName) => {
+ const file = await fs.readFile(`${FILE_PATH}/${fileName}`)
+ // .then((res) => {
+ // console.log('readImage-then', res)
+ // })
+ // .catch((e) => {
+ // console.log('readImage-catch', e)
+ // })
+ console.log('๐ ~ readImage ~ file:', file)
+
+ return file
+}
+
+const removeImage = async (fileName) => {
+ try {
+ await fs.rm(`${FILE_PATH}/${fileName}.png`)
+ } catch (e) {
+ console.log(e)
+ }
+}
+
+export { convertDwgToPng, writeImageBase64, writeImage, readImage, removeImage }
diff --git a/src/lib/session.js b/src/lib/session.js
index ff5a2078..bcedecf4 100644
--- a/src/lib/session.js
+++ b/src/lib/session.js
@@ -3,8 +3,8 @@ export const defaultSession = {}
export const sessionOptions = {
password: process.env.SESSION_SECRET,
cookieName: 'lama-session',
- cookieOptions: {
- httpOnly: true,
- secure: process.env.NODE_ENV === 'production',
- },
+ // cookieOptions: {
+ // httpOnly: true,
+ // secure: process.env.NODE_ENV === 'production',
+ // },
}
diff --git a/src/locales/ja.json b/src/locales/ja.json
index 23903120..8521c658 100644
--- a/src/locales/ja.json
+++ b/src/locales/ja.json
@@ -164,6 +164,7 @@
"plan.menu.estimate.save": "ไฟๅญ",
"plan.menu.estimate.reset": "ๅๆๅ",
"plan.menu.estimate.copy": "่ฆ็ฉๆธใฎใณใใผ",
+ "plan.menu.estimate.unLock": "ใญใใฏ่งฃ้ค",
"plan.menu.simulation": "็บๅฑใทใใฅใฌใผใทใงใณ",
"plan.menu.simulation.excel": "Excel",
"plan.menu.simulation.pdf": "PDF",
@@ -294,6 +295,7 @@
"modal.actual.size.setting.plane.size.length": "ๅปไธใฎๅฏธๆณใฎ้ทใ",
"modal.actual.size.setting.actual.size.length": "ๅฎๅฏธ้ท",
"plan.message.confirm.save": "PLAN์ ์ ์ฅํ์๊ฒ ์ต๋๊น?",
+ "plan.message.confirm.save.modified": "PLAN์ ๋ณ๊ฒฝ์ฌํญ์ ์ ์ฅํ์๊ฒ ์ต๋๊น?",
"plan.message.confirm.copy": "PLAN์ ๋ณต์ฌํ์๊ฒ ์ต๋๊น?",
"plan.message.confirm.delete": "PLAN์ ์ญ์ ํ์๊ฒ ์ต๋๊น?",
"plan.message.save": "์ ์ฅ๋์์ต๋๋ค.",
@@ -341,6 +343,7 @@
"modal.panel.column.insert.info": "ๆฟๅ
ฅใใๆนๅใ้ธๆใใฆใใ ใใใ",
"modal.panel.column.insert.type.left": "ๅทฆๆฟๅ
ฅ",
"modal.panel.column.insert.type.right": "ๅณๆฟๅ
ฅ",
+ "modal.image.load.size.rotate": "ใตใคใบ่ชฟๆดใจๅ่ปข",
"contextmenu.column.insert": "ๅใฎๆฟๅ
ฅ",
"contextmenu.row.move": "๋จ ์ด๋(JA)",
"contextmenu.row.copy": "๋จ ๋ณต์ฌ(JA)",
@@ -483,9 +486,13 @@
"common.message.writeToConfirm": "ไฝๆ่งฃ้คใๅฎ่กใใพใใ๏ผ",
"common.message.password.init.success": "ใในใฏใผใ [{0}] ใซๅๆๅใใใพใใใ",
"common.message.no.edit.save": "ใใฎๆๆธใฏๅคๆดใงใใพใใใ",
+ "common.load": "ใใกใคใซใฎ่ฟฝๅ ",
"common.input.file": "ใใกใคใซใ่ชญใฟ่พผใ",
"common.input.file.load": "ใใกใคใซใฎ่ฟฝๅ ",
+ "common.input.image.load": "์ด๋ฏธ์ง ๋ถ๋ฌ์ค๊ธฐ",
+ "common.input.address.load": "ใขใใฌในใ่ชญใฟ่พผใ",
"common.require": "ๅฟ
้ ",
+ "common.finish": "ๅฎไบ",
"common.ok": "็ขบ่ช",
"commons.west": "็ซใค",
"commons.east": "ใใณ",
@@ -835,6 +842,7 @@
"estimate.detail.fileList.btn": "ใใกใคใซ้ธๆ",
"estimate.detail.fileList.extCheck": "ใใฎใใกใคใซใฏใคใกใผใธใใกใคใซใงใฏใใใพใใ",
"estimate.detail.header.fileList2": "ๆทปไปใใกใคใซไธ่ฆง",
+ "estimate.detail.fileList2.btn.return": "ๅพฉๅ
",
"estimate.detail.header.specialEstimate": "่ฆ็ฉใใใฎๅ
ทไฝ็ใช",
"estimate.detail.header.specialEstimateProductInfo": "่ฃฝๅๆ
ๅ ฑ",
"estimate.detail.sepcialEstimateProductInfo.totAmount": "ๆฐ้ (PCS)",
@@ -897,10 +905,14 @@
"estimate.detail.save.requiredItem": "่ฃฝๅใฏ1ใคไปฅไธ็ป้ฒใใๅฟ
่ฆใใใใพใ.",
"estimate.detail.save.requiredCharger": "ๆ
ๅฝ่
ใฏๅฟ
้ ใงใ.",
"estimate.detail.save.requiredObjectName": "ๆกไปถๅใฏๅฟ
้ ใงใ.",
+ "estimate.detail.save.requiredPkgAsp": "ไฝๅฎ
pkgๅไพกใฏ0ใใๅคงใใๅคใๅ
ฅๅใใฆใใ ใใ.",
"estimate.detail.save.requiredEstimateDate": "่ฆ็ฉๆฅใฏๅฟ
้ ใงใ.",
+ "estimate.detail.save.requiredItemId": "่ฃฝๅใ้ธๆใใฆใใ ใใ.",
"estimate.detail.save.requiredAmount": "ๆฐ้ใฏ0ใใๅคงใใๅคใๅ
ฅๅใใฆใใ ใใ.",
"estimate.detail.save.requiredSalePrice": "ๅไพกใฏ0ใใๅคงใใๅคใๅ
ฅๅใใฆใใ ใใ.",
"estimate.detail.reset.confirmMsg": "ไฟๅญใใ่ฆ็ฉๆธๆ
ๅ ฑใๅๆๅใใใๅณ้ขๆ
ๅ ฑใๅๆ ใใใพใใๆฌๅฝใซๅๆๅใใพใใ?",
+ "estimate.detail.alert.delFile": "ๆทปไปใใกใคใซใๅฎๅ
จใซๅ้คใใใซใฏ[ไฟๅญ]ใใฟใณใใฏใชใใฏใใฆใใ ใใ",
+ "estimate.detail.alert.selectDelItem": "ๅ้คใใๅๅใ้ธๆใใฆใใ ใใ.",
"simulator.title.sub1": "็ฉไปถ็ชๅท",
"simulator.title.sub2": "ไฝๆๆฅ",
"simulator.title.sub3": "ใทในใใ ๅฎน้",
diff --git a/src/locales/ko.json b/src/locales/ko.json
index 0cf7217b..cc65bb7d 100644
--- a/src/locales/ko.json
+++ b/src/locales/ko.json
@@ -168,6 +168,7 @@
"plan.menu.estimate.save": "์ ์ฅ",
"plan.menu.estimate.reset": "์ด๊ธฐํ",
"plan.menu.estimate.copy": "๊ฒฌ์ ์ ๋ณต์ฌ",
+ "plan.menu.estimate.unLock": "์ ๊ธ ํด์ ",
"plan.menu.simulation": "๋ฐ์ ์๋ฎฌ๋ ์ด์
",
"plan.menu.simulation.excel": "Excel",
"plan.menu.simulation.pdf": "PDF",
@@ -299,6 +300,7 @@
"modal.actual.size.setting.plane.size.length": "๋ณต๋์น์ ๊ธธ์ด",
"modal.actual.size.setting.actual.size.length": "์ค์ ์น์ ๊ธธ์ด",
"plan.message.confirm.save": "PLAN์ ์ ์ฅํ์๊ฒ ์ต๋๊น?",
+ "plan.message.confirm.save.modified": "PLAN์ ๋ณ๊ฒฝ์ฌํญ์ ์ ์ฅํ์๊ฒ ์ต๋๊น?",
"plan.message.confirm.copy": "PLAN์ ๋ณต์ฌํ์๊ฒ ์ต๋๊น?",
"plan.message.confirm.delete": "PLAN์ ์ญ์ ํ์๊ฒ ์ต๋๊น?",
"plan.message.save": "์ ์ฅ๋์์ต๋๋ค.",
@@ -348,6 +350,7 @@
"modal.panel.column.insert.info": "์ฝ์
ํ ๋ฐฉํฅ์ ์ ํํด์ฃผ์ธ์.",
"modal.panel.column.insert.type.left": "์ผ์ชฝ ์ฝ์
",
"modal.panel.column.insert.type.right": "์ค๋ฅธ์ชฝ ์ฝ์
",
+ "modal.image.load.size.rotate": "ํฌ๊ธฐ ์กฐ์ ๋ฐ ํ์ ",
"contextmenu.row.move": "๋จ ์ด๋",
"contextmenu.row.copy": "๋จ ๋ณต์ฌ",
"contextmenu.row.remove": "๋จ ์ญ์ ",
@@ -492,9 +495,13 @@
"common.message.writeToConfirm": "์์ฑ ํด์ ๋ฅผ ์คํํ์๊ฒ ์ต๋๊น?",
"common.message.password.init.success": "๋น๋ฐ๋ฒํธ [{0}]๋ก ์ด๊ธฐํ ๋์์ต๋๋ค.",
"common.message.no.edit.save": "This document cannot be changed.",
+ "common.load": "๋ถ๋ฌ์ค๊ธฐ",
"common.input.file": "ํ์ผ ๋ถ๋ฌ์ค๊ธฐ",
"common.input.file.load": "๋ถ๋ฌ์ค๊ธฐ",
+ "common.input.image.load": "์ด๋ฏธ์ง ๋ถ๋ฌ์ค๊ธฐ",
+ "common.input.address.load": "์ฃผ์ ๋ถ๋ฌ์ค๊ธฐ",
"common.require": "ํ์",
+ "common.finish": "์๋ฃ",
"common.ok": "ํ์ธ",
"commons.west": "์",
"commons.east": "๋",
@@ -845,6 +852,7 @@
"estimate.detail.fileList.btn": "ํ์ผ์ ํ",
"estimate.detail.fileList.extCheck": "ํด๋น ํ์ผ์ ์ด๋ฏธ์ง ํ์ผ์ด ์๋๋๋ค",
"estimate.detail.header.fileList2": "์ฒจ๋ถํ์ผ ๋ชฉ๋ก",
+ "estimate.detail.fileList2.btn.return": "๋ณต์",
"estimate.detail.header.specialEstimate": "๊ฒฌ์ ํน์ด์ฌํญ",
"estimate.detail.header.specialEstimateProductInfo": "์ ํ์ ๋ณด",
"estimate.detail.sepcialEstimateProductInfo.totAmount": "์๋ (PCS)",
@@ -907,10 +915,14 @@
"estimate.detail.save.requiredItem": "์ ํ์ 1๊ฐ์ด์ ๋ฑ๋กํด์ผ ๋ฉ๋๋ค.",
"estimate.detail.save.requiredCharger": "๋ด๋น์๋ ํ์๊ฐ ์
๋๋ค.",
"estimate.detail.save.requiredObjectName": "์๊ฑด๋ช
์ ํ์๊ฐ ์
๋๋ค.",
+ "estimate.detail.save.requiredPkgAsp": "์ฃผํpkg ๋จ๊ฐ๋ 0๋ณด๋ค ํฐ ๊ฐ์ ์
๋ ฅํ์ธ์.",
"estimate.detail.save.requiredEstimateDate": "๊ฒฌ์ ์ผ์ ํ์๊ฐ ์
๋๋ค.",
+ "estimate.detail.save.requiredItemId": "์ ํ์ ์ ํํด์ฃผ์ธ์.",
"estimate.detail.save.requiredAmount": "์๋์ 0๋ณด๋ค ํฐ๊ฐ์ ์
๋ ฅํด์ฃผ์ธ์.",
"estimate.detail.save.requiredSalePrice": "๋จ๊ฐ๋ 0๋ณด๋ค ํฐ๊ฐ์ ์
๋ ฅํด์ฃผ์ธ์.",
"estimate.detail.reset.confirmMsg": "์ ์ฅ๋ ๊ฒฌ์ ์ ์ ๋ณด๊ฐ ์ด๊ธฐํ๋๊ณ , ๋๋ฉด์ ๋ณด๊ฐ ๋ฐ์๋ฉ๋๋ค. ์ ๋ง๋ก ์ด๊ธฐํ ํ์๊ฒ ์ต๋๊น?",
+ "estimate.detail.alert.delFile": "์ฒจ๋ถํ์ผ์ ์์ ํ ์ญ์ ํ๋ ค๋ฉด [์ ์ฅ]๋ฒํผ์ ํด๋ฆญํ์ญ์์ค.",
+ "estimate.detail.alert.selectDelItem": "์ญ์ ํ ์ ํ์ ์ ํํ์ธ์.",
"simulator.title.sub1": "๋ฌผ๊ฑด๋ฒํธ",
"simulator.title.sub2": "์์ฑ์ผ",
"simulator.title.sub3": "์์คํ
์ฉ๋",
diff --git a/src/store/canvasAtom.js b/src/store/canvasAtom.js
index 9be9f402..b0e21d41 100644
--- a/src/store/canvasAtom.js
+++ b/src/store/canvasAtom.js
@@ -260,12 +260,6 @@ export const dotLineIntervalSelector = selector({
},
})
-// canvas plan ์ด๊ธฐ ๋ชฉ๋ก
-export const initCanvasPlansState = atom({
- key: 'initCanvasPlans',
- default: [],
-})
-
// ํ์ฌ canvas plan
export const currentCanvasPlanState = atom({
key: 'currentCanvasPlan',
diff --git a/src/store/stuffAtom.js b/src/store/stuffAtom.js
index 1608beac..06593e2b 100644
--- a/src/store/stuffAtom.js
+++ b/src/store/stuffAtom.js
@@ -1,8 +1,7 @@
import { atom } from 'recoil'
import dayjs from 'dayjs'
-import { v1 } from 'uuid'
export const stuffSearchState = atom({
- key: `stuffSearchState/${v1()}`,
+ key: `stuffSearchState`,
default: {
schObjectNo: '', //๋ฌผ๊ฑด๋ฒํธ
schAddress: '', //๋ฌผ๊ฑด์ฃผ์
diff --git a/src/styles/_contents.scss b/src/styles/_contents.scss
index 08b40e93..e2ab95b7 100644
--- a/src/styles/_contents.scss
+++ b/src/styles/_contents.scss
@@ -139,6 +139,7 @@
&.ico02{background-image: url(../../public/static/images/canvas/ico-flx02.svg);}
&.ico03{background-image: url(../../public/static/images/canvas/ico-flx03.svg);}
&.ico04{background-image: url(../../public/static/images/canvas/ico-flx04.svg);}
+ &.ico05{background-image: url(../../public/static/images/canvas/ico-flx05.svg);}
}
.name{
font-size: 12px;
@@ -720,6 +721,7 @@
&.one{
.estimate-box{
&:last-child{
+ flex: 1;
min-width: unset;
}
}
@@ -803,6 +805,7 @@
}
}
.file-list{
+ min-height: 52px;
.file-item{
margin-bottom: 15px;
span{
@@ -827,6 +830,47 @@
&:last-child{
margin-bottom: 0;
}
+ .file-item-wrap{
+ display: flex;
+ align-items: center;
+ gap: 30px;
+ .return-wrap{
+ display: flex;
+ align-items: center;
+ }
+ .return{
+ padding: 0;
+ font-size: 13px;
+ color: #B0BCCD;
+ text-decoration: line-through;
+ }
+ .return-btn{
+ flex: none;
+ position: relative;
+ top: 0;
+ left: 0;
+ transform: none;
+ display: flex;
+ align-items: center;
+ height: 24px;
+ padding: 0 9px;
+ margin-left: 10px;
+ background: none;
+ border: 1px solid #B0BCCD;
+ border-radius: 2px;
+ font-size: 12px;
+ color: #B0BCCD;
+ font-weight: 500;
+ .return-ico{
+ display: block;
+ width: 14px;
+ height: 14px;
+ background: url(../../public/static/images/canvas/return-btn.svg)no-repeat center;
+ background-size: contain;
+ margin-right: 5px;
+ }
+ }
+ }
}
}
}
@@ -877,6 +921,16 @@
&.act{
background-color: #F7F9FA;
}
+ .special-note-check-box{
+ display: flex;
+ align-items: center;
+ .check-name{
+ font-size: 13px;
+ color: #45576F;
+ cursor: pointer;
+ line-height: 1.3;
+ }
+ }
}
}
@@ -884,7 +938,7 @@
border: 1px solid #ECF0F4;
border-radius: 3px;
padding: 24px;
- max-height: 350px;
+ height: 350px;
overflow-y: auto;
margin-bottom: 30px;
dl{
diff --git a/src/styles/_modal.scss b/src/styles/_modal.scss
index b4987651..50e2a4eb 100644
--- a/src/styles/_modal.scss
+++ b/src/styles/_modal.scss
@@ -1308,23 +1308,23 @@ $alert-color: #101010;
height: 253px;
.circle{
top: 86%;
- &:nth-child(1),
- &:nth-child(7),
- &:nth-child(13),
- &:nth-child(19){
- &::before{
- content: '';
- position: absolute;
- top: 20px;
- left: 50%;
- transform: translateX(-50%);
- width: 1px;
- height: 6px;
- background-color: #8B8B8B;
- }
- }
+ // &:nth-child(1),
+ // &:nth-child(7),
+ // &:nth-child(13),
+ // &:nth-child(19){
+ // &::before{
+ // content: '';
+ // position: absolute;
+ // top: 20px;
+ // left: 50%;
+ // transform: translateX(-50%);
+ // width: 1px;
+ // height: 6px;
+ // background-color: #8B8B8B;
+ // }
+ // }
i{
- top: 32px;
+ top: 22px;
}
&.act{
i{color: #8B8B8B;}
diff --git a/src/styles/spinner.scss b/src/styles/spinner.scss
index 18993c78..b6398e94 100644
--- a/src/styles/spinner.scss
+++ b/src/styles/spinner.scss
@@ -1,109 +1,45 @@
-.spinner-wrap {
- width: 100%;
- height: 100vh;
- display: flex;
- align-items: center;
- justify-content: center;
- background-color: #fff;
- .loader {
- font-size: 10px;
- width: 1.2em;
- height: 1.2em;
- border-radius: 50%;
- position: relative;
- text-indent: -9999em;
- animation: mulShdSpin 1.1s infinite ease;
- transform: translateZ(0);
- }
- @keyframes mulShdSpin {
- 0%,
- 100% {
- box-shadow:
- 0em -2.6em 0em 0em #101010,
- 1.8em -1.8em 0 0em rgba(16, 16, 16, 0.2),
- 2.5em 0em 0 0em rgba(16, 16, 16, 0.2),
- 1.75em 1.75em 0 0em rgba(16, 16, 16, 0.2),
- 0em 2.5em 0 0em rgba(16, 16, 16, 0.2),
- -1.8em 1.8em 0 0em rgba(16, 16, 16, 0.2),
- -2.6em 0em 0 0em rgba(16, 16, 16, 0.5),
- -1.8em -1.8em 0 0em rgba(16, 16, 16, 0.7);
+.spinner-wrap{
+ width: 100%;
+ height: 100vh;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background-color: #fff;
+ .loader {
+ font-size: 10px;
+ width: 1.2em;
+ height: 1.2em;
+ border-radius: 50%;
+ position: relative;
+ text-indent: -9999em;
+ animation: mulShdSpin 1.1s infinite ease;
+ transform: translateZ(0);
}
- 12.5% {
- box-shadow:
- 0em -2.6em 0em 0em rgba(16, 16, 16, 0.7),
- 1.8em -1.8em 0 0em #101010,
- 2.5em 0em 0 0em rgba(16, 16, 16, 0.2),
- 1.75em 1.75em 0 0em rgba(16, 16, 16, 0.2),
- 0em 2.5em 0 0em rgba(16, 16, 16, 0.2),
- -1.8em 1.8em 0 0em rgba(16, 16, 16, 0.2),
- -2.6em 0em 0 0em rgba(16, 16, 16, 0.2),
- -1.8em -1.8em 0 0em rgba(16, 16, 16, 0.5);
- }
- 25% {
- box-shadow:
- 0em -2.6em 0em 0em rgba(16, 16, 16, 0.5),
- 1.8em -1.8em 0 0em rgba(16, 16, 16, 0.7),
- 2.5em 0em 0 0em #101010,
- 1.75em 1.75em 0 0em rgba(16, 16, 16, 0.2),
- 0em 2.5em 0 0em rgba(16, 16, 16, 0.2),
- -1.8em 1.8em 0 0em rgba(16, 16, 16, 0.2),
- -2.6em 0em 0 0em rgba(16, 16, 16, 0.2),
- -1.8em -1.8em 0 0em rgba(16, 16, 16, 0.2);
- }
- 37.5% {
- box-shadow:
- 0em -2.6em 0em 0em rgba(16, 16, 16, 0.2),
- 1.8em -1.8em 0 0em rgba(16, 16, 16, 0.5),
- 2.5em 0em 0 0em rgba(16, 16, 16, 0.7),
- 1.75em 1.75em 0 0em #101010,
- 0em 2.5em 0 0em rgba(16, 16, 16, 0.2),
- -1.8em 1.8em 0 0em rgba(16, 16, 16, 0.2),
- -2.6em 0em 0 0em rgba(16, 16, 16, 0.2),
- -1.8em -1.8em 0 0em rgba(16, 16, 16, 0.2);
- }
- 50% {
- box-shadow:
- 0em -2.6em 0em 0em rgba(16, 16, 16, 0.2),
- 1.8em -1.8em 0 0em rgba(16, 16, 16, 0.2),
- 2.5em 0em 0 0em rgba(16, 16, 16, 0.5),
- 1.75em 1.75em 0 0em rgba(16, 16, 16, 0.7),
- 0em 2.5em 0 0em #101010,
- -1.8em 1.8em 0 0em rgba(16, 16, 16, 0.2),
- -2.6em 0em 0 0em rgba(16, 16, 16, 0.2),
- -1.8em -1.8em 0 0em rgba(16, 16, 16, 0.2);
- }
- 62.5% {
- box-shadow:
- 0em -2.6em 0em 0em rgba(16, 16, 16, 0.2),
- 1.8em -1.8em 0 0em rgba(16, 16, 16, 0.2),
- 2.5em 0em 0 0em rgba(16, 16, 16, 0.2),
- 1.75em 1.75em 0 0em rgba(16, 16, 16, 0.5),
- 0em 2.5em 0 0em rgba(16, 16, 16, 0.7),
- -1.8em 1.8em 0 0em #101010,
- -2.6em 0em 0 0em rgba(16, 16, 16, 0.2),
- -1.8em -1.8em 0 0em rgba(16, 16, 16, 0.2);
- }
- 75% {
- box-shadow:
- 0em -2.6em 0em 0em rgba(16, 16, 16, 0.2),
- 1.8em -1.8em 0 0em rgba(16, 16, 16, 0.2),
- 2.5em 0em 0 0em rgba(16, 16, 16, 0.2),
- 1.75em 1.75em 0 0em rgba(16, 16, 16, 0.2),
- 0em 2.5em 0 0em rgba(16, 16, 16, 0.5),
- -1.8em 1.8em 0 0em rgba(16, 16, 16, 0.7),
- -2.6em 0em 0 0em #101010,
- -1.8em -1.8em 0 0em rgba(16, 16, 16, 0.2);
- }
- 87.5% {
- box-shadow:
- 0em -2.6em 0em 0em rgba(16, 16, 16, 0.2),
- 1.8em -1.8em 0 0em rgba(16, 16, 16, 0.2),
- 2.5em 0em 0 0em rgba(16, 16, 16, 0.2),
- 1.75em 1.75em 0 0em rgba(16, 16, 16, 0.2),
- 0em 2.5em 0 0em rgba(16, 16, 16, 0.2),
- -1.8em 1.8em 0 0em rgba(16, 16, 16, 0.5),
- -2.6em 0em 0 0em rgba(16, 16, 16, 0.7),
- -1.8em -1.8em 0 0em #101010;
- }
- }
-}
+ @keyframes mulShdSpin {
+ 0%,
+ 100% {
+ box-shadow: 0em -2.6em 0em 0em #101010, 1.8em -1.8em 0 0em rgba(16, 16, 16, 0.2), 2.5em 0em 0 0em rgba(16, 16, 16, 0.2), 1.75em 1.75em 0 0em rgba(16, 16, 16, 0.2), 0em 2.5em 0 0em rgba(16, 16, 16, 0.2), -1.8em 1.8em 0 0em rgba(16, 16, 16, 0.2), -2.6em 0em 0 0em rgba(16, 16, 16, 0.5), -1.8em -1.8em 0 0em rgba(16, 16, 16, 0.7);
+ }
+ 12.5% {
+ box-shadow: 0em -2.6em 0em 0em rgba(16, 16, 16, 0.7), 1.8em -1.8em 0 0em #101010, 2.5em 0em 0 0em rgba(16, 16, 16, 0.2), 1.75em 1.75em 0 0em rgba(16, 16, 16, 0.2), 0em 2.5em 0 0em rgba(16, 16, 16, 0.2), -1.8em 1.8em 0 0em rgba(16, 16, 16, 0.2), -2.6em 0em 0 0em rgba(16, 16, 16, 0.2), -1.8em -1.8em 0 0em rgba(16, 16, 16, 0.5);
+ }
+ 25% {
+ box-shadow: 0em -2.6em 0em 0em rgba(16, 16, 16, 0.5), 1.8em -1.8em 0 0em rgba(16, 16, 16, 0.7), 2.5em 0em 0 0em #101010, 1.75em 1.75em 0 0em rgba(16, 16, 16, 0.2), 0em 2.5em 0 0em rgba(16, 16, 16, 0.2), -1.8em 1.8em 0 0em rgba(16, 16, 16, 0.2), -2.6em 0em 0 0em rgba(16, 16, 16, 0.2), -1.8em -1.8em 0 0em rgba(16, 16, 16, 0.2);
+ }
+ 37.5% {
+ box-shadow: 0em -2.6em 0em 0em rgba(16, 16, 16, 0.2), 1.8em -1.8em 0 0em rgba(16, 16, 16, 0.5), 2.5em 0em 0 0em rgba(16, 16, 16, 0.7), 1.75em 1.75em 0 0em #101010, 0em 2.5em 0 0em rgba(16, 16, 16, 0.2), -1.8em 1.8em 0 0em rgba(16, 16, 16, 0.2), -2.6em 0em 0 0em rgba(16, 16, 16, 0.2), -1.8em -1.8em 0 0em rgba(16, 16, 16, 0.2);
+ }
+ 50% {
+ box-shadow: 0em -2.6em 0em 0em rgba(16, 16, 16, 0.2), 1.8em -1.8em 0 0em rgba(16, 16, 16, 0.2), 2.5em 0em 0 0em rgba(16, 16, 16, 0.5), 1.75em 1.75em 0 0em rgba(16, 16, 16, 0.7), 0em 2.5em 0 0em #101010, -1.8em 1.8em 0 0em rgba(16, 16, 16, 0.2), -2.6em 0em 0 0em rgba(16, 16, 16, 0.2), -1.8em -1.8em 0 0em rgba(16, 16, 16, 0.2);
+ }
+ 62.5% {
+ box-shadow: 0em -2.6em 0em 0em rgba(16, 16, 16, 0.2), 1.8em -1.8em 0 0em rgba(16, 16, 16, 0.2), 2.5em 0em 0 0em rgba(16, 16, 16, 0.2), 1.75em 1.75em 0 0em rgba(16, 16, 16, 0.5), 0em 2.5em 0 0em rgba(16, 16, 16, 0.7), -1.8em 1.8em 0 0em #101010, -2.6em 0em 0 0em rgba(16, 16, 16, 0.2), -1.8em -1.8em 0 0em rgba(16, 16, 16, 0.2);
+ }
+ 75% {
+ box-shadow: 0em -2.6em 0em 0em rgba(16, 16, 16, 0.2), 1.8em -1.8em 0 0em rgba(16, 16, 16, 0.2), 2.5em 0em 0 0em rgba(16, 16, 16, 0.2), 1.75em 1.75em 0 0em rgba(16, 16, 16, 0.2), 0em 2.5em 0 0em rgba(16, 16, 16, 0.5), -1.8em 1.8em 0 0em rgba(16, 16, 16, 0.7), -2.6em 0em 0 0em #101010, -1.8em -1.8em 0 0em rgba(16, 16, 16, 0.2);
+ }
+ 87.5% {
+ box-shadow: 0em -2.6em 0em 0em rgba(16, 16, 16, 0.2), 1.8em -1.8em 0 0em rgba(16, 16, 16, 0.2), 2.5em 0em 0 0em rgba(16, 16, 16, 0.2), 1.75em 1.75em 0 0em rgba(16, 16, 16, 0.2), 0em 2.5em 0 0em rgba(16, 16, 16, 0.2), -1.8em 1.8em 0 0em rgba(16, 16, 16, 0.5), -2.6em 0em 0 0em rgba(16, 16, 16, 0.7), -1.8em -1.8em 0 0em #101010;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/util/canvas-util.js b/src/util/canvas-util.js
index 65c46b74..b27f91db 100644
--- a/src/util/canvas-util.js
+++ b/src/util/canvas-util.js
@@ -824,6 +824,8 @@ export function setSurfaceShapePattern(polygon, mode = 'onlyBorder', trestleMode
ctx.strokeStyle = 'black'
ctx.lineWidth = 0.2
ctx.fillStyle = 'rgba(0, 0, 0, 0.1)'
+ } else {
+ ctx.fillStyle = 'rgba(255, 255, 255, 1)'
}
if (polygon.direction === 'east' || polygon.direction === 'west') {
diff --git a/src/util/common-utils.js b/src/util/common-utils.js
index 5a7ebde4..06b96b60 100644
--- a/src/util/common-utils.js
+++ b/src/util/common-utils.js
@@ -93,3 +93,27 @@ export const inputNumberCheck = (e) => {
input.value = input.value.replace(/[^\d]/g, '')
}
}
+
+/**
+ * ํ์ดํํจ์ ์ ์
+ * @param {...any} fns ์์ํจ์๋ค
+ * @returns
+ */
+export const pipe =
+ (...fns) =>
+ (x) =>
+ fns.reduce((v, f) => f(v), x)
+
+/**
+ * ์บ๋ฒ์ค ๊ฐ๋์ ๋ฐ๋ฅธ ํ๋ฆ ๋ฐฉํฅ ๊ณ์ฐ
+ * @param {number} canvasAngle
+ * @returns {object} ํ๋ฆ ๋ฐฉํฅ ๊ฐ์ฒด
+ */
+export const calculateFlowDirection = (canvasAngle) => {
+ return {
+ down: -canvasAngle,
+ up: 180 - canvasAngle,
+ left: 90 - canvasAngle < 180 ? 90 - canvasAngle : 90 - canvasAngle - 360,
+ right: -90 - canvasAngle < -180 ? -90 - canvasAngle + 360 : -90 - canvasAngle,
+ }
+}
diff --git a/yarn.lock b/yarn.lock
index 1a4d340d..6dd98dd3 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -223,7 +223,14 @@
dependencies:
regenerator-runtime "^0.14.0"
-"@babel/runtime@^7.20.13", "@babel/runtime@^7.24.8":
+"@babel/runtime@^7.20.13":
+ version "7.25.0"
+ resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz"
+ integrity sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==
+ dependencies:
+ regenerator-runtime "^0.14.0"
+
+"@babel/runtime@^7.24.8":
version "7.25.0"
resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz"
integrity sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==
@@ -532,21 +539,6 @@
resolved "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz"
integrity sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==
-"@mapbox/node-pre-gyp@^1.0.0":
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa"
- integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==
- dependencies:
- detect-libc "^2.0.0"
- https-proxy-agent "^5.0.0"
- make-dir "^3.1.0"
- node-fetch "^2.6.7"
- nopt "^5.0.0"
- npmlog "^5.0.1"
- rimraf "^3.0.2"
- semver "^7.3.5"
- tar "^6.1.11"
-
"@next/env@14.2.14":
version "14.2.14"
resolved "https://registry.npmjs.org/@next/env/-/env-14.2.14.tgz"
@@ -1251,7 +1243,7 @@
"@react-types/shared" "3.23.1"
clsx "^1.2.1"
-"@nextui-org/system@2.2.5":
+"@nextui-org/system@>=2.0.0", "@nextui-org/system@>=2.1.0", "@nextui-org/system@2.2.5":
version "2.2.5"
resolved "https://registry.npmjs.org/@nextui-org/system/-/system-2.2.5.tgz"
integrity sha512-nrX6768aiyWtpxX3OTFBIVWR+v9nlMsC3KaBinNfek97sNm7gAfTHi7q5kylE3L5yIMpNG+DclAKpuxgDQEmvw==
@@ -1304,7 +1296,7 @@
"@react-types/tabs" "3.3.7"
scroll-into-view-if-needed "3.0.10"
-"@nextui-org/theme@2.2.9":
+"@nextui-org/theme@>=2.1.0", "@nextui-org/theme@>=2.2.0", "@nextui-org/theme@2.2.9":
version "2.2.9"
resolved "https://registry.npmjs.org/@nextui-org/theme/-/theme-2.2.9.tgz"
integrity sha512-TN2I9sMriLaj00pXsIMlg19+UHeOdjzS2JV0u4gjL14mSbQl5BYNxgbvU3gbMqkZZQ6OpwT4RnT8RS+ks6TXCw==
@@ -1525,7 +1517,7 @@
"@nodelib/fs.stat" "2.0.5"
run-parallel "^1.1.9"
-"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
version "2.0.5"
resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
@@ -1658,7 +1650,7 @@
"@react-types/shared" "^3.23.1"
"@swc/helpers" "^0.5.0"
-"@react-aria/focus@3.17.1", "@react-aria/focus@^3.17.1":
+"@react-aria/focus@^3.17.1", "@react-aria/focus@3.17.1":
version "3.17.1"
resolved "https://registry.npmjs.org/@react-aria/focus/-/focus-3.17.1.tgz"
integrity sha512-FLTySoSNqX++u0nWZJPPN5etXY0WBxaIe/YuL/GTEeuqUIuC/2bJSaw5hlsM6T2yjy6Y/VAxBcKSdAFUlU6njQ==
@@ -1680,7 +1672,7 @@
"@swc/helpers" "^0.5.0"
clsx "^2.0.0"
-"@react-aria/form@3.0.5", "@react-aria/form@^3.0.5":
+"@react-aria/form@^3.0.5", "@react-aria/form@3.0.5":
version "3.0.5"
resolved "https://registry.npmjs.org/@react-aria/form/-/form-3.0.5.tgz"
integrity sha512-n290jRwrrRXO3fS82MyWR+OKN7yznVesy5Q10IclSTVYHHI3VI53xtAPr/WzNjJR1um8aLhOcDNFKwnNIUUCsQ==
@@ -1710,7 +1702,7 @@
"@react-types/shared" "^3.24.1"
"@swc/helpers" "^0.5.0"
-"@react-aria/i18n@3.11.1", "@react-aria/i18n@^3.11.1":
+"@react-aria/i18n@^3.11.1", "@react-aria/i18n@3.11.1":
version "3.11.1"
resolved "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.11.1.tgz"
integrity sha512-vuiBHw1kZruNMYeKkTGGnmPyMnM5T+gT8bz97H1FqIq1hQ6OPzmtBZ6W6l6OIMjeHI5oJo4utTwfZl495GALFQ==
@@ -1738,7 +1730,7 @@
"@react-types/shared" "^3.24.1"
"@swc/helpers" "^0.5.0"
-"@react-aria/interactions@3.21.3", "@react-aria/interactions@^3.21.3":
+"@react-aria/interactions@^3.21.3", "@react-aria/interactions@3.21.3":
version "3.21.3"
resolved "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.21.3.tgz"
integrity sha512-BWIuf4qCs5FreDJ9AguawLVS0lV9UU+sK4CCnbCNNmYqOWY+1+gRXCsnOM32K+oMESBxilAjdHW5n1hsMqYMpA==
@@ -1758,7 +1750,7 @@
"@react-types/shared" "^3.24.1"
"@swc/helpers" "^0.5.0"
-"@react-aria/label@3.7.8", "@react-aria/label@^3.7.8":
+"@react-aria/label@^3.7.8", "@react-aria/label@3.7.8":
version "3.7.8"
resolved "https://registry.npmjs.org/@react-aria/label/-/label-3.7.8.tgz"
integrity sha512-MzgTm5+suPA3KX7Ug6ZBK2NX9cin/RFLsv1BdafJ6CZpmUSpWnGE/yQfYUB7csN7j31OsZrD3/P56eShYWAQfg==
@@ -1767,7 +1759,7 @@
"@react-types/shared" "^3.23.1"
"@swc/helpers" "^0.5.0"
-"@react-aria/link@3.7.1", "@react-aria/link@^3.7.1":
+"@react-aria/link@^3.7.1", "@react-aria/link@3.7.1":
version "3.7.1"
resolved "https://registry.npmjs.org/@react-aria/link/-/link-3.7.1.tgz"
integrity sha512-a4IaV50P3fXc7DQvEIPYkJJv26JknFbRzFT5MJOMgtzuhyJoQdILEUK6XHYjcSSNCA7uLgzpojArVk5Hz3lCpw==
@@ -1779,7 +1771,7 @@
"@react-types/shared" "^3.23.1"
"@swc/helpers" "^0.5.0"
-"@react-aria/listbox@3.12.1", "@react-aria/listbox@^3.12.1":
+"@react-aria/listbox@^3.12.1", "@react-aria/listbox@3.12.1":
version "3.12.1"
resolved "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.12.1.tgz"
integrity sha512-7JiUp0NGykbv/HgSpmTY1wqhuf/RmjFxs1HZcNaTv8A+DlzgJYc7yQqFjP3ZA/z5RvJFuuIxggIYmgIFjaRYdA==
@@ -1801,7 +1793,7 @@
dependencies:
"@swc/helpers" "^0.5.0"
-"@react-aria/menu@3.14.1", "@react-aria/menu@^3.14.1":
+"@react-aria/menu@^3.14.1", "@react-aria/menu@3.14.1":
version "3.14.1"
resolved "https://registry.npmjs.org/@react-aria/menu/-/menu-3.14.1.tgz"
integrity sha512-BYliRb38uAzq05UOFcD5XkjA5foQoXRbcH3ZufBsc4kvh79BcP1PMW6KsXKGJ7dC/PJWUwCui6QL1kUg8PqMHA==
@@ -1820,7 +1812,7 @@
"@react-types/shared" "^3.23.1"
"@swc/helpers" "^0.5.0"
-"@react-aria/overlays@3.22.1", "@react-aria/overlays@^3.22.1":
+"@react-aria/overlays@^3.22.1", "@react-aria/overlays@3.22.1":
version "3.22.1"
resolved "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.22.1.tgz"
integrity sha512-GHiFMWO4EQ6+j6b5QCnNoOYiyx1Gk8ZiwLzzglCI4q1NY5AG2EAmfU4Z1+Gtrf2S5Y0zHbumC7rs9GnPoGLUYg==
@@ -1865,7 +1857,7 @@
"@react-types/shared" "^3.23.1"
"@swc/helpers" "^0.5.0"
-"@react-aria/selection@3.18.1", "@react-aria/selection@^3.18.1":
+"@react-aria/selection@^3.18.1", "@react-aria/selection@3.18.1":
version "3.18.1"
resolved "https://registry.npmjs.org/@react-aria/selection/-/selection-3.18.1.tgz"
integrity sha512-GSqN2jX6lh7v+ldqhVjAXDcrWS3N4IsKXxO6L6Ygsye86Q9q9Mq9twWDWWu5IjHD6LoVZLUBCMO+ENGbOkyqeQ==
@@ -1918,7 +1910,7 @@
"@react-types/shared" "^3.24.1"
"@swc/helpers" "^0.5.0"
-"@react-aria/ssr@3.9.4", "@react-aria/ssr@^3.9.4":
+"@react-aria/ssr@^3.9.4", "@react-aria/ssr@3.9.4":
version "3.9.4"
resolved "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.4.tgz"
integrity sha512-4jmAigVq409qcJvQyuorsmBR4+9r3+JEC60wC+Y0MZV0HCtTmm8D9guYXlJMdx0SSkgj0hHAyFm/HvPNFofCoQ==
@@ -1978,7 +1970,7 @@
"@react-types/tabs" "^3.3.7"
"@swc/helpers" "^0.5.0"
-"@react-aria/textfield@3.14.5", "@react-aria/textfield@^3.14.5":
+"@react-aria/textfield@^3.14.5", "@react-aria/textfield@3.14.5":
version "3.14.5"
resolved "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.14.5.tgz"
integrity sha512-hj7H+66BjB1iTKKaFXwSZBZg88YT+wZboEXZ0DNdQB2ytzoz/g045wBItUuNi4ZjXI3P+0AOZznVMYadWBAmiA==
@@ -2019,7 +2011,7 @@
"@react-types/tooltip" "^3.4.9"
"@swc/helpers" "^0.5.0"
-"@react-aria/utils@3.24.1", "@react-aria/utils@^3.24.1":
+"@react-aria/utils@^3.24.1", "@react-aria/utils@3.24.1":
version "3.24.1"
resolved "https://registry.npmjs.org/@react-aria/utils/-/utils-3.24.1.tgz"
integrity sha512-O3s9qhPMd6n42x9sKeJ3lhu5V1Tlnzhu6Yk8QOvDuXf7UGuUjXf9mzfHJt1dYzID4l9Fwm8toczBzPM9t0jc8Q==
@@ -2041,7 +2033,7 @@
"@swc/helpers" "^0.5.0"
clsx "^2.0.0"
-"@react-aria/visually-hidden@3.8.12", "@react-aria/visually-hidden@^3.8.12":
+"@react-aria/visually-hidden@^3.8.12", "@react-aria/visually-hidden@3.8.12":
version "3.8.12"
resolved "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.8.12.tgz"
integrity sha512-Bawm+2Cmw3Xrlr7ARzl2RLtKh0lNUdJ0eNqzWcyx4c0VHUAWtThmH5l+HRqFUGzzutFZVo89SAy40BAbd0gjVw==
@@ -2051,7 +2043,7 @@
"@react-types/shared" "^3.23.1"
"@swc/helpers" "^0.5.0"
-"@react-stately/calendar@3.5.1", "@react-stately/calendar@^3.5.1":
+"@react-stately/calendar@^3.5.1", "@react-stately/calendar@3.5.1":
version "3.5.1"
resolved "https://registry.npmjs.org/@react-stately/calendar/-/calendar-3.5.1.tgz"
integrity sha512-7l7QhqGUJ5AzWHfvZzbTe3J4t72Ht5BmhW4hlVI7flQXtfrmYkVtl3ZdytEZkkHmWGYZRW9b4IQTQGZxhtlElA==
@@ -2062,7 +2054,7 @@
"@react-types/shared" "^3.23.1"
"@swc/helpers" "^0.5.0"
-"@react-stately/checkbox@3.6.5", "@react-stately/checkbox@^3.6.5":
+"@react-stately/checkbox@^3.6.5", "@react-stately/checkbox@3.6.5":
version "3.6.5"
resolved "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.6.5.tgz"
integrity sha512-IXV3f9k+LtmfQLE+DKIN41Q5QB/YBLDCB1YVx5PEdRp52S9+EACD5683rjVm8NVRDwjMi2SP6RnFRk7fVb5Azg==
@@ -2073,7 +2065,7 @@
"@react-types/shared" "^3.23.1"
"@swc/helpers" "^0.5.0"
-"@react-stately/collections@3.10.7", "@react-stately/collections@^3.10.7":
+"@react-stately/collections@^3.10.7", "@react-stately/collections@3.10.7":
version "3.10.7"
resolved "https://registry.npmjs.org/@react-stately/collections/-/collections-3.10.7.tgz"
integrity sha512-KRo5O2MWVL8n3aiqb+XR3vP6akmHLhLWYZEmPKjIv0ghQaEebBTrN3wiEjtd6dzllv0QqcWvDLM1LntNfJ2TsA==
@@ -2089,7 +2081,7 @@
"@react-types/shared" "^3.24.1"
"@swc/helpers" "^0.5.0"
-"@react-stately/combobox@3.8.4", "@react-stately/combobox@^3.8.4":
+"@react-stately/combobox@^3.8.4", "@react-stately/combobox@3.8.4":
version "3.8.4"
resolved "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.8.4.tgz"
integrity sha512-iLVGvKRRz0TeJXZhZyK783hveHpYA6xovOSdzSD+WGYpiPXo1QrcrNoH3AE0Z2sHtorU+8nc0j58vh5PB+m2AA==
@@ -2104,7 +2096,7 @@
"@react-types/shared" "^3.23.1"
"@swc/helpers" "^0.5.0"
-"@react-stately/datepicker@3.9.4", "@react-stately/datepicker@^3.9.4":
+"@react-stately/datepicker@^3.9.4", "@react-stately/datepicker@3.9.4":
version "3.9.4"
resolved "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.9.4.tgz"
integrity sha512-yBdX01jn6gq4NIVvHIqdjBUPo+WN8Bujc4OnPw+ZnfA4jI0eIgq04pfZ84cp1LVXW0IB0VaCu1AlQ/kvtZjfGA==
@@ -2125,7 +2117,7 @@
dependencies:
"@swc/helpers" "^0.5.0"
-"@react-stately/form@3.0.3", "@react-stately/form@^3.0.3":
+"@react-stately/form@^3.0.3", "@react-stately/form@3.0.3":
version "3.0.3"
resolved "https://registry.npmjs.org/@react-stately/form/-/form-3.0.3.tgz"
integrity sha512-92YYBvlHEWUGUpXgIaQ48J50jU9XrxfjYIN8BTvvhBHdD63oWgm8DzQnyT/NIAMzdLnhkg7vP+fjG8LjHeyIAg==
@@ -2152,7 +2144,7 @@
"@react-types/shared" "^3.24.1"
"@swc/helpers" "^0.5.0"
-"@react-stately/list@3.10.5", "@react-stately/list@^3.10.5":
+"@react-stately/list@^3.10.5", "@react-stately/list@3.10.5":
version "3.10.5"
resolved "https://registry.npmjs.org/@react-stately/list/-/list-3.10.5.tgz"
integrity sha512-fV9plO+6QDHiewsYIhboxcDhF17GO95xepC5ki0bKXo44gr14g/LSo/BMmsaMnV+1BuGdBunB05bO4QOIaigXA==
@@ -2174,7 +2166,7 @@
"@react-types/shared" "^3.24.1"
"@swc/helpers" "^0.5.0"
-"@react-stately/menu@3.7.1", "@react-stately/menu@^3.7.1":
+"@react-stately/menu@^3.7.1", "@react-stately/menu@3.7.1":
version "3.7.1"
resolved "https://registry.npmjs.org/@react-stately/menu/-/menu-3.7.1.tgz"
integrity sha512-mX1w9HHzt+xal1WIT2xGrTQsoLvDwuB2R1Er1MBABs//MsJzccycatcgV/J/28m6tO5M9iuFQQvLV+i1dCtodg==
@@ -2184,7 +2176,7 @@
"@react-types/shared" "^3.23.1"
"@swc/helpers" "^0.5.0"
-"@react-stately/overlays@3.6.7", "@react-stately/overlays@^3.6.7":
+"@react-stately/overlays@^3.6.7", "@react-stately/overlays@3.6.7":
version "3.6.7"
resolved "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.6.7.tgz"
integrity sha512-6zp8v/iNUm6YQap0loaFx6PlvN8C0DgWHNlrlzMtMmNuvjhjR0wYXVaTfNoUZBWj25tlDM81ukXOjpRXg9rLrw==
@@ -2202,7 +2194,7 @@
"@react-types/overlays" "^3.8.9"
"@swc/helpers" "^0.5.0"
-"@react-stately/radio@3.10.4", "@react-stately/radio@^3.10.4":
+"@react-stately/radio@^3.10.4", "@react-stately/radio@3.10.4":
version "3.10.4"
resolved "https://registry.npmjs.org/@react-stately/radio/-/radio-3.10.4.tgz"
integrity sha512-kCIc7tAl4L7Hu4Wt9l2jaa+MzYmAJm0qmC8G8yPMbExpWbLRu6J8Un80GZu+JxvzgDlqDyrVvyv9zFifwH/NkQ==
@@ -2235,7 +2227,7 @@
"@react-types/shared" "^3.24.1"
"@swc/helpers" "^0.5.0"
-"@react-stately/slider@3.5.4", "@react-stately/slider@^3.5.4":
+"@react-stately/slider@^3.5.4", "@react-stately/slider@3.5.4":
version "3.5.4"
resolved "https://registry.npmjs.org/@react-stately/slider/-/slider-3.5.4.tgz"
integrity sha512-Jsf7K17dr93lkNKL9ij8HUcoM1sPbq8TvmibD6DhrK9If2lje+OOL8y4n4qreUnfMT56HCAeS9wCO3fg3eMyrw==
@@ -2245,7 +2237,7 @@
"@react-types/slider" "^3.7.3"
"@swc/helpers" "^0.5.0"
-"@react-stately/table@3.11.8", "@react-stately/table@^3.11.8":
+"@react-stately/table@^3.11.8", "@react-stately/table@3.11.8":
version "3.11.8"
resolved "https://registry.npmjs.org/@react-stately/table/-/table-3.11.8.tgz"
integrity sha512-EdyRW3lT1/kAVDp5FkEIi1BQ7tvmD2YgniGdLuW/l9LADo0T+oxZqruv60qpUS6sQap+59Riaxl91ClDxrJnpg==
@@ -2260,7 +2252,7 @@
"@react-types/table" "^3.9.5"
"@swc/helpers" "^0.5.0"
-"@react-stately/tabs@3.6.6", "@react-stately/tabs@^3.6.6":
+"@react-stately/tabs@^3.6.6", "@react-stately/tabs@3.6.6":
version "3.6.6"
resolved "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.6.6.tgz"
integrity sha512-sOLxorH2uqjAA+v1ppkMCc2YyjgqvSGeBDgtR/lyPSDd4CVMoTExszROX2dqG0c8il9RQvzFuufUtQWMY6PgSA==
@@ -2270,7 +2262,7 @@
"@react-types/tabs" "^3.3.7"
"@swc/helpers" "^0.5.0"
-"@react-stately/toggle@3.7.4", "@react-stately/toggle@^3.7.4":
+"@react-stately/toggle@^3.7.4", "@react-stately/toggle@3.7.4":
version "3.7.4"
resolved "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.7.4.tgz"
integrity sha512-CoYFe9WrhLkDP4HGDpJYQKwfiYCRBAeoBQHv+JWl5eyK61S8xSwoHsveYuEZ3bowx71zyCnNAqWRrmNOxJ4CKA==
@@ -2288,7 +2280,7 @@
"@react-types/checkbox" "^3.8.3"
"@swc/helpers" "^0.5.0"
-"@react-stately/tooltip@3.4.9", "@react-stately/tooltip@^3.4.9":
+"@react-stately/tooltip@^3.4.9", "@react-stately/tooltip@3.4.9":
version "3.4.9"
resolved "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.4.9.tgz"
integrity sha512-P7CDJsdoKarz32qFwf3VNS01lyC+63gXpDZG31pUu+EO5BeQd4WKN/AH1Beuswpr4GWzxzFc1aXQgERFGVzraA==
@@ -2297,7 +2289,7 @@
"@react-types/tooltip" "^3.4.9"
"@swc/helpers" "^0.5.0"
-"@react-stately/tree@3.8.1", "@react-stately/tree@^3.8.1":
+"@react-stately/tree@^3.8.1", "@react-stately/tree@3.8.1":
version "3.8.1"
resolved "https://registry.npmjs.org/@react-stately/tree/-/tree-3.8.1.tgz"
integrity sha512-LOdkkruJWch3W89h4B/bXhfr0t0t1aRfEp+IMrrwdRAl23NaPqwl5ILHs4Xu5XDHqqhg8co73pHrJwUyiTWEjw==
@@ -2308,7 +2300,7 @@
"@react-types/shared" "^3.23.1"
"@swc/helpers" "^0.5.0"
-"@react-stately/utils@3.10.1", "@react-stately/utils@^3.10.1":
+"@react-stately/utils@^3.10.1", "@react-stately/utils@3.10.1":
version "3.10.1"
resolved "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.1.tgz"
integrity sha512-VS/EHRyicef25zDZcM/ClpzYMC5i2YGN6uegOeQawmgfGjb02yaCX0F0zR69Pod9m2Hr3wunTbtpgVXvYbZItg==
@@ -2322,7 +2314,7 @@
dependencies:
"@swc/helpers" "^0.5.0"
-"@react-stately/virtualizer@3.7.1", "@react-stately/virtualizer@^3.7.1":
+"@react-stately/virtualizer@^3.7.1", "@react-stately/virtualizer@3.7.1":
version "3.7.1"
resolved "https://registry.npmjs.org/@react-stately/virtualizer/-/virtualizer-3.7.1.tgz"
integrity sha512-voHgE6EQ+oZaLv6u2umKxakvIKNkCQuUihqKACTjdslp7SJh4Mvs3oLBI0hf0JOh+rCcFIKDvQtFwy1fXFRYBA==
@@ -2338,7 +2330,7 @@
dependencies:
"@react-types/shared" "^3.23.1"
-"@react-types/breadcrumbs@3.7.5", "@react-types/breadcrumbs@^3.7.5":
+"@react-types/breadcrumbs@^3.7.5", "@react-types/breadcrumbs@3.7.5":
version "3.7.5"
resolved "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.7.5.tgz"
integrity sha512-lV9IDYsMiu2TgdMIjEmsOE0YWwjb3jhUNK1DCZZfq6uWuiHLgyx2EncazJBUWSjHJ4ta32j7xTuXch+8Ai6u/A==
@@ -2346,7 +2338,7 @@
"@react-types/link" "^3.5.5"
"@react-types/shared" "^3.23.1"
-"@react-types/button@3.9.4", "@react-types/button@^3.9.4":
+"@react-types/button@^3.9.4", "@react-types/button@3.9.4":
version "3.9.4"
resolved "https://registry.npmjs.org/@react-types/button/-/button-3.9.4.tgz"
integrity sha512-raeQBJUxBp0axNF74TXB8/H50GY8Q3eV6cEKMbZFP1+Dzr09Ngv0tJBeW0ewAxAguNH5DRoMUAUGIXtSXskVdA==
@@ -2360,7 +2352,7 @@
dependencies:
"@react-types/shared" "^3.24.1"
-"@react-types/calendar@3.4.6", "@react-types/calendar@^3.4.6":
+"@react-types/calendar@^3.4.6", "@react-types/calendar@3.4.6":
version "3.4.6"
resolved "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.4.6.tgz"
integrity sha512-WSntZPwtvsIYWvBQRAPvuCn55UTJBZroTvX0vQvWykJRQnPAI20G1hMQ3dNsnAL+gLZUYxBXn66vphmjUuSYew==
@@ -2368,7 +2360,7 @@
"@internationalized/date" "^3.5.4"
"@react-types/shared" "^3.23.1"
-"@react-types/checkbox@3.8.1", "@react-types/checkbox@^3.8.1":
+"@react-types/checkbox@^3.8.1", "@react-types/checkbox@3.8.1":
version "3.8.1"
resolved "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.8.1.tgz"
integrity sha512-5/oVByPw4MbR/8QSdHCaalmyWC71H/QGgd4aduTJSaNi825o+v/hsN2/CH7Fq9atkLKsC8fvKD00Bj2VGaKriQ==
@@ -2382,14 +2374,14 @@
dependencies:
"@react-types/shared" "^3.24.1"
-"@react-types/combobox@3.11.1", "@react-types/combobox@^3.11.1":
+"@react-types/combobox@^3.11.1", "@react-types/combobox@3.11.1":
version "3.11.1"
resolved "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.11.1.tgz"
integrity sha512-UNc3OHt5cUt5gCTHqhQIqhaWwKCpaNciD8R7eQazmHiA9fq8ROlV+7l3gdNgdhJbTf5Bu/V5ISnN7Y1xwL3zqQ==
dependencies:
"@react-types/shared" "^3.23.1"
-"@react-types/datepicker@3.7.4", "@react-types/datepicker@^3.7.4":
+"@react-types/datepicker@^3.7.4", "@react-types/datepicker@3.7.4":
version "3.7.4"
resolved "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.7.4.tgz"
integrity sha512-ZfvgscvNzBJpYyVWg3nstJtA/VlWLwErwSkd1ivZYam859N30w8yH+4qoYLa6FzWLCFlrsRHyvtxlEM7lUAt5A==
@@ -2407,7 +2399,7 @@
"@react-types/overlays" "^3.8.9"
"@react-types/shared" "^3.24.1"
-"@react-types/grid@3.2.6", "@react-types/grid@^3.2.6":
+"@react-types/grid@^3.2.6", "@react-types/grid@3.2.6":
version "3.2.6"
resolved "https://registry.npmjs.org/@react-types/grid/-/grid-3.2.6.tgz"
integrity sha512-XfHenL2jEBUYrhKiPdeM24mbLRXUn79wVzzMhrNYh24nBwhsPPpxF+gjFddT3Cy8dt6tRInfT6pMEu9nsXwaHw==
@@ -2421,7 +2413,7 @@
dependencies:
"@react-types/shared" "^3.24.1"
-"@react-types/link@3.5.5", "@react-types/link@^3.5.5":
+"@react-types/link@^3.5.5", "@react-types/link@3.5.5":
version "3.5.5"
resolved "https://registry.npmjs.org/@react-types/link/-/link-3.5.5.tgz"
integrity sha512-G6P5WagHDR87npN7sEuC5IIgL1GsoY4WFWKO4734i2CXRYx24G9P0Su3AX4GA3qpspz8sK1AWkaCzBMmvnunfw==
@@ -2435,7 +2427,7 @@
dependencies:
"@react-types/shared" "^3.24.1"
-"@react-types/menu@3.9.9", "@react-types/menu@^3.9.9":
+"@react-types/menu@^3.9.9", "@react-types/menu@3.9.9":
version "3.9.9"
resolved "https://registry.npmjs.org/@react-types/menu/-/menu-3.9.9.tgz"
integrity sha512-FamUaPVs1Fxr4KOMI0YcR2rYZHoN7ypGtgiEiJ11v/tEPjPPGgeKDxii0McCrdOkjheatLN1yd2jmMwYj6hTDg==
@@ -2443,7 +2435,7 @@
"@react-types/overlays" "^3.8.7"
"@react-types/shared" "^3.23.1"
-"@react-types/overlays@3.8.7", "@react-types/overlays@^3.8.7":
+"@react-types/overlays@^3.8.7", "@react-types/overlays@3.8.7":
version "3.8.7"
resolved "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.8.7.tgz"
integrity sha512-zCOYvI4at2DkhVpviIClJ7bRrLXYhSg3Z3v9xymuPH3mkiuuP/dm8mUCtkyY4UhVeUTHmrQh1bzaOP00A+SSQA==
@@ -2457,27 +2449,20 @@
dependencies:
"@react-types/shared" "^3.24.1"
-"@react-types/progress@3.5.4", "@react-types/progress@^3.5.4":
+"@react-types/progress@^3.5.4", "@react-types/progress@3.5.4":
version "3.5.4"
resolved "https://registry.npmjs.org/@react-types/progress/-/progress-3.5.4.tgz"
integrity sha512-JNc246sTjasPyx5Dp7/s0rp3Bz4qlu4LrZTulZlxWyb53WgBNL7axc26CCi+I20rWL9+c7JjhrRxnLl/1cLN5g==
dependencies:
"@react-types/shared" "^3.23.1"
-"@react-types/radio@3.8.1", "@react-types/radio@^3.8.1":
+"@react-types/radio@^3.8.1", "@react-types/radio@3.8.1":
version "3.8.1"
resolved "https://registry.npmjs.org/@react-types/radio/-/radio-3.8.1.tgz"
integrity sha512-bK0gio/qj1+0Ldu/3k/s9BaOZvnnRgvFtL3u5ky479+aLG5qf1CmYed3SKz8ErZ70JkpuCSrSwSCFf0t1IHovw==
dependencies:
"@react-types/shared" "^3.23.1"
-"@react-types/select@3.9.4":
- version "3.9.4"
- resolved "https://registry.npmjs.org/@react-types/select/-/select-3.9.4.tgz"
- integrity sha512-xI7dnOW2st91fPPcv6hdtrTdcfetYiqZuuVPZ5TRobY7Q10/Zqqe/KqtOw1zFKUj9xqNJe4Ov3xP5GSdcO60Eg==
- dependencies:
- "@react-types/shared" "^3.23.1"
-
"@react-types/select@^3.9.6":
version "3.9.6"
resolved "https://registry.npmjs.org/@react-types/select/-/select-3.9.6.tgz"
@@ -2485,7 +2470,14 @@
dependencies:
"@react-types/shared" "^3.24.1"
-"@react-types/shared@3.23.1", "@react-types/shared@^3.23.1":
+"@react-types/select@3.9.4":
+ version "3.9.4"
+ resolved "https://registry.npmjs.org/@react-types/select/-/select-3.9.4.tgz"
+ integrity sha512-xI7dnOW2st91fPPcv6hdtrTdcfetYiqZuuVPZ5TRobY7Q10/Zqqe/KqtOw1zFKUj9xqNJe4Ov3xP5GSdcO60Eg==
+ dependencies:
+ "@react-types/shared" "^3.23.1"
+
+"@react-types/shared@^3.23.1", "@react-types/shared@3.23.1":
version "3.23.1"
resolved "https://registry.npmjs.org/@react-types/shared/-/shared-3.23.1.tgz"
integrity sha512-5d+3HbFDxGZjhbMBeFHRQhexMFt4pUce3okyRtUVKbbedQFUrtXSBg9VszgF2RTeQDKDkMCIQDtz5ccP/Lk1gw==
@@ -2509,7 +2501,7 @@
dependencies:
"@react-types/shared" "^3.24.1"
-"@react-types/table@3.9.5", "@react-types/table@^3.9.5":
+"@react-types/table@^3.9.5", "@react-types/table@3.9.5":
version "3.9.5"
resolved "https://registry.npmjs.org/@react-types/table/-/table-3.9.5.tgz"
integrity sha512-fgM2j9F/UR4Anmd28CueghCgBwOZoCVyN8fjaIFPd2MN4gCwUUfANwxLav65gZk4BpwUXGoQdsW+X50L3555mg==
@@ -2517,21 +2509,21 @@
"@react-types/grid" "^3.2.6"
"@react-types/shared" "^3.23.1"
-"@react-types/tabs@3.3.7", "@react-types/tabs@^3.3.7":
+"@react-types/tabs@^3.3.7", "@react-types/tabs@3.3.7":
version "3.3.7"
resolved "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.3.7.tgz"
integrity sha512-ZdLe5xOcFX6+/ni45Dl2jO0jFATpTnoSqj6kLIS/BYv8oh0n817OjJkLf+DS3CLfNjApJWrHqAk34xNh6nRnEg==
dependencies:
"@react-types/shared" "^3.23.1"
-"@react-types/textfield@3.9.3", "@react-types/textfield@^3.9.3":
+"@react-types/textfield@^3.9.3", "@react-types/textfield@3.9.3":
version "3.9.3"
resolved "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.9.3.tgz"
integrity sha512-DoAY6cYOL0pJhgNGI1Rosni7g72GAt4OVr2ltEx2S9ARmFZ0DBvdhA9lL2nywcnKMf27PEJcKMXzXc10qaHsJw==
dependencies:
"@react-types/shared" "^3.23.1"
-"@react-types/tooltip@3.4.9", "@react-types/tooltip@^3.4.9":
+"@react-types/tooltip@^3.4.9", "@react-types/tooltip@3.4.9":
version "3.4.9"
resolved "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.4.9.tgz"
integrity sha512-wZ+uF1+Zc43qG+cOJzioBmLUNjRa7ApdcT0LI1VvaYvH5GdfjzUJOorLX9V/vAci0XMJ50UZ+qsh79aUlw2yqg==
@@ -2544,6 +2536,13 @@
resolved "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz"
integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==
+"@swc/helpers@^0.5.0":
+ version "0.5.13"
+ resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz"
+ integrity sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==
+ dependencies:
+ tslib "^2.4.0"
+
"@swc/helpers@0.5.5":
version "0.5.5"
resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz"
@@ -2552,13 +2551,6 @@
"@swc/counter" "^0.1.3"
tslib "^2.4.0"
-"@swc/helpers@^0.5.0":
- version "0.5.13"
- resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz"
- integrity sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==
- dependencies:
- tslib "^2.4.0"
-
"@tediousjs/connection-string@^0.5.0":
version "0.5.0"
resolved "https://registry.npmjs.org/@tediousjs/connection-string/-/connection-string-0.5.0.tgz"
@@ -4057,7 +4049,7 @@
dependencies:
"@types/react" "*"
-"@types/react@*":
+"@types/react@*", "@types/react@^16.8.0 || ^17.0.0 || ^18.0.0", "@types/react@^16.9.0 || ^17.0.0 || ^18.0.0":
version "18.3.11"
resolved "https://registry.npmjs.org/@types/react/-/react-18.3.11.tgz"
integrity sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==
@@ -4078,11 +4070,6 @@ abab@^2.0.5, abab@^2.0.6:
resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz"
integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
-abbrev@1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
- integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
-
abort-controller@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz"
@@ -4133,13 +4120,6 @@ ag-grid-react@^32.0.2:
ag-grid-community "32.1.0"
prop-types "^15.8.1"
-agent-base@6:
- version "6.0.2"
- resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz"
- integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
- dependencies:
- debug "4"
-
agent-base@^7.0.2, agent-base@^7.1.0:
version "7.1.1"
resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz"
@@ -4147,6 +4127,13 @@ agent-base@^7.0.2, agent-base@^7.1.0:
dependencies:
debug "^4.3.4"
+agent-base@6:
+ version "6.0.2"
+ resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz"
+ integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+ dependencies:
+ debug "4"
+
ansi-regex@^5.0.1:
version "5.0.1"
resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"
@@ -4189,19 +4176,6 @@ anymatch@~3.1.2:
normalize-path "^3.0.0"
picomatch "^2.0.4"
-"aproba@^1.0.3 || ^2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc"
- integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==
-
-are-we-there-yet@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c"
- integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==
- dependencies:
- delegates "^1.0.0"
- readable-stream "^3.6.0"
-
arg@^5.0.2:
version "5.0.2"
resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz"
@@ -4260,14 +4234,6 @@ body-scroll-lock@^3.1.5:
resolved "https://registry.npmjs.org/body-scroll-lock/-/body-scroll-lock-3.1.5.tgz"
integrity sha512-Yi1Xaml0EvNA0OYWxXiYNqY24AfWkbA6w5vxE7GWxtKfzIbZM+Qw+aSmkgsbWzbHiy/RCSkUZBplVxTA+E4jJg==
-brace-expansion@^1.1.7:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
- integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
- dependencies:
- balanced-match "^1.0.0"
- concat-map "0.0.1"
-
brace-expansion@^2.0.1:
version "2.0.1"
resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz"
@@ -4322,15 +4288,6 @@ caniuse-lite@^1.0.30001579:
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001634.tgz"
integrity sha512-fbBYXQ9q3+yp1q1gBk86tOFs4pyn/yxFm5ZNP18OXJDfA3txImOY9PhfxVggZ4vRHDqoU8NrKU81eN0OtzOgRA==
-canvas@^2.8.0:
- version "2.11.2"
- resolved "https://registry.yarnpkg.com/canvas/-/canvas-2.11.2.tgz#553d87b1e0228c7ac0fc72887c3adbac4abbd860"
- integrity sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==
- dependencies:
- "@mapbox/node-pre-gyp" "^1.0.0"
- nan "^2.17.0"
- simple-get "^3.0.3"
-
chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"
@@ -4340,14 +4297,14 @@ chalk@^2.4.2:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
-chart.js@^4.4.6:
+chart.js@^4.1.1, chart.js@^4.4.6:
version "4.4.6"
resolved "https://registry.npmjs.org/chart.js/-/chart.js-4.4.6.tgz"
integrity sha512-8Y406zevUPbbIBA/HRk33khEmQPk5+cxeflWE/2rx1NJsjVWMPw/9mSP9rxHP5eqi6LNoPBVMfZHxbwLSgldYA==
dependencies:
"@kurkle/color" "^0.3.0"
-"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3:
+chokidar@^3.5.3, "chokidar@>=3.0.0 <4.0.0":
version "3.6.0"
resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz"
integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
@@ -4362,22 +4319,22 @@ chart.js@^4.4.6:
optionalDependencies:
fsevents "~2.3.2"
-chownr@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
- integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
-
classnames@^2.3.1:
version "2.5.1"
resolved "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz"
integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==
-client-only@0.0.1, client-only@^0.0.1:
+client-only@^0.0.1, client-only@0.0.1:
version "0.0.1"
resolved "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz"
integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==
-clsx@^1.1.1, clsx@^1.2.1:
+clsx@^1.1.1:
+ version "1.2.1"
+ resolved "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz"
+ integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==
+
+clsx@^1.2.1:
version "1.2.1"
resolved "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz"
integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==
@@ -4401,16 +4358,16 @@ color-convert@^2.0.1:
dependencies:
color-name "~1.1.4"
-color-name@1.1.3:
- version "1.1.3"
- resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
- integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
-
color-name@^1.0.0, color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
+ integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+
color-string@^1.9.0:
version "1.9.1"
resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz"
@@ -4419,16 +4376,6 @@ color-string@^1.9.0:
color-name "^1.0.0"
simple-swizzle "^0.2.2"
-color-support@^1.1.2:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
- integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
-
-color2k@^2.0.2:
- version "2.0.3"
- resolved "https://registry.npmjs.org/color2k/-/color2k-2.0.3.tgz"
- integrity sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==
-
color@^4.2.3:
version "4.2.3"
resolved "https://registry.npmjs.org/color/-/color-4.2.3.tgz"
@@ -4437,6 +4384,11 @@ color@^4.2.3:
color-convert "^2.0.1"
color-string "^1.9.0"
+color2k@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.npmjs.org/color2k/-/color2k-2.0.3.tgz"
+ integrity sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==
+
combined-stream@^1.0.8:
version "1.0.8"
resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
@@ -4444,11 +4396,6 @@ combined-stream@^1.0.8:
dependencies:
delayed-stream "~1.0.0"
-commander@2:
- version "2.20.3"
- resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz"
- integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
-
commander@^11.0.0:
version "11.1.0"
resolved "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz"
@@ -4459,6 +4406,11 @@ commander@^4.0.0:
resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz"
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
+commander@2:
+ version "2.20.3"
+ resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
complex.js@^2.1.1:
version "2.1.1"
resolved "https://registry.npmjs.org/complex.js/-/complex.js-2.1.1.tgz"
@@ -4469,11 +4421,6 @@ compute-scroll-into-view@^3.0.2:
resolved "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.0.tgz"
integrity sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==
-concat-map@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
- integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
-
concaveman@^1.2.1:
version "1.2.1"
resolved "https://registry.npmjs.org/concaveman/-/concaveman-1.2.1.tgz"
@@ -4484,11 +4431,6 @@ concaveman@^1.2.1:
robust-predicates "^2.0.4"
tinyqueue "^2.0.3"
-console-control-strings@^1.0.0, console-control-strings@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
- integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==
-
convert-source-map@^1.5.0:
version "1.9.0"
resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz"
@@ -4589,13 +4531,6 @@ dayjs@^1.11.13:
resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz"
integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==
-debug@4, debug@^4.3.3, debug@^4.3.4:
- version "4.3.5"
- resolved "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz"
- integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==
- dependencies:
- ms "2.1.2"
-
debug@^4.3.1:
version "4.3.7"
resolved "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz"
@@ -4603,18 +4538,18 @@ debug@^4.3.1:
dependencies:
ms "^2.1.3"
+debug@^4.3.3, debug@^4.3.4, debug@4:
+ version "4.3.5"
+ resolved "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz"
+ integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==
+ dependencies:
+ ms "2.1.2"
+
decimal.js@^10.3.1, decimal.js@^10.4.3:
version "10.4.3"
resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz"
integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==
-decompress-response@^4.2.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986"
- integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==
- dependencies:
- mimic-response "^2.0.0"
-
deepmerge@4.3.1:
version "4.3.1"
resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz"
@@ -4630,16 +4565,6 @@ delayed-stream@~1.0.0:
resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
-delegates@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
- integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==
-
-detect-libc@^2.0.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700"
- integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==
-
detect-node-es@^1.1.0:
version "1.1.0"
resolved "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz"
@@ -4830,25 +4755,13 @@ fraction.js@^4.3.7:
resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz"
integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==
-framer-motion@^11.2.13:
+framer-motion@^11.2.13, framer-motion@>=10.17.0:
version "11.3.21"
resolved "https://registry.npmjs.org/framer-motion/-/framer-motion-11.3.21.tgz"
integrity sha512-D+hfIsvzV8eL/iycld4K+tKlg2Q2LdwnrcBEohtGw3cG1AIuNYATbT5RUqIM1ndsAk+EfGhoSGf0UaiFodc5Tw==
dependencies:
tslib "^2.4.0"
-fs-minipass@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
- integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
- dependencies:
- minipass "^3.0.0"
-
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
- integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
-
fs@^0.0.1-security:
version "0.0.1-security"
resolved "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz"
@@ -4864,21 +4777,6 @@ function-bind@^1.1.2:
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz"
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
-gauge@^3.0.0:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395"
- integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==
- dependencies:
- aproba "^1.0.3 || ^2.0.0"
- color-support "^1.1.2"
- console-control-strings "^1.0.0"
- has-unicode "^2.0.1"
- object-assign "^4.1.1"
- signal-exit "^3.0.0"
- string-width "^4.2.3"
- strip-ansi "^6.0.1"
- wide-align "^1.1.2"
-
geojson-equality-ts@^1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/geojson-equality-ts/-/geojson-equality-ts-1.0.2.tgz"
@@ -4923,18 +4821,6 @@ glob@^10.3.10:
minipass "^7.1.2"
path-scurry "^1.11.1"
-glob@^7.1.3:
- version "7.2.3"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
- integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.1.1"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
globals@^11.1.0:
version "11.12.0"
resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz"
@@ -4955,11 +4841,6 @@ has-flag@^3.0.0:
resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"
integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
-has-unicode@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
- integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==
-
hasown@^2.0.0:
version "2.0.2"
resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz"
@@ -5014,7 +4895,7 @@ https-proxy-agent@^7.0.0:
agent-base "^7.0.2"
debug "4"
-iconv-lite@0.6.3, iconv-lite@^0.6.3:
+iconv-lite@^0.6.3, iconv-lite@0.6.3:
version "0.6.3"
resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz"
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
@@ -5039,17 +4920,9 @@ import-fresh@^3.2.1:
parent-module "^1.0.0"
resolve-from "^4.0.0"
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@2, inherits@^2.0.3, inherits@^2.0.4:
+inherits@^2.0.4:
version "2.0.4"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
international-types@^0.8.1:
@@ -5380,13 +5253,6 @@ lru-cache@^10.2.0:
resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz"
integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==
-make-dir@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
- integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
- dependencies:
- semver "^6.0.0"
-
marchingsquares@^1.3.3:
version "1.3.3"
resolved "https://registry.npmjs.org/marchingsquares/-/marchingsquares-1.3.3.tgz"
@@ -5437,18 +5303,6 @@ mime-types@^2.1.12:
dependencies:
mime-db "1.52.0"
-mimic-response@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43"
- integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==
-
-minimatch@^3.1.1:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
- integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
- dependencies:
- brace-expansion "^1.1.7"
-
minimatch@^9.0.4:
version "9.0.4"
resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz"
@@ -5456,37 +5310,17 @@ minimatch@^9.0.4:
dependencies:
brace-expansion "^2.0.1"
-minipass@^3.0.0:
- version "3.3.6"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a"
- integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
- dependencies:
- yallist "^4.0.0"
-
-minipass@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
- integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
-
-"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2:
+"minipass@^5.0.0 || ^6.0.2 || ^7.0.0":
version "7.1.2"
resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz"
integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
-minizlib@^2.1.1:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
- integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
- dependencies:
- minipass "^3.0.0"
- yallist "^4.0.0"
+minipass@^7.1.2:
+ version "7.1.2"
+ resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz"
+ integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
-mkdirp@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
- integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
-
-ms@2.1.2, ms@^2.1.1:
+ms@^2.1.1, ms@2.1.2:
version "2.1.2"
resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
@@ -5517,11 +5351,6 @@ mz@^2.7.0:
object-assign "^4.0.1"
thenify-all "^1.0.0"
-nan@^2.17.0:
- version "2.22.0"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.22.0.tgz#31bc433fc33213c97bad36404bb68063de604de3"
- integrity sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==
-
nanoid@^3.3.6, nanoid@^3.3.7:
version "3.3.7"
resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz"
@@ -5564,35 +5393,11 @@ next@14.2.14:
"@next/swc-win32-ia32-msvc" "14.2.14"
"@next/swc-win32-x64-msvc" "14.2.14"
-node-fetch@^2.6.7:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d"
- integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==
- dependencies:
- whatwg-url "^5.0.0"
-
-nopt@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88"
- integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==
- dependencies:
- abbrev "1"
-
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz"
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
-npmlog@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0"
- integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==
- dependencies:
- are-we-there-yet "^2.0.0"
- console-control-strings "^1.1.0"
- gauge "^3.0.0"
- set-blocking "^2.0.0"
-
nwsapi@^2.2.0:
version "2.2.10"
resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz"
@@ -5608,13 +5413,6 @@ object-hash@^3.0.0:
resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz"
integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
-once@^1.3.0, once@^1.3.1:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
- dependencies:
- wrappy "1"
-
open@^8.0.0:
version "8.4.2"
resolved "https://registry.npmjs.org/open/-/open-8.4.2.tgz"
@@ -5646,11 +5444,6 @@ parse5@6.0.1:
resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz"
integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
-path-is-absolute@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
- integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
-
path-key@^3.1.0:
version "3.1.1"
resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"
@@ -5756,6 +5549,15 @@ postcss-value-parser@^4.0.0:
resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+postcss@^8, postcss@^8.0.0, postcss@^8.2.14, postcss@^8.4.21, postcss@^8.4.23, postcss@>=8.0.9:
+ version "8.4.38"
+ resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz"
+ integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==
+ dependencies:
+ nanoid "^3.3.7"
+ picocolors "^1.0.0"
+ source-map-js "^1.2.0"
+
postcss@8.4.31:
version "8.4.31"
resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz"
@@ -5765,15 +5567,6 @@ postcss@8.4.31:
picocolors "^1.0.0"
source-map-js "^1.0.2"
-postcss@^8, postcss@^8.4.23:
- version "8.4.38"
- resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz"
- integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==
- dependencies:
- nanoid "^3.3.7"
- picocolors "^1.0.0"
- source-map-js "^1.2.0"
-
prettier@^3.3.3:
version "3.3.3"
resolved "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz"
@@ -5868,7 +5661,7 @@ react-datepicker@^7.3.0:
prop-types "^15.7.2"
react-onclickoutside "^6.13.0"
-react-dom@^18:
+"react-dom@^15.5.x || ^16.x || ^17.x || ^18.x", "react-dom@^16.3.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.8.0 || ^17 || ^18", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.8.0 || ^17.0.0-rc.1 || ^18.0.0", "react-dom@^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0", "react-dom@^16.9.0 || ^17 || ^18", react-dom@^18, react-dom@^18.0.0, react-dom@^18.2.0, "react-dom@>= 16.3.0", react-dom@>=16.6.0, react-dom@>=16.8.0, react-dom@>=18:
version "18.3.1"
resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz"
integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==
@@ -5980,7 +5773,7 @@ react-transition-group@^4.3.0:
loose-envify "^1.4.0"
prop-types "^15.6.2"
-react@^18:
+react@*, "react@^15.5.x || ^16.x || ^17.x || ^18.x", "react@^16.3.0 || ^17.0.0 || ^18.0.0", "react@^16.8 || ^17 || ^18", "react@^16.8.0 || ^17 || ^18", "react@^16.8.0 || ^17 || ^18 || ^19", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.8.0 || ^17.0.0-rc.1 || ^18.0.0", "react@^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0", "react@^16.9.0 || ^17 || ^18", react@^18, react@^18.0.0, react@^18.2.0, react@^18.3.1, "react@>= 16.3.0", "react@>= 16.8.0 || 17.x.x || ^18.0.0-0", react@>=16.13.1, react@>=16.6.0, react@>=16.8, react@>=16.8.0, react@>=18:
version "18.3.1"
resolved "https://registry.npmjs.org/react/-/react-18.3.1.tgz"
integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==
@@ -5994,15 +5787,6 @@ read-cache@^1.0.0:
dependencies:
pify "^2.3.0"
-readable-stream@^3.6.0:
- version "3.6.2"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
- integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
- dependencies:
- inherits "^2.0.3"
- string_decoder "^1.1.1"
- util-deprecate "^1.0.1"
-
readable-stream@^4.2.0:
version "4.5.2"
resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz"
@@ -6062,13 +5846,6 @@ rfdc@^1.3.0:
resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz"
integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==
-rimraf@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
- integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
- dependencies:
- glob "^7.1.3"
-
robust-predicates@^2.0.4:
version "2.0.4"
resolved "https://registry.npmjs.org/robust-predicates/-/robust-predicates-2.0.4.tgz"
@@ -6101,7 +5878,7 @@ safe-buffer@~5.1.1:
resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-sass@^1.77.8:
+sass@^1.3.0, sass@^1.77.8:
version "1.77.8"
resolved "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz"
integrity sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==
@@ -6136,14 +5913,9 @@ seedrandom@^3.0.5:
resolved "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz"
integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==
-semver@^6.0.0:
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
- integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-
-semver@^7.3.5, semver@^7.5.4:
+semver@^7.5.4:
version "7.6.3"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
+ resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz"
integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
server-only@^0.0.1:
@@ -6151,11 +5923,6 @@ server-only@^0.0.1:
resolved "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz"
integrity sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==
-set-blocking@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
- integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
-
shebang-command@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"
@@ -6168,30 +5935,11 @@ shebang-regex@^3.0.0:
resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-signal-exit@^3.0.0:
- version "3.0.7"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
- integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
-
signal-exit@^4.0.1:
version "4.1.0"
resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz"
integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
-simple-concat@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
- integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
-
-simple-get@^3.0.3:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.1.tgz#cc7ba77cfbe761036fbfce3d021af25fc5584d55"
- integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==
- dependencies:
- decompress-response "^4.2.0"
- once "^1.3.1"
- simple-concat "^1.0.0"
-
simple-swizzle@^0.2.2:
version "0.2.2"
resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz"
@@ -6204,7 +5952,7 @@ skmeans@0.9.7:
resolved "https://registry.npmjs.org/skmeans/-/skmeans-0.9.7.tgz"
integrity sha512-hNj1/oZ7ygsfmPZ7ZfN5MUBRoGg1gtpnImuJBgLO0ljQ67DtJuiQaiYdS4lUA6s0KCwnPhGivtC/WRwIZLkHyg==
-"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2, source-map-js@^1.2.0:
+source-map-js@^1.0.2, source-map-js@^1.2.0, "source-map-js@>=0.6.2 <2.0.0":
version "1.2.0"
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz"
integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
@@ -6239,6 +5987,13 @@ streamsearch@^1.1.0:
resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz"
integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==
+string_decoder@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
"string-width-cjs@npm:string-width@^4.2.0":
version "4.2.3"
resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
@@ -6248,16 +6003,16 @@ streamsearch@^1.1.0:
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1"
-"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.3:
+string-width@^4.1.0:
version "4.2.3"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
dependencies:
emoji-regex "^8.0.0"
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1"
-string-width@^5.0.1, string-width@^5.1.2:
+string-width@^5.0.1:
version "5.1.2"
resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz"
integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
@@ -6266,14 +6021,23 @@ string-width@^5.0.1, string-width@^5.1.2:
emoji-regex "^9.2.2"
strip-ansi "^7.0.1"
-string_decoder@^1.1.1, string_decoder@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
- integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+string-width@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz"
+ integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
dependencies:
- safe-buffer "~5.2.0"
+ eastasianwidth "^0.2.0"
+ emoji-regex "^9.2.2"
+ strip-ansi "^7.0.1"
-"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
+ version "6.0.1"
+ resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -6336,7 +6100,7 @@ sweetalert2-react-content@^5.0.7:
resolved "https://registry.npmjs.org/sweetalert2-react-content/-/sweetalert2-react-content-5.0.7.tgz"
integrity sha512-8Fk82Mpk45lFXpJWKIFF/lq8k/dJKDDQGFcuqVosaL/qRdViyAs5+u37LoTGfnOIvf+rfQB3PAXcp1XLLn+0ew==
-sweetalert2@^11.14.1:
+sweetalert2@^11.0.0, sweetalert2@^11.14.1:
version "11.14.1"
resolved "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.14.1.tgz"
integrity sha512-xadhfcA4STGMh8nC5zHFFWURhRpWc4zyI3GdMDFH/m3hGWZeQQNWhX9xcG4lI9gZYsi/IlazKbwvvje3juL3Xg==
@@ -6363,7 +6127,7 @@ tailwind-variants@^0.1.20:
dependencies:
tailwind-merge "^1.14.0"
-tailwindcss@^3.4.1:
+tailwindcss@*, tailwindcss@^3.4.1, tailwindcss@>=3.4.0:
version "3.4.4"
resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz"
integrity sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==
@@ -6391,18 +6155,6 @@ tailwindcss@^3.4.1:
resolve "^1.22.2"
sucrase "^3.32.0"
-tar@^6.1.11:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a"
- integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==
- dependencies:
- chownr "^2.0.0"
- fs-minipass "^2.0.0"
- minipass "^5.0.0"
- minizlib "^2.1.1"
- mkdirp "^1.0.3"
- yallist "^4.0.0"
-
tarn@^3.0.2:
version "3.0.2"
resolved "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz"
@@ -6491,11 +6243,6 @@ tr46@^3.0.0:
dependencies:
punycode "^2.1.1"
-tr46@~0.0.3:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
- integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
-
ts-interface-checker@^0.1.9:
version "0.1.13"
resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz"
@@ -6566,9 +6313,9 @@ use-sidecar@^1.1.2:
detect-node-es "^1.1.0"
tslib "^2.0.0"
-util-deprecate@^1.0.1, util-deprecate@^1.0.2:
+util-deprecate@^1.0.2:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
uuid@^10.0.0:
@@ -6595,11 +6342,6 @@ w3c-xmlserializer@^3.0.0:
dependencies:
xml-name-validator "^4.0.0"
-webidl-conversions@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
- integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
-
webidl-conversions@^7.0.0:
version "7.0.0"
resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz"
@@ -6633,14 +6375,6 @@ whatwg-url@^11.0.0:
tr46 "^3.0.0"
webidl-conversions "^7.0.0"
-whatwg-url@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
- integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
- dependencies:
- tr46 "~0.0.3"
- webidl-conversions "^3.0.0"
-
which@^2.0.1:
version "2.0.2"
resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz"
@@ -6648,13 +6382,6 @@ which@^2.0.1:
dependencies:
isexe "^2.0.0"
-wide-align@^1.1.2:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
- integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
- dependencies:
- string-width "^1.0.2 || 2 || 3 || 4"
-
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
version "7.0.0"
resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz"
@@ -6673,11 +6400,6 @@ wrap-ansi@^8.1.0:
string-width "^5.0.1"
strip-ansi "^7.0.1"
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
- integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
-
ws@^8.2.3:
version "8.17.1"
resolved "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz"
@@ -6693,11 +6415,6 @@ xmlchars@^2.2.0:
resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz"
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
-yallist@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
- integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
-
yaml@^1.10.0:
version "1.10.2"
resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz"