@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.
- package/dist/{WorkspaceTableView-6JVHGDUB.cjs → WorkspaceTableView-GIDGNGBW.cjs} +6 -6
- package/dist/{WorkspaceTableView-6JVHGDUB.cjs.map → WorkspaceTableView-GIDGNGBW.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-ECPHGWHF.js → WorkspaceTableView-S2PTTVHL.js} +4 -4
- package/dist/{WorkspaceTableView-ECPHGWHF.js.map → WorkspaceTableView-S2PTTVHL.js.map} +1 -1
- package/dist/{chunk-7DDMF3DZ.cjs → chunk-53T2FY4Z.cjs} +5 -31
- package/dist/chunk-53T2FY4Z.cjs.map +1 -0
- package/dist/chunk-5ZBXFHZW.js +434 -0
- package/dist/chunk-5ZBXFHZW.js.map +1 -0
- package/dist/{chunk-O4EQYPLO.cjs → chunk-C2SZQKX2.cjs} +169 -27
- package/dist/chunk-C2SZQKX2.cjs.map +1 -0
- package/dist/{chunk-RVKVGS72.js → chunk-FDUQQNDT.js} +2 -2
- package/dist/{chunk-RVKVGS72.js.map → chunk-FDUQQNDT.js.map} +1 -1
- package/dist/{chunk-TTJGCJWX.cjs → chunk-H3XAHVDT.cjs} +42 -2
- package/dist/chunk-H3XAHVDT.cjs.map +1 -0
- package/dist/{chunk-XL55UDLO.js → chunk-IJJKUTKM.js} +5 -30
- package/dist/chunk-IJJKUTKM.js.map +1 -0
- package/dist/{chunk-ZX663X3X.cjs → chunk-KNRAKOCO.cjs} +6 -428
- package/dist/chunk-KNRAKOCO.cjs.map +1 -0
- package/dist/chunk-KUQOHPKP.cjs +443 -0
- package/dist/chunk-KUQOHPKP.cjs.map +1 -0
- package/dist/{chunk-F2BYURQZ.cjs → chunk-LYF47OXX.cjs} +5 -5
- package/dist/{chunk-F2BYURQZ.cjs.map → chunk-LYF47OXX.cjs.map} +1 -1
- package/dist/{chunk-PZRTRYPD.js → chunk-MKTEVOC3.js} +44 -5
- package/dist/chunk-MKTEVOC3.js.map +1 -0
- package/dist/{chunk-6XW3CMU4.js → chunk-N3KNAQ55.js} +144 -4
- package/dist/chunk-N3KNAQ55.js.map +1 -0
- package/dist/{chunk-FZVAJFRH.cjs → chunk-RHKFCSFC.cjs} +2 -2
- package/dist/{chunk-FZVAJFRH.cjs.map → chunk-RHKFCSFC.cjs.map} +1 -1
- package/dist/{chunk-NVRJ6WTR.js → chunk-RTAYJUQM.js} +3 -3
- package/dist/{chunk-NVRJ6WTR.js.map → chunk-RTAYJUQM.js.map} +1 -1
- package/dist/{chunk-SLRVI2YU.js → chunk-X6U6L6BG.js} +29 -4
- package/dist/chunk-X6U6L6BG.js.map +1 -0
- package/dist/{chunk-SQ5F5BFW.cjs → chunk-XDU3HHUU.cjs} +32 -6
- package/dist/chunk-XDU3HHUU.cjs.map +1 -0
- package/dist/{chunk-SKVVOEMX.js → chunk-XXUPUXBF.js} +8 -423
- package/dist/chunk-XXUPUXBF.js.map +1 -0
- package/dist/connect/index.cjs +1039 -565
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.js +649 -180
- package/dist/connect/index.js.map +1 -1
- package/dist/connection/auth/CompactLogin.d.ts +26 -0
- package/dist/connection/auth/ConnectedLoginPage.d.ts +9 -1
- package/dist/connection/auth/index.d.ts +3 -1
- package/dist/connection/auth/sso-popup.d.ts +13 -0
- package/dist/connection/auth/sso-sign-in.d.ts +38 -0
- package/dist/connection/auth/useLoginActions.d.ts +4 -2
- package/dist/connection/projects/ConnectedProjectsPanel.d.ts +9 -1
- package/dist/connection/projects/ProjectsListPage.d.ts +40 -0
- package/dist/connection/projects/index.d.ts +1 -0
- package/dist/connection/settings-page/appearanceSection.d.ts +30 -0
- package/dist/connection/settings-page/index.d.ts +1 -0
- package/dist/index.cjs +162 -190
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +9 -48
- package/dist/index.js.map +1 -1
- package/dist/settings/AppearanceSettings.d.ts +1 -2
- package/dist/settings/index.cjs +153 -153
- package/dist/settings/index.d.ts +2 -1
- package/dist/settings/index.js +1 -1
- package/dist/site/index.cjs +82 -74
- package/dist/site/index.d.ts +2 -0
- package/dist/site/index.js +3 -3
- package/dist/studio/index.cjs +73 -73
- package/dist/studio/index.js +5 -5
- package/dist/theme/appearance.d.ts +47 -0
- package/dist/theme/fromCss.d.ts +33 -0
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/chunk-6XW3CMU4.js.map +0 -1
- package/dist/chunk-7DDMF3DZ.cjs.map +0 -1
- package/dist/chunk-AMTWY22T.js +0 -11
- package/dist/chunk-AMTWY22T.js.map +0 -1
- package/dist/chunk-O4EQYPLO.cjs.map +0 -1
- package/dist/chunk-PZRTRYPD.js.map +0 -1
- package/dist/chunk-SKVVOEMX.js.map +0 -1
- package/dist/chunk-SLRVI2YU.js.map +0 -1
- package/dist/chunk-SQ5F5BFW.cjs.map +0 -1
- package/dist/chunk-TTJGCJWX.cjs.map +0 -1
- package/dist/chunk-XL55UDLO.js.map +0 -1
- package/dist/chunk-ZU2B2RZK.cjs +0 -13
- package/dist/chunk-ZU2B2RZK.cjs.map +0 -1
- package/dist/chunk-ZX663X3X.cjs.map +0 -1
package/dist/connect/index.js
CHANGED
|
@@ -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-
|
|
3
|
-
export { CAP_REACHED_MESSAGE, ZERO_BUDGET_MESSAGE, aiUsageResetTimestamp, formatMoney, formatResetDate, getQuotaItems, isAddonBudgetZero, isProProject, planBadgeView, planName, projectGroupBilling, useBillingSupport, useRewardBalance } from '../chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
33
|
-
import '../chunk-
|
|
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
|
|
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-
|
|
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/
|
|
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
|
|
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 || !
|
|
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
|
-
|
|
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 [
|
|
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,
|
|
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 || !
|
|
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
|
-
|
|
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 &&
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
|
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
|
|
37134
|
-
|
|
37135
|
-
|
|
37136
|
-
|
|
37137
|
-
|
|
37138
|
-
|
|
37139
|
-
|
|
37140
|
-
|
|
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
|
-
|
|
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
|