@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.
Files changed (93) hide show
  1. package/dist/{CoreAuthKitInner-I32JCNE7.js → CoreAuthKitInner-QC62UHTZ.js} +1 -0
  2. package/dist/api/index.js +3 -2
  3. package/dist/app/index.js +6 -5
  4. package/dist/auth/context.js +1 -0
  5. package/dist/auth/index.js +1 -0
  6. package/dist/charts/index.js +4 -3
  7. package/dist/{chunk-LT33DSMO.js → chunk-2CFOFSSG.js} +4 -4
  8. package/dist/chunk-3JCMO7SD.js +14 -0
  9. package/dist/chunk-7XKCG5CT.js +125 -0
  10. package/dist/{chunk-SQPM2QDH.js → chunk-BHR7IV72.js} +3 -2
  11. package/dist/{chunk-DDZMBNTY.js → chunk-CTTY6FUT.js} +2 -2
  12. package/dist/chunk-DRQPEMJI.js +42 -0
  13. package/dist/{chunk-EY322HXF.js → chunk-FMFX4K6E.js} +19 -6
  14. package/dist/{chunk-UA36WILN.js → chunk-GP3AFJYG.js} +145 -211
  15. package/dist/{chunk-P6TC4K7I.js → chunk-GTYUP7MB.js} +4 -4
  16. package/dist/chunk-HJ4CJIWN.js +38 -0
  17. package/dist/chunk-I2KLQ2HA.js +19 -0
  18. package/dist/{chunk-B6FIIEFO.js → chunk-JR5WNTLA.js} +128 -117
  19. package/dist/{chunk-A2AZY5SF.js → chunk-LR5CRY5A.js} +1 -1
  20. package/dist/{chunk-GRGRBWIO.js → chunk-M7W7CGPL.js} +1 -1
  21. package/dist/{chunk-SS2UVUSG.js → chunk-MZFJWCPH.js} +73 -121
  22. package/dist/{chunk-P3TFNFZS.js → chunk-OUYH2SBS.js} +3 -3
  23. package/dist/{chunk-66VY5EMV.js → chunk-PJVG3ISO.js} +5 -5
  24. package/dist/{chunk-I3LQGLUC.js → chunk-Q4QJOSVS.js} +1 -1
  25. package/dist/{chunk-R73EHHPN.js → chunk-Q5HC6ENG.js} +18 -2
  26. package/dist/{chunk-VDM6DQES.js → chunk-R7OJCNL3.js} +1 -1
  27. package/dist/{chunk-6RWMRQN5.js → chunk-TIIPYB2Z.js} +1 -1
  28. package/dist/{chunk-34NQLV2W.js → chunk-TO7QXDBX.js} +3 -3
  29. package/dist/{chunk-WP3IYOVJ.js → chunk-YP6T426C.js} +107 -56
  30. package/dist/{chunk-FM6LSZ45.js → chunk-ZE2KQSHL.js} +4 -4
  31. package/dist/components/chat/index.js +1 -0
  32. package/dist/components/index.d.ts +218 -2808
  33. package/dist/components/index.js +26 -25
  34. package/dist/components/navigation/index.js +1 -0
  35. package/dist/execution/index.js +1 -0
  36. package/dist/features/auth/index.js +1 -0
  37. package/dist/features/crm/index.d.ts +54 -53
  38. package/dist/features/crm/index.js +12 -11
  39. package/dist/features/dashboard/index.js +13 -12
  40. package/dist/features/delivery/index.d.ts +2642 -2605
  41. package/dist/features/delivery/index.js +12 -11
  42. package/dist/features/lead-gen/index.js +12 -22
  43. package/dist/features/monitoring/index.js +14 -13
  44. package/dist/features/monitoring/requests/index.d.ts +38 -27
  45. package/dist/features/monitoring/requests/index.js +213 -106
  46. package/dist/features/operations/index.d.ts +8 -26
  47. package/dist/features/operations/index.js +16 -15
  48. package/dist/features/seo/index.js +1 -0
  49. package/dist/features/settings/index.d.ts +36 -37
  50. package/dist/features/settings/index.js +13 -12
  51. package/dist/graph/index.js +1 -0
  52. package/dist/hooks/delivery/index.d.ts +2712 -2699
  53. package/dist/hooks/delivery/index.js +3 -2
  54. package/dist/hooks/index.d.ts +1674 -4617
  55. package/dist/hooks/index.js +11 -10
  56. package/dist/hooks/operations/command-view/utils/transformCommandViewData.js +1 -0
  57. package/dist/hooks/published.d.ts +1674 -4617
  58. package/dist/hooks/published.js +11 -10
  59. package/dist/index.d.ts +773 -3635
  60. package/dist/index.js +12 -11
  61. package/dist/initialization/index.js +1 -0
  62. package/dist/layout/index.d.ts +14 -2
  63. package/dist/layout/index.js +2 -1
  64. package/dist/organization/index.js +1 -0
  65. package/dist/profile/index.js +1 -0
  66. package/dist/provider/ElevasisServiceContext.js +1 -0
  67. package/dist/provider/index.d.ts +320 -249
  68. package/dist/provider/index.js +9 -8
  69. package/dist/provider/published.d.ts +320 -249
  70. package/dist/provider/published.js +6 -5
  71. package/dist/router/context.js +1 -0
  72. package/dist/router/index.js +1 -0
  73. package/dist/sse/index.d.ts +1 -6
  74. package/dist/sse/index.js +1 -1
  75. package/dist/supabase/index.js +1 -0
  76. package/dist/test-utils/index.d.ts +117 -0
  77. package/dist/test-utils/index.js +136 -0
  78. package/dist/test-utils/setup-integration.d.ts +2 -0
  79. package/dist/test-utils/setup-integration.js +26 -0
  80. package/dist/test-utils/setup.d.ts +2 -0
  81. package/dist/test-utils/setup.js +47 -0
  82. package/dist/theme/index.js +3 -2
  83. package/dist/typeform/index.js +1 -0
  84. package/dist/typeform/schemas.js +1 -0
  85. package/dist/types/index.d.ts +1604 -2489
  86. package/dist/utils/index.d.ts +32 -1
  87. package/dist/utils/index.js +2 -1
  88. package/dist/zustand/index.d.ts +4 -8
  89. package/dist/zustand/index.js +2 -0
  90. package/package.json +33 -5
  91. package/src/test-utils/README.md +5 -0
  92. package/dist/chunk-ADSSLKKP.js +0 -10
  93. /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, useResourceDefinition, useCompanyFacets, useCompanies, useDeleteCompanies, useContacts, useDeleteContacts } from './chunk-EY322HXF.js';
9
- import { showApiErrorNotification, showSuccessNotification } from './chunk-GRGRBWIO.js';
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-SQPM2QDH.js';
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, Code, Modal } from '@mantine/core';
15
- import { IconLayoutGrid, IconList, IconBuilding, IconAddressBook, IconTarget, IconExternalLink, IconX, IconAlertCircle, IconPlayerPlay, IconArrowRight, IconPlus, IconSearch, IconSparkles, IconAlertTriangle, IconArrowLeft, IconClockHour4, IconBuildingFactory2, IconUsers } from '@tabler/icons-react';
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: "sm", variant: "light", children: "Lists" })
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__ */ jsxs(Group, { justify: "space-between", align: "flex-start", gap: "md", children: [
648
- /* @__PURE__ */ jsxs(Stack, { gap: 4, children: [
649
- /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", tt: "uppercase", fw: 700, children: "Next Action" }),
650
- /* @__PURE__ */ jsx(Title, { order: 3, children: primaryAction.title }),
651
- /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", maw: 620, children: primaryAction.detail })
652
- ] }),
653
- /* @__PURE__ */ jsx(Button, { component: Link, to: primaryAction.buttonTo, size: "sm", variant: "light", children: primaryAction.buttonLabel })
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__ */ jsxs(Group, { justify: "space-between", align: "flex-end", children: [
674
- /* @__PURE__ */ jsxs("div", { children: [
675
- /* @__PURE__ */ jsx(Title, { order: 3, children: "List Snapshot" }),
676
- /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "Ranked to surface active work first, then the largest unresolved backlogs." })
677
- ] }),
678
- /* @__PURE__ */ jsx(Button, { component: Link, to: "/lead-gen/lists", size: "sm", variant: "subtle", children: "Open lists" })
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(Button, { leftSection: /* @__PURE__ */ jsx(IconPlus, { size: 16 }), onClick: () => setShowCreateList(true), children: "New List" })
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 selectedStep = useMemo(
992
- () => listQuery.data?.config.pipeline?.steps?.slice().sort((a, b) => a.order - b.order).find((step) => step.key === selectedStepKey) ?? null,
993
- [listQuery.data?.config.pipeline?.steps, selectedStepKey]
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: "sm",
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: "sm",
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: "sm",
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 qualification = list.config.qualification;
1068
- const pipelineSteps = list.config.pipeline?.steps?.slice().sort((a, b) => a.order - b.order) ?? [];
1069
- const stageTiles = [
1070
- { label: "Populated", value: progress.stageCounts.populated },
1071
- { label: "Extracted", value: progress.stageCounts.extracted },
1072
- { label: "Qualified", value: progress.stageCounts.qualified },
1073
- { label: "Discovered", value: progress.stageCounts.discovered },
1074
- { label: "Verified", value: progress.stageCounts.verified },
1075
- { label: "Personalized", value: progress.stageCounts.personalized },
1076
- { label: "Uploaded", value: progress.stageCounts.uploaded }
1077
- ];
1078
- return /* @__PURE__ */ jsx(SubshellContentContainer, { children: /* @__PURE__ */ jsxs(PageContainer, { children: [
1079
- /* @__PURE__ */ jsxs(Stack, { children: [
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
- PageTitleCaption,
1113
+ CardHeader,
1082
1114
  {
1083
- title: list.name,
1084
- caption: list.description ?? "Configuration, progress, and execution history for this list",
1115
+ icon: /* @__PURE__ */ jsx(IconAddressBook, { size: 16 }),
1116
+ title: "Members",
1085
1117
  rightSection: /* @__PURE__ */ jsx(
1086
- Button,
1118
+ SegmentedControl,
1087
1119
  {
1088
- variant: "light",
1089
- size: "sm",
1090
- leftSection: /* @__PURE__ */ jsx(IconArrowLeft, { size: 16 }),
1091
- onClick: () => navigate({ to: "/lead-gen/lists" }),
1092
- children: "Lists"
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__ */ jsxs(Stack, { gap: "xs", children: [
1098
- /* @__PURE__ */ jsx(Badge, { size: "sm", variant: "light", color: getStatusColor(list.status), children: list.status }),
1099
- /* @__PURE__ */ jsxs(Text, { size: "sm", c: "dimmed", children: [
1100
- "Created ",
1101
- formatDateTime(list.createdAt)
1102
- ] })
1103
- ] }),
1104
- /* @__PURE__ */ jsxs(SimpleGrid, { cols: { base: 1, sm: 2, lg: 4 }, children: [
1105
- /* @__PURE__ */ jsxs(Paper, { withBorder: true, p: "md", children: [
1106
- /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", mb: "xs", children: "Companies" }),
1107
- /* @__PURE__ */ jsx(Title, { order: 3, children: progress.totalCompanies })
1108
- ] }),
1109
- /* @__PURE__ */ jsxs(Paper, { withBorder: true, p: "md", children: [
1110
- /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", mb: "xs", children: "Contacts" }),
1111
- /* @__PURE__ */ jsx(Title, { order: 3, children: progress.totalContacts })
1112
- ] }),
1113
- /* @__PURE__ */ jsxs(Paper, { withBorder: true, p: "md", children: [
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(Paper, { withBorder: true, p: "md", children: /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
1211
- /* @__PURE__ */ jsx(Title, { order: 3, children: "Execution History" }),
1212
- !executions.length ? /* @__PURE__ */ jsx(Alert, { icon: /* @__PURE__ */ jsx(IconClockHour4, { size: 16 }), color: "gray", variant: "light", children: "No executions recorded for this list yet." }) : /* @__PURE__ */ jsxs(Table, { children: [
1213
- /* @__PURE__ */ jsx(Table.Thead, { children: /* @__PURE__ */ jsxs(Table.Tr, { children: [
1214
- /* @__PURE__ */ jsx(Table.Th, { children: "Resource" }),
1215
- /* @__PURE__ */ jsx(Table.Th, { children: "Status" }),
1216
- /* @__PURE__ */ jsx(Table.Th, { children: "Started" }),
1217
- /* @__PURE__ */ jsx(Table.Th, { children: "Completed" }),
1218
- /* @__PURE__ */ jsx(Table.Th, { children: "Duration" })
1219
- ] }) }),
1220
- /* @__PURE__ */ jsx(Table.Tbody, { children: executions.map((execution) => /* @__PURE__ */ jsxs(Table.Tr, { children: [
1221
- /* @__PURE__ */ jsxs(Table.Td, { children: [
1222
- /* @__PURE__ */ jsx(Text, { fw: 500, children: execution.resourceId }),
1223
- /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: execution.executionId })
1224
- ] }),
1225
- /* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsx(Badge, { size: "sm", variant: "light", color: getStatusColor(execution.status), children: execution.status }) }),
1226
- /* @__PURE__ */ jsx(Table.Td, { children: formatDateTime(execution.createdAt) }),
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
- selectedStep ? /* @__PURE__ */ jsx(
1234
- ResourceExecuteDialog,
1235
- {
1236
- opened: !!selectedStep && !resourceDefinitionQuery.isLoading,
1237
- onClose: () => setSelectedStepKey(null),
1238
- resource: {
1239
- resourceId: selectedStep.resourceId,
1240
- resourceType: "workflow",
1241
- name: selectedStep.label,
1242
- formSchema: resourceDefinitionQuery.data?.interface?.form
1243
- }
1244
- }
1245
- ) : null,
1246
- /* @__PURE__ */ jsx(
1247
- Modal,
1248
- {
1249
- opened: resourceDefinitionQuery.isLoading && !!selectedStep,
1250
- onClose: () => setSelectedStepKey(null),
1251
- withCloseButton: false,
1252
- centered: true,
1253
- children: /* @__PURE__ */ jsx(Center, { p: "md", children: /* @__PURE__ */ jsx(Loader, {}) })
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-DDZMBNTY.js';
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-EY322HXF.js';
7
- import { CenteredErrorState, CardHeader, StatsCardSkeleton, TrendIndicator, DetailCardSkeleton, EmptyState, PageTitleCaption, JsonViewer } from './chunk-SQPM2QDH.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-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-GCBWGGI6.js';
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 };