@abraca/nuxt 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/README.md +84 -0
  2. package/dist/module.d.mts +201 -0
  3. package/dist/module.json +12 -0
  4. package/dist/module.mjs +170 -0
  5. package/dist/runtime/components/ACollaborationUsers.d.vue.ts +11 -0
  6. package/dist/runtime/components/ACollaborationUsers.vue +48 -0
  7. package/dist/runtime/components/ACollaborationUsers.vue.d.ts +11 -0
  8. package/dist/runtime/components/AColorPicker.d.vue.ts +13 -0
  9. package/dist/runtime/components/AColorPicker.vue +71 -0
  10. package/dist/runtime/components/AColorPicker.vue.d.ts +13 -0
  11. package/dist/runtime/components/ACommandPalette.d.vue.ts +13 -0
  12. package/dist/runtime/components/ACommandPalette.vue +31 -0
  13. package/dist/runtime/components/ACommandPalette.vue.d.ts +13 -0
  14. package/dist/runtime/components/AConnectionStatus.d.vue.ts +13 -0
  15. package/dist/runtime/components/AConnectionStatus.vue +50 -0
  16. package/dist/runtime/components/AConnectionStatus.vue.d.ts +13 -0
  17. package/dist/runtime/components/ADocTypeSelect.d.vue.ts +10 -0
  18. package/dist/runtime/components/ADocTypeSelect.vue +34 -0
  19. package/dist/runtime/components/ADocTypeSelect.vue.d.ts +10 -0
  20. package/dist/runtime/components/ADocumentTree.d.vue.ts +53 -0
  21. package/dist/runtime/components/ADocumentTree.vue +350 -0
  22. package/dist/runtime/components/ADocumentTree.vue.d.ts +53 -0
  23. package/dist/runtime/components/AEditor.d.vue.ts +60 -0
  24. package/dist/runtime/components/AEditor.vue +174 -0
  25. package/dist/runtime/components/AEditor.vue.d.ts +60 -0
  26. package/dist/runtime/components/AFloatingWindow.d.vue.ts +24 -0
  27. package/dist/runtime/components/AFloatingWindow.vue +232 -0
  28. package/dist/runtime/components/AFloatingWindow.vue.d.ts +24 -0
  29. package/dist/runtime/components/AIconPicker.d.vue.ts +13 -0
  30. package/dist/runtime/components/AIconPicker.vue +257 -0
  31. package/dist/runtime/components/AIconPicker.vue.d.ts +13 -0
  32. package/dist/runtime/components/ANodePanel.d.vue.ts +15 -0
  33. package/dist/runtime/components/ANodePanel.vue +541 -0
  34. package/dist/runtime/components/ANodePanel.vue.d.ts +15 -0
  35. package/dist/runtime/components/ANotifications.d.vue.ts +7 -0
  36. package/dist/runtime/components/ANotifications.vue +75 -0
  37. package/dist/runtime/components/ANotifications.vue.d.ts +7 -0
  38. package/dist/runtime/components/APermissionGuard.d.vue.ts +21 -0
  39. package/dist/runtime/components/APermissionGuard.vue +22 -0
  40. package/dist/runtime/components/APermissionGuard.vue.d.ts +21 -0
  41. package/dist/runtime/components/APresence.d.vue.ts +43 -0
  42. package/dist/runtime/components/APresence.vue +36 -0
  43. package/dist/runtime/components/APresence.vue.d.ts +43 -0
  44. package/dist/runtime/components/AProvider.d.vue.ts +27 -0
  45. package/dist/runtime/components/AProvider.vue +42 -0
  46. package/dist/runtime/components/AProvider.vue.d.ts +27 -0
  47. package/dist/runtime/components/ARoleBadge.d.vue.ts +11 -0
  48. package/dist/runtime/components/ARoleBadge.vue +29 -0
  49. package/dist/runtime/components/ARoleBadge.vue.d.ts +11 -0
  50. package/dist/runtime/components/AVoiceBar.d.vue.ts +13 -0
  51. package/dist/runtime/components/AVoiceBar.vue +379 -0
  52. package/dist/runtime/components/AVoiceBar.vue.d.ts +13 -0
  53. package/dist/runtime/components/AVoiceTile.d.vue.ts +10 -0
  54. package/dist/runtime/components/AVoiceTile.vue +48 -0
  55. package/dist/runtime/components/AVoiceTile.vue.d.ts +10 -0
  56. package/dist/runtime/components/AWindowLayer.d.vue.ts +3 -0
  57. package/dist/runtime/components/AWindowLayer.vue +17 -0
  58. package/dist/runtime/components/AWindowLayer.vue.d.ts +3 -0
  59. package/dist/runtime/components/aware/AArea.d.vue.ts +42 -0
  60. package/dist/runtime/components/aware/AArea.vue +45 -0
  61. package/dist/runtime/components/aware/AArea.vue.d.ts +42 -0
  62. package/dist/runtime/components/aware/AAvatar.d.vue.ts +25 -0
  63. package/dist/runtime/components/aware/AAvatar.vue +86 -0
  64. package/dist/runtime/components/aware/AAvatar.vue.d.ts +25 -0
  65. package/dist/runtime/components/aware/AButton.d.vue.ts +7 -0
  66. package/dist/runtime/components/aware/AButton.vue +39 -0
  67. package/dist/runtime/components/aware/AButton.vue.d.ts +7 -0
  68. package/dist/runtime/components/aware/ACursorLabel.d.vue.ts +12 -0
  69. package/dist/runtime/components/aware/ACursorLabel.vue +44 -0
  70. package/dist/runtime/components/aware/ACursorLabel.vue.d.ts +12 -0
  71. package/dist/runtime/components/aware/ADocBadge.d.vue.ts +11 -0
  72. package/dist/runtime/components/aware/ADocBadge.vue +27 -0
  73. package/dist/runtime/components/aware/ADocBadge.vue.d.ts +11 -0
  74. package/dist/runtime/components/aware/AFacepile.d.vue.ts +20 -0
  75. package/dist/runtime/components/aware/AFacepile.vue +92 -0
  76. package/dist/runtime/components/aware/AFacepile.vue.d.ts +20 -0
  77. package/dist/runtime/components/aware/AInput.d.vue.ts +7 -0
  78. package/dist/runtime/components/aware/AInput.vue +44 -0
  79. package/dist/runtime/components/aware/AInput.vue.d.ts +7 -0
  80. package/dist/runtime/components/aware/ASelect.d.vue.ts +7 -0
  81. package/dist/runtime/components/aware/ASelect.vue +51 -0
  82. package/dist/runtime/components/aware/ASelect.vue.d.ts +7 -0
  83. package/dist/runtime/components/aware/ATextarea.d.vue.ts +7 -0
  84. package/dist/runtime/components/aware/ATextarea.vue +44 -0
  85. package/dist/runtime/components/aware/ATextarea.vue.d.ts +7 -0
  86. package/dist/runtime/components/aware/AUserList.d.vue.ts +17 -0
  87. package/dist/runtime/components/aware/AUserList.vue +72 -0
  88. package/dist/runtime/components/aware/AUserList.vue.d.ts +17 -0
  89. package/dist/runtime/components/renderers/ACalendarRenderer.d.vue.ts +8 -0
  90. package/dist/runtime/components/renderers/ACalendarRenderer.vue +154 -0
  91. package/dist/runtime/components/renderers/ACalendarRenderer.vue.d.ts +8 -0
  92. package/dist/runtime/components/renderers/AGalleryRenderer.d.vue.ts +8 -0
  93. package/dist/runtime/components/renderers/AGalleryRenderer.vue +88 -0
  94. package/dist/runtime/components/renderers/AGalleryRenderer.vue.d.ts +8 -0
  95. package/dist/runtime/components/renderers/AKanbanRenderer.d.vue.ts +8 -0
  96. package/dist/runtime/components/renderers/AKanbanRenderer.vue +179 -0
  97. package/dist/runtime/components/renderers/AKanbanRenderer.vue.d.ts +8 -0
  98. package/dist/runtime/components/renderers/AOutlineRenderer.d.vue.ts +8 -0
  99. package/dist/runtime/components/renderers/AOutlineRenderer.vue +180 -0
  100. package/dist/runtime/components/renderers/AOutlineRenderer.vue.d.ts +8 -0
  101. package/dist/runtime/components/renderers/ATableRenderer.d.vue.ts +8 -0
  102. package/dist/runtime/components/renderers/ATableRenderer.vue +191 -0
  103. package/dist/runtime/components/renderers/ATableRenderer.vue.d.ts +8 -0
  104. package/dist/runtime/composables/useAAField.d.ts +42 -0
  105. package/dist/runtime/composables/useAAField.js +62 -0
  106. package/dist/runtime/composables/useAbraLocale.d.ts +14 -0
  107. package/dist/runtime/composables/useAbraLocale.js +11 -0
  108. package/dist/runtime/composables/useAbracadabra.d.ts +11 -0
  109. package/dist/runtime/composables/useAbracadabra.js +3 -0
  110. package/dist/runtime/composables/useAbracadabraAuth.d.ts +23 -0
  111. package/dist/runtime/composables/useAbracadabraAuth.js +22 -0
  112. package/dist/runtime/composables/useAwareness.d.ts +22 -0
  113. package/dist/runtime/composables/useAwareness.js +48 -0
  114. package/dist/runtime/composables/useAwarenessPeers.d.ts +34 -0
  115. package/dist/runtime/composables/useAwarenessPeers.js +33 -0
  116. package/dist/runtime/composables/useBackgroundSync.d.ts +37 -0
  117. package/dist/runtime/composables/useBackgroundSync.js +73 -0
  118. package/dist/runtime/composables/useChat.d.ts +65 -0
  119. package/dist/runtime/composables/useChat.js +210 -0
  120. package/dist/runtime/composables/useChatUsers.d.ts +21 -0
  121. package/dist/runtime/composables/useChatUsers.js +39 -0
  122. package/dist/runtime/composables/useChildTree.d.ts +119 -0
  123. package/dist/runtime/composables/useChildTree.js +100 -0
  124. package/dist/runtime/composables/useCommandPalette.d.ts +58 -0
  125. package/dist/runtime/composables/useCommandPalette.js +94 -0
  126. package/dist/runtime/composables/useConnectionStatus.d.ts +17 -0
  127. package/dist/runtime/composables/useConnectionStatus.js +37 -0
  128. package/dist/runtime/composables/useDashboard.d.ts +3 -0
  129. package/dist/runtime/composables/useDashboard.js +23 -0
  130. package/dist/runtime/composables/useDocExport.d.ts +5 -0
  131. package/dist/runtime/composables/useDocExport.js +256 -0
  132. package/dist/runtime/composables/useDocImport.d.ts +10 -0
  133. package/dist/runtime/composables/useDocImport.js +227 -0
  134. package/dist/runtime/composables/useDocJump.d.ts +29 -0
  135. package/dist/runtime/composables/useDocJump.js +17 -0
  136. package/dist/runtime/composables/useDocumentPermissions.d.ts +20 -0
  137. package/dist/runtime/composables/useDocumentPermissions.js +33 -0
  138. package/dist/runtime/composables/useEditor.d.ts +45 -0
  139. package/dist/runtime/composables/useEditor.js +121 -0
  140. package/dist/runtime/composables/useEditorDragHandle.d.ts +26 -0
  141. package/dist/runtime/composables/useEditorDragHandle.js +219 -0
  142. package/dist/runtime/composables/useEditorMentions.d.ts +28 -0
  143. package/dist/runtime/composables/useEditorMentions.js +40 -0
  144. package/dist/runtime/composables/useEditorSuggestions.d.ts +18 -0
  145. package/dist/runtime/composables/useEditorSuggestions.js +45 -0
  146. package/dist/runtime/composables/useEditorToolbar.d.ts +22 -0
  147. package/dist/runtime/composables/useEditorToolbar.js +60 -0
  148. package/dist/runtime/composables/useFileBlobStore.d.ts +15 -0
  149. package/dist/runtime/composables/useFileBlobStore.js +22 -0
  150. package/dist/runtime/composables/useFileIndex.d.ts +20 -0
  151. package/dist/runtime/composables/useFileIndex.js +69 -0
  152. package/dist/runtime/composables/useFollowUser.d.ts +5 -0
  153. package/dist/runtime/composables/useFollowUser.js +40 -0
  154. package/dist/runtime/composables/useNotifications.d.ts +82 -0
  155. package/dist/runtime/composables/useNotifications.js +171 -0
  156. package/dist/runtime/composables/useOfflineUploadQueue.d.ts +90 -0
  157. package/dist/runtime/composables/useOfflineUploadQueue.js +33 -0
  158. package/dist/runtime/composables/usePasskeyAccounts.d.ts +32 -0
  159. package/dist/runtime/composables/usePasskeyAccounts.js +46 -0
  160. package/dist/runtime/composables/usePluginRegistry.d.ts +6 -0
  161. package/dist/runtime/composables/usePluginRegistry.js +3 -0
  162. package/dist/runtime/composables/useRendererBase.d.ts +186 -0
  163. package/dist/runtime/composables/useRendererBase.js +46 -0
  164. package/dist/runtime/composables/useSearchIndex.d.ts +20 -0
  165. package/dist/runtime/composables/useSearchIndex.js +104 -0
  166. package/dist/runtime/composables/useTrash.d.ts +50 -0
  167. package/dist/runtime/composables/useTrash.js +127 -0
  168. package/dist/runtime/composables/useVoice.d.ts +51 -0
  169. package/dist/runtime/composables/useVoice.js +220 -0
  170. package/dist/runtime/composables/useWindowManager.d.ts +122 -0
  171. package/dist/runtime/composables/useWindowManager.js +141 -0
  172. package/dist/runtime/composables/useYDoc.d.ts +142 -0
  173. package/dist/runtime/composables/useYDoc.js +172 -0
  174. package/dist/runtime/extensions/accordion.d.ts +3 -0
  175. package/dist/runtime/extensions/accordion.js +49 -0
  176. package/dist/runtime/extensions/badge.d.ts +2 -0
  177. package/dist/runtime/extensions/badge.js +39 -0
  178. package/dist/runtime/extensions/callout.d.ts +2 -0
  179. package/dist/runtime/extensions/callout.js +28 -0
  180. package/dist/runtime/extensions/card.d.ts +3 -0
  181. package/dist/runtime/extensions/card.js +53 -0
  182. package/dist/runtime/extensions/code-collapse.d.ts +2 -0
  183. package/dist/runtime/extensions/code-collapse.js +32 -0
  184. package/dist/runtime/extensions/code-group.d.ts +2 -0
  185. package/dist/runtime/extensions/code-group.js +17 -0
  186. package/dist/runtime/extensions/collapsible.d.ts +2 -0
  187. package/dist/runtime/extensions/collapsible.js +35 -0
  188. package/dist/runtime/extensions/document-header.d.ts +11 -0
  189. package/dist/runtime/extensions/document-header.js +82 -0
  190. package/dist/runtime/extensions/document-meta.d.ts +20 -0
  191. package/dist/runtime/extensions/document-meta.js +121 -0
  192. package/dist/runtime/extensions/document.d.ts +6 -0
  193. package/dist/runtime/extensions/document.js +6 -0
  194. package/dist/runtime/extensions/file-block.d.ts +15 -0
  195. package/dist/runtime/extensions/file-block.js +34 -0
  196. package/dist/runtime/extensions/file-drop.d.ts +6 -0
  197. package/dist/runtime/extensions/file-drop.js +65 -0
  198. package/dist/runtime/extensions/kbd.d.ts +2 -0
  199. package/dist/runtime/extensions/kbd.js +33 -0
  200. package/dist/runtime/extensions/prose-icon.d.ts +2 -0
  201. package/dist/runtime/extensions/prose-icon.js +33 -0
  202. package/dist/runtime/extensions/search-highlight.d.ts +10 -0
  203. package/dist/runtime/extensions/search-highlight.js +129 -0
  204. package/dist/runtime/extensions/steps.d.ts +2 -0
  205. package/dist/runtime/extensions/steps.js +32 -0
  206. package/dist/runtime/extensions/tabs.d.ts +3 -0
  207. package/dist/runtime/extensions/tabs.js +49 -0
  208. package/dist/runtime/extensions/views/AccordionItemView.d.vue.ts +4 -0
  209. package/dist/runtime/extensions/views/AccordionItemView.vue +41 -0
  210. package/dist/runtime/extensions/views/AccordionItemView.vue.d.ts +4 -0
  211. package/dist/runtime/extensions/views/AccordionView.d.vue.ts +4 -0
  212. package/dist/runtime/extensions/views/AccordionView.vue +22 -0
  213. package/dist/runtime/extensions/views/AccordionView.vue.d.ts +4 -0
  214. package/dist/runtime/extensions/views/BadgeView.d.vue.ts +4 -0
  215. package/dist/runtime/extensions/views/BadgeView.vue +23 -0
  216. package/dist/runtime/extensions/views/BadgeView.vue.d.ts +4 -0
  217. package/dist/runtime/extensions/views/CalloutView.d.vue.ts +4 -0
  218. package/dist/runtime/extensions/views/CalloutView.vue +43 -0
  219. package/dist/runtime/extensions/views/CalloutView.vue.d.ts +4 -0
  220. package/dist/runtime/extensions/views/CardGroupView.d.vue.ts +4 -0
  221. package/dist/runtime/extensions/views/CardGroupView.vue +22 -0
  222. package/dist/runtime/extensions/views/CardGroupView.vue.d.ts +4 -0
  223. package/dist/runtime/extensions/views/CardView.d.vue.ts +4 -0
  224. package/dist/runtime/extensions/views/CardView.vue +28 -0
  225. package/dist/runtime/extensions/views/CardView.vue.d.ts +4 -0
  226. package/dist/runtime/extensions/views/CodeCollapseView.d.vue.ts +4 -0
  227. package/dist/runtime/extensions/views/CodeCollapseView.vue +45 -0
  228. package/dist/runtime/extensions/views/CodeCollapseView.vue.d.ts +4 -0
  229. package/dist/runtime/extensions/views/CodeGroupView.d.vue.ts +4 -0
  230. package/dist/runtime/extensions/views/CodeGroupView.vue +53 -0
  231. package/dist/runtime/extensions/views/CodeGroupView.vue.d.ts +4 -0
  232. package/dist/runtime/extensions/views/CollapsibleView.d.vue.ts +4 -0
  233. package/dist/runtime/extensions/views/CollapsibleView.vue +42 -0
  234. package/dist/runtime/extensions/views/CollapsibleView.vue.d.ts +4 -0
  235. package/dist/runtime/extensions/views/FileNodeView.d.vue.ts +4 -0
  236. package/dist/runtime/extensions/views/FileNodeView.vue +140 -0
  237. package/dist/runtime/extensions/views/FileNodeView.vue.d.ts +4 -0
  238. package/dist/runtime/extensions/views/KbdView.d.vue.ts +4 -0
  239. package/dist/runtime/extensions/views/KbdView.vue +23 -0
  240. package/dist/runtime/extensions/views/KbdView.vue.d.ts +4 -0
  241. package/dist/runtime/extensions/views/ProseIconView.d.vue.ts +4 -0
  242. package/dist/runtime/extensions/views/ProseIconView.vue +23 -0
  243. package/dist/runtime/extensions/views/ProseIconView.vue.d.ts +4 -0
  244. package/dist/runtime/extensions/views/StepsView.d.vue.ts +4 -0
  245. package/dist/runtime/extensions/views/StepsView.vue +32 -0
  246. package/dist/runtime/extensions/views/StepsView.vue.d.ts +4 -0
  247. package/dist/runtime/extensions/views/TabsItemView.d.vue.ts +4 -0
  248. package/dist/runtime/extensions/views/TabsItemView.vue +22 -0
  249. package/dist/runtime/extensions/views/TabsItemView.vue.d.ts +4 -0
  250. package/dist/runtime/extensions/views/TabsView.d.vue.ts +4 -0
  251. package/dist/runtime/extensions/views/TabsView.vue +56 -0
  252. package/dist/runtime/extensions/views/TabsView.vue.d.ts +4 -0
  253. package/dist/runtime/locale.d.ts +134 -0
  254. package/dist/runtime/locale.js +119 -0
  255. package/dist/runtime/middleware/abracadabra-auth.d.ts +11 -0
  256. package/dist/runtime/middleware/abracadabra-auth.js +9 -0
  257. package/dist/runtime/plugin-abracadabra.client.d.ts +7 -0
  258. package/dist/runtime/plugin-abracadabra.client.js +898 -0
  259. package/dist/runtime/plugin-abracadabra.server.d.ts +2 -0
  260. package/dist/runtime/plugin-abracadabra.server.js +71 -0
  261. package/dist/runtime/plugin-registry.d.ts +34 -0
  262. package/dist/runtime/plugin-registry.js +83 -0
  263. package/dist/runtime/plugin-shared-globals.client.d.ts +2 -0
  264. package/dist/runtime/plugin-shared-globals.client.js +20 -0
  265. package/dist/runtime/plugins/core.plugin.d.ts +12 -0
  266. package/dist/runtime/plugins/core.plugin.js +179 -0
  267. package/dist/runtime/server/api/_abracadabra/render/[docId].get.d.ts +18 -0
  268. package/dist/runtime/server/api/_abracadabra/render/[docId].get.js +51 -0
  269. package/dist/runtime/server/api/_abracadabra/spaces.get.d.ts +11 -0
  270. package/dist/runtime/server/api/_abracadabra/spaces.get.js +16 -0
  271. package/dist/runtime/server/plugins/abracadabra-service.d.ts +2 -0
  272. package/dist/runtime/server/plugins/abracadabra-service.js +116 -0
  273. package/dist/runtime/server/runners/doc-tree-cache.d.ts +11 -0
  274. package/dist/runtime/server/runners/doc-tree-cache.js +65 -0
  275. package/dist/runtime/server/tsconfig.json +3 -0
  276. package/dist/runtime/server/utils/docCache.d.ts +25 -0
  277. package/dist/runtime/server/utils/docCache.js +131 -0
  278. package/dist/runtime/server/utils/serverRunner.d.ts +28 -0
  279. package/dist/runtime/server/utils/serverRunner.js +58 -0
  280. package/dist/runtime/types.d.ts +444 -0
  281. package/dist/runtime/types.js +93 -0
  282. package/dist/runtime/utils/VoiceClient.d.ts +94 -0
  283. package/dist/runtime/utils/VoiceClient.js +599 -0
  284. package/dist/runtime/utils/avatarStyle.d.ts +15 -0
  285. package/dist/runtime/utils/avatarStyle.js +20 -0
  286. package/dist/runtime/utils/colorPalettes.d.ts +13 -0
  287. package/dist/runtime/utils/colorPalettes.js +49 -0
  288. package/dist/runtime/utils/docTypes.d.ts +129 -0
  289. package/dist/runtime/utils/docTypes.js +116 -0
  290. package/dist/runtime/utils/markdownToYjs.d.ts +23 -0
  291. package/dist/runtime/utils/markdownToYjs.js +440 -0
  292. package/dist/runtime/utils/metaFieldDefinitions.d.ts +7 -0
  293. package/dist/runtime/utils/metaFieldDefinitions.js +182 -0
  294. package/dist/runtime/utils/voiceErrors.d.ts +33 -0
  295. package/dist/runtime/utils/voiceErrors.js +54 -0
  296. package/dist/runtime/utils/yjsConvert.d.ts +14 -0
  297. package/dist/runtime/utils/yjsConvert.js +331 -0
  298. package/dist/types.d.mts +13 -0
  299. package/package.json +100 -0
@@ -0,0 +1,379 @@
1
+ <script setup>
2
+ import { avatarBorderStyle } from "../utils/avatarStyle";
3
+ const props = defineProps({
4
+ docId: { type: String, required: true },
5
+ collapsed: { type: Boolean, required: false },
6
+ labels: { type: Object, required: false }
7
+ });
8
+ const emit = defineEmits(["open-stream"]);
9
+ defineOptions({ inheritAttrs: false });
10
+ const appConfig = useAppConfig();
11
+ const neutral = computed(() => appConfig.ui?.colors?.neutral ?? "zinc");
12
+ const locale = computed(() => useAbraLocale("voice", props.labels));
13
+ const {
14
+ voiceStatus,
15
+ isMuted,
16
+ isVideoEnabled,
17
+ isScreenEnabled,
18
+ canScreenShare,
19
+ localAudioLevel,
20
+ audioLevels,
21
+ voiceError,
22
+ masterVolume,
23
+ peerList,
24
+ joinRoom,
25
+ leaveRoom,
26
+ toggleMute,
27
+ toggleVideo,
28
+ toggleScreen,
29
+ setMasterVolume,
30
+ setPeerVolume
31
+ } = useVoice();
32
+ const peerVolumes = ref(/* @__PURE__ */ new Map());
33
+ function getPeerVolume(peerId) {
34
+ return peerVolumes.value.get(peerId) ?? 1;
35
+ }
36
+ function onPeerVolumeChange(peerId, value) {
37
+ peerVolumes.value = new Map(peerVolumes.value).set(peerId, value);
38
+ setPeerVolume(peerId, value);
39
+ }
40
+ const popoverOpen = ref(false);
41
+ const isConnected = computed(() => voiceStatus.value === "connected");
42
+ const isConnecting = computed(() => voiceStatus.value === "connecting");
43
+ const isActive = computed(() => isConnected.value || isConnecting.value);
44
+ const isSpeaking = computed(() => localAudioLevel.value > 0.04);
45
+ const hasError = computed(() => !!voiceError.value);
46
+ async function handleJoin() {
47
+ popoverOpen.value = false;
48
+ await joinRoom(props.docId);
49
+ }
50
+ function handleLeave() {
51
+ popoverOpen.value = false;
52
+ leaveRoom();
53
+ }
54
+ function goToStream() {
55
+ emit("open-stream", props.docId);
56
+ }
57
+ const peerCountText = computed(() => {
58
+ const n = peerList.value.length;
59
+ if (n === 0) return locale.value.alone;
60
+ return `${n} peer${n === 1 ? "" : "s"}`;
61
+ });
62
+ const triggerLabel = computed(() => {
63
+ if (hasError.value) return locale.value.error;
64
+ if (isConnecting.value) return locale.value.connecting;
65
+ if (isConnected.value) return peerCountText.value;
66
+ return locale.value.voice;
67
+ });
68
+ const micIcon = computed(() => {
69
+ if (hasError.value) return "i-lucide-alert-circle";
70
+ if (!isActive.value) return "i-lucide-mic-off";
71
+ return isMuted.value ? "i-lucide-mic-off" : "i-lucide-mic";
72
+ });
73
+ defineShortcuts({
74
+ "alt_m": {
75
+ handler: toggleMute,
76
+ whenever: [isActive]
77
+ },
78
+ "alt_v": {
79
+ handler: toggleVideo,
80
+ whenever: [isActive]
81
+ }
82
+ });
83
+ </script>
84
+
85
+ <template>
86
+ <div v-bind="$attrs" class="w-full">
87
+ <ClientOnly>
88
+ <UPopover
89
+ v-model:open="popoverOpen"
90
+ :content="{ align: 'center', side: 'top', sideOffset: 6, collisionPadding: 12 }"
91
+ >
92
+ <!-- ─── Trigger row ─── -->
93
+ <div
94
+ class="flex items-center gap-1.5 w-full px-2 rounded-md cursor-pointer select-none transition-colors"
95
+ :class="[
96
+ props.collapsed ? 'justify-center h-8' : 'min-h-8 py-1',
97
+ popoverOpen ? 'bg-elevated' : 'hover:bg-elevated/60',
98
+ isActive ? '' : 'opacity-60 hover:opacity-100'
99
+ ]"
100
+ >
101
+ <!-- Mic icon + status dot -->
102
+ <div class="relative shrink-0 flex items-center justify-center size-4">
103
+ <UIcon
104
+ :name="micIcon"
105
+ class="size-4 transition-colors"
106
+ :class="{
107
+ 'text-error animate-pulse': hasError,
108
+ 'text-success': !hasError && isConnected && !isMuted,
109
+ 'text-error': !hasError && isConnected && isMuted,
110
+ 'text-warning': !hasError && isConnecting,
111
+ 'text-dimmed': !hasError && !isActive
112
+ }"
113
+ />
114
+ <span
115
+ v-if="isActive || hasError"
116
+ class="absolute -top-0.5 -right-1 size-1.5 rounded-full ring-1 ring-bg transition-colors"
117
+ :class="{
118
+ 'bg-error animate-pulse': hasError,
119
+ 'bg-success': !hasError && isConnected && !isSpeaking,
120
+ 'bg-success scale-125': !hasError && isConnected && isSpeaking,
121
+ 'bg-warning animate-pulse': !hasError && isConnecting
122
+ }"
123
+ />
124
+ </div>
125
+
126
+ <!-- Expanded: label + peer avatars + quick actions -->
127
+ <template v-if="!props.collapsed">
128
+ <span
129
+ class="flex-1 text-xs font-medium truncate"
130
+ :class="isActive ? 'text-default' : 'text-muted'"
131
+ >
132
+ {{ triggerLabel }}
133
+ </span>
134
+
135
+ <UAvatarGroup
136
+ v-if="isConnected && peerList.length > 0"
137
+ :max="3"
138
+ size="2xs"
139
+ >
140
+ <UAvatar
141
+ v-for="peer in peerList"
142
+ :key="peer.userId"
143
+ :alt="peer.displayName || peer.userId.slice(0, 6)"
144
+ size="2xs"
145
+ :style="peer.color ? avatarBorderStyle(peer.color, neutral) : ''"
146
+ />
147
+ </UAvatarGroup>
148
+
149
+ <template v-if="isConnected">
150
+ <UTooltip :text="isMuted ? locale.unmute : locale.mute" :kbds="['Alt', 'M']">
151
+ <UButton
152
+ :icon="isMuted ? 'i-lucide-mic-off' : 'i-lucide-mic'"
153
+ size="xs"
154
+ color="neutral"
155
+ variant="ghost"
156
+ :class="{ 'text-error!': isMuted }"
157
+ @click.stop="toggleMute"
158
+ />
159
+ </UTooltip>
160
+ <UTooltip text="Toggle video" :kbds="['Alt', 'V']">
161
+ <UButton
162
+ :icon="isVideoEnabled ? 'i-lucide-video' : 'i-lucide-video-off'"
163
+ size="xs"
164
+ color="neutral"
165
+ variant="ghost"
166
+ :class="{ 'text-primary!': isVideoEnabled }"
167
+ @click.stop="toggleVideo"
168
+ />
169
+ </UTooltip>
170
+ <UTooltip v-if="canScreenShare" text="Screen share">
171
+ <UButton
172
+ :icon="isScreenEnabled ? 'i-lucide-monitor-up' : 'i-lucide-monitor'"
173
+ size="xs"
174
+ color="neutral"
175
+ variant="ghost"
176
+ :class="{ 'text-primary!': isScreenEnabled }"
177
+ @click.stop="toggleScreen"
178
+ />
179
+ </UTooltip>
180
+ <UTooltip :text="locale.openStream">
181
+ <UButton
182
+ icon="i-lucide-maximize-2"
183
+ size="xs"
184
+ color="neutral"
185
+ variant="ghost"
186
+ @click.stop="goToStream"
187
+ />
188
+ </UTooltip>
189
+ <UTooltip :text="locale.leave">
190
+ <UButton
191
+ icon="i-lucide-phone-off"
192
+ size="xs"
193
+ color="neutral"
194
+ variant="ghost"
195
+ class="text-error! hover:opacity-70"
196
+ @click.stop="handleLeave"
197
+ />
198
+ </UTooltip>
199
+ </template>
200
+ </template>
201
+ </div>
202
+
203
+ <!-- ─── Popover panel ─── -->
204
+ <template #content>
205
+ <div class="p-3 w-52 flex flex-col gap-3">
206
+ <!-- Idle → join -->
207
+ <UButton
208
+ v-if="!isActive"
209
+ :label="locale.join"
210
+ icon="i-lucide-phone"
211
+ color="success"
212
+ block
213
+ @click="handleJoin"
214
+ />
215
+
216
+ <!-- Connecting -->
217
+ <template v-else-if="isConnecting">
218
+ <div class="flex items-center gap-2 py-0.5">
219
+ <UIcon name="i-lucide-loader-circle" class="size-4 text-warning animate-spin shrink-0" />
220
+ <span class="text-sm text-muted">{{ locale.connecting }}</span>
221
+ </div>
222
+ <UButton
223
+ :label="locale.cancel"
224
+ color="neutral"
225
+ variant="ghost"
226
+ size="sm"
227
+ block
228
+ @click="handleLeave"
229
+ />
230
+ </template>
231
+
232
+ <!-- Connected: controls + peers -->
233
+ <template v-else>
234
+ <div class="flex gap-1.5 flex-wrap">
235
+ <UButton
236
+ :icon="isMuted ? 'i-lucide-mic-off' : 'i-lucide-mic'"
237
+ :label="isMuted ? locale.unmute : locale.mute"
238
+ size="sm"
239
+ :color="isMuted ? 'error' : 'neutral'"
240
+ :variant="isMuted ? 'subtle' : 'outline'"
241
+ class="flex-1"
242
+ @click="toggleMute"
243
+ />
244
+ <UButton
245
+ :icon="isVideoEnabled ? 'i-lucide-video' : 'i-lucide-video-off'"
246
+ size="sm"
247
+ :color="isVideoEnabled ? 'primary' : 'neutral'"
248
+ :variant="isVideoEnabled ? 'subtle' : 'outline'"
249
+ class="flex-none"
250
+ @click="toggleVideo"
251
+ />
252
+ <UButton
253
+ v-if="canScreenShare"
254
+ :icon="isScreenEnabled ? 'i-lucide-monitor-up' : 'i-lucide-monitor'"
255
+ size="sm"
256
+ :color="isScreenEnabled ? 'primary' : 'neutral'"
257
+ :variant="isScreenEnabled ? 'subtle' : 'outline'"
258
+ class="flex-none"
259
+ @click="toggleScreen"
260
+ />
261
+ <UButton
262
+ icon="i-lucide-phone-off"
263
+ :label="locale.leave"
264
+ size="sm"
265
+ color="error"
266
+ variant="ghost"
267
+ class="flex-1"
268
+ @click="handleLeave"
269
+ />
270
+ </div>
271
+
272
+ <UButton
273
+ icon="i-lucide-maximize-2"
274
+ :label="locale.openStream"
275
+ size="sm"
276
+ color="neutral"
277
+ variant="outline"
278
+ block
279
+ @click="goToStream"
280
+ />
281
+
282
+ <!-- Master volume -->
283
+ <div class="flex items-center gap-2">
284
+ <UIcon
285
+ :name="masterVolume > 0 ? 'i-lucide-volume-2' : 'i-lucide-volume-x'"
286
+ class="size-3.5 text-dimmed shrink-0"
287
+ />
288
+ <USlider
289
+ :model-value="masterVolume"
290
+ :min="0"
291
+ :max="1"
292
+ :step="0.01"
293
+ size="xs"
294
+ class="flex-1"
295
+ @update:model-value="setMasterVolume"
296
+ />
297
+ </div>
298
+
299
+ <!-- Peer list -->
300
+ <template v-if="peerList.length">
301
+ <USeparator />
302
+ <div class="flex flex-col gap-2">
303
+ <p class="text-[10px] font-semibold text-dimmed uppercase tracking-wider leading-none">
304
+ {{ locale.peers }}
305
+ </p>
306
+ <div
307
+ v-for="peer in peerList"
308
+ :key="peer.id"
309
+ class="flex flex-col gap-1"
310
+ >
311
+ <div class="flex items-center gap-2">
312
+ <UAvatar
313
+ :alt="peer.displayName || peer.userId.slice(0, 6)"
314
+ size="2xs"
315
+ :style="peer.color ? avatarBorderStyle(peer.color, neutral) : ''"
316
+ />
317
+ <span class="text-xs truncate flex-1">{{ peer.displayName || peer.userId.slice(0, 6) }}</span>
318
+ <UIcon v-if="peer.remoteVideo" name="i-lucide-video" class="size-3 text-primary shrink-0" />
319
+ <UIcon v-if="peer.remoteScreen" name="i-lucide-monitor-up" class="size-3 text-primary shrink-0" />
320
+ <UIcon v-if="peer.remoteMuted" name="i-lucide-mic-off" class="size-3 text-error shrink-0" />
321
+ </div>
322
+ <!-- Audio level bar -->
323
+ <div class="flex items-center gap-2 pl-7">
324
+ <div class="flex-1 h-1 rounded-full bg-elevated overflow-hidden">
325
+ <div
326
+ class="h-full rounded-full transition-all duration-75"
327
+ :class="peer.remoteMuted ? 'bg-error/40' : 'bg-success'"
328
+ :style="{ width: `${Math.min((audioLevels.get(peer.id) ?? 0) * 500, 100)}%` }"
329
+ />
330
+ </div>
331
+ </div>
332
+ <!-- Per-peer volume -->
333
+ <div class="flex items-center gap-2 pl-7">
334
+ <UIcon
335
+ :name="getPeerVolume(peer.id) > 0 ? 'i-lucide-volume-1' : 'i-lucide-volume-x'"
336
+ class="size-3 text-dimmed shrink-0"
337
+ />
338
+ <USlider
339
+ :model-value="getPeerVolume(peer.id)"
340
+ :min="0"
341
+ :max="1"
342
+ :step="0.01"
343
+ size="xs"
344
+ class="flex-1"
345
+ @update:model-value="(v) => onPeerVolumeChange(peer.id, v)"
346
+ />
347
+ </div>
348
+ </div>
349
+ </div>
350
+ </template>
351
+ <p v-else class="text-xs text-muted text-center py-0.5">
352
+ {{ locale.alone }}
353
+ </p>
354
+ </template>
355
+
356
+ <!-- Error -->
357
+ <div v-if="voiceError" class="flex items-start gap-1.5 text-error">
358
+ <UIcon name="i-lucide-alert-circle" class="size-3.5 shrink-0 mt-0.5" />
359
+ <p class="text-xs leading-tight">
360
+ {{ voiceError.message }}
361
+ </p>
362
+ </div>
363
+ </div>
364
+ </template>
365
+ </UPopover>
366
+
367
+ <!-- SSR fallback -->
368
+ <template #fallback>
369
+ <div
370
+ class="flex items-center gap-1.5 w-full px-2 opacity-30 pointer-events-none"
371
+ :class="props.collapsed ? 'justify-center h-8' : 'min-h-8 py-1'"
372
+ >
373
+ <UIcon name="i-lucide-mic-off" class="size-4 text-dimmed" />
374
+ <span v-if="!props.collapsed" class="text-xs text-dimmed">{{ locale.voice }}</span>
375
+ </div>
376
+ </template>
377
+ </ClientOnly>
378
+ </div>
379
+ </template>
@@ -0,0 +1,13 @@
1
+ import type { AbracadabraLocale } from '../locale.js';
2
+ type __VLS_Props = {
3
+ docId: string;
4
+ collapsed?: boolean;
5
+ labels?: Partial<AbracadabraLocale['voice']>;
6
+ };
7
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
8
+ "open-stream": (docId: string) => any;
9
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
10
+ "onOpen-stream"?: ((docId: string) => any) | undefined;
11
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
12
+ declare const _default: typeof __VLS_export;
13
+ export default _default;
@@ -0,0 +1,10 @@
1
+ type __VLS_Props = {
2
+ stream: MediaStream;
3
+ name: string;
4
+ color?: string | null;
5
+ kind: 'camera' | 'screen';
6
+ mirrored?: boolean;
7
+ };
8
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
+ declare const _default: typeof __VLS_export;
10
+ export default _default;
@@ -0,0 +1,48 @@
1
+ <script setup>
2
+ const props = defineProps({
3
+ stream: { type: null, required: true },
4
+ name: { type: String, required: true },
5
+ color: { type: [String, null], required: false },
6
+ kind: { type: String, required: true },
7
+ mirrored: { type: Boolean, required: false }
8
+ });
9
+ const videoRef = ref(null);
10
+ watch(
11
+ () => props.stream,
12
+ (s) => {
13
+ if (videoRef.value) {
14
+ videoRef.value.srcObject = s ?? null;
15
+ }
16
+ }
17
+ );
18
+ onMounted(() => {
19
+ if (videoRef.value && props.stream) {
20
+ videoRef.value.srcObject = props.stream;
21
+ }
22
+ });
23
+ const borderColor = computed(() => props.color ?? "var(--color-neutral-400)");
24
+ const kindIcon = computed(() => props.kind === "screen" ? "i-lucide-monitor-up" : "i-lucide-video");
25
+ </script>
26
+
27
+ <template>
28
+ <div
29
+ class="relative rounded-lg overflow-hidden bg-black"
30
+ :style="{
31
+ border: `2px solid ${borderColor}`,
32
+ boxShadow: `0 0 12px ${borderColor}40`
33
+ }"
34
+ >
35
+ <video
36
+ ref="videoRef"
37
+ autoplay
38
+ playsinline
39
+ muted
40
+ class="w-full h-full object-contain"
41
+ :style="props.mirrored ? 'transform: scaleX(-1)' : ''"
42
+ />
43
+ <div class="absolute bottom-2 left-2 flex items-center gap-1.5 bg-black/60 backdrop-blur-sm rounded px-2 py-1">
44
+ <UIcon :name="kindIcon" class="size-3 text-white/70 shrink-0" />
45
+ <span class="text-xs text-white font-medium truncate max-w-32">{{ name }}</span>
46
+ </div>
47
+ </div>
48
+ </template>
@@ -0,0 +1,10 @@
1
+ type __VLS_Props = {
2
+ stream: MediaStream;
3
+ name: string;
4
+ color?: string | null;
5
+ kind: 'camera' | 'screen';
6
+ mirrored?: boolean;
7
+ };
8
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
+ declare const _default: typeof __VLS_export;
10
+ export default _default;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,17 @@
1
+ <script setup>
2
+ import { computed } from "vue";
3
+ const { windows } = useWindowManager();
4
+ const windowIds = computed(() => [...windows.value.keys()]);
5
+ </script>
6
+
7
+ <template>
8
+ <ClientOnly>
9
+ <div class="fixed inset-0 pointer-events-none z-30 overflow-hidden">
10
+ <AFloatingWindow
11
+ v-for="id in windowIds"
12
+ :key="id"
13
+ :window-id="id"
14
+ />
15
+ </div>
16
+ </ClientOnly>
17
+ </template>
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * <AArea>
3
+ *
4
+ * Generic hover-aware wrapper. Adds real-time peer hover indicators to any
5
+ * slotted content — cards, panels, nav rows, table rows, sidebar sections.
6
+ *
7
+ * Usage:
8
+ * <AArea field-key="doc:card:intro">
9
+ * <UCard>…</UCard>
10
+ * </AArea>
11
+ *
12
+ * <AArea field-key="nav:settings" tag="li">
13
+ * <NuxtLink to="/settings">Settings</NuxtLink>
14
+ * </AArea>
15
+ *
16
+ * Peer indicators:
17
+ * - Hover: colored 1px box-shadow ring + floating AAvatar cluster (top-right)
18
+ */
19
+ type __VLS_Props = {
20
+ /** Unique field key for awareness broadcasting. Convention: "{scope}:{id}" */
21
+ fieldKey: string;
22
+ /** HTML tag for the wrapper element. Default: 'div' */
23
+ tag?: string;
24
+ /** Max peer avatars to show. Default: 3 */
25
+ max?: number;
26
+ };
27
+ declare var __VLS_8: {};
28
+ type __VLS_Slots = {} & {
29
+ default?: (props: typeof __VLS_8) => any;
30
+ };
31
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
32
+ max: number;
33
+ tag: string;
34
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
35
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
36
+ declare const _default: typeof __VLS_export;
37
+ export default _default;
38
+ type __VLS_WithSlots<T, S> = T & {
39
+ new (): {
40
+ $slots: S;
41
+ };
42
+ };
@@ -0,0 +1,45 @@
1
+ <script setup>
2
+ import { computed } from "vue";
3
+ const props = defineProps({
4
+ fieldKey: { type: String, required: true },
5
+ tag: { type: String, required: false, default: "div" },
6
+ max: { type: Number, required: false, default: 3 }
7
+ });
8
+ const { hoverers, hoverHandlers } = useAAField(props.fieldKey);
9
+ const hoverRingStyle = computed(() => {
10
+ if (!hoverers.value.length) return {};
11
+ const color = hoverers.value[0].user?.color;
12
+ if (!color) return {};
13
+ return { boxShadow: `0 0 0 1px ${color}`, borderRadius: "0.375rem" };
14
+ });
15
+ </script>
16
+
17
+ <template>
18
+ <component
19
+ :is="tag"
20
+ class="relative"
21
+ v-on="hoverHandlers"
22
+ :style="hoverRingStyle"
23
+ >
24
+ <slot />
25
+ <Transition name="aa-peer">
26
+ <span
27
+ v-if="hoverers.length"
28
+ class="absolute -top-2 right-1 flex -space-x-1 pointer-events-none z-10"
29
+ >
30
+ <AAvatar
31
+ v-for="p in hoverers.slice(0, max)"
32
+ :key="p.clientId"
33
+ :user="p"
34
+ size="2xs"
35
+ :show-status="false"
36
+ :show-tooltip="true"
37
+ />
38
+ </span>
39
+ </Transition>
40
+ </component>
41
+ </template>
42
+
43
+ <style scoped>
44
+ .aa-peer-enter-active,.aa-peer-leave-active{transition:opacity .15s ease}.aa-peer-enter-from,.aa-peer-leave-to{opacity:0}
45
+ </style>
@@ -0,0 +1,42 @@
1
+ /**
2
+ * <AArea>
3
+ *
4
+ * Generic hover-aware wrapper. Adds real-time peer hover indicators to any
5
+ * slotted content — cards, panels, nav rows, table rows, sidebar sections.
6
+ *
7
+ * Usage:
8
+ * <AArea field-key="doc:card:intro">
9
+ * <UCard>…</UCard>
10
+ * </AArea>
11
+ *
12
+ * <AArea field-key="nav:settings" tag="li">
13
+ * <NuxtLink to="/settings">Settings</NuxtLink>
14
+ * </AArea>
15
+ *
16
+ * Peer indicators:
17
+ * - Hover: colored 1px box-shadow ring + floating AAvatar cluster (top-right)
18
+ */
19
+ type __VLS_Props = {
20
+ /** Unique field key for awareness broadcasting. Convention: "{scope}:{id}" */
21
+ fieldKey: string;
22
+ /** HTML tag for the wrapper element. Default: 'div' */
23
+ tag?: string;
24
+ /** Max peer avatars to show. Default: 3 */
25
+ max?: number;
26
+ };
27
+ declare var __VLS_8: {};
28
+ type __VLS_Slots = {} & {
29
+ default?: (props: typeof __VLS_8) => any;
30
+ };
31
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
32
+ max: number;
33
+ tag: string;
34
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
35
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
36
+ declare const _default: typeof __VLS_export;
37
+ export default _default;
38
+ type __VLS_WithSlots<T, S> = T & {
39
+ new (): {
40
+ $slots: S;
41
+ };
42
+ };
@@ -0,0 +1,25 @@
1
+ import type { AwarenessUser } from '../../types.js';
2
+ type __VLS_Props = {
3
+ user: AwarenessUser;
4
+ size?: '2xs' | 'xs' | 'sm' | 'md' | 'lg';
5
+ /** Whether the peer is idle — drives chip color. Omit to hide status dot. */
6
+ idle?: boolean;
7
+ showStatus?: boolean;
8
+ showTooltip?: boolean;
9
+ /** Click opens a popover with user details + Follow button */
10
+ showPopover?: boolean;
11
+ /** Current viewer's docId — used to show "In this document" vs "Elsewhere" */
12
+ currentDocId?: string;
13
+ };
14
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
15
+ follow: (user: AwarenessUser) => any;
16
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
17
+ onFollow?: ((user: AwarenessUser) => any) | undefined;
18
+ }>, {
19
+ size: "2xs" | "xs" | "sm" | "md" | "lg";
20
+ showStatus: boolean;
21
+ showTooltip: boolean;
22
+ showPopover: boolean;
23
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
24
+ declare const _default: typeof __VLS_export;
25
+ export default _default;