@arbidocs/blocks 0.5.119 → 0.5.121
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ClippingMediaViewer-B6WG7Q64.cjs +156 -0
- package/dist/ClippingMediaViewer-B6WG7Q64.cjs.map +1 -0
- package/dist/ClippingPdfViewer-6GCVTV3V.cjs +79 -0
- package/dist/ClippingPdfViewer-6GCVTV3V.cjs.map +1 -0
- package/dist/{ConnectedCallDock-WER7R222.cjs → ConnectedCallDock-DC5V5OUJ.cjs} +25 -23
- package/dist/ConnectedCallDock-DC5V5OUJ.cjs.map +1 -0
- package/dist/{ConnectedCallRoom-T7OBQTYP.cjs → ConnectedCallRoom-FQLXWTFB.cjs} +18 -16
- package/dist/{ConnectedCallRoom-T7OBQTYP.cjs.map → ConnectedCallRoom-FQLXWTFB.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-546ILGLW.cjs → ConnectedNativeDocxComparison-4Q5S7VLD.cjs} +17 -17
- package/dist/{ConnectedNativeDocxComparison-546ILGLW.cjs.map → ConnectedNativeDocxComparison-4Q5S7VLD.cjs.map} +1 -1
- package/dist/ConnectedPresentation-4HLDZDWV.cjs +183 -0
- package/dist/ConnectedPresentation-4HLDZDWV.cjs.map +1 -0
- package/dist/{ConnectedProductionSetDialog-LHB4VQWC.cjs → ConnectedProductionSetDialog-4EAY6KAZ.cjs} +3 -3
- package/dist/{ConnectedProductionSetDialog-LHB4VQWC.cjs.map → ConnectedProductionSetDialog-4EAY6KAZ.cjs.map} +1 -1
- package/dist/ConnectedSlidesTab-7QDE2CZD.cjs +234 -0
- package/dist/ConnectedSlidesTab-7QDE2CZD.cjs.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-S2ZFZLZQ.cjs → ConnectedStreamedWordArtifact-FFOQJBOI.cjs} +17 -17
- package/dist/{ConnectedStreamedWordArtifact-S2ZFZLZQ.cjs.map → ConnectedStreamedWordArtifact-FFOQJBOI.cjs.map} +1 -1
- package/dist/{DocumentReviewCard-ZSBZBGFK.cjs → DocumentReviewCard-SNWVEZ7S.cjs} +19 -18
- package/dist/DocumentReviewCard-SNWVEZ7S.cjs.map +1 -0
- package/dist/{FilesViewerDialog-6UKR5WEF.cjs → FilesViewerDialog-IZI63FOV.cjs} +54 -47
- package/dist/FilesViewerDialog-IZI63FOV.cjs.map +1 -0
- package/dist/{GridViewImpl-ZMJJWTOM.cjs → GridViewImpl-LTYET77Q.cjs} +3 -3
- package/dist/GridViewImpl-LTYET77Q.cjs.map +1 -0
- package/dist/{WorkspaceTableView-J3C6VH4T.cjs → WorkspaceTableView-TEIRB6VJ.cjs} +11 -10
- package/dist/WorkspaceTableView-TEIRB6VJ.cjs.map +1 -0
- package/dist/agents/index.cjs +297 -297
- package/dist/agents/tasks/ConversationListView.js +10 -2
- package/dist/agents/tasks/ConversationListView.js.map +2 -2
- package/dist/agents/tasks/TaskTable.js +5 -4
- package/dist/agents/tasks/TaskTable.js.map +2 -2
- package/dist/agents/tasks/WorkflowsTable.js +4 -5
- package/dist/agents/tasks/WorkflowsTable.js.map +2 -2
- package/dist/agents/tasks/taskColumns.js +1 -1
- package/dist/agents/tasks/taskColumns.js.map +1 -1
- package/dist/agents/tasks/taskTableLabels.js +1 -1
- package/dist/agents/tasks/taskTableLabels.js.map +1 -1
- package/dist/agents/tasks/workflowTableLabels.js +1 -1
- package/dist/agents/tasks/workflowTableLabels.js.map +1 -1
- package/dist/{ai-IM4A23YT.cjs → ai-KBYNRNZ6.cjs} +28 -26
- package/dist/ai-KBYNRNZ6.cjs.map +1 -0
- package/dist/calls/connected/CallControls.d.ts +2 -0
- package/dist/calls/connected/CallControls.js +71 -9
- package/dist/calls/connected/CallControls.js.map +2 -2
- package/dist/calls/connected/ShareDocumentDialog.d.ts +14 -0
- package/dist/calls/connected/ShareDocumentDialog.js +77 -0
- package/dist/calls/connected/ShareDocumentDialog.js.map +7 -0
- package/dist/calls/index.cjs +121 -121
- package/dist/chat/index.cjs +9 -8
- package/dist/{chunk-T23UTIRI.cjs → chunk-2PZT3J34.cjs} +6 -6
- package/dist/{chunk-T23UTIRI.cjs.map → chunk-2PZT3J34.cjs.map} +1 -1
- package/dist/{chunk-SGYSDABK.cjs → chunk-2W5E62EY.cjs} +6 -6
- package/dist/{chunk-SGYSDABK.cjs.map → chunk-2W5E62EY.cjs.map} +1 -1
- package/dist/{chunk-TDO5UWXF.cjs → chunk-3SCNXNHI.cjs} +5 -5
- package/dist/{chunk-TDO5UWXF.cjs.map → chunk-3SCNXNHI.cjs.map} +1 -1
- package/dist/{chunk-KTQOGT2L.cjs → chunk-474GPLCM.cjs} +7 -7
- package/dist/{chunk-KTQOGT2L.cjs.map → chunk-474GPLCM.cjs.map} +1 -1
- package/dist/{chunk-TP5PGWIO.cjs → chunk-4IOYQLKG.cjs} +3 -3
- package/dist/{chunk-TP5PGWIO.cjs.map → chunk-4IOYQLKG.cjs.map} +1 -1
- package/dist/{chunk-NY3YUCOW.cjs → chunk-4NPCDS2X.cjs} +3 -3
- package/dist/{chunk-NY3YUCOW.cjs.map → chunk-4NPCDS2X.cjs.map} +1 -1
- package/dist/{chunk-CPG7II4E.cjs → chunk-4RBQ44RY.cjs} +28 -28
- package/dist/chunk-4RBQ44RY.cjs.map +1 -0
- package/dist/{chunk-BQ5RIWWT.cjs → chunk-4VZZWYEC.cjs} +3 -3
- package/dist/{chunk-BQ5RIWWT.cjs.map → chunk-4VZZWYEC.cjs.map} +1 -1
- package/dist/{chunk-Y24V6HPR.cjs → chunk-52KGMAO5.cjs} +15 -15
- package/dist/{chunk-Y24V6HPR.cjs.map → chunk-52KGMAO5.cjs.map} +1 -1
- package/dist/{chunk-HB2O4THB.cjs → chunk-5534FYXP.cjs} +4 -4
- package/dist/{chunk-HB2O4THB.cjs.map → chunk-5534FYXP.cjs.map} +1 -1
- package/dist/chunk-5GCCUXMT.cjs +63 -0
- package/dist/chunk-5GCCUXMT.cjs.map +1 -0
- package/dist/chunk-5LTIZ44D.cjs +95 -0
- package/dist/chunk-5LTIZ44D.cjs.map +1 -0
- package/dist/{chunk-YGXOKB5Z.cjs → chunk-734NPQNR.cjs} +4 -4
- package/dist/{chunk-YGXOKB5Z.cjs.map → chunk-734NPQNR.cjs.map} +1 -1
- package/dist/{chunk-SB4M3ITT.cjs → chunk-7VUJGHMY.cjs} +444 -100
- package/dist/chunk-7VUJGHMY.cjs.map +1 -0
- package/dist/chunk-AFQTQC7A.cjs +35 -0
- package/dist/chunk-AFQTQC7A.cjs.map +1 -0
- package/dist/{chunk-XKVPSOKP.cjs → chunk-AY6EZSZB.cjs} +4 -4
- package/dist/{chunk-XKVPSOKP.cjs.map → chunk-AY6EZSZB.cjs.map} +1 -1
- package/dist/{chunk-TT4IF52H.cjs → chunk-BVAT4EVC.cjs} +40 -41
- package/dist/chunk-BVAT4EVC.cjs.map +1 -0
- package/dist/{chunk-VGCTYTEW.cjs → chunk-C2OICDMI.cjs} +10 -10
- package/dist/{chunk-VGCTYTEW.cjs.map → chunk-C2OICDMI.cjs.map} +1 -1
- package/dist/{chunk-CPR6EHG7.cjs → chunk-DR2AH7JL.cjs} +179 -55
- package/dist/chunk-DR2AH7JL.cjs.map +1 -0
- package/dist/{chunk-NJCK6V6U.cjs → chunk-EATIFPKP.cjs} +4 -60
- package/dist/chunk-EATIFPKP.cjs.map +1 -0
- package/dist/{chunk-B3LZITVF.cjs → chunk-EHP6OH5D.cjs} +11 -451
- package/dist/chunk-EHP6OH5D.cjs.map +1 -0
- package/dist/{chunk-DDIW4HLU.cjs → chunk-ENGL7P3I.cjs} +46 -37
- package/dist/chunk-ENGL7P3I.cjs.map +1 -0
- package/dist/{chunk-QHOHDNBU.cjs → chunk-FKFQCK3C.cjs} +4 -4
- package/dist/{chunk-QHOHDNBU.cjs.map → chunk-FKFQCK3C.cjs.map} +1 -1
- package/dist/{chunk-6UTKM5AB.cjs → chunk-GKVE5JGB.cjs} +76 -76
- package/dist/chunk-GKVE5JGB.cjs.map +1 -0
- package/dist/{chunk-B2HNNG25.cjs → chunk-GPX5VC57.cjs} +50 -50
- package/dist/{chunk-B2HNNG25.cjs.map → chunk-GPX5VC57.cjs.map} +1 -1
- package/dist/{chunk-WAV762GP.cjs → chunk-GQXPNIRE.cjs} +6 -6
- package/dist/{chunk-WAV762GP.cjs.map → chunk-GQXPNIRE.cjs.map} +1 -1
- package/dist/chunk-GX2EBMJW.cjs +133 -0
- package/dist/chunk-GX2EBMJW.cjs.map +1 -0
- package/dist/{chunk-7OPOPYV6.cjs → chunk-H5OLHP2U.cjs} +3 -3
- package/dist/{chunk-7OPOPYV6.cjs.map → chunk-H5OLHP2U.cjs.map} +1 -1
- package/dist/chunk-HYUKPHCT.cjs +66 -0
- package/dist/chunk-HYUKPHCT.cjs.map +1 -0
- package/dist/{chunk-NNUK5ZM7.cjs → chunk-JQLWKNJO.cjs} +29 -27
- package/dist/chunk-JQLWKNJO.cjs.map +1 -0
- package/dist/{chunk-OEREKAAP.cjs → chunk-JZEYHDWJ.cjs} +75 -75
- package/dist/{chunk-OEREKAAP.cjs.map → chunk-JZEYHDWJ.cjs.map} +1 -1
- package/dist/{chunk-PGJYD67F.cjs → chunk-KNGZZC4O.cjs} +7 -6
- package/dist/chunk-KNGZZC4O.cjs.map +1 -0
- package/dist/{chunk-NIE3N6OM.cjs → chunk-KP5AITQ4.cjs} +10 -10
- package/dist/{chunk-NIE3N6OM.cjs.map → chunk-KP5AITQ4.cjs.map} +1 -1
- package/dist/{chunk-YYPZOEED.cjs → chunk-LHWOKOMP.cjs} +23 -2
- package/dist/chunk-LHWOKOMP.cjs.map +1 -0
- package/dist/{chunk-57NHXEU2.cjs → chunk-MXBXZXXQ.cjs} +5 -5
- package/dist/{chunk-57NHXEU2.cjs.map → chunk-MXBXZXXQ.cjs.map} +1 -1
- package/dist/{chunk-WXUU3COI.cjs → chunk-MZ2KZXNU.cjs} +3 -3
- package/dist/{chunk-WXUU3COI.cjs.map → chunk-MZ2KZXNU.cjs.map} +1 -1
- package/dist/chunk-NAJN32MF.cjs +154 -0
- package/dist/chunk-NAJN32MF.cjs.map +1 -0
- package/dist/{chunk-557MJ4IH.cjs → chunk-NLOETJCB.cjs} +17 -154
- package/dist/chunk-NLOETJCB.cjs.map +1 -0
- package/dist/{chunk-4XJEHKVZ.cjs → chunk-PIYYBPHH.cjs} +4 -4
- package/dist/{chunk-4XJEHKVZ.cjs.map → chunk-PIYYBPHH.cjs.map} +1 -1
- package/dist/chunk-Q3XJUXID.cjs +4774 -0
- package/dist/chunk-Q3XJUXID.cjs.map +1 -0
- package/dist/{chunk-325GVZE6.cjs → chunk-Q6DQGGP4.cjs} +3 -3
- package/dist/{chunk-325GVZE6.cjs.map → chunk-Q6DQGGP4.cjs.map} +1 -1
- package/dist/chunk-QFXILJMJ.cjs +458 -0
- package/dist/chunk-QFXILJMJ.cjs.map +1 -0
- package/dist/{chunk-R7CJEIA5.cjs → chunk-RYVZDFVO.cjs} +8 -9
- package/dist/chunk-RYVZDFVO.cjs.map +1 -0
- package/dist/{chunk-VLCY46K6.cjs → chunk-TG2GM7WJ.cjs} +4 -3
- package/dist/chunk-TG2GM7WJ.cjs.map +1 -0
- package/dist/{chunk-EOG6OT5I.cjs → chunk-TXP2N3DC.cjs} +4 -4
- package/dist/{chunk-EOG6OT5I.cjs.map → chunk-TXP2N3DC.cjs.map} +1 -1
- package/dist/{chunk-KXIRVKCJ.cjs → chunk-UUENH4BJ.cjs} +3 -3
- package/dist/{chunk-KXIRVKCJ.cjs.map → chunk-UUENH4BJ.cjs.map} +1 -1
- package/dist/chunk-VJ5ZLRBD.cjs +27 -0
- package/dist/chunk-VJ5ZLRBD.cjs.map +1 -0
- package/dist/{chunk-P77YTTJ3.cjs → chunk-W6B3RYTX.cjs} +4 -4
- package/dist/{chunk-P77YTTJ3.cjs.map → chunk-W6B3RYTX.cjs.map} +1 -1
- package/dist/chunk-WOOOMTTA.cjs +19 -0
- package/dist/chunk-WOOOMTTA.cjs.map +1 -0
- package/dist/{chunk-ZPPMAL5P.cjs → chunk-WQMR3O2D.cjs} +6 -10
- package/dist/chunk-WQMR3O2D.cjs.map +1 -0
- package/dist/{chunk-CJYWHUZR.cjs → chunk-XCKHOXRP.cjs} +4 -4
- package/dist/{chunk-CJYWHUZR.cjs.map → chunk-XCKHOXRP.cjs.map} +1 -1
- package/dist/{chunk-6WMMZLEV.cjs → chunk-XJEXFEWG.cjs} +2 -27
- package/dist/chunk-XJEXFEWG.cjs.map +1 -0
- package/dist/chunk-XK4TVJKD.cjs +73 -0
- package/dist/chunk-XK4TVJKD.cjs.map +1 -0
- package/dist/chunk-XTR26TNE.cjs +1358 -0
- package/dist/chunk-XTR26TNE.cjs.map +1 -0
- package/dist/{chunk-E7TE2WVT.cjs → chunk-ZVEW3JBT.cjs} +3 -3
- package/dist/{chunk-E7TE2WVT.cjs.map → chunk-ZVEW3JBT.cjs.map} +1 -1
- package/dist/collaboration/index.cjs +73 -73
- package/dist/collaboration/sharing/ShareControl.js +10 -2
- package/dist/collaboration/sharing/ShareControl.js.map +2 -2
- package/dist/components/SharedCell.d.ts +2 -4
- package/dist/components/SharedCell.js +4 -8
- package/dist/components/SharedCell.js.map +2 -2
- package/dist/components/ZoomSlider.d.ts +25 -0
- package/dist/components/ZoomSlider.js +59 -0
- package/dist/components/ZoomSlider.js.map +7 -0
- package/dist/connect/docx.cjs +20 -20
- package/dist/connect/index.cjs +1210 -1264
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/viewer.cjs +42 -36
- package/dist/connection/ai.d.ts +1 -1
- package/dist/connection/facts/factPageColumns.js +3 -9
- package/dist/connection/facts/factPageColumns.js.map +2 -2
- package/dist/connection/files/ConnectedNewFileMenu.d.ts +2 -1
- package/dist/connection/files/ConnectedNewFileMenu.js +9 -3
- package/dist/connection/files/ConnectedNewFileMenu.js.map +2 -2
- package/dist/connection/files/explorer/ConnectedFilesExplorer.js +1 -1
- package/dist/connection/files/explorer/ConnectedFilesExplorer.js.map +2 -2
- package/dist/connection/files/explorer/FileTiles.js +1 -1
- package/dist/connection/files/explorer/FileTiles.js.map +2 -2
- package/dist/connection/files/fields/documentField.js +1 -1
- package/dist/connection/files/fields/documentField.js.map +2 -2
- package/dist/connection/files/grid/cells.js +1 -3
- package/dist/connection/files/grid/cells.js.map +2 -2
- package/dist/connection/files/grid/documentColumns.js +4 -3
- package/dist/connection/files/grid/documentColumns.js.map +2 -2
- package/dist/connection/files/page/DocumentsFilterBarActions.js +17 -28
- package/dist/connection/files/page/DocumentsFilterBarActions.js.map +2 -2
- package/dist/connection/mail/useMailboxDefaults.js +1 -1
- package/dist/connection/mail/useMailboxDefaults.js.map +2 -2
- package/dist/connection/panels/useSessionPanelMode.js +3 -2
- package/dist/connection/panels/useSessionPanelMode.js.map +2 -2
- package/dist/connection/presentation/ClippingMediaViewer.d.ts +12 -0
- package/dist/connection/presentation/ClippingMediaViewer.js +153 -0
- package/dist/connection/presentation/ClippingMediaViewer.js.map +7 -0
- package/dist/connection/presentation/ClippingPdfViewer.d.ts +22 -0
- package/dist/connection/presentation/ClippingPdfViewer.js +75 -0
- package/dist/connection/presentation/ClippingPdfViewer.js.map +7 -0
- package/dist/connection/presentation/ConnectedPresentation.d.ts +12 -0
- package/dist/connection/presentation/ConnectedPresentation.js +100 -0
- package/dist/connection/presentation/ConnectedPresentation.js.map +7 -0
- package/dist/connection/presentation/ConnectedSlidesTab.d.ts +20 -0
- package/dist/connection/presentation/ConnectedSlidesTab.js +220 -0
- package/dist/connection/presentation/ConnectedSlidesTab.js.map +7 -0
- package/dist/connection/presentation/CropClipDialog.d.ts +11 -0
- package/dist/connection/presentation/CropClipDialog.js +86 -0
- package/dist/connection/presentation/CropClipDialog.js.map +7 -0
- package/dist/connection/presentation/GenerateTile.d.ts +4 -0
- package/dist/connection/presentation/GenerateTile.js +24 -0
- package/dist/connection/presentation/GenerateTile.js.map +7 -0
- package/dist/connection/presentation/LabelColumnMenu.d.ts +8 -0
- package/dist/connection/presentation/LabelColumnMenu.js +38 -0
- package/dist/connection/presentation/LabelColumnMenu.js.map +7 -0
- package/dist/connection/presentation/PresentationDialogs.d.ts +39 -0
- package/dist/connection/presentation/PresentationDialogs.js +295 -0
- package/dist/connection/presentation/PresentationDialogs.js.map +7 -0
- package/dist/connection/presentation/PresentationFileCard.d.ts +10 -0
- package/dist/connection/presentation/PresentationFileCard.js +35 -0
- package/dist/connection/presentation/PresentationFileCard.js.map +7 -0
- package/dist/connection/presentation/PresentationPill.d.ts +8 -0
- package/dist/connection/presentation/PresentationPill.js +44 -0
- package/dist/connection/presentation/PresentationPill.js.map +7 -0
- package/dist/connection/presentation/PresentationSlot.d.ts +7 -0
- package/dist/connection/presentation/PresentationSlot.js +35 -0
- package/dist/connection/presentation/PresentationSlot.js.map +7 -0
- package/dist/connection/presentation/requests.d.ts +16 -0
- package/dist/connection/presentation/requests.js +20 -0
- package/dist/connection/presentation/requests.js.map +7 -0
- package/dist/connection/presentation/useImageGeneration.d.ts +11 -0
- package/dist/connection/presentation/useImageGeneration.js +66 -0
- package/dist/connection/presentation/useImageGeneration.js.map +7 -0
- package/dist/connection/presentation/useLabelColumns.d.ts +15 -0
- package/dist/connection/presentation/useLabelColumns.js +33 -0
- package/dist/connection/presentation/useLabelColumns.js.map +7 -0
- package/dist/connection/presentation/usePresentationController.d.ts +15 -0
- package/dist/connection/presentation/usePresentationController.js +118 -0
- package/dist/connection/presentation/usePresentationController.js.map +7 -0
- package/dist/connection/presentation/usePresentationFiles.d.ts +44 -0
- package/dist/connection/presentation/usePresentationFiles.js +307 -0
- package/dist/connection/presentation/usePresentationFiles.js.map +7 -0
- package/dist/connection/presentation/useViewerClipping.d.ts +14 -0
- package/dist/connection/presentation/useViewerClipping.js +18 -0
- package/dist/connection/presentation/useViewerClipping.js.map +7 -0
- package/dist/connection/sharing/WorkspaceMembersList.d.ts +4 -0
- package/dist/connection/sharing/WorkspaceMembersList.js +34 -0
- package/dist/connection/sharing/WorkspaceMembersList.js.map +7 -0
- package/dist/connection/shell/ConnectedAppShell.js +9 -1
- package/dist/connection/shell/ConnectedAppShell.js.map +2 -2
- package/dist/connection/viewer/CleanViewControl.d.ts +8 -0
- package/dist/connection/viewer/CleanViewControl.js +76 -0
- package/dist/connection/viewer/CleanViewControl.js.map +7 -0
- package/dist/connection/viewer/ConnectedDocumentViewer.js +31 -31
- package/dist/connection/viewer/ConnectedDocumentViewer.js.map +2 -2
- package/dist/connection/viewer/ViewerCropModal.d.ts +5 -0
- package/dist/connection/viewer/ViewerCropModal.js +22 -0
- package/dist/connection/viewer/ViewerCropModal.js.map +7 -0
- package/dist/connection/viewer/ViewerPdfPane.d.ts +3 -1
- package/dist/connection/viewer/ViewerPdfPane.js +57 -2
- package/dist/connection/viewer/ViewerPdfPane.js.map +2 -2
- package/dist/connection/viewer/drafts.js +6 -4
- package/dist/connection/viewer/drafts.js.map +2 -2
- package/dist/connection/viewer/pdf/PdfPassageHighlights.d.ts +12 -0
- package/dist/connection/viewer/pdf/PdfPassageHighlights.js +36 -0
- package/dist/connection/viewer/pdf/PdfPassageHighlights.js.map +7 -0
- package/dist/connection/viewer/pdf/passageHighlights.d.ts +26 -0
- package/dist/connection/viewer/pdf/passageHighlights.js +40 -0
- package/dist/connection/viewer/pdf/passageHighlights.js.map +7 -0
- package/dist/connection/viewer/pdf/usePdfPassageHighlights.d.ts +9 -0
- package/dist/connection/viewer/pdf/usePdfPassageHighlights.js +47 -0
- package/dist/connection/viewer/pdf/usePdfPassageHighlights.js.map +7 -0
- package/dist/connection/viewer/shareDocument.d.ts +11 -0
- package/dist/connection/viewer/shareDocument.js +11 -0
- package/dist/connection/viewer/shareDocument.js.map +7 -0
- package/dist/connection/viewer/slidesTabChunk.d.ts +2 -0
- package/dist/connection/viewer/slidesTabChunk.js +9 -0
- package/dist/connection/viewer/slidesTabChunk.js.map +7 -0
- package/dist/connection/viewer/useCleanView.d.ts +14 -0
- package/dist/connection/viewer/useCleanView.js +29 -0
- package/dist/connection/viewer/useCleanView.js.map +7 -0
- package/dist/connection/viewer/useViewedDocument.d.ts +1 -0
- package/dist/connection/viewer/useViewedDocument.js +9 -1
- package/dist/connection/viewer/useViewedDocument.js.map +2 -2
- package/dist/connection/viewer/useViewerTabs.js +18 -4
- package/dist/connection/viewer/useViewerTabs.js.map +2 -2
- package/dist/connection/workflows/ConnectedWorkflowStart.d.ts +14 -2
- package/dist/connection/workflows/ConnectedWorkflowStart.js +5 -2
- package/dist/connection/workflows/ConnectedWorkflowStart.js.map +2 -2
- package/dist/connection/workflows/workflowsPageLabels.js +1 -1
- package/dist/connection/workflows/workflowsPageLabels.js.map +1 -1
- package/dist/dashboards/index.cjs +1 -1
- package/dist/databases/index.cjs +49 -49
- package/dist/document-tools/DocumentToolButtons.d.ts +2 -0
- package/dist/document-tools/DocumentToolButtons.js +22 -1
- package/dist/document-tools/DocumentToolButtons.js.map +2 -2
- package/dist/document-tools/index.cjs +16 -12
- package/dist/document-tools/index.d.ts +1 -1
- package/dist/document-tools/index.js +2 -0
- package/dist/document-tools/index.js.map +2 -2
- package/dist/embed/index.cjs +43 -41
- package/dist/facts/factColumns.js +3 -3
- package/dist/facts/factColumns.js.map +1 -1
- package/dist/facts/index.cjs +42 -42
- package/dist/files/GridViewImpl.js +1 -1
- package/dist/files/GridViewImpl.js.map +2 -2
- package/dist/files/HtmlViewerParts.js +7 -15
- package/dist/files/HtmlViewerParts.js.map +2 -2
- package/dist/files/ViewerChrome.d.ts +5 -1
- package/dist/files/ViewerChrome.js +16 -6
- package/dist/files/ViewerChrome.js.map +2 -2
- package/dist/files/index.cjs +226 -226
- package/dist/files/navigator/DocumentSearchList.js +1 -1
- package/dist/files/navigator/DocumentSearchList.js.map +2 -2
- package/dist/index.cjs +1668 -1666
- package/dist/index.cjs.map +1 -1
- package/dist/presentation/BoxActionBar.d.ts +11 -0
- package/dist/presentation/BoxActionBar.js +182 -0
- package/dist/presentation/BoxActionBar.js.map +7 -0
- package/dist/presentation/ClipActionBar.d.ts +26 -0
- package/dist/presentation/ClipActionBar.js +103 -0
- package/dist/presentation/ClipActionBar.js.map +7 -0
- package/dist/presentation/ClipCaptureOverlay.d.ts +14 -0
- package/dist/presentation/ClipCaptureOverlay.js +69 -0
- package/dist/presentation/ClipCaptureOverlay.js.map +7 -0
- package/dist/presentation/ClipImage.d.ts +21 -0
- package/dist/presentation/ClipImage.js +119 -0
- package/dist/presentation/ClipImage.js.map +7 -0
- package/dist/presentation/ClipTray.d.ts +11 -0
- package/dist/presentation/ClipTray.js +152 -0
- package/dist/presentation/ClipTray.js.map +7 -0
- package/dist/presentation/ClipViewControls.d.ts +11 -0
- package/dist/presentation/ClipViewControls.js +142 -0
- package/dist/presentation/ClipViewControls.js.map +7 -0
- package/dist/presentation/DesignMenu.d.ts +8 -0
- package/dist/presentation/DesignMenu.js +199 -0
- package/dist/presentation/DesignMenu.js.map +7 -0
- package/dist/presentation/LayoutMenu.d.ts +17 -0
- package/dist/presentation/LayoutMenu.js +122 -0
- package/dist/presentation/LayoutMenu.js.map +7 -0
- package/dist/presentation/MediaClip.d.ts +15 -0
- package/dist/presentation/MediaClip.js +67 -0
- package/dist/presentation/MediaClip.js.map +7 -0
- package/dist/presentation/Notice.d.ts +6 -0
- package/dist/presentation/Notice.js +43 -0
- package/dist/presentation/Notice.js.map +7 -0
- package/dist/presentation/PresentationStage.d.ts +32 -0
- package/dist/presentation/PresentationStage.js +232 -0
- package/dist/presentation/PresentationStage.js.map +7 -0
- package/dist/presentation/PresenterView.d.ts +16 -0
- package/dist/presentation/PresenterView.js +69 -0
- package/dist/presentation/PresenterView.js.map +7 -0
- package/dist/presentation/SlideDecor.d.ts +25 -0
- package/dist/presentation/SlideDecor.js +189 -0
- package/dist/presentation/SlideDecor.js.map +7 -0
- package/dist/presentation/SlidesEditor.d.ts +25 -0
- package/dist/presentation/SlidesEditor.js +359 -0
- package/dist/presentation/SlidesEditor.js.map +7 -0
- package/dist/presentation/StageBox.d.ts +30 -0
- package/dist/presentation/StageBox.js +281 -0
- package/dist/presentation/StageBox.js.map +7 -0
- package/dist/presentation/StageItem.d.ts +37 -0
- package/dist/presentation/StageItem.js +211 -0
- package/dist/presentation/StageItem.js.map +7 -0
- package/dist/presentation/box-style.d.ts +6 -0
- package/dist/presentation/box-style.js +19 -0
- package/dist/presentation/box-style.js.map +7 -0
- package/dist/presentation/boxes.d.ts +105 -0
- package/dist/presentation/boxes.js +103 -0
- package/dist/presentation/boxes.js.map +7 -0
- package/dist/presentation/draw-boxes.d.ts +8 -0
- package/dist/presentation/draw-boxes.js +130 -0
- package/dist/presentation/draw-boxes.js.map +7 -0
- package/dist/presentation/export-boxes.d.ts +10 -0
- package/dist/presentation/export-boxes.js +74 -0
- package/dist/presentation/export-boxes.js.map +7 -0
- package/dist/presentation/export-pptx.d.ts +16 -0
- package/dist/presentation/export-pptx.js +194 -0
- package/dist/presentation/export-pptx.js.map +7 -0
- package/dist/presentation/import-pptx.d.ts +35 -0
- package/dist/presentation/import-pptx.js +659 -0
- package/dist/presentation/import-pptx.js.map +7 -0
- package/dist/presentation/merge-outside-edits.d.ts +12 -0
- package/dist/presentation/merge-outside-edits.js +35 -0
- package/dist/presentation/merge-outside-edits.js.map +7 -0
- package/dist/presentation/model.d.ts +201 -0
- package/dist/presentation/model.js +271 -0
- package/dist/presentation/model.js.map +7 -0
- package/dist/presentation/panel-id.d.ts +34 -0
- package/dist/presentation/panel-id.js +24 -0
- package/dist/presentation/panel-id.js.map +7 -0
- package/dist/presentation/persistence.d.ts +121 -0
- package/dist/presentation/persistence.js +141 -0
- package/dist/presentation/persistence.js.map +7 -0
- package/dist/presentation/pptx-data.d.ts +22 -0
- package/dist/presentation/pptx-data.js +83 -0
- package/dist/presentation/pptx-data.js.map +7 -0
- package/dist/presentation/pptx-xml.d.ts +90 -0
- package/dist/presentation/pptx-xml.js +333 -0
- package/dist/presentation/pptx-xml.js.map +7 -0
- package/dist/presentation/render-slides.d.ts +58 -0
- package/dist/presentation/render-slides.js +309 -0
- package/dist/presentation/render-slides.js.map +7 -0
- package/dist/presentation/saved-boxes.d.ts +11 -0
- package/dist/presentation/saved-boxes.js +80 -0
- package/dist/presentation/saved-boxes.js.map +7 -0
- package/dist/presentation/slide-layout.d.ts +54 -0
- package/dist/presentation/slide-layout.js +117 -0
- package/dist/presentation/slide-layout.js.map +7 -0
- package/dist/presentation/stage-videos.d.ts +5 -0
- package/dist/presentation/stage-videos.js +19 -0
- package/dist/presentation/stage-videos.js.map +7 -0
- package/dist/presentation/store.d.ts +203 -0
- package/dist/presentation/store.js +429 -0
- package/dist/presentation/store.js.map +7 -0
- package/dist/presentation/theme.d.ts +102 -0
- package/dist/presentation/theme.js +276 -0
- package/dist/presentation/theme.js.map +7 -0
- package/dist/presentation/useClipDrag.d.ts +26 -0
- package/dist/presentation/useClipDrag.js +65 -0
- package/dist/presentation/useClipDrag.js.map +7 -0
- package/dist/presentation/useObjectUrl.d.ts +6 -0
- package/dist/presentation/useObjectUrl.js +15 -0
- package/dist/presentation/useObjectUrl.js.map +7 -0
- package/dist/presentation/usePresenterKeys.d.ts +13 -0
- package/dist/presentation/usePresenterKeys.js +62 -0
- package/dist/presentation/usePresenterKeys.js.map +7 -0
- package/dist/settings/index.cjs +151 -150
- package/dist/shell/PanelPortal.js +1 -0
- package/dist/shell/PanelPortal.js.map +2 -2
- package/dist/shell/index.cjs +112 -110
- package/dist/shell/panel-windows.d.ts +2 -0
- package/dist/shell/panel-windows.js +7 -2
- package/dist/shell/panel-windows.js.map +2 -2
- package/dist/studio/index.cjs +28 -26
- package/dist/studio/index.cjs.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/workflow-canvas/index.cjs +58 -57
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +6 -5
- package/dist/ConnectedCallDock-WER7R222.cjs.map +0 -1
- package/dist/DocumentReviewCard-ZSBZBGFK.cjs.map +0 -1
- package/dist/FilesViewerDialog-6UKR5WEF.cjs.map +0 -1
- package/dist/GridViewImpl-ZMJJWTOM.cjs.map +0 -1
- package/dist/WorkspaceTableView-J3C6VH4T.cjs.map +0 -1
- package/dist/ai-IM4A23YT.cjs.map +0 -1
- package/dist/chunk-557MJ4IH.cjs.map +0 -1
- package/dist/chunk-6UTKM5AB.cjs.map +0 -1
- package/dist/chunk-6WMMZLEV.cjs.map +0 -1
- package/dist/chunk-B3LZITVF.cjs.map +0 -1
- package/dist/chunk-CPG7II4E.cjs.map +0 -1
- package/dist/chunk-CPR6EHG7.cjs.map +0 -1
- package/dist/chunk-DDIW4HLU.cjs.map +0 -1
- package/dist/chunk-NJCK6V6U.cjs.map +0 -1
- package/dist/chunk-NNUK5ZM7.cjs.map +0 -1
- package/dist/chunk-PGJYD67F.cjs.map +0 -1
- package/dist/chunk-R7CJEIA5.cjs.map +0 -1
- package/dist/chunk-SB4M3ITT.cjs.map +0 -1
- package/dist/chunk-TT4IF52H.cjs.map +0 -1
- package/dist/chunk-VLCY46K6.cjs.map +0 -1
- package/dist/chunk-YYPZOEED.cjs.map +0 -1
- package/dist/chunk-ZPPMAL5P.cjs.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/agents/tasks/WorkflowsTable.tsx"],
|
|
4
|
-
"sourcesContent": ["import { useEffect, useMemo, useRef, useState, type ReactNode } from 'react'\nimport type { GridApi } from 'ag-grid-community'\nimport { History, MoreHorizontal, Pencil, Play, Trash2, Workflow } from 'lucide-react'\nimport {\n Button,\n badgeVariants,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n Switch,\n VisibilityToggle,\n cn,\n} from '@arbidocs/react/ui'\nimport { TabHeader, type Tab } from '../../shell/TabHeader'\nimport { FilterInput } from '../../shell/FilterInput'\nimport { TriStateFilterMenu, type TriState } from '../../settings/TriStateFilterMenu'\nimport { EmptyState } from '../../components/EmptyState'\nimport { GridView } from '../../files/GridView'\nimport { SelectionBar, SelectionBarAction } from '../../files/SelectionBar'\nimport { testIdOr } from '../../chat/test-id'\nimport { PersonPill, type TaskPerson } from './PersonPill'\nimport { TaskTriggerChip, type TaskTriggerChipLabels } from './TaskTriggerChip'\nimport { createWorkflowColumns } from './workflowColumns'\nimport {\n WorkflowCatalogueSections,\n type WorkflowCatalogueLabels,\n type WorkflowCatalogueRow,\n} from './WorkflowCatalogueSections'\nimport {\n hasTrigger,\n isScheduledWorkflow,\n isSkillRow,\n workflowStatus,\n listedRunStatus,\n workflowRunStatusLabel,\n workflowStepCount,\n workflowTriggerType,\n type WorkflowListRow,\n} from './workflowRows'\nimport {\n DEFAULT_WORKFLOW_CATALOGUE_LABELS,\n DEFAULT_WORKFLOW_LIST_LABELS,\n type WorkflowListLabels,\n} from './workflowTableLabels'\n\nexport interface WorkflowsTableProps<T extends WorkflowListRow> {\n /** Everything the viewer can run: saved workflows, and skills as virtual rows (`kind: 'skill'`). */\n workflows: T[]\n isLoading?: boolean\n /** This page contains saved automations only; skills stay in their own library. */\n automationsOnly?: boolean\n /** Human summary of when a workflow starts (\"Every weekday at 9:00\", \"On document uploaded\"). */\n describeTrigger: (workflow: T) => string\n /** Friendly display of an ISO timestamp. */\n formatDate: (iso: string) => string\n /** Pause or resume a workflow that starts by itself (an on-demand one has no switch). */\n onToggleActive: (workflow: T, active: boolean) => void\n /** Share a workflow with the workspace or make it private (the toggle appears with it). */\n onToggleShared?: (workflow: T, shouldShare: boolean) => void\n /** Open the workflow in the composer (workflow-edit mode). */\n onEdit: (workflow: T) => void\n /**\n * Run it. A saved workflow just runs (its inputs are stored); a skill needs its inputs, so the host\n * opens the run dialog with that skill selected.\n */\n onRun: (row: T) => void\n /** Run a skill later: the run dialog, on its schedule view. Offered on skill rows. */\n onRunLater?: (skill: T) => void\n onDelete: (workflow: T) => void\n /** Show the tasks this workflow created. */\n onViewRuns?: (workflow: T) => void\n /** Click on a row (not on one of its controls): a skill's detail, a workflow's editor. */\n onOpenRow?: (row: T) => void\n /** Open the task a workflow's last run created. */\n onOpenThread?: (conversationId: string) => void\n /** Each workflow's latest run: the newest task it created, by workflow id. */\n /** Each automation's latest run thread, with that thread's status (it corrects a lagging result). */\n lastRuns?: Record<string, { conversationId: string; at: string; threadStatus?: string | null }>\n /** Bulk actions on the selected workflows (skills are skipped). */\n onDeleteMany?: (workflows: T[]) => void\n onToggleActiveMany?: (workflows: T[], active: boolean) => void\n /** Agent names by id, for the Agent column (falls back to \"Agent\"). */\n agentNames?: Record<string, string>\n /** Skill names by `skill_ref`, for the action cell (falls back to the reference). */\n skillNames?: Record<string, string>\n /** Task names by id, for an \"after <task>\" trigger. */\n taskNames?: Record<string, string>\n /** How an agent appears in the Agent column; defaults to the app's user pill. */\n renderPerson?: (person: TaskPerson) => ReactNode\n /**\n * The viewer edits the workspace (owner or collaborator): they may then edit, pause, resume and run a\n * workflow shared with it. A guest leaves this off.\n */\n canEditShared?: boolean\n /** The viewer owns the workspace: with the creator, the only one who deletes a workflow. Who can see it stays the creator's alone. */\n isWorkspaceOwner?: boolean\n /** Workflow id with a request in flight: its row disables its controls. */\n busyId?: string | null\n tabs?: Tab[]\n activeTabId?: string\n onTabChange?: (id: string) => void\n content?: ReactNode\n /** Actions at the end of the tab row; a function is told when the row is narrow (a phone). */\n header?: ReactNode | ((isCompact: boolean) => ReactNode)\n gridId?: string\n labels?: Partial<WorkflowListLabels>\n triggerChipLabels?: Partial<TaskTriggerChipLabels>\n testId?: string\n /**\n * The host's catalogue: when it has entries, they are listed in sections by category (each\n * entry opens in the builder or runs), then the saved workflows. Absent or empty: the saved\n * workflows alone.\n */\n catalogue?: WorkflowCatalogueRow[]\n /** The order of the categories (and the ones shown). Absent: as the entries first name them. */\n categories?: string[]\n /** Open a catalogue entry in the builder, as a template. */\n onOpenTemplate?: (id: string) => void\n /** Run a catalogue entry. Absent: no Run on the entries. */\n onRunTemplate?: (id: string) => void\n /** Draws a catalogue entry's icon name. */\n renderIcon?: (icon: string) => ReactNode\n catalogueLabels?: Partial<WorkflowCatalogueLabels>\n}\n\ntype Filter = 'all' | 'skills' | 'workflows' | 'active' | 'paused' | 'scheduled'\n/** Each group narrows on its own: kinds, then states, then how it starts. */\nconst FILTER_GROUPS: Filter[][] = [['skills', 'workflows'], ['active', 'paused'], ['scheduled']]\nconst NO_CATALOGUE: WorkflowCatalogueRow[] = []\nconst ROW_HEIGHT = 40\n\n/**\n * Everything the viewer can run, in one list: skills (they run on demand) and saved workflows (they start\n * on a date, a repeat, an event or after a task, or on demand). Each row has its type, when it starts, what\n * it does, who runs it, its status (Active or Paused with a switch; On demand has none), when it last ran\n * (linking to the task that run created) and runs next, and a visible Run. The same grid as every other\n * list in the app.\n */\nexport function WorkflowsTable<T extends WorkflowListRow>(props: WorkflowsTableProps<T>) {\n const { workflows, isLoading, busyId, header, testId } = props\n const l: WorkflowListLabels = { ...DEFAULT_WORKFLOW_LIST_LABELS, ...props.labels }\n const [filterStates, setFilterStates] = useState<Map<Filter, TriState>>(new Map())\n const [filterOpen, setFilterOpen] = useState(false)\n const [query, setQuery] = useState('')\n const [selected, setSelected] = useState<T[]>([])\n const apiRef = useRef<GridApi<T> | null>(null)\n\n const q = query.trim().toLowerCase()\n const matches = (w: T) =>\n !q ||\n `${w.name} ${w.description ?? ''} ${w.prompt ?? ''} ${w.skill_ref ?? ''}`\n .toLowerCase()\n .includes(q)\n const inFilter = (w: T, f: Filter) =>\n f === 'all' ||\n (f === 'skills' && isSkillRow(w)) ||\n (f === 'workflows' && !isSkillRow(w)) ||\n (f === 'active' && workflowStatus(w) === 'active') ||\n (f === 'paused' && workflowStatus(w) === 'paused') ||\n (f === 'scheduled' && !isSkillRow(w) && isScheduledWorkflow(w))\n const counts = useMemo(() => {\n const out = { all: 0, skills: 0, workflows: 0, active: 0, paused: 0, scheduled: 0 }\n for (const w of workflows) {\n if (!matches(w)) continue\n for (const f of Object.keys(out) as Filter[]) if (inFilter(w, f)) out[f] += 1\n }\n return out\n // matches/inFilter read only `q` and the row.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [workflows, q])\n const shown = useMemo(\n () =>\n workflows.filter((w) => {\n if (!matches(w)) return false\n for (const group of FILTER_GROUPS) {\n const included = group.filter((f) => filterStates.get(f) === 'include')\n if (included.length && !included.some((f) => inFilter(w, f))) return false\n if (group.some((f) => filterStates.get(f) === 'exclude' && inFilter(w, f))) return false\n }\n return true\n }),\n [workflows, filterStates, q]\n )\n\n const renderPerson = props.renderPerson ?? ((p: TaskPerson) => <PersonPill person={p} />)\n const actionText = (w: T): string => {\n if (w.action)\n return w.action.type === 'email_documents' ? 'Email latest documents' : 'AI Review'\n if (isSkillRow(w))\n return w.description || (w.skill_ref && props.skillNames?.[w.skill_ref]) || w.name\n if (w.skill_ref) return props.skillNames?.[w.skill_ref] ?? w.skill_ref\n // A stepped workflow runs its plan: it is no reminder, even with no prompt of its own.\n const steps = workflowStepCount(w)\n if (steps > 0) return w.prompt?.trim() || l.steps(steps)\n return w.prompt?.trim() || w.plan?.goal?.trim() || l.reminder\n }\n\n // The cells read the latest handlers and lookups through this ref, so the column definitions are\n // built once and an interaction never makes the grid rebuild them.\n const latest = useRef({ props, l, renderPerson, actionText })\n latest.current = { props, l, renderPerson, actionText }\n\n const columnDefs = useMemo(\n () =>\n createWorkflowColumns<T>({\n labels: l,\n getTriggerText: (w) =>\n isSkillRow(w) ? l.statusOnDemand : latest.current.props.describeTrigger(w),\n renderName: (w) => {\n const { l: lb } = latest.current\n const skill = isSkillRow(w)\n const text = skill\n ? latest.current.actionText(w)\n : w.description || latest.current.actionText(w)\n // A name made from the instruction is not said again under itself.\n const stem = w.name.replace(/\u2026$/, '').trim()\n const about = text && text.trim() !== w.name.trim() && text.trim() !== stem ? text : ''\n return (\n <div className=\"min-w-0 leading-tight\">\n <span className=\"flex min-w-0 items-center gap-1.5\">\n <span\n className={cn(\n 'truncate text-sm font-normal',\n workflowStatus(w) === 'paused' && 'text-muted-foreground'\n )}\n data-testid={`workflow-name-${w.external_id}`}\n >\n {w.name}\n </span>\n {skill && (\n <span\n className=\"shrink-0 rounded-full border border-border px-1.5 text-[11px] text-muted-foreground\"\n data-testid={`workflow-type-${w.external_id}`}\n >\n {lb.typeSkill}\n </span>\n )}\n </span>\n {about && !latest.current.props.automationsOnly && (\n <p\n className=\"truncate text-xs text-muted-foreground\"\n data-testid={`workflow-action-${w.external_id}`}\n >\n {about}\n </p>\n )}\n </div>\n )\n },\n renderTrigger: (w) => {\n const { props: p } = latest.current\n const after = w.after_conversation_ext_id\n const skill = isSkillRow(w)\n return (\n <div className=\"min-w-0 leading-tight\">\n <TaskTriggerChip\n id={w.external_id}\n testId={`workflow-trigger-${w.external_id}`}\n triggerType={workflowTriggerType(w)}\n summary={skill ? '' : p.describeTrigger(w)}\n afterTaskId={after}\n afterTaskName={after ? p.taskNames?.[after] : undefined}\n labels={p.triggerChipLabels}\n />\n </div>\n )\n },\n renderStatus: (w) => {\n const { props: p, l: lb } = latest.current\n const canEdit = w.is_owner !== false || Boolean(p.canEditShared)\n return (\n <Switch\n checked={hasTrigger(w) && !isSkillRow(w) && Boolean(w.active)}\n disabled={!hasTrigger(w) || isSkillRow(w) || !canEdit || p.busyId === w.external_id}\n onCheckedChange={(next) => p.onToggleActive(w, next)}\n className=\"disabled:data-[state=unchecked]:bg-muted dark:disabled:data-[state=unchecked]:bg-muted\"\n aria-label={lb.activeSwitch(w.name)}\n data-testid={`workflow-active-${w.external_id}`}\n />\n )\n },\n renderShared: (w) => {\n const { props: p, l: lb } = latest.current\n if (!p.onToggleShared || isSkillRow(w)) return null\n // Who can see it is the creator's alone: unsharing hides it from everyone else.\n const isCreator = w.is_owner !== false\n return (\n <VisibilityToggle\n items={{ shared: w.shared ?? false }}\n onToggle={(share) => latest.current.props.onToggleShared?.(w, share)}\n disabled={!isCreator || p.busyId === w.external_id}\n disabledTooltip={lb.sharedOwnerOnly}\n showLabel={false}\n data-testid={`workflow-shared-${w.external_id}`}\n />\n )\n },\n renderLastRun: (w) => {\n const { props: p, l: lb } = latest.current\n const at = w.last_fired_at ?? p.lastRuns?.[w.external_id]?.at\n return (\n <button\n type=\"button\"\n className=\"h-full w-full truncate px-4 text-left text-sm hover:text-primary\"\n onClick={() => p.onViewRuns?.(w)}\n title=\"View run history\"\n data-testid={`workflow-last-run-${w.external_id}`}\n >\n {at ? p.formatDate(at) : lb.never}\n </button>\n )\n },\n renderResult: (w) => {\n const status = listedRunStatus(\n w.last_run_status,\n latest.current.props.lastRuns?.[w.external_id]?.threadStatus\n )\n const label = workflowRunStatusLabel(status)\n return (\n <button\n type=\"button\"\n onClick={() => latest.current.props.onViewRuns?.(w)}\n title=\"View run history\"\n className={cn(\n badgeVariants({ variant: 'outline' }),\n 'mx-4 cursor-pointer text-xs font-medium',\n status === 'failed'\n ? 'border-red-border bg-red-bg text-red-text hover:bg-red-bg/80'\n : status === 'completed' || status === 'success'\n ? 'border-green-border bg-green-bg text-green-text hover:bg-green-bg/80'\n : status\n ? 'border-primary/20 bg-primary/10 text-primary hover:bg-primary/15'\n : 'border-border bg-muted text-muted-foreground hover:bg-muted/80'\n )}\n data-testid={`workflow-result-${w.external_id}`}\n >\n {label}\n </button>\n )\n },\n renderActions: (w) => {\n const { props: p, l: lb } = latest.current\n const id = w.external_id\n const skill = isSkillRow(w)\n const busy = p.busyId === id\n const isOwner = w.is_owner !== false\n const canEdit = isOwner || Boolean(p.canEditShared)\n const canAdmin = isOwner || Boolean(p.isWorkspaceOwner)\n return (\n <div className=\"flex items-center justify-end gap-1\">\n {(skill || canEdit) && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"h-8 gap-1.5 pointer-coarse:h-11\"\n disabled={busy}\n onClick={() => p.onRun(w)}\n data-testid={`workflow-run-btn-${id}`}\n >\n <Play className=\"size-3.5\" aria-hidden />\n {lb.run}\n </Button>\n )}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 pointer-coarse:size-11\"\n aria-label={lb.moreActions}\n data-testid={`workflow-menu-${id}`}\n >\n <MoreHorizontal className=\"size-4\" aria-hidden />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {skill && p.onRunLater && (\n <DropdownMenuItem\n onSelect={() => p.onRunLater?.(w)}\n data-testid={`workflow-run-later-${id}`}\n >\n <History className=\"mr-2 size-4\" aria-hidden />\n {lb.runLater}\n </DropdownMenuItem>\n )}\n {!skill && canEdit && (\n <DropdownMenuItem\n onSelect={() => p.onEdit(w)}\n data-testid={`workflow-edit-${id}`}\n >\n <Pencil className=\"mr-2 size-4\" aria-hidden />\n {lb.editWorkflow}\n </DropdownMenuItem>\n )}\n {!skill && p.onViewRuns && (\n <DropdownMenuItem\n onSelect={() => p.onViewRuns?.(w)}\n data-testid={`workflow-runs-${id}`}\n >\n <History className=\"mr-2 size-4\" aria-hidden />\n {lb.runs}\n </DropdownMenuItem>\n )}\n {!skill && canEdit && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n disabled={busy || !canAdmin}\n onSelect={() => p.onDelete(w)}\n title={canAdmin ? undefined : lb.deleteOwnerOnly}\n className=\"text-destructive focus:text-destructive\"\n data-testid={`workflow-delete-${id}`}\n >\n <Trash2 className=\"mr-2 size-4\" aria-hidden />\n {lb.delete}\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n )\n },\n }),\n // Stable on purpose: only the header texts rebuild the columns (see `latest`).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n l.colName,\n l.colType,\n l.colTrigger,\n l.colAction,\n l.colAgent,\n l.colStatus,\n l.colShared,\n l.shared,\n l.colLastRun,\n l.colNextRun,\n ]\n )\n\n // A change in the lookups the cells draw from redraws them once.\n useEffect(() => {\n apiRef.current?.refreshCells({ force: true })\n }, [\n busyId,\n props.agentNames,\n props.skillNames,\n props.taskNames,\n props.lastRuns,\n props.renderPerson,\n props.labels,\n props.canEditShared,\n props.isWorkspaceOwner,\n ])\n\n const mine = selected.filter((w) => !isSkillRow(w))\n const adminSelected = mine.filter((w) => w.is_owner !== false || props.isWorkspaceOwner)\n const editableSelected = mine.filter(\n (w) => hasTrigger(w) && (w.is_owner !== false || props.canEditShared)\n )\n const clearSelection = () => setSelected([])\n\n // The category view: the catalogue (narrowed by the text filter; a state filter is about saved\n // workflows only, so it hides the catalogue), then the saved workflows.\n const byCategory = (props.catalogue?.length ?? 0) > 0\n const stateFiltered = [...filterStates.values()].some((state) => state === 'include')\n const catalogueLabels = { ...DEFAULT_WORKFLOW_CATALOGUE_LABELS, ...props.catalogueLabels }\n const catalogue = useMemo(\n () =>\n (props.catalogue ?? NO_CATALOGUE).filter(\n (row) => !q || `${row.title} ${row.description ?? ''}`.toLowerCase().includes(q)\n ),\n [props.catalogue, q]\n )\n const list =\n workflows.length === 0 && !isLoading ? (\n <EmptyState\n icon={Workflow}\n title={l.emptyTitle}\n description={l.emptyMessage}\n testId=\"workflow-list-empty\"\n />\n ) : (\n <div className=\"min-h-0 flex-1\">\n <GridView<T>\n testId=\"workflow-grid\"\n gridId={props.gridId ?? 'workflows-grid-v2'}\n items={shown}\n columnDefs={columnDefs}\n getItemId={(w) => w.external_id}\n getRowTestId={(w) => `workflow-row-${w.external_id}`}\n isLoading={isLoading}\n showEmpty={shown.length === 0}\n emptyState={{ title: l.noMatches }}\n rowHeight={ROW_HEIGHT}\n height=\"100%\"\n onGridReady={({ api }) => {\n apiRef.current = api\n }}\n onRowClick={(row) => props.onOpenRow?.(row)}\n selection={{ mode: 'multiple', selected, onSelectionChange: setSelected }}\n gridOptions={GRID_OPTIONS as never}\n />\n </div>\n )\n\n // The search box with its state filter: in the tab row, or (narrow) across a row of its own.\n const filterBox = (className?: string) => (\n <FilterInput\n className={className}\n value={query}\n onChange={setQuery}\n fields={['text']}\n onFieldsChange={() => {}}\n hideFieldPicker\n ariaLabel={l.searchLabel}\n testIds={{ input: 'workflow-search' }}\n filter={\n <TriStateFilterMenu\n testId=\"automations-filter-button\"\n open={filterOpen}\n onOpenChange={setFilterOpen}\n filterStates={filterStates}\n onFiltersChange={setFilterStates}\n triggerClassName=\"flex h-5 items-center gap-0.5 rounded px-1 text-muted-foreground hover:text-foreground pointer-coarse:h-11! pointer-coarse:min-w-11 pointer-coarse:justify-center\"\n renderChevron\n disableHoverOpen\n options={[\n ...(!props.automationsOnly\n ? [\n { id: 'skills' as const, label: l.filterSkills, count: counts.skills },\n {\n id: 'workflows' as const,\n label: l.filterWorkflows,\n count: counts.workflows,\n },\n ]\n : []),\n { id: 'active', label: l.filterActive, count: counts.active },\n { id: 'paused', label: l.filterPaused, count: counts.paused },\n { id: 'scheduled', label: l.filterScheduled, count: counts.scheduled },\n ]}\n />\n }\n />\n )\n\n return (\n <div\n className=\"flex min-h-0 flex-1 flex-col\"\n data-testid={testIdOr(testId, { testId: 'workflow-list' })}\n >\n <TabHeader\n testId=\"automations-tab-header\"\n tabs={[\n {\n id: 'automations',\n label: '',\n count: shown.length,\n countIcon: <Workflow className=\"size-3.5\" />,\n countPlacement: 'leading',\n presentation: 'count',\n hasActiveFilters: !!q || [...filterStates.values()].some(Boolean),\n },\n ...(props.tabs ?? []),\n ]}\n activeTabId={props.activeTabId ?? 'automations'}\n onTabChange={props.onTabChange ?? (() => {})}\n // A narrow row (a phone) gives the filter a row of its own under the tabs, so the host's\n // tabs and the actions keep their room in the tab row.\n firstTabContent={(isCompact) => (isCompact ? null : filterBox())}\n belowContent={(isCompact) => (isCompact ? filterBox('w-full') : null)}\n rightContent={header}\n />\n {props.content ? (\n props.content\n ) : byCategory ? (\n <div\n className=\"min-h-0 flex-1 space-y-8 overflow-auto p-4\"\n data-testid=\"workflow-categories\"\n >\n {!stateFiltered && (\n <WorkflowCatalogueSections\n rows={catalogue}\n categories={props.categories}\n labels={catalogueLabels}\n renderIcon={props.renderIcon}\n onOpen={props.onOpenTemplate}\n onRun={props.onRunTemplate}\n />\n )}\n <section className=\"space-y-3\" data-testid=\"workflow-category-saved\">\n <h2 className=\"flex items-center gap-2 text-sm font-semibold text-foreground\">\n <Workflow className=\"size-4 text-primary\" aria-hidden /> {l.savedWorkflows}\n </h2>\n <div className=\"flex h-[min(32rem,70dvh)] min-h-64 flex-col\">{list}</div>\n </section>\n </div>\n ) : (\n list\n )}\n {!props.content && (\n <SelectionBar count={selected.length} onClear={clearSelection}>\n {(isCompact) => (\n <>\n {props.onToggleActiveMany && (\n <>\n <SelectionBarAction\n icon={Play}\n label={l.makeActive}\n onClick={() => {\n props.onToggleActiveMany?.(editableSelected, true)\n clearSelection()\n }}\n disabled={editableSelected.length === 0}\n isCompact={isCompact}\n testId=\"workflow-bulk-activate\"\n />\n <SelectionBarAction\n icon={Workflow}\n label={l.makePaused}\n onClick={() => {\n props.onToggleActiveMany?.(editableSelected, false)\n clearSelection()\n }}\n disabled={editableSelected.length === 0}\n isCompact={isCompact}\n testId=\"workflow-bulk-pause\"\n />\n </>\n )}\n {props.onDeleteMany && (\n <SelectionBarAction\n icon={Trash2}\n label={l.delete}\n onClick={() => {\n props.onDeleteMany?.(adminSelected)\n clearSelection()\n }}\n disabled={adminSelected.length === 0}\n isCompact={isCompact}\n className=\"border-red-border text-red-text hover:bg-red-bg hover:text-red-text\"\n testId=\"workflow-bulk-delete\"\n />\n )}\n </>\n )}\n </SelectionBar>\n )}\n </div>\n )\n}\n\nconst GRID_OPTIONS = { suppressClickEdit: true }\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { useEffect, useMemo, useRef, useState, type ReactNode } from 'react'\nimport type { GridApi } from 'ag-grid-community'\nimport { History, MoreHorizontal, Pencil, Play, Trash2, Workflow } from 'lucide-react'\nimport {\n Button,\n badgeVariants,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n Switch,\n cn,\n SharingEntity,\n} from '@arbidocs/react/ui'\nimport { TabHeader, type Tab } from '../../shell/TabHeader'\nimport { FilterInput } from '../../shell/FilterInput'\nimport { TriStateFilterMenu, type TriState } from '../../settings/TriStateFilterMenu'\nimport { EmptyState } from '../../components/EmptyState'\nimport { GridView } from '../../files/GridView'\nimport { SelectionBar, SelectionBarAction } from '../../files/SelectionBar'\nimport { testIdOr } from '../../chat/test-id'\nimport { PersonPill, type TaskPerson } from './PersonPill'\nimport { TaskTriggerChip, type TaskTriggerChipLabels } from './TaskTriggerChip'\nimport { createWorkflowColumns } from './workflowColumns'\nimport {\n WorkflowCatalogueSections,\n type WorkflowCatalogueLabels,\n type WorkflowCatalogueRow,\n} from './WorkflowCatalogueSections'\nimport {\n hasTrigger,\n isScheduledWorkflow,\n isSkillRow,\n workflowStatus,\n listedRunStatus,\n workflowRunStatusLabel,\n workflowStepCount,\n workflowTriggerType,\n type WorkflowListRow,\n} from './workflowRows'\nimport {\n DEFAULT_WORKFLOW_CATALOGUE_LABELS,\n DEFAULT_WORKFLOW_LIST_LABELS,\n type WorkflowListLabels,\n} from './workflowTableLabels'\n\nexport interface WorkflowsTableProps<T extends WorkflowListRow> {\n /** Everything the viewer can run: saved workflows, and skills as virtual rows (`kind: 'skill'`). */\n workflows: T[]\n isLoading?: boolean\n /** This page contains saved automations only; skills stay in their own library. */\n automationsOnly?: boolean\n /** Human summary of when a workflow starts (\"Every weekday at 9:00\", \"On document uploaded\"). */\n describeTrigger: (workflow: T) => string\n /** Friendly display of an ISO timestamp. */\n formatDate: (iso: string) => string\n /** Pause or resume a workflow that starts by itself (an on-demand one has no switch). */\n onToggleActive: (workflow: T, active: boolean) => void\n /** Share a workflow with the workspace or make it private (the toggle appears with it). */\n onToggleShared?: (workflow: T, shouldShare: boolean) => void\n /** Open the workflow in the composer (workflow-edit mode). */\n onEdit: (workflow: T) => void\n /**\n * Run it. A saved workflow just runs (its inputs are stored); a skill needs its inputs, so the host\n * opens the run dialog with that skill selected.\n */\n onRun: (row: T) => void\n /** Run a skill later: the run dialog, on its schedule view. Offered on skill rows. */\n onRunLater?: (skill: T) => void\n onDelete: (workflow: T) => void\n /** Show the tasks this workflow created. */\n onViewRuns?: (workflow: T) => void\n /** Click on a row (not on one of its controls): a skill's detail, a workflow's editor. */\n onOpenRow?: (row: T) => void\n /** Open the task a workflow's last run created. */\n onOpenThread?: (conversationId: string) => void\n /** Each workflow's latest run: the newest task it created, by workflow id. */\n /** Each automation's latest run thread, with that thread's status (it corrects a lagging result). */\n lastRuns?: Record<string, { conversationId: string; at: string; threadStatus?: string | null }>\n /** Bulk actions on the selected workflows (skills are skipped). */\n onDeleteMany?: (workflows: T[]) => void\n onToggleActiveMany?: (workflows: T[], active: boolean) => void\n /** Agent names by id, for the Agent column (falls back to \"Agent\"). */\n agentNames?: Record<string, string>\n /** Skill names by `skill_ref`, for the action cell (falls back to the reference). */\n skillNames?: Record<string, string>\n /** Task names by id, for an \"after <task>\" trigger. */\n taskNames?: Record<string, string>\n /** How an agent appears in the Agent column; defaults to the app's user pill. */\n renderPerson?: (person: TaskPerson) => ReactNode\n /**\n * The viewer edits the workspace (owner or collaborator): they may then edit, pause, resume and run a\n * workflow shared with it. A guest leaves this off.\n */\n canEditShared?: boolean\n /** The viewer owns the workspace: with the creator, the only one who deletes a workflow. Who can see it stays the creator's alone. */\n isWorkspaceOwner?: boolean\n /** Workflow id with a request in flight: its row disables its controls. */\n busyId?: string | null\n tabs?: Tab[]\n activeTabId?: string\n onTabChange?: (id: string) => void\n content?: ReactNode\n /** Actions at the end of the tab row; a function is told when the row is narrow (a phone). */\n header?: ReactNode | ((isCompact: boolean) => ReactNode)\n gridId?: string\n labels?: Partial<WorkflowListLabels>\n triggerChipLabels?: Partial<TaskTriggerChipLabels>\n testId?: string\n /**\n * The host's catalogue: when it has entries, they are listed in sections by category (each\n * entry opens in the builder or runs), then the saved workflows. Absent or empty: the saved\n * workflows alone.\n */\n catalogue?: WorkflowCatalogueRow[]\n /** The order of the categories (and the ones shown). Absent: as the entries first name them. */\n categories?: string[]\n /** Open a catalogue entry in the builder, as a template. */\n onOpenTemplate?: (id: string) => void\n /** Run a catalogue entry. Absent: no Run on the entries. */\n onRunTemplate?: (id: string) => void\n /** Draws a catalogue entry's icon name. */\n renderIcon?: (icon: string) => ReactNode\n catalogueLabels?: Partial<WorkflowCatalogueLabels>\n}\n\ntype Filter = 'all' | 'skills' | 'workflows' | 'active' | 'paused' | 'scheduled'\n/** Each group narrows on its own: kinds, then states, then how it starts. */\nconst FILTER_GROUPS: Filter[][] = [['skills', 'workflows'], ['active', 'paused'], ['scheduled']]\nconst NO_CATALOGUE: WorkflowCatalogueRow[] = []\nconst ROW_HEIGHT = 40\n\n/**\n * Everything the viewer can run, in one list: skills (they run on demand) and saved workflows (they start\n * on a date, a repeat, an event or after a task, or on demand). Each row has its type, when it starts, what\n * it does, who runs it, its status (Active or Paused with a switch; On demand has none), when it last ran\n * (linking to the task that run created) and runs next, and a visible Run. The same grid as every other\n * list in the app.\n */\nexport function WorkflowsTable<T extends WorkflowListRow>(props: WorkflowsTableProps<T>) {\n const { workflows, isLoading, busyId, header, testId } = props\n const l: WorkflowListLabels = { ...DEFAULT_WORKFLOW_LIST_LABELS, ...props.labels }\n const [filterStates, setFilterStates] = useState<Map<Filter, TriState>>(new Map())\n const [filterOpen, setFilterOpen] = useState(false)\n const [query, setQuery] = useState('')\n const [selected, setSelected] = useState<T[]>([])\n const apiRef = useRef<GridApi<T> | null>(null)\n\n const q = query.trim().toLowerCase()\n const matches = (w: T) =>\n !q ||\n `${w.name} ${w.description ?? ''} ${w.prompt ?? ''} ${w.skill_ref ?? ''}`\n .toLowerCase()\n .includes(q)\n const inFilter = (w: T, f: Filter) =>\n f === 'all' ||\n (f === 'skills' && isSkillRow(w)) ||\n (f === 'workflows' && !isSkillRow(w)) ||\n (f === 'active' && workflowStatus(w) === 'active') ||\n (f === 'paused' && workflowStatus(w) === 'paused') ||\n (f === 'scheduled' && !isSkillRow(w) && isScheduledWorkflow(w))\n const counts = useMemo(() => {\n const out = { all: 0, skills: 0, workflows: 0, active: 0, paused: 0, scheduled: 0 }\n for (const w of workflows) {\n if (!matches(w)) continue\n for (const f of Object.keys(out) as Filter[]) if (inFilter(w, f)) out[f] += 1\n }\n return out\n // matches/inFilter read only `q` and the row.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [workflows, q])\n const shown = useMemo(\n () =>\n workflows.filter((w) => {\n if (!matches(w)) return false\n for (const group of FILTER_GROUPS) {\n const included = group.filter((f) => filterStates.get(f) === 'include')\n if (included.length && !included.some((f) => inFilter(w, f))) return false\n if (group.some((f) => filterStates.get(f) === 'exclude' && inFilter(w, f))) return false\n }\n return true\n }),\n [workflows, filterStates, q]\n )\n\n const renderPerson = props.renderPerson ?? ((p: TaskPerson) => <PersonPill person={p} />)\n const actionText = (w: T): string => {\n if (w.action)\n return w.action.type === 'email_documents' ? 'Email latest documents' : 'AI Review'\n if (isSkillRow(w))\n return w.description || (w.skill_ref && props.skillNames?.[w.skill_ref]) || w.name\n if (w.skill_ref) return props.skillNames?.[w.skill_ref] ?? w.skill_ref\n // A stepped workflow runs its plan: it is no reminder, even with no prompt of its own.\n const steps = workflowStepCount(w)\n if (steps > 0) return w.prompt?.trim() || l.steps(steps)\n return w.prompt?.trim() || w.plan?.goal?.trim() || l.reminder\n }\n\n // The cells read the latest handlers and lookups through this ref, so the column definitions are\n // built once and an interaction never makes the grid rebuild them.\n const latest = useRef({ props, l, renderPerson, actionText })\n latest.current = { props, l, renderPerson, actionText }\n\n const columnDefs = useMemo(\n () =>\n createWorkflowColumns<T>({\n labels: l,\n getTriggerText: (w) =>\n isSkillRow(w) ? l.statusOnDemand : latest.current.props.describeTrigger(w),\n renderName: (w) => {\n const { l: lb } = latest.current\n const skill = isSkillRow(w)\n const text = skill\n ? latest.current.actionText(w)\n : w.description || latest.current.actionText(w)\n // A name made from the instruction is not said again under itself.\n const stem = w.name.replace(/\u2026$/, '').trim()\n const about = text && text.trim() !== w.name.trim() && text.trim() !== stem ? text : ''\n return (\n <div className=\"min-w-0 leading-tight\">\n <span className=\"flex min-w-0 items-center gap-1.5\">\n <span\n className={cn(\n 'truncate text-sm font-normal',\n workflowStatus(w) === 'paused' && 'text-muted-foreground'\n )}\n data-testid={`workflow-name-${w.external_id}`}\n >\n {w.name}\n </span>\n {skill && (\n <span\n className=\"shrink-0 rounded-full border border-border px-1.5 text-[11px] text-muted-foreground\"\n data-testid={`workflow-type-${w.external_id}`}\n >\n {lb.typeSkill}\n </span>\n )}\n </span>\n {about && !latest.current.props.automationsOnly && (\n <p\n className=\"truncate text-xs text-muted-foreground\"\n data-testid={`workflow-action-${w.external_id}`}\n >\n {about}\n </p>\n )}\n </div>\n )\n },\n renderTrigger: (w) => {\n const { props: p } = latest.current\n const after = w.after_conversation_ext_id\n const skill = isSkillRow(w)\n return (\n <div className=\"min-w-0 leading-tight\">\n <TaskTriggerChip\n id={w.external_id}\n testId={`workflow-trigger-${w.external_id}`}\n triggerType={workflowTriggerType(w)}\n summary={skill ? '' : p.describeTrigger(w)}\n afterTaskId={after}\n afterTaskName={after ? p.taskNames?.[after] : undefined}\n labels={p.triggerChipLabels}\n />\n </div>\n )\n },\n renderStatus: (w) => {\n const { props: p, l: lb } = latest.current\n const canEdit = w.is_owner !== false || Boolean(p.canEditShared)\n return (\n <Switch\n checked={hasTrigger(w) && !isSkillRow(w) && Boolean(w.active)}\n disabled={!hasTrigger(w) || isSkillRow(w) || !canEdit || p.busyId === w.external_id}\n onCheckedChange={(next) => p.onToggleActive(w, next)}\n className=\"disabled:data-[state=unchecked]:bg-muted dark:disabled:data-[state=unchecked]:bg-muted\"\n aria-label={lb.activeSwitch(w.name)}\n data-testid={`workflow-active-${w.external_id}`}\n />\n )\n },\n renderShared: (w) => {\n const { props: p, l: lb } = latest.current\n if (!p.onToggleShared || isSkillRow(w)) return null\n // Who can see it is the creator's alone: unsharing hides it from everyone else.\n const isCreator = w.is_owner !== false\n return (\n <SharingEntity\n shared={w.shared ?? false}\n onToggle={(share) => latest.current.props.onToggleShared?.(w, share)}\n disabled={!isCreator || p.busyId === w.external_id}\n disabledTooltip={lb.sharedOwnerOnly}\n data-testid={`workflow-shared-${w.external_id}`}\n />\n )\n },\n renderLastRun: (w) => {\n const { props: p, l: lb } = latest.current\n const at = w.last_fired_at ?? p.lastRuns?.[w.external_id]?.at\n return (\n <button\n type=\"button\"\n className=\"h-full w-full truncate px-4 text-left text-sm hover:text-primary\"\n onClick={() => p.onViewRuns?.(w)}\n title=\"View run history\"\n data-testid={`workflow-last-run-${w.external_id}`}\n >\n {at ? p.formatDate(at) : lb.never}\n </button>\n )\n },\n renderResult: (w) => {\n const status = listedRunStatus(\n w.last_run_status,\n latest.current.props.lastRuns?.[w.external_id]?.threadStatus\n )\n const label = workflowRunStatusLabel(status)\n return (\n <button\n type=\"button\"\n onClick={() => latest.current.props.onViewRuns?.(w)}\n title=\"View run history\"\n className={cn(\n badgeVariants({ variant: 'outline' }),\n 'mx-4 cursor-pointer text-xs font-medium',\n status === 'failed'\n ? 'border-red-border bg-red-bg text-red-text hover:bg-red-bg/80'\n : status === 'completed' || status === 'success'\n ? 'border-green-border bg-green-bg text-green-text hover:bg-green-bg/80'\n : status\n ? 'border-primary/20 bg-primary/10 text-primary hover:bg-primary/15'\n : 'border-border bg-muted text-muted-foreground hover:bg-muted/80'\n )}\n data-testid={`workflow-result-${w.external_id}`}\n >\n {label}\n </button>\n )\n },\n renderActions: (w) => {\n const { props: p, l: lb } = latest.current\n const id = w.external_id\n const skill = isSkillRow(w)\n const busy = p.busyId === id\n const isOwner = w.is_owner !== false\n const canEdit = isOwner || Boolean(p.canEditShared)\n const canAdmin = isOwner || Boolean(p.isWorkspaceOwner)\n return (\n <div className=\"flex items-center justify-end gap-1\">\n {(skill || canEdit) && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"h-8 gap-1.5 pointer-coarse:h-11\"\n disabled={busy}\n onClick={() => p.onRun(w)}\n data-testid={`workflow-run-btn-${id}`}\n >\n <Play className=\"size-3.5\" aria-hidden />\n {lb.run}\n </Button>\n )}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 pointer-coarse:size-11\"\n aria-label={lb.moreActions}\n data-testid={`workflow-menu-${id}`}\n >\n <MoreHorizontal className=\"size-4\" aria-hidden />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {skill && p.onRunLater && (\n <DropdownMenuItem\n onSelect={() => p.onRunLater?.(w)}\n data-testid={`workflow-run-later-${id}`}\n >\n <History className=\"mr-2 size-4\" aria-hidden />\n {lb.runLater}\n </DropdownMenuItem>\n )}\n {!skill && canEdit && (\n <DropdownMenuItem\n onSelect={() => p.onEdit(w)}\n data-testid={`workflow-edit-${id}`}\n >\n <Pencil className=\"mr-2 size-4\" aria-hidden />\n {lb.editWorkflow}\n </DropdownMenuItem>\n )}\n {!skill && p.onViewRuns && (\n <DropdownMenuItem\n onSelect={() => p.onViewRuns?.(w)}\n data-testid={`workflow-runs-${id}`}\n >\n <History className=\"mr-2 size-4\" aria-hidden />\n {lb.runs}\n </DropdownMenuItem>\n )}\n {!skill && canEdit && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n disabled={busy || !canAdmin}\n onSelect={() => p.onDelete(w)}\n title={canAdmin ? undefined : lb.deleteOwnerOnly}\n className=\"text-destructive focus:text-destructive\"\n data-testid={`workflow-delete-${id}`}\n >\n <Trash2 className=\"mr-2 size-4\" aria-hidden />\n {lb.delete}\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n )\n },\n }),\n // Stable on purpose: only the header texts rebuild the columns (see `latest`).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n l.colName,\n l.colType,\n l.colTrigger,\n l.colAction,\n l.colAgent,\n l.colStatus,\n l.colShared,\n l.shared,\n l.colLastRun,\n l.colNextRun,\n ]\n )\n\n // A change in the lookups the cells draw from redraws them once.\n useEffect(() => {\n apiRef.current?.refreshCells({ force: true })\n }, [\n busyId,\n props.agentNames,\n props.skillNames,\n props.taskNames,\n props.lastRuns,\n props.renderPerson,\n props.labels,\n props.canEditShared,\n props.isWorkspaceOwner,\n ])\n\n const mine = selected.filter((w) => !isSkillRow(w))\n const adminSelected = mine.filter((w) => w.is_owner !== false || props.isWorkspaceOwner)\n const editableSelected = mine.filter(\n (w) => hasTrigger(w) && (w.is_owner !== false || props.canEditShared)\n )\n const clearSelection = () => setSelected([])\n\n // The category view: the catalogue (narrowed by the text filter; a state filter is about saved\n // workflows only, so it hides the catalogue), then the saved workflows.\n const byCategory = (props.catalogue?.length ?? 0) > 0\n const stateFiltered = [...filterStates.values()].some((state) => state === 'include')\n const catalogueLabels = { ...DEFAULT_WORKFLOW_CATALOGUE_LABELS, ...props.catalogueLabels }\n const catalogue = useMemo(\n () =>\n (props.catalogue ?? NO_CATALOGUE).filter(\n (row) => !q || `${row.title} ${row.description ?? ''}`.toLowerCase().includes(q)\n ),\n [props.catalogue, q]\n )\n const list =\n workflows.length === 0 && !isLoading ? (\n <EmptyState\n icon={Workflow}\n title={l.emptyTitle}\n description={l.emptyMessage}\n testId=\"workflow-list-empty\"\n />\n ) : (\n <div className=\"min-h-0 flex-1\">\n <GridView<T>\n testId=\"workflow-grid\"\n gridId={props.gridId ?? 'workflows-grid-v2'}\n items={shown}\n columnDefs={columnDefs}\n getItemId={(w) => w.external_id}\n getRowTestId={(w) => `workflow-row-${w.external_id}`}\n isLoading={isLoading}\n showEmpty={shown.length === 0}\n emptyState={{ title: l.noMatches }}\n rowHeight={ROW_HEIGHT}\n height=\"100%\"\n onGridReady={({ api }) => {\n apiRef.current = api\n }}\n onRowClick={(row) => props.onOpenRow?.(row)}\n selection={{ mode: 'multiple', selected, onSelectionChange: setSelected }}\n gridOptions={GRID_OPTIONS as never}\n />\n </div>\n )\n\n // The search box with its state filter: in the tab row, or (narrow) across a row of its own.\n const filterBox = (className?: string) => (\n <FilterInput\n className={className}\n value={query}\n onChange={setQuery}\n fields={['text']}\n onFieldsChange={() => {}}\n hideFieldPicker\n ariaLabel={l.searchLabel}\n testIds={{ input: 'workflow-search' }}\n filter={\n <TriStateFilterMenu\n testId=\"automations-filter-button\"\n open={filterOpen}\n onOpenChange={setFilterOpen}\n filterStates={filterStates}\n onFiltersChange={setFilterStates}\n triggerClassName=\"flex h-5 items-center gap-0.5 rounded px-1 text-muted-foreground hover:text-foreground pointer-coarse:h-11! pointer-coarse:min-w-11 pointer-coarse:justify-center\"\n renderChevron\n disableHoverOpen\n options={[\n ...(!props.automationsOnly\n ? [\n { id: 'skills' as const, label: l.filterSkills, count: counts.skills },\n {\n id: 'workflows' as const,\n label: l.filterWorkflows,\n count: counts.workflows,\n },\n ]\n : []),\n { id: 'active', label: l.filterActive, count: counts.active },\n { id: 'paused', label: l.filterPaused, count: counts.paused },\n { id: 'scheduled', label: l.filterScheduled, count: counts.scheduled },\n ]}\n />\n }\n />\n )\n\n return (\n <div\n className=\"flex min-h-0 flex-1 flex-col\"\n data-testid={testIdOr(testId, { testId: 'workflow-list' })}\n >\n <TabHeader\n testId=\"automations-tab-header\"\n tabs={[\n {\n id: 'automations',\n label: '',\n count: shown.length,\n countIcon: <Workflow className=\"size-3.5\" />,\n countPlacement: 'leading',\n presentation: 'count',\n hasActiveFilters: !!q || [...filterStates.values()].some(Boolean),\n },\n ...(props.tabs ?? []),\n ]}\n activeTabId={props.activeTabId ?? 'automations'}\n onTabChange={props.onTabChange ?? (() => {})}\n // A narrow row (a phone) gives the filter a row of its own under the tabs, so the host's\n // tabs and the actions keep their room in the tab row.\n firstTabContent={(isCompact) => (isCompact ? null : filterBox())}\n belowContent={(isCompact) => (isCompact ? filterBox('w-full') : null)}\n rightContent={header}\n />\n {props.content ? (\n props.content\n ) : byCategory ? (\n <div\n className=\"min-h-0 flex-1 space-y-8 overflow-auto p-4\"\n data-testid=\"workflow-categories\"\n >\n {!stateFiltered && (\n <WorkflowCatalogueSections\n rows={catalogue}\n categories={props.categories}\n labels={catalogueLabels}\n renderIcon={props.renderIcon}\n onOpen={props.onOpenTemplate}\n onRun={props.onRunTemplate}\n />\n )}\n <section className=\"space-y-3\" data-testid=\"workflow-category-saved\">\n <h2 className=\"flex items-center gap-2 text-sm font-semibold text-foreground\">\n <Workflow className=\"size-4 text-primary\" aria-hidden /> {l.savedWorkflows}\n </h2>\n <div className=\"flex h-[min(32rem,70dvh)] min-h-64 flex-col\">{list}</div>\n </section>\n </div>\n ) : (\n list\n )}\n {!props.content && (\n <SelectionBar count={selected.length} onClear={clearSelection}>\n {(isCompact) => (\n <>\n {props.onToggleActiveMany && (\n <>\n <SelectionBarAction\n icon={Play}\n label={l.makeActive}\n onClick={() => {\n props.onToggleActiveMany?.(editableSelected, true)\n clearSelection()\n }}\n disabled={editableSelected.length === 0}\n isCompact={isCompact}\n testId=\"workflow-bulk-activate\"\n />\n <SelectionBarAction\n icon={Workflow}\n label={l.makePaused}\n onClick={() => {\n props.onToggleActiveMany?.(editableSelected, false)\n clearSelection()\n }}\n disabled={editableSelected.length === 0}\n isCompact={isCompact}\n testId=\"workflow-bulk-pause\"\n />\n </>\n )}\n {props.onDeleteMany && (\n <SelectionBarAction\n icon={Trash2}\n label={l.delete}\n onClick={() => {\n props.onDeleteMany?.(adminSelected)\n clearSelection()\n }}\n disabled={adminSelected.length === 0}\n isCompact={isCompact}\n className=\"border-red-border text-red-text hover:bg-red-bg hover:text-red-text\"\n testId=\"workflow-bulk-delete\"\n />\n )}\n </>\n )}\n </SelectionBar>\n )}\n </div>\n )\n}\n\nconst GRID_OPTIONS = { suppressClickEdit: true }\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -43,7 +43,7 @@ function createTaskColumns(o) {
|
|
|
43
43
|
colId: "shared",
|
|
44
44
|
headerName: l.colShared,
|
|
45
45
|
headerTooltip: l.shared,
|
|
46
|
-
width:
|
|
46
|
+
width: 120,
|
|
47
47
|
cellStyle: { display: "flex", alignItems: "center", justifyContent: "center" },
|
|
48
48
|
valueGetter: (p) => p.data?.task.is_shared ?? false,
|
|
49
49
|
cellRenderer: cell(o.renderShared)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/agents/tasks/taskColumns.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * Column definitions for the tasks grid. Every column has an\n * explicit `colId` (AG Grid persists column state by id: see CLAUDE.md). The table supplies behaviour and\n * the cells that need it through slots; the structure, widths and headers live here. The slots must be\n * stable functions (the table keeps the latest handlers behind them) so the definitions are built once\n * and the grid never refreshes its columns on a selection or expand.\n *\n * Every conversation is a task: Owner (who has the next step), due, shared, thread link,\n * status, outputs. Rows are `TaskGridRow`s: a task plus where it sits in the sub-task tree, so the\n * order is the tree's. A column's header still shows and reports the sort, but the grid's own sort is\n * a no-op (`keepOrder`): that would tear sub-tasks away from their parent, so the table sorts within\n * each level instead (see `buildTaskRows`).\n */\nimport type { ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport type { TaskGridRow, TaskListRow } from './taskRows'\nimport type { TaskListLabels } from './taskTableLabels'\n\n/** The actions column's width: Allow access and the menu (the widest row). */\nexport const ACTIONS_WIDTH = 160\nconst NARROW_ACTIONS_WIDTH = 56\n\nexport const TASK_COLUMN_ORDER = [\n 'name',\n 'owner',\n 'due',\n 'status',\n 'outputs',\n 'shared',\n 'actions',\n] as const\n\nexport interface CreateTaskColumnsOptions<T extends TaskListRow> {\n labels: TaskListLabels\n renderName: (row: TaskGridRow<T>) => ReactNode\n /** Who has the next step. */\n renderOwner: (row: TaskGridRow<T>) => ReactNode\n renderDue: (row: TaskGridRow<T>) => ReactNode\n renderShared: (row: TaskGridRow<T>) => ReactNode\n /** The documents the task generated. */\n renderOutputs: (row: TaskGridRow<T>) => ReactNode\n /** A phone-width grid: the actions column is just the menu. */\n narrow?: boolean\n /** Whether the Outputs column is shown: only worth the room once some task has outputs. */\n showOutputs?: boolean\n renderStatus: (row: TaskGridRow<T>) => ReactNode\n /** Who is in the thread (Threads view). */\n renderActions: (row: TaskGridRow<T>) => ReactNode\n /** Plain text of the owner cell, for sorting, filters and the clipboard. */\n getOwnerName: (row: TaskGridRow<T>) => string\n}\n\n/** Grid-side comparator that keeps the table's order: the table sorts each level itself. */\nconst keepOrder = () => 0\n\n/** Columns the user can sort by, per view. */\nexport type SortableTaskColumn = 'name' | 'owner' | 'due' | 'status' | 'updated' | 'messages'\n\n/** The cell renderer for a slot: a missing row (AG Grid's loading shell) renders nothing. */\nfunction cell<T extends TaskListRow>(render: (row: TaskGridRow<T>) => ReactNode) {\n return (params: ICellRendererParams<TaskGridRow<T>>): ReactNode =>\n params.data ? render(params.data) : null\n}\n\nexport function createTaskColumns<T extends TaskListRow>(\n o: CreateTaskColumnsOptions<T>\n): ColDef<TaskGridRow<T>>[] {\n const l = o.labels\n const sortable = {\n sortable: true,\n comparator: keepOrder,\n sortingOrder: ['asc' as const, 'desc' as const, null],\n }\n const base: Partial<ColDef<TaskGridRow<T>>> = {\n sortable: false,\n suppressMovable: true,\n // Keyboard focus lands on the name cell only (arrow keys expand and collapse sub-tasks there).\n suppressNavigable: true,\n cellStyle: { display: 'flex', alignItems: 'center' },\n }\n const name: ColDef<TaskGridRow<T>> = {\n ...base,\n colId: 'name',\n ...sortable,\n suppressNavigable: false,\n headerName: l.colTask,\n flex: 3,\n minWidth: 200,\n cellRenderer: cell(o.renderName),\n }\n const shared: ColDef<TaskGridRow<T>> = {\n ...base,\n colId: 'shared',\n headerName: l.colShared,\n headerTooltip: l.shared,\n width:
|
|
4
|
+
"sourcesContent": ["/**\n * Column definitions for the tasks grid. Every column has an\n * explicit `colId` (AG Grid persists column state by id: see CLAUDE.md). The table supplies behaviour and\n * the cells that need it through slots; the structure, widths and headers live here. The slots must be\n * stable functions (the table keeps the latest handlers behind them) so the definitions are built once\n * and the grid never refreshes its columns on a selection or expand.\n *\n * Every conversation is a task: Owner (who has the next step), due, shared, thread link,\n * status, outputs. Rows are `TaskGridRow`s: a task plus where it sits in the sub-task tree, so the\n * order is the tree's. A column's header still shows and reports the sort, but the grid's own sort is\n * a no-op (`keepOrder`): that would tear sub-tasks away from their parent, so the table sorts within\n * each level instead (see `buildTaskRows`).\n */\nimport type { ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport type { TaskGridRow, TaskListRow } from './taskRows'\nimport type { TaskListLabels } from './taskTableLabels'\n\n/** The actions column's width: Allow access and the menu (the widest row). */\nexport const ACTIONS_WIDTH = 160\nconst NARROW_ACTIONS_WIDTH = 56\n\nexport const TASK_COLUMN_ORDER = [\n 'name',\n 'owner',\n 'due',\n 'status',\n 'outputs',\n 'shared',\n 'actions',\n] as const\n\nexport interface CreateTaskColumnsOptions<T extends TaskListRow> {\n labels: TaskListLabels\n renderName: (row: TaskGridRow<T>) => ReactNode\n /** Who has the next step. */\n renderOwner: (row: TaskGridRow<T>) => ReactNode\n renderDue: (row: TaskGridRow<T>) => ReactNode\n renderShared: (row: TaskGridRow<T>) => ReactNode\n /** The documents the task generated. */\n renderOutputs: (row: TaskGridRow<T>) => ReactNode\n /** A phone-width grid: the actions column is just the menu. */\n narrow?: boolean\n /** Whether the Outputs column is shown: only worth the room once some task has outputs. */\n showOutputs?: boolean\n renderStatus: (row: TaskGridRow<T>) => ReactNode\n /** Who is in the thread (Threads view). */\n renderActions: (row: TaskGridRow<T>) => ReactNode\n /** Plain text of the owner cell, for sorting, filters and the clipboard. */\n getOwnerName: (row: TaskGridRow<T>) => string\n}\n\n/** Grid-side comparator that keeps the table's order: the table sorts each level itself. */\nconst keepOrder = () => 0\n\n/** Columns the user can sort by, per view. */\nexport type SortableTaskColumn = 'name' | 'owner' | 'due' | 'status' | 'updated' | 'messages'\n\n/** The cell renderer for a slot: a missing row (AG Grid's loading shell) renders nothing. */\nfunction cell<T extends TaskListRow>(render: (row: TaskGridRow<T>) => ReactNode) {\n return (params: ICellRendererParams<TaskGridRow<T>>): ReactNode =>\n params.data ? render(params.data) : null\n}\n\nexport function createTaskColumns<T extends TaskListRow>(\n o: CreateTaskColumnsOptions<T>\n): ColDef<TaskGridRow<T>>[] {\n const l = o.labels\n const sortable = {\n sortable: true,\n comparator: keepOrder,\n sortingOrder: ['asc' as const, 'desc' as const, null],\n }\n const base: Partial<ColDef<TaskGridRow<T>>> = {\n sortable: false,\n suppressMovable: true,\n // Keyboard focus lands on the name cell only (arrow keys expand and collapse sub-tasks there).\n suppressNavigable: true,\n cellStyle: { display: 'flex', alignItems: 'center' },\n }\n const name: ColDef<TaskGridRow<T>> = {\n ...base,\n colId: 'name',\n ...sortable,\n suppressNavigable: false,\n headerName: l.colTask,\n flex: 3,\n minWidth: 200,\n cellRenderer: cell(o.renderName),\n }\n const shared: ColDef<TaskGridRow<T>> = {\n ...base,\n colId: 'shared',\n headerName: l.colShared,\n headerTooltip: l.shared,\n width: 120,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'center' },\n valueGetter: (p) => p.data?.task.is_shared ?? false,\n cellRenderer: cell(o.renderShared),\n }\n const actions = (): ColDef<TaskGridRow<T>> => ({\n ...base,\n colId: 'actions',\n headerName: '',\n // Always in view, even if the rest has to scroll.\n pinned: 'right',\n lockPinned: true,\n width: o.narrow ? NARROW_ACTIONS_WIDTH : ACTIONS_WIDTH,\n minWidth: NARROW_ACTIONS_WIDTH,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'flex-end' },\n cellRenderer: cell(o.renderActions),\n })\n\n // Left to right: the title, who has the next step, when, how it stands, then who sees it and the\n // thread link, with the actions (Approve included) last, at the right edge.\n return [\n name,\n {\n ...base,\n colId: 'owner',\n ...sortable,\n headerName: l.colOwner,\n headerTooltip: l.ownerHint,\n flex: 1.4,\n minWidth: 150,\n valueGetter: (p) => (p.data ? o.getOwnerName(p.data) : ''),\n cellRenderer: cell(o.renderOwner),\n },\n {\n ...base,\n colId: 'due',\n ...sortable,\n headerName: l.colDue,\n flex: 1,\n minWidth: 140,\n valueGetter: (p) => p.data?.task.due_at ?? '',\n cellRenderer: cell(o.renderDue),\n },\n {\n ...base,\n colId: 'status',\n ...sortable,\n headerName: l.colStatus,\n // Wide enough for \"Generating\" and \"Waiting for access\" in full, with the elapsed time.\n flex: 1.3,\n minWidth: 170,\n valueGetter: (p) => p.data?.task.status ?? '',\n cellRenderer: cell(o.renderStatus),\n },\n ...(o.showOutputs\n ? [\n {\n ...base,\n colId: 'outputs',\n headerName: l.colOutputs,\n flex: 1.2,\n minWidth: 130,\n cellRenderer: cell(o.renderOutputs),\n } as ColDef<TaskGridRow<T>>,\n ]\n : []),\n shared,\n actions(),\n ]\n}\n"],
|
|
5
5
|
"mappings": ";AAmBO,MAAM,gBAAgB;AAC7B,MAAM,uBAAuB;AAEtB,MAAM,oBAAoB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAuBA,MAAM,YAAY,MAAM;AAMxB,SAAS,KAA4B,QAA4C;AAC/E,SAAO,CAAC,WACN,OAAO,OAAO,OAAO,OAAO,IAAI,IAAI;AACxC;AAEO,SAAS,kBACd,GAC0B;AAC1B,QAAM,IAAI,EAAE;AACZ,QAAM,WAAW;AAAA,IACf,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,cAAc,CAAC,OAAgB,QAAiB,IAAI;AAAA,EACtD;AACA,QAAM,OAAwC;AAAA,IAC5C,UAAU;AAAA,IACV,iBAAiB;AAAA;AAAA,IAEjB,mBAAmB;AAAA,IACnB,WAAW,EAAE,SAAS,QAAQ,YAAY,SAAS;AAAA,EACrD;AACA,QAAM,OAA+B;AAAA,IACnC,GAAG;AAAA,IACH,OAAO;AAAA,IACP,GAAG;AAAA,IACH,mBAAmB;AAAA,IACnB,YAAY,EAAE;AAAA,IACd,MAAM;AAAA,IACN,UAAU;AAAA,IACV,cAAc,KAAK,EAAE,UAAU;AAAA,EACjC;AACA,QAAM,SAAiC;AAAA,IACrC,GAAG;AAAA,IACH,OAAO;AAAA,IACP,YAAY,EAAE;AAAA,IACd,eAAe,EAAE;AAAA,IACjB,OAAO;AAAA,IACP,WAAW,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,SAAS;AAAA,IAC7E,aAAa,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa;AAAA,IAC9C,cAAc,KAAK,EAAE,YAAY;AAAA,EACnC;AACA,QAAM,UAAU,OAA+B;AAAA,IAC7C,GAAG;AAAA,IACH,OAAO;AAAA,IACP,YAAY;AAAA;AAAA,IAEZ,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,OAAO,EAAE,SAAS,uBAAuB;AAAA,IACzC,UAAU;AAAA,IACV,WAAW,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,WAAW;AAAA,IAC/E,cAAc,KAAK,EAAE,aAAa;AAAA,EACpC;AAIA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,OAAO;AAAA,MACP,GAAG;AAAA,MACH,YAAY,EAAE;AAAA,MACd,eAAe,EAAE;AAAA,MACjB,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa,CAAC,MAAO,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,IAAI;AAAA,MACvD,cAAc,KAAK,EAAE,WAAW;AAAA,IAClC;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,OAAO;AAAA,MACP,GAAG;AAAA,MACH,YAAY,EAAE;AAAA,MACd,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa,CAAC,MAAM,EAAE,MAAM,KAAK,UAAU;AAAA,MAC3C,cAAc,KAAK,EAAE,SAAS;AAAA,IAChC;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,OAAO;AAAA,MACP,GAAG;AAAA,MACH,YAAY,EAAE;AAAA;AAAA,MAEd,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa,CAAC,MAAM,EAAE,MAAM,KAAK,UAAU;AAAA,MAC3C,cAAc,KAAK,EAAE,YAAY;AAAA,IACnC;AAAA,IACA,GAAI,EAAE,cACF;AAAA,MACE;AAAA,QACE,GAAG;AAAA,QACH,OAAO;AAAA,QACP,YAAY,EAAE;AAAA,QACd,MAAM;AAAA,QACN,UAAU;AAAA,QACV,cAAc,KAAK,EAAE,aAAa;AAAA,MACpC;AAAA,IACF,IACA,CAAC;AAAA,IACL;AAAA,IACA,QAAQ;AAAA,EACV;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -17,7 +17,7 @@ const DEFAULT_TASK_LIST_LABELS = {
|
|
|
17
17
|
me: "Me",
|
|
18
18
|
someone: "Someone",
|
|
19
19
|
noDue: "\u2014",
|
|
20
|
-
colShared: "
|
|
20
|
+
colShared: "Sharing",
|
|
21
21
|
shared: "Shared with the workspace",
|
|
22
22
|
sharedOwnerOnly: "Only the creator can change who can see this",
|
|
23
23
|
deleteOwnerOnly: "Only the creator or workspace owner can delete this",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/agents/tasks/taskTableLabels.ts"],
|
|
4
|
-
"sourcesContent": ["import type { TaskStatusKey } from './taskLabels'\n\nexport interface TaskListLabels {\n agent: string\n filterAll: string\n emptyTitle: string\n emptyMessage: string\n noMatches: string\n due: (when: string) => string\n overdue: (when: string) => string\n colTask: string\n colOwner: string\n ownerHint: string\n colOutputs: string\n preparedBy: (agentName: string) => string\n colDue: string\n colStatus: string\n me: string\n someone: string\n noDue: string\n colShared: string\n shared: string\n sharedOwnerOnly: string\n deleteOwnerOnly: string\n goalMet: (met: number, total: number) => string\n subtasksDone: (done: number, total: number) => string\n expandSubtasks: string\n collapseSubtasks: string\n selectAll: string\n selectTask: (name: string) => string\n markDone: string\n reopen: string\n markDoneMany: string\n markDoneManyHint: string\n deleteMany: string\n moveTo: string\n untitled: string\n fromWorkflow: (workflowName: string) => string\n searchLabel: string\n searchPlaceholder: string\n expandAll: string\n collapseAll: string\n moveToTitle: (taskName: string) => string\n moveToNone: string\n moveToSearch: string\n moveToEmpty: string\n moveToCancel: string\n subtasksSelected: (count: number) => string\n addSubtask: string\n edit: string\n rename: string\n delete: string\n grantAccess: string\n allowAccess: string\n moreActions: string\n activity: string\n /** Status tooltip: the latest step and how long ago. */\n statusHint: (status: string, ago: string) => string\n status: Partial<Record<TaskStatusKey, string>>\n}\n\nexport const DEFAULT_TASK_LIST_LABELS: TaskListLabels = {\n filterAll: 'All',\n emptyTitle: 'No tasks yet',\n emptyMessage:\n 'Use New to add one: just type what you need, or add a due date. Automations that create tasks live on the Workflows page. You always decide when a task is done.',\n noMatches: 'No tasks match.',\n due: (when) => when,\n overdue: (when) => `${when} \u00B7 overdue`,\n agent: 'Agent',\n colTask: 'Task',\n colOwner: 'Owner',\n ownerHint: 'Who created the task. They are notified when its run finishes.',\n colOutputs: 'Outputs',\n preparedBy: (agent) => `Prepared by ${agent}`,\n colDue: 'Due',\n colStatus: 'Status',\n me: 'Me',\n someone: 'Someone',\n noDue: '\u2014',\n colShared: '
|
|
4
|
+
"sourcesContent": ["import type { TaskStatusKey } from './taskLabels'\n\nexport interface TaskListLabels {\n agent: string\n filterAll: string\n emptyTitle: string\n emptyMessage: string\n noMatches: string\n due: (when: string) => string\n overdue: (when: string) => string\n colTask: string\n colOwner: string\n ownerHint: string\n colOutputs: string\n preparedBy: (agentName: string) => string\n colDue: string\n colStatus: string\n me: string\n someone: string\n noDue: string\n colShared: string\n shared: string\n sharedOwnerOnly: string\n deleteOwnerOnly: string\n goalMet: (met: number, total: number) => string\n subtasksDone: (done: number, total: number) => string\n expandSubtasks: string\n collapseSubtasks: string\n selectAll: string\n selectTask: (name: string) => string\n markDone: string\n reopen: string\n markDoneMany: string\n markDoneManyHint: string\n deleteMany: string\n moveTo: string\n untitled: string\n fromWorkflow: (workflowName: string) => string\n searchLabel: string\n searchPlaceholder: string\n expandAll: string\n collapseAll: string\n moveToTitle: (taskName: string) => string\n moveToNone: string\n moveToSearch: string\n moveToEmpty: string\n moveToCancel: string\n subtasksSelected: (count: number) => string\n addSubtask: string\n edit: string\n rename: string\n delete: string\n grantAccess: string\n allowAccess: string\n moreActions: string\n activity: string\n /** Status tooltip: the latest step and how long ago. */\n statusHint: (status: string, ago: string) => string\n status: Partial<Record<TaskStatusKey, string>>\n}\n\nexport const DEFAULT_TASK_LIST_LABELS: TaskListLabels = {\n filterAll: 'All',\n emptyTitle: 'No tasks yet',\n emptyMessage:\n 'Use New to add one: just type what you need, or add a due date. Automations that create tasks live on the Workflows page. You always decide when a task is done.',\n noMatches: 'No tasks match.',\n due: (when) => when,\n overdue: (when) => `${when} \u00B7 overdue`,\n agent: 'Agent',\n colTask: 'Task',\n colOwner: 'Owner',\n ownerHint: 'Who created the task. They are notified when its run finishes.',\n colOutputs: 'Outputs',\n preparedBy: (agent) => `Prepared by ${agent}`,\n colDue: 'Due',\n colStatus: 'Status',\n me: 'Me',\n someone: 'Someone',\n noDue: '\u2014',\n colShared: 'Sharing',\n shared: 'Shared with the workspace',\n sharedOwnerOnly: 'Only the creator can change who can see this',\n deleteOwnerOnly: 'Only the creator or workspace owner can delete this',\n goalMet: (met, total) => `${met}/${total} met`,\n subtasksDone: (done, total) => `${done}/${total} sub-tasks done`,\n expandSubtasks: 'Show sub-tasks',\n collapseSubtasks: 'Hide sub-tasks',\n selectAll: 'Select all tasks',\n selectTask: (name) => `Select ${name}`,\n markDone: 'Mark done',\n reopen: 'Reopen',\n markDoneMany: 'Mark done',\n markDoneManyHint: 'Marks the selected tasks done.',\n deleteMany: 'Delete',\n moveTo: 'Move to\u2026',\n untitled: 'Untitled task',\n fromWorkflow: (name) => `From \u201C${name}\u201D`,\n searchLabel: 'Search tasks',\n searchPlaceholder: 'Search tasks\u2026',\n expandAll: 'Expand all',\n collapseAll: 'Collapse all',\n moveToTitle: (name) => `Move \u201C${name}\u201D to\u2026`,\n moveToNone: 'No parent (top level)',\n moveToSearch: 'Search tasks\u2026',\n moveToEmpty: 'No task to move it under.',\n moveToCancel: 'Cancel',\n subtasksSelected: (count) => `${count} ${count === 1 ? 'sub-task' : 'sub-tasks'} included`,\n addSubtask: 'Add sub-task',\n edit: 'Edit',\n rename: 'Rename',\n delete: 'Delete',\n grantAccess: 'Allow access and continue',\n allowAccess: 'Allow access',\n moreActions: 'More actions',\n activity: 'Activity',\n statusHint: (status, ago) => `${status} \u00B7 ${ago}`,\n status: {},\n}\n"],
|
|
5
5
|
"mappings": ";AA6DO,MAAM,2BAA2C;AAAA,EACtD,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,cACE;AAAA,EACF,WAAW;AAAA,EACX,KAAK,CAAC,SAAS;AAAA,EACf,SAAS,CAAC,SAAS,GAAG,IAAI;AAAA,EAC1B,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY,CAAC,UAAU,eAAe,KAAK;AAAA,EAC3C,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,OAAO;AAAA,EACP,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,SAAS,CAAC,KAAK,UAAU,GAAG,GAAG,IAAI,KAAK;AAAA,EACxC,cAAc,CAAC,MAAM,UAAU,GAAG,IAAI,IAAI,KAAK;AAAA,EAC/C,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,YAAY,CAAC,SAAS,UAAU,IAAI;AAAA,EACpC,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,cAAc,CAAC,SAAS,cAAS,IAAI;AAAA,EACrC,aAAa;AAAA,EACb,mBAAmB;AAAA,EACnB,WAAW;AAAA,EACX,aAAa;AAAA,EACb,aAAa,CAAC,SAAS,cAAS,IAAI;AAAA,EACpC,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,aAAa;AAAA,EACb,cAAc;AAAA,EACd,kBAAkB,CAAC,UAAU,GAAG,KAAK,IAAI,UAAU,IAAI,aAAa,WAAW;AAAA,EAC/E,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,UAAU;AAAA,EACV,YAAY,CAAC,QAAQ,QAAQ,GAAG,MAAM,SAAM,GAAG;AAAA,EAC/C,QAAQ,CAAC;AACX;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/agents/tasks/workflowTableLabels.ts"],
|
|
4
|
-
"sourcesContent": ["import type { WorkflowCatalogueLabels } from './WorkflowCatalogueSections'\n\nexport interface WorkflowListLabels {\n colName: string\n colType: string\n colTrigger: string\n colAction: string\n colAgent: string\n colStatus: string\n colShared: string\n colLastRun: string\n colNextRun: string\n shared: string\n sharedOwnerOnly: string\n deleteOwnerOnly: string\n typeSkill: string\n typeWorkflow: string\n statusActive: string\n statusPaused: string\n statusOnDemand: string\n activeSwitch: (name: string) => string\n agent: string\n myAssistant: string\n me: string\n someone: string\n never: string\n none: string\n reminder: string\n /** What a stepped workflow does: its number of steps. */\n steps: (count: number) => string\n failed: string\n lastRunFailed: string\n openLastRun: string\n editWorkflow: string\n run: string\n runLater: string\n runNow: string\n runs: string\n delete: string\n moreActions: string\n searchLabel: string\n searchPlaceholder: string\n emptyTitle: string\n emptyMessage: string\n firstRun: string\n noMatches: string\n filterAll: string\n filterSkills: string\n filterWorkflows: string\n filterActive: string\n filterPaused: string\n /** Saved workflows that start on a date or a repeat. */\n filterScheduled: string\n /** The category view's heading over the saved workflows. */\n savedWorkflows: string\n makeActive: string\n makePaused: string\n selectAll: string\n selectWorkflow: (name: string) => string\n}\n\nexport const DEFAULT_WORKFLOW_LIST_LABELS: WorkflowListLabels = {\n colName: 'Name',\n colType: 'Type',\n colTrigger: 'When',\n colAction: 'What it does',\n colAgent: 'Agent',\n colStatus: 'Active',\n colShared: '
|
|
4
|
+
"sourcesContent": ["import type { WorkflowCatalogueLabels } from './WorkflowCatalogueSections'\n\nexport interface WorkflowListLabels {\n colName: string\n colType: string\n colTrigger: string\n colAction: string\n colAgent: string\n colStatus: string\n colShared: string\n colLastRun: string\n colNextRun: string\n shared: string\n sharedOwnerOnly: string\n deleteOwnerOnly: string\n typeSkill: string\n typeWorkflow: string\n statusActive: string\n statusPaused: string\n statusOnDemand: string\n activeSwitch: (name: string) => string\n agent: string\n myAssistant: string\n me: string\n someone: string\n never: string\n none: string\n reminder: string\n /** What a stepped workflow does: its number of steps. */\n steps: (count: number) => string\n failed: string\n lastRunFailed: string\n openLastRun: string\n editWorkflow: string\n run: string\n runLater: string\n runNow: string\n runs: string\n delete: string\n moreActions: string\n searchLabel: string\n searchPlaceholder: string\n emptyTitle: string\n emptyMessage: string\n firstRun: string\n noMatches: string\n filterAll: string\n filterSkills: string\n filterWorkflows: string\n filterActive: string\n filterPaused: string\n /** Saved workflows that start on a date or a repeat. */\n filterScheduled: string\n /** The category view's heading over the saved workflows. */\n savedWorkflows: string\n makeActive: string\n makePaused: string\n selectAll: string\n selectWorkflow: (name: string) => string\n}\n\nexport const DEFAULT_WORKFLOW_LIST_LABELS: WorkflowListLabels = {\n colName: 'Name',\n colType: 'Type',\n colTrigger: 'When',\n colAction: 'What it does',\n colAgent: 'Agent',\n colStatus: 'Active',\n colShared: 'Sharing',\n colLastRun: 'Last run',\n colNextRun: 'Next run',\n shared: 'Shared with the workspace',\n sharedOwnerOnly: 'Only the creator can change who can see this',\n deleteOwnerOnly: 'Only the creator or workspace owner can delete this',\n typeSkill: 'Skill',\n typeWorkflow: 'Workflow',\n statusActive: 'Active',\n statusPaused: 'Inactive',\n statusOnDemand: 'On demand',\n activeSwitch: (name) => `Active: \u201C${name}\u201D`,\n agent: 'Agent',\n myAssistant: 'My assistant',\n me: 'Me',\n someone: 'Someone',\n never: 'Never',\n none: '\u2014',\n reminder: 'Reminder',\n steps: (count) => `Workflow \u00B7 ${count} ${count === 1 ? 'step' : 'steps'}`,\n failed: 'Failed',\n lastRunFailed: 'Last run failed',\n openLastRun: 'Open the task this run created',\n editWorkflow: 'Edit',\n run: 'Run',\n runLater: 'Run later',\n runNow: 'Run now',\n runs: 'Runs',\n delete: 'Delete',\n moreActions: 'More actions',\n searchLabel: 'Search workflows',\n searchPlaceholder: 'Search workflows and skills\u2026',\n emptyTitle: 'Nothing to run yet',\n emptyMessage: 'Skills and workflows you can run will appear here.',\n firstRun: 'Run a skill now, or choose Run later to save it as a workflow that runs on its own.',\n noMatches: 'Nothing in this view.',\n filterAll: 'All',\n filterSkills: 'Skills',\n filterWorkflows: 'Workflows',\n filterActive: 'Active',\n filterPaused: 'Inactive',\n filterScheduled: 'Scheduled',\n savedWorkflows: 'Saved workflows',\n makeActive: 'Make active',\n makePaused: 'Deactivate',\n selectAll: 'Select all',\n selectWorkflow: (name) => `Select ${name}`,\n}\n\n/** The category view's catalogue cards. */\nexport const DEFAULT_WORKFLOW_CATALOGUE_LABELS: WorkflowCatalogueLabels = {\n openInBuilder: 'Builder',\n run: 'Run',\n stepCount: (count) => `${count} ${count === 1 ? 'step' : 'steps'}`,\n}\n"],
|
|
5
5
|
"mappings": ";AA6DO,MAAM,+BAAmD;AAAA,EAC9D,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,UAAU;AAAA,EACV,WAAW;AAAA,EACX,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,cAAc,CAAC,SAAS,iBAAY,IAAI;AAAA,EACxC,OAAO;AAAA,EACP,aAAa;AAAA,EACb,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU;AAAA,EACV,OAAO,CAAC,UAAU,iBAAc,KAAK,IAAI,UAAU,IAAI,SAAS,OAAO;AAAA,EACvE,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,aAAa;AAAA,EACb,cAAc;AAAA,EACd,KAAK;AAAA,EACL,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,aAAa;AAAA,EACb,mBAAmB;AAAA,EACnB,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,UAAU;AAAA,EACV,WAAW;AAAA,EACX,WAAW;AAAA,EACX,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,gBAAgB,CAAC,SAAS,UAAU,IAAI;AAC1C;AAGO,MAAM,oCAA6D;AAAA,EACxE,eAAe;AAAA,EACf,KAAK;AAAA,EACL,WAAW,CAAC,UAAU,GAAG,KAAK,IAAI,UAAU,IAAI,SAAS,OAAO;AAClE;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,35 +1,37 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
require('./chunk-
|
|
6
|
-
require('./chunk-
|
|
7
|
-
require('./chunk-
|
|
8
|
-
require('./chunk-
|
|
9
|
-
require('./chunk-
|
|
10
|
-
require('./chunk-WXUU3COI.cjs');
|
|
11
|
-
require('./chunk-AHDJXIUB.cjs');
|
|
12
|
-
require('./chunk-YVCOQHCE.cjs');
|
|
13
|
-
require('./chunk-JV5TVUOU.cjs');
|
|
14
|
-
require('./chunk-VZOOGA47.cjs');
|
|
15
|
-
require('./chunk-HQDR43JC.cjs');
|
|
16
|
-
require('./chunk-JR2YSBD5.cjs');
|
|
17
|
-
require('./chunk-3YZKDCWY.cjs');
|
|
18
|
-
require('./chunk-PGJYD67F.cjs');
|
|
4
|
+
var chunk474GPLCM_cjs = require('./chunk-474GPLCM.cjs');
|
|
5
|
+
require('./chunk-NAJN32MF.cjs');
|
|
6
|
+
require('./chunk-NLOETJCB.cjs');
|
|
7
|
+
require('./chunk-GKVE5JGB.cjs');
|
|
8
|
+
require('./chunk-GQXPNIRE.cjs');
|
|
9
|
+
require('./chunk-KNGZZC4O.cjs');
|
|
19
10
|
require('./chunk-IDCD5TEZ.cjs');
|
|
20
11
|
require('./chunk-M2FOXGJU.cjs');
|
|
21
12
|
require('./chunk-5F4DCIHS.cjs');
|
|
22
|
-
require('./chunk-
|
|
13
|
+
require('./chunk-AFQTQC7A.cjs');
|
|
14
|
+
require('./chunk-XJEXFEWG.cjs');
|
|
23
15
|
require('./chunk-YZSQ7F5K.cjs');
|
|
24
16
|
require('./chunk-MCXS6X37.cjs');
|
|
25
17
|
require('./chunk-KQF7POTG.cjs');
|
|
26
18
|
require('./chunk-75BNMCUX.cjs');
|
|
19
|
+
require('./chunk-7JLJH5CW.cjs');
|
|
20
|
+
require('./chunk-EVZH6Z5O.cjs');
|
|
27
21
|
require('./chunk-IN6ILI5A.cjs');
|
|
28
22
|
require('./chunk-HSLPFBK2.cjs');
|
|
23
|
+
require('./chunk-MZ2KZXNU.cjs');
|
|
24
|
+
require('./chunk-AHDJXIUB.cjs');
|
|
25
|
+
require('./chunk-YVCOQHCE.cjs');
|
|
29
26
|
require('./chunk-QGVOT7E4.cjs');
|
|
30
27
|
require('./chunk-QRAQZTJE.cjs');
|
|
31
28
|
require('./chunk-UDSHVNU3.cjs');
|
|
29
|
+
require('./chunk-JV5TVUOU.cjs');
|
|
32
30
|
require('./chunk-IPSHAMO2.cjs');
|
|
31
|
+
require('./chunk-VZOOGA47.cjs');
|
|
32
|
+
require('./chunk-HQDR43JC.cjs');
|
|
33
|
+
require('./chunk-JR2YSBD5.cjs');
|
|
34
|
+
require('./chunk-3YZKDCWY.cjs');
|
|
33
35
|
require('./chunk-PPCATBOY.cjs');
|
|
34
36
|
require('./chunk-TKHCIHE2.cjs');
|
|
35
37
|
require('./chunk-JDFBEGQO.cjs');
|
|
@@ -40,35 +42,35 @@ require('./chunk-PLIF5CUV.cjs');
|
|
|
40
42
|
|
|
41
43
|
Object.defineProperty(exports, "ConnectedAssistantDock", {
|
|
42
44
|
enumerable: true,
|
|
43
|
-
get: function () { return
|
|
45
|
+
get: function () { return chunk474GPLCM_cjs.ConnectedAssistantDock; }
|
|
44
46
|
});
|
|
45
47
|
Object.defineProperty(exports, "redlineStats", {
|
|
46
48
|
enumerable: true,
|
|
47
|
-
get: function () { return
|
|
49
|
+
get: function () { return chunk474GPLCM_cjs.redlineStats; }
|
|
48
50
|
});
|
|
49
51
|
Object.defineProperty(exports, "textToArtifact", {
|
|
50
52
|
enumerable: true,
|
|
51
|
-
get: function () { return
|
|
53
|
+
get: function () { return chunk474GPLCM_cjs.textToArtifact; }
|
|
52
54
|
});
|
|
53
55
|
Object.defineProperty(exports, "toRedlineMarkdown", {
|
|
54
56
|
enumerable: true,
|
|
55
|
-
get: function () { return
|
|
57
|
+
get: function () { return chunk474GPLCM_cjs.toRedlineMarkdown; }
|
|
56
58
|
});
|
|
57
59
|
Object.defineProperty(exports, "useConnectedAiTask", {
|
|
58
60
|
enumerable: true,
|
|
59
|
-
get: function () { return
|
|
61
|
+
get: function () { return chunk474GPLCM_cjs.useConnectedAiTask; }
|
|
60
62
|
});
|
|
61
63
|
Object.defineProperty(exports, "useConnectedChat", {
|
|
62
64
|
enumerable: true,
|
|
63
|
-
get: function () { return
|
|
65
|
+
get: function () { return chunk474GPLCM_cjs.useConnectedChat; }
|
|
64
66
|
});
|
|
65
67
|
Object.defineProperty(exports, "useSemanticSearch", {
|
|
66
68
|
enumerable: true,
|
|
67
|
-
get: function () { return
|
|
69
|
+
get: function () { return chunk474GPLCM_cjs.useSemanticSearch; }
|
|
68
70
|
});
|
|
69
71
|
Object.defineProperty(exports, "useWorkspaceDocs", {
|
|
70
72
|
enumerable: true,
|
|
71
|
-
get: function () { return
|
|
73
|
+
get: function () { return chunk474GPLCM_cjs.useWorkspaceDocs; }
|
|
72
74
|
});
|
|
73
|
-
//# sourceMappingURL=ai-
|
|
74
|
-
//# sourceMappingURL=ai-
|
|
75
|
+
//# sourceMappingURL=ai-KBYNRNZ6.cjs.map
|
|
76
|
+
//# sourceMappingURL=ai-KBYNRNZ6.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"ai-KBYNRNZ6.cjs"}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* The call panel's control bar, wired to the LiveKit room. One row; what fits stays in it and the
|
|
3
3
|
* rest moves into More, so each action lives in exactly one visible place:
|
|
4
4
|
* full — time · mic, camera | share, CC, Record | More · Leave
|
|
5
|
+
* Share offers the browser's picker (a screen, a window or a tab) or a document of the workspace,
|
|
6
|
+
* opened in a window of its own with the picker, to choose it.
|
|
5
7
|
* compact — mic, camera | CC, Record | More · Leave
|
|
6
8
|
* tiny — mic, camera | More · Leave
|
|
7
9
|
* Chat is the conversation beside the panel (its own composer) and the participant list is
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
import {
|
|
13
13
|
Captions,
|
|
14
14
|
Circle,
|
|
15
|
+
FileText,
|
|
15
16
|
FlaskConical,
|
|
16
17
|
Link2,
|
|
17
18
|
Lock,
|
|
@@ -22,7 +23,13 @@ import {
|
|
|
22
23
|
Volume2
|
|
23
24
|
} from "lucide-react";
|
|
24
25
|
import { classifyMediaError, useArbi, useServerCallsExperimental } from "@arbidocs/react";
|
|
25
|
-
import {
|
|
26
|
+
import {
|
|
27
|
+
Button,
|
|
28
|
+
DropdownMenu,
|
|
29
|
+
DropdownMenuContent,
|
|
30
|
+
DropdownMenuItem,
|
|
31
|
+
DropdownMenuTrigger
|
|
32
|
+
} from "@arbidocs/react/ui";
|
|
26
33
|
import {
|
|
27
34
|
CallControlBar,
|
|
28
35
|
CallControlButton,
|
|
@@ -36,6 +43,8 @@ import {
|
|
|
36
43
|
import { TranscriptionToggle } from "./CallTranscription.js";
|
|
37
44
|
import { RecordingControl } from "./CallRecording.js";
|
|
38
45
|
import { useMirrorSelfView } from "../self-view.js";
|
|
46
|
+
import { ShareDocumentDialog } from "./ShareDocumentDialog.js";
|
|
47
|
+
const SHARE_LABEL = "Share screen/tab";
|
|
39
48
|
function reportDeviceError(notify, source) {
|
|
40
49
|
return (err) => notify(
|
|
41
50
|
classifyMediaError(err, source === Track.Source.Camera ? "camera" : "microphone"),
|
|
@@ -128,6 +137,7 @@ function CallControls({
|
|
|
128
137
|
const experimental = useServerCallsExperimental();
|
|
129
138
|
const [locked, setLocked] = useState(false);
|
|
130
139
|
const [locking, setLocking] = useState(false);
|
|
140
|
+
const [sharingDocument, setSharingDocument] = useState(false);
|
|
131
141
|
const full = density === "full";
|
|
132
142
|
const tiny = density === "tiny";
|
|
133
143
|
const toggleLock = async () => {
|
|
@@ -150,11 +160,20 @@ function CallControls({
|
|
|
150
160
|
...!full ? [
|
|
151
161
|
{
|
|
152
162
|
key: "share",
|
|
153
|
-
label: share.enabled ? "Stop sharing" :
|
|
163
|
+
label: share.enabled ? "Stop sharing" : SHARE_LABEL,
|
|
154
164
|
icon: share.enabled ? /* @__PURE__ */ jsx(MonitorX, {}) : /* @__PURE__ */ jsx(MonitorUp, {}),
|
|
155
165
|
onSelect: () => void share.toggle(),
|
|
156
166
|
disabled: share.pending
|
|
157
|
-
}
|
|
167
|
+
},
|
|
168
|
+
...!share.enabled ? [
|
|
169
|
+
{
|
|
170
|
+
key: "share-document",
|
|
171
|
+
label: "Share a document\u2026",
|
|
172
|
+
icon: /* @__PURE__ */ jsx(FileText, {}),
|
|
173
|
+
onSelect: () => setSharingDocument(true),
|
|
174
|
+
testId: "call-share-document"
|
|
175
|
+
}
|
|
176
|
+
] : []
|
|
158
177
|
] : [],
|
|
159
178
|
...tiny && tr.available && tr.canToggle ? [
|
|
160
179
|
{
|
|
@@ -235,18 +254,53 @@ function CallControls({
|
|
|
235
254
|
!tiny && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
236
255
|
/* @__PURE__ */ jsx(ControlDivider, {}),
|
|
237
256
|
/* @__PURE__ */ jsxs(ControlGroup, { children: [
|
|
238
|
-
full && /* @__PURE__ */ jsx(
|
|
257
|
+
full && (share.enabled ? /* @__PURE__ */ jsx(
|
|
239
258
|
CallControlButton,
|
|
240
259
|
{
|
|
241
|
-
label:
|
|
242
|
-
tone:
|
|
243
|
-
"aria-pressed":
|
|
260
|
+
label: "Stop sharing",
|
|
261
|
+
tone: "active",
|
|
262
|
+
"aria-pressed": true,
|
|
244
263
|
disabled: share.pending,
|
|
245
264
|
onClick: () => void share.toggle(),
|
|
246
265
|
"data-testid": "call-share-toggle",
|
|
247
|
-
children:
|
|
266
|
+
children: /* @__PURE__ */ jsx(MonitorX, { "aria-hidden": true })
|
|
248
267
|
}
|
|
249
|
-
),
|
|
268
|
+
) : /* @__PURE__ */ jsxs(DropdownMenu, { children: [
|
|
269
|
+
/* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
270
|
+
CallControlButton,
|
|
271
|
+
{
|
|
272
|
+
label: SHARE_LABEL,
|
|
273
|
+
tooltip: false,
|
|
274
|
+
disabled: share.pending,
|
|
275
|
+
"data-testid": "call-share-toggle",
|
|
276
|
+
children: /* @__PURE__ */ jsx(MonitorUp, { "aria-hidden": true })
|
|
277
|
+
}
|
|
278
|
+
) }),
|
|
279
|
+
/* @__PURE__ */ jsxs(DropdownMenuContent, { side: "top", "data-testid": "call-share-menu", children: [
|
|
280
|
+
/* @__PURE__ */ jsxs(
|
|
281
|
+
DropdownMenuItem,
|
|
282
|
+
{
|
|
283
|
+
onSelect: () => void share.toggle(),
|
|
284
|
+
"data-testid": "call-share-screen",
|
|
285
|
+
children: [
|
|
286
|
+
/* @__PURE__ */ jsx(MonitorUp, {}),
|
|
287
|
+
SHARE_LABEL
|
|
288
|
+
]
|
|
289
|
+
}
|
|
290
|
+
),
|
|
291
|
+
/* @__PURE__ */ jsxs(
|
|
292
|
+
DropdownMenuItem,
|
|
293
|
+
{
|
|
294
|
+
onSelect: () => setSharingDocument(true),
|
|
295
|
+
"data-testid": "call-share-document",
|
|
296
|
+
children: [
|
|
297
|
+
/* @__PURE__ */ jsx(FileText, {}),
|
|
298
|
+
"Share a document\u2026"
|
|
299
|
+
]
|
|
300
|
+
}
|
|
301
|
+
)
|
|
302
|
+
] })
|
|
303
|
+
] })),
|
|
250
304
|
/* @__PURE__ */ jsx(TranscriptionToggle, { transcription: tr }),
|
|
251
305
|
/* @__PURE__ */ jsx(RecordingControl, { recording })
|
|
252
306
|
] })
|
|
@@ -267,6 +321,14 @@ function CallControls({
|
|
|
267
321
|
) : void 0,
|
|
268
322
|
groups: [overflow, callItems, ...menuGroups]
|
|
269
323
|
}
|
|
324
|
+
),
|
|
325
|
+
/* @__PURE__ */ jsx(
|
|
326
|
+
ShareDocumentDialog,
|
|
327
|
+
{
|
|
328
|
+
open: sharingDocument,
|
|
329
|
+
onOpenChange: setSharingDocument,
|
|
330
|
+
onShare: () => void share.toggle(true)
|
|
331
|
+
}
|
|
270
332
|
)
|
|
271
333
|
]
|
|
272
334
|
}
|