@arbidocs/blocks 0.5.48 → 0.5.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/DocumentReviewCard-DLR4XOIZ.cjs +516 -0
  2. package/dist/DocumentReviewCard-DLR4XOIZ.cjs.map +1 -0
  3. package/dist/DocumentReviewCard-Y67FFRPC.js +514 -0
  4. package/dist/DocumentReviewCard-Y67FFRPC.js.map +1 -0
  5. package/dist/calls/connected/ConnectedCallPage.d.ts +23 -0
  6. package/dist/calls/connected/index.d.ts +1 -0
  7. package/dist/calls/index.cjs +172 -0
  8. package/dist/calls/index.cjs.map +1 -1
  9. package/dist/calls/index.js +175 -4
  10. package/dist/calls/index.js.map +1 -1
  11. package/dist/chunk-3Y4UTPCD.js +1521 -0
  12. package/dist/chunk-3Y4UTPCD.js.map +1 -0
  13. package/dist/chunk-5TDGVOR5.js +142 -0
  14. package/dist/chunk-5TDGVOR5.js.map +1 -0
  15. package/dist/{chunk-QKOFQMAY.cjs → chunk-5YX3R6CK.cjs} +5 -4
  16. package/dist/chunk-5YX3R6CK.cjs.map +1 -0
  17. package/dist/chunk-63IH7V5F.js +13 -0
  18. package/dist/chunk-63IH7V5F.js.map +1 -0
  19. package/dist/chunk-C3VTWM74.js +123 -0
  20. package/dist/chunk-C3VTWM74.js.map +1 -0
  21. package/dist/chunk-DVE6NNZ2.cjs +15 -0
  22. package/dist/chunk-DVE6NNZ2.cjs.map +1 -0
  23. package/dist/{chunk-XBITXJZU.js → chunk-EQ433QPZ.js} +4 -3
  24. package/dist/chunk-EQ433QPZ.js.map +1 -0
  25. package/dist/{chunk-UAEYU2NN.cjs → chunk-H32DV7XS.cjs} +2 -136
  26. package/dist/chunk-H32DV7XS.cjs.map +1 -0
  27. package/dist/{chunk-EARQ2CUX.js → chunk-IQ3VDTR7.js} +6 -119
  28. package/dist/chunk-IQ3VDTR7.js.map +1 -0
  29. package/dist/chunk-NUQ3RY7M.cjs +130 -0
  30. package/dist/chunk-NUQ3RY7M.cjs.map +1 -0
  31. package/dist/{chunk-V2UQR7P6.cjs → chunk-QLY22ZZW.cjs} +9 -8
  32. package/dist/chunk-QLY22ZZW.cjs.map +1 -0
  33. package/dist/chunk-REH7PX3N.cjs +145 -0
  34. package/dist/chunk-REH7PX3N.cjs.map +1 -0
  35. package/dist/{chunk-VQHXVY26.cjs → chunk-RTS3B2W7.cjs} +2 -121
  36. package/dist/chunk-RTS3B2W7.cjs.map +1 -0
  37. package/dist/chunk-S7B5E3RU.cjs +1553 -0
  38. package/dist/chunk-S7B5E3RU.cjs.map +1 -0
  39. package/dist/{chunk-WZ63HE2C.js → chunk-XRL4R2TT.js} +4 -136
  40. package/dist/chunk-XRL4R2TT.js.map +1 -0
  41. package/dist/{chunk-E6EYRQC2.js → chunk-YYZH6VRP.js} +6 -5
  42. package/dist/chunk-YYZH6VRP.js.map +1 -0
  43. package/dist/connect/index.cjs +464 -1861
  44. package/dist/connect/index.cjs.map +1 -1
  45. package/dist/connect/index.js +55 -1538
  46. package/dist/connect/index.js.map +1 -1
  47. package/dist/connect/viewer.cjs +39 -39
  48. package/dist/connect/viewer.js +1 -1
  49. package/dist/connection/config/useDeveloperConfig.d.ts +1 -1
  50. package/dist/connection/files/fields/DocumentFieldParts.d.ts +2 -1
  51. package/dist/connection/files/fields/documentField.d.ts +1 -0
  52. package/dist/connection/files/grid/cells.d.ts +1 -0
  53. package/dist/connection/files/page/ConnectedFilesPage.d.ts +5 -2
  54. package/dist/connection/files/review/DocumentReviewCard.d.ts +32 -0
  55. package/dist/connection/files/review/useDocumentValueWrites.d.ts +15 -0
  56. package/dist/connection/files/review/useReviewColumns.d.ts +33 -0
  57. package/dist/files/cells/RelatedDocsCell.d.ts +3 -1
  58. package/dist/files/index.cjs +221 -221
  59. package/dist/files/index.js +1 -1
  60. package/dist/home/index.cjs +7 -6
  61. package/dist/home/index.cjs.map +1 -1
  62. package/dist/home/index.js +2 -1
  63. package/dist/home/index.js.map +1 -1
  64. package/dist/index.cjs +82 -82
  65. package/dist/index.cjs.map +1 -1
  66. package/dist/index.js +5 -8
  67. package/dist/index.js.map +1 -1
  68. package/dist/workspaces/index.cjs +29 -28
  69. package/dist/workspaces/index.cjs.map +1 -1
  70. package/dist/workspaces/index.js +4 -3
  71. package/dist/workspaces/index.js.map +1 -1
  72. package/node_modules/@arbidocs/coedit/package.json +1 -1
  73. package/package.json +5 -5
  74. package/dist/chunk-E6EYRQC2.js.map +0 -1
  75. package/dist/chunk-EARQ2CUX.js.map +0 -1
  76. package/dist/chunk-QKOFQMAY.cjs.map +0 -1
  77. package/dist/chunk-UAEYU2NN.cjs.map +0 -1
  78. package/dist/chunk-V2UQR7P6.cjs.map +0 -1
  79. package/dist/chunk-VQHXVY26.cjs.map +0 -1
  80. package/dist/chunk-WZ63HE2C.js.map +0 -1
  81. package/dist/chunk-XBITXJZU.js.map +0 -1
@@ -1,20 +1,23 @@
1
1
  "use client";
2
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-ZAYUJFPI.js';
3
3
  export { CAP_REACHED_MESSAGE, ZERO_BUDGET_MESSAGE, aiUsageResetTimestamp, formatMoney, formatResetDate, getQuotaItems, isAddonBudgetZero, isProProject, planBadgeView, planName, projectGroupBilling, useBillingSupport, useRewardBalance } from '../chunk-ZAYUJFPI.js';
4
- import { getRoleBadgeClass, formatRole, getRoleDescription, PageLoading, WorkspacePageFrame, WorkspaceIdentityPanel, WorkspaceProjectSlot, WorkspaceAudienceLine, CommonWorkspaceToggle, ExpandableSection, LeaveFooter, WorkspaceTypeBadge, ProjectPicker, ProjectOptionRow, WorkspaceFormModal, FormErrorBanner, WorkspaceFieldsView, FormActions, WorkspaceList, WorkspaceGroup, WorkspaceCard } from '../chunk-XBITXJZU.js';
4
+ import { usePendingFolders, useFilesStore, FolderTile, FileTile, ConnectedTagEntity, DocumentUser, useMemberLookup, useFilesPrefs, UserAvatar, useAiReviewStore, useDocumentFolders, useFilesGridStates, filesViewMode, FILES_PREFS_KEY, useFilesDialogs, DocumentNameCell, DocumentSharedCell, DocumentLabelsCell, RelatedDocumentsCell, DocumentFolderCell, StatusCell } from '../chunk-3Y4UTPCD.js';
5
+ export { ConnectedPendingSyncDialog, ConnectedTagEntity, DocumentFolderCell, DocumentLabelsCell, DocumentNameCell, DocumentSharedCell, DocumentStatusGlyph, DocumentSyncGlyph, DocumentUser, FILES_PREFS_KEY, FileTooltipContent, RelatedDocumentsCell, StatusCell, UserAvatar, documentFieldContent, filesViewMode, isActiveDocumentStatus, openPendingSyncDialog, parseQuotaError, startMenuItem, useAiReviewStore, useDocumentFolders, useFilesDialogs, useFilesGridStates, useFilesPrefs, useFilesStore, useMemberLookup, usePendingFolders, useResolvedDocStatus } from '../chunk-3Y4UTPCD.js';
6
+ import { getRoleBadgeClass, formatRole, getRoleDescription, PageLoading, WorkspacePageFrame, WorkspaceIdentityPanel, WorkspaceProjectSlot, WorkspaceAudienceLine, CommonWorkspaceToggle, ExpandableSection, LeaveFooter, WorkspaceTypeBadge, ProjectPicker, ProjectOptionRow, WorkspaceFormModal, FormErrorBanner, WorkspaceFieldsView, FormActions, WorkspaceList, WorkspaceGroup, WorkspaceCard } from '../chunk-EQ433QPZ.js';
5
7
  import { isAgentAccount, workspaceConversationCount, workspaceDocumentCount, isListedWorkspace, WORKSPACE_CATEGORY_FILTERS, projectFilterId, workspaceFilterAttributes, groupWorkspacesByProject, workspaceGroupStats, byRecentUpdate } from '../chunk-57CG33XJ.js';
6
8
  import { SharedFileView, SharedFilesInbox } from '../chunk-4ML5AMMO.js';
7
9
  import { buildFactCitations, citedVersionRef, chronologyFactBodies, docIdsOf, toFactCitations, FactsToolbar, FactsFieldsButton, FactComposer, FactDateInput, FactSourcesRow, FactsLoading, FactsLoadError, FactsEmptyState, FactsCalendar, FactsGanttPane, FactsBulkBar, FactSourceGroup, EMPTY_FACT_DATE_FIELDS, withoutChunk, factDateSpanToFields, FactFieldRow, FactLabelsCell, enableFactTableColumnResize, withChunk, factDateFieldsToSpan, createFactColumns, FactRowActions, withoutDoc, withDoc, sourceDocCount, DEFAULT_FACT_COLUMN_LABELS } from '../chunk-75Z5AUMM.js';
8
10
  import { HomeLoadError, HomeFrame, HomeMain, HomeCenteredScroll, HomeCenteredColumn, DashboardRoot, DashboardBand, DashboardColumns, RecentList, DashboardAction, FactsStrip, FactMark, CreateTile } from '../chunk-NQA6P7XB.js';
9
11
  import { ProjectBandTitle, PlainBandTitle } from '../chunk-RQKWYKZY.js';
10
- import '../chunk-WZ63HE2C.js';
12
+ import '../chunk-5TDGVOR5.js';
13
+ import '../chunk-XRL4R2TT.js';
11
14
  import { MessageJsonTree, DraggableHeader, ProfileCard, AvatarPicker, IdentityVerificationCard, IdentityVerificationDialog, RequireVerified, PasswordChangeDialog, EMAIL_NOTIFICATION_KEYS, EMAIL_NOTIFICATION_CATEGORIES, NotificationCategoryList, toNotificationCategories, toActiveSessionViews, ActiveSessionsDialog, LogoutDialog, toLogoutSessionViews, DeleteAccountDialog, toDeleteBlockerViews, PremiumModelsFrame, ConnectionsLoading, ConnectionsError, ConnectionsEmpty, UsageToggle, SettingsPage, UsageSummary, AppearanceSettings, UsageLineChart, 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-ICCBNHPU.js';
12
15
  export { ConnectedAssistantDock, redlineStats, textToArtifact, toRedlineMarkdown, useConnectedAiTask, useConnectedChat, useSemanticSearch, useWorkspaceDocs } from '../chunk-PP3LWBIH.js';
13
16
  import { useConnectedWorkspaceRole, ConnectedWorkflowLauncher, useConnectedWorkflowScopeSource, ConnectedWorkflowDocumentsField, ConnectedNativeDocxEditor, toWorkflowFieldDocument } from '../chunk-6D3XKIEB.js';
14
17
  export { ConnectedWorkflowDocumentsField, ConnectedWorkflowLauncher, ConnectedWorkflowsTable, DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS, toWorkflowFieldDocument, useConnectedAgentOptions, useConnectedWorkflowScopeSource, useConnectedWorkspaceRole, useDocxCommentTarget, useNativeDocxSupport } from '../chunk-6D3XKIEB.js';
15
18
  import { ConnectedMarkdown, InternalDocLink, ExternalLink, DocumentWorkspaceContext } from '../chunk-A54WLQQA.js';
16
19
  export { ConnectedDocumentToolsProvider, ConnectedMarkdown, DocumentChip, DocumentWorkspaceContext, ExternalLink, InternalDocLink, MailChip, MermaidDiagram, WorkspaceDocumentReference, useDocumentViewerSupport, useDocumentWorkspace, useViewerDraftDocument, useViewerIsDetached, useViewerPassageCitation, useViewerStreamingDocument } from '../chunk-A54WLQQA.js';
17
- import { ExplorerFileTile, formatFolderSegment, hasFolderProviderIcon, FolderProviderIcon, ExplorerFolderTile, StatusPill, FailedStageIcon, DocumentNameCellFrame, DocumentRowMenu, visibilityToggleTooltip, FolderCell, FolderCommandList, RelatedDocsCell, FilterButton, DOCUMENTS_ROW_HEIGHT_INITIAL, searchExplorerDocuments, buildExplorerEntries, collectFolderDocs, joinFolderPath, getExplorerDisplayName, RECENTLY_DELETED_HINT, RECENTLY_DELETED_HINT_PLURAL, canDeleteDocument, ExplorerFrame, ExplorerStage, ExplorerScroller, ExplorerLoadingTiles, ExplorerEmpty, ExplorerMarquee, ExplorerDropOverlay, ExplorerDragPreview, CheckboxCell, TagColumnHeader, ExplorerFileTooltip, visibilityAudience, TagFormRoot, TagFormNameField, TagFormSelectField, TagFormNote, TagFormOptionsEditor, TagFormInstructionField, TagFormMeta, TagFormFooter, TagFormSharedToggle, FilesViewCenter, FilesFilterBar, TransferProgressView, TransferResumeBanner, ExportResultsReport, TransferScopeChooser, TransferKindsPicker, TransferReferencesChooser, ExportMethodChooser, ExportWorkspacePicker, TransferConflictChooser, TransferPlanSummary, ExportFooter, ExportModalTitle, ROW_MIN, rowHeightForLines, linesForRowHeight, RowDensityControl, VendorLogo, FolderFilterButton, FolderPickerRow, UploadFrame, UploadContainer, SelectedFilesList, RejectedFilesList, UploadErrorMessage, UploadProgress, PrivacyExplainerModal, MultiSelectCellEditor, DOCUMENT_TYPE_OPTIONS, DEFAULT_DOCUMENT_COLUMNS, shareStateOf, BulkActionsBar, shareTooltipFor, parseFolderSegments, AiReviewDialogView, MoveToFolderDialog, sortFields, filterFieldsByName, fieldsApplyBarCopy, FieldsEditorRoot, FieldsEditorToolbar, FieldsEditorList, FieldRow, FieldsEmptyState, fieldsEmptyText, FieldsApplyBar, FieldsManagerDefinition, FieldsManagerBody, FieldsManagerTitle, BulkTagEditorDialog, BulkReplaceDialog, FieldValue, FieldFolderSelect, FieldFolderValue, FieldNativeSelect, FieldWithAttribution, EMAIL_VIEW_COLUMNS, useGridViews, ViewSelectorMenu, FilesAddMenu, applyColumnLayout, applyViewColumns, sortExplorerFiles, FilesPage, UrlInputDialog, FilesPageHeader, FilesToolbar, ExplorerFileNavigator, NavigatorPickerBar, FilesPageMain, DocumentGrid, resolveDocumentGridLayout, FilesModalFooter, BulkLabelSelectView, confirmHideFromMembers, DocumentsFolderButton, FilesTagsButton, UploadSourceSection, UploadSourcePicker, UploadBrowseButtons, canEditDocumentFields, FieldLabelsSelect, ShareToggle, FieldAttribution, ImportPanel, ImportFamilySection, ImportList, ImportRow, TaskSection, UploadDropArea, canChangeVisibility, ImportSummary, ImportAside, FolderSummary, ImportProgress, ImportRunActions, ImportHint, ImportActionButton, UploadUrlButton } from '../chunk-E6EYRQC2.js';
20
+ 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, ShareToggle, ImportPanel, ImportFamilySection, ImportList, ImportRow, TaskSection, UploadDropArea, canChangeVisibility, ImportSummary, ImportAside, FolderSummary, ImportProgress, ImportRunActions, ImportHint, ImportActionButton, UploadUrlButton } from '../chunk-YYZH6VRP.js';
18
21
  import { ViewToggle, DocumentViewToggle } from '../chunk-JJA6GQKH.js';
19
22
  import { ModalBreadcrumbHeader, ModalCrumbs } from '../chunk-RC6VTY2H.js';
20
23
  import { DatabaseList, NewDatabaseDialog, DatabaseToolbar, DatabaseTable, DatabaseRowDetail, DatabaseColumnDialog, rowTitle, OPEN_ROW_COL_ID, ADD_COLUMN_COL_ID } from '../chunk-PTYERKEU.js';
@@ -25,7 +28,8 @@ import '../chunk-MTSKK3BN.js';
25
28
  import '../chunk-BTTUZZN3.js';
26
29
  import { FactSourcesPanel, FactPassageItem } from '../chunk-HFZ45FD3.js';
27
30
  import '../chunk-IA5BYEO7.js';
28
- import { EntityTooltip, EntityTooltipHeader, EntityTooltipSection, EntityTooltipHint, SharedCell, WorkspaceActivityList, WorkspaceNotificationMenu, ThreadFollowMenuItem, ThreadFollowButton, TagTable, TagPicker, tagsPageNouns, entitiesPhrase, ExtractEntitiesDialog, GridRowNavigator, LoadingIndicator, EntityIdentityBar, IDENTITY_NAME_MAX_LENGTH, EntityTooltipStats, documentCount, TIPS_VISIBILITY_OVERRIDE, tagTableDocx, setHintsSessionOverride, tagTableLabels, TagDetail, tagDetailLabels, tagNoteLabel, tagKindDescription, Toolbar, glossaryEntries, glossaryDocx, glossaryMarkdown, glossaryFileName } from '../chunk-EARQ2CUX.js';
31
+ import { WorkspaceActivityList, WorkspaceNotificationMenu, ThreadFollowMenuItem, ThreadFollowButton, TagTable, TagPicker, tagsPageNouns, entitiesPhrase, ExtractEntitiesDialog, GridRowNavigator, LoadingIndicator, EntityIdentityBar, IDENTITY_NAME_MAX_LENGTH, documentCount, TIPS_VISIBILITY_OVERRIDE, tagTableDocx, setHintsSessionOverride, tagTableLabels, TagDetail, tagDetailLabels, tagNoteLabel, tagKindDescription, Toolbar, glossaryEntries, glossaryDocx, glossaryMarkdown, glossaryFileName } from '../chunk-IQ3VDTR7.js';
32
+ import { EntityTooltip, EntityTooltipHeader, EntityTooltipSection, EntityTooltipHint, EntityTooltipStats } from '../chunk-C3VTWM74.js';
29
33
  import { MemberAvatarStack } from '../chunk-FUPAGAZB.js';
30
34
  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';
31
35
  import { SearchHit } from '../chunk-IKZWEPG4.js';
@@ -90,24 +94,23 @@ import '../chunk-NPLYHR2E.js';
90
94
  import { useBlocksEnvironment, useOpenWorkflow, useRequestedSettingsSection, useIntentRequest, mailDraftRequest, useCalendarViewStore, conversationStartRequest } from '../chunk-KOOC6VD3.js';
91
95
  export { requestCalendarComposer, requestCalendarEvent, useCalendarViewStore } from '../chunk-KOOC6VD3.js';
92
96
  import { openDialog, closeDialog, useDialogProps, ConfirmDialog } from '../chunk-3VCTVCAX.js';
93
- import { ModalSection, ModalHeader, ModalScaffold, ModalSectionTitle } from '../chunk-TX2ZICS7.js';
97
+ import { ModalHeader, ModalScaffold, ModalSection, ModalSectionTitle } from '../chunk-TX2ZICS7.js';
94
98
  import '../chunk-7F6CBP3Z.js';
95
99
  import '../chunk-VUNV25KB.js';
96
100
  import { QueryClient, useQueryClient, QueryClientProvider } from '@tanstack/react-query';
97
- import { useWorkspaces, ArbiBotHeadIcon, IN_FLIGHT_DOCUMENT_STATUSES, useOfflineDocumentIds, useOpenViewerDocumentId, FINISHED_DOCUMENT_STATUSES, useMailPolicy, useProcessingTasks, resolveDocumentStatus, useArbi, useIsCreatingTag, useUpdateDocuments, useDeleteDocuments, useRenameFolder, useDownloadDocuments, useTags, useDocumentHostActions, useDocumentThumbnails, HtmlIcon, useArbiSessionState, selectDraft, useArbiSessionStore, useAudioRecorder, MicRecordingOverlay, useArbiWsStatus, useArbiWsStore, useUserSettings, useProcessingTask, useDocumentPendingSync, useWorkspaceUsers, useMessageTimer, useDocuments, useAvailableModels, formatGbp, CitationRenderer, useArbiSession, buildMentionCandidates, useConversations, ASSISTANT_MENTION_LABEL, useConversationItems, useDeleteMessage, useArbiHost, transcriptSegmentOf, useConfig, useThinkingContent, useCreateFact, useCreateFacts, workflowStepOf, stripSpeakerPrefix, MessageArtifactCard, useConversationData, useBranchNavigation, useSkills, useBuiltinCommands, useDocumentsSupport, useConversationActivity, useMessageDetails, useWorkflows, getWorkspaceKind, resolveConfigModel, useRunConversation, useWorkspaceActivity, callLink, openCall, startDmCall, calendarQueryKeys, mailQueryKeys, arbiQueryKeys, invalidateConversationLists, isWorkspaceNotificationType, useNotifications, useDeleteNotifications, useMarkNotificationsRead, useCallsEnabled, serverNotificationBellEntry, documentDisplayName, useArbiWebSocket, isNotificationRow, usePendingSyncItems, useCancelManyPendingSync, useWorkspaceNotificationLevel, useFollowThread, useUploadSkillFiles, useSaveSkill, useSetSkillVisibility, useDeleteSkill, useSkillSource, useAgentModels, useMcpTools, useAgentConfig, useAgentWorkspaces, useCreateAgent, useSaveAgentConfig, useGrantAgentAccess, useRevokeAgentAccess, useGenerateAgentAvatar, useAgents, useDeleteAgents, useWorkflowRuns, ArtifactCanvas, ConversationScope, useConversation, useTagKindSchema, useCreateTag, useSetTagValues, useUpdateTagKindSchema, useUpdateTag, useFacts, useDeleteTag, useExtractEntities, useEntityExtractionDocIds, useStartWorkspaceTransfer, useResumeWorkspaceTransfer, useCancelWorkspaceTransfer, useWorkspaceTransfer, useWorkspaceTransfers, useWorkspaceExportDownload, usePlanWorkspaceTransfer, isTransferResumable, isTransferFinished, useShellWorkspaces, useProfile, useUpdateProfile, useRequestEmailChange, useConfirmEmailChange, useNameEditor, useAvatarCrop, useEmailChange, ImageCropModal, useIdentityVerification, usePasswordChange, usePasswordChangeForm, useNotificationPreferences, useSessions, useCurrentSessionId, useTerminateSession, useSignOut, useDeleteAccount, useDeleteAccountFlow, useMailClient, defaultMailAlias, useClaimNativeAlias, useMailOnline, useConnectMailAccount, useDisconnectMailAccount, useMailAccounts, useUpdateUserSettings, useDismissedTips, useConnectorVendorVisibility, useConnectorCatalog, useMyConnectors, useDisconnectConnector, useSlackConnection, useDisconnectSlack, isMailboxSyncVendor, isSharePointVendor, useWorkspaceTrash, useInvalidateStorage, useStorageActions, useStorageItems, useStorageItemNames, useStorageProjects, useUserUsageToday, useStorageSnapshots, useUpdateWorkspace, useAddWorkspaceMembers, useRemoveWorkspaceMembers, useSetWorkspaceMemberRoles, toShellWorkspace, useIsSlow, useProducts, useCreateProject, useDeleteProject, useCanCreateProjects, PROJECT_CREATION_DENIED_REASON, useEnableMailboxSync, useMailboxFolders, useEnableDriveSync, useDriveFolderChildren, connectorErrorStatus, useProjectInvoices, useProjects, useUpdateProjectFields, useChargeWatch, useAddonQuote, STILL_WORKING, useProjectBillingPortal, useProjectUsage, useRefreshProject, useBoxRole, useContacts, useInviteContacts, useDeleteWorkspaces, useCreateContact, useUpdateContact, useLinkContact, useEntitlements, useImportContacts, entitlementRefusal, useDeleteContact, MAX_RETRIEVE_DOC_IDS, useSemanticSearch, useAssignDocTags, useMailUnlock, useMailFolders, useMailMessages, useMailDraftCompose, useMailMessage, useMailCache, MailOfflineUnavailableError, accountPath, useCalendarEvents, useCalendars, useCanHostCalls, useOpenCallMeetingChat, usePeople, useFetchCalendarEvent, useCalendarSettings, useCalendarOverlays, useCalendarOutbox, useCalendarAccounts, useSyncAccountsOnOpen, useResumeCalendarAccountConnect, useCreateEvent, useUpdateEvent, useDeleteEvent, useMoveEvent, useRespondToEvent, useCreateCalendar, useUpdateCalendar, useDeleteCalendar, useImportCalendar, useSaveCalendarSettings, useRefreshCalendar, useCalendarEvent, useMailAttachmentText, useCalendarEventByUid, getPublicBookingPage, bookPublicSlot, PublicBookingError, isZipFile, prepareUploadFiles, UPLOAD_MAX_FILE_SIZE, filesFromDrop, UPLOAD_ACCEPT, useUploadFromUrls, useUploadFiles, useUpdateDocTag, useRemoveDocTags, useKeepDocumentsOffline, useRemoveDocumentsOffline, subscribeDocumentRows, useGenerateDocTags, useRefreshDocuments, 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, useCreateGroupChat, useChatArrivals, useApplyChatModel, AUTO_CHAT_MODEL, formatGbpPerMillionTokens, useConfigSchema, useSaveConfig, useConversationPendingAuth, openAccessRequest, useRequestWorkspaceAccess, useIsEntitled, ImageCropper, useCreateWork, useRunWorkflow, useStartTaskQuery, useCreateWorkflow, useUpdateConversation, useUpdateWorkflow, usePeopleSearch, threadTabId, useCanEditShared, useActOnStep, usePlanWork, useWorkItems, TaskThreadPendingError, useMentionCandidates, useAgentRunControl, useTransientView, useDeleteConversation, useIsWorkspaceOwner, useConversationTurn, useAgentSession, useStartAgentSession, useCloseAgentSession, downloadRecoveryFile, LinkedInIcon, GoogleIcon, AppleIcon, useCurrentUser, isQueuedCalendarWrite, DateSeparator, ChatBubble, isAliasTakenError, nextAliasSuggestion, aliasTakenMessage, mailJson, connectorReturnTo, DmAvatar, ConversationList, GitHubIcon, cropImage, getRelatedTotal, isDeploymentUserNotification, describeServerNotification, getWorkspaceActionText, getWorkspaceSentPhrase, BOX_SEAT_REFUSED, BOX_SEAT_REFUSED_TITLE, documentActivityPhrase, isSignatureNotificationType, inputRequestTitle, WORK_NOTIFICATION_LABELS, useConversationThreads, usePassageQuotes, useUpdateFact, useDeleteFact, useAccountClient, usePlanQuote, useCreateProjectCheckout, useInvalidateProjects, useCreateWorkspace, useDriveFolderDocCount, useChangeProjectPlan, useCancelProjectSubscription, usePreviewProjectPlanChange, useAddProjectAddonBlock, useSwitchWorkspace, fileAttachment, useMailProjects, useSaveMailDraft, useSendMail, useMailDraftReplaced, useCalendarInvitations, useDecideCounter, useSearchContacts, usePublishCalendar, useCalendarShares, useShareCalendar, useUnshareCalendar, useSubscribeCalendar, useHolidayCountries, useAddHolidayCalendar, cancelPublicBooking, SHAREPOINT_VENDORS, isDriveSyncVendor, useDatabase, useDatabaseRows, useUpdateDatabase, useDeleteDatabase, useAddDatabaseRows, useUpdateDatabaseRow, useDeleteDatabaseRows, useImportDatabaseRows, useExportDatabase, DATABASE_ROWS_PAGE, useInvalidateAfterTransfer, useConfigs, useSaveConfigField, useDeleteConfig, isFullConfig, useChatUnreadTotal, useUnreadByPeer, useMarkDocumentShared, useConversationSearch, useWorkspaceRole, useConversationDocuments, useConnectRunStream, useAnswerAgentQuestion, useConversationIsShared, buildPendingFirstTurn, useAskAgain, getOrphanedLastMessage, refuseChatWhenOffline, useThreadDocument, useDocumentAutoAdd, useAutoSendDraft, READ_ONLY_MEETING_TEXT, useProjectConversationUsage, AiAnswer, ArbiWebSocketProvider, signatureNotificationPhrase, signatureRequestMeta, getNotificationTypeMeta, useMailDraftEditor, useFreeBusy, useFindTime, useCalendarSupport, useStartCalendarAccountOAuth, useConnectOAuthAccount, useBookingPages, useDeleteBookingPage, useRooms, useCancelMailboxSync, useMailboxSyncProgress, useRefreshConnectorsOnRunEnd, useCancelDriveSync, useDriveFolders, useDriveSyncProgress, useDriveSyncEstimate, useSearchDatabaseRows, isReplayableArbiMutation, useUpdateProjectNextPeriodAddons, useUpdateProjectAddonSettings, useSyncCalendarAccount, useUpdateCalendarAccount, useDisconnectCalendarAccount, ACCOUNT_VENDOR, useCalDavProfiles, useConnectCalDavAccount, useSaveBookingPage, useCreateRoom, useTriggerMailboxSync, useTriggerDriveSync } from '@arbidocs/react';
101
+ import { useWorkspaces, ArbiBotHeadIcon, useUpdateDocuments, useDeleteDocuments, useRenameFolder, useDownloadDocuments, useTags, useDocumentHostActions, useDocumentThumbnails, HtmlIcon, useArbiSessionState, selectDraft, useArbi, useArbiSessionStore, useAudioRecorder, MicRecordingOverlay, useArbiWsStatus, useArbiWsStore, useUserSettings, useMessageTimer, useDocuments, useAvailableModels, formatGbp, CitationRenderer, useWorkspaceUsers, useArbiSession, buildMentionCandidates, useConversations, ASSISTANT_MENTION_LABEL, useConversationItems, useDeleteMessage, useArbiHost, transcriptSegmentOf, useConfig, useThinkingContent, useCreateFact, useCreateFacts, workflowStepOf, stripSpeakerPrefix, MessageArtifactCard, useConversationData, useBranchNavigation, useSkills, useBuiltinCommands, useConversationActivity, useMessageDetails, useWorkflows, getWorkspaceKind, resolveConfigModel, useRunConversation, useWorkspaceActivity, callLink, openCall, startDmCall, calendarQueryKeys, mailQueryKeys, arbiQueryKeys, invalidateConversationLists, isWorkspaceNotificationType, useNotifications, useDeleteNotifications, useMarkNotificationsRead, useCallsEnabled, serverNotificationBellEntry, documentDisplayName, useArbiWebSocket, isNotificationRow, useWorkspaceNotificationLevel, useFollowThread, useUploadSkillFiles, useSaveSkill, useSetSkillVisibility, useDeleteSkill, useSkillSource, useAgentModels, useMcpTools, useAgentConfig, useAgentWorkspaces, useCreateAgent, useSaveAgentConfig, useGrantAgentAccess, useRevokeAgentAccess, useGenerateAgentAvatar, useAgents, useDeleteAgents, useWorkflowRuns, ArtifactCanvas, ConversationScope, useConversation, useTagKindSchema, useCreateTag, useSetTagValues, useUpdateTagKindSchema, useUpdateTag, useFacts, useDeleteTag, useExtractEntities, useEntityExtractionDocIds, useStartWorkspaceTransfer, useResumeWorkspaceTransfer, useCancelWorkspaceTransfer, useWorkspaceTransfer, useWorkspaceTransfers, useWorkspaceExportDownload, usePlanWorkspaceTransfer, isTransferResumable, isTransferFinished, useShellWorkspaces, useProfile, useUpdateProfile, useRequestEmailChange, useConfirmEmailChange, useNameEditor, useAvatarCrop, useEmailChange, ImageCropModal, useIdentityVerification, usePasswordChange, usePasswordChangeForm, useNotificationPreferences, useSessions, useCurrentSessionId, useTerminateSession, useSignOut, useDeleteAccount, useDeleteAccountFlow, useMailClient, defaultMailAlias, useClaimNativeAlias, useMailOnline, useConnectMailAccount, useDisconnectMailAccount, useMailPolicy, useMailAccounts, useUpdateUserSettings, useDismissedTips, useConnectorVendorVisibility, useConnectorCatalog, useMyConnectors, useDisconnectConnector, useSlackConnection, useDisconnectSlack, isMailboxSyncVendor, isSharePointVendor, useWorkspaceTrash, useInvalidateStorage, useStorageActions, useStorageItems, useStorageItemNames, useStorageProjects, useUserUsageToday, useStorageSnapshots, useUpdateWorkspace, useAddWorkspaceMembers, useRemoveWorkspaceMembers, useSetWorkspaceMemberRoles, toShellWorkspace, useIsSlow, useProducts, useCreateProject, useDeleteProject, useCanCreateProjects, PROJECT_CREATION_DENIED_REASON, useEnableMailboxSync, useMailboxFolders, useEnableDriveSync, useDriveFolderChildren, connectorErrorStatus, useProjectInvoices, useProjects, useUpdateProjectFields, useChargeWatch, useAddonQuote, STILL_WORKING, useProjectBillingPortal, useProjectUsage, useRefreshProject, useBoxRole, useContacts, useInviteContacts, useDeleteWorkspaces, useCreateContact, useUpdateContact, useLinkContact, useEntitlements, useImportContacts, entitlementRefusal, useDeleteContact, MAX_RETRIEVE_DOC_IDS, useSemanticSearch, useAssignDocTags, useMailUnlock, useMailFolders, useMailMessages, useMailDraftCompose, useMailMessage, useMailCache, MailOfflineUnavailableError, accountPath, useCalendarEvents, useCalendars, useCanHostCalls, useOpenCallMeetingChat, usePeople, useFetchCalendarEvent, useCalendarSettings, useCalendarOverlays, useCalendarOutbox, useCalendarAccounts, useSyncAccountsOnOpen, useResumeCalendarAccountConnect, useCreateEvent, useUpdateEvent, useDeleteEvent, useMoveEvent, useRespondToEvent, useCreateCalendar, useUpdateCalendar, useDeleteCalendar, useImportCalendar, useSaveCalendarSettings, useRefreshCalendar, useCalendarEvent, useMailAttachmentText, useCalendarEventByUid, getPublicBookingPage, bookPublicSlot, PublicBookingError, useDocumentsSupport, isZipFile, prepareUploadFiles, UPLOAD_MAX_FILE_SIZE, filesFromDrop, UPLOAD_ACCEPT, useUploadFromUrls, useUploadFiles, useUpdateDocTag, useRemoveDocTags, useOfflineDocumentIds, useKeepDocumentsOffline, useRemoveDocumentsOffline, useOpenViewerDocumentId, subscribeDocumentRows, useGenerateDocTags, useRefreshDocuments, 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, useCreateGroupChat, useChatArrivals, useApplyChatModel, AUTO_CHAT_MODEL, formatGbpPerMillionTokens, useConfigSchema, useSaveConfig, useConversationPendingAuth, openAccessRequest, useRequestWorkspaceAccess, useIsEntitled, ImageCropper, useCreateWork, useRunWorkflow, useStartTaskQuery, useCreateWorkflow, useUpdateConversation, useUpdateWorkflow, usePeopleSearch, threadTabId, useCanEditShared, useActOnStep, usePlanWork, useWorkItems, TaskThreadPendingError, useMentionCandidates, useAgentRunControl, useTransientView, useDeleteConversation, useIsWorkspaceOwner, useConversationTurn, useAgentSession, useStartAgentSession, useCloseAgentSession, downloadRecoveryFile, LinkedInIcon, GoogleIcon, AppleIcon, useCurrentUser, isQueuedCalendarWrite, DateSeparator, ChatBubble, isAliasTakenError, nextAliasSuggestion, aliasTakenMessage, mailJson, connectorReturnTo, DmAvatar, ConversationList, GitHubIcon, cropImage, getRelatedTotal, isDeploymentUserNotification, describeServerNotification, getWorkspaceActionText, getWorkspaceSentPhrase, BOX_SEAT_REFUSED, BOX_SEAT_REFUSED_TITLE, documentActivityPhrase, isSignatureNotificationType, inputRequestTitle, WORK_NOTIFICATION_LABELS, useConversationThreads, usePassageQuotes, useUpdateFact, useDeleteFact, useAccountClient, usePlanQuote, useCreateProjectCheckout, useInvalidateProjects, useCreateWorkspace, useDriveFolderDocCount, useChangeProjectPlan, useCancelProjectSubscription, usePreviewProjectPlanChange, useAddProjectAddonBlock, useSwitchWorkspace, fileAttachment, useMailProjects, useSaveMailDraft, useSendMail, useMailDraftReplaced, useCalendarInvitations, useDecideCounter, useSearchContacts, usePublishCalendar, useCalendarShares, useShareCalendar, useUnshareCalendar, useSubscribeCalendar, useHolidayCountries, useAddHolidayCalendar, cancelPublicBooking, SHAREPOINT_VENDORS, isDriveSyncVendor, useDatabase, useDatabaseRows, useUpdateDatabase, useDeleteDatabase, useAddDatabaseRows, useUpdateDatabaseRow, useDeleteDatabaseRows, useImportDatabaseRows, useExportDatabase, DATABASE_ROWS_PAGE, useInvalidateAfterTransfer, useConfigs, useSaveConfigField, useDeleteConfig, isFullConfig, useChatUnreadTotal, useUnreadByPeer, useMarkDocumentShared, useConversationSearch, useWorkspaceRole, useConversationDocuments, useConnectRunStream, useAnswerAgentQuestion, useConversationIsShared, buildPendingFirstTurn, useAskAgain, getOrphanedLastMessage, refuseChatWhenOffline, useThreadDocument, useDocumentAutoAdd, useAutoSendDraft, READ_ONLY_MEETING_TEXT, useProjectConversationUsage, AiAnswer, ArbiWebSocketProvider, signatureNotificationPhrase, signatureRequestMeta, getNotificationTypeMeta, useMailDraftEditor, useFreeBusy, useFindTime, useCalendarSupport, useStartCalendarAccountOAuth, useConnectOAuthAccount, useBookingPages, useDeleteBookingPage, useRooms, useCancelMailboxSync, useMailboxSyncProgress, useRefreshConnectorsOnRunEnd, useCancelDriveSync, useDriveFolders, useDriveSyncProgress, useDriveSyncEstimate, useSearchDatabaseRows, isReplayableArbiMutation, useUpdateProjectNextPeriodAddons, useUpdateProjectAddonSettings, useSyncCalendarAccount, useUpdateCalendarAccount, useDisconnectCalendarAccount, ACCOUNT_VENDOR, useCalDavProfiles, useConnectCalDavAccount, useSaveBookingPage, useCreateRoom, useTriggerMailboxSync, useTriggerDriveSync } from '@arbidocs/react';
98
102
  import { mergeAgentSteps, extractSubagentLanes, getCurrentStep, computeRunStats, formatTokens, isNearAiUsageBudget, getSubagentBranchRecord, buildCitationChunkData, topLevelAgentSteps, findMainSiblingLeaf, sliceToSubagentThread, getAgentStepLabel, subagentJobLabel, getStepDisplay, getStepTool, findLeafForTaskMessage, Arbi, FLAT_TAG_KINDS, getEligibleParentTags, canTagHaveParent, isFlatKind, TAG_NESTING_MAX_DEPTH, TAG_KINDS, formatFileSize, filterDocumentTags, isLabelTag, refusalReason, isPresenceTag, isAnnotationTag, flattenTagTree, tagsForScope, tagsOfGroup, chats, buildRetrievalFullContextTool, buildRetrievalChunkTool, getChildTags, tagUseCount, ArbiApiError, PRESENCE_KINDS, isEntityTag, DuplicateContactError, wouldCreateTagCycle, getTagDescendantIds } from '@arbidocs/sdk/browser';
99
103
  import { isAbortError, browserSessionStateStorage, parseCallFragment, isMessageType, validateRecoveryKeyFile, RECOVERY_KEY_ERRORS, parseRecoveryUrl, prewarmKeyPairs, decryptRecoveryKey, unlockIdentityWithPassword, createRecoveryUrl, bytesToBase64, initSodium } from '@arbidocs/client';
100
- import React9, { memo, useMemo, lazy, useRef, useEffect, useCallback, useState, forwardRef, useLayoutEffect, useImperativeHandle, createContext, useContext, Suspense, useSyncExternalStore, createElement, Fragment as Fragment$1, useId } from 'react';
101
- import { Users, MessageCircleMore, SquarePen, BookOpen, MessagesSquare, Pencil, Download, Mail, FolderInput, Trash2, Eye, Sparkles, Play, ArrowDownToLine, RefreshCw, Zap, AlertTriangle, FileX, SkipForward, Loader2, Clock, CheckCircle, ArrowUpRight, Send, Settings, Edit3, Copy, Link, Share2, Check, Milestone, RotateCcw, FileText, Network, ChevronRight, Bell, Activity, Info, UserCheck, WifiOff, CircleCheck, Upload, Link2, Search, Plus, ArrowLeft, ExternalLink as ExternalLink$1, Tags, CheckCircle2, Monitor, UserCircle, KeyRound, Radio, LogOut, Wifi, Lock, HardDrive, User, HatGlasses, MessageSquare, PlugZap, Gauge, Cloud, XCircle, Building2, Palette, Type, Printer, SquareStack, Table, FolderKanban, Cake, X, UserRound, Star, Tag, Video, CalendarDays, MapPin, Globe, Calendar, Hash, File as File$1, FileType, FolderOpen, Fingerprint, Paperclip, TriangleAlert, LoaderCircle, NotebookPen, Columns3, EyeOff, ArrowUp, ArrowDown, ZoomOut, Camera, FilePlus2, Eraser, UserMinus, UserPlus, UsersRound, Code2, Infinity, Bug, Crop, Undo2, ImageUp, ChevronDown, MoreHorizontal, Wrench, RotateCw, Square, BadgeCheck, Shield, ClipboardList, Table2, KeySquare, BellOff, CheckCheck, FolderUp, ArrowUpCircle, Contact, Scale, BookA, Quote, Inbox, CalendarX, CalendarCheck, Phone, LogIn, Pause, Workflow, Minimize2, Maximize2, Minus, CalendarSearch, DoorOpen, AlertCircle, ClockFading } from 'lucide-react';
102
- import { isAgent, UserEntity, getUserInitials, getUserDisplayName, getUserAvatarColor, agentAvatarColors, Avatar, AvatarImage, AvatarFallback, cn, ShieldIcon, getWorkspaceColor, getFileTypeIcon, DocumentEntity, getDocumentTitle, formatFolderLabel, getEntityLabel, getEntityColor, VisibilityIcon, formatFriendlyDate, getDocumentSubject, Badge, getTagTypeIcon, getTagTypeLabel, VisibilityToggle, TagEntity, ThreadVisibilityIcon, Button, isImageDocument, Tooltip, TooltipTrigger, TooltipContent, Dialog, DialogContent, formatRelativeTime, ProviderIcon, EntityIcon, createUserAvatarIcon, DialogHeader, DialogTitle, DialogDescription, DialogFooter, Label, Input, Textarea, tagKindNouns, tagKindTitle, IconToggle, Switch, Checkbox, entityNoun, DialogTrigger, EntityPill, ProjectEntity, Tabs, TabsList, TabsTrigger, TabsContent, getDocIcon, getDocumentNature, getDocumentAuthor, markdownToPlainText, formatDocDate, getDocumentDate, friendlyFileType, canonicalFolderPath, DebouncedInput, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Slider, AgentBadge, PresenceLabel, TooltipProvider, UserMenu, CommandGroup, CommandItem, Popover, PopoverAnchor, PopoverTrigger, PopoverContent, Command, CommandInput, CommandList, CommandEmpty, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, ScrollArea, ArbiIcon, ARBI_MARK_SRC, Card, CardHeader, CardTitle, CardContent, VerifiedToggle, Progress } from '@arbidocs/react/ui';
104
+ import React9, { memo, useMemo, lazy, useState, useEffect, forwardRef, useRef, useLayoutEffect, useCallback, useImperativeHandle, createContext, useContext, Suspense, useSyncExternalStore, createElement, Fragment as Fragment$1, useId } from 'react';
105
+ import { Users, MessageCircleMore, ArrowUpRight, Send, Settings, Edit3, Copy, Link, Share2, Trash2, Check, Milestone, Clock, RotateCcw, FileText, Loader2, Network, ChevronRight, Download, Bell, Activity, Info, UserCheck, Upload, Link2, Search, Plus, ArrowLeft, ExternalLink as ExternalLink$1, Tags, CheckCircle2, Monitor, UserCircle, KeyRound, Radio, LogOut, Wifi, Mail, Lock, HardDrive, User, HatGlasses, MessageSquare, PlugZap, Gauge, Cloud, XCircle, Building2, Palette, Type, FolderInput, Printer, SquareStack, Table, FolderKanban, Sparkles, Cake, X, UserRound, Star, MessagesSquare, Tag, Video, CalendarDays, MapPin, Globe, Calendar, Hash, File as File$1, FileType, FolderOpen, Fingerprint, Paperclip, CircleCheck, CheckCircle, TriangleAlert, LoaderCircle, NotebookPen, Columns3, EyeOff, Eye, ArrowUp, ArrowDown, ZoomOut, Camera, FilePlus2, Eraser, UserMinus, UserPlus, UsersRound, Code2, Infinity, Bug, Crop, Undo2, ImageUp, ChevronDown, MoreHorizontal, Wrench, RotateCw, Square, BadgeCheck, Shield, ClipboardList, Table2, KeySquare, BellOff, CheckCheck, FolderUp, ArrowUpCircle, Contact, Scale, Pencil, BookA, Quote, Inbox, CalendarX, CalendarCheck, Phone, LogIn, Play, Pause, Workflow, Minimize2, Maximize2, Minus, CalendarSearch, DoorOpen, AlertCircle, RefreshCw, ClockFading, AlertTriangle } from 'lucide-react';
106
+ import { isAgent, UserEntity, getUserInitials, getUserDisplayName, getUserAvatarColor, agentAvatarColors, Avatar, AvatarImage, AvatarFallback, cn, ShieldIcon, getWorkspaceColor, getFileTypeIcon, getDocumentTitle, getEntityLabel, Badge, ThreadVisibilityIcon, Button, isImageDocument, formatFriendlyDate, Tooltip, TooltipTrigger, TooltipContent, Dialog, DialogContent, formatRelativeTime, ProviderIcon, EntityIcon, createUserAvatarIcon, Label, Input, Textarea, DialogHeader, DialogTitle, DialogDescription, tagKindNouns, tagKindTitle, getTagTypeLabel, VisibilityToggle, getEntityColor, IconToggle, Switch, Checkbox, entityNoun, DialogTrigger, EntityPill, ProjectEntity, DialogFooter, Tabs, TabsList, TabsTrigger, TabsContent, getDocIcon, getDocumentNature, getDocumentAuthor, markdownToPlainText, getDocumentSubject, formatDocDate, getDocumentDate, friendlyFileType, formatFolderLabel, canonicalFolderPath, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Slider, AgentBadge, PresenceLabel, TooltipProvider, UserMenu, CommandGroup, CommandItem, Popover, PopoverAnchor, PopoverTrigger, PopoverContent, Command, CommandInput, CommandList, CommandEmpty, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, ScrollArea, ArbiIcon, DocumentEntity, ARBI_MARK_SRC, Card, CardHeader, CardTitle, CardContent, VerifiedToggle, Progress } from '@arbidocs/react/ui';
103
107
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
104
108
  import { hasMessageBody, notify, linkMentions, useNotify, sharedSearchSession, takePendingSearch, selectUnread, NotificationBell, useTurnDocumentId, useOpenDocumentId, useRegisterOpenDocument } from '@arbidocs/react/shell';
105
- import { SIGNED_LOCKED_REASON, isSignedVersion, currentHasMarkup, fetchMarkupPdf, downloadBlob, useIsOnline, DocumentToolsProvider, useOptionalDocumentTools, fetchDocumentPdf, useSignatureVerification, SignatureVerificationError } from '@arbidocs/react/document-tools';
106
- import { create } from 'zustand';
109
+ import { downloadBlob, useIsOnline, DocumentToolsProvider, useOptionalDocumentTools, fetchDocumentPdf, useSignatureVerification, SignatureVerificationError } from '@arbidocs/react/document-tools';
107
110
  import { artifactKindFromFileName, viewerTabForArtifactMode, useStreamedArtifact, parseVersionRef } from '@arbidocs/react/artifacts';
108
- import { useDraggable, useDroppable, useSensors, useSensor, MouseSensor, TouchSensor, pointerWithin, rectIntersection, DndContext, DragOverlay } from '@dnd-kit/core';
111
+ import { create } from 'zustand';
112
+ import { useSensors, useSensor, MouseSensor, TouchSensor, pointerWithin, rectIntersection, DndContext, DragOverlay } from '@dnd-kit/core';
109
113
  import { useVirtualizer } from '@tanstack/react-virtual';
110
- import { persist, createJSONStorage } from 'zustand/middleware';
111
114
  import { createPortal } from 'react-dom';
112
115
 
113
116
  function useDisplayStatus(user, isMe, showPresence) {
@@ -1418,126 +1421,6 @@ function useNotificationToasts(options2 = {}) {
1418
1421
  });
1419
1422
  });
1420
1423
  }
1421
- var usePendingSyncDialog = create((set) => ({
1422
- open: false,
1423
- setOpen: (open) => set({ open })
1424
- }));
1425
- function openPendingSyncDialog() {
1426
- usePendingSyncDialog.getState().setOpen(true);
1427
- }
1428
- var STATUS_META = {
1429
- queued: { dot: "bg-yellow-text", text: "Waiting to sync", tone: "text-yellow-text" },
1430
- syncing: { dot: "bg-blue-text", text: "Syncing\u2026", tone: "text-blue-text" },
1431
- error: { dot: "bg-red-text", text: "Failed", tone: "text-red-text" }
1432
- };
1433
- function StatusCell({ data }) {
1434
- if (!data) return null;
1435
- const meta = STATUS_META[data.status];
1436
- return /* @__PURE__ */ jsxs("span", { className: `inline-flex items-center gap-1.5 text-sm font-medium ${meta.tone}`, children: [
1437
- /* @__PURE__ */ jsx("span", { className: `h-1.5 w-1.5 rounded-full ${meta.dot}` }),
1438
- meta.text
1439
- ] });
1440
- }
1441
- function ConnectedPendingSyncDialog() {
1442
- const isOpen = usePendingSyncDialog((s) => s.open);
1443
- const setOpen = usePendingSyncDialog((s) => s.setOpen);
1444
- const isOnline = useIsOnline();
1445
- const items = usePendingSyncItems();
1446
- const cancelMany = useCancelManyPendingSync();
1447
- const [selected, setSelected] = useState([]);
1448
- const undoableIds = useMemo(
1449
- () => items.filter((i) => i.status !== "syncing").map((i) => i.mutationId),
1450
- [items]
1451
- );
1452
- const selectedUndoableIds = useMemo(
1453
- () => selected.filter((i) => i.status !== "syncing").map((i) => i.mutationId),
1454
- [selected]
1455
- );
1456
- const columnDefs = useMemo(
1457
- () => [
1458
- {
1459
- colId: "document",
1460
- headerName: "Document",
1461
- field: "document",
1462
- flex: 1,
1463
- minWidth: 140,
1464
- tooltipField: "document"
1465
- },
1466
- {
1467
- colId: "change",
1468
- headerName: "Change",
1469
- field: "change",
1470
- flex: 1.4,
1471
- minWidth: 160,
1472
- tooltipField: "change"
1473
- },
1474
- {
1475
- colId: "when",
1476
- headerName: "When",
1477
- width: 120,
1478
- // Sort by the raw timestamp; display the friendly relative string.
1479
- valueGetter: (p) => p.data?.at ?? 0,
1480
- valueFormatter: (p) => p.value ? formatRelativeTime(new Date(Number(p.value)).toISOString(), { style: "short" }) : ""
1481
- },
1482
- {
1483
- colId: "status",
1484
- headerName: "Status",
1485
- width: 150,
1486
- valueGetter: (p) => p.data?.status ?? "",
1487
- cellRenderer: StatusCell
1488
- }
1489
- ],
1490
- []
1491
- );
1492
- const hasFailed = items.some((i) => i.status === "error");
1493
- const title = !isOnline ? "Offline changes" : hasFailed ? "Some changes didn\u2019t sync" : items.length > 0 ? "Syncing your changes" : "No changes waiting";
1494
- const description = !isOnline ? "These edits are saved on this device and will sync automatically when you reconnect." : hasFailed ? "These edits didn\u2019t reach the server, so they\u2019re only saved on this device. Undo to discard them." : "Edits you made offline are syncing to the server.";
1495
- const undoSelected = () => {
1496
- cancelMany(selectedUndoableIds);
1497
- setSelected([]);
1498
- };
1499
- const undoAll = () => {
1500
- cancelMany(undoableIds);
1501
- setSelected([]);
1502
- };
1503
- return /* @__PURE__ */ jsx(Dialog, { open: isOpen, onOpenChange: setOpen, children: /* @__PURE__ */ jsxs(DialogContent, { presentation: "sheet", className: "sm:max-w-2xl", "data-testid": "pending-sync-modal", children: [
1504
- /* @__PURE__ */ jsxs(DialogHeader, { children: [
1505
- /* @__PURE__ */ jsxs(DialogTitle, { className: "flex items-center gap-2", children: [
1506
- isOnline ? /* @__PURE__ */ jsx(RefreshCw, { className: "h-5 w-5 text-primary" }) : /* @__PURE__ */ jsx(WifiOff, { className: "h-5 w-5 text-yellow-text" }),
1507
- title
1508
- ] }),
1509
- /* @__PURE__ */ jsx(DialogDescription, { children: description })
1510
- ] }),
1511
- items.length === 0 ? /* @__PURE__ */ jsxs(ModalSection, { className: "flex flex-col items-center gap-2 py-10 text-center text-muted-foreground", children: [
1512
- /* @__PURE__ */ jsx(CircleCheck, { className: "h-6 w-6 text-green-text opacity-70" }),
1513
- /* @__PURE__ */ jsx("p", { className: "text-sm", children: "Everything is up to date." })
1514
- ] }) : /* @__PURE__ */ jsx(ModalSection, { children: /* @__PURE__ */ jsx(
1515
- GridView,
1516
- {
1517
- items,
1518
- columnDefs,
1519
- getItemId: (item) => String(item.mutationId),
1520
- selection: { mode: "multiple", selected, onSelectionChange: setSelected },
1521
- height: "320px",
1522
- gridId: "pending-sync-grid-v1"
1523
- }
1524
- ) }),
1525
- undoableIds.length > 0 && /* @__PURE__ */ jsx(DialogFooter, { children: /* @__PURE__ */ jsxs(
1526
- Button,
1527
- {
1528
- variant: "outline",
1529
- className: "gap-1.5",
1530
- "data-testid": "pending-sync-undo",
1531
- disabled: selected.length > 0 && selectedUndoableIds.length === 0,
1532
- onClick: selected.length > 0 ? undoSelected : undoAll,
1533
- children: [
1534
- /* @__PURE__ */ jsx(RotateCcw, { className: "h-4 w-4" }),
1535
- selected.length > 0 ? `Undo selected (${selectedUndoableIds.length})` : `Undo all (${undoableIds.length})`
1536
- ]
1537
- }
1538
- ) })
1539
- ] }) });
1540
- }
1541
1424
  function ConnectedWorkspaceNotificationMenu({
1542
1425
  workspaceId: workspaceProp,
1543
1426
  ...menuProps
@@ -2310,7 +2193,7 @@ function useConnectedAgentManagement({
2310
2193
  const onEditorOpenChange = (open) => {
2311
2194
  setEditorOpen(open);
2312
2195
  };
2313
- const create4 = () => {
2196
+ const create2 = () => {
2314
2197
  setEditing(null);
2315
2198
  setEditorOpen(true);
2316
2199
  };
@@ -2344,7 +2227,7 @@ function useConnectedAgentManagement({
2344
2227
  return {
2345
2228
  agents,
2346
2229
  isLoading,
2347
- create: create4,
2230
+ create: create2,
2348
2231
  edit,
2349
2232
  assign,
2350
2233
  remove,
@@ -3748,958 +3631,6 @@ function GlossaryExport({ labelId, nameOf }) {
3748
3631
  ] })
3749
3632
  ] });
3750
3633
  }
3751
- function DocumentSyncGlyph({
3752
- docExtId,
3753
- size = 13,
3754
- className,
3755
- bgClassName = "bg-muted-foreground"
3756
- }) {
3757
- const isAvailableOffline = useOfflineDocumentIds().has(docExtId);
3758
- if (!isAvailableOffline) return null;
3759
- return /* @__PURE__ */ jsx(
3760
- "span",
3761
- {
3762
- title: "Available offline (saved on this device)",
3763
- "aria-label": "Available offline",
3764
- "data-testid": `offline-available-badge-${docExtId}`,
3765
- className: cn(
3766
- "inline-flex items-center justify-center rounded-full text-white ring-1 ring-white",
3767
- bgClassName,
3768
- className
3769
- ),
3770
- style: { width: size, height: size },
3771
- children: /* @__PURE__ */ jsx(ArrowDownToLine, { size: Math.round(size * 0.7), strokeWidth: 2.75 })
3772
- }
3773
- );
3774
- }
3775
- var NO_ACTIONS = {};
3776
- var ACTIVE_STATUSES = IN_FLIGHT_DOCUMENT_STATUSES;
3777
- var TERMINAL_STATUSES = FINISHED_DOCUMENT_STATUSES;
3778
- var STATUS_LABEL = {
3779
- uploading: "Uploading",
3780
- queued: "Queued",
3781
- parsing: "Parsing",
3782
- encrypting: "Encrypting",
3783
- indexing: "Indexing",
3784
- analysing: "Analysing"
3785
- };
3786
- function isActiveDocumentStatus(status) {
3787
- return ACTIVE_STATUSES.has(status.toLowerCase());
3788
- }
3789
- function useDocStatus(doc) {
3790
- return resolveDocumentStatus(doc, useProcessingTask(doc.external_id));
3791
- }
3792
- function TileStatusBadge({ doc, status }) {
3793
- let tone = "neutral";
3794
- let icon2 = null;
3795
- let title = "";
3796
- switch (status) {
3797
- case "completed":
3798
- tone = "success";
3799
- icon2 = /* @__PURE__ */ jsx(CheckCircle, { className: "size-4 text-green-text", strokeWidth: 2.75 });
3800
- title = "Ready";
3801
- break;
3802
- case "failed":
3803
- tone = "danger";
3804
- icon2 = /* @__PURE__ */ jsx(
3805
- FailedStageIcon,
3806
- {
3807
- stage: doc.failed_stage ?? null,
3808
- errorMessage: doc.error_message,
3809
- className: "size-4 text-red-text"
3810
- }
3811
- );
3812
- title = "Failed";
3813
- break;
3814
- case "skipped":
3815
- icon2 = /* @__PURE__ */ jsx(SkipForward, { className: "size-4 text-muted-foreground", strokeWidth: 2.75 });
3816
- title = "Skipped";
3817
- break;
3818
- case "empty":
3819
- tone = "warning";
3820
- icon2 = /* @__PURE__ */ jsx(FileX, { className: "size-4 text-yellow-text", strokeWidth: 2.75 });
3821
- title = "Empty \u2014 no extractable content";
3822
- break;
3823
- case "low-content":
3824
- tone = "warning";
3825
- icon2 = /* @__PURE__ */ jsx(AlertTriangle, { className: "size-4 text-yellow-text", strokeWidth: 2.75 });
3826
- title = "Low content \u2014 minimal extractable content";
3827
- break;
3828
- default:
3829
- return null;
3830
- }
3831
- return /* @__PURE__ */ jsx(
3832
- StatusPill,
3833
- {
3834
- tone,
3835
- icon: icon2,
3836
- title,
3837
- testId: `explorer-file-status-${doc.external_id}`
3838
- }
3839
- );
3840
- }
3841
- function TileVisibilityBadge({ doc }) {
3842
- const shared = !!doc.shared;
3843
- return /* @__PURE__ */ jsx(
3844
- StatusPill,
3845
- {
3846
- icon: /* @__PURE__ */ jsx(VisibilityIcon, { isShared: shared, className: "size-3.5", "aria-hidden": true }),
3847
- label: shared ? getEntityLabel("WORKSPACE") : "Only you",
3848
- title: visibilityAudience(shared),
3849
- testId: `explorer-file-visibility-${doc.external_id}`
3850
- }
3851
- );
3852
- }
3853
- function MiniUserAvatar({ user }) {
3854
- return /* @__PURE__ */ jsxs(Avatar, { className: "h-4 w-4 border border-white", children: [
3855
- user.picture && /* @__PURE__ */ jsx(AvatarImage, { src: user.picture, alt: getUserDisplayName(user) }),
3856
- /* @__PURE__ */ jsx(
3857
- AvatarFallback,
3858
- {
3859
- className: cn(
3860
- "text-xs font-semibold leading-none text-white",
3861
- getUserAvatarColor(user.external_id)
3862
- ),
3863
- children: getUserInitials(user)
3864
- }
3865
- )
3866
- ] });
3867
- }
3868
- function FileTooltipContent({
3869
- doc,
3870
- modifiedBy,
3871
- tagNameById
3872
- }) {
3873
- const labels = (doc.doctags ?? []).map((dt) => tagNameById.get(dt.tag_ext_id)).filter((name) => !!name);
3874
- return /* @__PURE__ */ jsx(
3875
- ExplorerFileTooltip,
3876
- {
3877
- title: getDocumentTitle(doc, doc.file_name ?? ""),
3878
- summary: getDocumentSubject(doc),
3879
- modifiedLabel: doc.updated_at ? formatFriendlyDate(doc.updated_at, false) : null,
3880
- modifiedByAvatar: modifiedBy && /* @__PURE__ */ jsx(MiniUserAvatar, { user: modifiedBy }),
3881
- shared: !!doc.shared,
3882
- visibilityIcon: /* @__PURE__ */ jsx(VisibilityIcon, { isShared: !!doc.shared, className: "h-3 w-3" }),
3883
- labels,
3884
- uiLabels: { shared: visibilityAudience(true), private: visibilityAudience(false) }
3885
- }
3886
- );
3887
- }
3888
- function startMenuItem(items) {
3889
- if (items.length === 0) return [];
3890
- return [
3891
- {
3892
- id: "start",
3893
- label: "Start\u2026",
3894
- icon: Sparkles,
3895
- testId: "explorer-start-menu",
3896
- onSelect: () => {
3897
- },
3898
- submenu: items.map((item) => ({
3899
- id: item.id,
3900
- label: item.title,
3901
- icon: Play,
3902
- onSelect: item.run,
3903
- testId: `explorer-start-${item.id}`
3904
- }))
3905
- }
3906
- ];
3907
- }
3908
- var FileTile = memo(function FileTile2({
3909
- doc,
3910
- density,
3911
- selected,
3912
- dragging,
3913
- dndActive,
3914
- renaming,
3915
- canDelete,
3916
- thumbnailUrl,
3917
- modifiedBy,
3918
- tagNameById,
3919
- onSelect,
3920
- onToggle,
3921
- onOpen,
3922
- onReview,
3923
- onStartRename,
3924
- onCommitRename,
3925
- onCancelRename,
3926
- onDownload,
3927
- onMove,
3928
- onDelete,
3929
- actions = NO_ACTIONS
3930
- }) {
3931
- const { attributes, listeners: listeners2, setNodeRef } = useDraggable({
3932
- id: `doc:${doc.external_id}`,
3933
- data: { type: "doc", docId: doc.external_id }
3934
- });
3935
- const { notify: notify18 } = useBlocksEnvironment();
3936
- const { startItemsForFile, openDocumentChat, emailDocument } = actions;
3937
- const status = useDocStatus(doc);
3938
- const isProcessing = ACTIVE_STATUSES.has(status);
3939
- const isOffline = useOfflineDocumentIds().has(doc.external_id);
3940
- const isViewing = useOpenViewerDocumentId() === doc.external_id;
3941
- const showStatusMarker = !isProcessing && TERMINAL_STATUSES.has(status);
3942
- const Icon = getFileTypeIcon(doc.file_name, { mime: doc.file_type });
3943
- const { data: mailPolicy } = useMailPolicy();
3944
- const shareAsEmail = async () => {
3945
- try {
3946
- await emailDocument?.(doc);
3947
- } catch (error) {
3948
- notify18(error instanceof Error ? error.message : "Could not attach document", "error");
3949
- }
3950
- };
3951
- const startItems = startItemsForFile?.(doc);
3952
- const menuItems = [
3953
- { id: "open", label: "Open", icon: SquarePen, onSelect: () => onOpen(doc) },
3954
- ...onReview ? [{ id: "review", label: "Open in Review", icon: BookOpen, onSelect: () => onReview(doc) }] : [],
3955
- ...openDocumentChat ? [
3956
- {
3957
- id: "chat",
3958
- label: "Document chat",
3959
- icon: MessagesSquare,
3960
- onSelect: () => openDocumentChat(doc.external_id)
3961
- }
3962
- ] : [],
3963
- ...startMenuItem(startItems ?? []),
3964
- {
3965
- id: "rename",
3966
- label: "Rename",
3967
- icon: Pencil,
3968
- onSelect: () => onStartRename(doc),
3969
- separatorBefore: true
3970
- },
3971
- { id: "download", label: "Download", icon: Download, onSelect: () => onDownload(doc) },
3972
- ...emailDocument && mailPolicy?.enabled ? [
3973
- {
3974
- id: "email",
3975
- label: "Send as email attachment",
3976
- icon: Mail,
3977
- onSelect: () => {
3978
- void shareAsEmail();
3979
- }
3980
- }
3981
- ] : [],
3982
- ...onMove ? [{ id: "move", label: "Move to\u2026", icon: FolderInput, onSelect: () => onMove(doc) }] : [],
3983
- ...canDelete ? [
3984
- {
3985
- id: "delete",
3986
- label: "Delete",
3987
- icon: Trash2,
3988
- onSelect: () => onDelete(doc),
3989
- destructive: true,
3990
- separatorBefore: true
3991
- }
3992
- ] : []
3993
- ];
3994
- const tooltip = renaming || dndActive ? void 0 : /* @__PURE__ */ jsx(FileTooltipContent, { doc, modifiedBy, tagNameById });
3995
- return /* @__PURE__ */ jsx(
3996
- ExplorerFileTile,
3997
- {
3998
- id: doc.external_id,
3999
- title: getDocumentTitle(doc, doc.file_name ?? ""),
4000
- density,
4001
- selected,
4002
- dragging,
4003
- renaming,
4004
- thumbnailUrl,
4005
- renderFileIcon: (size) => /* @__PURE__ */ jsx(Icon, { size, className: "drop-shadow-sm" }),
4006
- progress: isProcessing ? { label: STATUS_LABEL[status] ?? status, queued: status === "queued" } : void 0,
4007
- statusMarker: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
4008
- /* @__PURE__ */ jsx(TileVisibilityBadge, { doc }),
4009
- showStatusMarker && /* @__PURE__ */ jsx(TileStatusBadge, { doc, status })
4010
- ] }),
4011
- offlineMarker: isOffline ? /* @__PURE__ */ jsx(DocumentSyncGlyph, { docExtId: doc.external_id, size: 24, bgClassName: "bg-primary" }) : void 0,
4012
- entity: /* @__PURE__ */ jsx(
4013
- DocumentEntity,
4014
- {
4015
- doc,
4016
- labelMaxWidth: "max-w-full",
4017
- noClamp: true,
4018
- labelClassName: "whitespace-normal line-clamp-2 break-words",
4019
- viewing: isViewing,
4020
- tooltipContent: /* @__PURE__ */ jsx(FileTooltipContent, { doc, modifiedBy, tagNameById }),
4021
- className: cn(
4022
- "w-full min-w-0 max-w-full bg-background/90 backdrop-blur-sm",
4023
- density === "list" ? "text-xs" : void 0
4024
- ),
4025
- onClick: (e) => {
4026
- e.stopPropagation();
4027
- onOpen(doc);
4028
- }
4029
- }
4030
- ),
4031
- tooltip,
4032
- menuItems,
4033
- rootRef: setNodeRef,
4034
- rootProps: { ...listeners2, ...attributes },
4035
- onOpen: () => onOpen(doc),
4036
- onSelect: (e) => onSelect(doc, e),
4037
- onToggle: (e) => onToggle(doc, e),
4038
- onCommitRename: (name) => onCommitRename(doc, name),
4039
- onCancelRename
4040
- }
4041
- );
4042
- });
4043
- var FolderTile = memo(function FolderTile2({
4044
- folder,
4045
- density,
4046
- editing,
4047
- selected,
4048
- partiallySelected,
4049
- documents,
4050
- onOpen,
4051
- onToggleSelect,
4052
- onCommitName,
4053
- onCancelName,
4054
- onStartRename,
4055
- onDownload,
4056
- onMove,
4057
- onDelete,
4058
- actions = NO_ACTIONS
4059
- }) {
4060
- const { setNodeRef, isOver } = useDroppable({
4061
- id: `folder:${folder.path.join("/")}`,
4062
- data: { type: "folder", path: folder.path }
4063
- });
4064
- const { startItemsForFolder } = actions;
4065
- const tasks = useProcessingTasks();
4066
- const processingCount = useMemo(
4067
- () => documents.filter(
4068
- (doc) => isActiveDocumentStatus(resolveDocumentStatus(doc, tasks[doc.external_id]))
4069
- ).length,
4070
- [documents, tasks]
4071
- );
4072
- const isEmpty = folder.count === 0;
4073
- const iconSize = density === "list" ? 34 : 48;
4074
- const menuItems = [
4075
- ...onStartRename ? [{ id: "rename", label: "Rename", icon: Pencil, onSelect: () => onStartRename(folder) }] : [],
4076
- ...!isEmpty ? startMenuItem(startItemsForFolder?.(folder.path.join("/")) ?? []) : [],
4077
- ...onDownload && !isEmpty ? [{ id: "download", label: "Download", icon: Download, onSelect: () => onDownload(folder) }] : [],
4078
- ...onMove && !isEmpty ? [{ id: "move", label: "Move to\u2026", icon: FolderInput, onSelect: () => onMove(folder) }] : [],
4079
- ...onDelete ? [
4080
- {
4081
- id: "delete",
4082
- label: "Delete",
4083
- icon: Trash2,
4084
- onSelect: () => onDelete(folder),
4085
- destructive: true,
4086
- separatorBefore: true
4087
- }
4088
- ] : []
4089
- ];
4090
- const displayName = folder.path.length === 1 ? formatFolderSegment(folder.name) : folder.name;
4091
- const providerIcon = folder.path.length === 1 && hasFolderProviderIcon(folder.name) ? /* @__PURE__ */ jsx(
4092
- "span",
4093
- {
4094
- className: "flex items-center justify-center drop-shadow-sm",
4095
- style: { width: iconSize, height: iconSize },
4096
- children: /* @__PURE__ */ jsx(FolderProviderIcon, { folderPath: folder.name, className: "h-full w-full" })
4097
- }
4098
- ) : void 0;
4099
- return /* @__PURE__ */ jsx(
4100
- ExplorerFolderTile,
4101
- {
4102
- name: folder.name,
4103
- displayName: displayName === "" ? null : displayName,
4104
- path: folder.path,
4105
- count: folder.count,
4106
- density,
4107
- editing,
4108
- selected,
4109
- partiallySelected,
4110
- processingCount,
4111
- isOver,
4112
- icon: providerIcon,
4113
- menuItems,
4114
- rootRef: setNodeRef,
4115
- onOpen: () => onOpen(folder),
4116
- onToggleSelect: onToggleSelect ? (e) => onToggleSelect(folder, e) : void 0,
4117
- onCommitName: (name) => onCommitName?.(folder, name),
4118
- onCancelName
4119
- }
4120
- );
4121
- });
4122
- var PROCESSING_LABELS = {
4123
- parsing: "Parsing",
4124
- encrypting: "Encrypting",
4125
- indexing: "Indexing",
4126
- analysing: "Analysing"
4127
- };
4128
- var QUOTA_PREFIX = "QUOTA_EXCEEDED:";
4129
- function parseQuotaError(errorMessage2) {
4130
- if (!errorMessage2 || !errorMessage2.startsWith(QUOTA_PREFIX)) return null;
4131
- const body = errorMessage2.slice(QUOTA_PREFIX.length);
4132
- const spend = body.match(/spend=([0-9.]+)/)?.[1];
4133
- const budget = body.match(/budget=([0-9.]+)/)?.[1];
4134
- const projectExtId = body.match(/project_ext_id=([^\s,]+)/)?.[1] ?? null;
4135
- if (spend === void 0 || budget === void 0) return null;
4136
- return { spend: Number(spend), budget: Number(budget), projectExtId };
4137
- }
4138
- function useResolvedDocStatus(doc) {
4139
- const task = useProcessingTask(doc?.external_id ?? "");
4140
- const isPendingSync = useDocumentPendingSync(doc?.external_id);
4141
- if (!doc || !doc.status) return null;
4142
- const status = resolveDocumentStatus(doc, doc.external_id ? task : void 0);
4143
- return { status, isPendingSync, failedStage: task?.failed_stage ?? doc.failed_stage ?? null };
4144
- }
4145
- var GLYPH = "size-3.5 shrink-0";
4146
- function describeGlyph(resolved, doc) {
4147
- if (resolved.isPendingSync) {
4148
- return {
4149
- node: /* @__PURE__ */ jsx(RefreshCw, { className: `${GLYPH} text-yellow-text` }),
4150
- title: "Changes saved on this device, waiting to sync"
4151
- };
4152
- }
4153
- switch (resolved.status) {
4154
- case "queued": {
4155
- const isDocx = doc.file_name?.toLowerCase().endsWith(".docx");
4156
- return {
4157
- node: /* @__PURE__ */ jsx(Clock, { className: `${GLYPH} text-muted-foreground` }),
4158
- title: isDocx ? "The document is available to edit. PDF and search indexing are processing." : "Queued, waiting to start"
4159
- };
4160
- }
4161
- case "parsing":
4162
- case "encrypting":
4163
- case "indexing":
4164
- case "analysing":
4165
- return {
4166
- node: /* @__PURE__ */ jsx(Loader2, { className: `${GLYPH} animate-spin text-ai-ink` }),
4167
- title: PROCESSING_LABELS[resolved.status]
4168
- };
4169
- case "skipped":
4170
- return {
4171
- node: /* @__PURE__ */ jsx(SkipForward, { className: `${GLYPH} text-muted-foreground` }),
4172
- title: "Skipped"
4173
- };
4174
- case "empty":
4175
- return {
4176
- node: /* @__PURE__ */ jsx(FileX, { className: `${GLYPH} text-yellow-text` }),
4177
- title: "Empty, no extractable content"
4178
- };
4179
- case "low-content":
4180
- return {
4181
- node: /* @__PURE__ */ jsx(AlertTriangle, { className: `${GLYPH} text-yellow-text` }),
4182
- title: "Low content, minimal extractable content"
4183
- };
4184
- case "failed":
4185
- if (doc.error_message?.startsWith(QUOTA_PREFIX)) {
4186
- return { node: /* @__PURE__ */ jsx(Zap, { className: `${GLYPH} text-yellow-text` }), title: "AI usage used up" };
4187
- }
4188
- return {
4189
- node: /* @__PURE__ */ jsx(
4190
- FailedStageIcon,
4191
- {
4192
- stage: resolved.failedStage,
4193
- errorMessage: doc.error_message,
4194
- className: `${GLYPH} text-red-text`
4195
- }
4196
- ),
4197
- title: "Failed"
4198
- };
4199
- default:
4200
- return null;
4201
- }
4202
- }
4203
- var DocumentStatusGlyph = memo(function DocumentStatusGlyph2({
4204
- doc
4205
- }) {
4206
- const resolved = useResolvedDocStatus(doc);
4207
- const shown = resolved ? describeGlyph(resolved, doc) : null;
4208
- if (!resolved || !shown) return null;
4209
- return /* @__PURE__ */ jsx(
4210
- "span",
4211
- {
4212
- role: "img",
4213
- "aria-label": shown.title,
4214
- title: shown.title,
4215
- "data-slot": "document-status-glyph",
4216
- "data-status": resolved.status,
4217
- className: "inline-flex items-center",
4218
- children: shown.node
4219
- }
4220
- );
4221
- });
4222
- var StatusCell2 = memo(function StatusCell3({
4223
- doc,
4224
- onStatusClick,
4225
- actions
4226
- }) {
4227
- const resolved = useResolvedDocStatus(doc);
4228
- if (!doc || !resolved) return /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "\u2014" });
4229
- const { status, isPendingSync, failedStage } = resolved;
4230
- const cell = (pill) => /* @__PURE__ */ jsx("div", { className: "flex h-full w-full items-center justify-center overflow-hidden", children: pill });
4231
- const click = () => onStatusClick?.();
4232
- if (isPendingSync) {
4233
- return cell(
4234
- /* @__PURE__ */ jsx(
4235
- StatusPill,
4236
- {
4237
- tone: "warning",
4238
- icon: /* @__PURE__ */ jsx(RefreshCw, { className: "size-3.5" }),
4239
- label: "Pending",
4240
- title: "Changes saved on this device \u2014 waiting to sync",
4241
- onClick: openPendingSyncDialog
4242
- }
4243
- )
4244
- );
4245
- }
4246
- switch (status) {
4247
- case "completed":
4248
- return cell(
4249
- /* @__PURE__ */ jsx(
4250
- StatusPill,
4251
- {
4252
- tone: "success",
4253
- icon: /* @__PURE__ */ jsx(CheckCircle, { className: "size-3.5" }),
4254
- label: "Ready",
4255
- title: "Ready",
4256
- onClick: click
4257
- }
4258
- )
4259
- );
4260
- case "skipped":
4261
- return cell(
4262
- /* @__PURE__ */ jsx(
4263
- StatusPill,
4264
- {
4265
- tone: "neutral",
4266
- icon: /* @__PURE__ */ jsx(SkipForward, { className: "size-3.5" }),
4267
- label: "Skipped",
4268
- title: "Skipped",
4269
- onClick: click
4270
- }
4271
- )
4272
- );
4273
- case "empty":
4274
- return cell(
4275
- /* @__PURE__ */ jsx(
4276
- StatusPill,
4277
- {
4278
- tone: "warning",
4279
- icon: /* @__PURE__ */ jsx(FileX, { className: "size-3.5" }),
4280
- label: "Empty",
4281
- title: "Empty - no extractable content",
4282
- onClick: click
4283
- }
4284
- )
4285
- );
4286
- case "low-content":
4287
- return cell(
4288
- /* @__PURE__ */ jsx(
4289
- StatusPill,
4290
- {
4291
- tone: "warning",
4292
- icon: /* @__PURE__ */ jsx(AlertTriangle, { className: "size-3.5" }),
4293
- label: "Low content",
4294
- title: "Low content - minimal extractable content",
4295
- onClick: click
4296
- }
4297
- )
4298
- );
4299
- case "failed": {
4300
- const quota = parseQuotaError(doc.error_message);
4301
- if (quota) {
4302
- return cell(
4303
- /* @__PURE__ */ jsx(
4304
- StatusPill,
4305
- {
4306
- tone: "warning",
4307
- icon: /* @__PURE__ */ jsx(Zap, { className: "size-3.5" }),
4308
- label: "Quota",
4309
- title: "AI usage used up \u2014 click for options",
4310
- onClick: () => actions?.openQuota?.(quota)
4311
- }
4312
- )
4313
- );
4314
- }
4315
- return cell(
4316
- /* @__PURE__ */ jsx(
4317
- StatusPill,
4318
- {
4319
- tone: "danger",
4320
- icon: /* @__PURE__ */ jsx(
4321
- FailedStageIcon,
4322
- {
4323
- stage: failedStage,
4324
- errorMessage: doc.error_message,
4325
- className: "size-3.5"
4326
- }
4327
- ),
4328
- label: "Failed",
4329
- onClick: click
4330
- }
4331
- )
4332
- );
4333
- }
4334
- case "queued": {
4335
- const isDocx = doc.file_name?.toLowerCase().endsWith(".docx");
4336
- return cell(
4337
- /* @__PURE__ */ jsx(
4338
- StatusPill,
4339
- {
4340
- tone: "neutral",
4341
- label: isDocx ? "Uploaded" : "Queued",
4342
- progress: "queued",
4343
- title: isDocx ? "The document is available to edit. PDF and search indexing are processing." : "Queued - waiting to start",
4344
- onClick: click
4345
- }
4346
- )
4347
- );
4348
- }
4349
- case "parsing":
4350
- case "encrypting":
4351
- case "indexing":
4352
- case "analysing":
4353
- return cell(
4354
- /* @__PURE__ */ jsx(
4355
- StatusPill,
4356
- {
4357
- tone: "info",
4358
- label: PROCESSING_LABELS[status],
4359
- progress: "processing",
4360
- title: PROCESSING_LABELS[status],
4361
- onClick: click
4362
- }
4363
- )
4364
- );
4365
- default:
4366
- return cell(/* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: status }));
4367
- }
4368
- });
4369
- var UserAvatar = memo(function UserAvatar2({
4370
- user,
4371
- isMe = false,
4372
- onOpen
4373
- }) {
4374
- if (!user) return /* @__PURE__ */ jsx(UserEntity, { empty: true, size: "xs" });
4375
- const colorClass = getUserAvatarColor(user.external_id);
4376
- const agent = isAgent(user);
4377
- return /* @__PURE__ */ jsx(
4378
- UserEntity,
4379
- {
4380
- size: "xs",
4381
- variant: "icon",
4382
- showTooltip: false,
4383
- interactive: !!onOpen,
4384
- initials: getUserInitials(user),
4385
- displayName: isMe ? "You" : getUserDisplayName(user),
4386
- picture: user.picture,
4387
- colorClass,
4388
- isAgent: agent,
4389
- isVerified: user.is_identity_verified === true,
4390
- agentStyle: agent ? agentAvatarColors(colorClass) : void 0,
4391
- isMe,
4392
- onClick: onOpen ? (e) => {
4393
- e.stopPropagation();
4394
- onOpen(user.external_id);
4395
- } : void 0
4396
- }
4397
- );
4398
- });
4399
- function DocumentSummaryTooltip({
4400
- doc,
4401
- users
4402
- }) {
4403
- const { data: tags } = useTags();
4404
- const modifiedBy = users.find(
4405
- (u) => u.external_id === (doc.updated_by_ext_id ?? doc.created_by_ext_id)
4406
- );
4407
- const tagNameById = /* @__PURE__ */ new Map();
4408
- for (const tag of tags ?? []) tagNameById.set(tag.external_id, tag.name);
4409
- return /* @__PURE__ */ jsx(FileTooltipContent, { doc, modifiedBy, tagNameById });
4410
- }
4411
- var OPEN_AFTER_DOUBLE_CLICK_WINDOW_MS = 300;
4412
- var DocumentNameCell = memo(function DocumentNameCell2({
4413
- doc,
4414
- canEdit,
4415
- users,
4416
- onOpen,
4417
- onReview,
4418
- onDocumentChat,
4419
- onRename,
4420
- onDownload,
4421
- onMove,
4422
- onDelete
4423
- }) {
4424
- const arbi = useArbi();
4425
- const { notify: notify18 } = useBlocksEnvironment();
4426
- const isViewing = useOpenViewerDocumentId() === doc.external_id;
4427
- const openTimerRef = useRef(void 0);
4428
- useEffect(() => () => window.clearTimeout(openTimerRef.current), []);
4429
- const downloadMarkup = async () => {
4430
- try {
4431
- const { blob, fileName } = await fetchMarkupPdf(arbi.getClient().fetch, doc.external_id);
4432
- downloadBlob(blob, fileName);
4433
- } catch (e) {
4434
- notify18(e instanceof Error ? e.message : "The markup could not be downloaded", "error");
4435
- }
4436
- };
4437
- return /* @__PURE__ */ jsx(
4438
- DocumentNameCellFrame,
4439
- {
4440
- testId: `open-document-viewer-button-${doc.external_id}`,
4441
- isViewing,
4442
- subtitle: [doc.created_at?.slice(0, 10), doc.folder ? formatFolderLabel(doc.folder) : null].filter(Boolean).join(" \xB7 "),
4443
- children: /* @__PURE__ */ jsx(
4444
- DocumentEntity,
4445
- {
4446
- doc,
4447
- size: "base",
4448
- labelMaxWidth: "max-w-full",
4449
- fullWidth: true,
4450
- status: /* @__PURE__ */ jsx(DocumentStatusGlyph, { doc }),
4451
- tooltipContent: /* @__PURE__ */ jsx(DocumentSummaryTooltip, { doc, users }),
4452
- iconBadge: /* @__PURE__ */ jsx(
4453
- DocumentSyncGlyph,
4454
- {
4455
- docExtId: doc.external_id,
4456
- size: 10,
4457
- className: "absolute -bottom-1 -right-1"
4458
- }
4459
- ),
4460
- onClick: (e) => {
4461
- e.stopPropagation();
4462
- window.clearTimeout(openTimerRef.current);
4463
- if (e.detail > 1) return;
4464
- openTimerRef.current = window.setTimeout(onOpen, OPEN_AFTER_DOUBLE_CLICK_WINDOW_MS);
4465
- },
4466
- actions: /* @__PURE__ */ jsx(
4467
- DocumentRowMenu,
4468
- {
4469
- canEdit,
4470
- onOpen,
4471
- onReview,
4472
- onDocumentChat,
4473
- onRename,
4474
- onDownload,
4475
- onDownloadMarkup: currentHasMarkup(doc) ? () => void downloadMarkup() : void 0,
4476
- downloadMarkupDisabledReason: isSignedVersion(doc) ? SIGNED_LOCKED_REASON : void 0,
4477
- onMove,
4478
- onDelete
4479
- }
4480
- ),
4481
- className: "min-w-0 max-w-full border-transparent bg-transparent hover:bg-foreground/5"
4482
- }
4483
- )
4484
- }
4485
- );
4486
- });
4487
- var DocumentSharedCell = memo(function DocumentSharedCell2({
4488
- document: document2,
4489
- disabled = false,
4490
- disabledTooltip,
4491
- onToggle
4492
- }) {
4493
- const handleToggle = useCallback(
4494
- (shouldShare) => onToggle(document2.external_id, shouldShare),
4495
- [document2.external_id, onToggle]
4496
- );
4497
- return /* @__PURE__ */ jsx(
4498
- SharedCell,
4499
- {
4500
- item: document2,
4501
- onToggle: handleToggle,
4502
- disabled,
4503
- disabledTooltip,
4504
- tooltipActive: visibilityToggleTooltip(true),
4505
- tooltipInactive: visibilityToggleTooltip(false),
4506
- workspaceLabel: getEntityLabel("WORKSPACE")
4507
- }
4508
- );
4509
- });
4510
- function useDocumentFolders(documents, value) {
4511
- return useMemo(() => {
4512
- const paths = /* @__PURE__ */ new Set();
4513
- for (const doc of documents) if (doc.folder) paths.add(doc.folder);
4514
- if (value) paths.add(value);
4515
- return [...paths].sort((a, b) => a.localeCompare(b));
4516
- }, [documents, value]);
4517
- }
4518
- function folderSegments(folder) {
4519
- return folder.split("/").map((part, i) => i === 0 ? formatFolderSegment(part) : part).filter((part, i) => i > 0 || part !== "");
4520
- }
4521
- var DocumentFolderCell = memo(
4522
- function DocumentFolderCell2({
4523
- document: document2,
4524
- isEditable,
4525
- allDocuments,
4526
- onUpdateFolder
4527
- }) {
4528
- const folder = document2.folder;
4529
- const folders = useDocumentFolders(allDocuments, folder);
4530
- return /* @__PURE__ */ jsx(
4531
- FolderCell,
4532
- {
4533
- folder,
4534
- segments: folder ? folderSegments(folder) : [],
4535
- icon: folder && hasFolderProviderIcon(folder) ? /* @__PURE__ */ jsx(FolderProviderIcon, { folderPath: folder, className: "h-3.5 w-3.5 flex-none shrink-0" }) : void 0,
4536
- isEditable,
4537
- picker: /* @__PURE__ */ jsx(
4538
- FolderCommandList,
4539
- {
4540
- folders,
4541
- value: folder,
4542
- onSelect: (next) => onUpdateFolder(document2.external_id, next),
4543
- showRemove: !!folder
4544
- }
4545
- )
4546
- }
4547
- );
4548
- },
4549
- (prev, next) => prev.document.external_id === next.document.external_id && prev.document.folder === next.document.folder && prev.isEditable === next.isEditable && prev.allDocuments === next.allDocuments && prev.onUpdateFolder === next.onUpdateFolder
4550
- );
4551
- var RELATION_LABELS = {
4552
- redaction: "Redacted copy",
4553
- annotated: "Annotated copy",
4554
- production: "Production",
4555
- crop: "Crop",
4556
- redline_base: "Redline",
4557
- redline_revised: "Redline",
4558
- translation: "Translation"
4559
- };
4560
- var relationLabel = (role, version) => {
4561
- const label = role ? RELATION_LABELS[role] : void 0;
4562
- return version ? `${label ?? "Made"} from v${version}` : label;
4563
- };
4564
- var RelatedDocumentsCell = memo(function RelatedDocumentsCell2({
4565
- currentDoc,
4566
- related,
4567
- viewingDocumentId,
4568
- onDocumentClick,
4569
- onDelete,
4570
- onCompare
4571
- }) {
4572
- return /* @__PURE__ */ jsx(
4573
- RelatedDocsCell,
4574
- {
4575
- parent: related.parent,
4576
- attachments: related.children,
4577
- madeFrom: related.madeFrom,
4578
- copies: related.copies,
4579
- getRelation: (doc) => relationLabel(related.roles[doc.external_id], related.versions?.[doc.external_id]),
4580
- duplicates: related.duplicates,
4581
- similar: related.similar.map(({ doc }) => doc),
4582
- renderDoc: (doc) => /* @__PURE__ */ jsx(
4583
- DocumentEntity,
4584
- {
4585
- doc,
4586
- icon: viewingDocumentId === doc.external_id ? /* @__PURE__ */ jsx(Eye, { className: "h-3.5 w-3.5 flex-shrink-0 text-primary" }) : void 0,
4587
- onClick: () => onDocumentClick(doc.external_id)
4588
- }
4589
- ),
4590
- getKey: (doc) => doc.external_id,
4591
- onSwitchTo: (doc) => {
4592
- const version = related.versions?.[doc.external_id];
4593
- onDocumentClick(version ? `${doc.external_id}@v${version}` : doc.external_id);
4594
- },
4595
- onDelete,
4596
- onCompare: onCompare ? (doc) => onCompare(currentDoc.external_id, doc.external_id) : void 0
4597
- }
4598
- );
4599
- });
4600
- var NOT_A_MEMBER_MESSAGE = "Join this workspace as a collaborator or owner to create or apply labels.";
4601
- var DocumentLabelsCell = memo(function DocumentLabelsCell2({
4602
- doc,
4603
- labels,
4604
- createDocTag,
4605
- deleteDocTag,
4606
- createTag,
4607
- isMember,
4608
- rowHeight,
4609
- actions
4610
- }) {
4611
- const isCreatingTag = useIsCreatingTag();
4612
- const { notify: notify18 } = useBlocksEnvironment();
4613
- const options2 = useMemo(
4614
- () => labels.map((t) => ({
4615
- id: t.external_id,
4616
- name: t.name,
4617
- color: getEntityColor(t.external_id, "medium")
4618
- })),
4619
- [labels]
4620
- );
4621
- const appliedIds = useMemo(
4622
- () => new Set(
4623
- (doc.doctags || []).filter((dt) => labels.some((t) => t.external_id === dt.tag_ext_id)).map((dt) => dt.tag_ext_id)
4624
- ),
4625
- [doc.doctags, labels]
4626
- );
4627
- const applyTag = useCallback(
4628
- (tagId) => createDocTag.mutateAsync({ tagId, docIds: [doc.external_id] }),
4629
- [createDocTag, doc.external_id]
4630
- );
4631
- const handleToggle = useCallback(
4632
- async (tagId) => {
4633
- if (!isMember) return notify18(NOT_A_MEMBER_MESSAGE, "info");
4634
- if (appliedIds.has(tagId)) {
4635
- await deleteDocTag.mutateAsync({ tagId, docIds: [doc.external_id] });
4636
- } else {
4637
- await applyTag(tagId);
4638
- }
4639
- },
4640
- [isMember, appliedIds, deleteDocTag, applyTag, doc.external_id, notify18]
4641
- );
4642
- const handleCreate = useCallback(
4643
- async (name) => {
4644
- const trimmed = name.trim();
4645
- if (!trimmed) return;
4646
- if (!isMember) return notify18(NOT_A_MEMBER_MESSAGE, "info");
4647
- const existing = labels.find((t) => t.name.toLowerCase() === trimmed.toLowerCase());
4648
- if (existing) {
4649
- if (!appliedIds.has(existing.external_id)) await applyTag(existing.external_id);
4650
- return;
4651
- }
4652
- if (isCreatingTag(trimmed)) return;
4653
- const created = await createTag.mutateAsync({
4654
- name: trimmed,
4655
- tagType: { type: "checkbox", options: [] },
4656
- shared: false
4657
- });
4658
- if (created?.external_id) await applyTag(created.external_id);
4659
- },
4660
- [isMember, labels, appliedIds, createTag, applyTag, isCreatingTag, notify18]
4661
- );
4662
- const openFieldsManager = actions?.openFieldsManager;
4663
- return /* @__PURE__ */ jsx(
4664
- LabelMultiSelectView,
4665
- {
4666
- options: options2,
4667
- appliedIds,
4668
- onToggle: handleToggle,
4669
- onCreate: handleCreate,
4670
- onEditLabels: openFieldsManager ? () => openFieldsManager() : void 0,
4671
- rowHeight
4672
- }
4673
- );
4674
- });
4675
- function DocumentUser({
4676
- user,
4677
- tooltip = true,
4678
- variant = "icon"
4679
- }) {
4680
- const { renderUser: renderUser2 } = useDocumentsSupport();
4681
- const { openUser } = useDocumentHostActions();
4682
- if (user && renderUser2) return /* @__PURE__ */ jsx(Fragment, { children: renderUser2(user, { tooltip, variant }) });
4683
- if (user && variant === "pill")
4684
- return /* @__PURE__ */ jsx(
4685
- UserEntity,
4686
- {
4687
- size: "sm",
4688
- variant: "pill",
4689
- displayName: getUserDisplayName(user),
4690
- picture: user.picture,
4691
- initials: `${user.given_name?.charAt(0) ?? ""}${user.family_name?.charAt(0) ?? ""}`
4692
- }
4693
- );
4694
- return /* @__PURE__ */ jsx(UserAvatar, { user, onOpen: openUser });
4695
- }
4696
- function useMemberLookup() {
4697
- const { data: members = [] } = useWorkspaceUsers();
4698
- return useCallback(
4699
- (userId) => userId ? members.find((m) => m.user.external_id === userId)?.user : void 0,
4700
- [members]
4701
- );
4702
- }
4703
3634
  var ANNOTATION_FORMATS = ["text", "select", "number", "date"];
4704
3635
  var isAnnotationFormat = (type) => ANNOTATION_FORMATS.includes(type ?? "");
4705
3636
  function kindOptions(group, tag) {
@@ -11974,8 +10905,8 @@ function WorkspaceCreateForm({
11974
10905
  );
11975
10906
  return;
11976
10907
  }
11977
- const create4 = seed?.create ?? createWorkspaceMutation.mutateAsync;
11978
- const response = await create4({
10908
+ const create2 = seed?.create ?? createWorkspaceMutation.mutateAsync;
10909
+ const response = await create2({
11979
10910
  name: localWorkspaceName.trim(),
11980
10911
  description: localWorkspaceDescription,
11981
10912
  projectId: projectExtId
@@ -16010,113 +14941,6 @@ function ProjectDetailsForm({
16010
14941
  ] })
16011
14942
  ] });
16012
14943
  }
16013
- var useFilesStore = create()(
16014
- persist(
16015
- (set) => ({
16016
- pendingFolders: {},
16017
- addPendingFolder: (workspaceId, path) => set((state) => {
16018
- const current = state.pendingFolders[workspaceId] ?? [];
16019
- if (current.includes(path)) return state;
16020
- return { pendingFolders: { ...state.pendingFolders, [workspaceId]: [...current, path] } };
16021
- }),
16022
- removePendingFolder: (workspaceId, path) => set((state) => {
16023
- const current = state.pendingFolders[workspaceId] ?? [];
16024
- if (!current.includes(path)) return state;
16025
- return {
16026
- pendingFolders: {
16027
- ...state.pendingFolders,
16028
- [workspaceId]: current.filter((p) => p !== path)
16029
- }
16030
- };
16031
- })
16032
- }),
16033
- {
16034
- name: "arbi_explorer_pending_folders",
16035
- storage: createJSONStorage(() => sessionStorage),
16036
- partialize: (state) => ({ pendingFolders: state.pendingFolders })
16037
- }
16038
- )
16039
- );
16040
- var NONE = [];
16041
- function usePendingFolders(workspaceId) {
16042
- return useFilesStore(
16043
- (state) => (workspaceId ? state.pendingFolders[workspaceId] : void 0) ?? NONE
16044
- );
16045
- }
16046
- var FILES_PREFS_KEY = "files";
16047
- var DEFAULT_VIEW_MODE = "explorer";
16048
- var useFilesPrefs = create()(
16049
- persist(
16050
- (set) => ({
16051
- documentFilters: {},
16052
- setDocumentFilters: (documentFilters) => set({ documentFilters }),
16053
- viewModes: {},
16054
- setViewMode: (viewMode, prefsKey = FILES_PREFS_KEY) => set(
16055
- (state) => state.viewModes[prefsKey] === viewMode ? state : { viewModes: { ...state.viewModes, [prefsKey]: viewMode } }
16056
- ),
16057
- // New users start at the compact minimum (more rows at once).
16058
- rowHeight: DOCUMENTS_ROW_HEIGHT_INITIAL,
16059
- setRowHeight: (rowHeight) => set({ rowHeight })
16060
- }),
16061
- {
16062
- name: "arbi_files_prefs",
16063
- storage: createJSONStorage(() => localStorage),
16064
- version: 1,
16065
- // Version 0 kept one view for every files page: it becomes the files page's own.
16066
- migrate: (persisted, version) => {
16067
- const state = persisted ?? {};
16068
- if (version >= 1) return state;
16069
- const { viewMode, ...rest } = state;
16070
- return {
16071
- ...rest,
16072
- viewModes: viewMode ? { [FILES_PREFS_KEY]: viewMode } : {}
16073
- };
16074
- },
16075
- partialize: (state) => ({
16076
- documentFilters: state.documentFilters,
16077
- viewModes: state.viewModes,
16078
- rowHeight: state.rowHeight
16079
- })
16080
- }
16081
- )
16082
- );
16083
- function filesViewMode(state, prefsKey = FILES_PREFS_KEY, defaultViewMode = DEFAULT_VIEW_MODE) {
16084
- return state.viewModes[prefsKey] ?? defaultViewMode;
16085
- }
16086
- var useAiReviewStore = create()((set) => ({
16087
- open: false,
16088
- run: null,
16089
- setOpen: (open) => set({ open }),
16090
- setRun: (run) => set({ run }),
16091
- markFinished: (docIds) => set((state) => {
16092
- const run = state.run;
16093
- if (!run) return state;
16094
- const finished = new Set(run.finishedDocIds ?? []);
16095
- const added = docIds.filter((id) => run.docIds.includes(id) && !finished.has(id));
16096
- if (added.length === 0) return state;
16097
- return { run: { ...run, finishedDocIds: [...finished, ...added] } };
16098
- })
16099
- }));
16100
- var useFilesGridStates = create()(
16101
- persist(
16102
- (set) => ({
16103
- gridStates: {},
16104
- setGridState: (gridId, state) => set((current) => ({ gridStates: { ...current.gridStates, [gridId]: state } }))
16105
- }),
16106
- { name: "arbi_files_grids", storage: createJSONStorage(() => localStorage) }
16107
- )
16108
- );
16109
- var useFilesDialogs = create()((set) => ({
16110
- move: null,
16111
- openMove: (folder = null) => set({ move: { folder } }),
16112
- closeMove: () => set({ move: null }),
16113
- bulkTagsOpen: false,
16114
- setBulkTagsOpen: (bulkTagsOpen) => set({ bulkTagsOpen }),
16115
- deleteRequest: null,
16116
- requestDelete: (deleteRequest) => set({ deleteRequest }),
16117
- exportOpen: false,
16118
- setExportOpen: (exportOpen) => set({ exportOpen })
16119
- }));
16120
14944
  var GRID_GAP = 12;
16121
14945
  var SCROLL_PADDING_X = 32;
16122
14946
  var PAGE_ASPECT = 1.3;
@@ -17337,10 +16161,10 @@ function ConnectedContactCardForm({
17337
16161
  const [errors, setErrors] = useState({});
17338
16162
  const [serverError, setServerError] = useState(null);
17339
16163
  const [duplicateOf, setDuplicateOf] = useState(null);
17340
- const create4 = useCreateContact();
16164
+ const create2 = useCreateContact();
17341
16165
  const update = useUpdateContact();
17342
16166
  const link = useLinkContact();
17343
- const saving = create4.isPending || update.isPending || link.isPending;
16167
+ const saving = create2.isPending || update.isPending || link.isPending;
17344
16168
  const linked = !!contact?.email;
17345
16169
  const locked = !!contact && !contact.card;
17346
16170
  const set = (key, value) => setForm((f) => ({ ...f, [key]: value }));
@@ -17368,7 +16192,7 @@ function ConnectedContactCardForm({
17368
16192
  };
17369
16193
  if (invite && email) {
17370
16194
  if (contact) link.mutate({ contact, email, card }, { onSuccess: onInvited, onError });
17371
- else create4.mutate({ email, card, invite: true }, { onSuccess: onInvited, onError });
16195
+ else create2.mutate({ email, card, invite: true }, { onSuccess: onInvited, onError });
17372
16196
  return;
17373
16197
  }
17374
16198
  const onSuccess = () => {
@@ -17377,7 +16201,7 @@ function ConnectedContactCardForm({
17377
16201
  };
17378
16202
  if (contact?.external_id)
17379
16203
  update.mutate({ id: contact.external_id, card }, { onSuccess, onError });
17380
- else create4.mutate({ card, invite: false }, { onSuccess, onError });
16204
+ else create2.mutate({ card, invite: false }, { onSuccess, onError });
17381
16205
  };
17382
16206
  if (locked)
17383
16207
  return /* @__PURE__ */ jsxs("div", { className: "grid gap-3", "data-testid": "contact-card-locked", children: [
@@ -17898,7 +16722,7 @@ function ConnectedContactMenu({
17898
16722
  const updateUserSettings = useUpdateUserSettings();
17899
16723
  const deleteContact = useDeleteContact();
17900
16724
  const name = getUserDisplayName(peer);
17901
- const isAgent9 = peer.external_id.startsWith("agt-");
16725
+ const isAgent8 = peer.external_id.startsWith("agt-");
17902
16726
  const isMuted = useMemo(
17903
16727
  () => (userSettings?.muted_users || []).includes(peer.external_id),
17904
16728
  [userSettings, peer.external_id]
@@ -17973,7 +16797,7 @@ Your conversation is not deleted \u2014 you can add them again.`,
17973
16797
  },
17974
16798
  // An agent is not a contact you can remove — it belongs to your account, and is managed from
17975
16799
  // the agents panel.
17976
- ...!isAgent9 && contactId ? [
16800
+ ...!isAgent8 && contactId ? [
17977
16801
  {
17978
16802
  id: "remove",
17979
16803
  label: "Remove contact",
@@ -21244,7 +20068,7 @@ function BookingPagesPanel({ defaultTimeZone, className }) {
21244
20068
  var selectClass4 = "h-9 w-full rounded-md border border-input bg-background px-2 text-sm text-foreground shadow-sm";
21245
20069
  function CreateRoomForm({ zone, onDone }) {
21246
20070
  const { notify: notify18 } = useBlocksEnvironment();
21247
- const create4 = useCreateRoom();
20071
+ const create2 = useCreateRoom();
21248
20072
  const [name, setName] = useState("");
21249
20073
  const [type, setType] = useState("room");
21250
20074
  const [capacity, setCapacity] = useState("");
@@ -21264,7 +20088,7 @@ function CreateRoomForm({ zone, onDone }) {
21264
20088
  const cap = capacity.trim() ? Number(capacity) : null;
21265
20089
  if (cap !== null && (!Number.isInteger(cap) || cap < 1))
21266
20090
  return setError("Capacity must be a whole number");
21267
- create4.mutate(
20091
+ create2.mutate(
21268
20092
  {
21269
20093
  name: name.trim(),
21270
20094
  type,
@@ -21355,8 +20179,8 @@ function CreateRoomForm({ zone, onDone }) {
21355
20179
  error && /* @__PURE__ */ jsx("p", { role: "alert", className: "text-sm text-destructive", children: error }),
21356
20180
  /* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-2", children: [
21357
20181
  /* @__PURE__ */ jsx(Button, { type: "button", variant: "ghost", onClick: onDone, children: "Cancel" }),
21358
- /* @__PURE__ */ jsxs(Button, { type: "submit", disabled: create4.isPending, children: [
21359
- create4.isPending && /* @__PURE__ */ jsx(Loader2, { className: "mr-1 size-4 animate-spin" }),
20182
+ /* @__PURE__ */ jsxs(Button, { type: "submit", disabled: create2.isPending, children: [
20183
+ create2.isPending && /* @__PURE__ */ jsx(Loader2, { className: "mr-1 size-4 animate-spin" }),
21360
20184
  "Create"
21361
20185
  ] })
21362
20186
  ] })
@@ -24264,99 +23088,6 @@ function EmptyWorkspaceUpload({
24264
23088
  }
24265
23089
  );
24266
23090
  }
24267
- function ConnectedTagEntity({
24268
- tag,
24269
- size = "md",
24270
- className = "",
24271
- onClick,
24272
- showTooltip = true,
24273
- canEdit = false,
24274
- onEditClick
24275
- }) {
24276
- const { data: workspaceTags } = useTags();
24277
- const { data: members = [] } = useWorkspaceUsers();
24278
- const byId = (id) => id ? members.find((m) => m.user.external_id === id)?.user : void 0;
24279
- const freshTag = useMemo(() => {
24280
- if (!workspaceTags) return tag;
24281
- const found = workspaceTags.find((t) => t.external_id === tag.external_id);
24282
- return found || tag;
24283
- }, [workspaceTags, tag]);
24284
- const creator = byId(tag.created_by_ext_id) ?? null;
24285
- const updater = byId(tag.updated_by_ext_id) ?? null;
24286
- const Icon = getTagTypeIcon(tag.tag_type.type);
24287
- const tagColor = getEntityColor(tag.external_id, "medium");
24288
- const handleVisibilityToggle = () => {
24289
- if (canEdit && onEditClick) {
24290
- onEditClick();
24291
- }
24292
- };
24293
- const tooltipContent = showTooltip ? /* @__PURE__ */ jsxs(EntityTooltip, { children: [
24294
- /* @__PURE__ */ jsx(
24295
- EntityTooltipHeader,
24296
- {
24297
- lead: /* @__PURE__ */ jsx(
24298
- "span",
24299
- {
24300
- className: "inline-flex items-center justify-center rounded-md text-white p-1",
24301
- style: { backgroundColor: tagColor },
24302
- children: /* @__PURE__ */ jsx(Icon, { size: 16 })
24303
- }
24304
- ),
24305
- title: tag.name
24306
- }
24307
- ),
24308
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5 text-sm", children: [
24309
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
24310
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "Type:" }),
24311
- /* @__PURE__ */ jsx("span", { children: getTagTypeLabel(tag.tag_type.type) })
24312
- ] }),
24313
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
24314
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "Documents:" }),
24315
- /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: "h-5 min-w-[20px] justify-center", children: freshTag.doctag_count ?? 0 })
24316
- ] }),
24317
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
24318
- /* @__PURE__ */ jsx(
24319
- VisibilityToggle,
24320
- {
24321
- items: freshTag,
24322
- onToggle: handleVisibilityToggle,
24323
- disabled: !canEdit,
24324
- showLabel: false,
24325
- showTooltip: canEdit,
24326
- tooltipActive: "Click to edit",
24327
- tooltipInactive: "Click to edit"
24328
- }
24329
- ),
24330
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: freshTag.shared ? "Shared" : "Private" })
24331
- ] }),
24332
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
24333
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "Created:" }),
24334
- /* @__PURE__ */ jsx("span", { children: formatFriendlyDate(tag.created_at) }),
24335
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "by" }),
24336
- /* @__PURE__ */ jsx(UserAvatar, { user: creator ?? void 0 })
24337
- ] }),
24338
- tag.updated_at && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
24339
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "Updated:" }),
24340
- /* @__PURE__ */ jsx("span", { children: formatFriendlyDate(tag.updated_at) }),
24341
- updater && /* @__PURE__ */ jsxs(Fragment, { children: [
24342
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "by" }),
24343
- /* @__PURE__ */ jsx(UserAvatar, { user: updater })
24344
- ] })
24345
- ] })
24346
- ] })
24347
- ] }) : void 0;
24348
- return /* @__PURE__ */ jsx(
24349
- TagEntity,
24350
- {
24351
- tag: { ...tag, color: tagColor },
24352
- size,
24353
- className,
24354
- onClick,
24355
- showTooltip,
24356
- tooltipContent
24357
- }
24358
- );
24359
- }
24360
23091
  var CheckboxCellRenderer = memo(function CheckboxCellRenderer2({
24361
23092
  params,
24362
23093
  tagId,
@@ -24640,7 +23371,7 @@ function createDocumentColumns({
24640
23371
  if (!params.data) return null;
24641
23372
  const context = params.context;
24642
23373
  return /* @__PURE__ */ jsx(
24643
- StatusCell2,
23374
+ StatusCell,
24644
23375
  {
24645
23376
  doc: params.data,
24646
23377
  onStatusClick,
@@ -27048,7 +25779,7 @@ function useFieldWrites({
27048
25779
  const createTag = useCreateTag();
27049
25780
  const updateTag = useUpdateTag();
27050
25781
  const deleteTag = useDeleteTag();
27051
- const create4 = useCallback(
25782
+ const create2 = useCallback(
27052
25783
  async (data) => {
27053
25784
  let created;
27054
25785
  try {
@@ -27154,7 +25885,7 @@ ${nested.length} nested ${nested.length === 1 ? "field moves" : "fields move"} t
27154
25885
  },
27155
25886
  [confirm, notify18, deleteTag, tags, workspaceTags, nouns]
27156
25887
  );
27157
- return { create: create4, update, rename, toggleShared, removeMany };
25888
+ return { create: create2, update, rename, toggleShared, removeMany };
27158
25889
  }
27159
25890
  var ownFieldsExport = (props) => /* @__PURE__ */ jsx(ConnectedExportDialog, { ...props, entityType: "TAG", testId: "export-fields-modal" });
27160
25891
  function ConnectedFieldsEditor({
@@ -27810,228 +26541,6 @@ function ConnectedBulkTagEditor({
27810
26541
  )
27811
26542
  ] });
27812
26543
  }
27813
- function FolderPicker({
27814
- documents,
27815
- value,
27816
- onSelect
27817
- }) {
27818
- const folders = useDocumentFolders(documents, value);
27819
- return /* @__PURE__ */ jsx(FolderCommandList, { folders, value, onSelect, showRemove: !!value });
27820
- }
27821
- function RelatedDocuments({
27822
- doc,
27823
- related,
27824
- onOpen,
27825
- onDelete,
27826
- onCompare
27827
- }) {
27828
- const viewingDocumentId = useOpenViewerDocumentId();
27829
- return /* @__PURE__ */ jsx(
27830
- RelatedDocumentsCell,
27831
- {
27832
- currentDoc: doc,
27833
- related,
27834
- viewingDocumentId,
27835
- onDocumentClick: (id) => onOpen?.(id),
27836
- onDelete: (other) => onDelete?.(other.external_id),
27837
- onCompare
27838
- }
27839
- );
27840
- }
27841
- function DocTagAttribution({ doctag }) {
27842
- const memberById = useMemberLookup();
27843
- const creator = memberById(doctag.created_by_ext_id);
27844
- const updater = doctag.updated_by_ext_id && doctag.updated_by_ext_id !== doctag.created_by_ext_id ? memberById(doctag.updated_by_ext_id) : void 0;
27845
- const lastUser = updater || creator;
27846
- if (!lastUser) return null;
27847
- const lines = [
27848
- creator && `Created ${formatFriendlyDate(doctag.created_at)} by ${creator.given_name || creator.email}`,
27849
- updater && `Updated ${formatFriendlyDate(doctag.updated_at)} by ${updater.given_name || updater.email}`
27850
- ].filter((line) => !!line);
27851
- return /* @__PURE__ */ jsx(
27852
- FieldAttribution,
27853
- {
27854
- avatar: /* @__PURE__ */ jsx(DocumentUser, { user: lastUser, tooltip: false }),
27855
- date: formatFriendlyDate(updater ? doctag.updated_at : doctag.created_at),
27856
- lines
27857
- }
27858
- );
27859
- }
27860
- function LabelsCombobox({
27861
- labelTags,
27862
- appliedTagIds,
27863
- onToggle,
27864
- onCreateAndApply
27865
- }) {
27866
- const options2 = useMemo(
27867
- () => labelTags.map((t) => ({
27868
- id: t.external_id,
27869
- name: t.name,
27870
- color: getEntityColor(t.external_id, "medium")
27871
- })),
27872
- [labelTags]
27873
- );
27874
- const handleCreate = (name) => {
27875
- const trimmed = name.trim();
27876
- if (!trimmed) return;
27877
- const existing = labelTags.find((t) => t.name.toLowerCase() === trimmed.toLowerCase());
27878
- if (!existing) onCreateAndApply?.(trimmed);
27879
- else if (!appliedTagIds.has(existing.external_id)) onToggle(existing);
27880
- };
27881
- return /* @__PURE__ */ jsx(
27882
- FieldLabelsSelect,
27883
- {
27884
- options: options2,
27885
- appliedIds: appliedTagIds,
27886
- onToggle: (id) => {
27887
- const tag = labelTags.find((t) => t.external_id === id);
27888
- if (tag) onToggle(tag);
27889
- },
27890
- onCreate: onCreateAndApply ? handleCreate : void 0
27891
- }
27892
- );
27893
- }
27894
- var METADATA_FIELDS = {
27895
- title: (doc) => getDocumentTitle(doc),
27896
- doc_nature: (doc) => doc.doc_metadata?.doc_nature || "",
27897
- doc_author: (doc) => doc.doc_metadata?.doc_author || "",
27898
- doc_subject: (doc) => doc.doc_metadata?.doc_subject || "",
27899
- // As the table shows it: with the time when the value has one (emails).
27900
- doc_date: (doc) => formatDocDate(getDocumentDate(doc))
27901
- };
27902
- var INPUT_CLASS = "text-sm bg-muted/40 focus:bg-background transition-colors";
27903
- var READ_ONLY_FIELDS = {
27904
- file_name: (doc) => /* @__PURE__ */ jsx(FieldValue, { tone: "strong", children: doc.file_name || "N/A" }),
27905
- status: (doc) => /* @__PURE__ */ jsx(FieldValue, { tone: "muted", children: doc.status || "N/A" }),
27906
- n_pages: (doc) => /* @__PURE__ */ jsx(FieldValue, { tone: "muted", children: doc.n_pages || "N/A" }),
27907
- created_at: (doc) => /* @__PURE__ */ jsx(FieldValue, { tone: "muted", children: doc.created_at ? formatFriendlyDate(doc.created_at) : "N/A" }),
27908
- updated_at: (doc) => /* @__PURE__ */ jsx(FieldValue, { tone: "muted", children: doc.updated_at ? formatFriendlyDate(doc.updated_at) : "N/A" }),
27909
- file_type: (doc) => /* @__PURE__ */ jsx(FieldValue, { tone: "muted", children: friendlyFileType(doc.file_type, doc.file_name) }),
27910
- file_size: (doc) => /* @__PURE__ */ jsx(FieldValue, { tone: "muted", children: doc.file_size ? `${Math.round(doc.file_size / 1024)} KB` : "N/A" }),
27911
- doc_id: (doc) => /* @__PURE__ */ jsx(FieldValue, { tone: "muted", isMono: true, children: doc.external_id || "N/A" }),
27912
- content_hash: (doc) => /* @__PURE__ */ jsx(FieldValue, { tone: "muted", isMono: true, isTruncated: true, children: doc.content_hash || "N/A" })
27913
- };
27914
- function documentFieldContent(options2) {
27915
- const { columnId, doc, canEdit, workspaceTags, getColumnLabel, getColumnIcon } = options2;
27916
- const Icon = getColumnIcon(columnId);
27917
- const standard = (children) => ({
27918
- label: getColumnLabel(columnId),
27919
- icon: Icon ? /* @__PURE__ */ jsx(Icon, { size: 14 }) : void 0,
27920
- children
27921
- });
27922
- const metadata = METADATA_FIELDS[columnId];
27923
- if (metadata) {
27924
- const editable = options2.isColumnEditable(columnId) && canEdit;
27925
- return standard(
27926
- editable ? /* @__PURE__ */ jsx(
27927
- DebouncedInput,
27928
- {
27929
- value: metadata(doc),
27930
- onChange: (value2) => options2.onUpdateDocumentField(columnId, value2),
27931
- multiline: true,
27932
- placeholder: `Add ${getColumnLabel(columnId).toLowerCase()}\u2026`,
27933
- className: INPUT_CLASS
27934
- }
27935
- ) : /* @__PURE__ */ jsx(FieldValue, { children: metadata(doc) || "N/A" })
27936
- );
27937
- }
27938
- const readOnly = READ_ONLY_FIELDS[columnId];
27939
- if (readOnly) return standard(readOnly(doc));
27940
- if (columnId === "created_by") return standard(/* @__PURE__ */ jsx(DocumentUser, { user: options2.creator }));
27941
- if (columnId === "folder") {
27942
- return standard(
27943
- canEdit ? /* @__PURE__ */ jsx(
27944
- FieldFolderSelect,
27945
- {
27946
- folder: doc.folder,
27947
- picker: /* @__PURE__ */ jsx(
27948
- FolderPicker,
27949
- {
27950
- documents: options2.allDocuments ?? [],
27951
- value: doc.folder,
27952
- onSelect: (folder) => options2.onUpdateDocumentField("folder", folder)
27953
- }
27954
- )
27955
- }
27956
- ) : /* @__PURE__ */ jsx(FieldFolderValue, { folder: doc.folder })
27957
- );
27958
- }
27959
- if (columnId === "related") {
27960
- const related = options2.relatedDocs;
27961
- if (!related) return null;
27962
- return standard(
27963
- /* @__PURE__ */ jsx(
27964
- RelatedDocuments,
27965
- {
27966
- doc,
27967
- related,
27968
- onOpen: options2.onOpenDocument,
27969
- onDelete: options2.onDeleteDocument,
27970
- onCompare: options2.onCompareDocuments
27971
- }
27972
- )
27973
- );
27974
- }
27975
- if (columnId === "all_tags") {
27976
- const labelTags = workspaceTags.filter(isLabelTag);
27977
- const appliedIds = new Set(
27978
- (doc.doctags ?? []).filter((dt) => labelTags.some((t) => t.external_id === dt.tag_ext_id)).map((dt) => dt.tag_ext_id)
27979
- );
27980
- return standard(
27981
- /* @__PURE__ */ jsx(
27982
- LabelsCombobox,
27983
- {
27984
- labelTags,
27985
- appliedTagIds: appliedIds,
27986
- onToggle: (tag2) => options2.onUpdateTagValue(tag2, !appliedIds.has(tag2.external_id)),
27987
- onCreateAndApply: options2.onCreateAndApplyLabel
27988
- }
27989
- )
27990
- );
27991
- }
27992
- const tag = workspaceTags.find((t) => t.external_id === columnId);
27993
- if (!tag || !isAnnotationTag(tag)) return null;
27994
- const doctag = doc.doctags?.find((dt) => dt.tag_ext_id === tag.external_id);
27995
- let value;
27996
- if (tag.tag_type.type === "select") {
27997
- value = /* @__PURE__ */ jsx(
27998
- FieldNativeSelect,
27999
- {
28000
- value: doctag?.note || "",
28001
- options: tag.tag_type.options,
28002
- onChange: (next) => options2.onUpdateTagValue(tag, next),
28003
- ariaLabel: tag.name
28004
- }
28005
- );
28006
- } else if (tag.tag_type.type === "number") {
28007
- value = /* @__PURE__ */ jsx(
28008
- DebouncedInput,
28009
- {
28010
- type: "number",
28011
- value: doctag?.note || "",
28012
- onChange: (next) => options2.onUpdateTagValue(tag, next),
28013
- placeholder: `Add ${tag.name.toLowerCase()}\u2026`,
28014
- className: INPUT_CLASS
28015
- }
28016
- );
28017
- } else {
28018
- value = /* @__PURE__ */ jsx(
28019
- Textarea,
28020
- {
28021
- value: doctag?.note || "",
28022
- onChange: (e) => options2.onUpdateTagWithCitations(tag, e.target.value, doctag?.citations ?? null),
28023
- placeholder: "Add a note...",
28024
- rows: 2,
28025
- className: INPUT_CLASS
28026
- }
28027
- );
28028
- }
28029
- return {
28030
- label: tag.name,
28031
- tag,
28032
- children: doctag ? /* @__PURE__ */ jsx(FieldWithAttribution, { attribution: /* @__PURE__ */ jsx(DocTagAttribution, { doctag }), children: value }) : value
28033
- };
28034
- }
28035
26544
 
28036
26545
  // src/connection/files/views/tableViews.ts
28037
26546
  var belongsTo = (view, workspaceId, table) => view.workspace === workspaceId && (view.table ?? null) === table;
@@ -28479,10 +26988,17 @@ var TABLET_VISIBLE_COLUMNS = ["title", "doc_subject"];
28479
26988
  var TABLET_TABLE_BELOW = 860;
28480
26989
  var TABLET_VIEWPORT_BELOW = 1100;
28481
26990
  var NO_CONVERSATION_DOCUMENTS = [];
26991
+ var DocumentReviewCard = lazy(
26992
+ () => import('../DocumentReviewCard-Y67FFRPC.js').then((module) => ({ default: module.DocumentReviewCard }))
26993
+ );
26994
+ function defaultReviewCard(props) {
26995
+ return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(LoadingIndicator, { message: "Loading document viewer..." }), children: /* @__PURE__ */ jsx(DocumentReviewCard, { ...props }, `navigator-${props.currentDocument.external_id}`) });
26996
+ }
28482
26997
  function ConnectedFilesPage({
28483
26998
  isModal = false,
28484
26999
  onClose,
28485
27000
  onToggleDocument,
27001
+ onCompareDocuments,
28486
27002
  onUpload,
28487
27003
  onStatusClick,
28488
27004
  onOpenTags,
@@ -28495,7 +27011,7 @@ function ConnectedFilesPage({
28495
27011
  workspaceIcon,
28496
27012
  externalSearchQuery = "",
28497
27013
  renderSearch,
28498
- renderReviewCard,
27014
+ renderReviewCard = defaultReviewCard,
28499
27015
  renderFieldsManager,
28500
27016
  bulkTagBreadcrumb,
28501
27017
  dialogs,
@@ -29048,6 +27564,7 @@ function ConnectedFilesPage({
29048
27564
  gridApi: gridApiRef.current,
29049
27565
  onNavigate: navigatorOnNavigate,
29050
27566
  onOpenDocumentViewer: onToggleDocument,
27567
+ onCompareDocuments,
29051
27568
  onDeleteDocument: requestDeleteDocument,
29052
27569
  isDocumentViewerEnabled,
29053
27570
  onReorderColumns: (ids) => handleReorderColumns(ids, gridApiRef.current ?? void 0),
@@ -31501,7 +30018,7 @@ function MeetingAvatar() {
31501
30018
  );
31502
30019
  }
31503
30020
  var isGroupChat = (chat) => !!chat && chat.kind !== "direct";
31504
- var isAgent7 = (user) => chats.isAgentExtId(user.external_id);
30021
+ var isAgent6 = (user) => chats.isAgentExtId(user.external_id);
31505
30022
  function ConnectedMessenger({
31506
30023
  activeId,
31507
30024
  onOpen,
@@ -31538,7 +30055,7 @@ function ConnectedMessenger({
31538
30055
  // Presence rides on the row's avatar.
31539
30056
  avatar(c.peer)
31540
30057
  ),
31541
- badge: !isGroupChat(c.chat) && isAgent7(c.peer) ? /* @__PURE__ */ jsx(AgentBadge, {}) : void 0
30058
+ badge: !isGroupChat(c.chat) && isAgent6(c.peer) ? /* @__PURE__ */ jsx(AgentBadge, {}) : void 0
31542
30059
  }));
31543
30060
  const all = [...decorated, ...extraRows];
31544
30061
  if (!filters?.size) return all;
@@ -31546,7 +30063,7 @@ function ConnectedMessenger({
31546
30063
  unread: (row2) => row2.unreadCount > 0,
31547
30064
  // A person is muted, not a group that happens to list them first.
31548
30065
  muted: (row2) => !isGroupChat(row2.chat) && mutedUsers.has(row2.peer.external_id),
31549
- agents: (row2) => !isGroupChat(row2.chat) && isAgent7(row2.peer),
30066
+ agents: (row2) => !isGroupChat(row2.chat) && isAgent6(row2.peer),
31550
30067
  meetings: (row2) => row2.chat?.kind === "meeting",
31551
30068
  ...rowFilters
31552
30069
  };
@@ -31677,12 +30194,12 @@ function ConnectedMessenger({
31677
30194
  {
31678
30195
  avatar: activePeer ? avatar(activePeer) : void 0,
31679
30196
  name: activePeer ? userDisplayName(activePeer) : "Conversation",
31680
- badge: activePeer && isAgent7(activePeer) ? /* @__PURE__ */ jsx(AgentBadge, {}) : void 0,
30197
+ badge: activePeer && isAgent6(activePeer) ? /* @__PURE__ */ jsx(AgentBadge, {}) : void 0,
31681
30198
  presence: presence ? /* @__PURE__ */ jsx(PresenceLabel, { status: presence }) : void 0,
31682
30199
  email: activePeer?.email,
31683
30200
  menu: activePeer ? directActions?.(activePeer, {
31684
30201
  // A personal agent never carries over into a group, and a self-chat has no peer.
31685
- addPeople: isAgent7(activePeer) || activeIsSelf || !PeoplePicker ? void 0 : () => setPicker({ mode: "from-direct", fixed: [activePeer] })
30202
+ addPeople: isAgent6(activePeer) || activeIsSelf || !PeoplePicker ? void 0 : () => setPicker({ mode: "from-direct", fixed: [activePeer] })
31686
30203
  }) : void 0
31687
30204
  }
31688
30205
  ),
@@ -33981,7 +32498,7 @@ function useWorkflowTasks() {
33981
32498
  () => Object.fromEntries(documents.map((d) => [d.external_id, getDocumentTitle(d, d.external_id)])),
33982
32499
  [documents]
33983
32500
  );
33984
- const create4 = useCallback(
32501
+ const create2 = useCallback(
33985
32502
  async (ctx, forceWorkflow = false) => {
33986
32503
  const request = taskComposerToCreateRequest(
33987
32504
  { ...ctx, documentTitles, plan: ctx.plan ?? null },
@@ -34048,7 +32565,7 @@ function useWorkflowTasks() {
34048
32565
  [activeWorkspaceId, documentTitles, grantAgentAccess, updateWorkflowMutation]
34049
32566
  );
34050
32567
  return {
34051
- create: create4,
32568
+ create: create2,
34052
32569
  update,
34053
32570
  updateWorkflow,
34054
32571
  isPending: createWork.isPending || startQuery.isPending || createWorkflow.isPending || updateConversation.isPending || updateWorkflowMutation.isPending
@@ -35217,7 +33734,7 @@ function useThreadLabels(canEditShared) {
35217
33734
  if (failed)
35218
33735
  notify18(`Could not update labels on ${failed} thread${failed === 1 ? "" : "s"}.`, "error");
35219
33736
  };
35220
- const create4 = async (rows, name) => {
33737
+ const create2 = async (rows, name) => {
35221
33738
  if (!canEdit(rows) || !name.trim()) return;
35222
33739
  try {
35223
33740
  const existing = labels.find((tag) => tag.name.toLowerCase() === name.trim().toLowerCase());
@@ -35239,7 +33756,7 @@ function useThreadLabels(canEditShared) {
35239
33756
  options: options2,
35240
33757
  appliedIds: new Set(row2.label_ext_ids ?? []),
35241
33758
  onToggle: (id) => void apply([row2], id, Boolean(row2.label_ext_ids?.includes(id))),
35242
- onCreate: (name) => void create4([row2], name),
33759
+ onCreate: (name) => void create2([row2], name),
35243
33760
  rowHeight: 40
35244
33761
  }
35245
33762
  ),
@@ -35261,7 +33778,7 @@ function useThreadLabels(canEditShared) {
35261
33778
  disabled: !canEdit(rows) || update.isPending || createTag.isPending,
35262
33779
  isCompact,
35263
33780
  onToggle: (id) => void apply(rows, id, all.has(id)),
35264
- onCreate: (name) => void create4(rows, name)
33781
+ onCreate: (name) => void create2(rows, name)
35265
33782
  }
35266
33783
  );
35267
33784
  }
@@ -35749,7 +34266,7 @@ function ConnectedTaskComposer({
35749
34266
  const planWork = usePlanWork();
35750
34267
  const { tasks: allTasks } = useWorkItems();
35751
34268
  const { data: documents = [] } = useDocuments();
35752
- const { create: create4, update, updateWorkflow, isPending } = useWorkflowTasks();
34269
+ const { create: create2, update, updateWorkflow, isPending } = useWorkflowTasks();
35753
34270
  const scopeSource = useConnectedWorkflowScopeSource();
35754
34271
  const activeWorkspaceId = useArbiSessionState((s) => s.workspaceId);
35755
34272
  const activeWorkspace = useMemo(
@@ -35879,7 +34396,7 @@ function ConnectedTaskComposer({
35879
34396
  await update(task, ctx);
35880
34397
  notify18(`Updated \u201C${task.title ?? "task"}\u201D`, "success");
35881
34398
  } else {
35882
- const created = await create4(ctx, saveOnly && !options2?.runOnce);
34399
+ const created = await create2(ctx, saveOnly && !options2?.runOnce);
35883
34400
  if (created.kind === "workflow") {
35884
34401
  notify18(`Saved \u201C${created.workflow.name}\u201D.`, "success");
35885
34402
  openWorkflow?.();
@@ -43766,6 +42283,6 @@ function useContextualHints() {
43766
42283
  };
43767
42284
  }
43768
42285
 
43769
- export { AddAddonDialog, AddFromAccountsButton, AgentBarShell, AgentControlBar, AgentSteps, AnswerTable, AskAgainContext, BACKFILL_OPTIONS, BUILTIN_GLOBAL_DIALOGS, BULK_REPROCESS_LIMIT, BillingProjectEntity, CaptureBar, ChangePlanDialog, ChatAttachmentList, ConnectedAccountAccessBadge, ConnectedAccountCluster, ConnectedAccountSettings, ConnectedAccountsImport, ConnectedAddContacts, ConnectedAgentChat, ConnectedAgentChatPanel, ConnectedAgentConfigForm, ConnectedAgentCreator, ConnectedAiReview, ConnectedAppRuntime, ConnectedAppShell, ConnectedAppsSettings, ConnectedAuthorizeAgent, ConnectedBranchControls, ConnectedBulkTagEditor, ConnectedCalendar, ConnectedChatThread, ConnectedCitationRenderer, ConnectedCompactConversation, ConnectedConfigForm, ConnectedContactCardForm, ConnectedContactMenu, ConnectedContactToggle, ConnectedContactsDirectory, ConnectedConversation, ConnectedConversationDocumentPicker, ConnectedConversationEmpty, ConnectedConversationStart, ConnectedDangerZone, ConnectedDatabasesPage, ConnectedDeploymentStorage, ConnectedDeveloperConfig, ConnectedDocumentProcessingPanel, ConnectedDriveSyncDialog, ConnectedExportDialog, ConnectedExportPanel, ConnectedFactsPage, ConnectedFieldsEditor, ConnectedFieldsManager, ConnectedFilesBulkActions, ConnectedFilesExplorer, ConnectedFilesPage, ConnectedFilterDropdown, ConnectedForgotPassword, ConnectedGlobalDialogs, ConnectedGrantWorkspaceAccessDialog, ConnectedGridView, ConnectedGroupMembers, ConnectedIdentityVerification, ConnectedLoginPage, ConnectedLogoutDialog, ConnectedMailAccounts, ConnectedMailComposer, ConnectedMailInviteCard, ConnectedMailMessage, ConnectedMailSettings, ConnectedMailSetup, ConnectedMailbox, ConnectedMailboxSyncDialog, ConnectedMessage, ConnectedMessageArea, ConnectedMessageList, ConnectedMessenger, ConnectedModelSelector, ConnectedMoveToFolder, ConnectedNewThreadDialog, ConnectedNotificationCenter, ConnectedNotificationPreferences, ConnectedOAuthConsentPage, ConnectedPanelHost, ConnectedPasswordChangeDialog, ConnectedPendingSyncDialog, ConnectedPeopleMultiSelect, ConnectedPremiumModels, ConnectedPrivacySettings, ConnectedProfileCard, ConnectedProjectEntity, ConnectedProjectPage, ConnectedProjectSelector, ConnectedProjectStorage, ConnectedProjectsPanel, ConnectedPublicBooking, ConnectedQuotaDialog, ConnectedRecentlyDeletedButton, ConnectedRecoveryKeyDialog, ConnectedReportProblem, ConnectedRequestWorkspaceAccess, ConnectedRequireVerified, ConnectedSearchPage, ConnectedSecuritySection, ConnectedSessionsRow, ConnectedSettingsPage, ConnectedShareDialog, ConnectedSharePointAdminConsentPage, ConnectedSharedFilesPage, ConnectedSignatureVerifyPage, ConnectedSkillUpload, ConnectedSkillsLibrary, ConnectedSsoCallback, ConnectedStorageProjectCard, ConnectedStorageSettings, ConnectedTagEditorDialog, ConnectedTagEntity, ConnectedTagForm, ConnectedTagTable, ConnectedTagsPage, ConnectedTaskAccessRequest, ConnectedTaskActivityDialog, ConnectedTaskComposer, ConnectedTaskStartDialog, ConnectedThreadFollow, ConnectedThreadLauncher, ConnectedThreadTabs, ConnectedThreadTaskBar, ConnectedThreadsPage, ConnectedThreadsPreview, ConnectedTransferWatcher, ConnectedUpcomingEvents, ConnectedUpload, ConnectedUploadDropzone, ConnectedUserEntity, ConnectedWelcomeDialog, ConnectedWorkflowHistory, ConnectedWorkflowRunner, ConnectedWorkflowStart, ConnectedWorkspaceActivity, ConnectedWorkspaceDashboard, ConnectedWorkspaceEntity, ConnectedWorkspaceFormModal, ConnectedWorkspaceList, ConnectedWorkspaceMembers, ConnectedWorkspaceNotificationMenu, ConnectedWorkspaceSettings, ConnectedWorkspaceTrash, ConversationAlert, ConversationComposer2 as ConversationComposer, ConversationEntity, ConversationSendButton, ConversationStatusCell, DEFAULT_CONNECTED_SEARCH_PAGE_LABELS, DEFAULT_CONNECTED_SKILL_UPLOAD_LABELS, DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS, DEFAULT_OAUTH_PERMISSIONS, DEFAULT_PROJECTS_LIST_LABELS, DEFAULT_PROJECT_DETAILS_LABELS, DEFAULT_PROJECT_DETAIL_FIELDS, DEFAULT_PROJECT_LIST_COLUMNS, DEFAULT_PROJECT_PAGE_LABELS, DEFAULT_SEARCH_FIELDS, DEFAULT_SEARCH_ROW_LABELS, DEFAULT_SETTINGS_SECTIONS, DEFAULT_TIMELINE_LABEL_WIDTH, DEFAULT_WORKSPACE_LIST_LABELS, DeveloperFooter, DocumentFolderCell, DocumentLabelsCell, DocumentNameCell, DocumentSharedCell, DocumentStatusGlyph, DocumentSyncGlyph, DocumentUser, DocumentsFilterBarActions, DocumentsUploadButton, EmptyWorkspaceUpload, FACTS_GRID_ID, FILES_PREFS_KEY, FileTooltipContent, ImportVcfButton, ImportVcfSummary, InvoicesModal, LOOK_AGAIN_LABEL, MessageDetailsModal, MessageLiveSeconds, MicButton, NewProjectFlow, NotificationCenter, NotificationEvent, PENDING_LOOKUP_MS, PENDING_RECOVERY_KEY, PENDING_TASK_MESSAGE, PREMIUM_TIER_TAG, PROJECTS_BASE_TAB_ID, PROMPT_BINDINGS, PersistedGridView, ProgressiveLoadingChip, ProjectDetail, ProjectUsageContent, ProjectsTable, REFERRAL_OFFER, RecoveryKeyDownload, RelatedDocumentsCell, ReportProblemDialog, RunStatsBadges, RunningSubagents, SEARCH_FIELD_OPTIONS, SETTINGS_SECTION_IDS, STANDARD_TIER_TAG, SessionStatusIcon, SharedProjects, SourceChips, SsoResendVerificationButton, StatusCell2 as StatusCell, StorageBreakdown, StorageItemsTable, StorageTiers, StreamedArtifact, TILE_DEFAULT, TILE_MAX, TILE_MIN, ThreadSwitcher, UserAvatar, ViewSelector, WORKSPACES_TAB_ID, WorkflowLaunchHost, WorkflowRunStatusCell, WorkflowRunThread, WorkflowStepMessage, accountSettingsSection, appearanceSettingsSection, backUpOnSignup, bookingCancelLink, buildNotificationCenterItems, buildProjectSummaries, chatSettingsSection, closeAccessRequestReview, connectedAppsSettingsSection, connectionSettingsSection, countNotificationTypes, createDocumentColumns, createEventCall, createNotificationTargetOpener, createTagColumn, deduplicateByContentHash, defaultHost, describePlan, distinctPeers, documentFamilyMeta, documentFieldContent, filesViewMode, filterNotificationCenterItems, formatStorageGb, groupFallbackName, identifyOAuthClient, isActiveDocumentStatus, joinEventMeeting, loadEventWebinar, mailSettingsSection, openMeetingLink, openPendingSyncDialog, openSsoPopup, organisationSettingsSection, parseArbiCallUrl, parseOAuthConsentRequest, parseQuotaError, parseTypedSkill, primaryProjectWorkspace, privacySettingsSection, renderConnectedUser, renderSessionStatusIcon, requestProjectBillingFocus, resolveAttendeeUsers, resolveAttendeeUsersRemote, resolveCallPeers, resolveCallPeersRemote, resolveLaunchInputs, resolveMailbox, resolveSsoName, reviewAccessRequest, reviewProgress, shareEventCall, startMenuItem, storageSettingsSection, suppliedKinds, threadStateOf, toWorkspaceSummary, transferOutcome, updateEventWebinarRoles, usageSettingsSection, useAccessRequestUnderReview, useAddFromUrls, useAiReviewLiveUpdates, useAiReviewStore, useAppShell, useAuthPages, useAutoRefreshPendingProjects, useBatchCompleteToasts, useChatMessageToasts, useConnectedAgentManagement, useConnectedCalendarCalls, useConnectedNotificationBell, useConnectedShellWorkspaces, useConnectedThreadActivity, useConnectedWorkspaceList, useConnectedWorkspaceSettings, useContextualHints, useDocumentBulkActions, useDocumentFilters, useDocumentFolders, useDocumentGridSync, useDocumentNavigation, useDocumentTable, useExportStore, useFilesDialogs, useFilesGridStates, useFilesPrefs, useFilesStore, useHasAccountsImport, useLaunchWorkflow, useMemberLookup, useMessengerRows, useModelPicker, useNotificationBellEntry, useNotificationToasts, useOpenBillingPortal, useOpenChunk, useOpenNotificationTarget, useOpenWorkspaceActivityTarget, useOpenWorkspaceIcon, usePendingFolders, usePendingTaskThread, useProjectBillingFocus, useProjectSummaries, useProjectSummary, useReferralReward, useRenderTaskPerson, useReportProblem, useResolvedDocStatus, useSessionPanelMode, useSessionSidebar, useSkillsEnabled, useSlashItems, useSlashSkillWorkflows, useSsoSignIn, useStartRequestedDraft, useTableViews, useTaskPeople, useTaskStart, useThreadLabels, useThreadTabs, useWorkflowDefinitions, useWorkflowLaunch, useWorkflowTasks, useWorkflowsPageState, useWorkspaceDocTitles, viewsOfTable, webinarRolesByUser, windowLabel, withMissingTableViews, withTableView, withoutTableView, workflowRunView };
42286
+ export { AddAddonDialog, AddFromAccountsButton, AgentBarShell, AgentControlBar, AgentSteps, AnswerTable, AskAgainContext, BACKFILL_OPTIONS, BUILTIN_GLOBAL_DIALOGS, BULK_REPROCESS_LIMIT, BillingProjectEntity, CaptureBar, ChangePlanDialog, ChatAttachmentList, ConnectedAccountAccessBadge, ConnectedAccountCluster, ConnectedAccountSettings, ConnectedAccountsImport, ConnectedAddContacts, ConnectedAgentChat, ConnectedAgentChatPanel, ConnectedAgentConfigForm, ConnectedAgentCreator, ConnectedAiReview, ConnectedAppRuntime, ConnectedAppShell, ConnectedAppsSettings, ConnectedAuthorizeAgent, ConnectedBranchControls, ConnectedBulkTagEditor, ConnectedCalendar, ConnectedChatThread, ConnectedCitationRenderer, ConnectedCompactConversation, ConnectedConfigForm, ConnectedContactCardForm, ConnectedContactMenu, ConnectedContactToggle, ConnectedContactsDirectory, ConnectedConversation, ConnectedConversationDocumentPicker, ConnectedConversationEmpty, ConnectedConversationStart, ConnectedDangerZone, ConnectedDatabasesPage, ConnectedDeploymentStorage, ConnectedDeveloperConfig, ConnectedDocumentProcessingPanel, ConnectedDriveSyncDialog, ConnectedExportDialog, ConnectedExportPanel, ConnectedFactsPage, ConnectedFieldsEditor, ConnectedFieldsManager, ConnectedFilesBulkActions, ConnectedFilesExplorer, ConnectedFilesPage, ConnectedFilterDropdown, ConnectedForgotPassword, ConnectedGlobalDialogs, ConnectedGrantWorkspaceAccessDialog, ConnectedGridView, ConnectedGroupMembers, ConnectedIdentityVerification, ConnectedLoginPage, ConnectedLogoutDialog, ConnectedMailAccounts, ConnectedMailComposer, ConnectedMailInviteCard, ConnectedMailMessage, ConnectedMailSettings, ConnectedMailSetup, ConnectedMailbox, ConnectedMailboxSyncDialog, ConnectedMessage, ConnectedMessageArea, ConnectedMessageList, ConnectedMessenger, ConnectedModelSelector, ConnectedMoveToFolder, ConnectedNewThreadDialog, ConnectedNotificationCenter, ConnectedNotificationPreferences, ConnectedOAuthConsentPage, ConnectedPanelHost, ConnectedPasswordChangeDialog, ConnectedPeopleMultiSelect, ConnectedPremiumModels, ConnectedPrivacySettings, ConnectedProfileCard, ConnectedProjectEntity, ConnectedProjectPage, ConnectedProjectSelector, ConnectedProjectStorage, ConnectedProjectsPanel, ConnectedPublicBooking, ConnectedQuotaDialog, ConnectedRecentlyDeletedButton, ConnectedRecoveryKeyDialog, ConnectedReportProblem, ConnectedRequestWorkspaceAccess, ConnectedRequireVerified, ConnectedSearchPage, ConnectedSecuritySection, ConnectedSessionsRow, ConnectedSettingsPage, ConnectedShareDialog, ConnectedSharePointAdminConsentPage, ConnectedSharedFilesPage, ConnectedSignatureVerifyPage, ConnectedSkillUpload, ConnectedSkillsLibrary, ConnectedSsoCallback, ConnectedStorageProjectCard, ConnectedStorageSettings, ConnectedTagEditorDialog, ConnectedTagForm, ConnectedTagTable, ConnectedTagsPage, ConnectedTaskAccessRequest, ConnectedTaskActivityDialog, ConnectedTaskComposer, ConnectedTaskStartDialog, ConnectedThreadFollow, ConnectedThreadLauncher, ConnectedThreadTabs, ConnectedThreadTaskBar, ConnectedThreadsPage, ConnectedThreadsPreview, ConnectedTransferWatcher, ConnectedUpcomingEvents, ConnectedUpload, ConnectedUploadDropzone, ConnectedUserEntity, ConnectedWelcomeDialog, ConnectedWorkflowHistory, ConnectedWorkflowRunner, ConnectedWorkflowStart, ConnectedWorkspaceActivity, ConnectedWorkspaceDashboard, ConnectedWorkspaceEntity, ConnectedWorkspaceFormModal, ConnectedWorkspaceList, ConnectedWorkspaceMembers, ConnectedWorkspaceNotificationMenu, ConnectedWorkspaceSettings, ConnectedWorkspaceTrash, ConversationAlert, ConversationComposer2 as ConversationComposer, ConversationEntity, ConversationSendButton, ConversationStatusCell, DEFAULT_CONNECTED_SEARCH_PAGE_LABELS, DEFAULT_CONNECTED_SKILL_UPLOAD_LABELS, DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS, DEFAULT_OAUTH_PERMISSIONS, DEFAULT_PROJECTS_LIST_LABELS, DEFAULT_PROJECT_DETAILS_LABELS, DEFAULT_PROJECT_DETAIL_FIELDS, DEFAULT_PROJECT_LIST_COLUMNS, DEFAULT_PROJECT_PAGE_LABELS, DEFAULT_SEARCH_FIELDS, DEFAULT_SEARCH_ROW_LABELS, DEFAULT_SETTINGS_SECTIONS, DEFAULT_TIMELINE_LABEL_WIDTH, DEFAULT_WORKSPACE_LIST_LABELS, DeveloperFooter, DocumentsFilterBarActions, DocumentsUploadButton, EmptyWorkspaceUpload, FACTS_GRID_ID, ImportVcfButton, ImportVcfSummary, InvoicesModal, LOOK_AGAIN_LABEL, MessageDetailsModal, MessageLiveSeconds, MicButton, NewProjectFlow, NotificationCenter, NotificationEvent, PENDING_LOOKUP_MS, PENDING_RECOVERY_KEY, PENDING_TASK_MESSAGE, PREMIUM_TIER_TAG, PROJECTS_BASE_TAB_ID, PROMPT_BINDINGS, PersistedGridView, ProgressiveLoadingChip, ProjectDetail, ProjectUsageContent, ProjectsTable, REFERRAL_OFFER, RecoveryKeyDownload, ReportProblemDialog, RunStatsBadges, RunningSubagents, SEARCH_FIELD_OPTIONS, SETTINGS_SECTION_IDS, STANDARD_TIER_TAG, SessionStatusIcon, SharedProjects, SourceChips, SsoResendVerificationButton, StorageBreakdown, StorageItemsTable, StorageTiers, StreamedArtifact, TILE_DEFAULT, TILE_MAX, TILE_MIN, ThreadSwitcher, ViewSelector, WORKSPACES_TAB_ID, WorkflowLaunchHost, WorkflowRunStatusCell, WorkflowRunThread, WorkflowStepMessage, accountSettingsSection, appearanceSettingsSection, backUpOnSignup, bookingCancelLink, buildNotificationCenterItems, buildProjectSummaries, chatSettingsSection, closeAccessRequestReview, connectedAppsSettingsSection, connectionSettingsSection, countNotificationTypes, createDocumentColumns, createEventCall, createNotificationTargetOpener, createTagColumn, deduplicateByContentHash, defaultHost, describePlan, distinctPeers, documentFamilyMeta, filterNotificationCenterItems, formatStorageGb, groupFallbackName, identifyOAuthClient, joinEventMeeting, loadEventWebinar, mailSettingsSection, openMeetingLink, openSsoPopup, organisationSettingsSection, parseArbiCallUrl, parseOAuthConsentRequest, parseTypedSkill, primaryProjectWorkspace, privacySettingsSection, renderConnectedUser, renderSessionStatusIcon, requestProjectBillingFocus, resolveAttendeeUsers, resolveAttendeeUsersRemote, resolveCallPeers, resolveCallPeersRemote, resolveLaunchInputs, resolveMailbox, resolveSsoName, reviewAccessRequest, reviewProgress, shareEventCall, storageSettingsSection, suppliedKinds, threadStateOf, toWorkspaceSummary, transferOutcome, updateEventWebinarRoles, usageSettingsSection, useAccessRequestUnderReview, useAddFromUrls, useAiReviewLiveUpdates, useAppShell, useAuthPages, useAutoRefreshPendingProjects, useBatchCompleteToasts, useChatMessageToasts, useConnectedAgentManagement, useConnectedCalendarCalls, useConnectedNotificationBell, useConnectedShellWorkspaces, useConnectedThreadActivity, useConnectedWorkspaceList, useConnectedWorkspaceSettings, useContextualHints, useDocumentBulkActions, useDocumentFilters, useDocumentGridSync, useDocumentNavigation, useDocumentTable, useExportStore, useHasAccountsImport, useLaunchWorkflow, useMessengerRows, useModelPicker, useNotificationBellEntry, useNotificationToasts, useOpenBillingPortal, useOpenChunk, useOpenNotificationTarget, useOpenWorkspaceActivityTarget, useOpenWorkspaceIcon, usePendingTaskThread, useProjectBillingFocus, useProjectSummaries, useProjectSummary, useReferralReward, useRenderTaskPerson, useReportProblem, useSessionPanelMode, useSessionSidebar, useSkillsEnabled, useSlashItems, useSlashSkillWorkflows, useSsoSignIn, useStartRequestedDraft, useTableViews, useTaskPeople, useTaskStart, useThreadLabels, useThreadTabs, useWorkflowDefinitions, useWorkflowLaunch, useWorkflowTasks, useWorkflowsPageState, useWorkspaceDocTitles, viewsOfTable, webinarRolesByUser, windowLabel, withMissingTableViews, withTableView, withoutTableView, workflowRunView };
43770
42287
  //# sourceMappingURL=index.js.map
43771
42288
  //# sourceMappingURL=index.js.map