@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,270 @@
|
|
|
1
|
+
import { useCallback, useEffect, useId, useMemo, useRef, useState } from "react";
|
|
2
|
+
import { useQuery, useQueryClient } from "@tanstack/react-query";
|
|
3
|
+
import { identityErrorCode } from "@arbidocs/sdk/browser";
|
|
4
|
+
import { useAccountClient } from "./client.js";
|
|
5
|
+
import { arbiQueryKeys } from "../hooks.js";
|
|
6
|
+
import { mountDiditVerification } from "./didit.js";
|
|
7
|
+
function problemOf(error, fallback) {
|
|
8
|
+
const code = identityErrorCode(error) ?? error?.code;
|
|
9
|
+
const message = error instanceof Error && error.message ? error.message : fallback;
|
|
10
|
+
return { code: typeof code === "string" ? code : void 0, message };
|
|
11
|
+
}
|
|
12
|
+
function identityStepFor(status) {
|
|
13
|
+
if (!status) return "pay";
|
|
14
|
+
if (["name_mismatch", "in_review", "verified"].includes(status.state)) return "result";
|
|
15
|
+
if (status.state === "declined") return status.attempts_left > 0 ? "result" : "pay";
|
|
16
|
+
if (status.state === "in_progress" || status.attempts_left > 0) return "verify";
|
|
17
|
+
return "pay";
|
|
18
|
+
}
|
|
19
|
+
function formatIdentityPrice(status) {
|
|
20
|
+
let amount;
|
|
21
|
+
try {
|
|
22
|
+
amount = new Intl.NumberFormat("en-GB", {
|
|
23
|
+
style: "currency",
|
|
24
|
+
currency: status.currency
|
|
25
|
+
}).format(status.price_pence / 100);
|
|
26
|
+
} catch {
|
|
27
|
+
amount = `${(status.price_pence / 100).toFixed(2)} ${status.currency}`;
|
|
28
|
+
}
|
|
29
|
+
return `${amount} incl. VAT`;
|
|
30
|
+
}
|
|
31
|
+
function useIdentityVerificationFlow(api, {
|
|
32
|
+
enabled = true,
|
|
33
|
+
onVerifiedChange,
|
|
34
|
+
onNameAccepted,
|
|
35
|
+
formatPrice = formatIdentityPrice
|
|
36
|
+
} = {}) {
|
|
37
|
+
const qc = useQueryClient();
|
|
38
|
+
const apiRef = useRef(api);
|
|
39
|
+
apiRef.current = api;
|
|
40
|
+
const query = useQuery({
|
|
41
|
+
queryKey: arbiQueryKeys.identity(),
|
|
42
|
+
queryFn: () => apiRef.current.status(),
|
|
43
|
+
enabled,
|
|
44
|
+
staleTime: 6e4
|
|
45
|
+
});
|
|
46
|
+
const status = query.data;
|
|
47
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
48
|
+
const [step, setStep] = useState("pay");
|
|
49
|
+
const [busy, setBusy] = useState(null);
|
|
50
|
+
const [problem, setProblem] = useState(null);
|
|
51
|
+
const [paymentUrl, setPaymentUrl] = useState(null);
|
|
52
|
+
const [sessionUrl, setSessionUrl] = useState(null);
|
|
53
|
+
const [container, setContainer] = useState(null);
|
|
54
|
+
const [embedFailed, setEmbedFailed] = useState(false);
|
|
55
|
+
const verifyContainerId = `didit-${useId().replace(/[^a-zA-Z0-9_-]/g, "")}`;
|
|
56
|
+
const lastVerified = useRef(void 0);
|
|
57
|
+
const apply = useCallback(
|
|
58
|
+
(next) => {
|
|
59
|
+
qc.setQueryData(arbiQueryKeys.identity(), next);
|
|
60
|
+
if (lastVerified.current !== void 0 && lastVerified.current !== next.verified) {
|
|
61
|
+
onVerifiedChange?.(next.verified);
|
|
62
|
+
}
|
|
63
|
+
lastVerified.current = next.verified;
|
|
64
|
+
return next;
|
|
65
|
+
},
|
|
66
|
+
[qc, onVerifiedChange]
|
|
67
|
+
);
|
|
68
|
+
useEffect(() => {
|
|
69
|
+
if (status && lastVerified.current === void 0) lastVerified.current = status.verified;
|
|
70
|
+
}, [status]);
|
|
71
|
+
const run = useCallback(
|
|
72
|
+
async (kind, fallback, fn) => {
|
|
73
|
+
setBusy(kind);
|
|
74
|
+
setProblem(null);
|
|
75
|
+
try {
|
|
76
|
+
return await fn();
|
|
77
|
+
} catch (e) {
|
|
78
|
+
setProblem(problemOf(e, fallback));
|
|
79
|
+
return void 0;
|
|
80
|
+
} finally {
|
|
81
|
+
setBusy(null);
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
[]
|
|
85
|
+
);
|
|
86
|
+
const isOpenRef = useRef(false);
|
|
87
|
+
const closeRef = useRef(() => {
|
|
88
|
+
});
|
|
89
|
+
const startVerifyRef = useRef(async () => {
|
|
90
|
+
});
|
|
91
|
+
const refresh = useCallback(async () => {
|
|
92
|
+
const next = await run(
|
|
93
|
+
"refresh",
|
|
94
|
+
"Could not read the verification result",
|
|
95
|
+
() => apiRef.current.refresh()
|
|
96
|
+
);
|
|
97
|
+
if (!next) return;
|
|
98
|
+
apply(next);
|
|
99
|
+
if (next.state === "in_progress") return;
|
|
100
|
+
setSessionUrl(null);
|
|
101
|
+
const nextStep = next.state === "declined" ? "result" : identityStepFor(next);
|
|
102
|
+
if (nextStep === "verify" && isOpenRef.current) void startVerifyRef.current();
|
|
103
|
+
else setStep(nextStep);
|
|
104
|
+
}, [run, apply]);
|
|
105
|
+
const refreshedOnLoad = useRef(false);
|
|
106
|
+
useEffect(() => {
|
|
107
|
+
if (refreshedOnLoad.current || !status) return;
|
|
108
|
+
refreshedOnLoad.current = true;
|
|
109
|
+
if (status.state === "in_progress" || status.state === "in_review") void refresh();
|
|
110
|
+
}, [status, refresh]);
|
|
111
|
+
const startVerify = useCallback(async () => {
|
|
112
|
+
setStep("verify");
|
|
113
|
+
setEmbedFailed(false);
|
|
114
|
+
const url = await run(
|
|
115
|
+
"start",
|
|
116
|
+
"Could not start identity verification",
|
|
117
|
+
() => apiRef.current.startSession()
|
|
118
|
+
);
|
|
119
|
+
if (url) {
|
|
120
|
+
setSessionUrl(url);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
setStep("pay");
|
|
124
|
+
}, [run]);
|
|
125
|
+
startVerifyRef.current = startVerify;
|
|
126
|
+
useEffect(() => {
|
|
127
|
+
if (!isOpen || step !== "verify" || !sessionUrl || !container || embedFailed) return;
|
|
128
|
+
let teardown;
|
|
129
|
+
let cancelled = false;
|
|
130
|
+
mountDiditVerification({
|
|
131
|
+
url: sessionUrl,
|
|
132
|
+
containerId: container.id,
|
|
133
|
+
onResult: (result) => {
|
|
134
|
+
if (result.type === "failed" && result.error?.type === "cameraAccessDenied") {
|
|
135
|
+
setEmbedFailed(true);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
if (result.type === "cancelled") {
|
|
139
|
+
closeRef.current();
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
void refresh();
|
|
143
|
+
}
|
|
144
|
+
}).then((stop) => {
|
|
145
|
+
if (cancelled) stop();
|
|
146
|
+
else teardown = stop;
|
|
147
|
+
}).catch(() => setEmbedFailed(true));
|
|
148
|
+
return () => {
|
|
149
|
+
cancelled = true;
|
|
150
|
+
teardown?.();
|
|
151
|
+
};
|
|
152
|
+
}, [isOpen, step, sessionUrl, container, embedFailed, refresh]);
|
|
153
|
+
const [waitingInTab, setWaitingInTab] = useState(false);
|
|
154
|
+
useEffect(() => {
|
|
155
|
+
if (!waitingInTab || typeof window === "undefined") return;
|
|
156
|
+
const onFocus = () => void refresh();
|
|
157
|
+
window.addEventListener("focus", onFocus);
|
|
158
|
+
return () => window.removeEventListener("focus", onFocus);
|
|
159
|
+
}, [waitingInTab, refresh]);
|
|
160
|
+
const open = useCallback(() => {
|
|
161
|
+
isOpenRef.current = true;
|
|
162
|
+
setProblem(null);
|
|
163
|
+
setPaymentUrl(status?.pending_payment_url ?? null);
|
|
164
|
+
const first = identityStepFor(status);
|
|
165
|
+
setStep(first);
|
|
166
|
+
setIsOpen(true);
|
|
167
|
+
if (first === "verify") void startVerify();
|
|
168
|
+
}, [status, startVerify]);
|
|
169
|
+
const close = useCallback(() => {
|
|
170
|
+
isOpenRef.current = false;
|
|
171
|
+
setIsOpen(false);
|
|
172
|
+
setSessionUrl(null);
|
|
173
|
+
setWaitingInTab(false);
|
|
174
|
+
setEmbedFailed(false);
|
|
175
|
+
setProblem(null);
|
|
176
|
+
}, []);
|
|
177
|
+
closeRef.current = close;
|
|
178
|
+
const pay = useCallback(async () => {
|
|
179
|
+
const result = await run(
|
|
180
|
+
"pay",
|
|
181
|
+
"Payment could not be completed",
|
|
182
|
+
() => apiRef.current.purchase()
|
|
183
|
+
);
|
|
184
|
+
if (!result) return;
|
|
185
|
+
if (result.status === "requires_action") {
|
|
186
|
+
setPaymentUrl(result.payment_url ?? null);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
setPaymentUrl(null);
|
|
190
|
+
void query.refetch();
|
|
191
|
+
void startVerify();
|
|
192
|
+
}, [run, query, startVerify]);
|
|
193
|
+
const acceptName = useCallback(async () => {
|
|
194
|
+
const offered = status;
|
|
195
|
+
const next = await run(
|
|
196
|
+
"accept",
|
|
197
|
+
"Could not change your name",
|
|
198
|
+
() => apiRef.current.acceptName()
|
|
199
|
+
);
|
|
200
|
+
if (!next) return;
|
|
201
|
+
apply(next);
|
|
202
|
+
if (offered?.document_given_name) {
|
|
203
|
+
onNameAccepted?.({
|
|
204
|
+
givenName: offered.document_given_name,
|
|
205
|
+
familyName: offered.document_family_name ?? null
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}, [run, apply, status, onNameAccepted]);
|
|
209
|
+
const remove = useCallback(async () => {
|
|
210
|
+
const next = await run(
|
|
211
|
+
"remove",
|
|
212
|
+
"Could not remove the verification",
|
|
213
|
+
() => apiRef.current.remove()
|
|
214
|
+
);
|
|
215
|
+
if (next) apply(next);
|
|
216
|
+
}, [run, apply]);
|
|
217
|
+
const price = useMemo(() => status ? formatPrice(status) : null, [status, formatPrice]);
|
|
218
|
+
return {
|
|
219
|
+
status,
|
|
220
|
+
isLoading: query.isLoading,
|
|
221
|
+
price,
|
|
222
|
+
isOpen,
|
|
223
|
+
open,
|
|
224
|
+
close,
|
|
225
|
+
step,
|
|
226
|
+
busy,
|
|
227
|
+
problem,
|
|
228
|
+
paymentUrl,
|
|
229
|
+
pay: () => void pay(),
|
|
230
|
+
recheckPayment: () => void startVerify(),
|
|
231
|
+
verifyContainerId,
|
|
232
|
+
verifyContainerRef: setContainer,
|
|
233
|
+
embedFailed,
|
|
234
|
+
openInNewTab: () => {
|
|
235
|
+
if (!sessionUrl || typeof window === "undefined") return;
|
|
236
|
+
window.open(sessionUrl, "_blank", "noopener");
|
|
237
|
+
setWaitingInTab(true);
|
|
238
|
+
},
|
|
239
|
+
checkResult: () => void refresh(),
|
|
240
|
+
retry: () => void startVerify(),
|
|
241
|
+
acceptName: () => void acceptName(),
|
|
242
|
+
keepName: close,
|
|
243
|
+
remove: () => void remove()
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
function useIdentityVerification(options = {}) {
|
|
247
|
+
const { client, enabled } = useAccountClient();
|
|
248
|
+
const qc = useQueryClient();
|
|
249
|
+
const { onVerifiedChange, onNameAccepted, formatPrice } = options;
|
|
250
|
+
return useIdentityVerificationFlow(client.identity, {
|
|
251
|
+
enabled,
|
|
252
|
+
formatPrice,
|
|
253
|
+
onVerifiedChange: (verified) => {
|
|
254
|
+
void qc.invalidateQueries({ queryKey: arbiQueryKeys.profile() });
|
|
255
|
+
onVerifiedChange?.(verified);
|
|
256
|
+
},
|
|
257
|
+
onNameAccepted: (name) => {
|
|
258
|
+
void qc.invalidateQueries({ queryKey: arbiQueryKeys.profile() });
|
|
259
|
+
void qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() });
|
|
260
|
+
onNameAccepted?.(name);
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
export {
|
|
265
|
+
formatIdentityPrice,
|
|
266
|
+
identityStepFor,
|
|
267
|
+
useIdentityVerification,
|
|
268
|
+
useIdentityVerificationFlow
|
|
269
|
+
};
|
|
270
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/account/identity.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Identity verification: the optional, paid ID check behind the verified tick (Pro plans only).\n *\n * Two layers, like `profile.ts`. `useIdentityVerificationFlow` owns the dialog's state and takes\n * the backend calls as functions, so an app with its own API layer (ARBI-frontend) binds the same\n * `IdentityVerificationCard` / `IdentityVerificationDialog` blocks without a provider.\n * `useIdentityVerification` binds it to the SDK (`arbi.identity`).\n *\n * Steps: pay the one-time fee (charged to the user's Pro project card) \u2192 verify inside Didit's\n * embedded frame \u2192 result (verified, declined, in review, or the name on the document differs from\n * the account name, offered as the new name). No webhooks: completing Didit's flow calls `refresh`.\n */\n\nimport { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react'\nimport { useQuery, useQueryClient } from '@tanstack/react-query'\nimport { identityErrorCode } from '@arbidocs/sdk/browser'\nimport { useAccountClient } from './client'\nimport { arbiQueryKeys } from '../hooks'\nimport { mountDiditVerification } from './didit'\nimport type {\n IdentityBusy,\n IdentityProblem,\n IdentityPurchase,\n IdentityStatus,\n IdentityStep,\n IdentityVerificationFlow,\n} from './identity-types'\n\nexport type {\n IdentityBusy,\n IdentityProblem,\n IdentityPurchase,\n IdentityState,\n IdentityStatus,\n IdentityStep,\n IdentityVerificationFlow,\n} from './identity-types'\n\n/** The backend calls of the flow, as functions (see the module comment). */\nexport interface IdentityVerificationApi {\n status: () => Promise<IdentityStatus>\n purchase: () => Promise<IdentityPurchase>\n /** The Didit session URL. */\n startSession: () => Promise<string>\n refresh: () => Promise<IdentityStatus>\n acceptName: () => Promise<IdentityStatus>\n remove: () => Promise<IdentityStatus>\n}\n\nexport interface UseIdentityVerificationFlowOptions {\n /** Load the status (default true; e.g. false while signed out). */\n enabled?: boolean\n /** The tick changed (granted, renamed away, removed): update the host's copy of the user. */\n onVerifiedChange?: (verified: boolean) => void\n /** The account name became the name on the document. */\n onNameAccepted?: (name: { givenName: string; familyName: string | null }) => void\n /** The host's price format (e.g. its billing helpers); default `formatIdentityPrice`. */\n formatPrice?: (status: IdentityStatus) => string\n}\n\nfunction problemOf(error: unknown, fallback: string): IdentityProblem {\n const code = identityErrorCode(error) ?? (error as { code?: unknown } | null)?.code\n const message = error instanceof Error && error.message ? error.message : fallback\n return { code: typeof code === 'string' ? code : undefined, message }\n}\n\n/** Which step the dialog opens on for a status. */\nexport function identityStepFor(status: IdentityStatus | undefined): IdentityStep {\n if (!status) return 'pay'\n if (['name_mismatch', 'in_review', 'verified'].includes(status.state)) return 'result'\n if (status.state === 'declined') return status.attempts_left > 0 ? 'result' : 'pay'\n if (status.state === 'in_progress' || status.attempts_left > 0) return 'verify'\n return 'pay'\n}\n\n/** \"\u00A35.00 incl. VAT\": the fee is quoted including UK VAT. */\nexport function formatIdentityPrice(status: IdentityStatus): string {\n let amount: string\n try {\n amount = new Intl.NumberFormat('en-GB', {\n style: 'currency',\n currency: status.currency,\n }).format(status.price_pence / 100)\n } catch {\n amount = `${(status.price_pence / 100).toFixed(2)} ${status.currency}`\n }\n return `${amount} incl. VAT`\n}\n\n/** The identity verification dialog's state, bound to the backend calls in `api`. */\nexport function useIdentityVerificationFlow(\n api: IdentityVerificationApi,\n {\n enabled = true,\n onVerifiedChange,\n onNameAccepted,\n formatPrice = formatIdentityPrice,\n }: UseIdentityVerificationFlowOptions = {}\n): IdentityVerificationFlow {\n const qc = useQueryClient()\n const apiRef = useRef(api)\n apiRef.current = api\n const query = useQuery({\n queryKey: arbiQueryKeys.identity(),\n queryFn: () => apiRef.current.status(),\n enabled,\n staleTime: 60_000,\n })\n const status = query.data\n\n const [isOpen, setIsOpen] = useState(false)\n const [step, setStep] = useState<IdentityStep>('pay')\n const [busy, setBusy] = useState<IdentityBusy>(null)\n const [problem, setProblem] = useState<IdentityProblem | null>(null)\n const [paymentUrl, setPaymentUrl] = useState<string | null>(null)\n const [sessionUrl, setSessionUrl] = useState<string | null>(null)\n const [container, setContainer] = useState<HTMLElement | null>(null)\n const [embedFailed, setEmbedFailed] = useState(false)\n const verifyContainerId = `didit-${useId().replace(/[^a-zA-Z0-9_-]/g, '')}`\n\n const lastVerified = useRef<boolean | undefined>(undefined)\n const apply = useCallback(\n (next: IdentityStatus) => {\n qc.setQueryData(arbiQueryKeys.identity(), next)\n if (lastVerified.current !== undefined && lastVerified.current !== next.verified) {\n onVerifiedChange?.(next.verified)\n }\n lastVerified.current = next.verified\n return next\n },\n [qc, onVerifiedChange]\n )\n useEffect(() => {\n if (status && lastVerified.current === undefined) lastVerified.current = status.verified\n }, [status])\n\n const run = useCallback(\n async <T>(kind: Exclude<IdentityBusy, null>, fallback: string, fn: () => Promise<T>) => {\n setBusy(kind)\n setProblem(null)\n try {\n return await fn()\n } catch (e) {\n setProblem(problemOf(e, fallback))\n return undefined\n } finally {\n setBusy(null)\n }\n },\n []\n )\n\n const isOpenRef = useRef(false)\n const closeRef = useRef<() => void>(() => {})\n const startVerifyRef = useRef<() => Promise<void>>(async () => {})\n\n const refresh = useCallback(async () => {\n const next = await run('refresh', 'Could not read the verification result', () =>\n apiRef.current.refresh()\n )\n if (!next) return\n apply(next)\n if (next.state === 'in_progress') return\n setSessionUrl(null)\n const nextStep = next.state === 'declined' ? 'result' : identityStepFor(next)\n // An abandoned or expired session (state none, attempts left): open a fresh one.\n if (nextStep === 'verify' && isOpenRef.current) void startVerifyRef.current()\n else setStep(nextStep)\n }, [run, apply])\n\n // A check left open (closed tab, reload, manual review): ask for its result once on load.\n const refreshedOnLoad = useRef(false)\n useEffect(() => {\n if (refreshedOnLoad.current || !status) return\n refreshedOnLoad.current = true\n if (status.state === 'in_progress' || status.state === 'in_review') void refresh()\n }, [status, refresh])\n\n const startVerify = useCallback(async () => {\n setStep('verify')\n setEmbedFailed(false)\n const url = await run('start', 'Could not start identity verification', () =>\n apiRef.current.startSession()\n )\n if (url) {\n setSessionUrl(url)\n return\n }\n // Still unpaid (a 3-D Secure payment not confirmed yet): back to the payment step.\n setStep('pay')\n }, [run])\n startVerifyRef.current = startVerify\n\n // Mount Didit once the session is open and its host element is on screen.\n useEffect(() => {\n if (!isOpen || step !== 'verify' || !sessionUrl || !container || embedFailed) return\n let teardown: (() => void) | undefined\n let cancelled = false\n mountDiditVerification({\n url: sessionUrl,\n containerId: container.id,\n onResult: (result) => {\n if (result.type === 'failed' && result.error?.type === 'cameraAccessDenied') {\n setEmbedFailed(true)\n return\n }\n if (result.type === 'cancelled') {\n closeRef.current()\n return\n }\n void refresh()\n },\n })\n .then((stop) => {\n if (cancelled) stop()\n else teardown = stop\n })\n .catch(() => setEmbedFailed(true))\n return () => {\n cancelled = true\n teardown?.()\n }\n }, [isOpen, step, sessionUrl, container, embedFailed, refresh])\n\n // Verifying in another tab: look for the result when the user comes back.\n const [waitingInTab, setWaitingInTab] = useState(false)\n useEffect(() => {\n if (!waitingInTab || typeof window === 'undefined') return\n const onFocus = () => void refresh()\n window.addEventListener('focus', onFocus)\n return () => window.removeEventListener('focus', onFocus)\n }, [waitingInTab, refresh])\n\n const open = useCallback(() => {\n isOpenRef.current = true\n setProblem(null)\n setPaymentUrl(status?.pending_payment_url ?? null)\n const first = identityStepFor(status)\n setStep(first)\n setIsOpen(true)\n if (first === 'verify') void startVerify()\n }, [status, startVerify])\n\n const close = useCallback(() => {\n isOpenRef.current = false\n setIsOpen(false)\n setSessionUrl(null)\n setWaitingInTab(false)\n setEmbedFailed(false)\n setProblem(null)\n }, [])\n closeRef.current = close\n\n const pay = useCallback(async () => {\n const result = await run('pay', 'Payment could not be completed', () =>\n apiRef.current.purchase()\n )\n if (!result) return\n if (result.status === 'requires_action') {\n setPaymentUrl(result.payment_url ?? null)\n return\n }\n setPaymentUrl(null)\n void query.refetch()\n void startVerify()\n }, [run, query, startVerify])\n\n const acceptName = useCallback(async () => {\n const offered = status\n const next = await run('accept', 'Could not change your name', () =>\n apiRef.current.acceptName()\n )\n if (!next) return\n apply(next)\n if (offered?.document_given_name) {\n onNameAccepted?.({\n givenName: offered.document_given_name,\n familyName: offered.document_family_name ?? null,\n })\n }\n }, [run, apply, status, onNameAccepted])\n\n const remove = useCallback(async () => {\n const next = await run('remove', 'Could not remove the verification', () =>\n apiRef.current.remove()\n )\n if (next) apply(next)\n }, [run, apply])\n\n const price = useMemo(() => (status ? formatPrice(status) : null), [status, formatPrice])\n\n return {\n status,\n isLoading: query.isLoading,\n price,\n isOpen,\n open,\n close,\n step,\n busy,\n problem,\n paymentUrl,\n pay: () => void pay(),\n recheckPayment: () => void startVerify(),\n verifyContainerId,\n verifyContainerRef: setContainer,\n embedFailed,\n openInNewTab: () => {\n if (!sessionUrl || typeof window === 'undefined') return\n window.open(sessionUrl, '_blank', 'noopener')\n setWaitingInTab(true)\n },\n checkResult: () => void refresh(),\n retry: () => void startVerify(),\n acceptName: () => void acceptName(),\n keepName: close,\n remove: () => void remove(),\n }\n}\n\n// \u2500\u2500 Bound \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\n/**\n * The identity verification flow over the account client in scope; the profile query follows the\n * tick and name.\n */\nexport function useIdentityVerification(\n options: Omit<UseIdentityVerificationFlowOptions, 'enabled'> = {}\n): IdentityVerificationFlow {\n const { client, enabled } = useAccountClient()\n const qc = useQueryClient()\n const { onVerifiedChange, onNameAccepted, formatPrice } = options\n return useIdentityVerificationFlow(client.identity, {\n enabled,\n formatPrice,\n onVerifiedChange: (verified) => {\n void qc.invalidateQueries({ queryKey: arbiQueryKeys.profile() })\n onVerifiedChange?.(verified)\n },\n onNameAccepted: (name) => {\n void qc.invalidateQueries({ queryKey: arbiQueryKeys.profile() })\n void qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() })\n onNameAccepted?.(name)\n },\n })\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import {
|
|
2
|
+
useProfile,
|
|
3
|
+
useUpdateProfile,
|
|
4
|
+
toProfileView,
|
|
5
|
+
useNameEditor,
|
|
6
|
+
useAvatarCrop,
|
|
7
|
+
MAX_AVATAR_FILE_BYTES
|
|
8
|
+
} from "./profile.js";
|
|
9
|
+
import {
|
|
10
|
+
useRequestEmailChange,
|
|
11
|
+
useConfirmEmailChange,
|
|
12
|
+
useEmailChange
|
|
13
|
+
} from "./email.js";
|
|
14
|
+
import {
|
|
15
|
+
usePasswordChange,
|
|
16
|
+
usePasswordChangeForm,
|
|
17
|
+
DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES
|
|
18
|
+
} from "./password.js";
|
|
19
|
+
import { useUserSettings, useUpdateUserSettings } from "./settings.js";
|
|
20
|
+
import { useDismissedTips } from "./dismissed-tips.js";
|
|
21
|
+
import {
|
|
22
|
+
useNotificationPreferences,
|
|
23
|
+
toNotificationPreferences
|
|
24
|
+
} from "./notifications.js";
|
|
25
|
+
import {
|
|
26
|
+
useWorkspaceNotificationLevel,
|
|
27
|
+
useFollowThread
|
|
28
|
+
} from "./relevance.js";
|
|
29
|
+
import { useSessions, useTerminateSession, useSignOut, useCurrentSessionId } from "./sessions.js";
|
|
30
|
+
import {
|
|
31
|
+
arbiAccountClient,
|
|
32
|
+
useAccountClient
|
|
33
|
+
} from "./client.js";
|
|
34
|
+
import {
|
|
35
|
+
useDeleteAccount,
|
|
36
|
+
useDeleteAccountFlow,
|
|
37
|
+
parseDeleteAccountBlockers
|
|
38
|
+
} from "./delete.js";
|
|
39
|
+
import {
|
|
40
|
+
useIdentityVerification,
|
|
41
|
+
useIdentityVerificationFlow,
|
|
42
|
+
identityStepFor,
|
|
43
|
+
formatIdentityPrice
|
|
44
|
+
} from "./identity.js";
|
|
45
|
+
import { mountDiditVerification } from "./didit.js";
|
|
46
|
+
import { downloadRecoveryFile } from "./recovery.js";
|
|
47
|
+
import {
|
|
48
|
+
useEntitlements,
|
|
49
|
+
useInvalidateEntitlements,
|
|
50
|
+
useIsEntitled,
|
|
51
|
+
entitlementRefusal
|
|
52
|
+
} from "./entitlements.js";
|
|
53
|
+
export {
|
|
54
|
+
DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES,
|
|
55
|
+
MAX_AVATAR_FILE_BYTES,
|
|
56
|
+
arbiAccountClient,
|
|
57
|
+
downloadRecoveryFile,
|
|
58
|
+
entitlementRefusal,
|
|
59
|
+
formatIdentityPrice,
|
|
60
|
+
identityStepFor,
|
|
61
|
+
mountDiditVerification,
|
|
62
|
+
parseDeleteAccountBlockers,
|
|
63
|
+
toNotificationPreferences,
|
|
64
|
+
toProfileView,
|
|
65
|
+
useAccountClient,
|
|
66
|
+
useAvatarCrop,
|
|
67
|
+
useConfirmEmailChange,
|
|
68
|
+
useCurrentSessionId,
|
|
69
|
+
useDeleteAccount,
|
|
70
|
+
useDeleteAccountFlow,
|
|
71
|
+
useDismissedTips,
|
|
72
|
+
useEmailChange,
|
|
73
|
+
useEntitlements,
|
|
74
|
+
useFollowThread,
|
|
75
|
+
useIdentityVerification,
|
|
76
|
+
useIdentityVerificationFlow,
|
|
77
|
+
useInvalidateEntitlements,
|
|
78
|
+
useIsEntitled,
|
|
79
|
+
useNameEditor,
|
|
80
|
+
useNotificationPreferences,
|
|
81
|
+
usePasswordChange,
|
|
82
|
+
usePasswordChangeForm,
|
|
83
|
+
useProfile,
|
|
84
|
+
useRequestEmailChange,
|
|
85
|
+
useSessions,
|
|
86
|
+
useSignOut,
|
|
87
|
+
useTerminateSession,
|
|
88
|
+
useUpdateProfile,
|
|
89
|
+
useUpdateUserSettings,
|
|
90
|
+
useUserSettings,
|
|
91
|
+
useWorkspaceNotificationLevel
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/account/index.ts"],
|
|
4
|
+
"sourcesContent": ["export {\n useProfile,\n useUpdateProfile,\n toProfileView,\n useNameEditor,\n useAvatarCrop,\n MAX_AVATAR_FILE_BYTES,\n type ProfileView,\n type UpdateProfileVars,\n type UseNameEditorOptions,\n type NameEditor,\n type UseAvatarCropOptions,\n type AvatarCrop,\n type AvatarFileProblem,\n} from './profile'\nexport {\n useRequestEmailChange,\n useConfirmEmailChange,\n useEmailChange,\n type UseEmailChangeOptions,\n type EmailChange,\n} from './email'\nexport {\n usePasswordChange,\n usePasswordChangeForm,\n DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES,\n type PasswordChangeVars,\n type PasswordChangeFormMessages,\n type UsePasswordChangeFormOptions,\n type PasswordChangeForm,\n} from './password'\nexport { useUserSettings, useUpdateUserSettings, type UserSettingsPatch } from './settings'\nexport { useDismissedTips } from './dismissed-tips'\nexport {\n useNotificationPreferences,\n toNotificationPreferences,\n type EmailPreferences,\n type NotificationPreferencesModel,\n} from './notifications'\nexport {\n useWorkspaceNotificationLevel,\n useFollowThread,\n type WorkspaceNotificationLevel,\n type RelevancePatch,\n type FollowSaveCallbacks,\n} from './relevance'\nexport { useSessions, useTerminateSession, useSignOut, useCurrentSessionId } from './sessions'\nexport {\n arbiAccountClient,\n useAccountClient,\n type AccountClient,\n type AccountClientContextValue,\n type AccountSession,\n type AccountSignOutOptions,\n} from './client'\nexport {\n useDeleteAccount,\n useDeleteAccountFlow,\n parseDeleteAccountBlockers,\n type DeleteAccountBlocker,\n type UseDeleteAccountFlowOptions,\n type DeleteAccountFlow,\n} from './delete'\nexport {\n useIdentityVerification,\n useIdentityVerificationFlow,\n identityStepFor,\n formatIdentityPrice,\n type IdentityVerificationApi,\n type IdentityVerificationFlow,\n type UseIdentityVerificationFlowOptions,\n type IdentityStep,\n type IdentityBusy,\n type IdentityProblem,\n type IdentityStatus,\n type IdentityState,\n type IdentityPurchase,\n} from './identity'\nexport { mountDiditVerification, type MountDiditOptions } from './didit'\nexport { downloadRecoveryFile } from './recovery'\nexport {\n useEntitlements,\n useInvalidateEntitlements,\n useIsEntitled,\n entitlementRefusal,\n type FeatureEntitlements,\n type EntitledFeature,\n type FeatureRefusal,\n} from './entitlements'\n"],
|
|
5
|
+
"mappings": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAQK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAKK;AACP,SAAS,iBAAiB,6BAAqD;AAC/E,SAAS,wBAAwB;AACjC;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OAIK;AACP,SAAS,aAAa,qBAAqB,YAAY,2BAA2B;AAClF;AAAA,EACE;AAAA,EACA;AAAA,OAKK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAUK;AACP,SAAS,8BAAsD;AAC/D,SAAS,4BAA4B;AACrC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { useCallback, useMemo } from "react";
|
|
2
|
+
import { useMutation, useQueryClient } from "@tanstack/react-query";
|
|
3
|
+
import { useArbi } from "../useArbi.js";
|
|
4
|
+
import { arbiQueryKeys } from "../hooks.js";
|
|
5
|
+
import { useUserSettings } from "./settings.js";
|
|
6
|
+
function toNotificationPreferences(stored, keys) {
|
|
7
|
+
const checked = Object.fromEntries(keys.map((key) => [key, stored?.[key] ?? true]));
|
|
8
|
+
return {
|
|
9
|
+
masterChecked: keys.some((key) => checked[key]),
|
|
10
|
+
checked,
|
|
11
|
+
masterPatch: (value) => Object.fromEntries(keys.map((key) => [key, value])),
|
|
12
|
+
categoryPatch: (key, value) => ({ [key]: value })
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function useNotificationPreferences(keys, options) {
|
|
16
|
+
const arbi = useArbi();
|
|
17
|
+
const qc = useQueryClient();
|
|
18
|
+
const settings = useUserSettings(options);
|
|
19
|
+
const stored = settings.data?.email_notifications;
|
|
20
|
+
const save = useMutation({
|
|
21
|
+
mutationFn: (patch) => arbi.settings.update({ email_notifications: patch }),
|
|
22
|
+
onMutate: async (patch) => {
|
|
23
|
+
await qc.cancelQueries({ queryKey: arbiQueryKeys.userSettings() });
|
|
24
|
+
const previous = qc.getQueryData(arbiQueryKeys.userSettings());
|
|
25
|
+
qc.setQueryData(
|
|
26
|
+
arbiQueryKeys.userSettings(),
|
|
27
|
+
(old) => old ? { ...old, email_notifications: { ...old.email_notifications, ...patch } } : old
|
|
28
|
+
);
|
|
29
|
+
return { previous };
|
|
30
|
+
},
|
|
31
|
+
onError: (_err, _patch, context) => {
|
|
32
|
+
qc.setQueryData(arbiQueryKeys.userSettings(), context?.previous);
|
|
33
|
+
},
|
|
34
|
+
onSettled: () => qc.invalidateQueries({ queryKey: arbiQueryKeys.userSettings() })
|
|
35
|
+
});
|
|
36
|
+
const model = useMemo(() => toNotificationPreferences(stored, keys), [stored, keys]);
|
|
37
|
+
const setAll = useCallback(
|
|
38
|
+
(value) => save.mutate(model.masterPatch(value)),
|
|
39
|
+
[save, model]
|
|
40
|
+
);
|
|
41
|
+
const setCategory = useCallback(
|
|
42
|
+
(key, value) => save.mutate(model.categoryPatch(key, value)),
|
|
43
|
+
[save, model]
|
|
44
|
+
);
|
|
45
|
+
return {
|
|
46
|
+
...model,
|
|
47
|
+
isLoading: settings.isLoading,
|
|
48
|
+
isSaving: save.isPending,
|
|
49
|
+
/** The master switch handler: every category on or off. */
|
|
50
|
+
setAll,
|
|
51
|
+
/** One category's handler. */
|
|
52
|
+
setCategory
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export {
|
|
56
|
+
toNotificationPreferences,
|
|
57
|
+
useNotificationPreferences
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=notifications.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/account/notifications.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Notification preferences: which email categories the user wants (the `email_notifications`\n * record of the user settings). All default on. The master switch on `NotificationCategoryList`\n * is \"on while at least one category is on\" and writes every category at once.\n */\n\nimport { useCallback, useMemo } from 'react'\nimport { useMutation, useQueryClient } from '@tanstack/react-query'\nimport { useArbi } from '../useArbi'\nimport { arbiQueryKeys } from '../hooks'\nimport { useUserSettings } from './settings'\n\n/** Category key to on/off, e.g. `{ messages: true, product_updates: false }`. */\nexport type EmailPreferences = Record<string, boolean>\n\n// \u2500\u2500 Pure core \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 interface NotificationPreferencesModel {\n /** Master switch: on while at least one category is on. */\n masterChecked: boolean\n /** Each category's state (`true` when the record says nothing: the default). */\n checked: Record<string, boolean>\n /** The PATCH body for the master switch: every category set to `value`. */\n masterPatch: (value: boolean) => EmailPreferences\n /** The PATCH body for one category. */\n categoryPatch: (key: string, value: boolean) => EmailPreferences\n}\n\n/** Derive the switch states from the stored record and the list of category keys. */\nexport function toNotificationPreferences(\n stored: EmailPreferences | null | undefined,\n keys: readonly string[]\n): NotificationPreferencesModel {\n const checked = Object.fromEntries(keys.map((key) => [key, stored?.[key] ?? true]))\n return {\n masterChecked: keys.some((key) => checked[key]),\n checked,\n masterPatch: (value) => Object.fromEntries(keys.map((key) => [key, value])),\n categoryPatch: (key, value) => ({ [key]: value }),\n }\n}\n\n// \u2500\u2500 SDK-bound hooks \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/**\n * The email notification preferences and the save. `save` writes the given keys (a patch,\n * merged by the server) and updates the cached settings straight away, so the switches do not\n * wait for the round trip; a failed write rolls back.\n */\nexport function useNotificationPreferences(\n keys: readonly string[],\n options?: { enabled?: boolean }\n) {\n const arbi = useArbi()\n const qc = useQueryClient()\n const settings = useUserSettings(options)\n const stored = settings.data?.email_notifications as EmailPreferences | undefined\n\n const save = useMutation({\n mutationFn: (patch: EmailPreferences) =>\n arbi.settings.update({ email_notifications: patch } as never),\n onMutate: async (patch) => {\n await qc.cancelQueries({ queryKey: arbiQueryKeys.userSettings() })\n const previous = qc.getQueryData(arbiQueryKeys.userSettings())\n qc.setQueryData(arbiQueryKeys.userSettings(), (old: typeof settings.data) =>\n old ? { ...old, email_notifications: { ...old.email_notifications, ...patch } } : old\n )\n return { previous }\n },\n onError: (_err, _patch, context) => {\n qc.setQueryData(arbiQueryKeys.userSettings(), context?.previous)\n },\n onSettled: () => qc.invalidateQueries({ queryKey: arbiQueryKeys.userSettings() }),\n })\n\n const model = useMemo(() => toNotificationPreferences(stored, keys), [stored, keys])\n const setAll = useCallback(\n (value: boolean) => save.mutate(model.masterPatch(value)),\n [save, model]\n )\n const setCategory = useCallback(\n (key: string, value: boolean) => save.mutate(model.categoryPatch(key, value)),\n [save, model]\n )\n\n return {\n ...model,\n isLoading: settings.isLoading,\n isSaving: save.isPending,\n /** The master switch handler: every category on or off. */\n setAll,\n /** One category's handler. */\n setCategory,\n }\n}\n"],
|
|
5
|
+
"mappings": "AAMA,SAAS,aAAa,eAAe;AACrC,SAAS,aAAa,sBAAsB;AAC5C,SAAS,eAAe;AACxB,SAAS,qBAAqB;AAC9B,SAAS,uBAAuB;AAmBzB,SAAS,0BACd,QACA,MAC8B;AAC9B,QAAM,UAAU,OAAO,YAAY,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,SAAS,GAAG,KAAK,IAAI,CAAC,CAAC;AAClF,SAAO;AAAA,IACL,eAAe,KAAK,KAAK,CAAC,QAAQ,QAAQ,GAAG,CAAC;AAAA,IAC9C;AAAA,IACA,aAAa,CAAC,UAAU,OAAO,YAAY,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,CAAC;AAAA,IAC1E,eAAe,CAAC,KAAK,WAAW,EAAE,CAAC,GAAG,GAAG,MAAM;AAAA,EACjD;AACF;AASO,SAAS,2BACd,MACA,SACA;AACA,QAAM,OAAO,QAAQ;AACrB,QAAM,KAAK,eAAe;AAC1B,QAAM,WAAW,gBAAgB,OAAO;AACxC,QAAM,SAAS,SAAS,MAAM;AAE9B,QAAM,OAAO,YAAY;AAAA,IACvB,YAAY,CAAC,UACX,KAAK,SAAS,OAAO,EAAE,qBAAqB,MAAM,CAAU;AAAA,IAC9D,UAAU,OAAO,UAAU;AACzB,YAAM,GAAG,cAAc,EAAE,UAAU,cAAc,aAAa,EAAE,CAAC;AACjE,YAAM,WAAW,GAAG,aAAa,cAAc,aAAa,CAAC;AAC7D,SAAG;AAAA,QAAa,cAAc,aAAa;AAAA,QAAG,CAAC,QAC7C,MAAM,EAAE,GAAG,KAAK,qBAAqB,EAAE,GAAG,IAAI,qBAAqB,GAAG,MAAM,EAAE,IAAI;AAAA,MACpF;AACA,aAAO,EAAE,SAAS;AAAA,IACpB;AAAA,IACA,SAAS,CAAC,MAAM,QAAQ,YAAY;AAClC,SAAG,aAAa,cAAc,aAAa,GAAG,SAAS,QAAQ;AAAA,IACjE;AAAA,IACA,WAAW,MAAM,GAAG,kBAAkB,EAAE,UAAU,cAAc,aAAa,EAAE,CAAC;AAAA,EAClF,CAAC;AAED,QAAM,QAAQ,QAAQ,MAAM,0BAA0B,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,CAAC;AACnF,QAAM,SAAS;AAAA,IACb,CAAC,UAAmB,KAAK,OAAO,MAAM,YAAY,KAAK,CAAC;AAAA,IACxD,CAAC,MAAM,KAAK;AAAA,EACd;AACA,QAAM,cAAc;AAAA,IAClB,CAAC,KAAa,UAAmB,KAAK,OAAO,MAAM,cAAc,KAAK,KAAK,CAAC;AAAA,IAC5E,CAAC,MAAM,KAAK;AAAA,EACd;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,WAAW,SAAS;AAAA,IACpB,UAAU,KAAK;AAAA;AAAA,IAEf;AAAA;AAAA,IAEA;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { useCallback, useMemo, useState } from "react";
|
|
2
|
+
import { useMutation } from "@tanstack/react-query";
|
|
3
|
+
import { passwordChangeErrorMessage } from "@arbidocs/client";
|
|
4
|
+
import { useAccountClient } from "./client.js";
|
|
5
|
+
function usePasswordChange() {
|
|
6
|
+
const { client } = useAccountClient();
|
|
7
|
+
return useMutation({
|
|
8
|
+
mutationFn: (vars) => client.changePassword(vars)
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
const DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES = {
|
|
12
|
+
required: "All fields are required",
|
|
13
|
+
mismatch: "New passwords do not match",
|
|
14
|
+
sameAsCurrent: "New password must be different from current password",
|
|
15
|
+
wrongCurrent: "Current password is incorrect.",
|
|
16
|
+
wrongRecoveryKey: "Recovery key did not match this account. Try a different recovery file."
|
|
17
|
+
};
|
|
18
|
+
function usePasswordChangeForm({
|
|
19
|
+
recoveryMode = false,
|
|
20
|
+
getUnmetRequirement,
|
|
21
|
+
submit,
|
|
22
|
+
onClose,
|
|
23
|
+
onRecoveryComplete,
|
|
24
|
+
messages
|
|
25
|
+
}) {
|
|
26
|
+
const m = useMemo(() => ({ ...DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES, ...messages }), [messages]);
|
|
27
|
+
const [currentPassword, setCurrentPassword] = useState("");
|
|
28
|
+
const [newPassword, setNewPassword] = useState("");
|
|
29
|
+
const [confirmPassword, setConfirmPassword] = useState("");
|
|
30
|
+
const [error, setError] = useState(null);
|
|
31
|
+
const [isProcessing, setIsProcessing] = useState(false);
|
|
32
|
+
const [isChanged, setIsChanged] = useState(false);
|
|
33
|
+
const clear = useCallback(() => {
|
|
34
|
+
setCurrentPassword("");
|
|
35
|
+
setNewPassword("");
|
|
36
|
+
setConfirmPassword("");
|
|
37
|
+
}, []);
|
|
38
|
+
const isSubmitDisabled = isProcessing || !recoveryMode && !currentPassword || !newPassword || !confirmPassword || getUnmetRequirement(newPassword) !== null || newPassword !== confirmPassword;
|
|
39
|
+
const onSubmit = useCallback(() => {
|
|
40
|
+
setError(null);
|
|
41
|
+
if (!recoveryMode && !currentPassword || !newPassword || !confirmPassword) {
|
|
42
|
+
return setError(m.required);
|
|
43
|
+
}
|
|
44
|
+
if (newPassword !== confirmPassword) return setError(m.mismatch);
|
|
45
|
+
const unmet = getUnmetRequirement(newPassword);
|
|
46
|
+
if (unmet !== null) return setError(unmet);
|
|
47
|
+
if (!recoveryMode && currentPassword === newPassword) return setError(m.sameAsCurrent);
|
|
48
|
+
setIsProcessing(true);
|
|
49
|
+
void submit({ newPassword, currentPassword: recoveryMode ? void 0 : currentPassword }).then(() => {
|
|
50
|
+
clear();
|
|
51
|
+
if (recoveryMode) {
|
|
52
|
+
onClose();
|
|
53
|
+
onRecoveryComplete?.();
|
|
54
|
+
} else {
|
|
55
|
+
setIsChanged(true);
|
|
56
|
+
}
|
|
57
|
+
}).catch((e) => {
|
|
58
|
+
const message = passwordChangeErrorMessage(e);
|
|
59
|
+
const wrongCurrent = /invalid signature|current password|401/i.test(message);
|
|
60
|
+
setError(wrongCurrent ? recoveryMode ? m.wrongRecoveryKey : m.wrongCurrent : message);
|
|
61
|
+
}).finally(() => setIsProcessing(false));
|
|
62
|
+
}, [
|
|
63
|
+
recoveryMode,
|
|
64
|
+
currentPassword,
|
|
65
|
+
newPassword,
|
|
66
|
+
confirmPassword,
|
|
67
|
+
getUnmetRequirement,
|
|
68
|
+
submit,
|
|
69
|
+
clear,
|
|
70
|
+
onClose,
|
|
71
|
+
onRecoveryComplete,
|
|
72
|
+
m
|
|
73
|
+
]);
|
|
74
|
+
return {
|
|
75
|
+
currentPassword,
|
|
76
|
+
onCurrentPasswordChange: setCurrentPassword,
|
|
77
|
+
newPassword,
|
|
78
|
+
onNewPasswordChange: setNewPassword,
|
|
79
|
+
confirmPassword,
|
|
80
|
+
onConfirmPasswordChange: setConfirmPassword,
|
|
81
|
+
error,
|
|
82
|
+
isProcessing,
|
|
83
|
+
isSubmitDisabled,
|
|
84
|
+
onSubmit,
|
|
85
|
+
isChanged,
|
|
86
|
+
onCancel: () => {
|
|
87
|
+
clear();
|
|
88
|
+
setError(null);
|
|
89
|
+
setIsChanged(false);
|
|
90
|
+
onClose();
|
|
91
|
+
},
|
|
92
|
+
onDone: () => {
|
|
93
|
+
setIsChanged(false);
|
|
94
|
+
onClose();
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
export {
|
|
99
|
+
DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES,
|
|
100
|
+
usePasswordChange,
|
|
101
|
+
usePasswordChangeForm
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=password.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/account/password.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Password change: a new master password for the same account identity.\n *\n * The password only wraps the identity keypair, so a change is one request that re-encrypts nothing\n * and leaves the recovery key as it was (see `Arbi.account.changePassword`). `usePasswordChange` is\n * the SDK-bound mutation. `usePasswordChangeForm` is the controller behind `PasswordChangeDialog`:\n * fields, validation, error wording and the success state. It takes the submit as a function, so an\n * app without an `arbi` in its host binds the same dialog.\n */\n\nimport { useCallback, useMemo, useState } from 'react'\nimport { useMutation } from '@tanstack/react-query'\nimport { passwordChangeErrorMessage } from '@arbidocs/client'\nimport { useAccountClient } from './client'\n\n// \u2500\u2500 SDK-bound hook \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 interface PasswordChangeVars {\n newPassword: string\n /** Omit in recovery mode (after signing in with a recovery key). */\n currentPassword?: string\n}\n\n/** Change (or, in recovery mode, set) the master password through the account client in scope. */\nexport function usePasswordChange() {\n const { client } = useAccountClient()\n return useMutation({\n mutationFn: (vars: PasswordChangeVars): Promise<void> => client.changePassword(vars),\n })\n}\n\n// \u2500\u2500 Controller (no SDK) \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 interface PasswordChangeFormMessages {\n required: string\n mismatch: string\n sameAsCurrent: string\n wrongCurrent: string\n wrongRecoveryKey: string\n}\n\nexport const DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES: PasswordChangeFormMessages = {\n required: 'All fields are required',\n mismatch: 'New passwords do not match',\n sameAsCurrent: 'New password must be different from current password',\n wrongCurrent: 'Current password is incorrect.',\n wrongRecoveryKey: 'Recovery key did not match this account. Try a different recovery file.',\n}\n\nexport interface UsePasswordChangeFormOptions {\n /** After recovery with a key: no current password is asked for. */\n recoveryMode?: boolean\n /** The host's password policy: the first unmet requirement, or `null` when the password is fine. */\n getUnmetRequirement: (password: string) => string | null\n /** Do the change. */\n submit: (vars: PasswordChangeVars) => Promise<void>\n /** The dialog should close (cancel, or done). */\n onClose: () => void\n /** Recovery finished: continue into the app. Recovery closes itself, with no success screen. */\n onRecoveryComplete?: () => void\n messages?: Partial<PasswordChangeFormMessages>\n}\n\nexport interface PasswordChangeForm {\n currentPassword: string\n onCurrentPasswordChange: (value: string) => void\n newPassword: string\n onNewPasswordChange: (value: string) => void\n confirmPassword: string\n onConfirmPasswordChange: (value: string) => void\n error: string | null\n isProcessing: boolean\n isSubmitDisabled: boolean\n onSubmit: () => void\n /** The change went through (normal mode): the dialog shows its success state. */\n isChanged: boolean\n /** Cancel and clear the form. */\n onCancel: () => void\n /** Leave the success screen. */\n onDone: () => void\n}\n\n/** The state machine of `PasswordChangeDialog`; spread it into the dialog's props. */\nexport function usePasswordChangeForm({\n recoveryMode = false,\n getUnmetRequirement,\n submit,\n onClose,\n onRecoveryComplete,\n messages,\n}: UsePasswordChangeFormOptions): PasswordChangeForm {\n const m = useMemo(() => ({ ...DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES, ...messages }), [messages])\n const [currentPassword, setCurrentPassword] = useState('')\n const [newPassword, setNewPassword] = useState('')\n const [confirmPassword, setConfirmPassword] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [isProcessing, setIsProcessing] = useState(false)\n const [isChanged, setIsChanged] = useState(false)\n\n const clear = useCallback(() => {\n setCurrentPassword('')\n setNewPassword('')\n setConfirmPassword('')\n }, [])\n\n const isSubmitDisabled =\n isProcessing ||\n (!recoveryMode && !currentPassword) ||\n !newPassword ||\n !confirmPassword ||\n getUnmetRequirement(newPassword) !== null ||\n newPassword !== confirmPassword\n\n const onSubmit = useCallback(() => {\n setError(null)\n if ((!recoveryMode && !currentPassword) || !newPassword || !confirmPassword) {\n return setError(m.required)\n }\n if (newPassword !== confirmPassword) return setError(m.mismatch)\n const unmet = getUnmetRequirement(newPassword)\n if (unmet !== null) return setError(unmet)\n if (!recoveryMode && currentPassword === newPassword) return setError(m.sameAsCurrent)\n\n setIsProcessing(true)\n void submit({ newPassword, currentPassword: recoveryMode ? undefined : currentPassword })\n .then(() => {\n clear()\n if (recoveryMode) {\n onClose()\n onRecoveryComplete?.()\n } else {\n setIsChanged(true)\n }\n })\n .catch((e: unknown) => {\n const message = passwordChangeErrorMessage(e)\n const wrongCurrent = /invalid signature|current password|401/i.test(message)\n setError(wrongCurrent ? (recoveryMode ? m.wrongRecoveryKey : m.wrongCurrent) : message)\n })\n .finally(() => setIsProcessing(false))\n }, [\n recoveryMode,\n currentPassword,\n newPassword,\n confirmPassword,\n getUnmetRequirement,\n submit,\n clear,\n onClose,\n onRecoveryComplete,\n m,\n ])\n\n return {\n currentPassword,\n onCurrentPasswordChange: setCurrentPassword,\n newPassword,\n onNewPasswordChange: setNewPassword,\n confirmPassword,\n onConfirmPasswordChange: setConfirmPassword,\n error,\n isProcessing,\n isSubmitDisabled,\n onSubmit,\n isChanged,\n onCancel: () => {\n clear()\n setError(null)\n setIsChanged(false)\n onClose()\n },\n onDone: () => {\n setIsChanged(false)\n onClose()\n },\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|