@arbidocs/blocks 0.5.23 → 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 (83) 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/{chunk-7DDMF3DZ.cjs → chunk-53T2FY4Z.cjs} +5 -31
  6. package/dist/chunk-53T2FY4Z.cjs.map +1 -0
  7. package/dist/chunk-5ZBXFHZW.js +434 -0
  8. package/dist/chunk-5ZBXFHZW.js.map +1 -0
  9. package/dist/{chunk-O4EQYPLO.cjs → chunk-C2SZQKX2.cjs} +169 -27
  10. package/dist/chunk-C2SZQKX2.cjs.map +1 -0
  11. package/dist/{chunk-RVKVGS72.js → chunk-FDUQQNDT.js} +2 -2
  12. package/dist/{chunk-RVKVGS72.js.map → chunk-FDUQQNDT.js.map} +1 -1
  13. package/dist/{chunk-TTJGCJWX.cjs → chunk-H3XAHVDT.cjs} +42 -2
  14. package/dist/chunk-H3XAHVDT.cjs.map +1 -0
  15. package/dist/{chunk-XL55UDLO.js → chunk-IJJKUTKM.js} +5 -30
  16. package/dist/chunk-IJJKUTKM.js.map +1 -0
  17. package/dist/{chunk-ZX663X3X.cjs → chunk-KNRAKOCO.cjs} +6 -428
  18. package/dist/chunk-KNRAKOCO.cjs.map +1 -0
  19. package/dist/chunk-KUQOHPKP.cjs +443 -0
  20. package/dist/chunk-KUQOHPKP.cjs.map +1 -0
  21. package/dist/{chunk-F2BYURQZ.cjs → chunk-LYF47OXX.cjs} +5 -5
  22. package/dist/{chunk-F2BYURQZ.cjs.map → chunk-LYF47OXX.cjs.map} +1 -1
  23. package/dist/{chunk-PZRTRYPD.js → chunk-MKTEVOC3.js} +44 -5
  24. package/dist/chunk-MKTEVOC3.js.map +1 -0
  25. package/dist/{chunk-6XW3CMU4.js → chunk-N3KNAQ55.js} +144 -4
  26. package/dist/chunk-N3KNAQ55.js.map +1 -0
  27. package/dist/{chunk-FZVAJFRH.cjs → chunk-RHKFCSFC.cjs} +2 -2
  28. package/dist/{chunk-FZVAJFRH.cjs.map → chunk-RHKFCSFC.cjs.map} +1 -1
  29. package/dist/{chunk-NVRJ6WTR.js → chunk-RTAYJUQM.js} +3 -3
  30. package/dist/{chunk-NVRJ6WTR.js.map → chunk-RTAYJUQM.js.map} +1 -1
  31. package/dist/{chunk-SLRVI2YU.js → chunk-X6U6L6BG.js} +29 -4
  32. package/dist/chunk-X6U6L6BG.js.map +1 -0
  33. package/dist/{chunk-SQ5F5BFW.cjs → chunk-XDU3HHUU.cjs} +32 -6
  34. package/dist/chunk-XDU3HHUU.cjs.map +1 -0
  35. package/dist/{chunk-SKVVOEMX.js → chunk-XXUPUXBF.js} +8 -423
  36. package/dist/chunk-XXUPUXBF.js.map +1 -0
  37. package/dist/connect/index.cjs +1039 -565
  38. package/dist/connect/index.cjs.map +1 -1
  39. package/dist/connect/index.js +649 -180
  40. package/dist/connect/index.js.map +1 -1
  41. package/dist/connection/auth/CompactLogin.d.ts +26 -0
  42. package/dist/connection/auth/ConnectedLoginPage.d.ts +9 -1
  43. package/dist/connection/auth/index.d.ts +3 -1
  44. package/dist/connection/auth/sso-popup.d.ts +13 -0
  45. package/dist/connection/auth/sso-sign-in.d.ts +38 -0
  46. package/dist/connection/auth/useLoginActions.d.ts +4 -2
  47. package/dist/connection/projects/ConnectedProjectsPanel.d.ts +9 -1
  48. package/dist/connection/projects/ProjectsListPage.d.ts +40 -0
  49. package/dist/connection/projects/index.d.ts +1 -0
  50. package/dist/connection/settings-page/appearanceSection.d.ts +30 -0
  51. package/dist/connection/settings-page/index.d.ts +1 -0
  52. package/dist/index.cjs +162 -190
  53. package/dist/index.cjs.map +1 -1
  54. package/dist/index.d.ts +2 -0
  55. package/dist/index.js +9 -48
  56. package/dist/index.js.map +1 -1
  57. package/dist/settings/AppearanceSettings.d.ts +1 -2
  58. package/dist/settings/index.cjs +153 -153
  59. package/dist/settings/index.d.ts +2 -1
  60. package/dist/settings/index.js +1 -1
  61. package/dist/site/index.cjs +82 -74
  62. package/dist/site/index.d.ts +2 -0
  63. package/dist/site/index.js +3 -3
  64. package/dist/studio/index.cjs +73 -73
  65. package/dist/studio/index.js +5 -5
  66. package/dist/theme/appearance.d.ts +47 -0
  67. package/dist/theme/fromCss.d.ts +33 -0
  68. package/node_modules/@arbidocs/coedit/package.json +1 -1
  69. package/package.json +5 -5
  70. package/dist/chunk-6XW3CMU4.js.map +0 -1
  71. package/dist/chunk-7DDMF3DZ.cjs.map +0 -1
  72. package/dist/chunk-AMTWY22T.js +0 -11
  73. package/dist/chunk-AMTWY22T.js.map +0 -1
  74. package/dist/chunk-O4EQYPLO.cjs.map +0 -1
  75. package/dist/chunk-PZRTRYPD.js.map +0 -1
  76. package/dist/chunk-SKVVOEMX.js.map +0 -1
  77. package/dist/chunk-SLRVI2YU.js.map +0 -1
  78. package/dist/chunk-SQ5F5BFW.cjs.map +0 -1
  79. package/dist/chunk-TTJGCJWX.cjs.map +0 -1
  80. package/dist/chunk-XL55UDLO.js.map +0 -1
  81. package/dist/chunk-ZU2B2RZK.cjs +0 -13
  82. package/dist/chunk-ZU2B2RZK.cjs.map +0 -1
  83. 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,7 +8,7 @@ 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';
@@ -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';
@@ -97,7 +97,7 @@ import { useWorkspaces, ArbiBotHeadIcon, IN_FLIGHT_DOCUMENT_STATUSES, useOffline
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';
@@ -9941,6 +9941,62 @@ function organisationSettingsSection({
9941
9941
  )
9942
9942
  };
9943
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
+ }
9944
10000
  function ConnectedProjectStorage({ projectExtId }) {
9945
10001
  const { data, isLoading } = useStorageProjects("mine", projectExtId);
9946
10002
  const project = data?.projects.find((p) => p.project_ext_id === projectExtId);
@@ -14322,7 +14378,7 @@ function ConnectedWelcomeDialog({
14322
14378
  }
14323
14379
  ) });
14324
14380
  }
14325
- const firstName = currentUser?.given_name;
14381
+ const firstName2 = currentUser?.given_name;
14326
14382
  const hasBalance = balance !== null;
14327
14383
  const quotaItems = getQuotaItems(selectedProject.quotas);
14328
14384
  const resetTs = aiUsageResetTimestamp(selectedProject);
@@ -14332,7 +14388,7 @@ function ConnectedWelcomeDialog({
14332
14388
  {
14333
14389
  open,
14334
14390
  onClose: () => handleOpenChange(false),
14335
- firstName,
14391
+ firstName: firstName2,
14336
14392
  hasReward: hasBalance,
14337
14393
  projectPicker: /* @__PURE__ */ jsx(
14338
14394
  ProjectPicker,
@@ -14636,7 +14692,7 @@ function useConnectedWorkspaceList({
14636
14692
  };
14637
14693
  }
14638
14694
  var WorkspaceTableView = lazy(
14639
- () => import('../WorkspaceTableView-ECPHGWHF.js').then((m) => ({ default: m.WorkspaceTableView }))
14695
+ () => import('../WorkspaceTableView-S2PTTVHL.js').then((m) => ({ default: m.WorkspaceTableView }))
14640
14696
  );
14641
14697
  var WORKSPACES_TAB_ID = "workspaces";
14642
14698
  var defaultRenderMember2 = (user, size) => {
@@ -14775,6 +14831,242 @@ function ConnectedWorkspaceList({
14775
14831
  ) }) }) })
14776
14832
  ] });
14777
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
+ }
14778
15070
  var PROJECTS_BASE_TAB_ID = "projects";
14779
15071
  var isPaid = (p) => p.subscription === "active" || p.subscription === "past_due";
14780
15072
  function useLocalProjectTabs() {
@@ -14794,6 +15086,13 @@ function useLocalProjectTabs() {
14794
15086
  };
14795
15087
  }
14796
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({
14797
15096
  tabs: hostTabs,
14798
15097
  projectStorage,
14799
15098
  footer,
@@ -14896,104 +15195,6 @@ function ConnectedProjectsPanel({
14896
15195
  ] });
14897
15196
  return hostTabs ? panel : /* @__PURE__ */ jsx(ArbiHost, { config: localHost, children: panel });
14898
15197
  }
14899
- function workspaceSummary(w) {
14900
- return {
14901
- id: w.external_id,
14902
- name: w.name,
14903
- description: w.description ?? void 0,
14904
- isPublic: !!w.is_public,
14905
- documentCount: workspaceDocumentCount(w),
14906
- conversationCount: workspaceConversationCount(w),
14907
- memberCount: w.users?.length ?? 0,
14908
- filesMb: w.user_files_mb ?? 0,
14909
- updatedAt: w.updated_at
14910
- };
14911
- }
14912
- function distinctMembers(workspaces) {
14913
- const byId = /* @__PURE__ */ new Map();
14914
- for (const w of workspaces) {
14915
- for (const member of w.users ?? []) {
14916
- const user = member.user;
14917
- const id = user?.external_id;
14918
- if (!id || byId.has(id)) continue;
14919
- const name = [user.given_name, user.family_name].filter(Boolean).join(" ").trim();
14920
- byId.set(id, {
14921
- id,
14922
- name: name || user.email || "Unknown",
14923
- email: user.email ?? "",
14924
- role: member.role ?? "member",
14925
- isAgent: Boolean(member.agent_ext_id) || isAgentAccount(user)
14926
- });
14927
- }
14928
- }
14929
- return [...byId.values()];
14930
- }
14931
- function buildProjectSummaries(projects, workspaces) {
14932
- const byProject = /* @__PURE__ */ new Map();
14933
- for (const w of workspaces ?? []) {
14934
- const id = w.project_ext_id;
14935
- if (!id) continue;
14936
- byProject.set(id, [...byProject.get(id) ?? [], w]);
14937
- }
14938
- const summaries = (projects ?? []).map((p) => {
14939
- const own = byProject.get(p.external_id) ?? [];
14940
- const storage = p.quotas?.storage_gb;
14941
- const aiUsage = p.quotas?.ai_usage;
14942
- const stats = workspaceGroupStats(own);
14943
- return {
14944
- id: p.external_id,
14945
- name: p.name,
14946
- createdAt: p.created_at,
14947
- subscription: p.subscription ?? "none",
14948
- workspaces: own.map(workspaceSummary),
14949
- workspaceCount: own.length,
14950
- documentCount: stats.documents,
14951
- conversationCount: stats.conversations,
14952
- members: distinctMembers(own),
14953
- memberCount: stats.members,
14954
- filesMb: own.reduce((sum, w) => sum + (w.user_files_mb ?? 0), 0),
14955
- storageUsedGb: storage?.used ?? 0,
14956
- storageLimitGb: storage?.limit ?? 0,
14957
- aiUsageUsed: aiUsage?.used ?? 0,
14958
- aiUsageLimit: aiUsage?.limit ?? 0,
14959
- client: p.client ?? null,
14960
- clientRef: p.client_ref ?? null,
14961
- stage: p.stage ?? null,
14962
- leadUser: p.lead_user ?? null,
14963
- budget: p.budget ?? null,
14964
- fields: p.fields ?? {}
14965
- };
14966
- });
14967
- const work = (s) => s.documentCount + s.conversationCount;
14968
- return summaries.sort((a, b) => work(b) - work(a));
14969
- }
14970
- function useProjectSummaries() {
14971
- const projects = useProjects();
14972
- const workspaces = useWorkspaces();
14973
- const summaries = useMemo(
14974
- () => buildProjectSummaries(
14975
- projects.data,
14976
- workspaces.data
14977
- ),
14978
- [projects.data, workspaces.data]
14979
- );
14980
- return {
14981
- projects: summaries,
14982
- isLoading: projects.isLoading || workspaces.isLoading,
14983
- isError: projects.isError || workspaces.isError,
14984
- error: projects.error ?? workspaces.error
14985
- };
14986
- }
14987
- function useProjectSummary(projectId) {
14988
- const { projects, isLoading, isError } = useProjectSummaries();
14989
- const project = useMemo(() => projects.find((p) => p.id === projectId), [projects, projectId]);
14990
- const usage = useProjectUsage(projectId, 0, { enabled: !!projectId });
14991
- return { project, usage: usage.data, usageLoading: usage.isLoading, isLoading, isError };
14992
- }
14993
- function primaryProjectWorkspace(project) {
14994
- const work = (w) => w.documentCount + w.conversationCount;
14995
- return [...project.workspaces].sort((a, b) => work(b) - work(a))[0];
14996
- }
14997
15198
  function RowsEditor({
14998
15199
  label,
14999
15200
  rows,
@@ -35894,16 +36095,74 @@ async function backUpOnSignup({
35894
36095
  }
35895
36096
  }
35896
36097
 
35897
- // 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
+ }
35898
36151
  var BAD_CREDENTIALS = "This username/password combination is not valid. Please double-check your credentials and try again.";
35899
36152
  function useLoginActions({
35900
36153
  formState,
35901
- formActions
36154
+ formActions,
36155
+ onError
35902
36156
  }) {
35903
36157
  const arbi = useArbi();
35904
36158
  const signInLayer = useOptionalConnection();
35905
36159
  const sso = useSsoSignIn();
35906
- 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
+ );
35907
36166
  const { passwordRules, onRegistered, onUnlockedOffline } = useAuthPages();
35908
36167
  const [isAuthenticating, setIsAuthenticating] = useState(false);
35909
36168
  const [isRequestingCode, setIsRequestingCode] = useState(false);
@@ -35911,7 +36170,7 @@ function useLoginActions({
35911
36170
  email,
35912
36171
  password,
35913
36172
  confirmPassword,
35914
- firstName,
36173
+ firstName: firstName2,
35915
36174
  lastName,
35916
36175
  verificationCode,
35917
36176
  cooldownSeconds
@@ -35990,6 +36249,7 @@ function useLoginActions({
35990
36249
  try {
35991
36250
  const login = await arbi.login(loginEmail, loginPassword);
35992
36251
  if (opts?.isFreshRegistration) onRegistered?.(login);
36252
+ return login;
35993
36253
  } catch (error) {
35994
36254
  setIsAuthenticating(false);
35995
36255
  console.error("Login error:", error);
@@ -36015,7 +36275,7 @@ function useLoginActions({
36015
36275
  const handleRegister = useCallback(
36016
36276
  async (saveRecoveryKey = true) => {
36017
36277
  arbi.session?.setSsoMode(false);
36018
- if (!password || !confirmPassword || !firstName || !lastName || !verificationCode) {
36278
+ if (!password || !confirmPassword || !firstName2 || !lastName || !verificationCode) {
36019
36279
  notify17("Please fill in all required fields.", "error");
36020
36280
  return;
36021
36281
  }
@@ -36035,7 +36295,7 @@ function useLoginActions({
36035
36295
  email,
36036
36296
  password,
36037
36297
  verificationCode: verificationCode.trim(),
36038
- firstName,
36298
+ firstName: firstName2,
36039
36299
  lastName
36040
36300
  });
36041
36301
  await backUpOnSignup({ email, password, signingPrivateKey, saveRecoveryKey });
@@ -36051,7 +36311,7 @@ function useLoginActions({
36051
36311
  email,
36052
36312
  password,
36053
36313
  confirmPassword,
36054
- firstName,
36314
+ firstName2,
36055
36315
  lastName,
36056
36316
  verificationCode,
36057
36317
  validateEmailWithError,
@@ -36075,7 +36335,7 @@ function useLoginForm() {
36075
36335
  const [email, setEmail] = useState("");
36076
36336
  const [password, setPassword] = useState("");
36077
36337
  const [confirmPassword, setConfirmPassword] = useState("");
36078
- const [firstName, setFirstName] = useState("");
36338
+ const [firstName2, setFirstName] = useState("");
36079
36339
  const [lastName, setLastName] = useState("");
36080
36340
  const [verificationCode, setVerificationCode] = useState("");
36081
36341
  const [verificationSent, setVerificationSent] = useState(false);
@@ -36211,7 +36471,7 @@ function useLoginForm() {
36211
36471
  email,
36212
36472
  password,
36213
36473
  confirmPassword,
36214
- firstName,
36474
+ firstName: firstName2,
36215
36475
  lastName,
36216
36476
  verificationCode,
36217
36477
  verificationSent,
@@ -36247,36 +36507,242 @@ function useLoginForm() {
36247
36507
  };
36248
36508
  return { ...state, ...actions };
36249
36509
  }
36250
- function useRegisterSubmitState(isRegistering, isPending, password, confirmPassword, email, firstName, lastName, verificationCode, isPasswordValid) {
36510
+ function useRegisterSubmitState(isRegistering, isPending, password, confirmPassword, email, firstName2, lastName, verificationCode, isPasswordValid) {
36251
36511
  const isDisabled = useMemo(() => {
36252
36512
  if (!isRegistering) return false;
36253
- return isPending || !isPasswordValid(password) || password !== confirmPassword || !email || !firstName || !lastName || !verificationCode;
36513
+ return isPending || !isPasswordValid(password) || password !== confirmPassword || !email || !firstName2 || !lastName || !verificationCode;
36254
36514
  }, [
36255
36515
  isRegistering,
36256
36516
  isPending,
36257
36517
  password,
36258
36518
  confirmPassword,
36259
36519
  email,
36260
- firstName,
36520
+ firstName2,
36261
36521
  lastName,
36262
36522
  verificationCode,
36263
36523
  isPasswordValid
36264
36524
  ]);
36265
36525
  const isDefault = useMemo(() => {
36266
36526
  if (!isRegistering) return false;
36267
- return email && password && confirmPassword && firstName && lastName && verificationCode && isPasswordValid(password) && password === confirmPassword;
36527
+ return email && password && confirmPassword && firstName2 && lastName && verificationCode && isPasswordValid(password) && password === confirmPassword;
36268
36528
  }, [
36269
36529
  isRegistering,
36270
36530
  email,
36271
36531
  password,
36272
36532
  confirmPassword,
36273
- firstName,
36533
+ firstName2,
36274
36534
  lastName,
36275
36535
  verificationCode,
36276
36536
  isPasswordValid
36277
36537
  ]);
36278
36538
  return { isDisabled, isDefault };
36279
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
+ }
36280
36746
  function useSsoVerificationRedirect() {
36281
36747
  const sso = useSsoSignIn();
36282
36748
  const { notify: notify17 } = useBlocksEnvironment();
@@ -36314,7 +36780,13 @@ function warmSodium() {
36314
36780
  if (typeof window.requestIdleCallback === "function") window.requestIdleCallback(run);
36315
36781
  else window.setTimeout(run, 200);
36316
36782
  }
36317
- 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() {
36318
36790
  const sso = useSsoSignIn();
36319
36791
  const auth = useAuthPages();
36320
36792
  const { notify: notify17 } = useBlocksEnvironment();
@@ -36329,7 +36801,7 @@ function ConnectedLoginPage() {
36329
36801
  email,
36330
36802
  password,
36331
36803
  confirmPassword,
36332
- firstName,
36804
+ firstName: firstName2,
36333
36805
  lastName,
36334
36806
  verificationCode,
36335
36807
  verificationSent,
@@ -36370,7 +36842,7 @@ function ConnectedLoginPage() {
36370
36842
  password,
36371
36843
  confirmPassword,
36372
36844
  email,
36373
- firstName,
36845
+ firstName2,
36374
36846
  lastName,
36375
36847
  verificationCode,
36376
36848
  passwordRules.isValid
@@ -36624,7 +37096,7 @@ function ConnectedLoginPage() {
36624
37096
  {
36625
37097
  type: "text",
36626
37098
  placeholder: "",
36627
- value: firstName,
37099
+ value: firstName2,
36628
37100
  onChange: (e) => setFirstName(e.target.value),
36629
37101
  "data-testid": "firstname-input",
36630
37102
  name: "firstName",
@@ -36803,6 +37275,46 @@ function ConnectedLoginPage() {
36803
37275
  }
36804
37276
  );
36805
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
+ }
36806
37318
  var MAX_RESEND_WARNING_THRESHOLD = 3;
36807
37319
  var MAX_RESEND_BLOCK_THRESHOLD = 6;
36808
37320
  var RATE_LIMIT_COOLDOWN_MS = 6e4;
@@ -36876,23 +37388,6 @@ function SsoResendVerificationButton({
36876
37388
  }
36877
37389
  ) : /* @__PURE__ */ jsx(Fragment, {});
36878
37390
  }
36879
-
36880
- // src/connection/auth/sso-name.ts
36881
- var clean = (value) => value?.trim() ?? "";
36882
- function resolveSsoName(profile, preferred = {}, emailFallback) {
36883
- const fullName = clean(profile.name);
36884
- let given = clean(preferred.given_name) || clean(profile.given_name);
36885
- let family = clean(preferred.family_name) || clean(profile.family_name);
36886
- if (!given && fullName) {
36887
- const surnameAtEnd = family && fullName.length > family.length && fullName.toLowerCase().endsWith(family.toLowerCase());
36888
- given = surnameAtEnd ? fullName.slice(0, fullName.length - family.length).trim() : fullName.split(/\s+/)[0];
36889
- }
36890
- if (!family && given && fullName.toLowerCase().startsWith(given.toLowerCase())) {
36891
- family = fullName.slice(given.length).trim();
36892
- }
36893
- if (!given && emailFallback) given = emailFallback.split("@")[0];
36894
- return { given_name: given, family_name: family };
36895
- }
36896
37391
  var NO_RECOVERY_KEY_WARNING2 = "Without your password or a recovery key, we cannot recover your account or data.";
36897
37392
  function ConnectedSsoCallback() {
36898
37393
  const sso = useSsoSignIn();
@@ -37082,11 +37577,7 @@ function ConnectedSsoCallback() {
37082
37577
  setIsCheckingStatus(true);
37083
37578
  try {
37084
37579
  console.info("[SSO] Checking user status...");
37085
- const response = await arbi.sso.status({
37086
- token: accessToken,
37087
- email: user.email,
37088
- picture: user.picture
37089
- });
37580
+ const response = await ssoAccountStatus(arbi, accessToken, user);
37090
37581
  console.info("[SSO] User status:", response.status);
37091
37582
  setSsoStatus(response);
37092
37583
  } catch (error2) {
@@ -37130,40 +37621,18 @@ function ConnectedSsoCallback() {
37130
37621
  setIsSubmitting(true);
37131
37622
  setError(null);
37132
37623
  try {
37133
- const email = user.email;
37134
- if (ssoStatus.status === "new_user") {
37135
- const { given_name: firstName, family_name: lastName } = resolveSsoName(
37136
- user,
37137
- ssoStatus,
37138
- email
37139
- );
37140
- const { signingPrivateKey } = await arbi.sso.register({
37141
- token: accessToken,
37142
- email,
37143
- password,
37144
- firstName,
37145
- lastName,
37146
- picture: user.picture
37147
- });
37148
- await backUpOnSignup({
37149
- email,
37150
- password,
37151
- signingPrivateKey,
37152
- saveRecoveryKey,
37153
- auth0Sub: user.sub
37154
- });
37155
- const login = await arbi.sso.login({
37156
- token: accessToken,
37157
- email,
37158
- password,
37159
- profile: { ...resolveSsoName(user, ssoStatus), picture: user.picture ?? null }
37160
- });
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) {
37161
37632
  auth.onRegistered?.(login);
37162
37633
  return;
37163
37634
  }
37164
- const signIn = ssoStatus.status === "local_exists" ? arbi.sso.link : arbi.sso.login;
37165
- await signIn({ token: accessToken, email, password });
37166
- if (ssoStatus.status === "local_exists") {
37635
+ if (linked) {
37167
37636
  notify17("Your local account has been linked to SSO", "success");
37168
37637
  }
37169
37638
  } catch (err) {
@@ -37941,6 +38410,6 @@ function ConnectedAccountAccessBadge() {
37941
38410
  ] });
37942
38411
  }
37943
38412
 
37944
- 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_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 };
37945
38414
  //# sourceMappingURL=index.js.map
37946
38415
  //# sourceMappingURL=index.js.map