"use client"
import { useState, useEffect } from "react"
import { useQueryState } from "nuqs"
import { cn } from "@lib/utils"
import { dmSansClassName } from "@/lib/fonts"
import { Button } from "@ui/components/button"
import { MCPDetailView } from "@/components/mcp-modal/mcp-detail-view"
import { XBookmarksDetailView } from "@/components/onboarding/x-bookmarks-detail-view"
import { ChromeDetail } from "@/components/integrations/chrome-detail"
import { ShortcutsDetail } from "@/components/integrations/shortcuts-detail"
import { RaycastDetail } from "@/components/integrations/raycast-detail"
import { ConnectionsDetail } from "@/components/integrations/connections-detail"
import { PluginsDetail } from "@/components/integrations/plugins-detail"
import {
ChromeIcon,
AppleShortcutsIcon,
RaycastIcon,
} from "@/components/integration-icons"
import { GoogleDrive, Notion, OneDrive } from "@ui/assets/icons"
import { ArrowLeft, Sun } from "lucide-react"
import {
integrationParam,
pluginsPanelParam,
type IntegrationParamValue,
} from "@/lib/search-params"
import Image from "next/image"
type CardId =
| "mcp"
| "chrome"
| "connections"
| "shortcuts"
| "raycast"
| "import"
| "plugins"
interface IntegrationCardDef {
id: CardId
title: string
description: string
icon: React.ReactNode
pro?: boolean
}
const cards: IntegrationCardDef[] = [
{
id: "plugins",
title: "Plugins",
description:
"Hermes on every plan; Claude Code, OpenCode, OpenClaw, and more with Pro",
icon: (
),
},
{
id: "connections",
title: "Connections",
description: "Link Notion, Google Drive, or OneDrive to import your docs",
pro: true,
icon: (
),
},
{
id: "mcp",
title: "Connect to AI",
description: "Set up MCP to use your memory in Cursor, Claude, and more",
icon: (
),
},
{
id: "chrome",
title: "Chrome Extension",
description: "Save any webpage, import bookmarks, sync ChatGPT memories",
icon: ,
},
{
id: "shortcuts",
title: "Apple Shortcuts",
description: "Add memories directly from iPhone, iPad or Mac",
icon: ,
},
{
id: "raycast",
title: "Raycast",
description: "Add and search memories from Raycast on Mac",
icon: ,
},
{
id: "import",
title: "Import Bookmarks",
description: "Bring in X/Twitter bookmarks and turn them into memories",
icon:
,
},
]
function DetailWrapper({
onBack,
children,
}: {
onBack: () => void
children: React.ReactNode
}) {
return (
{children}
)
}
const INTEGRATION_TO_CARD: Record = {
import: "import",
chrome: "chrome",
connections: "connections",
}
export function IntegrationsView() {
const [integration, setIntegration] = useQueryState(
"integration",
integrationParam,
)
const [pluginsPanel, setPluginsPanel] = useQueryState(
"plugins",
pluginsPanelParam,
)
const [selectedCard, setSelectedCard] = useState(null)
useEffect(() => {
if (pluginsPanel === true) {
setSelectedCard("plugins")
return
}
if (integration && INTEGRATION_TO_CARD[integration]) {
setSelectedCard(INTEGRATION_TO_CARD[integration])
}
}, [integration, pluginsPanel])
const handleBack = () => {
setSelectedCard(null)
setIntegration(null)
void setPluginsPanel(null)
}
switch (selectedCard) {
case "mcp":
return
case "import":
return
case "chrome":
return (
)
case "shortcuts":
return (
)
case "raycast":
return (
)
case "connections":
return (
)
case "plugins":
return (
)
}
return (
Integrations
Connect supermemory to your tools and workflows
{cards.map((card) => (
))}
)
}