Initial push

This commit is contained in:
2026-03-08 15:49:34 +01:00
parent 8da12bb7d1
commit 47127f276d
101 changed files with 13844 additions and 8 deletions

View File

@@ -0,0 +1,72 @@
"use client";
import React, { useState } from "react";
import { ThemeProvider } from "next-themes";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { Toaster } from "sonner";
import { TooltipProvider } from "@/components/ui/tooltip";
// ---------------------------------------------------------------------------
// QueryClient created once per client session
// ---------------------------------------------------------------------------
function makeQueryClient() {
return new QueryClient({
defaultOptions: {
queries: {
// Don't refetch on window focus in development
refetchOnWindowFocus: process.env.NODE_ENV === "production",
// 30 second stale time by default
staleTime: 30_000,
// Retry failed queries up to 2 times
retry: 2,
retryDelay: (attempt) => Math.min(1000 * 2 ** attempt, 30_000),
},
mutations: {
// Don't retry mutations by default
retry: 0,
},
},
});
}
// ---------------------------------------------------------------------------
// Providers
// ---------------------------------------------------------------------------
interface ProvidersProps {
children: React.ReactNode;
}
export function Providers({ children }: ProvidersProps) {
// useState ensures the QueryClient is only created once per component mount
// and is not shared between different users on SSR.
const [queryClient] = useState(() => makeQueryClient());
return (
<ThemeProvider
attribute="class"
defaultTheme="dark"
enableSystem
disableTransitionOnChange
>
<QueryClientProvider client={queryClient}>
<TooltipProvider delay={400}>
{children}
<Toaster
position="bottom-right"
theme="dark"
richColors
closeButton
toastOptions={{
style: {
background: "oklch(0.205 0 0)",
border: "1px solid oklch(1 0 0 / 10%)",
color: "oklch(0.985 0 0)",
},
className: "cubeadmin-toast",
}}
/>
</TooltipProvider>
</QueryClientProvider>
</ThemeProvider>
);
}