@elevasis/ui 2.28.1 → 2.29.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 (50) hide show
  1. package/dist/api/index.js +2 -2
  2. package/dist/app/index.js +4 -4
  3. package/dist/charts/index.js +3 -3
  4. package/dist/{chunk-PBNIW7KV.js → chunk-3DUOPXOJ.js} +139 -8
  5. package/dist/{chunk-5R27NFOI.js → chunk-5CW2HXQA.js} +4 -4
  6. package/dist/{chunk-UOHOKDKL.js → chunk-65RQE3XF.js} +5 -5
  7. package/dist/{chunk-TVJROM2V.js → chunk-6NHCE7JM.js} +49 -28
  8. package/dist/{chunk-GJXAAYZ3.js → chunk-6WXDE5LZ.js} +1 -1
  9. package/dist/{chunk-ZPXV5KI3.js → chunk-7E3FUTND.js} +1 -1
  10. package/dist/{chunk-M6OJ43NL.js → chunk-A7R2URMV.js} +60 -25
  11. package/dist/{chunk-YNYGUVGW.js → chunk-AK5E6ILJ.js} +8 -7
  12. package/dist/{chunk-MZCDRBSI.js → chunk-CEHUFNAL.js} +1 -1
  13. package/dist/{chunk-CT5IR4ZA.js → chunk-CLUP5H3C.js} +6 -9
  14. package/dist/{chunk-MYEOTM7D.js → chunk-CN2HC4D4.js} +5 -1
  15. package/dist/{chunk-JS7VBTC4.js → chunk-FFDAE2QI.js} +82 -2
  16. package/dist/{chunk-MCRKFDKB.js → chunk-FGDUK74A.js} +4 -4
  17. package/dist/{chunk-N63RKL3L.js → chunk-HNFQCOD2.js} +4 -4
  18. package/dist/{chunk-SRNIHB7Y.js → chunk-HXZQWMKE.js} +1 -2
  19. package/dist/{chunk-3HCTCMAS.js → chunk-OHGNCWJP.js} +3 -3
  20. package/dist/{chunk-AYSO5A3R.js → chunk-OIMPGKDB.js} +2 -2
  21. package/dist/{chunk-NU5FNTOB.js → chunk-OWESKPTJ.js} +58 -7
  22. package/dist/{chunk-K4Q5QUHZ.js → chunk-QNL7UI5G.js} +4 -4
  23. package/dist/{chunk-HNN3QALL.js → chunk-SZWXQHKO.js} +2 -2
  24. package/dist/{chunk-MJMFIWEB.js → chunk-Y3YJKKEB.js} +1 -1
  25. package/dist/components/index.js +25 -25
  26. package/dist/features/crm/index.js +9 -9
  27. package/dist/features/dashboard/index.js +10 -10
  28. package/dist/features/delivery/index.js +9 -9
  29. package/dist/features/knowledge/index.js +33 -19
  30. package/dist/features/lead-gen/index.d.ts +17 -1
  31. package/dist/features/lead-gen/index.js +10 -10
  32. package/dist/features/monitoring/index.js +11 -11
  33. package/dist/features/monitoring/requests/index.js +8 -8
  34. package/dist/features/operations/index.js +14 -14
  35. package/dist/features/settings/index.js +9 -9
  36. package/dist/hooks/delivery/index.js +2 -2
  37. package/dist/hooks/index.js +8 -8
  38. package/dist/hooks/published.js +8 -8
  39. package/dist/index.d.ts +1 -3
  40. package/dist/index.js +8 -8
  41. package/dist/knowledge/index.d.ts +1 -1
  42. package/dist/knowledge/index.js +102 -2
  43. package/dist/provider/index.js +6 -6
  44. package/dist/provider/published.js +5 -5
  45. package/dist/test-utils/index.js +2 -2
  46. package/dist/utils/index.d.ts +1 -3
  47. package/dist/utils/index.js +1 -1
  48. package/dist/vite/index.js +2 -2
  49. package/dist/vite-plugin-knowledge/index.js +1 -1
  50. package/package.json +4 -4
package/dist/api/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import '../chunk-XCYKC6OZ.js';
2
- export { ApiClientProvider, useApiClient, useApiClientContext } from '../chunk-ZPXV5KI3.js';
3
- import '../chunk-SRNIHB7Y.js';
2
+ export { ApiClientProvider, useApiClient, useApiClientContext } from '../chunk-7E3FUTND.js';
3
+ import '../chunk-HXZQWMKE.js';
4
4
  import '../chunk-KRWALB24.js';
5
5
  import '../chunk-DD3CCMCZ.js';
6
6
  import '../chunk-I2KLQ2HA.js';
package/dist/app/index.js CHANGED
@@ -1,13 +1,13 @@
1
- import { ElevasisUIProvider } from '../chunk-AYSO5A3R.js';
1
+ import { ElevasisUIProvider } from '../chunk-OIMPGKDB.js';
2
2
  import '../chunk-LH4GPYDX.js';
3
3
  import '../chunk-HLFFKKT3.js';
4
4
  import '../chunk-WLOQ4IBG.js';
5
- import '../chunk-NU5FNTOB.js';
5
+ import '../chunk-OWESKPTJ.js';
6
6
  import '../chunk-SZHARWKU.js';
7
- import '../chunk-ZPXV5KI3.js';
7
+ import '../chunk-7E3FUTND.js';
8
8
  import '../chunk-HOIT677G.js';
9
9
  import '../chunk-E565XMTQ.js';
10
- import '../chunk-SRNIHB7Y.js';
10
+ import '../chunk-HXZQWMKE.js';
11
11
  import '../chunk-KRWALB24.js';
12
12
  import { useInitialization } from '../chunk-WKJ47GIW.js';
13
13
  import '../chunk-DD3CCMCZ.js';
@@ -1,14 +1,14 @@
1
- export { ActivityTrendChart, ChartFrame, CombinedTrendChart, CostTrendChart, HeroStatsRow } from '../chunk-HNN3QALL.js';
1
+ export { ActivityTrendChart, ChartFrame, CombinedTrendChart, CostTrendChart, HeroStatsRow } from '../chunk-SZWXQHKO.js';
2
2
  export { CyberAreaChart, CyberDonut, CyberDonutTooltip, CyberLegendItem, getSeriesColor, useCyberColors } from '../chunk-CW3UNAF2.js';
3
3
  import '../chunk-VKMNWHTL.js';
4
- import '../chunk-GJXAAYZ3.js';
4
+ import '../chunk-6WXDE5LZ.js';
5
5
  import '../chunk-3KMDHCAR.js';
6
6
  import '../chunk-SZHARWKU.js';
7
7
  import '../chunk-NYBEU5TE.js';
8
8
  import '../chunk-2IFYDILW.js';
9
9
  import '../chunk-Q7DJKLEN.js';
10
10
  import '../chunk-DT3QYZVU.js';
11
- import '../chunk-SRNIHB7Y.js';
11
+ import '../chunk-HXZQWMKE.js';
12
12
  import '../chunk-KRWALB24.js';
13
13
  import '../chunk-WFTNY755.js';
14
14
  import '../chunk-WKJ47GIW.js';
@@ -1,13 +1,13 @@
1
1
  import { SemanticIcon } from './chunk-JCGD4GM6.js';
2
2
  import { SubshellSidebarLoader } from './chunk-XQQEKWTL.js';
3
- import { OrganizationModelProspectingSchema } from './chunk-JS7VBTC4.js';
3
+ import { OrganizationModelProspectingSchema, CAPABILITY_REGISTRY } from './chunk-FFDAE2QI.js';
4
4
  import { useCyberColors, CyberDonut } from './chunk-CW3UNAF2.js';
5
5
  import { SubshellSidebarSection } from './chunk-IIMU5YAJ.js';
6
- import { collectResourceFilterFacets, useCommandViewStore, useCommandViewData, useCommandViewStats, usePaginationState, useResourceExecutions, useCheckpointTasks } from './chunk-N63RKL3L.js';
7
- import { EmptyState, APIErrorAlert } from './chunk-GJXAAYZ3.js';
8
- import { LabelSchema, ColorTokenSchema, IconNameSchema, PathSchema, DescriptionSchema, DisplayMetadataSchema, ModelIdSchema, ReferenceIdsSchema, OrganizationModelSalesSchema } from './chunk-NU5FNTOB.js';
6
+ import { collectResourceFilterFacets, useCommandViewStore, useCommandViewData, useCommandViewStats, usePaginationState, useResourceExecutions, useCheckpointTasks } from './chunk-HNFQCOD2.js';
7
+ import { EmptyState, APIErrorAlert } from './chunk-6WXDE5LZ.js';
8
+ import { LabelSchema, ColorTokenSchema, IconNameSchema, PathSchema, DescriptionSchema, DisplayMetadataSchema, ModelIdSchema, ReferenceIdsSchema, OrganizationModelSalesSchema } from './chunk-OWESKPTJ.js';
9
9
  import { useElevasisFeatures } from './chunk-V3HUIZJX.js';
10
- import { getNodeId } from './chunk-SRNIHB7Y.js';
10
+ import { getNodeId } from './chunk-HXZQWMKE.js';
11
11
  import { useRef, useEffect, useMemo } from 'react';
12
12
  import { Paper, Stack, Group, Text, Button, Badge, SimpleGrid, Divider, Select, NumberInput, MultiSelect, Switch, Card, Checkbox, UnstyledButton, useMantineTheme, Box, Title, Space, Center, Loader, Pagination, TextInput, SegmentedControl } from '@mantine/core';
13
13
  import { IconShare2, IconTopologyStar3, IconRefresh, IconCircleX, IconCircleCheck, IconCircleDashed, IconSitemap, IconExternalLink, IconSearch } from '@tabler/icons-react';
@@ -587,8 +587,12 @@ var LEGACY_FEATURE_ALIASES = /* @__PURE__ */ new Map([
587
587
  function hasFeature(featuresById, featureId) {
588
588
  return featuresById.has(featureId) || featuresById.has(LEGACY_FEATURE_ALIASES.get(featureId) ?? "");
589
589
  }
590
+ function defaultFeaturePathFor(id) {
591
+ return `/${id.replaceAll(".", "/")}`;
592
+ }
590
593
  var OrganizationModelSchema = OrganizationModelSchemaBase.superRefine((model, ctx) => {
591
594
  const featuresById = collectIds(model.features, ctx, ["features"], "Feature");
595
+ const featureIdsByEffectivePath = /* @__PURE__ */ new Map();
592
596
  model.features.forEach((feature, featureIndex) => {
593
597
  const segments = feature.id.split(".");
594
598
  if (segments.length > 1) {
@@ -604,6 +608,20 @@ var OrganizationModelSchema = OrganizationModelSchemaBase.superRefine((model, ct
604
608
  const hasChildren = model.features.some(
605
609
  (candidate) => candidate.id.startsWith(`${feature.id}.`) && candidate.id !== feature.id
606
610
  );
611
+ const contributesRoutePath = feature.path !== void 0 || !hasChildren;
612
+ if (contributesRoutePath) {
613
+ const effectivePath = feature.path ?? defaultFeaturePathFor(feature.id);
614
+ const existingFeatureId = featureIdsByEffectivePath.get(effectivePath);
615
+ if (existingFeatureId !== void 0) {
616
+ addIssue(
617
+ ctx,
618
+ ["features", featureIndex, feature.path === void 0 ? "id" : "path"],
619
+ `Feature "${feature.id}" effective path "${effectivePath}" duplicates feature "${existingFeatureId}"`
620
+ );
621
+ } else {
622
+ featureIdsByEffectivePath.set(effectivePath, feature.id);
623
+ }
624
+ }
607
625
  if (hasChildren && feature.enabled) {
608
626
  const hasEnabledDescendant = model.features.some(
609
627
  (candidate) => candidate.id.startsWith(`${feature.id}.`) && candidate.enabled
@@ -617,6 +635,43 @@ var OrganizationModelSchema = OrganizationModelSchemaBase.superRefine((model, ct
617
635
  }
618
636
  }
619
637
  });
638
+ const surfacesById = collectIds(model.navigation.surfaces, ctx, ["navigation", "surfaces"], "Navigation surface");
639
+ if (model.navigation.defaultSurfaceId !== void 0 && !surfacesById.has(model.navigation.defaultSurfaceId)) {
640
+ addIssue(
641
+ ctx,
642
+ ["navigation", "defaultSurfaceId"],
643
+ `Navigation defaultSurfaceId references unknown surface "${model.navigation.defaultSurfaceId}"`
644
+ );
645
+ }
646
+ model.navigation.groups.forEach((group, groupIndex) => {
647
+ group.surfaceIds.forEach((surfaceId, surfaceIndex) => {
648
+ if (!surfacesById.has(surfaceId)) {
649
+ addIssue(
650
+ ctx,
651
+ ["navigation", "groups", groupIndex, "surfaceIds", surfaceIndex],
652
+ `Navigation group "${group.id}" references unknown surface "${surfaceId}"`
653
+ );
654
+ }
655
+ });
656
+ });
657
+ model.navigation.surfaces.forEach((surface, surfaceIndex) => {
658
+ if (surface.featureId !== void 0 && !hasFeature(featuresById, surface.featureId)) {
659
+ addIssue(
660
+ ctx,
661
+ ["navigation", "surfaces", surfaceIndex, "featureId"],
662
+ `Navigation surface "${surface.id}" references unknown feature "${surface.featureId}"`
663
+ );
664
+ }
665
+ surface.featureIds.forEach((featureId, featureIndex) => {
666
+ if (!hasFeature(featuresById, featureId)) {
667
+ addIssue(
668
+ ctx,
669
+ ["navigation", "surfaces", surfaceIndex, "featureIds", featureIndex],
670
+ `Navigation surface "${surface.id}" references unknown feature "${featureId}"`
671
+ );
672
+ }
673
+ });
674
+ });
620
675
  const segmentsById = new Map(model.customers.segments.map((seg) => [seg.id, seg]));
621
676
  model.offerings.products.forEach((product, productIndex) => {
622
677
  product.targetSegmentIds.forEach((segmentId, segmentIndex) => {
@@ -664,6 +719,7 @@ var OrganizationGraphNodeKindSchema = z.enum([
664
719
  "surface",
665
720
  "entity",
666
721
  "capability",
722
+ "stage",
667
723
  "resource",
668
724
  "knowledge"
669
725
  ]);
@@ -845,6 +901,75 @@ function buildOrganizationGraph(input) {
845
901
  });
846
902
  }
847
903
  }
904
+ const allStages = [
905
+ ...organizationModel.prospecting.companyStages,
906
+ ...organizationModel.prospecting.contactStages
907
+ ].sort((a, b) => a.order - b.order || a.id.localeCompare(b.id));
908
+ for (const stage of allStages) {
909
+ const id = nodeId("stage", stage.id);
910
+ pushUniqueNode(nodes, nodeIds, {
911
+ id,
912
+ kind: "stage",
913
+ label: stage.label,
914
+ sourceId: stage.id,
915
+ ...stage.description ? { description: stage.description } : {},
916
+ ...stage.icon ? { icon: stage.icon } : {}
917
+ });
918
+ pushUniqueEdge(edges, edgeIds, {
919
+ id: edgeId("contains", organizationNode.id, id),
920
+ kind: "contains",
921
+ sourceId: organizationNode.id,
922
+ targetId: id
923
+ });
924
+ }
925
+ for (const cap of [...CAPABILITY_REGISTRY].sort((a, b) => a.id.localeCompare(b.id))) {
926
+ const id = nodeId("capability", cap.id);
927
+ pushUniqueNode(nodes, nodeIds, {
928
+ id,
929
+ kind: "capability",
930
+ label: cap.label,
931
+ sourceId: cap.id,
932
+ description: cap.description
933
+ });
934
+ pushUniqueEdge(edges, edgeIds, {
935
+ id: edgeId("contains", organizationNode.id, id),
936
+ kind: "contains",
937
+ sourceId: organizationNode.id,
938
+ targetId: id
939
+ });
940
+ const resourceNode = ensureResourceNode(nodes, nodeIds, resourceNodesById, cap.resourceId);
941
+ pushUniqueEdge(edges, edgeIds, {
942
+ id: edgeId("maps_to", id, resourceNode.id),
943
+ kind: "maps_to",
944
+ sourceId: id,
945
+ targetId: resourceNode.id
946
+ });
947
+ }
948
+ for (const template of [...organizationModel.prospecting.buildTemplates].sort((a, b) => a.id.localeCompare(b.id))) {
949
+ const stepById = new Map(template.steps.map((s) => [s.id, s]));
950
+ for (const step of [...template.steps].sort((a, b) => a.id.localeCompare(b.id))) {
951
+ const stageNodeId = nodeId("stage", step.stageKey);
952
+ const capNodeId = nodeId("capability", step.capabilityKey);
953
+ pushUniqueEdge(edges, edgeIds, {
954
+ id: edgeId("uses", stageNodeId, capNodeId, step.id),
955
+ kind: "uses",
956
+ sourceId: stageNodeId,
957
+ targetId: capNodeId
958
+ });
959
+ for (const depId of step.dependsOn ?? []) {
960
+ const depStep = stepById.get(depId);
961
+ if (depStep) {
962
+ const depStageNodeId = nodeId("stage", depStep.stageKey);
963
+ pushUniqueEdge(edges, edgeIds, {
964
+ id: edgeId("references", stageNodeId, depStageNodeId, step.id),
965
+ kind: "references",
966
+ sourceId: stageNodeId,
967
+ targetId: depStageNodeId
968
+ });
969
+ }
970
+ }
971
+ }
972
+ }
848
973
  if (commandViewData) {
849
974
  const commandViewResources = collectCommandViewResources(commandViewData).sort(
850
975
  (a, b) => a.resourceId.localeCompare(b.resourceId)
@@ -908,6 +1033,7 @@ var NODE_KIND_LABELS = {
908
1033
  surface: "Surface",
909
1034
  entity: "Entity",
910
1035
  capability: "Capability",
1036
+ stage: "Stage",
911
1037
  resource: "Resource",
912
1038
  knowledge: "Knowledge"
913
1039
  };
@@ -917,6 +1043,7 @@ var NODE_KIND_MEANINGS = {
917
1043
  surface: "A user-facing or operational surface that exposes feature behavior in the model.",
918
1044
  entity: "A shared business concept that can be referenced by surfaces, resources, or capabilities.",
919
1045
  capability: "A reusable capability that can be attached to a feature or surface.",
1046
+ stage: "A lifecycle stage that records progress for an entity through a build pipeline.",
920
1047
  resource: "A concrete command-view or mapped resource that bridges execution topology into the model.",
921
1048
  knowledge: "An operational knowledge node that documents a process, strategy, or runbook in the org model."
922
1049
  };
@@ -1576,6 +1703,7 @@ var ORGANIZATION_GRAPH_NODE_KIND_ORDER = [
1576
1703
  "surface",
1577
1704
  "entity",
1578
1705
  "capability",
1706
+ "stage",
1579
1707
  "resource",
1580
1708
  "knowledge"
1581
1709
  ];
@@ -1585,6 +1713,7 @@ var ORGANIZATION_GRAPH_NODE_KIND_LABELS = {
1585
1713
  surface: "Surface",
1586
1714
  entity: "Entity",
1587
1715
  capability: "Capability",
1716
+ stage: "Stage",
1588
1717
  resource: "Resource",
1589
1718
  knowledge: "Knowledge"
1590
1719
  };
@@ -2480,15 +2609,17 @@ var NODE_KIND_ORDER = {
2480
2609
  feature: 1,
2481
2610
  surface: 2,
2482
2611
  capability: 3,
2483
- entity: 4,
2484
- resource: 5,
2485
- knowledge: 6
2612
+ stage: 4,
2613
+ entity: 5,
2614
+ resource: 6,
2615
+ knowledge: 7
2486
2616
  };
2487
2617
  var NODE_KIND_LABEL = {
2488
2618
  organization: "Organization",
2489
2619
  feature: "Feature",
2490
2620
  surface: "Surface",
2491
2621
  capability: "Capability",
2622
+ stage: "Stage",
2492
2623
  entity: "Entity",
2493
2624
  resource: "Resource",
2494
2625
  knowledge: "Knowledge"
@@ -1,13 +1,13 @@
1
- import { CostTrendChart, ActivityTrendChart } from './chunk-HNN3QALL.js';
1
+ import { CostTrendChart, ActivityTrendChart } from './chunk-SZWXQHKO.js';
2
2
  import { CyberAreaChart } from './chunk-CW3UNAF2.js';
3
3
  import { AppShellLoader } from './chunk-RYTEQBAO.js';
4
4
  import { FilterBar } from './chunk-PDHTXPSF.js';
5
5
  import { CustomModal } from './chunk-KVJ3LFH2.js';
6
6
  import { formatDuration } from './chunk-E4WQGJNS.js';
7
- 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-N63RKL3L.js';
8
- import { CenteredErrorState, CardHeader, StatsCardSkeleton, TrendIndicator, DetailCardSkeleton, EmptyState, PageTitleCaption, JsonViewer } from './chunk-GJXAAYZ3.js';
7
+ 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-HNFQCOD2.js';
8
+ import { CenteredErrorState, CardHeader, StatsCardSkeleton, TrendIndicator, DetailCardSkeleton, EmptyState, PageTitleCaption, JsonViewer } from './chunk-6WXDE5LZ.js';
9
9
  import { useRouterContext } from './chunk-Q7DJKLEN.js';
10
- import { formatBucketTime, PAGE_SIZE_DEFAULT, getTimeRangeDates } from './chunk-SRNIHB7Y.js';
10
+ import { formatBucketTime, PAGE_SIZE_DEFAULT, getTimeRangeDates } from './chunk-HXZQWMKE.js';
11
11
  import { useState, useMemo, useCallback } from 'react';
12
12
  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';
13
13
  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';
@@ -1,4 +1,4 @@
1
- import { DEFAULT_ORGANIZATION_MODEL_PROSPECTING, PROSPECTING_STEPS } from './chunk-JS7VBTC4.js';
1
+ import { DEFAULT_ORGANIZATION_MODEL_PROSPECTING, PROSPECTING_STEPS } from './chunk-FFDAE2QI.js';
2
2
  import { sanitizeInput } from './chunk-3MEXPLWT.js';
3
3
  import { PageContainer } from './chunk-BZZCNLT6.js';
4
4
  import { TableSelectionToolbar, SortableHeader } from './chunk-TUMSNGTX.js';
@@ -6,10 +6,10 @@ import { SubshellNavItem } from './chunk-X4WBGKJQ.js';
6
6
  import { SubshellSidebarSection } from './chunk-IIMU5YAJ.js';
7
7
  import { FilterBar } from './chunk-PDHTXPSF.js';
8
8
  import { CustomModal } from './chunk-KVJ3LFH2.js';
9
- import { acquisitionListKeys, useListsTelemetry, useLists, useCreateList, useTableSort, sortData, usePaginationState, useTableSelection, useWorkflowExecution, useList, useListProgress, useListExecutions, useDeleteList, useCompanyFacets, useCompanies, useDeleteCompanies, useContacts, useDeleteContacts, useListMembers, useListMember, useTransitionListMember, useDeriveActions, useArtifacts } from './chunk-N63RKL3L.js';
10
- import { showApiErrorNotification, showSuccessNotification } from './chunk-MZCDRBSI.js';
11
- import { PageTitleCaption, CenteredErrorState, StatCard, CardHeader, EmptyState, JsonViewer } from './chunk-GJXAAYZ3.js';
12
- import { useListActions, LEAD_GEN_STAGE_CATALOG, LEAD_GEN_PIPELINE_DEFINITIONS, findPipeline } from './chunk-NU5FNTOB.js';
9
+ import { acquisitionListKeys, useListsTelemetry, useLists, useCreateList, useTableSort, sortData, usePaginationState, useTableSelection, useWorkflowExecution, useList, useListProgress, useListExecutions, useDeleteList, useCompanyFacets, useCompanies, useDeleteCompanies, useContacts, useDeleteContacts, useListMembers, useListMember, useTransitionListMember, useDeriveActions, useArtifacts } from './chunk-HNFQCOD2.js';
10
+ import { showApiErrorNotification, showSuccessNotification } from './chunk-CEHUFNAL.js';
11
+ import { PageTitleCaption, CenteredErrorState, StatCard, CardHeader, EmptyState, JsonViewer } from './chunk-6WXDE5LZ.js';
12
+ import { useListActions, LEAD_GEN_STAGE_CATALOG, LEAD_GEN_PIPELINE_DEFINITIONS, findPipeline } from './chunk-OWESKPTJ.js';
13
13
  import { SubshellContentContainer } from './chunk-TKAYX2SP.js';
14
14
  import { useRouterContext } from './chunk-Q7DJKLEN.js';
15
15
  import { useElevasisServices } from './chunk-5WWZXCS5.js';
@@ -4,13 +4,13 @@ import { SubshellNavItem } from './chunk-X4WBGKJQ.js';
4
4
  import { SubshellSidebarSection } from './chunk-IIMU5YAJ.js';
5
5
  import { FilterBar } from './chunk-PDHTXPSF.js';
6
6
  import { CustomModal } from './chunk-KVJ3LFH2.js';
7
- import { useDealTasksDue, useDealsLookup, useCreateDealTask, useDealsSummary, useDeleteDeal, usePaginationState, useDeals, useTableSort, sortData, useTableSelection, useDealDetail, useCompany, dealKeys, useExecuteAction } from './chunk-N63RKL3L.js';
8
- import { showApiErrorNotification, showSuccessNotification } from './chunk-MZCDRBSI.js';
9
- import { CenteredErrorState, CardHeader, StatCard, PageTitleCaption, EmptyState, ActivityTimeline } from './chunk-GJXAAYZ3.js';
10
- import { useCrmActions, DEFAULT_CRM_PRIORITY_RULE_CONFIG, deriveActions, CRM_PRIORITY_BUCKETS } from './chunk-NU5FNTOB.js';
7
+ import { useDealTasksDue, useDealsLookup, useCreateDealTask, useDealsSummary, useDeleteDeal, usePaginationState, useDeals, useTableSort, sortData, useTableSelection, useDealDetail, useCompany, dealKeys, useExecuteAction } from './chunk-HNFQCOD2.js';
8
+ import { showApiErrorNotification, showSuccessNotification } from './chunk-CEHUFNAL.js';
9
+ import { CenteredErrorState, CardHeader, StatCard, PageTitleCaption, EmptyState, ActivityTimeline } from './chunk-6WXDE5LZ.js';
10
+ import { CRM_PIPELINE_DEFINITION, useCrmActions, DEFAULT_CRM_PRIORITY_RULE_CONFIG, deriveActions, CRM_PRIORITY_BUCKETS } from './chunk-OWESKPTJ.js';
11
11
  import { SubshellContentContainer } from './chunk-TKAYX2SP.js';
12
12
  import { useRouterContext } from './chunk-Q7DJKLEN.js';
13
- import { PAGE_SIZE_DEFAULT, formatTimeAgo } from './chunk-SRNIHB7Y.js';
13
+ import { PAGE_SIZE_DEFAULT, formatTimeAgo } from './chunk-HXZQWMKE.js';
14
14
  import { useElevasisServices } from './chunk-5WWZXCS5.js';
15
15
  import { Box, Stack, Group, Text, Badge, Center, Loader, UnstyledButton, Button, Modal, Title, Select, TextInput, Textarea, Paper, Alert, Table, SimpleGrid, Tabs, Checkbox, Tooltip, Pagination, Code, Card, Switch, NumberInput, ColorSwatch, Popover, ActionIcon, CopyButton, Divider } from '@mantine/core';
16
16
  import { IconLayoutGrid, IconColumns, IconFileInvoice, IconAddressBook, IconTrophy, IconClockExclamation, IconUser, IconPlus, IconChecklist, IconHistory, IconAlertCircle, IconCurrencyDollar, IconChartBar, IconBriefcase, IconSearch, IconTargetArrow, IconAlertTriangle, IconMessages, IconArrowLeft, IconFileText, IconInbox, IconBolt, IconBuilding, IconSettings, IconRestore, IconInfoCircle, IconMailForward, IconCheckbox, IconCalendar, IconMail, IconPhone, IconArrowRight, IconNote, IconCheck, IconCopy } from '@tabler/icons-react';
@@ -47,6 +47,43 @@ var SAVED_VIEW_PRESETS = [
47
47
  }
48
48
  ];
49
49
 
50
+ // src/lib/crm/pipeline.ts
51
+ function getCrmStageOptions() {
52
+ return CRM_PIPELINE_DEFINITION.stages.map((stage) => ({
53
+ value: stage.stageKey,
54
+ label: stage.label
55
+ }));
56
+ }
57
+ function getCrmStageColors() {
58
+ return CRM_PIPELINE_DEFINITION.stages.reduce((colors, stage) => {
59
+ if (stage.color) colors[stage.stageKey] = stage.color;
60
+ return colors;
61
+ }, {});
62
+ }
63
+ function getCrmStageLabel(stageKey) {
64
+ const normalized = normalizeCatalogKey(stageKey);
65
+ if (!normalized) return "Unknown";
66
+ return CRM_PIPELINE_DEFINITION.stages.find((stage) => stage.stageKey.toLowerCase() === normalized.toLowerCase())?.label ?? formatReadableKey(normalized);
67
+ }
68
+ function getCrmStateLabel(stateKey) {
69
+ const normalized = normalizeCatalogKey(stateKey);
70
+ if (!normalized) return "Unknown";
71
+ for (const stage of CRM_PIPELINE_DEFINITION.stages) {
72
+ const state = stage.states.find((candidate) => candidate.stateKey.toLowerCase() === normalized.toLowerCase());
73
+ if (state) return state.label;
74
+ }
75
+ return formatReadableKey(normalized);
76
+ }
77
+ function normalizeCatalogKey(value) {
78
+ const normalized = value?.trim();
79
+ return normalized ? normalized : null;
80
+ }
81
+ function formatReadableKey(value) {
82
+ const words = value.split("_").map((word) => word.trim().toLowerCase()).filter(Boolean);
83
+ if (!words.length) return "Unknown";
84
+ return words.map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
85
+ }
86
+
50
87
  // src/features/crm/pages/shared.ts
51
88
  var DEAL_REFERRER_STORAGE_KEY = "crm:dealReferrer";
52
89
  function setDealReferrer(referrer) {
@@ -65,22 +102,11 @@ function getDealReferrer() {
65
102
  return "deals";
66
103
  }
67
104
  }
68
- var DEAL_STAGE_COLORS = {
69
- interested: "blue",
70
- proposal: "yellow",
71
- closing: "orange",
72
- closed_won: "green",
73
- closed_lost: "red",
74
- nurturing: "grape"
75
- };
76
- var DEAL_STAGE_OPTIONS = [
77
- { value: "interested", label: "Interested" },
78
- { value: "proposal", label: "Proposal" },
79
- { value: "closing", label: "Closing" },
80
- { value: "closed_won", label: "Closed Won" },
81
- { value: "closed_lost", label: "Closed Lost" },
82
- { value: "nurturing", label: "Nurturing" }
83
- ];
105
+ var DEAL_STAGE_COLORS = getCrmStageColors();
106
+ var DEAL_STAGE_OPTIONS = getCrmStageOptions().map((option) => ({
107
+ value: option.value,
108
+ label: option.label
109
+ }));
84
110
  var DEAL_PRIORITY_OPTIONS = [
85
111
  { value: "needs_response", label: "Needs response" },
86
112
  { value: "follow_up_due", label: "Follow-up due" },
@@ -101,15 +127,10 @@ function compareDealsByPriorityThenUpdated(a, b, direction = "asc") {
101
127
  return getUpdatedTimestamp(b) - getUpdatedTimestamp(a);
102
128
  }
103
129
  function formatDealStageLabel(stage) {
104
- return formatDealWorkflowLabel(stage);
130
+ return getCrmStageLabel(stage);
105
131
  }
106
132
  function formatDealStateLabel(state) {
107
- return formatDealWorkflowLabel(state);
108
- }
109
- function formatDealWorkflowLabel(value) {
110
- const words = value?.trim().split("_").map((word) => word.trim().toLowerCase()).filter(Boolean);
111
- if (!words?.length) return "Unknown";
112
- return words.map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
133
+ return getCrmStateLabel(state);
113
134
  }
114
135
  function comparePriorityRank(a, b, direction) {
115
136
  const comparison = a.rank - b.rank;
@@ -1,6 +1,6 @@
1
1
  import { StyledMarkdown } from './chunk-3KMDHCAR.js';
2
2
  import { useRouterContext } from './chunk-Q7DJKLEN.js';
3
- import { getErrorInfo, getErrorTitle, getResourceIcon, formatTimeAgo } from './chunk-SRNIHB7Y.js';
3
+ import { getErrorInfo, getErrorTitle, getResourceIcon, formatTimeAgo } from './chunk-HXZQWMKE.js';
4
4
  import { ResourceStatusColors } from './chunk-KRWALB24.js';
5
5
  import { useAuthContext } from './chunk-BRJ3QZ4E.js';
6
6
  import { Center, Stack, Title, Text, Button, Box, Loader, Badge, Group, Collapse, ScrollArea, Card, Select, Alert, Code, ThemeIcon, Paper, Grid, Timeline, Space } from '@mantine/core';
@@ -1,4 +1,4 @@
1
- import { APIClientError } from './chunk-SRNIHB7Y.js';
1
+ import { APIClientError } from './chunk-HXZQWMKE.js';
2
2
  import { OrganizationContext } from './chunk-DD3CCMCZ.js';
3
3
  import { createContext, useContext, useMemo, useCallback } from 'react';
4
4
  import { jsx } from 'react/jsx-runtime';
@@ -2,11 +2,11 @@ import { AppShellLoader } from './chunk-RYTEQBAO.js';
2
2
  import { FilterBar } from './chunk-PDHTXPSF.js';
3
3
  import { CustomModal } from './chunk-KVJ3LFH2.js';
4
4
  import { useAvailablePresets } from './chunk-XBMCDGHA.js';
5
- import { useDeleteCredential, useCreateCredential, useCredentials, MEMBERSHIP_STATUS_COLORS, transformMembershipToTableRow, useUserMemberships, useUpdateWebhookEndpoint, useResources, useDeleteWebhookEndpoint, useCreateWebhookEndpoint, useListWebhookEndpoints, useOrgRoles, useAssignRole, useRevokeRole, useHasPermission, useUpdateMemberConfig, useOrganizationMembers, useUpdateCredential, CredentialSchemas } from './chunk-N63RKL3L.js';
6
- import { showApiErrorNotification, showErrorNotification, showSuccessNotification } from './chunk-MZCDRBSI.js';
7
- import { ListSkeleton, EmptyState, PageTitleCaption, CardHeader, APIErrorAlert, StatCard } from './chunk-GJXAAYZ3.js';
5
+ import { useDeleteCredential, useCreateCredential, useCredentials, MEMBERSHIP_STATUS_COLORS, transformMembershipToTableRow, useUserMemberships, useUpdateWebhookEndpoint, useResources, useDeleteWebhookEndpoint, useCreateWebhookEndpoint, useListWebhookEndpoints, useOrgRoles, useAssignRole, useRevokeRole, useHasPermission, useUpdateMemberConfig, useOrganizationMembers, useUpdateCredential, CredentialSchemas } from './chunk-HNFQCOD2.js';
6
+ import { showApiErrorNotification, showErrorNotification, showSuccessNotification } from './chunk-CEHUFNAL.js';
7
+ import { ListSkeleton, EmptyState, PageTitleCaption, CardHeader, APIErrorAlert, StatCard } from './chunk-6WXDE5LZ.js';
8
8
  import { RoleBadge } from './chunk-GESXCQWY.js';
9
- import { isAPIClientError, formatDateTime, OAUTH_POPUP_CHECK_INTERVAL, OAUTH_FLOW_TIMEOUT } from './chunk-SRNIHB7Y.js';
9
+ import { isAPIClientError, formatDateTime, OAUTH_FLOW_TIMEOUT } from './chunk-HXZQWMKE.js';
10
10
  import { useInitialization } from './chunk-WKJ47GIW.js';
11
11
  import { useOrganization } from './chunk-DD3CCMCZ.js';
12
12
  import { useElevasisServices } from './chunk-5WWZXCS5.js';
@@ -1874,6 +1874,8 @@ function MemberConfigModal({ opened, onClose, member }) {
1874
1874
  ] })
1875
1875
  ] }) });
1876
1876
  }
1877
+ var OAUTH_COMPLETION_CHANNEL = "elevasis-oauth";
1878
+ var OAUTH_COMPLETION_STORAGE_KEY = "elevasis:oauth-complete";
1877
1879
  function useOAuthFlow({ apiUrl }) {
1878
1880
  const [isAuthorizing, setIsAuthorizing] = useState(false);
1879
1881
  const [error, setError] = useState(null);
@@ -1903,15 +1905,15 @@ function useOAuthFlow({ apiUrl }) {
1903
1905
  if (!popup) {
1904
1906
  throw new Error("popup_blocked");
1905
1907
  }
1906
- await waitForOAuthCallback(popup);
1908
+ await waitForOAuthCallback(popup, Date.now());
1907
1909
  } catch (err) {
1908
1910
  const rawError = err instanceof Error ? err.message : "unknown";
1909
1911
  if (rawError.includes("popup_blocked")) {
1910
1912
  setError("Please enable popups and try again");
1911
- } else if (rawError.includes("cancelled")) {
1912
- setError("Authorization cancelled");
1913
1913
  } else if (rawError.includes("timeout")) {
1914
1914
  setError("Authorization timed out. Please try again.");
1915
+ } else if (rawError.includes("popup_closed")) {
1916
+ setError("Authorization was cancelled.");
1915
1917
  } else if (rawError.includes("token_exchange_failed")) {
1916
1918
  setError("Failed to obtain access token. Please try again.");
1917
1919
  } else if (rawError.includes("invalid_state")) {
@@ -1928,43 +1930,76 @@ function useOAuthFlow({ apiUrl }) {
1928
1930
  },
1929
1931
  [isReady, organizationId, apiUrl]
1930
1932
  );
1931
- const waitForOAuthCallback = (popup) => {
1933
+ const waitForOAuthCallback = (popup, startedAt) => {
1932
1934
  return new Promise((resolve, reject) => {
1933
- const messageHandler = (event) => {
1934
- const expectedOrigin = window.location.origin;
1935
- if (event.origin !== expectedOrigin) {
1936
- return;
1935
+ let broadcastChannel = null;
1936
+ const complete = (data) => {
1937
+ const payload = parseOAuthCompletionPayload(data, startedAt);
1938
+ if (!payload) return;
1939
+ cleanup();
1940
+ if (payload.status === "success") {
1941
+ resolve();
1942
+ } else {
1943
+ reject(new Error(payload.error || "oauth_failed"));
1937
1944
  }
1938
- if (event.data.type === "oauth-complete") {
1939
- cleanup();
1940
- if (event.data.status === "success") {
1941
- resolve();
1942
- } else {
1943
- reject(new Error(event.data.error || "oauth_failed"));
1944
- }
1945
+ };
1946
+ const messageHandler = (event) => {
1947
+ if (!isTrustedCallbackOrigin(event.origin)) return;
1948
+ complete(event.data);
1949
+ };
1950
+ const storageHandler = (event) => {
1951
+ if (event.key !== OAUTH_COMPLETION_STORAGE_KEY || !event.newValue) return;
1952
+ try {
1953
+ complete(JSON.parse(event.newValue));
1954
+ } catch {
1945
1955
  }
1946
1956
  };
1947
- window.addEventListener("message", messageHandler);
1948
- const checkClosed = setInterval(() => {
1957
+ const rejectIfPopupClosed = () => {
1949
1958
  if (popup.closed) {
1950
1959
  cleanup();
1951
- reject(new Error("cancelled"));
1960
+ reject(new Error("popup_closed"));
1952
1961
  }
1953
- }, OAUTH_POPUP_CHECK_INTERVAL);
1962
+ };
1963
+ window.addEventListener("message", messageHandler);
1964
+ window.addEventListener("storage", storageHandler);
1965
+ window.addEventListener("focus", rejectIfPopupClosed);
1966
+ if ("BroadcastChannel" in window) {
1967
+ broadcastChannel = new BroadcastChannel(OAUTH_COMPLETION_CHANNEL);
1968
+ broadcastChannel.onmessage = (event) => complete(event.data);
1969
+ }
1954
1970
  const timeout = setTimeout(() => {
1955
1971
  cleanup();
1956
- popup.close();
1957
1972
  reject(new Error("timeout"));
1958
1973
  }, OAUTH_FLOW_TIMEOUT);
1959
1974
  const cleanup = () => {
1960
- clearInterval(checkClosed);
1961
1975
  clearTimeout(timeout);
1976
+ broadcastChannel?.close();
1977
+ window.removeEventListener("focus", rejectIfPopupClosed);
1978
+ window.removeEventListener("storage", storageHandler);
1962
1979
  window.removeEventListener("message", messageHandler);
1963
1980
  };
1964
1981
  });
1965
1982
  };
1966
1983
  return { authorize, isAuthorizing, error };
1967
1984
  }
1985
+ function parseOAuthCompletionPayload(data, startedAt) {
1986
+ if (!data || typeof data !== "object") return null;
1987
+ const payload = data;
1988
+ if (payload.type !== "oauth-complete") return null;
1989
+ if (payload.completedAt && payload.completedAt < startedAt) return null;
1990
+ return payload;
1991
+ }
1992
+ function isTrustedCallbackOrigin(origin) {
1993
+ if (origin === window.location.origin || origin === "https://app.elevasis.io") {
1994
+ return true;
1995
+ }
1996
+ try {
1997
+ const url = new URL(origin);
1998
+ return url.protocol === "http:" && ["localhost", "127.0.0.1", "[::1]"].includes(url.hostname);
1999
+ } catch {
2000
+ return false;
2001
+ }
2002
+ }
1968
2003
  function EditCredentialModal({ apiUrl, credential, onClose }) {
1969
2004
  const [credentialName, setCredentialName] = useState("");
1970
2005
  const [nameError, setNameError] = useState(null);
@@ -1,11 +1,11 @@
1
1
  import { ChatHeader, ChatSidebar } from './chunk-ROSMICXG.js';
2
- import { getOrganizationGraphLensConfig, useOrganizationGraphFilters, createOrganizationGraphFilters, buildOrganizationGraph, filterOrganizationGraph, getCommandViewVisibilityProjection, resolveOrganizationGraphPathTrace, getCommandViewOperationalOverview, getCommandViewSelectionOperationalSummary, buildCommandViewDrillDownSections, expandAroundGraph, getConnectedHiddenResourceIds, FilterPanel, OrganizationGraphDetailPanel, ExpandAroundPanel, CommandViewSidebarContent, getOrganizationGraphTraceNodeOptions, formatOrganizationGraphTraceNodeOptionLabel } from './chunk-PBNIW7KV.js';
2
+ import { getOrganizationGraphLensConfig, useOrganizationGraphFilters, createOrganizationGraphFilters, buildOrganizationGraph, filterOrganizationGraph, getCommandViewVisibilityProjection, resolveOrganizationGraphPathTrace, getCommandViewOperationalOverview, getCommandViewSelectionOperationalSummary, buildCommandViewDrillDownSections, expandAroundGraph, getConnectedHiddenResourceIds, FilterPanel, OrganizationGraphDetailPanel, ExpandAroundPanel, CommandViewSidebarContent, getOrganizationGraphTraceNodeOptions, formatOrganizationGraphTraceNodeOptionLabel } from './chunk-3DUOPXOJ.js';
3
3
  import { SubshellLoader } from './chunk-JDNEWB5F.js';
4
4
  import { resolveSemanticIconComponent } from './chunk-JCGD4GM6.js';
5
5
  import { SubshellSidebarLoader } from './chunk-XQQEKWTL.js';
6
- import { BaseNode, useGraphTheme, BaseEdge, ExecutionStats, UnifiedWorkflowGraph, WorkflowExecutionTimeline, AgentExecutionVisualizer, AgentExecutionTimeline, GraphBackground, GraphFitViewButton, GraphFitViewHandler } from './chunk-K4Q5QUHZ.js';
6
+ import { BaseNode, useGraphTheme, BaseEdge, ExecutionStats, UnifiedWorkflowGraph, WorkflowExecutionTimeline, AgentExecutionVisualizer, AgentExecutionTimeline, GraphBackground, GraphFitViewButton, GraphFitViewHandler } from './chunk-QNL7UI5G.js';
7
7
  import { FormFieldRenderer } from './chunk-3MEXPLWT.js';
8
- import { ResourceHealthPanel } from './chunk-3HCTCMAS.js';
8
+ import { ResourceHealthPanel } from './chunk-OHGNCWJP.js';
9
9
  import { useCyberColors, CyberDonut } from './chunk-CW3UNAF2.js';
10
10
  import { AppShellLoader } from './chunk-RYTEQBAO.js';
11
11
  import { PageContainer } from './chunk-BZZCNLT6.js';
@@ -13,10 +13,10 @@ import { SubshellSidebarSection } from './chunk-IIMU5YAJ.js';
13
13
  import { CustomModal, ConfirmationModal } from './chunk-KVJ3LFH2.js';
14
14
  import { useGraphHighlighting, calculateGraphHeight, Graph_module_css_default, GRAPH_CONSTANTS } from './chunk-22UVE3RA.js';
15
15
  import { getResourceStatusColor, useTimelineData, useAgentIterationData, getStatusIcon } from './chunk-E4WQGJNS.js';
16
- import { useErrorDetail, useExecution, useArchivedLogs, useDeleteExecution, useRetryExecution, useCancelExecution, useCommandQueueTotals, useStatusFilter, useResourceSearch, useResourcesDomainFilters, usePaginationState, useResources, useRecentExecutionsByResource, filterByDomainFilters, collectResourceFilterFacets, useResourceDefinition, isSessionCapable, useDeleteTask, useCommandQueue, useSubmitAction, useCommandViewData, useCommandViewStats, useCommandViewStore, useResourceExecutions, useCheckpointTasks, COMMAND_VIEW_VISUALIZATION_MODES, useExecutionPanelState, useDeleteSession, useCreateSession, useSessions, useSessionExecutions, useSession, useBulkDeleteExecutions, getCommandViewGraphPositions } from './chunk-N63RKL3L.js';
17
- import { showApiErrorNotification, showSuccessNotification } from './chunk-MZCDRBSI.js';
16
+ import { useErrorDetail, useExecution, useArchivedLogs, useDeleteExecution, useRetryExecution, useCancelExecution, useCommandQueueTotals, useStatusFilter, useResourceSearch, useResourcesDomainFilters, usePaginationState, useResources, useRecentExecutionsByResource, filterByDomainFilters, collectResourceFilterFacets, useResourceDefinition, isSessionCapable, useDeleteTask, useCommandQueue, useSubmitAction, useCommandViewData, useCommandViewStats, useCommandViewStore, useResourceExecutions, useCheckpointTasks, COMMAND_VIEW_VISUALIZATION_MODES, useExecutionPanelState, useDeleteSession, useCreateSession, useSessions, useSessionExecutions, useSession, useBulkDeleteExecutions, getCommandViewGraphPositions } from './chunk-HNFQCOD2.js';
17
+ import { showApiErrorNotification, showSuccessNotification } from './chunk-CEHUFNAL.js';
18
18
  import { useMergedExecution } from './chunk-3ZMAGTWF.js';
19
- import { JsonViewer, CardHeader, PageTitleCaption, CollapsibleSection, TabCountBadge, ResourceCard, ContextViewer, EmptyState, APIErrorAlert } from './chunk-GJXAAYZ3.js';
19
+ import { JsonViewer, CardHeader, PageTitleCaption, CollapsibleSection, TabCountBadge, ResourceCard, ContextViewer, EmptyState, APIErrorAlert } from './chunk-6WXDE5LZ.js';
20
20
  import { StyledMarkdown } from './chunk-3KMDHCAR.js';
21
21
  import { useOptionalElevasisFeatures, useElevasisFeatures } from './chunk-V3HUIZJX.js';
22
22
  import { SubshellContentContainer } from './chunk-TKAYX2SP.js';
@@ -24,7 +24,7 @@ import { NavigationButton } from './chunk-NYBEU5TE.js';
24
24
  import { useRouterContext } from './chunk-Q7DJKLEN.js';
25
25
  import { useAppearance } from './chunk-E565XMTQ.js';
26
26
  import { topbarHeight } from './chunk-DT3QYZVU.js';
27
- import { getErrorInfo, formatErrorMessage, getResourceIcon, formatRelativeTime, PAGE_SIZE_DEFAULT, debounce } from './chunk-SRNIHB7Y.js';
27
+ import { getErrorInfo, formatErrorMessage, getResourceIcon, formatRelativeTime, PAGE_SIZE_DEFAULT, debounce } from './chunk-HXZQWMKE.js';
28
28
  import { ResourceStatusColors, toWorkflowLogMessages } from './chunk-KRWALB24.js';
29
29
  import { useInitialization } from './chunk-WKJ47GIW.js';
30
30
  import { useOrganization } from './chunk-DD3CCMCZ.js';
@@ -3826,6 +3826,7 @@ function getNodeThemeByKind(tokens) {
3826
3826
  surface: mixColors(tokens.primary, tokens.success, 0.48),
3827
3827
  entity: mixColors(tokens.primary, tokens.error, 0.4),
3828
3828
  capability: mixColors(tokens.primary, tokens.success, 0.72),
3829
+ stage: mixColors(tokens.primary, tokens.warning, 0.32),
3829
3830
  resource: mixColors(tokens.primary, tokens.warning, 0.58),
3830
3831
  knowledge: mixColors(tokens.primary, tokens.text, 0.6)
3831
3832
  };
@@ -1,4 +1,4 @@
1
- import { getErrorInfo, formatErrorMessage, getErrorTitle } from './chunk-SRNIHB7Y.js';
1
+ import { getErrorInfo, formatErrorMessage, getErrorTitle } from './chunk-HXZQWMKE.js';
2
2
  import { useElevasisServices } from './chunk-5WWZXCS5.js';
3
3
  import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query';
4
4
  import { notifications } from '@mantine/notifications';