import { ActionButton, DesignSystemErrorBoundary, Status, Surface, } from "@agent-native/toolkit/design-system"; import { IconCheck, IconPlugConnected } from "@tabler/icons-react"; import type { ReactNode } from "react"; import { cn } from "../utils.js"; import { useBuilderConnectCardController, type BuilderConnectCardControllerOptions, type BuilderConnectCardViewModel, } from "./useBuilderConnectCardController.js"; export interface BuilderConnectCardProps extends BuilderConnectCardControllerOptions { className?: string; render?: (context: BuilderConnectCardRenderContext) => ReactNode; } export interface BuilderConnectCardRenderContext { viewModel: BuilderConnectCardViewModel; className?: string; } export interface DefaultBuilderConnectCardViewProps { viewModel: BuilderConnectCardViewModel; className?: string; } export function DefaultBuilderConnectCardView({ viewModel, className, }: DefaultBuilderConnectCardViewProps) { const action = viewModel.action; const statusTone = viewModel.status.kind === "connected" ? "success" : viewModel.status.kind === "checking" ? "info" : "neutral"; return (
{viewModel.configured ? ( ) : ( )}

{viewModel.title}

{viewModel.status.label}

{viewModel.description}

{viewModel.error ? (

{viewModel.error}

) : null} {action ? (
} onPress={action.onPress} > {action.label}
) : null}
); } export function BuilderConnectCard({ title, description, trackingSource, className, onConnected, render, }: BuilderConnectCardProps) { const viewModel = useBuilderConnectCardController({ title, description, trackingSource, onConnected, }); const fallback = ( ); return render ? ( ) : ( fallback ); } function BuilderConnectCardCustomView({ render, viewModel, className, }: Required> & BuilderConnectCardRenderContext) { return render({ viewModel, className }); }