;
+ displayName?: string;
+}
+
+type ComponentWithOptionalRef = React.ComponentType
| React.ForwardRefExoticComponent
;
+
+export function withErrorBoundary
(
+ Component: ComponentWithOptionalRef
,
+ options: WithErrorBoundaryOptions = {}
+) {
+ const {
+ fallback = ComponentErrorFallback,
+ displayName,
+ ...errorBoundaryProps
+ } = options;
+
+ const WrappedComponent = React.forwardRef((props, ref) => {
+ return (
+
+
+
+ );
+ });
+
+ WrappedComponent.displayName = displayName || `withErrorBoundary(${Component.displayName || Component.name})`;
+
+ return WrappedComponent;
+}
+
+// Convenience HOCs for specific use cases
+export const withRouteErrorBoundary = (
+ Component: React.ComponentType
+) => withErrorBoundary(Component, {
+ displayName: `withRouteErrorBoundary(${Component.displayName || Component.name})`,
+});
+
+export const withComponentErrorBoundary =
(
+ Component: React.ComponentType
+) => withErrorBoundary(Component, {
+ fallback: ComponentErrorFallback,
+ displayName: `withComponentErrorBoundary(${Component.displayName || Component.name})`,
+});
+
+export default withErrorBoundary;
diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx
index 70c594f..390dec5 100644
--- a/frontend/src/main.tsx
+++ b/frontend/src/main.tsx
@@ -4,11 +4,14 @@ import ReactDOM from "react-dom/client"
import { BrowserRouter } from "react-router-dom"
import App from './App.tsx'
import './index.css'
+import { ErrorBoundary } from './components/ErrorBoundary'
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
-
-
-
+
+
+
+
+
)
diff --git a/frontend/tsconfig.app.tsbuildinfo b/frontend/tsconfig.app.tsbuildinfo
deleted file mode 100644
index 1357c7d..0000000
--- a/frontend/tsconfig.app.tsbuildinfo
+++ /dev/null
@@ -1 +0,0 @@
-{"root":["./src/app.tsx","./src/main.tsx","./src/vite-env.d.ts","./src/pages/about.tsx","./src/pages/authentication.tsx","./src/pages/botselection.tsx","./src/pages/coachpage.tsx","./src/pages/debateroom.tsx","./src/pages/game.tsx","./src/pages/home.tsx","./src/pages/leaderboard.tsx","./src/pages/matchlogs.tsx","./src/pages/onlinedebateroom.tsx","./src/pages/profile.tsx","./src/pages/prosconschallenge.tsx","./src/pages/speechtest.tsx","./src/pages/startdebate.tsx","./src/pages/strengthenargument.tsx","./src/pages/teambuilder.tsx","./src/pages/teamdebateroom.tsx","./src/pages/tournamentbracketpage.tsx","./src/pages/tournamentdetails.tsx","./src/pages/tournamenthub.tsx","./src/pages/viewdebate.tsx","./src/pages/authentication/forms.tsx","./src/atoms/debateatoms.ts","./src/components/anonymousqa.tsx","./src/components/avatarmodal.tsx","./src/components/chatroom.tsx","./src/components/chatbox.tsx","./src/components/debatepopup.tsx","./src/components/header.tsx","./src/components/judgementpopup.tsx","./src/components/layout.tsx","./src/components/matchmaking.tsx","./src/components/matchmakingpool.tsx","./src/components/playercard.tsx","./src/components/reactionbar.tsx","./src/components/roombrowser.tsx","./src/components/savedtranscripts.tsx","./src/components/sidebar.tsx","./src/components/speechtranscripts.tsx","./src/components/teamchatsidebar.tsx","./src/components/teammatchmaking.tsx","./src/components/themetoggle.tsx","./src/components/timer.tsx","./src/components/topicselector.tsx","./src/components/usercamera.tsx","./src/components/ui/avatar.tsx","./src/components/ui/badge.tsx","./src/components/ui/breadcrumb.tsx","./src/components/ui/button.tsx","./src/components/ui/calendar.tsx","./src/components/ui/card.tsx","./src/components/ui/chart.tsx","./src/components/ui/dialog.tsx","./src/components/ui/input.tsx","./src/components/ui/label.tsx","./src/components/ui/popover.tsx","./src/components/ui/progress.tsx","./src/components/ui/scroll-area.tsx","./src/components/ui/select.tsx","./src/components/ui/separator.tsx","./src/components/ui/slider.tsx","./src/components/ui/table.tsx","./src/components/ui/tabs.tsx","./src/components/ui/text-area.tsx","./src/components/ui/textarea.tsx","./src/components/ui/toast.tsx","./src/components/ui/toaster.tsx","./src/context/authcontext.tsx","./src/context/theme-provider.tsx","./src/hooks/use-toast.ts","./src/hooks/usedebatews.ts","./src/hooks/useuser.ts","./src/lib/utils.ts","./src/services/leaderboardservice.ts","./src/services/profileservice.ts","./src/services/teamdebateservice.ts","./src/services/teamservice.ts","./src/services/transcriptservice.ts","./src/services/vsbot.ts","./src/state/useratom.ts","./src/types/google.d.ts","./src/types/speech-recognition.d.ts","./src/types/user.ts","./src/utils/auth.ts","./src/utils/speechtest.ts"],"version":"5.6.3"}
\ No newline at end of file
diff --git a/frontend/tsconfig.node.tsbuildinfo b/frontend/tsconfig.node.tsbuildinfo
deleted file mode 100644
index 75ea001..0000000
--- a/frontend/tsconfig.node.tsbuildinfo
+++ /dev/null
@@ -1 +0,0 @@
-{"root":["./vite.config.ts"],"version":"5.6.3"}
\ No newline at end of file