diff --git a/package.json b/package.json index f3ffd66..f520d6b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "white-nights", "private": true, - "version": "1.0.5", + "version": "1.0.6", "type": "module", "license": "UNLICENSED", "scripts": { diff --git a/src/app/index.tsx b/src/app/index.tsx index 89e157d..8568a98 100644 --- a/src/app/index.tsx +++ b/src/app/index.tsx @@ -5,10 +5,12 @@ import { CustomTheme } from "@shared"; import { ThemeProvider } from "@mui/material/styles"; import { ToastContainer } from "react-toastify"; import { GlobalErrorBoundary } from "./GlobalErrorBoundary"; +import { TestingModeBanner } from "@widgets"; export const App: React.FC = () => ( + diff --git a/src/pages/Article/ArticlePreviewPage/PreviewLeftWidget.tsx b/src/pages/Article/ArticlePreviewPage/PreviewLeftWidget.tsx index a2c9147..12109ef 100644 --- a/src/pages/Article/ArticlePreviewPage/PreviewLeftWidget.tsx +++ b/src/pages/Article/ArticlePreviewPage/PreviewLeftWidget.tsx @@ -6,6 +6,7 @@ import { observer } from "mobx-react-lite"; export const PreviewLeftWidget = observer(() => { const { articleMedia, articleData } = articlesStore; const { language } = languageStore; + const body = articleData?.[language]?.body; return ( { {articleData?.[language]?.heading || "Название информации"} - {articleData?.[language]?.body && ( + {body && ( { flexGrow: 1, }} > - + )} diff --git a/src/pages/Route/RouteCreatePage/index.tsx b/src/pages/Route/RouteCreatePage/index.tsx index 2c1d41b..975957f 100644 --- a/src/pages/Route/RouteCreatePage/index.tsx +++ b/src/pages/Route/RouteCreatePage/index.tsx @@ -1,6 +1,5 @@ import { Button, - Paper, TextField, Select, MenuItem, @@ -52,6 +51,7 @@ export const RouteCreatePage = observer(() => { const [turn, setTurn] = useState(""); const [centerLat, setCenterLat] = useState(""); const [centerLng, setCenterLng] = useState(""); + const [videoTimer, setVideoTimer] = useState(60); const [videoPreview, setVideoPreview] = useState(""); const [icon, setIcon] = useState(""); const [isLoading, setIsLoading] = useState(false); @@ -279,6 +279,7 @@ export const RouteCreatePage = observer(() => { path, video_preview: !isMediaIdEmpty(videoPreview) ? videoPreview : undefined, icon: !isMediaIdEmpty(icon) ? icon : undefined, + video_timer: videoTimer, }; if (governor_appeal !== undefined) { @@ -301,7 +302,7 @@ export const RouteCreatePage = observer(() => { ); return ( - +
); }); diff --git a/src/pages/Route/RouteEditPage/index.tsx b/src/pages/Route/RouteEditPage/index.tsx index d0cd621..4c3fe9c 100644 --- a/src/pages/Route/RouteEditPage/index.tsx +++ b/src/pages/Route/RouteEditPage/index.tsx @@ -1,6 +1,5 @@ import { Button, - Paper, TextField, Select, MenuItem, @@ -293,7 +292,7 @@ export const RouteEditPage = observer(() => { } return ( - +
); }); diff --git a/src/pages/Snapshot/SnapshotListPage/index.tsx b/src/pages/Snapshot/SnapshotListPage/index.tsx index 7e64a3e..6d8068c 100644 --- a/src/pages/Snapshot/SnapshotListPage/index.tsx +++ b/src/pages/Snapshot/SnapshotListPage/index.tsx @@ -47,8 +47,8 @@ export const SnapshotListPage = observer(() => { pageSize: 50, }); - const availableGB = storageInfo ? storageInfo.available_memory : null; - const totalGB = storageInfo ? storageInfo.all_memory : null; + const availableGB = storageInfo ? storageInfo.available_disk_space_gb : null; + const totalGB = storageInfo ? storageInfo.total_disk_space_gb : null; const usedGB = totalGB !== null && availableGB !== null ? totalGB - availableGB : null; const isLowStorage = @@ -91,7 +91,7 @@ export const SnapshotListPage = observer(() => { }, }, { - field: "occupied_memory", + field: "occupied_disk_space_gb", headerName: "Размер", width: 120, renderCell: (params: GridRenderCellParams) => { @@ -151,12 +151,12 @@ export const SnapshotListPage = observer(() => { name: snapshot.Name, parent: snapshots.find((s) => s.ID === snapshot.ParentID)?.Name, created_at: formatCreationTime(snapshot.CreationTime), - occupied_memory: snapshot.occupied_memory, + occupied_disk_space_gb: snapshot.occupied_disk_space_gb, })); }, [snapshots, searchQuery]); const snapshotsGB = rows.reduce( - (sum, row) => sum + (row.occupied_memory ?? 0), + (sum, row) => sum + (row.occupied_disk_space_gb ?? 0), 0, ); const systemGB = usedGB !== null ? Math.max(0, usedGB - snapshotsGB) : null; @@ -175,7 +175,7 @@ export const SnapshotListPage = observer(() => { /> )}
- {usedGB !== null && totalGB !== null && ( + {usedGB != null && totalGB != null && (
Хранилище @@ -187,8 +187,8 @@ export const SnapshotListPage = observer(() => {
{rows.map((row, i) => { const pct = - row.occupied_memory != null && totalGB > 0 - ? (row.occupied_memory / totalGB) * 100 + row.occupied_disk_space_gb != null && totalGB > 0 + ? (row.occupied_disk_space_gb / totalGB) * 100 : 0; if (pct <= 0) return null; return ( @@ -199,7 +199,7 @@ export const SnapshotListPage = observer(() => { backgroundColor: SEGMENT_COLORS[i % SEGMENT_COLORS.length], }} - title={`${row.name}: ${row.occupied_memory?.toFixed(1)} ГБ`} + title={`${row.name}: ${row.occupied_disk_space_gb?.toFixed(1)} ГБ`} /> ); })} @@ -216,7 +216,7 @@ export const SnapshotListPage = observer(() => {
{rows.map((row, i) => { - if (row.occupied_memory == null || row.occupied_memory <= 0) + if (row.occupied_disk_space_gb == null || row.occupied_disk_space_gb <= 0) return null; return (
{ diff --git a/src/shared/store/SnapshotStore/index.ts b/src/shared/store/SnapshotStore/index.ts index f653d4b..dafa003 100644 --- a/src/shared/store/SnapshotStore/index.ts +++ b/src/shared/store/SnapshotStore/index.ts @@ -23,7 +23,7 @@ type Snapshot = { Name: string; ParentID: string; CreationTime: string; - occupied_memory: number; + occupied_disk_space_gb: number; }; type SnapshotStatus = { @@ -34,8 +34,8 @@ type SnapshotStatus = { }; type StorageInfo = { - available_memory: number; - all_memory: number; + available_disk_space_gb: number; + total_disk_space_gb: number; }; class SnapshotStore { @@ -271,10 +271,10 @@ class SnapshotStore { runInAction(() => { this.snapshots = this.snapshots.filter((s) => s.ID !== id); - if (this.storageInfo && snapshot?.occupied_memory) { + if (this.storageInfo && snapshot?.occupied_disk_space_gb) { this.storageInfo = { ...this.storageInfo, - available_memory: this.storageInfo.available_memory + snapshot.occupied_memory, + available_disk_space_gb: this.storageInfo.available_disk_space_gb + snapshot.occupied_disk_space_gb, }; } }); diff --git a/src/shared/store/TestingModeStore/api.ts b/src/shared/store/TestingModeStore/api.ts new file mode 100644 index 0000000..b855854 --- /dev/null +++ b/src/shared/store/TestingModeStore/api.ts @@ -0,0 +1,18 @@ +import { authInstance } from "@shared"; + +export type TestingModeResponse = { + enabled: boolean; + updated_at: string; +}; + +export const getTestingModeApi = async (): Promise => { + const response = await authInstance.get("/testing-mode"); + return response.data as TestingModeResponse; +}; + +export const setTestingModeApi = async (request: { + enabled: boolean; +}): Promise => { + const response = await authInstance.post("/testing-mode", request); + return response.data as TestingModeResponse; +}; diff --git a/src/shared/store/TestingModeStore/index.ts b/src/shared/store/TestingModeStore/index.ts new file mode 100644 index 0000000..8fa7d9e --- /dev/null +++ b/src/shared/store/TestingModeStore/index.ts @@ -0,0 +1,62 @@ +import { makeAutoObservable } from "mobx"; +import { mobxFetch } from "@shared"; +import { + TestingModeResponse, + getTestingModeApi, + setTestingModeApi, +} from "./api"; + +const POLLING_INTERVAL = 10_000; + +class TestingModeStore { + testingMode: TestingModeResponse | null = null; + testingModeLoading = false; + testingModeError: string | null = null; + + setTestingModeResult: TestingModeResponse | null = null; + setTestingModeLoading = false; + setTestingModeError: string | null = null; + + constructor() { + makeAutoObservable(this); + } + + get isEnabled(): boolean { + return this.testingMode?.enabled ?? false; + } + + fetchTestingModeAction = mobxFetch({ + store: this, + value: "testingMode", + loading: "testingModeLoading", + error: "testingModeError", + fn: getTestingModeApi, + pollingInterval: POLLING_INTERVAL, + }); + + setTestingModeAction = mobxFetch< + { enabled: boolean }, + TestingModeResponse, + TestingModeStore + >({ + store: this, + value: "setTestingModeResult", + loading: "setTestingModeLoading", + error: "setTestingModeError", + fn: setTestingModeApi, + onSuccess: (result) => { + this.testingMode = result; + }, + }); + + startPolling() { + this.fetchTestingModeAction(); + } + + stopPolling() { + this.fetchTestingModeAction.stopPolling?.(); + } +} + +export const testingModeStore = new TestingModeStore(); +export { TestingModeStore }; diff --git a/src/shared/store/index.ts b/src/shared/store/index.ts index 41ddbc4..29defa5 100644 --- a/src/shared/store/index.ts +++ b/src/shared/store/index.ts @@ -16,3 +16,4 @@ export * from "./CarrierStore"; export * from "./StationsStore"; export * from "./MenuStore"; export * from "./SelectedCityStore"; +export * from "./TestingModeStore"; diff --git a/src/widgets/SightTabs/RightWidgetTab/SightFramePreview.tsx b/src/widgets/SightTabs/RightWidgetTab/SightFramePreview.tsx index b086323..f1a2fac 100644 --- a/src/widgets/SightTabs/RightWidgetTab/SightFramePreview.tsx +++ b/src/widgets/SightTabs/RightWidgetTab/SightFramePreview.tsx @@ -33,6 +33,7 @@ interface SightFramePreviewProps { previewMedia: PreviewMediaData | null; articles: Article[]; onArticleSelect: (index: number) => void; + previewFontSize?: number; } // Matches SightFrame.jsx renderCurrentMedia — same structure, same CSS classes @@ -151,6 +152,7 @@ export function SightFramePreview({ previewMedia, articles, onArticleSelect, + previewFontSize, }: SightFramePreviewProps) { const token = localStorage.getItem("token") ?? ""; @@ -235,7 +237,12 @@ export function SightFramePreview({ {/* title: intro-title (300px, 40px centered) or regular (24px with border) */}

- + + + { + const raw = e.target.value; + if (raw === "") { + updateSightInfo(language, { preview_font_size: undefined }, true); + return; + } + const val = Math.max(1, Math.min(300, Math.round(Number(raw)))); + if (Number.isFinite(val)) { + updateSightInfo(language, { preview_font_size: val }, true); + } + }} + slotProps={{ input: { min: 1, max: 300 } }} + sx={{ width: "200px" }} + /> + { + if (typeof newValue === "number") { + updateSightInfo(language, { preview_font_size: newValue }, true); + } + }} + sx={{ flexGrow: 1 }} + /> + diff --git a/src/widgets/TestingModeBanner/index.tsx b/src/widgets/TestingModeBanner/index.tsx new file mode 100644 index 0000000..4877cf2 --- /dev/null +++ b/src/widgets/TestingModeBanner/index.tsx @@ -0,0 +1,43 @@ +import { observer } from "mobx-react-lite"; +import { testingModeStore, authStore } from "@shared"; +import { useEffect } from "react"; + +export const TestingModeBanner = observer(() => { + const { isAuthenticated } = authStore; + + useEffect(() => { + if (!isAuthenticated) { + testingModeStore.stopPolling(); + return; + } + testingModeStore.startPolling(); + return () => { + testingModeStore.stopPolling(); + }; + }, [isAuthenticated]); + + if (!testingModeStore.isEnabled) return null; + + return ( +

+ ПРОВОДИТСЯ ТЕСТИРОВАНИЕ. ПРОСЬБА НЕ ВЗАИМОДЕЙСТВОВАТЬ С АДМИН-ПАНЕЛЬЮ +
+ ); +}); diff --git a/src/widgets/index.ts b/src/widgets/index.ts index 03fd69b..0f43324 100644 --- a/src/widgets/index.ts +++ b/src/widgets/index.ts @@ -20,3 +20,4 @@ export * from "./CreateButton"; export * from "./SaveWithoutCityAgree"; export * from "./CitySelector"; export * from "./modals"; +export * from "./TestingModeBanner"; diff --git a/tsconfig.tsbuildinfo b/tsconfig.tsbuildinfo index 630263f..b73e52b 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/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/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/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/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/index.tsx","./src/widgets/sightstable/index.tsx","./src/widgets/snapshotrestore/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/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/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/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