@elevasis/ui 2.18.0 → 2.20.0
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/{CoreAuthKitInner-I32JCNE7.js → CoreAuthKitInner-QC62UHTZ.js} +1 -0
- package/dist/api/index.js +3 -2
- package/dist/app/index.js +6 -5
- package/dist/auth/context.js +1 -0
- package/dist/auth/index.js +1 -0
- package/dist/charts/index.js +4 -3
- package/dist/{chunk-LT33DSMO.js → chunk-2CFOFSSG.js} +4 -4
- package/dist/chunk-3JCMO7SD.js +14 -0
- package/dist/chunk-7XKCG5CT.js +125 -0
- package/dist/{chunk-SQPM2QDH.js → chunk-BHR7IV72.js} +3 -2
- package/dist/{chunk-DDZMBNTY.js → chunk-CTTY6FUT.js} +2 -2
- package/dist/chunk-DRQPEMJI.js +42 -0
- package/dist/{chunk-EY322HXF.js → chunk-FMFX4K6E.js} +19 -6
- package/dist/{chunk-UA36WILN.js → chunk-GP3AFJYG.js} +145 -211
- package/dist/{chunk-P6TC4K7I.js → chunk-GTYUP7MB.js} +4 -4
- package/dist/chunk-HJ4CJIWN.js +38 -0
- package/dist/chunk-I2KLQ2HA.js +19 -0
- package/dist/{chunk-B6FIIEFO.js → chunk-JR5WNTLA.js} +128 -117
- package/dist/{chunk-A2AZY5SF.js → chunk-LR5CRY5A.js} +1 -1
- package/dist/{chunk-GRGRBWIO.js → chunk-M7W7CGPL.js} +1 -1
- package/dist/{chunk-SS2UVUSG.js → chunk-MZFJWCPH.js} +73 -121
- package/dist/{chunk-P3TFNFZS.js → chunk-OUYH2SBS.js} +3 -3
- package/dist/{chunk-66VY5EMV.js → chunk-PJVG3ISO.js} +5 -5
- package/dist/{chunk-I3LQGLUC.js → chunk-Q4QJOSVS.js} +1 -1
- package/dist/{chunk-R73EHHPN.js → chunk-Q5HC6ENG.js} +18 -2
- package/dist/{chunk-VDM6DQES.js → chunk-R7OJCNL3.js} +1 -1
- package/dist/{chunk-6RWMRQN5.js → chunk-TIIPYB2Z.js} +1 -1
- package/dist/{chunk-34NQLV2W.js → chunk-TO7QXDBX.js} +3 -3
- package/dist/{chunk-WP3IYOVJ.js → chunk-YP6T426C.js} +107 -56
- package/dist/{chunk-FM6LSZ45.js → chunk-ZE2KQSHL.js} +4 -4
- package/dist/components/chat/index.js +1 -0
- package/dist/components/index.d.ts +218 -2808
- package/dist/components/index.js +26 -25
- package/dist/components/navigation/index.js +1 -0
- package/dist/execution/index.js +1 -0
- package/dist/features/auth/index.js +1 -0
- package/dist/features/crm/index.d.ts +54 -53
- package/dist/features/crm/index.js +12 -11
- package/dist/features/dashboard/index.js +13 -12
- package/dist/features/delivery/index.d.ts +2642 -2605
- package/dist/features/delivery/index.js +12 -11
- package/dist/features/lead-gen/index.js +12 -22
- package/dist/features/monitoring/index.js +14 -13
- package/dist/features/monitoring/requests/index.d.ts +38 -27
- package/dist/features/monitoring/requests/index.js +213 -106
- package/dist/features/operations/index.d.ts +8 -26
- package/dist/features/operations/index.js +16 -15
- package/dist/features/seo/index.js +1 -0
- package/dist/features/settings/index.d.ts +36 -37
- package/dist/features/settings/index.js +13 -12
- package/dist/graph/index.js +1 -0
- package/dist/hooks/delivery/index.d.ts +2712 -2699
- package/dist/hooks/delivery/index.js +3 -2
- package/dist/hooks/index.d.ts +1674 -4617
- package/dist/hooks/index.js +11 -10
- package/dist/hooks/operations/command-view/utils/transformCommandViewData.js +1 -0
- package/dist/hooks/published.d.ts +1674 -4617
- package/dist/hooks/published.js +11 -10
- package/dist/index.d.ts +773 -3635
- package/dist/index.js +12 -11
- package/dist/initialization/index.js +1 -0
- package/dist/layout/index.d.ts +14 -2
- package/dist/layout/index.js +2 -1
- package/dist/organization/index.js +1 -0
- package/dist/profile/index.js +1 -0
- package/dist/provider/ElevasisServiceContext.js +1 -0
- package/dist/provider/index.d.ts +320 -249
- package/dist/provider/index.js +9 -8
- package/dist/provider/published.d.ts +320 -249
- package/dist/provider/published.js +6 -5
- package/dist/router/context.js +1 -0
- package/dist/router/index.js +1 -0
- package/dist/sse/index.d.ts +1 -6
- package/dist/sse/index.js +1 -1
- package/dist/supabase/index.js +1 -0
- package/dist/test-utils/index.d.ts +117 -0
- package/dist/test-utils/index.js +136 -0
- package/dist/test-utils/setup-integration.d.ts +2 -0
- package/dist/test-utils/setup-integration.js +26 -0
- package/dist/test-utils/setup.d.ts +2 -0
- package/dist/test-utils/setup.js +47 -0
- package/dist/theme/index.js +3 -2
- package/dist/typeform/index.js +1 -0
- package/dist/typeform/schemas.js +1 -0
- package/dist/types/index.d.ts +1604 -2489
- package/dist/utils/index.d.ts +32 -1
- package/dist/utils/index.js +2 -1
- package/dist/zustand/index.d.ts +4 -8
- package/dist/zustand/index.js +2 -0
- package/package.json +33 -5
- package/src/test-utils/README.md +5 -0
- package/dist/chunk-ADSSLKKP.js +0 -10
- /package/dist/{chunk-GCBWGGI6.js → chunk-OD7GWIZS.js} +0 -0
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
import { ResourceExecuteDialog } from './chunk-WP3IYOVJ.js';
|
|
2
1
|
import { PageContainer } from './chunk-BZZCNLT6.js';
|
|
3
2
|
import { TableSelectionToolbar, SortableHeader } from './chunk-TUMSNGTX.js';
|
|
4
3
|
import { SubshellNavItem } from './chunk-CEWTOKE7.js';
|
|
5
4
|
import { SubshellSidebarSection } from './chunk-IIMU5YAJ.js';
|
|
6
5
|
import { FilterBar } from './chunk-PDHTXPSF.js';
|
|
7
6
|
import { CustomModal } from './chunk-GBMNCNHX.js';
|
|
8
|
-
import { acquisitionListKeys, useListsTelemetry, useLists, useCreateList, useTableSort, sortData, usePaginationState, useTableSelection, useList, useListProgress, useListExecutions,
|
|
9
|
-
import { showApiErrorNotification, showSuccessNotification } from './chunk-
|
|
7
|
+
import { acquisitionListKeys, useListsTelemetry, useLists, useCreateList, useTableSort, sortData, usePaginationState, useTableSelection, useList, useListProgress, useListExecutions, useContacts, useCompanies, useCompanyFacets, useDeleteCompanies, useDeleteContacts } from './chunk-FMFX4K6E.js';
|
|
8
|
+
import { showApiErrorNotification, showSuccessNotification } from './chunk-M7W7CGPL.js';
|
|
10
9
|
import { SubshellContentContainer } from './chunk-RX4UWZZR.js';
|
|
11
|
-
import { PageTitleCaption, CenteredErrorState, StatCard, EmptyState } from './chunk-
|
|
10
|
+
import { PageTitleCaption, CenteredErrorState, StatCard, CardHeader, EmptyState } from './chunk-BHR7IV72.js';
|
|
12
11
|
import { useRouterContext } from './chunk-Q7DJKLEN.js';
|
|
13
12
|
import { useElevasisServices } from './chunk-IRW7JMQ4.js';
|
|
14
|
-
import { Stack, Paper, Text, Anchor, Group, Title, ActionIcon, Divider, Box, SimpleGrid, Badge, Card, Button, Center, Loader, Alert, Table, TextInput, Checkbox, Pagination, Textarea, Select,
|
|
15
|
-
import { IconLayoutGrid, IconList, IconBuilding, IconAddressBook, IconTarget, IconExternalLink, IconX, IconAlertCircle, IconPlayerPlay, IconArrowRight, IconPlus, IconSearch,
|
|
13
|
+
import { Stack, Paper, Text, Anchor, Group, Title, ActionIcon, Divider, Box, SimpleGrid, Badge, Card, Button, Center, Loader, Alert, Table, TextInput, Checkbox, Pagination, Textarea, Select, SegmentedControl } from '@mantine/core';
|
|
14
|
+
import { IconLayoutGrid, IconList, IconBuilding, IconAddressBook, IconTarget, IconExternalLink, IconX, IconAlertCircle, IconPlayerPlay, IconArrowRight, IconSparkles, IconListDetails, IconPlus, IconSearch, IconAlertTriangle, IconArrowLeft, IconUsers, IconBuildingFactory2 } from '@tabler/icons-react';
|
|
16
15
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
17
16
|
import { Link, useNavigate } from '@tanstack/react-router';
|
|
18
17
|
import { useQueryClient, useMutation } from '@tanstack/react-query';
|
|
@@ -634,7 +633,7 @@ function LeadGenOverviewPage() {
|
|
|
634
633
|
{
|
|
635
634
|
title: "Lead Gen Overview",
|
|
636
635
|
caption: summaryLine,
|
|
637
|
-
rightSection: /* @__PURE__ */ jsx(Button, { component: Link, to: "/lead-gen/lists", size: "
|
|
636
|
+
rightSection: /* @__PURE__ */ jsx(Button, { component: Link, to: "/lead-gen/lists", size: "xs", variant: "light", children: "Lists" })
|
|
638
637
|
}
|
|
639
638
|
),
|
|
640
639
|
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: [
|
|
@@ -644,14 +643,16 @@ function LeadGenOverviewPage() {
|
|
|
644
643
|
/* @__PURE__ */ jsx(StatCard, { variant: "hero", icon: IconAlertCircle, value: deliverabilityRiskCount, label: "At Risk" })
|
|
645
644
|
] }),
|
|
646
645
|
/* @__PURE__ */ jsx(Paper, { withBorder: true, p: "md", children: /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
|
|
647
|
-
/* @__PURE__ */
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
/* @__PURE__ */ jsx(
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
646
|
+
/* @__PURE__ */ jsx(
|
|
647
|
+
CardHeader,
|
|
648
|
+
{
|
|
649
|
+
icon: /* @__PURE__ */ jsx(IconSparkles, { size: 18 }),
|
|
650
|
+
title: "Next Action",
|
|
651
|
+
subtitle: primaryAction.title,
|
|
652
|
+
rightSection: /* @__PURE__ */ jsx(Button, { component: Link, to: primaryAction.buttonTo, size: "xs", variant: "light", children: primaryAction.buttonLabel })
|
|
653
|
+
}
|
|
654
|
+
),
|
|
655
|
+
/* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", maw: 620, children: primaryAction.detail }),
|
|
655
656
|
/* @__PURE__ */ jsxs(SimpleGrid, { cols: { base: 1, md: 2 }, children: [
|
|
656
657
|
/* @__PURE__ */ jsxs(Card, { withBorder: true, p: "sm", children: [
|
|
657
658
|
/* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", tt: "uppercase", fw: 600, children: "Verification" }),
|
|
@@ -670,13 +671,15 @@ function LeadGenOverviewPage() {
|
|
|
670
671
|
] })
|
|
671
672
|
] }) }),
|
|
672
673
|
/* @__PURE__ */ jsx(Paper, { withBorder: true, p: "md", children: /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
|
|
673
|
-
/* @__PURE__ */
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
/* @__PURE__ */ jsx(
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
674
|
+
/* @__PURE__ */ jsx(
|
|
675
|
+
CardHeader,
|
|
676
|
+
{
|
|
677
|
+
icon: /* @__PURE__ */ jsx(IconListDetails, { size: 18 }),
|
|
678
|
+
title: "List Snapshot",
|
|
679
|
+
subtitle: "Ranked to surface active work first, then the largest unresolved backlogs.",
|
|
680
|
+
rightSection: /* @__PURE__ */ jsx(Button, { component: Link, to: "/lead-gen/lists", size: "xs", variant: "subtle", children: "Open lists" })
|
|
681
|
+
}
|
|
682
|
+
),
|
|
680
683
|
/* @__PURE__ */ jsxs(Table, { children: [
|
|
681
684
|
/* @__PURE__ */ jsx(Table.Thead, { children: /* @__PURE__ */ jsxs(Table.Tr, { children: [
|
|
682
685
|
/* @__PURE__ */ jsx(Table.Th, { children: "List" }),
|
|
@@ -780,7 +783,16 @@ function LeadGenListsPage() {
|
|
|
780
783
|
{
|
|
781
784
|
title: "Lists",
|
|
782
785
|
caption: "Lead lists and contact organization",
|
|
783
|
-
rightSection: /* @__PURE__ */ jsx(
|
|
786
|
+
rightSection: /* @__PURE__ */ jsx(
|
|
787
|
+
Button,
|
|
788
|
+
{
|
|
789
|
+
leftSection: /* @__PURE__ */ jsx(IconPlus, { size: 16 }),
|
|
790
|
+
onClick: () => setShowCreateList(true),
|
|
791
|
+
variant: "light",
|
|
792
|
+
size: "xs",
|
|
793
|
+
children: "New List"
|
|
794
|
+
}
|
|
795
|
+
)
|
|
784
796
|
}
|
|
785
797
|
) }),
|
|
786
798
|
/* @__PURE__ */ jsx(Paper, { children: /* @__PURE__ */ jsxs(Stack, { children: [
|
|
@@ -982,17 +994,18 @@ function formatDateTime(value) {
|
|
|
982
994
|
minute: "2-digit"
|
|
983
995
|
});
|
|
984
996
|
}
|
|
997
|
+
function contactDisplayName(firstName, lastName) {
|
|
998
|
+
const full = [firstName, lastName].filter(Boolean).join(" ").trim();
|
|
999
|
+
return full || "\u2014";
|
|
1000
|
+
}
|
|
985
1001
|
function LeadGenListDetailPage({ listId }) {
|
|
986
1002
|
const navigate = useNavigate();
|
|
987
|
-
const [selectedStepKey, setSelectedStepKey] = useState(null);
|
|
988
1003
|
const listQuery = useList(listId);
|
|
989
1004
|
const progressQuery = useListProgress(listId);
|
|
990
1005
|
const executionsQuery = useListExecutions(listId);
|
|
991
|
-
const
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
);
|
|
995
|
-
const resourceDefinitionQuery = useResourceDefinition(selectedStep?.resourceId ?? "", !!selectedStep?.resourceId);
|
|
1006
|
+
const contactsQuery = useContacts({ listId, limit: 100, offset: 0 });
|
|
1007
|
+
const companiesQuery = useCompanies({ listId, limit: 100, offset: 0 });
|
|
1008
|
+
const [memberTab, setMemberTab] = useState("contacts");
|
|
996
1009
|
const isLoading = listQuery.isLoading || progressQuery.isLoading || executionsQuery.isLoading;
|
|
997
1010
|
const error = listQuery.error ?? progressQuery.error ?? executionsQuery.error;
|
|
998
1011
|
if (isLoading) {
|
|
@@ -1006,7 +1019,7 @@ function LeadGenListDetailPage({ listId }) {
|
|
|
1006
1019
|
Button,
|
|
1007
1020
|
{
|
|
1008
1021
|
variant: "light",
|
|
1009
|
-
size: "
|
|
1022
|
+
size: "xs",
|
|
1010
1023
|
leftSection: /* @__PURE__ */ jsx(IconArrowLeft, { size: 16 }),
|
|
1011
1024
|
onClick: () => navigate({ to: "/lead-gen/lists" }),
|
|
1012
1025
|
children: "Lists"
|
|
@@ -1028,7 +1041,7 @@ function LeadGenListDetailPage({ listId }) {
|
|
|
1028
1041
|
Button,
|
|
1029
1042
|
{
|
|
1030
1043
|
variant: "light",
|
|
1031
|
-
size: "
|
|
1044
|
+
size: "xs",
|
|
1032
1045
|
leftSection: /* @__PURE__ */ jsx(IconArrowLeft, { size: 16 }),
|
|
1033
1046
|
onClick: () => navigate({ to: "/lead-gen/lists" }),
|
|
1034
1047
|
children: "Lists"
|
|
@@ -1050,7 +1063,7 @@ function LeadGenListDetailPage({ listId }) {
|
|
|
1050
1063
|
Button,
|
|
1051
1064
|
{
|
|
1052
1065
|
variant: "light",
|
|
1053
|
-
size: "
|
|
1066
|
+
size: "xs",
|
|
1054
1067
|
leftSection: /* @__PURE__ */ jsx(IconArrowLeft, { size: 16 }),
|
|
1055
1068
|
onClick: () => navigate({ to: "/lead-gen/lists" }),
|
|
1056
1069
|
children: "Lists"
|
|
@@ -1064,196 +1077,117 @@ function LeadGenListDetailPage({ listId }) {
|
|
|
1064
1077
|
const list = listQuery.data;
|
|
1065
1078
|
const progress = progressQuery.data;
|
|
1066
1079
|
const executions = executionsQuery.data ?? [];
|
|
1067
|
-
const
|
|
1068
|
-
const
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
+
const contacts = contactsQuery.data?.data ?? [];
|
|
1081
|
+
const companies = companiesQuery.data?.data ?? [];
|
|
1082
|
+
return /* @__PURE__ */ jsx(SubshellContentContainer, { children: /* @__PURE__ */ jsx(PageContainer, { children: /* @__PURE__ */ jsxs(Stack, { children: [
|
|
1083
|
+
/* @__PURE__ */ jsx(
|
|
1084
|
+
PageTitleCaption,
|
|
1085
|
+
{
|
|
1086
|
+
title: list.name,
|
|
1087
|
+
caption: list.description ?? "Configuration, progress, and execution history for this list",
|
|
1088
|
+
rightSection: /* @__PURE__ */ jsx(
|
|
1089
|
+
Button,
|
|
1090
|
+
{
|
|
1091
|
+
variant: "light",
|
|
1092
|
+
size: "xs",
|
|
1093
|
+
leftSection: /* @__PURE__ */ jsx(IconArrowLeft, { size: 16 }),
|
|
1094
|
+
onClick: () => navigate({ to: "/lead-gen/lists" }),
|
|
1095
|
+
children: "Lists"
|
|
1096
|
+
}
|
|
1097
|
+
)
|
|
1098
|
+
}
|
|
1099
|
+
),
|
|
1100
|
+
/* @__PURE__ */ jsxs(Group, { gap: "xs", children: [
|
|
1101
|
+
/* @__PURE__ */ jsx(Badge, { size: "sm", variant: "light", color: getStatusColor(list.status), children: list.status }),
|
|
1102
|
+
/* @__PURE__ */ jsxs(Text, { size: "sm", c: "dimmed", children: [
|
|
1103
|
+
"Created ",
|
|
1104
|
+
formatDateTime(list.createdAt)
|
|
1105
|
+
] })
|
|
1106
|
+
] }),
|
|
1107
|
+
/* @__PURE__ */ jsxs(SimpleGrid, { cols: { base: 1, sm: 2 }, children: [
|
|
1108
|
+
/* @__PURE__ */ jsx(StatCard, { label: "Companies", value: progress.totalCompanies, icon: IconBuilding }),
|
|
1109
|
+
/* @__PURE__ */ jsx(StatCard, { label: "Contacts", value: progress.totalContacts, icon: IconUsers })
|
|
1110
|
+
] }),
|
|
1111
|
+
/* @__PURE__ */ jsxs(Paper, { withBorder: true, p: "md", children: [
|
|
1080
1112
|
/* @__PURE__ */ jsx(
|
|
1081
|
-
|
|
1113
|
+
CardHeader,
|
|
1082
1114
|
{
|
|
1083
|
-
|
|
1084
|
-
|
|
1115
|
+
icon: /* @__PURE__ */ jsx(IconAddressBook, { size: 16 }),
|
|
1116
|
+
title: "Members",
|
|
1085
1117
|
rightSection: /* @__PURE__ */ jsx(
|
|
1086
|
-
|
|
1118
|
+
SegmentedControl,
|
|
1087
1119
|
{
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1120
|
+
value: memberTab,
|
|
1121
|
+
onChange: (value) => setMemberTab(value),
|
|
1122
|
+
size: "xs",
|
|
1123
|
+
data: [
|
|
1124
|
+
{ label: `Contacts (${progress.totalContacts})`, value: "contacts" },
|
|
1125
|
+
{ label: `Companies (${progress.totalCompanies})`, value: "companies" }
|
|
1126
|
+
]
|
|
1093
1127
|
}
|
|
1094
1128
|
)
|
|
1095
1129
|
}
|
|
1096
1130
|
),
|
|
1097
|
-
/* @__PURE__ */
|
|
1098
|
-
/* @__PURE__ */ jsx(
|
|
1099
|
-
|
|
1100
|
-
"
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
/* @__PURE__ */ jsx(
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
/* @__PURE__ */ jsx(
|
|
1111
|
-
/* @__PURE__ */ jsx(
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
/* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", mb: "xs", children: "Pipeline Steps" }),
|
|
1115
|
-
/* @__PURE__ */ jsx(Title, { order: 3, children: pipelineSteps.length })
|
|
1116
|
-
] }),
|
|
1117
|
-
/* @__PURE__ */ jsxs(Paper, { withBorder: true, p: "md", children: [
|
|
1118
|
-
/* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", mb: "xs", children: "Executions" }),
|
|
1119
|
-
/* @__PURE__ */ jsx(Title, { order: 3, children: executions.length })
|
|
1120
|
-
] })
|
|
1121
|
-
] }),
|
|
1122
|
-
/* @__PURE__ */ jsx(Paper, { withBorder: true, p: "md", children: /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
|
|
1123
|
-
/* @__PURE__ */ jsx(Title, { order: 3, children: "Pipeline Progress" }),
|
|
1124
|
-
/* @__PURE__ */ jsx(SimpleGrid, { cols: { base: 2, sm: 3, lg: 7 }, children: stageTiles.map((tile) => /* @__PURE__ */ jsxs(Paper, { withBorder: true, p: "sm", children: [
|
|
1125
|
-
/* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: tile.label }),
|
|
1126
|
-
/* @__PURE__ */ jsx(Title, { order: 4, children: tile.value })
|
|
1127
|
-
] }, tile.label)) })
|
|
1128
|
-
] }) }),
|
|
1129
|
-
/* @__PURE__ */ jsx(Paper, { withBorder: true, p: "md", children: /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
|
|
1130
|
-
/* @__PURE__ */ jsx(Title, { order: 3, children: "Configuration" }),
|
|
1131
|
-
/* @__PURE__ */ jsxs(SimpleGrid, { cols: { base: 1, lg: 2 }, children: [
|
|
1132
|
-
/* @__PURE__ */ jsx(Paper, { withBorder: true, p: "sm", children: /* @__PURE__ */ jsxs(Stack, { gap: "xs", children: [
|
|
1133
|
-
/* @__PURE__ */ jsx(Text, { size: "sm", fw: 600, children: "Qualification" }),
|
|
1134
|
-
qualification ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1135
|
-
/* @__PURE__ */ jsxs(Text, { size: "sm", children: [
|
|
1136
|
-
"Target: ",
|
|
1137
|
-
qualification.targetDescription
|
|
1138
|
-
] }),
|
|
1139
|
-
/* @__PURE__ */ jsxs(Text, { size: "sm", children: [
|
|
1140
|
-
"Minimum reviews: ",
|
|
1141
|
-
qualification.minReviewCount
|
|
1142
|
-
] }),
|
|
1143
|
-
/* @__PURE__ */ jsxs(Text, { size: "sm", children: [
|
|
1144
|
-
"Minimum rating: ",
|
|
1145
|
-
qualification.minRating
|
|
1146
|
-
] }),
|
|
1147
|
-
/* @__PURE__ */ jsxs(Text, { size: "sm", children: [
|
|
1148
|
-
"Exclude franchises: ",
|
|
1149
|
-
qualification.excludeFranchises ? "Yes" : "No"
|
|
1150
|
-
] })
|
|
1151
|
-
] }) : /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "Qualification settings are not configured for this list." })
|
|
1152
|
-
] }) }),
|
|
1153
|
-
/* @__PURE__ */ jsx(Paper, { withBorder: true, p: "sm", children: /* @__PURE__ */ jsxs(Stack, { gap: "xs", children: [
|
|
1154
|
-
/* @__PURE__ */ jsx(Text, { size: "sm", fw: 600, children: "Enrichment + Personalization" }),
|
|
1155
|
-
/* @__PURE__ */ jsxs(Text, { size: "sm", children: [
|
|
1156
|
-
"Discovery provider: ",
|
|
1157
|
-
list.config.enrichment?.emailDiscovery?.primary ?? "Inherited default"
|
|
1158
|
-
] }),
|
|
1159
|
-
/* @__PURE__ */ jsxs(Text, { size: "sm", children: [
|
|
1160
|
-
"Verification provider: ",
|
|
1161
|
-
list.config.enrichment?.emailVerification?.provider ?? "Inherited default"
|
|
1162
|
-
] }),
|
|
1163
|
-
/* @__PURE__ */ jsxs(Text, { size: "sm", children: [
|
|
1164
|
-
"Industry context: ",
|
|
1165
|
-
list.config.personalization?.industryContext ?? "Inherited default"
|
|
1166
|
-
] }),
|
|
1167
|
-
/* @__PURE__ */ jsxs(Text, { size: "sm", children: [
|
|
1168
|
-
"Creative direction: ",
|
|
1169
|
-
list.config.personalization?.creativeDirection ?? "Inherited default"
|
|
1170
|
-
] })
|
|
1171
|
-
] }) })
|
|
1172
|
-
] }),
|
|
1173
|
-
list.config.personalization?.emailBody ? /* @__PURE__ */ jsxs(Box, { children: [
|
|
1174
|
-
/* @__PURE__ */ jsx(Text, { size: "sm", fw: 600, mb: "xs", children: "Email Body Template" }),
|
|
1175
|
-
/* @__PURE__ */ jsx(Code, { block: true, children: list.config.personalization.emailBody })
|
|
1176
|
-
] }) : null
|
|
1177
|
-
] }) }),
|
|
1178
|
-
/* @__PURE__ */ jsx(Paper, { withBorder: true, p: "md", children: /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
|
|
1179
|
-
/* @__PURE__ */ jsx(Title, { order: 3, children: "Pipeline Steps" }),
|
|
1180
|
-
!pipelineSteps.length ? /* @__PURE__ */ jsx(Alert, { icon: /* @__PURE__ */ jsx(IconAlertCircle, { size: 16 }), color: "gray", variant: "light", children: "This list does not have any configured pipeline steps yet." }) : /* @__PURE__ */ jsxs(Table, { children: [
|
|
1181
|
-
/* @__PURE__ */ jsx(Table.Thead, { children: /* @__PURE__ */ jsxs(Table.Tr, { children: [
|
|
1182
|
-
/* @__PURE__ */ jsx(Table.Th, { children: "Order" }),
|
|
1183
|
-
/* @__PURE__ */ jsx(Table.Th, { children: "Step" }),
|
|
1184
|
-
/* @__PURE__ */ jsx(Table.Th, { children: "Resource" }),
|
|
1185
|
-
/* @__PURE__ */ jsx(Table.Th, { children: "Status" }),
|
|
1186
|
-
/* @__PURE__ */ jsx(Table.Th, { children: "Action" })
|
|
1187
|
-
] }) }),
|
|
1188
|
-
/* @__PURE__ */ jsx(Table.Tbody, { children: pipelineSteps.map((step) => /* @__PURE__ */ jsxs(Table.Tr, { children: [
|
|
1189
|
-
/* @__PURE__ */ jsx(Table.Td, { children: step.order }),
|
|
1190
|
-
/* @__PURE__ */ jsxs(Table.Td, { children: [
|
|
1191
|
-
/* @__PURE__ */ jsx(Text, { fw: 500, children: step.label }),
|
|
1192
|
-
/* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: step.key })
|
|
1193
|
-
] }),
|
|
1194
|
-
/* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsx(Code, { children: step.resourceId }) }),
|
|
1195
|
-
/* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsx(Badge, { size: "sm", variant: step.enabled ? "light" : "outline", color: step.enabled ? "green" : "gray", children: step.enabled ? "Enabled" : "Disabled" }) }),
|
|
1196
|
-
/* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsx(
|
|
1197
|
-
Button,
|
|
1198
|
-
{
|
|
1199
|
-
size: "xs",
|
|
1200
|
-
variant: "light",
|
|
1201
|
-
leftSection: /* @__PURE__ */ jsx(IconPlayerPlay, { size: 14 }),
|
|
1202
|
-
disabled: !step.enabled,
|
|
1203
|
-
onClick: () => setSelectedStepKey(step.key),
|
|
1204
|
-
children: "Run"
|
|
1205
|
-
}
|
|
1206
|
-
) })
|
|
1207
|
-
] }, step.key)) })
|
|
1208
|
-
] })
|
|
1131
|
+
memberTab === "contacts" && /* @__PURE__ */ jsx(Fragment, { children: contactsQuery.isLoading ? /* @__PURE__ */ jsx(Center, { p: "md", children: /* @__PURE__ */ jsx(Loader, { size: "sm" }) }) : !contacts.length ? /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "No contacts attached to this list yet." }) : /* @__PURE__ */ jsxs(Table, { children: [
|
|
1132
|
+
/* @__PURE__ */ jsx(Table.Thead, { children: /* @__PURE__ */ jsxs(Table.Tr, { children: [
|
|
1133
|
+
/* @__PURE__ */ jsx(Table.Th, { children: "Name" }),
|
|
1134
|
+
/* @__PURE__ */ jsx(Table.Th, { children: "Email" }),
|
|
1135
|
+
/* @__PURE__ */ jsx(Table.Th, { children: "Title" }),
|
|
1136
|
+
/* @__PURE__ */ jsx(Table.Th, { children: "Company" }),
|
|
1137
|
+
/* @__PURE__ */ jsx(Table.Th, { children: "Status" }),
|
|
1138
|
+
/* @__PURE__ */ jsx(Table.Th, { children: "Created" })
|
|
1139
|
+
] }) }),
|
|
1140
|
+
/* @__PURE__ */ jsx(Table.Tbody, { children: contacts.map((contact) => /* @__PURE__ */ jsxs(Table.Tr, { children: [
|
|
1141
|
+
/* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsx(Text, { fw: 500, children: contactDisplayName(contact.firstName, contact.lastName) }) }),
|
|
1142
|
+
/* @__PURE__ */ jsx(Table.Td, { children: contact.email }),
|
|
1143
|
+
/* @__PURE__ */ jsx(Table.Td, { children: contact.title ?? "\u2014" }),
|
|
1144
|
+
/* @__PURE__ */ jsx(Table.Td, { children: contact.company?.name ?? "\u2014" }),
|
|
1145
|
+
/* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsx(Badge, { size: "sm", variant: "light", color: getStatusColor(contact.status), children: contact.status }) }),
|
|
1146
|
+
/* @__PURE__ */ jsx(Table.Td, { children: formatDateTime(contact.createdAt) })
|
|
1147
|
+
] }, contact.id)) })
|
|
1209
1148
|
] }) }),
|
|
1210
|
-
/* @__PURE__ */ jsx(
|
|
1211
|
-
/* @__PURE__ */ jsx(
|
|
1212
|
-
|
|
1213
|
-
/* @__PURE__ */ jsx(Table.
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
/* @__PURE__ */ jsx(Table.
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
/* @__PURE__ */ jsx(Table.Td, { children: formatDateTime(execution.completedAt) }),
|
|
1228
|
-
/* @__PURE__ */ jsx(Table.Td, { children: execution.durationMs == null ? "n/a" : `${execution.durationMs} ms` })
|
|
1229
|
-
] }, execution.executionId)) })
|
|
1230
|
-
] })
|
|
1149
|
+
memberTab === "companies" && /* @__PURE__ */ jsx(Fragment, { children: companiesQuery.isLoading ? /* @__PURE__ */ jsx(Center, { p: "md", children: /* @__PURE__ */ jsx(Loader, { size: "sm" }) }) : !companies.length ? /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "No companies attached to this list yet." }) : /* @__PURE__ */ jsxs(Table, { children: [
|
|
1150
|
+
/* @__PURE__ */ jsx(Table.Thead, { children: /* @__PURE__ */ jsxs(Table.Tr, { children: [
|
|
1151
|
+
/* @__PURE__ */ jsx(Table.Th, { children: "Name" }),
|
|
1152
|
+
/* @__PURE__ */ jsx(Table.Th, { children: "Domain" }),
|
|
1153
|
+
/* @__PURE__ */ jsx(Table.Th, { children: "Segment" }),
|
|
1154
|
+
/* @__PURE__ */ jsx(Table.Th, { children: "Contacts" }),
|
|
1155
|
+
/* @__PURE__ */ jsx(Table.Th, { children: "Status" }),
|
|
1156
|
+
/* @__PURE__ */ jsx(Table.Th, { children: "Created" })
|
|
1157
|
+
] }) }),
|
|
1158
|
+
/* @__PURE__ */ jsx(Table.Tbody, { children: companies.map((company) => /* @__PURE__ */ jsxs(Table.Tr, { children: [
|
|
1159
|
+
/* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsx(Text, { fw: 500, children: company.name }) }),
|
|
1160
|
+
/* @__PURE__ */ jsx(Table.Td, { children: company.domain ?? "\u2014" }),
|
|
1161
|
+
/* @__PURE__ */ jsx(Table.Td, { children: company.segment ?? "\u2014" }),
|
|
1162
|
+
/* @__PURE__ */ jsx(Table.Td, { children: company.contactCount }),
|
|
1163
|
+
/* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsx(Badge, { size: "sm", variant: "light", color: getStatusColor(company.status), children: company.status }) }),
|
|
1164
|
+
/* @__PURE__ */ jsx(Table.Td, { children: formatDateTime(company.createdAt) })
|
|
1165
|
+
] }, company.id)) })
|
|
1231
1166
|
] }) })
|
|
1232
1167
|
] }),
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
{
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
] }) });
|
|
1168
|
+
/* @__PURE__ */ jsxs(Paper, { withBorder: true, p: "md", children: [
|
|
1169
|
+
/* @__PURE__ */ jsx(CardHeader, { icon: /* @__PURE__ */ jsx(IconPlayerPlay, { size: 16 }), title: "Execution History" }),
|
|
1170
|
+
!executions.length ? /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "No executions recorded for this list yet." }) : /* @__PURE__ */ jsxs(Table, { children: [
|
|
1171
|
+
/* @__PURE__ */ jsx(Table.Thead, { children: /* @__PURE__ */ jsxs(Table.Tr, { children: [
|
|
1172
|
+
/* @__PURE__ */ jsx(Table.Th, { children: "Resource" }),
|
|
1173
|
+
/* @__PURE__ */ jsx(Table.Th, { children: "Status" }),
|
|
1174
|
+
/* @__PURE__ */ jsx(Table.Th, { children: "Started" }),
|
|
1175
|
+
/* @__PURE__ */ jsx(Table.Th, { children: "Completed" }),
|
|
1176
|
+
/* @__PURE__ */ jsx(Table.Th, { children: "Duration" })
|
|
1177
|
+
] }) }),
|
|
1178
|
+
/* @__PURE__ */ jsx(Table.Tbody, { children: executions.map((execution) => /* @__PURE__ */ jsxs(Table.Tr, { children: [
|
|
1179
|
+
/* @__PURE__ */ jsxs(Table.Td, { children: [
|
|
1180
|
+
/* @__PURE__ */ jsx(Text, { fw: 500, children: execution.resourceId }),
|
|
1181
|
+
/* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: execution.executionId })
|
|
1182
|
+
] }),
|
|
1183
|
+
/* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsx(Badge, { size: "sm", variant: "light", color: getStatusColor(execution.status), children: execution.status }) }),
|
|
1184
|
+
/* @__PURE__ */ jsx(Table.Td, { children: formatDateTime(execution.createdAt) }),
|
|
1185
|
+
/* @__PURE__ */ jsx(Table.Td, { children: formatDateTime(execution.completedAt) }),
|
|
1186
|
+
/* @__PURE__ */ jsx(Table.Td, { children: execution.durationMs == null ? "n/a" : `${execution.durationMs} ms` })
|
|
1187
|
+
] }, execution.executionId)) })
|
|
1188
|
+
] })
|
|
1189
|
+
] })
|
|
1190
|
+
] }) }) });
|
|
1257
1191
|
}
|
|
1258
1192
|
var PAGE_SIZE_DEFAULT2 = 20;
|
|
1259
1193
|
function LeadGenCompaniesPage() {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { CyberAreaChart, CostTrendChart, ActivityTrendChart } from './chunk-
|
|
1
|
+
import { CyberAreaChart, CostTrendChart, ActivityTrendChart } from './chunk-CTTY6FUT.js';
|
|
2
2
|
import { AppShellLoader } from './chunk-M25JL54Z.js';
|
|
3
3
|
import { FilterBar } from './chunk-PDHTXPSF.js';
|
|
4
4
|
import { CustomModal } from './chunk-GBMNCNHX.js';
|
|
5
5
|
import { formatDuration } from './chunk-E4WQGJNS.js';
|
|
6
|
-
import { useResolveError, useResolveAllErrors, usePaginationState, useErrorDetails, useMarkAsRead, useExecutionLogsFilters, useExecutionLogs, useExecutionHealth, useErrorAnalysis, useTimeRangeDates, useErrorDetail, useResolveErrorsByExecution, useResources, useCostTrends, useCostSummary, useCostByModel, useCostBreakdown, useActivityFilters, useActivityTrend, useActivities, useNotifications, useMarkAllAsRead, useTestNotification } from './chunk-
|
|
7
|
-
import { CenteredErrorState, CardHeader, StatsCardSkeleton, TrendIndicator, DetailCardSkeleton, EmptyState, PageTitleCaption, JsonViewer } from './chunk-
|
|
6
|
+
import { useResolveError, useResolveAllErrors, usePaginationState, useErrorDetails, useMarkAsRead, useExecutionLogsFilters, useExecutionLogs, useExecutionHealth, useErrorAnalysis, useTimeRangeDates, useErrorDetail, useResolveErrorsByExecution, useResources, useCostTrends, useCostSummary, useCostByModel, useCostBreakdown, useActivityFilters, useActivityTrend, useActivities, useNotifications, useMarkAllAsRead, useTestNotification } from './chunk-FMFX4K6E.js';
|
|
7
|
+
import { CenteredErrorState, CardHeader, StatsCardSkeleton, TrendIndicator, DetailCardSkeleton, EmptyState, PageTitleCaption, JsonViewer } from './chunk-BHR7IV72.js';
|
|
8
8
|
import { useRouterContext } from './chunk-Q7DJKLEN.js';
|
|
9
|
-
import { formatBucketTime, PAGE_SIZE_DEFAULT, getTimeRangeDates } from './chunk-
|
|
9
|
+
import { formatBucketTime, PAGE_SIZE_DEFAULT, getTimeRangeDates } from './chunk-OD7GWIZS.js';
|
|
10
10
|
import { useState, useMemo, useCallback } from 'react';
|
|
11
11
|
import { Table, Text, Badge, Tooltip, Card, Group, Select, SegmentedControl, Button, TextInput, Stack, Paper, Center, Loader, ActionIcon, NumberFormatter, Box, Alert, Switch, Pagination, UnstyledButton, Title, Divider, Code, CopyButton, Accordion } from '@mantine/core';
|
|
12
12
|
import { IconActivity, IconFilterOff, IconCircleCheck, IconThumbDown, IconThumbUp, IconClock, IconCircleX, IconSearch, IconArrowUpRight, IconAlertTriangle, IconAlertCircle, IconExternalLink, IconChartPie, IconHeartbeat, IconDownload, IconCpu, IconTrendingUp, IconChartBar, IconCash, IconInfoCircle, IconExclamationCircle, IconBug, IconChecks, IconCircle, IconCircleFilled, IconCheck, IconCopy, IconCircleDashed, IconPlus, IconArrowUp, IconArrowDown, IconFileOff, IconRobot, IconKey, IconUser } from '@tabler/icons-react';
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// ../core/src/test-utils/browser-mocks.ts
|
|
2
|
+
function setupMatchMedia() {
|
|
3
|
+
const win = globalThis.window;
|
|
4
|
+
if (typeof win === "undefined") return;
|
|
5
|
+
Object.defineProperty(win, "matchMedia", {
|
|
6
|
+
writable: true,
|
|
7
|
+
value: (query) => ({
|
|
8
|
+
matches: false,
|
|
9
|
+
media: query,
|
|
10
|
+
onchange: null,
|
|
11
|
+
addListener: () => {
|
|
12
|
+
},
|
|
13
|
+
removeListener: () => {
|
|
14
|
+
},
|
|
15
|
+
addEventListener: () => {
|
|
16
|
+
},
|
|
17
|
+
removeEventListener: () => {
|
|
18
|
+
},
|
|
19
|
+
dispatchEvent: () => true
|
|
20
|
+
})
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
function setupResizeObserver() {
|
|
24
|
+
globalThis.ResizeObserver = class ResizeObserver {
|
|
25
|
+
observe() {
|
|
26
|
+
}
|
|
27
|
+
unobserve() {
|
|
28
|
+
}
|
|
29
|
+
disconnect() {
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function setupBrowserMocks() {
|
|
34
|
+
setupMatchMedia();
|
|
35
|
+
setupResizeObserver();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export { setupBrowserMocks };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
18
|
+
|
|
19
|
+
export { __export, __reExport };
|