+ {/* Status Indicator */}
+ {status === "connected" && (
+
+ )}
+ {status === "connecting" && (
+
+ )}
+ {status === "disconnected" && (
+
+ )}
+
+ {/* Relay URL */}
+
+
+ {/* Selection Indicator */}
+ {selected ? (
+
+ ) : (
+
+ )}
+
+ );
+}
diff --git a/src/components/compose/index.ts b/src/components/compose/index.ts
new file mode 100644
index 0000000..3a21d7d
--- /dev/null
+++ b/src/components/compose/index.ts
@@ -0,0 +1,83 @@
+/**
+ * Compose/Reply Dialog System
+ *
+ * A generic, protocol-aware compose dialog for Nostr events.
+ *
+ * ## Features
+ *
+ * - **Rich Text Editing**: TipTap-based editor with @ mentions and : emoji autocomplete
+ * - **Threading**: Automatic NIP-10 (kind 1) and NIP-22 (all others) threading
+ * - **Relay Selection**: Choose which relays to publish to with connection status
+ * - **Mention Management**: Explicit p-tag control with profile search
+ * - **Preview Mode**: Preview content and tags before publishing
+ * - **Power Tools**: Quick access to hashtags, mentions, code blocks, links
+ *
+ * ## Usage
+ *
+ * ```tsx
+ * import { ComposeDialog } from "@/components/compose";
+ *
+ * function MyComponent() {
+ * const [showCompose, setShowCompose] = useState(false);
+ * const [replyTo, setReplyTo] = useState