@arbidocs/react 0.5.111 → 0.5.112
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/account/client.js +96 -0
- package/dist/account/client.js.map +7 -0
- package/dist/account/delete.js +70 -0
- package/dist/account/delete.js.map +7 -0
- package/dist/account/didit.js +34 -0
- package/dist/account/didit.js.map +7 -0
- package/dist/account/dismissed-tips.js +33 -0
- package/dist/account/dismissed-tips.js.map +7 -0
- package/dist/account/email.js +84 -0
- package/dist/account/email.js.map +7 -0
- package/dist/account/entitlements.js +47 -0
- package/dist/account/entitlements.js.map +7 -0
- package/dist/account/identity.js +270 -0
- package/dist/account/identity.js.map +7 -0
- package/dist/account/index.js +93 -0
- package/dist/account/index.js.map +7 -0
- package/dist/account/notifications.js +59 -0
- package/dist/account/notifications.js.map +7 -0
- package/dist/account/password.js +103 -0
- package/dist/account/password.js.map +7 -0
- package/dist/account/profile.js +116 -0
- package/dist/account/profile.js.map +7 -0
- package/dist/account/recovery.js +13 -0
- package/dist/account/recovery.js.map +7 -0
- package/dist/account/relevance.js +82 -0
- package/dist/account/relevance.js.map +7 -0
- package/dist/account/sessions.js +37 -0
- package/dist/account/sessions.js.map +7 -0
- package/dist/account/settings.js +39 -0
- package/dist/account/settings.js.map +7 -0
- package/dist/account/table-views.js +16 -0
- package/dist/account/table-views.js.map +7 -0
- package/dist/ai/AiAnswer.js +83 -0
- package/dist/ai/AiAnswer.js.map +7 -0
- package/dist/ai/AiMarkdown.js +40 -0
- package/dist/ai/AiMarkdown.js.map +7 -0
- package/dist/ai/ArtifactCanvas.js +193 -0
- package/dist/ai/ArtifactCanvas.js.map +7 -0
- package/dist/ai/CitationRenderer.js +413 -0
- package/dist/ai/CitationRenderer.js.map +7 -0
- package/dist/{chunk-WL2Y2T47.js → ai/MarkdownRenderer.js} +35 -101
- package/dist/ai/MarkdownRenderer.js.map +7 -0
- package/dist/ai/MessageArtifactCard.js +75 -0
- package/dist/ai/MessageArtifactCard.js.map +7 -0
- package/dist/ai/PassageCard.js +79 -0
- package/dist/ai/PassageCard.js.map +7 -0
- package/dist/ai/engine.js +110 -0
- package/dist/ai/engine.js.map +7 -0
- package/dist/ai/index.js +63 -0
- package/dist/ai/index.js.map +7 -0
- package/dist/ai/markdown-base-components.js +37 -0
- package/dist/ai/markdown-base-components.js.map +7 -0
- package/dist/ai/markdown-streaming-context.js +6 -0
- package/dist/ai/markdown-streaming-context.js.map +7 -0
- package/dist/{chunk-VSCU7K4V.js → ai/normalize-citations.js} +12 -19
- package/dist/ai/normalize-citations.js.map +7 -0
- package/dist/ai/redline.js +41 -0
- package/dist/ai/redline.js.map +7 -0
- package/dist/ai/split-markdown-blocks.js +40 -0
- package/dist/ai/split-markdown-blocks.js.map +7 -0
- package/dist/{chunk-UW2SGTI5.js → ai/stored-markdown.js} +41 -93
- package/dist/ai/stored-markdown.js.map +7 -0
- package/dist/annotations/AnnotationPageOverlay.js +807 -0
- package/dist/annotations/AnnotationPageOverlay.js.map +7 -0
- package/dist/annotations/AnnotationToolbar.js +398 -0
- package/dist/annotations/AnnotationToolbar.js.map +7 -0
- package/dist/annotations/FreezeDialog.js +170 -0
- package/dist/annotations/FreezeDialog.js.map +7 -0
- package/dist/annotations/ProductionDialog.js +354 -0
- package/dist/annotations/ProductionDialog.js.map +7 -0
- package/dist/annotations/controller.js +49 -0
- package/dist/annotations/controller.js.map +7 -0
- package/dist/annotations/freeze/browser.js +21 -0
- package/dist/annotations/freeze/browser.js.map +7 -0
- package/dist/annotations/freeze/bundle.js +201 -0
- package/dist/annotations/freeze/bundle.js.map +7 -0
- package/dist/annotations/freeze/coords.js +37 -0
- package/dist/annotations/freeze/coords.js.map +7 -0
- package/dist/annotations/freeze/freeze.js +261 -0
- package/dist/annotations/freeze/freeze.js.map +7 -0
- package/dist/annotations/freeze/hash.js +28 -0
- package/dist/annotations/freeze/hash.js.map +7 -0
- package/dist/annotations/freeze/index-page.js +78 -0
- package/dist/annotations/freeze/index-page.js.map +7 -0
- package/dist/annotations/freeze/index.js +28 -22
- package/dist/annotations/freeze/index.js.map +7 -1
- package/dist/annotations/freeze/raster.js +208 -0
- package/dist/annotations/freeze/raster.js.map +7 -0
- package/dist/annotations/freeze/stamp.js +117 -0
- package/dist/annotations/freeze/stamp.js.map +7 -0
- package/dist/annotations/freeze/types.js +14 -0
- package/dist/annotations/freeze/types.js.map +7 -0
- package/dist/annotations/freeze/vector.js +283 -0
- package/dist/annotations/freeze/vector.js.map +7 -0
- package/dist/annotations/geometry.js +81 -0
- package/dist/annotations/geometry.js.map +7 -0
- package/dist/annotations/index.js +125 -6
- package/dist/annotations/index.js.map +7 -1
- package/dist/annotations/merge.js +53 -0
- package/dist/annotations/merge.js.map +7 -0
- package/dist/{chunk-T3USOSVN.js → annotations/model.js} +23 -16
- package/dist/annotations/model.js.map +7 -0
- package/dist/annotations/overlay-geometry.js +41 -0
- package/dist/annotations/overlay-geometry.js.map +7 -0
- package/dist/annotations/redaction-log.js +33 -0
- package/dist/annotations/redaction-log.js.map +7 -0
- package/dist/annotations/selection-marks.js +122 -0
- package/dist/annotations/selection-marks.js.map +7 -0
- package/dist/annotations/state.js +140 -0
- package/dist/annotations/state.js.map +7 -0
- package/dist/annotations/store.js +49 -0
- package/dist/annotations/store.js.map +7 -0
- package/dist/annotations/useAnnotationLayer.js +306 -0
- package/dist/annotations/useAnnotationLayer.js.map +7 -0
- package/dist/annotations/useAnnotationShortcuts.js +31 -0
- package/dist/annotations/useAnnotationShortcuts.js.map +7 -0
- package/dist/annotations/useTextSelectionMarks.js +100 -0
- package/dist/annotations/useTextSelectionMarks.js.map +7 -0
- package/dist/artifacts/artifact-kind.js +19 -0
- package/dist/artifacts/artifact-kind.js.map +7 -0
- package/dist/artifacts/index.js +89 -571
- package/dist/artifacts/index.js.map +7 -1
- package/dist/{chunk-WUTL62MC.js → artifacts/normalize-markdown.js} +12 -14
- package/dist/artifacts/normalize-markdown.js.map +7 -0
- package/dist/artifacts/redline-core.js +12 -3
- package/dist/artifacts/redline-core.js.map +7 -1
- package/dist/{chunk-74N436VK.js → artifacts/redline-diff.js} +10 -9
- package/dist/artifacts/redline-diff.js.map +7 -0
- package/dist/artifacts/redline-engine.js +14 -0
- package/dist/artifacts/redline-engine.js.map +7 -0
- package/dist/artifacts/renderArtifactMarkdown.js +9 -0
- package/dist/artifacts/renderArtifactMarkdown.js.map +7 -0
- package/dist/artifacts/useArtifactEditSession.js +183 -0
- package/dist/artifacts/useArtifactEditSession.js.map +7 -0
- package/dist/artifacts/useArtifactSession.js +173 -0
- package/dist/artifacts/useArtifactSession.js.map +7 -0
- package/dist/artifacts/useArtifactSource.js +16 -0
- package/dist/artifacts/useArtifactSource.js.map +7 -0
- package/dist/artifacts/useArtifactText.js +78 -0
- package/dist/artifacts/useArtifactText.js.map +7 -0
- package/dist/artifacts/useRedline.js +65 -0
- package/dist/artifacts/useRedline.js.map +7 -0
- package/dist/artifacts/useStreamedArtifact.js +74 -0
- package/dist/artifacts/useStreamedArtifact.js.map +7 -0
- package/dist/artifacts/versions.js +68 -0
- package/dist/artifacts/versions.js.map +7 -0
- package/dist/billing.js +200 -0
- package/dist/billing.js.map +7 -0
- package/dist/boot-timeout.js +19 -0
- package/dist/boot-timeout.js.map +7 -0
- package/dist/calendar/accounts.js +213 -0
- package/dist/calendar/accounts.js.map +7 -0
- package/dist/calendar/hooks.js +409 -0
- package/dist/calendar/hooks.js.map +7 -0
- package/dist/calendar/index.js +31 -0
- package/dist/calendar/index.js.map +7 -0
- package/dist/calendar/keys.js +5 -0
- package/dist/calendar/keys.js.map +7 -0
- package/dist/calendar/offline/outbox.js +231 -0
- package/dist/calendar/offline/outbox.js.map +7 -0
- package/dist/calendar/offline/runtime.js +109 -0
- package/dist/calendar/offline/runtime.js.map +7 -0
- package/dist/calendar/offline/support.js +41 -0
- package/dist/calendar/offline/support.js.map +7 -0
- package/dist/calendar/support.js +34 -0
- package/dist/calendar/support.js.map +7 -0
- package/dist/calls/actions.js +226 -0
- package/dist/calls/actions.js.map +7 -0
- package/dist/calls/events.js +138 -0
- package/dist/calls/events.js.map +7 -0
- package/dist/calls/gate.js +19 -0
- package/dist/calls/gate.js.map +7 -0
- package/dist/calls/hooks.js +115 -0
- package/dist/calls/hooks.js.map +7 -0
- package/dist/calls/in-call-chat.js +132 -0
- package/dist/calls/in-call-chat.js.map +7 -0
- package/dist/calls/index.js +24 -0
- package/dist/calls/index.js.map +7 -0
- package/dist/calls/keys.js +17 -0
- package/dist/calls/keys.js.map +7 -0
- package/dist/calls/livekit/index.js +6 -958
- package/dist/calls/livekit/index.js.map +7 -1
- package/dist/calls/livekit/room.js +98 -0
- package/dist/calls/livekit/room.js.map +7 -0
- package/dist/calls/livekit/useCallRecorder.js +219 -0
- package/dist/calls/livekit/useCallRecorder.js.map +7 -0
- package/dist/calls/livekit/useCallTranscriber.js +309 -0
- package/dist/calls/livekit/useCallTranscriber.js.map +7 -0
- package/dist/calls/livekit/useHostMuteNotice.js +29 -0
- package/dist/calls/livekit/useHostMuteNotice.js.map +7 -0
- package/dist/calls/livekit/useInCallChat.js +161 -0
- package/dist/calls/livekit/useInCallChat.js.map +7 -0
- package/dist/calls/livekit/useWebinar.js +239 -0
- package/dist/calls/livekit/useWebinar.js.map +7 -0
- package/dist/calls/meeting-chat.js +149 -0
- package/dist/calls/meeting-chat.js.map +7 -0
- package/dist/calls/moderation.js +50 -0
- package/dist/calls/moderation.js.map +7 -0
- package/dist/calls/open-meeting-chat.js +29 -0
- package/dist/calls/open-meeting-chat.js.map +7 -0
- package/dist/calls/read-only.js +24 -0
- package/dist/calls/read-only.js.map +7 -0
- package/dist/calls/recording-media.js +218 -0
- package/dist/calls/recording-media.js.map +7 -0
- package/dist/calls/recording-playback.js +260 -0
- package/dist/calls/recording-playback.js.map +7 -0
- package/dist/calls/recording.js +268 -0
- package/dist/calls/recording.js.map +7 -0
- package/dist/calls/save-to-thread.js +80 -0
- package/dist/calls/save-to-thread.js.map +7 -0
- package/dist/calls/session.js +134 -0
- package/dist/calls/session.js.map +7 -0
- package/dist/calls/transcript-format.js +147 -0
- package/dist/calls/transcript-format.js.map +7 -0
- package/dist/calls/transcription.js +101 -0
- package/dist/calls/transcription.js.map +7 -0
- package/dist/calls/webinar.js +71 -0
- package/dist/calls/webinar.js.map +7 -0
- package/dist/charge-watch.js +71 -0
- package/dist/charge-watch.js.map +7 -0
- package/dist/chat/ChatBubble.js +146 -0
- package/dist/chat/ChatBubble.js.map +7 -0
- package/dist/chat/ConversationScope.js +30 -0
- package/dist/chat/ConversationScope.js.map +7 -0
- package/dist/chat/active-config.js +20 -0
- package/dist/chat/active-config.js.map +7 -0
- package/dist/chat/agent-chat-owner.js +25 -0
- package/dist/chat/agent-chat-owner.js.map +7 -0
- package/dist/chat/chat-artifacts.js +64 -0
- package/dist/chat/chat-artifacts.js.map +7 -0
- package/dist/chat/citations.js +32 -0
- package/dist/chat/citations.js.map +7 -0
- package/dist/chat/config-model.js +10 -0
- package/dist/chat/config-model.js.map +7 -0
- package/dist/chat/conversation-cache.js +676 -0
- package/dist/chat/conversation-cache.js.map +7 -0
- package/dist/chat/conversation-events.js +57 -0
- package/dist/chat/conversation-events.js.map +7 -0
- package/dist/chat/conversation-mentions.js +58 -0
- package/dist/chat/conversation-mentions.js.map +7 -0
- package/dist/chat/conversation-workspace.js +58 -0
- package/dist/chat/conversation-workspace.js.map +7 -0
- package/dist/chat/mentions.js +116 -0
- package/dist/chat/mentions.js.map +7 -0
- package/dist/chat/open-document.js +106 -0
- package/dist/chat/open-document.js.map +7 -0
- package/dist/chat/orphaned.js +44 -0
- package/dist/chat/orphaned.js.map +7 -0
- package/dist/chat/pendingFirstTurn.js +30 -0
- package/dist/chat/pendingFirstTurn.js.map +7 -0
- package/dist/chat/reply-target.js +12 -0
- package/dist/chat/reply-target.js.map +7 -0
- package/dist/chat/run-finished.js +28 -0
- package/dist/chat/run-finished.js.map +7 -0
- package/dist/chat/run-state.js +91 -0
- package/dist/chat/run-state.js.map +7 -0
- package/dist/chat/stream-handlers.js +419 -0
- package/dist/chat/stream-handlers.js.map +7 -0
- package/dist/chat/thread-binding.js +76 -0
- package/dist/chat/thread-binding.js.map +7 -0
- package/dist/chat/thread-document.js +53 -0
- package/dist/chat/thread-document.js.map +7 -0
- package/dist/chat/turn-control.js +79 -0
- package/dist/chat/turn-control.js.map +7 -0
- package/dist/chat/useAgentRunControl.js +36 -0
- package/dist/chat/useAgentRunControl.js.map +7 -0
- package/dist/chat/useAnswerAgentQuestion.js +19 -0
- package/dist/chat/useAnswerAgentQuestion.js.map +7 -0
- package/dist/chat/useAskAgain.js +32 -0
- package/dist/chat/useAskAgain.js.map +7 -0
- package/dist/chat/useAutoSendDraft.js +17 -0
- package/dist/chat/useAutoSendDraft.js.map +7 -0
- package/dist/chat/useBranchNavigation.js +97 -0
- package/dist/chat/useBranchNavigation.js.map +7 -0
- package/dist/chat/useConnectRunStream.js +169 -0
- package/dist/chat/useConnectRunStream.js.map +7 -0
- package/dist/chat/useConversation.js +431 -0
- package/dist/chat/useConversation.js.map +7 -0
- package/dist/chat/useConversationActions.js +662 -0
- package/dist/chat/useConversationActions.js.map +7 -0
- package/dist/chat/useConversationData.js +143 -0
- package/dist/chat/useConversationData.js.map +7 -0
- package/dist/chat/useConversationDocuments.js +41 -0
- package/dist/chat/useConversationDocuments.js.map +7 -0
- package/dist/chat/useConversationSettings.js +78 -0
- package/dist/chat/useConversationSettings.js.map +7 -0
- package/dist/chat/useConversationTurn.js +31 -0
- package/dist/chat/useConversationTurn.js.map +7 -0
- package/dist/chat/useConversationWorkspace.js +12 -0
- package/dist/chat/useConversationWorkspace.js.map +7 -0
- package/dist/chat/useDeleteMessage.js +15 -0
- package/dist/chat/useDeleteMessage.js.map +7 -0
- package/dist/chat/useDocumentAutoAdd.js +73 -0
- package/dist/chat/useDocumentAutoAdd.js.map +7 -0
- package/dist/chat/useMessageTimer.js +39 -0
- package/dist/chat/useMessageTimer.js.map +7 -0
- package/dist/chat/useThinkingContent.js +67 -0
- package/dist/chat/useThinkingContent.js.map +7 -0
- package/dist/chat/useThreadDocument.js +61 -0
- package/dist/chat/useThreadDocument.js.map +7 -0
- package/dist/chat/workflow-run-titles.js +50 -0
- package/dist/chat/workflow-run-titles.js.map +7 -0
- package/dist/{chunk-Z3W4XFWB.cjs → chunk-C72FSQUE.cjs} +3 -3
- package/dist/{chunk-Z3W4XFWB.cjs.map → chunk-C72FSQUE.cjs.map} +1 -1
- package/dist/{chunk-LBAG7KL7.cjs → chunk-FQVNZCTD.cjs} +3 -3
- package/dist/{chunk-LBAG7KL7.cjs.map → chunk-FQVNZCTD.cjs.map} +1 -1
- package/dist/{chunk-DI5KSVKY.cjs → chunk-UDDJIUHJ.cjs} +3 -3
- package/dist/{chunk-DI5KSVKY.cjs.map → chunk-UDDJIUHJ.cjs.map} +1 -1
- package/dist/config/config-hooks.js +209 -0
- package/dist/config/config-hooks.js.map +7 -0
- package/dist/connectivity.js +72 -0
- package/dist/connectivity.js.map +7 -0
- package/dist/connectors/hooks.js +263 -0
- package/dist/connectors/hooks.js.map +7 -0
- package/dist/connectors/index.js +28 -0
- package/dist/connectors/index.js.map +7 -0
- package/dist/contacts.js +100 -0
- package/dist/contacts.js.map +7 -0
- package/dist/conversation-list.js +65 -0
- package/dist/conversation-list.js.map +7 -0
- package/dist/databases.js +195 -0
- package/dist/databases.js.map +7 -0
- package/dist/datasets/aggregate.js +281 -0
- package/dist/datasets/aggregate.js.map +7 -0
- package/dist/datasets/index.js +122 -0
- package/dist/datasets/index.js.map +7 -0
- package/dist/datasets/members.js +27 -0
- package/dist/datasets/members.js.map +7 -0
- package/dist/datasets/panel.js +44 -0
- package/dist/datasets/panel.js.map +7 -0
- package/dist/datasets/registry.js +47 -0
- package/dist/datasets/registry.js.map +7 -0
- package/dist/datasets/rows-source.js +44 -0
- package/dist/datasets/rows-source.js.map +7 -0
- package/dist/datasets/sources/activity.js +83 -0
- package/dist/datasets/sources/activity.js.map +7 -0
- package/dist/datasets/sources/conversations.js +74 -0
- package/dist/datasets/sources/conversations.js.map +7 -0
- package/dist/datasets/sources/database.js +209 -0
- package/dist/datasets/sources/database.js.map +7 -0
- package/dist/datasets/sources/documents.js +93 -0
- package/dist/datasets/sources/documents.js.map +7 -0
- package/dist/datasets/sources/facts.js +56 -0
- package/dist/datasets/sources/facts.js.map +7 -0
- package/dist/datasets/sources/projects.js +117 -0
- package/dist/datasets/sources/projects.js.map +7 -0
- package/dist/datasets/sources/tags.js +67 -0
- package/dist/datasets/sources/tags.js.map +7 -0
- package/dist/datasets/sources/usage.js +268 -0
- package/dist/datasets/sources/usage.js.map +7 -0
- package/dist/datasets/sources/workflows.js +91 -0
- package/dist/datasets/sources/workflows.js.map +7 -0
- package/dist/datasets/sources/workspaces.js +67 -0
- package/dist/datasets/sources/workspaces.js.map +7 -0
- package/dist/datasets/store.js +194 -0
- package/dist/datasets/store.js.map +7 -0
- package/dist/datasets/types.js +14 -0
- package/dist/datasets/types.js.map +7 -0
- package/dist/directmessages/ConversationList.js +148 -0
- package/dist/directmessages/ConversationList.js.map +7 -0
- package/dist/directmessages/DateSeparator.js +8 -0
- package/dist/directmessages/DateSeparator.js.map +7 -0
- package/dist/directmessages/DmAvatar.js +29 -0
- package/dist/directmessages/DmAvatar.js.map +7 -0
- package/dist/directmessages/DmComposer.js +201 -0
- package/dist/directmessages/DmComposer.js.map +7 -0
- package/dist/directmessages/arrivals.js +29 -0
- package/dist/directmessages/arrivals.js.map +7 -0
- package/dist/directmessages/chat-cache.js +192 -0
- package/dist/directmessages/chat-cache.js.map +7 -0
- package/dist/directmessages/grouping.js +26 -0
- package/dist/directmessages/grouping.js.map +7 -0
- package/dist/directmessages/index.js +81 -0
- package/dist/directmessages/index.js.map +7 -0
- package/dist/directmessages/useChats.js +266 -0
- package/dist/directmessages/useChats.js.map +7 -0
- package/dist/directmessages/utils.js +23 -0
- package/dist/directmessages/utils.js.map +7 -0
- package/dist/document-tools/can-annotate.js +7 -0
- package/dist/document-tools/can-annotate.js.map +7 -0
- package/dist/document-tools/core.cjs +80 -80
- package/dist/document-tools/core.js +218 -12
- package/dist/document-tools/core.js.map +7 -1
- package/dist/document-tools/document-pdf.js +76 -0
- package/dist/document-tools/document-pdf.js.map +7 -0
- package/dist/document-tools/environment.js +136 -0
- package/dist/document-tools/environment.js.map +7 -0
- package/dist/document-tools/file-shares.js +112 -0
- package/dist/document-tools/file-shares.js.map +7 -0
- package/dist/document-tools/frozen-copy.js +27 -0
- package/dist/document-tools/frozen-copy.js.map +7 -0
- package/dist/document-tools/index.cjs +80 -80
- package/dist/document-tools/index.js +26 -148
- package/dist/document-tools/index.js.map +7 -1
- package/dist/document-tools/markup-download.js +51 -0
- package/dist/document-tools/markup-download.js.map +7 -0
- package/dist/document-tools/markup-store.js +138 -0
- package/dist/document-tools/markup-store.js.map +7 -0
- package/dist/document-tools/markup-transfer.js +88 -0
- package/dist/document-tools/markup-transfer.js.map +7 -0
- package/dist/document-tools/production.js +147 -0
- package/dist/document-tools/production.js.map +7 -0
- package/dist/document-tools/saved-signature.js +90 -0
- package/dist/document-tools/saved-signature.js.map +7 -0
- package/dist/document-tools/signature-requests.js +310 -0
- package/dist/document-tools/signature-requests.js.map +7 -0
- package/dist/document-tools/signing.js +127 -0
- package/dist/document-tools/signing.js.map +7 -0
- package/dist/document-tools/useDocumentBytes.js +38 -0
- package/dist/document-tools/useDocumentBytes.js.map +7 -0
- package/dist/document-tools/useDocumentMarkup.js +154 -0
- package/dist/document-tools/useDocumentMarkup.js.map +7 -0
- package/dist/document-tools/useIsOnline.js +13 -0
- package/dist/document-tools/useIsOnline.js.map +7 -0
- package/dist/document-tools/verification.js +60 -0
- package/dist/document-tools/verification.js.map +7 -0
- package/dist/documents/DocumentReview.js +220 -0
- package/dist/documents/DocumentReview.js.map +7 -0
- package/dist/documents/DraftTitleControls.js +41 -0
- package/dist/documents/DraftTitleControls.js.map +7 -0
- package/dist/documents/InlineMicButton.js +90 -0
- package/dist/documents/InlineMicButton.js.map +7 -0
- package/dist/documents/MicRecordingOverlay.js +29 -0
- package/dist/documents/MicRecordingOverlay.js.map +7 -0
- package/dist/documents/MicWaveformIndicator.js +68 -0
- package/dist/documents/MicWaveformIndicator.js.map +7 -0
- package/dist/documents/PhotoCapture.js +120 -0
- package/dist/documents/PhotoCapture.js.map +7 -0
- package/dist/documents/VideoCapture.js +129 -0
- package/dist/documents/VideoCapture.js.map +7 -0
- package/dist/documents/VoiceNoteRecorder.js +166 -0
- package/dist/documents/VoiceNoteRecorder.js.map +7 -0
- package/dist/documents/audio-segmenter.js +63 -0
- package/dist/documents/audio-segmenter.js.map +7 -0
- package/dist/documents/capture-frame.js +21 -0
- package/dist/documents/capture-frame.js.map +7 -0
- package/dist/documents/chunked-recorder.js +190 -0
- package/dist/documents/chunked-recorder.js.map +7 -0
- package/dist/documents/document-download.js +53 -0
- package/dist/documents/document-download.js.map +7 -0
- package/dist/documents/document-fields.js +109 -0
- package/dist/documents/document-fields.js.map +7 -0
- package/dist/documents/documents-cache.js +110 -0
- package/dist/documents/documents-cache.js.map +7 -0
- package/dist/documents/documents-data.js +128 -0
- package/dist/documents/documents-data.js.map +7 -0
- package/dist/documents/documents-loader.js +113 -0
- package/dist/documents/documents-loader.js.map +7 -0
- package/dist/documents/documents-writes.js +448 -0
- package/dist/documents/documents-writes.js.map +7 -0
- package/dist/documents/format-elapsed.js +10 -0
- package/dist/documents/format-elapsed.js.map +7 -0
- package/dist/documents/has-video-track.js +26 -0
- package/dist/documents/has-video-track.js.map +7 -0
- package/dist/documents/index.js +266 -0
- package/dist/documents/index.js.map +7 -0
- package/dist/documents/media-error.js +18 -0
- package/dist/documents/media-error.js.map +7 -0
- package/dist/documents/offline-documents.js +160 -0
- package/dist/documents/offline-documents.js.map +7 -0
- package/dist/documents/pending-sync.js +210 -0
- package/dist/documents/pending-sync.js.map +7 -0
- package/dist/documents/processing-live.js +122 -0
- package/dist/documents/processing-live.js.map +7 -0
- package/dist/documents/processing-order.js +59 -0
- package/dist/documents/processing-order.js.map +7 -0
- package/dist/documents/processing-settle.js +21 -0
- package/dist/documents/processing-settle.js.map +7 -0
- package/dist/documents/related-documents.js +133 -0
- package/dist/documents/related-documents.js.map +7 -0
- package/dist/documents/support.js +29 -0
- package/dist/documents/support.js.map +7 -0
- package/dist/documents/upload-files.js +169 -0
- package/dist/documents/upload-files.js.map +7 -0
- package/dist/documents/useAudioRecorder.js +315 -0
- package/dist/documents/useAudioRecorder.js.map +7 -0
- package/dist/documents/useCameraStream.js +35 -0
- package/dist/documents/useCameraStream.js.map +7 -0
- package/dist/documents/useDocumentThumbnails.js +71 -0
- package/dist/documents/useDocumentThumbnails.js.map +7 -0
- package/dist/documents/useDownloadDocuments.js +90 -0
- package/dist/documents/useDownloadDocuments.js.map +7 -0
- package/dist/documents/usePassageQuotes.js +37 -0
- package/dist/documents/usePassageQuotes.js.map +7 -0
- package/dist/documents/useUploadFiles.js +165 -0
- package/dist/documents/useUploadFiles.js.map +7 -0
- package/dist/documents/useUploadFromUrls.js +63 -0
- package/dist/documents/useUploadFromUrls.js.map +7 -0
- package/dist/documents/useVideoRecorder.js +62 -0
- package/dist/documents/useVideoRecorder.js.map +7 -0
- package/dist/entities/AgentMarkers.js +61 -0
- package/dist/entities/AgentMarkers.js.map +7 -0
- package/dist/entities/DocumentEntity.js +125 -0
- package/dist/entities/DocumentEntity.js.map +7 -0
- package/dist/entities/EntityPill.js +250 -0
- package/dist/entities/EntityPill.js.map +7 -0
- package/dist/entities/ProjectEntity.js +61 -0
- package/dist/entities/ProjectEntity.js.map +7 -0
- package/dist/entities/ShieldIcon.js +49 -0
- package/dist/entities/ShieldIcon.js.map +7 -0
- package/dist/entities/TagEntity.js +79 -0
- package/dist/entities/TagEntity.js.map +7 -0
- package/dist/entities/ThreadVisibilityIcon.js +15 -0
- package/dist/entities/ThreadVisibilityIcon.js.map +7 -0
- package/dist/entities/UserEntity.js +211 -0
- package/dist/entities/UserEntity.js.map +7 -0
- package/dist/entities/VerifiedBadge.js +19 -0
- package/dist/entities/VerifiedBadge.js.map +7 -0
- package/dist/entities/agent-avatar-colors.js +26 -0
- package/dist/entities/agent-avatar-colors.js.map +7 -0
- package/dist/entities/colors.js +64 -0
- package/dist/entities/colors.js.map +7 -0
- package/dist/entities/file-type.js +151 -0
- package/dist/entities/file-type.js.map +7 -0
- package/dist/entities/index.js +100 -0
- package/dist/entities/index.js.map +7 -0
- package/dist/entities/media-type.js +61 -0
- package/dist/entities/media-type.js.map +7 -0
- package/dist/entities/registry.js +385 -0
- package/dist/entities/registry.js.map +7 -0
- package/dist/entities/status.js +43 -0
- package/dist/entities/status.js.map +7 -0
- package/dist/entities/tag-kinds.js +23 -0
- package/dist/entities/tag-kinds.js.map +7 -0
- package/dist/entities/tag-types.js +44 -0
- package/dist/entities/tag-types.js.map +7 -0
- package/dist/entities/vocabulary.js +12 -0
- package/dist/entities/vocabulary.js.map +7 -0
- package/dist/entity-extraction.js +25 -0
- package/dist/entity-extraction.js.map +7 -0
- package/dist/facts-search.js +57 -0
- package/dist/facts-search.js.map +7 -0
- package/dist/facts.js +69 -0
- package/dist/facts.js.map +7 -0
- package/dist/hooks.js +320 -0
- package/dist/hooks.js.map +7 -0
- package/dist/host/ArbiHost.js +24 -0
- package/dist/host/ArbiHost.js.map +7 -0
- package/dist/host/assistant-copy.js +54 -0
- package/dist/host/assistant-copy.js.map +7 -0
- package/dist/host/config.js +9 -0
- package/dist/host/config.js.map +7 -0
- package/dist/host/context.js +10 -0
- package/dist/host/context.js.map +7 -0
- package/dist/host/features.js +144 -0
- package/dist/host/features.js.map +7 -0
- package/dist/host/index.js +12 -0
- package/dist/host/index.js.map +7 -0
- package/dist/{chunk-DPYBZDJB.js → host/merge.js} +7 -7
- package/dist/host/merge.js.map +7 -0
- package/dist/house-template.js +40 -0
- package/dist/house-template.js.map +7 -0
- package/dist/icons/AppleIcon.js +25 -0
- package/dist/icons/AppleIcon.js.map +7 -0
- package/dist/icons/ArbiBotHeadIcon.js +46 -0
- package/dist/icons/ArbiBotHeadIcon.js.map +7 -0
- package/dist/icons/ArbiIcon.js +24 -0
- package/dist/icons/ArbiIcon.js.map +7 -0
- package/dist/icons/AudIcon.js +56 -0
- package/dist/icons/AudIcon.js.map +7 -0
- package/dist/icons/ClaudeIcon.js +28 -0
- package/dist/icons/ClaudeIcon.js.map +7 -0
- package/dist/icons/DocIcon.js +56 -0
- package/dist/icons/DocIcon.js.map +7 -0
- package/dist/icons/EmlIcon.js +57 -0
- package/dist/icons/EmlIcon.js.map +7 -0
- package/dist/icons/FireworksIcon.js +47 -0
- package/dist/icons/FireworksIcon.js.map +7 -0
- package/dist/icons/GeminiIcon.js +37 -0
- package/dist/icons/GeminiIcon.js.map +7 -0
- package/dist/icons/GitHubIcon.js +32 -0
- package/dist/icons/GitHubIcon.js.map +7 -0
- package/dist/icons/GoogleIcon.js +53 -0
- package/dist/icons/GoogleIcon.js.map +7 -0
- package/dist/icons/HtmlIcon.js +56 -0
- package/dist/icons/HtmlIcon.js.map +7 -0
- package/dist/icons/ImgIcon.js +56 -0
- package/dist/icons/ImgIcon.js.map +7 -0
- package/dist/icons/LinkedInIcon.js +25 -0
- package/dist/icons/LinkedInIcon.js.map +7 -0
- package/dist/icons/OpenAIIcon.js +28 -0
- package/dist/icons/OpenAIIcon.js.map +7 -0
- package/dist/icons/PdfIcon.js +56 -0
- package/dist/icons/PdfIcon.js.map +7 -0
- package/dist/icons/ProviderIcon.js +42 -0
- package/dist/icons/ProviderIcon.js.map +7 -0
- package/dist/icons/TxtIcon.js +56 -0
- package/dist/icons/TxtIcon.js.map +7 -0
- package/dist/icons/VidIcon.js +56 -0
- package/dist/icons/VidIcon.js.map +7 -0
- package/dist/icons/XlsIcon.js +56 -0
- package/dist/icons/XlsIcon.js.map +7 -0
- package/dist/icons/arbi-mark.js +5 -0
- package/dist/icons/arbi-mark.js.map +7 -0
- package/dist/icons/colors.js +31 -0
- package/dist/icons/colors.js.map +7 -0
- package/dist/icons/file-type.js +105 -0
- package/dist/icons/file-type.js.map +7 -0
- package/dist/icons/index.js +55 -0
- package/dist/icons/index.js.map +7 -0
- package/dist/imagecrop/ImageCropModal.js +56 -0
- package/dist/imagecrop/ImageCropModal.js.map +7 -0
- package/dist/imagecrop/ImageCropper.js +100 -0
- package/dist/imagecrop/ImageCropper.js.map +7 -0
- package/dist/imagecrop/cropImage.js +43 -0
- package/dist/imagecrop/cropImage.js.map +7 -0
- package/dist/imagecrop/index.js +13 -0
- package/dist/imagecrop/index.js.map +7 -0
- package/dist/index.cjs +282 -282
- package/dist/index.js +702 -17116
- package/dist/index.js.map +7 -1
- package/dist/{chunk-SSXFVWCT.js → lazy-chunk.js} +8 -8
- package/dist/lazy-chunk.js.map +7 -0
- package/dist/lib/collision-padding.js +13 -0
- package/dist/lib/collision-padding.js.map +7 -0
- package/dist/lib/format-friendly-date.js +55 -0
- package/dist/lib/format-friendly-date.js.map +7 -0
- package/dist/lib/format-relative-time.js +52 -0
- package/dist/lib/format-relative-time.js.map +7 -0
- package/dist/lib/markdown-to-text.js +35 -0
- package/dist/lib/markdown-to-text.js.map +7 -0
- package/dist/lib/toast-interaction.js +9 -0
- package/dist/lib/toast-interaction.js.map +7 -0
- package/dist/lib/utils.js +9 -0
- package/dist/lib/utils.js.map +7 -0
- package/dist/mail/client.js +103 -0
- package/dist/mail/client.js.map +7 -0
- package/dist/mail/document-attachment.js +38 -0
- package/dist/mail/document-attachment.js.map +7 -0
- package/dist/mail/filing.js +132 -0
- package/dist/mail/filing.js.map +7 -0
- package/dist/mail/hooks.js +393 -0
- package/dist/mail/hooks.js.map +7 -0
- package/dist/mail/index.js +120 -0
- package/dist/mail/index.js.map +7 -0
- package/dist/mail/offline/changes.js +258 -0
- package/dist/mail/offline/changes.js.map +7 -0
- package/dist/mail/offline/confirm-sign-out.js +37 -0
- package/dist/mail/offline/confirm-sign-out.js.map +7 -0
- package/dist/mail/offline/crypto.js +26 -0
- package/dist/mail/offline/crypto.js.map +7 -0
- package/dist/mail/offline/drafts.js +69 -0
- package/dist/mail/offline/drafts.js.map +7 -0
- package/dist/mail/offline/hooks.js +104 -0
- package/dist/mail/offline/hooks.js.map +7 -0
- package/dist/mail/offline/index.js +48 -0
- package/dist/mail/offline/index.js.map +7 -0
- package/dist/mail/offline/live.js +233 -0
- package/dist/mail/offline/live.js.map +7 -0
- package/dist/mail/offline/mailbox.js +191 -0
- package/dist/mail/offline/mailbox.js.map +7 -0
- package/dist/mail/offline/outbox.js +167 -0
- package/dist/mail/offline/outbox.js.map +7 -0
- package/dist/mail/offline/reads.js +159 -0
- package/dist/mail/offline/reads.js.map +7 -0
- package/dist/mail/offline/runtime.js +100 -0
- package/dist/mail/offline/runtime.js.map +7 -0
- package/dist/mail/offline/settings.js +84 -0
- package/dist/mail/offline/settings.js.map +7 -0
- package/dist/mail/offline/store.js +29 -0
- package/dist/mail/offline/store.js.map +7 -0
- package/dist/mail/offline/sync.js +251 -0
- package/dist/mail/offline/sync.js.map +7 -0
- package/dist/mail/offline/wipe.js +19 -0
- package/dist/mail/offline/wipe.js.map +7 -0
- package/dist/mail/thread-keys.js +53 -0
- package/dist/mail/thread-keys.js.map +7 -0
- package/dist/mail/threads.js +71 -0
- package/dist/mail/threads.js.map +7 -0
- package/dist/mail/useMailClient.js +42 -0
- package/dist/mail/useMailClient.js.map +7 -0
- package/dist/model-connections.js +58 -0
- package/dist/model-connections.js.map +7 -0
- package/dist/notifications/ActivityFeed.js +70 -0
- package/dist/notifications/ActivityFeed.js.map +7 -0
- package/dist/notifications/NotificationBell.js +200 -0
- package/dist/notifications/NotificationBell.js.map +7 -0
- package/dist/notifications/Toaster.js +24 -0
- package/dist/notifications/Toaster.js.map +7 -0
- package/dist/notifications/activity-types.js +65 -0
- package/dist/notifications/activity-types.js.map +7 -0
- package/dist/notifications/bell.js +24 -0
- package/dist/notifications/bell.js.map +7 -0
- package/dist/notifications/calendar-notifications.js +79 -0
- package/dist/notifications/calendar-notifications.js.map +7 -0
- package/dist/notifications/index.js +108 -0
- package/dist/notifications/index.js.map +7 -0
- package/dist/notifications/live.js +28 -0
- package/dist/notifications/live.js.map +7 -0
- package/dist/notifications/notification-types.js +127 -0
- package/dist/notifications/notification-types.js.map +7 -0
- package/dist/{chunk-BF5KW5ZI.js → notifications/notify-store.js} +24 -74
- package/dist/notifications/notify-store.js.map +7 -0
- package/dist/notifications/server-notifications.js +452 -0
- package/dist/notifications/server-notifications.js.map +7 -0
- package/dist/notifications/useNotifications.js +34 -0
- package/dist/notifications/useNotifications.js.map +7 -0
- package/dist/offline-store/network.js +11 -0
- package/dist/offline-store/network.js.map +7 -0
- package/dist/offline-store/store.js +136 -0
- package/dist/offline-store/store.js.map +7 -0
- package/dist/offline-store/wipe.js +8 -0
- package/dist/offline-store/wipe.js.map +7 -0
- package/dist/offline.js +58 -0
- package/dist/offline.js.map +7 -0
- package/dist/people.js +122 -0
- package/dist/people.js.map +7 -0
- package/dist/projects.js +30 -0
- package/dist/projects.js.map +7 -0
- package/dist/query-client.js +63 -0
- package/dist/query-client.js.map +7 -0
- package/dist/{chunk-ZM6N7YZH.js → query-keys.js} +18 -31
- package/dist/query-keys.js.map +7 -0
- package/dist/query-persist.js +66 -0
- package/dist/query-persist.js.map +7 -0
- package/dist/queued-writes.js +59 -0
- package/dist/queued-writes.js.map +7 -0
- package/dist/remote-control.js +67 -0
- package/dist/remote-control.js.map +7 -0
- package/dist/search/index.js +23 -0
- package/dist/search/index.js.map +7 -0
- package/dist/search/session.js +58 -0
- package/dist/search/session.js.map +7 -0
- package/dist/search/useSemanticSearch.js +82 -0
- package/dist/search/useSemanticSearch.js.map +7 -0
- package/dist/session/chat.js +512 -0
- package/dist/session/chat.js.map +7 -0
- package/dist/session/documents.js +196 -0
- package/dist/session/documents.js.map +7 -0
- package/dist/session/drafts.js +103 -0
- package/dist/session/drafts.js.map +7 -0
- package/dist/session/index.js +123 -0
- package/dist/session/index.js.map +7 -0
- package/dist/session/layout.js +339 -0
- package/dist/session/layout.js.map +7 -0
- package/dist/session/persist.js +106 -0
- package/dist/session/persist.js.map +7 -0
- package/dist/session/session-hooks.js +53 -0
- package/dist/session/session-hooks.js.map +7 -0
- package/dist/session/signed-in.js +36 -0
- package/dist/session/signed-in.js.map +7 -0
- package/dist/session/store.js +166 -0
- package/dist/session/store.js.map +7 -0
- package/dist/session/thread-tabs.js +121 -0
- package/dist/session/thread-tabs.js.map +7 -0
- package/dist/session/ui-state-storage.js +76 -0
- package/dist/session/ui-state-storage.js.map +7 -0
- package/dist/session/workspace.js +77 -0
- package/dist/session/workspace.js.map +7 -0
- package/dist/shell/index.cjs +37 -37
- package/dist/shell/index.js +43 -10
- package/dist/shell/index.js.map +7 -1
- package/dist/skill-pack.js +111 -0
- package/dist/skill-pack.js.map +7 -0
- package/dist/storage.js +186 -0
- package/dist/storage.js.map +7 -0
- package/dist/support/index.js +35 -0
- package/dist/support/index.js.map +7 -0
- package/dist/tags.js +204 -0
- package/dist/tags.js.map +7 -0
- package/dist/ui/DebouncedInput.js +109 -0
- package/dist/ui/DebouncedInput.js.map +7 -0
- package/dist/ui/DictateContext.js +8 -0
- package/dist/ui/DictateContext.js.map +7 -0
- package/dist/ui/IconToggle.js +79 -0
- package/dist/ui/IconToggle.js.map +7 -0
- package/dist/ui/VerifiedToggle.js +38 -0
- package/dist/ui/VerifiedToggle.js.map +7 -0
- package/dist/ui/VisibilityToggle.js +103 -0
- package/dist/ui/VisibilityToggle.js.map +7 -0
- package/dist/ui/avatar.js +40 -0
- package/dist/ui/avatar.js.map +7 -0
- package/dist/ui/badge.js +28 -0
- package/dist/ui/badge.js.map +7 -0
- package/dist/ui/button.js +48 -0
- package/dist/ui/button.js.map +7 -0
- package/dist/ui/card.js +90 -0
- package/dist/ui/card.js.map +7 -0
- package/dist/ui/checkbox.js +22 -0
- package/dist/ui/checkbox.js.map +7 -0
- package/dist/ui/collapsible.js +10 -0
- package/dist/ui/collapsible.js.map +7 -0
- package/dist/ui/command.js +103 -0
- package/dist/ui/command.js.map +7 -0
- package/dist/{chunk-YNNAJJ5Z.js → ui/dialog.js} +30 -68
- package/dist/ui/dialog.js.map +7 -0
- package/dist/{chunk-47CCGUWR.js → ui/dropdown-menu.js} +40 -45
- package/dist/ui/dropdown-menu.js.map +7 -0
- package/dist/ui/hover-card.js +36 -0
- package/dist/ui/hover-card.js.map +7 -0
- package/dist/ui/index.cjs +154 -154
- package/dist/ui/index.js +290 -10
- package/dist/ui/index.js.map +7 -1
- package/dist/ui/input.js +65 -0
- package/dist/ui/input.js.map +7 -0
- package/dist/ui/label.js +16 -0
- package/dist/ui/label.js.map +7 -0
- package/dist/ui/mark-menu.js +300 -0
- package/dist/ui/mark-menu.js.map +7 -0
- package/dist/ui/popover.js +40 -0
- package/dist/ui/popover.js.map +7 -0
- package/dist/ui/portal-container.js +17 -0
- package/dist/ui/portal-container.js.map +7 -0
- package/dist/ui/progress.js +24 -0
- package/dist/ui/progress.js.map +7 -0
- package/dist/ui/radio-group.js +29 -0
- package/dist/ui/radio-group.js.map +7 -0
- package/dist/ui/scroll-area.js +39 -0
- package/dist/ui/scroll-area.js.map +7 -0
- package/dist/ui/select.js +130 -0
- package/dist/ui/select.js.map +7 -0
- package/dist/ui/separator.js +23 -0
- package/dist/ui/separator.js.map +7 -0
- package/dist/ui/slider.js +23 -0
- package/dist/ui/slider.js.map +7 -0
- package/dist/ui/switch.js +28 -0
- package/dist/ui/switch.js.map +7 -0
- package/dist/ui/table.js +75 -0
- package/dist/ui/table.js.map +7 -0
- package/dist/ui/tabs.js +48 -0
- package/dist/ui/tabs.js.map +7 -0
- package/dist/ui/textarea.js +63 -0
- package/dist/ui/textarea.js.map +7 -0
- package/dist/ui/toggle-group.js +43 -0
- package/dist/ui/toggle-group.js.map +7 -0
- package/dist/ui/toggle.js +40 -0
- package/dist/ui/toggle.js.map +7 -0
- package/dist/ui/tooltip.js +215 -0
- package/dist/ui/tooltip.js.map +7 -0
- package/dist/usage-metered.js +8 -0
- package/dist/usage-metered.js.map +7 -0
- package/dist/useArbi.js +16 -0
- package/dist/useArbi.js.map +7 -0
- package/dist/useInstallSkillPack.js +81 -0
- package/dist/useInstallSkillPack.js.map +7 -0
- package/dist/usermenu/UserMenu.js +188 -0
- package/dist/usermenu/UserMenu.js.map +7 -0
- package/dist/usermenu/index.js +5 -0
- package/dist/usermenu/index.js.map +7 -0
- package/dist/users/index.js +15 -0
- package/dist/users/index.js.map +7 -0
- package/dist/users/user-display.js +60 -0
- package/dist/users/user-display.js.map +7 -0
- package/dist/viewers/AudioViewer.js +23 -0
- package/dist/viewers/AudioViewer.js.map +7 -0
- package/dist/viewers/DocxViewer.js +81 -0
- package/dist/viewers/DocxViewer.js.map +7 -0
- package/dist/viewers/ImageViewer.js +31 -0
- package/dist/viewers/ImageViewer.js.map +7 -0
- package/dist/viewers/PdfViewer.js +19 -3
- package/dist/viewers/PdfViewer.js.map +7 -1
- package/dist/{PdfViewerImpl-TEBYF2QI.js → viewers/PdfViewerImpl.js} +25 -19
- package/dist/viewers/PdfViewerImpl.js.map +7 -0
- package/dist/viewers/VideoViewer.js +31 -0
- package/dist/viewers/VideoViewer.js.map +7 -0
- package/dist/viewers/XlsxViewer.js +102 -0
- package/dist/viewers/XlsxViewer.js.map +7 -0
- package/dist/viewers/index.js +61 -271
- package/dist/viewers/index.js.map +7 -1
- package/dist/viewers/page-scroll.js +59 -0
- package/dist/viewers/page-scroll.js.map +7 -0
- package/dist/viewers/pdf-viewer-constants.js +9 -0
- package/dist/viewers/pdf-viewer-constants.js.map +7 -0
- package/dist/{chunk-PTOP7OHG.js → viewers/pdfjs-polyfills.js} +5 -6
- package/dist/viewers/pdfjs-polyfills.js.map +7 -0
- package/dist/viewers/selection-runs.js +38 -0
- package/dist/viewers/selection-runs.js.map +7 -0
- package/dist/viewers/usePageIntersectionObserver.js +68 -0
- package/dist/viewers/usePageIntersectionObserver.js.map +7 -0
- package/dist/viewers/useProcessedChunks.js +58 -0
- package/dist/viewers/useProcessedChunks.js.map +7 -0
- package/dist/viewers/viewer-zoom.js +163 -0
- package/dist/viewers/viewer-zoom.js.map +7 -0
- package/dist/websocket/ArbiWebSocketProvider.js +207 -0
- package/dist/websocket/ArbiWebSocketProvider.js.map +7 -0
- package/dist/websocket/context.js +14 -0
- package/dist/websocket/context.js.map +7 -0
- package/dist/websocket/hooks.js +30 -0
- package/dist/websocket/hooks.js.map +7 -0
- package/dist/websocket/index.js +22 -0
- package/dist/websocket/index.js.map +7 -0
- package/dist/websocket/live-updates.js +38 -0
- package/dist/websocket/live-updates.js.map +7 -0
- package/dist/websocket/reconnect.js +13 -0
- package/dist/websocket/reconnect.js.map +7 -0
- package/dist/websocket/store.js +58 -0
- package/dist/websocket/store.js.map +7 -0
- package/dist/workforce.js +607 -0
- package/dist/workforce.js.map +7 -0
- package/dist/workspaces/access-request.js +35 -0
- package/dist/workspaces/access-request.js.map +7 -0
- package/dist/workspaces/archive.js +59 -0
- package/dist/workspaces/archive.js.map +7 -0
- package/dist/workspaces/current.js +20 -0
- package/dist/workspaces/current.js.map +7 -0
- package/dist/workspaces/delete-workspaces.js +15 -0
- package/dist/workspaces/delete-workspaces.js.map +7 -0
- package/dist/workspaces/export-archive.js +40 -0
- package/dist/workspaces/export-archive.js.map +7 -0
- package/dist/workspaces/index.js +99 -0
- package/dist/workspaces/index.js.map +7 -0
- package/dist/workspaces/settings.js +45 -0
- package/dist/workspaces/settings.js.map +7 -0
- package/dist/workspaces/shell-workspaces.js +49 -0
- package/dist/workspaces/shell-workspaces.js.map +7 -0
- package/dist/workspaces/switch.js +234 -0
- package/dist/workspaces/switch.js.map +7 -0
- package/dist/workspaces/transfer.js +170 -0
- package/dist/workspaces/transfer.js.map +7 -0
- package/dist/workspaces/useShellWorkspaces.js +86 -0
- package/dist/workspaces/useShellWorkspaces.js.map +7 -0
- package/dist/workspaces/workspace-users.js +65 -0
- package/dist/workspaces/workspace-users.js.map +7 -0
- package/package.json +4 -4
- package/dist/PdfViewerImpl-TEBYF2QI.js.map +0 -1
- package/dist/PdfViewerImpl.d-B28hLEuj.d.cts +0 -62
- package/dist/ProductionDialog.d-CpzslFn0.d.cts +0 -51
- package/dist/annotations/freeze/index.d.cts +0 -205
- package/dist/annotations/index.d.cts +0 -360
- package/dist/artifacts/index.d.cts +0 -476
- package/dist/artifacts/redline-core.d.cts +0 -39
- package/dist/bundle-YNOX7VIL.js +0 -5
- package/dist/bundle-YNOX7VIL.js.map +0 -1
- package/dist/bundle.d-BnCSbHy2.d.cts +0 -85
- package/dist/calls/livekit/index.d.cts +0 -280
- package/dist/chunk-47CCGUWR.js.map +0 -1
- package/dist/chunk-4FL3X3LA.js +0 -2057
- package/dist/chunk-4FL3X3LA.js.map +0 -1
- package/dist/chunk-6QNBSXCE.js +0 -271
- package/dist/chunk-6QNBSXCE.js.map +0 -1
- package/dist/chunk-74N436VK.js.map +0 -1
- package/dist/chunk-APZZQZ6P.js +0 -147
- package/dist/chunk-APZZQZ6P.js.map +0 -1
- package/dist/chunk-BF5KW5ZI.js.map +0 -1
- package/dist/chunk-DPYBZDJB.js.map +0 -1
- package/dist/chunk-DZKRL5H3.js +0 -2766
- package/dist/chunk-DZKRL5H3.js.map +0 -1
- package/dist/chunk-HDCRPPBW.js +0 -75
- package/dist/chunk-HDCRPPBW.js.map +0 -1
- package/dist/chunk-L2IPPTVC.js +0 -20
- package/dist/chunk-L2IPPTVC.js.map +0 -1
- package/dist/chunk-LSU4UPS5.js +0 -1011
- package/dist/chunk-LSU4UPS5.js.map +0 -1
- package/dist/chunk-NIKPG4PW.js +0 -1128
- package/dist/chunk-NIKPG4PW.js.map +0 -1
- package/dist/chunk-NNAJLY6B.js +0 -4974
- package/dist/chunk-NNAJLY6B.js.map +0 -1
- package/dist/chunk-OYPKKHXY.js +0 -559
- package/dist/chunk-OYPKKHXY.js.map +0 -1
- package/dist/chunk-PTOP7OHG.js.map +0 -1
- package/dist/chunk-QMY2JKBI.js +0 -246
- package/dist/chunk-QMY2JKBI.js.map +0 -1
- package/dist/chunk-SN5YV6FF.js +0 -11
- package/dist/chunk-SN5YV6FF.js.map +0 -1
- package/dist/chunk-SSXFVWCT.js.map +0 -1
- package/dist/chunk-T3USOSVN.js.map +0 -1
- package/dist/chunk-T4CLW3DN.js +0 -2560
- package/dist/chunk-T4CLW3DN.js.map +0 -1
- package/dist/chunk-UW2SGTI5.js.map +0 -1
- package/dist/chunk-VSCU7K4V.js.map +0 -1
- package/dist/chunk-WL2Y2T47.js.map +0 -1
- package/dist/chunk-WUTL62MC.js.map +0 -1
- package/dist/chunk-XWPLOFDN.js +0 -644
- package/dist/chunk-XWPLOFDN.js.map +0 -1
- package/dist/chunk-Y3MTRA7D.js +0 -97
- package/dist/chunk-Y3MTRA7D.js.map +0 -1
- package/dist/chunk-YNNAJJ5Z.js.map +0 -1
- package/dist/chunk-ZM6N7YZH.js.map +0 -1
- package/dist/document-tools/core.d.cts +0 -883
- package/dist/document-tools/index.d.cts +0 -90
- package/dist/index.d-LArLnpI8.d.cts +0 -2036
- package/dist/index.d-oR5FKZpJ.d.cts +0 -579
- package/dist/index.d.cts +0 -15923
- package/dist/lazy-chunk.d-B6YDLMKI.d.cts +0 -31
- package/dist/model.d-CNtRWKVK.d.cts +0 -110
- package/dist/query-keys.d-B1Am9tIF.d.cts +0 -337
- package/dist/shell/index.d.cts +0 -6
- package/dist/store.d-GADDvC7w.d.cts +0 -35
- package/dist/stored-markdown.d-Bp18vrbr.d.cts +0 -125
- package/dist/ui/index.d.cts +0 -26
- package/dist/useAudioRecorder.d-B9rlMI_E.d.cts +0 -778
- package/dist/viewers/PdfViewer.d.cts +0 -9
- package/dist/viewers/index.d.cts +0 -262
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
|
|
2
|
+
import { useArbi } from "../useArbi.js";
|
|
3
|
+
import { arbiQueryKeys } from "../query-keys.js";
|
|
4
|
+
function useSupportTickets(options = {}) {
|
|
5
|
+
const arbi = useArbi();
|
|
6
|
+
return useQuery({
|
|
7
|
+
queryKey: arbiQueryKeys.supportTickets(),
|
|
8
|
+
queryFn: () => arbi.support.list(),
|
|
9
|
+
enabled: (options.enabled ?? true) && arbi.isLoggedIn,
|
|
10
|
+
refetchInterval: 15e3
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
function useSupportTicket(ticketId, options = {}) {
|
|
14
|
+
const arbi = useArbi();
|
|
15
|
+
return useQuery({
|
|
16
|
+
queryKey: arbiQueryKeys.supportTicket(ticketId ?? 0),
|
|
17
|
+
queryFn: () => arbi.support.get(ticketId ?? 0),
|
|
18
|
+
enabled: (options.enabled ?? true) && ticketId !== void 0 && arbi.isLoggedIn,
|
|
19
|
+
refetchInterval: 15e3
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function useRateSupportTicket() {
|
|
23
|
+
const arbi = useArbi();
|
|
24
|
+
const queries = useQueryClient();
|
|
25
|
+
return useMutation({
|
|
26
|
+
mutationFn: ({ ticketId, rating }) => arbi.support.rate(ticketId, rating),
|
|
27
|
+
onSuccess: () => queries.invalidateQueries({ queryKey: arbiQueryKeys.allSupportTickets() })
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
export {
|
|
31
|
+
useRateSupportTicket,
|
|
32
|
+
useSupportTicket,
|
|
33
|
+
useSupportTickets
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/support/index.ts"],
|
|
4
|
+
"sourcesContent": ["/** Personal support resources. Workspace switching never changes ticket ownership. */\nimport { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'\nimport type { SupportRating } from '@arbidocs/sdk/browser'\nimport { useArbi } from '../useArbi'\nimport { arbiQueryKeys } from '../query-keys'\n\nexport function useSupportTickets(options: { enabled?: boolean } = {}) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.supportTickets(),\n queryFn: () => arbi.support.list(),\n enabled: (options.enabled ?? true) && arbi.isLoggedIn,\n refetchInterval: 15000,\n })\n}\nexport function useSupportTicket(\n ticketId: number | undefined,\n options: { enabled?: boolean } = {}\n) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.supportTicket(ticketId ?? 0),\n queryFn: () => arbi.support.get(ticketId ?? 0),\n enabled: (options.enabled ?? true) && ticketId !== undefined && arbi.isLoggedIn,\n refetchInterval: 15000,\n })\n}\nexport function useRateSupportTicket() {\n const arbi = useArbi()\n const queries = useQueryClient()\n return useMutation({\n mutationFn: ({ ticketId, rating }: { ticketId: number; rating: SupportRating }) =>\n arbi.support.rate(ticketId, rating),\n onSuccess: () => queries.invalidateQueries({ queryKey: arbiQueryKeys.allSupportTickets() }),\n })\n}\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,UAAU,aAAa,sBAAsB;AAEtD,SAAS,eAAe;AACxB,SAAS,qBAAqB;AAEvB,SAAS,kBAAkB,UAAiC,CAAC,GAAG;AACrE,QAAM,OAAO,QAAQ;AACrB,SAAO,SAAS;AAAA,IACd,UAAU,cAAc,eAAe;AAAA,IACvC,SAAS,MAAM,KAAK,QAAQ,KAAK;AAAA,IACjC,UAAU,QAAQ,WAAW,SAAS,KAAK;AAAA,IAC3C,iBAAiB;AAAA,EACnB,CAAC;AACH;AACO,SAAS,iBACd,UACA,UAAiC,CAAC,GAClC;AACA,QAAM,OAAO,QAAQ;AACrB,SAAO,SAAS;AAAA,IACd,UAAU,cAAc,cAAc,YAAY,CAAC;AAAA,IACnD,SAAS,MAAM,KAAK,QAAQ,IAAI,YAAY,CAAC;AAAA,IAC7C,UAAU,QAAQ,WAAW,SAAS,aAAa,UAAa,KAAK;AAAA,IACrE,iBAAiB;AAAA,EACnB,CAAC;AACH;AACO,SAAS,uBAAuB;AACrC,QAAM,OAAO,QAAQ;AACrB,QAAM,UAAU,eAAe;AAC/B,SAAO,YAAY;AAAA,IACjB,YAAY,CAAC,EAAE,UAAU,OAAO,MAC9B,KAAK,QAAQ,KAAK,UAAU,MAAM;AAAA,IACpC,WAAW,MAAM,QAAQ,kBAAkB,EAAE,UAAU,cAAc,kBAAkB,EAAE,CAAC;AAAA,EAC5F,CAAC;AACH;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/tags.js
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { useCallback } from "react";
|
|
2
|
+
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
3
|
+
import {
|
|
4
|
+
tags as tagOps
|
|
5
|
+
} from "@arbidocs/sdk/browser";
|
|
6
|
+
import { useArbi } from "./useArbi.js";
|
|
7
|
+
import { dropTagFromCachedDocuments } from "./documents/documents-cache.js";
|
|
8
|
+
import { startEntityExtraction } from "./entity-extraction.js";
|
|
9
|
+
import { arbiMutationKeys, arbiQueryKeys } from "./hooks.js";
|
|
10
|
+
import {
|
|
11
|
+
QUEUED_WRITE_RETRY,
|
|
12
|
+
inWorkspace,
|
|
13
|
+
primeOnArbi,
|
|
14
|
+
primeOnClient,
|
|
15
|
+
useCapturingWorkspace
|
|
16
|
+
} from "./queued-writes.js";
|
|
17
|
+
function workspaceOfTag(qc, tagId) {
|
|
18
|
+
for (const [key, tags] of qc.getQueriesData({
|
|
19
|
+
queryKey: arbiQueryKeys.allTags()
|
|
20
|
+
})) {
|
|
21
|
+
if (Array.isArray(tags) && tags.some((t) => t.external_id === tagId))
|
|
22
|
+
return key[2] ?? null;
|
|
23
|
+
}
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
function openWorkspaceId(arbi) {
|
|
27
|
+
return arbi.hasWorkspace ? arbi.getWorkspaceId() : null;
|
|
28
|
+
}
|
|
29
|
+
function patchWorkspaceTags(qc, workspaceId, reducer) {
|
|
30
|
+
const key = arbiQueryKeys.tags(workspaceId);
|
|
31
|
+
const current = qc.getQueryData(key);
|
|
32
|
+
if (!current) return;
|
|
33
|
+
const next = reducer(current);
|
|
34
|
+
if (next !== current) qc.setQueryData(key, next);
|
|
35
|
+
}
|
|
36
|
+
function invalidateTagTables(qc, workspaceId) {
|
|
37
|
+
return qc.invalidateQueries({ queryKey: arbiQueryKeys.tagLists(workspaceId) });
|
|
38
|
+
}
|
|
39
|
+
function invalidateTagData(qc, workspaceId) {
|
|
40
|
+
return Promise.all([
|
|
41
|
+
qc.invalidateQueries({ queryKey: arbiQueryKeys.tags(workspaceId) }),
|
|
42
|
+
qc.invalidateQueries({ queryKey: arbiQueryKeys.facts(workspaceId) })
|
|
43
|
+
]);
|
|
44
|
+
}
|
|
45
|
+
function useInvalidateTagData() {
|
|
46
|
+
const arbi = useArbi();
|
|
47
|
+
const qc = useQueryClient();
|
|
48
|
+
return useCallback(() => {
|
|
49
|
+
const workspaceId = openWorkspaceId(arbi);
|
|
50
|
+
return workspaceId ? invalidateTagData(qc, workspaceId) : Promise.resolve();
|
|
51
|
+
}, [arbi, qc]);
|
|
52
|
+
}
|
|
53
|
+
function settleCreatedTag(qc, created) {
|
|
54
|
+
const workspaceId = created.workspace_ext_id;
|
|
55
|
+
patchWorkspaceTags(
|
|
56
|
+
qc,
|
|
57
|
+
workspaceId,
|
|
58
|
+
(old) => old.some((t) => t.external_id === created.external_id) ? old : [...old, created]
|
|
59
|
+
);
|
|
60
|
+
return invalidateTagTables(qc, workspaceId);
|
|
61
|
+
}
|
|
62
|
+
function settleChangedTag(qc, tag) {
|
|
63
|
+
const workspaceId = tag.workspace_ext_id;
|
|
64
|
+
patchWorkspaceTags(
|
|
65
|
+
qc,
|
|
66
|
+
workspaceId,
|
|
67
|
+
(old) => old.map((t) => t.external_id === tag.external_id ? { ...t, ...tag } : t)
|
|
68
|
+
);
|
|
69
|
+
return invalidateTagTables(qc, workspaceId);
|
|
70
|
+
}
|
|
71
|
+
const replayableTagMutations = [
|
|
72
|
+
{
|
|
73
|
+
mutationKey: arbiMutationKeys.createTag(),
|
|
74
|
+
// In the workspace it was made in (named on the request), opened for this session first.
|
|
75
|
+
run: (client, input) => inWorkspace(primeOnClient(client), input.workspaceId, () => tagOps.createTag(client, input)),
|
|
76
|
+
settle: (qc, created) => settleCreatedTag(qc, created)
|
|
77
|
+
}
|
|
78
|
+
];
|
|
79
|
+
function useCreateTag() {
|
|
80
|
+
const arbi = useArbi();
|
|
81
|
+
const qc = useQueryClient();
|
|
82
|
+
const capture = (input) => input.workspaceId || !arbi.hasWorkspace ? input : { ...input, workspaceId: arbi.getWorkspaceId() };
|
|
83
|
+
return useCapturingWorkspace(
|
|
84
|
+
useMutation({
|
|
85
|
+
mutationKey: arbiMutationKeys.createTag(),
|
|
86
|
+
mutationFn: (input) => inWorkspace(primeOnArbi(arbi), input.workspaceId, () => arbi.tags.create(input)),
|
|
87
|
+
onSuccess: (created) => settleCreatedTag(qc, created),
|
|
88
|
+
...QUEUED_WRITE_RETRY
|
|
89
|
+
}),
|
|
90
|
+
capture
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
function useIsCreatingTag() {
|
|
94
|
+
const qc = useQueryClient();
|
|
95
|
+
return useCallback(
|
|
96
|
+
(name) => {
|
|
97
|
+
const wanted = name.trim().toLowerCase();
|
|
98
|
+
return qc.getMutationCache().findAll({
|
|
99
|
+
mutationKey: arbiMutationKeys.createTag(),
|
|
100
|
+
predicate: (m) => m.state.status === "pending" && m.state.variables?.name.trim().toLowerCase() === wanted
|
|
101
|
+
}).length > 0;
|
|
102
|
+
},
|
|
103
|
+
[qc]
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
function useUpdateTag() {
|
|
107
|
+
const arbi = useArbi();
|
|
108
|
+
const qc = useQueryClient();
|
|
109
|
+
return useMutation({
|
|
110
|
+
mutationKey: arbiMutationKeys.updateTag(),
|
|
111
|
+
mutationFn: ({ tagId, change }) => arbi.tags.update(tagId, change),
|
|
112
|
+
onSuccess: (tag) => settleChangedTag(qc, tag)
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
function useSetTagValues() {
|
|
116
|
+
const arbi = useArbi();
|
|
117
|
+
const qc = useQueryClient();
|
|
118
|
+
return useMutation({
|
|
119
|
+
mutationKey: arbiMutationKeys.updateTag(),
|
|
120
|
+
mutationFn: ({
|
|
121
|
+
tagId,
|
|
122
|
+
values
|
|
123
|
+
}) => arbi.tags.setValues(tagId, values),
|
|
124
|
+
onSuccess: (tag) => settleChangedTag(qc, tag)
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
function useDeleteTag() {
|
|
128
|
+
const arbi = useArbi();
|
|
129
|
+
const qc = useQueryClient();
|
|
130
|
+
return useMutation({
|
|
131
|
+
mutationKey: arbiMutationKeys.deleteTag(),
|
|
132
|
+
mutationFn: (tagId) => arbi.tags.delete(tagId),
|
|
133
|
+
// The tag's own workspace (the cached list holding it), else the one open when it is sent: a
|
|
134
|
+
// switch while the delete runs must not patch the next workspace's list.
|
|
135
|
+
onMutate: (tagId) => ({ workspaceId: workspaceOfTag(qc, tagId) ?? openWorkspaceId(arbi) }),
|
|
136
|
+
onSuccess: (_data, tagId, context) => {
|
|
137
|
+
dropTagFromCachedDocuments(qc, tagId);
|
|
138
|
+
const workspaceId = context?.workspaceId;
|
|
139
|
+
if (!workspaceId) return;
|
|
140
|
+
patchWorkspaceTags(
|
|
141
|
+
qc,
|
|
142
|
+
workspaceId,
|
|
143
|
+
(old) => old.filter((t) => t.external_id !== tagId).map((t) => t.parent_ext_id === tagId ? { ...t, parent_ext_id: null } : t)
|
|
144
|
+
);
|
|
145
|
+
return Promise.all([
|
|
146
|
+
invalidateTagTables(qc, workspaceId),
|
|
147
|
+
qc.invalidateQueries({ queryKey: arbiQueryKeys.facts(workspaceId) })
|
|
148
|
+
]);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
function useExtractEntities() {
|
|
153
|
+
const arbi = useArbi();
|
|
154
|
+
return useMutation({
|
|
155
|
+
mutationKey: arbiMutationKeys.extractEntities(),
|
|
156
|
+
mutationFn: (docIds) => arbi.tags.extractEntities(docIds),
|
|
157
|
+
onSuccess: (data) => startEntityExtraction(data.doc_ext_ids)
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
function useTagKindSchema(kind, options) {
|
|
161
|
+
const arbi = useArbi();
|
|
162
|
+
const workspaceId = openWorkspaceId(arbi) ?? "";
|
|
163
|
+
return useQuery({
|
|
164
|
+
queryKey: arbiQueryKeys.tagKind(workspaceId, kind ?? ""),
|
|
165
|
+
queryFn: () => arbi.readInWorkspace(workspaceId, () => arbi.tagKinds.get(kind)),
|
|
166
|
+
enabled: (options?.enabled ?? true) && !!kind && !!workspaceId
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
function useUpdateTagKindSchema() {
|
|
170
|
+
const arbi = useArbi();
|
|
171
|
+
const qc = useQueryClient();
|
|
172
|
+
return useMutation({
|
|
173
|
+
mutationKey: arbiMutationKeys.updateTagKindSchema(),
|
|
174
|
+
mutationFn: ({
|
|
175
|
+
kind,
|
|
176
|
+
fields
|
|
177
|
+
}) => arbi.tagKinds.update(kind, fields),
|
|
178
|
+
// The workspace open when it is sent (the server writes the open workspace's schema until
|
|
179
|
+
// the request can name it): a switch meanwhile must not rewrite the next workspace's columns.
|
|
180
|
+
onMutate: () => ({ workspaceId: openWorkspaceId(arbi) }),
|
|
181
|
+
onSuccess: (schema, _input, context) => {
|
|
182
|
+
const workspaceId = context?.workspaceId;
|
|
183
|
+
if (!workspaceId) return;
|
|
184
|
+
qc.setQueryData(arbiQueryKeys.tagKind(workspaceId, schema.kind), schema);
|
|
185
|
+
return invalidateTagData(qc, workspaceId);
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
export {
|
|
190
|
+
invalidateTagData,
|
|
191
|
+
invalidateTagTables,
|
|
192
|
+
patchWorkspaceTags,
|
|
193
|
+
replayableTagMutations,
|
|
194
|
+
useCreateTag,
|
|
195
|
+
useDeleteTag,
|
|
196
|
+
useExtractEntities,
|
|
197
|
+
useInvalidateTagData,
|
|
198
|
+
useIsCreatingTag,
|
|
199
|
+
useSetTagValues,
|
|
200
|
+
useTagKindSchema,
|
|
201
|
+
useUpdateTag,
|
|
202
|
+
useUpdateTagKindSchema
|
|
203
|
+
};
|
|
204
|
+
//# sourceMappingURL=tags.js.map
|
package/dist/tags.js.map
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/tags.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Tags: the open workspace's tag list (`useTags()`), the writes (create, update, delete, values,\n * entity extraction), and tag kinds \u2014 a kind's fields in the workspace are the columns of a table\n * of its tags (`useTagKindSchema('issue')`), whose rows are the tag list filtered by kind with\n * links (`useTags(workspaceId, { kind, include })`).\n *\n * Everything is cached under the workspace's tags (`arbiQueryKeys.tags`). The whole list is kept\n * current in place: every write here patches it ({@link patchWorkspaceTags}, which a host also\n * uses for its own writes that move a tag's counts, e.g. applying it to documents) and refreshes\n * the filtered lists (the tables). Anything that invalidates the workspace's tags (a document batch\n * finishing, {@link useInvalidateTagData} after a doctag or fact change) refreshes them all.\n *\n * Creating a tag can be queued while offline and replayed after a reload: see `offline.ts`.\n *\n * Requires an `ArbiHost` (with an `arbi`) and a React Query client above it.\n */\n\nimport { useCallback } from 'react'\nimport { useMutation, useQuery, useQueryClient, type QueryClient } from '@tanstack/react-query'\nimport type { ArbiClient } from '@arbidocs/client'\nimport {\n tags as tagOps,\n type TagChange,\n type TagFieldDefinition,\n type TagKind,\n type TagKindSchema,\n type TagResponse,\n} from '@arbidocs/sdk/browser'\nimport { useArbi } from './useArbi'\nimport { dropTagFromCachedDocuments } from './documents/documents-cache'\nimport { startEntityExtraction } from './entity-extraction'\nimport { arbiMutationKeys, arbiQueryKeys } from './hooks'\nimport {\n QUEUED_WRITE_RETRY,\n inWorkspace,\n primeOnArbi,\n primeOnClient,\n useCapturingWorkspace,\n} from './queued-writes'\n\n/** The workspace open on `arbi`, or `null` (`getWorkspaceId()` throws when none is open). */\n/** The workspace whose cached tag list holds `tagId`, if any. */\nfunction workspaceOfTag(qc: QueryClient, tagId: string): string | null {\n for (const [key, tags] of qc.getQueriesData<TagResponse[]>({\n queryKey: arbiQueryKeys.allTags(),\n })) {\n if (Array.isArray(tags) && tags.some((t) => t.external_id === tagId))\n return (key[2] as string | undefined) ?? null\n }\n return null\n}\n\nfunction openWorkspaceId(arbi: ReturnType<typeof useArbi>): string | null {\n return arbi.hasWorkspace ? arbi.getWorkspaceId() : null\n}\n\n/**\n * Apply `reducer` to a workspace's cached tag list (nothing cached: nothing to do). The list is\n * read once, then kept current by these patches; a host's own write that changes a tag (applying\n * it to documents moves its `doctag_count`) patches it here too.\n */\nexport function patchWorkspaceTags(\n qc: QueryClient,\n workspaceId: string,\n reducer: (tags: TagResponse[]) => TagResponse[]\n): void {\n const key = arbiQueryKeys.tags(workspaceId)\n const current = qc.getQueryData<TagResponse[]>(key)\n if (!current) return\n const next = reducer(current)\n if (next !== current) qc.setQueryData(key, next)\n}\n\n/** Refetch a workspace's tables of tags (its filtered lists), not the whole list. */\nexport function invalidateTagTables(qc: QueryClient, workspaceId: string): Promise<void> {\n return qc.invalidateQueries({ queryKey: arbiQueryKeys.tagLists(workspaceId) })\n}\n\n/** Refresh what a tag, doctag or fact change affects: the workspace's tags, tables and facts. */\nexport function invalidateTagData(qc: QueryClient, workspaceId: string): Promise<unknown> {\n return Promise.all([\n qc.invalidateQueries({ queryKey: arbiQueryKeys.tags(workspaceId) }),\n qc.invalidateQueries({ queryKey: arbiQueryKeys.facts(workspaceId) }),\n ])\n}\n\n/** {@link invalidateTagData} for the open workspace: call it after a doctag or fact write. */\nexport function useInvalidateTagData(): () => Promise<unknown> {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useCallback(() => {\n const workspaceId = openWorkspaceId(arbi)\n return workspaceId ? invalidateTagData(qc, workspaceId) : Promise.resolve()\n }, [arbi, qc])\n}\n\n/**\n * What a new tag is: its name, and optionally kind, format, parent, values, sharing, and the workspace it goes in\n * (absent: the open one).\n */\nexport type CreateTagInput = Parameters<typeof tagOps.createTag>[1]\n\n/** A created tag joins its workspace's list; the tables re-read. */\nfunction settleCreatedTag(qc: QueryClient, created: TagResponse): Promise<void> {\n const workspaceId = created.workspace_ext_id\n patchWorkspaceTags(qc, workspaceId, (old) =>\n old.some((t) => t.external_id === created.external_id) ? old : [...old, created]\n )\n return invalidateTagTables(qc, workspaceId)\n}\n\n/** A changed tag replaces its entry in the list; the tables re-read. */\nfunction settleChangedTag(qc: QueryClient, tag: TagResponse): Promise<void> {\n const workspaceId = tag.workspace_ext_id\n patchWorkspaceTags(qc, workspaceId, (old) =>\n old.map((t) => (t.external_id === tag.external_id ? { ...t, ...tag } : t))\n )\n return invalidateTagTables(qc, workspaceId)\n}\n\n/**\n * The tag writes a host may queue while offline and replay after a reload (`offline.ts`): each\n * key's request on a bare client, and what its success does to the cache.\n */\nexport const replayableTagMutations = [\n {\n mutationKey: arbiMutationKeys.createTag(),\n // In the workspace it was made in (named on the request), opened for this session first.\n run: (client: ArbiClient, input: CreateTagInput) =>\n inWorkspace(primeOnClient(client), input.workspaceId, () => tagOps.createTag(client, input)),\n settle: (qc: QueryClient, created: TagResponse) => settleCreatedTag(qc, created),\n },\n] as const\n\n/**\n * Create a tag in the open workspace, or `workspaceId` (`{ name, kind: 'issue' }`, `{ name, parentId }`, \u2026): it is\n * added to the tag list and the tables re-read. Resolves with the new tag. Offline it is held and\n * sent on reconnect (a host that registers `registerArbiMutationDefaults` keeps it across reloads).\n */\nexport function useCreateTag() {\n const arbi = useArbi()\n const qc = useQueryClient()\n // The workspace is captured when the tag is made, so a create queued offline keeps it.\n const capture = (input: CreateTagInput): CreateTagInput =>\n input.workspaceId || !arbi.hasWorkspace\n ? input\n : { ...input, workspaceId: arbi.getWorkspaceId() }\n return useCapturingWorkspace(\n useMutation({\n mutationKey: arbiMutationKeys.createTag(),\n mutationFn: (input: CreateTagInput): Promise<TagResponse> =>\n inWorkspace(primeOnArbi(arbi), input.workspaceId, () => arbi.tags.create(input)),\n onSuccess: (created) => settleCreatedTag(qc, created),\n ...QUEUED_WRITE_RETRY,\n }),\n capture\n )\n}\n\n/**\n * Whether a tag of this name (any case) is being created right now: a second create of the same\n * name (a double Enter) is skipped instead of making a duplicate.\n */\nexport function useIsCreatingTag(): (name: string) => boolean {\n const qc = useQueryClient()\n return useCallback(\n (name: string) => {\n const wanted = name.trim().toLowerCase()\n return (\n qc.getMutationCache().findAll({\n mutationKey: arbiMutationKeys.createTag(),\n predicate: (m) =>\n m.state.status === 'pending' &&\n (m.state.variables as CreateTagInput | undefined)?.name.trim().toLowerCase() === wanted,\n }).length > 0\n )\n },\n [qc]\n )\n}\n\n/** Change a tag (name, format, instruction, parent, sharing, values): patched in the list. */\nexport function useUpdateTag() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationKey: arbiMutationKeys.updateTag(),\n mutationFn: ({ tagId, change }: { tagId: string; change: TagChange }): Promise<TagResponse> =>\n arbi.tags.update(tagId, change),\n onSuccess: (tag) => settleChangedTag(qc, tag),\n })\n}\n\n/** Merge-patch a tag's values for its kind's fields (`null` clears one); its tables refresh. */\nexport function useSetTagValues() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationKey: arbiMutationKeys.updateTag(),\n mutationFn: ({\n tagId,\n values,\n }: {\n tagId: string\n values: Record<string, unknown>\n }): Promise<TagResponse> => arbi.tags.setValues(tagId, values),\n onSuccess: (tag) => settleChangedTag(qc, tag),\n })\n}\n\n/**\n * Delete a tag: it leaves the list (its sub-tags move to the top level on the server, so the list\n * re-reads them), and the tables and facts re-read. A host that shows the tag on its own items\n * (documents' tags) follows `arbiMutationKeys.deleteTag()` to drop it there.\n */\nexport function useDeleteTag() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationKey: arbiMutationKeys.deleteTag(),\n mutationFn: (tagId: string) => arbi.tags.delete(tagId),\n // The tag's own workspace (the cached list holding it), else the one open when it is sent: a\n // switch while the delete runs must not patch the next workspace's list.\n onMutate: (tagId) => ({ workspaceId: workspaceOfTag(qc, tagId) ?? openWorkspaceId(arbi) }),\n onSuccess: (_data, tagId, context) => {\n // Its pills come off the documents grid in place (and off any open document).\n dropTagFromCachedDocuments(qc, tagId)\n const workspaceId = context?.workspaceId\n if (!workspaceId) return\n patchWorkspaceTags(qc, workspaceId, (old) =>\n old\n .filter((t) => t.external_id !== tagId)\n .map((t) => (t.parent_ext_id === tagId ? { ...t, parent_ext_id: null } : t))\n )\n return Promise.all([\n invalidateTagTables(qc, workspaceId),\n qc.invalidateQueries({ queryKey: arbiQueryKeys.facts(workspaceId) }),\n ])\n },\n })\n}\n\n/**\n * Find the people and organisations documents name and link each to its entity tag. Accepted at\n * once with the documents' ids, which show as running (`useEntityExtractionDocIds`) until a\n * `batch_complete` (`entity_extract`) WebSocket message says they are done.\n */\nexport function useExtractEntities() {\n const arbi = useArbi()\n return useMutation({\n mutationKey: arbiMutationKeys.extractEntities(),\n mutationFn: (docIds: string[]) => arbi.tags.extractEntities(docIds),\n onSuccess: (data) => startEntityExtraction(data.doc_ext_ids),\n })\n}\n\n/**\n * A kind's fields in the open workspace (`'issue'`: its issue fields): the columns of a table of\n * that kind's tags. The built-in ones (`is_default`) until the workspace sets its own.\n */\nexport function useTagKindSchema(\n kind: TagKind | null | undefined,\n options?: { enabled?: boolean }\n) {\n const arbi = useArbi()\n const workspaceId = openWorkspaceId(arbi) ?? ''\n return useQuery({\n queryKey: arbiQueryKeys.tagKind(workspaceId, kind ?? ''),\n queryFn: (): Promise<TagKindSchema> =>\n arbi.readInWorkspace(workspaceId, () => arbi.tagKinds.get(kind as TagKind)),\n enabled: (options?.enabled ?? true) && !!kind && !!workspaceId,\n })\n}\n\n/**\n * Set a kind's fields in full (a field with its `id` keeps its values; one without is new; one\n * left out is removed). The kind's schema and the workspace's tags refresh.\n */\nexport function useUpdateTagKindSchema() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationKey: arbiMutationKeys.updateTagKindSchema(),\n mutationFn: ({\n kind,\n fields,\n }: {\n kind: TagKind\n fields: TagFieldDefinition[]\n }): Promise<TagKindSchema> => arbi.tagKinds.update(kind, fields),\n // The workspace open when it is sent (the server writes the open workspace's schema until\n // the request can name it): a switch meanwhile must not rewrite the next workspace's columns.\n onMutate: () => ({ workspaceId: openWorkspaceId(arbi) }),\n onSuccess: (schema, _input, context) => {\n const workspaceId = context?.workspaceId\n if (!workspaceId) return\n qc.setQueryData(arbiQueryKeys.tagKind(workspaceId, schema.kind), schema)\n return invalidateTagData(qc, workspaceId)\n },\n })\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Input } from "./input.js";
|
|
3
|
+
import { Textarea } from "./textarea.js";
|
|
4
|
+
import { useState, useCallback, useEffect, useRef } from "react";
|
|
5
|
+
function DebouncedInput({
|
|
6
|
+
value,
|
|
7
|
+
onChange,
|
|
8
|
+
disabled,
|
|
9
|
+
type = "text",
|
|
10
|
+
multiline = false,
|
|
11
|
+
className,
|
|
12
|
+
debounceMs = 500,
|
|
13
|
+
placeholder,
|
|
14
|
+
autoResize = true,
|
|
15
|
+
minHeight = 28,
|
|
16
|
+
maxHeight = 72
|
|
17
|
+
}) {
|
|
18
|
+
const [localValue, setLocalValue] = useState(value);
|
|
19
|
+
const timeoutRef = useRef(void 0);
|
|
20
|
+
const pendingRef = useRef(null);
|
|
21
|
+
const textareaRef = useRef(null);
|
|
22
|
+
const adjustHeight = useCallback(() => {
|
|
23
|
+
const textarea = textareaRef.current;
|
|
24
|
+
if (!textarea || !autoResize) return;
|
|
25
|
+
textarea.style.height = "auto";
|
|
26
|
+
const newHeight = Math.min(Math.max(textarea.scrollHeight, minHeight), maxHeight);
|
|
27
|
+
textarea.style.height = `${newHeight}px`;
|
|
28
|
+
}, [autoResize, minHeight, maxHeight]);
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
if (pendingRef.current !== null) return;
|
|
31
|
+
setLocalValue(value);
|
|
32
|
+
}, [value]);
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
if (multiline) {
|
|
35
|
+
adjustHeight();
|
|
36
|
+
}
|
|
37
|
+
}, [localValue, multiline, adjustHeight]);
|
|
38
|
+
const onChangeRef = useRef(onChange);
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
onChangeRef.current = onChange;
|
|
41
|
+
}, [onChange]);
|
|
42
|
+
const flushPendingChange = useCallback(() => {
|
|
43
|
+
if (pendingRef.current === null) return false;
|
|
44
|
+
const pending = pendingRef.current;
|
|
45
|
+
pendingRef.current = null;
|
|
46
|
+
clearTimeout(timeoutRef.current);
|
|
47
|
+
onChangeRef.current(pending);
|
|
48
|
+
return true;
|
|
49
|
+
}, []);
|
|
50
|
+
const handleChange = useCallback(
|
|
51
|
+
(e) => {
|
|
52
|
+
const newValue = e.target.value;
|
|
53
|
+
setLocalValue(newValue);
|
|
54
|
+
pendingRef.current = newValue;
|
|
55
|
+
clearTimeout(timeoutRef.current);
|
|
56
|
+
timeoutRef.current = setTimeout(() => {
|
|
57
|
+
pendingRef.current = null;
|
|
58
|
+
onChangeRef.current(newValue);
|
|
59
|
+
}, debounceMs);
|
|
60
|
+
},
|
|
61
|
+
[debounceMs]
|
|
62
|
+
);
|
|
63
|
+
useEffect(
|
|
64
|
+
() => () => {
|
|
65
|
+
const pending = pendingRef.current;
|
|
66
|
+
pendingRef.current = null;
|
|
67
|
+
clearTimeout(timeoutRef.current);
|
|
68
|
+
if (pending !== null) onChangeRef.current(pending);
|
|
69
|
+
},
|
|
70
|
+
[]
|
|
71
|
+
);
|
|
72
|
+
const handleBlur = useCallback(() => {
|
|
73
|
+
flushPendingChange();
|
|
74
|
+
if (localValue !== value) {
|
|
75
|
+
setLocalValue(value);
|
|
76
|
+
}
|
|
77
|
+
}, [flushPendingChange, localValue, value]);
|
|
78
|
+
if (multiline) {
|
|
79
|
+
return /* @__PURE__ */ jsx(
|
|
80
|
+
Textarea,
|
|
81
|
+
{
|
|
82
|
+
ref: textareaRef,
|
|
83
|
+
value: localValue,
|
|
84
|
+
onChange: handleChange,
|
|
85
|
+
onBlur: handleBlur,
|
|
86
|
+
disabled,
|
|
87
|
+
className: `resize-y ${className || ""}`,
|
|
88
|
+
placeholder,
|
|
89
|
+
style: { minHeight: `${minHeight}px` }
|
|
90
|
+
}
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
return /* @__PURE__ */ jsx(
|
|
94
|
+
Input,
|
|
95
|
+
{
|
|
96
|
+
type,
|
|
97
|
+
value: localValue,
|
|
98
|
+
onChange: handleChange,
|
|
99
|
+
onBlur: handleBlur,
|
|
100
|
+
disabled,
|
|
101
|
+
className,
|
|
102
|
+
placeholder
|
|
103
|
+
}
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
export {
|
|
107
|
+
DebouncedInput
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=DebouncedInput.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/ui/DebouncedInput.tsx"],
|
|
4
|
+
"sourcesContent": ["/**\n * DebouncedInput Component\n *\n * A text input that debounces onChange calls to reduce API calls.\n * Supports both single-line Input and multi-line Textarea.\n * Reverts to prop value on blur if local value differs (handles validation failures).\n */\n\nimport { Input } from './input'\nimport { Textarea } from './textarea'\nimport { useState, useCallback, useEffect, useRef } from 'react'\n\nexport interface DebouncedInputProps {\n /** Current value */\n value: string\n /** Callback when value changes (debounced) */\n onChange: (value: string) => void\n /** Whether the input is disabled */\n disabled?: boolean\n /** Input type (text, number, etc.) */\n type?: string\n /** Whether to render as textarea */\n multiline?: boolean\n /** Additional CSS classes */\n className?: string\n /** Debounce delay in milliseconds */\n debounceMs?: number\n /** Placeholder text */\n placeholder?: string\n /** Auto-resize textarea to fit content (multiline only) */\n autoResize?: boolean\n /** Min height in pixels for auto-resize (default: 28, ~1 row) */\n minHeight?: number\n /** Max height in pixels for auto-resize (default: 72, ~3 rows) */\n maxHeight?: number\n}\n\nexport function DebouncedInput({\n value,\n onChange,\n disabled,\n type = 'text',\n multiline = false,\n className,\n debounceMs = 500,\n placeholder,\n autoResize = true,\n minHeight = 28,\n maxHeight = 72,\n}: DebouncedInputProps) {\n const [localValue, setLocalValue] = useState(value)\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n const pendingRef = useRef<string | null>(null)\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n\n // Auto-resize textarea based on content\n const adjustHeight = useCallback(() => {\n const textarea = textareaRef.current\n if (!textarea || !autoResize) return\n\n // Reset height to measure scrollHeight accurately\n textarea.style.height = 'auto'\n // Clamp between min and max\n const newHeight = Math.min(Math.max(textarea.scrollHeight, minHeight), maxHeight)\n textarea.style.height = `${newHeight}px`\n }, [autoResize, minHeight, maxHeight])\n\n // Sync from the prop (e.g. navigating between items) \u2014 but NEVER while the user\n // has an uncommitted edit. The documents list refetches in the background, and\n // an unguarded sync reset the box mid-word: typing \"2000-01-02\" landed as\n // \"2000-\", losing characters with no indication anything had happened.\n //\n // `pendingRef` is set on every keystroke and cleared when the edit commits, so\n // it is exactly \"the user is mid-edit\". Once committed, syncing resumes, which\n // keeps the revert-on-rejected-save behaviour intact.\n useEffect(() => {\n if (pendingRef.current !== null) return\n setLocalValue(value)\n }, [value])\n\n // Adjust height when value changes\n useEffect(() => {\n if (multiline) {\n adjustHeight()\n }\n }, [localValue, multiline, adjustHeight])\n\n // Timer + not-yet-committed value live in refs, NOT in a useMemo closure.\n // Callers pass an inline arrow for `onChange`, so a useMemo keyed on it was\n // rebuilt on every render and lost its `timeoutId`: clearTimeout() then cleared\n // nothing, and there was no way to flush a pending edit from anywhere else.\n // Hold the latest onChange without re-arming the timer every render.\n const onChangeRef = useRef(onChange)\n useEffect(() => {\n onChangeRef.current = onChange\n }, [onChange])\n\n /** Commit a queued edit immediately. Returns false when nothing was queued. */\n const flushPendingChange = useCallback(() => {\n if (pendingRef.current === null) return false\n const pending = pendingRef.current\n pendingRef.current = null\n clearTimeout(timeoutRef.current)\n onChangeRef.current(pending)\n return true\n }, [])\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const newValue = e.target.value\n setLocalValue(newValue)\n pendingRef.current = newValue\n clearTimeout(timeoutRef.current)\n timeoutRef.current = setTimeout(() => {\n pendingRef.current = null\n onChangeRef.current(newValue)\n }, debounceMs)\n },\n [debounceMs]\n )\n\n // On unmount, COMMIT a queued edit rather than dropping it. A background\n // refetch (or navigating away) can replace this input while the debounce is\n // still armed; the timer and the pending value die with the old instance, and\n // the fresh one blurs with nothing queued \u2014 so the edit disappeared with no\n // request at all. Refs are read in cleanup, so this is safe: no state is set on\n // an unmounted component.\n useEffect(\n () => () => {\n const pending = pendingRef.current\n pendingRef.current = null\n clearTimeout(timeoutRef.current)\n if (pending !== null) onChangeRef.current(pending)\n },\n []\n )\n\n // Blur COMMITS a queued edit before any revert is considered. Reverting first\n // silently threw away anything typed inside the debounce window: tab away\n // quickly and the edit vanished with no request and no error.\n //\n // The revert still applies when nothing is queued, which is its actual purpose\n // \u2014 after a rejected save the prop still holds the last valid value, so\n // snapping back to it clears the invalid text left in the box.\n const handleBlur = useCallback(() => {\n // Commit first, then fall back to the prop. Both steps matter:\n // - flushing stops an edit typed inside the debounce window being discarded;\n // - snapping back to `value` handles a REJECTED save, where the parent never\n // changes the prop (e.g. a malformed date fails validation and no request\n // is sent). Without it the box keeps showing text that was never saved.\n // On a successful save the parent updates `value` from the response and the\n // sync effect brings the committed value straight back in.\n flushPendingChange()\n if (localValue !== value) {\n setLocalValue(value)\n }\n }, [flushPendingChange, localValue, value])\n\n if (multiline) {\n return (\n <Textarea\n ref={textareaRef}\n value={localValue}\n onChange={handleChange}\n onBlur={handleBlur}\n disabled={disabled}\n className={`resize-y ${className || ''}`}\n placeholder={placeholder}\n style={{ minHeight: `${minHeight}px` }}\n />\n )\n }\n\n return (\n <Input\n type={type}\n value={localValue}\n onChange={handleChange}\n onBlur={handleBlur}\n disabled={disabled}\n className={className}\n placeholder={placeholder}\n />\n )\n}\n"],
|
|
5
|
+
"mappings": "AAgKM;AAxJN,SAAS,aAAa;AACtB,SAAS,gBAAgB;AACzB,SAAS,UAAU,aAAa,WAAW,cAAc;AA2BlD,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,YAAY;AAAA,EACZ;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,YAAY;AACd,GAAwB;AACtB,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAClD,QAAM,aAAa,OAAkD,MAAS;AAC9E,QAAM,aAAa,OAAsB,IAAI;AAC7C,QAAM,cAAc,OAA4B,IAAI;AAGpD,QAAM,eAAe,YAAY,MAAM;AACrC,UAAM,WAAW,YAAY;AAC7B,QAAI,CAAC,YAAY,CAAC,WAAY;AAG9B,aAAS,MAAM,SAAS;AAExB,UAAM,YAAY,KAAK,IAAI,KAAK,IAAI,SAAS,cAAc,SAAS,GAAG,SAAS;AAChF,aAAS,MAAM,SAAS,GAAG,SAAS;AAAA,EACtC,GAAG,CAAC,YAAY,WAAW,SAAS,CAAC;AAUrC,YAAU,MAAM;AACd,QAAI,WAAW,YAAY,KAAM;AACjC,kBAAc,KAAK;AAAA,EACrB,GAAG,CAAC,KAAK,CAAC;AAGV,YAAU,MAAM;AACd,QAAI,WAAW;AACb,mBAAa;AAAA,IACf;AAAA,EACF,GAAG,CAAC,YAAY,WAAW,YAAY,CAAC;AAOxC,QAAM,cAAc,OAAO,QAAQ;AACnC,YAAU,MAAM;AACd,gBAAY,UAAU;AAAA,EACxB,GAAG,CAAC,QAAQ,CAAC;AAGb,QAAM,qBAAqB,YAAY,MAAM;AAC3C,QAAI,WAAW,YAAY,KAAM,QAAO;AACxC,UAAM,UAAU,WAAW;AAC3B,eAAW,UAAU;AACrB,iBAAa,WAAW,OAAO;AAC/B,gBAAY,QAAQ,OAAO;AAC3B,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe;AAAA,IACnB,CAAC,MAAiE;AAChE,YAAM,WAAW,EAAE,OAAO;AAC1B,oBAAc,QAAQ;AACtB,iBAAW,UAAU;AACrB,mBAAa,WAAW,OAAO;AAC/B,iBAAW,UAAU,WAAW,MAAM;AACpC,mBAAW,UAAU;AACrB,oBAAY,QAAQ,QAAQ;AAAA,MAC9B,GAAG,UAAU;AAAA,IACf;AAAA,IACA,CAAC,UAAU;AAAA,EACb;AAQA;AAAA,IACE,MAAM,MAAM;AACV,YAAM,UAAU,WAAW;AAC3B,iBAAW,UAAU;AACrB,mBAAa,WAAW,OAAO;AAC/B,UAAI,YAAY,KAAM,aAAY,QAAQ,OAAO;AAAA,IACnD;AAAA,IACA,CAAC;AAAA,EACH;AASA,QAAM,aAAa,YAAY,MAAM;AAQnC,uBAAmB;AACnB,QAAI,eAAe,OAAO;AACxB,oBAAc,KAAK;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,oBAAoB,YAAY,KAAK,CAAC;AAE1C,MAAI,WAAW;AACb,WACE;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,OAAO;AAAA,QACP,UAAU;AAAA,QACV,QAAQ;AAAA,QACR;AAAA,QACA,WAAW,YAAY,aAAa,EAAE;AAAA,QACtC;AAAA,QACA,OAAO,EAAE,WAAW,GAAG,SAAS,KAAK;AAAA;AAAA,IACvC;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,OAAO;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF;AAEJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/ui/DictateContext.tsx"],
|
|
4
|
+
"sourcesContent": ["/**\n * Dictation for every `Input`/`Textarea` with a `dictate` prop, instead of threading a\n * `transcribe` function through each field. A host gives it once, as the host configuration's\n * `dictate` (`<ArbiHost config={{ dictate: { transcribe, onError } }}>`); every `dictate`-enabled\n * field downstream then just works. Without it fields render without a mic button: dictation is a\n * progressive enhancement, never a hard requirement.\n */\n\nimport { useHostConfigRecord } from '../host/context'\n\nexport interface DictateContextValue {\n transcribe: (blob: Blob) => Promise<string>\n onError?: (message: string) => void\n}\n\nexport function useDictateContext(): DictateContextValue | null {\n return (useHostConfigRecord().dictate as DictateContextValue | undefined) ?? null\n}\n"],
|
|
5
|
+
"mappings": "AAQA,SAAS,2BAA2B;AAO7B,SAAS,oBAAgD;AAC9D,SAAQ,oBAAoB,EAAE,WAA+C;AAC/E;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Plus, Minus } from "lucide-react";
|
|
3
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "./tooltip.js";
|
|
4
|
+
function IconToggle({
|
|
5
|
+
icon: Icon,
|
|
6
|
+
isActive,
|
|
7
|
+
onToggle,
|
|
8
|
+
colors,
|
|
9
|
+
inactiveColors,
|
|
10
|
+
fillWhenActive = false,
|
|
11
|
+
disabled = false,
|
|
12
|
+
disabledTooltip,
|
|
13
|
+
showLabel = false,
|
|
14
|
+
label,
|
|
15
|
+
tooltipActive,
|
|
16
|
+
tooltipInactive,
|
|
17
|
+
tooltipMixed,
|
|
18
|
+
isMixed = false,
|
|
19
|
+
showTooltip = true,
|
|
20
|
+
"data-testid": dataTestId
|
|
21
|
+
}) {
|
|
22
|
+
const handleClick = (e) => {
|
|
23
|
+
e.stopPropagation();
|
|
24
|
+
onToggle(!isActive);
|
|
25
|
+
};
|
|
26
|
+
const { bg: bgColorClass } = colors;
|
|
27
|
+
const tooltipText = disabled ? disabledTooltip : isMixed ? tooltipMixed : isActive ? tooltipActive : tooltipInactive;
|
|
28
|
+
const { text: textColorClass } = colors;
|
|
29
|
+
const button = /* @__PURE__ */ jsx("div", { className: "inline-flex items-center gap-2", children: /* @__PURE__ */ jsxs(
|
|
30
|
+
"button",
|
|
31
|
+
{
|
|
32
|
+
type: "button",
|
|
33
|
+
onClick: handleClick,
|
|
34
|
+
disabled,
|
|
35
|
+
"data-testid": dataTestId,
|
|
36
|
+
"aria-pressed": isMixed ? "mixed" : isActive,
|
|
37
|
+
"aria-label": label ?? tooltipText,
|
|
38
|
+
className: `
|
|
39
|
+
group/toggle relative inline-flex items-center h-4 w-8 rounded-full
|
|
40
|
+
pointer-coarse:after:absolute pointer-coarse:after:left-1/2 pointer-coarse:after:top-1/2 pointer-coarse:after:size-11 pointer-coarse:after:-translate-x-1/2 pointer-coarse:after:-translate-y-1/2 pointer-coarse:after:content-['']
|
|
41
|
+
transition-colors cursor-pointer
|
|
42
|
+
disabled:opacity-50 disabled:cursor-not-allowed
|
|
43
|
+
${isActive ? bgColorClass : isMixed ? "bg-muted-foreground" : inactiveColors?.bg ?? "bg-muted"}
|
|
44
|
+
`,
|
|
45
|
+
children: [
|
|
46
|
+
isActive && !disabled && /* @__PURE__ */ jsx("div", { className: "absolute left-0 w-4 h-4 flex items-center justify-center", children: /* @__PURE__ */ jsx(Minus, { className: "w-2.5 h-2.5 text-white/70 hidden group-hover/toggle:block" }) }),
|
|
47
|
+
!isActive && !disabled && /* @__PURE__ */ jsx("div", { className: "absolute right-0 w-4 h-4 flex items-center justify-center", children: /* @__PURE__ */ jsx(Plus, { className: "w-2.5 h-2.5 text-muted-foreground hidden group-hover/toggle:block" }) }),
|
|
48
|
+
/* @__PURE__ */ jsx(
|
|
49
|
+
"div",
|
|
50
|
+
{
|
|
51
|
+
className: `
|
|
52
|
+
absolute h-4 w-4 rounded-full bg-white shadow-sm
|
|
53
|
+
flex items-center justify-center
|
|
54
|
+
transition-transform duration-200
|
|
55
|
+
${isActive ? "translate-x-4" : "translate-x-0"}
|
|
56
|
+
`,
|
|
57
|
+
children: /* @__PURE__ */ jsx(
|
|
58
|
+
Icon,
|
|
59
|
+
{
|
|
60
|
+
className: `w-2.5 h-2.5 ${isActive ? textColorClass : inactiveColors?.text ?? "text-muted-foreground"} ${isActive && fillWhenActive ? "fill-current" : ""}`
|
|
61
|
+
}
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
)
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
) });
|
|
68
|
+
return /* @__PURE__ */ jsxs("div", { className: "inline-flex items-center gap-2", children: [
|
|
69
|
+
showLabel && label && /* @__PURE__ */ jsx("span", { className: "font-semibold text-sm text-primary", children: label }),
|
|
70
|
+
tooltipText && showTooltip ? /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
71
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, onFocusCapture: (e) => e.stopPropagation(), children: button }),
|
|
72
|
+
/* @__PURE__ */ jsx(TooltipContent, { children: /* @__PURE__ */ jsx("p", { children: tooltipText }) })
|
|
73
|
+
] }) : button
|
|
74
|
+
] });
|
|
75
|
+
}
|
|
76
|
+
export {
|
|
77
|
+
IconToggle
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=IconToggle.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/ui/IconToggle.tsx"],
|
|
4
|
+
"sourcesContent": ["/**\n * IconToggle Component\n *\n * Base visual toggle button - switch toggle with +/- on hover\n *\n * DO NOT use directly - use a purpose-named wrapper instead (e.g. a\n * ContactToggle, VisibilityToggle, InChatToggle) so each call site reads as\n * what it does, not as a generic switch.\n */\n\nimport { LucideIcon, Plus, Minus } from 'lucide-react'\nimport { Tooltip, TooltipContent, TooltipTrigger } from './tooltip'\n\ninterface ColorClasses {\n text: string\n bg: string\n}\n\nexport interface IconToggleProps {\n icon: LucideIcon\n isActive: boolean\n onToggle: (isActive: boolean) => void\n colors: ColorClasses\n inactiveColors?: ColorClasses\n fillWhenActive?: boolean\n disabled?: boolean\n /** Tooltip to show when disabled (e.g., \"You cannot unshare this resource\") */\n disabledTooltip?: string\n showLabel?: boolean\n label?: string\n tooltipActive?: string\n tooltipInactive?: string\n tooltipMixed?: string\n isMixed?: boolean\n /** Set to false to disable tooltip (useful when nested inside another tooltip) */\n showTooltip?: boolean\n 'data-testid'?: string\n}\n\nexport function IconToggle({\n icon: Icon,\n isActive,\n onToggle,\n colors,\n inactiveColors,\n fillWhenActive = false,\n disabled = false,\n disabledTooltip,\n showLabel = false,\n label,\n tooltipActive,\n tooltipInactive,\n tooltipMixed,\n isMixed = false,\n showTooltip = true,\n 'data-testid': dataTestId,\n}: IconToggleProps) {\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation()\n onToggle(!isActive)\n }\n\n const { bg: bgColorClass } = colors\n\n const tooltipText = disabled\n ? disabledTooltip\n : isMixed\n ? tooltipMixed\n : isActive\n ? tooltipActive\n : tooltipInactive\n\n const { text: textColorClass } = colors\n\n const button = (\n <div className=\"inline-flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={disabled}\n data-testid={dataTestId}\n aria-pressed={isMixed ? 'mixed' : isActive}\n aria-label={label ?? tooltipText}\n className={`\n group/toggle relative inline-flex items-center h-4 w-8 rounded-full\n pointer-coarse:after:absolute pointer-coarse:after:left-1/2 pointer-coarse:after:top-1/2 pointer-coarse:after:size-11 pointer-coarse:after:-translate-x-1/2 pointer-coarse:after:-translate-y-1/2 pointer-coarse:after:content-['']\n transition-colors cursor-pointer\n disabled:opacity-50 disabled:cursor-not-allowed\n ${isActive ? bgColorClass : isMixed ? 'bg-muted-foreground' : (inactiveColors?.bg ?? 'bg-muted')}\n `}\n >\n {/* Hover icon on the opposite side of thumb - hidden when disabled */}\n {isActive && !disabled && (\n <div className=\"absolute left-0 w-4 h-4 flex items-center justify-center\">\n <Minus className=\"w-2.5 h-2.5 text-white/70 hidden group-hover/toggle:block\" />\n </div>\n )}\n {!isActive && !disabled && (\n <div className=\"absolute right-0 w-4 h-4 flex items-center justify-center\">\n <Plus className=\"w-2.5 h-2.5 text-muted-foreground hidden group-hover/toggle:block\" />\n </div>\n )}\n {/* Sliding thumb */}\n <div\n className={`\n absolute h-4 w-4 rounded-full bg-white shadow-sm\n flex items-center justify-center\n transition-transform duration-200\n ${isActive ? 'translate-x-4' : 'translate-x-0'}\n `}\n >\n <Icon\n className={`w-2.5 h-2.5 ${isActive ? textColorClass : (inactiveColors?.text ?? 'text-muted-foreground')} ${isActive && fillWhenActive ? 'fill-current' : ''}`}\n />\n </div>\n </button>\n </div>\n )\n\n return (\n <div className=\"inline-flex items-center gap-2\">\n {showLabel && label && <span className=\"font-semibold text-sm text-primary\">{label}</span>}\n {tooltipText && showTooltip ? (\n <Tooltip>\n <TooltipTrigger asChild onFocusCapture={(e) => e.stopPropagation()}>\n {button}\n </TooltipTrigger>\n <TooltipContent>\n <p>{tooltipText}</p>\n </TooltipContent>\n </Tooltip>\n ) : (\n button\n )}\n </div>\n )\n}\n"],
|
|
5
|
+
"mappings": "AA4EM,SAkBM,KAlBN;AAlEN,SAAqB,MAAM,aAAa;AACxC,SAAS,SAAS,gBAAgB,sBAAsB;AA4BjD,SAAS,WAAW;AAAA,EACzB,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,cAAc;AAAA,EACd,eAAe;AACjB,GAAoB;AAClB,QAAM,cAAc,CAAC,MAAwB;AAC3C,MAAE,gBAAgB;AAClB,aAAS,CAAC,QAAQ;AAAA,EACpB;AAEA,QAAM,EAAE,IAAI,aAAa,IAAI;AAE7B,QAAM,cAAc,WAChB,kBACA,UACE,eACA,WACE,gBACA;AAER,QAAM,EAAE,MAAM,eAAe,IAAI;AAEjC,QAAM,SACJ,oBAAC,SAAI,WAAU,kCACb;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACA,eAAa;AAAA,MACb,gBAAc,UAAU,UAAU;AAAA,MAClC,cAAY,SAAS;AAAA,MACrB,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,YAKP,WAAW,eAAe,UAAU,wBAAyB,gBAAgB,MAAM,UAAW;AAAA;AAAA,MAIjG;AAAA,oBAAY,CAAC,YACZ,oBAAC,SAAI,WAAU,4DACb,8BAAC,SAAM,WAAU,6DAA4D,GAC/E;AAAA,QAED,CAAC,YAAY,CAAC,YACb,oBAAC,SAAI,WAAU,6DACb,8BAAC,QAAK,WAAU,qEAAoE,GACtF;AAAA,QAGF;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA;AAAA;AAAA;AAAA,cAIP,WAAW,kBAAkB,eAAe;AAAA;AAAA,YAGhD;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW,eAAe,WAAW,iBAAkB,gBAAgB,QAAQ,uBAAwB,IAAI,YAAY,iBAAiB,iBAAiB,EAAE;AAAA;AAAA,YAC7J;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EACF,GACF;AAGF,SACE,qBAAC,SAAI,WAAU,kCACZ;AAAA,iBAAa,SAAS,oBAAC,UAAK,WAAU,sCAAsC,iBAAM;AAAA,IAClF,eAAe,cACd,qBAAC,WACC;AAAA,0BAAC,kBAAe,SAAO,MAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAC9D,kBACH;AAAA,MACA,oBAAC,kBACC,8BAAC,OAAG,uBAAY,GAClB;AAAA,OACF,IAEA;AAAA,KAEJ;AAEJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { CheckCircle2 } from "lucide-react";
|
|
3
|
+
import { IconToggle } from "./IconToggle.js";
|
|
4
|
+
const COLORS = {
|
|
5
|
+
text: "text-green-text",
|
|
6
|
+
bg: "bg-green-text"
|
|
7
|
+
};
|
|
8
|
+
function VerifiedToggle({
|
|
9
|
+
verified,
|
|
10
|
+
onToggle,
|
|
11
|
+
disabled = false,
|
|
12
|
+
showLabel = true,
|
|
13
|
+
showTooltip = true,
|
|
14
|
+
tooltipActive,
|
|
15
|
+
tooltipInactive,
|
|
16
|
+
"data-testid": dataTestId
|
|
17
|
+
}) {
|
|
18
|
+
return /* @__PURE__ */ jsx(
|
|
19
|
+
IconToggle,
|
|
20
|
+
{
|
|
21
|
+
icon: CheckCircle2,
|
|
22
|
+
isActive: verified,
|
|
23
|
+
onToggle,
|
|
24
|
+
colors: COLORS,
|
|
25
|
+
disabled,
|
|
26
|
+
showLabel,
|
|
27
|
+
label: "Verified",
|
|
28
|
+
showTooltip,
|
|
29
|
+
tooltipActive: tooltipActive || "Verified by a human \u2014 click to unverify",
|
|
30
|
+
tooltipInactive: tooltipInactive || "Not verified \u2014 click to verify",
|
|
31
|
+
"data-testid": dataTestId
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
export {
|
|
36
|
+
VerifiedToggle
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=VerifiedToggle.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/ui/VerifiedToggle.tsx"],
|
|
4
|
+
"sourcesContent": ["/**\n * VerifiedToggle Component\n *\n * Switch-style toggle for a fact's human-verified (`confirmed`) state \u2014 the\n * same IconToggle affordance the VisibilityToggle uses for sharing, so\n * \"Verified\" reads as a toggle in the facts table rather than a radio/checkbox.\n */\n\nimport { CheckCircle2 } from 'lucide-react'\nimport { IconToggle } from './IconToggle'\n\ninterface VerifiedToggleProps {\n verified: boolean\n /** Called with the desired next state (true = verify, false = unverify). */\n onToggle: (shouldVerify: boolean) => void\n disabled?: boolean\n showLabel?: boolean\n /** Set to false to disable the tooltip (e.g. when nested in another tooltip). */\n showTooltip?: boolean\n tooltipActive?: string\n tooltipInactive?: string\n 'data-testid'?: string\n}\n\nconst COLORS = {\n text: 'text-green-text',\n bg: 'bg-green-text',\n}\n\nexport function VerifiedToggle({\n verified,\n onToggle,\n disabled = false,\n showLabel = true,\n showTooltip = true,\n tooltipActive,\n tooltipInactive,\n 'data-testid': dataTestId,\n}: VerifiedToggleProps) {\n return (\n <IconToggle\n icon={CheckCircle2}\n isActive={verified}\n onToggle={onToggle}\n colors={COLORS}\n disabled={disabled}\n showLabel={showLabel}\n label=\"Verified\"\n showTooltip={showTooltip}\n tooltipActive={tooltipActive || 'Verified by a human \u2014 click to unverify'}\n tooltipInactive={tooltipInactive || 'Not verified \u2014 click to verify'}\n data-testid={dataTestId}\n />\n )\n}\n"],
|
|
5
|
+
"mappings": "AAwCI;AAhCJ,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB;AAe3B,MAAM,SAAS;AAAA,EACb,MAAM;AAAA,EACN,IAAI;AACN;AAEO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA,eAAe;AACjB,GAAwB;AACtB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM;AAAA,MACN,UAAU;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA,OAAM;AAAA,MACN;AAAA,MACA,eAAe,iBAAiB;AAAA,MAChC,iBAAiB,mBAAmB;AAAA,MACpC,eAAa;AAAA;AAAA,EACf;AAEJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|