diff --git a/apps/docs/src/examples/tooltip.tsx b/apps/docs/src/examples/tooltip.tsx
index 1056e6bb4..3ed643b5d 100644
--- a/apps/docs/src/examples/tooltip.tsx
+++ b/apps/docs/src/examples/tooltip.tsx
@@ -4,18 +4,21 @@ import { Button } from "@vitnode/core/components/ui/button";
import {
Tooltip,
TooltipContent,
+ TooltipProvider,
TooltipTrigger,
} from "@vitnode/core/components/ui/tooltip";
export default function TooltipDemo() {
return (
-
-
-
-
-
- Add to library
-
-
+
+
+
+
+
+
+ Add to library
+
+
+
);
}
diff --git a/packages/vitnode/package.json b/packages/vitnode/package.json
index 4f6c3b0b3..e9f3ff958 100644
--- a/packages/vitnode/package.json
+++ b/packages/vitnode/package.json
@@ -109,6 +109,7 @@
},
"type": "module",
"dependencies": {
+ "@bprogress/next": "^3.2.12",
"@dnd-kit/core": "^6.3.1",
"@hono/swagger-ui": "^0.5.2",
"@react-email/preview-server": "^5.0.4",
diff --git a/packages/vitnode/src/views/layouts/provider.tsx b/packages/vitnode/src/views/layouts/provider.tsx
index 79e44acfe..790ae196e 100644
--- a/packages/vitnode/src/views/layouts/provider.tsx
+++ b/packages/vitnode/src/views/layouts/provider.tsx
@@ -1,5 +1,6 @@
"use client";
+import { ProgressProvider } from "@bprogress/next/app";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { ThemeProvider } from "next-themes";
import React from "react";
@@ -13,16 +14,11 @@ import { Toaster } from "../../components/ui/sonner";
export const RootProvider = ({
children,
- theme,
toaster,
- debug,
+ config: { debug, theme, progressBar },
}: {
children: React.ReactNode;
- debug?: VitNodeConfig["debug"];
- theme?: Omit<
- React.ComponentProps,
- "attribute" | "disableTransitionOnChange" | "enableSystem"
- >;
+ config: VitNodeConfig;
toaster?: React.ComponentProps;
}) => {
React.useEffect(() => {
@@ -59,7 +55,18 @@ export const RootProvider = ({
position={toaster?.position ?? "top-center"}
{...toaster}
/>
- {children}
+
+ {children}
+
);
diff --git a/packages/vitnode/src/views/layouts/root-layout.tsx b/packages/vitnode/src/views/layouts/root-layout.tsx
index 8c85f7272..30b8453f8 100644
--- a/packages/vitnode/src/views/layouts/root-layout.tsx
+++ b/packages/vitnode/src/views/layouts/root-layout.tsx
@@ -40,9 +40,7 @@ export const RootLayout = async ({
return (
-
- {children}
-
+ {children}
);
};
diff --git a/packages/vitnode/src/vitnode.config.ts b/packages/vitnode/src/vitnode.config.ts
index 83e58cf4a..ac62f308e 100644
--- a/packages/vitnode/src/vitnode.config.ts
+++ b/packages/vitnode/src/vitnode.config.ts
@@ -1,6 +1,8 @@
+import type { ProgressProvider } from "@bprogress/next/app";
import type { drizzle } from "drizzle-orm/postgres-js";
import type { ThemeProvider } from "next-themes";
import type { IRateLimiterOptions } from "rate-limiter-flexible";
+import type React from "react";
import type { CronAdapter } from "./api/lib/cron";
import type { BuildPluginApiReturn } from "./api/lib/plugin";
@@ -26,6 +28,7 @@ export interface VitNodeConfig<
};
metadata: VitNodeApiConfig["metadata"];
plugins: BuildPluginReturn[];
+ progressBar?: React.ComponentProps;
theme?: Omit<
React.ComponentProps,
"attribute" | "disableTransitionOnChange" | "enableSystem"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1bb149690..e31c8e969 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -55,7 +55,7 @@ importers:
version: 4.10.6
next-intl:
specifier: ^4.5.3
- version: 4.5.3(next@16.0.3(@babel/core@7.28.5)(@playwright/test@1.56.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ version: 4.5.3(next@16.0.3(@playwright/test@1.56.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
react:
specifier: ^19.2.0
version: 19.2.0
@@ -152,7 +152,7 @@ importers:
version: 16.0.3(@babel/core@7.28.5)(@playwright/test@1.56.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
next-intl:
specifier: ^4.5.3
- version: 4.5.3(next@16.0.3(@babel/core@7.28.5)(@playwright/test@1.56.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ version: 4.5.3(next@16.0.3(@playwright/test@1.56.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
node-cron:
specifier: ^4.2.1
version: 4.2.1
@@ -423,6 +423,9 @@ importers:
packages/vitnode:
dependencies:
+ '@bprogress/next':
+ specifier: ^3.2.12
+ version: 3.2.12(next@16.0.3(@babel/core@7.28.5)(@playwright/test@1.56.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@dnd-kit/core':
specifier: ^6.3.1
version: 6.3.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
@@ -570,7 +573,7 @@ importers:
version: 16.0.3(@babel/core@7.28.5)(@playwright/test@1.56.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
next-intl:
specifier: ^4.5.3
- version: 4.5.3(next@16.0.3(@babel/core@7.28.5)(@playwright/test@1.56.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ version: 4.5.3(next@16.0.3(@playwright/test@1.56.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
react:
specifier: ^19.2.0
version: 19.2.0
@@ -639,7 +642,7 @@ importers:
version: 16.0.3(@babel/core@7.28.5)(@playwright/test@1.56.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
next-intl:
specifier: ^4.5.3
- version: 4.5.3(next@16.0.3(@babel/core@7.28.5)(@playwright/test@1.56.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ version: 4.5.3(next@16.0.3(@playwright/test@1.56.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
react:
specifier: ^19.2.0
version: 19.2.0
@@ -935,6 +938,22 @@ packages:
'@borewit/text-codec@0.1.1':
resolution: {integrity: sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==}
+ '@bprogress/core@1.3.4':
+ resolution: {integrity: sha512-q/AqpurI/1uJzOrQROuZWixn/+ARekh+uvJGwLCP6HQ/EqAX4SkvNf618tSBxL4NysC0MwqAppb/mRw6Tzi61w==}
+
+ '@bprogress/next@3.2.12':
+ resolution: {integrity: sha512-/ZvNwbAd0ty9QiQwCfT2AfwWVdAaEyCPx5RUz3CfiiJS/OLBohhDz/IC/srhwK9GnXeXavvtiUrpKzN5GJDwlw==}
+ peerDependencies:
+ next: '>=13.0.0'
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+
+ '@bprogress/react@1.2.7':
+ resolution: {integrity: sha512-MqJfHW+R5CQeWqyqrLxUjdBRHk24Xl63OkBLo5DMWqUqocUikRTfCIc/jtQQbPk7BRfdr5OP3Lx7YlfQ9QOZMQ==}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+
'@clack/core@0.3.5':
resolution: {integrity: sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ==}
@@ -8482,6 +8501,22 @@ snapshots:
'@borewit/text-codec@0.1.1': {}
+ '@bprogress/core@1.3.4': {}
+
+ '@bprogress/next@3.2.12(next@16.0.3(@babel/core@7.28.5)(@playwright/test@1.56.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@bprogress/core': 1.3.4
+ '@bprogress/react': 1.2.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ next: 16.0.3(@babel/core@7.28.5)(@playwright/test@1.56.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+
+ '@bprogress/react@1.2.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@bprogress/core': 1.3.4
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+
'@clack/core@0.3.5':
dependencies:
picocolors: 1.1.1
@@ -14177,7 +14212,7 @@ snapshots:
negotiator@1.0.0: {}
- next-intl@4.5.3(next@16.0.3(@babel/core@7.28.5)(@playwright/test@1.56.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(typescript@5.9.3):
+ next-intl@4.5.3(next@16.0.3(@playwright/test@1.56.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(typescript@5.9.3):
dependencies:
'@formatjs/intl-localematcher': 0.5.10
'@swc/core': 1.15.2