diff --git a/app/(private)/quest/[id]/page.tsx b/app/(private)/quest/[id]/page.tsx index e1b1527..6086d50 100644 --- a/app/(private)/quest/[id]/page.tsx +++ b/app/(private)/quest/[id]/page.tsx @@ -26,7 +26,7 @@ export default function QuestDetail() { useEffect(() => { const interval = setInterval(() => { queryClient.invalidateQueries({ queryKey: ["@quests", id] }) - }, 5 * 1000) + }, 10 * 1000) return () => clearInterval(interval) }, [quest?.id]) diff --git a/app/(public)/public/quest/[id]/page.tsx b/app/(public)/public/quest/[id]/page.tsx index 660491c..0b5033c 100644 --- a/app/(public)/public/quest/[id]/page.tsx +++ b/app/(public)/public/quest/[id]/page.tsx @@ -24,12 +24,11 @@ export default function QuestDetail() { const queryClient = useQueryClient() const [map, setMap] = useState() const intialized = useRef(false) - // 10초마다 퀘스트 진행 상황을 갱신합니다. useEffect(() => { const interval = setInterval(() => { queryClient.invalidateQueries({ queryKey: ["@quests", id] }) - }, 5 * 1000) + }, 10 * 1000) return () => clearInterval(interval) }, [quest?.id]) @@ -50,14 +49,6 @@ export default function QuestDetail() { openGuide() }, []) - // 10초마다 퀘스트 진행 상황을 갱신합니다. - useEffect(() => { - const interval = setInterval(() => { - queryClient.invalidateQueries({ queryKey: ["@quests", id] }) - }, 10 * 1000) - return () => clearInterval(interval) - }, [quest?.id]) - function getCenterOf(buildings: QuestBuilding[]) { const coords = buildings.map((b) => b.location) const center = { diff --git a/app/icons/Reload.tsx b/app/icons/Reload.tsx new file mode 100644 index 0000000..1f4cbf0 --- /dev/null +++ b/app/icons/Reload.tsx @@ -0,0 +1,14 @@ +interface IconProps { + size?: number + color?: string +} +export default function Reload({ size, color = "black" }: IconProps) { + return ( + + + + ) +} diff --git a/app/modals/BuildingDetailSheet/BuildingDetailSheet.desktop.tsx b/app/modals/BuildingDetailSheet/BuildingDetailSheet.desktop.tsx index 93612bd..b1075d6 100644 --- a/app/modals/BuildingDetailSheet/BuildingDetailSheet.desktop.tsx +++ b/app/modals/BuildingDetailSheet/BuildingDetailSheet.desktop.tsx @@ -1,8 +1,14 @@ import { BasicModalProps } from "@reactleaf/modal" +import { useQueryClient } from "@tanstack/react-query" +import { useMemo } from "react" -import { QuestBuilding } from "@/lib/models/quest" +import { useQuestBuilding } from "@/lib/apis/api" +import { QuestBuilding, QuestPlace } from "@/lib/models/quest" + +import Reload from "@/icons/Reload" import RightSheet from "../_template/RightSheet" +import * as S from "./BuildingDetailSheet.style" import PlaceCard from "./PlaceCard" interface Props extends BasicModalProps { @@ -11,24 +17,42 @@ interface Props extends BasicModalProps { } export const defaultOverlayOptions = { closeDelay: 200, dim: false } -export default function BuildingDetailSheet({ building, questId, visible, close }: Props) { - const conquered = building.places.filter((place) => place.isConquered || place.isClosed || place.isNotAccessible) - const notConquered = building.places.filter( - (place) => !place.isConquered && !place.isClosed && !place.isNotAccessible, - ) +export default function BuildingDetailSheet({ building: initialData, questId, visible, close }: Props) { + const { data: building } = useQuestBuilding({ questId, buildingId: initialData.buildingId }) + const queryClient = useQueryClient() + + const isConquered = (place: QuestPlace) => place.isConquered || place.isNotAccessible || place.isClosed + + function reloadQuest() { + queryClient.invalidateQueries({ queryKey: ["@quests", questId] }) + } + + // 활동 중 장소 순서가 바뀌는 것을 막습니다. + const sortedPlaces = useMemo(() => { + if (!building) return [] + const conquered = initialData.places.filter(isConquered) + const notConquered = initialData.places.filter((p) => !isConquered(p)) + return [...notConquered, ...conquered].map((p) => building.places.find((b) => b.placeId === p.placeId) || p) + }, [initialData, building]) + + if (!building) return null + + const conquered = building.places.filter(isConquered) const title = ( - <> - {building.name} -
+ +
{building.name}
정복 완료 {conquered.length} / {building.places.length} - + + + +
) return ( - {[...notConquered, ...conquered].map((place) => ( + {sortedPlaces.map((place) => ( ))} diff --git a/app/modals/BuildingDetailSheet/BuildingDetailSheet.mobile.tsx b/app/modals/BuildingDetailSheet/BuildingDetailSheet.mobile.tsx index 8bec841..4c99c83 100644 --- a/app/modals/BuildingDetailSheet/BuildingDetailSheet.mobile.tsx +++ b/app/modals/BuildingDetailSheet/BuildingDetailSheet.mobile.tsx @@ -1,12 +1,16 @@ import { BasicModalProps } from "@reactleaf/modal" +import { useQueryClient } from "@tanstack/react-query" import { useAtom } from "jotai" -import { useEffect } from "react" +import { useEffect, useMemo } from "react" +import { useQuestBuilding } from "@/lib/apis/api" import { AppState } from "@/lib/globalAtoms" -import { QuestBuilding } from "@/lib/models/quest" +import { QuestBuilding, QuestPlace } from "@/lib/models/quest" +import Reload from "@/icons/Reload" import BottomSheet from "@/modals/_template/BottomSheet" +import * as S from "./BuildingDetailSheet.style" import PlaceCard from "./PlaceCard" interface Props extends BasicModalProps { @@ -15,8 +19,10 @@ interface Props extends BasicModalProps { } export const defaultOverlayOptions = { closeDelay: 200, dim: false } -export default function BuildingDetailSheet({ building, questId, visible, close }: Props) { +export default function BuildingDetailSheet({ building: initialData, questId, visible, close }: Props) { + const { data: building } = useQuestBuilding({ questId, buildingId: initialData.buildingId }) const [appState, setAppState] = useAtom(AppState) + const queryClient = useQueryClient() useEffect(() => { setAppState((prev) => ({ ...prev, isHeaderHidden: true })) @@ -25,21 +31,38 @@ export default function BuildingDetailSheet({ building, questId, visible, close } }, []) - const conquered = building.places.filter((place) => place.isConquered) - const notConquered = building.places.filter((place) => !place.isConquered) + function reloadQuest() { + queryClient.invalidateQueries({ queryKey: ["@quests", questId] }) + } + + const isConquered = (place: QuestPlace) => place.isConquered || place.isNotAccessible || place.isClosed + + // 활동 중 장소 순서가 바뀌는 것을 막습니다. + const sortedPlaces = useMemo(() => { + if (!building) return [] + const conquered = initialData.places.filter(isConquered) + const notConquered = initialData.places.filter((p) => !isConquered(p)) + return [...notConquered, ...conquered].map((p) => building.places.find((b) => b.placeId === p.placeId) || p) + }, [initialData, building]) + + if (!building) return null + + const conquered = building.places.filter(isConquered) const title = ( - <> - {building.name} -
+ +
{building.name}
정복 완료 {conquered.length} / {building.places.length} - + + + +
) return ( - {[...notConquered, ...conquered].map((place) => ( + {sortedPlaces.map((place) => ( ))} diff --git a/app/modals/BuildingDetailSheet/BuildingDetailSheet.style.ts b/app/modals/BuildingDetailSheet/BuildingDetailSheet.style.ts new file mode 100644 index 0000000..60c1e88 --- /dev/null +++ b/app/modals/BuildingDetailSheet/BuildingDetailSheet.style.ts @@ -0,0 +1,36 @@ +import { styled } from "@/styles/jsx" + +export const CustomTitle = styled("div", { + base: { + position: "relative", + display: "flex", + flexFlow: "column", + alignItems: "center", + justifyContent: "center", + width: "full", + gap: 4, + fontSize: 18, + fontWeight: 700, + textAlign: "center", + "& small": { + fontSize: 14, + fontWeight: 500, + }, + }, +}) + +export const ReloadButton = styled("button", { + base: { + position: "absolute", + top: "50%", + right: 20, + transform: "translateY(-50%)", + padding: 4, + backgroundColor: "transparent", + border: "none", + cursor: "pointer", + "&:hover": { + backgroundColor: "rgba(0, 0, 0, 0.1)", + }, + }, +}) diff --git a/app/modals/BuildingDetailSheet/PlaceCard.style.ts b/app/modals/BuildingDetailSheet/PlaceCard.style.ts index 8a25d86..3f1ef48 100644 --- a/app/modals/BuildingDetailSheet/PlaceCard.style.ts +++ b/app/modals/BuildingDetailSheet/PlaceCard.style.ts @@ -20,8 +20,8 @@ export const Header = styled("div", { export const PlaceName = styled("h3", { base: { - fontSize: 18, - fontWeight: 700, + fontSize: 16, + fontWeight: 600, }, }) diff --git a/app/modals/BuildingDetailSheet/PlaceCard.tsx b/app/modals/BuildingDetailSheet/PlaceCard.tsx index a759318..ea73f5e 100644 --- a/app/modals/BuildingDetailSheet/PlaceCard.tsx +++ b/app/modals/BuildingDetailSheet/PlaceCard.tsx @@ -12,11 +12,11 @@ import * as S from "./PlaceCard.style" interface Props { place: QuestPlace questId: string + onUpdate?: (place: QuestPlace) => void } -export default function PlaceCard({ place, questId }: Props) { +export default function PlaceCard({ place, questId, onUpdate }: Props) { const [isClosed, setClosed] = useState(place.isClosed) const [isNotAccessible, setNotAccessible] = useState(place.isNotAccessible) - const noInfo = !place.isConquered && !isClosed && !isNotAccessible const visited = place.isConquered || isClosed || isNotAccessible const isReversible = !place.isConquered && (isClosed || isNotAccessible) @@ -53,6 +53,7 @@ export default function PlaceCard({ place, questId }: Props) { placeId: place.placeId, isClosed, }) + onUpdate?.({ ...place, isClosed }) setClosed(isClosed) } @@ -63,6 +64,7 @@ export default function PlaceCard({ place, questId }: Props) { placeId: place.placeId, isNotAccessible, }) + onUpdate?.({ ...place, isNotAccessible }) setNotAccessible(isNotAccessible) } @@ -81,7 +83,9 @@ export default function PlaceCard({ place, questId }: Props) { {place.name} {place.isConquered && 정복} - {!isClosed && place.isClosedExpected && 폐업추정} + {!place.isConquered && !isClosed && place.isClosedExpected && ( + 폐업추정 + )} {isClosed && 폐업확인} {isNotAccessible && 접근불가} diff --git a/app/modals/_template/BottomSheet/BottomSheet.style.ts b/app/modals/_template/BottomSheet/BottomSheet.style.ts index 7a1e4fc..5f3ce85 100644 --- a/app/modals/_template/BottomSheet/BottomSheet.style.ts +++ b/app/modals/_template/BottomSheet/BottomSheet.style.ts @@ -57,6 +57,7 @@ export const SheetTitle = styled("h5", { export const CloseButton = styled("button", { base: { position: "absolute", + zIndex: 1, top: "50%", transform: "translateY(-50%)", left: 16, diff --git a/app/modals/_template/BottomSheet/BottomSheet.tsx b/app/modals/_template/BottomSheet/BottomSheet.tsx index 63c6a66..09828ad 100644 --- a/app/modals/_template/BottomSheet/BottomSheet.tsx +++ b/app/modals/_template/BottomSheet/BottomSheet.tsx @@ -18,7 +18,7 @@ export default function BottomSheet({ title, actionButton, style, children, visi - {title} + {typeof title == "string" ? {title} : title} {actionButton} )} diff --git a/lib/apis/api.ts b/lib/apis/api.ts index ad643b8..a002f68 100644 --- a/lib/apis/api.ts +++ b/lib/apis/api.ts @@ -13,9 +13,17 @@ export function useQuest({ id }: { id: string }) { queryKey: ["@quests", id], queryFn: ({ queryKey }) => http(`/admin/clubQuests/${queryKey[1]}`).then((res) => res.json() as Promise), + staleTime: 10 * 1000, }) } +// 특정 빌딩 정보만 가져오기 +export function useQuestBuilding({ questId, buildingId }: { questId: string; buildingId: string }) { + const { data, ...others } = useQuest({ id: questId }) + const building = data?.buildings.find((b) => b.buildingId === buildingId) + return { data: building, ...others } +} + type UpdateQuestStatusParams = { questId: string placeId: string @@ -183,16 +191,15 @@ export function crawlChunk({ boundary }: { boundary: LatLng[] }) { }) } - -export type ImageUploadPurposeType = 'BANNER'; +export type ImageUploadPurposeType = "BANNER" export function getImageUploadUrls({ purposeType, count, filenameExtension, -} : { - purposeType: ImageUploadPurposeType, - count: number, - filenameExtension: string, +}: { + purposeType: ImageUploadPurposeType + count: number + filenameExtension: string }): Promise { return http("/admin/image-upload-urls", { method: "POST", @@ -200,11 +207,10 @@ export function getImageUploadUrls({ purposeType, count, filenameExtension, - }) + }), + }).then((res) => { + return res.json() as Promise }) - .then((res) => { - return res.json() as Promise - }) } export interface GetImageUploadUrlsResult { urls: ImageUploadUrl[] diff --git a/package.json b/package.json index 5420e3e..eef4598 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,8 @@ "react-responsive": "^9.0.2", "react-select": "^5.8.0", "react-toastify": "^9.1.3", - "return-fetch": "^0.4.5" + "return-fetch": "^0.4.5", + "sharp": "^0.33.5" }, "devDependencies": { "@pandacss/dev": "^0.23.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eed0619..9170634 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,10 +10,10 @@ importers: dependencies: '@reactleaf/input': specifier: 0.6.1-beta - version: 0.6.1-beta(react-datepicker@6.9.0)(react-dom@18.3.1)(react-hook-form@7.53.1)(react-select@5.8.2)(react@18.3.1) + version: 0.6.1-beta(react-datepicker@6.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-hook-form@7.53.1(react@18.3.1))(react-select@5.8.2(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@reactleaf/modal': specifier: ^1.1.3 - version: 1.1.6(react-dom@18.3.1)(react@18.3.1) + version: 1.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@reactleaf/storage': specifier: ^0.2.0 version: 0.2.0 @@ -22,7 +22,7 @@ importers: version: 5.59.16(react@18.3.1) '@types/react-datepicker': specifier: ^4.19.6 - version: 4.19.6(react-dom@18.3.1)(react@18.3.1) + version: 4.19.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) date-fns: specifier: ^3.3.1 version: 3.6.0 @@ -34,7 +34,7 @@ importers: version: 2.10.1(@types/react@18.3.12)(react@18.3.1) next: specifier: ^14.1.0 - version: 14.2.16(react-dom@18.3.1)(react@18.3.1) + version: 14.2.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) polygon-clipping: specifier: ^0.15.7 version: 0.15.7 @@ -46,7 +46,7 @@ importers: version: 18.3.1 react-datepicker: specifier: ^6.1.0 - version: 6.9.0(react-dom@18.3.1)(react@18.3.1) + version: 6.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: specifier: ^18 version: 18.3.1(react@18.3.1) @@ -58,20 +58,23 @@ importers: version: 9.0.2(react@18.3.1) react-select: specifier: ^5.8.0 - version: 5.8.2(@types/react@18.3.12)(react-dom@18.3.1)(react@18.3.1) + version: 5.8.2(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-toastify: specifier: ^9.1.3 - version: 9.1.3(react-dom@18.3.1)(react@18.3.1) + version: 9.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) return-fetch: specifier: ^0.4.5 version: 0.4.6 + sharp: + specifier: ^0.33.5 + version: 0.33.5 devDependencies: '@pandacss/dev': specifier: ^0.23.0 version: 0.23.0(typescript@5.6.3) '@trivago/prettier-plugin-sort-imports': specifier: ^4.3.0 - version: 4.3.0(prettier@3.3.3) + version: 4.3.0(@vue/compiler-sfc@3.5.12)(prettier@3.3.3) '@types/node': specifier: ^20 version: 20.17.1 @@ -176,6 +179,9 @@ packages: bundledDependencies: - is-unicode-supported + '@emnapi/runtime@1.3.1': + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + '@emotion/babel-plugin@11.12.0': resolution: {integrity: sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==} @@ -407,6 +413,111 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-s390x@0.33.5': + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -865,6 +976,13 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -964,6 +1082,10 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -1361,6 +1483,9 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + is-async-function@2.0.0: resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} engines: {node: '>= 0.4'} @@ -2059,6 +2184,10 @@ packages: shallow-equal@1.2.1: resolution: {integrity: sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==} + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -2071,6 +2200,9 @@ packages: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -2431,6 +2563,11 @@ snapshots: picocolors: 1.1.1 sisteransi: 1.0.5 + '@emnapi/runtime@1.3.1': + dependencies: + tslib: 2.8.0 + optional: true + '@emotion/babel-plugin@11.12.0': dependencies: '@babel/helper-module-imports': 7.25.9 @@ -2468,9 +2605,10 @@ snapshots: '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.3.1) '@emotion/utils': 1.4.1 '@emotion/weak-memoize': 0.4.0 - '@types/react': 18.3.12 hoist-non-react-statics: 3.3.2 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 transitivePeerDependencies: - supports-color @@ -2595,15 +2733,15 @@ snapshots: '@floating-ui/core': 1.6.8 '@floating-ui/utils': 0.2.8 - '@floating-ui/react-dom@2.1.2(react-dom@18.3.1)(react@18.3.1)': + '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/dom': 1.6.11 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@floating-ui/react@0.26.25(react-dom@18.3.1)(react@18.3.1)': + '@floating-ui/react@0.26.25(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1)(react@18.3.1) + '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@floating-ui/utils': 0.2.8 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -2623,6 +2761,81 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} + '@img/sharp-darwin-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + optional: true + + '@img/sharp-darwin-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.5': + optional: true + + '@img/sharp-libvips-linux-s390x@1.0.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + optional: true + + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true + + '@img/sharp-linux-arm@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true + + '@img/sharp-linux-s390x@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.4 + optional: true + + '@img/sharp-linux-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + optional: true + + '@img/sharp-wasm32@0.33.5': + dependencies: + '@emnapi/runtime': 1.3.1 + optional: true + + '@img/sharp-win32-ia32@0.33.5': + optional: true + + '@img/sharp-win32-x64@0.33.5': + optional: true + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 @@ -2856,18 +3069,18 @@ snapshots: '@popperjs/core@2.11.8': {} - '@reactleaf/input@0.6.1-beta(react-datepicker@6.9.0)(react-dom@18.3.1)(react-hook-form@7.53.1)(react-select@5.8.2)(react@18.3.1)': + '@reactleaf/input@0.6.1-beta(react-datepicker@6.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-hook-form@7.53.1(react@18.3.1))(react-select@5.8.2(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@reactleaf/theme': 2.0.2 classnames: 2.5.1 date-fns: 3.6.0 react: 18.3.1 - react-datepicker: 6.9.0(react-dom@18.3.1)(react@18.3.1) + react-datepicker: 6.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) react-hook-form: 7.53.1(react@18.3.1) - react-select: 5.8.2(@types/react@18.3.12)(react-dom@18.3.1)(react@18.3.1) + react-select: 5.8.2(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@reactleaf/modal@1.1.6(react-dom@18.3.1)(react@18.3.1)': + '@reactleaf/modal@1.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: classnames: 2.5.1 react: 18.3.1 @@ -2898,7 +3111,7 @@ snapshots: '@tanstack/query-core': 5.59.16 react: 18.3.1 - '@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.3.3)': + '@trivago/prettier-plugin-sort-imports@4.3.0(@vue/compiler-sfc@3.5.12)(prettier@3.3.3)': dependencies: '@babel/generator': 7.17.7 '@babel/parser': 7.26.1 @@ -2907,6 +3120,8 @@ snapshots: javascript-natural-sort: 0.7.1 lodash: 4.17.21 prettier: 3.3.3 + optionalDependencies: + '@vue/compiler-sfc': 3.5.12 transitivePeerDependencies: - supports-color @@ -2931,12 +3146,12 @@ snapshots: '@types/prop-types@15.7.13': {} - '@types/react-datepicker@4.19.6(react-dom@18.3.1)(react@18.3.1)': + '@types/react-datepicker@4.19.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@popperjs/core': 2.11.8 '@types/react': 18.3.12 date-fns: 2.30.0 - react-popper: 2.3.0(@popperjs/core@2.11.8)(react-dom@18.3.1)(react@18.3.1) + react-popper: 2.3.0(@popperjs/core@2.11.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - react - react-dom @@ -2962,6 +3177,7 @@ snapshots: '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.7 eslint: 8.57.1 + optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color @@ -2983,6 +3199,7 @@ snapshots: minimatch: 9.0.3 semver: 7.6.3 ts-api-utils: 1.3.0(typescript@5.6.3) + optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color @@ -3240,6 +3457,16 @@ snapshots: color-name@1.1.4: {} + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + concat-map@0.0.1: {} confbox@0.1.8: {} @@ -3328,6 +3555,8 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + detect-libc@2.0.3: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -3491,11 +3720,12 @@ snapshots: '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) eslint-plugin-react: 7.37.2(eslint@8.57.1) eslint-plugin-react-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@8.57.1) + optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - eslint-import-resolver-webpack @@ -3510,38 +3740,39 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.7 enhanced-resolve: 5.17.1 eslint: 8.57.1 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) fast-glob: 3.3.2 get-tsconfig: 4.8.1 is-bun-module: 1.2.1 is-glob: 4.0.3 + optionalDependencies: + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): + eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.3) debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.3) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -3550,7 +3781,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -3561,6 +3792,8 @@ snapshots: semver: 6.3.1 string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -3897,6 +4130,8 @@ snapshots: is-arrayish@0.2.1: {} + is-arrayish@0.3.2: {} + is-async-function@2.0.0: dependencies: has-tostringtag: 1.0.2 @@ -4013,7 +4248,7 @@ snapshots: jiti@1.21.6: {} jotai@2.10.1(@types/react@18.3.12)(react@18.3.1): - dependencies: + optionalDependencies: '@types/react': 18.3.12 react: 18.3.1 @@ -4163,7 +4398,7 @@ snapshots: natural-compare@1.4.0: {} - next@14.2.16(react-dom@18.3.1)(react@18.3.1): + next@14.2.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 14.2.16 '@swc/helpers': 0.5.5 @@ -4410,15 +4645,15 @@ snapshots: queue-microtask@1.2.3: {} - react-datepicker@6.9.0(react-dom@18.3.1)(react@18.3.1): + react-datepicker@6.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@floating-ui/react': 0.26.25(react-dom@18.3.1)(react@18.3.1) + '@floating-ui/react': 0.26.25(react-dom@18.3.1(react@18.3.1))(react@18.3.1) clsx: 2.1.1 date-fns: 3.6.0 prop-types: 15.8.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-onclickoutside: 6.13.1(react-dom@18.3.1)(react@18.3.1) + react-onclickoutside: 6.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom@18.3.1(react@18.3.1): dependencies: @@ -4434,12 +4669,12 @@ snapshots: react-is@16.13.1: {} - react-onclickoutside@6.13.1(react-dom@18.3.1)(react@18.3.1): + react-onclickoutside@6.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-popper@2.3.0(@popperjs/core@2.11.8)(react-dom@18.3.1)(react@18.3.1): + react-popper@2.3.0(@popperjs/core@2.11.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@popperjs/core': 2.11.8 react: 18.3.1 @@ -4455,7 +4690,7 @@ snapshots: react: 18.3.1 shallow-equal: 1.2.1 - react-select@5.8.2(@types/react@18.3.12)(react-dom@18.3.1)(react@18.3.1): + react-select@5.8.2(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.26.0 '@emotion/cache': 11.13.1 @@ -4466,19 +4701,19 @@ snapshots: prop-types: 15.8.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-transition-group: 4.4.5(react-dom@18.3.1)(react@18.3.1) + react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.12)(react@18.3.1) transitivePeerDependencies: - '@types/react' - supports-color - react-toastify@9.1.3(react-dom@18.3.1)(react@18.3.1): + react-toastify@9.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: clsx: 1.2.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-transition-group@4.4.5(react-dom@18.3.1)(react@18.3.1): + react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.26.0 dom-helpers: 5.2.1 @@ -4583,6 +4818,32 @@ snapshots: shallow-equal@1.2.1: {} + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.6.3 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -4596,6 +4857,10 @@ snapshots: get-intrinsic: 1.2.4 object-inspect: 1.13.2 + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + sisteransi@1.0.5: {} slash@3.0.0: {} @@ -4709,7 +4974,7 @@ snapshots: ts-pattern@5.0.5: {} tsconfck@2.1.2(typescript@5.6.3): - dependencies: + optionalDependencies: typescript: 5.6.3 tsconfig-paths@3.15.0: @@ -4786,8 +5051,9 @@ snapshots: use-isomorphic-layout-effect@1.1.2(@types/react@18.3.12)(react@18.3.1): dependencies: - '@types/react': 18.3.12 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 util-deprecate@1.0.2: {}