import React, { useState, useEffect } from "react"; import Layout from "@theme/Layout"; import styles from "./marketplace.module.css"; interface Plugin { name: string; title: string; description: string; file: string; url?: string; } const REGISTRY_URL = "https://raw.githubusercontent.com/floatpane/matcha/master/plugins/registry.json"; const RAW_BASE = "https://raw.githubusercontent.com/floatpane/matcha/master/plugins/"; function pluginUrl(plugin: Plugin): string { return plugin.url || `${RAW_BASE}${plugin.file}`; } function installCmd(plugin: Plugin): string { return `matcha install ${pluginUrl(plugin)}`; } function CopyButton({ text }: { text: string }) { const [copied, setCopied] = useState(false); const handleCopy = () => { navigator.clipboard.writeText(text); setCopied(true); setTimeout(() => setCopied(false), 2000); }; return ( ); } function PluginCard({ plugin }: { plugin: Plugin }) { const cmd = installCmd(plugin); return (
{plugin.description}
{cmd}
Browse community plugins for Matcha. Click install commands to copy.
Loading plugins...
} {error &&Error: {error}
} {!loading && !error && ( <>{plugins.length} plugins available