"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 { 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; }; /** One grouped, scrollable phone picker for all mobile-enabled plugin panels. */ export function PluginPanelPicker({ open, onOpenChange, onSelect, showPromptHistory = false, taskCanvases = [], onOpenCanvas, }: PluginPanelPickerProps) { const { t } = useTranslation(); usePluginRegistry(); const registrations = pluginRegistry .getTaskPanels() .filter((registration) => registration.mobileEnabled); 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 ( ); })}
); }