@arbidocs/blocks 0.5.75 → 0.5.76

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 (175) hide show
  1. package/README.md +23 -0
  2. package/dist/{ConnectedDocumentViewer-U5TQ4LFJ.js → ConnectedDocumentViewer-4LRZ5N3L.js} +6 -6
  3. package/dist/{ConnectedDocumentViewer-U5TQ4LFJ.js.map → ConnectedDocumentViewer-4LRZ5N3L.js.map} +1 -1
  4. package/dist/{ConnectedDocumentViewer-ID2RG5MF.cjs → ConnectedDocumentViewer-FREQM2ES.cjs} +7 -7
  5. package/dist/{ConnectedDocumentViewer-ID2RG5MF.cjs.map → ConnectedDocumentViewer-FREQM2ES.cjs.map} +1 -1
  6. package/dist/{ConnectedNativeDocxComparison-PBMS77ZP.js → ConnectedNativeDocxComparison-P7OJ3UVK.js} +6 -6
  7. package/dist/{ConnectedNativeDocxComparison-PBMS77ZP.js.map → ConnectedNativeDocxComparison-P7OJ3UVK.js.map} +1 -1
  8. package/dist/{ConnectedNativeDocxComparison-R4OFGVHY.cjs → ConnectedNativeDocxComparison-RQIKQM5O.cjs} +7 -7
  9. package/dist/{ConnectedNativeDocxComparison-R4OFGVHY.cjs.map → ConnectedNativeDocxComparison-RQIKQM5O.cjs.map} +1 -1
  10. package/dist/{ConnectedNativeDocxEditor-27JZI2D5.js → ConnectedNativeDocxEditor-HX3FDJ2T.js} +5 -5
  11. package/dist/{ConnectedNativeDocxEditor-27JZI2D5.js.map → ConnectedNativeDocxEditor-HX3FDJ2T.js.map} +1 -1
  12. package/dist/{ConnectedNativeDocxEditor-774XRIP3.cjs → ConnectedNativeDocxEditor-XKQV7A37.cjs} +7 -7
  13. package/dist/{ConnectedNativeDocxEditor-774XRIP3.cjs.map → ConnectedNativeDocxEditor-XKQV7A37.cjs.map} +1 -1
  14. package/dist/{ConnectedStreamedWordArtifact-7TNIQTVE.cjs → ConnectedStreamedWordArtifact-CSRL4SCO.cjs} +7 -7
  15. package/dist/ConnectedStreamedWordArtifact-CSRL4SCO.cjs.map +1 -0
  16. package/dist/{ConnectedStreamedWordArtifact-XEFXYMKS.js → ConnectedStreamedWordArtifact-SSH6M5LN.js} +6 -6
  17. package/dist/ConnectedStreamedWordArtifact-SSH6M5LN.js.map +1 -0
  18. package/dist/{DocumentReviewCard-7OPL6PWG.cjs → DocumentReviewCard-3PZJPVQC.cjs} +14 -14
  19. package/dist/{DocumentReviewCard-7OPL6PWG.cjs.map → DocumentReviewCard-3PZJPVQC.cjs.map} +1 -1
  20. package/dist/{DocumentReviewCard-NDHCFYYT.js → DocumentReviewCard-KHMHG7A5.js} +9 -9
  21. package/dist/{DocumentReviewCard-NDHCFYYT.js.map → DocumentReviewCard-KHMHG7A5.js.map} +1 -1
  22. package/dist/{WorkspaceTableView-4INHJ7QK.js → WorkspaceTableView-4VMCTOFT.js} +5 -5
  23. package/dist/{WorkspaceTableView-4INHJ7QK.js.map → WorkspaceTableView-4VMCTOFT.js.map} +1 -1
  24. package/dist/{WorkspaceTableView-BTUSU3N3.cjs → WorkspaceTableView-Q44KNO3Z.cjs} +7 -7
  25. package/dist/{WorkspaceTableView-BTUSU3N3.cjs.map → WorkspaceTableView-Q44KNO3Z.cjs.map} +1 -1
  26. package/dist/agents/index.cjs +281 -281
  27. package/dist/agents/index.js +4 -4
  28. package/dist/{chunk-E3ILJRG4.cjs → chunk-2HECOUXC.cjs} +4 -3
  29. package/dist/chunk-2HECOUXC.cjs.map +1 -0
  30. package/dist/{chunk-AQPZ4QMV.cjs → chunk-3J2ASIM7.cjs} +3 -3
  31. package/dist/chunk-3J2ASIM7.cjs.map +1 -0
  32. package/dist/{chunk-QCFNPQWS.cjs → chunk-3LJUTIS6.cjs} +44 -44
  33. package/dist/{chunk-QCFNPQWS.cjs.map → chunk-3LJUTIS6.cjs.map} +1 -1
  34. package/dist/chunk-4B6HYQTW.cjs +20 -0
  35. package/dist/chunk-4B6HYQTW.cjs.map +1 -0
  36. package/dist/{chunk-4UMVAJJZ.js → chunk-6NEBHZIF.js} +4 -4
  37. package/dist/{chunk-4UMVAJJZ.js.map → chunk-6NEBHZIF.js.map} +1 -1
  38. package/dist/{chunk-IMIE5NOQ.js → chunk-7E5GV4R7.js} +4 -4
  39. package/dist/{chunk-IMIE5NOQ.js.map → chunk-7E5GV4R7.js.map} +1 -1
  40. package/dist/{chunk-LNXMSIKU.js → chunk-AWFEB4YJ.js} +8 -8
  41. package/dist/{chunk-LNXMSIKU.js.map → chunk-AWFEB4YJ.js.map} +1 -1
  42. package/dist/{chunk-JMQLTMJ7.js → chunk-B3BD5IJR.js} +16 -20
  43. package/dist/chunk-B3BD5IJR.js.map +1 -0
  44. package/dist/{chunk-5Q2U7GLI.cjs → chunk-CDW3W5U5.cjs} +4 -4
  45. package/dist/{chunk-5Q2U7GLI.cjs.map → chunk-CDW3W5U5.cjs.map} +1 -1
  46. package/dist/{chunk-SK5TP4DP.js → chunk-DBPPOJQM.js} +3 -3
  47. package/dist/{chunk-SK5TP4DP.js.map → chunk-DBPPOJQM.js.map} +1 -1
  48. package/dist/{chunk-NJ3YV3VM.cjs → chunk-DMYBHKNQ.cjs} +27 -27
  49. package/dist/{chunk-NJ3YV3VM.cjs.map → chunk-DMYBHKNQ.cjs.map} +1 -1
  50. package/dist/{chunk-563BHHHO.cjs → chunk-E6S6WHXL.cjs} +9 -9
  51. package/dist/{chunk-563BHHHO.cjs.map → chunk-E6S6WHXL.cjs.map} +1 -1
  52. package/dist/{chunk-BV34QPKE.js → chunk-EASXRDYQ.js} +3 -3
  53. package/dist/{chunk-BV34QPKE.js.map → chunk-EASXRDYQ.js.map} +1 -1
  54. package/dist/{chunk-JOFUAQTV.js → chunk-HWNVAQBX.js} +3 -3
  55. package/dist/{chunk-JOFUAQTV.js.map → chunk-HWNVAQBX.js.map} +1 -1
  56. package/dist/{chunk-PNWSEIWS.cjs → chunk-I3HK46DH.cjs} +4 -4
  57. package/dist/{chunk-PNWSEIWS.cjs.map → chunk-I3HK46DH.cjs.map} +1 -1
  58. package/dist/{chunk-GJKXYX47.js → chunk-IJ2CTMA7.js} +3 -3
  59. package/dist/{chunk-GJKXYX47.js.map → chunk-IJ2CTMA7.js.map} +1 -1
  60. package/dist/{chunk-7ZL6OVGO.cjs → chunk-IQFHOKQH.cjs} +23 -46
  61. package/dist/chunk-IQFHOKQH.cjs.map +1 -0
  62. package/dist/{chunk-7ZCM2GR2.js → chunk-IRCGXKLB.js} +3 -3
  63. package/dist/{chunk-7ZCM2GR2.js.map → chunk-IRCGXKLB.js.map} +1 -1
  64. package/dist/{chunk-G4GLDQLY.js → chunk-KG3W76BB.js} +3 -3
  65. package/dist/chunk-KG3W76BB.js.map +1 -0
  66. package/dist/{chunk-B66CICTP.cjs → chunk-KHLPBCRZ.cjs} +52 -52
  67. package/dist/{chunk-B66CICTP.cjs.map → chunk-KHLPBCRZ.cjs.map} +1 -1
  68. package/dist/{chunk-J4SEJSSV.js → chunk-KPIR4MJV.js} +6 -6
  69. package/dist/{chunk-J4SEJSSV.js.map → chunk-KPIR4MJV.js.map} +1 -1
  70. package/dist/{chunk-PA4EGGCI.js → chunk-KSHTODQZ.js} +3 -3
  71. package/dist/{chunk-PA4EGGCI.js.map → chunk-KSHTODQZ.js.map} +1 -1
  72. package/dist/{chunk-PT6D5B6L.cjs → chunk-MAUJVVFJ.cjs} +360 -410
  73. package/dist/chunk-MAUJVVFJ.cjs.map +1 -0
  74. package/dist/{chunk-MP7XCRHV.js → chunk-NRI5DKJE.js} +4 -3
  75. package/dist/chunk-NRI5DKJE.js.map +1 -0
  76. package/dist/{chunk-XXPDAENX.cjs → chunk-PGTDQBMX.cjs} +7 -7
  77. package/dist/{chunk-XXPDAENX.cjs.map → chunk-PGTDQBMX.cjs.map} +1 -1
  78. package/dist/{chunk-4JKK6S7U.cjs → chunk-S7G3A52F.cjs} +5 -5
  79. package/dist/{chunk-4JKK6S7U.cjs.map → chunk-S7G3A52F.cjs.map} +1 -1
  80. package/dist/{chunk-OUCWTKQT.js → chunk-SBFQF3BU.js} +4 -4
  81. package/dist/{chunk-OUCWTKQT.js.map → chunk-SBFQF3BU.js.map} +1 -1
  82. package/dist/{chunk-52VME6ZS.cjs → chunk-SIOBGNRY.cjs} +18 -18
  83. package/dist/{chunk-52VME6ZS.cjs.map → chunk-SIOBGNRY.cjs.map} +1 -1
  84. package/dist/chunk-SK3GBHPJ.js +15 -0
  85. package/dist/chunk-SK3GBHPJ.js.map +1 -0
  86. package/dist/{chunk-RADE22SM.cjs → chunk-T2OG3CPR.cjs} +4 -4
  87. package/dist/{chunk-RADE22SM.cjs.map → chunk-T2OG3CPR.cjs.map} +1 -1
  88. package/dist/{chunk-IGQJ6ET3.js → chunk-TWSOU6SE.js} +421 -501
  89. package/dist/chunk-TWSOU6SE.js.map +1 -0
  90. package/dist/{chunk-QRV4XYFJ.js → chunk-UCD7644N.js} +3 -3
  91. package/dist/{chunk-QRV4XYFJ.js.map → chunk-UCD7644N.js.map} +1 -1
  92. package/dist/{chunk-TQ4VGQHG.js → chunk-ULUCGL24.js} +3 -3
  93. package/dist/{chunk-TQ4VGQHG.js.map → chunk-ULUCGL24.js.map} +1 -1
  94. package/dist/{chunk-IRI6LPDX.cjs → chunk-UR4OSH2Q.cjs} +4 -4
  95. package/dist/{chunk-IRI6LPDX.cjs.map → chunk-UR4OSH2Q.cjs.map} +1 -1
  96. package/dist/{chunk-66QN6ZJR.cjs → chunk-URZAK3A3.cjs} +36 -36
  97. package/dist/{chunk-66QN6ZJR.cjs.map → chunk-URZAK3A3.cjs.map} +1 -1
  98. package/dist/{chunk-57S2PLCM.js → chunk-V2QWATXQ.js} +3 -3
  99. package/dist/{chunk-57S2PLCM.js.map → chunk-V2QWATXQ.js.map} +1 -1
  100. package/dist/{chunk-55JI2IGZ.cjs → chunk-VBLJNOVP.cjs} +4 -4
  101. package/dist/{chunk-55JI2IGZ.cjs.map → chunk-VBLJNOVP.cjs.map} +1 -1
  102. package/dist/{chunk-KFAFWPZK.cjs → chunk-VRMACPJR.cjs} +7 -7
  103. package/dist/{chunk-KFAFWPZK.cjs.map → chunk-VRMACPJR.cjs.map} +1 -1
  104. package/dist/{chunk-5Y6V7F6W.cjs → chunk-VWUNPAR2.cjs} +15 -19
  105. package/dist/chunk-VWUNPAR2.cjs.map +1 -0
  106. package/dist/{chunk-T3GTQXGP.js → chunk-W7CQ5MLR.js} +3 -3
  107. package/dist/{chunk-T3GTQXGP.js.map → chunk-W7CQ5MLR.js.map} +1 -1
  108. package/dist/{chunk-AOBNXZLS.cjs → chunk-Y3VXKSW7.cjs} +594 -674
  109. package/dist/chunk-Y3VXKSW7.cjs.map +1 -0
  110. package/dist/{chunk-RTYU6ZGO.cjs → chunk-YCABQ5W4.cjs} +4 -4
  111. package/dist/{chunk-RTYU6ZGO.cjs.map → chunk-YCABQ5W4.cjs.map} +1 -1
  112. package/dist/{chunk-EWHD3BY5.js → chunk-ZHHUEYSB.js} +25 -48
  113. package/dist/chunk-ZHHUEYSB.js.map +1 -0
  114. package/dist/{chunk-5PKIDR2Q.js → chunk-ZHJVABQ6.js} +361 -406
  115. package/dist/chunk-ZHJVABQ6.js.map +1 -0
  116. package/dist/connect/docx.cjs +11 -11
  117. package/dist/connect/docx.js +7 -7
  118. package/dist/connect/index.cjs +1448 -1367
  119. package/dist/connect/index.cjs.map +1 -1
  120. package/dist/connect/index.d.ts +2 -0
  121. package/dist/connect/index.js +545 -466
  122. package/dist/connect/index.js.map +1 -1
  123. package/dist/connect/viewer.cjs +5 -5
  124. package/dist/connect/viewer.js +4 -4
  125. package/dist/connection/account-cluster/ConnectedAccountCluster.d.ts +2 -1
  126. package/dist/connection/facts/useFactFilters.d.ts +46 -0
  127. package/dist/connection/files/fields/ConnectedTagForm.d.ts +1 -1
  128. package/dist/connection/report-problem/ReportProblemDialog.d.ts +10 -8
  129. package/dist/connection/report-problem/useReportProblem.d.ts +2 -6
  130. package/dist/connection/tags/ConnectedTagTable.d.ts +1 -1
  131. package/dist/connection/tags/ConnectedTagsPage.d.ts +3 -1
  132. package/dist/connection/tags/TagsPageSections.d.ts +5 -3
  133. package/dist/connection/tags/tagged-content.d.ts +10 -0
  134. package/dist/connection/threads/useThreadTagFilter.d.ts +10 -0
  135. package/dist/connection/tips/ConnectedTipBar.d.ts +2 -1
  136. package/dist/connection/tips/useContextualHints.d.ts +6 -1
  137. package/dist/embed/index.cjs +13 -12
  138. package/dist/embed/index.js +8 -7
  139. package/dist/facts/index.cjs +45 -45
  140. package/dist/facts/index.js +2 -2
  141. package/dist/files/index.cjs +226 -226
  142. package/dist/files/index.js +2 -2
  143. package/dist/index.cjs +423 -367
  144. package/dist/index.cjs.map +1 -1
  145. package/dist/index.js +76 -16
  146. package/dist/index.js.map +1 -1
  147. package/dist/settings/FilterChip.d.ts +2 -1
  148. package/dist/settings/TriStateFilterMenu.d.ts +1 -0
  149. package/dist/settings/index.cjs +158 -158
  150. package/dist/settings/index.js +2 -2
  151. package/dist/shell/index.cjs +14 -14
  152. package/dist/shell/index.js +1 -1
  153. package/dist/styles.css +1 -1
  154. package/dist/tags/TagDetail.d.ts +2 -2
  155. package/dist/tags/TagTable.d.ts +17 -3
  156. package/dist/tags/index.d.ts +1 -1
  157. package/dist/workflow-canvas/index.cjs +29 -29
  158. package/dist/workflow-canvas/index.js +12 -12
  159. package/node_modules/@arbidocs/coedit/package.json +1 -1
  160. package/package.json +5 -5
  161. package/dist/ConnectedStreamedWordArtifact-7TNIQTVE.cjs.map +0 -1
  162. package/dist/ConnectedStreamedWordArtifact-XEFXYMKS.js.map +0 -1
  163. package/dist/chunk-5PKIDR2Q.js.map +0 -1
  164. package/dist/chunk-5Y6V7F6W.cjs.map +0 -1
  165. package/dist/chunk-7ZL6OVGO.cjs.map +0 -1
  166. package/dist/chunk-AOBNXZLS.cjs.map +0 -1
  167. package/dist/chunk-AQPZ4QMV.cjs.map +0 -1
  168. package/dist/chunk-E3ILJRG4.cjs.map +0 -1
  169. package/dist/chunk-EWHD3BY5.js.map +0 -1
  170. package/dist/chunk-G4GLDQLY.js.map +0 -1
  171. package/dist/chunk-IGQJ6ET3.js.map +0 -1
  172. package/dist/chunk-JMQLTMJ7.js.map +0 -1
  173. package/dist/chunk-MP7XCRHV.js.map +0 -1
  174. package/dist/chunk-PT6D5B6L.cjs.map +0 -1
  175. package/dist/connection/tags/TagPlacement.d.ts +0 -16
@@ -1,32 +1,32 @@
1
1
  "use client";
2
- import { DEFAULT_SPEND_CAP_PENCE, useBillingSupport, findProPrices, packPrice, calcSavingsPercent, parseBudgetPounds, formatMoney, isProProject, useSelfExtId, addonCharge, formatPeriodEnd, quoteParts, taxDetail, money2, ANNUAL_PREMIUM_AI_NOTE, totalWithTaxWord, planBadgeView, isAddonBudgetZero, useRewardBalance, getQuotaItems, aiUsageResetTimestamp, formatResetDate, ZERO_BUDGET_MESSAGE, CAP_REACHED_MESSAGE, quoteError, POSTCODE_COUNTRIES, addonPrice, checkoutBlockPriceText, ADDON_BLOCK_AI_GBP, STORAGE_BLOCK_GB, quoteTotalLine, PRO_PACKS, apiErrorDetail, checkoutItemsLabel, planNameForPacks, proTierName, projectGroupBilling, SUGGESTED_DAILY_CAP_PER_USER, TAX_LOCATION_INVALID, FREE_COLLABORATORS, FREE_AI_GBP, FREE_STORAGE_MB, MAX_CHECKOUT_BLOCKS, PRO_AI_GBP, PRO_STORAGE_GB, plusVat, planPreviewLines, PAY_TODAY_UNPRICED, PLAN_CHOICE_PACKS, reduceBounds, splitBlocks, autoRoom, nextRemovedBlockSize, stepLabel, addStepCaption, blocksLabel, MIN_AUTO_TOPUP_THRESHOLD_GBP, USAGE_CAP_LABEL, USAGE_CAP_HELP, nextPeriodBody, addonSettingsBody, budgetSavedMessage } from '../chunk-QRV4XYFJ.js';
3
- export { CAP_REACHED_MESSAGE, ZERO_BUDGET_MESSAGE, aiUsageResetTimestamp, formatMoney, formatResetDate, getQuotaItems, isAddonBudgetZero, isProProject, planBadgeView, planName, projectGroupBilling, useBillingSupport, useRewardBalance } from '../chunk-QRV4XYFJ.js';
4
- import { ConnectedTagEntity, useMemberLookup } from '../chunk-4UMVAJJZ.js';
5
- export { ConnectedTagEntity, documentFieldContent, useMemberLookup } from '../chunk-4UMVAJJZ.js';
2
+ import { DEFAULT_SPEND_CAP_PENCE, useBillingSupport, findProPrices, packPrice, calcSavingsPercent, parseBudgetPounds, formatMoney, isProProject, useSelfExtId, addonCharge, formatPeriodEnd, quoteParts, taxDetail, money2, ANNUAL_PREMIUM_AI_NOTE, totalWithTaxWord, planBadgeView, isAddonBudgetZero, useRewardBalance, getQuotaItems, aiUsageResetTimestamp, formatResetDate, ZERO_BUDGET_MESSAGE, CAP_REACHED_MESSAGE, quoteError, POSTCODE_COUNTRIES, addonPrice, checkoutBlockPriceText, ADDON_BLOCK_AI_GBP, STORAGE_BLOCK_GB, quoteTotalLine, PRO_PACKS, apiErrorDetail, checkoutItemsLabel, planNameForPacks, proTierName, projectGroupBilling, SUGGESTED_DAILY_CAP_PER_USER, TAX_LOCATION_INVALID, FREE_COLLABORATORS, FREE_AI_GBP, FREE_STORAGE_MB, MAX_CHECKOUT_BLOCKS, PRO_AI_GBP, PRO_STORAGE_GB, plusVat, planPreviewLines, PAY_TODAY_UNPRICED, PLAN_CHOICE_PACKS, reduceBounds, splitBlocks, autoRoom, nextRemovedBlockSize, stepLabel, addStepCaption, blocksLabel, MIN_AUTO_TOPUP_THRESHOLD_GBP, USAGE_CAP_LABEL, USAGE_CAP_HELP, nextPeriodBody, addonSettingsBody, budgetSavedMessage } from '../chunk-UCD7644N.js';
3
+ export { CAP_REACHED_MESSAGE, ZERO_BUDGET_MESSAGE, aiUsageResetTimestamp, formatMoney, formatResetDate, getQuotaItems, isAddonBudgetZero, isProProject, planBadgeView, planName, projectGroupBilling, useBillingSupport, useRewardBalance } from '../chunk-UCD7644N.js';
4
+ import { ConnectedTagEntity, useMemberLookup } from '../chunk-6NEBHZIF.js';
5
+ export { ConnectedTagEntity, documentFieldContent, useMemberLookup } from '../chunk-6NEBHZIF.js';
6
6
  export { ConnectedAssistantDock, redlineStats, textToArtifact, toRedlineMarkdown, useConnectedAiTask, useConnectedChat, useSemanticSearch, useWorkspaceDocs } from '../chunk-63BOGQRQ.js';
7
- import { ConnectedTaskComposer, useProjectSummary, primaryProjectWorkspace, useWorkflowTasks, useWorkflowDefinitions, useProjectSummaries, ConnectedThreadTaskBar, useTaskPeople, ConnectedTaskActivityDialog } from '../chunk-LNXMSIKU.js';
8
- export { ConnectedTaskActivityDialog, ConnectedTaskComposer, ConnectedThreadTaskBar, ConnectedWorkflowHistory, ConnectedWorkflowRunner, DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS, DEFAULT_WORKFLOW_RUN_PAGE_LABELS, WorkflowRunThread, WorkflowRunWorkspaceChangedError, buildProjectSummaries, primaryProjectWorkspace, useEnsureRequiredLabels, useProjectSummaries, useProjectSummary, useRenderTaskPerson, useRequiredLabels, useSkillsEnabled, useTaskPeople, useWorkflowDefinitions, useWorkflowTasks, useWorkflowsPageState, workflowRunView } from '../chunk-LNXMSIKU.js';
9
- import { usePendingFolders, useFilesStore, useFilesPrefs, useAiReviewStore, useFilesGridStates, filesViewMode, FILES_PREFS_KEY, useFilesDialogs } from '../chunk-GJKXYX47.js';
10
- export { FILES_PREFS_KEY, filesViewMode, useAiReviewStore, useFilesDialogs, useFilesGridStates, useFilesPrefs, useFilesStore, usePendingFolders } from '../chunk-GJKXYX47.js';
7
+ import { ConnectedTaskComposer, useProjectSummary, primaryProjectWorkspace, useWorkflowTasks, useWorkflowDefinitions, useProjectSummaries, ConnectedThreadTaskBar, useTaskPeople, ConnectedTaskActivityDialog } from '../chunk-AWFEB4YJ.js';
8
+ export { ConnectedTaskActivityDialog, ConnectedTaskComposer, ConnectedThreadTaskBar, ConnectedWorkflowHistory, ConnectedWorkflowRunner, DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS, DEFAULT_WORKFLOW_RUN_PAGE_LABELS, WorkflowRunThread, WorkflowRunWorkspaceChangedError, buildProjectSummaries, primaryProjectWorkspace, useEnsureRequiredLabels, useProjectSummaries, useProjectSummary, useRenderTaskPerson, useRequiredLabels, useSkillsEnabled, useTaskPeople, useWorkflowDefinitions, useWorkflowTasks, useWorkflowsPageState, workflowRunView } from '../chunk-AWFEB4YJ.js';
9
+ import { usePendingFolders, useFilesStore, useFilesPrefs, useAiReviewStore, useFilesGridStates, filesViewMode, FILES_PREFS_KEY, useFilesDialogs } from '../chunk-IJ2CTMA7.js';
10
+ export { FILES_PREFS_KEY, filesViewMode, useAiReviewStore, useFilesDialogs, useFilesGridStates, useFilesPrefs, useFilesStore, usePendingFolders } from '../chunk-IJ2CTMA7.js';
11
11
  import { getRoleBadgeClass, formatRole, getRoleDescription, WorkspaceTypeBadge, PageLoading, WorkspacePageFrame, WorkspaceIdentityPanel, WorkspaceProjectSlot, WorkspaceAudienceLine, CommonWorkspaceToggle, ExpandableSection, LeaveFooter, WorkspaceList, WorkspaceGroup, WorkspaceCard } from '../chunk-Z7RX3X4E.js';
12
12
  import { ProjectPicker, ProjectOptionRow, WorkspaceFormModal, ModalActionRow, FormErrorBanner, WorkspaceFieldsView, FormActions } from '../chunk-RAUSAVC7.js';
13
13
  import { isAgentAccount, workspaceConversationCount, workspaceDocumentCount, isListedWorkspace, WORKSPACE_CATEGORY_FILTERS, projectFilterId, workspaceFilterAttributes, groupWorkspacesByProject, byRecentUpdate } from '../chunk-57CG33XJ.js';
14
14
  import { SharedFileView, SharedFilesInbox } from '../chunk-4ML5AMMO.js';
15
- import { ConnectedProfileCard, ConnectedSecuritySection, ConnectedIdentityVerification, ConnectedSessionsRow, ConnectedDangerZone, ConnectedLogoutDialog, ConnectedNotificationPreferences, ConnectedUserEntity, useAuthPages, ConnectedModelSelector, AgentSteps, MessageLiveSeconds, useSsoSignIn, resolveSsoName, completeSsoSignIn, ConnectedForgotPassword, ConnectedPasswordChangeDialog, ssoAccountStatus, AskAgainContext, ConnectedMessageArea, ConversationComposer } from '../chunk-IGQJ6ET3.js';
16
- export { AgentSteps, AnswerTable, ArbiChat, AskAgainContext, ConnectedBranchControls, ConnectedCitationRenderer, ConnectedCompactConversation, ConnectedConversationDocumentPicker, ConnectedDangerZone, ConnectedEmbeddedChat, ConnectedForgotPassword, ConnectedIdentityVerification, ConnectedLoginPage, ConnectedLogoutDialog, ConnectedMessage, ConnectedMessageArea, ConnectedMessageList, ConnectedModelSelector, ConnectedNotificationPreferences, ConnectedPasswordChangeDialog, ConnectedProfileCard, ConnectedRequireVerified, ConnectedSecuritySection, ConnectedSessionsRow, ConnectedThreadsPreview, ConnectedUserEntity, ConversationComposer, EmbeddedChatPanel, MessageDetailsModal, MessageLiveSeconds, PENDING_RECOVERY_KEY, PREMIUM_TIER_TAG, RunningSubagents, STANDARD_TIER_TAG, SessionStatusIcon, SourceChips, WorkflowStepMessage, backUpOnSignup, defaultHost, renderConnectedUser, renderSessionStatusIcon, resolveSsoName, useAuthPages, useModelPicker, useOpenChunk, useOpenWorkspaceIcon, useSlashItems, useSsoSignIn, useWorkspaceDocTitles } from '../chunk-IGQJ6ET3.js';
17
- import { useSelectWorkspace } from '../chunk-SK5TP4DP.js';
18
- export { useConnectedThreadActivity } from '../chunk-SK5TP4DP.js';
19
- import { FolderTile, FileTile, DocumentUser, UserAvatar, useDocumentFolders, DocumentNameCell, DocumentSharedCell, DocumentLabelsCell, RelatedDocumentsCell, DocumentFolderCell, StatusCell } from '../chunk-OUCWTKQT.js';
20
- export { ConnectedPendingSyncDialog, DocumentFolderCell, DocumentLabelsCell, DocumentNameCell, DocumentSharedCell, DocumentStatusGlyph, DocumentSyncGlyph, DocumentUser, FileTooltipContent, RelatedDocumentsCell, StatusCell, UserAvatar, isActiveDocumentStatus, openPendingSyncDialog, parseQuotaError, startMenuItem, useDocumentFolders, useResolvedDocStatus } from '../chunk-OUCWTKQT.js';
21
- import { FactSearchBar, FactSearchTotals, FactSearchPending, FactSearchNoMatches, FactSearchResult, FactsToolbar, FactsFieldsButton, FactComposer, FactDateInput, FactSourcesRow, FactsLoading, FactsLoadError, FactsEmptyState, FactsCalendar, FactsGanttPane, FactsBulkBar, FactSourceGroup, FactFieldRow, FactLabelsCell, enableFactTableColumnResize, createFactColumns, FactRowActions, sourceDocCount, DEFAULT_FACT_COLUMN_LABELS } from '../chunk-EWHD3BY5.js';
15
+ import { ConnectedProfileCard, ConnectedSecuritySection, ConnectedIdentityVerification, ConnectedSessionsRow, ConnectedDangerZone, ConnectedLogoutDialog, ConnectedNotificationPreferences, ConnectedUserEntity, useAuthPages, ConnectedModelSelector, ConversationComposer, AgentSteps, MessageLiveSeconds, useOpenChunk, useWorkspaceDocTitles, useSsoSignIn, resolveSsoName, completeSsoSignIn, ConnectedForgotPassword, ConnectedPasswordChangeDialog, useContextualHints, ssoAccountStatus, AskAgainContext, ConnectedMessageArea } from '../chunk-TWSOU6SE.js';
16
+ export { AgentSteps, AnswerTable, ArbiChat, AskAgainContext, ConnectedBranchControls, ConnectedCitationRenderer, ConnectedCompactConversation, ConnectedConversationDocumentPicker, ConnectedDangerZone, ConnectedEmbeddedChat, ConnectedForgotPassword, ConnectedIdentityVerification, ConnectedLoginPage, ConnectedLogoutDialog, ConnectedMessage, ConnectedMessageArea, ConnectedMessageList, ConnectedModelSelector, ConnectedNotificationPreferences, ConnectedPasswordChangeDialog, ConnectedProfileCard, ConnectedRequireVerified, ConnectedSecuritySection, ConnectedSessionsRow, ConnectedThreadsPreview, ConnectedUserEntity, ConversationComposer, EmbeddedChatPanel, MessageDetailsModal, MessageLiveSeconds, PENDING_RECOVERY_KEY, PREMIUM_TIER_TAG, RunningSubagents, STANDARD_TIER_TAG, SessionStatusIcon, WorkflowStepMessage, backUpOnSignup, defaultHost, renderConnectedUser, renderSessionStatusIcon, resolveSsoName, useAuthPages, useContextualHints, useModelPicker, useOpenChunk, useOpenWorkspaceIcon, useSlashItems, useSsoSignIn, useWorkspaceDocTitles } from '../chunk-TWSOU6SE.js';
17
+ import { useSelectWorkspace } from '../chunk-DBPPOJQM.js';
18
+ export { useConnectedThreadActivity } from '../chunk-DBPPOJQM.js';
19
+ import { FolderTile, FileTile, DocumentUser, UserAvatar, useDocumentFolders, DocumentNameCell, DocumentSharedCell, DocumentLabelsCell, RelatedDocumentsCell, DocumentFolderCell, StatusCell } from '../chunk-SBFQF3BU.js';
20
+ export { ConnectedPendingSyncDialog, DocumentFolderCell, DocumentLabelsCell, DocumentNameCell, DocumentSharedCell, DocumentStatusGlyph, DocumentSyncGlyph, DocumentUser, FileTooltipContent, RelatedDocumentsCell, StatusCell, UserAvatar, isActiveDocumentStatus, openPendingSyncDialog, parseQuotaError, startMenuItem, useDocumentFolders, useResolvedDocStatus } from '../chunk-SBFQF3BU.js';
21
+ import { FactSearchBar, FactSearchTotals, FactSearchPending, FactSearchNoMatches, FactSearchResult, FactsToolbar, FactsFieldsButton, FactComposer, FactDateInput, FactSourcesRow, FactsLoading, FactsLoadError, FactsEmptyState, FactsCalendar, FactsGanttPane, FactsBulkBar, FactSourceGroup, FactFieldRow, FactLabelsCell, enableFactTableColumnResize, createFactColumns, FactRowActions, sourceDocCount, DEFAULT_FACT_COLUMN_LABELS } from '../chunk-ZHHUEYSB.js';
22
22
  import { docIdsOf, toFactCitations, EMPTY_FACT_DATE_FIELDS, withoutChunk, factDateSpanToFields, citedVersionRef, withChunk, factDateFieldsToSpan, withoutDoc, withDoc } from '../chunk-KGUSKGZE.js';
23
23
  import { HomeLoadError, HomeFrame, HomeMain, HomeCenteredScroll, HomeCenteredColumn, DashboardRoot, DashboardBand, DashboardColumns, RecentList, DashboardAction, FactsStrip, GettingStartedStrip, FactMark, CreateTile } from '../chunk-Z5JLS5DX.js';
24
24
  import { ProjectBandTitle, PlainBandTitle } from '../chunk-RQKWYKZY.js';
25
25
  import '../chunk-5TDGVOR5.js';
26
26
  import '../chunk-XRL4R2TT.js';
27
- import { DraggableHeader, PremiumModelsFrame, ConnectionsLoading, ConnectionsError, ConnectionsEmpty, UsageToggle, SettingsPage, UsageSummary, AppearanceSettings, SettingsSwitchRow, SettingsSwitchGroup, callsSwitchState, UsageLineChart, formatSessionTtl, EmailWorkspaceDialogView, PlanStack, PlanNotice, PlanPickerCard, PlanPickerHeader, PricingToggle, PromoCodeInput, PlanActionButton, 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, QuotaExceededDialogView, InviteContactsDialog, WelcomeDialog, applyTriStateFilters, PanelFrame, PanelAddButton, PanelFrameBody, PanelScroll, PanelActionsRow, applyInvertedIndexFilter, ConfigSwitcherBar, PanelNote, FloatingPanel, ProjectRow, QuotaMeter, FilterChip, buildInvertedIndex, serverConnectionView, ServerConnectionButton, ModelProviderLabel, PlanInfoPopover, PlanCardGrid, ReferralRewardSummary, CheckoutDialogFrame, SyncFolderRow, SyncFolderStatus, PlanTierOption, PlanActionRow, SubscriptionStatusView, DailyCapField, ConnectionCard, ReferralRewardNote } from '../chunk-MP7XCRHV.js';
28
- import { useConnectedWorkspaceRole, ConnectedWorkflowLauncher, ConnectedWorkflowsTable, toWorkflowFieldDocument } from '../chunk-BV34QPKE.js';
29
- export { ConnectedWorkflowDocumentsField, ConnectedWorkflowLauncher, ConnectedWorkflowsTable, DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS, toWorkflowFieldDocument, useConnectedAgentOptions, useConnectedWorkflowScopeSource, useConnectedWorkspaceRole, useDocxCommentTarget, useNativeDocxSupport } from '../chunk-BV34QPKE.js';
27
+ import { DraggableHeader, PremiumModelsFrame, ConnectionsLoading, ConnectionsError, ConnectionsEmpty, UsageToggle, SettingsPage, UsageSummary, AppearanceSettings, SettingsSwitchRow, SettingsSwitchGroup, callsSwitchState, UsageLineChart, formatSessionTtl, EmailWorkspaceDialogView, PlanStack, PlanNotice, PlanPickerCard, PlanPickerHeader, PricingToggle, PromoCodeInput, PlanActionButton, 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, QuotaExceededDialogView, InviteContactsDialog, WelcomeDialog, applyTriStateFilters, PanelFrame, PanelAddButton, PanelFrameBody, PanelScroll, PanelActionsRow, applyInvertedIndexFilter, ConfigSwitcherBar, PanelNote, FloatingPanel, ProjectRow, QuotaMeter, FilterChip, buildInvertedIndex, serverConnectionView, ServerConnectionButton, ModelProviderLabel, PlanInfoPopover, PlanCardGrid, ReferralRewardSummary, CheckoutDialogFrame, SyncFolderRow, SyncFolderStatus, PlanTierOption, PlanActionRow, SubscriptionStatusView, DailyCapField, ConnectionCard, ReferralRewardNote } from '../chunk-NRI5DKJE.js';
28
+ import { useConnectedWorkspaceRole, ConnectedWorkflowLauncher, ConnectedWorkflowsTable, toWorkflowFieldDocument } from '../chunk-EASXRDYQ.js';
29
+ export { ConnectedWorkflowDocumentsField, ConnectedWorkflowLauncher, ConnectedWorkflowsTable, DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS, toWorkflowFieldDocument, useConnectedAgentOptions, useConnectedWorkflowScopeSource, useConnectedWorkspaceRole, useDocxCommentTarget, useNativeDocxSupport } from '../chunk-EASXRDYQ.js';
30
30
  import { groupCandidates } from '../chunk-MTSKK3BN.js';
31
31
  import { BUILTIN_TEMPLATE_NAME, builtinHouseTemplate } from '../chunk-R4SUGJVR.js';
32
32
  import { useOpenWorkflow } from '../chunk-DSTM7SY3.js';
@@ -36,7 +36,7 @@ import { DEFAULT_DOCUMENT_VIEWER_TABS } from '../chunk-V4CKYOQW.js';
36
36
  export { ConnectedDocumentToolsProvider, DEFAULT_ASK_SUGGESTIONS, DEFAULT_DOCUMENT_VIEWER_LABELS, DEFAULT_DOCUMENT_VIEWER_TABS, useDocumentViewerSupport, useViewerDraftDocument, useViewerIsDetached, useViewerPassageCitation, useViewerStreamingDocument } from '../chunk-V4CKYOQW.js';
37
37
  import { DocumentWorkspaceContext, ConnectedMarkdown, useDocumentWorkspace, WorkspaceDocumentReference } from '../chunk-QZ5FDIT6.js';
38
38
  export { ConnectedMarkdown, DocumentChip, DocumentWorkspaceContext, ExternalLink, InternalDocLink, MailChip, MermaidDiagram, WorkspaceDocumentReference, useDocumentWorkspace } from '../chunk-QZ5FDIT6.js';
39
- import { FilterButton, searchExplorerDocuments, buildExplorerEntries, collectFolderDocs, joinFolderPath, getExplorerDisplayName, RECENTLY_DELETED_HINT, RECENTLY_DELETED_HINT_PLURAL, canDeleteDocument, ExplorerFrame, ExplorerStage, ExplorerScroller, ExplorerLoadingTiles, ExplorerEmpty, ExplorerMarquee, ExplorerDropOverlay, ExplorerDragPreview, CheckboxCell, TagColumnHeader, 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, FolderCommandList, sortFields, filterFieldsByName, fieldsApplyBarCopy, FieldsEditorRoot, FieldsEditorToolbar, FieldsEditorList, FieldRow, FieldsEmptyState, fieldsEmptyText, FieldsApplyBar, FieldsManagerDefinition, FieldsManagerBody, FieldsManagerTitle, BulkTagEditorDialog, BulkReplaceDialog, DOCUMENTS_ROW_HEIGHT_INITIAL, 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, UploadFooterBar, ShareToggle, ImportPanel, ImportFamilySection, ImportList, ImportRow, TaskSection, UploadDropArea, canChangeVisibility, ImportSummary, ImportAside, FolderSummary, ImportProgress, ImportRunActions, ImportHint, ImportActionButton, UploadUrlButton } from '../chunk-JOFUAQTV.js';
39
+ import { FilterButton, searchExplorerDocuments, buildExplorerEntries, collectFolderDocs, joinFolderPath, getExplorerDisplayName, RECENTLY_DELETED_HINT, RECENTLY_DELETED_HINT_PLURAL, canDeleteDocument, ExplorerFrame, ExplorerStage, ExplorerScroller, ExplorerLoadingTiles, ExplorerEmpty, ExplorerMarquee, ExplorerDropOverlay, ExplorerDragPreview, CheckboxCell, TagColumnHeader, 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, FolderCommandList, sortFields, filterFieldsByName, fieldsApplyBarCopy, FieldsEditorRoot, FieldsEditorToolbar, FieldsEditorList, FieldRow, FieldsEmptyState, fieldsEmptyText, FieldsApplyBar, FieldsManagerDefinition, FieldsManagerBody, FieldsManagerTitle, BulkTagEditorDialog, BulkReplaceDialog, DOCUMENTS_ROW_HEIGHT_INITIAL, 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, UploadFooterBar, ShareToggle, ImportPanel, ImportFamilySection, ImportList, ImportRow, TaskSection, UploadDropArea, canChangeVisibility, ImportSummary, ImportAside, FolderSummary, ImportProgress, ImportRunActions, ImportHint, ImportActionButton, UploadUrlButton } from '../chunk-HWNVAQBX.js';
40
40
  import { ViewToggle, DocumentViewToggle } from '../chunk-OHRWYRTH.js';
41
41
  import '../chunk-TSH726KP.js';
42
42
  import { ModalBreadcrumbHeader } from '../chunk-RC6VTY2H.js';
@@ -47,11 +47,12 @@ import '../chunk-2YOVK524.js';
47
47
  import '../chunk-6HKLTYNN.js';
48
48
  import { SettingsPanel, SettingsDisclosure, SettingsSection, SettingsCard, SettingsRow } from '../chunk-PBQNZWSX.js';
49
49
  import '../chunk-IA5BYEO7.js';
50
- import { WorkspaceActivityList, TagTable, TagPicker, tagsPageNouns, entitiesPhrase, ExtractEntitiesDialog, GridRowNavigator, LoadingIndicator, EntityIdentityBar, IDENTITY_NAME_MAX_LENGTH, documentCount, TIPS_VISIBILITY_OVERRIDE, useTipsPlacement, WELCOME_REPLAY_VIEW, tagTableDocx, setHintsSessionOverride, tagTableLabels, TagDetail, tagDetailLabels, tagNoteLabel, tagKindDescription, Toolbar, glossaryEntries, glossaryDocx, glossaryMarkdown, glossaryFileName } from '../chunk-5PKIDR2Q.js';
50
+ import { WorkspaceActivityList, TagTable, tagsPageNouns, entitiesPhrase, ExtractEntitiesDialog, GridRowNavigator, LoadingIndicator, EntityIdentityBar, IDENTITY_NAME_MAX_LENGTH, documentCount, useTipsPlacement, tagTableDocx, tagTableLabels, TagDetail, tagDetailLabels, tagNoteLabel, tagKindDescription, Toolbar, glossaryEntries, glossaryDocx, glossaryMarkdown, glossaryFileName } from '../chunk-ZHJVABQ6.js';
51
51
  import { ThemeEditor } from '../chunk-TOE3LBYG.js';
52
52
  import '../chunk-J77BACGX.js';
53
53
  import { WorkspaceNotificationMenu, ThreadFollowMenuItem, ThreadFollowButton } from '../chunk-66NMPTOH.js';
54
54
  import { MemberAvatarStack } from '../chunk-FUPAGAZB.js';
55
+ import { WELCOME_REPLAY_VIEW } from '../chunk-SK3GBHPJ.js';
55
56
  import { EntityTooltip, EntityTooltipHeader, EntityTooltipStats, EntityTooltipHint } from '../chunk-3UIJLUXN.js';
56
57
  import '../chunk-7RITEVXA.js';
57
58
  import { TimelineZoomControl } from '../chunk-4EZVCGRL.js';
@@ -65,19 +66,19 @@ import '../chunk-EPGMOOM7.js';
65
66
  import '../chunk-I6A5CHQV.js';
66
67
  import { ChatPage, ConversationEmpty, MessageAlert } from '../chunk-LCL4DBCQ.js';
67
68
  import { groupOutputsByConversation, flashMessage } from '../chunk-V2P2EJBA.js';
68
- import { ComposerSend, ComposerVoiceButton, MessageAuthor, ComposerDock, ComposerContainer, ScrollToBottom } from '../chunk-AAGR47JS.js';
69
+ import { ComposerSend, ComposerVoiceButton, ComposerDock, ComposerContainer, MessageSources, MessageAuthor, ScrollToBottom } from '../chunk-AAGR47JS.js';
69
70
  import { PlainMailBodyEditor, MemberNameCell, MemberMutedText, MemberRoleCell, MemberListLoading, MemberBulkActions, RecipientPicker, buildMailFolderTree, MailFolderTree, AddContactsResults, AddContactsForm, emailTokens, EMPTY_CONTACT_FORM, contactToForm, contactStatusLabel, summarizeImport, matchesContact, contactName, primaryEmail, ActionMenu, draftMailCompose, replyMailCompose, emptyMailCompose, MailGrid, MailMessageView, DmThreadFrame, DmAccessRequestBanner, DmGrantAccessDialogView, DmInviteAvatar, planContactInvites, MAX_INVITE_EMAILS, summarizeUnsentInvites, applyContactInviteResults, summarizeContactInvites, failContactInvites, validateContactForm, inviteEmail, formToContactCard, RoleSelect, DEFAULT_CONTACT_OUTCOME_LABELS, contactOutcomeMessage, MailDocumentPicker, parseMailRecipients } from '../chunk-4PYBPWGK.js';
70
71
  import '../chunk-NBV56SGU.js';
71
72
  import { isDefinitionsLabel, DOCX_MIME_TYPE, toDefinitionSource, definitionLabels } from '../chunk-IYUKJESY.js';
72
73
  import { decodeWhitespaceEntities } from '../chunk-AF6RDAJF.js';
73
74
  import { DraftingDocChip } from '../chunk-67TZA3L7.js';
74
75
  import { ErrorBoundary } from '../chunk-3EWS6ECM.js';
75
- import { LabelMultiSelectView } from '../chunk-JMQLTMJ7.js';
76
- import { ActionCluster, usePanelHostSupport, PanelPortal, useSidebarController, DockZone, TipCard, PanelModeSwitcher } from '../chunk-IMIE5NOQ.js';
76
+ import { LabelMultiSelectView } from '../chunk-B3BD5IJR.js';
77
+ import { ActionCluster, usePanelHostSupport, PanelPortal, useSidebarController, DockZone, TipCard, PanelModeSwitcher } from '../chunk-7E5GV4R7.js';
77
78
  import { workspaceKindColor, WorkspaceIdentity, prefetchChunk } from '../chunk-KYLNAAYI.js';
78
79
  import { SidebarBadgeRow } from '../chunk-YUAPBWLL.js';
79
80
  import '../chunk-DDCMLHXF.js';
80
- import '../chunk-5B74B62N.js';
81
+ import { useCompactChat } from '../chunk-5B74B62N.js';
81
82
  import { PageContainer, Shell } from '../chunk-D6T3SLUD.js';
82
83
  import '../chunk-GHEQR4VN.js';
83
84
  import '../chunk-UH7LTR2B.js';
@@ -87,16 +88,16 @@ import { tid } from '../chunk-AMTWY22T.js';
87
88
  import { PageHeader } from '../chunk-XCVLUXFP.js';
88
89
  import '../chunk-WKYKDTNM.js';
89
90
  import '../chunk-ZCOVDK2E.js';
90
- import { buildLibrarySkills, filterLibrarySkills, SKILL_SOURCE_LABELS, SKILL_TYPE_LABELS, SkillViewToggle, SkillFilterChips, SkillTile, SkillGenerateForm, SkillLibraryDetail, parseSkillFrontmatter, SKILL_MAIN_FILENAME, SkillEditForm, BUILTIN_SKILLS, DEFAULT_AGENT_CAPABILITIES, stripPersonaPreamble, AgentCreator, DEFAULT_AGENT_TYPES, DEFAULT_AGENT_TEMPLATES, AgentAvatarField, isValidAgentName, AgentConnectInstructions, groupAgentTasks, AgentGallery, goalProgress, AgentCard, ConsentPage, ConsentCard, ConsentHeader, ConsentNotice, ConsentSection, ConsentBulletList, ConsentStrong, ConsentText, ConfigForm, AgentEditView, AgentMainView, AgentCreatedView, AgentCreateView, GENERATE_IMAGE_ID, IMAGE_ASPECT_AUTO, deriveAnnotationName, ANNOTATE_ID, recordWorkflowUse, renderWorkflowIcon, openWorkflowLaunch, useWorkflowLaunchRequest, WorkflowRunStatus, ThreadStatusLine, TaskStartDialog, REMIND_TASK_ID, ThreadLauncher, moveTargets, NewThreadDialog, AgentBar, AgentBarNotes, AgentBarQueuedNote, AgentBarProbeAnswer, ConversationListView, ConversationTurnSpeaker, ConsentMessage, CopyableUrl, ConsentPermissionList, ConsentActions, ConsentFootnote, AgentBarStatus, AgentBarIconButton, AgentBarMenu, composePersona, newThreadToRequest, importSkillFile, importSkillFromUrl, skillSlug, serializeSkill, STATUS_LABELS, asTaskStatus, UploadTaskList, filterConversationRows, TaskEmptyState, TaskTable, workflowToSkillMarkdown, closeWorkflowLaunch, defaultTaskComposerValues } from '../chunk-57S2PLCM.js';
91
+ import { buildLibrarySkills, filterLibrarySkills, SKILL_SOURCE_LABELS, SKILL_TYPE_LABELS, SkillViewToggle, SkillFilterChips, SkillTile, SkillGenerateForm, SkillLibraryDetail, parseSkillFrontmatter, SKILL_MAIN_FILENAME, SkillEditForm, BUILTIN_SKILLS, DEFAULT_AGENT_CAPABILITIES, stripPersonaPreamble, AgentCreator, DEFAULT_AGENT_TYPES, DEFAULT_AGENT_TEMPLATES, AgentAvatarField, isValidAgentName, AgentConnectInstructions, groupAgentTasks, AgentGallery, goalProgress, AgentCard, ConsentPage, ConsentCard, ConsentHeader, ConsentNotice, ConsentSection, ConsentBulletList, ConsentStrong, ConsentText, ConfigForm, AgentEditView, AgentMainView, AgentCreatedView, AgentCreateView, GENERATE_IMAGE_ID, IMAGE_ASPECT_AUTO, deriveAnnotationName, ANNOTATE_ID, recordWorkflowUse, renderWorkflowIcon, openWorkflowLaunch, useWorkflowLaunchRequest, WorkflowRunStatus, ThreadStatusLine, TaskStartDialog, REMIND_TASK_ID, moveTargets, NewThreadDialog, AgentBar, AgentBarNotes, AgentBarQueuedNote, AgentBarProbeAnswer, ConversationListView, ConversationTurnSpeaker, ConsentMessage, CopyableUrl, ConsentPermissionList, ConsentActions, ConsentFootnote, AgentBarStatus, AgentBarIconButton, AgentBarMenu, composePersona, newThreadToRequest, importSkillFile, importSkillFromUrl, skillSlug, serializeSkill, STATUS_LABELS, asTaskStatus, UploadTaskList, filterConversationRows, TaskEmptyState, TaskTable, workflowToSkillMarkdown, closeWorkflowLaunch, defaultTaskComposerValues } from '../chunk-V2QWATXQ.js';
91
92
  import { EntityChip, fromPlanSteps, getCurrentAgentStepPresentation } from '../chunk-3TKRCYFN.js';
92
93
  import '../chunk-LRPGXNMA.js';
93
94
  import { MultiSelect } from '../chunk-CQCC7LE7.js';
94
95
  import '../chunk-UCVGWGI6.js';
95
96
  import '../chunk-TX6BIWIH.js';
96
- import { documentScopeLabels, matchWorkflowScope } from '../chunk-7ZCM2GR2.js';
97
+ import { documentScopeLabels, matchWorkflowScope } from '../chunk-IRCGXKLB.js';
97
98
  import '../chunk-4QUUU7GH.js';
98
99
  import { SectionLabel } from '../chunk-MXF3MHYC.js';
99
- import { TriStateFilterMenu } from '../chunk-G4GLDQLY.js';
100
+ import { TriStateFilterMenu } from '../chunk-KG3W76BB.js';
100
101
  import { composeWorkflowPrompt, isEmptyWorkflowScope, inputsFromContext, workflowsAccepting, stepStatesFromActivity, canAssign, assigneeName, runFieldsOf, promptFieldName, validateInputs, defaultInputs, buildLaunch, skillToWorkflow } from '../chunk-3D7SX5ZS.js';
101
102
  import '../chunk-M4S75AEJ.js';
102
103
  import '../chunk-5LXQPP2K.js';
@@ -140,15 +141,15 @@ import { openDialog, closeDialog, useDialogProps, ConfirmDialog } from '../chunk
140
141
  import { ModalHeader, ModalScaffold, ModalSection, ModalSectionTitle } from '../chunk-TX2ZICS7.js';
141
142
  import '../chunk-UP3GCNPM.js';
142
143
  import '../chunk-VUNV25KB.js';
143
- import { useUpdateDocuments, useDeleteDocuments, useRenameFolder, useDownloadDocuments, useTags, useDocumentHostActions, useDocumentThumbnails, HtmlIcon, useArbiSessionState, selectDraft, useArbi, useArbiSessionStore, useAudioRecorder, MicRecordingOverlay, useWorkspaces, useConversations, useRunConversation, useWorkspaceActivity, useWorkspaceUsers, callLink, openCall, startDmCall, calendarQueryKeys, mailQueryKeys, arbiQueryKeys, invalidateConversationLists, isWorkspaceNotificationType, useNotifications, useDeleteNotifications, useMarkNotificationsRead, useCallsEnabled, useDocuments, serverNotificationBellEntry, documentDisplayName, useArbiWebSocket, isNotificationRow, useWorkspaceNotificationLevel, useFollowThread, useUploadSkillFiles, useSkills, useSaveSkill, useSetSkillVisibility, useDeleteSkill, useSkillSource, useInstallSkillPack, useAgentModels, useMcpTools, useAgentConfig, useAgentWorkspaces, useCreateAgent, useSaveAgentConfig, useGrantAgentAccess, useRevokeAgentAccess, useGenerateAgentAvatar, useAgents, useDeleteAgents, ConversationScope, useConversation, useAgentSession, useStartAgentSession, useCloseAgentSession, useAgentChats, useSwitchWorkspace, useWorkItems, ArtifactCanvas, useTagKindSchema, useCreateTag, useSetTagValues, useUpdateTagKindSchema, useUpdateTag, useFacts, useDeleteTag, useExtractEntities, useEntityExtractionDocIds, useFactsSearch, useStartWorkspaceTransfer, useResumeWorkspaceTransfer, useCancelWorkspaceTransfer, useWorkspaceTransfer, useWorkspaceTransfers, useWorkspaceExportDownload, usePlanWorkspaceTransfer, isTransferResumable, isTransferFinished, getWorkspaceKind, useShellWorkspaces, useMailClient, defaultMailAlias, useClaimNativeAlias, useMailOnline, useConnectMailAccount, useDisconnectMailAccount, useMailPolicy, useMailAccounts, useProfile, useUserSettings, useUpdateUserSettings, useDismissedTips, useAvailableModels, useModelConnections, useDirectModelUsage, useSaveModelConnection, useRemoveModelConnection, useUnlockModelConnections, useConnectorVendorVisibility, useConnectorCatalog, useMyConnectors, useDisconnectConnector, useSlackConnection, useDisconnectSlack, isMailboxSyncVendor, isSharePointVendor, useWorkspaceTrash, useInvalidateStorage, useStorageActions, useStorageItems, useStorageItemNames, useStorageProjects, useUserUsageToday, formatGbp, useFeatureSwitch, useCallsConfig, useStorageSnapshots, useUpdateWorkspace, useAddWorkspaceMembers, useRemoveWorkspaceMembers, useSetWorkspaceMemberRoles, useContacts, useInviteContacts, useDeleteContact, usePeopleSearch, toShellWorkspace, useSessions, useAuthorizeLimits, useTerminateSession, useUploadDocuments, useSetWorkspaceHouseTemplate, useSetDeploymentHouseTemplate, useCurrentUser, supportsHouseTemplates, workspaceHouseTemplateId, isDeploymentAdmin, useHouseTemplateCandidates, useWorkspaceArchive, useArchiveWorkspace, useUnarchiveWorkspace, isArchiveMoving, useIsSlow, useProducts, useCreateProject, useDeleteProject, useCanCreateProjects, PROJECT_CREATION_DENIED_REASON, useEnableMailboxSync, useMailboxFolders, useEnableDriveSync, useDriveFolderChildren, connectorErrorStatus, useProjectInvoices, useProjects, useUpdateProjectFields, useChargeWatch, useAddonQuote, STILL_WORKING, useProjectBillingPortal, useProjectUsage, MODEL_GROUP_LABELS, useRefreshProject, useBoxRole, cachedQuotaUsedUp, useArbiSession, useDeleteWorkspaces, useCreateContact, useUpdateContact, useLinkContact, useEntitlements, useImportContacts, entitlementRefusal, MAX_RETRIEVE_DOC_IDS, useSemanticSearch, useAssignDocTags, useMailUnlock, useMailFolders, useMailMessages, useMailDraftCompose, useMailMessage, useMailCache, MailOfflineUnavailableError, accountPath, useClaimSecureMail, useTransientView, 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, useDocumentsSupport, isZipFile, prepareUploadFiles, UPLOAD_MAX_FILE_SIZE, filesFromDrop, UPLOAD_ACCEPT, useUploadFromUrls, useUploadFiles, useUpdateDocTag, useRemoveDocTags, useOfflineDocumentIds, useKeepDocumentsOffline, useRemoveDocumentsOffline, useOpenViewerDocumentId, subscribeDocumentRows, useGenerateDocTags, useRefreshDocuments, useArbiWsStore, isTableViewOf, viewsOfTable, useDocumentsLoading, selectViewingDocumentId, useRelatedDocuments, useWorkspaceProcessing, DISMISSED_TASK_TTL_MS, useDatabases, useCreateDatabase, useImportDatabase, myChatId, useChatThread, useChatPost, useDeleteChatMessage, useMarkChatRead, setOpenChat, useAgentDmStatus, annotateThread, userDisplayName, DmComposer, TypingIndicator, useRenameChat, useAddChatMembers, useRemoveChatMember, useChats, useChatSummaries, useRequestWorkspaceAccess, useCreateGroupChat, useChatArrivals, useConfigSchema, useSaveConfig, useConversationPendingAuth, openAccessRequest, useSignOut, useFeature, useIsEntitled, ImageCropper, useApplyChatModel, useConversationActivity, useConversationItems, threadTabId, useUpdateConversation, TaskThreadPendingError, useWorkflows, useStartTaskQuery, useCreateWork, useRunWorkflow, useMentionCandidates, useBuiltinCommands, useAgentRunControl, useDeleteConversation, useCanEditShared, useIsWorkspaceOwner, isQueuedCalendarWrite, DateSeparator, ChatBubble, isAliasTakenError, nextAliasSuggestion, aliasTakenMessage, mailJson, connectorReturnTo, GitHubIcon, AppleIcon, GoogleIcon, LinkedInIcon, downloadRecoveryFile, cropImage, getRelatedTotal, isDeploymentUserNotification, describeServerNotification, getWorkspaceActionText, getWorkspaceSentPhrase, BOX_SEAT_REFUSED, BOX_SEAT_REFUSED_TITLE, documentActivityPhrase, isSignatureNotificationType, inputRequestTitle, WORK_NOTIFICATION_LABELS, useConfigs, usePassageQuotes, useUpdateFact, useDeleteFact, useCreateFact, useAccountClient, formatGbpPerMillionTokens, usePlanQuote, useCreateProjectCheckout, useInvalidateProjects, useInvalidateEntitlements, useCreateWorkspace, useDriveFolderDocCount, useChangeProjectPlan, useCancelProjectSubscription, usePreviewProjectPlanChange, useAddProjectAddonBlock, fileAttachment, useMailProjects, useSaveMailDraft, useSendMail, useMailDraftReplaced, useCalendarInvitations, useDecideCounter, useSearchContacts, usePublishCalendar, useCalendarShares, useShareCalendar, useUnshareCalendar, useSubscribeCalendar, useHolidayCountries, useAddHolidayCalendar, cancelPublicBooking, useConfig, useSaveConfigField, SHAREPOINT_VENDORS, isDriveSyncVendor, useDatabase, useDatabaseRows, useUpdateDatabase, useDeleteDatabase, useAddDatabaseRows, useUpdateDatabaseRow, useDeleteDatabaseRows, useImportDatabaseRows, useExportDatabase, DATABASE_ROWS_PAGE, useInvalidateAfterTransfer, DmAvatar, ConversationList, useDeleteConfig, isFullConfig, resolveConfigModel, useChatUnreadTotal, useUnreadByPeer, useArbiWsStatus, useMarkDocumentShared, useConversationSearch, useWorkspaceRole, useConversationDocuments, useConversationData, useConnectRunStream, useAnswerAgentQuestion, useConversationIsShared, buildPendingFirstTurn, useConversationTurn, useAskAgain, transcriptSegmentOf, getOrphanedLastMessage, refuseChatWhenOffline, useThreadDocument, useDocumentAutoAdd, useAutoSendDraft, READ_ONLY_MEETING_TEXT, ArbiBotHeadIcon, useProjectConversationUsage, signatureNotificationPhrase, signatureRequestMeta, getNotificationTypeMeta, useMailDraftEditor, useFreeBusy, useFindTime, useCalendarSupport, useStartCalendarAccountOAuth, useConnectOAuthAccount, useBookingPages, useDeleteBookingPage, useRooms, useCancelMailboxSync, useMailboxSyncProgress, useRefreshConnectorsOnRunEnd, useCancelDriveSync, useDriveFolders, useDriveSyncProgress, useDriveSyncEstimate, useSearchDatabaseRows, callSession, isReplayableArbiMutation, useArbiHost, describeCalendarNotification, notificationUserName, useSessionView, useConnectorAutoSync, useUpdateProjectNextPeriodAddons, useUpdateProjectAddonSettings, useSyncCalendarAccount, useUpdateCalendarAccount, useDisconnectCalendarAccount, ACCOUNT_VENDOR, useCalDavProfiles, useConnectCalDavAccount, useSaveBookingPage, useCreateRoom, useTriggerMailboxSync, useTriggerDriveSync } from '@arbidocs/react';
144
+ import { useUpdateDocuments, useDeleteDocuments, useRenameFolder, useDownloadDocuments, useTags, useDocumentHostActions, useDocumentThumbnails, HtmlIcon, useArbiSessionState, selectDraft, useAssistantName, assistantLabels, useArbi, useArbiSessionStore, useAudioRecorder, MicRecordingOverlay, useWorkspaces, useConversations, useRunConversation, useWorkspaceActivity, useWorkspaceUsers, callLink, openCall, startDmCall, calendarQueryKeys, mailQueryKeys, arbiQueryKeys, invalidateConversationLists, isWorkspaceNotificationType, describeCalendarNotification, notificationUserName, describeServerNotification, useNotifications, useDeleteNotifications, useMarkNotificationsRead, useCallsEnabled, useDocuments, serverNotificationBellEntry, documentDisplayName, useArbiWebSocket, isNotificationRow, useWorkspaceNotificationLevel, useFollowThread, useUploadSkillFiles, useSkills, useSaveSkill, useSetSkillVisibility, useDeleteSkill, useSkillSource, useInstallSkillPack, useAgentModels, useMcpTools, useAgentConfig, useAgentWorkspaces, useCreateAgent, useSaveAgentConfig, useGrantAgentAccess, useRevokeAgentAccess, useGenerateAgentAvatar, useAgents, useDeleteAgents, ConversationScope, useConversation, useAgentSession, useStartAgentSession, useCloseAgentSession, useAgentChats, useSwitchWorkspace, useWorkItems, ArtifactCanvas, useTagKindSchema, useCreateTag, useSetTagValues, useUpdateTagKindSchema, useUpdateTag, useFacts, useDeleteTag, useExtractEntities, useEntityExtractionDocIds, useFactsSearch, useStartWorkspaceTransfer, useResumeWorkspaceTransfer, useCancelWorkspaceTransfer, useWorkspaceTransfer, useWorkspaceTransfers, useWorkspaceExportDownload, usePlanWorkspaceTransfer, isTransferResumable, isTransferFinished, getWorkspaceKind, useShellWorkspaces, useMailClient, defaultMailAlias, useClaimNativeAlias, useMailOnline, useConnectMailAccount, useDisconnectMailAccount, useMailPolicy, useMailAccounts, useProfile, useUserSettings, useUpdateUserSettings, useDismissedTips, useAvailableModels, useModelConnections, useDirectModelUsage, useSaveModelConnection, useRemoveModelConnection, useUnlockModelConnections, useConnectorVendorVisibility, useConnectorCatalog, useMyConnectors, useDisconnectConnector, useSlackConnection, useDisconnectSlack, isMailboxSyncVendor, isSharePointVendor, useWorkspaceTrash, useInvalidateStorage, useStorageActions, useStorageItems, useStorageItemNames, useStorageProjects, useUserUsageToday, formatGbp, useFeatureSwitch, useCallsConfig, useStorageSnapshots, useUpdateWorkspace, useAddWorkspaceMembers, useRemoveWorkspaceMembers, useSetWorkspaceMemberRoles, useContacts, useInviteContacts, useDeleteContact, usePeopleSearch, toShellWorkspace, useSessions, useAuthorizeLimits, useTerminateSession, useUploadDocuments, useSetWorkspaceHouseTemplate, useSetDeploymentHouseTemplate, useCurrentUser, supportsHouseTemplates, workspaceHouseTemplateId, isDeploymentAdmin, useHouseTemplateCandidates, useWorkspaceArchive, useArchiveWorkspace, useUnarchiveWorkspace, isArchiveMoving, useIsSlow, useProducts, useCreateProject, useDeleteProject, useCanCreateProjects, PROJECT_CREATION_DENIED_REASON, useEnableMailboxSync, useMailboxFolders, useEnableDriveSync, useDriveFolderChildren, connectorErrorStatus, useProjectInvoices, useProjects, useUpdateProjectFields, useChargeWatch, useAddonQuote, STILL_WORKING, useProjectBillingPortal, useProjectUsage, MODEL_GROUP_LABELS, useRefreshProject, useBoxRole, cachedQuotaUsedUp, useArbiSession, useDeleteWorkspaces, useCreateContact, useUpdateContact, useLinkContact, useEntitlements, useImportContacts, entitlementRefusal, MAX_RETRIEVE_DOC_IDS, useSemanticSearch, useAssignDocTags, useMailUnlock, useMailFolders, useMailMessages, useMailDraftCompose, useMailMessage, useMailCache, MailOfflineUnavailableError, accountPath, useClaimSecureMail, useTransientView, 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, useDocumentsSupport, isZipFile, prepareUploadFiles, UPLOAD_MAX_FILE_SIZE, filesFromDrop, UPLOAD_ACCEPT, useUploadFromUrls, useUploadFiles, useUpdateDocTag, useRemoveDocTags, useOfflineDocumentIds, useKeepDocumentsOffline, useRemoveDocumentsOffline, useOpenViewerDocumentId, subscribeDocumentRows, useGenerateDocTags, useRefreshDocuments, useArbiWsStore, isTableViewOf, viewsOfTable, useDocumentsLoading, selectViewingDocumentId, useRelatedDocuments, useWorkspaceProcessing, DISMISSED_TASK_TTL_MS, useDatabases, useCreateDatabase, useImportDatabase, myChatId, useChatThread, useChatPost, useDeleteChatMessage, useMarkChatRead, setOpenChat, useAgentDmStatus, annotateThread, userDisplayName, DmComposer, TypingIndicator, useRenameChat, useAddChatMembers, useRemoveChatMember, useChats, useChatSummaries, useRequestWorkspaceAccess, useCreateGroupChat, useChatArrivals, useConfigSchema, useSaveConfig, useConversationPendingAuth, openAccessRequest, useSignOut, useFeature, useIsEntitled, ImageCropper, useApplyChatModel, useConversationActivity, useConversationItems, threadTabId, useUpdateConversation, TaskThreadPendingError, useWorkflows, useStartTaskQuery, useCreateWork, useRunWorkflow, useMentionCandidates, useBuiltinCommands, useAgentRunControl, useDeleteConversation, useCanEditShared, useIsWorkspaceOwner, isQueuedCalendarWrite, DateSeparator, ChatBubble, isAliasTakenError, nextAliasSuggestion, aliasTakenMessage, mailJson, connectorReturnTo, GitHubIcon, AppleIcon, GoogleIcon, LinkedInIcon, downloadRecoveryFile, cropImage, getRelatedTotal, isDeploymentUserNotification, getWorkspaceActionText, getWorkspaceSentPhrase, BOX_SEAT_REFUSED, BOX_SEAT_REFUSED_TITLE, documentActivityPhrase, isSignatureNotificationType, inputRequestTitle, WORK_NOTIFICATION_LABELS, useConfigs, usePassageQuotes, useUpdateFact, useDeleteFact, useCreateFact, useAccountClient, formatGbpPerMillionTokens, usePlanQuote, useCreateProjectCheckout, useInvalidateProjects, useInvalidateEntitlements, useCreateWorkspace, useDriveFolderDocCount, useChangeProjectPlan, useCancelProjectSubscription, usePreviewProjectPlanChange, useAddProjectAddonBlock, fileAttachment, useMailProjects, useSaveMailDraft, useSendMail, useMailDraftReplaced, useCalendarInvitations, useDecideCounter, useSearchContacts, usePublishCalendar, useCalendarShares, useShareCalendar, useUnshareCalendar, useSubscribeCalendar, useHolidayCountries, useAddHolidayCalendar, cancelPublicBooking, useConfig, useSaveConfigField, SHAREPOINT_VENDORS, isDriveSyncVendor, useDatabase, useDatabaseRows, useUpdateDatabase, useDeleteDatabase, useAddDatabaseRows, useUpdateDatabaseRow, useDeleteDatabaseRows, useImportDatabaseRows, useExportDatabase, DATABASE_ROWS_PAGE, useInvalidateAfterTransfer, DmAvatar, ConversationList, useDeleteConfig, isFullConfig, resolveConfigModel, useChatUnreadTotal, useUnreadByPeer, useArbiWsStatus, useMarkDocumentShared, useConversationSearch, useWorkspaceRole, useConversationDocuments, useConversationData, useConnectRunStream, useAnswerAgentQuestion, useConversationIsShared, buildPendingFirstTurn, useConversationTurn, useAskAgain, transcriptSegmentOf, getOrphanedLastMessage, refuseChatWhenOffline, useThreadDocument, useDocumentAutoAdd, useAutoSendDraft, READ_ONLY_MEETING_TEXT, ArbiBotHeadIcon, useProjectConversationUsage, signatureNotificationPhrase, signatureRequestMeta, getNotificationTypeMeta, useMailDraftEditor, useFreeBusy, useFindTime, useCalendarSupport, useStartCalendarAccountOAuth, useConnectOAuthAccount, useBookingPages, useDeleteBookingPage, useRooms, useCancelMailboxSync, useMailboxSyncProgress, useRefreshConnectorsOnRunEnd, useCancelDriveSync, useDriveFolders, useDriveSyncProgress, useDriveSyncEstimate, useSearchDatabaseRows, callSession, isReplayableArbiMutation, useArbiHost, useSessionView, useConnectorAutoSync, useUpdateProjectNextPeriodAddons, useUpdateProjectAddonSettings, useSyncCalendarAccount, useUpdateCalendarAccount, useDisconnectCalendarAccount, ACCOUNT_VENDOR, useCalDavProfiles, useConnectCalDavAccount, useSaveBookingPage, useCreateRoom, useTriggerMailboxSync, useTriggerDriveSync } from '@arbidocs/react';
144
145
  export { viewsOfTable } from '@arbidocs/react';
145
- import { getFileTypeIcon, getDocumentTitle, getEntityLabel, Badge, ThreadVisibilityIcon, Button, getUserDisplayName, createUserAvatarIcon, Label, Input, cn, Textarea, Dialog, DialogContent, DialogTitle, EntityIcon, DialogDescription, DialogHeader, tagKindNouns, tagKindTitle, formatFriendlyDate, getTagTypeLabel, VisibilityToggle, getEntityColor, ShieldIcon, isImageDocument, IconToggle, Switch, Checkbox, entityNoun, DialogTrigger, Tooltip, TooltipTrigger, TooltipContent, EntityPill, CommandGroup, CommandItem, ProjectEntity, DialogFooter, Tabs, TabsList, TabsTrigger, TabsContent, isAgent, getDocIcon, getDocumentNature, getDocumentAuthor, markdownToPlainText, getDocumentSubject, formatDocDate, getDocumentDate, friendlyFileType, formatFolderLabel, canonicalFolderPath, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Slider, formatRelativeTime, AgentBadge, PresenceLabel, UserMenu, Popover, PopoverAnchor, PopoverTrigger, PopoverContent, Command, CommandInput, CommandList, CommandEmpty, getUserAvatarColor, ArbiIcon, DocumentEntity, Avatar, AvatarImage, AvatarFallback, getUserInitials, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, UserEntity, agentAvatarColors, ProviderIcon, Card, CardHeader, CardTitle, CardContent, VerifiedToggle, Progress } from '@arbidocs/react/ui';
146
+ import { getFileTypeIcon, getDocumentTitle, getEntityLabel, Badge, ThreadVisibilityIcon, Button, getUserDisplayName, createUserAvatarIcon, Label, Input, cn, Textarea, Dialog, DialogContent, DialogTitle, EntityIcon, DialogDescription, DialogHeader, tagKindNouns, tagKindTitle, formatFriendlyDate, getTagTypeLabel, VisibilityToggle, getEntityColor, ShieldIcon, isImageDocument, IconToggle, Switch, Checkbox, entityNoun, DialogTrigger, Tooltip, TooltipTrigger, TooltipContent, EntityPill, CommandGroup, CommandItem, ProjectEntity, DialogFooter, Tabs, TabsList, TabsTrigger, TabsContent, isAgent, getDocIcon, getDocumentNature, getDocumentAuthor, markdownToPlainText, getDocumentSubject, formatDocDate, getDocumentDate, friendlyFileType, formatFolderLabel, canonicalFolderPath, TagEntity, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Slider, formatRelativeTime, AgentBadge, PresenceLabel, UserMenu, Popover, PopoverAnchor, PopoverTrigger, PopoverContent, Command, CommandInput, CommandList, CommandEmpty, getUserAvatarColor, ArbiIcon, DocumentEntity, Avatar, AvatarImage, AvatarFallback, getUserInitials, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, UserEntity, agentAvatarColors, ProviderIcon, Card, CardHeader, CardTitle, CardContent, VerifiedToggle, Progress } from '@arbidocs/react/ui';
146
147
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
147
148
  import { lazy, memo, useState, useEffect, forwardRef, useRef, useMemo, useLayoutEffect, useCallback, useImperativeHandle, createContext, Suspense, useSyncExternalStore, createElement, useContext, Fragment as Fragment$1, useId } from 'react';
148
149
  import { hasMessageBody, notify, useNotify, sharedSearchSession, takePendingSearch, selectUnread, NotificationBell, useTurnDocumentId, useOpenDocumentId, useRegisterOpenDocument } from '@arbidocs/react/shell';
149
150
  import { useQueryClient } from '@tanstack/react-query';
150
151
  import { parseCallFragment, isMessageType, unlockIdentityWithPassword, createRecoveryUrl, bytesToBase64 } from '@arbidocs/client';
151
- import { Bell, Activity, Info, UserCheck, Trash2, Loader2, Upload, Link2, Search, Plus, ArrowLeft, Bot, Tags, CheckCircle2, Milestone, LogOut, Wifi, RotateCcw, Mail, ExternalLink, Lock, HardDrive, User, HatGlasses, MessageSquare, Code2, PlugZap, Gauge, Cloud, XCircle, Building2, Palette, Type, ChevronDown, ChevronRight, Star, Check, UserPlus, FolderInput, FileText, Archive, ArchiveRestore, Download, Printer, SquareStack, Table, FolderKanban, Users, Sparkles, Cake, X, UserRound, MessagesSquare, Tag, Settings, Video, CalendarDays, Clock, MapPin, Globe, Calendar, Hash, File as File$1, FileType, FolderOpen, Fingerprint, Share2, Paperclip, CircleCheck, Copy, Network, CheckCircle, TriangleAlert, LoaderCircle, NotebookPen, Columns3, EyeOff, Eye, ArrowUp, ArrowDown, ZoomOut, Camera, Send, FilePlus2, Monitor, Eraser, UserMinus, KeyRound, RefreshCw, UsersRound, Infinity, Bug, Crop, Undo2, ImageUp, Wrench, RotateCw, Link, Shield, ClipboardList, Square, Table2, CalendarClock, BrainCircuit, ShieldCheck, Zap, KeySquare, BellOff, CheckCheck, FolderUp, ArrowUpCircle, Contact, Scale, Pencil, BookA, Quote, Inbox, CalendarX, CalendarCheck, Phone, Play, Pause, Workflow, Minimize2, Maximize2, Minus, CalendarSearch, DoorOpen, AlertCircle, ClockFading, AlertTriangle } from 'lucide-react';
152
+ import { Bell, Activity, Info, UserCheck, Trash2, Loader2, Upload, Link2, Search, Plus, ArrowLeft, Bot, Tags, CheckCircle2, Milestone, LogOut, Wifi, RotateCcw, Mail, ExternalLink, Lock, HardDrive, User, HatGlasses, MessageSquare, Code2, PlugZap, Gauge, Cloud, XCircle, Building2, Palette, Type, ChevronDown, ChevronRight, Star, Check, UserPlus, FolderInput, FileText, Archive, ArchiveRestore, Download, Printer, SquareStack, Table, FolderKanban, Users, Sparkles, Cake, X, UserRound, MessagesSquare, Tag, Settings, Video, CalendarDays, Clock, MapPin, Globe, Calendar, Hash, File as File$1, FileType, FolderOpen, Fingerprint, Share2, Paperclip, CircleCheck, Copy, Network, CheckCircle, TriangleAlert, LoaderCircle, NotebookPen, Columns3, EyeOff, Eye, ArrowUp, ArrowDown, ZoomOut, Camera, Send, FilePlus2, Monitor, Eraser, UserMinus, KeyRound, RefreshCw, UsersRound, Infinity, Bug, Crop, Undo2, ImageUp, MessageCircleQuestionMark, Wrench, RotateCw, Link, Shield, ClipboardList, Lightbulb, Square, Table2, CalendarClock, BrainCircuit, ShieldCheck, Zap, KeySquare, BellOff, CheckCheck, FolderUp, ArrowUpCircle, Contact, Scale, MoreHorizontal, Pencil, BookA, Quote, Inbox, CalendarX, CalendarCheck, Phone, Play, Pause, Workflow, Minimize2, Maximize2, Minus, CalendarSearch, DoorOpen, AlertCircle, ClockFading, AlertTriangle } from 'lucide-react';
152
153
  import { downloadBlob, useIsOnline, DocumentToolsProvider, useSignatureVerification, SignatureVerificationError } from '@arbidocs/react/document-tools';
153
154
  import { useStreamedArtifact, parseVersionRef } from '@arbidocs/react/artifacts';
154
155
  import { FLAT_TAG_KINDS, getEligibleParentTags, canTagHaveParent, isFlatKind, TAG_NESTING_MAX_DEPTH, TAG_KINDS, formatFileSize, filterDocumentTags, isLabelTag, refusalReason, isPresenceTag, isAnnotationTag, flattenTagTree, tagsForScope, tagsOfGroup, chats, buildRetrievalFullContextTool, buildRetrievalChunkTool, computeRunStats, topLevelAgentSteps, getCurrentStep, extractSubagentLanes, getChildTags, tagUseCount, PRESENCE_KINDS, isEntityTag, DuplicateContactError, wouldCreateTagCycle, ArbiApiError, getTagDescendantIds } from '@arbidocs/sdk/browser';
@@ -624,10 +625,7 @@ function SignatureEvent({
624
625
  const target = describeServerNotification(row2)?.target;
625
626
  const openIt = () => target && open(target);
626
627
  const { DocumentChip: DocumentChip2 } = renderers;
627
- const unnamed = /* @__PURE__ */ jsxs(Fragment, { children: [
628
- /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate text-sm", children: type === "signature_requested" ? "a document" : "the document" }),
629
- documentId && /* @__PURE__ */ jsx(ActionButton, { label: "Open", onClick: openIt })
630
- ] });
628
+ const unnamed = /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate text-sm", children: type === "signature_requested" ? "a document" : "the document" }) });
631
629
  const wording = "min-w-0 shrink-[100] truncate text-sm";
632
630
  return /* @__PURE__ */ jsxs(
633
631
  "div",
@@ -673,17 +671,9 @@ function PersistedEvent({
673
671
  const type = row2.type;
674
672
  const isIncoming = item.kind === "incoming";
675
673
  const user = renderers.renderUser;
676
- const target = () => describeServerNotification(row2)?.target;
677
- const openTarget = () => {
678
- const t = target();
679
- if (t) open(t);
680
- };
681
674
  if (type === "file_shared") {
682
675
  const entry = describeServerNotification(row2);
683
- return /* @__PURE__ */ jsxs("div", { className: "flex h-full items-center gap-2 text-sm", children: [
684
- /* @__PURE__ */ jsx("span", { children: entry?.title }),
685
- entry?.target && /* @__PURE__ */ jsx(ActionButton, { label: entry.actionLabel ?? "Open file", onClick: openTarget })
686
- ] });
676
+ return /* @__PURE__ */ jsx("div", { className: "flex h-full items-center gap-2 text-sm", children: /* @__PURE__ */ jsx("span", { children: entry?.title }) });
687
677
  }
688
678
  if (isWorkspaceNotificationType(type)) {
689
679
  if (isIncoming)
@@ -702,10 +692,7 @@ function PersistedEvent({
702
692
  }
703
693
  if (type === "workspace_access_request") {
704
694
  if (isIncoming)
705
- return /* @__PURE__ */ jsxs(PersonLine, { person: user(sender), children: [
706
- /* @__PURE__ */ jsx("span", { className: PHRASE_CLASS, children: "requested workspace access" }),
707
- /* @__PURE__ */ jsx(ActionButton, { label: "Review", onClick: openTarget })
708
- ] });
695
+ return /* @__PURE__ */ jsx(PersonLine, { person: user(sender), children: /* @__PURE__ */ jsx("span", { className: PHRASE_CLASS, children: "requested workspace access" }) });
709
696
  return /* @__PURE__ */ jsxs("div", { className: "flex items-center h-full gap-1.5 text-muted-foreground", children: [
710
697
  /* @__PURE__ */ jsx("span", { className: PHRASE_CLASS, children: "Requested workspace access from" }),
711
698
  user(recipient)
@@ -713,15 +700,12 @@ function PersistedEvent({
713
700
  }
714
701
  if (isDeploymentUserNotification(type)) {
715
702
  const entry = describeServerNotification(row2);
716
- return /* @__PURE__ */ jsxs(
703
+ return /* @__PURE__ */ jsx(
717
704
  "div",
718
705
  {
719
706
  className: "flex h-full items-center gap-1.5 text-sm text-muted-foreground",
720
707
  "data-testid": "notification-deployment-user",
721
- children: [
722
- /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", title: entry?.title, children: entry?.title }),
723
- entry?.target && /* @__PURE__ */ jsx(ActionButton, { label: entry.actionLabel ?? "Open", onClick: openTarget })
724
- ]
708
+ children: /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", title: entry?.title, children: entry?.title })
725
709
  }
726
710
  );
727
711
  }
@@ -733,8 +717,7 @@ function PersistedEvent({
733
717
  return /* @__PURE__ */ jsxs("div", { className: "flex h-full items-center gap-1.5 text-muted-foreground", children: [
734
718
  !isIncoming && /* @__PURE__ */ jsx("span", { className: "text-sm", children: "You mentioned" }),
735
719
  isIncoming ? user(sender) : user(recipient),
736
- /* @__PURE__ */ jsx("span", { className: PHRASE_CLASS, children: inDocument ? isIncoming ? "mentioned you in a document comment" : "in a document comment" : isIncoming ? "mentioned you in a conversation" : "in a conversation" }),
737
- (row2.conversation_ext_id || inDocument) && /* @__PURE__ */ jsx(ActionButton, { label: "Open", onClick: openTarget })
720
+ /* @__PURE__ */ jsx("span", { className: PHRASE_CLASS, children: inDocument ? isIncoming ? "mentioned you in a document comment" : "in a document comment" : isIncoming ? "mentioned you in a conversation" : "in a conversation" })
738
721
  ] });
739
722
  }
740
723
  if (type === "thread_reply" || type === "document_activity") {
@@ -745,8 +728,7 @@ function PersistedEvent({
745
728
  "data-testid": "notification-relevance",
746
729
  children: [
747
730
  user(sender),
748
- /* @__PURE__ */ jsx("span", { className: PHRASE_CLASS, children: type === "thread_reply" ? "replied in a thread" : documentActivityPhrase(row2.content) }),
749
- /* @__PURE__ */ jsx(ActionButton, { label: "Open", onClick: openTarget })
731
+ /* @__PURE__ */ jsx("span", { className: PHRASE_CLASS, children: type === "thread_reply" ? "replied in a thread" : documentActivityPhrase(row2.content) })
750
732
  ]
751
733
  }
752
734
  );
@@ -755,32 +737,21 @@ function PersistedEvent({
755
737
  return /* @__PURE__ */ jsx(SignatureEvent, { row: row2, isIncoming, open, renderers });
756
738
  const workLabel = type === "agent_input_requested" ? inputRequestTitle(row2.content) : WORK_NOTIFICATION_LABELS[type];
757
739
  if (workLabel)
758
- return /* @__PURE__ */ jsxs(
740
+ return /* @__PURE__ */ jsx(
759
741
  "div",
760
742
  {
761
743
  className: "flex h-full items-center gap-1.5 text-sm text-muted-foreground",
762
744
  title: workLabel,
763
745
  "data-testid": "notification-work",
764
- children: [
765
- /* @__PURE__ */ jsx("span", { className: `min-w-0 truncate ${type === "workflow_failed" ? "text-red-text" : ""}`, children: workLabel }),
766
- row2.conversation_ext_id && /* @__PURE__ */ jsx(
767
- ActionButton,
768
- {
769
- label: "Open",
770
- onClick: () => open({
771
- kind: "conversation",
772
- workspaceId: row2.workspace_ext_id ?? void 0,
773
- conversationId: row2.conversation_ext_id,
774
- ...row2.message_ext_id ? { messageId: row2.message_ext_id } : {}
775
- })
776
- }
777
- )
778
- ]
746
+ children: /* @__PURE__ */ jsx("span", { className: `min-w-0 truncate ${type === "workflow_failed" ? "text-red-text" : ""}`, children: workLabel })
779
747
  }
780
748
  );
781
- return /* @__PURE__ */ jsx("div", { className: "flex items-center h-full text-sm text-muted-foreground", children: type || "Notification" });
749
+ return /* @__PURE__ */ jsx("div", { className: "flex items-center h-full text-sm text-muted-foreground", children: (describeCalendarNotification(row2, { senderName: notificationUserName(row2.sender) }) ?? describeServerNotification(row2))?.title ?? row2.content ?? type ?? "Notification" });
782
750
  }
783
- function SessionEvent({ item }) {
751
+ function SessionEvent({
752
+ item,
753
+ open
754
+ }) {
784
755
  const entry = item.entry;
785
756
  if (!entry) return null;
786
757
  return /* @__PURE__ */ jsxs(
@@ -790,7 +761,16 @@ function SessionEvent({ item }) {
790
761
  title: entry.title,
791
762
  children: [
792
763
  entry.html ? /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", dangerouslySetInnerHTML: { __html: entry.html } }) : /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", children: entry.title }),
793
- entry.onSelect && entry.actionLabel && /* @__PURE__ */ jsx(ActionButton, { label: entry.actionLabel, onClick: entry.onSelect })
764
+ (entry.onSelect || entry.href) && /* @__PURE__ */ jsx(
765
+ ActionButton,
766
+ {
767
+ label: entry.actionLabel ?? "Open",
768
+ onClick: () => {
769
+ if (entry.onSelect) entry.onSelect();
770
+ else if (entry.href) open({ kind: "url", url: entry.href });
771
+ }
772
+ }
773
+ )
794
774
  ]
795
775
  }
796
776
  );
@@ -800,9 +780,19 @@ function NotificationEvent({
800
780
  open,
801
781
  renderers
802
782
  }) {
803
- if (!item.persisted) return /* @__PURE__ */ jsx(SessionEvent, { item });
783
+ if (!item.persisted) return /* @__PURE__ */ jsx(SessionEvent, { item, open });
804
784
  if (!item.row) return null;
805
- return /* @__PURE__ */ jsx(PersistedEvent, { item, row: item.row, open, renderers });
785
+ const described = describeCalendarNotification(item.row, { senderName: notificationUserName(item.row.sender) }) ?? describeServerNotification(item.row);
786
+ return /* @__PURE__ */ jsxs("div", { className: "flex h-full min-w-0 items-center gap-2", children: [
787
+ /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsx(PersistedEvent, { item, row: item.row, open, renderers }) }),
788
+ described?.target && /* @__PURE__ */ jsx(
789
+ ActionButton,
790
+ {
791
+ label: described.actionLabel ?? "Open",
792
+ onClick: () => open(described.target)
793
+ }
794
+ )
795
+ ] });
806
796
  }
807
797
  function categoryOf(item) {
808
798
  if (!item.persisted)
@@ -814,25 +804,9 @@ function categoryOf(item) {
814
804
  function useColumns(formatTime, onOpen, renderers) {
815
805
  return useMemo(
816
806
  () => [
817
- {
818
- colId: "timestamp",
819
- headerName: "Time",
820
- field: "timestamp",
821
- width: 150,
822
- filter: false,
823
- sortable: true,
824
- sort: "desc",
825
- cellRenderer: (params) => {
826
- const isNew = params.data?.kind === "incoming" && params.data.row && !params.data.row.read;
827
- return /* @__PURE__ */ jsxs("div", { className: "flex items-center h-full gap-2", children: [
828
- isNew && /* @__PURE__ */ jsx("div", { className: "w-2.5 h-2.5 rounded-full bg-primary flex-shrink-0" }),
829
- /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: params.value ? formatTime(params.value) : "Unknown" })
830
- ] });
831
- }
832
- },
833
807
  {
834
808
  colId: "event",
835
- headerName: "Event",
809
+ headerName: "Notification",
836
810
  flex: 1,
837
811
  minWidth: 160,
838
812
  // A docked panel leaves this column ~150px: keep the cell's own padding small so the
@@ -844,20 +818,38 @@ function useColumns(formatTime, onOpen, renderers) {
844
818
  },
845
819
  {
846
820
  colId: "category",
847
- headerName: "Category",
848
- width: 130,
821
+ headerName: "Type",
822
+ width: 64,
849
823
  filter: false,
850
824
  sortable: true,
851
825
  valueGetter: (params) => params.data ? categoryOf(params.data).label : "",
852
826
  cellRenderer: (params) => {
853
827
  if (!params.data) return null;
854
- const workspaceId = params.data.row?.workspace_ext_id;
855
- const workspace = workspaceId ? renderers.renderWorkspace(workspaceId) : null;
856
- if (workspace) return /* @__PURE__ */ jsx("div", { className: "flex items-center h-full", children: workspace });
857
828
  const { icon: icon2, label } = categoryOf(params.data);
858
- return /* @__PURE__ */ jsxs("div", { className: "flex items-center h-full gap-1.5 text-muted-foreground", children: [
859
- /* @__PURE__ */ jsx("span", { className: "flex-shrink-0", children: icon2 }),
860
- /* @__PURE__ */ jsx("span", { className: "min-w-0 shrink-[2] truncate text-sm", children: label })
829
+ return /* @__PURE__ */ jsx(
830
+ "div",
831
+ {
832
+ className: "flex items-center h-full text-muted-foreground",
833
+ title: label,
834
+ "aria-label": label,
835
+ children: icon2
836
+ }
837
+ );
838
+ }
839
+ },
840
+ {
841
+ colId: "timestamp",
842
+ headerName: "Time",
843
+ field: "timestamp",
844
+ width: 150,
845
+ filter: false,
846
+ sortable: true,
847
+ sort: "desc",
848
+ cellRenderer: (params) => {
849
+ const isNew = params.data?.kind === "incoming" && params.data.row && !params.data.row.read;
850
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center h-full gap-2", children: [
851
+ isNew && /* @__PURE__ */ jsx("div", { className: "w-2.5 h-2.5 rounded-full bg-primary flex-shrink-0" }),
852
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: params.value ? formatTime(params.value) : "Unknown" })
861
853
  ] });
862
854
  }
863
855
  }
@@ -3219,11 +3211,21 @@ function ConnectedTagTable({
3219
3211
  const updateSchema = useUpdateTagKindSchema();
3220
3212
  const table = useMemo(() => {
3221
3213
  if (!schema.data || !rows.data) return void 0;
3222
- const narrowed = narrowTagTable(
3214
+ let narrowed = narrowTagTable(
3223
3215
  { columns: schema.data.fields, rows: rows.data },
3224
3216
  filter?.matches,
3225
3217
  linksLimit
3226
3218
  );
3219
+ if (narrowed && props.onOpenTaggedItems && filter?.matches) {
3220
+ const totals = new Map(rows.data.map((row2) => [row2.external_id, row2.links]));
3221
+ narrowed = {
3222
+ ...narrowed,
3223
+ rows: narrowed.rows.map((row2) => ({
3224
+ ...row2,
3225
+ links: totals.get(row2.external_id) ?? row2.links
3226
+ }))
3227
+ };
3228
+ }
3227
3229
  const text2 = filter?.text?.trim().toLowerCase();
3228
3230
  if (!narrowed || !text2) return narrowed;
3229
3231
  const fields = filter?.fields ?? ["name"];
@@ -3234,7 +3236,7 @@ function ConnectedTagTable({
3234
3236
  (row2) => fields.includes("name") && row2.name.toLowerCase().includes(text2) || fields.includes("values") && tagValueText(row2, nameOf).toLowerCase().includes(text2)
3235
3237
  )
3236
3238
  };
3237
- }, [schema.data, rows.data, filter, linksLimit, allTags]);
3239
+ }, [schema.data, rows.data, filter, linksLimit, allTags, props.onOpenTaggedItems]);
3238
3240
  const fail2 = (fallback) => (e) => notify17(refusalReason(e, fallback), "error");
3239
3241
  const snapshot2 = (data) => {
3240
3242
  const title = exportTitle ?? tagKindTitle(kind, { plural: true });
@@ -3481,7 +3483,6 @@ function ConnectedTagForm({
3481
3483
  const nestingEnabled = Boolean(availableTags) && !group && !flatKind;
3482
3484
  const nameOnRow = !isCreate && !!group;
3483
3485
  const showParentPicker = nestingEnabled && !hasChildren && parentOptions.length > 0;
3484
- const canClearParent = isCreate || !tag?.parent_ext_id;
3485
3486
  useEffect(() => {
3486
3487
  if (autoFocus && inputRef.current) inputRef.current.focus();
3487
3488
  }, [autoFocus]);
@@ -3587,7 +3588,6 @@ function ConnectedTagForm({
3587
3588
  {
3588
3589
  value: NO_PARENT,
3589
3590
  label: "Top level",
3590
- isDisabled: !canClearParent,
3591
3591
  testId: "inline-tag-form-parent-option-none"
3592
3592
  },
3593
3593
  ...parentOptions.map((option) => ({
@@ -3595,8 +3595,7 @@ function ConnectedTagForm({
3595
3595
  label: option.name,
3596
3596
  testId: `inline-tag-form-parent-option-${option.external_id}`
3597
3597
  }))
3598
- ],
3599
- hint: !canClearParent ? "This field can move to a different parent, but the API has no way to move it back to the top level." : void 0
3598
+ ]
3600
3599
  }
3601
3600
  ),
3602
3601
  nestingEnabled && hasChildren && /* @__PURE__ */ jsxs(TagFormNote, { testId: "inline-tag-form-parent-locked", children: [
@@ -3633,7 +3632,7 @@ function ConnectedTagForm({
3633
3632
  /* @__PURE__ */ jsx(
3634
3633
  TagFormFooter,
3635
3634
  {
3636
- sharedToggle: isCreate ? /* @__PURE__ */ jsx(
3635
+ sharedToggle: isCreate || !group ? /* @__PURE__ */ jsx(
3637
3636
  TagFormSharedToggle,
3638
3637
  {
3639
3638
  label: "Shared with workspace",
@@ -3703,8 +3702,7 @@ function ConnectedTagEditorDialog({
3703
3702
  kind: data.kind,
3704
3703
  shared: data.shared,
3705
3704
  instruction: data.instruction,
3706
- // A missing parent means "leave it": the endpoint cannot clear one.
3707
- ...data.parent_ext_id ? { parent_ext_id: data.parent_ext_id } : {}
3705
+ ...data.parent_ext_id !== void 0 ? { parent_ext_id: data.parent_ext_id } : {}
3708
3706
  }
3709
3707
  });
3710
3708
  notify17(`Saved "${data.name}"`, "success");
@@ -3768,7 +3766,13 @@ function TagCombineFilter({
3768
3766
  if (!ofKind.length) continue;
3769
3767
  const rows = flattenTagTree(ofKind);
3770
3768
  for (const { tag, depth } of rows)
3771
- options3.push({ id: tag.external_id, label: tag.name, count: tagUseCount(tag), depth });
3769
+ options3.push({
3770
+ id: tag.external_id,
3771
+ label: tag.name,
3772
+ displayLabel: /* @__PURE__ */ jsx(TagEntity, { tag, showTooltip: false }),
3773
+ count: tagUseCount(tag),
3774
+ depth
3775
+ });
3772
3776
  groups2.push({
3773
3777
  label: tagKindTitle(kind, { plural: true }),
3774
3778
  options: rows.map((r) => r.tag.external_id),
@@ -3807,6 +3811,14 @@ function TagFilterChips({
3807
3811
  FilterChip,
3808
3812
  {
3809
3813
  label: name(id),
3814
+ labelContent: /* @__PURE__ */ jsx(
3815
+ TagEntity,
3816
+ {
3817
+ tag: tags.find((t) => t.external_id === id) ?? { external_id: id, name: name(id) },
3818
+ showTooltip: false
3819
+ }
3820
+ ),
3821
+ className: "rounded-full! bg-transparent! border-0! px-0! [&>span]:max-w-none",
3810
3822
  state,
3811
3823
  icon: state === "include" ? /* @__PURE__ */ jsx(Check, { className: "size-3", strokeWidth: 3 }) : /* @__PURE__ */ jsx(X, { className: "size-3", strokeWidth: 3 }),
3812
3824
  onDismiss: () => {
@@ -3830,77 +3842,7 @@ function TagFilterChips({
3830
3842
  )
3831
3843
  ] });
3832
3844
  }
3833
- var TOP_LEVEL = "__top__";
3834
- function TagPlacement({ tag, tags, onChange }) {
3835
- const tagNoun = getEntityLabel("ANY_TAG").toLowerCase();
3836
- const workspace = getEntityLabel("WORKSPACE").toLowerCase();
3837
- const nests = !isFlatKind(tag.kind);
3838
- const sameKind = tags.filter((t) => t.kind === tag.kind);
3839
- const parents = getEligibleParentTags(sameKind, tag.external_id);
3840
- const current = tag.parent_ext_id ? tags.find((t) => t.external_id === tag.parent_ext_id) : void 0;
3841
- const options2 = current && !parents.includes(current) ? [current, ...parents] : parents;
3842
- const canNest = canTagHaveParent([...tags], tag.external_id);
3843
- const placement = current ? `Under ${current.name}` : "Top level";
3844
- return /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", "data-testid": "tags-placement", children: [
3845
- /* @__PURE__ */ jsx(
3846
- VisibilityToggle,
3847
- {
3848
- items: tag,
3849
- onToggle: () => onChange(
3850
- { shared: !tag.shared },
3851
- tag.shared ? `"${tag.name}" is private` : `"${tag.name}" is shared with the ${workspace}`
3852
- ),
3853
- showLabel: false,
3854
- "data-testid": "tags-share",
3855
- tooltipActive: `Shared with the ${workspace} \u2014 click to make private`,
3856
- tooltipInactive: `Private \u2014 click to share with the ${workspace}`
3857
- }
3858
- ),
3859
- nests && /* @__PURE__ */ jsxs(
3860
- Select,
3861
- {
3862
- value: tag.parent_ext_id ?? TOP_LEVEL,
3863
- disabled: !canNest && !tag.parent_ext_id,
3864
- onValueChange: (value) => {
3865
- const parent = value === TOP_LEVEL ? null : value;
3866
- const name = parent ? tags.find((t) => t.external_id === parent)?.name : void 0;
3867
- onChange(
3868
- { parent_ext_id: parent },
3869
- name ? `"${tag.name}" moved under "${name}"` : `"${tag.name}" moved to the top level`
3870
- );
3871
- },
3872
- children: [
3873
- /* @__PURE__ */ jsx(
3874
- SelectTrigger,
3875
- {
3876
- className: "h-8 w-56 text-sm",
3877
- "aria-label": `Move this ${tagNoun} under`,
3878
- title: !canNest && !tag.parent_ext_id ? `Other ${getEntityLabel("ANY_TAG", "PLURAL").toLowerCase()} are nested under this one` : placement,
3879
- "data-testid": "tags-move-under",
3880
- children: /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-left", "data-testid": "tags-move-under-value", children: /* @__PURE__ */ jsx(SelectValue, { children: placement }) })
3881
- }
3882
- ),
3883
- /* @__PURE__ */ jsxs(SelectContent, { children: [
3884
- /* @__PURE__ */ jsx(SelectItem, { value: TOP_LEVEL, "data-testid": "tags-move-under-top", children: "Top level" }),
3885
- options2.map((t) => /* @__PURE__ */ jsxs(
3886
- SelectItem,
3887
- {
3888
- value: t.external_id,
3889
- "data-testid": `tags-move-under-${t.external_id}`,
3890
- children: [
3891
- "Under ",
3892
- t.name
3893
- ]
3894
- },
3895
- t.external_id
3896
- ))
3897
- ] })
3898
- ]
3899
- }
3900
- )
3901
- ] });
3902
- }
3903
- var MATRIX_LINKS = 3;
3845
+ var MATRIX_LINKS = 0;
3904
3846
  var TAG_LINKS_LIMIT = 500;
3905
3847
  function PageSection({
3906
3848
  title,
@@ -3924,16 +3866,15 @@ function KindSection({
3924
3866
  kind,
3925
3867
  ctx,
3926
3868
  extractingCount,
3927
- picker
3869
+ picker,
3870
+ tools
3928
3871
  }) {
3929
- const { openDocument, openConversation } = useBlocksEnvironment();
3930
3872
  return /* @__PURE__ */ jsxs(
3931
3873
  PageSection,
3932
3874
  {
3933
3875
  testId: `tags-kind-${kind}`,
3934
3876
  title: tagKindTitle(kind, { plural: true }),
3935
3877
  description: tagKindDescription(kind),
3936
- actions: picker,
3937
3878
  children: [
3938
3879
  isEntityTag({ kind }) && extractingCount > 0 && /* @__PURE__ */ jsxs(
3939
3880
  "p",
@@ -3954,15 +3895,15 @@ function KindSection({
3954
3895
  ConnectedTagTable,
3955
3896
  {
3956
3897
  kind,
3898
+ actions: picker,
3899
+ secondaryActions: tools,
3957
3900
  linksLimit: MATRIX_LINKS,
3958
3901
  filter: ctx.filter,
3959
3902
  addRows: false,
3960
3903
  downloadable: false,
3961
3904
  onOpenTag: ctx.onOpenTag,
3962
3905
  onOpenRow: ctx.onOpenTag,
3963
- onOpenDocument: (id) => openDocument(id),
3964
- onOpenFact: ctx.onOpenFact,
3965
- onOpenThread: (id) => openConversation(id),
3906
+ onOpenTaggedItems: ctx.onOpenTaggedItems,
3966
3907
  labels: tagTableLabels(kind),
3967
3908
  testId: `tags-table-${kind}`
3968
3909
  }
@@ -3979,20 +3920,17 @@ function TagSection({
3979
3920
  onEdit,
3980
3921
  onDelete,
3981
3922
  onBack,
3982
- renderPassages,
3983
- picker
3923
+ renderPassages
3984
3924
  }) {
3985
3925
  const { notify: notify17, openDocument, openConversation } = useBlocksEnvironment();
3986
3926
  const { people, tagOptions } = useTagValueOptions();
3987
3927
  const setValues = useSetTagValues();
3988
- const update = useUpdateTag();
3989
- const updateTag = (change, done) => update.mutateAsync({ tagId: tag.external_id, change }).then(() => notify17(done, "success")).catch((e) => notify17(refusalReason(e, `Could not change "${tag.name}"`), "error"));
3990
3928
  const hasRows = !isFlatKind(tag.kind) && getChildTags([...tags], tag.external_id).length > 0;
3991
3929
  const schema = useTagKindSchema(tag.kind);
3992
3930
  const detail = useTags(void 0, {
3993
3931
  ids: [tag.external_id],
3994
3932
  include: ["links"],
3995
- linksLimit: TAG_LINKS_LIMIT
3933
+ linksLimit: ctx.onOpenTaggedItems ? 0 : TAG_LINKS_LIMIT
3996
3934
  });
3997
3935
  const detailRow = detail.data?.[0];
3998
3936
  return /* @__PURE__ */ jsxs(
@@ -4000,13 +3938,19 @@ function TagSection({
4000
3938
  {
4001
3939
  testId: "tags-tag",
4002
3940
  title: /* @__PURE__ */ jsxs("span", { className: "flex flex-wrap items-center gap-2", children: [
3941
+ /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", onClick: onBack, "data-testid": "tags-back", children: [
3942
+ /* @__PURE__ */ jsx(ArrowLeft, { className: "size-4" }),
3943
+ " ",
3944
+ tagKindTitle(tag.kind, { plural: true })
3945
+ ] }),
3946
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "/" }),
4003
3947
  /* @__PURE__ */ jsx(
4004
3948
  "span",
4005
3949
  {
4006
3950
  className: "min-w-0 break-words",
4007
3951
  "data-testid": "tags-tag-name",
4008
3952
  "data-tag-id": tag.external_id,
4009
- children: tag.name
3953
+ children: /* @__PURE__ */ jsx(TagEntity, { tag, size: "lg", wrap: true })
4010
3954
  }
4011
3955
  ),
4012
3956
  /* @__PURE__ */ jsxs("span", { className: "rounded-full border border-border px-2 py-0.5 text-xs font-normal text-muted-foreground", children: [
@@ -4015,39 +3959,46 @@ function TagSection({
4015
3959
  ] })
4016
3960
  ] }),
4017
3961
  description: tag.instruction || void 0,
4018
- actions: /* @__PURE__ */ jsxs(Fragment, { children: [
4019
- actions,
4020
- /* @__PURE__ */ jsx(
4021
- TagPlacement,
4022
- {
4023
- tag,
4024
- tags,
4025
- onChange: (change, done) => void updateTag(change, done)
4026
- }
4027
- ),
4028
- onEdit && /* @__PURE__ */ jsxs(Button, { variant: "outline", size: "sm", onClick: onEdit, "data-testid": "tags-edit", children: [
4029
- /* @__PURE__ */ jsx(Pencil, { className: "size-4" }),
4030
- " Edit"
4031
- ] }),
3962
+ actions: /* @__PURE__ */ jsxs(Popover, { children: [
3963
+ /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", "aria-label": "More tag actions", "data-testid": "tags-more", children: /* @__PURE__ */ jsx(MoreHorizontal, { className: "size-4" }) }) }),
4032
3964
  /* @__PURE__ */ jsxs(
4033
- Button,
3965
+ PopoverContent,
4034
3966
  {
4035
- variant: "outline",
4036
- size: "sm",
4037
- onClick: onDelete,
4038
- className: "text-red-text",
4039
- "data-testid": "tags-delete",
3967
+ align: "end",
3968
+ className: "flex w-auto min-w-48 flex-col items-stretch gap-1 p-2",
4040
3969
  children: [
4041
- /* @__PURE__ */ jsx(Trash2, { className: "size-4" }),
4042
- " Delete"
3970
+ onEdit && /* @__PURE__ */ jsxs(
3971
+ Button,
3972
+ {
3973
+ variant: "ghost",
3974
+ size: "sm",
3975
+ onClick: onEdit,
3976
+ "data-testid": "tags-edit",
3977
+ className: "justify-start",
3978
+ children: [
3979
+ /* @__PURE__ */ jsx(Pencil, { className: "size-4" }),
3980
+ " Edit tag"
3981
+ ]
3982
+ }
3983
+ ),
3984
+ actions,
3985
+ /* @__PURE__ */ jsxs(
3986
+ Button,
3987
+ {
3988
+ variant: "ghost",
3989
+ size: "sm",
3990
+ onClick: onDelete,
3991
+ className: "justify-start text-red-text",
3992
+ "data-testid": "tags-delete",
3993
+ children: [
3994
+ /* @__PURE__ */ jsx(Trash2, { className: "size-4" }),
3995
+ " Delete tag"
3996
+ ]
3997
+ }
3998
+ )
4043
3999
  ]
4044
4000
  }
4045
- ),
4046
- /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", onClick: onBack, "data-testid": "tags-back", children: [
4047
- "All ",
4048
- tagKindTitle(tag.kind, { plural: true }).toLowerCase()
4049
- ] }),
4050
- picker
4001
+ )
4051
4002
  ] }),
4052
4003
  children: [
4053
4004
  hasRows && /* @__PURE__ */ jsx(
@@ -4056,15 +4007,13 @@ function TagSection({
4056
4007
  kind: tag.kind,
4057
4008
  parentId: tag.external_id,
4058
4009
  linksLimit: MATRIX_LINKS,
4059
- filter: ctx.filter,
4010
+ filter: ctx.onOpenTaggedItems ? void 0 : ctx.filter,
4060
4011
  addRows: false,
4061
4012
  editColumns: false,
4062
4013
  downloadable: false,
4063
4014
  onOpenTag: ctx.onOpenTag,
4064
4015
  onOpenRow: ctx.onOpenTag,
4065
- onOpenDocument: (id) => openDocument(id),
4066
- onOpenFact: ctx.onOpenFact,
4067
- onOpenThread: (id) => openConversation(id),
4016
+ onOpenTaggedItems: ctx.onOpenTaggedItems,
4068
4017
  labels: tagTableLabels(tag.kind),
4069
4018
  testId: "tags-rows"
4070
4019
  }
@@ -4072,7 +4021,9 @@ function TagSection({
4072
4021
  /* @__PURE__ */ jsx(
4073
4022
  TagDetail,
4074
4023
  {
4075
- row: detailRow && narrowTagRow(detailRow, ctx.filter.matches),
4024
+ onOpenTaggedItems: ctx.onOpenTaggedItems,
4025
+ fieldLabels: tagTableLabels(tag.kind),
4026
+ row: ctx.onOpenTaggedItems ? detailRow : detailRow && narrowTagRow(detailRow, ctx.filter.matches),
4076
4027
  fields: schema.data?.fields ?? [],
4077
4028
  isLoading: detail.isLoading,
4078
4029
  people,
@@ -4107,6 +4058,7 @@ var TAG_FILTER_FIELDS = [
4107
4058
  ];
4108
4059
  function ConnectedTagsPage({
4109
4060
  onOpenFact,
4061
+ onOpenTaggedItems,
4110
4062
  onOpenSmartSearch,
4111
4063
  onReview
4112
4064
  }) {
@@ -4115,7 +4067,6 @@ function ConnectedTagsPage({
4115
4067
  const { data: documents } = useConnectedDocuments();
4116
4068
  const { data: threads } = useConnectedConversations();
4117
4069
  const { data: facts = [] } = useFacts();
4118
- const createTag = useCreateTag();
4119
4070
  const deleteTag = useDeleteTag();
4120
4071
  const extract = useExtractEntities();
4121
4072
  const extractingDocIds = useEntityExtractionDocIds();
@@ -4143,10 +4094,6 @@ function ConnectedTagsPage({
4143
4094
  [combination, documents, facts, threads]
4144
4095
  );
4145
4096
  const tag = tagId ? tags.find((t) => t.external_id === tagId) : void 0;
4146
- const viewTags = useMemo(
4147
- () => tags.filter((t) => t.kind === view).sort((a, b) => a.name.localeCompare(b.name)),
4148
- [tags, view]
4149
- );
4150
4097
  const openTag = (id) => {
4151
4098
  const t = tags.find((x) => x.external_id === id);
4152
4099
  if (!t) return;
@@ -4157,19 +4104,6 @@ function ConnectedTagsPage({
4157
4104
  setView(next);
4158
4105
  setTagId(null);
4159
4106
  };
4160
- const onCreate = async (name, kind) => {
4161
- try {
4162
- const created = await createTag.mutateAsync({
4163
- name,
4164
- kind,
4165
- tagType: { type: kind === "annotation" ? "text" : "checkbox", options: [] },
4166
- shared: true
4167
- });
4168
- setTagId(created.external_id);
4169
- } catch (error) {
4170
- notify17(refusalReason(error, `Could not add "${name}"`), "error");
4171
- }
4172
- };
4173
4107
  const onDelete = async (t) => {
4174
4108
  const nested = getChildTags([...tags], t.external_id);
4175
4109
  const uses = tagUseCount(t);
@@ -4202,20 +4136,16 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
4202
4136
  throw error;
4203
4137
  }
4204
4138
  };
4205
- const picker = /* @__PURE__ */ jsx(
4206
- TagPicker,
4207
- {
4208
- tags: viewTags,
4209
- selectedId: tag?.external_id,
4210
- kinds: [view],
4211
- onSelect: openTag,
4212
- onCreate: view === "search" ? void 0 : onCreate
4213
- }
4214
- );
4139
+ const picker = view === "search" ? null : /* @__PURE__ */ jsxs(Button, { variant: "outline", size: "sm", onClick: () => setEditing(true), "data-testid": "tags-new", children: [
4140
+ /* @__PURE__ */ jsx(Plus, { className: "size-4" }),
4141
+ " New ",
4142
+ tagKindNouns(view).singular
4143
+ ] });
4215
4144
  const ctx = {
4216
4145
  filter: { matches, text: filterText, fields: filterFields },
4217
4146
  onOpenTag: openTag,
4218
- onOpenFact
4147
+ onOpenFact,
4148
+ onOpenTaggedItems
4219
4149
  };
4220
4150
  const n = tagsPageNouns();
4221
4151
  const action = view === "person" || view === "organisation" ? {
@@ -4240,6 +4170,16 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
4240
4170
  }),
4241
4171
  testId: "tags-review"
4242
4172
  };
4173
+ const tagFilter = /* @__PURE__ */ jsx(
4174
+ TagCombineFilter,
4175
+ {
4176
+ tags,
4177
+ combination,
4178
+ onChange: setCombination,
4179
+ kinds: [view],
4180
+ triggerClassName: "inline-flex items-center gap-0.5 h-6 rounded px-1 text-muted-foreground hover:bg-foreground/10 cursor-pointer transition-colors pointer-coarse:h-11! pointer-coarse:min-w-11 pointer-coarse:justify-center"
4181
+ }
4182
+ );
4243
4183
  return /* @__PURE__ */ jsxs("div", { className: "h-full min-h-0 overflow-y-auto", "data-testid": "tags-page", children: [
4244
4184
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-6 p-2 sm:p-4", children: [
4245
4185
  /* @__PURE__ */ jsxs("div", { className: "sticky top-0 z-10 -mx-2 -mt-2 bg-background sm:-mx-4 sm:-mt-4", children: [
@@ -4260,7 +4200,7 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
4260
4200
  onTabChange: () => {
4261
4201
  },
4262
4202
  variant: "underline",
4263
- firstTabContent: /* @__PURE__ */ jsx(FilesFilterBar, { className: "flex-none", "data-testid": "tags-header-actions", children: /* @__PURE__ */ jsx(
4203
+ firstTabContent: tag ? onOpenTaggedItems ? void 0 : tagFilter : /* @__PURE__ */ jsx(FilesFilterBar, { className: "flex-none", "data-testid": "tags-header-actions", children: /* @__PURE__ */ jsx(
4264
4204
  FilterInput,
4265
4205
  {
4266
4206
  value: filterText,
@@ -4268,7 +4208,10 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
4268
4208
  fieldOptions: TAG_FILTER_FIELDS,
4269
4209
  fields: filterFields,
4270
4210
  onFieldsChange: (f) => setFilterFields(f.length ? f : ["name"]),
4271
- labels: { fieldNames: { name: "Name", values: "Field values" } },
4211
+ labels: {
4212
+ placeholder: "Search tags\u2026",
4213
+ fieldNames: { name: "Name", values: "Field values" }
4214
+ },
4272
4215
  testIds: {
4273
4216
  root: "tags-filter",
4274
4217
  input: "tags-filter-input",
@@ -4276,16 +4219,7 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
4276
4219
  field: (f) => `tags-filter-field-${f}`
4277
4220
  },
4278
4221
  className: "w-56",
4279
- filter: /* @__PURE__ */ jsx(
4280
- TagCombineFilter,
4281
- {
4282
- tags,
4283
- combination,
4284
- onChange: setCombination,
4285
- kinds: [view],
4286
- triggerClassName: "inline-flex items-center gap-0.5 h-6 rounded px-1 text-muted-foreground hover:bg-foreground/10 cursor-pointer transition-colors pointer-coarse:h-11! pointer-coarse:min-w-11 pointer-coarse:justify-center"
4287
- }
4288
- )
4222
+ filter: tagFilter
4289
4223
  }
4290
4224
  ) }),
4291
4225
  centerContent: /* @__PURE__ */ jsx(FilesViewCenter, { children: /* @__PURE__ */ jsx(
@@ -4305,25 +4239,10 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
4305
4239
  containerCollapse: true,
4306
4240
  size: "sm"
4307
4241
  }
4308
- ) }),
4309
- rightContent: (isCompact) => action ? /* @__PURE__ */ jsxs(
4310
- Button,
4311
- {
4312
- variant: "default",
4313
- className: "gap-2",
4314
- onClick: action.run,
4315
- "aria-label": action.title,
4316
- title: action.title,
4317
- "data-testid": action.testId,
4318
- children: [
4319
- action.icon,
4320
- /* @__PURE__ */ jsx("span", { className: isCompact ? "hidden" : "inline", children: action.label })
4321
- ]
4322
- }
4323
- ) : null
4242
+ ) })
4324
4243
  }
4325
4244
  ),
4326
- /* @__PURE__ */ jsx("div", { className: "px-4 pb-2 empty:hidden sm:px-6", children: /* @__PURE__ */ jsx(TagFilterChips, { tags, combination, onChange: setCombination }) })
4245
+ /* @__PURE__ */ jsx("div", { className: "px-4 pb-2 empty:hidden sm:px-6", children: (!tag || !onOpenTaggedItems) && /* @__PURE__ */ jsx(TagFilterChips, { tags, combination, onChange: setCombination }) })
4327
4246
  ] }),
4328
4247
  /* @__PURE__ */ jsx("main", { className: "flex flex-col gap-6", "data-testid": "tags-main", children: tag ? /* @__PURE__ */ jsx(
4329
4248
  TagSection,
@@ -4331,7 +4250,29 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
4331
4250
  tag,
4332
4251
  tags,
4333
4252
  ctx,
4334
- actions: isDefinitionsLabel(tag) ? /* @__PURE__ */ jsx(GlossaryExport, { labelId: tag.external_id, nameOf: (id) => docOf(id)?.file_name }) : void 0,
4253
+ actions: /* @__PURE__ */ jsxs(Fragment, { children: [
4254
+ action && /* @__PURE__ */ jsxs(
4255
+ Button,
4256
+ {
4257
+ variant: "ghost",
4258
+ size: "sm",
4259
+ onClick: action.run,
4260
+ title: action.title,
4261
+ "data-testid": action.testId,
4262
+ children: [
4263
+ action.icon,
4264
+ action.label
4265
+ ]
4266
+ }
4267
+ ),
4268
+ isDefinitionsLabel(tag) && /* @__PURE__ */ jsx(
4269
+ GlossaryExport,
4270
+ {
4271
+ labelId: tag.external_id,
4272
+ nameOf: (id) => docOf(id)?.file_name
4273
+ }
4274
+ )
4275
+ ] }),
4335
4276
  onEdit: () => setEditing(true),
4336
4277
  onDelete: () => void onDelete(tag),
4337
4278
  onBack: () => setTagId(null),
@@ -4344,8 +4285,7 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
4344
4285
  docOf,
4345
4286
  testId: `tags-detail-doc-${docId}-passages`
4346
4287
  }
4347
- ),
4348
- picker
4288
+ )
4349
4289
  },
4350
4290
  tag.external_id
4351
4291
  ) : /* @__PURE__ */ jsx(
@@ -4354,7 +4294,21 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
4354
4294
  kind: view,
4355
4295
  ctx,
4356
4296
  extractingCount: extractingDocIds.length,
4357
- picker
4297
+ picker,
4298
+ tools: action && /* @__PURE__ */ jsxs(
4299
+ Button,
4300
+ {
4301
+ variant: "ghost",
4302
+ size: "sm",
4303
+ onClick: action.run,
4304
+ title: action.title,
4305
+ "data-testid": action.testId,
4306
+ children: [
4307
+ action.icon,
4308
+ action.label
4309
+ ]
4310
+ }
4311
+ )
4358
4312
  },
4359
4313
  view
4360
4314
  ) })
@@ -4362,7 +4316,8 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
4362
4316
  /* @__PURE__ */ jsx(
4363
4317
  ConnectedTagEditorDialog,
4364
4318
  {
4365
- open: editing && !!tag,
4319
+ open: editing,
4320
+ defaultKind: view,
4366
4321
  onOpenChange: setEditing,
4367
4322
  tag,
4368
4323
  tags: tags.filter((t) => t.kind !== "search"),
@@ -5116,6 +5071,15 @@ function useFactFilters(notes, view, chat) {
5116
5071
  () => tagsForScope(filterDocumentTags(workspaceTagsRaw), "fact").filter(isLabelTag),
5117
5072
  [workspaceTagsRaw]
5118
5073
  );
5074
+ const filterTags = useMemo(
5075
+ () => [
5076
+ ...labelTags,
5077
+ ...workspaceTagsRaw.filter(
5078
+ (tag) => view.filters.get(tag.external_id) && !labelTags.some((label) => label.external_id === tag.external_id)
5079
+ )
5080
+ ],
5081
+ [labelTags, workspaceTagsRaw, view.filters]
5082
+ );
5119
5083
  const tagNameById = useMemo(() => {
5120
5084
  const map = /* @__PURE__ */ new Map();
5121
5085
  for (const t of labelTags) map.set(t.external_id, (t.name ?? "").toLowerCase());
@@ -5132,9 +5096,9 @@ function useFactFilters(notes, view, chat) {
5132
5096
  "verified",
5133
5097
  "in_chat",
5134
5098
  "created_by_me",
5135
- ...labelTags.map((t) => t.external_id)
5099
+ ...filterTags.map((t) => t.external_id)
5136
5100
  ],
5137
- [labelTags]
5101
+ [filterTags]
5138
5102
  );
5139
5103
  const getFactFilterAttributes = useCallback(
5140
5104
  (f) => {
@@ -5145,12 +5109,15 @@ function useFactFilters(notes, view, chat) {
5145
5109
  in_chat: chatFactIdSet.has(f.external_id),
5146
5110
  created_by_me: !!currentUserId && f.created_by_ext_id === currentUserId
5147
5111
  };
5148
- for (const t of labelTags) attrs[t.external_id] = tagIds.has(t.external_id);
5112
+ for (const t of filterTags) attrs[t.external_id] = tagIds.has(t.external_id);
5149
5113
  return attrs;
5150
5114
  },
5151
- [labelTags, currentUserId, chatFactIdSet]
5115
+ [filterTags, currentUserId, chatFactIdSet]
5116
+ );
5117
+ const factFilters = useMemo(
5118
+ () => new Map([...view.filters].filter(([id]) => factFilterIds.includes(id))),
5119
+ [view.filters, factFilterIds]
5152
5120
  );
5153
- const factFilters = view.filters;
5154
5121
  const setFactFilters = view.setFilters;
5155
5122
  const quickFilteredNotes = useMemo(
5156
5123
  () => applyInvertedIndexFilter(
@@ -5192,37 +5159,29 @@ function useFactFilters(notes, view, chat) {
5192
5159
  count: currentUserId ? notes.filter((n) => n.created_by_ext_id === currentUserId).length : 0
5193
5160
  }
5194
5161
  ];
5195
- for (const t of labelTags) {
5196
- const color = getEntityColor(t.external_id, "medium");
5162
+ for (const t of filterTags) {
5197
5163
  opts.push({
5198
5164
  id: t.external_id,
5199
5165
  label: t.name,
5200
- icon: /* @__PURE__ */ jsx(
5201
- "span",
5202
- {
5203
- className: "flex h-3.5 w-3.5 flex-shrink-0 items-center justify-center rounded",
5204
- style: { backgroundColor: color },
5205
- children: /* @__PURE__ */ jsx(Check, { size: 10, className: "flex-shrink-0 text-white", strokeWidth: 3 })
5206
- }
5207
- ),
5166
+ displayLabel: /* @__PURE__ */ jsx(TagEntity, { tag: t, size: "sm", showTooltip: false }),
5208
5167
  count: notes.filter((n) => n.tags.some((x) => x.tag_ext_id === t.external_id)).length
5209
5168
  });
5210
5169
  }
5211
5170
  return opts;
5212
- }, [notes, labelTags, currentUserId, chatFactIdSet]);
5171
+ }, [notes, filterTags, currentUserId, chatFactIdSet]);
5213
5172
  const factFilterGroups = useMemo(() => {
5214
5173
  const groups = [
5215
5174
  { label: "Quick filters", options: ["shared", "verified", "in_chat", "created_by_me"] }
5216
5175
  ];
5217
- if (labelTags.length > 0) {
5176
+ if (filterTags.length > 0) {
5218
5177
  groups.push({
5219
5178
  label: "Labels",
5220
- options: labelTags.map((t) => t.external_id),
5179
+ options: filterTags.map((t) => t.external_id),
5221
5180
  collapsible: true
5222
5181
  });
5223
5182
  }
5224
5183
  return groups;
5225
- }, [labelTags]);
5184
+ }, [filterTags]);
5226
5185
  const labelOptions = useMemo(
5227
5186
  () => labelTags.map((t) => ({
5228
5187
  id: t.external_id,
@@ -5282,6 +5241,7 @@ function useFactFilters(notes, view, chat) {
5282
5241
  const hasActiveFilters = factsFilter.trim().length > 0 || Array.from(factFilters.values()).some((v) => v !== null);
5283
5242
  return {
5284
5243
  labelTags,
5244
+ filterTags,
5285
5245
  createTagStable,
5286
5246
  makeTagPicker,
5287
5247
  factFilters,
@@ -6488,6 +6448,23 @@ function ConnectedFactsPage({
6488
6448
  ] })
6489
6449
  }
6490
6450
  ),
6451
+ /* @__PURE__ */ jsx("div", { className: "px-3 empty:hidden", children: /* @__PURE__ */ jsx(
6452
+ TagFilterChips,
6453
+ {
6454
+ tags: filters.filterTags,
6455
+ combination: new Map(
6456
+ [...filters.factFilters].filter(
6457
+ ([id]) => filters.filterTags.some((tag) => tag.external_id === id)
6458
+ )
6459
+ ),
6460
+ onChange: (next) => {
6461
+ const merged = new Map(filters.factFilters);
6462
+ for (const tag of filters.filterTags)
6463
+ merged.set(tag.external_id, next.get(tag.external_id) ?? null);
6464
+ filters.setFactFilters(merged);
6465
+ }
6466
+ }
6467
+ ) }),
6491
6468
  /* @__PURE__ */ jsx(
6492
6469
  FactComposer,
6493
6470
  {
@@ -15207,7 +15184,7 @@ function useConnectedWorkspaceList({
15207
15184
  };
15208
15185
  }
15209
15186
  var WorkspaceTableView = lazy(
15210
- () => import('../WorkspaceTableView-4INHJ7QK.js').then((m) => ({ default: m.WorkspaceTableView }))
15187
+ () => import('../WorkspaceTableView-4VMCTOFT.js').then((m) => ({ default: m.WorkspaceTableView }))
15211
15188
  );
15212
15189
  var WORKSPACES_TAB_ID = "workspaces";
15213
15190
  var defaultRenderMember2 = (user, size) => {
@@ -25994,14 +25971,7 @@ function useDocumentFilters({
25994
25971
  id: tag.external_id,
25995
25972
  label: tag.name,
25996
25973
  color: tagColor,
25997
- icon: /* @__PURE__ */ jsx(
25998
- "span",
25999
- {
26000
- className: "w-3.5 h-3.5 rounded flex items-center justify-center flex-shrink-0",
26001
- style: { backgroundColor: tagColor },
26002
- children: /* @__PURE__ */ jsx(Check, { size: 10, className: "text-white flex-shrink-0", strokeWidth: 3 })
26003
- }
26004
- ),
25974
+ displayLabel: /* @__PURE__ */ jsx(TagEntity, { tag, size: "sm", showTooltip: false }),
26005
25975
  count: tag.doctag_count
26006
25976
  });
26007
25977
  });
@@ -27947,10 +27917,10 @@ var TABLET_TABLE_BELOW = 860;
27947
27917
  var TABLET_VIEWPORT_BELOW = 1100;
27948
27918
  var NO_CONVERSATION_DOCUMENTS = [];
27949
27919
  var DocumentReviewCard = lazy(
27950
- () => import('../DocumentReviewCard-NDHCFYYT.js').then((module) => ({ default: module.DocumentReviewCard }))
27920
+ () => import('../DocumentReviewCard-KHMHG7A5.js').then((module) => ({ default: module.DocumentReviewCard }))
27951
27921
  );
27952
27922
  var ConnectedDocumentViewer = lazy(
27953
- () => import('../ConnectedDocumentViewer-U5TQ4LFJ.js').then((module) => ({
27923
+ () => import('../ConnectedDocumentViewer-4LRZ5N3L.js').then((module) => ({
27954
27924
  default: module.ConnectedDocumentViewer
27955
27925
  }))
27956
27926
  );
@@ -28557,6 +28527,21 @@ function ConnectedFilesPage({
28557
28527
  }
28558
28528
  )
28559
28529
  ] }),
28530
+ !isModal && /* @__PURE__ */ jsx("div", { className: "px-3 empty:hidden", children: /* @__PURE__ */ jsx(
28531
+ TagFilterChips,
28532
+ {
28533
+ tags: allTags,
28534
+ combination: new Map(
28535
+ [...documentFilters].filter(([id]) => allTags.some((tag) => tag.external_id === id))
28536
+ ),
28537
+ onChange: (next) => {
28538
+ const merged = new Map(documentFilters);
28539
+ for (const tag of allTags)
28540
+ merged.set(tag.external_id, next.get(tag.external_id) ?? null);
28541
+ setDocumentFilters(merged);
28542
+ }
28543
+ }
28544
+ ) }),
28560
28545
  /* @__PURE__ */ jsxs(FilesPageMain, { children: [
28561
28546
  viewMode === "grid" && /* @__PURE__ */ jsx(
28562
28547
  DocumentGrid,
@@ -32870,6 +32855,7 @@ function ConnectedAccountCluster({
32870
32855
  pages = [],
32871
32856
  activePage,
32872
32857
  showContacts = true,
32858
+ showNotifications = true,
32873
32859
  status,
32874
32860
  report,
32875
32861
  offline = false,
@@ -32892,9 +32878,10 @@ function ConnectedAccountCluster({
32892
32878
  const databasesOn = useFeature("databases");
32893
32879
  const mailEntitled = useIsEntitled("mail");
32894
32880
  const calendarEntitled = useIsEntitled("calendar");
32881
+ const calendarOn = useFeature("calendar");
32895
32882
  const offered = {
32896
32883
  mail: mailPolicy?.enabled && mailOn && mailEntitled && openMail ? () => openMail() : void 0,
32897
- calendar: calendarEntitled ? () => openCalendar() : void 0,
32884
+ calendar: calendarEntitled && calendarOn ? () => openCalendar() : void 0,
32898
32885
  databases: databasesOn ? openDatabases : void 0
32899
32886
  };
32900
32887
  const rowVariant = layout === "bar" ? "icon" : void 0;
@@ -32951,6 +32938,14 @@ function ConnectedAccountCluster({
32951
32938
  navigate(notification.href);
32952
32939
  return;
32953
32940
  }
32941
+ if (notification.onSelect) {
32942
+ notification.onSelect();
32943
+ return;
32944
+ }
32945
+ if (notification.href) {
32946
+ navigate(notification.href);
32947
+ return;
32948
+ }
32954
32949
  openNotifications({ focusId: notification.id });
32955
32950
  }),
32956
32951
  viewAllLabel: bellOptions?.viewAllLabel,
@@ -33015,7 +33010,7 @@ function ConnectedAccountCluster({
33015
33010
  calendar: pageRow("calendar", /* @__PURE__ */ jsx(CalendarDays, { className: "size-5" }), "Calendar"),
33016
33011
  databases: pageRow("databases", /* @__PURE__ */ jsx(Table2, { className: "size-5" }), "Databases"),
33017
33012
  report,
33018
- bell,
33013
+ bell: showNotifications ? bell : null,
33019
33014
  contacts,
33020
33015
  account: layout === "drawer" ? null : account,
33021
33016
  "data-testid": ids.cluster
@@ -33610,14 +33605,6 @@ async function renderAnnotatedScreenshot(image, marks, text2) {
33610
33605
  }
33611
33606
  return canvasToBlob(canvas);
33612
33607
  }
33613
- function aspectOptions(natural) {
33614
- return [
33615
- ...natural ? [{ label: "Screen", value: natural.width / natural.height }] : [],
33616
- { label: "16:9", value: 16 / 9 },
33617
- { label: "4:3", value: 4 / 3 },
33618
- { label: "Square", value: 1 }
33619
- ];
33620
- }
33621
33608
  function ReportProblemDialog({
33622
33609
  open,
33623
33610
  frame,
@@ -33626,7 +33613,7 @@ function ReportProblemDialog({
33626
33613
  onImageChange,
33627
33614
  onRetake,
33628
33615
  onClose,
33629
- fileNamePrefix = "problem",
33616
+ onSubmit,
33630
33617
  footnote
33631
33618
  }) {
33632
33619
  const { notify: notify17 } = useBlocksEnvironment();
@@ -33637,6 +33624,8 @@ function ReportProblemDialog({
33637
33624
  const [frameSize, setFrameSize] = useState(null);
33638
33625
  const [cropArea, setCropArea] = useState(null);
33639
33626
  const [busy, setBusy] = useState(false);
33627
+ const [failure, setFailure] = useState(null);
33628
+ const [submissionId] = useState(() => crypto.randomUUID());
33640
33629
  const imgRef = useRef(null);
33641
33630
  const dragStart = useRef(null);
33642
33631
  const frameUrl = useMemo(() => frame ? URL.createObjectURL(frame) : null, [frame]);
@@ -33655,9 +33644,6 @@ function ReportProblemDialog({
33655
33644
  setDraft(null);
33656
33645
  setNatural(null);
33657
33646
  }, [image]);
33658
- useEffect(() => {
33659
- if (!open) setDescription("");
33660
- }, [open]);
33661
33647
  const applyCrop = async () => {
33662
33648
  if (!frameUrl || !cropArea) return;
33663
33649
  setBusy(true);
@@ -33688,28 +33674,24 @@ function ReportProblemDialog({
33688
33674
  bitmap.close();
33689
33675
  }
33690
33676
  };
33691
- const download = async () => {
33692
- setBusy(true);
33693
- try {
33694
- const blob = await renderImage();
33695
- if (!blob) return;
33696
- const stamp = (/* @__PURE__ */ new Date()).toISOString().slice(0, 16).replace(/[:T]/g, "-");
33697
- downloadBlob(blob, `${fileNamePrefix}-${stamp}.png`);
33698
- } catch {
33699
- notify17("Couldn't save the screenshot. Please try again.", "error");
33700
- } finally {
33701
- setBusy(false);
33702
- }
33703
- };
33704
- const copy = async () => {
33677
+ const submit = async () => {
33678
+ if (!onSubmit || !description.trim()) return;
33705
33679
  setBusy(true);
33680
+ setFailure(null);
33706
33681
  try {
33707
- const blob = await renderImage();
33708
- if (!blob) return;
33709
- await navigator.clipboard.write([new ClipboardItem({ "image/png": blob })]);
33710
- notify17("Screenshot copied. Paste it into an email or chat.", "success");
33711
- } catch {
33712
- notify17("Your browser didn't allow copying the image. Use Download instead.", "warning");
33682
+ const rendered = image ? await renderImage() : null;
33683
+ if (image && !rendered) throw new Error("The screenshot is not ready. Please try again.");
33684
+ const receipt = await onSubmit({
33685
+ description: description.trim(),
33686
+ image: rendered ?? void 0,
33687
+ idempotencyKey: submissionId
33688
+ });
33689
+ notify17(`Support request #${receipt.ticket_id} sent.`, "success");
33690
+ onClose();
33691
+ } catch (error) {
33692
+ setFailure(
33693
+ error instanceof Error ? error.message : "Could not send your request. Please try again."
33694
+ );
33713
33695
  } finally {
33714
33696
  setBusy(false);
33715
33697
  }
@@ -33722,22 +33704,22 @@ function ReportProblemDialog({
33722
33704
  height: `${mark.h / natural.height * 100}%`
33723
33705
  } : void 0;
33724
33706
  const cropping = !!frameUrl;
33725
- return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange: (next) => !next && onClose(), children: /* @__PURE__ */ jsxs(
33707
+ return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange: (next) => !next && !busy && onClose(), children: /* @__PURE__ */ jsxs(
33726
33708
  DialogContent,
33727
33709
  {
33728
33710
  className: "flex max-h-[92vh] w-[min(96vw,64rem)] max-w-[96vw] flex-col gap-3 p-4 sm:max-w-[min(96vw,64rem)]",
33729
33711
  "data-testid": "report-problem-dialog",
33730
33712
  children: [
33731
33713
  /* @__PURE__ */ jsxs("div", { className: "pr-8", children: [
33732
- /* @__PURE__ */ jsx(DialogTitle, { children: "Report a problem" }),
33733
- /* @__PURE__ */ jsx(DialogDescription, { children: cropping ? "Crop the screenshot to the part that shows the problem. Only the cropped part is kept." : "Black out anything confidential: blacked-out areas are removed from the image." })
33714
+ /* @__PURE__ */ jsx(DialogTitle, { children: "Contact support" }),
33715
+ /* @__PURE__ */ jsx(DialogDescription, { children: cropping ? "Crop the screenshot to the part that shows the problem. Only the cropped part is kept." : image ? "Black out anything confidential before sending. Blacked-out areas are removed from the image." : "Tell us what you need help with. You can choose to add a screenshot." })
33734
33716
  ] }),
33735
33717
  cropping ? /* @__PURE__ */ jsxs("div", { className: "grid gap-2", children: [
33736
33718
  /* @__PURE__ */ jsx(
33737
33719
  ImageCropper,
33738
33720
  {
33739
33721
  image: frameUrl,
33740
- aspectOptions: aspectOptions(frameSize),
33722
+ aspect: frameSize ? frameSize.width / frameSize.height : window.innerWidth / window.innerHeight,
33741
33723
  maxZoom: 6,
33742
33724
  cropAreaClassName: "h-[50vh] min-h-64",
33743
33725
  onCropComplete: (area) => setCropArea(area)
@@ -33901,26 +33883,17 @@ function ReportProblemDialog({
33901
33883
  }
33902
33884
  )
33903
33885
  ] }),
33886
+ failure && /* @__PURE__ */ jsx("p", { role: "alert", className: "text-sm text-destructive", children: failure }),
33904
33887
  /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-end gap-2", children: [
33905
33888
  /* @__PURE__ */ jsx("span", { className: "mr-auto text-xs text-muted-foreground", children: footnote }),
33906
- /* @__PURE__ */ jsx(Button, { variant: "ghost", onClick: onClose, children: "Cancel" }),
33889
+ /* @__PURE__ */ jsx(Button, { variant: "ghost", onClick: onClose, disabled: busy, children: "Cancel" }),
33907
33890
  /* @__PURE__ */ jsx(
33908
33891
  Button,
33909
33892
  {
33910
- variant: "outline",
33911
- disabled: !natural || busy || cropping,
33912
- onClick: () => void copy(),
33913
- "data-testid": "report-copy",
33914
- children: "Copy image"
33915
- }
33916
- ),
33917
- /* @__PURE__ */ jsx(
33918
- Button,
33919
- {
33920
- disabled: !natural || busy || cropping,
33921
- onClick: () => void download(),
33922
- "data-testid": "report-download",
33923
- children: "Download"
33893
+ disabled: !onSubmit || !description.trim() || busy || cropping || !!image && !natural,
33894
+ onClick: () => void submit(),
33895
+ "data-testid": "report-send",
33896
+ children: busy ? "Sending\u2026" : "Send to support"
33924
33897
  }
33925
33898
  )
33926
33899
  ] })
@@ -33930,6 +33903,7 @@ function ReportProblemDialog({
33930
33903
  }
33931
33904
  function useReportProblem(options2 = {}) {
33932
33905
  const { notify: notify17 } = useBlocksEnvironment();
33906
+ const [reportKey, setReportKey] = useState(0);
33933
33907
  const [phase, setPhase] = useState("idle");
33934
33908
  const [frame, setFrame] = useState(null);
33935
33909
  const [image, setImage] = useState(null);
@@ -33948,6 +33922,7 @@ function useReportProblem(options2 = {}) {
33948
33922
  setPhase("describing");
33949
33923
  }, [notify17]);
33950
33924
  const reset = useCallback(() => {
33925
+ setReportKey((key) => key + 1);
33951
33926
  setPhase("idle");
33952
33927
  setFrame(null);
33953
33928
  setImage(null);
@@ -33982,25 +33957,34 @@ function useReportProblem(options2 = {}) {
33982
33957
  setPhase("framing");
33983
33958
  },
33984
33959
  onClose: reset
33985
- }
33960
+ },
33961
+ reportKey
33986
33962
  )
33987
33963
  ] });
33988
- return { start: () => void capture(), ui };
33964
+ return { start: () => setPhase("describing"), ui };
33989
33965
  }
33990
33966
  function ConnectedReportProblem({
33991
33967
  layout = "bar",
33992
33968
  onSelect,
33993
33969
  ...options2
33994
33970
  }) {
33995
- const report = useReportProblem(options2);
33971
+ const arbi = useArbi();
33972
+ const report = useReportProblem({
33973
+ ...options2,
33974
+ onSubmit: options2.onSubmit ?? ((report2) => arbi.support.create({
33975
+ description: report2.description,
33976
+ screenshot: report2.image,
33977
+ idempotencyKey: report2.idempotencyKey
33978
+ }))
33979
+ });
33996
33980
  const bar = layout === "bar";
33997
33981
  return /* @__PURE__ */ jsxs(Fragment, { children: [
33998
33982
  /* @__PURE__ */ jsx(
33999
33983
  SidebarBadgeRow,
34000
33984
  {
34001
- icon: /* @__PURE__ */ jsx(Bug, { className: "size-5" }),
34002
- label: "Report a problem",
34003
- ariaLabel: "Report a problem",
33985
+ icon: /* @__PURE__ */ jsx(MessageCircleQuestionMark, { className: "size-5" }),
33986
+ label: "Contact support",
33987
+ ariaLabel: "Contact support",
34004
33988
  variant: bar ? "icon" : void 0,
34005
33989
  className: bar ? "size-9 pointer-coarse:size-11" : void 0,
34006
33990
  "data-testid": "report-problem-button",
@@ -35261,55 +35245,30 @@ function ConnectedTaskStartDialog({
35261
35245
  ] });
35262
35246
  }
35263
35247
  function ConnectedThreadLauncher({ autoFocus }) {
35264
- const task = useTaskStart({ open: false, onOpenChange: () => {
35265
- } });
35266
- const { notify: notify17, openConversation: navigate, openFiles } = useBlocksEnvironment();
35267
- const [later, setLater] = useState(null);
35268
- return /* @__PURE__ */ jsxs(Fragment, { children: [
35269
- /* @__PURE__ */ jsx(
35270
- ThreadLauncher,
35271
- {
35272
- workflows: task.workflows,
35273
- people: task.people,
35274
- isPending: task.busy,
35275
- error: task.error,
35276
- startLabel: task.startLabel,
35277
- autoFocus,
35278
- onStart: async (values) => {
35279
- const result = await task.start(values);
35280
- if (result.kind === "documents") {
35281
- notify17("The workflow is running", "success", {
35282
- action: { label: "Open Files", onClick: () => openFiles() }
35283
- });
35284
- return null;
35285
- }
35286
- if (result.kind === "pending") return null;
35287
- const title = values.workflowId ? task.workflows.find((w) => w.external_id === values.workflowId)?.name ?? "" : values.prompt.split("\n")[0];
35288
- return { id: result.conversationId, title };
35289
- },
35290
- onLater: (values) => setLater(
35291
- values.workflowId ? {
35292
- workflow: task.workflows.find((w) => w.external_id === values.workflowId),
35293
- shared: values.shared
35294
- } : { prompt: values.prompt, todo: values.todo, shared: values.shared }
35295
- ),
35296
- onOpen: (id) => navigate(id)
35297
- }
35298
- ),
35299
- later && /* @__PURE__ */ jsx(
35300
- ConnectedTaskComposer,
35301
- {
35302
- open: true,
35303
- onOpenChange: (next) => !next && setLater(null),
35304
- kind: "workflow",
35305
- startLater: true,
35306
- initialPrompt: later.prompt,
35307
- initialWorkflowId: later.todo ? REMIND_TASK_ID : void 0,
35308
- initialShared: later.shared,
35309
- launchWorkflow: later.workflow
35310
- }
35311
- )
35312
- ] });
35248
+ const [draft, setDraft] = useState("");
35249
+ const input = useRef(null);
35250
+ const { openNewConversation } = useBlocksEnvironment();
35251
+ useEffect(() => {
35252
+ if (autoFocus) input.current?.focus();
35253
+ }, [autoFocus]);
35254
+ const send = () => {
35255
+ if (!draft.trim()) return;
35256
+ openNewConversation({ prompt: draft });
35257
+ setDraft("");
35258
+ };
35259
+ return /* @__PURE__ */ jsx(ComposerDock, { children: /* @__PURE__ */ jsx(ComposerContainer, { className: "mx-auto max-w-[49rem] px-3 sm:px-6", children: /* @__PURE__ */ jsx(
35260
+ ConversationComposer,
35261
+ {
35262
+ value: draft,
35263
+ onValueChange: setDraft,
35264
+ inputRef: input,
35265
+ handleSendMessage: send,
35266
+ isConversationEmpty: true,
35267
+ shouldOfferFollowUp: false,
35268
+ modelSelector: /* @__PURE__ */ jsx(ConnectedModelSelector, { variant: "compact" }),
35269
+ rightButton: /* @__PURE__ */ jsx(ComposerSend, { onSend: send, disabled: !draft.trim() })
35270
+ }
35271
+ ) }) });
35313
35272
  }
35314
35273
  function ConnectedNewThreadDialog({
35315
35274
  open,
@@ -35717,18 +35676,88 @@ function AgentControlBar({
35717
35676
  }
35718
35677
  );
35719
35678
  }
35679
+ function sourceTitle(chunk, docTitles) {
35680
+ const displayTitle = chunk.metadata.doc_ext_id ? docTitles.get(chunk.metadata.doc_ext_id) : void 0;
35681
+ return displayTitle ?? chunk.metadata.doc_title ?? chunk.metadata.doc_ext_id ?? "Source";
35682
+ }
35683
+ function retrievedSources(citationData, docTitles) {
35684
+ const seen = /* @__PURE__ */ new Map();
35685
+ Object.values(citationData || {}).forEach((docChunks) => {
35686
+ if (!Array.isArray(docChunks)) return;
35687
+ docChunks.forEach((chunk) => {
35688
+ const chunkId = chunk?.metadata?.chunk_ext_id;
35689
+ if (!chunkId) return;
35690
+ const key = `${chunk.metadata.doc_ext_id ?? ""}:${chunk.metadata.page_number ?? ""}`;
35691
+ if (seen.has(key)) return;
35692
+ seen.set(key, {
35693
+ num: String(seen.size + 1),
35694
+ chunkIds: [chunkId],
35695
+ chunk,
35696
+ title: sourceTitle(chunk, docTitles),
35697
+ page: chunk.metadata.page_number
35698
+ });
35699
+ });
35700
+ });
35701
+ return [...seen.values()];
35702
+ }
35703
+ var SourceChips = ({ messageId, citations, citationData }) => {
35704
+ const compact = useCompactChat();
35705
+ const session = useArbiSessionStore();
35706
+ const openChunk = useOpenChunk();
35707
+ const docTitles = useWorkspaceDocTitles();
35708
+ const sources = useMemo(() => {
35709
+ if (!citations) return retrievedSources(citationData, docTitles);
35710
+ const chunkMap = /* @__PURE__ */ new Map();
35711
+ Object.values(citationData || {}).forEach((docChunks) => {
35712
+ if (Array.isArray(docChunks)) {
35713
+ docChunks.forEach((chunk) => {
35714
+ if (chunk?.metadata?.chunk_ext_id) chunkMap.set(chunk.metadata.chunk_ext_id, chunk);
35715
+ });
35716
+ }
35717
+ });
35718
+ return Object.entries(citations).sort(([a], [b]) => Number(a) - Number(b)).map(([num, chunkIds]) => {
35719
+ const chunk = chunkIds.map((id) => chunkMap.get(id)).find((c) => !!c);
35720
+ if (!chunk) return null;
35721
+ return {
35722
+ num,
35723
+ chunkIds,
35724
+ chunk,
35725
+ title: sourceTitle(chunk, docTitles),
35726
+ page: chunk.metadata.page_number
35727
+ };
35728
+ }).filter((c) => c !== null);
35729
+ }, [citations, citationData, docTitles]);
35730
+ const open = (num) => {
35731
+ const source = sources.find((s) => s.num === num);
35732
+ if (!source) return;
35733
+ if (!citations) {
35734
+ openChunk(source.chunk);
35735
+ return;
35736
+ }
35737
+ session.setActiveCitationKey(`${messageId}-${num}`);
35738
+ if (source.chunk.metadata.chunk_ext_id) openChunk(source.chunk);
35739
+ };
35740
+ if (compact && sources.length)
35741
+ return /* @__PURE__ */ jsxs("details", { className: "mt-2 text-xs text-muted-foreground", children: [
35742
+ /* @__PURE__ */ jsx("summary", { className: "cursor-pointer py-1", children: "Sources" }),
35743
+ /* @__PURE__ */ jsx(MessageSources, { messageId, sources, onOpenSource: open })
35744
+ ] });
35745
+ return /* @__PURE__ */ jsx(MessageSources, { messageId, sources, onOpenSource: open });
35746
+ };
35720
35747
  var ConversationSendButton = memo(function ConversationSendButton2({
35721
35748
  onClick,
35722
35749
  hasOrphanedMessage
35723
35750
  }) {
35724
35751
  const draftMessage = useArbiSessionState(selectDraft);
35752
+ const assistantName = useAssistantName();
35753
+ const recipients = assistantLabels(assistantName);
35725
35754
  const showRetryIcon = hasOrphanedMessage && draftMessage === "";
35726
35755
  return /* @__PURE__ */ jsx(
35727
35756
  ComposerSend,
35728
35757
  {
35729
35758
  onSend: onClick,
35730
35759
  isRetry: showRetryIcon,
35731
- disabled: !showRetryIcon && !hasMessageBody(draftMessage)
35760
+ disabled: !showRetryIcon && !hasMessageBody(draftMessage, recipients)
35732
35761
  }
35733
35762
  );
35734
35763
  });
@@ -35797,6 +35826,15 @@ var MicButton = memo(function MicButton2({
35797
35826
  isRecording && /* @__PURE__ */ jsx(MicRecordingOverlay, { level: recorder.level, elapsedMs: recorder.elapsedMs })
35798
35827
  ] });
35799
35828
  });
35829
+ var THREAD_TAG_FILTER_VIEW = "threads.tagFilter";
35830
+ function threadTagForWorkspace(filter, workspaceId) {
35831
+ return filter?.workspaceId === workspaceId ? filter?.tagId : void 0;
35832
+ }
35833
+ function useThreadTagFilter() {
35834
+ const workspaceId = useArbiSessionState((state) => state.workspaceId);
35835
+ const [filter, setFilter] = useTransientView(THREAD_TAG_FILTER_VIEW, null);
35836
+ return { tagId: threadTagForWorkspace(filter, workspaceId), clear: () => setFilter(void 0) };
35837
+ }
35800
35838
  function ThreadSearch({ children, ResultsBoundary = ErrorBoundary }) {
35801
35839
  const [query, setQuery] = useState("");
35802
35840
  const [submitted, setSubmitted] = useState("");
@@ -35888,7 +35926,12 @@ function ConnectedThreadsPage({
35888
35926
  const [meetingFilter] = useTransientView("threads.meetings", null);
35889
35927
  const [topbarFilterQuery] = useTransientView("topbar.filter", "");
35890
35928
  const currentUserExtId = useArbiSession().user?.external_id;
35891
- const tasks = useStableRecencyOrder(all);
35929
+ const { tagId } = useThreadTagFilter();
35930
+ const tagged = useMemo(
35931
+ () => tagId ? all.filter((row2) => row2.label_ext_ids?.includes(tagId)) : all,
35932
+ [all, tagId]
35933
+ );
35934
+ const tasks = useStableRecencyOrder(tagged);
35892
35935
  const updateConversation = useUpdateConversation();
35893
35936
  const deleteConversation = useDeleteConversation();
35894
35937
  const canEditShared = useCanEditShared();
@@ -36254,10 +36297,6 @@ function ConnectedConversationPage({
36254
36297
  const isGuest = workspaceRole === "guest";
36255
36298
  const canUpload = workspaceRole !== null && !isGuest;
36256
36299
  const [urlDialogOpen, setUrlDialogOpen] = useState(false);
36257
- const [focusLauncher, setFocusLauncher] = useState(false);
36258
- useEffect(() => {
36259
- if (isInChat) setFocusLauncher(false);
36260
- }, [isInChat]);
36261
36300
  const uploadUrls = useAddFromUrls({
36262
36301
  onZipFiles: (files) => openDialog("upload", { tab: "upload", files, source: "computer" })
36263
36302
  });
@@ -36272,7 +36311,7 @@ function ConnectedConversationPage({
36272
36311
  session.clearConversationError(currentConversationId || "new");
36273
36312
  session.startNewConversation();
36274
36313
  session.openThreadTab(null);
36275
- session.setPaMode(true);
36314
+ if (asPaChat) session.setPaMode(true);
36276
36315
  };
36277
36316
  const threadFilterDropdown = /* @__PURE__ */ jsx(
36278
36317
  ConnectedFilterDropdown,
@@ -36337,15 +36376,16 @@ function ConnectedConversationPage({
36337
36376
  }
36338
36377
  );
36339
36378
  const { data: workspaceTags = [] } = useTags();
36379
+ const { tagId: threadTagId, clear: clearThreadTag } = useThreadTagFilter();
36340
36380
  const historyCount = filterConversationRows(
36341
- conversations,
36381
+ threadTagId ? conversations.filter((row2) => row2.label_ext_ids?.includes(threadTagId)) : conversations,
36342
36382
  threadFilter,
36343
36383
  (row2) => workspaceTags.filter((tag) => row2.label_ext_ids?.includes(tag.external_id)).map((tag) => tag.name).join(" "),
36344
36384
  doneFilter,
36345
36385
  visibilityFilters,
36346
36386
  meetingFilter
36347
36387
  ).length;
36348
- const historyFiltered = Boolean(threadFilter.trim()) || doneFilter !== null || meetingFilter !== null || Object.values(visibilityFilters).some(Boolean);
36388
+ const historyFiltered = Boolean(threadTagId) || Boolean(threadFilter.trim()) || doneFilter !== null || meetingFilter !== null || Object.values(visibilityFilters).some(Boolean);
36349
36389
  return /* @__PURE__ */ jsxs(Fragment, { children: [
36350
36390
  /* @__PURE__ */ jsxs(ConversationRoot, { children: [
36351
36391
  /* @__PURE__ */ jsxs(ConversationHeader, { children: [
@@ -36354,7 +36394,17 @@ function ConnectedConversationPage({
36354
36394
  {
36355
36395
  historyCount,
36356
36396
  historyFiltered,
36357
- historyActions: threadFilterBox,
36397
+ historyActions: /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-2", children: [
36398
+ threadFilterBox,
36399
+ threadTagId && /* @__PURE__ */ jsx(
36400
+ TagFilterChips,
36401
+ {
36402
+ tags: workspaceTags,
36403
+ combination: /* @__PURE__ */ new Map([[threadTagId, "include"]]),
36404
+ onChange: clearThreadTag
36405
+ }
36406
+ )
36407
+ ] }),
36358
36408
  rightContent: (isCompact) => /* @__PURE__ */ jsxs(ConversationHeaderActions, { children: [
36359
36409
  searchEnabled && /* @__PURE__ */ jsx(
36360
36410
  SemanticSearchButton,
@@ -36378,12 +36428,11 @@ function ConnectedConversationPage({
36378
36428
  labels: { newEntity: () => "New Task" },
36379
36429
  isCompact,
36380
36430
  onClick: () => {
36381
- setFocusLauncher(true);
36382
- setActiveTab("history");
36431
+ startNewChat(false);
36383
36432
  }
36384
36433
  }
36385
36434
  ),
36386
- showPaMode && /* @__PURE__ */ jsx(NewPaChatButton, { isCompact, onClick: () => startNewChat() })
36435
+ showPaMode && /* @__PURE__ */ jsx(NewPaChatButton, { isCompact, onClick: () => startNewChat(true) })
36387
36436
  ] })
36388
36437
  }
36389
36438
  ),
@@ -36411,7 +36460,7 @@ function ConnectedConversationPage({
36411
36460
  )
36412
36461
  }
36413
36462
  ),
36414
- !isInChat && /* @__PURE__ */ jsx(ConversationHistoryPane, { children: searchEnabled && semanticSearchOpen ? /* @__PURE__ */ jsx(ConnectedThreadsPage, { showHeader: false, search: true, ResultsBoundary }) : /* @__PURE__ */ jsx(ConnectedThreadsPage, { showHeader: false, focusLauncher }) })
36463
+ !isInChat && /* @__PURE__ */ jsx(ConversationHistoryPane, { children: searchEnabled && semanticSearchOpen ? /* @__PURE__ */ jsx(ConnectedThreadsPage, { showHeader: false, search: true, ResultsBoundary }) : /* @__PURE__ */ jsx(ConnectedThreadsPage, { showHeader: false }) })
36415
36464
  ] }),
36416
36465
  /* @__PURE__ */ jsx(
36417
36466
  UrlInputDialog,
@@ -38891,25 +38940,6 @@ function ConnectedAppShell({
38891
38940
  }
38892
38941
  ) });
38893
38942
  }
38894
- function useContextualHints() {
38895
- const session = useArbiSessionStore();
38896
- const { data: userSettings } = useUserSettings();
38897
- const updateUserSettings = useUpdateUserSettings();
38898
- const [sessionOverride] = useTransientView(TIPS_VISIBILITY_OVERRIDE, null);
38899
- const setShowHints = (value) => setHintsSessionOverride(session, value);
38900
- const setShowHintsPersisted = (value) => {
38901
- setHintsSessionOverride(session, null);
38902
- updateUserSettings.mutate({ show_hints: value });
38903
- };
38904
- return {
38905
- showHints: sessionOverride ?? userSettings?.show_hints ?? true,
38906
- settingsLoaded: userSettings !== void 0,
38907
- isDeveloper: userSettings?.developer === true,
38908
- setShowHints,
38909
- setShowHintsPersisted,
38910
- dismissHints: () => setShowHints(false)
38911
- };
38912
- }
38913
38943
  var DEFAULT_TIPS_OFF_LABEL = "Tips are off. Turn them back on from your account menu.";
38914
38944
  function ConnectedTipBar({
38915
38945
  registry,
@@ -38920,9 +38950,10 @@ function ConnectedTipBar({
38920
38950
  onDismiss,
38921
38951
  renderEditor,
38922
38952
  labels,
38923
- className
38953
+ className,
38954
+ revealOnHover = false
38924
38955
  }) {
38925
- const { showHints, settingsLoaded, setShowHintsPersisted } = useContextualHints();
38956
+ const { showHints, settingsLoaded, setShowHintsPersisted, setShowHints } = useContextualHints();
38926
38957
  const { dismissed, dismissTip } = useDismissedTips();
38927
38958
  const { notify: notify17 } = useBlocksEnvironment();
38928
38959
  const { data: workspaces } = useWorkspaces();
@@ -38940,7 +38971,22 @@ function ConnectedTipBar({
38940
38971
  dismissed,
38941
38972
  autoRotateSeconds
38942
38973
  });
38943
- if (!settingsLoaded || !showHints || !tip) return null;
38974
+ if (!settingsLoaded || !tip) return null;
38975
+ if (!showHints)
38976
+ return revealOnHover ? /* @__PURE__ */ jsxs(
38977
+ Button,
38978
+ {
38979
+ variant: "ghost",
38980
+ size: "sm",
38981
+ onClick: () => setShowHints(true),
38982
+ className: "opacity-0 group-hover/sidebar:opacity-100 focus-visible:opacity-100 pointer-coarse:opacity-100",
38983
+ "data-testid": "sidebar-show-tips",
38984
+ children: [
38985
+ /* @__PURE__ */ jsx(Lightbulb, { className: "size-4" }),
38986
+ " Show tips"
38987
+ ]
38988
+ }
38989
+ ) : null;
38944
38990
  const takeCta = (shown) => () => {
38945
38991
  if (shown.cta !== void 0) onCta?.(shown.cta);
38946
38992
  if (shown.dismissOnCta) dismissTip(shown.code);
@@ -39216,6 +39262,39 @@ function ChromeInstallDialog({
39216
39262
  ] }) });
39217
39263
  }
39218
39264
 
39219
- export { AddAddonDialog, AddFromAccountsButton, AgentBarShell, AgentControlBar, BACKFILL_OPTIONS, BUILTIN_GLOBAL_DIALOGS, BULK_REPROCESS_LIMIT, BillingProjectEntity, CaptureBar, ChangePlanDialog, ChatAttachmentList, ChromeInstallDialog, ConnectedAccountAccessBadge, ConnectedAccountCluster, ConnectedAccountSettings, ConnectedAccountsImport, ConnectedAddContacts, ConnectedAgentChat, ConnectedAgentChatPanel, ConnectedAgentConfigForm, ConnectedAgentCreator, ConnectedAgentsPage, ConnectedAiReview, ConnectedAppRuntime, ConnectedAppShell, ConnectedAppsSettings, ConnectedArchiveWorkspaceButton, ConnectedAuthorizeAgent, ConnectedBulkTagEditor, ConnectedCalendar, ConnectedChatMessageBody, ConnectedChatPeopleDialog, ConnectedChatThread, ConnectedConfigForm, ConnectedContactCardForm, ConnectedContactMenu, ConnectedContactToggle, ConnectedContactsDirectory, ConnectedConversation, ConnectedConversationEmpty, ConnectedConversationStart, ConnectedDatabasesPage, ConnectedDeploymentStorage, ConnectedDeveloperConfig, ConnectedDmGrantAccessDialog, ConnectedDocumentProcessingPanel, ConnectedDriveSyncDialog, ConnectedEmailWorkspaceDialog, ConnectedEntitlementGate, ConnectedExportDialog, ConnectedExportPanel, ConnectedFactsPage, ConnectedFactsSmartSearch, ConnectedFieldsEditor, ConnectedFieldsManager, ConnectedFilesBulkActions, ConnectedFilesExplorer, ConnectedFilesPage, ConnectedFilterDropdown, ConnectedGettingStarted, ConnectedGlobalDialogs, ConnectedGrantWorkspaceAccessDialog, ConnectedGridView, ConnectedGroupMembers, ConnectedInviteMenu, ConnectedMailAccounts, ConnectedMailComposer, ConnectedMailInviteCard, ConnectedMailMessage, ConnectedMailSettings, ConnectedMailSetup, ConnectedMailbox, ConnectedMailboxSyncDialog, ConnectedMessenger, ConnectedModelConnectionsSettings, ConnectedMoveToFolder, ConnectedNewThreadDialog, ConnectedNotificationCenter, ConnectedOAuthConsentPage, ConnectedPanelHost, ConnectedPeerActions, ConnectedPeopleMultiSelect, ConnectedPremiumModels, ConnectedPrivacySettings, ConnectedProjectEntity, ConnectedProjectPage, ConnectedProjectSelector, ConnectedProjectStorage, ConnectedProjectsPanel, ConnectedPublicBooking, ConnectedQuotaDialog, ConnectedRecentlyDeletedButton, ConnectedRecipientSelector, ConnectedRecoveryKeyDialog, ConnectedReportProblem, ConnectedRequestWorkspaceAccess, ConnectedSearchPage, ConnectedSecureMailClaimPage, ConnectedSettingsPage, ConnectedShareDialog, ConnectedSharePointAdminConsentPage, ConnectedSharedFilesPage, ConnectedSignatureVerifyPage, ConnectedSkillUpload, ConnectedSkillsBrowser, ConnectedSkillsLibrary, ConnectedSsoCallback, ConnectedStorageProjectCard, ConnectedStorageSettings, ConnectedTagEditorDialog, ConnectedTagForm, ConnectedTagTable, ConnectedTagsPage, ConnectedTaskAccessRequest, ConnectedTaskStartDialog, ConnectedThreadFollow, ConnectedThreadLauncher, ConnectedThreadTabs, ConnectedThreadsPage, ConnectedTipBar, ConnectedTransferWatcher, ConnectedUnarchiveWorkspaceDialog, ConnectedUpcomingEvents, ConnectedUpload, ConnectedUploadDropzone, ConnectedWelcomeDialog, ConnectedWorkflowStart, ConnectedWorkspaceActivity, ConnectedWorkspaceDashboard, ConnectedWorkspaceEntity, ConnectedWorkspaceFormModal, ConnectedWorkspaceHouseTemplate, ConnectedWorkspaceList, ConnectedWorkspaceMembers, ConnectedWorkspaceNotificationMenu, ConnectedWorkspaceSettings, ConnectedWorkspaceShareDialog, ConnectedWorkspaceTrash, ConversationAlert, ConversationEntity, ConversationSendButton, ConversationStatusCell, DEFAULT_AGENTS_PAGE_SECTIONS, DEFAULT_AGENT_CHAT_CARD_LABELS, DEFAULT_CONNECTED_AGENTS_PAGE_LABELS, DEFAULT_CONNECTED_SEARCH_PAGE_LABELS, DEFAULT_CONNECTED_SKILLS_BROWSER_LABELS, DEFAULT_CONNECTED_SKILL_UPLOAD_LABELS, DEFAULT_GETTING_STARTED_STEPS, 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_TIPS_OFF_LABEL, DEFAULT_WORKSPACE_LIST_LABELS, DeveloperFooter, DocumentsFilterBarActions, DocumentsUploadButton, EmptyWorkspaceUpload, FACTS_GRID_ID, FIRST_LOGIN_WORKSPACES_VIEW, GETTING_STARTED_DONE_TIP, INVITATION_ROW_FILTERS, INVITE_SECTION, ImportVcfButton, ImportVcfSummary, InvoicesModal, LOOK_AGAIN_LABEL, MicButton, NewProjectFlow, NotificationCenter, NotificationEvent, PAGE_TRANSITION_VIEW, PENDING_ACCESS_REVIEW_VIEW, PENDING_LOOKUP_MS, PENDING_NOTIFICATION_VIEW, PENDING_TASK_MESSAGE, PENDING_WORKSPACE_SHARE_VIEW, PROJECTS_BASE_TAB_ID, PROMPT_BINDINGS, PersistedGridView, ProgressiveLoadingChip, ProjectDetail, ProjectUsageContent, ProjectsTable, REFERRAL_OFFER, RecoveryKeyDownload, ReportProblemDialog, RunStatsBadges, SEARCH_FIELD_OPTIONS, SEEN_ADDON_BLOCKS_VIEW, SETTINGS_SECTION_IDS, SharedProjects, SsoResendVerificationButton, StorageBreakdown, StorageItemsTable, StorageTiers, StreamedArtifact, TILE_DEFAULT, TILE_MAX, TILE_MIN, ThreadSwitcher, ViewSelector, WELCOME_DIALOG_SESSION_KEY, WORKSPACES_TAB_ID, WorkflowLaunchHost, WorkflowRunStatusCell, WorkspaceArchiveStatus, accountSettingsSection, addonArrivalMessage, appearanceSettingsSection, archiveWorkspaceSection, archivedWorkspaceState, bookingCancelLink, buildNotificationCenterItems, captureSecureMailFragment, chatSettingsSection, clearSecureMailKey, closeAccessRequestReview, connectedAppsSettingsSection, connectionSettingsSection, countNotificationTypes, createDocumentColumns, createEventCall, createNotificationTargetOpener, createPaymentRequiredMiddleware, createTagColumn, deduplicateByContentHash, describePlan, dialogTabForPlace, distinctPeers, documentFamilyMeta, documentPlaceKey, emailInWorkspaceSection, featuresSettingsSection, filterNotificationCenterItems, formatAccessExpiry, formatStorageGb, groupFallbackName, houseTemplateWorkspaceSection, identifyOAuthClient, inviteRows, joinEventMeeting, loadEventWebinar, mailSettingsSection, modelConnectionsSettingsSection, openMeetingLink, openQuotaDialogIfUsedUp, openSsoPopup, organisationSettingsSection, parseArbiCallUrl, parseOAuthConsentRequest, parseTypedSkill, paymentConfirmationUrl, paymentRequiredToastMessage, privacySettingsSection, readSecureMailKey, renderMessengerUser, requestProjectBillingFocus, resolveAttendeeUsers, resolveAttendeeUsersRemote, resolveCallPeers, resolveCallPeersRemote, resolveLaunchInputs, resolveMailbox, reviewAccessRequest, reviewProgress, routePaymentRequired, shareEventCall, showDocumentPlace, skipWelcomeDialogThisSession, storageSettingsSection, storeSecureMailKey, suppliedKinds, surfacePaymentRequired, threadStateOf, toWorkspaceSummary, transferOutcome, updateEventWebinarRoles, usageSettingsSection, useAccessRequestUnderReview, useAddFromUrls, useAiReviewLiveUpdates, useAppShell, useAutoRefreshPendingProjects, useBatchCompleteToasts, useChatMessageToasts, useConnectedAgentManagement, useConnectedCalendarCalls, useConnectedNotificationBell, useConnectedShellWorkspaces, useConnectedWorkspaceList, useConnectedWorkspaceSettings, useContextualHints, useDocumentBulkActions, useDocumentFilters, useDocumentGridSync, useDocumentNavigation, useDocumentTable, useExportStore, useGettingStarted, useHasAccountsImport, useInstallSkillPackOnSignIn, useInvitationRows, useLaunchWorkflow, useMessengerRows, useNotificationBellEntry, useNotificationToasts, useOpenBillingPortal, useOpenNotificationTarget, useOpenWorkspaceActivityTarget, usePendingTaskThread, useProjectBillingFocus, useReferralReward, useReportProblem, useSessionPanelMode, useSessionSidebar, useSlashSkillWorkflows, useStartRequestedDraft, useTableViews, useTaskStart, useThreadLabels, useThreadTabs, useWorkflowLaunch, webinarRolesByUser, windowLabel, withAddonBlocksBought, withMissingTableViews, withTableView, withoutTableView };
39265
+ // src/connection/tags/tagged-content.ts
39266
+ function createTaggedContentNavigation({
39267
+ layout,
39268
+ getWorkspaceId,
39269
+ closePanels,
39270
+ setFactFilters,
39271
+ selectThreadTab
39272
+ }) {
39273
+ return (tagId, kind) => {
39274
+ const workspaceId = getWorkspaceId();
39275
+ if (!workspaceId) return;
39276
+ closePanels();
39277
+ layout.setTransientView("topbar.filter", "");
39278
+ if (kind === "documents") {
39279
+ useFilesPrefs.getState().setDocumentFilters({ [tagId]: "include" });
39280
+ useFilesPrefs.getState().setViewMode("grid");
39281
+ layout.setPage("documents");
39282
+ } else if (kind === "facts") {
39283
+ setFactFilters({ [tagId]: "include" });
39284
+ layout.setViewValue("facts.filterText", "");
39285
+ layout.setViewValue("facts.view", "table");
39286
+ layout.setPage("facts");
39287
+ } else {
39288
+ layout.setTransientView(THREAD_TAG_FILTER_VIEW, { workspaceId, tagId });
39289
+ layout.setTransientView("threads.done", null);
39290
+ layout.setTransientView("threads.visibility", { me: null, workspace: null });
39291
+ layout.setTransientView("threads.meetings", null);
39292
+ selectThreadTab(null);
39293
+ layout.setPage("conversations");
39294
+ }
39295
+ };
39296
+ }
39297
+
39298
+ export { AddAddonDialog, AddFromAccountsButton, AgentBarShell, AgentControlBar, BACKFILL_OPTIONS, BUILTIN_GLOBAL_DIALOGS, BULK_REPROCESS_LIMIT, BillingProjectEntity, CaptureBar, ChangePlanDialog, ChatAttachmentList, ChromeInstallDialog, ConnectedAccountAccessBadge, ConnectedAccountCluster, ConnectedAccountSettings, ConnectedAccountsImport, ConnectedAddContacts, ConnectedAgentChat, ConnectedAgentChatPanel, ConnectedAgentConfigForm, ConnectedAgentCreator, ConnectedAgentsPage, ConnectedAiReview, ConnectedAppRuntime, ConnectedAppShell, ConnectedAppsSettings, ConnectedArchiveWorkspaceButton, ConnectedAuthorizeAgent, ConnectedBulkTagEditor, ConnectedCalendar, ConnectedChatMessageBody, ConnectedChatPeopleDialog, ConnectedChatThread, ConnectedConfigForm, ConnectedContactCardForm, ConnectedContactMenu, ConnectedContactToggle, ConnectedContactsDirectory, ConnectedConversation, ConnectedConversationEmpty, ConnectedConversationStart, ConnectedDatabasesPage, ConnectedDeploymentStorage, ConnectedDeveloperConfig, ConnectedDmGrantAccessDialog, ConnectedDocumentProcessingPanel, ConnectedDriveSyncDialog, ConnectedEmailWorkspaceDialog, ConnectedEntitlementGate, ConnectedExportDialog, ConnectedExportPanel, ConnectedFactsPage, ConnectedFactsSmartSearch, ConnectedFieldsEditor, ConnectedFieldsManager, ConnectedFilesBulkActions, ConnectedFilesExplorer, ConnectedFilesPage, ConnectedFilterDropdown, ConnectedGettingStarted, ConnectedGlobalDialogs, ConnectedGrantWorkspaceAccessDialog, ConnectedGridView, ConnectedGroupMembers, ConnectedInviteMenu, ConnectedMailAccounts, ConnectedMailComposer, ConnectedMailInviteCard, ConnectedMailMessage, ConnectedMailSettings, ConnectedMailSetup, ConnectedMailbox, ConnectedMailboxSyncDialog, ConnectedMessenger, ConnectedModelConnectionsSettings, ConnectedMoveToFolder, ConnectedNewThreadDialog, ConnectedNotificationCenter, ConnectedOAuthConsentPage, ConnectedPanelHost, ConnectedPeerActions, ConnectedPeopleMultiSelect, ConnectedPremiumModels, ConnectedPrivacySettings, ConnectedProjectEntity, ConnectedProjectPage, ConnectedProjectSelector, ConnectedProjectStorage, ConnectedProjectsPanel, ConnectedPublicBooking, ConnectedQuotaDialog, ConnectedRecentlyDeletedButton, ConnectedRecipientSelector, ConnectedRecoveryKeyDialog, ConnectedReportProblem, ConnectedRequestWorkspaceAccess, ConnectedSearchPage, ConnectedSecureMailClaimPage, ConnectedSettingsPage, ConnectedShareDialog, ConnectedSharePointAdminConsentPage, ConnectedSharedFilesPage, ConnectedSignatureVerifyPage, ConnectedSkillUpload, ConnectedSkillsBrowser, ConnectedSkillsLibrary, ConnectedSsoCallback, ConnectedStorageProjectCard, ConnectedStorageSettings, ConnectedTagEditorDialog, ConnectedTagForm, ConnectedTagTable, ConnectedTagsPage, ConnectedTaskAccessRequest, ConnectedTaskStartDialog, ConnectedThreadFollow, ConnectedThreadLauncher, ConnectedThreadTabs, ConnectedThreadsPage, ConnectedTipBar, ConnectedTransferWatcher, ConnectedUnarchiveWorkspaceDialog, ConnectedUpcomingEvents, ConnectedUpload, ConnectedUploadDropzone, ConnectedWelcomeDialog, ConnectedWorkflowStart, ConnectedWorkspaceActivity, ConnectedWorkspaceDashboard, ConnectedWorkspaceEntity, ConnectedWorkspaceFormModal, ConnectedWorkspaceHouseTemplate, ConnectedWorkspaceList, ConnectedWorkspaceMembers, ConnectedWorkspaceNotificationMenu, ConnectedWorkspaceSettings, ConnectedWorkspaceShareDialog, ConnectedWorkspaceTrash, ConversationAlert, ConversationEntity, ConversationSendButton, ConversationStatusCell, DEFAULT_AGENTS_PAGE_SECTIONS, DEFAULT_AGENT_CHAT_CARD_LABELS, DEFAULT_CONNECTED_AGENTS_PAGE_LABELS, DEFAULT_CONNECTED_SEARCH_PAGE_LABELS, DEFAULT_CONNECTED_SKILLS_BROWSER_LABELS, DEFAULT_CONNECTED_SKILL_UPLOAD_LABELS, DEFAULT_GETTING_STARTED_STEPS, 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_TIPS_OFF_LABEL, DEFAULT_WORKSPACE_LIST_LABELS, DeveloperFooter, DocumentsFilterBarActions, DocumentsUploadButton, EmptyWorkspaceUpload, FACTS_GRID_ID, FIRST_LOGIN_WORKSPACES_VIEW, GETTING_STARTED_DONE_TIP, INVITATION_ROW_FILTERS, INVITE_SECTION, ImportVcfButton, ImportVcfSummary, InvoicesModal, LOOK_AGAIN_LABEL, MicButton, NewProjectFlow, NotificationCenter, NotificationEvent, PAGE_TRANSITION_VIEW, PENDING_ACCESS_REVIEW_VIEW, PENDING_LOOKUP_MS, PENDING_NOTIFICATION_VIEW, PENDING_TASK_MESSAGE, PENDING_WORKSPACE_SHARE_VIEW, PROJECTS_BASE_TAB_ID, PROMPT_BINDINGS, PersistedGridView, ProgressiveLoadingChip, ProjectDetail, ProjectUsageContent, ProjectsTable, REFERRAL_OFFER, RecoveryKeyDownload, ReportProblemDialog, RunStatsBadges, SEARCH_FIELD_OPTIONS, SEEN_ADDON_BLOCKS_VIEW, SETTINGS_SECTION_IDS, SharedProjects, SourceChips, SsoResendVerificationButton, StorageBreakdown, StorageItemsTable, StorageTiers, StreamedArtifact, THREAD_TAG_FILTER_VIEW, TILE_DEFAULT, TILE_MAX, TILE_MIN, ThreadSwitcher, ViewSelector, WELCOME_DIALOG_SESSION_KEY, WORKSPACES_TAB_ID, WorkflowLaunchHost, WorkflowRunStatusCell, WorkspaceArchiveStatus, accountSettingsSection, addonArrivalMessage, appearanceSettingsSection, archiveWorkspaceSection, archivedWorkspaceState, bookingCancelLink, buildNotificationCenterItems, captureSecureMailFragment, chatSettingsSection, clearSecureMailKey, closeAccessRequestReview, connectedAppsSettingsSection, connectionSettingsSection, countNotificationTypes, createDocumentColumns, createEventCall, createNotificationTargetOpener, createPaymentRequiredMiddleware, createTagColumn, createTaggedContentNavigation, deduplicateByContentHash, describePlan, dialogTabForPlace, distinctPeers, documentFamilyMeta, documentPlaceKey, emailInWorkspaceSection, featuresSettingsSection, filterNotificationCenterItems, formatAccessExpiry, formatStorageGb, groupFallbackName, houseTemplateWorkspaceSection, identifyOAuthClient, inviteRows, joinEventMeeting, loadEventWebinar, mailSettingsSection, modelConnectionsSettingsSection, openMeetingLink, openQuotaDialogIfUsedUp, openSsoPopup, organisationSettingsSection, parseArbiCallUrl, parseOAuthConsentRequest, parseTypedSkill, paymentConfirmationUrl, paymentRequiredToastMessage, privacySettingsSection, readSecureMailKey, renderMessengerUser, requestProjectBillingFocus, resolveAttendeeUsers, resolveAttendeeUsersRemote, resolveCallPeers, resolveCallPeersRemote, resolveLaunchInputs, resolveMailbox, reviewAccessRequest, reviewProgress, routePaymentRequired, shareEventCall, showDocumentPlace, skipWelcomeDialogThisSession, storageSettingsSection, storeSecureMailKey, suppliedKinds, surfacePaymentRequired, threadStateOf, toWorkspaceSummary, transferOutcome, updateEventWebinarRoles, usageSettingsSection, useAccessRequestUnderReview, useAddFromUrls, useAiReviewLiveUpdates, useAppShell, useAutoRefreshPendingProjects, useBatchCompleteToasts, useChatMessageToasts, useConnectedAgentManagement, useConnectedCalendarCalls, useConnectedNotificationBell, useConnectedShellWorkspaces, useConnectedWorkspaceList, useConnectedWorkspaceSettings, useDocumentBulkActions, useDocumentFilters, useDocumentGridSync, useDocumentNavigation, useDocumentTable, useExportStore, useGettingStarted, useHasAccountsImport, useInstallSkillPackOnSignIn, useInvitationRows, useLaunchWorkflow, useMessengerRows, useNotificationBellEntry, useNotificationToasts, useOpenBillingPortal, useOpenNotificationTarget, useOpenWorkspaceActivityTarget, usePendingTaskThread, useProjectBillingFocus, useReferralReward, useReportProblem, useSessionPanelMode, useSessionSidebar, useSlashSkillWorkflows, useStartRequestedDraft, useTableViews, useTaskStart, useThreadLabels, useThreadTabs, useWorkflowLaunch, webinarRolesByUser, windowLabel, withAddonBlocksBought, withMissingTableViews, withTableView, withoutTableView };
39220
39299
  //# sourceMappingURL=index.js.map
39221
39300
  //# sourceMappingURL=index.js.map