@abraca/nuxt 1.9.1 → 2.0.1

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 (440) hide show
  1. package/dist/module.d.mts +4 -3
  2. package/dist/module.json +1 -1
  3. package/dist/module.mjs +9 -1
  4. package/dist/runtime/components/ADocumentTree.vue +1 -1
  5. package/dist/runtime/components/AEditor.d.vue.ts +26 -1
  6. package/dist/runtime/components/AEditor.vue +158 -4
  7. package/dist/runtime/components/AEditor.vue.d.ts +26 -1
  8. package/dist/runtime/components/AIdentityModal.d.vue.ts +46 -0
  9. package/dist/runtime/components/AIdentityModal.vue +157 -0
  10. package/dist/runtime/components/AIdentityModal.vue.d.ts +46 -0
  11. package/dist/runtime/components/AMnemonicLoginModal.d.vue.ts +35 -0
  12. package/dist/runtime/components/AMnemonicLoginModal.vue +173 -0
  13. package/dist/runtime/components/AMnemonicLoginModal.vue.d.ts +35 -0
  14. package/dist/runtime/components/ANodePanel.d.vue.ts +29 -2
  15. package/dist/runtime/components/ANodePanel.vue +148 -27
  16. package/dist/runtime/components/ANodePanel.vue.d.ts +29 -2
  17. package/dist/runtime/components/ANodePanelHeader.d.vue.ts +64 -0
  18. package/dist/runtime/components/ANodePanelHeader.vue +105 -0
  19. package/dist/runtime/components/ANodePanelHeader.vue.d.ts +64 -0
  20. package/dist/runtime/components/ANodeSettingsPanel.d.vue.ts +49 -0
  21. package/dist/runtime/components/ANodeSettingsPanel.vue +59 -0
  22. package/dist/runtime/components/ANodeSettingsPanel.vue.d.ts +49 -0
  23. package/dist/runtime/components/ANotificationBell.d.vue.ts +26 -0
  24. package/dist/runtime/components/ANotificationBell.vue +55 -0
  25. package/dist/runtime/components/ANotificationBell.vue.d.ts +26 -0
  26. package/dist/runtime/components/AOfflineSync.d.vue.ts +11 -0
  27. package/dist/runtime/components/AOfflineSync.vue +217 -0
  28. package/dist/runtime/components/AOfflineSync.vue.d.ts +11 -0
  29. package/dist/runtime/components/ARecoveryPhraseDisplay.d.vue.ts +26 -0
  30. package/dist/runtime/components/ARecoveryPhraseDisplay.vue +94 -0
  31. package/dist/runtime/components/ARecoveryPhraseDisplay.vue.d.ts +26 -0
  32. package/dist/runtime/components/AServerInfoModal.d.vue.ts +43 -0
  33. package/dist/runtime/components/AServerInfoModal.vue +150 -0
  34. package/dist/runtime/components/AServerInfoModal.vue.d.ts +43 -0
  35. package/dist/runtime/components/ASpaceFormModal.vue +1 -1
  36. package/dist/runtime/components/ASubPageList.d.vue.ts +66 -0
  37. package/dist/runtime/components/ASubPageList.vue +147 -0
  38. package/dist/runtime/components/ASubPageList.vue.d.ts +66 -0
  39. package/dist/runtime/components/aware/AAccordion.d.vue.ts +25 -0
  40. package/dist/runtime/components/aware/AAccordion.vue +107 -0
  41. package/dist/runtime/components/aware/AAccordion.vue.d.ts +25 -0
  42. package/dist/runtime/components/aware/AArea.vue +24 -11
  43. package/dist/runtime/components/aware/AAvatar.d.vue.ts +6 -0
  44. package/dist/runtime/components/aware/AAvatar.vue +33 -3
  45. package/dist/runtime/components/aware/AAvatar.vue.d.ts +6 -0
  46. package/dist/runtime/components/aware/AAvatarGroup.d.vue.ts +10 -0
  47. package/dist/runtime/components/aware/AAvatarGroup.vue +30 -0
  48. package/dist/runtime/components/aware/AAvatarGroup.vue.d.ts +10 -0
  49. package/dist/runtime/components/aware/AButton.d.vue.ts +4 -2
  50. package/dist/runtime/components/aware/AButton.vue +46 -14
  51. package/dist/runtime/components/aware/AButton.vue.d.ts +4 -2
  52. package/dist/runtime/components/aware/ACalendar.d.vue.ts +17 -0
  53. package/dist/runtime/components/aware/ACalendar.vue +145 -0
  54. package/dist/runtime/components/aware/ACalendar.vue.d.ts +17 -0
  55. package/dist/runtime/components/aware/ACarousel.d.vue.ts +25 -0
  56. package/dist/runtime/components/aware/ACarousel.vue +39 -0
  57. package/dist/runtime/components/aware/ACarousel.vue.d.ts +25 -0
  58. package/dist/runtime/components/aware/ACheckbox.d.vue.ts +11 -0
  59. package/dist/runtime/components/aware/ACheckbox.vue +74 -0
  60. package/dist/runtime/components/aware/ACheckbox.vue.d.ts +11 -0
  61. package/dist/runtime/components/aware/ACheckboxGroup.d.vue.ts +27 -0
  62. package/dist/runtime/components/aware/ACheckboxGroup.vue +79 -0
  63. package/dist/runtime/components/aware/ACheckboxGroup.vue.d.ts +27 -0
  64. package/dist/runtime/components/aware/ACollapsible.d.vue.ts +25 -0
  65. package/dist/runtime/components/aware/ACollapsible.vue +45 -0
  66. package/dist/runtime/components/aware/ACollapsible.vue.d.ts +25 -0
  67. package/dist/runtime/components/aware/AColorPicker.d.vue.ts +15 -0
  68. package/dist/runtime/components/aware/AColorPicker.vue +48 -0
  69. package/dist/runtime/components/aware/AColorPicker.vue.d.ts +15 -0
  70. package/dist/runtime/components/aware/ACommandPalette.d.vue.ts +33 -0
  71. package/dist/runtime/components/aware/ACommandPalette.vue +123 -0
  72. package/dist/runtime/components/aware/ACommandPalette.vue.d.ts +33 -0
  73. package/dist/runtime/components/aware/AContextMenu.d.vue.ts +25 -0
  74. package/dist/runtime/components/aware/AContextMenu.vue +63 -0
  75. package/dist/runtime/components/aware/AContextMenu.vue.d.ts +25 -0
  76. package/dist/runtime/components/aware/ADrawer.d.vue.ts +25 -0
  77. package/dist/runtime/components/aware/ADrawer.vue +57 -0
  78. package/dist/runtime/components/aware/ADrawer.vue.d.ts +25 -0
  79. package/dist/runtime/components/aware/ADropdownMenu.d.vue.ts +25 -0
  80. package/dist/runtime/components/aware/ADropdownMenu.vue +63 -0
  81. package/dist/runtime/components/aware/ADropdownMenu.vue.d.ts +25 -0
  82. package/dist/runtime/components/aware/AFileUpload.d.vue.ts +27 -0
  83. package/dist/runtime/components/aware/AFileUpload.vue +67 -0
  84. package/dist/runtime/components/aware/AFileUpload.vue.d.ts +27 -0
  85. package/dist/runtime/components/aware/AFollowBar.d.vue.ts +21 -0
  86. package/dist/runtime/components/aware/AFollowBar.vue +62 -0
  87. package/dist/runtime/components/aware/AFollowBar.vue.d.ts +21 -0
  88. package/dist/runtime/components/aware/AFollowScroll.d.vue.ts +7 -0
  89. package/dist/runtime/components/aware/AFollowScroll.vue +17 -0
  90. package/dist/runtime/components/aware/AFollowScroll.vue.d.ts +7 -0
  91. package/dist/runtime/components/aware/AFormSync.d.vue.ts +21 -0
  92. package/dist/runtime/components/aware/AFormSync.vue +52 -0
  93. package/dist/runtime/components/aware/AFormSync.vue.d.ts +21 -0
  94. package/dist/runtime/components/aware/AGlobalFocusLayer.d.vue.ts +3 -0
  95. package/dist/runtime/components/aware/AGlobalFocusLayer.vue +90 -0
  96. package/dist/runtime/components/aware/AGlobalFocusLayer.vue.d.ts +3 -0
  97. package/dist/runtime/components/aware/AHoverItem.d.vue.ts +27 -0
  98. package/dist/runtime/components/aware/AHoverItem.vue +124 -0
  99. package/dist/runtime/components/aware/AHoverItem.vue.d.ts +27 -0
  100. package/dist/runtime/components/aware/AInput.d.vue.ts +12 -2
  101. package/dist/runtime/components/aware/AInput.vue +72 -19
  102. package/dist/runtime/components/aware/AInput.vue.d.ts +12 -2
  103. package/dist/runtime/components/aware/AInputMenu.d.vue.ts +17 -0
  104. package/dist/runtime/components/aware/AInputMenu.vue +138 -0
  105. package/dist/runtime/components/aware/AInputMenu.vue.d.ts +17 -0
  106. package/dist/runtime/components/aware/AInputNumber.d.vue.ts +15 -0
  107. package/dist/runtime/components/aware/AInputNumber.vue +67 -0
  108. package/dist/runtime/components/aware/AInputNumber.vue.d.ts +15 -0
  109. package/dist/runtime/components/aware/AInputTags.d.vue.ts +15 -0
  110. package/dist/runtime/components/aware/AInputTags.vue +67 -0
  111. package/dist/runtime/components/aware/AInputTags.vue.d.ts +15 -0
  112. package/dist/runtime/components/aware/AKeyHint.d.vue.ts +3 -0
  113. package/dist/runtime/components/aware/AKeyHint.vue +23 -0
  114. package/dist/runtime/components/aware/AKeyHint.vue.d.ts +3 -0
  115. package/dist/runtime/components/aware/AMedia.d.vue.ts +19 -0
  116. package/dist/runtime/components/aware/AMedia.vue +85 -0
  117. package/dist/runtime/components/aware/AMedia.vue.d.ts +19 -0
  118. package/dist/runtime/components/aware/AModal.d.vue.ts +33 -0
  119. package/dist/runtime/components/aware/AModal.vue +110 -0
  120. package/dist/runtime/components/aware/AModal.vue.d.ts +33 -0
  121. package/dist/runtime/components/aware/ANavigationMenu.d.vue.ts +25 -0
  122. package/dist/runtime/components/aware/ANavigationMenu.vue +82 -0
  123. package/dist/runtime/components/aware/ANavigationMenu.vue.d.ts +25 -0
  124. package/dist/runtime/components/aware/APagination.d.vue.ts +13 -0
  125. package/dist/runtime/components/aware/APagination.vue +53 -0
  126. package/dist/runtime/components/aware/APagination.vue.d.ts +13 -0
  127. package/dist/runtime/components/aware/APeerCaretLayer.d.vue.ts +10 -0
  128. package/dist/runtime/components/aware/APeerCaretLayer.vue +133 -0
  129. package/dist/runtime/components/aware/APeerCaretLayer.vue.d.ts +10 -0
  130. package/dist/runtime/components/aware/APinInput.d.vue.ts +15 -0
  131. package/dist/runtime/components/aware/APinInput.vue +48 -0
  132. package/dist/runtime/components/aware/APinInput.vue.d.ts +15 -0
  133. package/dist/runtime/components/aware/APopover.d.vue.ts +25 -0
  134. package/dist/runtime/components/aware/APopover.vue +57 -0
  135. package/dist/runtime/components/aware/APopover.vue.d.ts +25 -0
  136. package/dist/runtime/components/aware/APresenceBlobs.d.vue.ts +3 -0
  137. package/dist/runtime/components/aware/APresenceBlobs.vue +69 -0
  138. package/dist/runtime/components/aware/APresenceBlobs.vue.d.ts +3 -0
  139. package/dist/runtime/components/aware/APresenceCursors.d.vue.ts +20 -0
  140. package/dist/runtime/components/aware/APresenceCursors.vue +47 -0
  141. package/dist/runtime/components/aware/APresenceCursors.vue.d.ts +20 -0
  142. package/dist/runtime/components/aware/ARadioGroup.d.vue.ts +27 -0
  143. package/dist/runtime/components/aware/ARadioGroup.vue +86 -0
  144. package/dist/runtime/components/aware/ARadioGroup.vue.d.ts +27 -0
  145. package/dist/runtime/components/aware/AScroll.d.vue.ts +25 -0
  146. package/dist/runtime/components/aware/AScroll.vue +87 -0
  147. package/dist/runtime/components/aware/AScroll.vue.d.ts +25 -0
  148. package/dist/runtime/components/aware/ASelect.d.vue.ts +12 -2
  149. package/dist/runtime/components/aware/ASelect.vue +146 -22
  150. package/dist/runtime/components/aware/ASelect.vue.d.ts +12 -2
  151. package/dist/runtime/components/aware/ASelectMenu.d.vue.ts +17 -0
  152. package/dist/runtime/components/aware/ASelectMenu.vue +139 -0
  153. package/dist/runtime/components/aware/ASelectMenu.vue.d.ts +17 -0
  154. package/dist/runtime/components/aware/ASlideover.d.vue.ts +33 -0
  155. package/dist/runtime/components/aware/ASlideover.vue +110 -0
  156. package/dist/runtime/components/aware/ASlideover.vue.d.ts +33 -0
  157. package/dist/runtime/components/aware/ASlider.d.vue.ts +19 -0
  158. package/dist/runtime/components/aware/ASlider.vue +77 -0
  159. package/dist/runtime/components/aware/ASlider.vue.d.ts +19 -0
  160. package/dist/runtime/components/aware/AStepper.d.vue.ts +25 -0
  161. package/dist/runtime/components/aware/AStepper.vue +82 -0
  162. package/dist/runtime/components/aware/AStepper.vue.d.ts +25 -0
  163. package/dist/runtime/components/aware/ASwitch.d.vue.ts +11 -0
  164. package/dist/runtime/components/aware/ASwitch.vue +75 -0
  165. package/dist/runtime/components/aware/ASwitch.vue.d.ts +11 -0
  166. package/dist/runtime/components/aware/ATable.d.vue.ts +23 -0
  167. package/dist/runtime/components/aware/ATable.vue +97 -0
  168. package/dist/runtime/components/aware/ATable.vue.d.ts +23 -0
  169. package/dist/runtime/components/aware/ATabs.d.vue.ts +27 -0
  170. package/dist/runtime/components/aware/ATabs.vue +128 -0
  171. package/dist/runtime/components/aware/ATabs.vue.d.ts +27 -0
  172. package/dist/runtime/components/aware/ATextarea.d.vue.ts +12 -2
  173. package/dist/runtime/components/aware/ATextarea.vue +72 -19
  174. package/dist/runtime/components/aware/ATextarea.vue.d.ts +12 -2
  175. package/dist/runtime/components/aware/AToggleGroup.d.vue.ts +27 -0
  176. package/dist/runtime/components/aware/AToggleGroup.vue +79 -0
  177. package/dist/runtime/components/aware/AToggleGroup.vue.d.ts +27 -0
  178. package/dist/runtime/components/aware/ATree.d.vue.ts +27 -0
  179. package/dist/runtime/components/aware/ATree.vue +111 -0
  180. package/dist/runtime/components/aware/ATree.vue.d.ts +27 -0
  181. package/dist/runtime/components/chat/AChatPanel.d.vue.ts +6 -6
  182. package/dist/runtime/components/chat/AChatPanel.vue.d.ts +6 -6
  183. package/dist/runtime/components/chat/ANodeChatPanel.d.vue.ts +42 -0
  184. package/dist/runtime/components/chat/ANodeChatPanel.vue +53 -0
  185. package/dist/runtime/components/chat/ANodeChatPanel.vue.d.ts +42 -0
  186. package/dist/runtime/components/docs/ADocsSearch.d.vue.ts +2 -2
  187. package/dist/runtime/components/docs/ADocsSearch.vue.d.ts +2 -2
  188. package/dist/runtime/components/docs/ADocsSearchButton.d.vue.ts +3 -3
  189. package/dist/runtime/components/docs/ADocsSearchButton.vue.d.ts +3 -3
  190. package/dist/runtime/components/editor/AEditorRedoButton.d.vue.ts +26 -0
  191. package/dist/runtime/components/editor/AEditorRedoButton.vue +38 -0
  192. package/dist/runtime/components/editor/AEditorRedoButton.vue.d.ts +26 -0
  193. package/dist/runtime/components/editor/AEditorUndoButton.d.vue.ts +26 -0
  194. package/dist/runtime/components/editor/AEditorUndoButton.vue +38 -0
  195. package/dist/runtime/components/editor/AEditorUndoButton.vue.d.ts +26 -0
  196. package/dist/runtime/components/editor/AIconPickerPopover.d.vue.ts +24 -0
  197. package/dist/runtime/components/editor/AIconPickerPopover.vue +113 -0
  198. package/dist/runtime/components/editor/AIconPickerPopover.vue.d.ts +24 -0
  199. package/dist/runtime/components/editor/ANodeInlineLabel.d.vue.ts +24 -0
  200. package/dist/runtime/components/editor/ANodeInlineLabel.vue +101 -0
  201. package/dist/runtime/components/editor/ANodeInlineLabel.vue.d.ts +24 -0
  202. package/dist/runtime/components/renderers/ADocLoadError.d.vue.ts +3 -0
  203. package/dist/runtime/components/renderers/ADocLoadError.vue +11 -0
  204. package/dist/runtime/components/renderers/ADocLoadError.vue.d.ts +3 -0
  205. package/dist/runtime/components/renderers/ADocLoadingSkeleton.d.vue.ts +3 -0
  206. package/dist/runtime/components/renderers/ADocLoadingSkeleton.vue +5 -0
  207. package/dist/runtime/components/renderers/ADocLoadingSkeleton.vue.d.ts +3 -0
  208. package/dist/runtime/components/renderers/AOverviewRenderer.d.vue.ts +22 -0
  209. package/dist/runtime/components/renderers/AOverviewRenderer.vue +1041 -0
  210. package/dist/runtime/components/renderers/AOverviewRenderer.vue.d.ts +22 -0
  211. package/dist/runtime/components/renderers/AProseRenderer.d.vue.ts +23 -0
  212. package/dist/runtime/components/renderers/AProseRenderer.vue +31 -0
  213. package/dist/runtime/components/renderers/AProseRenderer.vue.d.ts +23 -0
  214. package/dist/runtime/components/renderers/ASheetsRenderer.client.d.vue.ts +19 -0
  215. package/dist/runtime/components/renderers/ASheetsRenderer.client.vue +865 -0
  216. package/dist/runtime/components/renderers/ASheetsRenderer.client.vue.d.ts +19 -0
  217. package/dist/runtime/components/renderers/calendar/ACalendarDayCell.d.vue.ts +14 -0
  218. package/dist/runtime/components/renderers/calendar/ACalendarDayCell.vue +45 -15
  219. package/dist/runtime/components/renderers/calendar/ACalendarDayCell.vue.d.ts +14 -0
  220. package/dist/runtime/components/renderers/calendar/ACalendarDayView.d.vue.ts +15 -0
  221. package/dist/runtime/components/renderers/calendar/ACalendarDayView.vue +93 -20
  222. package/dist/runtime/components/renderers/calendar/ACalendarDayView.vue.d.ts +15 -0
  223. package/dist/runtime/components/renderers/calendar/ACalendarEventChip.d.vue.ts +9 -0
  224. package/dist/runtime/components/renderers/calendar/ACalendarEventChip.vue +31 -2
  225. package/dist/runtime/components/renderers/calendar/ACalendarEventChip.vue.d.ts +9 -0
  226. package/dist/runtime/components/renderers/calendar/ACalendarWeekView.d.vue.ts +15 -0
  227. package/dist/runtime/components/renderers/calendar/ACalendarWeekView.vue +94 -21
  228. package/dist/runtime/components/renderers/calendar/ACalendarWeekView.vue.d.ts +15 -0
  229. package/dist/runtime/components/renderers/sheets/ASheetsCell.d.vue.ts +45 -0
  230. package/dist/runtime/components/renderers/sheets/ASheetsCell.vue +123 -0
  231. package/dist/runtime/components/renderers/sheets/ASheetsCell.vue.d.ts +45 -0
  232. package/dist/runtime/components/renderers/sheets/ASheetsGrid.d.vue.ts +111 -0
  233. package/dist/runtime/components/renderers/sheets/ASheetsGrid.vue +737 -0
  234. package/dist/runtime/components/renderers/sheets/ASheetsGrid.vue.d.ts +111 -0
  235. package/dist/runtime/components/renderers/sheets/ASheetsMobileActionBar.d.vue.ts +26 -0
  236. package/dist/runtime/components/renderers/sheets/ASheetsMobileActionBar.vue +100 -0
  237. package/dist/runtime/components/renderers/sheets/ASheetsMobileActionBar.vue.d.ts +26 -0
  238. package/dist/runtime/components/renderers/sheets/ASheetsToolbar.d.vue.ts +48 -0
  239. package/dist/runtime/components/renderers/sheets/ASheetsToolbar.vue +243 -0
  240. package/dist/runtime/components/renderers/sheets/ASheetsToolbar.vue.d.ts +48 -0
  241. package/dist/runtime/components/renderers/table/cells/ATableCellColor.d.vue.ts +1 -0
  242. package/dist/runtime/components/renderers/table/cells/ATableCellColor.vue +13 -32
  243. package/dist/runtime/components/renderers/table/cells/ATableCellColor.vue.d.ts +1 -0
  244. package/dist/runtime/components/renderers/timeline/ATimelineBar.d.vue.ts +6 -0
  245. package/dist/runtime/components/renderers/timeline/ATimelineBar.vue +34 -4
  246. package/dist/runtime/components/renderers/timeline/ATimelineBar.vue.d.ts +6 -0
  247. package/dist/runtime/components/renderers/timeline/ATimelineBarArea.d.vue.ts +16 -0
  248. package/dist/runtime/components/renderers/timeline/ATimelineBarArea.vue +14 -3
  249. package/dist/runtime/components/renderers/timeline/ATimelineBarArea.vue.d.ts +16 -0
  250. package/dist/runtime/components/renderers/timeline/ATimelineLabelPanel.d.vue.ts +13 -1
  251. package/dist/runtime/components/renderers/timeline/ATimelineLabelPanel.vue +114 -47
  252. package/dist/runtime/components/renderers/timeline/ATimelineLabelPanel.vue.d.ts +13 -1
  253. package/dist/runtime/components/renderers/timeline/ATimelineMilestone.d.vue.ts +4 -0
  254. package/dist/runtime/components/renderers/timeline/ATimelineMilestone.vue +21 -4
  255. package/dist/runtime/components/renderers/timeline/ATimelineMilestone.vue.d.ts +4 -0
  256. package/dist/runtime/components/renderers/timeline/ATimelineToolbar.d.vue.ts +2 -2
  257. package/dist/runtime/components/renderers/timeline/ATimelineToolbar.vue.d.ts +2 -2
  258. package/dist/runtime/components/settings/ASettingsSpacesPanel.vue +7 -25
  259. package/dist/runtime/components/shell/ADocPanelSettings.d.vue.ts +3 -3
  260. package/dist/runtime/components/shell/ADocPanelSettings.vue.d.ts +3 -3
  261. package/dist/runtime/components/shell/ASyncStatus.d.vue.ts +1 -1
  262. package/dist/runtime/components/shell/ASyncStatus.vue.d.ts +1 -1
  263. package/dist/runtime/components/shell/AUserMenu.d.vue.ts +2 -2
  264. package/dist/runtime/components/shell/AUserMenu.vue.d.ts +2 -2
  265. package/dist/runtime/components/shell/AWelcomeScreen.d.vue.ts +1 -1
  266. package/dist/runtime/components/shell/AWelcomeScreen.vue.d.ts +1 -1
  267. package/dist/runtime/composables/useAACaret.d.ts +29 -0
  268. package/dist/runtime/composables/useAACaret.js +64 -0
  269. package/dist/runtime/composables/useAAEphemeral.d.ts +32 -0
  270. package/dist/runtime/composables/useAAEphemeral.js +33 -0
  271. package/dist/runtime/composables/useAAField.d.ts +10 -2
  272. package/dist/runtime/composables/useAAField.js +31 -2
  273. package/dist/runtime/composables/useAAFieldValue.d.ts +26 -0
  274. package/dist/runtime/composables/useAAFieldValue.js +32 -0
  275. package/dist/runtime/composables/useAAFocus.d.ts +68 -0
  276. package/dist/runtime/composables/useAAFocus.js +174 -0
  277. package/dist/runtime/composables/useAAFollowAnchor.d.ts +25 -0
  278. package/dist/runtime/composables/useAAFollowAnchor.js +69 -0
  279. package/dist/runtime/composables/useAAFollowPeer.d.ts +29 -0
  280. package/dist/runtime/composables/useAAFollowPeer.js +75 -0
  281. package/dist/runtime/composables/useAAKey.d.ts +22 -0
  282. package/dist/runtime/composables/useAAKey.js +24 -0
  283. package/dist/runtime/composables/useAAPointer.d.ts +30 -0
  284. package/dist/runtime/composables/useAAPointer.js +53 -0
  285. package/dist/runtime/composables/useAAUIState.d.ts +29 -0
  286. package/dist/runtime/composables/useAAUIState.js +28 -0
  287. package/dist/runtime/composables/useAAViewport.d.ts +22 -0
  288. package/dist/runtime/composables/useAAViewport.js +50 -0
  289. package/dist/runtime/composables/useAbraAdmin.d.ts +54 -0
  290. package/dist/runtime/composables/useAbraAdmin.js +115 -0
  291. package/dist/runtime/composables/useAbracadabraAuth.d.ts +8 -0
  292. package/dist/runtime/composables/useAbracadabraAuth.js +8 -0
  293. package/dist/runtime/composables/useAggregatedPresence.d.ts +23 -0
  294. package/dist/runtime/composables/useAggregatedPresence.js +140 -0
  295. package/dist/runtime/composables/useChat.d.ts +16 -2
  296. package/dist/runtime/composables/useChat.js +257 -66
  297. package/dist/runtime/composables/useChatUsers.d.ts +2 -0
  298. package/dist/runtime/composables/useChatUsers.js +2 -1
  299. package/dist/runtime/composables/useDocLookup.d.ts +4 -0
  300. package/dist/runtime/composables/useDocLookup.js +25 -0
  301. package/dist/runtime/composables/useDocSnapshots.d.ts +79 -0
  302. package/dist/runtime/composables/useDocSnapshots.js +234 -0
  303. package/dist/runtime/composables/useEditorDragHandle.d.ts +7 -0
  304. package/dist/runtime/composables/useEditorDragHandle.js +19 -1
  305. package/dist/runtime/composables/useEditorSuggestions.js +27 -1
  306. package/dist/runtime/composables/useEditorToolbar.js +9 -1
  307. package/dist/runtime/composables/useEmailVerification.d.ts +33 -0
  308. package/dist/runtime/composables/useEmailVerification.js +58 -0
  309. package/dist/runtime/composables/useIdentityDoc.js +0 -3
  310. package/dist/runtime/composables/useItemPresence.d.ts +47 -0
  311. package/dist/runtime/composables/useItemPresence.js +73 -0
  312. package/dist/runtime/composables/useResizableWidth.d.ts +24 -0
  313. package/dist/runtime/composables/useResizableWidth.js +87 -0
  314. package/dist/runtime/composables/useServerInfo.d.ts +17 -2
  315. package/dist/runtime/composables/useServerInfo.js +30 -6
  316. package/dist/runtime/composables/useServerSearch.d.ts +36 -0
  317. package/dist/runtime/composables/useServerSearch.js +91 -0
  318. package/dist/runtime/composables/useServerTrash.d.ts +67 -0
  319. package/dist/runtime/composables/useServerTrash.js +128 -0
  320. package/dist/runtime/composables/useSheetsClipboard.d.ts +42 -0
  321. package/dist/runtime/composables/useSheetsClipboard.js +109 -0
  322. package/dist/runtime/composables/useSheetsFormulas.d.ts +38 -0
  323. package/dist/runtime/composables/useSheetsFormulas.js +725 -0
  324. package/dist/runtime/composables/useSheetsSelection.d.ts +68 -0
  325. package/dist/runtime/composables/useSheetsSelection.js +390 -0
  326. package/dist/runtime/composables/useSheetsView.d.ts +31 -0
  327. package/dist/runtime/composables/useSheetsView.js +77 -0
  328. package/dist/runtime/composables/useSpaceConnections.d.ts +43 -0
  329. package/dist/runtime/composables/useSpaceConnections.js +72 -0
  330. package/dist/runtime/composables/useSpaces.d.ts +1 -3
  331. package/dist/runtime/composables/useSpaces.js +2 -5
  332. package/dist/runtime/composables/useTiptapHistory.d.ts +22 -0
  333. package/dist/runtime/composables/useTiptapHistory.js +12 -0
  334. package/dist/runtime/composables/useTreeExpansion.d.ts +28 -0
  335. package/dist/runtime/composables/useTreeExpansion.js +94 -0
  336. package/dist/runtime/composables/useYDoc.js +12 -1
  337. package/dist/runtime/extensions/button.d.ts +3 -0
  338. package/dist/runtime/extensions/button.js +62 -0
  339. package/dist/runtime/extensions/color-swatch.d.ts +2 -0
  340. package/dist/runtime/extensions/color-swatch.js +34 -0
  341. package/dist/runtime/extensions/diff.d.ts +2 -0
  342. package/dist/runtime/extensions/diff.js +40 -0
  343. package/dist/runtime/extensions/divider.d.ts +2 -0
  344. package/dist/runtime/extensions/divider.js +33 -0
  345. package/dist/runtime/extensions/embed.d.ts +2 -0
  346. package/dist/runtime/extensions/embed.js +40 -0
  347. package/dist/runtime/extensions/figure.d.ts +2 -0
  348. package/dist/runtime/extensions/figure.js +49 -0
  349. package/dist/runtime/extensions/math.d.ts +15 -0
  350. package/dist/runtime/extensions/math.js +66 -0
  351. package/dist/runtime/extensions/progress.d.ts +2 -0
  352. package/dist/runtime/extensions/progress.js +43 -0
  353. package/dist/runtime/extensions/quote.d.ts +2 -0
  354. package/dist/runtime/extensions/quote.js +39 -0
  355. package/dist/runtime/extensions/spoiler.d.ts +2 -0
  356. package/dist/runtime/extensions/spoiler.js +36 -0
  357. package/dist/runtime/extensions/stat.d.ts +3 -0
  358. package/dist/runtime/extensions/stat.js +58 -0
  359. package/dist/runtime/extensions/svg-embed.d.ts +23 -0
  360. package/dist/runtime/extensions/svg-embed.js +33 -0
  361. package/dist/runtime/extensions/video.d.ts +2 -0
  362. package/dist/runtime/extensions/video.js +40 -0
  363. package/dist/runtime/extensions/views/ButtonGroupView.d.vue.ts +4 -0
  364. package/dist/runtime/extensions/views/ButtonGroupView.vue +25 -0
  365. package/dist/runtime/extensions/views/ButtonGroupView.vue.d.ts +4 -0
  366. package/dist/runtime/extensions/views/ButtonView.d.vue.ts +4 -0
  367. package/dist/runtime/extensions/views/ButtonView.vue +171 -0
  368. package/dist/runtime/extensions/views/ButtonView.vue.d.ts +4 -0
  369. package/dist/runtime/extensions/views/ColorSwatchView.d.vue.ts +4 -0
  370. package/dist/runtime/extensions/views/ColorSwatchView.vue +134 -0
  371. package/dist/runtime/extensions/views/ColorSwatchView.vue.d.ts +4 -0
  372. package/dist/runtime/extensions/views/DiffView.d.vue.ts +4 -0
  373. package/dist/runtime/extensions/views/DiffView.vue +163 -0
  374. package/dist/runtime/extensions/views/DiffView.vue.d.ts +4 -0
  375. package/dist/runtime/extensions/views/DividerView.d.vue.ts +4 -0
  376. package/dist/runtime/extensions/views/DividerView.vue +40 -0
  377. package/dist/runtime/extensions/views/DividerView.vue.d.ts +4 -0
  378. package/dist/runtime/extensions/views/EmbedView.d.vue.ts +4 -0
  379. package/dist/runtime/extensions/views/EmbedView.vue +166 -0
  380. package/dist/runtime/extensions/views/EmbedView.vue.d.ts +4 -0
  381. package/dist/runtime/extensions/views/FigureView.d.vue.ts +4 -0
  382. package/dist/runtime/extensions/views/FigureView.vue +122 -0
  383. package/dist/runtime/extensions/views/FigureView.vue.d.ts +4 -0
  384. package/dist/runtime/extensions/views/FileNodeView.vue +21 -24
  385. package/dist/runtime/extensions/views/MathBlockView.d.vue.ts +4 -0
  386. package/dist/runtime/extensions/views/MathBlockView.vue +151 -0
  387. package/dist/runtime/extensions/views/MathBlockView.vue.d.ts +4 -0
  388. package/dist/runtime/extensions/views/MathInlineView.d.vue.ts +4 -0
  389. package/dist/runtime/extensions/views/MathInlineView.vue +149 -0
  390. package/dist/runtime/extensions/views/MathInlineView.vue.d.ts +4 -0
  391. package/dist/runtime/extensions/views/MetaFieldView.vue +1129 -550
  392. package/dist/runtime/extensions/views/ProgressView.d.vue.ts +4 -0
  393. package/dist/runtime/extensions/views/ProgressView.vue +156 -0
  394. package/dist/runtime/extensions/views/ProgressView.vue.d.ts +4 -0
  395. package/dist/runtime/extensions/views/QuoteView.d.vue.ts +4 -0
  396. package/dist/runtime/extensions/views/QuoteView.vue +128 -0
  397. package/dist/runtime/extensions/views/QuoteView.vue.d.ts +4 -0
  398. package/dist/runtime/extensions/views/SpoilerView.d.vue.ts +4 -0
  399. package/dist/runtime/extensions/views/SpoilerView.vue +62 -0
  400. package/dist/runtime/extensions/views/SpoilerView.vue.d.ts +4 -0
  401. package/dist/runtime/extensions/views/StatGroupView.d.vue.ts +4 -0
  402. package/dist/runtime/extensions/views/StatGroupView.vue +25 -0
  403. package/dist/runtime/extensions/views/StatGroupView.vue.d.ts +4 -0
  404. package/dist/runtime/extensions/views/StatView.d.vue.ts +4 -0
  405. package/dist/runtime/extensions/views/StatView.vue +89 -0
  406. package/dist/runtime/extensions/views/StatView.vue.d.ts +4 -0
  407. package/dist/runtime/extensions/views/SvgEmbedView.d.vue.ts +4 -0
  408. package/dist/runtime/extensions/views/SvgEmbedView.vue +120 -0
  409. package/dist/runtime/extensions/views/SvgEmbedView.vue.d.ts +4 -0
  410. package/dist/runtime/extensions/views/VideoView.d.vue.ts +4 -0
  411. package/dist/runtime/extensions/views/VideoView.vue +190 -0
  412. package/dist/runtime/extensions/views/VideoView.vue.d.ts +4 -0
  413. package/dist/runtime/locale.d.ts +133 -0
  414. package/dist/runtime/locale.js +121 -2
  415. package/dist/runtime/plugin-abracadabra.client.js +233 -36
  416. package/dist/runtime/plugin-abracadabra.server.js +0 -1
  417. package/dist/runtime/plugins/core.plugin.js +77 -4
  418. package/dist/runtime/server/plugins/abracadabra-service.js +84 -6
  419. package/dist/runtime/server/utils/rpcHandler.d.ts +74 -0
  420. package/dist/runtime/server/utils/rpcHandler.js +74 -0
  421. package/dist/runtime/server/utils/spaceManager.js +10 -9
  422. package/dist/runtime/types.d.ts +63 -10
  423. package/dist/runtime/utils/awareRingStyle.d.ts +22 -0
  424. package/dist/runtime/utils/awareRingStyle.js +16 -0
  425. package/dist/runtime/utils/caretCoordinates.d.ts +41 -0
  426. package/dist/runtime/utils/caretCoordinates.js +126 -0
  427. package/dist/runtime/utils/content.d.ts +1 -1
  428. package/dist/runtime/utils/docTypes.js +44 -13
  429. package/dist/runtime/utils/domPath.d.ts +42 -0
  430. package/dist/runtime/utils/domPath.js +89 -0
  431. package/dist/runtime/utils/loadKatex.d.ts +1 -0
  432. package/dist/runtime/utils/loadKatex.js +29 -0
  433. package/dist/runtime/utils/lucideIcons.d.ts +16 -0
  434. package/dist/runtime/utils/lucideIcons.js +451 -0
  435. package/dist/runtime/utils/sanitizeSvg.d.ts +19 -0
  436. package/dist/runtime/utils/sanitizeSvg.js +87 -0
  437. package/dist/runtime/utils/time.d.ts +15 -0
  438. package/dist/runtime/utils/time.js +5 -0
  439. package/dist/types.d.mts +4 -0
  440. package/package.json +26 -16
@@ -136,16 +136,26 @@ async function fetchServerInfo(baseUrl) {
136
136
  }
137
137
  return {};
138
138
  }
139
- async function fetchSpacesInfo(baseUrl) {
139
+ function spaceMetaFromDoc(doc) {
140
+ return {
141
+ id: doc.id,
142
+ name: doc.label ?? "",
143
+ description: doc.description ?? null,
144
+ visibility: doc.public_access === "observer" ? "public" : "private",
145
+ owner_id: doc.owner_id ?? null,
146
+ public_access: doc.public_access ?? null
147
+ };
148
+ }
149
+ async function fetchSpacesInfo(baseUrl, token) {
140
150
  try {
141
- const [spacesRes, hubRes] = await Promise.all([
142
- fetch(`${baseUrl}/spaces`),
143
- fetch(`${baseUrl}/spaces/hub`)
144
- ]);
145
- if (!spacesRes.ok) return null;
146
- const spacesData = await spacesRes.json();
147
- const hubDocId = hubRes.ok ? (await hubRes.json()).doc_id : void 0;
148
- return { spaces: spacesData.spaces, hubDocId };
151
+ const headers = {};
152
+ if (token) headers.Authorization = `Bearer ${token}`;
153
+ const res = await fetch(`${baseUrl}/docs?root=true`, { headers });
154
+ if (!res.ok) return null;
155
+ const data = await res.json();
156
+ const docs = Array.isArray(data) ? data : data.documents ?? [];
157
+ const spaces = docs.filter((d) => d.kind === "space").map(spaceMetaFromDoc);
158
+ return { spaces };
149
159
  } catch {
150
160
  return null;
151
161
  }
@@ -228,6 +238,9 @@ export default defineNuxtPlugin({
228
238
  const userColor = ref("hsl(217, 70%, 75%)");
229
239
  const userColorName = ref("blue");
230
240
  const userNeutralColorName = ref("zinc");
241
+ const userStatusIcon = ref(localStorage.getItem("abracadabra_status_icon") ?? "");
242
+ const userStatusText = ref(localStorage.getItem("abracadabra_status_text") ?? "");
243
+ const userStatusAsAvatar = ref(localStorage.getItem("abracadabra_status_as_avatar") === "1");
231
244
  watch([status, synced], ([s, sy]) => {
232
245
  try {
233
246
  const ready = s === "connected" && sy;
@@ -289,12 +302,10 @@ export default defineNuxtPlugin({
289
302
  }
290
303
  const entry = { url, label };
291
304
  const [info, spacesInfo] = await Promise.all([fetchServerInfo(url), fetchSpacesInfo(url)]);
292
- if (info.index_doc_id) entry.entryDocId = info.index_doc_id;
305
+ if (info.root_doc_id) entry.entryDocId = info.root_doc_id;
293
306
  if (info.name) entry.label = info.name;
294
307
  if (spacesInfo) {
295
- entry.spacesEnabled = true;
296
308
  entry.cachedSpaces = spacesInfo.spaces;
297
- if (spacesInfo.hubDocId) entry.hubDocId = spacesInfo.hubDocId;
298
309
  }
299
310
  savedServers.value = [...savedServers.value, entry];
300
311
  persistServers();
@@ -307,42 +318,59 @@ export default defineNuxtPlugin({
307
318
  const currentServerSpaces = computed(
308
319
  () => savedServers.value.find((s) => s.url === currentServerUrl.value)?.cachedSpaces ?? []
309
320
  );
310
- const currentServerSpacesEnabled = computed(
311
- () => savedServers.value.find((s) => s.url === currentServerUrl.value)?.spacesEnabled ?? false
312
- );
313
321
  async function refreshSpaces() {
314
322
  const url = currentServerUrl.value;
315
323
  if (!url) return;
316
- const spacesInfo = await fetchSpacesInfo(url);
324
+ let spaces = null;
325
+ if (client.value) {
326
+ try {
327
+ const docs = await client.value.listSpaces();
328
+ spaces = docs.map(spaceMetaFromDoc);
329
+ } catch (e) {
330
+ if (import.meta.dev) console.warn("[abracadabra] refreshSpaces: client.listSpaces failed", e);
331
+ }
332
+ }
333
+ if (spaces === null) {
334
+ const spacesInfo = await fetchSpacesInfo(url);
335
+ spaces = spacesInfo?.spaces ?? null;
336
+ }
337
+ if (spaces === null) return;
317
338
  const idx = savedServers.value.findIndex((s) => s.url === url);
318
339
  if (idx !== -1) {
319
- if (spacesInfo) {
320
- savedServers.value[idx] = { ...savedServers.value[idx], spacesEnabled: true, cachedSpaces: spacesInfo.spaces, hubDocId: spacesInfo.hubDocId ?? savedServers.value[idx].hubDocId };
321
- }
340
+ savedServers.value[idx] = { ...savedServers.value[idx], cachedSpaces: spaces };
322
341
  persistServers();
323
342
  }
324
343
  }
325
344
  async function createSpace(opts) {
326
345
  if (!client.value) throw new Error("Not connected");
327
- const result = await client.value.createSpace(opts);
346
+ const doc2 = await client.value.createSpace(opts);
328
347
  await refreshSpaces();
329
- return result;
348
+ return spaceMetaFromDoc(doc2);
330
349
  }
331
350
  async function updateSpace(id, opts) {
332
351
  if (!client.value) throw new Error("Not connected");
333
- const result = await client.value.updateSpace(id, opts);
352
+ await client.value.updateSpace(id, opts);
334
353
  await refreshSpaces();
335
- return result;
336
354
  }
337
355
  async function deleteSpace(id) {
338
356
  if (!client.value) throw new Error("Not connected");
339
357
  await client.value.deleteSpace(id);
340
358
  await refreshSpaces();
341
359
  }
360
+ function publishAwarenessUser() {
361
+ const payload = {
362
+ name: userName.value,
363
+ color: userColor.value,
364
+ publicKey: publicKeyB64.value
365
+ };
366
+ if (userStatusIcon.value) payload.statusIcon = userStatusIcon.value;
367
+ if (userStatusText.value) payload.statusText = userStatusText.value;
368
+ provider.value?.setAwarenessField("user", payload);
369
+ }
342
370
  function setUserName(name) {
343
371
  userName.value = name;
344
372
  localStorage.setItem("abracadabra_username", name);
345
- provider.value?.setAwarenessField("user", { name, color: userColor.value, publicKey: publicKeyB64.value });
373
+ publishAwarenessUser();
346
374
  client.value?.updateMe({ displayName: name }).catch(() => {
347
375
  });
348
376
  }
@@ -354,7 +382,7 @@ export default defineNuxtPlugin({
354
382
  localStorage.setItem("abracadabra_usercolor", colorName);
355
383
  const appConfig = useAppConfig();
356
384
  if (appConfig.ui?.colors) appConfig.ui.colors.primary = toNuxtUIPrimary(colorName);
357
- provider.value?.setAwarenessField("user", { name: userName.value, color: hsl, publicKey: publicKeyB64.value });
385
+ publishAwarenessUser();
358
386
  }
359
387
  function setNeutralColor(colorName) {
360
388
  userNeutralColorName.value = colorName;
@@ -362,6 +390,25 @@ export default defineNuxtPlugin({
362
390
  const appConfig = useAppConfig();
363
391
  if (appConfig.ui?.colors) appConfig.ui.colors.neutral = toNuxtUINeutral(colorName);
364
392
  }
393
+ function setUserStatusIcon(icon) {
394
+ const normalized = icon.replace(/^i-lucide-/, "");
395
+ userStatusIcon.value = normalized;
396
+ if (normalized) localStorage.setItem("abracadabra_status_icon", normalized);
397
+ else localStorage.removeItem("abracadabra_status_icon");
398
+ publishAwarenessUser();
399
+ }
400
+ function setUserStatusText(text) {
401
+ const trimmed = (text ?? "").slice(0, 80);
402
+ userStatusText.value = trimmed;
403
+ if (trimmed) localStorage.setItem("abracadabra_status_text", trimmed);
404
+ else localStorage.removeItem("abracadabra_status_text");
405
+ publishAwarenessUser();
406
+ }
407
+ function setUserStatusAsAvatar(enabled) {
408
+ userStatusAsAvatar.value = enabled;
409
+ if (enabled) localStorage.setItem("abracadabra_status_as_avatar", "1");
410
+ else localStorage.removeItem("abracadabra_status_as_avatar");
411
+ }
365
412
  function setRequirePasskey(enabled) {
366
413
  requirePasskeyOnLogin.value = enabled;
367
414
  localStorage.setItem(REQUIRE_PASSKEY_KEY, enabled ? "1" : "0");
@@ -519,6 +566,67 @@ export default defineNuxtPlugin({
519
566
  localStorage.removeItem(PUBKEY_KEY);
520
567
  window.location.reload();
521
568
  }
569
+ async function logoutServer() {
570
+ addLog("Revoking session on server...", "auth");
571
+ if (client.value) {
572
+ try {
573
+ await client.value.logoutServer();
574
+ } catch (e) {
575
+ if (import.meta.dev) console.warn("[abracadabra] logoutServer failed", e);
576
+ }
577
+ }
578
+ await logout();
579
+ }
580
+ async function logoutAll() {
581
+ addLog("Revoking all sessions for user...", "auth");
582
+ if (client.value) {
583
+ try {
584
+ await client.value.logoutAll();
585
+ } catch (e) {
586
+ if (import.meta.dev) console.warn("[abracadabra] logoutAll failed", e);
587
+ }
588
+ }
589
+ await logout();
590
+ }
591
+ async function requestPasswordReset(opts) {
592
+ if (!client.value) throw new Error("Not connected");
593
+ await client.value.requestPasswordReset(opts);
594
+ addLog("Password reset email requested", "auth");
595
+ }
596
+ async function loginWithPassword(opts) {
597
+ if (!client.value) throw new Error("Not connected");
598
+ await client.value.login(opts);
599
+ addLog(`Logged in as ${opts.username}`, "auth");
600
+ if (_wsp) {
601
+ _wsp.disconnect();
602
+ setTimeout(() => _wsp?.connect(), 300);
603
+ }
604
+ }
605
+ async function registerWithPassword(opts) {
606
+ if (!client.value) throw new Error("Not connected");
607
+ await client.value.register(opts);
608
+ await client.value.login({ username: opts.username, password: opts.password });
609
+ addLog(`Registered + logged in as ${opts.username}`, "auth");
610
+ if (_wsp) {
611
+ _wsp.disconnect();
612
+ setTimeout(() => _wsp?.connect(), 300);
613
+ }
614
+ }
615
+ async function confirmPasswordReset(opts) {
616
+ if (!client.value) throw new Error("Not connected");
617
+ await client.value.confirmPasswordReset(opts);
618
+ addLog("Password reset confirmed", "auth");
619
+ }
620
+ async function changePassword(opts) {
621
+ if (!client.value) throw new Error("Not connected");
622
+ await client.value.changePassword(opts);
623
+ addLog("Password changed", "auth");
624
+ }
625
+ async function setPassword(newPassword) {
626
+ if (!client.value) throw new Error("Not connected");
627
+ await client.value.setPassword(newPassword);
628
+ addLog("Password set", "auth");
629
+ }
522
630
  async function redeemInvite(code) {
523
631
  if (!client.value) throw new Error("Not connected");
524
632
  await client.value.redeemInvite(code);
@@ -679,7 +787,28 @@ export default defineNuxtPlugin({
679
787
  const _client = new AbracadabraClient({ url: serverUrl, persistAuth, storageKey: authStorageKey });
680
788
  client.value = _client;
681
789
  addLog(`Server: ${serverUrl}`, "connection");
682
- if (_client.isTokenValid() && identityState.value === "claimed") {
790
+ let useExistingToken = _client.isTokenValid();
791
+ if (useExistingToken) {
792
+ try {
793
+ await _client.getMe();
794
+ } catch (e) {
795
+ const status2 = e?.status ?? 0;
796
+ if (status2 === 401) {
797
+ const msg = e instanceof Error ? e.message : String(e);
798
+ addLog(`Persisted JWT no longer valid on ${serverUrl} (${msg.slice(0, 80)}) \u2014 re-registering`, "auth");
799
+ try {
800
+ localStorage.removeItem(authStorageKey);
801
+ } catch {
802
+ }
803
+ ;
804
+ _client.token = null;
805
+ useExistingToken = false;
806
+ }
807
+ }
808
+ }
809
+ if (useExistingToken && identityState.value === "claimed") {
810
+ addLog("Resumed session from persisted token", "auth");
811
+ } else if (useExistingToken) {
683
812
  addLog("Resumed session from persisted token", "auth");
684
813
  } else if (identityState.value === "claimed" && !requirePasskeyOnLogin.value) {
685
814
  identityState.value = "needsReauth";
@@ -710,18 +839,20 @@ export default defineNuxtPlugin({
710
839
  }
711
840
  _client.updateMe({ displayName: userName.value }).catch(() => {
712
841
  });
713
- const [info, spacesInfo] = await Promise.all([
842
+ const [info, spaceDocs] = await Promise.all([
714
843
  fetchServerInfo(serverUrl),
715
- fetchSpacesInfo(serverUrl)
844
+ _client.listSpaces().catch((e) => {
845
+ if (import.meta.dev) console.warn("[abracadabra] init: client.listSpaces failed", e);
846
+ return null;
847
+ })
716
848
  ]);
849
+ const spacesInfo = spaceDocs ? { spaces: spaceDocs.map(spaceMetaFromDoc) } : null;
717
850
  const idx = savedServers.value.findIndex((s) => s.url === serverUrl);
718
851
  if (idx >= 0) {
719
852
  const updates = {};
720
853
  if (info.name && info.name !== savedServers.value[idx].label) updates.label = info.name;
721
854
  if (spacesInfo) {
722
- updates.spacesEnabled = true;
723
855
  updates.cachedSpaces = spacesInfo.spaces;
724
- if (spacesInfo.hubDocId) updates.hubDocId = spacesInfo.hubDocId;
725
856
  }
726
857
  if (Object.keys(updates).length) {
727
858
  savedServers.value[idx] = { ...savedServers.value[idx], ...updates };
@@ -729,9 +860,9 @@ export default defineNuxtPlugin({
729
860
  }
730
861
  }
731
862
  const server = savedServers.value.find((s) => s.url === serverUrl);
732
- const docId = configEntryDocId ?? server?.hubDocId ?? spacesInfo?.hubDocId ?? server?.cachedSpaces?.[0]?.doc_id ?? spacesInfo?.spaces?.[0]?.doc_id ?? server?.entryDocId ?? info.index_doc_id ?? void 0;
863
+ const docId = configEntryDocId ?? server?.entryDocId ?? server?.cachedSpaces?.[0]?.id ?? spacesInfo?.spaces?.[0]?.id ?? info?.root_doc_id ?? void 0;
733
864
  if (!docId) {
734
- connectionError.value = "No entry document found. Configure entryDocId or ensure the server has spaces or an index document.";
865
+ connectionError.value = "No entry document found. Configure entryDocId or ensure the server has spaces.";
735
866
  addLog("No entry document \u2014 cannot connect", "system");
736
867
  try {
737
868
  const imports = await import("#imports");
@@ -888,12 +1019,38 @@ export default defineNuxtPlugin({
888
1019
  }
889
1020
  }
890
1021
  });
891
- _provider.setAwarenessField("user", { name: userName.value, color: userColor.value, publicKey: publicKeyB64.value });
1022
+ {
1023
+ const initial = {
1024
+ name: userName.value,
1025
+ color: userColor.value,
1026
+ publicKey: publicKeyB64.value
1027
+ };
1028
+ if (userStatusIcon.value) initial.statusIcon = userStatusIcon.value;
1029
+ if (userStatusText.value) initial.statusText = userStatusText.value;
1030
+ _provider.setAwarenessField("user", initial);
1031
+ }
892
1032
  _provider.on("unsyncedChanges", ({ number }) => {
893
1033
  unsyncedChanges.value = number;
894
1034
  });
895
1035
  _provider.attach();
896
1036
  provider.value = _provider;
1037
+ try {
1038
+ const onPointerLeave = (e) => {
1039
+ if (e.relatedTarget !== null) return;
1040
+ try {
1041
+ _provider.awareness?.setLocalStateField("hover", null);
1042
+ } catch {
1043
+ }
1044
+ };
1045
+ document.addEventListener("pointerleave", onPointerLeave);
1046
+ window.addEventListener("beforeunload", () => {
1047
+ try {
1048
+ _provider.awareness?.setLocalState(null);
1049
+ } catch {
1050
+ }
1051
+ });
1052
+ } catch {
1053
+ }
897
1054
  try {
898
1055
  const { FileBlobStore } = await import("@abraca/dabra");
899
1056
  const blobStore = new FileBlobStore(serverUrl, _client);
@@ -911,9 +1068,16 @@ export default defineNuxtPlugin({
911
1068
  isReady.value = true;
912
1069
  }, () => null);
913
1070
  watch(
914
- [userName, userColor, publicKeyB64],
1071
+ [userName, userColor, publicKeyB64, userStatusIcon, userStatusText],
915
1072
  () => {
916
- _provider.setAwarenessField("user", { name: userName.value, color: userColor.value, publicKey: publicKeyB64.value });
1073
+ const payload = {
1074
+ name: userName.value,
1075
+ color: userColor.value,
1076
+ publicKey: publicKeyB64.value
1077
+ };
1078
+ if (userStatusIcon.value) payload.statusIcon = userStatusIcon.value;
1079
+ if (userStatusText.value) payload.statusText = userStatusText.value;
1080
+ _provider.setAwarenessField("user", payload);
917
1081
  },
918
1082
  { immediate: true }
919
1083
  );
@@ -938,6 +1102,9 @@ export default defineNuxtPlugin({
938
1102
  userColorName,
939
1103
  userNeutralColorName,
940
1104
  userCount,
1105
+ userStatusIcon,
1106
+ userStatusText,
1107
+ userStatusAsAvatar,
941
1108
  publicKeyB64,
942
1109
  connectionError,
943
1110
  identityState,
@@ -951,7 +1118,6 @@ export default defineNuxtPlugin({
951
1118
  currentServerUrl,
952
1119
  savedServers,
953
1120
  currentServerSpaces,
954
- currentServerSpacesEnabled,
955
1121
  pendingInviteCode,
956
1122
  registry,
957
1123
  addLog,
@@ -959,10 +1125,21 @@ export default defineNuxtPlugin({
959
1125
  setUserColor,
960
1126
  setNeutralColor,
961
1127
  setRequirePasskey,
1128
+ setUserStatusIcon,
1129
+ setUserStatusText,
1130
+ setUserStatusAsAvatar,
962
1131
  claimAccount,
963
1132
  loginWithHardware,
1133
+ loginWithPassword,
1134
+ registerWithPassword,
964
1135
  logout,
965
1136
  reconnect,
1137
+ logoutServer,
1138
+ logoutAll,
1139
+ requestPasswordReset,
1140
+ confirmPasswordReset,
1141
+ changePassword,
1142
+ setPassword,
966
1143
  addServer,
967
1144
  removeServer,
968
1145
  switchServer,
@@ -985,6 +1162,26 @@ export default defineNuxtPlugin({
985
1162
  watch(abra.status, (s) => console.log("[abracadabra] status \u2192", s));
986
1163
  watch(abra.synced, (s) => console.log("[abracadabra] synced \u2192", s));
987
1164
  }
1165
+ function _kickConnection() {
1166
+ if (!_wsp) return;
1167
+ if (identityState.value === "connectionBlocked") {
1168
+ unblockConnection();
1169
+ return;
1170
+ }
1171
+ if (status.value === "disconnected") {
1172
+ authFailureCount = 0;
1173
+ connectionError.value = null;
1174
+ try {
1175
+ _wsp.connect();
1176
+ } catch {
1177
+ }
1178
+ }
1179
+ }
1180
+ window.addEventListener("focus", _kickConnection);
1181
+ window.addEventListener("online", _kickConnection);
1182
+ document.addEventListener("visibilitychange", () => {
1183
+ if (document.visibilityState === "visible") _kickConnection();
1184
+ });
988
1185
  loadServers();
989
1186
  const storedServer = localStorage.getItem(CURRENT_SERVER_KEY);
990
1187
  const initialUrl = storedServer && savedServers.value.some((s) => s.url === storedServer) ? storedServer : currentServerUrl.value || savedServers.value[0]?.url || defaultUrl;
@@ -39,7 +39,6 @@ export default defineNuxtPlugin({
39
39
  currentServerUrl: ref(""),
40
40
  savedServers: ref([]),
41
41
  currentServerSpaces: computed(() => []),
42
- currentServerSpacesEnabled: computed(() => false),
43
42
  // Misc
44
43
  pendingInviteCode: ref(null),
45
44
  logs: ref([]),
@@ -1,4 +1,23 @@
1
1
  import { DOC_TYPES } from "../utils/docTypes.js";
2
+ import { useRuntimeConfig } from "#imports";
3
+ const OPTIONAL_BUILTIN_EXTENSIONS = /* @__PURE__ */ new Set([
4
+ "divider",
5
+ "quote",
6
+ "figure",
7
+ "embed",
8
+ "video",
9
+ "stat",
10
+ "statGroup",
11
+ "button",
12
+ "buttonGroup",
13
+ "progress",
14
+ "spoiler",
15
+ "colorSwatch",
16
+ "mathBlock",
17
+ "mathInline",
18
+ "diff",
19
+ "svgEmbed"
20
+ ]);
2
21
  async function loadClientExtensions() {
3
22
  const [
4
23
  { default: TaskList },
@@ -41,7 +60,20 @@ async function loadClientExtensions() {
41
60
  { SelectionDrag },
42
61
  { Field, FieldGroup },
43
62
  { CodePreview },
44
- { CodeTree }
63
+ { CodeTree },
64
+ { Divider },
65
+ { Quote },
66
+ { Figure },
67
+ { Embed },
68
+ { Video },
69
+ { Stat, StatGroup },
70
+ { Button, ButtonGroup },
71
+ { Progress },
72
+ { Spoiler },
73
+ { ColorSwatch },
74
+ { MathBlock, MathInline },
75
+ { Diff },
76
+ { SvgEmbed }
45
77
  ] = await Promise.all([
46
78
  import("@tiptap/extension-task-list"),
47
79
  import("@tiptap/extension-task-item"),
@@ -83,7 +115,20 @@ async function loadClientExtensions() {
83
115
  import("../extensions/selection-drag.js"),
84
116
  import("../extensions/field.js"),
85
117
  import("../extensions/code-preview.js"),
86
- import("../extensions/code-tree.js")
118
+ import("../extensions/code-tree.js"),
119
+ import("../extensions/divider.js"),
120
+ import("../extensions/quote.js"),
121
+ import("../extensions/figure.js"),
122
+ import("../extensions/embed.js"),
123
+ import("../extensions/video.js"),
124
+ import("../extensions/stat.js"),
125
+ import("../extensions/button.js"),
126
+ import("../extensions/progress.js"),
127
+ import("../extensions/spoiler.js"),
128
+ import("../extensions/color-swatch.js"),
129
+ import("../extensions/math.js"),
130
+ import("../extensions/diff.js"),
131
+ import("../extensions/svg-embed.js")
87
132
  ]);
88
133
  const lowlight = createLowlight(common);
89
134
  const extensions = [
@@ -140,7 +185,24 @@ async function loadClientExtensions() {
140
185
  FieldGroup,
141
186
  // Advanced code blocks
142
187
  CodePreview,
143
- CodeTree
188
+ CodeTree,
189
+ // Visual blocks
190
+ Divider,
191
+ Quote,
192
+ Figure,
193
+ Embed,
194
+ Video,
195
+ Stat,
196
+ StatGroup,
197
+ Button,
198
+ ButtonGroup,
199
+ Progress,
200
+ Spoiler,
201
+ ColorSwatch,
202
+ MathBlock,
203
+ MathInline,
204
+ Diff,
205
+ SvgEmbed
144
206
  ];
145
207
  try {
146
208
  const emojiPkg = "@tiptap/extension-emoji";
@@ -210,7 +272,18 @@ export const corePlugin = {
210
272
  ])
211
273
  ),
212
274
  extensions() {
213
- return _cachedClient ?? [];
275
+ if (!_cachedClient) return [];
276
+ let disabled = [];
277
+ try {
278
+ disabled = useRuntimeConfig().public?.abracadabra?.disabledBuiltins ?? [];
279
+ } catch {
280
+ }
281
+ if (!disabled.length) return _cachedClient;
282
+ return _cachedClient.filter((ext) => {
283
+ const name = ext?.name;
284
+ if (!name || !OPTIONAL_BUILTIN_EXTENSIONS.has(name)) return true;
285
+ return !disabled.includes(name);
286
+ });
214
287
  },
215
288
  serverExtensions() {
216
289
  if (_cachedServer) return _cachedServer;
@@ -1,6 +1,8 @@
1
1
  import { defineNitroPlugin } from "nitropack/runtime/plugin";
2
2
  import { useRuntimeConfig } from "nitropack/runtime/config";
3
3
  import { useStorage } from "nitropack/runtime/storage";
4
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
5
+ import { dirname, join } from "node:path";
4
6
  import { registerServerPlugin, bootRunners, shutdownAllRunners } from "../utils/serverRunner.js";
5
7
  import { createDocCacheAPI } from "../utils/docCache.js";
6
8
  import { docTreeCacheRunner } from "../runners/doc-tree-cache.js";
@@ -16,17 +18,83 @@ function toBase64Url(bytes) {
16
18
  for (const byte of bytes) b += String.fromCharCode(byte);
17
19
  return btoa(b).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
18
20
  }
21
+ async function loadOrCreateAutoIdentity(opts) {
22
+ if (existsSync(opts.cachePath)) {
23
+ try {
24
+ const cached = JSON.parse(readFileSync(opts.cachePath, "utf-8"));
25
+ if (cached?.publicKey && cached?.privateKey && cached?.serverUrl === opts.serverUrl) {
26
+ console.log("[abracadabra-service] using cached auto-bootstrap identity:", cached.username);
27
+ return cached;
28
+ }
29
+ } catch {
30
+ }
31
+ }
32
+ let info = null;
33
+ try {
34
+ const r = await fetch(`${opts.serverUrl}/info`);
35
+ if (r.ok) info = await r.json();
36
+ } catch {
37
+ }
38
+ if (!info) {
39
+ console.warn(`[abracadabra-service] auto-bootstrap aborted: ${opts.serverUrl}/info unreachable`);
40
+ return null;
41
+ }
42
+ if (!info.registration_allowed) {
43
+ console.warn(
44
+ "[abracadabra-service] auto-bootstrap aborted: server has registration_allowed=false. Set abracadabra.service.{publicKey,privateKey} module options to use a pre-registered service account."
45
+ );
46
+ return null;
47
+ }
48
+ const sk = opts.ed.utils.randomPrivateKey();
49
+ const pk = await opts.ed.getPublicKey(sk);
50
+ const publicKey = toBase64Url(pk);
51
+ const privateKey = toBase64Url(sk);
52
+ const username = `runner-${publicKey.replace(/[^a-zA-Z0-9]/g, "").slice(0, 16).toLowerCase()}`;
53
+ console.log(`[abracadabra-service] auto-registering ${username} on ${opts.serverUrl}\u2026`);
54
+ const res = await fetch(`${opts.serverUrl}/auth/register`, {
55
+ method: "POST",
56
+ headers: { "Content-Type": "application/json" },
57
+ body: JSON.stringify({
58
+ username,
59
+ identityPublicKey: publicKey,
60
+ deviceName: "nuxt-runner",
61
+ displayName: "Nuxt Runner"
62
+ })
63
+ });
64
+ if (!res.ok && res.status !== 409) {
65
+ console.error(`[abracadabra-service] auto-register failed: ${res.status} ${await res.text()}`);
66
+ return null;
67
+ }
68
+ const identity = {
69
+ username,
70
+ publicKey,
71
+ privateKey,
72
+ serverUrl: opts.serverUrl,
73
+ createdAt: Date.now()
74
+ };
75
+ try {
76
+ mkdirSync(dirname(opts.cachePath), { recursive: true });
77
+ writeFileSync(opts.cachePath, JSON.stringify(identity, null, 2), "utf-8");
78
+ console.log(`[abracadabra-service] cached identity at ${opts.cachePath}`);
79
+ } catch (e) {
80
+ console.warn("[abracadabra-service] failed to cache identity (will re-register on next boot):", e instanceof Error ? e.message : e);
81
+ }
82
+ return identity;
83
+ }
19
84
  export default defineNitroPlugin(async (nitroApp) => {
20
85
  const config = useRuntimeConfig();
21
86
  const abraConfig = config.abracadabra;
22
87
  const storage = useStorage();
23
88
  initSlugMap(storage);
24
89
  await loadPersistedSlugMap();
25
- const pubKeyB64 = abraConfig?.servicePublicKey ?? "";
26
- const privKeyB64 = abraConfig?.servicePrivateKey ?? "";
90
+ const explicitPubKey = abraConfig?.servicePublicKey ?? "";
91
+ const explicitPrivKey = abraConfig?.servicePrivateKey ?? "";
27
92
  const rootDocIdOverride = abraConfig?.serviceRootDocId ?? "";
28
93
  const disabled = abraConfig?.serviceDisabled ?? false;
29
- if (disabled || !pubKeyB64 || !privKeyB64) {
94
+ const serverUrl = config.public?.abracadabra?.url;
95
+ if (disabled) return;
96
+ if (!serverUrl) {
97
+ console.warn("[abracadabra-service] no abracadabra.url configured \u2014 service plugin disabled");
30
98
  return;
31
99
  }
32
100
  let wsp = null;
@@ -45,10 +113,20 @@ export default defineNitroPlugin(async (nitroApp) => {
45
113
  const edEtc = ed.etc;
46
114
  edEtc.sha512Sync = (...m) => sha512(edEtc.concatBytes(...m));
47
115
  edEtc.sha512Async = (...m) => Promise.resolve(edEtc.sha512Sync(...m));
116
+ let pubKeyB64 = explicitPubKey;
117
+ let privKeyB64 = explicitPrivKey;
118
+ if (!pubKeyB64 || !privKeyB64) {
119
+ const cachePath = join(process.cwd(), ".data", "abracadabra-runner-identity.json");
120
+ const id = await loadOrCreateAutoIdentity({ serverUrl, cachePath, ed });
121
+ if (!id) {
122
+ return;
123
+ }
124
+ pubKeyB64 = id.publicKey;
125
+ privKeyB64 = id.privateKey;
126
+ }
48
127
  const privKey = fromBase64Url(privKeyB64);
49
128
  const client = new AbracadabraClient({
50
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Nuxt runtime config augmentation not resolved in Nitro
51
- url: config.public?.abracadabra?.url,
129
+ url: serverUrl,
52
130
  persistAuth: false
53
131
  });
54
132
  await client.loginWithKey(pubKeyB64, async (challenge) => {
@@ -70,7 +148,7 @@ export default defineNitroPlugin(async (nitroApp) => {
70
148
  if (!rootDocId) {
71
149
  try {
72
150
  const info = await $fetch(`${config.public?.abracadabra?.url}/info`);
73
- rootDocId = info?.index_doc_id ?? "";
151
+ rootDocId = info?.root_doc_id ?? "";
74
152
  } catch {
75
153
  }
76
154
  }