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 = {