+
SNIPPETS
+
+
+ setQuery(e.target.value)}
+ placeholder="Search by title, language, or tag"
+ style={{ ...inputStyle, flex: 1 }}
+ />
+
+
+
+
+
+
+
+
+ {showImport && (
+
+ Paste exported JSON
+
+ )}
+
+ {showForm && (
+
+ )}
+
+
+ {filtered.length === 0 && (
+
No snippets yet.
+ )}
+ {filtered.map((s) => (
+
+
+ {s.title}
+ {s.language && {s.language}}
+
+ {s.tags.length > 0 && (
+
+ {s.tags.map((t) => (
+
+ {t}
+
+ ))}
+
+ )}
+
+ {s.code}
+
+
+
+
+
+
+
+ ))}
+
+
+ );
+}
diff --git a/plugins/snippets-manager/src/activate.ts b/plugins/snippets-manager/src/activate.ts
new file mode 100644
index 0000000..71364c4
--- /dev/null
+++ b/plugins/snippets-manager/src/activate.ts
@@ -0,0 +1,58 @@
+import * as React from "react";
+import { SnippetsPanel } from "./SnippetsPanel";
+
+// Hermes Plugin API types (provided at runtime by the host app)
+interface Disposable {
+ dispose(): void;
+}
+
+interface PluginPanelProps {
+ pluginId: string;
+ panelId: string;
+}
+
+export interface HermesPluginAPI {
+ ui: {
+ registerPanel(panelId: string, component: React.ComponentType