@abraca/nuxt 1.8.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -2
- package/dist/module.d.mts +4 -3
- package/dist/module.json +1 -1
- package/dist/module.mjs +50 -4
- package/dist/runtime/components/ADocumentTree.vue +1 -1
- package/dist/runtime/components/AEditor.d.vue.ts +26 -1
- package/dist/runtime/components/AEditor.vue +153 -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/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/ADocsNavigation.d.vue.ts +155 -0
- package/dist/runtime/components/docs/ADocsNavigation.vue +154 -0
- package/dist/runtime/components/docs/ADocsNavigation.vue.d.ts +155 -0
- package/dist/runtime/components/docs/ADocsSearch.d.vue.ts +249 -0
- package/dist/runtime/components/docs/ADocsSearch.vue +187 -0
- package/dist/runtime/components/docs/ADocsSearch.vue.d.ts +249 -0
- package/dist/runtime/components/docs/ADocsSearchButton.d.vue.ts +253 -0
- package/dist/runtime/components/docs/ADocsSearchButton.vue +99 -0
- package/dist/runtime/components/docs/ADocsSearchButton.vue.d.ts +253 -0
- package/dist/runtime/components/docs/ADocsSurround.d.vue.ts +56 -0
- package/dist/runtime/components/docs/ADocsSurround.vue +68 -0
- package/dist/runtime/components/docs/ADocsSurround.vue.d.ts +56 -0
- package/dist/runtime/components/docs/ADocsToc.d.vue.ts +117 -0
- package/dist/runtime/components/docs/ADocsToc.vue +194 -0
- package/dist/runtime/components/docs/ADocsToc.vue.d.ts +117 -0
- package/dist/runtime/components/editor/ADocLinkPopover.vue +1 -5
- 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/AMediaRenderer.vue +1 -1
- 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/ACalendarToolbar.d.vue.ts +4 -4
- package/dist/runtime/components/renderers/calendar/ACalendarToolbar.vue.d.ts +4 -4
- 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/media/MediaTransportBar.d.vue.ts +2 -2
- package/dist/runtime/components/renderers/media/MediaTransportBar.vue.d.ts +2 -2
- 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 +34 -4
- package/dist/runtime/components/shell/ADocPanelSettings.vue +289 -2
- package/dist/runtime/components/shell/ADocPanelSettings.vue.d.ts +34 -4
- 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/useDocsSearch.d.ts +24 -0
- package/dist/runtime/composables/useDocsSearch.js +34 -0
- package/dist/runtime/composables/useEditorDragHandle.d.ts +7 -0
- package/dist/runtime/composables/useEditorDragHandle.js +19 -1
- package/dist/runtime/composables/useEditorSuggestions.js +26 -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/doc-embed.js +2 -1
- package/dist/runtime/extensions/doc-link-drop.js +4 -4
- package/dist/runtime/extensions/doc-link.d.ts +12 -0
- package/dist/runtime/extensions/doc-link.js +60 -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/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/DocEmbedView.vue +18 -3
- package/dist/runtime/extensions/views/DocLinkView.d.vue.ts +4 -0
- package/dist/runtime/extensions/views/DocLinkView.vue +71 -0
- package/dist/runtime/extensions/views/DocLinkView.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/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 +251 -38
- package/dist/runtime/plugin-abracadabra.server.js +0 -1
- package/dist/runtime/plugins/core.plugin.js +76 -4
- package/dist/runtime/server/plugins/abracadabra-service.js +4 -2
- 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/theme/content/_shared.d.ts +6 -0
- package/dist/runtime/theme/content/_shared.js +6 -0
- package/dist/runtime/theme/content/content-navigation.d.ts +120 -0
- package/dist/runtime/theme/content/content-navigation.js +155 -0
- package/dist/runtime/theme/content/content-search-button.d.ts +16 -0
- package/dist/runtime/theme/content/content-search-button.js +15 -0
- package/dist/runtime/theme/content/content-search.d.ts +24 -0
- package/dist/runtime/theme/content/content-search.js +23 -0
- package/dist/runtime/theme/content/content-surround.d.ts +22 -0
- package/dist/runtime/theme/content/content-surround.js +23 -0
- package/dist/runtime/theme/content/content-toc.d.ts +84 -0
- package/dist/runtime/theme/content/content-toc.js +94 -0
- package/dist/runtime/theme/content/index.d.ts +5 -0
- package/dist/runtime/theme/content/index.js +5 -0
- 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 +19 -0
- package/dist/runtime/utils/content.js +23 -0
- package/dist/runtime/utils/docReferenceEdges.js +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/time.d.ts +15 -0
- package/dist/runtime/utils/time.js +5 -0
- package/dist/types.d.mts +4 -0
- package/package.json +38 -20
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type Ref } from 'vue';
|
|
2
|
+
import type { AAFocusPayload } from './useAAFocus.js';
|
|
3
|
+
/**
|
|
4
|
+
* Smart anchor-based scroll-follow.
|
|
5
|
+
*
|
|
6
|
+
* Given a leader's `clientId` (or `publicKey`), this composable:
|
|
7
|
+
* 1. Watches the leader's `peer:aa:focus` payload
|
|
8
|
+
* 2. If the leader is on a different route, navigates the local browser
|
|
9
|
+
* to match (via vue-router push)
|
|
10
|
+
* 3. Once on the same route, finds the leader's anchor element in the
|
|
11
|
+
* LOCAL DOM and scrolls it to the same vertical position the leader
|
|
12
|
+
* had it at — i.e. preserves the leader's `anchorRatio` rather than
|
|
13
|
+
* copying raw scroll px. This keeps the experience consistent across
|
|
14
|
+
* different viewport heights and zoom levels.
|
|
15
|
+
*
|
|
16
|
+
* Selection-kind payloads use the selection's start element as the anchor
|
|
17
|
+
* (the user is presumably reading where they're highlighting).
|
|
18
|
+
*
|
|
19
|
+
* Pass `null` (or `undefined`) for `leaderId` to disable the follow.
|
|
20
|
+
*/
|
|
21
|
+
export declare function useAAFollowAnchor(leaderId: Ref<number | null | undefined>): {
|
|
22
|
+
leader: import("vue").ComputedRef<import("../types.js").AwarenessPeer | null>;
|
|
23
|
+
leaderPayload: import("vue").ComputedRef<AAFocusPayload | null>;
|
|
24
|
+
scrollToLeader: () => void;
|
|
25
|
+
};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { computed, watch } from "vue";
|
|
2
|
+
import { useRoute, useRouter } from "#imports";
|
|
3
|
+
import { useAAEphemeral } from "./useAAEphemeral.js";
|
|
4
|
+
import { useAwarenessPeers } from "./useAwarenessPeers.js";
|
|
5
|
+
import { elementFromPath } from "../utils/domPath.js";
|
|
6
|
+
export function useAAFollowAnchor(leaderId) {
|
|
7
|
+
const { peers } = useAAEphemeral("aa:focus");
|
|
8
|
+
const { peers: allPeers } = useAwarenessPeers();
|
|
9
|
+
const route = useRoute();
|
|
10
|
+
const router = useRouter();
|
|
11
|
+
let scrollRaf = 0;
|
|
12
|
+
let lastTargetKey = "";
|
|
13
|
+
const leaderPayload = computed(() => {
|
|
14
|
+
const id = leaderId.value;
|
|
15
|
+
if (id == null) return null;
|
|
16
|
+
const found = peers.value.find((p) => p.clientId === id);
|
|
17
|
+
return found?.value ?? null;
|
|
18
|
+
});
|
|
19
|
+
watch(leaderPayload, (payload) => {
|
|
20
|
+
if (!payload) return;
|
|
21
|
+
if (payload.route && payload.route !== route.path) {
|
|
22
|
+
router.push(payload.route).catch(() => {
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}, { immediate: true });
|
|
26
|
+
function scrollToLeader() {
|
|
27
|
+
cancelAnimationFrame(scrollRaf);
|
|
28
|
+
scrollRaf = requestAnimationFrame(() => {
|
|
29
|
+
const payload = leaderPayload.value;
|
|
30
|
+
if (!payload) return;
|
|
31
|
+
if (payload.route !== route.path) return;
|
|
32
|
+
const instructions = [];
|
|
33
|
+
if (payload.scrollers && payload.scrollers.length) {
|
|
34
|
+
for (const s of payload.scrollers) {
|
|
35
|
+
instructions.push({ container: s.containerPath, element: s.elementPath, ratio: s.ratio });
|
|
36
|
+
}
|
|
37
|
+
} else if (payload.kind === "anchor" && payload.anchor) {
|
|
38
|
+
instructions.push({ element: payload.anchor.elementPath, ratio: payload.anchorRatio ?? 0.05 });
|
|
39
|
+
} else if (payload.kind === "selection" && payload.start) {
|
|
40
|
+
instructions.push({ element: payload.start.elementPath, ratio: 0.2 });
|
|
41
|
+
}
|
|
42
|
+
const fingerprint = [];
|
|
43
|
+
for (const ins of instructions) {
|
|
44
|
+
const target = elementFromPath(ins.element);
|
|
45
|
+
if (!target || !target.isConnected) continue;
|
|
46
|
+
const scroller = ins.container ? elementFromPath(ins.container) ?? window : window;
|
|
47
|
+
const isWindow = scroller === window;
|
|
48
|
+
const scrollerRect = isWindow ? { top: 0, height: window.innerHeight || document.documentElement.clientHeight } : scroller.getBoundingClientRect();
|
|
49
|
+
const desiredTop = scrollerRect.top + scrollerRect.height * Math.max(0, Math.min(0.9, ins.ratio));
|
|
50
|
+
const rect = target.getBoundingClientRect();
|
|
51
|
+
const delta = rect.top - desiredTop;
|
|
52
|
+
fingerprint.push(`${isWindow ? "w" : ins.container?.join(",")}-${Math.round(rect.top)}-${ins.ratio.toFixed(3)}`);
|
|
53
|
+
if (Math.abs(delta) < 8) continue;
|
|
54
|
+
if (isWindow) window.scrollBy({ top: delta, behavior: "smooth" });
|
|
55
|
+
else scroller.scrollBy({ top: delta, behavior: "smooth" });
|
|
56
|
+
}
|
|
57
|
+
const key = fingerprint.join("|");
|
|
58
|
+
if (key === lastTargetKey) return;
|
|
59
|
+
lastTargetKey = key;
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
watch(leaderPayload, scrollToLeader, { deep: true, flush: "post" });
|
|
63
|
+
const leader = computed(() => {
|
|
64
|
+
const id = leaderId.value;
|
|
65
|
+
if (id == null) return null;
|
|
66
|
+
return allPeers.value.find((p) => p.clientId === id) ?? null;
|
|
67
|
+
});
|
|
68
|
+
return { leader, leaderPayload, scrollToLeader };
|
|
69
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Follow another peer's `aware-ui` keys live. Reads the target peer's most
|
|
3
|
+
* recent writes to the shared `aware-ui` Y.Map and re-applies them locally
|
|
4
|
+
* by writing the same `{value, by, ts}` shape under our own clientId, so any
|
|
5
|
+
* `live`-bound aware component snaps to the leader's UI state (active tab,
|
|
6
|
+
* expanded accordion, current page, modal open, etc.).
|
|
7
|
+
*
|
|
8
|
+
* Activation is explicit — call `follow(clientId)` from `<AFollowBar>`. Local
|
|
9
|
+
* interaction (any keystroke, click, or scroll) calls `unfollow()` so the
|
|
10
|
+
* follower can break out at any time.
|
|
11
|
+
*
|
|
12
|
+
* Optional `keyPrefix` scopes the follow to a subset of UI keys; default
|
|
13
|
+
* follows everything the leader writes.
|
|
14
|
+
*/
|
|
15
|
+
export interface UseAAFollowPeerOptions {
|
|
16
|
+
/** Only mirror keys that start with this prefix. */
|
|
17
|
+
keyPrefix?: string;
|
|
18
|
+
/** Hook fired when the user breaks follow via local interaction. */
|
|
19
|
+
onBreak?: () => void;
|
|
20
|
+
}
|
|
21
|
+
export declare function useAAFollowPeer(options?: UseAAFollowPeerOptions): {
|
|
22
|
+
follow: (clientId: number) => void;
|
|
23
|
+
unfollow: () => void;
|
|
24
|
+
followingClientId: import("vue").Ref<number | null, number | null>;
|
|
25
|
+
followingUser: import("vue").ComputedRef<{
|
|
26
|
+
name?: string;
|
|
27
|
+
color?: string;
|
|
28
|
+
} | null>;
|
|
29
|
+
};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { computed, onScopeDispose, ref, watch } from "vue";
|
|
2
|
+
import { useAbracadabra } from "./useAbracadabra.js";
|
|
3
|
+
import { useSyncedMap } from "./useYDoc.js";
|
|
4
|
+
import { useAwareness } from "./useAwareness.js";
|
|
5
|
+
const _followingClientId = ref(null);
|
|
6
|
+
export function useAAFollowPeer(options = {}) {
|
|
7
|
+
const { doc, provider } = useAbracadabra();
|
|
8
|
+
const { data, set } = useSyncedMap(doc, "aware-ui");
|
|
9
|
+
const { states } = useAwareness();
|
|
10
|
+
const followingClientId = _followingClientId;
|
|
11
|
+
let unsubInteraction = null;
|
|
12
|
+
const followingUser = computed(() => {
|
|
13
|
+
if (followingClientId.value == null) return null;
|
|
14
|
+
const state = states.value.get(followingClientId.value);
|
|
15
|
+
return state?.user ?? null;
|
|
16
|
+
});
|
|
17
|
+
function detachInteraction() {
|
|
18
|
+
unsubInteraction?.();
|
|
19
|
+
unsubInteraction = null;
|
|
20
|
+
}
|
|
21
|
+
function attachInteractionBreaker() {
|
|
22
|
+
detachInteraction();
|
|
23
|
+
if (typeof window === "undefined") return;
|
|
24
|
+
const onBreak = () => unfollow();
|
|
25
|
+
window.addEventListener("keydown", onBreak);
|
|
26
|
+
window.addEventListener("pointerdown", onBreak);
|
|
27
|
+
window.addEventListener("wheel", onBreak, { passive: true });
|
|
28
|
+
unsubInteraction = () => {
|
|
29
|
+
window.removeEventListener("keydown", onBreak);
|
|
30
|
+
window.removeEventListener("pointerdown", onBreak);
|
|
31
|
+
window.removeEventListener("wheel", onBreak);
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function follow(clientId) {
|
|
35
|
+
if (followingClientId.value === clientId) return;
|
|
36
|
+
followingClientId.value = clientId;
|
|
37
|
+
attachInteractionBreaker();
|
|
38
|
+
}
|
|
39
|
+
function unfollow() {
|
|
40
|
+
if (followingClientId.value == null) return;
|
|
41
|
+
followingClientId.value = null;
|
|
42
|
+
detachInteraction();
|
|
43
|
+
options.onBreak?.();
|
|
44
|
+
}
|
|
45
|
+
const myClientId = computed(() => provider.value?.awareness?.clientID);
|
|
46
|
+
watch(
|
|
47
|
+
() => Object.entries(data),
|
|
48
|
+
(entries) => {
|
|
49
|
+
const target = followingClientId.value;
|
|
50
|
+
if (target == null) return;
|
|
51
|
+
const me = myClientId.value;
|
|
52
|
+
const prefix = options.keyPrefix;
|
|
53
|
+
for (const [key, entry] of entries) {
|
|
54
|
+
if (!entry || typeof entry !== "object") continue;
|
|
55
|
+
if (entry.by !== target) continue;
|
|
56
|
+
if (prefix && !key.startsWith(prefix)) continue;
|
|
57
|
+
set(key, { value: entry.value, by: me, ts: Date.now() });
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
{ deep: true }
|
|
61
|
+
);
|
|
62
|
+
watch(followingClientId, (target) => {
|
|
63
|
+
if (target == null) return;
|
|
64
|
+
const me = myClientId.value;
|
|
65
|
+
const prefix = options.keyPrefix;
|
|
66
|
+
for (const [key, entry] of Object.entries(data)) {
|
|
67
|
+
if (!entry || typeof entry !== "object") continue;
|
|
68
|
+
if (entry.by !== target) continue;
|
|
69
|
+
if (prefix && !key.startsWith(prefix)) continue;
|
|
70
|
+
set(key, { value: entry.value, by: me, ts: Date.now() });
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
onScopeDispose(detachInteraction);
|
|
74
|
+
return { follow, unfollow, followingClientId, followingUser };
|
|
75
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Broadcast the local user's most recent shortcut press as a short-lived
|
|
3
|
+
* ephemeral field. Receivers (`<AKeyHint>`, presence overlays) flash a brief
|
|
4
|
+
* "Janis just pressed ⌘K" indicator on the avatar.
|
|
5
|
+
*
|
|
6
|
+
* Each `pressKey(label)` call publishes `{ label, ts }` for ~1s, then auto-
|
|
7
|
+
* clears so peers don't see stale shortcuts.
|
|
8
|
+
*/
|
|
9
|
+
export interface PeerKeyHint {
|
|
10
|
+
clientId: number;
|
|
11
|
+
label: string;
|
|
12
|
+
ts: number;
|
|
13
|
+
user?: {
|
|
14
|
+
name?: string;
|
|
15
|
+
color?: string;
|
|
16
|
+
publicKey?: string;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export declare function useAAKey(): {
|
|
20
|
+
pressKey: (label: string) => void;
|
|
21
|
+
hints: import("vue").ComputedRef<PeerKeyHint[]>;
|
|
22
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { computed, onScopeDispose } from "vue";
|
|
2
|
+
import { useAAEphemeral } from "./useAAEphemeral.js";
|
|
3
|
+
const HOLD_MS = 1e3;
|
|
4
|
+
export function useAAKey() {
|
|
5
|
+
const { peers, setLocal } = useAAEphemeral(() => "key:last");
|
|
6
|
+
let timer = null;
|
|
7
|
+
function pressKey(label) {
|
|
8
|
+
if (timer) clearTimeout(timer);
|
|
9
|
+
setLocal({ label, ts: Date.now() });
|
|
10
|
+
timer = setTimeout(() => {
|
|
11
|
+
setLocal(null);
|
|
12
|
+
timer = null;
|
|
13
|
+
}, HOLD_MS);
|
|
14
|
+
}
|
|
15
|
+
onScopeDispose(() => {
|
|
16
|
+
if (timer) clearTimeout(timer);
|
|
17
|
+
setLocal(null);
|
|
18
|
+
});
|
|
19
|
+
const hints = computed(() => {
|
|
20
|
+
const now = Date.now();
|
|
21
|
+
return peers.value.filter((p) => p.value && now - p.value.ts < HOLD_MS).map((p) => ({ clientId: p.clientId, label: p.value.label, ts: p.value.ts, user: p.user }));
|
|
22
|
+
});
|
|
23
|
+
return { pressKey, hints };
|
|
24
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type Ref } from 'vue';
|
|
2
|
+
import type { MaybeRefOrGetter } from 'vue';
|
|
3
|
+
/**
|
|
4
|
+
* Per-peer free-floating mouse pointer position over a scoped element.
|
|
5
|
+
*
|
|
6
|
+
* The local pointer position (relative to the scoped element's bounding box)
|
|
7
|
+
* is broadcast as `peer:pointer:<scope>` ephemeral state, RAF-throttled to
|
|
8
|
+
* the display refresh rate. Reads return every other peer's `{ x, y, vis }`
|
|
9
|
+
* with their user info attached, ready for rendering by `<APresenceCursors>`.
|
|
10
|
+
*
|
|
11
|
+
* Coordinates are normalised in [0, 1] so receivers can render at their own
|
|
12
|
+
* element size without sender-side knowledge of viewport dimensions.
|
|
13
|
+
*/
|
|
14
|
+
export interface PeerPointer {
|
|
15
|
+
clientId: number;
|
|
16
|
+
/** Normalised x within the scope element (0..1). */
|
|
17
|
+
x: number;
|
|
18
|
+
/** Normalised y within the scope element (0..1). */
|
|
19
|
+
y: number;
|
|
20
|
+
/** Whether the peer's pointer is inside the scope right now. */
|
|
21
|
+
vis: boolean;
|
|
22
|
+
user?: {
|
|
23
|
+
name?: string;
|
|
24
|
+
color?: string;
|
|
25
|
+
publicKey?: string;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export declare function useAAPointer(scope: MaybeRefOrGetter<string>, elementRef: Ref<HTMLElement | null | undefined>): {
|
|
29
|
+
pointers: import("vue").ComputedRef<PeerPointer[]>;
|
|
30
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { computed, onScopeDispose, watch } from "vue";
|
|
2
|
+
import { useAAEphemeral } from "./useAAEphemeral.js";
|
|
3
|
+
export function useAAPointer(scope, elementRef) {
|
|
4
|
+
const slot = computed(() => `pointer:${typeof scope === "function" ? scope() : scope?.value ?? scope}`);
|
|
5
|
+
const { peers, setLocal } = useAAEphemeral(slot);
|
|
6
|
+
let raf = 0;
|
|
7
|
+
let pending = null;
|
|
8
|
+
function flush() {
|
|
9
|
+
raf = 0;
|
|
10
|
+
if (pending) setLocal(pending);
|
|
11
|
+
}
|
|
12
|
+
function onMove(e) {
|
|
13
|
+
const el = elementRef.value;
|
|
14
|
+
if (!el) return;
|
|
15
|
+
const rect = el.getBoundingClientRect();
|
|
16
|
+
if (rect.width === 0 || rect.height === 0) return;
|
|
17
|
+
const x = (e.clientX - rect.left) / rect.width;
|
|
18
|
+
const y = (e.clientY - rect.top) / rect.height;
|
|
19
|
+
pending = { x, y, vis: x >= 0 && x <= 1 && y >= 0 && y <= 1 };
|
|
20
|
+
if (!raf) raf = requestAnimationFrame(flush);
|
|
21
|
+
}
|
|
22
|
+
function onLeave() {
|
|
23
|
+
pending = { x: 0, y: 0, vis: false };
|
|
24
|
+
if (!raf) raf = requestAnimationFrame(flush);
|
|
25
|
+
}
|
|
26
|
+
let attached = null;
|
|
27
|
+
function attach(el) {
|
|
28
|
+
if (attached === el) return;
|
|
29
|
+
detach();
|
|
30
|
+
attached = el;
|
|
31
|
+
el.addEventListener("pointermove", onMove);
|
|
32
|
+
el.addEventListener("pointerleave", onLeave);
|
|
33
|
+
}
|
|
34
|
+
function detach() {
|
|
35
|
+
if (!attached) return;
|
|
36
|
+
attached.removeEventListener("pointermove", onMove);
|
|
37
|
+
attached.removeEventListener("pointerleave", onLeave);
|
|
38
|
+
attached = null;
|
|
39
|
+
setLocal(null);
|
|
40
|
+
}
|
|
41
|
+
watch(elementRef, (el) => {
|
|
42
|
+
if (el) attach(el);
|
|
43
|
+
else detach();
|
|
44
|
+
}, { immediate: true, flush: "post" });
|
|
45
|
+
onScopeDispose(() => {
|
|
46
|
+
if (raf) cancelAnimationFrame(raf);
|
|
47
|
+
detach();
|
|
48
|
+
});
|
|
49
|
+
const pointers = computed(
|
|
50
|
+
() => peers.value.filter((p) => p.value.vis).map((p) => ({ clientId: p.clientId, x: p.value.x, y: p.value.y, vis: p.value.vis, user: p.user }))
|
|
51
|
+
);
|
|
52
|
+
return { pointers };
|
|
53
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type WritableComputedRef } from 'vue';
|
|
2
|
+
import type { MaybeRefOrGetter } from 'vue';
|
|
3
|
+
/**
|
|
4
|
+
* Shared UI state across every connected tab — the building block under the
|
|
5
|
+
* `live` prop on every aware component.
|
|
6
|
+
*
|
|
7
|
+
* Stores a single value keyed by `fieldKey` on a shared Y.Map called
|
|
8
|
+
* `aware-ui` on the root Y.Doc. All connected peers read and write the same
|
|
9
|
+
* record, so opening a dropdown / expanding an accordion / switching a tab
|
|
10
|
+
* happens *live* on every screen.
|
|
11
|
+
*
|
|
12
|
+
* Distinct from `useAAFieldValue`:
|
|
13
|
+
* - `useAAFieldValue` stores the *bound primitive value* (input text, switch on/off)
|
|
14
|
+
* - `useAAUIState` stores *UI chrome state* (open, expanded, sort col, current page)
|
|
15
|
+
* - Different Y.Map names so reset / introspection / TTL logic stay separate.
|
|
16
|
+
*
|
|
17
|
+
* Each entry carries `{ value, by, ts }` so receivers can attribute the
|
|
18
|
+
* change ("opened by Janis") and apply last-write-wins on conflict.
|
|
19
|
+
*/
|
|
20
|
+
export interface UseAAUIStateOptions<T> {
|
|
21
|
+
/** Returned when no entry exists yet. */
|
|
22
|
+
defaultValue?: T;
|
|
23
|
+
}
|
|
24
|
+
export declare function useAAUIState<T = unknown>(fieldKey: MaybeRefOrGetter<string>, options?: UseAAUIStateOptions<T>): WritableComputedRef<T | undefined>;
|
|
25
|
+
/**
|
|
26
|
+
* Read who last wrote a given live UI field — used to render attribution
|
|
27
|
+
* labels ("opened by Janis") in `live` components.
|
|
28
|
+
*/
|
|
29
|
+
export declare function useAAUIStateAuthor(fieldKey: MaybeRefOrGetter<string>): import("vue").ComputedRef<number | undefined>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { computed } from "vue";
|
|
2
|
+
import { useAbracadabra } from "./useAbracadabra.js";
|
|
3
|
+
import { useSyncedMap } from "./useYDoc.js";
|
|
4
|
+
function resolveKey(fieldKey) {
|
|
5
|
+
if (typeof fieldKey === "function") return fieldKey();
|
|
6
|
+
if (fieldKey && typeof fieldKey === "object" && "value" in fieldKey) return fieldKey.value;
|
|
7
|
+
return fieldKey;
|
|
8
|
+
}
|
|
9
|
+
export function useAAUIState(fieldKey, options = {}) {
|
|
10
|
+
const { doc, provider } = useAbracadabra();
|
|
11
|
+
const { data, set } = useSyncedMap(doc, "aware-ui");
|
|
12
|
+
return computed({
|
|
13
|
+
get() {
|
|
14
|
+
const entry = data[resolveKey(fieldKey)];
|
|
15
|
+
if (!entry) return options.defaultValue;
|
|
16
|
+
return entry.value;
|
|
17
|
+
},
|
|
18
|
+
set(value) {
|
|
19
|
+
const by = provider.value?.awareness?.clientID;
|
|
20
|
+
set(resolveKey(fieldKey), { value, by, ts: Date.now() });
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
export function useAAUIStateAuthor(fieldKey) {
|
|
25
|
+
const { doc } = useAbracadabra();
|
|
26
|
+
const { data } = useSyncedMap(doc, "aware-ui");
|
|
27
|
+
return computed(() => data[resolveKey(fieldKey)]?.by);
|
|
28
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type Ref } from 'vue';
|
|
2
|
+
import type { MaybeRefOrGetter } from 'vue';
|
|
3
|
+
/**
|
|
4
|
+
* IntersectionObserver-based "what section is this peer currently looking at"
|
|
5
|
+
* — broadcasts the data-section attribute of the most-visible region under a
|
|
6
|
+
* scoped container as `peer:viewport:<scope>` ephemeral state.
|
|
7
|
+
*
|
|
8
|
+
* Use case: render "Janis is reading the API section" overlays in long docs.
|
|
9
|
+
* Pair with `<APresenceCursors>` for a complete spatial-presence layer.
|
|
10
|
+
*/
|
|
11
|
+
export interface PeerViewport {
|
|
12
|
+
clientId: number;
|
|
13
|
+
section: string;
|
|
14
|
+
user?: {
|
|
15
|
+
name?: string;
|
|
16
|
+
color?: string;
|
|
17
|
+
publicKey?: string;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export declare function useAAViewport(scope: MaybeRefOrGetter<string>, elementRef: Ref<HTMLElement | null | undefined>): {
|
|
21
|
+
viewports: import("vue").ComputedRef<PeerViewport[]>;
|
|
22
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { computed, onScopeDispose, watch } from "vue";
|
|
2
|
+
import { useAAEphemeral } from "./useAAEphemeral.js";
|
|
3
|
+
export function useAAViewport(scope, elementRef) {
|
|
4
|
+
const slot = computed(() => `viewport:${typeof scope === "function" ? scope() : scope?.value ?? scope}`);
|
|
5
|
+
const { peers, setLocal } = useAAEphemeral(slot);
|
|
6
|
+
let io = null;
|
|
7
|
+
let attached = null;
|
|
8
|
+
let mostVisible = null;
|
|
9
|
+
function publish() {
|
|
10
|
+
setLocal(mostVisible?.id ?? null);
|
|
11
|
+
}
|
|
12
|
+
function attach(el) {
|
|
13
|
+
if (attached === el) return;
|
|
14
|
+
detach();
|
|
15
|
+
attached = el;
|
|
16
|
+
io = new IntersectionObserver((entries) => {
|
|
17
|
+
let best = mostVisible;
|
|
18
|
+
for (const e of entries) {
|
|
19
|
+
const id = e.target.dataset.section;
|
|
20
|
+
if (!id) continue;
|
|
21
|
+
if (!e.isIntersecting) {
|
|
22
|
+
if (best?.id === id) best = null;
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (!best || e.intersectionRatio > best.ratio) {
|
|
26
|
+
best = { id, ratio: e.intersectionRatio };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
mostVisible = best;
|
|
30
|
+
publish();
|
|
31
|
+
}, { threshold: [0, 0.25, 0.5, 0.75, 1] });
|
|
32
|
+
el.querySelectorAll("[data-section]").forEach((s) => io.observe(s));
|
|
33
|
+
}
|
|
34
|
+
function detach() {
|
|
35
|
+
io?.disconnect();
|
|
36
|
+
io = null;
|
|
37
|
+
attached = null;
|
|
38
|
+
mostVisible = null;
|
|
39
|
+
setLocal(null);
|
|
40
|
+
}
|
|
41
|
+
watch(elementRef, (el) => {
|
|
42
|
+
if (el) attach(el);
|
|
43
|
+
else detach();
|
|
44
|
+
}, { immediate: true, flush: "post" });
|
|
45
|
+
onScopeDispose(detach);
|
|
46
|
+
const viewports = computed(
|
|
47
|
+
() => peers.value.filter((p) => !!p.value).map((p) => ({ clientId: p.clientId, section: p.value, user: p.user }))
|
|
48
|
+
);
|
|
49
|
+
return { viewports };
|
|
50
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useAbraAdmin
|
|
3
|
+
*
|
|
4
|
+
* Admin-only composable. Wraps the `/admin/*` REST endpoints (audit log,
|
|
5
|
+
* backup dump, user lockout). All methods reject with `Error('not admin')`
|
|
6
|
+
* when `isAdmin` is false — UI should gate route entry on the same flag.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* const admin = useAbraAdmin()
|
|
10
|
+
* if (admin.isAdmin.value) {
|
|
11
|
+
* const rows = await admin.auditList({ event_type: 'auth.login_failed' })
|
|
12
|
+
* }
|
|
13
|
+
*/
|
|
14
|
+
import type { AuditLogEntry, AuditQueryOpts, AuditVerifyResult } from '@abraca/dabra';
|
|
15
|
+
declare function auditList(opts?: AuditQueryOpts): Promise<AuditLogEntry[]>;
|
|
16
|
+
declare function auditExport(opts?: Omit<AuditQueryOpts, 'limit' | 'offset'>): Promise<string>;
|
|
17
|
+
declare function auditVerify(): Promise<AuditVerifyResult>;
|
|
18
|
+
declare function unlockUser(userId: string): Promise<void>;
|
|
19
|
+
declare function backupDump(opts?: {
|
|
20
|
+
includeAudit?: boolean;
|
|
21
|
+
}): Promise<Blob>;
|
|
22
|
+
/**
|
|
23
|
+
* Convenience: download a backup tar to the user's machine. Computes a
|
|
24
|
+
* filename like `abracadabra-backup-<server>-<isoDate>.tar`.
|
|
25
|
+
*/
|
|
26
|
+
declare function downloadBackup(opts?: {
|
|
27
|
+
includeAudit?: boolean;
|
|
28
|
+
filename?: string;
|
|
29
|
+
}): Promise<void>;
|
|
30
|
+
export declare function useAbraAdmin(): {
|
|
31
|
+
/** True when the current effective role is admin/owner/service. */
|
|
32
|
+
isAdmin: import("vue").ComputedRef<boolean>;
|
|
33
|
+
/** Last-fetched audit log rows (best-first). */
|
|
34
|
+
auditEntries: import("vue").ShallowRef<AuditLogEntry[], AuditLogEntry[]>;
|
|
35
|
+
/** Last `auditVerify()` result, or null. */
|
|
36
|
+
auditVerifyResult: import("vue").ShallowRef<AuditVerifyResult | null, AuditVerifyResult | null>;
|
|
37
|
+
/** Whether an admin call is in flight. */
|
|
38
|
+
isLoading: import("vue").Ref<boolean, boolean>;
|
|
39
|
+
/** Last error message, or null. */
|
|
40
|
+
error: import("vue").Ref<string | null, string | null>;
|
|
41
|
+
/** GET /admin/audit. */
|
|
42
|
+
auditList: typeof auditList;
|
|
43
|
+
/** GET /admin/audit/export — returns NDJSON as a string. */
|
|
44
|
+
auditExport: typeof auditExport;
|
|
45
|
+
/** GET /admin/audit/verify — returns the result whether ok or broken. */
|
|
46
|
+
auditVerify: typeof auditVerify;
|
|
47
|
+
/** POST /admin/users/:id/unlock. */
|
|
48
|
+
unlockUser: typeof unlockUser;
|
|
49
|
+
/** GET /admin/backup/dump — returns the tar Blob. */
|
|
50
|
+
backupDump: typeof backupDump;
|
|
51
|
+
/** Convenience: backupDump + browser download. */
|
|
52
|
+
downloadBackup: typeof downloadBackup;
|
|
53
|
+
};
|
|
54
|
+
export {};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { computed, ref, shallowRef } from "vue";
|
|
2
|
+
import { useAbracadabra } from "#imports";
|
|
3
|
+
const auditEntries = shallowRef([]);
|
|
4
|
+
const auditVerifyResult = shallowRef(null);
|
|
5
|
+
const isLoading = ref(false);
|
|
6
|
+
const error = ref(null);
|
|
7
|
+
function _client() {
|
|
8
|
+
const abra = useAbracadabra();
|
|
9
|
+
const c = abra.client.value;
|
|
10
|
+
if (!c) throw new Error("Not connected");
|
|
11
|
+
return { abra, client: c };
|
|
12
|
+
}
|
|
13
|
+
function _isAdminRole(role) {
|
|
14
|
+
return role === "admin" || role === "service" || role === "owner";
|
|
15
|
+
}
|
|
16
|
+
async function auditList(opts) {
|
|
17
|
+
const { client } = _client();
|
|
18
|
+
isLoading.value = true;
|
|
19
|
+
error.value = null;
|
|
20
|
+
try {
|
|
21
|
+
const rows = await client.adminAuditList(opts);
|
|
22
|
+
auditEntries.value = rows;
|
|
23
|
+
return rows;
|
|
24
|
+
} catch (e) {
|
|
25
|
+
error.value = e instanceof Error ? e.message : "Failed to load audit log";
|
|
26
|
+
throw e;
|
|
27
|
+
} finally {
|
|
28
|
+
isLoading.value = false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async function auditExport(opts) {
|
|
32
|
+
const { client } = _client();
|
|
33
|
+
error.value = null;
|
|
34
|
+
try {
|
|
35
|
+
return await client.adminAuditExport(opts);
|
|
36
|
+
} catch (e) {
|
|
37
|
+
error.value = e instanceof Error ? e.message : "Failed to export audit log";
|
|
38
|
+
throw e;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async function auditVerify() {
|
|
42
|
+
const { client } = _client();
|
|
43
|
+
error.value = null;
|
|
44
|
+
try {
|
|
45
|
+
const result = await client.adminAuditVerify();
|
|
46
|
+
auditVerifyResult.value = result;
|
|
47
|
+
return result;
|
|
48
|
+
} catch (e) {
|
|
49
|
+
error.value = e instanceof Error ? e.message : "Audit verification failed";
|
|
50
|
+
throw e;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async function unlockUser(userId) {
|
|
54
|
+
const { client } = _client();
|
|
55
|
+
error.value = null;
|
|
56
|
+
try {
|
|
57
|
+
await client.adminUnlockUser(userId);
|
|
58
|
+
} catch (e) {
|
|
59
|
+
error.value = e instanceof Error ? e.message : "Failed to unlock user";
|
|
60
|
+
throw e;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async function backupDump(opts) {
|
|
64
|
+
const { client } = _client();
|
|
65
|
+
error.value = null;
|
|
66
|
+
try {
|
|
67
|
+
return await client.adminBackupDump(opts);
|
|
68
|
+
} catch (e) {
|
|
69
|
+
error.value = e instanceof Error ? e.message : "Backup dump failed";
|
|
70
|
+
throw e;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async function downloadBackup(opts) {
|
|
74
|
+
const { abra } = _client();
|
|
75
|
+
const blob = await backupDump(opts);
|
|
76
|
+
if (typeof window === "undefined") return;
|
|
77
|
+
const url = URL.createObjectURL(blob);
|
|
78
|
+
const a = document.createElement("a");
|
|
79
|
+
a.href = url;
|
|
80
|
+
const date = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
|
|
81
|
+
const host = abra.currentServerUrl.value.replace(/^https?:\/\//, "").replace(/[^a-z0-9.-]/gi, "_");
|
|
82
|
+
a.download = opts?.filename ?? `abracadabra-backup-${host}-${date}.tar`;
|
|
83
|
+
document.body.appendChild(a);
|
|
84
|
+
a.click();
|
|
85
|
+
a.remove();
|
|
86
|
+
URL.revokeObjectURL(url);
|
|
87
|
+
}
|
|
88
|
+
export function useAbraAdmin() {
|
|
89
|
+
const abra = useAbracadabra();
|
|
90
|
+
const isAdmin = computed(() => _isAdminRole(abra.effectiveRole.value));
|
|
91
|
+
return {
|
|
92
|
+
/** True when the current effective role is admin/owner/service. */
|
|
93
|
+
isAdmin,
|
|
94
|
+
/** Last-fetched audit log rows (best-first). */
|
|
95
|
+
auditEntries,
|
|
96
|
+
/** Last `auditVerify()` result, or null. */
|
|
97
|
+
auditVerifyResult,
|
|
98
|
+
/** Whether an admin call is in flight. */
|
|
99
|
+
isLoading,
|
|
100
|
+
/** Last error message, or null. */
|
|
101
|
+
error,
|
|
102
|
+
/** GET /admin/audit. */
|
|
103
|
+
auditList,
|
|
104
|
+
/** GET /admin/audit/export — returns NDJSON as a string. */
|
|
105
|
+
auditExport,
|
|
106
|
+
/** GET /admin/audit/verify — returns the result whether ok or broken. */
|
|
107
|
+
auditVerify,
|
|
108
|
+
/** POST /admin/users/:id/unlock. */
|
|
109
|
+
unlockUser,
|
|
110
|
+
/** GET /admin/backup/dump — returns the tar Blob. */
|
|
111
|
+
backupDump,
|
|
112
|
+
/** Convenience: backupDump + browser download. */
|
|
113
|
+
downloadBackup
|
|
114
|
+
};
|
|
115
|
+
}
|
|
@@ -12,7 +12,15 @@ export declare function useAbracadabraAuth(): {
|
|
|
12
12
|
userNeutralColorName: any;
|
|
13
13
|
claimAccount: any;
|
|
14
14
|
loginWithHardware: any;
|
|
15
|
+
loginWithPassword: any;
|
|
16
|
+
registerWithPassword: any;
|
|
15
17
|
logout: any;
|
|
18
|
+
logoutServer: any;
|
|
19
|
+
logoutAll: any;
|
|
20
|
+
requestPasswordReset: any;
|
|
21
|
+
confirmPasswordReset: any;
|
|
22
|
+
changePassword: any;
|
|
23
|
+
setPassword: any;
|
|
16
24
|
recoverIdentity: any;
|
|
17
25
|
unblockConnection: any;
|
|
18
26
|
setUserName: any;
|
|
@@ -15,7 +15,15 @@ export function useAbracadabraAuth() {
|
|
|
15
15
|
userNeutralColorName: abra.userNeutralColorName,
|
|
16
16
|
claimAccount: abra.claimAccount,
|
|
17
17
|
loginWithHardware: abra.loginWithHardware,
|
|
18
|
+
loginWithPassword: abra.loginWithPassword,
|
|
19
|
+
registerWithPassword: abra.registerWithPassword,
|
|
18
20
|
logout: abra.logout,
|
|
21
|
+
logoutServer: abra.logoutServer,
|
|
22
|
+
logoutAll: abra.logoutAll,
|
|
23
|
+
requestPasswordReset: abra.requestPasswordReset,
|
|
24
|
+
confirmPasswordReset: abra.confirmPasswordReset,
|
|
25
|
+
changePassword: abra.changePassword,
|
|
26
|
+
setPassword: abra.setPassword,
|
|
19
27
|
recoverIdentity: abra.recoverIdentity,
|
|
20
28
|
unblockConnection: abra.unblockConnection,
|
|
21
29
|
setUserName: abra.setUserName,
|