@elevasis/ui 2.2.0 → 2.2.1

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.
@@ -159,7 +159,7 @@ var tacticalPreset = {
159
159
  dark: {
160
160
  primary: "#0099ff",
161
161
  primaryContrast: "#ffffff",
162
- background: "#030304",
162
+ background: "#020203",
163
163
  surface: "rgba(18, 19, 21, 0.3)",
164
164
  surfaceHover: "rgba(32, 33, 36, 0.5)",
165
165
  elevatedSurface: "rgba(18, 21, 27, 0.85)",
@@ -170,7 +170,7 @@ var tacticalPreset = {
170
170
  error: "#FF4757",
171
171
  warning: "#FFA502",
172
172
  success: "#2ED573",
173
- glassBackground: "rgba(14, 15, 17, 0.6)",
173
+ glassBackground: "rgba(14, 15, 17, 0.55)",
174
174
  glassBlur: "blur(24px) saturate(170%)",
175
175
  shadow: "0px 1px 2px rgba(0, 0, 0, 0.5), 0px 12px 32px -8px rgba(0, 0, 0, 0.6)",
176
176
  cardShadow: "inset 0 1px 0 rgba(255, 255, 255, 0.04), inset 0 0 8px -6px rgba(255, 255, 255, 0.1), 0 2px 8px rgba(0, 0, 0, 0.3), 0 12px 32px -8px rgba(0, 0, 0, 0.4), 0 32px 64px -16px rgba(0, 0, 0, 0.3)",
@@ -1,7 +1,7 @@
1
1
  import { FilterBar } from './chunk-PDHTXPSF.js';
2
2
  import { CustomModal } from './chunk-GBMNCNHX.js';
3
3
  import { AppShellLoader } from './chunk-YEX4MQSY.js';
4
- import { useAvailablePresets } from './chunk-35QO7M43.js';
4
+ import { useAvailablePresets } from './chunk-M66JAN7R.js';
5
5
  import { useDeleteCredential, useCreateCredential, useCredentials, MEMBERSHIP_STATUS_COLORS, transformMembershipToTableRow, useUserMemberships, useUpdateWebhookEndpoint, useDeleteWebhookEndpoint, useCreateWebhookEndpoint, useListWebhookEndpoints, useUpdateMemberConfig, useOrganizationMembers, useUpdateCredential, CredentialSchemas } from './chunk-JT3FN6TE.js';
6
6
  import { useResources, showErrorNotification } from './chunk-J5TBNCMD.js';
7
7
  import { ListSkeleton, EmptyState, PageTitleCaption, CardHeader, APIErrorAlert, StatCard } from './chunk-Y3D3WFJG.js';
@@ -1,4 +1,4 @@
1
- import { PRESETS, getPreset, generateShades, mantineThemeOverride, createCssVariablesResolver, PresetsProvider } from './chunk-RB34YOIX.js';
1
+ import { PRESETS, getPreset, generateShades, mantineThemeOverride, createCssVariablesResolver, PresetsProvider } from './chunk-3WMJWXZY.js';
2
2
  import { AppBackground } from './chunk-CYXZHBP4.js';
3
3
  import { ElevasisCoreProvider } from './chunk-MZPVNRPL.js';
4
4
  import { ElevasisLoader } from './chunk-Y3D3WFJG.js';
@@ -1,4 +1,4 @@
1
- import { usePresetsContext } from './chunk-RB34YOIX.js';
1
+ import { usePresetsContext } from './chunk-3WMJWXZY.js';
2
2
  import { useMemo } from 'react';
3
3
 
4
4
  var BUILT_IN_NAMES = /* @__PURE__ */ new Set([
@@ -6,7 +6,7 @@ import { useDashboardMetrics, useResources, useUnresolvedErrors, useRecentExecut
6
6
  import { getTimeRangeDates } from './chunk-LXHZYSMQ.js';
7
7
  import { Graph_module_css_default, useDirectedChainHighlighting, useNodeSelection, useFitViewTrigger } from './chunk-F6RBK7NJ.js';
8
8
  import { STATUS_COLORS, getStatusIcon, formatDuration, getStatusColors, AGENT_CONSTANTS, shouldAnimateEdge, TIMELINE_CONSTANTS, calculateBarPosition, CONTAINER_CONSTANTS, useExecutionPath, useUnifiedWorkflowLayout, WORKFLOW_CONSTANTS, useReactFlowAgent } from './chunk-XA34RETF.js';
9
- import { glassBase } from './chunk-RB34YOIX.js';
9
+ import { glassBase } from './chunk-3WMJWXZY.js';
10
10
  import { GlowDot, CardHeader, EmptyState, PageTitleCaption, TabCountBadge } from './chunk-Y3D3WFJG.js';
11
11
  import { ResourceStatusColors } from './chunk-ELJIFLCB.js';
12
12
  import { formatTimeAgo, formatRelativeTime } from './chunk-IOKL7BKE.js';
@@ -2,7 +2,7 @@ import { ChatHeader, ChatSidebar } from './chunk-ROSMICXG.js';
2
2
  import { SubshellSidebarSection, SubshellLoader, PageContainer, CollapsibleSidebarGroup, SubshellNavItem } from './chunk-OCP2MBTY.js';
3
3
  import { ResourceHealthPanel } from './chunk-PFONCU6C.js';
4
4
  import { CustomModal, ConfirmationModal } from './chunk-GBMNCNHX.js';
5
- import { BaseNode, useGraphTheme, BaseEdge, GraphBackground, GraphLegend, GraphFitViewButton, ExecutionStats, UnifiedWorkflowGraph, WorkflowExecutionTimeline, AgentExecutionVisualizer, AgentExecutionTimeline, GraphFitViewHandler } from './chunk-BIZNOFO4.js';
5
+ import { BaseNode, useGraphTheme, BaseEdge, GraphBackground, GraphLegend, GraphFitViewButton, ExecutionStats, UnifiedWorkflowGraph, WorkflowExecutionTimeline, AgentExecutionVisualizer, AgentExecutionTimeline, GraphFitViewHandler } from './chunk-O6KZ46EJ.js';
6
6
  import { useCyberColors, CyberDonut } from './chunk-KFICYU6S.js';
7
7
  import { AppShellLoader } from './chunk-YEX4MQSY.js';
8
8
  import { useStatusFilter, useResourceSearch, useResourcesDomainFilters, filterByDomainFilters, useCommandViewDomainFilters } from './chunk-JT3FN6TE.js';
@@ -8587,8 +8587,8 @@ type BreadcrumbsProps = UseBreadcrumbsOptions;
8587
8587
  declare const Breadcrumbs: ({ navItems }: BreadcrumbsProps) => react_jsx_runtime.JSX.Element;
8588
8588
 
8589
8589
  interface KanbanBoardProps {
8590
- /** Stage color and label overrides. Falls back to DEFAULT_KANBAN_CONFIG. */
8591
- config?: KanbanBoardConfig;
8590
+ /** Required column configuration. If omitted or empty, the board shows a configuration-required state. */
8591
+ config: KanbanBoardConfig | null | undefined;
8592
8592
  /**
8593
8593
  * Optional render-prop forwarded to the DealDrawer action slot.
8594
8594
  * Use this to inject consumer-specific actions (e.g. a revision trigger button).
@@ -8616,6 +8616,7 @@ declare const DEFAULT_KANBAN_CONFIG: KanbanBoardConfig;
8616
8616
 
8617
8617
  interface DealDrawerProps {
8618
8618
  deal: DealListItem | null;
8619
+ config: KanbanBoardConfig | null | undefined;
8619
8620
  opened: boolean;
8620
8621
  onClose: () => void;
8621
8622
  /**
@@ -8624,7 +8625,7 @@ interface DealDrawerProps {
8624
8625
  */
8625
8626
  renderActions?: () => ReactNode;
8626
8627
  }
8627
- declare function DealDrawer({ deal, opened, onClose, renderActions }: DealDrawerProps): react_jsx_runtime.JSX.Element | null;
8628
+ declare function DealDrawer({ deal, config, opened, onClose, renderActions }: DealDrawerProps): react_jsx_runtime.JSX.Element | null;
8628
8629
 
8629
8630
  declare const CrmSidebar: () => react_jsx_runtime.JSX.Element;
8630
8631
 
@@ -2,29 +2,29 @@ import { useBreadcrumbs } from '../chunk-MG3NF7QL.js';
2
2
  import '../chunk-SMJLS23U.js';
3
3
  import { NotificationList } from '../chunk-2JTCPVZX.js';
4
4
  export { ActivityCard, ActivityFilters as ActivityFiltersBar, ActivityTable, BusinessImpactCard, CostBreakdownCard, CostByModelTable, CostMetricsCard, ErrorAnalysisCard, ErrorBreakdownTable, ExecutionBreakdownTable, ExecutionHealthCard, ExecutionLogsFilters as ExecutionLogsFilterBar, ExecutionLogsTable, NotificationItem, NotificationList, monitoringManifest } from '../chunk-2JTCPVZX.js';
5
- export { CreateCredentialModal, CredentialList, CredentialSettings, MembershipFeaturePanel, MembershipStatusBadge, OAuthConnectModal, OrganizationMembershipsList, WebhookUrlDisplayModal, settingsManifest } from '../chunk-MXVA7U2I.js';
5
+ export { CreateCredentialModal, CredentialList, CredentialSettings, MembershipFeaturePanel, MembershipStatusBadge, OAuthConnectModal, OrganizationMembershipsList, WebhookUrlDisplayModal, settingsManifest } from '../chunk-5KBVISVJ.js';
6
6
  import { FilterBar } from '../chunk-PDHTXPSF.js';
7
7
  export { FilterBar } from '../chunk-PDHTXPSF.js';
8
- import { ResourceExecuteDialog } from '../chunk-7IE3KXKV.js';
9
- export { ActionModal, AgentDefinitionDisplay, AgentExecutionLogs, BaseExecutionLogs, BaseExecutionLogsHeader, BaseExecutionLogsStates, CheckpointGroup, CollapsibleJsonSection, CommandQueueSidebar, CommandQueueSidebarMiddle, CommandQueueSidebarTop, CommandQueueTaskRow, CommandViewEdge, CommandViewGraph, CommandViewNode, ConfigCard, ContentSections, ContextUsageBadge, ContractDisplay, ExecutionErrorSection, FormFieldRenderer, LogEntry, LogGroup, NewKnowledgeMapEdge, NewKnowledgeMapGraph, NewKnowledgeMapNode, OperationsSidebar, OperationsSidebarMiddle, OperationsSidebarTop, ResourceDefinitionSection, ResourceErrorState, ResourceFilter, ResourceHeader, ResourceNotFoundState, SessionMemory, ToolsListDisplay, WorkflowDefinitionDisplay, WorkflowExecutionLogs, getExecutionStatusConfig, getIcon, getLogLevelConfig, iconMap, operationsManifest, useNewKnowledgeMapLayout } from '../chunk-7IE3KXKV.js';
8
+ import { ResourceExecuteDialog } from '../chunk-YOZEGIZA.js';
9
+ export { ActionModal, AgentDefinitionDisplay, AgentExecutionLogs, BaseExecutionLogs, BaseExecutionLogsHeader, BaseExecutionLogsStates, CheckpointGroup, CollapsibleJsonSection, CommandQueueSidebar, CommandQueueSidebarMiddle, CommandQueueSidebarTop, CommandQueueTaskRow, CommandViewEdge, CommandViewGraph, CommandViewNode, ConfigCard, ContentSections, ContextUsageBadge, ContractDisplay, ExecutionErrorSection, FormFieldRenderer, LogEntry, LogGroup, NewKnowledgeMapEdge, NewKnowledgeMapGraph, NewKnowledgeMapNode, OperationsSidebar, OperationsSidebarMiddle, OperationsSidebarTop, ResourceDefinitionSection, ResourceErrorState, ResourceFilter, ResourceHeader, ResourceNotFoundState, SessionMemory, ToolsListDisplay, WorkflowDefinitionDisplay, WorkflowExecutionLogs, getExecutionStatusConfig, getIcon, getLogLevelConfig, iconMap, operationsManifest, useNewKnowledgeMapLayout } from '../chunk-YOZEGIZA.js';
10
10
  import '../chunk-ROSMICXG.js';
11
11
  import { SubshellLoader, PageContainer, SubshellSidebarSection, SubshellNavItem, CollapsibleSidebarGroup } from '../chunk-OCP2MBTY.js';
12
12
  export { ResourceHealthPanel } from '../chunk-PFONCU6C.js';
13
13
  import { CustomModal } from '../chunk-GBMNCNHX.js';
14
14
  export { ConfirmationInputModal, ConfirmationModal, CustomModal } from '../chunk-GBMNCNHX.js';
15
- export { AgentExecutionTimeline, AgentExecutionVisualizer, AgentIterationEdge, AgentIterationNode, BaseEdge, BaseNode, EmptyVisualizer, ExecutionStats, ExecutionStatusBadge, GraphBackground, GraphContainer, GraphFitViewButton, GraphFitViewHandler, GraphLegend, TimelineAxis, TimelineBar, TimelineContainer, TimelineRow, UnifiedWorkflowEdge, UnifiedWorkflowGraph, UnifiedWorkflowNode, VisualizerContainer, WorkflowExecutionTimeline, dashboardManifest, getGraphBackgroundStyles, useGraphBackgroundStyles, useGraphTheme } from '../chunk-BIZNOFO4.js';
15
+ export { AgentExecutionTimeline, AgentExecutionVisualizer, AgentIterationEdge, AgentIterationNode, BaseEdge, BaseNode, EmptyVisualizer, ExecutionStats, ExecutionStatusBadge, GraphBackground, GraphContainer, GraphFitViewButton, GraphFitViewHandler, GraphLegend, TimelineAxis, TimelineBar, TimelineContainer, TimelineRow, UnifiedWorkflowEdge, UnifiedWorkflowGraph, UnifiedWorkflowNode, VisualizerContainer, WorkflowExecutionTimeline, dashboardManifest, getGraphBackgroundStyles, useGraphBackgroundStyles, useGraphTheme } from '../chunk-O6KZ46EJ.js';
16
16
  export { ResourceHealthChart, getHealthColor } from '../chunk-LGKLC5MG.js';
17
17
  import '../chunk-KFICYU6S.js';
18
18
  import { AppShellLoader } from '../chunk-YEX4MQSY.js';
19
- import '../chunk-35QO7M43.js';
19
+ import '../chunk-M66JAN7R.js';
20
20
  import { useUpdateApiKey, useDeleteApiKey, useCreateApiKey, useListApiKeys, useActivateDeployment, useDeactivateDeployment, useDeleteDeployment, useListDeployments, useProjects } from '../chunk-JT3FN6TE.js';
21
21
  import { usePaginationState, useDeploymentDocs, useResources, useCreateSchedule, useListSchedules, usePauseSchedule, useResumeSchedule, useCancelSchedule, useDeleteSchedule, useDealNotes, useCreateDealNote, useDeals, useSyncDealStage, dealKeys, useDealTasksDue, useCreateDealTask, useDeleteDeal, useTableSort, sortData, useTableSelection, useDealDetail, showApiErrorNotification, acquisitionListKeys, showSuccessNotification, useListsTelemetry, useLists, useCreateList, useList, useListProgress, useListExecutions, useResourceDefinition, useCompanies, useDeleteCompanies, useContacts, useDeleteContacts, useDeleteProject, useMarkAllAsRead, useNotifications, showErrorNotification } from '../chunk-J5TBNCMD.js';
22
22
  export { showApiErrorNotification, showErrorNotification, showInfoNotification, showSuccessNotification, showWarningNotification } from '../chunk-J5TBNCMD.js';
23
23
  import '../chunk-LXHZYSMQ.js';
24
24
  export { Graph_module_css_default as graphStyles } from '../chunk-F6RBK7NJ.js';
25
25
  export { CONTAINER_CONSTANTS, SHARED_VIZ_CONSTANTS } from '../chunk-XA34RETF.js';
26
- import '../chunk-QITPFGWC.js';
27
- import '../chunk-RB34YOIX.js';
26
+ import '../chunk-LH7RCX4Y.js';
27
+ import '../chunk-3WMJWXZY.js';
28
28
  import '../chunk-CYXZHBP4.js';
29
29
  import '../chunk-MZPVNRPL.js';
30
30
  import { SubshellContainer, SubshellSidebar, SubshellRightSideContainer, SubshellContentContainer } from '../chunk-RX4UWZZR.js';
@@ -47,8 +47,8 @@ import '../chunk-DD3CCMCZ.js';
47
47
  import { useElevasisServices } from '../chunk-QEPXAWE2.js';
48
48
  import '../chunk-BRJ3QZ4E.js';
49
49
  import { useRouterContext } from '../chunk-Q7DJKLEN.js';
50
- import { Table, Group, Text, Button, Stack, Title, TextInput, Alert, Tooltip, ActionIcon, Paper, Code, CopyButton, SimpleGrid, Badge, Loader, Pagination, useMantineTheme, Box, ScrollArea, Select, Center, Card, SegmentedControl, Switch, Textarea, Divider, Menu, Timeline, ThemeIcon, Tabs, Anchor, Breadcrumbs as Breadcrumbs$1, Drawer, UnstyledButton, Modal, Checkbox, RingProgress, Collapse, Popover, Indicator } from '@mantine/core';
51
- import { IconAddressBook, IconBriefcase, IconTarget, IconChevronUp, IconChevronDown, IconSelector, IconTrash, IconPencil, IconAlertCircle, IconKey, IconCalendar, IconClock, IconAlertTriangle, IconExclamationMark, IconShieldLock, IconCheck, IconCopy, IconPlus, IconRocket, IconRefresh, IconPower, IconPlayerPlay, IconCircleCheck, IconTag, IconBook2, IconFileOff, IconList, IconCalendarRepeat, IconCalendarEvent, IconCalendarTime, IconRobot, IconGitBranch, IconSettings, IconExternalLink, IconDotsVertical, IconPlayerPause, IconPlayerStop, IconCalendarDue, IconCalendarStats, IconCalendarOff, IconListCheck, IconTrophy, IconClockExclamation, IconUser, IconLayoutGrid, IconColumns, IconFileInvoice, IconChecklist, IconHistory, IconSearch, IconTargetArrow, IconArrowLeft, IconFileText, IconX, IconBuilding, IconMailCheck, IconChartBar, IconBuildingFactory2, IconUsers, IconQuestionMark, IconSparkles, IconClockHour4, IconTrendingUp, IconHeartbeat, IconFlag, IconInbox, IconLock, IconChevronRight, IconDownload, IconMessageCircle, IconBell, IconNotes, IconFolderOpen, IconFolder, IconCheckbox, IconMail, IconPhone, IconArrowRight, IconNote } from '@tabler/icons-react';
50
+ import { Table, Group, Text, Button, Stack, Title, TextInput, Alert, Tooltip, ActionIcon, Paper, Code, CopyButton, SimpleGrid, Badge, Loader, Pagination, useMantineTheme, Box, ScrollArea, Select, Center, Card, SegmentedControl, Switch, Textarea, Divider, Menu, Timeline, ThemeIcon, Tabs, Anchor, Breadcrumbs as Breadcrumbs$1, Drawer, UnstyledButton, Modal, Checkbox, Progress, RingProgress, Collapse, Popover, Indicator } from '@mantine/core';
51
+ import { IconAddressBook, IconBriefcase, IconTarget, IconChevronUp, IconChevronDown, IconSelector, IconTrash, IconPencil, IconAlertCircle, IconKey, IconCalendar, IconClock, IconAlertTriangle, IconExclamationMark, IconShieldLock, IconCheck, IconCopy, IconPlus, IconRocket, IconRefresh, IconPower, IconPlayerPlay, IconCircleCheck, IconTag, IconBook2, IconFileOff, IconList, IconCalendarRepeat, IconCalendarEvent, IconCalendarTime, IconRobot, IconGitBranch, IconSettings, IconExternalLink, IconDotsVertical, IconPlayerPause, IconPlayerStop, IconCalendarDue, IconCalendarStats, IconCalendarOff, IconListCheck, IconTrophy, IconClockExclamation, IconUser, IconLayoutGrid, IconColumns, IconFileInvoice, IconChecklist, IconHistory, IconSearch, IconTargetArrow, IconArrowLeft, IconFileText, IconX, IconBuilding, IconMailCheck, IconArrowRight, IconQuestionMark, IconSparkles, IconClockHour4, IconBuildingFactory2, IconUsers, IconChartBar, IconTrendingUp, IconHeartbeat, IconFlag, IconInbox, IconLock, IconChevronRight, IconDownload, IconMessageCircle, IconBell, IconNotes, IconFolderOpen, IconFolder, IconCheckbox, IconMail, IconPhone, IconNote } from '@tabler/icons-react';
52
52
  import * as runtime from 'react/jsx-runtime';
53
53
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
54
54
  import { useDisclosure } from '@mantine/hooks';
@@ -3089,22 +3089,11 @@ function DealKanbanCard({ deal, config, onClick, onDragStart, onDragEnd }) {
3089
3089
  }
3090
3090
  );
3091
3091
  }
3092
-
3093
- // src/components/acquisition/kanban/constants.ts
3094
- var DEAL_STAGES = ["interested", "proposal", "closing", "closed_won", "closed_lost", "nurturing"];
3095
- var DEFAULT_KANBAN_CONFIG = {
3096
- interested: { color: "blue" },
3097
- proposal: { color: "yellow" },
3098
- closing: { color: "lime" },
3099
- closed_won: { color: "green" },
3100
- closed_lost: { color: "red" },
3101
- nurturing: { color: "grape" }
3102
- };
3103
3092
  function formatStageLabel(stage) {
3104
3093
  if (!stage) return "Unstaged";
3105
3094
  return stage.split("_").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
3106
3095
  }
3107
- function DealDrawer({ deal, opened, onClose, renderActions }) {
3096
+ function DealDrawer({ deal, config, opened, onClose, renderActions }) {
3108
3097
  const [noteBody, setNoteBody] = useState("");
3109
3098
  const { data: notes, isLoading: notesLoading } = useDealNotes(deal?.id ?? "");
3110
3099
  const createNote = useCreateDealNote();
@@ -3116,7 +3105,7 @@ function DealDrawer({ deal, opened, onClose, renderActions }) {
3116
3105
  const email = deal.contact?.email || deal.contact_email || null;
3117
3106
  const companyName = deal.contact?.company?.name || deal.discovery_data?.company || null;
3118
3107
  const stage = deal.cached_stage;
3119
- const badgeColor = DEFAULT_KANBAN_CONFIG[stage]?.color ?? "gray";
3108
+ const badgeColor = (stage ? config?.[stage]?.color : null) ?? "gray";
3120
3109
  const activityLog = deal.activity_log || [];
3121
3110
  const hasInitialFee = typeof deal.initial_fee === "number" && deal.initial_fee > 0;
3122
3111
  const hasMonthlyFee = typeof deal.monthly_fee === "number" && deal.monthly_fee > 0;
@@ -3232,12 +3221,9 @@ function formatStageLabel2(stage) {
3232
3221
  if (stage === UNSTAGED_KEY) return "Unstaged";
3233
3222
  return stage.split("_").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
3234
3223
  }
3235
- function groupDealsByStage(deals) {
3224
+ function groupDealsByStage(deals, columns) {
3236
3225
  const map = /* @__PURE__ */ new Map();
3237
- for (const stage of DEAL_STAGES) {
3238
- map.set(stage, []);
3239
- }
3240
- map.set(UNSTAGED_KEY, []);
3226
+ for (const stage of columns) map.set(stage, []);
3241
3227
  for (const deal of deals) {
3242
3228
  const key = deal.cached_stage ?? UNSTAGED_KEY;
3243
3229
  const bucket = map.get(key);
@@ -3249,7 +3235,7 @@ function groupDealsByStage(deals) {
3249
3235
  }
3250
3236
  return map;
3251
3237
  }
3252
- function KanbanBoard({ config = DEFAULT_KANBAN_CONFIG, renderDrawerActions }) {
3238
+ function KanbanBoard({ config, renderDrawerActions }) {
3253
3239
  const { data: deals, isLoading, error } = useDeals();
3254
3240
  const syncStage = useSyncDealStage();
3255
3241
  const queryClient = useQueryClient();
@@ -3257,8 +3243,11 @@ function KanbanBoard({ config = DEFAULT_KANBAN_CONFIG, renderDrawerActions }) {
3257
3243
  const [drawerOpen, setDrawerOpen] = useState(false);
3258
3244
  const [dragOverColumn, setDragOverColumn] = useState(null);
3259
3245
  const draggingDealRef = useRef(null);
3260
- const groupedDeals = groupDealsByStage(deals ?? []);
3261
- const columns = [...DEAL_STAGES, UNSTAGED_KEY];
3246
+ const resolvedConfig = config ?? {};
3247
+ const configuredStages = Object.keys(resolvedConfig).filter((stage) => Boolean(resolvedConfig[stage]));
3248
+ const columns = [...configuredStages, UNSTAGED_KEY];
3249
+ const hasConfig = configuredStages.length > 0;
3250
+ const groupedDeals = groupDealsByStage(deals ?? [], columns);
3262
3251
  const handleDragStart = useCallback((e, deal) => {
3263
3252
  draggingDealRef.current = deal;
3264
3253
  e.dataTransfer.effectAllowed = "move";
@@ -3307,6 +3296,15 @@ function KanbanBoard({ config = DEFAULT_KANBAN_CONFIG, renderDrawerActions }) {
3307
3296
  if (error) {
3308
3297
  return /* @__PURE__ */ jsx(SubshellContentContainer, { children: /* @__PURE__ */ jsx(Alert, { color: "red", children: "Failed to load deals" }) });
3309
3298
  }
3299
+ if (!hasConfig) {
3300
+ return /* @__PURE__ */ jsx(SubshellContentContainer, { children: /* @__PURE__ */ jsxs(Stack, { children: [
3301
+ /* @__PURE__ */ jsx(PageTitleCaption, { title: "Pipeline", caption: "Kanban view of your deal pipeline" }),
3302
+ /* @__PURE__ */ jsx(Paper, { withBorder: true, p: "xl", children: /* @__PURE__ */ jsx(Center, { py: "xl", children: /* @__PURE__ */ jsxs(Stack, { gap: "xs", align: "center", children: [
3303
+ /* @__PURE__ */ jsx(Text, { fw: 600, children: "Configuration Required" }),
3304
+ /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", ta: "center", children: "Provide a kanban stage config before rendering the pipeline board." })
3305
+ ] }) }) })
3306
+ ] }) });
3307
+ }
3310
3308
  return /* @__PURE__ */ jsxs(SubshellContentContainer, { children: [
3311
3309
  /* @__PURE__ */ jsxs(Stack, { children: [
3312
3310
  /* @__PURE__ */ jsx(PageTitleCaption, { title: "Pipeline", caption: "Kanban view of your deal pipeline" }),
@@ -3322,7 +3320,7 @@ function KanbanBoard({ config = DEFAULT_KANBAN_CONFIG, renderDrawerActions }) {
3322
3320
  const columnDeals = groupedDeals.get(columnKey) ?? [];
3323
3321
  const isUnstaged = columnKey === UNSTAGED_KEY;
3324
3322
  const isDragTarget = dragOverColumn === columnKey;
3325
- const badgeColor = isUnstaged ? "gray" : config[columnKey]?.color ?? "gray";
3323
+ const badgeColor = isUnstaged ? "gray" : resolvedConfig[columnKey]?.color ?? "gray";
3326
3324
  return /* @__PURE__ */ jsx(
3327
3325
  Box,
3328
3326
  {
@@ -3361,7 +3359,7 @@ function KanbanBoard({ config = DEFAULT_KANBAN_CONFIG, renderDrawerActions }) {
3361
3359
  DealKanbanCard,
3362
3360
  {
3363
3361
  deal,
3364
- config,
3362
+ config: resolvedConfig,
3365
3363
  onClick: handleCardClick,
3366
3364
  onDragStart: handleDragStart,
3367
3365
  onDragEnd: handleDragEnd
@@ -3380,6 +3378,7 @@ function KanbanBoard({ config = DEFAULT_KANBAN_CONFIG, renderDrawerActions }) {
3380
3378
  DealDrawer,
3381
3379
  {
3382
3380
  deal: selectedDeal,
3381
+ config: resolvedConfig,
3383
3382
  opened: drawerOpen,
3384
3383
  onClose: () => setDrawerOpen(false),
3385
3384
  renderActions: renderDrawerActions
@@ -3387,6 +3386,17 @@ function KanbanBoard({ config = DEFAULT_KANBAN_CONFIG, renderDrawerActions }) {
3387
3386
  )
3388
3387
  ] });
3389
3388
  }
3389
+
3390
+ // src/components/acquisition/kanban/constants.ts
3391
+ var DEAL_STAGES = ["interested", "proposal", "closing", "closed_won", "closed_lost", "nurturing"];
3392
+ var DEFAULT_KANBAN_CONFIG = {
3393
+ interested: { color: "blue" },
3394
+ proposal: { color: "yellow" },
3395
+ closing: { color: "lime" },
3396
+ closed_won: { color: "green" },
3397
+ closed_lost: { color: "red" },
3398
+ nurturing: { color: "grape" }
3399
+ };
3390
3400
  var CrmSidebarTop = () => {
3391
3401
  return /* @__PURE__ */ jsx(SubshellSidebarSection, { icon: IconAddressBook, label: "CRM" });
3392
3402
  };
@@ -4902,12 +4912,159 @@ function useDeleteLists() {
4902
4912
  });
4903
4913
  }
4904
4914
  var EM_DASH = "\u2014";
4915
+ function computeCompletionRatio(populated, personalized) {
4916
+ if (populated === 0) return null;
4917
+ return personalized / populated;
4918
+ }
4919
+ function formatPercentage(ratio, fractionDigits = 0) {
4920
+ if (ratio == null) return EM_DASH;
4921
+ return `${(ratio * 100).toFixed(fractionDigits)}%`;
4922
+ }
4905
4923
  function computeCompletionPercentage(populated, personalized) {
4906
- if (populated === 0) return EM_DASH;
4907
- return `${Math.round(personalized / populated * 100)}%`;
4924
+ return formatPercentage(computeCompletionRatio(populated, personalized));
4925
+ }
4926
+ function computeBounceRate(d) {
4927
+ const denominator = d.valid + d.risky + d.invalid + d.bounced;
4928
+ if (denominator === 0) return EM_DASH;
4929
+ return `${(d.bounced / denominator * 100).toFixed(1)}%`;
4930
+ }
4931
+ function computeBacklog(current, completed) {
4932
+ return Math.max(current - completed, 0);
4933
+ }
4934
+ function getOverviewStatus(list) {
4935
+ if ((list.activeWorkflows?.length ?? 0) > 0) {
4936
+ return { label: "Active Work", color: "green" };
4937
+ }
4938
+ if (list.stageCounts.personalized > 0 && list.stageCounts.personalized === list.stageCounts.uploaded) {
4939
+ return { label: "Complete", color: "blue" };
4940
+ }
4941
+ return { label: "Idle", color: "gray" };
4942
+ }
4943
+ function getNextFocus(list) {
4944
+ if ((list.activeWorkflows?.length ?? 0) > 0) {
4945
+ return { label: "Workflow running", count: list.activeWorkflows?.length ?? 0 };
4946
+ }
4947
+ if (list.totalCompanies === 0 && list.totalContacts === 0) {
4948
+ return { label: "Populate list", count: null };
4949
+ }
4950
+ const extractGap = computeBacklog(list.stageCounts.populated, list.stageCounts.extracted);
4951
+ if (extractGap > 0) {
4952
+ return { label: "Extract website data", count: extractGap };
4953
+ }
4954
+ const qualifyGap = computeBacklog(list.stageCounts.extracted, list.stageCounts.qualified);
4955
+ if (qualifyGap > 0) {
4956
+ return { label: "Qualify companies", count: qualifyGap };
4957
+ }
4958
+ const discoverGap = computeBacklog(list.stageCounts.qualified, list.stageCounts.discovered);
4959
+ if (discoverGap > 0) {
4960
+ return { label: "Discover contacts", count: discoverGap };
4961
+ }
4962
+ const verifyGap = computeBacklog(list.stageCounts.discovered, list.stageCounts.verified);
4963
+ if (verifyGap > 0) {
4964
+ return { label: "Verify emails", count: verifyGap };
4965
+ }
4966
+ const personalizeGap = computeBacklog(list.stageCounts.verified, list.stageCounts.personalized);
4967
+ if (personalizeGap > 0) {
4968
+ return { label: "Personalize outreach", count: personalizeGap };
4969
+ }
4970
+ const uploadGap = computeBacklog(list.stageCounts.personalized, list.stageCounts.uploaded);
4971
+ if (uploadGap > 0) {
4972
+ return { label: "Upload contacts", count: uploadGap };
4973
+ }
4974
+ return { label: "Complete", count: null };
4975
+ }
4976
+ function formatCountLabel(value, noun) {
4977
+ return `${value} ${noun}${value === 1 ? "" : "s"}`;
4978
+ }
4979
+ function getPrimaryAction({
4980
+ uploadBacklog,
4981
+ personalizationBacklog,
4982
+ verificationBacklog,
4983
+ deliverabilityRiskCount,
4984
+ activeListCount,
4985
+ totalLists
4986
+ }) {
4987
+ if (uploadBacklog > 0) {
4988
+ return {
4989
+ title: `Upload ${formatCountLabel(uploadBacklog, "personalized contact")}`,
4990
+ detail: "No verification blockers are left on the contacts already ready for outreach.",
4991
+ buttonLabel: "Review lists",
4992
+ buttonTo: "/lead-gen/lists",
4993
+ tone: "blue"
4994
+ };
4995
+ }
4996
+ if (personalizationBacklog > 0) {
4997
+ return {
4998
+ title: `Personalize ${formatCountLabel(personalizationBacklog, "verified contact")}`,
4999
+ detail: "Verification is done. The next bottleneck is drafting outreach copy.",
5000
+ buttonLabel: "Open lists",
5001
+ buttonTo: "/lead-gen/lists",
5002
+ tone: "blue"
5003
+ };
5004
+ }
5005
+ if (verificationBacklog > 0) {
5006
+ return {
5007
+ title: `Verify ${formatCountLabel(verificationBacklog, "discovered contact")}`,
5008
+ detail: "Email validation is the main blocker before personalization can continue.",
5009
+ buttonLabel: "Open lists",
5010
+ buttonTo: "/lead-gen/lists",
5011
+ tone: "orange"
5012
+ };
5013
+ }
5014
+ if (deliverabilityRiskCount > 0) {
5015
+ return {
5016
+ title: `Resolve ${formatCountLabel(deliverabilityRiskCount, "deliverability risk")}`,
5017
+ detail: "Risky, invalid, or bounced records are the main campaign health issue right now.",
5018
+ buttonLabel: "View deliverability",
5019
+ buttonTo: "/lead-gen/deliverability",
5020
+ tone: "orange"
5021
+ };
5022
+ }
5023
+ if (activeListCount > 0) {
5024
+ return {
5025
+ title: `Monitor ${formatCountLabel(activeListCount, "active list")}`,
5026
+ detail: "Workflows are running and there are no immediate contact-stage backlogs to clear.",
5027
+ buttonLabel: "Open lists",
5028
+ buttonTo: "/lead-gen/lists",
5029
+ tone: "green"
5030
+ };
5031
+ }
5032
+ if (totalLists > 0) {
5033
+ return {
5034
+ title: "No blockers right now",
5035
+ detail: "Lists are idle and the current pipeline does not show an urgent follow-up step.",
5036
+ buttonLabel: "Review lists",
5037
+ buttonTo: "/lead-gen/lists",
5038
+ tone: "gray"
5039
+ };
5040
+ }
5041
+ return {
5042
+ title: "Create your first list",
5043
+ detail: "Lead gen telemetry will appear here once a list starts moving through the pipeline.",
5044
+ buttonLabel: "Open lists",
5045
+ buttonTo: "/lead-gen/lists",
5046
+ tone: "gray"
5047
+ };
5048
+ }
5049
+ function CompactPipelineStage({
5050
+ label,
5051
+ value,
5052
+ ratio
5053
+ }) {
5054
+ return /* @__PURE__ */ jsx(Paper, { withBorder: true, p: "sm", children: /* @__PURE__ */ jsxs(Stack, { gap: 6, children: [
5055
+ /* @__PURE__ */ jsxs(Group, { justify: "space-between", gap: "xs", wrap: "nowrap", children: [
5056
+ /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", tt: "uppercase", fw: 600, children: label }),
5057
+ /* @__PURE__ */ jsx(Badge, { size: "xs", variant: "light", color: "blue", children: formatPercentage(ratio) })
5058
+ ] }),
5059
+ /* @__PURE__ */ jsx(Title, { order: 4, children: value }),
5060
+ /* @__PURE__ */ jsx(Progress, { value: ratio == null ? 0 : ratio * 100, size: "sm", radius: "xl", color: "blue" })
5061
+ ] }) });
4908
5062
  }
4909
5063
  function LeadGenOverviewPage() {
4910
- const { data, isLoading, isError, error } = useListsTelemetry();
5064
+ const telemetryQuery = useListsTelemetry();
5065
+ const listsQuery = useLists();
5066
+ const data = telemetryQuery.data;
5067
+ const listMetaById = new Map((listsQuery.data ?? []).map((list) => [list.id, list]));
4911
5068
  const totalCompanies = data?.reduce((sum, list) => sum + list.totalCompanies, 0) ?? 0;
4912
5069
  const totalContacts = data?.reduce((sum, list) => sum + list.totalContacts, 0) ?? 0;
4913
5070
  const stageTotals = data?.reduce(
@@ -4922,82 +5079,210 @@ function LeadGenOverviewPage() {
4922
5079
  }),
4923
5080
  { populated: 0, extracted: 0, qualified: 0, discovered: 0, verified: 0, personalized: 0, uploaded: 0 }
4924
5081
  ) ?? { populated: 0, extracted: 0, qualified: 0, discovered: 0, verified: 0, personalized: 0, uploaded: 0 };
4925
- const completionLabel = (() => {
4926
- if (!data?.length) return EM_DASH;
4927
- return computeCompletionPercentage(stageTotals.populated, stageTotals.personalized);
4928
- })();
4929
- const stageTiles = [
4930
- { label: "Populated", value: stageTotals.populated },
4931
- { label: "Extracted", value: stageTotals.extracted },
4932
- { label: "Qualified", value: stageTotals.qualified },
4933
- { label: "Discovered", value: stageTotals.discovered },
4934
- { label: "Verified", value: stageTotals.verified },
4935
- { label: "Personalized", value: stageTotals.personalized },
4936
- { label: "Uploaded", value: stageTotals.uploaded }
5082
+ const deliverabilityTotals = data?.reduce(
5083
+ (acc, list) => ({
5084
+ valid: acc.valid + list.deliverability.valid,
5085
+ risky: acc.risky + list.deliverability.risky,
5086
+ invalid: acc.invalid + list.deliverability.invalid,
5087
+ unknown: acc.unknown + list.deliverability.unknown,
5088
+ bounced: acc.bounced + list.deliverability.bounced
5089
+ }),
5090
+ { valid: 0, risky: 0, invalid: 0, unknown: 0, bounced: 0 }
5091
+ ) ?? { risky: 0, invalid: 0, bounced: 0 };
5092
+ const activeListCount = data?.filter((list) => (list.activeWorkflows?.length ?? 0) > 0).length ?? 0;
5093
+ const verificationBacklog = computeBacklog(stageTotals.discovered, stageTotals.verified);
5094
+ const personalizationBacklog = computeBacklog(stageTotals.verified, stageTotals.personalized);
5095
+ const uploadBacklog = computeBacklog(stageTotals.personalized, stageTotals.uploaded);
5096
+ const deliverabilityRiskCount = deliverabilityTotals.risky + deliverabilityTotals.invalid + deliverabilityTotals.bounced;
5097
+ const totalLists = data?.length ?? 0;
5098
+ const summaryLine = [
5099
+ `${totalLists} ${totalLists === 1 ? "list" : "lists"} active`,
5100
+ `${formatCountLabel(uploadBacklog, "contact")} ready for upload`,
5101
+ deliverabilityRiskCount === 0 ? "no risks" : `${formatCountLabel(deliverabilityRiskCount, "risk")}`
5102
+ ].join(" \u2022 ");
5103
+ const primaryAction = getPrimaryAction({
5104
+ uploadBacklog,
5105
+ personalizationBacklog,
5106
+ verificationBacklog,
5107
+ deliverabilityRiskCount,
5108
+ activeListCount,
5109
+ totalLists
5110
+ });
5111
+ const pipelineStages = [
5112
+ {
5113
+ label: "Populated",
5114
+ value: stageTotals.populated,
5115
+ ratio: totalCompanies === 0 ? null : stageTotals.populated / totalCompanies
5116
+ },
5117
+ {
5118
+ label: "Qualified",
5119
+ value: stageTotals.qualified,
5120
+ ratio: totalCompanies === 0 ? null : stageTotals.qualified / totalCompanies
5121
+ },
5122
+ {
5123
+ label: "Verified",
5124
+ value: stageTotals.verified,
5125
+ ratio: totalContacts === 0 ? null : stageTotals.verified / totalContacts
5126
+ },
5127
+ {
5128
+ label: "Personalized",
5129
+ value: stageTotals.personalized,
5130
+ ratio: totalContacts === 0 ? null : stageTotals.personalized / totalContacts
5131
+ },
5132
+ {
5133
+ label: "Uploaded",
5134
+ value: stageTotals.uploaded,
5135
+ ratio: totalContacts === 0 ? null : stageTotals.uploaded / totalContacts
5136
+ }
4937
5137
  ];
5138
+ const overviewRows = data?.map((list) => {
5139
+ const listMeta = listMetaById.get(list.listId);
5140
+ const completionRatio = computeCompletionRatio(list.stageCounts.populated, list.stageCounts.personalized);
5141
+ const nextFocus = getNextFocus(list);
5142
+ return {
5143
+ ...list,
5144
+ name: listMeta?.name ?? `List ${list.listId.slice(0, 8)}`,
5145
+ completionRatio,
5146
+ nextFocus,
5147
+ status: getOverviewStatus(list)
5148
+ };
5149
+ }).sort((a, b) => {
5150
+ const aActive = a.status.label === "Active Work" ? 1 : 0;
5151
+ const bActive = b.status.label === "Active Work" ? 1 : 0;
5152
+ if (aActive !== bActive) return bActive - aActive;
5153
+ const aBacklog = computeBacklog(a.stageCounts.discovered, a.stageCounts.verified) + computeBacklog(a.stageCounts.verified, a.stageCounts.personalized) + computeBacklog(a.stageCounts.personalized, a.stageCounts.uploaded);
5154
+ const bBacklog = computeBacklog(b.stageCounts.discovered, b.stageCounts.verified) + computeBacklog(b.stageCounts.verified, b.stageCounts.personalized) + computeBacklog(b.stageCounts.personalized, b.stageCounts.uploaded);
5155
+ if (aBacklog !== bBacklog) return bBacklog - aBacklog;
5156
+ return b.totalContacts - a.totalContacts;
5157
+ }) ?? [];
4938
5158
  return /* @__PURE__ */ jsx(SubshellContentContainer, { children: /* @__PURE__ */ jsx(PageContainer, { children: /* @__PURE__ */ jsxs(Stack, { children: [
4939
5159
  /* @__PURE__ */ jsx(
4940
5160
  PageTitleCaption,
4941
5161
  {
4942
5162
  title: "Lead Gen Overview",
4943
- caption: "Pipeline health, list roll-up, and active work at a glance"
5163
+ caption: summaryLine,
5164
+ rightSection: /* @__PURE__ */ jsxs(Group, { gap: "xs", children: [
5165
+ /* @__PURE__ */ jsx(Button, { component: Link$1, to: "/lead-gen/lists", size: "sm", variant: "light", children: "Lists" }),
5166
+ /* @__PURE__ */ jsx(Button, { component: Link$1, to: "/lead-gen/deliverability", size: "sm", variant: "light", children: "Deliverability" })
5167
+ ] })
4944
5168
  }
4945
5169
  ),
4946
- isLoading ? /* @__PURE__ */ jsx(Paper, { withBorder: true, children: /* @__PURE__ */ jsx(Center, { p: "xl", children: /* @__PURE__ */ jsx(Loader, {}) }) }) : isError ? /* @__PURE__ */ jsx(Paper, { withBorder: true, children: /* @__PURE__ */ jsx(CenteredErrorState, { error, title: "Failed to load list telemetry" }) }) : !data?.length ? /* @__PURE__ */ jsx(Paper, { withBorder: true, children: /* @__PURE__ */ jsx(Center, { h: 300, children: /* @__PURE__ */ jsx(Alert, { icon: /* @__PURE__ */ jsx(IconAlertCircle, { size: 16 }), color: "gray", variant: "light", children: "No lists yet." }) }) }) : /* @__PURE__ */ jsxs(Fragment, { children: [
4947
- /* @__PURE__ */ jsxs(SimpleGrid, { cols: { base: 2, sm: 4 }, children: [
4948
- /* @__PURE__ */ jsx(StatCard, { variant: "hero", icon: IconChartBar, value: data.length, label: "Total Lists" }),
4949
- /* @__PURE__ */ jsx(StatCard, { variant: "hero", icon: IconBuildingFactory2, value: totalCompanies, label: "Total Companies" }),
4950
- /* @__PURE__ */ jsx(StatCard, { variant: "hero", icon: IconUsers, value: totalContacts, label: "Total Contacts" }),
4951
- /* @__PURE__ */ jsx(StatCard, { variant: "hero", icon: IconChecklist, value: completionLabel, label: "Overall Completion" })
4952
- ] }),
4953
- /* @__PURE__ */ jsxs(Text, { size: "sm", c: "dimmed", children: [
4954
- "View per-list detail on the",
4955
- " ",
4956
- /* @__PURE__ */ jsx(Anchor, { component: Link$1, to: "/lead-gen/lists", size: "sm", children: "Lists" }),
4957
- " ",
4958
- "page."
5170
+ telemetryQuery.isLoading ? /* @__PURE__ */ jsx(Paper, { withBorder: true, children: /* @__PURE__ */ jsx(Center, { p: "xl", children: /* @__PURE__ */ jsx(Loader, {}) }) }) : telemetryQuery.isError ? /* @__PURE__ */ jsx(Paper, { withBorder: true, children: /* @__PURE__ */ jsx(CenteredErrorState, { error: telemetryQuery.error, title: "Failed to load list telemetry" }) }) : !data?.length ? /* @__PURE__ */ jsx(Paper, { withBorder: true, children: /* @__PURE__ */ jsx(Center, { h: 300, children: /* @__PURE__ */ jsx(Alert, { icon: /* @__PURE__ */ jsx(IconAlertCircle, { size: 16 }), color: "gray", variant: "light", children: "No lists yet." }) }) }) : /* @__PURE__ */ jsxs(Fragment, { children: [
5171
+ /* @__PURE__ */ jsxs(SimpleGrid, { cols: { base: 1, sm: 3 }, children: [
5172
+ /* @__PURE__ */ jsx(StatCard, { variant: "hero", icon: IconPlayerPlay, value: activeListCount, label: "Active Lists" }),
5173
+ /* @__PURE__ */ jsx(StatCard, { variant: "hero", icon: IconArrowRight, value: uploadBacklog, label: "Ready Contacts" }),
5174
+ /* @__PURE__ */ jsx(StatCard, { variant: "hero", icon: IconAlertCircle, value: deliverabilityRiskCount, label: "At Risk" })
4959
5175
  ] }),
4960
5176
  /* @__PURE__ */ jsx(Paper, { withBorder: true, p: "md", children: /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
4961
- /* @__PURE__ */ jsx(Title, { order: 3, children: "Pipeline Roll-Up" }),
4962
- /* @__PURE__ */ jsx(SimpleGrid, { cols: { base: 2, sm: 3, lg: 7 }, children: stageTiles.map((tile) => /* @__PURE__ */ jsxs(Paper, { withBorder: true, p: "sm", children: [
4963
- /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: tile.label }),
4964
- /* @__PURE__ */ jsx(Title, { order: 4, children: tile.value })
4965
- ] }, tile.label)) })
5177
+ /* @__PURE__ */ jsxs(Group, { justify: "space-between", align: "flex-start", gap: "md", children: [
5178
+ /* @__PURE__ */ jsxs(Stack, { gap: 4, children: [
5179
+ /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", tt: "uppercase", fw: 700, children: "Next Action" }),
5180
+ /* @__PURE__ */ jsx(Title, { order: 3, children: primaryAction.title }),
5181
+ /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", maw: 620, children: primaryAction.detail })
5182
+ ] }),
5183
+ /* @__PURE__ */ jsx(Button, { component: Link$1, to: primaryAction.buttonTo, size: "sm", variant: "light", children: primaryAction.buttonLabel })
5184
+ ] }),
5185
+ /* @__PURE__ */ jsxs(SimpleGrid, { cols: { base: 1, md: 3 }, children: [
5186
+ /* @__PURE__ */ jsxs(Paper, { withBorder: true, p: "sm", children: [
5187
+ /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", tt: "uppercase", fw: 600, children: "Verification" }),
5188
+ /* @__PURE__ */ jsxs(Group, { justify: "space-between", align: "flex-end", mt: 6, children: [
5189
+ /* @__PURE__ */ jsx(Title, { order: 4, children: verificationBacklog }),
5190
+ /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "waiting" })
5191
+ ] })
5192
+ ] }),
5193
+ /* @__PURE__ */ jsxs(Paper, { withBorder: true, p: "sm", children: [
5194
+ /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", tt: "uppercase", fw: 600, children: "Personalization" }),
5195
+ /* @__PURE__ */ jsxs(Group, { justify: "space-between", align: "flex-end", mt: 6, children: [
5196
+ /* @__PURE__ */ jsx(Title, { order: 4, children: personalizationBacklog }),
5197
+ /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "ready" })
5198
+ ] })
5199
+ ] }),
5200
+ /* @__PURE__ */ jsxs(Paper, { withBorder: true, p: "sm", children: [
5201
+ /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", tt: "uppercase", fw: 600, children: "Completion" }),
5202
+ /* @__PURE__ */ jsxs(Group, { justify: "space-between", align: "flex-end", mt: 6, children: [
5203
+ /* @__PURE__ */ jsx(Title, { order: 4, children: computeCompletionPercentage(stageTotals.populated, stageTotals.personalized) }),
5204
+ /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "personalized" })
5205
+ ] })
5206
+ ] })
5207
+ ] })
4966
5208
  ] }) }),
4967
5209
  /* @__PURE__ */ jsx(Paper, { withBorder: true, p: "md", children: /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
4968
- /* @__PURE__ */ jsx(Title, { order: 3, children: "List Snapshot" }),
5210
+ /* @__PURE__ */ jsxs(Group, { justify: "space-between", align: "flex-end", children: [
5211
+ /* @__PURE__ */ jsxs("div", { children: [
5212
+ /* @__PURE__ */ jsx(Title, { order: 3, children: "Pipeline" }),
5213
+ /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "Keep the funnel visible without giving every zero state its own section." })
5214
+ ] }),
5215
+ /* @__PURE__ */ jsxs(Badge, { variant: "light", color: "blue", children: [
5216
+ stageTotals.extracted,
5217
+ " extracted \u2022 ",
5218
+ stageTotals.discovered,
5219
+ " discovered"
5220
+ ] })
5221
+ ] }),
5222
+ /* @__PURE__ */ jsx(SimpleGrid, { cols: { base: 1, sm: 2, xl: 5 }, children: pipelineStages.map((stage) => /* @__PURE__ */ jsx(
5223
+ CompactPipelineStage,
5224
+ {
5225
+ label: stage.label,
5226
+ value: stage.value,
5227
+ ratio: stage.ratio
5228
+ },
5229
+ stage.label
5230
+ )) })
5231
+ ] }) }),
5232
+ /* @__PURE__ */ jsx(Paper, { withBorder: true, p: "md", children: /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
5233
+ /* @__PURE__ */ jsxs(Group, { justify: "space-between", align: "flex-end", children: [
5234
+ /* @__PURE__ */ jsxs("div", { children: [
5235
+ /* @__PURE__ */ jsx(Title, { order: 3, children: "List Snapshot" }),
5236
+ /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "Ranked to surface active work first, then the largest unresolved backlogs." })
5237
+ ] }),
5238
+ /* @__PURE__ */ jsx(Button, { component: Link$1, to: "/lead-gen/lists", size: "sm", variant: "subtle", children: "Open lists" })
5239
+ ] }),
4969
5240
  /* @__PURE__ */ jsxs(Table, { children: [
4970
5241
  /* @__PURE__ */ jsx(Table.Thead, { children: /* @__PURE__ */ jsxs(Table.Tr, { children: [
4971
5242
  /* @__PURE__ */ jsx(Table.Th, { children: "List" }),
4972
5243
  /* @__PURE__ */ jsx(Table.Th, { children: "Companies" }),
4973
5244
  /* @__PURE__ */ jsx(Table.Th, { children: "Contacts" }),
4974
- /* @__PURE__ */ jsx(Table.Th, { children: "Completion" }),
5245
+ /* @__PURE__ */ jsx(Table.Th, { children: "Next Focus" }),
5246
+ /* @__PURE__ */ jsx(Table.Th, { children: "Progress" }),
4975
5247
  /* @__PURE__ */ jsx(Table.Th, { children: "Status" })
4976
5248
  ] }) }),
4977
- /* @__PURE__ */ jsx(Table.Tbody, { children: data.map((list) => {
4978
- const completion = computeCompletionPercentage(
4979
- list.stageCounts.populated,
4980
- list.stageCounts.personalized
4981
- );
4982
- const isActive = (list.activeWorkflows?.length ?? 0) > 0;
4983
- return /* @__PURE__ */ jsxs(Table.Tr, { children: [
4984
- /* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsx(Text, { size: "sm", fw: 500, children: list.listId }) }),
4985
- /* @__PURE__ */ jsx(Table.Td, { children: list.totalCompanies }),
4986
- /* @__PURE__ */ jsx(Table.Td, { children: list.totalContacts }),
4987
- /* @__PURE__ */ jsx(Table.Td, { children: completion }),
4988
- /* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsx(Badge, { size: "sm", variant: isActive ? "light" : "outline", color: isActive ? "green" : "gray", children: isActive ? "Active Work" : "Idle" }) })
4989
- ] }, list.listId);
4990
- }) })
5249
+ /* @__PURE__ */ jsx(Table.Tbody, { children: overviewRows.map((list) => /* @__PURE__ */ jsxs(Table.Tr, { children: [
5250
+ /* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsxs(Stack, { gap: 2, children: [
5251
+ /* @__PURE__ */ jsx(Link$1, { to: "/lead-gen/lists/$listId", params: { listId: list.listId }, children: /* @__PURE__ */ jsx(Text, { size: "sm", fw: 600, component: "span", c: "blue.4", children: list.name }) }),
5252
+ /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: list.listId })
5253
+ ] }) }),
5254
+ /* @__PURE__ */ jsx(Table.Td, { children: list.totalCompanies }),
5255
+ /* @__PURE__ */ jsx(Table.Td, { children: list.totalContacts }),
5256
+ /* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsxs(Stack, { gap: 2, children: [
5257
+ /* @__PURE__ */ jsx(Text, { size: "sm", fw: 500, children: list.nextFocus.label }),
5258
+ /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: list.nextFocus.count == null ? "No outstanding count" : `${list.nextFocus.count} item${list.nextFocus.count === 1 ? "" : "s"} queued` })
5259
+ ] }) }),
5260
+ /* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsxs(Stack, { gap: "xs", miw: 150, children: [
5261
+ /* @__PURE__ */ jsxs(Group, { justify: "space-between", gap: "xs", children: [
5262
+ /* @__PURE__ */ jsx(Text, { size: "sm", children: formatPercentage(list.completionRatio) }),
5263
+ /* @__PURE__ */ jsxs(Text, { size: "xs", c: "dimmed", children: [
5264
+ list.stageCounts.personalized,
5265
+ "/",
5266
+ list.stageCounts.populated || 0
5267
+ ] })
5268
+ ] }),
5269
+ /* @__PURE__ */ jsx(
5270
+ Progress,
5271
+ {
5272
+ value: list.completionRatio == null ? 0 : list.completionRatio * 100,
5273
+ size: "sm",
5274
+ radius: "xl",
5275
+ color: "blue"
5276
+ }
5277
+ )
5278
+ ] }) }),
5279
+ /* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsx(Badge, { size: "sm", variant: "light", color: list.status.color, children: list.status.label }) })
5280
+ ] }, list.listId)) })
4991
5281
  ] })
4992
5282
  ] }) })
4993
5283
  ] })
4994
5284
  ] }) }) });
4995
5285
  }
4996
- function computeBounceRate(d) {
4997
- const denominator = d.valid + d.risky + d.invalid + d.bounced;
4998
- if (denominator === 0) return EM_DASH;
4999
- return `${(d.bounced / denominator * 100).toFixed(1)}%`;
5000
- }
5001
5286
  function LeadGenDeliverabilityPage() {
5002
5287
  const { data, isLoading, error } = useListsTelemetry();
5003
5288
  if (isLoading) {
@@ -1,4 +1,4 @@
1
- export { Dashboard, OperationsOverview, RecentExecutionsByResource, ResourceOverview, UnresolvedErrorsTeaser, dashboardManifest } from '../../chunk-BIZNOFO4.js';
1
+ export { Dashboard, OperationsOverview, RecentExecutionsByResource, ResourceOverview, UnresolvedErrorsTeaser, dashboardManifest } from '../../chunk-O6KZ46EJ.js';
2
2
  import '../../chunk-LGKLC5MG.js';
3
3
  import '../../chunk-KFICYU6S.js';
4
4
  import '../../chunk-YEX4MQSY.js';
@@ -7,8 +7,8 @@ import '../../chunk-J5TBNCMD.js';
7
7
  import '../../chunk-LXHZYSMQ.js';
8
8
  import '../../chunk-F6RBK7NJ.js';
9
9
  import '../../chunk-XA34RETF.js';
10
- import '../../chunk-QITPFGWC.js';
11
- import '../../chunk-RB34YOIX.js';
10
+ import '../../chunk-LH7RCX4Y.js';
11
+ import '../../chunk-3WMJWXZY.js';
12
12
  import '../../chunk-CYXZHBP4.js';
13
13
  import '../../chunk-MZPVNRPL.js';
14
14
  import '../../chunk-RX4UWZZR.js';
@@ -10,8 +10,8 @@ import '../../chunk-J5TBNCMD.js';
10
10
  import '../../chunk-LXHZYSMQ.js';
11
11
  import '../../chunk-F6RBK7NJ.js';
12
12
  import '../../chunk-XA34RETF.js';
13
- import '../../chunk-QITPFGWC.js';
14
- import '../../chunk-RB34YOIX.js';
13
+ import '../../chunk-LH7RCX4Y.js';
14
+ import '../../chunk-3WMJWXZY.js';
15
15
  import '../../chunk-CYXZHBP4.js';
16
16
  import '../../chunk-MZPVNRPL.js';
17
17
  import '../../chunk-RX4UWZZR.js';
@@ -1,9 +1,9 @@
1
- export { AgentExecutionPanel, AgentSessionGroup, CalibrationPage, CalibrationProgress, CalibrationProjectDetailPage, CalibrationProjectsPage, CalibrationRunDetailPage, CalibrationSidebar, CommandQueueDetailPage, CommandQueuePage, CommandQueueShell, CommandViewPage, CommandViewSidebarContent, ExecuteWorkflowModal, ExecutionPanel, OperationsSidebar, OperationsSidebarMiddle, OperationsSidebarTop, ResourceDetailPage, ResourceExecuteDialog, ResourceExecuteForm, ResourcesPage, ResourcesSidebar, SessionChatArea, SessionChatInterface, SessionChatPage, SessionDetailsSidebar, SessionExecutionLogs, SessionHeader, SessionListItem, SessionsPage, SessionsSidebar, WorkflowExecutionPanel, operationsManifest } from '../../chunk-7IE3KXKV.js';
1
+ export { AgentExecutionPanel, AgentSessionGroup, CalibrationPage, CalibrationProgress, CalibrationProjectDetailPage, CalibrationProjectsPage, CalibrationRunDetailPage, CalibrationSidebar, CommandQueueDetailPage, CommandQueuePage, CommandQueueShell, CommandViewPage, CommandViewSidebarContent, ExecuteWorkflowModal, ExecutionPanel, OperationsSidebar, OperationsSidebarMiddle, OperationsSidebarTop, ResourceDetailPage, ResourceExecuteDialog, ResourceExecuteForm, ResourcesPage, ResourcesSidebar, SessionChatArea, SessionChatInterface, SessionChatPage, SessionDetailsSidebar, SessionExecutionLogs, SessionHeader, SessionListItem, SessionsPage, SessionsSidebar, WorkflowExecutionPanel, operationsManifest } from '../../chunk-YOZEGIZA.js';
2
2
  import '../../chunk-ROSMICXG.js';
3
3
  import '../../chunk-OCP2MBTY.js';
4
4
  import '../../chunk-PFONCU6C.js';
5
5
  import '../../chunk-GBMNCNHX.js';
6
- export { OperationsOverview } from '../../chunk-BIZNOFO4.js';
6
+ export { OperationsOverview } from '../../chunk-O6KZ46EJ.js';
7
7
  import '../../chunk-LGKLC5MG.js';
8
8
  import '../../chunk-KFICYU6S.js';
9
9
  import '../../chunk-YEX4MQSY.js';
@@ -12,8 +12,8 @@ import '../../chunk-J5TBNCMD.js';
12
12
  import '../../chunk-LXHZYSMQ.js';
13
13
  import '../../chunk-F6RBK7NJ.js';
14
14
  import '../../chunk-XA34RETF.js';
15
- import '../../chunk-QITPFGWC.js';
16
- import '../../chunk-RB34YOIX.js';
15
+ import '../../chunk-LH7RCX4Y.js';
16
+ import '../../chunk-3WMJWXZY.js';
17
17
  import '../../chunk-CYXZHBP4.js';
18
18
  import '../../chunk-MZPVNRPL.js';
19
19
  import '../../chunk-RX4UWZZR.js';
@@ -1,14 +1,14 @@
1
- export { AccountSettings, AppearanceSettings, CreateWebhookEndpointModal, EditCredentialModal, EditWebhookEndpointModal, MemberConfigModal, OAuthIntegrationsCard, OrgMembersList, OrganizationSettings, WebhookEndpointList, WebhookEndpointSettings, settingsManifest } from '../../chunk-MXVA7U2I.js';
1
+ export { AccountSettings, AppearanceSettings, CreateWebhookEndpointModal, EditCredentialModal, EditWebhookEndpointModal, MemberConfigModal, OAuthIntegrationsCard, OrgMembersList, OrganizationSettings, WebhookEndpointList, WebhookEndpointSettings, settingsManifest } from '../../chunk-5KBVISVJ.js';
2
2
  import '../../chunk-PDHTXPSF.js';
3
3
  import '../../chunk-GBMNCNHX.js';
4
4
  import '../../chunk-YEX4MQSY.js';
5
- import '../../chunk-35QO7M43.js';
5
+ import '../../chunk-M66JAN7R.js';
6
6
  import '../../chunk-JT3FN6TE.js';
7
7
  import '../../chunk-J5TBNCMD.js';
8
8
  import '../../chunk-LXHZYSMQ.js';
9
9
  import '../../chunk-F6RBK7NJ.js';
10
- import '../../chunk-QITPFGWC.js';
11
- import '../../chunk-RB34YOIX.js';
10
+ import '../../chunk-LH7RCX4Y.js';
11
+ import '../../chunk-3WMJWXZY.js';
12
12
  import '../../chunk-CYXZHBP4.js';
13
13
  import '../../chunk-MZPVNRPL.js';
14
14
  import '../../chunk-RX4UWZZR.js';
@@ -2,8 +2,8 @@ export { ApiKeyService, CredentialService, DeploymentService, OrganizationMember
2
2
  export { OperationsService, acquisitionListKeys, calibrationKeys, companyKeys, contactKeys, dealKeys, dealNoteKeys, dealTaskKeys, executionsKeys, isSessionCapable, operationsKeys, scheduleKeys, sessionsKeys, sortData, useActivities, useActivityTrend, useAllCalibrationProjects, useArchiveSession, useArchivedLogs, useBatchDelete, useBatchTelemetry, useBatchedResourcesHealth, useBulkDeleteExecutions, useBusinessImpact, useCalibrationProject, useCalibrationProjects, useCalibrationRun, useCalibrationRunFull, useCalibrationRuns, useCalibrationSSE, useCancelExecution, useCancelSchedule, useCheckpointTasks, useCommandQueue, useCommandQueueTotals, useCommandViewData, useCommandViewLayout, useCommandViewStats, useCommandViewStore, useCompanies, useCompany, useCompleteDealTask, useContact, useContacts, useCostBreakdown, useCostByModel, useCostSummary, useCostTrends, useCreateCompany, useCreateContact, useCreateDealNote, useCreateDealTask, useCreateList, useCreateProject, useCreateRun, useCreateSchedule, useCreateSession, useDashboardMetrics, useDealDetail, useDealNotes, useDealTasks, useDealTasksDue, useDeals, useDeleteCompanies, useDeleteContacts, useDeleteDeal, useDeleteExecution, useDeleteList, useDeleteProject, useDeleteRun, useDeleteSchedule, useDeleteSession, useDeleteTask, useDeploymentDocs, useErrorAnalysis, useErrorDetail, useErrorDetails, useErrorDistribution, useErrorNotification, useExecuteAsync, useExecuteRun, useExecuteWorkflow, useExecution, useExecutionHealth, useExecutionLogSSE, useExecutionLogs, useExecutionPanelState, useExecutions, useGetExecutionHistory, useGetSchedule, useGradeRun, useGraphStats, useList, useListExecutions, useListProgress, useListSchedules, useLists, useListsTelemetry, useMarkAllAsRead, useMarkAsRead, useNotificationCount as useNotificationCountSSE, useNotifications, usePaginationState, usePatchTask, usePauseSchedule, useRecentExecutionsByResource, useResolveAllErrors, useResolveError, useResolveErrorsByExecution, useResourceDefinition, useResourceErrors, useResourceExecutions, useResources, useResourcesHealth, useResumeSchedule, useRetryExecution, useSSEConnection, useScheduledTasks, useSession, useSessionExecution, useSessionExecutions, useSessionMessages, useSessionWebSocket, useSessions, useSortedData, useSubmitAction, useSuccessNotification, useSyncDealStage, useTableSelection, useTableSort, useTestNotification, useTopFailingResources, useUnresolveError, useUnresolvedErrors, useUpdateAnchor, useUpdateCompany, useUpdateContact, useUpdateList, useUpdateListConfig, useUpdateProject, useUpdateSchedule, useWarningNotification } from '../chunk-J5TBNCMD.js';
3
3
  export { observabilityKeys, useErrorTrends } from '../chunk-LXHZYSMQ.js';
4
4
  import '../chunk-F6RBK7NJ.js';
5
- import '../chunk-QITPFGWC.js';
6
- import '../chunk-RB34YOIX.js';
5
+ import '../chunk-LH7RCX4Y.js';
6
+ import '../chunk-3WMJWXZY.js';
7
7
  import '../chunk-CYXZHBP4.js';
8
8
  export { createUseFeatureAccess } from '../chunk-MZPVNRPL.js';
9
9
  import '../chunk-RX4UWZZR.js';
@@ -1,8 +1,8 @@
1
1
  export { OperationsService, acquisitionListKeys, calibrationKeys, companyKeys, contactKeys, dealKeys, dealNoteKeys, dealTaskKeys, executionsKeys, isSessionCapable, operationsKeys, scheduleKeys, sessionsKeys, sortData, useActivities, useActivityTrend, useAllCalibrationProjects, useArchiveSession, useArchivedLogs, useBatchDelete, useBatchTelemetry, useBatchedResourcesHealth, useBulkDeleteExecutions, useBusinessImpact, useCalibrationProject, useCalibrationProjects, useCalibrationRun, useCalibrationRunFull, useCalibrationRuns, useCalibrationSSE, useCancelExecution, useCancelSchedule, useCheckpointTasks, useCommandQueue, useCommandQueueTotals, useCommandViewData, useCommandViewLayout, useCommandViewStats, useCommandViewStore, useCompanies, useCompany, useCompleteDealTask, useContact, useContacts, useCostBreakdown, useCostByModel, useCostSummary, useCostTrends, useCreateCompany, useCreateContact, useCreateDealNote, useCreateDealTask, useCreateList, useCreateProject, useCreateRun, useCreateSchedule, useCreateSession, useDashboardMetrics, useDealDetail, useDealNotes, useDealTasks, useDealTasksDue, useDeals, useDeleteCompanies, useDeleteContacts, useDeleteDeal, useDeleteExecution, useDeleteList, useDeleteProject, useDeleteRun, useDeleteSchedule, useDeleteSession, useDeleteTask, useDeploymentDocs, useErrorAnalysis, useErrorDetail, useErrorDetails, useErrorDistribution, useErrorNotification, useExecuteAsync, useExecuteRun, useExecuteWorkflow, useExecution, useExecutionHealth, useExecutionLogSSE, useExecutionLogs, useExecutionPanelState, useExecutions, useGetExecutionHistory, useGetSchedule, useGradeRun, useGraphStats, useList, useListExecutions, useListProgress, useListSchedules, useLists, useListsTelemetry, useMarkAllAsRead, useMarkAsRead, useNotificationCount as useNotificationCountSSE, useNotifications, usePaginationState, usePatchTask, usePauseSchedule, useRecentExecutionsByResource, useResolveAllErrors, useResolveError, useResolveErrorsByExecution, useResourceDefinition, useResourceErrors, useResourceExecutions, useResources, useResourcesHealth, useResumeSchedule, useRetryExecution, useSSEConnection, useScheduledTasks, useSession, useSessionExecution, useSessionExecutions, useSessionMessages, useSessionWebSocket, useSessions, useSortedData, useSubmitAction, useSuccessNotification, useSyncDealStage, useTableSelection, useTableSort, useTestNotification, useTopFailingResources, useUnresolveError, useUnresolvedErrors, useUpdateAnchor, useUpdateCompany, useUpdateContact, useUpdateList, useUpdateListConfig, useUpdateProject, useUpdateSchedule, useWarningNotification } from '../chunk-J5TBNCMD.js';
2
2
  export { observabilityKeys, useErrorTrends } from '../chunk-LXHZYSMQ.js';
3
3
  import '../chunk-F6RBK7NJ.js';
4
- import '../chunk-QITPFGWC.js';
5
- import '../chunk-RB34YOIX.js';
4
+ import '../chunk-LH7RCX4Y.js';
5
+ import '../chunk-3WMJWXZY.js';
6
6
  import '../chunk-CYXZHBP4.js';
7
7
  export { createUseFeatureAccess } from '../chunk-MZPVNRPL.js';
8
8
  import '../chunk-RX4UWZZR.js';
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import './chunk-XCYKC6OZ.js';
2
- export { useAvailablePresets } from './chunk-35QO7M43.js';
2
+ export { useAvailablePresets } from './chunk-M66JAN7R.js';
3
3
  export { ApiKeyService, CredentialService, DeploymentService, OrganizationMembershipService, WebhookEndpointService, filterByDomainFilters, milestoneKeys, noteKeys, projectKeys, taskKeys, useActivateDeployment, useActivityFilters, useCommandViewDomainFilters, useCreateApiKey, useCreateCredential, useCreateProject as useCreateDeliveryProject, useCreateMilestone, useCreateNote, useCreateWebhookEndpoint, useCredentials, useDeactivateDeployment, useDeactivateMembership, useDeleteApiKey, useDeleteCredential, useDeleteProject as useDeleteDeliveryProject, useDeleteTask as useDeleteDeliveryTask, useDeleteDeployment, useDeleteMilestone, useDeleteWebhookEndpoint, useExecutionLogsFilters, useListApiKeys, useListDeployments, useListWebhookEndpoints, useMilestones, useOrganizationMembers, useProject, useProjectNotes, useProjects, useReactivateMembership, useResourceSearch, useResourcesDomainFilters, useStatusFilter, useTasks, useTimeRangeDates, useUpdateApiKey, useUpdateCredential, useUpdateProject as useUpdateDeliveryProject, useUpdateMemberConfig, useUpdateMilestone, useUpdateWebhookEndpoint, useUserMemberships, useVisibleResources } from './chunk-JT3FN6TE.js';
4
4
  export { OperationsService, acquisitionListKeys, calibrationKeys, companyKeys, contactKeys, dealKeys, dealNoteKeys, dealTaskKeys, executionsKeys, isSessionCapable, operationsKeys, scheduleKeys, sessionsKeys, sortData, useActivities, useActivityTrend, useAllCalibrationProjects, useArchiveSession, useArchivedLogs, useBatchDelete, useBatchTelemetry, useBatchedResourcesHealth, useBulkDeleteExecutions, useBusinessImpact, useCalibrationProject, useCalibrationProjects, useCalibrationRun, useCalibrationRunFull, useCalibrationRuns, useCalibrationSSE, useCancelExecution, useCancelSchedule, useCheckpointTasks, useCommandQueue, useCommandQueueTotals, useCommandViewData, useCommandViewLayout, useCommandViewStats, useCommandViewStore, useCompanies, useCompany, useCompleteDealTask, useContact, useContacts, useCostBreakdown, useCostByModel, useCostSummary, useCostTrends, useCreateCompany, useCreateContact, useCreateDealNote, useCreateDealTask, useCreateList, useCreateProject, useCreateRun, useCreateSchedule, useCreateSession, useDashboardMetrics, useDealDetail, useDealNotes, useDealTasks, useDealTasksDue, useDeals, useDeleteCompanies, useDeleteContacts, useDeleteDeal, useDeleteExecution, useDeleteList, useDeleteProject, useDeleteRun, useDeleteSchedule, useDeleteSession, useDeleteTask, useDeploymentDocs, useErrorAnalysis, useErrorDetail, useErrorDetails, useErrorDistribution, useErrorNotification, useExecuteAsync, useExecuteRun, useExecuteWorkflow, useExecution, useExecutionHealth, useExecutionLogSSE, useExecutionLogs, useExecutionPanelState, useExecutions, useGetExecutionHistory, useGetSchedule, useGradeRun, useGraphStats, useList, useListExecutions, useListProgress, useListSchedules, useLists, useListsTelemetry, useMarkAllAsRead, useMarkAsRead, useNotificationCount as useNotificationCountSSE, useNotifications, usePaginationState, usePatchTask, usePauseSchedule, useRecentExecutionsByResource, useResolveAllErrors, useResolveError, useResolveErrorsByExecution, useResourceDefinition, useResourceErrors, useResourceExecutions, useResources, useResourcesHealth, useResumeSchedule, useRetryExecution, useSSEConnection, useScheduledTasks, useSession, useSessionExecution, useSessionExecutions, useSessionMessages, useSessionWebSocket, useSessions, useSortedData, useSubmitAction, useSuccessNotification, useSyncDealStage, useTableSelection, useTableSort, useTestNotification, useTopFailingResources, useUnresolveError, useUnresolvedErrors, useUpdateAnchor, useUpdateCompany, useUpdateContact, useUpdateList, useUpdateListConfig, useUpdateProject, useUpdateSchedule, useWarningNotification } from './chunk-J5TBNCMD.js';
5
5
  export { observabilityKeys, useErrorTrends } from './chunk-LXHZYSMQ.js';
6
6
  export { GRAPH_CONSTANTS, calculateGraphHeight, useConnectionHighlight, useDirectedChainHighlighting, useFitViewTrigger, useGraphHighlighting, useNodeSelection } from './chunk-F6RBK7NJ.js';
7
7
  export { AGENT_CONSTANTS, CONTAINER_CONSTANTS, SHARED_VIZ_CONSTANTS, STATUS_COLORS, TIMELINE_CONSTANTS, WORKFLOW_CONSTANTS, calculateBarPosition, formatDuration, getEdgeColor, getEdgeOpacity, getResourceStatusColor, getStatusColors, getStatusIcon, shouldAnimateEdge, useAgentIterationData, useExecutionPath, useMergedExecution, useReactFlowAgent, useTimelineData, useUnifiedWorkflowLayout, useWorkflowStepsLayout } from './chunk-XA34RETF.js';
8
- export { ElevasisUIProvider } from './chunk-QITPFGWC.js';
9
- export { PresetsProvider, TOKEN_VAR_MAP, componentThemes, createCssVariablesResolver, generateShades, getPreset, mantineThemeOverride, PRESETS as presets, usePresetsContext } from './chunk-RB34YOIX.js';
8
+ export { ElevasisUIProvider } from './chunk-LH7RCX4Y.js';
9
+ export { PresetsProvider, TOKEN_VAR_MAP, componentThemes, createCssVariablesResolver, generateShades, getPreset, mantineThemeOverride, PRESETS as presets, usePresetsContext } from './chunk-3WMJWXZY.js';
10
10
  import './chunk-CYXZHBP4.js';
11
11
  export { ElevasisCoreProvider, ElevasisFeaturesProvider, FeatureShell, NotificationProvider, createUseFeatureAccess, useElevasisFeatures, useNotificationAdapter, useOptionalElevasisFeatures } from './chunk-MZPVNRPL.js';
12
12
  import './chunk-RX4UWZZR.js';
@@ -1,5 +1,5 @@
1
- export { ElevasisUIProvider } from '../chunk-QITPFGWC.js';
2
- import '../chunk-RB34YOIX.js';
1
+ export { ElevasisUIProvider } from '../chunk-LH7RCX4Y.js';
2
+ import '../chunk-3WMJWXZY.js';
3
3
  import '../chunk-CYXZHBP4.js';
4
4
  export { ElevasisCoreProvider, ElevasisFeaturesProvider, FeatureShell, NotificationProvider, useElevasisFeatures, useNotificationAdapter, useOptionalElevasisFeatures } from '../chunk-MZPVNRPL.js';
5
5
  import '../chunk-RX4UWZZR.js';
@@ -1,3 +1,3 @@
1
- export { useAvailablePresets } from '../chunk-35QO7M43.js';
2
- export { PresetsProvider, TOKEN_VAR_MAP, componentThemes, createCssVariablesResolver, generateShades, getPreset, mantineThemeOverride, PRESETS as presets, usePresetsContext } from '../chunk-RB34YOIX.js';
1
+ export { useAvailablePresets } from '../chunk-M66JAN7R.js';
2
+ export { PresetsProvider, TOKEN_VAR_MAP, componentThemes, createCssVariablesResolver, generateShades, getPreset, mantineThemeOverride, PRESETS as presets, usePresetsContext } from '../chunk-3WMJWXZY.js';
3
3
  import '../chunk-CYXZHBP4.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elevasis/ui",
3
- "version": "2.2.0",
3
+ "version": "2.2.1",
4
4
  "description": "UI components and platform-aware hooks for building custom frontends on the Elevasis platform",
5
5
  "type": "module",
6
6
  "license": "MIT",