-
-
-
+
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 (
+
+ );
+}
\ No newline at end of file