@arbidocs/blocks 0.5.62 → 0.5.63

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 (168) hide show
  1. package/README.md +7 -0
  2. package/dist/{ConnectedCallDock-CRECGH7K.js → ConnectedCallDock-DEAEFUUD.js} +5 -5
  3. package/dist/{ConnectedCallDock-CRECGH7K.js.map → ConnectedCallDock-DEAEFUUD.js.map} +1 -1
  4. package/dist/{ConnectedCallDock-RGDNX76B.cjs → ConnectedCallDock-GJAGY75U.cjs} +14 -14
  5. package/dist/{ConnectedCallDock-RGDNX76B.cjs.map → ConnectedCallDock-GJAGY75U.cjs.map} +1 -1
  6. package/dist/{ConnectedCallRoom-Z2M6QRJJ.js → ConnectedCallRoom-DI7UYRHE.js} +5 -5
  7. package/dist/{ConnectedCallRoom-Z2M6QRJJ.js.map → ConnectedCallRoom-DI7UYRHE.js.map} +1 -1
  8. package/dist/{ConnectedCallRoom-LM7UNH34.cjs → ConnectedCallRoom-KLE2PCMQ.cjs} +6 -6
  9. package/dist/{ConnectedCallRoom-LM7UNH34.cjs.map → ConnectedCallRoom-KLE2PCMQ.cjs.map} +1 -1
  10. package/dist/{ConnectedDocumentViewer-ELA7R4RJ.js → ConnectedDocumentViewer-7VKAM6KD.js} +8 -8
  11. package/dist/{ConnectedDocumentViewer-ELA7R4RJ.js.map → ConnectedDocumentViewer-7VKAM6KD.js.map} +1 -1
  12. package/dist/{ConnectedDocumentViewer-6SFJWKXN.cjs → ConnectedDocumentViewer-FGQ27H4B.cjs} +9 -9
  13. package/dist/{ConnectedDocumentViewer-6SFJWKXN.cjs.map → ConnectedDocumentViewer-FGQ27H4B.cjs.map} +1 -1
  14. package/dist/{ConnectedNativeDocxComparison-3MCCETF5.js → ConnectedNativeDocxComparison-FPW3BNBN.js} +8 -8
  15. package/dist/ConnectedNativeDocxComparison-FPW3BNBN.js.map +1 -0
  16. package/dist/{ConnectedNativeDocxComparison-XZIRCESL.cjs → ConnectedNativeDocxComparison-HJ4FTVH6.cjs} +9 -9
  17. package/dist/ConnectedNativeDocxComparison-HJ4FTVH6.cjs.map +1 -0
  18. package/dist/{ConnectedNativeDocxEditor-YE6KA53Q.cjs → ConnectedNativeDocxEditor-PF46MU5H.cjs} +9 -9
  19. package/dist/ConnectedNativeDocxEditor-PF46MU5H.cjs.map +1 -0
  20. package/dist/{ConnectedNativeDocxEditor-FGW35PIL.js → ConnectedNativeDocxEditor-S7NJMDSU.js} +7 -7
  21. package/dist/ConnectedNativeDocxEditor-S7NJMDSU.js.map +1 -0
  22. package/dist/{ConnectedStreamedWordArtifact-N6YRKWDH.js → ConnectedStreamedWordArtifact-5MHLV24V.js} +8 -8
  23. package/dist/ConnectedStreamedWordArtifact-5MHLV24V.js.map +1 -0
  24. package/dist/{ConnectedStreamedWordArtifact-ROPYU3LE.cjs → ConnectedStreamedWordArtifact-LNGW7YGV.cjs} +9 -9
  25. package/dist/ConnectedStreamedWordArtifact-LNGW7YGV.cjs.map +1 -0
  26. package/dist/{DocumentReviewCard-SYBCU7NL.js → DocumentReviewCard-5U3TGJZA.js} +7 -7
  27. package/dist/{DocumentReviewCard-SYBCU7NL.js.map → DocumentReviewCard-5U3TGJZA.js.map} +1 -1
  28. package/dist/{DocumentReviewCard-YOZMWE33.cjs → DocumentReviewCard-VFNMJSK7.cjs} +7 -7
  29. package/dist/{DocumentReviewCard-YOZMWE33.cjs.map → DocumentReviewCard-VFNMJSK7.cjs.map} +1 -1
  30. package/dist/{WorkspaceTableView-4DGONK5A.cjs → WorkspaceTableView-DHMCJRC6.cjs} +7 -7
  31. package/dist/{WorkspaceTableView-4DGONK5A.cjs.map → WorkspaceTableView-DHMCJRC6.cjs.map} +1 -1
  32. package/dist/{WorkspaceTableView-ZCUYOMSL.js → WorkspaceTableView-EH5CEB44.js} +5 -5
  33. package/dist/{WorkspaceTableView-ZCUYOMSL.js.map → WorkspaceTableView-EH5CEB44.js.map} +1 -1
  34. package/dist/agents/index.cjs +283 -283
  35. package/dist/agents/index.js +5 -5
  36. package/dist/agents/tasks/WorkflowsTable.d.ts +2 -1
  37. package/dist/calls/index.cjs +132 -132
  38. package/dist/calls/index.js +8 -8
  39. package/dist/{chunk-57FBBWU2.cjs → chunk-23ACBETH.cjs} +4 -4
  40. package/dist/{chunk-57FBBWU2.cjs.map → chunk-23ACBETH.cjs.map} +1 -1
  41. package/dist/{chunk-D34YIJGE.js → chunk-2SLDVFOZ.js} +4 -4
  42. package/dist/{chunk-D34YIJGE.js.map → chunk-2SLDVFOZ.js.map} +1 -1
  43. package/dist/{chunk-6SWK5QCT.cjs → chunk-33PWCTND.cjs} +21 -21
  44. package/dist/{chunk-6SWK5QCT.cjs.map → chunk-33PWCTND.cjs.map} +1 -1
  45. package/dist/{chunk-LZROSRGK.cjs → chunk-3X37I6QE.cjs} +10 -10
  46. package/dist/{chunk-LZROSRGK.cjs.map → chunk-3X37I6QE.cjs.map} +1 -1
  47. package/dist/{chunk-3VCVMW5X.cjs → chunk-4RJPTXUQ.cjs} +5 -5
  48. package/dist/{chunk-3VCVMW5X.cjs.map → chunk-4RJPTXUQ.cjs.map} +1 -1
  49. package/dist/{chunk-GWTKLPBJ.js → chunk-5CWBAINB.js} +3 -3
  50. package/dist/{chunk-GWTKLPBJ.js.map → chunk-5CWBAINB.js.map} +1 -1
  51. package/dist/{chunk-X5GO56JN.js → chunk-64DMXUYS.js} +3 -3
  52. package/dist/{chunk-X5GO56JN.js.map → chunk-64DMXUYS.js.map} +1 -1
  53. package/dist/{chunk-PBIFISDD.js → chunk-7P24MJQN.js} +3 -3
  54. package/dist/{chunk-PBIFISDD.js.map → chunk-7P24MJQN.js.map} +1 -1
  55. package/dist/{chunk-CLOYC6QG.cjs → chunk-7YHGLYRJ.cjs} +67 -67
  56. package/dist/{chunk-CLOYC6QG.cjs.map → chunk-7YHGLYRJ.cjs.map} +1 -1
  57. package/dist/{chunk-2CH22I7M.js → chunk-AMP7KX7F.js} +3 -3
  58. package/dist/{chunk-2CH22I7M.js.map → chunk-AMP7KX7F.js.map} +1 -1
  59. package/dist/{chunk-UQAHDGYH.cjs → chunk-CCSF7RI4.cjs} +5 -5
  60. package/dist/{chunk-UQAHDGYH.cjs.map → chunk-CCSF7RI4.cjs.map} +1 -1
  61. package/dist/{chunk-QK546T4C.cjs → chunk-CKNUL4LM.cjs} +3 -3
  62. package/dist/{chunk-QK546T4C.cjs.map → chunk-CKNUL4LM.cjs.map} +1 -1
  63. package/dist/{chunk-6USEJFPC.cjs → chunk-COZDIUG7.cjs} +24 -24
  64. package/dist/chunk-COZDIUG7.cjs.map +1 -0
  65. package/dist/{chunk-SLX2YIUA.cjs → chunk-EOIJ5JYP.cjs} +4 -4
  66. package/dist/{chunk-SLX2YIUA.cjs.map → chunk-EOIJ5JYP.cjs.map} +1 -1
  67. package/dist/{chunk-LMKEDVEB.cjs → chunk-F73EZQT4.cjs} +4 -4
  68. package/dist/{chunk-LMKEDVEB.cjs.map → chunk-F73EZQT4.cjs.map} +1 -1
  69. package/dist/{chunk-J55WDXIR.js → chunk-G4OZQFES.js} +3 -3
  70. package/dist/{chunk-J55WDXIR.js.map → chunk-G4OZQFES.js.map} +1 -1
  71. package/dist/{chunk-JHLIVEJI.js → chunk-GRDLCRNL.js} +5 -5
  72. package/dist/{chunk-JHLIVEJI.js.map → chunk-GRDLCRNL.js.map} +1 -1
  73. package/dist/{chunk-XPB6KMPY.cjs → chunk-HVOPUYAG.cjs} +19 -19
  74. package/dist/{chunk-XPB6KMPY.cjs.map → chunk-HVOPUYAG.cjs.map} +1 -1
  75. package/dist/{chunk-TL7SHXBN.js → chunk-IC6SBDYA.js} +3 -3
  76. package/dist/{chunk-TL7SHXBN.js.map → chunk-IC6SBDYA.js.map} +1 -1
  77. package/dist/{chunk-QTZ25F5G.js → chunk-IFLFLP4K.js} +5 -5
  78. package/dist/{chunk-QTZ25F5G.js.map → chunk-IFLFLP4K.js.map} +1 -1
  79. package/dist/{chunk-C3SLFANS.js → chunk-ITS3USZ3.js} +5 -5
  80. package/dist/{chunk-C3SLFANS.js.map → chunk-ITS3USZ3.js.map} +1 -1
  81. package/dist/{chunk-SEH4ZDN5.js → chunk-IUFS3AYQ.js} +7 -7
  82. package/dist/{chunk-SEH4ZDN5.js.map → chunk-IUFS3AYQ.js.map} +1 -1
  83. package/dist/{chunk-3IRJ4MTF.cjs → chunk-J25NN3XJ.cjs} +14 -14
  84. package/dist/{chunk-3IRJ4MTF.cjs.map → chunk-J25NN3XJ.cjs.map} +1 -1
  85. package/dist/{chunk-TX4CIWH5.cjs → chunk-JBL4PPEE.cjs} +6 -6
  86. package/dist/{chunk-TX4CIWH5.cjs.map → chunk-JBL4PPEE.cjs.map} +1 -1
  87. package/dist/{chunk-QUSDMOSF.js → chunk-JWRTUYLC.js} +3 -3
  88. package/dist/{chunk-QUSDMOSF.js.map → chunk-JWRTUYLC.js.map} +1 -1
  89. package/dist/{chunk-XGJU2Y5N.cjs → chunk-LBKTTQUR.cjs} +7 -7
  90. package/dist/{chunk-XGJU2Y5N.cjs.map → chunk-LBKTTQUR.cjs.map} +1 -1
  91. package/dist/{chunk-SMM32PL6.cjs → chunk-M42XWNS6.cjs} +4 -4
  92. package/dist/{chunk-SMM32PL6.cjs.map → chunk-M42XWNS6.cjs.map} +1 -1
  93. package/dist/{chunk-F3VIBHH2.cjs → chunk-MAKTAR7H.cjs} +18 -18
  94. package/dist/{chunk-F3VIBHH2.cjs.map → chunk-MAKTAR7H.cjs.map} +1 -1
  95. package/dist/{chunk-2TOM5FT5.js → chunk-NDVLCOWS.js} +12 -12
  96. package/dist/chunk-NDVLCOWS.js.map +1 -0
  97. package/dist/{chunk-UJI52BUA.js → chunk-OI4DL2DX.js} +3 -3
  98. package/dist/{chunk-UJI52BUA.js.map → chunk-OI4DL2DX.js.map} +1 -1
  99. package/dist/{chunk-7BH55CGS.js → chunk-OZL5ABLF.js} +4 -4
  100. package/dist/{chunk-7BH55CGS.js.map → chunk-OZL5ABLF.js.map} +1 -1
  101. package/dist/{chunk-7S3CTSF7.js → chunk-PKDPQS6Z.js} +3 -3
  102. package/dist/{chunk-7S3CTSF7.js.map → chunk-PKDPQS6Z.js.map} +1 -1
  103. package/dist/{chunk-LIOT6WLN.js → chunk-PVPGD6QR.js} +3 -3
  104. package/dist/{chunk-LIOT6WLN.js.map → chunk-PVPGD6QR.js.map} +1 -1
  105. package/dist/{chunk-HISU5HLW.js → chunk-QUZPQWPX.js} +3 -3
  106. package/dist/{chunk-HISU5HLW.js.map → chunk-QUZPQWPX.js.map} +1 -1
  107. package/dist/{chunk-RCBGX4IC.cjs → chunk-RGPKW6KQ.cjs} +4 -4
  108. package/dist/{chunk-RCBGX4IC.cjs.map → chunk-RGPKW6KQ.cjs.map} +1 -1
  109. package/dist/{chunk-VFBQBWZI.js → chunk-TAI23FCY.js} +46 -43
  110. package/dist/chunk-TAI23FCY.js.map +1 -0
  111. package/dist/{chunk-ONML6J5O.cjs → chunk-UDMII47W.cjs} +8 -8
  112. package/dist/{chunk-ONML6J5O.cjs.map → chunk-UDMII47W.cjs.map} +1 -1
  113. package/dist/{chunk-ABEKUV6L.js → chunk-VDXKB4WK.js} +82 -77
  114. package/dist/chunk-VDXKB4WK.js.map +1 -0
  115. package/dist/{chunk-MEMWZ72Y.cjs → chunk-WVEFRQSW.cjs} +81 -76
  116. package/dist/chunk-WVEFRQSW.cjs.map +1 -0
  117. package/dist/{chunk-PJW2IOPZ.cjs → chunk-X3JJTHQ4.cjs} +51 -51
  118. package/dist/{chunk-PJW2IOPZ.cjs.map → chunk-X3JJTHQ4.cjs.map} +1 -1
  119. package/dist/{chunk-4OJGFYB5.cjs → chunk-Y6ZNWC7E.cjs} +47 -44
  120. package/dist/chunk-Y6ZNWC7E.cjs.map +1 -0
  121. package/dist/{chunk-B63TSC3W.js → chunk-ZZTH27G7.js} +3 -3
  122. package/dist/{chunk-B63TSC3W.js.map → chunk-ZZTH27G7.js.map} +1 -1
  123. package/dist/connect/docx.cjs +13 -13
  124. package/dist/connect/docx.js +9 -9
  125. package/dist/connect/index.cjs +694 -694
  126. package/dist/connect/index.js +36 -36
  127. package/dist/connect/viewer.cjs +7 -7
  128. package/dist/connect/viewer.js +6 -6
  129. package/dist/connection/workflows/ConnectedWorkflowsPage.d.ts +7 -1
  130. package/dist/dashboards/index.cjs +1 -1
  131. package/dist/dashboards/index.js +1 -1
  132. package/dist/document-tools/index.cjs +17 -17
  133. package/dist/document-tools/index.js +2 -2
  134. package/dist/embed/index.cjs +13 -13
  135. package/dist/embed/index.js +10 -10
  136. package/dist/facts/index.cjs +40 -40
  137. package/dist/facts/index.js +4 -4
  138. package/dist/files/index.cjs +1 -1
  139. package/dist/files/index.js +1 -1
  140. package/dist/index.cjs +434 -434
  141. package/dist/index.js +13 -13
  142. package/dist/settings/index.cjs +156 -156
  143. package/dist/settings/index.js +2 -2
  144. package/dist/shell/TabHeader.d.ts +6 -1
  145. package/dist/shell/index.cjs +3 -3
  146. package/dist/shell/index.js +1 -1
  147. package/dist/site/index.cjs +22 -22
  148. package/dist/site/index.js +2 -2
  149. package/dist/studio/index.cjs +3 -3
  150. package/dist/studio/index.js +3 -3
  151. package/dist/workflow-canvas/index.cjs +64 -40
  152. package/dist/workflow-canvas/index.cjs.map +1 -1
  153. package/dist/workflow-canvas/index.js +49 -25
  154. package/dist/workflow-canvas/index.js.map +1 -1
  155. package/node_modules/@arbidocs/coedit/package.json +1 -1
  156. package/package.json +5 -5
  157. package/dist/ConnectedNativeDocxComparison-3MCCETF5.js.map +0 -1
  158. package/dist/ConnectedNativeDocxComparison-XZIRCESL.cjs.map +0 -1
  159. package/dist/ConnectedNativeDocxEditor-FGW35PIL.js.map +0 -1
  160. package/dist/ConnectedNativeDocxEditor-YE6KA53Q.cjs.map +0 -1
  161. package/dist/ConnectedStreamedWordArtifact-N6YRKWDH.js.map +0 -1
  162. package/dist/ConnectedStreamedWordArtifact-ROPYU3LE.cjs.map +0 -1
  163. package/dist/chunk-2TOM5FT5.js.map +0 -1
  164. package/dist/chunk-4OJGFYB5.cjs.map +0 -1
  165. package/dist/chunk-6USEJFPC.cjs.map +0 -1
  166. package/dist/chunk-ABEKUV6L.js.map +0 -1
  167. package/dist/chunk-MEMWZ72Y.cjs.map +0 -1
  168. package/dist/chunk-VFBQBWZI.js.map +0 -1
@@ -173,6 +173,7 @@ function TabHeader({
173
173
  centerContent,
174
174
  absoluteCenterContent,
175
175
  rightContent,
176
+ belowContent,
176
177
  className,
177
178
  compactBreakpoint = 640,
178
179
  labels,
@@ -210,98 +211,102 @@ function TabHeader({
210
211
  const active = scroller?.querySelector('[data-slot="tab"][data-state="active"]');
211
212
  if (scroller && active) scrollRowToShow(scroller, active);
212
213
  }, [activeTabId]);
213
- return /* @__PURE__ */ jsxRuntime.jsx(
214
+ const below = typeof belowContent === "function" ? belowContent(isCompact) : belowContent;
215
+ return /* @__PURE__ */ jsxRuntime.jsxs(
214
216
  "div",
215
217
  {
216
218
  ref: containerRef,
217
219
  className: ui.cn("w-full bg-background pt-1 pr-3 pb-2", className),
218
220
  "data-slot": "tab-header",
219
221
  "data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "tab-header" }),
220
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative bg-background", children: [
221
- /* @__PURE__ */ jsxRuntime.jsx(
222
- "span",
223
- {
224
- "aria-hidden": true,
225
- className: "pointer-events-none absolute inset-x-0 bottom-0 h-px bg-border"
226
- }
227
- ),
228
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex min-h-[40px] items-end justify-between gap-4", children: [
229
- leading && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-1.5 left-1.5 z-10 flex items-center", children: leading }),
230
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex min-w-0 flex-shrink items-end", children: [
222
+ children: [
223
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative bg-background", children: [
224
+ /* @__PURE__ */ jsxRuntime.jsx(
225
+ "span",
226
+ {
227
+ "aria-hidden": true,
228
+ className: "pointer-events-none absolute inset-x-0 bottom-0 h-px bg-border"
229
+ }
230
+ ),
231
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex min-h-[40px] items-end justify-between gap-4", children: [
232
+ leading && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-1.5 left-1.5 z-10 flex items-center", children: leading }),
233
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex min-w-0 flex-shrink items-end", children: [
234
+ /* @__PURE__ */ jsxRuntime.jsx(
235
+ "div",
236
+ {
237
+ ref: scrollerRef,
238
+ "data-slot": "tab-scroller",
239
+ className: ui.cn(
240
+ "flex min-w-0 items-end overflow-x-auto overflow-y-hidden pt-1",
241
+ leading ? "pl-8" : "pl-3"
242
+ ),
243
+ children: leftContent || /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-end gap-1", children: [
244
+ tabs.map((tab, index) => {
245
+ const tabButton = /* @__PURE__ */ jsxRuntime.jsx(
246
+ TabButton,
247
+ {
248
+ tab,
249
+ isActive: activeTabId === tab.id,
250
+ isChip: isChipRow,
251
+ isCompact: isCompact && tabs.length > 1,
252
+ onTabChange,
253
+ labels: mergedLabels,
254
+ testIds
255
+ },
256
+ tab.id
257
+ );
258
+ const renderedTab = !tab.tooltip ? tabButton : /* @__PURE__ */ jsxRuntime.jsxs(ui.Tooltip, { children: [
259
+ /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipTrigger, { asChild: true, children: tabButton }),
260
+ /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipContent, { side: "bottom", children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: tab.tooltip }) })
261
+ ] }, tab.id);
262
+ if (index !== 0 || !firstTabContent) return renderedTab;
263
+ return /* @__PURE__ */ jsxRuntime.jsxs(
264
+ "div",
265
+ {
266
+ "data-slot": "count-tab-group",
267
+ className: "flex shrink-0 items-end gap-1",
268
+ children: [
269
+ renderedTab,
270
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cn("self-center", COMPACT_SECTION), children: typeof firstTabContent === "function" ? firstTabContent(isCompact) : firstTabContent })
271
+ ]
272
+ },
273
+ tab.id
274
+ );
275
+ }),
276
+ afterTabs && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cn("self-center", COMPACT_SECTION), children: typeof afterTabs === "function" ? afterTabs(isCompact) : afterTabs })
277
+ ] })
278
+ }
279
+ ),
280
+ canScrollEnd && /* @__PURE__ */ jsxRuntime.jsx(
281
+ "span",
282
+ {
283
+ "aria-hidden": true,
284
+ "data-slot": "tab-scroll-cue",
285
+ className: "pointer-events-none absolute inset-y-0 right-0 w-8 bg-gradient-to-l from-background to-transparent"
286
+ }
287
+ )
288
+ ] }),
289
+ centerContent && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cn("flex min-w-fit flex-1 items-center self-center", COMPACT_SECTION), children: typeof centerContent === "function" ? centerContent(isCompact) : centerContent }),
290
+ absoluteCenterContent && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none absolute inset-0 z-10 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-auto", children: absoluteCenterContent }) }),
231
291
  /* @__PURE__ */ jsxRuntime.jsx(
232
292
  "div",
233
293
  {
234
- ref: scrollerRef,
235
- "data-slot": "tab-scroller",
236
294
  className: ui.cn(
237
- "flex min-w-0 items-end overflow-x-auto overflow-y-hidden pt-1",
238
- leading ? "pl-8" : "pl-3"
295
+ "flex flex-shrink-0 items-center justify-end gap-2 self-center",
296
+ COMPACT_SECTION
239
297
  ),
240
- children: leftContent || /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-end gap-1", children: [
241
- tabs.map((tab, index) => {
242
- const tabButton = /* @__PURE__ */ jsxRuntime.jsx(
243
- TabButton,
244
- {
245
- tab,
246
- isActive: activeTabId === tab.id,
247
- isChip: isChipRow,
248
- isCompact: isCompact && tabs.length > 1,
249
- onTabChange,
250
- labels: mergedLabels,
251
- testIds
252
- },
253
- tab.id
254
- );
255
- const renderedTab = !tab.tooltip ? tabButton : /* @__PURE__ */ jsxRuntime.jsxs(ui.Tooltip, { children: [
256
- /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipTrigger, { asChild: true, children: tabButton }),
257
- /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipContent, { side: "bottom", children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: tab.tooltip }) })
258
- ] }, tab.id);
259
- if (index !== 0 || !firstTabContent) return renderedTab;
260
- return /* @__PURE__ */ jsxRuntime.jsxs(
261
- "div",
262
- {
263
- "data-slot": "count-tab-group",
264
- className: "flex shrink-0 items-end gap-1",
265
- children: [
266
- renderedTab,
267
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cn("self-center", COMPACT_SECTION), children: typeof firstTabContent === "function" ? firstTabContent(isCompact) : firstTabContent })
268
- ]
269
- },
270
- tab.id
271
- );
272
- }),
273
- afterTabs && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cn("self-center", COMPACT_SECTION), children: typeof afterTabs === "function" ? afterTabs(isCompact) : afterTabs })
274
- ] })
275
- }
276
- ),
277
- canScrollEnd && /* @__PURE__ */ jsxRuntime.jsx(
278
- "span",
279
- {
280
- "aria-hidden": true,
281
- "data-slot": "tab-scroll-cue",
282
- className: "pointer-events-none absolute inset-y-0 right-0 w-8 bg-gradient-to-l from-background to-transparent"
298
+ children: typeof rightContent === "function" ? rightContent(isCompact) : rightContent
283
299
  }
284
300
  )
285
- ] }),
286
- centerContent && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cn("flex min-w-fit flex-1 items-center self-center", COMPACT_SECTION), children: typeof centerContent === "function" ? centerContent(isCompact) : centerContent }),
287
- absoluteCenterContent && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none absolute inset-0 z-10 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-auto", children: absoluteCenterContent }) }),
288
- /* @__PURE__ */ jsxRuntime.jsx(
289
- "div",
290
- {
291
- className: ui.cn(
292
- "flex flex-shrink-0 items-center justify-end gap-2 self-center",
293
- COMPACT_SECTION
294
- ),
295
- children: typeof rightContent === "function" ? rightContent(isCompact) : rightContent
296
- }
297
- )
298
- ] })
299
- ] })
301
+ ] })
302
+ ] }),
303
+ below != null && below !== false && /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "tab-header-below", className: "flex items-center pt-2 pl-3", children: below })
304
+ ]
300
305
  }
301
306
  );
302
307
  }
303
308
 
304
309
  exports.DEFAULT_TAB_HEADER_LABELS = DEFAULT_TAB_HEADER_LABELS;
305
310
  exports.TabHeader = TabHeader;
306
- //# sourceMappingURL=chunk-MEMWZ72Y.cjs.map
307
- //# sourceMappingURL=chunk-MEMWZ72Y.cjs.map
311
+ //# sourceMappingURL=chunk-WVEFRQSW.cjs.map
312
+ //# sourceMappingURL=chunk-WVEFRQSW.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shell/TabHeader.tsx"],"names":["useCallback","cn","jsx","jsxs","testIdOr","Fragment","Badge","Tooltip","TooltipTrigger","X","TooltipContent","useRef","useState","useEffect","observeResize"],"mappings":"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","file":"chunk-WVEFRQSW.cjs","sourcesContent":["import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n} from 'react'\nimport { X } from 'lucide-react'\nimport { Badge, cn, Tooltip, TooltipContent, TooltipTrigger } from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\nimport { observeResize } from '../lib/observe-resize'\n\n/** Fixed strings of the tab row. */\nexport interface TabHeaderLabels {\n /** A tab's close button (a tab's own `closeTooltip` wins). */\n closeTab: string\n}\n\nexport const DEFAULT_TAB_HEADER_LABELS: TabHeaderLabels = {\n closeTab: 'Close tab',\n}\n\nexport interface Tab {\n id: string\n label: string | ReactNode\n testId?: string\n icon?: ReactNode\n /**\n * An entity pill (conversation, workspace, …) shown in place of the icon + label. The app\n * renders it, so the block stays free of entity components.\n */\n pill?: ReactNode\n count?: number\n /** Where the count sits relative to the label. Defaults to 'trailing'. */\n countPlacement?: 'leading' | 'trailing'\n /** Glyph INSIDE the count, in front of the number, so icon and count read as one object. */\n countIcon?: ReactNode\n /** Classes for the number alone (e.g. a filled pill), leaving the glyph as it is. */\n countClassName?: string\n badge?: string | ReactNode\n disabled?: boolean\n tooltip?: string\n actions?: ReactNode\n /** Hover handlers from actions (e.g. a filter dropdown), attached to the whole tab wrapper. */\n actionsHoverHandlers?: { onMouseEnter: () => void; onMouseLeave: () => void }\n isProcessing?: boolean\n isVariable?: boolean\n onClose?: () => void\n closeTooltip?: string\n hasActiveFilters?: boolean\n /** Entity count header without selectable-tab chrome (Facts, Tasks, Files). */\n presentation?: 'tab' | 'count'\n /** Extra classes for the tab button. */\n tabClassName?: string\n}\n\n/** Forces buttons in a header section to a uniform compact size (28px, 14px text). */\nconst COMPACT_SECTION =\n '[&_button]:h-7 [&_button]:px-2 [&_button]:py-0 [&_button]:text-sm [&_button]:font-medium ' +\n '[&_[role=button]]:h-7 [&_[role=button]]:px-2 [&_[role=button]]:py-0 [&_[role=button]]:text-sm [&_[role=button]]:font-medium ' +\n // Touch: the compact 28px floor is lifted to 44px (important beats the rules above).\n 'pointer-coarse:[&_button]:h-11! pointer-coarse:[&_[role=button]]:h-11!'\n\ninterface TabButtonProps {\n tab: Tab\n isActive: boolean\n /** Closable-items row: a soft chip with a close button instead of an underline. */\n isChip: boolean\n isCompact: boolean\n onTabChange: (tabId: string) => void\n labels: TabHeaderLabels\n testIds?: TabHeaderProps['testIds']\n}\n\nfunction TabButton({\n tab,\n isActive,\n isChip,\n isCompact,\n onTabChange,\n labels,\n testIds,\n}: TabButtonProps) {\n // Compact mode (narrow header) collapses every INACTIVE tab that has an icon to icon-only so\n // the trailing controls are never pushed off the edge. The active tab keeps a truncated title:\n // otherwise two icon-only tabs cannot be told apart on a phone. Collapsed tabs keep an\n // accessible name and a title with their label; label-only tabs keep their text.\n const hideLabel = isCompact && !!tab.icon && !isActive\n const handleClick = useCallback(() => {\n if (!tab.disabled) onTabChange(tab.id)\n }, [tab.disabled, tab.id, onTabChange])\n\n // div+role=button needs explicit keyboard handling; Space must not scroll the page.\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (tab.disabled) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onTabChange(tab.id)\n }\n },\n [tab.disabled, tab.id, onTabChange]\n )\n\n const handleClose = useCallback(\n (e: MouseEvent) => {\n e.stopPropagation()\n tab.onClose?.()\n },\n [tab]\n )\n\n // Two looks, chosen by the row: a row that holds closable items (conversations, open panels)\n // shows soft chips, the active one filled, so \"close\" has an obvious owner. Every other row is a\n // plain underline: ink text + a 2px primary underline for the active tab, nothing else.\n const className = cn(\n 'group relative z-[1] flex pointer-coarse:h-11 cursor-pointer items-center justify-start text-left text-sm transition-colors',\n isChip\n ? 'h-8 max-w-[260px] rounded-md px-2.5'\n : 'h-9 max-w-[320px] border-b-2 bg-transparent px-2.5',\n isChip\n ? isActive\n ? 'bg-muted font-semibold text-foreground'\n : 'bg-transparent font-medium text-muted-foreground hover:bg-muted/60 hover:text-foreground'\n : isActive\n ? 'border-b-primary font-semibold text-foreground'\n : 'border-b-transparent font-medium text-muted-foreground hover:text-foreground',\n // Touch: an icon-only tab still meets the 44px target; a titled active tab truncates.\n isCompact && tab.icon && (isActive ? 'max-w-[45vw]' : 'pointer-coarse:min-w-11 justify-center'),\n tab.disabled && 'cursor-not-allowed opacity-50',\n tab.presentation === 'count' &&\n 'rounded-none border-transparent bg-transparent pl-0 font-normal hover:bg-transparent',\n tab.tabClassName\n )\n\n const countValue = tab.isProcessing ? (\n <span className=\"animate-pulse\">{tab.count}</span>\n ) : (\n tab.count\n )\n const countBadge =\n tab.count === undefined ? null : (\n // A plain muted number, a footnote to the label. A filtered count switches to primary ink so\n // \"this is narrowed\" still reads without a fill.\n <span\n data-testid={testIdOr(testIds?.count, { testId: 'tab-count' })}\n className={cn(\n 'flex-shrink-0 items-center justify-center gap-1 font-normal leading-none tabular-nums',\n tab.countIcon ? 'text-sm' : 'text-xs',\n tab.countPlacement === 'leading' ? 'mr-1.5' : 'ml-1.5',\n // Compact rows drop counts to save width, but a tab whose glyph lives in the count has\n // nothing else to show: there the count IS the tab.\n isCompact && !tab.countIcon ? 'hidden' : 'inline-flex',\n tab.hasActiveFilters ? 'text-primary' : 'text-muted-foreground'\n )}\n >\n {tab.countIcon && (\n <span aria-hidden className=\"flex shrink-0 items-center justify-center\">\n {tab.countIcon}\n </span>\n )}\n {tab.countClassName ? <span className={tab.countClassName}>{countValue}</span> : countValue}\n </span>\n )\n\n const content = tab.pill ? (\n // The outer wrapper hosts the processing dot outside the pill's bounds; the inner span keeps\n // the truncation the pill needs without clipping the dot.\n <span className=\"relative inline-flex min-w-0 items-center\">\n <span className=\"min-w-0 truncate overflow-hidden\">{tab.pill}</span>\n {tab.isProcessing && (\n <span className=\"absolute -right-1 -top-1 size-2 rounded-full border border-background bg-yellow-solid\" />\n )}\n </span>\n ) : (\n <>\n {tab.icon && (\n <span\n className={cn(\n 'flex size-5 flex-shrink-0 items-center justify-center',\n !hideLabel && 'mr-1.5'\n )}\n >\n {tab.icon}\n </span>\n )}\n {tab.countPlacement === 'leading' && countBadge}\n <span className={cn('truncate', hideLabel ? 'hidden' : 'inline')}>{tab.label}</span>\n {tab.countPlacement !== 'leading' && countBadge}\n {tab.badge &&\n (typeof tab.badge === 'string' ? (\n <Badge\n variant=\"outline\"\n className={cn('ml-1.5 truncate', isCompact ? 'max-w-[120px]' : 'max-w-none')}\n >\n {tab.badge}\n </Badge>\n ) : (\n <span className=\"ml-1.5 inline-flex items-center\">{tab.badge}</span>\n ))}\n </>\n )\n\n return (\n <div\n className={cn('flex items-end', isChip && 'pb-1')}\n data-testid={testIdOr(tab.testId, { testId: `${tab.id}-tab` })}\n onMouseEnter={tab.actionsHoverHandlers?.onMouseEnter}\n onMouseLeave={tab.actionsHoverHandlers?.onMouseLeave}\n >\n {/* role=button on a div, not a <button>: a tab whose badge holds a real interactive element\n (an entity tooltip trigger) would otherwise nest a button inside a button. */}\n <div\n role=\"button\"\n tabIndex={tab.disabled ? -1 : 0}\n aria-disabled={tab.disabled || undefined}\n aria-current={isActive ? 'true' : undefined}\n data-slot=\"tab\"\n data-state={isActive ? 'active' : 'inactive'}\n // Icon-only tabs expose the label for a11y and as a native title.\n aria-label={hideLabel && typeof tab.label === 'string' ? tab.label : undefined}\n title={hideLabel && !tab.tooltip && typeof tab.label === 'string' ? tab.label : undefined}\n className={className}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n {content}\n {tab.actions && (\n <span className=\"ml-auto flex-shrink-0\" onClick={(e) => e.stopPropagation()}>\n {tab.actions}\n </span>\n )}\n {tab.onClose && (\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n role=\"button\"\n tabIndex={0}\n className={cn(\n 'ml-0.5 inline-flex !size-4 flex-shrink-0 items-center justify-center rounded-sm !p-0 text-muted-foreground transition-colors hover:bg-foreground/10 hover:text-foreground pointer-coarse:!size-11',\n // A chip row keeps the close button quiet until the chip is the active one or is\n // hovered or focused; touch always shows it (there is no hover).\n isChip &&\n !isActive &&\n 'opacity-0 group-hover:opacity-100 group-focus-within:opacity-100 pointer-coarse:opacity-100'\n )}\n onClick={handleClose}\n aria-label={tab.closeTooltip || labels.closeTab}\n data-testid={testIdOr(testIds?.closeButton, { testId: 'close-tab-button' })}\n >\n <X className=\"size-3\" />\n </span>\n </TooltipTrigger>\n <TooltipContent>\n <p>{tab.closeTooltip || labels.closeTab}</p>\n </TooltipContent>\n </Tooltip>\n )}\n </div>\n </div>\n )\n}\n\nexport interface TabHeaderProps {\n tabs: Tab[]\n activeTabId: string\n onTabChange: (tabId: string) => void\n /** Pinned to the far left before the tabs (e.g. the sidebar toggle). */\n leading?: ReactNode\n leftContent?: ReactNode\n /** Controls attached to the first count tab, before any additional tabs. */\n firstTabContent?: ReactNode | ((isCompact: boolean) => ReactNode)\n afterTabs?: ReactNode | ((isCompact: boolean) => ReactNode)\n centerContent?: ReactNode | ((isCompact: boolean) => ReactNode)\n /** Pinned to the true horizontal center of the row, independent of left/right widths. */\n absoluteCenterContent?: ReactNode\n rightContent?: ReactNode | ((isCompact: boolean) => ReactNode)\n /**\n * A row under the tabs, e.g. a filter that leaves the tab row on a narrow header (return it\n * for `isCompact` only) so the tabs keep their room. Nothing rendered when it returns nothing.\n */\n belowContent?: ReactNode | ((isCompact: boolean) => ReactNode)\n className?: string\n /** Header width below which tabs collapse to icons. */\n compactBreakpoint?: number\n labels?: Partial<TabHeaderLabels>\n /**\n * `chips` renders every tab as a soft chip (for rows of closable items), `underline` as a plain\n * underline tab. Default: chips when any tab can be closed, underline otherwise.\n */\n variant?: 'underline' | 'chips'\n /** Root id (default `tab-header`). */\n testId?: string\n /**\n * Per-tab ids; defaults are the current ids. A tab's own id is `Tab.testId`, else `<tab id>-tab`\n * (structural).\n */\n testIds?: Partial<Record<'count' | 'closeButton', string>>\n}\n\n/** Scroll `row` sideways (only it, no ancestor) so `item` is fully visible. */\nfunction scrollRowToShow(row: HTMLElement, item: Element): void {\n const r = row.getBoundingClientRect()\n const i = item.getBoundingClientRect()\n if (i.left < r.left) row.scrollLeft -= r.left - i.left\n else if (i.right > r.right) row.scrollLeft += i.right - r.right\n}\n\n/** Underline tab row with leading / center / right slots; collapses to icons when narrow. */\nexport function TabHeader({\n tabs,\n activeTabId,\n onTabChange,\n leading,\n leftContent,\n firstTabContent,\n afterTabs,\n centerContent,\n absoluteCenterContent,\n rightContent,\n belowContent,\n className,\n compactBreakpoint = 640,\n labels,\n variant,\n testId,\n testIds,\n}: TabHeaderProps) {\n const mergedLabels = { ...DEFAULT_TAB_HEADER_LABELS, ...labels }\n const isChipRow = variant ? variant === 'chips' : tabs.some((tab) => !!tab.onClose)\n const containerRef = useRef<HTMLDivElement>(null)\n const scrollerRef = useRef<HTMLDivElement>(null)\n const [isCompact, setIsCompact] = useState(false)\n const [canScrollEnd, setCanScrollEnd] = useState(false)\n\n useEffect(() => {\n const container = containerRef.current\n if (!container) return\n return observeResize(container, (entries) => {\n for (const entry of entries) setIsCompact(entry.contentRect.width < compactBreakpoint)\n })\n }, [compactBreakpoint])\n\n // Overflow cue: track whether tabs are hidden past the trailing edge.\n useEffect(() => {\n const scroller = scrollerRef.current\n if (!scroller) return\n const update = () =>\n setCanScrollEnd(scroller.scrollLeft + scroller.clientWidth < scroller.scrollWidth - 1)\n update()\n scroller.addEventListener('scroll', update, { passive: true })\n const stopObserving = observeResize(scroller, update)\n return () => {\n scroller.removeEventListener('scroll', update)\n stopObserving()\n }\n }, [tabs.length])\n\n // Keep the active tab visible when it changes (or on first render) in a scrolling row. Only the\n // row scrolls, sideways: `scrollIntoView` would also scroll every ancestor, so a tab header below\n // the fold dragged the whole page down to it on load.\n useEffect(() => {\n const scroller = scrollerRef.current\n const active = scroller?.querySelector('[data-slot=\"tab\"][data-state=\"active\"]')\n if (scroller && active) scrollRowToShow(scroller, active)\n }, [activeTabId])\n\n const below = typeof belowContent === 'function' ? belowContent(isCompact) : belowContent\n\n return (\n <div\n ref={containerRef}\n className={cn('w-full bg-background pt-1 pr-3 pb-2', className)}\n data-slot=\"tab-header\"\n data-testid={testIdOr(testId, { testId: 'tab-header' })}\n >\n <div className=\"relative bg-background\">\n {/* The hairline lives on this non-scrolling wrapper: overflow-y-hidden on the scroll row\n would clip the active tab's underline overhang. The tabs paint over the line. */}\n <span\n aria-hidden\n className=\"pointer-events-none absolute inset-x-0 bottom-0 h-px bg-border\"\n />\n {/* overflow-y-hidden is mandatory: overflow-x-auto alone makes the browser compute\n overflow-y to `auto` too, surfacing a phantom vertical scrollbar from sub-pixel\n overflow (e.g. the processing dot's -top-1). pt-1 keeps that dot inside the clip box. */}\n <div className=\"relative flex min-h-[40px] items-end justify-between gap-4\">\n {/* Leading slot: placed in the left margin (the pl-8 gap), claiming no extra width. */}\n {leading && (\n <div className=\"absolute bottom-1.5 left-1.5 z-10 flex items-center\">{leading}</div>\n )}\n {/* Only the tabs scroll: the center and right slots sit outside the scroller so they can\n never overlap a tab, and a fade at the trailing edge signals that more tabs exist. */}\n <div className=\"relative flex min-w-0 flex-shrink items-end\">\n <div\n ref={scrollerRef}\n data-slot=\"tab-scroller\"\n className={cn(\n 'flex min-w-0 items-end overflow-x-auto overflow-y-hidden pt-1',\n leading ? 'pl-8' : 'pl-3'\n )}\n >\n {leftContent || (\n <div className=\"flex items-end gap-1\">\n {tabs.map((tab, index) => {\n const tabButton = (\n <TabButton\n key={tab.id}\n tab={tab}\n isActive={activeTabId === tab.id}\n isChip={isChipRow}\n // A lone tab competes with nothing: its label is the surface's title.\n isCompact={isCompact && tabs.length > 1}\n onTabChange={onTabChange}\n labels={mergedLabels}\n testIds={testIds}\n />\n )\n const renderedTab = !tab.tooltip ? (\n tabButton\n ) : (\n <Tooltip key={tab.id}>\n <TooltipTrigger asChild>{tabButton}</TooltipTrigger>\n {/* Below: the header can sit at the very top of the viewport. */}\n <TooltipContent side=\"bottom\">\n <p>{tab.tooltip}</p>\n </TooltipContent>\n </Tooltip>\n )\n if (index !== 0 || !firstTabContent) return renderedTab\n return (\n <div\n key={tab.id}\n data-slot=\"count-tab-group\"\n className=\"flex shrink-0 items-end gap-1\"\n >\n {renderedTab}\n <div className={cn('self-center', COMPACT_SECTION)}>\n {typeof firstTabContent === 'function'\n ? firstTabContent(isCompact)\n : firstTabContent}\n </div>\n </div>\n )\n })}\n {afterTabs && (\n <div className={cn('self-center', COMPACT_SECTION)}>\n {typeof afterTabs === 'function' ? afterTabs(isCompact) : afterTabs}\n </div>\n )}\n </div>\n )}\n </div>\n {canScrollEnd && (\n <span\n aria-hidden\n data-slot=\"tab-scroll-cue\"\n className=\"pointer-events-none absolute inset-y-0 right-0 w-8 bg-gradient-to-l from-background to-transparent\"\n />\n )}\n </div>\n\n {centerContent && (\n <div className={cn('flex min-w-fit flex-1 items-center self-center', COMPACT_SECTION)}>\n {typeof centerContent === 'function' ? centerContent(isCompact) : centerContent}\n </div>\n )}\n\n {/* pointer-events-none on the overlay so clicks reach the tabs beneath; the inner div\n re-enables them for the actual content. */}\n {absoluteCenterContent && (\n <div className=\"pointer-events-none absolute inset-0 z-10 flex items-center justify-center\">\n <div className=\"pointer-events-auto\">{absoluteCenterContent}</div>\n </div>\n )}\n\n <div\n className={cn(\n 'flex flex-shrink-0 items-center justify-end gap-2 self-center',\n COMPACT_SECTION\n )}\n >\n {typeof rightContent === 'function' ? rightContent(isCompact) : rightContent}\n </div>\n </div>\n </div>\n {below != null && below !== false && (\n <div data-slot=\"tab-header-below\" className=\"flex items-center pt-2 pl-3\">\n {below}\n </div>\n )}\n </div>\n )\n}\n"]}
@@ -3,17 +3,17 @@
3
3
 
4
4
  var chunkHYAYXLIZ_cjs = require('./chunk-HYAYXLIZ.cjs');
5
5
  var chunkKWJW5TMH_cjs = require('./chunk-KWJW5TMH.cjs');
6
- var chunkXGJU2Y5N_cjs = require('./chunk-XGJU2Y5N.cjs');
6
+ var chunkLBKTTQUR_cjs = require('./chunk-LBKTTQUR.cjs');
7
7
  var chunkEGJ7WJ6Q_cjs = require('./chunk-EGJ7WJ6Q.cjs');
8
- var chunkTX4CIWH5_cjs = require('./chunk-TX4CIWH5.cjs');
9
- var chunkONML6J5O_cjs = require('./chunk-ONML6J5O.cjs');
8
+ var chunkJBL4PPEE_cjs = require('./chunk-JBL4PPEE.cjs');
9
+ var chunkUDMII47W_cjs = require('./chunk-UDMII47W.cjs');
10
10
  var chunkT35SGVB2_cjs = require('./chunk-T35SGVB2.cjs');
11
11
  var chunkJH6JTI76_cjs = require('./chunk-JH6JTI76.cjs');
12
12
  var chunkZ3LFF3YT_cjs = require('./chunk-Z3LFF3YT.cjs');
13
13
  var chunkNSD37OF5_cjs = require('./chunk-NSD37OF5.cjs');
14
- var chunkXPB6KMPY_cjs = require('./chunk-XPB6KMPY.cjs');
14
+ var chunkHVOPUYAG_cjs = require('./chunk-HVOPUYAG.cjs');
15
15
  var chunk3T3IKNGF_cjs = require('./chunk-3T3IKNGF.cjs');
16
- var chunk4OJGFYB5_cjs = require('./chunk-4OJGFYB5.cjs');
16
+ var chunkY6ZNWC7E_cjs = require('./chunk-Y6ZNWC7E.cjs');
17
17
  var chunkQUMUAJ2P_cjs = require('./chunk-QUMUAJ2P.cjs');
18
18
  var chunk7JVP3LS6_cjs = require('./chunk-7JVP3LS6.cjs');
19
19
  var chunkKGAYUFXD_cjs = require('./chunk-KGAYUFXD.cjs');
@@ -38,25 +38,25 @@ function useSkillsEnabled() {
38
38
  }
39
39
  function useWorkflowDefinitions() {
40
40
  const { data: listings } = react.useSkills();
41
- const usage = chunkXPB6KMPY_cjs.useWorkflowUsage();
41
+ const usage = chunkHVOPUYAG_cjs.useWorkflowUsage();
42
42
  const skillsEnabled = useSkillsEnabled();
43
43
  return react$1.useMemo(() => {
44
44
  const { host: builtins, skills: fromServer } = chunk555BS22J_cjs.mergeSkillWorkflows(
45
- chunkXPB6KMPY_cjs.WEB_WORKFLOWS,
45
+ chunkHVOPUYAG_cjs.WEB_WORKFLOWS,
46
46
  listings ?? []
47
47
  );
48
48
  const all = [...builtins, ...fromServer];
49
49
  const byId = new Map(all.map((w) => [w.id, w]));
50
- const pinned = chunkXPB6KMPY_cjs.DASHBOARD_PINNED.flatMap((id) => {
50
+ const pinned = chunkHVOPUYAG_cjs.DASHBOARD_PINNED.flatMap((id) => {
51
51
  const w = byId.get(id);
52
52
  return w ? [w] : [];
53
53
  });
54
54
  return {
55
55
  skills: all,
56
56
  skillsEnabled,
57
- start: skillsEnabled ? [...builtins, ...chunkXPB6KMPY_cjs.sortByRecentUse(fromServer, usage)] : [],
58
- dashboard: [...pinned, ...chunkXPB6KMPY_cjs.DASHBOARD_OPERATIONS],
59
- forTasks: [chunkXPB6KMPY_cjs.CUSTOM_TASK, ...all.filter((w) => w.schedulable), chunkXPB6KMPY_cjs.REMIND_TASK]
57
+ start: skillsEnabled ? [...builtins, ...chunkHVOPUYAG_cjs.sortByRecentUse(fromServer, usage)] : [],
58
+ dashboard: [...pinned, ...chunkHVOPUYAG_cjs.DASHBOARD_OPERATIONS],
59
+ forTasks: [chunkHVOPUYAG_cjs.CUSTOM_TASK, ...all.filter((w) => w.schedulable), chunkHVOPUYAG_cjs.REMIND_TASK]
60
60
  };
61
61
  }, [listings, usage, skillsEnabled]);
62
62
  }
@@ -84,7 +84,7 @@ function useWorkflowTasks() {
84
84
  );
85
85
  const create = react$1.useCallback(
86
86
  async (ctx, forceWorkflow = false) => {
87
- const request = chunkXPB6KMPY_cjs.taskComposerToCreateRequest(
87
+ const request = chunkHVOPUYAG_cjs.taskComposerToCreateRequest(
88
88
  { ...ctx, documentTitles, plan: ctx.plan ?? null },
89
89
  activeWorkspaceId ?? void 0,
90
90
  forceWorkflow
@@ -126,7 +126,7 @@ function useWorkflowTasks() {
126
126
  );
127
127
  const update = react$1.useCallback(
128
128
  async (task, ctx) => {
129
- const patch = chunkXPB6KMPY_cjs.taskComposerToUpdateRequest({ ...ctx, plan: ctx.plan ?? null });
129
+ const patch = chunkHVOPUYAG_cjs.taskComposerToUpdateRequest({ ...ctx, plan: ctx.plan ?? null });
130
130
  if (task.is_owner === false) delete patch.shared;
131
131
  await updateConversation.mutateAsync({ conversationId: task.external_id, patch });
132
132
  },
@@ -134,7 +134,7 @@ function useWorkflowTasks() {
134
134
  );
135
135
  const updateWorkflow = react$1.useCallback(
136
136
  async (workflow, ctx) => {
137
- const patch = chunkXPB6KMPY_cjs.composerToWorkflowUpdate({ ...ctx, documentTitles, plan: ctx.plan ?? null });
137
+ const patch = chunkHVOPUYAG_cjs.composerToWorkflowUpdate({ ...ctx, documentTitles, plan: ctx.plan ?? null });
138
138
  if (workflow.is_owner === false) delete patch.shared;
139
139
  const workspaceId = workflow.workspace_ext_id ?? activeWorkspaceId;
140
140
  const updated = await updateWorkflowMutation.mutateAsync({
@@ -249,7 +249,7 @@ function ConnectedTaskComposer({
249
249
  const { tasks: allTasks } = react.useWorkItems();
250
250
  const { data: documents = [] } = react.useDocuments();
251
251
  const { create, update, updateWorkflow, isPending } = useWorkflowTasks();
252
- const scopeSource = chunkONML6J5O_cjs.useConnectedWorkflowScopeSource();
252
+ const scopeSource = chunkUDMII47W_cjs.useConnectedWorkflowScopeSource();
253
253
  const activeWorkspaceId = react.useArbiSessionState((s) => s.workspaceId);
254
254
  const activeWorkspace = react$1.useMemo(
255
255
  () => workspaces.find((w) => w.external_id === activeWorkspaceId) ?? null,
@@ -266,7 +266,7 @@ function ConnectedTaskComposer({
266
266
  const label = (t) => t.title?.trim() || "Untitled task";
267
267
  if (isWorkflow) return allTasks.map((t) => ({ id: t.external_id, name: label(t) }));
268
268
  const subject = task ?? { external_id: "__new__" };
269
- return chunkXPB6KMPY_cjs.moveTargets(
269
+ return chunkHVOPUYAG_cjs.moveTargets(
270
270
  [...allTasks.filter((t) => t.external_id !== subject.external_id), subject],
271
271
  subject
272
272
  ).map((t) => ({ id: t.external_id, name: label(t) }));
@@ -281,33 +281,33 @@ function ConnectedTaskComposer({
281
281
  );
282
282
  const initialValues = react$1.useMemo(() => {
283
283
  const ids = {
284
- customWorkflowId: chunkXPB6KMPY_cjs.CUSTOM_TASK_ID,
285
- reminderWorkflowId: chunkXPB6KMPY_cjs.REMIND_TASK_ID,
284
+ customWorkflowId: chunkHVOPUYAG_cjs.CUSTOM_TASK_ID,
285
+ reminderWorkflowId: chunkHVOPUYAG_cjs.REMIND_TASK_ID,
286
286
  definitions: forTasks
287
287
  };
288
288
  const base = launchWorkflow ? {
289
- ...chunkXPB6KMPY_cjs.workflowToComposerValues(launchWorkflow, ids),
289
+ ...chunkHVOPUYAG_cjs.workflowToComposerValues(launchWorkflow, ids),
290
290
  when: "once",
291
291
  runAt: "",
292
292
  rrule: "",
293
293
  eventKind: "",
294
294
  afterTaskId: "",
295
295
  name: ""
296
- } : editingWorkflow ? chunkXPB6KMPY_cjs.workflowToComposerValues(editingWorkflow, ids) : task ? chunkXPB6KMPY_cjs.taskToComposerValues(task, ids) : isWorkflow ? {
296
+ } : editingWorkflow ? chunkHVOPUYAG_cjs.workflowToComposerValues(editingWorkflow, ids) : task ? chunkHVOPUYAG_cjs.taskToComposerValues(task, ids) : isWorkflow ? {
297
297
  // Run now is the default start; scheduling is the fallback in the same field.
298
298
  assignee: "agent",
299
- workflowId: initialWorkflowId ?? chunkXPB6KMPY_cjs.CUSTOM_TASK_ID,
299
+ workflowId: initialWorkflowId ?? chunkHVOPUYAG_cjs.CUSTOM_TASK_ID,
300
300
  when: startLater ? "once" : "now",
301
301
  ...initialPrompt ? {
302
302
  inputs: {
303
- [initialWorkflowId === chunkXPB6KMPY_cjs.REMIND_TASK_ID ? "message" : "instruction"]: initialPrompt
303
+ [initialWorkflowId === chunkHVOPUYAG_cjs.REMIND_TASK_ID ? "message" : "instruction"]: initialPrompt
304
304
  }
305
305
  } : {},
306
306
  // A scheduled run needs an agent: the owner's Assistant unless another is picked.
307
307
  ...startLater && defaultAgentId ? { agentId: defaultAgentId } : {}
308
308
  } : initialAgentExtId ? (
309
309
  // Assigning an agent means agentic work: the free instruction, and tell me when done.
310
- { agentId: initialAgentExtId, workflowId: chunkXPB6KMPY_cjs.CUSTOM_TASK_ID, notifyOnComplete: true }
310
+ { agentId: initialAgentExtId, workflowId: chunkHVOPUYAG_cjs.CUSTOM_TASK_ID, notifyOnComplete: true }
311
311
  ) : {};
312
312
  return {
313
313
  timezone: chunkQUMUAJ2P_cjs.detectTimeZone(),
@@ -368,7 +368,7 @@ function ConnectedTaskComposer({
368
368
  const ctx = {
369
369
  workflow: chosen,
370
370
  values: submitted,
371
- plan: chosen.id === chunkXPB6KMPY_cjs.CUSTOM_TASK_ID ? plan : null
371
+ plan: chosen.id === chunkHVOPUYAG_cjs.CUSTOM_TASK_ID ? plan : null
372
372
  };
373
373
  try {
374
374
  if (isWorkflow && editingWorkflow && !options?.runOnce) {
@@ -404,7 +404,7 @@ function ConnectedTaskComposer({
404
404
  }
405
405
  };
406
406
  return /* @__PURE__ */ jsxRuntime.jsx(
407
- chunkXPB6KMPY_cjs.TaskComposer,
407
+ chunkHVOPUYAG_cjs.TaskComposer,
408
408
  {
409
409
  open,
410
410
  onOpenChange,
@@ -423,10 +423,10 @@ function ConnectedTaskComposer({
423
423
  isPending,
424
424
  planDrafting: planWork.isPending,
425
425
  hasPlan: plan !== null,
426
- renderIcon: chunkXPB6KMPY_cjs.renderWorkflowIcon,
426
+ renderIcon: chunkHVOPUYAG_cjs.renderWorkflowIcon,
427
427
  scopeSource,
428
428
  renderDocuments: (field, value, onChange) => /* @__PURE__ */ jsxRuntime.jsx(
429
- chunkONML6J5O_cjs.ConnectedWorkflowDocumentsField,
429
+ chunkUDMII47W_cjs.ConnectedWorkflowDocumentsField,
430
430
  {
431
431
  field,
432
432
  value,
@@ -457,8 +457,8 @@ function ConnectedTaskComposer({
457
457
  ...plan ? { addAndStart: "Approve plan and start", addAndSchedule: "Approve plan and schedule" } : {}
458
458
  },
459
459
  onSubmit: submit,
460
- goal: (values) => values.workflowId === chunkXPB6KMPY_cjs.CUSTOM_TASK_ID ? /* @__PURE__ */ jsxRuntime.jsx(
461
- chunkXPB6KMPY_cjs.TaskPlan,
460
+ goal: (values) => values.workflowId === chunkHVOPUYAG_cjs.CUSTOM_TASK_ID ? /* @__PURE__ */ jsxRuntime.jsx(
461
+ chunkHVOPUYAG_cjs.TaskPlan,
462
462
  {
463
463
  plan,
464
464
  onChange: setPlan,
@@ -504,7 +504,7 @@ function ConnectedWorkflowHistory({
504
504
  const { openConversation } = chunkT6GRWWRY_cjs.useBlocksEnvironment();
505
505
  const { data: runs = [], isLoading } = react.useWorkflowRuns(workflow?.external_id);
506
506
  return /* @__PURE__ */ jsxRuntime.jsx(
507
- chunkXPB6KMPY_cjs.TaskRunsDialog,
507
+ chunkHVOPUYAG_cjs.TaskRunsDialog,
508
508
  {
509
509
  inline,
510
510
  hideHeader,
@@ -540,14 +540,14 @@ function ConnectedTaskActivityDialog({
540
540
  const activity = react.useConversationActivity(conversationId, { live });
541
541
  const { data: agents = [] } = react.useAgents();
542
542
  const { userId } = chunkKGAYUFXD_cjs.useConnectedWorkspace();
543
- const { members } = chunkONML6J5O_cjs.useConnectedWorkspaceRole();
543
+ const { members } = chunkUDMII47W_cjs.useConnectedWorkspaceRole();
544
544
  const renderPerson = react$1.useCallback(
545
545
  (id) => {
546
546
  const isMe = !!id && id === userId;
547
547
  const member = members.find((m) => m.user.external_id === id)?.user;
548
548
  const name = member && [member.given_name, member.family_name].filter(Boolean).join(" ") || member?.email;
549
549
  const person = { id, label: isMe ? "You" : name || "Someone", isMe };
550
- return renderTaskPerson ? renderTaskPerson(person) : /* @__PURE__ */ jsxRuntime.jsx(chunk4OJGFYB5_cjs.PersonPill, { person });
550
+ return renderTaskPerson ? renderTaskPerson(person) : /* @__PURE__ */ jsxRuntime.jsx(chunkY6ZNWC7E_cjs.PersonPill, { person });
551
551
  },
552
552
  [renderTaskPerson, userId, members]
553
553
  );
@@ -556,7 +556,7 @@ function ConnectedTaskActivityDialog({
556
556
  [agents]
557
557
  );
558
558
  return /* @__PURE__ */ jsxRuntime.jsx(
559
- chunkXPB6KMPY_cjs.TaskActivityDialog,
559
+ chunkHVOPUYAG_cjs.TaskActivityDialog,
560
560
  {
561
561
  open: true,
562
562
  onOpenChange: (open) => !open && onClose(),
@@ -593,7 +593,7 @@ function useRenderTaskPerson() {
593
593
  return react$1.useCallback(
594
594
  (person) => {
595
595
  const user = person.id ? byId.get(person.id) : void 0;
596
- return user ? /* @__PURE__ */ jsxRuntime.jsx(chunkEGJ7WJ6Q_cjs.DocumentUser, { user, variant: "pill" }) : /* @__PURE__ */ jsxRuntime.jsx(chunk4OJGFYB5_cjs.PersonPill, { person });
596
+ return user ? /* @__PURE__ */ jsxRuntime.jsx(chunkEGJ7WJ6Q_cjs.DocumentUser, { user, variant: "pill" }) : /* @__PURE__ */ jsxRuntime.jsx(chunkY6ZNWC7E_cjs.PersonPill, { person });
597
597
  },
598
598
  [byId]
599
599
  );
@@ -606,7 +606,7 @@ function ConnectedThreadTaskBar({
606
606
  renderIcon
607
607
  }) {
608
608
  const { conversations } = react.useConversationItems();
609
- const { activity, items, related, signals, startedBy } = chunkXGJU2Y5N_cjs.useConnectedThreadActivity(conversationId);
609
+ const { activity, items, related, signals, startedBy } = chunkLBKTTQUR_cjs.useConnectedThreadActivity(conversationId);
610
610
  const canEditShared = react.useCanEditShared();
611
611
  const update = react.useUpdateConversation();
612
612
  const actOnStep = react.useActOnStep();
@@ -643,7 +643,7 @@ function ConnectedThreadTaskBar({
643
643
  ).finally(() => setBusy(false));
644
644
  };
645
645
  const strip = /* @__PURE__ */ jsxRuntime.jsx(
646
- chunkXPB6KMPY_cjs.WorkflowThreadStrip,
646
+ chunkHVOPUYAG_cjs.WorkflowThreadStrip,
647
647
  {
648
648
  renderIcon,
649
649
  ...variant === "steps" ? { maxSpan: 3, current: currentStepId, onSelectStep } : {},
@@ -672,7 +672,7 @@ function ConnectedThreadTaskBar({
672
672
  renderStepAction: (step, phase) => (
673
673
  // A signer or a draft's person acts on their step even on a thread they cannot edit.
674
674
  canEdit || phase === "waiting" || phase === "done" ? /* @__PURE__ */ jsxRuntime.jsx(
675
- chunkXPB6KMPY_cjs.WorkflowStepAction,
675
+ chunkHVOPUYAG_cjs.WorkflowStepAction,
676
676
  {
677
677
  step,
678
678
  phase,
@@ -704,7 +704,7 @@ function ConnectedThreadTaskBar({
704
704
  // A workflow run: its named steps, with what happened in the thread under each.
705
705
  strip
706
706
  ) : items.length || startedBy ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
707
- startedBy && /* @__PURE__ */ jsxRuntime.jsx(chunkXPB6KMPY_cjs.WorkflowThreadStartedBy, { origin: startedBy }),
707
+ startedBy && /* @__PURE__ */ jsxRuntime.jsx(chunkHVOPUYAG_cjs.WorkflowThreadStartedBy, { origin: startedBy }),
708
708
  /* @__PURE__ */ jsxRuntime.jsx(chunk3T3IKNGF_cjs.TaskFlow, { items: items.filter((item) => !item.step) })
709
709
  ] }) : (
710
710
  // Ordinary chats record no activity events, so an empty ribbon says nothing rather than
@@ -790,7 +790,7 @@ function ConnectedThreadTaskBar({
790
790
  ] }),
791
791
  error && /* @__PURE__ */ jsxRuntime.jsx("span", { role: "alert", className: "text-xs text-destructive", children: error }),
792
792
  /* @__PURE__ */ jsxRuntime.jsx(
793
- chunkTX4CIWH5_cjs.RenameDialog,
793
+ chunkJBL4PPEE_cjs.RenameDialog,
794
794
  {
795
795
  open: renameOpen,
796
796
  onClose: () => setRenameOpen(false),
@@ -823,7 +823,7 @@ ${labels.map((l) => `${l.key}=${l.name}`).join("\n")}`;
823
823
  if (known) return known;
824
824
  const setUp = (async () => {
825
825
  const existing = await arbi.tags.list({ workspaceId });
826
- const { ids, missing } = chunkXPB6KMPY_cjs.matchRequiredLabels(labels, existing);
826
+ const { ids, missing } = chunkHVOPUYAG_cjs.matchRequiredLabels(labels, existing);
827
827
  for (const label of missing) {
828
828
  const tag = await createTag({
829
829
  name: label.name,
@@ -1014,7 +1014,7 @@ function useWorkflowRunTarget({
1014
1014
  }) {
1015
1015
  const { workspaceId: open } = chunkKGAYUFXD_cjs.useConnectedWorkspace();
1016
1016
  const session = react.useArbiSessionStore();
1017
- const selectWorkspace = chunkXGJU2Y5N_cjs.useSelectWorkspace();
1017
+ const selectWorkspace = chunkLBKTTQUR_cjs.useSelectWorkspace();
1018
1018
  const createProject = react.useCreateProject();
1019
1019
  const { projects, isLoading: projectsLoading } = useProjectSummaries();
1020
1020
  const { data: workspaces } = react.useWorkspaces();
@@ -1425,7 +1425,7 @@ function useWorkflowThread(workflow, options = {}) {
1425
1425
  const createThread = react$1.useCallback(
1426
1426
  async (values, done) => {
1427
1427
  const prepared = await options.beforeStart?.();
1428
- const planned = prepared?.labelIds ? chunkXPB6KMPY_cjs.withLabelIds(workflow, prepared.labelIds) : workflow;
1428
+ const planned = prepared?.labelIds ? chunkHVOPUYAG_cjs.withLabelIds(workflow, prepared.labelIds) : workflow;
1429
1429
  await ensureWorkspaceOpen();
1430
1430
  const created = await createWork.mutateAsync({
1431
1431
  title: chunk555BS22J_cjs.runThreadTitle(workflow, values).slice(0, 60),
@@ -1527,7 +1527,7 @@ function useWorkflowThread(workflow, options = {}) {
1527
1527
  const anyRunning = Object.values(states).some((s) => s.status === "running");
1528
1528
  const needsStart = !threadId || idle && !anyRunning;
1529
1529
  const runError = idle ? conversation?.last_error ?? null : null;
1530
- const view = chunkXPB6KMPY_cjs.useWorkflowView({
1530
+ const view = chunkHVOPUYAG_cjs.useWorkflowView({
1531
1531
  steps,
1532
1532
  states,
1533
1533
  inputs,
@@ -1663,7 +1663,7 @@ function WorkflowWordDialog({
1663
1663
  title: title ?? labels.wordTitle,
1664
1664
  size: "xl",
1665
1665
  testId: "workflow-word-dialog",
1666
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalScaffold.Body, { className: "h-[70dvh] p-0", children: /* @__PURE__ */ jsxRuntime.jsx(chunkONML6J5O_cjs.ConnectedNativeDocxEditor, { documentId: id, title: title ?? labels.wordTitle }) })
1666
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalScaffold.Body, { className: "h-[70dvh] p-0", children: /* @__PURE__ */ jsxRuntime.jsx(chunkUDMII47W_cjs.ConnectedNativeDocxEditor, { documentId: id, title: title ?? labels.wordTitle }) })
1667
1667
  }
1668
1668
  );
1669
1669
  }
@@ -1827,7 +1827,7 @@ function RunnerBody({
1827
1827
  const session = react.useArbiSessionStore();
1828
1828
  const openRef = react$1.useRef(workspaceId);
1829
1829
  openRef.current = workspaceId;
1830
- const required = chunkXPB6KMPY_cjs.requiredLabelsOf(given);
1830
+ const required = chunkHVOPUYAG_cjs.requiredLabelsOf(given);
1831
1831
  const ownEnsureLabels = useEnsureRequiredLabels();
1832
1832
  const ensureLabels = page?.ensureLabels ?? ownEnsureLabels;
1833
1833
  const [startedLabelIds, setStartedLabelIds] = react$1.useState({});
@@ -1839,7 +1839,7 @@ function RunnerBody({
1839
1839
  const pageTarget = page?.target;
1840
1840
  const projectStep = pageTarget && typeof projectFrom === "object" ? projectFrom.step : void 0;
1841
1841
  const workflow = react$1.useMemo(
1842
- () => withCommitStep(chunkXPB6KMPY_cjs.withLabelIds(given, labelIds), projectStep),
1842
+ () => withCommitStep(chunkHVOPUYAG_cjs.withLabelIds(given, labelIds), projectStep),
1843
1843
  [given, labelIds, projectStep]
1844
1844
  );
1845
1845
  const hostBeforeStart = options?.beforeStart;
@@ -2054,7 +2054,7 @@ function RunnerBody({
2054
2054
  );
2055
2055
  };
2056
2056
  const runner = (compact) => /* @__PURE__ */ jsxRuntime.jsx(
2057
- chunkXPB6KMPY_cjs.WorkflowRunner,
2057
+ chunkHVOPUYAG_cjs.WorkflowRunner,
2058
2058
  {
2059
2059
  people,
2060
2060
  ...runnerProps,
@@ -2115,7 +2115,7 @@ function RunnerBody({
2115
2115
  pageBar,
2116
2116
  inThread && conversationId ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2117
2117
  !page && /* @__PURE__ */ jsxRuntime.jsx(
2118
- chunkXPB6KMPY_cjs.WorkflowStepBar,
2118
+ chunkHVOPUYAG_cjs.WorkflowStepBar,
2119
2119
  {
2120
2120
  run: view,
2121
2121
  levels: chunk555BS22J_cjs.stepLevels(view.steps),
@@ -2198,7 +2198,7 @@ function RunnerPage(props) {
2198
2198
  workspaceId,
2199
2199
  onProjectCreated
2200
2200
  });
2201
- const required = chunkXPB6KMPY_cjs.requiredLabelsOf(workflow);
2201
+ const required = chunkHVOPUYAG_cjs.requiredLabelsOf(workflow);
2202
2202
  const ensure = useEnsureRequiredLabels();
2203
2203
  const labels = useRequiredLabels(required, target.target, ensure, target.stage === "ready");
2204
2204
  const fromStep = typeof projectFrom === "object";
@@ -2475,5 +2475,5 @@ exports.useWorkflowDefinitions = useWorkflowDefinitions;
2475
2475
  exports.useWorkflowTasks = useWorkflowTasks;
2476
2476
  exports.useWorkflowsPageState = useWorkflowsPageState;
2477
2477
  exports.workflowRunView = workflowRunView;
2478
- //# sourceMappingURL=chunk-PJW2IOPZ.cjs.map
2479
- //# sourceMappingURL=chunk-PJW2IOPZ.cjs.map
2478
+ //# sourceMappingURL=chunk-X3JJTHQ4.cjs.map
2479
+ //# sourceMappingURL=chunk-X3JJTHQ4.cjs.map