Merge branch 'dev' into dev-yj
This commit is contained in:
commit
d01756c029
11
package.json
11
package.json
@ -11,7 +11,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nextui-org/react": "^2.4.2",
|
"@nextui-org/react": "^2.4.2",
|
||||||
"ag-grid-react": "^32.0.2",
|
"ag-grid-react": "^32.0.2",
|
||||||
"axios": "^1.7.3",
|
"axios": "^1.7.8",
|
||||||
"chart.js": "^4.4.6",
|
"chart.js": "^4.4.6",
|
||||||
"fabric": "^5.3.0",
|
"fabric": "^5.3.0",
|
||||||
"framer-motion": "^11.2.13",
|
"framer-motion": "^11.2.13",
|
||||||
@ -20,7 +20,7 @@
|
|||||||
"js-cookie": "^3.0.5",
|
"js-cookie": "^3.0.5",
|
||||||
"mathjs": "^13.0.2",
|
"mathjs": "^13.0.2",
|
||||||
"mssql": "^11.0.1",
|
"mssql": "^11.0.1",
|
||||||
"next": "14.2.3",
|
"next": "14.2.14",
|
||||||
"next-international": "^1.2.4",
|
"next-international": "^1.2.4",
|
||||||
"react": "^18",
|
"react": "^18",
|
||||||
"react-chartjs-2": "^5.2.0",
|
"react-chartjs-2": "^5.2.0",
|
||||||
@ -32,20 +32,19 @@
|
|||||||
"react-icons": "^5.3.0",
|
"react-icons": "^5.3.0",
|
||||||
"react-loading-skeleton": "^3.5.0",
|
"react-loading-skeleton": "^3.5.0",
|
||||||
"react-responsive-modal": "^6.4.2",
|
"react-responsive-modal": "^6.4.2",
|
||||||
"react-spinners": "^0.14.1",
|
|
||||||
"recoil": "^0.7.7",
|
"recoil": "^0.7.7",
|
||||||
"sweetalert2": "^11.14.1",
|
"sweetalert2": "^11.14.1",
|
||||||
"sweetalert2-react-content": "^5.0.7",
|
"sweetalert2-react-content": "^5.0.7",
|
||||||
"uuid": "^10.0.0"
|
"uuid": "^10.0.0",
|
||||||
|
"dayjs": "^1.11.13",
|
||||||
|
"react-select": "^5.8.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@turf/turf": "^7.0.0",
|
"@turf/turf": "^7.0.0",
|
||||||
"convertapi": "^1.14.0",
|
"convertapi": "^1.14.0",
|
||||||
"dayjs": "^1.11.13",
|
|
||||||
"postcss": "^8",
|
"postcss": "^8",
|
||||||
"prettier": "^3.3.3",
|
"prettier": "^3.3.3",
|
||||||
"react-color-palette": "^7.2.2",
|
"react-color-palette": "^7.2.2",
|
||||||
"react-select": "^5.8.1",
|
|
||||||
"sass": "^1.77.8",
|
"sass": "^1.77.8",
|
||||||
"tailwindcss": "^3.4.1"
|
"tailwindcss": "^3.4.1"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import { correntObjectNoState } from '@/store/settingAtom'
|
|||||||
import { notFound, usePathname, useSearchParams } from 'next/navigation'
|
import { notFound, usePathname, useSearchParams } from 'next/navigation'
|
||||||
// import { ErrorBoundary } from 'next/dist/client/components/error-boundary'
|
// import { ErrorBoundary } from 'next/dist/client/components/error-boundary'
|
||||||
// import ServerError from '../error'
|
// import ServerError from '../error'
|
||||||
import { createContext, useEffect, useReducer, useState } from 'react'
|
import { createContext, useReducer, useState } from 'react'
|
||||||
import { useSetRecoilState } from 'recoil'
|
import { useSetRecoilState } from 'recoil'
|
||||||
|
|
||||||
const reducer = (prevState, nextState) => {
|
const reducer = (prevState, nextState) => {
|
||||||
@ -40,7 +40,7 @@ const FloorPlanProvider = ({ children }) => {
|
|||||||
const pid = searchParams.get('pid')
|
const pid = searchParams.get('pid')
|
||||||
|
|
||||||
if (pathname === '/floor-plan') {
|
if (pathname === '/floor-plan') {
|
||||||
if (pid === undefined || pid === '' || objectNo === undefined || objectNo === '') {
|
if (pid === undefined || pid === '' || pid === null || objectNo === undefined || objectNo === '' || objectNo === null) {
|
||||||
notFound()
|
notFound()
|
||||||
}
|
}
|
||||||
setCurrentObjectNo(objectNo)
|
setCurrentObjectNo(objectNo)
|
||||||
@ -57,10 +57,6 @@ const FloorPlanProvider = ({ children }) => {
|
|||||||
pid,
|
pid,
|
||||||
})
|
})
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
console.log('🚀 ~ FloorPlanProvider ~ floorPlanState:', floorPlanState)
|
|
||||||
}, [floorPlanState])
|
|
||||||
|
|
||||||
const [estimateContextState, setEstimateContextState] = useReducer(reducer, defaultEstimateData)
|
const [estimateContextState, setEstimateContextState] = useReducer(reducer, defaultEstimateData)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@ -10,13 +10,13 @@ export default function FloorPlanLayout({ children }) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{/*<EventProvider>*/}
|
<EventProvider>
|
||||||
<FloorPlanProvider>
|
<FloorPlanProvider>
|
||||||
<FloorPlan>
|
<FloorPlan>
|
||||||
<CanvasLayout>{children}</CanvasLayout>
|
<CanvasLayout>{children}</CanvasLayout>
|
||||||
</FloorPlan>
|
</FloorPlan>
|
||||||
</FloorPlanProvider>
|
</FloorPlanProvider>
|
||||||
{/*</EventProvider>*/}
|
</EventProvider>
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,13 @@
|
|||||||
'use client'
|
'use client'
|
||||||
|
|
||||||
import { HashLoader } from 'react-spinners'
|
import '@/styles/spinner.scss'
|
||||||
|
|
||||||
export default function GlobalSpinner() {
|
export default function GlobalSpinner() {
|
||||||
return <HashLoader />
|
return (
|
||||||
|
<>
|
||||||
|
<div className="spinner-wrap">
|
||||||
|
<span className="loader"></span>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -197,8 +197,10 @@ export default function Estimate({ params }) {
|
|||||||
// 추가한 첨부파일 estimateContextState에 넣기
|
// 추가한 첨부파일 estimateContextState에 넣기
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (isNotEmptyArray(files)) {
|
if (isNotEmptyArray(files)) {
|
||||||
|
let fileList = []
|
||||||
files.map((row) => {
|
files.map((row) => {
|
||||||
setEstimateContextState({ fileList: row.data })
|
fileList.push(row.data)
|
||||||
|
setEstimateContextState({ fileList: row.data, tempFileList: fileList })
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
setEstimateContextState({ fileList: [] })
|
setEstimateContextState({ fileList: [] })
|
||||||
@ -212,8 +214,6 @@ export default function Estimate({ params }) {
|
|||||||
setFiles([])
|
setFiles([])
|
||||||
setOriginFiles(estimateContextState.fileList)
|
setOriginFiles(estimateContextState.fileList)
|
||||||
}
|
}
|
||||||
|
|
||||||
// setFiles([])
|
|
||||||
}, [estimateContextState?.fileList])
|
}, [estimateContextState?.fileList])
|
||||||
|
|
||||||
// 기존첨부파일 삭제
|
// 기존첨부파일 삭제
|
||||||
@ -229,6 +229,8 @@ export default function Estimate({ params }) {
|
|||||||
setEstimateContextState({
|
setEstimateContextState({
|
||||||
fileList: originFiles.filter((file) => file.objectNo === objectNo && file.no !== no),
|
fileList: originFiles.filter((file) => file.objectNo === objectNo && file.no !== no),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
alert(getMessage('plan.message.delete'))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -549,7 +551,11 @@ export default function Estimate({ params }) {
|
|||||||
if (item?.addFlg) {
|
if (item?.addFlg) {
|
||||||
return { ...item, ...updates, saleTotPrice: '' }
|
return { ...item, ...updates, saleTotPrice: '' }
|
||||||
} else {
|
} else {
|
||||||
return { ...item, ...updates, salePrice: '', saleTotPrice: '' }
|
if (estimateContextState.estimateType === 'YJSS') {
|
||||||
|
return { ...item, ...updates, salePrice: '', saleTotPrice: '' }
|
||||||
|
} else {
|
||||||
|
return { ...item, ...updates }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (item.paDispOrder === dispOrder) {
|
} else if (item.paDispOrder === dispOrder) {
|
||||||
//봄제품을 바꿨을떄
|
//봄제품을 바꿨을떄
|
||||||
@ -558,6 +564,7 @@ export default function Estimate({ params }) {
|
|||||||
return item
|
return item
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
//paDispOrder
|
//paDispOrder
|
||||||
if (bomList) {
|
if (bomList) {
|
||||||
bomList.map((bomItem, index) => {
|
bomList.map((bomItem, index) => {
|
||||||
@ -1459,7 +1466,9 @@ export default function Estimate({ params }) {
|
|||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
className="input-light al-r"
|
className="input-light al-r"
|
||||||
value={convertNumberToPriceDecimal(item?.showSalePrice === '0' ? null : item?.salePrice?.replaceAll(',', ''))}
|
defaultValue={convertNumberToPriceDecimal(
|
||||||
|
item?.showSalePrice === '0' ? null : item?.salePrice?.replaceAll(',', ''),
|
||||||
|
)}
|
||||||
disabled={
|
disabled={
|
||||||
estimateContextState?.estimateType === 'YJSS'
|
estimateContextState?.estimateType === 'YJSS'
|
||||||
? item?.paDispOrder
|
? item?.paDispOrder
|
||||||
|
|||||||
@ -16,6 +16,17 @@ export default function EstimateFileUploader({ uploadFiles, setUploadFiles }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const onChangeFiles = async (e) => {
|
const onChangeFiles = async (e) => {
|
||||||
|
if (e.target.files.length <= 0) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const { files } = e.target
|
||||||
|
const file = files[0]
|
||||||
|
const fileType = file.type
|
||||||
|
if (!fileType.includes('image')) {
|
||||||
|
return alert(getMessage('estimate.detail.fileList.extCheck'))
|
||||||
|
}
|
||||||
|
|
||||||
// const formData = new FormData()
|
// const formData = new FormData()
|
||||||
// formData.append('file', e.target.files[0])
|
// formData.append('file', e.target.files[0])
|
||||||
// formData.append('objectNo', objectNo) // 받아와야 하는 값
|
// formData.append('objectNo', objectNo) // 받아와야 하는 값
|
||||||
@ -65,7 +76,7 @@ export default function EstimateFileUploader({ uploadFiles, setUploadFiles }) {
|
|||||||
<label className="file-upload" htmlFor="img" onClick={handleButtonClick}>
|
<label className="file-upload" htmlFor="img" onClick={handleButtonClick}>
|
||||||
{getMessage('estimate.detail.fileList.btn')}
|
{getMessage('estimate.detail.fileList.btn')}
|
||||||
</label>
|
</label>
|
||||||
<input type="file" name="file" id="img" ref={fileInputRef} style={{ display: 'none' }} onChange={(e) => onChangeFiles(e)} />
|
<input type="file" name="file" id="img" accept="image/*" ref={fileInputRef} style={{ display: 'none' }} onChange={(e) => onChangeFiles(e)} />
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
className="drag-file-area"
|
className="drag-file-area"
|
||||||
|
|||||||
@ -12,6 +12,7 @@ export const QLine = fabric.util.createClass(fabric.Line, {
|
|||||||
idx: 0,
|
idx: 0,
|
||||||
area: 0,
|
area: 0,
|
||||||
children: [],
|
children: [],
|
||||||
|
padding: 5,
|
||||||
initialize: function (points, options, length = 0) {
|
initialize: function (points, options, length = 0) {
|
||||||
// 소수점 전부 제거
|
// 소수점 전부 제거
|
||||||
points = points.map((point) => Number(point.toFixed(1)))
|
points = points.map((point) => Number(point.toFixed(1)))
|
||||||
|
|||||||
@ -3,13 +3,23 @@ import { useMessage } from '@/hooks/useMessage'
|
|||||||
import { usePopup } from '@/hooks/usePopup'
|
import { usePopup } from '@/hooks/usePopup'
|
||||||
import { useRecoilValue } from 'recoil'
|
import { useRecoilValue } from 'recoil'
|
||||||
import { contextPopupPositionState } from '@/store/popupAtom'
|
import { contextPopupPositionState } from '@/store/popupAtom'
|
||||||
|
import { useState } from 'react'
|
||||||
|
import { currentObjectState } from '@/store/canvasAtom'
|
||||||
|
import { useGrid } from '@/hooks/common/useGrid'
|
||||||
|
|
||||||
export default function GridCopy(props) {
|
export default function GridCopy(props) {
|
||||||
const contextPopupPosition = useRecoilValue(contextPopupPositionState)
|
const contextPopupPosition = useRecoilValue(contextPopupPositionState)
|
||||||
const { id, pos = contextPopupPosition } = props
|
const { id, pos = contextPopupPosition } = props
|
||||||
const { getMessage } = useMessage()
|
const { getMessage } = useMessage()
|
||||||
const { closePopup } = usePopup()
|
const { closePopup } = usePopup()
|
||||||
|
const [length, setLength] = useState('0')
|
||||||
|
const [arrow, setArrow] = useState(null)
|
||||||
|
const currentObject = useRecoilValue(currentObjectState)
|
||||||
|
const { copy } = useGrid()
|
||||||
|
const handleApply = () => {
|
||||||
|
// copy(currentObject, )
|
||||||
|
copy(currentObject, ['↑', '←'].includes(arrow) ? Number(length) * -1 : Number(length))
|
||||||
|
}
|
||||||
return (
|
return (
|
||||||
<WithDraggable isShow={true} pos={pos}>
|
<WithDraggable isShow={true} pos={pos}>
|
||||||
<div className={`modal-pop-wrap xm mount`}>
|
<div className={`modal-pop-wrap xm mount`}>
|
||||||
@ -26,20 +36,46 @@ export default function GridCopy(props) {
|
|||||||
<div className="grid-input-form">
|
<div className="grid-input-form">
|
||||||
<span className="mr10">{getMessage('modal.grid.copy.length')}</span>
|
<span className="mr10">{getMessage('modal.grid.copy.length')}</span>
|
||||||
<div className="input-grid mr5">
|
<div className="input-grid mr5">
|
||||||
<input type="text" className="input-origin" defaultValue={910} />
|
<input type="text" className="input-origin" value={length} onChange={(e) => setLength(e.target.value)} />
|
||||||
</div>
|
</div>
|
||||||
<span>mm</span>
|
<span>mm</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="grid-direction">
|
<div className="grid-direction">
|
||||||
<button className="direction up"></button>
|
<button
|
||||||
<button className="direction down act"></button>
|
className={`direction up ${arrow === '↑' ? 'act' : ''} ${currentObject?.direction === 'vertical' ? 'no-click' : ''}`}
|
||||||
<button className="direction left"></button>
|
onClick={() => {
|
||||||
<button className="direction right"></button>
|
if (currentObject?.direction === 'vertical') return
|
||||||
|
setArrow('↑')
|
||||||
|
}}
|
||||||
|
></button>
|
||||||
|
<button
|
||||||
|
className={`direction down ${arrow === '↓' ? 'act' : ''} ${currentObject?.direction === 'vertical' ? 'no-click' : ''}`}
|
||||||
|
onClick={() => {
|
||||||
|
if (currentObject?.direction === 'vertical') return
|
||||||
|
setArrow('↓')
|
||||||
|
}}
|
||||||
|
></button>
|
||||||
|
<button
|
||||||
|
className={`direction left ${arrow === '←' ? 'act' : ''} ${currentObject?.direction === 'horizontal' ? 'no-click' : ''}`}
|
||||||
|
onClick={() => {
|
||||||
|
if (currentObject?.direction === 'horizontal') return
|
||||||
|
setArrow('←')
|
||||||
|
}}
|
||||||
|
></button>
|
||||||
|
<button
|
||||||
|
className={`direction right ${arrow === '→' ? 'act' : ''} ${currentObject?.direction === 'horizontal' ? 'no-click' : ''}`}
|
||||||
|
onClick={() => {
|
||||||
|
if (currentObject?.direction === 'horizontal') return
|
||||||
|
setArrow('→')
|
||||||
|
}}
|
||||||
|
></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="grid-btn-wrap">
|
<div className="grid-btn-wrap">
|
||||||
<button className="btn-frame modal act">{getMessage('modal.grid.copy.save')}</button>
|
<button className="btn-frame modal act" onClick={handleApply}>
|
||||||
|
{getMessage('modal.grid.copy.save')}
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,21 +1,83 @@
|
|||||||
import WithDraggable from '@/components/common/draggable/WithDraggable'
|
import WithDraggable from '@/components/common/draggable/WithDraggable'
|
||||||
import { useMessage } from '@/hooks/useMessage'
|
import { useMessage } from '@/hooks/useMessage'
|
||||||
import { usePopup } from '@/hooks/usePopup'
|
import { usePopup } from '@/hooks/usePopup'
|
||||||
import { useRecoilValue } from 'recoil'
|
import { useRecoilState, useRecoilValue } from 'recoil'
|
||||||
import { contextPopupPositionState } from '@/store/popupAtom'
|
import { contextPopupPositionState } from '@/store/popupAtom'
|
||||||
|
import { useCanvas } from '@/hooks/useCanvas'
|
||||||
|
import { canvasState, currentObjectState } from '@/store/canvasAtom'
|
||||||
|
import { useEffect, useState } from 'react'
|
||||||
|
import { useGrid } from '@/hooks/common/useGrid'
|
||||||
|
import { useSwal } from '@/hooks/useSwal'
|
||||||
|
import { set } from 'react-hook-form'
|
||||||
|
|
||||||
export default function GridMove(props) {
|
export default function GridMove(props) {
|
||||||
const contextPopupPosition = useRecoilValue(contextPopupPositionState)
|
const contextPopupPosition = useRecoilValue(contextPopupPositionState)
|
||||||
const { id, pos = contextPopupPosition } = props
|
const { id, pos = contextPopupPosition } = props
|
||||||
|
const canvas = useRecoilValue(canvasState)
|
||||||
const { getMessage } = useMessage()
|
const { getMessage } = useMessage()
|
||||||
const { closePopup } = usePopup()
|
const { closePopup } = usePopup()
|
||||||
|
const { swalFire } = useSwal()
|
||||||
|
const { move } = useGrid()
|
||||||
|
const [currentObject, setCurrentObject] = useRecoilState(currentObjectState)
|
||||||
|
const [isAll, setIsAll] = useState(false)
|
||||||
|
const [verticalSize, setVerticalSize] = useState('0')
|
||||||
|
const [horizonSize, setHorizonSize] = useState('0')
|
||||||
|
const [arrow1, setArrow1] = useState(null)
|
||||||
|
const [arrow2, setArrow2] = useState(null)
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (currentObject?.direction === 'vertical') {
|
||||||
|
setArrow1(null)
|
||||||
|
setVerticalSize('0')
|
||||||
|
} else {
|
||||||
|
setArrow2(null)
|
||||||
|
setHorizonSize('0')
|
||||||
|
}
|
||||||
|
}, [currentObject])
|
||||||
|
|
||||||
|
const handleApply = () => {
|
||||||
|
if (currentObject?.direction === 'vertical') {
|
||||||
|
if (!horizonSize || !arrow2) {
|
||||||
|
swalFire({ title: '길이와 방향을 입력하세요.', type: 'alert' })
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!verticalSize || !arrow1) {
|
||||||
|
swalFire({ title: '길이와 방향을 입력하세요.', type: 'alert' })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isAll) {
|
||||||
|
canvas
|
||||||
|
.getObjects()
|
||||||
|
.filter((obj) => ['lineGrid', 'tempGrid', 'dotGrid'].includes(obj.name))
|
||||||
|
.forEach((grid) => {
|
||||||
|
move(
|
||||||
|
grid,
|
||||||
|
arrow2 === '←' ? Number(horizonSize) * -1 : Number(horizonSize),
|
||||||
|
arrow1 === '↑' ? Number(verticalSize) * -1 : Number(verticalSize),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
move(
|
||||||
|
currentObject,
|
||||||
|
arrow2 === '←' ? Number(horizonSize) * -1 : Number(horizonSize),
|
||||||
|
arrow1 === '↑' ? Number(verticalSize) * -1 : Number(verticalSize),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
canvas.renderAll()
|
||||||
|
handleClose()
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleClose = () => {
|
||||||
|
closePopup(id)
|
||||||
|
}
|
||||||
return (
|
return (
|
||||||
<WithDraggable isShow={true} pos={pos}>
|
<WithDraggable isShow={true} pos={pos}>
|
||||||
<div className={`modal-pop-wrap xm mount`}>
|
<div className={`modal-pop-wrap xm mount`}>
|
||||||
<div className="modal-head">
|
<div className="modal-head">
|
||||||
<h1 className="title">{getMessage('modal.grid.move')} </h1>
|
<h1 className="title">{getMessage('modal.grid.move')} </h1>
|
||||||
<button className="modal-close" onClick={() => closePopup(id)}>
|
<button className="modal-close" onClick={handleClose}>
|
||||||
닫기
|
닫기
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@ -23,7 +85,7 @@ export default function GridMove(props) {
|
|||||||
<div className="grid-option-tit">{getMessage('modal.grid.move.info')}</div>
|
<div className="grid-option-tit">{getMessage('modal.grid.move.info')}</div>
|
||||||
<div className="grid-option-wrap">
|
<div className="grid-option-wrap">
|
||||||
<div className="d-check-box pop mb10">
|
<div className="d-check-box pop mb10">
|
||||||
<input type="checkbox" id="ch99" />
|
<input type="checkbox" id="ch99" checked={isAll} onChange={() => setIsAll(!isAll)} />
|
||||||
<label htmlFor="ch99">{getMessage('modal.grid.move.all')}</label>
|
<label htmlFor="ch99">{getMessage('modal.grid.move.all')}</label>
|
||||||
</div>
|
</div>
|
||||||
<div className="grid-option-box">
|
<div className="grid-option-box">
|
||||||
@ -31,29 +93,67 @@ export default function GridMove(props) {
|
|||||||
<p className="mb5">{getMessage('modal.grid.move.length')}</p>
|
<p className="mb5">{getMessage('modal.grid.move.length')}</p>
|
||||||
<div className="input-move-wrap mb5">
|
<div className="input-move-wrap mb5">
|
||||||
<div className="input-move">
|
<div className="input-move">
|
||||||
<input type="text" className="input-origin" defaultValue={910} />
|
<input
|
||||||
|
type="text"
|
||||||
|
className="input-origin"
|
||||||
|
value={verticalSize}
|
||||||
|
onChange={(e) => setVerticalSize(e.target.value)}
|
||||||
|
readOnly={!isAll && currentObject?.direction === 'vertical'}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<span>mm</span>
|
<span>mm</span>
|
||||||
<div className="direction-move-wrap">
|
<div className="direction-move-wrap">
|
||||||
<button className="direction up"></button>
|
<button
|
||||||
<button className="direction down act"></button>
|
className={`direction up ${arrow1 === '↑' ? 'act' : ''} ${!isAll && currentObject?.direction === 'vertical' ? 'no-click' : ''}`}
|
||||||
|
onClick={() => {
|
||||||
|
setArrow1('↑')
|
||||||
|
document.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowUp' }))
|
||||||
|
}}
|
||||||
|
></button>
|
||||||
|
<button
|
||||||
|
className={`direction down ${arrow1 === '↓' ? 'act' : ''} ${!isAll && currentObject?.direction === 'vertical' ? 'no-click' : ''}`}
|
||||||
|
onClick={() => {
|
||||||
|
setArrow1('↓')
|
||||||
|
document.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown' }))
|
||||||
|
}}
|
||||||
|
></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="input-move-wrap">
|
<div className="input-move-wrap">
|
||||||
<div className="input-move">
|
<div className="input-move">
|
||||||
<input type="text" className="input-origin" defaultValue={910} />
|
<input
|
||||||
|
type="text"
|
||||||
|
className="input-origin"
|
||||||
|
value={horizonSize}
|
||||||
|
onChange={(e) => setHorizonSize(e.target.value)}
|
||||||
|
readOnly={!isAll && currentObject?.direction === 'horizontal'}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<span>mm</span>
|
<span>mm</span>
|
||||||
<div className="direction-move-wrap">
|
<div className="direction-move-wrap">
|
||||||
<button className="direction left"></button>
|
<button
|
||||||
<button className="direction right"></button>
|
className={`direction left ${arrow2 === '←' ? 'act' : ''} ${!isAll && currentObject?.direction === 'horizontal' ? 'no-click' : ''}`}
|
||||||
|
onClick={() => {
|
||||||
|
setArrow2('←')
|
||||||
|
document.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft' }))
|
||||||
|
}}
|
||||||
|
></button>
|
||||||
|
<button
|
||||||
|
className={`direction right ${arrow2 === '→' ? 'act' : ''} ${!isAll && currentObject?.direction === 'horizontal' ? 'no-click' : ''}`}
|
||||||
|
onClick={() => {
|
||||||
|
setArrow2('→')
|
||||||
|
document.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight' }))
|
||||||
|
}}
|
||||||
|
></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="grid-btn-wrap">
|
<div className="grid-btn-wrap">
|
||||||
<button className="btn-frame modal act">{getMessage('modal.grid.move.save')}</button>
|
<button className="btn-frame modal act" onClick={handleApply}>
|
||||||
|
{getMessage('modal.grid.move.save')}
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1215,6 +1215,7 @@ export default function StuffDetail() {
|
|||||||
tempFlg: '0',
|
tempFlg: '0',
|
||||||
workNo: null,
|
workNo: null,
|
||||||
workName: null,
|
workName: null,
|
||||||
|
userId: session.userId,
|
||||||
}
|
}
|
||||||
|
|
||||||
//수직적설량, 설치높이 0인지 체크
|
//수직적설량, 설치높이 0인지 체크
|
||||||
@ -1334,6 +1335,7 @@ export default function StuffDetail() {
|
|||||||
workNo: null,
|
workNo: null,
|
||||||
workName: null,
|
workName: null,
|
||||||
objectNo: objectNo ? objectNo : '',
|
objectNo: objectNo ? objectNo : '',
|
||||||
|
userId: session.userId,
|
||||||
}
|
}
|
||||||
|
|
||||||
//1차점 or 2차점 안고르고 임시저장하면
|
//1차점 or 2차점 안고르고 임시저장하면
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import { canvasState, dotLineGridSettingState } from '@/store/canvasAtom'
|
|||||||
import { useEffect } from 'react'
|
import { useEffect } from 'react'
|
||||||
import { gridColorState } from '@/store/gridAtom'
|
import { gridColorState } from '@/store/gridAtom'
|
||||||
import { gridDisplaySelector } from '@/store/settingAtom'
|
import { gridDisplaySelector } from '@/store/settingAtom'
|
||||||
|
const GRID_PADDING = 5
|
||||||
export function useGrid() {
|
export function useGrid() {
|
||||||
const canvas = useRecoilValue(canvasState)
|
const canvas = useRecoilValue(canvasState)
|
||||||
|
|
||||||
@ -108,6 +108,7 @@ export function useGrid() {
|
|||||||
name: 'lineGrid',
|
name: 'lineGrid',
|
||||||
strokeDashArray: [5, 2],
|
strokeDashArray: [5, 2],
|
||||||
opacity: 0.3,
|
opacity: 0.3,
|
||||||
|
padding: GRID_PADDING,
|
||||||
direction: 'horizontal',
|
direction: 'horizontal',
|
||||||
visible: isGridDisplay,
|
visible: isGridDisplay,
|
||||||
},
|
},
|
||||||
@ -130,6 +131,7 @@ export function useGrid() {
|
|||||||
name: 'lineGrid',
|
name: 'lineGrid',
|
||||||
strokeDashArray: [5, 2],
|
strokeDashArray: [5, 2],
|
||||||
opacity: 0.3,
|
opacity: 0.3,
|
||||||
|
padding: GRID_PADDING,
|
||||||
direction: 'vertical',
|
direction: 'vertical',
|
||||||
visible: isGridDisplay,
|
visible: isGridDisplay,
|
||||||
},
|
},
|
||||||
@ -141,5 +143,46 @@ export function useGrid() {
|
|||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
}, [dotLineGridSetting])
|
}, [dotLineGridSetting])
|
||||||
|
|
||||||
return {}
|
const move = (object, x, y) => {
|
||||||
|
object.set({
|
||||||
|
...object,
|
||||||
|
x1: object.direction === 'vertical' ? object.x1 + x : 0,
|
||||||
|
x2: object.direction === 'vertical' ? object.x1 + x : canvas.width,
|
||||||
|
y1: object.direction === 'vertical' ? 0 : object.y1 + y,
|
||||||
|
y2: object.direction === 'vertical' ? canvas.height : object.y1 + y,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const copy = (object, length) => {
|
||||||
|
const lineStartX = object.direction === 'vertical' ? object.x1 + length : 0
|
||||||
|
const lineEndX = object.direction === 'vertical' ? object.x2 + length : canvas.width
|
||||||
|
const lineStartY = object.direction === 'vertical' ? 0 : object.y1 + length
|
||||||
|
const lineEndY = object.direction === 'vertical' ? canvas.width : object.y1 + length
|
||||||
|
|
||||||
|
const line = new fabric.Line([lineStartX, lineStartY, lineEndX, lineEndY], {
|
||||||
|
stroke: gridColor,
|
||||||
|
strokeWidth: 1,
|
||||||
|
selectable: true,
|
||||||
|
lockMovementX: true,
|
||||||
|
lockMovementY: true,
|
||||||
|
lockRotation: true,
|
||||||
|
lockScalingX: true,
|
||||||
|
lockScalingY: true,
|
||||||
|
strokeDashArray: [5, 2],
|
||||||
|
opacity: 0.3,
|
||||||
|
padding: GRID_PADDING,
|
||||||
|
direction: object.direction,
|
||||||
|
visible: isGridDisplay,
|
||||||
|
name: object.name,
|
||||||
|
})
|
||||||
|
|
||||||
|
canvas.add(line)
|
||||||
|
canvas.setActiveObject(line)
|
||||||
|
canvas.renderAll()
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
move,
|
||||||
|
copy,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import { useContext, useEffect, useReducer, useState } from 'react'
|
|||||||
import { useRecoilState, useRecoilValue } from 'recoil'
|
import { useRecoilState, useRecoilValue } from 'recoil'
|
||||||
import { globalLocaleStore } from '@/store/localeAtom'
|
import { globalLocaleStore } from '@/store/localeAtom'
|
||||||
import { estimateState, floorPlanObjectState } from '@/store/floorPlanObjectAtom'
|
import { estimateState, floorPlanObjectState } from '@/store/floorPlanObjectAtom'
|
||||||
import { isObjectNotEmpty } from '@/util/common-utils'
|
import { isObjectNotEmpty, isNotEmptyArray } from '@/util/common-utils'
|
||||||
import { SessionContext } from '@/app/SessionProvider'
|
import { SessionContext } from '@/app/SessionProvider'
|
||||||
import { useMessage } from '@/hooks/useMessage'
|
import { useMessage } from '@/hooks/useMessage'
|
||||||
import { useRouter } from 'next/navigation'
|
import { useRouter } from 'next/navigation'
|
||||||
@ -202,17 +202,23 @@ export const useEstimateController = (planNo) => {
|
|||||||
if (flag && fileFlg && itemFlg) {
|
if (flag && fileFlg && itemFlg) {
|
||||||
//1. 첨부파일 저장시작
|
//1. 첨부파일 저장시작
|
||||||
const formData = new FormData()
|
const formData = new FormData()
|
||||||
formData.append('file', estimateData.fileList)
|
if (isNotEmptyArray(estimateData.tempFileList) > 1) {
|
||||||
formData.append('objectNo', estimateData.objectNo)
|
estimateData.tempFileList.forEach((file) => {
|
||||||
formData.append('planNo', estimateData.planNo)
|
formData.append('files', file)
|
||||||
formData.append('category', '10')
|
})
|
||||||
formData.append('userId', estimateData.userId)
|
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 })
|
||||||
|
}
|
||||||
|
|
||||||
await post({ url: '/api/file/fileUpload', data: formData })
|
|
||||||
//첨부파일저장끝
|
//첨부파일저장끝
|
||||||
|
|
||||||
//제품라인 추가했는데 아이템 안고르고 저장하면itemId=''은 날리고 나머지 저장하기
|
//제품라인 추가했는데 아이템 안고르고 저장하면itemId=''은 날리고 나머지 저장하기
|
||||||
estimateData.itemList = estimateData.itemList.filter((item) => item.itemId !== '')
|
// estimateData.itemList = estimateData.itemList.filter((item) => item.itemId !== '')
|
||||||
|
estimateData.itemList = estimateData.itemList.filter((item) => item.delFlg === '0' || !item.addFlg)
|
||||||
|
|
||||||
let delCnt = 0
|
let delCnt = 0
|
||||||
estimateData.itemList.map((item) => {
|
estimateData.itemList.map((item) => {
|
||||||
@ -224,7 +230,6 @@ export const useEstimateController = (planNo) => {
|
|||||||
return alert(getMessage('estimate.detail.save.requiredItem'))
|
return alert(getMessage('estimate.detail.save.requiredItem'))
|
||||||
}
|
}
|
||||||
|
|
||||||
// console.log('최종 아이템 정보::;', estimateData.itemList)
|
|
||||||
let option = []
|
let option = []
|
||||||
estimateData.itemList.forEach((item) => {
|
estimateData.itemList.forEach((item) => {
|
||||||
if (item.specialNoteCd) {
|
if (item.specialNoteCd) {
|
||||||
@ -233,8 +238,8 @@ export const useEstimateController = (planNo) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// console.log('아이템리스트::', estimateData.itemList)
|
console.log('아이템리스트::', estimateData.itemList)
|
||||||
// console.log('최종 정보::;', estimateData)
|
console.log('최종 정보::;', estimateData)
|
||||||
//2. 상세데이터 저장
|
//2. 상세데이터 저장
|
||||||
// return
|
// return
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -521,11 +521,23 @@ export function useContextMenu() {
|
|||||||
{
|
{
|
||||||
id: 'remove',
|
id: 'remove',
|
||||||
name: getMessage('contextmenu.remove'),
|
name: getMessage('contextmenu.remove'),
|
||||||
|
fn: () => {
|
||||||
|
canvas.remove(currentObject)
|
||||||
|
canvas.discardActiveObject()
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'removeAll',
|
id: 'removeAll',
|
||||||
name: getMessage('contextmenu.remove.all'),
|
name: getMessage('contextmenu.remove.all'),
|
||||||
fn: () => {},
|
fn: () => {
|
||||||
|
canvas
|
||||||
|
.getObjects()
|
||||||
|
.filter((obj) => ['tempGrid', 'lineGrid', 'dotGrid'].includes(obj.name))
|
||||||
|
.forEach((grid) => {
|
||||||
|
canvas.remove(grid)
|
||||||
|
})
|
||||||
|
canvas.discardActiveObject()
|
||||||
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
])
|
])
|
||||||
|
|||||||
@ -143,8 +143,8 @@ export function usePlan() {
|
|||||||
const checkUnsavedCanvasPlan = async (userId) => {
|
const checkUnsavedCanvasPlan = async (userId) => {
|
||||||
swalFire({
|
swalFire({
|
||||||
text:
|
text:
|
||||||
(!initCanvasPlans.some((initCanvasPlans) => initCanvasPlans.id === plan.id) ? 'New ' : '') +
|
(!initCanvasPlans.some((initCanvasPlans) => initCanvasPlans.id === currentCanvasPlan.id) ? 'New ' : '') +
|
||||||
`Plan ${plan.ordering}의 변경 사항을 저장하시겠습니까?`,
|
`Plan ${currentCanvasPlan.ordering}의 변경 사항을 저장하시겠습니까?`,
|
||||||
type: 'confirm',
|
type: 'confirm',
|
||||||
confirmFn: async () => {
|
confirmFn: async () => {
|
||||||
initCanvasPlans.some((plan) => plan.id === currentCanvasPlan.id)
|
initCanvasPlans.some((plan) => plan.id === currentCanvasPlan.id)
|
||||||
@ -374,7 +374,7 @@ export function usePlan() {
|
|||||||
if (res.length > 0) {
|
if (res.length > 0) {
|
||||||
setInitCanvasPlans(res)
|
setInitCanvasPlans(res)
|
||||||
setPlans(res)
|
setPlans(res)
|
||||||
updateCurrentPlan(Number(pid))
|
updateCurrentPlan(res[pid - 1].id)
|
||||||
setPlanNum(res.length)
|
setPlanNum(res.length)
|
||||||
} else {
|
} else {
|
||||||
addPlan(userId, objectNo, '')
|
addPlan(userId, objectNo, '')
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import { useRecoilState, useRecoilValue } from 'recoil'
|
|||||||
import { gridColorState } from '@/store/gridAtom'
|
import { gridColorState } from '@/store/gridAtom'
|
||||||
import { gridDisplaySelector } from '@/store/settingAtom'
|
import { gridDisplaySelector } from '@/store/settingAtom'
|
||||||
|
|
||||||
|
const GRID_PADDING = 5
|
||||||
export function useTempGrid() {
|
export function useTempGrid() {
|
||||||
const canvas = useRecoilValue(canvasState)
|
const canvas = useRecoilValue(canvasState)
|
||||||
const gridColor = useRecoilValue(gridColorState)
|
const gridColor = useRecoilValue(gridColorState)
|
||||||
@ -23,6 +24,7 @@ export function useTempGrid() {
|
|||||||
lockScalingY: true,
|
lockScalingY: true,
|
||||||
strokeDashArray: [5, 2],
|
strokeDashArray: [5, 2],
|
||||||
opacity: 0.3,
|
opacity: 0.3,
|
||||||
|
padding: GRID_PADDING,
|
||||||
direction: 'vertical',
|
direction: 'vertical',
|
||||||
visible: isGridDisplay,
|
visible: isGridDisplay,
|
||||||
name: 'tempGrid',
|
name: 'tempGrid',
|
||||||
@ -50,6 +52,7 @@ export function useTempGrid() {
|
|||||||
lockScalingY: true,
|
lockScalingY: true,
|
||||||
strokeDashArray: [5, 2],
|
strokeDashArray: [5, 2],
|
||||||
opacity: 0.3,
|
opacity: 0.3,
|
||||||
|
padding: GRID_PADDING,
|
||||||
name: 'tempGrid',
|
name: 'tempGrid',
|
||||||
visible: isGridDisplay,
|
visible: isGridDisplay,
|
||||||
direction: 'horizontal',
|
direction: 'horizontal',
|
||||||
|
|||||||
@ -12,7 +12,6 @@ const IMAGE_FILE_PATH = 'public/plan-bg-images'
|
|||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
const convertDwgToPng = async (fileName, data) => {
|
const convertDwgToPng = async (fileName, data) => {
|
||||||
console.log('fileName', fileName)
|
|
||||||
try {
|
try {
|
||||||
await fs.readdir(CAD_FILE_PATH)
|
await fs.readdir(CAD_FILE_PATH)
|
||||||
} catch {
|
} catch {
|
||||||
|
|||||||
@ -833,6 +833,7 @@
|
|||||||
"estimate.detail.fileFlg": "後日資料提出",
|
"estimate.detail.fileFlg": "後日資料提出",
|
||||||
"estimate.detail.header.fileList1": "ファイル添付",
|
"estimate.detail.header.fileList1": "ファイル添付",
|
||||||
"estimate.detail.fileList.btn": "ファイル選択",
|
"estimate.detail.fileList.btn": "ファイル選択",
|
||||||
|
"estimate.detail.fileList.extCheck": "そのファイルはイメージファイルではありません",
|
||||||
"estimate.detail.header.fileList2": "添付ファイル一覧",
|
"estimate.detail.header.fileList2": "添付ファイル一覧",
|
||||||
"estimate.detail.header.specialEstimate": "見積もりの具体的な",
|
"estimate.detail.header.specialEstimate": "見積もりの具体的な",
|
||||||
"estimate.detail.header.specialEstimateProductInfo": "製品情報",
|
"estimate.detail.header.specialEstimateProductInfo": "製品情報",
|
||||||
|
|||||||
@ -843,6 +843,7 @@
|
|||||||
"estimate.detail.fileFlg": "후일자료제출",
|
"estimate.detail.fileFlg": "후일자료제출",
|
||||||
"estimate.detail.header.fileList1": "파일첨부",
|
"estimate.detail.header.fileList1": "파일첨부",
|
||||||
"estimate.detail.fileList.btn": "파일선택",
|
"estimate.detail.fileList.btn": "파일선택",
|
||||||
|
"estimate.detail.fileList.extCheck": "해당 파일은 이미지 파일이 아닙니다",
|
||||||
"estimate.detail.header.fileList2": "첨부파일 목록",
|
"estimate.detail.header.fileList2": "첨부파일 목록",
|
||||||
"estimate.detail.header.specialEstimate": "견적특이사항",
|
"estimate.detail.header.specialEstimate": "견적특이사항",
|
||||||
"estimate.detail.header.specialEstimateProductInfo": "제품정보",
|
"estimate.detail.header.specialEstimateProductInfo": "제품정보",
|
||||||
|
|||||||
109
src/styles/spinner.scss
Normal file
109
src/styles/spinner.scss
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
.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);
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
146
yarn.lock
146
yarn.lock
@ -547,55 +547,55 @@
|
|||||||
semver "^7.3.5"
|
semver "^7.3.5"
|
||||||
tar "^6.1.11"
|
tar "^6.1.11"
|
||||||
|
|
||||||
"@next/env@14.2.3":
|
"@next/env@14.2.14":
|
||||||
version "14.2.3"
|
version "14.2.14"
|
||||||
resolved "https://registry.npmjs.org/@next/env/-/env-14.2.3.tgz"
|
resolved "https://registry.npmjs.org/@next/env/-/env-14.2.14.tgz"
|
||||||
integrity sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==
|
integrity sha512-/0hWQfiaD5//LvGNgc8PjvyqV50vGK0cADYzaoOOGN8fxzBn3iAiaq3S0tCRnFBldq0LVveLcxCTi41ZoYgAgg==
|
||||||
|
|
||||||
"@next/swc-darwin-arm64@14.2.3":
|
"@next/swc-darwin-arm64@14.2.14":
|
||||||
version "14.2.3"
|
version "14.2.14"
|
||||||
resolved "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz"
|
resolved "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.14.tgz"
|
||||||
integrity sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==
|
integrity sha512-bsxbSAUodM1cjYeA4o6y7sp9wslvwjSkWw57t8DtC8Zig8aG8V6r+Yc05/9mDzLKcybb6EN85k1rJDnMKBd9Gw==
|
||||||
|
|
||||||
"@next/swc-darwin-x64@14.2.3":
|
"@next/swc-darwin-x64@14.2.14":
|
||||||
version "14.2.3"
|
version "14.2.14"
|
||||||
resolved "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz"
|
resolved "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.14.tgz"
|
||||||
integrity sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==
|
integrity sha512-cC9/I+0+SK5L1k9J8CInahduTVWGMXhQoXFeNvF0uNs3Bt1Ub0Azb8JzTU9vNCr0hnaMqiWu/Z0S1hfKc3+dww==
|
||||||
|
|
||||||
"@next/swc-linux-arm64-gnu@14.2.3":
|
"@next/swc-linux-arm64-gnu@14.2.14":
|
||||||
version "14.2.3"
|
version "14.2.14"
|
||||||
resolved "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz"
|
resolved "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.14.tgz"
|
||||||
integrity sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==
|
integrity sha512-RMLOdA2NU4O7w1PQ3Z9ft3PxD6Htl4uB2TJpocm+4jcllHySPkFaUIFacQ3Jekcg6w+LBaFvjSPthZHiPmiAUg==
|
||||||
|
|
||||||
"@next/swc-linux-arm64-musl@14.2.3":
|
"@next/swc-linux-arm64-musl@14.2.14":
|
||||||
version "14.2.3"
|
version "14.2.14"
|
||||||
resolved "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz"
|
resolved "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.14.tgz"
|
||||||
integrity sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==
|
integrity sha512-WgLOA4hT9EIP7jhlkPnvz49iSOMdZgDJVvbpb8WWzJv5wBD07M2wdJXLkDYIpZmCFfo/wPqFsFR4JS4V9KkQ2A==
|
||||||
|
|
||||||
"@next/swc-linux-x64-gnu@14.2.3":
|
"@next/swc-linux-x64-gnu@14.2.14":
|
||||||
version "14.2.3"
|
version "14.2.14"
|
||||||
resolved "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz"
|
resolved "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.14.tgz"
|
||||||
integrity sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==
|
integrity sha512-lbn7svjUps1kmCettV/R9oAvEW+eUI0lo0LJNFOXoQM5NGNxloAyFRNByYeZKL3+1bF5YE0h0irIJfzXBq9Y6w==
|
||||||
|
|
||||||
"@next/swc-linux-x64-musl@14.2.3":
|
"@next/swc-linux-x64-musl@14.2.14":
|
||||||
version "14.2.3"
|
version "14.2.14"
|
||||||
resolved "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz"
|
resolved "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.14.tgz"
|
||||||
integrity sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==
|
integrity sha512-7TcQCvLQ/hKfQRgjxMN4TZ2BRB0P7HwrGAYL+p+m3u3XcKTraUFerVbV3jkNZNwDeQDa8zdxkKkw2els/S5onQ==
|
||||||
|
|
||||||
"@next/swc-win32-arm64-msvc@14.2.3":
|
"@next/swc-win32-arm64-msvc@14.2.14":
|
||||||
version "14.2.3"
|
version "14.2.14"
|
||||||
resolved "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz"
|
resolved "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.14.tgz"
|
||||||
integrity sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==
|
integrity sha512-8i0Ou5XjTLEje0oj0JiI0Xo9L/93ghFtAUYZ24jARSeTMXLUx8yFIdhS55mTExq5Tj4/dC2fJuaT4e3ySvXU1A==
|
||||||
|
|
||||||
"@next/swc-win32-ia32-msvc@14.2.3":
|
"@next/swc-win32-ia32-msvc@14.2.14":
|
||||||
version "14.2.3"
|
version "14.2.14"
|
||||||
resolved "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz"
|
resolved "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.14.tgz"
|
||||||
integrity sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==
|
integrity sha512-2u2XcSaDEOj+96eXpyjHjtVPLhkAFw2nlaz83EPeuK4obF+HmtDJHqgR1dZB7Gb6V/d55FL26/lYVd0TwMgcOQ==
|
||||||
|
|
||||||
"@next/swc-win32-x64-msvc@14.2.3":
|
"@next/swc-win32-x64-msvc@14.2.14":
|
||||||
version "14.2.3"
|
version "14.2.14"
|
||||||
resolved "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz"
|
resolved "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.14.tgz"
|
||||||
integrity sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==
|
integrity sha512-MZom+OvZ1NZxuRovKt1ApevjiUJTcU2PmdJKL66xUPaJeRywnbGGRWUlaAOwunD6dX+pm83vj979NTC8QXjGWg==
|
||||||
|
|
||||||
"@nextui-org/accordion@2.0.38":
|
"@nextui-org/accordion@2.0.38":
|
||||||
version "2.0.38"
|
version "2.0.38"
|
||||||
@ -2544,7 +2544,7 @@
|
|||||||
resolved "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz"
|
resolved "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz"
|
||||||
integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==
|
integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==
|
||||||
|
|
||||||
"@swc/helpers@0.5.5", "@swc/helpers@^0.5.0":
|
"@swc/helpers@0.5.5":
|
||||||
version "0.5.5"
|
version "0.5.5"
|
||||||
resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz"
|
resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz"
|
||||||
integrity sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==
|
integrity sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==
|
||||||
@ -2552,6 +2552,13 @@
|
|||||||
"@swc/counter" "^0.1.3"
|
"@swc/counter" "^0.1.3"
|
||||||
tslib "^2.4.0"
|
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":
|
"@tediousjs/connection-string@^0.5.0":
|
||||||
version "0.5.0"
|
version "0.5.0"
|
||||||
resolved "https://registry.npmjs.org/@tediousjs/connection-string/-/connection-string-0.5.0.tgz"
|
resolved "https://registry.npmjs.org/@tediousjs/connection-string/-/connection-string-0.5.0.tgz"
|
||||||
@ -4205,19 +4212,10 @@ asynckit@^0.4.0:
|
|||||||
resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
|
resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
|
||||||
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
|
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
|
||||||
|
|
||||||
axios@^1.6.2:
|
axios@^1.6.2, axios@^1.7.8:
|
||||||
version "1.7.7"
|
version "1.7.8"
|
||||||
resolved "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz"
|
resolved "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz"
|
||||||
integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==
|
integrity sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==
|
||||||
dependencies:
|
|
||||||
follow-redirects "^1.15.6"
|
|
||||||
form-data "^4.0.0"
|
|
||||||
proxy-from-env "^1.1.0"
|
|
||||||
|
|
||||||
axios@^1.7.3:
|
|
||||||
version "1.7.3"
|
|
||||||
resolved "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz"
|
|
||||||
integrity sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==
|
|
||||||
dependencies:
|
dependencies:
|
||||||
follow-redirects "^1.15.6"
|
follow-redirects "^1.15.6"
|
||||||
form-data "^4.0.0"
|
form-data "^4.0.0"
|
||||||
@ -5543,12 +5541,12 @@ next-international@^1.2.4:
|
|||||||
international-types "^0.8.1"
|
international-types "^0.8.1"
|
||||||
server-only "^0.0.1"
|
server-only "^0.0.1"
|
||||||
|
|
||||||
next@14.2.3:
|
next@14.2.14:
|
||||||
version "14.2.3"
|
version "14.2.14"
|
||||||
resolved "https://registry.npmjs.org/next/-/next-14.2.3.tgz"
|
resolved "https://registry.npmjs.org/next/-/next-14.2.14.tgz"
|
||||||
integrity sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==
|
integrity sha512-Q1coZG17MW0Ly5x76shJ4dkC23woLAhhnDnw+DfTc7EpZSGuWrlsZ3bZaO8t6u1Yu8FVfhkqJE+U8GC7E0GLPQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@next/env" "14.2.3"
|
"@next/env" "14.2.14"
|
||||||
"@swc/helpers" "0.5.5"
|
"@swc/helpers" "0.5.5"
|
||||||
busboy "1.6.0"
|
busboy "1.6.0"
|
||||||
caniuse-lite "^1.0.30001579"
|
caniuse-lite "^1.0.30001579"
|
||||||
@ -5556,15 +5554,15 @@ next@14.2.3:
|
|||||||
postcss "8.4.31"
|
postcss "8.4.31"
|
||||||
styled-jsx "5.1.1"
|
styled-jsx "5.1.1"
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
"@next/swc-darwin-arm64" "14.2.3"
|
"@next/swc-darwin-arm64" "14.2.14"
|
||||||
"@next/swc-darwin-x64" "14.2.3"
|
"@next/swc-darwin-x64" "14.2.14"
|
||||||
"@next/swc-linux-arm64-gnu" "14.2.3"
|
"@next/swc-linux-arm64-gnu" "14.2.14"
|
||||||
"@next/swc-linux-arm64-musl" "14.2.3"
|
"@next/swc-linux-arm64-musl" "14.2.14"
|
||||||
"@next/swc-linux-x64-gnu" "14.2.3"
|
"@next/swc-linux-x64-gnu" "14.2.14"
|
||||||
"@next/swc-linux-x64-musl" "14.2.3"
|
"@next/swc-linux-x64-musl" "14.2.14"
|
||||||
"@next/swc-win32-arm64-msvc" "14.2.3"
|
"@next/swc-win32-arm64-msvc" "14.2.14"
|
||||||
"@next/swc-win32-ia32-msvc" "14.2.3"
|
"@next/swc-win32-ia32-msvc" "14.2.14"
|
||||||
"@next/swc-win32-x64-msvc" "14.2.3"
|
"@next/swc-win32-x64-msvc" "14.2.14"
|
||||||
|
|
||||||
node-fetch@^2.6.7:
|
node-fetch@^2.6.7:
|
||||||
version "2.7.0"
|
version "2.7.0"
|
||||||
@ -5954,11 +5952,6 @@ react-select@^5.8.1:
|
|||||||
react-transition-group "^4.3.0"
|
react-transition-group "^4.3.0"
|
||||||
use-isomorphic-layout-effect "^1.1.2"
|
use-isomorphic-layout-effect "^1.1.2"
|
||||||
|
|
||||||
react-spinners@^0.14.1:
|
|
||||||
version "0.14.1"
|
|
||||||
resolved "https://registry.npmjs.org/react-spinners/-/react-spinners-0.14.1.tgz"
|
|
||||||
integrity sha512-2Izq+qgQ08HTofCVEdcAQCXFEYfqTDdfeDQJeo/HHQiQJD4imOicNLhkfN2eh1NYEWVOX4D9ok2lhuDB0z3Aag==
|
|
||||||
|
|
||||||
react-style-singleton@^2.2.1:
|
react-style-singleton@^2.2.1:
|
||||||
version "2.2.1"
|
version "2.2.1"
|
||||||
resolved "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz"
|
resolved "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz"
|
||||||
@ -6148,16 +6141,11 @@ semver@^6.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
|
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
|
||||||
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
|
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
|
||||||
|
|
||||||
semver@^7.3.5:
|
semver@^7.3.5, semver@^7.5.4:
|
||||||
version "7.6.3"
|
version "7.6.3"
|
||||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
|
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
|
||||||
integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
|
integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
|
||||||
|
|
||||||
semver@^7.5.4:
|
|
||||||
version "7.6.2"
|
|
||||||
resolved "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz"
|
|
||||||
integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==
|
|
||||||
|
|
||||||
server-only@^0.0.1:
|
server-only@^0.0.1:
|
||||||
version "0.0.1"
|
version "0.0.1"
|
||||||
resolved "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz"
|
resolved "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user