import type { ComponentType, ReactNode } from "react"; import type { PluginUiSlotEntry } from "../api"; import { DroidCliProviderCard } from "../components/DroidCliProviderCard"; export interface PluginSlotHostActions { refreshAuthProviders?: () => void; openSettingsSection?: (section: string) => void; openModelOnboarding?: () => void; } interface PluginSlotComponentProps { entry: PluginUiSlotEntry; actions?: PluginSlotHostActions; } interface PluginSlotRegistration { pluginId: string; slotId: string; componentPath: string; component: ComponentType; } function DroidSettingsProviderCard({ actions }: PluginSlotComponentProps): ReactNode { return ( { actions?.refreshAuthProviders?.(); }} /> ); } function DroidOnboardingProviderCard({ actions }: PluginSlotComponentProps): ReactNode { return ( { actions?.refreshAuthProviders?.(); }} /> ); } function DroidOnboardingSetupHelp(): ReactNode { return (

Tip: Enable Droid CLI to reuse your Factory AI subscription without adding an API key.

); } function DroidPostOnboardingRecommendation({ actions }: PluginSlotComponentProps): ReactNode { return (
Enable Droid CLI Use your local Droid CLI session as an AI provider in Fusion.
); } const REGISTRY: PluginSlotRegistration[] = [ { pluginId: "fusion-plugin-droid-runtime", slotId: "settings-provider-card", componentPath: "./components/settings-provider-card.js", component: DroidSettingsProviderCard, }, { pluginId: "fusion-plugin-droid-runtime", slotId: "settings-integration-card", componentPath: "./components/settings-integration-card.js", component: DroidSettingsProviderCard, }, { pluginId: "fusion-plugin-droid-runtime", slotId: "onboarding-provider-card", componentPath: "./components/onboarding-provider-card.js", component: DroidOnboardingProviderCard, }, { pluginId: "fusion-plugin-droid-runtime", slotId: "onboarding-setup-help", componentPath: "./components/onboarding-setup-help.js", component: DroidOnboardingSetupHelp, }, { pluginId: "fusion-plugin-droid-runtime", slotId: "post-onboarding-recommendation", componentPath: "./components/post-onboarding-recommendation.js", component: DroidPostOnboardingRecommendation, }, ]; export function resolvePluginSlotComponent(entry: PluginUiSlotEntry): ComponentType | null { const hit = REGISTRY.find( (candidate) => candidate.pluginId === entry.pluginId && candidate.slotId === entry.slot.slotId && candidate.componentPath === entry.slot.componentPath, ); return hit?.component ?? null; }