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 }); }
{viewModel.description}
{viewModel.error}