@arbidocs/blocks 0.5.66 → 0.5.67

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 (119) hide show
  1. package/README.md +5 -0
  2. package/dist/{ConnectedDocumentViewer-S6YKCCRN.cjs → ConnectedDocumentViewer-IQHDCAZ5.cjs} +11 -11
  3. package/dist/{ConnectedDocumentViewer-S6YKCCRN.cjs.map → ConnectedDocumentViewer-IQHDCAZ5.cjs.map} +1 -1
  4. package/dist/{ConnectedDocumentViewer-XFQDHVWM.js → ConnectedDocumentViewer-NIZBKBJN.js} +10 -10
  5. package/dist/{ConnectedDocumentViewer-XFQDHVWM.js.map → ConnectedDocumentViewer-NIZBKBJN.js.map} +1 -1
  6. package/dist/{ConnectedNativeDocxComparison-PSAP3Q7D.js → ConnectedNativeDocxComparison-FPW3BNBN.js} +6 -6
  7. package/dist/{ConnectedNativeDocxComparison-PSAP3Q7D.js.map → ConnectedNativeDocxComparison-FPW3BNBN.js.map} +1 -1
  8. package/dist/{ConnectedNativeDocxComparison-L3R3ROPZ.cjs → ConnectedNativeDocxComparison-HJ4FTVH6.cjs} +7 -7
  9. package/dist/{ConnectedNativeDocxComparison-L3R3ROPZ.cjs.map → ConnectedNativeDocxComparison-HJ4FTVH6.cjs.map} +1 -1
  10. package/dist/{ConnectedNativeDocxEditor-VDBC4XRT.cjs → ConnectedNativeDocxEditor-PF46MU5H.cjs} +7 -7
  11. package/dist/{ConnectedNativeDocxEditor-VDBC4XRT.cjs.map → ConnectedNativeDocxEditor-PF46MU5H.cjs.map} +1 -1
  12. package/dist/{ConnectedNativeDocxEditor-PI6QTPXZ.js → ConnectedNativeDocxEditor-S7NJMDSU.js} +5 -5
  13. package/dist/{ConnectedNativeDocxEditor-PI6QTPXZ.js.map → ConnectedNativeDocxEditor-S7NJMDSU.js.map} +1 -1
  14. package/dist/{ConnectedStreamedWordArtifact-V4MTKVNE.js → ConnectedStreamedWordArtifact-5MHLV24V.js} +6 -6
  15. package/dist/ConnectedStreamedWordArtifact-5MHLV24V.js.map +1 -0
  16. package/dist/{ConnectedStreamedWordArtifact-YSW6D7AG.cjs → ConnectedStreamedWordArtifact-LNGW7YGV.cjs} +7 -7
  17. package/dist/ConnectedStreamedWordArtifact-LNGW7YGV.cjs.map +1 -0
  18. package/dist/{DocumentReviewCard-TQQADJ36.js → DocumentReviewCard-5U3TGJZA.js} +6 -6
  19. package/dist/{DocumentReviewCard-TQQADJ36.js.map → DocumentReviewCard-5U3TGJZA.js.map} +1 -1
  20. package/dist/{DocumentReviewCard-BQ6ZD5MD.cjs → DocumentReviewCard-VFNMJSK7.cjs} +6 -6
  21. package/dist/{DocumentReviewCard-BQ6ZD5MD.cjs.map → DocumentReviewCard-VFNMJSK7.cjs.map} +1 -1
  22. package/dist/{WorkspaceTableView-GKMVTECZ.cjs → WorkspaceTableView-DHMCJRC6.cjs} +6 -6
  23. package/dist/{WorkspaceTableView-GKMVTECZ.cjs.map → WorkspaceTableView-DHMCJRC6.cjs.map} +1 -1
  24. package/dist/{WorkspaceTableView-YFLVFRJL.js → WorkspaceTableView-EH5CEB44.js} +4 -4
  25. package/dist/{WorkspaceTableView-YFLVFRJL.js.map → WorkspaceTableView-EH5CEB44.js.map} +1 -1
  26. package/dist/agents/index.cjs +282 -282
  27. package/dist/agents/index.js +4 -4
  28. package/dist/{chunk-D27BBGUF.cjs → chunk-23ACBETH.cjs} +4 -4
  29. package/dist/{chunk-D27BBGUF.cjs.map → chunk-23ACBETH.cjs.map} +1 -1
  30. package/dist/{chunk-U52KPOXT.js → chunk-323R76RZ.js} +3 -3
  31. package/dist/{chunk-U52KPOXT.js.map → chunk-323R76RZ.js.map} +1 -1
  32. package/dist/{chunk-DJE2E7YH.cjs → chunk-3VFQYKB5.cjs} +3 -3
  33. package/dist/{chunk-DJE2E7YH.cjs.map → chunk-3VFQYKB5.cjs.map} +1 -1
  34. package/dist/{chunk-BP5KBZLX.cjs → chunk-45Y7ASBC.cjs} +53 -47
  35. package/dist/chunk-45Y7ASBC.cjs.map +1 -0
  36. package/dist/{chunk-PBIFISDD.js → chunk-7P24MJQN.js} +3 -3
  37. package/dist/{chunk-PBIFISDD.js.map → chunk-7P24MJQN.js.map} +1 -1
  38. package/dist/{chunk-EM4KOKE6.js → chunk-BWWND4Y7.js} +3 -3
  39. package/dist/{chunk-EM4KOKE6.js.map → chunk-BWWND4Y7.js.map} +1 -1
  40. package/dist/{chunk-EG3BB32W.cjs → chunk-CCSF7RI4.cjs} +3 -3
  41. package/dist/{chunk-EG3BB32W.cjs.map → chunk-CCSF7RI4.cjs.map} +1 -1
  42. package/dist/{chunk-QK546T4C.cjs → chunk-CKNUL4LM.cjs} +3 -3
  43. package/dist/{chunk-QK546T4C.cjs.map → chunk-CKNUL4LM.cjs.map} +1 -1
  44. package/dist/{chunk-TJ7QEGVP.cjs → chunk-COZDIUG7.cjs} +18 -18
  45. package/dist/{chunk-TJ7QEGVP.cjs.map → chunk-COZDIUG7.cjs.map} +1 -1
  46. package/dist/{chunk-B3CRSCLK.cjs → chunk-EOIJ5JYP.cjs} +4 -4
  47. package/dist/{chunk-B3CRSCLK.cjs.map → chunk-EOIJ5JYP.cjs.map} +1 -1
  48. package/dist/{chunk-DRUNPUDT.cjs → chunk-FHXXDPNU.cjs} +11 -11
  49. package/dist/{chunk-DRUNPUDT.cjs.map → chunk-FHXXDPNU.cjs.map} +1 -1
  50. package/dist/{chunk-SBAM3UZX.js → chunk-JWRTUYLC.js} +3 -3
  51. package/dist/{chunk-SBAM3UZX.js.map → chunk-JWRTUYLC.js.map} +1 -1
  52. package/dist/{chunk-NDKZ6OR3.cjs → chunk-LEW4GUFW.cjs} +3 -3
  53. package/dist/{chunk-NDKZ6OR3.cjs.map → chunk-LEW4GUFW.cjs.map} +1 -1
  54. package/dist/{chunk-2LUA7UDE.js → chunk-NDVLCOWS.js} +7 -7
  55. package/dist/{chunk-2LUA7UDE.js.map → chunk-NDVLCOWS.js.map} +1 -1
  56. package/dist/{chunk-IRXPUQFP.js → chunk-OZL5ABLF.js} +3 -3
  57. package/dist/{chunk-IRXPUQFP.js.map → chunk-OZL5ABLF.js.map} +1 -1
  58. package/dist/{chunk-PMWZTVIY.js → chunk-PGKZBAJB.js} +12 -6
  59. package/dist/chunk-PGKZBAJB.js.map +1 -0
  60. package/dist/{chunk-KNOSLLTC.js → chunk-PKDPQS6Z.js} +3 -3
  61. package/dist/{chunk-KNOSLLTC.js.map → chunk-PKDPQS6Z.js.map} +1 -1
  62. package/dist/{chunk-VWM3J6ES.js → chunk-PVPGD6QR.js} +3 -3
  63. package/dist/{chunk-VWM3J6ES.js.map → chunk-PVPGD6QR.js.map} +1 -1
  64. package/dist/{chunk-J6FRFIVL.js → chunk-RAGITH2N.js} +3 -3
  65. package/dist/{chunk-J6FRFIVL.js.map → chunk-RAGITH2N.js.map} +1 -1
  66. package/dist/{chunk-TCCJ5I6G.js → chunk-RFKAE6WS.js} +4 -4
  67. package/dist/{chunk-TCCJ5I6G.js.map → chunk-RFKAE6WS.js.map} +1 -1
  68. package/dist/{chunk-CEKOZAGO.js → chunk-TAI23FCY.js} +3 -3
  69. package/dist/{chunk-CEKOZAGO.js.map → chunk-TAI23FCY.js.map} +1 -1
  70. package/dist/{chunk-WBLCPCWR.cjs → chunk-UDMII47W.cjs} +7 -7
  71. package/dist/{chunk-WBLCPCWR.cjs.map → chunk-UDMII47W.cjs.map} +1 -1
  72. package/dist/{chunk-BELZ2WD2.js → chunk-W5D5GFP2.js} +3 -3
  73. package/dist/{chunk-BELZ2WD2.js.map → chunk-W5D5GFP2.js.map} +1 -1
  74. package/dist/{chunk-K26RLK2Y.cjs → chunk-Y6ZNWC7E.cjs} +3 -3
  75. package/dist/{chunk-K26RLK2Y.cjs.map → chunk-Y6ZNWC7E.cjs.map} +1 -1
  76. package/dist/{chunk-3SHZPTR2.cjs → chunk-YBVBDVQX.cjs} +18 -18
  77. package/dist/{chunk-3SHZPTR2.cjs.map → chunk-YBVBDVQX.cjs.map} +1 -1
  78. package/dist/{chunk-RB54N5I7.cjs → chunk-ZIQGSFHG.cjs} +5 -5
  79. package/dist/{chunk-RB54N5I7.cjs.map → chunk-ZIQGSFHG.cjs.map} +1 -1
  80. package/dist/connect/docx.cjs +11 -11
  81. package/dist/connect/docx.js +7 -7
  82. package/dist/connect/index.cjs +1364 -1071
  83. package/dist/connect/index.cjs.map +1 -1
  84. package/dist/connect/index.js +914 -629
  85. package/dist/connect/index.js.map +1 -1
  86. package/dist/connect/viewer.cjs +9 -9
  87. package/dist/connect/viewer.js +8 -8
  88. package/dist/connection/billing/index.d.ts +1 -0
  89. package/dist/connection/billing/payment-required.d.ts +45 -0
  90. package/dist/connection/settings-page/ConnectedModelConnectionsSettings.d.ts +1 -0
  91. package/dist/connection/settings-page/ConnectedSettingsPage.d.ts +3 -0
  92. package/dist/connection/settings-page/index.d.ts +2 -1
  93. package/dist/connection/workflows/useWorkflowsPageState.d.ts +1 -1
  94. package/dist/dashboards/index.cjs +1 -1
  95. package/dist/dashboards/index.js +1 -1
  96. package/dist/document-tools/index.cjs +17 -17
  97. package/dist/document-tools/index.js +2 -2
  98. package/dist/embed/index.cjs +8 -8
  99. package/dist/embed/index.js +5 -5
  100. package/dist/facts/index.cjs +1 -1
  101. package/dist/facts/index.js +1 -1
  102. package/dist/files/index.cjs +1 -1
  103. package/dist/files/index.js +1 -1
  104. package/dist/index.cjs +468 -468
  105. package/dist/index.js +14 -14
  106. package/dist/site/index.cjs +17 -17
  107. package/dist/site/index.js +1 -1
  108. package/dist/studio/index.cjs +5 -5
  109. package/dist/studio/index.js +3 -3
  110. package/dist/workflow-canvas/index.cjs +26 -26
  111. package/dist/workflow-canvas/index.cjs.map +1 -1
  112. package/dist/workflow-canvas/index.js +11 -11
  113. package/dist/workflow-canvas/index.js.map +1 -1
  114. package/node_modules/@arbidocs/coedit/package.json +1 -1
  115. package/package.json +5 -5
  116. package/dist/ConnectedStreamedWordArtifact-V4MTKVNE.js.map +0 -1
  117. package/dist/ConnectedStreamedWordArtifact-YSW6D7AG.cjs.map +0 -1
  118. package/dist/chunk-BP5KBZLX.cjs.map +0 -1
  119. package/dist/chunk-PMWZTVIY.js.map +0 -1
@@ -1,32 +1,32 @@
1
1
  "use client";
2
- import { DEFAULT_SPEND_CAP_PENCE, useBillingSupport, findProPrices, packPrice, calcSavingsPercent, parseBudgetPounds, formatMoney, isProProject, useSelfExtId, addonCharge, formatPeriodEnd, quoteParts, taxDetail, money2, ANNUAL_PREMIUM_AI_NOTE, totalWithTaxWord, planBadgeView, isAddonBudgetZero, useRewardBalance, getQuotaItems, aiUsageResetTimestamp, formatResetDate, ZERO_BUDGET_MESSAGE, CAP_REACHED_MESSAGE, quoteError, POSTCODE_COUNTRIES, addonPrice, checkoutBlockPriceText, ADDON_BLOCK_AI_GBP, STORAGE_BLOCK_GB, quoteTotalLine, PRO_PACKS, apiErrorDetail, checkoutItemsLabel, planNameForPacks, proTierName, projectGroupBilling, SUGGESTED_DAILY_CAP_PER_USER, TAX_LOCATION_INVALID, FREE_COLLABORATORS, FREE_AI_GBP, FREE_STORAGE_MB, MAX_CHECKOUT_BLOCKS, PRO_AI_GBP, PRO_STORAGE_GB, plusVat, planPreviewLines, PAY_TODAY_UNPRICED, PLAN_CHOICE_PACKS, reduceBounds, splitBlocks, autoRoom, nextRemovedBlockSize, stepLabel, addStepCaption, blocksLabel, MIN_AUTO_TOPUP_THRESHOLD_GBP, USAGE_CAP_LABEL, USAGE_CAP_HELP, nextPeriodBody, addonSettingsBody, budgetSavedMessage } from '../chunk-KNOSLLTC.js';
3
- export { CAP_REACHED_MESSAGE, ZERO_BUDGET_MESSAGE, aiUsageResetTimestamp, formatMoney, formatResetDate, getQuotaItems, isAddonBudgetZero, isProProject, planBadgeView, planName, projectGroupBilling, useBillingSupport, useRewardBalance } from '../chunk-KNOSLLTC.js';
2
+ import { DEFAULT_SPEND_CAP_PENCE, useBillingSupport, findProPrices, packPrice, calcSavingsPercent, parseBudgetPounds, formatMoney, isProProject, useSelfExtId, addonCharge, formatPeriodEnd, quoteParts, taxDetail, money2, ANNUAL_PREMIUM_AI_NOTE, totalWithTaxWord, planBadgeView, isAddonBudgetZero, useRewardBalance, getQuotaItems, aiUsageResetTimestamp, formatResetDate, ZERO_BUDGET_MESSAGE, CAP_REACHED_MESSAGE, quoteError, POSTCODE_COUNTRIES, addonPrice, checkoutBlockPriceText, ADDON_BLOCK_AI_GBP, STORAGE_BLOCK_GB, quoteTotalLine, PRO_PACKS, apiErrorDetail, checkoutItemsLabel, planNameForPacks, proTierName, projectGroupBilling, SUGGESTED_DAILY_CAP_PER_USER, TAX_LOCATION_INVALID, FREE_COLLABORATORS, FREE_AI_GBP, FREE_STORAGE_MB, MAX_CHECKOUT_BLOCKS, PRO_AI_GBP, PRO_STORAGE_GB, plusVat, planPreviewLines, PAY_TODAY_UNPRICED, PLAN_CHOICE_PACKS, reduceBounds, splitBlocks, autoRoom, nextRemovedBlockSize, stepLabel, addStepCaption, blocksLabel, MIN_AUTO_TOPUP_THRESHOLD_GBP, USAGE_CAP_LABEL, USAGE_CAP_HELP, nextPeriodBody, addonSettingsBody, budgetSavedMessage } from '../chunk-PKDPQS6Z.js';
3
+ export { CAP_REACHED_MESSAGE, ZERO_BUDGET_MESSAGE, aiUsageResetTimestamp, formatMoney, formatResetDate, getQuotaItems, isAddonBudgetZero, isProProject, planBadgeView, planName, projectGroupBilling, useBillingSupport, useRewardBalance } from '../chunk-PKDPQS6Z.js';
4
4
  import { ConnectedTagEntity, useMemberLookup } from '../chunk-WBVPZZRG.js';
5
5
  export { ConnectedTagEntity, documentFieldContent, useMemberLookup } from '../chunk-WBVPZZRG.js';
6
6
  export { ConnectedAssistantDock, redlineStats, textToArtifact, toRedlineMarkdown, useConnectedAiTask, useConnectedChat, useSemanticSearch, useWorkspaceDocs } from '../chunk-T2VGD4X6.js';
7
- import { getRoleBadgeClass, formatRole, getRoleDescription, WorkspaceTypeBadge, PageLoading, WorkspacePageFrame, WorkspaceIdentityPanel, WorkspaceProjectSlot, WorkspaceAudienceLine, CommonWorkspaceToggle, ExpandableSection, LeaveFooter, WorkspaceList, WorkspaceGroup, WorkspaceCard } from '../chunk-O25HMSJU.js';
8
- import { ConnectedTaskComposer, useProjectSummary, primaryProjectWorkspace, useWorkflowTasks, useWorkflowDefinitions, useTaskPeople, useRenderTaskPerson, useProjectSummaries, ConnectedThreadTaskBar, ConnectedTaskActivityDialog } from '../chunk-PMWZTVIY.js';
9
- export { ConnectedTaskActivityDialog, ConnectedTaskComposer, ConnectedThreadTaskBar, ConnectedWorkflowHistory, ConnectedWorkflowRunner, DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS, DEFAULT_WORKFLOW_RUN_PAGE_LABELS, WorkflowRunThread, WorkflowRunWorkspaceChangedError, buildProjectSummaries, primaryProjectWorkspace, useEnsureRequiredLabels, useProjectSummaries, useProjectSummary, useRenderTaskPerson, useRequiredLabels, useSkillsEnabled, useTaskPeople, useWorkflowDefinitions, useWorkflowTasks, useWorkflowsPageState, workflowRunView } from '../chunk-PMWZTVIY.js';
7
+ import { ConnectedTaskComposer, useProjectSummary, primaryProjectWorkspace, useWorkflowTasks, useWorkflowDefinitions, useTaskPeople, useRenderTaskPerson, useProjectSummaries, ConnectedThreadTaskBar, ConnectedTaskActivityDialog } from '../chunk-PGKZBAJB.js';
8
+ export { ConnectedTaskActivityDialog, ConnectedTaskComposer, ConnectedThreadTaskBar, ConnectedWorkflowHistory, ConnectedWorkflowRunner, DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS, DEFAULT_WORKFLOW_RUN_PAGE_LABELS, WorkflowRunThread, WorkflowRunWorkspaceChangedError, buildProjectSummaries, primaryProjectWorkspace, useEnsureRequiredLabels, useProjectSummaries, useProjectSummary, useRenderTaskPerson, useRequiredLabels, useSkillsEnabled, useTaskPeople, useWorkflowDefinitions, useWorkflowTasks, useWorkflowsPageState, workflowRunView } from '../chunk-PGKZBAJB.js';
10
9
  import { usePendingFolders, useFilesStore, useFilesPrefs, useAiReviewStore, useFilesGridStates, filesViewMode, FILES_PREFS_KEY, useFilesDialogs } from '../chunk-RT4FSFXY.js';
11
10
  export { FILES_PREFS_KEY, filesViewMode, useAiReviewStore, useFilesDialogs, useFilesGridStates, useFilesPrefs, useFilesStore, usePendingFolders } from '../chunk-RT4FSFXY.js';
11
+ import { getRoleBadgeClass, formatRole, getRoleDescription, WorkspaceTypeBadge, PageLoading, WorkspacePageFrame, WorkspaceIdentityPanel, WorkspaceProjectSlot, WorkspaceAudienceLine, CommonWorkspaceToggle, ExpandableSection, LeaveFooter, WorkspaceList, WorkspaceGroup, WorkspaceCard } from '../chunk-O25HMSJU.js';
12
12
  import { ProjectPicker, ProjectOptionRow, WorkspaceFormModal, ModalActionRow, FormErrorBanner, WorkspaceFieldsView, FormActions } from '../chunk-RAUSAVC7.js';
13
13
  import { isAgentAccount, workspaceConversationCount, workspaceDocumentCount, isListedWorkspace, WORKSPACE_CATEGORY_FILTERS, projectFilterId, workspaceFilterAttributes, groupWorkspacesByProject, byRecentUpdate } from '../chunk-57CG33XJ.js';
14
14
  import { SharedFileView, SharedFilesInbox } from '../chunk-4ML5AMMO.js';
15
- import { useAuthPages, ConnectedUserEntity, AgentSteps, MessageLiveSeconds, useSsoSignIn, CompactLogin, useLoginForm, useLoginActions, useRegisterSubmitState, resolveSsoName, completeSsoSignIn, ssoAccountStatus, AskAgainContext, ConnectedMessageArea, ConversationComposer } from '../chunk-BELZ2WD2.js';
16
- export { AgentSteps, AnswerTable, ArbiChat, AskAgainContext, ConnectedBranchControls, ConnectedCitationRenderer, ConnectedCompactConversation, ConnectedConversationDocumentPicker, ConnectedEmbeddedChat, ConnectedMessage, ConnectedMessageArea, ConnectedMessageList, ConnectedThreadsPreview, ConnectedUserEntity, ConversationComposer, EmbeddedChatPanel, MessageDetailsModal, MessageLiveSeconds, RunningSubagents, SourceChips, WorkflowStepMessage, backUpOnSignup, defaultHost, renderConnectedUser, resolveSsoName, useAuthPages, useOpenChunk, useOpenWorkspaceIcon, useSlashItems, useSsoSignIn, useWorkspaceDocTitles } from '../chunk-BELZ2WD2.js';
15
+ import { useAuthPages, ConnectedUserEntity, AgentSteps, MessageLiveSeconds, useSsoSignIn, CompactLogin, useLoginForm, useLoginActions, useRegisterSubmitState, resolveSsoName, completeSsoSignIn, ssoAccountStatus, AskAgainContext, ConnectedMessageArea, ConversationComposer } from '../chunk-W5D5GFP2.js';
16
+ export { AgentSteps, AnswerTable, ArbiChat, AskAgainContext, ConnectedBranchControls, ConnectedCitationRenderer, ConnectedCompactConversation, ConnectedConversationDocumentPicker, ConnectedEmbeddedChat, ConnectedMessage, ConnectedMessageArea, ConnectedMessageList, ConnectedThreadsPreview, ConnectedUserEntity, ConversationComposer, EmbeddedChatPanel, MessageDetailsModal, MessageLiveSeconds, RunningSubagents, SourceChips, WorkflowStepMessage, backUpOnSignup, defaultHost, renderConnectedUser, resolveSsoName, useAuthPages, useOpenChunk, useOpenWorkspaceIcon, useSlashItems, useSsoSignIn, useWorkspaceDocTitles } from '../chunk-W5D5GFP2.js';
17
17
  import { useSelectWorkspace } from '../chunk-CRHY7DBO.js';
18
18
  export { useConnectedThreadActivity } from '../chunk-CRHY7DBO.js';
19
19
  import { FolderTile, FileTile, DocumentUser, UserAvatar, useDocumentFolders, DocumentNameCell, DocumentSharedCell, DocumentLabelsCell, RelatedDocumentsCell, DocumentFolderCell, StatusCell } from '../chunk-UO7KDCM2.js';
20
20
  export { ConnectedPendingSyncDialog, DocumentFolderCell, DocumentLabelsCell, DocumentNameCell, DocumentSharedCell, DocumentStatusGlyph, DocumentSyncGlyph, DocumentUser, FileTooltipContent, RelatedDocumentsCell, StatusCell, UserAvatar, isActiveDocumentStatus, openPendingSyncDialog, parseQuotaError, startMenuItem, useDocumentFolders, useResolvedDocStatus } from '../chunk-UO7KDCM2.js';
21
- import { DraggableHeader, ProfileCard, AvatarPicker, IdentityVerificationCard, IdentityVerificationDialog, RequireVerified, PasswordChangeDialog, EMAIL_NOTIFICATION_KEYS, EMAIL_NOTIFICATION_CATEGORIES, NotificationCategoryList, toNotificationCategories, toActiveSessionViews, ActiveSessionsDialog, LogoutDialog, toLogoutSessionViews, DeleteAccountDialog, toDeleteBlockerViews, PremiumModelsFrame, ConnectionsLoading, ConnectionsError, ConnectionsEmpty, UsageToggle, SettingsPage, UsageSummary, AppearanceSettings, SettingsSwitchRow, SettingsSwitchGroup, callsSwitchState, UsageLineChart, formatSessionTtl, EmailWorkspaceDialogView, PlanStack, PlanNotice, PlanPickerCard, PlanPickerHeader, PricingToggle, PromoCodeInput, PlanActionButton, SyncDialogBody, SyncField, SyncSelect, SyncSmallNote, SyncLoading, SyncReconnectNotice, SyncNote, SyncTreeFrame, SyncLinkRow, SyncLinkButton, SyncOptions, SyncOptionToggle, SyncDialogFooter, InvoicesDialog, PlanDialogFrame, ProjectList, RenameDialog, SharedProjectsSection, SharedProjectRow, MoreInfo, MoreInfoList, UsagePanel, UsageQuotaHint, UsageSection, UsageLegend, UsageProportionBar, UsageActionButton, ProjectDetailHeader, PlanBadge, ProjectDetailSection, QuotaExceededDialogView, InviteContactsDialog, WelcomeDialog, applyTriStateFilters, PanelFrame, PanelAddButton, PanelFrameBody, PanelScroll, PanelActionsRow, applyInvertedIndexFilter, ConfigSwitcherBar, PanelNote, FloatingPanel, ProjectRow, QuotaMeter, FilterChip, buildInvertedIndex, serverConnectionView, ServerConnectionButton, ModelProviderLabel, PlanInfoPopover, PlanCardGrid, ReferralRewardSummary, CheckoutDialogFrame, SyncFolderRow, SyncFolderStatus, PlanTierOption, PlanActionRow, SubscriptionStatusView, DailyCapField, ConnectionCard, ReferralRewardNote } from '../chunk-ZZTH27G7.js';
22
21
  import { FactsToolbar, FactsFieldsButton, FactComposer, FactDateInput, FactSourcesRow, FactsLoading, FactsLoadError, FactsEmptyState, FactsCalendar, FactsGanttPane, FactsBulkBar, FactSourceGroup, FactFieldRow, FactLabelsCell, enableFactTableColumnResize, createFactColumns, FactRowActions, sourceDocCount, DEFAULT_FACT_COLUMN_LABELS } from '../chunk-QUZPQWPX.js';
23
22
  import { docIdsOf, toFactCitations, EMPTY_FACT_DATE_FIELDS, withoutChunk, factDateSpanToFields, citedVersionRef, withChunk, factDateFieldsToSpan, withoutDoc, withDoc } from '../chunk-KGUSKGZE.js';
24
23
  import { HomeLoadError, HomeFrame, HomeMain, HomeCenteredScroll, HomeCenteredColumn, DashboardRoot, DashboardBand, DashboardColumns, RecentList, DashboardAction, FactsStrip, GettingStartedStrip, FactMark, CreateTile } from '../chunk-APXW5XGA.js';
25
24
  import { ProjectBandTitle, PlainBandTitle } from '../chunk-RQKWYKZY.js';
26
25
  import '../chunk-5TDGVOR5.js';
27
26
  import '../chunk-XRL4R2TT.js';
28
- import { useConnectedWorkspaceRole, ConnectedWorkflowLauncher, ConnectedWorkflowsTable, toWorkflowFieldDocument } from '../chunk-IRXPUQFP.js';
29
- export { ConnectedWorkflowDocumentsField, ConnectedWorkflowLauncher, ConnectedWorkflowsTable, DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS, toWorkflowFieldDocument, useConnectedAgentOptions, useConnectedWorkflowScopeSource, useConnectedWorkspaceRole, useDocxCommentTarget, useNativeDocxSupport } from '../chunk-IRXPUQFP.js';
27
+ import { DraggableHeader, ProfileCard, AvatarPicker, IdentityVerificationCard, IdentityVerificationDialog, RequireVerified, PasswordChangeDialog, EMAIL_NOTIFICATION_KEYS, EMAIL_NOTIFICATION_CATEGORIES, NotificationCategoryList, toNotificationCategories, toActiveSessionViews, ActiveSessionsDialog, LogoutDialog, toLogoutSessionViews, DeleteAccountDialog, toDeleteBlockerViews, PremiumModelsFrame, ConnectionsLoading, ConnectionsError, ConnectionsEmpty, UsageToggle, SettingsPage, UsageSummary, AppearanceSettings, SettingsSwitchRow, SettingsSwitchGroup, callsSwitchState, UsageLineChart, formatSessionTtl, EmailWorkspaceDialogView, PlanStack, PlanNotice, PlanPickerCard, PlanPickerHeader, PricingToggle, PromoCodeInput, PlanActionButton, SyncDialogBody, SyncField, SyncSelect, SyncSmallNote, SyncLoading, SyncReconnectNotice, SyncNote, SyncTreeFrame, SyncLinkRow, SyncLinkButton, SyncOptions, SyncOptionToggle, SyncDialogFooter, InvoicesDialog, PlanDialogFrame, ProjectList, RenameDialog, SharedProjectsSection, SharedProjectRow, MoreInfo, MoreInfoList, UsagePanel, UsageQuotaHint, UsageSection, UsageLegend, UsageProportionBar, UsageActionButton, ProjectDetailHeader, PlanBadge, ProjectDetailSection, QuotaExceededDialogView, InviteContactsDialog, WelcomeDialog, applyTriStateFilters, PanelFrame, PanelAddButton, PanelFrameBody, PanelScroll, PanelActionsRow, applyInvertedIndexFilter, ConfigSwitcherBar, PanelNote, FloatingPanel, ProjectRow, QuotaMeter, FilterChip, buildInvertedIndex, serverConnectionView, ServerConnectionButton, ModelProviderLabel, PlanInfoPopover, PlanCardGrid, ReferralRewardSummary, CheckoutDialogFrame, SyncFolderRow, SyncFolderStatus, PlanTierOption, PlanActionRow, SubscriptionStatusView, DailyCapField, ConnectionCard, ReferralRewardNote } from '../chunk-ZZTH27G7.js';
28
+ import { useConnectedWorkspaceRole, ConnectedWorkflowLauncher, ConnectedWorkflowsTable, toWorkflowFieldDocument } from '../chunk-OZL5ABLF.js';
29
+ export { ConnectedWorkflowDocumentsField, ConnectedWorkflowLauncher, ConnectedWorkflowsTable, DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS, toWorkflowFieldDocument, useConnectedAgentOptions, useConnectedWorkflowScopeSource, useConnectedWorkspaceRole, useDocxCommentTarget, useNativeDocxSupport } from '../chunk-OZL5ABLF.js';
30
30
  import { groupCandidates } from '../chunk-MTSKK3BN.js';
31
31
  import { BUILTIN_TEMPLATE_NAME, builtinHouseTemplate } from '../chunk-BTTUZZN3.js';
32
32
  import { useOpenWorkflow } from '../chunk-IXJDD2BO.js';
@@ -36,30 +36,30 @@ import { DEFAULT_DOCUMENT_VIEWER_TABS } from '../chunk-XG7OUC2M.js';
36
36
  export { ConnectedDocumentToolsProvider, DEFAULT_ASK_SUGGESTIONS, DEFAULT_DOCUMENT_VIEWER_LABELS, DEFAULT_DOCUMENT_VIEWER_TABS, useDocumentViewerSupport, useViewerDraftDocument, useViewerIsDetached, useViewerPassageCitation, useViewerStreamingDocument } from '../chunk-XG7OUC2M.js';
37
37
  import { DocumentWorkspaceContext, ConnectedMarkdown, useDocumentWorkspace, WorkspaceDocumentReference } from '../chunk-HGFU47TY.js';
38
38
  export { ConnectedMarkdown, DocumentChip, DocumentWorkspaceContext, ExternalLink, InternalDocLink, MailChip, MermaidDiagram, WorkspaceDocumentReference, useDocumentWorkspace } from '../chunk-HGFU47TY.js';
39
- import '../chunk-TSH726KP.js';
40
39
  import { FilterButton, searchExplorerDocuments, buildExplorerEntries, collectFolderDocs, joinFolderPath, getExplorerDisplayName, RECENTLY_DELETED_HINT, RECENTLY_DELETED_HINT_PLURAL, canDeleteDocument, ExplorerFrame, ExplorerStage, ExplorerScroller, ExplorerLoadingTiles, ExplorerEmpty, ExplorerMarquee, ExplorerDropOverlay, ExplorerDragPreview, CheckboxCell, TagColumnHeader, TagFormRoot, TagFormNameField, TagFormSelectField, TagFormNote, TagFormOptionsEditor, TagFormInstructionField, TagFormMeta, TagFormFooter, TagFormSharedToggle, FilesViewCenter, FilesFilterBar, TransferProgressView, TransferResumeBanner, ExportResultsReport, TransferScopeChooser, TransferKindsPicker, TransferReferencesChooser, ExportMethodChooser, ExportWorkspacePicker, TransferConflictChooser, TransferPlanSummary, ExportFooter, ExportModalTitle, ROW_MIN, rowHeightForLines, linesForRowHeight, RowDensityControl, VendorLogo, FolderFilterButton, FolderPickerRow, UploadFrame, UploadContainer, SelectedFilesList, RejectedFilesList, UploadErrorMessage, UploadProgress, PrivacyExplainerModal, MultiSelectCellEditor, DOCUMENT_TYPE_OPTIONS, DEFAULT_DOCUMENT_COLUMNS, shareStateOf, BulkActionsBar, shareTooltipFor, parseFolderSegments, AiReviewDialogView, MoveToFolderDialog, FolderCommandList, sortFields, filterFieldsByName, fieldsApplyBarCopy, FieldsEditorRoot, FieldsEditorToolbar, FieldsEditorList, FieldRow, FieldsEmptyState, fieldsEmptyText, FieldsApplyBar, FieldsManagerDefinition, FieldsManagerBody, FieldsManagerTitle, BulkTagEditorDialog, BulkReplaceDialog, DOCUMENTS_ROW_HEIGHT_INITIAL, EMAIL_VIEW_COLUMNS, useGridViews, ViewSelectorMenu, FilesAddMenu, applyColumnLayout, applyViewColumns, sortExplorerFiles, FilesPage, UrlInputDialog, FilesPageHeader, FilesToolbar, ExplorerFileNavigator, NavigatorPickerBar, FilesPageMain, DocumentGrid, resolveDocumentGridLayout, FilesModalFooter, BulkLabelSelectView, confirmHideFromMembers, DocumentsFolderButton, FilesTagsButton, UploadSourceSection, UploadSourcePicker, UploadBrowseButtons, canEditDocumentFields, FieldLabelsSelect, UploadFooterBar, ShareToggle, ImportPanel, ImportFamilySection, ImportList, ImportRow, TaskSection, UploadDropArea, canChangeVisibility, ImportSummary, ImportAside, FolderSummary, ImportProgress, ImportRunActions, ImportHint, ImportActionButton, UploadUrlButton } from '../chunk-MHEA3L6J.js';
41
- import { ModalBreadcrumbHeader } from '../chunk-RC6VTY2H.js';
42
40
  import { ViewToggle, DocumentViewToggle } from '../chunk-JJA6GQKH.js';
41
+ import '../chunk-TSH726KP.js';
42
+ import { ModalBreadcrumbHeader } from '../chunk-RC6VTY2H.js';
43
43
  import { formatBytes, reducedRateNote, RECENTLY_DELETED_NOTE, kindRows, usedPct, usedOfLimit, MAIL_FOLDER_LABELS, itemTitle, ITEM_LABELS, KIND_LABELS } from '../chunk-653XMGF4.js';
44
44
  import { DatabaseList, NewDatabaseDialog, DatabaseToolbar, DatabaseTable, DatabaseRowDetail, DatabaseColumnDialog, rowTitle, OPEN_ROW_COL_ID, ADD_COLUMN_COL_ID } from '../chunk-PTYERKEU.js';
45
45
  import { SignatureCertificate } from '../chunk-S77ERRTA.js';
46
46
  import '../chunk-2YOVK524.js';
47
- import { SettingsSection, SettingsCard, SettingsActionRow, SettingsRow, SettingsDangerZone, SettingsPanel, SettingsDisclosure } from '../chunk-MZA7GMOH.js';
48
47
  import '../chunk-6HKLTYNN.js';
48
+ import { SettingsSection, SettingsCard, SettingsActionRow, SettingsRow, SettingsDangerZone, SettingsPanel, SettingsDisclosure } from '../chunk-MZA7GMOH.js';
49
49
  import '../chunk-IA5BYEO7.js';
50
- import { WorkspaceActivityList, TagTable, TagPicker, tagsPageNouns, entitiesPhrase, ExtractEntitiesDialog, GridRowNavigator, LoadingIndicator, EntityIdentityBar, IDENTITY_NAME_MAX_LENGTH, documentCount, TIPS_VISIBILITY_OVERRIDE, useTipsPlacement, WELCOME_REPLAY_VIEW, tagTableDocx, setHintsSessionOverride, tagTableLabels, TagDetail, tagDetailLabels, tagNoteLabel, tagKindDescription, Toolbar, glossaryEntries, glossaryDocx, glossaryMarkdown, glossaryFileName } from '../chunk-U52KPOXT.js';
51
- import { ThemeEditor } from '../chunk-J6FRFIVL.js';
52
- import { MemberAvatarStack } from '../chunk-FUPAGAZB.js';
50
+ import { WorkspaceActivityList, TagTable, TagPicker, tagsPageNouns, entitiesPhrase, ExtractEntitiesDialog, GridRowNavigator, LoadingIndicator, EntityIdentityBar, IDENTITY_NAME_MAX_LENGTH, documentCount, TIPS_VISIBILITY_OVERRIDE, useTipsPlacement, WELCOME_REPLAY_VIEW, tagTableDocx, setHintsSessionOverride, tagTableLabels, TagDetail, tagDetailLabels, tagNoteLabel, tagKindDescription, Toolbar, glossaryEntries, glossaryDocx, glossaryMarkdown, glossaryFileName } from '../chunk-323R76RZ.js';
51
+ import { ThemeEditor } from '../chunk-RAGITH2N.js';
52
+ import '../chunk-J77BACGX.js';
53
53
  import { WorkspaceNotificationMenu, ThreadFollowMenuItem, ThreadFollowButton } from '../chunk-66NMPTOH.js';
54
+ import { MemberAvatarStack } from '../chunk-FUPAGAZB.js';
54
55
  import { EntityTooltip, EntityTooltipHeader, EntityTooltipStats, EntityTooltipHint } from '../chunk-3UIJLUXN.js';
55
56
  import '../chunk-7RITEVXA.js';
56
- import { UsageMeter } from '../chunk-66TA5IBN.js';
57
+ import { TimelineZoomControl } from '../chunk-4EZVCGRL.js';
58
+ import '../chunk-UJE32SST.js';
57
59
  import { renderSearchSnippet, SearchGroupHeader, isMeaningMatch, extractHighlightTerms, passesRelevanceCutoff, groupSearchResults, SearchPillToggle, SearchPagination, SearchPageFrame, SearchPageHeader, ApplyLabelDialog, SearchPageBody, SearchToolbarRow, SearchBar, SearchControlsBar, RelevanceThreshold, SearchTotalsHeadline, ApplyLabelButton, getSearchMatchHint, SearchResultsMain, SearchResultsInner, SearchErrorBanner, SearchResultList, SearchGroupCard, SearchNoResults, SearchEmptyState } from '../chunk-G4IYES7G.js';
58
60
  import { SearchHit } from '../chunk-BFN6CEEN.js';
59
- import '../chunk-J77BACGX.js';
61
+ import { UsageMeter } from '../chunk-66TA5IBN.js';
60
62
  import '../chunk-NHZK64TQ.js';
61
- import { TimelineZoomControl } from '../chunk-4EZVCGRL.js';
62
- import '../chunk-UJE32SST.js';
63
63
  import { PlainMailBodyEditor, MemberNameCell, MemberMutedText, MemberRoleCell, MemberListLoading, MemberBulkActions, RecipientPicker, buildMailFolderTree, MailFolderTree, AddContactsResults, AddContactsForm, emailTokens, EMPTY_CONTACT_FORM, contactToForm, contactStatusLabel, summarizeImport, matchesContact, contactName, primaryEmail, ActionMenu, draftMailCompose, replyMailCompose, emptyMailCompose, MailGrid, MailMessageView, DmThreadFrame, DmAccessRequestBanner, DmGrantAccessDialogView, DmInviteAvatar, planContactInvites, MAX_INVITE_EMAILS, summarizeUnsentInvites, applyContactInviteResults, summarizeContactInvites, failContactInvites, validateContactForm, inviteEmail, formToContactCard, RoleSelect, DEFAULT_CONTACT_OUTCOME_LABELS, contactOutcomeMessage, MailDocumentPicker, parseMailRecipients } from '../chunk-HH34WKOC.js';
64
64
  import '../chunk-NBV56SGU.js';
65
65
  import { isDefinitionsLabel, DOCX_MIME_TYPE, toDefinitionSource, definitionLabels } from '../chunk-IYUKJESY.js';
@@ -73,19 +73,18 @@ import { PassagePill } from '../chunk-5Q5IRH6F.js';
73
73
  import { useCopyText } from '../chunk-F5D7N5KT.js';
74
74
  import '../chunk-K4BGOPGG.js';
75
75
  import { DataTable, MetricCard } from '../chunk-KNCWOTFQ.js';
76
- import { PageHeader } from '../chunk-XCVLUXFP.js';
77
76
  import { tid } from '../chunk-AMTWY22T.js';
77
+ import { PageHeader } from '../chunk-XCVLUXFP.js';
78
78
  import '../chunk-WKYKDTNM.js';
79
79
  import '../chunk-ZCOVDK2E.js';
80
- import { StreamedArtifactFrame } from '../chunk-LOJVUGBJ.js';
81
- import { buildLibrarySkills, filterLibrarySkills, SKILL_SOURCE_LABELS, SKILL_TYPE_LABELS, SkillViewToggle, SkillFilterChips, SkillTile, SkillGenerateForm, SkillLibraryDetail, parseSkillFrontmatter, SKILL_MAIN_FILENAME, SkillEditForm, BUILTIN_SKILLS, DEFAULT_AGENT_CAPABILITIES, stripPersonaPreamble, AgentCreator, DEFAULT_AGENT_TYPES, DEFAULT_AGENT_TEMPLATES, AgentAvatarField, isValidAgentName, AgentConnectInstructions, groupAgentTasks, AgentGallery, goalProgress, AgentCard, ConsentPage, ConsentCard, ConsentHeader, ConsentNotice, ConsentSection, ConsentBulletList, ConsentStrong, ConsentText, ConfigForm, AgentEditView, AgentMainView, AgentCreatedView, AgentCreateView, GENERATE_IMAGE_ID, IMAGE_ASPECT_AUTO, deriveAnnotationName, ANNOTATE_ID, recordWorkflowUse, renderWorkflowIcon, openWorkflowLaunch, useWorkflowLaunchRequest, WorkflowRunStatus, ThreadStatusLine, TaskStartDialog, REMIND_TASK_ID, ThreadLauncher, moveTargets, NewThreadDialog, AgentBar, AgentBarNotes, AgentBarQueuedNote, AgentBarProbeAnswer, ConversationListView, ConversationTurnSpeaker, TaskInbox, ConsentMessage, CopyableUrl, ConsentPermissionList, ConsentActions, ConsentFootnote, AgentBarStatus, AgentBarIconButton, AgentBarMenu, composePersona, newThreadToRequest, importSkillFile, importSkillFromUrl, skillSlug, serializeSkill, STATUS_LABELS, asTaskStatus, UploadTaskList, filterConversationRows, TaskEmptyState, TaskTable, workflowToSkillMarkdown, closeWorkflowLaunch, defaultTaskComposerValues } from '../chunk-TCCJ5I6G.js';
80
+ import { buildLibrarySkills, filterLibrarySkills, SKILL_SOURCE_LABELS, SKILL_TYPE_LABELS, SkillViewToggle, SkillFilterChips, SkillTile, SkillGenerateForm, SkillLibraryDetail, parseSkillFrontmatter, SKILL_MAIN_FILENAME, SkillEditForm, BUILTIN_SKILLS, DEFAULT_AGENT_CAPABILITIES, stripPersonaPreamble, AgentCreator, DEFAULT_AGENT_TYPES, DEFAULT_AGENT_TEMPLATES, AgentAvatarField, isValidAgentName, AgentConnectInstructions, groupAgentTasks, AgentGallery, goalProgress, AgentCard, ConsentPage, ConsentCard, ConsentHeader, ConsentNotice, ConsentSection, ConsentBulletList, ConsentStrong, ConsentText, ConfigForm, AgentEditView, AgentMainView, AgentCreatedView, AgentCreateView, GENERATE_IMAGE_ID, IMAGE_ASPECT_AUTO, deriveAnnotationName, ANNOTATE_ID, recordWorkflowUse, renderWorkflowIcon, openWorkflowLaunch, useWorkflowLaunchRequest, WorkflowRunStatus, ThreadStatusLine, TaskStartDialog, REMIND_TASK_ID, ThreadLauncher, moveTargets, NewThreadDialog, AgentBar, AgentBarNotes, AgentBarQueuedNote, AgentBarProbeAnswer, ConversationListView, ConversationTurnSpeaker, TaskInbox, ConsentMessage, CopyableUrl, ConsentPermissionList, ConsentActions, ConsentFootnote, AgentBarStatus, AgentBarIconButton, AgentBarMenu, composePersona, newThreadToRequest, importSkillFile, importSkillFromUrl, skillSlug, serializeSkill, STATUS_LABELS, asTaskStatus, UploadTaskList, filterConversationRows, TaskEmptyState, TaskTable, workflowToSkillMarkdown, closeWorkflowLaunch, defaultTaskComposerValues } from '../chunk-RFKAE6WS.js';
82
81
  import { EntityChip, fromPlanSteps, getCurrentAgentStepPresentation } from '../chunk-2VH2PT3J.js';
83
82
  import '../chunk-LRPGXNMA.js';
84
83
  import { MultiSelect } from '../chunk-CQCC7LE7.js';
85
- import { documentScopeLabels, matchWorkflowScope } from '../chunk-CEKOZAGO.js';
84
+ import { documentScopeLabels, matchWorkflowScope } from '../chunk-TAI23FCY.js';
86
85
  import '../chunk-4QUUU7GH.js';
87
- import { TriStateFilterMenu } from '../chunk-G4GLDQLY.js';
88
86
  import { SectionLabel } from '../chunk-SBVOYSOO.js';
87
+ import { TriStateFilterMenu } from '../chunk-G4GLDQLY.js';
89
88
  import '../chunk-M4S75AEJ.js';
90
89
  import '../chunk-5LXQPP2K.js';
91
90
  import { SelectionBar, SelectionBarAction } from '../chunk-NUNKSZKU.js';
@@ -93,6 +92,7 @@ import '../chunk-RLWIUUQ5.js';
93
92
  import { FilterInput } from '../chunk-YU2KUMGE.js';
94
93
  import '../chunk-ELT2V4NB.js';
95
94
  import { GridView } from '../chunk-7F5Z4K5W.js';
95
+ import { StreamedArtifactFrame } from '../chunk-LOJVUGBJ.js';
96
96
  import { AccountRecoveryDialog, useFragmentCredentials, AuthLayout, AuthHeading, AuthField, AuthInput, AuthFieldBadge, AuthLink, AuthNote, RevealablePasswordInput, AuthConsent, AuthSubmitButton, AuthDivider, AuthAlert, RecoveryKeyDialog, AuthOfflineBadge, AuthTabs } from '../chunk-UQVI7ABB.js';
97
97
  import { parseAuthError } from '../chunk-RPMSD32Q.js';
98
98
  import { PasswordStrengthInput } from '../chunk-P6OLZGQA.js';
@@ -139,7 +139,7 @@ import { openDialog, closeDialog, useDialogProps, ConfirmDialog } from '../chunk
139
139
  import { ModalHeader, ModalScaffold, ModalSection, ModalSectionTitle } from '../chunk-TX2ZICS7.js';
140
140
  import '../chunk-7F6CBP3Z.js';
141
141
  import '../chunk-VUNV25KB.js';
142
- import { useUpdateDocuments, useDeleteDocuments, useRenameFolder, useDownloadDocuments, useTags, useDocumentHostActions, useDocumentThumbnails, HtmlIcon, useArbiSessionState, selectDraft, useArbi, useArbiSessionStore, useAudioRecorder, MicRecordingOverlay, useWorkspaces, useConversations, useRunConversation, useWorkspaceActivity, useWorkspaceUsers, callLink, openCall, startDmCall, calendarQueryKeys, mailQueryKeys, arbiQueryKeys, invalidateConversationLists, isWorkspaceNotificationType, useNotifications, useDeleteNotifications, useMarkNotificationsRead, useCallsEnabled, useDocuments, serverNotificationBellEntry, documentDisplayName, useArbiWebSocket, isNotificationRow, useWorkspaceNotificationLevel, useFollowThread, useUploadSkillFiles, useSkills, useSaveSkill, useSetSkillVisibility, useDeleteSkill, useSkillSource, useInstallSkillPack, useAgentModels, useMcpTools, useAgentConfig, useAgentWorkspaces, useCreateAgent, useSaveAgentConfig, useGrantAgentAccess, useRevokeAgentAccess, useGenerateAgentAvatar, useAgents, useDeleteAgents, ConversationScope, useConversation, useAgentSession, useStartAgentSession, useCloseAgentSession, useAgentChats, useSwitchWorkspace, useWorkItems, ArtifactCanvas, useTagKindSchema, useCreateTag, useSetTagValues, useUpdateTagKindSchema, useUpdateTag, useFacts, useDeleteTag, useExtractEntities, useEntityExtractionDocIds, useStartWorkspaceTransfer, useResumeWorkspaceTransfer, useCancelWorkspaceTransfer, useWorkspaceTransfer, useWorkspaceTransfers, useWorkspaceExportDownload, usePlanWorkspaceTransfer, isTransferResumable, isTransferFinished, getWorkspaceKind, useShellWorkspaces, ArbiBotHeadIcon, useProfile, useUpdateProfile, useRequestEmailChange, useConfirmEmailChange, useNameEditor, useAvatarCrop, useEmailChange, ImageCropModal, useIdentityVerification, usePasswordChange, usePasswordChangeForm, useNotificationPreferences, useSessions, useCurrentSessionId, useTerminateSession, useArbiSession, useSignOut, useDeleteAccount, useDeleteAccountFlow, useMailClient, defaultMailAlias, useClaimNativeAlias, useMailOnline, useConnectMailAccount, useDisconnectMailAccount, useMailPolicy, useMailAccounts, useUserSettings, useUpdateUserSettings, useDismissedTips, useAvailableModels, useConnectorVendorVisibility, useConnectorCatalog, useMyConnectors, useDisconnectConnector, useSlackConnection, useDisconnectSlack, isMailboxSyncVendor, isSharePointVendor, useWorkspaceTrash, useInvalidateStorage, useStorageActions, useStorageItems, useStorageItemNames, useStorageProjects, useUserUsageToday, formatGbp, useFeatureSwitch, useCallsConfig, useStorageSnapshots, useUpdateWorkspace, useAddWorkspaceMembers, useRemoveWorkspaceMembers, useSetWorkspaceMemberRoles, useContacts, useInviteContacts, useDeleteContact, usePeopleSearch, toShellWorkspace, useAuthorizeLimits, useUploadDocuments, useSetWorkspaceHouseTemplate, useSetDeploymentHouseTemplate, useCurrentUser, supportsHouseTemplates, workspaceHouseTemplateId, isDeploymentAdmin, useHouseTemplateCandidates, useWorkspaceArchive, useArchiveWorkspace, useUnarchiveWorkspace, isArchiveMoving, useIsSlow, useProducts, useCreateProject, useDeleteProject, useCanCreateProjects, PROJECT_CREATION_DENIED_REASON, useEnableMailboxSync, useMailboxFolders, useEnableDriveSync, useDriveFolderChildren, connectorErrorStatus, useProjectInvoices, useProjects, useUpdateProjectFields, useChargeWatch, useAddonQuote, STILL_WORKING, useProjectBillingPortal, useProjectUsage, MODEL_GROUP_LABELS, useRefreshProject, useBoxRole, useDeleteWorkspaces, useCreateContact, useUpdateContact, useLinkContact, useEntitlements, useImportContacts, entitlementRefusal, MAX_RETRIEVE_DOC_IDS, useSemanticSearch, useAssignDocTags, useMailUnlock, useMailFolders, useMailMessages, useMailDraftCompose, useMailMessage, useMailCache, MailOfflineUnavailableError, accountPath, useCalendarEvents, useCalendars, useCanHostCalls, useOpenCallMeetingChat, usePeople, useFetchCalendarEvent, useCalendarSettings, useCalendarOverlays, useCalendarOutbox, useCalendarAccounts, useSyncAccountsOnOpen, useResumeCalendarAccountConnect, useCreateEvent, useUpdateEvent, useDeleteEvent, useMoveEvent, useRespondToEvent, useCreateCalendar, useUpdateCalendar, useDeleteCalendar, useImportCalendar, useSaveCalendarSettings, useRefreshCalendar, useCalendarEvent, useMailAttachmentText, useCalendarEventByUid, getPublicBookingPage, bookPublicSlot, PublicBookingError, useDocumentsSupport, isZipFile, prepareUploadFiles, UPLOAD_MAX_FILE_SIZE, filesFromDrop, UPLOAD_ACCEPT, useUploadFromUrls, useUploadFiles, useUpdateDocTag, useRemoveDocTags, useOfflineDocumentIds, useKeepDocumentsOffline, useRemoveDocumentsOffline, useOpenViewerDocumentId, subscribeDocumentRows, useGenerateDocTags, useRefreshDocuments, useArbiWsStore, isTableViewOf, viewsOfTable, useDocumentsLoading, selectViewingDocumentId, useRelatedDocuments, useWorkspaceProcessing, DISMISSED_TASK_TTL_MS, useDatabases, useCreateDatabase, useImportDatabase, myChatId, useChatThread, useChatPost, useDeleteChatMessage, useMarkChatRead, setOpenChat, useAgentDmStatus, annotateThread, userDisplayName, DmComposer, TypingIndicator, useRenameChat, useAddChatMembers, useRemoveChatMember, useChats, useChatSummaries, useRequestWorkspaceAccess, useCreateGroupChat, useChatArrivals, useApplyChatModel, useConfig, resolveConfigModel, AUTO_CHAT_MODEL, formatGbpPerMillionTokens, useConfigSchema, useSaveConfig, useConversationPendingAuth, openAccessRequest, useFeature, useIsEntitled, ImageCropper, useConversationActivity, useConversationItems, threadTabId, useUpdateConversation, TaskThreadPendingError, useWorkflows, useStartTaskQuery, useCreateWork, useRunWorkflow, useMentionCandidates, useBuiltinCommands, useAgentRunControl, useTransientView, useDeleteConversation, useCanEditShared, useIsWorkspaceOwner, LinkedInIcon, GoogleIcon, AppleIcon, isQueuedCalendarWrite, DateSeparator, ChatBubble, isAliasTakenError, nextAliasSuggestion, aliasTakenMessage, mailJson, connectorReturnTo, GitHubIcon, downloadRecoveryFile, cropImage, getRelatedTotal, isDeploymentUserNotification, describeServerNotification, getWorkspaceActionText, getWorkspaceSentPhrase, BOX_SEAT_REFUSED, BOX_SEAT_REFUSED_TITLE, documentActivityPhrase, isSignatureNotificationType, inputRequestTitle, WORK_NOTIFICATION_LABELS, useConfigs, usePassageQuotes, useUpdateFact, useDeleteFact, useCreateFact, useAccountClient, usePlanQuote, useCreateProjectCheckout, useInvalidateProjects, useCreateWorkspace, useDriveFolderDocCount, useChangeProjectPlan, useCancelProjectSubscription, usePreviewProjectPlanChange, useAddProjectAddonBlock, fileAttachment, useMailProjects, useSaveMailDraft, useSendMail, useMailDraftReplaced, useCalendarInvitations, useDecideCounter, useSearchContacts, usePublishCalendar, useCalendarShares, useShareCalendar, useUnshareCalendar, useSubscribeCalendar, useHolidayCountries, useAddHolidayCalendar, cancelPublicBooking, useSaveConfigField, SHAREPOINT_VENDORS, isDriveSyncVendor, useDatabase, useDatabaseRows, useUpdateDatabase, useDeleteDatabase, useAddDatabaseRows, useUpdateDatabaseRow, useDeleteDatabaseRows, useImportDatabaseRows, useExportDatabase, DATABASE_ROWS_PAGE, useInvalidateAfterTransfer, DmAvatar, ConversationList, useDeleteConfig, isFullConfig, useChatUnreadTotal, useUnreadByPeer, useArbiWsStatus, useMarkDocumentShared, useConversationSearch, useWorkspaceRole, useConversationDocuments, useConversationData, useConnectRunStream, useAnswerAgentQuestion, useConversationIsShared, buildPendingFirstTurn, useConversationTurn, useAskAgain, transcriptSegmentOf, getOrphanedLastMessage, refuseChatWhenOffline, useThreadDocument, useDocumentAutoAdd, useAutoSendDraft, READ_ONLY_MEETING_TEXT, useProjectConversationUsage, signatureNotificationPhrase, signatureRequestMeta, getNotificationTypeMeta, useMailDraftEditor, useFreeBusy, useFindTime, useCalendarSupport, useStartCalendarAccountOAuth, useConnectOAuthAccount, useBookingPages, useDeleteBookingPage, useRooms, useCancelMailboxSync, useMailboxSyncProgress, useRefreshConnectorsOnRunEnd, useCancelDriveSync, useDriveFolders, useDriveSyncProgress, useDriveSyncEstimate, useSearchDatabaseRows, callSession, isReplayableArbiMutation, useArbiHost, describeCalendarNotification, notificationUserName, useSessionView, useConnectorAutoSync, useUpdateProjectNextPeriodAddons, useUpdateProjectAddonSettings, useSyncCalendarAccount, useUpdateCalendarAccount, useDisconnectCalendarAccount, ACCOUNT_VENDOR, useCalDavProfiles, useConnectCalDavAccount, useSaveBookingPage, useCreateRoom, useTriggerMailboxSync, useTriggerDriveSync } from '@arbidocs/react';
142
+ import { useUpdateDocuments, useDeleteDocuments, useRenameFolder, useDownloadDocuments, useTags, useDocumentHostActions, useDocumentThumbnails, HtmlIcon, useArbiSessionState, selectDraft, useArbi, useArbiSessionStore, useAudioRecorder, MicRecordingOverlay, useWorkspaces, useConversations, useRunConversation, useWorkspaceActivity, useWorkspaceUsers, callLink, openCall, startDmCall, calendarQueryKeys, mailQueryKeys, arbiQueryKeys, invalidateConversationLists, isWorkspaceNotificationType, useNotifications, useDeleteNotifications, useMarkNotificationsRead, useCallsEnabled, useDocuments, serverNotificationBellEntry, documentDisplayName, useArbiWebSocket, isNotificationRow, useWorkspaceNotificationLevel, useFollowThread, useUploadSkillFiles, useSkills, useSaveSkill, useSetSkillVisibility, useDeleteSkill, useSkillSource, useInstallSkillPack, useAgentModels, useMcpTools, useAgentConfig, useAgentWorkspaces, useCreateAgent, useSaveAgentConfig, useGrantAgentAccess, useRevokeAgentAccess, useGenerateAgentAvatar, useAgents, useDeleteAgents, ConversationScope, useConversation, useAgentSession, useStartAgentSession, useCloseAgentSession, useAgentChats, useSwitchWorkspace, useWorkItems, ArtifactCanvas, useTagKindSchema, useCreateTag, useSetTagValues, useUpdateTagKindSchema, useUpdateTag, useFacts, useDeleteTag, useExtractEntities, useEntityExtractionDocIds, useStartWorkspaceTransfer, useResumeWorkspaceTransfer, useCancelWorkspaceTransfer, useWorkspaceTransfer, useWorkspaceTransfers, useWorkspaceExportDownload, usePlanWorkspaceTransfer, isTransferResumable, isTransferFinished, getWorkspaceKind, useShellWorkspaces, ArbiBotHeadIcon, useProfile, useUpdateProfile, useRequestEmailChange, useConfirmEmailChange, useNameEditor, useAvatarCrop, useEmailChange, ImageCropModal, useIdentityVerification, usePasswordChange, usePasswordChangeForm, useNotificationPreferences, useSessions, useCurrentSessionId, useTerminateSession, useArbiSession, useSignOut, useDeleteAccount, useDeleteAccountFlow, useMailClient, defaultMailAlias, useClaimNativeAlias, useMailOnline, useConnectMailAccount, useDisconnectMailAccount, useMailPolicy, useMailAccounts, useUserSettings, useUpdateUserSettings, useDismissedTips, useAvailableModels, useModelConnections, useDirectModelUsage, useSaveModelConnection, useRemoveModelConnection, useUnlockModelConnections, useConnectorVendorVisibility, useConnectorCatalog, useMyConnectors, useDisconnectConnector, useSlackConnection, useDisconnectSlack, isMailboxSyncVendor, isSharePointVendor, useWorkspaceTrash, useInvalidateStorage, useStorageActions, useStorageItems, useStorageItemNames, useStorageProjects, useUserUsageToday, formatGbp, useFeatureSwitch, useCallsConfig, useStorageSnapshots, useUpdateWorkspace, useAddWorkspaceMembers, useRemoveWorkspaceMembers, useSetWorkspaceMemberRoles, useContacts, useInviteContacts, useDeleteContact, usePeopleSearch, toShellWorkspace, useAuthorizeLimits, useUploadDocuments, useSetWorkspaceHouseTemplate, useSetDeploymentHouseTemplate, useCurrentUser, supportsHouseTemplates, workspaceHouseTemplateId, isDeploymentAdmin, useHouseTemplateCandidates, useWorkspaceArchive, useArchiveWorkspace, useUnarchiveWorkspace, isArchiveMoving, useIsSlow, useProducts, useCreateProject, useDeleteProject, useCanCreateProjects, PROJECT_CREATION_DENIED_REASON, useEnableMailboxSync, useMailboxFolders, useEnableDriveSync, useDriveFolderChildren, connectorErrorStatus, useProjectInvoices, useProjects, useUpdateProjectFields, useChargeWatch, useAddonQuote, STILL_WORKING, useProjectBillingPortal, useProjectUsage, MODEL_GROUP_LABELS, useRefreshProject, useBoxRole, cachedQuotaUsedUp, useDeleteWorkspaces, useCreateContact, useUpdateContact, useLinkContact, useEntitlements, useImportContacts, entitlementRefusal, MAX_RETRIEVE_DOC_IDS, useSemanticSearch, useAssignDocTags, useMailUnlock, useMailFolders, useMailMessages, useMailDraftCompose, useMailMessage, useMailCache, MailOfflineUnavailableError, accountPath, useCalendarEvents, useCalendars, useCanHostCalls, useOpenCallMeetingChat, usePeople, useFetchCalendarEvent, useCalendarSettings, useCalendarOverlays, useCalendarOutbox, useCalendarAccounts, useSyncAccountsOnOpen, useResumeCalendarAccountConnect, useCreateEvent, useUpdateEvent, useDeleteEvent, useMoveEvent, useRespondToEvent, useCreateCalendar, useUpdateCalendar, useDeleteCalendar, useImportCalendar, useSaveCalendarSettings, useRefreshCalendar, useCalendarEvent, useMailAttachmentText, useCalendarEventByUid, getPublicBookingPage, bookPublicSlot, PublicBookingError, useDocumentsSupport, isZipFile, prepareUploadFiles, UPLOAD_MAX_FILE_SIZE, filesFromDrop, UPLOAD_ACCEPT, useUploadFromUrls, useUploadFiles, useUpdateDocTag, useRemoveDocTags, useOfflineDocumentIds, useKeepDocumentsOffline, useRemoveDocumentsOffline, useOpenViewerDocumentId, subscribeDocumentRows, useGenerateDocTags, useRefreshDocuments, useArbiWsStore, isTableViewOf, viewsOfTable, useDocumentsLoading, selectViewingDocumentId, useRelatedDocuments, useWorkspaceProcessing, DISMISSED_TASK_TTL_MS, useDatabases, useCreateDatabase, useImportDatabase, myChatId, useChatThread, useChatPost, useDeleteChatMessage, useMarkChatRead, setOpenChat, useAgentDmStatus, annotateThread, userDisplayName, DmComposer, TypingIndicator, useRenameChat, useAddChatMembers, useRemoveChatMember, useChats, useChatSummaries, useRequestWorkspaceAccess, useCreateGroupChat, useChatArrivals, useApplyChatModel, useConfig, resolveConfigModel, AUTO_CHAT_MODEL, formatGbpPerMillionTokens, useConfigSchema, useSaveConfig, useConversationPendingAuth, openAccessRequest, useFeature, useIsEntitled, ImageCropper, useConversationActivity, useConversationItems, threadTabId, useUpdateConversation, TaskThreadPendingError, useWorkflows, useStartTaskQuery, useCreateWork, useRunWorkflow, useMentionCandidates, useBuiltinCommands, useAgentRunControl, useTransientView, useDeleteConversation, useCanEditShared, useIsWorkspaceOwner, LinkedInIcon, GoogleIcon, AppleIcon, isQueuedCalendarWrite, DateSeparator, ChatBubble, isAliasTakenError, nextAliasSuggestion, aliasTakenMessage, mailJson, connectorReturnTo, GitHubIcon, downloadRecoveryFile, cropImage, getRelatedTotal, isDeploymentUserNotification, describeServerNotification, getWorkspaceActionText, getWorkspaceSentPhrase, BOX_SEAT_REFUSED, BOX_SEAT_REFUSED_TITLE, documentActivityPhrase, isSignatureNotificationType, inputRequestTitle, WORK_NOTIFICATION_LABELS, useConfigs, usePassageQuotes, useUpdateFact, useDeleteFact, useCreateFact, useAccountClient, usePlanQuote, useCreateProjectCheckout, useInvalidateProjects, useCreateWorkspace, useDriveFolderDocCount, useChangeProjectPlan, useCancelProjectSubscription, usePreviewProjectPlanChange, useAddProjectAddonBlock, fileAttachment, useMailProjects, useSaveMailDraft, useSendMail, useMailDraftReplaced, useCalendarInvitations, useDecideCounter, useSearchContacts, usePublishCalendar, useCalendarShares, useShareCalendar, useUnshareCalendar, useSubscribeCalendar, useHolidayCountries, useAddHolidayCalendar, cancelPublicBooking, useSaveConfigField, SHAREPOINT_VENDORS, isDriveSyncVendor, useDatabase, useDatabaseRows, useUpdateDatabase, useDeleteDatabase, useAddDatabaseRows, useUpdateDatabaseRow, useDeleteDatabaseRows, useImportDatabaseRows, useExportDatabase, DATABASE_ROWS_PAGE, useInvalidateAfterTransfer, DmAvatar, ConversationList, useDeleteConfig, isFullConfig, useChatUnreadTotal, useUnreadByPeer, useArbiWsStatus, useMarkDocumentShared, useConversationSearch, useWorkspaceRole, useConversationDocuments, useConversationData, useConnectRunStream, useAnswerAgentQuestion, useConversationIsShared, buildPendingFirstTurn, useConversationTurn, useAskAgain, transcriptSegmentOf, getOrphanedLastMessage, refuseChatWhenOffline, useThreadDocument, useDocumentAutoAdd, useAutoSendDraft, READ_ONLY_MEETING_TEXT, useProjectConversationUsage, signatureNotificationPhrase, signatureRequestMeta, getNotificationTypeMeta, useMailDraftEditor, useFreeBusy, useFindTime, useCalendarSupport, useStartCalendarAccountOAuth, useConnectOAuthAccount, useBookingPages, useDeleteBookingPage, useRooms, useCancelMailboxSync, useMailboxSyncProgress, useRefreshConnectorsOnRunEnd, useCancelDriveSync, useDriveFolders, useDriveSyncProgress, useDriveSyncEstimate, useSearchDatabaseRows, callSession, isReplayableArbiMutation, useArbiHost, describeCalendarNotification, notificationUserName, useSessionView, useConnectorAutoSync, useUpdateProjectNextPeriodAddons, useUpdateProjectAddonSettings, useSyncCalendarAccount, useUpdateCalendarAccount, useDisconnectCalendarAccount, ACCOUNT_VENDOR, useCalDavProfiles, useConnectCalDavAccount, useSaveBookingPage, useCreateRoom, useTriggerMailboxSync, useTriggerDriveSync } from '@arbidocs/react';
143
143
  export { viewsOfTable } from '@arbidocs/react';
144
144
  import { getFileTypeIcon, getDocumentTitle, getEntityLabel, Badge, ThreadVisibilityIcon, Button, getUserDisplayName, createUserAvatarIcon, Label, Input, cn, Textarea, Dialog, DialogContent, DialogTitle, EntityIcon, DialogDescription, DialogHeader, tagKindNouns, tagKindTitle, formatFriendlyDate, getTagTypeLabel, VisibilityToggle, ShieldIcon, isImageDocument, getEntityColor, IconToggle, isAgent, Switch, Checkbox, entityNoun, DialogTrigger, Tooltip, TooltipTrigger, TooltipContent, EntityPill, CommandGroup, CommandItem, ProjectEntity, DialogFooter, Tabs, TabsList, TabsTrigger, TabsContent, getDocIcon, getDocumentNature, getDocumentAuthor, markdownToPlainText, getDocumentSubject, formatDocDate, getDocumentDate, friendlyFileType, formatFolderLabel, canonicalFolderPath, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Slider, formatRelativeTime, AgentBadge, PresenceLabel, ProviderIcon, TooltipProvider, UserMenu, Popover, PopoverAnchor, PopoverTrigger, PopoverContent, Command, CommandInput, CommandList, CommandEmpty, getUserAvatarColor, ArbiIcon, DocumentEntity, Avatar, AvatarImage, AvatarFallback, getUserInitials, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, UserEntity, agentAvatarColors, ARBI_MARK_SRC, Card, CardHeader, CardTitle, CardContent, VerifiedToggle, Progress } from '@arbidocs/react/ui';
145
145
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
@@ -147,7 +147,7 @@ import { lazy, memo, useState, useEffect, forwardRef, useRef, useMemo, useLayout
147
147
  import { hasMessageBody, notify, useNotify, sharedSearchSession, takePendingSearch, selectUnread, NotificationBell, useTurnDocumentId, useOpenDocumentId, useRegisterOpenDocument } from '@arbidocs/react/shell';
148
148
  import { useQueryClient } from '@tanstack/react-query';
149
149
  import { parseCallFragment, isMessageType, validateRecoveryKeyFile, RECOVERY_KEY_ERRORS, parseRecoveryUrl, prewarmKeyPairs, decryptRecoveryKey, unlockIdentityWithPassword, createRecoveryUrl, bytesToBase64, initSodium } from '@arbidocs/client';
150
- import { Bell, Activity, Info, UserCheck, Trash2, Loader2, Upload, Link2, Search, Plus, ArrowLeft, Bot, Tags, CheckCircle2, Milestone, Monitor, UserCircle, KeyRound, Radio, LogOut, Wifi, RotateCcw, Mail, ExternalLink, Lock, HardDrive, User, HatGlasses, MessageSquare, PlugZap, Gauge, Cloud, XCircle, Building2, Palette, Type, Code2, ChevronDown, ChevronRight, Star, Check, UserPlus, FolderInput, FileText, Archive, ArchiveRestore, Download, Printer, SquareStack, Table, FolderKanban, Users, Sparkles, Cake, X, UserRound, MessagesSquare, Tag, Settings, Video, CalendarDays, Clock, MapPin, Globe, Calendar, Hash, File as File$1, FileType, FolderOpen, Fingerprint, Share2, Paperclip, CircleCheck, Copy, Network, CheckCircle, TriangleAlert, LoaderCircle, NotebookPen, Columns3, EyeOff, Eye, ArrowUp, ArrowDown, ZoomOut, Camera, Send, FilePlus2, Eraser, UserMinus, RefreshCw, UsersRound, Infinity, Bug, Crop, Undo2, ImageUp, Wrench, RotateCw, BadgeCheck, Link, Shield, ClipboardList, Square, Table2, CalendarClock, BrainCircuit, ShieldCheck, Zap, KeySquare, BellOff, CheckCheck, FolderUp, ArrowUpCircle, Contact, Scale, Pencil, BookA, Quote, Inbox, CalendarX, CalendarCheck, Phone, Play, Pause, Workflow, Minimize2, Maximize2, Minus, CalendarSearch, DoorOpen, AlertCircle, ClockFading, AlertTriangle } from 'lucide-react';
150
+ import { Bell, Activity, Info, UserCheck, Trash2, Loader2, Upload, Link2, Search, Plus, ArrowLeft, Bot, Tags, CheckCircle2, Milestone, Monitor, UserCircle, KeyRound, Radio, LogOut, Wifi, RotateCcw, Mail, ExternalLink, Lock, HardDrive, User, HatGlasses, MessageSquare, Code2, PlugZap, Gauge, Cloud, XCircle, Building2, Palette, Type, ChevronDown, ChevronRight, Star, Check, UserPlus, FolderInput, FileText, Archive, ArchiveRestore, Download, Printer, SquareStack, Table, FolderKanban, Users, Sparkles, Cake, X, UserRound, MessagesSquare, Tag, Settings, Video, CalendarDays, Clock, MapPin, Globe, Calendar, Hash, File as File$1, FileType, FolderOpen, Fingerprint, Share2, Paperclip, CircleCheck, Copy, Network, CheckCircle, TriangleAlert, LoaderCircle, NotebookPen, Columns3, EyeOff, Eye, ArrowUp, ArrowDown, ZoomOut, Camera, Send, FilePlus2, Eraser, UserMinus, RefreshCw, UsersRound, Infinity, Bug, Crop, Undo2, ImageUp, Wrench, RotateCw, BadgeCheck, Link, Shield, ClipboardList, Square, Table2, CalendarClock, BrainCircuit, ShieldCheck, Zap, KeySquare, BellOff, CheckCheck, FolderUp, ArrowUpCircle, Contact, Scale, Pencil, BookA, Quote, Inbox, CalendarX, CalendarCheck, Phone, Play, Pause, Workflow, Minimize2, Maximize2, Minus, CalendarSearch, DoorOpen, AlertCircle, ClockFading, AlertTriangle } from 'lucide-react';
151
151
  import { downloadBlob, useIsOnline, DocumentToolsProvider, useSignatureVerification, SignatureVerificationError } from '@arbidocs/react/document-tools';
152
152
  import { useStreamedArtifact, parseVersionRef } from '@arbidocs/react/artifacts';
153
153
  import { FLAT_TAG_KINDS, getEligibleParentTags, canTagHaveParent, isFlatKind, TAG_NESTING_MAX_DEPTH, TAG_KINDS, formatFileSize, filterDocumentTags, isLabelTag, refusalReason, isPresenceTag, isAnnotationTag, flattenTagTree, tagsForScope, tagsOfGroup, chats, buildRetrievalFullContextTool, buildRetrievalChunkTool, computeRunStats, topLevelAgentSteps, getCurrentStep, extractSubagentLanes, getChildTags, tagUseCount, PRESENCE_KINDS, isEntityTag, DuplicateContactError, wouldCreateTagCycle, ArbiApiError, getTagDescendantIds } from '@arbidocs/sdk/browser';
@@ -1154,18 +1154,18 @@ function ConnectedNotificationCenter({
1154
1154
  [deleteRows, removeEntries]
1155
1155
  );
1156
1156
  const openTarget = useOpenNotificationTarget();
1157
- const { notify: notify16 } = useBlocksEnvironment();
1157
+ const { notify: notify17 } = useBlocksEnvironment();
1158
1158
  const open = useCallback(
1159
1159
  (target) => {
1160
1160
  if (onOpen) return onOpen(target);
1161
1161
  openTarget(target).catch(
1162
- (error) => notify16(
1162
+ (error) => notify17(
1163
1163
  error instanceof Error ? error.message : "Could not open this notification.",
1164
1164
  "error"
1165
1165
  )
1166
1166
  );
1167
1167
  },
1168
- [onOpen, openTarget, notify16]
1168
+ [onOpen, openTarget, notify17]
1169
1169
  );
1170
1170
  const { data: workspaces } = useWorkspaces({
1171
1171
  enabled: arbi.isLoggedIn && !renderers?.renderWorkspace
@@ -1200,7 +1200,7 @@ function ConnectedNotificationCenter({
1200
1200
  }
1201
1201
  function useNotificationBellEntry({ onOpen } = {}) {
1202
1202
  const defaultOpen = useOpenNotificationTarget();
1203
- const { hrefFor, notify: notify16 } = useBlocksEnvironment();
1203
+ const { hrefFor, notify: notify17 } = useBlocksEnvironment();
1204
1204
  const queryClient = useQueryClient();
1205
1205
  const callsEnabled = useCallsEnabled();
1206
1206
  const openWorkspace = useArbiSessionState((s) => s.workspaceId);
@@ -1216,7 +1216,7 @@ function useNotificationBellEntry({ onOpen } = {}) {
1216
1216
  );
1217
1217
  return serverNotificationBellEntry(row2, {
1218
1218
  open: (target) => void Promise.resolve().then(() => open(target)).catch(
1219
- (error) => notify16(
1219
+ (error) => notify17(
1220
1220
  error instanceof Error ? error.message : "Could not open this notification.",
1221
1221
  "error"
1222
1222
  )
@@ -1227,7 +1227,7 @@ function useNotificationBellEntry({ onOpen } = {}) {
1227
1227
  documentName: (workspaceId, documentId) => workspaceId && workspaceId !== openWorkspace ? void 0 : documentDisplayName(documents?.find((d) => d.external_id === documentId))
1228
1228
  });
1229
1229
  },
1230
- [callsEnabled, queryClient, open, notify16, hrefFor, openWorkspace, documents]
1230
+ [callsEnabled, queryClient, open, notify17, hrefFor, openWorkspace, documents]
1231
1231
  );
1232
1232
  }
1233
1233
  function useConnectedNotificationBell(options2 = {}) {
@@ -1258,7 +1258,7 @@ function useConnectedNotificationBell(options2 = {}) {
1258
1258
  function useNotificationToasts(options2 = {}) {
1259
1259
  const arbi = useArbi();
1260
1260
  const toEntry = useNotificationBellEntry(options2);
1261
- const { notify: notify16 } = useBlocksEnvironment();
1261
+ const { notify: notify17 } = useBlocksEnvironment();
1262
1262
  const me = arbi.isLoggedIn ? arbi.user.identity()?.externalId ?? null : null;
1263
1263
  useArbiWebSocket((message) => {
1264
1264
  if (!isNotificationRow(message)) return;
@@ -1266,7 +1266,7 @@ function useNotificationToasts(options2 = {}) {
1266
1266
  const entry = toEntry(message);
1267
1267
  if (!entry) return;
1268
1268
  const isSelf = message.sender.external_id === message.recipient.external_id;
1269
- notify16(entry.title, entry.variant, {
1269
+ notify17(entry.title, entry.variant, {
1270
1270
  ...isSelf ? {} : { icon: createUserAvatarIcon(message.sender) },
1271
1271
  ...entry.onSelect && {
1272
1272
  action: { label: entry.actionLabel ?? "View", onClick: entry.onSelect }
@@ -1280,7 +1280,7 @@ function ConnectedWorkspaceNotificationMenu({
1280
1280
  workspaceId: workspaceProp,
1281
1281
  ...menuProps
1282
1282
  }) {
1283
- const { notify: notify16 } = useBlocksEnvironment();
1283
+ const { notify: notify17 } = useBlocksEnvironment();
1284
1284
  const { workspaceId: selected, live } = useConnectedWorkspace();
1285
1285
  const workspaceId = workspaceProp ?? selected;
1286
1286
  const { level, setLevel, isLoading, isSaving, error } = useWorkspaceNotificationLevel(
@@ -1288,8 +1288,8 @@ function ConnectedWorkspaceNotificationMenu({
1288
1288
  { enabled: live }
1289
1289
  );
1290
1290
  useEffect(() => {
1291
- if (error) notify16("Could not save the workspace notification setting", "error");
1292
- }, [error, notify16]);
1291
+ if (error) notify17("Could not save the workspace notification setting", "error");
1292
+ }, [error, notify17]);
1293
1293
  if (!workspaceId) return null;
1294
1294
  return /* @__PURE__ */ jsx(
1295
1295
  WorkspaceNotificationMenu,
@@ -1336,7 +1336,7 @@ var DEFAULT_CONNECTED_SKILL_UPLOAD_LABELS = {
1336
1336
  };
1337
1337
  function ConnectedSkillUpload({ onDone, labels, className }) {
1338
1338
  const l = { ...DEFAULT_CONNECTED_SKILL_UPLOAD_LABELS, ...labels };
1339
- const { notify: notify16 } = useBlocksEnvironment();
1339
+ const { notify: notify17 } = useBlocksEnvironment();
1340
1340
  const upload = useUploadSkillFiles();
1341
1341
  const fileRef = useRef(null);
1342
1342
  const [url, setUrl] = useState("");
@@ -1352,11 +1352,11 @@ function ConnectedSkillUpload({ onDone, labels, className }) {
1352
1352
  content: new Blob([e.content], { type: "text/markdown" })
1353
1353
  }))
1354
1354
  );
1355
- notify16(l.added(slug), "success");
1355
+ notify17(l.added(slug), "success");
1356
1356
  setUrl("");
1357
1357
  onDone?.(slug);
1358
1358
  } catch (error) {
1359
- notify16(error instanceof Error && error.message ? error.message : l.failed, "error");
1359
+ notify17(error instanceof Error && error.message ? error.message : l.failed, "error");
1360
1360
  } finally {
1361
1361
  setBusy(false);
1362
1362
  }
@@ -1460,7 +1460,7 @@ function ConnectedSkillsLibrary({
1460
1460
  renderEditor
1461
1461
  }) {
1462
1462
  const arbi = useArbi();
1463
- const { confirm, notify: notify16 } = useBlocksEnvironment();
1463
+ const { confirm, notify: notify17 } = useBlocksEnvironment();
1464
1464
  const { data: listings } = useSkills();
1465
1465
  const save = useSaveSkill();
1466
1466
  const setVisibility = useSetSkillVisibility();
@@ -1516,13 +1516,13 @@ function ConnectedSkillsLibrary({
1516
1516
  const makeCopy = (skill) => busy(async () => {
1517
1517
  try {
1518
1518
  await saveAs(skill.slug, await markdownOf(skill));
1519
- notify16(
1519
+ notify17(
1520
1520
  "Your copy is ready. It is used instead of the original; delete it to go back.",
1521
1521
  "success"
1522
1522
  );
1523
1523
  setSelected(skill.slug);
1524
1524
  } catch (error) {
1525
- notify16(errorText(error, "Could not make a copy"), "error");
1525
+ notify17(errorText(error, "Could not make a copy"), "error");
1526
1526
  }
1527
1527
  });
1528
1528
  const toggleShare = (skill) => {
@@ -1532,9 +1532,9 @@ function ConnectedSkillsLibrary({
1532
1532
  return busy(async () => {
1533
1533
  try {
1534
1534
  await setVisibility.mutateAsync({ docExtId, visibility: next });
1535
- notify16(next === "global" ? "Shared with everyone" : "Made private", "success");
1535
+ notify17(next === "global" ? "Shared with everyone" : "Made private", "success");
1536
1536
  } catch (error) {
1537
- notify16(
1537
+ notify17(
1538
1538
  statusOf(error) === 409 || errorText(error, "").includes("409") ? "Someone has already shared a skill with this name. Rename yours first." : "Could not change who can see this skill",
1539
1539
  "error"
1540
1540
  );
@@ -1552,10 +1552,10 @@ function ConnectedSkillsLibrary({
1552
1552
  await busy(async () => {
1553
1553
  try {
1554
1554
  await deleteSkill.mutateAsync(docExtId);
1555
- notify16(`${skill.title} deleted`, "success");
1555
+ notify17(`${skill.title} deleted`, "success");
1556
1556
  setSelected(null);
1557
1557
  } catch {
1558
- notify16("Could not delete the skill", "error");
1558
+ notify17("Could not delete the skill", "error");
1559
1559
  }
1560
1560
  });
1561
1561
  };
@@ -1566,7 +1566,7 @@ function ConnectedSkillsLibrary({
1566
1566
  SKILL_MAIN_FILENAME
1567
1567
  );
1568
1568
  } catch (error) {
1569
- notify16(errorText(error, "Could not export the skill"), "error");
1569
+ notify17(errorText(error, "Could not export the skill"), "error");
1570
1570
  }
1571
1571
  };
1572
1572
  const rightVisible = mode !== "detail" || current !== null;
@@ -1708,7 +1708,7 @@ function ConnectedSkillsLibrary({
1708
1708
  icon,
1709
1709
  onGenerate: (desc) => {
1710
1710
  onDraft(`/create-skill ${desc}`.trim() + " ");
1711
- notify16("Sent to the chat: the assistant will draft your skill.", "info");
1711
+ notify17("Sent to the chat: the assistant will draft your skill.", "info");
1712
1712
  },
1713
1713
  onManual: () => setMode("edit")
1714
1714
  }
@@ -1721,7 +1721,7 @@ function ConnectedSkillsLibrary({
1721
1721
  renderEditor,
1722
1722
  onSave: async (slug, markdown, isEditing) => {
1723
1723
  await saveAs(slug, markdown, isEditing && !!current?.isShared);
1724
- notify16(isEditing ? `${slug} saved` : `${slug} added`, "success");
1724
+ notify17(isEditing ? `${slug} saved` : `${slug} added`, "success");
1725
1725
  done(slug);
1726
1726
  },
1727
1727
  onCancel: () => done(),
@@ -1761,7 +1761,7 @@ function SkillEditor({
1761
1761
  onCancel,
1762
1762
  isSaving
1763
1763
  }) {
1764
- const { notify: notify16 } = useBlocksEnvironment();
1764
+ const { notify: notify17 } = useBlocksEnvironment();
1765
1765
  const isEditing = !!skill;
1766
1766
  const [name, setName] = useState(skill?.slug ?? "");
1767
1767
  const [description, setDescription] = useState("");
@@ -1780,14 +1780,14 @@ function SkillEditor({
1780
1780
  return;
1781
1781
  }
1782
1782
  if (description.trim().length < 1) {
1783
- notify16("Add a short description.", "error");
1783
+ notify17("Add a short description.", "error");
1784
1784
  return;
1785
1785
  }
1786
1786
  const slug = skillSlug(name);
1787
1787
  try {
1788
1788
  await onSave(slug, serializeSkill({ name: slug, description, body }), isEditing);
1789
1789
  } catch (err) {
1790
- notify16(errorText(err, "Could not save the skill"), "error");
1790
+ notify17(errorText(err, "Could not save the skill"), "error");
1791
1791
  }
1792
1792
  };
1793
1793
  return /* @__PURE__ */ jsx(
@@ -1913,7 +1913,7 @@ function ConnectedAgentCreator({
1913
1913
  canRevokeWorkspaces = false,
1914
1914
  labels
1915
1915
  }) {
1916
- const { notify: notify16 } = useBlocksEnvironment();
1916
+ const { notify: notify17 } = useBlocksEnvironment();
1917
1917
  const isEdit = !!agent;
1918
1918
  const [saving, setSaving] = useState(false);
1919
1919
  const [skills, setSkills] = useState([]);
@@ -1971,7 +1971,7 @@ function ConnectedAgentCreator({
1971
1971
  let agentExtId = agent?.external_id ?? early?.id ?? "";
1972
1972
  if (!agentExtId) {
1973
1973
  if (!isValidAgentName(values.name)) {
1974
- notify16("Give the agent a name first.", "error");
1974
+ notify17("Give the agent a name first.", "error");
1975
1975
  return;
1976
1976
  }
1977
1977
  const res2 = await createAgent.mutateAsync(values.name);
@@ -1985,7 +1985,7 @@ function ConnectedAgentCreator({
1985
1985
  });
1986
1986
  setPicture(res.picture ?? null);
1987
1987
  } catch {
1988
- notify16("Avatar generation failed \u2014 try again.", "error");
1988
+ notify17("Avatar generation failed \u2014 try again.", "error");
1989
1989
  } finally {
1990
1990
  setAvatarBusy(false);
1991
1991
  }
@@ -2017,12 +2017,12 @@ function ConnectedAgentCreator({
2017
2017
  for (const workspaceId of values.workspaceIds.filter((w) => !grantedIds.includes(w))) {
2018
2018
  await grantAccess.mutateAsync({ agentExtId, workspaceId });
2019
2019
  }
2020
- notify16(isEdit ? "Agent updated." : "Agent created.", "success");
2020
+ notify17(isEdit ? "Agent updated." : "Agent created.", "success");
2021
2021
  onSaved?.(agentExtId);
2022
2022
  onOpenChange(false);
2023
2023
  if (created && values.type === "external") setConnect(created);
2024
2024
  } catch (e) {
2025
- notify16(`Saving the agent failed: ${e instanceof Error ? e.message : e}`, "error");
2025
+ notify17(`Saving the agent failed: ${e instanceof Error ? e.message : e}`, "error");
2026
2026
  } finally {
2027
2027
  setSaving(false);
2028
2028
  }
@@ -2041,7 +2041,7 @@ function ConnectedAgentCreator({
2041
2041
  workspaces: workspaces.map((w) => ({ id: w.external_id, name: w.name })),
2042
2042
  grantedWorkspaceIds: grantedIds,
2043
2043
  onRevokeWorkspace: canRevokeWorkspaces && agent ? (workspaceId) => void revokeAccess.mutateAsync({ agentExtId: agent.external_id, workspaceId }).catch(
2044
- (e) => notify16(e instanceof Error ? e.message : String(e), "error")
2044
+ (e) => notify17(e instanceof Error ? e.message : String(e), "error")
2045
2045
  ) : void 0,
2046
2046
  revokingWorkspaceId: revokeAccess.isPending ? revokeAccess.variables?.workspaceId : void 0,
2047
2047
  avatar: (values) => /* @__PURE__ */ jsx(
@@ -2120,7 +2120,7 @@ function useConnectedAgentManagement({
2120
2120
  } = {}) {
2121
2121
  const { data: agents = [], isLoading } = useAgents();
2122
2122
  const deletion = useDeleteAgents();
2123
- const { notify: notify16 } = useBlocksEnvironment();
2123
+ const { notify: notify17 } = useBlocksEnvironment();
2124
2124
  const l = { ...DEFAULT_LABELS, ...labels };
2125
2125
  const [editorOpen, setEditorOpen] = useState(false);
2126
2126
  const [editing, setEditing] = useState(null);
@@ -2144,19 +2144,19 @@ function useConnectedAgentManagement({
2144
2144
  try {
2145
2145
  if (confirmDelete && !await confirmDelete(agent)) return false;
2146
2146
  await deletion.mutateAsync({ agentExtIds: [agent.external_id] });
2147
- notify16(l.deleted(agent), "success");
2147
+ notify17(l.deleted(agent), "success");
2148
2148
  return true;
2149
2149
  } catch (error) {
2150
- notify16(l.deleteFailed(error), "error");
2150
+ notify17(l.deleteFailed(error), "error");
2151
2151
  return false;
2152
2152
  }
2153
2153
  };
2154
2154
  const copyAddress = async (address) => {
2155
2155
  try {
2156
2156
  await navigator.clipboard.writeText(address);
2157
- notify16(l.addressCopied, "success");
2157
+ notify17(l.addressCopied, "success");
2158
2158
  } catch {
2159
- if (l.addressCopyFailed !== null) notify16(l.addressCopyFailed, "error");
2159
+ if (l.addressCopyFailed !== null) notify17(l.addressCopyFailed, "error");
2160
2160
  }
2161
2161
  };
2162
2162
  return {
@@ -2333,7 +2333,7 @@ var DEFAULT_AGENT_CHAT_CARD_LABELS = {
2333
2333
  };
2334
2334
  function AgentChatCard({ agentId, onOpened, labels }) {
2335
2335
  const l = { ...DEFAULT_AGENT_CHAT_CARD_LABELS, ...labels };
2336
- const { notify: notify16, openConversation, openNewConversation, openDirectChat } = useBlocksEnvironment();
2336
+ const { notify: notify17, openConversation, openNewConversation, openDirectChat } = useBlocksEnvironment();
2337
2337
  const sessionStore = useArbiSessionStore();
2338
2338
  const { data: session, refetch: refetchSession, isError } = useAgentSession(agentId);
2339
2339
  const { data: chats4 = [], refetch: refetchChats } = useAgentChats(agentId);
@@ -2351,7 +2351,7 @@ function AgentChatCard({ agentId, onOpened, labels }) {
2351
2351
  try {
2352
2352
  await operation();
2353
2353
  } catch (error) {
2354
- notify16(error instanceof Error ? error.message : l.openFailed, "error");
2354
+ notify17(error instanceof Error ? error.message : l.openFailed, "error");
2355
2355
  } finally {
2356
2356
  setBusy(false);
2357
2357
  void refetchSession();
@@ -2549,7 +2549,7 @@ function useMemoryCount(enabled) {
2549
2549
  return { count: memories.length, isLoading };
2550
2550
  }
2551
2551
  function AgentsTasks({ tasks, isLoading, agents, labels: l, onCompose }) {
2552
- const { notify: notify16, openConversation, openDocument } = useBlocksEnvironment();
2552
+ const { notify: notify17, openConversation, openDocument } = useBlocksEnvironment();
2553
2553
  const people = useTaskPeople();
2554
2554
  const canEditShared = useCanEditShared();
2555
2555
  const isWorkspaceOwner = useIsWorkspaceOwner();
@@ -2560,7 +2560,7 @@ function AgentsTasks({ tasks, isLoading, agents, labels: l, onCompose }) {
2560
2560
  const deleteTask = useDeleteConversation();
2561
2561
  const [activityFor, setActivityFor] = useState(null);
2562
2562
  const report = (operation) => void operation.catch(
2563
- (e) => notify16(e instanceof Error ? e.message : String(e), "error")
2563
+ (e) => notify17(e instanceof Error ? e.message : String(e), "error")
2564
2564
  );
2565
2565
  const patch = (task, change) => updateTask.mutateAsync({ conversationId: task.external_id, patch: change });
2566
2566
  const outputsByTask = useMemo(() => {
@@ -2622,7 +2622,7 @@ function AgentsLauncher({
2622
2622
  labels: l,
2623
2623
  testId
2624
2624
  }) {
2625
- const { notify: notify16, openConversation } = useBlocksEnvironment();
2625
+ const { notify: notify17, openConversation } = useBlocksEnvironment();
2626
2626
  const { workspaceId, ensureWorkspaceOpen } = useConnectedWorkspace();
2627
2627
  const { data: skills = [] } = useSkills({ enabled: includeSkills && !!workspaceId, live: true });
2628
2628
  const workflowTasks = useWorkflowTasks();
@@ -2662,9 +2662,9 @@ function AgentsLauncher({
2662
2662
  const created = await workflowTasks.create({ workflow, values });
2663
2663
  if (created.kind !== "work" || !created.task.external_id) throw new Error(l.launchNotNow);
2664
2664
  openConversation(created.task.external_id);
2665
- notify16(l.launchStarted(created.task.title || workflow.title), "success");
2665
+ notify17(l.launchStarted(created.task.title || workflow.title), "success");
2666
2666
  } catch (e) {
2667
- notify16(l.launchFailed(e instanceof Error ? e.message : String(e)), "error");
2667
+ notify17(l.launchFailed(e instanceof Error ? e.message : String(e)), "error");
2668
2668
  throw e;
2669
2669
  }
2670
2670
  };
@@ -3203,7 +3203,7 @@ function ConnectedTagTable({
3203
3203
  ...props
3204
3204
  }) {
3205
3205
  const arbi = useArbi();
3206
- const { notify: notify16 } = useBlocksEnvironment();
3206
+ const { notify: notify17 } = useBlocksEnvironment();
3207
3207
  const workspaceId = arbi.hasWorkspace ? arbi.getWorkspaceId() : void 0;
3208
3208
  const schema = useTagKindSchema(kind);
3209
3209
  const rows = useTags(workspaceId, {
@@ -3234,7 +3234,7 @@ function ConnectedTagTable({
3234
3234
  )
3235
3235
  };
3236
3236
  }, [schema.data, rows.data, filter, linksLimit, allTags]);
3237
- const fail2 = (fallback) => (e) => notify16(refusalReason(e, fallback), "error");
3237
+ const fail2 = (fallback) => (e) => notify17(refusalReason(e, fallback), "error");
3238
3238
  const snapshot2 = (data) => {
3239
3239
  const title = exportTitle ?? tagKindTitle(kind, { plural: true });
3240
3240
  const bytes = tagTableDocx(data, {
@@ -3664,7 +3664,7 @@ function ConnectedTagEditorDialog({
3664
3664
  tags,
3665
3665
  onCreated
3666
3666
  }) {
3667
- const { notify: notify16 } = useBlocksEnvironment();
3667
+ const { notify: notify17 } = useBlocksEnvironment();
3668
3668
  const createTag = useCreateTag();
3669
3669
  const updateTag = useUpdateTag();
3670
3670
  const [error, setError] = useState(null);
@@ -3684,7 +3684,7 @@ function ConnectedTagEditorDialog({
3684
3684
  instruction: data.instruction,
3685
3685
  parentId: data.parent_ext_id ?? null
3686
3686
  });
3687
- notify16(`Created ${tagKindNouns(data.kind).singular} "${data.name}"`, "success");
3687
+ notify17(`Created ${tagKindNouns(data.kind).singular} "${data.name}"`, "success");
3688
3688
  close();
3689
3689
  onCreated?.(created.external_id, data.kind);
3690
3690
  } catch (e) {
@@ -3706,7 +3706,7 @@ function ConnectedTagEditorDialog({
3706
3706
  ...data.parent_ext_id ? { parent_ext_id: data.parent_ext_id } : {}
3707
3707
  }
3708
3708
  });
3709
- notify16(`Saved "${data.name}"`, "success");
3709
+ notify17(`Saved "${data.name}"`, "success");
3710
3710
  close();
3711
3711
  } catch (e) {
3712
3712
  setError(refusalReason(e, `Could not save "${data.name}"`));
@@ -3981,11 +3981,11 @@ function TagSection({
3981
3981
  renderPassages,
3982
3982
  picker
3983
3983
  }) {
3984
- const { notify: notify16, openDocument, openConversation } = useBlocksEnvironment();
3984
+ const { notify: notify17, openDocument, openConversation } = useBlocksEnvironment();
3985
3985
  const { people, tagOptions } = useTagValueOptions();
3986
3986
  const setValues = useSetTagValues();
3987
3987
  const update = useUpdateTag();
3988
- const updateTag = (change, done) => update.mutateAsync({ tagId: tag.external_id, change }).then(() => notify16(done, "success")).catch((e) => notify16(refusalReason(e, `Could not change "${tag.name}"`), "error"));
3988
+ const updateTag = (change, done) => update.mutateAsync({ tagId: tag.external_id, change }).then(() => notify17(done, "success")).catch((e) => notify17(refusalReason(e, `Could not change "${tag.name}"`), "error"));
3989
3989
  const hasRows = !isFlatKind(tag.kind) && getChildTags([...tags], tag.external_id).length > 0;
3990
3990
  const schema = useTagKindSchema(tag.kind);
3991
3991
  const detail = useTags(void 0, {
@@ -4077,7 +4077,7 @@ function TagSection({
4077
4077
  people,
4078
4078
  tags: tagOptions,
4079
4079
  onOpenTag: ctx.onOpenTag,
4080
- onChangeValue: (id, fieldId, value) => setValues.mutateAsync({ tagId: id, values: { [fieldId]: value } }).catch((e) => notify16(refusalReason(e, "Could not save the value"), "error")),
4080
+ onChangeValue: (id, fieldId, value) => setValues.mutateAsync({ tagId: id, values: { [fieldId]: value } }).catch((e) => notify17(refusalReason(e, "Could not save the value"), "error")),
4081
4081
  onOpenDocument: (id) => openDocument(id),
4082
4082
  onOpenFact: ctx.onOpenFact,
4083
4083
  onOpenThread: (id) => openConversation(id),
@@ -4109,7 +4109,7 @@ function ConnectedTagsPage({
4109
4109
  onOpenSmartSearch,
4110
4110
  onReview
4111
4111
  }) {
4112
- const { confirm, notify: notify16 } = useBlocksEnvironment();
4112
+ const { confirm, notify: notify17 } = useBlocksEnvironment();
4113
4113
  const { data: tags } = useConnectedTags();
4114
4114
  const { data: documents } = useConnectedDocuments();
4115
4115
  const { data: threads } = useConnectedConversations();
@@ -4166,7 +4166,7 @@ function ConnectedTagsPage({
4166
4166
  });
4167
4167
  setTagId(created.external_id);
4168
4168
  } catch (error) {
4169
- notify16(refusalReason(error, `Could not add "${name}"`), "error");
4169
+ notify17(refusalReason(error, `Could not add "${name}"`), "error");
4170
4170
  }
4171
4171
  };
4172
4172
  const onDelete = async (t) => {
@@ -4183,21 +4183,21 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
4183
4183
  if (!await confirm({ message, title: `Delete ${tagKindNouns(t.kind).singular}` })) return;
4184
4184
  try {
4185
4185
  await deleteTag.mutateAsync(t.external_id);
4186
- notify16(`Deleted "${t.name}"`, "success");
4186
+ notify17(`Deleted "${t.name}"`, "success");
4187
4187
  setTagId(null);
4188
4188
  } catch (error) {
4189
- notify16(refusalReason(error, `Could not delete "${t.name}"`), "error");
4189
+ notify17(refusalReason(error, `Could not delete "${t.name}"`), "error");
4190
4190
  }
4191
4191
  };
4192
4192
  const onExtract = async (docIds) => {
4193
4193
  try {
4194
4194
  await extract.mutateAsync(docIds);
4195
- notify16(
4195
+ notify17(
4196
4196
  `Extracting ${entitiesPhrase().toLowerCase()} from ${documentCount(docIds.length)}. You will be notified when it is done.`,
4197
4197
  "info"
4198
4198
  );
4199
4199
  } catch (error) {
4200
- notify16(refusalReason(error, `Could not extract ${entitiesPhrase().toLowerCase()}`), "error");
4200
+ notify17(refusalReason(error, `Could not extract ${entitiesPhrase().toLowerCase()}`), "error");
4201
4201
  throw error;
4202
4202
  }
4203
4203
  };
@@ -4375,7 +4375,7 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
4375
4375
  onOpenChange: setExtracting,
4376
4376
  documents,
4377
4377
  onExtract,
4378
- onTooMany: (message) => notify16(message, "info"),
4378
+ onTooMany: (message) => notify17(message, "info"),
4379
4379
  isPending: extract.isPending
4380
4380
  }
4381
4381
  )
@@ -4660,7 +4660,7 @@ var factNouns = () => ({
4660
4660
  });
4661
4661
  var INLINE_DATE_RE = /^\d{4}(-\d{2})?(-\d{2})?$/;
4662
4662
  function useFactActions(refetch) {
4663
- const { confirm, notify: notify16 } = useBlocksEnvironment();
4663
+ const { confirm, notify: notify17 } = useBlocksEnvironment();
4664
4664
  const FACT_LABELS = useMemo(factNouns, []);
4665
4665
  const updateFact = useUpdateFact();
4666
4666
  const deleteFact = useDeleteFact();
@@ -4670,25 +4670,25 @@ function useFactActions(refetch) {
4670
4670
  async (m) => {
4671
4671
  try {
4672
4672
  await updateFactAsync({ factId: m.external_id, patch: { shared: !m.shared } });
4673
- notify16(
4673
+ notify17(
4674
4674
  m.shared ? `${FACT_LABELS.SINGULAR} made private to you` : `${FACT_LABELS.SINGULAR} shared with this workspace`,
4675
4675
  "success"
4676
4676
  );
4677
4677
  } catch (err) {
4678
- notify16(refusalReason(err, "Could not change sharing"), "error");
4678
+ notify17(refusalReason(err, "Could not change sharing"), "error");
4679
4679
  }
4680
4680
  },
4681
- [updateFactAsync, notify16, FACT_LABELS]
4681
+ [updateFactAsync, notify17, FACT_LABELS]
4682
4682
  );
4683
4683
  const toggleConfirmed = useCallback(
4684
4684
  async (m) => {
4685
4685
  try {
4686
4686
  await updateFactAsync({ factId: m.external_id, patch: { confirmed: !m.confirmed } });
4687
4687
  } catch (err) {
4688
- notify16(refusalReason(err, "Could not change confirmation"), "error");
4688
+ notify17(refusalReason(err, "Could not change confirmation"), "error");
4689
4689
  }
4690
4690
  },
4691
- [updateFactAsync, notify16]
4691
+ [updateFactAsync, notify17]
4692
4692
  );
4693
4693
  const remove = useCallback(
4694
4694
  async (m) => {
@@ -4699,10 +4699,10 @@ function useFactActions(refetch) {
4699
4699
  if (!ok) return false;
4700
4700
  try {
4701
4701
  await deleteFactAsync(m.external_id);
4702
- notify16(`${FACT_LABELS.SINGULAR} deleted`, "success");
4702
+ notify17(`${FACT_LABELS.SINGULAR} deleted`, "success");
4703
4703
  return true;
4704
4704
  } catch (err) {
4705
- notify16(
4705
+ notify17(
4706
4706
  refusalReason(
4707
4707
  err,
4708
4708
  `Could not delete ${FACT_LABELS.SINGULAR.toLowerCase()} (you may not have permission)`
@@ -4712,7 +4712,7 @@ function useFactActions(refetch) {
4712
4712
  return false;
4713
4713
  }
4714
4714
  },
4715
- [deleteFactAsync, confirm, notify16, FACT_LABELS]
4715
+ [deleteFactAsync, confirm, notify17, FACT_LABELS]
4716
4716
  );
4717
4717
  const handleCellValueChanged = useCallback(
4718
4718
  async (event) => {
@@ -4728,9 +4728,9 @@ function useFactActions(refetch) {
4728
4728
  }
4729
4729
  try {
4730
4730
  await updateFactAsync({ factId: m.external_id, patch: { text: text2 } });
4731
- notify16(`${FACT_LABELS.SINGULAR} updated`, "success");
4731
+ notify17(`${FACT_LABELS.SINGULAR} updated`, "success");
4732
4732
  } catch (err) {
4733
- notify16(
4733
+ notify17(
4734
4734
  refusalReason(err, `Could not update ${FACT_LABELS.SINGULAR.toLowerCase()}`),
4735
4735
  "error"
4736
4736
  );
@@ -4741,7 +4741,7 @@ function useFactActions(refetch) {
4741
4741
  if (colId === "date") {
4742
4742
  const raw = String(event.newValue ?? "").trim();
4743
4743
  if (raw && !INLINE_DATE_RE.test(raw)) {
4744
- notify16("Use YYYY, YYYY-MM or YYYY-MM-DD (or clear the cell)", "error");
4744
+ notify17("Use YYYY, YYYY-MM or YYYY-MM-DD (or clear the cell)", "error");
4745
4745
  revert();
4746
4746
  return;
4747
4747
  }
@@ -4750,24 +4750,24 @@ function useFactActions(refetch) {
4750
4750
  factId: m.external_id,
4751
4751
  patch: { date: raw || null, date_end: null, timezone: null }
4752
4752
  });
4753
- notify16(raw ? "Date updated" : "Date cleared", "success");
4753
+ notify17(raw ? "Date updated" : "Date cleared", "success");
4754
4754
  } catch (err) {
4755
- notify16(refusalReason(err, "Could not update date"), "error");
4755
+ notify17(refusalReason(err, "Could not update date"), "error");
4756
4756
  revert();
4757
4757
  }
4758
4758
  }
4759
4759
  },
4760
- [updateFactAsync, refetch, notify16, FACT_LABELS]
4760
+ [updateFactAsync, refetch, notify17, FACT_LABELS]
4761
4761
  );
4762
4762
  const setFactTags = useCallback(
4763
4763
  async (fact, tagExtIds) => {
4764
4764
  try {
4765
4765
  await updateFactAsync({ factId: fact.external_id, patch: { tag_ext_ids: tagExtIds } });
4766
4766
  } catch (err) {
4767
- notify16(refusalReason(err, "Could not update labels"), "error");
4767
+ notify17(refusalReason(err, "Could not update labels"), "error");
4768
4768
  }
4769
4769
  },
4770
- [updateFactAsync, notify16]
4770
+ [updateFactAsync, notify17]
4771
4771
  );
4772
4772
  return {
4773
4773
  toggleShared,
@@ -4780,7 +4780,7 @@ function useFactActions(refetch) {
4780
4780
  }
4781
4781
  var DRAFT_TARGET = "__draft__";
4782
4782
  function useFactComposer(notes, remove, gridApiRef, collector, composeRequested, onComposeHandled) {
4783
- const { notify: notify16, openDocument } = useBlocksEnvironment();
4783
+ const { notify: notify17, openDocument } = useBlocksEnvironment();
4784
4784
  const FACT_LABELS = useMemo(factNouns, []);
4785
4785
  const createFact = useCreateFact();
4786
4786
  const updateFact = useUpdateFact();
@@ -4913,7 +4913,7 @@ function useFactComposer(notes, remove, gridApiRef, collector, composeRequested,
4913
4913
  timezone: span.timezone
4914
4914
  }
4915
4915
  });
4916
- notify16(`${FACT_LABELS.SINGULAR} updated`, "success");
4916
+ notify17(`${FACT_LABELS.SINGULAR} updated`, "success");
4917
4917
  } else {
4918
4918
  saved = await createFact.mutateAsync({
4919
4919
  text: content,
@@ -4927,7 +4927,7 @@ function useFactComposer(notes, remove, gridApiRef, collector, composeRequested,
4927
4927
  date_end: span.date_end,
4928
4928
  timezone: span.timezone
4929
4929
  });
4930
- notify16(`${FACT_LABELS.SINGULAR} added`, "success");
4930
+ notify17(`${FACT_LABELS.SINGULAR} added`, "success");
4931
4931
  }
4932
4932
  if (saved?.external_id) {
4933
4933
  setEditingId(saved.external_id);
@@ -5211,7 +5211,7 @@ function useFactFilters(notes, view, chat) {
5211
5211
  }
5212
5212
  var NO_IDS2 = [];
5213
5213
  function useFactSelection(notes, gridApiRef, setFactTags, chat) {
5214
- const { confirm, notify: notify16 } = useBlocksEnvironment();
5214
+ const { confirm, notify: notify17 } = useBlocksEnvironment();
5215
5215
  const FACT_LABELS = useMemo(factNouns, []);
5216
5216
  const updateFact = useUpdateFact();
5217
5217
  const deleteFact = useDeleteFact();
@@ -5243,16 +5243,16 @@ function useFactSelection(notes, gridApiRef, setFactTags, chat) {
5243
5243
  );
5244
5244
  const failed = results.filter((r) => r.status === "rejected").length;
5245
5245
  if (failed === 0) {
5246
- notify16(`Deleted ${count2} ${label}`, "success");
5246
+ notify17(`Deleted ${count2} ${label}`, "success");
5247
5247
  } else {
5248
- notify16(
5248
+ notify17(
5249
5249
  `Deleted ${count2 - failed} of ${count2} ${label} \u2014 ${failed} failed (you may not have permission)`,
5250
5250
  "error"
5251
5251
  );
5252
5252
  }
5253
5253
  setSelectedFacts([]);
5254
5254
  gridApiRef.current?.deselectAll();
5255
- }, [selectedFacts, deleteFact, gridApiRef, confirm, notify16, FACT_LABELS]);
5255
+ }, [selectedFacts, deleteFact, gridApiRef, confirm, notify17, FACT_LABELS]);
5256
5256
  const freshSelectedFacts = useMemo(() => {
5257
5257
  const ids = new Set(selectedFacts.map((m) => m.external_id));
5258
5258
  return notes.filter((n) => ids.has(n.external_id));
@@ -5306,15 +5306,15 @@ function useFactSelection(notes, gridApiRef, setFactTags, chat) {
5306
5306
  const failed = results.filter((r) => r.status === "rejected").length;
5307
5307
  const verb = shouldShare ? "Shared" : "Made private";
5308
5308
  if (failed === 0) {
5309
- notify16(
5309
+ notify17(
5310
5310
  shouldShare ? `Shared ${count2} ${label} with this workspace` : `Made ${count2} ${label} private to you`,
5311
5311
  "success"
5312
5312
  );
5313
5313
  } else {
5314
- notify16(`${verb} ${count2 - failed} of ${count2} ${label} \u2014 ${failed} failed`, "error");
5314
+ notify17(`${verb} ${count2 - failed} of ${count2} ${label} \u2014 ${failed} failed`, "error");
5315
5315
  }
5316
5316
  },
5317
- [freshSelectedFacts, updateFact, notify16, FACT_LABELS]
5317
+ [freshSelectedFacts, updateFact, notify17, FACT_LABELS]
5318
5318
  );
5319
5319
  const exportItems = useMemo(
5320
5320
  () => selectedFacts.map((m) => ({
@@ -5826,7 +5826,7 @@ function ConnectedExportPanel({
5826
5826
  downloadMode,
5827
5827
  initialMode
5828
5828
  }) {
5829
- const { notify: notify16 } = useBlocksEnvironment();
5829
+ const { notify: notify17 } = useBlocksEnvironment();
5830
5830
  const { workspaceId: currentWorkspaceId, userId, user, live } = useConnectedWorkspace();
5831
5831
  const { data: workspaces = [] } = useWorkspaces({ enabled: live });
5832
5832
  const { data: workspaceTags = [] } = useTags(currentWorkspaceId ?? void 0);
@@ -5895,7 +5895,7 @@ function ConnectedExportPanel({
5895
5895
  }, [job]);
5896
5896
  const failure = (error, fallback) => {
5897
5897
  const detail = error?.detail;
5898
- notify16(typeof detail === "string" ? detail : fallback, "error");
5898
+ notify17(typeof detail === "string" ? detail : fallback, "error");
5899
5899
  };
5900
5900
  const handleSubmit = async () => {
5901
5901
  if (mode === "download") {
@@ -5927,7 +5927,7 @@ function ConnectedExportPanel({
5927
5927
  };
5928
5928
  const handleResume = async (target) => {
5929
5929
  if (!target.target_workspace_ext_id) {
5930
- notify16("Unable to access the target workspace. Please try again.", "error");
5930
+ notify17("Unable to access the target workspace. Please try again.", "error");
5931
5931
  return;
5932
5932
  }
5933
5933
  try {
@@ -6218,7 +6218,7 @@ function ConnectedFactsPage({
6218
6218
  renderSmartSearch,
6219
6219
  emptyStateExtra
6220
6220
  }) {
6221
- const { notify: notify16 } = useBlocksEnvironment();
6221
+ const { notify: notify17 } = useBlocksEnvironment();
6222
6222
  const FACT_LABELS = useMemo(factNouns, []);
6223
6223
  const ownView = useFactsPageView();
6224
6224
  const pageView = hostView ?? ownView;
@@ -6253,7 +6253,7 @@ function ConnectedFactsPage({
6253
6253
  const filters = useFactFilters(notes, pageView, chat);
6254
6254
  const openEditIfAllowed = (fact) => {
6255
6255
  if (!canRewrite(fact.created_by_ext_id)) {
6256
- notify16(
6256
+ notify17(
6257
6257
  "Only the creator or a workspace owner can reword this fact. You can still add it to the chat, label and confirm it.",
6258
6258
  "warning"
6259
6259
  );
@@ -6639,7 +6639,7 @@ function ConnectedProfileCard({
6639
6639
  nameBadge,
6640
6640
  children
6641
6641
  }) {
6642
- const { notify: notify16 } = useBlocksEnvironment();
6642
+ const { notify: notify17 } = useBlocksEnvironment();
6643
6643
  const { data: profile } = useProfile();
6644
6644
  const updateProfile = useUpdateProfile();
6645
6645
  const requestEmailChange = useRequestEmailChange();
@@ -6650,9 +6650,9 @@ function ConnectedProfileCard({
6650
6650
  save: async (next) => {
6651
6651
  try {
6652
6652
  await updateProfile.mutateAsync(next);
6653
- notify16("Name updated", "success");
6653
+ notify17("Name updated", "success");
6654
6654
  } catch (e) {
6655
- notify16("Failed to update name", "error");
6655
+ notify17("Failed to update name", "error");
6656
6656
  throw e;
6657
6657
  }
6658
6658
  }
@@ -6661,30 +6661,30 @@ function ConnectedProfileCard({
6661
6661
  upload: async (picture) => {
6662
6662
  try {
6663
6663
  await updateProfile.mutateAsync({ picture });
6664
- notify16("Profile picture updated", "success");
6664
+ notify17("Profile picture updated", "success");
6665
6665
  } catch (e) {
6666
- notify16("Failed to update picture", "error");
6666
+ notify17("Failed to update picture", "error");
6667
6667
  throw e;
6668
6668
  }
6669
6669
  },
6670
- onProblem: (problem) => notify16(AVATAR_PROBLEMS[problem], "error")
6670
+ onProblem: (problem) => notify17(AVATAR_PROBLEMS[problem], "error")
6671
6671
  });
6672
6672
  const email = useEmailChange({
6673
6673
  requestCode: async (address) => {
6674
6674
  try {
6675
6675
  await requestEmailChange.mutateAsync(address);
6676
- notify16("Verification code sent to your new email", "success");
6676
+ notify17("Verification code sent to your new email", "success");
6677
6677
  } catch (e) {
6678
- notify16(errorText2(e, "Failed to send verification code"), "error");
6678
+ notify17(errorText2(e, "Failed to send verification code"), "error");
6679
6679
  throw e;
6680
6680
  }
6681
6681
  },
6682
6682
  confirm: async (args) => {
6683
6683
  try {
6684
6684
  await confirmEmailChange.mutateAsync(args);
6685
- notify16("Email address updated", "success");
6685
+ notify17("Email address updated", "success");
6686
6686
  } catch (e) {
6687
- notify16(errorText2(e, "Invalid or expired verification code"), "error");
6687
+ notify17(errorText2(e, "Invalid or expired verification code"), "error");
6688
6688
  throw e;
6689
6689
  }
6690
6690
  }
@@ -6737,12 +6737,12 @@ function ConnectedIdentityVerification({
6737
6737
  onManageBilling,
6738
6738
  formatPrice
6739
6739
  }) {
6740
- const { notify: notify16 } = useBlocksEnvironment();
6740
+ const { notify: notify17 } = useBlocksEnvironment();
6741
6741
  const { data: profile } = useProfile();
6742
6742
  const flow = useIdentityVerification({
6743
6743
  formatPrice,
6744
- onVerifiedChange: (verified) => notify16(verified ? "Identity verified" : "Verified tick removed", "success"),
6745
- onNameAccepted: () => notify16("Name updated to match your ID", "success")
6744
+ onVerifiedChange: (verified) => notify17(verified ? "Identity verified" : "Verified tick removed", "success"),
6745
+ onNameAccepted: () => notify17("Name updated to match your ID", "success")
6746
6746
  });
6747
6747
  return /* @__PURE__ */ jsxs(Fragment, { children: [
6748
6748
  /* @__PURE__ */ jsx(
@@ -6776,7 +6776,7 @@ function ConnectedPasswordChangeDialog({
6776
6776
  recoveryMode = false,
6777
6777
  onRecoveryComplete
6778
6778
  }) {
6779
- const { notify: notify16 } = useBlocksEnvironment();
6779
+ const { notify: notify17 } = useBlocksEnvironment();
6780
6780
  const getUnmetRequirement = useAuthPages().passwordRules.unmet;
6781
6781
  const change = usePasswordChange();
6782
6782
  const form = usePasswordChangeForm({
@@ -6784,7 +6784,7 @@ function ConnectedPasswordChangeDialog({
6784
6784
  getUnmetRequirement,
6785
6785
  submit: async (vars) => {
6786
6786
  await change.mutateAsync(vars);
6787
- notify16(
6787
+ notify17(
6788
6788
  recoveryMode ? "Account recovered and password set successfully" : "Password changed successfully",
6789
6789
  "success"
6790
6790
  );
@@ -6857,7 +6857,7 @@ function ConnectedNotificationPreferences({
6857
6857
  function ConnectedSessionsRow({
6858
6858
  renderSessionIcon = renderSessionStatusIcon
6859
6859
  }) {
6860
- const { notify: notify16, confirm } = useBlocksEnvironment();
6860
+ const { notify: notify17, confirm } = useBlocksEnvironment();
6861
6861
  const [open, setOpen] = useState(false);
6862
6862
  const sessions = useSessions({ enabled: open });
6863
6863
  const currentSessionId = useCurrentSessionId();
@@ -6909,7 +6909,7 @@ function ConnectedSessionsRow({
6909
6909
  try {
6910
6910
  await terminate.mutateAsync(id);
6911
6911
  } catch {
6912
- notify16("Failed to end session. Please try again.", "error");
6912
+ notify17("Failed to end session. Please try again.", "error");
6913
6913
  }
6914
6914
  })();
6915
6915
  }
@@ -6948,7 +6948,7 @@ function ConnectedLogoutDialog({
6948
6948
  );
6949
6949
  }
6950
6950
  function ConnectedDangerZone({ renderSubscriptionLink }) {
6951
- const { notify: notify16 } = useBlocksEnvironment();
6951
+ const { notify: notify17 } = useBlocksEnvironment();
6952
6952
  const [zoneOpen, setZoneOpen] = useState(false);
6953
6953
  const [dialogOpen, setDialogOpen] = useState(false);
6954
6954
  const { data: profile } = useProfile();
@@ -6960,7 +6960,7 @@ function ConnectedDangerZone({ renderSubscriptionLink }) {
6960
6960
  remove: () => remove.mutateAsync(),
6961
6961
  onClose: () => setDialogOpen(false),
6962
6962
  onDeleted: () => signOut.mutate({ reason: "account-deleted" }),
6963
- onError: () => notify16("Failed to delete account. Please try again.", "error")
6963
+ onError: () => notify17("Failed to delete account. Please try again.", "error")
6964
6964
  });
6965
6965
  return /* @__PURE__ */ jsxs(Fragment, { children: [
6966
6966
  /* @__PURE__ */ jsx(
@@ -7005,7 +7005,7 @@ function ConnectedSsoDisconnect() {
7005
7005
  const { client } = useAccountClient();
7006
7006
  const { data: profile } = useProfile();
7007
7007
  const auth = useAuthPages();
7008
- const { notify: notify16 } = useBlocksEnvironment();
7008
+ const { notify: notify17 } = useBlocksEnvironment();
7009
7009
  const [open, setOpen] = useState(false);
7010
7010
  const [step, setStep] = useState("email");
7011
7011
  const [email, setEmail] = useState("");
@@ -7039,7 +7039,7 @@ function ConnectedSsoDisconnect() {
7039
7039
  password
7040
7040
  });
7041
7041
  close();
7042
- notify16("SSO disconnected. Use your email and master password to sign in.", "success");
7042
+ notify17("SSO disconnected. Use your email and master password to sign in.", "success");
7043
7043
  }
7044
7044
  } catch (e) {
7045
7045
  setError(e instanceof Error ? e.message : "Could not disconnect SSO. Please try again.");
@@ -7600,7 +7600,7 @@ var COLUMNS = [
7600
7600
  }
7601
7601
  ];
7602
7602
  function ConnectedPremiumModels() {
7603
- const { notify: notify16 } = useBlocksEnvironment();
7603
+ const { notify: notify17 } = useBlocksEnvironment();
7604
7604
  const { data: settings } = useUserSettings();
7605
7605
  const update = useUpdateUserSettings();
7606
7606
  const { data: available } = useAvailableModels();
@@ -7626,10 +7626,10 @@ function ConnectedPremiumModels() {
7626
7626
  (model) => update.mutate(
7627
7627
  { premium_model: model },
7628
7628
  {
7629
- onError: (err) => notify16(`Failed to update Premium setting: ${String(err)}`, "error")
7629
+ onError: (err) => notify17(`Failed to update Premium setting: ${String(err)}`, "error")
7630
7630
  }
7631
7631
  ),
7632
- [update, notify16]
7632
+ [update, notify17]
7633
7633
  );
7634
7634
  const currentRef = useRef(current);
7635
7635
  currentRef.current = current;
@@ -7676,6 +7676,205 @@ function ConnectedPremiumModels() {
7676
7676
  }
7677
7677
  ) }) }) });
7678
7678
  }
7679
+ var DEFAULT_CONTEXT_WINDOW = 32768;
7680
+ function ConnectedModelConnectionsSettings() {
7681
+ const list = useModelConnections();
7682
+ const usage = useDirectModelUsage();
7683
+ const save = useSaveModelConnection();
7684
+ const remove = useRemoveModelConnection();
7685
+ const unlock = useUnlockModelConnections();
7686
+ const [editing, setEditing] = useState(null);
7687
+ const [name, setName] = useState("");
7688
+ const [url, setUrl] = useState("");
7689
+ const [apiKey, setApiKey] = useState("");
7690
+ const [models, setModels] = useState("");
7691
+ const [contextWindow, setContextWindow] = useState(DEFAULT_CONTEXT_WINDOW);
7692
+ const [enabled, setEnabled] = useState(true);
7693
+ const [notice, setNotice] = useState("");
7694
+ const reset = () => {
7695
+ setEditing(null);
7696
+ setName("");
7697
+ setUrl("");
7698
+ setApiKey("");
7699
+ setModels("");
7700
+ setEnabled(true);
7701
+ setContextWindow(DEFAULT_CONTEXT_WINDOW);
7702
+ };
7703
+ const submit = () => save.mutate(
7704
+ {
7705
+ id: editing?.id,
7706
+ name,
7707
+ base_url: url,
7708
+ enabled,
7709
+ models: models.split("\n").map((m) => m.trim()).filter(Boolean).map((model) => ({
7710
+ model,
7711
+ label: model,
7712
+ context_window: contextWindow,
7713
+ supports_vision: false
7714
+ })),
7715
+ ...apiKey ? { apiKey } : {}
7716
+ },
7717
+ {
7718
+ onSuccess: () => {
7719
+ reset();
7720
+ setNotice("Connection saved. Select its model in the model picker.");
7721
+ },
7722
+ // The key is never kept in the form once it has been sent.
7723
+ onSettled: () => setApiKey("")
7724
+ }
7725
+ );
7726
+ const error = save.error ?? remove.error ?? unlock.error ?? list.error;
7727
+ return /* @__PURE__ */ jsxs("div", { className: "max-w-2xl space-y-5", "data-testid": "model-connections-settings", children: [
7728
+ /* @__PURE__ */ jsxs("div", { children: [
7729
+ /* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold", children: "Model connections" }),
7730
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: "Add OpenAI-compatible Chat Completions endpoints for your main agent. Your API keys are encrypted to your identity. The box decrypts a session copy only when making requests." }),
7731
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: "Main-agent usage is billed separately by your provider. Supporting ARBI models retain their normal charges." })
7732
+ ] }),
7733
+ error && /* @__PURE__ */ jsx("p", { role: "alert", children: refusalReason(error, error.message) }),
7734
+ notice && /* @__PURE__ */ jsx("p", { role: "status", children: notice }),
7735
+ /* @__PURE__ */ jsx(
7736
+ Button,
7737
+ {
7738
+ variant: "outline",
7739
+ disabled: unlock.isPending,
7740
+ onClick: () => unlock.mutate(void 0, {
7741
+ onSuccess: () => setNotice("Personal connections unlocked for this session.")
7742
+ }),
7743
+ children: "Unlock personal connections"
7744
+ }
7745
+ ),
7746
+ list.isLoading && /* @__PURE__ */ jsx("p", { children: "Loading connections\u2026" }),
7747
+ /* @__PURE__ */ jsx("ul", { className: "space-y-2", children: list.data?.map((row2) => /* @__PURE__ */ jsxs("li", { className: "rounded border p-3", children: [
7748
+ /* @__PURE__ */ jsx("strong", { children: row2.name }),
7749
+ " ",
7750
+ /* @__PURE__ */ jsxs("span", { className: "text-sm", children: [
7751
+ row2.scope === "box" ? "Provided by this box" : "Personal \xB7 billed separately",
7752
+ !row2.enabled && " \xB7 Disabled"
7753
+ ] }),
7754
+ /* @__PURE__ */ jsx("p", { className: "text-sm", children: row2.models.map((m) => m.label).join(", ") }),
7755
+ row2.scope === "personal" && /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
7756
+ /* @__PURE__ */ jsx(
7757
+ Button,
7758
+ {
7759
+ variant: "outline",
7760
+ onClick: () => {
7761
+ setEditing(row2);
7762
+ setName(row2.name);
7763
+ setUrl(row2.base_url);
7764
+ setModels(row2.models.map((m) => m.model).join("\n"));
7765
+ setEnabled(row2.enabled);
7766
+ setApiKey("");
7767
+ setContextWindow(row2.models[0]?.context_window ?? DEFAULT_CONTEXT_WINDOW);
7768
+ },
7769
+ children: "Edit"
7770
+ }
7771
+ ),
7772
+ /* @__PURE__ */ jsx(
7773
+ Button,
7774
+ {
7775
+ variant: "outline",
7776
+ disabled: remove.isPending,
7777
+ onClick: () => remove.mutate(row2.id),
7778
+ children: "Remove"
7779
+ }
7780
+ )
7781
+ ] })
7782
+ ] }, row2.id)) }),
7783
+ /* @__PURE__ */ jsxs(
7784
+ "form",
7785
+ {
7786
+ className: "space-y-3 rounded border p-4",
7787
+ onSubmit: (event) => {
7788
+ event.preventDefault();
7789
+ submit();
7790
+ },
7791
+ children: [
7792
+ /* @__PURE__ */ jsx("h3", { className: "font-semibold", children: editing ? "Edit personal connection" : "Add personal connection" }),
7793
+ /* @__PURE__ */ jsx(Label, { htmlFor: "connection-name", children: "Name" }),
7794
+ /* @__PURE__ */ jsx(
7795
+ Input,
7796
+ {
7797
+ id: "connection-name",
7798
+ required: true,
7799
+ value: name,
7800
+ onChange: (e) => setName(e.target.value)
7801
+ }
7802
+ ),
7803
+ /* @__PURE__ */ jsx(Label, { htmlFor: "connection-url", children: "API base URL" }),
7804
+ /* @__PURE__ */ jsx(
7805
+ Input,
7806
+ {
7807
+ id: "connection-url",
7808
+ type: "url",
7809
+ required: true,
7810
+ placeholder: "https://api.example.com/v1",
7811
+ value: url,
7812
+ onChange: (e) => setUrl(e.target.value)
7813
+ }
7814
+ ),
7815
+ /* @__PURE__ */ jsxs(Label, { htmlFor: "connection-key", children: [
7816
+ "API key ",
7817
+ editing ? "(leave blank to keep)" : "(optional)"
7818
+ ] }),
7819
+ /* @__PURE__ */ jsx(
7820
+ Input,
7821
+ {
7822
+ id: "connection-key",
7823
+ type: "password",
7824
+ autoComplete: "new-password",
7825
+ value: apiKey,
7826
+ onChange: (e) => setApiKey(e.target.value)
7827
+ }
7828
+ ),
7829
+ /* @__PURE__ */ jsx(Label, { htmlFor: "connection-models", children: "Model IDs (one per line)" }),
7830
+ /* @__PURE__ */ jsx(
7831
+ "textarea",
7832
+ {
7833
+ id: "connection-models",
7834
+ className: "w-full rounded border p-2",
7835
+ required: true,
7836
+ value: models,
7837
+ onChange: (e) => setModels(e.target.value)
7838
+ }
7839
+ ),
7840
+ /* @__PURE__ */ jsx(Label, { htmlFor: "connection-context", children: "Context window (tokens)" }),
7841
+ /* @__PURE__ */ jsx(
7842
+ Input,
7843
+ {
7844
+ id: "connection-context",
7845
+ type: "number",
7846
+ min: 1024,
7847
+ max: 2e6,
7848
+ required: true,
7849
+ value: contextWindow,
7850
+ onChange: (e) => setContextWindow(Number(e.target.value))
7851
+ }
7852
+ ),
7853
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
7854
+ /* @__PURE__ */ jsx(Switch, { id: "connection-enabled", checked: enabled, onCheckedChange: setEnabled }),
7855
+ /* @__PURE__ */ jsx(Label, { htmlFor: "connection-enabled", children: "Enabled" })
7856
+ ] }),
7857
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
7858
+ /* @__PURE__ */ jsx(Button, { type: "submit", disabled: save.isPending, children: save.isPending ? "Saving\u2026" : "Save connection" }),
7859
+ editing && /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", onClick: reset, children: "Cancel" })
7860
+ ] })
7861
+ ]
7862
+ }
7863
+ ),
7864
+ /* @__PURE__ */ jsxs("div", { children: [
7865
+ /* @__PURE__ */ jsx("h3", { className: "font-semibold", children: "Direct model usage \xB7 last 30 days" }),
7866
+ /* @__PURE__ */ jsxs("p", { className: "text-sm", children: [
7867
+ usage.data?.calls.length ?? 0,
7868
+ " attempts \xB7",
7869
+ " ",
7870
+ usage.data?.calls.reduce((n, c) => n + (c.input_tokens ?? 0) + (c.output_tokens ?? 0), 0).toLocaleString() ?? "0",
7871
+ " ",
7872
+ "reported tokens \xB7 \xA30 charged by ARBI for these calls."
7873
+ ] }),
7874
+ usage.data?.calls.some((c) => c.input_tokens === null || c.output_tokens === null) && /* @__PURE__ */ jsx("p", { className: "text-sm", children: "Some providers or interrupted calls did not report complete token usage." })
7875
+ ] })
7876
+ ] });
7877
+ }
7679
7878
  var FAMILY_PRESENTATION = {
7680
7879
  microsoft: {
7681
7880
  name: "Microsoft",
@@ -7718,7 +7917,7 @@ function ConnectedAppsSettings({
7718
7917
  onJustConnectedSeen
7719
7918
  }) {
7720
7919
  const arbi = useArbi();
7721
- const { notify: notify16, navigate } = useBlocksEnvironment();
7920
+ const { notify: notify17, navigate } = useBlocksEnvironment();
7722
7921
  const { data: mailPolicy } = useMailPolicy();
7723
7922
  const isVendorVisible = useConnectorVendorVisibility();
7724
7923
  useEffect(() => {
@@ -7763,7 +7962,7 @@ function ConnectedAppsSettings({
7763
7962
  try {
7764
7963
  navigate(await arbi.connectors.slack.authorize(slackAgentId));
7765
7964
  } catch (error) {
7766
- notify16(
7965
+ notify17(
7767
7966
  error instanceof Error ? error.message : "Could not start Slack authorization",
7768
7967
  "error"
7769
7968
  );
@@ -8048,7 +8247,7 @@ function ConnectedWorkspaceTrash({
8048
8247
  const trash = useWorkspaceTrash(workspaceExtId);
8049
8248
  const invalidate = useInvalidateStorage();
8050
8249
  const { purgeDeletedDocuments, restoreDocuments } = useStorageActions();
8051
- const { notify: notify16 } = useBlocksEnvironment();
8250
+ const { notify: notify17 } = useBlocksEnvironment();
8052
8251
  const [pending, setPending] = useState(null);
8053
8252
  const [includeOthers, setIncludeOthers] = useState(false);
8054
8253
  const [busy, setBusy] = useState(false);
@@ -8063,10 +8262,10 @@ function ConnectedWorkspaceTrash({
8063
8262
  const run = async (action, failure) => {
8064
8263
  setBusy(true);
8065
8264
  try {
8066
- notify16(await action(), "success");
8265
+ notify17(await action(), "success");
8067
8266
  await invalidate();
8068
8267
  } catch (error) {
8069
- notify16(error instanceof Error ? error.message : failure, "error");
8268
+ notify17(error instanceof Error ? error.message : failure, "error");
8070
8269
  } finally {
8071
8270
  setBusy(false);
8072
8271
  setPending(null);
@@ -8270,7 +8469,7 @@ function ConnectedStorageProjectCard({
8270
8469
  restoreWorkspaces,
8271
8470
  updateNativeMail
8272
8471
  } = useStorageActions();
8273
- const { notify: notify16, openDocument, openMail } = useBlocksEnvironment();
8472
+ const { notify: notify17, openDocument, openMail } = useBlocksEnvironment();
8274
8473
  const testId = `storage-project-${project.project_ext_id}`;
8275
8474
  const deletedWorkspaces = (project.workspaces ?? []).filter((w) => w.deleted);
8276
8475
  const deletedWorkspaceIds = new Set(deletedWorkspaces.map((w) => w.workspace_ext_id));
@@ -8304,10 +8503,10 @@ function ConnectedStorageProjectCard({
8304
8503
  const run = async (action, failure) => {
8305
8504
  setBusy(true);
8306
8505
  try {
8307
- notify16(await action(), "success");
8506
+ notify17(await action(), "success");
8308
8507
  await invalidate();
8309
8508
  } catch (error) {
8310
- notify16(error instanceof Error ? error.message : failure, "error");
8509
+ notify17(error instanceof Error ? error.message : failure, "error");
8311
8510
  } finally {
8312
8511
  setBusy(false);
8313
8512
  setPending(null);
@@ -8641,6 +8840,7 @@ var SETTINGS_SECTION_IDS = {
8641
8840
  storage: "storage",
8642
8841
  privacy: "privacy",
8643
8842
  chat: "chat",
8843
+ modelConnections: "model-connections",
8644
8844
  connectedApps: "connected-apps"
8645
8845
  };
8646
8846
  function accountSettingsSection(props) {
@@ -8683,6 +8883,14 @@ function chatSettingsSection() {
8683
8883
  render: () => /* @__PURE__ */ jsx(ConnectedPremiumModels, {})
8684
8884
  };
8685
8885
  }
8886
+ function modelConnectionsSettingsSection() {
8887
+ return {
8888
+ id: SETTINGS_SECTION_IDS.modelConnections,
8889
+ label: "Model connections",
8890
+ icon: /* @__PURE__ */ jsx(Code2, { className: "w-6 h-6" }),
8891
+ render: () => /* @__PURE__ */ jsx(ConnectedModelConnectionsSettings, {})
8892
+ };
8893
+ }
8686
8894
  function connectedAppsSettingsSection(props) {
8687
8895
  return {
8688
8896
  id: SETTINGS_SECTION_IDS.connectedApps,
@@ -9164,7 +9372,7 @@ function errorStatus(err) {
9164
9372
  }
9165
9373
  var workspaceWord = () => getEntityLabel("WORKSPACE").toLowerCase();
9166
9374
  function useConnectedWorkspaceSettings(workspaceId, { onLeft } = {}) {
9167
- const { notify: notify16, confirm } = useBlocksEnvironment();
9375
+ const { notify: notify17, confirm } = useBlocksEnvironment();
9168
9376
  const { workspaceId: openWorkspaceId, userId } = useConnectedWorkspace();
9169
9377
  const { data: workspaces } = useWorkspaces();
9170
9378
  const workspace = workspaces?.find((w) => w.external_id === workspaceId);
@@ -9178,7 +9386,7 @@ function useConnectedWorkspaceSettings(workspaceId, { onLeft } = {}) {
9178
9386
  const stillOpen = () => {
9179
9387
  if (!workspace) return false;
9180
9388
  if (openWorkspaceId === workspace.external_id) return true;
9181
- notify16(
9389
+ notify17(
9182
9390
  `Not saved: you switched to another ${workspaceWord()} first. Open "${workspace.name}" and try again.`,
9183
9391
  "warning"
9184
9392
  );
@@ -9193,28 +9401,28 @@ function useConnectedWorkspaceSettings(workspaceId, { onLeft } = {}) {
9193
9401
  try {
9194
9402
  await update.mutateAsync({ name: data.name, description: data.description });
9195
9403
  if (changed.length > 0) {
9196
- notify16(`${getEntityLabel("WORKSPACE")} ${changed.join(", ")} updated`, "success");
9404
+ notify17(`${getEntityLabel("WORKSPACE")} ${changed.join(", ")} updated`, "success");
9197
9405
  }
9198
9406
  } catch (err) {
9199
- notify16(err instanceof Error ? err.message : "Failed to update workspace", "error");
9407
+ notify17(err instanceof Error ? err.message : "Failed to update workspace", "error");
9200
9408
  throw err;
9201
9409
  }
9202
9410
  };
9203
9411
  const setPublic = async (isPublic) => {
9204
9412
  if (!workspace || !stillOpen()) return;
9205
9413
  await update.mutateAsync({ is_public: isPublic });
9206
- notify16(`Workspace is now ${isPublic ? "common" : "members-only"}`, "success");
9414
+ notify17(`Workspace is now ${isPublic ? "common" : "members-only"}`, "success");
9207
9415
  };
9208
9416
  const invite = async (emails, memberRole) => {
9209
9417
  try {
9210
9418
  await add.mutateAsync({ emails, role: memberRole, confirm_invite: true });
9211
- notify16(
9419
+ notify17(
9212
9420
  emails.length === 1 ? `Invitation sent to ${emails[0]}` : `Invitations sent to ${emails.length} users`,
9213
9421
  "success"
9214
9422
  );
9215
9423
  } catch (err) {
9216
9424
  const detail = errorDetail(err);
9217
- notify16(
9425
+ notify17(
9218
9426
  detail ? `Couldn't send the invitation: ${detail}` : "Failed to send the invitation.",
9219
9427
  "error"
9220
9428
  );
@@ -9234,10 +9442,10 @@ function useConnectedWorkspaceSettings(workspaceId, { onLeft } = {}) {
9234
9442
  const already = failed.filter((email) => current.has(email.toLowerCase()));
9235
9443
  const unknown = failed.filter((email) => !current.has(email.toLowerCase()));
9236
9444
  if (added.size > 0) {
9237
- notify16(`Added ${added.size} ${added.size === 1 ? "member" : "members"}`, "success");
9445
+ notify17(`Added ${added.size} ${added.size === 1 ? "member" : "members"}`, "success");
9238
9446
  }
9239
9447
  if (already.length > 0) {
9240
- notify16(
9448
+ notify17(
9241
9449
  already.length === 1 ? `${already[0]} is already a member` : `${already.length} users are already members`,
9242
9450
  "info"
9243
9451
  );
@@ -9269,7 +9477,7 @@ function useConnectedWorkspaceSettings(workspaceId, { onLeft } = {}) {
9269
9477
  return "cancelled";
9270
9478
  }
9271
9479
  const quota = status === 402 || lower.includes("limit reached") || lower.includes("quota") || lower.includes("upgrade");
9272
- if (!quota) notify16(detail, "error");
9480
+ if (!quota) notify17(detail, "error");
9273
9481
  return "error";
9274
9482
  }
9275
9483
  };
@@ -9286,9 +9494,9 @@ You will lose access to all content in this ${workspaceWord()}.`,
9286
9494
  try {
9287
9495
  await remove.mutateAsync([userId]);
9288
9496
  onLeft?.();
9289
- notify16(`Successfully left ${name}`, "success");
9497
+ notify17(`Successfully left ${name}`, "success");
9290
9498
  } catch {
9291
- notify16("Failed to leave workspace", "error");
9499
+ notify17("Failed to leave workspace", "error");
9292
9500
  }
9293
9501
  };
9294
9502
  return {
@@ -9340,7 +9548,7 @@ function ConnectedWorkspaceMembers({
9340
9548
  gridState,
9341
9549
  onGridStateChange
9342
9550
  }) {
9343
- const { confirm, notify: notify16 } = useBlocksEnvironment();
9551
+ const { confirm, notify: notify17 } = useBlocksEnvironment();
9344
9552
  const isOwner = isOwnerRaw && !readOnly;
9345
9553
  const [selected, setSelected] = useState([]);
9346
9554
  const updateRoles = useSetWorkspaceMemberRoles();
@@ -9352,13 +9560,13 @@ function ConnectedWorkspaceMembers({
9352
9560
  const single = rows2.length === 1 ? memberName(rows2[0].user) : null;
9353
9561
  try {
9354
9562
  await updateRoles.mutateAsync({ userIds: rows2.map((r) => r.user.external_id), role });
9355
- notify16(
9563
+ notify17(
9356
9564
  single ? `${single}'s role updated to ${formatRole(role)} in "${workspace.name}"` : `Updated ${rows2.length} users to ${formatRole(role)} in "${workspace.name}"`,
9357
9565
  "success"
9358
9566
  );
9359
9567
  return true;
9360
9568
  } catch {
9361
- notify16(
9569
+ notify17(
9362
9570
  single ? `Failed to update ${single}'s role` : `Failed to update roles in "${workspace.name}"`,
9363
9571
  "error"
9364
9572
  );
@@ -9484,9 +9692,9 @@ Note that ${members2} may have saved private content in the ${workspaceWord2} th
9484
9692
  try {
9485
9693
  await remove.mutateAsync(selected.map((m) => m.user.external_id));
9486
9694
  setSelected([]);
9487
- notify16(`Removed ${names} from ${inWorkspace}`, "success");
9695
+ notify17(`Removed ${names} from ${inWorkspace}`, "success");
9488
9696
  } catch {
9489
- notify16(`Failed to remove some users from ${inWorkspace}`, "error");
9697
+ notify17(`Failed to remove some users from ${inWorkspace}`, "error");
9490
9698
  }
9491
9699
  };
9492
9700
  const changeSelectedRoles = async (role) => {
@@ -9675,7 +9883,7 @@ function ConnectedContactToggle({
9675
9883
  showTooltip = true,
9676
9884
  "data-testid": dataTestId
9677
9885
  }) {
9678
- const { notify: notify16 } = useBlocksEnvironment();
9886
+ const { notify: notify17 } = useBlocksEnvironment();
9679
9887
  const { data: contacts = [] } = useContacts();
9680
9888
  const add = useInviteContacts();
9681
9889
  const remove = useDeleteContact();
@@ -9687,15 +9895,15 @@ function ConnectedContactToggle({
9687
9895
  try {
9688
9896
  if (contact?.external_id) {
9689
9897
  await remove.mutateAsync(contact.external_id);
9690
- notify16(`${name} removed from contacts`, "success");
9898
+ notify17(`${name} removed from contacts`, "success");
9691
9899
  } else {
9692
9900
  await add.mutateAsync([address]);
9693
- notify16(`${name} saved as contact`, "success");
9901
+ notify17(`${name} saved as contact`, "success");
9694
9902
  }
9695
9903
  } catch {
9696
- notify16("Failed to update contact", "error");
9904
+ notify17("Failed to update contact", "error");
9697
9905
  }
9698
- }, [address, user, contact, remove, add, notify16]);
9906
+ }, [address, user, contact, remove, add, notify17]);
9699
9907
  if (!address) return null;
9700
9908
  return /* @__PURE__ */ jsx(
9701
9909
  IconToggle,
@@ -10275,7 +10483,7 @@ function useCopyToClipboard({
10275
10483
  copyMessage = "Copied to clipboard!",
10276
10484
  failureMessage: failureMessage2 = "Failed to copy to clipboard."
10277
10485
  }) {
10278
- const { notify: notify16 } = useBlocksEnvironment();
10486
+ const { notify: notify17 } = useBlocksEnvironment();
10279
10487
  const [isCopied, setIsCopied] = useState(false);
10280
10488
  const timeoutRef = useRef(null);
10281
10489
  useEffect(
@@ -10286,7 +10494,7 @@ function useCopyToClipboard({
10286
10494
  );
10287
10495
  const handleCopy = useCallback(() => {
10288
10496
  navigator.clipboard.writeText(text2).then(() => {
10289
- notify16(copyMessage, "success");
10497
+ notify17(copyMessage, "success");
10290
10498
  setIsCopied(true);
10291
10499
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
10292
10500
  timeoutRef.current = setTimeout(() => {
@@ -10294,9 +10502,9 @@ function useCopyToClipboard({
10294
10502
  setIsCopied(false);
10295
10503
  }, 2e3);
10296
10504
  }).catch(() => {
10297
- notify16(failureMessage2, "error");
10505
+ notify17(failureMessage2, "error");
10298
10506
  });
10299
- }, [text2, copyMessage, failureMessage2, notify16]);
10507
+ }, [text2, copyMessage, failureMessage2, notify17]);
10300
10508
  return { isCopied, handleCopy };
10301
10509
  }
10302
10510
  function CopyButton({ content, copyMessage, label = "Copy to clipboard" }) {
@@ -10344,7 +10552,7 @@ function ConnectedEmailWorkspaceDialog({
10344
10552
  isMember,
10345
10553
  labels
10346
10554
  }) {
10347
- const { confirm, notify: notify16, runtimeConfig } = useBlocksEnvironment();
10555
+ const { confirm, notify: notify17, runtimeConfig } = useBlocksEnvironment();
10348
10556
  const [isGranting, setIsGranting] = useState(false);
10349
10557
  const domain = runtimeConfig.deploymentDomain;
10350
10558
  const email = domain ? `${workspace.external_id}@${displayDomain(domain)}` : null;
@@ -10371,7 +10579,7 @@ function ConnectedEmailWorkspaceDialog({
10371
10579
  const terminateSession = useTerminateSession();
10372
10580
  const handleAuthorize = async () => {
10373
10581
  if (!defaultAssistant) {
10374
- notify16("No default Assistant found for your account", "error");
10582
+ notify17("No default Assistant found for your account", "error");
10375
10583
  return;
10376
10584
  }
10377
10585
  try {
@@ -10380,9 +10588,9 @@ function ConnectedEmailWorkspaceDialog({
10380
10588
  workspaceId: workspace.external_id,
10381
10589
  mode: { kind: "temporary" }
10382
10590
  });
10383
- notify16("Your Assistant is authorized for this workspace", "success");
10591
+ notify17("Your Assistant is authorized for this workspace", "success");
10384
10592
  } catch (err) {
10385
- notify16(detailOf(err) || "Failed to authorize", "error");
10593
+ notify17(detailOf(err) || "Failed to authorize", "error");
10386
10594
  }
10387
10595
  };
10388
10596
  const handleEndSession = async () => {
@@ -10390,12 +10598,12 @@ function ConnectedEmailWorkspaceDialog({
10390
10598
  try {
10391
10599
  await terminateSession.mutateAsync(activeSession.session_id);
10392
10600
  } catch {
10393
- notify16("Failed to end session", "error");
10601
+ notify17("Failed to end session", "error");
10394
10602
  }
10395
10603
  };
10396
10604
  const handleGrantAccess = async () => {
10397
10605
  if (!defaultAssistant) {
10398
- notify16("No default Assistant found for your account", "error");
10606
+ notify17("No default Assistant found for your account", "error");
10399
10607
  return;
10400
10608
  }
10401
10609
  const confirmed = await confirm({
@@ -10409,9 +10617,9 @@ function ConnectedEmailWorkspaceDialog({
10409
10617
  agentExtId: defaultAssistant.external_id,
10410
10618
  workspaceId: workspace.external_id
10411
10619
  });
10412
- notify16("Your Assistant now has standing access to this workspace", "success");
10620
+ notify17("Your Assistant now has standing access to this workspace", "success");
10413
10621
  } catch (err) {
10414
- notify16(detailOf(err) || "Failed to grant access", "error");
10622
+ notify17(detailOf(err) || "Failed to grant access", "error");
10415
10623
  } finally {
10416
10624
  setIsGranting(false);
10417
10625
  }
@@ -10492,7 +10700,7 @@ function ConnectedWorkspaceHouseTemplate({
10492
10700
  isOwner,
10493
10701
  labels: labelOverrides
10494
10702
  }) {
10495
- const { notify: notify16 } = useBlocksEnvironment();
10703
+ const { notify: notify17 } = useBlocksEnvironment();
10496
10704
  const upload = useUploadDocuments();
10497
10705
  const setWorkspaceTemplate = useSetWorkspaceHouseTemplate();
10498
10706
  const setDeploymentTemplate = useSetDeploymentHouseTemplate();
@@ -10509,9 +10717,9 @@ function ConnectedWorkspaceHouseTemplate({
10509
10717
  setBusy(true);
10510
10718
  try {
10511
10719
  await work();
10512
- notify16(done, "success");
10720
+ notify17(done, "success");
10513
10721
  } catch (failure) {
10514
- notify16(failureMessage(failure), "error");
10722
+ notify17(failureMessage(failure), "error");
10515
10723
  } finally {
10516
10724
  setBusy(false);
10517
10725
  }
@@ -10719,7 +10927,7 @@ function ConnectedArchiveWorkspaceButton({
10719
10927
  onArchived,
10720
10928
  labels: labelOverrides
10721
10929
  }) {
10722
- const { notify: notify16 } = useBlocksEnvironment();
10930
+ const { notify: notify17 } = useBlocksEnvironment();
10723
10931
  const archive = useWorkspaceArchive(workspaceId);
10724
10932
  const archiveWorkspace = useArchiveWorkspace();
10725
10933
  const [open, setOpen] = useState(false);
@@ -10731,11 +10939,11 @@ function ConnectedArchiveWorkspaceButton({
10731
10939
  setBusy(true);
10732
10940
  try {
10733
10941
  await archiveWorkspace.mutateAsync(workspaceId);
10734
- notify16(labels.archived(workspaceName), "success");
10942
+ notify17(labels.archived(workspaceName), "success");
10735
10943
  setOpen(false);
10736
10944
  onArchived();
10737
10945
  } catch (error) {
10738
- notify16(refusalReason(error, labels.failed), "error");
10946
+ notify17(refusalReason(error, labels.failed), "error");
10739
10947
  } finally {
10740
10948
  setBusy(false);
10741
10949
  }
@@ -10860,7 +11068,7 @@ function ConnectedUnarchiveWorkspaceDialog({
10860
11068
  onClose,
10861
11069
  labels: labelOverrides
10862
11070
  }) {
10863
- const { notify: notify16 } = useBlocksEnvironment();
11071
+ const { notify: notify17 } = useBlocksEnvironment();
10864
11072
  const { data: workspaces } = useWorkspaces();
10865
11073
  const archive = useWorkspaceArchive(workspaceId, workspaceId !== null);
10866
11074
  const unarchive = useUnarchiveWorkspace();
@@ -10882,7 +11090,7 @@ function ConnectedUnarchiveWorkspaceDialog({
10882
11090
  setError(null);
10883
11091
  try {
10884
11092
  await unarchive.mutateAsync(workspaceId);
10885
- notify16(labels.started(name), "success");
11093
+ notify17(labels.started(name), "success");
10886
11094
  } catch (failure) {
10887
11095
  setError(refusalReason(failure, labels.failed));
10888
11096
  } finally {
@@ -11998,7 +12206,7 @@ function ConnectedMailboxSyncDialog({
11998
12206
  const enableSync = useEnableMailboxSync();
11999
12207
  const disconnect = useDisconnectConnector();
12000
12208
  const arbi = useArbi();
12001
- const { notify: notify16, navigate } = useBlocksEnvironment();
12209
+ const { notify: notify17, navigate } = useBlocksEnvironment();
12002
12210
  const reconnect = async () => {
12003
12211
  try {
12004
12212
  await disconnect.mutateAsync({ vendorKey: catalog.vendor_key });
@@ -12007,7 +12215,7 @@ function ConnectedMailboxSyncDialog({
12007
12215
  try {
12008
12216
  navigate(await arbi.connectors.authorize(catalog.vendor_key, connectorReturnTo()));
12009
12217
  } catch {
12010
- notify16("Could not start reconnection. Please try again.", "error");
12218
+ notify17("Could not start reconnection. Please try again.", "error");
12011
12219
  }
12012
12220
  };
12013
12221
  const { data: workspaces = [] } = useWorkspaces({ enabled: open && !lockedWorkspaceExtId });
@@ -12091,7 +12299,7 @@ function ConnectedMailboxSyncDialog({
12091
12299
  },
12092
12300
  {
12093
12301
  onSuccess: () => {
12094
- notify16("Email settings saved", "success");
12302
+ notify17("Email settings saved", "success");
12095
12303
  onOpenChange(false);
12096
12304
  onEnabled?.(workspaceExtId);
12097
12305
  },
@@ -12105,7 +12313,7 @@ function ConnectedMailboxSyncDialog({
12105
12313
  msg = "This connector is not available for email sync.";
12106
12314
  }
12107
12315
  }
12108
- notify16(msg, "error");
12316
+ notify17(msg, "error");
12109
12317
  }
12110
12318
  }
12111
12319
  );
@@ -12354,7 +12562,7 @@ function ConnectedDriveSyncDialog({
12354
12562
  const enableSync = useEnableDriveSync();
12355
12563
  const disconnect = useDisconnectConnector();
12356
12564
  const arbi = useArbi();
12357
- const { notify: notify16, navigate } = useBlocksEnvironment();
12565
+ const { notify: notify17, navigate } = useBlocksEnvironment();
12358
12566
  const reconnect = async () => {
12359
12567
  try {
12360
12568
  await disconnect.mutateAsync({ vendorKey: catalog.vendor_key });
@@ -12363,7 +12571,7 @@ function ConnectedDriveSyncDialog({
12363
12571
  try {
12364
12572
  navigate(await arbi.connectors.authorize(catalog.vendor_key, connectorReturnTo()));
12365
12573
  } catch {
12366
- notify16("Could not start reconnection. Please try again.", "error");
12574
+ notify17("Could not start reconnection. Please try again.", "error");
12367
12575
  }
12368
12576
  };
12369
12577
  const { data: workspaces = [] } = useWorkspaces({ enabled: open && !lockedWorkspaceExtId });
@@ -12434,7 +12642,7 @@ function ConnectedDriveSyncDialog({
12434
12642
  },
12435
12643
  {
12436
12644
  onSuccess: () => {
12437
- notify16(`${productName} settings saved`, "success");
12645
+ notify17(`${productName} settings saved`, "success");
12438
12646
  onOpenChange(false);
12439
12647
  onEnabled?.(workspaceExtId);
12440
12648
  },
@@ -12450,7 +12658,7 @@ function ConnectedDriveSyncDialog({
12450
12658
  msg = `This connector is not available for ${productName} sync.`;
12451
12659
  }
12452
12660
  }
12453
- notify16(msg, "error");
12661
+ notify17(msg, "error");
12454
12662
  }
12455
12663
  }
12456
12664
  );
@@ -14790,13 +14998,90 @@ function ConnectedQuotaDialog({ info, onClose: close }) {
14790
14998
  )
14791
14999
  ] });
14792
15000
  }
15001
+ var ADDON_ERROR_CODES = [
15002
+ "PAYMENT_DECLINED",
15003
+ "PAYMENT_METHOD_REQUIRED",
15004
+ "BILLING_ADDRESS_REQUIRED"
15005
+ ];
15006
+ var ADDON_ENDPOINT_RE = /\/v1\/user\/projects\/[^/]+\/addons\/(ai-usage|storage|settings)(?:[?#]|$)/;
15007
+ var IDENTITY_ERROR_CODES = ["PRO_REQUIRED", "IDENTITY_FEE_REQUIRED", ...ADDON_ERROR_CODES];
15008
+ var IDENTITY_ENDPOINT_RE = /\/v1\/user\/identity(?:\/[a-z-]+)?(?:[?#]|$)/;
15009
+ var structuredCode = (detail) => {
15010
+ if (!detail || typeof detail !== "object") return null;
15011
+ const code = detail.code;
15012
+ return typeof code === "string" ? code : null;
15013
+ };
15014
+ function routePaymentRequired(url, detail) {
15015
+ const code = structuredCode(detail);
15016
+ if (code === "QUOTA_EXCEEDED") return "quota-modal";
15017
+ if (code && ADDON_ERROR_CODES.includes(code) && ADDON_ENDPOINT_RE.test(url)) return "caller";
15018
+ if (code && IDENTITY_ERROR_CODES.includes(code) && IDENTITY_ENDPOINT_RE.test(url)) return "caller";
15019
+ return "toast";
15020
+ }
15021
+ function paymentRequiredToastMessage(detail) {
15022
+ if (typeof detail === "string" && detail) return detail;
15023
+ if (detail && typeof detail === "object") {
15024
+ const message = detail.message;
15025
+ if (typeof message === "string" && message) return message;
15026
+ }
15027
+ return "Quota exceeded";
15028
+ }
15029
+ function paymentConfirmationUrl(detail) {
15030
+ if (!detail || typeof detail !== "object") return null;
15031
+ const { code, confirm_url } = detail;
15032
+ return code === "PAYMENT_CONFIRMATION_REQUIRED" && typeof confirm_url === "string" && confirm_url ? confirm_url : null;
15033
+ }
15034
+ function surfacePaymentRequired(url, detail, { onUpgrade }) {
15035
+ const route = routePaymentRequired(url, detail);
15036
+ if (route === "caller") return;
15037
+ if (route === "quota-modal") {
15038
+ const d = detail;
15039
+ openDialog("quota", {
15040
+ spend: Number(d.spend ?? 0),
15041
+ budget: Number(d.budget ?? 0),
15042
+ projectExtId: d.project_ext_id ?? null,
15043
+ message: d.message
15044
+ });
15045
+ return;
15046
+ }
15047
+ const confirmUrl = paymentConfirmationUrl(detail);
15048
+ notify.warning(paymentRequiredToastMessage(detail), {
15049
+ action: confirmUrl ? {
15050
+ label: "Confirm payment",
15051
+ onClick: () => {
15052
+ window.open(confirmUrl, "_blank", "noopener");
15053
+ }
15054
+ } : { label: "Upgrade", onClick: onUpgrade },
15055
+ duration: 8e3
15056
+ });
15057
+ }
15058
+ function openQuotaDialogIfUsedUp(queryClient, workspaceId) {
15059
+ const quota = cachedQuotaUsedUp(queryClient, workspaceId);
15060
+ if (!quota) return false;
15061
+ openDialog("quota", quota);
15062
+ return true;
15063
+ }
15064
+ function createPaymentRequiredMiddleware(options2) {
15065
+ return {
15066
+ async onResponse({ request, response }) {
15067
+ if (response.status === 402) {
15068
+ try {
15069
+ const body = await response.clone().json();
15070
+ surfacePaymentRequired(request.url || response.url, body?.detail, options2);
15071
+ } catch {
15072
+ }
15073
+ }
15074
+ return response;
15075
+ }
15076
+ };
15077
+ }
14793
15078
  function ConnectedAddContacts({
14794
15079
  onSuccess,
14795
15080
  onClose,
14796
15081
  initialEmail = "",
14797
15082
  rewardAmount
14798
15083
  }) {
14799
- const { notify: notify16 } = useBlocksEnvironment();
15084
+ const { notify: notify17 } = useBlocksEnvironment();
14800
15085
  const arbi = useArbi();
14801
15086
  const { data: contacts = [] } = useContacts();
14802
15087
  const invite = useInviteContacts();
@@ -14805,17 +15090,17 @@ function ConnectedAddContacts({
14805
15090
  const selfEmail = arbi.isLoggedIn ? arbi.user.identity()?.email : null;
14806
15091
  const submit = async () => {
14807
15092
  if (!emailTokens(text2).length) {
14808
- notify16("Please enter at least one email address", "error");
15093
+ notify17("Please enter at least one email address", "error");
14809
15094
  return;
14810
15095
  }
14811
15096
  const plan = planContactInvites(text2, contacts, selfEmail);
14812
15097
  if (plan.send.length > MAX_INVITE_EMAILS) {
14813
- notify16(`Maximum ${MAX_INVITE_EMAILS} new emails allowed per batch`, "error");
15098
+ notify17(`Maximum ${MAX_INVITE_EMAILS} new emails allowed per batch`, "error");
14814
15099
  return;
14815
15100
  }
14816
15101
  setRows(plan.rows);
14817
15102
  if (!plan.send.length) {
14818
- notify16(summarizeUnsentInvites(plan.rows), "info");
15103
+ notify17(summarizeUnsentInvites(plan.rows), "info");
14819
15104
  onSuccess?.();
14820
15105
  return;
14821
15106
  }
@@ -14823,12 +15108,12 @@ function ConnectedAddContacts({
14823
15108
  const response = await invite.mutateAsync(plan.send);
14824
15109
  setRows(applyContactInviteResults(plan, response));
14825
15110
  const summary = summarizeContactInvites(response);
14826
- notify16(summary.message, summary.failed ? "error" : "success");
15111
+ notify17(summary.message, summary.failed ? "error" : "success");
14827
15112
  onSuccess?.();
14828
15113
  } catch (error) {
14829
15114
  const message = refusalReason(error, "Failed to add contacts");
14830
15115
  setRows(failContactInvites(plan, message));
14831
- notify16(message, "error");
15116
+ notify17(message, "error");
14832
15117
  }
14833
15118
  };
14834
15119
  if (rows)
@@ -15105,7 +15390,7 @@ function useConnectedWorkspaceList({
15105
15390
  labels
15106
15391
  } = {}) {
15107
15392
  const recentlyDeletedHint = labels?.recentlyDeletedHint ?? DEFAULT_WORKSPACE_LIST_LABELS.recentlyDeletedHint;
15108
- const { confirm, notify: notify16 } = useBlocksEnvironment();
15393
+ const { confirm, notify: notify17 } = useBlocksEnvironment();
15109
15394
  const { userId: selfId, live } = useConnectedWorkspace();
15110
15395
  const demoSeed = !live ? seed : void 0;
15111
15396
  const workspacesQuery = useWorkspaces({ enabled: !demoSeed });
@@ -15180,11 +15465,11 @@ function useConnectedWorkspaceList({
15180
15465
  try {
15181
15466
  await deleteWorkspaces.mutateAsync(selected.map((w) => w.external_id));
15182
15467
  setSelected([]);
15183
- notify16(`Deleted ${count2} ${noun.toLowerCase()}`, "success");
15468
+ notify17(`Deleted ${count2} ${noun.toLowerCase()}`, "success");
15184
15469
  } catch {
15185
- notify16("Failed to delete some workspaces", "error");
15470
+ notify17("Failed to delete some workspaces", "error");
15186
15471
  }
15187
- }, [demoSeed, selected, confirm, notify16, deleteWorkspaces, recentlyDeletedHint]);
15472
+ }, [demoSeed, selected, confirm, notify17, deleteWorkspaces, recentlyDeletedHint]);
15188
15473
  return {
15189
15474
  selfId,
15190
15475
  /** Every listed workspace (unfiltered): the filter menu's counts. */
@@ -15210,7 +15495,7 @@ function useConnectedWorkspaceList({
15210
15495
  };
15211
15496
  }
15212
15497
  var WorkspaceTableView = lazy(
15213
- () => import('../WorkspaceTableView-YFLVFRJL.js').then((m) => ({ default: m.WorkspaceTableView }))
15498
+ () => import('../WorkspaceTableView-EH5CEB44.js').then((m) => ({ default: m.WorkspaceTableView }))
15214
15499
  );
15215
15500
  var WORKSPACES_TAB_ID = "workspaces";
15216
15501
  var defaultRenderMember2 = (user, size) => {
@@ -15666,7 +15951,7 @@ function ProjectDetailsForm({
15666
15951
  testId = "project-details"
15667
15952
  }) {
15668
15953
  const labels = { ...DEFAULT_PROJECT_DETAILS_LABELS, ...given };
15669
- const { notify: notify16 } = useBlocksEnvironment();
15954
+ const { notify: notify17 } = useBlocksEnvironment();
15670
15955
  const update = useUpdateProjectFields();
15671
15956
  const workspace = primaryProjectWorkspace(project);
15672
15957
  const { data: members = [] } = useWorkspaceUsers(workspace?.id);
@@ -15701,9 +15986,9 @@ function ProjectDetailsForm({
15701
15986
  ...hostFields.length ? { fields: Object.fromEntries(hostFields.map((f) => [f.key, form[`host:${f.key}`]])) } : {}
15702
15987
  }
15703
15988
  });
15704
- notify16(labels.saved, "success");
15989
+ notify17(labels.saved, "success");
15705
15990
  } catch (e) {
15706
- notify16(labels.failed, "error", { description: e instanceof Error ? e.message : void 0 });
15991
+ notify17(labels.failed, "error", { description: e instanceof Error ? e.message : void 0 });
15707
15992
  }
15708
15993
  };
15709
15994
  const input = (key, label, placeholder) => /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
@@ -15824,7 +16109,7 @@ var ConnectedFilesExplorer = forwardRef(function ConnectedFilesExplorer2({
15824
16109
  onOpenInReview,
15825
16110
  emptyWorkspace
15826
16111
  }, ref) {
15827
- const { confirm, notify: notify16 } = useBlocksEnvironment();
16112
+ const { confirm, notify: notify17 } = useBlocksEnvironment();
15828
16113
  const currentPath = folderPath;
15829
16114
  const density = tileSize < COMPACT_BELOW ? "list" : "grid";
15830
16115
  const [containerWidth, setContainerWidth] = useState(0);
@@ -16061,7 +16346,7 @@ var ConnectedFilesExplorer = forwardRef(function ConnectedFilesExplorer2({
16061
16346
  if (!wsId || !name || name === folder.name) return;
16062
16347
  const siblings = new Set(folders.filter((f) => f !== folder).map((f) => f.name.toLowerCase()));
16063
16348
  if (siblings.has(name.toLowerCase())) {
16064
- notify16(`A folder named "${name}" already exists here.`, "error");
16349
+ notify17(`A folder named "${name}" already exists here.`, "error");
16065
16350
  return;
16066
16351
  }
16067
16352
  const oldPath = joinFolderPath(folder.path);
@@ -16070,16 +16355,16 @@ var ConnectedFilesExplorer = forwardRef(function ConnectedFilesExplorer2({
16070
16355
  const docs = collectFolderDocs(documents, folder.path);
16071
16356
  try {
16072
16357
  if (await renameFolder(docs, folder.path, newPrefix) > 0) {
16073
- notify16(`Renamed folder to "${name}"`, "success");
16358
+ notify17(`Renamed folder to "${name}"`, "success");
16074
16359
  }
16075
16360
  } catch {
16076
- notify16("Failed to rename folder. Please try again.", "error");
16361
+ notify17("Failed to rename folder. Please try again.", "error");
16077
16362
  return;
16078
16363
  }
16079
16364
  if (oldPath) removePendingFolder(wsId, oldPath);
16080
16365
  if (docs.length === 0 && newPath) addPendingFolder(wsId, newPath);
16081
16366
  },
16082
- [wsId, folders, documents, renameFolder, notify16, addPendingFolder, removePendingFolder]
16367
+ [wsId, folders, documents, renameFolder, notify17, addPendingFolder, removePendingFolder]
16083
16368
  );
16084
16369
  const cancelFolderName = useCallback(() => setEditingFolderPath(null), []);
16085
16370
  const clearSelection = useCallback(() => {
@@ -16157,12 +16442,12 @@ var ConnectedFilesExplorer = forwardRef(function ConnectedFilesExplorer2({
16157
16442
  { external_id: doc.external_id, doc_metadata: { ...doc.doc_metadata, title: name } }
16158
16443
  ]
16159
16444
  });
16160
- notify16(`Renamed to "${name}"`, "success");
16445
+ notify17(`Renamed to "${name}"`, "success");
16161
16446
  } catch {
16162
- notify16("Failed to rename. Please try again.", "error");
16447
+ notify17("Failed to rename. Please try again.", "error");
16163
16448
  }
16164
16449
  },
16165
- [updateDocument, notify16]
16450
+ [updateDocument, notify17]
16166
16451
  );
16167
16452
  useEffect(() => {
16168
16453
  const onKey = (e) => {
@@ -16196,12 +16481,12 @@ var ConnectedFilesExplorer = forwardRef(function ConnectedFilesExplorer2({
16196
16481
  try {
16197
16482
  await deleteDocuments.mutateAsync([doc.external_id]);
16198
16483
  onSelectionChange(selectedIdsRef.current.filter((id) => id !== doc.external_id));
16199
- notify16(`Deleted "${name}"`, "success");
16484
+ notify17(`Deleted "${name}"`, "success");
16200
16485
  } catch {
16201
- notify16("Failed to delete. Please try again.", "error");
16486
+ notify17("Failed to delete. Please try again.", "error");
16202
16487
  }
16203
16488
  },
16204
- [confirm, deleteDocuments, onSelectionChange, notify16]
16489
+ [confirm, deleteDocuments, onSelectionChange, notify17]
16205
16490
  );
16206
16491
  const startFolderRename = useCallback(
16207
16492
  (folder) => setEditingFolderPath(folder.path.join("/")),
@@ -16242,12 +16527,12 @@ var ConnectedFilesExplorer = forwardRef(function ConnectedFilesExplorer2({
16242
16527
  await deleteDocuments.mutateAsync(ids);
16243
16528
  const removed = new Set(ids);
16244
16529
  onSelectionChange(selectedIdsRef.current.filter((id) => !removed.has(id)));
16245
- notify16(`Deleted folder "${folder.name}"`, "success");
16530
+ notify17(`Deleted folder "${folder.name}"`, "success");
16246
16531
  } catch {
16247
- notify16("Failed to delete folder. Please try again.", "error");
16532
+ notify17("Failed to delete folder. Please try again.", "error");
16248
16533
  }
16249
16534
  },
16250
- [confirm, documents, deleteDocuments, onSelectionChange, removePendingFolder, wsId, notify16]
16535
+ [confirm, documents, deleteDocuments, onSelectionChange, removePendingFolder, wsId, notify17]
16251
16536
  );
16252
16537
  const canDeleteFolder = useCallback(
16253
16538
  (folder) => canUpload && collectFolderDocs(documents, folder.path).every(
@@ -16273,15 +16558,15 @@ var ConnectedFilesExplorer = forwardRef(function ConnectedFilesExplorer2({
16273
16558
  documents: ids.map((external_id) => ({ external_id, folder }))
16274
16559
  });
16275
16560
  clearSelection();
16276
- notify16(
16561
+ notify17(
16277
16562
  `Moved ${ids.length} item${ids.length === 1 ? "" : "s"} to "${folder ?? "Home"}"`,
16278
16563
  "success"
16279
16564
  );
16280
16565
  } catch {
16281
- notify16("Failed to move. Please try again.", "error");
16566
+ notify17("Failed to move. Please try again.", "error");
16282
16567
  }
16283
16568
  },
16284
- [updateDocument, clearSelection, notify16]
16569
+ [updateDocument, clearSelection, notify17]
16285
16570
  );
16286
16571
  const sensors = useSensors(
16287
16572
  useSensor(MouseSensor, { activationConstraint: { distance: 6 } }),
@@ -16512,19 +16797,19 @@ function ProjectIssues({
16512
16797
  }) {
16513
16798
  const schema = useTagKindSchema("issue");
16514
16799
  const { mutate: setFields, isIdle } = useUpdateTagKindSchema();
16515
- const { notify: notify16, openDocument, openWordEditor } = useBlocksEnvironment();
16800
+ const { notify: notify17, openDocument, openWordEditor } = useBlocksEnvironment();
16516
16801
  const needsFields = !!schema.data && schema.data.fields.length === 0 && fields.length > 0;
16517
16802
  useEffect(() => {
16518
16803
  if (!needsFields || !isIdle) return;
16519
16804
  setFields(
16520
16805
  { kind: "issue", fields },
16521
16806
  {
16522
- onError: (e) => notify16("Couldn't set up the issues", "error", {
16807
+ onError: (e) => notify17("Couldn't set up the issues", "error", {
16523
16808
  description: e instanceof Error ? e.message : void 0
16524
16809
  })
16525
16810
  }
16526
16811
  );
16527
- }, [needsFields, isIdle, setFields, fields, notify16]);
16812
+ }, [needsFields, isIdle, setFields, fields, notify17]);
16528
16813
  if (!schema.data || needsFields) return /* @__PURE__ */ jsx(Fragment, { children: pending });
16529
16814
  return /* @__PURE__ */ jsx(
16530
16815
  ConnectedTagTable,
@@ -16729,14 +17014,14 @@ function ConnectedProjectPage({
16729
17014
  };
16730
17015
  const { project, usage, isLoading } = useProjectSummary(projectId);
16731
17016
  const { workspaceId } = useConnectedWorkspace();
16732
- const { notify: notify16 } = useBlocksEnvironment();
17017
+ const { notify: notify17 } = useBlocksEnvironment();
16733
17018
  const selectWorkspace = useSelectWorkspace();
16734
17019
  const workspace = project ? primaryProjectWorkspace(project) : void 0;
16735
17020
  const open = !!workspace && workspace.id === workspaceId;
16736
17021
  useEffect(() => {
16737
17022
  if (!workspace || workspace.id === workspaceId) return;
16738
17023
  selectWorkspace(workspace.id).catch(
16739
- (e) => notify16(`Couldn't open the ${entityNoun("PROJECT")}'s workspace`, "error", {
17024
+ (e) => notify17(`Couldn't open the ${entityNoun("PROJECT")}'s workspace`, "error", {
16740
17025
  description: e instanceof Error ? e.message : void 0
16741
17026
  })
16742
17027
  );
@@ -16987,7 +17272,7 @@ function ConnectedContactCardForm({
16987
17272
  onDone,
16988
17273
  onOpenContact
16989
17274
  }) {
16990
- const { notify: notify16 } = useBlocksEnvironment();
17275
+ const { notify: notify17 } = useBlocksEnvironment();
16991
17276
  const [form, setForm] = useState(
16992
17277
  () => contact?.card ? contactToForm(contact.card) : EMPTY_CONTACT_FORM
16993
17278
  );
@@ -17021,7 +17306,7 @@ function ConnectedContactCardForm({
17021
17306
  setServerError(result.outcome_detail || DEFAULT_CONTACT_OUTCOME_LABELS.failed);
17022
17307
  return;
17023
17308
  }
17024
- notify16(contactOutcomeMessage({ ...result, outcome: result.outcome ?? "invited" }), "success");
17309
+ notify17(contactOutcomeMessage({ ...result, outcome: result.outcome ?? "invited" }), "success");
17025
17310
  onDone();
17026
17311
  };
17027
17312
  if (invite && email) {
@@ -17030,7 +17315,7 @@ function ConnectedContactCardForm({
17030
17315
  return;
17031
17316
  }
17032
17317
  const onSuccess = () => {
17033
- notify16(contact ? "Contact saved" : "Contact added", "success");
17318
+ notify17(contact ? "Contact saved" : "Contact added", "success");
17034
17319
  onDone();
17035
17320
  };
17036
17321
  if (contact?.external_id)
@@ -17310,7 +17595,7 @@ function ConnectedContactsDirectory({
17310
17595
  onInviteByEmail,
17311
17596
  onSeePlans
17312
17597
  }) {
17313
- const { notify: notify16 } = useBlocksEnvironment();
17598
+ const { notify: notify17 } = useBlocksEnvironment();
17314
17599
  const { data = [], isLoading, error } = useContacts();
17315
17600
  const remove = useDeleteContact();
17316
17601
  const [q, setQ] = useState("");
@@ -17456,8 +17741,8 @@ function ConnectedContactsDirectory({
17456
17741
  disabled: remove.isPending,
17457
17742
  "data-testid": `contact-delete-confirm-${id}`,
17458
17743
  onClick: () => c.external_id && remove.mutate(c.external_id, {
17459
- onSuccess: () => notify16(`${name || "Contact"} deleted`, "success"),
17460
- onError: (err) => notify16(
17744
+ onSuccess: () => notify17(`${name || "Contact"} deleted`, "success"),
17745
+ onError: (err) => notify17(
17461
17746
  `Could not delete: ${refusalReason(err, "Something went wrong")}`,
17462
17747
  "error"
17463
17748
  ),
@@ -17503,7 +17788,7 @@ function ConnectedContactMenu({
17503
17788
  onGrantAccess,
17504
17789
  onAddPeople
17505
17790
  }) {
17506
- const { confirm, notify: notify16 } = useBlocksEnvironment();
17791
+ const { confirm, notify: notify17 } = useBlocksEnvironment();
17507
17792
  const arbi = useArbi();
17508
17793
  const currentUserId = arbi.isLoggedIn ? arbi.user.identity()?.externalId : void 0;
17509
17794
  const { data: userSettings } = useUserSettings();
@@ -17526,11 +17811,11 @@ function ConnectedContactMenu({
17526
17811
  const next = isMuted ? current.filter((id) => id !== peer.external_id) : [...current, peer.external_id];
17527
17812
  try {
17528
17813
  await updateUserSettings.mutateAsync({ muted_users: next });
17529
- notify16(`${name} ${isMuted ? "unmuted" : "muted"}`, "success");
17814
+ notify17(`${name} ${isMuted ? "unmuted" : "muted"}`, "success");
17530
17815
  } catch {
17531
- notify16("Failed to update mute settings", "error");
17816
+ notify17("Failed to update mute settings", "error");
17532
17817
  }
17533
- }, [userSettings, isMuted, peer.external_id, updateUserSettings, name, notify16]);
17818
+ }, [userSettings, isMuted, peer.external_id, updateUserSettings, name, notify17]);
17534
17819
  const removeContact = useCallback(async () => {
17535
17820
  if (!contactId) return;
17536
17821
  const confirmed = await confirm({
@@ -17542,11 +17827,11 @@ Your conversation is not deleted \u2014 you can add them again.`,
17542
17827
  if (!confirmed) return;
17543
17828
  try {
17544
17829
  await deleteContact.mutateAsync(contactId);
17545
- notify16(`Removed ${name}`, "success");
17830
+ notify17(`Removed ${name}`, "success");
17546
17831
  } catch {
17547
- notify16("Failed to remove contact", "error");
17832
+ notify17("Failed to remove contact", "error");
17548
17833
  }
17549
- }, [confirm, contactId, deleteContact, name, notify16]);
17834
+ }, [confirm, contactId, deleteContact, name, notify17]);
17550
17835
  const entries = [
17551
17836
  ...onAddPeople ? [
17552
17837
  {
@@ -17939,7 +18224,7 @@ function ConnectedSearchPage({
17939
18224
  labels
17940
18225
  }) {
17941
18226
  const l = useMemo(() => ({ ...DEFAULT_CONNECTED_SEARCH_PAGE_LABELS, ...labels }), [labels]);
17942
- const { notify: notify16, openDocument } = useBlocksEnvironment();
18227
+ const { notify: notify17, openDocument } = useBlocksEnvironment();
17943
18228
  const { workspaceId, live } = useConnectedWorkspace();
17944
18229
  const { data: documents } = useConnectedDocuments();
17945
18230
  const { data: settings } = useUserSettings({ enabled: live });
@@ -18025,7 +18310,7 @@ function ConnectedSearchPage({
18025
18310
  const query = text2.trim();
18026
18311
  if (!query || !workspaceId || tooMany) return;
18027
18312
  if (!isOnline) {
18028
- notify16(l.offline, "warning");
18313
+ notify17(l.offline, "warning");
18029
18314
  return;
18030
18315
  }
18031
18316
  setDraft(text2);
@@ -18062,10 +18347,10 @@ function ConnectedSearchPage({
18062
18347
  shared: false
18063
18348
  });
18064
18349
  await assignDocTags.mutateAsync({ tagId: tag.external_id, docIds: listedDocIds });
18065
- notify16(l.labelled(listedDocIds.length, trimmed), "success");
18350
+ notify17(l.labelled(listedDocIds.length, trimmed), "success");
18066
18351
  setLabelOpen(false);
18067
18352
  } catch (err) {
18068
- notify16(err instanceof Error ? err.message : l.labelFailed, "error");
18353
+ notify17(err instanceof Error ? err.message : l.labelFailed, "error");
18069
18354
  } finally {
18070
18355
  setIsLabelling(false);
18071
18356
  }
@@ -18436,16 +18721,16 @@ var NO_WORD = {
18436
18721
  loadFonts: () => Promise.reject(new Error("No Word editor"))
18437
18722
  }
18438
18723
  };
18439
- function notifySent(notify16, result) {
18724
+ function notifySent(notify17, result) {
18440
18725
  const status = result && typeof result === "object" && "delivery_status" in result ? result.delivery_status : null;
18441
18726
  if (status === "bounced")
18442
- notify16("Email couldn't be delivered", "error", { description: "Open it in Sent to see why." });
18727
+ notify17("Email couldn't be delivered", "error", { description: "Open it in Sent to see why." });
18443
18728
  else if (status === "partially_bounced")
18444
- notify16("Email couldn't be delivered to every recipient", "error", {
18729
+ notify17("Email couldn't be delivered to every recipient", "error", {
18445
18730
  description: "Open it in Sent to see which and why."
18446
18731
  });
18447
- else if (status === "delivered") notify16("Email delivered", "success");
18448
- else notify16("Email queued for delivery", "success");
18732
+ else if (status === "delivered") notify17("Email delivered", "success");
18733
+ else notify17("Email queued for delivery", "success");
18449
18734
  }
18450
18735
  function MailComposerForm({
18451
18736
  account,
@@ -18469,7 +18754,7 @@ function MailComposerForm({
18469
18754
  headerSlot
18470
18755
  }) {
18471
18756
  const { client } = useMailClient();
18472
- const { notify: notify16, confirm } = useBlocksEnvironment();
18757
+ const { notify: notify17, confirm } = useBlocksEnvironment();
18473
18758
  const [to, setTo] = useState(initial.to.map((r) => r.email).join("; "));
18474
18759
  const [cc, setCc] = useState(initial.cc.map((r) => r.email).join("; "));
18475
18760
  const [showCc, setShowCc] = useState(initial.cc.length > 0);
@@ -18604,7 +18889,7 @@ function MailComposerForm({
18604
18889
  setWordPending(true);
18605
18890
  try {
18606
18891
  if (!secure) {
18607
- notifySent(notify16, await wordBody.send({ ...value, request_id: requestId.current }));
18892
+ notifySent(notify17, await wordBody.send({ ...value, request_id: requestId.current }));
18608
18893
  onClose();
18609
18894
  return;
18610
18895
  }
@@ -18638,13 +18923,13 @@ function MailComposerForm({
18638
18923
  {
18639
18924
  onSuccess: (result) => {
18640
18925
  if (result && typeof result === "object" && "onDevice" in result) {
18641
- notify16("Saved to your Outbox", "info", {
18926
+ notify17("Saved to your Outbox", "info", {
18642
18927
  description: "It will be sent automatically when you're back online."
18643
18928
  });
18644
18929
  onClose();
18645
18930
  return;
18646
18931
  }
18647
- notifySent(notify16, result);
18932
+ notifySent(notify17, result);
18648
18933
  if (localDraftId) void offline?.deleteDraft(localDraftId);
18649
18934
  onClose();
18650
18935
  },
@@ -19334,7 +19619,7 @@ function ConnectedMailbox({
19334
19619
  onGridStateChange,
19335
19620
  initialMessageId = null
19336
19621
  }) {
19337
- const { notify: notify16 } = useBlocksEnvironment();
19622
+ const { notify: notify17 } = useBlocksEnvironment();
19338
19623
  const cache = useMailCache();
19339
19624
  const { client } = useMailClient();
19340
19625
  const [savingToWorkspace, setSavingToWorkspace] = useState(false);
@@ -19552,7 +19837,7 @@ function ConnectedMailbox({
19552
19837
  new File([await response.blob()], fileName, { type: "message/rfc822" })
19553
19838
  );
19554
19839
  setSavingToWorkspace(false);
19555
- notify16(
19840
+ notify17(
19556
19841
  "Email saved to workspace",
19557
19842
  "success",
19558
19843
  documentId && onOpenDocument ? { action: { label: "Open", onClick: () => onOpenDocument(documentId, workspaceId) } } : void 0
@@ -20014,7 +20299,7 @@ function SubscribeDialog({
20014
20299
  timeZone,
20015
20300
  onClose
20016
20301
  }) {
20017
- const { notify: notify16 } = useBlocksEnvironment();
20302
+ const { notify: notify17 } = useBlocksEnvironment();
20018
20303
  const subscribe2 = useSubscribeCalendar();
20019
20304
  const [url, setUrl] = useState("");
20020
20305
  const [name, setName] = useState("");
@@ -20048,7 +20333,7 @@ function SubscribeDialog({
20048
20333
  },
20049
20334
  {
20050
20335
  onSuccess: (cal) => {
20051
- notify16(`Subscribed to \u201C${cal.name ?? "calendar"}\u201D`, "success");
20336
+ notify17(`Subscribed to \u201C${cal.name ?? "calendar"}\u201D`, "success");
20052
20337
  onClose();
20053
20338
  }
20054
20339
  }
@@ -20109,7 +20394,7 @@ function SubscribeDialog({
20109
20394
  }
20110
20395
  function HolidaysDialog({ open, onClose }) {
20111
20396
  const { data: countries = [], isLoading } = useHolidayCountries(open);
20112
- const { notify: notify16 } = useBlocksEnvironment();
20397
+ const { notify: notify17 } = useBlocksEnvironment();
20113
20398
  const add = useAddHolidayCalendar();
20114
20399
  const [country, setCountry] = useState("");
20115
20400
  const [subdivision, setSubdivision] = useState("");
@@ -20137,7 +20422,7 @@ function HolidaysDialog({ open, onClose }) {
20137
20422
  { country, subdivision: subdivision || null },
20138
20423
  {
20139
20424
  onSuccess: (cal) => {
20140
- notify16(`Added \u201C${cal.name ?? "Holidays"}\u201D`, "success");
20425
+ notify17(`Added \u201C${cal.name ?? "Holidays"}\u201D`, "success");
20141
20426
  onClose();
20142
20427
  }
20143
20428
  }
@@ -20232,13 +20517,13 @@ function StatusBadge({ account }) {
20232
20517
  );
20233
20518
  }
20234
20519
  function AccountRow({ account }) {
20235
- const { notify: notify16 } = useBlocksEnvironment();
20520
+ const { notify: notify17 } = useBlocksEnvironment();
20236
20521
  const startOAuth = useStartCalendarAccountOAuth();
20237
20522
  const sync = useSyncCalendarAccount();
20238
20523
  const update = useUpdateCalendarAccount();
20239
20524
  const disconnect = useDisconnectCalendarAccount();
20240
20525
  const [confirming, setConfirming] = useState(false);
20241
- const fail2 = (what) => (err) => notify16(`${what}: ${describeCalendarError(err)}`, "error");
20526
+ const fail2 = (what) => (err) => notify17(`${what}: ${describeCalendarError(err)}`, "error");
20242
20527
  const reconnect = !!startOAuth && account.status === "needs_reauth" && (account.kind === "google" || account.kind === "microsoft");
20243
20528
  return /* @__PURE__ */ jsxs(
20244
20529
  "li",
@@ -20280,7 +20565,7 @@ function AccountRow({ account }) {
20280
20565
  variant: "outline",
20281
20566
  disabled: sync.isPending,
20282
20567
  onClick: () => sync.mutate(account.id, {
20283
- onSuccess: (r) => r?.error ? notify16(`Sync failed: ${describeCalendarError(r.error)}`, "error") : notify16("Calendar synced", "success"),
20568
+ onSuccess: (r) => r?.error ? notify17(`Sync failed: ${describeCalendarError(r.error)}`, "error") : notify17("Calendar synced", "success"),
20284
20569
  onError: fail2("Sync failed")
20285
20570
  }),
20286
20571
  "data-testid": `calendar-account-sync-${account.id}`,
@@ -20350,7 +20635,7 @@ function AccountRow({ account }) {
20350
20635
  );
20351
20636
  }
20352
20637
  function CalDavForm({ onDone }) {
20353
- const { notify: notify16 } = useBlocksEnvironment();
20638
+ const { notify: notify17 } = useBlocksEnvironment();
20354
20639
  const { data: profiles = [] } = useCalDavProfiles();
20355
20640
  const connect = useConnectCalDavAccount();
20356
20641
  const [profileId, setProfileId] = useState("");
@@ -20379,7 +20664,7 @@ function CalDavForm({ onDone }) {
20379
20664
  {
20380
20665
  onSuccess: () => {
20381
20666
  setPassword("");
20382
- notify16("CalDAV account connected", "success");
20667
+ notify17("CalDAV account connected", "success");
20383
20668
  onDone();
20384
20669
  },
20385
20670
  onError: (err) => setError(describeCalendarError(err, "Could not connect"))
@@ -20466,7 +20751,7 @@ function CalDavForm({ onDone }) {
20466
20751
  );
20467
20752
  }
20468
20753
  function CalendarAccountsPanel({ className }) {
20469
- const { notify: notify16 } = useBlocksEnvironment();
20754
+ const { notify: notify17 } = useBlocksEnvironment();
20470
20755
  const { connectors } = useCalendarSupport();
20471
20756
  const startOAuth = useStartCalendarAccountOAuth();
20472
20757
  const { data: accounts = [], isLoading, error } = useCalendarAccounts();
@@ -20476,7 +20761,7 @@ function CalendarAccountsPanel({ className }) {
20476
20761
  const [pendingKind, setPendingKind] = useState(null);
20477
20762
  const [oauthError, setOauthError] = useState(null);
20478
20763
  const resumed = useResumeCalendarAccountConnect(({ account, error: err }) => {
20479
- if (account) notify16(`${KIND_LABEL[account.kind]} connected`, "success");
20764
+ if (account) notify17(`${KIND_LABEL[account.kind]} connected`, "success");
20480
20765
  if (err) setOauthError(describeCalendarError(err, "Could not connect the account"));
20481
20766
  });
20482
20767
  const connect = async (kind) => {
@@ -20486,7 +20771,7 @@ function CalendarAccountsPanel({ className }) {
20486
20771
  const vendors = await connectors?.connectedVendors() ?? [];
20487
20772
  if (vendors.includes(ACCOUNT_VENDOR[kind])) {
20488
20773
  await connectOAuth.mutateAsync({ kind, backgroundSync: background });
20489
- notify16(`${KIND_LABEL[kind]} connected`, "success");
20774
+ notify17(`${KIND_LABEL[kind]} connected`, "success");
20490
20775
  } else {
20491
20776
  await startOAuth?.(kind, background);
20492
20777
  }
@@ -20563,7 +20848,7 @@ function summarizeWeekly(page) {
20563
20848
  return days.map((d) => WEEKDAY_NAMES[d]?.slice(0, 3)).join(", ");
20564
20849
  }
20565
20850
  function BookingPageForm({ page, defaultTimeZone, onDone }) {
20566
- const { notify: notify16 } = useBlocksEnvironment();
20851
+ const { notify: notify17 } = useBlocksEnvironment();
20567
20852
  const copyText = useCalendarCopy();
20568
20853
  const [form, setForm] = useState(
20569
20854
  () => page ? bookingToForm(page) : emptyBookingForm(defaultTimeZone)
@@ -20603,7 +20888,7 @@ function BookingPageForm({ page, defaultTimeZone, onDone }) {
20603
20888
  if (Object.keys(found).length) return;
20604
20889
  save.mutate(formToBookingBody(form), {
20605
20890
  onSuccess: (saved) => {
20606
- notify16(page ? "Booking page saved" : "Booking page published", "success");
20891
+ notify17(page ? "Booking page saved" : "Booking page published", "success");
20607
20892
  if (!page) void copyText(bookingLink(saved), "Booking link");
20608
20893
  onDone();
20609
20894
  },
@@ -20746,7 +21031,7 @@ function BookingPageForm({ page, defaultTimeZone, onDone }) {
20746
21031
  );
20747
21032
  }
20748
21033
  function BookingPagesPanel({ defaultTimeZone, className }) {
20749
- const { notify: notify16 } = useBlocksEnvironment();
21034
+ const { notify: notify17 } = useBlocksEnvironment();
20750
21035
  const copyText = useCalendarCopy();
20751
21036
  const { data: pages = [], isLoading, error } = useBookingPages();
20752
21037
  const { data: settings } = useCalendarSettings(!defaultTimeZone);
@@ -20830,7 +21115,7 @@ function BookingPagesPanel({ defaultTimeZone, className }) {
20830
21115
  variant: "destructive",
20831
21116
  disabled: remove.isPending,
20832
21117
  onClick: () => remove.mutate(p.slug, {
20833
- onError: (err) => notify16(`Could not delete: ${describeCalendarError(err)}`, "error"),
21118
+ onError: (err) => notify17(`Could not delete: ${describeCalendarError(err)}`, "error"),
20834
21119
  onSettled: () => setConfirmDelete(null)
20835
21120
  }),
20836
21121
  children: "Delete"
@@ -20856,7 +21141,7 @@ function BookingPagesPanel({ defaultTimeZone, className }) {
20856
21141
  }
20857
21142
  var selectClass4 = "h-9 w-full rounded-md border border-input bg-background px-2 text-sm text-foreground shadow-sm";
20858
21143
  function CreateRoomForm({ zone, onDone }) {
20859
- const { notify: notify16 } = useBlocksEnvironment();
21144
+ const { notify: notify17 } = useBlocksEnvironment();
20860
21145
  const create2 = useCreateRoom();
20861
21146
  const [name, setName] = useState("");
20862
21147
  const [type, setType] = useState("room");
@@ -20890,7 +21175,7 @@ function CreateRoomForm({ zone, onDone }) {
20890
21175
  },
20891
21176
  {
20892
21177
  onSuccess: (room) => {
20893
- notify16(`Created ${room.name} (${room.email})`, "success");
21178
+ notify17(`Created ${room.name} (${room.email})`, "success");
20894
21179
  onDone();
20895
21180
  },
20896
21181
  onError: (err) => setError(describeCalendarError(err, "Could not create"))
@@ -21185,7 +21470,7 @@ function CalendarSettingsDialog({
21185
21470
  initialTab = "general",
21186
21471
  onClose
21187
21472
  }) {
21188
- const { notify: notify16 } = useBlocksEnvironment();
21473
+ const { notify: notify17 } = useBlocksEnvironment();
21189
21474
  const save = useSaveCalendarSettings();
21190
21475
  const [value, setValue] = useState(() => toSettingsValue(settings));
21191
21476
  const [tab, setTab] = useState(initialTab);
@@ -21235,7 +21520,7 @@ function CalendarSettingsDialog({
21235
21520
  onCancel: onClose,
21236
21521
  onSave: () => save.mutate({ ...settings, ...value }, {
21237
21522
  onSuccess: () => {
21238
- notify16("Calendar settings saved", "success");
21523
+ notify17("Calendar settings saved", "success");
21239
21524
  onClose();
21240
21525
  }
21241
21526
  })
@@ -21257,7 +21542,7 @@ function EventScheduling({
21257
21542
  workingStartHour = 7
21258
21543
  }) {
21259
21544
  const [open, setOpen] = useState(false);
21260
- const { notify: notify16 } = useBlocksEnvironment();
21545
+ const { notify: notify17 } = useBlocksEnvironment();
21261
21546
  const arbi = useArbi();
21262
21547
  const me = arbi.isLoggedIn ? arbi.user.identity()?.email ?? null : null;
21263
21548
  const allDay = isAllDayDraft(draft);
@@ -21350,7 +21635,7 @@ function EventScheduling({
21350
21635
  },
21351
21636
  {
21352
21637
  onSuccess: (s) => setSuggestions(toSuggestionViews(s)),
21353
- onError: (err) => notify16(`Could not find times: ${err.message}`, "error")
21638
+ onError: (err) => notify17(`Could not find times: ${err.message}`, "error")
21354
21639
  }
21355
21640
  ),
21356
21641
  onPickSuggestion: (s) => {
@@ -21381,7 +21666,7 @@ function EventEditorDialog({
21381
21666
  const { data: documents } = useConnectedDocuments();
21382
21667
  const { data: workspaces = [] } = useWorkspaces({ enabled: live });
21383
21668
  const uploadFiles = useUploadFiles();
21384
- const { notify: notify16, runtimeConfig } = useBlocksEnvironment();
21669
+ const { notify: notify17, runtimeConfig } = useBlocksEnvironment();
21385
21670
  const attachmentDocuments = documents.map((document2) => ({
21386
21671
  doc_id: document2.external_id,
21387
21672
  title: toWorkflowFieldDocument(document2).title,
@@ -21401,7 +21686,7 @@ function EventEditorDialog({
21401
21686
  generateTagIds: []
21402
21687
  });
21403
21688
  if (skipped.length) {
21404
- notify16(`Could not attach ${skipped.map((item) => item.file_name).join(", ")}`, "warning");
21689
+ notify17(`Could not attach ${skipped.map((item) => item.file_name).join(", ")}`, "warning");
21405
21690
  }
21406
21691
  const skippedNames = new Set(skipped.map((item) => item.file_name));
21407
21692
  return files.filter((file) => !skippedNames.has(file.name)).slice(0, docIds.length).map((file, index) => ({
@@ -21497,14 +21782,14 @@ function proposed(inv, zone) {
21497
21782
  return `${formatInZone(su, zone, { weekday: "short", day: "numeric", month: "short", hour: "numeric", minute: "2-digit" })} \u2013 ${formatInZone(eu, zone, { hour: "numeric", minute: "2-digit" })}`;
21498
21783
  }
21499
21784
  function InvitationsPanel({ timeZone, onOpenEvent }) {
21500
- const { notify: notify16 } = useBlocksEnvironment();
21785
+ const { notify: notify17 } = useBlocksEnvironment();
21501
21786
  const { data: items = [], refetch } = useCalendarInvitations();
21502
21787
  const respond = useRespondToEvent();
21503
21788
  const decide = useDecideCounter();
21504
21789
  const [open, setOpen] = useState(false);
21505
21790
  const [notes, setNotes] = useState({});
21506
21791
  const [proposeFor, setProposeFor] = useState(null);
21507
- const fail2 = (err) => notify16(`Could not send: ${err.message}`, "error");
21792
+ const fail2 = (err) => notify17(`Could not send: ${err.message}`, "error");
21508
21793
  const answer = (inv, partstat) => respond.mutate(
21509
21794
  { id: inv.event_id ?? inv.id, partstat, comment: notes[inv.id]?.trim() || null },
21510
21795
  { onError: fail2 }
@@ -21667,7 +21952,7 @@ function InvitationsPanel({ timeZone, onOpenEvent }) {
21667
21952
  {
21668
21953
  onSuccess: () => {
21669
21954
  setProposeFor(null);
21670
- notify16("New time proposed to the organiser", "success");
21955
+ notify17("New time proposed to the organiser", "success");
21671
21956
  },
21672
21957
  onError: fail2
21673
21958
  }
@@ -21684,7 +21969,7 @@ function PublishCalendarDialog({
21684
21969
  onClose,
21685
21970
  onConnectAccount
21686
21971
  }) {
21687
- const { notify: notify16 } = useBlocksEnvironment();
21972
+ const { notify: notify17 } = useBlocksEnvironment();
21688
21973
  const { data: accounts = [], isLoading } = useCalendarAccounts(!!calendarId);
21689
21974
  const publish = usePublishCalendar();
21690
21975
  const [accountId, setAccountId] = useState("");
@@ -21736,7 +22021,7 @@ function PublishCalendarDialog({
21736
22021
  { accountId: chosen, calendarId },
21737
22022
  {
21738
22023
  onSuccess: () => {
21739
- notify16("Calendar published", "success");
22024
+ notify17("Calendar published", "success");
21740
22025
  onClose();
21741
22026
  }
21742
22027
  }
@@ -21761,13 +22046,13 @@ function ShareCalendarDialog({
21761
22046
  calendarName,
21762
22047
  onClose
21763
22048
  }) {
21764
- const { notify: notify16 } = useBlocksEnvironment();
22049
+ const { notify: notify17 } = useBlocksEnvironment();
21765
22050
  const { data: shares = [], isLoading } = useCalendarShares(calendarId);
21766
22051
  const share = useShareCalendar();
21767
22052
  const unshare = useUnshareCalendar();
21768
22053
  const [email, setEmail] = useState("");
21769
22054
  const [role, setRole] = useState("read");
21770
- const fail2 = (err) => notify16(`Could not update sharing: ${err.message}`, "error");
22055
+ const fail2 = (err) => notify17(`Could not update sharing: ${err.message}`, "error");
21771
22056
  const add = () => {
21772
22057
  const grantee = email.trim().toLowerCase();
21773
22058
  if (!calendarId || !grantee) return;
@@ -22100,10 +22385,10 @@ function ConnectedCalendar({
22100
22385
  } = {}) {
22101
22386
  const connectedCalls = useConnectedCalendarCalls();
22102
22387
  const calls = hostCalls === void 0 ? connectedCalls : hostCalls ?? void 0;
22103
- const { confirm, notify: notify16, openConversation } = useBlocksEnvironment();
22388
+ const { confirm, notify: notify17, openConversation } = useBlocksEnvironment();
22104
22389
  const arbi = useArbi();
22105
22390
  const fetchEvent = useFetchCalendarEvent();
22106
- const notifyError = (prefix, err) => notify16(`${prefix}: ${errorText3(err)}`, "error");
22391
+ const notifyError = (prefix, err) => notify17(`${prefix}: ${errorText3(err)}`, "error");
22107
22392
  const isPhone = useIsPhone2();
22108
22393
  const { data: settingsData } = useCalendarSettings();
22109
22394
  const settings = settingsData ?? FALLBACK_SETTINGS;
@@ -22207,7 +22492,7 @@ function ConnectedCalendar({
22207
22492
  };
22208
22493
  useSyncAccountsOnOpen(syncAccountsOnOpen);
22209
22494
  useResumeCalendarAccountConnect(({ account, error }) => {
22210
- if (account) notify16("Calendar account connected", "success");
22495
+ if (account) notify17("Calendar account connected", "success");
22211
22496
  if (error) notifyError("Could not connect the account", error);
22212
22497
  });
22213
22498
  const [shareFor, setShareFor] = useState(null);
@@ -22391,7 +22676,7 @@ function ConnectedCalendar({
22391
22676
  shareCall(draft);
22392
22677
  setEditor(null);
22393
22678
  if (isQueuedCalendarWrite(event2))
22394
- notify16("Saved on this device \u2014 it syncs when you are back online", "info");
22679
+ notify17("Saved on this device \u2014 it syncs when you are back online", "info");
22395
22680
  else setDate(utcToDate(event2.start_utc, zone));
22396
22681
  },
22397
22682
  onError: (err) => setEditor((e) => e ? { ...e, error: errorText3(err) } : e)
@@ -22426,7 +22711,7 @@ function ConnectedCalendar({
22426
22711
  saveWebinarRoles(editor.original, draft);
22427
22712
  }
22428
22713
  setEditor(null);
22429
- if (queued) notify16("Saved on this device \u2014 it syncs when you are back online", "info");
22714
+ if (queued) notify17("Saved on this device \u2014 it syncs when you are back online", "info");
22430
22715
  } catch (err) {
22431
22716
  setEditor((e) => e ? { ...e, error: errorText3(err) } : e);
22432
22717
  }
@@ -22479,7 +22764,7 @@ function ConnectedCalendar({
22479
22764
  const result = await importCalendar.mutateAsync({ ics, calendarId: importTarget.current });
22480
22765
  const parts = [`${result.created} added`, `${result.updated} updated`];
22481
22766
  if (result.skipped) parts.push(`${result.skipped} skipped`);
22482
- notify16(`Imported: ${parts.join(", ")}`, result.errors?.length ? "warning" : "success");
22767
+ notify17(`Imported: ${parts.join(", ")}`, result.errors?.length ? "warning" : "success");
22483
22768
  } catch (err) {
22484
22769
  notifyError("Import failed", err);
22485
22770
  }
@@ -22578,7 +22863,7 @@ function ConnectedCalendar({
22578
22863
  onDelete: (id) => void onDeleteCalendar(id),
22579
22864
  onShare: (id) => setShareFor(id),
22580
22865
  onRefresh: (id) => refreshCalendar.mutate(id, {
22581
- onSuccess: () => notify16("Calendar refreshed", "success"),
22866
+ onSuccess: () => notify17("Calendar refreshed", "success"),
22582
22867
  onError: (err) => notifyError("Could not refresh", err)
22583
22868
  }),
22584
22869
  onPublish: (id) => setPublishFor(id),
@@ -22830,7 +23115,7 @@ function ConnectedCalendar({
22830
23115
  {
22831
23116
  onSuccess: () => {
22832
23117
  setProposeFor(null);
22833
- notify16("New time proposed to the organiser", "success");
23118
+ notify17("New time proposed to the organiser", "success");
22834
23119
  },
22835
23120
  onError: (err) => notifyError("Could not send the proposal", err)
22836
23121
  }
@@ -22853,7 +23138,7 @@ function ConnectedMailInviteCard({
22853
23138
  isOnline,
22854
23139
  onOpenEvent
22855
23140
  }) {
22856
- const { notify: notify16 } = useBlocksEnvironment();
23141
+ const { notify: notify17 } = useBlocksEnvironment();
22857
23142
  const part = attachments.find(isCalendarAttachment);
22858
23143
  const { data: settings } = useCalendarSettings(!!part);
22859
23144
  const zone = safeZone(settings?.time_zone, detectTimeZone());
@@ -22881,7 +23166,7 @@ function ConnectedMailInviteCard({
22881
23166
  { id: event.id, partstat: p },
22882
23167
  {
22883
23168
  onSuccess: (updated) => setPartstat(isQueuedCalendarWrite(updated) ? p : updated.my_partstat ?? p),
22884
- onError: (err) => notify16(`Could not send your response: ${err.message}`, "error")
23169
+ onError: (err) => notify17(`Could not send your response: ${err.message}`, "error")
22885
23170
  }
22886
23171
  );
22887
23172
  return /* @__PURE__ */ jsxs(
@@ -23543,7 +23828,7 @@ function useAddFromUrls({
23543
23828
  configExtId,
23544
23829
  onZipFiles
23545
23830
  } = {}) {
23546
- const { notify: notify16 } = useBlocksEnvironment();
23831
+ const { notify: notify17 } = useBlocksEnvironment();
23547
23832
  const { workspaceId } = useConnectedWorkspace();
23548
23833
  const uploadFromUrls = useUploadFromUrls();
23549
23834
  return useCallback(
@@ -23558,36 +23843,36 @@ function useAddFromUrls({
23558
23843
  const { docIds, skipped, zipFiles, oversizedInZips, failedZipUrls } = result;
23559
23844
  if (zipFiles.length > 0) {
23560
23845
  onZipFiles?.(zipFiles);
23561
- notify16(
23846
+ notify17(
23562
23847
  `Extracted ${zipFiles.length} ${plural2(zipFiles.length, "file")} from ZIP. Click Add files to send.`,
23563
23848
  "success"
23564
23849
  );
23565
23850
  }
23566
23851
  if (oversizedInZips.length > 0)
23567
- notify16(
23852
+ notify17(
23568
23853
  `Skipped ${oversizedInZips.length} oversized ${plural2(oversizedInZips.length, "file")} inside ZIP archives.`,
23569
23854
  "warning"
23570
23855
  );
23571
23856
  if (failedZipUrls.length > 0)
23572
- notify16(
23857
+ notify17(
23573
23858
  `Failed to fetch ${failedZipUrls.length} ZIP ${plural2(failedZipUrls.length, "URL")}. Browser CORS may block third-party hosts \u2014 try a CORS-enabled URL.`,
23574
23859
  "error"
23575
23860
  );
23576
23861
  if (skipped.length > 0)
23577
- notify16(
23862
+ notify17(
23578
23863
  `${skipped.length} ${plural2(skipped.length, "URL was", "URLs were")} skipped:
23579
23864
  ${skipped.map((s) => `${s.file_name}: ${s.reason}`).join("\n")}`,
23580
23865
  "warning"
23581
23866
  );
23582
23867
  if (docIds.length > 0)
23583
- notify16(
23868
+ notify17(
23584
23869
  `Upload complete (${docIds.length} ${plural2(docIds.length, "document")}). Indexing in the background...`,
23585
23870
  "success",
23586
23871
  { workspaceId }
23587
23872
  );
23588
23873
  return true;
23589
23874
  },
23590
- [workspaceId, uploadFromUrls, shared, configExtId, onZipFiles, notify16]
23875
+ [workspaceId, uploadFromUrls, shared, configExtId, onZipFiles, notify17]
23591
23876
  );
23592
23877
  }
23593
23878
  var DEFAULTS = {
@@ -23679,7 +23964,7 @@ function ConnectedUpload({
23679
23964
  renderFooter,
23680
23965
  processingSettings = false
23681
23966
  }) {
23682
- const { notify: notify16 } = useBlocksEnvironment();
23967
+ const { notify: notify17 } = useBlocksEnvironment();
23683
23968
  const { openUpgrade } = useDocumentHostActions();
23684
23969
  const { workspaceId, live } = useConnectedWorkspace();
23685
23970
  const { data: workspaces } = useWorkspaces({ enabled: live });
@@ -23703,19 +23988,19 @@ function ConnectedUpload({
23703
23988
  const fresh = chosen.filter((file) => !names.has(file.name));
23704
23989
  const duplicates = chosen.length - fresh.length;
23705
23990
  if (duplicates > 0)
23706
- notify16(`Skipped ${duplicates} duplicate file${duplicates > 1 ? "s" : ""}`, "info");
23991
+ notify17(`Skipped ${duplicates} duplicate file${duplicates > 1 ? "s" : ""}`, "info");
23707
23992
  return [...current, ...fresh];
23708
23993
  }),
23709
- [notify16]
23994
+ [notify17]
23710
23995
  );
23711
23996
  const fail2 = useCallback(
23712
23997
  (message, toast = true) => {
23713
23998
  setError(message);
23714
- if (toast) notify16(message, "error");
23999
+ if (toast) notify17(message, "error");
23715
24000
  setUploading(null);
23716
24001
  setProgress(null);
23717
24002
  },
23718
- [notify16]
24003
+ [notify17]
23719
24004
  );
23720
24005
  const handleUpload = useCallback(async () => {
23721
24006
  if (files.length === 0 || !workspaceId) return;
@@ -23729,7 +24014,7 @@ function ConnectedUpload({
23729
24014
  if (skipped.length > 0) {
23730
24015
  const summary = skipped.map((s) => `${s.file_name}: ${s.reason}`).join("\n");
23731
24016
  const quota = skipped.some((s) => /quota|limit/i.test(s.reason ?? ""));
23732
- notify16(
24017
+ notify17(
23733
24018
  `${skipped.length} ${skipped.length === 1 ? "file was" : "files were"} skipped:
23734
24019
  ${summary}`,
23735
24020
  "warning",
@@ -23739,7 +24024,7 @@ ${summary}`,
23739
24024
  setFiles([]);
23740
24025
  if (docIds.length > 0) {
23741
24026
  const ai = generateTagIds.length > 0 ? " AI annotations queued." : "";
23742
- notify16(
24027
+ notify17(
23743
24028
  `Uploaded ${docIds.length} ${docIds.length === 1 ? "file" : "files"}. Processing in background...${ai}`,
23744
24029
  "success",
23745
24030
  { workspaceId }
@@ -23765,7 +24050,7 @@ ${summary}`,
23765
24050
  shared,
23766
24051
  configExtId,
23767
24052
  generateTagIds,
23768
- notify16,
24053
+ notify17,
23769
24054
  openUpgrade,
23770
24055
  onUploadComplete,
23771
24056
  closeOnUpload,
@@ -24016,7 +24301,7 @@ var createTagComparator = (tagType) => {
24016
24301
  function createTagColumn({
24017
24302
  tag,
24018
24303
  isMember,
24019
- notify: notify16,
24304
+ notify: notify17,
24020
24305
  createDocTag,
24021
24306
  updateDocTag,
24022
24307
  deleteDocTag
@@ -24093,18 +24378,18 @@ function createTagColumn({
24093
24378
  tagId: tag.external_id,
24094
24379
  docIds: [doc.external_id]
24095
24380
  }).then(() => {
24096
- notify16(`Applied "${tag.name}" to 1 document`, "success");
24381
+ notify17(`Applied "${tag.name}" to 1 document`, "success");
24097
24382
  }).catch(() => {
24098
- notify16("Failed to apply tag", "error");
24383
+ notify17("Failed to apply tag", "error");
24099
24384
  });
24100
24385
  } else if (!newValue2 && doctag) {
24101
24386
  deleteDocTag.mutateAsync({
24102
24387
  tagId: tag.external_id,
24103
24388
  docIds: [doc.external_id]
24104
24389
  }).then(() => {
24105
- notify16(`Removed "${tag.name}" from 1 document`, "success");
24390
+ notify17(`Removed "${tag.name}" from 1 document`, "success");
24106
24391
  }).catch(() => {
24107
- notify16("Failed to remove tag", "error");
24392
+ notify17("Failed to remove tag", "error");
24108
24393
  });
24109
24394
  }
24110
24395
  return true;
@@ -24117,7 +24402,7 @@ function createTagColumn({
24117
24402
  if (tag.tag_type.type === "number" && newValue !== "") {
24118
24403
  const numValue = Number(newValue);
24119
24404
  if (isNaN(numValue)) {
24120
- notify16("Please enter a valid number", "error");
24405
+ notify17("Please enter a valid number", "error");
24121
24406
  return false;
24122
24407
  }
24123
24408
  }
@@ -24126,9 +24411,9 @@ function createTagColumn({
24126
24411
  tagId: tag.external_id,
24127
24412
  docIds: [doc.external_id]
24128
24413
  }).then(() => {
24129
- notify16(`Cleared "${tag.name}" from 1 document`, "success");
24414
+ notify17(`Cleared "${tag.name}" from 1 document`, "success");
24130
24415
  }).catch(() => {
24131
- notify16("Failed to clear value", "error");
24416
+ notify17("Failed to clear value", "error");
24132
24417
  });
24133
24418
  } else if (newValue !== "" && doctag) {
24134
24419
  updateDocTag.mutateAsync({
@@ -24136,9 +24421,9 @@ function createTagColumn({
24136
24421
  docId: doc.external_id,
24137
24422
  note: newValue
24138
24423
  }).then(() => {
24139
- notify16(`Updated "${tag.name}" for 1 document`, "success");
24424
+ notify17(`Updated "${tag.name}" for 1 document`, "success");
24140
24425
  }).catch(() => {
24141
- notify16("Failed to update value", "error");
24426
+ notify17("Failed to update value", "error");
24142
24427
  });
24143
24428
  } else if (newValue !== "" && !doctag) {
24144
24429
  createDocTag.mutateAsync({
@@ -24146,9 +24431,9 @@ function createTagColumn({
24146
24431
  docIds: [doc.external_id],
24147
24432
  note: newValue
24148
24433
  }).then(() => {
24149
- notify16(`Set "${tag.name}" for 1 document`, "success");
24434
+ notify17(`Set "${tag.name}" for 1 document`, "success");
24150
24435
  }).catch(() => {
24151
- notify16("Failed to set value", "error");
24436
+ notify17("Failed to set value", "error");
24152
24437
  });
24153
24438
  }
24154
24439
  return true;
@@ -24176,7 +24461,7 @@ function createDocumentColumns({
24176
24461
  deleteDocTag,
24177
24462
  createTag,
24178
24463
  onToggleShared,
24179
- notify: notify16
24464
+ notify: notify17
24180
24465
  }) {
24181
24466
  const isRowEditableByOwner = (params) => canChangeVisibility(params.data, currentUserExtId);
24182
24467
  const isRowEditableByMember = (params) => canEditDocumentFields(params.data, currentUserExtId, workspaceRole);
@@ -24755,7 +25040,7 @@ function createDocumentColumns({
24755
25040
  (tag) => createTagColumn({
24756
25041
  tag,
24757
25042
  isMember,
24758
- notify: notify16,
25043
+ notify: notify17,
24759
25044
  createDocTag,
24760
25045
  updateDocTag,
24761
25046
  deleteDocTag
@@ -24815,7 +25100,7 @@ function useDocumentTable({
24815
25100
  currentUserExtId,
24816
25101
  workspaceRole
24817
25102
  }) {
24818
- const { notify: notify16 } = useBlocksEnvironment();
25103
+ const { notify: notify17 } = useBlocksEnvironment();
24819
25104
  const { openDocumentChat } = useDocumentHostActions();
24820
25105
  const updateDocumentMutation = useUpdateDocuments();
24821
25106
  const updateDocRef = useRef(updateDocumentMutation);
@@ -24926,8 +25211,8 @@ function useDocumentTable({
24926
25211
  const toggleShared = useCallback((docId, shared) => {
24927
25212
  updateDocRef.current.mutate({ documents: [{ external_id: docId, shared }] });
24928
25213
  }, []);
24929
- const notifyRef = useRef(notify16);
24930
- notifyRef.current = notify16;
25214
+ const notifyRef = useRef(notify17);
25215
+ notifyRef.current = notify17;
24931
25216
  const tagNotify = useCallback(
24932
25217
  (message, kind) => notifyRef.current(message, kind),
24933
25218
  []
@@ -24948,7 +25233,7 @@ function useDocumentTable({
24948
25233
  }
24949
25234
  ]
24950
25235
  });
24951
- notify16(`Updated title for "${docTitle}"`, "success");
25236
+ notify17(`Updated title for "${docTitle}"`, "success");
24952
25237
  } else if (event.column.getColId() === "doc_date") {
24953
25238
  const newValue = event.newValue?.trim();
24954
25239
  if (!newValue || newValue === "") {
@@ -24960,17 +25245,17 @@ function useDocumentTable({
24960
25245
  }
24961
25246
  ]
24962
25247
  });
24963
- notify16(`Cleared date for "${docTitle}"`, "success");
25248
+ notify17(`Cleared date for "${docTitle}"`, "success");
24964
25249
  return;
24965
25250
  }
24966
25251
  if (!/^\d{4}-\d{2}-\d{2}$/.test(newValue)) {
24967
- notify16("Please enter date in YYYY-MM-DD format (e.g., 2024-11-24)", "error");
25252
+ notify17("Please enter date in YYYY-MM-DD format (e.g., 2024-11-24)", "error");
24968
25253
  event.node.setDataValue("doc_date", event.oldValue);
24969
25254
  return;
24970
25255
  }
24971
25256
  const date = new Date(newValue);
24972
25257
  if (isNaN(date.getTime())) {
24973
- notify16("Please enter a valid date in YYYY-MM-DD format (e.g., 2024-11-24)", "error");
25258
+ notify17("Please enter a valid date in YYYY-MM-DD format (e.g., 2024-11-24)", "error");
24974
25259
  event.node.setDataValue("doc_date", event.oldValue);
24975
25260
  return;
24976
25261
  }
@@ -24982,7 +25267,7 @@ function useDocumentTable({
24982
25267
  }
24983
25268
  ]
24984
25269
  });
24985
- notify16(`Updated date for "${docTitle}"`, "success");
25270
+ notify17(`Updated date for "${docTitle}"`, "success");
24986
25271
  } else if (event.column.getColId() === "doc_nature") {
24987
25272
  updateDocumentMutation.mutate({
24988
25273
  documents: [
@@ -24992,7 +25277,7 @@ function useDocumentTable({
24992
25277
  }
24993
25278
  ]
24994
25279
  });
24995
- notify16(`Updated type for "${docTitle}"`, "success");
25280
+ notify17(`Updated type for "${docTitle}"`, "success");
24996
25281
  } else if (event.column.getColId() === "doc_author") {
24997
25282
  updateDocumentMutation.mutate({
24998
25283
  documents: [
@@ -25002,7 +25287,7 @@ function useDocumentTable({
25002
25287
  }
25003
25288
  ]
25004
25289
  });
25005
- notify16(`Updated author for "${docTitle}"`, "success");
25290
+ notify17(`Updated author for "${docTitle}"`, "success");
25006
25291
  } else if (event.column.getColId() === "doc_subject") {
25007
25292
  updateDocumentMutation.mutate({
25008
25293
  documents: [
@@ -25012,7 +25297,7 @@ function useDocumentTable({
25012
25297
  }
25013
25298
  ]
25014
25299
  });
25015
- notify16(`Updated abstract for "${docTitle}"`, "success");
25300
+ notify17(`Updated abstract for "${docTitle}"`, "success");
25016
25301
  } else if (event.column.getColId() === "folder") {
25017
25302
  updateDocumentMutation.mutate({
25018
25303
  documents: [
@@ -25022,10 +25307,10 @@ function useDocumentTable({
25022
25307
  }
25023
25308
  ]
25024
25309
  });
25025
- notify16(`Updated folder for "${docTitle}"`, "success");
25310
+ notify17(`Updated folder for "${docTitle}"`, "success");
25026
25311
  }
25027
25312
  },
25028
- [updateDocumentMutation, notify16]
25313
+ [updateDocumentMutation, notify17]
25029
25314
  );
25030
25315
  const memoizedAvailableTags = useMemo(() => {
25031
25316
  return availableTagsRef.current;
@@ -25085,7 +25370,7 @@ function useDocumentTable({
25085
25370
  var BULK_REPROCESS_LIMIT = 100;
25086
25371
  var plural4 = (count2) => `${count2} document${count2 === 1 ? "" : "s"}`;
25087
25372
  function useDocumentBulkActions(selectedDocuments) {
25088
- const { notify: notify16 } = useBlocksEnvironment();
25373
+ const { notify: notify17 } = useBlocksEnvironment();
25089
25374
  const { data: cached } = useDocuments();
25090
25375
  const { mutateAsync: updateDocuments } = useUpdateDocuments();
25091
25376
  const { mutateAsync: deleteDocuments } = useDeleteDocuments();
@@ -25102,7 +25387,7 @@ function useDocumentBulkActions(selectedDocuments) {
25102
25387
  "DOCUMENT",
25103
25388
  selectedDocuments.length === 1 ? "SINGULAR" : "PLURAL"
25104
25389
  );
25105
- return notify16(
25390
+ return notify17(
25106
25391
  `All selected ${docs.toLowerCase()} are already visible to ${getEntityLabel("WORKSPACE", "SINGULAR")} ${getEntityLabel("WORKSPACEUSER", "PLURAL").toLowerCase()}`,
25107
25392
  "info"
25108
25393
  );
@@ -25111,36 +25396,36 @@ function useDocumentBulkActions(selectedDocuments) {
25111
25396
  await updateDocuments({
25112
25397
  documents: toShare.map((doc) => ({ external_id: doc.external_id, shared: true }))
25113
25398
  });
25114
- notify16(`Shared ${plural4(toShare.length)}`, "success");
25399
+ notify17(`Shared ${plural4(toShare.length)}`, "success");
25115
25400
  } catch {
25116
- notify16("Failed to share documents. Please try again.", "error");
25401
+ notify17("Failed to share documents. Please try again.", "error");
25117
25402
  }
25118
- }, [freshSelectedDocuments, selectedDocuments.length, updateDocuments, notify16]);
25403
+ }, [freshSelectedDocuments, selectedDocuments.length, updateDocuments, notify17]);
25119
25404
  const makePrivate = useCallback(async () => {
25120
25405
  const toHide = freshSelectedDocuments.filter((doc) => doc.shared);
25121
- if (toHide.length === 0) return notify16("None of the selected documents are shared", "info");
25406
+ if (toHide.length === 0) return notify17("None of the selected documents are shared", "info");
25122
25407
  try {
25123
25408
  await updateDocuments({
25124
25409
  documents: toHide.map((doc) => ({ external_id: doc.external_id, shared: false }))
25125
25410
  });
25126
- notify16(`Unshared ${plural4(toHide.length)}`, "success");
25411
+ notify17(`Unshared ${plural4(toHide.length)}`, "success");
25127
25412
  } catch {
25128
- notify16("Failed to unshare documents. Please try again.", "error");
25413
+ notify17("Failed to unshare documents. Please try again.", "error");
25129
25414
  }
25130
- }, [freshSelectedDocuments, updateDocuments, notify16]);
25415
+ }, [freshSelectedDocuments, updateDocuments, notify17]);
25131
25416
  const remove = useCallback(async () => {
25132
25417
  if (selectedDocuments.length === 0) return;
25133
25418
  try {
25134
25419
  await deleteDocuments(selectedDocuments.map((doc) => doc.external_id));
25135
- notify16(`Deleted ${plural4(selectedDocuments.length)}`, "success");
25420
+ notify17(`Deleted ${plural4(selectedDocuments.length)}`, "success");
25136
25421
  } catch {
25137
- notify16("Failed to delete documents. Please try again.", "error");
25422
+ notify17("Failed to delete documents. Please try again.", "error");
25138
25423
  }
25139
- }, [selectedDocuments, deleteDocuments, notify16]);
25424
+ }, [selectedDocuments, deleteDocuments, notify17]);
25140
25425
  const reprocess = useCallback(async () => {
25141
25426
  if (selectedDocuments.length === 0) return;
25142
25427
  if (selectedDocuments.length > BULK_REPROCESS_LIMIT) {
25143
- return notify16(
25428
+ return notify17(
25144
25429
  `Reprocess is limited to ${BULK_REPROCESS_LIMIT} documents at a time. Select ${BULK_REPROCESS_LIMIT} or fewer and try again.`,
25145
25430
  "error"
25146
25431
  );
@@ -25155,11 +25440,11 @@ function useDocumentBulkActions(selectedDocuments) {
25155
25440
  ...settings?.last_config ? { config_ext_id: settings.last_config } : {}
25156
25441
  }))
25157
25442
  });
25158
- notify16(`Reprocessing ${plural4(selectedDocuments.length)}`, "success");
25443
+ notify17(`Reprocessing ${plural4(selectedDocuments.length)}`, "success");
25159
25444
  } catch {
25160
- notify16("Failed to reprocess documents. Please try again.", "error");
25445
+ notify17("Failed to reprocess documents. Please try again.", "error");
25161
25446
  }
25162
- }, [selectedDocuments, updateDocuments, settings?.last_config, notify16]);
25447
+ }, [selectedDocuments, updateDocuments, settings?.last_config, notify17]);
25163
25448
  return { freshSelectedDocuments, share, makePrivate, remove, reprocess };
25164
25449
  }
25165
25450
  function namedTargets(documents) {
@@ -25998,7 +26283,7 @@ function ConnectedAiReview({
25998
26283
  tag: startTag,
25999
26284
  allDocuments = false
26000
26285
  }) {
26001
- const { confirm, choose, notify: notify16 } = useBlocksEnvironment();
26286
+ const { confirm, choose, notify: notify17 } = useBlocksEnvironment();
26002
26287
  const [instruction, setInstruction] = useState("");
26003
26288
  const [submitting, setSubmitting] = useState(false);
26004
26289
  const [target, setTarget] = useState(null);
@@ -26118,7 +26403,7 @@ function ConnectedAiReview({
26118
26403
  const codedIds = new Set(coded.map((d) => d.external_id));
26119
26404
  docsToReview = documents.filter((d) => !codedIds.has(d.external_id));
26120
26405
  if (docsToReview.length === 0) {
26121
- notify16(`All selected documents already have a value for "${target.name}"`, "info");
26406
+ notify17(`All selected documents already have a value for "${target.name}"`, "info");
26122
26407
  return;
26123
26408
  }
26124
26409
  }
@@ -26156,7 +26441,7 @@ function ConnectedAiReview({
26156
26441
  await generate.mutateAsync({ tagIds: [newId], docIds, overwrite });
26157
26442
  setResult({ tags: [{ id: newId, name: fieldName }], docIds, replacing: overwrite });
26158
26443
  } catch {
26159
- notify16("Could not start the review", "error");
26444
+ notify17("Could not start the review", "error");
26160
26445
  } finally {
26161
26446
  setSubmitting(false);
26162
26447
  }
@@ -26299,7 +26584,7 @@ function useAiReviewLiveUpdates() {
26299
26584
  }
26300
26585
  var AI_FIELDS_NOTICE_WINDOW_MS = 500;
26301
26586
  function useBatchCompleteToasts() {
26302
- const { notify: notify16, openTags } = useBlocksEnvironment();
26587
+ const { notify: notify17, openTags } = useBlocksEnvironment();
26303
26588
  const { data: workspaces } = useWorkspaces();
26304
26589
  const workspacesRef = useRef(workspaces);
26305
26590
  workspacesRef.current = workspaces;
@@ -26317,7 +26602,7 @@ function useBatchCompleteToasts() {
26317
26602
  const docIds = message.doc_ext_ids ?? [];
26318
26603
  const workspace = workspacesRef.current?.find((w) => w.external_id === workspaceId);
26319
26604
  const icon2 = workspace ? createElement(ConnectedWorkspaceEntity, { workspace, variant: "icon", size: 20 }) : void 0;
26320
- const say = (text2, kind, options2 = {}) => notify16(text2, kind, { workspaceId, icon: icon2, ...options2, ambient: false });
26605
+ const say = (text2, kind, options2 = {}) => notify17(text2, kind, { workspaceId, icon: icon2, ...options2, ambient: false });
26321
26606
  if (message.batch_type === "doctag_generate") {
26322
26607
  const run = pending.current.get(workspaceId) ?? { docIds: /* @__PURE__ */ new Set(), icon: icon2 };
26323
26608
  for (const id of docIds) run.docIds.add(id);
@@ -26330,7 +26615,7 @@ function useBatchCompleteToasts() {
26330
26615
  const hasReview = !!useAiReviewStore.getState().run;
26331
26616
  for (const [id, entry] of runs) {
26332
26617
  const n = entry.docIds.size;
26333
- notify16(
26618
+ notify17(
26334
26619
  `AI annotation run finished for ${n} document${n !== 1 ? "s" : ""}. Check the table for blank fields.`,
26335
26620
  "info",
26336
26621
  {
@@ -26366,7 +26651,7 @@ function ConnectedMoveToFolder({
26366
26651
  documents,
26367
26652
  onMoved
26368
26653
  }) {
26369
- const { notify: notify16 } = useBlocksEnvironment();
26654
+ const { notify: notify17 } = useBlocksEnvironment();
26370
26655
  const renameFolder = useRenameFolder();
26371
26656
  const [targetFolder, setTargetFolder] = useState(void 0);
26372
26657
  const [isSubmitting, setIsSubmitting] = useState(false);
@@ -26395,7 +26680,7 @@ function ConnectedMoveToFolder({
26395
26680
  const newPrefixSegments = targetFolder ? [...parseFolderSegments(targetFolder), folderToMove.name] : [folderToMove.name];
26396
26681
  await renameFolder(docsInFolder, folderToMove.path, newPrefixSegments);
26397
26682
  const dest = targetFolder ? `"${targetFolder}/${folderToMove.name}"` : `"${folderToMove.name}" (root)`;
26398
- notify16(`Moved folder to ${dest}`, "success");
26683
+ notify17(`Moved folder to ${dest}`, "success");
26399
26684
  } else {
26400
26685
  if (selectedDocuments.length === 0) return;
26401
26686
  await updateDocument.mutateAsync({
@@ -26406,12 +26691,12 @@ function ConnectedMoveToFolder({
26406
26691
  });
26407
26692
  const folderLabel = targetFolder || "None";
26408
26693
  const count2 = selectedDocuments.length;
26409
- notify16(`Moved ${count2} document${count2 === 1 ? "" : "s"} to "${folderLabel}"`, "success");
26694
+ notify17(`Moved ${count2} document${count2 === 1 ? "" : "s"} to "${folderLabel}"`, "success");
26410
26695
  }
26411
26696
  onClose();
26412
26697
  if (!folderToMove) onMoved?.();
26413
26698
  } catch {
26414
- notify16("Failed to move. Please try again.", "error");
26699
+ notify17("Failed to move. Please try again.", "error");
26415
26700
  } finally {
26416
26701
  setIsSubmitting(false);
26417
26702
  }
@@ -26451,7 +26736,7 @@ function useFieldsApply({
26451
26736
  target,
26452
26737
  onAiFieldsApplied
26453
26738
  }) {
26454
- const { notify: notify16, choose } = useBlocksEnvironment();
26739
+ const { notify: notify17, choose } = useBlocksEnvironment();
26455
26740
  const [isApplying, setIsApplying] = useState(false);
26456
26741
  const [isClearing, setIsClearing] = useState(false);
26457
26742
  const assign = useAssignDocTags();
@@ -26465,13 +26750,13 @@ function useFieldsApply({
26465
26750
  setIsApplying(true);
26466
26751
  try {
26467
26752
  await target.apply(tagIds);
26468
- notify16(
26753
+ notify17(
26469
26754
  `Applied ${count(tagIds.length, nouns)} to ${count(targetIds.length, targetNoun)}`,
26470
26755
  "success"
26471
26756
  );
26472
26757
  return true;
26473
26758
  } catch {
26474
- notify16(`Failed to apply ${nouns.plural}`, "error");
26759
+ notify17(`Failed to apply ${nouns.plural}`, "error");
26475
26760
  return false;
26476
26761
  } finally {
26477
26762
  setIsApplying(false);
@@ -26526,20 +26811,20 @@ function useFieldsApply({
26526
26811
  applied.push({ id: tagId, name: tagById.get(tagId)?.name ?? "Field" });
26527
26812
  }
26528
26813
  if (applied.length === 0) {
26529
- notify16("Nothing to apply \u2014 the selected documents already have these values", "info");
26814
+ notify17("Nothing to apply \u2014 the selected documents already have these values", "info");
26530
26815
  return false;
26531
26816
  }
26532
26817
  if (appliedAiField && onAiFieldsApplied) {
26533
26818
  onAiFieldsApplied({ tags: applied, docIds: [...targetIds] });
26534
26819
  } else {
26535
- notify16(
26820
+ notify17(
26536
26821
  `Applied ${count(applied.length, { singular: "field", plural: "fields" })} to ` + count(targetIds.length, { singular: "document", plural: "documents" }),
26537
26822
  "success"
26538
26823
  );
26539
26824
  }
26540
26825
  return true;
26541
26826
  } catch {
26542
- notify16("Failed to apply fields", "error");
26827
+ notify17("Failed to apply fields", "error");
26543
26828
  return false;
26544
26829
  } finally {
26545
26830
  setIsApplying(false);
@@ -26547,7 +26832,7 @@ function useFieldsApply({
26547
26832
  },
26548
26833
  [
26549
26834
  choose,
26550
- notify16,
26835
+ notify17,
26551
26836
  target,
26552
26837
  nouns,
26553
26838
  targetNoun,
@@ -26566,13 +26851,13 @@ function useFieldsApply({
26566
26851
  setIsClearing(true);
26567
26852
  try {
26568
26853
  await target.clear(tagIds);
26569
- notify16(
26854
+ notify17(
26570
26855
  `Cleared ${count(tagIds.length, nouns)} from ${count(targetIds.length, targetNoun)}`,
26571
26856
  "success"
26572
26857
  );
26573
26858
  return true;
26574
26859
  } catch {
26575
- notify16(`Failed to clear ${nouns.plural}`, "error");
26860
+ notify17(`Failed to clear ${nouns.plural}`, "error");
26576
26861
  return false;
26577
26862
  } finally {
26578
26863
  setIsClearing(false);
@@ -26596,22 +26881,22 @@ function useFieldsApply({
26596
26881
  docIds.forEach((id) => clearedDocIds.add(id));
26597
26882
  }
26598
26883
  if (cleared.length === 0) {
26599
- notify16("Nothing to clear \u2014 the selected documents do not have these fields", "info");
26884
+ notify17("Nothing to clear \u2014 the selected documents do not have these fields", "info");
26600
26885
  return false;
26601
26886
  }
26602
- notify16(
26887
+ notify17(
26603
26888
  `Cleared ${count(cleared.length, { singular: "field", plural: "fields" })} from ` + count(clearedDocIds.size, { singular: "document", plural: "documents" }),
26604
26889
  "success"
26605
26890
  );
26606
26891
  return true;
26607
26892
  } catch {
26608
- notify16("Failed to clear fields", "error");
26893
+ notify17("Failed to clear fields", "error");
26609
26894
  return false;
26610
26895
  } finally {
26611
26896
  setIsClearing(false);
26612
26897
  }
26613
26898
  },
26614
- [notify16, target, nouns, targetNoun, targetIds, tags, workspaceDocs, remove]
26899
+ [notify17, target, nouns, targetNoun, targetIds, tags, workspaceDocs, remove]
26615
26900
  );
26616
26901
  return { apply, clear, isApplying, isClearing };
26617
26902
  }
@@ -26620,7 +26905,7 @@ function useFieldWrites({
26620
26905
  tags,
26621
26906
  nouns
26622
26907
  }) {
26623
- const { notify: notify16, confirm } = useBlocksEnvironment();
26908
+ const { notify: notify17, confirm } = useBlocksEnvironment();
26624
26909
  const { data: workspaceTags = [] } = useTags();
26625
26910
  const createTag = useCreateTag();
26626
26911
  const updateTag = useUpdateTag();
@@ -26638,22 +26923,22 @@ function useFieldWrites({
26638
26923
  parentId: data.parent_ext_id ?? null
26639
26924
  });
26640
26925
  } catch (error) {
26641
- notify16(refusalReason(error, `Could not create "${data.name}"`), "error");
26926
+ notify17(refusalReason(error, `Could not create "${data.name}"`), "error");
26642
26927
  return null;
26643
26928
  }
26644
26929
  const message = `Created ${nouns.singular} "${data.name}"`;
26645
- notify16(
26930
+ notify17(
26646
26931
  data.instruction ? `${message}. Add it to documents to have the AI fill it in.` : message,
26647
26932
  "success"
26648
26933
  );
26649
26934
  return created.external_id;
26650
26935
  },
26651
- [createTag, notify16, nouns.singular]
26936
+ [createTag, notify17, nouns.singular]
26652
26937
  );
26653
26938
  const update = useCallback(
26654
26939
  (tagId, data) => {
26655
26940
  if (wouldCreateTagCycle(workspaceTags, tagId, data.parent_ext_id)) {
26656
- notify16(`"${data.name}" cannot be nested under one of its own nested fields`, "error");
26941
+ notify17(`"${data.name}" cannot be nested under one of its own nested fields`, "error");
26657
26942
  return;
26658
26943
  }
26659
26944
  updateTag.mutate(
@@ -26668,36 +26953,36 @@ function useFieldWrites({
26668
26953
  ...data.parent_ext_id ? { parent_ext_id: data.parent_ext_id } : {}
26669
26954
  }
26670
26955
  },
26671
- { onSuccess: () => notify16(`Updated ${nouns.singular} "${data.name}"`, "success") }
26956
+ { onSuccess: () => notify17(`Updated ${nouns.singular} "${data.name}"`, "success") }
26672
26957
  );
26673
26958
  },
26674
- [updateTag, workspaceTags, notify16, nouns.singular]
26959
+ [updateTag, workspaceTags, notify17, nouns.singular]
26675
26960
  );
26676
26961
  const rename = useCallback(
26677
26962
  async (tag, name) => {
26678
26963
  if (!name || name === tag.name) return;
26679
26964
  try {
26680
26965
  await updateTag.mutateAsync({ tagId: tag.external_id, change: { name } });
26681
- notify16(`Renamed ${nouns.singular} to "${name}"`, "success");
26966
+ notify17(`Renamed ${nouns.singular} to "${name}"`, "success");
26682
26967
  } catch {
26683
- notify16(`Failed to rename ${nouns.singular}`, "error");
26968
+ notify17(`Failed to rename ${nouns.singular}`, "error");
26684
26969
  }
26685
26970
  },
26686
- [updateTag, notify16, nouns.singular]
26971
+ [updateTag, notify17, nouns.singular]
26687
26972
  );
26688
26973
  const toggleShared = useCallback(
26689
26974
  async (tag) => {
26690
26975
  try {
26691
26976
  await updateTag.mutateAsync({ tagId: tag.external_id, change: { shared: !tag.shared } });
26692
- notify16(
26977
+ notify17(
26693
26978
  `${capitalised(nouns.singular)} "${tag.name}" ${!tag.shared ? "shared" : "unshared"}`,
26694
26979
  "success"
26695
26980
  );
26696
26981
  } catch {
26697
- notify16("Failed to update sharing status", "error");
26982
+ notify17("Failed to update sharing status", "error");
26698
26983
  }
26699
26984
  },
26700
- [updateTag, notify16, nouns.singular]
26985
+ [updateTag, notify17, nouns.singular]
26701
26986
  );
26702
26987
  const removeMany = useCallback(
26703
26988
  async (tagIds) => {
@@ -26722,14 +27007,14 @@ ${nested.length} nested ${nested.length === 1 ? "field moves" : "fields move"} t
26722
27007
  failed += 1;
26723
27008
  }
26724
27009
  }
26725
- if (failed === 0) notify16(`Deleted ${doomed.length} ${noun}`, "success");
27010
+ if (failed === 0) notify17(`Deleted ${doomed.length} ${noun}`, "success");
26726
27011
  else
26727
- notify16(
27012
+ notify17(
26728
27013
  `Deleted ${doomed.length - failed} of ${doomed.length} ${noun} \u2014 ${failed} failed`,
26729
27014
  "error"
26730
27015
  );
26731
27016
  },
26732
- [confirm, notify16, deleteTag, tags, workspaceTags, nouns]
27017
+ [confirm, notify17, deleteTag, tags, workspaceTags, nouns]
26733
27018
  );
26734
27019
  return { create: create2, update, rename, toggleShared, removeMany };
26735
27020
  }
@@ -27059,7 +27344,7 @@ function ConnectedFieldsManager({
27059
27344
  ] });
27060
27345
  }
27061
27346
  function useApplyBulkTagChanges() {
27062
- const { notify: notify16 } = useBlocksEnvironment();
27347
+ const { notify: notify17 } = useBlocksEnvironment();
27063
27348
  const { data: documents = [] } = useDocuments();
27064
27349
  const assign = useAssignDocTags();
27065
27350
  const remove = useRemoveDocTags();
@@ -27097,14 +27382,14 @@ function useApplyBulkTagChanges() {
27097
27382
  const succeeded = results.length - failed;
27098
27383
  if (failed === 0) {
27099
27384
  if (addTags.length > 0 && removeTags.length === 0)
27100
- notify16(`Applied "${tagName}" to ${documentIds.length} ${documentLabel}`, "success");
27385
+ notify17(`Applied "${tagName}" to ${documentIds.length} ${documentLabel}`, "success");
27101
27386
  else if (removeTags.length > 0 && addTags.length === 0)
27102
- notify16(`Removed "${tagName}" from ${documentIds.length} ${documentLabel}`, "success");
27103
- else notify16(`Updated annotations for ${documentIds.length} ${documentLabel}`, "success");
27387
+ notify17(`Removed "${tagName}" from ${documentIds.length} ${documentLabel}`, "success");
27388
+ else notify17(`Updated annotations for ${documentIds.length} ${documentLabel}`, "success");
27104
27389
  } else if (succeeded > 0) {
27105
- notify16(`Updated ${succeeded} ${documentLabel}, but ${failed} failed`, "warning");
27390
+ notify17(`Updated ${succeeded} ${documentLabel}, but ${failed} failed`, "warning");
27106
27391
  } else {
27107
- notify16("Failed to update annotations", "error");
27392
+ notify17("Failed to update annotations", "error");
27108
27393
  }
27109
27394
  };
27110
27395
  }
@@ -27114,7 +27399,7 @@ function ConnectedBulkTagEditor({
27114
27399
  onClose,
27115
27400
  breadcrumb
27116
27401
  }) {
27117
- const { notify: notify16 } = useBlocksEnvironment();
27402
+ const { notify: notify17 } = useBlocksEnvironment();
27118
27403
  const { openFieldsManager } = useDocumentHostActions();
27119
27404
  const { data: workspaceTags = [] } = useTags();
27120
27405
  const generate = useGenerateDocTags();
@@ -27173,13 +27458,13 @@ function ConnectedBulkTagEditor({
27173
27458
  setIsGenerating(true);
27174
27459
  try {
27175
27460
  await generate.mutateAsync({ tagIds, docIds, overwrite: false });
27176
- notify16(
27461
+ notify17(
27177
27462
  `Generating ${tagCount} field${tagCount !== 1 ? "s" : ""} for ${docIds.length} document${docIds.length !== 1 ? "s" : ""}...`,
27178
27463
  "info"
27179
27464
  );
27180
27465
  setSelectedForGeneration(/* @__PURE__ */ new Set());
27181
27466
  } catch {
27182
- notify16("Failed to start AI generation", "error");
27467
+ notify17("Failed to start AI generation", "error");
27183
27468
  } finally {
27184
27469
  setIsGenerating(false);
27185
27470
  }
@@ -27213,7 +27498,7 @@ function ConnectedBulkTagEditor({
27213
27498
  }
27214
27499
  setIsDeletingBeforeGenerate(false);
27215
27500
  if (failed.length > 0)
27216
- notify16(
27501
+ notify17(
27217
27502
  `Failed to clear some existing values for: ${failed.join(", ")}. These will be skipped.`,
27218
27503
  "warning"
27219
27504
  );
@@ -27468,7 +27753,7 @@ function ViewSelector({
27468
27753
  defaultTileSize,
27469
27754
  stateVersion
27470
27755
  }) {
27471
- const { confirm, notify: notify16 } = useBlocksEnvironment();
27756
+ const { confirm, notify: notify17 } = useBlocksEnvironment();
27472
27757
  const { savedViews, workspaceId, saveView, deleteView, isSaving } = useTableViews(null);
27473
27758
  const builtins = useMemo(
27474
27759
  () => [
@@ -27506,9 +27791,9 @@ function ViewSelector({
27506
27791
  const onSaveView = useCallback(
27507
27792
  async (view) => {
27508
27793
  await saveView(view);
27509
- notify16(`Saved view "${view.name}"`, "success");
27794
+ notify17(`Saved view "${view.name}"`, "success");
27510
27795
  },
27511
- [saveView, notify16]
27796
+ [saveView, notify17]
27512
27797
  );
27513
27798
  const onDeleteView = useCallback(
27514
27799
  async (name) => {
@@ -27516,10 +27801,10 @@ function ViewSelector({
27516
27801
  if (!await confirm({ message: `Delete view "${name}"?`, title: "Delete View" }))
27517
27802
  return false;
27518
27803
  await deleteView(name);
27519
- notify16(`Deleted view "${name}"`, "success");
27804
+ notify17(`Deleted view "${name}"`, "success");
27520
27805
  return true;
27521
27806
  },
27522
- [confirm, workspaceId, deleteView, notify16]
27807
+ [confirm, workspaceId, deleteView, notify17]
27523
27808
  );
27524
27809
  const menu = useGridViews({
27525
27810
  getGridApi,
@@ -27841,10 +28126,10 @@ var TABLET_TABLE_BELOW = 860;
27841
28126
  var TABLET_VIEWPORT_BELOW = 1100;
27842
28127
  var NO_CONVERSATION_DOCUMENTS = [];
27843
28128
  var DocumentReviewCard = lazy(
27844
- () => import('../DocumentReviewCard-TQQADJ36.js').then((module) => ({ default: module.DocumentReviewCard }))
28129
+ () => import('../DocumentReviewCard-5U3TGJZA.js').then((module) => ({ default: module.DocumentReviewCard }))
27845
28130
  );
27846
28131
  var ConnectedDocumentViewer = lazy(
27847
- () => import('../ConnectedDocumentViewer-XFQDHVWM.js').then((module) => ({
28132
+ () => import('../ConnectedDocumentViewer-NIZBKBJN.js').then((module) => ({
27848
28133
  default: module.ConnectedDocumentViewer
27849
28134
  }))
27850
28135
  );
@@ -28647,7 +28932,7 @@ function ConnectedGridView(props) {
28647
28932
  }
28648
28933
  function useEmailSyncTrigger() {
28649
28934
  const arbi = useArbi();
28650
- const { notify: notify16 } = useBlocksEnvironment();
28935
+ const { notify: notify17 } = useBlocksEnvironment();
28651
28936
  const triggerSync = useTriggerMailboxSync();
28652
28937
  const runSync = useCallback(
28653
28938
  async ({
@@ -28666,32 +28951,32 @@ function useEmailSyncTrigger() {
28666
28951
  onSuccess: (res) => {
28667
28952
  const n = res?.estimated_count;
28668
28953
  if (n === 0) {
28669
- notify16("You\u2019re up to date \u2014 no new emails to sync.", "success");
28954
+ notify17("You\u2019re up to date \u2014 no new emails to sync.", "success");
28670
28955
  } else if (n != null && n > 0) {
28671
- notify16(
28956
+ notify17(
28672
28957
  `Fetching ${n} new email${n === 1 ? "" : "s"} to ${workspaceLabel}.`,
28673
28958
  "success"
28674
28959
  );
28675
28960
  } else {
28676
- notify16("Sync started \u2014 fetching new emails\u2026", "success");
28961
+ notify17("Sync started \u2014 fetching new emails\u2026", "success");
28677
28962
  }
28678
28963
  },
28679
28964
  onError: (err) => {
28680
28965
  if (connectorErrorStatus(err) === 425) {
28681
- notify16("Still preparing your session \u2014 please try Sync now again.", "error");
28966
+ notify17("Still preparing your session \u2014 please try Sync now again.", "error");
28682
28967
  } else if (connectorErrorStatus(err) === 409) {
28683
- notify16("Reconnect needed \u2014 your account needs to be re-authorized.", "error");
28968
+ notify17("Reconnect needed \u2014 your account needs to be re-authorized.", "error");
28684
28969
  } else if (connectorErrorStatus(err) === 404) {
28685
- notify16("Email sync is not enabled for this connector yet.", "error");
28970
+ notify17("Email sync is not enabled for this connector yet.", "error");
28686
28971
  } else {
28687
- notify16("Could not start sync. Please try again.", "error");
28972
+ notify17("Could not start sync. Please try again.", "error");
28688
28973
  }
28689
28974
  }
28690
28975
  }
28691
28976
  );
28692
28977
  },
28693
28978
  // eslint-disable-next-line react-hooks/exhaustive-deps -- triggerSync.mutate is a stable TanStack Query reference
28694
- [arbi, notify16, triggerSync.mutate]
28979
+ [arbi, notify17, triggerSync.mutate]
28695
28980
  );
28696
28981
  return { runSync, isPending: triggerSync.isPending };
28697
28982
  }
@@ -28922,7 +29207,7 @@ function EmailImportPanel({
28922
29207
  googleExtra
28923
29208
  }) {
28924
29209
  const arbi = useArbi();
28925
- const { confirm, notify: notify16 } = useBlocksEnvironment();
29210
+ const { confirm, notify: notify17 } = useBlocksEnvironment();
28926
29211
  const { data: catalog = [] } = useConnectorCatalog();
28927
29212
  const { data: myConnectors = [] } = useMyConnectors();
28928
29213
  const disconnect = useDisconnectConnector();
@@ -28945,7 +29230,7 @@ function EmailImportPanel({
28945
29230
  connectorReturnTo("accounts")
28946
29231
  );
28947
29232
  } catch {
28948
- notify16("Could not start the connection. Please try again.", "error");
29233
+ notify17("Could not start the connection. Please try again.", "error");
28949
29234
  }
28950
29235
  };
28951
29236
  const reconnectFamily = async (vendorKey) => {
@@ -28959,7 +29244,7 @@ function EmailImportPanel({
28959
29244
  connectorReturnTo("accounts")
28960
29245
  );
28961
29246
  } catch {
28962
- notify16("Could not start reconnection. Please try again.", "error");
29247
+ notify17("Could not start reconnection. Please try again.", "error");
28963
29248
  }
28964
29249
  };
28965
29250
  const extraByFamily = {
@@ -28983,9 +29268,9 @@ function EmailImportPanel({
28983
29268
  }
28984
29269
  }
28985
29270
  }
28986
- notify16(`Disconnected ${family.label}`, "success");
29271
+ notify17(`Disconnected ${family.label}`, "success");
28987
29272
  },
28988
- [confirm, disconnect, connectedByVendor, notify16]
29273
+ [confirm, disconnect, connectedByVendor, notify17]
28989
29274
  );
28990
29275
  const groups = PROVIDER_FAMILIES.map((family) => {
28991
29276
  const entries = family.vendors.map((v) => byVendor[v]).filter(Boolean);
@@ -29032,7 +29317,7 @@ function EmailImportPanel({
29032
29317
  }
29033
29318
  function useDriveSyncTrigger() {
29034
29319
  const arbi = useArbi();
29035
- const { notify: notify16 } = useBlocksEnvironment();
29320
+ const { notify: notify17 } = useBlocksEnvironment();
29036
29321
  const triggerSync = useTriggerDriveSync();
29037
29322
  const runSync = useCallback(
29038
29323
  async ({
@@ -29051,32 +29336,32 @@ function useDriveSyncTrigger() {
29051
29336
  onSuccess: (res) => {
29052
29337
  const n = res?.estimated_count;
29053
29338
  if (n === 0) {
29054
- notify16("You\u2019re up to date \u2014 no new documents to sync.", "success");
29339
+ notify17("You\u2019re up to date \u2014 no new documents to sync.", "success");
29055
29340
  } else if (n != null && n > 0) {
29056
- notify16(
29341
+ notify17(
29057
29342
  `Fetching ${n} new document${n === 1 ? "" : "s"} to ${workspaceLabel}.`,
29058
29343
  "success"
29059
29344
  );
29060
29345
  } else {
29061
- notify16("Sync started \u2014 fetching new documents\u2026", "success");
29346
+ notify17("Sync started \u2014 fetching new documents\u2026", "success");
29062
29347
  }
29063
29348
  },
29064
29349
  onError: (err) => {
29065
29350
  if (connectorErrorStatus(err) === 425) {
29066
- notify16("Still preparing your session \u2014 please try Sync now again.", "error");
29351
+ notify17("Still preparing your session \u2014 please try Sync now again.", "error");
29067
29352
  } else if (connectorErrorStatus(err) === 409) {
29068
- notify16("Reconnect needed \u2014 your account needs to be re-authorized.", "error");
29353
+ notify17("Reconnect needed \u2014 your account needs to be re-authorized.", "error");
29069
29354
  } else if (connectorErrorStatus(err) === 404) {
29070
- notify16("Drive sync is not enabled for this connector yet.", "error");
29355
+ notify17("Drive sync is not enabled for this connector yet.", "error");
29071
29356
  } else {
29072
- notify16("Could not start sync. Please try again.", "error");
29357
+ notify17("Could not start sync. Please try again.", "error");
29073
29358
  }
29074
29359
  }
29075
29360
  }
29076
29361
  );
29077
29362
  },
29078
29363
  // eslint-disable-next-line react-hooks/exhaustive-deps -- triggerSync.mutate is a stable TanStack Query reference
29079
- [arbi, notify16, triggerSync.mutate]
29364
+ [arbi, notify17, triggerSync.mutate]
29080
29365
  );
29081
29366
  return { runSync, isPending: triggerSync.isPending };
29082
29367
  }
@@ -29113,7 +29398,7 @@ function OneDriveProviderRow({
29113
29398
  const { runSync, isPending: syncPending } = useDriveSyncTrigger();
29114
29399
  const cancelSync = useCancelDriveSync();
29115
29400
  const arbi = useArbi();
29116
- const { notify: notify16 } = useBlocksEnvironment();
29401
+ const { notify: notify17 } = useBlocksEnvironment();
29117
29402
  const isConnected = !!userConnector?.is_connected;
29118
29403
  const product = driveProduct(catalog.vendor_key);
29119
29404
  const status = userConnector?.drive_sync_status ?? null;
@@ -29167,9 +29452,9 @@ function OneDriveProviderRow({
29167
29452
  const importedMsg = `Imported ${s.ingested} of ${total} document${total === 1 ? "" : "s"} from ${product.name}.`;
29168
29453
  const skipped = s.skipped ?? [];
29169
29454
  if (skipped.length === 0) {
29170
- notify16(importedMsg, "success");
29455
+ notify17(importedMsg, "success");
29171
29456
  } else {
29172
- notify16(`${importedMsg} ${skipped.length} couldn\u2019t be imported:`, "warning", {
29457
+ notify17(`${importedMsg} ${skipped.length} couldn\u2019t be imported:`, "warning", {
29173
29458
  duration: 12e3,
29174
29459
  description: /* @__PURE__ */ jsx("ul", { className: "mt-1 max-h-56 space-y-0.5 overflow-y-auto pr-1 text-xs", children: skipped.map((f, i) => /* @__PURE__ */ jsxs("li", { className: "break-all", children: [
29175
29460
  /* @__PURE__ */ jsx("span", { className: "font-medium", children: f.name }),
@@ -29181,7 +29466,7 @@ function OneDriveProviderRow({
29181
29466
  });
29182
29467
  }
29183
29468
  void refetchEstimate();
29184
- }, [progress, refetchEstimate, product.name, notify16]);
29469
+ }, [progress, refetchEstimate, product.name, notify17]);
29185
29470
  const pendingCount = estimate?.estimated_count;
29186
29471
  const busy = syncPending;
29187
29472
  const ownsAuth = catalog.vendor_key === "microsoft_sharepoint";
@@ -29195,7 +29480,7 @@ function OneDriveProviderRow({
29195
29480
  );
29196
29481
  } catch {
29197
29482
  setReauthPending(false);
29198
- notify16("Could not start reconnection. Please try again.", "error");
29483
+ notify17("Could not start reconnection. Please try again.", "error");
29199
29484
  }
29200
29485
  };
29201
29486
  const kickProgressPolling = () => {
@@ -29332,7 +29617,7 @@ function SharePointEnableRow({
29332
29617
  sharePointAdminUrl
29333
29618
  }) {
29334
29619
  const arbi = useArbi();
29335
- const { notify: notify16 } = useBlocksEnvironment();
29620
+ const { notify: notify17 } = useBlocksEnvironment();
29336
29621
  const [pending, setPending] = useState(false);
29337
29622
  const product = driveProduct(catalog.vendor_key);
29338
29623
  const enable = async () => {
@@ -29344,7 +29629,7 @@ function SharePointEnableRow({
29344
29629
  );
29345
29630
  } catch {
29346
29631
  setPending(false);
29347
- notify16("Could not start the connection. Please try again.", "error");
29632
+ notify17("Could not start the connection. Please try again.", "error");
29348
29633
  }
29349
29634
  };
29350
29635
  const copyAdminLink = async () => {
@@ -29352,9 +29637,9 @@ function SharePointEnableRow({
29352
29637
  if (!link) return;
29353
29638
  try {
29354
29639
  await navigator.clipboard.writeText(link);
29355
- notify16("Approval link copied \u2014 send it to your Microsoft admin.", "success");
29640
+ notify17("Approval link copied \u2014 send it to your Microsoft admin.", "success");
29356
29641
  } catch {
29357
- notify16(`Copy this link for your Microsoft admin: ${link}`, "info");
29642
+ notify17(`Copy this link for your Microsoft admin: ${link}`, "info");
29358
29643
  }
29359
29644
  };
29360
29645
  return /* @__PURE__ */ jsx(
@@ -29543,7 +29828,7 @@ function ConnectedDocumentProcessingPanel({
29543
29828
  workspaceId,
29544
29829
  onError
29545
29830
  }) {
29546
- const { notify: notify16 } = useBlocksEnvironment();
29831
+ const { notify: notify17 } = useBlocksEnvironment();
29547
29832
  const {
29548
29833
  allTasks,
29549
29834
  clearTask,
@@ -29613,13 +29898,13 @@ function ConnectedDocumentProcessingPanel({
29613
29898
  (taskId) => {
29614
29899
  clearTask(taskId);
29615
29900
  deleteDocumentMutation.mutate([taskId], {
29616
- onSuccess: () => notify16("Document deleted", "success"),
29901
+ onSuccess: () => notify17("Document deleted", "success"),
29617
29902
  // Usually means there was no live document (orphaned failed upload) —
29618
29903
  // the row is already dismissed, so log quietly instead of alarming.
29619
29904
  onError: (error) => onError?.(`Error deleting document ${taskId}`, error)
29620
29905
  });
29621
29906
  },
29622
- [clearTask, deleteDocumentMutation, notify16, onError]
29907
+ [clearTask, deleteDocumentMutation, notify17, onError]
29623
29908
  );
29624
29909
  const inFlight = useMemo(() => [...processing, ...queued], [processing, queued]);
29625
29910
  const handleCancelAll = useCallback(() => {
@@ -29632,7 +29917,7 @@ function ConnectedDocumentProcessingPanel({
29632
29917
  const liveDocIds = new Set(documents.map((d) => d.external_id));
29633
29918
  const realIds = ids.filter((id) => liveDocIds.has(id));
29634
29919
  ids.forEach((id) => clearTask(id));
29635
- const done = () => notify16(`Stopped and removed ${ids.length} document${ids.length === 1 ? "" : "s"}`, "success");
29920
+ const done = () => notify17(`Stopped and removed ${ids.length} document${ids.length === 1 ? "" : "s"}`, "success");
29636
29921
  if (realIds.length === 0) {
29637
29922
  done();
29638
29923
  return;
@@ -29641,7 +29926,7 @@ function ConnectedDocumentProcessingPanel({
29641
29926
  onSuccess: done,
29642
29927
  onError: (error) => onError?.("Error cancelling jobs", error)
29643
29928
  });
29644
- }, [inFlight, documents, clearTask, deleteDocumentMutation, notify16, onError]);
29929
+ }, [inFlight, documents, clearTask, deleteDocumentMutation, notify17, onError]);
29645
29930
  const finishedCount = completed.length + failed.length + skipped.length;
29646
29931
  const handleClearHistory = useCallback(() => clearCompletedTasks(), [clearCompletedTasks]);
29647
29932
  return /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
@@ -29791,7 +30076,7 @@ function DatabaseViewsMenu({
29791
30076
  gridApi,
29792
30077
  columns
29793
30078
  }) {
29794
- const { confirm, notify: notify16 } = useBlocksEnvironment();
30079
+ const { confirm, notify: notify17 } = useBlocksEnvironment();
29795
30080
  const stateVersion = useArbiSessionState((state) => state.grid.states[gridId]);
29796
30081
  const { savedViews, ready, saveView, deleteView, importViews, isSaving } = useTableViews(databaseId);
29797
30082
  useMoveLocalViews(gridId, ready, importViews);
@@ -29808,19 +30093,19 @@ function DatabaseViewsMenu({
29808
30093
  const onSaveView = useCallback(
29809
30094
  async (view) => {
29810
30095
  await saveView(view);
29811
- notify16(`Saved view "${view.name}"`, "success");
30096
+ notify17(`Saved view "${view.name}"`, "success");
29812
30097
  },
29813
- [saveView, notify16]
30098
+ [saveView, notify17]
29814
30099
  );
29815
30100
  const onDeleteView = useCallback(
29816
30101
  async (name) => {
29817
30102
  if (!await confirm({ message: `Delete view "${name}"?`, title: "Delete View" }))
29818
30103
  return false;
29819
30104
  await deleteView(name);
29820
- notify16(`Deleted view "${name}"`, "success");
30105
+ notify17(`Deleted view "${name}"`, "success");
29821
30106
  return true;
29822
30107
  },
29823
- [confirm, deleteView, notify16]
30108
+ [confirm, deleteView, notify17]
29824
30109
  );
29825
30110
  const menu = useGridViews({
29826
30111
  getGridApi,
@@ -29870,9 +30155,9 @@ var toRowView = (r) => ({
29870
30155
  values: { ...r.values },
29871
30156
  titles: { ...r.titles ?? {} }
29872
30157
  });
29873
- var fail = (notify16, error, fallback) => notify16(refusalReason(error, fallback), "error");
30158
+ var fail = (notify17, error, fallback) => notify17(refusalReason(error, fallback), "error");
29874
30159
  function OpenDatabase({ databaseId, onClose }) {
29875
- const { confirm, notify: notify16 } = useBlocksEnvironment();
30160
+ const { confirm, notify: notify17 } = useBlocksEnvironment();
29876
30161
  const session = useArbiSessionStore();
29877
30162
  const {
29878
30163
  data: database,
@@ -29933,10 +30218,10 @@ function OpenDatabase({ databaseId, onClose }) {
29933
30218
  const readOnly = !(database?.editable ?? true);
29934
30219
  useEffect(() => {
29935
30220
  if (databaseError) {
29936
- fail(notify16, databaseError, "This database could not be opened");
30221
+ fail(notify17, databaseError, "This database could not be opened");
29937
30222
  onClose();
29938
30223
  }
29939
- }, [databaseError, onClose, notify16]);
30224
+ }, [databaseError, onClose, notify17]);
29940
30225
  const onCellChange = useCallback(
29941
30226
  (row2, columnId, value) => {
29942
30227
  updateRow.mutate(
@@ -29950,12 +30235,12 @@ function OpenDatabase({ databaseId, onClose }) {
29950
30235
  setRows((current) => current.map((r) => r.id === saved.id ? toRowView(saved) : r));
29951
30236
  },
29952
30237
  onError: (error) => {
29953
- fail(notify16, error, "The cell could not be saved");
30238
+ fail(notify17, error, "The cell could not be saved");
29954
30239
  }
29955
30240
  }
29956
30241
  );
29957
30242
  },
29958
- [databaseId, updateRow, notify16]
30243
+ [databaseId, updateRow, notify17]
29959
30244
  );
29960
30245
  const onAddRow = useCallback(() => {
29961
30246
  addRows.mutate(
@@ -29967,10 +30252,10 @@ function OpenDatabase({ databaseId, onClose }) {
29967
30252
  const have = new Set(current.map((r) => r.id));
29968
30253
  return [...current, ...created.filter((r) => !have.has(r.id)).map(toRowView)];
29969
30254
  }),
29970
- onError: (error) => fail(notify16, error, "The row could not be added")
30255
+ onError: (error) => fail(notify17, error, "The row could not be added")
29971
30256
  }
29972
30257
  );
29973
- }, [databaseId, addRows, notify16]);
30258
+ }, [databaseId, addRows, notify17]);
29974
30259
  const saveColumns = (next, done) => {
29975
30260
  setColumnError(null);
29976
30261
  updateDatabase.mutate(
@@ -30003,7 +30288,7 @@ function OpenDatabase({ databaseId, onClose }) {
30003
30288
  };
30004
30289
  const onRename = (name) => updateDatabase.mutate(
30005
30290
  { databaseId, patch: { name } },
30006
- { onError: (error) => fail(notify16, error, "Could not rename") }
30291
+ { onError: (error) => fail(notify17, error, "Could not rename") }
30007
30292
  );
30008
30293
  const removeRows = async (doomed, onDone) => {
30009
30294
  const n = doomed.length;
@@ -30022,7 +30307,7 @@ function OpenDatabase({ databaseId, onClose }) {
30022
30307
  onDone?.();
30023
30308
  },
30024
30309
  onError: (error) => fail(
30025
- notify16,
30310
+ notify17,
30026
30311
  error,
30027
30312
  n === 1 ? "The row could not be deleted" : "The rows could not be deleted"
30028
30313
  )
@@ -30039,7 +30324,7 @@ function OpenDatabase({ databaseId, onClose }) {
30039
30324
  if (!ok) return;
30040
30325
  deleteDatabase.mutate(databaseId, {
30041
30326
  onSuccess: onClose,
30042
- onError: (error) => fail(notify16, error, "The database could not be deleted")
30327
+ onError: (error) => fail(notify17, error, "The database could not be deleted")
30043
30328
  });
30044
30329
  };
30045
30330
  const onImportRows = (file) => importRows.mutate(
@@ -30047,9 +30332,9 @@ function OpenDatabase({ databaseId, onClose }) {
30047
30332
  {
30048
30333
  onSuccess: (result) => {
30049
30334
  const added = result.added_columns?.length ? ` and ${result.added_columns.length} new column(s)` : "";
30050
- notify16(`Imported ${result.imported} row(s)${added} from ${file.name}`, "success");
30335
+ notify17(`Imported ${result.imported} row(s)${added} from ${file.name}`, "success");
30051
30336
  },
30052
- onError: (error) => fail(notify16, error, `${file.name} could not be imported`)
30337
+ onError: (error) => fail(notify17, error, `${file.name} could not be imported`)
30053
30338
  }
30054
30339
  );
30055
30340
  const onExport = async (format) => {
@@ -30057,7 +30342,7 @@ function OpenDatabase({ databaseId, onClose }) {
30057
30342
  const blob = await exportDatabase(databaseId, format);
30058
30343
  downloadBlob(blob, `${database?.name || "database"}.${format}`);
30059
30344
  } catch (error) {
30060
- fail(notify16, error, "The export failed");
30345
+ fail(notify17, error, "The export failed");
30061
30346
  }
30062
30347
  };
30063
30348
  const total = page?.total ?? database?.row_count ?? 0;
@@ -30166,7 +30451,7 @@ var NO_WORKSPACE_LABELS = {
30166
30451
  emptyMessage: "Databases are kept in a workspace. Open one to see its databases, and those shared with everyone, or to create one."
30167
30452
  };
30168
30453
  function ConnectedDatabasesPage() {
30169
- const { notify: notify16 } = useBlocksEnvironment();
30454
+ const { notify: notify17 } = useBlocksEnvironment();
30170
30455
  const selectedWorkspaceId = useArbiSessionState((state) => state.workspaceId);
30171
30456
  const { data: databases, isLoading } = useDatabases();
30172
30457
  const [openId, setOpenId] = useState(null);
@@ -30198,10 +30483,10 @@ function ConnectedDatabasesPage() {
30198
30483
  { file },
30199
30484
  {
30200
30485
  onSuccess: (result) => {
30201
- notify16(`Imported ${result.imported} row(s) from ${file.name}`, "success");
30486
+ notify17(`Imported ${result.imported} row(s) from ${file.name}`, "success");
30202
30487
  setOpenId(result.database.id);
30203
30488
  },
30204
- onError: (error) => fail(notify16, error, `${file.name} could not be imported`)
30489
+ onError: (error) => fail(notify17, error, `${file.name} could not be imported`)
30205
30490
  }
30206
30491
  );
30207
30492
  if (!selectedWorkspaceId) {
@@ -30239,7 +30524,7 @@ function ConnectedDatabasesPage() {
30239
30524
  function WatchOne({ transferId }) {
30240
30525
  const { data: job } = useWorkspaceTransfer(transferId);
30241
30526
  const { data: workspaces = [] } = useWorkspaces();
30242
- const { notify: notify16 } = useBlocksEnvironment();
30527
+ const { notify: notify17 } = useBlocksEnvironment();
30243
30528
  const untrack = useExportStore((state) => state.untrackTransfer);
30244
30529
  const invalidateAfterTransfer = useInvalidateAfterTransfer();
30245
30530
  useEffect(() => {
@@ -30247,7 +30532,7 @@ function WatchOne({ transferId }) {
30247
30532
  invalidateAfterTransfer(job.mode);
30248
30533
  const target = workspaces.find((w) => w.external_id === job.target_workspace_ext_id);
30249
30534
  const outcome = transferOutcome(job, target?.name ?? "the other workspace");
30250
- if (outcome) notify16(outcome.message, outcome.tone);
30535
+ if (outcome) notify17(outcome.message, outcome.tone);
30251
30536
  untrack(transferId);
30252
30537
  }, [job?.status, job?.external_id]);
30253
30538
  return null;
@@ -30423,7 +30708,7 @@ function ConnectedChatThread({
30423
30708
  placeholder = "Type a message\u2026"
30424
30709
  }) {
30425
30710
  const arbi = useArbi();
30426
- const { notify: notify16 } = useBlocksEnvironment();
30711
+ const { notify: notify17 } = useBlocksEnvironment();
30427
30712
  const me = myChatId(arbi);
30428
30713
  const selectedWorkspaceId = useArbiSessionState((s) => s.workspaceId);
30429
30714
  const { data: workspaces = [] } = useWorkspaces();
@@ -30568,10 +30853,10 @@ function ConnectedChatThread({
30568
30853
  await deleteChatMessage(target.external_id, messageId);
30569
30854
  } catch (error) {
30570
30855
  console.error("[chat] Failed to delete message:", error);
30571
- notify16("Failed to delete message", "error");
30856
+ notify17("Failed to delete message", "error");
30572
30857
  }
30573
30858
  },
30574
- [deleteChatMessage, notify16]
30859
+ [deleteChatMessage, notify17]
30575
30860
  );
30576
30861
  const { data: allNotifications = [] } = useNotifications();
30577
30862
  const pendingAccessRequest = useMemo(() => {
@@ -30734,7 +31019,7 @@ function ConnectedGroupMembers({
30734
31019
  onLeft,
30735
31020
  host = {}
30736
31021
  }) {
30737
- const { confirm, notify: notify16 } = useBlocksEnvironment();
31022
+ const { confirm, notify: notify17 } = useBlocksEnvironment();
30738
31023
  const meId = myChatId(useArbi());
30739
31024
  const rename = useRenameChat();
30740
31025
  const addMembers = useAddChatMembers();
@@ -30751,7 +31036,7 @@ function ConnectedGroupMembers({
30751
31036
  try {
30752
31037
  await rename.mutateAsync({ chat, title: next });
30753
31038
  } catch {
30754
- notify16("Could not rename the group", "error");
31039
+ notify17("Could not rename the group", "error");
30755
31040
  } finally {
30756
31041
  setBusy(null);
30757
31042
  }
@@ -30771,7 +31056,7 @@ function ConnectedGroupMembers({
30771
31056
  onLeft?.();
30772
31057
  }
30773
31058
  } catch {
30774
- notify16(leaving ? "Could not leave the group" : "Could not remove them", "error");
31059
+ notify17(leaving ? "Could not leave the group" : "Could not remove them", "error");
30775
31060
  } finally {
30776
31061
  setBusy(null);
30777
31062
  }
@@ -30964,7 +31249,7 @@ function ConnectedRequestWorkspaceAccess({
30964
31249
  open: controlledOpen,
30965
31250
  onOpenChange
30966
31251
  }) {
30967
- const { notify: notify16 } = useBlocksEnvironment();
31252
+ const { notify: notify17 } = useBlocksEnvironment();
30968
31253
  const arbi = useArbi();
30969
31254
  const [uncontrolledOpen, setUncontrolledOpen] = useState(false);
30970
31255
  const isControlled = controlledOpen !== void 0;
@@ -30994,12 +31279,12 @@ function ConnectedRequestWorkspaceAccess({
30994
31279
  recipient,
30995
31280
  options: { note, workspaceExtId: targetWorkspace || void 0 }
30996
31281
  });
30997
- notify16(`Requested workspace access from ${name}`, "success");
31282
+ notify17(`Requested workspace access from ${name}`, "success");
30998
31283
  setNote("");
30999
31284
  setOpen(false);
31000
31285
  onRequested?.();
31001
31286
  } catch {
31002
- notify16("Could not send the access request", "error");
31287
+ notify17("Could not send the access request", "error");
31003
31288
  }
31004
31289
  };
31005
31290
  return /* @__PURE__ */ jsxs(Dialog, { open: isOpen, onOpenChange: setOpen, children: [
@@ -31133,7 +31418,7 @@ function ConnectedRecipientSelector({
31133
31418
  getUserById,
31134
31419
  maxRecipients
31135
31420
  }) {
31136
- const { notify: notify16 } = useBlocksEnvironment();
31421
+ const { notify: notify17 } = useBlocksEnvironment();
31137
31422
  const [selectorOpen, setSelectorOpen] = useState(false);
31138
31423
  const [searchValue, setSearchValue] = useState("");
31139
31424
  const { data: userSettings } = useUserSettings();
@@ -31146,12 +31431,12 @@ function ConnectedRecipientSelector({
31146
31431
  const newMutedUsers = isMuted ? currentMuted.filter((id) => id !== userId) : [...currentMuted, userId];
31147
31432
  try {
31148
31433
  await updateUserSettings.mutateAsync({ muted_users: newMutedUsers });
31149
- notify16(`${userName} ${isMuted ? "unmuted" : "muted"}`, "success");
31434
+ notify17(`${userName} ${isMuted ? "unmuted" : "muted"}`, "success");
31150
31435
  } catch {
31151
- notify16("Failed to update mute settings", "error");
31436
+ notify17("Failed to update mute settings", "error");
31152
31437
  }
31153
31438
  },
31154
- [userSettings, updateUserSettings, notify16]
31439
+ [userSettings, updateUserSettings, notify17]
31155
31440
  );
31156
31441
  const { users: everyone } = usePeople();
31157
31442
  const { people } = usePeopleSearch(searchValue);
@@ -31233,7 +31518,7 @@ function ConnectedChatPeopleDialog({
31233
31518
  excludeIds = [],
31234
31519
  onSubmit
31235
31520
  }) {
31236
- const { notify: notify16 } = useBlocksEnvironment();
31521
+ const { notify: notify17 } = useBlocksEnvironment();
31237
31522
  const { byId: personById } = usePeople();
31238
31523
  const [picked, setPicked] = useState([]);
31239
31524
  const [title, setTitle] = useState("");
@@ -31266,7 +31551,7 @@ function ConnectedChatPeopleDialog({
31266
31551
  reset();
31267
31552
  onOpenChange(false);
31268
31553
  } catch (err) {
31269
- notify16(err instanceof Error ? err.message : "Something went wrong", "error");
31554
+ notify17(err instanceof Error ? err.message : "Something went wrong", "error");
31270
31555
  } finally {
31271
31556
  setBusy(false);
31272
31557
  }
@@ -31343,7 +31628,7 @@ function ConnectedDmGrantAccessDialog({
31343
31628
  open,
31344
31629
  onOpenChange
31345
31630
  }) {
31346
- const { notify: notify16 } = useBlocksEnvironment();
31631
+ const { notify: notify17 } = useBlocksEnvironment();
31347
31632
  const currentUserExtId = useArbiSession().user?.external_id;
31348
31633
  const openWorkspaceId = useArbiSessionState((s) => s.workspaceId);
31349
31634
  const workspaceOpened = useArbiSessionState((s) => s.workspaceStatus === "open");
@@ -31364,14 +31649,14 @@ function ConnectedDmGrantAccessDialog({
31364
31649
  const grant = async () => {
31365
31650
  const wsId = soleWorkspace;
31366
31651
  if (!wsId) {
31367
- notify16("Open a workspace you own to share it", "warning");
31652
+ notify17("Open a workspace you own to share it", "warning");
31368
31653
  return;
31369
31654
  }
31370
31655
  setGranting(true);
31371
31656
  try {
31372
31657
  const workspaceKey = await arbi.workspaces.sealKey(wsId).catch(() => null);
31373
31658
  if (!workspaceKey) {
31374
- notify16("Could not load the key for that workspace", "error");
31659
+ notify17("Could not load the key for that workspace", "error");
31375
31660
  return;
31376
31661
  }
31377
31662
  const grantedMembers = await addWorkspaceUsers.mutateAsync({
@@ -31382,13 +31667,13 @@ function ConnectedDmGrantAccessDialog({
31382
31667
  access_duration_seconds: 86400
31383
31668
  });
31384
31669
  const expiresAt = Array.isArray(grantedMembers) ? grantedMembers.find((member) => member.user?.email === peer.email)?.access_expires_at : void 0;
31385
- notify16(
31670
+ notify17(
31386
31671
  `Access granted.${expiresAt ? ` Expires ${formatAccessExpiry(expiresAt)}.` : ""}`,
31387
31672
  "success"
31388
31673
  );
31389
31674
  onOpenChange(false);
31390
31675
  } catch (err) {
31391
- notify16(err instanceof Error ? err.message : "Could not grant access", "error");
31676
+ notify17(err instanceof Error ? err.message : "Could not grant access", "error");
31392
31677
  } finally {
31393
31678
  setGranting(false);
31394
31679
  }
@@ -31514,7 +31799,7 @@ var INVITATION_ROW_FILTERS = {
31514
31799
  expired: (row2) => row2.statusLabel === "Expired"
31515
31800
  };
31516
31801
  function ConnectedInviteMenu({ invitation }) {
31517
- const { confirm, notify: notify16 } = useBlocksEnvironment();
31802
+ const { confirm, notify: notify17 } = useBlocksEnvironment();
31518
31803
  const addContacts = useInviteContacts();
31519
31804
  const deleteContact = useDeleteContact();
31520
31805
  const resend = useCallback(async () => {
@@ -31523,17 +31808,17 @@ function ConnectedInviteMenu({ invitation }) {
31523
31808
  const entry = Array.isArray(result) ? result.find((r) => r?.email?.toLowerCase() === invitation.email.toLowerCase()) : void 0;
31524
31809
  const outcome = entry?.outcome;
31525
31810
  if (outcome === "invited" || outcome === "reinvited") {
31526
- notify16(`Invitation resent to ${invitation.email}`, "success");
31811
+ notify17(`Invitation resent to ${invitation.email}`, "success");
31527
31812
  } else {
31528
- notify16(
31813
+ notify17(
31529
31814
  entry?.outcome_detail ?? "The invitation was not resent",
31530
31815
  outcome === "failed" ? "error" : "info"
31531
31816
  );
31532
31817
  }
31533
31818
  } catch {
31534
- notify16("Could not resend the invitation", "error");
31819
+ notify17("Could not resend the invitation", "error");
31535
31820
  }
31536
- }, [addContacts, invitation.email, notify16]);
31821
+ }, [addContacts, invitation.email, notify17]);
31537
31822
  const cancel = useCallback(async () => {
31538
31823
  const confirmed = await confirm({
31539
31824
  message: `Cancel the invitation to ${invitation.email}?
@@ -31544,11 +31829,11 @@ They will no longer be able to join from it.${invitation.workspaceExtId ? " The
31544
31829
  if (!confirmed) return;
31545
31830
  try {
31546
31831
  await deleteContact.mutateAsync(invitation.contactId);
31547
- notify16("Invitation cancelled", "success");
31832
+ notify17("Invitation cancelled", "success");
31548
31833
  } catch {
31549
- notify16("Could not cancel the invitation", "error");
31834
+ notify17("Could not cancel the invitation", "error");
31550
31835
  }
31551
- }, [confirm, deleteContact, invitation, notify16]);
31836
+ }, [confirm, deleteContact, invitation, notify17]);
31552
31837
  const entries = [
31553
31838
  // Resending only makes sense once it has lapsed. While an invitation is still live the backend
31554
31839
  // refuses to reissue it ("not_resent_still_pending"), so offering it would do nothing.
@@ -31928,11 +32213,11 @@ function MessengerView({
31928
32213
  );
31929
32214
  }
31930
32215
  function useChatMessageToasts() {
31931
- const { notify: notify16, openDirectChat, openChat } = useBlocksEnvironment();
32216
+ const { notify: notify17, openDirectChat, openChat } = useBlocksEnvironment();
31932
32217
  useChatArrivals(({ sender, senderId, replyTo }) => {
31933
32218
  const name = sender ? getUserDisplayName(sender) || sender.email : "Someone";
31934
32219
  const reply = replyTo === senderId ? openDirectChat : openChat;
31935
- notify16(`${name} sent you a message`, "info", {
32220
+ notify17(`${name} sent you a message`, "info", {
31936
32221
  ...sender ? { icon: createUserAvatarIcon(sender) } : {},
31937
32222
  className: "notification-message",
31938
32223
  ...reply && { action: { label: "Reply", onClick: () => reply(replyTo) } },
@@ -32278,7 +32563,7 @@ function ConnectedConfigForm({ availableModels, ...rest }) {
32278
32563
  return /* @__PURE__ */ jsx(ConfigForm, { ...rest, renderModelSelect: hasModels ? renderModelSelect : void 0 });
32279
32564
  }
32280
32565
  function ConnectedAgentConfigForm({ agentExtId, agentName, onSaved }) {
32281
- const { notify: notify16 } = useBlocksEnvironment();
32566
+ const { notify: notify17 } = useBlocksEnvironment();
32282
32567
  const { data: schema } = useConfigSchema();
32283
32568
  const { data: agentConfig, isLoading } = useAgentConfig(agentExtId, {
32284
32569
  enabled: !!agentExtId
@@ -32302,11 +32587,11 @@ function ConnectedAgentConfigForm({ agentExtId, agentName, onSaved }) {
32302
32587
  agent_ext_id: agentExtId,
32303
32588
  title: `agent-${agentName}`
32304
32589
  });
32305
- notify16(`Saved ${agentName}'s configuration`, "success");
32590
+ notify17(`Saved ${agentName}'s configuration`, "success");
32306
32591
  onSaved?.();
32307
32592
  } catch {
32308
32593
  }
32309
- }, [values, agentExtId, agentName, saveConfig, onSaved, notify16]);
32594
+ }, [values, agentExtId, agentName, saveConfig, onSaved, notify17]);
32310
32595
  if (isLoading || !schema) {
32311
32596
  return /* @__PURE__ */ jsx("p", { className: "py-6 text-sm text-muted-foreground", children: "Loading configuration\u2026" });
32312
32597
  }
@@ -32340,7 +32625,7 @@ function ConnectedAuthorizeAgent({ onClose, editAgent }) {
32340
32625
  const [configOpen, setConfigOpen] = useState(false);
32341
32626
  const [view, setView] = useState("main");
32342
32627
  const { data: workspaces = [] } = useWorkspaces();
32343
- const { notify: notify16 } = useBlocksEnvironment();
32628
+ const { notify: notify17 } = useBlocksEnvironment();
32344
32629
  const { data: agents = [] } = useAgents();
32345
32630
  const arbi = useArbi();
32346
32631
  const createAgent = useCreateAgent();
@@ -32351,11 +32636,11 @@ function ConnectedAuthorizeAgent({ onClose, editAgent }) {
32351
32636
  );
32352
32637
  const handleCreate = useCallback(async () => {
32353
32638
  if (!name.trim()) {
32354
- notify16("Agent name is required", "warning");
32639
+ notify17("Agent name is required", "warning");
32355
32640
  return;
32356
32641
  }
32357
32642
  if (!/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(name.trim())) {
32358
- notify16(
32643
+ notify17(
32359
32644
  "Name must start with a letter or digit and contain only letters, digits, hyphens, and underscores",
32360
32645
  "warning"
32361
32646
  );
@@ -32367,7 +32652,7 @@ function ConnectedAuthorizeAgent({ onClose, editAgent }) {
32367
32652
  for (const wsId of selectedWorkspaces) {
32368
32653
  const workspaceKey = await arbi.workspaces.sealKey(wsId).catch(() => null);
32369
32654
  if (!workspaceKey) {
32370
- notify16(`Could not get key for workspace ${wsId} \u2014 skipping`, "warning");
32655
+ notify17(`Could not get key for workspace ${wsId} \u2014 skipping`, "warning");
32371
32656
  continue;
32372
32657
  }
32373
32658
  await addWorkspaceUsers.mutateAsync({
@@ -32385,11 +32670,11 @@ function ConnectedAuthorizeAgent({ onClose, editAgent }) {
32385
32670
  });
32386
32671
  } catch (error) {
32387
32672
  const err = error;
32388
- notify16(err?.detail || err?.message || "Failed to create agent", "error");
32673
+ notify17(err?.detail || err?.message || "Failed to create agent", "error");
32389
32674
  } finally {
32390
32675
  setIsSubmitting(false);
32391
32676
  }
32392
- }, [name, selectedWorkspaces, role, createAgent, addWorkspaceUsers, arbi, notify16]);
32677
+ }, [name, selectedWorkspaces, role, createAgent, addWorkspaceUsers, arbi, notify17]);
32393
32678
  if (editAgent) {
32394
32679
  return /* @__PURE__ */ jsx(
32395
32680
  AgentEditView,
@@ -32517,7 +32802,7 @@ function DeveloperFooter({
32517
32802
  );
32518
32803
  }
32519
32804
  function useDeveloperConfig() {
32520
- const { confirm, notify: notify16 } = useBlocksEnvironment();
32805
+ const { confirm, notify: notify17 } = useBlocksEnvironment();
32521
32806
  const [loadedConfigId, setLoadedConfigId] = useState(null);
32522
32807
  const [originalConfigValues, setOriginalConfigValues] = useState({});
32523
32808
  const [configValues, setConfigValues] = useState({});
@@ -32544,7 +32829,7 @@ function useDeveloperConfig() {
32544
32829
  useEffect(() => {
32545
32830
  if (!activeConfigError || configToLoad === "default") return;
32546
32831
  const status = activeConfigError?.status;
32547
- notify16(
32832
+ notify17(
32548
32833
  status === 404 ? `Configuration "${configToLoad}" was not found. Falling back to system defaults.` : `Failed to load configuration "${configToLoad}".`,
32549
32834
  "error"
32550
32835
  );
@@ -32552,16 +32837,16 @@ function useDeveloperConfig() {
32552
32837
  refetchSystemDefaults().then(({ data }) => {
32553
32838
  if (data) setConfigValues(data);
32554
32839
  });
32555
- }, [activeConfigError, configToLoad, refetchSystemDefaults, notify16]);
32840
+ }, [activeConfigError, configToLoad, refetchSystemDefaults, notify17]);
32556
32841
  useEffect(() => {
32557
32842
  if (!selectedConfigError || !selectedConfigId) return;
32558
32843
  const status = selectedConfigError?.status;
32559
- notify16(
32844
+ notify17(
32560
32845
  status === 404 ? `Configuration "${selectedConfigId}" was not found.` : `Failed to load configuration "${selectedConfigId}".`,
32561
32846
  "error"
32562
32847
  );
32563
32848
  setSelectedConfigId(null);
32564
- }, [selectedConfigError, selectedConfigId, notify16]);
32849
+ }, [selectedConfigError, selectedConfigId, notify17]);
32565
32850
  const configField = useSaveConfigField();
32566
32851
  const deleteConfigFile = useDeleteConfig();
32567
32852
  useEffect(() => {
@@ -32588,11 +32873,11 @@ function useDeveloperConfig() {
32588
32873
  }
32589
32874
  setNewConfigId(selectedConfigId);
32590
32875
  const title = selectedConfigId === "default" ? "System Defaults" : configVersions?.versions?.find((v) => v.external_id === selectedConfigId)?.title || selectedConfigId;
32591
- notify16(`Applied "${title}"`, "success");
32876
+ notify17(`Applied "${title}"`, "success");
32592
32877
  setSelectedConfigId(null);
32593
32878
  }
32594
32879
  }, [
32595
- notify16,
32880
+ notify17,
32596
32881
  selectedConfig,
32597
32882
  selectedConfigId,
32598
32883
  configVersions,
@@ -32635,7 +32920,7 @@ function useDeveloperConfig() {
32635
32920
  try {
32636
32921
  await deleteConfigFile.mutateAsync(duplicate.external_id);
32637
32922
  } catch {
32638
- notify16(`Could not overwrite existing "${duplicate.title}" \u2014 save aborted.`, "error");
32923
+ notify17(`Could not overwrite existing "${duplicate.title}" \u2014 save aborted.`, "error");
32639
32924
  return;
32640
32925
  }
32641
32926
  }
@@ -32655,7 +32940,7 @@ function useDeveloperConfig() {
32655
32940
  if (configValues.QueryLLM?.MODEL_NAME) {
32656
32941
  setCurrentConversationModel(resolveConfigModel(configValues));
32657
32942
  }
32658
- notify16(
32943
+ notify17(
32659
32944
  duplicate ? `Overwrote and applied "${trimmedName}"` : `Saved and applied "${trimmedName}"`,
32660
32945
  "success"
32661
32946
  );
@@ -32663,7 +32948,7 @@ function useDeveloperConfig() {
32663
32948
  } catch {
32664
32949
  }
32665
32950
  }, [
32666
- notify16,
32951
+ notify17,
32667
32952
  configName,
32668
32953
  configValues,
32669
32954
  configField,
@@ -32818,7 +33103,7 @@ function ConnectedGrantWorkspaceAccessDialog({
32818
33103
  const addWorkspaceUsers = useAddWorkspaceMembers();
32819
33104
  const deleteNotifications = useDeleteNotifications();
32820
33105
  const runNow = useRunConversation();
32821
- const { notify: notify16 } = useBlocksEnvironment();
33106
+ const { notify: notify17 } = useBlocksEnvironment();
32822
33107
  const currentUserExtId = useArbiSession().user?.external_id;
32823
33108
  const requester = notification?.sender;
32824
33109
  const isExternal = requester?.temporary_access_only === true;
@@ -32862,19 +33147,19 @@ function ConnectedGrantWorkspaceAccessDialog({
32862
33147
  const grant = async (kind) => {
32863
33148
  if (!requester) return;
32864
33149
  if (kind === "temporary" && selectedRole === "owner") {
32865
- notify16("Temporary access can\u2019t be owner \u2014 pick another role or grant permanent", "warning");
33150
+ notify17("Temporary access can\u2019t be owner \u2014 pick another role or grant permanent", "warning");
32866
33151
  return;
32867
33152
  }
32868
33153
  const wsId = locked ? workspaceExtId : selectedWsId;
32869
33154
  if (!wsId) {
32870
- notify16("Pick a workspace to grant access to", "warning");
33155
+ notify17("Pick a workspace to grant access to", "warning");
32871
33156
  return;
32872
33157
  }
32873
33158
  setGrantingKind(kind);
32874
33159
  try {
32875
33160
  const workspaceKey = await arbi.workspaces.sealKey(wsId).catch(() => null);
32876
33161
  if (!workspaceKey) {
32877
- notify16("Could not load the key for that workspace", "error");
33162
+ notify17("Could not load the key for that workspace", "error");
32878
33163
  return;
32879
33164
  }
32880
33165
  let sessionPubkey;
@@ -32886,7 +33171,7 @@ function ConnectedGrantWorkspaceAccessDialog({
32886
33171
  sessionPubkey = payload?.session_pubkey_b64;
32887
33172
  }
32888
33173
  if (!sessionPubkey) {
32889
- notify16("Request is missing a session key \u2014 grant permanent instead", "warning");
33174
+ notify17("Request is missing a session key \u2014 grant permanent instead", "warning");
32890
33175
  return;
32891
33176
  }
32892
33177
  }
@@ -32901,7 +33186,7 @@ function ConnectedGrantWorkspaceAccessDialog({
32901
33186
  const wsName = workspaces.find((w) => w.external_id === wsId)?.name ?? "the workspace";
32902
33187
  const roleLabel = formatRole(selectedRole).toLowerCase();
32903
33188
  const expiresAt = Array.isArray(grantedMembers) ? grantedMembers.find((member) => member.user?.email === requester.email)?.access_expires_at : void 0;
32904
- notify16(
33189
+ notify17(
32905
33190
  kind === "temporary" ? `Access granted.${expiresAt ? ` Expires ${formatAccessExpiry(expiresAt)}.` : ""}` : `Granted ${requesterName} ${roleLabel} access to ${wsName}`,
32906
33191
  "success"
32907
33192
  );
@@ -32910,7 +33195,7 @@ function ConnectedGrantWorkspaceAccessDialog({
32910
33195
  await runNow.mutateAsync(taskExtId);
32911
33196
  } catch (err) {
32912
33197
  console.error("Granted access but could not resume the run", err);
32913
- notify16("Access granted, but the run could not resume. Run it again.", "warning");
33198
+ notify17("Access granted, but the run could not resume. Run it again.", "warning");
32914
33199
  }
32915
33200
  }
32916
33201
  if (notification) {
@@ -32923,7 +33208,7 @@ function ConnectedGrantWorkspaceAccessDialog({
32923
33208
  close();
32924
33209
  } catch (err) {
32925
33210
  const e = err;
32926
- notify16(e?.detail || e?.message || "Failed to grant access", "error");
33211
+ notify17(e?.detail || e?.message || "Failed to grant access", "error");
32927
33212
  } finally {
32928
33213
  setGrantingKind(null);
32929
33214
  }
@@ -32936,11 +33221,11 @@ function ConnectedGrantWorkspaceAccessDialog({
32936
33221
  setDismissing(true);
32937
33222
  try {
32938
33223
  await deleteNotifications.mutateAsync([notification.external_id]);
32939
- notify16(`Dismissed ${requesterName}'s access request`, "info");
33224
+ notify17(`Dismissed ${requesterName}'s access request`, "info");
32940
33225
  close();
32941
33226
  } catch (err) {
32942
33227
  const e = err;
32943
- notify16(e?.detail || e?.message || "Failed to dismiss request", "error");
33228
+ notify17(e?.detail || e?.message || "Failed to dismiss request", "error");
32944
33229
  } finally {
32945
33230
  setDismissing(false);
32946
33231
  }
@@ -33269,7 +33554,7 @@ function addonArrivalMessage(addons, added) {
33269
33554
  var NONE_SEEN = {};
33270
33555
  function useAddonArrivalNotice() {
33271
33556
  const { data: projects } = useProjects();
33272
- const { notify: notify16 } = useBlocksEnvironment();
33557
+ const { notify: notify17 } = useBlocksEnvironment();
33273
33558
  const [seen, setSeen] = useSessionView(SEEN_ADDON_BLOCKS_VIEW, NONE_SEEN);
33274
33559
  useEffect(() => {
33275
33560
  let next = null;
@@ -33284,12 +33569,12 @@ function useAddonArrivalNotice() {
33284
33569
  ai: Math.max(now.ai - before.ai, 0),
33285
33570
  storage: Math.max(now.storage - before.storage, 0)
33286
33571
  };
33287
- if (added.ai > 0 || added.storage > 0) notify16(addonArrivalMessage(addons, added), "info");
33572
+ if (added.ai > 0 || added.storage > 0) notify17(addonArrivalMessage(addons, added), "info");
33288
33573
  }
33289
33574
  next = { ...next ?? seen, [project.external_id]: now };
33290
33575
  }
33291
33576
  if (next) setSeen(next);
33292
- }, [projects, seen, setSeen, notify16]);
33577
+ }, [projects, seen, setSeen, notify17]);
33293
33578
  }
33294
33579
  function useFirstLoginRouting(onResolve) {
33295
33580
  const { status, user } = useArbiSession();
@@ -33325,7 +33610,7 @@ function isInternal(mutationKey) {
33325
33610
  var NOTICE_EVERY_MS = 1e4;
33326
33611
  function usePausedMutationNotice() {
33327
33612
  const queryClient = useQueryClient();
33328
- const { notify: notify16 } = useBlocksEnvironment();
33613
+ const { notify: notify17 } = useBlocksEnvironment();
33329
33614
  useEffect(() => {
33330
33615
  let lastNotice = 0;
33331
33616
  return queryClient.getMutationCache().subscribe((event) => {
@@ -33335,27 +33620,27 @@ function usePausedMutationNotice() {
33335
33620
  const now = Date.now();
33336
33621
  if (now - lastNotice < NOTICE_EVERY_MS) return;
33337
33622
  lastNotice = now;
33338
- notify16("You're offline. This will finish when you reconnect", "info", {
33623
+ notify17("You're offline. This will finish when you reconnect", "info", {
33339
33624
  description: "Keep this tab open until then."
33340
33625
  });
33341
33626
  });
33342
- }, [queryClient, notify16]);
33627
+ }, [queryClient, notify17]);
33343
33628
  }
33344
33629
  function usePaymentReturn() {
33345
33630
  const queryClient = useQueryClient();
33346
- const { notify: notify16, openProject } = useBlocksEnvironment();
33631
+ const { notify: notify17, openProject } = useBlocksEnvironment();
33347
33632
  const { refetch: refetchProjects } = useProjects();
33348
33633
  const { mutate: refreshProject } = useRefreshProject();
33349
- const latest = useRef({ refetchProjects, refreshProject, notify: notify16, openProject, queryClient });
33350
- latest.current = { refetchProjects, refreshProject, notify: notify16, openProject, queryClient };
33634
+ const latest = useRef({ refetchProjects, refreshProject, notify: notify17, openProject, queryClient });
33635
+ latest.current = { refetchProjects, refreshProject, notify: notify17, openProject, queryClient };
33351
33636
  useEffect(() => {
33352
33637
  const handle = async () => {
33353
33638
  const params = new URLSearchParams(window.location.hash.substring(1));
33354
33639
  if (params.get("payment") !== "success") return;
33355
- const { refetchProjects: refetchProjects2, refreshProject: refreshProject2, notify: notify17, openProject: openProject2, queryClient: queryClient2 } = latest.current;
33640
+ const { refetchProjects: refetchProjects2, refreshProject: refreshProject2, notify: notify18, openProject: openProject2, queryClient: queryClient2 } = latest.current;
33356
33641
  const projectId = params.get("project");
33357
33642
  if (projectId) refreshProject2(projectId);
33358
- notify17("Payment successful! Your subscription is now active.", "success");
33643
+ notify18("Payment successful! Your subscription is now active.", "success");
33359
33644
  params.delete("payment");
33360
33645
  params.delete("project");
33361
33646
  const rest = params.toString();
@@ -33470,10 +33755,10 @@ function useRetiredModelNotice() {
33470
33755
  const suggestion = userSettings?.retired_premium_model_suggestion;
33471
33756
  useEffect(() => {
33472
33757
  if (!retired) return;
33473
- const { notify: notify16, openSettings } = environment.current;
33758
+ const { notify: notify17, openSettings } = environment.current;
33474
33759
  const outcome = premiumDefault ? `We've switched you to the default Premium model, ${premiumDefault}.` : "Your Premium model choice was cleared.";
33475
33760
  const suggestionHint = suggestion ? ` Suggested replacement: ${suggestion}.` : "";
33476
- notify16(
33761
+ notify17(
33477
33762
  `The model you selected, ${retired}, is no longer available. ${outcome}${suggestionHint}`,
33478
33763
  "warning",
33479
33764
  {
@@ -33861,7 +34146,7 @@ function ReportProblemDialog({
33861
34146
  fileNamePrefix = "problem",
33862
34147
  footnote
33863
34148
  }) {
33864
- const { notify: notify16 } = useBlocksEnvironment();
34149
+ const { notify: notify17 } = useBlocksEnvironment();
33865
34150
  const [description, setDescription] = useState("");
33866
34151
  const [marks, setMarks] = useState([]);
33867
34152
  const [draft, setDraft] = useState(null);
@@ -33897,7 +34182,7 @@ function ReportProblemDialog({
33897
34182
  const { blob } = await cropImage(frameUrl, cropArea, { mimeType: "image/png" });
33898
34183
  onCropped(blob);
33899
34184
  } catch {
33900
- notify16("Couldn't crop the screenshot. Please try again.", "error");
34185
+ notify17("Couldn't crop the screenshot. Please try again.", "error");
33901
34186
  } finally {
33902
34187
  setBusy(false);
33903
34188
  }
@@ -33928,7 +34213,7 @@ function ReportProblemDialog({
33928
34213
  const stamp = (/* @__PURE__ */ new Date()).toISOString().slice(0, 16).replace(/[:T]/g, "-");
33929
34214
  downloadBlob(blob, `${fileNamePrefix}-${stamp}.png`);
33930
34215
  } catch {
33931
- notify16("Couldn't save the screenshot. Please try again.", "error");
34216
+ notify17("Couldn't save the screenshot. Please try again.", "error");
33932
34217
  } finally {
33933
34218
  setBusy(false);
33934
34219
  }
@@ -33939,9 +34224,9 @@ function ReportProblemDialog({
33939
34224
  const blob = await renderImage();
33940
34225
  if (!blob) return;
33941
34226
  await navigator.clipboard.write([new ClipboardItem({ "image/png": blob })]);
33942
- notify16("Screenshot copied. Paste it into an email or chat.", "success");
34227
+ notify17("Screenshot copied. Paste it into an email or chat.", "success");
33943
34228
  } catch {
33944
- notify16("Your browser didn't allow copying the image. Use Download instead.", "warning");
34229
+ notify17("Your browser didn't allow copying the image. Use Download instead.", "warning");
33945
34230
  } finally {
33946
34231
  setBusy(false);
33947
34232
  }
@@ -34161,7 +34446,7 @@ function ReportProblemDialog({
34161
34446
  ) });
34162
34447
  }
34163
34448
  function useReportProblem(options2 = {}) {
34164
- const { notify: notify16 } = useBlocksEnvironment();
34449
+ const { notify: notify17 } = useBlocksEnvironment();
34165
34450
  const [phase, setPhase] = useState("idle");
34166
34451
  const [frame, setFrame] = useState(null);
34167
34452
  const [image, setImage] = useState(null);
@@ -34174,11 +34459,11 @@ function useReportProblem(options2 = {}) {
34174
34459
  } catch (error) {
34175
34460
  const code = error instanceof ScreenCaptureError ? error.code : "failed";
34176
34461
  if (code === "failed") {
34177
- notify16("Couldn't capture the screen. You can still describe the problem.", "error");
34462
+ notify17("Couldn't capture the screen. You can still describe the problem.", "error");
34178
34463
  }
34179
34464
  }
34180
34465
  setPhase("describing");
34181
- }, [notify16]);
34466
+ }, [notify17]);
34182
34467
  const reset = useCallback(() => {
34183
34468
  setPhase("idle");
34184
34469
  setFrame(null);
@@ -34285,7 +34570,7 @@ function useLaunchWorkflow({ landing: surfaceLanding } = {}) {
34285
34570
  const { create: createTask } = useWorkflowTasks();
34286
34571
  const applyModel = useApplyChatModel();
34287
34572
  const session = useArbiSessionStore();
34288
- const { notify: notify16, openFiles, openNewConversation } = useBlocksEnvironment();
34573
+ const { notify: notify17, openFiles, openNewConversation } = useBlocksEnvironment();
34289
34574
  const annotate = useCallback(
34290
34575
  async ({ inputs, scope }) => {
34291
34576
  const description = text(inputs, "description");
@@ -34323,11 +34608,11 @@ function useLaunchWorkflow({ landing: surfaceLanding } = {}) {
34323
34608
  });
34324
34609
  openFiles({ select: docIds, filters });
34325
34610
  } catch (error) {
34326
- notify16("Could not start the annotation", "error");
34611
+ notify17("Could not start the annotation", "error");
34327
34612
  throw error;
34328
34613
  }
34329
34614
  },
34330
- [documents, tags, createTag, updateTag, generate, openFiles, notify16]
34615
+ [documents, tags, createTag, updateTag, generate, openFiles, notify17]
34331
34616
  );
34332
34617
  return useCallback(
34333
34618
  async (launch) => {
@@ -34372,12 +34657,12 @@ function useLaunchWorkflow({ landing: surfaceLanding } = {}) {
34372
34657
  });
34373
34658
  const ran = created.kind === "work" ? created.ran : null;
34374
34659
  const title = created.kind === "work" ? created.task.title : created.workflow.name;
34375
- notify16(
34660
+ notify17(
34376
34661
  ran === false ? "Task created, but the run could not start" : `Running \u201C${title ?? workflow.title}\u201D`,
34377
34662
  ran === false ? "warning" : "success"
34378
34663
  );
34379
34664
  } catch (error) {
34380
- notify16(
34665
+ notify17(
34381
34666
  error instanceof Error && error.message.startsWith("Open a workspace") ? error.message : "Could not start the run",
34382
34667
  "error"
34383
34668
  );
@@ -34410,7 +34695,7 @@ function useLaunchWorkflow({ landing: surfaceLanding } = {}) {
34410
34695
  documents,
34411
34696
  surfaceLanding,
34412
34697
  session,
34413
- notify16,
34698
+ notify17,
34414
34699
  openNewConversation
34415
34700
  ]
34416
34701
  );
@@ -34587,7 +34872,7 @@ function useShareResource({
34587
34872
  resourceName,
34588
34873
  memberEmails = []
34589
34874
  }) {
34590
- const { confirm, notify: notify16 } = useBlocksEnvironment();
34875
+ const { confirm, notify: notify17 } = useBlocksEnvironment();
34591
34876
  const addWorkspaceUsersMutation = useAddWorkspaceMembers();
34592
34877
  const [isSharing, setIsSharing] = useState(false);
34593
34878
  const memberEmailSet = new Set(memberEmails.map((e) => e.toLowerCase()));
@@ -34657,11 +34942,11 @@ function useShareResource({
34657
34942
  return "cancelled";
34658
34943
  }
34659
34944
  }
34660
- notify16("Shared successfully", "success");
34945
+ notify17("Shared successfully", "success");
34661
34946
  return "shared";
34662
34947
  } catch (err) {
34663
34948
  console.error("Failed to share resource:", err);
34664
- notify16("Failed to share", "error");
34949
+ notify17("Failed to share", "error");
34665
34950
  return "error";
34666
34951
  } finally {
34667
34952
  setIsSharing(false);
@@ -35185,7 +35470,7 @@ function ConnectedThreadTabs({
35185
35470
  );
35186
35471
  }
35187
35472
  function useThreadLabels(canEditShared) {
35188
- const { notify: notify16 } = useBlocksEnvironment();
35473
+ const { notify: notify17 } = useBlocksEnvironment();
35189
35474
  const { data: tags = [] } = useTags();
35190
35475
  const createTag = useCreateTag();
35191
35476
  const update = useUpdateConversation();
@@ -35201,7 +35486,7 @@ function useThreadLabels(canEditShared) {
35201
35486
  const canEdit = (rows) => rows.every((row2) => row2.is_owner || row2.is_shared && canEditShared);
35202
35487
  const apply = async (rows, id, remove) => {
35203
35488
  if (!canEdit(rows)) {
35204
- notify16("You cannot change labels on these threads.", "info");
35489
+ notify17("You cannot change labels on these threads.", "info");
35205
35490
  return;
35206
35491
  }
35207
35492
  let failed = 0;
@@ -35216,7 +35501,7 @@ function useThreadLabels(canEditShared) {
35216
35501
  }
35217
35502
  }
35218
35503
  if (failed)
35219
- notify16(`Could not update labels on ${failed} thread${failed === 1 ? "" : "s"}.`, "error");
35504
+ notify17(`Could not update labels on ${failed} thread${failed === 1 ? "" : "s"}.`, "error");
35220
35505
  };
35221
35506
  const create2 = async (rows, name) => {
35222
35507
  if (!canEdit(rows) || !name.trim()) return;
@@ -35229,7 +35514,7 @@ function useThreadLabels(canEditShared) {
35229
35514
  }))?.external_id;
35230
35515
  if (id) await apply(rows, id, false);
35231
35516
  } catch {
35232
- notify16("Could not create the label.", "error");
35517
+ notify17("Could not create the label.", "error");
35233
35518
  }
35234
35519
  };
35235
35520
  return {
@@ -35279,20 +35564,20 @@ function usePendingTaskThread({
35279
35564
  }) {
35280
35565
  const [pending, setPending] = useState(null);
35281
35566
  const [isLooking, setIsLooking] = useState(false);
35282
- const { notify: notify16, openConversation } = useBlocksEnvironment();
35283
- const latest = useRef({ open, onOpenChange, findThread, notify: notify16, openConversation });
35567
+ const { notify: notify17, openConversation } = useBlocksEnvironment();
35568
+ const latest = useRef({ open, onOpenChange, findThread, notify: notify17, openConversation });
35284
35569
  useEffect(() => {
35285
- latest.current = { open, onOpenChange, findThread, notify: notify16, openConversation };
35570
+ latest.current = { open, onOpenChange, findThread, notify: notify17, openConversation };
35286
35571
  });
35287
35572
  const openThread = (conversationId) => {
35288
35573
  setPending(null);
35289
- const { notify: notify17, openConversation: openConversation2 } = latest.current;
35574
+ const { notify: notify18, openConversation: openConversation2 } = latest.current;
35290
35575
  const navigate = (id) => openConversation2(id);
35291
35576
  if (latest.current.open) {
35292
35577
  navigate(conversationId);
35293
35578
  latest.current.onOpenChange(false);
35294
35579
  } else {
35295
- notify17("Your task is ready", "success", {
35580
+ notify18("Your task is ready", "success", {
35296
35581
  action: { label: "Open thread", onClick: () => navigate(conversationId) }
35297
35582
  });
35298
35583
  }
@@ -35440,14 +35725,14 @@ function ConnectedTaskStartDialog({
35440
35725
  const task = useTaskStart({ open, onOpenChange, parentId: initialParentId });
35441
35726
  const { workflows } = task;
35442
35727
  const [later, setLater] = useState(null);
35443
- const { notify: notify16, openConversation: navigate, openFiles } = useBlocksEnvironment();
35728
+ const { notify: notify17, openConversation: navigate, openFiles } = useBlocksEnvironment();
35444
35729
  const start = async (values) => {
35445
35730
  const result = await task.start(values);
35446
35731
  if (result.kind === "pending") return;
35447
35732
  if (result.kind === "documents") openFiles();
35448
35733
  else {
35449
35734
  navigate(result.conversationId);
35450
- if (result.todo) notify16("Started the task", "success");
35735
+ if (result.todo) notify17("Started the task", "success");
35451
35736
  }
35452
35737
  onOpenChange(false);
35453
35738
  };
@@ -35495,7 +35780,7 @@ function ConnectedTaskStartDialog({
35495
35780
  function ConnectedThreadLauncher({ autoFocus }) {
35496
35781
  const task = useTaskStart({ open: false, onOpenChange: () => {
35497
35782
  } });
35498
- const { notify: notify16, openConversation: navigate, openFiles } = useBlocksEnvironment();
35783
+ const { notify: notify17, openConversation: navigate, openFiles } = useBlocksEnvironment();
35499
35784
  const [later, setLater] = useState(null);
35500
35785
  return /* @__PURE__ */ jsxs(Fragment, { children: [
35501
35786
  /* @__PURE__ */ jsx(
@@ -35510,7 +35795,7 @@ function ConnectedThreadLauncher({ autoFocus }) {
35510
35795
  onStart: async (values) => {
35511
35796
  const result = await task.start(values);
35512
35797
  if (result.kind === "documents") {
35513
- notify16("The workflow is running", "success", {
35798
+ notify17("The workflow is running", "success", {
35514
35799
  action: { label: "Open Files", onClick: () => openFiles() }
35515
35800
  });
35516
35801
  return null;
@@ -35557,7 +35842,7 @@ function ConnectedNewThreadDialog({
35557
35842
  [documents]
35558
35843
  );
35559
35844
  const workspaceId = useArbiSessionState((s) => s.workspaceId);
35560
- const { notify: notify16, openConversation: navigateToConversation } = useBlocksEnvironment();
35845
+ const { notify: notify17, openConversation: navigateToConversation } = useBlocksEnvironment();
35561
35846
  const pendingThread = usePendingTaskThread({
35562
35847
  open,
35563
35848
  onOpenChange,
@@ -35585,7 +35870,7 @@ function ConnectedNewThreadDialog({
35585
35870
  // Required by the API; a to-do has no run, so there is no access to grant.
35586
35871
  auth_mode: "run_now_temp"
35587
35872
  });
35588
- notify16(`Added \u201C${todo.title}\u201D`, "success");
35873
+ notify17(`Added \u201C${todo.title}\u201D`, "success");
35589
35874
  onOpenChange(false);
35590
35875
  return;
35591
35876
  }
@@ -35606,7 +35891,7 @@ function ConnectedNewThreadDialog({
35606
35891
  const pendingMessage = pendingThread.trackStartError(error, values.prompt);
35607
35892
  if (pendingMessage) throw new Error(pendingMessage);
35608
35893
  if (!pendingThread.isPendingFor(values.prompt)) {
35609
- notify16("Failed to add the task", "error");
35894
+ notify17("Failed to add the task", "error");
35610
35895
  }
35611
35896
  throw error;
35612
35897
  }
@@ -36033,7 +36318,7 @@ function ThreadSearch({ children, ResultsBoundary = ErrorBoundary }) {
36033
36318
  const [query, setQuery] = useState("");
36034
36319
  const [submitted, setSubmitted] = useState("");
36035
36320
  const selectedWorkspaceId = useArbiSessionState((s) => s.workspaceId);
36036
- const { notify: notify16, openConversation } = useBlocksEnvironment();
36321
+ const { notify: notify17, openConversation } = useBlocksEnvironment();
36037
36322
  const search = useConversationSearch();
36038
36323
  const isSearching = search.isPending;
36039
36324
  const groups = useMemo(
@@ -36058,11 +36343,11 @@ function ThreadSearch({ children, ResultsBoundary = ErrorBoundary }) {
36058
36343
  {
36059
36344
  onError: (err) => {
36060
36345
  console.error("Conversation search failed", err);
36061
- notify16("Conversation search failed", "error");
36346
+ notify17("Conversation search failed", "error");
36062
36347
  }
36063
36348
  }
36064
36349
  );
36065
- }, [query, selectedWorkspaceId, isSearching, search, notify16]);
36350
+ }, [query, selectedWorkspaceId, isSearching, search, notify17]);
36066
36351
  const clearSearch = useCallback(() => {
36067
36352
  setQuery("");
36068
36353
  setSubmitted("");
@@ -36123,7 +36408,7 @@ function ConnectedThreadsPage({
36123
36408
  workflowActions
36124
36409
  }) {
36125
36410
  const mode = layout === "inbox" ? "tasks" : "threads";
36126
- const { confirm, notify: notify16, openConversation, openDocument } = useBlocksEnvironment();
36411
+ const { confirm, notify: notify17, openConversation, openDocument } = useBlocksEnvironment();
36127
36412
  const { conversations: all, isLoading } = useConversationItems();
36128
36413
  const [doneFilter] = useTransientView("threads.done", "exclude");
36129
36414
  const [visibilityFilters] = useTransientView("threads.visibility", DEFAULT_THREAD_VISIBILITY);
@@ -36183,9 +36468,9 @@ function ConnectedThreadsPage({
36183
36468
  setBusyId(task.external_id);
36184
36469
  try {
36185
36470
  await action();
36186
- if (success) notify16(success, "success");
36471
+ if (success) notify17(success, "success");
36187
36472
  } catch (error) {
36188
- notify16(
36473
+ notify17(
36189
36474
  error instanceof ArbiApiError && error.detail ? `${failure}: ${error.detail}` : failure,
36190
36475
  "error"
36191
36476
  );
@@ -36230,7 +36515,7 @@ function ConnectedThreadsPage({
36230
36515
  failed += 1;
36231
36516
  }
36232
36517
  }
36233
- notify16(
36518
+ notify17(
36234
36519
  failed ? `${failed} of ${rows.length} could not be changed: you may not be allowed to change them` : done,
36235
36520
  failed ? "error" : "success"
36236
36521
  );
@@ -36256,17 +36541,17 @@ function ConnectedThreadsPage({
36256
36541
  { conversationId: renaming.external_id, patch: { title: newTitle.trim() } },
36257
36542
  {
36258
36543
  onSuccess: () => {
36259
- notify16("Conversation renamed successfully", "success");
36544
+ notify17("Conversation renamed successfully", "success");
36260
36545
  setRenaming(null);
36261
36546
  setNewTitle("");
36262
36547
  },
36263
36548
  onError: (error) => {
36264
36549
  console.error("Failed to rename conversation:", error);
36265
- notify16("Failed to rename conversation", "error");
36550
+ notify17("Failed to rename conversation", "error");
36266
36551
  }
36267
36552
  }
36268
36553
  );
36269
- }, [renaming, newTitle, updateConversation, notify16]);
36554
+ }, [renaming, newTitle, updateConversation, notify17]);
36270
36555
  const handleBulkShare = async (rows) => {
36271
36556
  const unshared = rows.filter((c) => !c.is_shared);
36272
36557
  if (unshared.length === 0) {
@@ -36289,10 +36574,10 @@ function ConnectedThreadsPage({
36289
36574
  (c) => updateConversation.mutateAsync({ conversationId: c.external_id, patch: { shared: true } })
36290
36575
  )
36291
36576
  );
36292
- notify16(`${unshared.length} ${noun.toLowerCase()} shared successfully`, "success");
36577
+ notify17(`${unshared.length} ${noun.toLowerCase()} shared successfully`, "success");
36293
36578
  } catch (error) {
36294
36579
  console.error("Failed to share conversations:", error);
36295
- notify16("Failed to share some conversations", "error");
36580
+ notify17("Failed to share some conversations", "error");
36296
36581
  }
36297
36582
  };
36298
36583
  const { data: workspaceDocs } = useDocuments();
@@ -36850,7 +37135,7 @@ function ConversationAlert({
36850
37135
  isRetrying = false
36851
37136
  }) {
36852
37137
  const [isResubmitting, setIsResubmitting] = useState(false);
36853
- const { notify: notify16 } = useBlocksEnvironment();
37138
+ const { notify: notify17 } = useBlocksEnvironment();
36854
37139
  const handleRetryOrphaned = useCallback(async () => {
36855
37140
  if (!message || !onRetryOrphaned) return;
36856
37141
  setIsResubmitting(true);
@@ -36862,11 +37147,11 @@ function ConversationAlert({
36862
37147
  );
36863
37148
  } catch (error) {
36864
37149
  console.error("Failed to retry orphaned message:", error);
36865
- notify16("Failed to retry message", "error");
37150
+ notify17("Failed to retry message", "error");
36866
37151
  } finally {
36867
37152
  setIsResubmitting(false);
36868
37153
  }
36869
- }, [message, onRetryOrphaned, notify16]);
37154
+ }, [message, onRetryOrphaned, notify17]);
36870
37155
  if (type === "send-failed") {
36871
37156
  return /* @__PURE__ */ jsx(
36872
37157
  MessageAlert,
@@ -37378,7 +37663,7 @@ function ConversationThread({
37378
37663
  const inputRef = useRef(null);
37379
37664
  const session = useArbiSessionStore();
37380
37665
  const environment = useBlocksEnvironment();
37381
- const { notify: notify16, openUpload, openSkillsBrowser } = environment;
37666
+ const { notify: notify17, openUpload, openSkillsBrowser } = environment;
37382
37667
  const generatingConversations = useArbiSessionState((state) => state.generating);
37383
37668
  const { data: userSettings } = useUserSettings();
37384
37669
  const currentConversationId = useArbiSessionState((state) => state.conversationId);
@@ -37434,10 +37719,10 @@ function ConversationThread({
37434
37719
  await answerQuestion(pendingAnswer, trimmed);
37435
37720
  } catch (err) {
37436
37721
  console.error("Failed to answer agent", err);
37437
- notify16("Failed to send your answer", "error");
37722
+ notify17("Failed to send your answer", "error");
37438
37723
  }
37439
37724
  },
37440
- [pendingAnswer, answerQuestion, session, notify16]
37725
+ [pendingAnswer, answerQuestion, session, notify17]
37441
37726
  );
37442
37727
  const { data: allWorkspaceDocuments = [], isLoading: isLoadingWorkspaceDocuments } = useDocuments();
37443
37728
  const parentMessage = useMemo(() => {
@@ -37465,7 +37750,7 @@ function ConversationThread({
37465
37750
  }
37466
37751
  }, [parentMessageId]);
37467
37752
  const isSharedConversation = useConversationIsShared();
37468
- const assistantMode = isSharedConversation ? "mentioned" : "always";
37753
+ const assistantMode = isSharedConversation || currentTask?.assistant_mode === "mentioned" ? "mentioned" : "always";
37469
37754
  const isGuest = useWorkspaceRole() === "guest";
37470
37755
  const meetingReadOnly = isGuest && !!currentTask?.meeting_call_ext_id;
37471
37756
  const meetingCallExtId = currentTask?.meeting_call_ext_id ?? null;
@@ -38042,7 +38327,7 @@ function ConnectedForgotPassword({
38042
38327
  }
38043
38328
  function useSsoVerificationRedirect() {
38044
38329
  const sso = useSsoSignIn();
38045
- const { notify: notify16 } = useBlocksEnvironment();
38330
+ const { notify: notify17 } = useBlocksEnvironment();
38046
38331
  const { onVerificationFailed } = useAuthPages();
38047
38332
  useEffect(() => {
38048
38333
  const urlParams = new URLSearchParams(window.location.search);
@@ -38051,19 +38336,19 @@ function useSsoVerificationRedirect() {
38051
38336
  const message = urlParams.get("message") || null;
38052
38337
  const accessToken = window.location.hash.includes("access_token=");
38053
38338
  if (success === "true" && code === "success" || accessToken) {
38054
- notify16("Verified! Redirecting...", "success");
38339
+ notify17("Verified! Redirecting...", "success");
38055
38340
  try {
38056
38341
  void sso.signIn({ consent: true });
38057
38342
  } catch (error) {
38058
38343
  console.error("Error during login redirect:", error);
38059
- notify16(
38344
+ notify17(
38060
38345
  'Error during login redirect. Please click "Login with Arbi.City" to continue.',
38061
38346
  "error"
38062
38347
  );
38063
38348
  }
38064
38349
  } else if (success === "false") {
38065
38350
  if (message && onVerificationFailed) onVerificationFailed(message);
38066
- else notify16("Email verification failed. Please try again.", "error");
38351
+ else notify17("Email verification failed. Please try again.", "error");
38067
38352
  }
38068
38353
  }, []);
38069
38354
  }
@@ -38085,7 +38370,7 @@ function ConnectedLoginPage({
38085
38370
  function LoginPage() {
38086
38371
  const sso = useSsoSignIn();
38087
38372
  const auth = useAuthPages();
38088
- const { notify: notify16 } = useBlocksEnvironment();
38373
+ const { notify: notify17 } = useBlocksEnvironment();
38089
38374
  const isSsoOnly = !!auth.ssoOnly;
38090
38375
  const allowRegistration = auth.allowRegistration ?? true;
38091
38376
  const isOnline = useIsOnline();
@@ -38232,7 +38517,7 @@ function LoginPage() {
38232
38517
  e.preventDefault();
38233
38518
  if (isRegistering) {
38234
38519
  if (!termsAccepted) {
38235
- notify16("You must acknowledge the Terms of Use and Privacy Policy.", "error");
38520
+ notify17("You must acknowledge the Terms of Use and Privacy Policy.", "error");
38236
38521
  return;
38237
38522
  }
38238
38523
  handleRegister(saveRecoveryKey);
@@ -38339,7 +38624,7 @@ function LoginPage() {
38339
38624
  onClick: () => {
38340
38625
  if (!email) {
38341
38626
  emailInputRef.current?.focus();
38342
- notify16(
38627
+ notify17(
38343
38628
  'Enter your email address first, then choose "I already have my code".',
38344
38629
  "error"
38345
38630
  );
@@ -38619,7 +38904,7 @@ function SsoResendVerificationButton({
38619
38904
  providerUserId
38620
38905
  }) {
38621
38906
  const arbi = useArbi();
38622
- const { notify: notify16 } = useBlocksEnvironment();
38907
+ const { notify: notify17 } = useBlocksEnvironment();
38623
38908
  const isValidUserIdFormat = (userId) => {
38624
38909
  return userId.match(/^(auth0|linkedin|google|apple)\|[a-zA-Z0-9]{4,}$/);
38625
38910
  };
@@ -38642,12 +38927,12 @@ function SsoResendVerificationButton({
38642
38927
  if (newCount >= MAX_RESEND_WARNING_THRESHOLD) {
38643
38928
  if (newCount >= MAX_RESEND_BLOCK_THRESHOLD) {
38644
38929
  setDisabled(true);
38645
- notify16(
38930
+ notify17(
38646
38931
  "You have reached the maximum number of resend attempts. Please wait for up to 10 minutes for the verification email to be delivered; and check your spam folder.",
38647
38932
  "error"
38648
38933
  );
38649
38934
  } else {
38650
- notify16("You have reached the maximum number of resend attempts.", "error");
38935
+ notify17("You have reached the maximum number of resend attempts.", "error");
38651
38936
  }
38652
38937
  return;
38653
38938
  }
@@ -38655,10 +38940,10 @@ function SsoResendVerificationButton({
38655
38940
  try {
38656
38941
  const responseDetail = await arbi.sso.resendVerification(providerUserId);
38657
38942
  const notificationType = responseDetail.includes("Failed") || responseDetail.includes("failed") ? "error" : "success";
38658
- notify16(responseDetail, notificationType);
38943
+ notify17(responseDetail, notificationType);
38659
38944
  } catch (error) {
38660
38945
  console.error("[SsoResendVerificationButton] Error sending verification email:", error);
38661
- notify16("Failed to send verification email", "error");
38946
+ notify17("Failed to send verification email", "error");
38662
38947
  } finally {
38663
38948
  setLoading(false);
38664
38949
  }
@@ -38690,7 +38975,7 @@ function ConnectedSsoCallback() {
38690
38975
  const sso = useSsoSignIn();
38691
38976
  const { isAuthenticated: isAuthenticated2, isLoading, user } = sso;
38692
38977
  const auth = useAuthPages();
38693
- const { notify: notify16, navigate } = useBlocksEnvironment();
38978
+ const { notify: notify17, navigate } = useBlocksEnvironment();
38694
38979
  const passwordRules = auth.passwordRules;
38695
38980
  const isProcessing = useRef(false);
38696
38981
  const hasCheckedStatus = useRef(false);
@@ -38859,11 +39144,11 @@ function ConnectedSsoCallback() {
38859
39144
  }
38860
39145
  console.error("[SSO] Error getting access token");
38861
39146
  setError({ message: "Error getting access token" });
38862
- notify16("Failed to get authentication token", "error");
39147
+ notify17("Failed to get authentication token", "error");
38863
39148
  navigate("/");
38864
39149
  };
38865
39150
  fetchAccessToken();
38866
- }, [isAuthenticated2, sso, navigate, isLoading, notify16]);
39151
+ }, [isAuthenticated2, sso, navigate, isLoading, notify17]);
38867
39152
  useEffect(() => {
38868
39153
  const checkStatus = async () => {
38869
39154
  if (!accessToken || !user?.email || hasCheckedStatus.current) {
@@ -38881,14 +39166,14 @@ function ConnectedSsoCallback() {
38881
39166
  console.error("[SSO] Error checking status:", error2);
38882
39167
  const errorMsg = error2 instanceof Error ? error2.message : "Failed to check account status";
38883
39168
  setError({ message: errorMsg });
38884
- notify16("Unable to verify account status", "error");
39169
+ notify17("Unable to verify account status", "error");
38885
39170
  navigate("/");
38886
39171
  } finally {
38887
39172
  setIsCheckingStatus(false);
38888
39173
  }
38889
39174
  };
38890
39175
  checkStatus();
38891
- }, [accessToken, user, arbi, navigate, notify16]);
39176
+ }, [accessToken, user, arbi, navigate, notify17]);
38892
39177
  const handlePasswordSubmit = useCallback(
38893
39178
  async (e) => {
38894
39179
  e.preventDefault();
@@ -38930,7 +39215,7 @@ function ConnectedSsoCallback() {
38930
39215
  return;
38931
39216
  }
38932
39217
  if (linked) {
38933
- notify16("Your local account has been linked to SSO", "success");
39218
+ notify17("Your local account has been linked to SSO", "success");
38934
39219
  }
38935
39220
  } catch (err) {
38936
39221
  console.error("[SSO] Error during authentication:", err);
@@ -38950,7 +39235,7 @@ function ConnectedSsoCallback() {
38950
39235
  saveRecoveryKey,
38951
39236
  arbi,
38952
39237
  auth,
38953
- notify16,
39238
+ notify17,
38954
39239
  passwordRules
38955
39240
  ]
38956
39241
  );
@@ -39618,7 +39903,7 @@ function ConnectedSharedFilesPage({
39618
39903
  }) {
39619
39904
  const arbi = useArbi();
39620
39905
  const { status, user } = useArbiSession();
39621
- const { notify: notify16 } = useBlocksEnvironment();
39906
+ const { notify: notify17 } = useBlocksEnvironment();
39622
39907
  const [client, setClient] = useState(null);
39623
39908
  useEffect(() => {
39624
39909
  let live = true;
@@ -39643,7 +39928,7 @@ function ConnectedSharedFilesPage({
39643
39928
  name: [user.given_name, user.family_name].filter(Boolean).join(" "),
39644
39929
  externalId: user.external_id
39645
39930
  },
39646
- notify: (message, kind) => notify16(message, kind),
39931
+ notify: (message, kind) => notify17(message, kind),
39647
39932
  children: /* @__PURE__ */ jsx("div", { className: "h-dvh bg-background text-foreground", children: shareId ? /* @__PURE__ */ jsx(
39648
39933
  SharedFileView,
39649
39934
  {
@@ -39963,7 +40248,7 @@ function ConnectedTipBar({
39963
40248
  }) {
39964
40249
  const { showHints, settingsLoaded, setShowHintsPersisted } = useContextualHints();
39965
40250
  const { dismissed, dismissTip } = useDismissedTips();
39966
- const { notify: notify16 } = useBlocksEnvironment();
40251
+ const { notify: notify17 } = useBlocksEnvironment();
39967
40252
  const { data: workspaces } = useWorkspaces();
39968
40253
  const workspaceOpen = useArbiSessionState((session) => !!session.workspaceId);
39969
40254
  const [editing, setEditing] = useState(false);
@@ -39986,7 +40271,7 @@ function ConnectedTipBar({
39986
40271
  };
39987
40272
  const dismiss = onDismiss ?? (() => {
39988
40273
  setShowHintsPersisted(false);
39989
- notify16(labels?.tipsOff ?? DEFAULT_TIPS_OFF_LABEL, "info");
40274
+ notify17(labels?.tipsOff ?? DEFAULT_TIPS_OFF_LABEL, "info");
39990
40275
  });
39991
40276
  return /* @__PURE__ */ jsxs(Fragment, { children: [
39992
40277
  /* @__PURE__ */ jsx(
@@ -40255,6 +40540,6 @@ function ChromeInstallDialog({
40255
40540
  ] }) });
40256
40541
  }
40257
40542
 
40258
- export { AddAddonDialog, AddFromAccountsButton, AgentBarShell, AgentControlBar, BACKFILL_OPTIONS, BUILTIN_GLOBAL_DIALOGS, BULK_REPROCESS_LIMIT, BillingProjectEntity, CaptureBar, ChangePlanDialog, ChatAttachmentList, ChromeInstallDialog, ConnectedAccountAccessBadge, ConnectedAccountCluster, ConnectedAccountSettings, ConnectedAccountsImport, ConnectedAddContacts, ConnectedAgentChat, ConnectedAgentChatPanel, ConnectedAgentConfigForm, ConnectedAgentCreator, ConnectedAgentsPage, ConnectedAiReview, ConnectedAppRuntime, ConnectedAppShell, ConnectedAppsSettings, ConnectedArchiveWorkspaceButton, ConnectedAuthorizeAgent, ConnectedBulkTagEditor, ConnectedCalendar, ConnectedChatMessageBody, ConnectedChatPeopleDialog, ConnectedChatThread, ConnectedConfigForm, ConnectedContactCardForm, ConnectedContactMenu, ConnectedContactToggle, ConnectedContactsDirectory, ConnectedConversation, ConnectedConversationEmpty, ConnectedConversationStart, ConnectedDangerZone, ConnectedDatabasesPage, ConnectedDeploymentStorage, ConnectedDeveloperConfig, ConnectedDmGrantAccessDialog, ConnectedDocumentProcessingPanel, ConnectedDriveSyncDialog, ConnectedEmailWorkspaceDialog, ConnectedEntitlementGate, ConnectedExportDialog, ConnectedExportPanel, ConnectedFactsPage, ConnectedFieldsEditor, ConnectedFieldsManager, ConnectedFilesBulkActions, ConnectedFilesExplorer, ConnectedFilesPage, ConnectedFilterDropdown, ConnectedForgotPassword, ConnectedGettingStarted, ConnectedGlobalDialogs, ConnectedGrantWorkspaceAccessDialog, ConnectedGridView, ConnectedGroupMembers, ConnectedIdentityVerification, ConnectedInviteMenu, ConnectedLoginPage, ConnectedLogoutDialog, ConnectedMailAccounts, ConnectedMailComposer, ConnectedMailInviteCard, ConnectedMailMessage, ConnectedMailSettings, ConnectedMailSetup, ConnectedMailbox, ConnectedMailboxSyncDialog, ConnectedMessenger, ConnectedModelSelector, ConnectedMoveToFolder, ConnectedNewThreadDialog, ConnectedNotificationCenter, ConnectedNotificationPreferences, ConnectedOAuthConsentPage, ConnectedPanelHost, ConnectedPasswordChangeDialog, ConnectedPeerActions, ConnectedPeopleMultiSelect, ConnectedPremiumModels, ConnectedPrivacySettings, ConnectedProfileCard, ConnectedProjectEntity, ConnectedProjectPage, ConnectedProjectSelector, ConnectedProjectStorage, ConnectedProjectsPanel, ConnectedPublicBooking, ConnectedQuotaDialog, ConnectedRecentlyDeletedButton, ConnectedRecipientSelector, ConnectedRecoveryKeyDialog, ConnectedReportProblem, ConnectedRequestWorkspaceAccess, ConnectedRequireVerified, ConnectedSearchPage, ConnectedSecuritySection, ConnectedSessionsRow, ConnectedSettingsPage, ConnectedShareDialog, ConnectedSharePointAdminConsentPage, ConnectedSharedFilesPage, ConnectedSignatureVerifyPage, ConnectedSkillUpload, ConnectedSkillsBrowser, ConnectedSkillsLibrary, ConnectedSsoCallback, ConnectedStorageProjectCard, ConnectedStorageSettings, ConnectedTagEditorDialog, ConnectedTagForm, ConnectedTagTable, ConnectedTagsPage, ConnectedTaskAccessRequest, ConnectedTaskStartDialog, ConnectedThreadFollow, ConnectedThreadLauncher, ConnectedThreadTabs, ConnectedThreadsPage, ConnectedTipBar, ConnectedTransferWatcher, ConnectedUnarchiveWorkspaceDialog, ConnectedUpcomingEvents, ConnectedUpload, ConnectedUploadDropzone, ConnectedWelcomeDialog, ConnectedWorkflowStart, ConnectedWorkspaceActivity, ConnectedWorkspaceDashboard, ConnectedWorkspaceEntity, ConnectedWorkspaceFormModal, ConnectedWorkspaceHouseTemplate, ConnectedWorkspaceList, ConnectedWorkspaceMembers, ConnectedWorkspaceNotificationMenu, ConnectedWorkspaceSettings, ConnectedWorkspaceShareDialog, ConnectedWorkspaceTrash, ConversationAlert, ConversationEntity, ConversationSendButton, ConversationStatusCell, DEFAULT_AGENTS_PAGE_SECTIONS, DEFAULT_AGENT_CHAT_CARD_LABELS, DEFAULT_CONNECTED_AGENTS_PAGE_LABELS, DEFAULT_CONNECTED_SEARCH_PAGE_LABELS, DEFAULT_CONNECTED_SKILLS_BROWSER_LABELS, DEFAULT_CONNECTED_SKILL_UPLOAD_LABELS, DEFAULT_GETTING_STARTED_STEPS, DEFAULT_OAUTH_PERMISSIONS, DEFAULT_PROJECTS_LIST_LABELS, DEFAULT_PROJECT_DETAILS_LABELS, DEFAULT_PROJECT_DETAIL_FIELDS, DEFAULT_PROJECT_LIST_COLUMNS, DEFAULT_PROJECT_PAGE_LABELS, DEFAULT_SEARCH_FIELDS, DEFAULT_SEARCH_ROW_LABELS, DEFAULT_SETTINGS_SECTIONS, DEFAULT_TIMELINE_LABEL_WIDTH, DEFAULT_TIPS_OFF_LABEL, DEFAULT_WORKSPACE_LIST_LABELS, DeveloperFooter, DocumentsFilterBarActions, DocumentsUploadButton, EmptyWorkspaceUpload, FACTS_GRID_ID, FIRST_LOGIN_WORKSPACES_VIEW, GETTING_STARTED_DONE_TIP, INVITATION_ROW_FILTERS, INVITE_SECTION, ImportVcfButton, ImportVcfSummary, InvoicesModal, LOOK_AGAIN_LABEL, MicButton, NewProjectFlow, NotificationCenter, NotificationEvent, PAGE_TRANSITION_VIEW, PENDING_ACCESS_REVIEW_VIEW, PENDING_LOOKUP_MS, PENDING_NOTIFICATION_VIEW, PENDING_RECOVERY_KEY, PENDING_TASK_MESSAGE, PENDING_WORKSPACE_SHARE_VIEW, PREMIUM_TIER_TAG, PROJECTS_BASE_TAB_ID, PROMPT_BINDINGS, PersistedGridView, ProgressiveLoadingChip, ProjectDetail, ProjectUsageContent, ProjectsTable, REFERRAL_OFFER, RecoveryKeyDownload, ReportProblemDialog, RunStatsBadges, SEARCH_FIELD_OPTIONS, SEEN_ADDON_BLOCKS_VIEW, SETTINGS_SECTION_IDS, STANDARD_TIER_TAG, SessionStatusIcon, SharedProjects, SsoResendVerificationButton, StorageBreakdown, StorageItemsTable, StorageTiers, StreamedArtifact, TILE_DEFAULT, TILE_MAX, TILE_MIN, ThreadSwitcher, ViewSelector, WELCOME_DIALOG_SESSION_KEY, WORKSPACES_TAB_ID, WorkflowLaunchHost, WorkflowRunStatusCell, WorkspaceArchiveStatus, accountSettingsSection, addonArrivalMessage, appearanceSettingsSection, archiveWorkspaceSection, archivedWorkspaceState, bookingCancelLink, buildNotificationCenterItems, chatSettingsSection, closeAccessRequestReview, connectedAppsSettingsSection, connectionSettingsSection, countNotificationTypes, createDocumentColumns, createEventCall, createNotificationTargetOpener, createTagColumn, deduplicateByContentHash, describePlan, dialogTabForPlace, distinctPeers, documentFamilyMeta, documentPlaceKey, emailInWorkspaceSection, featuresSettingsSection, filterNotificationCenterItems, formatAccessExpiry, formatStorageGb, groupFallbackName, houseTemplateWorkspaceSection, identifyOAuthClient, inviteRows, joinEventMeeting, loadEventWebinar, mailSettingsSection, openMeetingLink, openSsoPopup, organisationSettingsSection, parseArbiCallUrl, parseOAuthConsentRequest, parseTypedSkill, privacySettingsSection, renderMessengerUser, renderSessionStatusIcon, requestProjectBillingFocus, resolveAttendeeUsers, resolveAttendeeUsersRemote, resolveCallPeers, resolveCallPeersRemote, resolveLaunchInputs, resolveMailbox, reviewAccessRequest, reviewProgress, shareEventCall, showDocumentPlace, skipWelcomeDialogThisSession, storageSettingsSection, suppliedKinds, threadStateOf, toWorkspaceSummary, transferOutcome, updateEventWebinarRoles, usageSettingsSection, useAccessRequestUnderReview, useAddFromUrls, useAiReviewLiveUpdates, useAppShell, useAutoRefreshPendingProjects, useBatchCompleteToasts, useChatMessageToasts, useConnectedAgentManagement, useConnectedCalendarCalls, useConnectedNotificationBell, useConnectedShellWorkspaces, useConnectedWorkspaceList, useConnectedWorkspaceSettings, useContextualHints, useDocumentBulkActions, useDocumentFilters, useDocumentGridSync, useDocumentNavigation, useDocumentTable, useExportStore, useGettingStarted, useHasAccountsImport, useInstallSkillPackOnSignIn, useInvitationRows, useLaunchWorkflow, useMessengerRows, useModelPicker, useNotificationBellEntry, useNotificationToasts, useOpenBillingPortal, useOpenNotificationTarget, useOpenWorkspaceActivityTarget, usePendingTaskThread, useProjectBillingFocus, useReferralReward, useReportProblem, useSessionPanelMode, useSessionSidebar, useSlashSkillWorkflows, useStartRequestedDraft, useTableViews, useTaskStart, useThreadLabels, useThreadTabs, useWorkflowLaunch, webinarRolesByUser, windowLabel, withAddonBlocksBought, withMissingTableViews, withTableView, withoutTableView };
40543
+ export { AddAddonDialog, AddFromAccountsButton, AgentBarShell, AgentControlBar, BACKFILL_OPTIONS, BUILTIN_GLOBAL_DIALOGS, BULK_REPROCESS_LIMIT, BillingProjectEntity, CaptureBar, ChangePlanDialog, ChatAttachmentList, ChromeInstallDialog, ConnectedAccountAccessBadge, ConnectedAccountCluster, ConnectedAccountSettings, ConnectedAccountsImport, ConnectedAddContacts, ConnectedAgentChat, ConnectedAgentChatPanel, ConnectedAgentConfigForm, ConnectedAgentCreator, ConnectedAgentsPage, ConnectedAiReview, ConnectedAppRuntime, ConnectedAppShell, ConnectedAppsSettings, ConnectedArchiveWorkspaceButton, ConnectedAuthorizeAgent, ConnectedBulkTagEditor, ConnectedCalendar, ConnectedChatMessageBody, ConnectedChatPeopleDialog, ConnectedChatThread, ConnectedConfigForm, ConnectedContactCardForm, ConnectedContactMenu, ConnectedContactToggle, ConnectedContactsDirectory, ConnectedConversation, ConnectedConversationEmpty, ConnectedConversationStart, ConnectedDangerZone, ConnectedDatabasesPage, ConnectedDeploymentStorage, ConnectedDeveloperConfig, ConnectedDmGrantAccessDialog, ConnectedDocumentProcessingPanel, ConnectedDriveSyncDialog, ConnectedEmailWorkspaceDialog, ConnectedEntitlementGate, ConnectedExportDialog, ConnectedExportPanel, ConnectedFactsPage, ConnectedFieldsEditor, ConnectedFieldsManager, ConnectedFilesBulkActions, ConnectedFilesExplorer, ConnectedFilesPage, ConnectedFilterDropdown, ConnectedForgotPassword, ConnectedGettingStarted, ConnectedGlobalDialogs, ConnectedGrantWorkspaceAccessDialog, ConnectedGridView, ConnectedGroupMembers, ConnectedIdentityVerification, ConnectedInviteMenu, ConnectedLoginPage, ConnectedLogoutDialog, ConnectedMailAccounts, ConnectedMailComposer, ConnectedMailInviteCard, ConnectedMailMessage, ConnectedMailSettings, ConnectedMailSetup, ConnectedMailbox, ConnectedMailboxSyncDialog, ConnectedMessenger, ConnectedModelConnectionsSettings, ConnectedModelSelector, ConnectedMoveToFolder, ConnectedNewThreadDialog, ConnectedNotificationCenter, ConnectedNotificationPreferences, ConnectedOAuthConsentPage, ConnectedPanelHost, ConnectedPasswordChangeDialog, ConnectedPeerActions, ConnectedPeopleMultiSelect, ConnectedPremiumModels, ConnectedPrivacySettings, ConnectedProfileCard, ConnectedProjectEntity, ConnectedProjectPage, ConnectedProjectSelector, ConnectedProjectStorage, ConnectedProjectsPanel, ConnectedPublicBooking, ConnectedQuotaDialog, ConnectedRecentlyDeletedButton, ConnectedRecipientSelector, ConnectedRecoveryKeyDialog, ConnectedReportProblem, ConnectedRequestWorkspaceAccess, ConnectedRequireVerified, ConnectedSearchPage, ConnectedSecuritySection, ConnectedSessionsRow, ConnectedSettingsPage, ConnectedShareDialog, ConnectedSharePointAdminConsentPage, ConnectedSharedFilesPage, ConnectedSignatureVerifyPage, ConnectedSkillUpload, ConnectedSkillsBrowser, ConnectedSkillsLibrary, ConnectedSsoCallback, ConnectedStorageProjectCard, ConnectedStorageSettings, ConnectedTagEditorDialog, ConnectedTagForm, ConnectedTagTable, ConnectedTagsPage, ConnectedTaskAccessRequest, ConnectedTaskStartDialog, ConnectedThreadFollow, ConnectedThreadLauncher, ConnectedThreadTabs, ConnectedThreadsPage, ConnectedTipBar, ConnectedTransferWatcher, ConnectedUnarchiveWorkspaceDialog, ConnectedUpcomingEvents, ConnectedUpload, ConnectedUploadDropzone, ConnectedWelcomeDialog, ConnectedWorkflowStart, ConnectedWorkspaceActivity, ConnectedWorkspaceDashboard, ConnectedWorkspaceEntity, ConnectedWorkspaceFormModal, ConnectedWorkspaceHouseTemplate, ConnectedWorkspaceList, ConnectedWorkspaceMembers, ConnectedWorkspaceNotificationMenu, ConnectedWorkspaceSettings, ConnectedWorkspaceShareDialog, ConnectedWorkspaceTrash, ConversationAlert, ConversationEntity, ConversationSendButton, ConversationStatusCell, DEFAULT_AGENTS_PAGE_SECTIONS, DEFAULT_AGENT_CHAT_CARD_LABELS, DEFAULT_CONNECTED_AGENTS_PAGE_LABELS, DEFAULT_CONNECTED_SEARCH_PAGE_LABELS, DEFAULT_CONNECTED_SKILLS_BROWSER_LABELS, DEFAULT_CONNECTED_SKILL_UPLOAD_LABELS, DEFAULT_GETTING_STARTED_STEPS, DEFAULT_OAUTH_PERMISSIONS, DEFAULT_PROJECTS_LIST_LABELS, DEFAULT_PROJECT_DETAILS_LABELS, DEFAULT_PROJECT_DETAIL_FIELDS, DEFAULT_PROJECT_LIST_COLUMNS, DEFAULT_PROJECT_PAGE_LABELS, DEFAULT_SEARCH_FIELDS, DEFAULT_SEARCH_ROW_LABELS, DEFAULT_SETTINGS_SECTIONS, DEFAULT_TIMELINE_LABEL_WIDTH, DEFAULT_TIPS_OFF_LABEL, DEFAULT_WORKSPACE_LIST_LABELS, DeveloperFooter, DocumentsFilterBarActions, DocumentsUploadButton, EmptyWorkspaceUpload, FACTS_GRID_ID, FIRST_LOGIN_WORKSPACES_VIEW, GETTING_STARTED_DONE_TIP, INVITATION_ROW_FILTERS, INVITE_SECTION, ImportVcfButton, ImportVcfSummary, InvoicesModal, LOOK_AGAIN_LABEL, MicButton, NewProjectFlow, NotificationCenter, NotificationEvent, PAGE_TRANSITION_VIEW, PENDING_ACCESS_REVIEW_VIEW, PENDING_LOOKUP_MS, PENDING_NOTIFICATION_VIEW, PENDING_RECOVERY_KEY, PENDING_TASK_MESSAGE, PENDING_WORKSPACE_SHARE_VIEW, PREMIUM_TIER_TAG, PROJECTS_BASE_TAB_ID, PROMPT_BINDINGS, PersistedGridView, ProgressiveLoadingChip, ProjectDetail, ProjectUsageContent, ProjectsTable, REFERRAL_OFFER, RecoveryKeyDownload, ReportProblemDialog, RunStatsBadges, SEARCH_FIELD_OPTIONS, SEEN_ADDON_BLOCKS_VIEW, SETTINGS_SECTION_IDS, STANDARD_TIER_TAG, SessionStatusIcon, SharedProjects, SsoResendVerificationButton, StorageBreakdown, StorageItemsTable, StorageTiers, StreamedArtifact, TILE_DEFAULT, TILE_MAX, TILE_MIN, ThreadSwitcher, ViewSelector, WELCOME_DIALOG_SESSION_KEY, WORKSPACES_TAB_ID, WorkflowLaunchHost, WorkflowRunStatusCell, WorkspaceArchiveStatus, accountSettingsSection, addonArrivalMessage, appearanceSettingsSection, archiveWorkspaceSection, archivedWorkspaceState, bookingCancelLink, buildNotificationCenterItems, chatSettingsSection, closeAccessRequestReview, connectedAppsSettingsSection, connectionSettingsSection, countNotificationTypes, createDocumentColumns, createEventCall, createNotificationTargetOpener, createPaymentRequiredMiddleware, createTagColumn, deduplicateByContentHash, describePlan, dialogTabForPlace, distinctPeers, documentFamilyMeta, documentPlaceKey, emailInWorkspaceSection, featuresSettingsSection, filterNotificationCenterItems, formatAccessExpiry, formatStorageGb, groupFallbackName, houseTemplateWorkspaceSection, identifyOAuthClient, inviteRows, joinEventMeeting, loadEventWebinar, mailSettingsSection, modelConnectionsSettingsSection, openMeetingLink, openQuotaDialogIfUsedUp, openSsoPopup, organisationSettingsSection, parseArbiCallUrl, parseOAuthConsentRequest, parseTypedSkill, paymentConfirmationUrl, paymentRequiredToastMessage, privacySettingsSection, renderMessengerUser, renderSessionStatusIcon, requestProjectBillingFocus, resolveAttendeeUsers, resolveAttendeeUsersRemote, resolveCallPeers, resolveCallPeersRemote, resolveLaunchInputs, resolveMailbox, reviewAccessRequest, reviewProgress, routePaymentRequired, shareEventCall, showDocumentPlace, skipWelcomeDialogThisSession, storageSettingsSection, suppliedKinds, surfacePaymentRequired, threadStateOf, toWorkspaceSummary, transferOutcome, updateEventWebinarRoles, usageSettingsSection, useAccessRequestUnderReview, useAddFromUrls, useAiReviewLiveUpdates, useAppShell, useAutoRefreshPendingProjects, useBatchCompleteToasts, useChatMessageToasts, useConnectedAgentManagement, useConnectedCalendarCalls, useConnectedNotificationBell, useConnectedShellWorkspaces, useConnectedWorkspaceList, useConnectedWorkspaceSettings, useContextualHints, useDocumentBulkActions, useDocumentFilters, useDocumentGridSync, useDocumentNavigation, useDocumentTable, useExportStore, useGettingStarted, useHasAccountsImport, useInstallSkillPackOnSignIn, useInvitationRows, useLaunchWorkflow, useMessengerRows, useModelPicker, useNotificationBellEntry, useNotificationToasts, useOpenBillingPortal, useOpenNotificationTarget, useOpenWorkspaceActivityTarget, usePendingTaskThread, useProjectBillingFocus, useReferralReward, useReportProblem, useSessionPanelMode, useSessionSidebar, useSlashSkillWorkflows, useStartRequestedDraft, useTableViews, useTaskStart, useThreadLabels, useThreadTabs, useWorkflowLaunch, webinarRolesByUser, windowLabel, withAddonBlocksBought, withMissingTableViews, withTableView, withoutTableView };
40259
40544
  //# sourceMappingURL=index.js.map
40260
40545
  //# sourceMappingURL=index.js.map