@arbidocs/blocks 0.5.124 → 0.5.126
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/{ClippingMediaViewer-ZFEX5A3U.cjs → ClippingMediaViewer-47BAXNLO.cjs} +10 -11
- package/dist/ClippingMediaViewer-47BAXNLO.cjs.map +1 -0
- package/dist/{ClippingPdfViewer-3LRTEPHV.cjs → ClippingPdfViewer-D5BYHEAH.cjs} +16 -14
- package/dist/ClippingPdfViewer-D5BYHEAH.cjs.map +1 -0
- package/dist/{ConnectedCallDock-XJOYVVAH.cjs → ConnectedCallDock-733O5M36.cjs} +5 -5
- package/dist/{ConnectedCallDock-XJOYVVAH.cjs.map → ConnectedCallDock-733O5M36.cjs.map} +1 -1
- package/dist/{ConnectedCallRoom-CUDYAPQK.cjs → ConnectedCallRoom-TAUGSRGV.cjs} +5 -5
- package/dist/{ConnectedCallRoom-CUDYAPQK.cjs.map → ConnectedCallRoom-TAUGSRGV.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-QKHCYD6W.cjs → ConnectedNativeDocxComparison-HDE522YC.cjs} +9 -9
- package/dist/{ConnectedNativeDocxComparison-QKHCYD6W.cjs.map → ConnectedNativeDocxComparison-HDE522YC.cjs.map} +1 -1
- package/dist/{ConnectedPresentation-OV2KBOLK.cjs → ConnectedPresentation-SI3L77J4.cjs} +33 -34
- package/dist/ConnectedPresentation-SI3L77J4.cjs.map +1 -0
- package/dist/{ConnectedSlidesTab-LUAGZ6FD.cjs → ConnectedSlidesTab-JSPU6EY5.cjs} +37 -43
- package/dist/ConnectedSlidesTab-JSPU6EY5.cjs.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-AG62232A.cjs → ConnectedStreamedWordArtifact-4FHPOAFZ.cjs} +9 -9
- package/dist/{ConnectedStreamedWordArtifact-AG62232A.cjs.map → ConnectedStreamedWordArtifact-4FHPOAFZ.cjs.map} +1 -1
- package/dist/{DocumentReviewCard-M53XFLI2.cjs → DocumentReviewCard-BDNXP3D4.cjs} +4 -4
- package/dist/{DocumentReviewCard-M53XFLI2.cjs.map → DocumentReviewCard-BDNXP3D4.cjs.map} +1 -1
- package/dist/{FilesViewerDialog-JWKNJLWG.cjs → FilesViewerDialog-WQRNSKWM.cjs} +10 -11
- package/dist/FilesViewerDialog-WQRNSKWM.cjs.map +1 -0
- package/dist/{NativeDocxEditor-2LQY2CTV.cjs → NativeDocxEditor-SUDULUN3.cjs} +6 -6
- package/dist/{NativeDocxEditor-2LQY2CTV.cjs.map → NativeDocxEditor-SUDULUN3.cjs.map} +1 -1
- package/dist/{SpotlightStrip-ED22UYTM.cjs → SpotlightStrip-QQ2WUI32.cjs} +28 -29
- package/dist/SpotlightStrip-QQ2WUI32.cjs.map +1 -0
- package/dist/WorkspaceTableView-3XYAV4BV.cjs +1 -1
- package/dist/agents/index.cjs +1 -1
- package/dist/ai-IEIR7SC2.cjs +1 -1
- package/dist/calls/index.cjs +2 -2
- package/dist/{chunk-ZZZITHGK.cjs → chunk-26SFI2BH.cjs} +16 -3
- package/dist/chunk-26SFI2BH.cjs.map +1 -0
- package/dist/{chunk-NG2EE7HR.cjs → chunk-463QM764.cjs} +3 -3
- package/dist/{chunk-NG2EE7HR.cjs.map → chunk-463QM764.cjs.map} +1 -1
- package/dist/{chunk-XGM4VVNV.cjs → chunk-4KEQ62SL.cjs} +6 -6
- package/dist/{chunk-XGM4VVNV.cjs.map → chunk-4KEQ62SL.cjs.map} +1 -1
- package/dist/{chunk-YGBHY67W.cjs → chunk-6B4CCDDB.cjs} +5 -5
- package/dist/{chunk-YGBHY67W.cjs.map → chunk-6B4CCDDB.cjs.map} +1 -1
- package/dist/{chunk-JY7UUZQG.cjs → chunk-7Q46YAX4.cjs} +74 -71
- package/dist/chunk-7Q46YAX4.cjs.map +1 -0
- package/dist/{chunk-3ZZZO4F7.cjs → chunk-BY3QA3S5.cjs} +9 -9
- package/dist/{chunk-3ZZZO4F7.cjs.map → chunk-BY3QA3S5.cjs.map} +1 -1
- package/dist/{chunk-VKH3BEZE.cjs → chunk-CMPHJRVV.cjs} +3 -3
- package/dist/{chunk-VKH3BEZE.cjs.map → chunk-CMPHJRVV.cjs.map} +1 -1
- package/dist/{chunk-BX6G2ZCI.cjs → chunk-FB3JXSQT.cjs} +71 -43
- package/dist/chunk-FB3JXSQT.cjs.map +1 -0
- package/dist/{chunk-EMRY62HS.cjs → chunk-FGOJBOZX.cjs} +4 -4
- package/dist/{chunk-EMRY62HS.cjs.map → chunk-FGOJBOZX.cjs.map} +1 -1
- package/dist/{chunk-V6MW7B4B.cjs → chunk-I4X72WUT.cjs} +6 -6
- package/dist/{chunk-V6MW7B4B.cjs.map → chunk-I4X72WUT.cjs.map} +1 -1
- package/dist/{chunk-ORNLCBNE.cjs → chunk-JVEDKKNO.cjs} +43 -4
- package/dist/chunk-JVEDKKNO.cjs.map +1 -0
- package/dist/{chunk-7557LDAN.cjs → chunk-LOB2ATS5.cjs} +23 -10
- package/dist/chunk-LOB2ATS5.cjs.map +1 -0
- package/dist/{chunk-MXBXZXXQ.cjs → chunk-LXM5QXII.cjs} +3 -3
- package/dist/{chunk-MXBXZXXQ.cjs.map → chunk-LXM5QXII.cjs.map} +1 -1
- package/dist/chunk-OALQGO5C.cjs +18 -0
- package/dist/{chunk-SDRYSLOX.cjs.map → chunk-OALQGO5C.cjs.map} +1 -1
- package/dist/{chunk-2CSLFAGF.cjs → chunk-Q6N5D3R5.cjs} +34 -8
- package/dist/chunk-Q6N5D3R5.cjs.map +1 -0
- package/dist/{chunk-MVXHTAJ4.cjs → chunk-QWVUBTW3.cjs} +9 -9
- package/dist/{chunk-MVXHTAJ4.cjs.map → chunk-QWVUBTW3.cjs.map} +1 -1
- package/dist/{chunk-ADPRIBSH.cjs → chunk-X7ALF4MP.cjs} +7 -7
- package/dist/{chunk-ADPRIBSH.cjs.map → chunk-X7ALF4MP.cjs.map} +1 -1
- package/dist/{chunk-COD5ENHK.cjs → chunk-XNB27POJ.cjs} +4 -4
- package/dist/{chunk-COD5ENHK.cjs.map → chunk-XNB27POJ.cjs.map} +1 -1
- package/dist/{chunk-H236SNEV.cjs → chunk-ZCU72Q76.cjs} +191 -165
- package/dist/chunk-ZCU72Q76.cjs.map +1 -0
- package/dist/connect/docx.cjs +13 -13
- package/dist/connect/index.cjs +198 -163
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/viewer.cjs +8 -9
- package/dist/connection/ai.d.ts +1 -0
- package/dist/connection/docx/ConnectedNativeDocxEditor.js +4 -5
- package/dist/connection/docx/ConnectedNativeDocxEditor.js.map +2 -2
- package/dist/connection/docx/save-native-version.d.ts +3 -0
- package/dist/connection/docx/save-native-version.js +19 -0
- package/dist/connection/docx/save-native-version.js.map +7 -0
- package/dist/connection/presentation/ClippingPdfViewer.js +8 -5
- package/dist/connection/presentation/ClippingPdfViewer.js.map +2 -2
- package/dist/connection/presentation/ConnectedSlidesTab.js +8 -13
- package/dist/connection/presentation/ConnectedSlidesTab.js.map +2 -2
- package/dist/connection/presentation/usePresentationController.js +24 -15
- package/dist/connection/presentation/usePresentationController.js.map +2 -2
- package/dist/connection/presentation/usePresentationFiles.d.ts +2 -1
- package/dist/connection/presentation/usePresentationFiles.js +15 -6
- package/dist/connection/presentation/usePresentationFiles.js.map +2 -2
- package/dist/connection/search/ConnectedSearchPage.d.ts +0 -11
- package/dist/connection/search/ConnectedSearchPage.js +3 -0
- package/dist/connection/search/ConnectedSearchPage.js.map +2 -2
- package/dist/connection/search/SearchResultRows.js +75 -43
- package/dist/connection/search/SearchResultRows.js.map +2 -2
- package/dist/connection/viewer/CleanViewControl.d.ts +3 -1
- package/dist/connection/viewer/CleanViewControl.js +5 -1
- package/dist/connection/viewer/CleanViewControl.js.map +2 -2
- package/dist/connection/viewer/ConnectedDocumentViewer.js +1 -1
- package/dist/connection/viewer/ConnectedDocumentViewer.js.map +2 -2
- package/dist/connection/viewer/VersionDropdown.js +1 -1
- package/dist/connection/viewer/VersionDropdown.js.map +1 -1
- package/dist/connection/viewer/ViewerPdfPane.js +2 -0
- package/dist/connection/viewer/ViewerPdfPane.js.map +2 -2
- package/dist/connection/viewer/pdf/usePassageTextFallback.d.ts +12 -0
- package/dist/connection/viewer/pdf/usePassageTextFallback.js +30 -0
- package/dist/connection/viewer/pdf/usePassageTextFallback.js.map +7 -0
- package/dist/connection/viewer/pdf/usePdfPassageHighlights.js +2 -11
- package/dist/connection/viewer/pdf/usePdfPassageHighlights.js.map +2 -2
- package/dist/connection/viewer/useCleanView.d.ts +1 -1
- package/dist/connection/viewer/useCleanView.js +2 -2
- package/dist/connection/viewer/useCleanView.js.map +2 -2
- package/dist/connection/viewer/useViewedDocument.d.ts +1 -0
- package/dist/connection/viewer/useViewerTabs.js +13 -1
- package/dist/connection/viewer/useViewerTabs.js.map +2 -2
- package/dist/docx/DocxCommandMenu.js +2 -1
- package/dist/docx/DocxCommandMenu.js.map +2 -2
- package/dist/docx/NativeDocxEditor.d.ts +2 -1
- package/dist/docx/NativeDocxEditor.js +30 -5
- package/dist/docx/NativeDocxEditor.js.map +2 -2
- package/dist/docx/index.cjs +38 -38
- package/dist/embed/index.cjs +2 -2
- package/dist/facts/index.cjs +43 -43
- package/dist/index.cjs +73 -73
- package/dist/presentation/ClipCaptureOverlay.js +14 -1
- package/dist/presentation/ClipCaptureOverlay.js.map +2 -2
- package/dist/presentation/ClipImage.js +7 -4
- package/dist/presentation/ClipImage.js.map +2 -2
- package/dist/presentation/ClipTray.js +11 -7
- package/dist/presentation/ClipTray.js.map +2 -2
- package/dist/presentation/SlidesEditor.js +6 -2
- package/dist/presentation/SlidesEditor.js.map +2 -2
- package/dist/presentation/store.d.ts +2 -0
- package/dist/presentation/store.js +15 -0
- package/dist/presentation/store.js.map +3 -3
- package/dist/settings/index.cjs +1 -1
- package/dist/studio/index.cjs +1 -1
- package/dist/styles.css +1 -1
- package/dist/workflow-canvas/index.cjs +12 -12
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ClippingMediaViewer-ZFEX5A3U.cjs.map +0 -1
- package/dist/ClippingPdfViewer-3LRTEPHV.cjs.map +0 -1
- package/dist/ConnectedPresentation-OV2KBOLK.cjs.map +0 -1
- package/dist/ConnectedSlidesTab-LUAGZ6FD.cjs.map +0 -1
- package/dist/FilesViewerDialog-JWKNJLWG.cjs.map +0 -1
- package/dist/SpotlightStrip-ED22UYTM.cjs.map +0 -1
- package/dist/chunk-2CSLFAGF.cjs.map +0 -1
- package/dist/chunk-7557LDAN.cjs.map +0 -1
- package/dist/chunk-BX6G2ZCI.cjs.map +0 -1
- package/dist/chunk-GFUOCGY6.cjs +0 -32
- package/dist/chunk-GFUOCGY6.cjs.map +0 -1
- package/dist/chunk-H236SNEV.cjs.map +0 -1
- package/dist/chunk-JY7UUZQG.cjs.map +0 -1
- package/dist/chunk-ORNLCBNE.cjs.map +0 -1
- package/dist/chunk-SDRYSLOX.cjs +0 -18
- package/dist/chunk-ZZZITHGK.cjs.map +0 -1
|
@@ -5,15 +5,14 @@ var chunkVWBYE3XY_cjs = require('./chunk-VWBYE3XY.cjs');
|
|
|
5
5
|
require('./chunk-XF355M7O.cjs');
|
|
6
6
|
require('./chunk-2F57IO7S.cjs');
|
|
7
7
|
require('./chunk-UFT22LAB.cjs');
|
|
8
|
-
var
|
|
8
|
+
var chunkFB3JXSQT_cjs = require('./chunk-FB3JXSQT.cjs');
|
|
9
9
|
require('./chunk-JITYC4OS.cjs');
|
|
10
10
|
require('./chunk-WVZLAAIZ.cjs');
|
|
11
|
-
require('./chunk-
|
|
12
|
-
require('./chunk-ADPRIBSH.cjs');
|
|
13
|
-
require('./chunk-ORNLCBNE.cjs');
|
|
11
|
+
require('./chunk-X7ALF4MP.cjs');
|
|
14
12
|
require('./chunk-4CIVQWAX.cjs');
|
|
15
13
|
require('./chunk-PL7HUTM3.cjs');
|
|
16
|
-
require('./chunk-
|
|
14
|
+
require('./chunk-QWVUBTW3.cjs');
|
|
15
|
+
require('./chunk-JVEDKKNO.cjs');
|
|
17
16
|
require('./chunk-ADDQKZ5I.cjs');
|
|
18
17
|
require('./chunk-KXIRVKCJ.cjs');
|
|
19
18
|
require('./chunk-5QERK4PK.cjs');
|
|
@@ -22,7 +21,7 @@ require('./chunk-HYUKPHCT.cjs');
|
|
|
22
21
|
require('./chunk-ALK3PUUB.cjs');
|
|
23
22
|
require('./chunk-223D4727.cjs');
|
|
24
23
|
require('./chunk-SNUBQMIS.cjs');
|
|
25
|
-
require('./chunk-
|
|
24
|
+
require('./chunk-LOB2ATS5.cjs');
|
|
26
25
|
require('./chunk-4ONPEVTP.cjs');
|
|
27
26
|
require('./chunk-V3KLUWQQ.cjs');
|
|
28
27
|
require('./chunk-P5AQYC4D.cjs');
|
|
@@ -49,7 +48,7 @@ require('./chunk-SK6HQ46Q.cjs');
|
|
|
49
48
|
require('./chunk-MNIQDXM6.cjs');
|
|
50
49
|
require('./chunk-E3Y7RI3J.cjs');
|
|
51
50
|
require('./chunk-TG2GM7WJ.cjs');
|
|
52
|
-
require('./chunk-
|
|
51
|
+
require('./chunk-CMPHJRVV.cjs');
|
|
53
52
|
require('./chunk-OEJQFPWO.cjs');
|
|
54
53
|
require('./chunk-7JLJH5CW.cjs');
|
|
55
54
|
require('./chunk-EVZH6Z5O.cjs');
|
|
@@ -71,12 +70,12 @@ require('./chunk-VG24E4JJ.cjs');
|
|
|
71
70
|
require('./chunk-U2FFG2B3.cjs');
|
|
72
71
|
require('./chunk-KKYNTWDU.cjs');
|
|
73
72
|
require('./chunk-M74FWYNL.cjs');
|
|
74
|
-
require('./chunk-VZOOGA47.cjs');
|
|
75
73
|
require('./chunk-HQDR43JC.cjs');
|
|
76
74
|
var chunkJR2YSBD5_cjs = require('./chunk-JR2YSBD5.cjs');
|
|
77
75
|
require('./chunk-3YZKDCWY.cjs');
|
|
78
76
|
require('./chunk-SJSGSHIT.cjs');
|
|
79
77
|
require('./chunk-ZW6FPIFC.cjs');
|
|
78
|
+
require('./chunk-VZOOGA47.cjs');
|
|
80
79
|
require('./chunk-5F4DCIHS.cjs');
|
|
81
80
|
require('./chunk-CT3SLXB7.cjs');
|
|
82
81
|
require('./chunk-DEXUL3T6.cjs');
|
|
@@ -234,11 +233,11 @@ function FilesViewerDialog({ artifactRuntimeUrl, ...props }) {
|
|
|
234
233
|
DocumentViewerDialog,
|
|
235
234
|
{
|
|
236
235
|
...props,
|
|
237
|
-
renderDocument: (id) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
236
|
+
renderDocument: (id) => /* @__PURE__ */ jsxRuntime.jsx(chunkFB3JXSQT_cjs.ConnectedDocumentViewer, { documentId: id, artifactRuntimeUrl })
|
|
238
237
|
}
|
|
239
238
|
);
|
|
240
239
|
}
|
|
241
240
|
|
|
242
241
|
exports.FilesViewerDialog = FilesViewerDialog;
|
|
243
|
-
//# sourceMappingURL=FilesViewerDialog-
|
|
244
|
-
//# sourceMappingURL=FilesViewerDialog-
|
|
242
|
+
//# sourceMappingURL=FilesViewerDialog-WQRNSKWM.cjs.map
|
|
243
|
+
//# sourceMappingURL=FilesViewerDialog-WQRNSKWM.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/connection/viewer/DocumentViewerDialog.tsx","../src/connection/files/page/FilesViewerDialog.tsx"],"names":["jsx","Eye","PenLine","MessageSquareText","DEFAULT_DOCUMENT_VIEWER_TABS","DEFAULT_ASK_SUGGESTIONS","DEFAULT_DOCUMENT_VIEWER_LABELS","useConnectedWorkspace","useArbiSessionStore","useBlocksEnvironment","useArbiSessionState","useDocuments","parseVersionRef","tab","useState","question","useRef","useSlashField","Dialog","jsxs","DialogContent","DialogHeader","DialogTitle","FileText","DialogDescription","SegmentedControl","ErrorBoundary","DocumentReview","AskBar","ConnectedDocumentViewer"],"mappings":"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","file":"FilesViewerDialog-WQRNSKWM.cjs","sourcesContent":["/**\n * The document viewer as a dialog (the files page's own viewer): a title, the tabs\n * the host offers, and under them the review (`DocumentReview`), the whole viewer, or a question\n * (`AskBar`) that starts a thread about the document. Views of existing parts, not a new viewer.\n *\n * A draft started with Create New (the session's `draftDocuments`) has no server record yet: it\n * shows the whole viewer only (its kind, name and recorder), titled from the draft.\n */\n\nimport { useRef, useState, type ReactNode } from 'react'\nimport { Eye, FileText, MessageSquareText, PenLine } from 'lucide-react'\nimport {\n DocumentReview,\n useArbiSessionState,\n useArbiSessionStore,\n useDocuments,\n type WorkspaceDocument,\n} from '@arbidocs/react'\nimport { parseVersionRef } from '@arbidocs/react/artifacts'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '@arbidocs/react/ui'\nimport { AskBar } from '../../components/AskBar'\nimport { ErrorBoundary } from '../../components/ErrorBoundary'\nimport { SegmentedControl, type SegmentedOption } from '../../settings/SegmentedControl'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { useConnectedWorkspace } from '../ConnectionProvider'\nimport { useSlashField } from '../ask/useSlashField'\nimport {\n DEFAULT_ASK_SUGGESTIONS,\n DEFAULT_DOCUMENT_VIEWER_LABELS,\n DEFAULT_DOCUMENT_VIEWER_TABS,\n type DocumentViewerDialogLabels,\n type DocumentViewerTab,\n} from './documentViewerTabs'\n\ntype ReviewDocument = Parameters<typeof DocumentReview>[0]['doc']\n\nexport interface DocumentViewerDialogProps {\n /** The document, or a version reference `doc-…@v{n}`. */\n documentId: string\n /** The views offered, in order. Default: review, document, ask. */\n tabs?: readonly DocumentViewerTab[]\n /** The view it opens on. Default: the first offered. */\n initialTab?: DocumentViewerTab\n labels?: DocumentViewerDialogLabels\n /** The ask view's suggested questions. */\n askSuggestions?: readonly string[]\n onClose: () => void\n /** The whole viewer, for the document view. */\n renderDocument: (documentId: string) => ReactNode\n}\n\nconst titleOf = (doc: WorkspaceDocument | undefined) =>\n doc?.doc_metadata?.title || doc?.file_name || 'Document'\n\nconst TAB_ICONS: Record<DocumentViewerTab, ReactNode> = {\n review: <Eye className=\"size-4\" />,\n document: <PenLine className=\"size-4\" />,\n ask: <MessageSquareText className=\"size-4\" />,\n}\n\nconst TAB_TEST_IDS: Record<DocumentViewerTab, string> = {\n review: 'review-tab-review',\n document: 'review-tab-pdf',\n ask: 'review-tab-qa',\n}\n\nexport function DocumentViewerDialog({\n documentId,\n tabs = DEFAULT_DOCUMENT_VIEWER_TABS,\n initialTab,\n labels: labelOverrides,\n askSuggestions = DEFAULT_ASK_SUGGESTIONS,\n onClose,\n renderDocument,\n}: DocumentViewerDialogProps) {\n const labels = { ...DEFAULT_DOCUMENT_VIEWER_LABELS, ...labelOverrides }\n const { workspaceId, live } = useConnectedWorkspace()\n const session = useArbiSessionStore()\n const { openNewConversation } = useBlocksEnvironment()\n const passageId = useArbiSessionState((s) => s.viewingDocument?.passageId ?? null)\n const draft = useArbiSessionState((s) => s.draftDocuments[documentId])\n const { data: documents } = useDocuments()\n const baseId = parseVersionRef(documentId).docId\n const doc = documents?.find((d) => d.external_id === baseId)\n const title = draft?.title || titleOf(doc)\n\n // The whole viewer needs a signed-in session (marking up, signing, versions). A draft is only\n // on the client: there is nothing to review or ask about until it is saved.\n const offered: readonly DocumentViewerTab[] = draft\n ? ['document']\n : tabs.filter((tab) => tab !== 'document' || live)\n const [chosen, setChosen] = useState<DocumentViewerTab | undefined>(initialTab)\n const tab = chosen && offered.includes(chosen) ? chosen : offered[0]\n\n const options: SegmentedOption<DocumentViewerTab>[] = offered.map((value) => ({\n value,\n label: labels[value],\n icon: TAB_ICONS[value],\n testId: TAB_TEST_IDS[value],\n }))\n\n // A question opens a new thread about the document, as the viewer's \"Chat\" does.\n const ask = (question: string) => {\n openNewConversation({ prompt: question })\n session.setNewChatDocumentId(baseId)\n }\n // The `/` menu: a skill's run is asked the same way, so its thread is about this document too.\n const [question, setQuestion] = useState('')\n const askInputRef = useRef<HTMLInputElement>(null)\n const slash = useSlashField({\n text: question,\n setText: setQuestion,\n inputRef: askInputRef,\n landing: 'chat',\n send: ask,\n })\n\n return (\n <Dialog open onOpenChange={(open) => !open && onClose()}>\n <DialogContent\n className=\"flex h-[90vh] max-w-[95vw] flex-col gap-0 p-0 sm:max-w-[95vw]\"\n data-testid=\"documents-dialog\"\n >\n <DialogHeader className=\"border-b px-4 py-3\">\n <DialogTitle className=\"flex min-w-0 items-center gap-2 pr-8 text-base\">\n <FileText className=\"size-4 shrink-0\" />\n <span className=\"truncate\" data-testid=\"documents-dialog-title\">\n {title}\n </span>\n </DialogTitle>\n <DialogDescription className=\"sr-only\">\n {offered.map((value) => labels[value]).join(', ')}: {title}\n </DialogDescription>\n {options.length > 1 && tab && (\n <SegmentedControl\n ariaLabel=\"Document view\"\n // A phone fits the three on one row: no label breaks over two lines.\n className=\"mt-2 w-fit max-w-full overflow-x-auto [&_button]:whitespace-nowrap max-sm:[&_button]:px-2.5\"\n value={tab}\n onChange={setChosen}\n options={options}\n />\n )}\n </DialogHeader>\n <div className=\"min-h-0 flex-1 overflow-hidden p-3\">\n {/* A view that fails to render says so here: the dialog and the page under it stay. */}\n <ErrorBoundary\n resetKey={`${documentId}|${tab}`}\n labels={{ title: \"This document couldn't be displayed\" }}\n testId=\"documents-dialog-error\"\n >\n {tab === 'review' && (\n <DocumentReview\n docId={baseId}\n doc={doc as ReviewDocument}\n workspaceId={workspaceId ?? undefined}\n activeChunkId={passageId}\n />\n )}\n {tab === 'document' && (\n <div className=\"h-full overflow-hidden\" data-testid=\"documents-dialog-viewer\">\n {renderDocument(documentId)}\n </div>\n )}\n {tab === 'ask' && (\n <div className=\"mx-auto max-w-2xl space-y-3 pt-6\" data-testid=\"doc-qa-panel\">\n <p className=\"text-sm text-muted-foreground\">{labels.askIntro}</p>\n {slash.launcher}\n <AskBar\n testId=\"doc-ask\"\n placeholder={labels.askPlaceholder.replace('{title}', title)}\n suggestions={[...askSuggestions]}\n onAsk={(text) => {\n if (!slash.startsSkill(text)) ask(text)\n }}\n value={question}\n onValueChange={setQuestion}\n onInputKeyDown={slash.onKeyDown}\n inputProps={slash.comboboxProps}\n inputRef={askInputRef}\n menu={slash.menu}\n />\n </div>\n )}\n </ErrorBoundary>\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n","/**\n * The files page's own viewer (a page without a host viewer): `DocumentViewerDialog`, with the\n * whole `ConnectedDocumentViewer` as its document view. The page lazy-loads this module, so the\n * viewer stays out of the page's chunk.\n */\nimport { ConnectedDocumentViewer } from '../../viewer/ConnectedDocumentViewer'\nimport {\n DocumentViewerDialog,\n type DocumentViewerDialogProps,\n} from '../../viewer/DocumentViewerDialog'\n\nexport interface FilesViewerDialogProps extends Omit<DocumentViewerDialogProps, 'renderDocument'> {\n /** Where html/react artifacts load their sandbox runtime from. */\n artifactRuntimeUrl?: string\n}\n\nexport function FilesViewerDialog({ artifactRuntimeUrl, ...props }: FilesViewerDialogProps) {\n return (\n <DocumentViewerDialog\n {...props}\n renderDocument={(id) => (\n <ConnectedDocumentViewer documentId={id} artifactRuntimeUrl={artifactRuntimeUrl} />\n )}\n />\n )\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkQ6N5D3R5_cjs = require('./chunk-Q6N5D3R5.cjs');
|
|
5
5
|
require('./chunk-GA5ZO4YA.cjs');
|
|
6
6
|
require('./chunk-VG5XNE4H.cjs');
|
|
7
7
|
require('./chunk-DDWLMYRO.cjs');
|
|
@@ -17,19 +17,19 @@ require('./chunk-PLIF5CUV.cjs');
|
|
|
17
17
|
|
|
18
18
|
Object.defineProperty(exports, "DocxParticipants", {
|
|
19
19
|
enumerable: true,
|
|
20
|
-
get: function () { return
|
|
20
|
+
get: function () { return chunkQ6N5D3R5_cjs.DocxParticipants; }
|
|
21
21
|
});
|
|
22
22
|
Object.defineProperty(exports, "DocxRibbon", {
|
|
23
23
|
enumerable: true,
|
|
24
|
-
get: function () { return
|
|
24
|
+
get: function () { return chunkQ6N5D3R5_cjs.DocxRibbon; }
|
|
25
25
|
});
|
|
26
26
|
Object.defineProperty(exports, "NativeDocxEditor", {
|
|
27
27
|
enumerable: true,
|
|
28
|
-
get: function () { return
|
|
28
|
+
get: function () { return chunkQ6N5D3R5_cjs.NativeDocxEditor; }
|
|
29
29
|
});
|
|
30
30
|
Object.defineProperty(exports, "contentPath", {
|
|
31
31
|
enumerable: true,
|
|
32
32
|
get: function () { return chunkV3KLUWQQ_cjs.contentPath; }
|
|
33
33
|
});
|
|
34
|
-
//# sourceMappingURL=NativeDocxEditor-
|
|
35
|
-
//# sourceMappingURL=NativeDocxEditor-
|
|
34
|
+
//# sourceMappingURL=NativeDocxEditor-SUDULUN3.cjs.map
|
|
35
|
+
//# sourceMappingURL=NativeDocxEditor-SUDULUN3.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"NativeDocxEditor-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"NativeDocxEditor-SUDULUN3.cjs"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
var
|
|
4
|
+
var chunkBY3QA3S5_cjs = require('./chunk-BY3QA3S5.cjs');
|
|
5
|
+
var chunk7Q46YAX4_cjs = require('./chunk-7Q46YAX4.cjs');
|
|
6
6
|
require('./chunk-WOOOMTTA.cjs');
|
|
7
7
|
require('./chunk-5GCCUXMT.cjs');
|
|
8
|
-
|
|
9
|
-
require('./chunk-
|
|
10
|
-
var
|
|
11
|
-
require('./chunk-GFUOCGY6.cjs');
|
|
8
|
+
require('./chunk-X7ALF4MP.cjs');
|
|
9
|
+
var chunkQWVUBTW3_cjs = require('./chunk-QWVUBTW3.cjs');
|
|
10
|
+
var chunkJVEDKKNO_cjs = require('./chunk-JVEDKKNO.cjs');
|
|
12
11
|
var chunkVZOOGA47_cjs = require('./chunk-VZOOGA47.cjs');
|
|
13
12
|
var react = require('react');
|
|
14
13
|
var lucideReact = require('lucide-react');
|
|
@@ -20,16 +19,16 @@ var SPOTLIGHT_MS = 300;
|
|
|
20
19
|
var EASING = "cubic-bezier(0.2, 0, 0, 1)";
|
|
21
20
|
var prefersReducedMotion = (view) => !!view?.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
|
|
22
21
|
function SpotlightView({ fromRect }) {
|
|
23
|
-
const clips =
|
|
24
|
-
const note =
|
|
25
|
-
const step =
|
|
26
|
-
const captions =
|
|
27
|
-
const theme =
|
|
28
|
-
const steps = react.useMemo(() =>
|
|
22
|
+
const clips = chunkQWVUBTW3_cjs.useSpotlight((s) => s.clips);
|
|
23
|
+
const note = chunkQWVUBTW3_cjs.useSpotlight((s) => s.note);
|
|
24
|
+
const step = chunkQWVUBTW3_cjs.useSpotlight((s) => s.step);
|
|
25
|
+
const captions = chunkJVEDKKNO_cjs.usePresentation((s) => s.captions);
|
|
26
|
+
const theme = chunkJVEDKKNO_cjs.usePresentation((s) => s.theme);
|
|
27
|
+
const steps = react.useMemo(() => chunkQWVUBTW3_cjs.spotlightSteps(clips), [clips]);
|
|
29
28
|
const ids = steps[step] ?? [];
|
|
30
29
|
const stepKey = ids.join();
|
|
31
30
|
const slide = react.useMemo(
|
|
32
|
-
() =>
|
|
31
|
+
() => chunkQWVUBTW3_cjs.spotlightSlide(clips, ids, note, { captions, theme }),
|
|
33
32
|
// `ids` is new each render; its key says when it changed.
|
|
34
33
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
35
34
|
[clips, stepKey, note, captions, theme]
|
|
@@ -41,7 +40,7 @@ function SpotlightView({ fromRect }) {
|
|
|
41
40
|
root.current = node;
|
|
42
41
|
if (node) setView(node.ownerDocument.defaultView);
|
|
43
42
|
}, []);
|
|
44
|
-
const active =
|
|
43
|
+
const active = chunkBY3QA3S5_cjs.usePointerActive(view);
|
|
45
44
|
const [kept, setKept] = react.useState(null);
|
|
46
45
|
const last = react.useRef(/* @__PURE__ */ new Map());
|
|
47
46
|
const fromRectRef = react.useRef(fromRect);
|
|
@@ -53,7 +52,7 @@ function SpotlightView({ fromRect }) {
|
|
|
53
52
|
const next = /* @__PURE__ */ new Map();
|
|
54
53
|
for (const id of stepKey.split(",").filter(Boolean)) {
|
|
55
54
|
const element = node.querySelector(`[data-testid="stage-item-${id}"]`);
|
|
56
|
-
const clip =
|
|
55
|
+
const clip = chunkQWVUBTW3_cjs.useSpotlight.getState().clips.find((entry) => entry.id === id);
|
|
57
56
|
if (!element || !clip) continue;
|
|
58
57
|
const to = element.getBoundingClientRect();
|
|
59
58
|
next.set(id, to);
|
|
@@ -86,7 +85,7 @@ function SpotlightView({ fromRect }) {
|
|
|
86
85
|
if (event.metaKey || event.ctrlKey || event.altKey) return;
|
|
87
86
|
const target = event.target;
|
|
88
87
|
if (target?.closest?.('input, textarea, select, [contenteditable="true"]')) return;
|
|
89
|
-
const state =
|
|
88
|
+
const state = chunkQWVUBTW3_cjs.useSpotlight.getState();
|
|
90
89
|
if (event.key === "Escape") state.hide();
|
|
91
90
|
else if (event.key === "ArrowRight" || event.key === "PageDown") state.goTo(state.step + 1);
|
|
92
91
|
else if (event.key === "ArrowLeft" || event.key === "PageUp") state.goTo(state.step - 1);
|
|
@@ -97,7 +96,7 @@ function SpotlightView({ fromRect }) {
|
|
|
97
96
|
view.addEventListener("keydown", onKeyDown, true);
|
|
98
97
|
return () => view.removeEventListener("keydown", onKeyDown, true);
|
|
99
98
|
}, [view]);
|
|
100
|
-
const actions =
|
|
99
|
+
const actions = chunkQWVUBTW3_cjs.useSpotlight.getState();
|
|
101
100
|
const isKept = kept === `${stepKey}|${note}`;
|
|
102
101
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
103
102
|
"div",
|
|
@@ -110,7 +109,7 @@ function SpotlightView({ fromRect }) {
|
|
|
110
109
|
"data-testid": "spotlight",
|
|
111
110
|
children: [
|
|
112
111
|
/* @__PURE__ */ jsxRuntime.jsx("div", { ref: backdrop, className: "absolute inset-0 bg-black/85" }),
|
|
113
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 p-4 pb-16", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
112
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 p-4 pb-16", children: /* @__PURE__ */ jsxRuntime.jsx(chunk7Q46YAX4_cjs.PresentationStage, { show, className: "bg-transparent" }) }),
|
|
114
113
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
115
114
|
"div",
|
|
116
115
|
{
|
|
@@ -123,7 +122,7 @@ function SpotlightView({ fromRect }) {
|
|
|
123
122
|
"data-testid": "spotlight-controls",
|
|
124
123
|
children: [
|
|
125
124
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
126
|
-
|
|
125
|
+
chunkBY3QA3S5_cjs.Control,
|
|
127
126
|
{
|
|
128
127
|
label: "Previous (\u2190)",
|
|
129
128
|
onClick: () => actions.goTo(step - 1),
|
|
@@ -145,7 +144,7 @@ function SpotlightView({ fromRect }) {
|
|
|
145
144
|
}
|
|
146
145
|
),
|
|
147
146
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
148
|
-
|
|
147
|
+
chunkBY3QA3S5_cjs.Control,
|
|
149
148
|
{
|
|
150
149
|
label: "Next (\u2192)",
|
|
151
150
|
onClick: () => actions.goTo(step + 1),
|
|
@@ -173,7 +172,7 @@ function SpotlightView({ fromRect }) {
|
|
|
173
172
|
]
|
|
174
173
|
}
|
|
175
174
|
),
|
|
176
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
175
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkBY3QA3S5_cjs.Control, { label: "Back to the document (Esc)", onClick: actions.hide, testId: "spotlight-close", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "size-4" }) })
|
|
177
176
|
]
|
|
178
177
|
}
|
|
179
178
|
)
|
|
@@ -220,10 +219,10 @@ function useDocumentSwitcher(clips) {
|
|
|
220
219
|
return { groups, open };
|
|
221
220
|
}
|
|
222
221
|
function SpotlightStrip() {
|
|
223
|
-
const clips =
|
|
224
|
-
const note =
|
|
225
|
-
const showing =
|
|
226
|
-
const actions =
|
|
222
|
+
const clips = chunkQWVUBTW3_cjs.useSpotlight((s) => s.clips);
|
|
223
|
+
const note = chunkQWVUBTW3_cjs.useSpotlight((s) => s.note);
|
|
224
|
+
const showing = chunkQWVUBTW3_cjs.useSpotlight((s) => s.showing);
|
|
225
|
+
const actions = chunkQWVUBTW3_cjs.useSpotlight.getState();
|
|
227
226
|
const switcher = useDocumentSwitcher(clips);
|
|
228
227
|
const [noteOpen, setNoteOpen] = react.useState(false);
|
|
229
228
|
const strip = react.useRef(null);
|
|
@@ -238,7 +237,7 @@ function SpotlightStrip() {
|
|
|
238
237
|
if (event.metaKey || event.ctrlKey || event.altKey || isTyping(event.target)) return;
|
|
239
238
|
if (event.key !== "s" && event.key !== "S") return;
|
|
240
239
|
event.preventDefault();
|
|
241
|
-
|
|
240
|
+
chunkQWVUBTW3_cjs.useSpotlight.getState().show();
|
|
242
241
|
};
|
|
243
242
|
view.addEventListener("keydown", onKeyDown);
|
|
244
243
|
return () => view.removeEventListener("keydown", onKeyDown);
|
|
@@ -287,7 +286,7 @@ function SpotlightStrip() {
|
|
|
287
286
|
"data-spotlight-clip": clip.id,
|
|
288
287
|
"data-testid": `spotlight-chip-${index}`,
|
|
289
288
|
children: [
|
|
290
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
289
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk7Q46YAX4_cjs.ClipImage, { clip, className: "h-full w-full" }),
|
|
291
290
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
292
291
|
"button",
|
|
293
292
|
{
|
|
@@ -394,5 +393,5 @@ function SpotlightStrip() {
|
|
|
394
393
|
}
|
|
395
394
|
|
|
396
395
|
exports.SpotlightStrip = SpotlightStrip;
|
|
397
|
-
//# sourceMappingURL=SpotlightStrip-
|
|
398
|
-
//# sourceMappingURL=SpotlightStrip-
|
|
396
|
+
//# sourceMappingURL=SpotlightStrip-QQ2WUI32.cjs.map
|
|
397
|
+
//# sourceMappingURL=SpotlightStrip-QQ2WUI32.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/presentation/SpotlightView.tsx","../src/connection/presentation/SpotlightStrip.tsx"],"names":["useSpotlight","usePresentation","useMemo","spotlightSteps","spotlightSlide","useState","useRef","useCallback","usePointerActive","useLayoutEffect","useEffect","jsxs","jsx","PresentationStage","cn","Control","ChevronLeft","ChevronRight","Check","Presentation","X","useArbiSessionStore","useDocuments","getDocumentTitle","Fragment","ClipImage","Popover","PopoverTrigger","Button","StickyNote","PopoverContent","Input","DocumentPicker","DropdownMenu","DropdownMenuTrigger","MoreHorizontal","DropdownMenuContent","DropdownMenuItem","Inbox","Eraser"],"mappings":"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","file":"SpotlightStrip-QQ2WUI32.cjs","sourcesContent":["/**\n * The spotlight on screen: the document dims and the gathered clips fly from where they are on\n * their pages into a slide over it, in the same window (a call sharing it goes on sharing it). It is\n * the presentation's own stage (`PresentationStage`), so it looks as a slide of the deck would.\n *\n * ← → step through the clips together and each alone, Esc goes back to the document. Each move is\n * a FLIP: a clip is drawn where it ends and animated from where it was (its page, or its place on\n * the previous step) by a transform, about 300 ms; with reduced motion it simply appears.\n */\n\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { Check, ChevronLeft, ChevronRight, Presentation, X } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport type { Clip } from './model'\nimport { Control } from './PresentControls'\nimport { PresentationStage } from './PresentationStage'\nimport { spotlightSlide, spotlightSteps, useSpotlight } from './spotlight'\nimport { usePresentation } from './store'\nimport { usePointerActive } from './usePointerActive'\n\n/** How long a clip takes to fly into place. */\nexport const SPOTLIGHT_MS = 300\nconst EASING = 'cubic-bezier(0.2, 0, 0, 1)'\n\n/** A box on screen, in CSS pixels. */\nexport type ScreenRect = Pick<DOMRect, 'left' | 'top' | 'width' | 'height'>\n\nexport interface SpotlightViewProps {\n /** Where a clip is on screen before the spotlight (its passage on the page), if it shows. */\n fromRect: (clip: Clip) => ScreenRect | null\n}\n\nconst prefersReducedMotion = (view: Window | null) =>\n !!view?.matchMedia?.('(prefers-reduced-motion: reduce)').matches\n\nexport function SpotlightView({ fromRect }: SpotlightViewProps) {\n const clips = useSpotlight((s) => s.clips)\n const note = useSpotlight((s) => s.note)\n const step = useSpotlight((s) => s.step)\n const captions = usePresentation((s) => s.captions)\n const theme = usePresentation((s) => s.theme)\n const steps = useMemo(() => spotlightSteps(clips), [clips])\n const ids = steps[step] ?? []\n const stepKey = ids.join()\n const slide = useMemo(\n () => spotlightSlide(clips, ids, note, { captions, theme }),\n // `ids` is new each render; its key says when it changed.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [clips, stepKey, note, captions, theme]\n )\n const show = useMemo(() => ({ slide, clips }), [slide, clips])\n\n const [view, setView] = useState<Window | null>(null)\n const root = useRef<HTMLDivElement | null>(null)\n const rootRef = useCallback((node: HTMLDivElement | null) => {\n root.current = node\n if (node) setView(node.ownerDocument.defaultView)\n }, [])\n const active = usePointerActive(view)\n const [kept, setKept] = useState<string | null>(null)\n\n // FLIP: each clip from where it was (on its page, or on the step before) to where it is now.\n const last = useRef(new Map<string, ScreenRect>())\n const fromRectRef = useRef(fromRect)\n fromRectRef.current = fromRect\n useLayoutEffect(() => {\n const node = root.current\n if (!node) return\n const reduce = prefersReducedMotion(node.ownerDocument.defaultView)\n const next = new Map<string, ScreenRect>()\n for (const id of stepKey.split(',').filter(Boolean)) {\n const element = node.querySelector<HTMLElement>(`[data-testid=\"stage-item-${id}\"]`)\n const clip = useSpotlight.getState().clips.find((entry) => entry.id === id)\n if (!element || !clip) continue\n const to = element.getBoundingClientRect()\n next.set(id, to)\n const from = last.current.get(id) ?? fromRectRef.current(clip)\n if (reduce || !from || !to.width || !to.height || typeof element.animate !== 'function') {\n continue\n }\n element.animate(\n [\n {\n transform: `translate(${from.left - to.left}px, ${from.top - to.top}px) scale(${\n from.width / to.width\n }, ${from.height / to.height})`,\n },\n { transform: 'none' },\n ],\n { duration: SPOTLIGHT_MS, easing: EASING }\n )\n }\n last.current = next\n }, [stepKey])\n\n // The document dims as the clips arrive.\n const backdrop = useRef<HTMLDivElement>(null)\n useLayoutEffect(() => {\n const element = backdrop.current\n if (!element || typeof element.animate !== 'function') return\n if (prefersReducedMotion(element.ownerDocument.defaultView)) return\n element.animate([{ opacity: 0 }, { opacity: 1 }], { duration: SPOTLIGHT_MS, easing: EASING })\n }, [])\n\n // Esc back to the document, ← → through the steps; taken before the viewer's own keys.\n useEffect(() => {\n if (!view) return\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.metaKey || event.ctrlKey || event.altKey) return\n const target = event.target as HTMLElement | null\n if (target?.closest?.('input, textarea, select, [contenteditable=\"true\"]')) return\n const state = useSpotlight.getState()\n if (event.key === 'Escape') state.hide()\n else if (event.key === 'ArrowRight' || event.key === 'PageDown') state.goTo(state.step + 1)\n else if (event.key === 'ArrowLeft' || event.key === 'PageUp') state.goTo(state.step - 1)\n else return\n event.preventDefault()\n event.stopPropagation()\n }\n view.addEventListener('keydown', onKeyDown, true)\n return () => view.removeEventListener('keydown', onKeyDown, true)\n }, [view])\n\n const actions = useSpotlight.getState()\n const isKept = kept === `${stepKey}|${note}`\n return (\n <div\n ref={rootRef}\n className=\"absolute inset-0 z-30 select-none\"\n style={{ cursor: active ? 'default' : 'none' }}\n role=\"dialog\"\n aria-label=\"Spotlight\"\n data-testid=\"spotlight\"\n >\n <div ref={backdrop} className=\"absolute inset-0 bg-black/85\" />\n <div className=\"absolute inset-0 p-4 pb-16\">\n <PresentationStage show={show} className=\"bg-transparent\" />\n </div>\n <div\n className={cn(\n 'absolute bottom-3 left-1/2 z-10 flex -translate-x-1/2 items-center gap-0.5 rounded-full bg-black/60 p-1 text-white shadow-lg backdrop-blur transition-opacity duration-300',\n active ? 'opacity-100' : 'pointer-events-none opacity-0'\n )}\n role=\"toolbar\"\n aria-label=\"Spotlight\"\n data-testid=\"spotlight-controls\"\n >\n <Control\n label=\"Previous (←)\"\n onClick={() => actions.goTo(step - 1)}\n disabled={step === 0}\n testId=\"spotlight-previous\"\n >\n <ChevronLeft className=\"size-4\" />\n </Control>\n <span\n className=\"min-w-12 text-center text-xs tabular-nums text-white/85\"\n data-testid=\"spotlight-position\"\n >\n {step + 1} / {steps.length}\n </span>\n <Control\n label=\"Next (→)\"\n onClick={() => actions.goTo(step + 1)}\n disabled={step >= steps.length - 1}\n testId=\"spotlight-next\"\n >\n <ChevronRight className=\"size-4\" />\n </Control>\n <div className=\"mx-1 h-4 w-px bg-white/25\" />\n <button\n type=\"button\"\n className=\"inline-flex h-8 items-center gap-1.5 whitespace-nowrap rounded-full px-3 text-xs text-white/85 hover:bg-white/15 hover:text-white disabled:opacity-60 disabled:hover:bg-transparent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/60 pointer-coarse:h-11\"\n disabled={isKept}\n onClick={() => {\n actions.keep()\n setKept(`${stepKey}|${note}`)\n }}\n title=\"Add this as a slide of the open presentation\"\n data-testid=\"spotlight-keep\"\n >\n {isKept ? <Check className=\"size-3.5\" /> : <Presentation className=\"size-3.5\" />}\n {isKept ? 'Kept as slide' : 'Keep as slide'}\n </button>\n <Control label=\"Back to the document (Esc)\" onClick={actions.hide} testId=\"spotlight-close\">\n <X className=\"size-4\" />\n </Control>\n </div>\n </div>\n )\n}\n","/**\n * The clips gathered in the viewer, in a small strip over the document: each clip (× takes it\n * out), a note to show as the spotlight's title, another document to clip from, and Show (or S),\n * which puts them in the spotlight over this same viewer. Rarer actions — keep them as a slide,\n * add them to the presentation's tray, clear them — are in its \"…\" menu.\n *\n * The strip and the spotlight stay over whichever document the viewer shows, so clips are gathered\n * from several documents in a row. Esc brings the document back where it was scrolled to.\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { Eraser, MoreHorizontal, Inbox, Presentation, StickyNote, X } from 'lucide-react'\nimport { useArbiSessionStore, useDocuments } from '@arbidocs/react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n Input,\n Popover,\n PopoverContent,\n PopoverTrigger,\n cn,\n getDocumentTitle,\n} from '@arbidocs/react/ui'\nimport { ClipImage } from '../../presentation/ClipImage'\nimport type { Clip } from '../../presentation/model'\nimport { SpotlightView, type ScreenRect } from '../../presentation/SpotlightView'\nimport { useSpotlight } from '../../presentation/spotlight'\nimport { DocumentPicker, type PickerGroup } from '../../settings/DocumentPicker'\n\n/** The viewer this strip is over (its frame), found from the strip's own element. */\nconst frameOf = (node: HTMLElement | null) =>\n node?.closest<HTMLElement>('[data-slot=\"viewer-frame\"]') ?? null\n\nconst isTyping = (target: EventTarget | null) =>\n !!(target as HTMLElement | null)?.closest?.('input, textarea, select, [contenteditable=\"true\"]')\n\n/**\n * Where a clip is on screen now: its area of its page, while its document is clipped in the viewer\n * (`data-clip-document`) and that page is in view.\n */\nfunction clipOnPage(frame: HTMLElement, clip: Clip): ScreenRect | null {\n const clipped = Array.from(frame.querySelectorAll('[data-clip-document]')).find(\n (element) => element.getAttribute('data-clip-document') === clip.documentId\n )\n const page = clipped?.querySelector<HTMLElement>(`[data-page-number=\"${clip.page}\"]`)\n if (!page) return null\n const box = page.getBoundingClientRect()\n const view = frame.ownerDocument.defaultView\n const rect = {\n left: box.left + clip.rect.x * box.width,\n top: box.top + clip.rect.y * box.height,\n width: clip.rect.w * box.width,\n height: clip.rect.h * box.height,\n }\n const visible =\n rect.width > 0 &&\n rect.top + rect.height > 0 &&\n rect.left + rect.width > 0 &&\n (!view || (rect.top < view.innerHeight && rect.left < view.innerWidth))\n return visible ? rect : null\n}\n\nfunction useDocumentSwitcher(clips: readonly Clip[]) {\n const session = useArbiSessionStore()\n const { data: documents } = useDocuments()\n const groups = useMemo<PickerGroup[]>(() => {\n const all = (documents ?? [])\n .map((doc) => ({\n id: doc.external_id,\n title: getDocumentTitle(doc, 'Untitled'),\n fileName: doc.file_name,\n }))\n .sort((a, b) => a.title.localeCompare(b.title))\n const clipped = new Set(clips.map((clip) => clip.documentId))\n const from = all.filter((doc) => clipped.has(doc.id))\n return [\n ...(from.length ? [{ id: 'clipped', heading: 'Clipped from', docs: from }] : []),\n { id: 'all', heading: 'Documents', docs: all },\n ]\n }, [documents, clips])\n const open = (id: string) => session.setViewingDocument({ id, page: null })\n return { groups, open }\n}\n\nexport function SpotlightStrip() {\n const clips = useSpotlight((s) => s.clips)\n const note = useSpotlight((s) => s.note)\n const showing = useSpotlight((s) => s.showing)\n const actions = useSpotlight.getState()\n const switcher = useDocumentSwitcher(clips)\n const [noteOpen, setNoteOpen] = useState(false)\n\n const strip = useRef<HTMLDivElement | null>(null)\n const [view, setView] = useState<Window | null>(null)\n const stripRef = useCallback((node: HTMLDivElement | null) => {\n strip.current = node\n if (node) setView(node.ownerDocument.defaultView)\n }, [])\n\n // S shows the spotlight (not while typing).\n useEffect(() => {\n if (!view || showing) return\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.metaKey || event.ctrlKey || event.altKey || isTyping(event.target)) return\n if (event.key !== 's' && event.key !== 'S') return\n event.preventDefault()\n useSpotlight.getState().show()\n }\n view.addEventListener('keydown', onKeyDown)\n return () => view.removeEventListener('keydown', onKeyDown)\n }, [view, showing])\n\n // Back from the spotlight, the document is where it was scrolled to.\n const scrolled = useRef<{ element: HTMLElement; top: number; left: number } | null>(null)\n useEffect(() => {\n const scroller = frameOf(strip.current)?.querySelector<HTMLElement>(\n '[data-slot=\"pdf-scroller\"]'\n )\n if (showing) {\n scrolled.current = scroller\n ? { element: scroller, top: scroller.scrollTop, left: scroller.scrollLeft }\n : null\n return\n }\n const before = scrolled.current\n scrolled.current = null\n if (before?.element.isConnected) {\n before.element.scrollTop = before.top\n before.element.scrollLeft = before.left\n }\n }, [showing])\n\n const fromRect = useCallback((clip: Clip) => {\n const frame = frameOf(strip.current)\n const onPage = frame ? clipOnPage(frame, clip) : null\n // Not on screen (another document's clip): from its chip in the strip.\n return (\n onPage ??\n strip.current?.querySelector(`[data-spotlight-clip=\"${clip.id}\"]`)?.getBoundingClientRect() ??\n null\n )\n }, [])\n\n const count = `${clips.length} clip${clips.length === 1 ? '' : 's'}`\n return (\n <>\n <div\n ref={stripRef}\n className={cn(\n 'absolute bottom-[4.5rem] left-1/2 z-20 flex max-w-[calc(100%-1.5rem)] -translate-x-1/2 items-center gap-1.5 rounded-full border border-border bg-background/95 p-1 pl-1.5 shadow-lg backdrop-blur',\n showing && 'invisible'\n )}\n role=\"toolbar\"\n aria-label=\"Gathered clips\"\n data-testid=\"spotlight-strip\"\n >\n <ul className=\"flex min-w-0 items-center gap-1 overflow-x-auto [scrollbar-width:none]\">\n {clips.map((clip, index) => (\n <li\n key={clip.id}\n className=\"group relative h-8 shrink-0 overflow-hidden rounded-md border border-border bg-white\"\n style={{ width: `${Math.min(4.5, Math.max(1.5, 2 * clip.aspect))}rem` }}\n title={clip.caption}\n data-spotlight-clip={clip.id}\n data-testid={`spotlight-chip-${index}`}\n >\n <ClipImage clip={clip} className=\"h-full w-full\" />\n <button\n type=\"button\"\n className=\"absolute inset-0 flex items-center justify-center bg-black/50 text-white opacity-0 transition-opacity focus-visible:opacity-100 group-hover:opacity-100\"\n onClick={() => actions.remove(clip.id)}\n aria-label={`Remove ${clip.caption}`}\n data-testid={`spotlight-remove-${index}`}\n >\n <X className=\"size-3.5\" />\n </button>\n </li>\n ))}\n </ul>\n <span className=\"shrink-0 text-xs text-muted-foreground\" data-testid=\"spotlight-count\">\n {count}\n </span>\n <Popover open={noteOpen} onOpenChange={setNoteOpen}>\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant={note ? 'secondary' : 'ghost'}\n size=\"sm\"\n className=\"h-7 max-w-40 shrink-0 gap-1 rounded-full px-2 text-xs\"\n title={note ? `Note: ${note}` : 'Type a note to show as the title'}\n data-testid=\"spotlight-note\"\n >\n <StickyNote className=\"size-3.5 shrink-0\" />\n {note ? <span className=\"truncate\">{note}</span> : <span>Note</span>}\n </Button>\n </PopoverTrigger>\n <PopoverContent side=\"top\" className=\"w-72 p-2\">\n <Input\n autoFocus\n value={note}\n placeholder=\"Type a note\"\n onChange={(event) => actions.setNote(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter') setNoteOpen(false)\n }}\n data-testid=\"spotlight-note-input\"\n />\n </PopoverContent>\n </Popover>\n <div className=\"w-44 shrink-0 [&_[role=combobox]]:h-7 [&_[role=combobox]]:rounded-full [&_[role=combobox]]:text-xs\">\n <DocumentPicker\n groups={switcher.groups}\n value=\"\"\n onValueChange={switcher.open}\n labels={{ placeholder: 'Clip another document' }}\n />\n </div>\n <Button\n type=\"button\"\n size=\"sm\"\n className=\"h-7 shrink-0 gap-1 rounded-full px-3 text-xs\"\n onClick={actions.show}\n title=\"Show the clips over the document (S)\"\n data-testid=\"spotlight-show\"\n >\n <Presentation className=\"size-3.5\" />\n Show\n </Button>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 shrink-0 rounded-full\"\n aria-label=\"More\"\n data-testid=\"spotlight-more\"\n >\n <MoreHorizontal className=\"size-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" side=\"top\">\n <DropdownMenuItem onSelect={actions.keep} data-testid=\"spotlight-menu-keep\">\n <Presentation className=\"mr-2 size-4\" /> Keep as slide\n </DropdownMenuItem>\n <DropdownMenuItem onSelect={actions.addToTray} data-testid=\"spotlight-menu-tray\">\n <Inbox className=\"mr-2 size-4\" /> Add to the presentation tray\n </DropdownMenuItem>\n <DropdownMenuItem onSelect={actions.clear} data-testid=\"spotlight-menu-clear\">\n <Eraser className=\"mr-2 size-4\" /> Clear the clips\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n {showing && <SpotlightView fromRect={fromRect} />}\n </>\n )\n}\n"]}
|
|
@@ -17,9 +17,9 @@ require('./chunk-4PA6VCCR.cjs');
|
|
|
17
17
|
var chunkRL2HI6NP_cjs = require('./chunk-RL2HI6NP.cjs');
|
|
18
18
|
var chunkZVEW3JBT_cjs = require('./chunk-ZVEW3JBT.cjs');
|
|
19
19
|
require('./chunk-M74FWYNL.cjs');
|
|
20
|
-
require('./chunk-VZOOGA47.cjs');
|
|
21
20
|
require('./chunk-3YZKDCWY.cjs');
|
|
22
21
|
require('./chunk-SJSGSHIT.cjs');
|
|
22
|
+
require('./chunk-VZOOGA47.cjs');
|
|
23
23
|
require('./chunk-UDSHVNU3.cjs');
|
|
24
24
|
var chunkIPSHAMO2_cjs = require('./chunk-IPSHAMO2.cjs');
|
|
25
25
|
require('./chunk-PPCATBOY.cjs');
|
package/dist/agents/index.cjs
CHANGED
|
@@ -21,9 +21,9 @@ require('../chunk-6UZC4XVV.cjs');
|
|
|
21
21
|
require('../chunk-YVCOQHCE.cjs');
|
|
22
22
|
require('../chunk-JV5TVUOU.cjs');
|
|
23
23
|
require('../chunk-ZVEW3JBT.cjs');
|
|
24
|
-
require('../chunk-VZOOGA47.cjs');
|
|
25
24
|
require('../chunk-SJSGSHIT.cjs');
|
|
26
25
|
require('../chunk-ZW6FPIFC.cjs');
|
|
26
|
+
require('../chunk-VZOOGA47.cjs');
|
|
27
27
|
require('../chunk-IN6ILI5A.cjs');
|
|
28
28
|
var chunkHSLPFBK2_cjs = require('../chunk-HSLPFBK2.cjs');
|
|
29
29
|
require('../chunk-FX3K6LNZ.cjs');
|
package/dist/ai-IEIR7SC2.cjs
CHANGED
|
@@ -12,10 +12,10 @@ require('./chunk-WXUU3COI.cjs');
|
|
|
12
12
|
require('./chunk-AHDJXIUB.cjs');
|
|
13
13
|
require('./chunk-YVCOQHCE.cjs');
|
|
14
14
|
require('./chunk-JV5TVUOU.cjs');
|
|
15
|
-
require('./chunk-VZOOGA47.cjs');
|
|
16
15
|
require('./chunk-HQDR43JC.cjs');
|
|
17
16
|
require('./chunk-JR2YSBD5.cjs');
|
|
18
17
|
require('./chunk-3YZKDCWY.cjs');
|
|
18
|
+
require('./chunk-VZOOGA47.cjs');
|
|
19
19
|
require('./chunk-KNGZZC4O.cjs');
|
|
20
20
|
require('./chunk-IDCD5TEZ.cjs');
|
|
21
21
|
require('./chunk-M2FOXGJU.cjs');
|
package/dist/calls/index.cjs
CHANGED
|
@@ -68,10 +68,10 @@ function ConnectedIncomingCall() {
|
|
|
68
68
|
);
|
|
69
69
|
}
|
|
70
70
|
var ConnectedCallDock = react.lazy(
|
|
71
|
-
() => import('../ConnectedCallDock-
|
|
71
|
+
() => import('../ConnectedCallDock-733O5M36.cjs').then((m) => ({ default: m.ConnectedCallDock }))
|
|
72
72
|
);
|
|
73
73
|
var ConnectedCallRoom = react.lazy(
|
|
74
|
-
() => import('../ConnectedCallRoom-
|
|
74
|
+
() => import('../ConnectedCallRoom-TAUGSRGV.cjs').then((m) => ({ default: m.ConnectedCallRoom }))
|
|
75
75
|
);
|
|
76
76
|
function ConnectedCallLayer() {
|
|
77
77
|
const hasActiveCall = react$1.useCallSession((s) => s.active !== null);
|
|
@@ -69,8 +69,21 @@ function ClipCaptureOverlay({ page, passages = [], onCapture }) {
|
|
|
69
69
|
const p = point(event, s.box);
|
|
70
70
|
const size = { width: s.box.width, height: s.box.height };
|
|
71
71
|
const dragged = annotations.toNorm({ x: s.x, y: s.y, width: p.x - s.x, height: p.y - s.y }, size);
|
|
72
|
-
|
|
72
|
+
let rect = dragged.w < MIN_CLIP_FRACTION || dragged.h < MIN_CLIP_FRACTION ? passageUnder(event, s.box) : dragged;
|
|
73
73
|
if (!rect) return;
|
|
74
|
+
const pageElement = event.currentTarget.closest("[data-page-number]") ?? event.currentTarget.parentElement;
|
|
75
|
+
const bottom = s.box.top + (rect.y + rect.h) * size.height;
|
|
76
|
+
for (const span of pageElement?.querySelectorAll(".textLayer span") ?? []) {
|
|
77
|
+
const line = span.getBoundingClientRect();
|
|
78
|
+
if (line.width === 0 || line.height === 0) continue;
|
|
79
|
+
const x0 = s.box.left + rect.x * size.width;
|
|
80
|
+
const x1 = x0 + rect.w * size.width;
|
|
81
|
+
if (line.right <= x0 || line.left >= x1) continue;
|
|
82
|
+
if (line.top < bottom && line.bottom > bottom) {
|
|
83
|
+
const end = (line.top - s.box.top) / size.height;
|
|
84
|
+
if (end > rect.y) rect = { ...rect, h: end - rect.y };
|
|
85
|
+
}
|
|
86
|
+
}
|
|
74
87
|
onCapture({ page, rect, aspect: rect.w * size.width / (rect.h * size.height) });
|
|
75
88
|
};
|
|
76
89
|
const shown = draft && {
|
|
@@ -115,5 +128,5 @@ function ClipCaptureOverlay({ page, passages = [], onCapture }) {
|
|
|
115
128
|
|
|
116
129
|
exports.ClipCaptureOverlay = ClipCaptureOverlay;
|
|
117
130
|
exports.passageClipRect = passageClipRect;
|
|
118
|
-
//# sourceMappingURL=chunk-
|
|
119
|
-
//# sourceMappingURL=chunk-
|
|
131
|
+
//# sourceMappingURL=chunk-26SFI2BH.cjs.map
|
|
132
|
+
//# sourceMappingURL=chunk-26SFI2BH.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/presentation/passage-clip.ts","../src/presentation/ClipCaptureOverlay.tsx"],"names":["useRef","useState","toNorm","jsxs","jsx"],"mappings":"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","file":"chunk-26SFI2BH.cjs","sourcesContent":["/**\n * Clipping a passage with one click: the parser places each passage on its page (`page_bbox`,\n * fractions of the page), so in clip mode the passage under the pointer is outlined and a click\n * clips exactly its box, with a little room around it — the same room the server leaves when it\n * clips a passage for a slide (`PASSAGE_MARGIN_X` / `_Y` in its presentation tool).\n */\n\nimport type { Rect } from './model'\n\n/** Room kept around a clipped passage, as fractions of the page's width and height. */\nexport const PASSAGE_MARGIN_X = 0.015\nexport const PASSAGE_MARGIN_Y = 0.008\n\n/** A passage's box `[x0, y0, x1, y1]` as the area to clip: with its margin, kept on the page. */\nexport function passageClipRect([x0, y0, x1, y1]: readonly [number, number, number, number]): Rect {\n const left = Math.max(0, x0 - PASSAGE_MARGIN_X)\n const top = Math.max(0, y0 - PASSAGE_MARGIN_Y)\n const right = Math.min(1, x1 + PASSAGE_MARGIN_X)\n const bottom = Math.min(1, y1 + PASSAGE_MARGIN_Y)\n return { x: left, y: top, w: right - left, h: bottom - top }\n}\n\n/**\n * The passage at a point of the page (fractions), if any: the smallest one holding it, so a\n * caption inside a figure's box wins over the figure.\n */\nexport function passageAt(passages: readonly Rect[], x: number, y: number): Rect | null {\n let best: Rect | null = null\n for (const passage of passages) {\n const inside =\n x >= passage.x && x <= passage.x + passage.w && y >= passage.y && y <= passage.y + passage.h\n if (inside && (!best || passage.w * passage.h < best.w * best.h)) best = passage\n }\n return best\n}\n","/**\n * Over a page while clipping. A click on a passage clips exactly that passage (the parser placed it\n * on the page; it is outlined under the pointer); a drag clips any rectangle (a figure, a scan, a\n * page with no passages). Either way the area is kept as fractions of the page (`toNorm`), so it\n * does not depend on the zoom it was taken at.\n */\n\nimport { useRef, useState, type PointerEvent as ReactPointerEvent } from 'react'\nimport { toNorm, type PixelRect } from '@arbidocs/react/annotations'\nimport type { Rect } from './model'\nimport { passageAt } from './passage-clip'\n\n/** Smaller than this (a fraction of the page, either side) is a click, not a dragged clip. */\nconst MIN_CLIP_FRACTION = 0.02\n\nexport interface ClipCaptureOverlayProps {\n page: number\n /** The page's passages, as the areas a click clips (page fractions, margin included). */\n passages?: readonly Rect[]\n onCapture: (capture: { page: number; rect: Rect; aspect: number }) => void\n}\n\nconst percent = (rect: Rect) => ({\n left: `${rect.x * 100}%`,\n top: `${rect.y * 100}%`,\n width: `${rect.w * 100}%`,\n height: `${rect.h * 100}%`,\n})\n\nexport function ClipCaptureOverlay({ page, passages = [], onCapture }: ClipCaptureOverlayProps) {\n const start = useRef<{ x: number; y: number; box: DOMRect } | null>(null)\n const [draft, setDraft] = useState<PixelRect | null>(null)\n const [hovered, setHovered] = useState<Rect | null>(null)\n\n const point = (event: ReactPointerEvent, box: DOMRect) => ({\n x: event.clientX - box.left,\n y: event.clientY - box.top,\n })\n /** The passage under the pointer, if any. */\n const passageUnder = (event: ReactPointerEvent, box: DOMRect) => {\n if (!passages.length || !box.width || !box.height) return null\n const p = point(event, box)\n return passageAt(passages, p.x / box.width, p.y / box.height)\n }\n\n const onPointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (event.button !== 0) return\n event.preventDefault()\n event.currentTarget.setPointerCapture?.(event.pointerId)\n const box = event.currentTarget.getBoundingClientRect()\n start.current = { ...point(event, box), box }\n setDraft(null)\n }\n\n const onPointerMove = (event: ReactPointerEvent<HTMLDivElement>) => {\n const s = start.current\n if (!s) {\n const next = passageUnder(event, event.currentTarget.getBoundingClientRect())\n if (next !== hovered) setHovered(next)\n return\n }\n const p = point(event, s.box)\n setDraft({ x: s.x, y: s.y, width: p.x - s.x, height: p.y - s.y })\n }\n\n const onPointerUp = (event: ReactPointerEvent) => {\n const s = start.current\n start.current = null\n setDraft(null)\n if (!s) return\n const p = point(event, s.box)\n const size = { width: s.box.width, height: s.box.height }\n const dragged = toNorm({ x: s.x, y: s.y, width: p.x - s.x, height: p.y - s.y }, size)\n // A click: the passage under it, if there is one.\n let rect =\n dragged.w < MIN_CLIP_FRACTION || dragged.h < MIN_CLIP_FRACTION\n ? passageUnder(event, s.box)\n : dragged\n if (!rect) return\n // Keep the bottom edge out of the next line in the PDF text layer.\n const pageElement =\n event.currentTarget.closest('[data-page-number]') ?? event.currentTarget.parentElement\n const bottom = s.box.top + (rect.y + rect.h) * size.height\n for (const span of pageElement?.querySelectorAll('.textLayer span') ?? []) {\n const line = span.getBoundingClientRect()\n if (line.width === 0 || line.height === 0) continue\n const x0 = s.box.left + rect.x * size.width\n const x1 = x0 + rect.w * size.width\n if (line.right <= x0 || line.left >= x1) continue\n if (line.top < bottom && line.bottom > bottom) {\n const end = (line.top - s.box.top) / size.height\n if (end > rect.y) rect = { ...rect, h: end - rect.y }\n }\n }\n onCapture({ page, rect, aspect: (rect.w * size.width) / (rect.h * size.height) })\n }\n\n const shown = draft && {\n left: Math.min(draft.x, draft.x + draft.width),\n top: Math.min(draft.y, draft.y + draft.height),\n width: Math.abs(draft.width),\n height: Math.abs(draft.height),\n }\n\n return (\n <div\n className=\"absolute inset-0 z-20 cursor-crosshair touch-none select-none\"\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onPointerLeave={() => setHovered(null)}\n onPointerCancel={() => {\n start.current = null\n setDraft(null)\n }}\n data-testid={`clip-capture-${page}`}\n >\n {/* The passage a click would clip, exactly as it would be clipped. */}\n {hovered && !draft && (\n <div\n className=\"pointer-events-none absolute rounded-sm bg-ai-soft/40 ring-2 ring-ai-accent\"\n style={percent(hovered)}\n data-testid=\"clip-passage-outline\"\n />\n )}\n {shown && (\n <div\n className=\"pointer-events-none absolute border-2 border-dashed border-primary bg-primary/10\"\n style={shown}\n />\n )}\n </div>\n )\n}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var chunkVZOOGA47_cjs = require('./chunk-VZOOGA47.cjs');
|
|
5
4
|
var chunk7OPOPYV6_cjs = require('./chunk-7OPOPYV6.cjs');
|
|
6
5
|
var chunkOAIOOVFN_cjs = require('./chunk-OAIOOVFN.cjs');
|
|
7
6
|
var chunkQMIHLJMH_cjs = require('./chunk-QMIHLJMH.cjs');
|
|
7
|
+
var chunkVZOOGA47_cjs = require('./chunk-VZOOGA47.cjs');
|
|
8
8
|
var chunkM2FOXGJU_cjs = require('./chunk-M2FOXGJU.cjs');
|
|
9
9
|
var chunkZBP4ZSAJ_cjs = require('./chunk-ZBP4ZSAJ.cjs');
|
|
10
10
|
var chunkTKHCIHE2_cjs = require('./chunk-TKHCIHE2.cjs');
|
|
@@ -1463,5 +1463,5 @@ function ConnectingOverlay() {
|
|
|
1463
1463
|
}
|
|
1464
1464
|
|
|
1465
1465
|
exports.ConnectedCallRoom = ConnectedCallRoom;
|
|
1466
|
-
//# sourceMappingURL=chunk-
|
|
1467
|
-
//# sourceMappingURL=chunk-
|
|
1466
|
+
//# sourceMappingURL=chunk-463QM764.cjs.map
|
|
1467
|
+
//# sourceMappingURL=chunk-463QM764.cjs.map
|