From cc38f2e66cf20c0719f7f7ca16ae032bab022b9a Mon Sep 17 00:00:00 2001 From: itoshi Date: Sun, 14 Jun 2026 23:13:51 +0300 Subject: [PATCH] feat: webgl preview improvements, permissions refactor and snapshot safeguards --- package-lock.json | 4 +- .../src/components/TouchableLayout/index.tsx | 18 +- src/client/src/components/map/WebGLMap.tsx | 35 +- .../src/components/side-menu/StationsList.jsx | 8 +- src/client/src/styles/ListOfSights.css | 39 ++ src/client/src/styles/TouchableLayout.css | 2 +- src/pages/Route/route-preview/LeftSidebar.tsx | 17 +- src/pages/Route/route-preview/index.tsx | 1 + .../WebGLRouteMapPrototype.tsx | 16 +- .../Snapshot/SnapshotCreatePage/index.tsx | 57 ++- src/pages/Snapshot/SnapshotListPage/index.tsx | 57 ++- src/pages/User/UserCreatePage/index.tsx | 173 +------ src/pages/User/UserEditPage/index.tsx | 173 +------ src/widgets/DevicesTable/DeviceLogsModal.tsx | 77 ++- .../PermissionsTable/PermissionsTable.tsx | 128 +++++ .../PermissionsTable/RolesHintTable.tsx | 49 ++ src/widgets/PermissionsTable/constants.ts | 33 ++ src/widgets/PermissionsTable/index.ts | 3 + .../RightWidgetTab/SightFramePreview.css | 1 + src/widgets/index.ts | 1 + tsconfig.tsbuildinfo | 2 +- yarn.lock | 474 ++---------------- 22 files changed, 558 insertions(+), 810 deletions(-) create mode 100644 src/widgets/PermissionsTable/PermissionsTable.tsx create mode 100644 src/widgets/PermissionsTable/RolesHintTable.tsx create mode 100644 src/widgets/PermissionsTable/constants.ts create mode 100644 src/widgets/PermissionsTable/index.ts diff --git a/package-lock.json b/package-lock.json index a04c6c1..be546a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "white-nights", - "version": "1.0.6", + "version": "1.0.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "white-nights", - "version": "1.0.6", + "version": "1.0.8", "license": "UNLICENSED", "dependencies": { "@emotion/react": "^11.14.0", diff --git a/src/client/src/components/TouchableLayout/index.tsx b/src/client/src/components/TouchableLayout/index.tsx index 027d4d8..282aeba 100644 --- a/src/client/src/components/TouchableLayout/index.tsx +++ b/src/client/src/components/TouchableLayout/index.tsx @@ -19,6 +19,8 @@ function useThumbSync(scrollableRef: React.RefObject) { height: 60, top: 0, hasScroll: false, + isAtTop: true, + isAtBottom: false, }); const [visible, setVisible] = useState(false); const hideTimerRef = useRef | null>(null); @@ -33,8 +35,11 @@ function useThumbSync(scrollableRef: React.RefObject) { const st = el.scrollTop; const th = ch; + const isAtTop = st <= 0; + const isAtBottom = st + ch >= sh - 1; + if (sh <= ch) { - setState((prev) => ({ ...prev, hasScroll: false })); + setState((prev) => ({ ...prev, hasScroll: false, isAtTop: true, isAtBottom: true })); return; } @@ -43,7 +48,7 @@ function useThumbSync(scrollableRef: React.RefObject) { const scrollRange = sh - ch; const top = range <= 0 ? 0 : (st / scrollRange) * range; - setState({ height: thumbHeight, top, hasScroll: true }); + setState({ height: thumbHeight, top, hasScroll: true, isAtTop, isAtBottom }); }, []); useEffect(() => { @@ -253,9 +258,12 @@ export const TouchableLayout = forwardRef( }; }, [thumb.hasScroll]); - const containerClassName = className - ? `scrollable-container ${className}` - : "scrollable-container"; + const containerClassName = [ + "scrollable-container", + className, + thumb.isAtTop ? "is-at-top" : "", + thumb.isAtBottom ? "is-at-bottom" : "", + ].filter(Boolean).join(" "); const viewportStyle: React.CSSProperties = maxHeight ? { diff --git a/src/client/src/components/map/WebGLMap.tsx b/src/client/src/components/map/WebGLMap.tsx index b7b5318..7c020f4 100644 --- a/src/client/src/components/map/WebGLMap.tsx +++ b/src/client/src/components/map/WebGLMap.tsx @@ -155,6 +155,19 @@ const useSightClustering = ( continue; } + const hasCustomIcon = + sight.is_default_icon === false && !isMediaIdEmpty(sight.icon ?? null); + + if (hasCustomIcon) { + sight.visited = true; + clusteredResult.push({ + type: "point", + id: String(sight.id), + data: sight, + }); + continue; + } + const clusterSights: SightData[] = []; const queue = [sight]; sight.visited = true; @@ -164,8 +177,12 @@ const useSightClustering = ( clusterSights.push(current); for (const potentialNeighbor of unclusteredSights) { + const neighborHasCustomIcon = + potentialNeighbor.is_default_icon === false && + !isMediaIdEmpty(potentialNeighbor.icon ?? null); if ( !potentialNeighbor.visited && + !neighborHasCustomIcon && clusterSights.length < 4 && getDistance(current, potentialNeighbor) < distanceThreshold ) { @@ -175,6 +192,10 @@ const useSightClustering = ( } } + for (const leftover of queue) { + leftover.visited = false; + } + if (clusterSights.length > 1) { let furthestSight: SightData | null = null; let maxDistanceToPath = -1; @@ -381,12 +402,14 @@ export const WebGLMap = observer(() => { return livePercent; } - if ( - sight != null && - typeof sight.icon_size === "number" && - Number.isFinite(sight.icon_size) - ) { - return sight.icon_size; + if (sight?.is_default_icon === false) { + if ( + typeof sight.icon_size === "number" && + Number.isFinite(sight.icon_size) + ) { + return sight.icon_size; + } + return 100; } if ( diff --git a/src/client/src/components/side-menu/StationsList.jsx b/src/client/src/components/side-menu/StationsList.jsx index 22ab5df..2cf8158 100644 --- a/src/client/src/components/side-menu/StationsList.jsx +++ b/src/client/src/components/side-menu/StationsList.jsx @@ -111,7 +111,13 @@ const StationItem = ({ }; return ( -
+
"; + inherits: false; + initial-value: 0px; +} + +@property --fade-bottom { + syntax: ""; + inherits: false; + initial-value: 45px; +} + @keyframes pulse-chevron { 0% { transform: rotate(var(--r, 0deg)) translateY(0px) scale(1); @@ -124,6 +136,27 @@ backface-visibility: hidden; } +.list-of-sights-content .scrollable { + --fade-top: 0px; + --fade-bottom: 45px; + mask-image: linear-gradient( + to bottom, + transparent 0px, + black var(--fade-top), + black calc(100% - var(--fade-bottom)), + transparent 100% + ); + transition: --fade-top 0.5s ease, --fade-bottom 0.5s ease; +} + +.list-of-sights-content:not(.is-at-top) .scrollable { + --fade-top: 15px; +} + +.list-of-sights-content.is-at-bottom .scrollable { + --fade-bottom: 0px; +} + .list-of-sights-grid { display: grid; grid-template-columns: repeat(3, 1fr); @@ -137,6 +170,11 @@ pointer-events: auto; } +.list-of-sights-content .custom-scrollbar-track { + margin-bottom: 10px; + overflow: hidden; +} + .sight-component { display: flex; flex-direction: column; @@ -411,6 +449,7 @@ position: relative; padding: 7px 60px; width: 100%; + height: 60px; display: flex; align-items: center; justify-content: space-evenly; diff --git a/src/client/src/styles/TouchableLayout.css b/src/client/src/styles/TouchableLayout.css index 623c0c7..595edff 100644 --- a/src/client/src/styles/TouchableLayout.css +++ b/src/client/src/styles/TouchableLayout.css @@ -63,7 +63,7 @@ } .side-menu-sights-block .scrollable-viewport { - height: calc(92%); + height: calc(98%); } .side-menu-sights-block .scrollable { diff --git a/src/pages/Route/route-preview/LeftSidebar.tsx b/src/pages/Route/route-preview/LeftSidebar.tsx index ca6a1e7..6cf0b2e 100644 --- a/src/pages/Route/route-preview/LeftSidebar.tsx +++ b/src/pages/Route/route-preview/LeftSidebar.tsx @@ -53,7 +53,14 @@ export const LeftSidebar = observer(({ open, onToggle }: LeftSidebarProps) => { }} > {/* Кнопка назад — вне основного меню */} -
+
-
+
diff --git a/src/pages/Route/route-preview/index.tsx b/src/pages/Route/route-preview/index.tsx index 2788347..b84c89d 100644 --- a/src/pages/Route/route-preview/index.tsx +++ b/src/pages/Route/route-preview/index.tsx @@ -54,6 +54,7 @@ export const RoutePreview = () => { { const stationScreenY = rotatedY * camera.scale + camera.translation.y; - const labelX = stationScreenX + offsetX; - const labelY = stationScreenY + offsetY; - const backendAlign = station.align; const anchor = getAnchorFromOffset(backendAlign ?? 2); @@ -2339,8 +2336,6 @@ export const WebGLRouteMapPrototype = observer(() => { const dpr = Math.max(1, window.devicePixelRatio || 1); - const cssX = labelX / dpr; - const cssY = labelY / dpr; const rotationCss = `${rotationAngle}rad`; const counterRotationCss = `${-rotationAngle}rad`; @@ -2359,6 +2354,13 @@ export const WebGLRouteMapPrototype = observer(() => { const scaleFactor = 1 + (zoomClampedScale - 1) * 0.4; const primaryFontSize = 16 * fontScale * scaleFactor; + + const mainLabelHeight = primaryFontSize * 1.2; + const labelX = stationScreenX + offsetX; + const labelY = stationScreenY + offsetY + mainLabelHeight / 2; + + const cssX = labelX / dpr; + const cssY = labelY / dpr; const secondaryFontSize = 13 * fontScale * scaleFactor; const secondaryMarginTop = 5 * fontScale * scaleFactor; @@ -2404,7 +2406,7 @@ export const WebGLRouteMapPrototype = observer(() => { hoveredStationIconId === station.id || resizingStationIconId === station.id; - const secondaryLineHeight = 1.2; + const secondaryLineHeight = 1.2 * scaleFactor; return (
@@ -2438,7 +2440,6 @@ export const WebGLRouteMapPrototype = observer(() => { cursor: "grab", userSelect: "none", touchAction: "none", - lineHeight: 1, }} >
{ position: "relative", fontWeight: 700, fontSize: primaryFontSize, - lineHeight: 1, textShadow: "0 0 4px rgba(0,0,0,0.6)", pointerEvents: "none", whiteSpace: "nowrap", diff --git a/src/pages/Snapshot/SnapshotCreatePage/index.tsx b/src/pages/Snapshot/SnapshotCreatePage/index.tsx index fcc2a88..362c851 100644 --- a/src/pages/Snapshot/SnapshotCreatePage/index.tsx +++ b/src/pages/Snapshot/SnapshotCreatePage/index.tsx @@ -6,7 +6,7 @@ import { DialogContent, DialogActions, } from "@mui/material"; -import { snapshotStore, authStore, routeStore, selectedCityStore, cityStore } from "@shared"; +import { snapshotStore, authStore, routeStore, selectedCityStore, cityStore, carrierStore } from "@shared"; import { observer } from "mobx-react-lite"; import { ArrowLeft, Loader2, Save } from "lucide-react"; import { useState, useEffect, useMemo } from "react"; @@ -93,22 +93,55 @@ export const SnapshotCreatePage = observer(() => { routeStore.routes.loaded = false; }); await routeStore.getRoutes(); + await carrierStore.getCarriers("ru"); const routes = routeStore.routes.data; - const numberCount = new Map(); + const carriers = carrierStore.carriers.ru.data; + const carrierCityMap = new Map(); + for (const c of carriers) { + carrierCityMap.set(c.id, c.city_id); + } + + const duplicateMessages: string[] = []; + + const directionKey = new Map(); for (const route of routes) { const num = (route.route_sys_number ?? "").trim(); - if (num) { - numberCount.set(num, (numberCount.get(num) ?? 0) + 1); + if (!num) continue; + const cityId = carrierCityMap.get(route.carrier_id) ?? 0; + const key = `${num}|${route.route_direction}|${cityId}`; + directionKey.set(key, (directionKey.get(key) ?? 0) + 1); + } + for (const [key, count] of directionKey) { + if (count > 1) { + const [num, dir] = key.split("|"); + const dirLabel = dir === "true" ? "прямой" : "обратный"; + duplicateMessages.push( + `Дублируется маршрут №${num} (${dirLabel})` + ); } } - const duplicates = Array.from(numberCount.entries()) - .filter(([, count]) => count > 1) - .map(([num]) => num); + const cityPerNumber = new Map>(); + for (const route of routes) { + const num = (route.route_sys_number ?? "").trim(); + if (!num) continue; + const cityId = carrierCityMap.get(route.carrier_id) ?? 0; + if (!cityPerNumber.has(num)) { + cityPerNumber.set(num, new Set()); + } + cityPerNumber.get(num)!.add(cityId); + } + for (const [num, cities] of cityPerNumber) { + if (cities.size > 1) { + duplicateMessages.push( + `Маршрут №${num} присутствует в нескольких городах` + ); + } + } - if (duplicates.length > 0) { - setDuplicateRouteNumbers(duplicates); + if (duplicateMessages.length > 0) { + setDuplicateRouteNumbers(duplicateMessages); setDuplicateWarningOpen(true); } else { await startExport(); @@ -190,10 +223,8 @@ export const SnapshotCreatePage = observer(() => { некорректным данным в экспорте.

    - {duplicateRouteNumbers.map((num) => ( -
  • - Найдены повторяющиеся маршруты с номером трассы №{num} -
  • + {duplicateRouteNumbers.map((msg, i) => ( +
  • {msg}
  • ))}
diff --git a/src/pages/Snapshot/SnapshotListPage/index.tsx b/src/pages/Snapshot/SnapshotListPage/index.tsx index fa151da..14c6c08 100644 --- a/src/pages/Snapshot/SnapshotListPage/index.tsx +++ b/src/pages/Snapshot/SnapshotListPage/index.tsx @@ -1,11 +1,11 @@ import { DataGrid, GridColDef, GridRenderCellParams } from "@mui/x-data-grid"; import { ruRU } from "@mui/x-data-grid/locales"; -import { authStore, languageStore, snapshotStore, cityStore, SearchInput } from "@shared"; +import { authStore, languageStore, snapshotStore, cityStore, vehicleStore, SearchInput } from "@shared"; import { useEffect, useState, useMemo } from "react"; import { observer } from "mobx-react-lite"; import { DatabaseBackup, Trash2 } from "lucide-react"; import { CreateButton, DeleteModal, SnapshotRestore } from "@widgets"; -import { Alert, Box, Button, CircularProgress, Dialog, DialogActions, DialogContent, DialogTitle, TextField } from "@mui/material"; +import { Alert, Box, Button, CircularProgress, Dialog, DialogActions, DialogContent, DialogTitle, TextField, Typography } from "@mui/material"; const LOW_STORAGE_THRESHOLD_GB = 10; @@ -43,11 +43,14 @@ export const SnapshotListPage = observer(() => { createEmptySnapshot, } = snapshotStore; const canWriteDevices = authStore.canWrite("devices"); + const canReadDevices = authStore.canRead("devices"); const canCreateSnapshot = authStore.hasRole("snapshot_create") && canWriteDevices; const canManageSnapshots = authStore.canWrite("snapshot") && canWriteDevices; const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); + const [isSnapshotOnDeviceWarning, setIsSnapshotOnDeviceWarning] = useState(false); + const [devicesWithSnapshot, setDevicesWithSnapshot] = useState([]); const [rowId, setRowId] = useState(null); const { language } = languageStore; const [isRestoreModalOpen, setIsRestoreModalOpen] = useState(false); @@ -77,7 +80,11 @@ export const SnapshotListPage = observer(() => { useEffect(() => { const fetchSnapshots = async () => { setIsLoading(true); - await Promise.all([getSnapshots(), getStorageInfo()]); + const promises: Promise[] = [getSnapshots(), getStorageInfo()]; + if (canReadDevices && !vehicleStore.vehicles.loaded) { + promises.push(vehicleStore.getVehicles()); + } + await Promise.all(promises); setIsLoading(false); }; fetchSnapshots(); @@ -164,8 +171,20 @@ export const SnapshotListPage = observer(() => { + + + r !== `${resource}_ro` && r !== `${resource}_rw`, - ); - if (level === "ro") return [...filtered, `${resource}_ro`]; - if (level === "rw") return [...filtered, `${resource}_rw`]; - return filtered; -} +import { ImageUploadCard, PermissionsTable, RolesHintTable, ROLE_RESOURCES } from "@widgets"; export const UserCreatePage = observer(() => { const navigate = useNavigate(); @@ -276,133 +234,8 @@ export const UserCreatePage = observer(() => { - - - - - Ресурс - Нет доступа - Чтение - Чтение/Запись - - Доп. права - - - - - {ROLE_RESOURCES.map(({ key, label }) => { - const level = getPermissionLevel(localRoles, key); - const isSnapshotResource = key === "snapshot"; - - const handleChange = (val: string) => { - setLocalRoles((prev) => { - let updated = applyPermissionChange(prev, key, val as PermissionLevel); - - if (key === "devices") { - updated = applyPermissionChange( - updated, - "vehicles", - val as PermissionLevel, - ); - } - - return updated; - }); - }; - - const isDevicesResource = key === "devices"; - - const handleSnapshotCreateChange = (checked: boolean) => { - if (!isSnapshotResource) { - return; - } - setLocalRoles((prev) => { - const withoutSnapshotCreate = prev.filter( - (role) => role !== "snapshot_create" - ); - return checked - ? [...withoutSnapshotCreate, "snapshot_create"] - : withoutSnapshotCreate; - }); - }; - - const handleMaintenanceChange = (checked: boolean) => { - setLocalRoles((prev) => { - const without = prev.filter((r) => r !== "devices_maintenance_rw"); - return checked ? [...without, "devices_maintenance_rw"] : without; - }); - }; - - return ( - - {label} - - handleChange(e.target.value)} - sx={{ justifyContent: "center", flexWrap: "nowrap" }} - > - - - - - {isSnapshotResource ? ( - - - - - ) : ( - handleChange(e.target.value)} - sx={{ justifyContent: "center", flexWrap: "nowrap" }} - > - - - )} - - - handleChange(e.target.value)} - sx={{ justifyContent: "center", flexWrap: "nowrap" }} - > - - - - - {isSnapshotResource ? ( - - handleSnapshotCreateChange(e.target.checked) - } - size="small" - title="Разрешает создавать новые снапшоты" - /> - ) : isDevicesResource ? ( - - handleMaintenanceChange(e.target.checked)} - size="small" - title="Техническое обслуживание (ТО)" - /> - - ) : ( - - - - - )} - - - ); - })} - -
-
+ + - - - - - Ресурс - Нет доступа - Чтение - Чтение/Запись - - Доп. права - - - - - {ROLE_RESOURCES.map(({ key, label }) => { - const level = getPermissionLevel(localRoles, key); - const isSnapshotResource = key === "snapshot"; - - const handleChange = (val: string) => { - setLocalRoles((prev) => { - let updated = applyPermissionChange(prev, key, val as PermissionLevel); - - if (key === "devices") { - updated = applyPermissionChange( - updated, - "vehicles", - val as PermissionLevel, - ); - } - - return updated; - }); - }; - - const isDevicesResource = key === "devices"; - - const handleSnapshotCreateChange = (checked: boolean) => { - if (!isSnapshotResource) { - return; - } - setLocalRoles((prev) => { - const withoutSnapshotCreate = prev.filter( - (role) => role !== "snapshot_create" - ); - return checked - ? [...withoutSnapshotCreate, "snapshot_create"] - : withoutSnapshotCreate; - }); - }; - - const handleMaintenanceChange = (checked: boolean) => { - setLocalRoles((prev) => { - const without = prev.filter((r) => r !== "devices_maintenance_rw"); - return checked ? [...without, "devices_maintenance_rw"] : without; - }); - }; - - return ( - - {label} - - handleChange(e.target.value)} - sx={{ justifyContent: "center", flexWrap: "nowrap" }} - > - - - - - {isSnapshotResource ? ( - - - - - ) : ( - handleChange(e.target.value)} - sx={{ justifyContent: "center", flexWrap: "nowrap" }} - > - - - )} - - - handleChange(e.target.value)} - sx={{ justifyContent: "center", flexWrap: "nowrap" }} - > - - - - - {isSnapshotResource ? ( - - handleSnapshotCreateChange(e.target.checked) - } - size="small" - title="Разрешает создавать новые снапшоты" - /> - ) : isDevicesResource ? ( - - handleMaintenanceChange(e.target.checked)} - size="small" - title="Техническое обслуживание (ТО)" - /> - - ) : ( - - - - - )} - - - ); - })} - -
-
+ + diff --git a/src/widgets/DevicesTable/DeviceLogsModal.tsx b/src/widgets/DevicesTable/DeviceLogsModal.tsx index 8a15f3b..bb2349e 100644 --- a/src/widgets/DevicesTable/DeviceLogsModal.tsx +++ b/src/widgets/DevicesTable/DeviceLogsModal.tsx @@ -24,30 +24,51 @@ const shiftYYYYMMDD = (value: string, days: number) => { type LogLevel = "info" | "warn" | "error" | "debug" | "fatal" | "unknown"; -const LOG_LEVEL_STYLES: Record = { +const LOG_LEVEL_STYLES: Record< + LogLevel, + { badge: string; text: string; bg: string; color: string; borderColor: string } +> = { info: { badge: "bg-blue-100 text-blue-700", text: "text-[#000000BF]", + bg: "#DBEAFE", + color: "#1D4ED8", + borderColor: "#93C5FD", }, debug: { badge: "bg-gray-100 text-gray-600", text: "text-gray-600", + bg: "#F3F4F6", + color: "#4B5563", + borderColor: "#D1D5DB", }, warn: { badge: "bg-amber-100 text-amber-700", text: "text-amber-800", + bg: "#FEF3C7", + color: "#B45309", + borderColor: "#FCD34D", }, error: { badge: "bg-red-100 text-red-700", text: "text-red-700", + bg: "#FEE2E2", + color: "#B91C1C", + borderColor: "#FCA5A5", }, fatal: { badge: "bg-red-200 text-red-900", text: "text-red-900 font-semibold", + bg: "#FECACA", + color: "#7F1D1D", + borderColor: "#F87171", }, unknown: { badge: "bg-gray-100 text-gray-500", text: "text-[#000000BF]", + bg: "#F3F4F6", + color: "#6B7280", + borderColor: "#D1D5DB", }, }; @@ -139,6 +160,23 @@ export const DeviceLogsModal = ({ const yesterday = new Date(today.getTime() - 24 * 60 * 60 * 1000); const [dateFrom, setDateFrom] = useState(toYYYYMMDD(yesterday)); const [dateTo, setDateTo] = useState(toYYYYMMDD(today)); + + const ALL_LEVELS: LogLevel[] = ["debug", "info", "warn", "error", "fatal"]; + const [activeLevels, setActiveLevels] = useState>( + new Set(ALL_LEVELS) + ); + + const toggleLevel = (level: LogLevel) => { + setActiveLevels((prev) => { + const next = new Set(prev); + if (next.has(level)) { + next.delete(level); + } else { + next.add(level); + } + return next; + }); + }; const dateToMin = shiftYYYYMMDD(dateFrom, 1); const dateFromMax = shiftYYYYMMDD(dateTo, -1); @@ -205,16 +243,21 @@ export const DeviceLogsModal = ({ return parsed; }, [chunks]); + const filteredLogs = useMemo( + () => logs.filter((log) => activeLevels.has(log.level)), + [logs, activeLevels] + ); + const logsText = useMemo( () => - logs + filteredLogs .map((log) => { const level = log.level === "unknown" ? "LOG" : log.level.toUpperCase(); const time = log.time ? `[${log.time}] ` : ""; return `${time}${level}: ${log.text}`; }) .join("\n"), - [logs] + [filteredLogs] ); const handleDownloadLogs = () => { @@ -253,6 +296,28 @@ export const DeviceLogsModal = ({

Логи

+
+ {ALL_LEVELS.map((level) => { + const active = activeLevels.has(level); + const s = LOG_LEVEL_STYLES[level]; + return ( + + ); + })} +
Скачать .txt @@ -303,8 +368,8 @@ export const DeviceLogsModal = ({ {!isLoading && !error && (
- {logs.length > 0 ? ( - logs.map((log) => { + {filteredLogs.length > 0 ? ( + filteredLogs.map((log) => { const style = LOG_LEVEL_STYLES[log.level]; return (
>; +} + +export function PermissionsTable({ localRoles, setLocalRoles }: PermissionsTableProps) { + return ( + + + + + Ресурс + Нет доступа + Чтение + Чтение/Запись + Доп. права + + + + {ROLE_RESOURCES.map(({ key, label }) => { + const level = getPermissionLevel(localRoles, key); + const isSnapshotResource = key === "snapshot"; + const isDevicesResource = key === "devices"; + + const handleChange = (val: string) => { + setLocalRoles((prev) => { + let updated = applyPermissionChange(prev, key, val as PermissionLevel); + if (key === "devices") { + updated = applyPermissionChange(updated, "vehicles", val as PermissionLevel); + } + return updated; + }); + }; + + const handleSnapshotCreateChange = (checked: boolean) => { + setLocalRoles((prev) => { + const without = prev.filter((role) => role !== "snapshot_create"); + return checked ? [...without, "snapshot_create"] : without; + }); + }; + + const handleMaintenanceChange = (checked: boolean) => { + setLocalRoles((prev) => { + const without = prev.filter((r) => r !== "devices_maintenance_rw"); + return checked ? [...without, "devices_maintenance_rw"] : without; + }); + }; + + return ( + + {label} + + handleChange(e.target.value)} + sx={{ justifyContent: "center", flexWrap: "nowrap" }} + > + + + + + {isSnapshotResource ? ( + - + ) : ( + handleChange(e.target.value)} + sx={{ justifyContent: "center", flexWrap: "nowrap" }} + > + + + )} + + + handleChange(e.target.value)} + sx={{ justifyContent: "center", flexWrap: "nowrap" }} + > + + + + + {isSnapshotResource ? ( + handleSnapshotCreateChange(e.target.checked)} + size="small" + title="Разрешает создавать новые снапшоты" + /> + ) : isDevicesResource ? ( + + handleMaintenanceChange(e.target.checked)} + size="small" + title="Техническое обслуживание (ТО)" + /> + + ) : ( + - + )} + + + ); + })} + +
+
+ ); +} diff --git a/src/widgets/PermissionsTable/RolesHintTable.tsx b/src/widgets/PermissionsTable/RolesHintTable.tsx new file mode 100644 index 0000000..366927c --- /dev/null +++ b/src/widgets/PermissionsTable/RolesHintTable.tsx @@ -0,0 +1,49 @@ +import { + Typography, + Box, + Table, + TableBody, + TableCell, + TableHead, + TableRow, +} from "@mui/material"; + +const ROLE_HINTS = [ + { tab: "Экспорт", roles: "Экспорт (Ч/З)" }, + { tab: "Создание экспорта", roles: "Экспорт (доп. права) + Устройства (Ч/З)" }, + { tab: "Устройства", roles: "Устройства + Транспорт + Маршруты + Перевозчики + Экспорт (Ч/З)" }, + { tab: "Карта", roles: "Маршруты (Ч/З) или Остановки (Ч/З) или Достопримечательности (Ч/З)" }, + { tab: "Пользователи", roles: "Пользователи" }, + { tab: "Достопримечательности", roles: "Достопримечательности" }, + { tab: "Остановки", roles: "Остановки" }, + { tab: "Маршруты", roles: "Маршруты + Перевозчики" }, + { tab: "Страны", roles: "Страны" }, + { tab: "Города", roles: "Города + Страны" }, + { tab: "Перевозчики", roles: "Перевозчики" }, +]; + +export function RolesHintTable() { + return ( + + + Какие роли нужны для вкладок + + + + + Вкладка + Необходимые роли + + + + {ROLE_HINTS.map(({ tab, roles }) => ( + + {tab} + {roles} + + ))} + +
+
+ ); +} diff --git a/src/widgets/PermissionsTable/constants.ts b/src/widgets/PermissionsTable/constants.ts new file mode 100644 index 0000000..32d5998 --- /dev/null +++ b/src/widgets/PermissionsTable/constants.ts @@ -0,0 +1,33 @@ +export const ROLE_RESOURCES = [ + { key: "snapshot", label: "Экспорт" }, + { key: "devices", label: "Устройства" }, + { key: "vehicles", label: "Транспорт" }, + { key: "users", label: "Пользователи" }, + { key: "sights", label: "Достопримечательности" }, + { key: "stations", label: "Остановки" }, + { key: "routes", label: "Маршруты" }, + { key: "countries", label: "Страны" }, + { key: "cities", label: "Города" }, + { key: "carriers", label: "Перевозчики" }, +] as const; + +export type PermissionLevel = "none" | "ro" | "rw"; + +export function getPermissionLevel(roles: string[], resource: string): PermissionLevel { + if (roles.includes(`${resource}_rw`)) return "rw"; + if (roles.includes(`${resource}_ro`)) return "ro"; + return "none"; +} + +export function applyPermissionChange( + roles: string[], + resource: string, + level: PermissionLevel, +): string[] { + const filtered = roles.filter( + (r) => r !== `${resource}_ro` && r !== `${resource}_rw`, + ); + if (level === "ro") return [...filtered, `${resource}_ro`]; + if (level === "rw") return [...filtered, `${resource}_rw`]; + return filtered; +} diff --git a/src/widgets/PermissionsTable/index.ts b/src/widgets/PermissionsTable/index.ts new file mode 100644 index 0000000..994f592 --- /dev/null +++ b/src/widgets/PermissionsTable/index.ts @@ -0,0 +1,3 @@ +export { PermissionsTable } from "./PermissionsTable"; +export { RolesHintTable } from "./RolesHintTable"; +export { ROLE_RESOURCES, type PermissionLevel, getPermissionLevel, applyPermissionChange } from "./constants"; diff --git a/src/widgets/SightTabs/RightWidgetTab/SightFramePreview.css b/src/widgets/SightTabs/RightWidgetTab/SightFramePreview.css index 0722f7d..c8308c2 100644 --- a/src/widgets/SightTabs/RightWidgetTab/SightFramePreview.css +++ b/src/widgets/SightTabs/RightWidgetTab/SightFramePreview.css @@ -164,6 +164,7 @@ position: relative; padding: 7px; width: 100%; + height: 60px; display: flex; align-items: center; justify-content: space-around; diff --git a/src/widgets/index.ts b/src/widgets/index.ts index 0f43324..3351413 100644 --- a/src/widgets/index.ts +++ b/src/widgets/index.ts @@ -21,3 +21,4 @@ export * from "./SaveWithoutCityAgree"; export * from "./CitySelector"; export * from "./modals"; export * from "./TestingModeBanner"; +export * from "./PermissionsTable"; diff --git a/tsconfig.tsbuildinfo b/tsconfig.tsbuildinfo index f5b2933..e795ac1 100644 --- a/tsconfig.tsbuildinfo +++ b/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"root":["./src/main.tsx","./src/vite-env.d.ts","./src/app/globalerrorboundary.tsx","./src/app/index.tsx","./src/app/router/index.tsx","./src/client/src/app.d.ts","./src/client/src/api/apiconfig.d.ts","./src/client/src/api/apistore/api.ts","./src/client/src/api/apistore/index.ts","./src/client/src/api/apistore/store.ts","./src/client/src/api/apistore/types.ts","./src/client/src/assets/constants.d.ts","./src/client/src/components/overlayscrollbarswrapper.d.ts","./src/client/src/components/simulationsettings.tsx","./src/client/src/components/threeviewerrorboundary.tsx","./src/client/src/components/reactmarkdown/index.tsx","./src/client/src/components/touchablelayout/index.tsx","./src/client/src/components/map/constants.tsx","./src/client/src/components/map/infinitecanvas.tsx","./src/client/src/components/map/map.tsx","./src/client/src/components/map/mapdatacontext.tsx","./src/client/src/components/map/sight.tsx","./src/client/src/components/map/station.tsx","./src/client/src/components/map/tramicon.tsx","./src/client/src/components/map/tramiconwebgl.tsx","./src/client/src/components/map/travelpath.tsx","./src/client/src/components/map/webglmap.tsx","./src/client/src/components/map/custom.d.ts","./src/client/src/components/map/transformcontext.tsx","./src/client/src/components/map/types.tsx","./src/client/src/components/map/utils.tsx","./src/client/src/components/widgets/panoramview.tsx","./src/client/src/components/widgets/threeview.tsx","./src/client/src/components/widgets/threeviewicons.tsx","./src/client/src/context/geolocationcontext.tsx","./src/client/src/hooks/useanimatedposition.ts","./src/client/src/hooks/useroutefollowingposition.ts","./src/client/src/stores/cameraanimationstore.ts","./src/client/src/stores/colorstore.ts","./src/client/src/stores/geolocationstore.ts","./src/client/src/stores/index.ts","./src/client/src/stores/hooks/usecameraanimationstore.ts","./src/client/src/stores/hooks/usecolorstore.ts","./src/client/src/stores/hooks/usegeolocationstore.ts","./src/client/src/utils/routepathanimator.ts","./src/client/src/utils/animationutils.ts","./src/entities/index.ts","./src/entities/navigation/index.ts","./src/entities/navigation/model/index.ts","./src/entities/navigation/ui/index.tsx","./src/features/index.ts","./src/features/navigation/index.ts","./src/features/navigation/ui/index.tsx","./src/pages/index.ts","./src/pages/article/index.ts","./src/pages/article/articlecreatepage/index.tsx","./src/pages/article/articleeditpage/index.tsx","./src/pages/article/articlelistpage/index.tsx","./src/pages/article/articlepreviewpage/previewleftwidget.tsx","./src/pages/article/articlepreviewpage/previewrightwidget.tsx","./src/pages/article/articlepreviewpage/index.tsx","./src/pages/carrier/index.ts","./src/pages/carrier/carriercreatepage/index.tsx","./src/pages/carrier/carriereditpage/index.tsx","./src/pages/carrier/carrierlistpage/index.tsx","./src/pages/city/index.ts","./src/pages/city/citycreatepage/index.tsx","./src/pages/city/cityeditpage/index.tsx","./src/pages/city/citylistpage/index.tsx","./src/pages/city/citypreviewpage/index.tsx","./src/pages/country/index.ts","./src/pages/country/countryaddpage/index.tsx","./src/pages/country/countrycreatepage/index.tsx","./src/pages/country/countryeditpage/index.tsx","./src/pages/country/countrylistpage/index.tsx","./src/pages/country/countrypreviewpage/index.tsx","./src/pages/createsightpage/index.tsx","./src/pages/devicespage/index.tsx","./src/pages/editsightpage/index.tsx","./src/pages/loginpage/index.tsx","./src/pages/mainpage/index.tsx","./src/pages/mappage/index.tsx","./src/pages/mappage/mapstore.ts","./src/pages/media/index.ts","./src/pages/media/mediacreatepage/index.tsx","./src/pages/media/mediaeditpage/index.tsx","./src/pages/media/medialistpage/index.tsx","./src/pages/media/mediapreviewpage/index.tsx","./src/pages/route/linekedstations.tsx","./src/pages/route/index.ts","./src/pages/route/demopage/index.tsx","./src/pages/route/routecreatepage/index.tsx","./src/pages/route/routeeditpage/index.tsx","./src/pages/route/routelistpage/index.tsx","./src/pages/route/route-preview/constants.ts","./src/pages/route/route-preview/infinitecanvas.tsx","./src/pages/route/route-preview/leftsidebar.tsx","./src/pages/route/route-preview/mapdatacontext.tsx","./src/pages/route/route-preview/rightsidebar.tsx","./src/pages/route/route-preview/sight.tsx","./src/pages/route/route-preview/sightinfowidget.tsx","./src/pages/route/route-preview/station.tsx","./src/pages/route/route-preview/transformcontext.tsx","./src/pages/route/route-preview/travelpath.tsx","./src/pages/route/route-preview/widgets.tsx","./src/pages/route/route-preview/index.tsx","./src/pages/route/route-preview/types.ts","./src/pages/route/route-preview/utils.ts","./src/pages/route/route-preview/web-gl/languageselector.tsx","./src/pages/route/route-preview/webgl-prototype/routewidget.tsx","./src/pages/route/route-preview/webgl-prototype/webglroutemapprototype.tsx","./src/pages/sight/linkedstations.tsx","./src/pages/sight/index.ts","./src/pages/sight/sightlistpage/index.tsx","./src/pages/sightpage/index.tsx","./src/pages/snapshot/index.ts","./src/pages/snapshot/snapshotcreatepage/index.tsx","./src/pages/snapshot/snapshotlistpage/index.tsx","./src/pages/station/linkedsights.tsx","./src/pages/station/index.ts","./src/pages/station/stationcreatepage/index.tsx","./src/pages/station/stationeditpage/index.tsx","./src/pages/station/stationlistpage/index.tsx","./src/pages/station/stationpreviewpage/index.tsx","./src/pages/user/index.ts","./src/pages/user/usercreatepage/index.tsx","./src/pages/user/usereditpage/index.tsx","./src/pages/user/userlistpage/index.tsx","./src/pages/vehicle/index.ts","./src/pages/vehicle/vehiclecreatepage/index.tsx","./src/pages/vehicle/vehicleeditpage/index.tsx","./src/pages/vehicle/vehiclelistpage/index.tsx","./src/pages/vehicle/vehiclepreviewpage/index.tsx","./src/shared/index.tsx","./src/shared/api/index.tsx","./src/shared/api/mobxfetch/index.ts","./src/shared/config/constants.tsx","./src/shared/config/index.ts","./src/shared/const/index.ts","./src/shared/const/mediatypes.ts","./src/shared/hooks/index.ts","./src/shared/hooks/useselectedcity.ts","./src/shared/lib/gltfcachemanager.ts","./src/shared/lib/index.ts","./src/shared/lib/decodejwt/index.ts","./src/shared/lib/mui/theme.ts","./src/shared/lib/permissions/index.ts","./src/shared/modals/index.ts","./src/shared/modals/articleselectorcreatedialog/index.tsx","./src/shared/modals/previewmediadialog/index.tsx","./src/shared/modals/selectarticledialog/index.tsx","./src/shared/modals/selectmediadialog/index.tsx","./src/shared/modals/uploadmediadialog/index.tsx","./src/shared/store/index.ts","./src/shared/store/articlesstore/index.tsx","./src/shared/store/authstore/api.ts","./src/shared/store/authstore/index.tsx","./src/shared/store/carrierstore/index.tsx","./src/shared/store/citystore/index.ts","./src/shared/store/countrystore/index.ts","./src/shared/store/createsightstore/index.tsx","./src/shared/store/devicesstore/index.tsx","./src/shared/store/editsightstore/index.tsx","./src/shared/store/languagestore/index.tsx","./src/shared/store/mediastore/index.tsx","./src/shared/store/menustore/index.ts","./src/shared/store/modelloadingstore/index.ts","./src/shared/store/routestore/index.ts","./src/shared/store/selectedcitystore/index.ts","./src/shared/store/sightsstore/index.tsx","./src/shared/store/snapshotstore/index.ts","./src/shared/store/stationsstore/index.ts","./src/shared/store/testingmodestore/api.ts","./src/shared/store/testingmodestore/index.ts","./src/shared/store/userstore/api.ts","./src/shared/store/userstore/index.ts","./src/shared/store/vehiclestore/api.ts","./src/shared/store/vehiclestore/index.ts","./src/shared/store/vehiclestore/types.ts","./src/shared/ui/animatedcirclebutton.tsx","./src/shared/ui/index.ts","./src/shared/ui/backbutton/index.tsx","./src/shared/ui/coordinatesinput/index.tsx","./src/shared/ui/input/index.tsx","./src/shared/ui/loadingspinner/index.tsx","./src/shared/ui/modal/index.tsx","./src/shared/ui/modelloadingindicator/index.tsx","./src/shared/ui/multiselect/index.tsx","./src/shared/ui/searchinput/index.tsx","./src/shared/ui/tabpanel/index.tsx","./src/widgets/index.ts","./src/widgets/cityselector/index.tsx","./src/widgets/createbutton/index.tsx","./src/widgets/deletemodal/index.tsx","./src/widgets/devicestable/devicelogsmodal.tsx","./src/widgets/devicestable/vehiclesessionsmodal.tsx","./src/widgets/devicestable/index.tsx","./src/widgets/imageuploadcard/index.tsx","./src/widgets/languageswitcher/index.tsx","./src/widgets/layout/index.tsx","./src/widgets/layout/ui/appbar.tsx","./src/widgets/layout/ui/drawer.tsx","./src/widgets/layout/ui/drawerheader.tsx","./src/widgets/leaveagree/index.tsx","./src/widgets/mediaarea/index.tsx","./src/widgets/mediaareaforsight/index.tsx","./src/widgets/mediaviewer/threeview.tsx","./src/widgets/mediaviewer/threeviewerrorboundary.tsx","./src/widgets/mediaviewer/index.tsx","./src/widgets/modelviewer3d/index.tsx","./src/widgets/reactmarkdown/index.tsx","./src/widgets/reactmarkdowneditor/index.tsx","./src/widgets/savewithoutcityagree/index.tsx","./src/widgets/sightedit/index.tsx","./src/widgets/sightheader/index.ts","./src/widgets/sightheader/ui/index.tsx","./src/widgets/sighttabs/index.ts","./src/widgets/sighttabs/createinformationtab/mediauploadbox.tsx","./src/widgets/sighttabs/createinformationtab/index.tsx","./src/widgets/sighttabs/createlefttab/index.tsx","./src/widgets/sighttabs/createrighttab/index.tsx","./src/widgets/sighttabs/informationtab/index.tsx","./src/widgets/sighttabs/leftwidgettab/index.tsx","./src/widgets/sighttabs/rightwidgettab/sightframepreview.tsx","./src/widgets/sighttabs/rightwidgettab/sightframethreeview.tsx","./src/widgets/sighttabs/rightwidgettab/sightframethreeviewicons.tsx","./src/widgets/sighttabs/rightwidgettab/index.tsx","./src/widgets/sightstable/index.tsx","./src/widgets/snapshotrestore/index.tsx","./src/widgets/testingmodebanner/index.tsx","./src/widgets/videopreviewcard/index.tsx","./src/widgets/modals/editstationmodal.tsx","./src/widgets/modals/index.ts","./src/widgets/modals/editstationtransfersmodal/index.tsx","./src/widgets/modals/selectarticledialog/index.tsx"],"version":"5.8.3"} \ No newline at end of file +{"root":["./src/main.tsx","./src/vite-env.d.ts","./src/app/globalerrorboundary.tsx","./src/app/index.tsx","./src/app/router/index.tsx","./src/client/src/app.d.ts","./src/client/src/api/apiconfig.d.ts","./src/client/src/api/apistore/api.ts","./src/client/src/api/apistore/index.ts","./src/client/src/api/apistore/store.ts","./src/client/src/api/apistore/types.ts","./src/client/src/assets/constants.d.ts","./src/client/src/components/overlayscrollbarswrapper.d.ts","./src/client/src/components/simulationsettings.tsx","./src/client/src/components/threeviewerrorboundary.tsx","./src/client/src/components/reactmarkdown/index.tsx","./src/client/src/components/touchablelayout/index.tsx","./src/client/src/components/map/constants.tsx","./src/client/src/components/map/infinitecanvas.tsx","./src/client/src/components/map/map.tsx","./src/client/src/components/map/mapdatacontext.tsx","./src/client/src/components/map/sight.tsx","./src/client/src/components/map/station.tsx","./src/client/src/components/map/tramicon.tsx","./src/client/src/components/map/tramiconwebgl.tsx","./src/client/src/components/map/travelpath.tsx","./src/client/src/components/map/webglmap.tsx","./src/client/src/components/map/custom.d.ts","./src/client/src/components/map/transformcontext.tsx","./src/client/src/components/map/types.tsx","./src/client/src/components/map/utils.tsx","./src/client/src/components/widgets/panoramview.tsx","./src/client/src/components/widgets/threeview.tsx","./src/client/src/components/widgets/threeviewicons.tsx","./src/client/src/context/geolocationcontext.tsx","./src/client/src/hooks/useanimatedposition.ts","./src/client/src/hooks/useroutefollowingposition.ts","./src/client/src/stores/cameraanimationstore.ts","./src/client/src/stores/colorstore.ts","./src/client/src/stores/geolocationstore.ts","./src/client/src/stores/index.ts","./src/client/src/stores/hooks/usecameraanimationstore.ts","./src/client/src/stores/hooks/usecolorstore.ts","./src/client/src/stores/hooks/usegeolocationstore.ts","./src/client/src/utils/routepathanimator.ts","./src/client/src/utils/animationutils.ts","./src/entities/index.ts","./src/entities/navigation/index.ts","./src/entities/navigation/model/index.ts","./src/entities/navigation/ui/index.tsx","./src/features/index.ts","./src/features/navigation/index.ts","./src/features/navigation/ui/index.tsx","./src/pages/index.ts","./src/pages/article/index.ts","./src/pages/article/articlecreatepage/index.tsx","./src/pages/article/articleeditpage/index.tsx","./src/pages/article/articlelistpage/index.tsx","./src/pages/article/articlepreviewpage/previewleftwidget.tsx","./src/pages/article/articlepreviewpage/previewrightwidget.tsx","./src/pages/article/articlepreviewpage/index.tsx","./src/pages/carrier/index.ts","./src/pages/carrier/carriercreatepage/index.tsx","./src/pages/carrier/carriereditpage/index.tsx","./src/pages/carrier/carrierlistpage/index.tsx","./src/pages/city/index.ts","./src/pages/city/citycreatepage/index.tsx","./src/pages/city/cityeditpage/index.tsx","./src/pages/city/citylistpage/index.tsx","./src/pages/city/citypreviewpage/index.tsx","./src/pages/country/index.ts","./src/pages/country/countryaddpage/index.tsx","./src/pages/country/countrycreatepage/index.tsx","./src/pages/country/countryeditpage/index.tsx","./src/pages/country/countrylistpage/index.tsx","./src/pages/country/countrypreviewpage/index.tsx","./src/pages/createsightpage/index.tsx","./src/pages/devicespage/index.tsx","./src/pages/editsightpage/index.tsx","./src/pages/loginpage/index.tsx","./src/pages/mainpage/index.tsx","./src/pages/mappage/index.tsx","./src/pages/mappage/mapstore.ts","./src/pages/media/index.ts","./src/pages/media/mediacreatepage/index.tsx","./src/pages/media/mediaeditpage/index.tsx","./src/pages/media/medialistpage/index.tsx","./src/pages/media/mediapreviewpage/index.tsx","./src/pages/route/linekedstations.tsx","./src/pages/route/index.ts","./src/pages/route/demopage/index.tsx","./src/pages/route/routecreatepage/index.tsx","./src/pages/route/routeeditpage/index.tsx","./src/pages/route/routelistpage/index.tsx","./src/pages/route/route-preview/constants.ts","./src/pages/route/route-preview/infinitecanvas.tsx","./src/pages/route/route-preview/leftsidebar.tsx","./src/pages/route/route-preview/mapdatacontext.tsx","./src/pages/route/route-preview/rightsidebar.tsx","./src/pages/route/route-preview/sight.tsx","./src/pages/route/route-preview/sightinfowidget.tsx","./src/pages/route/route-preview/station.tsx","./src/pages/route/route-preview/transformcontext.tsx","./src/pages/route/route-preview/travelpath.tsx","./src/pages/route/route-preview/widgets.tsx","./src/pages/route/route-preview/index.tsx","./src/pages/route/route-preview/types.ts","./src/pages/route/route-preview/utils.ts","./src/pages/route/route-preview/web-gl/languageselector.tsx","./src/pages/route/route-preview/webgl-prototype/routewidget.tsx","./src/pages/route/route-preview/webgl-prototype/webglroutemapprototype.tsx","./src/pages/sight/linkedstations.tsx","./src/pages/sight/index.ts","./src/pages/sight/sightlistpage/index.tsx","./src/pages/sightpage/index.tsx","./src/pages/snapshot/index.ts","./src/pages/snapshot/snapshotcreatepage/index.tsx","./src/pages/snapshot/snapshotlistpage/index.tsx","./src/pages/station/linkedsights.tsx","./src/pages/station/index.ts","./src/pages/station/stationcreatepage/index.tsx","./src/pages/station/stationeditpage/index.tsx","./src/pages/station/stationlistpage/index.tsx","./src/pages/station/stationpreviewpage/index.tsx","./src/pages/user/index.ts","./src/pages/user/usercreatepage/index.tsx","./src/pages/user/usereditpage/index.tsx","./src/pages/user/userlistpage/index.tsx","./src/pages/vehicle/index.ts","./src/pages/vehicle/vehiclecreatepage/index.tsx","./src/pages/vehicle/vehicleeditpage/index.tsx","./src/pages/vehicle/vehiclelistpage/index.tsx","./src/pages/vehicle/vehiclepreviewpage/index.tsx","./src/shared/index.tsx","./src/shared/api/index.tsx","./src/shared/api/mobxfetch/index.ts","./src/shared/config/constants.tsx","./src/shared/config/index.ts","./src/shared/const/index.ts","./src/shared/const/mediatypes.ts","./src/shared/hooks/index.ts","./src/shared/hooks/useselectedcity.ts","./src/shared/lib/gltfcachemanager.ts","./src/shared/lib/index.ts","./src/shared/lib/decodejwt/index.ts","./src/shared/lib/mui/theme.ts","./src/shared/lib/permissions/index.ts","./src/shared/modals/index.ts","./src/shared/modals/articleselectorcreatedialog/index.tsx","./src/shared/modals/previewmediadialog/index.tsx","./src/shared/modals/selectarticledialog/index.tsx","./src/shared/modals/selectmediadialog/index.tsx","./src/shared/modals/uploadmediadialog/index.tsx","./src/shared/store/index.ts","./src/shared/store/articlesstore/index.tsx","./src/shared/store/authstore/api.ts","./src/shared/store/authstore/index.tsx","./src/shared/store/carrierstore/index.tsx","./src/shared/store/citystore/index.ts","./src/shared/store/countrystore/index.ts","./src/shared/store/createsightstore/index.tsx","./src/shared/store/devicesstore/index.tsx","./src/shared/store/editsightstore/index.tsx","./src/shared/store/languagestore/index.tsx","./src/shared/store/mediastore/index.tsx","./src/shared/store/menustore/index.ts","./src/shared/store/modelloadingstore/index.ts","./src/shared/store/routestore/index.ts","./src/shared/store/selectedcitystore/index.ts","./src/shared/store/sightsstore/index.tsx","./src/shared/store/snapshotstore/index.ts","./src/shared/store/stationsstore/index.ts","./src/shared/store/testingmodestore/api.ts","./src/shared/store/testingmodestore/index.ts","./src/shared/store/userstore/api.ts","./src/shared/store/userstore/index.ts","./src/shared/store/vehiclestore/api.ts","./src/shared/store/vehiclestore/index.ts","./src/shared/store/vehiclestore/types.ts","./src/shared/ui/animatedcirclebutton.tsx","./src/shared/ui/index.ts","./src/shared/ui/backbutton/index.tsx","./src/shared/ui/coordinatesinput/index.tsx","./src/shared/ui/input/index.tsx","./src/shared/ui/loadingspinner/index.tsx","./src/shared/ui/modal/index.tsx","./src/shared/ui/modelloadingindicator/index.tsx","./src/shared/ui/multiselect/index.tsx","./src/shared/ui/searchinput/index.tsx","./src/shared/ui/tabpanel/index.tsx","./src/widgets/index.ts","./src/widgets/cityselector/index.tsx","./src/widgets/createbutton/index.tsx","./src/widgets/deletemodal/index.tsx","./src/widgets/devicestable/devicelogsmodal.tsx","./src/widgets/devicestable/vehiclesessionsmodal.tsx","./src/widgets/devicestable/index.tsx","./src/widgets/imageuploadcard/index.tsx","./src/widgets/languageswitcher/index.tsx","./src/widgets/layout/index.tsx","./src/widgets/layout/ui/appbar.tsx","./src/widgets/layout/ui/drawer.tsx","./src/widgets/layout/ui/drawerheader.tsx","./src/widgets/leaveagree/index.tsx","./src/widgets/mediaarea/index.tsx","./src/widgets/mediaareaforsight/index.tsx","./src/widgets/mediaviewer/threeview.tsx","./src/widgets/mediaviewer/threeviewerrorboundary.tsx","./src/widgets/mediaviewer/index.tsx","./src/widgets/modelviewer3d/index.tsx","./src/widgets/permissionstable/permissionstable.tsx","./src/widgets/permissionstable/roleshinttable.tsx","./src/widgets/permissionstable/constants.ts","./src/widgets/permissionstable/index.ts","./src/widgets/reactmarkdown/index.tsx","./src/widgets/reactmarkdowneditor/index.tsx","./src/widgets/savewithoutcityagree/index.tsx","./src/widgets/sightedit/index.tsx","./src/widgets/sightheader/index.ts","./src/widgets/sightheader/ui/index.tsx","./src/widgets/sighttabs/index.ts","./src/widgets/sighttabs/createinformationtab/mediauploadbox.tsx","./src/widgets/sighttabs/createinformationtab/index.tsx","./src/widgets/sighttabs/createlefttab/index.tsx","./src/widgets/sighttabs/createrighttab/index.tsx","./src/widgets/sighttabs/informationtab/index.tsx","./src/widgets/sighttabs/leftwidgettab/index.tsx","./src/widgets/sighttabs/rightwidgettab/sightframepreview.tsx","./src/widgets/sighttabs/rightwidgettab/sightframethreeview.tsx","./src/widgets/sighttabs/rightwidgettab/sightframethreeviewicons.tsx","./src/widgets/sighttabs/rightwidgettab/index.tsx","./src/widgets/sightstable/index.tsx","./src/widgets/snapshotrestore/index.tsx","./src/widgets/testingmodebanner/index.tsx","./src/widgets/videopreviewcard/index.tsx","./src/widgets/modals/editstationmodal.tsx","./src/widgets/modals/index.ts","./src/widgets/modals/editstationtransfersmodal/index.tsx","./src/widgets/modals/selectarticledialog/index.tsx"],"version":"5.8.3"} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 76a34f8..488eb9e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16,7 +16,7 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz" integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== -"@babel/core@^7.21.3", "@babel/core@^7.28.0": +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.21.3", "@babel/core@^7.28.0": version "7.28.5" resolved "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz" integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw== @@ -170,28 +170,6 @@ resolved "https://registry.npmjs.org/@dimforge/rapier3d-compat/-/rapier3d-compat-0.12.0.tgz" integrity sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow== -"@emnapi/core@^1.5.0": - version "1.10.0" - resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.10.0.tgz#380ccc8f2412ea22d1d972df7f8ee23a3b9c7467" - integrity sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw== - dependencies: - "@emnapi/wasi-threads" "1.2.1" - tslib "^2.4.0" - -"@emnapi/runtime@^1.5.0": - version "1.10.0" - resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.10.0.tgz#4b260c0d3534204e98c6110b8db1a987d26ec87c" - integrity sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA== - dependencies: - tslib "^2.4.0" - -"@emnapi/wasi-threads@1.2.1", "@emnapi/wasi-threads@^1.1.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz#28fed21a1ba1ce797c44a070abc94d42f3ae8548" - integrity sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w== - dependencies: - tslib "^2.4.0" - "@emotion/babel-plugin@^11.13.5": version "11.13.5" resolved "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz" @@ -237,7 +215,7 @@ resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz" integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== -"@emotion/react@^11.14.0": +"@emotion/react@^11.0.0-rc.0", "@emotion/react@^11.14.0", "@emotion/react@^11.4.1", "@emotion/react@^11.5.0", "@emotion/react@^11.9.0": version "11.14.0" resolved "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz" integrity sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA== @@ -267,7 +245,7 @@ resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz" integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== -"@emotion/styled@^11.14.0": +"@emotion/styled@^11.14.0", "@emotion/styled@^11.3.0", "@emotion/styled@^11.8.1": version "11.14.1" resolved "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz" integrity sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw== @@ -299,136 +277,11 @@ resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz" integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg== -"@esbuild/aix-ppc64@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.11.tgz#2ae33300598132cc4cf580dbbb28d30fed3c5c49" - integrity sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg== - -"@esbuild/android-arm64@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.11.tgz#927708b3db5d739d6cb7709136924cc81bec9b03" - integrity sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ== - -"@esbuild/android-arm@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.11.tgz#571f94e7f4068957ec4c2cfb907deae3d01b55ae" - integrity sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg== - -"@esbuild/android-x64@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.11.tgz#8a3bf5cae6c560c7ececa3150b2bde76e0fb81e6" - integrity sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g== - "@esbuild/darwin-arm64@0.25.11": version "0.25.11" resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.11.tgz" integrity sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w== -"@esbuild/darwin-x64@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.11.tgz#70f5e925a30c8309f1294d407a5e5e002e0315fe" - integrity sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ== - -"@esbuild/freebsd-arm64@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.11.tgz#4ec1db687c5b2b78b44148025da9632397553e8a" - integrity sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA== - -"@esbuild/freebsd-x64@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.11.tgz#4c81abd1b142f1e9acfef8c5153d438ca53f44bb" - integrity sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw== - -"@esbuild/linux-arm64@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.11.tgz#69517a111acfc2b93aa0fb5eaeb834c0202ccda5" - integrity sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA== - -"@esbuild/linux-arm@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.11.tgz#58dac26eae2dba0fac5405052b9002dac088d38f" - integrity sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw== - -"@esbuild/linux-ia32@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.11.tgz#b89d4efe9bdad46ba944f0f3b8ddd40834268c2b" - integrity sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw== - -"@esbuild/linux-loong64@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.11.tgz#11f603cb60ad14392c3f5c94d64b3cc8b630fbeb" - integrity sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw== - -"@esbuild/linux-mips64el@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.11.tgz#b7d447ff0676b8ab247d69dac40a5cf08e5eeaf5" - integrity sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ== - -"@esbuild/linux-ppc64@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.11.tgz#b3a28ed7cc252a61b07ff7c8fd8a984ffd3a2f74" - integrity sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw== - -"@esbuild/linux-riscv64@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.11.tgz#ce75b08f7d871a75edcf4d2125f50b21dc9dc273" - integrity sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww== - -"@esbuild/linux-s390x@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.11.tgz#cd08f6c73b6b6ff9ccdaabbd3ff6ad3dca99c263" - integrity sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw== - -"@esbuild/linux-x64@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.11.tgz#3c3718af31a95d8946ebd3c32bb1e699bdf74910" - integrity sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ== - -"@esbuild/netbsd-arm64@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.11.tgz#b4c767082401e3a4e8595fe53c47cd7f097c8077" - integrity sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg== - -"@esbuild/netbsd-x64@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.11.tgz#f2a930458ed2941d1f11ebc34b9c7d61f7a4d034" - integrity sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A== - -"@esbuild/openbsd-arm64@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.11.tgz#b4ae93c75aec48bc1e8a0154957a05f0641f2dad" - integrity sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg== - -"@esbuild/openbsd-x64@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.11.tgz#b42863959c8dcf9b01581522e40012d2c70045e2" - integrity sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw== - -"@esbuild/openharmony-arm64@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.11.tgz#b2e717141c8fdf6bddd4010f0912e6b39e1640f1" - integrity sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ== - -"@esbuild/sunos-x64@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.11.tgz#9fbea1febe8778927804828883ec0f6dd80eb244" - integrity sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA== - -"@esbuild/win32-arm64@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.11.tgz#501539cedb24468336073383989a7323005a8935" - integrity sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q== - -"@esbuild/win32-ia32@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.11.tgz#8ac7229aa82cef8f16ffb58f1176a973a7a15343" - integrity sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA== - -"@esbuild/win32-x64@0.25.11": - version "0.25.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.11.tgz#5ecda6f3fe138b7e456f4e429edde33c823f392f" - integrity sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA== - "@eslint-community/eslint-utils@^4.7.0", "@eslint-community/eslint-utils@^4.8.0": version "4.9.0" resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz" @@ -479,7 +332,7 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.38.0", "@eslint/js@^9.25.0": +"@eslint/js@^9.25.0", "@eslint/js@9.38.0": version "9.38.0" resolved "https://registry.npmjs.org/@eslint/js/-/js-9.38.0.tgz" integrity sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A== @@ -589,7 +442,7 @@ dependencies: "@babel/runtime" "^7.28.4" -"@mui/material@^7.1.0": +"@mui/material@^5.15.14 || ^6.0.0 || ^7.0.0", "@mui/material@^7.1.0", "@mui/material@^7.3.4": version "7.3.4" resolved "https://registry.npmjs.org/@mui/material/-/material-7.3.4.tgz" integrity sha512-gEQL9pbJZZHT7lYJBKQCS723v1MGys2IFc94COXbUIyCTWa+qC77a7hUax4Yjd5ggEm35dk4AyYABpKKWC4MLw== @@ -628,7 +481,7 @@ csstype "^3.1.3" prop-types "^15.8.1" -"@mui/system@^7.3.3": +"@mui/system@^5.15.14 || ^6.0.0 || ^7.0.0", "@mui/system@^7.3.3": version "7.3.3" resolved "https://registry.npmjs.org/@mui/system/-/system-7.3.3.tgz" integrity sha512-Lqq3emZr5IzRLKaHPuMaLBDVaGvxoh6z7HMWd1RPKawBM5uMRaQ4ImsmmgXWtwJdfZux5eugfDhXJUo2mliS8Q== @@ -693,13 +546,6 @@ "@mui/utils" "^7.3.3" "@mui/x-internals" "8.14.0" -"@napi-rs/wasm-runtime@^1.0.7": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz#a46bbfedc29751b7170c5d23bc1d8ee8c7e3c1e1" - integrity sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow== - dependencies: - "@tybys/wasm-util" "^0.10.1" - "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" @@ -708,7 +554,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -726,7 +572,7 @@ resolved "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.9.3.tgz" integrity sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g== -"@photo-sphere-viewer/core@^5.13.2": +"@photo-sphere-viewer/core@^5.13.2", "@photo-sphere-viewer/core@>=5.13.1": version "5.14.0" resolved "https://registry.npmjs.org/@photo-sphere-viewer/core/-/core-5.14.0.tgz" integrity sha512-V0JeDSB1D2Q60Zqn7+0FPjq8gqbKEwuxMzNdTLydefkQugVztLvdZykO+4k5XTpweZ2QAWPH/QOI1xZbsdvR9A== @@ -778,7 +624,7 @@ utility-types "^3.11.0" zustand "^5.0.1" -"@react-three/fiber@^9.1.2": +"@react-three/fiber@^9.0.0", "@react-three/fiber@^9.1.2": version "9.4.0" resolved "https://registry.npmjs.org/@react-three/fiber/-/fiber-9.4.0.tgz" integrity sha512-k4iu1R6e5D54918V4sqmISUkI5OgTw3v7/sDRKEC632Wd5g2WBtUS5gyG63X0GJO/HZUj1tsjSXfyzwrUHZl1g== @@ -810,116 +656,11 @@ estree-walker "^2.0.2" picomatch "^4.0.2" -"@rollup/rollup-android-arm-eabi@4.52.5": - version "4.52.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz#0f44a2f8668ed87b040b6fe659358ac9239da4db" - integrity sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ== - -"@rollup/rollup-android-arm64@4.52.5": - version "4.52.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz#25b9a01deef6518a948431564c987bcb205274f5" - integrity sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA== - "@rollup/rollup-darwin-arm64@4.52.5": version "4.52.5" resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz" integrity sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA== -"@rollup/rollup-darwin-x64@4.52.5": - version "4.52.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz#8e526417cd6f54daf1d0c04cf361160216581956" - integrity sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA== - -"@rollup/rollup-freebsd-arm64@4.52.5": - version "4.52.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz#0e7027054493f3409b1f219a3eac5efd128ef899" - integrity sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA== - -"@rollup/rollup-freebsd-x64@4.52.5": - version "4.52.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz#72b204a920139e9ec3d331bd9cfd9a0c248ccb10" - integrity sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ== - -"@rollup/rollup-linux-arm-gnueabihf@4.52.5": - version "4.52.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz#ab1b522ebe5b7e06c99504cc38f6cd8b808ba41c" - integrity sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ== - -"@rollup/rollup-linux-arm-musleabihf@4.52.5": - version "4.52.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz#f8cc30b638f1ee7e3d18eac24af47ea29d9beb00" - integrity sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ== - -"@rollup/rollup-linux-arm64-gnu@4.52.5": - version "4.52.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz#7af37a9e85f25db59dc8214172907b7e146c12cc" - integrity sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg== - -"@rollup/rollup-linux-arm64-musl@4.52.5": - version "4.52.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz#a623eb0d3617c03b7a73716eb85c6e37b776f7e0" - integrity sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q== - -"@rollup/rollup-linux-loong64-gnu@4.52.5": - version "4.52.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz#76ea038b549c5c6c5f0d062942627c4066642ee2" - integrity sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA== - -"@rollup/rollup-linux-ppc64-gnu@4.52.5": - version "4.52.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz#d9a4c3f0a3492bc78f6fdfe8131ac61c7359ccd5" - integrity sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw== - -"@rollup/rollup-linux-riscv64-gnu@4.52.5": - version "4.52.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz#87ab033eebd1a9a1dd7b60509f6333ec1f82d994" - integrity sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw== - -"@rollup/rollup-linux-riscv64-musl@4.52.5": - version "4.52.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz#bda3eb67e1c993c1ba12bc9c2f694e7703958d9f" - integrity sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg== - -"@rollup/rollup-linux-s390x-gnu@4.52.5": - version "4.52.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz#f7bc10fbe096ab44694233dc42a2291ed5453d4b" - integrity sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ== - -"@rollup/rollup-linux-x64-gnu@4.52.5": - version "4.52.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz#a151cb1234cc9b2cf5e8cfc02aa91436b8f9e278" - integrity sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q== - -"@rollup/rollup-linux-x64-musl@4.52.5": - version "4.52.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz#7859e196501cc3b3062d45d2776cfb4d2f3a9350" - integrity sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg== - -"@rollup/rollup-openharmony-arm64@4.52.5": - version "4.52.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz#85d0df7233734df31e547c1e647d2a5300b3bf30" - integrity sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw== - -"@rollup/rollup-win32-arm64-msvc@4.52.5": - version "4.52.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz#e62357d00458db17277b88adbf690bb855cac937" - integrity sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w== - -"@rollup/rollup-win32-ia32-msvc@4.52.5": - version "4.52.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz#fc7cd40f44834a703c1f1c3fe8bcc27ce476cd50" - integrity sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg== - -"@rollup/rollup-win32-x64-gnu@4.52.5": - version "4.52.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz#1a22acfc93c64a64a48c42672e857ee51774d0d3" - integrity sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ== - -"@rollup/rollup-win32-x64-msvc@4.52.5": - version "4.52.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz#1657f56326bbe0ac80eedc9f9c18fc1ddd24e107" - integrity sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg== - "@svgr/babel-plugin-add-jsx-attribute@8.0.0": version "8.0.0" resolved "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz" @@ -974,7 +715,7 @@ "@svgr/babel-plugin-transform-react-native-svg" "8.1.0" "@svgr/babel-plugin-transform-svg-component" "8.0.0" -"@svgr/core@^8.1.0": +"@svgr/core@*", "@svgr/core@^8.1.0": version "8.1.0" resolved "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz" integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA== @@ -1016,73 +757,11 @@ source-map-js "^1.2.1" tailwindcss "4.1.16" -"@tailwindcss/oxide-android-arm64@4.1.16": - version "4.1.16" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.16.tgz#9bd16c0a08db20d7c93907a9bd1564e0255307eb" - integrity sha512-8+ctzkjHgwDJ5caq9IqRSgsP70xhdhJvm+oueS/yhD5ixLhqTw9fSL1OurzMUhBwE5zK26FXLCz2f/RtkISqHA== - "@tailwindcss/oxide-darwin-arm64@4.1.16": version "4.1.16" resolved "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.16.tgz" integrity sha512-C3oZy5042v2FOALBZtY0JTDnGNdS6w7DxL/odvSny17ORUnaRKhyTse8xYi3yKGyfnTUOdavRCdmc8QqJYwFKA== -"@tailwindcss/oxide-darwin-x64@4.1.16": - version "4.1.16" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.16.tgz#6193bafbb1a885795702f12bbef9cc5eb4cc550b" - integrity sha512-vjrl/1Ub9+JwU6BP0emgipGjowzYZMjbWCDqwA2Z4vCa+HBSpP4v6U2ddejcHsolsYxwL5r4bPNoamlV0xDdLg== - -"@tailwindcss/oxide-freebsd-x64@4.1.16": - version "4.1.16" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.16.tgz#0e2b064d71ba87a9001ac963be2752a8ddb64349" - integrity sha512-TSMpPYpQLm+aR1wW5rKuUuEruc/oOX3C7H0BTnPDn7W/eMw8W+MRMpiypKMkXZfwH8wqPIRKppuZoedTtNj2tg== - -"@tailwindcss/oxide-linux-arm-gnueabihf@4.1.16": - version "4.1.16" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.16.tgz#8e80c959eeda81a08ed955e23eb6d228287b9672" - integrity sha512-p0GGfRg/w0sdsFKBjMYvvKIiKy/LNWLWgV/plR4lUgrsxFAoQBFrXkZ4C0w8IOXfslB9vHK/JGASWD2IefIpvw== - -"@tailwindcss/oxide-linux-arm64-gnu@4.1.16": - version "4.1.16" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.16.tgz#d5f54910920fc5808122515f5208c5ecc1a40545" - integrity sha512-DoixyMmTNO19rwRPdqviTrG1rYzpxgyYJl8RgQvdAQUzxC1ToLRqtNJpU/ATURSKgIg6uerPw2feW0aS8SNr/w== - -"@tailwindcss/oxide-linux-arm64-musl@4.1.16": - version "4.1.16" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.16.tgz#67cdb932230ac47bf3bf5415ccc92417b27020ee" - integrity sha512-H81UXMa9hJhWhaAUca6bU2wm5RRFpuHImrwXBUvPbYb+3jo32I9VIwpOX6hms0fPmA6f2pGVlybO6qU8pF4fzQ== - -"@tailwindcss/oxide-linux-x64-gnu@4.1.16": - version "4.1.16" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.16.tgz#80ae0cfd8ebc970f239060ecdfdd07f6f6b14dce" - integrity sha512-ZGHQxDtFC2/ruo7t99Qo2TTIvOERULPl5l0K1g0oK6b5PGqjYMga+FcY1wIUnrUxY56h28FxybtDEla+ICOyew== - -"@tailwindcss/oxide-linux-x64-musl@4.1.16": - version "4.1.16" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.16.tgz#524e5b87e8e79a712de3d9bbb94d2fc2fa44391c" - integrity sha512-Oi1tAaa0rcKf1Og9MzKeINZzMLPbhxvm7rno5/zuP1WYmpiG0bEHq4AcRUiG2165/WUzvxkW4XDYCscZWbTLZw== - -"@tailwindcss/oxide-wasm32-wasi@4.1.16": - version "4.1.16" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.16.tgz#dc31d6bc1f6c1e8119a335ae3f28deb4d7c560f2" - integrity sha512-B01u/b8LteGRwucIBmCQ07FVXLzImWESAIMcUU6nvFt/tYsQ6IHz8DmZ5KtvmwxD+iTYBtM1xwoGXswnlu9v0Q== - dependencies: - "@emnapi/core" "^1.5.0" - "@emnapi/runtime" "^1.5.0" - "@emnapi/wasi-threads" "^1.1.0" - "@napi-rs/wasm-runtime" "^1.0.7" - "@tybys/wasm-util" "^0.10.1" - tslib "^2.4.0" - -"@tailwindcss/oxide-win32-arm64-msvc@4.1.16": - version "4.1.16" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.16.tgz#f1f810cdb49dae8071d5edf0db5cc0da2ec6a7e8" - integrity sha512-zX+Q8sSkGj6HKRTMJXuPvOcP8XfYON24zJBRPlszcH1Np7xuHXhWn8qfFjIujVzvH3BHU+16jBXwgpl20i+v9A== - -"@tailwindcss/oxide-win32-x64-msvc@4.1.16": - version "4.1.16" - resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.16.tgz#76dcda613578f06569c0a6015f39f12746a24dce" - integrity sha512-m5dDFJUEejbFqP+UXVstd4W/wnxA4F61q8SoL+mqTypId2T2ZpuxosNSgowiCnLp2+Z+rivdU0AqpfgiD7yCBg== - "@tailwindcss/oxide@4.1.16": version "4.1.16" resolved "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.16.tgz" @@ -1122,13 +801,6 @@ resolved "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-23.1.3.tgz" integrity sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA== -"@tybys/wasm-util@^0.10.1": - version "0.10.1" - resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.1.tgz#ecddd3205cf1e2d5274649ff0eedd2991ed7f414" - integrity sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg== - dependencies: - tslib "^2.4.0" - "@types/babel__core@^7.20.5": version "7.20.5" resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz" @@ -1198,7 +870,7 @@ dependencies: "@types/estree" "*" -"@types/estree@*", "@types/estree@1.0.8", "@types/estree@^1.0.0", "@types/estree@^1.0.6": +"@types/estree@*", "@types/estree@^1.0.0", "@types/estree@^1.0.6", "@types/estree@1.0.8": version "1.0.8" resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== @@ -1237,7 +909,7 @@ resolved "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz" integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== -"@types/node@^22.15.24": +"@types/node@^18.0.0 || ^20.0.0 || >=22.0.0", "@types/node@^22.15.24": version "22.18.13" resolved "https://registry.npmjs.org/@types/node/-/node-22.18.13.tgz" integrity sha512-Bo45YKIjnmFtv6I1TuC8AaHBbqXtIo+Om5fE4QiU1Tj8QR/qt+8O3BAtOimG5IFmwaWiPmB3Mv3jtYzBA4Us2A== @@ -1284,7 +956,7 @@ resolved "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz" integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== -"@types/react@^19.1.2": +"@types/react@*", "@types/react@^17.0.0 || ^18.0.0 || ^19.0.0", "@types/react@^18.2.25 || ^19", "@types/react@^19.1.2", "@types/react@^19.2.0", "@types/react@>=16.8", "@types/react@>=18", "@types/react@>=18.0.0": version "19.2.2" resolved "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz" integrity sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA== @@ -1303,7 +975,7 @@ dependencies: "@types/estree" "*" -"@types/three@*": +"@types/three@*", "@types/three@>=0.134.0": version "0.180.0" resolved "https://registry.npmjs.org/@types/three/-/three-0.180.0.tgz" integrity sha512-ykFtgCqNnY0IPvDro7h+9ZeLY+qjgUWv+qEvUt84grhenO60Hqd4hScHE7VTB9nOQ/3QM8lkbNE+4vKjEpUxKg== @@ -1351,7 +1023,7 @@ natural-compare "^1.4.0" ts-api-utils "^2.1.0" -"@typescript-eslint/parser@8.46.2": +"@typescript-eslint/parser@^8.46.2", "@typescript-eslint/parser@8.46.2": version "8.46.2" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.2.tgz" integrity sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g== @@ -1379,7 +1051,7 @@ "@typescript-eslint/types" "8.46.2" "@typescript-eslint/visitor-keys" "8.46.2" -"@typescript-eslint/tsconfig-utils@8.46.2", "@typescript-eslint/tsconfig-utils@^8.46.2": +"@typescript-eslint/tsconfig-utils@^8.46.2", "@typescript-eslint/tsconfig-utils@8.46.2": version "8.46.2" resolved "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.2.tgz" integrity sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag== @@ -1395,7 +1067,7 @@ debug "^4.3.4" ts-api-utils "^2.1.0" -"@typescript-eslint/types@8.46.2", "@typescript-eslint/types@^8.46.2": +"@typescript-eslint/types@^8.46.2", "@typescript-eslint/types@8.46.2": version "8.46.2" resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.2.tgz" integrity sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ== @@ -1478,7 +1150,7 @@ acorn-jsx@^5.3.2: resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.15.0: +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.15.0: version "8.15.0" resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz" integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== @@ -1582,7 +1254,7 @@ braces@^3.0.3: dependencies: fill-range "^7.1.1" -browserslist@^4.24.0: +browserslist@^4.24.0, "browserslist@>= 4.21.0": version "4.27.0" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz" integrity sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw== @@ -1879,7 +1551,7 @@ earcut@^3.0.0, earcut@^3.0.2: resolved "https://registry.npmjs.org/earcut/-/earcut-3.0.2.tgz" integrity sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ== -easymde@^2.20.0: +easymde@^2.20.0, "easymde@>= 2.0.0 < 3.0.0": version "2.20.0" resolved "https://registry.npmjs.org/easymde/-/easymde-2.20.0.tgz" integrity sha512-V1Z5f92TfR42Na852OWnIZMbM7zotWQYTddNaLYZFVKj7APBbyZ3FYJ27gBw2grMW3R6Qdv9J8n5Ij7XRSIgXQ== @@ -2022,7 +1694,7 @@ eslint-visitor-keys@^4.2.1: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz" integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== -eslint@^9.25.0: +"eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^8.57.0 || ^9.0.0", eslint@^9.25.0, eslint@>=8.40: version "9.38.0" resolved "https://registry.npmjs.org/eslint/-/eslint-9.38.0.tgz" integrity sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw== @@ -2148,7 +1820,12 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -fdir@^6.4.4, fdir@^6.5.0: +fdir@^6.4.4: + version "6.5.0" + resolved "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + +fdir@^6.5.0: version "6.5.0" resolved "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz" integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== @@ -2612,7 +2289,7 @@ its-fine@^2.0.0: dependencies: "@types/react-reconciler" "^0.28.9" -jiti@^2.6.1: +jiti@*, jiti@^2.6.1, jiti@>=1.21.0: version "2.6.1" resolved "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz" integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ== @@ -2691,62 +2368,12 @@ lie@^3.0.2: dependencies: immediate "~3.0.5" -lightningcss-android-arm64@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz#6966b7024d39c94994008b548b71ab360eb3a307" - integrity sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A== - lightningcss-darwin-arm64@1.30.2: version "1.30.2" resolved "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz" integrity sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA== -lightningcss-darwin-x64@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz#5ce87e9cd7c4f2dcc1b713f5e8ee185c88d9b7cd" - integrity sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ== - -lightningcss-freebsd-x64@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz#6ae1d5e773c97961df5cff57b851807ef33692a5" - integrity sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA== - -lightningcss-linux-arm-gnueabihf@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz#62c489610c0424151a6121fa99d77731536cdaeb" - integrity sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA== - -lightningcss-linux-arm64-gnu@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz#2a3661b56fe95a0cafae90be026fe0590d089298" - integrity sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A== - -lightningcss-linux-arm64-musl@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz#d7ddd6b26959245e026bc1ad9eb6aa983aa90e6b" - integrity sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA== - -lightningcss-linux-x64-gnu@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz#5a89814c8e63213a5965c3d166dff83c36152b1a" - integrity sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w== - -lightningcss-linux-x64-musl@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz#808c2e91ce0bf5d0af0e867c6152e5378c049728" - integrity sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA== - -lightningcss-win32-arm64-msvc@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz#ab4a8a8a2e6a82a4531e8bbb6bf0ff161ee6625a" - integrity sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ== - -lightningcss-win32-x64-msvc@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz#f01f382c8e0a27e1c018b0bee316d210eac43b6e" - integrity sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw== - -lightningcss@1.30.2: +lightningcss@^1.21.0, lightningcss@1.30.2: version "1.30.2" resolved "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz" integrity sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ== @@ -3195,7 +2822,7 @@ mobx-react-lite@^4.1.0: dependencies: use-sync-external-store "^1.4.0" -mobx@^6.13.7: +mobx@^6.13.7, mobx@^6.9.0: version "6.15.0" resolved "https://registry.npmjs.org/mobx/-/mobx-6.15.0.tgz" integrity sha512-UczzB+0nnwGotYSgllfARAqWCJ5e/skuV2K/l+Zyck/H6pJIhLXuBnz+6vn2i211o7DtbE78HQtsYEKICHGI+g== @@ -3270,7 +2897,7 @@ overlayscrollbars-react@^0.5.6: resolved "https://registry.npmjs.org/overlayscrollbars-react/-/overlayscrollbars-react-0.5.6.tgz" integrity sha512-E5To04bL5brn9GVCZ36SnfGanxa2I2MDkWoa4Cjo5wol7l+diAgi4DBc983V7l2nOk/OLJ6Feg4kySspQEGDBw== -overlayscrollbars@^2.15.1: +overlayscrollbars@^2.0.0, overlayscrollbars@^2.15.1: version "2.15.1" resolved "https://registry.npmjs.org/overlayscrollbars/-/overlayscrollbars-2.15.1.tgz" integrity sha512-glX26JwjL+Tkzv0JNOWdW4VozP5dGXO+Wx8+TPrdTEJTSYT/8eJS8yXM+fewjU0nFq/JeCa+X+BqABNjC4YZSA== @@ -3386,12 +3013,12 @@ picomatch@^2.3.1: resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -picomatch@^4.0.2, picomatch@^4.0.3: +"picomatch@^3 || ^4", picomatch@^4.0.2, picomatch@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz" integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== -pixi.js@^8.10.1: +pixi.js@^8.10.1, pixi.js@^8.2.6: version "8.14.0" resolved "https://registry.npmjs.org/pixi.js/-/pixi.js-8.14.0.tgz" integrity sha512-ituDiEBb1Oqx56RYwTtC6MjPUhPfF/i15fpUv5oEqmzC/ce3SaSumulJcOjKG7+y0J0Ekl9Rl4XTxaUw+MVFZw== @@ -3448,7 +3075,7 @@ promise-worker-transferable@^1.0.4: is-promise "^2.1.0" lie "^3.0.2" -prop-types@^15.6.2, prop-types@^15.8.1: +prop-types@^15.5.4, prop-types@^15.6.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -3509,14 +3136,19 @@ rbush@^4.0.0: dependencies: quickselect "^3.0.0" -react-dom@^19.1.0: +"react-dom@^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^18 || ^19", "react-dom@^18.0.0 || ^19.0.0", react-dom@^19, react-dom@^19.0.0, react-dom@^19.1.0, react-dom@>=16.0.0, react-dom@>=16.13, react-dom@>=16.6.0, react-dom@>=16.8.2, react-dom@>=18: version "19.2.0" resolved "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz" integrity sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ== dependencies: scheduler "^0.27.0" -react-is@^16.13.1, react-is@^16.7.0: +react-is@^16.13.1: + version "16.13.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^16.7.0: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -3550,7 +3182,7 @@ react-photo-sphere-viewer@^6.2.3: dependencies: eventemitter3 "^5.0.1" -react-reconciler@0.31.0, react-reconciler@^0.31.0: +react-reconciler@^0.31.0, react-reconciler@0.31.0: version "0.31.0" resolved "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.31.0.tgz" integrity sha512-7Ob7Z+URmesIsIVRjnLoDGwBEG/tVitidU0nMsqX/eeJaLY89RISO/10ERe0MqmzuKUUB1rmY+h1itMbUHg9BQ== @@ -3577,7 +3209,7 @@ react-router-dom@^7.6.1: dependencies: react-router "7.9.4" -react-router@7.9.4, react-router@^7.9.4: +react-router@^7.9.4, react-router@7.9.4: version "7.9.4" resolved "https://registry.npmjs.org/react-router/-/react-router-7.9.4.tgz" integrity sha512-SD3G8HKviFHg9xj7dNODUKDFgpG4xqD5nhyd0mYoB5iISepuZAvzSr8ywxgxKJ52yRzf/HWtVHc9AWwoTbljvA== @@ -3614,12 +3246,12 @@ react-use-measure@^2.1.7: resolved "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.1.7.tgz" integrity sha512-KrvcAo13I/60HpwGO5jpW7E9DfusKyLPLvuHlUyP5zqnmAPhNc6qTRjUQrdTADl0lpPpDVU2/Gg51UlOGHXbdg== -react@^19.1.0: +"react@^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.8.0 || ^17 || ^18 || ^19", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^17.0.0 || ^18.0.0 || ^19.0.0", "react@^18 || ^19", "react@^18.0 || ^19", "react@^18.0.0 || ^19.0.0", react@^19, react@^19.0.0, react@^19.1.0, react@^19.2.0, "react@>= 16.8.0", react@>=16.0.0, react@>=16.13, react@>=16.6.0, react@>=16.8, react@>=16.8.0, react@>=16.8.2, react@>=17.0, react@>=18, react@>=18.0.0, react@>=19.0.0: version "19.2.0" resolved "https://registry.npmjs.org/react/-/react-19.2.0.tgz" integrity sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ== -redux@^5.0.1: +redux@^5.0.0, redux@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz" integrity sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w== @@ -3705,7 +3337,7 @@ rollup-plugin-visualizer@^6.0.5: source-map "^0.7.4" yargs "^17.5.1" -rollup@^4.34.9: +rollup@^1.20.0||^2.0.0||^3.0.0||^4.0.0, rollup@^4.34.9, "rollup@2.x || 3.x || 4.x": version "4.52.5" resolved "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz" integrity sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw== @@ -3891,7 +3523,7 @@ svg-parser@^2.0.4: resolved "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz" integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== -tailwindcss@4.1.16, tailwindcss@^4.1.8: +tailwindcss@^4.1.8, "tailwindcss@>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1", tailwindcss@4.1.16: version "4.1.16" resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.16.tgz" integrity sha512-pONL5awpaQX4LN5eiv7moSiSPd/DLDzKVRJz8Q9PgzmAdd1R4307GQS2ZpfiN7ZmekdQrfhZZiSE5jkLR4WNaA== @@ -3923,7 +3555,7 @@ three@^0.170.0: resolved "https://registry.npmjs.org/three/-/three-0.170.0.tgz" integrity sha512-FQK+LEpYc0fBD+J8g6oSEyyNzjp+Q7Ks1C568WWaoMRLW+TkNNWmenWeGgJjV105Gd+p/2ql1ZcjYvNiPZBhuQ== -three@^0.177.0: +three@^0.177.0, "three@>= 0.159.0", three@>=0.125.0, three@>=0.126.1, three@>=0.128.0, three@>=0.134.0, three@>=0.137, three@>=0.156, three@>=0.159: version "0.177.0" resolved "https://registry.npmjs.org/three/-/three-0.177.0.tgz" integrity sha512-EiXv5/qWAaGI+Vz2A+JfavwYCMdGjxVsrn3oBwllUoqYeaBO75J63ZfyaQKoiLrqNHoTlUc6PFgMXnS0kI45zg== @@ -3993,9 +3625,9 @@ ts-api-utils@^2.1.0: resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz" integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== -tslib@^2.0.3, tslib@^2.4.0: +tslib@^2.0.3: version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== tunnel-rat@^0.1.2: @@ -4022,7 +3654,7 @@ typescript-eslint@^8.30.1: "@typescript-eslint/typescript-estree" "8.46.2" "@typescript-eslint/utils" "8.46.2" -typescript@~5.8.3: +typescript@>=4.8.4, "typescript@>=4.8.4 <6.0.0", typescript@>=4.9.5, typescript@~5.8.3: version "5.8.3" resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz" integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== @@ -4103,7 +3735,7 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -use-sync-external-store@^1.2.2, use-sync-external-store@^1.4.0, use-sync-external-store@^1.6.0: +use-sync-external-store@^1.2.2, use-sync-external-store@^1.4.0, use-sync-external-store@^1.6.0, use-sync-external-store@>=1.2.0: version "1.6.0" resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz" integrity sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w== @@ -4163,7 +3795,7 @@ vite-plugin-svgr@^4.5.0: "@svgr/core" "^8.1.0" "@svgr/plugin-jsx" "^8.1.0" -vite@^6.3.5: +"vite@^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", "vite@^5.2.0 || ^6 || ^7", vite@^6.3.5, vite@>=2.6.0: version "6.4.1" resolved "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz" integrity sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==