@elevasis/ui 2.36.0 → 2.37.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 (92) hide show
  1. package/dist/api/index.js +4 -3
  2. package/dist/app/index.css +0 -384
  3. package/dist/app/index.d.ts +20 -0
  4. package/dist/app/index.js +21 -21
  5. package/dist/auth/index.d.ts +91 -28
  6. package/dist/auth/index.js +5 -1
  7. package/dist/charts/index.js +9 -3
  8. package/dist/chunk-5CTJ7TW2.js +111 -0
  9. package/dist/chunk-5EYJ2GIN.js +122 -0
  10. package/dist/{chunk-K4UZU3TU.js → chunk-6NREL3KL.js} +1 -1
  11. package/dist/chunk-6ROXVZ3L.js +9 -0
  12. package/dist/{chunk-YYX7OPZQ.js → chunk-73EWE2EW.js} +1 -1
  13. package/dist/{chunk-SIQ3P4OR.js → chunk-7GQFIWP4.js} +8 -756
  14. package/dist/chunk-A7IG36LB.js +215 -0
  15. package/dist/chunk-CLDCYJQT.js +1 -0
  16. package/dist/{chunk-AKW7KISS.js → chunk-CWYQRM5T.js} +2 -38
  17. package/dist/{chunk-LUYVRATI.js → chunk-DA6I5VEY.js} +5 -213
  18. package/dist/chunk-I53EX4VU.js +734 -0
  19. package/dist/chunk-IIMU5YAJ.js +53 -0
  20. package/dist/{chunk-VKIZUUPM.js → chunk-JPVZRZ3X.js} +31 -14
  21. package/dist/chunk-JXVNHVK7.js +79 -0
  22. package/dist/chunk-JZ2WID2G.js +337 -0
  23. package/dist/chunk-LCJQ6OWC.js +348 -0
  24. package/dist/chunk-LNC6PZAE.js +85 -0
  25. package/dist/{chunk-O2Q4VMRN.js → chunk-NWMPBG4U.js} +1 -1
  26. package/dist/chunk-NYNOMAAS.js +422 -0
  27. package/dist/chunk-S3KBYQTI.js +39 -0
  28. package/dist/chunk-S3XR4II4.js +30 -0
  29. package/dist/chunk-SHZT7ULK.js +425 -0
  30. package/dist/{chunk-F6EFC2MJ.js → chunk-T3NI7DOA.js} +291 -2044
  31. package/dist/{chunk-GX6XBRRF.js → chunk-TYRUKGGD.js} +2 -1
  32. package/dist/{chunk-R3VCBZDC.js → chunk-X4WBGKJQ.js} +3 -50
  33. package/dist/{chunk-GEFWMU26.js → chunk-X66MVMZT.js} +1 -9
  34. package/dist/{chunk-57OZ3AEG.js → chunk-Y3JQBSKQ.js} +1 -1
  35. package/dist/components/index.d.ts +29 -42
  36. package/dist/components/index.js +33 -19
  37. package/dist/components/navigation/index.js +3 -31
  38. package/dist/features/auth/index.d.ts +52 -99
  39. package/dist/features/auth/index.js +36 -99
  40. package/dist/features/clients/index.js +33 -19
  41. package/dist/features/crm/index.d.ts +20 -0
  42. package/dist/features/crm/index.js +33 -19
  43. package/dist/features/dashboard/index.js +33 -19
  44. package/dist/features/delivery/index.d.ts +20 -0
  45. package/dist/features/delivery/index.js +33 -19
  46. package/dist/features/knowledge/index.js +6 -30
  47. package/dist/features/lead-gen/index.d.ts +1088 -1
  48. package/dist/features/lead-gen/index.js +33 -19
  49. package/dist/features/monitoring/index.js +33 -19
  50. package/dist/features/monitoring/requests/index.js +33 -19
  51. package/dist/features/notes/index.d.ts +72 -0
  52. package/dist/features/notes/index.js +621 -0
  53. package/dist/features/operations/index.js +33 -19
  54. package/dist/features/right-panel-host/index.d.ts +214 -0
  55. package/dist/features/right-panel-host/index.js +640 -0
  56. package/dist/features/seo/index.js +3 -2
  57. package/dist/features/settings/index.d.ts +23 -35
  58. package/dist/features/settings/index.js +33 -19
  59. package/dist/hooks/access/index.d.ts +90 -0
  60. package/dist/hooks/access/index.js +10 -0
  61. package/dist/hooks/delivery/index.d.ts +20 -0
  62. package/dist/hooks/delivery/index.js +33 -19
  63. package/dist/hooks/index.d.ts +1599 -1651
  64. package/dist/hooks/index.js +33 -19
  65. package/dist/hooks/published.d.ts +1599 -1651
  66. package/dist/hooks/published.js +33 -19
  67. package/dist/hooks/user-notes/index.d.ts +57 -0
  68. package/dist/hooks/user-notes/index.js +3 -0
  69. package/dist/index.d.ts +239 -275
  70. package/dist/index.js +34 -20
  71. package/dist/initialization/index.d.ts +20 -19
  72. package/dist/knowledge/index.js +10 -7
  73. package/dist/layout/index.js +5 -3
  74. package/dist/organization/index.d.ts +0 -19
  75. package/dist/organization/index.js +33 -19
  76. package/dist/profile/index.d.ts +20 -0
  77. package/dist/provider/index.css +0 -384
  78. package/dist/provider/index.d.ts +20 -0
  79. package/dist/provider/index.js +15 -21
  80. package/dist/provider/published.css +0 -523
  81. package/dist/provider/published.d.ts +20 -0
  82. package/dist/provider/published.js +11 -21
  83. package/dist/supabase/index.d.ts +40 -0
  84. package/dist/test-utils/index.d.ts +2 -21
  85. package/dist/test-utils/index.js +5 -18
  86. package/dist/theme/index.js +2 -1
  87. package/dist/types/index.d.ts +70 -59
  88. package/dist/utils/index.js +2 -1
  89. package/package.json +19 -3
  90. package/src/auth/README.md +6 -6
  91. package/dist/components/navigation/index.css +0 -649
  92. package/dist/features/knowledge/index.css +0 -649
@@ -1,40 +1,47 @@
1
+ import { useAvailablePresets } from './chunk-S3KBYQTI.js';
2
+ import { useSupabase } from './chunk-BRXELOHC.js';
3
+ import { useBreadcrumbs } from './chunk-LNC6PZAE.js';
1
4
  import { ChatHeader, ChatSidebar } from './chunk-CXY7FMUM.js';
2
- import { observabilityKeys, useCyberColors, CardHeader, EmptyState, CyberLegendItem, CyberAreaChart, CenteredErrorState, StatsCardSkeleton, TrendIndicator, DetailCardSkeleton, FeatureUnavailableState, ElevasisLoader, GlowDot, JsonViewer, ListSkeleton, PageTitleCaption, StatCard, APIErrorAlert, CyberDonut, CollapsibleSection, ActivityTimeline, ContextViewer, StatusBadge, TabCountBadge, ResourceCard, HeroStatsRow, CostTrendChart, ActivityTrendChart } from './chunk-SIQ3P4OR.js';
5
+ import { observabilityKeys, useCyberColors, CyberLegendItem, CyberAreaChart, CyberDonut, HeroStatsRow, CostTrendChart, ActivityTrendChart } from './chunk-7GQFIWP4.js';
6
+ import { DEFAULT_ORGANIZATION_GRAPH_FILTERS, ORGANIZATION_GRAPH_NODE_KIND_ORDER, ORGANIZATION_GRAPH_NODE_KIND_LABELS, ORGANIZATION_GRAPH_EDGE_KIND_LABELS, ORGANIZATION_GRAPH_NODE_KIND_DETAIL_LABELS, ORGANIZATION_GRAPH_NODE_KIND_MEANINGS, ORGANIZATION_GRAPH_EDGE_KIND_MEANINGS } from './chunk-5EYJ2GIN.js';
7
+ import { AppShellLoader, SubshellSidebarLoader, PageContainer, SubshellLoader, AppShellCenteredContainer } from './chunk-DA6I5VEY.js';
8
+ import { SubshellNavItem } from './chunk-X4WBGKJQ.js';
9
+ import { SubshellSidebarSection } from './chunk-IIMU5YAJ.js';
10
+ import { Graph_module_css_default, useDirectedChainHighlighting, useNodeSelection, useFitViewTrigger, useGraphHighlighting, calculateGraphHeight, GRAPH_CONSTANTS } from './chunk-HENXLGVD.js';
11
+ import { STATUS_COLORS, getStatusIcon, formatDuration, getStatusColors, AGENT_CONSTANTS, shouldAnimateEdge, TIMELINE_CONSTANTS, calculateBarPosition, CONTAINER_CONSTANTS, useExecutionPath, useUnifiedWorkflowLayout, WORKFLOW_CONSTANTS, useReactFlowAgent, getResourceStatusColor, useMergedExecution, useTimelineData, useAgentIterationData } from './chunk-7FPLLSHN.js';
12
+ import { glassBase } from './chunk-CWYQRM5T.js';
13
+ import { useNotificationAdapter, useCrmActions, useListActions } from './chunk-JZ2WID2G.js';
14
+ import { EmptyState, CenteredErrorState, StatsCardSkeleton, TrendIndicator, DetailCardSkeleton, GlowDot, JsonViewer, ListSkeleton, PageTitleCaption, StatCard, APIErrorAlert, CollapsibleSection, ActivityTimeline, ContextViewer, StatusBadge, TabCountBadge, ResourceCard } from './chunk-I53EX4VU.js';
3
15
  import { StyledMarkdown } from './chunk-3KMDHCAR.js';
4
- import { glassBase, mantineThemeOverride, createCssVariablesResolver, PresetsProvider, useAvailablePresets } from './chunk-AKW7KISS.js';
5
- import { PRESETS, getPreset, generateShades } from './chunk-WF7CONXF.js';
6
- import { useSupabase } from './chunk-BRXELOHC.js';
7
- import { resolveOrganizationModel, OrgKnowledgeNodeSchema, defineResources, defineActions, defineTopology, topologyRef, listAllSystems, projectOrganizationSurfaces, topologyRelationship, PROJECTS_VIEW_ACTION_ID, resolveSemanticIconComponent, getAllBuildTemplates, getLeadGenStageCatalog, buildOrganizationGraph, getResourcesForSystem, devOnlyFor, requiresAdminFor, topLevel, parentOf, ancestorsOf, childrenOf, findById, findByPath, getSystem, SemanticIcon, defaultPathFor, getSortedSidebarEntries, compileOrganizationOntology, getSystemAncestors, getSemanticIconComponent } from './chunk-O2Q4VMRN.js';
8
- import { SubshellContainer, SubshellSidebar, SubshellRightSideContainer, AppearanceProvider, AppShellLoader, useAppearance, SubshellSidebarLoader, SubshellContentContainer, PageContainer, SubshellLoader, AppShellCenteredContainer } from './chunk-LUYVRATI.js';
9
- import { AppBackground } from './chunk-WLOQ4IBG.js';
10
- import { HTTP_HEADERS, ApiClientProvider, useApiClient } from './chunk-57OZ3AEG.js';
11
- import { SubshellSidebarSection, SubshellNavItem } from './chunk-R3VCBZDC.js';
16
+ import { CardHeader } from './chunk-S3XR4II4.js';
17
+ import { useAppearance, SubshellContentContainer } from './chunk-A7IG36LB.js';
18
+ import { HTTP_HEADERS } from './chunk-Y3JQBSKQ.js';
12
19
  import { topbarHeight } from './chunk-DT3QYZVU.js';
13
20
  import { useRouterContext } from './chunk-Q7DJKLEN.js';
14
- import { Graph_module_css_default, useDirectedChainHighlighting, useNodeSelection, useFitViewTrigger, useGraphHighlighting, calculateGraphHeight, GRAPH_CONSTANTS } from './chunk-HENXLGVD.js';
15
- import { STATUS_COLORS, getStatusIcon, formatDuration, getStatusColors, AGENT_CONSTANTS, shouldAnimateEdge, TIMELINE_CONSTANTS, calculateBarPosition, CONTAINER_CONSTANTS, useExecutionPath, useUnifiedWorkflowLayout, WORKFLOW_CONSTANTS, useReactFlowAgent, getResourceStatusColor, useMergedExecution, useTimelineData, useAgentIterationData } from './chunk-7FPLLSHN.js';
16
- import { ResourceTypeSchema, NonEmptyStringSchema, OriginResourceTypeSchema, UuidSchema, CredentialNameSchema, getErrorInfo, getErrorTitle, formatErrorMessage, STALE_TIME_DEFAULT, isAPIClientError, getTimeRangeDates, formatBucketTime, PAGE_SIZE_DEFAULT, REFETCH_INTERVAL_DASHBOARD, STALE_TIME_MONITORING, REFETCH_INTERVAL_RUNNING, WS_MAX_RETRIES_BEFORE_ERROR, WS_RECONNECT_BASE_DELAY, WS_RECONNECT_MAX_DELAY, STALE_TIME_ADMIN, APIClientError, GC_TIME_MEDIUM, GC_TIME_SHORT, formatDateTime, getResourceIcon, formatTimeAgo, formatDate, formatRelativeTime, debounce, OAUTH_FLOW_TIMEOUT } from './chunk-GEFWMU26.js';
21
+ import { ResourceTypeSchema, NonEmptyStringSchema, OriginResourceTypeSchema, UuidSchema, CredentialNameSchema, getErrorInfo, formatErrorMessage, getErrorTitle, isAPIClientError, getTimeRangeDates, formatBucketTime, PAGE_SIZE_DEFAULT, REFETCH_INTERVAL_DASHBOARD, REFETCH_INTERVAL_RUNNING, WS_MAX_RETRIES_BEFORE_ERROR, WS_RECONNECT_BASE_DELAY, WS_RECONNECT_MAX_DELAY, APIClientError, formatDateTime, getResourceIcon, formatTimeAgo, formatDate, formatRelativeTime, debounce, OAUTH_FLOW_TIMEOUT } from './chunk-X66MVMZT.js';
17
22
  import { ResourceStatusColors, toWorkflowLogMessages } from './chunk-KRWALB24.js';
18
- import { useStableAccessToken } from './chunk-VKIZUUPM.js';
19
- import { useInitialization, InitializationProvider } from './chunk-533DUEQY.js';
20
- import { OrganizationContext, useOrganization } from './chunk-DD3CCMCZ.js';
21
- import { useProfile, useUserProfile, ProfileProvider } from './chunk-2Q2JQSQO.js';
22
- import { useElevasisServices, ElevasisServiceProvider } from './chunk-KJ3QUBNU.js';
23
+ import { useStableAccessToken } from './chunk-JPVZRZ3X.js';
24
+ import { useAccess, AccessKeys } from './chunk-LCJQ6OWC.js';
25
+ import { useOptionalElevasisSystems, useElevasisSystems } from './chunk-NYNOMAAS.js';
26
+ import { useInitialization } from './chunk-533DUEQY.js';
27
+ import { OrgKnowledgeNodeSchema, defineResources, defineActions, defineTopology, topologyRef, resolveOrganizationModel, listAllSystems, projectOrganizationSurfaces, topologyRelationship, PROJECTS_VIEW_ACTION_ID, resolveSemanticIconComponent, getAllBuildTemplates, getLeadGenStageCatalog, buildOrganizationGraph, getResourcesForSystem, getSystem, SemanticIcon, compileOrganizationOntology, getSystemAncestors } from './chunk-NWMPBG4U.js';
28
+ import { useOrganization } from './chunk-DD3CCMCZ.js';
29
+ import { useUserProfile } from './chunk-2Q2JQSQO.js';
30
+ import { STALE_TIME_MONITORING, STALE_TIME_DEFAULT, STALE_TIME_ADMIN, GC_TIME_MEDIUM, GC_TIME_SHORT } from './chunk-6ROXVZ3L.js';
31
+ import { useElevasisServices } from './chunk-KJ3QUBNU.js';
23
32
  import { useAuthContext } from './chunk-BRJ3QZ4E.js';
24
- import { createContext, lazy, memo, useMemo, useState, useRef, useEffect, useCallback, createElement, useContext, cloneElement, useId, Fragment as Fragment$1, Component, useDeferredValue, useEffectEvent, Suspense } from 'react';
25
- import { useQueryClient, useQuery, useMutation, QueryClientProvider, useQueries, QueryClient } from '@tanstack/react-query';
26
- import { createUseExternalEvents, Paper, Stack, Text, Group, Badge, Box, useComputedColorScheme, Card, Title, Checkbox, Tooltip, Center, Modal, TextInput, Textarea, Loader, Alert, Button, Space, Table, Select, ActionIcon, SegmentedControl, NumberFormatter, Switch, Pagination, mergeThemeOverrides, MantineProvider, UnstyledButton, Divider, ScrollArea, Popover, Indicator, Collapse, ThemeIcon, SimpleGrid, Code, CopyButton, PasswordInput, Anchor, Menu, Timeline, useMantineTheme, RangeSlider, Progress, Tabs, Breadcrumbs as Breadcrumbs$1, NumberInput, ColorSwatch, RingProgress, Grid, LoadingOverlay, Accordion, MultiSelect, Radio, Pill, Drawer, Chip, JsonInput, TagsInput } from '@mantine/core';
27
- import { IconPlayerPlay, IconPlayerStop, IconArrowsSplit, IconSquare, IconBrain, IconFileText, IconLayoutGrid, IconColumns, IconFileInvoice, IconNotes, IconBriefcase, IconChecklist, IconFlag, IconList, IconBuilding, IconAddressBook, IconMail, IconSend, IconClock, IconArrowUp, IconMessageCircle, IconRocket, IconEye, IconEdit, IconAlertTriangle, IconRefresh, IconX, IconCheck, IconTarget, IconActivity, IconCode, IconSettings, IconLock, IconShieldOff, IconChevronUp, IconChevronDown, IconSelector, IconTrash, IconChartBar, IconCircleCheck, IconThumbDown, IconThumbUp, IconCircleX, IconSearch, IconFilterOff, IconArrowUpRight, IconAlertCircle, IconExternalLink, IconChartPie, IconHeartbeat, IconDownload, IconCpu, IconTrendingUp, IconCash, IconInfoCircle, IconExclamationCircle, IconBug, IconChecks, IconCircle, IconCircleFilled, IconBell, IconFocus2, IconChevronRight, IconTool, IconClockHour4, IconVersions, IconNetwork, IconSitemap, IconPencil, IconKey, IconCalendar, IconExclamationMark, IconShieldLock, IconCopy, IconPlus, IconPower, IconTag, IconUsers, IconWebhook, IconReload, IconTerminal2, IconMessage, IconArrowLeft, IconCalendarRepeat, IconCalendarEvent, IconCalendarTime, IconRobot, IconGitBranch, IconDotsVertical, IconPlayerPause, IconCalendarDue, IconCalendarStats, IconCalendarOff, IconListCheck, IconFilter, IconCategory, IconDatabase, IconTrophy, IconClockExclamation, IconUser, IconHistory, IconCurrencyDollar, IconTargetArrow, IconMessages, IconInbox, IconBolt, IconRestore, IconArrowRight, IconSparkles, IconListDetails, IconLayoutDashboard, IconBuildingFactory2, IconFileDescription, IconApps, IconRoute, IconHandStop, IconAdjustmentsHorizontal, IconCircleDashed, IconFolders, IconBraces, IconTopologyStar3, IconLayoutSidebarRightExpand, IconNote, IconArchive, IconTimeline, IconPalette, IconAdjustments, IconBrandDropbox, IconBrandGoogleDrive, IconPlug, IconMailForward, IconArrowDown, IconUserX, IconUserCheck, IconFileOff, IconCheckbox, IconPhone, IconActivityHeartbeat, IconClockPause, IconArrowsMaximize, IconShare2, IconFolder, IconScript, IconPlugConnected } from '@tabler/icons-react';
28
- import { z } from 'zod';
33
+ import { memo, useMemo, useRef, useEffect, cloneElement, useState, useCallback, useId, Fragment as Fragment$1, useDeferredValue, useEffectEvent } from 'react';
34
+ import { createUseExternalEvents, Paper, Stack, Text, Group, Badge, Box, useComputedColorScheme, Card, Title, Checkbox, Tooltip, Center, Modal, TextInput, Textarea, Loader, Alert, Button, Space, Table, Select, ActionIcon, SegmentedControl, NumberFormatter, Switch, Pagination, UnstyledButton, Divider, ScrollArea, Popover, Indicator, Collapse, ThemeIcon, SimpleGrid, Code, CopyButton, PasswordInput, Anchor, Menu, Timeline, useMantineTheme, RangeSlider, Progress, Tabs, Breadcrumbs as Breadcrumbs$1, NumberInput, ColorSwatch, RingProgress, Grid, LoadingOverlay, Accordion, MultiSelect, Radio, Pill, Drawer, Chip, JsonInput, TagsInput } from '@mantine/core';
35
+ import { IconPlayerPlay, IconPlayerStop, IconArrowsSplit, IconSquare, IconBrain, IconFileText, IconLayoutGrid, IconColumns, IconFileInvoice, IconNotes, IconBriefcase, IconChecklist, IconFlag, IconList, IconBuilding, IconAddressBook, IconMail, IconSend, IconClock, IconArrowUp, IconMessageCircle, IconRocket, IconEye, IconEdit, IconAlertTriangle, IconRefresh, IconX, IconCheck, IconTarget, IconActivity, IconCode, IconSettings, IconLock, IconShieldOff, IconChevronUp, IconChevronDown, IconSelector, IconTrash, IconChartBar, IconCircleCheck, IconThumbDown, IconThumbUp, IconCircleX, IconSearch, IconFilterOff, IconArrowUpRight, IconAlertCircle, IconExternalLink, IconChartPie, IconHeartbeat, IconDownload, IconCpu, IconTrendingUp, IconCash, IconInfoCircle, IconExclamationCircle, IconBug, IconChecks, IconCircle, IconCircleFilled, IconBell, IconFocus2, IconChevronRight, IconTool, IconClockHour4, IconVersions, IconNetwork, IconSitemap, IconPencil, IconKey, IconCalendar, IconExclamationMark, IconShieldLock, IconCopy, IconPlus, IconPower, IconTag, IconUsers, IconWebhook, IconReload, IconTerminal2, IconMessage, IconArrowLeft, IconCalendarRepeat, IconCalendarEvent, IconCalendarTime, IconRobot, IconGitBranch, IconDotsVertical, IconPlayerPause, IconCalendarDue, IconCalendarStats, IconCalendarOff, IconListCheck, IconFilter, IconCategory, IconDatabase, IconTrophy, IconClockExclamation, IconUser, IconHistory, IconCurrencyDollar, IconTargetArrow, IconMessages, IconInbox, IconBolt, IconRestore, IconArrowRight, IconSparkles, IconListDetails, IconLayoutDashboard, IconBuildingFactory2, IconFileDescription, IconApps, IconRoute, IconHandStop, IconAdjustmentsHorizontal, IconCircleDashed, IconFolders, IconBraces, IconTopologyStar3, IconLayoutSidebarRightExpand, IconNote, IconArchive, IconTimeline, IconPalette, IconBrandDropbox, IconBrandGoogleDrive, IconPlug, IconMailForward, IconArrowDown, IconUserX, IconUserCheck, IconFileOff, IconCheckbox, IconPhone, IconActivityHeartbeat, IconClockPause, IconArrowsMaximize, IconShare2, IconFolder, IconScript, IconPlugConnected } from '@tabler/icons-react';
29
36
  import * as runtime from 'react/jsx-runtime';
30
37
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
31
38
  import { useForm } from '@mantine/form';
39
+ import { z } from 'zod';
32
40
  import { useDisclosure, useClipboard, randomId } from '@mantine/hooks';
33
41
  import { notifications } from '@mantine/notifications';
42
+ import { useQueryClient, useMutation, useQuery, useQueries } from '@tanstack/react-query';
34
43
  import { AreaChart } from '@mantine/charts';
35
44
  import { formatDistanceToNow } from 'date-fns';
36
- import '@mantine/core/styles.css';
37
- import '@mantine/notifications/styles.css';
38
45
  import { useNavigate, useSearch, Link as Link$1 } from '@tanstack/react-router';
39
46
  import { create } from 'zustand';
40
47
  import { persist } from 'zustand/middleware';
@@ -52,229 +59,110 @@ import '@mantine/charts/styles.css';
52
59
  import cytoscape from 'cytoscape';
53
60
  import { useAuth } from '@workos-inc/authkit-react';
54
61
 
55
- function OrganizationProvider({ apiRequest, children }) {
56
- const { user, organizationId: workosOrgId } = useAuthContext();
57
- const { profile, error: profileError } = useProfile();
58
- const queryClient = useQueryClient();
59
- const [memberships, setMemberships] = useState([]);
60
- const [currentWorkOSOrganizationId, setCurrentWorkOSOrganizationId] = useState(null);
61
- const [currentSupabaseOrganizationId, setCurrentSupabaseOrganizationId] = useState(null);
62
- const [currentMembership, setCurrentMembership] = useState(null);
63
- const [isInitializing, setIsInitializing] = useState(true);
64
- const [isOrgRefreshing, setIsOrgRefreshing] = useState(false);
65
- const [error, setError] = useState(null);
66
- const hasInitializedRef = useRef(false);
67
- const [profileLoaded, setProfileLoaded] = useState(false);
68
- useEffect(() => {
69
- if (profile !== void 0 && profile !== null) {
70
- setProfileLoaded(true);
71
- }
72
- }, [profile]);
73
- useEffect(() => {
74
- if (profileError && isInitializing && !hasInitializedRef.current) {
75
- setIsInitializing(false);
76
- }
77
- }, [profileError, isInitializing]);
78
- useEffect(() => {
79
- if (!user) {
80
- setMemberships([]);
81
- setCurrentWorkOSOrganizationId(null);
82
- setCurrentSupabaseOrganizationId(null);
83
- setCurrentMembership(null);
84
- setIsInitializing(false);
85
- setIsOrgRefreshing(false);
86
- setError(null);
87
- hasInitializedRef.current = false;
88
- setProfileLoaded(false);
62
+ function RoleBadge({ name, isSystem }) {
63
+ return /* @__PURE__ */ jsx(Badge, { color: isSystem ? "gray" : "primary", variant: "light", children: /* @__PURE__ */ jsxs(Group, { gap: 4, wrap: "nowrap", children: [
64
+ isSystem && /* @__PURE__ */ jsx(IconLock, { size: 10 }),
65
+ name
66
+ ] }) });
67
+ }
68
+ function groupByDomain(catalog) {
69
+ const groups = /* @__PURE__ */ new Map();
70
+ for (const row of catalog) {
71
+ const domain = row.key.split(".")[0] ?? row.key;
72
+ const existing = groups.get(domain);
73
+ if (existing) {
74
+ existing.push(row);
75
+ } else {
76
+ groups.set(domain, [row]);
89
77
  }
90
- }, [user]);
91
- const applyMembership = useCallback((membership) => {
92
- setCurrentMembership(membership);
93
- setCurrentSupabaseOrganizationId(membership?.organization?.id ?? null);
94
- setCurrentWorkOSOrganizationId(membership?.organization?.workos_org_id ?? null);
95
- }, []);
96
- const selectOrganization = useCallback(
97
- (data) => {
98
- let selected = null;
99
- if (profile?.last_visited_org) {
100
- selected = data.find((m) => m.organizationId === profile.last_visited_org) ?? null;
101
- }
102
- if (!selected && workosOrgId) {
103
- selected = data.find((m) => m.organization?.workos_org_id === workosOrgId) ?? null;
104
- }
105
- if (!selected && data.length > 0) {
106
- selected = data[0];
107
- }
108
- if (selected) {
109
- applyMembership(selected);
110
- }
111
- },
112
- [profile?.last_visited_org, workosOrgId, applyMembership]
113
- );
114
- const fetchAndInitialize = useCallback(async () => {
115
- if (!user?.id || !profileLoaded) return;
116
- setError(null);
117
- if (memberships.length === 0) {
118
- setIsInitializing(true);
78
+ }
79
+ return groups;
80
+ }
81
+ var DOMAIN_LABELS = {
82
+ org: "Organization",
83
+ members: "Members",
84
+ roles: "Roles",
85
+ secrets: "Secrets",
86
+ operations: "Operations",
87
+ work: "Work"
88
+ };
89
+ function domainLabel(domain) {
90
+ return DOMAIN_LABELS[domain] ?? domain.charAt(0).toUpperCase() + domain.slice(1);
91
+ }
92
+ function PermissionMatrix({ catalog, selectedKeys, onChange, systemLocked }) {
93
+ const groups = groupByDomain(catalog);
94
+ const isDisplayOnly = !onChange || systemLocked;
95
+ function handleToggle(key, checked) {
96
+ if (!onChange || systemLocked) return;
97
+ if (checked) {
98
+ onChange([...selectedKeys, key]);
119
99
  } else {
120
- setIsOrgRefreshing(true);
100
+ onChange(selectedKeys.filter((k) => k !== key));
121
101
  }
122
- try {
123
- const data = await apiRequest("/memberships/my-memberships");
124
- if (!Array.isArray(data)) {
125
- throw new Error("Invalid memberships response");
126
- }
127
- setMemberships(data);
128
- if (data.length === 0) {
129
- hasInitializedRef.current = true;
130
- return;
131
- }
132
- if (!currentWorkOSOrganizationId) {
133
- selectOrganization(data);
134
- } else {
135
- const stillPresent = data.find((m) => m.organization?.workos_org_id === currentWorkOSOrganizationId);
136
- if (!stillPresent) {
137
- applyMembership(data[0] ?? null);
138
- } else {
139
- applyMembership(stillPresent);
140
- }
102
+ }
103
+ return /* @__PURE__ */ jsx(Stack, { gap: "md", children: Array.from(groups.entries()).map(([domain, rows]) => /* @__PURE__ */ jsxs(Card, { withBorder: true, padding: "md", children: [
104
+ /* @__PURE__ */ jsx(Title, { order: 5, mb: "sm", style: { textTransform: "capitalize" }, children: domainLabel(domain) }),
105
+ /* @__PURE__ */ jsx(Stack, { gap: "xs", children: rows.map((row) => {
106
+ const isLocked = !row.isOrgGrantable;
107
+ const isChecked = selectedKeys.includes(row.key);
108
+ const isDisabled = isDisplayOnly || isLocked;
109
+ const checkbox = /* @__PURE__ */ jsx(
110
+ Checkbox,
111
+ {
112
+ checked: isChecked,
113
+ disabled: isDisabled,
114
+ onChange: (e) => handleToggle(row.key, e.currentTarget.checked),
115
+ label: /* @__PURE__ */ jsxs(Group, { gap: 6, wrap: "nowrap", children: [
116
+ /* @__PURE__ */ jsx(Text, { size: "sm", ff: "monospace", c: isLocked ? "var(--color-text-subtle)" : void 0, children: row.key }),
117
+ isLocked && /* @__PURE__ */ jsx(IconLock, { size: 14, style: { color: "var(--color-text-subtle)", flexShrink: 0 } }),
118
+ /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: row.description })
119
+ ] })
120
+ },
121
+ row.key
122
+ );
123
+ if (isLocked) {
124
+ return /* @__PURE__ */ jsx(Tooltip, { label: "Reserved for built-in roles", position: "right", children: /* @__PURE__ */ jsx("div", { children: checkbox }) }, row.key);
141
125
  }
142
- hasInitializedRef.current = true;
143
- } catch (err) {
144
- setError(err instanceof Error ? err.message : "Failed to load organizations");
145
- } finally {
146
- setIsInitializing(false);
147
- setIsOrgRefreshing(false);
148
- }
149
- }, [
150
- user?.id,
151
- profileLoaded,
152
- memberships.length,
153
- apiRequest,
154
- currentWorkOSOrganizationId,
155
- selectOrganization,
156
- applyMembership
157
- ]);
158
- useEffect(() => {
159
- if (!user?.id || !profileLoaded || hasInitializedRef.current) return;
160
- fetchAndInitialize();
161
- }, [user?.id, profileLoaded, fetchAndInitialize]);
162
- useEffect(() => {
163
- if (!hasInitializedRef.current) return;
164
- if (!workosOrgId) return;
165
- if (workosOrgId === currentWorkOSOrganizationId) return;
166
- const target = memberships.find((m) => m.organization?.workos_org_id === workosOrgId);
167
- if (!target) return;
168
- applyMembership(target);
169
- void queryClient.invalidateQueries();
170
- }, [workosOrgId, currentWorkOSOrganizationId, memberships, applyMembership, queryClient]);
171
- const switchOrganization = useCallback(
172
- (workosOrgId2) => {
173
- const target = memberships.find((m) => m.organization?.workos_org_id === workosOrgId2);
174
- if (!target) return;
175
- applyMembership(target);
176
- void queryClient.invalidateQueries();
177
- void apiRequest("/users/me", {
178
- method: "PATCH",
179
- headers: { "Content-Type": "application/json" },
180
- body: JSON.stringify({ last_visited_org: target.organizationId })
181
- }).catch((err) => {
182
- console.warn("Failed to persist last_visited_org preference:", err);
183
- });
184
- },
185
- [memberships, applyMembership, queryClient, apiRequest]
186
- );
187
- const retry = useCallback(async () => {
188
- hasInitializedRef.current = false;
189
- setError(null);
190
- await fetchAndInitialize();
191
- }, [fetchAndInitialize]);
192
- const value = {
193
- currentWorkOSOrganizationId,
194
- currentSupabaseOrganizationId,
195
- currentMembership,
196
- memberships,
197
- isInitializing,
198
- isOrgRefreshing,
199
- error,
200
- switchOrganization,
201
- retry
202
- };
203
- return createElement(OrganizationContext.Provider, { value }, children);
126
+ return checkbox;
127
+ }) })
128
+ ] }, domain)) });
204
129
  }
205
-
206
- // ../core/src/auth/multi-tenancy/permissions.ts
207
- var PERMISSIONS = {
208
- ORG_READ: "org.read",
209
- ORG_MANAGE: "org.manage",
210
- ORG_DELETE: "org.delete",
211
- MEMBERS_MANAGE: "members.manage",
212
- ROLES_MANAGE: "roles.manage",
213
- SECRETS_MANAGE: "secrets.manage",
214
- OPERATIONS_READ: "operations.read",
215
- OPERATIONS_MANAGE: "operations.manage",
216
- ACQUISITION_MANAGE: "acquisition.manage",
217
- PROJECTS_MANAGE: "projects.manage",
218
- CLIENTS_MANAGE: "clients.manage"
130
+ function NoAccessState() {
131
+ return /* @__PURE__ */ jsx(Center, { style: { flex: 1, minHeight: "100%", width: "100%", padding: 24 }, children: /* @__PURE__ */ jsxs(Stack, { align: "center", gap: "xs", style: { maxWidth: 480, textAlign: "center" }, children: [
132
+ /* @__PURE__ */ jsx(IconLock, { size: 44, stroke: 1.8, color: "var(--color-text-subtle)" }),
133
+ /* @__PURE__ */ jsx(Title, { order: 3, children: "Access restricted" }),
134
+ /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "You don't have permission to view this page. Contact an org admin if you need access." })
135
+ ] }) });
136
+ }
137
+ var [useModalsEvents, createEvent] = createUseExternalEvents("mantine-modals");
138
+ var openModal = (payload) => {
139
+ const id = payload.modalId || randomId();
140
+ createEvent("openModal")({ ...payload, modalId: id });
141
+ return id;
142
+ };
143
+ var openConfirmModal = (payload) => {
144
+ const id = payload.modalId || randomId();
145
+ createEvent("openConfirmModal")({ ...payload, modalId: id });
146
+ return id;
147
+ };
148
+ var openContextModal = (payload) => {
149
+ const id = payload.modalId || randomId();
150
+ createEvent("openContextModal")({ ...payload, modalId: id });
151
+ return id;
152
+ };
153
+ var closeModal = createEvent("closeModal");
154
+ var closeAllModals = createEvent("closeAllModals");
155
+ var updateModal = (payload) => createEvent("updateModal")(payload);
156
+ var updateContextModal = (payload) => createEvent("updateContextModal")(payload);
157
+ var modals = {
158
+ open: openModal,
159
+ close: closeModal,
160
+ closeAll: closeAllModals,
161
+ openConfirmModal,
162
+ openContextModal,
163
+ updateModal,
164
+ updateContextModal
219
165
  };
220
- var PERMISSION_CATALOG = [
221
- {
222
- key: "org.read",
223
- description: "Read organization profile and listings",
224
- isOrgGrantable: true
225
- },
226
- {
227
- key: "org.manage",
228
- description: "Update organization settings",
229
- isOrgGrantable: false
230
- },
231
- {
232
- key: "org.delete",
233
- description: "Delete the organization (owner-only)",
234
- isOrgGrantable: false
235
- },
236
- {
237
- key: "members.manage",
238
- description: "Invite, remove, and reassign roles for members",
239
- isOrgGrantable: false
240
- },
241
- {
242
- key: "roles.manage",
243
- description: "Grant or revoke privileged system roles (owner, admin) within the organization",
244
- isOrgGrantable: false
245
- },
246
- {
247
- key: "secrets.manage",
248
- description: "Create, update, and delete API keys and credentials",
249
- isOrgGrantable: false
250
- },
251
- {
252
- key: "operations.read",
253
- description: "View executions, sessions, schedules, and command queue",
254
- isOrgGrantable: true
255
- },
256
- {
257
- key: "operations.manage",
258
- description: "Run and modify executions, sessions, schedules, queue",
259
- isOrgGrantable: true
260
- },
261
- {
262
- key: "acquisition.manage",
263
- description: "Create, update, and delete acquisition records (acq_companies, acq_contacts, acq_deals, acq_lists*, acq_content*, acquisition storage files)",
264
- isOrgGrantable: false
265
- },
266
- {
267
- key: "projects.manage",
268
- description: "Create, update, and delete project records (prj_projects, prj_milestones, prj_tasks, prj_notes)",
269
- isOrgGrantable: false
270
- },
271
- {
272
- key: "clients.manage",
273
- description: "Create, update, and delete client hub records (clients, clt_* satellites)",
274
- isOrgGrantable: false
275
- }
276
- ];
277
- new Set(PERMISSION_CATALOG.map((p) => p.key));
278
166
 
279
167
  // ../core/src/auth/multi-tenancy/memberships/membership.ts
280
168
  function transformMembershipToTableRow(membership) {
@@ -905,146 +793,7 @@ var CredentialSchemas = {
905
793
  VerifyResponse: VerifyCredentialResponseSchema
906
794
  };
907
795
 
908
- // src/hooks/auth/useOrganizationPermissions.ts
909
- var ALL_PERMISSIONS = Object.values(PERMISSIONS);
910
- function useOrganizationPermissions() {
911
- const { apiRequest, workOSOrganizationId, isReady } = useElevasisServices();
912
- const { profile } = useInitialization();
913
- const isPlatformAdmin = profile?.is_platform_admin === true;
914
- const query = useQuery({
915
- queryKey: ["organization-permissions", workOSOrganizationId],
916
- queryFn: () => apiRequest(`/memberships/my-permissions/${workOSOrganizationId}`),
917
- enabled: isReady && !!workOSOrganizationId && !isPlatformAdmin,
918
- staleTime: STALE_TIME_DEFAULT
919
- });
920
- const permissions = useMemo(
921
- () => isPlatformAdmin ? ALL_PERMISSIONS : query.data?.permissions ?? [],
922
- [isPlatformAdmin, query.data?.permissions]
923
- );
924
- const hasPermission = useCallback(
925
- (key) => isPlatformAdmin ? true : permissions.includes(key),
926
- [isPlatformAdmin, permissions]
927
- );
928
- return {
929
- hasPermission,
930
- permissions,
931
- isPlatformAdmin,
932
- isReady: isPlatformAdmin ? isReady : !query.isPending && isReady
933
- };
934
- }
935
- function useHasPermission(key) {
936
- const { hasPermission } = useOrganizationPermissions();
937
- return hasPermission(key);
938
- }
939
- function Can({ permission, fallback = null, children }) {
940
- const { hasPermission, isReady } = useOrganizationPermissions();
941
- if (!isReady) return null;
942
- return hasPermission(permission) ? /* @__PURE__ */ jsx(Fragment, { children }) : /* @__PURE__ */ jsx(Fragment, { children: fallback });
943
- }
944
- function RoleBadge({ name, isSystem }) {
945
- return /* @__PURE__ */ jsx(Badge, { color: isSystem ? "gray" : "primary", variant: "light", children: /* @__PURE__ */ jsxs(Group, { gap: 4, wrap: "nowrap", children: [
946
- isSystem && /* @__PURE__ */ jsx(IconLock, { size: 10 }),
947
- name
948
- ] }) });
949
- }
950
- function groupByDomain(catalog) {
951
- const groups = /* @__PURE__ */ new Map();
952
- for (const row of catalog) {
953
- const domain = row.key.split(".")[0] ?? row.key;
954
- const existing = groups.get(domain);
955
- if (existing) {
956
- existing.push(row);
957
- } else {
958
- groups.set(domain, [row]);
959
- }
960
- }
961
- return groups;
962
- }
963
- var DOMAIN_LABELS = {
964
- org: "Organization",
965
- members: "Members",
966
- roles: "Roles",
967
- secrets: "Secrets",
968
- operations: "Operations",
969
- work: "Work"
970
- };
971
- function domainLabel(domain) {
972
- return DOMAIN_LABELS[domain] ?? domain.charAt(0).toUpperCase() + domain.slice(1);
973
- }
974
- function PermissionMatrix({ catalog, selectedKeys, onChange, systemLocked }) {
975
- const groups = groupByDomain(catalog);
976
- const isDisplayOnly = !onChange || systemLocked;
977
- function handleToggle(key, checked) {
978
- if (!onChange || systemLocked) return;
979
- if (checked) {
980
- onChange([...selectedKeys, key]);
981
- } else {
982
- onChange(selectedKeys.filter((k) => k !== key));
983
- }
984
- }
985
- return /* @__PURE__ */ jsx(Stack, { gap: "md", children: Array.from(groups.entries()).map(([domain, rows]) => /* @__PURE__ */ jsxs(Card, { withBorder: true, padding: "md", children: [
986
- /* @__PURE__ */ jsx(Title, { order: 5, mb: "sm", style: { textTransform: "capitalize" }, children: domainLabel(domain) }),
987
- /* @__PURE__ */ jsx(Stack, { gap: "xs", children: rows.map((row) => {
988
- const isLocked = !row.isOrgGrantable;
989
- const isChecked = selectedKeys.includes(row.key);
990
- const isDisabled = isDisplayOnly || isLocked;
991
- const checkbox = /* @__PURE__ */ jsx(
992
- Checkbox,
993
- {
994
- checked: isChecked,
995
- disabled: isDisabled,
996
- onChange: (e) => handleToggle(row.key, e.currentTarget.checked),
997
- label: /* @__PURE__ */ jsxs(Group, { gap: 6, wrap: "nowrap", children: [
998
- /* @__PURE__ */ jsx(Text, { size: "sm", ff: "monospace", c: isLocked ? "var(--color-text-subtle)" : void 0, children: row.key }),
999
- isLocked && /* @__PURE__ */ jsx(IconLock, { size: 14, style: { color: "var(--color-text-subtle)", flexShrink: 0 } }),
1000
- /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: row.description })
1001
- ] })
1002
- },
1003
- row.key
1004
- );
1005
- if (isLocked) {
1006
- return /* @__PURE__ */ jsx(Tooltip, { label: "Reserved for built-in roles", position: "right", children: /* @__PURE__ */ jsx("div", { children: checkbox }) }, row.key);
1007
- }
1008
- return checkbox;
1009
- }) })
1010
- ] }, domain)) });
1011
- }
1012
- function NoAccessState() {
1013
- return /* @__PURE__ */ jsx(Center, { style: { flex: 1, minHeight: "100%", width: "100%", padding: 24 }, children: /* @__PURE__ */ jsxs(Stack, { align: "center", gap: "xs", style: { maxWidth: 480, textAlign: "center" }, children: [
1014
- /* @__PURE__ */ jsx(IconLock, { size: 44, stroke: 1.8, color: "var(--color-text-subtle)" }),
1015
- /* @__PURE__ */ jsx(Title, { order: 3, children: "Access restricted" }),
1016
- /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "You don't have permission to view this page. Contact an org admin if you need access." })
1017
- ] }) });
1018
- }
1019
- var [useModalsEvents, createEvent] = createUseExternalEvents("mantine-modals");
1020
- var openModal = (payload) => {
1021
- const id = payload.modalId || randomId();
1022
- createEvent("openModal")({ ...payload, modalId: id });
1023
- return id;
1024
- };
1025
- var openConfirmModal = (payload) => {
1026
- const id = payload.modalId || randomId();
1027
- createEvent("openConfirmModal")({ ...payload, modalId: id });
1028
- return id;
1029
- };
1030
- var openContextModal = (payload) => {
1031
- const id = payload.modalId || randomId();
1032
- createEvent("openContextModal")({ ...payload, modalId: id });
1033
- return id;
1034
- };
1035
- var closeModal = createEvent("closeModal");
1036
- var closeAllModals = createEvent("closeAllModals");
1037
- var updateModal = (payload) => createEvent("updateModal")(payload);
1038
- var updateContextModal = (payload) => createEvent("updateContextModal")(payload);
1039
- var modals = {
1040
- open: openModal,
1041
- close: closeModal,
1042
- closeAll: closeAllModals,
1043
- openConfirmModal,
1044
- openContextModal,
1045
- updateModal,
1046
- updateContextModal
1047
- };
796
+ // src/components/notify.tsx
1048
797
  var showInfoNotification = (message) => {
1049
798
  notifications.show({
1050
799
  title: "Info",
@@ -1311,547 +1060,6 @@ function TabSection({ icon, title, description, rightSection, children }) {
1311
1060
  children
1312
1061
  ] });
1313
1062
  }
1314
- function createFeatureAccessHook({
1315
- useInitialization: useInitialization2,
1316
- useOrganization: useOrganization2
1317
- }) {
1318
- return function useFeatureAccess2() {
1319
- const { profile, organizationReady } = useInitialization2();
1320
- const { currentMembership } = useOrganization2();
1321
- const { orgConfig, membershipConfig } = useMemo(() => {
1322
- const organizationConfig = currentMembership?.organization?.config;
1323
- const memberConfig = currentMembership?.config;
1324
- return { orgConfig: organizationConfig, membershipConfig: memberConfig };
1325
- }, [currentMembership]);
1326
- const userConfig = profile?.config;
1327
- const checkFeature = useCallback(
1328
- (featureKey) => {
1329
- if (profile?.is_platform_admin) {
1330
- return { allowed: true, restrictedBy: null };
1331
- }
1332
- const membershipValue = membershipConfig?.features?.[featureKey];
1333
- if (membershipValue === false) return { allowed: false, restrictedBy: "membership" };
1334
- return { allowed: true, restrictedBy: null };
1335
- },
1336
- [profile?.is_platform_admin, membershipConfig]
1337
- );
1338
- const hasFeature = useCallback((featureKey) => checkFeature(featureKey).allowed, [checkFeature]);
1339
- return {
1340
- orgConfig,
1341
- membershipConfig,
1342
- userConfig,
1343
- hasFeature,
1344
- checkFeature,
1345
- isReady: organizationReady
1346
- };
1347
- };
1348
- }
1349
-
1350
- // src/provider/resolvers/RouteResolver.ts
1351
- function normalizeRoutePath(path) {
1352
- const trimmedPath = path.trim();
1353
- if (!trimmedPath || trimmedPath === "/") {
1354
- return "/";
1355
- }
1356
- return trimmedPath.replace(/\/+$/, "") || "/";
1357
- }
1358
- function isRouteMatch(currentPath, route) {
1359
- const normalizedCurrentPath = normalizeRoutePath(currentPath);
1360
- const normalizedRoute = normalizeRoutePath(route);
1361
- return normalizedCurrentPath === normalizedRoute || normalizedCurrentPath.startsWith(`${normalizedRoute}/`);
1362
- }
1363
-
1364
- // src/provider/resolvers/NavResolver.ts
1365
- function uniqueIds(ids) {
1366
- return ids ? [...new Set(ids)] : [];
1367
- }
1368
-
1369
- // src/provider/validateManifests.ts
1370
- function listSystemRefs(systems) {
1371
- const refs = [];
1372
- function walk(map, prefix = "") {
1373
- for (const [key, system] of Object.entries(map)) {
1374
- const path = prefix ? `${prefix}.${key}` : key;
1375
- refs.push(path, system.id);
1376
- const subsystems = system.subsystems;
1377
- if (subsystems) {
1378
- walk(subsystems, path);
1379
- }
1380
- }
1381
- }
1382
- walk(systems);
1383
- return refs;
1384
- }
1385
- function validateManifests(manifests, organizationModel2) {
1386
- if (!organizationModel2) {
1387
- return;
1388
- }
1389
- const validSystemIds = /* @__PURE__ */ new Set([
1390
- ...Object.keys(organizationModel2.systems ?? {}),
1391
- ...listSystemRefs(organizationModel2.systems ?? {})
1392
- ]);
1393
- const errors = [];
1394
- for (const manifest of manifests) {
1395
- const key = manifest.key;
1396
- const systemId = manifest.systemId;
1397
- if (!systemId) {
1398
- continue;
1399
- }
1400
- if (!validSystemIds.has(systemId)) {
1401
- errors.push(
1402
- `Manifest "${key}": systemId "${systemId}" is not a known system id. Valid values: ${[...validSystemIds].sort().join(", ")}`
1403
- );
1404
- }
1405
- }
1406
- if (errors.length > 0) {
1407
- throw new Error(
1408
- `System manifest validation failed with ${errors.length} error(s):
1409
- ` + errors.map((e, i) => ` ${i + 1}. ${e}`).join("\n")
1410
- );
1411
- }
1412
- }
1413
- var ElevasisSystemsContext = createContext(null);
1414
-
1415
- // src/provider/sidebarProjection.ts
1416
- function isLifecycleEnabled(system) {
1417
- if (system.enabled === false) return false;
1418
- return system.lifecycle !== "deprecated" && system.lifecycle !== "archived";
1419
- }
1420
- function isSystemAccessible(systemId, context) {
1421
- const system = context.shellModel.findById(systemId);
1422
- if (!system || !isLifecycleEnabled(system)) return false;
1423
- if (!context.isSystemEnabled(systemId)) return false;
1424
- if (context.shellModel.requiresAdminFor(systemId) && !context.isPlatformAdmin) return false;
1425
- if (context.shellModel.devOnlyFor(systemId) && !context.isDev) return false;
1426
- return true;
1427
- }
1428
- function isSurfaceAccessible(node, context) {
1429
- if (node.devOnly && !context.isDev) return false;
1430
- if (node.requiresAdmin && !context.isPlatformAdmin) return false;
1431
- const systemTargets = node.targets?.systems ?? [];
1432
- if (systemTargets.length === 0) return true;
1433
- return systemTargets.some((systemId) => isSystemAccessible(systemId, context));
1434
- }
1435
- function iconForNode(node, context) {
1436
- if (node.type === "surface") {
1437
- const targetIcon = node.targets?.systems?.map((systemId) => context.shellModel.findById(systemId)?.iconComponent).find(Boolean);
1438
- if (targetIcon) return targetIcon;
1439
- }
1440
- return getSemanticIconComponent(node.icon);
1441
- }
1442
- function activeMatchPathsForSurface(node, context) {
1443
- const targets = node.targets?.systems ?? [];
1444
- if (targets.length !== 1) return void 0;
1445
- const paths = context.shellModel.childrenOf(targets[0]).map((child) => child.path).filter((path) => Boolean(path && path !== node.path));
1446
- return paths.length > 0 ? [...new Set(paths)] : void 0;
1447
- }
1448
- function surfaceToLinkItem(node, context, siblings) {
1449
- if (!isSurfaceAccessible(node, context)) return void 0;
1450
- const siblingShadows = siblings.some((sibling) => sibling !== node && sibling.path.startsWith(`${node.path}/`));
1451
- const activeMatchPaths = activeMatchPathsForSurface(node, context);
1452
- return {
1453
- label: node.label,
1454
- link: node.path,
1455
- ...siblingShadows ? { exact: true } : {},
1456
- ...activeMatchPaths ? { activeMatchPaths } : {}
1457
- };
1458
- }
1459
- function projectNode(node, context) {
1460
- if (node.type === "surface") {
1461
- if (!isSurfaceAccessible(node, context)) return void 0;
1462
- return {
1463
- label: node.label,
1464
- icon: iconForNode(node, context),
1465
- link: node.path
1466
- };
1467
- }
1468
- const childEntries2 = getSortedSidebarEntries(node.children);
1469
- const childSurfaces = childEntries2.map(([, child]) => child).filter((child) => child.type === "surface");
1470
- const links = childEntries2.flatMap(([, child]) => {
1471
- if (child.type === "surface") {
1472
- const link = surfaceToLinkItem(child, context, childSurfaces);
1473
- return link ? [link] : [];
1474
- }
1475
- const nestedGroup = projectNode(child, context);
1476
- return nestedGroup?.link ? [
1477
- {
1478
- label: nestedGroup.label,
1479
- link: nestedGroup.link
1480
- }
1481
- ] : nestedGroup?.links ?? [];
1482
- });
1483
- if (links.length === 0) return void 0;
1484
- return {
1485
- label: node.label,
1486
- icon: iconForNode(node, context),
1487
- links
1488
- };
1489
- }
1490
- function projectSection(section, context) {
1491
- const entries = getSortedSidebarEntries(section);
1492
- return entries.flatMap(([, node]) => {
1493
- const group = projectNode(node, context);
1494
- return group ? [group] : [];
1495
- });
1496
- }
1497
- function projectSidebarLinks({
1498
- shellModel,
1499
- organizationModel: organizationModel2,
1500
- isSystemEnabled,
1501
- isPlatformAdmin = false,
1502
- isDev = false,
1503
- section
1504
- }) {
1505
- const context = {
1506
- shellModel,
1507
- isSystemEnabled,
1508
- isPlatformAdmin,
1509
- isDev
1510
- };
1511
- const sidebar = organizationModel2?.navigation.sidebar;
1512
- if (!sidebar) return [];
1513
- if (section) {
1514
- return projectSection(sidebar[section], context);
1515
- }
1516
- return [...projectSection(sidebar.primary, context), ...projectSection(sidebar.bottom, context)];
1517
- }
1518
- var useFeatureAccess = createFeatureAccessHook({
1519
- useInitialization,
1520
- useOrganization
1521
- });
1522
- function useElevasisSystems() {
1523
- const context = useContext(ElevasisSystemsContext);
1524
- if (!context) {
1525
- throw new Error(
1526
- "useElevasisSystems must be used within an ElevasisSystemsProvider. Wrap your app (or the relevant subtree) with <ElevasisSystemsProvider>."
1527
- );
1528
- }
1529
- return context;
1530
- }
1531
- function useOptionalElevasisSystems() {
1532
- return useContext(ElevasisSystemsContext);
1533
- }
1534
- function defaultSystems(organizationModel2) {
1535
- if (!organizationModel2) return [];
1536
- return listAllSystems(organizationModel2).map(({ path, system }) => ({ ...system, id: path }));
1537
- }
1538
- function systemPath(system) {
1539
- return system.ui?.path ?? system.path ?? defaultPathFor(system.id);
1540
- }
1541
- function systemLabel(system) {
1542
- return system.label ?? system.title ?? system.id;
1543
- }
1544
- function moduleSystemId(module) {
1545
- return module.systemId ?? module.key;
1546
- }
1547
- function isLifecycleEnabled2(system) {
1548
- if (system.enabled === false) return false;
1549
- return system.lifecycle !== "deprecated" && system.lifecycle !== "archived";
1550
- }
1551
- function isOrganizationModelSystemEnabled(organizationModel2, systemId) {
1552
- const system = defaultSystems(organizationModel2).find((candidate) => candidate.id === systemId);
1553
- return system ? isLifecycleEnabled2(system) : void 0;
1554
- }
1555
- function resolveSystemModules(systems, isSystemEnabled) {
1556
- return systems.map((system) => {
1557
- const systemId = system.systemId;
1558
- const accessKey = systemId ?? system.key;
1559
- return {
1560
- ...system,
1561
- systemId,
1562
- access: {
1563
- systemKey: system.key,
1564
- systemId,
1565
- enabled: isSystemEnabled(accessKey)
1566
- },
1567
- semantics: {
1568
- capabilityIds: uniqueIds(system.capabilityIds ?? [])
1569
- }
1570
- };
1571
- });
1572
- }
1573
- function buildShellSystems(organizationModel2, modules) {
1574
- const iconBySystemId = new Map(
1575
- modules.flatMap((module) => module.systemId ? [[moduleSystemId(module), module.icon]] : [])
1576
- );
1577
- return defaultSystems(organizationModel2).map((system) => ({
1578
- ...system,
1579
- label: systemLabel(system),
1580
- path: systemPath(system),
1581
- iconComponent: iconBySystemId.get(system.id)
1582
- }));
1583
- }
1584
- function createShellModel(systems) {
1585
- const systemsRecord = Object.fromEntries(systems.map((s) => [s.id, s]));
1586
- return {
1587
- systems,
1588
- findByPath: (path) => findByPath(systemsRecord, normalizeRoutePath(path)),
1589
- findById: (id) => findById(systemsRecord, id),
1590
- childrenOf: (id) => childrenOf(systemsRecord, id),
1591
- ancestorsOf: (id) => ancestorsOf(systemsRecord, id),
1592
- parentOf: (id) => parentOf(systemsRecord, id),
1593
- topLevel: () => topLevel(systemsRecord),
1594
- requiresAdminFor: (id) => requiresAdminFor(systemsRecord, id),
1595
- devOnlyFor: (id) => devOnlyFor(systemsRecord, id)
1596
- };
1597
- }
1598
- function resolveOrganizationGraphSystem(systems, shellModel) {
1599
- for (const system of systems) {
1600
- const graphBridge = system.organizationGraph;
1601
- if (!graphBridge) continue;
1602
- const systemId = graphBridge.systemId;
1603
- if (!systemId) continue;
1604
- const node = shellModel.findById(systemId);
1605
- return {
1606
- available: Boolean(node),
1607
- systemId,
1608
- systemPath: node ? systemPath(node) : void 0
1609
- };
1610
- }
1611
- return {
1612
- available: false
1613
- };
1614
- }
1615
- function findMatchingNode(shellModel, currentPath) {
1616
- const normalizedPath = normalizeRoutePath(currentPath);
1617
- const exact = shellModel.findByPath(normalizedPath);
1618
- if (exact) return exact;
1619
- return [...shellModel.systems].filter((system) => {
1620
- const path = normalizeRoutePath(systemPath(system));
1621
- return path !== "/" && isRouteMatch(normalizedPath, path);
1622
- }).sort((a, b) => systemPath(b).length - systemPath(a).length)[0];
1623
- }
1624
- function ownsNode(module, node) {
1625
- if (!node || !module.systemId) return false;
1626
- return node.id === module.systemId || node.id.startsWith(`${module.systemId}.`);
1627
- }
1628
- function ownsRoutePrefix(module, normalizedPath) {
1629
- return (module.routePrefixes ?? []).some((prefix) => isRouteMatch(normalizedPath, normalizeRoutePath(prefix)));
1630
- }
1631
- function resolveRoute(systems, shellModel, currentPath, disabledSubsectionPaths) {
1632
- const node = findMatchingNode(shellModel, currentPath);
1633
- const normalizedPath = normalizeRoutePath(currentPath);
1634
- if (disabledSubsectionPaths.some((disabledPath) => isRouteMatch(normalizedPath, disabledPath))) {
1635
- return {
1636
- status: "hidden",
1637
- path: currentPath,
1638
- node
1639
- };
1640
- }
1641
- const system = systems.find((candidate) => ownsNode(candidate, node)) ?? systems.filter((candidate) => ownsRoutePrefix(candidate, normalizedPath)).sort(
1642
- (a, b) => Math.max(...(b.routePrefixes ?? []).map((prefix) => prefix.length)) - Math.max(...(a.routePrefixes ?? []).map((prefix) => prefix.length))
1643
- )[0];
1644
- if (!system) {
1645
- return {
1646
- status: "unmatched",
1647
- path: currentPath,
1648
- node
1649
- };
1650
- }
1651
- return {
1652
- status: "matched",
1653
- path: currentPath,
1654
- system,
1655
- node
1656
- };
1657
- }
1658
- function ElevasisSystemsProvider({
1659
- systems,
1660
- organizationModel: organizationModel2,
1661
- timeRange,
1662
- operationsApiUrl,
1663
- operationsSSEManager,
1664
- deliveryApiUrl,
1665
- deliverySSEManager,
1666
- disabledSubsectionPaths = [],
1667
- children
1668
- }) {
1669
- const activeSystems = systems ?? [];
1670
- const resolvedOrganizationModel = useMemo(() => {
1671
- if (!organizationModel2) {
1672
- return void 0;
1673
- }
1674
- return {
1675
- ...organizationModel2,
1676
- knowledge: organizationModel2.knowledge ?? {}
1677
- };
1678
- }, [organizationModel2]);
1679
- useMemo(() => validateManifests(activeSystems, resolvedOrganizationModel), [activeSystems, resolvedOrganizationModel]);
1680
- const { hasFeature } = useFeatureAccess();
1681
- const hasResolvedSystem = useCallback(
1682
- (key) => {
1683
- if (!hasFeature(key)) {
1684
- return false;
1685
- }
1686
- const organizationModelSystemEnabled = isOrganizationModelSystemEnabled(resolvedOrganizationModel, key);
1687
- return organizationModelSystemEnabled ?? true;
1688
- },
1689
- [hasFeature, resolvedOrganizationModel]
1690
- );
1691
- const shellSystems = useMemo(
1692
- () => buildShellSystems(resolvedOrganizationModel, activeSystems),
1693
- [resolvedOrganizationModel, activeSystems]
1694
- );
1695
- const shellModel = useMemo(() => createShellModel(shellSystems), [shellSystems]);
1696
- const normalizedDisabledSubsectionPaths = useMemo(
1697
- () => [...new Set(disabledSubsectionPaths.map((path) => normalizeRoutePath(path)))],
1698
- [disabledSubsectionPaths]
1699
- );
1700
- const resolvedSystems = useMemo(
1701
- () => resolveSystemModules(activeSystems, hasResolvedSystem),
1702
- [activeSystems, hasResolvedSystem]
1703
- );
1704
- const enabledResolvedSystems = useMemo(
1705
- () => resolvedSystems.filter((system) => system.access.enabled),
1706
- [resolvedSystems]
1707
- );
1708
- const organizationGraph = useMemo(
1709
- () => resolveOrganizationGraphSystem(enabledResolvedSystems, shellModel),
1710
- [enabledResolvedSystems, shellModel]
1711
- );
1712
- const getResolvedSystem = useCallback(
1713
- (key) => resolvedSystems.find((system) => system.key === key),
1714
- [resolvedSystems]
1715
- );
1716
- const isSystemEnabled = useCallback((key) => hasResolvedSystem(key), [hasResolvedSystem]);
1717
- const getSidebarLinks = useCallback(
1718
- (options = {}) => projectSidebarLinks({
1719
- shellModel,
1720
- organizationModel: resolvedOrganizationModel,
1721
- isSystemEnabled,
1722
- ...options
1723
- }),
1724
- [shellModel, resolvedOrganizationModel, isSystemEnabled]
1725
- );
1726
- const resolveRouteByPath = useCallback(
1727
- (path) => resolveRoute(enabledResolvedSystems, shellModel, path, normalizedDisabledSubsectionPaths),
1728
- [enabledResolvedSystems, shellModel, normalizedDisabledSubsectionPaths]
1729
- );
1730
- const shellRuntime = useMemo(
1731
- () => ({
1732
- resolveRoute: resolveRouteByPath
1733
- }),
1734
- [resolveRouteByPath]
1735
- );
1736
- const value = useMemo(
1737
- () => ({
1738
- shellModel,
1739
- shellRuntime,
1740
- getSidebarLinks,
1741
- enabledResolvedSystems,
1742
- resolvedSystems,
1743
- organizationGraph,
1744
- organizationModel: resolvedOrganizationModel,
1745
- timeRange,
1746
- operationsApiUrl,
1747
- operationsSSEManager,
1748
- deliveryApiUrl,
1749
- deliverySSEManager,
1750
- disabledSubsectionPaths: normalizedDisabledSubsectionPaths,
1751
- isSystemEnabled,
1752
- getResolvedSystem
1753
- }),
1754
- [
1755
- shellModel,
1756
- shellRuntime,
1757
- enabledResolvedSystems,
1758
- resolvedSystems,
1759
- organizationGraph,
1760
- resolvedOrganizationModel,
1761
- timeRange,
1762
- operationsApiUrl,
1763
- operationsSSEManager,
1764
- deliveryApiUrl,
1765
- deliverySSEManager,
1766
- normalizedDisabledSubsectionPaths,
1767
- isSystemEnabled,
1768
- getResolvedSystem,
1769
- getSidebarLinks
1770
- ]
1771
- );
1772
- return /* @__PURE__ */ jsx(ElevasisSystemsContext.Provider, { value, children });
1773
- }
1774
-
1775
- // src/components/navigation/useBreadcrumbs.ts
1776
- var useBreadcrumbs = (options = {}) => {
1777
- const { currentPath } = useRouterContext();
1778
- const systemContext = useOptionalElevasisSystems();
1779
- const { labelsByPath = {} } = options;
1780
- return useMemo(() => {
1781
- const shellModel = systemContext?.shellModel;
1782
- const overriddenLabel = labelsByPath[currentPath];
1783
- if (overriddenLabel) {
1784
- return [{ label: overriddenLabel, isActive: true }];
1785
- }
1786
- if (shellModel) {
1787
- const matchedNode = shellModel.findByPath(currentPath);
1788
- if (matchedNode) {
1789
- return shellModel.ancestorsOf(matchedNode.id).map((node, index, items) => ({
1790
- label: labelsByPath[node.path ?? ""] ?? node.label,
1791
- path: index === items.length - 1 ? void 0 : node.path,
1792
- isActive: index === items.length - 1
1793
- }));
1794
- }
1795
- }
1796
- const segments = currentPath.split("/").filter(Boolean);
1797
- if (segments.length === 0) {
1798
- return [{ label: "Dashboard", isActive: true }];
1799
- }
1800
- const breadcrumbs = [{ label: "Dashboard", path: "/" }];
1801
- let currentSegmentPath = "";
1802
- for (let i = 0; i < segments.length; i++) {
1803
- currentSegmentPath += `/${segments[i]}`;
1804
- const isLast = i === segments.length - 1;
1805
- const label = labelsByPath[currentSegmentPath] ?? formatSegmentLabel(segments[i]);
1806
- breadcrumbs.push({
1807
- label,
1808
- path: isLast ? void 0 : currentSegmentPath,
1809
- isActive: isLast
1810
- });
1811
- }
1812
- return breadcrumbs;
1813
- }, [currentPath, systemContext, labelsByPath]);
1814
- };
1815
- function formatSegmentLabel(segment) {
1816
- const decodedSegment = safeDecodeURIComponent(segment);
1817
- const routeLabel = formatRouteIdLabel(decodedSegment);
1818
- if (routeLabel) return routeLabel;
1819
- return titleCaseSegment(decodedSegment);
1820
- }
1821
- function safeDecodeURIComponent(value) {
1822
- try {
1823
- return decodeURIComponent(value);
1824
- } catch {
1825
- return value;
1826
- }
1827
- }
1828
- function formatRouteIdLabel(segment) {
1829
- if (segment.startsWith("group:")) {
1830
- const groupKey = segment.slice("group:".length);
1831
- return groupKey === "graph" ? "Ontology" : titleCaseSegment(groupKey);
1832
- }
1833
- if (segment.startsWith("domain:")) {
1834
- return titleCaseSegment(segment.slice("domain:".length));
1835
- }
1836
- if (segment.startsWith("item:")) {
1837
- const rest = segment.slice("item:".length);
1838
- const separatorIndex = rest.indexOf(":");
1839
- const itemId = separatorIndex === -1 ? rest : rest.slice(separatorIndex + 1);
1840
- return formatOntologyOrIdLabel(itemId);
1841
- }
1842
- if (segment.startsWith("ontology:")) {
1843
- return formatOntologyOrIdLabel(segment);
1844
- }
1845
- return void 0;
1846
- }
1847
- function formatOntologyOrIdLabel(value) {
1848
- const localId = value.includes("/") ? value.slice(value.lastIndexOf("/") + 1) : value;
1849
- const suffix = localId.includes(":") ? localId.slice(localId.lastIndexOf(":") + 1) : localId;
1850
- return titleCaseSegment(suffix);
1851
- }
1852
- function titleCaseSegment(segment) {
1853
- return segment.split("-").flatMap((part) => part.split("_")).flatMap((part) => part.split(".")).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
1854
- }
1855
1063
  var ConfirmationModal = ({
1856
1064
  opened,
1857
1065
  onClose,
@@ -3718,269 +2926,6 @@ function useWorkflowExecution({ workflowId, listId }) {
3718
2926
  reset: mutation.reset
3719
2927
  };
3720
2928
  }
3721
- var consoleAdapter = {
3722
- success(title, message) {
3723
- console.log(`[Notification][Success] ${title}: ${message}`);
3724
- },
3725
- error(title, message) {
3726
- console.warn(`[Notification][Error] ${title}: ${message}`);
3727
- },
3728
- info(title, message) {
3729
- console.log(`[Notification][Info] ${title}: ${message}`);
3730
- },
3731
- warning(title, message) {
3732
- console.warn(`[Notification][Warning] ${title}: ${message}`);
3733
- },
3734
- apiError(error) {
3735
- const { message, code, requestId, fields, retryAfter } = getErrorInfo(error);
3736
- const title = getErrorTitle(code);
3737
- const formatted = formatErrorMessage(message, requestId, fields, retryAfter);
3738
- console.warn(`[Notification][API Error] ${title}: ${formatted}`);
3739
- }
3740
- };
3741
- var NotificationContext = createContext(consoleAdapter);
3742
- function NotificationProvider({ adapter, children }) {
3743
- return /* @__PURE__ */ jsx(NotificationContext.Provider, { value: adapter, children });
3744
- }
3745
- function useNotificationAdapter() {
3746
- return useContext(NotificationContext);
3747
- }
3748
- var CrmActionsContext = createContext([]);
3749
- function CrmActionsProvider({ actions, children }) {
3750
- return /* @__PURE__ */ jsx(CrmActionsContext.Provider, { value: actions, children });
3751
- }
3752
- function useCrmActions() {
3753
- return useContext(CrmActionsContext);
3754
- }
3755
- var EMPTY_LIST_ACTIONS = Object.freeze([]);
3756
- var ListActionsContext = createContext(EMPTY_LIST_ACTIONS);
3757
- function ListActionsProvider({
3758
- registry = EMPTY_LIST_ACTIONS,
3759
- children
3760
- }) {
3761
- return /* @__PURE__ */ jsx(ListActionsContext.Provider, { value: registry, children });
3762
- }
3763
- function useListActions() {
3764
- return useContext(ListActionsContext);
3765
- }
3766
- function findListActionByAction(registry, actionKey) {
3767
- return registry.find((action) => action.actionKey === actionKey);
3768
- }
3769
- function getListActionWorkflowId(action) {
3770
- return action.workflowId ?? action.resourceId;
3771
- }
3772
- var LazyCoreAuthKitInner = lazy(() => import('./CoreAuthKitInner-QC62UHTZ.js').then((m) => ({ default: m.CoreAuthKitInner })));
3773
- var defaultQueryClient = null;
3774
- function getDefaultQueryClient() {
3775
- if (!defaultQueryClient) {
3776
- defaultQueryClient = new QueryClient({
3777
- defaultOptions: { queries: { retry: 1 } }
3778
- });
3779
- }
3780
- return defaultQueryClient;
3781
- }
3782
- var consoleNotificationAdapter = {
3783
- success(title, message) {
3784
- console.log(`[Notification][Success] ${title}: ${message}`);
3785
- },
3786
- error(title, message) {
3787
- console.warn(`[Notification][Error] ${title}: ${message}`);
3788
- },
3789
- info(title, message) {
3790
- console.log(`[Notification][Info] ${title}: ${message}`);
3791
- },
3792
- warning(title, message) {
3793
- console.warn(`[Notification][Warning] ${title}: ${message}`);
3794
- },
3795
- apiError(error) {
3796
- console.warn(`[Notification][API Error]`, error);
3797
- }
3798
- };
3799
- function ElevasisCoreProvider({
3800
- auth,
3801
- queryClient,
3802
- apiUrl,
3803
- onError,
3804
- notifications: notifications17,
3805
- crmActions,
3806
- listActions,
3807
- children
3808
- }) {
3809
- if (auth.mode === "apiKey") {
3810
- throw new Error(
3811
- `ElevasisCoreProvider: auth mode 'apiKey' is not yet implemented. Only 'authkit' mode is supported.`
3812
- );
3813
- }
3814
- const resolvedQueryClient = queryClient ?? getDefaultQueryClient();
3815
- const resolvedCrmActions = crmActions ?? [];
3816
- const resolvedListActions = listActions ?? EMPTY_LIST_ACTIONS;
3817
- const content = apiUrl ? /* @__PURE__ */ jsx(ServiceStack, { apiUrl, onError, notifications: notifications17, children }) : children;
3818
- const AuthInner = /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(LazyCoreAuthKitInner, { auth, children: content }) });
3819
- return /* @__PURE__ */ jsx(QueryClientProvider, { client: resolvedQueryClient, children: /* @__PURE__ */ jsx(CrmActionsProvider, { actions: resolvedCrmActions, children: /* @__PURE__ */ jsx(ListActionsProvider, { registry: resolvedListActions, children: AuthInner }) }) });
3820
- }
3821
- function ServiceStack({
3822
- apiUrl,
3823
- onError,
3824
- notifications: notifications17,
3825
- children
3826
- }) {
3827
- const { getAccessToken } = useAuthContext();
3828
- const orgIdRef = useRef(null);
3829
- const getOrganizationId = useRef(() => orgIdRef.current).current;
3830
- return /* @__PURE__ */ jsx(
3831
- ApiClientProvider,
3832
- {
3833
- getAccessToken,
3834
- getOrganizationId,
3835
- isOrganizationReady: false,
3836
- onError,
3837
- children: /* @__PURE__ */ jsx(ServiceStackInner, { apiUrl, orgIdRef, notifications: notifications17, children })
3838
- }
3839
- );
3840
- }
3841
- function ServiceStackInner({
3842
- apiUrl,
3843
- orgIdRef,
3844
- notifications: notifications17,
3845
- children
3846
- }) {
3847
- const { apiRequest } = useApiClient(apiUrl);
3848
- const resolvedNotifications = notifications17 ?? consoleNotificationAdapter;
3849
- return /* @__PURE__ */ jsx(ProfileProvider, { apiRequest, children: /* @__PURE__ */ jsx(OrganizationProvider, { apiRequest, children: /* @__PURE__ */ jsx(OrgServiceBridge, { orgIdRef, apiRequest, notifications: resolvedNotifications, children }) }) });
3850
- }
3851
- function OrgServiceBridge({
3852
- orgIdRef,
3853
- apiRequest,
3854
- notifications: notifications17,
3855
- children
3856
- }) {
3857
- const { currentWorkOSOrganizationId, isInitializing, isOrgRefreshing } = useOrganization();
3858
- orgIdRef.current = currentWorkOSOrganizationId;
3859
- const isReady = !!currentWorkOSOrganizationId && !isInitializing && !isOrgRefreshing;
3860
- return /* @__PURE__ */ jsx(
3861
- ElevasisServiceProvider,
3862
- {
3863
- apiRequest,
3864
- workOSOrganizationId: currentWorkOSOrganizationId,
3865
- isReady,
3866
- children: /* @__PURE__ */ jsx(NotificationProvider, { adapter: notifications17, children: /* @__PURE__ */ jsx(InitializationProvider, { children }) })
3867
- }
3868
- );
3869
- }
3870
- var EMPTY_CANONICAL_MODEL = resolveOrganizationModel(void 0, { mergeDefaults: false });
3871
- function useResolvedOrganizationModel() {
3872
- const { organizationModel: organizationModel2 } = useElevasisSystems();
3873
- return useMemo(() => organizationModel2 ?? EMPTY_CANONICAL_MODEL, [organizationModel2]);
3874
- }
3875
- var defaultSystemSidebarWidth = 250;
3876
- function SystemShell({ children }) {
3877
- const { shellRuntime } = useElevasisSystems();
3878
- const { currentPath } = useRouterContext();
3879
- const routeMatch = shellRuntime.resolveRoute(currentPath);
3880
- if (routeMatch.status === "hidden") {
3881
- return /* @__PURE__ */ jsx(FeatureUnavailableState, { path: currentPath });
3882
- }
3883
- if (routeMatch.status !== "matched" || !routeMatch.system?.sidebar) {
3884
- return /* @__PURE__ */ jsx(Fragment, { children });
3885
- }
3886
- const SidebarComponent = routeMatch.system.sidebar;
3887
- const sidebarWidth = typeof routeMatch.system.sidebarWidth === "function" ? routeMatch.system.sidebarWidth({ currentPath }) : routeMatch.system.sidebarWidth ?? defaultSystemSidebarWidth;
3888
- if (sidebarWidth === 0) {
3889
- return /* @__PURE__ */ jsx(Fragment, { children });
3890
- }
3891
- return /* @__PURE__ */ jsxs(SubshellContainer, { children: [
3892
- /* @__PURE__ */ jsx(SubshellSidebar, { width: sidebarWidth, children: /* @__PURE__ */ jsx(SidebarComponent, {}) }),
3893
- /* @__PURE__ */ jsx(SubshellRightSideContainer, { children })
3894
- ] });
3895
- }
3896
- var mantineAdapter = {
3897
- success(title, message) {
3898
- notifications.show({ title, message, autoClose: 5e3, color: "green", position: "top-right" });
3899
- },
3900
- error(title, message) {
3901
- notifications.show({ title, message, autoClose: 5e3, color: "red", position: "top-right" });
3902
- },
3903
- info(title, message) {
3904
- notifications.show({ title, message, autoClose: 5e3, color: "blue", position: "top-right" });
3905
- },
3906
- warning(title, message) {
3907
- notifications.show({ title, message, autoClose: 5e3, color: "orange", position: "top-right" });
3908
- },
3909
- apiError(error) {
3910
- const { message, code, requestId, fields, retryAfter } = getErrorInfo(error);
3911
- const hasFields = fields && Object.keys(fields).length > 0;
3912
- notifications.show({
3913
- title: getErrorTitle(code),
3914
- message: formatErrorMessage(message, requestId, fields, retryAfter),
3915
- autoClose: retryAfter ? retryAfter * 1e3 : hasFields ? 8e3 : 5e3,
3916
- color: "red",
3917
- position: "top-right"
3918
- });
3919
- }
3920
- };
3921
- function ElevasisUIProvider({ theme, children, ...coreProps }) {
3922
- const resolvedColorScheme = theme?.colorScheme ?? "dark";
3923
- const activePresets = theme?.presets ?? PRESETS;
3924
- const preset = useMemo(() => getPreset(theme?.preset ?? "default", theme?.presets), [theme?.preset, theme?.presets]);
3925
- const resolvedAppearance = {
3926
- background: theme?.background ?? preset.background ?? /* @__PURE__ */ jsx(AppBackground, {}),
3927
- loader: theme?.loader ?? preset.loader ?? /* @__PURE__ */ jsx(Loader, { size: "xl", loaders: { elevasis: ElevasisLoader }, type: "elevasis" })
3928
- };
3929
- useEffect(() => {
3930
- if (!preset.fontImports?.length) return;
3931
- const links = [];
3932
- for (const href of preset.fontImports) {
3933
- if (document.querySelector(`link[href="${href}"]`)) continue;
3934
- const link = document.createElement("link");
3935
- link.rel = "stylesheet";
3936
- link.href = href;
3937
- document.head.appendChild(link);
3938
- links.push(link);
3939
- }
3940
- const subtitleFont = preset.subtitleFontFamily ?? preset.framework?.headings?.fontFamily ?? preset.framework?.fontFamily ?? "";
3941
- document.documentElement.style.setProperty("--elevasis-font-family-subtitle", subtitleFont);
3942
- return () => {
3943
- links.forEach((l) => l.remove());
3944
- document.documentElement.style.removeProperty("--elevasis-font-family-subtitle");
3945
- };
3946
- }, [
3947
- preset.fontImports,
3948
- preset.subtitleFontFamily,
3949
- preset.framework?.headings?.fontFamily,
3950
- preset.framework?.fontFamily
3951
- ]);
3952
- const resolvedTheme = useMemo(() => {
3953
- const primaryHex = theme?.tokens?.primary ?? preset.dark.primary;
3954
- const primaryOverride = {
3955
- primaryColor: "primary",
3956
- colors: { primary: generateShades(primaryHex) }
3957
- };
3958
- let base = mergeThemeOverrides(mantineThemeOverride, primaryOverride);
3959
- if (preset.framework) base = mergeThemeOverrides(base, preset.framework);
3960
- return theme?.mantine ? mergeThemeOverrides(base, theme.mantine) : base;
3961
- }, [theme?.mantine, preset, theme?.tokens?.primary]);
3962
- const cssVariablesResolver = useMemo(
3963
- () => createCssVariablesResolver(theme?.tokens, theme?.preset, theme?.presets),
3964
- [theme?.tokens, theme?.preset, theme?.presets]
3965
- );
3966
- return /* @__PURE__ */ jsx(
3967
- MantineProvider,
3968
- {
3969
- theme: resolvedTheme,
3970
- defaultColorScheme: resolvedColorScheme,
3971
- cssVariablesResolver,
3972
- children: /* @__PURE__ */ jsx(PresetsProvider, { value: activePresets, children: /* @__PURE__ */ jsx(AppearanceProvider, { value: resolvedAppearance, children: /* @__PURE__ */ jsx(ElevasisCoreProvider, { notifications: mantineAdapter, ...coreProps, children }) }) })
3973
- }
3974
- );
3975
- }
3976
- function createTestSystemsProvider({
3977
- organizationModel: organizationModel2,
3978
- systems = []
3979
- } = {}) {
3980
- return function TestSystemsProvider({ children }) {
3981
- return /* @__PURE__ */ jsx(ElevasisSystemsProvider, { systems, organizationModel: organizationModel2, children });
3982
- };
3983
- }
3984
2929
  function useSSEConnection({
3985
2930
  manager,
3986
2931
  connectionKey,
@@ -5109,7 +4054,7 @@ function buildResourceSetKey(directResources, descendantResources) {
5109
4054
  ].sort().join(",");
5110
4055
  }
5111
4056
  function useSystemHealth({
5112
- systemPath: systemPath2,
4057
+ systemPath,
5113
4058
  timeRange,
5114
4059
  includeDescendants = true,
5115
4060
  directResources,
@@ -5126,7 +4071,7 @@ function useSystemHealth({
5126
4071
  return useQuery({
5127
4072
  queryKey: observabilityKeys.systemHealth(
5128
4073
  workOSOrganizationId,
5129
- systemPath2,
4074
+ systemPath,
5130
4075
  timeRange,
5131
4076
  includeDescendants,
5132
4077
  includeDescendants ? "descendants" : "direct",
@@ -5140,7 +4085,7 @@ function useSystemHealth({
5140
4085
  return apiRequest("/observability/system-health", {
5141
4086
  method: "POST",
5142
4087
  body: JSON.stringify({
5143
- systemPath: systemPath2,
4088
+ systemPath,
5144
4089
  includeDescendants,
5145
4090
  startDate,
5146
4091
  endDate,
@@ -6805,10 +5750,10 @@ function useDeleteCompanies() {
6805
5750
  const queryClient = useQueryClient();
6806
5751
  return useMutation({
6807
5752
  mutationFn: async (companyIds) => {
6808
- const uniqueIds2 = [...new Set(companyIds)].filter(Boolean);
6809
- if (uniqueIds2.length === 0) return;
5753
+ const uniqueIds = [...new Set(companyIds)].filter(Boolean);
5754
+ if (uniqueIds.length === 0) return;
6810
5755
  await Promise.all(
6811
- uniqueIds2.map(
5756
+ uniqueIds.map(
6812
5757
  (companyId) => apiRequest(`/acquisition/companies/${companyId}`, {
6813
5758
  method: "DELETE"
6814
5759
  })
@@ -6956,10 +5901,10 @@ function useDeleteContacts() {
6956
5901
  const queryClient = useQueryClient();
6957
5902
  return useMutation({
6958
5903
  mutationFn: async (contactIds) => {
6959
- const uniqueIds2 = [...new Set(contactIds)].filter(Boolean);
6960
- if (uniqueIds2.length === 0) return;
5904
+ const uniqueIds = [...new Set(contactIds)].filter(Boolean);
5905
+ if (uniqueIds.length === 0) return;
6961
5906
  await Promise.all(
6962
- uniqueIds2.map(
5907
+ uniqueIds.map(
6963
5908
  (contactId) => apiRequest(`/acquisition/contacts/${contactId}`, {
6964
5909
  method: "DELETE"
6965
5910
  })
@@ -7666,32 +6611,6 @@ function useUserMemberships(userId, params) {
7666
6611
  gcTime: GC_TIME_MEDIUM
7667
6612
  });
7668
6613
  }
7669
- function useUpdateMemberConfig() {
7670
- const { apiRequest } = useElevasisServices();
7671
- const adapter = useNotificationAdapter();
7672
- const queryClient = useQueryClient();
7673
- const { retry: refreshOrganizations } = useOrganization();
7674
- return useMutation({
7675
- mutationFn: async ({ membershipId, config }) => {
7676
- return apiRequest(`/memberships/${membershipId}/config`, {
7677
- method: "PATCH",
7678
- body: JSON.stringify({ config })
7679
- });
7680
- },
7681
- onSuccess: async () => {
7682
- queryClient.invalidateQueries({ queryKey: ["memberships"] });
7683
- await refreshOrganizations();
7684
- notifications.show({
7685
- title: "Success",
7686
- message: "Member config updated",
7687
- color: "teal"
7688
- });
7689
- },
7690
- onError: (error) => {
7691
- adapter.apiError(error);
7692
- }
7693
- });
7694
- }
7695
6614
  function useDeactivateMembership() {
7696
6615
  const { apiRequest } = useElevasisServices();
7697
6616
  const adapter = useNotificationAdapter();
@@ -8611,18 +7530,18 @@ function NotificationItem({ notification, onClose, onNavigate }) {
8611
7530
  }
8612
7531
  );
8613
7532
  }
8614
- function NotificationList({ notifications: notifications17, isLoading, onClose, onNavigate }) {
7533
+ function NotificationList({ notifications: notifications15, isLoading, onClose, onNavigate }) {
8615
7534
  if (isLoading) {
8616
7535
  return /* @__PURE__ */ jsx(Center, { p: "xl", children: /* @__PURE__ */ jsx(Loader, { size: "sm" }) });
8617
7536
  }
8618
- if (notifications17.length === 0) {
7537
+ if (notifications15.length === 0) {
8619
7538
  return /* @__PURE__ */ jsx(Center, { p: "xl", children: /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "No notifications" }) });
8620
7539
  }
8621
- return /* @__PURE__ */ jsx(Stack, { gap: 0, children: notifications17.map((notification) => /* @__PURE__ */ jsx(NotificationItem, { notification, onClose, onNavigate }, notification.id)) });
7540
+ return /* @__PURE__ */ jsx(Stack, { gap: 0, children: notifications15.map((notification) => /* @__PURE__ */ jsx(NotificationItem, { notification, onClose, onNavigate }, notification.id)) });
8622
7541
  }
8623
- function NotificationPanel({ notifications: notifications17, isLoading, onClose, onNavigate }) {
7542
+ function NotificationPanel({ notifications: notifications15, isLoading, onClose, onNavigate }) {
8624
7543
  const markAllAsRead = useMarkAllAsRead();
8625
- const hasUnread = notifications17.some((n) => !n.read);
7544
+ const hasUnread = notifications15.some((n) => !n.read);
8626
7545
  const handleMarkAllAsRead = async () => {
8627
7546
  await markAllAsRead.mutateAsync();
8628
7547
  };
@@ -8635,7 +7554,7 @@ function NotificationPanel({ notifications: notifications17, isLoading, onClose,
8635
7554
  /* @__PURE__ */ jsx(ScrollArea, { h: 400, type: "auto", children: /* @__PURE__ */ jsx(
8636
7555
  NotificationList,
8637
7556
  {
8638
- notifications: notifications17,
7557
+ notifications: notifications15,
8639
7558
  isLoading,
8640
7559
  onClose,
8641
7560
  onNavigate
@@ -8656,14 +7575,14 @@ function NotificationBell({ unreadCount, onNavigate }) {
8656
7575
  staleTime: 3e4
8657
7576
  });
8658
7577
  const { data, isLoading } = useNotifications({ limit: 20 });
8659
- const notifications17 = data?.notifications ?? [];
7578
+ const notifications15 = data?.notifications ?? [];
8660
7579
  const count = unreadCount ?? apiCount;
8661
7580
  return /* @__PURE__ */ jsxs(Popover, { opened, onChange: toggle, position: "bottom-end", width: 400, children: [
8662
7581
  /* @__PURE__ */ jsx(Tooltip, { label: "Notifications", disabled: opened, children: /* @__PURE__ */ jsx(Popover.Target, { children: /* @__PURE__ */ jsx(Indicator, { label: count > 99 ? "99+" : count, disabled: count === 0, size: 16, offset: 4, children: /* @__PURE__ */ jsx(ActionIcon, { variant: "subtle", size: "lg", onClick: toggle, children: /* @__PURE__ */ jsx(IconBell, { size: 20, color: "var(--color-text-subtle)" }) }) }) }) }),
8663
7582
  /* @__PURE__ */ jsx(Popover.Dropdown, { p: 0, children: /* @__PURE__ */ jsx(
8664
7583
  NotificationPanel,
8665
7584
  {
8666
- notifications: notifications17,
7585
+ notifications: notifications15,
8667
7586
  isLoading,
8668
7587
  onClose: close,
8669
7588
  onNavigate
@@ -12172,46 +11091,6 @@ function DeploymentSettings() {
12172
11091
  /* @__PURE__ */ jsx(Paper, { withBorder: true, children: /* @__PURE__ */ jsx(DeploymentList, { deployments, isLoading }) })
12173
11092
  ] });
12174
11093
  }
12175
- var FEATURES = [
12176
- { key: "crm", label: "CRM" },
12177
- { key: "lead-gen", label: "Lead Gen" },
12178
- { key: "projects", label: "Projects" },
12179
- { key: "seo", label: "SEO" }
12180
- ];
12181
- function MembershipFeaturePanel({
12182
- currentConfig,
12183
- onConfigChange,
12184
- disabled = false
12185
- }) {
12186
- const handleFeatureToggle = (featureKey, enabled) => {
12187
- const newConfig = {
12188
- ...currentConfig,
12189
- features: {
12190
- ...currentConfig?.features,
12191
- [featureKey]: enabled
12192
- }
12193
- };
12194
- onConfigChange(newConfig);
12195
- };
12196
- return /* @__PURE__ */ jsx(Card, { withBorder: true, children: /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
12197
- /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "Toggle features this member can access." }),
12198
- FEATURES.map(({ key, label }) => {
12199
- const isEnabled = currentConfig?.features?.[key] !== false;
12200
- return /* @__PURE__ */ jsxs(Group, { justify: "space-between", wrap: "nowrap", children: [
12201
- /* @__PURE__ */ jsx(Text, { size: "sm", children: label }),
12202
- /* @__PURE__ */ jsx(
12203
- Switch,
12204
- {
12205
- checked: isEnabled,
12206
- onChange: (e) => handleFeatureToggle(key, e.currentTarget.checked),
12207
- disabled,
12208
- size: "md"
12209
- }
12210
- )
12211
- ] }, key);
12212
- })
12213
- ] }) });
12214
- }
12215
11094
  function MembershipStatusBadge({ status, size = "sm", variant = "light" }) {
12216
11095
  const getStatusLabel = (status2) => {
12217
11096
  switch (status2) {
@@ -15141,423 +14020,6 @@ function SessionMemory({ memory }) {
15141
14020
  ] })
15142
14021
  ] });
15143
14022
  }
15144
- var tokens = {
15145
- cardBg: "rgba(16, 16, 20, 0.92)",
15146
- cardBorder: "rgba(255, 255, 255, 0.06)",
15147
- accentRed: "#ff5555",
15148
- accentRedDim: "rgba(255, 85, 85, 0.15)",
15149
- textPrimary: "#e8e8e8",
15150
- textSecondary: "rgba(255, 255, 255, 0.5)",
15151
- textTertiary: "rgba(255, 255, 255, 0.3)",
15152
- codeBg: "rgba(0, 0, 0, 0.35)",
15153
- codeBorder: "rgba(255, 255, 255, 0.05)",
15154
- fileHighlight: "#7dd3fc",
15155
- separator: "rgba(255, 255, 255, 0.06)",
15156
- mono: "'JetBrains Mono', 'Fira Code', 'Cascadia Code', ui-monospace, monospace",
15157
- sans: "'Inter', -apple-system, system-ui, sans-serif"
15158
- };
15159
- function parseStackFrames(stack) {
15160
- return stack.split("\n").filter((line) => line.trim().startsWith("at ")).map((line) => {
15161
- const trimmed = line.trim();
15162
- const parenMatch = trimmed.match(/^at\s+(.+?)\s+\((.+)\)$/);
15163
- if (parenMatch) {
15164
- return { fn: parenMatch[1], file: parenMatch[2], raw: trimmed };
15165
- }
15166
- const simpleMatch = trimmed.match(/^at\s+(.+)$/);
15167
- if (simpleMatch) {
15168
- return { fn: "", file: simpleMatch[1], raw: trimmed };
15169
- }
15170
- return { fn: "", file: "", raw: trimmed };
15171
- });
15172
- }
15173
- var COMPONENT_NOISE = /* @__PURE__ */ new Set([
15174
- "div",
15175
- "main",
15176
- "span",
15177
- "section",
15178
- "Lazy",
15179
- "Suspense",
15180
- "SafeFragment",
15181
- "MatchImpl",
15182
- "MatchInnerImpl",
15183
- "OutletImpl",
15184
- "CatchBoundaryImpl",
15185
- "CatchBoundary",
15186
- "MatchesInner",
15187
- "Matches",
15188
- "SplitComponent"
15189
- ]);
15190
- function isNoiseComponent(name) {
15191
- if (COMPONENT_NOISE.has(name)) return true;
15192
- if (name.startsWith("@mantine/") || name.startsWith("@tanstack/")) return true;
15193
- return false;
15194
- }
15195
- function parseComponentStack(stack) {
15196
- return stack.trim().split("\n").map((line) => line.trim()).filter((line) => line.startsWith("at ")).map((line) => {
15197
- const match = line.match(/^at\s+(\S+)/);
15198
- return match ? match[1] : line.replace(/^at\s+/, "");
15199
- }).filter((name) => !isNoiseComponent(name));
15200
- }
15201
- function SectionLabel({ children }) {
15202
- return /* @__PURE__ */ jsx(
15203
- "div",
15204
- {
15205
- style: {
15206
- fontSize: 10,
15207
- fontFamily: tokens.sans,
15208
- fontWeight: 600,
15209
- textTransform: "uppercase",
15210
- letterSpacing: "0.08em",
15211
- color: tokens.textTertiary,
15212
- marginBottom: 6
15213
- },
15214
- children
15215
- }
15216
- );
15217
- }
15218
- function CodeBlock({ children, style }) {
15219
- return /* @__PURE__ */ jsx(
15220
- "div",
15221
- {
15222
- style: {
15223
- background: tokens.codeBg,
15224
- border: `1px solid ${tokens.codeBorder}`,
15225
- borderRadius: 6,
15226
- padding: "10px 14px",
15227
- fontFamily: tokens.mono,
15228
- fontSize: 12,
15229
- lineHeight: 1.6,
15230
- color: tokens.textPrimary,
15231
- overflowX: "auto",
15232
- ...style
15233
- },
15234
- children
15235
- }
15236
- );
15237
- }
15238
- function StackFrameRow({ frame }) {
15239
- return /* @__PURE__ */ jsxs("div", { style: { display: "flex", gap: 8, alignItems: "baseline" }, children: [
15240
- frame.fn && /* @__PURE__ */ jsx("span", { style: { color: tokens.textPrimary, flexShrink: 0 }, children: frame.fn }),
15241
- /* @__PURE__ */ jsx("span", { style: { color: tokens.fileHighlight, opacity: 0.7, fontSize: 11 }, children: frame.file })
15242
- ] });
15243
- }
15244
- function Separator() {
15245
- return /* @__PURE__ */ jsx("div", { style: { height: 1, background: tokens.separator, margin: "4px 0" } });
15246
- }
15247
- function ErrorReportCard({
15248
- errorName,
15249
- errorMessage,
15250
- errorStack,
15251
- componentStack,
15252
- eventId,
15253
- url,
15254
- timestamp,
15255
- reportText,
15256
- appVersion
15257
- }) {
15258
- const [expanded, setExpanded] = useState(true);
15259
- const frames = errorStack ? parseStackFrames(errorStack) : [];
15260
- const components = componentStack ? parseComponentStack(componentStack) : [];
15261
- return /* @__PURE__ */ jsxs(
15262
- "div",
15263
- {
15264
- style: {
15265
- background: tokens.cardBg,
15266
- border: `1px solid ${tokens.cardBorder}`,
15267
- borderTop: `3px solid ${tokens.accentRed}`,
15268
- borderRadius: 10,
15269
- maxWidth: 720,
15270
- width: "100%",
15271
- fontFamily: tokens.sans,
15272
- backdropFilter: "blur(20px)",
15273
- boxShadow: "0 25px 60px rgba(0, 0, 0, 0.5), 0 0 40px rgba(255, 85, 85, 0.05)"
15274
- },
15275
- children: [
15276
- /* @__PURE__ */ jsxs("div", { style: { padding: "20px 24px 0" }, children: [
15277
- /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", marginBottom: 12 }, children: [
15278
- /* @__PURE__ */ jsx("div", { style: { display: "flex", alignItems: "center", gap: 10 }, children: /* @__PURE__ */ jsx(
15279
- "span",
15280
- {
15281
- style: {
15282
- background: tokens.accentRedDim,
15283
- color: tokens.accentRed,
15284
- fontSize: 12,
15285
- fontWeight: 600,
15286
- fontFamily: tokens.mono,
15287
- padding: "3px 10px",
15288
- borderRadius: 4,
15289
- letterSpacing: "0.02em"
15290
- },
15291
- children: errorName
15292
- }
15293
- ) }),
15294
- /* @__PURE__ */ jsx(CopyButton, { value: reportText, timeout: 2e3, children: ({ copied, copy }) => /* @__PURE__ */ jsx(Tooltip, { label: copied ? "Copied!" : "Copy error report", position: "left", children: /* @__PURE__ */ jsxs(
15295
- "button",
15296
- {
15297
- onClick: copy,
15298
- style: {
15299
- background: copied ? "rgba(45, 212, 191, 0.15)" : "rgba(255, 255, 255, 0.06)",
15300
- border: `1px solid ${copied ? "rgba(45, 212, 191, 0.3)" : "rgba(255, 255, 255, 0.08)"}`,
15301
- borderRadius: 6,
15302
- padding: "5px 12px",
15303
- color: copied ? "#2dd4bf" : tokens.textSecondary,
15304
- cursor: "pointer",
15305
- display: "flex",
15306
- alignItems: "center",
15307
- gap: 6,
15308
- fontSize: 12,
15309
- fontFamily: tokens.sans,
15310
- transition: "all 0.15s ease"
15311
- },
15312
- children: [
15313
- copied ? /* @__PURE__ */ jsx(IconCheck, { size: 13 }) : /* @__PURE__ */ jsx(IconCopy, { size: 13 }),
15314
- copied ? "Copied" : "Copy"
15315
- ]
15316
- }
15317
- ) }) })
15318
- ] }),
15319
- /* @__PURE__ */ jsx(
15320
- "div",
15321
- {
15322
- style: {
15323
- fontSize: 16,
15324
- fontWeight: 500,
15325
- color: tokens.textPrimary,
15326
- lineHeight: 1.5,
15327
- marginBottom: 16
15328
- },
15329
- children: errorMessage
15330
- }
15331
- ),
15332
- /* @__PURE__ */ jsxs(
15333
- "div",
15334
- {
15335
- style: {
15336
- background: tokens.codeBg,
15337
- border: `1px solid ${tokens.codeBorder}`,
15338
- borderRadius: 6,
15339
- padding: "8px 12px",
15340
- fontFamily: tokens.mono,
15341
- fontSize: 12,
15342
- color: tokens.fileHighlight,
15343
- marginBottom: 16,
15344
- display: "flex",
15345
- alignItems: "center",
15346
- gap: 8
15347
- },
15348
- children: [
15349
- /* @__PURE__ */ jsx("span", { style: { color: tokens.textTertiary, fontSize: 10, flexShrink: 0 }, children: "URL" }),
15350
- /* @__PURE__ */ jsx("span", { style: { opacity: 0.8 }, children: url })
15351
- ]
15352
- }
15353
- )
15354
- ] }),
15355
- /* @__PURE__ */ jsx("div", { style: { padding: "0 24px" }, children: /* @__PURE__ */ jsxs(
15356
- "button",
15357
- {
15358
- onClick: () => setExpanded((v) => !v),
15359
- style: {
15360
- background: "none",
15361
- border: "none",
15362
- color: tokens.textTertiary,
15363
- fontSize: 11,
15364
- fontFamily: tokens.sans,
15365
- cursor: "pointer",
15366
- padding: "4px 0",
15367
- display: "flex",
15368
- alignItems: "center",
15369
- gap: 4,
15370
- letterSpacing: "0.05em",
15371
- textTransform: "uppercase",
15372
- fontWeight: 600
15373
- },
15374
- children: [
15375
- expanded ? "- Hide" : "+ Show",
15376
- " details"
15377
- ]
15378
- }
15379
- ) }),
15380
- expanded && /* @__PURE__ */ jsxs("div", { style: { padding: "8px 24px 20px" }, children: [
15381
- frames.length > 0 && /* @__PURE__ */ jsxs("div", { style: { marginBottom: 16 }, children: [
15382
- /* @__PURE__ */ jsx(SectionLabel, { children: "Stack Trace" }),
15383
- /* @__PURE__ */ jsx(CodeBlock, { style: { maxHeight: 220, overflowY: "auto" }, children: frames.map((frame, i) => /* @__PURE__ */ jsx(StackFrameRow, { frame }, i)) })
15384
- ] }),
15385
- components.length > 0 && /* @__PURE__ */ jsxs("div", { style: { marginBottom: 16 }, children: [
15386
- /* @__PURE__ */ jsx(SectionLabel, { children: "Component Tree" }),
15387
- /* @__PURE__ */ jsx(CodeBlock, { style: { maxHeight: 120, overflowY: "auto" }, children: /* @__PURE__ */ jsx("div", { style: { display: "flex", flexWrap: "wrap", gap: "2px 0", alignItems: "center" }, children: components.map((name, i) => /* @__PURE__ */ jsxs("span", { style: { display: "inline-flex", alignItems: "center" }, children: [
15388
- /* @__PURE__ */ jsx(
15389
- "span",
15390
- {
15391
- style: {
15392
- color: i === 0 ? tokens.accentRed : tokens.textPrimary,
15393
- fontWeight: i === 0 ? 600 : 400
15394
- },
15395
- children: name
15396
- }
15397
- ),
15398
- i < components.length - 1 && /* @__PURE__ */ jsx("span", { style: { color: tokens.textTertiary, margin: "0 6px", fontSize: 10 }, children: "\u203A" })
15399
- ] }, i)) }) })
15400
- ] }),
15401
- /* @__PURE__ */ jsx(Separator, {}),
15402
- /* @__PURE__ */ jsxs(
15403
- "div",
15404
- {
15405
- style: {
15406
- display: "grid",
15407
- gridTemplateColumns: "auto 1fr",
15408
- gap: "4px 16px",
15409
- fontSize: 11,
15410
- fontFamily: tokens.mono,
15411
- paddingTop: 12
15412
- },
15413
- children: [
15414
- appVersion && /* @__PURE__ */ jsxs(Fragment, { children: [
15415
- /* @__PURE__ */ jsx("span", { style: { color: tokens.textTertiary }, children: "version" }),
15416
- /* @__PURE__ */ jsx("span", { style: { color: tokens.textSecondary }, children: appVersion })
15417
- ] }),
15418
- /* @__PURE__ */ jsx("span", { style: { color: tokens.textTertiary }, children: "timestamp" }),
15419
- /* @__PURE__ */ jsx("span", { style: { color: tokens.textSecondary }, children: timestamp }),
15420
- /* @__PURE__ */ jsx("span", { style: { color: tokens.textTertiary }, children: "viewport" }),
15421
- /* @__PURE__ */ jsxs("span", { style: { color: tokens.textSecondary }, children: [
15422
- window.innerWidth,
15423
- "x",
15424
- window.innerHeight
15425
- ] }),
15426
- eventId && /* @__PURE__ */ jsxs(Fragment, { children: [
15427
- /* @__PURE__ */ jsx("span", { style: { color: tokens.textTertiary }, children: "sentry" }),
15428
- /* @__PURE__ */ jsx("span", { style: { color: tokens.textSecondary }, children: eventId })
15429
- ] })
15430
- ]
15431
- }
15432
- )
15433
- ] }),
15434
- /* @__PURE__ */ jsx(
15435
- "div",
15436
- {
15437
- style: {
15438
- borderTop: `1px solid ${tokens.separator}`,
15439
- padding: "12px 24px",
15440
- display: "flex",
15441
- justifyContent: "center"
15442
- },
15443
- children: /* @__PURE__ */ jsx(
15444
- "button",
15445
- {
15446
- onClick: () => window.location.reload(),
15447
- style: {
15448
- background: "none",
15449
- border: "none",
15450
- color: tokens.textTertiary,
15451
- fontSize: 12,
15452
- fontFamily: tokens.sans,
15453
- cursor: "pointer",
15454
- padding: "2px 8px",
15455
- textDecoration: "underline",
15456
- textUnderlineOffset: 3
15457
- },
15458
- children: "Reload page"
15459
- }
15460
- )
15461
- }
15462
- )
15463
- ]
15464
- }
15465
- );
15466
- }
15467
- function getErrorName(error) {
15468
- if (error instanceof Error) {
15469
- return error.constructor.name === "Error" ? "Error" : error.constructor.name;
15470
- }
15471
- return "Error";
15472
- }
15473
- function buildErrorReport(opts) {
15474
- const { error, componentStack, eventId } = opts;
15475
- const errorMessage = error instanceof Error ? error.message : String(error);
15476
- const errorStack = error instanceof Error ? error.stack : void 0;
15477
- const url = opts.url ?? window.location.href;
15478
- const sections = [
15479
- `## Error Report`,
15480
- `**Timestamp:** ${(/* @__PURE__ */ new Date()).toISOString()}`,
15481
- `**URL:** ${url}`,
15482
- opts.appVersion && `**App Version:** ${opts.appVersion}`,
15483
- eventId && `**Sentry Event ID:** ${eventId}`,
15484
- `**User Agent:** ${navigator.userAgent}`,
15485
- `**Viewport:** ${window.innerWidth}x${window.innerHeight}`,
15486
- "",
15487
- `### Error`,
15488
- "```",
15489
- `${getErrorName(error)}: ${errorMessage}`,
15490
- "```",
15491
- "",
15492
- errorStack && `### Stack Trace`,
15493
- errorStack && "```",
15494
- errorStack,
15495
- errorStack && "```",
15496
- errorStack && "",
15497
- componentStack && `### Component Stack`,
15498
- componentStack && "```",
15499
- componentStack?.trim(),
15500
- componentStack && "```"
15501
- ];
15502
- return sections.filter(Boolean).join("\n");
15503
- }
15504
- function CrashErrorFallback({ error, componentStack, eventId, appVersion }) {
15505
- const { background } = useAppearance();
15506
- const errorMessage = error instanceof Error ? error.message : String(error);
15507
- const errorStack = error instanceof Error ? error.stack : void 0;
15508
- const errorName = getErrorName(error);
15509
- const reportText = buildErrorReport({ error, componentStack, eventId, appVersion });
15510
- const timestamp = (/* @__PURE__ */ new Date()).toISOString();
15511
- return /* @__PURE__ */ jsxs(
15512
- "div",
15513
- {
15514
- style: {
15515
- position: "fixed",
15516
- inset: 0,
15517
- overflow: "auto",
15518
- background: "var(--color-background)",
15519
- display: "flex",
15520
- alignItems: "center",
15521
- justifyContent: "center",
15522
- padding: 24
15523
- },
15524
- children: [
15525
- background,
15526
- /* @__PURE__ */ jsx("div", { style: { position: "relative", zIndex: 1, width: "100%", display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ jsx(
15527
- ErrorReportCard,
15528
- {
15529
- errorName,
15530
- errorMessage,
15531
- errorStack,
15532
- componentStack,
15533
- eventId,
15534
- url: window.location.href,
15535
- timestamp,
15536
- reportText,
15537
- appVersion
15538
- }
15539
- ) })
15540
- ]
15541
- }
15542
- );
15543
- }
15544
- var AppErrorBoundary = class extends Component {
15545
- state = { error: null, componentStack: "" };
15546
- static getDerivedStateFromError(error) {
15547
- return { error };
15548
- }
15549
- componentDidCatch(error, errorInfo) {
15550
- this.setState({ componentStack: errorInfo.componentStack ?? "" });
15551
- this.props.onError?.(error, errorInfo);
15552
- }
15553
- render() {
15554
- if (this.state.error !== null) {
15555
- const props = { error: this.state.error, componentStack: this.state.componentStack };
15556
- return this.props.fallback ? this.props.fallback(props) : /* @__PURE__ */ jsx(CrashErrorFallback, { ...props, appVersion: this.props.appVersion });
15557
- }
15558
- return this.props.children;
15559
- }
15560
- };
15561
14023
  function RichTextEditor({ content, onChange, placeholder }) {
15562
14024
  const editor = useEditor({
15563
14025
  extensions: [
@@ -18316,7 +16778,7 @@ var workflowDisplayMetadataByResourceId = {
18316
16778
  function titleFromResourceId(resourceId) {
18317
16779
  return resourceId.replace(/-workflow$/, "").replace(/[-_]+/g, " ").replace(/\b\w/g, (character) => character.toUpperCase());
18318
16780
  }
18319
- var platformWorkflowResources = platformWorkflowResourceSeeds.map(([id, systemPath2, buildActionKey], index) => {
16781
+ var platformWorkflowResources = platformWorkflowResourceSeeds.map(([id, systemPath, buildActionKey], index) => {
18320
16782
  const codeRefs = platformWorkflowCodeRefs[id];
18321
16783
  const ontology = buildActionKey !== void 0 ? workflowOntologyBindingsByBuildActionKey[buildActionKey] : void 0;
18322
16784
  const contract = workflowContractsByResourceId[id];
@@ -18330,10 +16792,10 @@ var platformWorkflowResources = platformWorkflowResourceSeeds.map(([id, systemPa
18330
16792
  id,
18331
16793
  order: (index + 1) * 10,
18332
16794
  kind: "workflow",
18333
- systemPath: systemPath2,
16795
+ systemPath,
18334
16796
  title,
18335
16797
  description: displayMetadata?.description ?? `Workflow resource for ${title}.`,
18336
- ownerRoleId: getPlatformOwnerRoleId(systemPath2),
16798
+ ownerRoleId: getPlatformOwnerRoleId(systemPath),
18337
16799
  status: "active",
18338
16800
  ...codeRefs ? { codeRefs } : {},
18339
16801
  ...ontologyWithContract ? { ontology: ontologyWithContract } : {}
@@ -19821,19 +18283,19 @@ function usesIntegration(key, from, to) {
19821
18283
  })
19822
18284
  ];
19823
18285
  }
19824
- function requestsApproval(key, from, checkpointId, systemPath2) {
18286
+ function requestsApproval(key, from, checkpointId, systemPath) {
19825
18287
  return [
19826
18288
  key,
19827
18289
  topologyRelationship.requestsApproval(resource(from), checkpointId, {
19828
- systemPath: systemPath2
18290
+ systemPath
19829
18291
  })
19830
18292
  ];
19831
18293
  }
19832
- function checkpointRoutesTo(key, checkpointId, to, systemPath2) {
18294
+ function checkpointRoutesTo(key, checkpointId, to, systemPath) {
19833
18295
  return [
19834
18296
  key,
19835
18297
  topologyRelationship.checkpointRoutesTo(checkpointId, resource(to), {
19836
- systemPath: systemPath2
18298
+ systemPath
19837
18299
  })
19838
18300
  ];
19839
18301
  }
@@ -22560,10 +21022,10 @@ function useDeleteLists() {
22560
21022
  const queryClient = useQueryClient();
22561
21023
  return useMutation({
22562
21024
  mutationFn: async (listIds) => {
22563
- const uniqueIds2 = [...new Set(listIds)].filter(Boolean);
22564
- if (uniqueIds2.length === 0) return;
21025
+ const uniqueIds = [...new Set(listIds)].filter(Boolean);
21026
+ if (uniqueIds.length === 0) return;
22565
21027
  await Promise.all(
22566
- uniqueIds2.map(
21028
+ uniqueIds.map(
22567
21029
  (listId) => apiRequest(`/acquisition/lists/${listId}`, {
22568
21030
  method: "DELETE"
22569
21031
  })
@@ -22580,12 +21042,17 @@ function useDeleteLists() {
22580
21042
  }
22581
21043
  });
22582
21044
  }
22583
- function actionMatchesExport(primaryAction) {
22584
- return primaryAction === "lead-gen.export.list" || primaryAction?.endsWith(":action/export.list") === true || primaryAction?.endsWith(".export.list") === true;
21045
+ function isLeadGenExportAction(action) {
21046
+ if (!action) return false;
21047
+ const ontologyActionSegment = action.split(":action/")[1];
21048
+ if (ontologyActionSegment) {
21049
+ return ontologyActionSegment === "export" || ontologyActionSegment.startsWith("export.") || ontologyActionSegment.startsWith("export-");
21050
+ }
21051
+ return action === "lead-gen.export.list" || action.includes(".export.");
22585
21052
  }
22586
21053
  function getLeadGenExportWorkflowId(model) {
22587
21054
  return Object.values(model.resources ?? {}).find(
22588
- (resource2) => resource2.kind === "workflow" && resource2.systemPath === "sales.lead-gen" && (actionMatchesExport(resource2.ontology?.primaryAction) || resource2.ontology?.actions?.some(actionMatchesExport) === true)
21055
+ (resource2) => resource2.kind === "workflow" && resource2.systemPath === "sales.lead-gen" && (isLeadGenExportAction(resource2.ontology?.primaryAction) || resource2.ontology?.actions?.some(isLeadGenExportAction) === true)
22589
21056
  )?.id;
22590
21057
  }
22591
21058
  function toBuildStepDefinition(step) {
@@ -24105,7 +22572,7 @@ function hasRunInput(run2) {
24105
22572
  return input !== void 0 && input !== null;
24106
22573
  }
24107
22574
  function sanitizeStepInput(value, actionKey) {
24108
- if (actionKey === "lead-gen.export.list") return value;
22575
+ if (isLeadGenExportAction(actionKey)) return value;
24109
22576
  const next = { ...value };
24110
22577
  delete next.mode;
24111
22578
  return next;
@@ -24765,7 +23232,7 @@ function StepRecordsPanel({
24765
23232
  const rows = recordsQuery.data?.data ?? [];
24766
23233
  const total = recordsQuery.data?.total ?? 0;
24767
23234
  const totalPages = Math.max(1, Math.ceil(total / RECORDS_PAGE_SIZE));
24768
- const isReviewExportStep = step.primaryEntity === "company" && (step.actionKey === "lead-gen.export.list" || step.action?.resourceId === exportWorkflowId);
23235
+ const isReviewExportStep = step.primaryEntity === "company" && (isLeadGenExportAction(step.actionKey) || step.action?.resourceId === exportWorkflowId);
24769
23236
  const approvedCompanyIds = Object.entries(approvalByCompanyId).filter(([, status]) => status === "approved").map(([companyId]) => companyId);
24770
23237
  const rejectedCompanyIds = Object.entries(approvalByCompanyId).filter(([, status]) => status === "rejected").map(([companyId]) => companyId);
24771
23238
  const setApproval = (companyId, status) => {
@@ -24909,7 +23376,7 @@ function BuildTab({
24909
23376
  const stepSchema = selectedStep?.action?.schema;
24910
23377
  const stepLayout = selectedStep?.action?.layout;
24911
23378
  const credentialRequirements = selectedStep?.credentialRequirements ?? [];
24912
- const selectedStepIsReviewExport = selectedStep?.primaryEntity === "company" && (selectedStep.actionKey === "lead-gen.export.list" || selectedStep.action?.resourceId === exportWorkflowId);
23379
+ const selectedStepIsReviewExport = selectedStep?.primaryEntity === "company" && (isLeadGenExportAction(selectedStep.actionKey) || selectedStep.action?.resourceId === exportWorkflowId);
24913
23380
  const selectedExportWorkflowId = selectedStep?.action?.resourceId ?? exportWorkflowId ?? "";
24914
23381
  const visibleStepLayout = useMemo(
24915
23382
  () => filterCredentialRequirementFields(stepLayout, credentialRequirements),
@@ -25228,7 +23695,7 @@ function BuildTab({
25228
23695
  onVerify: handleVerifyCredential
25229
23696
  }
25230
23697
  ),
25231
- selectedStep.actionKey === "lead-gen.export.list" || getClickUpRequirement(selectedStep) ? /* @__PURE__ */ jsx(
23698
+ isLeadGenExportAction(selectedStep.actionKey) || getClickUpRequirement(selectedStep) ? /* @__PURE__ */ jsx(
25232
23699
  TextInput,
25233
23700
  {
25234
23701
  label: "ClickUp List ID",
@@ -29971,127 +28438,6 @@ function CommandQueueDetailPage({
29971
28438
  ] });
29972
28439
  }
29973
28440
 
29974
- // src/features/operations/organization-graph/types.ts
29975
- var ORGANIZATION_GRAPH_NODE_KIND_ORDER = [
29976
- "organization",
29977
- "system",
29978
- "role",
29979
- "action",
29980
- "entity",
29981
- "event",
29982
- "policy",
29983
- "stage",
29984
- "resource",
29985
- "knowledge",
29986
- "customer-segment",
29987
- "offering",
29988
- "goal",
29989
- "surface",
29990
- "navigation-group",
29991
- "ontology"
29992
- ];
29993
- var ORGANIZATION_GRAPH_NODE_KIND_LABELS = {
29994
- organization: "Organization",
29995
- system: "System",
29996
- role: "Role",
29997
- action: "Action",
29998
- entity: "Entity",
29999
- event: "Event",
30000
- policy: "Policy",
30001
- stage: "Stage",
30002
- resource: "Resource",
30003
- knowledge: "Knowledge",
30004
- "customer-segment": "Customer segment",
30005
- offering: "Offering",
30006
- goal: "Goal",
30007
- surface: "Surface",
30008
- "navigation-group": "Navigation group",
30009
- ontology: "Ontology"
30010
- };
30011
- var ORGANIZATION_GRAPH_NODE_KIND_DETAIL_LABELS = {
30012
- organization: "Organization root",
30013
- system: "System",
30014
- role: "Role",
30015
- action: "Action",
30016
- entity: "Entity",
30017
- event: "Event",
30018
- policy: "Policy",
30019
- stage: "Stage",
30020
- resource: "Resource",
30021
- knowledge: "Knowledge",
30022
- "customer-segment": "Customer segment",
30023
- offering: "Offering",
30024
- goal: "Goal",
30025
- surface: "Surface",
30026
- "navigation-group": "Navigation group",
30027
- ontology: "Ontology record"
30028
- };
30029
- var ORGANIZATION_GRAPH_NODE_KIND_MEANINGS = {
30030
- organization: "The root of the shared organization model and the parent for every derived node.",
30031
- system: "A canonical Organization Model system for ownership, routing, and governance.",
30032
- role: "An Organization Model role that owns responsibilities and may govern systems.",
30033
- action: "A reusable action that can be attached to a system.",
30034
- entity: "A modeled business object or stateful data domain owned by the organization model.",
30035
- event: "A derived domain or runtime event emitted by entities, resources, or actions.",
30036
- policy: "A governance rule that applies to targets and may trigger effects across the graph.",
30037
- stage: "A lifecycle stage that records progress for an entity through a build pipeline.",
30038
- resource: "A concrete command-view or mapped resource that bridges execution topology into the model.",
30039
- knowledge: "An operational knowledge node that documents a process, strategy, or runbook in the org model.",
30040
- "customer-segment": "A defined segment of customers or prospects that the organization targets or serves.",
30041
- offering: "A product, service, or value proposition the organization delivers to customer segments.",
30042
- goal: "A strategic or operational objective that guides priorities and measures progress.",
30043
- surface: "A navigation surface (page or view) that is exposed through the platform shell.",
30044
- "navigation-group": "A logical grouping of navigation surfaces within the platform shell.",
30045
- ontology: "A compiled ontology record such as an object, action, catalog, value type, surface, or resource binding."
30046
- };
30047
- var ORGANIZATION_GRAPH_EDGE_KIND_LABELS = {
30048
- contains: "Containment",
30049
- references: "Reference",
30050
- maps_to: "Mapping",
30051
- uses: "Uses",
30052
- governs: "Governs",
30053
- links: "Links",
30054
- affects: "Affects",
30055
- emits: "Emits",
30056
- originates_from: "Originates from",
30057
- triggers: "Triggers",
30058
- approval: "Approval",
30059
- applies_to: "Applies to",
30060
- effects: "Effects",
30061
- actions: "Actions",
30062
- reads: "Reads",
30063
- writes: "Writes",
30064
- uses_catalog: "Uses catalog"
30065
- };
30066
- var ORGANIZATION_GRAPH_EDGE_KIND_MEANINGS = {
30067
- contains: "A hierarchy or ownership link inside the shared graph.",
30068
- references: "A semantic association or dependency between two graph nodes.",
30069
- maps_to: "An action is aligned to a concrete resource.",
30070
- uses: "A graph node depends on another node, resource, entity, or integration.",
30071
- governs: "A knowledge node, role, or policy provides authoritative guidance for another node.",
30072
- links: "Two modeled nodes are associated without stronger ownership or execution semantics.",
30073
- affects: "The source can influence the behavior, state, or outcome of the target.",
30074
- emits: "The source produces an event that can be inspected or traversed.",
30075
- originates_from: "The source is derived from or owned by the target origin.",
30076
- triggers: "The source can start or activate the target.",
30077
- approval: "The source requests or participates in an approval path.",
30078
- applies_to: "A policy or rule targets the node it applies to.",
30079
- effects: "A policy or event produces the target effect.",
30080
- actions: "The source is bound to the target ontology action contract.",
30081
- reads: "The source reads data described by the target ontology record.",
30082
- writes: "The source writes data described by the target ontology record.",
30083
- uses_catalog: "The source uses the target ontology catalog."
30084
- };
30085
- var DEFAULT_ORGANIZATION_GRAPH_FILTERS = {
30086
- search: "",
30087
- nodeKinds: [],
30088
- topologyPresence: "all",
30089
- environmentStatus: "all",
30090
- resourceTypes: [],
30091
- showIntegrations: true,
30092
- domainFilters: {}
30093
- };
30094
-
30095
28441
  // src/features/operations/organization-graph/organizationGraphDetail.ts
30096
28442
  var RELATIONSHIP_MEANINGS = {
30097
28443
  triggers: "Executable handoff: the source resource starts the target resource.",
@@ -34170,8 +32516,8 @@ function getRelativeLuminance(color) {
34170
32516
  };
34171
32517
  return 0.2126 * channel(parsed.r) + 0.7152 * channel(parsed.g) + 0.0722 * channel(parsed.b);
34172
32518
  }
34173
- function getReadableTextColor(background, tokens2) {
34174
- return getRelativeLuminance(background) > 0.38 ? tokens2.background : tokens2.text;
32519
+ function getReadableTextColor(background, tokens) {
32520
+ return getRelativeLuminance(background) > 0.38 ? tokens.background : tokens.text;
34175
32521
  }
34176
32522
  function readGraphThemeTokens() {
34177
32523
  if (typeof window === "undefined") {
@@ -34195,86 +32541,86 @@ function readGraphThemeTokens() {
34195
32541
  error: read("--color-error", FALLBACK_GRAPH_THEME.error)
34196
32542
  };
34197
32543
  }
34198
- function getNodeThemeByKind(tokens2) {
32544
+ function getNodeThemeByKind(tokens) {
34199
32545
  const accentByKind = {
34200
- organization: mixColors(tokens2.primary, tokens2.text, 0.35),
34201
- system: mixColors(tokens2.primary, tokens2.success, 0.48),
34202
- role: mixColors(tokens2.primary, tokens2.error, 0.4),
34203
- action: mixColors(tokens2.primary, tokens2.success, 0.72),
34204
- entity: mixColors(tokens2.success, tokens2.warning, 0.44),
34205
- event: mixColors(tokens2.warning, tokens2.error, 0.48),
34206
- policy: mixColors(tokens2.primary, tokens2.error, 0.62),
34207
- stage: mixColors(tokens2.primary, tokens2.warning, 0.32),
34208
- resource: mixColors(tokens2.primary, tokens2.warning, 0.58),
34209
- knowledge: mixColors(tokens2.primary, tokens2.text, 0.6),
34210
- "customer-segment": mixColors(tokens2.success, tokens2.text, 0.5),
34211
- offering: mixColors(tokens2.success, tokens2.primary, 0.36),
34212
- goal: mixColors(tokens2.primary, tokens2.error, 0.5),
34213
- surface: mixColors(tokens2.primary, tokens2.success, 0.55),
34214
- "navigation-group": mixColors(tokens2.primary, tokens2.text, 0.45),
34215
- ontology: mixColors(tokens2.primary, tokens2.warning, 0.44)
32546
+ organization: mixColors(tokens.primary, tokens.text, 0.35),
32547
+ system: mixColors(tokens.primary, tokens.success, 0.48),
32548
+ role: mixColors(tokens.primary, tokens.error, 0.4),
32549
+ action: mixColors(tokens.primary, tokens.success, 0.72),
32550
+ entity: mixColors(tokens.success, tokens.warning, 0.44),
32551
+ event: mixColors(tokens.warning, tokens.error, 0.48),
32552
+ policy: mixColors(tokens.primary, tokens.error, 0.62),
32553
+ stage: mixColors(tokens.primary, tokens.warning, 0.32),
32554
+ resource: mixColors(tokens.primary, tokens.warning, 0.58),
32555
+ knowledge: mixColors(tokens.primary, tokens.text, 0.6),
32556
+ "customer-segment": mixColors(tokens.success, tokens.text, 0.5),
32557
+ offering: mixColors(tokens.success, tokens.primary, 0.36),
32558
+ goal: mixColors(tokens.primary, tokens.error, 0.5),
32559
+ surface: mixColors(tokens.primary, tokens.success, 0.55),
32560
+ "navigation-group": mixColors(tokens.primary, tokens.text, 0.45),
32561
+ ontology: mixColors(tokens.primary, tokens.warning, 0.44)
34216
32562
  };
34217
32563
  return Object.fromEntries(
34218
32564
  Object.entries(accentByKind).map(([kind, accent]) => {
34219
- const background = mixColors(accent, tokens2.surface === "transparent" ? tokens2.background : tokens2.surface, 0.18);
34220
- const border = mixColors(accent, tokens2.border, 0.5);
32565
+ const background = mixColors(accent, tokens.surface === "transparent" ? tokens.background : tokens.surface, 0.18);
32566
+ const border = mixColors(accent, tokens.border, 0.5);
34221
32567
  return [
34222
32568
  kind,
34223
32569
  {
34224
32570
  background,
34225
32571
  border,
34226
- color: getReadableTextColor(background, tokens2)
32572
+ color: getReadableTextColor(background, tokens)
34227
32573
  }
34228
32574
  ];
34229
32575
  })
34230
32576
  );
34231
32577
  }
34232
- function getEdgeColor(edge, tokens2) {
34233
- if (edge.relationshipType === "triggers") return mixColors(tokens2.warning, tokens2.primary, 0.7);
34234
- if (edge.relationshipType === "uses") return mixColors(tokens2.success, tokens2.primary, 0.55);
34235
- if (edge.relationshipType === "approval") return mixColors(tokens2.warning, tokens2.text, 0.5);
32578
+ function getEdgeColor(edge, tokens) {
32579
+ if (edge.relationshipType === "triggers") return mixColors(tokens.warning, tokens.primary, 0.7);
32580
+ if (edge.relationshipType === "uses") return mixColors(tokens.success, tokens.primary, 0.55);
32581
+ if (edge.relationshipType === "approval") return mixColors(tokens.warning, tokens.text, 0.5);
34236
32582
  switch (edge.kind) {
34237
32583
  case "contains":
34238
- return mixColors(tokens2.textDimmed, tokens2.border, 0.45);
32584
+ return mixColors(tokens.textDimmed, tokens.border, 0.45);
34239
32585
  case "governs":
34240
32586
  case "applies_to":
34241
- return mixColors(tokens2.primary, tokens2.text, 0.45);
32587
+ return mixColors(tokens.primary, tokens.text, 0.45);
34242
32588
  case "maps_to":
34243
32589
  case "originates_from":
34244
32590
  case "actions":
34245
- return mixColors(tokens2.primary, tokens2.warning, 0.4);
32591
+ return mixColors(tokens.primary, tokens.warning, 0.4);
34246
32592
  case "uses":
34247
32593
  case "links":
34248
32594
  case "reads":
34249
32595
  case "writes":
34250
32596
  case "uses_catalog":
34251
- return mixColors(tokens2.success, tokens2.primary, 0.44);
32597
+ return mixColors(tokens.success, tokens.primary, 0.44);
34252
32598
  case "affects":
34253
32599
  case "effects":
34254
- return mixColors(tokens2.error, tokens2.primary, 0.42);
32600
+ return mixColors(tokens.error, tokens.primary, 0.42);
34255
32601
  case "emits":
34256
32602
  case "triggers":
34257
- return mixColors(tokens2.warning, tokens2.error, 0.5);
32603
+ return mixColors(tokens.warning, tokens.error, 0.5);
34258
32604
  case "references":
34259
32605
  default:
34260
- return mixColors(tokens2.primary, tokens2.success, 0.32);
32606
+ return mixColors(tokens.primary, tokens.success, 0.32);
34261
32607
  }
34262
32608
  }
34263
32609
  function getNodeHaloColor(node, fallback, graph) {
34264
32610
  const domain = getCommandViewNodeDomain(node, graph);
34265
32611
  return DOMAIN_ZONE_TINT_COLOR[domain] ?? fallback;
34266
32612
  }
34267
- function getExploreEdgeColor(sourceId, targetId, nodeById, tokens2, graph) {
32613
+ function getExploreEdgeColor(sourceId, targetId, nodeById, tokens, graph) {
34268
32614
  if (sourceId.startsWith("centroid:")) {
34269
32615
  const zone = sourceId.slice("centroid:".length);
34270
- return mixColors(DOMAIN_ZONE_TINT_COLOR[zone] ?? tokens2.primary, tokens2.textDimmed, 0.46);
32616
+ return mixColors(DOMAIN_ZONE_TINT_COLOR[zone] ?? tokens.primary, tokens.textDimmed, 0.46);
34271
32617
  }
34272
32618
  const sourceNode = nodeById.get(sourceId);
34273
32619
  const targetNode = nodeById.get(targetId);
34274
- const sourceTint = sourceNode ? getNodeHaloColor(sourceNode, tokens2.primary, graph) : null;
34275
- const targetTint = targetNode ? getNodeHaloColor(targetNode, tokens2.primary, graph) : null;
34276
- const tint = sourceTint ?? targetTint ?? tokens2.primary;
34277
- return mixColors(tint, tokens2.textDimmed, 0.42);
32620
+ const sourceTint = sourceNode ? getNodeHaloColor(sourceNode, tokens.primary, graph) : null;
32621
+ const targetTint = targetNode ? getNodeHaloColor(targetNode, tokens.primary, graph) : null;
32622
+ const tint = sourceTint ?? targetTint ?? tokens.primary;
32623
+ return mixColors(tint, tokens.textDimmed, 0.42);
34278
32624
  }
34279
32625
  function getNodeSize(kind) {
34280
32626
  if (kind === "organization") {
@@ -34301,17 +32647,17 @@ function getDegreeWeightedSize(kind, degree) {
34301
32647
  function getNodeScore(node, degreeByNodeId) {
34302
32648
  return Math.max(1, degreeByNodeId.get(node.id) ?? 0);
34303
32649
  }
34304
- function getCommandViewRingColor(level, tokens2) {
32650
+ function getCommandViewRingColor(level, tokens) {
34305
32651
  switch (level) {
34306
32652
  case "healthy":
34307
- return tokens2.success;
32653
+ return tokens.success;
34308
32654
  case "warning":
34309
- return tokens2.warning;
32655
+ return tokens.warning;
34310
32656
  case "critical":
34311
- return tokens2.error;
32657
+ return tokens.error;
34312
32658
  case "inactive":
34313
32659
  default:
34314
- return mixColors(tokens2.textDimmed, tokens2.border, 0.6);
32660
+ return mixColors(tokens.textDimmed, tokens.border, 0.6);
34315
32661
  }
34316
32662
  }
34317
32663
  function getDomainCardPosition(domain) {
@@ -34339,16 +32685,16 @@ var DOMAIN_DISPLAY_LABELS = {
34339
32685
  platform: "Platform",
34340
32686
  other: "Other"
34341
32687
  };
34342
- function toCytoscapeElementsWithHealth(graph, graphIndex, tokens2, commandViewHealthByNodeId, visualizationMode, selectedElement, expandedClusterDomains, parameters, expandedNodeIds) {
34343
- const nodeThemeByKind = getNodeThemeByKind(tokens2);
32688
+ function toCytoscapeElementsWithHealth(graph, graphIndex, tokens, commandViewHealthByNodeId, visualizationMode, selectedElement, expandedClusterDomains, parameters, expandedNodeIds) {
32689
+ const nodeThemeByKind = getNodeThemeByKind(tokens);
34344
32690
  if (visualizationMode === "explore") {
34345
32691
  const { syntheticNodes, backboneEdges, positions } = getExploreProjection(graph, expandedNodeIds);
34346
32692
  const elements = [];
34347
32693
  for (const sNode of syntheticNodes) {
34348
32694
  const isOmRoot = sNode.isOmRoot === true;
34349
- const fillColor = sNode.zoneTint ? mixColors(withAlpha(sNode.zoneTint, 0.22), tokens2.background, 0.22) : mixColors(tokens2.primary, tokens2.surface === "transparent" ? tokens2.background : tokens2.surface, 0.18);
34350
- const borderColor = sNode.zoneTint ? mixColors(sNode.zoneTint, tokens2.border, 0.48) : mixColors(tokens2.primary, tokens2.border, 0.52);
34351
- const haloColor = sNode.zoneTint ?? tokens2.primary;
32695
+ const fillColor = sNode.zoneTint ? mixColors(withAlpha(sNode.zoneTint, 0.22), tokens.background, 0.22) : mixColors(tokens.primary, tokens.surface === "transparent" ? tokens.background : tokens.surface, 0.18);
32696
+ const borderColor = sNode.zoneTint ? mixColors(sNode.zoneTint, tokens.border, 0.48) : mixColors(tokens.primary, tokens.border, 0.52);
32697
+ const haloColor = sNode.zoneTint ?? tokens.primary;
34352
32698
  elements.push({
34353
32699
  data: {
34354
32700
  id: sNode.id,
@@ -34359,7 +32705,7 @@ function toCytoscapeElementsWithHealth(graph, graphIndex, tokens2, commandViewHe
34359
32705
  zoneTint: sNode.zoneTint ?? void 0,
34360
32706
  fillColor,
34361
32707
  borderColor,
34362
- textColor: tokens2.text,
32708
+ textColor: tokens.text,
34363
32709
  haloColor,
34364
32710
  edgeHaloColor: withAlpha(haloColor, 0.1),
34365
32711
  hasChildren: isOmRoot ? "false" : "true",
@@ -34378,8 +32724,8 @@ function toCytoscapeElementsWithHealth(graph, graphIndex, tokens2, commandViewHe
34378
32724
  const size = getDegreeWeightedSize(node.kind, degree);
34379
32725
  const theme = nodeThemeByKind[node.kind];
34380
32726
  const health = commandViewHealthByNodeId?.get(node.id) ?? null;
34381
- const fillColor = health && node.kind === "resource" ? mixColors(tokens2.surfaceHover, tokens2.background, 0.76) : theme.background;
34382
- const borderColor = health ? getCommandViewRingColor(health.healthLevel, tokens2) : theme.border;
32727
+ const fillColor = health && node.kind === "resource" ? mixColors(tokens.surfaceHover, tokens.background, 0.76) : theme.background;
32728
+ const borderColor = health ? getCommandViewRingColor(health.healthLevel, tokens) : theme.border;
34383
32729
  const label = truncateGraphLabel(node.label, node.kind === "resource" ? 22 : 30);
34384
32730
  const displayLabel = health ? `${label}
34385
32731
  ${health.summaryLabel}` : label;
@@ -34395,7 +32741,7 @@ ${health.summaryLabel}` : label;
34395
32741
  label: displayLabel,
34396
32742
  fillColor,
34397
32743
  borderColor,
34398
- textColor: health ? tokens2.text : theme.color,
32744
+ textColor: health ? tokens.text : theme.color,
34399
32745
  zoneTint: zoneTint ?? void 0,
34400
32746
  haloColor,
34401
32747
  edgeHaloColor: withAlpha(haloColor, 0.08),
@@ -34413,8 +32759,8 @@ ${health.summaryLabel}` : label;
34413
32759
  target: edge.target,
34414
32760
  kind: "contains",
34415
32761
  label: "",
34416
- strokeColor: mixColors(tokens2.border, tokens2.textDimmed, 0.45),
34417
- edgeHaloColor: withAlpha(tokens2.primary, 0.05),
32762
+ strokeColor: mixColors(tokens.border, tokens.textDimmed, 0.45),
32763
+ edgeHaloColor: withAlpha(tokens.primary, 0.05),
34418
32764
  isExploreBackbone: "true"
34419
32765
  }
34420
32766
  });
@@ -34427,7 +32773,7 @@ ${health.summaryLabel}` : label;
34427
32773
  const edgeId = `expand:${nodeId}:${childId}`;
34428
32774
  if (addedPathNativeExpansionEdgeIds.has(edgeId)) continue;
34429
32775
  addedPathNativeExpansionEdgeIds.add(edgeId);
34430
- const strokeColor = getExploreEdgeColor(nodeId, childId, graphIndex.nodeById, tokens2, graph);
32776
+ const strokeColor = getExploreEdgeColor(nodeId, childId, graphIndex.nodeById, tokens, graph);
34431
32777
  elements.push({
34432
32778
  data: {
34433
32779
  id: edgeId,
@@ -34456,7 +32802,7 @@ ${health.summaryLabel}` : label;
34456
32802
  const edgeId2 = `expand:${nodeId}:${childId}`;
34457
32803
  if (!addedExpansionEdgeIds.has(edgeId2)) {
34458
32804
  addedExpansionEdgeIds.add(edgeId2);
34459
- const strokeColor = getExploreEdgeColor(nodeId, childId, graphIndex.nodeById, tokens2, graph);
32805
+ const strokeColor = getExploreEdgeColor(nodeId, childId, graphIndex.nodeById, tokens, graph);
34460
32806
  elements.push({
34461
32807
  data: {
34462
32808
  id: edgeId2,
@@ -34480,8 +32826,8 @@ ${health.summaryLabel}` : label;
34480
32826
  const size = getDegreeWeightedSize(node.kind, degree);
34481
32827
  const theme = nodeThemeByKind[node.kind];
34482
32828
  const health = commandViewHealthByNodeId?.get(node.id) ?? null;
34483
- const fillColor = health && node.kind === "resource" ? mixColors(tokens2.surfaceHover, tokens2.background, 0.76) : theme.background;
34484
- const borderColor = health ? getCommandViewRingColor(health.healthLevel, tokens2) : theme.border;
32829
+ const fillColor = health && node.kind === "resource" ? mixColors(tokens.surfaceHover, tokens.background, 0.76) : theme.background;
32830
+ const borderColor = health ? getCommandViewRingColor(health.healthLevel, tokens) : theme.border;
34485
32831
  const label = truncateGraphLabel(node.label, node.kind === "resource" ? 22 : 30);
34486
32832
  const displayLabel = health ? `${label}
34487
32833
  ${health.summaryLabel}` : label;
@@ -34497,7 +32843,7 @@ ${health.summaryLabel}` : label;
34497
32843
  label: displayLabel,
34498
32844
  fillColor,
34499
32845
  borderColor,
34500
- textColor: health ? tokens2.text : theme.color,
32846
+ textColor: health ? tokens.text : theme.color,
34501
32847
  zoneTint: zoneTint ?? void 0,
34502
32848
  haloColor,
34503
32849
  edgeHaloColor: withAlpha(haloColor, 0.08),
@@ -34508,7 +32854,7 @@ ${health.summaryLabel}` : label;
34508
32854
  const edgeId = `expand:${nodeId}:${childId}`;
34509
32855
  if (!addedExpansionEdgeIds.has(edgeId)) {
34510
32856
  addedExpansionEdgeIds.add(edgeId);
34511
- const strokeColor = getExploreEdgeColor(nodeId, childId, graphIndex.nodeById, tokens2, graph);
32857
+ const strokeColor = getExploreEdgeColor(nodeId, childId, graphIndex.nodeById, tokens, graph);
34512
32858
  elements.push({
34513
32859
  data: {
34514
32860
  id: edgeId,
@@ -34558,9 +32904,9 @@ ${health.summaryLabel}` : label;
34558
32904
  }
34559
32905
  const domainCardElements = [];
34560
32906
  if (isCluster && domainGroups) {
34561
- const cardBackground = withAlpha(tokens2.surface === "transparent" ? tokens2.background : tokens2.surface, 0.92);
34562
- const cardBorder = mixColors(tokens2.border, tokens2.textDimmed, 0.35);
34563
- const cardText = tokens2.textDimmed;
32907
+ const cardBackground = withAlpha(tokens.surface === "transparent" ? tokens.background : tokens.surface, 0.92);
32908
+ const cardBorder = mixColors(tokens.border, tokens.textDimmed, 0.35);
32909
+ const cardText = tokens.textDimmed;
34564
32910
  for (const [domain, members] of domainGroups) {
34565
32911
  if (!expandedSet.has(domain)) {
34566
32912
  const position = getDomainCardPosition(domain);
@@ -34592,8 +32938,8 @@ ${members.length} node${members.length === 1 ? "" : "s"}`,
34592
32938
  const size = getDegreeWeightedSize(node.kind, degree);
34593
32939
  const theme = nodeThemeByKind[node.kind];
34594
32940
  const health = commandViewHealthByNodeId?.get(node.id) ?? null;
34595
- const fillColor = health && node.kind === "resource" ? mixColors(tokens2.surfaceHover, tokens2.background, 0.76) : theme.background;
34596
- const borderColor = health ? getCommandViewRingColor(health.healthLevel, tokens2) : theme.border;
32941
+ const fillColor = health && node.kind === "resource" ? mixColors(tokens.surfaceHover, tokens.background, 0.76) : theme.background;
32942
+ const borderColor = health ? getCommandViewRingColor(health.healthLevel, tokens) : theme.border;
34597
32943
  const maxLabelLength = node.kind === "resource" ? 22 : 30;
34598
32944
  const label = truncateGraphLabel(node.label, maxLabelLength);
34599
32945
  const displayLabel = health ? `${label}
@@ -34610,7 +32956,7 @@ ${health.summaryLabel}` : label;
34610
32956
  label: displayLabel,
34611
32957
  fillColor,
34612
32958
  borderColor,
34613
- textColor: health ? tokens2.text : theme.color,
32959
+ textColor: health ? tokens.text : theme.color,
34614
32960
  zoneTint: zoneTint ?? void 0,
34615
32961
  haloColor,
34616
32962
  edgeHaloColor: withAlpha(haloColor, 0.08),
@@ -34620,7 +32966,7 @@ ${health.summaryLabel}` : label;
34620
32966
  };
34621
32967
  });
34622
32968
  const edgeElements = graph.edges.filter((edge) => !hiddenBehindCardIds.has(edge.sourceId) && !hiddenBehindCardIds.has(edge.targetId)).map((edge) => {
34623
- const strokeColor = getEdgeColor(edge, tokens2);
32969
+ const strokeColor = getEdgeColor(edge, tokens);
34624
32970
  return {
34625
32971
  data: {
34626
32972
  id: edge.id,
@@ -34679,10 +33025,10 @@ function getLayoutOptions(mode, selectedElement, traceResult) {
34679
33025
  padding: 48
34680
33026
  };
34681
33027
  }
34682
- function createCytoscapeStyle(tokens2, visualizationMode) {
34683
- const selectedBorder = mixColors(tokens2.primary, tokens2.textDimmed, 0.58);
34684
- const traceBorder = mixColors(tokens2.warning, tokens2.border, 0.58);
34685
- const edgeLabelBackground = withAlpha(tokens2.background, 0.86);
33028
+ function createCytoscapeStyle(tokens, visualizationMode) {
33029
+ const selectedBorder = mixColors(tokens.primary, tokens.textDimmed, 0.58);
33030
+ const traceBorder = mixColors(tokens.warning, tokens.border, 0.58);
33031
+ const edgeLabelBackground = withAlpha(tokens.background, 0.86);
34686
33032
  const reducedMotion = shouldReduceGraphMotion();
34687
33033
  const baseEdgeOpacity = visualizationMode === "cluster" || visualizationMode === "swimlane" ? 0.16 : visualizationMode === "focus" ? 0.42 : 0.28;
34688
33034
  return [
@@ -34708,7 +33054,7 @@ function createCytoscapeStyle(tokens2, visualizationMode) {
34708
33054
  padding: "10px",
34709
33055
  "overlay-opacity": 0,
34710
33056
  "text-outline-width": 1,
34711
- "text-outline-color": tokens2.background,
33057
+ "text-outline-color": tokens.background,
34712
33058
  "text-outline-opacity": 0.56,
34713
33059
  "underlay-color": "data(haloColor)",
34714
33060
  "underlay-opacity": 0,
@@ -34879,7 +33225,7 @@ function createCytoscapeStyle(tokens2, visualizationMode) {
34879
33225
  style: {
34880
33226
  width: 1.05,
34881
33227
  label: "",
34882
- color: tokens2.text,
33228
+ color: tokens.text,
34883
33229
  "font-size": 10,
34884
33230
  "font-weight": 700,
34885
33231
  "curve-style": "bezier",
@@ -35040,7 +33386,7 @@ function createCytoscapeStyle(tokens2, visualizationMode) {
35040
33386
  selector: "node.is-trace-endpoint",
35041
33387
  style: {
35042
33388
  opacity: 1,
35043
- "border-color": mixColors(tokens2.warning, tokens2.textDimmed, 0.58),
33389
+ "border-color": mixColors(tokens.warning, tokens.textDimmed, 0.58),
35044
33390
  "border-width": 3
35045
33391
  }
35046
33392
  },
@@ -35075,7 +33421,7 @@ function createCytoscapeStyle(tokens2, visualizationMode) {
35075
33421
  selector: "node.is-expanded-node",
35076
33422
  style: {
35077
33423
  opacity: 1,
35078
- "border-color": mixColors(tokens2.primary, tokens2.warning, 0.42),
33424
+ "border-color": mixColors(tokens.primary, tokens.warning, 0.42),
35079
33425
  "border-width": 2.2,
35080
33426
  "background-opacity": 0.92,
35081
33427
  "underlay-opacity": 0.04,
@@ -38099,8 +36445,8 @@ function countByKind2(resources) {
38099
36445
  }
38100
36446
  return counts;
38101
36447
  }
38102
- function aggregateSystemMetrics(model, systemPath2) {
38103
- if (systemPath2 === "") {
36448
+ function aggregateSystemMetrics(model, systemPath) {
36449
+ if (systemPath === "") {
38104
36450
  const all = Object.values(model.resources ?? {});
38105
36451
  return {
38106
36452
  resourceCount: all.length,
@@ -38114,8 +36460,8 @@ function aggregateSystemMetrics(model, systemPath2) {
38114
36460
  descendantResources: []
38115
36461
  };
38116
36462
  }
38117
- const inclusive = getResourcesForSystem(model, systemPath2, { includeDescendants: true });
38118
- const direct = getResourcesForSystem(model, systemPath2, { includeDescendants: false });
36463
+ const inclusive = getResourcesForSystem(model, systemPath, { includeDescendants: true });
36464
+ const direct = getResourcesForSystem(model, systemPath, { includeDescendants: false });
38119
36465
  const directIds = new Set(direct.map((resource2) => resource2.id));
38120
36466
  const descendant = inclusive.filter((resource2) => !directIds.has(resource2.id));
38121
36467
  return {
@@ -38406,9 +36752,9 @@ function ontologyCounts(model) {
38406
36752
  diagnostics: compiled.diagnostics.length
38407
36753
  };
38408
36754
  }
38409
- function ontologyCountsForSystem(model, systemPath2) {
36755
+ function ontologyCountsForSystem(model, systemPath) {
38410
36756
  const compiled = compileOrganizationOntology(model);
38411
- const belongsToSystem = (ownerSystemId) => systemPath2 === "" || ownerSystemId === systemPath2 || ownerSystemId?.startsWith(`${systemPath2}.`);
36757
+ const belongsToSystem = (ownerSystemId) => systemPath === "" || ownerSystemId === systemPath || ownerSystemId?.startsWith(`${systemPath}.`);
38412
36758
  return {
38413
36759
  objects: Object.values(compiled.ontology.objectTypes).filter((record) => belongsToSystem(record.ownerSystemId)).length,
38414
36760
  actions: Object.values(compiled.ontology.actionTypes).filter((record) => belongsToSystem(record.ownerSystemId)).length,
@@ -38417,11 +36763,11 @@ function ontologyCountsForSystem(model, systemPath2) {
38417
36763
  diagnostics: compiled.diagnostics.length
38418
36764
  };
38419
36765
  }
38420
- function buildBreadcrumbs(model, systemPath2) {
36766
+ function buildBreadcrumbs(model, systemPath) {
38421
36767
  const items = [{ label: "Systems", path: "" }];
38422
- if (!systemPath2) return items;
38423
- const ancestors = getSystemAncestors(model, systemPath2);
38424
- const segments = systemPath2.split(".");
36768
+ if (!systemPath) return items;
36769
+ const ancestors = getSystemAncestors(model, systemPath);
36770
+ const segments = systemPath.split(".");
38425
36771
  for (let i = 0; i < ancestors.length; i++) {
38426
36772
  items.push({
38427
36773
  label: ancestors[i].label ?? ancestors[i].id,
@@ -38430,22 +36776,22 @@ function buildBreadcrumbs(model, systemPath2) {
38430
36776
  }
38431
36777
  return items;
38432
36778
  }
38433
- function kbPathForSystem(systemPath2) {
38434
- if (!systemPath2) return "/knowledge";
38435
- return `/knowledge/by-system/${systemPath2}`;
36779
+ function kbPathForSystem(systemPath) {
36780
+ if (!systemPath) return "/knowledge";
36781
+ return `/knowledge/by-system/${systemPath}`;
38436
36782
  }
38437
- function resourcesPathForSystem(systemPath2) {
38438
- const suffix = systemPath2 ? `?systemPath=${encodeURIComponent(systemPath2)}` : "";
36783
+ function resourcesPathForSystem(systemPath) {
36784
+ const suffix = systemPath ? `?systemPath=${encodeURIComponent(systemPath)}` : "";
38439
36785
  return `/operations/resources${suffix}`;
38440
36786
  }
38441
- function commandViewPathForSystem(systemPath2) {
38442
- const suffix = systemPath2 ? `?systemPath=${encodeURIComponent(systemPath2)}` : "";
36787
+ function commandViewPathForSystem(systemPath) {
36788
+ const suffix = systemPath ? `?systemPath=${encodeURIComponent(systemPath)}` : "";
38443
36789
  return `/knowledge/command-view${suffix}`;
38444
36790
  }
38445
- function childEntries(systemPath2, system, model) {
38446
- const systems = systemPath2 ? childSystemsOf(system) : model.systems;
36791
+ function childEntries(systemPath, system, model) {
36792
+ const systems = systemPath ? childSystemsOf(system) : model.systems;
38447
36793
  return Object.entries(systems).map(([localId, child]) => {
38448
- const path = systemPath2 ? `${systemPath2}.${localId}` : localId;
36794
+ const path = systemPath ? `${systemPath}.${localId}` : localId;
38449
36795
  return {
38450
36796
  path,
38451
36797
  system: child,
@@ -38574,15 +36920,15 @@ function SubsystemCard({
38574
36920
  ] })
38575
36921
  ] }) });
38576
36922
  }
38577
- function RelatedLinks({ systemPath: systemPath2 }) {
36923
+ function RelatedLinks({ systemPath }) {
38578
36924
  return /* @__PURE__ */ jsxs(Group, { gap: "xs", children: [
38579
- /* @__PURE__ */ jsx(Button, { component: "a", href: resourcesPathForSystem(systemPath2), variant: "light", size: "xs", children: "Resources" }),
38580
- /* @__PURE__ */ jsx(Button, { component: "a", href: commandViewPathForSystem(systemPath2), variant: "light", size: "xs", children: "Command View" }),
36925
+ /* @__PURE__ */ jsx(Button, { component: "a", href: resourcesPathForSystem(systemPath), variant: "light", size: "xs", children: "Resources" }),
36926
+ /* @__PURE__ */ jsx(Button, { component: "a", href: commandViewPathForSystem(systemPath), variant: "light", size: "xs", children: "Command View" }),
38581
36927
  /* @__PURE__ */ jsx(
38582
36928
  Button,
38583
36929
  {
38584
36930
  component: "a",
38585
- href: kbPathForSystem(systemPath2),
36931
+ href: kbPathForSystem(systemPath),
38586
36932
  target: "_blank",
38587
36933
  rel: "noreferrer",
38588
36934
  variant: "light",
@@ -38649,17 +36995,17 @@ function SystemsIndex({ model, onNavigate }) {
38649
36995
  }
38650
36996
  function SystemDetail({
38651
36997
  model,
38652
- systemPath: systemPath2,
36998
+ systemPath,
38653
36999
  onNavigate
38654
37000
  }) {
38655
- const currentSystem = getSystem(model, systemPath2);
37001
+ const currentSystem = getSystem(model, systemPath);
38656
37002
  const { timeRange = "30d" } = useElevasisSystems();
38657
37003
  const rollupMode = useSystemsViewState((state) => state.rollupMode);
38658
37004
  const resourceKinds = useSystemsViewState((state) => state.resourceKinds);
38659
- const metrics = aggregateSystemMetrics(model, systemPath2);
37005
+ const metrics = aggregateSystemMetrics(model, systemPath);
38660
37006
  const includeDescendants = rollupMode === "descendants";
38661
37007
  const systemHealthQuery = useSystemHealth({
38662
- systemPath: systemPath2,
37008
+ systemPath,
38663
37009
  timeRange,
38664
37010
  includeDescendants,
38665
37011
  directResources: metrics.directResources,
@@ -38670,11 +37016,11 @@ function SystemDetail({
38670
37016
  const visibleResources = metricResources(metrics, rollupMode).filter(
38671
37017
  (resource2) => resourceKinds.length === 0 || resourceKinds.includes(resource2.kind)
38672
37018
  );
38673
- const children = childEntries(systemPath2, currentSystem, model);
38674
- const breadcrumbs = buildBreadcrumbs(model, systemPath2);
38675
- const scopedOntologyCounts = ontologyCountsForSystem(model, systemPath2);
37019
+ const children = childEntries(systemPath, currentSystem, model);
37020
+ const breadcrumbs = buildBreadcrumbs(model, systemPath);
37021
+ const scopedOntologyCounts = ontologyCountsForSystem(model, systemPath);
38676
37022
  if (!currentSystem) {
38677
- return /* @__PURE__ */ jsx(EmptyState, { icon: IconRoute, title: "System not found", description: `No semantic system exists at ${systemPath2}.` });
37023
+ return /* @__PURE__ */ jsx(EmptyState, { icon: IconRoute, title: "System not found", description: `No semantic system exists at ${systemPath}.` });
38678
37024
  }
38679
37025
  return /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
38680
37026
  /* @__PURE__ */ jsx(Breadcrumbs$1, { children: breadcrumbs.map((crumb, idx) => {
@@ -38688,9 +37034,9 @@ function SystemDetail({
38688
37034
  /* @__PURE__ */ jsx(Title, { order: 1, size: "h3", children: currentSystem.label ?? currentSystem.id }),
38689
37035
  statusBadge(metrics)
38690
37036
  ] }),
38691
- /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: currentSystem.description ?? systemPath2 })
37037
+ /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: currentSystem.description ?? systemPath })
38692
37038
  ] }),
38693
- /* @__PURE__ */ jsx(RelatedLinks, { systemPath: systemPath2 })
37039
+ /* @__PURE__ */ jsx(RelatedLinks, { systemPath })
38694
37040
  ] }),
38695
37041
  /* @__PURE__ */ jsxs(SimpleGrid, { cols: { base: 2, md: 4 }, spacing: "xs", children: [
38696
37042
  /* @__PURE__ */ jsx(
@@ -38759,11 +37105,11 @@ function SystemDetail({
38759
37105
  ] }) })
38760
37106
  ] });
38761
37107
  }
38762
- function SystemOpsView({ model, systemPath: systemPath2, onNavigate }) {
38763
- if (!systemPath2) {
37108
+ function SystemOpsView({ model, systemPath, onNavigate }) {
37109
+ if (!systemPath) {
38764
37110
  return /* @__PURE__ */ jsx(SystemsIndex, { model, onNavigate });
38765
37111
  }
38766
- return /* @__PURE__ */ jsx(SystemDetail, { model, systemPath: systemPath2, onNavigate });
37112
+ return /* @__PURE__ */ jsx(SystemDetail, { model, systemPath, onNavigate });
38767
37113
  }
38768
37114
  function ExecutionLogsPage({
38769
37115
  timeRange,
@@ -39242,15 +37588,15 @@ function ActivityFeed({
39242
37588
  function NotificationCenter({ pageSize = 20 }) {
39243
37589
  const { page, setPage, offset, totalPages } = usePaginationState(pageSize);
39244
37590
  const { data, isLoading } = useNotifications({ limit: pageSize, offset });
39245
- const notifications17 = data?.notifications ?? [];
37591
+ const notifications15 = data?.notifications ?? [];
39246
37592
  const markAllAsRead = useMarkAllAsRead();
39247
- const hasUnread = notifications17.some((n) => !n.read);
37593
+ const hasUnread = notifications15.some((n) => !n.read);
39248
37594
  const handleMarkAllAsRead = async () => {
39249
37595
  await markAllAsRead.mutateAsync();
39250
37596
  };
39251
37597
  return /* @__PURE__ */ jsxs(Fragment, { children: [
39252
37598
  hasUnread && /* @__PURE__ */ jsx(Group, { justify: "flex-end", children: /* @__PURE__ */ jsx(Button, { variant: "light", size: "sm", onClick: handleMarkAllAsRead, loading: markAllAsRead.isPending, children: "Mark all as read" }) }),
39253
- /* @__PURE__ */ jsx(Paper, { children: /* @__PURE__ */ jsx(NotificationList, { notifications: notifications17, isLoading }) }),
37599
+ /* @__PURE__ */ jsx(Paper, { children: /* @__PURE__ */ jsx(NotificationList, { notifications: notifications15, isLoading }) }),
39254
37600
  totalPages(data?.total ?? 0) > 1 && /* @__PURE__ */ jsx(Group, { justify: "flex-start", children: /* @__PURE__ */ jsx(Pagination, { value: page, onChange: setPage, total: totalPages(data?.total ?? 0), size: "sm", boundaries: 1 }) })
39255
37601
  ] });
39256
37602
  }
@@ -40040,21 +38386,14 @@ function MemberAccessModal({ opened, onClose, orgId, member, defaultTab = "roles
40040
38386
  ] }),
40041
38387
  /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: member.email })
40042
38388
  ] }),
40043
- /* @__PURE__ */ jsxs(Tabs, { value: activeTab, onChange: (v) => setActiveTab(v ?? "roles"), children: [
40044
- /* @__PURE__ */ jsxs(Tabs.List, { children: [
40045
- /* @__PURE__ */ jsx(Tabs.Tab, { value: "roles", leftSection: /* @__PURE__ */ jsx(IconShieldLock, { size: 14 }), children: "Roles" }),
40046
- /* @__PURE__ */ jsx(Tabs.Tab, { value: "features", leftSection: /* @__PURE__ */ jsx(IconAdjustments, { size: 14 }), children: "Feature access" })
40047
- ] }),
40048
- /* @__PURE__ */ jsx(Tabs.Panel, { value: "roles", pt: "md", children: /* @__PURE__ */ jsx(RolesTabPanel, { orgId, member, onSaved: onClose }) }),
40049
- /* @__PURE__ */ jsx(Tabs.Panel, { value: "features", pt: "md", children: /* @__PURE__ */ jsx(FeaturesTabPanel, { member, onSaved: onClose }) })
40050
- ] })
38389
+ activeTab === "roles" && /* @__PURE__ */ jsx(RolesTabPanel, { orgId, member, onSaved: onClose })
40051
38390
  ] }) });
40052
38391
  }
40053
38392
  function RolesTabPanel({ orgId, member, onSaved }) {
40054
38393
  const { data: rolesData, isLoading: rolesLoading } = useOrgRoles(orgId ?? void 0);
40055
38394
  const assignMutation = useAssignRole();
40056
38395
  const revokeMutation = useRevokeRole();
40057
- const canManagePrivileged = useHasPermission("roles.manage");
38396
+ const canManagePrivileged = useAccess(AccessKeys.rolesManage).allowed;
40058
38397
  const allRoles = rolesData?.roles ?? [];
40059
38398
  const currentRoleIds = useMemo(() => {
40060
38399
  const matched = allRoles.find((r) => r.slug === member.role);
@@ -40124,43 +38463,6 @@ function RolesTabPanel({ orgId, member, onSaved }) {
40124
38463
  ] })
40125
38464
  ] });
40126
38465
  }
40127
- function FeaturesTabPanel({ member, onSaved }) {
40128
- const [localConfig, setLocalConfig] = useState(member.config);
40129
- const mutation = useUpdateMemberConfig();
40130
- useEffect(() => {
40131
- setLocalConfig(member.config);
40132
- }, [member.config, member.id]);
40133
- const handleSave = async () => {
40134
- if (!localConfig) {
40135
- onSaved();
40136
- return;
40137
- }
40138
- try {
40139
- await mutation.mutateAsync({
40140
- membershipId: member.id,
40141
- config: localConfig
40142
- });
40143
- showSuccessNotification("Feature access updated");
40144
- onSaved();
40145
- } catch {
40146
- }
40147
- };
40148
- return /* @__PURE__ */ jsxs(Stack, { gap: "sm", children: [
40149
- /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "Override which features and surfaces this member can see in the Command Center. Defaults follow the organization's feature configuration." }),
40150
- /* @__PURE__ */ jsx(
40151
- MembershipFeaturePanel,
40152
- {
40153
- currentConfig: localConfig ?? member.config,
40154
- onConfigChange: (newConfig) => setLocalConfig(newConfig),
40155
- disabled: mutation.isPending
40156
- }
40157
- ),
40158
- /* @__PURE__ */ jsxs(Group, { justify: "flex-end", mt: "md", children: [
40159
- /* @__PURE__ */ jsx(Button, { variant: "default", onClick: onSaved, disabled: mutation.isPending, children: "Cancel" }),
40160
- /* @__PURE__ */ jsx(Button, { leftSection: /* @__PURE__ */ jsx(IconCheck, { size: 14 }), loading: mutation.isPending, onClick: handleSave, children: "Save feature access" })
40161
- ] })
40162
- ] });
40163
- }
40164
38466
  function transformMemberForModal(member) {
40165
38467
  const firstName = member.user?.firstName || "";
40166
38468
  const lastName = member.user?.lastName || "";
@@ -40169,8 +38471,7 @@ function transformMemberForModal(member) {
40169
38471
  id: member.id,
40170
38472
  name,
40171
38473
  email: member.user?.email || "Unknown",
40172
- role: member.role.slug,
40173
- config: member.config
38474
+ role: member.role.slug
40174
38475
  };
40175
38476
  }
40176
38477
  function OrgMembersList({ orgId }) {
@@ -40304,60 +38605,6 @@ function OrganizationSettings({ user, currentMembership, isOrgAdmin }) {
40304
38605
  ] }) })
40305
38606
  ] });
40306
38607
  }
40307
- function MemberConfigModal({ opened, onClose, member }) {
40308
- const [localConfig, setLocalConfig] = useState(void 0);
40309
- const mutation = useUpdateMemberConfig();
40310
- useEffect(() => {
40311
- if (member) {
40312
- setLocalConfig(member.config);
40313
- }
40314
- }, [member]);
40315
- useEffect(() => {
40316
- if (!opened) {
40317
- setLocalConfig(void 0);
40318
- }
40319
- }, [opened]);
40320
- if (!member) return null;
40321
- const handleSave = async () => {
40322
- if (!localConfig) {
40323
- onClose();
40324
- return;
40325
- }
40326
- try {
40327
- await mutation.mutateAsync({
40328
- membershipId: member.id,
40329
- config: localConfig
40330
- });
40331
- onClose();
40332
- } catch {
40333
- }
40334
- };
40335
- const handleClose = () => {
40336
- if (!mutation.isPending) {
40337
- onClose();
40338
- }
40339
- };
40340
- return /* @__PURE__ */ jsx(CustomModal, { opened, onClose: handleClose, size: "md", loading: mutation.isPending, children: /* @__PURE__ */ jsxs(Stack, { children: [
40341
- /* @__PURE__ */ jsx(Title, { order: 3, children: "Configure Member Access" }),
40342
- /* @__PURE__ */ jsxs(Group, { gap: "xs", children: [
40343
- /* @__PURE__ */ jsx(Text, { fw: 500, children: member.name }),
40344
- /* @__PURE__ */ jsx(Badge, { variant: "light", size: "sm", children: member.role })
40345
- ] }),
40346
- /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: member.email }),
40347
- /* @__PURE__ */ jsx(
40348
- MembershipFeaturePanel,
40349
- {
40350
- currentConfig: localConfig ?? member.config,
40351
- onConfigChange: (newConfig) => setLocalConfig(newConfig),
40352
- disabled: mutation.isPending
40353
- }
40354
- ),
40355
- /* @__PURE__ */ jsxs(Group, { justify: "space-between", mt: "md", children: [
40356
- /* @__PURE__ */ jsx(Button, { variant: "light", onClick: handleClose, disabled: mutation.isPending, children: "Cancel" }),
40357
- /* @__PURE__ */ jsx(Button, { onClick: handleSave, loading: mutation.isPending, children: "Save Changes" })
40358
- ] })
40359
- ] }) });
40360
- }
40361
38608
  var OAUTH_COMPLETION_CHANNEL = "elevasis-oauth";
40362
38609
  var OAUTH_COMPLETION_STORAGE_KEY = "elevasis:oauth-complete";
40363
38610
  function useOAuthFlow({ apiUrl }) {
@@ -40934,10 +39181,10 @@ function createUseOrganizations(useStore) {
40934
39181
  };
40935
39182
  };
40936
39183
  }
40937
- function createUseOrgInitialization(useOrganizations, useApiClient2) {
39184
+ function createUseOrgInitialization(useOrganizations, useApiClient) {
40938
39185
  return function useOrgInitialization() {
40939
39186
  const { user, organizationId: workosOrgId } = useAuthContext();
40940
- const { apiRequest } = useApiClient2();
39187
+ const { apiRequest } = useApiClient();
40941
39188
  const { profile } = useUserProfile();
40942
39189
  const {
40943
39190
  currentWorkOSOrganizationId,
@@ -41098,4 +39345,4 @@ function createUseOrgInitialization(useOrganizations, useApiClient2) {
41098
39345
  };
41099
39346
  }
41100
39347
 
41101
- export { AbsoluteScheduleForm, AccountSettings, ActionModal, ActivityCard, ActivityFeed, ActivityFeedWidget, ActivityFilters, ActivityLog, ActivityTable, AgentDefinitionDisplay, AgentExecutionLogs, AgentExecutionPanel, AgentExecutionTimeline, AgentExecutionVisualizer, AgentIterationEdge, AgentIterationNode, AgentSessionGroup, AllTasksPage, ApiKeyDisplayModal, ApiKeyList, ApiKeyService, ApiKeySettings, AppErrorBoundary, AppearanceSettings, BaseEdge, BaseExecutionLogs, BaseExecutionLogsHeader, BaseExecutionLogsStates, BaseNode, Breadcrumbs, BusinessImpactCard, CRM_ITEMS, Can, Checklist, CheckpointGroup, CollapsibleJsonSection, CommandQueueDetailPage, CommandQueuePage, CommandQueueShell, CommandQueueSidebar, CommandQueueSidebarMiddle, CommandQueueSidebarTop, CommandQueueTaskRow, CommandViewPage, CompanyDetailPage, ConfigCard, ConfirmationInputModal, ConfirmationModal, ContactDetailPage, ContentSections, ContextUsageBadge, ContractDisplay, ConversationThread, CostAnalytics, CostBreakdownCard, CostByModelTable, CostMetricsCard, CrashErrorFallback, CreateApiKeyModal, CreateCredentialModal, CreateDeliveryEntityModal, CreateRoleModal, CreateScheduleModal, CreateWebhookEndpointModal, CredentialList, CredentialService, CredentialSettings, CrmActionsProvider, CrmOverview, CrmSettingsPage, CrmSidebar, CrmSidebarMiddle, CrmSidebarTop, CustomModal, DEAL_STAGES, DEAL_STAGE_COLORS, DEAL_STAGE_OPTIONS, DEFAULT_KANBAN_CONFIG, DELIVERY_COMMUNICATION_ITEMS, DELIVERY_PROJECT_ITEMS, DELIVERY_WORK_ITEMS, Dashboard, DashboardOperationsOverview, DealDetailPage, DealKanbanCard, DealsListPage, DeleteScheduleModal, DeploymentDetailModal, DeploymentList, DeploymentService, DeploymentSettings, DeploymentStatusBadge, EMPTY_LIST_ACTIONS, EditApiKeyModal, EditCredentialModal, EditWebhookEndpointModal, ElevasisCoreProvider, ElevasisSystemsProvider, ElevasisUIProvider, EmptyVisualizer, ErrorAnalysisCard, ErrorBreakdownTable, ErrorDetailsModal, ErrorReportCard, ExecuteWorkflowModal, ExecutionBreakdownTable, ExecutionErrorSection, ExecutionHealth, ExecutionHealthCard, ExecutionLogsFilters, ExecutionLogsPage, ExecutionLogsTable, ExecutionPanel, ExecutionStats, ExecutionStatusBadge, FilterBar, GraphBackground, GraphContainer, GraphFitViewButton, GraphFitViewHandler, GraphLegend, HealthStatusCard, KanbanBoard, LEAD_GEN_ITEMS, LEAD_GEN_ROUTE_LINKS, LeadGenCompaniesPage, LeadGenContactsPage, LeadGenListDetailPage, LeadGenListsPage, LeadGenOverviewPage, LeadGenRouteShell, LeadGenSidebar, LeadGenSidebarMiddle, LeadGenSidebarTop, ListActionsProvider, ListBuilderIndexPage, ListBuilderPage, LogEntry, LogGroup, MdxRenderer, MemberAccessModal, MemberConfigModal, MembershipFeaturePanel, MembershipStatusBadge, MetricsStrip, MilestoneTimeline, MyTasksPanel, NewKnowledgeMapEdge, NewKnowledgeMapGraph, NewKnowledgeMapNode, NoAccessState, NotificationBell, NotificationCenter, NotificationItem, NotificationList, NotificationPanel, NotificationProvider, OAuthConnectModal, OAuthIntegrationsCard, ORGANIZATION_GRAPH_NODE_KIND_LABELS, ORPHAN_STAGE_ORDER, OperationsOverview, OperationsService, OperationsSidebar, OperationsSidebarMiddle, OperationsSidebarTop, OrgMembersList, OrganizationGraphPage, OrganizationMembershipService, OrganizationMembershipsList, OrganizationProvider, OrganizationSettings, OrganizationSwitcher, OrganizationSwitcherConnected, PIPELINE_FUNNEL_ORDER, PermissionMatrix, PipelineFunnelWidget, ProjectDetailPage, ProjectsListPage, ProjectsSidebar, ProjectsSidebarMiddle, ProjectsSidebarTop, QuickCreateActions, RecentExecutionsByResource, RecurringScheduleForm, RelativeScheduleForm, ResourceDefinitionSection, ResourceDetailPage, ResourceErrorState, ResourceFilter, ResourceHeader, ResourceHealthChart, ResourceHealthPanel, ResourceNotFoundState, ResourceOverview, ResourcesPage, ResourcesSidebar, RichTextEditor, RoleBadge, RunResourceButton, SAVED_VIEW_PRESETS, SavedViewsPanel, ScheduleCard, ScheduleDetailModal, ScheduleTypeSelector, SessionChatArea, SessionChatInterface, SessionChatPage, SessionDetailsSidebar, SessionExecutionLogs, SessionHeader, SessionListItem, SessionMemory, SessionsPage, SessionsSidebar, SortableHeader, StepConfigForm, SystemOpsView, SystemShell, TabSection, TableSelectionToolbar, TaskCard, TaskScheduler, TimelineAxis, TimelineBar, TimelineContainer, TimelineRow, ToolsListDisplay, UnifiedWorkflowEdge, UnifiedWorkflowGraph, UnifiedWorkflowNode, UnresolvedErrorsTeaser, UpcomingMilestonesPage, VisualizerContainer, WebhookEndpointList, WebhookEndpointService, WebhookEndpointSettings, WebhookUrlDisplayModal, WorkflowDefinitionDisplay, WorkflowExecutionLogs, WorkflowExecutionPanel, WorkflowExecutionTimeline, ZodFormRenderer, acquisitionListKeys, aggregateSystemMetrics, buildErrorReport, calculateProgress, clientsKeys, collectResourceFilterFacets, companyKeys, contactKeys, createFeatureAccessHook, createOrganizationsSlice, createTestSystemsProvider, createUseOrgInitialization, createUseOrganizations, crmManifest, crmPrioritySettingsKeys, dealKeys, dealNoteKeys, dealTaskKeys, deliveryManifest, deriveBusinessProgress, executionsKeys, filterByDomainFilters, findListActionByAction, formatDate3 as formatDate, formatDealStageLabel, formatResourceAttribution, formatStatusLabel, getEnrichmentColor, getEnrichmentStatus, getExecutionStatusConfig, getGraphBackgroundStyles, getHealthColor, getIcon, getListActionWorkflowId, getLogLevelConfig, getResourceFilterFacetIds, getStateKeyColor, getStatusColor4 as getStatusColor, getStepActionLabel, iconMap, isSessionCapable, labelResourceFilterFacet, leadGenArtifactKeys, leadGenListCompanyKeys, leadGenListMemberKeys, leadGenManifest, mdxComponents, milestoneKeys, milestoneStatusColors, monitoringManifest, noteKeys, noteTypeColors, operationsKeys, operationsManifest, projectActivityKeys, projectKeys, projectStatusColors, requestsKeys, resolveBuildPlanSteps, resolveBuildState, scheduleKeys, sessionsKeys, settingsManifest, showApiErrorNotification, showAuthError, showErrorNotification, showInfoNotification, showSuccessNotification, showWarningNotification, sortData, sortStageKeys, taskKeys, taskStatusColors, taskTypeColors, useActivateDeployment, useActivities, useActivitiesRealtime, useActivityFilters, useActivityTrend, useAddCompaniesToList, useAddContactsToList, useArchiveSession, useArchivedLogs, useArtifacts, useAssignRole, useBatchDelete, useBatchTelemetry, useBatchedResourcesHealth, useBreadcrumbs, useBulkDeleteExecutions, useBusinessImpact, useCancelExecution, useCancelSchedule, useCheckpointTasks, useClient, useClientStatus, useClients, useCommandQueue, useCommandQueueTotals, useCommandViewData, useCommandViewDomainFilters, useCommandViewStats, useCommandViewStore, useCompanies, useCompany, useCompanyFacets, useCompleteDealTask, useContact, useContacts, useCostBreakdown, useCostByModel, useCostSummary, useCostTrends, useCreateApiKey, useCreateArtifact, useCreateClient, useCreateCompany, useCreateContact, useCreateCredential, useCreateDealNote, useCreateDealTask, useCreateList, useCreateMilestone, useCreateNote, useCreateOrgRole, useCreateProject, useCreateSchedule, useCreateSession, useCreateTask, useCreateWebhookEndpoint, useCredentials, useCrmActions, useCrmPipelineSummary, useCrmPrioritySettings, useCrmQuickMetrics, useDashboardMetrics, useDeactivateDeployment, useDeactivateMembership, useDealDetail, useDealNotes, useDealTasks, useDealTasksDue, useDeals, useDealsLookup, useDealsSummary, useDeleteApiKey, useDeleteClient, useDeleteCompanies, useDeleteContacts, useDeleteCredential, useDeleteDeal, useDeleteDeployment, useDeleteExecution, useDeleteList, useDeleteLists, useDeleteMilestone, useDeleteOrgRole, useDeleteProject, useDeleteRequest, useDeleteSchedule, useDeleteSession, useDeleteTask, useDeleteTask2, useDeleteWebhookEndpoint, useDeriveActions, useEffectivePermissions, useElevasisSystems, useErrorAnalysis, useErrorDetail, useErrorDetails, useErrorDistribution, useErrorNotification, useExecuteAction, useExecuteAsync, useExecuteResource, useExecution, useExecutionHealth, useExecutionLogSSE, useExecutionLogs, useExecutionLogsFilters, useExecutionPanelState, useExecutionSSE, useExecutions, useGetExecutionHistory, useGetSchedule, useGraphBackgroundStyles, useGraphTheme, useHasPermission, useInFlightExecutions, useLeadGenConfig, useList, useListActions, useListApiKeys, useListDeployments, useListExecutions, useListMember, useListMembers, useListProgress, useListRecords, useListSchedules, useListWebhookEndpoints, useLists, useListsTelemetry, useMarkAllAsRead, useMarkAsRead, useMilestones, useNewKnowledgeMapLayout, useNotificationAdapter, useNotificationCount, useNotifications, useOptionalElevasisSystems, useOrgRoles, useOrganizationMembers, useOrganizationPermissions, usePaginationState, usePatchTask, usePauseSchedule, usePermissionCatalog, useProject, useProjectActivities, useProjectMilestones, useProjectNotes, useProjectRealtime, useProjectTasks, useProjects, useReactivateMembership, useRecentCrmActivity, useRecentExecutionsByResource, useRemoveCompaniesFromList, useRequest, useRequestsList, useResetCrmPrioritySettings, useResolveAllErrors, useResolveError, useResolveErrorsByExecution, useResolvedOrganizationModel, useResourceDefinition, useResourceErrors, useResourceExecutions, useResourceSearch, useResources, useResourcesDomainFilters, useResourcesHealth, useResumeSchedule, useRetryExecution, useRevokeRole, useSSEConnection, useScheduledTasks, useSession, useSessionExecution, useSessionExecutions, useSessionMessages, useSessionWebSocket, useSessions, useSortedData, useStatusFilter, useSubmitAction, useSuccessNotification, useSystemHealth, useTableSelection, useTableSort, useTasks, useTestNotification, useTimeRangeDates, useTopFailingResources, useTransitionItem, useTransitionListCompany, useTransitionListMember, useTransitionState, useUnresolveError, useUnresolvedErrors, useUpdateAnchor, useUpdateApiKey, useUpdateClient, useUpdateCompany, useUpdateContact, useUpdateCredential, useUpdateCrmPrioritySettings, useUpdateList, useUpdateListConfig, useUpdateListStatus, useUpdateMemberConfig, useUpdateMilestone, useUpdateOrgRole, useUpdateProject, useUpdateRequestStatus, useUpdateSchedule, useUpdateTask, useUpdateWebhookEndpoint, useUserMemberships, useVerifyCredential, useVisibleResources, useWarningNotification, useWorkflowExecution };
39348
+ export { AbsoluteScheduleForm, AccountSettings, ActionModal, ActivityCard, ActivityFeed, ActivityFeedWidget, ActivityFilters, ActivityLog, ActivityTable, AgentDefinitionDisplay, AgentExecutionLogs, AgentExecutionPanel, AgentExecutionTimeline, AgentExecutionVisualizer, AgentIterationEdge, AgentIterationNode, AgentSessionGroup, AllTasksPage, ApiKeyDisplayModal, ApiKeyList, ApiKeyService, ApiKeySettings, AppearanceSettings, BaseEdge, BaseExecutionLogs, BaseExecutionLogsHeader, BaseExecutionLogsStates, BaseNode, Breadcrumbs, BusinessImpactCard, CRM_ITEMS, Checklist, CheckpointGroup, CollapsibleJsonSection, CommandQueueDetailPage, CommandQueuePage, CommandQueueShell, CommandQueueSidebar, CommandQueueSidebarMiddle, CommandQueueSidebarTop, CommandQueueTaskRow, CommandViewPage, CompanyDetailPage, ConfigCard, ConfirmationInputModal, ConfirmationModal, ContactDetailPage, ContentSections, ContextUsageBadge, ContractDisplay, ConversationThread, CostAnalytics, CostBreakdownCard, CostByModelTable, CostMetricsCard, CreateApiKeyModal, CreateCredentialModal, CreateDeliveryEntityModal, CreateRoleModal, CreateScheduleModal, CreateWebhookEndpointModal, CredentialList, CredentialService, CredentialSettings, CrmOverview, CrmSettingsPage, CrmSidebar, CrmSidebarMiddle, CrmSidebarTop, CustomModal, DEAL_STAGES, DEAL_STAGE_COLORS, DEAL_STAGE_OPTIONS, DEFAULT_KANBAN_CONFIG, DELIVERY_COMMUNICATION_ITEMS, DELIVERY_PROJECT_ITEMS, DELIVERY_WORK_ITEMS, Dashboard, DashboardOperationsOverview, DealDetailPage, DealKanbanCard, DealsListPage, DeleteScheduleModal, DeploymentDetailModal, DeploymentList, DeploymentService, DeploymentSettings, DeploymentStatusBadge, EditApiKeyModal, EditCredentialModal, EditWebhookEndpointModal, EmptyVisualizer, ErrorAnalysisCard, ErrorBreakdownTable, ErrorDetailsModal, ExecuteWorkflowModal, ExecutionBreakdownTable, ExecutionErrorSection, ExecutionHealth, ExecutionHealthCard, ExecutionLogsFilters, ExecutionLogsPage, ExecutionLogsTable, ExecutionPanel, ExecutionStats, ExecutionStatusBadge, FilterBar, GraphBackground, GraphContainer, GraphFitViewButton, GraphFitViewHandler, GraphLegend, HealthStatusCard, KanbanBoard, LEAD_GEN_ITEMS, LEAD_GEN_ROUTE_LINKS, LeadGenCompaniesPage, LeadGenContactsPage, LeadGenListDetailPage, LeadGenListsPage, LeadGenOverviewPage, LeadGenRouteShell, LeadGenSidebar, LeadGenSidebarMiddle, LeadGenSidebarTop, ListBuilderIndexPage, ListBuilderPage, LogEntry, LogGroup, MdxRenderer, MemberAccessModal, MembershipStatusBadge, MetricsStrip, MilestoneTimeline, MyTasksPanel, NewKnowledgeMapEdge, NewKnowledgeMapGraph, NewKnowledgeMapNode, NoAccessState, NotificationBell, NotificationCenter, NotificationItem, NotificationList, NotificationPanel, OAuthConnectModal, OAuthIntegrationsCard, ORPHAN_STAGE_ORDER, OperationsOverview, OperationsService, OperationsSidebar, OperationsSidebarMiddle, OperationsSidebarTop, OrgMembersList, OrganizationGraphPage, OrganizationMembershipService, OrganizationMembershipsList, OrganizationSettings, OrganizationSwitcher, OrganizationSwitcherConnected, PIPELINE_FUNNEL_ORDER, PermissionMatrix, PipelineFunnelWidget, ProjectDetailPage, ProjectsListPage, ProjectsSidebar, ProjectsSidebarMiddle, ProjectsSidebarTop, QuickCreateActions, RecentExecutionsByResource, RecurringScheduleForm, RelativeScheduleForm, ResourceDefinitionSection, ResourceDetailPage, ResourceErrorState, ResourceFilter, ResourceHeader, ResourceHealthChart, ResourceHealthPanel, ResourceNotFoundState, ResourceOverview, ResourcesPage, ResourcesSidebar, RichTextEditor, RoleBadge, RunResourceButton, SAVED_VIEW_PRESETS, SavedViewsPanel, ScheduleCard, ScheduleDetailModal, ScheduleTypeSelector, SessionChatArea, SessionChatInterface, SessionChatPage, SessionDetailsSidebar, SessionExecutionLogs, SessionHeader, SessionListItem, SessionMemory, SessionsPage, SessionsSidebar, SortableHeader, StepConfigForm, SystemOpsView, TabSection, TableSelectionToolbar, TaskCard, TaskScheduler, TimelineAxis, TimelineBar, TimelineContainer, TimelineRow, ToolsListDisplay, UnifiedWorkflowEdge, UnifiedWorkflowGraph, UnifiedWorkflowNode, UnresolvedErrorsTeaser, UpcomingMilestonesPage, VisualizerContainer, WebhookEndpointList, WebhookEndpointService, WebhookEndpointSettings, WebhookUrlDisplayModal, WorkflowDefinitionDisplay, WorkflowExecutionLogs, WorkflowExecutionPanel, WorkflowExecutionTimeline, ZodFormRenderer, acquisitionListKeys, aggregateSystemMetrics, calculateProgress, clientsKeys, collectResourceFilterFacets, companyKeys, contactKeys, createOrganizationsSlice, createUseOrgInitialization, createUseOrganizations, crmManifest, crmPrioritySettingsKeys, dealKeys, dealNoteKeys, dealTaskKeys, deliveryManifest, deriveBusinessProgress, executionsKeys, filterByDomainFilters, formatDate3 as formatDate, formatDealStageLabel, formatResourceAttribution, formatStatusLabel, getEnrichmentColor, getEnrichmentStatus, getExecutionStatusConfig, getGraphBackgroundStyles, getHealthColor, getIcon, getLeadGenExportWorkflowId, getLogLevelConfig, getResourceFilterFacetIds, getStateKeyColor, getStatusColor4 as getStatusColor, getStepActionLabel, iconMap, isLeadGenExportAction, isSessionCapable, labelResourceFilterFacet, leadGenArtifactKeys, leadGenListCompanyKeys, leadGenListMemberKeys, leadGenManifest, mdxComponents, milestoneKeys, milestoneStatusColors, monitoringManifest, noteKeys, noteTypeColors, operationsKeys, operationsManifest, projectActivityKeys, projectKeys, projectStatusColors, requestsKeys, resolveBuildPlanSteps, resolveBuildState, scheduleKeys, sessionsKeys, settingsManifest, showApiErrorNotification, showAuthError, showErrorNotification, showInfoNotification, showSuccessNotification, showWarningNotification, sortData, sortStageKeys, taskKeys, taskStatusColors, taskTypeColors, useActivateDeployment, useActivities, useActivitiesRealtime, useActivityFilters, useActivityTrend, useAddCompaniesToList, useAddContactsToList, useArchiveSession, useArchivedLogs, useArtifacts, useAssignRole, useBatchDelete, useBatchTelemetry, useBatchedResourcesHealth, useBulkDeleteExecutions, useBusinessImpact, useCancelExecution, useCancelSchedule, useCheckpointTasks, useClient, useClientStatus, useClients, useCommandQueue, useCommandQueueTotals, useCommandViewData, useCommandViewDomainFilters, useCommandViewStats, useCommandViewStore, useCompanies, useCompany, useCompanyFacets, useCompleteDealTask, useContact, useContacts, useCostBreakdown, useCostByModel, useCostSummary, useCostTrends, useCreateApiKey, useCreateArtifact, useCreateClient, useCreateCompany, useCreateContact, useCreateCredential, useCreateDealNote, useCreateDealTask, useCreateList, useCreateMilestone, useCreateNote, useCreateOrgRole, useCreateProject, useCreateSchedule, useCreateSession, useCreateTask, useCreateWebhookEndpoint, useCredentials, useCrmPipelineSummary, useCrmPrioritySettings, useCrmQuickMetrics, useDashboardMetrics, useDeactivateDeployment, useDeactivateMembership, useDealDetail, useDealNotes, useDealTasks, useDealTasksDue, useDeals, useDealsLookup, useDealsSummary, useDeleteApiKey, useDeleteClient, useDeleteCompanies, useDeleteContacts, useDeleteCredential, useDeleteDeal, useDeleteDeployment, useDeleteExecution, useDeleteList, useDeleteLists, useDeleteMilestone, useDeleteOrgRole, useDeleteProject, useDeleteRequest, useDeleteSchedule, useDeleteSession, useDeleteTask, useDeleteTask2, useDeleteWebhookEndpoint, useDeriveActions, useEffectivePermissions, useErrorAnalysis, useErrorDetail, useErrorDetails, useErrorDistribution, useErrorNotification, useExecuteAction, useExecuteAsync, useExecuteResource, useExecution, useExecutionHealth, useExecutionLogSSE, useExecutionLogs, useExecutionLogsFilters, useExecutionPanelState, useExecutionSSE, useExecutions, useGetExecutionHistory, useGetSchedule, useGraphBackgroundStyles, useGraphTheme, useInFlightExecutions, useLeadGenConfig, useList, useListApiKeys, useListDeployments, useListExecutions, useListMember, useListMembers, useListProgress, useListRecords, useListSchedules, useListWebhookEndpoints, useLists, useListsTelemetry, useMarkAllAsRead, useMarkAsRead, useMilestones, useNewKnowledgeMapLayout, useNotificationCount, useNotifications, useOrgRoles, useOrganizationMembers, usePaginationState, usePatchTask, usePauseSchedule, usePermissionCatalog, useProject, useProjectActivities, useProjectMilestones, useProjectNotes, useProjectRealtime, useProjectTasks, useProjects, useReactivateMembership, useRecentCrmActivity, useRecentExecutionsByResource, useRemoveCompaniesFromList, useRequest, useRequestsList, useResetCrmPrioritySettings, useResolveAllErrors, useResolveError, useResolveErrorsByExecution, useResourceDefinition, useResourceErrors, useResourceExecutions, useResourceSearch, useResources, useResourcesDomainFilters, useResourcesHealth, useResumeSchedule, useRetryExecution, useRevokeRole, useSSEConnection, useScheduledTasks, useSession, useSessionExecution, useSessionExecutions, useSessionMessages, useSessionWebSocket, useSessions, useSortedData, useStatusFilter, useSubmitAction, useSuccessNotification, useSystemHealth, useTableSelection, useTableSort, useTasks, useTestNotification, useTimeRangeDates, useTopFailingResources, useTransitionItem, useTransitionListCompany, useTransitionListMember, useTransitionState, useUnresolveError, useUnresolvedErrors, useUpdateAnchor, useUpdateApiKey, useUpdateClient, useUpdateCompany, useUpdateContact, useUpdateCredential, useUpdateCrmPrioritySettings, useUpdateList, useUpdateListConfig, useUpdateListStatus, useUpdateMilestone, useUpdateOrgRole, useUpdateProject, useUpdateRequestStatus, useUpdateSchedule, useUpdateTask, useUpdateWebhookEndpoint, useUserMemberships, useVerifyCredential, useVisibleResources, useWarningNotification, useWorkflowExecution };