@arbidocs/blocks 0.5.112 → 0.5.114
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/{ConnectedCallDock-KUF6RX76.cjs → ConnectedCallDock-2KXEQENS.cjs} +26 -26
- package/dist/{ConnectedCallDock-KUF6RX76.cjs.map → ConnectedCallDock-2KXEQENS.cjs.map} +1 -1
- package/dist/{ConnectedCallRoom-ZKIYB2JG.cjs → ConnectedCallRoom-MU3NPNXF.cjs} +18 -18
- package/dist/{ConnectedCallRoom-ZKIYB2JG.cjs.map → ConnectedCallRoom-MU3NPNXF.cjs.map} +1 -1
- package/dist/{ConnectedMailInviteCard-P65MQM6J.cjs → ConnectedMailInviteCard-EINB3THA.cjs} +5 -5
- package/dist/{ConnectedMailInviteCard-P65MQM6J.cjs.map → ConnectedMailInviteCard-EINB3THA.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-S4RKDH2A.cjs → ConnectedNativeDocxComparison-VH3I65H6.cjs} +21 -21
- package/dist/{ConnectedNativeDocxComparison-S4RKDH2A.cjs.map → ConnectedNativeDocxComparison-VH3I65H6.cjs.map} +1 -1
- package/dist/{ConnectedProductionSetDialog-HX4HTQ3Z.cjs → ConnectedProductionSetDialog-4EAY6KAZ.cjs} +8 -8
- package/dist/{ConnectedProductionSetDialog-HX4HTQ3Z.cjs.map → ConnectedProductionSetDialog-4EAY6KAZ.cjs.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-A2A7Z3TT.cjs → ConnectedStreamedWordArtifact-KQSHCA75.cjs} +21 -21
- package/dist/{ConnectedStreamedWordArtifact-A2A7Z3TT.cjs.map → ConnectedStreamedWordArtifact-KQSHCA75.cjs.map} +1 -1
- package/dist/{DocumentReviewCard-4A7NF474.cjs → DocumentReviewCard-OCPFVMLD.cjs} +22 -22
- package/dist/{DocumentReviewCard-4A7NF474.cjs.map → DocumentReviewCard-OCPFVMLD.cjs.map} +1 -1
- package/dist/{FilesViewerDialog-PKCBZXDG.cjs → FilesViewerDialog-BAGOEMXW.cjs} +54 -54
- package/dist/{FilesViewerDialog-PKCBZXDG.cjs.map → FilesViewerDialog-BAGOEMXW.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-J3C6VH4T.cjs → WorkspaceTableView-IMAZICIZ.cjs} +9 -9
- package/dist/{WorkspaceTableView-J3C6VH4T.cjs.map → WorkspaceTableView-IMAZICIZ.cjs.map} +1 -1
- package/dist/agents/index.cjs +298 -298
- package/dist/{ai-OYTFPMXI.cjs → ai-7U4B4CVF.cjs} +27 -27
- package/dist/ai-7U4B4CVF.cjs.map +1 -0
- package/dist/calls/index.cjs +147 -147
- package/dist/chat/index.cjs +29 -29
- package/dist/{chunk-37JPFCCU.cjs → chunk-2W5E62EY.cjs} +6 -6
- package/dist/{chunk-37JPFCCU.cjs.map → chunk-2W5E62EY.cjs.map} +1 -1
- package/dist/{chunk-N6AZYEYL.cjs → chunk-3ODEWSRO.cjs} +4 -4
- package/dist/{chunk-N6AZYEYL.cjs.map → chunk-3ODEWSRO.cjs.map} +1 -1
- package/dist/{chunk-VDFYMVMP.cjs → chunk-3R6YHJ3G.cjs} +4 -4
- package/dist/{chunk-VDFYMVMP.cjs.map → chunk-3R6YHJ3G.cjs.map} +1 -1
- package/dist/{chunk-5RCCZYAE.cjs → chunk-3U36VYMD.cjs} +36 -36
- package/dist/{chunk-5RCCZYAE.cjs.map → chunk-3U36VYMD.cjs.map} +1 -1
- package/dist/{chunk-A4FGU6YC.cjs → chunk-436I7PQL.cjs} +7 -7
- package/dist/{chunk-A4FGU6YC.cjs.map → chunk-436I7PQL.cjs.map} +1 -1
- package/dist/{chunk-J2RXQVVF.cjs → chunk-4EK7TAP7.cjs} +5 -5
- package/dist/{chunk-J2RXQVVF.cjs.map → chunk-4EK7TAP7.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-ZQLRWA3Y.cjs → chunk-4NPCDS2X.cjs} +4 -4
- package/dist/{chunk-ZQLRWA3Y.cjs.map → chunk-4NPCDS2X.cjs.map} +1 -1
- package/dist/{chunk-ZEQEIFZJ.cjs → chunk-57EE6CMW.cjs} +24 -24
- package/dist/{chunk-ZEQEIFZJ.cjs.map → chunk-57EE6CMW.cjs.map} +1 -1
- package/dist/{chunk-NMT4UZQM.cjs → chunk-57NHXEU2.cjs} +5 -5
- package/dist/{chunk-NMT4UZQM.cjs.map → chunk-57NHXEU2.cjs.map} +1 -1
- package/dist/{chunk-4QTQS4LS.cjs → chunk-5QUL5BZO.cjs} +5 -5
- package/dist/{chunk-4QTQS4LS.cjs.map → chunk-5QUL5BZO.cjs.map} +1 -1
- package/dist/{chunk-MUA5PJGX.cjs → chunk-5SKHK3BG.cjs} +4 -4
- package/dist/{chunk-MUA5PJGX.cjs.map → chunk-5SKHK3BG.cjs.map} +1 -1
- package/dist/{chunk-AFXDLDPU.cjs → chunk-5UYFLFNR.cjs} +4 -4
- package/dist/{chunk-AFXDLDPU.cjs.map → chunk-5UYFLFNR.cjs.map} +1 -1
- package/dist/{chunk-FJXJ43JO.cjs → chunk-6DCIZA3X.cjs} +101 -101
- package/dist/{chunk-FJXJ43JO.cjs.map → chunk-6DCIZA3X.cjs.map} +1 -1
- package/dist/{chunk-G5TRBLKF.cjs → chunk-7TEUGFIL.cjs} +4 -4
- package/dist/{chunk-G5TRBLKF.cjs.map → chunk-7TEUGFIL.cjs.map} +1 -1
- package/dist/{chunk-ZNZGYSVB.cjs → chunk-7X3FS5HQ.cjs} +39 -39
- package/dist/{chunk-ZNZGYSVB.cjs.map → chunk-7X3FS5HQ.cjs.map} +1 -1
- package/dist/{chunk-DZDARC3V.cjs → chunk-7XT5B2DZ.cjs} +70 -70
- package/dist/{chunk-DZDARC3V.cjs.map → chunk-7XT5B2DZ.cjs.map} +1 -1
- package/dist/{chunk-5UMKMUB5.cjs → chunk-AHT6DQNI.cjs} +68 -68
- package/dist/{chunk-5UMKMUB5.cjs.map → chunk-AHT6DQNI.cjs.map} +1 -1
- package/dist/{chunk-SRET7LYT.cjs → chunk-BW5MF464.cjs} +4 -4
- package/dist/{chunk-SRET7LYT.cjs.map → chunk-BW5MF464.cjs.map} +1 -1
- package/dist/{chunk-NP4EWPIP.cjs → chunk-CJYWHUZR.cjs} +6 -6
- package/dist/{chunk-NP4EWPIP.cjs.map → chunk-CJYWHUZR.cjs.map} +1 -1
- package/dist/{chunk-NTD7VSHO.cjs → chunk-CMGNRMPA.cjs} +4 -4
- package/dist/{chunk-NTD7VSHO.cjs.map → chunk-CMGNRMPA.cjs.map} +1 -1
- package/dist/{chunk-Z3VNKPPH.cjs → chunk-E3Y7RI3J.cjs} +4 -4
- package/dist/{chunk-Z3VNKPPH.cjs.map → chunk-E3Y7RI3J.cjs.map} +1 -1
- package/dist/{chunk-TDO5UWXF.cjs → chunk-E4BLRF2L.cjs} +5 -5
- package/dist/{chunk-TDO5UWXF.cjs.map → chunk-E4BLRF2L.cjs.map} +1 -1
- package/dist/{chunk-WT7CCCIN.cjs → chunk-GNX3FBBX.cjs} +4 -4
- package/dist/{chunk-WT7CCCIN.cjs.map → chunk-GNX3FBBX.cjs.map} +1 -1
- package/dist/{chunk-3NEI27QQ.cjs → chunk-GQXPNIRE.cjs} +14 -14
- package/dist/{chunk-3NEI27QQ.cjs.map → chunk-GQXPNIRE.cjs.map} +1 -1
- 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-IIWJQEBC.cjs → chunk-H7PHOTX2.cjs} +10 -10
- package/dist/{chunk-IIWJQEBC.cjs.map → chunk-H7PHOTX2.cjs.map} +1 -1
- package/dist/{chunk-LQHXUSWZ.cjs → chunk-HQDR43JC.cjs} +6 -6
- package/dist/{chunk-LQHXUSWZ.cjs.map → chunk-HQDR43JC.cjs.map} +1 -1
- package/dist/{chunk-6LQN4BMX.cjs → chunk-IDCD5TEZ.cjs} +5 -5
- package/dist/{chunk-6LQN4BMX.cjs.map → chunk-IDCD5TEZ.cjs.map} +1 -1
- package/dist/{chunk-6YOZKXV6.cjs → chunk-JR2YSBD5.cjs} +4 -4
- package/dist/{chunk-6YOZKXV6.cjs.map → chunk-JR2YSBD5.cjs.map} +1 -1
- package/dist/{chunk-3GYOWDNM.cjs → chunk-JSQQV23D.cjs} +5 -5
- package/dist/{chunk-3GYOWDNM.cjs.map → chunk-JSQQV23D.cjs.map} +1 -1
- package/dist/{chunk-ZFKWCGA5.cjs → chunk-JV5TVUOU.cjs} +4 -4
- package/dist/{chunk-ZFKWCGA5.cjs.map → chunk-JV5TVUOU.cjs.map} +1 -1
- package/dist/{chunk-TXFZAA3R.cjs → chunk-LFRNBT2I.cjs} +23 -23
- package/dist/{chunk-TXFZAA3R.cjs.map → chunk-LFRNBT2I.cjs.map} +1 -1
- package/dist/{chunk-R7CJEIA5.cjs → chunk-LYTIQQQ2.cjs} +3 -3
- package/dist/{chunk-R7CJEIA5.cjs.map → chunk-LYTIQQQ2.cjs.map} +1 -1
- package/dist/{chunk-6UYTG2YG.cjs → chunk-MC4F2URI.cjs} +28 -28
- package/dist/{chunk-6UYTG2YG.cjs.map → chunk-MC4F2URI.cjs.map} +1 -1
- package/dist/{chunk-NNG34ONS.cjs → chunk-MGQSLMTC.cjs} +78 -78
- package/dist/{chunk-NNG34ONS.cjs.map → chunk-MGQSLMTC.cjs.map} +1 -1
- package/dist/{chunk-3Q5L7XVI.cjs → chunk-MZ2KZXNU.cjs} +9 -9
- package/dist/{chunk-3Q5L7XVI.cjs.map → chunk-MZ2KZXNU.cjs.map} +1 -1
- package/dist/{chunk-PJ762EO2.cjs → chunk-NHHEMBXQ.cjs} +24 -24
- package/dist/{chunk-PJ762EO2.cjs.map → chunk-NHHEMBXQ.cjs.map} +1 -1
- package/dist/{chunk-ENUZ35NR.cjs → chunk-P5AQYC4D.cjs} +4 -4
- package/dist/{chunk-ENUZ35NR.cjs.map → chunk-P5AQYC4D.cjs.map} +1 -1
- package/dist/{chunk-5I2VUNZR.cjs → chunk-PGJYD67F.cjs} +6 -6
- package/dist/{chunk-5I2VUNZR.cjs.map → chunk-PGJYD67F.cjs.map} +1 -1
- package/dist/{chunk-BYN7UMC5.cjs → chunk-PL7HUTM3.cjs} +8 -8
- package/dist/{chunk-BYN7UMC5.cjs.map → chunk-PL7HUTM3.cjs.map} +1 -1
- package/dist/{chunk-NOYQ23I7.cjs → chunk-Q6DQGGP4.cjs} +6 -6
- package/dist/{chunk-NOYQ23I7.cjs.map → chunk-Q6DQGGP4.cjs.map} +1 -1
- package/dist/{chunk-T7J352JD.cjs → chunk-QMIHLJMH.cjs} +6 -6
- package/dist/{chunk-T7J352JD.cjs.map → chunk-QMIHLJMH.cjs.map} +1 -1
- package/dist/{chunk-LTEXVRCH.cjs → chunk-SBWIA4PL.cjs} +21 -21
- package/dist/{chunk-LTEXVRCH.cjs.map → chunk-SBWIA4PL.cjs.map} +1 -1
- package/dist/{chunk-ZH7LDZJX.cjs → chunk-TDN33HSK.cjs} +14 -14
- package/dist/{chunk-ZH7LDZJX.cjs.map → chunk-TDN33HSK.cjs.map} +1 -1
- package/dist/{chunk-U5T46QCS.cjs → chunk-TKHCIHE2.cjs} +3 -3
- package/dist/chunk-TKHCIHE2.cjs.map +1 -0
- package/dist/{chunk-WIAWHETB.cjs → chunk-ULPTSXXO.cjs} +4 -4
- package/dist/{chunk-WIAWHETB.cjs.map → chunk-ULPTSXXO.cjs.map} +1 -1
- package/dist/{chunk-GTWEWDIZ.cjs → chunk-UNDQYTRF.cjs} +8 -8
- package/dist/{chunk-GTWEWDIZ.cjs.map → chunk-UNDQYTRF.cjs.map} +1 -1
- package/dist/{chunk-OKHKJ5ML.cjs → chunk-UUENH4BJ.cjs} +11 -11
- package/dist/{chunk-OKHKJ5ML.cjs.map → chunk-UUENH4BJ.cjs.map} +1 -1
- package/dist/{chunk-K5MYEWD5.cjs → chunk-UZHWXKS6.cjs} +7 -7
- package/dist/{chunk-K5MYEWD5.cjs.map → chunk-UZHWXKS6.cjs.map} +1 -1
- package/dist/{chunk-QVHP4R7T.cjs → chunk-V5IMYLYK.cjs} +29 -29
- package/dist/{chunk-QVHP4R7T.cjs.map → chunk-V5IMYLYK.cjs.map} +1 -1
- package/dist/{chunk-XW524KUX.cjs → chunk-VJCSEMXT.cjs} +4 -4
- package/dist/{chunk-XW524KUX.cjs.map → chunk-VJCSEMXT.cjs.map} +1 -1
- package/dist/{chunk-B5442TKX.cjs → chunk-VRK3IQAP.cjs} +4 -4
- package/dist/{chunk-B5442TKX.cjs.map → chunk-VRK3IQAP.cjs.map} +1 -1
- package/dist/{chunk-MYRKL3JO.cjs → chunk-VWTOIGX4.cjs} +4 -4
- package/dist/{chunk-MYRKL3JO.cjs.map → chunk-VWTOIGX4.cjs.map} +1 -1
- package/dist/{chunk-Q7DB5S7N.cjs → chunk-WW6LXQY6.cjs} +12 -12
- package/dist/{chunk-Q7DB5S7N.cjs.map → chunk-WW6LXQY6.cjs.map} +1 -1
- package/dist/{chunk-NJCK6V6U.cjs → chunk-XKDUPU7B.cjs} +4 -4
- package/dist/{chunk-NJCK6V6U.cjs.map → chunk-XKDUPU7B.cjs.map} +1 -1
- package/dist/{chunk-YAPXIANR.cjs → chunk-YVCOQHCE.cjs} +5 -5
- package/dist/{chunk-YAPXIANR.cjs.map → chunk-YVCOQHCE.cjs.map} +1 -1
- package/dist/{chunk-TOM2P3MA.cjs → chunk-ZZA756I4.cjs} +4 -4
- package/dist/{chunk-TOM2P3MA.cjs.map → chunk-ZZA756I4.cjs.map} +1 -1
- package/dist/citations/index.cjs +8 -8
- package/dist/connect/docx.cjs +24 -24
- package/dist/connect/index.cjs +1489 -1433
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/viewer.cjs +40 -40
- package/dist/connection/ConnectedWorkflowBuilder.d.ts +11 -0
- package/dist/connection/ConnectedWorkflowBuilder.js +42 -3
- package/dist/connection/ConnectedWorkflowBuilder.js.map +2 -2
- package/dist/connection/conversation/ConnectedConversationPage.js +36 -2
- package/dist/connection/conversation/ConnectedConversationPage.js.map +2 -2
- package/dist/connection/report-problem/ReportProblemDialog.d.ts +2 -2
- package/dist/connection/report-problem/ReportProblemDialog.js +51 -19
- package/dist/connection/report-problem/ReportProblemDialog.js.map +2 -2
- package/dist/connection/workflows/ConnectedWorkflowsPage.js +10 -3
- package/dist/connection/workflows/ConnectedWorkflowsPage.js.map +2 -2
- package/dist/connection/workflows/useWorkflowsPageState.d.ts +1 -0
- package/dist/connection/workflows/useWorkflowsPageState.js.map +2 -2
- package/dist/dashboards/index.cjs +23 -23
- package/dist/embed/index.cjs +49 -49
- package/dist/facts/index.cjs +45 -45
- package/dist/files/index.cjs +225 -225
- package/dist/home/index.cjs +32 -32
- package/dist/index.cjs +1750 -1750
- package/dist/provider/environment.d.ts +5 -0
- package/dist/provider/environment.js +1 -1
- package/dist/provider/environment.js.map +2 -2
- package/dist/provider/requests.d.ts +2 -0
- package/dist/provider/requests.js.map +2 -2
- package/dist/retrieval/index.cjs +4 -4
- package/dist/settings/index.cjs +148 -148
- package/dist/shell/index.cjs +91 -91
- package/dist/site/index.cjs +5 -5
- package/dist/studio/index.cjs +43 -43
- package/dist/workflow-canvas/index.cjs +114 -72
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workspaces/index.cjs +18 -18
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ai-OYTFPMXI.cjs.map +0 -1
- package/dist/chunk-U5T46QCS.cjs.map +0 -1
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var chunkAHDJXIUB_cjs = require('./chunk-AHDJXIUB.cjs');
|
|
5
|
-
var
|
|
6
|
-
var chunkVZOOGA47_cjs = require('./chunk-VZOOGA47.cjs');
|
|
5
|
+
var chunkYVCOQHCE_cjs = require('./chunk-YVCOQHCE.cjs');
|
|
7
6
|
var chunkQRAQZTJE_cjs = require('./chunk-QRAQZTJE.cjs');
|
|
8
7
|
var chunkUDSHVNU3_cjs = require('./chunk-UDSHVNU3.cjs');
|
|
8
|
+
var chunkVZOOGA47_cjs = require('./chunk-VZOOGA47.cjs');
|
|
9
9
|
var chunkPLIF5CUV_cjs = require('./chunk-PLIF5CUV.cjs');
|
|
10
10
|
var react = require('react');
|
|
11
11
|
var lucideReact = require('lucide-react');
|
|
@@ -310,7 +310,7 @@ function SchemaForm({
|
|
|
310
310
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ui.cn("flex flex-col gap-4", className), "data-slot": "schema-form", children: [
|
|
311
311
|
common.map(render),
|
|
312
312
|
advanced.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
313
|
-
|
|
313
|
+
chunkYVCOQHCE_cjs.FoldSection,
|
|
314
314
|
{
|
|
315
315
|
label: l.advanced,
|
|
316
316
|
open: advancedOpen,
|
|
@@ -469,7 +469,7 @@ function WorkflowConfigDialog({
|
|
|
469
469
|
const firstField = workflow.inputs.find((f) => !f.advanced);
|
|
470
470
|
const focusPromptFirst = firstField?.type === "text" || firstField?.type === "longtext";
|
|
471
471
|
const defaultScopeRender = scopeSource ? (_field, value, onChange) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
472
|
-
|
|
472
|
+
chunkYVCOQHCE_cjs.ScopePicker,
|
|
473
473
|
{
|
|
474
474
|
folders: scopeSource.folders,
|
|
475
475
|
unfiledCount: scopeSource.unfiledCount,
|
|
@@ -502,7 +502,7 @@ function WorkflowConfigDialog({
|
|
|
502
502
|
},
|
|
503
503
|
children: [
|
|
504
504
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
505
|
-
|
|
505
|
+
chunkYVCOQHCE_cjs.QuickActionDialogHeader,
|
|
506
506
|
{
|
|
507
507
|
icon: workflow.icon && renderIcon ? renderIcon(workflow.icon) : null,
|
|
508
508
|
title: workflow.title,
|
|
@@ -520,7 +520,7 @@ function WorkflowConfigDialog({
|
|
|
520
520
|
submit();
|
|
521
521
|
},
|
|
522
522
|
children: noFiles ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
523
|
-
|
|
523
|
+
chunkYVCOQHCE_cjs.AddFilesFirst,
|
|
524
524
|
{
|
|
525
525
|
reason: l.addFilesReason,
|
|
526
526
|
action: addFilesAction,
|
|
@@ -644,7 +644,7 @@ function WorkflowLauncher({
|
|
|
644
644
|
});
|
|
645
645
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className, "data-slot": "workflow-launcher", children: [
|
|
646
646
|
showTiles && /* @__PURE__ */ jsxRuntime.jsx(
|
|
647
|
-
|
|
647
|
+
chunkYVCOQHCE_cjs.StartTiles,
|
|
648
648
|
{
|
|
649
649
|
items: [...tiles, ...extraTiles],
|
|
650
650
|
caption,
|
|
@@ -922,5 +922,5 @@ exports.WorkflowLauncher = WorkflowLauncher;
|
|
|
922
922
|
exports.buildWorkflowScopeSource = buildWorkflowScopeSource;
|
|
923
923
|
exports.documentScopeLabels = documentScopeLabels;
|
|
924
924
|
exports.matchWorkflowScope = matchWorkflowScope;
|
|
925
|
-
//# sourceMappingURL=chunk-
|
|
926
|
-
//# sourceMappingURL=chunk-
|
|
925
|
+
//# sourceMappingURL=chunk-MZ2KZXNU.cjs.map
|
|
926
|
+
//# sourceMappingURL=chunk-MZ2KZXNU.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/agents/workflows/SchemaForm.tsx","../src/agents/workflows/AgentSelect.tsx","../src/agents/workflows/WorkflowConfigDialog.tsx","../src/agents/workflows/WorkflowLauncher.tsx","../src/agents/workflows/workspaceScope.ts","../src/agents/workflows/WorkflowDocumentsField.tsx"],"names":["jsx","Input","Textarea","Switch","prefixedTestId","jsxs","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","isWorkflowScope","cn","TONE_SURFACE","TONE_SOLID_BORDER","TONE_BORDER","Check","TONE_DOT","Label","Fragment","useState","testIdOr","FoldSection","useId","useControllableState","defaultInputs","useMemo","useEffect","validateInputs","buildLaunch","useRef","ScopePicker","Dialog","DialogContent","QuickActionDialogHeader","AddFilesFirst","Button","Loader2","Play","StartTiles","getEntityColor","FolderPlus","DocumentPicker","ImageIcon","X"],"mappings":"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","file":"chunk-3Q5L7XVI.cjs","sourcesContent":["import { useState, type ReactNode } from 'react'\nimport { Check } from 'lucide-react'\nimport {\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Switch,\n Textarea,\n cn,\n} from '@arbidocs/react/ui'\nimport { prefixedTestId, testIdOr } from '../../chat/test-id'\nimport { TONE_BORDER, TONE_DOT, TONE_SOLID_BORDER, TONE_SURFACE } from '../../components/tones'\nimport { FoldSection } from '../../home/FoldSection'\nimport { isWorkflowScope } from './workflow'\nimport type {\n WorkflowErrors,\n WorkflowField,\n WorkflowFieldError,\n WorkflowFieldOption,\n WorkflowInputs,\n WorkflowInputValue,\n WorkflowScope,\n} from './types'\n\nexport interface SchemaFormLabels {\n /** Appended to the label of an optional field. */\n optional: string\n /** Heading of the folded block that holds `advanced` fields. */\n advanced: string\n errors: Record<WorkflowFieldError, string>\n}\n\nexport const DEFAULT_SCHEMA_FORM_LABELS: SchemaFormLabels = {\n optional: '(optional)',\n advanced: 'More options',\n errors: {\n required: 'This is needed to continue',\n min: 'Too small',\n max: 'Too large',\n number: 'Enter a number',\n },\n}\n\nexport interface SchemaFormProps {\n fields: WorkflowField[]\n values: WorkflowInputs\n onChange: (name: string, value: WorkflowInputValue) => void\n /** Per-field problems to show (the dialog passes them once a launch was attempted). */\n errors?: WorkflowErrors\n /** Renders a `scope` field: the host owns the file data behind the picker. */\n renderScope?: (\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode\n /** Renders a `documents` field (an explicit file pick): the host owns the file list. */\n renderDocuments?: (\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode\n /** Maps an option's `icon` key to a mark. */\n renderIcon?: (key: string) => ReactNode\n /** Who a `person` field offers (the workspace's members); without them it takes an id. */\n people?: ReadonlyArray<{ value: string; label: string }>\n /**\n * Plain Enter in a multi-line field submits the form (Shift+Enter inserts the newline), the\n * chat's own convention. Single-line fields submit natively.\n */\n onEnterSubmit?: () => void\n /** Prefix of field ids: `<prefix>-<field name>`; default `workflow-field`. */\n testIdPrefix?: string\n labels?: Partial<SchemaFormLabels>\n className?: string\n}\n\n/** Selects with at most this many options render as tiles; more fall back to a dropdown. */\nconst TILE_MAX = 4\n\ninterface FieldProps {\n field: WorkflowField\n value: WorkflowInputValue | undefined\n error?: WorkflowFieldError\n onChange: (value: WorkflowInputValue) => void\n l: SchemaFormLabels\n idFor: (suffix?: string) => string\n renderScope: SchemaFormProps['renderScope']\n renderDocuments: SchemaFormProps['renderDocuments']\n renderIcon: SchemaFormProps['renderIcon']\n onEnterSubmit: SchemaFormProps['onEnterSubmit']\n people?: SchemaFormProps['people']\n}\n\nfunction FieldControl({\n field,\n value,\n error,\n onChange,\n l,\n idFor,\n renderScope,\n renderDocuments,\n renderIcon,\n onEnterSubmit,\n people,\n}: FieldProps) {\n const id = `${idFor()}-control`\n const testId = idFor()\n switch (field.type) {\n case 'text':\n return (\n <Input\n id={id}\n data-testid={testId}\n value={String(value ?? '')}\n placeholder={field.placeholder}\n aria-required={field.required || undefined}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? idFor('error') : undefined}\n onChange={(e) => onChange(e.target.value)}\n />\n )\n case 'longtext':\n return (\n <Textarea\n id={id}\n data-testid={testId}\n value={String(value ?? '')}\n placeholder={field.placeholder}\n aria-required={field.required || undefined}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? idFor('error') : undefined}\n className=\"min-h-[96px]\"\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={(e) => {\n if (onEnterSubmit && e.key === 'Enter' && !e.shiftKey && !e.nativeEvent.isComposing) {\n e.preventDefault()\n onEnterSubmit()\n }\n }}\n />\n )\n case 'number':\n return (\n <Input\n id={id}\n data-testid={testId}\n type=\"number\"\n inputMode=\"decimal\"\n min={field.min}\n max={field.max}\n value={value === undefined ? '' : String(value)}\n placeholder={field.placeholder}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? idFor('error') : undefined}\n onChange={(e) => onChange(e.target.value === '' ? '' : Number(e.target.value))}\n />\n )\n case 'date':\n return (\n <Input\n id={id}\n data-testid={testId}\n type=\"date\"\n value={String(value ?? '')}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? idFor('error') : undefined}\n onChange={(e) => onChange(e.target.value)}\n />\n )\n case 'boolean':\n return (\n <Switch\n id={id}\n data-testid={testId}\n checked={Boolean(value)}\n onCheckedChange={(checked) => onChange(checked)}\n />\n )\n case 'select': {\n const options = field.options ?? []\n if (options.length > 0 && options.length <= TILE_MAX) {\n // Short choices (no icon or description) are buttons, not cards.\n const compact = options.every((o) => !o.icon && !o.description)\n return (\n <div\n role=\"radiogroup\"\n aria-label={field.label}\n // Each tile is as wide as its label and wraps onto a new line when the row is full\n // (a narrow side panel); one wider than the whole row wraps its own text instead.\n className=\"flex flex-wrap gap-2\"\n data-testid={testId}\n >\n {options.map((option) => (\n <ChoiceTile\n key={option.value}\n option={option}\n selected={value === option.value}\n compact={compact}\n renderIcon={renderIcon}\n testId={prefixedTestId(testId, option.value, {\n testId: `workflow-field-${field.name}-${option.value}`,\n })}\n onSelect={() => onChange(option.value)}\n />\n ))}\n </div>\n )\n }\n return (\n <Select value={String(value ?? '')} onValueChange={(v) => onChange(v)}>\n <SelectTrigger id={id} data-testid={testId} className=\"pointer-coarse:min-h-11\">\n <SelectValue placeholder={field.placeholder} />\n </SelectTrigger>\n <SelectContent>\n {options.map((o) => (\n <SelectItem key={o.value} value={o.value}>\n {o.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n }\n case 'scope': {\n const scope = isWorkflowScope(value) ? value : { folders: [], labels: [] }\n return <div data-testid={testId}>{renderScope?.(field, scope, onChange)}</div>\n }\n case 'documents': {\n const picked = isWorkflowScope(value) ? value : { folders: [], labels: [], documents: [] }\n return <div data-testid={testId}>{renderDocuments?.(field, picked, onChange)}</div>\n }\n case 'person':\n return people?.length ? (\n <select\n id={id}\n data-testid={testId}\n value={String(value ?? '')}\n aria-required={field.required || undefined}\n aria-invalid={error ? true : undefined}\n onChange={(e) => onChange(e.target.value)}\n className=\"flex h-9 w-full rounded-md border border-input bg-background px-2 text-sm shadow-sm\"\n >\n <option value=\"\">{field.placeholder ?? ''}</option>\n {people.map((p) => (\n <option key={p.value} value={p.value}>\n {p.label}\n </option>\n ))}\n </select>\n ) : (\n <Input\n id={id}\n data-testid={testId}\n value={String(value ?? '')}\n placeholder={field.placeholder ?? 'usr-…'}\n aria-required={field.required || undefined}\n aria-invalid={error ? true : undefined}\n onChange={(e) => onChange(e.target.value)}\n />\n )\n }\n}\n\n/**\n * One choice of a tiled select. A toned option shows its tone chosen or not: a dot and a tinted\n * border at rest, the tone's surface once chosen. The label and a check mark carry the state too,\n * so it never rests on colour alone.\n */\nfunction ChoiceTile({\n option,\n selected,\n compact,\n renderIcon,\n testId,\n onSelect,\n}: {\n option: WorkflowFieldOption\n selected: boolean\n compact: boolean\n renderIcon: SchemaFormProps['renderIcon']\n testId: string\n onSelect: () => void\n}) {\n const tone = option.tone\n return (\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n data-testid={testId}\n data-tone={tone}\n onClick={onSelect}\n className={cn(\n // Sized to its label (flex-basis auto), growing to share the row, never wider than it.\n 'flex max-w-full min-w-[min(4rem,100%)] flex-auto flex-col items-center justify-center gap-1.5 rounded-lg border text-center transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n compact\n ? 'min-h-9 px-3 py-1.5 pointer-coarse:min-h-11'\n : 'min-h-24 p-3 pointer-coarse:min-h-28',\n tone\n ? selected\n ? cn(TONE_SURFACE[tone], TONE_SOLID_BORDER[tone])\n : cn(TONE_BORDER[tone], 'bg-card [&:hover]:bg-muted')\n : selected\n ? 'border-primary bg-primary/10'\n : 'border-border bg-card [&:hover]:border-primary [&:hover]:bg-muted'\n )}\n >\n {option.icon && renderIcon && (\n <span className=\"text-muted-foreground\">{renderIcon(option.icon)}</span>\n )}\n <span\n className={cn(\n 'flex max-w-full items-center gap-1.5 text-sm font-medium',\n tone && selected ? undefined : 'text-foreground'\n )}\n >\n {selected ? (\n <Check className=\"size-3.5 shrink-0\" aria-hidden />\n ) : (\n tone && (\n <span aria-hidden className={cn('size-2 shrink-0 rounded-full', TONE_DOT[tone])} />\n )\n )}\n <span className=\"min-w-0 break-words\">{option.label}</span>\n </span>\n {option.description && (\n <span className=\"max-w-full text-xs break-words text-muted-foreground\">\n {option.description}\n </span>\n )}\n </button>\n )\n}\n\nfunction FormField(props: FieldProps) {\n const { field, error, l, idFor } = props\n const isBoolean = field.type === 'boolean'\n const showOptional = !field.required && field.type !== 'boolean' && field.type !== 'scope'\n const label = (\n <Label\n htmlFor={`${idFor()}-control`}\n className={isBoolean ? 'cursor-pointer font-normal' : undefined}\n >\n {field.label}\n {showOptional && (\n <>\n {' '}\n <span className=\"font-normal text-muted-foreground\">{l.optional}</span>\n </>\n )}\n </Label>\n )\n return (\n <div className=\"flex flex-col gap-1.5\" data-slot=\"schema-field\" data-field={field.name}>\n {isBoolean ? (\n <div className=\"flex items-center gap-2.5 pointer-coarse:min-h-11\">\n <FieldControl {...props} />\n {label}\n </div>\n ) : (\n <>\n {field.type !== 'scope' && label}\n <FieldControl {...props} />\n </>\n )}\n {field.description && <p className=\"text-xs text-muted-foreground\">{field.description}</p>}\n {error && (\n <p\n id={idFor('error')}\n role=\"alert\"\n className=\"text-xs text-destructive\"\n data-testid={idFor('error')}\n >\n {l.errors[error]}\n </p>\n )}\n </div>\n )\n}\n\n/**\n * Renders a workflow's declared inputs as a form. Controlled: the caller owns `values` (see\n * `defaultInputs`) and decides when to validate (`validateInputs`) and show `errors`.\n */\nexport function SchemaForm({\n fields,\n values,\n onChange,\n errors,\n renderScope,\n renderDocuments,\n renderIcon,\n onEnterSubmit,\n people,\n testIdPrefix,\n labels,\n className,\n}: SchemaFormProps) {\n const l: SchemaFormLabels = {\n ...DEFAULT_SCHEMA_FORM_LABELS,\n ...labels,\n errors: { ...DEFAULT_SCHEMA_FORM_LABELS.errors, ...labels?.errors },\n }\n const [advancedOpen, setAdvancedOpen] = useState(false)\n const common = fields.filter((f) => !f.advanced)\n const advanced = fields.filter((f) => f.advanced)\n\n const render = (field: WorkflowField) => (\n <FormField\n key={field.name}\n field={field}\n value={values[field.name]}\n error={errors?.[field.name]}\n onChange={(v) => onChange(field.name, v)}\n l={l}\n idFor={(suffix) =>\n suffix\n ? `${testIdOr(testIdPrefix, { testId: 'workflow-field' })}-${field.name}-${suffix}`\n : `${testIdOr(testIdPrefix, { testId: 'workflow-field' })}-${field.name}`\n }\n renderScope={renderScope}\n renderDocuments={renderDocuments}\n renderIcon={renderIcon}\n onEnterSubmit={onEnterSubmit}\n people={people}\n />\n )\n\n return (\n <div className={cn('flex flex-col gap-4', className)} data-slot=\"schema-form\">\n {common.map(render)}\n {advanced.length > 0 && (\n <FoldSection\n label={l.advanced}\n open={advancedOpen}\n onOpenChange={setAdvancedOpen}\n testId={`${testIdOr(testIdPrefix, { testId: 'workflow-field' })}-advanced-toggle`}\n >\n <div className=\"flex flex-col gap-4\">{advanced.map(render)}</div>\n </FoldSection>\n )}\n </div>\n )\n}\n","import { useId, type ReactNode } from 'react'\nimport {\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr, prefixedTestId } from '../../chat/test-id'\nimport { useControllableState } from '../../lib/useControllableState'\n\nexport interface AgentOption {\n id: string\n label: string\n /** Small line under the label in the list (e.g. what the agent is for). */\n description?: string\n /** Avatar or mark shown before the name. */\n avatar?: ReactNode\n}\n\nexport interface AgentSelectLabels {\n /** The field label. */\n label: string\n /** The entry that means \"no specific agent\": the user's own assistant. */\n myAssistant: string\n}\n\nexport const DEFAULT_AGENT_SELECT_LABELS: AgentSelectLabels = {\n label: 'Run as',\n myAssistant: 'My assistant',\n}\n\nexport interface AgentSelectProps {\n agents: AgentOption[]\n /** Controlled agent id; `''` = my assistant. Omit to let the select hold its own state. */\n value?: string\n defaultValue?: string\n onValueChange?: (agentId: string) => void\n /** Hide the visible label (still the accessible name). */\n hideLabel?: boolean\n disabled?: boolean\n className?: string\n labels?: Partial<AgentSelectLabels>\n testId?: string\n /** Prefix of option ids (`<prefix>-<agent id>`); default `agent-select-option`. */\n optionTestId?: string\n}\n\nconst ME = '__me__'\n\n/** Pick which agent runs something: the user's own assistant (default) or one of their agents. */\nexport function AgentSelect({\n agents,\n value,\n defaultValue = '',\n onValueChange,\n hideLabel,\n disabled,\n className,\n labels,\n testId,\n optionTestId,\n}: AgentSelectProps) {\n const l = { ...DEFAULT_AGENT_SELECT_LABELS, ...labels }\n const triggerId = useId()\n const [current, setCurrent] = useControllableState(value, defaultValue, onValueChange)\n return (\n <div className={cn('flex flex-col gap-1.5', className)} data-slot=\"agent-select\">\n <Label htmlFor={triggerId} className={hideLabel ? 'sr-only' : undefined}>\n {l.label}\n </Label>\n <Select\n value={current === '' ? ME : current}\n onValueChange={(v) => setCurrent(v === ME ? '' : v)}\n disabled={disabled}\n >\n <SelectTrigger\n id={triggerId}\n data-testid={testIdOr(testId, { testId: 'agent-select' })}\n className=\"pointer-coarse:min-h-11\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem\n value={ME}\n data-testid={prefixedTestId(optionTestId, 'me', {\n testId: 'agent-select-option-me',\n })}\n >\n {l.myAssistant}\n </SelectItem>\n {agents.map((agent) => (\n <SelectItem\n key={agent.id}\n value={agent.id}\n data-testid={prefixedTestId(optionTestId, agent.id, {\n testId: `agent-select-option-${agent.id}`,\n })}\n >\n <span className=\"flex items-center gap-2\">\n {agent.avatar}\n <span>{agent.label}</span>\n {agent.description && (\n <span className=\"text-xs text-muted-foreground\">{agent.description}</span>\n )}\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )\n}\n","import { useEffect, useMemo, useRef, useState, type FormEvent, type ReactNode } from 'react'\nimport { Loader2, Play } from 'lucide-react'\nimport { Button, Dialog, DialogContent } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { AddFilesFirst } from '../../home/AddFilesFirst'\nimport { QuickActionDialogHeader } from '../../home/QuickActionDialogHeader'\nimport { ScopePicker, type ScopeFolder, type ScopeLabel } from '../../home/ScopePicker'\nimport { useControllableState } from '../../lib/useControllableState'\nimport { AgentSelect, type AgentOption, type AgentSelectLabels } from './AgentSelect'\nimport { SchemaForm, type SchemaFormLabels } from './SchemaForm'\nimport type {\n OnWorkflowLaunch,\n WorkflowDefinition,\n WorkflowField,\n WorkflowInputs,\n WorkflowInputValue,\n WorkflowScope,\n} from './types'\nimport { buildLaunch, defaultInputs, validateInputs } from './workflow'\n\n/** The workspace's files, as the scope picker needs them. Matching stays with the host. */\nexport interface WorkflowScopeSource {\n folders: ScopeFolder[]\n unfiledCount: number\n labels: ScopeLabel[]\n totalCount: number\n /** How many files a scope selects. */\n countMatching: (scope: WorkflowScope) => number\n /**\n * The ids of the files a scope selects. A run is bound to explicit file ids, so a folder/label pick is\n * resolved here, on the client, before anything is sent.\n */\n resolveDocuments?: (scope: WorkflowScope) => string[]\n}\n\nexport interface WorkflowConfigDialogLabels {\n /** Primary button when the workflow gives no label of its own. */\n start: string\n starting: string\n /** Shown instead of the form when `requiresFiles` and the workspace has none. */\n addFilesReason: string\n agentLabel: string\n}\n\nexport const DEFAULT_WORKFLOW_CONFIG_DIALOG_LABELS: WorkflowConfigDialogLabels = {\n start: 'Start',\n starting: 'Starting…',\n addFilesReason: 'This reads your files, and there is nothing to read yet.',\n agentLabel: 'Run as',\n}\n\nexport interface WorkflowConfigDialogProps {\n workflow: WorkflowDefinition\n open: boolean\n onOpenChange: (open: boolean) => void\n onLaunch: OnWorkflowLaunch\n /** Values the form opens with, over each field's default (e.g. text typed after a slash). */\n initialInputs?: Partial<WorkflowInputs>\n /** Controlled inputs; omit to let the dialog hold them. */\n inputs?: WorkflowInputs\n onInputsChange?: (inputs: WorkflowInputs) => void\n /** Files behind `scope` fields. Without it a scope field renders nothing. */\n scopeSource?: WorkflowScopeSource\n /** Renders a `documents` field: the host owns the file list behind the pick. */\n renderDocuments?: (\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode\n renderIcon?: (key: string) => ReactNode\n /** The host's own \"Add\" control, shown when the workflow needs files and there are none. */\n addFilesAction?: ReactNode\n /** Agents the user can hand the work to. Empty/omitted hides the \"Run as\" row. */\n agents?: AgentOption[]\n agentId?: string\n onAgentChange?: (agentId: string) => void\n isLaunching?: boolean\n /** Primary button text from the current inputs and matched file count. */\n submitLabel?: (ctx: {\n workflow: WorkflowDefinition\n inputs: WorkflowInputs\n matchedCount: number | null\n }) => string | undefined\n /** Per-field placeholder derived from the inputs (e.g. a name taken from a description). */\n fieldPlaceholder?: (\n field: WorkflowField,\n inputs: WorkflowInputs,\n workflow: WorkflowDefinition\n ) => string | undefined\n /** Anything the host wants to say about the current inputs, above the footer. */\n renderNotice?: (ctx: { workflow: WorkflowDefinition; inputs: WorkflowInputs }) => ReactNode\n labels?: Partial<WorkflowConfigDialogLabels>\n formLabels?: Partial<SchemaFormLabels>\n agentLabels?: Partial<AgentSelectLabels>\n /** Dialog id; fields use `<testId>-field-<name>`. Default `workflow-dialog`. */\n testId?: string\n startTestId?: string\n className?: string\n}\n\n/**\n * One dialog for every workflow: the form comes from the workflow's declared inputs, scope fields\n * use the shared folder/label picker, and the footer says who runs it. Launching hands\n * `{workflow, inputs, scope, agentId}` to `onLaunch`; the host does the rest.\n */\nexport function WorkflowConfigDialog({\n workflow,\n open,\n onOpenChange,\n onLaunch,\n initialInputs,\n inputs: inputsProp,\n onInputsChange,\n scopeSource,\n renderDocuments,\n renderIcon,\n addFilesAction,\n agents,\n agentId: agentIdProp,\n onAgentChange,\n isLaunching,\n submitLabel,\n fieldPlaceholder,\n renderNotice,\n labels,\n formLabels,\n agentLabels,\n testId,\n startTestId,\n className,\n}: WorkflowConfigDialogProps) {\n const l = { ...DEFAULT_WORKFLOW_CONFIG_DIALOG_LABELS, ...labels }\n // Keyed by content: a host passing a fresh `initialInputs` object each render must not reset the form.\n const initialKey = JSON.stringify(initialInputs ?? {})\n const seedKey = JSON.stringify({ ...defaultInputs(workflow), ...JSON.parse(initialKey) })\n const seed = useMemo(() => JSON.parse(seedKey) as WorkflowInputs, [seedKey])\n const [inputs, setInputs] = useControllableState<WorkflowInputs>(inputsProp, seed, onInputsChange)\n const [agentId, setAgentId] = useControllableState<string>(\n agentIdProp,\n workflow.defaultAgentId ?? '',\n onAgentChange\n )\n\n // A fresh open starts from the seed again (uncontrolled only).\n useEffect(() => {\n if (open && inputsProp === undefined) setInputs(seed)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, seed])\n\n const setField = (name: string, value: WorkflowInputValue) =>\n setInputs({ ...inputs, [name]: value })\n\n const errors = validateInputs(workflow, inputs)\n const valid = Object.keys(errors).length === 0\n // Required-ness is conveyed by the disabled button; range problems are shown as they happen.\n const visibleErrors = Object.fromEntries(\n Object.entries(errors).filter(([, e]) => e !== 'required')\n )\n\n const scopeField = workflow.inputs.find((f) => f.type === 'scope')\n const rawScope = scopeField ? inputs[scopeField.name] : undefined\n const scopeValue: WorkflowScope =\n rawScope && typeof rawScope === 'object' ? rawScope : { folders: [], labels: [] }\n const matchedCount = scopeSource && scopeField ? scopeSource.countMatching(scopeValue) : null\n const noFiles = Boolean(workflow.requiresFiles && scopeSource && scopeSource.totalCount === 0)\n const blockedByScope =\n matchedCount !== null && matchedCount === 0 && Boolean(workflow.requiresFiles)\n\n const showAgent =\n workflow.run.kind === 'prompt' &&\n workflow.options?.agent !== false &&\n agents !== undefined &&\n agents.length > 0\n\n const launch = (values: WorkflowInputs) => {\n // A failed launch leaves the dialog open so nothing typed is lost; the host reports why.\n Promise.resolve(onLaunch(buildLaunch(workflow, values, agentId))).catch(() => {})\n }\n\n const submit = () => {\n if (!valid || noFiles || blockedByScope || isLaunching) return\n launch(inputs)\n }\n\n const fields = useMemo(\n () =>\n workflow.inputs.map((f) => {\n const placeholder = fieldPlaceholder?.(f, inputs, workflow)\n return placeholder === undefined ? f : { ...f, placeholder }\n }),\n [workflow, fieldPlaceholder, inputs]\n )\n\n const id = testIdOr(testId, { testId: 'workflow-dialog' })\n const formRef = useRef<HTMLFormElement>(null)\n // A form that opens on a text field (the prompt) puts the cursor there, so typing starts at\n // once; a form that opens on a file pick keeps the dialog's own first focus.\n const firstField = workflow.inputs.find((f) => !f.advanced)\n const focusPromptFirst = firstField?.type === 'text' || firstField?.type === 'longtext'\n const defaultScopeRender = scopeSource\n ? (_field: WorkflowField, value: WorkflowScope, onChange: (s: WorkflowScope) => void) => (\n <ScopePicker\n folders={scopeSource.folders}\n unfiledCount={scopeSource.unfiledCount}\n labels={scopeSource.labels}\n totalCount={scopeSource.totalCount}\n matchedCount={scopeSource.countMatching(value)}\n scope={value}\n onScopeChange={onChange}\n />\n )\n : undefined\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"sheet\"\n className={`max-h-[calc(100dvh-2rem)] overflow-y-auto sm:max-w-xl ${className ?? ''}`}\n data-testid={id}\n data-workflow={workflow.id}\n onOpenAutoFocus={(event) => {\n if (!focusPromptFirst || !firstField) return\n const control = formRef.current?.querySelector<HTMLElement>(\n `[data-testid=\"${id}-field-${firstField.name}\"]`\n )\n if (!control) return\n event.preventDefault()\n control.focus()\n if (control instanceof HTMLInputElement || control instanceof HTMLTextAreaElement) {\n const end = control.value.length\n control.setSelectionRange(end, end)\n }\n }}\n >\n <QuickActionDialogHeader\n icon={workflow.icon && renderIcon ? renderIcon(workflow.icon) : null}\n title={workflow.title}\n description={workflow.details ?? workflow.description}\n descriptionTestId={`${id}-description`}\n />\n <form\n ref={formRef}\n className=\"mt-2 flex flex-col gap-4\"\n onSubmit={(event: FormEvent) => {\n event.preventDefault()\n submit()\n }}\n >\n {noFiles ? (\n <AddFilesFirst\n reason={l.addFilesReason}\n action={addFilesAction}\n testId={`${id}-empty-state`}\n />\n ) : (\n <>\n <SchemaForm\n fields={fields}\n values={inputs}\n onChange={setField}\n errors={visibleErrors}\n renderScope={defaultScopeRender}\n renderDocuments={renderDocuments}\n renderIcon={renderIcon}\n labels={formLabels}\n onEnterSubmit={submit}\n testIdPrefix={`${id}-field`}\n />\n {renderNotice?.({ workflow, inputs })}\n <div\n className=\"flex flex-col gap-3 border-t border-border pt-3 sm:flex-row sm:items-end sm:justify-between\"\n data-slot=\"workflow-footer\"\n >\n {showAgent ? (\n <AgentSelect\n agents={agents ?? []}\n value={agentId}\n onValueChange={setAgentId}\n labels={{ label: l.agentLabel, ...agentLabels }}\n testId={`${id}-agent`}\n className=\"sm:w-56\"\n />\n ) : (\n <span />\n )}\n <Button\n type=\"submit\"\n className=\"gap-1.5 px-5 pointer-coarse:min-h-11\"\n disabled={!valid || blockedByScope || isLaunching}\n data-testid={testIdOr(startTestId, { testId: 'workflow-start-button' })}\n >\n {isLaunching ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Play className=\"size-4\" />\n )}\n {isLaunching\n ? l.starting\n : (submitLabel?.({ workflow, inputs, matchedCount }) ??\n workflow.startLabel ??\n l.start)}\n </Button>\n </div>\n </>\n )}\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","import { useState, type ReactNode } from 'react'\nimport { StartTiles, type StartTile } from '../../home/StartTiles'\nimport { useControllableState } from '../../lib/useControllableState'\nimport { WorkflowConfigDialog, type WorkflowConfigDialogProps } from './WorkflowConfigDialog'\nimport type { OnWorkflowLaunch, WorkflowDefinition, WorkflowInputs } from './types'\nimport { buildLaunch, defaultInputs, validateInputs } from './workflow'\n\nexport interface WorkflowLauncherProps extends Omit<\n WorkflowConfigDialogProps,\n 'workflow' | 'open' | 'onOpenChange' | 'onLaunch' | 'isLaunching' | 'initialInputs'\n> {\n workflows: WorkflowDefinition[]\n /** Which of `workflows` get a tile (a filtered or capped view); default all. */\n tileWorkflows?: WorkflowDefinition[]\n /** The host performs the launch (open a chat, scope files, send, land). */\n onLaunch: OnWorkflowLaunch\n /** Render the tile band. Off when something else (the slash menu) opens the dialog. */\n showTiles?: boolean\n caption?: string\n captionTestId?: string\n /** Tile ids: `<prefix>-<workflow id>` unless `tileTestId` returns one. */\n tileTestId?: (workflow: WorkflowDefinition) => string | undefined\n /** A reason the workflow cannot run now (greys its tile out). */\n disabledReason?: (workflow: WorkflowDefinition) => string | undefined\n /** Controlled open workflow (by id); `null` = none. Omit for uncontrolled. */\n activeId?: string | null\n onActiveIdChange?: (id: string | null) => void\n /** Inputs to seed the dialog with when `activeId` opens (slash-typed text etc.). */\n initialInputsFor?: (workflow: WorkflowDefinition) => Partial<WorkflowInputs> | undefined\n /** Extra content inside the tile band's section, after the tiles. */\n /** Plain tiles appended to the band (tier A actions that are not workflows). */\n extraTiles?: StartTile[]\n /** Test id of the tile band. */\n testId?: string\n className?: string\n children?: ReactNode\n}\n\n/**\n * The one place a workflow is launched from: a band of tiles plus the config dialog. Choosing a\n * workflow opens the dialog, which asks what it declares; only an operation with no inputs\n * launches on the click.\n * Also usable headless (`showTiles={false}`) when another surface picks the workflow.\n */\nexport function WorkflowLauncher({\n workflows,\n tileWorkflows,\n onLaunch,\n showTiles = true,\n caption,\n captionTestId,\n tileTestId,\n disabledReason,\n activeId: activeIdProp,\n onActiveIdChange,\n initialInputsFor,\n testId,\n extraTiles = [],\n className,\n children,\n renderIcon,\n ...dialog\n}: WorkflowLauncherProps) {\n const [activeId, setActiveId] = useControllableState<string | null>(\n activeIdProp,\n null,\n onActiveIdChange\n )\n const [isLaunching, setIsLaunching] = useState(false)\n const active = workflows.find((w) => w.id === activeId) ?? null\n\n const run: OnWorkflowLaunch = async (launch) => {\n setIsLaunching(true)\n try {\n await onLaunch(launch)\n setActiveId(null)\n } finally {\n setIsLaunching(false)\n }\n }\n\n const select = (workflow: WorkflowDefinition) => {\n // Only an operation with nothing to ask (tier B) starts on the click. A prompt workflow or a\n // skill is run WITH a prompt, so it always opens the form, however few inputs it declares.\n if (workflow.run.kind === 'operation' && workflow.inputs.length === 0) {\n const inputs = defaultInputs(workflow)\n if (Object.keys(validateInputs(workflow, inputs)).length === 0) {\n Promise.resolve(onLaunch(buildLaunch(workflow, inputs, undefined))).catch(() => {})\n return\n }\n }\n setActiveId(workflow.id)\n }\n\n const tiles: StartTile[] = (tileWorkflows ?? workflows).map((workflow) => {\n const reason = disabledReason?.(workflow)\n return {\n id: workflow.id,\n iconNode: workflow.icon && renderIcon ? renderIcon(workflow.icon) : undefined,\n title: workflow.title,\n description: workflow.description,\n onSelect: () => select(workflow),\n disabled: reason !== undefined,\n disabledReason: reason,\n testId: tileTestId?.(workflow) ?? `workflow-tile-${workflow.id}`,\n }\n })\n\n return (\n <div className={className} data-slot=\"workflow-launcher\">\n {showTiles && (\n <StartTiles\n items={[...tiles, ...extraTiles]}\n caption={caption}\n captionTestId={captionTestId}\n testId={testId}\n />\n )}\n {children}\n {active && (\n <WorkflowConfigDialog\n {...dialog}\n renderIcon={renderIcon}\n workflow={active}\n open\n onOpenChange={(open) => !open && setActiveId(null)}\n onLaunch={run}\n isLaunching={isLaunching}\n initialInputs={initialInputsFor?.(active)}\n />\n )}\n </div>\n )\n}\n","import { getEntityColor } from '@arbidocs/react/ui'\nimport type { WorkflowScope } from './types'\nimport type { WorkflowScopeSource } from './WorkflowConfigDialog'\n\nexport interface WorkflowScopeDocument {\n external_id: string\n folder?: string | null\n doctags?: Array<{ tag_ext_id: string }>\n}\nexport interface WorkflowScopeLabel {\n external_id: string\n name: string\n color?: string\n}\n/** A workspace tag, as far as the scope picker reads it. */\nexport interface WorkflowScopeTag extends WorkflowScopeLabel {\n kind?: string | null\n doctag_count?: number | null\n facttag_count?: number | null\n}\n\n/**\n * The labels a scope picker offers: the workspace's document vocabulary, as the Files page's quick\n * filter has it. Saved searches are not labels; a tag used only on facts is not a file label; one\n * used nowhere yet is offered.\n */\nexport function documentScopeLabels<T extends WorkflowScopeTag>(tags: T[]): T[] {\n return tags.filter((tag) => {\n if (tag.kind === 'search') return false\n const onDocs = (tag.doctag_count ?? 0) > 0\n const onFacts = (tag.facttag_count ?? 0) > 0\n return onDocs || !onFacts\n })\n}\n\nconst canonical = (path?: string | null) =>\n (path ?? '')\n .split('/')\n .map((part) => part.trim())\n .filter(Boolean)\n .join('/')\n\n/** Match the same folder/label OR semantics as the document library; explicit file picks win. */\nexport function matchWorkflowScope<T extends WorkflowScopeDocument>(\n docs: T[],\n scope: WorkflowScope\n): T[] {\n if (scope.documents?.length) {\n const ids = new Set(scope.documents)\n return docs.filter((doc) => ids.has(doc.external_id))\n }\n if (!scope.folders.length && !scope.labels.length) return docs\n const folders = scope.folders.map(canonical)\n const labels = new Set(scope.labels)\n return docs.filter((doc) => {\n const folder = canonical(doc.folder)\n return (\n folders.some((path) =>\n path === '' ? folder === '' : folder === path || folder.startsWith(`${path}/`)\n ) || doc.doctags?.some((tag) => labels.has(tag.tag_ext_id))\n )\n })\n}\n\n/** Turn real workspace documents and labels into the shared workflow scope picker model. */\nexport function buildWorkflowScopeSource(\n docs: WorkflowScopeDocument[],\n labels: WorkflowScopeLabel[] = []\n): WorkflowScopeSource {\n const counts = new Map<string, number>()\n for (const doc of docs) {\n const parts = canonical(doc.folder).split('/').filter(Boolean)\n for (let i = 1; i <= parts.length; i++) {\n const path = parts.slice(0, i).join('/')\n counts.set(path, (counts.get(path) ?? 0) + 1)\n }\n }\n return {\n folders: [...counts]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([path, count]) => ({\n path,\n count,\n label: path.split('/').at(-1)!,\n depth: path.split('/').length - 1,\n })),\n unfiledCount: docs.filter((doc) => !canonical(doc.folder)).length,\n labels: labels.map((label) => ({\n id: label.external_id,\n name: label.name,\n color: label.color ?? getEntityColor(label.external_id, 'medium'),\n count: docs.filter((doc) => doc.doctags?.some((tag) => tag.tag_ext_id === label.external_id))\n .length,\n })),\n totalCount: docs.length,\n countMatching: (scope) => matchWorkflowScope(docs, scope).length,\n resolveDocuments: (scope) => matchWorkflowScope(docs, scope).map((doc) => doc.external_id),\n }\n}\n","import { useEffect, useMemo, useRef, useState, type DragEvent } from 'react'\nimport { FolderPlus, ImageIcon, X } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { DocumentPicker, type PickerDocument } from '../../settings/DocumentPicker'\nimport type { WorkflowField, WorkflowScope } from './types'\n\n/** A workspace file a `documents` field can pick. */\nexport interface WorkflowFieldDocument extends PickerDocument {\n /** Its processing status (`completed`, `processing`…); absent = ready. */\n status?: string | null\n /** An image (for an image-only field, and its thumbnail). */\n isImage?: boolean\n}\n\nexport interface WorkflowDocumentsFieldLabels {\n pickOne: string\n pickMany: string\n /** The heading of the one list of files (a run has no conversation). */\n allDocuments: string\n addFiles: string\n adding: string\n empty: string\n remove: (name: string) => string\n /** A chosen file that is not ready yet: where it is, and that it can still be picked. */\n pending: (name: string, status: string) => string\n status: Record<string, string>\n}\n\nexport const DEFAULT_WORKFLOW_DOCUMENTS_FIELD_LABELS: WorkflowDocumentsFieldLabels = {\n pickOne: 'Pick a file',\n pickMany: 'Pick files',\n allDocuments: 'All documents',\n addFiles: 'Add files',\n adding: 'Adding…',\n empty: 'No files in this workspace yet. Drop one here, or add it.',\n remove: (name) => `Remove ${name}`,\n pending: (name, status) => `${name}: ${status}. You can still pick it.`,\n status: {\n queued: 'Queued',\n uploading: 'Uploading',\n encrypting: 'Encrypting',\n processing: 'Processing',\n parsing: 'Processing',\n indexing: 'Indexing',\n analysing: 'Analysing',\n },\n}\n\nexport interface WorkflowDocumentsFieldProps {\n field: WorkflowField\n value: WorkflowScope\n onChange: (value: WorkflowScope) => void\n /** The workspace's files. */\n documents: WorkflowFieldDocument[]\n /** The list has arrived (until then an empty list is not \"no files yet\"). Default true. */\n loaded?: boolean\n /** A chosen image's thumbnail (`data:` or URL), for the gallery of a several-files field. */\n thumbnailOf?: (id: string) => string | null | undefined\n /**\n * Add files (dropped ones, or none: the host asks). Absent: no Add files and no drop. A file\n * that appears in `documents` after this is chosen at once, even while it processes.\n */\n onAddFiles?: (files?: File[]) => void\n /** Files are being added (the button waits). */\n adding?: boolean\n labels?: Partial<WorkflowDocumentsFieldLabels>\n}\n\nconst isReady = (status?: string | null) =>\n !status || ['completed', 'done', 'ready', 'success'].includes(status.toLowerCase())\n\nconst byTitle = (a: PickerDocument, b: PickerDocument) =>\n a.title.toLowerCase().localeCompare(b.title.toLowerCase())\n\n/**\n * A workflow `documents` field: an explicit pick of workspace files. One file is a combobox;\n * several (`max` > 1) show the chosen ones as removable tiles, with a thumbnail for images, so you\n * SEE what you are steering a run with. With `onAddFiles`, files can be added (or dropped) right\n * here, and an empty workspace says so instead of offering an empty list.\n */\nexport function WorkflowDocumentsField({\n field,\n value,\n onChange,\n documents,\n loaded = true,\n thumbnailOf,\n onAddFiles,\n adding,\n labels,\n}: WorkflowDocumentsFieldProps) {\n const l = { ...DEFAULT_WORKFLOW_DOCUMENTS_FIELD_LABELS, ...labels }\n const ids = value.documents ?? []\n const max = field.max ?? 1\n const multiple = max > 1\n const [isOver, setIsOver] = useState(false)\n const docOf = (id: string) => documents.find((d) => d.id === id)\n const nameOf = (id: string) => docOf(id)?.title || id\n const set = (next: string[]) => onChange({ ...value, documents: next })\n const toggle = (id: string) =>\n set(ids.includes(id) ? ids.filter((d) => d !== id) : [...ids, id].slice(-max))\n const offered = useMemo(\n () => (field.accept === 'image' ? documents.filter((d) => d.isImage) : documents),\n [documents, field.accept]\n )\n\n // A file added from here is chosen as soon as the workspace lists it, even while it processes.\n const awaitingAdd = useRef(false)\n const known = useRef<Set<string> | null>(null)\n const latest = useRef({ ids, set })\n latest.current = { ids, set }\n useEffect(() => {\n if (!loaded) return\n const current = new Set(documents.map((d) => d.id))\n const before = known.current\n known.current = current\n if (!before || !awaitingAdd.current) return\n const fresh = [...current].filter((id) => !before.has(id))\n if (fresh.length === 0) return\n awaitingAdd.current = false\n latest.current.set([...latest.current.ids, ...fresh].slice(-max))\n }, [documents, loaded, max])\n\n const addFiles = (files?: File[]) => {\n if (!onAddFiles) return\n awaitingAdd.current = true\n onAddFiles(files?.length ? files : undefined)\n }\n const dropProps = onAddFiles\n ? {\n onDragOver: (e: DragEvent) => {\n e.preventDefault()\n setIsOver(true)\n },\n onDragLeave: () => setIsOver(false),\n onDrop: (e: DragEvent) => {\n e.preventDefault()\n setIsOver(false)\n const files = Array.from(e.dataTransfer?.files ?? [])\n if (files.length) addFiles(files)\n },\n }\n : {}\n const dropClass = isOver ? 'ring-2 ring-primary' : ''\n const addButton = (className?: string, variant: 'outline' | 'default' = 'outline') =>\n onAddFiles && (\n <Button\n type=\"button\"\n size=\"sm\"\n variant={variant}\n className={className}\n disabled={adding}\n onClick={() => addFiles()}\n data-testid=\"workflow-add-files\"\n >\n {adding ? l.adding : l.addFiles}\n </Button>\n )\n\n // Nothing in the workspace yet: say so, and offer the upload (or a drop) right here.\n if (loaded && documents.length === 0) {\n return (\n <div\n className={cn(\n 'flex flex-col items-center gap-2 rounded-lg border border-dashed border-border bg-muted/40 px-4 py-6 text-center',\n dropClass\n )}\n data-testid=\"workflow-documents-empty\"\n {...dropProps}\n >\n <FolderPlus className=\"size-5 text-muted-foreground\" aria-hidden />\n <p className=\"text-sm text-muted-foreground\">{l.empty}</p>\n {addButton(undefined, 'default')}\n </div>\n )\n }\n\n const pending = ids.flatMap((id) => {\n const status = docOf(id)?.status\n return isReady(status)\n ? []\n : [{ id, label: l.status[String(status).toLowerCase()] ?? String(status) }]\n })\n const selected = multiple ? undefined : docOf(ids[0] ?? '')\n\n return (\n <div\n className={cn('flex flex-col gap-3 rounded-lg', dropClass)}\n data-testid={`workflow-documents-${field.name}`}\n {...dropProps}\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"min-w-0 flex-1\">\n <DocumentPicker\n // A run has no conversation: one list of every file.\n groups={[{ id: 'all', heading: l.allDocuments, docs: [...offered].sort(byTitle) }]}\n value={multiple ? '' : (ids[0] ?? '')}\n onValueChange={(id) => (multiple ? toggle(id) : set([id]))}\n selected={selected}\n selectedIds={multiple ? ids : undefined}\n labels={{ placeholder: field.placeholder ?? (multiple ? l.pickMany : l.pickOne) }}\n />\n </div>\n {addButton('shrink-0 pointer-coarse:h-11')}\n </div>\n {pending.map((p) => (\n <p\n key={p.id}\n className=\"text-xs text-muted-foreground\"\n data-testid={`workflow-document-status-${p.id}`}\n >\n {l.pending(nameOf(p.id), p.label)}\n </p>\n ))}\n {multiple && ids.length > 0 && (\n <div\n className=\"grid grid-cols-2 gap-3 sm:grid-cols-3\"\n data-testid=\"workflow-documents-gallery\"\n >\n {ids.map((id) => {\n const thumbnail = thumbnailOf?.(id)\n return (\n <figure\n key={id}\n className=\"relative overflow-hidden rounded-lg border border-border bg-muted/40\"\n data-testid={`workflow-document-${id}`}\n >\n {thumbnail ? (\n <img\n src={thumbnail}\n alt={nameOf(id)}\n className=\"aspect-square w-full object-cover\"\n />\n ) : (\n <div className=\"flex aspect-square w-full items-center justify-center text-muted-foreground/50\">\n <ImageIcon className=\"size-8\" />\n </div>\n )}\n <figcaption className=\"truncate bg-background/90 px-2 py-1 text-xs text-muted-foreground\">\n {nameOf(id)}\n </figcaption>\n <button\n type=\"button\"\n onClick={() => toggle(id)}\n aria-label={l.remove(nameOf(id))}\n className=\"absolute right-1 top-1 flex size-6 items-center justify-center rounded-full bg-background/80 text-muted-foreground hover:text-foreground pointer-coarse:size-11\"\n data-testid={`workflow-document-remove-${id}`}\n >\n <X className=\"size-3.5\" />\n </button>\n </figure>\n )\n })}\n </div>\n )}\n </div>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/agents/workflows/SchemaForm.tsx","../src/agents/workflows/AgentSelect.tsx","../src/agents/workflows/WorkflowConfigDialog.tsx","../src/agents/workflows/WorkflowLauncher.tsx","../src/agents/workflows/workspaceScope.ts","../src/agents/workflows/WorkflowDocumentsField.tsx"],"names":["jsx","Input","Textarea","Switch","prefixedTestId","jsxs","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","isWorkflowScope","cn","TONE_SURFACE","TONE_SOLID_BORDER","TONE_BORDER","Check","TONE_DOT","Label","Fragment","useState","testIdOr","FoldSection","useId","useControllableState","defaultInputs","useMemo","useEffect","validateInputs","buildLaunch","useRef","ScopePicker","Dialog","DialogContent","QuickActionDialogHeader","AddFilesFirst","Button","Loader2","Play","StartTiles","getEntityColor","FolderPlus","DocumentPicker","ImageIcon","X"],"mappings":"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","file":"chunk-MZ2KZXNU.cjs","sourcesContent":["import { useState, type ReactNode } from 'react'\nimport { Check } from 'lucide-react'\nimport {\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Switch,\n Textarea,\n cn,\n} from '@arbidocs/react/ui'\nimport { prefixedTestId, testIdOr } from '../../chat/test-id'\nimport { TONE_BORDER, TONE_DOT, TONE_SOLID_BORDER, TONE_SURFACE } from '../../components/tones'\nimport { FoldSection } from '../../home/FoldSection'\nimport { isWorkflowScope } from './workflow'\nimport type {\n WorkflowErrors,\n WorkflowField,\n WorkflowFieldError,\n WorkflowFieldOption,\n WorkflowInputs,\n WorkflowInputValue,\n WorkflowScope,\n} from './types'\n\nexport interface SchemaFormLabels {\n /** Appended to the label of an optional field. */\n optional: string\n /** Heading of the folded block that holds `advanced` fields. */\n advanced: string\n errors: Record<WorkflowFieldError, string>\n}\n\nexport const DEFAULT_SCHEMA_FORM_LABELS: SchemaFormLabels = {\n optional: '(optional)',\n advanced: 'More options',\n errors: {\n required: 'This is needed to continue',\n min: 'Too small',\n max: 'Too large',\n number: 'Enter a number',\n },\n}\n\nexport interface SchemaFormProps {\n fields: WorkflowField[]\n values: WorkflowInputs\n onChange: (name: string, value: WorkflowInputValue) => void\n /** Per-field problems to show (the dialog passes them once a launch was attempted). */\n errors?: WorkflowErrors\n /** Renders a `scope` field: the host owns the file data behind the picker. */\n renderScope?: (\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode\n /** Renders a `documents` field (an explicit file pick): the host owns the file list. */\n renderDocuments?: (\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode\n /** Maps an option's `icon` key to a mark. */\n renderIcon?: (key: string) => ReactNode\n /** Who a `person` field offers (the workspace's members); without them it takes an id. */\n people?: ReadonlyArray<{ value: string; label: string }>\n /**\n * Plain Enter in a multi-line field submits the form (Shift+Enter inserts the newline), the\n * chat's own convention. Single-line fields submit natively.\n */\n onEnterSubmit?: () => void\n /** Prefix of field ids: `<prefix>-<field name>`; default `workflow-field`. */\n testIdPrefix?: string\n labels?: Partial<SchemaFormLabels>\n className?: string\n}\n\n/** Selects with at most this many options render as tiles; more fall back to a dropdown. */\nconst TILE_MAX = 4\n\ninterface FieldProps {\n field: WorkflowField\n value: WorkflowInputValue | undefined\n error?: WorkflowFieldError\n onChange: (value: WorkflowInputValue) => void\n l: SchemaFormLabels\n idFor: (suffix?: string) => string\n renderScope: SchemaFormProps['renderScope']\n renderDocuments: SchemaFormProps['renderDocuments']\n renderIcon: SchemaFormProps['renderIcon']\n onEnterSubmit: SchemaFormProps['onEnterSubmit']\n people?: SchemaFormProps['people']\n}\n\nfunction FieldControl({\n field,\n value,\n error,\n onChange,\n l,\n idFor,\n renderScope,\n renderDocuments,\n renderIcon,\n onEnterSubmit,\n people,\n}: FieldProps) {\n const id = `${idFor()}-control`\n const testId = idFor()\n switch (field.type) {\n case 'text':\n return (\n <Input\n id={id}\n data-testid={testId}\n value={String(value ?? '')}\n placeholder={field.placeholder}\n aria-required={field.required || undefined}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? idFor('error') : undefined}\n onChange={(e) => onChange(e.target.value)}\n />\n )\n case 'longtext':\n return (\n <Textarea\n id={id}\n data-testid={testId}\n value={String(value ?? '')}\n placeholder={field.placeholder}\n aria-required={field.required || undefined}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? idFor('error') : undefined}\n className=\"min-h-[96px]\"\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={(e) => {\n if (onEnterSubmit && e.key === 'Enter' && !e.shiftKey && !e.nativeEvent.isComposing) {\n e.preventDefault()\n onEnterSubmit()\n }\n }}\n />\n )\n case 'number':\n return (\n <Input\n id={id}\n data-testid={testId}\n type=\"number\"\n inputMode=\"decimal\"\n min={field.min}\n max={field.max}\n value={value === undefined ? '' : String(value)}\n placeholder={field.placeholder}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? idFor('error') : undefined}\n onChange={(e) => onChange(e.target.value === '' ? '' : Number(e.target.value))}\n />\n )\n case 'date':\n return (\n <Input\n id={id}\n data-testid={testId}\n type=\"date\"\n value={String(value ?? '')}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? idFor('error') : undefined}\n onChange={(e) => onChange(e.target.value)}\n />\n )\n case 'boolean':\n return (\n <Switch\n id={id}\n data-testid={testId}\n checked={Boolean(value)}\n onCheckedChange={(checked) => onChange(checked)}\n />\n )\n case 'select': {\n const options = field.options ?? []\n if (options.length > 0 && options.length <= TILE_MAX) {\n // Short choices (no icon or description) are buttons, not cards.\n const compact = options.every((o) => !o.icon && !o.description)\n return (\n <div\n role=\"radiogroup\"\n aria-label={field.label}\n // Each tile is as wide as its label and wraps onto a new line when the row is full\n // (a narrow side panel); one wider than the whole row wraps its own text instead.\n className=\"flex flex-wrap gap-2\"\n data-testid={testId}\n >\n {options.map((option) => (\n <ChoiceTile\n key={option.value}\n option={option}\n selected={value === option.value}\n compact={compact}\n renderIcon={renderIcon}\n testId={prefixedTestId(testId, option.value, {\n testId: `workflow-field-${field.name}-${option.value}`,\n })}\n onSelect={() => onChange(option.value)}\n />\n ))}\n </div>\n )\n }\n return (\n <Select value={String(value ?? '')} onValueChange={(v) => onChange(v)}>\n <SelectTrigger id={id} data-testid={testId} className=\"pointer-coarse:min-h-11\">\n <SelectValue placeholder={field.placeholder} />\n </SelectTrigger>\n <SelectContent>\n {options.map((o) => (\n <SelectItem key={o.value} value={o.value}>\n {o.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n }\n case 'scope': {\n const scope = isWorkflowScope(value) ? value : { folders: [], labels: [] }\n return <div data-testid={testId}>{renderScope?.(field, scope, onChange)}</div>\n }\n case 'documents': {\n const picked = isWorkflowScope(value) ? value : { folders: [], labels: [], documents: [] }\n return <div data-testid={testId}>{renderDocuments?.(field, picked, onChange)}</div>\n }\n case 'person':\n return people?.length ? (\n <select\n id={id}\n data-testid={testId}\n value={String(value ?? '')}\n aria-required={field.required || undefined}\n aria-invalid={error ? true : undefined}\n onChange={(e) => onChange(e.target.value)}\n className=\"flex h-9 w-full rounded-md border border-input bg-background px-2 text-sm shadow-sm\"\n >\n <option value=\"\">{field.placeholder ?? ''}</option>\n {people.map((p) => (\n <option key={p.value} value={p.value}>\n {p.label}\n </option>\n ))}\n </select>\n ) : (\n <Input\n id={id}\n data-testid={testId}\n value={String(value ?? '')}\n placeholder={field.placeholder ?? 'usr-…'}\n aria-required={field.required || undefined}\n aria-invalid={error ? true : undefined}\n onChange={(e) => onChange(e.target.value)}\n />\n )\n }\n}\n\n/**\n * One choice of a tiled select. A toned option shows its tone chosen or not: a dot and a tinted\n * border at rest, the tone's surface once chosen. The label and a check mark carry the state too,\n * so it never rests on colour alone.\n */\nfunction ChoiceTile({\n option,\n selected,\n compact,\n renderIcon,\n testId,\n onSelect,\n}: {\n option: WorkflowFieldOption\n selected: boolean\n compact: boolean\n renderIcon: SchemaFormProps['renderIcon']\n testId: string\n onSelect: () => void\n}) {\n const tone = option.tone\n return (\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n data-testid={testId}\n data-tone={tone}\n onClick={onSelect}\n className={cn(\n // Sized to its label (flex-basis auto), growing to share the row, never wider than it.\n 'flex max-w-full min-w-[min(4rem,100%)] flex-auto flex-col items-center justify-center gap-1.5 rounded-lg border text-center transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n compact\n ? 'min-h-9 px-3 py-1.5 pointer-coarse:min-h-11'\n : 'min-h-24 p-3 pointer-coarse:min-h-28',\n tone\n ? selected\n ? cn(TONE_SURFACE[tone], TONE_SOLID_BORDER[tone])\n : cn(TONE_BORDER[tone], 'bg-card [&:hover]:bg-muted')\n : selected\n ? 'border-primary bg-primary/10'\n : 'border-border bg-card [&:hover]:border-primary [&:hover]:bg-muted'\n )}\n >\n {option.icon && renderIcon && (\n <span className=\"text-muted-foreground\">{renderIcon(option.icon)}</span>\n )}\n <span\n className={cn(\n 'flex max-w-full items-center gap-1.5 text-sm font-medium',\n tone && selected ? undefined : 'text-foreground'\n )}\n >\n {selected ? (\n <Check className=\"size-3.5 shrink-0\" aria-hidden />\n ) : (\n tone && (\n <span aria-hidden className={cn('size-2 shrink-0 rounded-full', TONE_DOT[tone])} />\n )\n )}\n <span className=\"min-w-0 break-words\">{option.label}</span>\n </span>\n {option.description && (\n <span className=\"max-w-full text-xs break-words text-muted-foreground\">\n {option.description}\n </span>\n )}\n </button>\n )\n}\n\nfunction FormField(props: FieldProps) {\n const { field, error, l, idFor } = props\n const isBoolean = field.type === 'boolean'\n const showOptional = !field.required && field.type !== 'boolean' && field.type !== 'scope'\n const label = (\n <Label\n htmlFor={`${idFor()}-control`}\n className={isBoolean ? 'cursor-pointer font-normal' : undefined}\n >\n {field.label}\n {showOptional && (\n <>\n {' '}\n <span className=\"font-normal text-muted-foreground\">{l.optional}</span>\n </>\n )}\n </Label>\n )\n return (\n <div className=\"flex flex-col gap-1.5\" data-slot=\"schema-field\" data-field={field.name}>\n {isBoolean ? (\n <div className=\"flex items-center gap-2.5 pointer-coarse:min-h-11\">\n <FieldControl {...props} />\n {label}\n </div>\n ) : (\n <>\n {field.type !== 'scope' && label}\n <FieldControl {...props} />\n </>\n )}\n {field.description && <p className=\"text-xs text-muted-foreground\">{field.description}</p>}\n {error && (\n <p\n id={idFor('error')}\n role=\"alert\"\n className=\"text-xs text-destructive\"\n data-testid={idFor('error')}\n >\n {l.errors[error]}\n </p>\n )}\n </div>\n )\n}\n\n/**\n * Renders a workflow's declared inputs as a form. Controlled: the caller owns `values` (see\n * `defaultInputs`) and decides when to validate (`validateInputs`) and show `errors`.\n */\nexport function SchemaForm({\n fields,\n values,\n onChange,\n errors,\n renderScope,\n renderDocuments,\n renderIcon,\n onEnterSubmit,\n people,\n testIdPrefix,\n labels,\n className,\n}: SchemaFormProps) {\n const l: SchemaFormLabels = {\n ...DEFAULT_SCHEMA_FORM_LABELS,\n ...labels,\n errors: { ...DEFAULT_SCHEMA_FORM_LABELS.errors, ...labels?.errors },\n }\n const [advancedOpen, setAdvancedOpen] = useState(false)\n const common = fields.filter((f) => !f.advanced)\n const advanced = fields.filter((f) => f.advanced)\n\n const render = (field: WorkflowField) => (\n <FormField\n key={field.name}\n field={field}\n value={values[field.name]}\n error={errors?.[field.name]}\n onChange={(v) => onChange(field.name, v)}\n l={l}\n idFor={(suffix) =>\n suffix\n ? `${testIdOr(testIdPrefix, { testId: 'workflow-field' })}-${field.name}-${suffix}`\n : `${testIdOr(testIdPrefix, { testId: 'workflow-field' })}-${field.name}`\n }\n renderScope={renderScope}\n renderDocuments={renderDocuments}\n renderIcon={renderIcon}\n onEnterSubmit={onEnterSubmit}\n people={people}\n />\n )\n\n return (\n <div className={cn('flex flex-col gap-4', className)} data-slot=\"schema-form\">\n {common.map(render)}\n {advanced.length > 0 && (\n <FoldSection\n label={l.advanced}\n open={advancedOpen}\n onOpenChange={setAdvancedOpen}\n testId={`${testIdOr(testIdPrefix, { testId: 'workflow-field' })}-advanced-toggle`}\n >\n <div className=\"flex flex-col gap-4\">{advanced.map(render)}</div>\n </FoldSection>\n )}\n </div>\n )\n}\n","import { useId, type ReactNode } from 'react'\nimport {\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr, prefixedTestId } from '../../chat/test-id'\nimport { useControllableState } from '../../lib/useControllableState'\n\nexport interface AgentOption {\n id: string\n label: string\n /** Small line under the label in the list (e.g. what the agent is for). */\n description?: string\n /** Avatar or mark shown before the name. */\n avatar?: ReactNode\n}\n\nexport interface AgentSelectLabels {\n /** The field label. */\n label: string\n /** The entry that means \"no specific agent\": the user's own assistant. */\n myAssistant: string\n}\n\nexport const DEFAULT_AGENT_SELECT_LABELS: AgentSelectLabels = {\n label: 'Run as',\n myAssistant: 'My assistant',\n}\n\nexport interface AgentSelectProps {\n agents: AgentOption[]\n /** Controlled agent id; `''` = my assistant. Omit to let the select hold its own state. */\n value?: string\n defaultValue?: string\n onValueChange?: (agentId: string) => void\n /** Hide the visible label (still the accessible name). */\n hideLabel?: boolean\n disabled?: boolean\n className?: string\n labels?: Partial<AgentSelectLabels>\n testId?: string\n /** Prefix of option ids (`<prefix>-<agent id>`); default `agent-select-option`. */\n optionTestId?: string\n}\n\nconst ME = '__me__'\n\n/** Pick which agent runs something: the user's own assistant (default) or one of their agents. */\nexport function AgentSelect({\n agents,\n value,\n defaultValue = '',\n onValueChange,\n hideLabel,\n disabled,\n className,\n labels,\n testId,\n optionTestId,\n}: AgentSelectProps) {\n const l = { ...DEFAULT_AGENT_SELECT_LABELS, ...labels }\n const triggerId = useId()\n const [current, setCurrent] = useControllableState(value, defaultValue, onValueChange)\n return (\n <div className={cn('flex flex-col gap-1.5', className)} data-slot=\"agent-select\">\n <Label htmlFor={triggerId} className={hideLabel ? 'sr-only' : undefined}>\n {l.label}\n </Label>\n <Select\n value={current === '' ? ME : current}\n onValueChange={(v) => setCurrent(v === ME ? '' : v)}\n disabled={disabled}\n >\n <SelectTrigger\n id={triggerId}\n data-testid={testIdOr(testId, { testId: 'agent-select' })}\n className=\"pointer-coarse:min-h-11\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem\n value={ME}\n data-testid={prefixedTestId(optionTestId, 'me', {\n testId: 'agent-select-option-me',\n })}\n >\n {l.myAssistant}\n </SelectItem>\n {agents.map((agent) => (\n <SelectItem\n key={agent.id}\n value={agent.id}\n data-testid={prefixedTestId(optionTestId, agent.id, {\n testId: `agent-select-option-${agent.id}`,\n })}\n >\n <span className=\"flex items-center gap-2\">\n {agent.avatar}\n <span>{agent.label}</span>\n {agent.description && (\n <span className=\"text-xs text-muted-foreground\">{agent.description}</span>\n )}\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )\n}\n","import { useEffect, useMemo, useRef, useState, type FormEvent, type ReactNode } from 'react'\nimport { Loader2, Play } from 'lucide-react'\nimport { Button, Dialog, DialogContent } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { AddFilesFirst } from '../../home/AddFilesFirst'\nimport { QuickActionDialogHeader } from '../../home/QuickActionDialogHeader'\nimport { ScopePicker, type ScopeFolder, type ScopeLabel } from '../../home/ScopePicker'\nimport { useControllableState } from '../../lib/useControllableState'\nimport { AgentSelect, type AgentOption, type AgentSelectLabels } from './AgentSelect'\nimport { SchemaForm, type SchemaFormLabels } from './SchemaForm'\nimport type {\n OnWorkflowLaunch,\n WorkflowDefinition,\n WorkflowField,\n WorkflowInputs,\n WorkflowInputValue,\n WorkflowScope,\n} from './types'\nimport { buildLaunch, defaultInputs, validateInputs } from './workflow'\n\n/** The workspace's files, as the scope picker needs them. Matching stays with the host. */\nexport interface WorkflowScopeSource {\n folders: ScopeFolder[]\n unfiledCount: number\n labels: ScopeLabel[]\n totalCount: number\n /** How many files a scope selects. */\n countMatching: (scope: WorkflowScope) => number\n /**\n * The ids of the files a scope selects. A run is bound to explicit file ids, so a folder/label pick is\n * resolved here, on the client, before anything is sent.\n */\n resolveDocuments?: (scope: WorkflowScope) => string[]\n}\n\nexport interface WorkflowConfigDialogLabels {\n /** Primary button when the workflow gives no label of its own. */\n start: string\n starting: string\n /** Shown instead of the form when `requiresFiles` and the workspace has none. */\n addFilesReason: string\n agentLabel: string\n}\n\nexport const DEFAULT_WORKFLOW_CONFIG_DIALOG_LABELS: WorkflowConfigDialogLabels = {\n start: 'Start',\n starting: 'Starting…',\n addFilesReason: 'This reads your files, and there is nothing to read yet.',\n agentLabel: 'Run as',\n}\n\nexport interface WorkflowConfigDialogProps {\n workflow: WorkflowDefinition\n open: boolean\n onOpenChange: (open: boolean) => void\n onLaunch: OnWorkflowLaunch\n /** Values the form opens with, over each field's default (e.g. text typed after a slash). */\n initialInputs?: Partial<WorkflowInputs>\n /** Controlled inputs; omit to let the dialog hold them. */\n inputs?: WorkflowInputs\n onInputsChange?: (inputs: WorkflowInputs) => void\n /** Files behind `scope` fields. Without it a scope field renders nothing. */\n scopeSource?: WorkflowScopeSource\n /** Renders a `documents` field: the host owns the file list behind the pick. */\n renderDocuments?: (\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode\n renderIcon?: (key: string) => ReactNode\n /** The host's own \"Add\" control, shown when the workflow needs files and there are none. */\n addFilesAction?: ReactNode\n /** Agents the user can hand the work to. Empty/omitted hides the \"Run as\" row. */\n agents?: AgentOption[]\n agentId?: string\n onAgentChange?: (agentId: string) => void\n isLaunching?: boolean\n /** Primary button text from the current inputs and matched file count. */\n submitLabel?: (ctx: {\n workflow: WorkflowDefinition\n inputs: WorkflowInputs\n matchedCount: number | null\n }) => string | undefined\n /** Per-field placeholder derived from the inputs (e.g. a name taken from a description). */\n fieldPlaceholder?: (\n field: WorkflowField,\n inputs: WorkflowInputs,\n workflow: WorkflowDefinition\n ) => string | undefined\n /** Anything the host wants to say about the current inputs, above the footer. */\n renderNotice?: (ctx: { workflow: WorkflowDefinition; inputs: WorkflowInputs }) => ReactNode\n labels?: Partial<WorkflowConfigDialogLabels>\n formLabels?: Partial<SchemaFormLabels>\n agentLabels?: Partial<AgentSelectLabels>\n /** Dialog id; fields use `<testId>-field-<name>`. Default `workflow-dialog`. */\n testId?: string\n startTestId?: string\n className?: string\n}\n\n/**\n * One dialog for every workflow: the form comes from the workflow's declared inputs, scope fields\n * use the shared folder/label picker, and the footer says who runs it. Launching hands\n * `{workflow, inputs, scope, agentId}` to `onLaunch`; the host does the rest.\n */\nexport function WorkflowConfigDialog({\n workflow,\n open,\n onOpenChange,\n onLaunch,\n initialInputs,\n inputs: inputsProp,\n onInputsChange,\n scopeSource,\n renderDocuments,\n renderIcon,\n addFilesAction,\n agents,\n agentId: agentIdProp,\n onAgentChange,\n isLaunching,\n submitLabel,\n fieldPlaceholder,\n renderNotice,\n labels,\n formLabels,\n agentLabels,\n testId,\n startTestId,\n className,\n}: WorkflowConfigDialogProps) {\n const l = { ...DEFAULT_WORKFLOW_CONFIG_DIALOG_LABELS, ...labels }\n // Keyed by content: a host passing a fresh `initialInputs` object each render must not reset the form.\n const initialKey = JSON.stringify(initialInputs ?? {})\n const seedKey = JSON.stringify({ ...defaultInputs(workflow), ...JSON.parse(initialKey) })\n const seed = useMemo(() => JSON.parse(seedKey) as WorkflowInputs, [seedKey])\n const [inputs, setInputs] = useControllableState<WorkflowInputs>(inputsProp, seed, onInputsChange)\n const [agentId, setAgentId] = useControllableState<string>(\n agentIdProp,\n workflow.defaultAgentId ?? '',\n onAgentChange\n )\n\n // A fresh open starts from the seed again (uncontrolled only).\n useEffect(() => {\n if (open && inputsProp === undefined) setInputs(seed)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, seed])\n\n const setField = (name: string, value: WorkflowInputValue) =>\n setInputs({ ...inputs, [name]: value })\n\n const errors = validateInputs(workflow, inputs)\n const valid = Object.keys(errors).length === 0\n // Required-ness is conveyed by the disabled button; range problems are shown as they happen.\n const visibleErrors = Object.fromEntries(\n Object.entries(errors).filter(([, e]) => e !== 'required')\n )\n\n const scopeField = workflow.inputs.find((f) => f.type === 'scope')\n const rawScope = scopeField ? inputs[scopeField.name] : undefined\n const scopeValue: WorkflowScope =\n rawScope && typeof rawScope === 'object' ? rawScope : { folders: [], labels: [] }\n const matchedCount = scopeSource && scopeField ? scopeSource.countMatching(scopeValue) : null\n const noFiles = Boolean(workflow.requiresFiles && scopeSource && scopeSource.totalCount === 0)\n const blockedByScope =\n matchedCount !== null && matchedCount === 0 && Boolean(workflow.requiresFiles)\n\n const showAgent =\n workflow.run.kind === 'prompt' &&\n workflow.options?.agent !== false &&\n agents !== undefined &&\n agents.length > 0\n\n const launch = (values: WorkflowInputs) => {\n // A failed launch leaves the dialog open so nothing typed is lost; the host reports why.\n Promise.resolve(onLaunch(buildLaunch(workflow, values, agentId))).catch(() => {})\n }\n\n const submit = () => {\n if (!valid || noFiles || blockedByScope || isLaunching) return\n launch(inputs)\n }\n\n const fields = useMemo(\n () =>\n workflow.inputs.map((f) => {\n const placeholder = fieldPlaceholder?.(f, inputs, workflow)\n return placeholder === undefined ? f : { ...f, placeholder }\n }),\n [workflow, fieldPlaceholder, inputs]\n )\n\n const id = testIdOr(testId, { testId: 'workflow-dialog' })\n const formRef = useRef<HTMLFormElement>(null)\n // A form that opens on a text field (the prompt) puts the cursor there, so typing starts at\n // once; a form that opens on a file pick keeps the dialog's own first focus.\n const firstField = workflow.inputs.find((f) => !f.advanced)\n const focusPromptFirst = firstField?.type === 'text' || firstField?.type === 'longtext'\n const defaultScopeRender = scopeSource\n ? (_field: WorkflowField, value: WorkflowScope, onChange: (s: WorkflowScope) => void) => (\n <ScopePicker\n folders={scopeSource.folders}\n unfiledCount={scopeSource.unfiledCount}\n labels={scopeSource.labels}\n totalCount={scopeSource.totalCount}\n matchedCount={scopeSource.countMatching(value)}\n scope={value}\n onScopeChange={onChange}\n />\n )\n : undefined\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"sheet\"\n className={`max-h-[calc(100dvh-2rem)] overflow-y-auto sm:max-w-xl ${className ?? ''}`}\n data-testid={id}\n data-workflow={workflow.id}\n onOpenAutoFocus={(event) => {\n if (!focusPromptFirst || !firstField) return\n const control = formRef.current?.querySelector<HTMLElement>(\n `[data-testid=\"${id}-field-${firstField.name}\"]`\n )\n if (!control) return\n event.preventDefault()\n control.focus()\n if (control instanceof HTMLInputElement || control instanceof HTMLTextAreaElement) {\n const end = control.value.length\n control.setSelectionRange(end, end)\n }\n }}\n >\n <QuickActionDialogHeader\n icon={workflow.icon && renderIcon ? renderIcon(workflow.icon) : null}\n title={workflow.title}\n description={workflow.details ?? workflow.description}\n descriptionTestId={`${id}-description`}\n />\n <form\n ref={formRef}\n className=\"mt-2 flex flex-col gap-4\"\n onSubmit={(event: FormEvent) => {\n event.preventDefault()\n submit()\n }}\n >\n {noFiles ? (\n <AddFilesFirst\n reason={l.addFilesReason}\n action={addFilesAction}\n testId={`${id}-empty-state`}\n />\n ) : (\n <>\n <SchemaForm\n fields={fields}\n values={inputs}\n onChange={setField}\n errors={visibleErrors}\n renderScope={defaultScopeRender}\n renderDocuments={renderDocuments}\n renderIcon={renderIcon}\n labels={formLabels}\n onEnterSubmit={submit}\n testIdPrefix={`${id}-field`}\n />\n {renderNotice?.({ workflow, inputs })}\n <div\n className=\"flex flex-col gap-3 border-t border-border pt-3 sm:flex-row sm:items-end sm:justify-between\"\n data-slot=\"workflow-footer\"\n >\n {showAgent ? (\n <AgentSelect\n agents={agents ?? []}\n value={agentId}\n onValueChange={setAgentId}\n labels={{ label: l.agentLabel, ...agentLabels }}\n testId={`${id}-agent`}\n className=\"sm:w-56\"\n />\n ) : (\n <span />\n )}\n <Button\n type=\"submit\"\n className=\"gap-1.5 px-5 pointer-coarse:min-h-11\"\n disabled={!valid || blockedByScope || isLaunching}\n data-testid={testIdOr(startTestId, { testId: 'workflow-start-button' })}\n >\n {isLaunching ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Play className=\"size-4\" />\n )}\n {isLaunching\n ? l.starting\n : (submitLabel?.({ workflow, inputs, matchedCount }) ??\n workflow.startLabel ??\n l.start)}\n </Button>\n </div>\n </>\n )}\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","import { useState, type ReactNode } from 'react'\nimport { StartTiles, type StartTile } from '../../home/StartTiles'\nimport { useControllableState } from '../../lib/useControllableState'\nimport { WorkflowConfigDialog, type WorkflowConfigDialogProps } from './WorkflowConfigDialog'\nimport type { OnWorkflowLaunch, WorkflowDefinition, WorkflowInputs } from './types'\nimport { buildLaunch, defaultInputs, validateInputs } from './workflow'\n\nexport interface WorkflowLauncherProps extends Omit<\n WorkflowConfigDialogProps,\n 'workflow' | 'open' | 'onOpenChange' | 'onLaunch' | 'isLaunching' | 'initialInputs'\n> {\n workflows: WorkflowDefinition[]\n /** Which of `workflows` get a tile (a filtered or capped view); default all. */\n tileWorkflows?: WorkflowDefinition[]\n /** The host performs the launch (open a chat, scope files, send, land). */\n onLaunch: OnWorkflowLaunch\n /** Render the tile band. Off when something else (the slash menu) opens the dialog. */\n showTiles?: boolean\n caption?: string\n captionTestId?: string\n /** Tile ids: `<prefix>-<workflow id>` unless `tileTestId` returns one. */\n tileTestId?: (workflow: WorkflowDefinition) => string | undefined\n /** A reason the workflow cannot run now (greys its tile out). */\n disabledReason?: (workflow: WorkflowDefinition) => string | undefined\n /** Controlled open workflow (by id); `null` = none. Omit for uncontrolled. */\n activeId?: string | null\n onActiveIdChange?: (id: string | null) => void\n /** Inputs to seed the dialog with when `activeId` opens (slash-typed text etc.). */\n initialInputsFor?: (workflow: WorkflowDefinition) => Partial<WorkflowInputs> | undefined\n /** Extra content inside the tile band's section, after the tiles. */\n /** Plain tiles appended to the band (tier A actions that are not workflows). */\n extraTiles?: StartTile[]\n /** Test id of the tile band. */\n testId?: string\n className?: string\n children?: ReactNode\n}\n\n/**\n * The one place a workflow is launched from: a band of tiles plus the config dialog. Choosing a\n * workflow opens the dialog, which asks what it declares; only an operation with no inputs\n * launches on the click.\n * Also usable headless (`showTiles={false}`) when another surface picks the workflow.\n */\nexport function WorkflowLauncher({\n workflows,\n tileWorkflows,\n onLaunch,\n showTiles = true,\n caption,\n captionTestId,\n tileTestId,\n disabledReason,\n activeId: activeIdProp,\n onActiveIdChange,\n initialInputsFor,\n testId,\n extraTiles = [],\n className,\n children,\n renderIcon,\n ...dialog\n}: WorkflowLauncherProps) {\n const [activeId, setActiveId] = useControllableState<string | null>(\n activeIdProp,\n null,\n onActiveIdChange\n )\n const [isLaunching, setIsLaunching] = useState(false)\n const active = workflows.find((w) => w.id === activeId) ?? null\n\n const run: OnWorkflowLaunch = async (launch) => {\n setIsLaunching(true)\n try {\n await onLaunch(launch)\n setActiveId(null)\n } finally {\n setIsLaunching(false)\n }\n }\n\n const select = (workflow: WorkflowDefinition) => {\n // Only an operation with nothing to ask (tier B) starts on the click. A prompt workflow or a\n // skill is run WITH a prompt, so it always opens the form, however few inputs it declares.\n if (workflow.run.kind === 'operation' && workflow.inputs.length === 0) {\n const inputs = defaultInputs(workflow)\n if (Object.keys(validateInputs(workflow, inputs)).length === 0) {\n Promise.resolve(onLaunch(buildLaunch(workflow, inputs, undefined))).catch(() => {})\n return\n }\n }\n setActiveId(workflow.id)\n }\n\n const tiles: StartTile[] = (tileWorkflows ?? workflows).map((workflow) => {\n const reason = disabledReason?.(workflow)\n return {\n id: workflow.id,\n iconNode: workflow.icon && renderIcon ? renderIcon(workflow.icon) : undefined,\n title: workflow.title,\n description: workflow.description,\n onSelect: () => select(workflow),\n disabled: reason !== undefined,\n disabledReason: reason,\n testId: tileTestId?.(workflow) ?? `workflow-tile-${workflow.id}`,\n }\n })\n\n return (\n <div className={className} data-slot=\"workflow-launcher\">\n {showTiles && (\n <StartTiles\n items={[...tiles, ...extraTiles]}\n caption={caption}\n captionTestId={captionTestId}\n testId={testId}\n />\n )}\n {children}\n {active && (\n <WorkflowConfigDialog\n {...dialog}\n renderIcon={renderIcon}\n workflow={active}\n open\n onOpenChange={(open) => !open && setActiveId(null)}\n onLaunch={run}\n isLaunching={isLaunching}\n initialInputs={initialInputsFor?.(active)}\n />\n )}\n </div>\n )\n}\n","import { getEntityColor } from '@arbidocs/react/ui'\nimport type { WorkflowScope } from './types'\nimport type { WorkflowScopeSource } from './WorkflowConfigDialog'\n\nexport interface WorkflowScopeDocument {\n external_id: string\n folder?: string | null\n doctags?: Array<{ tag_ext_id: string }>\n}\nexport interface WorkflowScopeLabel {\n external_id: string\n name: string\n color?: string\n}\n/** A workspace tag, as far as the scope picker reads it. */\nexport interface WorkflowScopeTag extends WorkflowScopeLabel {\n kind?: string | null\n doctag_count?: number | null\n facttag_count?: number | null\n}\n\n/**\n * The labels a scope picker offers: the workspace's document vocabulary, as the Files page's quick\n * filter has it. Saved searches are not labels; a tag used only on facts is not a file label; one\n * used nowhere yet is offered.\n */\nexport function documentScopeLabels<T extends WorkflowScopeTag>(tags: T[]): T[] {\n return tags.filter((tag) => {\n if (tag.kind === 'search') return false\n const onDocs = (tag.doctag_count ?? 0) > 0\n const onFacts = (tag.facttag_count ?? 0) > 0\n return onDocs || !onFacts\n })\n}\n\nconst canonical = (path?: string | null) =>\n (path ?? '')\n .split('/')\n .map((part) => part.trim())\n .filter(Boolean)\n .join('/')\n\n/** Match the same folder/label OR semantics as the document library; explicit file picks win. */\nexport function matchWorkflowScope<T extends WorkflowScopeDocument>(\n docs: T[],\n scope: WorkflowScope\n): T[] {\n if (scope.documents?.length) {\n const ids = new Set(scope.documents)\n return docs.filter((doc) => ids.has(doc.external_id))\n }\n if (!scope.folders.length && !scope.labels.length) return docs\n const folders = scope.folders.map(canonical)\n const labels = new Set(scope.labels)\n return docs.filter((doc) => {\n const folder = canonical(doc.folder)\n return (\n folders.some((path) =>\n path === '' ? folder === '' : folder === path || folder.startsWith(`${path}/`)\n ) || doc.doctags?.some((tag) => labels.has(tag.tag_ext_id))\n )\n })\n}\n\n/** Turn real workspace documents and labels into the shared workflow scope picker model. */\nexport function buildWorkflowScopeSource(\n docs: WorkflowScopeDocument[],\n labels: WorkflowScopeLabel[] = []\n): WorkflowScopeSource {\n const counts = new Map<string, number>()\n for (const doc of docs) {\n const parts = canonical(doc.folder).split('/').filter(Boolean)\n for (let i = 1; i <= parts.length; i++) {\n const path = parts.slice(0, i).join('/')\n counts.set(path, (counts.get(path) ?? 0) + 1)\n }\n }\n return {\n folders: [...counts]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([path, count]) => ({\n path,\n count,\n label: path.split('/').at(-1)!,\n depth: path.split('/').length - 1,\n })),\n unfiledCount: docs.filter((doc) => !canonical(doc.folder)).length,\n labels: labels.map((label) => ({\n id: label.external_id,\n name: label.name,\n color: label.color ?? getEntityColor(label.external_id, 'medium'),\n count: docs.filter((doc) => doc.doctags?.some((tag) => tag.tag_ext_id === label.external_id))\n .length,\n })),\n totalCount: docs.length,\n countMatching: (scope) => matchWorkflowScope(docs, scope).length,\n resolveDocuments: (scope) => matchWorkflowScope(docs, scope).map((doc) => doc.external_id),\n }\n}\n","import { useEffect, useMemo, useRef, useState, type DragEvent } from 'react'\nimport { FolderPlus, ImageIcon, X } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { DocumentPicker, type PickerDocument } from '../../settings/DocumentPicker'\nimport type { WorkflowField, WorkflowScope } from './types'\n\n/** A workspace file a `documents` field can pick. */\nexport interface WorkflowFieldDocument extends PickerDocument {\n /** Its processing status (`completed`, `processing`…); absent = ready. */\n status?: string | null\n /** An image (for an image-only field, and its thumbnail). */\n isImage?: boolean\n}\n\nexport interface WorkflowDocumentsFieldLabels {\n pickOne: string\n pickMany: string\n /** The heading of the one list of files (a run has no conversation). */\n allDocuments: string\n addFiles: string\n adding: string\n empty: string\n remove: (name: string) => string\n /** A chosen file that is not ready yet: where it is, and that it can still be picked. */\n pending: (name: string, status: string) => string\n status: Record<string, string>\n}\n\nexport const DEFAULT_WORKFLOW_DOCUMENTS_FIELD_LABELS: WorkflowDocumentsFieldLabels = {\n pickOne: 'Pick a file',\n pickMany: 'Pick files',\n allDocuments: 'All documents',\n addFiles: 'Add files',\n adding: 'Adding…',\n empty: 'No files in this workspace yet. Drop one here, or add it.',\n remove: (name) => `Remove ${name}`,\n pending: (name, status) => `${name}: ${status}. You can still pick it.`,\n status: {\n queued: 'Queued',\n uploading: 'Uploading',\n encrypting: 'Encrypting',\n processing: 'Processing',\n parsing: 'Processing',\n indexing: 'Indexing',\n analysing: 'Analysing',\n },\n}\n\nexport interface WorkflowDocumentsFieldProps {\n field: WorkflowField\n value: WorkflowScope\n onChange: (value: WorkflowScope) => void\n /** The workspace's files. */\n documents: WorkflowFieldDocument[]\n /** The list has arrived (until then an empty list is not \"no files yet\"). Default true. */\n loaded?: boolean\n /** A chosen image's thumbnail (`data:` or URL), for the gallery of a several-files field. */\n thumbnailOf?: (id: string) => string | null | undefined\n /**\n * Add files (dropped ones, or none: the host asks). Absent: no Add files and no drop. A file\n * that appears in `documents` after this is chosen at once, even while it processes.\n */\n onAddFiles?: (files?: File[]) => void\n /** Files are being added (the button waits). */\n adding?: boolean\n labels?: Partial<WorkflowDocumentsFieldLabels>\n}\n\nconst isReady = (status?: string | null) =>\n !status || ['completed', 'done', 'ready', 'success'].includes(status.toLowerCase())\n\nconst byTitle = (a: PickerDocument, b: PickerDocument) =>\n a.title.toLowerCase().localeCompare(b.title.toLowerCase())\n\n/**\n * A workflow `documents` field: an explicit pick of workspace files. One file is a combobox;\n * several (`max` > 1) show the chosen ones as removable tiles, with a thumbnail for images, so you\n * SEE what you are steering a run with. With `onAddFiles`, files can be added (or dropped) right\n * here, and an empty workspace says so instead of offering an empty list.\n */\nexport function WorkflowDocumentsField({\n field,\n value,\n onChange,\n documents,\n loaded = true,\n thumbnailOf,\n onAddFiles,\n adding,\n labels,\n}: WorkflowDocumentsFieldProps) {\n const l = { ...DEFAULT_WORKFLOW_DOCUMENTS_FIELD_LABELS, ...labels }\n const ids = value.documents ?? []\n const max = field.max ?? 1\n const multiple = max > 1\n const [isOver, setIsOver] = useState(false)\n const docOf = (id: string) => documents.find((d) => d.id === id)\n const nameOf = (id: string) => docOf(id)?.title || id\n const set = (next: string[]) => onChange({ ...value, documents: next })\n const toggle = (id: string) =>\n set(ids.includes(id) ? ids.filter((d) => d !== id) : [...ids, id].slice(-max))\n const offered = useMemo(\n () => (field.accept === 'image' ? documents.filter((d) => d.isImage) : documents),\n [documents, field.accept]\n )\n\n // A file added from here is chosen as soon as the workspace lists it, even while it processes.\n const awaitingAdd = useRef(false)\n const known = useRef<Set<string> | null>(null)\n const latest = useRef({ ids, set })\n latest.current = { ids, set }\n useEffect(() => {\n if (!loaded) return\n const current = new Set(documents.map((d) => d.id))\n const before = known.current\n known.current = current\n if (!before || !awaitingAdd.current) return\n const fresh = [...current].filter((id) => !before.has(id))\n if (fresh.length === 0) return\n awaitingAdd.current = false\n latest.current.set([...latest.current.ids, ...fresh].slice(-max))\n }, [documents, loaded, max])\n\n const addFiles = (files?: File[]) => {\n if (!onAddFiles) return\n awaitingAdd.current = true\n onAddFiles(files?.length ? files : undefined)\n }\n const dropProps = onAddFiles\n ? {\n onDragOver: (e: DragEvent) => {\n e.preventDefault()\n setIsOver(true)\n },\n onDragLeave: () => setIsOver(false),\n onDrop: (e: DragEvent) => {\n e.preventDefault()\n setIsOver(false)\n const files = Array.from(e.dataTransfer?.files ?? [])\n if (files.length) addFiles(files)\n },\n }\n : {}\n const dropClass = isOver ? 'ring-2 ring-primary' : ''\n const addButton = (className?: string, variant: 'outline' | 'default' = 'outline') =>\n onAddFiles && (\n <Button\n type=\"button\"\n size=\"sm\"\n variant={variant}\n className={className}\n disabled={adding}\n onClick={() => addFiles()}\n data-testid=\"workflow-add-files\"\n >\n {adding ? l.adding : l.addFiles}\n </Button>\n )\n\n // Nothing in the workspace yet: say so, and offer the upload (or a drop) right here.\n if (loaded && documents.length === 0) {\n return (\n <div\n className={cn(\n 'flex flex-col items-center gap-2 rounded-lg border border-dashed border-border bg-muted/40 px-4 py-6 text-center',\n dropClass\n )}\n data-testid=\"workflow-documents-empty\"\n {...dropProps}\n >\n <FolderPlus className=\"size-5 text-muted-foreground\" aria-hidden />\n <p className=\"text-sm text-muted-foreground\">{l.empty}</p>\n {addButton(undefined, 'default')}\n </div>\n )\n }\n\n const pending = ids.flatMap((id) => {\n const status = docOf(id)?.status\n return isReady(status)\n ? []\n : [{ id, label: l.status[String(status).toLowerCase()] ?? String(status) }]\n })\n const selected = multiple ? undefined : docOf(ids[0] ?? '')\n\n return (\n <div\n className={cn('flex flex-col gap-3 rounded-lg', dropClass)}\n data-testid={`workflow-documents-${field.name}`}\n {...dropProps}\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"min-w-0 flex-1\">\n <DocumentPicker\n // A run has no conversation: one list of every file.\n groups={[{ id: 'all', heading: l.allDocuments, docs: [...offered].sort(byTitle) }]}\n value={multiple ? '' : (ids[0] ?? '')}\n onValueChange={(id) => (multiple ? toggle(id) : set([id]))}\n selected={selected}\n selectedIds={multiple ? ids : undefined}\n labels={{ placeholder: field.placeholder ?? (multiple ? l.pickMany : l.pickOne) }}\n />\n </div>\n {addButton('shrink-0 pointer-coarse:h-11')}\n </div>\n {pending.map((p) => (\n <p\n key={p.id}\n className=\"text-xs text-muted-foreground\"\n data-testid={`workflow-document-status-${p.id}`}\n >\n {l.pending(nameOf(p.id), p.label)}\n </p>\n ))}\n {multiple && ids.length > 0 && (\n <div\n className=\"grid grid-cols-2 gap-3 sm:grid-cols-3\"\n data-testid=\"workflow-documents-gallery\"\n >\n {ids.map((id) => {\n const thumbnail = thumbnailOf?.(id)\n return (\n <figure\n key={id}\n className=\"relative overflow-hidden rounded-lg border border-border bg-muted/40\"\n data-testid={`workflow-document-${id}`}\n >\n {thumbnail ? (\n <img\n src={thumbnail}\n alt={nameOf(id)}\n className=\"aspect-square w-full object-cover\"\n />\n ) : (\n <div className=\"flex aspect-square w-full items-center justify-center text-muted-foreground/50\">\n <ImageIcon className=\"size-8\" />\n </div>\n )}\n <figcaption className=\"truncate bg-background/90 px-2 py-1 text-xs text-muted-foreground\">\n {nameOf(id)}\n </figcaption>\n <button\n type=\"button\"\n onClick={() => toggle(id)}\n aria-label={l.remove(nameOf(id))}\n className=\"absolute right-1 top-1 flex size-6 items-center justify-center rounded-full bg-background/80 text-muted-foreground hover:text-foreground pointer-coarse:size-11\"\n data-testid={`workflow-document-remove-${id}`}\n >\n <X className=\"size-3.5\" />\n </button>\n </figure>\n )\n })}\n </div>\n )}\n </div>\n )\n}\n"]}
|
|
@@ -3,19 +3,19 @@
|
|
|
3
3
|
|
|
4
4
|
var chunk4ONPEVTP_cjs = require('./chunk-4ONPEVTP.cjs');
|
|
5
5
|
var chunkV3KLUWQQ_cjs = require('./chunk-V3KLUWQQ.cjs');
|
|
6
|
-
var
|
|
7
|
-
var
|
|
6
|
+
var chunkP5AQYC4D_cjs = require('./chunk-P5AQYC4D.cjs');
|
|
7
|
+
var chunkGQXPNIRE_cjs = require('./chunk-GQXPNIRE.cjs');
|
|
8
8
|
var chunkHM5L4SBC_cjs = require('./chunk-HM5L4SBC.cjs');
|
|
9
|
-
var
|
|
9
|
+
var chunkLYTIQQQ2_cjs = require('./chunk-LYTIQQQ2.cjs');
|
|
10
10
|
var chunk3YEXZX4H_cjs = require('./chunk-3YEXZX4H.cjs');
|
|
11
|
-
var chunkLQHXUSWZ_cjs = require('./chunk-LQHXUSWZ.cjs');
|
|
12
|
-
var chunk6YOZKXV6_cjs = require('./chunk-6YOZKXV6.cjs');
|
|
13
|
-
var chunk3YZKDCWY_cjs = require('./chunk-3YZKDCWY.cjs');
|
|
14
|
-
var chunkVZOOGA47_cjs = require('./chunk-VZOOGA47.cjs');
|
|
15
11
|
var chunkQGVOT7E4_cjs = require('./chunk-QGVOT7E4.cjs');
|
|
16
12
|
var chunkIPSHAMO2_cjs = require('./chunk-IPSHAMO2.cjs');
|
|
17
|
-
var
|
|
13
|
+
var chunkVZOOGA47_cjs = require('./chunk-VZOOGA47.cjs');
|
|
14
|
+
var chunkHQDR43JC_cjs = require('./chunk-HQDR43JC.cjs');
|
|
15
|
+
var chunkJR2YSBD5_cjs = require('./chunk-JR2YSBD5.cjs');
|
|
16
|
+
var chunk3YZKDCWY_cjs = require('./chunk-3YZKDCWY.cjs');
|
|
18
17
|
var chunkLJJJ6CYH_cjs = require('./chunk-LJJJ6CYH.cjs');
|
|
18
|
+
var chunkTKHCIHE2_cjs = require('./chunk-TKHCIHE2.cjs');
|
|
19
19
|
var react$1 = require('react');
|
|
20
20
|
var react = require('@arbidocs/react');
|
|
21
21
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -34,7 +34,7 @@ function useDocxCommentTarget() {
|
|
|
34
34
|
return useTarget();
|
|
35
35
|
}
|
|
36
36
|
function useConnectedWorkspaceRole() {
|
|
37
|
-
const { workspaceId, live, userId, ensureWorkspaceOpen } =
|
|
37
|
+
const { workspaceId, live, userId, ensureWorkspaceOpen } = chunkJR2YSBD5_cjs.useConnectedWorkspace();
|
|
38
38
|
const { data: members = [] } = react.useWorkspaceUsers(workspaceId ?? void 0, {
|
|
39
39
|
enabled: live && !!workspaceId,
|
|
40
40
|
beforeFetch: ensureWorkspaceOpen
|
|
@@ -71,8 +71,8 @@ function ConnectedWorkflowsTable({
|
|
|
71
71
|
...tableProps
|
|
72
72
|
}) {
|
|
73
73
|
const l = { ...DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS, ...connectedLabels };
|
|
74
|
-
const { notify, confirm, openConversation } =
|
|
75
|
-
const openWorkflow =
|
|
74
|
+
const { notify, confirm, openConversation } = chunkTKHCIHE2_cjs.useBlocksEnvironment();
|
|
75
|
+
const openWorkflow = chunkP5AQYC4D_cjs.useOpenWorkflow();
|
|
76
76
|
const host = chunk3YZKDCWY_cjs.useHost().workflows;
|
|
77
77
|
const catalogueEntries = filter ? void 0 : host?.catalogue;
|
|
78
78
|
const catalogue = react$1.useMemo(
|
|
@@ -90,7 +90,7 @@ function ConnectedWorkflowsTable({
|
|
|
90
90
|
);
|
|
91
91
|
const { canEditShared, isWorkspaceOwner } = useConnectedWorkspaceRole();
|
|
92
92
|
const { data: saved = [], isLoading } = react.useWorkflows({ live: true });
|
|
93
|
-
const { data: conversations, refetch } =
|
|
93
|
+
const { data: conversations, refetch } = chunkHQDR43JC_cjs.useConnectedConversations({ live: true });
|
|
94
94
|
const { data: agents = [] } = react.useAgents();
|
|
95
95
|
const update = react.useUpdateWorkflow();
|
|
96
96
|
const remove = react.useDeleteWorkflow();
|
|
@@ -145,7 +145,7 @@ function ConnectedWorkflowsTable({
|
|
|
145
145
|
await act(workflow, () => remove.mutateAsync(workflow.external_id));
|
|
146
146
|
};
|
|
147
147
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
148
|
-
|
|
148
|
+
chunkLYTIQQQ2_cjs.WorkflowsTable,
|
|
149
149
|
{
|
|
150
150
|
...tableProps,
|
|
151
151
|
workflows,
|
|
@@ -204,7 +204,7 @@ function ReferencePicker({
|
|
|
204
204
|
onSelect
|
|
205
205
|
}) {
|
|
206
206
|
const groups = react$1.useMemo(() => {
|
|
207
|
-
const docs = documents.filter(isTopLevel).map(
|
|
207
|
+
const docs = documents.filter(isTopLevel).map(chunkGQXPNIRE_cjs.toWorkflowFieldDocument).sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase()));
|
|
208
208
|
return [{ id: "all", heading: "In this workspace", docs }];
|
|
209
209
|
}, [documents]);
|
|
210
210
|
const selected = groups[0].docs.find((d) => d.id === selectedId);
|
|
@@ -221,14 +221,14 @@ function ReferencePicker({
|
|
|
221
221
|
}
|
|
222
222
|
function useConnectedDocxReferences() {
|
|
223
223
|
const arbi = react.useArbi();
|
|
224
|
-
const { workspaceId } =
|
|
225
|
-
const { openDocument, runtimeConfig } =
|
|
226
|
-
const { data: documents } =
|
|
224
|
+
const { workspaceId } = chunkJR2YSBD5_cjs.useConnectedWorkspace();
|
|
225
|
+
const { openDocument, runtimeConfig } = chunkTKHCIHE2_cjs.useBlocksEnvironment();
|
|
226
|
+
const { data: documents } = chunkHQDR43JC_cjs.useListedDocuments();
|
|
227
227
|
const documentsRef = react$1.useRef(documents);
|
|
228
228
|
documentsRef.current = documents;
|
|
229
229
|
return react$1.useMemo(
|
|
230
230
|
() => ({
|
|
231
|
-
documents: async () => documentsRef.current.filter(isTopLevel).map((d) => ({ id: d.external_id, title:
|
|
231
|
+
documents: async () => documentsRef.current.filter(isTopLevel).map((d) => ({ id: d.external_id, title: chunkGQXPNIRE_cjs.toWorkflowFieldDocument(d).title })),
|
|
232
232
|
passages: async (documentId) => {
|
|
233
233
|
const parsed = await arbi.documents.getParsedContent(documentId, "final");
|
|
234
234
|
return (parsed.chunks ?? []).flatMap(
|
|
@@ -276,7 +276,7 @@ function useConnectedDocxReferences() {
|
|
|
276
276
|
function useConnectedHouseTemplate() {
|
|
277
277
|
const arbi = react.useArbi();
|
|
278
278
|
const { mutateAsync: setWorkspaceTemplate } = react.useSetWorkspaceHouseTemplate();
|
|
279
|
-
const { workspaceId, live, ensureWorkspaceOpen } =
|
|
279
|
+
const { workspaceId, live, ensureWorkspaceOpen } = chunkJR2YSBD5_cjs.useConnectedWorkspace();
|
|
280
280
|
const { data: workspaces } = react.useWorkspaces({ enabled: live });
|
|
281
281
|
const workspace = workspaces?.find((w) => w.external_id === workspaceId);
|
|
282
282
|
const { isWorkspaceOwner } = useConnectedWorkspaceRole();
|
|
@@ -328,7 +328,7 @@ function ConnectedNativeDocxEditor({
|
|
|
328
328
|
...props
|
|
329
329
|
}) {
|
|
330
330
|
const adapter = useConnectedNativeDocxAdapter(fontBaseUrl);
|
|
331
|
-
const { workspaceId } =
|
|
331
|
+
const { workspaceId } = chunkJR2YSBD5_cjs.useConnectedWorkspace();
|
|
332
332
|
const commentTarget = useDocxCommentTarget();
|
|
333
333
|
const [openFailed, setOpenFailed] = react$1.useState(false);
|
|
334
334
|
const hasOpened = react$1.useRef(false);
|
|
@@ -379,9 +379,9 @@ function tokenChanges(arbi) {
|
|
|
379
379
|
}
|
|
380
380
|
function useConnectedNativeDocxAdapter(fontBaseUrl = "/native-docx/fonts") {
|
|
381
381
|
const arbi = react.useArbi();
|
|
382
|
-
const { workspaceId, live, user, ensureWorkspaceOpen } =
|
|
382
|
+
const { workspaceId, live, user, ensureWorkspaceOpen } = chunkJR2YSBD5_cjs.useConnectedWorkspace();
|
|
383
383
|
const queries = reactQuery.useQueryClient();
|
|
384
|
-
const { notify } =
|
|
384
|
+
const { notify } = chunkTKHCIHE2_cjs.useBlocksEnvironment();
|
|
385
385
|
const tools = documentTools.useOptionalDocumentTools();
|
|
386
386
|
const support = useNativeDocxSupport();
|
|
387
387
|
const references = useConnectedDocxReferences();
|
|
@@ -478,5 +478,5 @@ exports.useConnectedNativeDocxAdapter = useConnectedNativeDocxAdapter;
|
|
|
478
478
|
exports.useConnectedWorkspaceRole = useConnectedWorkspaceRole;
|
|
479
479
|
exports.useDocxCommentTarget = useDocxCommentTarget;
|
|
480
480
|
exports.useNativeDocxSupport = useNativeDocxSupport;
|
|
481
|
-
//# sourceMappingURL=chunk-
|
|
482
|
-
//# sourceMappingURL=chunk-
|
|
481
|
+
//# sourceMappingURL=chunk-NHHEMBXQ.cjs.map
|
|
482
|
+
//# sourceMappingURL=chunk-NHHEMBXQ.cjs.map
|