"use client"; import { useTranslation } from "react-i18next"; import { IconHistory, IconLayoutGrid } from "@tabler/icons-react"; import type { Canvas } from "@/lib/api/domains/canvas-api"; import { pluginPanelId } from "@/lib/state/layout-manager/plugin-panels"; import type { MobileSessionPanel } from "@/lib/state/slices/ui/types"; import { resolvePluginIcon } from "@/lib/plugins/icons"; import { pluginRegistry, usePluginRegistry } from "@/lib/plugins/registry"; import { registrationIsVisible } from "../plugin-task-panel"; import { resolveTaskPanelTitle } from "@/lib/state/layout-manager/plugin-panels"; import { MobilePickerSheet } from "./mobile-picker-sheet"; type PluginPanelPickerProps = { open: boolean; onOpenChange: (open: boolean) => void; onSelect: (panel: MobileSessionPanel) => void; showPromptHistory?: boolean; taskCanvases?: Canvas[]; onOpenCanvas?: (canvasId: string) => void; taskId?: string | null; sessionId?: string | null; sessionKind?: "managed" | "passthrough" | null; }; /** One grouped, scrollable phone picker for all mobile-enabled plugin panels. */ export function PluginPanelPicker({ open, onOpenChange, onSelect, showPromptHistory = false, taskCanvases = [], onOpenCanvas, taskId = null, sessionId = null, sessionKind = null, }: PluginPanelPickerProps) { const { t } = useTranslation(); usePluginRegistry(); const registrations = taskId ? pluginRegistry .getTaskPanels() .filter((registration) => registration.mobileEnabled) .filter((registration) => registrationIsVisible(registration, { taskId, sessionId, sessionKind, presentation: "mobile", }), ) : []; if (!open) return null; return (
{taskCanvases.map((canvas) => ( ))} {showPromptHistory && ( )} {registrations.map((registration) => { const panelId = pluginPanelId(registration.pluginId, registration.id); const Icon = resolvePluginIcon(registration.icon); return ( ); })}
); }