@arbidocs/blocks 0.5.66 → 0.5.68
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.
- package/README.md +14 -3
- package/dist/ConnectedCallDock-FFIDDYGH.cjs +1 -1
- package/dist/ConnectedCallDock-VMEBH4LG.js +1 -1
- package/dist/ConnectedCallRoom-2FNSX2VG.js +1 -1
- package/dist/ConnectedCallRoom-HYRLJUIV.cjs +1 -1
- package/dist/{ConnectedDocumentViewer-XFQDHVWM.js → ConnectedDocumentViewer-MEKSE7KG.js} +14 -14
- package/dist/{ConnectedDocumentViewer-XFQDHVWM.js.map → ConnectedDocumentViewer-MEKSE7KG.js.map} +1 -1
- package/dist/{ConnectedDocumentViewer-S6YKCCRN.cjs → ConnectedDocumentViewer-VVYEBNAK.cjs} +15 -15
- package/dist/{ConnectedDocumentViewer-S6YKCCRN.cjs.map → ConnectedDocumentViewer-VVYEBNAK.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-L3R3ROPZ.cjs → ConnectedNativeDocxComparison-MIXCSPQP.cjs} +8 -8
- package/dist/{ConnectedNativeDocxComparison-L3R3ROPZ.cjs.map → ConnectedNativeDocxComparison-MIXCSPQP.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-PSAP3Q7D.js → ConnectedNativeDocxComparison-ZXWLLKCZ.js} +7 -7
- package/dist/{ConnectedNativeDocxComparison-PSAP3Q7D.js.map → ConnectedNativeDocxComparison-ZXWLLKCZ.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-VDBC4XRT.cjs → ConnectedNativeDocxEditor-HDI7OBDA.cjs} +8 -8
- package/dist/{ConnectedNativeDocxEditor-VDBC4XRT.cjs.map → ConnectedNativeDocxEditor-HDI7OBDA.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-PI6QTPXZ.js → ConnectedNativeDocxEditor-IBQ7M3MU.js} +6 -6
- package/dist/{ConnectedNativeDocxEditor-PI6QTPXZ.js.map → ConnectedNativeDocxEditor-IBQ7M3MU.js.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-V4MTKVNE.js → ConnectedStreamedWordArtifact-S64KJPEJ.js} +7 -7
- package/dist/ConnectedStreamedWordArtifact-S64KJPEJ.js.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-YSW6D7AG.cjs → ConnectedStreamedWordArtifact-V7WFW5EP.cjs} +8 -8
- package/dist/ConnectedStreamedWordArtifact-V7WFW5EP.cjs.map +1 -0
- package/dist/{DocumentReviewCard-TQQADJ36.js → DocumentReviewCard-5U3TGJZA.js} +6 -6
- package/dist/{DocumentReviewCard-TQQADJ36.js.map → DocumentReviewCard-5U3TGJZA.js.map} +1 -1
- package/dist/{DocumentReviewCard-BQ6ZD5MD.cjs → DocumentReviewCard-VFNMJSK7.cjs} +6 -6
- package/dist/{DocumentReviewCard-BQ6ZD5MD.cjs.map → DocumentReviewCard-VFNMJSK7.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-GKMVTECZ.cjs → WorkspaceTableView-DHMCJRC6.cjs} +6 -6
- package/dist/{WorkspaceTableView-GKMVTECZ.cjs.map → WorkspaceTableView-DHMCJRC6.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-YFLVFRJL.js → WorkspaceTableView-EH5CEB44.js} +4 -4
- package/dist/{WorkspaceTableView-YFLVFRJL.js.map → WorkspaceTableView-EH5CEB44.js.map} +1 -1
- package/dist/agents/index.cjs +283 -283
- package/dist/agents/index.js +5 -5
- package/dist/chat/index.cjs +1 -1
- package/dist/chat/index.js +1 -1
- package/dist/{chunk-TJ7QEGVP.cjs → chunk-35FBVTT6.cjs} +18 -18
- package/dist/{chunk-TJ7QEGVP.cjs.map → chunk-35FBVTT6.cjs.map} +1 -1
- package/dist/{chunk-3SHZPTR2.cjs → chunk-3DQZ7JWL.cjs} +18 -18
- package/dist/{chunk-3SHZPTR2.cjs.map → chunk-3DQZ7JWL.cjs.map} +1 -1
- package/dist/{chunk-EM4KOKE6.js → chunk-5TFZFB5U.js} +3 -3
- package/dist/{chunk-EM4KOKE6.js.map → chunk-5TFZFB5U.js.map} +1 -1
- package/dist/{chunk-PBIFISDD.js → chunk-7P24MJQN.js} +3 -3
- package/dist/{chunk-PBIFISDD.js.map → chunk-7P24MJQN.js.map} +1 -1
- package/dist/{chunk-TCCJ5I6G.js → chunk-B6QTKCDK.js} +5 -5
- package/dist/{chunk-TCCJ5I6G.js.map → chunk-B6QTKCDK.js.map} +1 -1
- package/dist/{chunk-EG3BB32W.cjs → chunk-CCSF7RI4.cjs} +3 -3
- package/dist/{chunk-EG3BB32W.cjs.map → chunk-CCSF7RI4.cjs.map} +1 -1
- package/dist/{chunk-QK546T4C.cjs → chunk-CKNUL4LM.cjs} +3 -3
- package/dist/{chunk-QK546T4C.cjs.map → chunk-CKNUL4LM.cjs.map} +1 -1
- package/dist/{chunk-WBLCPCWR.cjs → chunk-CUSOXCBV.cjs} +7 -7
- package/dist/{chunk-WBLCPCWR.cjs.map → chunk-CUSOXCBV.cjs.map} +1 -1
- package/dist/{chunk-DJE2E7YH.cjs → chunk-EPBFVO4F.cjs} +278 -68
- package/dist/chunk-EPBFVO4F.cjs.map +1 -0
- package/dist/{chunk-K26RLK2Y.cjs → chunk-IH2WZUTL.cjs} +4 -4
- package/dist/{chunk-K26RLK2Y.cjs.map → chunk-IH2WZUTL.cjs.map} +1 -1
- package/dist/{chunk-NDKZ6OR3.cjs → chunk-LEW4GUFW.cjs} +3 -3
- package/dist/{chunk-NDKZ6OR3.cjs.map → chunk-LEW4GUFW.cjs.map} +1 -1
- package/dist/{chunk-VWM3J6ES.js → chunk-LKVOHL6C.js} +3 -3
- package/dist/{chunk-VWM3J6ES.js.map → chunk-LKVOHL6C.js.map} +1 -1
- package/dist/{chunk-CEKOZAGO.js → chunk-LTPOV3W4.js} +4 -4
- package/dist/{chunk-CEKOZAGO.js.map → chunk-LTPOV3W4.js.map} +1 -1
- package/dist/{chunk-DRUNPUDT.cjs → chunk-MM22MFON.cjs} +12 -12
- package/dist/{chunk-DRUNPUDT.cjs.map → chunk-MM22MFON.cjs.map} +1 -1
- package/dist/{chunk-BELZ2WD2.js → chunk-N54OMO6J.js} +281 -71
- package/dist/chunk-N54OMO6J.js.map +1 -0
- package/dist/{chunk-RB54N5I7.cjs → chunk-NBX7WWB6.cjs} +5 -5
- package/dist/{chunk-RB54N5I7.cjs.map → chunk-NBX7WWB6.cjs.map} +1 -1
- package/dist/{chunk-B3CRSCLK.cjs → chunk-NMQVII6H.cjs} +4 -4
- package/dist/{chunk-B3CRSCLK.cjs.map → chunk-NMQVII6H.cjs.map} +1 -1
- package/dist/{chunk-U52KPOXT.js → chunk-NOBSRGFX.js} +3 -3
- package/dist/{chunk-U52KPOXT.js.map → chunk-NOBSRGFX.js.map} +1 -1
- package/dist/{chunk-2LUA7UDE.js → chunk-P2ZQKJXS.js} +7 -7
- package/dist/{chunk-2LUA7UDE.js.map → chunk-P2ZQKJXS.js.map} +1 -1
- package/dist/{chunk-KNOSLLTC.js → chunk-PKDPQS6Z.js} +3 -3
- package/dist/{chunk-KNOSLLTC.js.map → chunk-PKDPQS6Z.js.map} +1 -1
- package/dist/{chunk-J6FRFIVL.js → chunk-RAGITH2N.js} +3 -3
- package/dist/{chunk-J6FRFIVL.js.map → chunk-RAGITH2N.js.map} +1 -1
- package/dist/{chunk-PMWZTVIY.js → chunk-RSVHFZJR.js} +12 -6
- package/dist/chunk-RSVHFZJR.js.map +1 -0
- package/dist/{chunk-IRXPUQFP.js → chunk-SC3GOSJG.js} +3 -3
- package/dist/{chunk-IRXPUQFP.js.map → chunk-SC3GOSJG.js.map} +1 -1
- package/dist/{chunk-SBAM3UZX.js → chunk-SNU3AOCW.js} +3 -3
- package/dist/{chunk-SBAM3UZX.js.map → chunk-SNU3AOCW.js.map} +1 -1
- package/dist/{chunk-BP5KBZLX.cjs → chunk-XXI3EIEO.cjs} +53 -47
- package/dist/chunk-XXI3EIEO.cjs.map +1 -0
- package/dist/{chunk-D27BBGUF.cjs → chunk-ZSP6QSMG.cjs} +4 -4
- package/dist/{chunk-D27BBGUF.cjs.map → chunk-ZSP6QSMG.cjs.map} +1 -1
- package/dist/connect/docx.cjs +12 -12
- package/dist/connect/docx.js +8 -8
- package/dist/connect/index.cjs +1365 -1072
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.js +915 -630
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +13 -13
- package/dist/connect/viewer.js +12 -12
- package/dist/connection/billing/index.d.ts +1 -0
- package/dist/connection/billing/payment-required.d.ts +45 -0
- package/dist/connection/conversation/ConnectedMessageArea.d.ts +2 -0
- package/dist/connection/conversation/ConnectedMessageList.d.ts +4 -1
- package/dist/connection/embedded/EmbeddedChatPanel.d.ts +3 -1
- package/dist/connection/settings-page/ConnectedModelConnectionsSettings.d.ts +1 -0
- package/dist/connection/settings-page/ConnectedSettingsPage.d.ts +3 -0
- package/dist/connection/settings-page/index.d.ts +2 -1
- package/dist/connection/workflows/useWorkflowsPageState.d.ts +1 -1
- package/dist/document-tools/index.cjs +17 -17
- package/dist/document-tools/index.js +2 -2
- package/dist/embed/index.cjs +18 -10
- package/dist/embed/index.d.ts +2 -0
- package/dist/embed/index.js +7 -7
- package/dist/files/index.cjs +1 -1
- package/dist/files/index.js +1 -1
- package/dist/index.cjs +393 -393
- package/dist/index.js +13 -13
- package/dist/site/index.cjs +17 -17
- package/dist/site/index.js +1 -1
- package/dist/studio/index.cjs +4 -4
- package/dist/studio/index.js +2 -2
- package/dist/workflow-canvas/index.cjs +27 -27
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workflow-canvas/index.js +12 -12
- package/dist/workflow-canvas/index.js.map +1 -1
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedStreamedWordArtifact-V4MTKVNE.js.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-YSW6D7AG.cjs.map +0 -1
- package/dist/chunk-BELZ2WD2.js.map +0 -1
- package/dist/chunk-BP5KBZLX.cjs.map +0 -1
- package/dist/chunk-DJE2E7YH.cjs.map +0 -1
- package/dist/chunk-PMWZTVIY.js.map +0 -1
package/dist/connect/index.js
CHANGED
|
@@ -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-
|
|
3
|
-
export { CAP_REACHED_MESSAGE, ZERO_BUDGET_MESSAGE, aiUsageResetTimestamp, formatMoney, formatResetDate, getQuotaItems, isAddonBudgetZero, isProProject, planBadgeView, planName, projectGroupBilling, useBillingSupport, useRewardBalance } from '../chunk-
|
|
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 {
|
|
8
|
-
|
|
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-RSVHFZJR.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-RSVHFZJR.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-
|
|
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-
|
|
15
|
+
import { useAuthPages, ConnectedUserEntity, AgentSteps, MessageLiveSeconds, useSsoSignIn, CompactLogin, useLoginForm, useLoginActions, useRegisterSubmitState, resolveSsoName, completeSsoSignIn, ssoAccountStatus, AskAgainContext, ConnectedMessageArea, ConversationComposer } from '../chunk-N54OMO6J.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-N54OMO6J.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 {
|
|
29
|
-
|
|
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-SC3GOSJG.js';
|
|
29
|
+
export { ConnectedWorkflowDocumentsField, ConnectedWorkflowLauncher, ConnectedWorkflowsTable, DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS, toWorkflowFieldDocument, useConnectedAgentOptions, useConnectedWorkflowScopeSource, useConnectedWorkspaceRole, useDocxCommentTarget, useNativeDocxSupport } from '../chunk-SC3GOSJG.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,39 +36,39 @@ 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-
|
|
51
|
-
import { ThemeEditor } from '../chunk-
|
|
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-NOBSRGFX.js';
|
|
51
|
+
import { ThemeEditor } from '../chunk-RAGITH2N.js';
|
|
53
52
|
import { WorkspaceNotificationMenu, ThreadFollowMenuItem, ThreadFollowButton } from '../chunk-66NMPTOH.js';
|
|
53
|
+
import { MemberAvatarStack } from '../chunk-FUPAGAZB.js';
|
|
54
54
|
import { EntityTooltip, EntityTooltipHeader, EntityTooltipStats, EntityTooltipHint } from '../chunk-3UIJLUXN.js';
|
|
55
55
|
import '../chunk-7RITEVXA.js';
|
|
56
|
-
import { UsageMeter } from '../chunk-66TA5IBN.js';
|
|
57
56
|
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
57
|
import { SearchHit } from '../chunk-BFN6CEEN.js';
|
|
58
|
+
import { UsageMeter } from '../chunk-66TA5IBN.js';
|
|
59
59
|
import '../chunk-J77BACGX.js';
|
|
60
|
-
import '../chunk-NHZK64TQ.js';
|
|
61
60
|
import { TimelineZoomControl } from '../chunk-4EZVCGRL.js';
|
|
62
61
|
import '../chunk-UJE32SST.js';
|
|
62
|
+
import '../chunk-NHZK64TQ.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';
|
|
66
66
|
import { decodeWhitespaceEntities } from '../chunk-AF6RDAJF.js';
|
|
67
|
-
import { ErrorBoundary } from '../chunk-3EWS6ECM.js';
|
|
68
|
-
import { LabelMultiSelectView } from '../chunk-JMQLTMJ7.js';
|
|
69
67
|
import { ActionCluster, usePanelHostSupport, PanelPortal, useSidebarController, DockZone, TipCard, PanelModeSwitcher, prefetchChunk } from '../chunk-I3VBVP6R.js';
|
|
70
68
|
import { SidebarBadgeRow } from '../chunk-AD76WTGR.js';
|
|
69
|
+
import { ErrorBoundary } from '../chunk-3EWS6ECM.js';
|
|
71
70
|
import { workspaceKindColor, WorkspaceIdentity } from '../chunk-6MMYWBYS.js';
|
|
71
|
+
import { LabelMultiSelectView } from '../chunk-JMQLTMJ7.js';
|
|
72
72
|
import { PassagePill } from '../chunk-5Q5IRH6F.js';
|
|
73
73
|
import { useCopyText } from '../chunk-F5D7N5KT.js';
|
|
74
74
|
import '../chunk-K4BGOPGG.js';
|
|
@@ -77,22 +77,22 @@ import { PageHeader } from '../chunk-XCVLUXFP.js';
|
|
|
77
77
|
import { tid } from '../chunk-AMTWY22T.js';
|
|
78
78
|
import '../chunk-WKYKDTNM.js';
|
|
79
79
|
import '../chunk-ZCOVDK2E.js';
|
|
80
|
-
import {
|
|
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-B6QTKCDK.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-
|
|
84
|
+
import { documentScopeLabels, matchWorkflowScope } from '../chunk-LTPOV3W4.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
|
-
import { SelectionBar, SelectionBarAction } from '../chunk-NUNKSZKU.js';
|
|
92
90
|
import '../chunk-RLWIUUQ5.js';
|
|
91
|
+
import { SelectionBar, SelectionBarAction } from '../chunk-NUNKSZKU.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';
|
|
@@ -119,8 +119,8 @@ import { ChatPage, ConversationEmpty, MessageAlert } from '../chunk-OR6GABIG.js'
|
|
|
119
119
|
import { groupOutputsByConversation, flashMessage } from '../chunk-C2SIAQAV.js';
|
|
120
120
|
import { ComposerSend, ComposerVoiceButton, MessageAuthor, ComposerDock, ComposerContainer, ScrollToBottom } from '../chunk-M5DDONVX.js';
|
|
121
121
|
import { DraftingDocChip } from '../chunk-67TZA3L7.js';
|
|
122
|
-
import '../chunk-DDCMLHXF.js';
|
|
123
122
|
import { PageContainer, Shell } from '../chunk-DF5X27QX.js';
|
|
123
|
+
import '../chunk-DDCMLHXF.js';
|
|
124
124
|
import '../chunk-UH7LTR2B.js';
|
|
125
125
|
import '../chunk-UCVGWGI6.js';
|
|
126
126
|
import '../chunk-HMICW5O7.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,
|
|
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:
|
|
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) =>
|
|
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,
|
|
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:
|
|
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) =>
|
|
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,
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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)
|
|
1292
|
-
}, [error,
|
|
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:
|
|
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
|
-
|
|
1355
|
+
notify17(l.added(slug), "success");
|
|
1356
1356
|
setUrl("");
|
|
1357
1357
|
onDone?.(slug);
|
|
1358
1358
|
} catch (error) {
|
|
1359
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1535
|
+
notify17(next === "global" ? "Shared with everyone" : "Made private", "success");
|
|
1536
1536
|
} catch (error) {
|
|
1537
|
-
|
|
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
|
-
|
|
1555
|
+
notify17(`${skill.title} deleted`, "success");
|
|
1556
1556
|
setSelected(null);
|
|
1557
1557
|
} catch {
|
|
1558
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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) =>
|
|
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:
|
|
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
|
-
|
|
2147
|
+
notify17(l.deleted(agent), "success");
|
|
2148
2148
|
return true;
|
|
2149
2149
|
} catch (error) {
|
|
2150
|
-
|
|
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
|
-
|
|
2157
|
+
notify17(l.addressCopied, "success");
|
|
2158
2158
|
} catch {
|
|
2159
|
-
if (l.addressCopyFailed !== null)
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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) =>
|
|
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:
|
|
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
|
-
|
|
2665
|
+
notify17(l.launchStarted(created.task.title || workflow.title), "success");
|
|
2666
2666
|
} catch (e) {
|
|
2667
|
-
|
|
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:
|
|
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) =>
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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(() =>
|
|
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) =>
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
4186
|
+
notify17(`Deleted "${t.name}"`, "success");
|
|
4187
4187
|
setTagId(null);
|
|
4188
4188
|
} catch (error) {
|
|
4189
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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) =>
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
4678
|
+
notify17(refusalReason(err, "Could not change sharing"), "error");
|
|
4679
4679
|
}
|
|
4680
4680
|
},
|
|
4681
|
-
[updateFactAsync,
|
|
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
|
-
|
|
4688
|
+
notify17(refusalReason(err, "Could not change confirmation"), "error");
|
|
4689
4689
|
}
|
|
4690
4690
|
},
|
|
4691
|
-
[updateFactAsync,
|
|
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
|
-
|
|
4702
|
+
notify17(`${FACT_LABELS.SINGULAR} deleted`, "success");
|
|
4703
4703
|
return true;
|
|
4704
4704
|
} catch (err) {
|
|
4705
|
-
|
|
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,
|
|
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
|
-
|
|
4731
|
+
notify17(`${FACT_LABELS.SINGULAR} updated`, "success");
|
|
4732
4732
|
} catch (err) {
|
|
4733
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4753
|
+
notify17(raw ? "Date updated" : "Date cleared", "success");
|
|
4754
4754
|
} catch (err) {
|
|
4755
|
-
|
|
4755
|
+
notify17(refusalReason(err, "Could not update date"), "error");
|
|
4756
4756
|
revert();
|
|
4757
4757
|
}
|
|
4758
4758
|
}
|
|
4759
4759
|
},
|
|
4760
|
-
[updateFactAsync, refetch,
|
|
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
|
-
|
|
4767
|
+
notify17(refusalReason(err, "Could not update labels"), "error");
|
|
4768
4768
|
}
|
|
4769
4769
|
},
|
|
4770
|
-
[updateFactAsync,
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
5246
|
+
notify17(`Deleted ${count2} ${label}`, "success");
|
|
5247
5247
|
} else {
|
|
5248
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
5314
|
+
notify17(`${verb} ${count2 - failed} of ${count2} ${label} \u2014 ${failed} failed`, "error");
|
|
5315
5315
|
}
|
|
5316
5316
|
},
|
|
5317
|
-
[freshSelectedFacts, updateFact,
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
6653
|
+
notify17("Name updated", "success");
|
|
6654
6654
|
} catch (e) {
|
|
6655
|
-
|
|
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
|
-
|
|
6664
|
+
notify17("Profile picture updated", "success");
|
|
6665
6665
|
} catch (e) {
|
|
6666
|
-
|
|
6666
|
+
notify17("Failed to update picture", "error");
|
|
6667
6667
|
throw e;
|
|
6668
6668
|
}
|
|
6669
6669
|
},
|
|
6670
|
-
onProblem: (problem) =>
|
|
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
|
-
|
|
6676
|
+
notify17("Verification code sent to your new email", "success");
|
|
6677
6677
|
} catch (e) {
|
|
6678
|
-
|
|
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
|
-
|
|
6685
|
+
notify17("Email address updated", "success");
|
|
6686
6686
|
} catch (e) {
|
|
6687
|
-
|
|
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:
|
|
6740
|
+
const { notify: notify17 } = useBlocksEnvironment();
|
|
6741
6741
|
const { data: profile } = useProfile();
|
|
6742
6742
|
const flow = useIdentityVerification({
|
|
6743
6743
|
formatPrice,
|
|
6744
|
-
onVerifiedChange: (verified) =>
|
|
6745
|
-
onNameAccepted: () =>
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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: () =>
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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) =>
|
|
7629
|
+
onError: (err) => notify17(`Failed to update Premium setting: ${String(err)}`, "error")
|
|
7630
7630
|
}
|
|
7631
7631
|
),
|
|
7632
|
-
[update,
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
8265
|
+
notify17(await action(), "success");
|
|
8067
8266
|
await invalidate();
|
|
8068
8267
|
} catch (error) {
|
|
8069
|
-
|
|
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:
|
|
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
|
-
|
|
8506
|
+
notify17(await action(), "success");
|
|
8308
8507
|
await invalidate();
|
|
8309
8508
|
} catch (error) {
|
|
8310
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
9404
|
+
notify17(`${getEntityLabel("WORKSPACE")} ${changed.join(", ")} updated`, "success");
|
|
9197
9405
|
}
|
|
9198
9406
|
} catch (err) {
|
|
9199
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
9445
|
+
notify17(`Added ${added.size} ${added.size === 1 ? "member" : "members"}`, "success");
|
|
9238
9446
|
}
|
|
9239
9447
|
if (already.length > 0) {
|
|
9240
|
-
|
|
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)
|
|
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
|
-
|
|
9497
|
+
notify17(`Successfully left ${name}`, "success");
|
|
9290
9498
|
} catch {
|
|
9291
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
9695
|
+
notify17(`Removed ${names} from ${inWorkspace}`, "success");
|
|
9488
9696
|
} catch {
|
|
9489
|
-
|
|
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:
|
|
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
|
-
|
|
9898
|
+
notify17(`${name} removed from contacts`, "success");
|
|
9691
9899
|
} else {
|
|
9692
9900
|
await add.mutateAsync([address]);
|
|
9693
|
-
|
|
9901
|
+
notify17(`${name} saved as contact`, "success");
|
|
9694
9902
|
}
|
|
9695
9903
|
} catch {
|
|
9696
|
-
|
|
9904
|
+
notify17("Failed to update contact", "error");
|
|
9697
9905
|
}
|
|
9698
|
-
}, [address, user, contact, remove, add,
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
10505
|
+
notify17(failureMessage2, "error");
|
|
10298
10506
|
});
|
|
10299
|
-
}, [text2, copyMessage, failureMessage2,
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
10591
|
+
notify17("Your Assistant is authorized for this workspace", "success");
|
|
10384
10592
|
} catch (err) {
|
|
10385
|
-
|
|
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
|
-
|
|
10601
|
+
notify17("Failed to end session", "error");
|
|
10394
10602
|
}
|
|
10395
10603
|
};
|
|
10396
10604
|
const handleGrantAccess = async () => {
|
|
10397
10605
|
if (!defaultAssistant) {
|
|
10398
|
-
|
|
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
|
-
|
|
10620
|
+
notify17("Your Assistant now has standing access to this workspace", "success");
|
|
10413
10621
|
} catch (err) {
|
|
10414
|
-
|
|
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:
|
|
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
|
-
|
|
10720
|
+
notify17(done, "success");
|
|
10513
10721
|
} catch (failure) {
|
|
10514
|
-
|
|
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:
|
|
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
|
-
|
|
10942
|
+
notify17(labels.archived(workspaceName), "success");
|
|
10735
10943
|
setOpen(false);
|
|
10736
10944
|
onArchived();
|
|
10737
10945
|
} catch (error) {
|
|
10738
|
-
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
15468
|
+
notify17(`Deleted ${count2} ${noun.toLowerCase()}`, "success");
|
|
15184
15469
|
} catch {
|
|
15185
|
-
|
|
15470
|
+
notify17("Failed to delete some workspaces", "error");
|
|
15186
15471
|
}
|
|
15187
|
-
}, [demoSeed, selected, confirm,
|
|
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-
|
|
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:
|
|
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
|
-
|
|
15989
|
+
notify17(labels.saved, "success");
|
|
15705
15990
|
} catch (e) {
|
|
15706
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
16358
|
+
notify17(`Renamed folder to "${name}"`, "success");
|
|
16074
16359
|
}
|
|
16075
16360
|
} catch {
|
|
16076
|
-
|
|
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,
|
|
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
|
-
|
|
16445
|
+
notify17(`Renamed to "${name}"`, "success");
|
|
16161
16446
|
} catch {
|
|
16162
|
-
|
|
16447
|
+
notify17("Failed to rename. Please try again.", "error");
|
|
16163
16448
|
}
|
|
16164
16449
|
},
|
|
16165
|
-
[updateDocument,
|
|
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
|
-
|
|
16484
|
+
notify17(`Deleted "${name}"`, "success");
|
|
16200
16485
|
} catch {
|
|
16201
|
-
|
|
16486
|
+
notify17("Failed to delete. Please try again.", "error");
|
|
16202
16487
|
}
|
|
16203
16488
|
},
|
|
16204
|
-
[confirm, deleteDocuments, onSelectionChange,
|
|
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
|
-
|
|
16530
|
+
notify17(`Deleted folder "${folder.name}"`, "success");
|
|
16246
16531
|
} catch {
|
|
16247
|
-
|
|
16532
|
+
notify17("Failed to delete folder. Please try again.", "error");
|
|
16248
16533
|
}
|
|
16249
16534
|
},
|
|
16250
|
-
[confirm, documents, deleteDocuments, onSelectionChange, removePendingFolder, wsId,
|
|
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
|
-
|
|
16561
|
+
notify17(
|
|
16277
16562
|
`Moved ${ids.length} item${ids.length === 1 ? "" : "s"} to "${folder ?? "Home"}"`,
|
|
16278
16563
|
"success"
|
|
16279
16564
|
);
|
|
16280
16565
|
} catch {
|
|
16281
|
-
|
|
16566
|
+
notify17("Failed to move. Please try again.", "error");
|
|
16282
16567
|
}
|
|
16283
16568
|
},
|
|
16284
|
-
[updateDocument, clearSelection,
|
|
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:
|
|
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) =>
|
|
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,
|
|
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:
|
|
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) =>
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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: () =>
|
|
17460
|
-
onError: (err) =>
|
|
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:
|
|
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
|
-
|
|
17814
|
+
notify17(`${name} ${isMuted ? "unmuted" : "muted"}`, "success");
|
|
17530
17815
|
} catch {
|
|
17531
|
-
|
|
17816
|
+
notify17("Failed to update mute settings", "error");
|
|
17532
17817
|
}
|
|
17533
|
-
}, [userSettings, isMuted, peer.external_id, updateUserSettings, name,
|
|
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
|
-
|
|
17830
|
+
notify17(`Removed ${name}`, "success");
|
|
17546
17831
|
} catch {
|
|
17547
|
-
|
|
17832
|
+
notify17("Failed to remove contact", "error");
|
|
17548
17833
|
}
|
|
17549
|
-
}, [confirm, contactId, deleteContact, name,
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
18350
|
+
notify17(l.labelled(listedDocIds.length, trimmed), "success");
|
|
18066
18351
|
setLabelOpen(false);
|
|
18067
18352
|
} catch (err) {
|
|
18068
|
-
|
|
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(
|
|
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
|
-
|
|
18727
|
+
notify17("Email couldn't be delivered", "error", { description: "Open it in Sent to see why." });
|
|
18443
18728
|
else if (status === "partially_bounced")
|
|
18444
|
-
|
|
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")
|
|
18448
|
-
else
|
|
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:
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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) =>
|
|
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 ?
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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)
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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) =>
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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) =>
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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) =>
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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) =>
|
|
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:
|
|
22388
|
+
const { confirm, notify: notify17, openConversation } = useBlocksEnvironment();
|
|
22104
22389
|
const arbi = useArbi();
|
|
22105
22390
|
const fetchEvent = useFetchCalendarEvent();
|
|
22106
|
-
const notifyError = (prefix, err) =>
|
|
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)
|
|
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
|
-
|
|
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)
|
|
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
|
-
|
|
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: () =>
|
|
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
|
-
|
|
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:
|
|
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) =>
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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:
|
|
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
|
-
|
|
23991
|
+
notify17(`Skipped ${duplicates} duplicate file${duplicates > 1 ? "s" : ""}`, "info");
|
|
23707
23992
|
return [...current, ...fresh];
|
|
23708
23993
|
}),
|
|
23709
|
-
[
|
|
23994
|
+
[notify17]
|
|
23710
23995
|
);
|
|
23711
23996
|
const fail2 = useCallback(
|
|
23712
23997
|
(message, toast = true) => {
|
|
23713
23998
|
setError(message);
|
|
23714
|
-
if (toast)
|
|
23999
|
+
if (toast) notify17(message, "error");
|
|
23715
24000
|
setUploading(null);
|
|
23716
24001
|
setProgress(null);
|
|
23717
24002
|
},
|
|
23718
|
-
[
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
24381
|
+
notify17(`Applied "${tag.name}" to 1 document`, "success");
|
|
24097
24382
|
}).catch(() => {
|
|
24098
|
-
|
|
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
|
-
|
|
24390
|
+
notify17(`Removed "${tag.name}" from 1 document`, "success");
|
|
24106
24391
|
}).catch(() => {
|
|
24107
|
-
|
|
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
|
-
|
|
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
|
-
|
|
24414
|
+
notify17(`Cleared "${tag.name}" from 1 document`, "success");
|
|
24130
24415
|
}).catch(() => {
|
|
24131
|
-
|
|
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
|
-
|
|
24424
|
+
notify17(`Updated "${tag.name}" for 1 document`, "success");
|
|
24140
24425
|
}).catch(() => {
|
|
24141
|
-
|
|
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
|
-
|
|
24434
|
+
notify17(`Set "${tag.name}" for 1 document`, "success");
|
|
24150
24435
|
}).catch(() => {
|
|
24151
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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(
|
|
24930
|
-
notifyRef.current =
|
|
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
|
-
|
|
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
|
-
|
|
25248
|
+
notify17(`Cleared date for "${docTitle}"`, "success");
|
|
24964
25249
|
return;
|
|
24965
25250
|
}
|
|
24966
25251
|
if (!/^\d{4}-\d{2}-\d{2}$/.test(newValue)) {
|
|
24967
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
25310
|
+
notify17(`Updated folder for "${docTitle}"`, "success");
|
|
25026
25311
|
}
|
|
25027
25312
|
},
|
|
25028
|
-
[updateDocumentMutation,
|
|
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:
|
|
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
|
|
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
|
-
|
|
25399
|
+
notify17(`Shared ${plural4(toShare.length)}`, "success");
|
|
25115
25400
|
} catch {
|
|
25116
|
-
|
|
25401
|
+
notify17("Failed to share documents. Please try again.", "error");
|
|
25117
25402
|
}
|
|
25118
|
-
}, [freshSelectedDocuments, selectedDocuments.length, updateDocuments,
|
|
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
|
|
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
|
-
|
|
25411
|
+
notify17(`Unshared ${plural4(toHide.length)}`, "success");
|
|
25127
25412
|
} catch {
|
|
25128
|
-
|
|
25413
|
+
notify17("Failed to unshare documents. Please try again.", "error");
|
|
25129
25414
|
}
|
|
25130
|
-
}, [freshSelectedDocuments, updateDocuments,
|
|
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
|
-
|
|
25420
|
+
notify17(`Deleted ${plural4(selectedDocuments.length)}`, "success");
|
|
25136
25421
|
} catch {
|
|
25137
|
-
|
|
25422
|
+
notify17("Failed to delete documents. Please try again.", "error");
|
|
25138
25423
|
}
|
|
25139
|
-
}, [selectedDocuments, deleteDocuments,
|
|
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
|
|
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
|
-
|
|
25443
|
+
notify17(`Reprocessing ${plural4(selectedDocuments.length)}`, "success");
|
|
25159
25444
|
} catch {
|
|
25160
|
-
|
|
25445
|
+
notify17("Failed to reprocess documents. Please try again.", "error");
|
|
25161
25446
|
}
|
|
25162
|
-
}, [selectedDocuments, updateDocuments, settings?.last_config,
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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 = {}) =>
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
26884
|
+
notify17("Nothing to clear \u2014 the selected documents do not have these fields", "info");
|
|
26600
26885
|
return false;
|
|
26601
26886
|
}
|
|
26602
|
-
|
|
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
|
-
|
|
26893
|
+
notify17("Failed to clear fields", "error");
|
|
26609
26894
|
return false;
|
|
26610
26895
|
} finally {
|
|
26611
26896
|
setIsClearing(false);
|
|
26612
26897
|
}
|
|
26613
26898
|
},
|
|
26614
|
-
[
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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: () =>
|
|
26956
|
+
{ onSuccess: () => notify17(`Updated ${nouns.singular} "${data.name}"`, "success") }
|
|
26672
26957
|
);
|
|
26673
26958
|
},
|
|
26674
|
-
[updateTag, workspaceTags,
|
|
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
|
-
|
|
26966
|
+
notify17(`Renamed ${nouns.singular} to "${name}"`, "success");
|
|
26682
26967
|
} catch {
|
|
26683
|
-
|
|
26968
|
+
notify17(`Failed to rename ${nouns.singular}`, "error");
|
|
26684
26969
|
}
|
|
26685
26970
|
},
|
|
26686
|
-
[updateTag,
|
|
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
|
-
|
|
26977
|
+
notify17(
|
|
26693
26978
|
`${capitalised(nouns.singular)} "${tag.name}" ${!tag.shared ? "shared" : "unshared"}`,
|
|
26694
26979
|
"success"
|
|
26695
26980
|
);
|
|
26696
26981
|
} catch {
|
|
26697
|
-
|
|
26982
|
+
notify17("Failed to update sharing status", "error");
|
|
26698
26983
|
}
|
|
26699
26984
|
},
|
|
26700
|
-
[updateTag,
|
|
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)
|
|
27010
|
+
if (failed === 0) notify17(`Deleted ${doomed.length} ${noun}`, "success");
|
|
26726
27011
|
else
|
|
26727
|
-
|
|
27012
|
+
notify17(
|
|
26728
27013
|
`Deleted ${doomed.length - failed} of ${doomed.length} ${noun} \u2014 ${failed} failed`,
|
|
26729
27014
|
"error"
|
|
26730
27015
|
);
|
|
26731
27016
|
},
|
|
26732
|
-
[confirm,
|
|
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:
|
|
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
|
-
|
|
27385
|
+
notify17(`Applied "${tagName}" to ${documentIds.length} ${documentLabel}`, "success");
|
|
27101
27386
|
else if (removeTags.length > 0 && addTags.length === 0)
|
|
27102
|
-
|
|
27103
|
-
else
|
|
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
|
-
|
|
27390
|
+
notify17(`Updated ${succeeded} ${documentLabel}, but ${failed} failed`, "warning");
|
|
27106
27391
|
} else {
|
|
27107
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
27794
|
+
notify17(`Saved view "${view.name}"`, "success");
|
|
27510
27795
|
},
|
|
27511
|
-
[saveView,
|
|
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
|
-
|
|
27804
|
+
notify17(`Deleted view "${name}"`, "success");
|
|
27520
27805
|
return true;
|
|
27521
27806
|
},
|
|
27522
|
-
[confirm, workspaceId, deleteView,
|
|
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-
|
|
28129
|
+
() => import('../DocumentReviewCard-5U3TGJZA.js').then((module) => ({ default: module.DocumentReviewCard }))
|
|
27845
28130
|
);
|
|
27846
28131
|
var ConnectedDocumentViewer = lazy(
|
|
27847
|
-
() => import('../ConnectedDocumentViewer-
|
|
28132
|
+
() => import('../ConnectedDocumentViewer-MEKSE7KG.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:
|
|
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
|
-
|
|
28954
|
+
notify17("You\u2019re up to date \u2014 no new emails to sync.", "success");
|
|
28670
28955
|
} else if (n != null && n > 0) {
|
|
28671
|
-
|
|
28956
|
+
notify17(
|
|
28672
28957
|
`Fetching ${n} new email${n === 1 ? "" : "s"} to ${workspaceLabel}.`,
|
|
28673
28958
|
"success"
|
|
28674
28959
|
);
|
|
28675
28960
|
} else {
|
|
28676
|
-
|
|
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
|
-
|
|
28966
|
+
notify17("Still preparing your session \u2014 please try Sync now again.", "error");
|
|
28682
28967
|
} else if (connectorErrorStatus(err) === 409) {
|
|
28683
|
-
|
|
28968
|
+
notify17("Reconnect needed \u2014 your account needs to be re-authorized.", "error");
|
|
28684
28969
|
} else if (connectorErrorStatus(err) === 404) {
|
|
28685
|
-
|
|
28970
|
+
notify17("Email sync is not enabled for this connector yet.", "error");
|
|
28686
28971
|
} else {
|
|
28687
|
-
|
|
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,
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
29271
|
+
notify17(`Disconnected ${family.label}`, "success");
|
|
28987
29272
|
},
|
|
28988
|
-
[confirm, disconnect, connectedByVendor,
|
|
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:
|
|
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
|
-
|
|
29339
|
+
notify17("You\u2019re up to date \u2014 no new documents to sync.", "success");
|
|
29055
29340
|
} else if (n != null && n > 0) {
|
|
29056
|
-
|
|
29341
|
+
notify17(
|
|
29057
29342
|
`Fetching ${n} new document${n === 1 ? "" : "s"} to ${workspaceLabel}.`,
|
|
29058
29343
|
"success"
|
|
29059
29344
|
);
|
|
29060
29345
|
} else {
|
|
29061
|
-
|
|
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
|
-
|
|
29351
|
+
notify17("Still preparing your session \u2014 please try Sync now again.", "error");
|
|
29067
29352
|
} else if (connectorErrorStatus(err) === 409) {
|
|
29068
|
-
|
|
29353
|
+
notify17("Reconnect needed \u2014 your account needs to be re-authorized.", "error");
|
|
29069
29354
|
} else if (connectorErrorStatus(err) === 404) {
|
|
29070
|
-
|
|
29355
|
+
notify17("Drive sync is not enabled for this connector yet.", "error");
|
|
29071
29356
|
} else {
|
|
29072
|
-
|
|
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,
|
|
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:
|
|
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
|
-
|
|
29455
|
+
notify17(importedMsg, "success");
|
|
29171
29456
|
} else {
|
|
29172
|
-
|
|
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,
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
29640
|
+
notify17("Approval link copied \u2014 send it to your Microsoft admin.", "success");
|
|
29356
29641
|
} catch {
|
|
29357
|
-
|
|
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:
|
|
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: () =>
|
|
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,
|
|
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 = () =>
|
|
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,
|
|
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:
|
|
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
|
-
|
|
30096
|
+
notify17(`Saved view "${view.name}"`, "success");
|
|
29812
30097
|
},
|
|
29813
|
-
[saveView,
|
|
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
|
-
|
|
30105
|
+
notify17(`Deleted view "${name}"`, "success");
|
|
29821
30106
|
return true;
|
|
29822
30107
|
},
|
|
29823
|
-
[confirm, deleteView,
|
|
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 = (
|
|
30158
|
+
var fail = (notify17, error, fallback) => notify17(refusalReason(error, fallback), "error");
|
|
29874
30159
|
function OpenDatabase({ databaseId, onClose }) {
|
|
29875
|
-
const { confirm, notify:
|
|
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(
|
|
30221
|
+
fail(notify17, databaseError, "This database could not be opened");
|
|
29937
30222
|
onClose();
|
|
29938
30223
|
}
|
|
29939
|
-
}, [databaseError, onClose,
|
|
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(
|
|
30238
|
+
fail(notify17, error, "The cell could not be saved");
|
|
29954
30239
|
}
|
|
29955
30240
|
}
|
|
29956
30241
|
);
|
|
29957
30242
|
},
|
|
29958
|
-
[databaseId, updateRow,
|
|
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(
|
|
30255
|
+
onError: (error) => fail(notify17, error, "The row could not be added")
|
|
29971
30256
|
}
|
|
29972
30257
|
);
|
|
29973
|
-
}, [databaseId, addRows,
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
30335
|
+
notify17(`Imported ${result.imported} row(s)${added} from ${file.name}`, "success");
|
|
30051
30336
|
},
|
|
30052
|
-
onError: (error) => fail(
|
|
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(
|
|
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:
|
|
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
|
-
|
|
30486
|
+
notify17(`Imported ${result.imported} row(s) from ${file.name}`, "success");
|
|
30202
30487
|
setOpenId(result.database.id);
|
|
30203
30488
|
},
|
|
30204
|
-
onError: (error) => fail(
|
|
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:
|
|
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)
|
|
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:
|
|
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
|
-
|
|
30856
|
+
notify17("Failed to delete message", "error");
|
|
30572
30857
|
}
|
|
30573
30858
|
},
|
|
30574
|
-
[deleteChatMessage,
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
31282
|
+
notify17(`Requested workspace access from ${name}`, "success");
|
|
30998
31283
|
setNote("");
|
|
30999
31284
|
setOpen(false);
|
|
31000
31285
|
onRequested?.();
|
|
31001
31286
|
} catch {
|
|
31002
|
-
|
|
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:
|
|
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
|
-
|
|
31434
|
+
notify17(`${userName} ${isMuted ? "unmuted" : "muted"}`, "success");
|
|
31150
31435
|
} catch {
|
|
31151
|
-
|
|
31436
|
+
notify17("Failed to update mute settings", "error");
|
|
31152
31437
|
}
|
|
31153
31438
|
},
|
|
31154
|
-
[userSettings, updateUserSettings,
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
31670
|
+
notify17(
|
|
31386
31671
|
`Access granted.${expiresAt ? ` Expires ${formatAccessExpiry(expiresAt)}.` : ""}`,
|
|
31387
31672
|
"success"
|
|
31388
31673
|
);
|
|
31389
31674
|
onOpenChange(false);
|
|
31390
31675
|
} catch (err) {
|
|
31391
|
-
|
|
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:
|
|
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
|
-
|
|
31811
|
+
notify17(`Invitation resent to ${invitation.email}`, "success");
|
|
31527
31812
|
} else {
|
|
31528
|
-
|
|
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
|
-
|
|
31819
|
+
notify17("Could not resend the invitation", "error");
|
|
31535
31820
|
}
|
|
31536
|
-
}, [addContacts, invitation.email,
|
|
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
|
-
|
|
31832
|
+
notify17("Invitation cancelled", "success");
|
|
31548
31833
|
} catch {
|
|
31549
|
-
|
|
31834
|
+
notify17("Could not cancel the invitation", "error");
|
|
31550
31835
|
}
|
|
31551
|
-
}, [confirm, deleteContact, invitation,
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
32590
|
+
notify17(`Saved ${agentName}'s configuration`, "success");
|
|
32306
32591
|
onSaved?.();
|
|
32307
32592
|
} catch {
|
|
32308
32593
|
}
|
|
32309
|
-
}, [values, agentExtId, agentName, saveConfig, onSaved,
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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:
|
|
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
|
-
|
|
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,
|
|
32840
|
+
}, [activeConfigError, configToLoad, refetchSystemDefaults, notify17]);
|
|
32556
32841
|
useEffect(() => {
|
|
32557
32842
|
if (!selectedConfigError || !selectedConfigId) return;
|
|
32558
32843
|
const status = selectedConfigError?.status;
|
|
32559
|
-
|
|
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,
|
|
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
|
-
|
|
32876
|
+
notify17(`Applied "${title}"`, "success");
|
|
32592
32877
|
setSelectedConfigId(null);
|
|
32593
32878
|
}
|
|
32594
32879
|
}, [
|
|
32595
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
33224
|
+
notify17(`Dismissed ${requesterName}'s access request`, "info");
|
|
32940
33225
|
close();
|
|
32941
33226
|
} catch (err) {
|
|
32942
33227
|
const e = err;
|
|
32943
|
-
|
|
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:
|
|
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)
|
|
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,
|
|
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:
|
|
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
|
-
|
|
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,
|
|
33627
|
+
}, [queryClient, notify17]);
|
|
33343
33628
|
}
|
|
33344
33629
|
function usePaymentReturn() {
|
|
33345
33630
|
const queryClient = useQueryClient();
|
|
33346
|
-
const { notify:
|
|
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:
|
|
33350
|
-
latest.current = { refetchProjects, refreshProject, notify:
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
34227
|
+
notify17("Screenshot copied. Paste it into an email or chat.", "success");
|
|
33943
34228
|
} catch {
|
|
33944
|
-
|
|
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:
|
|
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
|
-
|
|
34462
|
+
notify17("Couldn't capture the screen. You can still describe the problem.", "error");
|
|
34178
34463
|
}
|
|
34179
34464
|
}
|
|
34180
34465
|
setPhase("describing");
|
|
34181
|
-
}, [
|
|
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:
|
|
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
|
-
|
|
34611
|
+
notify17("Could not start the annotation", "error");
|
|
34327
34612
|
throw error;
|
|
34328
34613
|
}
|
|
34329
34614
|
},
|
|
34330
|
-
[documents, tags, createTag, updateTag, generate, openFiles,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
34945
|
+
notify17("Shared successfully", "success");
|
|
34661
34946
|
return "shared";
|
|
34662
34947
|
} catch (err) {
|
|
34663
34948
|
console.error("Failed to share resource:", err);
|
|
34664
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
35283
|
-
const latest = useRef({ open, onOpenChange, findThread, notify:
|
|
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:
|
|
35570
|
+
latest.current = { open, onOpenChange, findThread, notify: notify17, openConversation };
|
|
35286
35571
|
});
|
|
35287
35572
|
const openThread = (conversationId) => {
|
|
35288
35573
|
setPending(null);
|
|
35289
|
-
const { notify:
|
|
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
|
-
|
|
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:
|
|
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)
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
36346
|
+
notify17("Conversation search failed", "error");
|
|
36062
36347
|
}
|
|
36063
36348
|
}
|
|
36064
36349
|
);
|
|
36065
|
-
}, [query, selectedWorkspaceId, isSearching, search,
|
|
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:
|
|
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)
|
|
36471
|
+
if (success) notify17(success, "success");
|
|
36187
36472
|
} catch (error) {
|
|
36188
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
36550
|
+
notify17("Failed to rename conversation", "error");
|
|
36266
36551
|
}
|
|
36267
36552
|
}
|
|
36268
36553
|
);
|
|
36269
|
-
}, [renaming, newTitle, updateConversation,
|
|
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
|
-
|
|
36577
|
+
notify17(`${unshared.length} ${noun.toLowerCase()} shared successfully`, "success");
|
|
36293
36578
|
} catch (error) {
|
|
36294
36579
|
console.error("Failed to share conversations:", error);
|
|
36295
|
-
|
|
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:
|
|
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
|
-
|
|
37150
|
+
notify17("Failed to retry message", "error");
|
|
36866
37151
|
} finally {
|
|
36867
37152
|
setIsResubmitting(false);
|
|
36868
37153
|
}
|
|
36869
|
-
}, [message, onRetryOrphaned,
|
|
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:
|
|
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
|
-
|
|
37722
|
+
notify17("Failed to send your answer", "error");
|
|
37438
37723
|
}
|
|
37439
37724
|
},
|
|
37440
|
-
[pendingAnswer, answerQuestion, session,
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
38943
|
+
notify17(responseDetail, notificationType);
|
|
38659
38944
|
} catch (error) {
|
|
38660
38945
|
console.error("[SsoResendVerificationButton] Error sending verification email:", error);
|
|
38661
|
-
|
|
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:
|
|
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
|
-
|
|
39147
|
+
notify17("Failed to get authentication token", "error");
|
|
38863
39148
|
navigate("/");
|
|
38864
39149
|
};
|
|
38865
39150
|
fetchAccessToken();
|
|
38866
|
-
}, [isAuthenticated2, sso, navigate, isLoading,
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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) =>
|
|
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:
|
|
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
|
-
|
|
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
|