@arbidocs/blocks 0.5.29 → 0.5.30

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 (202) hide show
  1. package/dist/{ConnectedCallDock-FDGMFTS5.js → ConnectedCallDock-AWSOPETT.js} +12 -12
  2. package/dist/{ConnectedCallDock-FDGMFTS5.js.map → ConnectedCallDock-AWSOPETT.js.map} +1 -1
  3. package/dist/{ConnectedCallDock-ZIX2ZJCD.cjs → ConnectedCallDock-GM4KOBBS.cjs} +13 -13
  4. package/dist/{ConnectedCallDock-ZIX2ZJCD.cjs.map → ConnectedCallDock-GM4KOBBS.cjs.map} +1 -1
  5. package/dist/{ConnectedCallRoom-VJIHEJ4X.js → ConnectedCallRoom-JMB74KTV.js} +12 -12
  6. package/dist/{ConnectedCallRoom-VJIHEJ4X.js.map → ConnectedCallRoom-JMB74KTV.js.map} +1 -1
  7. package/dist/{ConnectedCallRoom-WZQVXDDW.cjs → ConnectedCallRoom-QE2MMJ6M.cjs} +13 -13
  8. package/dist/{ConnectedCallRoom-WZQVXDDW.cjs.map → ConnectedCallRoom-QE2MMJ6M.cjs.map} +1 -1
  9. package/dist/{ConnectedNativeDocxComparison-KSLSDAAP.cjs → ConnectedNativeDocxComparison-P7IHRMCS.cjs} +17 -17
  10. package/dist/{ConnectedNativeDocxComparison-KSLSDAAP.cjs.map → ConnectedNativeDocxComparison-P7IHRMCS.cjs.map} +1 -1
  11. package/dist/{ConnectedNativeDocxComparison-7ZC7BRY4.js → ConnectedNativeDocxComparison-T6JRDIMR.js} +16 -16
  12. package/dist/{ConnectedNativeDocxComparison-7ZC7BRY4.js.map → ConnectedNativeDocxComparison-T6JRDIMR.js.map} +1 -1
  13. package/dist/{ConnectedNativeDocxEditor-5E64Q7FX.cjs → ConnectedNativeDocxEditor-HBV5EJ63.cjs} +17 -17
  14. package/dist/{ConnectedNativeDocxEditor-5E64Q7FX.cjs.map → ConnectedNativeDocxEditor-HBV5EJ63.cjs.map} +1 -1
  15. package/dist/{ConnectedNativeDocxEditor-B5KDDPRY.js → ConnectedNativeDocxEditor-X6YNPGRL.js} +15 -15
  16. package/dist/{ConnectedNativeDocxEditor-B5KDDPRY.js.map → ConnectedNativeDocxEditor-X6YNPGRL.js.map} +1 -1
  17. package/dist/{ConnectedStreamedWordArtifact-RLU5VYGO.cjs → ConnectedStreamedWordArtifact-GYJEQO4M.cjs} +17 -17
  18. package/dist/ConnectedStreamedWordArtifact-GYJEQO4M.cjs.map +1 -0
  19. package/dist/{ConnectedStreamedWordArtifact-YCQSIGXL.js → ConnectedStreamedWordArtifact-X7R6PBRT.js} +16 -16
  20. package/dist/ConnectedStreamedWordArtifact-X7R6PBRT.js.map +1 -0
  21. package/dist/{WorkspaceTableView-BUWRSR42.cjs → WorkspaceTableView-FTQZJDRB.cjs} +10 -10
  22. package/dist/{WorkspaceTableView-BUWRSR42.cjs.map → WorkspaceTableView-FTQZJDRB.cjs.map} +1 -1
  23. package/dist/{WorkspaceTableView-62PJLX7V.js → WorkspaceTableView-NWRVACJL.js} +8 -8
  24. package/dist/{WorkspaceTableView-62PJLX7V.js.map → WorkspaceTableView-NWRVACJL.js.map} +1 -1
  25. package/dist/agents/index.cjs +373 -373
  26. package/dist/agents/index.js +11 -11
  27. package/dist/calls/index.cjs +39 -39
  28. package/dist/calls/index.js +7 -7
  29. package/dist/chat/index.cjs +167 -167
  30. package/dist/chat/index.js +9 -9
  31. package/dist/{chunk-CPJ2B3QQ.cjs → chunk-24Y36OK6.cjs} +9 -9
  32. package/dist/{chunk-CPJ2B3QQ.cjs.map → chunk-24Y36OK6.cjs.map} +1 -1
  33. package/dist/{chunk-XDFH6ONO.cjs → chunk-2DO5YPDH.cjs} +16 -16
  34. package/dist/{chunk-XDFH6ONO.cjs.map → chunk-2DO5YPDH.cjs.map} +1 -1
  35. package/dist/{chunk-GJI5PEGR.js → chunk-2JARBDEK.js} +4 -4
  36. package/dist/{chunk-GJI5PEGR.js.map → chunk-2JARBDEK.js.map} +1 -1
  37. package/dist/{chunk-HT62K3UO.cjs → chunk-3YVWAYXU.cjs} +4 -4
  38. package/dist/{chunk-HT62K3UO.cjs.map → chunk-3YVWAYXU.cjs.map} +1 -1
  39. package/dist/{chunk-EJSVRT3G.js → chunk-5VSMJ674.js} +56 -66
  40. package/dist/chunk-5VSMJ674.js.map +1 -0
  41. package/dist/{chunk-XGUN44A4.js → chunk-5XG7YD4V.js} +8 -8
  42. package/dist/{chunk-XGUN44A4.js.map → chunk-5XG7YD4V.js.map} +1 -1
  43. package/dist/{chunk-EVV32AXB.cjs → chunk-62G4HK7C.cjs} +6 -6
  44. package/dist/{chunk-EVV32AXB.cjs.map → chunk-62G4HK7C.cjs.map} +1 -1
  45. package/dist/{chunk-7U2DNPMZ.cjs → chunk-63FOCF46.cjs} +12 -12
  46. package/dist/{chunk-7U2DNPMZ.cjs.map → chunk-63FOCF46.cjs.map} +1 -1
  47. package/dist/{chunk-NIS5TLOM.cjs → chunk-6LVVW6VB.cjs} +4 -4
  48. package/dist/{chunk-NIS5TLOM.cjs.map → chunk-6LVVW6VB.cjs.map} +1 -1
  49. package/dist/{chunk-JS7KJRKG.js → chunk-75Z5AUMM.js} +3 -3
  50. package/dist/{chunk-JS7KJRKG.js.map → chunk-75Z5AUMM.js.map} +1 -1
  51. package/dist/{chunk-CRUCMRFC.cjs → chunk-76G2DAOF.cjs} +18 -18
  52. package/dist/{chunk-CRUCMRFC.cjs.map → chunk-76G2DAOF.cjs.map} +1 -1
  53. package/dist/{chunk-AHYSHKPL.cjs → chunk-7THRBD42.cjs} +57 -16
  54. package/dist/chunk-7THRBD42.cjs.map +1 -0
  55. package/dist/{chunk-SBHWRN2D.js → chunk-BBSXBABG.js} +3 -3
  56. package/dist/{chunk-SBHWRN2D.js.map → chunk-BBSXBABG.js.map} +1 -1
  57. package/dist/{chunk-WG2VDUEI.cjs → chunk-BVMPP574.cjs} +4 -4
  58. package/dist/{chunk-WG2VDUEI.cjs.map → chunk-BVMPP574.cjs.map} +1 -1
  59. package/dist/{chunk-3IRIITUW.cjs → chunk-BVXI7W7Z.cjs} +9 -9
  60. package/dist/{chunk-3IRIITUW.cjs.map → chunk-BVXI7W7Z.cjs.map} +1 -1
  61. package/dist/{chunk-EVYUYVH2.cjs → chunk-C5J74Y6N.cjs} +5 -5
  62. package/dist/{chunk-EVYUYVH2.cjs.map → chunk-C5J74Y6N.cjs.map} +1 -1
  63. package/dist/{chunk-WY626DNG.cjs → chunk-CGUDTSGI.cjs} +10 -10
  64. package/dist/{chunk-WY626DNG.cjs.map → chunk-CGUDTSGI.cjs.map} +1 -1
  65. package/dist/{chunk-WBCGVEJX.js → chunk-CMTAOVUX.js} +3 -3
  66. package/dist/{chunk-WBCGVEJX.js.map → chunk-CMTAOVUX.js.map} +1 -1
  67. package/dist/{chunk-OGADWN5L.js → chunk-DHTBHALC.js} +4 -4
  68. package/dist/{chunk-OGADWN5L.js.map → chunk-DHTBHALC.js.map} +1 -1
  69. package/dist/{chunk-UXIMEFEF.js → chunk-DWERY33L.js} +8 -8
  70. package/dist/{chunk-UXIMEFEF.js.map → chunk-DWERY33L.js.map} +1 -1
  71. package/dist/{chunk-A634VUNB.js → chunk-EPNJOP2M.js} +5 -5
  72. package/dist/{chunk-A634VUNB.js.map → chunk-EPNJOP2M.js.map} +1 -1
  73. package/dist/{chunk-4RMI6D64.cjs → chunk-EZLZ3MDU.cjs} +3 -3
  74. package/dist/{chunk-4RMI6D64.cjs.map → chunk-EZLZ3MDU.cjs.map} +1 -1
  75. package/dist/{chunk-3OKBEVP3.js → chunk-FAILAFD6.js} +3 -3
  76. package/dist/{chunk-3OKBEVP3.js.map → chunk-FAILAFD6.js.map} +1 -1
  77. package/dist/{chunk-OZSAQJO4.js → chunk-FODIZWMX.js} +3 -3
  78. package/dist/{chunk-OZSAQJO4.js.map → chunk-FODIZWMX.js.map} +1 -1
  79. package/dist/{chunk-V2GEULRG.cjs → chunk-GK35JEWW.cjs} +4 -4
  80. package/dist/{chunk-V2GEULRG.cjs.map → chunk-GK35JEWW.cjs.map} +1 -1
  81. package/dist/{chunk-52GITM4V.cjs → chunk-GNWQS6S4.cjs} +144 -154
  82. package/dist/{chunk-EJSVRT3G.js.map → chunk-GNWQS6S4.cjs.map} +1 -1
  83. package/dist/{chunk-R3HZBTE3.cjs → chunk-HMEP4EZ3.cjs} +4 -4
  84. package/dist/{chunk-R3HZBTE3.cjs.map → chunk-HMEP4EZ3.cjs.map} +1 -1
  85. package/dist/{chunk-5ETT7ZIO.js → chunk-IYKGI2DQ.js} +3 -3
  86. package/dist/{chunk-5ETT7ZIO.js.map → chunk-IYKGI2DQ.js.map} +1 -1
  87. package/dist/{chunk-3PQPA5K6.cjs → chunk-J4VP2PQJ.cjs} +28 -28
  88. package/dist/{chunk-3PQPA5K6.cjs.map → chunk-J4VP2PQJ.cjs.map} +1 -1
  89. package/dist/{chunk-TY76UEFK.js → chunk-JLJVEQFN.js} +6 -6
  90. package/dist/{chunk-TY76UEFK.js.map → chunk-JLJVEQFN.js.map} +1 -1
  91. package/dist/{chunk-G3MZ5S2Q.js → chunk-KYHDMUPW.js} +3 -3
  92. package/dist/{chunk-G3MZ5S2Q.js.map → chunk-KYHDMUPW.js.map} +1 -1
  93. package/dist/{chunk-DF2GSH4D.js → chunk-L2MMIC3S.js} +3 -3
  94. package/dist/{chunk-DF2GSH4D.js.map → chunk-L2MMIC3S.js.map} +1 -1
  95. package/dist/{chunk-46XON6PW.js → chunk-L4Q7FWBQ.js} +3 -3
  96. package/dist/{chunk-46XON6PW.js.map → chunk-L4Q7FWBQ.js.map} +1 -1
  97. package/dist/{chunk-OQCUIN6Z.cjs → chunk-M6N7XJH7.cjs} +5 -5
  98. package/dist/{chunk-OQCUIN6Z.cjs.map → chunk-M6N7XJH7.cjs.map} +1 -1
  99. package/dist/{chunk-MTHAQGJB.js → chunk-MNLMPH45.js} +3 -3
  100. package/dist/{chunk-MTHAQGJB.js.map → chunk-MNLMPH45.js.map} +1 -1
  101. package/dist/{chunk-W43S7COD.js → chunk-NBQNDHOW.js} +4 -4
  102. package/dist/{chunk-W43S7COD.js.map → chunk-NBQNDHOW.js.map} +1 -1
  103. package/dist/{chunk-7YGUUUL7.cjs → chunk-NF7CGYZF.cjs} +4 -4
  104. package/dist/{chunk-7YGUUUL7.cjs.map → chunk-NF7CGYZF.cjs.map} +1 -1
  105. package/dist/{chunk-DNGA25ZA.js → chunk-NI3O4UZL.js} +5 -5
  106. package/dist/{chunk-DNGA25ZA.js.map → chunk-NI3O4UZL.js.map} +1 -1
  107. package/dist/{chunk-T3JW5BYG.cjs → chunk-OSCWFBRD.cjs} +4 -4
  108. package/dist/{chunk-T3JW5BYG.cjs.map → chunk-OSCWFBRD.cjs.map} +1 -1
  109. package/dist/{chunk-TKOP6WMD.js → chunk-OYKITGTK.js} +4 -4
  110. package/dist/{chunk-TKOP6WMD.js.map → chunk-OYKITGTK.js.map} +1 -1
  111. package/dist/{chunk-2TB4UDBH.js → chunk-PKDGP6ZH.js} +3 -3
  112. package/dist/{chunk-2TB4UDBH.js.map → chunk-PKDGP6ZH.js.map} +1 -1
  113. package/dist/{chunk-AKW4JLHQ.cjs → chunk-PO2QI2OI.cjs} +4 -4
  114. package/dist/{chunk-AKW4JLHQ.cjs.map → chunk-PO2QI2OI.cjs.map} +1 -1
  115. package/dist/{chunk-4UREQY5X.js → chunk-Q56LAJRP.js} +4 -4
  116. package/dist/{chunk-4UREQY5X.js.map → chunk-Q56LAJRP.js.map} +1 -1
  117. package/dist/{chunk-SQAVWMGV.cjs → chunk-R6GIDWEH.cjs} +59 -59
  118. package/dist/{chunk-SQAVWMGV.cjs.map → chunk-R6GIDWEH.cjs.map} +1 -1
  119. package/dist/{chunk-KKBYWVEL.js → chunk-SLGRQMHW.js} +5 -5
  120. package/dist/{chunk-KKBYWVEL.js.map → chunk-SLGRQMHW.js.map} +1 -1
  121. package/dist/{chunk-LXB756TN.cjs → chunk-SN5VHPF4.cjs} +3 -3
  122. package/dist/{chunk-LXB756TN.cjs.map → chunk-SN5VHPF4.cjs.map} +1 -1
  123. package/dist/{chunk-CJWZYK5K.cjs → chunk-SVL2OM7T.cjs} +5 -5
  124. package/dist/{chunk-CJWZYK5K.cjs.map → chunk-SVL2OM7T.cjs.map} +1 -1
  125. package/dist/{chunk-SSRFSSIT.js → chunk-TGVBLXLV.js} +52 -17
  126. package/dist/chunk-TGVBLXLV.js.map +1 -0
  127. package/dist/{chunk-DV25UPJ7.js → chunk-THNTNAYI.js} +3 -3
  128. package/dist/{chunk-DV25UPJ7.js.map → chunk-THNTNAYI.js.map} +1 -1
  129. package/dist/{chunk-AYAWG2CM.js → chunk-TNWJPTDG.js} +3 -3
  130. package/dist/{chunk-AYAWG2CM.js.map → chunk-TNWJPTDG.js.map} +1 -1
  131. package/dist/{chunk-SN7X7C7H.cjs → chunk-UAMY7KHW.cjs} +5 -5
  132. package/dist/{chunk-SN7X7C7H.cjs.map → chunk-UAMY7KHW.cjs.map} +1 -1
  133. package/dist/{chunk-H72SWOUS.js → chunk-VTGRCJLP.js} +3 -3
  134. package/dist/{chunk-H72SWOUS.js.map → chunk-VTGRCJLP.js.map} +1 -1
  135. package/dist/{chunk-W5PKYJX5.cjs → chunk-W6DDSZUD.cjs} +14 -14
  136. package/dist/{chunk-W5PKYJX5.cjs.map → chunk-W6DDSZUD.cjs.map} +1 -1
  137. package/dist/{chunk-ZXXXLYZY.cjs → chunk-WG2IPVLA.cjs} +7 -7
  138. package/dist/{chunk-ZXXXLYZY.cjs.map → chunk-WG2IPVLA.cjs.map} +1 -1
  139. package/dist/{chunk-RWU3C4MK.js → chunk-WLWY43FR.js} +3 -3
  140. package/dist/{chunk-RWU3C4MK.js.map → chunk-WLWY43FR.js.map} +1 -1
  141. package/dist/{chunk-OZRGYS3J.js → chunk-X3LM4KRW.js} +3 -3
  142. package/dist/{chunk-OZRGYS3J.js.map → chunk-X3LM4KRW.js.map} +1 -1
  143. package/dist/{chunk-IZJ3BOJO.js → chunk-XMDIXNLW.js} +3 -3
  144. package/dist/{chunk-IZJ3BOJO.js.map → chunk-XMDIXNLW.js.map} +1 -1
  145. package/dist/{chunk-7FKVJUR4.js → chunk-Y6F6UF2W.js} +3 -3
  146. package/dist/{chunk-7FKVJUR4.js.map → chunk-Y6F6UF2W.js.map} +1 -1
  147. package/dist/{chunk-F72ZD5Q2.cjs → chunk-YD3RN2FY.cjs} +3 -3
  148. package/dist/{chunk-F72ZD5Q2.cjs.map → chunk-YD3RN2FY.cjs.map} +1 -1
  149. package/dist/{chunk-QHWDV2VB.cjs → chunk-YJJNDKA3.cjs} +6 -6
  150. package/dist/{chunk-QHWDV2VB.cjs.map → chunk-YJJNDKA3.cjs.map} +1 -1
  151. package/dist/{chunk-NZCAWWV4.cjs → chunk-YP643FYT.cjs} +4 -4
  152. package/dist/{chunk-NZCAWWV4.cjs.map → chunk-YP643FYT.cjs.map} +1 -1
  153. package/dist/{chunk-BBTHGWZO.cjs → chunk-ZUOU54X3.cjs} +5 -5
  154. package/dist/{chunk-BBTHGWZO.cjs.map → chunk-ZUOU54X3.cjs.map} +1 -1
  155. package/dist/citations/index.cjs +10 -10
  156. package/dist/citations/index.js +2 -2
  157. package/dist/collaboration/index.cjs +9 -9
  158. package/dist/collaboration/index.js +1 -1
  159. package/dist/connect/docx.cjs +19 -19
  160. package/dist/connect/docx.js +15 -15
  161. package/dist/connect/index.cjs +1885 -1856
  162. package/dist/connect/index.cjs.map +1 -1
  163. package/dist/connect/index.d.ts +1 -0
  164. package/dist/connect/index.js +686 -659
  165. package/dist/connect/index.js.map +1 -1
  166. package/dist/connect/viewer.cjs +83 -83
  167. package/dist/connect/viewer.js +18 -18
  168. package/dist/connection/ConnectedSettings.d.ts +1 -1
  169. package/dist/connection/dialogs/ConnectedGlobalDialogs.d.ts +26 -0
  170. package/dist/connection/dialogs/index.d.ts +1 -0
  171. package/dist/connection/files/upload/ConnectedUploadDropzone.d.ts +2 -1
  172. package/dist/connection/workspace-access/access-review.d.ts +6 -0
  173. package/dist/facts/index.cjs +60 -60
  174. package/dist/facts/index.js +7 -7
  175. package/dist/files/index.cjs +225 -225
  176. package/dist/files/index.js +5 -5
  177. package/dist/home/index.cjs +31 -31
  178. package/dist/home/index.js +6 -6
  179. package/dist/index.cjs +780 -756
  180. package/dist/index.d.ts +2 -1
  181. package/dist/index.js +27 -27
  182. package/dist/provider/dialog-registry.d.ts +85 -0
  183. package/dist/provider/environment.d.ts +11 -11
  184. package/dist/retrieval/index.cjs +4 -4
  185. package/dist/retrieval/index.js +2 -2
  186. package/dist/settings/index.cjs +156 -156
  187. package/dist/settings/index.js +3 -3
  188. package/dist/shell/index.cjs +42 -42
  189. package/dist/shell/index.js +4 -4
  190. package/dist/studio/index.cjs +18 -18
  191. package/dist/studio/index.js +10 -10
  192. package/dist/workflow-canvas/index.cjs +69 -69
  193. package/dist/workflow-canvas/index.js +14 -14
  194. package/dist/workspaces/index.cjs +29 -29
  195. package/dist/workspaces/index.js +4 -4
  196. package/node_modules/@arbidocs/coedit/package.json +1 -1
  197. package/package.json +5 -5
  198. package/dist/ConnectedStreamedWordArtifact-RLU5VYGO.cjs.map +0 -1
  199. package/dist/ConnectedStreamedWordArtifact-YCQSIGXL.js.map +0 -1
  200. package/dist/chunk-52GITM4V.cjs.map +0 -1
  201. package/dist/chunk-AHYSHKPL.cjs.map +0 -1
  202. package/dist/chunk-SSRFSSIT.js.map +0 -1
@@ -1,29 +1,22 @@
1
1
  "use client";
2
- import { useBillingSupport, formatMoney, isProProject, useSelfExtId, addonCharge, formatPeriodEnd, quoteParts, taxDetail, money2, ANNUAL_PREMIUM_AI_NOTE, totalWithTaxWord, planBadgeView, DEFAULT_SPEND_CAP_PENCE, findProPrices, packPrice, calcSavingsPercent, parseBudgetPounds, isAddonBudgetZero, useRewardBalance, getQuotaItems, aiUsageResetTimestamp, formatResetDate, ZERO_BUDGET_MESSAGE, CAP_REACHED_MESSAGE, PRO_PACKS, planNameForPacks, proTierName, STORAGE_BLOCK_GB, ADDON_BLOCK_AI_GBP, quoteError, POSTCODE_COUNTRIES, addonPrice, checkoutBlockPriceText, quoteTotalLine, apiErrorDetail, checkoutItemsLabel, projectGroupBilling, SUGGESTED_DAILY_CAP_PER_USER, FREE_STORAGE_MB, FREE_AI_GBP, PRO_AI_GBP, PRO_STORAGE_GB, plusVat, planPreviewLines, PAY_TODAY_UNPRICED, TAX_LOCATION_INVALID, FREE_COLLABORATORS, MAX_CHECKOUT_BLOCKS, reduceBounds, splitBlocks, autoRoom, nextRemovedBlockSize, stepLabel, addStepCaption, blocksLabel, MIN_AUTO_TOPUP_THRESHOLD_GBP, USAGE_CAP_LABEL, USAGE_CAP_HELP, PLAN_CHOICE_PACKS, nextPeriodBody, addonSettingsBody, budgetSavedMessage } from '../chunk-H72SWOUS.js';
3
- export { CAP_REACHED_MESSAGE, ZERO_BUDGET_MESSAGE, aiUsageResetTimestamp, formatMoney, formatResetDate, getQuotaItems, isAddonBudgetZero, isProProject, planBadgeView, planName, projectGroupBilling, useBillingSupport, useRewardBalance } from '../chunk-H72SWOUS.js';
4
- import { getRoleBadgeClass, formatRole, getRoleDescription, PageLoading, WorkspacePageFrame, WorkspaceIdentityPanel, WorkspaceProjectSlot, WorkspaceAudienceLine, CommonWorkspaceToggle, ExpandableSection, LeaveFooter, ProjectPicker, WorkspaceTypeBadge, WorkspaceList, WorkspaceGroup, WorkspaceCard } from '../chunk-SBHWRN2D.js';
2
+ import { useBillingSupport, formatMoney, isProProject, useSelfExtId, addonCharge, formatPeriodEnd, quoteParts, taxDetail, money2, ANNUAL_PREMIUM_AI_NOTE, totalWithTaxWord, planBadgeView, DEFAULT_SPEND_CAP_PENCE, findProPrices, packPrice, calcSavingsPercent, parseBudgetPounds, isAddonBudgetZero, useRewardBalance, getQuotaItems, aiUsageResetTimestamp, formatResetDate, ZERO_BUDGET_MESSAGE, CAP_REACHED_MESSAGE, PRO_PACKS, planNameForPacks, proTierName, STORAGE_BLOCK_GB, ADDON_BLOCK_AI_GBP, quoteError, POSTCODE_COUNTRIES, addonPrice, checkoutBlockPriceText, quoteTotalLine, apiErrorDetail, checkoutItemsLabel, projectGroupBilling, SUGGESTED_DAILY_CAP_PER_USER, FREE_STORAGE_MB, FREE_AI_GBP, PRO_AI_GBP, PRO_STORAGE_GB, plusVat, planPreviewLines, PAY_TODAY_UNPRICED, TAX_LOCATION_INVALID, FREE_COLLABORATORS, MAX_CHECKOUT_BLOCKS, reduceBounds, splitBlocks, autoRoom, nextRemovedBlockSize, stepLabel, addStepCaption, blocksLabel, MIN_AUTO_TOPUP_THRESHOLD_GBP, USAGE_CAP_LABEL, USAGE_CAP_HELP, PLAN_CHOICE_PACKS, nextPeriodBody, addonSettingsBody, budgetSavedMessage } from '../chunk-VTGRCJLP.js';
3
+ export { CAP_REACHED_MESSAGE, ZERO_BUDGET_MESSAGE, aiUsageResetTimestamp, formatMoney, formatResetDate, getQuotaItems, isAddonBudgetZero, isProProject, planBadgeView, planName, projectGroupBilling, useBillingSupport, useRewardBalance } from '../chunk-VTGRCJLP.js';
4
+ import { getRoleBadgeClass, formatRole, getRoleDescription, PageLoading, WorkspacePageFrame, WorkspaceIdentityPanel, WorkspaceProjectSlot, WorkspaceAudienceLine, CommonWorkspaceToggle, ExpandableSection, LeaveFooter, ProjectPicker, WorkspaceTypeBadge, WorkspaceList, WorkspaceGroup, WorkspaceCard } from '../chunk-BBSXBABG.js';
5
5
  import { isAgentAccount, workspaceConversationCount, workspaceDocumentCount, isListedWorkspace, WORKSPACE_CATEGORY_FILTERS, projectFilterId, workspaceFilterAttributes, groupWorkspacesByProject, workspaceGroupStats, byRecentUpdate } from '../chunk-57CG33XJ.js';
6
6
  import { SharedFileView, SharedFilesInbox } from '../chunk-4ML5AMMO.js';
7
- import { buildFactCitations, citedVersionRef, chronologyFactBodies, docIdsOf, toFactCitations, FactsToolbar, FactsFieldsButton, FactComposer, FactDateInput, FactSourcesRow, FactsLoading, FactsLoadError, FactsEmptyState, FactsCalendar, FactsGanttPane, FactsBulkBar, FactSourceGroup, EMPTY_FACT_DATE_FIELDS, withoutChunk, factDateSpanToFields, FactFieldRow, FactLabelsCell, enableFactTableColumnResize, withChunk, factDateFieldsToSpan, createFactColumns, FactRowActions, withoutDoc, withDoc, sourceDocCount, DEFAULT_FACT_COLUMN_LABELS } from '../chunk-JS7KJRKG.js';
8
- import { HomeLoadError, HomeFrame, HomeMain, HomeCenteredScroll, HomeCenteredColumn, DashboardRoot, DashboardBand, DashboardColumns, RecentList, DashboardAction, FactsStrip, FactMark, CreateTile } from '../chunk-GJI5PEGR.js';
7
+ import { buildFactCitations, citedVersionRef, chronologyFactBodies, docIdsOf, toFactCitations, FactsToolbar, FactsFieldsButton, FactComposer, FactDateInput, FactSourcesRow, FactsLoading, FactsLoadError, FactsEmptyState, FactsCalendar, FactsGanttPane, FactsBulkBar, FactSourceGroup, EMPTY_FACT_DATE_FIELDS, withoutChunk, factDateSpanToFields, FactFieldRow, FactLabelsCell, enableFactTableColumnResize, withChunk, factDateFieldsToSpan, createFactColumns, FactRowActions, withoutDoc, withDoc, sourceDocCount, DEFAULT_FACT_COLUMN_LABELS } from '../chunk-75Z5AUMM.js';
8
+ import { HomeLoadError, HomeFrame, HomeMain, HomeCenteredScroll, HomeCenteredColumn, DashboardRoot, DashboardBand, DashboardColumns, RecentList, DashboardAction, FactsStrip, FactMark, CreateTile } from '../chunk-2JARBDEK.js';
9
9
  import { ProjectBandTitle, PlainBandTitle } from '../chunk-RQKWYKZY.js';
10
10
  import '../chunk-WZ63HE2C.js';
11
- import { MessageJsonTree, DraggableHeader, ProfileCard, AvatarPicker, IdentityVerificationCard, IdentityVerificationDialog, RequireVerified, PasswordChangeDialog, EMAIL_NOTIFICATION_KEYS, EMAIL_NOTIFICATION_CATEGORIES, NotificationCategoryList, toNotificationCategories, toActiveSessionViews, ActiveSessionsDialog, LogoutDialog, toLogoutSessionViews, DeleteAccountDialog, toDeleteBlockerViews, PremiumModelsFrame, ConnectionsLoading, ConnectionsError, ConnectionsEmpty, UsageToggle, SettingsPage, UsageSummary, AppearanceSettings, UsageLineChart, SyncDialogBody, SyncField, SyncSelect, SyncSmallNote, SyncLoading, SyncReconnectNotice, SyncNote, SyncTreeFrame, SyncLinkRow, SyncLinkButton, SyncOptions, SyncOptionToggle, SyncDialogFooter, InvoicesDialog, PlanDialogFrame, ProjectList, RenameDialog, SharedProjectsSection, SharedProjectRow, MoreInfo, MoreInfoList, UsagePanel, UsageQuotaHint, UsageSection, UsageLegend, UsageProportionBar, UsageActionButton, ProjectDetailHeader, PlanBadge, ProjectDetailSection, PlanStack, PlanNotice, PlanPickerCard, PlanPickerHeader, PricingToggle, PromoCodeInput, PlanActionButton, QuotaExceededDialogView, InviteContactsDialog, WelcomeDialog, applyTriStateFilters, PanelFrame, PanelAddButton, PanelFrameBody, PanelScroll, PanelActionsRow, applyInvertedIndexFilter, ConfigSwitcherBar, PanelNote, ProjectRow, QuotaMeter, FilterChip, buildInvertedIndex, serverConnectionView, ServerConnectionButton, ModelProviderLabel, SyncFolderRow, SyncFolderStatus, PlanTierOption, PlanActionRow, SubscriptionStatusView, DailyCapField, PlanInfoPopover, PlanCardGrid, ReferralRewardSummary, CheckoutDialogFrame, ConnectionCard, ReferralRewardNote } from '../chunk-OZRGYS3J.js';
12
- export { ConnectedAssistantDock, redlineStats, textToArtifact, toRedlineMarkdown, useConnectedAiTask, useConnectedChat, useSemanticSearch, useWorkspaceDocs } from '../chunk-OGADWN5L.js';
13
- import { useTranscriptRuns, TranscriptEntry, ThreadCallLogCard, RecordingCard, useMeetingThreadMessages, threadTranscriptRuns, useProvisionalSpeakers, TranscriptRunsContext, ProvisionalSpeakers, CallConversationEmpty } from '../chunk-A634VUNB.js';
14
- export { useMeetingThreadMessages } from '../chunk-A634VUNB.js';
15
- import { parseCallLogDetail } from '../chunk-S3YRRD54.js';
16
- import { useConnectedWorkspaceRole, useConnectedWorkflowScopeSource, ConnectedWorkflowDocumentsField, ConnectedWorkflowLauncher, ConnectedNativeDocxEditor, toWorkflowFieldDocument } from '../chunk-XGUN44A4.js';
17
- export { ConnectedWorkflowDocumentsField, ConnectedWorkflowLauncher, ConnectedWorkflowsTable, DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS, toWorkflowFieldDocument, useConnectedAgentOptions, useConnectedWorkflowScopeSource, useConnectedWorkspaceRole, useDocxCommentTarget, useNativeDocxSupport } from '../chunk-XGUN44A4.js';
18
- import { ConnectedMarkdown, InternalDocLink, ExternalLink, DocumentWorkspaceContext } from '../chunk-DNGA25ZA.js';
19
- export { ConnectedDocumentToolsProvider, ConnectedMarkdown, DocumentChip, DocumentWorkspaceContext, ExternalLink, InternalDocLink, MailChip, MermaidDiagram, WorkspaceDocumentReference, useDocumentViewerSupport, useDocumentWorkspace, useViewerDraftDocument, useViewerIsDetached, useViewerPassageCitation, useViewerStreamingDocument } from '../chunk-DNGA25ZA.js';
20
- import { ExplorerFileTile, formatFolderSegment, hasFolderProviderIcon, FolderProviderIcon, ExplorerFolderTile, StatusPill, FailedStageIcon, DocumentNameCellFrame, DocumentRowMenu, visibilityToggleTooltip, FolderCell, FolderCommandList, RelatedDocsCell, FilterButton, DOCUMENTS_ROW_HEIGHT_INITIAL, searchExplorerDocuments, buildExplorerEntries, collectFolderDocs, joinFolderPath, getExplorerDisplayName, RECENTLY_DELETED_HINT, RECENTLY_DELETED_HINT_PLURAL, canDeleteDocument, ExplorerFrame, ExplorerStage, ExplorerScroller, ExplorerLoadingTiles, ExplorerEmpty, ExplorerMarquee, ExplorerDropOverlay, ExplorerDragPreview, CheckboxCell, TagColumnHeader, ExplorerFileTooltip, visibilityAudience, TagFormRoot, TagFormNameField, TagFormSelectField, TagFormNote, TagFormOptionsEditor, TagFormInstructionField, TagFormMeta, TagFormFooter, TagFormSharedToggle, FilesViewCenter, FilesFilterBar, TransferProgressView, TransferResumeBanner, ExportResultsReport, TransferScopeChooser, TransferKindsPicker, TransferReferencesChooser, ExportMethodChooser, ExportWorkspacePicker, TransferConflictChooser, TransferPlanSummary, ExportFooter, ExportModalTitle, ROW_MIN, rowHeightForLines, linesForRowHeight, RowDensityControl, VendorLogo, FolderFilterButton, FolderPickerRow, UploadFrame, UploadContainer, SelectedFilesList, RejectedFilesList, UploadErrorMessage, UploadProgress, PrivacyExplainerModal, MultiSelectCellEditor, DOCUMENT_TYPE_OPTIONS, DEFAULT_DOCUMENT_COLUMNS, shareStateOf, BulkActionsBar, shareTooltipFor, parseFolderSegments, AiReviewDialogView, MoveToFolderDialog, sortFields, filterFieldsByName, fieldsApplyBarCopy, FieldsEditorRoot, FieldsEditorToolbar, FieldsEditorList, FieldRow, FieldsEmptyState, fieldsEmptyText, FieldsApplyBar, FieldsManagerDefinition, FieldsManagerBody, FieldsManagerTitle, BulkTagEditorDialog, BulkReplaceDialog, FieldValue, FieldFolderSelect, FieldFolderValue, FieldNativeSelect, FieldWithAttribution, EMAIL_VIEW_COLUMNS, useGridViews, ViewSelectorMenu, FilesAddMenu, applyColumnLayout, applyViewColumns, sortExplorerFiles, FilesPage, UrlInputDialog, FilesPageHeader, FilesToolbar, ExplorerFileNavigator, NavigatorPickerBar, FilesPageMain, DocumentGrid, resolveDocumentGridLayout, FilesModalFooter, BulkLabelSelectView, confirmHideFromMembers, DocumentsFolderButton, FilesTagsButton, UploadSourceSection, UploadSourcePicker, UploadBrowseButtons, canEditDocumentFields, FieldLabelsSelect, ShareToggle, FieldAttribution, UploadDropArea, canChangeVisibility, UploadUrlButton } from '../chunk-46XON6PW.js';
11
+ import { MessageJsonTree, DraggableHeader, ProfileCard, AvatarPicker, IdentityVerificationCard, IdentityVerificationDialog, RequireVerified, PasswordChangeDialog, EMAIL_NOTIFICATION_KEYS, EMAIL_NOTIFICATION_CATEGORIES, NotificationCategoryList, toNotificationCategories, toActiveSessionViews, ActiveSessionsDialog, LogoutDialog, toLogoutSessionViews, DeleteAccountDialog, toDeleteBlockerViews, PremiumModelsFrame, ConnectionsLoading, ConnectionsError, ConnectionsEmpty, UsageToggle, SettingsPage, UsageSummary, AppearanceSettings, UsageLineChart, SyncDialogBody, SyncField, SyncSelect, SyncSmallNote, SyncLoading, SyncReconnectNotice, SyncNote, SyncTreeFrame, SyncLinkRow, SyncLinkButton, SyncOptions, SyncOptionToggle, SyncDialogFooter, InvoicesDialog, PlanDialogFrame, ProjectList, RenameDialog, SharedProjectsSection, SharedProjectRow, MoreInfo, MoreInfoList, UsagePanel, UsageQuotaHint, UsageSection, UsageLegend, UsageProportionBar, UsageActionButton, ProjectDetailHeader, PlanBadge, ProjectDetailSection, PlanStack, PlanNotice, PlanPickerCard, PlanPickerHeader, PricingToggle, PromoCodeInput, PlanActionButton, QuotaExceededDialogView, InviteContactsDialog, WelcomeDialog, applyTriStateFilters, PanelFrame, PanelAddButton, PanelFrameBody, PanelScroll, PanelActionsRow, applyInvertedIndexFilter, ConfigSwitcherBar, PanelNote, ProjectRow, QuotaMeter, FilterChip, buildInvertedIndex, serverConnectionView, ServerConnectionButton, ModelProviderLabel, SyncFolderRow, SyncFolderStatus, PlanTierOption, PlanActionRow, SubscriptionStatusView, DailyCapField, PlanInfoPopover, PlanCardGrid, ReferralRewardSummary, CheckoutDialogFrame, ConnectionCard, ReferralRewardNote } from '../chunk-X3LM4KRW.js';
12
+ export { ConnectedAssistantDock, redlineStats, textToArtifact, toRedlineMarkdown, useConnectedAiTask, useConnectedChat, useSemanticSearch, useWorkspaceDocs } from '../chunk-DHTBHALC.js';
13
+ import { useConnectedWorkspaceRole, ConnectedWorkflowLauncher, useConnectedWorkflowScopeSource, ConnectedWorkflowDocumentsField, ConnectedNativeDocxEditor, toWorkflowFieldDocument } from '../chunk-5XG7YD4V.js';
14
+ export { ConnectedWorkflowDocumentsField, ConnectedWorkflowLauncher, ConnectedWorkflowsTable, DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS, toWorkflowFieldDocument, useConnectedAgentOptions, useConnectedWorkflowScopeSource, useConnectedWorkspaceRole, useDocxCommentTarget, useNativeDocxSupport } from '../chunk-5XG7YD4V.js';
15
+ import { ConnectedMarkdown, InternalDocLink, ExternalLink, DocumentWorkspaceContext } from '../chunk-NI3O4UZL.js';
16
+ export { ConnectedDocumentToolsProvider, ConnectedMarkdown, DocumentChip, DocumentWorkspaceContext, ExternalLink, InternalDocLink, MailChip, MermaidDiagram, WorkspaceDocumentReference, useDocumentViewerSupport, useDocumentWorkspace, useViewerDraftDocument, useViewerIsDetached, useViewerPassageCitation, useViewerStreamingDocument } from '../chunk-NI3O4UZL.js';
17
+ import { ExplorerFileTile, formatFolderSegment, hasFolderProviderIcon, FolderProviderIcon, ExplorerFolderTile, StatusPill, FailedStageIcon, DocumentNameCellFrame, DocumentRowMenu, visibilityToggleTooltip, FolderCell, FolderCommandList, RelatedDocsCell, FilterButton, DOCUMENTS_ROW_HEIGHT_INITIAL, searchExplorerDocuments, buildExplorerEntries, collectFolderDocs, joinFolderPath, getExplorerDisplayName, RECENTLY_DELETED_HINT, RECENTLY_DELETED_HINT_PLURAL, canDeleteDocument, ExplorerFrame, ExplorerStage, ExplorerScroller, ExplorerLoadingTiles, ExplorerEmpty, ExplorerMarquee, ExplorerDropOverlay, ExplorerDragPreview, CheckboxCell, TagColumnHeader, ExplorerFileTooltip, visibilityAudience, TagFormRoot, TagFormNameField, TagFormSelectField, TagFormNote, TagFormOptionsEditor, TagFormInstructionField, TagFormMeta, TagFormFooter, TagFormSharedToggle, FilesViewCenter, FilesFilterBar, TransferProgressView, TransferResumeBanner, ExportResultsReport, TransferScopeChooser, TransferKindsPicker, TransferReferencesChooser, ExportMethodChooser, ExportWorkspacePicker, TransferConflictChooser, TransferPlanSummary, ExportFooter, ExportModalTitle, ROW_MIN, rowHeightForLines, linesForRowHeight, RowDensityControl, VendorLogo, FolderFilterButton, FolderPickerRow, UploadFrame, UploadContainer, SelectedFilesList, RejectedFilesList, UploadErrorMessage, UploadProgress, PrivacyExplainerModal, MultiSelectCellEditor, DOCUMENT_TYPE_OPTIONS, DEFAULT_DOCUMENT_COLUMNS, shareStateOf, BulkActionsBar, shareTooltipFor, parseFolderSegments, AiReviewDialogView, MoveToFolderDialog, sortFields, filterFieldsByName, fieldsApplyBarCopy, FieldsEditorRoot, FieldsEditorToolbar, FieldsEditorList, FieldRow, FieldsEmptyState, fieldsEmptyText, FieldsApplyBar, FieldsManagerDefinition, FieldsManagerBody, FieldsManagerTitle, BulkTagEditorDialog, BulkReplaceDialog, FieldValue, FieldFolderSelect, FieldFolderValue, FieldNativeSelect, FieldWithAttribution, EMAIL_VIEW_COLUMNS, useGridViews, ViewSelectorMenu, FilesAddMenu, applyColumnLayout, applyViewColumns, sortExplorerFiles, FilesPage, UrlInputDialog, FilesPageHeader, FilesToolbar, ExplorerFileNavigator, NavigatorPickerBar, FilesPageMain, DocumentGrid, resolveDocumentGridLayout, FilesModalFooter, BulkLabelSelectView, confirmHideFromMembers, DocumentsFolderButton, FilesTagsButton, UploadSourceSection, UploadSourcePicker, UploadBrowseButtons, canEditDocumentFields, FieldLabelsSelect, ShareToggle, FieldAttribution, UploadDropArea, canChangeVisibility, UploadUrlButton } from '../chunk-L4Q7FWBQ.js';
21
18
  import { ViewToggle, DocumentViewToggle } from '../chunk-JJA6GQKH.js';
22
19
  import { ModalBreadcrumbHeader, ModalCrumbs } from '../chunk-RC6VTY2H.js';
23
- import { useDocumentFilter, useConnectedTags, useConnectedDocuments, useConnectedConversations, useListedDocuments, listedDocuments } from '../chunk-5ETT7ZIO.js';
24
- export { isListedDocument, useConnectedConversations, useConnectedDocuments, useConnectedTags, useDocumentFilter, useListedDocuments } from '../chunk-5ETT7ZIO.js';
25
- import { useConnectedWorkspace, useConnection, useOptionalConnection, ConnectionProvider } from '../chunk-IZJ3BOJO.js';
26
- export { SESSION_EXPIRED_MESSAGE, isAuthenticated, useConnectedWorkspace, useConnection } from '../chunk-IZJ3BOJO.js';
27
20
  import { SignatureCertificate, SignDocumentDialog } from '../chunk-PQU6LE7U.js';
28
21
  import '../chunk-6HKLTYNN.js';
29
22
  import { SettingsSection, SettingsCard, SettingsActionRow, SettingsRow, SettingsDangerZone, SettingsPanel, SettingsDisclosure } from '../chunk-MZA7GMOH.js';
@@ -31,40 +24,37 @@ import '../chunk-MTSKK3BN.js';
31
24
  import '../chunk-LU23I2HS.js';
32
25
  import { FactSourcesPanel, FactPassageItem } from '../chunk-HFZ45FD3.js';
33
26
  import '../chunk-IA5BYEO7.js';
34
- import { EntityTooltip, EntityTooltipHeader, EntityTooltipSection, EntityTooltipHint, SharedCell, WorkspaceActivityList, WorkspaceNotificationMenu, ThreadFollowMenuItem, ThreadFollowButton, TagTable, TagPicker, tagsPageNouns, entitiesPhrase, ExtractEntitiesDialog, GridRowNavigator, LoadingIndicator, EntityIdentityBar, IDENTITY_NAME_MAX_LENGTH, EntityTooltipStats, tagTableDocx, documentCount, tagTableLabels, TagDetail, tagDetailLabels, tagNoteLabel, tagKindDescription, Toolbar, glossaryEntries, glossaryDocx, glossaryMarkdown, glossaryFileName } from '../chunk-DF2GSH4D.js';
27
+ import { EntityTooltip, EntityTooltipHeader, EntityTooltipSection, EntityTooltipHint, SharedCell, WorkspaceActivityList, WorkspaceNotificationMenu, ThreadFollowMenuItem, ThreadFollowButton, TagTable, TagPicker, tagsPageNouns, entitiesPhrase, ExtractEntitiesDialog, GridRowNavigator, LoadingIndicator, EntityIdentityBar, IDENTITY_NAME_MAX_LENGTH, EntityTooltipStats, tagTableDocx, documentCount, tagTableLabels, TagDetail, tagDetailLabels, tagNoteLabel, tagKindDescription, Toolbar, glossaryEntries, glossaryDocx, glossaryMarkdown, glossaryFileName } from '../chunk-L2MMIC3S.js';
35
28
  import { MemberAvatarStack } from '../chunk-FUPAGAZB.js';
36
29
  import { renderSearchSnippet, SearchGroupHeader, isMeaningMatch, extractHighlightTerms, passesRelevanceCutoff, groupSearchResults, SearchPillToggle, SearchPagination, SearchPageFrame, SearchPageHeader, ApplyLabelDialog, SearchPageBody, SearchToolbarRow, SearchBar, SearchControlsBar, RelevanceThreshold, SearchTotalsHeadline, ApplyLabelButton, getSearchMatchHint, SearchResultsMain, SearchResultsInner, SearchErrorBanner, SearchResultList, SearchGroupCard, SearchNoResults, SearchEmptyState } from '../chunk-G4IYES7G.js';
37
- import { SearchHit } from '../chunk-AYAWG2CM.js';
30
+ import { SearchHit } from '../chunk-TNWJPTDG.js';
38
31
  import { UsageMeter } from '../chunk-66TA5IBN.js';
39
- import { DataTable, PageHeader, MetricCard } from '../chunk-RWU3C4MK.js';
32
+ import { DataTable, PageHeader, MetricCard } from '../chunk-WLWY43FR.js';
40
33
  import { ThemeEditor } from '../chunk-5ZBXFHZW.js';
41
34
  import { TimelineZoomControl } from '../chunk-4EZVCGRL.js';
42
35
  import '../chunk-UJE32SST.js';
43
36
  import '../chunk-NHZK64TQ.js';
44
37
  import { PlainMailBodyEditor, MemberNameCell, MemberMutedText, MemberRoleCell, MemberListLoading, MemberBulkActions, buildMailFolderTree, MailFolderTree, AddContactsResults, AddContactsForm, emailTokens, EMPTY_CONTACT_FORM, contactToForm, contactStatusLabel, summarizeImport, matchesContact, contactName, primaryEmail, draftMailCompose, replyMailCompose, emptyMailCompose, MailGrid, MailMessageView, DmThreadFrame, DmAccessRequestBanner, planContactInvites, MAX_INVITE_EMAILS, summarizeUnsentInvites, applyContactInviteResults, summarizeContactInvites, failContactInvites, validateContactForm, inviteEmail, formToContactCard, DEFAULT_CONTACT_OUTCOME_LABELS, contactOutcomeMessage, MailDocumentPicker, parseMailRecipients } from '../chunk-H7L43DIE.js';
45
38
  import '../chunk-NBV56SGU.js';
46
- import { DmThreadHeader, DmInviteChip } from '../chunk-2S3LT5KE.js';
47
39
  import { ErrorBoundary } from '../chunk-EQ3WRY2N.js';
48
40
  import { LabelMultiSelectView } from '../chunk-JMQLTMJ7.js';
49
41
  import { workspaceKindColor, WorkspaceIdentity, SidebarBadgeRow, ActionCluster, prefetchChunk } from '../chunk-PXYP3DM5.js';
42
+ import { PassagePill, useCopyText } from '../chunk-MNLMPH45.js';
50
43
  import '../chunk-K4BGOPGG.js';
51
- import { useHost, ArbiHost } from '../chunk-T4P237N6.js';
52
44
  import '../chunk-ZCOVDK2E.js';
53
45
  import { isDefinitionsLabel, DOCX_MIME_TYPE, toDefinitionSource, definitionLabels } from '../chunk-IYUKJESY.js';
54
46
  import { decodeWhitespaceEntities } from '../chunk-AF6RDAJF.js';
55
- import { EntityChip, StepTraceSummary, StepTrace, getCurrentAgentStepPresentation, AssistantEntity, ThreadActivity, SubAgentLane, getAgentStepPresentation, stepAccent, MODEL_TIER_ICON_MAP, StepRow, StepNarration, StepSummary, StepDetail, StepOutcome, StepParams, GoalCriteria, SubStepGroup, MODEL_TIER_LABELS, fromPlanSteps, latestMessageTime, isSupersededStop, compactThreadActivity, unnotifiedMentions, notifiedLabel, linkedRunsFromActivity, getModelIcon, SubagentRoster, buildLibrarySkills, filterLibrarySkills, SKILL_SOURCE_LABELS, SKILL_TYPE_LABELS, SkillViewToggle, SkillFilterChips, SkillTile, SkillGenerateForm, SkillLibraryDetail, parseSkillFrontmatter, SKILL_MAIN_FILENAME, SkillEditForm, DEFAULT_AGENT_CAPABILITIES, stripPersonaPreamble, AgentCreator, DEFAULT_AGENT_TYPES, DEFAULT_AGENT_TEMPLATES, AgentAvatarField, isValidAgentName, AgentConnectInstructions, TaskRunsDialog, TaskActivityDialog, WorkflowStepBar, ConsentPage, ConsentCard, ConsentHeader, ConsentNotice, ConsentSection, ConsentBulletList, ConsentStrong, ConsentText, ConfigForm, AgentEditView, AgentMainView, AgentCreatedView, AgentCreateView, WorkflowRunStatus, ThreadStatusLine, WorkflowThreadStrip, WorkflowStepAction, WorkflowThreadStartedBy, TaskFlow, useWorkflowUsage, WEB_WORKFLOWS, DASHBOARD_PINNED, CUSTOM_TASK, REMIND_TASK, DASHBOARD_OPERATIONS, sortByRecentUse, taskComposerToCreateRequest, taskComposerToUpdateRequest, composerToWorkflowUpdate, moveTargets, workflowToComposerValues, REMIND_TASK_ID, CUSTOM_TASK_ID, taskToComposerValues, TaskComposer, renderWorkflowIcon, AUTOMATION_EVENTS, TaskPlan, TaskStartDialog, ThreadLauncher, NewThreadDialog, GENERATE_IMAGE_ID, IMAGE_ASPECT_AUTO, deriveAnnotationName, ANNOTATE_ID, recordWorkflowUse, openWorkflowLaunch, useWorkflowLaunchRequest, AgentBar, AgentBarNotes, AgentBarQueuedNote, AgentBarProbeAnswer, BUILTIN_SKILLS, TaskEmptyState, ConsentMessage, CopyableUrl, ConsentPermissionList, ConsentActions, ConsentFootnote, AgentBarStatus, AgentBarIconButton, AgentBarMenu, composePersona, newThreadToRequest, importSkillFile, importSkillFromUrl, WorkflowRunner, skillSlug, serializeSkill, toPlanSteps, useWorkflowView, STATUS_LABELS, asTaskStatus, workflowToSkillMarkdown, closeWorkflowLaunch } from '../chunk-EJSVRT3G.js';
47
+ import { EntityChip, StepTraceSummary, StepTrace, getCurrentAgentStepPresentation, AssistantEntity, ThreadActivity, SubAgentLane, getAgentStepPresentation, stepAccent, MODEL_TIER_ICON_MAP, StepRow, StepNarration, StepSummary, StepDetail, StepOutcome, StepParams, GoalCriteria, SubStepGroup, MODEL_TIER_LABELS, fromPlanSteps, latestMessageTime, isSupersededStop, compactThreadActivity, unnotifiedMentions, notifiedLabel, linkedRunsFromActivity, getModelIcon, SubagentRoster, buildLibrarySkills, filterLibrarySkills, SKILL_SOURCE_LABELS, SKILL_TYPE_LABELS, SkillViewToggle, SkillFilterChips, SkillTile, SkillGenerateForm, SkillLibraryDetail, parseSkillFrontmatter, SKILL_MAIN_FILENAME, SkillEditForm, DEFAULT_AGENT_CAPABILITIES, stripPersonaPreamble, AgentCreator, DEFAULT_AGENT_TYPES, DEFAULT_AGENT_TEMPLATES, AgentAvatarField, isValidAgentName, AgentConnectInstructions, TaskRunsDialog, TaskActivityDialog, WorkflowStepBar, ConsentPage, ConsentCard, ConsentHeader, ConsentNotice, ConsentSection, ConsentBulletList, ConsentStrong, ConsentText, ConfigForm, AgentEditView, AgentMainView, AgentCreatedView, AgentCreateView, GENERATE_IMAGE_ID, IMAGE_ASPECT_AUTO, taskComposerToCreateRequest, taskComposerToUpdateRequest, composerToWorkflowUpdate, deriveAnnotationName, ANNOTATE_ID, recordWorkflowUse, renderWorkflowIcon, useWorkflowUsage, WEB_WORKFLOWS, DASHBOARD_PINNED, CUSTOM_TASK, REMIND_TASK, DASHBOARD_OPERATIONS, sortByRecentUse, openWorkflowLaunch, useWorkflowLaunchRequest, WorkflowRunStatus, ThreadStatusLine, WorkflowThreadStrip, WorkflowStepAction, WorkflowThreadStartedBy, TaskFlow, moveTargets, workflowToComposerValues, REMIND_TASK_ID, CUSTOM_TASK_ID, taskToComposerValues, TaskComposer, AUTOMATION_EVENTS, TaskPlan, TaskStartDialog, ThreadLauncher, NewThreadDialog, AgentBar, AgentBarNotes, AgentBarQueuedNote, AgentBarProbeAnswer, BUILTIN_SKILLS, TaskEmptyState, ConsentMessage, CopyableUrl, ConsentPermissionList, ConsentActions, ConsentFootnote, AgentBarStatus, AgentBarIconButton, AgentBarMenu, composePersona, newThreadToRequest, importSkillFile, importSkillFromUrl, WorkflowRunner, skillSlug, serializeSkill, toPlanSteps, useWorkflowView, STATUS_LABELS, asTaskStatus, workflowToSkillMarkdown, closeWorkflowLaunch } from '../chunk-5VSMJ674.js';
56
48
  import { MultiSelect } from '../chunk-CQCC7LE7.js';
57
- import { PersonPill, documentScopeLabels, matchWorkflowScope } from '../chunk-KKBYWVEL.js';
58
- import { SectionLabel } from '../chunk-TKOP6WMD.js';
49
+ import { PersonPill, documentScopeLabels, matchWorkflowScope } from '../chunk-SLGRQMHW.js';
50
+ import { SectionLabel } from '../chunk-OYKITGTK.js';
59
51
  import { TriStateFilterMenu } from '../chunk-G4GLDQLY.js';
60
52
  import '../chunk-M4S75AEJ.js';
61
53
  import '../chunk-5LXQPP2K.js';
62
54
  import { SelectionBar, SelectionBarAction } from '../chunk-NUNKSZKU.js';
63
55
  import '../chunk-RLWIUUQ5.js';
64
56
  import { FilterInput } from '../chunk-YU2KUMGE.js';
65
- import '../chunk-WBCGVEJX.js';
66
- import { TabHeader } from '../chunk-ABEKUV6L.js';
67
- import { EmptyState } from '../chunk-P6GHJSLR.js';
57
+ import '../chunk-CMTAOVUX.js';
68
58
  import { GridView } from '../chunk-7F5Z4K5W.js';
69
59
  import { StreamedArtifactFrame } from '../chunk-LOJVUGBJ.js';
70
60
  import { DEFAULT_PASSWORD_RULES, AccountRecoveryDialog, promptSaveCredential, useFragmentCredentials, AuthLayout, AuthHeading, AuthField, AuthInput, AuthFieldBadge, AuthLink, AuthNote, RevealablePasswordInput, AuthConsent, AuthSubmitButton, AuthDivider, AuthAlert, RecoveryKeyDialog, parseAuthError, AuthOfflineBadge, AuthTabs, splitAuthHash, withTrailingFragment } from '../chunk-VN4FSGBR.js';
@@ -72,31 +62,41 @@ import { PasswordStrengthInput } from '../chunk-P6OLZGQA.js';
72
62
  import { attendeeKey, upcomingOf, conferenceUrl, isWebinarConference, canJoinEvent, calendarToListItem, buildGridEvents, pendingCreateToGrid, newEventDraft, MiniMonth, CalendarList, CalendarGrid, printCalendar, EventDetails, ScopeDialog, CalendarFormDialog, ProposeTimeDialog, isCalendarAttachment, parseIcsInvite, formatEventWhen, groupSlotsByDay, publicBookingMessage, formatSlotRange, zoneOptions, buildTimeChangeRequest, eventToDraft, needsScope, validateDraft, CALENDAR_DEFAULT_LABELS, buildCreateBody, buildDeleteTarget, EventEditor, toSettingsValue, CalendarSettingsForm, describeCalendarError, normalizeFeedUrl, parseOverlayLink, isAllDayDraft, draftRangeUtc, freeBusyToRows, SchedulingAssistant, applySuggestion, toSuggestionViews, bookingLink, defaultRoomWindow, bookingToForm, emptyBookingForm, slugify, WeeklyHoursEditor, validateBookingForm, formToBookingBody, WEEKDAY_NAMES, formatBusy, buildEditRequest } from '../chunk-AWVGKHJT.js';
73
63
  import { detectTimeZone, utcToDate, formatPlainDate, formatInZone, safeZone, todayInZone, addDays, listTimeZones, wallToUtc } from '../chunk-OJIX5NBN.js';
74
64
  import { DocumentPicker } from '../chunk-WNDIVNPT.js';
75
- import { useLongPaste, useRecipientDraft, SlashMenu, ContextUsageBar, findMessageDocument, getParticipantTints, flashMessage, parseSlashTokenInProgress, buildSlashItems, filterSlashItems, copyMessageToClipboard, BranchControls, ThreadVisualizer, downloadTableAsCsv, useOpenCitation, ModelAutoIcon, ModelTierIcon, ModelDot, ModelPricingTip, ModelPickerPopover, ModelOption, ModelMenuDivider, ModelTierOption, ModelConfigureButton, ModelMenuMessage, ModelPickerTrigger, ModelTriggerContent, ModelOptionLabel, ConversationBody, ConversationMain, ConversationLoading, PendingAnswerBar, ComposerTools, PaModeBadge, ComposerAccessories, DraftingDocChip } from '../chunk-W43S7COD.js';
76
- import { ComposerSend, ComposerVoiceButton, Composer, MessageActionMenu, MessageActionButton, MessageFooter, MessageRoot, MessageContent, MessageAuthor, MessageBubble, MessageByline, MessageSubagentBadge, MessageBody, MessageNarration, useStreamAnnouncement, MessageList, WorkflowStepChip, MessageSources, ChatPage, ConversationEmpty, MessageAlert, ComposerDock, ComposerContainer, ScrollToBottom } from '../chunk-TY76UEFK.js';
77
- import { ConversationFilter } from '../chunk-6AMCMKTF.js';
65
+ import { useTranscriptRuns, TranscriptEntry, ThreadCallLogCard, RecordingCard, useMeetingThreadMessages, threadTranscriptRuns, useProvisionalSpeakers, TranscriptRunsContext, ProvisionalSpeakers, CallConversationEmpty } from '../chunk-EPNJOP2M.js';
66
+ export { useMeetingThreadMessages } from '../chunk-EPNJOP2M.js';
67
+ import { parseCallLogDetail } from '../chunk-S3YRRD54.js';
68
+ import { useDocumentFilter, useConnectedTags, useConnectedDocuments, useConnectedConversations, useListedDocuments, listedDocuments } from '../chunk-IYKGI2DQ.js';
69
+ export { isListedDocument, useConnectedConversations, useConnectedDocuments, useConnectedTags, useDocumentFilter, useListedDocuments } from '../chunk-IYKGI2DQ.js';
70
+ import { useConnectedWorkspace, useConnection, useOptionalConnection, ConnectionProvider } from '../chunk-XMDIXNLW.js';
71
+ export { SESSION_EXPIRED_MESSAGE, isAuthenticated, useConnectedWorkspace, useConnection } from '../chunk-XMDIXNLW.js';
72
+ import { DmThreadHeader, DmInviteChip } from '../chunk-2S3LT5KE.js';
73
+ import { useHost, ArbiHost } from '../chunk-T4P237N6.js';
74
+ import { TabHeader } from '../chunk-ABEKUV6L.js';
75
+ import { EmptyState } from '../chunk-P6GHJSLR.js';
76
+ import { useLongPaste, useRecipientDraft, SlashMenu, ContextUsageBar, findMessageDocument, getParticipantTints, flashMessage, parseSlashTokenInProgress, buildSlashItems, filterSlashItems, copyMessageToClipboard, BranchControls, ThreadVisualizer, downloadTableAsCsv, useOpenCitation, ModelAutoIcon, ModelTierIcon, ModelDot, ModelPricingTip, ModelPickerPopover, ModelOption, ModelMenuDivider, ModelTierOption, ModelConfigureButton, ModelMenuMessage, ModelPickerTrigger, ModelTriggerContent, ModelOptionLabel, ConversationBody, ConversationMain, ConversationLoading, PendingAnswerBar, ComposerTools, PaModeBadge, ComposerAccessories, DraftingDocChip } from '../chunk-NBQNDHOW.js';
77
+ import { ComposerSend, ComposerVoiceButton, Composer, MessageActionMenu, MessageActionButton, MessageFooter, MessageRoot, MessageContent, MessageAuthor, MessageBubble, MessageByline, MessageSubagentBadge, MessageBody, MessageNarration, useStreamAnnouncement, MessageList, WorkflowStepChip, MessageSources, ChatPage, ConversationEmpty, MessageAlert, ComposerDock, ComposerContainer, ScrollToBottom } from '../chunk-JLJVEQFN.js';
78
78
  import { workspaceDocIdFromHref } from '../chunk-DDCMLHXF.js';
79
79
  import '../chunk-7XF5SFJ2.js';
80
- import { buildDeepLinkPath, buildDeepLinkUrl } from '../chunk-7Q5INDUS.js';
81
- import { useMentionAutocomplete, stepStatesFromActivity, stepDocuments, splitDocRef, stepPhase, stepKindOf, STEP_KIND_ICONS, stepLevels, canAssign, assigneeName, runFieldsOf, initialRunInputs, workflowSteps, runThreadTitle, stepFields } from '../chunk-DV25UPJ7.js';
80
+ import { useMentionAutocomplete, stepStatesFromActivity, stepDocuments, splitDocRef, stepPhase, stepKindOf, STEP_KIND_ICONS, stepLevels, canAssign, assigneeName, runFieldsOf, initialRunInputs, workflowSteps, runThreadTitle, stepFields } from '../chunk-THNTNAYI.js';
82
81
  import { mergeSkillWorkflows, composeWorkflowPrompt, isEmptyWorkflowScope, inputsFromContext, workflowsAccepting, promptFieldName, validateInputs, defaultInputs, buildLaunch } from '../chunk-TZGBRLPK.js';
83
82
  import '../chunk-AUS3KBHJ.js';
84
- import '../chunk-NPLYHR2E.js';
83
+ import { fmtDate, initials } from '../chunk-5VYJP6XD.js';
85
84
  import { useIsPhone, useMediaQuery } from '../chunk-SLSBJRWW.js';
86
85
  import { useListKeyNav, MentionMenu } from '../chunk-GAGYAHYO.js';
87
- import { PassagePill, useCopyText } from '../chunk-MTHAQGJB.js';
88
- import { fmtDate, initials } from '../chunk-5VYJP6XD.js';
89
- import { useBlocksEnvironment, useOpenWorkflow, useRequestedSettingsSection, useIntentRequest, mailDraftRequest, useCalendarViewStore, conversationStartRequest } from '../chunk-SSRFSSIT.js';
90
- export { requestCalendarComposer, requestCalendarEvent, useCalendarViewStore } from '../chunk-SSRFSSIT.js';
86
+ import { ConversationFilter } from '../chunk-6AMCMKTF.js';
87
+ import { buildDeepLinkPath, buildDeepLinkUrl } from '../chunk-7Q5INDUS.js';
88
+ import '../chunk-NPLYHR2E.js';
89
+ import { useBlocksEnvironment, useOpenWorkflow, openDialog, closeDialog, useDialogProps, useRequestedSettingsSection, useIntentRequest, mailDraftRequest, useCalendarViewStore, conversationStartRequest } from '../chunk-TGVBLXLV.js';
90
+ export { requestCalendarComposer, requestCalendarEvent, useCalendarViewStore } from '../chunk-TGVBLXLV.js';
91
91
  import { ConfirmDialog } from '../chunk-U4HWVCRN.js';
92
92
  import { ModalHeader, ModalScaffold, ModalSection, ModalSectionTitle } from '../chunk-TX2ZICS7.js';
93
93
  import '../chunk-7F6CBP3Z.js';
94
94
  import '../chunk-VUNV25KB.js';
95
95
  import { QueryClient, useQueryClient, QueryClientProvider } from '@tanstack/react-query';
96
- import { useWorkspaces, ArbiBotHeadIcon, IN_FLIGHT_DOCUMENT_STATUSES, useOfflineDocumentIds, useOpenViewerDocumentId, FINISHED_DOCUMENT_STATUSES, useMailPolicy, useProcessingTasks, resolveDocumentStatus, useArbi, useIsCreatingTag, useUpdateDocuments, useDeleteDocuments, useRenameFolder, useDownloadDocuments, useTags, useDocumentHostActions, useDocumentThumbnails, HtmlIcon, useArbiSessionState, selectDraft, useArbiSessionStore, useAudioRecorder, MicRecordingOverlay, useArbiWsStatus, useArbiWsStore, useUserSettings, useProcessingTask, useDocumentPendingSync, useWorkspaceUsers, useMessageTimer, useDocuments, useAvailableModels, formatGbp, CitationRenderer, useArbiSession, buildMentionCandidates, useConversations, ASSISTANT_MENTION_LABEL, useConversationItems, useDeleteMessage, useArbiHost, transcriptSegmentOf, useConfig, useThinkingContent, useCreateFact, useCreateFacts, workflowStepOf, stripSpeakerPrefix, MessageArtifactCard, useConversationData, useBranchNavigation, useSkills, useBuiltinCommands, useDocumentsSupport, useConversationActivity, useMessageDetails, useWorkflows, getWorkspaceKind, resolveConfigModel, useRunConversation, useWorkspaceActivity, callLink, openCall, startDmCall, calendarQueryKeys, mailQueryKeys, arbiQueryKeys, invalidateConversationLists, isWorkspaceNotificationType, useNotifications, useDeleteNotifications, useMarkNotificationsRead, useCallsEnabled, serverNotificationBellEntry, documentDisplayName, useWorkspaceNotificationLevel, useFollowThread, useUploadSkillFiles, useSaveSkill, useSetSkillVisibility, useDeleteSkill, useSkillSource, useAgentModels, useMcpTools, useAgentConfig, useAgentWorkspaces, useCreateAgent, useSaveAgentConfig, useGrantAgentAccess, useRevokeAgentAccess, useGenerateAgentAvatar, useWorkflowRuns, useAgents, ArtifactCanvas, ConversationScope, useConversation, useTagKindSchema, useCreateTag, useSetTagValues, useUpdateTagKindSchema, useUpdateTag, useFacts, useDeleteTag, useExtractEntities, useEntityExtractionDocIds, useStartWorkspaceTransfer, useResumeWorkspaceTransfer, useCancelWorkspaceTransfer, useWorkspaceTransfer, useWorkspaceTransfers, useWorkspaceExportDownload, usePlanWorkspaceTransfer, isTransferResumable, isTransferFinished, useShellWorkspaces, useProfile, useUpdateProfile, useRequestEmailChange, useConfirmEmailChange, useNameEditor, useAvatarCrop, useEmailChange, ImageCropModal, useIdentityVerification, usePasswordChange, usePasswordChangeForm, useNotificationPreferences, useSessions, useCurrentSessionId, useTerminateSession, useSignOut, useDeleteAccount, useDeleteAccountFlow, useMailClient, defaultMailAlias, useClaimNativeAlias, useMailOnline, useConnectMailAccount, useDisconnectMailAccount, useMailAccounts, useUpdateUserSettings, useDismissedTips, useConnectorVendorVisibility, useConnectorCatalog, useMyConnectors, useDisconnectConnector, useSlackConnection, useDisconnectSlack, isMailboxSyncVendor, isSharePointVendor, useWorkspaceTrash, useInvalidateStorage, useStorageActions, useStorageItems, useStorageItemNames, useStorageProjects, useUserUsageToday, useStorageSnapshots, useUpdateWorkspace, useAddWorkspaceMembers, useRemoveWorkspaceMembers, useSetWorkspaceMemberRoles, toShellWorkspace, useEnableMailboxSync, useMailboxFolders, useEnableDriveSync, useDriveFolderChildren, connectorErrorStatus, useProjectInvoices, useProjects, useUpdateProjectFields, useChargeWatch, useAddonQuote, STILL_WORKING, useProjectBillingPortal, useProjectUsage, useIsSlow, useProducts, useCreateProject, useDeleteProject, useRefreshProject, useBoxRole, useContacts, useInviteContacts, useCanCreateProjects, useDeleteWorkspaces, PROJECT_CREATION_DENIED_REASON, useCreateContact, useUpdateContact, useLinkContact, useEntitlements, useImportContacts, entitlementRefusal, useDeleteContact, MAX_RETRIEVE_DOC_IDS, useSemanticSearch, useAssignDocTags, useMailUnlock, useMailFolders, useMailMessages, useMailDraftCompose, useMailMessage, useMailCache, MailOfflineUnavailableError, accountPath, useCalendarEvents, useCalendars, useCanHostCalls, useOpenCallMeetingChat, usePeople, useFetchCalendarEvent, useCalendarSettings, useCalendarOverlays, useCalendarOutbox, useCalendarAccounts, useSyncAccountsOnOpen, useResumeCalendarAccountConnect, useCreateEvent, useUpdateEvent, useDeleteEvent, useMoveEvent, useRespondToEvent, useCreateCalendar, useUpdateCalendar, useDeleteCalendar, useImportCalendar, useSaveCalendarSettings, useRefreshCalendar, useCalendarEvent, useMailAttachmentText, useCalendarEventByUid, getPublicBookingPage, bookPublicSlot, PublicBookingError, isZipFile, prepareUploadFiles, UPLOAD_MAX_FILE_SIZE, filesFromDrop, UPLOAD_ACCEPT, useUploadFromUrls, useUploadFiles, useUpdateDocTag, useRemoveDocTags, subscribeDocumentRows, useGenerateDocTags, useDocumentsLoading, selectViewingDocumentId, useRelatedDocuments, myChatId, useChatThread, useChatPost, useDeleteChatMessage, useMarkChatRead, setOpenChat, useAgentDmStatus, annotateThread, userDisplayName, DmComposer, TypingIndicator, useRenameChat, useAddChatMembers, useRemoveChatMember, useChats, useChatSummaries, useCreateGroupChat, useApplyChatModel, AUTO_CHAT_MODEL, formatGbpPerMillionTokens, useConfigSchema, useSaveConfig, useConversationPendingAuth, openAccessRequest, useRequestWorkspaceAccess, useIsEntitled, ImageCropper, threadTabId, useUpdateConversation, useCanEditShared, useActOnStep, useCreateWork, useRunWorkflow, useStartTaskQuery, useCreateWorkflow, useUpdateWorkflow, usePlanWork, useWorkItems, TaskThreadPendingError, useMentionCandidates, useAgentRunControl, useConnectRunStream, useAnswerAgentQuestion, useConversationIsShared, useWorkspaceRole, buildPendingFirstTurn, useConversationTurn, useAskAgain, getOrphanedLastMessage, refuseChatWhenOffline, useThreadDocument, useDocumentAutoAdd, useAutoSendDraft, READ_ONLY_MEETING_TEXT, useAgentSession, useStartAgentSession, useCloseAgentSession, downloadRecoveryFile, LinkedInIcon, GoogleIcon, AppleIcon, useCurrentUser, isQueuedCalendarWrite, DateSeparator, ChatBubble, isAliasTakenError, nextAliasSuggestion, aliasTakenMessage, mailJson, connectorReturnTo, DmAvatar, ConversationList, GitHubIcon, cropImage, getRelatedTotal, isDeploymentUserNotification, describeServerNotification, getWorkspaceActionText, getWorkspaceSentPhrase, BOX_SEAT_REFUSED, BOX_SEAT_REFUSED_TITLE, documentActivityPhrase, isSignatureNotificationType, inputRequestTitle, WORK_NOTIFICATION_LABELS, useConversationThreads, usePassageQuotes, useUpdateFact, useDeleteFact, useAccountClient, useDriveFolderDocCount, useChangeProjectPlan, useCancelProjectSubscription, usePreviewProjectPlanChange, useAddProjectAddonBlock, usePlanQuote, useCreateProjectCheckout, useInvalidateProjects, useSwitchWorkspace, fileAttachment, useMailProjects, useSaveMailDraft, useSendMail, useMailDraftReplaced, useCalendarInvitations, useDecideCounter, useSearchContacts, usePublishCalendar, useCalendarShares, useShareCalendar, useUnshareCalendar, useSubscribeCalendar, useHolidayCountries, useAddHolidayCalendar, cancelPublicBooking, useInvalidateAfterTransfer, useConfigs, useSaveConfigField, useDeleteConfig, isFullConfig, useChatUnreadTotal, useUnreadByPeer, useProjectConversationUsage, AiAnswer, ArbiWebSocketProvider, signatureNotificationPhrase, signatureRequestMeta, getNotificationTypeMeta, useMailDraftEditor, useFreeBusy, useFindTime, useCalendarSupport, useStartCalendarAccountOAuth, useConnectOAuthAccount, useBookingPages, useDeleteBookingPage, useRooms, isReplayableArbiMutation, SHAREPOINT_VENDORS, useUpdateProjectNextPeriodAddons, useUpdateProjectAddonSettings, useSyncCalendarAccount, useUpdateCalendarAccount, useDisconnectCalendarAccount, ACCOUNT_VENDOR, useCalDavProfiles, useConnectCalDavAccount, useSaveBookingPage, useCreateRoom } from '@arbidocs/react';
96
+ import { useWorkspaces, ArbiBotHeadIcon, IN_FLIGHT_DOCUMENT_STATUSES, useOfflineDocumentIds, useOpenViewerDocumentId, FINISHED_DOCUMENT_STATUSES, useMailPolicy, useProcessingTasks, resolveDocumentStatus, useArbi, useIsCreatingTag, useUpdateDocuments, useDeleteDocuments, useRenameFolder, useDownloadDocuments, useTags, useDocumentHostActions, useDocumentThumbnails, HtmlIcon, useArbiSessionState, selectDraft, useArbiSessionStore, useAudioRecorder, MicRecordingOverlay, useArbiWsStatus, useArbiWsStore, useUserSettings, useProcessingTask, useDocumentPendingSync, useWorkspaceUsers, useMessageTimer, useDocuments, useAvailableModels, formatGbp, CitationRenderer, useArbiSession, buildMentionCandidates, useConversations, ASSISTANT_MENTION_LABEL, useConversationItems, useDeleteMessage, useArbiHost, transcriptSegmentOf, useConfig, useThinkingContent, useCreateFact, useCreateFacts, workflowStepOf, stripSpeakerPrefix, MessageArtifactCard, useConversationData, useBranchNavigation, useSkills, useBuiltinCommands, useDocumentsSupport, useConversationActivity, useMessageDetails, useWorkflows, getWorkspaceKind, resolveConfigModel, useRunConversation, useWorkspaceActivity, callLink, openCall, startDmCall, calendarQueryKeys, mailQueryKeys, arbiQueryKeys, invalidateConversationLists, isWorkspaceNotificationType, useNotifications, useDeleteNotifications, useMarkNotificationsRead, useCallsEnabled, serverNotificationBellEntry, documentDisplayName, useWorkspaceNotificationLevel, useFollowThread, useUploadSkillFiles, useSaveSkill, useSetSkillVisibility, useDeleteSkill, useSkillSource, useAgentModels, useMcpTools, useAgentConfig, useAgentWorkspaces, useCreateAgent, useSaveAgentConfig, useGrantAgentAccess, useRevokeAgentAccess, useGenerateAgentAvatar, useWorkflowRuns, useAgents, ArtifactCanvas, ConversationScope, useConversation, useTagKindSchema, useCreateTag, useSetTagValues, useUpdateTagKindSchema, useUpdateTag, useFacts, useDeleteTag, useExtractEntities, useEntityExtractionDocIds, useStartWorkspaceTransfer, useResumeWorkspaceTransfer, useCancelWorkspaceTransfer, useWorkspaceTransfer, useWorkspaceTransfers, useWorkspaceExportDownload, usePlanWorkspaceTransfer, isTransferResumable, isTransferFinished, useShellWorkspaces, useProfile, useUpdateProfile, useRequestEmailChange, useConfirmEmailChange, useNameEditor, useAvatarCrop, useEmailChange, ImageCropModal, useIdentityVerification, usePasswordChange, usePasswordChangeForm, useNotificationPreferences, useSessions, useCurrentSessionId, useTerminateSession, useSignOut, useDeleteAccount, useDeleteAccountFlow, useMailClient, defaultMailAlias, useClaimNativeAlias, useMailOnline, useConnectMailAccount, useDisconnectMailAccount, useMailAccounts, useUpdateUserSettings, useDismissedTips, useConnectorVendorVisibility, useConnectorCatalog, useMyConnectors, useDisconnectConnector, useSlackConnection, useDisconnectSlack, isMailboxSyncVendor, isSharePointVendor, useWorkspaceTrash, useInvalidateStorage, useStorageActions, useStorageItems, useStorageItemNames, useStorageProjects, useUserUsageToday, useStorageSnapshots, useUpdateWorkspace, useAddWorkspaceMembers, useRemoveWorkspaceMembers, useSetWorkspaceMemberRoles, toShellWorkspace, useEnableMailboxSync, useMailboxFolders, useEnableDriveSync, useDriveFolderChildren, connectorErrorStatus, useProjectInvoices, useProjects, useUpdateProjectFields, useChargeWatch, useAddonQuote, STILL_WORKING, useProjectBillingPortal, useProjectUsage, useIsSlow, useProducts, useCreateProject, useDeleteProject, useRefreshProject, useBoxRole, useContacts, useInviteContacts, useCanCreateProjects, useDeleteWorkspaces, PROJECT_CREATION_DENIED_REASON, useCreateContact, useUpdateContact, useLinkContact, useEntitlements, useImportContacts, entitlementRefusal, useDeleteContact, MAX_RETRIEVE_DOC_IDS, useSemanticSearch, useAssignDocTags, useMailUnlock, useMailFolders, useMailMessages, useMailDraftCompose, useMailMessage, useMailCache, MailOfflineUnavailableError, accountPath, useCalendarEvents, useCalendars, useCanHostCalls, useOpenCallMeetingChat, usePeople, useFetchCalendarEvent, useCalendarSettings, useCalendarOverlays, useCalendarOutbox, useCalendarAccounts, useSyncAccountsOnOpen, useResumeCalendarAccountConnect, useCreateEvent, useUpdateEvent, useDeleteEvent, useMoveEvent, useRespondToEvent, useCreateCalendar, useUpdateCalendar, useDeleteCalendar, useImportCalendar, useSaveCalendarSettings, useRefreshCalendar, useCalendarEvent, useMailAttachmentText, useCalendarEventByUid, getPublicBookingPage, bookPublicSlot, PublicBookingError, isZipFile, prepareUploadFiles, UPLOAD_MAX_FILE_SIZE, filesFromDrop, UPLOAD_ACCEPT, useUploadFromUrls, useUploadFiles, useUpdateDocTag, useRemoveDocTags, subscribeDocumentRows, useGenerateDocTags, useDocumentsLoading, selectViewingDocumentId, useRelatedDocuments, myChatId, useChatThread, useChatPost, useDeleteChatMessage, useMarkChatRead, setOpenChat, useAgentDmStatus, annotateThread, userDisplayName, DmComposer, TypingIndicator, useRenameChat, useAddChatMembers, useRemoveChatMember, useChats, useChatSummaries, useCreateGroupChat, useApplyChatModel, AUTO_CHAT_MODEL, formatGbpPerMillionTokens, useConfigSchema, useSaveConfig, useConversationPendingAuth, openAccessRequest, useRequestWorkspaceAccess, useIsEntitled, ImageCropper, useCreateWork, useRunWorkflow, useStartTaskQuery, useCreateWorkflow, useUpdateConversation, useUpdateWorkflow, threadTabId, useCanEditShared, useActOnStep, usePlanWork, useWorkItems, TaskThreadPendingError, useMentionCandidates, useAgentRunControl, useConnectRunStream, useAnswerAgentQuestion, useConversationIsShared, useWorkspaceRole, buildPendingFirstTurn, useConversationTurn, useAskAgain, getOrphanedLastMessage, refuseChatWhenOffline, useThreadDocument, useDocumentAutoAdd, useAutoSendDraft, READ_ONLY_MEETING_TEXT, useAgentSession, useStartAgentSession, useCloseAgentSession, downloadRecoveryFile, LinkedInIcon, GoogleIcon, AppleIcon, useCurrentUser, isQueuedCalendarWrite, DateSeparator, ChatBubble, isAliasTakenError, nextAliasSuggestion, aliasTakenMessage, mailJson, connectorReturnTo, DmAvatar, ConversationList, GitHubIcon, cropImage, getRelatedTotal, isDeploymentUserNotification, describeServerNotification, getWorkspaceActionText, getWorkspaceSentPhrase, BOX_SEAT_REFUSED, BOX_SEAT_REFUSED_TITLE, documentActivityPhrase, isSignatureNotificationType, inputRequestTitle, WORK_NOTIFICATION_LABELS, useConversationThreads, usePassageQuotes, useUpdateFact, useDeleteFact, useAccountClient, useDriveFolderDocCount, useChangeProjectPlan, useCancelProjectSubscription, usePreviewProjectPlanChange, useAddProjectAddonBlock, usePlanQuote, useCreateProjectCheckout, useInvalidateProjects, useSwitchWorkspace, fileAttachment, useMailProjects, useSaveMailDraft, useSendMail, useMailDraftReplaced, useCalendarInvitations, useDecideCounter, useSearchContacts, usePublishCalendar, useCalendarShares, useShareCalendar, useUnshareCalendar, useSubscribeCalendar, useHolidayCountries, useAddHolidayCalendar, cancelPublicBooking, useInvalidateAfterTransfer, useConfigs, useSaveConfigField, useDeleteConfig, isFullConfig, useChatUnreadTotal, useUnreadByPeer, useProjectConversationUsage, AiAnswer, ArbiWebSocketProvider, signatureNotificationPhrase, signatureRequestMeta, getNotificationTypeMeta, useMailDraftEditor, useFreeBusy, useFindTime, useCalendarSupport, useStartCalendarAccountOAuth, useConnectOAuthAccount, useBookingPages, useDeleteBookingPage, useRooms, isReplayableArbiMutation, SHAREPOINT_VENDORS, useUpdateProjectNextPeriodAddons, useUpdateProjectAddonSettings, useSyncCalendarAccount, useUpdateCalendarAccount, useDisconnectCalendarAccount, ACCOUNT_VENDOR, useCalDavProfiles, useConnectCalDavAccount, useSaveBookingPage, useCreateRoom } from '@arbidocs/react';
97
97
  import { mergeAgentSteps, extractSubagentLanes, getCurrentStep, computeRunStats, formatTokens, isNearAiUsageBudget, getSubagentBranchRecord, buildCitationChunkData, topLevelAgentSteps, findMainSiblingLeaf, sliceToSubagentThread, getAgentStepLabel, subagentJobLabel, getStepDisplay, getStepTool, findLeafForTaskMessage, Arbi, FLAT_TAG_KINDS, getEligibleParentTags, canTagHaveParent, isFlatKind, TAG_NESTING_MAX_DEPTH, TAG_KINDS, formatFileSize, filterDocumentTags, isLabelTag, refusalReason, isPresenceTag, isAnnotationTag, flattenTagTree, tagsForScope, tagsOfGroup, chats, buildRetrievalFullContextTool, buildRetrievalChunkTool, getChildTags, tagUseCount, ArbiApiError, PRESENCE_KINDS, isEntityTag, DuplicateContactError, wouldCreateTagCycle, getTagDescendantIds } from '@arbidocs/sdk/browser';
98
98
  import { isAbortError, browserSessionStateStorage, parseCallFragment, validateRecoveryKeyFile, RECOVERY_KEY_ERRORS, parseRecoveryUrl, prewarmKeyPairs, decryptRecoveryKey, unlockIdentityWithPassword, createRecoveryUrl, bytesToBase64, initSodium } from '@arbidocs/client';
99
- import React9, { memo, useMemo, lazy, useRef, useEffect, useCallback, useState, forwardRef, useLayoutEffect, useImperativeHandle, createContext, useContext, useSyncExternalStore, Suspense, Fragment as Fragment$1, useId } from 'react';
99
+ import React9, { memo, useMemo, lazy, useRef, useEffect, useCallback, useState, forwardRef, useLayoutEffect, useImperativeHandle, createContext, useContext, Suspense, useSyncExternalStore, Fragment as Fragment$1, useId } from 'react';
100
100
  import { Users, MessageCircleMore, SquarePen, BookOpen, MessagesSquare, Pencil, Download, Mail, FolderInput, Trash2, Eye, Sparkles, Play, ArrowDownToLine, RefreshCw, Zap, AlertTriangle, FileX, SkipForward, Loader2, Clock, CheckCircle, ArrowUpRight, Send, Settings, Edit3, Copy, Link, Share2, Check, Milestone, RotateCcw, FileText, Network, ChevronRight, Bell, Activity, Info, UserCheck, Upload, Link2, Search, Plus, ArrowLeft, ExternalLink as ExternalLink$1, Tags, CheckCircle2, Monitor, UserCircle, KeyRound, Radio, LogOut, Wifi, Lock, HardDrive, User, HatGlasses, MessageSquare, PlugZap, Gauge, Cloud, XCircle, Building2, Palette, Type, Printer, SquareStack, Table, FolderKanban, Cake, X, UserRound, Star, Tag, Video, CalendarDays, MapPin, Globe, Calendar, Hash, File as File$1, FileType, FolderOpen, Fingerprint, Paperclip, CircleCheck, TriangleAlert, LoaderCircle, NotebookPen, Columns3, EyeOff, ArrowUp, ArrowDown, ZoomOut, Camera, FilePlus2, UserMinus, UserPlus, UsersRound, Code2, Infinity, Bug, Crop, Undo2, ImageUp, ChevronDown, MoreHorizontal, Wrench, RotateCw, Square, BadgeCheck, Shield, ClipboardList, Table2, ArrowUpCircle, Contact, Scale, BookA, Quote, Inbox, CalendarX, CalendarCheck, Phone, LogIn, Pause, Workflow, Minimize2, Maximize2, Minus, CalendarSearch, DoorOpen, AlertCircle } from 'lucide-react';
101
101
  import { isAgent, UserEntity, getUserInitials, getUserDisplayName, getUserAvatarColor, agentAvatarColors, Avatar, AvatarImage, AvatarFallback, cn, ShieldIcon, getWorkspaceColor, getFileTypeIcon, DocumentEntity, getDocumentTitle, formatFolderLabel, getEntityLabel, getEntityColor, VisibilityIcon, formatFriendlyDate, getDocumentSubject, Badge, getTagTypeIcon, getTagTypeLabel, VisibilityToggle, TagEntity, ThreadVisibilityIcon, Button, isImageDocument, Tooltip, TooltipTrigger, TooltipContent, Dialog, DialogContent, formatRelativeTime, ProviderIcon, EntityIcon, Label, Input, Textarea, DialogHeader, DialogTitle, DialogDescription, tagKindNouns, tagKindTitle, IconToggle, Switch, Checkbox, entityNoun, DialogTrigger, ProjectEntity, DialogFooter, Tabs, TabsList, TabsTrigger, TabsContent, getDocIcon, getDocumentNature, getDocumentAuthor, markdownToPlainText, formatDocDate, getDocumentDate, friendlyFileType, canonicalFolderPath, DebouncedInput, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Slider, AgentBadge, PresenceLabel, TooltipProvider, EntityPill, UserMenu, Popover, PopoverAnchor, PopoverTrigger, PopoverContent, Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, ScrollArea, ArbiIcon, ARBI_MARK_SRC, Card, CardHeader, CardTitle, CardContent, VerifiedToggle, Progress } from '@arbidocs/react/ui';
102
102
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -391,25 +391,16 @@ function ConnectedWorkspaceActivity({
391
391
  }
392
392
  );
393
393
  }
394
- var current = null;
395
- var listeners = /* @__PURE__ */ new Set();
396
- function set(notification) {
397
- current = notification;
398
- listeners.forEach((listener) => listener());
399
- }
394
+
395
+ // src/connection/workspace-access/access-review.ts
400
396
  function reviewAccessRequest(notification) {
401
- set(notification);
397
+ openDialog("grantAccess", { notification });
402
398
  }
403
399
  function closeAccessRequestReview() {
404
- set(null);
405
- }
406
- function subscribe(listener) {
407
- listeners.add(listener);
408
- return () => listeners.delete(listener);
400
+ closeDialog("grantAccess");
409
401
  }
410
- var snapshot = () => current;
411
402
  function useAccessRequestUnderReview() {
412
- return useSyncExternalStore(subscribe, snapshot, snapshot);
403
+ return useDialogProps("grantAccess")?.notification ?? null;
413
404
  }
414
405
  function resolveAttendeeUsers(attendees, known, me) {
415
406
  const byId = new Map(known.map((u) => [u.external_id, u]));
@@ -530,12 +521,12 @@ async function updateEventWebinarRoles(arbi, url, roles, peers) {
530
521
  const parsed = parseArbiCallUrl(url);
531
522
  if (!parsed) return;
532
523
  const call = await arbi.calls.get(parsed.callId);
533
- const current2 = new Map((call.invitees ?? []).map((i) => [i.user_ext_id, i.role ?? "attendee"]));
524
+ const current = new Map((call.invitees ?? []).map((i) => [i.user_ext_id, i.role ?? "attendee"]));
534
525
  const changed = Object.fromEntries(
535
- Object.entries(roles).filter(([usr, role]) => current2.has(usr) && current2.get(usr) !== role)
526
+ Object.entries(roles).filter(([usr, role]) => current.has(usr) && current.get(usr) !== role)
536
527
  );
537
528
  if (Object.keys(changed).length) await arbi.calls.update(parsed.callId, { roles: changed });
538
- const team = peers.filter((p) => current2.has(p.external_id) && isTeam(roles[p.external_id]));
529
+ const team = peers.filter((p) => current.has(p.external_id) && isTeam(roles[p.external_id]));
539
530
  if (!team.length) return;
540
531
  try {
541
532
  await arbi.calls.createChat({ callExtId: parsed.callId, callKey: parsed.key, members: team });
@@ -1328,7 +1319,7 @@ function ConnectedNotificationCenter({
1328
1319
  isLoading,
1329
1320
  hasMore: rows.length === limit,
1330
1321
  isLoadingMore: isFetching,
1331
- onLoadMore: () => setLimit((current2) => current2 + pageSize),
1322
+ onLoadMore: () => setLimit((current) => current + pageSize),
1332
1323
  onDelete,
1333
1324
  onOpen: open,
1334
1325
  renderers: merged,
@@ -1594,11 +1585,11 @@ function ConnectedSkillsLibrary({
1594
1585
  () => filterLibrarySkills(all, { query, source, type }),
1595
1586
  [all, query, source, type]
1596
1587
  );
1597
- const current2 = all.find((s) => s.slug === selected) ?? null;
1598
- const { data: currentText, isLoading: textLoading } = useSkillSource(current2?.docExtId);
1588
+ const current = all.find((s) => s.slug === selected) ?? null;
1589
+ const { data: currentText, isLoading: textLoading } = useSkillSource(current?.docExtId);
1599
1590
  useEffect(() => {
1600
- if (selected && !current2 && all.length > 0) setSelected(null);
1601
- }, [selected, current2, all.length]);
1591
+ if (selected && !current && all.length > 0) setSelected(null);
1592
+ }, [selected, current, all.length]);
1602
1593
  const count2 = (s) => all.filter((x) => x.source === s).length;
1603
1594
  const sourceOptions = [
1604
1595
  { id: "all", label: "All", count: all.length },
@@ -1686,7 +1677,7 @@ function ConnectedSkillsLibrary({
1686
1677
  notify17(errorText(error, "Could not export the skill"), "error");
1687
1678
  }
1688
1679
  };
1689
- const rightVisible = mode !== "detail" || current2 !== null;
1680
+ const rightVisible = mode !== "detail" || current !== null;
1690
1681
  const backToList = () => {
1691
1682
  setMode("detail");
1692
1683
  setSelected(null);
@@ -1833,11 +1824,11 @@ function ConnectedSkillsLibrary({
1833
1824
  mode === "edit" && /* @__PURE__ */ jsx(
1834
1825
  SkillEditor,
1835
1826
  {
1836
- skill: current2?.source === "mine" ? current2 : null,
1837
- text: current2?.source === "mine" ? currentText : void 0,
1827
+ skill: current?.source === "mine" ? current : null,
1828
+ text: current?.source === "mine" ? currentText : void 0,
1838
1829
  renderEditor,
1839
1830
  onSave: async (slug, markdown, isEditing) => {
1840
- await saveAs(slug, markdown, isEditing && !!current2?.isShared);
1831
+ await saveAs(slug, markdown, isEditing && !!current?.isShared);
1841
1832
  notify17(isEditing ? `${slug} saved` : `${slug} added`, "success");
1842
1833
  done(slug);
1843
1834
  },
@@ -1846,25 +1837,25 @@ function ConnectedSkillsLibrary({
1846
1837
  }
1847
1838
  ),
1848
1839
  mode === "add" && /* @__PURE__ */ jsx(ConnectedSkillUpload, { onDone: done }),
1849
- mode === "detail" && current2 && /* @__PURE__ */ jsx(
1840
+ mode === "detail" && current && /* @__PURE__ */ jsx(
1850
1841
  SkillLibraryDetail,
1851
1842
  {
1852
- skill: current2,
1843
+ skill: current,
1853
1844
  icon,
1854
- instructions: current2.docExtId ? currentText ? parseSkillFrontmatter(currentText, SKILL_MAIN_FILENAME).content : "" : current2.workflow.run.kind === "prompt" ? current2.workflow.run.promptTemplate : "",
1855
- isLoading: !!current2.docExtId && textLoading,
1845
+ instructions: current.docExtId ? currentText ? parseSkillFrontmatter(currentText, SKILL_MAIN_FILENAME).content : "" : current.workflow.run.kind === "prompt" ? current.workflow.run.promptTemplate : "",
1846
+ isLoading: !!current.docExtId && textLoading,
1856
1847
  actions: {
1857
- onRun: () => onRun(current2.slug),
1858
- onCopy: () => void makeCopy(current2),
1848
+ onRun: () => onRun(current.slug),
1849
+ onCopy: () => void makeCopy(current),
1859
1850
  onEdit: () => setMode("edit"),
1860
- onToggleShare: () => void toggleShare(current2),
1861
- onExport: () => void exportFile(current2),
1862
- onDelete: () => void remove(current2),
1851
+ onToggleShare: () => void toggleShare(current),
1852
+ onExport: () => void exportFile(current),
1853
+ onDelete: () => void remove(current),
1863
1854
  isBusy
1864
1855
  }
1865
1856
  }
1866
1857
  ),
1867
- mode === "detail" && !current2 && /* @__PURE__ */ jsx("div", { className: "flex flex-1 items-center justify-center p-8 text-center text-sm text-muted-foreground max-md:hidden", children: "Pick a skill to read it, run it or make a copy." })
1858
+ mode === "detail" && !current && /* @__PURE__ */ jsx("div", { className: "flex flex-1 items-center justify-center p-8 text-center text-sm text-muted-foreground max-md:hidden", children: "Pick a skill to read it, run it or make a copy." })
1868
1859
  ]
1869
1860
  }
1870
1861
  )
@@ -3343,7 +3334,7 @@ function ConnectedTagTable({
3343
3334
  };
3344
3335
  }, [schema.data, rows.data, filter, linksLimit, allTags]);
3345
3336
  const fail = (fallback) => (e) => notify17(refusalReason(e, fallback), "error");
3346
- const snapshot3 = (data) => {
3337
+ const snapshot2 = (data) => {
3347
3338
  const title = exportTitle ?? tagKindTitle(kind, { plural: true });
3348
3339
  const bytes = tagTableDocx(data, {
3349
3340
  title,
@@ -3376,7 +3367,7 @@ function ConnectedTagTable({
3376
3367
  }).catch(fail(`Could not add "${name}"`)),
3377
3368
  onExport: onExported && table ? async () => {
3378
3369
  try {
3379
- const { blob, name } = snapshot3(table);
3370
+ const { blob, name } = snapshot2(table);
3380
3371
  const uploaded = await arbi.documents.uploadFile(blob, name);
3381
3372
  const id = uploaded?.doc_ext_ids?.[0];
3382
3373
  if (id) onExported(id);
@@ -3385,7 +3376,7 @@ function ConnectedTagTable({
3385
3376
  }
3386
3377
  } : void 0,
3387
3378
  onDownload: downloadable && table ? () => {
3388
- const { blob, name } = snapshot3(table);
3379
+ const { blob, name } = snapshot2(table);
3389
3380
  downloadBlob(blob, name);
3390
3381
  } : void 0
3391
3382
  }
@@ -3713,7 +3704,7 @@ var FileTile = memo(function FileTile2({
3713
3704
  onDelete,
3714
3705
  actions = NO_ACTIONS
3715
3706
  }) {
3716
- const { attributes, listeners: listeners3, setNodeRef } = useDraggable({
3707
+ const { attributes, listeners: listeners2, setNodeRef } = useDraggable({
3717
3708
  id: `doc:${doc.external_id}`,
3718
3709
  data: { type: "doc", docId: doc.external_id }
3719
3710
  });
@@ -3816,7 +3807,7 @@ var FileTile = memo(function FileTile2({
3816
3807
  tooltip,
3817
3808
  menuItems,
3818
3809
  rootRef: setNodeRef,
3819
- rootProps: { ...listeners3, ...attributes },
3810
+ rootProps: { ...listeners2, ...attributes },
3820
3811
  onOpen: () => onOpen(doc),
3821
3812
  onSelect: (e) => onSelect(doc, e),
3822
3813
  onToggle: (e) => onToggle(doc, e),
@@ -4530,8 +4521,8 @@ function ConnectedTagForm({
4530
4521
  const parentOptions = useMemo(() => {
4531
4522
  if (!availableTags) return [];
4532
4523
  const eligible = getEligibleParentTags(availableTags, tag?.external_id);
4533
- const current2 = tag?.parent_ext_id ? availableTags.find((t) => t.external_id === tag.parent_ext_id) : void 0;
4534
- return current2 && !eligible.some((t) => t.external_id === current2.external_id) ? [current2, ...eligible] : eligible;
4524
+ const current = tag?.parent_ext_id ? availableTags.find((t) => t.external_id === tag.parent_ext_id) : void 0;
4525
+ return current && !eligible.some((t) => t.external_id === current.external_id) ? [current, ...eligible] : eligible;
4535
4526
  }, [availableTags, tag?.external_id, tag?.parent_ext_id]);
4536
4527
  const hasChildren = Boolean(
4537
4528
  availableTags && tag && !canTagHaveParent(availableTags, tag.external_id)
@@ -4858,11 +4849,11 @@ function TagFilterChips({
4858
4849
  combination,
4859
4850
  onChange
4860
4851
  }) {
4861
- const set2 = [...combination].filter(([, state]) => state !== null);
4862
- if (!set2.length) return null;
4852
+ const set = [...combination].filter(([, state]) => state !== null);
4853
+ if (!set.length) return null;
4863
4854
  const name = (id) => tags.find((t) => t.external_id === id)?.name ?? id;
4864
4855
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-1.5", "data-testid": "tags-filter-chips", children: [
4865
- set2.map(([id, state]) => /* @__PURE__ */ jsx(
4856
+ set.map(([id, state]) => /* @__PURE__ */ jsx(
4866
4857
  FilterChip,
4867
4858
  {
4868
4859
  label: name(id),
@@ -4896,10 +4887,10 @@ function TagPlacement({ tag, tags, onChange }) {
4896
4887
  const nests = !isFlatKind(tag.kind);
4897
4888
  const sameKind = tags.filter((t) => t.kind === tag.kind);
4898
4889
  const parents = getEligibleParentTags(sameKind, tag.external_id);
4899
- const current2 = tag.parent_ext_id ? tags.find((t) => t.external_id === tag.parent_ext_id) : void 0;
4900
- const options2 = current2 && !parents.includes(current2) ? [current2, ...parents] : parents;
4890
+ const current = tag.parent_ext_id ? tags.find((t) => t.external_id === tag.parent_ext_id) : void 0;
4891
+ const options2 = current && !parents.includes(current) ? [current, ...parents] : parents;
4901
4892
  const canNest = canTagHaveParent([...tags], tag.external_id);
4902
- const placement = current2 ? `Under ${current2.name}` : "Top level";
4893
+ const placement = current ? `Under ${current.name}` : "Top level";
4903
4894
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", "data-testid": "tags-placement", children: [
4904
4895
  /* @__PURE__ */ jsx(
4905
4896
  VisibilityToggle,
@@ -6727,14 +6718,14 @@ function useFactsPageView() {
6727
6718
  [view, rowHeight, labelWidth, zoom, filterText, searchFields, filters, gridState]
6728
6719
  );
6729
6720
  }
6730
- var useExportStore = create()((set2) => ({
6721
+ var useExportStore = create()((set) => ({
6731
6722
  columnsMode: "visible",
6732
- setColumnsMode: (columnsMode) => set2({ columnsMode }),
6723
+ setColumnsMode: (columnsMode) => set({ columnsMode }),
6733
6724
  activeTransfers: [],
6734
- trackTransfer: (transferId) => set2(
6725
+ trackTransfer: (transferId) => set(
6735
6726
  (state) => state.activeTransfers.includes(transferId) ? state : { activeTransfers: [...state.activeTransfers, transferId] }
6736
6727
  ),
6737
- untrackTransfer: (transferId) => set2((state) => ({ activeTransfers: state.activeTransfers.filter((id) => id !== transferId) }))
6728
+ untrackTransfer: (transferId) => set((state) => ({ activeTransfers: state.activeTransfers.filter((id) => id !== transferId) }))
6738
6729
  }));
6739
6730
  function plural(n, one, many = `${one}s`) {
6740
6731
  return `${n} ${n === 1 ? one : many}`;
@@ -7124,7 +7115,7 @@ function ConnectedExportPanel({
7124
7115
  })),
7125
7116
  selected: kinds,
7126
7117
  onToggle: (kind, checked) => setKinds(
7127
- (current2) => checked ? ALL_KINDS.filter((k) => k === kind || current2.includes(k)) : current2.filter((k) => k !== kind)
7118
+ (current) => checked ? ALL_KINDS.filter((k) => k === kind || current.includes(k)) : current.filter((k) => k !== kind)
7128
7119
  )
7129
7120
  }
7130
7121
  ),
@@ -8000,10 +7991,11 @@ function ConnectedSessionsRow({
8000
7991
  function ConnectedLogoutDialog({
8001
7992
  open,
8002
7993
  onClose,
8003
- canLogoutAll = true,
7994
+ canLogoutAll,
8004
7995
  confirmSignOut,
8005
7996
  renderSessionIcon = renderSessionStatusIcon
8006
7997
  }) {
7998
+ const user = useArbiSession().user;
8007
7999
  const sessions = useSessions({ enabled: open });
8008
8000
  const signOut = useSignOut();
8009
8001
  const isOnline = useIsOnline();
@@ -8019,7 +8011,7 @@ function ConnectedLogoutDialog({
8019
8011
  onClose,
8020
8012
  onLogoutThis: () => void run(false),
8021
8013
  onLogoutAll: () => void run(true),
8022
- canLogoutAll,
8014
+ canLogoutAll: canLogoutAll ?? !(user && isAgent(user)),
8023
8015
  isOnline,
8024
8016
  sessions: toLogoutSessionViews(sessions.data ?? []),
8025
8017
  renderSessionIcon
@@ -8700,7 +8692,7 @@ function ConnectedPremiumModels() {
8700
8692
  };
8701
8693
  return [reference, ...premiumModels];
8702
8694
  }, [available, premiumModels]);
8703
- const current2 = premiumModel ?? available?.premium_default ?? "";
8695
+ const current = premiumModel ?? available?.premium_default ?? "";
8704
8696
  const save = useCallback(
8705
8697
  (model) => update.mutate(
8706
8698
  { premium_model: model },
@@ -8710,15 +8702,15 @@ function ConnectedPremiumModels() {
8710
8702
  ),
8711
8703
  [update, notify17]
8712
8704
  );
8713
- const currentRef = useRef(current2);
8714
- currentRef.current = current2;
8705
+ const currentRef = useRef(current);
8706
+ currentRef.current = current;
8715
8707
  const [selected, setSelected] = useState([]);
8716
8708
  useEffect(() => {
8717
- const match = premiumModels.filter((m) => m.model_name === current2);
8709
+ const match = premiumModels.filter((m) => m.model_name === current);
8718
8710
  setSelected(
8719
8711
  (prev) => prev.length === match.length && prev[0]?.model_name === match[0]?.model_name ? prev : match
8720
8712
  );
8721
- }, [current2, premiumModels]);
8713
+ }, [current, premiumModels]);
8722
8714
  const onSelectionChange = useCallback(
8723
8715
  (items) => {
8724
8716
  const picked = items.filter((m) => !isStandard(m));
@@ -10267,7 +10259,7 @@ function useConnectedWorkspaceSettings(workspaceId, { onLeft } = {}) {
10267
10259
  };
10268
10260
  const share = async (emails, memberRole = "collaborator") => {
10269
10261
  if (!workspace) return "error";
10270
- const current2 = new Set(members.map((m) => m.user.email.toLowerCase()));
10262
+ const current = new Set(members.map((m) => m.user.email.toLowerCase()));
10271
10263
  try {
10272
10264
  const added = new Set(
10273
10265
  (await add.mutateAsync({ emails, role: memberRole }) ?? []).map(
@@ -10276,8 +10268,8 @@ function useConnectedWorkspaceSettings(workspaceId, { onLeft } = {}) {
10276
10268
  );
10277
10269
  const failed = emails.filter((email) => !added.has(email.toLowerCase()));
10278
10270
  if (failed.length === 0) return "added";
10279
- const already = failed.filter((email) => current2.has(email.toLowerCase()));
10280
- const unknown = failed.filter((email) => !current2.has(email.toLowerCase()));
10271
+ const already = failed.filter((email) => current.has(email.toLowerCase()));
10272
+ const unknown = failed.filter((email) => !current.has(email.toLowerCase()));
10281
10273
  if (added.size > 0) {
10282
10274
  notify17(`Added ${added.size} ${added.size === 1 ? "member" : "members"}`, "success");
10283
10275
  }
@@ -11419,18 +11411,18 @@ function ConnectedSharePointAdminConsentPage({
11419
11411
  ] }) });
11420
11412
  }
11421
11413
  var focus = null;
11422
- var listeners2 = /* @__PURE__ */ new Set();
11414
+ var listeners = /* @__PURE__ */ new Set();
11423
11415
  function requestProjectBillingFocus(next) {
11424
11416
  focus = next;
11425
- listeners2.forEach((listener) => listener());
11417
+ listeners.forEach((listener) => listener());
11426
11418
  }
11427
- function subscribe2(listener) {
11428
- listeners2.add(listener);
11429
- return () => listeners2.delete(listener);
11419
+ function subscribe(listener) {
11420
+ listeners.add(listener);
11421
+ return () => listeners.delete(listener);
11430
11422
  }
11431
- var snapshot2 = () => focus;
11423
+ var snapshot = () => focus;
11432
11424
  function useProjectBillingFocus() {
11433
- return useSyncExternalStore(subscribe2, snapshot2, snapshot2);
11425
+ return useSyncExternalStore(subscribe, snapshot, snapshot);
11434
11426
  }
11435
11427
  function BillingProjectEntity({
11436
11428
  subscription = "none",
@@ -11633,21 +11625,21 @@ function proCard(selected, isAnnual, prices) {
11633
11625
  const currency = prices.monthly?.currency ?? prices.annual?.currency ?? "gbp";
11634
11626
  const monthly = packPrice(prices.monthly, packs);
11635
11627
  const annual = packPrice(prices.annual, packs);
11636
- const current2 = isAnnual ? annual : monthly;
11637
- const effectiveMonthly = current2 ? isAnnual ? current2.amount_ex_vat / 12 : current2.amount_ex_vat : null;
11628
+ const current = isAnnual ? annual : monthly;
11629
+ const effectiveMonthly = current ? isAnnual ? current.amount_ex_vat / 12 : current.amount_ex_vat : null;
11638
11630
  return {
11639
11631
  id: packs,
11640
11632
  name: planNameForPacks(packs),
11641
11633
  isSelected: selected === "pro",
11642
- price: current2 && effectiveMonthly != null ? {
11634
+ price: current && effectiveMonthly != null ? {
11643
11635
  annual: isAnnual,
11644
- yearlyStrike: isAnnual && monthly && monthly.amount_ex_vat * 12 > current2.amount_ex_vat ? formatMoney(monthly.amount_ex_vat * 12, currency) : void 0,
11645
- yearlyTotal: isAnnual ? formatMoney(current2.amount_ex_vat, currency) : void 0,
11636
+ yearlyStrike: isAnnual && monthly && monthly.amount_ex_vat * 12 > current.amount_ex_vat ? formatMoney(monthly.amount_ex_vat * 12, currency) : void 0,
11637
+ yearlyTotal: isAnnual ? formatMoney(current.amount_ex_vat, currency) : void 0,
11646
11638
  intervalLabel: isAnnual ? "/yr + VAT" : "/mo",
11647
11639
  monthly: formatMoney(Math.round(effectiveMonthly), currency),
11648
11640
  taxLabel: "+ VAT",
11649
11641
  // The inclusive figure for a UK customer, right under the headline.
11650
- note: `${formatMoney(current2.amount, currency)}${isAnnual ? "/yr" : "/mo"} incl. UK VAT`
11642
+ note: `${formatMoney(current.amount, currency)}${isAnnual ? "/yr" : "/mo"} incl. UK VAT`
11651
11643
  } : void 0,
11652
11644
  features: [
11653
11645
  `${formatGbp(PRO_AI_GBP)} of AI usage / month`,
@@ -11736,7 +11728,7 @@ function BlockStepper({
11736
11728
  onChange,
11737
11729
  testId
11738
11730
  }) {
11739
- const set2 = (n) => onChange(Math.max(0, Math.min(MAX_CHECKOUT_BLOCKS, n)));
11731
+ const set = (n) => onChange(Math.max(0, Math.min(MAX_CHECKOUT_BLOCKS, n)));
11740
11732
  return /* @__PURE__ */ jsxs(
11741
11733
  "div",
11742
11734
  {
@@ -11756,7 +11748,7 @@ function BlockStepper({
11756
11748
  variant: "outline",
11757
11749
  className: "size-8",
11758
11750
  "aria-label": `Fewer: ${label}`,
11759
- onClick: () => set2(value - 1),
11751
+ onClick: () => set(value - 1),
11760
11752
  disabled: value <= 0,
11761
11753
  "data-testid": `${testId}-decrement`,
11762
11754
  children: /* @__PURE__ */ jsx(Minus, { className: "size-4" })
@@ -11779,7 +11771,7 @@ function BlockStepper({
11779
11771
  variant: "outline",
11780
11772
  className: "size-8",
11781
11773
  "aria-label": `More: ${label}`,
11782
- onClick: () => set2(value + 1),
11774
+ onClick: () => set(value + 1),
11783
11775
  disabled: value >= MAX_CHECKOUT_BLOCKS,
11784
11776
  "data-testid": `${testId}-increment`,
11785
11777
  children: /* @__PURE__ */ jsx(Plus, { className: "size-4" })
@@ -13017,7 +13009,7 @@ function ResourceMeter({
13017
13009
  const periodEnd = formatPeriodEnd(addons.period_end ?? project.current_period_end);
13018
13010
  const from = periodEnd ?? "your next renewal";
13019
13011
  const fromShort = formatShortDate(addons.period_end ?? project.current_period_end) ?? "renewal";
13020
- const { min, current: current2, next } = reduceBounds(kind, addons);
13012
+ const { min, current, next } = reduceBounds(kind, addons);
13021
13013
  const fmt = (n) => isAi ? formatGbp(n) : gb2(n);
13022
13014
  const used = isAi ? addons.ai_used_gbp : addons.storage_used_gb;
13023
13015
  const allowance = isAi ? addons.ai_allowance_gbp : addons.storage_allowance_gb;
@@ -13033,7 +13025,7 @@ function ResourceMeter({
13033
13025
  const undo = () => update.mutate(
13034
13026
  {
13035
13027
  projectExtId: project.external_id,
13036
- body: nextPeriodBody(kind, current2)
13028
+ body: nextPeriodBody(kind, current)
13037
13029
  },
13038
13030
  {
13039
13031
  onSuccess: () => notify.success("Kept"),
@@ -13060,7 +13052,7 @@ function ResourceMeter({
13060
13052
  PendingChange,
13061
13053
  {
13062
13054
  testId: `usage-meter-${slug}-next`,
13063
- onUndo: next < current2 ? undo : void 0,
13055
+ onUndo: next < current ? undo : void 0,
13064
13056
  isBusy: update.isPending,
13065
13057
  undoTestId: `undo-reduce-${slug}-button`,
13066
13058
  children: [
@@ -14713,7 +14705,7 @@ function useConnectedWorkspaceList({
14713
14705
  };
14714
14706
  }
14715
14707
  var WorkspaceTableView = lazy(
14716
- () => import('../WorkspaceTableView-62PJLX7V.js').then((m) => ({ default: m.WorkspaceTableView }))
14708
+ () => import('../WorkspaceTableView-NWRVACJL.js').then((m) => ({ default: m.WorkspaceTableView }))
14717
14709
  );
14718
14710
  var WORKSPACES_TAB_ID = "workspaces";
14719
14711
  var defaultRenderMember2 = (user, size) => {
@@ -15285,7 +15277,7 @@ function ProjectDetailsForm({
15285
15277
  budget: project.budget ? String(project.budget.amount / 100) : "",
15286
15278
  ...Object.fromEntries(hostFields.map((f) => [`host:${f.key}`, hostText(project, f.key)]))
15287
15279
  }));
15288
- const set2 = (key) => (e) => setForm((f) => ({ ...f, [key]: e.target.value }));
15280
+ const set = (key) => (e) => setForm((f) => ({ ...f, [key]: e.target.value }));
15289
15281
  const save = async () => {
15290
15282
  const budget = Number(form.budget);
15291
15283
  const shown = (f) => fields.includes(f);
@@ -15315,7 +15307,7 @@ function ProjectDetailsForm({
15315
15307
  {
15316
15308
  id: `${testId}-${key}`,
15317
15309
  value: form[key],
15318
- onChange: set2(key),
15310
+ onChange: set(key),
15319
15311
  placeholder,
15320
15312
  "data-testid": `${testId}-field-${key.replace(/^host:/, "")}`
15321
15313
  }
@@ -15344,7 +15336,7 @@ function ProjectDetailsForm({
15344
15336
  id: `${testId}-stage`,
15345
15337
  className: select,
15346
15338
  value: form.stage,
15347
- onChange: set2("stage"),
15339
+ onChange: set("stage"),
15348
15340
  "data-testid": `${testId}-field-stage`,
15349
15341
  children: [
15350
15342
  /* @__PURE__ */ jsx("option", { value: "", children: labels.notSet }),
@@ -15362,7 +15354,7 @@ function ProjectDetailsForm({
15362
15354
  id: `${testId}-leadUser`,
15363
15355
  className: select,
15364
15356
  value: form.leadUser,
15365
- onChange: set2("leadUser"),
15357
+ onChange: set("leadUser"),
15366
15358
  "data-testid": `${testId}-field-leadUser`,
15367
15359
  children: [
15368
15360
  /* @__PURE__ */ jsx("option", { value: "", children: labels.notSet }),
@@ -15387,20 +15379,20 @@ function ProjectDetailsForm({
15387
15379
  }
15388
15380
  var useFilesStore = create()(
15389
15381
  persist(
15390
- (set2) => ({
15382
+ (set) => ({
15391
15383
  pendingFolders: {},
15392
- addPendingFolder: (workspaceId, path) => set2((state) => {
15393
- const current2 = state.pendingFolders[workspaceId] ?? [];
15394
- if (current2.includes(path)) return state;
15395
- return { pendingFolders: { ...state.pendingFolders, [workspaceId]: [...current2, path] } };
15384
+ addPendingFolder: (workspaceId, path) => set((state) => {
15385
+ const current = state.pendingFolders[workspaceId] ?? [];
15386
+ if (current.includes(path)) return state;
15387
+ return { pendingFolders: { ...state.pendingFolders, [workspaceId]: [...current, path] } };
15396
15388
  }),
15397
- removePendingFolder: (workspaceId, path) => set2((state) => {
15398
- const current2 = state.pendingFolders[workspaceId] ?? [];
15399
- if (!current2.includes(path)) return state;
15389
+ removePendingFolder: (workspaceId, path) => set((state) => {
15390
+ const current = state.pendingFolders[workspaceId] ?? [];
15391
+ if (!current.includes(path)) return state;
15400
15392
  return {
15401
15393
  pendingFolders: {
15402
15394
  ...state.pendingFolders,
15403
- [workspaceId]: current2.filter((p) => p !== path)
15395
+ [workspaceId]: current.filter((p) => p !== path)
15404
15396
  }
15405
15397
  };
15406
15398
  })
@@ -15422,16 +15414,16 @@ var FILES_PREFS_KEY = "files";
15422
15414
  var DEFAULT_VIEW_MODE = "explorer";
15423
15415
  var useFilesPrefs = create()(
15424
15416
  persist(
15425
- (set2) => ({
15417
+ (set) => ({
15426
15418
  documentFilters: {},
15427
- setDocumentFilters: (documentFilters) => set2({ documentFilters }),
15419
+ setDocumentFilters: (documentFilters) => set({ documentFilters }),
15428
15420
  viewModes: {},
15429
- setViewMode: (viewMode, prefsKey = FILES_PREFS_KEY) => set2(
15421
+ setViewMode: (viewMode, prefsKey = FILES_PREFS_KEY) => set(
15430
15422
  (state) => state.viewModes[prefsKey] === viewMode ? state : { viewModes: { ...state.viewModes, [prefsKey]: viewMode } }
15431
15423
  ),
15432
15424
  // New users start at the compact minimum (more rows at once).
15433
15425
  rowHeight: DOCUMENTS_ROW_HEIGHT_INITIAL,
15434
- setRowHeight: (rowHeight) => set2({ rowHeight })
15426
+ setRowHeight: (rowHeight) => set({ rowHeight })
15435
15427
  }),
15436
15428
  {
15437
15429
  name: "arbi_files_prefs",
@@ -15458,12 +15450,12 @@ var useFilesPrefs = create()(
15458
15450
  function filesViewMode(state, prefsKey = FILES_PREFS_KEY, defaultViewMode = DEFAULT_VIEW_MODE) {
15459
15451
  return state.viewModes[prefsKey] ?? defaultViewMode;
15460
15452
  }
15461
- var useAiReviewStore = create()((set2) => ({
15453
+ var useAiReviewStore = create()((set) => ({
15462
15454
  open: false,
15463
15455
  run: null,
15464
- setOpen: (open) => set2({ open }),
15465
- setRun: (run) => set2({ run }),
15466
- markFinished: (docIds) => set2((state) => {
15456
+ setOpen: (open) => set({ open }),
15457
+ setRun: (run) => set({ run }),
15458
+ markFinished: (docIds) => set((state) => {
15467
15459
  const run = state.run;
15468
15460
  if (!run) return state;
15469
15461
  const finished = new Set(run.finishedDocIds ?? []);
@@ -15474,23 +15466,23 @@ var useAiReviewStore = create()((set2) => ({
15474
15466
  }));
15475
15467
  var useFilesGridStates = create()(
15476
15468
  persist(
15477
- (set2) => ({
15469
+ (set) => ({
15478
15470
  gridStates: {},
15479
- setGridState: (gridId, state) => set2((current2) => ({ gridStates: { ...current2.gridStates, [gridId]: state } }))
15471
+ setGridState: (gridId, state) => set((current) => ({ gridStates: { ...current.gridStates, [gridId]: state } }))
15480
15472
  }),
15481
15473
  { name: "arbi_files_grids", storage: createJSONStorage(() => localStorage) }
15482
15474
  )
15483
15475
  );
15484
- var useFilesDialogs = create()((set2) => ({
15476
+ var useFilesDialogs = create()((set) => ({
15485
15477
  move: null,
15486
- openMove: (folder = null) => set2({ move: { folder } }),
15487
- closeMove: () => set2({ move: null }),
15478
+ openMove: (folder = null) => set({ move: { folder } }),
15479
+ closeMove: () => set({ move: null }),
15488
15480
  bulkTagsOpen: false,
15489
- setBulkTagsOpen: (bulkTagsOpen) => set2({ bulkTagsOpen }),
15481
+ setBulkTagsOpen: (bulkTagsOpen) => set({ bulkTagsOpen }),
15490
15482
  deleteRequest: null,
15491
- requestDelete: (deleteRequest) => set2({ deleteRequest }),
15483
+ requestDelete: (deleteRequest) => set({ deleteRequest }),
15492
15484
  exportOpen: false,
15493
- setExportOpen: (exportOpen) => set2({ exportOpen })
15485
+ setExportOpen: (exportOpen) => set({ exportOpen })
15494
15486
  }));
15495
15487
  var GRID_GAP = 12;
15496
15488
  var SCROLL_PADDING_X = 32;
@@ -16645,7 +16637,7 @@ function RowsEditor({
16645
16637
  inputType = "text",
16646
16638
  testId
16647
16639
  }) {
16648
- const set2 = (i, patch) => onChange(rows.map((r, j) => j === i ? { ...r, ...patch } : r));
16640
+ const set = (i, patch) => onChange(rows.map((r, j) => j === i ? { ...r, ...patch } : r));
16649
16641
  return /* @__PURE__ */ jsxs("fieldset", { className: "grid gap-1", children: [
16650
16642
  /* @__PURE__ */ jsx("legend", { className: "mb-1 text-sm font-medium text-foreground", children: label }),
16651
16643
  rows.map((r, i) => /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
@@ -16657,7 +16649,7 @@ function RowsEditor({
16657
16649
  placeholder,
16658
16650
  "aria-label": `${label} ${i + 1}`,
16659
16651
  value: r.value,
16660
- onChange: (e) => set2(i, { value: e.target.value }),
16652
+ onChange: (e) => set(i, { value: e.target.value }),
16661
16653
  "data-testid": `${testId}-${i}`
16662
16654
  }
16663
16655
  ),
@@ -16668,7 +16660,7 @@ function RowsEditor({
16668
16660
  placeholder: "Label",
16669
16661
  "aria-label": `${label} ${i + 1} label`,
16670
16662
  value: r.type,
16671
- onChange: (e) => set2(i, { type: e.target.value })
16663
+ onChange: (e) => set(i, { type: e.target.value })
16672
16664
  }
16673
16665
  ),
16674
16666
  /* @__PURE__ */ jsx(
@@ -16718,7 +16710,7 @@ function ConnectedContactCardForm({
16718
16710
  const saving = create3.isPending || update.isPending || link.isPending;
16719
16711
  const linked = !!contact?.email;
16720
16712
  const locked = !!contact && !contact.card;
16721
- const set2 = (key, value) => setForm((f) => ({ ...f, [key]: value }));
16713
+ const set = (key, value) => setForm((f) => ({ ...f, [key]: value }));
16722
16714
  const submit = () => {
16723
16715
  const found = validateContactForm(form);
16724
16716
  const email = inviteEmail(form);
@@ -16764,7 +16756,7 @@ function ConnectedContactCardForm({
16764
16756
  ] });
16765
16757
  const field = (key, label) => /* @__PURE__ */ jsxs("div", { className: "grid gap-1", children: [
16766
16758
  /* @__PURE__ */ jsx(Label, { htmlFor: `contact-${key}`, children: label }),
16767
- /* @__PURE__ */ jsx(Input, { id: `contact-${key}`, value: form[key], onChange: (e) => set2(key, e.target.value) })
16759
+ /* @__PURE__ */ jsx(Input, { id: `contact-${key}`, value: form[key], onChange: (e) => set(key, e.target.value) })
16768
16760
  ] });
16769
16761
  const dateField = (key, label) => /* @__PURE__ */ jsxs("div", { className: "grid gap-1", children: [
16770
16762
  /* @__PURE__ */ jsx(Label, { htmlFor: `contact-${key}`, children: label }),
@@ -16774,7 +16766,7 @@ function ConnectedContactCardForm({
16774
16766
  id: `contact-${key}`,
16775
16767
  placeholder: "YYYY-MM-DD or --MM-DD",
16776
16768
  value: form[key],
16777
- onChange: (e) => set2(key, e.target.value),
16769
+ onChange: (e) => set(key, e.target.value),
16778
16770
  "aria-invalid": !!errors[key],
16779
16771
  "data-testid": `contact-${key}`
16780
16772
  }
@@ -16804,7 +16796,7 @@ function ConnectedContactCardForm({
16804
16796
  id: "contact-name",
16805
16797
  required: true,
16806
16798
  value: form.name,
16807
- onChange: (e) => set2("name", e.target.value),
16799
+ onChange: (e) => set("name", e.target.value),
16808
16800
  "aria-invalid": !!errors.name,
16809
16801
  "data-testid": "contact-name"
16810
16802
  }
@@ -16816,7 +16808,7 @@ function ConnectedContactCardForm({
16816
16808
  {
16817
16809
  label: "E-mail",
16818
16810
  rows: form.emails,
16819
- onChange: (rows) => set2("emails", rows),
16811
+ onChange: (rows) => set("emails", rows),
16820
16812
  placeholder: "name@example.com",
16821
16813
  inputType: "email",
16822
16814
  testId: "contact-email"
@@ -16843,7 +16835,7 @@ function ConnectedContactCardForm({
16843
16835
  {
16844
16836
  label: "Phone",
16845
16837
  rows: form.phones,
16846
- onChange: (rows) => set2("phones", rows),
16838
+ onChange: (rows) => set("phones", rows),
16847
16839
  placeholder: "+1 555 0100",
16848
16840
  inputType: "tel",
16849
16841
  testId: "contact-phone"
@@ -16864,7 +16856,7 @@ function ConnectedContactCardForm({
16864
16856
  {
16865
16857
  label: "Address",
16866
16858
  rows: form.addresses,
16867
- onChange: (rows) => set2("addresses", rows),
16859
+ onChange: (rows) => set("addresses", rows),
16868
16860
  placeholder: "Street, city, country",
16869
16861
  testId: "contact-address"
16870
16862
  }
@@ -16877,7 +16869,7 @@ function ConnectedContactCardForm({
16877
16869
  id: "contact-note",
16878
16870
  rows: 3,
16879
16871
  value: form.note,
16880
- onChange: (e) => set2("note", e.target.value)
16872
+ onChange: (e) => set("note", e.target.value)
16881
16873
  }
16882
16874
  )
16883
16875
  ] }),
@@ -17940,7 +17932,7 @@ function MailRecipientInput({
17940
17932
  return found.filter((p) => !chosen.has(p.email.toLowerCase())).slice(0, 8);
17941
17933
  }, [found, head]);
17942
17934
  const open = focused && !dismissed && token.length > 0 && options2.length > 0;
17943
- const current2 = Math.min(active, options2.length - 1);
17935
+ const current = Math.min(active, options2.length - 1);
17944
17936
  const pick = (email) => {
17945
17937
  onValueChange(`${head ? `${head.trimEnd()} ` : ""}${email}; `);
17946
17938
  setActive(0);
@@ -17950,10 +17942,10 @@ function MailRecipientInput({
17950
17942
  if (event.key === "ArrowDown" || event.key === "ArrowUp") {
17951
17943
  event.preventDefault();
17952
17944
  const step = event.key === "ArrowDown" ? 1 : -1;
17953
- setActive((current2 + step + options2.length) % options2.length);
17945
+ setActive((current + step + options2.length) % options2.length);
17954
17946
  } else if (event.key === "Enter" && !event.ctrlKey && !event.metaKey) {
17955
17947
  event.preventDefault();
17956
- pick(options2[current2].email);
17948
+ pick(options2[current].email);
17957
17949
  } else if (event.key === "Escape") {
17958
17950
  event.preventDefault();
17959
17951
  setDismissed(true);
@@ -17970,7 +17962,7 @@ function MailRecipientInput({
17970
17962
  "aria-autocomplete": "list",
17971
17963
  "aria-expanded": open,
17972
17964
  "aria-controls": open ? listId : void 0,
17973
- "aria-activedescendant": open ? `${listId}-${current2}` : void 0,
17965
+ "aria-activedescendant": open ? `${listId}-${current}` : void 0,
17974
17966
  autoComplete: "off",
17975
17967
  onChange: (e) => {
17976
17968
  onValueChange(e.target.value);
@@ -17993,8 +17985,8 @@ function MailRecipientInput({
17993
17985
  {
17994
17986
  id: `${listId}-${i}`,
17995
17987
  role: "option",
17996
- "aria-selected": i === current2,
17997
- className: `flex cursor-pointer items-baseline gap-2 px-3 py-1.5 ${i === current2 ? "bg-accent text-accent-foreground" : ""}`,
17988
+ "aria-selected": i === current,
17989
+ className: `flex cursor-pointer items-baseline gap-2 px-3 py-1.5 ${i === current ? "bg-accent text-accent-foreground" : ""}`,
17998
17990
  onMouseDown: (e) => e.preventDefault(),
17999
17991
  onMouseEnter: () => setActive(i),
18000
17992
  onClick: () => pick(p.email),
@@ -19675,7 +19667,7 @@ function SubscribeDialog({
19675
19667
  onClose
19676
19668
  }) {
19677
19669
  const { notify: notify17 } = useBlocksEnvironment();
19678
- const subscribe3 = useSubscribeCalendar();
19670
+ const subscribe2 = useSubscribeCalendar();
19679
19671
  const [url, setUrl] = useState("");
19680
19672
  const [name, setName] = useState("");
19681
19673
  const [refresh, setRefresh] = useState(720);
@@ -19683,7 +19675,7 @@ function SubscribeDialog({
19683
19675
  if (open) {
19684
19676
  setUrl("");
19685
19677
  setName("");
19686
- subscribe3.reset();
19678
+ subscribe2.reset();
19687
19679
  }
19688
19680
  }, [open]);
19689
19681
  const normalized = normalizeFeedUrl(url);
@@ -19699,7 +19691,7 @@ function SubscribeDialog({
19699
19691
  onSubmit: (e) => {
19700
19692
  e.preventDefault();
19701
19693
  if (!normalized) return;
19702
- subscribe3.mutate(
19694
+ subscribe2.mutate(
19703
19695
  {
19704
19696
  url: normalized,
19705
19697
  name: name.trim() || null,
@@ -19749,16 +19741,16 @@ function SubscribeDialog({
19749
19741
  }
19750
19742
  )
19751
19743
  ] }),
19752
- subscribe3.error && /* @__PURE__ */ jsx("p", { className: "text-sm text-destructive", role: "alert", children: subscribe3.error.message }),
19744
+ subscribe2.error && /* @__PURE__ */ jsx("p", { className: "text-sm text-destructive", role: "alert", children: subscribe2.error.message }),
19753
19745
  /* @__PURE__ */ jsxs(DialogFooter, { children: [
19754
19746
  /* @__PURE__ */ jsx(Button, { type: "button", variant: "ghost", onClick: onClose, children: "Cancel" }),
19755
19747
  /* @__PURE__ */ jsx(
19756
19748
  Button,
19757
19749
  {
19758
19750
  type: "submit",
19759
- disabled: !normalized || subscribe3.isPending,
19751
+ disabled: !normalized || subscribe2.isPending,
19760
19752
  "data-testid": "calendar-subscribe-save",
19761
- children: subscribe3.isPending ? "Subscribing\u2026" : "Subscribe"
19753
+ children: subscribe2.isPending ? "Subscribing\u2026" : "Subscribe"
19762
19754
  }
19763
19755
  )
19764
19756
  ] })
@@ -20232,7 +20224,7 @@ function BookingPageForm({ page, defaultTimeZone, onDone }) {
20232
20224
  const [errors, setErrors] = useState({});
20233
20225
  const [serverError, setServerError] = useState(null);
20234
20226
  const save = useSaveBookingPage();
20235
- const set2 = (key, value) => setForm((f) => ({ ...f, [key]: value }));
20227
+ const set = (key, value) => setForm((f) => ({ ...f, [key]: value }));
20236
20228
  const num = (key, label, hint) => /* @__PURE__ */ jsxs("div", { className: "grid gap-1", children: [
20237
20229
  /* @__PURE__ */ jsx(Label, { htmlFor: `booking-${key}`, children: label }),
20238
20230
  /* @__PURE__ */ jsx(
@@ -20244,7 +20236,7 @@ function BookingPageForm({ page, defaultTimeZone, onDone }) {
20244
20236
  min: 0,
20245
20237
  placeholder: hint,
20246
20238
  value: form[key],
20247
- onChange: (e) => set2(key, e.target.value),
20239
+ onChange: (e) => set(key, e.target.value),
20248
20240
  "aria-invalid": !!errors[key],
20249
20241
  "data-testid": `booking-${key}`
20250
20242
  }
@@ -20305,7 +20297,7 @@ function BookingPageForm({ page, defaultTimeZone, onDone }) {
20305
20297
  disabled: !!page,
20306
20298
  onChange: (e) => {
20307
20299
  setSlugTouched(true);
20308
- set2("slug", e.target.value.toLowerCase());
20300
+ set("slug", e.target.value.toLowerCase());
20309
20301
  },
20310
20302
  "aria-invalid": !!errors.slug,
20311
20303
  "data-testid": "booking-slug"
@@ -20323,7 +20315,7 @@ function BookingPageForm({ page, defaultTimeZone, onDone }) {
20323
20315
  id: "booking-description",
20324
20316
  rows: 2,
20325
20317
  value: form.description,
20326
- onChange: (e) => set2("description", e.target.value)
20318
+ onChange: (e) => set("description", e.target.value)
20327
20319
  }
20328
20320
  )
20329
20321
  ] }),
@@ -20336,7 +20328,7 @@ function BookingPageForm({ page, defaultTimeZone, onDone }) {
20336
20328
  id: "booking-durations",
20337
20329
  placeholder: "15, 30, 60",
20338
20330
  value: form.durations,
20339
- onChange: (e) => set2("durations", e.target.value),
20331
+ onChange: (e) => set("durations", e.target.value),
20340
20332
  "aria-invalid": !!errors.durations,
20341
20333
  "data-testid": "booking-durations"
20342
20334
  }
@@ -20351,7 +20343,7 @@ function BookingPageForm({ page, defaultTimeZone, onDone }) {
20351
20343
  id: "booking-zone",
20352
20344
  className: selectClass3,
20353
20345
  value: form.timeZone,
20354
- onChange: (e) => set2("timeZone", e.target.value),
20346
+ onChange: (e) => set("timeZone", e.target.value),
20355
20347
  children: zoneOptions(form.timeZone).map((z) => /* @__PURE__ */ jsx("option", { value: z, children: z.replace(/_/g, " ") }, z))
20356
20348
  }
20357
20349
  )
@@ -20359,7 +20351,7 @@ function BookingPageForm({ page, defaultTimeZone, onDone }) {
20359
20351
  ] }),
20360
20352
  /* @__PURE__ */ jsxs("fieldset", { className: "grid gap-2", children: [
20361
20353
  /* @__PURE__ */ jsx("legend", { className: "mb-1 text-sm font-medium text-foreground", children: "Weekly hours" }),
20362
- /* @__PURE__ */ jsx(WeeklyHoursEditor, { value: form.weekly, onChange: (weekly) => set2("weekly", weekly) }),
20354
+ /* @__PURE__ */ jsx(WeeklyHoursEditor, { value: form.weekly, onChange: (weekly) => set("weekly", weekly) }),
20363
20355
  errors.weekly && /* @__PURE__ */ jsx("span", { className: "text-xs text-destructive", children: errors.weekly }),
20364
20356
  /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "Only times free in your calendars within these hours are offered." })
20365
20357
  ] }),
@@ -20377,7 +20369,7 @@ function BookingPageForm({ page, defaultTimeZone, onDone }) {
20377
20369
  id: "booking-location",
20378
20370
  placeholder: "Office, phone, or a meeting link",
20379
20371
  value: form.location,
20380
- onChange: (e) => set2("location", e.target.value)
20372
+ onChange: (e) => set("location", e.target.value)
20381
20373
  }
20382
20374
  )
20383
20375
  ] }),
@@ -20386,7 +20378,7 @@ function BookingPageForm({ page, defaultTimeZone, onDone }) {
20386
20378
  Switch,
20387
20379
  {
20388
20380
  checked: form.active,
20389
- onCheckedChange: (active) => set2("active", active),
20381
+ onCheckedChange: (active) => set("active", active),
20390
20382
  "aria-label": "Accepting bookings",
20391
20383
  "data-testid": "booking-active"
20392
20384
  }
@@ -23309,14 +23301,14 @@ function ConnectedUpload({
23309
23301
  [tags]
23310
23302
  );
23311
23303
  const addFiles = useCallback(
23312
- (chosen) => setFiles((current2) => {
23313
- if (current2.length === 0) return chosen;
23314
- const names = new Set(current2.map((file) => file.name));
23304
+ (chosen) => setFiles((current) => {
23305
+ if (current.length === 0) return chosen;
23306
+ const names = new Set(current.map((file) => file.name));
23315
23307
  const fresh = chosen.filter((file) => !names.has(file.name));
23316
23308
  const duplicates = chosen.length - fresh.length;
23317
23309
  if (duplicates > 0)
23318
23310
  notify17(`Skipped ${duplicates} duplicate file${duplicates > 1 ? "s" : ""}`, "info");
23319
- return [...current2, ...fresh];
23311
+ return [...current, ...fresh];
23320
23312
  }),
23321
23313
  [notify17]
23322
23314
  );
@@ -23437,7 +23429,7 @@ ${summary}`,
23437
23429
  ConnectedUploadDropzone,
23438
23430
  {
23439
23431
  onFilesSelected: addFiles,
23440
- onFilesRejected: (more) => setRefused((current2) => [...current2, ...more]),
23432
+ onFilesRejected: (more) => setRefused((current) => [...current, ...more]),
23441
23433
  onUrlsSubmit: handleUrls,
23442
23434
  title: "Drag & drop files or folders",
23443
23435
  subtitle: "",
@@ -23452,7 +23444,7 @@ ${summary}`,
23452
23444
  {
23453
23445
  renderFileIcon,
23454
23446
  files,
23455
- onRemoveFile: (index) => setFiles((current2) => current2.filter((_, i) => i !== index)),
23447
+ onRemoveFile: (index) => setFiles((current) => current.filter((_, i) => i !== index)),
23456
23448
  onClearAll: () => setFiles([]),
23457
23449
  formatFileSize: formatFileSize3
23458
23450
  }
@@ -25383,12 +25375,12 @@ function useDocumentFilters({
25383
25375
  if (folderTree.hasUnfiled) counts["folder:none"] = 0;
25384
25376
  for (const node of folderTree.nodes) counts[`folder:${node.path}`] = 0;
25385
25377
  const add = (key, docId) => {
25386
- let set2 = index.get(key);
25387
- if (!set2) {
25388
- set2 = /* @__PURE__ */ new Set();
25389
- index.set(key, set2);
25378
+ let set = index.get(key);
25379
+ if (!set) {
25380
+ set = /* @__PURE__ */ new Set();
25381
+ index.set(key, set);
25390
25382
  }
25391
- set2.add(docId);
25383
+ set.add(docId);
25392
25384
  };
25393
25385
  const includeDuplicatesAttr = duplicatesFilterState !== "exclude";
25394
25386
  for (const doc of documents) {
@@ -26846,8 +26838,8 @@ function ConnectedBulkTagEditor({
26846
26838
  }
26847
26839
  await executeGeneration();
26848
26840
  };
26849
- const toggle = (set2, item) => {
26850
- const next = new Set(set2);
26841
+ const toggle = (set, item) => {
26842
+ const next = new Set(set);
26851
26843
  if (next.has(item)) next.delete(item);
26852
26844
  else next.add(item);
26853
26845
  return next;
@@ -26859,9 +26851,9 @@ function ConnectedBulkTagEditor({
26859
26851
  return next;
26860
26852
  });
26861
26853
  const handleCheckboxToggle = (tagId) => {
26862
- const current2 = tagChanges[tagId];
26863
- if (current2?.action === "add") return setChange(tagId, { action: "remove" });
26864
- if (current2?.action === "remove") return setChange(tagId, null);
26854
+ const current = tagChanges[tagId];
26855
+ if (current?.action === "add") return setChange(tagId, { action: "remove" });
26856
+ if (current?.action === "remove") return setChange(tagId, null);
26865
26857
  const allHave = !isMixed(tagId) && countByTag[tagId] === total;
26866
26858
  setChange(tagId, { action: allHave ? "remove" : "add" });
26867
26859
  };
@@ -29099,7 +29091,7 @@ function MeetingAvatar() {
29099
29091
  );
29100
29092
  }
29101
29093
  var isGroupChat = (chat) => !!chat && chat.kind !== "direct";
29102
- var isAgent6 = (user) => chats.isAgentExtId(user.external_id);
29094
+ var isAgent7 = (user) => chats.isAgentExtId(user.external_id);
29103
29095
  function ConnectedMessenger({
29104
29096
  activeId,
29105
29097
  onOpen,
@@ -29136,7 +29128,7 @@ function ConnectedMessenger({
29136
29128
  // Presence rides on the row's avatar.
29137
29129
  avatar(c.peer)
29138
29130
  ),
29139
- badge: !isGroupChat(c.chat) && isAgent6(c.peer) ? /* @__PURE__ */ jsx(AgentBadge, {}) : void 0
29131
+ badge: !isGroupChat(c.chat) && isAgent7(c.peer) ? /* @__PURE__ */ jsx(AgentBadge, {}) : void 0
29140
29132
  }));
29141
29133
  const all = [...decorated, ...extraRows];
29142
29134
  if (!filters?.size) return all;
@@ -29144,7 +29136,7 @@ function ConnectedMessenger({
29144
29136
  unread: (row2) => row2.unreadCount > 0,
29145
29137
  // A person is muted, not a group that happens to list them first.
29146
29138
  muted: (row2) => !isGroupChat(row2.chat) && mutedUsers.has(row2.peer.external_id),
29147
- agents: (row2) => !isGroupChat(row2.chat) && isAgent6(row2.peer),
29139
+ agents: (row2) => !isGroupChat(row2.chat) && isAgent7(row2.peer),
29148
29140
  meetings: (row2) => row2.chat?.kind === "meeting",
29149
29141
  ...rowFilters
29150
29142
  };
@@ -29275,12 +29267,12 @@ function ConnectedMessenger({
29275
29267
  {
29276
29268
  avatar: activePeer ? avatar(activePeer) : void 0,
29277
29269
  name: activePeer ? userDisplayName(activePeer) : "Conversation",
29278
- badge: activePeer && isAgent6(activePeer) ? /* @__PURE__ */ jsx(AgentBadge, {}) : void 0,
29270
+ badge: activePeer && isAgent7(activePeer) ? /* @__PURE__ */ jsx(AgentBadge, {}) : void 0,
29279
29271
  presence: presence ? /* @__PURE__ */ jsx(PresenceLabel, { status: presence }) : void 0,
29280
29272
  email: activePeer?.email,
29281
29273
  menu: activePeer ? directActions?.(activePeer, {
29282
29274
  // A personal agent never carries over into a group, and a self-chat has no peer.
29283
- addPeople: isAgent6(activePeer) || activeIsSelf || !PeoplePicker ? void 0 : () => setPicker({ mode: "from-direct", fixed: [activePeer] })
29275
+ addPeople: isAgent7(activePeer) || activeIsSelf || !PeoplePicker ? void 0 : () => setPicker({ mode: "from-direct", fixed: [activePeer] })
29284
29276
  }) : void 0
29285
29277
  }
29286
29278
  ),
@@ -30008,12 +30000,12 @@ function useDeveloperConfig() {
30008
30000
  const parts = field.split(".");
30009
30001
  if (parts.length > 1) {
30010
30002
  const sectionCopy = { ...prev[section] };
30011
- let current2 = sectionCopy;
30003
+ let current = sectionCopy;
30012
30004
  for (let i = 0; i < parts.length - 1; i++) {
30013
- current2[parts[i]] = { ...current2[parts[i]] };
30014
- current2 = current2[parts[i]];
30005
+ current[parts[i]] = { ...current[parts[i]] };
30006
+ current = current[parts[i]];
30015
30007
  }
30016
- current2[parts[parts.length - 1]] = value;
30008
+ current[parts[parts.length - 1]] = value;
30017
30009
  const newValues2 = { ...prev, [section]: sectionCopy };
30018
30010
  setHasUnsavedChanges(true);
30019
30011
  return newValues2;
@@ -30497,15 +30489,15 @@ function ConnectedRequestWorkspaceAccess({
30497
30489
  const targetWorkspace = selectedWorkspace ?? workspaceExtId ?? (knownWorkspaceIds.length === 1 ? knownWorkspaceIds[0] : void 0);
30498
30490
  const [resolvedName, setResolvedName] = useState();
30499
30491
  useEffect(() => {
30500
- let current2 = true;
30492
+ let current = true;
30501
30493
  setResolvedName(void 0);
30502
30494
  if (!isOpen || !targetWorkspace || workspaceName) return;
30503
30495
  void arbi.workspaces.accessStatus(targetWorkspace).then((status) => {
30504
- if (current2) setResolvedName(status.workspace_name);
30496
+ if (current) setResolvedName(status.workspace_name);
30505
30497
  }).catch(() => {
30506
30498
  });
30507
30499
  return () => {
30508
- current2 = false;
30500
+ current = false;
30509
30501
  };
30510
30502
  }, [arbi, isOpen, targetWorkspace, workspaceName]);
30511
30503
  const name = [recipient.given_name, recipient.family_name].filter(Boolean).join(" ") || recipient.email || "this user";
@@ -30824,7 +30816,7 @@ function ConnectedAccountCluster({
30824
30816
  const pageRow = (page, icon2, label) => {
30825
30817
  const open = pages.includes(page) ? offered[page] : void 0;
30826
30818
  if (!open) return null;
30827
- const current2 = activePage === page;
30819
+ const current = activePage === page;
30828
30820
  return /* @__PURE__ */ jsx(
30829
30821
  SidebarBadgeRow,
30830
30822
  {
@@ -30832,8 +30824,8 @@ function ConnectedAccountCluster({
30832
30824
  label,
30833
30825
  ariaLabel: label,
30834
30826
  variant: rowVariant,
30835
- className: `${iconClassName ?? ""} ${current2 ? "bg-primary/10 text-primary" : ""}`,
30836
- "aria-current": current2 ? "page" : void 0,
30827
+ className: `${iconClassName ?? ""} ${current ? "bg-primary/10 text-primary" : ""}`,
30828
+ "aria-current": current ? "page" : void 0,
30837
30829
  "data-testid": `sidebar-${page}-button`,
30838
30830
  onClick: () => {
30839
30831
  open();
@@ -31649,6 +31641,478 @@ function ConnectedReportProblem({
31649
31641
  report.ui
31650
31642
  ] });
31651
31643
  }
31644
+ var referencesOf = (inputs) => {
31645
+ const value = inputs.references;
31646
+ return value?.documents ?? [];
31647
+ };
31648
+ var PROMPT_BINDINGS = {
31649
+ [GENERATE_IMAGE_ID]: {
31650
+ attachScope: false,
31651
+ tools: (inputs) => {
31652
+ const aspectRatio = typeof inputs.aspect_ratio === "string" ? inputs.aspect_ratio : "";
31653
+ return {
31654
+ retrieval_chunk: buildRetrievalChunkTool([]),
31655
+ retrieval_full_context: buildRetrievalFullContextTool(referencesOf(inputs)),
31656
+ ...aspectRatio && aspectRatio !== IMAGE_ASPECT_AUTO ? {
31657
+ image_generation: {
31658
+ name: "image_generation",
31659
+ description: "image generation",
31660
+ tool_args: { aspect_ratio: aspectRatio },
31661
+ tool_responses: {}
31662
+ }
31663
+ } : {}
31664
+ };
31665
+ }
31666
+ }
31667
+ };
31668
+ function useWorkflowTasks() {
31669
+ const createWork = useCreateWork();
31670
+ const runWorkflow = useRunWorkflow();
31671
+ const startQuery = useStartTaskQuery();
31672
+ const createWorkflow = useCreateWorkflow();
31673
+ const updateConversation = useUpdateConversation();
31674
+ const updateWorkflowMutation = useUpdateWorkflow();
31675
+ const activeWorkspaceId = useArbiSessionState((s) => s.workspaceId);
31676
+ const { openFiles } = useBlocksEnvironment();
31677
+ const { mutateAsync: grant } = useGrantAgentAccess();
31678
+ const grantAgentAccess = useCallback(
31679
+ (agentExtId, workspaceId) => grant({ agentExtId, workspaceId }).then(
31680
+ () => void 0,
31681
+ () => void 0
31682
+ ),
31683
+ [grant]
31684
+ );
31685
+ const { data: documents = [] } = useDocuments();
31686
+ const documentTitles = useMemo(
31687
+ () => Object.fromEntries(documents.map((d) => [d.external_id, getDocumentTitle(d, d.external_id)])),
31688
+ [documents]
31689
+ );
31690
+ const create3 = useCallback(
31691
+ async (ctx, forceWorkflow = false) => {
31692
+ const request = taskComposerToCreateRequest(
31693
+ { ...ctx, documentTitles, plan: ctx.plan ?? null },
31694
+ activeWorkspaceId ?? void 0,
31695
+ forceWorkflow
31696
+ );
31697
+ if (request.kind === "workflow") {
31698
+ const workflow = await createWorkflow.mutateAsync(request.body);
31699
+ const workspaceId = workflow.workspace_ext_id ?? request.body.workspace_ext_id;
31700
+ if (workflow.auth_mode === "scheduled_permanent" && !workflow.on_demand && workflow.agent_ext_id && workspaceId) {
31701
+ await grantAgentAccess(workflow.agent_ext_id, workspaceId);
31702
+ }
31703
+ if (ctx.workflow.documentAction && ctx.values.when === "now" && !forceWorkflow) {
31704
+ const result = await runWorkflow.mutateAsync(workflow.external_id);
31705
+ if (result.error) throw new Error(result.error);
31706
+ openFiles();
31707
+ }
31708
+ return { kind: "workflow", workflow };
31709
+ }
31710
+ if (request.kind === "query") {
31711
+ const { conversationId } = await startQuery.start(request.query);
31712
+ return {
31713
+ kind: "work",
31714
+ task: { external_id: conversationId, title: request.query.task.title ?? null },
31715
+ ran: true
31716
+ };
31717
+ }
31718
+ const task = await createWork.mutateAsync(request.body);
31719
+ return { kind: "work", task, ran: null };
31720
+ },
31721
+ [
31722
+ activeWorkspaceId,
31723
+ createWork,
31724
+ createWorkflow,
31725
+ documentTitles,
31726
+ grantAgentAccess,
31727
+ startQuery,
31728
+ runWorkflow,
31729
+ openFiles
31730
+ ]
31731
+ );
31732
+ const update = useCallback(
31733
+ async (task, ctx) => {
31734
+ const patch = taskComposerToUpdateRequest({ ...ctx, plan: ctx.plan ?? null });
31735
+ if (task.is_owner === false) delete patch.shared;
31736
+ await updateConversation.mutateAsync({ conversationId: task.external_id, patch });
31737
+ },
31738
+ [updateConversation]
31739
+ );
31740
+ const updateWorkflow = useCallback(
31741
+ async (workflow, ctx) => {
31742
+ const patch = composerToWorkflowUpdate({ ...ctx, documentTitles, plan: ctx.plan ?? null });
31743
+ if (workflow.is_owner === false) delete patch.shared;
31744
+ const workspaceId = workflow.workspace_ext_id ?? activeWorkspaceId;
31745
+ const updated = await updateWorkflowMutation.mutateAsync({
31746
+ workflowId: workflow.external_id,
31747
+ patch
31748
+ });
31749
+ const agentId = updated.agent_ext_id ?? patch.agent_ext_id ?? workflow.agent_ext_id;
31750
+ if (updated.auth_mode === "scheduled_permanent" && !updated.on_demand && agentId && workspaceId) {
31751
+ await grantAgentAccess(agentId, workspaceId);
31752
+ }
31753
+ },
31754
+ [activeWorkspaceId, documentTitles, grantAgentAccess, updateWorkflowMutation]
31755
+ );
31756
+ return {
31757
+ create: create3,
31758
+ update,
31759
+ updateWorkflow,
31760
+ isPending: createWork.isPending || startQuery.isPending || createWorkflow.isPending || updateConversation.isPending || updateWorkflowMutation.isPending
31761
+ };
31762
+ }
31763
+
31764
+ // src/connection/workflows/useLaunchWorkflow.ts
31765
+ var text = (inputs, name) => {
31766
+ const v = inputs[name];
31767
+ return typeof v === "string" ? v.trim() : "";
31768
+ };
31769
+ function useLaunchWorkflow({ landing: surfaceLanding } = {}) {
31770
+ const { data: documents = [] } = useDocuments();
31771
+ const { data: workspaceTags = [] } = useTags();
31772
+ const tags = useMemo(() => documentScopeLabels(workspaceTags), [workspaceTags]);
31773
+ const createTag = useCreateTag();
31774
+ const updateTag = useUpdateTag();
31775
+ const generate = useGenerateDocTags();
31776
+ const { create: createTask } = useWorkflowTasks();
31777
+ const applyModel = useApplyChatModel();
31778
+ const session = useArbiSessionStore();
31779
+ const { notify: notify17, openFiles, openNewConversation } = useBlocksEnvironment();
31780
+ const annotate = useCallback(
31781
+ async ({ inputs, scope }) => {
31782
+ const description = text(inputs, "description");
31783
+ const name = text(inputs, "name") || deriveAnnotationName(description);
31784
+ const matching = matchWorkflowScope(documents, scope);
31785
+ if (!name || !description || matching.length === 0) return;
31786
+ try {
31787
+ const existing = tags.find((t) => t.name.toLowerCase() === name.toLowerCase());
31788
+ let tagId;
31789
+ if (existing) {
31790
+ tagId = existing.external_id;
31791
+ await updateTag.mutateAsync({
31792
+ tagId,
31793
+ change: { instruction: description }
31794
+ });
31795
+ } else {
31796
+ const created = await createTag.mutateAsync({
31797
+ name,
31798
+ tagType: { type: "text", options: [] },
31799
+ shared: true,
31800
+ instruction: description
31801
+ });
31802
+ const createdId = created?.external_id;
31803
+ if (!createdId) throw new Error("tag create returned no id");
31804
+ tagId = createdId;
31805
+ }
31806
+ const docIds = matching.map((d) => d.external_id);
31807
+ await generate.mutateAsync({ tagIds: [tagId], docIds, overwrite: true });
31808
+ const filters = {};
31809
+ scope.folders.forEach((folder) => {
31810
+ filters[folder === "" ? "folder:none" : `folder:${folder}`] = "include";
31811
+ });
31812
+ scope.labels.forEach((labelId) => {
31813
+ filters[labelId] = "include";
31814
+ });
31815
+ openFiles({ select: docIds, filters });
31816
+ } catch (error) {
31817
+ notify17("Could not start the annotation", "error");
31818
+ throw error;
31819
+ }
31820
+ },
31821
+ [documents, tags, createTag, updateTag, generate, openFiles, notify17]
31822
+ );
31823
+ return useCallback(
31824
+ async (launch) => {
31825
+ const { workflow, inputs, scope, agentId } = launch;
31826
+ if (workflow.run.kind === "operation") {
31827
+ if (workflow.id === ANNOTATE_ID) {
31828
+ await annotate(launch);
31829
+ recordWorkflowUse(workflow.id);
31830
+ return;
31831
+ }
31832
+ throw new Error(`No host handler for workflow "${workflow.id}"`);
31833
+ }
31834
+ const documentTitles = Object.fromEntries(
31835
+ documents.map((d) => [d.external_id, getDocumentTitle(d, d.external_id)])
31836
+ );
31837
+ const prompt = composeWorkflowPrompt(workflow, inputs, { documentTitles });
31838
+ if (!prompt) return;
31839
+ recordWorkflowUse(workflow.id);
31840
+ if (agentId) {
31841
+ try {
31842
+ const created = await createTask({
31843
+ workflow,
31844
+ values: {
31845
+ assignee: "agent",
31846
+ workflowId: workflow.id,
31847
+ inputs,
31848
+ when: "now",
31849
+ runAt: "",
31850
+ rrule: "",
31851
+ timezone: "UTC",
31852
+ eventKind: "",
31853
+ afterTaskId: "",
31854
+ parentTaskId: "",
31855
+ shared: true,
31856
+ description: "",
31857
+ dueAt: "",
31858
+ agentId,
31859
+ name: "",
31860
+ notifyOnComplete: true,
31861
+ access: "ask_each_run"
31862
+ }
31863
+ });
31864
+ const ran = created.kind === "work" ? created.ran : null;
31865
+ const title = created.kind === "work" ? created.task.title : created.workflow.name;
31866
+ notify17(
31867
+ ran === false ? "Task created, but the run could not start" : `Running \u201C${title ?? workflow.title}\u201D`,
31868
+ ran === false ? "warning" : "success"
31869
+ );
31870
+ } catch (error) {
31871
+ notify17(
31872
+ error instanceof Error && error.message.startsWith("Open a workspace") ? error.message : "Could not start the run",
31873
+ "error"
31874
+ );
31875
+ throw error;
31876
+ }
31877
+ return;
31878
+ }
31879
+ const landing = launch.landing ?? surfaceLanding ?? workflow.landing;
31880
+ const inPlace = landing === "current-chat";
31881
+ const binding = PROMPT_BINDINGS[workflow.id];
31882
+ if (!inPlace) openNewConversation();
31883
+ if (binding?.attachScope !== false && !isEmptyWorkflowScope(scope)) {
31884
+ const ids = matchWorkflowScope(documents, scope).map((d) => d.external_id);
31885
+ if (ids.length > 0) {
31886
+ session.setConversationDocuments(
31887
+ inPlace ? session.getState().conversationId ?? "new" : "new",
31888
+ ids.map((docId) => ({ docId, isPinned: false }))
31889
+ );
31890
+ }
31891
+ }
31892
+ if (workflow.model) void applyModel(workflow.model, `Workflow - ${workflow.title}`);
31893
+ session.setPendingTools(binding?.tools?.(inputs) ?? null);
31894
+ session.setDraft(prompt);
31895
+ session.setAutoSendDraft(true);
31896
+ },
31897
+ [
31898
+ annotate,
31899
+ applyModel,
31900
+ createTask,
31901
+ documents,
31902
+ surfaceLanding,
31903
+ session,
31904
+ notify17,
31905
+ openNewConversation
31906
+ ]
31907
+ );
31908
+ }
31909
+ var AGENT_LABELS = { label: "Who this runs for", myAssistant: "Me (your own assistant)" };
31910
+ function ConnectedWorkflowStart({
31911
+ workflows,
31912
+ landing,
31913
+ addFilesAction,
31914
+ ...rest
31915
+ }) {
31916
+ const onLaunch = useLaunchWorkflow({ landing });
31917
+ const { openUpload } = useBlocksEnvironment();
31918
+ const { data: workspaceTags = [] } = useTags();
31919
+ const tags = useMemo(() => documentScopeLabels(workspaceTags), [workspaceTags]);
31920
+ const fieldPlaceholder = useCallback(
31921
+ (field, inputs, workflow) => {
31922
+ if (workflow.id !== ANNOTATE_ID || field.name !== "name") return void 0;
31923
+ const derived = deriveAnnotationName(String(inputs.description ?? ""));
31924
+ return derived ? `Otherwise \u201C${derived}\u201D` : "Taken from the description";
31925
+ },
31926
+ []
31927
+ );
31928
+ return /* @__PURE__ */ jsx(
31929
+ ConnectedWorkflowLauncher,
31930
+ {
31931
+ ...rest,
31932
+ workflows,
31933
+ onLaunch,
31934
+ renderIcon: renderWorkflowIcon,
31935
+ onAddFiles: openUpload,
31936
+ agentLabels: AGENT_LABELS,
31937
+ addFilesAction,
31938
+ fieldPlaceholder,
31939
+ submitLabel: ({ workflow, matchedCount }) => workflow.id === ANNOTATE_ID && matchedCount !== null ? `Annotate ${matchedCount} document${matchedCount !== 1 ? "s" : ""}` : void 0,
31940
+ renderNotice: ({ workflow, inputs }) => {
31941
+ if (workflow.id !== ANNOTATE_ID) return null;
31942
+ const name = String(inputs.name ?? "").trim() || deriveAnnotationName(String(inputs.description ?? ""));
31943
+ const existing = name ? tags.find((t) => t.name.toLowerCase() === name.toLowerCase()) : void 0;
31944
+ if (!existing) return null;
31945
+ return /* @__PURE__ */ jsxs(
31946
+ "div",
31947
+ {
31948
+ className: "flex items-start gap-2 rounded-md border border-amber-500/40 bg-amber-500/10 px-3 py-2 text-sm text-amber-800 dark:text-amber-200",
31949
+ role: "status",
31950
+ "data-testid": "workflow-existing-label-warning",
31951
+ children: [
31952
+ /* @__PURE__ */ jsx(TriangleAlert, { className: "mt-0.5 size-4 shrink-0 text-amber-500" }),
31953
+ /* @__PURE__ */ jsxs("span", { children: [
31954
+ "An annotation called ",
31955
+ /* @__PURE__ */ jsx("span", { className: "font-medium", children: existing.name }),
31956
+ " already exists. Annotating will overwrite its description and the current cell values for the selected files."
31957
+ ] })
31958
+ ]
31959
+ }
31960
+ );
31961
+ }
31962
+ }
31963
+ );
31964
+ }
31965
+ function useSkillsEnabled() {
31966
+ const { data: userSettings } = useUserSettings();
31967
+ return userSettings?.show_skills ?? false;
31968
+ }
31969
+
31970
+ // src/connection/workflows/useWorkflowDefinitions.ts
31971
+ function useWorkflowDefinitions() {
31972
+ const { data: listings } = useSkills();
31973
+ const usage = useWorkflowUsage();
31974
+ const skillsEnabled = useSkillsEnabled();
31975
+ return useMemo(() => {
31976
+ const { host: builtins, skills: fromServer } = mergeSkillWorkflows(
31977
+ WEB_WORKFLOWS,
31978
+ listings ?? []
31979
+ );
31980
+ const all = [...builtins, ...fromServer];
31981
+ const byId = new Map(all.map((w) => [w.id, w]));
31982
+ const pinned = DASHBOARD_PINNED.flatMap((id) => {
31983
+ const w = byId.get(id);
31984
+ return w ? [w] : [];
31985
+ });
31986
+ return {
31987
+ skills: all,
31988
+ skillsEnabled,
31989
+ start: skillsEnabled ? [...builtins, ...sortByRecentUse(fromServer, usage)] : [],
31990
+ dashboard: [...pinned, ...DASHBOARD_OPERATIONS],
31991
+ forTasks: [CUSTOM_TASK, ...all.filter((w) => w.schedulable), REMIND_TASK]
31992
+ };
31993
+ }, [listings, usage, skillsEnabled]);
31994
+ }
31995
+
31996
+ // src/connection/workflows/useWorkflowLaunch.ts
31997
+ function suppliedKinds(context) {
31998
+ const kinds = [];
31999
+ if (context.documents?.length) kinds.push("documents");
32000
+ if (context.selection) kinds.push("selection");
32001
+ if (context.image) kinds.push("image");
32002
+ return kinds;
32003
+ }
32004
+ function resolveLaunchInputs(workflow, request) {
32005
+ const fromContext = request.context ? inputsFromContext(workflow, request.context) : {};
32006
+ const fileField = workflow.inputs.find((f) => f.type === "scope" || f.type === "documents");
32007
+ const fromScope = request.scope && fileField ? { [fileField.name]: request.scope } : {};
32008
+ return { ...fromContext, ...fromScope, ...request.inputs };
32009
+ }
32010
+ function useWorkflowLaunch() {
32011
+ const { skills } = useWorkflowDefinitions();
32012
+ const launch = useCallback(
32013
+ (workflowId, options2 = {}) => openWorkflowLaunch({ workflowId, ...options2 }),
32014
+ []
32015
+ );
32016
+ const itemsFor = useCallback(
32017
+ (context, options2 = {}) => {
32018
+ const { fileField, ...launchOptions } = options2;
32019
+ return workflowsAccepting(skills, suppliedKinds(context)).filter(
32020
+ (w) => !fileField || w.inputs.some((f) => f.type === fileField && f.context !== void 0)
32021
+ ).map((w) => ({
32022
+ id: w.id,
32023
+ title: w.title,
32024
+ icon: w.icon,
32025
+ run: () => launch(w.id, { context, ...launchOptions })
32026
+ }));
32027
+ },
32028
+ [skills, launch]
32029
+ );
32030
+ const scopeItemsFor = useCallback(
32031
+ (scope) => skills.filter((w) => w.inputs.some((f) => f.type === "scope")).map((w) => ({
32032
+ id: w.id,
32033
+ title: w.title,
32034
+ icon: w.icon,
32035
+ run: () => launch(w.id, { scope })
32036
+ })),
32037
+ [skills, launch]
32038
+ );
32039
+ return { launch, itemsFor, scopeItemsFor };
32040
+ }
32041
+ function Inner() {
32042
+ const request = useWorkflowLaunchRequest();
32043
+ const close = closeWorkflowLaunch;
32044
+ const { skills } = useWorkflowDefinitions();
32045
+ const run = useLaunchWorkflow({ landing: request?.landing });
32046
+ const workflow = skills.find((w) => w.id === request?.workflowId);
32047
+ const inputs = useMemo(
32048
+ () => workflow && request ? resolveLaunchInputs(workflow, request) : void 0,
32049
+ [workflow, request]
32050
+ );
32051
+ const complete = Boolean(
32052
+ workflow && inputs && !Object.keys(validateInputs(workflow, { ...defaultInputs(workflow), ...inputs })).length
32053
+ );
32054
+ const autoStart = Boolean(request?.autoStart && complete);
32055
+ useEffect(() => {
32056
+ if (!workflow || !request) {
32057
+ if (request) close();
32058
+ return;
32059
+ }
32060
+ if (!autoStart) return;
32061
+ close();
32062
+ void Promise.resolve(
32063
+ run(buildLaunch(workflow, { ...defaultInputs(workflow), ...inputs }))
32064
+ ).catch(() => {
32065
+ });
32066
+ }, [request, workflow, autoStart]);
32067
+ if (!request || !workflow || autoStart) return null;
32068
+ return /* @__PURE__ */ jsx(
32069
+ ConnectedWorkflowStart,
32070
+ {
32071
+ workflows: skills,
32072
+ showTiles: false,
32073
+ landing: request.landing,
32074
+ activeId: workflow.id,
32075
+ onActiveIdChange: (id) => id === null && close(),
32076
+ initialInputsFor: () => inputs
32077
+ }
32078
+ );
32079
+ }
32080
+ function WorkflowLaunchHost() {
32081
+ return useWorkflowLaunchRequest() ? /* @__PURE__ */ jsx(Inner, {}) : null;
32082
+ }
32083
+ var BUILTIN_GLOBAL_DIALOGS = {
32084
+ quota: ({ props, onClose }) => /* @__PURE__ */ jsx(ConnectedQuotaDialog, { info: props, onClose }),
32085
+ welcome: ({ props, onClose }) => /* @__PURE__ */ jsx(ConnectedWelcomeDialog, { open: props !== null, onOpenChange: (open) => !open && onClose() }),
32086
+ grantAccess: () => /* @__PURE__ */ jsx(ConnectedGrantWorkspaceAccessDialog, {}),
32087
+ workflowLaunch: () => /* @__PURE__ */ jsx(WorkflowLaunchHost, {}),
32088
+ transfer: ({ props, onClose }) => /* @__PURE__ */ jsx(
32089
+ ConnectedExportDialog,
32090
+ {
32091
+ open: props !== null,
32092
+ onOpenChange: (open) => !open && onClose(),
32093
+ testId: "workspace-transfer-modal"
32094
+ }
32095
+ ),
32096
+ logout: ({ props, onClose }) => /* @__PURE__ */ jsx(ConnectedLogoutDialog, { open: props !== null, onClose })
32097
+ };
32098
+ function GlobalDialog({
32099
+ kind,
32100
+ render: Render
32101
+ }) {
32102
+ const props = useDialogProps(kind);
32103
+ const { closeDialog: closeDialog2 } = useBlocksEnvironment();
32104
+ const [opened, setOpened] = useState(false);
32105
+ if (props !== null && !opened) setOpened(true);
32106
+ if (!opened && props === null) return null;
32107
+ return /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(Render, { props, onClose: () => closeDialog2(kind) }) });
32108
+ }
32109
+ function ConnectedGlobalDialogs({ dialogs }) {
32110
+ const renderers = { ...BUILTIN_GLOBAL_DIALOGS, ...dialogs };
32111
+ return /* @__PURE__ */ jsx(Fragment, { children: Object.keys(renderers).map((kind) => {
32112
+ const render = renderers[kind];
32113
+ return render ? /* @__PURE__ */ jsx(GlobalDialog, { kind, render }, kind) : null;
32114
+ }) });
32115
+ }
31652
32116
  var ConversationEntity = memo(function ConversationEntity2({
31653
32117
  conversation,
31654
32118
  variant = "pill",
@@ -32428,131 +32892,6 @@ function ConnectedThreadTaskBar({
32428
32892
  }
32429
32893
  );
32430
32894
  }
32431
- function useSkillsEnabled() {
32432
- const { data: userSettings } = useUserSettings();
32433
- return userSettings?.show_skills ?? false;
32434
- }
32435
-
32436
- // src/connection/workflows/useWorkflowDefinitions.ts
32437
- function useWorkflowDefinitions() {
32438
- const { data: listings } = useSkills();
32439
- const usage = useWorkflowUsage();
32440
- const skillsEnabled = useSkillsEnabled();
32441
- return useMemo(() => {
32442
- const { host: builtins, skills: fromServer } = mergeSkillWorkflows(
32443
- WEB_WORKFLOWS,
32444
- listings ?? []
32445
- );
32446
- const all = [...builtins, ...fromServer];
32447
- const byId = new Map(all.map((w) => [w.id, w]));
32448
- const pinned = DASHBOARD_PINNED.flatMap((id) => {
32449
- const w = byId.get(id);
32450
- return w ? [w] : [];
32451
- });
32452
- return {
32453
- skills: all,
32454
- skillsEnabled,
32455
- start: skillsEnabled ? [...builtins, ...sortByRecentUse(fromServer, usage)] : [],
32456
- dashboard: [...pinned, ...DASHBOARD_OPERATIONS],
32457
- forTasks: [CUSTOM_TASK, ...all.filter((w) => w.schedulable), REMIND_TASK]
32458
- };
32459
- }, [listings, usage, skillsEnabled]);
32460
- }
32461
- function useWorkflowTasks() {
32462
- const createWork = useCreateWork();
32463
- const runWorkflow = useRunWorkflow();
32464
- const startQuery = useStartTaskQuery();
32465
- const createWorkflow = useCreateWorkflow();
32466
- const updateConversation = useUpdateConversation();
32467
- const updateWorkflowMutation = useUpdateWorkflow();
32468
- const activeWorkspaceId = useArbiSessionState((s) => s.workspaceId);
32469
- const { openFiles } = useBlocksEnvironment();
32470
- const { mutateAsync: grant } = useGrantAgentAccess();
32471
- const grantAgentAccess = useCallback(
32472
- (agentExtId, workspaceId) => grant({ agentExtId, workspaceId }).then(
32473
- () => void 0,
32474
- () => void 0
32475
- ),
32476
- [grant]
32477
- );
32478
- const { data: documents = [] } = useDocuments();
32479
- const documentTitles = useMemo(
32480
- () => Object.fromEntries(documents.map((d) => [d.external_id, getDocumentTitle(d, d.external_id)])),
32481
- [documents]
32482
- );
32483
- const create3 = useCallback(
32484
- async (ctx, forceWorkflow = false) => {
32485
- const request = taskComposerToCreateRequest(
32486
- { ...ctx, documentTitles, plan: ctx.plan ?? null },
32487
- activeWorkspaceId ?? void 0,
32488
- forceWorkflow
32489
- );
32490
- if (request.kind === "workflow") {
32491
- const workflow = await createWorkflow.mutateAsync(request.body);
32492
- const workspaceId = workflow.workspace_ext_id ?? request.body.workspace_ext_id;
32493
- if (workflow.auth_mode === "scheduled_permanent" && !workflow.on_demand && workflow.agent_ext_id && workspaceId) {
32494
- await grantAgentAccess(workflow.agent_ext_id, workspaceId);
32495
- }
32496
- if (ctx.workflow.documentAction && ctx.values.when === "now" && !forceWorkflow) {
32497
- const result = await runWorkflow.mutateAsync(workflow.external_id);
32498
- if (result.error) throw new Error(result.error);
32499
- openFiles();
32500
- }
32501
- return { kind: "workflow", workflow };
32502
- }
32503
- if (request.kind === "query") {
32504
- const { conversationId } = await startQuery.start(request.query);
32505
- return {
32506
- kind: "work",
32507
- task: { external_id: conversationId, title: request.query.task.title ?? null },
32508
- ran: true
32509
- };
32510
- }
32511
- const task = await createWork.mutateAsync(request.body);
32512
- return { kind: "work", task, ran: null };
32513
- },
32514
- [
32515
- activeWorkspaceId,
32516
- createWork,
32517
- createWorkflow,
32518
- documentTitles,
32519
- grantAgentAccess,
32520
- startQuery,
32521
- runWorkflow,
32522
- openFiles
32523
- ]
32524
- );
32525
- const update = useCallback(
32526
- async (task, ctx) => {
32527
- const patch = taskComposerToUpdateRequest({ ...ctx, plan: ctx.plan ?? null });
32528
- if (task.is_owner === false) delete patch.shared;
32529
- await updateConversation.mutateAsync({ conversationId: task.external_id, patch });
32530
- },
32531
- [updateConversation]
32532
- );
32533
- const updateWorkflow = useCallback(
32534
- async (workflow, ctx) => {
32535
- const patch = composerToWorkflowUpdate({ ...ctx, documentTitles, plan: ctx.plan ?? null });
32536
- if (workflow.is_owner === false) delete patch.shared;
32537
- const workspaceId = workflow.workspace_ext_id ?? activeWorkspaceId;
32538
- const updated = await updateWorkflowMutation.mutateAsync({
32539
- workflowId: workflow.external_id,
32540
- patch
32541
- });
32542
- const agentId = updated.agent_ext_id ?? patch.agent_ext_id ?? workflow.agent_ext_id;
32543
- if (updated.auth_mode === "scheduled_permanent" && !updated.on_demand && agentId && workspaceId) {
32544
- await grantAgentAccess(agentId, workspaceId);
32545
- }
32546
- },
32547
- [activeWorkspaceId, documentTitles, grantAgentAccess, updateWorkflowMutation]
32548
- );
32549
- return {
32550
- create: create3,
32551
- update,
32552
- updateWorkflow,
32553
- isPending: createWork.isPending || startQuery.isPending || createWorkflow.isPending || updateConversation.isPending || updateWorkflowMutation.isPending
32554
- };
32555
- }
32556
32895
  function StandingAccessNote({
32557
32896
  agentId,
32558
32897
  activeWorkspaceName
@@ -33255,318 +33594,6 @@ function useRenderTaskPerson() {
33255
33594
  [byId]
33256
33595
  );
33257
33596
  }
33258
- var referencesOf = (inputs) => {
33259
- const value = inputs.references;
33260
- return value?.documents ?? [];
33261
- };
33262
- var PROMPT_BINDINGS = {
33263
- [GENERATE_IMAGE_ID]: {
33264
- attachScope: false,
33265
- tools: (inputs) => {
33266
- const aspectRatio = typeof inputs.aspect_ratio === "string" ? inputs.aspect_ratio : "";
33267
- return {
33268
- retrieval_chunk: buildRetrievalChunkTool([]),
33269
- retrieval_full_context: buildRetrievalFullContextTool(referencesOf(inputs)),
33270
- ...aspectRatio && aspectRatio !== IMAGE_ASPECT_AUTO ? {
33271
- image_generation: {
33272
- name: "image_generation",
33273
- description: "image generation",
33274
- tool_args: { aspect_ratio: aspectRatio },
33275
- tool_responses: {}
33276
- }
33277
- } : {}
33278
- };
33279
- }
33280
- }
33281
- };
33282
-
33283
- // src/connection/workflows/useLaunchWorkflow.ts
33284
- var text = (inputs, name) => {
33285
- const v = inputs[name];
33286
- return typeof v === "string" ? v.trim() : "";
33287
- };
33288
- function useLaunchWorkflow({ landing: surfaceLanding } = {}) {
33289
- const { data: documents = [] } = useDocuments();
33290
- const { data: workspaceTags = [] } = useTags();
33291
- const tags = useMemo(() => documentScopeLabels(workspaceTags), [workspaceTags]);
33292
- const createTag = useCreateTag();
33293
- const updateTag = useUpdateTag();
33294
- const generate = useGenerateDocTags();
33295
- const { create: createTask } = useWorkflowTasks();
33296
- const applyModel = useApplyChatModel();
33297
- const session = useArbiSessionStore();
33298
- const { notify: notify17, openFiles, openNewConversation } = useBlocksEnvironment();
33299
- const annotate = useCallback(
33300
- async ({ inputs, scope }) => {
33301
- const description = text(inputs, "description");
33302
- const name = text(inputs, "name") || deriveAnnotationName(description);
33303
- const matching = matchWorkflowScope(documents, scope);
33304
- if (!name || !description || matching.length === 0) return;
33305
- try {
33306
- const existing = tags.find((t) => t.name.toLowerCase() === name.toLowerCase());
33307
- let tagId;
33308
- if (existing) {
33309
- tagId = existing.external_id;
33310
- await updateTag.mutateAsync({
33311
- tagId,
33312
- change: { instruction: description }
33313
- });
33314
- } else {
33315
- const created = await createTag.mutateAsync({
33316
- name,
33317
- tagType: { type: "text", options: [] },
33318
- shared: true,
33319
- instruction: description
33320
- });
33321
- const createdId = created?.external_id;
33322
- if (!createdId) throw new Error("tag create returned no id");
33323
- tagId = createdId;
33324
- }
33325
- const docIds = matching.map((d) => d.external_id);
33326
- await generate.mutateAsync({ tagIds: [tagId], docIds, overwrite: true });
33327
- const filters = {};
33328
- scope.folders.forEach((folder) => {
33329
- filters[folder === "" ? "folder:none" : `folder:${folder}`] = "include";
33330
- });
33331
- scope.labels.forEach((labelId) => {
33332
- filters[labelId] = "include";
33333
- });
33334
- openFiles({ select: docIds, filters });
33335
- } catch (error) {
33336
- notify17("Could not start the annotation", "error");
33337
- throw error;
33338
- }
33339
- },
33340
- [documents, tags, createTag, updateTag, generate, openFiles, notify17]
33341
- );
33342
- return useCallback(
33343
- async (launch) => {
33344
- const { workflow, inputs, scope, agentId } = launch;
33345
- if (workflow.run.kind === "operation") {
33346
- if (workflow.id === ANNOTATE_ID) {
33347
- await annotate(launch);
33348
- recordWorkflowUse(workflow.id);
33349
- return;
33350
- }
33351
- throw new Error(`No host handler for workflow "${workflow.id}"`);
33352
- }
33353
- const documentTitles = Object.fromEntries(
33354
- documents.map((d) => [d.external_id, getDocumentTitle(d, d.external_id)])
33355
- );
33356
- const prompt = composeWorkflowPrompt(workflow, inputs, { documentTitles });
33357
- if (!prompt) return;
33358
- recordWorkflowUse(workflow.id);
33359
- if (agentId) {
33360
- try {
33361
- const created = await createTask({
33362
- workflow,
33363
- values: {
33364
- assignee: "agent",
33365
- workflowId: workflow.id,
33366
- inputs,
33367
- when: "now",
33368
- runAt: "",
33369
- rrule: "",
33370
- timezone: "UTC",
33371
- eventKind: "",
33372
- afterTaskId: "",
33373
- parentTaskId: "",
33374
- shared: true,
33375
- description: "",
33376
- dueAt: "",
33377
- agentId,
33378
- name: "",
33379
- notifyOnComplete: true,
33380
- access: "ask_each_run"
33381
- }
33382
- });
33383
- const ran = created.kind === "work" ? created.ran : null;
33384
- const title = created.kind === "work" ? created.task.title : created.workflow.name;
33385
- notify17(
33386
- ran === false ? "Task created, but the run could not start" : `Running \u201C${title ?? workflow.title}\u201D`,
33387
- ran === false ? "warning" : "success"
33388
- );
33389
- } catch (error) {
33390
- notify17(
33391
- error instanceof Error && error.message.startsWith("Open a workspace") ? error.message : "Could not start the run",
33392
- "error"
33393
- );
33394
- throw error;
33395
- }
33396
- return;
33397
- }
33398
- const landing = launch.landing ?? surfaceLanding ?? workflow.landing;
33399
- const inPlace = landing === "current-chat";
33400
- const binding = PROMPT_BINDINGS[workflow.id];
33401
- if (!inPlace) openNewConversation();
33402
- if (binding?.attachScope !== false && !isEmptyWorkflowScope(scope)) {
33403
- const ids = matchWorkflowScope(documents, scope).map((d) => d.external_id);
33404
- if (ids.length > 0) {
33405
- session.setConversationDocuments(
33406
- inPlace ? session.getState().conversationId ?? "new" : "new",
33407
- ids.map((docId) => ({ docId, isPinned: false }))
33408
- );
33409
- }
33410
- }
33411
- if (workflow.model) void applyModel(workflow.model, `Workflow - ${workflow.title}`);
33412
- session.setPendingTools(binding?.tools?.(inputs) ?? null);
33413
- session.setDraft(prompt);
33414
- session.setAutoSendDraft(true);
33415
- },
33416
- [
33417
- annotate,
33418
- applyModel,
33419
- createTask,
33420
- documents,
33421
- surfaceLanding,
33422
- session,
33423
- notify17,
33424
- openNewConversation
33425
- ]
33426
- );
33427
- }
33428
- function suppliedKinds(context) {
33429
- const kinds = [];
33430
- if (context.documents?.length) kinds.push("documents");
33431
- if (context.selection) kinds.push("selection");
33432
- if (context.image) kinds.push("image");
33433
- return kinds;
33434
- }
33435
- function resolveLaunchInputs(workflow, request) {
33436
- const fromContext = request.context ? inputsFromContext(workflow, request.context) : {};
33437
- const fileField = workflow.inputs.find((f) => f.type === "scope" || f.type === "documents");
33438
- const fromScope = request.scope && fileField ? { [fileField.name]: request.scope } : {};
33439
- return { ...fromContext, ...fromScope, ...request.inputs };
33440
- }
33441
- function useWorkflowLaunch() {
33442
- const { skills } = useWorkflowDefinitions();
33443
- const launch = useCallback(
33444
- (workflowId, options2 = {}) => openWorkflowLaunch({ workflowId, ...options2 }),
33445
- []
33446
- );
33447
- const itemsFor = useCallback(
33448
- (context, options2 = {}) => {
33449
- const { fileField, ...launchOptions } = options2;
33450
- return workflowsAccepting(skills, suppliedKinds(context)).filter(
33451
- (w) => !fileField || w.inputs.some((f) => f.type === fileField && f.context !== void 0)
33452
- ).map((w) => ({
33453
- id: w.id,
33454
- title: w.title,
33455
- icon: w.icon,
33456
- run: () => launch(w.id, { context, ...launchOptions })
33457
- }));
33458
- },
33459
- [skills, launch]
33460
- );
33461
- const scopeItemsFor = useCallback(
33462
- (scope) => skills.filter((w) => w.inputs.some((f) => f.type === "scope")).map((w) => ({
33463
- id: w.id,
33464
- title: w.title,
33465
- icon: w.icon,
33466
- run: () => launch(w.id, { scope })
33467
- })),
33468
- [skills, launch]
33469
- );
33470
- return { launch, itemsFor, scopeItemsFor };
33471
- }
33472
- var AGENT_LABELS = { label: "Who this runs for", myAssistant: "Me (your own assistant)" };
33473
- function ConnectedWorkflowStart({
33474
- workflows,
33475
- landing,
33476
- addFilesAction,
33477
- ...rest
33478
- }) {
33479
- const onLaunch = useLaunchWorkflow({ landing });
33480
- const { openUpload } = useBlocksEnvironment();
33481
- const { data: workspaceTags = [] } = useTags();
33482
- const tags = useMemo(() => documentScopeLabels(workspaceTags), [workspaceTags]);
33483
- const fieldPlaceholder = useCallback(
33484
- (field, inputs, workflow) => {
33485
- if (workflow.id !== ANNOTATE_ID || field.name !== "name") return void 0;
33486
- const derived = deriveAnnotationName(String(inputs.description ?? ""));
33487
- return derived ? `Otherwise \u201C${derived}\u201D` : "Taken from the description";
33488
- },
33489
- []
33490
- );
33491
- return /* @__PURE__ */ jsx(
33492
- ConnectedWorkflowLauncher,
33493
- {
33494
- ...rest,
33495
- workflows,
33496
- onLaunch,
33497
- renderIcon: renderWorkflowIcon,
33498
- onAddFiles: openUpload,
33499
- agentLabels: AGENT_LABELS,
33500
- addFilesAction,
33501
- fieldPlaceholder,
33502
- submitLabel: ({ workflow, matchedCount }) => workflow.id === ANNOTATE_ID && matchedCount !== null ? `Annotate ${matchedCount} document${matchedCount !== 1 ? "s" : ""}` : void 0,
33503
- renderNotice: ({ workflow, inputs }) => {
33504
- if (workflow.id !== ANNOTATE_ID) return null;
33505
- const name = String(inputs.name ?? "").trim() || deriveAnnotationName(String(inputs.description ?? ""));
33506
- const existing = name ? tags.find((t) => t.name.toLowerCase() === name.toLowerCase()) : void 0;
33507
- if (!existing) return null;
33508
- return /* @__PURE__ */ jsxs(
33509
- "div",
33510
- {
33511
- className: "flex items-start gap-2 rounded-md border border-amber-500/40 bg-amber-500/10 px-3 py-2 text-sm text-amber-800 dark:text-amber-200",
33512
- role: "status",
33513
- "data-testid": "workflow-existing-label-warning",
33514
- children: [
33515
- /* @__PURE__ */ jsx(TriangleAlert, { className: "mt-0.5 size-4 shrink-0 text-amber-500" }),
33516
- /* @__PURE__ */ jsxs("span", { children: [
33517
- "An annotation called ",
33518
- /* @__PURE__ */ jsx("span", { className: "font-medium", children: existing.name }),
33519
- " already exists. Annotating will overwrite its description and the current cell values for the selected files."
33520
- ] })
33521
- ]
33522
- }
33523
- );
33524
- }
33525
- }
33526
- );
33527
- }
33528
- function Inner() {
33529
- const request = useWorkflowLaunchRequest();
33530
- const close = closeWorkflowLaunch;
33531
- const { skills } = useWorkflowDefinitions();
33532
- const run = useLaunchWorkflow({ landing: request?.landing });
33533
- const workflow = skills.find((w) => w.id === request?.workflowId);
33534
- const inputs = useMemo(
33535
- () => workflow && request ? resolveLaunchInputs(workflow, request) : void 0,
33536
- [workflow, request]
33537
- );
33538
- const complete = Boolean(
33539
- workflow && inputs && !Object.keys(validateInputs(workflow, { ...defaultInputs(workflow), ...inputs })).length
33540
- );
33541
- const autoStart = Boolean(request?.autoStart && complete);
33542
- useEffect(() => {
33543
- if (!workflow || !request) {
33544
- if (request) close();
33545
- return;
33546
- }
33547
- if (!autoStart) return;
33548
- close();
33549
- void Promise.resolve(
33550
- run(buildLaunch(workflow, { ...defaultInputs(workflow), ...inputs }))
33551
- ).catch(() => {
33552
- });
33553
- }, [request, workflow, autoStart]);
33554
- if (!request || !workflow || autoStart) return null;
33555
- return /* @__PURE__ */ jsx(
33556
- ConnectedWorkflowStart,
33557
- {
33558
- workflows: skills,
33559
- showTiles: false,
33560
- landing: request.landing,
33561
- activeId: workflow.id,
33562
- onActiveIdChange: (id) => id === null && close(),
33563
- initialInputsFor: () => inputs
33564
- }
33565
- );
33566
- }
33567
- function WorkflowLaunchHost() {
33568
- return useWorkflowLaunchRequest() ? /* @__PURE__ */ jsx(Inner, {}) : null;
33569
- }
33570
33597
  var START_VISIBLE = 8;
33571
33598
  var START_SEARCH_ABOVE = 8;
33572
33599
  function ConnectedConversationStart() {
@@ -35775,7 +35802,7 @@ function areMessagesEqual(prevProps, nextProps) {
35775
35802
  }
35776
35803
  var ConnectedMessage = React9.memo(MessageComponent, areMessagesEqual);
35777
35804
  var VERSION_LABELS = {
35778
- branchOf: (current2, total) => `Version ${current2} of ${total}`,
35805
+ branchOf: (current, total) => `Version ${current} of ${total}`,
35779
35806
  previousBranch: "Previous version",
35780
35807
  nextBranch: "Next version"
35781
35808
  };
@@ -35922,8 +35949,8 @@ var measureMessageElement = typeof window !== "undefined" ? (element) => {
35922
35949
  if (id) rememberRowHeight(id, height);
35923
35950
  return height;
35924
35951
  } : void 0;
35925
- function resolveScrollContainer(current2) {
35926
- if (current2?.isConnected) return current2;
35952
+ function resolveScrollContainer(current) {
35953
+ if (current?.isConnected) return current;
35927
35954
  return document.querySelector("[data-scroll-container]") || document.documentElement;
35928
35955
  }
35929
35956
  function stripThinking(content) {
@@ -39928,6 +39955,6 @@ function ConnectedAccountAccessBadge() {
39928
39955
  ] });
39929
39956
  }
39930
39957
 
39931
- export { AddAddonDialog, AddFromAccountsButton, AgentBarShell, AgentControlBar, AgentSteps, AnswerTable, AskAgainContext, BACKFILL_OPTIONS, BULK_REPROCESS_LIMIT, BillingProjectEntity, CaptureBar, ChangePlanDialog, ChatAttachmentList, ConnectedAccountAccessBadge, ConnectedAccountCluster, ConnectedAccountSettings, ConnectedAddContacts, ConnectedAgentChat, ConnectedAgentChatPanel, ConnectedAgentConfigForm, ConnectedAgentCreator, ConnectedAiReview, ConnectedAppRuntime, ConnectedAppsSettings, ConnectedAuthorizeAgent, ConnectedBranchControls, ConnectedBulkTagEditor, ConnectedCalendar, ConnectedChatThread, ConnectedCitationRenderer, ConnectedCompactConversation, ConnectedConfigForm, ConnectedContactCardForm, ConnectedContactToggle, ConnectedContactsDirectory, ConnectedConversation, ConnectedConversationDocumentPicker, ConnectedConversationEmpty, ConnectedConversationStart, ConnectedDangerZone, ConnectedDeploymentStorage, ConnectedDeveloperConfig, ConnectedDriveSyncDialog, ConnectedExportDialog, ConnectedExportPanel, ConnectedFactsPage, ConnectedFieldsEditor, ConnectedFieldsManager, ConnectedFilesBulkActions, ConnectedFilesExplorer, ConnectedFilesPage, ConnectedForgotPassword, ConnectedGrantWorkspaceAccessDialog, ConnectedGroupMembers, ConnectedIdentityVerification, ConnectedLoginPage, ConnectedLogoutDialog, ConnectedMailAccounts, ConnectedMailComposer, ConnectedMailInviteCard, ConnectedMailMessage, ConnectedMailSettings, ConnectedMailSetup, ConnectedMailbox, ConnectedMailboxSyncDialog, ConnectedMessage, ConnectedMessageArea, ConnectedMessageList, ConnectedMessenger, ConnectedModelSelector, ConnectedMoveToFolder, ConnectedNewThreadDialog, ConnectedNotificationCenter, ConnectedNotificationPreferences, ConnectedOAuthConsentPage, ConnectedPasswordChangeDialog, ConnectedPremiumModels, ConnectedPrivacySettings, ConnectedProfileCard, ConnectedProjectEntity, ConnectedProjectPage, ConnectedProjectStorage, ConnectedProjectsPanel, ConnectedPublicBooking, ConnectedQuotaDialog, ConnectedRecentlyDeletedButton, ConnectedRecoveryKeyDialog, ConnectedReportProblem, ConnectedRequestWorkspaceAccess, ConnectedRequireVerified, ConnectedSearchPage, ConnectedSecuritySection, ConnectedSessionsRow, ConnectedSettingsPage, ConnectedSharePointAdminConsentPage, ConnectedSharedFilesPage, ConnectedSignatureVerifyPage, ConnectedSkillUpload, ConnectedSkillsLibrary, ConnectedSsoCallback, ConnectedStorageProjectCard, ConnectedStorageSettings, ConnectedTagEditorDialog, ConnectedTagEntity, ConnectedTagForm, ConnectedTagTable, ConnectedTagsPage, ConnectedTaskAccessRequest, ConnectedTaskActivityDialog, ConnectedTaskComposer, ConnectedTaskStartDialog, ConnectedThreadFollow, ConnectedThreadLauncher, ConnectedThreadTabs, ConnectedThreadTaskBar, ConnectedThreadsPreview, ConnectedTransferWatcher, ConnectedUpcomingEvents, ConnectedUpload, ConnectedUploadDropzone, ConnectedUserEntity, ConnectedWelcomeDialog, ConnectedWorkflowHistory, ConnectedWorkflowRunner, ConnectedWorkflowStart, ConnectedWorkspaceActivity, ConnectedWorkspaceDashboard, ConnectedWorkspaceEntity, ConnectedWorkspaceList, ConnectedWorkspaceMembers, ConnectedWorkspaceNotificationMenu, ConnectedWorkspaceSettings, ConnectedWorkspaceTrash, ConversationAlert, ConversationComposer2 as ConversationComposer, ConversationEntity, ConversationSendButton, ConversationStatusCell, DEFAULT_CONNECTED_SEARCH_PAGE_LABELS, DEFAULT_CONNECTED_SKILL_UPLOAD_LABELS, DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS, DEFAULT_OAUTH_PERMISSIONS, DEFAULT_PROJECTS_LIST_LABELS, DEFAULT_PROJECT_DETAILS_LABELS, DEFAULT_PROJECT_DETAIL_FIELDS, DEFAULT_PROJECT_LIST_COLUMNS, DEFAULT_PROJECT_PAGE_LABELS, DEFAULT_SEARCH_FIELDS, DEFAULT_SEARCH_ROW_LABELS, DEFAULT_SETTINGS_SECTIONS, DEFAULT_TIMELINE_LABEL_WIDTH, DEFAULT_WORKSPACE_LIST_LABELS, DeveloperFooter, DocumentFolderCell, DocumentLabelsCell, DocumentNameCell, DocumentSharedCell, DocumentStatusGlyph, DocumentSyncGlyph, DocumentUser, DocumentsFilterBarActions, DocumentsUploadButton, EmptyWorkspaceUpload, FACTS_GRID_ID, FILES_PREFS_KEY, FileTooltipContent, ImportVcfButton, ImportVcfSummary, InvoicesModal, LOOK_AGAIN_LABEL, MessageDetailsModal, MessageLiveSeconds, MicButton, NewProjectFlow, NotificationCenter, NotificationEvent, PENDING_LOOKUP_MS, PENDING_RECOVERY_KEY, PENDING_TASK_MESSAGE, PREMIUM_TIER_TAG, PROJECTS_BASE_TAB_ID, PROMPT_BINDINGS, PersistedGridView, ProgressiveLoadingChip, ProjectDetail, ProjectUsageContent, ProjectsTable, REFERRAL_OFFER, RecoveryKeyDownload, RelatedDocumentsCell, ReportProblemDialog, RunStatsBadges, RunningSubagents, SEARCH_FIELD_OPTIONS, SETTINGS_SECTION_IDS, STANDARD_TIER_TAG, SessionStatusIcon, SharedProjects, SourceChips, SsoResendVerificationButton, StatusCell, StorageBreakdown, StorageItemsTable, StorageTiers, StreamedArtifact, TILE_DEFAULT, TILE_MAX, TILE_MIN, ThreadSwitcher, UserAvatar, ViewSelector, WORKSPACES_TAB_ID, WorkflowLaunchHost, WorkflowRunStatusCell, WorkflowRunThread, WorkflowStepMessage, accountSettingsSection, appearanceSettingsSection, backUpOnSignup, bookingCancelLink, buildNotificationCenterItems, buildProjectSummaries, chatSettingsSection, closeAccessRequestReview, connectedAppsSettingsSection, connectionSettingsSection, countNotificationTypes, createDocumentColumns, createEventCall, createNotificationTargetOpener, createTagColumn, deduplicateByContentHash, defaultHost, describePlan, distinctPeers, documentFamilyMeta, documentFieldContent, filesViewMode, filterNotificationCenterItems, formatStorageGb, groupFallbackName, identifyOAuthClient, isActiveDocumentStatus, joinEventMeeting, loadEventWebinar, mailSettingsSection, openMeetingLink, openSsoPopup, organisationSettingsSection, parseArbiCallUrl, parseOAuthConsentRequest, parseQuotaError, parseTypedSkill, primaryProjectWorkspace, privacySettingsSection, renderConnectedUser, renderSessionStatusIcon, requestProjectBillingFocus, resolveAttendeeUsers, resolveAttendeeUsersRemote, resolveCallPeers, resolveCallPeersRemote, resolveLaunchInputs, resolveMailbox, resolveSsoName, reviewAccessRequest, reviewProgress, shareEventCall, startMenuItem, storageSettingsSection, suppliedKinds, threadStateOf, toWorkspaceSummary, transferOutcome, updateEventWebinarRoles, usageSettingsSection, useAccessRequestUnderReview, useAddFromUrls, useAiReviewStore, useAuthPages, useAutoRefreshPendingProjects, useConnectedCalendarCalls, useConnectedNotificationBell, useConnectedShellWorkspaces, useConnectedThreadActivity, useConnectedWorkspaceList, useConnectedWorkspaceSettings, useDocumentBulkActions, useDocumentFilters, useDocumentFolders, useDocumentGridSync, useDocumentNavigation, useDocumentTable, useExportStore, useFilesDialogs, useFilesGridStates, useFilesPrefs, useFilesStore, useLaunchWorkflow, useMemberLookup, useMessengerRows, useModelPicker, useNotificationBellEntry, useOpenBillingPortal, useOpenChunk, useOpenNotificationTarget, useOpenWorkspaceActivityTarget, useOpenWorkspaceIcon, usePendingFolders, usePendingTaskThread, useProjectBillingFocus, useProjectSummaries, useProjectSummary, useReferralReward, useRenderTaskPerson, useReportProblem, useResolvedDocStatus, useSkillsEnabled, useSlashItems, useSlashSkillWorkflows, useSsoSignIn, useStartRequestedDraft, useTableViews, useTaskPeople, useTaskStart, useThreadLabels, useThreadTabs, useWorkflowDefinitions, useWorkflowLaunch, useWorkflowTasks, useWorkspaceDocTitles, viewsOfTable, webinarRolesByUser, windowLabel, withMissingTableViews, withTableView, withoutTableView, workflowRunView };
39958
+ export { AddAddonDialog, AddFromAccountsButton, AgentBarShell, AgentControlBar, AgentSteps, AnswerTable, AskAgainContext, BACKFILL_OPTIONS, BUILTIN_GLOBAL_DIALOGS, BULK_REPROCESS_LIMIT, BillingProjectEntity, CaptureBar, ChangePlanDialog, ChatAttachmentList, ConnectedAccountAccessBadge, ConnectedAccountCluster, ConnectedAccountSettings, ConnectedAddContacts, ConnectedAgentChat, ConnectedAgentChatPanel, ConnectedAgentConfigForm, ConnectedAgentCreator, ConnectedAiReview, ConnectedAppRuntime, ConnectedAppsSettings, ConnectedAuthorizeAgent, ConnectedBranchControls, ConnectedBulkTagEditor, ConnectedCalendar, ConnectedChatThread, ConnectedCitationRenderer, ConnectedCompactConversation, ConnectedConfigForm, ConnectedContactCardForm, ConnectedContactToggle, ConnectedContactsDirectory, ConnectedConversation, ConnectedConversationDocumentPicker, ConnectedConversationEmpty, ConnectedConversationStart, ConnectedDangerZone, ConnectedDeploymentStorage, ConnectedDeveloperConfig, ConnectedDriveSyncDialog, ConnectedExportDialog, ConnectedExportPanel, ConnectedFactsPage, ConnectedFieldsEditor, ConnectedFieldsManager, ConnectedFilesBulkActions, ConnectedFilesExplorer, ConnectedFilesPage, ConnectedForgotPassword, ConnectedGlobalDialogs, ConnectedGrantWorkspaceAccessDialog, ConnectedGroupMembers, ConnectedIdentityVerification, ConnectedLoginPage, ConnectedLogoutDialog, ConnectedMailAccounts, ConnectedMailComposer, ConnectedMailInviteCard, ConnectedMailMessage, ConnectedMailSettings, ConnectedMailSetup, ConnectedMailbox, ConnectedMailboxSyncDialog, ConnectedMessage, ConnectedMessageArea, ConnectedMessageList, ConnectedMessenger, ConnectedModelSelector, ConnectedMoveToFolder, ConnectedNewThreadDialog, ConnectedNotificationCenter, ConnectedNotificationPreferences, ConnectedOAuthConsentPage, ConnectedPasswordChangeDialog, ConnectedPremiumModels, ConnectedPrivacySettings, ConnectedProfileCard, ConnectedProjectEntity, ConnectedProjectPage, ConnectedProjectStorage, ConnectedProjectsPanel, ConnectedPublicBooking, ConnectedQuotaDialog, ConnectedRecentlyDeletedButton, ConnectedRecoveryKeyDialog, ConnectedReportProblem, ConnectedRequestWorkspaceAccess, ConnectedRequireVerified, ConnectedSearchPage, ConnectedSecuritySection, ConnectedSessionsRow, ConnectedSettingsPage, ConnectedSharePointAdminConsentPage, ConnectedSharedFilesPage, ConnectedSignatureVerifyPage, ConnectedSkillUpload, ConnectedSkillsLibrary, ConnectedSsoCallback, ConnectedStorageProjectCard, ConnectedStorageSettings, ConnectedTagEditorDialog, ConnectedTagEntity, ConnectedTagForm, ConnectedTagTable, ConnectedTagsPage, ConnectedTaskAccessRequest, ConnectedTaskActivityDialog, ConnectedTaskComposer, ConnectedTaskStartDialog, ConnectedThreadFollow, ConnectedThreadLauncher, ConnectedThreadTabs, ConnectedThreadTaskBar, ConnectedThreadsPreview, ConnectedTransferWatcher, ConnectedUpcomingEvents, ConnectedUpload, ConnectedUploadDropzone, ConnectedUserEntity, ConnectedWelcomeDialog, ConnectedWorkflowHistory, ConnectedWorkflowRunner, ConnectedWorkflowStart, ConnectedWorkspaceActivity, ConnectedWorkspaceDashboard, ConnectedWorkspaceEntity, ConnectedWorkspaceList, ConnectedWorkspaceMembers, ConnectedWorkspaceNotificationMenu, ConnectedWorkspaceSettings, ConnectedWorkspaceTrash, ConversationAlert, ConversationComposer2 as ConversationComposer, ConversationEntity, ConversationSendButton, ConversationStatusCell, DEFAULT_CONNECTED_SEARCH_PAGE_LABELS, DEFAULT_CONNECTED_SKILL_UPLOAD_LABELS, DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS, DEFAULT_OAUTH_PERMISSIONS, DEFAULT_PROJECTS_LIST_LABELS, DEFAULT_PROJECT_DETAILS_LABELS, DEFAULT_PROJECT_DETAIL_FIELDS, DEFAULT_PROJECT_LIST_COLUMNS, DEFAULT_PROJECT_PAGE_LABELS, DEFAULT_SEARCH_FIELDS, DEFAULT_SEARCH_ROW_LABELS, DEFAULT_SETTINGS_SECTIONS, DEFAULT_TIMELINE_LABEL_WIDTH, DEFAULT_WORKSPACE_LIST_LABELS, DeveloperFooter, DocumentFolderCell, DocumentLabelsCell, DocumentNameCell, DocumentSharedCell, DocumentStatusGlyph, DocumentSyncGlyph, DocumentUser, DocumentsFilterBarActions, DocumentsUploadButton, EmptyWorkspaceUpload, FACTS_GRID_ID, FILES_PREFS_KEY, FileTooltipContent, ImportVcfButton, ImportVcfSummary, InvoicesModal, LOOK_AGAIN_LABEL, MessageDetailsModal, MessageLiveSeconds, MicButton, NewProjectFlow, NotificationCenter, NotificationEvent, PENDING_LOOKUP_MS, PENDING_RECOVERY_KEY, PENDING_TASK_MESSAGE, PREMIUM_TIER_TAG, PROJECTS_BASE_TAB_ID, PROMPT_BINDINGS, PersistedGridView, ProgressiveLoadingChip, ProjectDetail, ProjectUsageContent, ProjectsTable, REFERRAL_OFFER, RecoveryKeyDownload, RelatedDocumentsCell, ReportProblemDialog, RunStatsBadges, RunningSubagents, SEARCH_FIELD_OPTIONS, SETTINGS_SECTION_IDS, STANDARD_TIER_TAG, SessionStatusIcon, SharedProjects, SourceChips, SsoResendVerificationButton, StatusCell, StorageBreakdown, StorageItemsTable, StorageTiers, StreamedArtifact, TILE_DEFAULT, TILE_MAX, TILE_MIN, ThreadSwitcher, UserAvatar, ViewSelector, WORKSPACES_TAB_ID, WorkflowLaunchHost, WorkflowRunStatusCell, WorkflowRunThread, WorkflowStepMessage, accountSettingsSection, appearanceSettingsSection, backUpOnSignup, bookingCancelLink, buildNotificationCenterItems, buildProjectSummaries, chatSettingsSection, closeAccessRequestReview, connectedAppsSettingsSection, connectionSettingsSection, countNotificationTypes, createDocumentColumns, createEventCall, createNotificationTargetOpener, createTagColumn, deduplicateByContentHash, defaultHost, describePlan, distinctPeers, documentFamilyMeta, documentFieldContent, filesViewMode, filterNotificationCenterItems, formatStorageGb, groupFallbackName, identifyOAuthClient, isActiveDocumentStatus, joinEventMeeting, loadEventWebinar, mailSettingsSection, openMeetingLink, openSsoPopup, organisationSettingsSection, parseArbiCallUrl, parseOAuthConsentRequest, parseQuotaError, parseTypedSkill, primaryProjectWorkspace, privacySettingsSection, renderConnectedUser, renderSessionStatusIcon, requestProjectBillingFocus, resolveAttendeeUsers, resolveAttendeeUsersRemote, resolveCallPeers, resolveCallPeersRemote, resolveLaunchInputs, resolveMailbox, resolveSsoName, reviewAccessRequest, reviewProgress, shareEventCall, startMenuItem, storageSettingsSection, suppliedKinds, threadStateOf, toWorkspaceSummary, transferOutcome, updateEventWebinarRoles, usageSettingsSection, useAccessRequestUnderReview, useAddFromUrls, useAiReviewStore, useAuthPages, useAutoRefreshPendingProjects, useConnectedCalendarCalls, useConnectedNotificationBell, useConnectedShellWorkspaces, useConnectedThreadActivity, useConnectedWorkspaceList, useConnectedWorkspaceSettings, useDocumentBulkActions, useDocumentFilters, useDocumentFolders, useDocumentGridSync, useDocumentNavigation, useDocumentTable, useExportStore, useFilesDialogs, useFilesGridStates, useFilesPrefs, useFilesStore, useLaunchWorkflow, useMemberLookup, useMessengerRows, useModelPicker, useNotificationBellEntry, useOpenBillingPortal, useOpenChunk, useOpenNotificationTarget, useOpenWorkspaceActivityTarget, useOpenWorkspaceIcon, usePendingFolders, usePendingTaskThread, useProjectBillingFocus, useProjectSummaries, useProjectSummary, useReferralReward, useRenderTaskPerson, useReportProblem, useResolvedDocStatus, useSkillsEnabled, useSlashItems, useSlashSkillWorkflows, useSsoSignIn, useStartRequestedDraft, useTableViews, useTaskPeople, useTaskStart, useThreadLabels, useThreadTabs, useWorkflowDefinitions, useWorkflowLaunch, useWorkflowTasks, useWorkspaceDocTitles, viewsOfTable, webinarRolesByUser, windowLabel, withMissingTableViews, withTableView, withoutTableView, workflowRunView };
39932
39959
  //# sourceMappingURL=index.js.map
39933
39960
  //# sourceMappingURL=index.js.map