diff --git a/.github/workflows/production-web.yml b/.github/workflows/production-web.yml index deac5f8..fe5cec5 100644 --- a/.github/workflows/production-web.yml +++ b/.github/workflows/production-web.yml @@ -33,5 +33,4 @@ jobs: - name: 🏗 Build Project Artifacts run: bunx vercel build --prod --token=${{ secrets.VERCEL_TOKEN }} - name: Deploy Project Artifacts to Vercel - run: | - bunx vercel deploy --prebuilt --prod --archive=tgz --token=${{ secrets.VERCEL_TOKEN }} > domain.txt + run: bunx vercel deploy --prebuilt --archive=tgz --token=${{ secrets.VERCEL_TOKEN }} diff --git a/.vscode/launch.json b/.vscode/launch.json index 9c09159..cbe8ded 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,23 +1,22 @@ { - "version": "0.2.0", - "configurations": [ - { - "type": "node", - "request": "launch", - "name": "Debug Website App (Next.js)", - "cwd": "${workspaceFolder}/apps/web", - "runtimeExecutable": "bun", - "runtimeArgs": ["run", "dev"], - "env": { - "NODE_OPTIONS": "--inspect" - }, - "console": "integratedTerminal", - "serverReadyAction": { - "pattern": "started server on .+, url: (https?://.+)", - "uriFormat": "%s", - "action": "debugWithChrome" - } + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Debug Website App (Next.js)", + "cwd": "${workspaceFolder}/apps/web", + "runtimeExecutable": "bun", + "runtimeArgs": ["run", "dev"], + "env": { + "NODE_OPTIONS": "--inspect" + }, + "console": "integratedTerminal", + "serverReadyAction": { + "pattern": "started server on .+, url: (https?://.+)", + "uriFormat": "%s", + "action": "debugWithChrome" } - ] - } - \ No newline at end of file + } + ] +} diff --git a/apps/web/.gitignore b/apps/web/.gitignore index e985853..c8a7336 100644 --- a/apps/web/.gitignore +++ b/apps/web/.gitignore @@ -1 +1,2 @@ .vercel +.env*.local diff --git a/apps/web/src/app/[locale]/(app)/(workspace)/components/app-sidebar.tsx b/apps/web/src/app/[locale]/(app)/(workspace)/components/app-sidebar.tsx index e3b0510..9e0848c 100644 --- a/apps/web/src/app/[locale]/(app)/(workspace)/components/app-sidebar.tsx +++ b/apps/web/src/app/[locale]/(app)/(workspace)/components/app-sidebar.tsx @@ -9,7 +9,7 @@ import { Database, Calendar, } from "lucide-react"; -import { NavMain } from "./nav-main" +import { NavMain } from "@/components/nav-main" import type React from "react"; import { MoreHorizontal, type LucideIcon } from "lucide-react" import { Plus } from "lucide-react" @@ -21,12 +21,10 @@ import { SidebarContent, SidebarFooter, SidebarGroup, - SidebarGroupLabel, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem, - SidebarMenuSkeleton, SidebarRail, } from "@deepnote-clone/ui/sidebar"; import { TeamSwitcher } from "@/components/team-switcher"; diff --git a/apps/web/src/app/[locale]/(app)/(workspace)/components/nav-main.tsx b/apps/web/src/app/[locale]/(app)/(workspace)/components/nav-main.tsx deleted file mode 100644 index 50b665e..0000000 --- a/apps/web/src/app/[locale]/(app)/(workspace)/components/nav-main.tsx +++ /dev/null @@ -1,70 +0,0 @@ -"use client" - -import { MoreHorizontal, type LucideIcon } from "lucide-react" -import { Plus } from "lucide-react" -import { - DropdownMenu, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuTrigger, -} from "@deepnote-clone/ui/dropdown-menu" -import { - SidebarGroup, - SidebarMenu, - SidebarMenuButton, - SidebarMenuItem, - useSidebar, -} from "@deepnote-clone/ui/sidebar" - -export function NavMain({ - items, -}: { - - items: { - title: string - url: string - icon?: LucideIcon - endIcon?: LucideIcon - isActive?: boolean - items?: { - title: string - url: string - }[] - }[] -}) { - const { isMobile } = useSidebar() - - return ( - - - {items.map((item) => ( - - - - - - { item.icon && } - {item.title} - - {item.endIcon && } - - - {item.items?.length ? ( - - {item.items.map((item) => ( - - {item.title} - - ))} - - ) : null} - - - ))} - - ) -} diff --git a/apps/web/src/app/[locale]/(app)/projects/[project]/components/app-sidebar.tsx b/apps/web/src/app/[locale]/(app)/projects/[project]/components/app-sidebar.tsx index c02a83a..163651c 100644 --- a/apps/web/src/app/[locale]/(app)/projects/[project]/components/app-sidebar.tsx +++ b/apps/web/src/app/[locale]/(app)/projects/[project]/components/app-sidebar.tsx @@ -1,7 +1,27 @@ -"use client" +"use client"; -import * as React from "react" -import { ChevronDown, Database, FileText, Home, Plus, Terminal } from "lucide-react" +import * as React from "react"; +import { + ChevronDown, + Database, + FileText, + Home, + Plus, + Terminal, + Power, + Clipboard, + Copy, + Edit, + FilePlus, + Folder, + Lock, + Maximize, + Trash, + BarChart2, + File, + Download, + Settings, +} from "lucide-react"; import { Sidebar, @@ -15,45 +35,149 @@ import { SidebarMenuButton, SidebarMenuItem, SidebarRail, -} from "@deepnote-clone/ui/sidebar" -import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@deepnote-clone/ui/dropdown-menu" -import { Button } from "@deepnote-clone/ui/button" -import { Card } from "@deepnote-clone/ui/card" -import { TeamSwitcher } from "@/components/team-switcher" + useSidebar, +} from "@deepnote-clone/ui/sidebar"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@deepnote-clone/ui/dropdown-menu"; +import { Button } from "@deepnote-clone/ui/button"; +import { Card } from "@deepnote-clone/ui/card"; +import { TeamSwitcher } from "@/components/team-switcher"; +import { NavMain } from "@/components/nav-main"; +import { MoreHorizontal, type LucideIcon } from "lucide-react"; +import { Hand } from "lucide-react"; +import { SnowflakeIcon } from "@deepnote-clone/ui/icons"; + +const menuItems = [ + { + title: "Rename", + url: "#", + icon: Edit, + }, + { + title: "Duplicate", + url: "#", + icon: Copy, + }, + { + title: "Create app", + url: "#", + icon: FilePlus, + }, + { + title: "View analytics", + url: "#", + icon: BarChart2, + }, + { + title: "Auto-lock notebook", + url: "#", + icon: Lock, + }, + { + title: "Make notebook full-width", + url: "#", + icon: Maximize, + }, + { + title: "Copy link to notebook", + url: "#", + icon: Clipboard, + }, + { + title: "Export as .ipynb", + url: "#", + icon: FileText, + }, + { + title: "Export as .pdf", + url: "#", + icon: File, + }, + { + title: "Export to filesystem", + url: "#", + icon: Download, + }, + { + title: "Delete", + url: "#", + icon: Trash, + }, +]; + +const data1 = { + navMain: [ + { + title: "Init", + url: "#", + endIcon: Plus, + }, + { + title: "Notebooks", + url: "#", + items: menuItems, + endIcon: MoreHorizontal, + }, + ], +}; export function AppSidebar() { + const { isMobile } = useSidebar(); return ( - + Notebooks - + + + + + + - - - - Init - - + + + + Integrations + + + + - - - - - notebook + + + + + + [Demo] Snowflake - - - - - + + + + + Create a new integration + + + + + - - Integrations @@ -81,7 +205,10 @@ export function AppSidebar() {

Import files

-

Upload CSVs, Parquet files or images. Files are shared with notebooks in this project.

+

+ Upload CSVs, Parquet files or images. Files are shared with + notebooks in this project. +

@@ -102,34 +229,39 @@ export function AppSidebar() {
-
- Machine - -
-
- - - + Machine + +
+
+ + +
- - +
+
+ - ) + ); } - diff --git a/apps/web/src/components/apple-sign-in.tsx b/apps/web/src/components/apple-sign-in.tsx deleted file mode 100644 index a29bcfc..0000000 --- a/apps/web/src/components/apple-sign-in.tsx +++ /dev/null @@ -1,57 +0,0 @@ -"use client"; - -import { createClient } from "@deepnote-clone/supabase/client"; -import { Button } from "@deepnote-clone/ui/button"; -import { Icons } from "@deepnote-clone/ui/icons"; -import { isDesktopApp } from "@todesktop/client-core/platform/todesktop"; -import { Loader2 } from "lucide-react"; -import { useState } from "react"; - -export function AppleSignIn() { - const [isLoading, setLoading] = useState(false); - const supabase = createClient(); - - const handleSignIn = async () => { - setLoading(true); - - if (isDesktopApp()) { - const redirectTo = new URL("/api/auth/callback", window.location.origin); - - redirectTo.searchParams.append("provider", "apple"); - redirectTo.searchParams.append("client", "desktop"); - - await supabase.auth.signInWithOAuth({ - provider: "apple", - options: { - redirectTo: redirectTo.toString(), - queryParams: { - client: "desktop", - }, - }, - }); - } else { - await supabase.auth.signInWithOAuth({ - provider: "apple", - options: { - redirectTo: `${window.location.origin}/api/auth/callback?provider=apple`, - }, - }); - } - }; - - return ( - - ); -} diff --git a/apps/web/src/components/nav-main.tsx b/apps/web/src/components/nav-main.tsx new file mode 100644 index 0000000..ab7915e --- /dev/null +++ b/apps/web/src/components/nav-main.tsx @@ -0,0 +1,76 @@ +"use client"; + +import { MoreHorizontal, type LucideIcon } from "lucide-react"; +import { Plus } from "lucide-react"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@deepnote-clone/ui/dropdown-menu"; +import { + SidebarGroup, + SidebarMenu, + SidebarMenuButton, + SidebarMenuItem, + useSidebar, +} from "@deepnote-clone/ui/sidebar"; + +export function NavMain({ + items, +}: { + items: { + title: string; + url: string; + icon?: LucideIcon; + endIcon?: LucideIcon; + isActive?: boolean; + items?: { + title: string; + url: string; + icon?: LucideIcon; + endIcon?: LucideIcon; + }[]; + }[]; +}) { + const { isMobile } = useSidebar(); + + return ( + + {items.map((item) => ( + + + + + + {item.icon && } + {item.title} + + {item.endIcon && } + + + {item.items?.length ? ( + + {item.items.map((item) => ( + + <> + + {item.icon && } + {item.title} + + {item.endIcon && } + + + ))} + + ) : null} + + + ))} + + ); +} diff --git a/bun.lockb b/bun.lockb index d576696..644fdbc 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/packages/ui/src/icons/index.tsx b/packages/ui/src/icons/index.tsx index 65cc8c3..7b6e2c6 100644 --- a/packages/ui/src/icons/index.tsx +++ b/packages/ui/src/icons/index.tsx @@ -890,4 +890,18 @@ export const SQL_ICON = forwardRef((props, ref) = -)) \ No newline at end of file +)) + +export function SnowflakeIcon() { + return ( + + {/* SVG path data for the Snowflake icon */} + + + ); +} \ No newline at end of file