import { DialogButton, Dropdown, Focusable, QuickAccessTab, Router, SingleDropdownOption, SuspensefulImage, staticClasses, } from 'decky-frontend-lib'; import { FC, useRef, useState } from 'react'; import { StorePlugin, StorePluginVersion, requestPluginInstall } from './Store'; interface PluginCardProps { plugin: StorePlugin; } const classNames = (...classes: string[]) => { return classes.join(' '); }; const PluginCard: FC = ({ plugin }) => { const [selectedOption, setSelectedOption] = useState(0); const buttonRef = useRef(null); const containerRef = useRef(null); return (
{/* TODO: abstract this messy focus hackiness into a custom component in lib */} { buttonRef.current!.focus(); }} onCancel={(e: CustomEvent) => { if (containerRef.current!.querySelectorAll('* :focus').length === 0) { Router.NavigateBackOrOpenMenu(); setTimeout(() => Router.OpenQuickAccessMenu(QuickAccessTab.Decky), 1000); } else { containerRef.current!.focus(); } }} style={{ display: 'flex', flexDirection: 'column', background: '#ACB2C924', height: 'unset', marginBottom: 'unset', // boxShadow: var(--gpShadow-Medium); scrollSnapAlign: 'start', boxSizing: 'border-box', }} >

Author: {plugin.author}

Tags: {plugin.tags.map((tag: string) => ( {tag == 'root' ? 'Requires root' : tag} ))}

requestPluginInstall(plugin, plugin.versions[selectedOption])} > Install
({ data: index, label: version.name, })) as SingleDropdownOption[] } strDefaultLabel={'Select a version'} selectedOption={selectedOption} onChange={({ data }) => setSelectedOption(data)} />
); }; export default PluginCard;