@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,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/viewers/XlsxViewer.tsx"],
|
|
4
|
+
"sourcesContent": ["/**\n * XlsxViewer\n *\n * Renders spreadsheets natively using SheetJS, showing every sheet with a tab\n * bar. Preserves cell data and multiple sheets.\n *\n * `xlsx` is an OPTIONAL peer dependency, imported dynamically \u2014 a consumer that\n * never renders a spreadsheet does not need it installed. If it is missing the\n * viewer shows a load error rather than crashing the app.\n */\n\nimport { useEffect, useRef, useState } from 'react'\nimport type { WorkSheet } from 'xlsx'\n\nexport interface XlsxViewerProps {\n blob: Blob\n}\n\ntype WorkbookRef = {\n SheetNames: string[]\n Sheets: Record<string, WorkSheet>\n}\n\nexport function XlsxViewer({ blob }: XlsxViewerProps) {\n const [sheets, setSheets] = useState<string[]>([])\n const [activeSheet, setActiveSheet] = useState<string>('')\n const [rows, setRows] = useState<unknown[][]>([])\n const [error, setError] = useState<string | null>(null)\n const [isLoading, setIsLoading] = useState(true)\n const workbookRef = useRef<WorkbookRef | null>(null)\n\n const renderSheet = async (sheetName: string, wb: WorkbookRef) => {\n const XLSX = await import('xlsx')\n const sheet = wb.Sheets[sheetName]\n const data = XLSX.utils.sheet_to_json<unknown[]>(sheet, { header: 1, defval: '' })\n setRows(data)\n setActiveSheet(sheetName)\n }\n\n useEffect(() => {\n let cancelled = false\n\n blob\n .arrayBuffer()\n .then(async (buffer) => {\n if (cancelled) return\n const XLSX = await import('xlsx')\n const wb = XLSX.read(buffer, { type: 'array' }) as WorkbookRef\n workbookRef.current = wb\n const sheetNames = wb.SheetNames\n setSheets(sheetNames)\n const data = XLSX.utils.sheet_to_json<unknown[]>(wb.Sheets[sheetNames[0]], {\n header: 1,\n defval: '',\n })\n if (!cancelled) {\n setRows(data)\n setActiveSheet(sheetNames[0])\n setIsLoading(false)\n }\n })\n .catch((err) => {\n if (!cancelled) {\n console.error('XlsxViewer error:', err)\n setError('Failed to render spreadsheet')\n setIsLoading(false)\n }\n })\n\n return () => {\n cancelled = true\n }\n }, [blob])\n\n const handleSheetChange = (sheetName: string) => {\n if (workbookRef.current) {\n renderSheet(sheetName, workbookRef.current)\n }\n }\n\n if (isLoading) {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <div className=\"text-sm text-muted-foreground\">Loading spreadsheet...</div>\n </div>\n )\n }\n\n if (error) {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <div className=\"text-destructive\">{error}</div>\n </div>\n )\n }\n\n // Find max columns across all rows for consistent table width\n const colCount = rows.reduce((max, row) => Math.max(max, (row as unknown[]).length), 0)\n\n return (\n <div\n className=\"w-full h-full flex flex-col overflow-hidden bg-background\"\n data-testid=\"xlsx-viewer\"\n >\n {/* Sheet tabs */}\n {sheets.length > 0 && (\n <div className=\"flex-shrink-0 flex items-center gap-0.5 px-2 pt-1 border-b bg-muted overflow-x-auto\">\n {sheets.map((sheet) => (\n <button\n key={sheet}\n onClick={() => handleSheetChange(sheet)}\n className={`px-3 py-1 text-sm font-medium whitespace-nowrap rounded-t transition-colors border-x border-t ${\n sheet === activeSheet\n ? 'bg-background text-primary border-border'\n : 'bg-muted text-muted-foreground border-transparent hover:bg-muted hover:text-foreground'\n }`}\n >\n {sheet}\n </button>\n ))}\n </div>\n )}\n\n {/* Spreadsheet table */}\n <div className=\"flex-1 overflow-auto\">\n <table className=\"text-sm border-collapse min-w-full\">\n <tbody>\n {rows.map((row, rowIdx) => (\n <tr\n key={rowIdx}\n className={rowIdx === 0 ? 'bg-muted font-semibold sticky top-0' : 'hover:bg-accent'}\n >\n {/* Row number gutter */}\n <td className=\"border border-border px-1 text-center text-muted-foreground bg-muted select-none w-8 min-w-[2rem]\">\n {rowIdx + 1}\n </td>\n {Array.from({ length: colCount }).map((_, colIdx) => (\n <td\n key={colIdx}\n className=\"border border-border px-2 py-0.5 whitespace-nowrap max-w-[200px] overflow-hidden text-ellipsis\"\n title={String((row as unknown[])[colIdx] ?? '')}\n >\n {String((row as unknown[])[colIdx] ?? '')}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n {rows.length === 0 && (\n <div className=\"flex items-center justify-center p-8 text-sm text-muted-foreground\">\n Empty sheet\n </div>\n )}\n </div>\n </div>\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/viewers/index.js
CHANGED
|
@@ -1,272 +1,62 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
};
|
|
63
|
-
}, [blob]);
|
|
64
|
-
useLayoutEffect(() => {
|
|
65
|
-
const container = containerRef.current;
|
|
66
|
-
if (isLoading || error || !container) return;
|
|
67
|
-
setContentWidth(measureContentWidth(container));
|
|
68
|
-
}, [isLoading, error]);
|
|
69
|
-
const scale = containerWidth > 0 && contentWidth > 0 ? Math.min(1, containerWidth / contentWidth) : 1;
|
|
70
|
-
return /* @__PURE__ */ jsxs("div", { ref: outerRef, className: "w-full h-full overflow-auto bg-muted", "data-testid": "docx-viewer", children: [
|
|
71
|
-
isLoading && /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center h-full", children: /* @__PURE__ */ jsx("div", { className: "text-sm text-muted-foreground", children: "Loading document..." }) }),
|
|
72
|
-
error && /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center h-full", children: /* @__PURE__ */ jsx("div", { className: "text-destructive", children: error }) }),
|
|
73
|
-
/* @__PURE__ */ jsx(
|
|
74
|
-
"div",
|
|
75
|
-
{
|
|
76
|
-
ref: containerRef,
|
|
77
|
-
"data-testid": "docx-viewer-body",
|
|
78
|
-
className: `docx-viewer-body${isLoading || error ? " hidden" : ""}`,
|
|
79
|
-
style: { zoom: scale }
|
|
80
|
-
}
|
|
81
|
-
)
|
|
82
|
-
] });
|
|
83
|
-
}
|
|
84
|
-
function XlsxViewer({ blob }) {
|
|
85
|
-
const [sheets, setSheets] = useState([]);
|
|
86
|
-
const [activeSheet, setActiveSheet] = useState("");
|
|
87
|
-
const [rows, setRows] = useState([]);
|
|
88
|
-
const [error, setError] = useState(null);
|
|
89
|
-
const [isLoading, setIsLoading] = useState(true);
|
|
90
|
-
const workbookRef = useRef(null);
|
|
91
|
-
const renderSheet = async (sheetName, wb) => {
|
|
92
|
-
const XLSX = await import('xlsx');
|
|
93
|
-
const sheet = wb.Sheets[sheetName];
|
|
94
|
-
const data = XLSX.utils.sheet_to_json(sheet, { header: 1, defval: "" });
|
|
95
|
-
setRows(data);
|
|
96
|
-
setActiveSheet(sheetName);
|
|
97
|
-
};
|
|
98
|
-
useEffect(() => {
|
|
99
|
-
let cancelled = false;
|
|
100
|
-
blob.arrayBuffer().then(async (buffer) => {
|
|
101
|
-
if (cancelled) return;
|
|
102
|
-
const XLSX = await import('xlsx');
|
|
103
|
-
const wb = XLSX.read(buffer, { type: "array" });
|
|
104
|
-
workbookRef.current = wb;
|
|
105
|
-
const sheetNames = wb.SheetNames;
|
|
106
|
-
setSheets(sheetNames);
|
|
107
|
-
const data = XLSX.utils.sheet_to_json(wb.Sheets[sheetNames[0]], {
|
|
108
|
-
header: 1,
|
|
109
|
-
defval: ""
|
|
110
|
-
});
|
|
111
|
-
if (!cancelled) {
|
|
112
|
-
setRows(data);
|
|
113
|
-
setActiveSheet(sheetNames[0]);
|
|
114
|
-
setIsLoading(false);
|
|
115
|
-
}
|
|
116
|
-
}).catch((err) => {
|
|
117
|
-
if (!cancelled) {
|
|
118
|
-
console.error("XlsxViewer error:", err);
|
|
119
|
-
setError("Failed to render spreadsheet");
|
|
120
|
-
setIsLoading(false);
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
return () => {
|
|
124
|
-
cancelled = true;
|
|
125
|
-
};
|
|
126
|
-
}, [blob]);
|
|
127
|
-
const handleSheetChange = (sheetName) => {
|
|
128
|
-
if (workbookRef.current) {
|
|
129
|
-
renderSheet(sheetName, workbookRef.current);
|
|
130
|
-
}
|
|
131
|
-
};
|
|
132
|
-
if (isLoading) {
|
|
133
|
-
return /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center h-full", children: /* @__PURE__ */ jsx("div", { className: "text-sm text-muted-foreground", children: "Loading spreadsheet..." }) });
|
|
134
|
-
}
|
|
135
|
-
if (error) {
|
|
136
|
-
return /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center h-full", children: /* @__PURE__ */ jsx("div", { className: "text-destructive", children: error }) });
|
|
137
|
-
}
|
|
138
|
-
const colCount = rows.reduce((max, row) => Math.max(max, row.length), 0);
|
|
139
|
-
return /* @__PURE__ */ jsxs(
|
|
140
|
-
"div",
|
|
141
|
-
{
|
|
142
|
-
className: "w-full h-full flex flex-col overflow-hidden bg-background",
|
|
143
|
-
"data-testid": "xlsx-viewer",
|
|
144
|
-
children: [
|
|
145
|
-
sheets.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex-shrink-0 flex items-center gap-0.5 px-2 pt-1 border-b bg-muted overflow-x-auto", children: sheets.map((sheet) => /* @__PURE__ */ jsx(
|
|
146
|
-
"button",
|
|
147
|
-
{
|
|
148
|
-
onClick: () => handleSheetChange(sheet),
|
|
149
|
-
className: `px-3 py-1 text-sm font-medium whitespace-nowrap rounded-t transition-colors border-x border-t ${sheet === activeSheet ? "bg-background text-primary border-border" : "bg-muted text-muted-foreground border-transparent hover:bg-muted hover:text-foreground"}`,
|
|
150
|
-
children: sheet
|
|
151
|
-
},
|
|
152
|
-
sheet
|
|
153
|
-
)) }),
|
|
154
|
-
/* @__PURE__ */ jsxs("div", { className: "flex-1 overflow-auto", children: [
|
|
155
|
-
/* @__PURE__ */ jsx("table", { className: "text-sm border-collapse min-w-full", children: /* @__PURE__ */ jsx("tbody", { children: rows.map((row, rowIdx) => /* @__PURE__ */ jsxs(
|
|
156
|
-
"tr",
|
|
157
|
-
{
|
|
158
|
-
className: rowIdx === 0 ? "bg-muted font-semibold sticky top-0" : "hover:bg-accent",
|
|
159
|
-
children: [
|
|
160
|
-
/* @__PURE__ */ jsx("td", { className: "border border-border px-1 text-center text-muted-foreground bg-muted select-none w-8 min-w-[2rem]", children: rowIdx + 1 }),
|
|
161
|
-
Array.from({ length: colCount }).map((_, colIdx) => /* @__PURE__ */ jsx(
|
|
162
|
-
"td",
|
|
163
|
-
{
|
|
164
|
-
className: "border border-border px-2 py-0.5 whitespace-nowrap max-w-[200px] overflow-hidden text-ellipsis",
|
|
165
|
-
title: String(row[colIdx] ?? ""),
|
|
166
|
-
children: String(row[colIdx] ?? "")
|
|
167
|
-
},
|
|
168
|
-
colIdx
|
|
169
|
-
))
|
|
170
|
-
]
|
|
171
|
-
},
|
|
172
|
-
rowIdx
|
|
173
|
-
)) }) }),
|
|
174
|
-
rows.length === 0 && /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center p-8 text-sm text-muted-foreground", children: "Empty sheet" })
|
|
175
|
-
] })
|
|
176
|
-
]
|
|
177
|
-
}
|
|
178
|
-
);
|
|
179
|
-
}
|
|
180
|
-
function inlineFootnotes(content, footnotes) {
|
|
181
|
-
if (!footnotes || Object.keys(footnotes).length === 0) return content;
|
|
182
|
-
let result = content;
|
|
183
|
-
result = result.replace(/^\[\^[^\]]+\]:[ \t]+.*(?:\n(?:[ \t]+.+)?)*/gm, "");
|
|
184
|
-
result = result.replace(/\[\^([^\]]+)\]/g, (_match, key) => {
|
|
185
|
-
const fnContent = footnotes[key];
|
|
186
|
-
if (!fnContent) return `<sup class="fn-ref">${key}</sup>`;
|
|
187
|
-
const escaped = fnContent.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
188
|
-
return `<sup class="fn-ref">${key}</sup><span class="fn-inline" title="${escaped}">[${escaped}]</span>`;
|
|
189
|
-
});
|
|
190
|
-
return result.trim();
|
|
191
|
-
}
|
|
192
|
-
function useProcessedChunks(chunks, footnotes) {
|
|
193
|
-
return useMemo(() => {
|
|
194
|
-
if (!chunks || chunks.length === 0) {
|
|
195
|
-
return { processedChunks: [], maxPageNumber: 0 };
|
|
196
|
-
}
|
|
197
|
-
const hasFootnotes = footnotes && Object.keys(footnotes).length > 0;
|
|
198
|
-
const chunksByPage = [];
|
|
199
|
-
let currentPageNumber = -1;
|
|
200
|
-
let currentPageChunks = [];
|
|
201
|
-
let maxPageNumber = 0;
|
|
202
|
-
chunks.forEach((chunk) => {
|
|
203
|
-
const pageNum = chunk.metadata?.page_number;
|
|
204
|
-
if (pageNum && pageNum > maxPageNumber) {
|
|
205
|
-
maxPageNumber = pageNum;
|
|
206
|
-
}
|
|
207
|
-
if (pageNum !== currentPageNumber) {
|
|
208
|
-
if (currentPageChunks.length > 0) {
|
|
209
|
-
chunksByPage.push({
|
|
210
|
-
pageNumber: currentPageNumber > 0 ? currentPageNumber : null,
|
|
211
|
-
chunks: currentPageChunks
|
|
212
|
-
});
|
|
213
|
-
}
|
|
214
|
-
currentPageNumber = pageNum ?? -1;
|
|
215
|
-
currentPageChunks = [];
|
|
216
|
-
}
|
|
217
|
-
currentPageChunks.push({
|
|
218
|
-
content: hasFootnotes ? inlineFootnotes(chunk.content, footnotes) : chunk.content,
|
|
219
|
-
chunkIndex: chunk.metadata?.chunk_doc_idx,
|
|
220
|
-
chunkExtId: chunk.metadata?.chunk_ext_id,
|
|
221
|
-
docTitle: chunk.metadata?.doc_title ?? void 0
|
|
222
|
-
});
|
|
223
|
-
});
|
|
224
|
-
if (currentPageChunks.length > 0) {
|
|
225
|
-
chunksByPage.push({
|
|
226
|
-
pageNumber: currentPageNumber > 0 ? currentPageNumber : null,
|
|
227
|
-
chunks: currentPageChunks
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
return { processedChunks: chunksByPage, maxPageNumber };
|
|
231
|
-
}, [chunks, footnotes]);
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
// src/viewers/selection-runs.ts
|
|
235
|
-
function computeSelectionRuns(pages, selectedChunks) {
|
|
236
|
-
const runs = /* @__PURE__ */ new Map();
|
|
237
|
-
if (selectedChunks.size === 0) return runs;
|
|
238
|
-
const flat = pages.flatMap(
|
|
239
|
-
(page) => page.chunks.map((c) => ({ ...c, pageNumber: page.pageNumber }))
|
|
240
|
-
);
|
|
241
|
-
let i = 0;
|
|
242
|
-
while (i < flat.length) {
|
|
243
|
-
const chunk = flat[i];
|
|
244
|
-
if (!chunk.chunkExtId || !selectedChunks.has(chunk.chunkExtId)) {
|
|
245
|
-
i += 1;
|
|
246
|
-
continue;
|
|
247
|
-
}
|
|
248
|
-
let end = i;
|
|
249
|
-
while (end + 1 < flat.length && flat[end + 1].chunkExtId && selectedChunks.has(flat[end + 1].chunkExtId)) {
|
|
250
|
-
end += 1;
|
|
251
|
-
}
|
|
252
|
-
const last = flat[end];
|
|
253
|
-
const endIndex = last.chunkIndex !== void 0 ? last.chunkIndex + 1 : void 0;
|
|
254
|
-
for (let k = i; k <= end; k += 1) {
|
|
255
|
-
const id = flat[k].chunkExtId;
|
|
256
|
-
if (!id) continue;
|
|
257
|
-
runs.set(id, {
|
|
258
|
-
isStart: k === i,
|
|
259
|
-
isEnd: k === end,
|
|
260
|
-
// Only the run's first member carries the label bounds.
|
|
261
|
-
endIndex: k === i ? endIndex : void 0,
|
|
262
|
-
endPage: k === i ? last.pageNumber : void 0
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
i = end + 1;
|
|
266
|
-
}
|
|
267
|
-
return runs;
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
export { DocxViewer, XlsxViewer, computeSelectionRuns, useProcessedChunks };
|
|
1
|
+
import { PdfViewer, pdfViewerChunk } from "./PdfViewer.js";
|
|
2
|
+
import { installPdfjsPolyfills } from "./pdfjs-polyfills.js";
|
|
3
|
+
import { DocxViewer } from "./DocxViewer.js";
|
|
4
|
+
import { XlsxViewer } from "./XlsxViewer.js";
|
|
5
|
+
import { ImageViewer } from "./ImageViewer.js";
|
|
6
|
+
import { AudioViewer } from "./AudioViewer.js";
|
|
7
|
+
import { VideoViewer } from "./VideoViewer.js";
|
|
8
|
+
import {
|
|
9
|
+
MIN_ZOOM,
|
|
10
|
+
MAX_ZOOM,
|
|
11
|
+
clampZoom,
|
|
12
|
+
cycleZoom,
|
|
13
|
+
doubleTapZoom,
|
|
14
|
+
zoomLabel,
|
|
15
|
+
pinchZoom,
|
|
16
|
+
anchoredScroll,
|
|
17
|
+
renderDpr,
|
|
18
|
+
usePinchZoom
|
|
19
|
+
} from "./viewer-zoom.js";
|
|
20
|
+
import { PAGE_SELECTOR, anchorDelta, useScrollAnchor } from "./page-scroll.js";
|
|
21
|
+
import { usePageIntersectionObserver } from "./usePageIntersectionObserver.js";
|
|
22
|
+
import {
|
|
23
|
+
LAZY_LOAD_BUFFER_BEFORE,
|
|
24
|
+
LAZY_LOAD_BUFFER_AFTER,
|
|
25
|
+
INITIAL_LAZY_LOAD_BUFFER
|
|
26
|
+
} from "./pdf-viewer-constants.js";
|
|
27
|
+
import {
|
|
28
|
+
useProcessedChunks
|
|
29
|
+
} from "./useProcessedChunks.js";
|
|
30
|
+
import {
|
|
31
|
+
computeSelectionRuns
|
|
32
|
+
} from "./selection-runs.js";
|
|
33
|
+
export {
|
|
34
|
+
AudioViewer,
|
|
35
|
+
DocxViewer,
|
|
36
|
+
INITIAL_LAZY_LOAD_BUFFER,
|
|
37
|
+
ImageViewer,
|
|
38
|
+
LAZY_LOAD_BUFFER_AFTER,
|
|
39
|
+
LAZY_LOAD_BUFFER_BEFORE,
|
|
40
|
+
MAX_ZOOM,
|
|
41
|
+
MIN_ZOOM,
|
|
42
|
+
PAGE_SELECTOR,
|
|
43
|
+
PdfViewer,
|
|
44
|
+
VideoViewer,
|
|
45
|
+
XlsxViewer,
|
|
46
|
+
anchorDelta,
|
|
47
|
+
anchoredScroll,
|
|
48
|
+
clampZoom,
|
|
49
|
+
computeSelectionRuns,
|
|
50
|
+
cycleZoom,
|
|
51
|
+
doubleTapZoom,
|
|
52
|
+
installPdfjsPolyfills,
|
|
53
|
+
pdfViewerChunk,
|
|
54
|
+
pinchZoom,
|
|
55
|
+
renderDpr,
|
|
56
|
+
usePageIntersectionObserver,
|
|
57
|
+
usePinchZoom,
|
|
58
|
+
useProcessedChunks,
|
|
59
|
+
useScrollAnchor,
|
|
60
|
+
zoomLabel
|
|
61
|
+
};
|
|
271
62
|
//# sourceMappingURL=index.js.map
|
|
272
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/viewers/DocxViewer.tsx","../../src/viewers/XlsxViewer.tsx","../../src/viewers/useProcessedChunks.ts","../../src/viewers/selection-runs.ts"],"names":["useState","useRef","useEffect","jsx","jsxs"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * DocxViewer\n *\n * Renders DOCX files natively using docx-preview, preserving track changes\n * (shown as strikethrough deletions + inserted text) and inline comments.\n *\n * Pages render at their natural width and are scaled down to fit the\n * container, so the document resizes with the panel instead of clipping.\n *\n * `docx-preview` is an OPTIONAL peer dependency, imported dynamically — a\n * consumer that never renders a .docx does not need it installed. If it is\n * missing the viewer shows a load error rather than crashing the app.\n */\n\nimport { useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nexport interface DocxViewerProps {\n blob: Blob\n}\n\n/** Natural width of the rendered document: widest page plus wrapper padding. */\nfunction measureContentWidth(container: HTMLElement): number {\n let pageWidth = 0\n container.querySelectorAll<HTMLElement>('section.docx').forEach((section) => {\n pageWidth = Math.max(pageWidth, section.offsetWidth)\n })\n if (pageWidth === 0) return 0\n\n const wrapper = container.querySelector<HTMLElement>('.docx-wrapper')\n if (wrapper) {\n const style = window.getComputedStyle(wrapper)\n pageWidth += (parseFloat(style.paddingLeft) || 0) + (parseFloat(style.paddingRight) || 0)\n }\n return pageWidth\n}\n\nexport function DocxViewer({ blob }: DocxViewerProps) {\n const outerRef = useRef<HTMLDivElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n const [error, setError] = useState<string | null>(null)\n const [isLoading, setIsLoading] = useState(true)\n const [containerWidth, setContainerWidth] = useState(0)\n const [contentWidth, setContentWidth] = useState(0)\n\n // Track container width so the document rescales when the panel is resized\n useEffect(() => {\n const outer = outerRef.current\n if (!outer) return\n\n const updateWidth = () => setContainerWidth(outer.clientWidth)\n updateWidth()\n\n const resizeObserver = new ResizeObserver(updateWidth)\n resizeObserver.observe(outer)\n return () => resizeObserver.disconnect()\n }, [])\n\n useEffect(() => {\n const container = containerRef.current\n if (!container) return\n\n let cancelled = false\n\n setIsLoading(true)\n setError(null)\n setContentWidth(0)\n container.innerHTML = ''\n\n import('docx-preview')\n .then(({ renderAsync }) => {\n if (cancelled) return\n return renderAsync(blob, container, undefined, {\n ignoreLastRenderedPageBreak: false,\n })\n })\n .then(() => {\n if (!cancelled) setIsLoading(false)\n })\n .catch((err) => {\n if (!cancelled) {\n console.error('DocxViewer render error:', err)\n setError('Failed to render document')\n setIsLoading(false)\n }\n })\n\n return () => {\n cancelled = true\n }\n }, [blob])\n\n // Measure after the body is unhidden — offsetWidth is 0 while `hidden` (display: none)\n useLayoutEffect(() => {\n const container = containerRef.current\n if (isLoading || error || !container) return\n setContentWidth(measureContentWidth(container))\n }, [isLoading, error])\n\n const scale =\n containerWidth > 0 && contentWidth > 0 ? Math.min(1, containerWidth / contentWidth) : 1\n\n return (\n <div ref={outerRef} className=\"w-full h-full overflow-auto bg-muted\" data-testid=\"docx-viewer\">\n {isLoading && (\n <div className=\"flex items-center justify-center h-full\">\n <div className=\"text-sm text-muted-foreground\">Loading document...</div>\n </div>\n )}\n {error && (\n <div className=\"flex items-center justify-center h-full\">\n <div className=\"text-destructive\">{error}</div>\n </div>\n )}\n <div\n ref={containerRef}\n data-testid=\"docx-viewer-body\"\n className={`docx-viewer-body${isLoading || error ? ' hidden' : ''}`}\n style={{ zoom: scale }}\n />\n </div>\n )\n}\n","/**\n * XlsxViewer\n *\n * Renders spreadsheets natively using SheetJS, showing every sheet with a tab\n * bar. Preserves cell data and multiple sheets.\n *\n * `xlsx` is an OPTIONAL peer dependency, imported dynamically — a consumer that\n * never renders a spreadsheet does not need it installed. If it is missing the\n * viewer shows a load error rather than crashing the app.\n */\n\nimport { useEffect, useRef, useState } from 'react'\nimport type { WorkSheet } from 'xlsx'\n\nexport interface XlsxViewerProps {\n blob: Blob\n}\n\ntype WorkbookRef = {\n SheetNames: string[]\n Sheets: Record<string, WorkSheet>\n}\n\nexport function XlsxViewer({ blob }: XlsxViewerProps) {\n const [sheets, setSheets] = useState<string[]>([])\n const [activeSheet, setActiveSheet] = useState<string>('')\n const [rows, setRows] = useState<unknown[][]>([])\n const [error, setError] = useState<string | null>(null)\n const [isLoading, setIsLoading] = useState(true)\n const workbookRef = useRef<WorkbookRef | null>(null)\n\n const renderSheet = async (sheetName: string, wb: WorkbookRef) => {\n const XLSX = await import('xlsx')\n const sheet = wb.Sheets[sheetName]\n const data = XLSX.utils.sheet_to_json<unknown[]>(sheet, { header: 1, defval: '' })\n setRows(data)\n setActiveSheet(sheetName)\n }\n\n useEffect(() => {\n let cancelled = false\n\n blob\n .arrayBuffer()\n .then(async (buffer) => {\n if (cancelled) return\n const XLSX = await import('xlsx')\n const wb = XLSX.read(buffer, { type: 'array' }) as WorkbookRef\n workbookRef.current = wb\n const sheetNames = wb.SheetNames\n setSheets(sheetNames)\n const data = XLSX.utils.sheet_to_json<unknown[]>(wb.Sheets[sheetNames[0]], {\n header: 1,\n defval: '',\n })\n if (!cancelled) {\n setRows(data)\n setActiveSheet(sheetNames[0])\n setIsLoading(false)\n }\n })\n .catch((err) => {\n if (!cancelled) {\n console.error('XlsxViewer error:', err)\n setError('Failed to render spreadsheet')\n setIsLoading(false)\n }\n })\n\n return () => {\n cancelled = true\n }\n }, [blob])\n\n const handleSheetChange = (sheetName: string) => {\n if (workbookRef.current) {\n renderSheet(sheetName, workbookRef.current)\n }\n }\n\n if (isLoading) {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <div className=\"text-sm text-muted-foreground\">Loading spreadsheet...</div>\n </div>\n )\n }\n\n if (error) {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <div className=\"text-destructive\">{error}</div>\n </div>\n )\n }\n\n // Find max columns across all rows for consistent table width\n const colCount = rows.reduce((max, row) => Math.max(max, (row as unknown[]).length), 0)\n\n return (\n <div\n className=\"w-full h-full flex flex-col overflow-hidden bg-background\"\n data-testid=\"xlsx-viewer\"\n >\n {/* Sheet tabs */}\n {sheets.length > 0 && (\n <div className=\"flex-shrink-0 flex items-center gap-0.5 px-2 pt-1 border-b bg-muted overflow-x-auto\">\n {sheets.map((sheet) => (\n <button\n key={sheet}\n onClick={() => handleSheetChange(sheet)}\n className={`px-3 py-1 text-sm font-medium whitespace-nowrap rounded-t transition-colors border-x border-t ${\n sheet === activeSheet\n ? 'bg-background text-primary border-border'\n : 'bg-muted text-muted-foreground border-transparent hover:bg-muted hover:text-foreground'\n }`}\n >\n {sheet}\n </button>\n ))}\n </div>\n )}\n\n {/* Spreadsheet table */}\n <div className=\"flex-1 overflow-auto\">\n <table className=\"text-sm border-collapse min-w-full\">\n <tbody>\n {rows.map((row, rowIdx) => (\n <tr\n key={rowIdx}\n className={rowIdx === 0 ? 'bg-muted font-semibold sticky top-0' : 'hover:bg-accent'}\n >\n {/* Row number gutter */}\n <td className=\"border border-border px-1 text-center text-muted-foreground bg-muted select-none w-8 min-w-[2rem]\">\n {rowIdx + 1}\n </td>\n {Array.from({ length: colCount }).map((_, colIdx) => (\n <td\n key={colIdx}\n className=\"border border-border px-2 py-0.5 whitespace-nowrap max-w-[200px] overflow-hidden text-ellipsis\"\n title={String((row as unknown[])[colIdx] ?? '')}\n >\n {String((row as unknown[])[colIdx] ?? '')}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n {rows.length === 0 && (\n <div className=\"flex items-center justify-center p-8 text-sm text-muted-foreground\">\n Empty sheet\n </div>\n )}\n </div>\n </div>\n )\n}\n","/**\n * Processed Chunks Hook\n *\n * Processes raw document chunks into page-grouped structure.\n * Pre-computes footnote inlining so it runs once during processing, not on every render.\n */\n\nimport { useMemo } from 'react'\n\nexport interface RawChunk {\n content: string\n metadata?: {\n page_number?: number\n chunk_doc_idx?: number\n chunk_ext_id?: string\n doc_title?: string | null\n }\n}\n\nexport interface ProcessedChunk {\n content: string\n chunkIndex: number | undefined\n chunkExtId: string | undefined\n docTitle: string | undefined\n}\n\nexport interface ProcessedPage {\n pageNumber: number | null\n chunks: ProcessedChunk[]\n}\n\nexport interface UseProcessedChunksResult {\n processedChunks: ProcessedPage[]\n maxPageNumber: number\n}\n\n/**\n * Replace GFM footnote references [^key] with inline footnote content\n * and strip footnote definition blocks from the chunk text.\n * Uses the pre-parsed footnotes map from the backend.\n */\nfunction inlineFootnotes(content: string, footnotes: Record<string, string>): string {\n if (!footnotes || Object.keys(footnotes).length === 0) return content\n\n let result = content\n\n // Strip GFM footnote definition blocks: [^key]: content (and continuation lines)\n result = result.replace(/^\\[\\^[^\\]]+\\]:[ \\t]+.*(?:\\n(?:[ \\t]+.+)?)*/gm, '')\n\n // Replace footnote references [^key] with superscript + inline content\n result = result.replace(/\\[\\^([^\\]]+)\\]/g, (_match, key) => {\n const fnContent = footnotes[key]\n if (!fnContent) return `<sup class=\"fn-ref\">${key}</sup>`\n const escaped = fnContent\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n return `<sup class=\"fn-ref\">${key}</sup><span class=\"fn-inline\" title=\"${escaped}\">[${escaped}]</span>`\n })\n\n return result.trim()\n}\n\nexport function useProcessedChunks(\n chunks: RawChunk[] | undefined,\n footnotes?: Record<string, string>\n): UseProcessedChunksResult {\n return useMemo(() => {\n if (!chunks || chunks.length === 0) {\n return { processedChunks: [], maxPageNumber: 0 }\n }\n\n const hasFootnotes = footnotes && Object.keys(footnotes).length > 0\n const chunksByPage: ProcessedPage[] = []\n let currentPageNumber = -1\n let currentPageChunks: ProcessedChunk[] = []\n let maxPageNumber = 0\n\n chunks.forEach((chunk) => {\n const pageNum = chunk.metadata?.page_number\n\n // Track max page number\n if (pageNum && pageNum > maxPageNumber) {\n maxPageNumber = pageNum\n }\n\n // If page changed, save previous page and start new one\n if (pageNum !== currentPageNumber) {\n if (currentPageChunks.length > 0) {\n chunksByPage.push({\n pageNumber: currentPageNumber > 0 ? currentPageNumber : null,\n chunks: currentPageChunks,\n })\n }\n currentPageNumber = pageNum ?? -1\n currentPageChunks = []\n }\n\n currentPageChunks.push({\n content: hasFootnotes ? inlineFootnotes(chunk.content, footnotes) : chunk.content,\n chunkIndex: chunk.metadata?.chunk_doc_idx,\n chunkExtId: chunk.metadata?.chunk_ext_id,\n docTitle: chunk.metadata?.doc_title ?? undefined,\n })\n })\n\n // Add the last page\n if (currentPageChunks.length > 0) {\n chunksByPage.push({\n pageNumber: currentPageNumber > 0 ? currentPageNumber : null,\n chunks: currentPageChunks,\n })\n }\n\n return { processedChunks: chunksByPage, maxPageNumber }\n }, [chunks, footnotes])\n}\n","/**\n * Contiguous-run grouping for selected passages.\n *\n * Selecting passages 4–9 is one citation, not six. This collapses a flat set of\n * selected chunk ids into the contiguous runs they form in document order, so\n * the viewer can draw each run as a single block with a single \"p.3(4–9)\" label\n * instead of stacking six identical pills.\n *\n * Purely positional: the pages arrive in document order (which is\n * `chunk_doc_idx` order), so adjacency is just \"next in the list\".\n */\n\nexport interface RunChunk {\n chunkExtId: string | undefined\n /** 0-based index within the document; displayed 1-based */\n chunkIndex: number | undefined\n}\n\nexport interface RunPage {\n pageNumber: number | null\n chunks: RunChunk[]\n}\n\n/** Where a selected chunk sits inside its contiguous run of selected chunks. */\nexport interface ChunkRunInfo {\n isStart: boolean\n isEnd: boolean\n /** Set only on the run's first member — the bounds its single label shows. */\n endIndex: number | undefined\n endPage: number | null | undefined\n}\n\nexport function computeSelectionRuns(\n pages: RunPage[],\n selectedChunks: Set<string>\n): Map<string, ChunkRunInfo> {\n const runs = new Map<string, ChunkRunInfo>()\n if (selectedChunks.size === 0) return runs\n\n const flat = pages.flatMap((page) =>\n page.chunks.map((c) => ({ ...c, pageNumber: page.pageNumber }))\n )\n\n let i = 0\n while (i < flat.length) {\n const chunk = flat[i]\n if (!chunk.chunkExtId || !selectedChunks.has(chunk.chunkExtId)) {\n i += 1\n continue\n }\n\n // Walk forward while the neighbours are also selected.\n let end = i\n while (\n end + 1 < flat.length &&\n flat[end + 1].chunkExtId &&\n selectedChunks.has(flat[end + 1].chunkExtId!)\n ) {\n end += 1\n }\n\n const last = flat[end]\n const endIndex = last.chunkIndex !== undefined ? last.chunkIndex + 1 : undefined\n for (let k = i; k <= end; k += 1) {\n const id = flat[k].chunkExtId\n if (!id) continue\n runs.set(id, {\n isStart: k === i,\n isEnd: k === end,\n // Only the run's first member carries the label bounds.\n endIndex: k === i ? endIndex : undefined,\n endPage: k === i ? last.pageNumber : undefined,\n })\n }\n i = end + 1\n }\n\n return runs\n}\n"]}
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/viewers/index.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * `@arbidocs/react/viewers` \u2014 native document rendering.\n *\n * A SEPARATE ENTRY POINT on purpose. These viewers depend on heavyweight\n * rendering libraries (`react-pdf` + `pdfjs-dist`, `xlsx`, `docx-preview`) that\n * are declared as OPTIONAL peer dependencies, so an app that never renders a\n * PDF or a spreadsheet neither installs nor bundles them. Importing from the\n * root `@arbidocs/react` entry gets you none of this weight.\n *\n * Pair these with `DocumentReview` (root entry) \u2014 that renders parsed chunks\n * with AI citation highlighting; these render the original file as it looks.\n */\n\nexport { PdfViewer, pdfViewerChunk, type PdfViewerProps, type PdfViewerAssets } from './PdfViewer'\nexport { installPdfjsPolyfills } from './pdfjs-polyfills'\nexport { DocxViewer, type DocxViewerProps } from './DocxViewer'\nexport { XlsxViewer, type XlsxViewerProps } from './XlsxViewer'\nexport { ImageViewer, type ImageViewerProps } from './ImageViewer'\nexport { AudioViewer, type AudioViewerProps } from './AudioViewer'\nexport { VideoViewer, type VideoViewerProps } from './VideoViewer'\n\nexport {\n MIN_ZOOM,\n MAX_ZOOM,\n clampZoom,\n cycleZoom,\n doubleTapZoom,\n zoomLabel,\n pinchZoom,\n anchoredScroll,\n renderDpr,\n usePinchZoom,\n} from './viewer-zoom'\nexport { PAGE_SELECTOR, anchorDelta, useScrollAnchor } from './page-scroll'\nexport { usePageIntersectionObserver } from './usePageIntersectionObserver'\nexport {\n LAZY_LOAD_BUFFER_BEFORE,\n LAZY_LOAD_BUFFER_AFTER,\n INITIAL_LAZY_LOAD_BUFFER,\n} from './pdf-viewer-constants'\n\n// Parsed-text viewer helpers: chunks grouped by page (footnotes inlined) and selected passages\n// collapsed into contiguous runs.\nexport {\n useProcessedChunks,\n type RawChunk,\n type ProcessedChunk,\n type ProcessedPage,\n type UseProcessedChunksResult,\n} from './useProcessedChunks'\nexport {\n computeSelectionRuns,\n type RunChunk,\n type RunPage,\n type ChunkRunInfo,\n} from './selection-runs'\n"],
|
|
5
|
+
"mappings": "AAaA,SAAS,WAAW,sBAAiE;AACrF,SAAS,6BAA6B;AACtC,SAAS,kBAAwC;AACjD,SAAS,kBAAwC;AACjD,SAAS,mBAA0C;AACnD,SAAS,mBAA0C;AACnD,SAAS,mBAA0C;AAEnD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,eAAe,aAAa,uBAAuB;AAC5D,SAAS,mCAAmC;AAC5C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAIP;AAAA,EACE;AAAA,OAKK;AACP;AAAA,EACE;AAAA,OAIK;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
const PAGE_SELECTOR = '[role="article"][data-page-number]';
|
|
3
|
+
function anchorDelta(previousHeight, nextHeight, pageTop, containerTop) {
|
|
4
|
+
const delta = nextHeight - previousHeight;
|
|
5
|
+
if (delta === 0) return 0;
|
|
6
|
+
return pageTop + previousHeight <= containerTop + 1 ? delta : 0;
|
|
7
|
+
}
|
|
8
|
+
function measureVisiblePages(pages, viewTop, viewBottom) {
|
|
9
|
+
const visibility = /* @__PURE__ */ new Map();
|
|
10
|
+
let page = null;
|
|
11
|
+
let bestPx = 0;
|
|
12
|
+
let score = 0;
|
|
13
|
+
const viewHeight = viewBottom - viewTop;
|
|
14
|
+
for (const p of pages) {
|
|
15
|
+
const height = p.bottom - p.top;
|
|
16
|
+
const px = Math.min(p.bottom, viewBottom) - Math.max(p.top, viewTop);
|
|
17
|
+
if (px <= 0 || height <= 0) continue;
|
|
18
|
+
visibility.set(p.n, px / height);
|
|
19
|
+
if (px > bestPx) {
|
|
20
|
+
bestPx = px;
|
|
21
|
+
page = p.n;
|
|
22
|
+
score = px / Math.min(height, viewHeight);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return { page, score, visibility };
|
|
26
|
+
}
|
|
27
|
+
function useScrollAnchor(containerRef, key) {
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
const container = containerRef.current;
|
|
30
|
+
if (!container || typeof ResizeObserver === "undefined") return;
|
|
31
|
+
container.style.overflowAnchor = "none";
|
|
32
|
+
const heights = /* @__PURE__ */ new Map();
|
|
33
|
+
const observer = new ResizeObserver((entries) => {
|
|
34
|
+
let shift = 0;
|
|
35
|
+
const containerTop = container.getBoundingClientRect().top;
|
|
36
|
+
for (const entry of entries) {
|
|
37
|
+
const el = entry.target;
|
|
38
|
+
const height = el.getBoundingClientRect().height;
|
|
39
|
+
const previous = heights.get(el);
|
|
40
|
+
heights.set(el, height);
|
|
41
|
+
if (previous === void 0) continue;
|
|
42
|
+
shift += anchorDelta(previous, height, el.getBoundingClientRect().top, containerTop);
|
|
43
|
+
}
|
|
44
|
+
if (shift !== 0 && !container.dataset.zooming) container.scrollTop += shift;
|
|
45
|
+
});
|
|
46
|
+
container.querySelectorAll(PAGE_SELECTOR).forEach((el) => {
|
|
47
|
+
heights.set(el, el.getBoundingClientRect().height);
|
|
48
|
+
observer.observe(el);
|
|
49
|
+
});
|
|
50
|
+
return () => observer.disconnect();
|
|
51
|
+
}, [containerRef, key]);
|
|
52
|
+
}
|
|
53
|
+
export {
|
|
54
|
+
PAGE_SELECTOR,
|
|
55
|
+
anchorDelta,
|
|
56
|
+
measureVisiblePages,
|
|
57
|
+
useScrollAnchor
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=page-scroll.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/viewers/page-scroll.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Scroll stability for page-stacked viewers (PDF + parsed/HTML).\n *\n * Pages are lazy: their height can change after the user is already looking at something further\n * down (a placeholder replaced by the real page, a late canvas). Browsers that implement scroll\n * anchoring (Chromium) hide that; Safari/WebKit does not, so the content visibly jumps under the\n * finger and momentum scrolling is cut short. The viewers therefore do their own anchoring, the\n * same way on every engine: native anchoring is switched off and a page that changes height\n * entirely ABOVE the viewport shifts `scrollTop` by exactly that change.\n */\n\nimport { useEffect } from 'react'\nimport type { RefObject } from 'react'\n\n/** One page of a stacked viewer (both viewers mark pages like this). */\nexport const PAGE_SELECTOR = '[role=\"article\"][data-page-number]'\n\n/**\n * How far to move `scrollTop` after a page changed height from `previousHeight` to `nextHeight`.\n * Only a page that lay completely above the visible top edge (`containerTop`) pushes the content\n * the user is reading; anything at or below it just grows or shrinks away from the viewport.\n *\n * @param pageTop viewport-relative top of the page (unchanged by its own resize)\n */\nexport function anchorDelta(\n previousHeight: number,\n nextHeight: number,\n pageTop: number,\n containerTop: number\n): number {\n const delta = nextHeight - previousHeight\n if (delta === 0) return 0\n return pageTop + previousHeight <= containerTop + 1 ? delta : 0\n}\n\nexport interface PageBox {\n n: number\n top: number\n bottom: number\n}\n\n/**\n * Which page is being read: the one showing the most pixels inside [viewTop, viewBottom] (the\n * first on a tie). `score` is those pixels relative to the smaller of the page and the viewport,\n * so a page much taller than the screen can still count as \"mostly visible\". `visibility` maps\n * every page that shows any pixel to its visible fraction (for lazy loading).\n */\nexport function measureVisiblePages(\n pages: readonly PageBox[],\n viewTop: number,\n viewBottom: number\n): { page: number | null; score: number; visibility: Map<number, number> } {\n const visibility = new Map<number, number>()\n let page: number | null = null\n let bestPx = 0\n let score = 0\n const viewHeight = viewBottom - viewTop\n for (const p of pages) {\n const height = p.bottom - p.top\n const px = Math.min(p.bottom, viewBottom) - Math.max(p.top, viewTop)\n if (px <= 0 || height <= 0) continue\n visibility.set(p.n, px / height)\n if (px > bestPx) {\n bestPx = px\n page = p.n\n score = px / Math.min(height, viewHeight)\n }\n }\n return { page, score, visibility }\n}\n\n/**\n * Keep the reading position when pages above it change height. `key` re-scans for pages when the\n * page set changes (page count, first layout).\n */\nexport function useScrollAnchor(containerRef: RefObject<HTMLElement | null>, key: unknown): void {\n useEffect(() => {\n const container = containerRef.current\n if (!container || typeof ResizeObserver === 'undefined') return\n container.style.overflowAnchor = 'none'\n\n const heights = new Map<Element, number>()\n const observer = new ResizeObserver((entries) => {\n let shift = 0\n const containerTop = container.getBoundingClientRect().top\n for (const entry of entries) {\n const el = entry.target\n const height = el.getBoundingClientRect().height\n const previous = heights.get(el)\n heights.set(el, height)\n if (previous === undefined) continue\n shift += anchorDelta(previous, height, el.getBoundingClientRect().top, containerTop)\n }\n // A zoom change re-anchors the scroll position itself (see usePinchZoom).\n if (shift !== 0 && !container.dataset.zooming) container.scrollTop += shift\n })\n container.querySelectorAll(PAGE_SELECTOR).forEach((el) => {\n heights.set(el, el.getBoundingClientRect().height)\n observer.observe(el)\n })\n return () => observer.disconnect()\n }, [containerRef, key])\n}\n"],
|
|
5
|
+
"mappings": "AAWA,SAAS,iBAAiB;AAInB,MAAM,gBAAgB;AAStB,SAAS,YACd,gBACA,YACA,SACA,cACQ;AACR,QAAM,QAAQ,aAAa;AAC3B,MAAI,UAAU,EAAG,QAAO;AACxB,SAAO,UAAU,kBAAkB,eAAe,IAAI,QAAQ;AAChE;AAcO,SAAS,oBACd,OACA,SACA,YACyE;AACzE,QAAM,aAAa,oBAAI,IAAoB;AAC3C,MAAI,OAAsB;AAC1B,MAAI,SAAS;AACb,MAAI,QAAQ;AACZ,QAAM,aAAa,aAAa;AAChC,aAAW,KAAK,OAAO;AACrB,UAAM,SAAS,EAAE,SAAS,EAAE;AAC5B,UAAM,KAAK,KAAK,IAAI,EAAE,QAAQ,UAAU,IAAI,KAAK,IAAI,EAAE,KAAK,OAAO;AACnE,QAAI,MAAM,KAAK,UAAU,EAAG;AAC5B,eAAW,IAAI,EAAE,GAAG,KAAK,MAAM;AAC/B,QAAI,KAAK,QAAQ;AACf,eAAS;AACT,aAAO,EAAE;AACT,cAAQ,KAAK,KAAK,IAAI,QAAQ,UAAU;AAAA,IAC1C;AAAA,EACF;AACA,SAAO,EAAE,MAAM,OAAO,WAAW;AACnC;AAMO,SAAS,gBAAgB,cAA6C,KAAoB;AAC/F,YAAU,MAAM;AACd,UAAM,YAAY,aAAa;AAC/B,QAAI,CAAC,aAAa,OAAO,mBAAmB,YAAa;AACzD,cAAU,MAAM,iBAAiB;AAEjC,UAAM,UAAU,oBAAI,IAAqB;AACzC,UAAM,WAAW,IAAI,eAAe,CAAC,YAAY;AAC/C,UAAI,QAAQ;AACZ,YAAM,eAAe,UAAU,sBAAsB,EAAE;AACvD,iBAAW,SAAS,SAAS;AAC3B,cAAM,KAAK,MAAM;AACjB,cAAM,SAAS,GAAG,sBAAsB,EAAE;AAC1C,cAAM,WAAW,QAAQ,IAAI,EAAE;AAC/B,gBAAQ,IAAI,IAAI,MAAM;AACtB,YAAI,aAAa,OAAW;AAC5B,iBAAS,YAAY,UAAU,QAAQ,GAAG,sBAAsB,EAAE,KAAK,YAAY;AAAA,MACrF;AAEA,UAAI,UAAU,KAAK,CAAC,UAAU,QAAQ,QAAS,WAAU,aAAa;AAAA,IACxE,CAAC;AACD,cAAU,iBAAiB,aAAa,EAAE,QAAQ,CAAC,OAAO;AACxD,cAAQ,IAAI,IAAI,GAAG,sBAAsB,EAAE,MAAM;AACjD,eAAS,QAAQ,EAAE;AAAA,IACrB,CAAC;AACD,WAAO,MAAM,SAAS,WAAW;AAAA,EACnC,GAAG,CAAC,cAAc,GAAG,CAAC;AACxB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
const LAZY_LOAD_BUFFER_BEFORE = 2;
|
|
2
|
+
const LAZY_LOAD_BUFFER_AFTER = 5;
|
|
3
|
+
const INITIAL_LAZY_LOAD_BUFFER = { before: 0, after: 1 };
|
|
4
|
+
export {
|
|
5
|
+
INITIAL_LAZY_LOAD_BUFFER,
|
|
6
|
+
LAZY_LOAD_BUFFER_AFTER,
|
|
7
|
+
LAZY_LOAD_BUFFER_BEFORE
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=pdf-viewer-constants.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/viewers/pdf-viewer-constants.ts"],
|
|
4
|
+
"sourcesContent": ["/** Pages to render before the visible area (canvas pre-load buffer) */\nexport const LAZY_LOAD_BUFFER_BEFORE = 2\n\n/** Pages to render after the visible area (canvas pre-load buffer) */\nexport const LAZY_LOAD_BUFFER_AFTER = 5\n\n/**\n * Smaller render window used on the very first paint so time-to-first-visible-page is\n * fast. Expanded to LAZY_LOAD_BUFFER_BEFORE / LAZY_LOAD_BUFFER_AFTER once the browser\n * is idle (via requestIdleCallback / setTimeout fallback).\n */\nexport const INITIAL_LAZY_LOAD_BUFFER = { before: 0, after: 1 }\n"],
|
|
5
|
+
"mappings": "AACO,MAAM,0BAA0B;AAGhC,MAAM,yBAAyB;AAO/B,MAAM,2BAA2B,EAAE,QAAQ,GAAG,OAAO,EAAE;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
// src/viewers/pdfjs-polyfills.ts
|
|
2
1
|
function define(target, name, value) {
|
|
3
2
|
if (typeof target[name] === "function") return;
|
|
4
3
|
Object.defineProperty(target, name, { value, writable: true, configurable: true });
|
|
5
4
|
}
|
|
6
|
-
|
|
5
|
+
const B64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
7
6
|
function toBase64(options) {
|
|
8
7
|
let out = "";
|
|
9
8
|
for (let i = 0; i < this.length; i += 3) {
|
|
@@ -80,7 +79,7 @@ function installPdfjsPolyfills() {
|
|
|
80
79
|
return new Promise((resolve) => resolve(fn(...args)));
|
|
81
80
|
});
|
|
82
81
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
//# sourceMappingURL=
|
|
82
|
+
export {
|
|
83
|
+
installPdfjsPolyfills
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=pdfjs-polyfills.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/viewers/pdfjs-polyfills.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Shims for the newer JS built-ins pdf.js 6 calls on the main thread, which browsers still in use\n * lack (Chrome 128, for one, has none of the first three):\n *\n * - `Map.prototype.getOrInsertComputed` / `getOrInsert`, and the `WeakMap` pair (Chrome 145).\n * Behind every page render: without it \"this[#t].getOrInsertComputed is not a function\" is\n * thrown and nothing draws.\n * - `Uint8Array.prototype.toHex` / `Uint8Array.fromHex` and `toBase64` / `fromBase64` (Chrome\n * 140): document fingerprints, embedded fonts, signatures.\n * - `Math.sumPrecise` (Chrome 147): float accumulation; missing, layout degrades to NaN.\n * - `Promise.try` (Chrome 128): the worker message handler.\n *\n * {@link installPdfjsPolyfills} is called by every code path here that runs pdf.js (the\n * `PdfViewer`, the browser Freeze rasteriser), so a host never has to load them itself. It is a\n * function rather than a side-effect import because this package is `sideEffects: false`: a\n * bundler may drop a bare import, never a call. Each shim steps aside where the runtime has the\n * real method. The pdf.js worker has its own global scope and gets the same set prepended by\n * `arbidocs-copy-pdf-assets` (@arbidocs/blocks).\n */\n\ntype Upsert = {\n getOrInsert(key: unknown, value: unknown): unknown\n getOrInsertComputed(key: unknown, callback: (key: unknown) => unknown): unknown\n}\n\nfunction define(target: object, name: string, value: unknown): void {\n if (typeof (target as Record<string, unknown>)[name] === 'function') return\n Object.defineProperty(target, name, { value, writable: true, configurable: true })\n}\n\nconst B64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n\nfunction toBase64(\n this: Uint8Array,\n options?: { alphabet?: string; omitPadding?: boolean }\n): string {\n let out = ''\n for (let i = 0; i < this.length; i += 3) {\n const n = (this[i] << 16) | ((this[i + 1] ?? 0) << 8) | (this[i + 2] ?? 0)\n out += B64[(n >> 18) & 63] + B64[(n >> 12) & 63]\n out += i + 1 < this.length ? B64[(n >> 6) & 63] : '='\n out += i + 2 < this.length ? B64[n & 63] : '='\n }\n if (options?.alphabet === 'base64url') out = out.replace(/\\+/g, '-').replace(/\\//g, '_')\n return options?.omitPadding ? out.replace(/=+$/, '') : out\n}\n\nfunction fromBase64(input: string, options?: { alphabet?: string }): Uint8Array {\n let s = input.replace(/[\\t\\n\\f\\r ]+/g, '')\n if (options?.alphabet === 'base64url') s = s.replace(/-/g, '+').replace(/_/g, '/')\n s = s.replace(/=+$/, '')\n if (s.length % 4 === 1 || /[^A-Za-z0-9+/]/.test(s)) {\n throw new SyntaxError('Uint8Array.fromBase64: invalid base64')\n }\n const out = new Uint8Array(Math.floor((s.length * 3) / 4))\n let bits = 0\n let acc = 0\n let j = 0\n for (const ch of s) {\n acc = (acc << 6) | B64.indexOf(ch)\n bits += 6\n if (bits >= 8) {\n bits -= 8\n out[j++] = (acc >> bits) & 0xff\n }\n }\n return out\n}\n\n/** Install the shims pdf.js needs on this thread. Idempotent and cheap: call it before using pdf.js. */\nexport function installPdfjsPolyfills(): void {\n for (const proto of [Map.prototype, WeakMap.prototype]) {\n define(proto, 'getOrInsert', function (\n this: Map<unknown, unknown>,\n key: unknown,\n value: unknown\n ) {\n if (!this.has(key)) this.set(key, value)\n return this.get(key)\n } satisfies Upsert['getOrInsert'])\n define(proto, 'getOrInsertComputed', function (\n this: Map<unknown, unknown>,\n key: unknown,\n callback: (key: unknown) => unknown\n ) {\n if (this.has(key)) return this.get(key)\n const value = callback(key)\n this.set(key, value)\n return value\n } satisfies Upsert['getOrInsertComputed'])\n }\n\n define(Uint8Array.prototype, 'toHex', function (this: Uint8Array): string {\n let out = ''\n for (let i = 0; i < this.length; i++) out += this[i].toString(16).padStart(2, '0')\n return out\n })\n define(Uint8Array, 'fromHex', function (hex: string): Uint8Array {\n if (hex.length % 2 !== 0) throw new SyntaxError('Uint8Array.fromHex: odd-length string')\n const out = new Uint8Array(hex.length / 2)\n for (let i = 0; i < out.length; i++) {\n const pair = hex.slice(i * 2, i * 2 + 2)\n if (!/^[0-9a-fA-F]{2}$/.test(pair)) throw new SyntaxError('Uint8Array.fromHex: non-hex digit')\n out[i] = parseInt(pair, 16)\n }\n return out\n })\n define(Uint8Array.prototype, 'toBase64', toBase64)\n define(Uint8Array, 'fromBase64', fromBase64)\n\n // Neumaier's compensated sum: within pdf.js's render tolerance of the spec's exact rounding.\n define(Math, 'sumPrecise', function (values: Iterable<number>): number {\n let sum = 0\n let c = 0\n for (const v of values) {\n const t = sum + v\n c += Math.abs(sum) >= Math.abs(v) ? sum - t + v : v - t + sum\n sum = t\n }\n return sum + c\n })\n\n define(Promise, 'try', function <T>(fn: (...args: unknown[]) => T, ...args: unknown[]) {\n return new Promise<T>((resolve) => resolve(fn(...args)))\n })\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
function computeSelectionRuns(pages, selectedChunks) {
|
|
2
|
+
const runs = /* @__PURE__ */ new Map();
|
|
3
|
+
if (selectedChunks.size === 0) return runs;
|
|
4
|
+
const flat = pages.flatMap(
|
|
5
|
+
(page) => page.chunks.map((c) => ({ ...c, pageNumber: page.pageNumber }))
|
|
6
|
+
);
|
|
7
|
+
let i = 0;
|
|
8
|
+
while (i < flat.length) {
|
|
9
|
+
const chunk = flat[i];
|
|
10
|
+
if (!chunk.chunkExtId || !selectedChunks.has(chunk.chunkExtId)) {
|
|
11
|
+
i += 1;
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
let end = i;
|
|
15
|
+
while (end + 1 < flat.length && flat[end + 1].chunkExtId && selectedChunks.has(flat[end + 1].chunkExtId)) {
|
|
16
|
+
end += 1;
|
|
17
|
+
}
|
|
18
|
+
const last = flat[end];
|
|
19
|
+
const endIndex = last.chunkIndex !== void 0 ? last.chunkIndex + 1 : void 0;
|
|
20
|
+
for (let k = i; k <= end; k += 1) {
|
|
21
|
+
const id = flat[k].chunkExtId;
|
|
22
|
+
if (!id) continue;
|
|
23
|
+
runs.set(id, {
|
|
24
|
+
isStart: k === i,
|
|
25
|
+
isEnd: k === end,
|
|
26
|
+
// Only the run's first member carries the label bounds.
|
|
27
|
+
endIndex: k === i ? endIndex : void 0,
|
|
28
|
+
endPage: k === i ? last.pageNumber : void 0
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
i = end + 1;
|
|
32
|
+
}
|
|
33
|
+
return runs;
|
|
34
|
+
}
|
|
35
|
+
export {
|
|
36
|
+
computeSelectionRuns
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=selection-runs.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/viewers/selection-runs.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Contiguous-run grouping for selected passages.\n *\n * Selecting passages 4\u20139 is one citation, not six. This collapses a flat set of\n * selected chunk ids into the contiguous runs they form in document order, so\n * the viewer can draw each run as a single block with a single \"p.3(4\u20139)\" label\n * instead of stacking six identical pills.\n *\n * Purely positional: the pages arrive in document order (which is\n * `chunk_doc_idx` order), so adjacency is just \"next in the list\".\n */\n\nexport interface RunChunk {\n chunkExtId: string | undefined\n /** 0-based index within the document; displayed 1-based */\n chunkIndex: number | undefined\n}\n\nexport interface RunPage {\n pageNumber: number | null\n chunks: RunChunk[]\n}\n\n/** Where a selected chunk sits inside its contiguous run of selected chunks. */\nexport interface ChunkRunInfo {\n isStart: boolean\n isEnd: boolean\n /** Set only on the run's first member \u2014 the bounds its single label shows. */\n endIndex: number | undefined\n endPage: number | null | undefined\n}\n\nexport function computeSelectionRuns(\n pages: RunPage[],\n selectedChunks: Set<string>\n): Map<string, ChunkRunInfo> {\n const runs = new Map<string, ChunkRunInfo>()\n if (selectedChunks.size === 0) return runs\n\n const flat = pages.flatMap((page) =>\n page.chunks.map((c) => ({ ...c, pageNumber: page.pageNumber }))\n )\n\n let i = 0\n while (i < flat.length) {\n const chunk = flat[i]\n if (!chunk.chunkExtId || !selectedChunks.has(chunk.chunkExtId)) {\n i += 1\n continue\n }\n\n // Walk forward while the neighbours are also selected.\n let end = i\n while (\n end + 1 < flat.length &&\n flat[end + 1].chunkExtId &&\n selectedChunks.has(flat[end + 1].chunkExtId!)\n ) {\n end += 1\n }\n\n const last = flat[end]\n const endIndex = last.chunkIndex !== undefined ? last.chunkIndex + 1 : undefined\n for (let k = i; k <= end; k += 1) {\n const id = flat[k].chunkExtId\n if (!id) continue\n runs.set(id, {\n isStart: k === i,\n isEnd: k === end,\n // Only the run's first member carries the label bounds.\n endIndex: k === i ? endIndex : undefined,\n endPage: k === i ? last.pageNumber : undefined,\n })\n }\n i = end + 1\n }\n\n return runs\n}\n"],
|
|
5
|
+
"mappings": "AAgCO,SAAS,qBACd,OACA,gBAC2B;AAC3B,QAAM,OAAO,oBAAI,IAA0B;AAC3C,MAAI,eAAe,SAAS,EAAG,QAAO;AAEtC,QAAM,OAAO,MAAM;AAAA,IAAQ,CAAC,SAC1B,KAAK,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,YAAY,KAAK,WAAW,EAAE;AAAA,EAChE;AAEA,MAAI,IAAI;AACR,SAAO,IAAI,KAAK,QAAQ;AACtB,UAAM,QAAQ,KAAK,CAAC;AACpB,QAAI,CAAC,MAAM,cAAc,CAAC,eAAe,IAAI,MAAM,UAAU,GAAG;AAC9D,WAAK;AACL;AAAA,IACF;AAGA,QAAI,MAAM;AACV,WACE,MAAM,IAAI,KAAK,UACf,KAAK,MAAM,CAAC,EAAE,cACd,eAAe,IAAI,KAAK,MAAM,CAAC,EAAE,UAAW,GAC5C;AACA,aAAO;AAAA,IACT;AAEA,UAAM,OAAO,KAAK,GAAG;AACrB,UAAM,WAAW,KAAK,eAAe,SAAY,KAAK,aAAa,IAAI;AACvE,aAAS,IAAI,GAAG,KAAK,KAAK,KAAK,GAAG;AAChC,YAAM,KAAK,KAAK,CAAC,EAAE;AACnB,UAAI,CAAC,GAAI;AACT,WAAK,IAAI,IAAI;AAAA,QACX,SAAS,MAAM;AAAA,QACf,OAAO,MAAM;AAAA;AAAA,QAEb,UAAU,MAAM,IAAI,WAAW;AAAA,QAC/B,SAAS,MAAM,IAAI,KAAK,aAAa;AAAA,MACvC,CAAC;AAAA,IACH;AACA,QAAI,MAAM;AAAA,EACZ;AAEA,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|