@arbidocs/react 0.5.111 → 0.5.113
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/account/client.js +96 -0
- package/dist/account/client.js.map +7 -0
- package/dist/account/delete.js +70 -0
- package/dist/account/delete.js.map +7 -0
- package/dist/account/didit.js +34 -0
- package/dist/account/didit.js.map +7 -0
- package/dist/account/dismissed-tips.js +33 -0
- package/dist/account/dismissed-tips.js.map +7 -0
- package/dist/account/email.js +84 -0
- package/dist/account/email.js.map +7 -0
- package/dist/account/entitlements.js +47 -0
- package/dist/account/entitlements.js.map +7 -0
- package/dist/account/identity.js +270 -0
- package/dist/account/identity.js.map +7 -0
- package/dist/account/index.js +93 -0
- package/dist/account/index.js.map +7 -0
- package/dist/account/notifications.js +59 -0
- package/dist/account/notifications.js.map +7 -0
- package/dist/account/password.js +103 -0
- package/dist/account/password.js.map +7 -0
- package/dist/account/profile.js +116 -0
- package/dist/account/profile.js.map +7 -0
- package/dist/account/recovery.js +13 -0
- package/dist/account/recovery.js.map +7 -0
- package/dist/account/relevance.js +82 -0
- package/dist/account/relevance.js.map +7 -0
- package/dist/account/sessions.js +37 -0
- package/dist/account/sessions.js.map +7 -0
- package/dist/account/settings.js +39 -0
- package/dist/account/settings.js.map +7 -0
- package/dist/account/table-views.js +16 -0
- package/dist/account/table-views.js.map +7 -0
- package/dist/ai/AiAnswer.js +83 -0
- package/dist/ai/AiAnswer.js.map +7 -0
- package/dist/ai/AiMarkdown.js +40 -0
- package/dist/ai/AiMarkdown.js.map +7 -0
- package/dist/ai/ArtifactCanvas.js +193 -0
- package/dist/ai/ArtifactCanvas.js.map +7 -0
- package/dist/ai/CitationRenderer.js +413 -0
- package/dist/ai/CitationRenderer.js.map +7 -0
- package/dist/{chunk-WL2Y2T47.js → ai/MarkdownRenderer.js} +35 -101
- package/dist/ai/MarkdownRenderer.js.map +7 -0
- package/dist/ai/MessageArtifactCard.js +75 -0
- package/dist/ai/MessageArtifactCard.js.map +7 -0
- package/dist/ai/PassageCard.js +79 -0
- package/dist/ai/PassageCard.js.map +7 -0
- package/dist/ai/engine.js +110 -0
- package/dist/ai/engine.js.map +7 -0
- package/dist/ai/index.js +63 -0
- package/dist/ai/index.js.map +7 -0
- package/dist/ai/markdown-base-components.js +37 -0
- package/dist/ai/markdown-base-components.js.map +7 -0
- package/dist/ai/markdown-streaming-context.js +6 -0
- package/dist/ai/markdown-streaming-context.js.map +7 -0
- package/dist/{chunk-VSCU7K4V.js → ai/normalize-citations.js} +12 -19
- package/dist/ai/normalize-citations.js.map +7 -0
- package/dist/ai/redline.js +41 -0
- package/dist/ai/redline.js.map +7 -0
- package/dist/ai/split-markdown-blocks.js +40 -0
- package/dist/ai/split-markdown-blocks.js.map +7 -0
- package/dist/{chunk-UW2SGTI5.js → ai/stored-markdown.js} +41 -93
- package/dist/ai/stored-markdown.js.map +7 -0
- package/dist/annotations/AnnotationPageOverlay.js +807 -0
- package/dist/annotations/AnnotationPageOverlay.js.map +7 -0
- package/dist/annotations/AnnotationToolbar.js +398 -0
- package/dist/annotations/AnnotationToolbar.js.map +7 -0
- package/dist/annotations/FreezeDialog.js +170 -0
- package/dist/annotations/FreezeDialog.js.map +7 -0
- package/dist/annotations/ProductionDialog.js +354 -0
- package/dist/annotations/ProductionDialog.js.map +7 -0
- package/dist/annotations/controller.js +49 -0
- package/dist/annotations/controller.js.map +7 -0
- package/dist/annotations/freeze/browser.js +21 -0
- package/dist/annotations/freeze/browser.js.map +7 -0
- package/dist/annotations/freeze/bundle.js +201 -0
- package/dist/annotations/freeze/bundle.js.map +7 -0
- package/dist/annotations/freeze/coords.js +37 -0
- package/dist/annotations/freeze/coords.js.map +7 -0
- package/dist/annotations/freeze/freeze.js +261 -0
- package/dist/annotations/freeze/freeze.js.map +7 -0
- package/dist/annotations/freeze/hash.js +28 -0
- package/dist/annotations/freeze/hash.js.map +7 -0
- package/dist/annotations/freeze/index-page.js +78 -0
- package/dist/annotations/freeze/index-page.js.map +7 -0
- package/dist/annotations/freeze/index.js +28 -22
- package/dist/annotations/freeze/index.js.map +7 -1
- package/dist/annotations/freeze/raster.js +208 -0
- package/dist/annotations/freeze/raster.js.map +7 -0
- package/dist/annotations/freeze/stamp.js +117 -0
- package/dist/annotations/freeze/stamp.js.map +7 -0
- package/dist/annotations/freeze/types.js +14 -0
- package/dist/annotations/freeze/types.js.map +7 -0
- package/dist/annotations/freeze/vector.js +283 -0
- package/dist/annotations/freeze/vector.js.map +7 -0
- package/dist/annotations/geometry.js +81 -0
- package/dist/annotations/geometry.js.map +7 -0
- package/dist/annotations/index.js +125 -6
- package/dist/annotations/index.js.map +7 -1
- package/dist/annotations/merge.js +53 -0
- package/dist/annotations/merge.js.map +7 -0
- package/dist/{chunk-T3USOSVN.js → annotations/model.js} +23 -16
- package/dist/annotations/model.js.map +7 -0
- package/dist/annotations/overlay-geometry.js +41 -0
- package/dist/annotations/overlay-geometry.js.map +7 -0
- package/dist/annotations/redaction-log.js +33 -0
- package/dist/annotations/redaction-log.js.map +7 -0
- package/dist/annotations/selection-marks.js +122 -0
- package/dist/annotations/selection-marks.js.map +7 -0
- package/dist/annotations/state.js +140 -0
- package/dist/annotations/state.js.map +7 -0
- package/dist/annotations/store.js +49 -0
- package/dist/annotations/store.js.map +7 -0
- package/dist/annotations/useAnnotationLayer.js +306 -0
- package/dist/annotations/useAnnotationLayer.js.map +7 -0
- package/dist/annotations/useAnnotationShortcuts.js +31 -0
- package/dist/annotations/useAnnotationShortcuts.js.map +7 -0
- package/dist/annotations/useTextSelectionMarks.js +100 -0
- package/dist/annotations/useTextSelectionMarks.js.map +7 -0
- package/dist/artifacts/artifact-kind.js +19 -0
- package/dist/artifacts/artifact-kind.js.map +7 -0
- package/dist/artifacts/index.js +89 -571
- package/dist/artifacts/index.js.map +7 -1
- package/dist/{chunk-WUTL62MC.js → artifacts/normalize-markdown.js} +12 -14
- package/dist/artifacts/normalize-markdown.js.map +7 -0
- package/dist/artifacts/redline-core.js +12 -3
- package/dist/artifacts/redline-core.js.map +7 -1
- package/dist/{chunk-74N436VK.js → artifacts/redline-diff.js} +10 -9
- package/dist/artifacts/redline-diff.js.map +7 -0
- package/dist/artifacts/redline-engine.js +14 -0
- package/dist/artifacts/redline-engine.js.map +7 -0
- package/dist/artifacts/renderArtifactMarkdown.js +9 -0
- package/dist/artifacts/renderArtifactMarkdown.js.map +7 -0
- package/dist/artifacts/useArtifactEditSession.js +183 -0
- package/dist/artifacts/useArtifactEditSession.js.map +7 -0
- package/dist/artifacts/useArtifactSession.js +173 -0
- package/dist/artifacts/useArtifactSession.js.map +7 -0
- package/dist/artifacts/useArtifactSource.js +16 -0
- package/dist/artifacts/useArtifactSource.js.map +7 -0
- package/dist/artifacts/useArtifactText.js +78 -0
- package/dist/artifacts/useArtifactText.js.map +7 -0
- package/dist/artifacts/useRedline.js +65 -0
- package/dist/artifacts/useRedline.js.map +7 -0
- package/dist/artifacts/useStreamedArtifact.js +74 -0
- package/dist/artifacts/useStreamedArtifact.js.map +7 -0
- package/dist/artifacts/versions.js +68 -0
- package/dist/artifacts/versions.js.map +7 -0
- package/dist/billing.js +200 -0
- package/dist/billing.js.map +7 -0
- package/dist/boot-timeout.js +19 -0
- package/dist/boot-timeout.js.map +7 -0
- package/dist/calendar/accounts.js +213 -0
- package/dist/calendar/accounts.js.map +7 -0
- package/dist/calendar/hooks.js +409 -0
- package/dist/calendar/hooks.js.map +7 -0
- package/dist/calendar/index.js +31 -0
- package/dist/calendar/index.js.map +7 -0
- package/dist/calendar/keys.js +5 -0
- package/dist/calendar/keys.js.map +7 -0
- package/dist/calendar/offline/outbox.js +231 -0
- package/dist/calendar/offline/outbox.js.map +7 -0
- package/dist/calendar/offline/runtime.js +109 -0
- package/dist/calendar/offline/runtime.js.map +7 -0
- package/dist/calendar/offline/support.js +41 -0
- package/dist/calendar/offline/support.js.map +7 -0
- package/dist/calendar/support.js +34 -0
- package/dist/calendar/support.js.map +7 -0
- package/dist/calls/actions.js +226 -0
- package/dist/calls/actions.js.map +7 -0
- package/dist/calls/events.js +138 -0
- package/dist/calls/events.js.map +7 -0
- package/dist/calls/gate.js +19 -0
- package/dist/calls/gate.js.map +7 -0
- package/dist/calls/hooks.js +115 -0
- package/dist/calls/hooks.js.map +7 -0
- package/dist/calls/in-call-chat.js +132 -0
- package/dist/calls/in-call-chat.js.map +7 -0
- package/dist/calls/index.js +24 -0
- package/dist/calls/index.js.map +7 -0
- package/dist/calls/keys.js +17 -0
- package/dist/calls/keys.js.map +7 -0
- package/dist/calls/livekit/index.js +6 -958
- package/dist/calls/livekit/index.js.map +7 -1
- package/dist/calls/livekit/room.js +98 -0
- package/dist/calls/livekit/room.js.map +7 -0
- package/dist/calls/livekit/useCallRecorder.js +219 -0
- package/dist/calls/livekit/useCallRecorder.js.map +7 -0
- package/dist/calls/livekit/useCallTranscriber.js +309 -0
- package/dist/calls/livekit/useCallTranscriber.js.map +7 -0
- package/dist/calls/livekit/useHostMuteNotice.js +29 -0
- package/dist/calls/livekit/useHostMuteNotice.js.map +7 -0
- package/dist/calls/livekit/useInCallChat.js +161 -0
- package/dist/calls/livekit/useInCallChat.js.map +7 -0
- package/dist/calls/livekit/useWebinar.js +239 -0
- package/dist/calls/livekit/useWebinar.js.map +7 -0
- package/dist/calls/meeting-chat.js +149 -0
- package/dist/calls/meeting-chat.js.map +7 -0
- package/dist/calls/moderation.js +50 -0
- package/dist/calls/moderation.js.map +7 -0
- package/dist/calls/open-meeting-chat.js +29 -0
- package/dist/calls/open-meeting-chat.js.map +7 -0
- package/dist/calls/read-only.js +24 -0
- package/dist/calls/read-only.js.map +7 -0
- package/dist/calls/recording-media.js +218 -0
- package/dist/calls/recording-media.js.map +7 -0
- package/dist/calls/recording-playback.js +260 -0
- package/dist/calls/recording-playback.js.map +7 -0
- package/dist/calls/recording.js +268 -0
- package/dist/calls/recording.js.map +7 -0
- package/dist/calls/save-to-thread.js +80 -0
- package/dist/calls/save-to-thread.js.map +7 -0
- package/dist/calls/session.js +134 -0
- package/dist/calls/session.js.map +7 -0
- package/dist/calls/transcript-format.js +147 -0
- package/dist/calls/transcript-format.js.map +7 -0
- package/dist/calls/transcription.js +101 -0
- package/dist/calls/transcription.js.map +7 -0
- package/dist/calls/webinar.js +71 -0
- package/dist/calls/webinar.js.map +7 -0
- package/dist/charge-watch.js +71 -0
- package/dist/charge-watch.js.map +7 -0
- package/dist/chat/ChatBubble.js +146 -0
- package/dist/chat/ChatBubble.js.map +7 -0
- package/dist/chat/ConversationScope.js +30 -0
- package/dist/chat/ConversationScope.js.map +7 -0
- package/dist/chat/active-config.js +20 -0
- package/dist/chat/active-config.js.map +7 -0
- package/dist/chat/agent-chat-owner.js +25 -0
- package/dist/chat/agent-chat-owner.js.map +7 -0
- package/dist/chat/chat-artifacts.js +64 -0
- package/dist/chat/chat-artifacts.js.map +7 -0
- package/dist/chat/citations.js +32 -0
- package/dist/chat/citations.js.map +7 -0
- package/dist/chat/config-model.js +10 -0
- package/dist/chat/config-model.js.map +7 -0
- package/dist/chat/conversation-cache.js +676 -0
- package/dist/chat/conversation-cache.js.map +7 -0
- package/dist/chat/conversation-events.js +57 -0
- package/dist/chat/conversation-events.js.map +7 -0
- package/dist/chat/conversation-mentions.js +58 -0
- package/dist/chat/conversation-mentions.js.map +7 -0
- package/dist/chat/conversation-workspace.js +58 -0
- package/dist/chat/conversation-workspace.js.map +7 -0
- package/dist/chat/mentions.js +116 -0
- package/dist/chat/mentions.js.map +7 -0
- package/dist/chat/open-document.js +106 -0
- package/dist/chat/open-document.js.map +7 -0
- package/dist/chat/orphaned.js +44 -0
- package/dist/chat/orphaned.js.map +7 -0
- package/dist/chat/pendingFirstTurn.js +30 -0
- package/dist/chat/pendingFirstTurn.js.map +7 -0
- package/dist/chat/reply-target.js +12 -0
- package/dist/chat/reply-target.js.map +7 -0
- package/dist/chat/run-finished.js +28 -0
- package/dist/chat/run-finished.js.map +7 -0
- package/dist/chat/run-state.js +91 -0
- package/dist/chat/run-state.js.map +7 -0
- package/dist/chat/stream-handlers.js +419 -0
- package/dist/chat/stream-handlers.js.map +7 -0
- package/dist/chat/thread-binding.js +76 -0
- package/dist/chat/thread-binding.js.map +7 -0
- package/dist/chat/thread-document.js +53 -0
- package/dist/chat/thread-document.js.map +7 -0
- package/dist/chat/turn-control.js +79 -0
- package/dist/chat/turn-control.js.map +7 -0
- package/dist/chat/useAgentRunControl.js +36 -0
- package/dist/chat/useAgentRunControl.js.map +7 -0
- package/dist/chat/useAnswerAgentQuestion.js +19 -0
- package/dist/chat/useAnswerAgentQuestion.js.map +7 -0
- package/dist/chat/useAskAgain.js +32 -0
- package/dist/chat/useAskAgain.js.map +7 -0
- package/dist/chat/useAutoSendDraft.js +17 -0
- package/dist/chat/useAutoSendDraft.js.map +7 -0
- package/dist/chat/useBranchNavigation.js +97 -0
- package/dist/chat/useBranchNavigation.js.map +7 -0
- package/dist/chat/useConnectRunStream.js +169 -0
- package/dist/chat/useConnectRunStream.js.map +7 -0
- package/dist/chat/useConversation.js +431 -0
- package/dist/chat/useConversation.js.map +7 -0
- package/dist/chat/useConversationActions.js +662 -0
- package/dist/chat/useConversationActions.js.map +7 -0
- package/dist/chat/useConversationData.js +143 -0
- package/dist/chat/useConversationData.js.map +7 -0
- package/dist/chat/useConversationDocuments.js +41 -0
- package/dist/chat/useConversationDocuments.js.map +7 -0
- package/dist/chat/useConversationSettings.js +78 -0
- package/dist/chat/useConversationSettings.js.map +7 -0
- package/dist/chat/useConversationTurn.js +31 -0
- package/dist/chat/useConversationTurn.js.map +7 -0
- package/dist/chat/useConversationWorkspace.js +12 -0
- package/dist/chat/useConversationWorkspace.js.map +7 -0
- package/dist/chat/useDeleteMessage.js +15 -0
- package/dist/chat/useDeleteMessage.js.map +7 -0
- package/dist/chat/useDocumentAutoAdd.js +73 -0
- package/dist/chat/useDocumentAutoAdd.js.map +7 -0
- package/dist/chat/useMessageTimer.js +39 -0
- package/dist/chat/useMessageTimer.js.map +7 -0
- package/dist/chat/useThinkingContent.js +67 -0
- package/dist/chat/useThinkingContent.js.map +7 -0
- package/dist/chat/useThreadDocument.js +61 -0
- package/dist/chat/useThreadDocument.js.map +7 -0
- package/dist/chat/workflow-run-titles.js +50 -0
- package/dist/chat/workflow-run-titles.js.map +7 -0
- package/dist/config/config-hooks.js +209 -0
- package/dist/config/config-hooks.js.map +7 -0
- package/dist/connectivity.js +72 -0
- package/dist/connectivity.js.map +7 -0
- package/dist/connectors/hooks.js +263 -0
- package/dist/connectors/hooks.js.map +7 -0
- package/dist/connectors/index.js +28 -0
- package/dist/connectors/index.js.map +7 -0
- package/dist/contacts.js +100 -0
- package/dist/contacts.js.map +7 -0
- package/dist/conversation-list.js +65 -0
- package/dist/conversation-list.js.map +7 -0
- package/dist/databases.js +195 -0
- package/dist/databases.js.map +7 -0
- package/dist/datasets/aggregate.js +281 -0
- package/dist/datasets/aggregate.js.map +7 -0
- package/dist/datasets/index.js +122 -0
- package/dist/datasets/index.js.map +7 -0
- package/dist/datasets/members.js +27 -0
- package/dist/datasets/members.js.map +7 -0
- package/dist/datasets/panel.js +44 -0
- package/dist/datasets/panel.js.map +7 -0
- package/dist/datasets/registry.js +47 -0
- package/dist/datasets/registry.js.map +7 -0
- package/dist/datasets/rows-source.js +44 -0
- package/dist/datasets/rows-source.js.map +7 -0
- package/dist/datasets/sources/activity.js +83 -0
- package/dist/datasets/sources/activity.js.map +7 -0
- package/dist/datasets/sources/conversations.js +74 -0
- package/dist/datasets/sources/conversations.js.map +7 -0
- package/dist/datasets/sources/database.js +209 -0
- package/dist/datasets/sources/database.js.map +7 -0
- package/dist/datasets/sources/documents.js +93 -0
- package/dist/datasets/sources/documents.js.map +7 -0
- package/dist/datasets/sources/facts.js +56 -0
- package/dist/datasets/sources/facts.js.map +7 -0
- package/dist/datasets/sources/projects.js +117 -0
- package/dist/datasets/sources/projects.js.map +7 -0
- package/dist/datasets/sources/tags.js +67 -0
- package/dist/datasets/sources/tags.js.map +7 -0
- package/dist/datasets/sources/usage.js +268 -0
- package/dist/datasets/sources/usage.js.map +7 -0
- package/dist/datasets/sources/workflows.js +91 -0
- package/dist/datasets/sources/workflows.js.map +7 -0
- package/dist/datasets/sources/workspaces.js +67 -0
- package/dist/datasets/sources/workspaces.js.map +7 -0
- package/dist/datasets/store.js +194 -0
- package/dist/datasets/store.js.map +7 -0
- package/dist/datasets/types.js +14 -0
- package/dist/datasets/types.js.map +7 -0
- package/dist/directmessages/ConversationList.js +148 -0
- package/dist/directmessages/ConversationList.js.map +7 -0
- package/dist/directmessages/DateSeparator.js +8 -0
- package/dist/directmessages/DateSeparator.js.map +7 -0
- package/dist/directmessages/DmAvatar.js +29 -0
- package/dist/directmessages/DmAvatar.js.map +7 -0
- package/dist/directmessages/DmComposer.js +201 -0
- package/dist/directmessages/DmComposer.js.map +7 -0
- package/dist/directmessages/arrivals.js +29 -0
- package/dist/directmessages/arrivals.js.map +7 -0
- package/dist/directmessages/chat-cache.js +192 -0
- package/dist/directmessages/chat-cache.js.map +7 -0
- package/dist/directmessages/grouping.js +26 -0
- package/dist/directmessages/grouping.js.map +7 -0
- package/dist/directmessages/index.js +81 -0
- package/dist/directmessages/index.js.map +7 -0
- package/dist/directmessages/useChats.js +266 -0
- package/dist/directmessages/useChats.js.map +7 -0
- package/dist/directmessages/utils.js +23 -0
- package/dist/directmessages/utils.js.map +7 -0
- package/dist/document-tools/can-annotate.js +7 -0
- package/dist/document-tools/can-annotate.js.map +7 -0
- package/dist/document-tools/core.js +218 -12
- package/dist/document-tools/core.js.map +7 -1
- package/dist/document-tools/document-pdf.js +76 -0
- package/dist/document-tools/document-pdf.js.map +7 -0
- package/dist/document-tools/environment.js +136 -0
- package/dist/document-tools/environment.js.map +7 -0
- package/dist/document-tools/file-shares.js +112 -0
- package/dist/document-tools/file-shares.js.map +7 -0
- package/dist/document-tools/frozen-copy.js +27 -0
- package/dist/document-tools/frozen-copy.js.map +7 -0
- package/dist/document-tools/index.js +26 -148
- package/dist/document-tools/index.js.map +7 -1
- package/dist/document-tools/markup-download.js +51 -0
- package/dist/document-tools/markup-download.js.map +7 -0
- package/dist/document-tools/markup-store.js +138 -0
- package/dist/document-tools/markup-store.js.map +7 -0
- package/dist/document-tools/markup-transfer.js +88 -0
- package/dist/document-tools/markup-transfer.js.map +7 -0
- package/dist/document-tools/production.js +147 -0
- package/dist/document-tools/production.js.map +7 -0
- package/dist/document-tools/saved-signature.js +90 -0
- package/dist/document-tools/saved-signature.js.map +7 -0
- package/dist/document-tools/signature-requests.js +310 -0
- package/dist/document-tools/signature-requests.js.map +7 -0
- package/dist/document-tools/signing.js +127 -0
- package/dist/document-tools/signing.js.map +7 -0
- package/dist/document-tools/useDocumentBytes.js +38 -0
- package/dist/document-tools/useDocumentBytes.js.map +7 -0
- package/dist/document-tools/useDocumentMarkup.js +154 -0
- package/dist/document-tools/useDocumentMarkup.js.map +7 -0
- package/dist/document-tools/useIsOnline.js +13 -0
- package/dist/document-tools/useIsOnline.js.map +7 -0
- package/dist/document-tools/verification.js +60 -0
- package/dist/document-tools/verification.js.map +7 -0
- package/dist/documents/DocumentReview.js +220 -0
- package/dist/documents/DocumentReview.js.map +7 -0
- package/dist/documents/DraftTitleControls.js +41 -0
- package/dist/documents/DraftTitleControls.js.map +7 -0
- package/dist/documents/InlineMicButton.js +90 -0
- package/dist/documents/InlineMicButton.js.map +7 -0
- package/dist/documents/MicRecordingOverlay.js +29 -0
- package/dist/documents/MicRecordingOverlay.js.map +7 -0
- package/dist/documents/MicWaveformIndicator.js +68 -0
- package/dist/documents/MicWaveformIndicator.js.map +7 -0
- package/dist/documents/PhotoCapture.js +120 -0
- package/dist/documents/PhotoCapture.js.map +7 -0
- package/dist/documents/VideoCapture.js +129 -0
- package/dist/documents/VideoCapture.js.map +7 -0
- package/dist/documents/VoiceNoteRecorder.js +166 -0
- package/dist/documents/VoiceNoteRecorder.js.map +7 -0
- package/dist/documents/audio-segmenter.js +63 -0
- package/dist/documents/audio-segmenter.js.map +7 -0
- package/dist/documents/capture-frame.js +21 -0
- package/dist/documents/capture-frame.js.map +7 -0
- package/dist/documents/chunked-recorder.js +190 -0
- package/dist/documents/chunked-recorder.js.map +7 -0
- package/dist/documents/document-download.js +53 -0
- package/dist/documents/document-download.js.map +7 -0
- package/dist/documents/document-fields.js +109 -0
- package/dist/documents/document-fields.js.map +7 -0
- package/dist/documents/documents-cache.js +110 -0
- package/dist/documents/documents-cache.js.map +7 -0
- package/dist/documents/documents-data.js +128 -0
- package/dist/documents/documents-data.js.map +7 -0
- package/dist/documents/documents-loader.js +113 -0
- package/dist/documents/documents-loader.js.map +7 -0
- package/dist/documents/documents-writes.js +448 -0
- package/dist/documents/documents-writes.js.map +7 -0
- package/dist/documents/format-elapsed.js +10 -0
- package/dist/documents/format-elapsed.js.map +7 -0
- package/dist/documents/has-video-track.js +26 -0
- package/dist/documents/has-video-track.js.map +7 -0
- package/dist/documents/index.js +266 -0
- package/dist/documents/index.js.map +7 -0
- package/dist/documents/media-error.js +18 -0
- package/dist/documents/media-error.js.map +7 -0
- package/dist/documents/offline-documents.js +160 -0
- package/dist/documents/offline-documents.js.map +7 -0
- package/dist/documents/pending-sync.js +210 -0
- package/dist/documents/pending-sync.js.map +7 -0
- package/dist/documents/processing-live.js +122 -0
- package/dist/documents/processing-live.js.map +7 -0
- package/dist/documents/processing-order.js +59 -0
- package/dist/documents/processing-order.js.map +7 -0
- package/dist/documents/processing-settle.js +21 -0
- package/dist/documents/processing-settle.js.map +7 -0
- package/dist/documents/related-documents.js +133 -0
- package/dist/documents/related-documents.js.map +7 -0
- package/dist/documents/support.js +29 -0
- package/dist/documents/support.js.map +7 -0
- package/dist/documents/upload-files.js +169 -0
- package/dist/documents/upload-files.js.map +7 -0
- package/dist/documents/useAudioRecorder.js +315 -0
- package/dist/documents/useAudioRecorder.js.map +7 -0
- package/dist/documents/useCameraStream.js +35 -0
- package/dist/documents/useCameraStream.js.map +7 -0
- package/dist/documents/useDocumentThumbnails.js +71 -0
- package/dist/documents/useDocumentThumbnails.js.map +7 -0
- package/dist/documents/useDownloadDocuments.js +90 -0
- package/dist/documents/useDownloadDocuments.js.map +7 -0
- package/dist/documents/usePassageQuotes.js +37 -0
- package/dist/documents/usePassageQuotes.js.map +7 -0
- package/dist/documents/useUploadFiles.js +165 -0
- package/dist/documents/useUploadFiles.js.map +7 -0
- package/dist/documents/useUploadFromUrls.js +63 -0
- package/dist/documents/useUploadFromUrls.js.map +7 -0
- package/dist/documents/useVideoRecorder.js +62 -0
- package/dist/documents/useVideoRecorder.js.map +7 -0
- package/dist/entities/AgentMarkers.js +61 -0
- package/dist/entities/AgentMarkers.js.map +7 -0
- package/dist/entities/DocumentEntity.js +125 -0
- package/dist/entities/DocumentEntity.js.map +7 -0
- package/dist/entities/EntityPill.js +250 -0
- package/dist/entities/EntityPill.js.map +7 -0
- package/dist/entities/ProjectEntity.js +61 -0
- package/dist/entities/ProjectEntity.js.map +7 -0
- package/dist/entities/ShieldIcon.js +49 -0
- package/dist/entities/ShieldIcon.js.map +7 -0
- package/dist/entities/TagEntity.js +79 -0
- package/dist/entities/TagEntity.js.map +7 -0
- package/dist/entities/ThreadVisibilityIcon.js +15 -0
- package/dist/entities/ThreadVisibilityIcon.js.map +7 -0
- package/dist/entities/UserEntity.js +211 -0
- package/dist/entities/UserEntity.js.map +7 -0
- package/dist/entities/VerifiedBadge.js +19 -0
- package/dist/entities/VerifiedBadge.js.map +7 -0
- package/dist/entities/agent-avatar-colors.js +26 -0
- package/dist/entities/agent-avatar-colors.js.map +7 -0
- package/dist/entities/colors.js +64 -0
- package/dist/entities/colors.js.map +7 -0
- package/dist/entities/file-type.js +151 -0
- package/dist/entities/file-type.js.map +7 -0
- package/dist/entities/index.js +100 -0
- package/dist/entities/index.js.map +7 -0
- package/dist/entities/media-type.js +61 -0
- package/dist/entities/media-type.js.map +7 -0
- package/dist/entities/registry.js +385 -0
- package/dist/entities/registry.js.map +7 -0
- package/dist/entities/status.js +43 -0
- package/dist/entities/status.js.map +7 -0
- package/dist/entities/tag-kinds.js +23 -0
- package/dist/entities/tag-kinds.js.map +7 -0
- package/dist/entities/tag-types.js +44 -0
- package/dist/entities/tag-types.js.map +7 -0
- package/dist/entities/vocabulary.js +12 -0
- package/dist/entities/vocabulary.js.map +7 -0
- package/dist/entity-extraction.js +25 -0
- package/dist/entity-extraction.js.map +7 -0
- package/dist/facts-search.js +57 -0
- package/dist/facts-search.js.map +7 -0
- package/dist/facts.js +69 -0
- package/dist/facts.js.map +7 -0
- package/dist/hooks.js +320 -0
- package/dist/hooks.js.map +7 -0
- package/dist/host/ArbiHost.js +24 -0
- package/dist/host/ArbiHost.js.map +7 -0
- package/dist/host/assistant-copy.js +54 -0
- package/dist/host/assistant-copy.js.map +7 -0
- package/dist/host/config.js +9 -0
- package/dist/host/config.js.map +7 -0
- package/dist/host/context.js +10 -0
- package/dist/host/context.js.map +7 -0
- package/dist/host/features.js +144 -0
- package/dist/host/features.js.map +7 -0
- package/dist/host/index.js +12 -0
- package/dist/host/index.js.map +7 -0
- package/dist/{chunk-DPYBZDJB.js → host/merge.js} +7 -7
- package/dist/host/merge.js.map +7 -0
- package/dist/house-template.js +40 -0
- package/dist/house-template.js.map +7 -0
- package/dist/icons/AppleIcon.js +25 -0
- package/dist/icons/AppleIcon.js.map +7 -0
- package/dist/icons/ArbiBotHeadIcon.js +46 -0
- package/dist/icons/ArbiBotHeadIcon.js.map +7 -0
- package/dist/icons/ArbiIcon.js +24 -0
- package/dist/icons/ArbiIcon.js.map +7 -0
- package/dist/icons/AudIcon.js +56 -0
- package/dist/icons/AudIcon.js.map +7 -0
- package/dist/icons/ClaudeIcon.js +28 -0
- package/dist/icons/ClaudeIcon.js.map +7 -0
- package/dist/icons/DocIcon.js +56 -0
- package/dist/icons/DocIcon.js.map +7 -0
- package/dist/icons/EmlIcon.js +57 -0
- package/dist/icons/EmlIcon.js.map +7 -0
- package/dist/icons/FireworksIcon.js +47 -0
- package/dist/icons/FireworksIcon.js.map +7 -0
- package/dist/icons/GeminiIcon.js +37 -0
- package/dist/icons/GeminiIcon.js.map +7 -0
- package/dist/icons/GitHubIcon.js +32 -0
- package/dist/icons/GitHubIcon.js.map +7 -0
- package/dist/icons/GoogleIcon.js +53 -0
- package/dist/icons/GoogleIcon.js.map +7 -0
- package/dist/icons/HtmlIcon.js +56 -0
- package/dist/icons/HtmlIcon.js.map +7 -0
- package/dist/icons/ImgIcon.js +56 -0
- package/dist/icons/ImgIcon.js.map +7 -0
- package/dist/icons/LinkedInIcon.js +25 -0
- package/dist/icons/LinkedInIcon.js.map +7 -0
- package/dist/icons/OpenAIIcon.js +28 -0
- package/dist/icons/OpenAIIcon.js.map +7 -0
- package/dist/icons/PdfIcon.js +56 -0
- package/dist/icons/PdfIcon.js.map +7 -0
- package/dist/icons/ProviderIcon.js +42 -0
- package/dist/icons/ProviderIcon.js.map +7 -0
- package/dist/icons/TxtIcon.js +56 -0
- package/dist/icons/TxtIcon.js.map +7 -0
- package/dist/icons/VidIcon.js +56 -0
- package/dist/icons/VidIcon.js.map +7 -0
- package/dist/icons/XlsIcon.js +56 -0
- package/dist/icons/XlsIcon.js.map +7 -0
- package/dist/icons/arbi-mark.js +5 -0
- package/dist/icons/arbi-mark.js.map +7 -0
- package/dist/icons/colors.js +31 -0
- package/dist/icons/colors.js.map +7 -0
- package/dist/icons/file-type.js +105 -0
- package/dist/icons/file-type.js.map +7 -0
- package/dist/icons/index.js +55 -0
- package/dist/icons/index.js.map +7 -0
- package/dist/imagecrop/ImageCropModal.js +56 -0
- package/dist/imagecrop/ImageCropModal.js.map +7 -0
- package/dist/imagecrop/ImageCropper.js +100 -0
- package/dist/imagecrop/ImageCropper.js.map +7 -0
- package/dist/imagecrop/cropImage.js +43 -0
- package/dist/imagecrop/cropImage.js.map +7 -0
- package/dist/imagecrop/index.js +13 -0
- package/dist/imagecrop/index.js.map +7 -0
- package/dist/index.js +702 -17116
- package/dist/index.js.map +7 -1
- package/dist/{chunk-SSXFVWCT.js → lazy-chunk.js} +8 -8
- package/dist/lazy-chunk.js.map +7 -0
- package/dist/lib/collision-padding.js +13 -0
- package/dist/lib/collision-padding.js.map +7 -0
- package/dist/lib/format-friendly-date.js +55 -0
- package/dist/lib/format-friendly-date.js.map +7 -0
- package/dist/lib/format-relative-time.js +52 -0
- package/dist/lib/format-relative-time.js.map +7 -0
- package/dist/lib/markdown-to-text.js +35 -0
- package/dist/lib/markdown-to-text.js.map +7 -0
- package/dist/lib/toast-interaction.js +9 -0
- package/dist/lib/toast-interaction.js.map +7 -0
- package/dist/lib/utils.js +9 -0
- package/dist/lib/utils.js.map +7 -0
- package/dist/mail/client.js +103 -0
- package/dist/mail/client.js.map +7 -0
- package/dist/mail/document-attachment.js +38 -0
- package/dist/mail/document-attachment.js.map +7 -0
- package/dist/mail/filing.js +132 -0
- package/dist/mail/filing.js.map +7 -0
- package/dist/mail/hooks.js +393 -0
- package/dist/mail/hooks.js.map +7 -0
- package/dist/mail/index.js +120 -0
- package/dist/mail/index.js.map +7 -0
- package/dist/mail/offline/changes.js +258 -0
- package/dist/mail/offline/changes.js.map +7 -0
- package/dist/mail/offline/confirm-sign-out.js +37 -0
- package/dist/mail/offline/confirm-sign-out.js.map +7 -0
- package/dist/mail/offline/crypto.js +26 -0
- package/dist/mail/offline/crypto.js.map +7 -0
- package/dist/mail/offline/drafts.js +69 -0
- package/dist/mail/offline/drafts.js.map +7 -0
- package/dist/mail/offline/hooks.js +104 -0
- package/dist/mail/offline/hooks.js.map +7 -0
- package/dist/mail/offline/index.js +48 -0
- package/dist/mail/offline/index.js.map +7 -0
- package/dist/mail/offline/live.js +233 -0
- package/dist/mail/offline/live.js.map +7 -0
- package/dist/mail/offline/mailbox.js +191 -0
- package/dist/mail/offline/mailbox.js.map +7 -0
- package/dist/mail/offline/outbox.js +167 -0
- package/dist/mail/offline/outbox.js.map +7 -0
- package/dist/mail/offline/reads.js +159 -0
- package/dist/mail/offline/reads.js.map +7 -0
- package/dist/mail/offline/runtime.js +100 -0
- package/dist/mail/offline/runtime.js.map +7 -0
- package/dist/mail/offline/settings.js +84 -0
- package/dist/mail/offline/settings.js.map +7 -0
- package/dist/mail/offline/store.js +29 -0
- package/dist/mail/offline/store.js.map +7 -0
- package/dist/mail/offline/sync.js +251 -0
- package/dist/mail/offline/sync.js.map +7 -0
- package/dist/mail/offline/wipe.js +19 -0
- package/dist/mail/offline/wipe.js.map +7 -0
- package/dist/mail/thread-keys.js +53 -0
- package/dist/mail/thread-keys.js.map +7 -0
- package/dist/mail/threads.js +71 -0
- package/dist/mail/threads.js.map +7 -0
- package/dist/mail/useMailClient.js +42 -0
- package/dist/mail/useMailClient.js.map +7 -0
- package/dist/model-connections.js +58 -0
- package/dist/model-connections.js.map +7 -0
- package/dist/notifications/ActivityFeed.js +70 -0
- package/dist/notifications/ActivityFeed.js.map +7 -0
- package/dist/notifications/NotificationBell.js +200 -0
- package/dist/notifications/NotificationBell.js.map +7 -0
- package/dist/notifications/Toaster.js +24 -0
- package/dist/notifications/Toaster.js.map +7 -0
- package/dist/notifications/activity-types.js +65 -0
- package/dist/notifications/activity-types.js.map +7 -0
- package/dist/notifications/bell.js +24 -0
- package/dist/notifications/bell.js.map +7 -0
- package/dist/notifications/calendar-notifications.js +79 -0
- package/dist/notifications/calendar-notifications.js.map +7 -0
- package/dist/notifications/index.js +108 -0
- package/dist/notifications/index.js.map +7 -0
- package/dist/notifications/live.js +28 -0
- package/dist/notifications/live.js.map +7 -0
- package/dist/notifications/notification-types.js +127 -0
- package/dist/notifications/notification-types.js.map +7 -0
- package/dist/{chunk-BF5KW5ZI.js → notifications/notify-store.js} +24 -74
- package/dist/notifications/notify-store.js.map +7 -0
- package/dist/notifications/server-notifications.js +452 -0
- package/dist/notifications/server-notifications.js.map +7 -0
- package/dist/notifications/useNotifications.js +34 -0
- package/dist/notifications/useNotifications.js.map +7 -0
- package/dist/offline-store/network.js +11 -0
- package/dist/offline-store/network.js.map +7 -0
- package/dist/offline-store/store.js +136 -0
- package/dist/offline-store/store.js.map +7 -0
- package/dist/offline-store/wipe.js +8 -0
- package/dist/offline-store/wipe.js.map +7 -0
- package/dist/offline.js +58 -0
- package/dist/offline.js.map +7 -0
- package/dist/people.js +122 -0
- package/dist/people.js.map +7 -0
- package/dist/projects.js +30 -0
- package/dist/projects.js.map +7 -0
- package/dist/query-client.js +63 -0
- package/dist/query-client.js.map +7 -0
- package/dist/{chunk-ZM6N7YZH.js → query-keys.js} +18 -31
- package/dist/query-keys.js.map +7 -0
- package/dist/query-persist.js +66 -0
- package/dist/query-persist.js.map +7 -0
- package/dist/queued-writes.js +59 -0
- package/dist/queued-writes.js.map +7 -0
- package/dist/remote-control.js +67 -0
- package/dist/remote-control.js.map +7 -0
- package/dist/search/index.js +23 -0
- package/dist/search/index.js.map +7 -0
- package/dist/search/session.js +58 -0
- package/dist/search/session.js.map +7 -0
- package/dist/search/useSemanticSearch.js +82 -0
- package/dist/search/useSemanticSearch.js.map +7 -0
- package/dist/session/chat.js +512 -0
- package/dist/session/chat.js.map +7 -0
- package/dist/session/documents.js +196 -0
- package/dist/session/documents.js.map +7 -0
- package/dist/session/drafts.js +103 -0
- package/dist/session/drafts.js.map +7 -0
- package/dist/session/index.js +123 -0
- package/dist/session/index.js.map +7 -0
- package/dist/session/layout.js +339 -0
- package/dist/session/layout.js.map +7 -0
- package/dist/session/persist.js +106 -0
- package/dist/session/persist.js.map +7 -0
- package/dist/session/session-hooks.js +53 -0
- package/dist/session/session-hooks.js.map +7 -0
- package/dist/session/signed-in.js +36 -0
- package/dist/session/signed-in.js.map +7 -0
- package/dist/session/store.js +166 -0
- package/dist/session/store.js.map +7 -0
- package/dist/session/thread-tabs.js +121 -0
- package/dist/session/thread-tabs.js.map +7 -0
- package/dist/session/ui-state-storage.js +76 -0
- package/dist/session/ui-state-storage.js.map +7 -0
- package/dist/session/workspace.js +77 -0
- package/dist/session/workspace.js.map +7 -0
- package/dist/shell/index.js +43 -10
- package/dist/shell/index.js.map +7 -1
- package/dist/skill-pack.js +111 -0
- package/dist/skill-pack.js.map +7 -0
- package/dist/storage.js +186 -0
- package/dist/storage.js.map +7 -0
- package/dist/support/index.js +35 -0
- package/dist/support/index.js.map +7 -0
- package/dist/tags.js +204 -0
- package/dist/tags.js.map +7 -0
- package/dist/ui/DebouncedInput.js +109 -0
- package/dist/ui/DebouncedInput.js.map +7 -0
- package/dist/ui/DictateContext.js +8 -0
- package/dist/ui/DictateContext.js.map +7 -0
- package/dist/ui/IconToggle.js +79 -0
- package/dist/ui/IconToggle.js.map +7 -0
- package/dist/ui/VerifiedToggle.js +38 -0
- package/dist/ui/VerifiedToggle.js.map +7 -0
- package/dist/ui/VisibilityToggle.js +103 -0
- package/dist/ui/VisibilityToggle.js.map +7 -0
- package/dist/ui/avatar.js +40 -0
- package/dist/ui/avatar.js.map +7 -0
- package/dist/ui/badge.js +28 -0
- package/dist/ui/badge.js.map +7 -0
- package/dist/ui/button.js +48 -0
- package/dist/ui/button.js.map +7 -0
- package/dist/ui/card.js +90 -0
- package/dist/ui/card.js.map +7 -0
- package/dist/ui/checkbox.js +22 -0
- package/dist/ui/checkbox.js.map +7 -0
- package/dist/ui/collapsible.js +10 -0
- package/dist/ui/collapsible.js.map +7 -0
- package/dist/ui/command.js +103 -0
- package/dist/ui/command.js.map +7 -0
- package/dist/{chunk-YNNAJJ5Z.js → ui/dialog.js} +30 -68
- package/dist/ui/dialog.js.map +7 -0
- package/dist/{chunk-47CCGUWR.js → ui/dropdown-menu.js} +40 -45
- package/dist/ui/dropdown-menu.js.map +7 -0
- package/dist/ui/hover-card.js +36 -0
- package/dist/ui/hover-card.js.map +7 -0
- package/dist/ui/index.js +290 -10
- package/dist/ui/index.js.map +7 -1
- package/dist/ui/input.js +65 -0
- package/dist/ui/input.js.map +7 -0
- package/dist/ui/label.js +16 -0
- package/dist/ui/label.js.map +7 -0
- package/dist/ui/mark-menu.js +300 -0
- package/dist/ui/mark-menu.js.map +7 -0
- package/dist/ui/popover.js +40 -0
- package/dist/ui/popover.js.map +7 -0
- package/dist/ui/portal-container.js +17 -0
- package/dist/ui/portal-container.js.map +7 -0
- package/dist/ui/progress.js +24 -0
- package/dist/ui/progress.js.map +7 -0
- package/dist/ui/radio-group.js +29 -0
- package/dist/ui/radio-group.js.map +7 -0
- package/dist/ui/scroll-area.js +39 -0
- package/dist/ui/scroll-area.js.map +7 -0
- package/dist/ui/select.js +130 -0
- package/dist/ui/select.js.map +7 -0
- package/dist/ui/separator.js +23 -0
- package/dist/ui/separator.js.map +7 -0
- package/dist/ui/slider.js +23 -0
- package/dist/ui/slider.js.map +7 -0
- package/dist/ui/switch.js +28 -0
- package/dist/ui/switch.js.map +7 -0
- package/dist/ui/table.js +75 -0
- package/dist/ui/table.js.map +7 -0
- package/dist/ui/tabs.js +48 -0
- package/dist/ui/tabs.js.map +7 -0
- package/dist/ui/textarea.js +63 -0
- package/dist/ui/textarea.js.map +7 -0
- package/dist/ui/toggle-group.js +43 -0
- package/dist/ui/toggle-group.js.map +7 -0
- package/dist/ui/toggle.js +40 -0
- package/dist/ui/toggle.js.map +7 -0
- package/dist/ui/tooltip.js +215 -0
- package/dist/ui/tooltip.js.map +7 -0
- package/dist/usage-metered.js +8 -0
- package/dist/usage-metered.js.map +7 -0
- package/dist/useArbi.js +16 -0
- package/dist/useArbi.js.map +7 -0
- package/dist/useInstallSkillPack.js +81 -0
- package/dist/useInstallSkillPack.js.map +7 -0
- package/dist/usermenu/UserMenu.js +188 -0
- package/dist/usermenu/UserMenu.js.map +7 -0
- package/dist/usermenu/index.js +5 -0
- package/dist/usermenu/index.js.map +7 -0
- package/dist/users/index.js +15 -0
- package/dist/users/index.js.map +7 -0
- package/dist/users/user-display.js +60 -0
- package/dist/users/user-display.js.map +7 -0
- package/dist/viewers/AudioViewer.js +23 -0
- package/dist/viewers/AudioViewer.js.map +7 -0
- package/dist/viewers/DocxViewer.js +81 -0
- package/dist/viewers/DocxViewer.js.map +7 -0
- package/dist/viewers/ImageViewer.js +31 -0
- package/dist/viewers/ImageViewer.js.map +7 -0
- package/dist/viewers/PdfViewer.js +19 -3
- package/dist/viewers/PdfViewer.js.map +7 -1
- package/dist/{PdfViewerImpl-TEBYF2QI.js → viewers/PdfViewerImpl.js} +25 -19
- package/dist/viewers/PdfViewerImpl.js.map +7 -0
- package/dist/viewers/VideoViewer.js +31 -0
- package/dist/viewers/VideoViewer.js.map +7 -0
- package/dist/viewers/XlsxViewer.js +102 -0
- package/dist/viewers/XlsxViewer.js.map +7 -0
- package/dist/viewers/index.js +61 -271
- package/dist/viewers/index.js.map +7 -1
- package/dist/viewers/page-scroll.js +59 -0
- package/dist/viewers/page-scroll.js.map +7 -0
- package/dist/viewers/pdf-viewer-constants.js +9 -0
- package/dist/viewers/pdf-viewer-constants.js.map +7 -0
- package/dist/{chunk-PTOP7OHG.js → viewers/pdfjs-polyfills.js} +5 -6
- package/dist/viewers/pdfjs-polyfills.js.map +7 -0
- package/dist/viewers/selection-runs.js +38 -0
- package/dist/viewers/selection-runs.js.map +7 -0
- package/dist/viewers/usePageIntersectionObserver.js +68 -0
- package/dist/viewers/usePageIntersectionObserver.js.map +7 -0
- package/dist/viewers/useProcessedChunks.js +58 -0
- package/dist/viewers/useProcessedChunks.js.map +7 -0
- package/dist/viewers/viewer-zoom.js +163 -0
- package/dist/viewers/viewer-zoom.js.map +7 -0
- package/dist/websocket/ArbiWebSocketProvider.js +207 -0
- package/dist/websocket/ArbiWebSocketProvider.js.map +7 -0
- package/dist/websocket/context.js +14 -0
- package/dist/websocket/context.js.map +7 -0
- package/dist/websocket/hooks.js +30 -0
- package/dist/websocket/hooks.js.map +7 -0
- package/dist/websocket/index.js +22 -0
- package/dist/websocket/index.js.map +7 -0
- package/dist/websocket/live-updates.js +38 -0
- package/dist/websocket/live-updates.js.map +7 -0
- package/dist/websocket/reconnect.js +13 -0
- package/dist/websocket/reconnect.js.map +7 -0
- package/dist/websocket/store.js +58 -0
- package/dist/websocket/store.js.map +7 -0
- package/dist/workforce.js +607 -0
- package/dist/workforce.js.map +7 -0
- package/dist/workspaces/access-request.js +35 -0
- package/dist/workspaces/access-request.js.map +7 -0
- package/dist/workspaces/archive.js +59 -0
- package/dist/workspaces/archive.js.map +7 -0
- package/dist/workspaces/current.js +20 -0
- package/dist/workspaces/current.js.map +7 -0
- package/dist/workspaces/delete-workspaces.js +15 -0
- package/dist/workspaces/delete-workspaces.js.map +7 -0
- package/dist/workspaces/export-archive.js +40 -0
- package/dist/workspaces/export-archive.js.map +7 -0
- package/dist/workspaces/index.js +99 -0
- package/dist/workspaces/index.js.map +7 -0
- package/dist/workspaces/settings.js +45 -0
- package/dist/workspaces/settings.js.map +7 -0
- package/dist/workspaces/shell-workspaces.js +49 -0
- package/dist/workspaces/shell-workspaces.js.map +7 -0
- package/dist/workspaces/switch.js +234 -0
- package/dist/workspaces/switch.js.map +7 -0
- package/dist/workspaces/transfer.js +170 -0
- package/dist/workspaces/transfer.js.map +7 -0
- package/dist/workspaces/useShellWorkspaces.js +86 -0
- package/dist/workspaces/useShellWorkspaces.js.map +7 -0
- package/dist/workspaces/workspace-users.js +65 -0
- package/dist/workspaces/workspace-users.js.map +7 -0
- package/package.json +4 -4
- package/dist/PdfViewerImpl-TEBYF2QI.js.map +0 -1
- package/dist/PdfViewerImpl.d-B28hLEuj.d.cts +0 -62
- package/dist/ProductionDialog.d-CpzslFn0.d.cts +0 -51
- package/dist/annotations/freeze/index.d.cts +0 -205
- package/dist/annotations/index.d.cts +0 -360
- package/dist/artifacts/index.d.cts +0 -476
- package/dist/artifacts/redline-core.d.cts +0 -39
- package/dist/bundle-YNOX7VIL.js +0 -5
- package/dist/bundle-YNOX7VIL.js.map +0 -1
- package/dist/bundle.d-BnCSbHy2.d.cts +0 -85
- package/dist/calls/livekit/index.d.cts +0 -280
- package/dist/chunk-47CCGUWR.js.map +0 -1
- package/dist/chunk-4FL3X3LA.js +0 -2057
- package/dist/chunk-4FL3X3LA.js.map +0 -1
- package/dist/chunk-6QNBSXCE.js +0 -271
- package/dist/chunk-6QNBSXCE.js.map +0 -1
- package/dist/chunk-74N436VK.js.map +0 -1
- package/dist/chunk-APZZQZ6P.js +0 -147
- package/dist/chunk-APZZQZ6P.js.map +0 -1
- package/dist/chunk-BF5KW5ZI.js.map +0 -1
- package/dist/chunk-DPYBZDJB.js.map +0 -1
- package/dist/chunk-DZKRL5H3.js +0 -2766
- package/dist/chunk-DZKRL5H3.js.map +0 -1
- package/dist/chunk-HDCRPPBW.js +0 -75
- package/dist/chunk-HDCRPPBW.js.map +0 -1
- package/dist/chunk-L2IPPTVC.js +0 -20
- package/dist/chunk-L2IPPTVC.js.map +0 -1
- package/dist/chunk-LSU4UPS5.js +0 -1011
- package/dist/chunk-LSU4UPS5.js.map +0 -1
- package/dist/chunk-NIKPG4PW.js +0 -1128
- package/dist/chunk-NIKPG4PW.js.map +0 -1
- package/dist/chunk-NNAJLY6B.js +0 -4974
- package/dist/chunk-NNAJLY6B.js.map +0 -1
- package/dist/chunk-OYPKKHXY.js +0 -559
- package/dist/chunk-OYPKKHXY.js.map +0 -1
- package/dist/chunk-PTOP7OHG.js.map +0 -1
- package/dist/chunk-QMY2JKBI.js +0 -246
- package/dist/chunk-QMY2JKBI.js.map +0 -1
- package/dist/chunk-SN5YV6FF.js +0 -11
- package/dist/chunk-SN5YV6FF.js.map +0 -1
- package/dist/chunk-SSXFVWCT.js.map +0 -1
- package/dist/chunk-T3USOSVN.js.map +0 -1
- package/dist/chunk-T4CLW3DN.js +0 -2560
- package/dist/chunk-T4CLW3DN.js.map +0 -1
- package/dist/chunk-UW2SGTI5.js.map +0 -1
- package/dist/chunk-VSCU7K4V.js.map +0 -1
- package/dist/chunk-WL2Y2T47.js.map +0 -1
- package/dist/chunk-WUTL62MC.js.map +0 -1
- package/dist/chunk-XWPLOFDN.js +0 -644
- package/dist/chunk-XWPLOFDN.js.map +0 -1
- package/dist/chunk-Y3MTRA7D.js +0 -97
- package/dist/chunk-Y3MTRA7D.js.map +0 -1
- package/dist/chunk-YNNAJJ5Z.js.map +0 -1
- package/dist/chunk-ZM6N7YZH.js.map +0 -1
- package/dist/document-tools/core.d.cts +0 -883
- package/dist/document-tools/index.d.cts +0 -90
- package/dist/index.d-LArLnpI8.d.cts +0 -2036
- package/dist/index.d-oR5FKZpJ.d.cts +0 -579
- package/dist/index.d.cts +0 -15923
- package/dist/lazy-chunk.d-B6YDLMKI.d.cts +0 -31
- package/dist/model.d-CNtRWKVK.d.cts +0 -110
- package/dist/query-keys.d-B1Am9tIF.d.cts +0 -337
- package/dist/shell/index.d.cts +0 -6
- package/dist/store.d-GADDvC7w.d.cts +0 -35
- package/dist/stored-markdown.d-Bp18vrbr.d.cts +0 -125
- package/dist/ui/index.d.cts +0 -26
- package/dist/useAudioRecorder.d-B9rlMI_E.d.cts +0 -778
- package/dist/viewers/PdfViewer.d.cts +0 -9
- package/dist/viewers/index.d.cts +0 -262
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef } from "react";
|
|
2
|
+
import { onlineManager } from "@tanstack/react-query";
|
|
3
|
+
import { useArbiSession } from "./session/signed-in.js";
|
|
4
|
+
import { useArbiSessionState, useArbiSessionStore } from "./session/session-hooks.js";
|
|
5
|
+
import { useArbiWsStore } from "./websocket/store.js";
|
|
6
|
+
const WORK_OFFLINE_VIEW = "app.workOffline";
|
|
7
|
+
const isWorkingOffline = (session) => session.getState().views.transient[WORK_OFFLINE_VIEW] === true;
|
|
8
|
+
const setWorkOfflineIn = (session, on) => session.setTransientView(WORK_OFFLINE_VIEW, on || void 0);
|
|
9
|
+
function useWorkOffline() {
|
|
10
|
+
const session = useArbiSessionStore();
|
|
11
|
+
const on = useArbiSessionState((s) => s.views.transient[WORK_OFFLINE_VIEW] === true);
|
|
12
|
+
const set = useCallback((next) => setWorkOfflineIn(session, next), [session]);
|
|
13
|
+
return [on, set];
|
|
14
|
+
}
|
|
15
|
+
function computeOnline(wsStatus, isAuthenticated, workOffline, wsEverConnected) {
|
|
16
|
+
if (workOffline) return false;
|
|
17
|
+
const navOnline = typeof navigator === "undefined" ? true : navigator.onLine;
|
|
18
|
+
const wsIsEvidence = isAuthenticated && wsEverConnected;
|
|
19
|
+
const wsOnline = !wsIsEvidence || wsStatus !== "disconnected" && wsStatus !== "error";
|
|
20
|
+
return navOnline && wsOnline;
|
|
21
|
+
}
|
|
22
|
+
function useOnlineSync() {
|
|
23
|
+
const session = useArbiSessionStore();
|
|
24
|
+
const wsStatus = useArbiWsStore((s) => s.status);
|
|
25
|
+
const signedIn = useArbiSession().status === "signed-in";
|
|
26
|
+
const [workOffline] = useWorkOffline();
|
|
27
|
+
const wsEverConnected = useRef(false);
|
|
28
|
+
if (wsStatus === "connected") wsEverConnected.current = true;
|
|
29
|
+
const signedInRef = useRef(signedIn);
|
|
30
|
+
signedInRef.current = signedIn;
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
onlineManager.setOnline(computeOnline(wsStatus, signedIn, workOffline, wsEverConnected.current));
|
|
33
|
+
}, [wsStatus, signedIn, workOffline]);
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
const update = () => onlineManager.setOnline(
|
|
36
|
+
computeOnline(
|
|
37
|
+
useArbiWsStore.getState().status,
|
|
38
|
+
signedInRef.current,
|
|
39
|
+
isWorkingOffline(session),
|
|
40
|
+
wsEverConnected.current
|
|
41
|
+
)
|
|
42
|
+
);
|
|
43
|
+
window.addEventListener("online", update);
|
|
44
|
+
window.addEventListener("offline", update);
|
|
45
|
+
return () => {
|
|
46
|
+
window.removeEventListener("online", update);
|
|
47
|
+
window.removeEventListener("offline", update);
|
|
48
|
+
};
|
|
49
|
+
}, [session]);
|
|
50
|
+
}
|
|
51
|
+
function useReconnect() {
|
|
52
|
+
const session = useArbiSessionStore();
|
|
53
|
+
return useCallback(() => {
|
|
54
|
+
if (isWorkingOffline(session)) {
|
|
55
|
+
setWorkOfflineIn(session, false);
|
|
56
|
+
return "resumed";
|
|
57
|
+
}
|
|
58
|
+
if (typeof navigator !== "undefined" && navigator.onLine === false) return "no-network";
|
|
59
|
+
window.location.reload();
|
|
60
|
+
return "reloading";
|
|
61
|
+
}, [session]);
|
|
62
|
+
}
|
|
63
|
+
export {
|
|
64
|
+
WORK_OFFLINE_VIEW,
|
|
65
|
+
computeOnline,
|
|
66
|
+
isWorkingOffline,
|
|
67
|
+
setWorkOfflineIn,
|
|
68
|
+
useOnlineSync,
|
|
69
|
+
useReconnect,
|
|
70
|
+
useWorkOffline
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=connectivity.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/connectivity.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Whether the site is online, for every host. React Query's `onlineManager` follows three things:\n * - the browser's network;\n * - the live connection: once it has been up, a dropped socket means the server cannot be reached;\n * - the person's own \"Work offline\" choice.\n *\n * Offline, queries serve their cache and writes wait until the connection is back.\n *\n * `ArbiWebSocketProvider` runs {@link useOnlineSync}. {@link useWorkOffline} is the one \"Work\n * offline\" switch, used by the settings toggle and the account menu; the offline pill's Reconnect\n * clears it through {@link useReconnect}.\n * The choice is a transient view of the session: this session's only and never saved, as a saved\n * `true` would boot the app offline and stall the sign-in.\n */\nimport { useCallback, useEffect, useRef } from 'react'\nimport { onlineManager } from '@tanstack/react-query'\nimport { useArbiSession } from './session/signed-in'\nimport { useArbiSessionState, useArbiSessionStore } from './session/session-hooks'\nimport type { ArbiSessionStore } from './session/store'\nimport { useArbiWsStore, type ArbiWsStatus } from './websocket/store'\n\n/** The session's transient view holding the \"Work offline\" choice. */\nexport const WORK_OFFLINE_VIEW = 'app.workOffline'\n\n/** Whether the person chose \"Work offline\" (outside React). */\nexport const isWorkingOffline = (session: Pick<ArbiSessionStore, 'getState'>): boolean =>\n session.getState().views.transient[WORK_OFFLINE_VIEW] === true\n\n/** Turn \"Work offline\" on or off (outside React). */\nexport const setWorkOfflineIn = (\n session: Pick<ArbiSessionStore, 'setTransientView'>,\n on: boolean\n): void => session.setTransientView(WORK_OFFLINE_VIEW, on || undefined)\n\n/** The \"Work offline\" choice and its setter. */\nexport function useWorkOffline(): [boolean, (on: boolean) => void] {\n const session = useArbiSessionStore()\n const on = useArbiSessionState((s) => s.views.transient[WORK_OFFLINE_VIEW] === true)\n const set = useCallback((next: boolean) => setWorkOfflineIn(session, next), [session])\n return [on, set]\n}\n\n/**\n * Online or not, from the socket's status, the session, the \"Work offline\" choice and whether the\n * socket has ever connected in this tab.\n */\nexport function computeOnline(\n wsStatus: ArbiWsStatus | undefined,\n isAuthenticated: boolean,\n workOffline: boolean,\n /** Until the socket has been up once, 'disconnected' means \"not connected yet\", not \"dropped\". */\n wsEverConnected: boolean\n): boolean {\n // A deliberate \"Work offline\" choice wins over actual reachability.\n if (workOffline) return false\n const navOnline = typeof navigator === 'undefined' ? true : navigator.onLine\n // The socket is evidence only once a session should be holding it open. Before sign-in it is\n // down by design: reading that as offline would pause the sign-in request forever, and the app\n // would hang on \"Signing in\u2026\". Right after a reload the session is back a tick before the\n // socket's handshake: reading that as offline would tell the person they are offline on a\n // working network, and stop the workspace switch restoring the workspace they reloaded on.\n // 'connecting' counts as online, to avoid flapping.\n const wsIsEvidence = isAuthenticated && wsEverConnected\n const wsOnline = !wsIsEvidence || (wsStatus !== 'disconnected' && wsStatus !== 'error')\n return navOnline && wsOnline\n}\n\n/** Drive `onlineManager` from the network, the live connection and \"Work offline\". */\nexport function useOnlineSync(): void {\n const session = useArbiSessionStore()\n const wsStatus = useArbiWsStore((s) => s.status)\n const signedIn = useArbiSession().status === 'signed-in'\n const [workOffline] = useWorkOffline()\n\n // Latches on the first 'connected' and never clears: after that, a drop is a real drop. A ref,\n // not state: the 'connected' status that sets it already renders.\n const wsEverConnected = useRef(false)\n if (wsStatus === 'connected') wsEverConnected.current = true\n const signedInRef = useRef(signedIn)\n signedInRef.current = signedIn\n\n useEffect(() => {\n onlineManager.setOnline(computeOnline(wsStatus, signedIn, workOffline, wsEverConnected.current))\n }, [wsStatus, signedIn, workOffline])\n\n useEffect(() => {\n const update = () =>\n onlineManager.setOnline(\n computeOnline(\n useArbiWsStore.getState().status,\n signedInRef.current,\n isWorkingOffline(session),\n wsEverConnected.current\n )\n )\n window.addEventListener('online', update)\n window.addEventListener('offline', update)\n return () => {\n window.removeEventListener('online', update)\n window.removeEventListener('offline', update)\n }\n }, [session])\n}\n\n/** What a reconnect did. */\nexport type ReconnectOutcome = 'resumed' | 'no-network' | 'reloading'\n\n/**\n * Reconnect, cheapest path first:\n * - offline only by choice: clear it, and the queued writes resume in place (no reload);\n * - no network: there is nothing to reconnect to yet;\n * - otherwise the socket gave up after a real drop: reload, which reopens it, renews the session\n * and replays the queue.\n */\nexport function useReconnect(): () => ReconnectOutcome {\n const session = useArbiSessionStore()\n return useCallback(() => {\n if (isWorkingOffline(session)) {\n setWorkOfflineIn(session, false)\n return 'resumed'\n }\n if (typeof navigator !== 'undefined' && navigator.onLine === false) return 'no-network'\n window.location.reload()\n return 'reloading'\n }, [session])\n}\n"],
|
|
5
|
+
"mappings": "AAcA,SAAS,aAAa,WAAW,cAAc;AAC/C,SAAS,qBAAqB;AAC9B,SAAS,sBAAsB;AAC/B,SAAS,qBAAqB,2BAA2B;AAEzD,SAAS,sBAAyC;AAG3C,MAAM,oBAAoB;AAG1B,MAAM,mBAAmB,CAAC,YAC/B,QAAQ,SAAS,EAAE,MAAM,UAAU,iBAAiB,MAAM;AAGrD,MAAM,mBAAmB,CAC9B,SACA,OACS,QAAQ,iBAAiB,mBAAmB,MAAM,MAAS;AAG/D,SAAS,iBAAmD;AACjE,QAAM,UAAU,oBAAoB;AACpC,QAAM,KAAK,oBAAoB,CAAC,MAAM,EAAE,MAAM,UAAU,iBAAiB,MAAM,IAAI;AACnF,QAAM,MAAM,YAAY,CAAC,SAAkB,iBAAiB,SAAS,IAAI,GAAG,CAAC,OAAO,CAAC;AACrF,SAAO,CAAC,IAAI,GAAG;AACjB;AAMO,SAAS,cACd,UACA,iBACA,aAEA,iBACS;AAET,MAAI,YAAa,QAAO;AACxB,QAAM,YAAY,OAAO,cAAc,cAAc,OAAO,UAAU;AAOtE,QAAM,eAAe,mBAAmB;AACxC,QAAM,WAAW,CAAC,gBAAiB,aAAa,kBAAkB,aAAa;AAC/E,SAAO,aAAa;AACtB;AAGO,SAAS,gBAAsB;AACpC,QAAM,UAAU,oBAAoB;AACpC,QAAM,WAAW,eAAe,CAAC,MAAM,EAAE,MAAM;AAC/C,QAAM,WAAW,eAAe,EAAE,WAAW;AAC7C,QAAM,CAAC,WAAW,IAAI,eAAe;AAIrC,QAAM,kBAAkB,OAAO,KAAK;AACpC,MAAI,aAAa,YAAa,iBAAgB,UAAU;AACxD,QAAM,cAAc,OAAO,QAAQ;AACnC,cAAY,UAAU;AAEtB,YAAU,MAAM;AACd,kBAAc,UAAU,cAAc,UAAU,UAAU,aAAa,gBAAgB,OAAO,CAAC;AAAA,EACjG,GAAG,CAAC,UAAU,UAAU,WAAW,CAAC;AAEpC,YAAU,MAAM;AACd,UAAM,SAAS,MACb,cAAc;AAAA,MACZ;AAAA,QACE,eAAe,SAAS,EAAE;AAAA,QAC1B,YAAY;AAAA,QACZ,iBAAiB,OAAO;AAAA,QACxB,gBAAgB;AAAA,MAClB;AAAA,IACF;AACF,WAAO,iBAAiB,UAAU,MAAM;AACxC,WAAO,iBAAiB,WAAW,MAAM;AACzC,WAAO,MAAM;AACX,aAAO,oBAAoB,UAAU,MAAM;AAC3C,aAAO,oBAAoB,WAAW,MAAM;AAAA,IAC9C;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AACd;AAYO,SAAS,eAAuC;AACrD,QAAM,UAAU,oBAAoB;AACpC,SAAO,YAAY,MAAM;AACvB,QAAI,iBAAiB,OAAO,GAAG;AAC7B,uBAAiB,SAAS,KAAK;AAC/B,aAAO;AAAA,IACT;AACA,QAAI,OAAO,cAAc,eAAe,UAAU,WAAW,MAAO,QAAO;AAC3E,WAAO,SAAS,OAAO;AACvB,WAAO;AAAA,EACT,GAAG,CAAC,OAAO,CAAC;AACd;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { useEffect, useRef } from "react";
|
|
2
|
+
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
3
|
+
import { ArbiApiError, isConnectorVendorVisible } from "@arbidocs/sdk/browser";
|
|
4
|
+
import { logger } from "@arbidocs/client";
|
|
5
|
+
import { useArbi } from "../useArbi.js";
|
|
6
|
+
import { useUserSettings } from "../account/settings.js";
|
|
7
|
+
import { useIsEntitled } from "../account/entitlements.js";
|
|
8
|
+
import { connectorQueryKeys } from "../query-keys.js";
|
|
9
|
+
import { connectorQueryKeys as connectorQueryKeys2, mailQueryKeys } from "../query-keys.js";
|
|
10
|
+
function useConnectorMutation(mutationFn) {
|
|
11
|
+
const qc = useQueryClient();
|
|
12
|
+
return useMutation({
|
|
13
|
+
mutationFn,
|
|
14
|
+
onSuccess: () => qc.invalidateQueries({ queryKey: connectorQueryKeys2.all() })
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
function useConnectorCatalog() {
|
|
18
|
+
const arbi = useArbi();
|
|
19
|
+
return useQuery({
|
|
20
|
+
queryKey: connectorQueryKeys2.catalog(),
|
|
21
|
+
queryFn: () => arbi.connectors.catalog(),
|
|
22
|
+
staleTime: 5 * 6e4,
|
|
23
|
+
enabled: arbi.isLoggedIn
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function useMyConnectors() {
|
|
27
|
+
const arbi = useArbi();
|
|
28
|
+
return useQuery({
|
|
29
|
+
queryKey: connectorQueryKeys2.mine(),
|
|
30
|
+
queryFn: () => arbi.connectors.mine(),
|
|
31
|
+
staleTime: 3e4,
|
|
32
|
+
enabled: arbi.isLoggedIn
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
function useDisconnectConnector() {
|
|
36
|
+
const arbi = useArbi();
|
|
37
|
+
return useConnectorMutation(
|
|
38
|
+
({ vendorKey }) => arbi.connectors.disconnect(vendorKey)
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
function useConnectorVendorVisibility() {
|
|
42
|
+
const { data: settings } = useUserSettings();
|
|
43
|
+
return (vendorKey) => isConnectorVendorVisible(settings, vendorKey);
|
|
44
|
+
}
|
|
45
|
+
function connectorReturnTo(reopen) {
|
|
46
|
+
const params = new URLSearchParams(window.location.search);
|
|
47
|
+
params.delete("connected");
|
|
48
|
+
params.delete("connect_error");
|
|
49
|
+
params.set("stay", "1");
|
|
50
|
+
if (reopen) params.set("reopen", reopen);
|
|
51
|
+
else params.delete("reopen");
|
|
52
|
+
return `${window.location.pathname}?${params.toString()}`;
|
|
53
|
+
}
|
|
54
|
+
function useMailboxFolders(vendorKey, enabled) {
|
|
55
|
+
const arbi = useArbi();
|
|
56
|
+
return useQuery({
|
|
57
|
+
queryKey: connectorQueryKeys2.mailboxFolders(vendorKey),
|
|
58
|
+
queryFn: () => arbi.connectors.mailboxFolders(vendorKey),
|
|
59
|
+
enabled: enabled && arbi.isLoggedIn,
|
|
60
|
+
staleTime: 6e4
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
function useEnableMailboxSync() {
|
|
64
|
+
const arbi = useArbi();
|
|
65
|
+
return useConnectorMutation(
|
|
66
|
+
(v) => arbi.connectors.enableMailboxSync(v.vendorKey, {
|
|
67
|
+
workspace_ext_id: v.workspaceExtId,
|
|
68
|
+
backfill_window: v.backfillWindow,
|
|
69
|
+
backfill_since: v.backfillSince ?? null,
|
|
70
|
+
folders: v.folders,
|
|
71
|
+
skip_duplicates: v.skipDuplicates,
|
|
72
|
+
auto_rename: v.autoRename ?? false,
|
|
73
|
+
shared: v.shared ?? false,
|
|
74
|
+
auto_sync: v.autoSync
|
|
75
|
+
})
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
function useTriggerMailboxSync() {
|
|
79
|
+
const arbi = useArbi();
|
|
80
|
+
return useConnectorMutation(
|
|
81
|
+
({ vendorKey, workspaceExtId }) => arbi.connectors.syncMailbox(vendorKey, workspaceExtId)
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
function useMailboxSyncProgress(vendorKey, workspaceExtId, enabled) {
|
|
85
|
+
const arbi = useArbi();
|
|
86
|
+
return useQuery({
|
|
87
|
+
queryKey: connectorQueryKeys2.mailboxSyncProgress(vendorKey, workspaceExtId),
|
|
88
|
+
queryFn: () => arbi.connectors.mailboxSyncProgress(vendorKey, workspaceExtId),
|
|
89
|
+
enabled: enabled && !!workspaceExtId && arbi.isLoggedIn,
|
|
90
|
+
refetchInterval: (query) => query.state.data?.running ? 1500 : false,
|
|
91
|
+
staleTime: 0
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
function useCancelMailboxSync() {
|
|
95
|
+
const arbi = useArbi();
|
|
96
|
+
return useMutation({
|
|
97
|
+
mutationFn: ({ vendorKey, workspaceExtId }) => arbi.connectors.cancelMailboxSync(vendorKey, workspaceExtId)
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
function useDriveFolders(vendorKey, enabled) {
|
|
101
|
+
const arbi = useArbi();
|
|
102
|
+
return useQuery({
|
|
103
|
+
queryKey: connectorQueryKeys2.driveFolders(vendorKey),
|
|
104
|
+
queryFn: () => arbi.connectors.driveFolders(vendorKey),
|
|
105
|
+
enabled: enabled && arbi.isLoggedIn,
|
|
106
|
+
retry: false,
|
|
107
|
+
staleTime: 6e4
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
function useDriveFolderChildren(vendorKey, itemId, enabled) {
|
|
111
|
+
const arbi = useArbi();
|
|
112
|
+
return useQuery({
|
|
113
|
+
queryKey: connectorQueryKeys2.driveFolderChildren(vendorKey, itemId),
|
|
114
|
+
queryFn: () => arbi.connectors.driveFolderChildren(vendorKey, itemId),
|
|
115
|
+
enabled: enabled && arbi.isLoggedIn,
|
|
116
|
+
staleTime: 3e4
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
function useDriveFolderDocCount(vendorKey, itemId, enabled) {
|
|
120
|
+
const arbi = useArbi();
|
|
121
|
+
return useQuery({
|
|
122
|
+
queryKey: connectorQueryKeys2.driveFolderDocCount(vendorKey, itemId),
|
|
123
|
+
queryFn: () => arbi.connectors.driveFolderDocCount(vendorKey, itemId),
|
|
124
|
+
enabled: enabled && arbi.isLoggedIn,
|
|
125
|
+
staleTime: 5 * 6e4
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
function useEnableDriveSync() {
|
|
129
|
+
const arbi = useArbi();
|
|
130
|
+
return useConnectorMutation(
|
|
131
|
+
(v) => arbi.connectors.enableDriveSync(v.vendorKey, {
|
|
132
|
+
workspace_ext_id: v.workspaceExtId,
|
|
133
|
+
folders: v.folders,
|
|
134
|
+
skip_duplicates: v.skipDuplicates,
|
|
135
|
+
auto_rename: v.autoRename,
|
|
136
|
+
shared: v.shared,
|
|
137
|
+
auto_sync: v.autoSync
|
|
138
|
+
})
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
function useTriggerDriveSync() {
|
|
142
|
+
const arbi = useArbi();
|
|
143
|
+
return useConnectorMutation(
|
|
144
|
+
({ vendorKey }) => arbi.connectors.syncDrive(vendorKey)
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
function useDriveSyncEstimate(vendorKey, enabled) {
|
|
148
|
+
const arbi = useArbi();
|
|
149
|
+
return useQuery({
|
|
150
|
+
queryKey: connectorQueryKeys2.driveSyncEstimate(vendorKey),
|
|
151
|
+
queryFn: () => arbi.connectors.driveSyncEstimate(vendorKey),
|
|
152
|
+
enabled: enabled && arbi.isLoggedIn,
|
|
153
|
+
staleTime: 3e4
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
function useDriveSyncProgress(vendorKey, enabled) {
|
|
157
|
+
const arbi = useArbi();
|
|
158
|
+
return useQuery({
|
|
159
|
+
queryKey: connectorQueryKeys2.driveSyncProgress(vendorKey),
|
|
160
|
+
queryFn: () => arbi.connectors.driveSyncProgress(vendorKey),
|
|
161
|
+
enabled: enabled && arbi.isLoggedIn,
|
|
162
|
+
refetchInterval: (query) => query.state.data?.running ? 1500 : false,
|
|
163
|
+
staleTime: 0
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
function useCancelDriveSync() {
|
|
167
|
+
const arbi = useArbi();
|
|
168
|
+
return useMutation({
|
|
169
|
+
mutationFn: ({ vendorKey }) => arbi.connectors.cancelDriveSync(vendorKey)
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
function useSlackConnection() {
|
|
173
|
+
const arbi = useArbi();
|
|
174
|
+
return useQuery({
|
|
175
|
+
queryKey: connectorQueryKeys2.slack(),
|
|
176
|
+
queryFn: () => arbi.connectors.slack.status(),
|
|
177
|
+
enabled: arbi.isLoggedIn,
|
|
178
|
+
// Fresh on every visit: the OAuth return lands here before the status changed server-side.
|
|
179
|
+
staleTime: 0,
|
|
180
|
+
refetchOnMount: "always",
|
|
181
|
+
refetchOnWindowFocus: true
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
function useDisconnectSlack() {
|
|
185
|
+
const arbi = useArbi();
|
|
186
|
+
return useConnectorMutation(() => arbi.connectors.slack.disconnect());
|
|
187
|
+
}
|
|
188
|
+
function useRefreshConnectorsOnRunEnd(running) {
|
|
189
|
+
const qc = useQueryClient();
|
|
190
|
+
const wasRunning = useRef(running);
|
|
191
|
+
useEffect(() => {
|
|
192
|
+
if (wasRunning.current && !running) {
|
|
193
|
+
void qc.invalidateQueries({ queryKey: connectorQueryKeys2.mine() });
|
|
194
|
+
}
|
|
195
|
+
wasRunning.current = running;
|
|
196
|
+
}, [running, qc]);
|
|
197
|
+
}
|
|
198
|
+
const FOCUS_RECHECK_MS = 6e4;
|
|
199
|
+
function checkNowAndOnFocus(check) {
|
|
200
|
+
let lastCheck = Date.now();
|
|
201
|
+
check();
|
|
202
|
+
const onVisible = () => {
|
|
203
|
+
if (document.visibilityState !== "visible") return;
|
|
204
|
+
if (Date.now() - lastCheck < FOCUS_RECHECK_MS) return;
|
|
205
|
+
lastCheck = Date.now();
|
|
206
|
+
check();
|
|
207
|
+
};
|
|
208
|
+
document.addEventListener("visibilitychange", onVisible);
|
|
209
|
+
return () => document.removeEventListener("visibilitychange", onVisible);
|
|
210
|
+
}
|
|
211
|
+
function useConnectorAutoSync(workspaceExtId, opened) {
|
|
212
|
+
const arbi = useArbi();
|
|
213
|
+
const qc = useQueryClient();
|
|
214
|
+
const hasMail = useIsEntitled("mail");
|
|
215
|
+
useEffect(() => {
|
|
216
|
+
if (!opened || !workspaceExtId || !arbi.isLoggedIn) return;
|
|
217
|
+
return checkNowAndOnFocus(() => {
|
|
218
|
+
void arbi.connectors.bridgeTokens({ autoSyncWorkspaceExtId: workspaceExtId }).then(() => {
|
|
219
|
+
void qc.invalidateQueries({ queryKey: connectorQueryKeys2.mine() });
|
|
220
|
+
void qc.invalidateQueries({ queryKey: connectorQueryKeys2.allMailboxSyncProgress() });
|
|
221
|
+
void qc.invalidateQueries({ queryKey: connectorQueryKeys2.allDriveSyncProgress() });
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
}, [opened, workspaceExtId, arbi, qc]);
|
|
225
|
+
useEffect(() => {
|
|
226
|
+
if (!opened || !workspaceExtId || !arbi.isLoggedIn || !hasMail) return;
|
|
227
|
+
return checkNowAndOnFocus(() => {
|
|
228
|
+
void arbi.mail.fileWaiting(workspaceExtId).then(({ filed }) => {
|
|
229
|
+
if (filed) void qc.invalidateQueries({ queryKey: mailQueryKeys.allFiling() });
|
|
230
|
+
}).catch((error) => logger.warn("[mail] could not file waiting mail", error));
|
|
231
|
+
});
|
|
232
|
+
}, [opened, workspaceExtId, arbi, qc, hasMail]);
|
|
233
|
+
}
|
|
234
|
+
function connectorErrorStatus(err) {
|
|
235
|
+
return err instanceof ArbiApiError ? err.status : void 0;
|
|
236
|
+
}
|
|
237
|
+
export {
|
|
238
|
+
connectorErrorStatus,
|
|
239
|
+
connectorQueryKeys,
|
|
240
|
+
connectorReturnTo,
|
|
241
|
+
useCancelDriveSync,
|
|
242
|
+
useCancelMailboxSync,
|
|
243
|
+
useConnectorAutoSync,
|
|
244
|
+
useConnectorCatalog,
|
|
245
|
+
useConnectorVendorVisibility,
|
|
246
|
+
useDisconnectConnector,
|
|
247
|
+
useDisconnectSlack,
|
|
248
|
+
useDriveFolderChildren,
|
|
249
|
+
useDriveFolderDocCount,
|
|
250
|
+
useDriveFolders,
|
|
251
|
+
useDriveSyncEstimate,
|
|
252
|
+
useDriveSyncProgress,
|
|
253
|
+
useEnableDriveSync,
|
|
254
|
+
useEnableMailboxSync,
|
|
255
|
+
useMailboxFolders,
|
|
256
|
+
useMailboxSyncProgress,
|
|
257
|
+
useMyConnectors,
|
|
258
|
+
useRefreshConnectorsOnRunEnd,
|
|
259
|
+
useSlackConnection,
|
|
260
|
+
useTriggerDriveSync,
|
|
261
|
+
useTriggerMailboxSync
|
|
262
|
+
};
|
|
263
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/connectors/hooks.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Connectors over the SDK (`arbi.connectors`): the catalog and the user's connections, mailbox and\n * drive sync into a workspace, Slack, and the session token bridge. Every key is under\n * `['arbi', 'connectors']`, and every write refreshes all of it (a sync changes the connection\n * rows, the progress and the folders alike).\n */\n\nimport { useEffect, useRef } from 'react'\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport { ArbiApiError, isConnectorVendorVisible } from '@arbidocs/sdk/browser'\nimport { logger } from '@arbidocs/client'\nimport { useArbi } from '../useArbi'\nimport { useUserSettings } from '../account/settings'\nimport { useIsEntitled } from '../account/entitlements'\n\nexport { connectorQueryKeys } from '../query-keys'\nimport { connectorQueryKeys, mailQueryKeys } from '../query-keys'\n\n/** A write that refreshes every connector read. */\nfunction useConnectorMutation<TVars, TResult>(mutationFn: (vars: TVars) => Promise<TResult>) {\n const qc = useQueryClient()\n return useMutation({\n mutationFn,\n onSuccess: () => qc.invalidateQueries({ queryKey: connectorQueryKeys.all() }),\n })\n}\n\n// \u2500\u2500 Catalog and connections \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** The connectors this deployment offers. */\nexport function useConnectorCatalog() {\n const arbi = useArbi()\n return useQuery({\n queryKey: connectorQueryKeys.catalog(),\n queryFn: () => arbi.connectors.catalog(),\n staleTime: 5 * 60_000,\n enabled: arbi.isLoggedIn,\n })\n}\n\n/** The user's connections, with their sync settings. */\nexport function useMyConnectors() {\n const arbi = useArbi()\n return useQuery({\n queryKey: connectorQueryKeys.mine(),\n queryFn: () => arbi.connectors.mine(),\n staleTime: 30_000,\n enabled: arbi.isLoggedIn,\n })\n}\n\nexport function useDisconnectConnector() {\n const arbi = useArbi()\n return useConnectorMutation(({ vendorKey }: { vendorKey: string }) =>\n arbi.connectors.disconnect(vendorKey)\n )\n}\n\n/** Whether a vendor shows under the user's per-provider switches (`isConnectorVendorVisible`). */\nexport function useConnectorVendorVisibility(): (vendorKey: string) => boolean {\n const { data: settings } = useUserSettings()\n return (vendorKey) => isConnectorVendorVisible(settings, vendorKey)\n}\n\n/**\n * Where a connect's OAuth should land: back on this page, with `stay=1` (do not open the settings\n * on return) and, optionally, `reopen=accounts` (bring the \"Add from accounts\" dialog back).\n */\nexport function connectorReturnTo(reopen?: 'accounts'): string {\n const params = new URLSearchParams(window.location.search)\n params.delete('connected')\n params.delete('connect_error')\n params.set('stay', '1')\n if (reopen) params.set('reopen', reopen)\n else params.delete('reopen')\n return `${window.location.pathname}?${params.toString()}`\n}\n\n// \u2500\u2500 Mailbox sync \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport function useMailboxFolders(vendorKey: string, enabled: boolean) {\n const arbi = useArbi()\n return useQuery({\n queryKey: connectorQueryKeys.mailboxFolders(vendorKey),\n queryFn: () => arbi.connectors.mailboxFolders(vendorKey),\n enabled: enabled && arbi.isLoggedIn,\n staleTime: 60_000,\n })\n}\n\nexport interface EnableMailboxSyncVars {\n vendorKey: string\n workspaceExtId: string\n backfillWindow: number\n /** A fixed start date (ISO); overrides the window. */\n backfillSince?: string | null\n /** Folder or label ids (at least one). */\n folders: string[]\n skipDuplicates: boolean\n /** An AI title instead of \"<sender> - <subject>\". */\n autoRename?: boolean\n /** Shared with the workspace rather than private to the importer. */\n shared?: boolean\n /** Sync at sign-in, not only on \"Sync now\". */\n autoSync: boolean\n}\n\nexport function useEnableMailboxSync() {\n const arbi = useArbi()\n return useConnectorMutation((v: EnableMailboxSyncVars) =>\n arbi.connectors.enableMailboxSync(v.vendorKey, {\n workspace_ext_id: v.workspaceExtId,\n backfill_window: v.backfillWindow,\n backfill_since: v.backfillSince ?? null,\n folders: v.folders,\n skip_duplicates: v.skipDuplicates,\n auto_rename: v.autoRename ?? false,\n shared: v.shared ?? false,\n auto_sync: v.autoSync,\n })\n )\n}\n\n/** Sync now (404: no sync set up, 409: reconnect needed). */\nexport function useTriggerMailboxSync() {\n const arbi = useArbi()\n return useConnectorMutation(\n ({ vendorKey, workspaceExtId }: { vendorKey: string; workspaceExtId?: string | null }) =>\n arbi.connectors.syncMailbox(vendorKey, workspaceExtId)\n )\n}\n\n/** A running sync's progress: polled every 1.5 s while it runs, idle otherwise. */\nexport function useMailboxSyncProgress(\n vendorKey: string,\n workspaceExtId: string,\n enabled: boolean\n) {\n const arbi = useArbi()\n return useQuery({\n queryKey: connectorQueryKeys.mailboxSyncProgress(vendorKey, workspaceExtId),\n queryFn: () => arbi.connectors.mailboxSyncProgress(vendorKey, workspaceExtId),\n enabled: enabled && !!workspaceExtId && arbi.isLoggedIn,\n refetchInterval: (query) => (query.state.data?.running ? 1500 : false),\n staleTime: 0,\n })\n}\n\nexport function useCancelMailboxSync() {\n const arbi = useArbi()\n return useMutation({\n mutationFn: ({ vendorKey, workspaceExtId }: { vendorKey: string; workspaceExtId: string }) =>\n arbi.connectors.cancelMailboxSync(vendorKey, workspaceExtId),\n })\n}\n\n// \u2500\u2500 Drive sync \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport function useDriveFolders(vendorKey: string, enabled: boolean) {\n const arbi = useArbi()\n return useQuery({\n queryKey: connectorQueryKeys.driveFolders(vendorKey),\n queryFn: () => arbi.connectors.driveFolders(vendorKey),\n enabled: enabled && arbi.isLoggedIn,\n retry: false,\n staleTime: 60_000,\n })\n}\n\n/** One level of the folder tree (`root` or a folder id), fetched as the user drills in. */\nexport function useDriveFolderChildren(vendorKey: string, itemId: string, enabled: boolean) {\n const arbi = useArbi()\n return useQuery({\n queryKey: connectorQueryKeys.driveFolderChildren(vendorKey, itemId),\n queryFn: () => arbi.connectors.driveFolderChildren(vendorKey, itemId),\n enabled: enabled && arbi.isLoggedIn,\n staleTime: 30_000,\n })\n}\n\n/** The \"(N)\" next to a folder: what selecting it would import. */\nexport function useDriveFolderDocCount(vendorKey: string, itemId: string, enabled: boolean) {\n const arbi = useArbi()\n return useQuery({\n queryKey: connectorQueryKeys.driveFolderDocCount(vendorKey, itemId),\n queryFn: () => arbi.connectors.driveFolderDocCount(vendorKey, itemId),\n enabled: enabled && arbi.isLoggedIn,\n staleTime: 5 * 60_000,\n })\n}\n\nexport interface EnableDriveSyncVars {\n vendorKey: string\n workspaceExtId: string\n folders: string[]\n skipDuplicates: boolean\n autoRename: boolean\n shared: boolean\n autoSync: boolean\n}\n\n/** Enable drive sync (409: reconnect for the files scope). */\nexport function useEnableDriveSync() {\n const arbi = useArbi()\n return useConnectorMutation((v: EnableDriveSyncVars) =>\n arbi.connectors.enableDriveSync(v.vendorKey, {\n workspace_ext_id: v.workspaceExtId,\n folders: v.folders,\n skip_duplicates: v.skipDuplicates,\n auto_rename: v.autoRename,\n shared: v.shared,\n auto_sync: v.autoSync,\n })\n )\n}\n\n/** Drive Sync now (404: none set up, 409: reconnect, 425: the session token is not bridged yet). */\nexport function useTriggerDriveSync() {\n const arbi = useArbi()\n return useConnectorMutation(({ vendorKey }: { vendorKey: string }) =>\n arbi.connectors.syncDrive(vendorKey)\n )\n}\n\nexport function useDriveSyncEstimate(vendorKey: string, enabled: boolean) {\n const arbi = useArbi()\n return useQuery({\n queryKey: connectorQueryKeys.driveSyncEstimate(vendorKey),\n queryFn: () => arbi.connectors.driveSyncEstimate(vendorKey),\n enabled: enabled && arbi.isLoggedIn,\n staleTime: 30_000,\n })\n}\n\n/** Polled while a run is active; the poll after it ends carries the run's `summary`. */\nexport function useDriveSyncProgress(vendorKey: string, enabled: boolean) {\n const arbi = useArbi()\n return useQuery({\n queryKey: connectorQueryKeys.driveSyncProgress(vendorKey),\n queryFn: () => arbi.connectors.driveSyncProgress(vendorKey),\n enabled: enabled && arbi.isLoggedIn,\n refetchInterval: (query) => (query.state.data?.running ? 1500 : false),\n staleTime: 0,\n })\n}\n\nexport function useCancelDriveSync() {\n const arbi = useArbi()\n return useMutation({\n mutationFn: ({ vendorKey }: { vendorKey: string }) =>\n arbi.connectors.cancelDriveSync(vendorKey),\n })\n}\n\n// \u2500\u2500 Slack \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport function useSlackConnection() {\n const arbi = useArbi()\n return useQuery({\n queryKey: connectorQueryKeys.slack(),\n queryFn: () => arbi.connectors.slack.status(),\n enabled: arbi.isLoggedIn,\n // Fresh on every visit: the OAuth return lands here before the status changed server-side.\n staleTime: 0,\n refetchOnMount: 'always',\n refetchOnWindowFocus: true,\n })\n}\n\nexport function useDisconnectSlack() {\n const arbi = useArbi()\n return useConnectorMutation<void, void>(() => arbi.connectors.slack.disconnect())\n}\n\n// \u2500\u2500 Session \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Refresh the connections when a sync run ends (their \"last synced\" and counts change). */\nexport function useRefreshConnectorsOnRunEnd(running: boolean) {\n const qc = useQueryClient()\n const wasRunning = useRef(running)\n useEffect(() => {\n if (wasRunning.current && !running) {\n void qc.invalidateQueries({ queryKey: connectorQueryKeys.mine() })\n }\n wasRunning.current = running\n }, [running, qc])\n}\n\n/** The least time between two re-checks on tab focus (the server keeps its own floor). */\nconst FOCUS_RECHECK_MS = 60_000\n\n/** Run `check` now, and again when the tab comes back (at most once a minute); returns the cleanup. */\nfunction checkNowAndOnFocus(check: () => void): () => void {\n let lastCheck = Date.now()\n check()\n const onVisible = () => {\n if (document.visibilityState !== 'visible') return\n if (Date.now() - lastCheck < FOCUS_RECHECK_MS) return\n lastCheck = Date.now()\n check()\n }\n document.addEventListener('visibilitychange', onVisible)\n return () => document.removeEventListener('visibilitychange', onVisible)\n}\n\n/**\n * Start the due auto-syncs into the open workspace, and file the ARBI mail waiting for it. The\n * server starts connector syncs from the token bridge, and only for a workspace whose key is on the\n * session, so this bridges once the workspace is open\n * and again when the tab comes back (at most once a minute), then refreshes the connections and\n * progress so the import panels pick a new run up.\n */\nexport function useConnectorAutoSync(workspaceExtId: string | null | undefined, opened: boolean) {\n const arbi = useArbi()\n const qc = useQueryClient()\n // Only people with mail have an ARBI mailbox to file from (no refused calls for the others).\n const hasMail = useIsEntitled('mail')\n useEffect(() => {\n if (!opened || !workspaceExtId || !arbi.isLoggedIn) return\n return checkNowAndOnFocus(() => {\n void arbi.connectors.bridgeTokens({ autoSyncWorkspaceExtId: workspaceExtId }).then(() => {\n void qc.invalidateQueries({ queryKey: connectorQueryKeys.mine() })\n void qc.invalidateQueries({ queryKey: connectorQueryKeys.allMailboxSyncProgress() })\n void qc.invalidateQueries({ queryKey: connectorQueryKeys.allDriveSyncProgress() })\n })\n })\n }, [opened, workspaceExtId, arbi, qc])\n useEffect(() => {\n if (!opened || !workspaceExtId || !arbi.isLoggedIn || !hasMail) return\n // The ARBI mailbox files into a workspace the same way: what arrived while the user was away is\n // filed now, with this session (nothing waits for most people: one small read).\n return checkNowAndOnFocus(() => {\n void arbi.mail\n .fileWaiting(workspaceExtId)\n .then(({ filed }) => {\n if (filed) void qc.invalidateQueries({ queryKey: mailQueryKeys.allFiling() })\n })\n .catch((error: unknown) => logger.warn('[mail] could not file waiting mail', error))\n })\n }, [opened, workspaceExtId, arbi, qc, hasMail])\n}\n\n/** The HTTP status of a failed connector call (403, 404, 409, 425\u2026), to say what went wrong. */\nexport function connectorErrorStatus(err: unknown): number | undefined {\n return err instanceof ArbiApiError ? err.status : undefined\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["connectorQueryKeys"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export * from "./hooks.js";
|
|
2
|
+
import {
|
|
3
|
+
MAILBOX_SYNC_VENDORS,
|
|
4
|
+
DRIVE_SYNC_VENDORS,
|
|
5
|
+
MICROSOFT_VENDORS,
|
|
6
|
+
GOOGLE_VENDORS,
|
|
7
|
+
IMANAGE_VENDORS,
|
|
8
|
+
SHAREPOINT_VENDORS,
|
|
9
|
+
isMailboxSyncVendor,
|
|
10
|
+
isDriveSyncVendor,
|
|
11
|
+
isSharePointVendor,
|
|
12
|
+
isConnectorVendorVisible,
|
|
13
|
+
connectErrorMessage
|
|
14
|
+
} from "@arbidocs/sdk/browser";
|
|
15
|
+
export {
|
|
16
|
+
DRIVE_SYNC_VENDORS,
|
|
17
|
+
GOOGLE_VENDORS,
|
|
18
|
+
IMANAGE_VENDORS,
|
|
19
|
+
MAILBOX_SYNC_VENDORS,
|
|
20
|
+
MICROSOFT_VENDORS,
|
|
21
|
+
SHAREPOINT_VENDORS,
|
|
22
|
+
connectErrorMessage,
|
|
23
|
+
isConnectorVendorVisible,
|
|
24
|
+
isDriveSyncVendor,
|
|
25
|
+
isMailboxSyncVendor,
|
|
26
|
+
isSharePointVendor
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/connectors/index.ts"],
|
|
4
|
+
"sourcesContent": ["export * from './hooks'\nexport {\n MAILBOX_SYNC_VENDORS,\n DRIVE_SYNC_VENDORS,\n MICROSOFT_VENDORS,\n GOOGLE_VENDORS,\n IMANAGE_VENDORS,\n SHAREPOINT_VENDORS,\n isMailboxSyncVendor,\n isDriveSyncVendor,\n isSharePointVendor,\n isConnectorVendorVisible,\n connectErrorMessage,\n type ConnectorVendorKey,\n type ConnectorCatalogEntry,\n type UserConnectorEntry,\n type ConnectorSyncStatus,\n type ConnectorFolder,\n type ConnectorSyncProgress,\n type DriveSyncProgress,\n type DriveSyncSummary,\n type SyncTriggerResult,\n type SlackConnectionStatus,\n type ConnectorVisibilitySettings,\n type BridgeTokensOptions,\n} from '@arbidocs/sdk/browser'\n"],
|
|
5
|
+
"mappings": "AAAA,cAAc;AACd;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAaK;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/contacts.js
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { useEffect, useState } from "react";
|
|
2
|
+
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
3
|
+
import { useArbi } from "./useArbi.js";
|
|
4
|
+
import { arbiQueryKeys } from "./hooks.js";
|
|
5
|
+
function useContacts(options) {
|
|
6
|
+
const arbi = useArbi();
|
|
7
|
+
return useQuery({
|
|
8
|
+
queryKey: arbiQueryKeys.contacts(),
|
|
9
|
+
queryFn: () => arbi.contacts.list(),
|
|
10
|
+
enabled: (options?.enabled ?? true) && arbi.isLoggedIn,
|
|
11
|
+
staleTime: 3e4
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
function useInvalidateContacts() {
|
|
15
|
+
const qc = useQueryClient();
|
|
16
|
+
return () => qc.invalidateQueries({ queryKey: arbiQueryKeys.contacts() });
|
|
17
|
+
}
|
|
18
|
+
function useInviteContacts() {
|
|
19
|
+
const arbi = useArbi();
|
|
20
|
+
const invalidate = useInvalidateContacts();
|
|
21
|
+
return useMutation({
|
|
22
|
+
mutationFn: (emails) => arbi.contacts.invite(emails),
|
|
23
|
+
onSuccess: () => invalidate()
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function useCreateContact() {
|
|
27
|
+
const arbi = useArbi();
|
|
28
|
+
const invalidate = useInvalidateContacts();
|
|
29
|
+
return useMutation({
|
|
30
|
+
mutationFn: (body) => arbi.contacts.create(body),
|
|
31
|
+
onSuccess: () => invalidate()
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
function useUpdateContact() {
|
|
35
|
+
const arbi = useArbi();
|
|
36
|
+
const invalidate = useInvalidateContacts();
|
|
37
|
+
return useMutation({
|
|
38
|
+
mutationFn: ({ id, card }) => arbi.contacts.update(id, card),
|
|
39
|
+
onSuccess: () => invalidate()
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function useLinkContact() {
|
|
43
|
+
const arbi = useArbi();
|
|
44
|
+
const invalidate = useInvalidateContacts();
|
|
45
|
+
return useMutation({
|
|
46
|
+
mutationFn: ({
|
|
47
|
+
contact,
|
|
48
|
+
email,
|
|
49
|
+
card
|
|
50
|
+
}) => contact.external_id ? arbi.contacts.link(contact.external_id, email, card) : arbi.contacts.create({ email, card, invite: true }),
|
|
51
|
+
onSettled: () => invalidate()
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
function useImportContacts() {
|
|
55
|
+
const arbi = useArbi();
|
|
56
|
+
const invalidate = useInvalidateContacts();
|
|
57
|
+
return useMutation({
|
|
58
|
+
mutationFn: (file) => arbi.contacts.import(file),
|
|
59
|
+
onSettled: () => invalidate()
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
function useDeleteContact() {
|
|
63
|
+
const arbi = useArbi();
|
|
64
|
+
const invalidate = useInvalidateContacts();
|
|
65
|
+
return useMutation({
|
|
66
|
+
mutationFn: (contactId) => arbi.contacts.delete(contactId),
|
|
67
|
+
onSuccess: () => invalidate()
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function useSearchContacts(q, { debounceMs = 200 } = {}) {
|
|
71
|
+
const arbi = useArbi();
|
|
72
|
+
const term = useDebounced(q.trim(), debounceMs);
|
|
73
|
+
return useQuery({
|
|
74
|
+
queryKey: [...arbiQueryKeys.contacts(), "search", term],
|
|
75
|
+
queryFn: () => arbi.contacts.search(term),
|
|
76
|
+
enabled: term.length > 0 && arbi.isLoggedIn,
|
|
77
|
+
staleTime: 6e4,
|
|
78
|
+
placeholderData: (previous) => previous,
|
|
79
|
+
retry: false
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
function useDebounced(value, ms) {
|
|
83
|
+
const [debounced, setDebounced] = useState(value);
|
|
84
|
+
useEffect(() => {
|
|
85
|
+
const t = setTimeout(() => setDebounced(value), ms);
|
|
86
|
+
return () => clearTimeout(t);
|
|
87
|
+
}, [value, ms]);
|
|
88
|
+
return debounced;
|
|
89
|
+
}
|
|
90
|
+
export {
|
|
91
|
+
useContacts,
|
|
92
|
+
useCreateContact,
|
|
93
|
+
useDeleteContact,
|
|
94
|
+
useImportContacts,
|
|
95
|
+
useInviteContacts,
|
|
96
|
+
useLinkContact,
|
|
97
|
+
useSearchContacts,
|
|
98
|
+
useUpdateContact
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=contacts.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/contacts.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Contacts: one address book \u2014 people on ARBI, invitations still out, and plain cards.\n *\n * Shares `arbiQueryKeys.contacts()` with the messenger's people, so a change made here refreshes\n * the conversation rail on its own. The parts that turn an email list into a request and the backend\n * outcome into a sentence live in `@arbidocs/blocks/collaboration` (`AddContactsForm`).\n */\n\nimport { useEffect, useState } from 'react'\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport type { contacts as contactsOps } from '@arbidocs/sdk/browser'\nimport { useArbi } from './useArbi'\nimport { arbiQueryKeys } from './hooks'\n\n/** Every contact: registered, invited and plain cards. */\nexport function useContacts(options?: { enabled?: boolean }) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.contacts(),\n queryFn: () => arbi.contacts.list(),\n enabled: (options?.enabled ?? true) && arbi.isLoggedIn,\n staleTime: 30_000,\n })\n}\n\nfunction useInvalidateContacts() {\n const qc = useQueryClient()\n return () => qc.invalidateQueries({ queryKey: arbiQueryKeys.contacts() })\n}\n\n/**\n * Invite (or link) people by email. An address not yet on ARBI gets an invitation. Resolves with one\n * row per address (`outcome`, `status`); map it with `toAddContactsRows` from `@arbidocs/blocks/collaboration`.\n */\nexport function useInviteContacts() {\n const arbi = useArbi()\n const invalidate = useInvalidateContacts()\n return useMutation({\n mutationFn: (emails: string[]) => arbi.contacts.invite(emails),\n onSuccess: () => invalidate(),\n })\n}\n\n/** Create a card, optionally linking `email` and inviting it (`invite: true`). */\nexport function useCreateContact() {\n const arbi = useArbi()\n const invalidate = useInvalidateContacts()\n return useMutation({\n mutationFn: (body: contactsOps.ContactCreate) => arbi.contacts.create(body),\n onSuccess: () => invalidate(),\n })\n}\n\n/** Replace a contact's card details. */\nexport function useUpdateContact() {\n const arbi = useArbi()\n const invalidate = useInvalidateContacts()\n return useMutation({\n mutationFn: ({ id, card }: { id: string; card: contactsOps.ContactCardWrite }) =>\n arbi.contacts.update(id, card),\n onSuccess: () => invalidate(),\n })\n}\n\n/**\n * Invite a contact to ARBI by `email`: a card-only contact is linked in place (its row and card kept);\n * without an id a new card is created and invited. Rejects with `DuplicateContactError` when `email`\n * already belongs to another contact. The list refreshes either way.\n */\nexport function useLinkContact() {\n const arbi = useArbi()\n const invalidate = useInvalidateContacts()\n return useMutation({\n mutationFn: ({\n contact,\n email,\n card,\n }: {\n contact: Pick<contactsOps.Contact, 'external_id'>\n email: string\n card: contactsOps.ContactCardWrite\n }) =>\n contact.external_id\n ? arbi.contacts.link(contact.external_id, email, card)\n : arbi.contacts.create({ email, card, invite: true }),\n onSettled: () => invalidate(),\n })\n}\n\n/** Import one .vcf file (Pro: 403 `pro_required` otherwise); the list refreshes after each file. */\nexport function useImportContacts() {\n const arbi = useArbi()\n const invalidate = useInvalidateContacts()\n return useMutation({\n mutationFn: (file: Blob) => arbi.contacts.import(file),\n onSettled: () => invalidate(),\n })\n}\n\n/** Delete a contact, or withdraw its invitation, by contact id. */\nexport function useDeleteContact() {\n const arbi = useArbi()\n const invalidate = useInvalidateContacts()\n return useMutation({\n mutationFn: (contactId: string) => arbi.contacts.delete(contactId),\n onSuccess: () => invalidate(),\n })\n}\n\n/**\n * People matching `q` (your contacts and the registered people you share a workspace with), for a\n * picker: debounced, nothing fetched for an empty query, the previous matches kept while typing.\n */\nexport function useSearchContacts(q: string, { debounceMs = 200 }: { debounceMs?: number } = {}) {\n const arbi = useArbi()\n const term = useDebounced(q.trim(), debounceMs)\n return useQuery({\n queryKey: [...arbiQueryKeys.contacts(), 'search', term] as const,\n queryFn: () => arbi.contacts.search(term),\n enabled: term.length > 0 && arbi.isLoggedIn,\n staleTime: 60_000,\n placeholderData: (previous) => previous,\n retry: false,\n })\n}\n\nfunction useDebounced<T>(value: T, ms: number): T {\n const [debounced, setDebounced] = useState(value)\n useEffect(() => {\n const t = setTimeout(() => setDebounced(value), ms)\n return () => clearTimeout(t)\n }, [value, ms])\n return debounced\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { arbiQueryKeys } from "./hooks.js";
|
|
2
|
+
function isConversationListKey(queryKey) {
|
|
3
|
+
return queryKey.length === 3 && queryKey[0] === "arbi" && queryKey[1] === "conversations";
|
|
4
|
+
}
|
|
5
|
+
const LISTS = {
|
|
6
|
+
predicate: (query) => isConversationListKey(query.queryKey)
|
|
7
|
+
};
|
|
8
|
+
function patchConversationList(queryClient, workspaceId, reducer) {
|
|
9
|
+
if (!workspaceId) return;
|
|
10
|
+
const key = arbiQueryKeys.conversations(workspaceId);
|
|
11
|
+
const current = queryClient.getQueryData(key) ?? [];
|
|
12
|
+
const next = reducer(current);
|
|
13
|
+
if (next !== current) queryClient.setQueryData(key, next);
|
|
14
|
+
}
|
|
15
|
+
function addConversationToList(queryClient, workspaceId, conversation) {
|
|
16
|
+
patchConversationList(queryClient, workspaceId, (old) => [
|
|
17
|
+
conversation,
|
|
18
|
+
...old.filter((c) => c.external_id !== conversation.external_id)
|
|
19
|
+
]);
|
|
20
|
+
}
|
|
21
|
+
function patchConversation(queryClient, conversationId, update) {
|
|
22
|
+
queryClient.setQueriesData(LISTS, (old) => {
|
|
23
|
+
if (!old?.some((c) => c.external_id === conversationId)) return old;
|
|
24
|
+
return old.map(
|
|
25
|
+
(c) => c.external_id === conversationId ? typeof update === "function" ? update(c) : { ...c, ...update } : c
|
|
26
|
+
);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
function removeConversationFromLists(queryClient, conversationId) {
|
|
30
|
+
queryClient.setQueriesData(
|
|
31
|
+
LISTS,
|
|
32
|
+
(old) => old?.some((c) => c.external_id === conversationId) ? old.filter((c) => c.external_id !== conversationId) : old
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
function invalidateConversationLists(queryClient) {
|
|
36
|
+
return queryClient.invalidateQueries(LISTS);
|
|
37
|
+
}
|
|
38
|
+
function findConversation(queryClient, conversationId) {
|
|
39
|
+
if (!conversationId) return void 0;
|
|
40
|
+
for (const [, list] of queryClient.getQueriesData(LISTS)) {
|
|
41
|
+
const row = list?.find((c) => c.external_id === conversationId);
|
|
42
|
+
if (row) return row;
|
|
43
|
+
}
|
|
44
|
+
return void 0;
|
|
45
|
+
}
|
|
46
|
+
function isConversationShared(queryClient, conversationId) {
|
|
47
|
+
return findConversation(queryClient, conversationId)?.is_shared ?? false;
|
|
48
|
+
}
|
|
49
|
+
function invalidateConversationDetails(queryClient, conversationId) {
|
|
50
|
+
return queryClient.invalidateQueries({
|
|
51
|
+
predicate: ({ queryKey }) => queryKey[0] === "arbi" && queryKey[1] === "conversations" && queryKey[2] === conversationId && queryKey[3] !== "threads"
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
export {
|
|
55
|
+
addConversationToList,
|
|
56
|
+
findConversation,
|
|
57
|
+
invalidateConversationDetails,
|
|
58
|
+
invalidateConversationLists,
|
|
59
|
+
isConversationListKey,
|
|
60
|
+
isConversationShared,
|
|
61
|
+
patchConversation,
|
|
62
|
+
patchConversationList,
|
|
63
|
+
removeConversationFromLists
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=conversation-list.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/conversation-list.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * The workspace's conversation list in the query cache (`arbiQueryKeys.conversations(ws)`).\n *\n * The list is kept current by its writers, not by re-reading it: the workspace open seeds it, every\n * write patches the rows it changed (with the server's version when the server returns one), and\n * the workspace's events invalidate it. These are the writers, for every host and kit, so that one\n * list serves the whole app.\n *\n * Conversation ids are unique across workspaces, so a row is patched (or looked up) by its id in\n * every cached list; only adding a row needs to name its workspace.\n */\n\nimport type { QueryClient, QueryKey } from '@tanstack/react-query'\nimport type { ConversationResponse } from '@arbidocs/sdk/browser'\nimport { arbiQueryKeys } from './hooks'\n\n/** Whether a query key is a workspace's conversation list (not its threads, activity or usage). */\nexport function isConversationListKey(queryKey: QueryKey): boolean {\n return queryKey.length === 3 && queryKey[0] === 'arbi' && queryKey[1] === 'conversations'\n}\n\nconst LISTS = {\n predicate: (query: { queryKey: QueryKey }) => isConversationListKey(query.queryKey),\n}\n\n/** Apply `reducer` to a workspace's cached list (an absent list counts as empty). */\nexport function patchConversationList(\n queryClient: QueryClient,\n workspaceId: string | null | undefined,\n reducer: (old: ConversationResponse[]) => ConversationResponse[]\n): void {\n if (!workspaceId) return\n const key = arbiQueryKeys.conversations(workspaceId)\n const current = queryClient.getQueryData<ConversationResponse[]>(key) ?? []\n const next = reducer(current)\n if (next !== current) queryClient.setQueryData(key, next)\n}\n\n/** Put a new conversation at the top of its workspace's list (replacing an earlier copy). */\nexport function addConversationToList(\n queryClient: QueryClient,\n workspaceId: string | null | undefined,\n conversation: ConversationResponse\n): void {\n patchConversationList(queryClient, workspaceId, (old) => [\n conversation,\n ...old.filter((c) => c.external_id !== conversation.external_id),\n ])\n}\n\n/** Change one conversation's row, wherever it is listed. */\nexport function patchConversation(\n queryClient: QueryClient,\n conversationId: string,\n update: Partial<ConversationResponse> | ((row: ConversationResponse) => ConversationResponse)\n): void {\n queryClient.setQueriesData<ConversationResponse[]>(LISTS, (old) => {\n if (!old?.some((c) => c.external_id === conversationId)) return old\n return old.map((c) =>\n c.external_id === conversationId\n ? typeof update === 'function'\n ? update(c)\n : { ...c, ...update }\n : c\n )\n })\n}\n\n/** Take a conversation out of every list. */\nexport function removeConversationFromLists(\n queryClient: QueryClient,\n conversationId: string\n): void {\n queryClient.setQueriesData<ConversationResponse[]>(LISTS, (old) =>\n old?.some((c) => c.external_id === conversationId)\n ? old.filter((c) => c.external_id !== conversationId)\n : old\n )\n}\n\n/** Read the lists again: a change the cache cannot know (the server shared a thread, a run ended). */\nexport function invalidateConversationLists(queryClient: QueryClient): Promise<void> {\n return queryClient.invalidateQueries(LISTS)\n}\n\n/** A conversation's row, from whichever cached list holds it. */\nexport function findConversation(\n queryClient: QueryClient,\n conversationId: string | null | undefined\n): ConversationResponse | undefined {\n if (!conversationId) return undefined\n for (const [, list] of queryClient.getQueriesData<ConversationResponse[]>(LISTS)) {\n const row = list?.find((c) => c.external_id === conversationId)\n if (row) return row\n }\n return undefined\n}\n\n/** Whether the conversation is shared with the workspace, from the cached lists (false when unknown). */\nexport function isConversationShared(\n queryClient: QueryClient,\n conversationId: string | null | undefined\n): boolean {\n return findConversation(queryClient, conversationId)?.is_shared ?? false\n}\n\n/**\n * Refresh what hangs off one conversation (its activity, usage, pending access): not the lists, and\n * not its threads, which the chat engine and the conversation's events keep current.\n */\nexport function invalidateConversationDetails(\n queryClient: QueryClient,\n conversationId: string\n): Promise<void> {\n return queryClient.invalidateQueries({\n predicate: ({ queryKey }) =>\n queryKey[0] === 'arbi' &&\n queryKey[1] === 'conversations' &&\n queryKey[2] === conversationId &&\n queryKey[3] !== 'threads',\n })\n}\n"],
|
|
5
|
+
"mappings": "AAcA,SAAS,qBAAqB;AAGvB,SAAS,sBAAsB,UAA6B;AACjE,SAAO,SAAS,WAAW,KAAK,SAAS,CAAC,MAAM,UAAU,SAAS,CAAC,MAAM;AAC5E;AAEA,MAAM,QAAQ;AAAA,EACZ,WAAW,CAAC,UAAkC,sBAAsB,MAAM,QAAQ;AACpF;AAGO,SAAS,sBACd,aACA,aACA,SACM;AACN,MAAI,CAAC,YAAa;AAClB,QAAM,MAAM,cAAc,cAAc,WAAW;AACnD,QAAM,UAAU,YAAY,aAAqC,GAAG,KAAK,CAAC;AAC1E,QAAM,OAAO,QAAQ,OAAO;AAC5B,MAAI,SAAS,QAAS,aAAY,aAAa,KAAK,IAAI;AAC1D;AAGO,SAAS,sBACd,aACA,aACA,cACM;AACN,wBAAsB,aAAa,aAAa,CAAC,QAAQ;AAAA,IACvD;AAAA,IACA,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,gBAAgB,aAAa,WAAW;AAAA,EACjE,CAAC;AACH;AAGO,SAAS,kBACd,aACA,gBACA,QACM;AACN,cAAY,eAAuC,OAAO,CAAC,QAAQ;AACjE,QAAI,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE,gBAAgB,cAAc,EAAG,QAAO;AAChE,WAAO,IAAI;AAAA,MAAI,CAAC,MACd,EAAE,gBAAgB,iBACd,OAAO,WAAW,aAChB,OAAO,CAAC,IACR,EAAE,GAAG,GAAG,GAAG,OAAO,IACpB;AAAA,IACN;AAAA,EACF,CAAC;AACH;AAGO,SAAS,4BACd,aACA,gBACM;AACN,cAAY;AAAA,IAAuC;AAAA,IAAO,CAAC,QACzD,KAAK,KAAK,CAAC,MAAM,EAAE,gBAAgB,cAAc,IAC7C,IAAI,OAAO,CAAC,MAAM,EAAE,gBAAgB,cAAc,IAClD;AAAA,EACN;AACF;AAGO,SAAS,4BAA4B,aAAyC;AACnF,SAAO,YAAY,kBAAkB,KAAK;AAC5C;AAGO,SAAS,iBACd,aACA,gBACkC;AAClC,MAAI,CAAC,eAAgB,QAAO;AAC5B,aAAW,CAAC,EAAE,IAAI,KAAK,YAAY,eAAuC,KAAK,GAAG;AAChF,UAAM,MAAM,MAAM,KAAK,CAAC,MAAM,EAAE,gBAAgB,cAAc;AAC9D,QAAI,IAAK,QAAO;AAAA,EAClB;AACA,SAAO;AACT;AAGO,SAAS,qBACd,aACA,gBACS;AACT,SAAO,iBAAiB,aAAa,cAAc,GAAG,aAAa;AACrE;AAMO,SAAS,8BACd,aACA,gBACe;AACf,SAAO,YAAY,kBAAkB;AAAA,IACnC,WAAW,CAAC,EAAE,SAAS,MACrB,SAAS,CAAC,MAAM,UAChB,SAAS,CAAC,MAAM,mBAChB,SAAS,CAAC,MAAM,kBAChB,SAAS,CAAC,MAAM;AAAA,EACpB,CAAC;AACH;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|