@arbidocs/blocks 0.5.102 → 0.5.103

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 (146) hide show
  1. package/dist/ConnectedCallDock-NEZJNTKH.js +1 -1
  2. package/dist/ConnectedCallDock-P7LK2HYF.cjs +1 -1
  3. package/dist/ConnectedCallRoom-FXTR4YFI.cjs +1 -1
  4. package/dist/ConnectedCallRoom-K3X6ICCG.js +1 -1
  5. package/dist/ConnectedNativeDocxComparison-7VJKOKYU.cjs +2 -2
  6. package/dist/ConnectedNativeDocxComparison-FENZYWDH.js +2 -2
  7. package/dist/ConnectedNativeDocxEditor-CNQAMO2N.js +2 -2
  8. package/dist/ConnectedNativeDocxEditor-HB5BHGZ2.cjs +2 -2
  9. package/dist/ConnectedStreamedWordArtifact-BF6JET2D.cjs +2 -2
  10. package/dist/ConnectedStreamedWordArtifact-ILMKFCDC.js +2 -2
  11. package/dist/{DocumentReviewCard-UUMBYSHO.cjs → DocumentReviewCard-FSOBIVED.cjs} +14 -14
  12. package/dist/{DocumentReviewCard-UUMBYSHO.cjs.map → DocumentReviewCard-FSOBIVED.cjs.map} +1 -1
  13. package/dist/{DocumentReviewCard-UEFTDEOL.js → DocumentReviewCard-XB7BE7MZ.js} +9 -9
  14. package/dist/{DocumentReviewCard-UEFTDEOL.js.map → DocumentReviewCard-XB7BE7MZ.js.map} +1 -1
  15. package/dist/{FilesViewerDialog-R5VNYH72.js → FilesViewerDialog-5PL3HGYO.js} +8 -8
  16. package/dist/{FilesViewerDialog-R5VNYH72.js.map → FilesViewerDialog-5PL3HGYO.js.map} +1 -1
  17. package/dist/{FilesViewerDialog-B6AQP2UB.cjs → FilesViewerDialog-GEIQCBBK.cjs} +9 -9
  18. package/dist/{FilesViewerDialog-B6AQP2UB.cjs.map → FilesViewerDialog-GEIQCBBK.cjs.map} +1 -1
  19. package/dist/{WorkspaceTableView-WD754UBK.js → WorkspaceTableView-SX5FIC4C.js} +3 -3
  20. package/dist/{WorkspaceTableView-WD754UBK.js.map → WorkspaceTableView-SX5FIC4C.js.map} +1 -1
  21. package/dist/{WorkspaceTableView-3D6SYOWT.cjs → WorkspaceTableView-Y2GX5GB2.cjs} +3 -3
  22. package/dist/{WorkspaceTableView-3D6SYOWT.cjs.map → WorkspaceTableView-Y2GX5GB2.cjs.map} +1 -1
  23. package/dist/agents/index.cjs +178 -177
  24. package/dist/agents/index.js +5 -4
  25. package/dist/chat/index.cjs +1 -1
  26. package/dist/chat/index.js +1 -1
  27. package/dist/{chunk-D3DOHXBQ.cjs → chunk-4LK74S7T.cjs} +24 -24
  28. package/dist/{chunk-D3DOHXBQ.cjs.map → chunk-4LK74S7T.cjs.map} +1 -1
  29. package/dist/{chunk-PL2CVHBB.cjs → chunk-7Z5CSFYV.cjs} +5 -5
  30. package/dist/{chunk-PL2CVHBB.cjs.map → chunk-7Z5CSFYV.cjs.map} +1 -1
  31. package/dist/{chunk-FKFUAU4F.js → chunk-ASOPBELQ.js} +7 -6
  32. package/dist/chunk-ASOPBELQ.js.map +1 -0
  33. package/dist/{chunk-ICE2ZKN4.js → chunk-BQHTBUOA.js} +3 -3
  34. package/dist/{chunk-ICE2ZKN4.js.map → chunk-BQHTBUOA.js.map} +1 -1
  35. package/dist/{chunk-JJ5BXK3Q.cjs → chunk-COCZMF7B.cjs} +7 -6
  36. package/dist/chunk-COCZMF7B.cjs.map +1 -0
  37. package/dist/{chunk-CMEIU2GA.cjs → chunk-CRKWD7B5.cjs} +28 -28
  38. package/dist/{chunk-CMEIU2GA.cjs.map → chunk-CRKWD7B5.cjs.map} +1 -1
  39. package/dist/{chunk-AMIPT72L.cjs → chunk-DGOVO2QO.cjs} +8 -8
  40. package/dist/{chunk-AMIPT72L.cjs.map → chunk-DGOVO2QO.cjs.map} +1 -1
  41. package/dist/{chunk-L3CWX2BN.cjs → chunk-DZGLEEUT.cjs} +4 -4
  42. package/dist/{chunk-L3CWX2BN.cjs.map → chunk-DZGLEEUT.cjs.map} +1 -1
  43. package/dist/{chunk-ZGAUD357.cjs → chunk-EIV4H2PZ.cjs} +4 -4
  44. package/dist/{chunk-ZGAUD357.cjs.map → chunk-EIV4H2PZ.cjs.map} +1 -1
  45. package/dist/{chunk-VVCSEYDP.cjs → chunk-G4D4UGSW.cjs} +4 -4
  46. package/dist/{chunk-VVCSEYDP.cjs.map → chunk-G4D4UGSW.cjs.map} +1 -1
  47. package/dist/{chunk-GCW7PS3D.js → chunk-I6WRLTWU.js} +3 -3
  48. package/dist/{chunk-GCW7PS3D.js.map → chunk-I6WRLTWU.js.map} +1 -1
  49. package/dist/{chunk-AUQF6UJZ.js → chunk-JAIMJTXQ.js} +4 -4
  50. package/dist/{chunk-AUQF6UJZ.js.map → chunk-JAIMJTXQ.js.map} +1 -1
  51. package/dist/chunk-JCMKYQGZ.js +26 -0
  52. package/dist/chunk-JCMKYQGZ.js.map +1 -0
  53. package/dist/{chunk-6AETD75K.js → chunk-K2G2P66L.js} +3 -3
  54. package/dist/{chunk-6AETD75K.js.map → chunk-K2G2P66L.js.map} +1 -1
  55. package/dist/{chunk-W4QYNRBU.cjs → chunk-KVQ6O54R.cjs} +46 -46
  56. package/dist/{chunk-W4QYNRBU.cjs.map → chunk-KVQ6O54R.cjs.map} +1 -1
  57. package/dist/{chunk-4YQBT5EL.cjs → chunk-KXNC24EF.cjs} +35 -35
  58. package/dist/{chunk-4YQBT5EL.cjs.map → chunk-KXNC24EF.cjs.map} +1 -1
  59. package/dist/{chunk-PCSJODXV.js → chunk-M6DTLHCN.js} +3 -3
  60. package/dist/{chunk-PCSJODXV.js.map → chunk-M6DTLHCN.js.map} +1 -1
  61. package/dist/{chunk-S67KFB54.js → chunk-NTXO6IYE.js} +3 -3
  62. package/dist/{chunk-S67KFB54.js.map → chunk-NTXO6IYE.js.map} +1 -1
  63. package/dist/{chunk-HC54CTGN.cjs → chunk-OSR3GCJG.cjs} +11 -11
  64. package/dist/chunk-OSR3GCJG.cjs.map +1 -0
  65. package/dist/{chunk-6TYZ33WH.cjs → chunk-OSWKA2NQ.cjs} +6 -6
  66. package/dist/chunk-OSWKA2NQ.cjs.map +1 -0
  67. package/dist/{chunk-TOT4HHHN.js → chunk-P5RTO2WL.js} +3 -24
  68. package/dist/chunk-P5RTO2WL.js.map +1 -0
  69. package/dist/chunk-QECKDZ47.cjs +31 -0
  70. package/dist/chunk-QECKDZ47.cjs.map +1 -0
  71. package/dist/{chunk-QM6OI62U.js → chunk-QVY5DH2R.js} +5 -5
  72. package/dist/{chunk-QM6OI62U.js.map → chunk-QVY5DH2R.js.map} +1 -1
  73. package/dist/{chunk-PP2NXTOP.js → chunk-RUV2ERID.js} +12 -12
  74. package/dist/{chunk-PP2NXTOP.js.map → chunk-RUV2ERID.js.map} +1 -1
  75. package/dist/{chunk-MDMQDVCA.cjs → chunk-S3SWSAUB.cjs} +4 -4
  76. package/dist/{chunk-MDMQDVCA.cjs.map → chunk-S3SWSAUB.cjs.map} +1 -1
  77. package/dist/{chunk-CDOW3H4B.js → chunk-SOY6UUFS.js} +3 -3
  78. package/dist/{chunk-CDOW3H4B.js.map → chunk-SOY6UUFS.js.map} +1 -1
  79. package/dist/{chunk-6S2LRXJ4.js → chunk-SYMZ6L3C.js} +6 -6
  80. package/dist/chunk-SYMZ6L3C.js.map +1 -0
  81. package/dist/{chunk-ZKTMTYFN.js → chunk-UYFWLP74.js} +6 -6
  82. package/dist/{chunk-ZKTMTYFN.js.map → chunk-UYFWLP74.js.map} +1 -1
  83. package/dist/{chunk-SOS2WASA.cjs → chunk-WZAHVTTO.cjs} +2 -26
  84. package/dist/chunk-WZAHVTTO.cjs.map +1 -0
  85. package/dist/{chunk-4RQDYXLE.js → chunk-ZR4TH6DZ.js} +5 -5
  86. package/dist/{chunk-4RQDYXLE.js.map → chunk-ZR4TH6DZ.js.map} +1 -1
  87. package/dist/collaboration/index.cjs +69 -69
  88. package/dist/collaboration/index.js +1 -1
  89. package/dist/collaboration/mail/MailActionBar.d.ts +3 -2
  90. package/dist/collaboration/mail/MailAddToWorkspaceDialog.d.ts +20 -0
  91. package/dist/collaboration/mail/MailFiledChips.d.ts +15 -0
  92. package/dist/collaboration/mail/MailMessageView.d.ts +3 -3
  93. package/dist/connect/docx.cjs +2 -2
  94. package/dist/connect/docx.js +2 -2
  95. package/dist/connect/index.cjs +1083 -810
  96. package/dist/connect/index.cjs.map +1 -1
  97. package/dist/connect/index.js +503 -230
  98. package/dist/connect/index.js.map +1 -1
  99. package/dist/connect/viewer.cjs +7 -7
  100. package/dist/connect/viewer.js +6 -6
  101. package/dist/connection/connectors/ConnectedMailboxSyncDialog.d.ts +3 -1
  102. package/dist/connection/connectors/native-mailbox.d.ts +19 -0
  103. package/dist/connection/files/imports/EmailImportPanel.d.ts +2 -2
  104. package/dist/connection/files/imports/NativeMailImportRow.d.ts +11 -0
  105. package/dist/connection/mail/ConnectedMailConversation.d.ts +3 -4
  106. package/dist/connection/mail/ConnectedMailbox.d.ts +1 -4
  107. package/dist/connection/mail/types.d.ts +2 -4
  108. package/dist/connection/mail/useMailMessageChange.d.ts +11 -2
  109. package/dist/connection/mail/useMailboxDefaults.d.ts +6 -3
  110. package/dist/connection/workspace-access/ConnectedGrantWorkspaceAccessDialog.d.ts +1 -1
  111. package/dist/document-tools/viewer/index.cjs +1 -1
  112. package/dist/document-tools/viewer/index.cjs.map +1 -1
  113. package/dist/document-tools/viewer/index.js +1 -1
  114. package/dist/document-tools/viewer/index.js.map +1 -1
  115. package/dist/embed/index.cjs +13 -13
  116. package/dist/embed/index.js +7 -7
  117. package/dist/files/import/ImportParts.d.ts +6 -3
  118. package/dist/files/index.cjs +224 -224
  119. package/dist/files/index.js +3 -3
  120. package/dist/index.cjs +337 -336
  121. package/dist/index.cjs.map +1 -1
  122. package/dist/index.js +9 -8
  123. package/dist/index.js.map +1 -1
  124. package/dist/site/index.cjs +5 -5
  125. package/dist/site/index.js +1 -1
  126. package/dist/studio/index.cjs +1 -1
  127. package/dist/studio/index.js +1 -1
  128. package/dist/workflow-canvas/index.cjs +21 -20
  129. package/dist/workflow-canvas/index.cjs.map +1 -1
  130. package/dist/workflow-canvas/index.js +11 -10
  131. package/dist/workflow-canvas/index.js.map +1 -1
  132. package/dist/workspaces/index.cjs +33 -28
  133. package/dist/workspaces/index.cjs.map +1 -1
  134. package/dist/workspaces/index.d.ts +1 -1
  135. package/dist/workspaces/index.js +3 -2
  136. package/dist/workspaces/index.js.map +1 -1
  137. package/dist/workspaces/workspace-roles.d.ts +11 -4
  138. package/node_modules/@arbidocs/coedit/package.json +1 -1
  139. package/package.json +5 -5
  140. package/dist/chunk-6S2LRXJ4.js.map +0 -1
  141. package/dist/chunk-6TYZ33WH.cjs.map +0 -1
  142. package/dist/chunk-FKFUAU4F.js.map +0 -1
  143. package/dist/chunk-HC54CTGN.cjs.map +0 -1
  144. package/dist/chunk-JJ5BXK3Q.cjs.map +0 -1
  145. package/dist/chunk-SOS2WASA.cjs.map +0 -1
  146. package/dist/chunk-TOT4HHHN.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { useMemberLookup, ConnectedTagEntity } from '../chunk-4RQDYXLE.js';
3
- export { ConnectedTagEntity, documentFieldContent, useMemberLookup } from '../chunk-4RQDYXLE.js';
2
+ import { useMemberLookup, ConnectedTagEntity } from '../chunk-ZR4TH6DZ.js';
3
+ export { ConnectedTagEntity, documentFieldContent, useMemberLookup } from '../chunk-ZR4TH6DZ.js';
4
4
  import { useSlashField, DEFAULT_DOCUMENT_VIEWER_TABS } from '../chunk-LWCLAAEX.js';
5
5
  export { DEFAULT_ASK_SUGGESTIONS, DEFAULT_DOCUMENT_VIEWER_LABELS, DEFAULT_DOCUMENT_VIEWER_TABS } from '../chunk-LWCLAAEX.js';
6
6
  import { useBillingSupport, DEFAULT_SPEND_CAP_PENCE, 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-FNGFSHVE.js';
@@ -8,27 +8,27 @@ export { CAP_REACHED_MESSAGE, ZERO_BUDGET_MESSAGE, aiUsageResetTimestamp, format
8
8
  export { ConnectedMailInviteCard } from '../chunk-BT2DDHMM.js';
9
9
  import { SharedFileView, SharedFilesInbox } from '../chunk-4ML5AMMO.js';
10
10
  export { ConnectedAssistantDock, redlineStats, textToArtifact, toRedlineMarkdown, useConnectedAiTask, useConnectedChat, useSemanticSearch, useWorkspaceDocs } from '../chunk-Y5P5ZMHQ.js';
11
- import { ConnectedTaskComposer, useProjectSummaries, useProjectSummary, primaryProjectWorkspace, ConnectedThreadTaskBar, useTaskPeople, ConnectedTaskActivityDialog } from '../chunk-QM6OI62U.js';
12
- export { ConnectedTaskActivityDialog, ConnectedTaskComposer, ConnectedThreadTaskBar, ConnectedWorkflowHistory, ConnectedWorkflowRunPage, ConnectedWorkflowRunner, DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS, DEFAULT_WORKFLOW_RUN_PAGE_LABELS, WorkflowRunThread, WorkflowRunWorkspaceChangedError, buildProjectSummaries, primaryProjectWorkspace, useEnsureRequiredLabels, useProjectSummaries, useProjectSummary, useRenderTaskPerson, useRequiredLabels, useTaskPeople, useWorkflowsPageState, workflowRunView } from '../chunk-QM6OI62U.js';
13
- import { getRoleBadgeClass, formatRole, WorkspaceTypeBadge, PageLoading, WorkspacePageFrame, WorkspaceIdentityPanel, WorkspaceProjectSlot, WorkspaceAudienceLine, CommonWorkspaceToggle, ExpandableSection, LeaveFooter, getRoleDescription, ItalicNone, WorkspaceList, WorkspaceGroup, WorkspaceCard } from '../chunk-TOT4HHHN.js';
11
+ import { ConnectedTaskComposer, useProjectSummaries, useProjectSummary, primaryProjectWorkspace, ConnectedThreadTaskBar, useTaskPeople, ConnectedTaskActivityDialog } from '../chunk-QVY5DH2R.js';
12
+ export { ConnectedTaskActivityDialog, ConnectedTaskComposer, ConnectedThreadTaskBar, ConnectedWorkflowHistory, ConnectedWorkflowRunPage, ConnectedWorkflowRunner, DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS, DEFAULT_WORKFLOW_RUN_PAGE_LABELS, WorkflowRunThread, WorkflowRunWorkspaceChangedError, buildProjectSummaries, primaryProjectWorkspace, useEnsureRequiredLabels, useProjectSummaries, useProjectSummary, useRenderTaskPerson, useRequiredLabels, useTaskPeople, useWorkflowsPageState, workflowRunView } from '../chunk-QVY5DH2R.js';
13
+ import { WorkspaceTypeBadge, PageLoading, WorkspacePageFrame, WorkspaceIdentityPanel, WorkspaceProjectSlot, WorkspaceAudienceLine, CommonWorkspaceToggle, ExpandableSection, LeaveFooter, ItalicNone, WorkspaceList, WorkspaceGroup, WorkspaceCard } from '../chunk-P5RTO2WL.js';
14
14
  import { ProjectPicker, ProjectOptionRow, WorkspaceFormModal, ModalActionRow, FormErrorBanner, WorkspaceFieldsView, FormActions } from '../chunk-SEBNGA3F.js';
15
15
  import { isAgentAccount, workspaceConversationCount, workspaceDocumentCount, isListedWorkspace, WORKSPACE_CATEGORY_FILTERS, projectFilterId, workspaceFilterAttributes, groupWorkspacesByProject, byRecentUpdate } from '../chunk-57CG33XJ.js';
16
- import { ConnectedProfileCard, ConnectedSecuritySection, ConnectedIdentityVerification, ConnectedSessionsRow, ConnectedDangerZone, ConnectedLogoutDialog, ConnectedNotificationPreferences, useSsoSignIn, ConnectedModelSelector, useAuthPages, ConversationComposer, AgentSteps, MessageLiveSeconds, resolveSsoName, completeSsoSignIn, ConnectedForgotPassword, ConnectedPasswordChangeDialog, useContextualHints, ssoAccountStatus, AskAgainContext, ConnectedMessageArea } from '../chunk-AUQF6UJZ.js';
17
- export { AgentSteps, AnswerTable, ArbiChat, AskAgainContext, ConnectedBranchControls, ConnectedCitationRenderer, ConnectedCompactConversation, ConnectedCompactLogin, ConnectedConversationDocumentPicker, ConnectedDangerZone, ConnectedEmbeddedChat, ConnectedForgotPassword, ConnectedIdentityVerification, ConnectedLoginPage, ConnectedLogoutDialog, ConnectedMessage, ConnectedMessageArea, ConnectedMessageList, ConnectedModelSelector, ConnectedNotificationPreferences, ConnectedPasswordChangeDialog, ConnectedProfileCard, ConnectedSecuritySection, ConnectedSessionsRow, ConnectedThreadsPreview, ConversationComposer, EmbeddedChatPanel, MessageDetailsModal, MessageLiveSeconds, PENDING_RECOVERY_KEY, PREMIUM_TIER_TAG, RunningSubagents, STANDARD_TIER_TAG, WorkflowStepMessage, backUpOnSignup, defaultHost, renderConnectedUser, renderSessionStatusIcon, resolveSsoName, useAuthPages, useContextualHints, useModelPicker, useOpenChunk, useOpenWorkspaceIcon, useSsoSignIn, useWorkspaceDocTitles } from '../chunk-AUQF6UJZ.js';
16
+ import { ConnectedProfileCard, ConnectedSecuritySection, ConnectedIdentityVerification, ConnectedSessionsRow, ConnectedDangerZone, ConnectedLogoutDialog, ConnectedNotificationPreferences, useSsoSignIn, ConnectedModelSelector, useAuthPages, ConversationComposer, AgentSteps, MessageLiveSeconds, resolveSsoName, completeSsoSignIn, ConnectedForgotPassword, ConnectedPasswordChangeDialog, useContextualHints, ssoAccountStatus, AskAgainContext, ConnectedMessageArea } from '../chunk-JAIMJTXQ.js';
17
+ export { AgentSteps, AnswerTable, ArbiChat, AskAgainContext, ConnectedBranchControls, ConnectedCitationRenderer, ConnectedCompactConversation, ConnectedCompactLogin, ConnectedConversationDocumentPicker, ConnectedDangerZone, ConnectedEmbeddedChat, ConnectedForgotPassword, ConnectedIdentityVerification, ConnectedLoginPage, ConnectedLogoutDialog, ConnectedMessage, ConnectedMessageArea, ConnectedMessageList, ConnectedModelSelector, ConnectedNotificationPreferences, ConnectedPasswordChangeDialog, ConnectedProfileCard, ConnectedSecuritySection, ConnectedSessionsRow, ConnectedThreadsPreview, ConversationComposer, EmbeddedChatPanel, MessageDetailsModal, MessageLiveSeconds, PENDING_RECOVERY_KEY, PREMIUM_TIER_TAG, RunningSubagents, STANDARD_TIER_TAG, WorkflowStepMessage, backUpOnSignup, defaultHost, renderConnectedUser, renderSessionStatusIcon, resolveSsoName, useAuthPages, useContextualHints, useModelPicker, useOpenChunk, useOpenWorkspaceIcon, useSsoSignIn, useWorkspaceDocTitles } from '../chunk-JAIMJTXQ.js';
18
18
  import { useSlashSkillWorkflows, ConnectedWorkflowStart, useLaunchWorkflow } from '../chunk-GARDQALH.js';
19
19
  export { ConnectedWorkflowStart, PROMPT_BINDINGS, parseTypedSkill, useLaunchWorkflow, useSlashItems, useSlashMenuItems, useSlashSkillWorkflows } from '../chunk-GARDQALH.js';
20
- import { useSelectWorkspace } from '../chunk-PCSJODXV.js';
21
- export { useConnectedThreadActivity } from '../chunk-PCSJODXV.js';
22
- import { DocumentUser } from '../chunk-6AETD75K.js';
23
- export { DocumentUser } from '../chunk-6AETD75K.js';
20
+ import { useSelectWorkspace } from '../chunk-M6DTLHCN.js';
21
+ export { useConnectedThreadActivity } from '../chunk-M6DTLHCN.js';
22
+ import { DocumentUser } from '../chunk-K2G2P66L.js';
23
+ export { DocumentUser } from '../chunk-K2G2P66L.js';
24
24
  import { useIsExternalAccount, withoutMarketplace, useNamedWorkflows, isExternalAccount, useWorkflowDefinitions, useCanBrowseSkills, useWorkflowTasks } from '../chunk-DBHBJIF4.js';
25
25
  export { useCanBrowseSkills, useIsExternalAccount, useSkillsEnabled, useWorkflowDefinitions, useWorkflowTasks } from '../chunk-DBHBJIF4.js';
26
+ import { FactSearchBar, FactSearchTotals, FactSearchPending, FactSearchNoMatches, FactSearchResult, FactsToolbar, FactsFieldsButton, FactComposer, FactDateInput, FactSourcesRow, FactsLoading, FactsLoadError, FactsEmptyState, FactsCalendar, FactsGanttPane, FactsBulkBar, FactFieldRow, FactLabelsCell, enableFactTableColumnResize, createFactColumns, FactRowActions, FactSourceGroup, sourceDocCount, DEFAULT_FACT_COLUMN_LABELS } from '../chunk-M3OK6KGR.js';
27
+ import { docIdsOf, toFactCitations, EMPTY_FACT_DATE_FIELDS, withoutChunk, factDateSpanToFields, withChunk, factDateFieldsToSpan, withoutDoc, withDoc, citedVersionRef } from '../chunk-CDDOLWSF.js';
26
28
  import { HomeLoadError, HomeFrame, HomeMain, HomeCenteredScroll, HomeCenteredColumn, DashboardRoot, DashboardBand, DashboardColumns, RecentList, DASHBOARD_QUIET_ACTION_CLASS, DashboardAction, FactsStrip, ActionMenuDialog, GettingStartedStrip, FactMark, CreateTile } from '../chunk-VY3HTT37.js';
27
29
  import { ProjectBandTitle, PlainBandTitle } from '../chunk-DEJ3EWPK.js';
28
30
  import '../chunk-CPLZ6XGT.js';
29
31
  import '../chunk-5PAQWN5U.js';
30
- import { FactSearchBar, FactSearchTotals, FactSearchPending, FactSearchNoMatches, FactSearchResult, FactsToolbar, FactsFieldsButton, FactComposer, FactDateInput, FactSourcesRow, FactsLoading, FactsLoadError, FactsEmptyState, FactsCalendar, FactsGanttPane, FactsBulkBar, FactFieldRow, FactLabelsCell, enableFactTableColumnResize, createFactColumns, FactRowActions, FactSourceGroup, sourceDocCount, DEFAULT_FACT_COLUMN_LABELS } from '../chunk-M3OK6KGR.js';
31
- import { docIdsOf, toFactCitations, EMPTY_FACT_DATE_FIELDS, withoutChunk, factDateSpanToFields, withChunk, factDateFieldsToSpan, withoutDoc, withDoc, citedVersionRef } from '../chunk-CDDOLWSF.js';
32
32
  export { EMBEDDED_SELECTED_DOCS_KEY, SELECTED_WORKSPACE_KEY } from '../chunk-PTCHPYWX.js';
33
33
  import '../chunk-AZDPAV7E.js';
34
34
  import { useConnectedWorkspaceRole, ConnectedWorkflowsTable } from '../chunk-IIUEDF3F.js';
@@ -44,34 +44,34 @@ import { compareDocumentsIn } from '../chunk-QTSNHGSI.js';
44
44
  export { compareDocumentsIn, useDocumentViewerSupport, useViewerIsDetached, useViewerPassageCitation, useViewerStreamingDocument } from '../chunk-QTSNHGSI.js';
45
45
  import { ConnectedDocumentToolsProvider } from '../chunk-KYLQRS3O.js';
46
46
  export { ConnectedDocumentToolsProvider } from '../chunk-KYLQRS3O.js';
47
- import { usePendingFolders, useFilesStore, useAiReviewStore, useFilesPrefs, filesViewMode, useFilesGridStates, FILES_PREFS_KEY, useFilesDialogs } from '../chunk-S67KFB54.js';
48
- export { FILES_PREFS_KEY, filesViewMode, useAiReviewStore, useFilesDialogs, useFilesGridStates, useFilesPrefs, useFilesStore, usePendingFolders } from '../chunk-S67KFB54.js';
47
+ import { usePendingFolders, useFilesStore, useAiReviewStore, useFilesPrefs, filesViewMode, useFilesGridStates, FILES_PREFS_KEY, useFilesDialogs } from '../chunk-NTXO6IYE.js';
48
+ export { FILES_PREFS_KEY, filesViewMode, useAiReviewStore, useFilesDialogs, useFilesGridStates, useFilesPrefs, useFilesStore, usePendingFolders } from '../chunk-NTXO6IYE.js';
49
49
  import { DocumentWorkspaceContext, useDocumentWorkspace, ConnectedMarkdown, WorkspaceDocumentReference } from '../chunk-3PV25ICC.js';
50
50
  export { ConnectedMarkdown, DocumentWorkspaceContext, ExternalLink, InternalDocLink, MermaidDiagram, WorkspaceDocumentReference, useDocumentWorkspace } from '../chunk-3PV25ICC.js';
51
- import { FolderTile, FileTile, openPendingSyncDialog, UserAvatar, useDocumentFolders, DocumentNameCell, DocumentFolderCell, RelatedDocumentsCell, DocumentSharedCell, DocumentLabelsCell, StatusCell } from '../chunk-GCW7PS3D.js';
52
- export { ConnectedPendingSyncDialog, DocumentFolderCell, DocumentLabelsCell, DocumentNameCell, DocumentSharedCell, DocumentStatusGlyph, DocumentSyncGlyph, FileTooltipContent, RelatedDocumentsCell, StatusCell, UserAvatar, isActiveDocumentStatus, openPendingSyncDialog, parseQuotaError, startMenuItem, useDocumentFolders } from '../chunk-GCW7PS3D.js';
51
+ import { FolderTile, FileTile, openPendingSyncDialog, UserAvatar, useDocumentFolders, DocumentNameCell, DocumentFolderCell, RelatedDocumentsCell, DocumentSharedCell, DocumentLabelsCell, StatusCell } from '../chunk-I6WRLTWU.js';
52
+ export { ConnectedPendingSyncDialog, DocumentFolderCell, DocumentLabelsCell, DocumentNameCell, DocumentSharedCell, DocumentStatusGlyph, DocumentSyncGlyph, FileTooltipContent, RelatedDocumentsCell, StatusCell, UserAvatar, isActiveDocumentStatus, openPendingSyncDialog, parseQuotaError, startMenuItem, useDocumentFolders } from '../chunk-I6WRLTWU.js';
53
53
  import { DraggableHeader, PremiumModelsFrame, ConnectionsLoading, ConnectionsError, ConnectionsEmpty, UsageToggle, SettingsPage, UsageSummary, AppearanceSettings, SettingsSwitchRow, SettingsSwitchGroup, callsSwitchState, WorkOfflineToggle, UsageLineChart, PlanStack, PlanNotice, PlanPickerCard, PlanPickerHeader, PricingToggle, PromoCodeInput, PlanActionButton, formatSessionTtl, EmailWorkspaceDialogView, 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, ConversationTitleSection, ModelSelectionSection, FloatingPanel, ProjectRow, QuotaMeter, FilterChip, buildInvertedIndex, serverConnectionView, ServerConnectionButton, ModelProviderLabel, PlanInfoPopover, PlanCardGrid, ReferralRewardSummary, CheckoutDialogFrame, SyncFolderRow, SyncFolderStatus, PlanTierOption, PlanActionRow, SubscriptionStatusView, DailyCapField, ConnectionCard, ReferralRewardNote } from '../chunk-N77UYRV7.js';
54
- import { FilterButton, searchExplorerDocuments, buildExplorerEntries, collectFolderDocs, joinFolderPath, getExplorerDisplayName, RECENTLY_DELETED_HINT, RECENTLY_DELETED_HINT_PLURAL, canDeleteDocument, ExplorerFrame, ExplorerStage, ExplorerScroller, ExplorerLoadingTiles, ExplorerEmpty, ExplorerMarquee, ExplorerDropOverlay, ExplorerDragPreview, AiReviewDialogView, TagFormRoot, TagFormNameField, TagFormSelectField, TagFormNote, TagFormOptionsEditor, TagFormInstructionField, TagFormMeta, TagFormFooter, TagFormSharedToggle, FilesViewCenter, FilesFilterBar, TransferProgressView, TransferResumeBanner, ExportResultsReport, TransferScopeChooser, TransferKindsPicker, TransferReferencesChooser, ExportMethodChooser, ExportWorkspacePicker, TransferConflictChooser, TransferPlanSummary, ExportFooter, ExportModalTitle, sortFields, filterFieldsByName, fieldsApplyBarCopy, FieldsEditorRoot, FieldsEditorToolbar, FieldsEditorList, FieldRow, FieldsEmptyState, fieldsEmptyText, FieldsApplyBar, FieldsManagerDefinition, FieldsManagerBody, FieldsManagerTitle, ROW_MIN, rowHeightForLines, linesForRowHeight, RowDensityControl, VendorLogo, FilesAddMenu, UploadFrame, PrivacyExplainerModal, parseFolderSegments, FolderFilterButton, FolderPickerRow, UploadContainer, SelectedFilesList, RejectedFilesList, UploadErrorMessage, UploadProgress, MultiSelectCellEditor, DOCUMENT_TYPE_OPTIONS, DEFAULT_DOCUMENT_COLUMNS, shareStateOf, BulkActionsBar, shareTooltipFor, MoveToFolderDialog, FolderCommandList, BulkTagEditorDialog, BulkReplaceDialog, DOCUMENTS_ROW_HEIGHT_INITIAL, EMAIL_VIEW_COLUMNS, useGridViews, ViewSelectorMenu, applyColumnLayout, applyViewColumns, sortExplorerFiles, FilesPage, UrlInputDialog, FilesPageHeader, FilesToolbar, ExplorerFileNavigator, NavigatorPickerBar, FilesPageMain, DocumentGrid, resolveDocumentGridLayout, FilesModalFooter, BulkLabelSelectView, LabelMultiSelectView, DocStatusIcon, confirmHideFromMembers, DocumentsFolderButton, FilesTagsButton, UploadSourceSection, UploadSourcePicker, UploadBrowseButtons, canChangeVisibility, canEditDocumentFields, FieldLabelsSelect, UploadFooterBar, ShareToggle, ImportPanel, ImportFamilySection, ImportList, ImportRow, TagColumnHeader, CheckboxCell, TaskSection, UploadDropArea, ImportSummary, ImportAside, FolderSummary, ImportProgress, ImportRunActions, ImportHint, ImportActionButton, UploadUrlButton } from '../chunk-6S2LRXJ4.js';
54
+ import { FilterButton, searchExplorerDocuments, buildExplorerEntries, collectFolderDocs, joinFolderPath, getExplorerDisplayName, RECENTLY_DELETED_HINT, RECENTLY_DELETED_HINT_PLURAL, canDeleteDocument, ExplorerFrame, ExplorerStage, ExplorerScroller, ExplorerLoadingTiles, ExplorerEmpty, ExplorerMarquee, ExplorerDropOverlay, ExplorerDragPreview, AiReviewDialogView, TagFormRoot, TagFormNameField, TagFormSelectField, TagFormNote, TagFormOptionsEditor, TagFormInstructionField, TagFormMeta, TagFormFooter, TagFormSharedToggle, FilesViewCenter, FilesFilterBar, TransferProgressView, TransferResumeBanner, ExportResultsReport, TransferScopeChooser, TransferKindsPicker, TransferReferencesChooser, ExportMethodChooser, ExportWorkspacePicker, TransferConflictChooser, TransferPlanSummary, ExportFooter, ExportModalTitle, sortFields, filterFieldsByName, fieldsApplyBarCopy, FieldsEditorRoot, FieldsEditorToolbar, FieldsEditorList, FieldRow, FieldsEmptyState, fieldsEmptyText, FieldsApplyBar, FieldsManagerDefinition, FieldsManagerBody, FieldsManagerTitle, ROW_MIN, rowHeightForLines, linesForRowHeight, RowDensityControl, VendorLogo, FilesAddMenu, UploadFrame, PrivacyExplainerModal, parseFolderSegments, FolderFilterButton, FolderPickerRow, UploadContainer, SelectedFilesList, RejectedFilesList, UploadErrorMessage, UploadProgress, MultiSelectCellEditor, DOCUMENT_TYPE_OPTIONS, DEFAULT_DOCUMENT_COLUMNS, shareStateOf, BulkActionsBar, shareTooltipFor, MoveToFolderDialog, FolderCommandList, BulkTagEditorDialog, BulkReplaceDialog, DOCUMENTS_ROW_HEIGHT_INITIAL, EMAIL_VIEW_COLUMNS, useGridViews, ViewSelectorMenu, applyColumnLayout, applyViewColumns, sortExplorerFiles, FilesPage, UrlInputDialog, FilesPageHeader, FilesToolbar, ExplorerFileNavigator, NavigatorPickerBar, FilesPageMain, DocumentGrid, resolveDocumentGridLayout, FilesModalFooter, BulkLabelSelectView, LabelMultiSelectView, DocStatusIcon, confirmHideFromMembers, DocumentsFolderButton, FilesTagsButton, UploadSourceSection, UploadSourcePicker, UploadBrowseButtons, canChangeVisibility, canEditDocumentFields, FieldLabelsSelect, UploadFooterBar, ShareToggle, ImportPanel, ImportFamilySection, ImportList, ImportRow, TagColumnHeader, CheckboxCell, TaskSection, UploadDropArea, ImportSummary, ImportAside, FolderSummary, ImportRunActions, ImportProgress, ImportHint, ImportActionButton, UploadUrlButton } from '../chunk-SYMZ6L3C.js';
55
55
  import { ModalBreadcrumbHeader, ModalCrumbs } from '../chunk-RC6VTY2H.js';
56
56
  import { ViewToggle, DocumentViewToggle } from '../chunk-OHRWYRTH.js';
57
- import { formatBytes, reducedRateNote, RECENTLY_DELETED_NOTE, kindRows, usedPct, usedOfLimit, MAIL_FOLDER_LABELS, itemTitle, ITEM_LABELS, KIND_LABELS } from '../chunk-653XMGF4.js';
58
57
  import { DatabaseList, NewDatabaseDialog, DatabaseToolbar, DatabaseTable, DatabaseRowDetail, DatabaseColumnDialog, rowTitle, OPEN_ROW_COL_ID, ADD_COLUMN_COL_ID } from '../chunk-VJQCOZ7O.js';
58
+ import { formatBytes, reducedRateNote, RECENTLY_DELETED_NOTE, kindRows, usedPct, usedOfLimit, MAIL_FOLDER_LABELS, itemTitle, ITEM_LABELS, KIND_LABELS } from '../chunk-653XMGF4.js';
59
59
  import { SavedSignatureSettings, SignatureCertificate } from '../chunk-VSFLROLB.js';
60
60
  import '../chunk-2YOVK524.js';
61
61
  import { SettingsPanel, SettingsDisclosure, SettingsSection, SettingsCard, SettingsRow, SettingsActionRow } from '../chunk-PBQNZWSX.js';
62
62
  import '../chunk-UIHNCQAA.js';
63
63
  import '../chunk-IA5BYEO7.js';
64
- import { WorkspaceActivityList, TagTable, tagsPageNouns, entitiesPhrase, ExtractEntitiesDialog, GridRowNavigator, LoadingIndicator, EntityIdentityBar, IDENTITY_NAME_MAX_LENGTH, Toolbar, documentCount, useTipsPlacement, tagTableDocx, tagTableLabels, TagDetail, tagDetailLabels, tagKindDescription, glossaryEntries, glossaryDocx, glossaryMarkdown, glossaryFileName } from '../chunk-ICE2ZKN4.js';
64
+ import { WorkspaceActivityList, TagTable, tagsPageNouns, entitiesPhrase, ExtractEntitiesDialog, GridRowNavigator, LoadingIndicator, EntityIdentityBar, IDENTITY_NAME_MAX_LENGTH, Toolbar, documentCount, useTipsPlacement, tagTableDocx, tagTableLabels, TagDetail, tagDetailLabels, tagKindDescription, glossaryEntries, glossaryDocx, glossaryMarkdown, glossaryFileName } from '../chunk-BQHTBUOA.js';
65
65
  import { ThemeEditor } from '../chunk-4FV5DO3V.js';
66
66
  import '../chunk-J77BACGX.js';
67
67
  import { WorkspaceNotificationMenu, ThreadFollowMenuItem, ThreadFollowButton } from '../chunk-66NMPTOH.js';
68
68
  import { MemberAvatarStack } from '../chunk-VGHPCF7Q.js';
69
69
  import { WELCOME_REPLAY_VIEW, startWelcomeReplay } from '../chunk-SK3GBHPJ.js';
70
- import '../chunk-UJE32SST.js';
71
70
  import { TimelineZoomControl } from '../chunk-QCK3YKT4.js';
71
+ import '../chunk-UJE32SST.js';
72
72
  import { renderSearchSnippet, SearchGroupHeader, isMeaningMatch, extractHighlightTerms, searchNouns, SearchEmptyState, passesRelevanceCutoff, groupSearchResults, SearchPillToggle, SearchPagination, SearchPageFrame, SearchPageHeader, ApplyLabelDialog, SearchPageBody, SearchToolbarRow, SearchBar, SearchControlsBar, RelevanceThreshold, SearchTotalsHeadline, ApplyLabelButton, getSearchMatchHint, SearchResultsMain, SearchResultsInner, SearchErrorBanner, SearchResultList, SearchGroupCard, SearchNoResults } from '../chunk-QUI2HEKV.js';
73
73
  import { SearchHit } from '../chunk-BZWWKFMS.js';
74
- import { PlainMailBodyEditor, MemberListLoading, MemberBulkActions, RecipientPicker, buildMailFolderTree, MailFolderTree, AddContactsResults, AddContactsForm, emailTokens, EMPTY_CONTACT_FORM, contactToForm, contactStatusLabel, summarizeImport, matchesContact, contactName, primaryEmail, ActionMenu, DmThreadFrame, DmAccessRequestBanner, DmGrantAccessDialogView, DmInviteAvatar, draftMailCompose, replyMailCompose, emptyMailCompose, MAIL_GRID_ID, MailGrid, NEEDS_CONNECTION, MailMessageView, planContactInvites, MAX_INVITE_EMAILS, summarizeUnsentInvites, applyContactInviteResults, summarizeContactInvites, failContactInvites, validateContactForm, inviteEmail, formToContactCard, MemberNameCell, MemberMutedText, MemberRoleCell, RoleSelect, DEFAULT_CONTACT_OUTCOME_LABELS, contactOutcomeMessage, MailDocumentPicker, MailConversationView, MailActionBar, mailMoveTargets, parseMailRecipients, MailMessageContent, printMail } from '../chunk-PP2NXTOP.js';
74
+ import { PlainMailBodyEditor, MemberListLoading, MemberBulkActions, RecipientPicker, buildMailFolderTree, MailFolderTree, AddContactsResults, AddContactsForm, emailTokens, EMPTY_CONTACT_FORM, contactToForm, contactStatusLabel, summarizeImport, matchesContact, contactName, primaryEmail, ActionMenu, DmThreadFrame, DmAccessRequestBanner, DmGrantAccessDialogView, DmInviteAvatar, draftMailCompose, replyMailCompose, emptyMailCompose, MAIL_GRID_ID, MailGrid, NEEDS_CONNECTION, MailMessageView, planContactInvites, MAX_INVITE_EMAILS, summarizeUnsentInvites, applyContactInviteResults, summarizeContactInvites, failContactInvites, validateContactForm, inviteEmail, formToContactCard, MemberNameCell, MemberMutedText, MemberRoleCell, RoleSelect, DEFAULT_CONTACT_OUTCOME_LABELS, contactOutcomeMessage, MailDocumentPicker, MailConversationView, MailActionBar, mailMoveTargets, parseMailRecipients, MailMessageContent, printMail } from '../chunk-RUV2ERID.js';
75
75
  import '../chunk-NBV56SGU.js';
76
76
  import { isDefinitionsLabel, DOCX_MIME_TYPE, toDefinitionSource, definitionLabels } from '../chunk-IYUKJESY.js';
77
77
  import { decodeWhitespaceEntities } from '../chunk-AF6RDAJF.js';
@@ -86,12 +86,13 @@ import '../chunk-ELA7Y5YW.js';
86
86
  import { PassagePill } from '../chunk-3IT5LPLF.js';
87
87
  import { useCopyText } from '../chunk-FACZSNRJ.js';
88
88
  import '../chunk-K4BGOPGG.js';
89
+ import '../chunk-OC2PD52M.js';
89
90
  import { DataTable, MetricCard } from '../chunk-I46XTM3W.js';
90
91
  import { tid } from '../chunk-AMTWY22T.js';
91
92
  import { PageHeader } from '../chunk-XCVLUXFP.js';
92
93
  import '../chunk-VIIBJBTX.js';
93
- import '../chunk-OC2PD52M.js';
94
- import { buildLibrarySkills, filterLibrarySkills, SKILL_SOURCE_LABELS, SKILL_TYPE_LABELS, SkillViewToggle, SkillFilterChips, SkillTile, SkillGenerateForm, SkillLibraryDetail, parseSkillFrontmatter, SKILL_MAIN_FILENAME, SkillEditForm, DEFAULT_AGENT_CAPABILITIES, stripPersonaPreamble, AgentCreator, DEFAULT_AGENT_TYPES, DEFAULT_AGENT_TEMPLATES, AgentAvatarField, isValidAgentName, AgentConnectInstructions, ConsentPage, ConsentCard, ConsentHeader, ConsentNotice, ConsentSection, ConsentBulletList, ConsentStrong, ConsentText, ConfigForm, AgentEditView, AgentMainView, AgentCreatedView, AgentCreateView, moveTargets, NewThreadDialog, openWorkflowLaunch, useWorkflowLaunchRequest, WorkflowRunStatus, ThreadStatusLine, AgentBar, AgentBarNotes, AgentBarQueuedNote, AgentBarProbeAnswer, ConversationListView, ConversationTurnSpeaker, filterConversationRows, ConsentMessage, CopyableUrl, ConsentPermissionList, ConsentActions, ConsentFootnote, AgentBarStatus, AgentBarIconButton, AgentBarMenu, composePersona, importSkillFile, importSkillFromUrl, skillSlug, serializeSkill, STATUS_LABELS, asTaskStatus, UploadTaskList, TaskEmptyState, workflowToSkillMarkdown, TaskTable, groupAgentTasks, AgentGallery, goalProgress, AgentCard, closeWorkflowLaunch, defaultTaskComposerValues } from '../chunk-FKFUAU4F.js';
94
+ import { buildLibrarySkills, filterLibrarySkills, SKILL_SOURCE_LABELS, SKILL_TYPE_LABELS, SkillViewToggle, SkillFilterChips, SkillTile, SkillGenerateForm, SkillLibraryDetail, parseSkillFrontmatter, SKILL_MAIN_FILENAME, SkillEditForm, DEFAULT_AGENT_CAPABILITIES, stripPersonaPreamble, AgentCreator, DEFAULT_AGENT_TYPES, DEFAULT_AGENT_TEMPLATES, AgentAvatarField, isValidAgentName, AgentConnectInstructions, ConsentPage, ConsentCard, ConsentHeader, ConsentNotice, ConsentSection, ConsentBulletList, ConsentStrong, ConsentText, ConfigForm, AgentEditView, AgentMainView, AgentCreatedView, AgentCreateView, moveTargets, NewThreadDialog, openWorkflowLaunch, useWorkflowLaunchRequest, WorkflowRunStatus, ThreadStatusLine, AgentBar, AgentBarNotes, AgentBarQueuedNote, AgentBarProbeAnswer, ConversationListView, ConversationTurnSpeaker, filterConversationRows, ConsentMessage, CopyableUrl, ConsentPermissionList, ConsentActions, ConsentFootnote, AgentBarStatus, AgentBarIconButton, AgentBarMenu, composePersona, importSkillFile, importSkillFromUrl, skillSlug, serializeSkill, STATUS_LABELS, asTaskStatus, UploadTaskList, TaskEmptyState, workflowToSkillMarkdown, TaskTable, groupAgentTasks, AgentGallery, goalProgress, AgentCard, closeWorkflowLaunch, defaultTaskComposerValues } from '../chunk-ASOPBELQ.js';
95
+ import { getRoleBadgeClass, formatRole, getRoleDescription } from '../chunk-JCMKYQGZ.js';
95
96
  import { EntityChip, fromPlanSteps, getCurrentAgentStepPresentation } from '../chunk-OFF2PR4W.js';
96
97
  import '../chunk-LRPGXNMA.js';
97
98
  import { BUILTIN_SKILLS, isSkillPackWorkflow, renderWorkflowIcon, newThreadToRequest, ANNOTATE_ID } from '../chunk-ZLIQ5Q2J.js';
@@ -107,8 +108,8 @@ import { TriStateFilterMenu } from '../chunk-ZQ5YTC3P.js';
107
108
  import '../chunk-RLWIUUQ5.js';
108
109
  import { SelectionBar, SelectionBarAction } from '../chunk-L3BEWZWT.js';
109
110
  import { FilterInput } from '../chunk-P4CH2ATT.js';
110
- import { ActionLink } from '../chunk-U53SIJES.js';
111
111
  import { GridView } from '../chunk-IU5CHOEU.js';
112
+ import { ActionLink } from '../chunk-U53SIJES.js';
112
113
  import { StreamedArtifactFrame } from '../chunk-Z42EEBON.js';
113
114
  import { isDeepLinkPath, parseHref, hrefFor } from '../chunk-N7X5O7B5.js';
114
115
  import { RecoveryKeyDialog, AuthLayout, AuthField, AuthLink, AuthAlert, AuthConsent } from '../chunk-FVZ2CN4A.js';
@@ -152,8 +153,8 @@ import '../chunk-PMJPPXX5.js';
152
153
  import { stepStatesFromActivity, canAssign, assigneeName, runFieldsOf } from '../chunk-XEZCSRFG.js';
153
154
  import { inputsFromContext, workflowsAccepting, validateInputs, defaultInputs, buildLaunch, skillToWorkflow } from '../chunk-ECYOIRXR.js';
154
155
  import '../chunk-XDDORJPA.js';
155
- import { fmtDate } from '../chunk-X5YMI6A7.js';
156
156
  import { useIsPhone, useMediaQuery } from '../chunk-SLSBJRWW.js';
157
+ import { fmtDate } from '../chunk-X5YMI6A7.js';
157
158
  import { ConversationFilter } from '../chunk-H773F7OR.js';
158
159
  import '../chunk-NPLYHR2E.js';
159
160
  import { useBlocksEnvironment, useRequestedSettingsSection, useIntentRequest, mailComposeRequest, mailFolderRequest, mailDraftRequest, mailMessageRequest, useCalendarViewStore, conversationStartRequest } from '../chunk-YUHSDOPW.js';
@@ -163,12 +164,12 @@ import { ModalHeader, ModalScaffold, ModalSection, ModalSectionTitle } from '../
163
164
  import { buildDeepLinkUrl } from '../chunk-SV65E4QW.js';
164
165
  import '../chunk-UP3GCNPM.js';
165
166
  import '../chunk-VUNV25KB.js';
166
- import { useDocument, usePeople, useArbiSession, useArbiSessionState, isPanelOpen, DOCUMENT_VIEWER_PANEL, useArbiSessionStore, useUpdateDocuments, useDeleteDocuments, useRenameFolder, useDownloadDocuments, useTags, useDocumentHostActions, useDocumentThumbnails, HtmlIcon, defaultLayoutState, selectDraft, assistantLabels, useArbi, useAudioRecorder, MicRecordingOverlay, useWorkspaces, isNetworkFailure, hasPendingMailChange, OUTBOX_FOLDER, useOfflineMailActive, useConversations, useRunConversation, useWorkspaceActivity, useWorkspaceUsers, getWorkspaceKind, callLink, openCall, startDmCall, calendarQueryKeys, mailQueryKeys, arbiQueryKeys, invalidateConversationLists, isWorkspaceNotificationType, describeCalendarNotification, notificationUserName, describeServerNotification, isSignatureNotificationType, useNotifications, useDeleteNotifications, useMarkNotificationsRead, useTransientView, useCallsEnabled, useDocuments, serverNotificationBellEntry, documentDisplayName, useArbiWebSocket, isNotificationRow, useReconnect, usePendingSyncCounts, useArbiHost, useOutbox, usePendingMailChanges, useWorkspaceNotificationLevel, useFollowThread, useUploadSkillFiles, useSkills, useSaveSkill, useSetSkillVisibility, useDeleteSkill, useSkillSource, useInstallSkillPack, useAgentModels, useMcpTools, useAgentConfig, useAgentWorkspaces, useCreateAgent, useSaveAgentConfig, useGrantAgentAccess, useRevokeAgentAccess, useGenerateAgentAvatar, useAgents, useDeleteAgents, useAgentSession, useAgentChats, useStartAgentSession, useCloseAgentSession, useSwitchWorkspace, useWorkItems, ArtifactCanvas, useTagKindSchema, useCreateTag, useSetTagValues, useUpdateTagKindSchema, useUpdateTag, useGenerateDocTags, useFacts, useDeleteTag, useExtractEntities, useEntityExtractionDocIds, useStartWorkspaceTransfer, useResumeWorkspaceTransfer, useCancelWorkspaceTransfer, useWorkspaceTransfer, useWorkspaceTransfers, useWorkspaceExportDownload, usePlanWorkspaceTransfer, isTransferResumable, isTransferFinished, useFactsSearch, 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, useCurrentUser, useSyncOfflineMailbox, useOfflineMailSettings, useOfflineMailStatus, useArbiWsStatus, useWorkOffline, useFeature, useIsEntitled, useStorageSnapshots, useUpdateWorkspace, useAddWorkspaceMembers, useRemoveWorkspaceMembers, useContacts, useInviteContacts, useDeleteContact, useSetWorkspaceMemberRoles, usePeopleSearch, useIsSlow, useProducts, useCreateProject, useDeleteProject, toShellWorkspace, useUploadDocuments, useSetWorkspaceHouseTemplate, useSetDeploymentHouseTemplate, supportsHouseTemplates, workspaceHouseTemplateId, isDeploymentAdmin, useHouseTemplateCandidates, useWorkspaceArchive, useArchiveWorkspace, useSessions, useAuthorizeLimits, useTerminateSession, useUnarchiveWorkspace, isArchiveMoving, 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, useDeleteWorkspaces, useArchiveProgressPolling, useCreateContact, useUpdateContact, useLinkContact, useEntitlements, useImportContacts, entitlementRefusal, myChatId, useChatThread, useChatPost, useDeleteChatMessage, useMarkChatRead, setOpenChat, useAgentDmStatus, annotateThread, userDisplayName, DmComposer, TypingIndicator, useRenameChat, useAddChatMembers, useRemoveChatMember, useChats, useChatSummaries, useRequestWorkspaceAccess, ConversationList, dmTabId, useUnreadByPeer, useConfigSchema, useSaveConfig, ArbiBotHeadIcon, TaskThreadPendingError, useStartTaskQuery, useCreateWork, useCalendarEvents, useCalendars, useUploadFromUrls, useCurrentWorkspace, useFeatureCheck, useDocumentsSupport, isZipFile, prepareUploadFiles, UPLOAD_MAX_FILE_SIZE, filesFromDrop, UPLOAD_ACCEPT, useOfflineDocumentIds, MAX_RETRIEVE_DOC_IDS, useSemanticSearch, useAssignDocTags, useLocalDrafts, queueMailChange, enqueueOutbox, deleteLocalDraft, saveLocalDraft, loadOfflineMailAttachment, useMailUnlock, useMailFolders, useMailMessages, useMailDraftCompose, useMailMessage, useMailCache, useMailConversations, toMailConversation, groupMailConversations, useNativeThreadKeys, mailConversationKey, MailOfflineUnavailableError, accountPath, useClaimSecureMail, useCanHostCalls, useOpenCallMeetingChat, useFetchCalendarEvent, useCalendarSettings, useCalendarOverlays, useCalendarOutbox, useCalendarAccounts, useSyncAccountsOnOpen, useResumeCalendarAccountConnect, useCreateEvent, useUpdateEvent, useDeleteEvent, useMoveEvent, useRespondToEvent, useCreateCalendar, useUpdateCalendar, useDeleteCalendar, useImportCalendar, useSaveCalendarSettings, useRefreshCalendar, useCalendarEvent, getPublicBookingPage, bookPublicSlot, PublicBookingError, useActiveConfigId, useUploadFiles, useUpdateDocTag, useRemoveDocTags, useKeepDocumentsOffline, useRemoveDocumentsOffline, useOpenViewerDocumentId, subscribeDocumentRows, useRefreshDocuments, useArbiWsStore, isTableViewOf, viewsOfTable, useDocumentsLoading, selectViewingDocumentId, useWorkspaceProcessing, DISMISSED_TASK_TTL_MS, useDatabases, useCreateDatabase, useImportDatabase, useChatArrivals, useConversationPendingAuth, openAccessRequest, useSignOut, confirmLosingOfflineMail, useSupportTickets, useSupportTicket, useRateSupportTicket, ImageCropper, useConversationSettings, useConversationActivity, useConversationItems, threadTabId, useUpdateConversation, useAgentRunControl, useDeleteConversation, useCanEditShared, useIsWorkspaceOwner, useWorkflows, useWorkspaceRole, useConversationDocuments, readWorkspaceLastOpened, isQueuedCalendarWrite, DateSeparator, ChatBubble, isAliasTakenError, nextAliasSuggestion, aliasTakenMessage, requestPersistentStorage, wipeOfflineMail, mailJson, connectorReturnTo, GitHubIcon, AppleIcon, GoogleIcon, LinkedInIcon, downloadRecoveryFile, cropImage, setWorkOfflineIn, isDeploymentUserNotification, getWorkspaceActionText, getWorkspaceSentPhrase, BOX_SEAT_REFUSED, BOX_SEAT_REFUSED_TITLE, documentActivityPhrase, inputRequestTitle, WORK_NOTIFICATION_LABELS, ConversationScope, useSessionView, useUpdateFact, useDeleteFact, useCreateFact, usePassageQuotes, useAccountClient, formatGbpPerMillionTokens, usePlanQuote, useCreateProjectCheckout, useInvalidateProjects, useInvalidateEntitlements, useMoveWorkspaceToProject, useCreateWorkspace, useDriveFolderDocCount, useChangeProjectPlan, useCancelProjectSubscription, usePreviewProjectPlanChange, useAddProjectAddonBlock, useCreateGroupChat, useFlushOutbox, retryOutboxItem, fileAttachment, useMailProjects, useSaveMailDraft, useSendMail, useMailDraftReplaced, documentMailAttachment, useReadMailMessage, useMailThread, useCalendarInvitations, useDecideCounter, useSearchContacts, usePublishCalendar, useCalendarShares, useShareCalendar, useUnshareCalendar, useSubscribeCalendar, useHolidayCountries, useAddHolidayCalendar, cancelPublicBooking, useConfig, useSaveConfigField, SHAREPOINT_VENDORS, isDriveSyncVendor, getRelatedTotal, useRelatedDocuments, useDatabase, useDatabaseRows, useUpdateDatabase, useDeleteDatabase, useAddDatabaseRows, useUpdateDatabaseRow, useDeleteDatabaseRows, useImportDatabaseRows, useExportDatabase, DATABASE_ROWS_PAGE, useInvalidateAfterTransfer, useConfigs, useDeleteConfig, isFullConfig, resolveConfigModel, useChatUnreadTotal, useMarkDocumentShared, useConversationData, useConnectRunStream, useAnswerAgentQuestion, useConversationIsShared, buildPendingFirstTurn, useConversationTurn, useAskAgain, transcriptSegmentOf, getOrphanedLastMessage, refuseChatWhenOffline, useThreadDocument, useDocumentAutoAdd, useAutoSendDraft, READ_ONLY_MEETING_TEXT, useConversationSearch, useProjectConversationUsage, signatureNotificationPhrase, signatureRequestMeta, getNotificationTypeMeta, useConversation, deleteOutboxItem, useMailDraftEditor, useFreeBusy, useFindTime, useCalendarSupport, useStartCalendarAccountOAuth, useConnectOAuthAccount, useBookingPages, useDeleteBookingPage, useRooms, useCancelMailboxSync, useMailboxSyncProgress, useRefreshConnectorsOnRunEnd, useCancelDriveSync, useDriveFolders, useDriveSyncProgress, useDriveSyncEstimate, useSearchDatabaseRows, callSession, isReplayableArbiMutation, useConnectorAutoSync, workflowRunTitle, useUpdateProjectNextPeriodAddons, useUpdateProjectAddonSettings, useSyncCalendarAccount, useUpdateCalendarAccount, useDisconnectCalendarAccount, ACCOUNT_VENDOR, useCalDavProfiles, useConnectCalDavAccount, useSaveBookingPage, useCreateRoom, useTriggerMailboxSync, useTriggerDriveSync } from '@arbidocs/react';
167
+ import { useDocument, usePeople, useArbiSession, useArbiSessionState, isPanelOpen, DOCUMENT_VIEWER_PANEL, useArbiSessionStore, useUpdateDocuments, useDeleteDocuments, useRenameFolder, useDownloadDocuments, useTags, useDocumentHostActions, useDocumentThumbnails, HtmlIcon, defaultLayoutState, selectDraft, assistantLabels, useArbi, useAudioRecorder, MicRecordingOverlay, useWorkspaces, isNetworkFailure, hasPendingMailChange, OUTBOX_FOLDER, useOfflineMailActive, useConversations, useRunConversation, useWorkspaceActivity, useWorkspaceUsers, getWorkspaceKind, callLink, openCall, startDmCall, calendarQueryKeys, mailQueryKeys, arbiQueryKeys, invalidateConversationLists, isWorkspaceNotificationType, describeCalendarNotification, notificationUserName, describeServerNotification, isSignatureNotificationType, useNotifications, useDeleteNotifications, useMarkNotificationsRead, useTransientView, useCallsEnabled, useDocuments, serverNotificationBellEntry, documentDisplayName, useArbiWebSocket, isNotificationRow, useReconnect, usePendingSyncCounts, useArbiHost, useOutbox, usePendingMailChanges, useWorkspaceNotificationLevel, useFollowThread, useUploadSkillFiles, useSkills, useSaveSkill, useSetSkillVisibility, useDeleteSkill, useSkillSource, useInstallSkillPack, useAgentModels, useMcpTools, useAgentConfig, useAgentWorkspaces, useCreateAgent, useSaveAgentConfig, useGrantAgentAccess, useRevokeAgentAccess, useGenerateAgentAvatar, useAgents, useDeleteAgents, useAgentSession, useAgentChats, useStartAgentSession, useCloseAgentSession, useSwitchWorkspace, useWorkItems, ArtifactCanvas, useTagKindSchema, useCreateTag, useSetTagValues, useUpdateTagKindSchema, useUpdateTag, useGenerateDocTags, useFacts, useDeleteTag, useExtractEntities, useEntityExtractionDocIds, useStartWorkspaceTransfer, useResumeWorkspaceTransfer, useCancelWorkspaceTransfer, useWorkspaceTransfer, useWorkspaceTransfers, useWorkspaceExportDownload, usePlanWorkspaceTransfer, isTransferResumable, isTransferFinished, useFactsSearch, 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, useCurrentUser, useSyncOfflineMailbox, useOfflineMailSettings, useOfflineMailStatus, useArbiWsStatus, useWorkOffline, useFeature, useIsEntitled, useStorageSnapshots, useUpdateWorkspace, useAddWorkspaceMembers, useRemoveWorkspaceMembers, useContacts, useInviteContacts, useDeleteContact, useSetWorkspaceMemberRoles, usePeopleSearch, useIsSlow, useProducts, useCreateProject, useDeleteProject, toShellWorkspace, useUploadDocuments, useSetWorkspaceHouseTemplate, useSetDeploymentHouseTemplate, supportsHouseTemplates, workspaceHouseTemplateId, isDeploymentAdmin, useHouseTemplateCandidates, useWorkspaceArchive, useArchiveWorkspace, useSessions, useAuthorizeLimits, useTerminateSession, useUnarchiveWorkspace, isArchiveMoving, useCanCreateProjects, PROJECT_CREATION_DENIED_REASON, useEnableMailboxSync, useNativeMailFiling, useSetNativeMailFiling, useMailboxFolders, useEnableDriveSync, useDriveFolderChildren, connectorErrorStatus, useProjectInvoices, useProjects, useUpdateProjectFields, useChargeWatch, useAddonQuote, STILL_WORKING, useProjectBillingPortal, useProjectUsage, MODEL_GROUP_LABELS, useRefreshProject, useBoxRole, cachedQuotaUsedUp, useDeleteWorkspaces, useArchiveProgressPolling, useCreateContact, useUpdateContact, useLinkContact, useEntitlements, useImportContacts, entitlementRefusal, myChatId, useChatThread, useChatPost, useDeleteChatMessage, useMarkChatRead, setOpenChat, useAgentDmStatus, annotateThread, userDisplayName, DmComposer, TypingIndicator, useRenameChat, useAddChatMembers, useRemoveChatMember, useChats, useChatSummaries, useRequestWorkspaceAccess, ConversationList, dmTabId, useUnreadByPeer, useConfigSchema, useSaveConfig, ArbiBotHeadIcon, TaskThreadPendingError, useStartTaskQuery, useCreateWork, useCalendarEvents, useCalendars, useUploadFromUrls, useCurrentWorkspace, useFeatureCheck, useDocumentsSupport, isZipFile, prepareUploadFiles, UPLOAD_MAX_FILE_SIZE, filesFromDrop, UPLOAD_ACCEPT, useOfflineDocumentIds, MAX_RETRIEVE_DOC_IDS, useSemanticSearch, useAssignDocTags, useLocalDrafts, queueMailChange, enqueueOutbox, deleteLocalDraft, saveLocalDraft, loadOfflineMailAttachment, useMailUnlock, useMailFolders, useMailMessages, useMailDraftCompose, useMailMessage, useMailCache, useMailConversations, toMailConversation, groupMailConversations, useNativeThreadKeys, useConnectedMailFiling, mailConversationKey, MailOfflineUnavailableError, accountPath, useClaimSecureMail, useCanHostCalls, useOpenCallMeetingChat, useFetchCalendarEvent, useCalendarSettings, useCalendarOverlays, useCalendarOutbox, useCalendarAccounts, useSyncAccountsOnOpen, useResumeCalendarAccountConnect, useCreateEvent, useUpdateEvent, useDeleteEvent, useMoveEvent, useRespondToEvent, useCreateCalendar, useUpdateCalendar, useDeleteCalendar, useImportCalendar, useSaveCalendarSettings, useRefreshCalendar, useCalendarEvent, getPublicBookingPage, bookPublicSlot, PublicBookingError, useActiveConfigId, useUploadFiles, useUpdateDocTag, useRemoveDocTags, useKeepDocumentsOffline, useRemoveDocumentsOffline, useOpenViewerDocumentId, subscribeDocumentRows, useRefreshDocuments, useArbiWsStore, isTableViewOf, viewsOfTable, useDocumentsLoading, selectViewingDocumentId, useWorkspaceProcessing, DISMISSED_TASK_TTL_MS, useDatabases, useCreateDatabase, useImportDatabase, useChatArrivals, useConversationPendingAuth, openAccessRequest, useSignOut, confirmLosingOfflineMail, useSupportTickets, useSupportTicket, useRateSupportTicket, ImageCropper, useConversationSettings, useConversationActivity, useConversationItems, threadTabId, useUpdateConversation, useAgentRunControl, useDeleteConversation, useCanEditShared, useIsWorkspaceOwner, useWorkflows, useWorkspaceRole, useConversationDocuments, readWorkspaceLastOpened, isQueuedCalendarWrite, DateSeparator, ChatBubble, isAliasTakenError, nextAliasSuggestion, aliasTakenMessage, requestPersistentStorage, wipeOfflineMail, mailJson, connectorReturnTo, GitHubIcon, AppleIcon, GoogleIcon, LinkedInIcon, downloadRecoveryFile, cropImage, setWorkOfflineIn, isDeploymentUserNotification, getWorkspaceActionText, getWorkspaceSentPhrase, BOX_SEAT_REFUSED, BOX_SEAT_REFUSED_TITLE, documentActivityPhrase, inputRequestTitle, WORK_NOTIFICATION_LABELS, ConversationScope, useSessionView, useUpdateFact, useDeleteFact, useCreateFact, usePassageQuotes, useAccountClient, formatGbpPerMillionTokens, usePlanQuote, useCreateProjectCheckout, useInvalidateProjects, useInvalidateEntitlements, useMoveWorkspaceToProject, useCreateWorkspace, useDriveFolderDocCount, useChangeProjectPlan, useCancelProjectSubscription, usePreviewProjectPlanChange, useAddProjectAddonBlock, useCreateGroupChat, useFlushOutbox, retryOutboxItem, fileAttachment, useMailProjects, useSaveMailDraft, useSendMail, useMailDraftReplaced, documentMailAttachment, useMailWorkspacePrimer, sendMailFile, useReadMailMessage, useMailThread, useMailFiling, useStopMailFilingRule, useCalendarInvitations, useDecideCounter, useSearchContacts, usePublishCalendar, useCalendarShares, useShareCalendar, useUnshareCalendar, useSubscribeCalendar, useHolidayCountries, useAddHolidayCalendar, cancelPublicBooking, useConfig, useSaveConfigField, SHAREPOINT_VENDORS, isDriveSyncVendor, getRelatedTotal, useRelatedDocuments, useDatabase, useDatabaseRows, useUpdateDatabase, useDeleteDatabase, useAddDatabaseRows, useUpdateDatabaseRow, useDeleteDatabaseRows, useImportDatabaseRows, useExportDatabase, DATABASE_ROWS_PAGE, useInvalidateAfterTransfer, useConfigs, useDeleteConfig, isFullConfig, resolveConfigModel, useChatUnreadTotal, useMarkDocumentShared, useConversationData, useConnectRunStream, useAnswerAgentQuestion, useConversationIsShared, buildPendingFirstTurn, useConversationTurn, useAskAgain, transcriptSegmentOf, getOrphanedLastMessage, refuseChatWhenOffline, useThreadDocument, useDocumentAutoAdd, useAutoSendDraft, READ_ONLY_MEETING_TEXT, useConversationSearch, useProjectConversationUsage, signatureNotificationPhrase, signatureRequestMeta, getNotificationTypeMeta, useConversation, deleteOutboxItem, useMailDraftEditor, useFreeBusy, useFindTime, useCalendarSupport, useStartCalendarAccountOAuth, useConnectOAuthAccount, useBookingPages, useDeleteBookingPage, useRooms, useFileWaitingNativeMail, useCancelMailboxSync, useMailboxSyncProgress, useRefreshConnectorsOnRunEnd, useCancelDriveSync, useDriveFolders, useDriveSyncProgress, useDriveSyncEstimate, useSearchDatabaseRows, callSession, isReplayableArbiMutation, useConnectorAutoSync, workflowRunTitle, useUpdateProjectNextPeriodAddons, useUpdateProjectAddonSettings, useSyncCalendarAccount, useUpdateCalendarAccount, useDisconnectCalendarAccount, ACCOUNT_VENDOR, useCalDavProfiles, useConnectCalDavAccount, useSaveBookingPage, useCreateRoom, useTriggerMailboxSync, useTriggerDriveSync } from '@arbidocs/react';
167
168
  export { viewsOfTable } from '@arbidocs/react';
168
- import { getDocumentTitle, getFileTypeIcon, HoverCard, HoverCardTrigger, HoverCardContent, formatFriendlyDate, getEntityLabel, EntityPill, Badge, ThreadVisibilityIcon, Button, ShieldIcon, EntityIcon, Tooltip, TooltipTrigger, TooltipContent, getUserDisplayName, createUserAvatarIcon, Label, Input, cn, Textarea, Dialog, DialogContent, DialogTitle, DialogDescription, DialogHeader, tagKindNouns, tagKindTitle, getTagTypeLabel, VisibilityToggle, getEntityColor, isImageDocument, IconToggle, Switch, Checkbox, entityNoun, Popover, PopoverTrigger, PopoverContent, formatRelativeTime, getUserAvatarColor, DialogTrigger, CommandGroup, CommandItem, ProjectEntity, DialogFooter, Tabs, TabsList, TabsTrigger, TabsContent, isAgent, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, AgentBadge, PresenceLabel, getDocIcon, Command, CommandInput, CommandList, CommandEmpty, canonicalFolderPath, formatFolderLabel, TagEntity, getDocumentNature, getDocumentAuthor, markdownToPlainText, getDocumentSubject, formatDocDate, getDocumentDate, friendlyFileType, Slider, UserMenu, PopoverAnchor, isDocumentAddableToConversation, DocumentEntity, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, formatCompactLastSeen, ArbiIcon, UserEntity, agentAvatarColors, getUserInitials, ProviderIcon, Card, CardHeader, CardTitle, CardContent, VerifiedToggle, Avatar, AvatarImage, AvatarFallback, Progress } from '@arbidocs/react/ui';
169
+ import { getDocumentTitle, getFileTypeIcon, HoverCard, HoverCardTrigger, HoverCardContent, formatFriendlyDate, getEntityLabel, EntityPill, Badge, ThreadVisibilityIcon, Button, ShieldIcon, EntityIcon, Tooltip, TooltipTrigger, TooltipContent, getUserDisplayName, createUserAvatarIcon, Label, Input, cn, Textarea, Dialog, DialogContent, DialogTitle, DialogDescription, DialogHeader, tagKindNouns, tagKindTitle, getTagTypeLabel, VisibilityToggle, getEntityColor, isImageDocument, IconToggle, Switch, Checkbox, entityNoun, Popover, PopoverTrigger, PopoverContent, formatRelativeTime, getUserAvatarColor, DialogTrigger, CommandGroup, CommandItem, ProjectEntity, DialogFooter, Tabs, TabsList, TabsTrigger, TabsContent, isAgent, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, AgentBadge, PresenceLabel, getDocIcon, Command, CommandInput, CommandList, CommandEmpty, canonicalFolderPath, formatFolderLabel, TagEntity, getDocumentNature, getDocumentAuthor, markdownToPlainText, getDocumentSubject, formatDocDate, getDocumentDate, friendlyFileType, Slider, UserMenu, PopoverAnchor, isDocumentAddableToConversation, DocumentEntity, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, formatCompactLastSeen, ArbiIcon, UserEntity, agentAvatarColors, getUserInitials, ProviderIcon, Card, CardHeader, CardTitle, CardContent, VerifiedToggle, RadioGroup, RadioGroupItem, Avatar, AvatarImage, AvatarFallback, Progress } from '@arbidocs/react/ui';
169
170
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
170
171
  import { lazy, createContext, memo, useState, useEffect, forwardRef, useRef, useMemo, useLayoutEffect, useCallback, useImperativeHandle, Suspense, useSyncExternalStore, useContext, createElement, Fragment as Fragment$1, useId } from 'react';
171
- import { Folder, Upload, Eye, Activity, HardDrive, Bell, Info, UserCheck, Trash2, Loader2, Link2, Search, Plus, ArrowLeft, Bot, Tags, NotebookPen, CheckCircle2, Milestone, LogOut, Wifi, RotateCcw, Mail, ExternalLink, Lock, User, HatGlasses, MessageSquare, Code2, PlugZap, Gauge, Cloud, XCircle, Building2, Palette, Type, ChevronDown, ChevronRight, KeyRound, Download, Shield, Star, Check, UserPlus, FolderInput, FileText, Archive, ArchiveRestore, Printer, FolderClock, Users, SquareStack, Table, FolderKanban, Sparkles, Cake, X, UserRound, UserMinus, UsersRound, Phone, MessageCircleMore, MailOpen, BellOff, MailQuestion, MailX, UserStar, AtSign, Video, Camera, Send, FilePlus2, Monitor, Globe, MessagesSquare, ArrowRight, Wand2, Paperclip, CircleCheck, Calendar, Copy, Network, CheckCircle, TriangleAlert, LoaderCircle, File as File$1, FolderOpen, Tag, Settings, Clock, MapPin, Hash, FileType, Fingerprint, Share2, Columns3, EyeOff, ArrowUp, ArrowDown, ZoomOut, Eraser, ClockFading, Infinity, Bug, Crop, Undo2, ImageUp, MessageCircleQuestionMark, Wrench, RotateCw, Minus, Link, ClipboardList, Lightbulb, Square, Table2, CalendarDays, ShieldCheck, CalendarClock, Zap, KeySquare, BookUser, CheckCheck, FolderUp, ArrowUpCircle, Contact, Scale, MoreHorizontal, Pencil, BookA, Quote, Workflow, RefreshCw, WifiOff, UserCog, SquareDashedMousePointer, Settings2, Megaphone, Library, LayoutGrid, FolderTree, Files, Crown, Compass, Inbox, CalendarX, CalendarCheck, Mic, Play, Pause, BrainCircuit, Minimize2, Maximize2, AlertCircle, HardDriveDownload, CalendarSearch, DoorOpen, AlertTriangle, CloudOff } from 'lucide-react';
172
+ import { Folder, Upload, Eye, Activity, HardDrive, Bell, Info, UserCheck, Trash2, Loader2, Link2, Search, Plus, ArrowLeft, Bot, Tags, NotebookPen, CheckCircle2, Milestone, LogOut, Wifi, RotateCcw, Mail, ExternalLink, Lock, User, HatGlasses, MessageSquare, Code2, PlugZap, Gauge, Cloud, XCircle, Building2, Palette, Type, ChevronDown, ChevronRight, KeyRound, Download, Shield, Star, Check, UserPlus, FolderInput, FileText, Archive, ArchiveRestore, Printer, FolderClock, Users, SquareStack, Table, FolderKanban, Sparkles, Cake, X, UserRound, UserMinus, UsersRound, Phone, MessageCircleMore, MailOpen, BellOff, MailQuestion, MailX, UserStar, AtSign, Video, Camera, Send, FilePlus2, Monitor, Globe, MessagesSquare, ArrowRight, Wand2, Paperclip, CircleCheck, Calendar, Copy, Network, CheckCircle, TriangleAlert, LoaderCircle, File as File$1, FolderOpen, Tag, Settings, Clock, MapPin, Hash, FileType, Fingerprint, Share2, Columns3, EyeOff, ArrowUp, ArrowDown, ZoomOut, Eraser, ClockFading, Infinity, Bug, Crop, Undo2, ImageUp, MessageCircleQuestionMark, Wrench, RotateCw, Minus, Link, ClipboardList, Lightbulb, Square, Table2, CalendarDays, ShieldCheck, CalendarClock, Zap, KeySquare, BookUser, CheckCheck, FolderUp, ArrowUpCircle, Contact, Scale, MoreHorizontal, Pencil, BookA, Quote, Workflow, RefreshCw, WifiOff, UserCog, SquareDashedMousePointer, Settings2, Megaphone, Library, LayoutGrid, FolderTree, Files, Crown, Compass, Inbox, CalendarX, CalendarCheck, Mic, Play, Pause, BrainCircuit, Minimize2, Maximize2, AlertCircle, HardDriveDownload, FolderCheck, CalendarSearch, DoorOpen, AlertTriangle, CloudOff } from 'lucide-react';
172
173
  import { useAssistantName, hasMessageBody, notify, useNotify, useAssistantCopy, requestSearch, sharedSearchSession, takePendingSearch, selectUnread, NotificationBell, useTurnDocumentId, useOpenDocumentId, useRegisterOpenDocument, useHostConfigRecord } from '@arbidocs/react/shell';
173
174
  import { useQueryClient } from '@tanstack/react-query';
174
175
  import { parseCallFragment, isMessageType, logger, unlockIdentityWithPassword, createRecoveryUrl, bytesToBase64 } from '@arbidocs/client';
@@ -2666,7 +2667,7 @@ function AgentWorkspaceAccess({
2666
2667
  /* @__PURE__ */ jsx("span", { children: workspace.name }),
2667
2668
  /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground", children: [
2668
2669
  "\xB7 ",
2669
- workspace.role
2670
+ formatRole(workspace.role)
2670
2671
  ] }),
2671
2672
  /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground", children: [
2672
2673
  "\xB7 ",
@@ -5216,7 +5217,7 @@ function ConnectedExportPanel({
5216
5217
  return role === "owner" || role === "collaborator";
5217
5218
  });
5218
5219
  const targetName = (id) => workspaces.find((w) => w.external_id === id)?.name ?? "the other workspace";
5219
- const moveDisabledReason = workspace && roleIn(workspace) === "guest" ? "Guests cannot remove anything from this workspace" : void 0;
5220
+ const moveDisabledReason = workspace && roleIn(workspace) === "guest" ? "Read-only members cannot remove anything from this workspace" : void 0;
5220
5221
  const resumable = recentJobs.find((j) => isTransferResumable(j));
5221
5222
  useEffect(() => {
5222
5223
  if (!job || !isTransferFinished(job)) return;
@@ -9264,7 +9265,7 @@ function ConnectedAppsSettings({
9264
9265
  /* @__PURE__ */ jsx("p", { className: "font-medium text-foreground", children: "Agent workspace access" }),
9265
9266
  slackAgentWorkspacesLoading ? /* @__PURE__ */ jsx("p", { className: "mt-1 text-muted-foreground", children: "Loading access\u2026" }) : slackAgentWorkspaces.length ? /* @__PURE__ */ jsx("ul", { className: "mt-1 space-y-1", children: slackAgentWorkspaces.map((workspace) => /* @__PURE__ */ jsxs("li", { className: "flex flex-wrap gap-x-2", children: [
9266
9267
  /* @__PURE__ */ jsx("span", { children: workspace.name }),
9267
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: workspace.role }),
9268
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: formatRole(workspace.role) }),
9268
9269
  /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: workspace.permanent ? "Standing access" : "Temporary access" }),
9269
9270
  workspace.is_default && /* @__PURE__ */ jsx("span", { className: "font-medium", children: "Slack default" })
9270
9271
  ] }, workspace.workspace_ext_id)) }) : /* @__PURE__ */ jsx("p", { className: "mt-1 text-muted-foreground", children: "No workspace access. Share a workspace with this agent in that workspace\u2019s Members settings." })
@@ -11787,11 +11788,9 @@ function ConnectedPeopleMultiSelect({
11787
11788
  }
11788
11789
  );
11789
11790
  }
11790
- var ALL_ROLES2 = [
11791
- { value: "owner", label: "Owner" },
11792
- { value: "collaborator", label: "Collaborator" },
11793
- { value: "guest", label: "Guest" }
11794
- ].map((r) => ({ ...r, badgeClass: getRoleBadgeClass(r.value) }));
11791
+ var ALL_ROLES2 = ["owner", "collaborator", "guest"].map(
11792
+ (value) => ({ value, label: formatRole(value), badgeClass: getRoleBadgeClass(value) })
11793
+ );
11795
11794
  function AddWorkspaceMembersForm({
11796
11795
  currentMemberEmails,
11797
11796
  onAddUsers,
@@ -14004,6 +14003,18 @@ var BACKFILL_OPTIONS = [
14004
14003
  function windowLabel(days) {
14005
14004
  return BACKFILL_OPTIONS.find((o) => o.value === String(days))?.label ?? `Last ${days} days`;
14006
14005
  }
14006
+
14007
+ // src/connection/connectors/native-mailbox.ts
14008
+ var NATIVE_MAILBOX = "native";
14009
+ var NATIVE_MAILBOX_FOLDERS = [
14010
+ { id: "inbox", name: "Inbox" },
14011
+ { id: "sent", name: "Sent" },
14012
+ { id: "archive", name: "Archive" }
14013
+ ];
14014
+ var NATIVE_MAILBOX_SOURCE = {
14015
+ vendor_key: NATIVE_MAILBOX,
14016
+ display_name: "Your mailbox"
14017
+ };
14007
14018
  function ConnectedMailboxSyncDialog({
14008
14019
  catalog,
14009
14020
  userConnector,
@@ -14013,16 +14024,22 @@ function ConnectedMailboxSyncDialog({
14013
14024
  onEnabled
14014
14025
  }) {
14015
14026
  const enableSync = useEnableMailboxSync();
14027
+ const isNative = catalog.vendor_key === NATIVE_MAILBOX;
14028
+ const vendorKey = catalog.vendor_key;
14029
+ const nativeFiling = useNativeMailFiling({ enabled: open && isNative });
14030
+ const setNativeFiling = useSetNativeMailFiling();
14031
+ const nativeHere = nativeFiling.data?.find((f) => f.workspace_ext_id === lockedWorkspaceExtId);
14032
+ const nativeKey = nativeHere ? `${nativeHere.backfill_window}:${nativeHere.folders.join()}` : "";
14016
14033
  const disconnect = useDisconnectConnector();
14017
14034
  const arbi = useArbi();
14018
14035
  const { notify: notify17, navigate } = useBlocksEnvironment();
14019
14036
  const reconnect = async () => {
14020
14037
  try {
14021
- await disconnect.mutateAsync({ vendorKey: catalog.vendor_key });
14038
+ await disconnect.mutateAsync({ vendorKey });
14022
14039
  } catch {
14023
14040
  }
14024
14041
  try {
14025
- navigate(await arbi.connectors.authorize(catalog.vendor_key, connectorReturnTo()));
14042
+ navigate(await arbi.connectors.authorize(vendorKey, connectorReturnTo()));
14026
14043
  } catch {
14027
14044
  notify17("Could not start reconnection. Please try again.", "error");
14028
14045
  }
@@ -14035,18 +14052,18 @@ function ConnectedMailboxSyncDialog({
14035
14052
  setTokensBridged(false);
14036
14053
  return;
14037
14054
  }
14038
- if (!userConnector?.is_connected) {
14055
+ if (isNative || !userConnector?.is_connected) {
14039
14056
  setTokensBridged(true);
14040
14057
  return;
14041
14058
  }
14042
14059
  let cancelled = false;
14043
- void arbi.connectors.bridgeTokens({ vendor: catalog.vendor_key }).finally(() => {
14060
+ void arbi.connectors.bridgeTokens({ vendor: vendorKey }).finally(() => {
14044
14061
  if (!cancelled) setTokensBridged(true);
14045
14062
  });
14046
14063
  return () => {
14047
14064
  cancelled = true;
14048
14065
  };
14049
- }, [open, arbi, userConnector?.is_connected, catalog.vendor_key]);
14066
+ }, [open, arbi, userConnector?.is_connected, vendorKey, isNative]);
14050
14067
  const [workspaceExtId, setWorkspaceExtId] = useState("");
14051
14068
  const [backfill, setBackfill] = useState("1");
14052
14069
  const [backfillSince, setBackfillSince] = useState("");
@@ -14073,12 +14090,17 @@ function ConnectedMailboxSyncDialog({
14073
14090
  setAutoRename(workspaceSync?.auto_rename ?? userConnector?.auto_rename ?? false);
14074
14091
  setShared(workspaceSync?.shared ?? userConnector?.shared ?? false);
14075
14092
  setAutoSync(workspaceSync?.auto_sync ?? userConnector?.auto_sync ?? false);
14076
- }, [open, lockedWorkspaceExtId, userConnector]);
14093
+ if (isNative) {
14094
+ setBackfill(String(nativeHere?.backfill_window ?? 90));
14095
+ setSelectedFolders(nativeHere ? [...nativeHere.folders] : ["inbox"]);
14096
+ }
14097
+ }, [open, lockedWorkspaceExtId, userConnector, isNative, nativeKey]);
14077
14098
  const {
14078
- data: folders = [],
14099
+ data: connectorFolders = [],
14079
14100
  isLoading: foldersQueryLoading,
14080
14101
  error: foldersError
14081
- } = useMailboxFolders(catalog.vendor_key, open && tokensBridged);
14102
+ } = useMailboxFolders(vendorKey, open && tokensBridged && !isNative);
14103
+ const folders = isNative ? NATIVE_MAILBOX_FOLDERS.map((f) => ({ ...f })) : connectorFolders;
14082
14104
  const foldersLoading = !tokensBridged || foldersQueryLoading;
14083
14105
  const folderTree = buildMailFolderTree(folders);
14084
14106
  const [expandAllNonce, setExpandAllNonce] = useState(0);
@@ -14090,11 +14112,34 @@ function ConnectedMailboxSyncDialog({
14090
14112
  const toggleAllFolders = () => setSelectedFolders(allSelected ? [] : selectAllIds);
14091
14113
  const isCustomBackfill = backfill === "custom";
14092
14114
  const customDateMissing = isCustomBackfill && !backfillSince;
14115
+ const turningOff = isNative && selectedFolders.length === 0 && !!nativeHere?.folders.length;
14116
+ const saveDisabled = !workspaceExtId || selectedFolders.length === 0 && !turningOff || customDateMissing;
14093
14117
  const handleEnableSubmit = () => {
14094
- if (!workspaceExtId || selectedFolders.length === 0 || customDateMissing) return;
14118
+ if (saveDisabled || !workspaceExtId) return;
14119
+ if (isNative) {
14120
+ setNativeFiling.mutate(
14121
+ {
14122
+ workspaceExtId,
14123
+ folders: selectedFolders,
14124
+ backfillWindow: Number(backfill)
14125
+ },
14126
+ {
14127
+ onSuccess: () => {
14128
+ notify17(
14129
+ turningOff ? "New mail from your folders is no longer added here" : "Email settings saved",
14130
+ "success"
14131
+ );
14132
+ onOpenChange(false);
14133
+ onEnabled?.(workspaceExtId);
14134
+ },
14135
+ onError: (err) => notify17(err instanceof Error ? err.message : "Could not save these settings", "error")
14136
+ }
14137
+ );
14138
+ return;
14139
+ }
14095
14140
  enableSync.mutate(
14096
14141
  {
14097
- vendorKey: catalog.vendor_key,
14142
+ vendorKey,
14098
14143
  workspaceExtId,
14099
14144
  // A fixed date overrides the rolling window server-side; keep a sane
14100
14145
  // window value for backward compatibility.
@@ -14156,7 +14201,7 @@ function ConnectedMailboxSyncDialog({
14156
14201
  id: "sync-backfill",
14157
14202
  value: backfill,
14158
14203
  onValueChange: setBackfill,
14159
- options: [...BACKFILL_OPTIONS, { value: "custom", label: "Custom date\u2026" }]
14204
+ options: isNative ? [...BACKFILL_OPTIONS] : [...BACKFILL_OPTIONS, { value: "custom", label: "Custom date\u2026" }]
14160
14205
  }
14161
14206
  ),
14162
14207
  isCustomBackfill && /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
@@ -14222,7 +14267,7 @@ function ConnectedMailboxSyncDialog({
14222
14267
  ) })
14223
14268
  }
14224
14269
  ),
14225
- /* @__PURE__ */ jsxs(SyncOptions, { children: [
14270
+ isNative ? /* @__PURE__ */ jsx(SyncNote, { children: turningOff ? "Saving with no folders stops adding new mail from them. What was added stays." : "Only you can see mail added from your mailbox. New mail is added when you open this workspace." }) : /* @__PURE__ */ jsxs(SyncOptions, { children: [
14226
14271
  /* @__PURE__ */ jsx(
14227
14272
  SyncOptionToggle,
14228
14273
  {
@@ -14270,8 +14315,8 @@ function ConnectedMailboxSyncDialog({
14270
14315
  {
14271
14316
  onCancel: () => onOpenChange(false),
14272
14317
  onSave: handleEnableSubmit,
14273
- saveDisabled: !workspaceExtId || selectedFolders.length === 0 || customDateMissing,
14274
- isSaving: enableSync.isPending
14318
+ saveDisabled,
14319
+ isSaving: enableSync.isPending || setNativeFiling.isPending
14275
14320
  }
14276
14321
  )
14277
14322
  ]
@@ -17322,7 +17367,7 @@ function useConnectedWorkspaceList({
17322
17367
  };
17323
17368
  }
17324
17369
  var WorkspaceTableView = lazy(
17325
- () => import('../WorkspaceTableView-WD754UBK.js').then((m) => ({ default: m.WorkspaceTableView }))
17370
+ () => import('../WorkspaceTableView-SX5FIC4C.js').then((m) => ({ default: m.WorkspaceTableView }))
17326
17371
  );
17327
17372
  var WORKSPACES_TAB_ID = "workspaces";
17328
17373
  var renderMember = (user, size) => /* @__PURE__ */ jsx(ConnectedUserEntity, { user, size, variant: "icon" });
@@ -20832,9 +20877,9 @@ function formatAccessExpiry(value) {
20832
20877
  return `${formatFriendlyDate(iso)}${zone ? ` ${zone}` : ""}`;
20833
20878
  }
20834
20879
  var ROLES = [
20835
- { value: "collaborator", label: "Collaborator", hint: "Read and contribute" },
20836
- { value: "guest", label: "Guest", hint: "Read only" },
20837
- { value: "owner", label: "Owner", hint: "Full control, including sharing" }
20880
+ { value: "collaborator", label: formatRole("collaborator"), hint: "Read and contribute" },
20881
+ { value: "guest", label: formatRole("guest"), hint: "View shared content" },
20882
+ { value: "owner", label: formatRole("owner"), hint: "Full control, including sharing" }
20838
20883
  ];
20839
20884
  function ConnectedDmGrantAccessDialog({
20840
20885
  peer,
@@ -22232,7 +22277,7 @@ function DocumentsUploadButton({
22232
22277
  items,
22233
22278
  isCompact,
22234
22279
  canAdd: canUpload,
22235
- disabledReason: isGuest ? "Guests cannot upload documents in this workspace" : "You cannot upload to this workspace",
22280
+ disabledReason: isGuest ? "Read-only members cannot upload documents in this workspace" : "You cannot upload to this workspace",
22236
22281
  size,
22237
22282
  className
22238
22283
  }
@@ -24340,6 +24385,145 @@ function ConnectedSearchPage({ embedded = false, labels }) {
24340
24385
  ] })
24341
24386
  ] });
24342
24387
  }
24388
+ function MailAddToWorkspaceDialog({
24389
+ open,
24390
+ onOpenChange,
24391
+ workspaces,
24392
+ defaultWorkspaceId,
24393
+ pending,
24394
+ error,
24395
+ onAdd
24396
+ }) {
24397
+ const [workspaceId, setWorkspaceId] = useState("");
24398
+ const [scope, setScope] = useState("message");
24399
+ const ids = useId();
24400
+ useEffect(() => {
24401
+ if (!open) return;
24402
+ setWorkspaceId(defaultWorkspaceId ?? workspaces[0]?.id ?? "");
24403
+ setScope("message");
24404
+ }, [open]);
24405
+ return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogContent, { "data-testid": "mail-add-to-workspace-dialog", children: [
24406
+ /* @__PURE__ */ jsx(DialogTitle, { children: "Add to workspace" }),
24407
+ /* @__PURE__ */ jsx(DialogDescription, { children: "Only you can see mail you add to a workspace." }),
24408
+ /* @__PURE__ */ jsxs("section", { className: "modal-section grid gap-4", children: [
24409
+ /* @__PURE__ */ jsxs("label", { className: "grid gap-1 text-sm", children: [
24410
+ "Workspace",
24411
+ /* @__PURE__ */ jsxs(
24412
+ "select",
24413
+ {
24414
+ "aria-label": "Workspace",
24415
+ value: workspaceId,
24416
+ onChange: (e) => setWorkspaceId(e.target.value),
24417
+ className: "rounded border bg-background p-2",
24418
+ children: [
24419
+ /* @__PURE__ */ jsx("option", { value: "", disabled: true, children: "Choose a workspace" }),
24420
+ workspaces.map((w) => /* @__PURE__ */ jsx("option", { value: w.id, children: w.name }, w.id))
24421
+ ]
24422
+ }
24423
+ )
24424
+ ] }),
24425
+ /* @__PURE__ */ jsxs(
24426
+ RadioGroup,
24427
+ {
24428
+ "aria-label": "What to add",
24429
+ value: scope,
24430
+ onValueChange: (value) => setScope(value),
24431
+ className: "grid gap-2",
24432
+ children: [
24433
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
24434
+ /* @__PURE__ */ jsx(RadioGroupItem, { value: "message", id: `${ids}-message` }),
24435
+ /* @__PURE__ */ jsx(Label, { htmlFor: `${ids}-message`, children: "This message" })
24436
+ ] }),
24437
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
24438
+ /* @__PURE__ */ jsx(RadioGroupItem, { value: "conversation", id: `${ids}-conversation` }),
24439
+ /* @__PURE__ */ jsx(Label, { htmlFor: `${ids}-conversation`, children: "Whole conversation (includes future replies)" })
24440
+ ] })
24441
+ ]
24442
+ }
24443
+ )
24444
+ ] }),
24445
+ error && /* @__PURE__ */ jsx("p", { role: "alert", className: "text-sm text-destructive", children: error }),
24446
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-2", children: [
24447
+ /* @__PURE__ */ jsx(Button, { variant: "ghost", onClick: () => onOpenChange(false), children: "Cancel" }),
24448
+ /* @__PURE__ */ jsx(Button, { disabled: !workspaceId || pending, onClick: () => onAdd({ workspaceId, scope }), children: pending ? "Adding\u2026" : "Add" })
24449
+ ] })
24450
+ ] }) });
24451
+ }
24452
+ function MailFiledChips({ workspaces, rule }) {
24453
+ const waiting = new Set(workspaces.filter((w) => w.pending).map((w) => w.name));
24454
+ const names = [.../* @__PURE__ */ new Set([...rule ? [rule.workspace] : [], ...workspaces.map((w) => w.name)])];
24455
+ if (!names.length) return null;
24456
+ return /* @__PURE__ */ jsxs("div", { className: "mb-3 flex flex-wrap items-center gap-2", "data-testid": "mail-filed-chips", children: [
24457
+ names.map((name) => /* @__PURE__ */ jsxs(
24458
+ "span",
24459
+ {
24460
+ className: "inline-flex items-center gap-1 rounded-full bg-muted px-2.5 py-0.5 text-xs text-foreground",
24461
+ title: "Only you can see it there",
24462
+ children: [
24463
+ /* @__PURE__ */ jsx(FolderCheck, { className: "size-3.5", "aria-hidden": "true" }),
24464
+ "In ",
24465
+ name,
24466
+ waiting.has(name) && /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "\xB7 added when you next open it" }),
24467
+ rule?.workspace === name && /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "\xB7 new replies too" })
24468
+ ]
24469
+ },
24470
+ name
24471
+ )),
24472
+ rule && /* @__PURE__ */ jsx(
24473
+ Button,
24474
+ {
24475
+ variant: "ghost",
24476
+ size: "sm",
24477
+ className: "h-6 px-2 text-xs",
24478
+ disabled: rule.stopping,
24479
+ onClick: rule.onStop,
24480
+ "data-testid": "mail-stop-filing-button",
24481
+ children: "Stop adding replies"
24482
+ }
24483
+ )
24484
+ ] });
24485
+ }
24486
+ var peopleRecipients = {
24487
+ useSuggestions: (query) => usePeopleSearch(query).people
24488
+ };
24489
+ function useMailPersonLabel() {
24490
+ const { byEmail } = usePeople();
24491
+ return useCallback(
24492
+ (person) => person.name || byEmail(person.email)?.name || person.email,
24493
+ [byEmail]
24494
+ );
24495
+ }
24496
+ function useWorkspaceMailDocuments() {
24497
+ const workspaceId = useArbiSessionState((s) => s.workspaceId);
24498
+ const { data: workspaceDocuments = [] } = useDocuments();
24499
+ const arbi = useArbi();
24500
+ return useMemo(() => {
24501
+ if (!workspaceId) return void 0;
24502
+ const files = workspaceDocuments.filter((doc) => Boolean(doc.file_name));
24503
+ return {
24504
+ documents: files.map((doc) => {
24505
+ const Icon = getFileTypeIcon(doc.file_name, { mime: doc.file_type });
24506
+ return { id: doc.external_id, title: getDocumentTitle(doc), icon: /* @__PURE__ */ jsx(Icon, { size: 14 }) };
24507
+ }),
24508
+ toAttachment: async (id, maxBytes) => {
24509
+ const doc = files.find((d) => d.external_id === id);
24510
+ if (!doc) throw new Error("Could not attach the document");
24511
+ return documentMailAttachment(arbi, doc, maxBytes);
24512
+ }
24513
+ };
24514
+ }, [workspaceId, workspaceDocuments, arbi]);
24515
+ }
24516
+ function useMailWorkspaces() {
24517
+ const workspaceId = useArbiSessionState((s) => s.workspaceId);
24518
+ const { data: workspaces = [] } = useWorkspaces();
24519
+ return useMemo(() => {
24520
+ const own = workspaces.filter((w) => !w.is_public);
24521
+ return {
24522
+ workspaces: own.map((w) => ({ id: w.external_id, name: w.name })),
24523
+ defaultWorkspaceId: own.some((w) => w.external_id === workspaceId) ? workspaceId : void 0
24524
+ };
24525
+ }, [workspaces, workspaceId]);
24526
+ }
24343
24527
  function attachmentPath(accountId, messageId, attachmentId) {
24344
24528
  return `${accountPath(accountId)}/messages/${encodeURIComponent(messageId)}/attachments/${encodeURIComponent(attachmentId)}`;
24345
24529
  }
@@ -24450,8 +24634,7 @@ function ConnectedMailConversation({
24450
24634
  onClose,
24451
24635
  onCompose,
24452
24636
  onReplyWithArbi,
24453
- onSaveToWorkspace,
24454
- savePending,
24637
+ onOpenDocument,
24455
24638
  onDeleteForever,
24456
24639
  onError,
24457
24640
  renderInvite
@@ -24471,6 +24654,19 @@ function ConnectedMailConversation({
24471
24654
  const listedComplete = rowIsWhole || !!thread.data;
24472
24655
  const newest = listed[0];
24473
24656
  const canChange = isOnline || messageChange.queuesOffline;
24657
+ const { notify: notify17 } = useBlocksEnvironment();
24658
+ const workspaces = useMailWorkspaces();
24659
+ const conversationKey = threadId ?? messages.at(-1)?.thread_id ?? void 0;
24660
+ const filing = useMailFiling(
24661
+ account,
24662
+ messages.map((m) => m.id),
24663
+ conversationKey ? [conversationKey] : []
24664
+ );
24665
+ const stopRule = useStopMailFilingRule();
24666
+ const [adding, setAdding] = useState(false);
24667
+ const [filingError, setFilingError] = useState("");
24668
+ const [filingPending, setFilingPending] = useState(false);
24669
+ const workspaceName = (id) => workspaces.workspaces.find((w) => w.id === id)?.name ?? "a workspace";
24474
24670
  const fail2 = (fallback) => (e) => onError(e instanceof Error ? e.message : fallback);
24475
24671
  const marked = useRef(false);
24476
24672
  const unread = listed.filter((m) => m.unread);
@@ -24532,6 +24728,62 @@ function ConnectedMailConversation({
24532
24728
  );
24533
24729
  others.delete(account.email.toLowerCase());
24534
24730
  const subject = conversation?.subject || messages.find((m) => m.subject)?.subject || "";
24731
+ const addToWorkspace = async (workspaceId, scope) => {
24732
+ if (!newest) return;
24733
+ setFilingPending(true);
24734
+ setFilingError("");
24735
+ try {
24736
+ const where2 = account.provider === "native" && newest.folder ? newest.folder : folderId;
24737
+ const all = thread.data?.messages ?? messages;
24738
+ const { outcome, filed } = await messageChange.file(
24739
+ newest.id,
24740
+ where2,
24741
+ scope === "message" ? { workspaceExtId: workspaceId } : {
24742
+ workspaceExtId: workspaceId,
24743
+ threadId: conversationKey ?? newest.id,
24744
+ messageIds: all.map((m) => m.id)
24745
+ }
24746
+ );
24747
+ setAdding(false);
24748
+ if (outcome === "queued")
24749
+ notify17("Kept on this device. It is added to the workspace when you reconnect.", "info");
24750
+ else
24751
+ notify17(
24752
+ `Added to ${workspaceName(workspaceId)}`,
24753
+ "success",
24754
+ filed?.doc_ext_id && onOpenDocument ? {
24755
+ action: {
24756
+ label: "Open",
24757
+ onClick: () => onOpenDocument(filed.doc_ext_id, workspaceId)
24758
+ }
24759
+ } : void 0
24760
+ );
24761
+ } catch (e) {
24762
+ setFilingError(e instanceof Error ? e.message : "Could not add it to the workspace");
24763
+ } finally {
24764
+ setFilingPending(false);
24765
+ }
24766
+ };
24767
+ const rule = filing.data?.rules[0];
24768
+ const chips = /* @__PURE__ */ jsx(
24769
+ MailFiledChips,
24770
+ {
24771
+ workspaces: (filing.data?.filed ?? []).map((f) => ({
24772
+ name: workspaceName(f.workspace_ext_id),
24773
+ pending: !!f.pending
24774
+ })),
24775
+ rule: rule && {
24776
+ workspace: workspaceName(rule.workspace_ext_id),
24777
+ stopping: stopRule.isPending,
24778
+ onStop: () => stopRule.mutate(
24779
+ { ruleId: rule.id, threadId: rule.thread_id ?? conversationKey ?? "" },
24780
+ {
24781
+ onError: (e) => onError(e instanceof Error ? e.message : "Could not stop it")
24782
+ }
24783
+ )
24784
+ }
24785
+ }
24786
+ );
24535
24787
  if (!newest)
24536
24788
  return /* @__PURE__ */ jsx("p", { role: "status", className: "p-4 text-sm text-muted-foreground", children: thread.error?.message ?? "Loading conversation\u2026" });
24537
24789
  return /* @__PURE__ */ jsx(
@@ -24540,16 +24792,31 @@ function ConnectedMailConversation({
24540
24792
  subject,
24541
24793
  messages,
24542
24794
  personLabel,
24543
- notice: more > 0 && threadId && onShowConversation ? /* @__PURE__ */ jsx(
24544
- "button",
24545
- {
24546
- type: "button",
24547
- "data-testid": "mail-show-conversation",
24548
- onClick: () => onShowConversation(threadId),
24549
- className: "mb-3 text-sm text-primary underline-offset-2 hover:underline",
24550
- children: more === 1 ? "1 more in this conversation" : `${more} more in this conversation`
24551
- }
24552
- ) : !single && thread.error instanceof MailOfflineUnavailableError ? /* @__PURE__ */ jsx("p", { role: "status", className: "mb-3 text-sm text-muted-foreground", children: thread.error.message }) : null,
24795
+ notice: /* @__PURE__ */ jsxs(Fragment, { children: [
24796
+ chips,
24797
+ more > 0 && threadId && onShowConversation ? /* @__PURE__ */ jsx(
24798
+ "button",
24799
+ {
24800
+ type: "button",
24801
+ "data-testid": "mail-show-conversation",
24802
+ onClick: () => onShowConversation(threadId),
24803
+ className: "mb-3 text-sm text-primary underline-offset-2 hover:underline",
24804
+ children: more === 1 ? "1 more in this conversation" : `${more} more in this conversation`
24805
+ }
24806
+ ) : !single && thread.error instanceof MailOfflineUnavailableError ? /* @__PURE__ */ jsx("p", { role: "status", className: "mb-3 text-sm text-muted-foreground", children: thread.error.message }) : null,
24807
+ /* @__PURE__ */ jsx(
24808
+ MailAddToWorkspaceDialog,
24809
+ {
24810
+ open: adding,
24811
+ onOpenChange: setAdding,
24812
+ workspaces: workspaces.workspaces,
24813
+ defaultWorkspaceId: workspaces.defaultWorkspaceId,
24814
+ pending: filingPending,
24815
+ error: filingError,
24816
+ onAdd: ({ workspaceId, scope }) => void addToWorkspace(workspaceId, scope)
24817
+ }
24818
+ )
24819
+ ] }),
24553
24820
  actions: /* @__PURE__ */ jsx(
24554
24821
  MailActionBar,
24555
24822
  {
@@ -24569,7 +24836,10 @@ function ConnectedMailConversation({
24569
24836
  onMarkUnread: () => void changes.apply([newest], { unread: true }).then(onClose).catch(fail2("Could not mark it unread")),
24570
24837
  moveTargets: mailMoveTargets(folders, folderRole, folderId),
24571
24838
  onMove: (id) => move({ folder_id: id }),
24572
- onSaveToWorkspace: onSaveToWorkspace ? () => onSaveToWorkspace(newest) : void 0,
24839
+ onAddToWorkspace: workspaces.workspaces.length ? () => {
24840
+ setFilingError("");
24841
+ setAdding(true);
24842
+ } : void 0,
24573
24843
  onPrint: () => void print(),
24574
24844
  onDownloadOriginal: account.provider === "native" ? () => void download(
24575
24845
  `${accountPath(account.id)}/messages/${newest.id}/original`,
@@ -24579,7 +24849,7 @@ function ConnectedMailConversation({
24579
24849
  deletesForever: nativeTrash,
24580
24850
  canChange,
24581
24851
  isOnline,
24582
- busy: savePending || !listedComplete
24852
+ busy: filingPending || !listedComplete
24583
24853
  }
24584
24854
  ),
24585
24855
  renderMessage: (message, collapse) => /* @__PURE__ */ jsx(
@@ -25419,57 +25689,6 @@ function resolveMailbox(accounts, mailbox) {
25419
25689
  if (mailbox === "native") return accounts.find((a) => a.provider === "native");
25420
25690
  return mailbox ? accounts.find((a) => a.id === mailbox) : void 0;
25421
25691
  }
25422
- var peopleRecipients = {
25423
- useSuggestions: (query) => usePeopleSearch(query).people
25424
- };
25425
- function useMailPersonLabel() {
25426
- const { byEmail } = usePeople();
25427
- return useCallback(
25428
- (person) => person.name || byEmail(person.email)?.name || person.email,
25429
- [byEmail]
25430
- );
25431
- }
25432
- function useWorkspaceMailDocuments() {
25433
- const workspaceId = useArbiSessionState((s) => s.workspaceId);
25434
- const { data: workspaceDocuments = [] } = useDocuments();
25435
- const arbi = useArbi();
25436
- return useMemo(() => {
25437
- if (!workspaceId) return void 0;
25438
- const files = workspaceDocuments.filter((doc) => Boolean(doc.file_name));
25439
- return {
25440
- documents: files.map((doc) => {
25441
- const Icon = getFileTypeIcon(doc.file_name, { mime: doc.file_type });
25442
- return { id: doc.external_id, title: getDocumentTitle(doc), icon: /* @__PURE__ */ jsx(Icon, { size: 14 }) };
25443
- }),
25444
- toAttachment: async (id, maxBytes) => {
25445
- const doc = files.find((d) => d.external_id === id);
25446
- if (!doc) throw new Error("Could not attach the document");
25447
- return documentMailAttachment(arbi, doc, maxBytes);
25448
- }
25449
- };
25450
- }, [workspaceId, workspaceDocuments, arbi]);
25451
- }
25452
- function useMailSaveToWorkspace() {
25453
- const workspaceId = useArbiSessionState((s) => s.workspaceId);
25454
- const { data: workspaces = [] } = useWorkspaces();
25455
- const upload = useUploadDocuments();
25456
- const arbi = useArbi();
25457
- return useMemo(
25458
- () => ({
25459
- workspaces: workspaces.map((w) => ({ id: w.external_id, name: w.name })),
25460
- defaultWorkspaceId: workspaceId,
25461
- save: async (saveWorkspaceId, file) => {
25462
- const target = workspaces.find((w) => w.external_id === saveWorkspaceId);
25463
- if (target?.wrapped_key)
25464
- await arbi.workspaces.open(saveWorkspaceId).catch(() => {
25465
- throw new Error("Could not unlock the chosen workspace");
25466
- });
25467
- await upload.mutateAsync({ files: [file], options: { workspaceExtId: saveWorkspaceId } });
25468
- }
25469
- }),
25470
- [workspaces, workspaceId, arbi, upload]
25471
- );
25472
- }
25473
25692
  function lastSynced(at) {
25474
25693
  return at ? `last synced ${formatRelativeTime(new Date(at).toISOString(), { style: "short" })}` : "not synced yet";
25475
25694
  }
@@ -25838,6 +26057,7 @@ function useMailMessageChange(account, offline) {
25838
26057
  const change = useCallback(
25839
26058
  async (messageId, folderId, change2) => {
25840
26059
  if (!account) throw new Error("Choose a mailbox first");
26060
+ if (change2.kind === "file") throw new Error("Add mail to a workspace with file()");
25841
26061
  const queue = async () => {
25842
26062
  await queueChange({ account, messageId, folderId, change: change2 });
25843
26063
  await cache.refreshAll();
@@ -25860,8 +26080,29 @@ function useMailMessageChange(account, offline) {
25860
26080
  },
25861
26081
  [account, client, cache, queueChange, isNetworkFailure2, isChangePending, isOnline]
25862
26082
  );
25863
- return { change, queuesOffline: !!queueChange };
26083
+ const prime = useMailWorkspacePrimer();
26084
+ const file = useCallback(
26085
+ async (messageId, folderId, request) => {
26086
+ if (!account) throw new Error("Choose a mailbox first");
26087
+ const queue = async () => {
26088
+ await queueChange({ account, messageId, folderId, change: { kind: "file", ...request } });
26089
+ return { outcome: "queued" };
26090
+ };
26091
+ if (queueChange && !isOnline) return queue();
26092
+ try {
26093
+ const filed = await sendMailFile(client.fetch, prime, account, messageId, request);
26094
+ await cache.refreshAll();
26095
+ return { outcome: "sent", filed };
26096
+ } catch (error) {
26097
+ if (queueChange && isNetworkFailure2?.(error)) return queue();
26098
+ throw error;
26099
+ }
26100
+ },
26101
+ [account, client, cache, prime, queueChange, isNetworkFailure2, isOnline]
26102
+ );
26103
+ return { change, file, queuesOffline: !!queueChange };
25864
26104
  }
26105
+ var UNFILED_FOLDER_ROLES = ["trash", "drafts", "junk"];
25865
26106
  var MailInviteCard = lazy(
25866
26107
  () => import('../ConnectedMailInviteCard-5LPYQLJT.js').then((m) => ({
25867
26108
  default: m.ConnectedMailInviteCard
@@ -25958,7 +26199,6 @@ function ConnectedMailbox({
25958
26199
  const user = userProp === void 0 ? signedInUser : userProp;
25959
26200
  const personLabel = useMailPersonLabel();
25960
26201
  const documents = useWorkspaceMailDocuments();
25961
- const saveToWorkspace = useMailSaveToWorkspace();
25962
26202
  const session = useArbiSessionStore();
25963
26203
  const [gridState] = useState(
25964
26204
  () => session.getState().grid.states[MAIL_GRID_ID]
@@ -25970,9 +26210,6 @@ function ConnectedMailbox({
25970
26210
  const [, setViewerOpen] = useTransientView(MAIL_VIEWER_OPEN_VIEW, false);
25971
26211
  const cache = useMailCache();
25972
26212
  const { client } = useMailClient();
25973
- const [savingToWorkspace, setSavingToWorkspace] = useState(false);
25974
- const [savePending, setSavePending] = useState(false);
25975
- const [saveWorkspaceId, setSaveWorkspaceId] = useState("");
25976
26213
  const { data: policy, error: policyError } = useMailPolicy();
25977
26214
  const isOnline = useMailOnline();
25978
26215
  const accounts = useMailAccounts({ enabled: !!policy?.enabled });
@@ -26072,6 +26309,10 @@ function ConnectedMailbox({
26072
26309
  const hasActiveFilters = !!query || [...mailFilters.values()].some(Boolean);
26073
26310
  const listedMessages = useMemo(() => rows?.flatMap((c) => c.messages), [rows]);
26074
26311
  useNativeThreadKeys(account, listedMessages);
26312
+ useConnectedMailFiling(
26313
+ account,
26314
+ UNFILED_FOLDER_ROLES.includes(folderRole) ? void 0 : listedMessages
26315
+ );
26075
26316
  const opening = useMailMessage(account, openingMessage, { enabled: ready && !compose });
26076
26317
  const [openedAlone, setOpenedAlone] = useState();
26077
26318
  useEffect(() => {
@@ -26163,32 +26404,6 @@ function ConnectedMailbox({
26163
26404
  setConfirmDelete(null);
26164
26405
  }
26165
26406
  };
26166
- const [saveTarget, setSaveTarget] = useState(null);
26167
- const saveEmail = async () => {
26168
- if (!saveTarget || !account || !saveWorkspaceId) return;
26169
- setSavePending(true);
26170
- try {
26171
- const response = await client.fetch(
26172
- `${accountPath(account.id)}/messages/${saveTarget.id}/original`
26173
- );
26174
- const fileName = `${saveTarget.subject.replace(/[^a-zA-Z0-9 ._-]/g, "").slice(0, 80) || "email"}.eml`;
26175
- const workspaceId = saveWorkspaceId;
26176
- const documentId = await saveToWorkspace.save(
26177
- workspaceId,
26178
- new File([await response.blob()], fileName, { type: "message/rfc822" })
26179
- );
26180
- setSavingToWorkspace(false);
26181
- notify17(
26182
- "Email saved to workspace",
26183
- "success",
26184
- documentId && onOpenDocument ? { action: { label: "Open", onClick: () => onOpenDocument(documentId, workspaceId) } } : void 0
26185
- );
26186
- } catch (e) {
26187
- setActionError(e instanceof Error ? e.message : "Could not save email to workspace");
26188
- } finally {
26189
- setSavePending(false);
26190
- }
26191
- };
26192
26407
  const toggleRowFlag = async (row2) => {
26193
26408
  try {
26194
26409
  const whole = row2.flagged && account && folderId && row2.message_count > row2.messages.length ? [...(await client.getThread(account, row2.thread_id, folderId)).messages].reverse() : row2.messages;
@@ -26472,7 +26687,7 @@ function ConnectedMailbox({
26472
26687
  offline,
26473
26688
  messageChange,
26474
26689
  personLabel,
26475
- savePending,
26690
+ onOpenDocument,
26476
26691
  onClose: () => setSelected(null),
26477
26692
  onCompose: (value) => openCompose(value),
26478
26693
  onError: setActionError,
@@ -26481,13 +26696,6 @@ function ConnectedMailbox({
26481
26696
  setDeleteTargets(targets);
26482
26697
  setConfirmDelete("message");
26483
26698
  },
26484
- onSaveToWorkspace: account.provider === "native" ? (target) => {
26485
- setSaveTarget(target);
26486
- setSaveWorkspaceId(
26487
- saveToWorkspace.defaultWorkspaceId ?? saveToWorkspace.workspaces[0]?.id ?? ""
26488
- );
26489
- setSavingToWorkspace(true);
26490
- } : void 0,
26491
26699
  renderInvite: (message) => /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
26492
26700
  MailInviteCard,
26493
26701
  {
@@ -26518,25 +26726,6 @@ function ConnectedMailbox({
26518
26726
  ] }) })
26519
26727
  })
26520
26728
  ] }),
26521
- /* @__PURE__ */ jsx(Dialog, { open: savingToWorkspace, onOpenChange: setSavingToWorkspace, children: /* @__PURE__ */ jsxs(DialogContent, { children: [
26522
- /* @__PURE__ */ jsx(DialogTitle, { children: "Save email to workspace" }),
26523
- /* @__PURE__ */ jsx(DialogDescription, { children: "Save a copy as an .eml file. Members with access to the file can read it." }),
26524
- /* @__PURE__ */ jsxs(
26525
- "select",
26526
- {
26527
- "aria-label": "Destination workspace",
26528
- value: saveWorkspaceId,
26529
- onChange: (e) => setSaveWorkspaceId(e.target.value),
26530
- className: "rounded border bg-background p-2",
26531
- children: [
26532
- /* @__PURE__ */ jsx("option", { value: "", disabled: true, children: "Choose a workspace" }),
26533
- saveToWorkspace.workspaces.map((w) => /* @__PURE__ */ jsx("option", { value: w.id, children: w.name }, w.id))
26534
- ]
26535
- }
26536
- ),
26537
- /* @__PURE__ */ jsx(Button, { disabled: !saveWorkspaceId || savePending, onClick: () => void saveEmail(), children: savePending ? "Saving\u2026" : "Save email" }),
26538
- actionError && /* @__PURE__ */ jsx("p", { role: "alert", children: actionError })
26539
- ] }) }),
26540
26729
  settings && policy && /* @__PURE__ */ jsx(
26541
26730
  ConnectedMailAccounts,
26542
26731
  {
@@ -30341,6 +30530,94 @@ function ImportHandoff({
30341
30530
  ] })
30342
30531
  ] });
30343
30532
  }
30533
+ function useOwnMailboxForImport(workspaceExtId) {
30534
+ const hasMail = useIsEntitled("mail");
30535
+ const { data: policy } = useMailPolicy({ enabled: hasMail });
30536
+ const accounts = useMailAccounts({ enabled: hasMail && !!policy?.native_enabled });
30537
+ const { data: workspaces } = useWorkspaces();
30538
+ const workspace = workspaces?.find((w) => w.external_id === workspaceExtId);
30539
+ if (!workspace || workspace.is_public) return void 0;
30540
+ return accounts.data?.find((a) => a.provider === "native");
30541
+ }
30542
+ function NativeMailImportSection({
30543
+ workspaceExtId,
30544
+ native
30545
+ }) {
30546
+ const { notify: notify17 } = useBlocksEnvironment();
30547
+ const filing = useNativeMailFiling();
30548
+ const fileNow = useFileWaitingNativeMail();
30549
+ const [settingsOpen, setSettingsOpen] = useState(false);
30550
+ const here = filing.data?.find((f) => f.workspace_ext_id === workspaceExtId);
30551
+ const configured = !!here && here.folders.length > 0;
30552
+ const noun = (n) => n === 1 ? "email" : "emails";
30553
+ const importNow = () => fileNow.mutate(workspaceExtId, {
30554
+ onSuccess: ({ filed, waiting, failed }) => notify17(
30555
+ filed ? `Added ${filed} ${noun(filed)} to this workspace` : waiting ? "Nothing could be added yet: open Mail once, then try again" : failed ? `${failed} ${noun(failed)} could not be added` : "Nothing new to add",
30556
+ filed ? "success" : failed ? "error" : "info"
30557
+ ),
30558
+ onError: (e) => notify17(e instanceof Error ? e.message : "Could not add mail", "error")
30559
+ });
30560
+ return /* @__PURE__ */ jsx(ImportFamilySection, { label: "Mail", identity: native.email, testId: "import-family-native", children: /* @__PURE__ */ jsx(ImportList, { children: /* @__PURE__ */ jsxs(
30561
+ ImportRow,
30562
+ {
30563
+ testId: "email-provider-row-native",
30564
+ logo: /* @__PURE__ */ jsx(Mail, { className: "h-7 w-7 text-primary", "aria-hidden": "true" }),
30565
+ name: NATIVE_MAILBOX_SOURCE.display_name,
30566
+ actions: /* @__PURE__ */ jsx(
30567
+ ImportRunActions,
30568
+ {
30569
+ isRunning: false,
30570
+ isBusy: fileNow.isPending,
30571
+ onImport: configured ? importNow : () => setSettingsOpen(true),
30572
+ onStop: () => {
30573
+ },
30574
+ onSettings: () => setSettingsOpen(true),
30575
+ settingsLabel: "Your mailbox import settings",
30576
+ importButton: { testId: "email-import-native" }
30577
+ }
30578
+ ),
30579
+ children: [
30580
+ here && /* @__PURE__ */ jsxs(
30581
+ ImportSummary,
30582
+ {
30583
+ aside: /* @__PURE__ */ jsx(ImportAside, { children: here.folders.length > 0 && /* @__PURE__ */ jsx(
30584
+ FolderSummary,
30585
+ {
30586
+ names: here.folders.map(
30587
+ (id) => NATIVE_MAILBOX_FOLDERS.find((f) => f.id === id)?.name
30588
+ ),
30589
+ testId: "email-folders-native"
30590
+ }
30591
+ ) }),
30592
+ children: [
30593
+ /* @__PURE__ */ jsxs("div", { children: [
30594
+ /* @__PURE__ */ jsx("span", { className: "font-medium text-foreground", children: here.filed.toLocaleString() }),
30595
+ " ",
30596
+ noun(here.filed),
30597
+ " in this workspace \xB7 only you can see them",
30598
+ here.threads > 0 && ` \xB7 ${here.threads} conversation${here.threads === 1 ? "" : "s"} followed`
30599
+ ] }),
30600
+ /* @__PURE__ */ jsxs("div", { "data-testid": "email-last-sync-native", children: [
30601
+ here.waiting > 0 ? `${here.waiting} waiting: added when you open this workspace` : here.failed > 0 ? `${here.failed} could not be added` : here.last_sync_at ? `Last added ${formatRelativeTime(here.last_sync_at, { style: "compact" })}` : "Not added yet",
30602
+ here.folders.length > 0 && ` \xB7 Backfill: ${windowLabel(here.backfill_window)}`
30603
+ ] })
30604
+ ]
30605
+ }
30606
+ ),
30607
+ /* @__PURE__ */ jsx(
30608
+ ConnectedMailboxSyncDialog,
30609
+ {
30610
+ catalog: NATIVE_MAILBOX_SOURCE,
30611
+ userConnector: void 0,
30612
+ open: settingsOpen,
30613
+ onOpenChange: setSettingsOpen,
30614
+ lockedWorkspaceExtId: workspaceExtId
30615
+ }
30616
+ )
30617
+ ]
30618
+ }
30619
+ ) }) });
30620
+ }
30344
30621
  var PROVIDER_FAMILIES = [
30345
30622
  { key: "microsoft", label: "Microsoft", vendors: ["microsoft"] },
30346
30623
  { key: "google", label: "Google", vendors: ["gmail"] }
@@ -30367,7 +30644,8 @@ function EmailProviderRow({
30367
30644
  const arbi = useArbi();
30368
30645
  const isConnected = !!userConnector?.is_connected;
30369
30646
  const thisSync = userConnector?.syncs?.find((s) => s.workspace_ext_id === workspaceExtId);
30370
- const syncingHere = isConnected && !!thisSync && thisSync.enabled;
30647
+ const filedOnly = !!thisSync && thisSync.folders.length === 0;
30648
+ const syncingHere = isConnected && !!thisSync && thisSync.enabled && !filedOnly;
30371
30649
  const [tokensBridged, setTokensBridged] = useState(false);
30372
30650
  useEffect(() => {
30373
30651
  if (!isConnected) {
@@ -30428,6 +30706,7 @@ function EmailProviderRow({
30428
30706
  isStopping: cancelSync.isPending,
30429
30707
  isBusy: busy,
30430
30708
  onImport: syncingHere ? syncNow : () => setSettingsOpen(true),
30709
+ importTitle: filedOnly ? "Choose folders to sync" : void 0,
30431
30710
  onStop: stopSync,
30432
30711
  onSettings: () => setSettingsOpen(true),
30433
30712
  settingsLabel: `${mailboxProductName(catalog)} sync settings`,
@@ -30453,11 +30732,12 @@ function EmailProviderRow({
30453
30732
  /* @__PURE__ */ jsx("span", { className: "font-medium text-foreground", children: syncedCount.toLocaleString() }),
30454
30733
  " ",
30455
30734
  emailNoun(syncedCount),
30456
- " in this workspace"
30735
+ " in this workspace",
30736
+ filedOnly && thisSync.threads > 0 && ` \xB7 ${thisSync.threads} conversation${thisSync.threads === 1 ? "" : "s"} followed`
30457
30737
  ] }),
30458
30738
  /* @__PURE__ */ jsxs("div", { "data-testid": `email-last-sync-${catalog.vendor_key}`, children: [
30459
- thisSync?.last_sync_at ? `Last synced ${formatRelativeTime(thisSync.last_sync_at, { style: "compact" })}` : "Not synced yet",
30460
- thisSync?.backfill_since ? ` \xB7 Backfill: since ${new Date(thisSync.backfill_since).toLocaleDateString()}` : thisSync?.backfill_window != null && ` \xB7 Backfill: ${windowLabel(thisSync.backfill_window)}`
30739
+ filedOnly ? "Filed messages \xB7 choose folders to sync more" : thisSync?.last_sync_at ? `Last synced ${formatRelativeTime(thisSync.last_sync_at, { style: "compact" })}` : "Not synced yet",
30740
+ !filedOnly && (thisSync?.backfill_since ? ` \xB7 Backfill: since ${new Date(thisSync.backfill_since).toLocaleDateString()}` : thisSync?.backfill_window != null && ` \xB7 Backfill: ${windowLabel(thisSync.backfill_window)}`)
30461
30741
  ] })
30462
30742
  ]
30463
30743
  }
@@ -30508,6 +30788,7 @@ function EmailImportPanel({
30508
30788
  const { data: myConnectors = [] } = useMyConnectors();
30509
30789
  const disconnect = useDisconnectConnector();
30510
30790
  const isVendorVisible = useConnectorVendorVisibility();
30791
+ const ownMailbox = useOwnMailboxForImport(workspaceExtId);
30511
30792
  const [reconnectByVendor, setReconnectByVendor] = useState({});
30512
30793
  const handleNeedsReconnectChange = useCallback((vendorKey, needs) => {
30513
30794
  setReconnectByVendor(
@@ -30579,37 +30860,40 @@ function EmailImportPanel({
30579
30860
  const needsReconnect = connected && (isDriveSyncVendor(connectVendor) && !!connectUc?.drive_needs_reconsent || mailboxNeedsReconnect);
30580
30861
  return { family, entries, extra, identity, connectVendor, connected, needsReconnect };
30581
30862
  }).filter((g) => g.entries.length > 0 || g.extra);
30582
- if (groups.length === 0) return null;
30583
- return /* @__PURE__ */ jsx(ImportPanel, { "data-testid": "email-import-panel", children: groups.map(
30584
- ({ family, entries, extra, identity, connectVendor, connected, needsReconnect }) => /* @__PURE__ */ jsx(
30585
- ImportFamilySection,
30586
- {
30587
- label: family.label,
30588
- identity,
30589
- action: !connected ? "connect" : needsReconnect ? "reconnect" : "disconnect",
30590
- isActionPending: disconnect.isPending,
30591
- onAction: () => void (!connected ? connectFamily(connectVendor) : needsReconnect ? reconnectFamily(connectVendor) : disconnectFamily(family, connectVendor, identity)),
30592
- testId: `import-family-${family.key}`,
30593
- actionButton: !connected ? { testId: `import-family-connect-${family.key}` } : needsReconnect ? { testId: `import-family-reconnect-${family.key}` } : { testId: `import-family-disconnect-${family.key}` },
30594
- children: /* @__PURE__ */ jsxs(ImportList, { children: [
30595
- entries.map((entry) => /* @__PURE__ */ jsx(
30596
- EmailProviderRow,
30597
- {
30598
- catalog: entry,
30599
- userConnector: connectedByVendor[entry.vendor_key],
30600
- workspaceExtId,
30601
- workspaceName,
30602
- onViewProgress,
30603
- onNeedsReconnectChange: handleNeedsReconnectChange
30604
- },
30605
- entry.vendor_key
30606
- )),
30607
- extra
30608
- ] })
30609
- },
30610
- family.key
30863
+ if (!ownMailbox && groups.length === 0) return null;
30864
+ return /* @__PURE__ */ jsxs(ImportPanel, { "data-testid": "email-import-panel", children: [
30865
+ ownMailbox && /* @__PURE__ */ jsx(NativeMailImportSection, { workspaceExtId, native: ownMailbox }),
30866
+ groups.map(
30867
+ ({ family, entries, extra, identity, connectVendor, connected, needsReconnect }) => /* @__PURE__ */ jsx(
30868
+ ImportFamilySection,
30869
+ {
30870
+ label: family.label,
30871
+ identity,
30872
+ action: !connected ? "connect" : needsReconnect ? "reconnect" : "disconnect",
30873
+ isActionPending: disconnect.isPending,
30874
+ onAction: () => void (!connected ? connectFamily(connectVendor) : needsReconnect ? reconnectFamily(connectVendor) : disconnectFamily(family, connectVendor, identity)),
30875
+ testId: `import-family-${family.key}`,
30876
+ actionButton: !connected ? { testId: `import-family-connect-${family.key}` } : needsReconnect ? { testId: `import-family-reconnect-${family.key}` } : { testId: `import-family-disconnect-${family.key}` },
30877
+ children: /* @__PURE__ */ jsxs(ImportList, { children: [
30878
+ entries.map((entry) => /* @__PURE__ */ jsx(
30879
+ EmailProviderRow,
30880
+ {
30881
+ catalog: entry,
30882
+ userConnector: connectedByVendor[entry.vendor_key],
30883
+ workspaceExtId,
30884
+ workspaceName,
30885
+ onViewProgress,
30886
+ onNeedsReconnectChange: handleNeedsReconnectChange
30887
+ },
30888
+ entry.vendor_key
30889
+ )),
30890
+ extra
30891
+ ] })
30892
+ },
30893
+ family.key
30894
+ )
30611
30895
  )
30612
- ) });
30896
+ ] });
30613
30897
  }
30614
30898
  function useDriveSyncTrigger() {
30615
30899
  const arbi = useArbi();
@@ -33688,10 +33972,10 @@ var TABLET_TABLE_BELOW = 860;
33688
33972
  var TABLET_VIEWPORT_BELOW = 1100;
33689
33973
  var NO_CONVERSATION_DOCUMENTS2 = [];
33690
33974
  var DocumentReviewCard = lazy(
33691
- () => import('../DocumentReviewCard-UEFTDEOL.js').then((module) => ({ default: module.DocumentReviewCard }))
33975
+ () => import('../DocumentReviewCard-XB7BE7MZ.js').then((module) => ({ default: module.DocumentReviewCard }))
33692
33976
  );
33693
33977
  var FilesViewerDialog = lazy(
33694
- () => import('../FilesViewerDialog-R5VNYH72.js').then((module) => ({ default: module.FilesViewerDialog }))
33978
+ () => import('../FilesViewerDialog-5PL3HGYO.js').then((module) => ({ default: module.FilesViewerDialog }))
33695
33979
  );
33696
33980
  function defaultReviewCard(props) {
33697
33981
  return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(LoadingIndicator, { message: "Loading document viewer..." }), children: /* @__PURE__ */ jsx(DocumentReviewCard, { ...props }, `navigator-${props.currentDocument.external_id}`) });
@@ -35765,11 +36049,7 @@ function ConnectedDeveloperConfig({ modeSwitcher } = {}) {
35765
36049
  )
35766
36050
  ] });
35767
36051
  }
35768
- var GRANTABLE_ROLES = [
35769
- { value: "owner", label: "Owner" },
35770
- { value: "collaborator", label: "Collaborator" },
35771
- { value: "guest", label: "Guest" }
35772
- ];
36052
+ var GRANTABLE_ROLES = ["owner", "collaborator", "guest"].map((value) => ({ value, label: formatRole(value) }));
35773
36053
  function ConnectedGrantWorkspaceAccessDialog({
35774
36054
  notification: controlled,
35775
36055
  onClose
@@ -35966,10 +36246,7 @@ function ConnectedGrantWorkspaceAccessDialog({
35966
36246
  children: [
35967
36247
  /* @__PURE__ */ jsx(SelectTrigger, { "data-testid": "grant-role-select", children: /* @__PURE__ */ jsx(SelectValue, { children: /* @__PURE__ */ jsx(Badge, { variant: "default", className: getRoleBadgeClass(selectedRole), children: formatRole(selectedRole) }) }) }),
35968
36248
  /* @__PURE__ */ jsx(SelectContent, { children: GRANTABLE_ROLES.filter((role) => !isExternal2 || role.value !== "owner").map(
35969
- (role) => /* @__PURE__ */ jsx(SelectItem, { value: role.value, children: /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-2", children: [
35970
- /* @__PURE__ */ jsx(Badge, { variant: "default", className: getRoleBadgeClass(role.value), children: role.label }),
35971
- role.value === "guest" && /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: "Read-only" })
35972
- ] }) }, role.value)
36249
+ (role) => /* @__PURE__ */ jsx(SelectItem, { value: role.value, children: /* @__PURE__ */ jsx(Badge, { variant: "default", className: getRoleBadgeClass(role.value), children: role.label }) }, role.value)
35973
36250
  ) })
35974
36251
  ]
35975
36252
  }
@@ -37882,11 +38159,7 @@ function useShareResource({
37882
38159
  };
37883
38160
  return { shareResource, isSharing };
37884
38161
  }
37885
- var ALL_ROLES3 = [
37886
- { value: "owner", label: "Owner" },
37887
- { value: "collaborator", label: "Collaborator" },
37888
- { value: "guest", label: "Guest" }
37889
- ];
38162
+ var ALL_ROLES3 = ["owner", "collaborator", "guest"].map((value) => ({ value, label: formatRole(value) }));
37890
38163
  function ResourceShareForm({
37891
38164
  resourceType,
37892
38165
  resourceExtId,
@@ -41092,7 +41365,7 @@ function ConnectedConversationPage({
41092
41365
  const uploadUrls = useAddFromUrls({
41093
41366
  onZipFiles: (files) => openDialog("upload", { tab: "upload", files, source: "computer" })
41094
41367
  });
41095
- const uploadDisabledReason = isGuest ? "Guests cannot upload documents in this workspace" : "You cannot upload to this workspace";
41368
+ const uploadDisabledReason = isGuest ? "Read-only members cannot upload documents in this workspace" : "You cannot upload to this workspace";
41096
41369
  const { data: allWorkspaceDocuments = [] } = useDocuments();
41097
41370
  const { data: conversationDocuments } = useConversationDocuments();
41098
41371
  const pinnedDocumentId = useArbiSessionState((state) => state.pinnedDocumentId);