import { useTranslation } from "react-i18next"; import { ModalBackdrop } from "#/components/shared/modals/modal-backdrop"; import { ModalCloseButton } from "#/components/shared/modals/modal-close-button"; import { BrandButton } from "#/components/features/settings/brand-button"; import { SettingsSwitch } from "#/components/features/settings/settings-switch"; import { SkillIconBadge } from "#/components/features/skills/skill-icon-badge"; import { I18nKey } from "#/i18n/declaration"; import { cn } from "#/utils/utils"; import { modalTitleLgClassName } from "#/utils/modal-classes"; import { extensionModuleCardPillClassName } from "#/utils/extension-module-card-classes"; import type { PluginViewModel } from "./build-plugins-view-model"; import { PluginFilesSection } from "./plugin-files-section"; interface PluginDetailModalProps { plugin: PluginViewModel; isBusy?: boolean; isDisabled?: boolean; onToggle: (enabled: boolean) => void; onInstall: () => void; onUninstall: () => void; onRefresh: () => void; onClose: () => void; onStartConversation?: () => void; } export function PluginDetailModal({ plugin, isBusy = false, isDisabled = false, onToggle, onInstall, onUninstall, onRefresh, onClose, onStartConversation, }: PluginDetailModalProps) { const { t } = useTranslation("openhands"); const actionsDisabled = isDisabled || isBusy; return (

{plugin.name}

{plugin.source ? (

{plugin.source}

) : null}
{plugin.description ? (

{plugin.description}

) : null}
{plugin.isLocal ? ( {t(I18nKey.SETTINGS$PLUGINS_FILTER_LOCAL)} ) : null} {plugin.version ? ( {t(I18nKey.SETTINGS$SKILLS_VERSION, { version: plugin.version, })} ) : null} {plugin.ref ? ( {t(I18nKey.SETTINGS$PLUGINS_REF_LABEL)} {plugin.ref} ) : null} {plugin.repoPath ? ( {t(I18nKey.SETTINGS$PLUGINS_REPO_PATH_LABEL)} {plugin.repoPath} ) : null}
{plugin.installed ? ( {t( plugin.enabled ? I18nKey.SETTINGS$SKILLS_ENABLED : I18nKey.SETTINGS$SKILLS_DISABLED, )} ) : null} {plugin.skills?.length ? (

{t(I18nKey.SETTINGS$PLUGINS_SKILLS_IN_BUNDLE)}

    {plugin.skills.map((skill) => (
  • {skill.name}

    {skill.description ? (

    {skill.description}

    ) : null}
  • ))}
) : null} {plugin.path && plugin.files?.length ? ( ) : null}
); }