@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.
Files changed (179) hide show
  1. package/dist/{ConnectedCallDock-KUF6RX76.cjs → ConnectedCallDock-2KXEQENS.cjs} +26 -26
  2. package/dist/{ConnectedCallDock-KUF6RX76.cjs.map → ConnectedCallDock-2KXEQENS.cjs.map} +1 -1
  3. package/dist/{ConnectedCallRoom-ZKIYB2JG.cjs → ConnectedCallRoom-MU3NPNXF.cjs} +18 -18
  4. package/dist/{ConnectedCallRoom-ZKIYB2JG.cjs.map → ConnectedCallRoom-MU3NPNXF.cjs.map} +1 -1
  5. package/dist/{ConnectedMailInviteCard-P65MQM6J.cjs → ConnectedMailInviteCard-EINB3THA.cjs} +5 -5
  6. package/dist/{ConnectedMailInviteCard-P65MQM6J.cjs.map → ConnectedMailInviteCard-EINB3THA.cjs.map} +1 -1
  7. package/dist/{ConnectedNativeDocxComparison-S4RKDH2A.cjs → ConnectedNativeDocxComparison-VH3I65H6.cjs} +21 -21
  8. package/dist/{ConnectedNativeDocxComparison-S4RKDH2A.cjs.map → ConnectedNativeDocxComparison-VH3I65H6.cjs.map} +1 -1
  9. package/dist/{ConnectedProductionSetDialog-HX4HTQ3Z.cjs → ConnectedProductionSetDialog-4EAY6KAZ.cjs} +8 -8
  10. package/dist/{ConnectedProductionSetDialog-HX4HTQ3Z.cjs.map → ConnectedProductionSetDialog-4EAY6KAZ.cjs.map} +1 -1
  11. package/dist/{ConnectedStreamedWordArtifact-A2A7Z3TT.cjs → ConnectedStreamedWordArtifact-KQSHCA75.cjs} +21 -21
  12. package/dist/{ConnectedStreamedWordArtifact-A2A7Z3TT.cjs.map → ConnectedStreamedWordArtifact-KQSHCA75.cjs.map} +1 -1
  13. package/dist/{DocumentReviewCard-4A7NF474.cjs → DocumentReviewCard-OCPFVMLD.cjs} +22 -22
  14. package/dist/{DocumentReviewCard-4A7NF474.cjs.map → DocumentReviewCard-OCPFVMLD.cjs.map} +1 -1
  15. package/dist/{FilesViewerDialog-PKCBZXDG.cjs → FilesViewerDialog-BAGOEMXW.cjs} +54 -54
  16. package/dist/{FilesViewerDialog-PKCBZXDG.cjs.map → FilesViewerDialog-BAGOEMXW.cjs.map} +1 -1
  17. package/dist/{WorkspaceTableView-J3C6VH4T.cjs → WorkspaceTableView-IMAZICIZ.cjs} +9 -9
  18. package/dist/{WorkspaceTableView-J3C6VH4T.cjs.map → WorkspaceTableView-IMAZICIZ.cjs.map} +1 -1
  19. package/dist/agents/index.cjs +298 -298
  20. package/dist/{ai-OYTFPMXI.cjs → ai-7U4B4CVF.cjs} +27 -27
  21. package/dist/ai-7U4B4CVF.cjs.map +1 -0
  22. package/dist/calls/index.cjs +147 -147
  23. package/dist/chat/index.cjs +29 -29
  24. package/dist/{chunk-37JPFCCU.cjs → chunk-2W5E62EY.cjs} +6 -6
  25. package/dist/{chunk-37JPFCCU.cjs.map → chunk-2W5E62EY.cjs.map} +1 -1
  26. package/dist/{chunk-N6AZYEYL.cjs → chunk-3ODEWSRO.cjs} +4 -4
  27. package/dist/{chunk-N6AZYEYL.cjs.map → chunk-3ODEWSRO.cjs.map} +1 -1
  28. package/dist/{chunk-VDFYMVMP.cjs → chunk-3R6YHJ3G.cjs} +4 -4
  29. package/dist/{chunk-VDFYMVMP.cjs.map → chunk-3R6YHJ3G.cjs.map} +1 -1
  30. package/dist/{chunk-5RCCZYAE.cjs → chunk-3U36VYMD.cjs} +36 -36
  31. package/dist/{chunk-5RCCZYAE.cjs.map → chunk-3U36VYMD.cjs.map} +1 -1
  32. package/dist/{chunk-A4FGU6YC.cjs → chunk-436I7PQL.cjs} +7 -7
  33. package/dist/{chunk-A4FGU6YC.cjs.map → chunk-436I7PQL.cjs.map} +1 -1
  34. package/dist/{chunk-J2RXQVVF.cjs → chunk-4EK7TAP7.cjs} +5 -5
  35. package/dist/{chunk-J2RXQVVF.cjs.map → chunk-4EK7TAP7.cjs.map} +1 -1
  36. package/dist/{chunk-TP5PGWIO.cjs → chunk-4IOYQLKG.cjs} +3 -3
  37. package/dist/{chunk-TP5PGWIO.cjs.map → chunk-4IOYQLKG.cjs.map} +1 -1
  38. package/dist/{chunk-ZQLRWA3Y.cjs → chunk-4NPCDS2X.cjs} +4 -4
  39. package/dist/{chunk-ZQLRWA3Y.cjs.map → chunk-4NPCDS2X.cjs.map} +1 -1
  40. package/dist/{chunk-ZEQEIFZJ.cjs → chunk-57EE6CMW.cjs} +24 -24
  41. package/dist/{chunk-ZEQEIFZJ.cjs.map → chunk-57EE6CMW.cjs.map} +1 -1
  42. package/dist/{chunk-NMT4UZQM.cjs → chunk-57NHXEU2.cjs} +5 -5
  43. package/dist/{chunk-NMT4UZQM.cjs.map → chunk-57NHXEU2.cjs.map} +1 -1
  44. package/dist/{chunk-4QTQS4LS.cjs → chunk-5QUL5BZO.cjs} +5 -5
  45. package/dist/{chunk-4QTQS4LS.cjs.map → chunk-5QUL5BZO.cjs.map} +1 -1
  46. package/dist/{chunk-MUA5PJGX.cjs → chunk-5SKHK3BG.cjs} +4 -4
  47. package/dist/{chunk-MUA5PJGX.cjs.map → chunk-5SKHK3BG.cjs.map} +1 -1
  48. package/dist/{chunk-AFXDLDPU.cjs → chunk-5UYFLFNR.cjs} +4 -4
  49. package/dist/{chunk-AFXDLDPU.cjs.map → chunk-5UYFLFNR.cjs.map} +1 -1
  50. package/dist/{chunk-FJXJ43JO.cjs → chunk-6DCIZA3X.cjs} +101 -101
  51. package/dist/{chunk-FJXJ43JO.cjs.map → chunk-6DCIZA3X.cjs.map} +1 -1
  52. package/dist/{chunk-G5TRBLKF.cjs → chunk-7TEUGFIL.cjs} +4 -4
  53. package/dist/{chunk-G5TRBLKF.cjs.map → chunk-7TEUGFIL.cjs.map} +1 -1
  54. package/dist/{chunk-ZNZGYSVB.cjs → chunk-7X3FS5HQ.cjs} +39 -39
  55. package/dist/{chunk-ZNZGYSVB.cjs.map → chunk-7X3FS5HQ.cjs.map} +1 -1
  56. package/dist/{chunk-DZDARC3V.cjs → chunk-7XT5B2DZ.cjs} +70 -70
  57. package/dist/{chunk-DZDARC3V.cjs.map → chunk-7XT5B2DZ.cjs.map} +1 -1
  58. package/dist/{chunk-5UMKMUB5.cjs → chunk-AHT6DQNI.cjs} +68 -68
  59. package/dist/{chunk-5UMKMUB5.cjs.map → chunk-AHT6DQNI.cjs.map} +1 -1
  60. package/dist/{chunk-SRET7LYT.cjs → chunk-BW5MF464.cjs} +4 -4
  61. package/dist/{chunk-SRET7LYT.cjs.map → chunk-BW5MF464.cjs.map} +1 -1
  62. package/dist/{chunk-NP4EWPIP.cjs → chunk-CJYWHUZR.cjs} +6 -6
  63. package/dist/{chunk-NP4EWPIP.cjs.map → chunk-CJYWHUZR.cjs.map} +1 -1
  64. package/dist/{chunk-NTD7VSHO.cjs → chunk-CMGNRMPA.cjs} +4 -4
  65. package/dist/{chunk-NTD7VSHO.cjs.map → chunk-CMGNRMPA.cjs.map} +1 -1
  66. package/dist/{chunk-Z3VNKPPH.cjs → chunk-E3Y7RI3J.cjs} +4 -4
  67. package/dist/{chunk-Z3VNKPPH.cjs.map → chunk-E3Y7RI3J.cjs.map} +1 -1
  68. package/dist/{chunk-TDO5UWXF.cjs → chunk-E4BLRF2L.cjs} +5 -5
  69. package/dist/{chunk-TDO5UWXF.cjs.map → chunk-E4BLRF2L.cjs.map} +1 -1
  70. package/dist/{chunk-WT7CCCIN.cjs → chunk-GNX3FBBX.cjs} +4 -4
  71. package/dist/{chunk-WT7CCCIN.cjs.map → chunk-GNX3FBBX.cjs.map} +1 -1
  72. package/dist/{chunk-3NEI27QQ.cjs → chunk-GQXPNIRE.cjs} +14 -14
  73. package/dist/{chunk-3NEI27QQ.cjs.map → chunk-GQXPNIRE.cjs.map} +1 -1
  74. package/dist/{chunk-7OPOPYV6.cjs → chunk-H5OLHP2U.cjs} +3 -3
  75. package/dist/{chunk-7OPOPYV6.cjs.map → chunk-H5OLHP2U.cjs.map} +1 -1
  76. package/dist/{chunk-IIWJQEBC.cjs → chunk-H7PHOTX2.cjs} +10 -10
  77. package/dist/{chunk-IIWJQEBC.cjs.map → chunk-H7PHOTX2.cjs.map} +1 -1
  78. package/dist/{chunk-LQHXUSWZ.cjs → chunk-HQDR43JC.cjs} +6 -6
  79. package/dist/{chunk-LQHXUSWZ.cjs.map → chunk-HQDR43JC.cjs.map} +1 -1
  80. package/dist/{chunk-6LQN4BMX.cjs → chunk-IDCD5TEZ.cjs} +5 -5
  81. package/dist/{chunk-6LQN4BMX.cjs.map → chunk-IDCD5TEZ.cjs.map} +1 -1
  82. package/dist/{chunk-6YOZKXV6.cjs → chunk-JR2YSBD5.cjs} +4 -4
  83. package/dist/{chunk-6YOZKXV6.cjs.map → chunk-JR2YSBD5.cjs.map} +1 -1
  84. package/dist/{chunk-3GYOWDNM.cjs → chunk-JSQQV23D.cjs} +5 -5
  85. package/dist/{chunk-3GYOWDNM.cjs.map → chunk-JSQQV23D.cjs.map} +1 -1
  86. package/dist/{chunk-ZFKWCGA5.cjs → chunk-JV5TVUOU.cjs} +4 -4
  87. package/dist/{chunk-ZFKWCGA5.cjs.map → chunk-JV5TVUOU.cjs.map} +1 -1
  88. package/dist/{chunk-TXFZAA3R.cjs → chunk-LFRNBT2I.cjs} +23 -23
  89. package/dist/{chunk-TXFZAA3R.cjs.map → chunk-LFRNBT2I.cjs.map} +1 -1
  90. package/dist/{chunk-R7CJEIA5.cjs → chunk-LYTIQQQ2.cjs} +3 -3
  91. package/dist/{chunk-R7CJEIA5.cjs.map → chunk-LYTIQQQ2.cjs.map} +1 -1
  92. package/dist/{chunk-6UYTG2YG.cjs → chunk-MC4F2URI.cjs} +28 -28
  93. package/dist/{chunk-6UYTG2YG.cjs.map → chunk-MC4F2URI.cjs.map} +1 -1
  94. package/dist/{chunk-NNG34ONS.cjs → chunk-MGQSLMTC.cjs} +78 -78
  95. package/dist/{chunk-NNG34ONS.cjs.map → chunk-MGQSLMTC.cjs.map} +1 -1
  96. package/dist/{chunk-3Q5L7XVI.cjs → chunk-MZ2KZXNU.cjs} +9 -9
  97. package/dist/{chunk-3Q5L7XVI.cjs.map → chunk-MZ2KZXNU.cjs.map} +1 -1
  98. package/dist/{chunk-PJ762EO2.cjs → chunk-NHHEMBXQ.cjs} +24 -24
  99. package/dist/{chunk-PJ762EO2.cjs.map → chunk-NHHEMBXQ.cjs.map} +1 -1
  100. package/dist/{chunk-ENUZ35NR.cjs → chunk-P5AQYC4D.cjs} +4 -4
  101. package/dist/{chunk-ENUZ35NR.cjs.map → chunk-P5AQYC4D.cjs.map} +1 -1
  102. package/dist/{chunk-5I2VUNZR.cjs → chunk-PGJYD67F.cjs} +6 -6
  103. package/dist/{chunk-5I2VUNZR.cjs.map → chunk-PGJYD67F.cjs.map} +1 -1
  104. package/dist/{chunk-BYN7UMC5.cjs → chunk-PL7HUTM3.cjs} +8 -8
  105. package/dist/{chunk-BYN7UMC5.cjs.map → chunk-PL7HUTM3.cjs.map} +1 -1
  106. package/dist/{chunk-NOYQ23I7.cjs → chunk-Q6DQGGP4.cjs} +6 -6
  107. package/dist/{chunk-NOYQ23I7.cjs.map → chunk-Q6DQGGP4.cjs.map} +1 -1
  108. package/dist/{chunk-T7J352JD.cjs → chunk-QMIHLJMH.cjs} +6 -6
  109. package/dist/{chunk-T7J352JD.cjs.map → chunk-QMIHLJMH.cjs.map} +1 -1
  110. package/dist/{chunk-LTEXVRCH.cjs → chunk-SBWIA4PL.cjs} +21 -21
  111. package/dist/{chunk-LTEXVRCH.cjs.map → chunk-SBWIA4PL.cjs.map} +1 -1
  112. package/dist/{chunk-ZH7LDZJX.cjs → chunk-TDN33HSK.cjs} +14 -14
  113. package/dist/{chunk-ZH7LDZJX.cjs.map → chunk-TDN33HSK.cjs.map} +1 -1
  114. package/dist/{chunk-U5T46QCS.cjs → chunk-TKHCIHE2.cjs} +3 -3
  115. package/dist/chunk-TKHCIHE2.cjs.map +1 -0
  116. package/dist/{chunk-WIAWHETB.cjs → chunk-ULPTSXXO.cjs} +4 -4
  117. package/dist/{chunk-WIAWHETB.cjs.map → chunk-ULPTSXXO.cjs.map} +1 -1
  118. package/dist/{chunk-GTWEWDIZ.cjs → chunk-UNDQYTRF.cjs} +8 -8
  119. package/dist/{chunk-GTWEWDIZ.cjs.map → chunk-UNDQYTRF.cjs.map} +1 -1
  120. package/dist/{chunk-OKHKJ5ML.cjs → chunk-UUENH4BJ.cjs} +11 -11
  121. package/dist/{chunk-OKHKJ5ML.cjs.map → chunk-UUENH4BJ.cjs.map} +1 -1
  122. package/dist/{chunk-K5MYEWD5.cjs → chunk-UZHWXKS6.cjs} +7 -7
  123. package/dist/{chunk-K5MYEWD5.cjs.map → chunk-UZHWXKS6.cjs.map} +1 -1
  124. package/dist/{chunk-QVHP4R7T.cjs → chunk-V5IMYLYK.cjs} +29 -29
  125. package/dist/{chunk-QVHP4R7T.cjs.map → chunk-V5IMYLYK.cjs.map} +1 -1
  126. package/dist/{chunk-XW524KUX.cjs → chunk-VJCSEMXT.cjs} +4 -4
  127. package/dist/{chunk-XW524KUX.cjs.map → chunk-VJCSEMXT.cjs.map} +1 -1
  128. package/dist/{chunk-B5442TKX.cjs → chunk-VRK3IQAP.cjs} +4 -4
  129. package/dist/{chunk-B5442TKX.cjs.map → chunk-VRK3IQAP.cjs.map} +1 -1
  130. package/dist/{chunk-MYRKL3JO.cjs → chunk-VWTOIGX4.cjs} +4 -4
  131. package/dist/{chunk-MYRKL3JO.cjs.map → chunk-VWTOIGX4.cjs.map} +1 -1
  132. package/dist/{chunk-Q7DB5S7N.cjs → chunk-WW6LXQY6.cjs} +12 -12
  133. package/dist/{chunk-Q7DB5S7N.cjs.map → chunk-WW6LXQY6.cjs.map} +1 -1
  134. package/dist/{chunk-NJCK6V6U.cjs → chunk-XKDUPU7B.cjs} +4 -4
  135. package/dist/{chunk-NJCK6V6U.cjs.map → chunk-XKDUPU7B.cjs.map} +1 -1
  136. package/dist/{chunk-YAPXIANR.cjs → chunk-YVCOQHCE.cjs} +5 -5
  137. package/dist/{chunk-YAPXIANR.cjs.map → chunk-YVCOQHCE.cjs.map} +1 -1
  138. package/dist/{chunk-TOM2P3MA.cjs → chunk-ZZA756I4.cjs} +4 -4
  139. package/dist/{chunk-TOM2P3MA.cjs.map → chunk-ZZA756I4.cjs.map} +1 -1
  140. package/dist/citations/index.cjs +8 -8
  141. package/dist/connect/docx.cjs +24 -24
  142. package/dist/connect/index.cjs +1489 -1433
  143. package/dist/connect/index.cjs.map +1 -1
  144. package/dist/connect/viewer.cjs +40 -40
  145. package/dist/connection/ConnectedWorkflowBuilder.d.ts +11 -0
  146. package/dist/connection/ConnectedWorkflowBuilder.js +42 -3
  147. package/dist/connection/ConnectedWorkflowBuilder.js.map +2 -2
  148. package/dist/connection/conversation/ConnectedConversationPage.js +36 -2
  149. package/dist/connection/conversation/ConnectedConversationPage.js.map +2 -2
  150. package/dist/connection/report-problem/ReportProblemDialog.d.ts +2 -2
  151. package/dist/connection/report-problem/ReportProblemDialog.js +51 -19
  152. package/dist/connection/report-problem/ReportProblemDialog.js.map +2 -2
  153. package/dist/connection/workflows/ConnectedWorkflowsPage.js +10 -3
  154. package/dist/connection/workflows/ConnectedWorkflowsPage.js.map +2 -2
  155. package/dist/connection/workflows/useWorkflowsPageState.d.ts +1 -0
  156. package/dist/connection/workflows/useWorkflowsPageState.js.map +2 -2
  157. package/dist/dashboards/index.cjs +23 -23
  158. package/dist/embed/index.cjs +49 -49
  159. package/dist/facts/index.cjs +45 -45
  160. package/dist/files/index.cjs +225 -225
  161. package/dist/home/index.cjs +32 -32
  162. package/dist/index.cjs +1750 -1750
  163. package/dist/provider/environment.d.ts +5 -0
  164. package/dist/provider/environment.js +1 -1
  165. package/dist/provider/environment.js.map +2 -2
  166. package/dist/provider/requests.d.ts +2 -0
  167. package/dist/provider/requests.js.map +2 -2
  168. package/dist/retrieval/index.cjs +4 -4
  169. package/dist/settings/index.cjs +148 -148
  170. package/dist/shell/index.cjs +91 -91
  171. package/dist/site/index.cjs +5 -5
  172. package/dist/studio/index.cjs +43 -43
  173. package/dist/workflow-canvas/index.cjs +114 -72
  174. package/dist/workflow-canvas/index.cjs.map +1 -1
  175. package/dist/workspaces/index.cjs +18 -18
  176. package/node_modules/@arbidocs/coedit/package.json +1 -1
  177. package/package.json +5 -5
  178. package/dist/ai-OYTFPMXI.cjs.map +0 -1
  179. 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 chunkYAPXIANR_cjs = require('./chunk-YAPXIANR.cjs');
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
- chunkYAPXIANR_cjs.FoldSection,
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
- chunkYAPXIANR_cjs.ScopePicker,
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
- chunkYAPXIANR_cjs.QuickActionDialogHeader,
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
- chunkYAPXIANR_cjs.AddFilesFirst,
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
- chunkYAPXIANR_cjs.StartTiles,
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-3Q5L7XVI.cjs.map
926
- //# sourceMappingURL=chunk-3Q5L7XVI.cjs.map
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 chunkENUZ35NR_cjs = require('./chunk-ENUZ35NR.cjs');
7
- var chunk3NEI27QQ_cjs = require('./chunk-3NEI27QQ.cjs');
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 chunkR7CJEIA5_cjs = require('./chunk-R7CJEIA5.cjs');
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 chunkU5T46QCS_cjs = require('./chunk-U5T46QCS.cjs');
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 } = chunk6YOZKXV6_cjs.useConnectedWorkspace();
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 } = chunkU5T46QCS_cjs.useBlocksEnvironment();
75
- const openWorkflow = chunkENUZ35NR_cjs.useOpenWorkflow();
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 } = chunkLQHXUSWZ_cjs.useConnectedConversations({ live: true });
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
- chunkR7CJEIA5_cjs.WorkflowsTable,
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(chunk3NEI27QQ_cjs.toWorkflowFieldDocument).sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase()));
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 } = chunk6YOZKXV6_cjs.useConnectedWorkspace();
225
- const { openDocument, runtimeConfig } = chunkU5T46QCS_cjs.useBlocksEnvironment();
226
- const { data: documents } = chunkLQHXUSWZ_cjs.useListedDocuments();
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: chunk3NEI27QQ_cjs.toWorkflowFieldDocument(d).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 } = chunk6YOZKXV6_cjs.useConnectedWorkspace();
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 } = chunk6YOZKXV6_cjs.useConnectedWorkspace();
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 } = chunk6YOZKXV6_cjs.useConnectedWorkspace();
382
+ const { workspaceId, live, user, ensureWorkspaceOpen } = chunkJR2YSBD5_cjs.useConnectedWorkspace();
383
383
  const queries = reactQuery.useQueryClient();
384
- const { notify } = chunkU5T46QCS_cjs.useBlocksEnvironment();
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-PJ762EO2.cjs.map
482
- //# sourceMappingURL=chunk-PJ762EO2.cjs.map
481
+ //# sourceMappingURL=chunk-NHHEMBXQ.cjs.map
482
+ //# sourceMappingURL=chunk-NHHEMBXQ.cjs.map