@arbidocs/react 0.5.111 → 0.5.112
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/{chunk-Z3W4XFWB.cjs → chunk-C72FSQUE.cjs} +3 -3
- package/dist/{chunk-Z3W4XFWB.cjs.map → chunk-C72FSQUE.cjs.map} +1 -1
- package/dist/{chunk-LBAG7KL7.cjs → chunk-FQVNZCTD.cjs} +3 -3
- package/dist/{chunk-LBAG7KL7.cjs.map → chunk-FQVNZCTD.cjs.map} +1 -1
- package/dist/{chunk-DI5KSVKY.cjs → chunk-UDDJIUHJ.cjs} +3 -3
- package/dist/{chunk-DI5KSVKY.cjs.map → chunk-UDDJIUHJ.cjs.map} +1 -1
- 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.cjs +80 -80
- 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.cjs +80 -80
- 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.cjs +282 -282
- 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.cjs +37 -37
- 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.cjs +154 -154
- 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
package/dist/billing.js
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
2
|
+
import { useArbi } from "./useArbi.js";
|
|
3
|
+
import { arbiQueryKeys } from "./hooks.js";
|
|
4
|
+
function refreshProjects(qc, wide = false) {
|
|
5
|
+
void qc.invalidateQueries({ queryKey: arbiQueryKeys.projects() });
|
|
6
|
+
if (wide) {
|
|
7
|
+
void qc.invalidateQueries({ queryKey: arbiQueryKeys.userSettings() });
|
|
8
|
+
void qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() });
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
const retryAbortOnly = (failureCount, error) => failureCount < 1 && error?.name === "AbortError";
|
|
12
|
+
function useInvalidateProjects() {
|
|
13
|
+
const qc = useQueryClient();
|
|
14
|
+
return () => qc.invalidateQueries({ queryKey: arbiQueryKeys.projects() });
|
|
15
|
+
}
|
|
16
|
+
function useProducts(options) {
|
|
17
|
+
const arbi = useArbi();
|
|
18
|
+
return useQuery({
|
|
19
|
+
queryKey: arbiQueryKeys.products(),
|
|
20
|
+
queryFn: () => arbi.projects.products(),
|
|
21
|
+
staleTime: 5 * 6e4,
|
|
22
|
+
enabled: (options?.enabled ?? true) && arbi.isLoggedIn
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
function useCreateProject() {
|
|
26
|
+
const arbi = useArbi();
|
|
27
|
+
const qc = useQueryClient();
|
|
28
|
+
return useMutation({
|
|
29
|
+
mutationFn: async ({ name, plan, workspace, ...details }) => {
|
|
30
|
+
const project = await arbi.projects.create(name, plan, details);
|
|
31
|
+
if (workspace) {
|
|
32
|
+
project.workspace = await arbi.workspaces.create(
|
|
33
|
+
name,
|
|
34
|
+
project.external_id,
|
|
35
|
+
workspace.description ?? null
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
return project;
|
|
39
|
+
},
|
|
40
|
+
onSuccess: async ({ workspace, ...project }) => {
|
|
41
|
+
await Promise.all([
|
|
42
|
+
qc.cancelQueries({ queryKey: arbiQueryKeys.projects() }),
|
|
43
|
+
qc.cancelQueries({ queryKey: arbiQueryKeys.workspaces() })
|
|
44
|
+
]);
|
|
45
|
+
const id = (item) => item.external_id;
|
|
46
|
+
qc.setQueryData(
|
|
47
|
+
arbiQueryKeys.projects(),
|
|
48
|
+
(old) => Array.isArray(old) ? [project, ...old.filter((p) => id(p) !== project.external_id)] : old
|
|
49
|
+
);
|
|
50
|
+
if (workspace) {
|
|
51
|
+
const listed = { ...workspace, project_ext_id: project.external_id };
|
|
52
|
+
qc.setQueryData(
|
|
53
|
+
arbiQueryKeys.workspaces(),
|
|
54
|
+
(old) => Array.isArray(old) ? [listed, ...old.filter((w) => id(w) !== workspace.external_id)] : old
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
refreshProjects(qc, true);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
function useDeleteProject() {
|
|
62
|
+
const arbi = useArbi();
|
|
63
|
+
const qc = useQueryClient();
|
|
64
|
+
return useMutation({
|
|
65
|
+
mutationFn: (projectExtId) => arbi.projects.delete(projectExtId),
|
|
66
|
+
onSuccess: () => refreshProjects(qc, true)
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
function useRefreshProject() {
|
|
70
|
+
const arbi = useArbi();
|
|
71
|
+
const qc = useQueryClient();
|
|
72
|
+
return useMutation({
|
|
73
|
+
mutationFn: (projectExtId) => arbi.projects.refresh(projectExtId),
|
|
74
|
+
onSuccess: () => refreshProjects(qc, true)
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
function useCreateProjectCheckout() {
|
|
78
|
+
const arbi = useArbi();
|
|
79
|
+
return useMutation({
|
|
80
|
+
mutationFn: ({ projectExtId, body }) => arbi.projects.checkout(projectExtId, body)
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function useChangeProjectPlan() {
|
|
84
|
+
const arbi = useArbi();
|
|
85
|
+
const qc = useQueryClient();
|
|
86
|
+
return useMutation({
|
|
87
|
+
mutationFn: ({
|
|
88
|
+
projectExtId,
|
|
89
|
+
body
|
|
90
|
+
}) => arbi.projects.changePlan(projectExtId, body),
|
|
91
|
+
onSuccess: () => refreshProjects(qc, true)
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
function useCancelProjectSubscription() {
|
|
95
|
+
const arbi = useArbi();
|
|
96
|
+
const qc = useQueryClient();
|
|
97
|
+
return useMutation({
|
|
98
|
+
mutationFn: (projectExtId) => arbi.projects.cancelSubscription(projectExtId),
|
|
99
|
+
onSuccess: () => {
|
|
100
|
+
void qc.invalidateQueries({ queryKey: arbiQueryKeys.projects() });
|
|
101
|
+
void qc.invalidateQueries({ queryKey: arbiQueryKeys.userSettings() });
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
function usePreviewProjectPlanChange(projectExtId, change) {
|
|
106
|
+
const arbi = useArbi();
|
|
107
|
+
return useQuery({
|
|
108
|
+
queryKey: [...arbiQueryKeys.billingQuotes(), "preview", projectExtId, change],
|
|
109
|
+
queryFn: () => arbi.projects.previewPlanChange(projectExtId, change),
|
|
110
|
+
enabled: !!change && arbi.isLoggedIn,
|
|
111
|
+
staleTime: 6e4,
|
|
112
|
+
retry: retryAbortOnly
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
function usePlanQuote(projectExtId, body) {
|
|
116
|
+
const arbi = useArbi();
|
|
117
|
+
return useQuery({
|
|
118
|
+
queryKey: [...arbiQueryKeys.billingQuotes(), "plan", projectExtId ?? null, body],
|
|
119
|
+
queryFn: () => arbi.projects.quotePlan(projectExtId ?? null, body),
|
|
120
|
+
enabled: !!body && arbi.isLoggedIn,
|
|
121
|
+
staleTime: 5 * 6e4,
|
|
122
|
+
retry: retryAbortOnly
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
function useAddonQuote(projectExtId, kind, enabled = true) {
|
|
126
|
+
const arbi = useArbi();
|
|
127
|
+
return useQuery({
|
|
128
|
+
queryKey: [...arbiQueryKeys.billingQuotes(), "addon", projectExtId, kind],
|
|
129
|
+
queryFn: () => arbi.projects.quoteAddon(projectExtId, kind),
|
|
130
|
+
enabled: enabled && arbi.isLoggedIn,
|
|
131
|
+
staleTime: 6e4,
|
|
132
|
+
retry: retryAbortOnly
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
function useProjectBillingPortal() {
|
|
136
|
+
const arbi = useArbi();
|
|
137
|
+
return useMutation({
|
|
138
|
+
mutationFn: (projectExtId) => arbi.projects.billingPortal(projectExtId)
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
function useAddProjectAddonBlock() {
|
|
142
|
+
const arbi = useArbi();
|
|
143
|
+
const qc = useQueryClient();
|
|
144
|
+
return useMutation({
|
|
145
|
+
mutationFn: ({ projectExtId, kind }) => arbi.projects.addAddonBlock(projectExtId, kind),
|
|
146
|
+
onSuccess: () => refreshProjects(qc)
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
function useUpdateProjectNextPeriodAddons() {
|
|
150
|
+
const arbi = useArbi();
|
|
151
|
+
const qc = useQueryClient();
|
|
152
|
+
return useMutation({
|
|
153
|
+
mutationFn: ({
|
|
154
|
+
projectExtId,
|
|
155
|
+
body
|
|
156
|
+
}) => arbi.projects.setNextPeriodAddons(projectExtId, body),
|
|
157
|
+
onSuccess: () => refreshProjects(qc)
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
function useUpdateProjectAddonSettings() {
|
|
161
|
+
const arbi = useArbi();
|
|
162
|
+
const qc = useQueryClient();
|
|
163
|
+
return useMutation({
|
|
164
|
+
mutationFn: ({
|
|
165
|
+
projectExtId,
|
|
166
|
+
body
|
|
167
|
+
}) => arbi.projects.updateAddonSettings(projectExtId, body),
|
|
168
|
+
onSuccess: () => refreshProjects(qc)
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
import {
|
|
172
|
+
useChargeWatch,
|
|
173
|
+
useIsSlow,
|
|
174
|
+
SLOW_AFTER_MS,
|
|
175
|
+
POLL_EVERY_MS,
|
|
176
|
+
STILL_WORKING
|
|
177
|
+
} from "./charge-watch.js";
|
|
178
|
+
export {
|
|
179
|
+
POLL_EVERY_MS,
|
|
180
|
+
SLOW_AFTER_MS,
|
|
181
|
+
STILL_WORKING,
|
|
182
|
+
useAddProjectAddonBlock,
|
|
183
|
+
useAddonQuote,
|
|
184
|
+
useCancelProjectSubscription,
|
|
185
|
+
useChangeProjectPlan,
|
|
186
|
+
useChargeWatch,
|
|
187
|
+
useCreateProject,
|
|
188
|
+
useCreateProjectCheckout,
|
|
189
|
+
useDeleteProject,
|
|
190
|
+
useInvalidateProjects,
|
|
191
|
+
useIsSlow,
|
|
192
|
+
usePlanQuote,
|
|
193
|
+
usePreviewProjectPlanChange,
|
|
194
|
+
useProducts,
|
|
195
|
+
useProjectBillingPortal,
|
|
196
|
+
useRefreshProject,
|
|
197
|
+
useUpdateProjectAddonSettings,
|
|
198
|
+
useUpdateProjectNextPeriodAddons
|
|
199
|
+
};
|
|
200
|
+
//# sourceMappingURL=billing.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/billing.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Plans and billing of a project: the plans on sale, the taxed price of a purchase or a change,\n * Stripe checkout and the billing portal, add-on blocks and their settings, plan changes and\n * cancellation. Every write that changes a project refreshes the project list\n * (`arbiQueryKeys.projects()`); those that change what the user may do refresh the user settings\n * and the workspace list too.\n *\n * Requires an `ArbiHost` (with an `arbi`) and a React Query client above it.\n */\n\nimport { useMutation, useQuery, useQueryClient, type QueryClient } from '@tanstack/react-query'\nimport type {\n ProjectAddonKind,\n ProjectAddonSettingsRequest,\n ProjectCheckoutRequest,\n ProjectCreateOptions,\n ProjectNextPeriodAddonsRequest,\n ProjectPlanChangeRequest,\n ProjectQuoteRequest,\n} from '@arbidocs/sdk/browser'\nimport type { Arbi } from '@arbidocs/sdk/browser'\nimport { useArbi } from './useArbi'\nimport { arbiQueryKeys } from './hooks'\n\n/** Refresh the projects, and with `wide` the user settings and workspaces they gate. */\nfunction refreshProjects(qc: QueryClient, wide = false) {\n void qc.invalidateQueries({ queryKey: arbiQueryKeys.projects() })\n if (wide) {\n void qc.invalidateQueries({ queryKey: arbiQueryKeys.userSettings() })\n void qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() })\n }\n}\n\n/**\n * Prices are not retried on a real failure (the UI says what failed), but a request aborted before\n * it ran (a remount cancels it, e.g. React StrictMode) runs again.\n */\nconst retryAbortOnly = (failureCount: number, error: unknown) =>\n failureCount < 1 && (error as { name?: string } | null)?.name === 'AbortError'\n\n/** Refresh the project list now (e.g. a paid project to list before its refresh returns). */\nexport function useInvalidateProjects(): () => Promise<void> {\n const qc = useQueryClient()\n return () => qc.invalidateQueries({ queryKey: arbiQueryKeys.projects() })\n}\n\n/** The plans and add-ons on sale, with their prices. */\nexport function useProducts(options?: { enabled?: boolean }) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.products(),\n queryFn: () => arbi.projects.products(),\n staleTime: 5 * 60_000,\n enabled: (options?.enabled ?? true) && arbi.isLoggedIn,\n })\n}\n\nexport interface CreateProjectVars extends ProjectCreateOptions {\n name: string\n plan?: 'free' | 'pro'\n /** Also create the project's first (encrypted) workspace, of the project's name. */\n workspace?: { description?: string | null }\n}\n\ntype CreatedProjectResponse = Awaited<ReturnType<Arbi['projects']['create']>>\ntype CreatedWorkspaceResponse = Awaited<ReturnType<Arbi['workspaces']['create']>>\n\n/** A created project, with its first workspace when one was asked for. */\nexport type CreatedProject = CreatedProjectResponse & { workspace?: CreatedWorkspaceResponse }\n\n/**\n * Create a project (Free is usable at once; Pro is pending until its checkout completes), with its\n * first workspace if asked. The project and workspace lists show them at once (updated in place,\n * then refetched); selecting the workspace is the caller's.\n */\nexport function useCreateProject() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: async ({ name, plan, workspace, ...details }: CreateProjectVars) => {\n const project: CreatedProject = await arbi.projects.create(name, plan, details)\n if (workspace) {\n project.workspace = await arbi.workspaces.create(\n name,\n project.external_id,\n workspace.description ?? null\n )\n }\n return project\n },\n onSuccess: async ({ workspace, ...project }) => {\n // A list fetch that started before the project existed must not land over the update.\n await Promise.all([\n qc.cancelQueries({ queryKey: arbiQueryKeys.projects() }),\n qc.cancelQueries({ queryKey: arbiQueryKeys.workspaces() }),\n ])\n const id = (item: { external_id: string }) => item.external_id\n qc.setQueryData(arbiQueryKeys.projects(), (old: unknown) =>\n Array.isArray(old) ? [project, ...old.filter((p) => id(p) !== project.external_id)] : old\n )\n if (workspace) {\n const listed = { ...workspace, project_ext_id: project.external_id }\n qc.setQueryData(arbiQueryKeys.workspaces(), (old: unknown) =>\n Array.isArray(old) ? [listed, ...old.filter((w) => id(w) !== workspace.external_id)] : old\n )\n }\n refreshProjects(qc, true)\n },\n })\n}\n\n/** Delete an empty project (no workspaces, no subscription). */\nexport function useDeleteProject() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: (projectExtId: string) => arbi.projects.delete(projectExtId),\n onSuccess: () => refreshProjects(qc, true),\n })\n}\n\n/** Re-read a project's subscription from Stripe (after a checkout completes). */\nexport function useRefreshProject() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: (projectExtId: string) => arbi.projects.refresh(projectExtId),\n onSuccess: () => refreshProjects(qc, true),\n })\n}\n\n/** Start an embedded Stripe checkout for a project; resolves to its `client_secret`. */\nexport function useCreateProjectCheckout() {\n const arbi = useArbi()\n return useMutation({\n mutationFn: ({ projectExtId, body }: { projectExtId: string; body: ProjectCheckoutRequest }) =>\n arbi.projects.checkout(projectExtId, body),\n })\n}\n\n/**\n * Switch a Pro project between monthly and annual billing at the end of the period; the current\n * interval clears a pending switch, and resumes a project set to cancel. Resolves to the project.\n */\nexport function useChangeProjectPlan() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: ({\n projectExtId,\n body,\n }: {\n projectExtId: string\n body: ProjectPlanChangeRequest\n }) => arbi.projects.changePlan(projectExtId, body),\n onSuccess: () => refreshProjects(qc, true),\n })\n}\n\n/** Move a Pro project to Free at the end of the period (no refunds). */\nexport function useCancelProjectSubscription() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: (projectExtId: string) => arbi.projects.cancelSubscription(projectExtId),\n onSuccess: () => {\n void qc.invalidateQueries({ queryKey: arbiQueryKeys.projects() })\n void qc.invalidateQueries({ queryKey: arbiQueryKeys.userSettings() })\n },\n })\n}\n\n/** What a plan change would charge now and at the first renewal. `null` skips. */\nexport function usePreviewProjectPlanChange(\n projectExtId: string,\n change: { packs: number; interval: 'month' | 'year' } | null\n) {\n const arbi = useArbi()\n return useQuery({\n queryKey: [...arbiQueryKeys.billingQuotes(), 'preview', projectExtId, change],\n queryFn: () => arbi.projects.previewPlanChange(projectExtId, change!),\n enabled: !!change && arbi.isLoggedIn,\n staleTime: 60_000,\n retry: retryAbortOnly,\n })\n}\n\n/**\n * The taxed total of a Pro purchase for a billing address: for a new project without\n * `projectExtId`, else for that (Free) project. 422 `TAX_LOCATION_INVALID` asks for a ZIP /\n * postcode; 429 `QUOTE_RATE_LIMITED`. `null` skips.\n */\nexport function usePlanQuote(\n projectExtId: string | null | undefined,\n body: ProjectQuoteRequest | null\n) {\n const arbi = useArbi()\n return useQuery({\n queryKey: [...arbiQueryKeys.billingQuotes(), 'plan', projectExtId ?? null, body],\n queryFn: () => arbi.projects.quotePlan(projectExtId ?? null, body!),\n enabled: !!body && arbi.isLoggedIn,\n staleTime: 5 * 60_000,\n retry: retryAbortOnly,\n })\n}\n\n/** What one more add-on block costs now and at renewal, taxed for the saved address. */\nexport function useAddonQuote(projectExtId: string, kind: ProjectAddonKind, enabled = true) {\n const arbi = useArbi()\n return useQuery({\n queryKey: [...arbiQueryKeys.billingQuotes(), 'addon', projectExtId, kind],\n queryFn: () => arbi.projects.quoteAddon(projectExtId, kind),\n enabled: enabled && arbi.isLoggedIn,\n staleTime: 60_000,\n retry: retryAbortOnly,\n })\n}\n\n/** A fresh, short-lived Stripe customer-portal link for a project; open it as soon as it arrives. */\nexport function useProjectBillingPortal() {\n const arbi = useArbi()\n return useMutation({\n mutationFn: (projectExtId: string) => arbi.projects.billingPortal(projectExtId),\n })\n}\n\n/**\n * Buy one add-on block (AI usage or storage) on a Pro project, charged now and renewed every period\n * until reduced. `status: 'requires_action'` comes with a `confirm_url` (3-D Secure).\n */\nexport function useAddProjectAddonBlock() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: ({ projectExtId, kind }: { projectExtId: string; kind: ProjectAddonKind }) =>\n arbi.projects.addAddonBlock(projectExtId, kind),\n onSuccess: () => refreshProjects(qc),\n })\n}\n\n/** How many add-on blocks to keep from the next period (reductions only). */\nexport function useUpdateProjectNextPeriodAddons() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: ({\n projectExtId,\n body,\n }: {\n projectExtId: string\n body: ProjectNextPeriodAddonsRequest\n }) => arbi.projects.setNextPeriodAddons(projectExtId, body),\n onSuccess: () => refreshProjects(qc),\n })\n}\n\n/** A Pro project's add-on settings: the auto top-up threshold and the monthly usage cap. */\nexport function useUpdateProjectAddonSettings() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: ({\n projectExtId,\n body,\n }: {\n projectExtId: string\n body: ProjectAddonSettingsRequest\n }) => arbi.projects.updateAddonSettings(projectExtId, body),\n onSuccess: () => refreshProjects(qc),\n })\n}\n\nexport {\n useChargeWatch,\n useIsSlow,\n SLOW_AFTER_MS,\n POLL_EVERY_MS,\n STILL_WORKING,\n} from './charge-watch'\n\nexport type {\n ProjectResponse,\n ProductResponse,\n TaxQuoteResponse,\n ProjectAddonKind,\n ProjectQuoteRequest,\n ProjectCheckoutRequest,\n ProjectPlanChangeRequest,\n ProjectInvoicesResponse,\n ProjectUsageResponse,\n} from '@arbidocs/sdk/browser'\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { useEffect, useState } from "react";
|
|
2
|
+
const BOOT_GATE_TIMEOUT_MS = 1e4;
|
|
3
|
+
function useBootTimeout(isWaiting, label, ms = BOOT_GATE_TIMEOUT_MS) {
|
|
4
|
+
const [timedOut, setTimedOut] = useState(false);
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
if (!isWaiting || timedOut) return;
|
|
7
|
+
const timer = setTimeout(() => {
|
|
8
|
+
console.warn(`[boot] ${label} did not finish within ${ms / 1e3}s; continuing without it`);
|
|
9
|
+
setTimedOut(true);
|
|
10
|
+
}, ms);
|
|
11
|
+
return () => clearTimeout(timer);
|
|
12
|
+
}, [isWaiting, timedOut]);
|
|
13
|
+
return timedOut;
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
BOOT_GATE_TIMEOUT_MS,
|
|
17
|
+
useBootTimeout
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=boot-timeout.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/boot-timeout.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * A safety net for a host's boot gate (the loading screen shown until its saved state has loaded,\n * its single sign-on provider has initialised, a session restore has finished\u2026). Each of those\n * waits is expected to settle on its own; if one never does, the user would sit on the loading\n * screen forever. This reports `true` once `isWaiting` has stayed true for `ms`, logging a warning\n * naming what stalled, so the gate falls through to normal routing (worst case: the sign-in page).\n *\n * The clock runs from when the wait starts and is not restarted by re-renders, so a component\n * that keeps re-rendering while stuck still times out.\n */\n\nimport { useEffect, useState } from 'react'\n\nexport const BOOT_GATE_TIMEOUT_MS = 10_000\n\nexport function useBootTimeout(\n isWaiting: boolean,\n label: string,\n ms: number = BOOT_GATE_TIMEOUT_MS\n): boolean {\n const [timedOut, setTimedOut] = useState(false)\n\n useEffect(() => {\n if (!isWaiting || timedOut) return\n const timer = setTimeout(() => {\n console.warn(`[boot] ${label} did not finish within ${ms / 1000}s; continuing without it`)\n setTimedOut(true)\n }, ms)\n return () => clearTimeout(timer)\n // label/ms are fixed per call site; keying only on the wait keeps the clock from restarting.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isWaiting, timedOut])\n\n return timedOut\n}\n"],
|
|
5
|
+
"mappings": "AAWA,SAAS,WAAW,gBAAgB;AAE7B,MAAM,uBAAuB;AAE7B,SAAS,eACd,WACA,OACA,KAAa,sBACJ;AACT,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAE9C,YAAU,MAAM;AACd,QAAI,CAAC,aAAa,SAAU;AAC5B,UAAM,QAAQ,WAAW,MAAM;AAC7B,cAAQ,KAAK,UAAU,KAAK,0BAA0B,KAAK,GAAI,0BAA0B;AACzF,kBAAY,IAAI;AAAA,IAClB,GAAG,EAAE;AACL,WAAO,MAAM,aAAa,KAAK;AAAA,EAGjC,GAAG,CAAC,WAAW,QAAQ,CAAC;AAExB,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { useEffect, useRef, useState } from "react";
|
|
2
|
+
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
3
|
+
import {
|
|
4
|
+
ACCOUNT_VENDOR,
|
|
5
|
+
ArbiApiError
|
|
6
|
+
} from "@arbidocs/sdk/browser";
|
|
7
|
+
import { useArbi } from "../useArbi.js";
|
|
8
|
+
import { calendarQueryKeys } from "./keys.js";
|
|
9
|
+
import { useCalendarSupport } from "./support.js";
|
|
10
|
+
function invalidateAccounts(qc) {
|
|
11
|
+
return Promise.all([
|
|
12
|
+
qc.invalidateQueries({ queryKey: calendarQueryKeys.accounts() }),
|
|
13
|
+
qc.invalidateQueries({ queryKey: calendarQueryKeys.calendars() }),
|
|
14
|
+
qc.invalidateQueries({ queryKey: calendarQueryKeys.events() })
|
|
15
|
+
]);
|
|
16
|
+
}
|
|
17
|
+
function useCalendarAccounts(enabled = true) {
|
|
18
|
+
const arbi = useArbi();
|
|
19
|
+
return useQuery({
|
|
20
|
+
queryKey: calendarQueryKeys.accounts(),
|
|
21
|
+
queryFn: () => arbi.calendar.listAccounts(),
|
|
22
|
+
enabled: enabled && arbi.isLoggedIn,
|
|
23
|
+
staleTime: 3e4,
|
|
24
|
+
retry: false
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
function useCalDavProfiles(enabled = true) {
|
|
28
|
+
const arbi = useArbi();
|
|
29
|
+
return useQuery({
|
|
30
|
+
queryKey: calendarQueryKeys.caldavProfiles(),
|
|
31
|
+
queryFn: () => arbi.calendar.listCalDavProfiles(),
|
|
32
|
+
enabled: enabled && arbi.isLoggedIn,
|
|
33
|
+
staleTime: 10 * 6e4,
|
|
34
|
+
retry: false
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
async function connectOAuthCalendarAccount(arbi, connectors, kind, backgroundSync = false) {
|
|
38
|
+
try {
|
|
39
|
+
return await arbi.calendar.connectOAuthAccount(kind, backgroundSync);
|
|
40
|
+
} catch (err) {
|
|
41
|
+
if (!(err instanceof ArbiApiError) || err.status !== 401 || !connectors) throw err;
|
|
42
|
+
await connectors.bridge(ACCOUNT_VENDOR[kind]);
|
|
43
|
+
return arbi.calendar.connectOAuthAccount(kind, backgroundSync);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function useConnectOAuthAccount() {
|
|
47
|
+
const arbi = useArbi();
|
|
48
|
+
const { connectors } = useCalendarSupport();
|
|
49
|
+
const qc = useQueryClient();
|
|
50
|
+
return useMutation({
|
|
51
|
+
mutationFn: ({ kind, backgroundSync }) => connectOAuthCalendarAccount(arbi, connectors, kind, !!backgroundSync),
|
|
52
|
+
onSuccess: () => invalidateAccounts(qc)
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
function useConnectCalDavAccount() {
|
|
56
|
+
const arbi = useArbi();
|
|
57
|
+
const qc = useQueryClient();
|
|
58
|
+
return useMutation({
|
|
59
|
+
mutationFn: (body) => arbi.calendar.connectCalDavAccount(body),
|
|
60
|
+
onSuccess: () => invalidateAccounts(qc)
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
function useUpdateCalendarAccount() {
|
|
64
|
+
const arbi = useArbi();
|
|
65
|
+
const qc = useQueryClient();
|
|
66
|
+
return useMutation({
|
|
67
|
+
mutationFn: ({ id, backgroundSync }) => arbi.calendar.updateAccount(id, backgroundSync),
|
|
68
|
+
onSuccess: () => invalidateAccounts(qc)
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
function useSyncCalendarAccount() {
|
|
72
|
+
const arbi = useArbi();
|
|
73
|
+
const qc = useQueryClient();
|
|
74
|
+
return useMutation({
|
|
75
|
+
mutationFn: (id) => arbi.calendar.syncAccount(id),
|
|
76
|
+
onSettled: () => invalidateAccounts(qc)
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
function useDisconnectCalendarAccount() {
|
|
80
|
+
const arbi = useArbi();
|
|
81
|
+
const qc = useQueryClient();
|
|
82
|
+
return useMutation({
|
|
83
|
+
mutationFn: (id) => arbi.calendar.disconnectAccount(id),
|
|
84
|
+
onSuccess: () => invalidateAccounts(qc)
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
const PENDING_CONNECT_KEY = "arbi-calendar-pending-account-connect";
|
|
88
|
+
function readPendingConnect() {
|
|
89
|
+
try {
|
|
90
|
+
const raw = window.sessionStorage.getItem(PENDING_CONNECT_KEY);
|
|
91
|
+
if (!raw) return null;
|
|
92
|
+
const value = JSON.parse(raw);
|
|
93
|
+
if (!value || Date.now() - value.at > 30 * 6e4) return null;
|
|
94
|
+
return value;
|
|
95
|
+
} catch {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function clearPendingConnect() {
|
|
100
|
+
try {
|
|
101
|
+
window.sessionStorage.removeItem(PENDING_CONNECT_KEY);
|
|
102
|
+
} catch {
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function useStartCalendarAccountOAuth() {
|
|
106
|
+
const { connectors, oauthReturnPath } = useCalendarSupport();
|
|
107
|
+
if (!connectors) return void 0;
|
|
108
|
+
return async (kind, backgroundSync = false) => {
|
|
109
|
+
try {
|
|
110
|
+
window.sessionStorage.setItem(
|
|
111
|
+
PENDING_CONNECT_KEY,
|
|
112
|
+
JSON.stringify({ kind, backgroundSync, at: Date.now() })
|
|
113
|
+
);
|
|
114
|
+
} catch {
|
|
115
|
+
}
|
|
116
|
+
const returnPath = oauthReturnPath ?? `${window.location.pathname}${window.location.search}`;
|
|
117
|
+
window.location.assign(await connectors.authorize(ACCOUNT_VENDOR[kind], returnPath));
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function useResumeCalendarAccountConnect(onDone) {
|
|
121
|
+
const { connectors } = useCalendarSupport();
|
|
122
|
+
const connect = useConnectOAuthAccount();
|
|
123
|
+
const started = useRef(false);
|
|
124
|
+
useEffect(() => {
|
|
125
|
+
if (started.current || !connectors) return;
|
|
126
|
+
const pending = readPendingConnect();
|
|
127
|
+
if (!pending) return;
|
|
128
|
+
let live = true;
|
|
129
|
+
void connectors.connectedVendors().then((vendors) => {
|
|
130
|
+
if (!live || started.current || !vendors.includes(ACCOUNT_VENDOR[pending.kind])) return;
|
|
131
|
+
started.current = true;
|
|
132
|
+
clearPendingConnect();
|
|
133
|
+
connect.mutate(
|
|
134
|
+
{ kind: pending.kind, backgroundSync: pending.backgroundSync },
|
|
135
|
+
{
|
|
136
|
+
onSuccess: (account) => onDone?.({ account }),
|
|
137
|
+
onError: (error) => onDone?.({ error })
|
|
138
|
+
}
|
|
139
|
+
);
|
|
140
|
+
}).catch(() => {
|
|
141
|
+
});
|
|
142
|
+
return () => {
|
|
143
|
+
live = false;
|
|
144
|
+
};
|
|
145
|
+
}, [connectors]);
|
|
146
|
+
return connect;
|
|
147
|
+
}
|
|
148
|
+
const syncedThisSession = /* @__PURE__ */ new Set();
|
|
149
|
+
function resetCalendarAccountSyncState() {
|
|
150
|
+
syncedThisSession.clear();
|
|
151
|
+
}
|
|
152
|
+
function useSyncAccountsOnOpen(enabled = true) {
|
|
153
|
+
const arbi = useArbi();
|
|
154
|
+
const { data: accounts } = useCalendarAccounts(enabled);
|
|
155
|
+
const qc = useQueryClient();
|
|
156
|
+
const [syncing, setSyncing] = useState(false);
|
|
157
|
+
useEffect(() => {
|
|
158
|
+
if (!enabled || !accounts?.length) return;
|
|
159
|
+
const due = accounts.filter((a) => !syncedThisSession.has(a.id));
|
|
160
|
+
if (!due.length) return;
|
|
161
|
+
for (const a of due) syncedThisSession.add(a.id);
|
|
162
|
+
setSyncing(true);
|
|
163
|
+
void Promise.allSettled(due.map((a) => arbi.calendar.syncAccount(a.id))).then(() => {
|
|
164
|
+
setSyncing(false);
|
|
165
|
+
void invalidateAccounts(qc);
|
|
166
|
+
});
|
|
167
|
+
}, [enabled, accounts, arbi, qc]);
|
|
168
|
+
return { syncing };
|
|
169
|
+
}
|
|
170
|
+
function useBookingPages(enabled = true) {
|
|
171
|
+
const arbi = useArbi();
|
|
172
|
+
return useQuery({
|
|
173
|
+
queryKey: calendarQueryKeys.bookingPages(),
|
|
174
|
+
queryFn: () => arbi.calendar.listBookingPages(),
|
|
175
|
+
enabled: enabled && arbi.isLoggedIn,
|
|
176
|
+
staleTime: 3e4,
|
|
177
|
+
retry: false
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
function useSaveBookingPage() {
|
|
181
|
+
const arbi = useArbi();
|
|
182
|
+
const qc = useQueryClient();
|
|
183
|
+
return useMutation({
|
|
184
|
+
mutationFn: (body) => arbi.calendar.putBookingPage(body),
|
|
185
|
+
onSuccess: () => qc.invalidateQueries({ queryKey: calendarQueryKeys.bookingPages() })
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
function useDeleteBookingPage() {
|
|
189
|
+
const arbi = useArbi();
|
|
190
|
+
const qc = useQueryClient();
|
|
191
|
+
return useMutation({
|
|
192
|
+
mutationFn: (slug) => arbi.calendar.deleteBookingPage(slug),
|
|
193
|
+
onSuccess: () => qc.invalidateQueries({ queryKey: calendarQueryKeys.bookingPages() })
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
export {
|
|
197
|
+
connectOAuthCalendarAccount,
|
|
198
|
+
resetCalendarAccountSyncState,
|
|
199
|
+
useBookingPages,
|
|
200
|
+
useCalDavProfiles,
|
|
201
|
+
useCalendarAccounts,
|
|
202
|
+
useConnectCalDavAccount,
|
|
203
|
+
useConnectOAuthAccount,
|
|
204
|
+
useDeleteBookingPage,
|
|
205
|
+
useDisconnectCalendarAccount,
|
|
206
|
+
useResumeCalendarAccountConnect,
|
|
207
|
+
useSaveBookingPage,
|
|
208
|
+
useStartCalendarAccountOAuth,
|
|
209
|
+
useSyncAccountsOnOpen,
|
|
210
|
+
useSyncCalendarAccount,
|
|
211
|
+
useUpdateCalendarAccount
|
|
212
|
+
};
|
|
213
|
+
//# sourceMappingURL=accounts.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/calendar/accounts.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Connected calendar accounts (Google, Microsoft, CalDAV) and booking pages.\n * A Google or Microsoft account connects through the host's connector OAuth\n * (`CalendarSupport.connectors`): the intent survives the redirect in sessionStorage and\n * {@link useResumeCalendarAccountConnect} finishes it on return.\n */\n\nimport { useEffect, useRef, useState } from 'react'\nimport { useMutation, useQuery, useQueryClient, type QueryClient } from '@tanstack/react-query'\nimport {\n ACCOUNT_VENDOR,\n ArbiApiError,\n type Arbi,\n type BookingPageWriteBody,\n type CalDavConnectBody,\n type CalendarAccount,\n type OAuthAccountKind,\n} from '@arbidocs/sdk/browser'\nimport { useArbi } from '../useArbi'\nimport { calendarQueryKeys } from './keys'\nimport { useCalendarSupport, type CalendarConnectorSupport } from './support'\n\nfunction invalidateAccounts(qc: QueryClient) {\n return Promise.all([\n qc.invalidateQueries({ queryKey: calendarQueryKeys.accounts() }),\n qc.invalidateQueries({ queryKey: calendarQueryKeys.calendars() }),\n qc.invalidateQueries({ queryKey: calendarQueryKeys.events() }),\n ])\n}\n\nexport function useCalendarAccounts(enabled = true) {\n const arbi = useArbi()\n return useQuery({\n queryKey: calendarQueryKeys.accounts(),\n queryFn: () => arbi.calendar.listAccounts(),\n enabled: enabled && arbi.isLoggedIn,\n staleTime: 30_000,\n retry: false,\n })\n}\n\nexport function useCalDavProfiles(enabled = true) {\n const arbi = useArbi()\n return useQuery({\n queryKey: calendarQueryKeys.caldavProfiles(),\n queryFn: () => arbi.calendar.listCalDavProfiles(),\n enabled: enabled && arbi.isLoggedIn,\n staleTime: 10 * 60_000,\n retry: false,\n })\n}\n\n/**\n * Mirror a Google or Microsoft account. When the server says the connector's grant is not in this\n * session yet (401), bridge it once and retry.\n */\nexport async function connectOAuthCalendarAccount(\n arbi: Arbi,\n connectors: CalendarConnectorSupport | undefined,\n kind: OAuthAccountKind,\n backgroundSync = false\n): Promise<CalendarAccount> {\n try {\n return await arbi.calendar.connectOAuthAccount(kind, backgroundSync)\n } catch (err) {\n if (!(err instanceof ArbiApiError) || err.status !== 401 || !connectors) throw err\n await connectors.bridge(ACCOUNT_VENDOR[kind])\n return arbi.calendar.connectOAuthAccount(kind, backgroundSync)\n }\n}\n\nexport function useConnectOAuthAccount() {\n const arbi = useArbi()\n const { connectors } = useCalendarSupport()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: ({ kind, backgroundSync }: { kind: OAuthAccountKind; backgroundSync?: boolean }) =>\n connectOAuthCalendarAccount(arbi, connectors, kind, !!backgroundSync),\n onSuccess: () => invalidateAccounts(qc),\n })\n}\n\nexport function useConnectCalDavAccount() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: (body: CalDavConnectBody) => arbi.calendar.connectCalDavAccount(body),\n onSuccess: () => invalidateAccounts(qc),\n })\n}\n\nexport function useUpdateCalendarAccount() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: ({ id, backgroundSync }: { id: string; backgroundSync: boolean }) =>\n arbi.calendar.updateAccount(id, backgroundSync),\n onSuccess: () => invalidateAccounts(qc),\n })\n}\n\nexport function useSyncCalendarAccount() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: (id: string) => arbi.calendar.syncAccount(id),\n onSettled: () => invalidateAccounts(qc),\n })\n}\n\nexport function useDisconnectCalendarAccount() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: (id: string) => arbi.calendar.disconnectAccount(id),\n onSuccess: () => invalidateAccounts(qc),\n })\n}\n\n// \u2500\u2500 OAuth round trip: the intent survives the redirect \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst PENDING_CONNECT_KEY = 'arbi-calendar-pending-account-connect'\n\ninterface PendingConnect {\n kind: OAuthAccountKind\n backgroundSync: boolean\n at: number\n}\n\nfunction readPendingConnect(): PendingConnect | null {\n try {\n const raw = window.sessionStorage.getItem(PENDING_CONNECT_KEY)\n if (!raw) return null\n const value = JSON.parse(raw) as PendingConnect\n // Stale after 30 minutes: the consent screen was abandoned.\n if (!value || Date.now() - value.at > 30 * 60_000) return null\n return value\n } catch {\n return null\n }\n}\n\nfunction clearPendingConnect() {\n try {\n window.sessionStorage.removeItem(PENDING_CONNECT_KEY)\n } catch {\n /* storage unavailable */\n }\n}\n\n/**\n * Start a Google or Microsoft account connect: remember the intent, then go to the connector's\n * consent. `useResumeCalendarAccountConnect` finishes it after the redirect back. `undefined`\n * when the host offers no connector OAuth.\n */\nexport function useStartCalendarAccountOAuth():\n ((kind: OAuthAccountKind, backgroundSync?: boolean) => Promise<void>) | undefined {\n const { connectors, oauthReturnPath } = useCalendarSupport()\n if (!connectors) return undefined\n return async (kind, backgroundSync = false) => {\n try {\n window.sessionStorage.setItem(\n PENDING_CONNECT_KEY,\n JSON.stringify({ kind, backgroundSync, at: Date.now() } satisfies PendingConnect)\n )\n } catch {\n /* without storage, Connect is clicked once more after returning */\n }\n const returnPath = oauthReturnPath ?? `${window.location.pathname}${window.location.search}`\n window.location.assign(await connectors.authorize(ACCOUNT_VENDOR[kind], returnPath))\n }\n}\n\n/**\n * After an OAuth round trip started by `useStartCalendarAccountOAuth`, mirror the account once\n * its connector shows as connected.\n */\nexport function useResumeCalendarAccountConnect(\n onDone?: (result: { account?: CalendarAccount; error?: unknown }) => void\n) {\n const { connectors } = useCalendarSupport()\n const connect = useConnectOAuthAccount()\n const started = useRef(false)\n useEffect(() => {\n if (started.current || !connectors) return\n const pending = readPendingConnect()\n if (!pending) return\n let live = true\n void connectors\n .connectedVendors()\n .then((vendors) => {\n if (!live || started.current || !vendors.includes(ACCOUNT_VENDOR[pending.kind])) return\n started.current = true\n clearPendingConnect()\n connect.mutate(\n { kind: pending.kind, backgroundSync: pending.backgroundSync },\n {\n onSuccess: (account) => onDone?.({ account }),\n onError: (error) => onDone?.({ error }),\n }\n )\n })\n .catch(() => {})\n return () => {\n live = false\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- once per mount\n }, [connectors])\n return connect\n}\n\n// \u2500\u2500 Sync on open \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\nconst syncedThisSession = new Set<string>()\n\n/** Test hook: forget which accounts were synced this page load. */\nexport function resetCalendarAccountSyncState() {\n syncedThisSession.clear()\n}\n\n/**\n * Pull and push every connected account once per page load when the calendar opens: the server\n * syncs foreground accounts only with a live session's grant.\n */\nexport function useSyncAccountsOnOpen(enabled = true) {\n const arbi = useArbi()\n const { data: accounts } = useCalendarAccounts(enabled)\n const qc = useQueryClient()\n const [syncing, setSyncing] = useState(false)\n useEffect(() => {\n if (!enabled || !accounts?.length) return\n const due = accounts.filter((a) => !syncedThisSession.has(a.id))\n if (!due.length) return\n for (const a of due) syncedThisSession.add(a.id)\n setSyncing(true)\n void Promise.allSettled(due.map((a) => arbi.calendar.syncAccount(a.id))).then(() => {\n setSyncing(false)\n void invalidateAccounts(qc)\n })\n }, [enabled, accounts, arbi, qc])\n return { syncing }\n}\n\n// \u2500\u2500 Booking pages \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 useBookingPages(enabled = true) {\n const arbi = useArbi()\n return useQuery({\n queryKey: calendarQueryKeys.bookingPages(),\n queryFn: () => arbi.calendar.listBookingPages(),\n enabled: enabled && arbi.isLoggedIn,\n staleTime: 30_000,\n retry: false,\n })\n}\n\nexport function useSaveBookingPage() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: (body: BookingPageWriteBody) => arbi.calendar.putBookingPage(body),\n onSuccess: () => qc.invalidateQueries({ queryKey: calendarQueryKeys.bookingPages() }),\n })\n}\n\nexport function useDeleteBookingPage() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: (slug: string) => arbi.calendar.deleteBookingPage(slug),\n onSuccess: () => qc.invalidateQueries({ queryKey: calendarQueryKeys.bookingPages() }),\n })\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|