@arbidocs/blocks 0.5.96 → 0.5.97
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/README.md +8 -1
- package/dist/{ConnectedCallDock-D4DG4VDA.cjs → ConnectedCallDock-HI2KMQZ3.cjs} +12 -12
- package/dist/{ConnectedCallDock-D4DG4VDA.cjs.map → ConnectedCallDock-HI2KMQZ3.cjs.map} +1 -1
- package/dist/{ConnectedCallDock-VVZUSFFK.js → ConnectedCallDock-Y64FTKFF.js} +11 -11
- package/dist/{ConnectedCallDock-VVZUSFFK.js.map → ConnectedCallDock-Y64FTKFF.js.map} +1 -1
- package/dist/{ConnectedCallRoom-EDHNAJHA.js → ConnectedCallRoom-LEBIJGFT.js} +11 -11
- package/dist/{ConnectedCallRoom-EDHNAJHA.js.map → ConnectedCallRoom-LEBIJGFT.js.map} +1 -1
- package/dist/{ConnectedCallRoom-VDQD25QW.cjs → ConnectedCallRoom-UXIJJKNG.cjs} +12 -12
- package/dist/{ConnectedCallRoom-VDQD25QW.cjs.map → ConnectedCallRoom-UXIJJKNG.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-IS27M6FV.js → ConnectedNativeDocxComparison-6KL5XI3L.js} +10 -10
- package/dist/{ConnectedNativeDocxComparison-IS27M6FV.js.map → ConnectedNativeDocxComparison-6KL5XI3L.js.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-ADQURGHU.cjs → ConnectedNativeDocxComparison-P346QOX5.cjs} +11 -11
- package/dist/{ConnectedNativeDocxComparison-ADQURGHU.cjs.map → ConnectedNativeDocxComparison-P346QOX5.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-7EQ6DE3Q.cjs → ConnectedNativeDocxEditor-7JHSQ6KI.cjs} +11 -11
- package/dist/{ConnectedNativeDocxEditor-7EQ6DE3Q.cjs.map → ConnectedNativeDocxEditor-7JHSQ6KI.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-JYXGX55F.js → ConnectedNativeDocxEditor-ATZ2TG2L.js} +9 -9
- package/dist/{ConnectedNativeDocxEditor-JYXGX55F.js.map → ConnectedNativeDocxEditor-ATZ2TG2L.js.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-IYAQ2L7G.cjs → ConnectedStreamedWordArtifact-5HI3WSAJ.cjs} +11 -11
- package/dist/ConnectedStreamedWordArtifact-5HI3WSAJ.cjs.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-KLLG6W5L.js → ConnectedStreamedWordArtifact-FHSGQHXQ.js} +10 -10
- package/dist/ConnectedStreamedWordArtifact-FHSGQHXQ.js.map +1 -0
- package/dist/{DocumentReviewCard-FEVDNY6U.js → DocumentReviewCard-7UFQGDOG.js} +6 -6
- package/dist/{DocumentReviewCard-FEVDNY6U.js.map → DocumentReviewCard-7UFQGDOG.js.map} +1 -1
- package/dist/{DocumentReviewCard-3H66FMMO.cjs → DocumentReviewCard-E3HB3K2G.cjs} +6 -6
- package/dist/{DocumentReviewCard-3H66FMMO.cjs.map → DocumentReviewCard-E3HB3K2G.cjs.map} +1 -1
- package/dist/{FilesViewerDialog-DSK5HMLL.cjs → FilesViewerDialog-3KWTQARB.cjs} +12 -12
- package/dist/{FilesViewerDialog-DSK5HMLL.cjs.map → FilesViewerDialog-3KWTQARB.cjs.map} +1 -1
- package/dist/{FilesViewerDialog-HL4E57K5.js → FilesViewerDialog-EQKBFAWI.js} +10 -10
- package/dist/{FilesViewerDialog-HL4E57K5.js.map → FilesViewerDialog-EQKBFAWI.js.map} +1 -1
- package/dist/{WorkspaceTableView-X3KZ7YFI.js → WorkspaceTableView-DYABS53K.js} +6 -6
- package/dist/{WorkspaceTableView-X3KZ7YFI.js.map → WorkspaceTableView-DYABS53K.js.map} +1 -1
- package/dist/{WorkspaceTableView-5DWNJN6J.cjs → WorkspaceTableView-ZIQ7JWT5.cjs} +8 -8
- package/dist/{WorkspaceTableView-5DWNJN6J.cjs.map → WorkspaceTableView-ZIQ7JWT5.cjs.map} +1 -1
- package/dist/agents/index.cjs +255 -255
- package/dist/agents/index.js +5 -5
- package/dist/agents/workflows/WorkflowStepAction.d.ts +9 -2
- package/dist/agents/workflows/requiredLabels.d.ts +7 -2
- package/dist/calls/index.cjs +2 -2
- package/dist/calls/index.js +2 -2
- package/dist/{chunk-VSZPY4LK.js → chunk-42IVGYNL.js} +5 -5
- package/dist/{chunk-VSZPY4LK.js.map → chunk-42IVGYNL.js.map} +1 -1
- package/dist/{chunk-GEUP5IV7.js → chunk-4LTDELP2.js} +3 -3
- package/dist/{chunk-GEUP5IV7.js.map → chunk-4LTDELP2.js.map} +1 -1
- package/dist/{chunk-HA27RMKD.js → chunk-4RCLA52C.js} +7 -7
- package/dist/{chunk-HA27RMKD.js.map → chunk-4RCLA52C.js.map} +1 -1
- package/dist/{chunk-6NMLRGUJ.cjs → chunk-6IS3IRUF.cjs} +4 -4
- package/dist/{chunk-6NMLRGUJ.cjs.map → chunk-6IS3IRUF.cjs.map} +1 -1
- package/dist/{chunk-KQUFEMPP.js → chunk-76O7J6IZ.js} +3 -3
- package/dist/{chunk-KQUFEMPP.js.map → chunk-76O7J6IZ.js.map} +1 -1
- package/dist/{chunk-5YIUHRTR.cjs → chunk-AINS6VU6.cjs} +4 -4
- package/dist/{chunk-5YIUHRTR.cjs.map → chunk-AINS6VU6.cjs.map} +1 -1
- package/dist/{chunk-ZA3ZELSH.cjs → chunk-CCALU47C.cjs} +5 -5
- package/dist/{chunk-ZA3ZELSH.cjs.map → chunk-CCALU47C.cjs.map} +1 -1
- package/dist/{chunk-BAJNXRI5.cjs → chunk-DDIV3MYQ.cjs} +5 -5
- package/dist/{chunk-BAJNXRI5.cjs.map → chunk-DDIV3MYQ.cjs.map} +1 -1
- package/dist/{chunk-ZJ3NII4U.cjs → chunk-ECCV4YOL.cjs} +9 -9
- package/dist/{chunk-ZJ3NII4U.cjs.map → chunk-ECCV4YOL.cjs.map} +1 -1
- package/dist/{chunk-S2CKH2LH.js → chunk-FNGFSHVE.js} +3 -3
- package/dist/{chunk-S2CKH2LH.js.map → chunk-FNGFSHVE.js.map} +1 -1
- package/dist/{chunk-CMMFXSTS.cjs → chunk-HXWBXYVN.cjs} +3 -3
- package/dist/{chunk-CMMFXSTS.cjs.map → chunk-HXWBXYVN.cjs.map} +1 -1
- package/dist/{chunk-NRE7ZR6M.js → chunk-ITK7GW7B.js} +3 -3
- package/dist/{chunk-NRE7ZR6M.js.map → chunk-ITK7GW7B.js.map} +1 -1
- package/dist/{chunk-FAKRTCAL.cjs → chunk-J4CXF4A7.cjs} +172 -14
- package/dist/chunk-J4CXF4A7.cjs.map +1 -0
- package/dist/{chunk-AS3HX7LL.js → chunk-K6UKLIRR.js} +3 -3
- package/dist/{chunk-AS3HX7LL.js.map → chunk-K6UKLIRR.js.map} +1 -1
- package/dist/{chunk-RMJNCYPD.js → chunk-KJLHFS7T.js} +3 -3
- package/dist/{chunk-RMJNCYPD.js.map → chunk-KJLHFS7T.js.map} +1 -1
- package/dist/{chunk-4DRLOAVD.js → chunk-LZI4EGOW.js} +209 -56
- package/dist/chunk-LZI4EGOW.js.map +1 -0
- package/dist/{chunk-6OXR4R6J.cjs → chunk-MMSHLHTA.cjs} +3 -3
- package/dist/{chunk-6OXR4R6J.cjs.map → chunk-MMSHLHTA.cjs.map} +1 -1
- package/dist/{chunk-VEK64VEE.js → chunk-N77UYRV7.js} +3 -3
- package/dist/{chunk-VEK64VEE.js.map → chunk-N77UYRV7.js.map} +1 -1
- package/dist/{chunk-64KZM3RZ.cjs → chunk-NZQZ2HFU.cjs} +3 -3
- package/dist/{chunk-64KZM3RZ.cjs.map → chunk-NZQZ2HFU.cjs.map} +1 -1
- package/dist/{chunk-7XVQATK2.cjs → chunk-OXHAUVK2.cjs} +3 -3
- package/dist/{chunk-7XVQATK2.cjs.map → chunk-OXHAUVK2.cjs.map} +1 -1
- package/dist/{chunk-YIKE2IY4.js → chunk-QSBPOYWA.js} +3 -3
- package/dist/{chunk-YIKE2IY4.js.map → chunk-QSBPOYWA.js.map} +1 -1
- package/dist/{chunk-NCGJKKGR.js → chunk-RQW2CFOQ.js} +9 -9
- package/dist/{chunk-NCGJKKGR.js.map → chunk-RQW2CFOQ.js.map} +1 -1
- package/dist/{chunk-DCNBNLWC.js → chunk-RZG4ALKZ.js} +4 -4
- package/dist/{chunk-DCNBNLWC.js.map → chunk-RZG4ALKZ.js.map} +1 -1
- package/dist/{chunk-O2ATVRRO.cjs → chunk-SDXK2COQ.cjs} +27 -27
- package/dist/{chunk-O2ATVRRO.cjs.map → chunk-SDXK2COQ.cjs.map} +1 -1
- package/dist/{chunk-CVYFX7AD.js → chunk-SEBNGA3F.js} +31 -15
- package/dist/chunk-SEBNGA3F.js.map +1 -0
- package/dist/{chunk-ZBQTFA5X.cjs → chunk-SYWJNSPS.cjs} +4 -4
- package/dist/{chunk-ZBQTFA5X.cjs.map → chunk-SYWJNSPS.cjs.map} +1 -1
- package/dist/{chunk-2JXJE7Y4.js → chunk-T7LLYVOW.js} +168 -10
- package/dist/chunk-T7LLYVOW.js.map +1 -0
- package/dist/{chunk-TANZTMPL.cjs → chunk-V2CNHRLZ.cjs} +4 -4
- package/dist/{chunk-TANZTMPL.cjs.map → chunk-V2CNHRLZ.cjs.map} +1 -1
- package/dist/{chunk-IMFE6FKN.cjs → chunk-WN7XPEYK.cjs} +7 -7
- package/dist/{chunk-IMFE6FKN.cjs.map → chunk-WN7XPEYK.cjs.map} +1 -1
- package/dist/{chunk-KVKKVSBT.cjs → chunk-XM4KRGCK.cjs} +252 -99
- package/dist/chunk-XM4KRGCK.cjs.map +1 -0
- package/dist/{chunk-MB2OXZEA.cjs → chunk-XTCNETMI.cjs} +4 -4
- package/dist/{chunk-MB2OXZEA.cjs.map → chunk-XTCNETMI.cjs.map} +1 -1
- package/dist/{chunk-4HMJQ66B.js → chunk-Y7UHKEVT.js} +4 -4
- package/dist/{chunk-4HMJQ66B.js.map → chunk-Y7UHKEVT.js.map} +1 -1
- package/dist/{chunk-CIXA5A65.cjs → chunk-YZ6YOOTF.cjs} +30 -14
- package/dist/chunk-YZ6YOOTF.cjs.map +1 -0
- package/dist/{chunk-QJVDQAYQ.js → chunk-Z4IPTLRS.js} +3 -3
- package/dist/{chunk-QJVDQAYQ.js.map → chunk-Z4IPTLRS.js.map} +1 -1
- package/dist/collaboration/index.cjs +1 -1
- package/dist/collaboration/index.js +1 -1
- package/dist/connect/docx.cjs +14 -14
- package/dist/connect/docx.js +10 -10
- package/dist/connect/index.cjs +680 -677
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.js +43 -40
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +9 -9
- package/dist/connect/viewer.js +8 -8
- package/dist/connection/workflows/ConnectedWorkflowRunPage.d.ts +4 -3
- package/dist/connection/workflows/WorkflowRunPage.d.ts +18 -15
- package/dist/connection/workflows/index.d.ts +2 -1
- package/dist/connection/workflows/runProject.d.ts +47 -0
- package/dist/dashboards/index.cjs +1 -1
- package/dist/dashboards/index.js +1 -1
- package/dist/embed/index.cjs +19 -19
- package/dist/embed/index.js +13 -13
- package/dist/index.cjs +383 -383
- package/dist/index.js +12 -12
- package/dist/settings/index.cjs +151 -151
- package/dist/settings/index.js +2 -2
- package/dist/shell/index.cjs +33 -33
- package/dist/shell/index.js +3 -3
- package/dist/studio/index.cjs +5 -5
- package/dist/studio/index.js +4 -4
- package/dist/workflow-canvas/index.cjs +32 -32
- package/dist/workflow-canvas/index.js +17 -17
- package/dist/workspaces/index.cjs +8 -8
- package/dist/workspaces/index.js +1 -1
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedStreamedWordArtifact-IYAQ2L7G.cjs.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-KLLG6W5L.js.map +0 -1
- package/dist/chunk-2JXJE7Y4.js.map +0 -1
- package/dist/chunk-4DRLOAVD.js.map +0 -1
- package/dist/chunk-CIXA5A65.cjs.map +0 -1
- package/dist/chunk-CVYFX7AD.js.map +0 -1
- package/dist/chunk-FAKRTCAL.cjs.map +0 -1
- package/dist/chunk-KVKKVSBT.cjs.map +0 -1
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
var chunkTZHLO7HF_cjs = require('./chunk-TZHLO7HF.cjs');
|
|
5
5
|
var chunkSIYNZR5B_cjs = require('./chunk-SIYNZR5B.cjs');
|
|
6
6
|
var chunkKNC77LZZ_cjs = require('./chunk-KNC77LZZ.cjs');
|
|
7
|
-
var chunk6K5CGISL_cjs = require('./chunk-6K5CGISL.cjs');
|
|
8
|
-
var chunkMGVECEQQ_cjs = require('./chunk-MGVECEQQ.cjs');
|
|
9
7
|
var chunkF5T4W2R2_cjs = require('./chunk-F5T4W2R2.cjs');
|
|
10
8
|
var chunk5HEMXXHR_cjs = require('./chunk-5HEMXXHR.cjs');
|
|
11
9
|
var chunkWV65MJ43_cjs = require('./chunk-WV65MJ43.cjs');
|
|
10
|
+
var chunk6K5CGISL_cjs = require('./chunk-6K5CGISL.cjs');
|
|
11
|
+
var chunkMGVECEQQ_cjs = require('./chunk-MGVECEQQ.cjs');
|
|
12
12
|
var chunkUIXY4HKM_cjs = require('./chunk-UIXY4HKM.cjs');
|
|
13
13
|
var ui = require('@arbidocs/react/ui');
|
|
14
14
|
var lucideReact = require('lucide-react');
|
|
@@ -216,5 +216,5 @@ function useSelectWorkspace() {
|
|
|
216
216
|
|
|
217
217
|
exports.useConnectedThreadActivity = useConnectedThreadActivity;
|
|
218
218
|
exports.useSelectWorkspace = useSelectWorkspace;
|
|
219
|
-
//# sourceMappingURL=chunk-
|
|
220
|
-
//# sourceMappingURL=chunk-
|
|
219
|
+
//# sourceMappingURL=chunk-XTCNETMI.cjs.map
|
|
220
|
+
//# sourceMappingURL=chunk-XTCNETMI.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection/tasks/useConnectedThreadActivity.tsx","../src/connection/useSelectWorkspace.ts"],"names":["stepKindOf","STEP_KIND_ICONS","jsx","useWorkflows","useConversationItems","useWorkspaceUsers","useDocuments","useConversationActivity","useConversationData","useBlocksEnvironment","useOpenWorkflow","useArbiSessionState","latestMessageTime","isSupersededStop","getUserDisplayName","fromPlanSteps","compactThreadActivity","splitDocRef","getDocumentTitle","unnotifiedMentions","parseCallLogDetail","ThreadCallLogCard","formatRelativeTime","RecordingCard","notifiedLabel","AssistantEntity","DocumentUser","Clock","formatFriendlyDate","linkedRunsFromActivity","useOptionalConnection","useSwitchWorkspace","useCallback"],"mappings":"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","file":"chunk-MB2OXZEA.cjs","sourcesContent":["import {\n formatFriendlyDate,\n getDocumentTitle,\n getUserDisplayName,\n formatRelativeTime,\n} from '@arbidocs/react/ui'\nimport { Clock } from 'lucide-react'\nimport {\n useConversationActivity,\n useWorkflows,\n useDocuments,\n useWorkspaceUsers,\n useArbiSessionState,\n useConversationData,\n useConversationItems,\n} from '@arbidocs/react'\nimport { STEP_KIND_ICONS, stepKindOf } from '../../agents/workflows/stepKinds'\nimport { compactThreadActivity } from '../../agents/tasks/compact-thread-activity'\nimport { fromPlanSteps, type TaskPlanStep } from '../../agents/workflows/planSteps'\nimport { splitDocRef, type WorkflowStepPhase } from '../../agents/workflows/run'\nimport { type WorkflowStep } from '../../agents/workflows/types'\nimport { linkedRunsFromActivity } from '../../agents/tasks/linkedRuns'\nimport { type TaskActivityEvent } from '../../agents/tasks/TaskActivityTimeline'\nimport {\n type WorkflowThreadOrigin,\n type WorkflowThreadSignal,\n} from '../../agents/tasks/WorkflowThreadStrip'\nimport { ThreadCallLogCard } from '../../calls/connected/ThreadCallLogCard'\nimport { RecordingCard } from '../../calls/connected/RecordingCard'\nimport { parseCallLogDetail } from '../../calls/call-cards'\nimport { AssistantEntity } from '../../agents/tasks/AssistantEntity'\nimport {\n isSupersededStop,\n latestMessageTime,\n notifiedLabel,\n unnotifiedMentions,\n} from '../../agents/tasks/taskHelpers'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { useOpenWorkflow } from '../workflows/useOpenWorkflow'\nimport { DocumentUser } from '../files/fields/DocumentUser'\n\n/** The phase a step event puts its step in, for its chip in the transcript. */\nconst STEP_EVENT_PHASES: Record<string, WorkflowStepPhase> = {\n // A past \"started\" is not still running: the step's own chip (on the bar) says where it is now.\n step_started: 'ready',\n step_waiting: 'waiting',\n step_progress: 'waiting',\n step_done: 'done',\n step_skipped: 'skipped',\n step_failed: 'failed',\n step_sent_back: 'ready',\n}\n\n/** A step event's chip in the transcript: its step's kind and icon, the phase the event set. */\nfunction stepChipOf(\n step: WorkflowStep,\n eventKind: string,\n document?: { name: string; onOpen: () => void }\n) {\n const phase = STEP_EVENT_PHASES[eventKind]\n if (!phase) return undefined\n const kind = stepKindOf(step)\n const KindIcon = STEP_KIND_ICONS[kind]\n return { kind, phase, icon: <KindIcon />, document }\n}\n\n/**\n * A thread's persisted history, as its top bar's ribbon and its transcript show it: each entry with\n * its actor, its step chip, the document or email it is about and where a click goes; the threads\n * linked to it (what started it, what it starts); the signals its steps raised. Documents,\n * threads, email drafts and workflows open through the host's environment.\n */\nexport function useConnectedThreadActivity(conversationId: string | null | undefined) {\n const { data: workflows = [] } = useWorkflows()\n const { conversations } = useConversationItems()\n const { data: members = [] } = useWorkspaceUsers()\n const { data: docs = [] } = useDocuments()\n const activity = useConversationActivity(conversationId ?? undefined, { live: true })\n const { messageHistory } = useConversationData()\n const environment = useBlocksEnvironment()\n const { openDocument, openMail } = environment\n const navigateToConversation = (id: string, messageId?: string) =>\n environment.openConversation(id, messageId ? { messageId } : undefined)\n // The host's Workflows page, while it has one (absent: a workflow has nowhere to open).\n const openWorkflow = useOpenWorkflow()\n const workspaceExtId = useArbiSessionState((s) => s.workspaceId)\n const task = conversations.find((c) => c.external_id === conversationId)\n const latestMessageAt = latestMessageTime(messageHistory)\n const events = ((activity.data ?? []) as TaskActivityEvent[]).filter(\n (event) => !isSupersededStop(event, latestMessageAt)\n )\n const personName = (extId: string) => {\n const person = members.find((m) => m.user.external_id === extId)?.user\n return person ? getUserDisplayName(person) : 'someone'\n }\n // The run's steps, from its plan: step events are named after their step and drawn as its chip.\n const planSteps = fromPlanSteps((task?.plan?.steps ?? []) as TaskPlanStep[])\n const entries = compactThreadActivity(events, (id) => planSteps.find((s) => s.id === id)?.title)\n const items = entries.map(({ event, label, recipients }) => {\n const messageActivity = [\n 'created',\n 'participant_joined',\n 'assistant_responded',\n 'assistant_stopped',\n ].includes(event.kind)\n // A stop is about the assistant's turn (the event names no actor), so it is shown as ARBI's.\n const eventStep =\n event.kind.startsWith('step_') && typeof event.detail?.step === 'string'\n ? planSteps.find((s) => s.id === event.detail?.step)\n : undefined\n // A finished step's document (its latest version), one click from its chip in the transcript.\n const stepDocRef =\n event.kind === 'step_done' && Array.isArray(event.detail?.documents)\n ? (event.detail.documents as string[]).at(-1)\n : undefined\n const stepDocId = stepDocRef ? splitDocRef(stepDocRef).id : undefined\n const stepDocRecord = stepDocId ? docs.find((d) => d.external_id === stepDocId) : undefined\n const stepDocument = stepDocId\n ? {\n name: stepDocRecord ? getDocumentTitle(stepDocRecord) : stepDocId,\n onOpen: () => openDocument(stepDocId),\n }\n : undefined\n // An AI step's progress is ARBI's, whoever started the run.\n const assistant =\n event.kind === 'assistant_responded' ||\n event.kind === 'assistant_stopped' ||\n event.detail?.assistant === true ||\n eventStep?.kind === 'agent'\n const member = members.find(\n (m) =>\n m.user.external_id ===\n (event.actor_ext_id ?? (event.kind === 'created' ? task?.created_by_ext_id : undefined))\n )?.user\n const name = assistant ? 'ARBI' : member ? getUserDisplayName(member) : 'System'\n const docId = typeof event.detail?.doc_ext_id === 'string' ? event.detail.doc_ext_id : undefined\n const sourceMessage =\n typeof event.detail?.message_ext_id === 'string' ? event.detail.message_ext_id : undefined\n const messageId =\n sourceMessage ??\n [...messageHistory]\n .reverse()\n .find((message) => Date.parse(message.created_at ?? '') <= Date.parse(event.created_at))\n ?.external_id ??\n messageHistory[0]?.external_id\n const doc = docId ? docs.find((d) => d.external_id === docId) : undefined\n // A draft email an agent left in the user's native mailbox: the entry opens it in Mail.\n const mailDraftId =\n event.kind === 'notified' &&\n event.detail?.event === 'mail_draft_ready' &&\n typeof event.detail?.mail_id === 'string'\n ? event.detail.mail_id\n : undefined\n // Say who a batch reached, and name any @mentioned person it did not, so nobody has to guess.\n const missed =\n event.kind === 'notified' && recipients.length\n ? unnotifiedMentions(\n messageHistory.find((message) => message.external_id === sourceMessage)?.mentions,\n recipients,\n event.actor_ext_id\n )\n : []\n // A thread call: the server's log card (live → Join, ended → summary + meeting chat).\n const callDetail = event.kind === 'call' ? parseCallLogDetail(event.detail) : null\n // A recording of the thread's call stopped: its Recording card (in a meeting thread).\n const recordingCall =\n event.kind === 'recording' && typeof event.detail?.call_ext_id === 'string'\n ? event.detail.call_ext_id\n : null\n const recordingId =\n typeof event.detail?.recording_ext_id === 'string' ? event.detail.recording_ext_id : null\n return {\n id: event.external_id,\n kind: event.kind,\n // A workflow step event: the step it is about (the thread's step strip places entries by it).\n step: typeof event.detail?.step === 'string' ? event.detail.step : undefined,\n createdAt: event.created_at,\n card: callDetail ? (\n <ThreadCallLogCard\n detail={callDetail}\n name={personName}\n workspaceExtId={workspaceExtId}\n time={formatRelativeTime(event.created_at, { style: 'short' })}\n />\n ) : recordingCall ? (\n <RecordingCard\n callExtId={recordingCall}\n recordingExtId={recordingId}\n title={task?.title}\n time={formatRelativeTime(event.created_at, { style: 'short' })}\n />\n ) : undefined,\n docId,\n docTitle: doc ? getDocumentTitle(doc) : undefined,\n label: mailDraftId\n ? 'Left a draft email'\n : event.kind === 'notified' && recipients.length\n ? notifiedLabel(recipients.map(personName), missed.map(personName))\n : label,\n description: [\n name,\n label,\n ...recipients.map((id) => {\n const person = members.find((m) => m.user.external_id === id)?.user\n return person ? getUserDisplayName(person) : id\n }),\n doc ? getDocumentTitle(doc) : null,\n ]\n .filter(Boolean)\n .join(' · '),\n actor: assistant ? 'assistant' : (member?.external_id ?? 'system'),\n stepChip: eventStep ? stepChipOf(eventStep, event.kind, stepDocument) : undefined,\n // No avatar tooltip: the entry is already a button (or titled row) that carries the same\n // details, and a tooltip trigger inside it would be a nested <button>.\n avatar: assistant ? (\n <AssistantEntity variant=\"icon\" size={20} showTooltip={false} />\n ) : member ? (\n <DocumentUser user={member} tooltip={false} />\n ) : (\n <Clock className=\"size-4 text-muted-foreground\" />\n ),\n time: formatRelativeTime(event.created_at, { style: 'short' }),\n exactTime: formatFriendlyDate(event.created_at),\n onOpenDocument: docId && doc ? () => openDocument(docId) : undefined,\n onSelect: () => {\n if (mailDraftId && openMail) {\n openMail({ draftId: mailDraftId })\n return\n }\n const target = messageActivity ? messageId : event.external_id\n // The deep link selects the thread the message is on (useConversationData).\n if (target) navigateToConversation(conversationId!, target)\n },\n }\n })\n const related = workflows\n .filter((workflow) => workflow.after_conversation_ext_id === conversationId)\n .map((workflow) => {\n const next = conversations.find(\n (conversation) => conversation.workflow_ext_id === workflow.external_id\n )\n return {\n id: workflow.external_id,\n label: next?.title || workflow.name,\n title: 'Starts when this thread is done',\n onSelect: () => {\n if (next) navigateToConversation(next.external_id)\n else openWorkflow?.(workflow.external_id)\n },\n }\n })\n // The run's workflow, opened in the builder: the same steps, as designed. Only where Workflows\n // is on (otherwise there is no page to open it on).\n const origin = openWorkflow\n ? workflows.find((workflow) => workflow.external_id === task?.workflow_ext_id)\n : undefined\n if (origin && openWorkflow)\n related.unshift({\n id: `origin-${origin.external_id}`,\n label: origin.name,\n title: 'Open the workflow in the builder',\n onSelect: () => openWorkflow(origin.external_id),\n })\n const source = workflows.find(\n (workflow) => workflow.external_id === task?.workflow_ext_id\n )?.after_conversation_ext_id\n if (source) {\n const before = conversations.find((conversation) => conversation.external_id === source)\n if (before)\n related.unshift({\n id: source,\n label: before.title || 'Previous thread',\n title: 'Started when this thread was done',\n onSelect: () => navigateToConversation(source),\n })\n }\n // Linked runs: the signals this thread's steps raised and the threads they started, and, for a\n // thread a signal started, the step and thread it came from.\n const links = linkedRunsFromActivity(activity.data as TaskActivityEvent[] | undefined)\n const threadName = (id: string, workflowId?: string) =>\n conversations.find((c) => c.external_id === id)?.title ||\n workflows.find((w) => w.external_id === workflowId)?.name ||\n 'Linked thread'\n const signals: WorkflowThreadSignal[] = links.raised.map((raised) => ({\n step: raised.step,\n signal: raised.signal,\n runs: raised.runs.map((run) => ({\n id: run.conversationId,\n label: threadName(run.conversationId, run.workflowId),\n onSelect: () => navigateToConversation(run.conversationId),\n })),\n }))\n let startedBy: WorkflowThreadOrigin | undefined\n if (links.startedBy) {\n const { conversationId: parentId, step, signal } = links.startedBy\n const parent = conversations.find((c) => c.external_id === parentId)\n const parentSteps = fromPlanSteps((parent?.plan?.steps ?? []) as TaskPlanStep[])\n startedBy = {\n stepTitle: parentSteps.find((s) => s.id === step)?.title ?? step ?? 'a step',\n threadTitle: parent?.title || 'another thread',\n signal,\n onSelect: () => navigateToConversation(parentId),\n }\n }\n return { activity, items, related, signals, startedBy }\n}\n","import { useCallback } from 'react'\nimport { useSwitchWorkspace } from '@arbidocs/react'\nimport { useOptionalConnection } from './ConnectionProvider'\n\n/**\n * Select a workspace in place, through the sign-in layer when there is one (else the host's own\n * session switch): the page on screen stays, unlike `openWorkspace`, which also shows the\n * workspace. Rejects when it could not be opened.\n */\nexport function useSelectWorkspace(): (id: string) => Promise<void> {\n const connection = useOptionalConnection()\n const { switchWorkspace } = useSwitchWorkspace()\n return useCallback(\n async (id: string) => {\n if (connection) return connection.setWorkspace(id)\n if (!(await switchWorkspace({ id }))) throw new Error('Could not open the workspace')\n },\n [connection, switchWorkspace]\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/connection/tasks/useConnectedThreadActivity.tsx","../src/connection/useSelectWorkspace.ts"],"names":["stepKindOf","STEP_KIND_ICONS","jsx","useWorkflows","useConversationItems","useWorkspaceUsers","useDocuments","useConversationActivity","useConversationData","useBlocksEnvironment","useOpenWorkflow","useArbiSessionState","latestMessageTime","isSupersededStop","getUserDisplayName","fromPlanSteps","compactThreadActivity","splitDocRef","getDocumentTitle","unnotifiedMentions","parseCallLogDetail","ThreadCallLogCard","formatRelativeTime","RecordingCard","notifiedLabel","AssistantEntity","DocumentUser","Clock","formatFriendlyDate","linkedRunsFromActivity","useOptionalConnection","useSwitchWorkspace","useCallback"],"mappings":"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","file":"chunk-XTCNETMI.cjs","sourcesContent":["import {\n formatFriendlyDate,\n getDocumentTitle,\n getUserDisplayName,\n formatRelativeTime,\n} from '@arbidocs/react/ui'\nimport { Clock } from 'lucide-react'\nimport {\n useConversationActivity,\n useWorkflows,\n useDocuments,\n useWorkspaceUsers,\n useArbiSessionState,\n useConversationData,\n useConversationItems,\n} from '@arbidocs/react'\nimport { STEP_KIND_ICONS, stepKindOf } from '../../agents/workflows/stepKinds'\nimport { compactThreadActivity } from '../../agents/tasks/compact-thread-activity'\nimport { fromPlanSteps, type TaskPlanStep } from '../../agents/workflows/planSteps'\nimport { splitDocRef, type WorkflowStepPhase } from '../../agents/workflows/run'\nimport { type WorkflowStep } from '../../agents/workflows/types'\nimport { linkedRunsFromActivity } from '../../agents/tasks/linkedRuns'\nimport { type TaskActivityEvent } from '../../agents/tasks/TaskActivityTimeline'\nimport {\n type WorkflowThreadOrigin,\n type WorkflowThreadSignal,\n} from '../../agents/tasks/WorkflowThreadStrip'\nimport { ThreadCallLogCard } from '../../calls/connected/ThreadCallLogCard'\nimport { RecordingCard } from '../../calls/connected/RecordingCard'\nimport { parseCallLogDetail } from '../../calls/call-cards'\nimport { AssistantEntity } from '../../agents/tasks/AssistantEntity'\nimport {\n isSupersededStop,\n latestMessageTime,\n notifiedLabel,\n unnotifiedMentions,\n} from '../../agents/tasks/taskHelpers'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { useOpenWorkflow } from '../workflows/useOpenWorkflow'\nimport { DocumentUser } from '../files/fields/DocumentUser'\n\n/** The phase a step event puts its step in, for its chip in the transcript. */\nconst STEP_EVENT_PHASES: Record<string, WorkflowStepPhase> = {\n // A past \"started\" is not still running: the step's own chip (on the bar) says where it is now.\n step_started: 'ready',\n step_waiting: 'waiting',\n step_progress: 'waiting',\n step_done: 'done',\n step_skipped: 'skipped',\n step_failed: 'failed',\n step_sent_back: 'ready',\n}\n\n/** A step event's chip in the transcript: its step's kind and icon, the phase the event set. */\nfunction stepChipOf(\n step: WorkflowStep,\n eventKind: string,\n document?: { name: string; onOpen: () => void }\n) {\n const phase = STEP_EVENT_PHASES[eventKind]\n if (!phase) return undefined\n const kind = stepKindOf(step)\n const KindIcon = STEP_KIND_ICONS[kind]\n return { kind, phase, icon: <KindIcon />, document }\n}\n\n/**\n * A thread's persisted history, as its top bar's ribbon and its transcript show it: each entry with\n * its actor, its step chip, the document or email it is about and where a click goes; the threads\n * linked to it (what started it, what it starts); the signals its steps raised. Documents,\n * threads, email drafts and workflows open through the host's environment.\n */\nexport function useConnectedThreadActivity(conversationId: string | null | undefined) {\n const { data: workflows = [] } = useWorkflows()\n const { conversations } = useConversationItems()\n const { data: members = [] } = useWorkspaceUsers()\n const { data: docs = [] } = useDocuments()\n const activity = useConversationActivity(conversationId ?? undefined, { live: true })\n const { messageHistory } = useConversationData()\n const environment = useBlocksEnvironment()\n const { openDocument, openMail } = environment\n const navigateToConversation = (id: string, messageId?: string) =>\n environment.openConversation(id, messageId ? { messageId } : undefined)\n // The host's Workflows page, while it has one (absent: a workflow has nowhere to open).\n const openWorkflow = useOpenWorkflow()\n const workspaceExtId = useArbiSessionState((s) => s.workspaceId)\n const task = conversations.find((c) => c.external_id === conversationId)\n const latestMessageAt = latestMessageTime(messageHistory)\n const events = ((activity.data ?? []) as TaskActivityEvent[]).filter(\n (event) => !isSupersededStop(event, latestMessageAt)\n )\n const personName = (extId: string) => {\n const person = members.find((m) => m.user.external_id === extId)?.user\n return person ? getUserDisplayName(person) : 'someone'\n }\n // The run's steps, from its plan: step events are named after their step and drawn as its chip.\n const planSteps = fromPlanSteps((task?.plan?.steps ?? []) as TaskPlanStep[])\n const entries = compactThreadActivity(events, (id) => planSteps.find((s) => s.id === id)?.title)\n const items = entries.map(({ event, label, recipients }) => {\n const messageActivity = [\n 'created',\n 'participant_joined',\n 'assistant_responded',\n 'assistant_stopped',\n ].includes(event.kind)\n // A stop is about the assistant's turn (the event names no actor), so it is shown as ARBI's.\n const eventStep =\n event.kind.startsWith('step_') && typeof event.detail?.step === 'string'\n ? planSteps.find((s) => s.id === event.detail?.step)\n : undefined\n // A finished step's document (its latest version), one click from its chip in the transcript.\n const stepDocRef =\n event.kind === 'step_done' && Array.isArray(event.detail?.documents)\n ? (event.detail.documents as string[]).at(-1)\n : undefined\n const stepDocId = stepDocRef ? splitDocRef(stepDocRef).id : undefined\n const stepDocRecord = stepDocId ? docs.find((d) => d.external_id === stepDocId) : undefined\n const stepDocument = stepDocId\n ? {\n name: stepDocRecord ? getDocumentTitle(stepDocRecord) : stepDocId,\n onOpen: () => openDocument(stepDocId),\n }\n : undefined\n // An AI step's progress is ARBI's, whoever started the run.\n const assistant =\n event.kind === 'assistant_responded' ||\n event.kind === 'assistant_stopped' ||\n event.detail?.assistant === true ||\n eventStep?.kind === 'agent'\n const member = members.find(\n (m) =>\n m.user.external_id ===\n (event.actor_ext_id ?? (event.kind === 'created' ? task?.created_by_ext_id : undefined))\n )?.user\n const name = assistant ? 'ARBI' : member ? getUserDisplayName(member) : 'System'\n const docId = typeof event.detail?.doc_ext_id === 'string' ? event.detail.doc_ext_id : undefined\n const sourceMessage =\n typeof event.detail?.message_ext_id === 'string' ? event.detail.message_ext_id : undefined\n const messageId =\n sourceMessage ??\n [...messageHistory]\n .reverse()\n .find((message) => Date.parse(message.created_at ?? '') <= Date.parse(event.created_at))\n ?.external_id ??\n messageHistory[0]?.external_id\n const doc = docId ? docs.find((d) => d.external_id === docId) : undefined\n // A draft email an agent left in the user's native mailbox: the entry opens it in Mail.\n const mailDraftId =\n event.kind === 'notified' &&\n event.detail?.event === 'mail_draft_ready' &&\n typeof event.detail?.mail_id === 'string'\n ? event.detail.mail_id\n : undefined\n // Say who a batch reached, and name any @mentioned person it did not, so nobody has to guess.\n const missed =\n event.kind === 'notified' && recipients.length\n ? unnotifiedMentions(\n messageHistory.find((message) => message.external_id === sourceMessage)?.mentions,\n recipients,\n event.actor_ext_id\n )\n : []\n // A thread call: the server's log card (live → Join, ended → summary + meeting chat).\n const callDetail = event.kind === 'call' ? parseCallLogDetail(event.detail) : null\n // A recording of the thread's call stopped: its Recording card (in a meeting thread).\n const recordingCall =\n event.kind === 'recording' && typeof event.detail?.call_ext_id === 'string'\n ? event.detail.call_ext_id\n : null\n const recordingId =\n typeof event.detail?.recording_ext_id === 'string' ? event.detail.recording_ext_id : null\n return {\n id: event.external_id,\n kind: event.kind,\n // A workflow step event: the step it is about (the thread's step strip places entries by it).\n step: typeof event.detail?.step === 'string' ? event.detail.step : undefined,\n createdAt: event.created_at,\n card: callDetail ? (\n <ThreadCallLogCard\n detail={callDetail}\n name={personName}\n workspaceExtId={workspaceExtId}\n time={formatRelativeTime(event.created_at, { style: 'short' })}\n />\n ) : recordingCall ? (\n <RecordingCard\n callExtId={recordingCall}\n recordingExtId={recordingId}\n title={task?.title}\n time={formatRelativeTime(event.created_at, { style: 'short' })}\n />\n ) : undefined,\n docId,\n docTitle: doc ? getDocumentTitle(doc) : undefined,\n label: mailDraftId\n ? 'Left a draft email'\n : event.kind === 'notified' && recipients.length\n ? notifiedLabel(recipients.map(personName), missed.map(personName))\n : label,\n description: [\n name,\n label,\n ...recipients.map((id) => {\n const person = members.find((m) => m.user.external_id === id)?.user\n return person ? getUserDisplayName(person) : id\n }),\n doc ? getDocumentTitle(doc) : null,\n ]\n .filter(Boolean)\n .join(' · '),\n actor: assistant ? 'assistant' : (member?.external_id ?? 'system'),\n stepChip: eventStep ? stepChipOf(eventStep, event.kind, stepDocument) : undefined,\n // No avatar tooltip: the entry is already a button (or titled row) that carries the same\n // details, and a tooltip trigger inside it would be a nested <button>.\n avatar: assistant ? (\n <AssistantEntity variant=\"icon\" size={20} showTooltip={false} />\n ) : member ? (\n <DocumentUser user={member} tooltip={false} />\n ) : (\n <Clock className=\"size-4 text-muted-foreground\" />\n ),\n time: formatRelativeTime(event.created_at, { style: 'short' }),\n exactTime: formatFriendlyDate(event.created_at),\n onOpenDocument: docId && doc ? () => openDocument(docId) : undefined,\n onSelect: () => {\n if (mailDraftId && openMail) {\n openMail({ draftId: mailDraftId })\n return\n }\n const target = messageActivity ? messageId : event.external_id\n // The deep link selects the thread the message is on (useConversationData).\n if (target) navigateToConversation(conversationId!, target)\n },\n }\n })\n const related = workflows\n .filter((workflow) => workflow.after_conversation_ext_id === conversationId)\n .map((workflow) => {\n const next = conversations.find(\n (conversation) => conversation.workflow_ext_id === workflow.external_id\n )\n return {\n id: workflow.external_id,\n label: next?.title || workflow.name,\n title: 'Starts when this thread is done',\n onSelect: () => {\n if (next) navigateToConversation(next.external_id)\n else openWorkflow?.(workflow.external_id)\n },\n }\n })\n // The run's workflow, opened in the builder: the same steps, as designed. Only where Workflows\n // is on (otherwise there is no page to open it on).\n const origin = openWorkflow\n ? workflows.find((workflow) => workflow.external_id === task?.workflow_ext_id)\n : undefined\n if (origin && openWorkflow)\n related.unshift({\n id: `origin-${origin.external_id}`,\n label: origin.name,\n title: 'Open the workflow in the builder',\n onSelect: () => openWorkflow(origin.external_id),\n })\n const source = workflows.find(\n (workflow) => workflow.external_id === task?.workflow_ext_id\n )?.after_conversation_ext_id\n if (source) {\n const before = conversations.find((conversation) => conversation.external_id === source)\n if (before)\n related.unshift({\n id: source,\n label: before.title || 'Previous thread',\n title: 'Started when this thread was done',\n onSelect: () => navigateToConversation(source),\n })\n }\n // Linked runs: the signals this thread's steps raised and the threads they started, and, for a\n // thread a signal started, the step and thread it came from.\n const links = linkedRunsFromActivity(activity.data as TaskActivityEvent[] | undefined)\n const threadName = (id: string, workflowId?: string) =>\n conversations.find((c) => c.external_id === id)?.title ||\n workflows.find((w) => w.external_id === workflowId)?.name ||\n 'Linked thread'\n const signals: WorkflowThreadSignal[] = links.raised.map((raised) => ({\n step: raised.step,\n signal: raised.signal,\n runs: raised.runs.map((run) => ({\n id: run.conversationId,\n label: threadName(run.conversationId, run.workflowId),\n onSelect: () => navigateToConversation(run.conversationId),\n })),\n }))\n let startedBy: WorkflowThreadOrigin | undefined\n if (links.startedBy) {\n const { conversationId: parentId, step, signal } = links.startedBy\n const parent = conversations.find((c) => c.external_id === parentId)\n const parentSteps = fromPlanSteps((parent?.plan?.steps ?? []) as TaskPlanStep[])\n startedBy = {\n stepTitle: parentSteps.find((s) => s.id === step)?.title ?? step ?? 'a step',\n threadTitle: parent?.title || 'another thread',\n signal,\n onSelect: () => navigateToConversation(parentId),\n }\n }\n return { activity, items, related, signals, startedBy }\n}\n","import { useCallback } from 'react'\nimport { useSwitchWorkspace } from '@arbidocs/react'\nimport { useOptionalConnection } from './ConnectionProvider'\n\n/**\n * Select a workspace in place, through the sign-in layer when there is one (else the host's own\n * session switch): the page on screen stays, unlike `openWorkspace`, which also shows the\n * workspace. Rejects when it could not be opened.\n */\nexport function useSelectWorkspace(): (id: string) => Promise<void> {\n const connection = useOptionalConnection()\n const { switchWorkspace } = useSwitchWorkspace()\n return useCallback(\n async (id: string) => {\n if (connection) return connection.setWorkspace(id)\n if (!(await switchWorkspace({ id }))) throw new Error('Could not open the workspace')\n },\n [connection, switchWorkspace]\n )\n}\n"]}
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
import { DocumentUser } from './chunk-5T5CM7UC.js';
|
|
3
3
|
import { useOpenWorkflow } from './chunk-K2U5BCQ2.js';
|
|
4
4
|
import { latestMessageTime, isSupersededStop, fromPlanSteps, compactThreadActivity, unnotifiedMentions, AssistantEntity, notifiedLabel, linkedRunsFromActivity } from './chunk-RIBQCTBQ.js';
|
|
5
|
-
import { stepKindOf, STEP_KIND_ICONS } from './chunk-U6C4R6J4.js';
|
|
6
|
-
import { splitDocRef } from './chunk-MMSBCSGH.js';
|
|
7
5
|
import { ThreadCallLogCard, RecordingCard } from './chunk-SOLSDXOZ.js';
|
|
8
6
|
import { parseCallLogDetail } from './chunk-46IG4KY7.js';
|
|
9
7
|
import { useOptionalConnection } from './chunk-JVJOIZNN.js';
|
|
8
|
+
import { stepKindOf, STEP_KIND_ICONS } from './chunk-U6C4R6J4.js';
|
|
9
|
+
import { splitDocRef } from './chunk-MMSBCSGH.js';
|
|
10
10
|
import { useBlocksEnvironment } from './chunk-3KA6GZUW.js';
|
|
11
11
|
import { getDocumentTitle, getUserDisplayName, formatFriendlyDate, formatRelativeTime } from '@arbidocs/react/ui';
|
|
12
12
|
import { Clock } from 'lucide-react';
|
|
@@ -213,5 +213,5 @@ function useSelectWorkspace() {
|
|
|
213
213
|
}
|
|
214
214
|
|
|
215
215
|
export { useConnectedThreadActivity, useSelectWorkspace };
|
|
216
|
-
//# sourceMappingURL=chunk-
|
|
217
|
-
//# sourceMappingURL=chunk-
|
|
216
|
+
//# sourceMappingURL=chunk-Y7UHKEVT.js.map
|
|
217
|
+
//# sourceMappingURL=chunk-Y7UHKEVT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection/tasks/useConnectedThreadActivity.tsx","../src/connection/useSelectWorkspace.ts"],"names":[],"mappings":"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","file":"chunk-4HMJQ66B.js","sourcesContent":["import {\n formatFriendlyDate,\n getDocumentTitle,\n getUserDisplayName,\n formatRelativeTime,\n} from '@arbidocs/react/ui'\nimport { Clock } from 'lucide-react'\nimport {\n useConversationActivity,\n useWorkflows,\n useDocuments,\n useWorkspaceUsers,\n useArbiSessionState,\n useConversationData,\n useConversationItems,\n} from '@arbidocs/react'\nimport { STEP_KIND_ICONS, stepKindOf } from '../../agents/workflows/stepKinds'\nimport { compactThreadActivity } from '../../agents/tasks/compact-thread-activity'\nimport { fromPlanSteps, type TaskPlanStep } from '../../agents/workflows/planSteps'\nimport { splitDocRef, type WorkflowStepPhase } from '../../agents/workflows/run'\nimport { type WorkflowStep } from '../../agents/workflows/types'\nimport { linkedRunsFromActivity } from '../../agents/tasks/linkedRuns'\nimport { type TaskActivityEvent } from '../../agents/tasks/TaskActivityTimeline'\nimport {\n type WorkflowThreadOrigin,\n type WorkflowThreadSignal,\n} from '../../agents/tasks/WorkflowThreadStrip'\nimport { ThreadCallLogCard } from '../../calls/connected/ThreadCallLogCard'\nimport { RecordingCard } from '../../calls/connected/RecordingCard'\nimport { parseCallLogDetail } from '../../calls/call-cards'\nimport { AssistantEntity } from '../../agents/tasks/AssistantEntity'\nimport {\n isSupersededStop,\n latestMessageTime,\n notifiedLabel,\n unnotifiedMentions,\n} from '../../agents/tasks/taskHelpers'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { useOpenWorkflow } from '../workflows/useOpenWorkflow'\nimport { DocumentUser } from '../files/fields/DocumentUser'\n\n/** The phase a step event puts its step in, for its chip in the transcript. */\nconst STEP_EVENT_PHASES: Record<string, WorkflowStepPhase> = {\n // A past \"started\" is not still running: the step's own chip (on the bar) says where it is now.\n step_started: 'ready',\n step_waiting: 'waiting',\n step_progress: 'waiting',\n step_done: 'done',\n step_skipped: 'skipped',\n step_failed: 'failed',\n step_sent_back: 'ready',\n}\n\n/** A step event's chip in the transcript: its step's kind and icon, the phase the event set. */\nfunction stepChipOf(\n step: WorkflowStep,\n eventKind: string,\n document?: { name: string; onOpen: () => void }\n) {\n const phase = STEP_EVENT_PHASES[eventKind]\n if (!phase) return undefined\n const kind = stepKindOf(step)\n const KindIcon = STEP_KIND_ICONS[kind]\n return { kind, phase, icon: <KindIcon />, document }\n}\n\n/**\n * A thread's persisted history, as its top bar's ribbon and its transcript show it: each entry with\n * its actor, its step chip, the document or email it is about and where a click goes; the threads\n * linked to it (what started it, what it starts); the signals its steps raised. Documents,\n * threads, email drafts and workflows open through the host's environment.\n */\nexport function useConnectedThreadActivity(conversationId: string | null | undefined) {\n const { data: workflows = [] } = useWorkflows()\n const { conversations } = useConversationItems()\n const { data: members = [] } = useWorkspaceUsers()\n const { data: docs = [] } = useDocuments()\n const activity = useConversationActivity(conversationId ?? undefined, { live: true })\n const { messageHistory } = useConversationData()\n const environment = useBlocksEnvironment()\n const { openDocument, openMail } = environment\n const navigateToConversation = (id: string, messageId?: string) =>\n environment.openConversation(id, messageId ? { messageId } : undefined)\n // The host's Workflows page, while it has one (absent: a workflow has nowhere to open).\n const openWorkflow = useOpenWorkflow()\n const workspaceExtId = useArbiSessionState((s) => s.workspaceId)\n const task = conversations.find((c) => c.external_id === conversationId)\n const latestMessageAt = latestMessageTime(messageHistory)\n const events = ((activity.data ?? []) as TaskActivityEvent[]).filter(\n (event) => !isSupersededStop(event, latestMessageAt)\n )\n const personName = (extId: string) => {\n const person = members.find((m) => m.user.external_id === extId)?.user\n return person ? getUserDisplayName(person) : 'someone'\n }\n // The run's steps, from its plan: step events are named after their step and drawn as its chip.\n const planSteps = fromPlanSteps((task?.plan?.steps ?? []) as TaskPlanStep[])\n const entries = compactThreadActivity(events, (id) => planSteps.find((s) => s.id === id)?.title)\n const items = entries.map(({ event, label, recipients }) => {\n const messageActivity = [\n 'created',\n 'participant_joined',\n 'assistant_responded',\n 'assistant_stopped',\n ].includes(event.kind)\n // A stop is about the assistant's turn (the event names no actor), so it is shown as ARBI's.\n const eventStep =\n event.kind.startsWith('step_') && typeof event.detail?.step === 'string'\n ? planSteps.find((s) => s.id === event.detail?.step)\n : undefined\n // A finished step's document (its latest version), one click from its chip in the transcript.\n const stepDocRef =\n event.kind === 'step_done' && Array.isArray(event.detail?.documents)\n ? (event.detail.documents as string[]).at(-1)\n : undefined\n const stepDocId = stepDocRef ? splitDocRef(stepDocRef).id : undefined\n const stepDocRecord = stepDocId ? docs.find((d) => d.external_id === stepDocId) : undefined\n const stepDocument = stepDocId\n ? {\n name: stepDocRecord ? getDocumentTitle(stepDocRecord) : stepDocId,\n onOpen: () => openDocument(stepDocId),\n }\n : undefined\n // An AI step's progress is ARBI's, whoever started the run.\n const assistant =\n event.kind === 'assistant_responded' ||\n event.kind === 'assistant_stopped' ||\n event.detail?.assistant === true ||\n eventStep?.kind === 'agent'\n const member = members.find(\n (m) =>\n m.user.external_id ===\n (event.actor_ext_id ?? (event.kind === 'created' ? task?.created_by_ext_id : undefined))\n )?.user\n const name = assistant ? 'ARBI' : member ? getUserDisplayName(member) : 'System'\n const docId = typeof event.detail?.doc_ext_id === 'string' ? event.detail.doc_ext_id : undefined\n const sourceMessage =\n typeof event.detail?.message_ext_id === 'string' ? event.detail.message_ext_id : undefined\n const messageId =\n sourceMessage ??\n [...messageHistory]\n .reverse()\n .find((message) => Date.parse(message.created_at ?? '') <= Date.parse(event.created_at))\n ?.external_id ??\n messageHistory[0]?.external_id\n const doc = docId ? docs.find((d) => d.external_id === docId) : undefined\n // A draft email an agent left in the user's native mailbox: the entry opens it in Mail.\n const mailDraftId =\n event.kind === 'notified' &&\n event.detail?.event === 'mail_draft_ready' &&\n typeof event.detail?.mail_id === 'string'\n ? event.detail.mail_id\n : undefined\n // Say who a batch reached, and name any @mentioned person it did not, so nobody has to guess.\n const missed =\n event.kind === 'notified' && recipients.length\n ? unnotifiedMentions(\n messageHistory.find((message) => message.external_id === sourceMessage)?.mentions,\n recipients,\n event.actor_ext_id\n )\n : []\n // A thread call: the server's log card (live → Join, ended → summary + meeting chat).\n const callDetail = event.kind === 'call' ? parseCallLogDetail(event.detail) : null\n // A recording of the thread's call stopped: its Recording card (in a meeting thread).\n const recordingCall =\n event.kind === 'recording' && typeof event.detail?.call_ext_id === 'string'\n ? event.detail.call_ext_id\n : null\n const recordingId =\n typeof event.detail?.recording_ext_id === 'string' ? event.detail.recording_ext_id : null\n return {\n id: event.external_id,\n kind: event.kind,\n // A workflow step event: the step it is about (the thread's step strip places entries by it).\n step: typeof event.detail?.step === 'string' ? event.detail.step : undefined,\n createdAt: event.created_at,\n card: callDetail ? (\n <ThreadCallLogCard\n detail={callDetail}\n name={personName}\n workspaceExtId={workspaceExtId}\n time={formatRelativeTime(event.created_at, { style: 'short' })}\n />\n ) : recordingCall ? (\n <RecordingCard\n callExtId={recordingCall}\n recordingExtId={recordingId}\n title={task?.title}\n time={formatRelativeTime(event.created_at, { style: 'short' })}\n />\n ) : undefined,\n docId,\n docTitle: doc ? getDocumentTitle(doc) : undefined,\n label: mailDraftId\n ? 'Left a draft email'\n : event.kind === 'notified' && recipients.length\n ? notifiedLabel(recipients.map(personName), missed.map(personName))\n : label,\n description: [\n name,\n label,\n ...recipients.map((id) => {\n const person = members.find((m) => m.user.external_id === id)?.user\n return person ? getUserDisplayName(person) : id\n }),\n doc ? getDocumentTitle(doc) : null,\n ]\n .filter(Boolean)\n .join(' · '),\n actor: assistant ? 'assistant' : (member?.external_id ?? 'system'),\n stepChip: eventStep ? stepChipOf(eventStep, event.kind, stepDocument) : undefined,\n // No avatar tooltip: the entry is already a button (or titled row) that carries the same\n // details, and a tooltip trigger inside it would be a nested <button>.\n avatar: assistant ? (\n <AssistantEntity variant=\"icon\" size={20} showTooltip={false} />\n ) : member ? (\n <DocumentUser user={member} tooltip={false} />\n ) : (\n <Clock className=\"size-4 text-muted-foreground\" />\n ),\n time: formatRelativeTime(event.created_at, { style: 'short' }),\n exactTime: formatFriendlyDate(event.created_at),\n onOpenDocument: docId && doc ? () => openDocument(docId) : undefined,\n onSelect: () => {\n if (mailDraftId && openMail) {\n openMail({ draftId: mailDraftId })\n return\n }\n const target = messageActivity ? messageId : event.external_id\n // The deep link selects the thread the message is on (useConversationData).\n if (target) navigateToConversation(conversationId!, target)\n },\n }\n })\n const related = workflows\n .filter((workflow) => workflow.after_conversation_ext_id === conversationId)\n .map((workflow) => {\n const next = conversations.find(\n (conversation) => conversation.workflow_ext_id === workflow.external_id\n )\n return {\n id: workflow.external_id,\n label: next?.title || workflow.name,\n title: 'Starts when this thread is done',\n onSelect: () => {\n if (next) navigateToConversation(next.external_id)\n else openWorkflow?.(workflow.external_id)\n },\n }\n })\n // The run's workflow, opened in the builder: the same steps, as designed. Only where Workflows\n // is on (otherwise there is no page to open it on).\n const origin = openWorkflow\n ? workflows.find((workflow) => workflow.external_id === task?.workflow_ext_id)\n : undefined\n if (origin && openWorkflow)\n related.unshift({\n id: `origin-${origin.external_id}`,\n label: origin.name,\n title: 'Open the workflow in the builder',\n onSelect: () => openWorkflow(origin.external_id),\n })\n const source = workflows.find(\n (workflow) => workflow.external_id === task?.workflow_ext_id\n )?.after_conversation_ext_id\n if (source) {\n const before = conversations.find((conversation) => conversation.external_id === source)\n if (before)\n related.unshift({\n id: source,\n label: before.title || 'Previous thread',\n title: 'Started when this thread was done',\n onSelect: () => navigateToConversation(source),\n })\n }\n // Linked runs: the signals this thread's steps raised and the threads they started, and, for a\n // thread a signal started, the step and thread it came from.\n const links = linkedRunsFromActivity(activity.data as TaskActivityEvent[] | undefined)\n const threadName = (id: string, workflowId?: string) =>\n conversations.find((c) => c.external_id === id)?.title ||\n workflows.find((w) => w.external_id === workflowId)?.name ||\n 'Linked thread'\n const signals: WorkflowThreadSignal[] = links.raised.map((raised) => ({\n step: raised.step,\n signal: raised.signal,\n runs: raised.runs.map((run) => ({\n id: run.conversationId,\n label: threadName(run.conversationId, run.workflowId),\n onSelect: () => navigateToConversation(run.conversationId),\n })),\n }))\n let startedBy: WorkflowThreadOrigin | undefined\n if (links.startedBy) {\n const { conversationId: parentId, step, signal } = links.startedBy\n const parent = conversations.find((c) => c.external_id === parentId)\n const parentSteps = fromPlanSteps((parent?.plan?.steps ?? []) as TaskPlanStep[])\n startedBy = {\n stepTitle: parentSteps.find((s) => s.id === step)?.title ?? step ?? 'a step',\n threadTitle: parent?.title || 'another thread',\n signal,\n onSelect: () => navigateToConversation(parentId),\n }\n }\n return { activity, items, related, signals, startedBy }\n}\n","import { useCallback } from 'react'\nimport { useSwitchWorkspace } from '@arbidocs/react'\nimport { useOptionalConnection } from './ConnectionProvider'\n\n/**\n * Select a workspace in place, through the sign-in layer when there is one (else the host's own\n * session switch): the page on screen stays, unlike `openWorkspace`, which also shows the\n * workspace. Rejects when it could not be opened.\n */\nexport function useSelectWorkspace(): (id: string) => Promise<void> {\n const connection = useOptionalConnection()\n const { switchWorkspace } = useSwitchWorkspace()\n return useCallback(\n async (id: string) => {\n if (connection) return connection.setWorkspace(id)\n if (!(await switchWorkspace({ id }))) throw new Error('Could not open the workspace')\n },\n [connection, switchWorkspace]\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/connection/tasks/useConnectedThreadActivity.tsx","../src/connection/useSelectWorkspace.ts"],"names":[],"mappings":"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","file":"chunk-Y7UHKEVT.js","sourcesContent":["import {\n formatFriendlyDate,\n getDocumentTitle,\n getUserDisplayName,\n formatRelativeTime,\n} from '@arbidocs/react/ui'\nimport { Clock } from 'lucide-react'\nimport {\n useConversationActivity,\n useWorkflows,\n useDocuments,\n useWorkspaceUsers,\n useArbiSessionState,\n useConversationData,\n useConversationItems,\n} from '@arbidocs/react'\nimport { STEP_KIND_ICONS, stepKindOf } from '../../agents/workflows/stepKinds'\nimport { compactThreadActivity } from '../../agents/tasks/compact-thread-activity'\nimport { fromPlanSteps, type TaskPlanStep } from '../../agents/workflows/planSteps'\nimport { splitDocRef, type WorkflowStepPhase } from '../../agents/workflows/run'\nimport { type WorkflowStep } from '../../agents/workflows/types'\nimport { linkedRunsFromActivity } from '../../agents/tasks/linkedRuns'\nimport { type TaskActivityEvent } from '../../agents/tasks/TaskActivityTimeline'\nimport {\n type WorkflowThreadOrigin,\n type WorkflowThreadSignal,\n} from '../../agents/tasks/WorkflowThreadStrip'\nimport { ThreadCallLogCard } from '../../calls/connected/ThreadCallLogCard'\nimport { RecordingCard } from '../../calls/connected/RecordingCard'\nimport { parseCallLogDetail } from '../../calls/call-cards'\nimport { AssistantEntity } from '../../agents/tasks/AssistantEntity'\nimport {\n isSupersededStop,\n latestMessageTime,\n notifiedLabel,\n unnotifiedMentions,\n} from '../../agents/tasks/taskHelpers'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { useOpenWorkflow } from '../workflows/useOpenWorkflow'\nimport { DocumentUser } from '../files/fields/DocumentUser'\n\n/** The phase a step event puts its step in, for its chip in the transcript. */\nconst STEP_EVENT_PHASES: Record<string, WorkflowStepPhase> = {\n // A past \"started\" is not still running: the step's own chip (on the bar) says where it is now.\n step_started: 'ready',\n step_waiting: 'waiting',\n step_progress: 'waiting',\n step_done: 'done',\n step_skipped: 'skipped',\n step_failed: 'failed',\n step_sent_back: 'ready',\n}\n\n/** A step event's chip in the transcript: its step's kind and icon, the phase the event set. */\nfunction stepChipOf(\n step: WorkflowStep,\n eventKind: string,\n document?: { name: string; onOpen: () => void }\n) {\n const phase = STEP_EVENT_PHASES[eventKind]\n if (!phase) return undefined\n const kind = stepKindOf(step)\n const KindIcon = STEP_KIND_ICONS[kind]\n return { kind, phase, icon: <KindIcon />, document }\n}\n\n/**\n * A thread's persisted history, as its top bar's ribbon and its transcript show it: each entry with\n * its actor, its step chip, the document or email it is about and where a click goes; the threads\n * linked to it (what started it, what it starts); the signals its steps raised. Documents,\n * threads, email drafts and workflows open through the host's environment.\n */\nexport function useConnectedThreadActivity(conversationId: string | null | undefined) {\n const { data: workflows = [] } = useWorkflows()\n const { conversations } = useConversationItems()\n const { data: members = [] } = useWorkspaceUsers()\n const { data: docs = [] } = useDocuments()\n const activity = useConversationActivity(conversationId ?? undefined, { live: true })\n const { messageHistory } = useConversationData()\n const environment = useBlocksEnvironment()\n const { openDocument, openMail } = environment\n const navigateToConversation = (id: string, messageId?: string) =>\n environment.openConversation(id, messageId ? { messageId } : undefined)\n // The host's Workflows page, while it has one (absent: a workflow has nowhere to open).\n const openWorkflow = useOpenWorkflow()\n const workspaceExtId = useArbiSessionState((s) => s.workspaceId)\n const task = conversations.find((c) => c.external_id === conversationId)\n const latestMessageAt = latestMessageTime(messageHistory)\n const events = ((activity.data ?? []) as TaskActivityEvent[]).filter(\n (event) => !isSupersededStop(event, latestMessageAt)\n )\n const personName = (extId: string) => {\n const person = members.find((m) => m.user.external_id === extId)?.user\n return person ? getUserDisplayName(person) : 'someone'\n }\n // The run's steps, from its plan: step events are named after their step and drawn as its chip.\n const planSteps = fromPlanSteps((task?.plan?.steps ?? []) as TaskPlanStep[])\n const entries = compactThreadActivity(events, (id) => planSteps.find((s) => s.id === id)?.title)\n const items = entries.map(({ event, label, recipients }) => {\n const messageActivity = [\n 'created',\n 'participant_joined',\n 'assistant_responded',\n 'assistant_stopped',\n ].includes(event.kind)\n // A stop is about the assistant's turn (the event names no actor), so it is shown as ARBI's.\n const eventStep =\n event.kind.startsWith('step_') && typeof event.detail?.step === 'string'\n ? planSteps.find((s) => s.id === event.detail?.step)\n : undefined\n // A finished step's document (its latest version), one click from its chip in the transcript.\n const stepDocRef =\n event.kind === 'step_done' && Array.isArray(event.detail?.documents)\n ? (event.detail.documents as string[]).at(-1)\n : undefined\n const stepDocId = stepDocRef ? splitDocRef(stepDocRef).id : undefined\n const stepDocRecord = stepDocId ? docs.find((d) => d.external_id === stepDocId) : undefined\n const stepDocument = stepDocId\n ? {\n name: stepDocRecord ? getDocumentTitle(stepDocRecord) : stepDocId,\n onOpen: () => openDocument(stepDocId),\n }\n : undefined\n // An AI step's progress is ARBI's, whoever started the run.\n const assistant =\n event.kind === 'assistant_responded' ||\n event.kind === 'assistant_stopped' ||\n event.detail?.assistant === true ||\n eventStep?.kind === 'agent'\n const member = members.find(\n (m) =>\n m.user.external_id ===\n (event.actor_ext_id ?? (event.kind === 'created' ? task?.created_by_ext_id : undefined))\n )?.user\n const name = assistant ? 'ARBI' : member ? getUserDisplayName(member) : 'System'\n const docId = typeof event.detail?.doc_ext_id === 'string' ? event.detail.doc_ext_id : undefined\n const sourceMessage =\n typeof event.detail?.message_ext_id === 'string' ? event.detail.message_ext_id : undefined\n const messageId =\n sourceMessage ??\n [...messageHistory]\n .reverse()\n .find((message) => Date.parse(message.created_at ?? '') <= Date.parse(event.created_at))\n ?.external_id ??\n messageHistory[0]?.external_id\n const doc = docId ? docs.find((d) => d.external_id === docId) : undefined\n // A draft email an agent left in the user's native mailbox: the entry opens it in Mail.\n const mailDraftId =\n event.kind === 'notified' &&\n event.detail?.event === 'mail_draft_ready' &&\n typeof event.detail?.mail_id === 'string'\n ? event.detail.mail_id\n : undefined\n // Say who a batch reached, and name any @mentioned person it did not, so nobody has to guess.\n const missed =\n event.kind === 'notified' && recipients.length\n ? unnotifiedMentions(\n messageHistory.find((message) => message.external_id === sourceMessage)?.mentions,\n recipients,\n event.actor_ext_id\n )\n : []\n // A thread call: the server's log card (live → Join, ended → summary + meeting chat).\n const callDetail = event.kind === 'call' ? parseCallLogDetail(event.detail) : null\n // A recording of the thread's call stopped: its Recording card (in a meeting thread).\n const recordingCall =\n event.kind === 'recording' && typeof event.detail?.call_ext_id === 'string'\n ? event.detail.call_ext_id\n : null\n const recordingId =\n typeof event.detail?.recording_ext_id === 'string' ? event.detail.recording_ext_id : null\n return {\n id: event.external_id,\n kind: event.kind,\n // A workflow step event: the step it is about (the thread's step strip places entries by it).\n step: typeof event.detail?.step === 'string' ? event.detail.step : undefined,\n createdAt: event.created_at,\n card: callDetail ? (\n <ThreadCallLogCard\n detail={callDetail}\n name={personName}\n workspaceExtId={workspaceExtId}\n time={formatRelativeTime(event.created_at, { style: 'short' })}\n />\n ) : recordingCall ? (\n <RecordingCard\n callExtId={recordingCall}\n recordingExtId={recordingId}\n title={task?.title}\n time={formatRelativeTime(event.created_at, { style: 'short' })}\n />\n ) : undefined,\n docId,\n docTitle: doc ? getDocumentTitle(doc) : undefined,\n label: mailDraftId\n ? 'Left a draft email'\n : event.kind === 'notified' && recipients.length\n ? notifiedLabel(recipients.map(personName), missed.map(personName))\n : label,\n description: [\n name,\n label,\n ...recipients.map((id) => {\n const person = members.find((m) => m.user.external_id === id)?.user\n return person ? getUserDisplayName(person) : id\n }),\n doc ? getDocumentTitle(doc) : null,\n ]\n .filter(Boolean)\n .join(' · '),\n actor: assistant ? 'assistant' : (member?.external_id ?? 'system'),\n stepChip: eventStep ? stepChipOf(eventStep, event.kind, stepDocument) : undefined,\n // No avatar tooltip: the entry is already a button (or titled row) that carries the same\n // details, and a tooltip trigger inside it would be a nested <button>.\n avatar: assistant ? (\n <AssistantEntity variant=\"icon\" size={20} showTooltip={false} />\n ) : member ? (\n <DocumentUser user={member} tooltip={false} />\n ) : (\n <Clock className=\"size-4 text-muted-foreground\" />\n ),\n time: formatRelativeTime(event.created_at, { style: 'short' }),\n exactTime: formatFriendlyDate(event.created_at),\n onOpenDocument: docId && doc ? () => openDocument(docId) : undefined,\n onSelect: () => {\n if (mailDraftId && openMail) {\n openMail({ draftId: mailDraftId })\n return\n }\n const target = messageActivity ? messageId : event.external_id\n // The deep link selects the thread the message is on (useConversationData).\n if (target) navigateToConversation(conversationId!, target)\n },\n }\n })\n const related = workflows\n .filter((workflow) => workflow.after_conversation_ext_id === conversationId)\n .map((workflow) => {\n const next = conversations.find(\n (conversation) => conversation.workflow_ext_id === workflow.external_id\n )\n return {\n id: workflow.external_id,\n label: next?.title || workflow.name,\n title: 'Starts when this thread is done',\n onSelect: () => {\n if (next) navigateToConversation(next.external_id)\n else openWorkflow?.(workflow.external_id)\n },\n }\n })\n // The run's workflow, opened in the builder: the same steps, as designed. Only where Workflows\n // is on (otherwise there is no page to open it on).\n const origin = openWorkflow\n ? workflows.find((workflow) => workflow.external_id === task?.workflow_ext_id)\n : undefined\n if (origin && openWorkflow)\n related.unshift({\n id: `origin-${origin.external_id}`,\n label: origin.name,\n title: 'Open the workflow in the builder',\n onSelect: () => openWorkflow(origin.external_id),\n })\n const source = workflows.find(\n (workflow) => workflow.external_id === task?.workflow_ext_id\n )?.after_conversation_ext_id\n if (source) {\n const before = conversations.find((conversation) => conversation.external_id === source)\n if (before)\n related.unshift({\n id: source,\n label: before.title || 'Previous thread',\n title: 'Started when this thread was done',\n onSelect: () => navigateToConversation(source),\n })\n }\n // Linked runs: the signals this thread's steps raised and the threads they started, and, for a\n // thread a signal started, the step and thread it came from.\n const links = linkedRunsFromActivity(activity.data as TaskActivityEvent[] | undefined)\n const threadName = (id: string, workflowId?: string) =>\n conversations.find((c) => c.external_id === id)?.title ||\n workflows.find((w) => w.external_id === workflowId)?.name ||\n 'Linked thread'\n const signals: WorkflowThreadSignal[] = links.raised.map((raised) => ({\n step: raised.step,\n signal: raised.signal,\n runs: raised.runs.map((run) => ({\n id: run.conversationId,\n label: threadName(run.conversationId, run.workflowId),\n onSelect: () => navigateToConversation(run.conversationId),\n })),\n }))\n let startedBy: WorkflowThreadOrigin | undefined\n if (links.startedBy) {\n const { conversationId: parentId, step, signal } = links.startedBy\n const parent = conversations.find((c) => c.external_id === parentId)\n const parentSteps = fromPlanSteps((parent?.plan?.steps ?? []) as TaskPlanStep[])\n startedBy = {\n stepTitle: parentSteps.find((s) => s.id === step)?.title ?? step ?? 'a step',\n threadTitle: parent?.title || 'another thread',\n signal,\n onSelect: () => navigateToConversation(parentId),\n }\n }\n return { activity, items, related, signals, startedBy }\n}\n","import { useCallback } from 'react'\nimport { useSwitchWorkspace } from '@arbidocs/react'\nimport { useOptionalConnection } from './ConnectionProvider'\n\n/**\n * Select a workspace in place, through the sign-in layer when there is one (else the host's own\n * session switch): the page on screen stays, unlike `openWorkspace`, which also shows the\n * workspace. Rejects when it could not be opened.\n */\nexport function useSelectWorkspace(): (id: string) => Promise<void> {\n const connection = useOptionalConnection()\n const { switchWorkspace } = useSwitchWorkspace()\n return useCallback(\n async (id: string) => {\n if (connection) return connection.setWorkspace(id)\n if (!(await switchWorkspace({ id }))) throw new Error('Could not open the workspace')\n },\n [connection, switchWorkspace]\n )\n}\n"]}
|
|
@@ -119,11 +119,16 @@ function ProjectPicker({
|
|
|
119
119
|
}) {
|
|
120
120
|
const welcome = variant === "welcome";
|
|
121
121
|
const run = variant === "run";
|
|
122
|
+
const creating = react.useRef(false);
|
|
122
123
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
123
124
|
ui.Select,
|
|
124
125
|
{
|
|
125
|
-
value: run ? value : value ?? options[0]?.id,
|
|
126
|
-
onValueChange: (v) =>
|
|
126
|
+
value: run ? value ?? "" : value ?? options[0]?.id,
|
|
127
|
+
onValueChange: (v) => {
|
|
128
|
+
creating.current = v === CREATE_VALUE;
|
|
129
|
+
if (v === CREATE_VALUE) onCreate?.();
|
|
130
|
+
else onChange(v);
|
|
131
|
+
},
|
|
127
132
|
disabled: disabled || readOnly,
|
|
128
133
|
children: [
|
|
129
134
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -142,16 +147,27 @@ function ProjectPicker({
|
|
|
142
147
|
]
|
|
143
148
|
}
|
|
144
149
|
),
|
|
145
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
150
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
151
|
+
ui.SelectContent,
|
|
152
|
+
{
|
|
153
|
+
align: welcome ? "end" : run ? "start" : void 0,
|
|
154
|
+
onCloseAutoFocus: (e) => {
|
|
155
|
+
if (!creating.current) return;
|
|
156
|
+
creating.current = false;
|
|
157
|
+
e.preventDefault();
|
|
158
|
+
},
|
|
159
|
+
children: [
|
|
160
|
+
options.map((o) => /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: o.id, children: o.content }, o.id)),
|
|
161
|
+
onCreate && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
162
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.SelectSeparator, {}),
|
|
163
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: CREATE_VALUE, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5 text-primary", children: [
|
|
164
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "size-3.5" }),
|
|
165
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: labels.create })
|
|
166
|
+
] }) })
|
|
167
|
+
] })
|
|
168
|
+
]
|
|
169
|
+
}
|
|
170
|
+
)
|
|
155
171
|
]
|
|
156
172
|
}
|
|
157
173
|
);
|
|
@@ -270,5 +286,5 @@ exports.ProjectOptionRow = ProjectOptionRow;
|
|
|
270
286
|
exports.ProjectPicker = ProjectPicker;
|
|
271
287
|
exports.WorkspaceFieldsView = WorkspaceFieldsView;
|
|
272
288
|
exports.WorkspaceFormModal = WorkspaceFormModal;
|
|
273
|
-
//# sourceMappingURL=chunk-
|
|
274
|
-
//# sourceMappingURL=chunk-
|
|
289
|
+
//# sourceMappingURL=chunk-YZ6YOOTF.cjs.map
|
|
290
|
+
//# sourceMappingURL=chunk-YZ6YOOTF.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/workspaces/WorkspaceFormParts.tsx"],"names":["jsxs","cn","jsx","AlertCircle","entityNoun","getEntityLabel","Dialog","DialogContent","ModalHeader","Fragment","DialogTitle","DialogDescription","useRef","Select","SelectTrigger","FolderKanban","SelectValue","SelectContent","SelectItem","SelectSeparator","Plus","useId","useState","KeyValueRow","FileText","Input","AlignLeft","Globe","CreditCard"],"mappings":"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","file":"chunk-YZ6YOOTF.cjs","sourcesContent":["import { useId, useRef, useState, type ReactNode } from 'react'\nimport {\n AlertCircle,\n AlignLeft,\n CreditCard,\n FileText,\n FolderKanban,\n Globe,\n Plus,\n} from 'lucide-react'\nimport {\n cn,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n Input,\n Select,\n SelectContent,\n SelectItem,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n entityNoun,\n getEntityLabel,\n} from '@arbidocs/react/ui'\nimport { KeyValueRow } from '../home/KeyValueRow'\nimport { ModalHeader } from '../settings/ModalScaffold'\n\n/** Inline error strip of a form. */\nexport function FormErrorBanner({\n message,\n testId,\n className,\n id,\n}: {\n message: string\n testId?: string\n className?: string\n /** Lets a field point at this message with `aria-describedby`. */\n id?: string\n}) {\n return (\n <div\n id={id}\n role=\"alert\"\n data-slot=\"form-error\"\n data-testid={testId}\n className={cn(\n 'flex items-center gap-2 rounded-md border border-red-border bg-red-bg p-3 text-sm text-red-text',\n className\n )}\n >\n <AlertCircle className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n {message}\n </div>\n )\n}\n\n/** Right-aligned footer row of a form (Cancel + submit). */\nexport function FormActions({ className, children }: { className?: string; children: ReactNode }) {\n return (\n <div\n data-slot=\"form-actions\"\n className={cn('sticky bottom-0 flex justify-end gap-2 bg-background pt-2', className)}\n >\n {children}\n </div>\n )\n}\n\n/** Footer row of a modal body, separated by a rule. */\nexport function ModalActionRow({ children }: { children: ReactNode }) {\n return (\n <div\n data-slot=\"modal-action-row\"\n className=\"sticky bottom-0 -mx-6 -mb-6 flex flex-col-reverse gap-2 border-t border-border bg-background px-6 pb-6 pt-3 sm:flex-row sm:items-center sm:justify-end\"\n >\n {children}\n </div>\n )\n}\n\nexport interface WorkspaceFormModalProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n variant?: 'create' | 'welcome' | 'forProject'\n title?: ReactNode\n /** Icon before the title. */\n icon?: ReactNode\n /** Optional intro paragraph above the form (first-run welcome). */\n intro?: ReactNode\n testId?: string\n /** Visually hidden description. */\n description?: string\n children: ReactNode\n}\n\n/** Dialog frame of the create-workspace form: header, optional intro, scrolling body. */\nexport function WorkspaceFormModal({\n open,\n onOpenChange,\n variant = 'create',\n title,\n icon,\n intro,\n testId,\n description = `Create a new ${entityNoun('WORKSPACE')}`,\n children,\n}: WorkspaceFormModalProps) {\n const noun = entityNoun('WORKSPACE')\n const heading =\n title ??\n (variant === 'welcome'\n ? `Welcome — let's create your first ${noun}`\n : `Create New ${getEntityLabel('WORKSPACE')}`)\n const introduction =\n intro ??\n (variant === 'welcome'\n ? `A ${noun} is an encrypted vault for storing information and collaborating with AI. Give it a name to get started — you can always create more later.`\n : undefined)\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"sheet\"\n className=\"flex max-h-panel w-modal max-w-modal-vw flex-col overflow-hidden p-0\"\n data-testid={testId}\n >\n <ModalHeader>\n <ModalTitleRow icon={icon} title={heading} description={description} />\n </ModalHeader>\n <div className=\"min-h-0 flex-1 overflow-auto px-6 pb-6\">\n {introduction && <p className=\"pb-4 text-sm text-muted-foreground\">{introduction}</p>}\n {children}\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction ModalTitleRow({\n icon,\n title,\n description,\n}: {\n icon?: ReactNode\n title: ReactNode\n description: string\n}) {\n return (\n <>\n <DialogTitle>\n <div className=\"flex items-center gap-2\">\n {icon}\n <span>{title}</span>\n </div>\n </DialogTitle>\n <DialogDescription className=\"sr-only\">{description}</DialogDescription>\n </>\n )\n}\n\n/** One entry of the project picker: identity on the left, optional quota summary on the right. */\nexport function ProjectOptionRow({ identity, meta }: { identity: ReactNode; meta?: string }) {\n return (\n <div className=\"flex w-full min-w-0 items-center gap-2\">\n {identity}\n {meta && <span className=\"ml-auto truncate text-sm text-muted-foreground\">{meta}</span>}\n </div>\n )\n}\n\nexport interface ProjectPickerOption {\n id: string\n content: ReactNode\n}\n\nexport interface ProjectPickerProps {\n value?: string\n options: ProjectPickerOption[]\n onChange: (id: string) => void\n /**\n * `form` (default): the full-width field of the workspace form. `welcome`: the compact switcher\n * in the welcome dialog's quota header (muted pill, menu aligned to its end). `run`: where a\n * workflow run works (the run page's target), a taller field with the project mark, as wide as\n * a project's name needs on a desktop and the full width on a phone.\n */\n variant?: 'form' | 'welcome' | 'run'\n /** Adds a \"Create new project...\" entry. */\n onCreate?: () => void\n disabled?: boolean\n readOnly?: boolean\n className?: string\n labels?: { placeholder: string; create: string }\n /**\n * Trigger test id (default `workspace-project-select`, `welcome-modal-project-select` or\n * `workflow-run-project-select`).\n */\n testId?: string\n}\n\nconst CREATE_VALUE = '__create__'\n\n/** The one project picker: a workspace's owning project (optionally with a create entry), or the\n * welcome dialog's project switcher (`variant=\"welcome\"`). */\nexport function ProjectPicker({\n value,\n options,\n onChange,\n variant = 'form',\n onCreate,\n disabled,\n readOnly,\n className,\n labels = {\n placeholder: `Select ${entityNoun('PROJECT')}`,\n create: `Create new ${entityNoun('PROJECT')}...`,\n },\n testId,\n}: ProjectPickerProps) {\n const welcome = variant === 'welcome'\n const run = variant === 'run'\n // \"Create new\" hands focus to what it opens (a form's first field), not back to the trigger.\n const creating = useRef(false)\n return (\n <Select\n // A run starts on no project until one is chosen: the placeholder, not the first one (and\n // not the \"New project\" entry once that was chosen: its form is open below).\n value={run ? (value ?? '') : (value ?? options[0]?.id)}\n onValueChange={(v) => {\n creating.current = v === CREATE_VALUE\n if (v === CREATE_VALUE) onCreate?.()\n else onChange(v)\n }}\n disabled={disabled || readOnly}\n >\n <SelectTrigger\n className={cn(\n welcome &&\n 'h-7 w-auto max-w-[9.5rem] shrink-0 gap-1 border-none bg-muted px-2 text-xs font-medium pointer-coarse:h-11',\n run && 'h-10 w-full gap-2 sm:max-w-md pointer-coarse:h-11',\n className,\n readOnly && 'cursor-not-allowed'\n )}\n data-testid={\n testId ??\n (welcome\n ? 'welcome-modal-project-select'\n : run\n ? 'workflow-run-project-select'\n : 'workspace-project-select')\n }\n >\n {run && <FolderKanban className=\"size-4 shrink-0 text-muted-foreground\" aria-hidden />}\n {welcome ? (\n <SelectValue />\n ) : run ? (\n <span className=\"min-w-0 flex-1 truncate text-left\">\n <SelectValue placeholder={labels.placeholder} />\n </span>\n ) : (\n <SelectValue placeholder={labels.placeholder} />\n )}\n </SelectTrigger>\n <SelectContent\n align={welcome ? 'end' : run ? 'start' : undefined}\n onCloseAutoFocus={(e) => {\n if (!creating.current) return\n creating.current = false\n e.preventDefault()\n }}\n >\n {options.map((o) => (\n <SelectItem key={o.id} value={o.id}>\n {o.content}\n </SelectItem>\n ))}\n {onCreate && (\n <>\n <SelectSeparator />\n <SelectItem value={CREATE_VALUE}>\n <div className=\"flex items-center gap-1.5 text-primary\">\n <Plus className=\"size-3.5\" />\n <span>{labels.create}</span>\n </div>\n </SelectItem>\n </>\n )}\n </SelectContent>\n </Select>\n )\n}\n\nexport interface WorkspaceFieldsViewProps {\n /** `modal` (create flow) or `settings` (editing an existing workspace). */\n variant?: 'modal' | 'settings'\n name: string\n description: string\n onNameChange: (value: string) => void\n onDescriptionChange: (value: string) => void\n onNameBlur?: () => void\n onNameFocus?: () => void\n onDescriptionBlur?: () => void\n disabled?: boolean\n readOnly?: boolean\n maxNameLength?: number\n /** Id of the form's error message (a `FormErrorBanner id`): the name input is then `aria-invalid`\n * and described by it. */\n errorId?: string\n /** Content of the Visibility row (settings only); omit to hide the row. */\n visibility?: ReactNode\n /** Content of the Project row; omit to hide the row. */\n project?: ReactNode\n labels?: Partial<WorkspaceFieldsLabels>\n}\n\nexport interface WorkspaceFieldsLabels {\n readOnlyNotice: string\n name: string\n description: string\n visibility: string\n project: string\n over: (n: number) => string\n charsLeft: (n: number) => string\n}\n\nconst DEFAULT_LABELS: WorkspaceFieldsLabels = {\n readOnlyNotice: 'Read-only workspace',\n name: 'Name *',\n description: 'Description',\n visibility: 'Visibility',\n get project() {\n return getEntityLabel('PROJECT')\n },\n over: (n) => `${n} over`,\n charsLeft: (n) => `${n} chars left`,\n}\n\n/** Name / description / visibility / project rows shared by the create and settings forms. */\nexport function WorkspaceFieldsView({\n variant = 'modal',\n name,\n description,\n onNameChange,\n onDescriptionChange,\n onNameBlur,\n onNameFocus,\n onDescriptionBlur,\n disabled = false,\n readOnly = false,\n errorId,\n maxNameLength = 50,\n visibility,\n project,\n labels,\n}: WorkspaceFieldsViewProps) {\n const workspaceDescriptionId = useId()\n const workspaceNameId = useId()\n const l = { ...DEFAULT_LABELS, ...labels }\n const [nameFocused, setNameFocused] = useState(false)\n const isModal = variant === 'modal'\n const charsLeft = maxNameLength - name.length\n // The modal only surfaces the counter near the limit; settings shows it while focused.\n const counterVisible = !readOnly && nameFocused && (!isModal || charsLeft <= 10)\n const isDisabled = isModal ? disabled : disabled || readOnly\n\n return (\n <div className=\"space-y-1\" data-slot=\"workspace-fields\">\n {readOnly && (\n <div data-testid=\"workspace-form-readonly-notice\" className=\"sr-only\">\n {l.readOnlyNotice}\n </div>\n )}\n <KeyValueRow label={l.name} icon={<FileText size={14} />} htmlFor={workspaceNameId}>\n <div className=\"relative\">\n <Input\n id={workspaceNameId}\n type=\"text\"\n value={name}\n onChange={(e) => onNameChange(e.target.value)}\n onBlur={() => {\n setNameFocused(false)\n onNameBlur?.()\n }}\n onFocus={() => {\n setNameFocused(true)\n onNameFocus?.()\n }}\n maxLength={maxNameLength}\n readOnly={readOnly}\n disabled={isDisabled}\n className={cn(\n isModal ? 'bg-background' : 'capitalize',\n readOnly && 'cursor-not-allowed',\n 'pr-20'\n )}\n required\n aria-invalid={errorId ? true : undefined}\n aria-describedby={errorId}\n data-testid=\"workspace-form-name-input\"\n />\n {counterVisible && (\n <div\n className={cn(\n 'pointer-events-none absolute right-3 top-1/2 hidden -translate-y-1/2 text-sm lg:block',\n charsLeft < 0 ? 'text-red-text' : 'text-muted-foreground'\n )}\n >\n {charsLeft < 0 ? l.over(-charsLeft) : l.charsLeft(charsLeft)}\n </div>\n )}\n </div>\n </KeyValueRow>\n\n <KeyValueRow\n label={l.description}\n icon={<AlignLeft size={14} />}\n htmlFor={workspaceDescriptionId}\n >\n <Input\n id={workspaceDescriptionId}\n type=\"text\"\n dictate\n value={description}\n onChange={(e) => onDescriptionChange(e.target.value)}\n onBlur={onDescriptionBlur}\n readOnly={readOnly}\n disabled={isDisabled}\n className={cn(isModal && 'bg-background', readOnly && 'cursor-not-allowed')}\n data-testid=\"workspace-form-description-input\"\n />\n </KeyValueRow>\n\n {visibility && (\n <KeyValueRow label={l.visibility} icon={<Globe size={14} />}>\n {visibility}\n </KeyValueRow>\n )}\n {project && (\n <KeyValueRow label={l.project} icon={<CreditCard size={14} />}>\n {project}\n </KeyValueRow>\n )}\n </div>\n )\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { NativeDocxComparison } from './chunk-PGSBXD5U.js';
|
|
3
|
-
import { useConnectedNativeDocxAdapter } from './chunk-
|
|
3
|
+
import { useConnectedNativeDocxAdapter } from './chunk-42IVGYNL.js';
|
|
4
4
|
import { useDocuments, useDocumentsLoading } from '@arbidocs/react';
|
|
5
5
|
import { jsx } from 'react/jsx-runtime';
|
|
6
6
|
|
|
@@ -25,5 +25,5 @@ function ConnectedNativeDocxComparison({
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
export { ConnectedNativeDocxComparison };
|
|
28
|
-
//# sourceMappingURL=chunk-
|
|
29
|
-
//# sourceMappingURL=chunk-
|
|
28
|
+
//# sourceMappingURL=chunk-Z4IPTLRS.js.map
|
|
29
|
+
//# sourceMappingURL=chunk-Z4IPTLRS.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection/docx/ConnectedNativeDocxComparison.tsx"],"names":[],"mappings":";;;;;AAYO,SAAS,6BAAA,CAA8B;AAAA,EAC5C,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,MAAM,OAAA,GAAU,8BAA8B,WAAW,CAAA;AACzD,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,SAAA,KAAc,YAAA,EAAa;AAEpD,EAAA,MAAM,YAAY,mBAAA,EAAoB;AAEtC,EAAA,IAAI,SAAA,IAAa,SAAA;AACf,IAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EAAoB,IAAA,EAAK,UAAS,QAAA,EAAA,gCAAA,EAEjD,CAAA;AAEJ,EAAA,uBACE,GAAA;AAAA,IAAC,oBAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,OAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAY,OAAA,CAAQ;AAAA;AAAA,GACtB;AAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/connection/docx/ConnectedNativeDocxComparison.tsx"],"names":[],"mappings":";;;;;AAYO,SAAS,6BAAA,CAA8B;AAAA,EAC5C,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,MAAM,OAAA,GAAU,8BAA8B,WAAW,CAAA;AACzD,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,SAAA,KAAc,YAAA,EAAa;AAEpD,EAAA,MAAM,YAAY,mBAAA,EAAoB;AAEtC,EAAA,IAAI,SAAA,IAAa,SAAA;AACf,IAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EAAoB,IAAA,EAAK,UAAS,QAAA,EAAA,gCAAA,EAEjD,CAAA;AAEJ,EAAA,uBACE,GAAA;AAAA,IAAC,oBAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,OAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAY,OAAA,CAAQ;AAAA;AAAA,GACtB;AAEJ","file":"chunk-Z4IPTLRS.js","sourcesContent":["import { useDocuments, useDocumentsLoading } from '@arbidocs/react'\nimport {\n NativeDocxComparison,\n type NativeDocxComparisonProps,\n} from '../../docx/NativeDocxComparison'\nimport { useConnectedNativeDocxAdapter } from './ConnectedNativeDocxEditor'\n\n/**\n * The Word redline of two documents or versions, on the signed-in session. The unedited redline\n * saved earlier from the same versions is opened again (found in the workspace's documents, once\n * all their pages are read), so opening a comparison saves at most one.\n */\nexport function ConnectedNativeDocxComparison({\n fontBaseUrl,\n ...props\n}: Omit<NativeDocxComparisonProps, 'adapter' | 'onCompared' | 'documents'> & {\n fontBaseUrl?: string\n}) {\n const adapter = useConnectedNativeDocxAdapter(fontBaseUrl)\n const { data: documents, isLoading } = useDocuments()\n // Every page: the first holds only the oldest documents, and a redline is often newer.\n const morePages = useDocumentsLoading()\n // Until the documents are read, a saved redline can't be found: wait rather than save another.\n if (isLoading || morePages)\n return (\n <div className=\"native-docx-error\" role=\"status\">\n Comparing Word documents…\n </div>\n )\n return (\n <NativeDocxComparison\n {...props}\n adapter={adapter}\n documents={documents}\n onCompared={adapter.onVersionSaved}\n />\n )\n}\n"]}
|
|
@@ -6,8 +6,8 @@ var chunkYN7ZQEHS_cjs = require('../chunk-YN7ZQEHS.cjs');
|
|
|
6
6
|
require('../chunk-7G2LJMUG.cjs');
|
|
7
7
|
var chunkVLCY46K6_cjs = require('../chunk-VLCY46K6.cjs');
|
|
8
8
|
require('../chunk-LKK52DEY.cjs');
|
|
9
|
-
require('../chunk-FX3K6LNZ.cjs');
|
|
10
9
|
var chunkMOIZ2R5X_cjs = require('../chunk-MOIZ2R5X.cjs');
|
|
10
|
+
require('../chunk-FX3K6LNZ.cjs');
|
|
11
11
|
require('../chunk-ULWRNGGE.cjs');
|
|
12
12
|
require('../chunk-PLIF5CUV.cjs');
|
|
13
13
|
require('../chunk-DES3K4SD.cjs');
|
|
@@ -4,8 +4,8 @@ export { ActionMenu, AddContactsForm, AddContactsResults, DEFAULT_ADD_CONTACTS_L
|
|
|
4
4
|
import '../chunk-NBV56SGU.js';
|
|
5
5
|
export { DEFAULT_SHARE_CONTROL_LABELS, ShareControl } from '../chunk-K4BGOPGG.js';
|
|
6
6
|
import '../chunk-7F5Z4K5W.js';
|
|
7
|
-
import '../chunk-SLSBJRWW.js';
|
|
8
7
|
export { DEFAULT_DM_INVITE_CHIP_LABELS, DmInviteChip, DmThreadHeader } from '../chunk-2S3LT5KE.js';
|
|
8
|
+
import '../chunk-SLSBJRWW.js';
|
|
9
9
|
import '../chunk-TX2ZICS7.js';
|
|
10
10
|
import '../chunk-UP3GCNPM.js';
|
|
11
11
|
import '../chunk-VUNV25KB.js';
|
package/dist/connect/docx.cjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
var
|
|
4
|
+
var chunkV2CNHRLZ_cjs = require('../chunk-V2CNHRLZ.cjs');
|
|
5
|
+
var chunk6IS3IRUF_cjs = require('../chunk-6IS3IRUF.cjs');
|
|
6
6
|
require('../chunk-FWBU4MKG.cjs');
|
|
7
7
|
require('../chunk-O2FV2HK2.cjs');
|
|
8
|
-
var
|
|
8
|
+
var chunkECCV4YOL_cjs = require('../chunk-ECCV4YOL.cjs');
|
|
9
9
|
require('../chunk-464YPRAE.cjs');
|
|
10
10
|
require('../chunk-LCPU44GW.cjs');
|
|
11
11
|
require('../chunk-SIYNZR5B.cjs');
|
|
@@ -13,7 +13,7 @@ require('../chunk-DDWLMYRO.cjs');
|
|
|
13
13
|
require('../chunk-ZESMRGDV.cjs');
|
|
14
14
|
require('../chunk-JIOHDVWH.cjs');
|
|
15
15
|
require('../chunk-RC25WMVB.cjs');
|
|
16
|
-
require('../chunk-
|
|
16
|
+
require('../chunk-SYWJNSPS.cjs');
|
|
17
17
|
require('../chunk-3YEXZX4H.cjs');
|
|
18
18
|
require('../chunk-ZHUQYIV3.cjs');
|
|
19
19
|
require('../chunk-AHDJXIUB.cjs');
|
|
@@ -23,17 +23,17 @@ require('../chunk-6UZC4XVV.cjs');
|
|
|
23
23
|
require('../chunk-ZK3D3RWK.cjs');
|
|
24
24
|
require('../chunk-LKK52DEY.cjs');
|
|
25
25
|
require('../chunk-VZOOGA47.cjs');
|
|
26
|
+
require('../chunk-BFKTZUFT.cjs');
|
|
27
|
+
require('../chunk-WV65MJ43.cjs');
|
|
28
|
+
require('../chunk-LUO46ELJ.cjs');
|
|
29
|
+
require('../chunk-SJSGSHIT.cjs');
|
|
30
|
+
require('../chunk-ZW6FPIFC.cjs');
|
|
26
31
|
require('../chunk-75BNMCUX.cjs');
|
|
27
32
|
require('../chunk-MGVECEQQ.cjs');
|
|
28
33
|
require('../chunk-5GQOIQCB.cjs');
|
|
29
34
|
require('../chunk-UDSHVNU3.cjs');
|
|
30
35
|
require('../chunk-IPSHAMO2.cjs');
|
|
31
36
|
require('../chunk-FX3K6LNZ.cjs');
|
|
32
|
-
require('../chunk-BFKTZUFT.cjs');
|
|
33
|
-
require('../chunk-WV65MJ43.cjs');
|
|
34
|
-
require('../chunk-LUO46ELJ.cjs');
|
|
35
|
-
require('../chunk-SJSGSHIT.cjs');
|
|
36
|
-
require('../chunk-ZW6FPIFC.cjs');
|
|
37
37
|
require('../chunk-PPCATBOY.cjs');
|
|
38
38
|
require('../chunk-UIXY4HKM.cjs');
|
|
39
39
|
require('../chunk-JDFBEGQO.cjs');
|
|
@@ -44,25 +44,25 @@ require('../chunk-DES3K4SD.cjs');
|
|
|
44
44
|
var react = require('react');
|
|
45
45
|
|
|
46
46
|
function useConnectedMailWordEditor() {
|
|
47
|
-
const adapter =
|
|
47
|
+
const adapter = chunkECCV4YOL_cjs.useConnectedNativeDocxAdapter();
|
|
48
48
|
return react.useMemo(() => ({ adapter }), [adapter]);
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
Object.defineProperty(exports, "ConnectedNativeDocxComparison", {
|
|
52
52
|
enumerable: true,
|
|
53
|
-
get: function () { return
|
|
53
|
+
get: function () { return chunkV2CNHRLZ_cjs.ConnectedNativeDocxComparison; }
|
|
54
54
|
});
|
|
55
55
|
Object.defineProperty(exports, "ConnectedStreamedWordArtifact", {
|
|
56
56
|
enumerable: true,
|
|
57
|
-
get: function () { return
|
|
57
|
+
get: function () { return chunk6IS3IRUF_cjs.ConnectedStreamedWordArtifact; }
|
|
58
58
|
});
|
|
59
59
|
Object.defineProperty(exports, "ConnectedNativeDocxEditor", {
|
|
60
60
|
enumerable: true,
|
|
61
|
-
get: function () { return
|
|
61
|
+
get: function () { return chunkECCV4YOL_cjs.ConnectedNativeDocxEditor; }
|
|
62
62
|
});
|
|
63
63
|
Object.defineProperty(exports, "useConnectedNativeDocxAdapter", {
|
|
64
64
|
enumerable: true,
|
|
65
|
-
get: function () { return
|
|
65
|
+
get: function () { return chunkECCV4YOL_cjs.useConnectedNativeDocxAdapter; }
|
|
66
66
|
});
|
|
67
67
|
exports.useConnectedMailWordEditor = useConnectedMailWordEditor;
|
|
68
68
|
//# sourceMappingURL=docx.cjs.map
|
package/dist/connect/docx.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export { ConnectedNativeDocxComparison } from '../chunk-
|
|
3
|
-
export { ConnectedStreamedWordArtifact } from '../chunk-
|
|
2
|
+
export { ConnectedNativeDocxComparison } from '../chunk-Z4IPTLRS.js';
|
|
3
|
+
export { ConnectedStreamedWordArtifact } from '../chunk-QSBPOYWA.js';
|
|
4
4
|
import '../chunk-PGSBXD5U.js';
|
|
5
5
|
import '../chunk-I3FNY475.js';
|
|
6
|
-
import { useConnectedNativeDocxAdapter } from '../chunk-
|
|
7
|
-
export { ConnectedNativeDocxEditor, useConnectedNativeDocxAdapter } from '../chunk-
|
|
6
|
+
import { useConnectedNativeDocxAdapter } from '../chunk-42IVGYNL.js';
|
|
7
|
+
export { ConnectedNativeDocxEditor, useConnectedNativeDocxAdapter } from '../chunk-42IVGYNL.js';
|
|
8
8
|
import '../chunk-MTSKK3BN.js';
|
|
9
9
|
import '../chunk-Y7UIFRWC.js';
|
|
10
10
|
import '../chunk-K2U5BCQ2.js';
|
|
@@ -12,7 +12,7 @@ import '../chunk-TROXWCQQ.js';
|
|
|
12
12
|
import '../chunk-IA5BYEO7.js';
|
|
13
13
|
import '../chunk-IYUKJESY.js';
|
|
14
14
|
import '../chunk-AF6RDAJF.js';
|
|
15
|
-
import '../chunk-
|
|
15
|
+
import '../chunk-RZG4ALKZ.js';
|
|
16
16
|
import '../chunk-4QUUU7GH.js';
|
|
17
17
|
import '../chunk-DL6KPLNR.js';
|
|
18
18
|
import '../chunk-RLWIUUQ5.js';
|
|
@@ -22,17 +22,17 @@ import '../chunk-P4CH2ATT.js';
|
|
|
22
22
|
import '../chunk-KPLWLHWH.js';
|
|
23
23
|
import '../chunk-7F5Z4K5W.js';
|
|
24
24
|
import '../chunk-WNDIVNPT.js';
|
|
25
|
+
import '../chunk-CCUXCN4M.js';
|
|
26
|
+
import '../chunk-JVJOIZNN.js';
|
|
27
|
+
import '../chunk-BH4MK2J5.js';
|
|
28
|
+
import '../chunk-USTSEENR.js';
|
|
29
|
+
import '../chunk-P6GHJSLR.js';
|
|
25
30
|
import '../chunk-7SQVZML4.js';
|
|
26
31
|
import '../chunk-MMSBCSGH.js';
|
|
27
32
|
import '../chunk-YQPI7SRN.js';
|
|
28
33
|
import '../chunk-XDDORJPA.js';
|
|
29
34
|
import '../chunk-X5YMI6A7.js';
|
|
30
35
|
import '../chunk-SLSBJRWW.js';
|
|
31
|
-
import '../chunk-CCUXCN4M.js';
|
|
32
|
-
import '../chunk-JVJOIZNN.js';
|
|
33
|
-
import '../chunk-BH4MK2J5.js';
|
|
34
|
-
import '../chunk-USTSEENR.js';
|
|
35
|
-
import '../chunk-P6GHJSLR.js';
|
|
36
36
|
import '../chunk-NPLYHR2E.js';
|
|
37
37
|
import '../chunk-3KA6GZUW.js';
|
|
38
38
|
import '../chunk-WTTPZMZ7.js';
|