@@ -234,11 +241,11 @@ import NostrDMs from './NostrDMs.vue'
import NostrRelayManager from './NostrRelayManager.vue'
import NostrProfileEditor from './NostrProfileEditor.vue'
import ZapDialog from './ZapDialog.vue'
+import NostrThread from './NostrThread.vue'
import { useNip05Verification } from '@/composables/useNip05Verification'
import { useNostr, type NostrNote, type PublishResult } from '@/composables/useNostr'
import { useNostrIdentity } from '@/composables/useNostrIdentity'
-defineEmits<{ selectNote: [note: NostrNote] }>()
const { events: notes, isConnected, relayStates, connect, publishEvent, searchResults, isSearching, searchNostr } = useNostr()
const { isLoggedIn, signEvent } = useNostrIdentity()
@@ -252,6 +259,7 @@ const subTabs = [
{ id: 'profile' as const, label: 'Profile' },
]
+const selectedNoteId = ref
(null)
const search = ref('')
const activeKind = ref(null)
const showCompose = ref(false)
diff --git a/packages/app/src/components/content/NostrThread.vue b/packages/app/src/components/content/NostrThread.vue
new file mode 100644
index 00000000..e9db8751
--- /dev/null
+++ b/packages/app/src/components/content/NostrThread.vue
@@ -0,0 +1,263 @@
+
+
+
+
+
+
+
+
+
+ Replying to {{ replyTo.authorName ?? 'anon' }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/app/src/components/content/ThreadNode.vue b/packages/app/src/components/content/ThreadNode.vue
new file mode 100644
index 00000000..ccccc7ba
--- /dev/null
+++ b/packages/app/src/components/content/ThreadNode.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+ {{ node.note.authorName?.charAt(0)?.toUpperCase() ?? '?' }}
+
+
{{ node.note.authorName ?? 'anon' }}
+
{{ formatTime(node.note.created_at) }}
+
+
{{ node.note.content }}
+
+
+
+
+
$emit('reply', note)"
+ />
+
+
+
+