From 79ca18d439d0ac4fe2d4fba647f4d1d063cecb36 Mon Sep 17 00:00:00 2001
From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
Date: Tue, 15 Sep 2026 16:33:09 -0500
Subject: [PATCH] fix build warnings from tailwind, fonts, and fast refresh
(#24359)
fix duplicated styles, move fonts to src/assets/fonts for vite to bundle (nginx already rewrites correctly), and fix fast refresh for PreviewController, auth context/provider, and statusbar context
---
.../rootfs/usr/local/nginx/conf/nginx.conf | 7 ----
.../assets}/fonts/Inter-Black.woff2 | Bin
.../assets}/fonts/Inter-BlackItalic.woff2 | Bin
.../assets}/fonts/Inter-Bold.woff2 | Bin
.../assets}/fonts/Inter-BoldItalic.woff2 | Bin
.../assets}/fonts/Inter-ExtraBold.woff2 | Bin
.../assets}/fonts/Inter-ExtraBoldItalic.woff2 | Bin
.../assets}/fonts/Inter-ExtraLight.woff2 | Bin
.../fonts/Inter-ExtraLightItalic.woff2 | Bin
.../assets}/fonts/Inter-Italic.woff2 | Bin
.../assets}/fonts/Inter-Light.woff2 | Bin
.../assets}/fonts/Inter-LightItalic.woff2 | Bin
.../assets}/fonts/Inter-Medium.woff2 | Bin
.../assets}/fonts/Inter-MediumItalic.woff2 | Bin
.../assets}/fonts/Inter-Regular.woff2 | Bin
.../assets}/fonts/Inter-SemiBold.woff2 | Bin
.../assets}/fonts/Inter-SemiBoldItalic.woff2 | Bin
.../assets}/fonts/Inter-Thin.woff2 | Bin
.../assets}/fonts/Inter-ThinItalic.woff2 | Bin
web/src/components/Statusbar.tsx | 2 +-
.../NotificationsSettingsExtras.tsx | 2 +-
.../config-form/sections/BaseSection.tsx | 2 +-
web/src/components/navigation/Bottombar.tsx | 2 +-
.../components/player/PreviewController.ts | 13 ++++++
web/src/components/player/PreviewPlayer.tsx | 15 +------
.../player/dynamic/DynamicVideoController.ts | 2 +-
.../player/dynamic/DynamicVideoPlayer.tsx | 3 +-
.../components/settings/CloneCameraDialog.tsx | 2 +-
.../components/ui/circular-progress-bar.tsx | 6 ++-
web/src/context/auth-context.ts | 25 ++++++++++++
.../{auth-context.tsx => auth-provider.tsx} | 27 +------------
web/src/context/providers.tsx | 2 +-
web/src/context/statusbar-context.ts | 28 +++++++++++++
web/src/context/statusbar-provider.tsx | 37 ++----------------
web/src/index.css | 36 ++++++++---------
web/src/views/events/EventView.tsx | 5 +--
web/src/views/recording/RecordingView.tsx | 5 +--
.../views/settings/CameraManagementView.tsx | 2 +-
.../settings/EnrichmentsSettingsView.tsx | 2 +-
.../views/settings/RegionGridSettingsView.tsx | 2 +-
40 files changed, 112 insertions(+), 115 deletions(-)
rename web/{public => src/assets}/fonts/Inter-Black.woff2 (100%)
rename web/{public => src/assets}/fonts/Inter-BlackItalic.woff2 (100%)
rename web/{public => src/assets}/fonts/Inter-Bold.woff2 (100%)
rename web/{public => src/assets}/fonts/Inter-BoldItalic.woff2 (100%)
rename web/{public => src/assets}/fonts/Inter-ExtraBold.woff2 (100%)
rename web/{public => src/assets}/fonts/Inter-ExtraBoldItalic.woff2 (100%)
rename web/{public => src/assets}/fonts/Inter-ExtraLight.woff2 (100%)
rename web/{public => src/assets}/fonts/Inter-ExtraLightItalic.woff2 (100%)
rename web/{public => src/assets}/fonts/Inter-Italic.woff2 (100%)
rename web/{public => src/assets}/fonts/Inter-Light.woff2 (100%)
rename web/{public => src/assets}/fonts/Inter-LightItalic.woff2 (100%)
rename web/{public => src/assets}/fonts/Inter-Medium.woff2 (100%)
rename web/{public => src/assets}/fonts/Inter-MediumItalic.woff2 (100%)
rename web/{public => src/assets}/fonts/Inter-Regular.woff2 (100%)
rename web/{public => src/assets}/fonts/Inter-SemiBold.woff2 (100%)
rename web/{public => src/assets}/fonts/Inter-SemiBoldItalic.woff2 (100%)
rename web/{public => src/assets}/fonts/Inter-Thin.woff2 (100%)
rename web/{public => src/assets}/fonts/Inter-ThinItalic.woff2 (100%)
create mode 100644 web/src/components/player/PreviewController.ts
create mode 100644 web/src/context/auth-context.ts
rename web/src/context/{auth-context.tsx => auth-provider.tsx} (77%)
create mode 100644 web/src/context/statusbar-context.ts
diff --git a/docker/main/rootfs/usr/local/nginx/conf/nginx.conf b/docker/main/rootfs/usr/local/nginx/conf/nginx.conf
index 9eed841c96..2a6699e9c8 100644
--- a/docker/main/rootfs/usr/local/nginx/conf/nginx.conf
+++ b/docker/main/rootfs/usr/local/nginx/conf/nginx.conf
@@ -343,13 +343,6 @@ http {
add_header Cache-Control "public";
}
- location /fonts/ {
- access_log off;
- expires 1y;
- include security_headers.conf;
- add_header Cache-Control "public";
- }
-
location /locales/ {
access_log off;
include security_headers.conf;
diff --git a/web/public/fonts/Inter-Black.woff2 b/web/src/assets/fonts/Inter-Black.woff2
similarity index 100%
rename from web/public/fonts/Inter-Black.woff2
rename to web/src/assets/fonts/Inter-Black.woff2
diff --git a/web/public/fonts/Inter-BlackItalic.woff2 b/web/src/assets/fonts/Inter-BlackItalic.woff2
similarity index 100%
rename from web/public/fonts/Inter-BlackItalic.woff2
rename to web/src/assets/fonts/Inter-BlackItalic.woff2
diff --git a/web/public/fonts/Inter-Bold.woff2 b/web/src/assets/fonts/Inter-Bold.woff2
similarity index 100%
rename from web/public/fonts/Inter-Bold.woff2
rename to web/src/assets/fonts/Inter-Bold.woff2
diff --git a/web/public/fonts/Inter-BoldItalic.woff2 b/web/src/assets/fonts/Inter-BoldItalic.woff2
similarity index 100%
rename from web/public/fonts/Inter-BoldItalic.woff2
rename to web/src/assets/fonts/Inter-BoldItalic.woff2
diff --git a/web/public/fonts/Inter-ExtraBold.woff2 b/web/src/assets/fonts/Inter-ExtraBold.woff2
similarity index 100%
rename from web/public/fonts/Inter-ExtraBold.woff2
rename to web/src/assets/fonts/Inter-ExtraBold.woff2
diff --git a/web/public/fonts/Inter-ExtraBoldItalic.woff2 b/web/src/assets/fonts/Inter-ExtraBoldItalic.woff2
similarity index 100%
rename from web/public/fonts/Inter-ExtraBoldItalic.woff2
rename to web/src/assets/fonts/Inter-ExtraBoldItalic.woff2
diff --git a/web/public/fonts/Inter-ExtraLight.woff2 b/web/src/assets/fonts/Inter-ExtraLight.woff2
similarity index 100%
rename from web/public/fonts/Inter-ExtraLight.woff2
rename to web/src/assets/fonts/Inter-ExtraLight.woff2
diff --git a/web/public/fonts/Inter-ExtraLightItalic.woff2 b/web/src/assets/fonts/Inter-ExtraLightItalic.woff2
similarity index 100%
rename from web/public/fonts/Inter-ExtraLightItalic.woff2
rename to web/src/assets/fonts/Inter-ExtraLightItalic.woff2
diff --git a/web/public/fonts/Inter-Italic.woff2 b/web/src/assets/fonts/Inter-Italic.woff2
similarity index 100%
rename from web/public/fonts/Inter-Italic.woff2
rename to web/src/assets/fonts/Inter-Italic.woff2
diff --git a/web/public/fonts/Inter-Light.woff2 b/web/src/assets/fonts/Inter-Light.woff2
similarity index 100%
rename from web/public/fonts/Inter-Light.woff2
rename to web/src/assets/fonts/Inter-Light.woff2
diff --git a/web/public/fonts/Inter-LightItalic.woff2 b/web/src/assets/fonts/Inter-LightItalic.woff2
similarity index 100%
rename from web/public/fonts/Inter-LightItalic.woff2
rename to web/src/assets/fonts/Inter-LightItalic.woff2
diff --git a/web/public/fonts/Inter-Medium.woff2 b/web/src/assets/fonts/Inter-Medium.woff2
similarity index 100%
rename from web/public/fonts/Inter-Medium.woff2
rename to web/src/assets/fonts/Inter-Medium.woff2
diff --git a/web/public/fonts/Inter-MediumItalic.woff2 b/web/src/assets/fonts/Inter-MediumItalic.woff2
similarity index 100%
rename from web/public/fonts/Inter-MediumItalic.woff2
rename to web/src/assets/fonts/Inter-MediumItalic.woff2
diff --git a/web/public/fonts/Inter-Regular.woff2 b/web/src/assets/fonts/Inter-Regular.woff2
similarity index 100%
rename from web/public/fonts/Inter-Regular.woff2
rename to web/src/assets/fonts/Inter-Regular.woff2
diff --git a/web/public/fonts/Inter-SemiBold.woff2 b/web/src/assets/fonts/Inter-SemiBold.woff2
similarity index 100%
rename from web/public/fonts/Inter-SemiBold.woff2
rename to web/src/assets/fonts/Inter-SemiBold.woff2
diff --git a/web/public/fonts/Inter-SemiBoldItalic.woff2 b/web/src/assets/fonts/Inter-SemiBoldItalic.woff2
similarity index 100%
rename from web/public/fonts/Inter-SemiBoldItalic.woff2
rename to web/src/assets/fonts/Inter-SemiBoldItalic.woff2
diff --git a/web/public/fonts/Inter-Thin.woff2 b/web/src/assets/fonts/Inter-Thin.woff2
similarity index 100%
rename from web/public/fonts/Inter-Thin.woff2
rename to web/src/assets/fonts/Inter-Thin.woff2
diff --git a/web/public/fonts/Inter-ThinItalic.woff2 b/web/src/assets/fonts/Inter-ThinItalic.woff2
similarity index 100%
rename from web/public/fonts/Inter-ThinItalic.woff2
rename to web/src/assets/fonts/Inter-ThinItalic.woff2
diff --git a/web/src/components/Statusbar.tsx b/web/src/components/Statusbar.tsx
index 8acb843680..4de414e911 100644
--- a/web/src/components/Statusbar.tsx
+++ b/web/src/components/Statusbar.tsx
@@ -2,7 +2,7 @@ import { useEmbeddingsReindexProgress } from "@/api/ws";
import {
StatusBarMessagesContext,
StatusMessage,
-} from "@/context/statusbar-provider";
+} from "@/context/statusbar-context";
import useStats, { useAutoFrigateStats } from "@/hooks/use-stats";
import StatusBarNotices from "@/components/health/StatusBarNotices";
import { cn } from "@/lib/utils";
diff --git a/web/src/components/config-form/sectionExtras/NotificationsSettingsExtras.tsx b/web/src/components/config-form/sectionExtras/NotificationsSettingsExtras.tsx
index 1689180173..de61340735 100644
--- a/web/src/components/config-form/sectionExtras/NotificationsSettingsExtras.tsx
+++ b/web/src/components/config-form/sectionExtras/NotificationsSettingsExtras.tsx
@@ -10,7 +10,7 @@ import {
FormMessage,
} from "@/components/ui/form";
import { Input } from "@/components/ui/input";
-import { StatusBarMessagesContext } from "@/context/statusbar-provider";
+import { StatusBarMessagesContext } from "@/context/statusbar-context";
import { FrigateConfig } from "@/types/frigateConfig";
import { zodResolver } from "@hookform/resolvers/zod";
import axios from "axios";
diff --git a/web/src/components/config-form/sections/BaseSection.tsx b/web/src/components/config-form/sections/BaseSection.tsx
index 685b06ebe3..7e94800ddf 100644
--- a/web/src/components/config-form/sections/BaseSection.tsx
+++ b/web/src/components/config-form/sections/BaseSection.tsx
@@ -61,7 +61,7 @@ import {
JsonValue,
} from "@/types/configForm";
import ActivityIndicator from "@/components/indicators/activity-indicator";
-import { StatusBarMessagesContext } from "@/context/statusbar-provider";
+import { StatusBarMessagesContext } from "@/context/statusbar-context";
import {
cameraUpdateTopicMap,
globalCameraDefaultSections,
diff --git a/web/src/components/navigation/Bottombar.tsx b/web/src/components/navigation/Bottombar.tsx
index 3dd218133a..efe145b30e 100644
--- a/web/src/components/navigation/Bottombar.tsx
+++ b/web/src/components/navigation/Bottombar.tsx
@@ -19,7 +19,7 @@ import useNavigation from "@/hooks/use-navigation";
import {
StatusBarMessagesContext,
StatusMessage,
-} from "@/context/statusbar-provider";
+} from "@/context/statusbar-context";
import { Link } from "react-router-dom";
import { cn } from "@/lib/utils";
import { isMobile } from "react-device-detect";
diff --git a/web/src/components/player/PreviewController.ts b/web/src/components/player/PreviewController.ts
new file mode 100644
index 0000000000..bc507d2695
--- /dev/null
+++ b/web/src/components/player/PreviewController.ts
@@ -0,0 +1,13 @@
+export abstract class PreviewController {
+ public camera = "";
+
+ constructor(camera: string) {
+ this.camera = camera;
+ }
+
+ abstract scrubToTimestamp(time: number): boolean;
+
+ abstract finishedSeeking(): void;
+
+ abstract setNewPreviewStartTime(time: number): void;
+}
diff --git a/web/src/components/player/PreviewPlayer.tsx b/web/src/components/player/PreviewPlayer.tsx
index 3112e1c0ae..6a11942b30 100644
--- a/web/src/components/player/PreviewPlayer.tsx
+++ b/web/src/components/player/PreviewPlayer.tsx
@@ -22,6 +22,7 @@ import {
} from "@/hooks/use-camera-previews";
import { useTranslation } from "react-i18next";
import { useCameraFriendlyName } from "@/hooks/use-camera-friendly-name";
+import { PreviewController } from "./PreviewController";
type PreviewPlayerProps = {
previewRef?: (ref: HTMLDivElement | null) => void;
@@ -102,20 +103,6 @@ export default function PreviewPlayer({
);
}
-export abstract class PreviewController {
- public camera = "";
-
- constructor(camera: string) {
- this.camera = camera;
- }
-
- abstract scrubToTimestamp(time: number): boolean;
-
- abstract finishedSeeking(): void;
-
- abstract setNewPreviewStartTime(time: number): void;
-}
-
type PreviewVideoPlayerProps = {
visibilityRef?: (ref: HTMLDivElement | null) => void;
className?: string;
diff --git a/web/src/components/player/dynamic/DynamicVideoController.ts b/web/src/components/player/dynamic/DynamicVideoController.ts
index 3e48e008e3..87908eb12c 100644
--- a/web/src/components/player/dynamic/DynamicVideoController.ts
+++ b/web/src/components/player/dynamic/DynamicVideoController.ts
@@ -1,6 +1,6 @@
import { Recording } from "@/types/record";
import { DynamicPlayback } from "@/types/playback";
-import { PreviewController } from "../PreviewPlayer";
+import { PreviewController } from "../PreviewController";
import { TimeRange, TrackingDetailsSequence } from "@/types/timeline";
import {
calculateInpointOffset,
diff --git a/web/src/components/player/dynamic/DynamicVideoPlayer.tsx b/web/src/components/player/dynamic/DynamicVideoPlayer.tsx
index 88153aaad2..bdcbe9a350 100644
--- a/web/src/components/player/dynamic/DynamicVideoPlayer.tsx
+++ b/web/src/components/player/dynamic/DynamicVideoPlayer.tsx
@@ -16,7 +16,8 @@ import {
RecordingCoverage,
} from "@/types/record";
import { Preview } from "@/types/preview";
-import PreviewPlayer, { PreviewController } from "../PreviewPlayer";
+import PreviewPlayer from "../PreviewPlayer";
+import { PreviewController } from "../PreviewController";
import { DynamicVideoController } from "./DynamicVideoController";
import HlsVideoPlayer, { HlsSource } from "../HlsVideoPlayer";
import { useDetailStream } from "@/context/detail-stream-context";
diff --git a/web/src/components/settings/CloneCameraDialog.tsx b/web/src/components/settings/CloneCameraDialog.tsx
index d475339cca..406c652575 100644
--- a/web/src/components/settings/CloneCameraDialog.tsx
+++ b/web/src/components/settings/CloneCameraDialog.tsx
@@ -65,7 +65,7 @@ import {
import { buildConfigDataForPath } from "@/utils/configUtil";
import { useConfigSchema } from "@/hooks/use-config-schema";
import { useRestart } from "@/api/ws";
-import { StatusBarMessagesContext } from "@/context/statusbar-provider";
+import { StatusBarMessagesContext } from "@/context/statusbar-context";
import RestartDialog from "@/components/overlay/dialog/RestartDialog";
import ActivityIndicator from "@/components/indicators/activity-indicator";
import SaveAllPreviewPopover from "@/components/overlay/detail/SaveAllPreviewPopover";
diff --git a/web/src/components/ui/circular-progress-bar.tsx b/web/src/components/ui/circular-progress-bar.tsx
index c1714829e6..c8c34adb7a 100644
--- a/web/src/components/ui/circular-progress-bar.tsx
+++ b/web/src/components/ui/circular-progress-bar.tsx
@@ -99,7 +99,11 @@ export default function AnimatedCircularProgressBar({
{currentPercent}%
diff --git a/web/src/context/auth-context.ts b/web/src/context/auth-context.ts
new file mode 100644
index 0000000000..56b70f9d02
--- /dev/null
+++ b/web/src/context/auth-context.ts
@@ -0,0 +1,25 @@
+import { createContext } from "react";
+
+export interface AuthState {
+ user: { username: string; role: string | null } | null;
+ allowedCameras: string[];
+ isLoading: boolean;
+ isAuthenticated: boolean; // true if auth is required
+}
+
+interface AuthContextType {
+ auth: AuthState;
+ login: (user: AuthState["user"]) => void;
+ logout: () => void;
+}
+
+export const AuthContext = createContext({
+ auth: {
+ user: null,
+ allowedCameras: [],
+ isLoading: true,
+ isAuthenticated: false,
+ },
+ login: () => {},
+ logout: () => {},
+});
diff --git a/web/src/context/auth-context.tsx b/web/src/context/auth-provider.tsx
similarity index 77%
rename from web/src/context/auth-context.tsx
rename to web/src/context/auth-provider.tsx
index eae1a8d4ad..5ce0bba020 100644
--- a/web/src/context/auth-context.tsx
+++ b/web/src/context/auth-provider.tsx
@@ -1,30 +1,7 @@
import axios from "axios";
-import { createContext, useEffect, useState } from "react";
+import { useEffect, useState } from "react";
import useSWR from "swr";
-
-interface AuthState {
- user: { username: string; role: string | null } | null;
- allowedCameras: string[];
- isLoading: boolean;
- isAuthenticated: boolean; // true if auth is required
-}
-
-interface AuthContextType {
- auth: AuthState;
- login: (user: AuthState["user"]) => void;
- logout: () => void;
-}
-
-export const AuthContext = createContext({
- auth: {
- user: null,
- allowedCameras: [],
- isLoading: true,
- isAuthenticated: false,
- },
- login: () => {},
- logout: () => {},
-});
+import { AuthContext, AuthState } from "./auth-context";
export function AuthProvider({ children }: { children: React.ReactNode }) {
const [auth, setAuth] = useState({
diff --git a/web/src/context/providers.tsx b/web/src/context/providers.tsx
index b3f4b3e083..ba8dcd1a0a 100644
--- a/web/src/context/providers.tsx
+++ b/web/src/context/providers.tsx
@@ -6,7 +6,7 @@ import { TooltipProvider } from "@/components/ui/tooltip";
import { StatusBarMessagesProvider } from "@/context/statusbar-provider";
import { LanguageProvider } from "./language-provider";
import { StreamingSettingsProvider } from "./streaming-settings-provider";
-import { AuthProvider } from "./auth-context";
+import { AuthProvider } from "./auth-provider";
type TProvidersProps = {
children: ReactNode;
diff --git a/web/src/context/statusbar-context.ts b/web/src/context/statusbar-context.ts
new file mode 100644
index 0000000000..eacf2f7c43
--- /dev/null
+++ b/web/src/context/statusbar-context.ts
@@ -0,0 +1,28 @@
+import { createContext } from "react";
+
+export type StatusMessage = {
+ id: string;
+ text: string;
+ color?: string;
+ link?: string;
+};
+
+export type StatusMessagesState = {
+ [key: string]: StatusMessage[];
+};
+
+type StatusBarMessagesContextValue = {
+ messages: StatusMessagesState;
+ addMessage: (
+ key: string,
+ message: string,
+ color?: string,
+ messageId?: string,
+ link?: string,
+ ) => string | undefined;
+ removeMessage: (key: string, messageId: string) => void;
+ clearMessages: (key: string) => void;
+};
+
+export const StatusBarMessagesContext =
+ createContext(null);
diff --git a/web/src/context/statusbar-provider.tsx b/web/src/context/statusbar-provider.tsx
index 009cb59a1b..ca05462bce 100644
--- a/web/src/context/statusbar-provider.tsx
+++ b/web/src/context/statusbar-provider.tsx
@@ -1,42 +1,13 @@
+import { useState, ReactNode, useCallback, useMemo } from "react";
import {
- createContext,
- useState,
- ReactNode,
- useCallback,
- useMemo,
-} from "react";
-
-export type StatusMessage = {
- id: string;
- text: string;
- color?: string;
- link?: string;
-};
-
-export type StatusMessagesState = {
- [key: string]: StatusMessage[];
-};
+ StatusBarMessagesContext,
+ StatusMessagesState,
+} from "@/context/statusbar-context";
type StatusBarMessagesProviderProps = {
children: ReactNode;
};
-type StatusBarMessagesContextValue = {
- messages: StatusMessagesState;
- addMessage: (
- key: string,
- message: string,
- color?: string,
- messageId?: string,
- link?: string,
- ) => string | undefined;
- removeMessage: (key: string, messageId: string) => void;
- clearMessages: (key: string) => void;
-};
-
-export const StatusBarMessagesContext =
- createContext(null);
-
export function StatusBarMessagesProvider({
children,
}: StatusBarMessagesProviderProps) {
diff --git a/web/src/index.css b/web/src/index.css
index ee57cce771..157b8605d9 100644
--- a/web/src/index.css
+++ b/web/src/index.css
@@ -48,126 +48,126 @@ html {
font-style: normal;
font-weight: 100;
font-display: swap;
- src: url("../fonts/Inter-Thin.woff2") format("woff2");
+ src: url("./assets/fonts/Inter-Thin.woff2") format("woff2");
}
@font-face {
font-family: "Inter";
font-style: italic;
font-weight: 100;
font-display: swap;
- src: url("../fonts/Inter-ThinItalic.woff2") format("woff2");
+ src: url("./assets/fonts/Inter-ThinItalic.woff2") format("woff2");
}
@font-face {
font-family: "Inter";
font-style: normal;
font-weight: 200;
font-display: swap;
- src: url("../fonts/Inter-ExtraLight.woff2") format("woff2");
+ src: url("./assets/fonts/Inter-ExtraLight.woff2") format("woff2");
}
@font-face {
font-family: "Inter";
font-style: italic;
font-weight: 200;
font-display: swap;
- src: url("../fonts/Inter-ExtraLightItalic.woff2") format("woff2");
+ src: url("./assets/fonts/Inter-ExtraLightItalic.woff2") format("woff2");
}
@font-face {
font-family: "Inter";
font-style: normal;
font-weight: 300;
font-display: swap;
- src: url("../fonts/Inter-Light.woff2") format("woff2");
+ src: url("./assets/fonts/Inter-Light.woff2") format("woff2");
}
@font-face {
font-family: "Inter";
font-style: italic;
font-weight: 300;
font-display: swap;
- src: url("../fonts/Inter-LightItalic.woff2") format("woff2");
+ src: url("./assets/fonts/Inter-LightItalic.woff2") format("woff2");
}
@font-face {
font-family: "Inter";
font-style: normal;
font-weight: 400;
font-display: swap;
- src: url("../fonts/Inter-Regular.woff2") format("woff2");
+ src: url("./assets/fonts/Inter-Regular.woff2") format("woff2");
}
@font-face {
font-family: "Inter";
font-style: italic;
font-weight: 400;
font-display: swap;
- src: url("../fonts/Inter-Italic.woff2") format("woff2");
+ src: url("./assets/fonts/Inter-Italic.woff2") format("woff2");
}
@font-face {
font-family: "Inter";
font-style: normal;
font-weight: 500;
font-display: swap;
- src: url("../fonts/Inter-Medium.woff2") format("woff2");
+ src: url("./assets/fonts/Inter-Medium.woff2") format("woff2");
}
@font-face {
font-family: "Inter";
font-style: italic;
font-weight: 500;
font-display: swap;
- src: url("../fonts/Inter-MediumItalic.woff2") format("woff2");
+ src: url("./assets/fonts/Inter-MediumItalic.woff2") format("woff2");
}
@font-face {
font-family: "Inter";
font-style: normal;
font-weight: 600;
font-display: swap;
- src: url("../fonts/Inter-SemiBold.woff2") format("woff2");
+ src: url("./assets/fonts/Inter-SemiBold.woff2") format("woff2");
}
@font-face {
font-family: "Inter";
font-style: italic;
font-weight: 600;
font-display: swap;
- src: url("../fonts/Inter-SemiBoldItalic.woff2") format("woff2");
+ src: url("./assets/fonts/Inter-SemiBoldItalic.woff2") format("woff2");
}
@font-face {
font-family: "Inter";
font-style: normal;
font-weight: 700;
font-display: swap;
- src: url("../fonts/Inter-Bold.woff2") format("woff2");
+ src: url("./assets/fonts/Inter-Bold.woff2") format("woff2");
}
@font-face {
font-family: "Inter";
font-style: italic;
font-weight: 700;
font-display: swap;
- src: url("../fonts/Inter-BoldItalic.woff2") format("woff2");
+ src: url("./assets/fonts/Inter-BoldItalic.woff2") format("woff2");
}
@font-face {
font-family: "Inter";
font-style: normal;
font-weight: 800;
font-display: swap;
- src: url("../fonts/Inter-ExtraBold.woff2") format("woff2");
+ src: url("./assets/fonts/Inter-ExtraBold.woff2") format("woff2");
}
@font-face {
font-family: "Inter";
font-style: italic;
font-weight: 800;
font-display: swap;
- src: url("../fonts/Inter-ExtraBoldItalic.woff2") format("woff2");
+ src: url("./assets/fonts/Inter-ExtraBoldItalic.woff2") format("woff2");
}
@font-face {
font-family: "Inter";
font-style: normal;
font-weight: 900;
font-display: swap;
- src: url("../fonts/Inter-Black.woff2") format("woff2");
+ src: url("./assets/fonts/Inter-Black.woff2") format("woff2");
}
@font-face {
font-family: "Inter";
font-style: italic;
font-weight: 900;
font-display: swap;
- src: url("../fonts/Inter-BlackItalic.woff2") format("woff2");
+ src: url("./assets/fonts/Inter-BlackItalic.woff2") format("woff2");
}
.react-resizable-handle {
diff --git a/web/src/views/events/EventView.tsx b/web/src/views/events/EventView.tsx
index d58a2c5e7e..4b2374f1f4 100644
--- a/web/src/views/events/EventView.tsx
+++ b/web/src/views/events/EventView.tsx
@@ -61,9 +61,8 @@ import {
DropdownMenuItem,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
-import PreviewPlayer, {
- PreviewController,
-} from "@/components/player/PreviewPlayer";
+import PreviewPlayer from "@/components/player/PreviewPlayer";
+import { PreviewController } from "@/components/player/PreviewController";
import SummaryTimeline from "@/components/timeline/SummaryTimeline";
import { RecordingStartingPoint } from "@/types/record";
import VideoControls from "@/components/player/VideoControls";
diff --git a/web/src/views/recording/RecordingView.tsx b/web/src/views/recording/RecordingView.tsx
index 3b7ad1e39f..1498ba531f 100644
--- a/web/src/views/recording/RecordingView.tsx
+++ b/web/src/views/recording/RecordingView.tsx
@@ -3,9 +3,8 @@ import ReviewFilterGroup from "@/components/filter/ReviewFilterGroup";
import DebugReplayDialog from "@/components/overlay/DebugReplayDialog";
import ExportDialog from "@/components/overlay/ExportDialog";
import ActionsDropdown from "@/components/overlay/ActionsDropdown";
-import PreviewPlayer, {
- PreviewController,
-} from "@/components/player/PreviewPlayer";
+import PreviewPlayer from "@/components/player/PreviewPlayer";
+import { PreviewController } from "@/components/player/PreviewController";
import { DynamicVideoController } from "@/components/player/dynamic/DynamicVideoController";
import DynamicVideoPlayer from "@/components/player/dynamic/DynamicVideoPlayer";
import QualitySelector from "@/components/player/QualitySelector";
diff --git a/web/src/views/settings/CameraManagementView.tsx b/web/src/views/settings/CameraManagementView.tsx
index b9c7fd262e..2adc053430 100644
--- a/web/src/views/settings/CameraManagementView.tsx
+++ b/web/src/views/settings/CameraManagementView.tsx
@@ -58,7 +58,7 @@ import {
import type { ProfileState } from "@/types/profile";
import { getProfileColor } from "@/utils/profileColors";
import { isReplayCamera } from "@/utils/cameraUtil";
-import { StatusBarMessagesContext } from "@/context/statusbar-provider";
+import { StatusBarMessagesContext } from "@/context/statusbar-context";
import { cn } from "@/lib/utils";
import {
Select,
diff --git a/web/src/views/settings/EnrichmentsSettingsView.tsx b/web/src/views/settings/EnrichmentsSettingsView.tsx
index 7ad3d286a7..12c24a5cd1 100644
--- a/web/src/views/settings/EnrichmentsSettingsView.tsx
+++ b/web/src/views/settings/EnrichmentsSettingsView.tsx
@@ -12,7 +12,7 @@ import { toast } from "sonner";
import { Separator } from "@/components/ui/separator";
import { Link } from "react-router-dom";
import { LuExternalLink } from "react-icons/lu";
-import { StatusBarMessagesContext } from "@/context/statusbar-provider";
+import { StatusBarMessagesContext } from "@/context/statusbar-context";
import {
Select,
SelectContent,
diff --git a/web/src/views/settings/RegionGridSettingsView.tsx b/web/src/views/settings/RegionGridSettingsView.tsx
index 32c8524e60..48b707778d 100644
--- a/web/src/views/settings/RegionGridSettingsView.tsx
+++ b/web/src/views/settings/RegionGridSettingsView.tsx
@@ -14,7 +14,7 @@ import { useCallback, useContext, useState } from "react";
import { useTranslation } from "react-i18next";
import axios from "axios";
import { toast } from "sonner";
-import { StatusBarMessagesContext } from "@/context/statusbar-provider";
+import { StatusBarMessagesContext } from "@/context/statusbar-context";
import { cn } from "@/lib/utils";
type RegionGridSettingsViewProps = {