diff --git a/package-lock.json b/package-lock.json
index d6d9b12..fbd2b1a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -27,6 +27,7 @@
"clsx": "^2.1.1",
"dexie": "^4.0.11",
"dexie-react-hooks": "^1.1.7",
+ "dockview": "^4.5.0",
"lucide-react": "^0.525.0",
"next": "^15.4.3",
"next-themes": "^0.4.6",
@@ -3547,6 +3548,24 @@
"react": ">=16"
}
},
+ "node_modules/dockview": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/dockview/-/dockview-4.5.0.tgz",
+ "integrity": "sha512-Qg504Vxj0Ivk57pvoXbzDUcUK5pXewFpKPQdH1WoznC+d5XbvuDISZlyMhJKEY+m75xtsiJLxOeE4HCxG1j0NQ==",
+ "license": "MIT",
+ "dependencies": {
+ "dockview-core": "^4.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/dockview-core": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/dockview-core/-/dockview-core-4.5.0.tgz",
+ "integrity": "sha512-onwWGSy5mUiVDQDjVMIMeTxFUkJGBLHxpfSefDd4R6/Qfkvp2I0qTczNNoEXgxQkrG8J/7hjPZ+p+R9M7ggkVw==",
+ "license": "MIT"
+ },
"node_modules/doctrine": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
diff --git a/package.json b/package.json
index 2df1ac3..e32b1e2 100644
--- a/package.json
+++ b/package.json
@@ -28,6 +28,7 @@
"clsx": "^2.1.1",
"dexie": "^4.0.11",
"dexie-react-hooks": "^1.1.7",
+ "dockview": "^4.5.0",
"lucide-react": "^0.525.0",
"next": "^15.4.3",
"next-themes": "^0.4.6",
diff --git a/src/app/(dashboard)/layout.tsx b/src/app/(dashboard)/layout.tsx
new file mode 100644
index 0000000..231f4b5
--- /dev/null
+++ b/src/app/(dashboard)/layout.tsx
@@ -0,0 +1,21 @@
+import { ReactNode } from "react";
+import { SidebarProvider } from "@/components/ui/sidebar";
+import Dashboard from "@/components/dashboard";
+import PersistenceProvider from "../persistence-provider";
+
+export default async function RootLayout({
+ children,
+}: Readonly<{
+ children: ReactNode
+}>) {
+ return (
+
+
+
+
+ {children}
+
+
+
+ );
+}
diff --git a/src/app/page.tsx b/src/app/(dashboard)/page.tsx
similarity index 99%
rename from src/app/page.tsx
rename to src/app/(dashboard)/page.tsx
index 7efdae9..53a3064 100644
--- a/src/app/page.tsx
+++ b/src/app/(dashboard)/page.tsx
@@ -32,6 +32,7 @@ import StaticSidebarTrigger from "@/components/static-sidebar-trigger";
import SidebarTriggerAdjustable from "@/components/sidebar-trigger-adjustable";
import ScrollFadingTitle from "@/components/scroll-fading-title";
import AscendingCard from "@/components/ascending-card";
+import Link from "next/link";
type SortingType = "byCreationDate"
| "byEditDate"
@@ -408,7 +409,7 @@ const ProjectContainer = ({
}
};
- return (
+ const projectComponent = (
@@ -430,7 +431,11 @@ const ProjectContainer = ({
)}
- )
+ );
+
+ return selecting
+ ? projectComponent
+ : ({projectComponent});
};
export default function Home(): ReactNode {
diff --git a/src/app/settings/page.tsx b/src/app/(dashboard)/settings/page.tsx
similarity index 100%
rename from src/app/settings/page.tsx
rename to src/app/(dashboard)/settings/page.tsx
diff --git a/src/app/settings/storage/page.tsx b/src/app/(dashboard)/settings/storage/page.tsx
similarity index 98%
rename from src/app/settings/storage/page.tsx
rename to src/app/(dashboard)/settings/storage/page.tsx
index d86cab4..52bef26 100644
--- a/src/app/settings/storage/page.tsx
+++ b/src/app/(dashboard)/settings/storage/page.tsx
@@ -7,6 +7,7 @@ import SidebarTriggerAdjustable from "@/components/sidebar-trigger-adjustable";
import StaticSidebarTrigger from "@/components/static-sidebar-trigger";
import { Button } from "@/components/ui/button";
import { Label } from "@/components/ui/label";
+import { useSidebar } from "@/components/ui/sidebar";
import WideContainer from "@/components/wide-container";
import { useIsMobile } from "@/hooks/use-mobile";
import { ArrowLeftIcon } from "lucide-react";
diff --git a/src/app/(editor)/editor/[uuid]/layout.tsx b/src/app/(editor)/editor/[uuid]/layout.tsx
new file mode 100644
index 0000000..b503443
--- /dev/null
+++ b/src/app/(editor)/editor/[uuid]/layout.tsx
@@ -0,0 +1,57 @@
+import type { Metadata, Viewport } from "next";
+import { Geist, Geist_Mono } from "next/font/google";
+import { ReactNode } from "react";
+import "@/app/globals.css";
+import ThemeProvider from "@/app/theme-provider";
+import Analytics from "@/app/analytics";
+import PersistenceProvider from "@/app/persistence-provider";
+import { Toaster } from "@/components/ui/sonner";
+import PWAHead from "@/app/pwa-head";
+
+const geist = Geist({
+ variable: "--font-geist",
+ subsets: ["latin"]
+});
+
+const geistMono = Geist_Mono({
+ variable: "--font-geist-mono",
+ subsets: ["latin"]
+});
+
+export const metadata: Metadata = {
+ title: "ClipFusion",
+ description: "Desktop power right in your browser",
+};
+
+export const viewport: Viewport = {
+ width: 'device-width',
+ initialScale: 1,
+ maximumScale: 1,
+ userScalable: false,
+ viewportFit: "cover"
+};
+
+export default async function RootLayout({
+ children,
+}: Readonly<{
+ children: ReactNode;
+}>) {
+ return (
+
+
+
+
+
+
+
+
+
+ {children}
+
+
+
+
+
+
+ );
+}
diff --git a/src/app/(editor)/editor/[uuid]/page.tsx b/src/app/(editor)/editor/[uuid]/page.tsx
new file mode 100644
index 0000000..4452798
--- /dev/null
+++ b/src/app/(editor)/editor/[uuid]/page.tsx
@@ -0,0 +1,7 @@
+export default function Editor() {
+ return (
+ <>
+ Hello, Editor Page!
+ >
+ );
+}
\ No newline at end of file
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 8eb7d40..ca14b5a 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -1,8 +1,6 @@
import type { Metadata, Viewport } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import { ReactNode } from "react";
-import { SidebarProvider } from "@/components/ui/sidebar";
-import Dashboard from "@/components/dashboard";
import "./globals.css";
import ThemeProvider from "./theme-provider";
import Analytics from "./analytics";
@@ -46,14 +44,11 @@ export default async function RootLayout({
-
-
{children}
-