@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.
- package/dist/module.d.mts +4 -3
- package/dist/module.json +1 -1
- package/dist/module.mjs +9 -1
- package/dist/runtime/components/ADocumentTree.vue +1 -1
- package/dist/runtime/components/AEditor.d.vue.ts +26 -1
- package/dist/runtime/components/AEditor.vue +158 -4
- package/dist/runtime/components/AEditor.vue.d.ts +26 -1
- package/dist/runtime/components/AIdentityModal.d.vue.ts +46 -0
- package/dist/runtime/components/AIdentityModal.vue +157 -0
- package/dist/runtime/components/AIdentityModal.vue.d.ts +46 -0
- package/dist/runtime/components/AMnemonicLoginModal.d.vue.ts +35 -0
- package/dist/runtime/components/AMnemonicLoginModal.vue +173 -0
- package/dist/runtime/components/AMnemonicLoginModal.vue.d.ts +35 -0
- package/dist/runtime/components/ANodePanel.d.vue.ts +29 -2
- package/dist/runtime/components/ANodePanel.vue +148 -27
- package/dist/runtime/components/ANodePanel.vue.d.ts +29 -2
- package/dist/runtime/components/ANodePanelHeader.d.vue.ts +64 -0
- package/dist/runtime/components/ANodePanelHeader.vue +105 -0
- package/dist/runtime/components/ANodePanelHeader.vue.d.ts +64 -0
- package/dist/runtime/components/ANodeSettingsPanel.d.vue.ts +49 -0
- package/dist/runtime/components/ANodeSettingsPanel.vue +59 -0
- package/dist/runtime/components/ANodeSettingsPanel.vue.d.ts +49 -0
- package/dist/runtime/components/ANotificationBell.d.vue.ts +26 -0
- package/dist/runtime/components/ANotificationBell.vue +55 -0
- package/dist/runtime/components/ANotificationBell.vue.d.ts +26 -0
- package/dist/runtime/components/AOfflineSync.d.vue.ts +11 -0
- package/dist/runtime/components/AOfflineSync.vue +217 -0
- package/dist/runtime/components/AOfflineSync.vue.d.ts +11 -0
- package/dist/runtime/components/ARecoveryPhraseDisplay.d.vue.ts +26 -0
- package/dist/runtime/components/ARecoveryPhraseDisplay.vue +94 -0
- package/dist/runtime/components/ARecoveryPhraseDisplay.vue.d.ts +26 -0
- package/dist/runtime/components/AServerInfoModal.d.vue.ts +43 -0
- package/dist/runtime/components/AServerInfoModal.vue +150 -0
- package/dist/runtime/components/AServerInfoModal.vue.d.ts +43 -0
- package/dist/runtime/components/ASpaceFormModal.vue +1 -1
- package/dist/runtime/components/ASubPageList.d.vue.ts +66 -0
- package/dist/runtime/components/ASubPageList.vue +147 -0
- package/dist/runtime/components/ASubPageList.vue.d.ts +66 -0
- package/dist/runtime/components/aware/AAccordion.d.vue.ts +25 -0
- package/dist/runtime/components/aware/AAccordion.vue +107 -0
- package/dist/runtime/components/aware/AAccordion.vue.d.ts +25 -0
- package/dist/runtime/components/aware/AArea.vue +24 -11
- package/dist/runtime/components/aware/AAvatar.d.vue.ts +6 -0
- package/dist/runtime/components/aware/AAvatar.vue +33 -3
- package/dist/runtime/components/aware/AAvatar.vue.d.ts +6 -0
- package/dist/runtime/components/aware/AAvatarGroup.d.vue.ts +10 -0
- package/dist/runtime/components/aware/AAvatarGroup.vue +30 -0
- package/dist/runtime/components/aware/AAvatarGroup.vue.d.ts +10 -0
- package/dist/runtime/components/aware/AButton.d.vue.ts +4 -2
- package/dist/runtime/components/aware/AButton.vue +46 -14
- package/dist/runtime/components/aware/AButton.vue.d.ts +4 -2
- package/dist/runtime/components/aware/ACalendar.d.vue.ts +17 -0
- package/dist/runtime/components/aware/ACalendar.vue +145 -0
- package/dist/runtime/components/aware/ACalendar.vue.d.ts +17 -0
- package/dist/runtime/components/aware/ACarousel.d.vue.ts +25 -0
- package/dist/runtime/components/aware/ACarousel.vue +39 -0
- package/dist/runtime/components/aware/ACarousel.vue.d.ts +25 -0
- package/dist/runtime/components/aware/ACheckbox.d.vue.ts +11 -0
- package/dist/runtime/components/aware/ACheckbox.vue +74 -0
- package/dist/runtime/components/aware/ACheckbox.vue.d.ts +11 -0
- package/dist/runtime/components/aware/ACheckboxGroup.d.vue.ts +27 -0
- package/dist/runtime/components/aware/ACheckboxGroup.vue +79 -0
- package/dist/runtime/components/aware/ACheckboxGroup.vue.d.ts +27 -0
- package/dist/runtime/components/aware/ACollapsible.d.vue.ts +25 -0
- package/dist/runtime/components/aware/ACollapsible.vue +45 -0
- package/dist/runtime/components/aware/ACollapsible.vue.d.ts +25 -0
- package/dist/runtime/components/aware/AColorPicker.d.vue.ts +15 -0
- package/dist/runtime/components/aware/AColorPicker.vue +48 -0
- package/dist/runtime/components/aware/AColorPicker.vue.d.ts +15 -0
- package/dist/runtime/components/aware/ACommandPalette.d.vue.ts +33 -0
- package/dist/runtime/components/aware/ACommandPalette.vue +123 -0
- package/dist/runtime/components/aware/ACommandPalette.vue.d.ts +33 -0
- package/dist/runtime/components/aware/AContextMenu.d.vue.ts +25 -0
- package/dist/runtime/components/aware/AContextMenu.vue +63 -0
- package/dist/runtime/components/aware/AContextMenu.vue.d.ts +25 -0
- package/dist/runtime/components/aware/ADrawer.d.vue.ts +25 -0
- package/dist/runtime/components/aware/ADrawer.vue +57 -0
- package/dist/runtime/components/aware/ADrawer.vue.d.ts +25 -0
- package/dist/runtime/components/aware/ADropdownMenu.d.vue.ts +25 -0
- package/dist/runtime/components/aware/ADropdownMenu.vue +63 -0
- package/dist/runtime/components/aware/ADropdownMenu.vue.d.ts +25 -0
- package/dist/runtime/components/aware/AFileUpload.d.vue.ts +27 -0
- package/dist/runtime/components/aware/AFileUpload.vue +67 -0
- package/dist/runtime/components/aware/AFileUpload.vue.d.ts +27 -0
- package/dist/runtime/components/aware/AFollowBar.d.vue.ts +21 -0
- package/dist/runtime/components/aware/AFollowBar.vue +62 -0
- package/dist/runtime/components/aware/AFollowBar.vue.d.ts +21 -0
- package/dist/runtime/components/aware/AFollowScroll.d.vue.ts +7 -0
- package/dist/runtime/components/aware/AFollowScroll.vue +17 -0
- package/dist/runtime/components/aware/AFollowScroll.vue.d.ts +7 -0
- package/dist/runtime/components/aware/AFormSync.d.vue.ts +21 -0
- package/dist/runtime/components/aware/AFormSync.vue +52 -0
- package/dist/runtime/components/aware/AFormSync.vue.d.ts +21 -0
- package/dist/runtime/components/aware/AGlobalFocusLayer.d.vue.ts +3 -0
- package/dist/runtime/components/aware/AGlobalFocusLayer.vue +90 -0
- package/dist/runtime/components/aware/AGlobalFocusLayer.vue.d.ts +3 -0
- package/dist/runtime/components/aware/AHoverItem.d.vue.ts +27 -0
- package/dist/runtime/components/aware/AHoverItem.vue +124 -0
- package/dist/runtime/components/aware/AHoverItem.vue.d.ts +27 -0
- package/dist/runtime/components/aware/AInput.d.vue.ts +12 -2
- package/dist/runtime/components/aware/AInput.vue +72 -19
- package/dist/runtime/components/aware/AInput.vue.d.ts +12 -2
- package/dist/runtime/components/aware/AInputMenu.d.vue.ts +17 -0
- package/dist/runtime/components/aware/AInputMenu.vue +138 -0
- package/dist/runtime/components/aware/AInputMenu.vue.d.ts +17 -0
- package/dist/runtime/components/aware/AInputNumber.d.vue.ts +15 -0
- package/dist/runtime/components/aware/AInputNumber.vue +67 -0
- package/dist/runtime/components/aware/AInputNumber.vue.d.ts +15 -0
- package/dist/runtime/components/aware/AInputTags.d.vue.ts +15 -0
- package/dist/runtime/components/aware/AInputTags.vue +67 -0
- package/dist/runtime/components/aware/AInputTags.vue.d.ts +15 -0
- package/dist/runtime/components/aware/AKeyHint.d.vue.ts +3 -0
- package/dist/runtime/components/aware/AKeyHint.vue +23 -0
- package/dist/runtime/components/aware/AKeyHint.vue.d.ts +3 -0
- package/dist/runtime/components/aware/AMedia.d.vue.ts +19 -0
- package/dist/runtime/components/aware/AMedia.vue +85 -0
- package/dist/runtime/components/aware/AMedia.vue.d.ts +19 -0
- package/dist/runtime/components/aware/AModal.d.vue.ts +33 -0
- package/dist/runtime/components/aware/AModal.vue +110 -0
- package/dist/runtime/components/aware/AModal.vue.d.ts +33 -0
- package/dist/runtime/components/aware/ANavigationMenu.d.vue.ts +25 -0
- package/dist/runtime/components/aware/ANavigationMenu.vue +82 -0
- package/dist/runtime/components/aware/ANavigationMenu.vue.d.ts +25 -0
- package/dist/runtime/components/aware/APagination.d.vue.ts +13 -0
- package/dist/runtime/components/aware/APagination.vue +53 -0
- package/dist/runtime/components/aware/APagination.vue.d.ts +13 -0
- package/dist/runtime/components/aware/APeerCaretLayer.d.vue.ts +10 -0
- package/dist/runtime/components/aware/APeerCaretLayer.vue +133 -0
- package/dist/runtime/components/aware/APeerCaretLayer.vue.d.ts +10 -0
- package/dist/runtime/components/aware/APinInput.d.vue.ts +15 -0
- package/dist/runtime/components/aware/APinInput.vue +48 -0
- package/dist/runtime/components/aware/APinInput.vue.d.ts +15 -0
- package/dist/runtime/components/aware/APopover.d.vue.ts +25 -0
- package/dist/runtime/components/aware/APopover.vue +57 -0
- package/dist/runtime/components/aware/APopover.vue.d.ts +25 -0
- package/dist/runtime/components/aware/APresenceBlobs.d.vue.ts +3 -0
- package/dist/runtime/components/aware/APresenceBlobs.vue +69 -0
- package/dist/runtime/components/aware/APresenceBlobs.vue.d.ts +3 -0
- package/dist/runtime/components/aware/APresenceCursors.d.vue.ts +20 -0
- package/dist/runtime/components/aware/APresenceCursors.vue +47 -0
- package/dist/runtime/components/aware/APresenceCursors.vue.d.ts +20 -0
- package/dist/runtime/components/aware/ARadioGroup.d.vue.ts +27 -0
- package/dist/runtime/components/aware/ARadioGroup.vue +86 -0
- package/dist/runtime/components/aware/ARadioGroup.vue.d.ts +27 -0
- package/dist/runtime/components/aware/AScroll.d.vue.ts +25 -0
- package/dist/runtime/components/aware/AScroll.vue +87 -0
- package/dist/runtime/components/aware/AScroll.vue.d.ts +25 -0
- package/dist/runtime/components/aware/ASelect.d.vue.ts +12 -2
- package/dist/runtime/components/aware/ASelect.vue +146 -22
- package/dist/runtime/components/aware/ASelect.vue.d.ts +12 -2
- package/dist/runtime/components/aware/ASelectMenu.d.vue.ts +17 -0
- package/dist/runtime/components/aware/ASelectMenu.vue +139 -0
- package/dist/runtime/components/aware/ASelectMenu.vue.d.ts +17 -0
- package/dist/runtime/components/aware/ASlideover.d.vue.ts +33 -0
- package/dist/runtime/components/aware/ASlideover.vue +110 -0
- package/dist/runtime/components/aware/ASlideover.vue.d.ts +33 -0
- package/dist/runtime/components/aware/ASlider.d.vue.ts +19 -0
- package/dist/runtime/components/aware/ASlider.vue +77 -0
- package/dist/runtime/components/aware/ASlider.vue.d.ts +19 -0
- package/dist/runtime/components/aware/AStepper.d.vue.ts +25 -0
- package/dist/runtime/components/aware/AStepper.vue +82 -0
- package/dist/runtime/components/aware/AStepper.vue.d.ts +25 -0
- package/dist/runtime/components/aware/ASwitch.d.vue.ts +11 -0
- package/dist/runtime/components/aware/ASwitch.vue +75 -0
- package/dist/runtime/components/aware/ASwitch.vue.d.ts +11 -0
- package/dist/runtime/components/aware/ATable.d.vue.ts +23 -0
- package/dist/runtime/components/aware/ATable.vue +97 -0
- package/dist/runtime/components/aware/ATable.vue.d.ts +23 -0
- package/dist/runtime/components/aware/ATabs.d.vue.ts +27 -0
- package/dist/runtime/components/aware/ATabs.vue +128 -0
- package/dist/runtime/components/aware/ATabs.vue.d.ts +27 -0
- package/dist/runtime/components/aware/ATextarea.d.vue.ts +12 -2
- package/dist/runtime/components/aware/ATextarea.vue +72 -19
- package/dist/runtime/components/aware/ATextarea.vue.d.ts +12 -2
- package/dist/runtime/components/aware/AToggleGroup.d.vue.ts +27 -0
- package/dist/runtime/components/aware/AToggleGroup.vue +79 -0
- package/dist/runtime/components/aware/AToggleGroup.vue.d.ts +27 -0
- package/dist/runtime/components/aware/ATree.d.vue.ts +27 -0
- package/dist/runtime/components/aware/ATree.vue +111 -0
- package/dist/runtime/components/aware/ATree.vue.d.ts +27 -0
- package/dist/runtime/components/chat/AChatPanel.d.vue.ts +6 -6
- package/dist/runtime/components/chat/AChatPanel.vue.d.ts +6 -6
- package/dist/runtime/components/chat/ANodeChatPanel.d.vue.ts +42 -0
- package/dist/runtime/components/chat/ANodeChatPanel.vue +53 -0
- package/dist/runtime/components/chat/ANodeChatPanel.vue.d.ts +42 -0
- package/dist/runtime/components/docs/ADocsSearch.d.vue.ts +2 -2
- package/dist/runtime/components/docs/ADocsSearch.vue.d.ts +2 -2
- package/dist/runtime/components/docs/ADocsSearchButton.d.vue.ts +3 -3
- package/dist/runtime/components/docs/ADocsSearchButton.vue.d.ts +3 -3
- package/dist/runtime/components/editor/AEditorRedoButton.d.vue.ts +26 -0
- package/dist/runtime/components/editor/AEditorRedoButton.vue +38 -0
- package/dist/runtime/components/editor/AEditorRedoButton.vue.d.ts +26 -0
- package/dist/runtime/components/editor/AEditorUndoButton.d.vue.ts +26 -0
- package/dist/runtime/components/editor/AEditorUndoButton.vue +38 -0
- package/dist/runtime/components/editor/AEditorUndoButton.vue.d.ts +26 -0
- package/dist/runtime/components/editor/AIconPickerPopover.d.vue.ts +24 -0
- package/dist/runtime/components/editor/AIconPickerPopover.vue +113 -0
- package/dist/runtime/components/editor/AIconPickerPopover.vue.d.ts +24 -0
- package/dist/runtime/components/editor/ANodeInlineLabel.d.vue.ts +24 -0
- package/dist/runtime/components/editor/ANodeInlineLabel.vue +101 -0
- package/dist/runtime/components/editor/ANodeInlineLabel.vue.d.ts +24 -0
- package/dist/runtime/components/renderers/ADocLoadError.d.vue.ts +3 -0
- package/dist/runtime/components/renderers/ADocLoadError.vue +11 -0
- package/dist/runtime/components/renderers/ADocLoadError.vue.d.ts +3 -0
- package/dist/runtime/components/renderers/ADocLoadingSkeleton.d.vue.ts +3 -0
- package/dist/runtime/components/renderers/ADocLoadingSkeleton.vue +5 -0
- package/dist/runtime/components/renderers/ADocLoadingSkeleton.vue.d.ts +3 -0
- package/dist/runtime/components/renderers/AOverviewRenderer.d.vue.ts +22 -0
- package/dist/runtime/components/renderers/AOverviewRenderer.vue +1041 -0
- package/dist/runtime/components/renderers/AOverviewRenderer.vue.d.ts +22 -0
- package/dist/runtime/components/renderers/AProseRenderer.d.vue.ts +23 -0
- package/dist/runtime/components/renderers/AProseRenderer.vue +31 -0
- package/dist/runtime/components/renderers/AProseRenderer.vue.d.ts +23 -0
- package/dist/runtime/components/renderers/ASheetsRenderer.client.d.vue.ts +19 -0
- package/dist/runtime/components/renderers/ASheetsRenderer.client.vue +865 -0
- package/dist/runtime/components/renderers/ASheetsRenderer.client.vue.d.ts +19 -0
- package/dist/runtime/components/renderers/calendar/ACalendarDayCell.d.vue.ts +14 -0
- package/dist/runtime/components/renderers/calendar/ACalendarDayCell.vue +45 -15
- package/dist/runtime/components/renderers/calendar/ACalendarDayCell.vue.d.ts +14 -0
- package/dist/runtime/components/renderers/calendar/ACalendarDayView.d.vue.ts +15 -0
- package/dist/runtime/components/renderers/calendar/ACalendarDayView.vue +93 -20
- package/dist/runtime/components/renderers/calendar/ACalendarDayView.vue.d.ts +15 -0
- package/dist/runtime/components/renderers/calendar/ACalendarEventChip.d.vue.ts +9 -0
- package/dist/runtime/components/renderers/calendar/ACalendarEventChip.vue +31 -2
- package/dist/runtime/components/renderers/calendar/ACalendarEventChip.vue.d.ts +9 -0
- package/dist/runtime/components/renderers/calendar/ACalendarWeekView.d.vue.ts +15 -0
- package/dist/runtime/components/renderers/calendar/ACalendarWeekView.vue +94 -21
- package/dist/runtime/components/renderers/calendar/ACalendarWeekView.vue.d.ts +15 -0
- package/dist/runtime/components/renderers/sheets/ASheetsCell.d.vue.ts +45 -0
- package/dist/runtime/components/renderers/sheets/ASheetsCell.vue +123 -0
- package/dist/runtime/components/renderers/sheets/ASheetsCell.vue.d.ts +45 -0
- package/dist/runtime/components/renderers/sheets/ASheetsGrid.d.vue.ts +111 -0
- package/dist/runtime/components/renderers/sheets/ASheetsGrid.vue +737 -0
- package/dist/runtime/components/renderers/sheets/ASheetsGrid.vue.d.ts +111 -0
- package/dist/runtime/components/renderers/sheets/ASheetsMobileActionBar.d.vue.ts +26 -0
- package/dist/runtime/components/renderers/sheets/ASheetsMobileActionBar.vue +100 -0
- package/dist/runtime/components/renderers/sheets/ASheetsMobileActionBar.vue.d.ts +26 -0
- package/dist/runtime/components/renderers/sheets/ASheetsToolbar.d.vue.ts +48 -0
- package/dist/runtime/components/renderers/sheets/ASheetsToolbar.vue +243 -0
- package/dist/runtime/components/renderers/sheets/ASheetsToolbar.vue.d.ts +48 -0
- package/dist/runtime/components/renderers/table/cells/ATableCellColor.d.vue.ts +1 -0
- package/dist/runtime/components/renderers/table/cells/ATableCellColor.vue +13 -32
- package/dist/runtime/components/renderers/table/cells/ATableCellColor.vue.d.ts +1 -0
- package/dist/runtime/components/renderers/timeline/ATimelineBar.d.vue.ts +6 -0
- package/dist/runtime/components/renderers/timeline/ATimelineBar.vue +34 -4
- package/dist/runtime/components/renderers/timeline/ATimelineBar.vue.d.ts +6 -0
- package/dist/runtime/components/renderers/timeline/ATimelineBarArea.d.vue.ts +16 -0
- package/dist/runtime/components/renderers/timeline/ATimelineBarArea.vue +14 -3
- package/dist/runtime/components/renderers/timeline/ATimelineBarArea.vue.d.ts +16 -0
- package/dist/runtime/components/renderers/timeline/ATimelineLabelPanel.d.vue.ts +13 -1
- package/dist/runtime/components/renderers/timeline/ATimelineLabelPanel.vue +114 -47
- package/dist/runtime/components/renderers/timeline/ATimelineLabelPanel.vue.d.ts +13 -1
- package/dist/runtime/components/renderers/timeline/ATimelineMilestone.d.vue.ts +4 -0
- package/dist/runtime/components/renderers/timeline/ATimelineMilestone.vue +21 -4
- package/dist/runtime/components/renderers/timeline/ATimelineMilestone.vue.d.ts +4 -0
- package/dist/runtime/components/renderers/timeline/ATimelineToolbar.d.vue.ts +2 -2
- package/dist/runtime/components/renderers/timeline/ATimelineToolbar.vue.d.ts +2 -2
- package/dist/runtime/components/settings/ASettingsSpacesPanel.vue +7 -25
- package/dist/runtime/components/shell/ADocPanelSettings.d.vue.ts +3 -3
- package/dist/runtime/components/shell/ADocPanelSettings.vue.d.ts +3 -3
- package/dist/runtime/components/shell/ASyncStatus.d.vue.ts +1 -1
- package/dist/runtime/components/shell/ASyncStatus.vue.d.ts +1 -1
- package/dist/runtime/components/shell/AUserMenu.d.vue.ts +2 -2
- package/dist/runtime/components/shell/AUserMenu.vue.d.ts +2 -2
- package/dist/runtime/components/shell/AWelcomeScreen.d.vue.ts +1 -1
- package/dist/runtime/components/shell/AWelcomeScreen.vue.d.ts +1 -1
- package/dist/runtime/composables/useAACaret.d.ts +29 -0
- package/dist/runtime/composables/useAACaret.js +64 -0
- package/dist/runtime/composables/useAAEphemeral.d.ts +32 -0
- package/dist/runtime/composables/useAAEphemeral.js +33 -0
- package/dist/runtime/composables/useAAField.d.ts +10 -2
- package/dist/runtime/composables/useAAField.js +31 -2
- package/dist/runtime/composables/useAAFieldValue.d.ts +26 -0
- package/dist/runtime/composables/useAAFieldValue.js +32 -0
- package/dist/runtime/composables/useAAFocus.d.ts +68 -0
- package/dist/runtime/composables/useAAFocus.js +174 -0
- package/dist/runtime/composables/useAAFollowAnchor.d.ts +25 -0
- package/dist/runtime/composables/useAAFollowAnchor.js +69 -0
- package/dist/runtime/composables/useAAFollowPeer.d.ts +29 -0
- package/dist/runtime/composables/useAAFollowPeer.js +75 -0
- package/dist/runtime/composables/useAAKey.d.ts +22 -0
- package/dist/runtime/composables/useAAKey.js +24 -0
- package/dist/runtime/composables/useAAPointer.d.ts +30 -0
- package/dist/runtime/composables/useAAPointer.js +53 -0
- package/dist/runtime/composables/useAAUIState.d.ts +29 -0
- package/dist/runtime/composables/useAAUIState.js +28 -0
- package/dist/runtime/composables/useAAViewport.d.ts +22 -0
- package/dist/runtime/composables/useAAViewport.js +50 -0
- package/dist/runtime/composables/useAbraAdmin.d.ts +54 -0
- package/dist/runtime/composables/useAbraAdmin.js +115 -0
- package/dist/runtime/composables/useAbracadabraAuth.d.ts +8 -0
- package/dist/runtime/composables/useAbracadabraAuth.js +8 -0
- package/dist/runtime/composables/useAggregatedPresence.d.ts +23 -0
- package/dist/runtime/composables/useAggregatedPresence.js +140 -0
- package/dist/runtime/composables/useChat.d.ts +16 -2
- package/dist/runtime/composables/useChat.js +257 -66
- package/dist/runtime/composables/useChatUsers.d.ts +2 -0
- package/dist/runtime/composables/useChatUsers.js +2 -1
- package/dist/runtime/composables/useDocLookup.d.ts +4 -0
- package/dist/runtime/composables/useDocLookup.js +25 -0
- package/dist/runtime/composables/useDocSnapshots.d.ts +79 -0
- package/dist/runtime/composables/useDocSnapshots.js +234 -0
- package/dist/runtime/composables/useEditorDragHandle.d.ts +7 -0
- package/dist/runtime/composables/useEditorDragHandle.js +19 -1
- package/dist/runtime/composables/useEditorSuggestions.js +27 -1
- package/dist/runtime/composables/useEditorToolbar.js +9 -1
- package/dist/runtime/composables/useEmailVerification.d.ts +33 -0
- package/dist/runtime/composables/useEmailVerification.js +58 -0
- package/dist/runtime/composables/useIdentityDoc.js +0 -3
- package/dist/runtime/composables/useItemPresence.d.ts +47 -0
- package/dist/runtime/composables/useItemPresence.js +73 -0
- package/dist/runtime/composables/useResizableWidth.d.ts +24 -0
- package/dist/runtime/composables/useResizableWidth.js +87 -0
- package/dist/runtime/composables/useServerInfo.d.ts +17 -2
- package/dist/runtime/composables/useServerInfo.js +30 -6
- package/dist/runtime/composables/useServerSearch.d.ts +36 -0
- package/dist/runtime/composables/useServerSearch.js +91 -0
- package/dist/runtime/composables/useServerTrash.d.ts +67 -0
- package/dist/runtime/composables/useServerTrash.js +128 -0
- package/dist/runtime/composables/useSheetsClipboard.d.ts +42 -0
- package/dist/runtime/composables/useSheetsClipboard.js +109 -0
- package/dist/runtime/composables/useSheetsFormulas.d.ts +38 -0
- package/dist/runtime/composables/useSheetsFormulas.js +725 -0
- package/dist/runtime/composables/useSheetsSelection.d.ts +68 -0
- package/dist/runtime/composables/useSheetsSelection.js +390 -0
- package/dist/runtime/composables/useSheetsView.d.ts +31 -0
- package/dist/runtime/composables/useSheetsView.js +77 -0
- package/dist/runtime/composables/useSpaceConnections.d.ts +43 -0
- package/dist/runtime/composables/useSpaceConnections.js +72 -0
- package/dist/runtime/composables/useSpaces.d.ts +1 -3
- package/dist/runtime/composables/useSpaces.js +2 -5
- package/dist/runtime/composables/useTiptapHistory.d.ts +22 -0
- package/dist/runtime/composables/useTiptapHistory.js +12 -0
- package/dist/runtime/composables/useTreeExpansion.d.ts +28 -0
- package/dist/runtime/composables/useTreeExpansion.js +94 -0
- package/dist/runtime/composables/useYDoc.js +12 -1
- package/dist/runtime/extensions/button.d.ts +3 -0
- package/dist/runtime/extensions/button.js +62 -0
- package/dist/runtime/extensions/color-swatch.d.ts +2 -0
- package/dist/runtime/extensions/color-swatch.js +34 -0
- package/dist/runtime/extensions/diff.d.ts +2 -0
- package/dist/runtime/extensions/diff.js +40 -0
- package/dist/runtime/extensions/divider.d.ts +2 -0
- package/dist/runtime/extensions/divider.js +33 -0
- package/dist/runtime/extensions/embed.d.ts +2 -0
- package/dist/runtime/extensions/embed.js +40 -0
- package/dist/runtime/extensions/figure.d.ts +2 -0
- package/dist/runtime/extensions/figure.js +49 -0
- package/dist/runtime/extensions/math.d.ts +15 -0
- package/dist/runtime/extensions/math.js +66 -0
- package/dist/runtime/extensions/progress.d.ts +2 -0
- package/dist/runtime/extensions/progress.js +43 -0
- package/dist/runtime/extensions/quote.d.ts +2 -0
- package/dist/runtime/extensions/quote.js +39 -0
- package/dist/runtime/extensions/spoiler.d.ts +2 -0
- package/dist/runtime/extensions/spoiler.js +36 -0
- package/dist/runtime/extensions/stat.d.ts +3 -0
- package/dist/runtime/extensions/stat.js +58 -0
- package/dist/runtime/extensions/svg-embed.d.ts +23 -0
- package/dist/runtime/extensions/svg-embed.js +33 -0
- package/dist/runtime/extensions/video.d.ts +2 -0
- package/dist/runtime/extensions/video.js +40 -0
- package/dist/runtime/extensions/views/ButtonGroupView.d.vue.ts +4 -0
- package/dist/runtime/extensions/views/ButtonGroupView.vue +25 -0
- package/dist/runtime/extensions/views/ButtonGroupView.vue.d.ts +4 -0
- package/dist/runtime/extensions/views/ButtonView.d.vue.ts +4 -0
- package/dist/runtime/extensions/views/ButtonView.vue +171 -0
- package/dist/runtime/extensions/views/ButtonView.vue.d.ts +4 -0
- package/dist/runtime/extensions/views/ColorSwatchView.d.vue.ts +4 -0
- package/dist/runtime/extensions/views/ColorSwatchView.vue +134 -0
- package/dist/runtime/extensions/views/ColorSwatchView.vue.d.ts +4 -0
- package/dist/runtime/extensions/views/DiffView.d.vue.ts +4 -0
- package/dist/runtime/extensions/views/DiffView.vue +163 -0
- package/dist/runtime/extensions/views/DiffView.vue.d.ts +4 -0
- package/dist/runtime/extensions/views/DividerView.d.vue.ts +4 -0
- package/dist/runtime/extensions/views/DividerView.vue +40 -0
- package/dist/runtime/extensions/views/DividerView.vue.d.ts +4 -0
- package/dist/runtime/extensions/views/EmbedView.d.vue.ts +4 -0
- package/dist/runtime/extensions/views/EmbedView.vue +166 -0
- package/dist/runtime/extensions/views/EmbedView.vue.d.ts +4 -0
- package/dist/runtime/extensions/views/FigureView.d.vue.ts +4 -0
- package/dist/runtime/extensions/views/FigureView.vue +122 -0
- package/dist/runtime/extensions/views/FigureView.vue.d.ts +4 -0
- package/dist/runtime/extensions/views/FileNodeView.vue +21 -24
- package/dist/runtime/extensions/views/MathBlockView.d.vue.ts +4 -0
- package/dist/runtime/extensions/views/MathBlockView.vue +151 -0
- package/dist/runtime/extensions/views/MathBlockView.vue.d.ts +4 -0
- package/dist/runtime/extensions/views/MathInlineView.d.vue.ts +4 -0
- package/dist/runtime/extensions/views/MathInlineView.vue +149 -0
- package/dist/runtime/extensions/views/MathInlineView.vue.d.ts +4 -0
- package/dist/runtime/extensions/views/MetaFieldView.vue +1129 -550
- package/dist/runtime/extensions/views/ProgressView.d.vue.ts +4 -0
- package/dist/runtime/extensions/views/ProgressView.vue +156 -0
- package/dist/runtime/extensions/views/ProgressView.vue.d.ts +4 -0
- package/dist/runtime/extensions/views/QuoteView.d.vue.ts +4 -0
- package/dist/runtime/extensions/views/QuoteView.vue +128 -0
- package/dist/runtime/extensions/views/QuoteView.vue.d.ts +4 -0
- package/dist/runtime/extensions/views/SpoilerView.d.vue.ts +4 -0
- package/dist/runtime/extensions/views/SpoilerView.vue +62 -0
- package/dist/runtime/extensions/views/SpoilerView.vue.d.ts +4 -0
- package/dist/runtime/extensions/views/StatGroupView.d.vue.ts +4 -0
- package/dist/runtime/extensions/views/StatGroupView.vue +25 -0
- package/dist/runtime/extensions/views/StatGroupView.vue.d.ts +4 -0
- package/dist/runtime/extensions/views/StatView.d.vue.ts +4 -0
- package/dist/runtime/extensions/views/StatView.vue +89 -0
- package/dist/runtime/extensions/views/StatView.vue.d.ts +4 -0
- package/dist/runtime/extensions/views/SvgEmbedView.d.vue.ts +4 -0
- package/dist/runtime/extensions/views/SvgEmbedView.vue +120 -0
- package/dist/runtime/extensions/views/SvgEmbedView.vue.d.ts +4 -0
- package/dist/runtime/extensions/views/VideoView.d.vue.ts +4 -0
- package/dist/runtime/extensions/views/VideoView.vue +190 -0
- package/dist/runtime/extensions/views/VideoView.vue.d.ts +4 -0
- package/dist/runtime/locale.d.ts +133 -0
- package/dist/runtime/locale.js +121 -2
- package/dist/runtime/plugin-abracadabra.client.js +233 -36
- package/dist/runtime/plugin-abracadabra.server.js +0 -1
- package/dist/runtime/plugins/core.plugin.js +77 -4
- package/dist/runtime/server/plugins/abracadabra-service.js +84 -6
- package/dist/runtime/server/utils/rpcHandler.d.ts +74 -0
- package/dist/runtime/server/utils/rpcHandler.js +74 -0
- package/dist/runtime/server/utils/spaceManager.js +10 -9
- package/dist/runtime/types.d.ts +63 -10
- package/dist/runtime/utils/awareRingStyle.d.ts +22 -0
- package/dist/runtime/utils/awareRingStyle.js +16 -0
- package/dist/runtime/utils/caretCoordinates.d.ts +41 -0
- package/dist/runtime/utils/caretCoordinates.js +126 -0
- package/dist/runtime/utils/content.d.ts +1 -1
- package/dist/runtime/utils/docTypes.js +44 -13
- package/dist/runtime/utils/domPath.d.ts +42 -0
- package/dist/runtime/utils/domPath.js +89 -0
- package/dist/runtime/utils/loadKatex.d.ts +1 -0
- package/dist/runtime/utils/loadKatex.js +29 -0
- package/dist/runtime/utils/lucideIcons.d.ts +16 -0
- package/dist/runtime/utils/lucideIcons.js +451 -0
- package/dist/runtime/utils/sanitizeSvg.d.ts +19 -0
- package/dist/runtime/utils/sanitizeSvg.js +87 -0
- package/dist/runtime/utils/time.d.ts +15 -0
- package/dist/runtime/utils/time.js +5 -0
- package/dist/types.d.mts +4 -0
- package/package.json +26 -16
|
@@ -136,16 +136,26 @@ async function fetchServerInfo(baseUrl) {
|
|
|
136
136
|
}
|
|
137
137
|
return {};
|
|
138
138
|
}
|
|
139
|
-
|
|
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
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
const
|
|
147
|
-
const
|
|
148
|
-
return { spaces
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
346
|
+
const doc2 = await client.value.createSpace(opts);
|
|
328
347
|
await refreshSpaces();
|
|
329
|
-
return
|
|
348
|
+
return spaceMetaFromDoc(doc2);
|
|
330
349
|
}
|
|
331
350
|
async function updateSpace(id, opts) {
|
|
332
351
|
if (!client.value) throw new Error("Not connected");
|
|
333
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
842
|
+
const [info, spaceDocs] = await Promise.all([
|
|
714
843
|
fetchServerInfo(serverUrl),
|
|
715
|
-
|
|
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?.
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
@@ -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
|
-
|
|
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
|
|
26
|
-
const
|
|
90
|
+
const explicitPubKey = abraConfig?.servicePublicKey ?? "";
|
|
91
|
+
const explicitPrivKey = abraConfig?.servicePrivateKey ?? "";
|
|
27
92
|
const rootDocIdOverride = abraConfig?.serviceRootDocId ?? "";
|
|
28
93
|
const disabled = abraConfig?.serviceDisabled ?? false;
|
|
29
|
-
|
|
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
|
-
|
|
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?.
|
|
151
|
+
rootDocId = info?.root_doc_id ?? "";
|
|
74
152
|
} catch {
|
|
75
153
|
}
|
|
76
154
|
}
|