@arbidocs/blocks 0.5.22 → 0.5.24

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 (104) hide show
  1. package/dist/{WorkspaceTableView-6JVHGDUB.cjs → WorkspaceTableView-GIDGNGBW.cjs} +6 -6
  2. package/dist/{WorkspaceTableView-6JVHGDUB.cjs.map → WorkspaceTableView-GIDGNGBW.cjs.map} +1 -1
  3. package/dist/{WorkspaceTableView-ECPHGWHF.js → WorkspaceTableView-S2PTTVHL.js} +4 -4
  4. package/dist/{WorkspaceTableView-ECPHGWHF.js.map → WorkspaceTableView-S2PTTVHL.js.map} +1 -1
  5. package/dist/auth/index.cjs +47 -47
  6. package/dist/auth/index.js +2 -2
  7. package/dist/{chunk-7DDMF3DZ.cjs → chunk-53T2FY4Z.cjs} +5 -31
  8. package/dist/chunk-53T2FY4Z.cjs.map +1 -0
  9. package/dist/chunk-5ZBXFHZW.js +434 -0
  10. package/dist/chunk-5ZBXFHZW.js.map +1 -0
  11. package/dist/{chunk-K237IYOD.cjs → chunk-BYJUI4AT.cjs} +54 -2
  12. package/dist/chunk-BYJUI4AT.cjs.map +1 -0
  13. package/dist/{chunk-O4EQYPLO.cjs → chunk-C2SZQKX2.cjs} +169 -27
  14. package/dist/chunk-C2SZQKX2.cjs.map +1 -0
  15. package/dist/{chunk-MSPNYW6Z.cjs → chunk-DTLVC6MN.cjs} +2 -53
  16. package/dist/chunk-DTLVC6MN.cjs.map +1 -0
  17. package/dist/{chunk-RVKVGS72.js → chunk-FDUQQNDT.js} +2 -2
  18. package/dist/{chunk-RVKVGS72.js.map → chunk-FDUQQNDT.js.map} +1 -1
  19. package/dist/{chunk-TTJGCJWX.cjs → chunk-H3XAHVDT.cjs} +42 -2
  20. package/dist/chunk-H3XAHVDT.cjs.map +1 -0
  21. package/dist/{chunk-XL55UDLO.js → chunk-IJJKUTKM.js} +5 -30
  22. package/dist/chunk-IJJKUTKM.js.map +1 -0
  23. package/dist/{chunk-ZX663X3X.cjs → chunk-KNRAKOCO.cjs} +6 -428
  24. package/dist/chunk-KNRAKOCO.cjs.map +1 -0
  25. package/dist/chunk-KUQOHPKP.cjs +443 -0
  26. package/dist/chunk-KUQOHPKP.cjs.map +1 -0
  27. package/dist/{chunk-F2BYURQZ.cjs → chunk-LYF47OXX.cjs} +5 -5
  28. package/dist/{chunk-F2BYURQZ.cjs.map → chunk-LYF47OXX.cjs.map} +1 -1
  29. package/dist/{chunk-PZRTRYPD.js → chunk-MKTEVOC3.js} +44 -5
  30. package/dist/chunk-MKTEVOC3.js.map +1 -0
  31. package/dist/{chunk-6XW3CMU4.js → chunk-N3KNAQ55.js} +144 -4
  32. package/dist/chunk-N3KNAQ55.js.map +1 -0
  33. package/dist/{chunk-KL6XOSEN.js → chunk-PLAGIVFF.js} +4 -52
  34. package/dist/chunk-PLAGIVFF.js.map +1 -0
  35. package/dist/{chunk-FZVAJFRH.cjs → chunk-RHKFCSFC.cjs} +2 -2
  36. package/dist/{chunk-FZVAJFRH.cjs.map → chunk-RHKFCSFC.cjs.map} +1 -1
  37. package/dist/{chunk-NVRJ6WTR.js → chunk-RTAYJUQM.js} +3 -3
  38. package/dist/{chunk-NVRJ6WTR.js.map → chunk-RTAYJUQM.js.map} +1 -1
  39. package/dist/{chunk-IXBJEQH5.js → chunk-VN4FSGBR.js} +53 -4
  40. package/dist/chunk-VN4FSGBR.js.map +1 -0
  41. package/dist/{chunk-SLRVI2YU.js → chunk-X6U6L6BG.js} +29 -4
  42. package/dist/chunk-X6U6L6BG.js.map +1 -0
  43. package/dist/{chunk-SQ5F5BFW.cjs → chunk-XDU3HHUU.cjs} +32 -6
  44. package/dist/chunk-XDU3HHUU.cjs.map +1 -0
  45. package/dist/{chunk-SKVVOEMX.js → chunk-XXUPUXBF.js} +8 -423
  46. package/dist/chunk-XXUPUXBF.js.map +1 -0
  47. package/dist/connect/index.cjs +1203 -624
  48. package/dist/connect/index.cjs.map +1 -1
  49. package/dist/connect/index.js +770 -197
  50. package/dist/connect/index.js.map +1 -1
  51. package/dist/connection/auth/CompactLogin.d.ts +26 -0
  52. package/dist/connection/auth/ConnectedLoginPage.d.ts +9 -1
  53. package/dist/connection/auth/index.d.ts +3 -1
  54. package/dist/connection/auth/sso-popup.d.ts +13 -0
  55. package/dist/connection/auth/sso-sign-in.d.ts +38 -0
  56. package/dist/connection/auth/support.d.ts +17 -0
  57. package/dist/connection/auth/useLoginActions.d.ts +9 -2
  58. package/dist/connection/billing/ConnectedQuotaDialog.d.ts +5 -13
  59. package/dist/connection/billing/index.d.ts +1 -1
  60. package/dist/connection/connectors/ConnectedSharePointAdminConsentPage.d.ts +26 -0
  61. package/dist/connection/connectors/index.d.ts +1 -0
  62. package/dist/connection/projects/ConnectedProjectsPanel.d.ts +9 -1
  63. package/dist/connection/projects/ProjectsListPage.d.ts +40 -0
  64. package/dist/connection/projects/index.d.ts +1 -0
  65. package/dist/connection/settings-page/ConnectedAccountSettings.d.ts +2 -1
  66. package/dist/connection/settings-page/ConnectedBoxPortalSection.d.ts +6 -0
  67. package/dist/connection/settings-page/appearanceSection.d.ts +30 -0
  68. package/dist/connection/settings-page/index.d.ts +1 -0
  69. package/dist/index.cjs +209 -237
  70. package/dist/index.cjs.map +1 -1
  71. package/dist/index.d.ts +2 -0
  72. package/dist/index.js +11 -50
  73. package/dist/index.js.map +1 -1
  74. package/dist/settings/AppearanceSettings.d.ts +1 -2
  75. package/dist/settings/index.cjs +153 -153
  76. package/dist/settings/index.d.ts +2 -1
  77. package/dist/settings/index.js +1 -1
  78. package/dist/site/index.cjs +82 -74
  79. package/dist/site/index.d.ts +2 -0
  80. package/dist/site/index.js +3 -3
  81. package/dist/studio/index.cjs +73 -73
  82. package/dist/studio/index.js +5 -5
  83. package/dist/theme/appearance.d.ts +47 -0
  84. package/dist/theme/fromCss.d.ts +33 -0
  85. package/node_modules/@arbidocs/coedit/package.json +1 -1
  86. package/package.json +5 -5
  87. package/dist/chunk-6XW3CMU4.js.map +0 -1
  88. package/dist/chunk-7DDMF3DZ.cjs.map +0 -1
  89. package/dist/chunk-AMTWY22T.js +0 -11
  90. package/dist/chunk-AMTWY22T.js.map +0 -1
  91. package/dist/chunk-IXBJEQH5.js.map +0 -1
  92. package/dist/chunk-K237IYOD.cjs.map +0 -1
  93. package/dist/chunk-KL6XOSEN.js.map +0 -1
  94. package/dist/chunk-MSPNYW6Z.cjs.map +0 -1
  95. package/dist/chunk-O4EQYPLO.cjs.map +0 -1
  96. package/dist/chunk-PZRTRYPD.js.map +0 -1
  97. package/dist/chunk-SKVVOEMX.js.map +0 -1
  98. package/dist/chunk-SLRVI2YU.js.map +0 -1
  99. package/dist/chunk-SQ5F5BFW.cjs.map +0 -1
  100. package/dist/chunk-TTJGCJWX.cjs.map +0 -1
  101. package/dist/chunk-XL55UDLO.js.map +0 -1
  102. package/dist/chunk-ZU2B2RZK.cjs +0 -13
  103. package/dist/chunk-ZU2B2RZK.cjs.map +0 -1
  104. package/dist/chunk-ZX663X3X.cjs.map +0 -1
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { useBillingSupport, formatMoney, isProProject, useSelfExtId, addonCharge, formatPeriodEnd, quoteParts, taxDetail, money2, ANNUAL_PREMIUM_AI_NOTE, totalWithTaxWord, planBadgeView, DEFAULT_SPEND_CAP_PENCE, findProPrices, packPrice, calcSavingsPercent, parseBudgetPounds, isAddonBudgetZero, useRewardBalance, getQuotaItems, aiUsageResetTimestamp, formatResetDate, ZERO_BUDGET_MESSAGE, CAP_REACHED_MESSAGE, PRO_PACKS, planNameForPacks, proTierName, STORAGE_BLOCK_GB, ADDON_BLOCK_AI_GBP, quoteError, POSTCODE_COUNTRIES, addonPrice, checkoutBlockPriceText, quoteTotalLine, apiErrorDetail, checkoutItemsLabel, projectGroupBilling, SUGGESTED_DAILY_CAP_PER_USER, FREE_STORAGE_MB, FREE_AI_GBP, PRO_AI_GBP, PRO_STORAGE_GB, plusVat, planPreviewLines, PAY_TODAY_UNPRICED, TAX_LOCATION_INVALID, FREE_COLLABORATORS, MAX_CHECKOUT_BLOCKS, reduceBounds, splitBlocks, autoRoom, nextRemovedBlockSize, stepLabel, addStepCaption, blocksLabel, MIN_AUTO_TOPUP_THRESHOLD_GBP, USAGE_CAP_LABEL, USAGE_CAP_HELP, PLAN_CHOICE_PACKS, nextPeriodBody, addonSettingsBody, budgetSavedMessage } from '../chunk-NVRJ6WTR.js';
3
- export { CAP_REACHED_MESSAGE, ZERO_BUDGET_MESSAGE, aiUsageResetTimestamp, formatMoney, formatResetDate, getQuotaItems, isAddonBudgetZero, isProProject, planBadgeView, planName, projectGroupBilling, useBillingSupport, useRewardBalance } from '../chunk-NVRJ6WTR.js';
2
+ import { useBillingSupport, formatMoney, isProProject, useSelfExtId, addonCharge, formatPeriodEnd, quoteParts, taxDetail, money2, ANNUAL_PREMIUM_AI_NOTE, totalWithTaxWord, planBadgeView, DEFAULT_SPEND_CAP_PENCE, findProPrices, packPrice, calcSavingsPercent, parseBudgetPounds, isAddonBudgetZero, useRewardBalance, getQuotaItems, aiUsageResetTimestamp, formatResetDate, ZERO_BUDGET_MESSAGE, CAP_REACHED_MESSAGE, PRO_PACKS, planNameForPacks, proTierName, STORAGE_BLOCK_GB, ADDON_BLOCK_AI_GBP, quoteError, POSTCODE_COUNTRIES, addonPrice, checkoutBlockPriceText, quoteTotalLine, apiErrorDetail, checkoutItemsLabel, projectGroupBilling, SUGGESTED_DAILY_CAP_PER_USER, FREE_STORAGE_MB, FREE_AI_GBP, PRO_AI_GBP, PRO_STORAGE_GB, plusVat, planPreviewLines, PAY_TODAY_UNPRICED, TAX_LOCATION_INVALID, FREE_COLLABORATORS, MAX_CHECKOUT_BLOCKS, reduceBounds, splitBlocks, autoRoom, nextRemovedBlockSize, stepLabel, addStepCaption, blocksLabel, MIN_AUTO_TOPUP_THRESHOLD_GBP, USAGE_CAP_LABEL, USAGE_CAP_HELP, PLAN_CHOICE_PACKS, nextPeriodBody, addonSettingsBody, budgetSavedMessage } from '../chunk-RTAYJUQM.js';
3
+ export { CAP_REACHED_MESSAGE, ZERO_BUDGET_MESSAGE, aiUsageResetTimestamp, formatMoney, formatResetDate, getQuotaItems, isAddonBudgetZero, isProProject, planBadgeView, planName, projectGroupBilling, useBillingSupport, useRewardBalance } from '../chunk-RTAYJUQM.js';
4
4
  import { getRoleBadgeClass, formatRole, getRoleDescription, PageLoading, WorkspacePageFrame, WorkspaceIdentityPanel, WorkspaceProjectSlot, WorkspaceAudienceLine, CommonWorkspaceToggle, ExpandableSection, LeaveFooter, ProjectPicker, WorkspaceTypeBadge, WorkspaceList, WorkspaceGroup, WorkspaceCard } from '../chunk-X4Y7ZHFB.js';
5
5
  import { isAgentAccount, workspaceConversationCount, workspaceDocumentCount, isListedWorkspace, WORKSPACE_CATEGORY_FILTERS, projectFilterId, workspaceFilterAttributes, groupWorkspacesByProject, workspaceGroupStats, byRecentUpdate } from '../chunk-BTF4AZMG.js';
6
6
  import { SharedFileView, SharedFilesInbox } from '../chunk-4ML5AMMO.js';
@@ -8,13 +8,13 @@ import { buildFactCitations, citedVersionRef, chronologyFactBodies, docIdsOf, to
8
8
  import { HomeLoadError, HomeFrame, HomeMain, HomeCenteredScroll, HomeCenteredColumn, DashboardRoot, DashboardBand, DashboardColumns, RecentList, DashboardAction, FactsStrip, FactMark, CreateTile } from '../chunk-IKTPM73F.js';
9
9
  import { ProjectBandTitle, PlainBandTitle } from '../chunk-RQKWYKZY.js';
10
10
  import '../chunk-WZ63HE2C.js';
11
- 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, UsageLineChart, 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, PlanStack, PlanNotice, PlanPickerCard, PlanPickerHeader, PricingToggle, PromoCodeInput, PlanActionButton, QuotaExceededDialogView, InviteContactsDialog, WelcomeDialog, applyTriStateFilters, PanelFrame, PanelAddButton, PanelFrameBody, PanelScroll, PanelActionsRow, applyInvertedIndexFilter, ConfigSwitcherBar, PanelNote, ProjectRow, QuotaMeter, FilterChip, buildInvertedIndex, serverConnectionView, ServerConnectionButton, ModelProviderLabel, SyncFolderRow, SyncFolderStatus, PlanTierOption, PlanActionRow, SubscriptionStatusView, DailyCapField, PlanInfoPopover, PlanCardGrid, ReferralRewardSummary, CheckoutDialogFrame, ConnectionCard, ReferralRewardNote } from '../chunk-RVKVGS72.js';
11
+ 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, 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, PlanStack, PlanNotice, PlanPickerCard, PlanPickerHeader, PricingToggle, PromoCodeInput, PlanActionButton, QuotaExceededDialogView, InviteContactsDialog, WelcomeDialog, applyTriStateFilters, PanelFrame, PanelAddButton, PanelFrameBody, PanelScroll, PanelActionsRow, applyInvertedIndexFilter, ConfigSwitcherBar, PanelNote, ProjectRow, QuotaMeter, FilterChip, buildInvertedIndex, serverConnectionView, ServerConnectionButton, ModelProviderLabel, SyncFolderRow, SyncFolderStatus, PlanTierOption, PlanActionRow, SubscriptionStatusView, DailyCapField, PlanInfoPopover, PlanCardGrid, ReferralRewardSummary, CheckoutDialogFrame, ConnectionCard, ReferralRewardNote } from '../chunk-FDUQQNDT.js';
12
12
  export { ConnectedAssistantDock, redlineStats, textToArtifact, toRedlineMarkdown, useConnectedAiTask, useConnectedChat, useSemanticSearch, useWorkspaceDocs } from '../chunk-MUF3RFJZ.js';
13
13
  import { useConnectedWorkspaceRole, useConnectedWorkflowScopeSource, ConnectedWorkflowDocumentsField, ConnectedWorkflowLauncher, ConnectedNativeDocxEditor, toWorkflowFieldDocument } from '../chunk-AAVFCPKD.js';
14
14
  export { ConnectedWorkflowDocumentsField, ConnectedWorkflowLauncher, ConnectedWorkflowsTable, DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS, toWorkflowFieldDocument, useConnectedAgentOptions, useConnectedWorkflowScopeSource, useConnectedWorkspaceRole, useDocxCommentTarget, useNativeDocxSupport } from '../chunk-AAVFCPKD.js';
15
15
  import { ConnectedMarkdown, InternalDocLink, ExternalLink, DocumentWorkspaceContext } from '../chunk-M4FLTGFM.js';
16
16
  export { ConnectedDocumentToolsProvider, ConnectedMarkdown, DocumentChip, DocumentWorkspaceContext, ExternalLink, InternalDocLink, MailChip, MermaidDiagram, WorkspaceDocumentReference, useDocumentViewerSupport, useDocumentWorkspace, useViewerDraftDocument, useViewerIsDetached, useViewerPassageCitation, useViewerStreamingDocument } from '../chunk-M4FLTGFM.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, FolderFilterButton, FolderPickerRow, UploadFrame, UploadContainer, SelectedFilesList, RejectedFilesList, UploadErrorMessage, UploadProgress, VendorLogo, 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, UploadDropArea, canChangeVisibility, UploadUrlButton } from '../chunk-XVGUR746.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, UploadDropArea, canChangeVisibility, UploadUrlButton } from '../chunk-XVGUR746.js';
18
18
  import { ViewToggle, DocumentViewToggle } from '../chunk-JJA6GQKH.js';
19
19
  import { ModalBreadcrumbHeader, ModalCrumbs } from '../chunk-RC6VTY2H.js';
20
20
  import { SignatureCertificate, SignDocumentDialog } from '../chunk-PQU6LE7U.js';
@@ -24,13 +24,13 @@ import '../chunk-MTSKK3BN.js';
24
24
  import '../chunk-LU23I2HS.js';
25
25
  import { FactSourcesPanel, FactPassageItem } from '../chunk-HFZ45FD3.js';
26
26
  import '../chunk-IA5BYEO7.js';
27
- import { EntityTooltip, EntityTooltipHeader, EntityTooltipSection, EntityTooltipHint, SharedCell, WorkspaceActivityList, WorkspaceNotificationMenu, ThreadFollowMenuItem, ThreadFollowButton, TagTable, TagPicker, tagsPageNouns, entitiesPhrase, ExtractEntitiesDialog, GridRowNavigator, LoadingIndicator, EntityIdentityBar, IDENTITY_NAME_MAX_LENGTH, EntityTooltipStats, tagTableDocx, documentCount, tagTableLabels, TagDetail, tagDetailLabels, tagNoteLabel, tagKindDescription, glossaryEntries, glossaryDocx, glossaryMarkdown, glossaryFileName } from '../chunk-PZRTRYPD.js';
27
+ import { EntityTooltip, EntityTooltipHeader, EntityTooltipSection, EntityTooltipHint, SharedCell, WorkspaceActivityList, WorkspaceNotificationMenu, ThreadFollowMenuItem, ThreadFollowButton, TagTable, TagPicker, tagsPageNouns, entitiesPhrase, ExtractEntitiesDialog, GridRowNavigator, LoadingIndicator, EntityIdentityBar, IDENTITY_NAME_MAX_LENGTH, EntityTooltipStats, tagTableDocx, documentCount, tagTableLabels, TagDetail, tagDetailLabels, tagNoteLabel, tagKindDescription, Toolbar, glossaryEntries, glossaryDocx, glossaryMarkdown, glossaryFileName } from '../chunk-MKTEVOC3.js';
28
28
  import { MemberAvatarStack } from '../chunk-FUPAGAZB.js';
29
29
  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';
30
30
  import { SearchHit } from '../chunk-V5HVPQP7.js';
31
31
  import { UsageMeter } from '../chunk-66TA5IBN.js';
32
- import { DataTable } from '../chunk-SLRVI2YU.js';
33
- import '../chunk-AMTWY22T.js';
32
+ import { DataTable, PageHeader } from '../chunk-X6U6L6BG.js';
33
+ import { ThemeEditor } from '../chunk-5ZBXFHZW.js';
34
34
  import { TimelineZoomControl } from '../chunk-4EZVCGRL.js';
35
35
  import '../chunk-UJE32SST.js';
36
36
  import '../chunk-NHZK64TQ.js';
@@ -44,7 +44,7 @@ import '../chunk-K4BGOPGG.js';
44
44
  import '../chunk-ZCOVDK2E.js';
45
45
  import { isDefinitionsLabel, DOCX_MIME_TYPE, toDefinitionSource, definitionLabels } from '../chunk-IYUKJESY.js';
46
46
  import { decodeWhitespaceEntities } from '../chunk-AF6RDAJF.js';
47
- import { EntityChip, StepTraceSummary, StepTrace, getCurrentAgentStepPresentation, AssistantEntity, ThreadActivity, SubAgentLane, getAgentStepPresentation, stepAccent, MODEL_TIER_ICON_MAP, StepRow, StepNarration, StepSummary, StepDetail, StepOutcome, StepParams, GoalCriteria, SubStepGroup, MODEL_TIER_LABELS, fromPlanSteps, latestMessageTime, isSupersededStop, compactThreadActivity, unnotifiedMentions, notifiedLabel, linkedRunsFromActivity, getModelIcon, SubagentRoster, buildLibrarySkills, filterLibrarySkills, SKILL_SOURCE_LABELS, SKILL_TYPE_LABELS, SkillViewToggle, SkillFilterChips, SkillTile, SkillGenerateForm, SkillLibraryDetail, parseSkillFrontmatter, SKILL_MAIN_FILENAME, SkillEditForm, DEFAULT_AGENT_CAPABILITIES, stripPersonaPreamble, AgentCreator, DEFAULT_AGENT_TYPES, DEFAULT_AGENT_TEMPLATES, AgentAvatarField, isValidAgentName, AgentConnectInstructions, TaskRunsDialog, TaskActivityDialog, WorkflowStepBar, ConfigForm, AgentEditView, AgentMainView, AgentCreatedView, AgentCreateView, WorkflowRunStatus, ThreadStatusLine, WorkflowThreadStrip, WorkflowStepAction, WorkflowThreadStartedBy, TaskFlow, useWorkflowUsage, WEB_WORKFLOWS, DASHBOARD_PINNED, CUSTOM_TASK, REMIND_TASK, DASHBOARD_OPERATIONS, sortByRecentUse, taskComposerToCreateRequest, taskComposerToUpdateRequest, composerToWorkflowUpdate, moveTargets, workflowToComposerValues, REMIND_TASK_ID, CUSTOM_TASK_ID, taskToComposerValues, TaskComposer, renderWorkflowIcon, AUTOMATION_EVENTS, TaskPlan, TaskStartDialog, ThreadLauncher, NewThreadDialog, GENERATE_IMAGE_ID, IMAGE_ASPECT_AUTO, deriveAnnotationName, ANNOTATE_ID, recordWorkflowUse, openWorkflowLaunch, useWorkflowLaunchRequest, AgentBar, AgentBarNotes, AgentBarQueuedNote, AgentBarProbeAnswer, BUILTIN_SKILLS, TaskEmptyState, ConsentPage, ConsentMessage, ConsentCard, ConsentHeader, ConsentSection, CopyableUrl, ConsentText, ConsentStrong, ConsentPermissionList, ConsentNotice, ConsentActions, ConsentFootnote, AgentBarStatus, AgentBarIconButton, AgentBarMenu, composePersona, newThreadToRequest, importSkillFile, importSkillFromUrl, WorkflowRunner, skillSlug, serializeSkill, toPlanSteps, useWorkflowView, STATUS_LABELS, asTaskStatus, workflowToSkillMarkdown, closeWorkflowLaunch } from '../chunk-44FPFTU2.js';
47
+ import { EntityChip, StepTraceSummary, StepTrace, getCurrentAgentStepPresentation, AssistantEntity, ThreadActivity, SubAgentLane, getAgentStepPresentation, stepAccent, MODEL_TIER_ICON_MAP, StepRow, StepNarration, StepSummary, StepDetail, StepOutcome, StepParams, GoalCriteria, SubStepGroup, MODEL_TIER_LABELS, fromPlanSteps, latestMessageTime, isSupersededStop, compactThreadActivity, unnotifiedMentions, notifiedLabel, linkedRunsFromActivity, getModelIcon, SubagentRoster, buildLibrarySkills, filterLibrarySkills, SKILL_SOURCE_LABELS, SKILL_TYPE_LABELS, SkillViewToggle, SkillFilterChips, SkillTile, SkillGenerateForm, SkillLibraryDetail, parseSkillFrontmatter, SKILL_MAIN_FILENAME, SkillEditForm, DEFAULT_AGENT_CAPABILITIES, stripPersonaPreamble, AgentCreator, DEFAULT_AGENT_TYPES, DEFAULT_AGENT_TEMPLATES, AgentAvatarField, isValidAgentName, AgentConnectInstructions, TaskRunsDialog, TaskActivityDialog, WorkflowStepBar, ConsentPage, ConsentCard, ConsentHeader, ConsentNotice, ConsentSection, ConsentBulletList, ConsentStrong, ConsentText, ConfigForm, AgentEditView, AgentMainView, AgentCreatedView, AgentCreateView, WorkflowRunStatus, ThreadStatusLine, WorkflowThreadStrip, WorkflowStepAction, WorkflowThreadStartedBy, TaskFlow, useWorkflowUsage, WEB_WORKFLOWS, DASHBOARD_PINNED, CUSTOM_TASK, REMIND_TASK, DASHBOARD_OPERATIONS, sortByRecentUse, taskComposerToCreateRequest, taskComposerToUpdateRequest, composerToWorkflowUpdate, moveTargets, workflowToComposerValues, REMIND_TASK_ID, CUSTOM_TASK_ID, taskToComposerValues, TaskComposer, renderWorkflowIcon, AUTOMATION_EVENTS, TaskPlan, TaskStartDialog, ThreadLauncher, NewThreadDialog, GENERATE_IMAGE_ID, IMAGE_ASPECT_AUTO, deriveAnnotationName, ANNOTATE_ID, recordWorkflowUse, openWorkflowLaunch, useWorkflowLaunchRequest, AgentBar, AgentBarNotes, AgentBarQueuedNote, AgentBarProbeAnswer, BUILTIN_SKILLS, TaskEmptyState, ConsentMessage, CopyableUrl, ConsentPermissionList, ConsentActions, ConsentFootnote, AgentBarStatus, AgentBarIconButton, AgentBarMenu, composePersona, newThreadToRequest, importSkillFile, importSkillFromUrl, WorkflowRunner, skillSlug, serializeSkill, toPlanSteps, useWorkflowView, STATUS_LABELS, asTaskStatus, workflowToSkillMarkdown, closeWorkflowLaunch } from '../chunk-44FPFTU2.js';
48
48
  import { MultiSelect } from '../chunk-CQCC7LE7.js';
49
49
  import { PersonPill, documentScopeLabels, matchWorkflowScope } from '../chunk-7S76Q5RK.js';
50
50
  import { SectionLabel } from '../chunk-MQEN62NR.js';
@@ -57,7 +57,7 @@ import { FilterInput } from '../chunk-YU2KUMGE.js';
57
57
  import '../chunk-SUDPZ5IQ.js';
58
58
  import { GridView } from '../chunk-7F5Z4K5W.js';
59
59
  import { StreamedArtifactFrame } from '../chunk-LOJVUGBJ.js';
60
- import { DEFAULT_PASSWORD_RULES, AccountRecoveryDialog, promptSaveCredential, AuthLayout, AuthHeading, AuthField, AuthInput, AuthFieldBadge, AuthLink, AuthNote, RevealablePasswordInput, AuthConsent, AuthSubmitButton, AuthDivider, AuthAlert, RecoveryKeyDialog, parseAuthError, AuthOfflineBadge, AuthTabs, splitAuthHash, withTrailingFragment } from '../chunk-IXBJEQH5.js';
60
+ import { DEFAULT_PASSWORD_RULES, AccountRecoveryDialog, promptSaveCredential, useFragmentCredentials, AuthLayout, AuthHeading, AuthField, AuthInput, AuthFieldBadge, AuthLink, AuthNote, RevealablePasswordInput, AuthConsent, AuthSubmitButton, AuthDivider, AuthAlert, RecoveryKeyDialog, parseAuthError, AuthOfflineBadge, AuthTabs, splitAuthHash, withTrailingFragment } from '../chunk-VN4FSGBR.js';
61
61
  import { PasswordStrengthInput } from '../chunk-P6OLZGQA.js';
62
62
  import { attendeeKey, upcomingOf, conferenceUrl, isWebinarConference, canJoinEvent, calendarToListItem, buildGridEvents, pendingCreateToGrid, newEventDraft, MiniMonth, CalendarList, CalendarGrid, printCalendar, EventDetails, ScopeDialog, CalendarFormDialog, ProposeTimeDialog, isCalendarAttachment, parseIcsInvite, formatEventWhen, groupSlotsByDay, publicBookingMessage, formatSlotRange, zoneOptions, buildTimeChangeRequest, eventToDraft, needsScope, validateDraft, CALENDAR_DEFAULT_LABELS, buildCreateBody, buildDeleteTarget, EventEditor, toSettingsValue, CalendarSettingsForm, describeCalendarError, normalizeFeedUrl, parseOverlayLink, isAllDayDraft, draftRangeUtc, freeBusyToRows, SchedulingAssistant, applySuggestion, toSuggestionViews, bookingLink, defaultRoomWindow, bookingToForm, emptyBookingForm, slugify, WeeklyHoursEditor, validateBookingForm, formToBookingBody, WEEKDAY_NAMES, formatBusy, buildEditRequest } from '../chunk-AWVGKHJT.js';
63
63
  import { detectTimeZone, utcToDate, formatPlainDate, formatInZone, safeZone, todayInZone, addDays, listTimeZones, wallToUtc } from '../chunk-OJIX5NBN.js';
@@ -93,11 +93,11 @@ import { ModalHeader, ModalScaffold, ModalSection, ModalSectionTitle } from '../
93
93
  import '../chunk-7F6CBP3Z.js';
94
94
  import '../chunk-VUNV25KB.js';
95
95
  import { QueryClient, useQueryClient, QueryClientProvider } from '@tanstack/react-query';
96
- import { useWorkspaces, ArbiBotHeadIcon, IN_FLIGHT_DOCUMENT_STATUSES, useOfflineDocumentIds, useOpenViewerDocumentId, FINISHED_DOCUMENT_STATUSES, useMailPolicy, useProcessingTasks, resolveDocumentStatus, useArbi, useIsCreatingTag, HtmlIcon, useUpdateDocuments, useDeleteDocuments, useRenameFolder, useDownloadDocuments, useTags, useDocumentHostActions, useDocumentThumbnails, 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, useWorkspaceNotificationLevel, useFollowThread, useUploadSkillFiles, useSaveSkill, useSetSkillVisibility, useDeleteSkill, useSkillSource, useAgentModels, useMcpTools, useAgentConfig, useAgentWorkspaces, useCreateAgent, useSaveAgentConfig, useGrantAgentAccess, useRevokeAgentAccess, useGenerateAgentAvatar, useWorkflowRuns, useAgents, 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, useConnectorVendorVisibility, useConnectorCatalog, useMyConnectors, useDisconnectConnector, useSlackConnection, useDisconnectSlack, isMailboxSyncVendor, isSharePointVendor, useWorkspaceTrash, useInvalidateStorage, useStorageActions, useStorageItems, useStorageItemNames, useStorageProjects, useUserUsageToday, useStorageSnapshots, useUpdateWorkspace, useAddWorkspaceMembers, useRemoveWorkspaceMembers, useSetWorkspaceMemberRoles, toShellWorkspace, useEnableMailboxSync, useMailboxFolders, useEnableDriveSync, useDriveFolderChildren, connectorErrorStatus, useProjectInvoices, useProjects, useUpdateProjectFields, useChargeWatch, useAddonQuote, STILL_WORKING, useProjectBillingPortal, useProjectUsage, useIsSlow, useProducts, useCreateProject, useDeleteProject, useRefreshProject, useContacts, useInviteContacts, useCanCreateProjects, useDeleteWorkspaces, PROJECT_CREATION_DENIED_REASON, 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, subscribeDocumentRows, useGenerateDocTags, useDocumentsLoading, selectViewingDocumentId, useRelatedDocuments, myChatId, useChatThread, useChatPost, useDeleteChatMessage, useMarkChatRead, setOpenChat, useAgentDmStatus, annotateThread, userDisplayName, DmComposer, TypingIndicator, useRenameChat, useAddChatMembers, useRemoveChatMember, useChats, useChatSummaries, useCreateGroupChat, useApplyChatModel, AUTO_CHAT_MODEL, formatGbpPerMillionTokens, useConfigSchema, useSaveConfig, useConversationPendingAuth, openAccessRequest, useRequestWorkspaceAccess, threadTabId, useUpdateConversation, useCanEditShared, useActOnStep, useCreateWork, useRunWorkflow, useStartTaskQuery, useCreateWorkflow, useUpdateWorkflow, usePlanWork, useWorkItems, TaskThreadPendingError, useMentionCandidates, useAgentRunControl, useConnectRunStream, useAnswerAgentQuestion, useConversationIsShared, useWorkspaceRole, buildPendingFirstTurn, useConversationTurn, useAskAgain, getOrphanedLastMessage, refuseChatWhenOffline, useThreadDocument, useDocumentAutoAdd, useAutoSendDraft, READ_ONLY_MEETING_TEXT, useAgentSession, useStartAgentSession, useCloseAgentSession, downloadRecoveryFile, LinkedInIcon, GoogleIcon, AppleIcon, useCurrentUser, isQueuedCalendarWrite, DateSeparator, ChatBubble, isAliasTakenError, nextAliasSuggestion, aliasTakenMessage, mailJson, connectorReturnTo, DmAvatar, ConversationList, GitHubIcon, getRelatedTotal, isDeploymentUserNotification, describeServerNotification, getWorkspaceActionText, getWorkspaceSentPhrase, BOX_SEAT_REFUSED, BOX_SEAT_REFUSED_TITLE, documentActivityPhrase, isSignatureNotificationType, inputRequestTitle, WORK_NOTIFICATION_LABELS, useConversationThreads, usePassageQuotes, useUpdateFact, useDeleteFact, useAccountClient, useDriveFolderDocCount, useChangeProjectPlan, useCancelProjectSubscription, usePreviewProjectPlanChange, useAddProjectAddonBlock, usePlanQuote, useCreateProjectCheckout, useInvalidateProjects, fileAttachment, useMailProjects, useSaveMailDraft, useSendMail, useMailDraftReplaced, useCalendarInvitations, useDecideCounter, useSearchContacts, usePublishCalendar, useCalendarShares, useShareCalendar, useUnshareCalendar, useSubscribeCalendar, useHolidayCountries, useAddHolidayCalendar, cancelPublicBooking, useInvalidateAfterTransfer, useConfigs, useSaveConfigField, useDeleteConfig, isFullConfig, AiAnswer, ArbiWebSocketProvider, signatureNotificationPhrase, signatureRequestMeta, getNotificationTypeMeta, useMailDraftEditor, useFreeBusy, useFindTime, useCalendarSupport, useStartCalendarAccountOAuth, useConnectOAuthAccount, useBookingPages, useDeleteBookingPage, useRooms, SHAREPOINT_VENDORS, useUpdateProjectNextPeriodAddons, useUpdateProjectAddonSettings, useSyncCalendarAccount, useUpdateCalendarAccount, useDisconnectCalendarAccount, ACCOUNT_VENDOR, useCalDavProfiles, useConnectCalDavAccount, useSaveBookingPage, useCreateRoom } from '@arbidocs/react';
96
+ import { useWorkspaces, ArbiBotHeadIcon, IN_FLIGHT_DOCUMENT_STATUSES, useOfflineDocumentIds, useOpenViewerDocumentId, FINISHED_DOCUMENT_STATUSES, useMailPolicy, useProcessingTasks, resolveDocumentStatus, useArbi, useIsCreatingTag, HtmlIcon, useUpdateDocuments, useDeleteDocuments, useRenameFolder, useDownloadDocuments, useTags, useDocumentHostActions, useDocumentThumbnails, 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, useWorkspaceNotificationLevel, useFollowThread, useUploadSkillFiles, useSaveSkill, useSetSkillVisibility, useDeleteSkill, useSkillSource, useAgentModels, useMcpTools, useAgentConfig, useAgentWorkspaces, useCreateAgent, useSaveAgentConfig, useGrantAgentAccess, useRevokeAgentAccess, useGenerateAgentAvatar, useWorkflowRuns, useAgents, 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, useConnectorVendorVisibility, useConnectorCatalog, useMyConnectors, useDisconnectConnector, useSlackConnection, useDisconnectSlack, isMailboxSyncVendor, isSharePointVendor, useWorkspaceTrash, useInvalidateStorage, useStorageActions, useStorageItems, useStorageItemNames, useStorageProjects, useUserUsageToday, useStorageSnapshots, useUpdateWorkspace, useAddWorkspaceMembers, useRemoveWorkspaceMembers, useSetWorkspaceMemberRoles, toShellWorkspace, useEnableMailboxSync, useMailboxFolders, useEnableDriveSync, useDriveFolderChildren, connectorErrorStatus, useProjectInvoices, useProjects, useUpdateProjectFields, useChargeWatch, useAddonQuote, STILL_WORKING, useProjectBillingPortal, useProjectUsage, useIsSlow, useProducts, useCreateProject, useDeleteProject, useRefreshProject, useBoxRole, useContacts, useInviteContacts, useCanCreateProjects, useDeleteWorkspaces, PROJECT_CREATION_DENIED_REASON, 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, subscribeDocumentRows, useGenerateDocTags, useDocumentsLoading, selectViewingDocumentId, useRelatedDocuments, myChatId, useChatThread, useChatPost, useDeleteChatMessage, useMarkChatRead, setOpenChat, useAgentDmStatus, annotateThread, userDisplayName, DmComposer, TypingIndicator, useRenameChat, useAddChatMembers, useRemoveChatMember, useChats, useChatSummaries, useCreateGroupChat, useApplyChatModel, AUTO_CHAT_MODEL, formatGbpPerMillionTokens, useConfigSchema, useSaveConfig, useConversationPendingAuth, openAccessRequest, useRequestWorkspaceAccess, threadTabId, useUpdateConversation, useCanEditShared, useActOnStep, useCreateWork, useRunWorkflow, useStartTaskQuery, useCreateWorkflow, useUpdateWorkflow, usePlanWork, useWorkItems, TaskThreadPendingError, useMentionCandidates, useAgentRunControl, useConnectRunStream, useAnswerAgentQuestion, useConversationIsShared, useWorkspaceRole, buildPendingFirstTurn, useConversationTurn, useAskAgain, getOrphanedLastMessage, refuseChatWhenOffline, useThreadDocument, useDocumentAutoAdd, useAutoSendDraft, READ_ONLY_MEETING_TEXT, useAgentSession, useStartAgentSession, useCloseAgentSession, downloadRecoveryFile, LinkedInIcon, GoogleIcon, AppleIcon, useCurrentUser, isQueuedCalendarWrite, DateSeparator, ChatBubble, isAliasTakenError, nextAliasSuggestion, aliasTakenMessage, mailJson, connectorReturnTo, DmAvatar, ConversationList, GitHubIcon, getRelatedTotal, isDeploymentUserNotification, describeServerNotification, getWorkspaceActionText, getWorkspaceSentPhrase, BOX_SEAT_REFUSED, BOX_SEAT_REFUSED_TITLE, documentActivityPhrase, isSignatureNotificationType, inputRequestTitle, WORK_NOTIFICATION_LABELS, useConversationThreads, usePassageQuotes, useUpdateFact, useDeleteFact, useAccountClient, useDriveFolderDocCount, useChangeProjectPlan, useCancelProjectSubscription, usePreviewProjectPlanChange, useAddProjectAddonBlock, usePlanQuote, useCreateProjectCheckout, useInvalidateProjects, fileAttachment, useMailProjects, useSaveMailDraft, useSendMail, useMailDraftReplaced, useCalendarInvitations, useDecideCounter, useSearchContacts, usePublishCalendar, useCalendarShares, useShareCalendar, useUnshareCalendar, useSubscribeCalendar, useHolidayCountries, useAddHolidayCalendar, cancelPublicBooking, useInvalidateAfterTransfer, useConfigs, useSaveConfigField, useDeleteConfig, isFullConfig, AiAnswer, ArbiWebSocketProvider, signatureNotificationPhrase, signatureRequestMeta, getNotificationTypeMeta, useMailDraftEditor, useFreeBusy, useFindTime, useCalendarSupport, useStartCalendarAccountOAuth, useConnectOAuthAccount, useBookingPages, useDeleteBookingPage, useRooms, SHAREPOINT_VENDORS, useUpdateProjectNextPeriodAddons, useUpdateProjectAddonSettings, useSyncCalendarAccount, useUpdateCalendarAccount, useDisconnectCalendarAccount, ACCOUNT_VENDOR, useCalDavProfiles, useConnectCalDavAccount, useSaveBookingPage, useCreateRoom } from '@arbidocs/react';
97
97
  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';
98
98
  import { browserSessionStateStorage, parseCallFragment, validateRecoveryKeyFile, RECOVERY_KEY_ERRORS, parseRecoveryUrl, prewarmKeyPairs, decryptRecoveryKey, unlockIdentityWithPassword, createRecoveryUrl, bytesToBase64, initSodium } from '@arbidocs/client';
99
99
  import React7, { memo, useMemo, lazy, useRef, useEffect, useCallback, useState, forwardRef, useLayoutEffect, useImperativeHandle, createContext, useContext, useSyncExternalStore, Suspense, Fragment as Fragment$1, useId } from 'react';
100
- 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, 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, Printer, SquareStack, Table, Cake, X, UserRound, Star, Tag, Video, CalendarDays, MapPin, Globe, Calendar, Hash, File as File$1, FileType, FolderOpen, Fingerprint, Paperclip, CircleCheck, TriangleAlert, LoaderCircle, NotebookPen, Columns3, EyeOff, ArrowUp, ArrowDown, ZoomOut, Camera, FilePlus2, UserMinus, UserPlus, UsersRound, Code2, Infinity, ChevronDown, MoreHorizontal, Wrench, RotateCw, Square, BadgeCheck, Shield, ClipboardList, ArrowUpCircle, Contact, Scale, BookA, Quote, Inbox, CalendarX, CalendarCheck, Phone, Pause, Minimize2, Maximize2, Minus, CalendarSearch, DoorOpen, AlertCircle } from 'lucide-react';
100
+ 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, 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, Cake, X, UserRound, Star, Tag, Video, CalendarDays, MapPin, Globe, Calendar, Hash, File as File$1, FileType, FolderOpen, Fingerprint, Paperclip, CircleCheck, TriangleAlert, LoaderCircle, NotebookPen, Columns3, EyeOff, ArrowUp, ArrowDown, ZoomOut, Camera, FilePlus2, UserMinus, UserPlus, UsersRound, Code2, Infinity, ChevronDown, MoreHorizontal, Wrench, RotateCw, Square, BadgeCheck, Shield, ClipboardList, ArrowUpCircle, Contact, Scale, BookA, Quote, Inbox, CalendarX, CalendarCheck, Phone, LogIn, Pause, Minimize2, Maximize2, Minus, CalendarSearch, DoorOpen, AlertCircle } from 'lucide-react';
101
101
  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, Label, Input, Textarea, DialogHeader, DialogTitle, DialogDescription, tagKindNouns, tagKindTitle, IconToggle, Switch, Checkbox, DialogTrigger, ProjectEntity, DialogFooter, getDocIcon, getDocumentNature, getDocumentAuthor, markdownToPlainText, formatDocDate, getDocumentDate, friendlyFileType, canonicalFolderPath, DebouncedInput, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Slider, AgentBadge, PresenceLabel, TooltipProvider, EntityPill, Popover, PopoverAnchor, PopoverTrigger, PopoverContent, Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, ScrollArea, ArbiIcon, Tabs, TabsList, TabsTrigger, TabsContent, ARBI_MARK_SRC, VerifiedToggle, Progress } from '@arbidocs/react/ui';
102
102
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
103
103
  import { hasMessageBody, notify, linkMentions, useNotify, sharedSearchSession, takePendingSearch, useTurnDocumentId, useOpenDocumentId, useRegisterOpenDocument } from '@arbidocs/react/shell';
@@ -8192,6 +8192,32 @@ function ConnectedSsoDisconnect() {
8192
8192
  )
8193
8193
  ] });
8194
8194
  }
8195
+ function ConnectedBoxPortalSection() {
8196
+ const { isBoxAdmin } = useBoxRole();
8197
+ const { licenceUrl } = useBlocksEnvironment().runtimeConfig;
8198
+ if (!isBoxAdmin || !licenceUrl) return null;
8199
+ return /* @__PURE__ */ jsx(SettingsSection, { icon: /* @__PURE__ */ jsx(Building2, {}), title: "Box", testId: "box-portal-section", children: /* @__PURE__ */ jsx(SettingsCard, { children: /* @__PURE__ */ jsx(
8200
+ SettingsRow,
8201
+ {
8202
+ label: "Manage your Box in the ARBI portal",
8203
+ description: "Users, storage, AI usage and billing.",
8204
+ children: /* @__PURE__ */ jsxs(
8205
+ "a",
8206
+ {
8207
+ href: licenceUrl,
8208
+ target: "_blank",
8209
+ rel: "noopener noreferrer",
8210
+ className: "inline-flex shrink-0 items-center gap-1.5 self-start rounded-md border border-input bg-background px-3 py-1.5 text-sm font-medium text-foreground hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11",
8211
+ "data-testid": "box-portal-link",
8212
+ children: [
8213
+ "Open portal",
8214
+ /* @__PURE__ */ jsx(ExternalLink$1, { className: "size-3.5", "aria-hidden": true })
8215
+ ]
8216
+ }
8217
+ )
8218
+ }
8219
+ ) }) });
8220
+ }
8195
8221
  function ServerConnectionRow({ onRefresh, ...status }) {
8196
8222
  const { runtimeConfig } = useBlocksEnvironment();
8197
8223
  const [isRefreshing, setIsRefreshing] = useState(false);
@@ -8230,6 +8256,7 @@ function ConnectedAccountSettings({
8230
8256
  const [logoutOpen, setLogoutOpen] = useState(false);
8231
8257
  return /* @__PURE__ */ jsxs(SettingsPanel, { className: "max-w-2xl", children: [
8232
8258
  /* @__PURE__ */ jsx(ConnectedProfileCard, { avatarClassName, nameBadge: profileBadge }),
8259
+ /* @__PURE__ */ jsx(ConnectedBoxPortalSection, {}),
8233
8260
  afterProfile,
8234
8261
  /* @__PURE__ */ jsxs(SettingsDisclosure, { title: "More", testId: "account-more-settings", children: [
8235
8262
  /* @__PURE__ */ jsx(ConnectedSsoDisconnect, {}),
@@ -9914,6 +9941,62 @@ function organisationSettingsSection({
9914
9941
  )
9915
9942
  };
9916
9943
  }
9944
+ function appearanceSettingsSection(options2) {
9945
+ const TabIcon = options2.theme ? Palette : Type;
9946
+ return {
9947
+ id: "appearance",
9948
+ label: "Appearance",
9949
+ icon: /* @__PURE__ */ jsx(TabIcon, { className: "w-6 h-6" }),
9950
+ render: () => /* @__PURE__ */ jsx(AppearanceSection, { ...options2 })
9951
+ };
9952
+ }
9953
+ function AppearanceSection({
9954
+ appearance,
9955
+ theme,
9956
+ themePreview,
9957
+ icon: icon2 = /* @__PURE__ */ jsx(Palette, { className: "size-4" }),
9958
+ description = "Colours and type on this device."
9959
+ }) {
9960
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
9961
+ appearance && /* @__PURE__ */ jsx(ReaderAppearance, { bundle: appearance }),
9962
+ theme && /* @__PURE__ */ jsx(
9963
+ SettingsSection,
9964
+ {
9965
+ icon: icon2,
9966
+ title: "Appearance",
9967
+ description,
9968
+ testId: appearance ? "settings-appearance-theme" : "settings-appearance",
9969
+ children: /* @__PURE__ */ jsx(
9970
+ ThemeEditor,
9971
+ {
9972
+ bundle: theme,
9973
+ variant: "collapsed",
9974
+ preview: themePreview,
9975
+ testIdPrefix: "settings-theme"
9976
+ }
9977
+ )
9978
+ }
9979
+ )
9980
+ ] });
9981
+ }
9982
+ function ReaderAppearance({ bundle }) {
9983
+ const state = bundle.useStore();
9984
+ const { defaults } = bundle;
9985
+ const isDefault = state.pairingId === defaults.pairingId && state.colorScheme === defaults.colorScheme && state.textSize === defaults.textSize;
9986
+ return /* @__PURE__ */ jsx(
9987
+ AppearanceSettings,
9988
+ {
9989
+ colorScheme: state.colorScheme,
9990
+ onColorSchemeChange: state.setColorScheme,
9991
+ textSize: state.textSize,
9992
+ onTextSizeChange: state.setTextSize,
9993
+ pairingId: state.pairingId,
9994
+ onPairingChange: state.setPairing,
9995
+ pairingIds: bundle.pairingIds,
9996
+ onReset: isDefault ? void 0 : state.reset
9997
+ }
9998
+ );
9999
+ }
9917
10000
  function ConnectedProjectStorage({ projectExtId }) {
9918
10001
  const { data, isLoading } = useStorageProjects("mine", projectExtId);
9919
10002
  const project = data?.projects.find((p) => p.project_ext_id === projectExtId);
@@ -11288,6 +11371,46 @@ function ConnectedDriveSyncDialog({
11288
11371
  }
11289
11372
  );
11290
11373
  }
11374
+ function ConnectedSharePointAdminConsentPage({
11375
+ result: givenResult
11376
+ } = {}) {
11377
+ const queryResult = useMemo(() => new URLSearchParams(window.location.search).get("result"), []);
11378
+ const result = givenResult === void 0 ? queryResult : givenResult;
11379
+ const { apiBaseUrl } = useBlocksEnvironment().runtimeConfig;
11380
+ const consentUrl = `${apiBaseUrl}/v1/connectors/microsoft_sharepoint/admin-consent`;
11381
+ return /* @__PURE__ */ jsx(ConsentPage, { children: /* @__PURE__ */ jsxs(ConsentCard, { size: "md", children: [
11382
+ /* @__PURE__ */ jsx(
11383
+ ConsentHeader,
11384
+ {
11385
+ icon: /* @__PURE__ */ jsx(VendorLogo, { vendorKey: "microsoft_sharepoint", product: "sharepoint" }),
11386
+ title: "Approve ARBI for SharePoint access",
11387
+ children: "A member of your organization uses ARBI and wants to sync documents from SharePoint. Your Microsoft 365 organization requires an administrator to approve this once for the whole organization."
11388
+ }
11389
+ ),
11390
+ result === "granted" && /* @__PURE__ */ jsx(ConsentNotice, { tone: "success", title: "Access approved \u2014 you\u2019re all set.", className: "mt-4", children: "People in your organization can now connect SharePoint from their own ARBI account. Nothing is synced until each user connects and chooses what to import." }),
11391
+ result === "declined" && /* @__PURE__ */ jsx(ConsentNotice, { tone: "warning", title: "The approval didn\u2019t complete.", className: "mt-4", children: "The request was declined or canceled on the Microsoft screen. You can try again below \u2014 you must sign in with a Microsoft 365 administrator account of your organization." }),
11392
+ /* @__PURE__ */ jsxs(ConsentSection, { title: "What you are approving", children: [
11393
+ /* @__PURE__ */ jsx(
11394
+ ConsentBulletList,
11395
+ {
11396
+ items: [
11397
+ /* @__PURE__ */ jsxs(Fragment, { children: [
11398
+ /* @__PURE__ */ jsx(ConsentStrong, { children: "Read SharePoint sites and files" }),
11399
+ " \u2014 lets each user who connects their own account import documents from sites they already have access to. ARBI never gets more access than the user has."
11400
+ ] }),
11401
+ /* @__PURE__ */ jsxs(Fragment, { children: [
11402
+ /* @__PURE__ */ jsx(ConsentStrong, { children: "Sign users in and keep access" }),
11403
+ " \u2014 standard sign-in (openid, profile, email) and offline access so syncs keep working between sessions."
11404
+ ] })
11405
+ ]
11406
+ }
11407
+ ),
11408
+ /* @__PURE__ */ jsx(ConsentText, { children: "Approving does not sync anything by itself and grants ARBI no standing access to your tenant. Each user still connects their own Microsoft account, and their tokens are end-to-end encrypted so ARBI\u2019s servers cannot read them at rest." }),
11409
+ /* @__PURE__ */ jsx(Button, { asChild: true, className: "w-full pointer-coarse:h-11", children: /* @__PURE__ */ jsx("a", { href: consentUrl, children: "Review and approve in Microsoft" }) }),
11410
+ /* @__PURE__ */ jsx(ConsentText, { variant: "footnote", children: "You\u2019ll sign in at login.microsoftonline.com and see Microsoft\u2019s own summary of these permissions before anything is granted." })
11411
+ ] })
11412
+ ] }) });
11413
+ }
11291
11414
  var focus = null;
11292
11415
  var listeners2 = /* @__PURE__ */ new Set();
11293
11416
  function requestProjectBillingFocus(next) {
@@ -14056,8 +14179,13 @@ function useAutoRefreshPendingProjects() {
14056
14179
  var QUOTA_EXCEEDED_MESSAGE = "This project's AI usage for this month is used up.";
14057
14180
  var BOX_MEMBER_QUOTA_MESSAGE = "AI usage for this month is used up. Ask your Box admin to add more.";
14058
14181
  var BOX_ADMIN_QUOTA_MESSAGE = "AI usage for this month is used up. Add more in the ARBI portal.";
14059
- function ConnectedQuotaDialog({ info, onClose: close, box }) {
14060
- const { openProject } = useBlocksEnvironment();
14182
+ function ConnectedQuotaDialog({ info, onClose: close }) {
14183
+ const { openProject, runtimeConfig } = useBlocksEnvironment();
14184
+ const role = useBoxRole({ enabled: info !== null });
14185
+ const box = role.isBox ? {
14186
+ isAdmin: role.isBoxAdmin && !!runtimeConfig.licenceUrl,
14187
+ portalUrl: runtimeConfig.licenceUrl
14188
+ } : void 0;
14061
14189
  const { data: projects, refetch: refetchProjects } = useProjects();
14062
14190
  const [addAiUsageFor, setAddAiUsageFor] = useState(null);
14063
14191
  const open = info !== null;
@@ -14250,7 +14378,7 @@ function ConnectedWelcomeDialog({
14250
14378
  }
14251
14379
  ) });
14252
14380
  }
14253
- const firstName = currentUser?.given_name;
14381
+ const firstName2 = currentUser?.given_name;
14254
14382
  const hasBalance = balance !== null;
14255
14383
  const quotaItems = getQuotaItems(selectedProject.quotas);
14256
14384
  const resetTs = aiUsageResetTimestamp(selectedProject);
@@ -14260,7 +14388,7 @@ function ConnectedWelcomeDialog({
14260
14388
  {
14261
14389
  open,
14262
14390
  onClose: () => handleOpenChange(false),
14263
- firstName,
14391
+ firstName: firstName2,
14264
14392
  hasReward: hasBalance,
14265
14393
  projectPicker: /* @__PURE__ */ jsx(
14266
14394
  ProjectPicker,
@@ -14564,7 +14692,7 @@ function useConnectedWorkspaceList({
14564
14692
  };
14565
14693
  }
14566
14694
  var WorkspaceTableView = lazy(
14567
- () => import('../WorkspaceTableView-ECPHGWHF.js').then((m) => ({ default: m.WorkspaceTableView }))
14695
+ () => import('../WorkspaceTableView-S2PTTVHL.js').then((m) => ({ default: m.WorkspaceTableView }))
14568
14696
  );
14569
14697
  var WORKSPACES_TAB_ID = "workspaces";
14570
14698
  var defaultRenderMember2 = (user, size) => {
@@ -14703,6 +14831,242 @@ function ConnectedWorkspaceList({
14703
14831
  ) }) }) })
14704
14832
  ] });
14705
14833
  }
14834
+ function workspaceSummary(w) {
14835
+ return {
14836
+ id: w.external_id,
14837
+ name: w.name,
14838
+ description: w.description ?? void 0,
14839
+ isPublic: !!w.is_public,
14840
+ documentCount: workspaceDocumentCount(w),
14841
+ conversationCount: workspaceConversationCount(w),
14842
+ memberCount: w.users?.length ?? 0,
14843
+ filesMb: w.user_files_mb ?? 0,
14844
+ updatedAt: w.updated_at
14845
+ };
14846
+ }
14847
+ function distinctMembers(workspaces) {
14848
+ const byId = /* @__PURE__ */ new Map();
14849
+ for (const w of workspaces) {
14850
+ for (const member of w.users ?? []) {
14851
+ const user = member.user;
14852
+ const id = user?.external_id;
14853
+ if (!id || byId.has(id)) continue;
14854
+ const name = [user.given_name, user.family_name].filter(Boolean).join(" ").trim();
14855
+ byId.set(id, {
14856
+ id,
14857
+ name: name || user.email || "Unknown",
14858
+ email: user.email ?? "",
14859
+ role: member.role ?? "member",
14860
+ isAgent: Boolean(member.agent_ext_id) || isAgentAccount(user)
14861
+ });
14862
+ }
14863
+ }
14864
+ return [...byId.values()];
14865
+ }
14866
+ function buildProjectSummaries(projects, workspaces) {
14867
+ const byProject = /* @__PURE__ */ new Map();
14868
+ for (const w of workspaces ?? []) {
14869
+ const id = w.project_ext_id;
14870
+ if (!id) continue;
14871
+ byProject.set(id, [...byProject.get(id) ?? [], w]);
14872
+ }
14873
+ const summaries = (projects ?? []).map((p) => {
14874
+ const own = byProject.get(p.external_id) ?? [];
14875
+ const storage = p.quotas?.storage_gb;
14876
+ const aiUsage = p.quotas?.ai_usage;
14877
+ const stats = workspaceGroupStats(own);
14878
+ return {
14879
+ id: p.external_id,
14880
+ name: p.name,
14881
+ createdAt: p.created_at,
14882
+ subscription: p.subscription ?? "none",
14883
+ workspaces: own.map(workspaceSummary),
14884
+ workspaceCount: own.length,
14885
+ documentCount: stats.documents,
14886
+ conversationCount: stats.conversations,
14887
+ members: distinctMembers(own),
14888
+ memberCount: stats.members,
14889
+ filesMb: own.reduce((sum, w) => sum + (w.user_files_mb ?? 0), 0),
14890
+ storageUsedGb: storage?.used ?? 0,
14891
+ storageLimitGb: storage?.limit ?? 0,
14892
+ aiUsageUsed: aiUsage?.used ?? 0,
14893
+ aiUsageLimit: aiUsage?.limit ?? 0,
14894
+ client: p.client ?? null,
14895
+ clientRef: p.client_ref ?? null,
14896
+ stage: p.stage ?? null,
14897
+ leadUser: p.lead_user ?? null,
14898
+ budget: p.budget ?? null,
14899
+ fields: p.fields ?? {}
14900
+ };
14901
+ });
14902
+ const work = (s) => s.documentCount + s.conversationCount;
14903
+ return summaries.sort((a, b) => work(b) - work(a));
14904
+ }
14905
+ function useProjectSummaries() {
14906
+ const projects = useProjects();
14907
+ const workspaces = useWorkspaces();
14908
+ const summaries = useMemo(
14909
+ () => buildProjectSummaries(
14910
+ projects.data,
14911
+ workspaces.data
14912
+ ),
14913
+ [projects.data, workspaces.data]
14914
+ );
14915
+ return {
14916
+ projects: summaries,
14917
+ isLoading: projects.isLoading || workspaces.isLoading,
14918
+ isError: projects.isError || workspaces.isError,
14919
+ error: projects.error ?? workspaces.error
14920
+ };
14921
+ }
14922
+ function useProjectSummary(projectId) {
14923
+ const { projects, isLoading, isError } = useProjectSummaries();
14924
+ const project = useMemo(() => projects.find((p) => p.id === projectId), [projects, projectId]);
14925
+ const usage = useProjectUsage(projectId, 0, { enabled: !!projectId });
14926
+ return { project, usage: usage.data, usageLoading: usage.isLoading, isLoading, isError };
14927
+ }
14928
+ function primaryProjectWorkspace(project) {
14929
+ const work = (w) => w.documentCount + w.conversationCount;
14930
+ return [...project.workspaces].sort((a, b) => work(b) - work(a))[0];
14931
+ }
14932
+ var DEFAULT_PROJECT_LIST_COLUMNS = [
14933
+ "name",
14934
+ "client",
14935
+ "stage",
14936
+ "documents",
14937
+ "conversations",
14938
+ "members",
14939
+ "storage"
14940
+ ];
14941
+ var DEFAULT_PROJECTS_LIST_LABELS = {
14942
+ title: "Projects",
14943
+ description: "Every project: its client, stage, documents and the work on it.",
14944
+ searchPlaceholder: "Search projects and workspaces\u2026",
14945
+ columns: {
14946
+ name: "Project",
14947
+ client: "Client",
14948
+ stage: "Stage",
14949
+ documents: "Documents",
14950
+ conversations: "Threads",
14951
+ members: "Team",
14952
+ storage: "Storage"
14953
+ },
14954
+ opened: "opened",
14955
+ loadingTitle: "Loading projects\u2026",
14956
+ loadingDescription: "Fetching your projects.",
14957
+ emptyTitle: "No projects yet"
14958
+ };
14959
+ function formatStorageGb(gb3) {
14960
+ if (gb3 <= 0) return "\u2014";
14961
+ if (gb3 < 0.1) return `${Math.round(gb3 * 1024)} MB`;
14962
+ return `${gb3.toFixed(2)} GB`;
14963
+ }
14964
+ function ProjectsListPage({
14965
+ labels: given,
14966
+ columns: shown = DEFAULT_PROJECT_LIST_COLUMNS,
14967
+ actions,
14968
+ testId = "projects"
14969
+ }) {
14970
+ const labels = {
14971
+ ...DEFAULT_PROJECTS_LIST_LABELS,
14972
+ ...given,
14973
+ columns: { ...DEFAULT_PROJECTS_LIST_LABELS.columns, ...given?.columns }
14974
+ };
14975
+ const { openProject } = useBlocksEnvironment();
14976
+ const [search, setSearch] = useState("");
14977
+ const { projects, isLoading } = useProjectSummaries();
14978
+ const rows = useMemo(() => {
14979
+ const q = search.trim().toLowerCase();
14980
+ if (!q) return projects;
14981
+ return projects.filter(
14982
+ (p) => p.name.toLowerCase().includes(q) || p.workspaces.some((w) => w.name.toLowerCase().includes(q))
14983
+ );
14984
+ }, [search, projects]);
14985
+ const all = {
14986
+ name: {
14987
+ key: "name",
14988
+ header: labels.columns.name,
14989
+ render: (p) => /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
14990
+ /* @__PURE__ */ jsx("p", { className: "max-w-[22rem] truncate font-medium text-foreground", children: p.name }),
14991
+ /* @__PURE__ */ jsxs("p", { className: "truncate text-xs text-muted-foreground", children: [
14992
+ /* @__PURE__ */ jsx("span", { className: "font-mono", children: p.clientRef || p.id }),
14993
+ " \xB7 ",
14994
+ labels.opened,
14995
+ " ",
14996
+ fmtDate(p.createdAt)
14997
+ ] })
14998
+ ] })
14999
+ },
15000
+ client: {
15001
+ key: "client",
15002
+ header: labels.columns.client,
15003
+ render: (p) => /* @__PURE__ */ jsx("span", { className: "text-sm text-foreground", children: p.client || "\u2014" })
15004
+ },
15005
+ stage: {
15006
+ key: "stage",
15007
+ header: labels.columns.stage,
15008
+ render: (p) => p.stage ? /* @__PURE__ */ jsx(Badge, { variant: "secondary", children: p.stage }) : /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: "\u2014" })
15009
+ },
15010
+ documents: {
15011
+ key: "documents",
15012
+ header: labels.columns.documents,
15013
+ align: "right",
15014
+ render: (p) => /* @__PURE__ */ jsx("span", { className: "font-medium text-foreground", children: p.documentCount.toLocaleString() })
15015
+ },
15016
+ conversations: {
15017
+ key: "conversations",
15018
+ header: labels.columns.conversations,
15019
+ align: "right",
15020
+ render: (p) => /* @__PURE__ */ jsx("span", { className: "font-medium text-foreground", children: p.conversationCount.toLocaleString() })
15021
+ },
15022
+ members: {
15023
+ key: "team",
15024
+ header: labels.columns.members,
15025
+ render: (p) => p.memberCount ? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5 text-sm text-foreground", children: [
15026
+ /* @__PURE__ */ jsx(Users, { className: "size-3.5 text-muted-foreground" }),
15027
+ p.memberCount
15028
+ ] }) : /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: "\u2014" })
15029
+ },
15030
+ storage: {
15031
+ key: "storage",
15032
+ header: labels.columns.storage,
15033
+ align: "right",
15034
+ render: (p) => /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: formatStorageGb(p.storageUsedGb) })
15035
+ }
15036
+ };
15037
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-6", "data-testid": `page-${testId}`, children: [
15038
+ /* @__PURE__ */ jsx(
15039
+ PageHeader,
15040
+ {
15041
+ eyebrow: labels.eyebrow,
15042
+ title: labels.title,
15043
+ description: labels.description,
15044
+ actions
15045
+ }
15046
+ ),
15047
+ /* @__PURE__ */ jsx(
15048
+ Toolbar,
15049
+ {
15050
+ search,
15051
+ onSearch: setSearch,
15052
+ searchPlaceholder: labels.searchPlaceholder,
15053
+ testId: `${testId}-toolbar`
15054
+ }
15055
+ ),
15056
+ /* @__PURE__ */ jsx(
15057
+ DataTable,
15058
+ {
15059
+ area: testId,
15060
+ columns: shown.map((c) => all[c]),
15061
+ rows,
15062
+ getRowId: (p) => p.id,
15063
+ onRowClick: (p) => openProject(p.id),
15064
+ emptyTitle: isLoading ? labels.loadingTitle : labels.emptyTitle,
15065
+ emptyDescription: isLoading ? labels.loadingDescription : labels.emptyDescription
15066
+ }
15067
+ )
15068
+ ] });
15069
+ }
14706
15070
  var PROJECTS_BASE_TAB_ID = "projects";
14707
15071
  var isPaid = (p) => p.subscription === "active" || p.subscription === "past_due";
14708
15072
  function useLocalProjectTabs() {
@@ -14722,6 +15086,13 @@ function useLocalProjectTabs() {
14722
15086
  };
14723
15087
  }
14724
15088
  function ConnectedProjectsPanel({
15089
+ layout = "panel",
15090
+ page,
15091
+ ...panel
15092
+ }) {
15093
+ return layout === "page" ? /* @__PURE__ */ jsx(ProjectsListPage, { ...page }) : /* @__PURE__ */ jsx(ProjectsPanel, { ...panel });
15094
+ }
15095
+ function ProjectsPanel({
14725
15096
  tabs: hostTabs,
14726
15097
  projectStorage,
14727
15098
  footer,
@@ -14824,104 +15195,6 @@ function ConnectedProjectsPanel({
14824
15195
  ] });
14825
15196
  return hostTabs ? panel : /* @__PURE__ */ jsx(ArbiHost, { config: localHost, children: panel });
14826
15197
  }
14827
- function workspaceSummary(w) {
14828
- return {
14829
- id: w.external_id,
14830
- name: w.name,
14831
- description: w.description ?? void 0,
14832
- isPublic: !!w.is_public,
14833
- documentCount: workspaceDocumentCount(w),
14834
- conversationCount: workspaceConversationCount(w),
14835
- memberCount: w.users?.length ?? 0,
14836
- filesMb: w.user_files_mb ?? 0,
14837
- updatedAt: w.updated_at
14838
- };
14839
- }
14840
- function distinctMembers(workspaces) {
14841
- const byId = /* @__PURE__ */ new Map();
14842
- for (const w of workspaces) {
14843
- for (const member of w.users ?? []) {
14844
- const user = member.user;
14845
- const id = user?.external_id;
14846
- if (!id || byId.has(id)) continue;
14847
- const name = [user.given_name, user.family_name].filter(Boolean).join(" ").trim();
14848
- byId.set(id, {
14849
- id,
14850
- name: name || user.email || "Unknown",
14851
- email: user.email ?? "",
14852
- role: member.role ?? "member",
14853
- isAgent: Boolean(member.agent_ext_id) || isAgentAccount(user)
14854
- });
14855
- }
14856
- }
14857
- return [...byId.values()];
14858
- }
14859
- function buildProjectSummaries(projects, workspaces) {
14860
- const byProject = /* @__PURE__ */ new Map();
14861
- for (const w of workspaces ?? []) {
14862
- const id = w.project_ext_id;
14863
- if (!id) continue;
14864
- byProject.set(id, [...byProject.get(id) ?? [], w]);
14865
- }
14866
- const summaries = (projects ?? []).map((p) => {
14867
- const own = byProject.get(p.external_id) ?? [];
14868
- const storage = p.quotas?.storage_gb;
14869
- const aiUsage = p.quotas?.ai_usage;
14870
- const stats = workspaceGroupStats(own);
14871
- return {
14872
- id: p.external_id,
14873
- name: p.name,
14874
- createdAt: p.created_at,
14875
- subscription: p.subscription ?? "none",
14876
- workspaces: own.map(workspaceSummary),
14877
- workspaceCount: own.length,
14878
- documentCount: stats.documents,
14879
- conversationCount: stats.conversations,
14880
- members: distinctMembers(own),
14881
- memberCount: stats.members,
14882
- filesMb: own.reduce((sum, w) => sum + (w.user_files_mb ?? 0), 0),
14883
- storageUsedGb: storage?.used ?? 0,
14884
- storageLimitGb: storage?.limit ?? 0,
14885
- aiUsageUsed: aiUsage?.used ?? 0,
14886
- aiUsageLimit: aiUsage?.limit ?? 0,
14887
- client: p.client ?? null,
14888
- clientRef: p.client_ref ?? null,
14889
- stage: p.stage ?? null,
14890
- leadUser: p.lead_user ?? null,
14891
- budget: p.budget ?? null,
14892
- fields: p.fields ?? {}
14893
- };
14894
- });
14895
- const work = (s) => s.documentCount + s.conversationCount;
14896
- return summaries.sort((a, b) => work(b) - work(a));
14897
- }
14898
- function useProjectSummaries() {
14899
- const projects = useProjects();
14900
- const workspaces = useWorkspaces();
14901
- const summaries = useMemo(
14902
- () => buildProjectSummaries(
14903
- projects.data,
14904
- workspaces.data
14905
- ),
14906
- [projects.data, workspaces.data]
14907
- );
14908
- return {
14909
- projects: summaries,
14910
- isLoading: projects.isLoading || workspaces.isLoading,
14911
- isError: projects.isError || workspaces.isError,
14912
- error: projects.error ?? workspaces.error
14913
- };
14914
- }
14915
- function useProjectSummary(projectId) {
14916
- const { projects, isLoading, isError } = useProjectSummaries();
14917
- const project = useMemo(() => projects.find((p) => p.id === projectId), [projects, projectId]);
14918
- const usage = useProjectUsage(projectId, 0, { enabled: !!projectId });
14919
- return { project, usage: usage.data, usageLoading: usage.isLoading, isLoading, isError };
14920
- }
14921
- function primaryProjectWorkspace(project) {
14922
- const work = (w) => w.documentCount + w.conversationCount;
14923
- return [...project.workspaces].sort((a, b) => work(b) - work(a))[0];
14924
- }
14925
15198
  function RowsEditor({
14926
15199
  label,
14927
15200
  rows,
@@ -35822,15 +36095,74 @@ async function backUpOnSignup({
35822
36095
  }
35823
36096
  }
35824
36097
 
35825
- // src/connection/auth/useLoginActions.ts
36098
+ // src/connection/auth/sso-name.ts
36099
+ var clean = (value) => value?.trim() ?? "";
36100
+ function resolveSsoName(profile, preferred = {}, emailFallback) {
36101
+ const fullName = clean(profile.name);
36102
+ let given = clean(preferred.given_name) || clean(profile.given_name);
36103
+ let family = clean(preferred.family_name) || clean(profile.family_name);
36104
+ if (!given && fullName) {
36105
+ const surnameAtEnd = family && fullName.length > family.length && fullName.toLowerCase().endsWith(family.toLowerCase());
36106
+ given = surnameAtEnd ? fullName.slice(0, fullName.length - family.length).trim() : fullName.split(/\s+/)[0];
36107
+ }
36108
+ if (!family && given && fullName.toLowerCase().startsWith(given.toLowerCase())) {
36109
+ family = fullName.slice(given.length).trim();
36110
+ }
36111
+ if (!given && emailFallback) given = emailFallback.split("@")[0];
36112
+ return { given_name: given, family_name: family };
36113
+ }
36114
+
36115
+ // src/connection/auth/sso-sign-in.ts
36116
+ function ssoAccountStatus(arbi, token, user) {
36117
+ return arbi.sso.status({ token, email: user.email, picture: user.picture });
36118
+ }
36119
+ async function completeSsoSignIn(arbi, { token, user, status, password, saveRecoveryKey = true }) {
36120
+ const email = user.email;
36121
+ if (status.status === "new_user") {
36122
+ const { given_name: firstName2, family_name: lastName } = resolveSsoName(user, status, email);
36123
+ const { signingPrivateKey } = await arbi.sso.register({
36124
+ token,
36125
+ email,
36126
+ password,
36127
+ firstName: firstName2,
36128
+ lastName,
36129
+ picture: user.picture
36130
+ });
36131
+ await backUpOnSignup({
36132
+ email,
36133
+ password,
36134
+ signingPrivateKey,
36135
+ saveRecoveryKey,
36136
+ auth0Sub: user.sub
36137
+ });
36138
+ const login2 = await arbi.sso.login({
36139
+ token,
36140
+ email,
36141
+ password,
36142
+ profile: { ...resolveSsoName(user, status), picture: user.picture ?? null }
36143
+ });
36144
+ return { login: login2, registered: true, linked: false };
36145
+ }
36146
+ const linked = status.status === "local_exists";
36147
+ const signIn = linked ? arbi.sso.link : arbi.sso.login;
36148
+ const login = await signIn({ token, email, password });
36149
+ return { login: login ?? void 0, registered: false, linked };
36150
+ }
35826
36151
  var BAD_CREDENTIALS = "This username/password combination is not valid. Please double-check your credentials and try again.";
35827
36152
  function useLoginActions({
35828
36153
  formState,
35829
- formActions
36154
+ formActions,
36155
+ onError
35830
36156
  }) {
35831
36157
  const arbi = useArbi();
36158
+ const signInLayer = useOptionalConnection();
35832
36159
  const sso = useSsoSignIn();
35833
- const { notify: notify17 } = useBlocksEnvironment();
36160
+ const environment = useBlocksEnvironment();
36161
+ const environmentNotify = environment.notify;
36162
+ const notify17 = useCallback(
36163
+ (...args) => args[1] === "error" && onError && typeof args[0] === "string" ? onError(args[0]) : environmentNotify(...args),
36164
+ [environmentNotify, onError]
36165
+ );
35834
36166
  const { passwordRules, onRegistered, onUnlockedOffline } = useAuthPages();
35835
36167
  const [isAuthenticating, setIsAuthenticating] = useState(false);
35836
36168
  const [isRequestingCode, setIsRequestingCode] = useState(false);
@@ -35838,7 +36170,7 @@ function useLoginActions({
35838
36170
  email,
35839
36171
  password,
35840
36172
  confirmPassword,
35841
- firstName,
36173
+ firstName: firstName2,
35842
36174
  lastName,
35843
36175
  verificationCode,
35844
36176
  cooldownSeconds
@@ -35890,14 +36222,16 @@ function useLoginActions({
35890
36222
  const handleLocalLogin = useCallback(
35891
36223
  async (opts) => {
35892
36224
  arbi.session?.setSsoMode(false);
35893
- if (!password) {
36225
+ const loginEmail = opts?.credentials?.email ?? email;
36226
+ const loginPassword = opts?.credentials?.password ?? password;
36227
+ if (!loginPassword) {
35894
36228
  notify17("Please fill in all required fields.", "error");
35895
36229
  return;
35896
36230
  }
35897
- if (!validateEmailWithError(email)) return;
36231
+ if (!validateEmailWithError(loginEmail)) return;
35898
36232
  if (typeof navigator !== "undefined" && !navigator.onLine) {
35899
36233
  try {
35900
- await arbi.unlock(email, password);
36234
+ await arbi.unlock(loginEmail, loginPassword);
35901
36235
  onUnlockedOffline?.();
35902
36236
  } catch (err) {
35903
36237
  notify17(
@@ -35907,10 +36241,15 @@ function useLoginActions({
35907
36241
  }
35908
36242
  return;
35909
36243
  }
36244
+ if (signInLayer && !signInLayer.apiConfigured) {
36245
+ await signInLayer.login(loginEmail, loginPassword);
36246
+ return;
36247
+ }
35910
36248
  setIsAuthenticating(true);
35911
36249
  try {
35912
- const login = await arbi.login(email, password);
36250
+ const login = await arbi.login(loginEmail, loginPassword);
35913
36251
  if (opts?.isFreshRegistration) onRegistered?.(login);
36252
+ return login;
35914
36253
  } catch (error) {
35915
36254
  setIsAuthenticating(false);
35916
36255
  console.error("Login error:", error);
@@ -35922,12 +36261,21 @@ function useLoginActions({
35922
36261
  );
35923
36262
  }
35924
36263
  },
35925
- [arbi, email, password, validateEmailWithError, notify17, onRegistered, onUnlockedOffline]
36264
+ [
36265
+ arbi,
36266
+ signInLayer,
36267
+ email,
36268
+ password,
36269
+ validateEmailWithError,
36270
+ notify17,
36271
+ onRegistered,
36272
+ onUnlockedOffline
36273
+ ]
35926
36274
  );
35927
36275
  const handleRegister = useCallback(
35928
36276
  async (saveRecoveryKey = true) => {
35929
36277
  arbi.session?.setSsoMode(false);
35930
- if (!password || !confirmPassword || !firstName || !lastName || !verificationCode) {
36278
+ if (!password || !confirmPassword || !firstName2 || !lastName || !verificationCode) {
35931
36279
  notify17("Please fill in all required fields.", "error");
35932
36280
  return;
35933
36281
  }
@@ -35947,7 +36295,7 @@ function useLoginActions({
35947
36295
  email,
35948
36296
  password,
35949
36297
  verificationCode: verificationCode.trim(),
35950
- firstName,
36298
+ firstName: firstName2,
35951
36299
  lastName
35952
36300
  });
35953
36301
  await backUpOnSignup({ email, password, signingPrivateKey, saveRecoveryKey });
@@ -35963,7 +36311,7 @@ function useLoginActions({
35963
36311
  email,
35964
36312
  password,
35965
36313
  confirmPassword,
35966
- firstName,
36314
+ firstName2,
35967
36315
  lastName,
35968
36316
  verificationCode,
35969
36317
  validateEmailWithError,
@@ -35987,7 +36335,7 @@ function useLoginForm() {
35987
36335
  const [email, setEmail] = useState("");
35988
36336
  const [password, setPassword] = useState("");
35989
36337
  const [confirmPassword, setConfirmPassword] = useState("");
35990
- const [firstName, setFirstName] = useState("");
36338
+ const [firstName2, setFirstName] = useState("");
35991
36339
  const [lastName, setLastName] = useState("");
35992
36340
  const [verificationCode, setVerificationCode] = useState("");
35993
36341
  const [verificationSent, setVerificationSent] = useState(false);
@@ -36123,7 +36471,7 @@ function useLoginForm() {
36123
36471
  email,
36124
36472
  password,
36125
36473
  confirmPassword,
36126
- firstName,
36474
+ firstName: firstName2,
36127
36475
  lastName,
36128
36476
  verificationCode,
36129
36477
  verificationSent,
@@ -36159,36 +36507,242 @@ function useLoginForm() {
36159
36507
  };
36160
36508
  return { ...state, ...actions };
36161
36509
  }
36162
- function useRegisterSubmitState(isRegistering, isPending, password, confirmPassword, email, firstName, lastName, verificationCode, isPasswordValid) {
36510
+ function useRegisterSubmitState(isRegistering, isPending, password, confirmPassword, email, firstName2, lastName, verificationCode, isPasswordValid) {
36163
36511
  const isDisabled = useMemo(() => {
36164
36512
  if (!isRegistering) return false;
36165
- return isPending || !isPasswordValid(password) || password !== confirmPassword || !email || !firstName || !lastName || !verificationCode;
36513
+ return isPending || !isPasswordValid(password) || password !== confirmPassword || !email || !firstName2 || !lastName || !verificationCode;
36166
36514
  }, [
36167
36515
  isRegistering,
36168
36516
  isPending,
36169
36517
  password,
36170
36518
  confirmPassword,
36171
36519
  email,
36172
- firstName,
36520
+ firstName2,
36173
36521
  lastName,
36174
36522
  verificationCode,
36175
36523
  isPasswordValid
36176
36524
  ]);
36177
36525
  const isDefault = useMemo(() => {
36178
36526
  if (!isRegistering) return false;
36179
- return email && password && confirmPassword && firstName && lastName && verificationCode && isPasswordValid(password) && password === confirmPassword;
36527
+ return email && password && confirmPassword && firstName2 && lastName && verificationCode && isPasswordValid(password) && password === confirmPassword;
36180
36528
  }, [
36181
36529
  isRegistering,
36182
36530
  email,
36183
36531
  password,
36184
36532
  confirmPassword,
36185
- firstName,
36533
+ firstName2,
36186
36534
  lastName,
36187
36535
  verificationCode,
36188
36536
  isPasswordValid
36189
36537
  ]);
36190
36538
  return { isDisabled, isDefault };
36191
36539
  }
36540
+ var firstName = (user, fallback) => user?.given_name || fallback.split("@")[0];
36541
+ function CompactLogin({
36542
+ onSsoSignIn,
36543
+ onSignedIn,
36544
+ appName = "ARBI",
36545
+ ssoName = appName
36546
+ }) {
36547
+ const arbi = useArbi();
36548
+ const auth = useAuthPages();
36549
+ const { notify: notify17 } = useBlocksEnvironment();
36550
+ const isSsoOnly = !!auth.ssoOnly;
36551
+ const [error, setError] = useState(null);
36552
+ const formState = useLoginForm();
36553
+ const { email, password, setEmail, setPassword } = formState;
36554
+ const { isAuthenticating, handleLocalLogin } = useLoginActions({
36555
+ formState,
36556
+ formActions: formState,
36557
+ onError: setError
36558
+ });
36559
+ const [sso, setSso] = useState(null);
36560
+ const [masterPassword, setMasterPassword] = useState("");
36561
+ const signInLocally = async (e) => {
36562
+ e.preventDefault();
36563
+ setError(null);
36564
+ const login = await handleLocalLogin();
36565
+ if (login) onSignedIn?.(firstName(login.response?.user, email));
36566
+ };
36567
+ const finishSso = async () => {
36568
+ if (!sso?.user.email) {
36569
+ setError("User email not available");
36570
+ return;
36571
+ }
36572
+ try {
36573
+ const status = await ssoAccountStatus(arbi, sso.accessToken, sso.user);
36574
+ const { login } = await completeSsoSignIn(arbi, {
36575
+ token: sso.accessToken,
36576
+ user: sso.user,
36577
+ status,
36578
+ password: masterPassword
36579
+ });
36580
+ const name = login?.response?.user.given_name ?? sso.user.given_name ?? sso.user.name;
36581
+ setError(null);
36582
+ setSso(null);
36583
+ setMasterPassword("");
36584
+ const shown = name ?? sso.user.email.split("@")[0];
36585
+ notify17(`Welcome, ${shown}!`, "success");
36586
+ onSignedIn?.(shown);
36587
+ } catch (err) {
36588
+ console.error("[SSO] Error during authentication:", err);
36589
+ setError(parseAuthError(err, { defaultMessage: "Authentication failed. Please try again." }));
36590
+ }
36591
+ };
36592
+ const startSso = async () => {
36593
+ if (!onSsoSignIn) return;
36594
+ try {
36595
+ const result = await onSsoSignIn();
36596
+ if (result) setSso(result);
36597
+ } catch (err) {
36598
+ setError(err instanceof Error ? err.message : "Authentication failed. Please try again.");
36599
+ }
36600
+ };
36601
+ const cancelSso = () => {
36602
+ setSso(null);
36603
+ setMasterPassword("");
36604
+ setError(null);
36605
+ };
36606
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-4", "data-testid": "embedded-auth", children: [
36607
+ error && /* @__PURE__ */ jsx(
36608
+ "div",
36609
+ {
36610
+ className: "bg-destructive/10 text-destructive p-3 rounded-md",
36611
+ "data-testid": "embedded-auth-error",
36612
+ children: /* @__PURE__ */ jsx("p", { className: "text-sm", children: error })
36613
+ }
36614
+ ),
36615
+ sso ? /* @__PURE__ */ jsxs(
36616
+ "form",
36617
+ {
36618
+ onSubmit: (e) => {
36619
+ e.preventDefault();
36620
+ if (masterPassword) void finishSso();
36621
+ },
36622
+ className: "space-y-3",
36623
+ children: [
36624
+ /* @__PURE__ */ jsxs("p", { className: "text-sm text-muted-foreground", children: [
36625
+ "Enter your ",
36626
+ appName,
36627
+ " ",
36628
+ /* @__PURE__ */ jsx("strong", { children: "master password" }),
36629
+ " \u2014 the encryption passphrase you set when you first registered, not your ",
36630
+ ssoName,
36631
+ " sign-in password."
36632
+ ] }),
36633
+ /* @__PURE__ */ jsx(
36634
+ Input,
36635
+ {
36636
+ type: "password",
36637
+ placeholder: "Enter master password",
36638
+ value: masterPassword,
36639
+ onChange: (e) => setMasterPassword(e.target.value),
36640
+ autoFocus: true,
36641
+ "data-testid": "embedded-auth-password-input"
36642
+ }
36643
+ ),
36644
+ /* @__PURE__ */ jsx(
36645
+ Button,
36646
+ {
36647
+ type: "submit",
36648
+ className: "w-full",
36649
+ disabled: !masterPassword,
36650
+ "data-testid": "embedded-auth-continue-button",
36651
+ children: "Continue"
36652
+ }
36653
+ ),
36654
+ /* @__PURE__ */ jsx(
36655
+ Button,
36656
+ {
36657
+ type: "button",
36658
+ variant: "outline",
36659
+ className: "w-full",
36660
+ onClick: cancelSso,
36661
+ "data-testid": "embedded-auth-cancel-button",
36662
+ children: "Cancel"
36663
+ }
36664
+ )
36665
+ ]
36666
+ }
36667
+ ) : isSsoOnly ? /* @__PURE__ */ jsxs(Fragment, { children: [
36668
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: "Please sign in with your organization account." }),
36669
+ /* @__PURE__ */ jsxs(
36670
+ Button,
36671
+ {
36672
+ onClick: () => void startSso(),
36673
+ className: "w-full",
36674
+ "data-testid": "embedded-auth-sso-button",
36675
+ children: [
36676
+ /* @__PURE__ */ jsx(LogIn, { className: "mr-2 h-4 w-4" }),
36677
+ "Sign in with ",
36678
+ ssoName
36679
+ ]
36680
+ }
36681
+ )
36682
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
36683
+ /* @__PURE__ */ jsxs("form", { onSubmit: (e) => void signInLocally(e), className: "space-y-3", children: [
36684
+ /* @__PURE__ */ jsx(
36685
+ Input,
36686
+ {
36687
+ type: "email",
36688
+ placeholder: "Email",
36689
+ value: email,
36690
+ onChange: (e) => setEmail(e.target.value),
36691
+ required: true,
36692
+ disabled: isAuthenticating,
36693
+ "data-testid": "embedded-auth-email-input"
36694
+ }
36695
+ ),
36696
+ /* @__PURE__ */ jsx(
36697
+ Input,
36698
+ {
36699
+ type: "password",
36700
+ placeholder: "Password",
36701
+ value: password,
36702
+ onChange: (e) => setPassword(e.target.value),
36703
+ required: true,
36704
+ disabled: isAuthenticating,
36705
+ "data-testid": "embedded-auth-password-input"
36706
+ }
36707
+ ),
36708
+ /* @__PURE__ */ jsx(
36709
+ Button,
36710
+ {
36711
+ type: "submit",
36712
+ className: "w-full",
36713
+ disabled: isAuthenticating,
36714
+ "data-testid": "embedded-auth-signin-button",
36715
+ children: isAuthenticating ? /* @__PURE__ */ jsxs(Fragment, { children: [
36716
+ /* @__PURE__ */ jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }),
36717
+ "Signing in..."
36718
+ ] }) : "Sign In"
36719
+ }
36720
+ )
36721
+ ] }),
36722
+ onSsoSignIn && /* @__PURE__ */ jsxs(Fragment, { children: [
36723
+ /* @__PURE__ */ jsxs("div", { className: "relative", children: [
36724
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center", children: /* @__PURE__ */ jsx("span", { className: "w-full border-t" }) }),
36725
+ /* @__PURE__ */ jsx("div", { className: "relative flex justify-center text-sm uppercase", children: /* @__PURE__ */ jsx("span", { className: "bg-background px-2 text-muted-foreground", children: "Or" }) })
36726
+ ] }),
36727
+ /* @__PURE__ */ jsxs(
36728
+ Button,
36729
+ {
36730
+ onClick: () => void startSso(),
36731
+ className: "w-full",
36732
+ variant: "outline",
36733
+ "data-testid": "embedded-auth-sso-option-button",
36734
+ children: [
36735
+ /* @__PURE__ */ jsx(LogIn, { className: "mr-2 h-4 w-4" }),
36736
+ "Sign in with ",
36737
+ ssoName,
36738
+ " (SSO)"
36739
+ ]
36740
+ }
36741
+ )
36742
+ ] })
36743
+ ] })
36744
+ ] });
36745
+ }
36192
36746
  function useSsoVerificationRedirect() {
36193
36747
  const sso = useSsoSignIn();
36194
36748
  const { notify: notify17 } = useBlocksEnvironment();
@@ -36226,11 +36780,18 @@ function warmSodium() {
36226
36780
  if (typeof window.requestIdleCallback === "function") window.requestIdleCallback(run);
36227
36781
  else window.setTimeout(run, 200);
36228
36782
  }
36229
- function ConnectedLoginPage() {
36783
+ function ConnectedLoginPage({
36784
+ layout = "page",
36785
+ ...compact
36786
+ } = {}) {
36787
+ return layout === "compact" ? /* @__PURE__ */ jsx(CompactLogin, { ...compact }) : /* @__PURE__ */ jsx(LoginPage, {});
36788
+ }
36789
+ function LoginPage() {
36230
36790
  const sso = useSsoSignIn();
36231
36791
  const auth = useAuthPages();
36232
36792
  const { notify: notify17 } = useBlocksEnvironment();
36233
36793
  const isSsoOnly = !!auth.ssoOnly;
36794
+ const allowRegistration = auth.allowRegistration ?? true;
36234
36795
  const isOnline = useIsOnline();
36235
36796
  const passwordRules = auth.passwordRules;
36236
36797
  useSsoVerificationRedirect();
@@ -36240,7 +36801,7 @@ function ConnectedLoginPage() {
36240
36801
  email,
36241
36802
  password,
36242
36803
  confirmPassword,
36243
- firstName,
36804
+ firstName: firstName2,
36244
36805
  lastName,
36245
36806
  verificationCode,
36246
36807
  verificationSent,
@@ -36281,7 +36842,7 @@ function ConnectedLoginPage() {
36281
36842
  password,
36282
36843
  confirmPassword,
36283
36844
  email,
36284
- firstName,
36845
+ firstName2,
36285
36846
  lastName,
36286
36847
  verificationCode,
36287
36848
  passwordRules.isValid
@@ -36291,13 +36852,21 @@ function ConnectedLoginPage() {
36291
36852
  auth.onIntent?.();
36292
36853
  };
36293
36854
  useEffect(() => {
36294
- if (!isOnline) setIsRegistering(false);
36295
- }, [isOnline, setIsRegistering]);
36855
+ if (!isOnline || !allowRegistration) setIsRegistering(false);
36856
+ }, [isOnline, allowRegistration, setIsRegistering]);
36857
+ useFragmentCredentials({
36858
+ enabled: !!auth.fragmentSignIn,
36859
+ onCredentials: ({ email: linkEmail, password: linkPassword, next }) => {
36860
+ setEmail(linkEmail);
36861
+ if (next) auth.onReturnPath?.(next);
36862
+ void handleLocalLogin({ credentials: { email: linkEmail, password: linkPassword } });
36863
+ }
36864
+ });
36296
36865
  const autoRequestFiredRef = useRef(false);
36297
36866
  const emailInputRef = useRef(null);
36298
36867
  useEffect(() => {
36299
36868
  if (!pendingAutoRequest || autoRequestFiredRef.current) return;
36300
- if (isSsoOnly || !isOnline) return;
36869
+ if (isSsoOnly || !isOnline || !allowRegistration) return;
36301
36870
  autoRequestFiredRef.current = true;
36302
36871
  setPendingAutoRequest(false);
36303
36872
  void handleRequestVerificationCode();
@@ -36305,6 +36874,7 @@ function ConnectedLoginPage() {
36305
36874
  pendingAutoRequest,
36306
36875
  isSsoOnly,
36307
36876
  isOnline,
36877
+ allowRegistration,
36308
36878
  setPendingAutoRequest,
36309
36879
  handleRequestVerificationCode
36310
36880
  ]);
@@ -36394,12 +36964,18 @@ function ConnectedLoginPage() {
36394
36964
  {
36395
36965
  brand: auth.brand,
36396
36966
  corner: auth.corner,
36397
- headerRight: !isSsoOnly ? isOnline ? loginRegisterToggle : offlineIndicator : void 0,
36967
+ headerRight: isSsoOnly ? void 0 : !isOnline ? offlineIndicator : allowRegistration ? loginRegisterToggle : void 0,
36398
36968
  aside,
36399
36969
  children: [
36400
36970
  auth.banner,
36401
36971
  !isSsoOnly && /* @__PURE__ */ jsxs(Fragment, { children: [
36402
- /* @__PURE__ */ jsx(AuthHeading, { title: isRegistering ? "Create your account" : "Welcome back" }),
36972
+ /* @__PURE__ */ jsx(
36973
+ AuthHeading,
36974
+ {
36975
+ title: isRegistering ? "Create your account" : auth.heading?.title ?? "Welcome back",
36976
+ description: isRegistering ? void 0 : auth.heading?.description
36977
+ }
36978
+ ),
36403
36979
  /* @__PURE__ */ jsxs("div", { "data-testid": "login-form-container", children: [
36404
36980
  /* @__PURE__ */ jsxs(
36405
36981
  "form",
@@ -36414,7 +36990,7 @@ function ConnectedLoginPage() {
36414
36990
  AuthField,
36415
36991
  {
36416
36992
  htmlFor: "email",
36417
- label: "Email",
36993
+ label: isRegistering ? "Email" : auth.emailLabel ?? "Email",
36418
36994
  required: true,
36419
36995
  labelAction: isRegistering && verificationSent ? /* @__PURE__ */ jsx(AuthLink, { onClick: clearForm, "data-testid": "clear-button", children: "Clear form" }) : void 0,
36420
36996
  trailing: (
@@ -36520,7 +37096,7 @@ function ConnectedLoginPage() {
36520
37096
  {
36521
37097
  type: "text",
36522
37098
  placeholder: "",
36523
- value: firstName,
37099
+ value: firstName2,
36524
37100
  onChange: (e) => setFirstName(e.target.value),
36525
37101
  "data-testid": "firstname-input",
36526
37102
  name: "firstName",
@@ -36699,6 +37275,46 @@ function ConnectedLoginPage() {
36699
37275
  }
36700
37276
  );
36701
37277
  }
37278
+
37279
+ // src/connection/auth/sso-popup.ts
37280
+ function openSsoPopup(url, { features = "width=600,height=700" } = {}) {
37281
+ return new Promise((resolve, reject) => {
37282
+ const opened = window.open(url, "auth", features);
37283
+ if (!opened) {
37284
+ resolve(null);
37285
+ return;
37286
+ }
37287
+ const popup = opened;
37288
+ const closedPoll = setInterval(() => {
37289
+ if (popup.closed) {
37290
+ done();
37291
+ resolve(null);
37292
+ }
37293
+ }, 500);
37294
+ const done = () => {
37295
+ window.removeEventListener("message", onMessage);
37296
+ clearInterval(closedPoll);
37297
+ };
37298
+ function onMessage(event) {
37299
+ if (event.origin !== window.location.origin) return;
37300
+ const data = event.data;
37301
+ if (data?.error) {
37302
+ done();
37303
+ reject(new Error(data.error));
37304
+ return;
37305
+ }
37306
+ if (!data?.accessToken) return;
37307
+ done();
37308
+ if (!popup.closed) popup.close();
37309
+ if (!data.user) {
37310
+ reject(new Error("Invalid authentication response"));
37311
+ return;
37312
+ }
37313
+ resolve({ accessToken: data.accessToken, user: data.user });
37314
+ }
37315
+ window.addEventListener("message", onMessage);
37316
+ });
37317
+ }
36702
37318
  var MAX_RESEND_WARNING_THRESHOLD = 3;
36703
37319
  var MAX_RESEND_BLOCK_THRESHOLD = 6;
36704
37320
  var RATE_LIMIT_COOLDOWN_MS = 6e4;
@@ -36772,23 +37388,6 @@ function SsoResendVerificationButton({
36772
37388
  }
36773
37389
  ) : /* @__PURE__ */ jsx(Fragment, {});
36774
37390
  }
36775
-
36776
- // src/connection/auth/sso-name.ts
36777
- var clean = (value) => value?.trim() ?? "";
36778
- function resolveSsoName(profile, preferred = {}, emailFallback) {
36779
- const fullName = clean(profile.name);
36780
- let given = clean(preferred.given_name) || clean(profile.given_name);
36781
- let family = clean(preferred.family_name) || clean(profile.family_name);
36782
- if (!given && fullName) {
36783
- const surnameAtEnd = family && fullName.length > family.length && fullName.toLowerCase().endsWith(family.toLowerCase());
36784
- given = surnameAtEnd ? fullName.slice(0, fullName.length - family.length).trim() : fullName.split(/\s+/)[0];
36785
- }
36786
- if (!family && given && fullName.toLowerCase().startsWith(given.toLowerCase())) {
36787
- family = fullName.slice(given.length).trim();
36788
- }
36789
- if (!given && emailFallback) given = emailFallback.split("@")[0];
36790
- return { given_name: given, family_name: family };
36791
- }
36792
37391
  var NO_RECOVERY_KEY_WARNING2 = "Without your password or a recovery key, we cannot recover your account or data.";
36793
37392
  function ConnectedSsoCallback() {
36794
37393
  const sso = useSsoSignIn();
@@ -36978,11 +37577,7 @@ function ConnectedSsoCallback() {
36978
37577
  setIsCheckingStatus(true);
36979
37578
  try {
36980
37579
  console.info("[SSO] Checking user status...");
36981
- const response = await arbi.sso.status({
36982
- token: accessToken,
36983
- email: user.email,
36984
- picture: user.picture
36985
- });
37580
+ const response = await ssoAccountStatus(arbi, accessToken, user);
36986
37581
  console.info("[SSO] User status:", response.status);
36987
37582
  setSsoStatus(response);
36988
37583
  } catch (error2) {
@@ -37026,40 +37621,18 @@ function ConnectedSsoCallback() {
37026
37621
  setIsSubmitting(true);
37027
37622
  setError(null);
37028
37623
  try {
37029
- const email = user.email;
37030
- if (ssoStatus.status === "new_user") {
37031
- const { given_name: firstName, family_name: lastName } = resolveSsoName(
37032
- user,
37033
- ssoStatus,
37034
- email
37035
- );
37036
- const { signingPrivateKey } = await arbi.sso.register({
37037
- token: accessToken,
37038
- email,
37039
- password,
37040
- firstName,
37041
- lastName,
37042
- picture: user.picture
37043
- });
37044
- await backUpOnSignup({
37045
- email,
37046
- password,
37047
- signingPrivateKey,
37048
- saveRecoveryKey,
37049
- auth0Sub: user.sub
37050
- });
37051
- const login = await arbi.sso.login({
37052
- token: accessToken,
37053
- email,
37054
- password,
37055
- profile: { ...resolveSsoName(user, ssoStatus), picture: user.picture ?? null }
37056
- });
37624
+ const { login, registered, linked } = await completeSsoSignIn(arbi, {
37625
+ token: accessToken,
37626
+ user,
37627
+ status: ssoStatus,
37628
+ password,
37629
+ saveRecoveryKey
37630
+ });
37631
+ if (registered && login) {
37057
37632
  auth.onRegistered?.(login);
37058
37633
  return;
37059
37634
  }
37060
- const signIn = ssoStatus.status === "local_exists" ? arbi.sso.link : arbi.sso.login;
37061
- await signIn({ token: accessToken, email, password });
37062
- if (ssoStatus.status === "local_exists") {
37635
+ if (linked) {
37063
37636
  notify17("Your local account has been linked to SSO", "success");
37064
37637
  }
37065
37638
  } catch (err) {
@@ -37837,6 +38410,6 @@ function ConnectedAccountAccessBadge() {
37837
38410
  ] });
37838
38411
  }
37839
38412
 
37840
- export { AddAddonDialog, AddFromAccountsButton, AgentBarShell, AgentControlBar, AgentSteps, AnswerTable, AskAgainContext, BACKFILL_OPTIONS, BULK_REPROCESS_LIMIT, BillingProjectEntity, ChangePlanDialog, ChatAttachmentList, ConnectedAccountAccessBadge, ConnectedAccountSettings, ConnectedAddContacts, ConnectedAgentChat, ConnectedAgentChatPanel, ConnectedAgentConfigForm, ConnectedAgentCreator, ConnectedAiReview, ConnectedAppsSettings, ConnectedAuthorizeAgent, ConnectedBranchControls, ConnectedBulkTagEditor, ConnectedCalendar, ConnectedChatThread, ConnectedCitationRenderer, ConnectedCompactConversation, ConnectedConfigForm, ConnectedContactCardForm, ConnectedContactToggle, ConnectedContactsDirectory, ConnectedConversation, ConnectedConversationDocumentPicker, ConnectedConversationEmpty, ConnectedConversationStart, ConnectedDangerZone, ConnectedDeploymentStorage, ConnectedDeveloperConfig, ConnectedDriveSyncDialog, ConnectedExportDialog, ConnectedExportPanel, ConnectedFactsPage, ConnectedFieldsEditor, ConnectedFieldsManager, ConnectedFilesBulkActions, ConnectedFilesExplorer, ConnectedFilesPage, ConnectedForgotPassword, ConnectedGrantWorkspaceAccessDialog, ConnectedGroupMembers, ConnectedIdentityVerification, ConnectedLoginPage, ConnectedLogoutDialog, ConnectedMailAccounts, ConnectedMailComposer, ConnectedMailInviteCard, ConnectedMailMessage, ConnectedMailSettings, ConnectedMailSetup, ConnectedMailbox, ConnectedMailboxSyncDialog, ConnectedMessage, ConnectedMessageArea, ConnectedMessageList, ConnectedMessenger, ConnectedModelSelector, ConnectedMoveToFolder, ConnectedNewThreadDialog, ConnectedNotificationCenter, ConnectedNotificationPreferences, ConnectedOAuthConsentPage, ConnectedPasswordChangeDialog, ConnectedPremiumModels, ConnectedPrivacySettings, ConnectedProfileCard, ConnectedProjectEntity, ConnectedProjectStorage, ConnectedProjectsPanel, ConnectedPublicBooking, ConnectedQuotaDialog, ConnectedRecentlyDeletedButton, ConnectedRecoveryKeyDialog, ConnectedRequestWorkspaceAccess, ConnectedRequireVerified, ConnectedSearchPage, ConnectedSecuritySection, ConnectedSessionsRow, ConnectedSettingsPage, ConnectedSharedFilesPage, ConnectedSignatureVerifyPage, ConnectedSkillUpload, ConnectedSkillsLibrary, ConnectedSsoCallback, ConnectedStorageProjectCard, ConnectedStorageSettings, ConnectedTagEditorDialog, ConnectedTagEntity, ConnectedTagForm, ConnectedTagTable, ConnectedTagsPage, ConnectedTaskAccessRequest, ConnectedTaskActivityDialog, ConnectedTaskComposer, ConnectedTaskStartDialog, ConnectedThreadFollow, ConnectedThreadLauncher, ConnectedThreadTabs, ConnectedThreadTaskBar, ConnectedThreadsPreview, ConnectedTransferWatcher, ConnectedUpcomingEvents, ConnectedUpload, ConnectedUploadDropzone, ConnectedUserEntity, ConnectedWelcomeDialog, ConnectedWorkflowHistory, ConnectedWorkflowRunner, ConnectedWorkflowStart, ConnectedWorkspaceActivity, ConnectedWorkspaceDashboard, ConnectedWorkspaceEntity, 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_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, RunStatsBadges, RunningSubagents, SEARCH_FIELD_OPTIONS, SETTINGS_SECTION_IDS, STANDARD_TIER_TAG, SessionStatusIcon, SharedProjects, SourceChips, SsoResendVerificationButton, StatusCell, StorageBreakdown, StorageItemsTable, StorageTiers, StreamedArtifact, TILE_DEFAULT, TILE_MAX, TILE_MIN, ThreadSwitcher, UserAvatar, ViewSelector, WORKSPACES_TAB_ID, WorkflowLaunchHost, WorkflowRunStatusCell, WorkflowRunThread, WorkflowStepMessage, accountSettingsSection, backUpOnSignup, bookingCancelLink, buildNotificationCenterItems, buildProjectSummaries, chatSettingsSection, closeAccessRequestReview, connectedAppsSettingsSection, connectionSettingsSection, countNotificationTypes, createDocumentColumns, createEventCall, createNotificationTargetOpener, createTagColumn, deduplicateByContentHash, defaultHost, describePlan, distinctPeers, documentFamilyMeta, documentFieldContent, filesViewMode, filterNotificationCenterItems, groupFallbackName, identifyOAuthClient, isActiveDocumentStatus, joinEventMeeting, loadEventWebinar, mailSettingsSection, openMeetingLink, 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, useAiReviewStore, useAuthPages, useAutoRefreshPendingProjects, useConnectedCalendarCalls, useConnectedNotificationBell, useConnectedShellWorkspaces, useConnectedThreadActivity, useConnectedWorkspaceList, useConnectedWorkspaceSettings, useDocumentBulkActions, useDocumentFilters, useDocumentFolders, useDocumentGridSync, useDocumentNavigation, useDocumentTable, useExportStore, useFilesDialogs, useFilesGridStates, useFilesPrefs, useFilesStore, useLaunchWorkflow, useMemberLookup, useMessengerRows, useModelPicker, useNotificationBellEntry, useOpenBillingPortal, useOpenChunk, useOpenNotificationTarget, useOpenWorkspaceActivityTarget, useOpenWorkspaceIcon, usePendingFolders, usePendingTaskThread, useProjectBillingFocus, useProjectSummaries, useProjectSummary, useReferralReward, useRenderTaskPerson, useResolvedDocStatus, useSkillsEnabled, useSlashItems, useSlashSkillWorkflows, useSsoSignIn, useStartRequestedDraft, useTableViews, useTaskPeople, useTaskStart, useThreadLabels, useThreadTabs, useWorkflowDefinitions, useWorkflowLaunch, useWorkflowTasks, useWorkspaceDocTitles, viewsOfTable, webinarRolesByUser, windowLabel, withMissingTableViews, withTableView, withoutTableView, workflowRunView };
38413
+ export { AddAddonDialog, AddFromAccountsButton, AgentBarShell, AgentControlBar, AgentSteps, AnswerTable, AskAgainContext, BACKFILL_OPTIONS, BULK_REPROCESS_LIMIT, BillingProjectEntity, ChangePlanDialog, ChatAttachmentList, ConnectedAccountAccessBadge, ConnectedAccountSettings, ConnectedAddContacts, ConnectedAgentChat, ConnectedAgentChatPanel, ConnectedAgentConfigForm, ConnectedAgentCreator, ConnectedAiReview, ConnectedAppsSettings, ConnectedAuthorizeAgent, ConnectedBranchControls, ConnectedBulkTagEditor, ConnectedCalendar, ConnectedChatThread, ConnectedCitationRenderer, ConnectedCompactConversation, ConnectedConfigForm, ConnectedContactCardForm, ConnectedContactToggle, ConnectedContactsDirectory, ConnectedConversation, ConnectedConversationDocumentPicker, ConnectedConversationEmpty, ConnectedConversationStart, ConnectedDangerZone, ConnectedDeploymentStorage, ConnectedDeveloperConfig, ConnectedDriveSyncDialog, ConnectedExportDialog, ConnectedExportPanel, ConnectedFactsPage, ConnectedFieldsEditor, ConnectedFieldsManager, ConnectedFilesBulkActions, ConnectedFilesExplorer, ConnectedFilesPage, ConnectedForgotPassword, ConnectedGrantWorkspaceAccessDialog, ConnectedGroupMembers, ConnectedIdentityVerification, ConnectedLoginPage, ConnectedLogoutDialog, ConnectedMailAccounts, ConnectedMailComposer, ConnectedMailInviteCard, ConnectedMailMessage, ConnectedMailSettings, ConnectedMailSetup, ConnectedMailbox, ConnectedMailboxSyncDialog, ConnectedMessage, ConnectedMessageArea, ConnectedMessageList, ConnectedMessenger, ConnectedModelSelector, ConnectedMoveToFolder, ConnectedNewThreadDialog, ConnectedNotificationCenter, ConnectedNotificationPreferences, ConnectedOAuthConsentPage, ConnectedPasswordChangeDialog, ConnectedPremiumModels, ConnectedPrivacySettings, ConnectedProfileCard, ConnectedProjectEntity, ConnectedProjectStorage, ConnectedProjectsPanel, ConnectedPublicBooking, ConnectedQuotaDialog, ConnectedRecentlyDeletedButton, ConnectedRecoveryKeyDialog, ConnectedRequestWorkspaceAccess, ConnectedRequireVerified, ConnectedSearchPage, ConnectedSecuritySection, ConnectedSessionsRow, ConnectedSettingsPage, ConnectedSharePointAdminConsentPage, ConnectedSharedFilesPage, ConnectedSignatureVerifyPage, ConnectedSkillUpload, ConnectedSkillsLibrary, ConnectedSsoCallback, ConnectedStorageProjectCard, ConnectedStorageSettings, ConnectedTagEditorDialog, ConnectedTagEntity, ConnectedTagForm, ConnectedTagTable, ConnectedTagsPage, ConnectedTaskAccessRequest, ConnectedTaskActivityDialog, ConnectedTaskComposer, ConnectedTaskStartDialog, ConnectedThreadFollow, ConnectedThreadLauncher, ConnectedThreadTabs, ConnectedThreadTaskBar, ConnectedThreadsPreview, ConnectedTransferWatcher, ConnectedUpcomingEvents, ConnectedUpload, ConnectedUploadDropzone, ConnectedUserEntity, ConnectedWelcomeDialog, ConnectedWorkflowHistory, ConnectedWorkflowRunner, ConnectedWorkflowStart, ConnectedWorkspaceActivity, ConnectedWorkspaceDashboard, ConnectedWorkspaceEntity, 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_LIST_COLUMNS, 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, RunStatsBadges, RunningSubagents, SEARCH_FIELD_OPTIONS, SETTINGS_SECTION_IDS, STANDARD_TIER_TAG, SessionStatusIcon, SharedProjects, SourceChips, SsoResendVerificationButton, 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, 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, useAiReviewStore, useAuthPages, useAutoRefreshPendingProjects, useConnectedCalendarCalls, useConnectedNotificationBell, useConnectedShellWorkspaces, useConnectedThreadActivity, useConnectedWorkspaceList, useConnectedWorkspaceSettings, useDocumentBulkActions, useDocumentFilters, useDocumentFolders, useDocumentGridSync, useDocumentNavigation, useDocumentTable, useExportStore, useFilesDialogs, useFilesGridStates, useFilesPrefs, useFilesStore, useLaunchWorkflow, useMemberLookup, useMessengerRows, useModelPicker, useNotificationBellEntry, useOpenBillingPortal, useOpenChunk, useOpenNotificationTarget, useOpenWorkspaceActivityTarget, useOpenWorkspaceIcon, usePendingFolders, usePendingTaskThread, useProjectBillingFocus, useProjectSummaries, useProjectSummary, useReferralReward, useRenderTaskPerson, useResolvedDocStatus, useSkillsEnabled, useSlashItems, useSlashSkillWorkflows, useSsoSignIn, useStartRequestedDraft, useTableViews, useTaskPeople, useTaskStart, useThreadLabels, useThreadTabs, useWorkflowDefinitions, useWorkflowLaunch, useWorkflowTasks, useWorkspaceDocTitles, viewsOfTable, webinarRolesByUser, windowLabel, withMissingTableViews, withTableView, withoutTableView, workflowRunView };
37841
38414
  //# sourceMappingURL=index.js.map
37842
38415
  //# sourceMappingURL=index.js.map