@elevasis/ui 2.36.0 → 2.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/index.js +4 -3
- package/dist/app/index.css +0 -384
- package/dist/app/index.d.ts +75 -2
- package/dist/app/index.js +22 -21
- package/dist/auth/index.d.ts +91 -28
- package/dist/auth/index.js +5 -1
- package/dist/charts/index.js +9 -3
- package/dist/chunk-4O3VAALW.js +349 -0
- package/dist/{chunk-O2Q4VMRN.js → chunk-566XWGPP.js} +76 -109
- package/dist/chunk-5EYJ2GIN.js +122 -0
- package/dist/chunk-6D4LCJ52.js +10 -0
- package/dist/chunk-6ROXVZ3L.js +9 -0
- package/dist/{chunk-YYX7OPZQ.js → chunk-73EWE2EW.js} +1 -1
- package/dist/{chunk-SIQ3P4OR.js → chunk-7GQFIWP4.js} +8 -756
- package/dist/{chunk-VKIZUUPM.js → chunk-7YXZFS56.js} +31 -14
- package/dist/{chunk-AKW7KISS.js → chunk-7ZWXTH5J.js} +2 -44
- package/dist/chunk-A7IG36LB.js +215 -0
- package/dist/chunk-B2DZLPDL.js +39 -0
- package/dist/chunk-C6BDBZRO.js +422 -0
- package/dist/chunk-CLDCYJQT.js +1 -0
- package/dist/{chunk-LUYVRATI.js → chunk-DA6I5VEY.js} +5 -213
- package/dist/chunk-H2MEFUQD.js +337 -0
- package/dist/chunk-I53EX4VU.js +734 -0
- package/dist/chunk-IIMU5YAJ.js +53 -0
- package/dist/chunk-JXVNHVK7.js +79 -0
- package/dist/chunk-M7Q4UBRY.js +85 -0
- package/dist/{chunk-K4UZU3TU.js → chunk-P34FFSOX.js} +1 -1
- package/dist/chunk-PGWANFNE.js +112 -0
- package/dist/{chunk-F6EFC2MJ.js → chunk-Q64E2TZY.js} +440 -2075
- package/dist/chunk-S3XR4II4.js +30 -0
- package/dist/chunk-SHZT7ULK.js +425 -0
- package/dist/{chunk-GX6XBRRF.js → chunk-TYRUKGGD.js} +2 -1
- package/dist/{chunk-R3VCBZDC.js → chunk-X4WBGKJQ.js} +3 -50
- package/dist/{chunk-GEFWMU26.js → chunk-X66MVMZT.js} +1 -9
- package/dist/{chunk-57OZ3AEG.js → chunk-Y3JQBSKQ.js} +1 -1
- package/dist/components/index.d.ts +74 -42
- package/dist/components/index.js +34 -19
- package/dist/components/navigation/index.js +3 -31
- package/dist/features/auth/index.d.ts +97 -99
- package/dist/features/auth/index.js +37 -99
- package/dist/features/clients/index.js +34 -19
- package/dist/features/crm/index.d.ts +65 -0
- package/dist/features/crm/index.js +34 -19
- package/dist/features/dashboard/index.js +34 -19
- package/dist/features/delivery/index.d.ts +65 -0
- package/dist/features/delivery/index.js +34 -19
- package/dist/features/knowledge/index.js +6 -30
- package/dist/features/lead-gen/index.d.ts +1096 -1
- package/dist/features/lead-gen/index.js +34 -19
- package/dist/features/monitoring/index.js +34 -19
- package/dist/features/monitoring/requests/index.js +34 -19
- package/dist/features/notes/index.d.ts +72 -0
- package/dist/features/notes/index.js +621 -0
- package/dist/features/operations/index.d.ts +10 -2
- package/dist/features/operations/index.js +34 -19
- package/dist/features/right-panel-host/index.d.ts +214 -0
- package/dist/features/right-panel-host/index.js +639 -0
- package/dist/features/seo/index.js +3 -2
- package/dist/features/settings/index.d.ts +68 -35
- package/dist/features/settings/index.js +34 -19
- package/dist/hooks/access/index.d.ts +90 -0
- package/dist/hooks/access/index.js +10 -0
- package/dist/hooks/delivery/index.d.ts +65 -0
- package/dist/hooks/delivery/index.js +34 -19
- package/dist/hooks/index.d.ts +1644 -1651
- package/dist/hooks/index.js +34 -19
- package/dist/hooks/published.d.ts +1644 -1651
- package/dist/hooks/published.js +34 -19
- package/dist/hooks/user-notes/index.d.ts +57 -0
- package/dist/hooks/user-notes/index.js +3 -0
- package/dist/index.d.ts +294 -277
- package/dist/index.js +35 -20
- package/dist/initialization/index.d.ts +65 -19
- package/dist/knowledge/index.d.ts +10 -2
- package/dist/knowledge/index.js +173 -28
- package/dist/layout/index.js +5 -3
- package/dist/organization/index.d.ts +0 -19
- package/dist/organization/index.js +34 -19
- package/dist/profile/index.d.ts +65 -0
- package/dist/provider/index.css +0 -384
- package/dist/provider/index.d.ts +75 -2
- package/dist/provider/index.js +16 -21
- package/dist/provider/published.css +0 -523
- package/dist/provider/published.d.ts +75 -2
- package/dist/provider/published.js +11 -21
- package/dist/supabase/index.d.ts +127 -0
- package/dist/test-utils/index.d.ts +2 -21
- package/dist/test-utils/index.js +5 -18
- package/dist/theme/index.js +3 -1
- package/dist/types/index.d.ts +115 -59
- package/dist/utils/index.js +2 -1
- package/package.json +21 -5
- package/src/auth/README.md +6 -6
- package/dist/components/navigation/index.css +0 -649
- package/dist/features/knowledge/index.css +0 -649
|
@@ -1,40 +1,47 @@
|
|
|
1
|
+
import { useAvailablePresets } from './chunk-B2DZLPDL.js';
|
|
2
|
+
import { useSupabase } from './chunk-BRXELOHC.js';
|
|
3
|
+
import { useBreadcrumbs } from './chunk-M7Q4UBRY.js';
|
|
1
4
|
import { ChatHeader, ChatSidebar } from './chunk-CXY7FMUM.js';
|
|
2
|
-
import { observabilityKeys, useCyberColors,
|
|
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-7ZWXTH5J.js';
|
|
13
|
+
import { useNotificationAdapter, useCrmActions, useListActions } from './chunk-H2MEFUQD.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 {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
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 {
|
|
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-
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
+
import { useStableAccessToken } from './chunk-7YXZFS56.js';
|
|
24
|
+
import { useAccess, AccessKeys } from './chunk-4O3VAALW.js';
|
|
25
|
+
import { useOptionalElevasisSystems, useElevasisSystems } from './chunk-C6BDBZRO.js';
|
|
26
|
+
import { useInitialization } from './chunk-533DUEQY.js';
|
|
27
|
+
import { defineEntities, OrgKnowledgeNodeSchema, defineResources, defineActions, defineTopology, topologyRef, resolveOrganizationModel, listAllSystems, projectOrganizationSurfaces, topologyRelationship, PROJECTS_VIEW_ACTION_ID, resolveSemanticIconComponent, getAllBuildTemplates, getLeadGenStageCatalog, buildOrganizationGraph, getResourcesForSystem, getSystem, SemanticIcon, compileOrganizationOntology, getSystemAncestors } from './chunk-566XWGPP.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 {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
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
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
-
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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
|
-
|
|
100
|
+
onChange(selectedKeys.filter((k) => k !== key));
|
|
121
101
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
-
|
|
143
|
-
}
|
|
144
|
-
|
|
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
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
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/
|
|
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,
|
|
@@ -3603,7 +2811,11 @@ function useInFlightExecutions(resourceId, options = {}) {
|
|
|
3603
2811
|
const limit = options.limit ?? 20;
|
|
3604
2812
|
const offset = options.offset ?? 0;
|
|
3605
2813
|
return useQuery({
|
|
3606
|
-
|
|
2814
|
+
// eslint-disable-next-line @tanstack/query/exhaustive-deps -- resourceId/limit/offset/listId are already folded into the executions key builders; the rule can't trace through them
|
|
2815
|
+
queryKey: options.listId ? [
|
|
2816
|
+
...acquisitionListKeys.executions(workOSOrganizationId, options.listId, { resourceId, limit }),
|
|
2817
|
+
"in-flight"
|
|
2818
|
+
] : [...executionsKeys.executions(workOSOrganizationId, resourceId, "all", limit, offset), "in-flight"],
|
|
3607
2819
|
queryFn: async () => {
|
|
3608
2820
|
if (options.listId) {
|
|
3609
2821
|
const executions2 = await apiRequest(
|
|
@@ -3718,269 +2930,6 @@ function useWorkflowExecution({ workflowId, listId }) {
|
|
|
3718
2930
|
reset: mutation.reset
|
|
3719
2931
|
};
|
|
3720
2932
|
}
|
|
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
2933
|
function useSSEConnection({
|
|
3985
2934
|
manager,
|
|
3986
2935
|
connectionKey,
|
|
@@ -5109,7 +4058,7 @@ function buildResourceSetKey(directResources, descendantResources) {
|
|
|
5109
4058
|
].sort().join(",");
|
|
5110
4059
|
}
|
|
5111
4060
|
function useSystemHealth({
|
|
5112
|
-
systemPath
|
|
4061
|
+
systemPath,
|
|
5113
4062
|
timeRange,
|
|
5114
4063
|
includeDescendants = true,
|
|
5115
4064
|
directResources,
|
|
@@ -5126,7 +4075,7 @@ function useSystemHealth({
|
|
|
5126
4075
|
return useQuery({
|
|
5127
4076
|
queryKey: observabilityKeys.systemHealth(
|
|
5128
4077
|
workOSOrganizationId,
|
|
5129
|
-
|
|
4078
|
+
systemPath,
|
|
5130
4079
|
timeRange,
|
|
5131
4080
|
includeDescendants,
|
|
5132
4081
|
includeDescendants ? "descendants" : "direct",
|
|
@@ -5140,7 +4089,7 @@ function useSystemHealth({
|
|
|
5140
4089
|
return apiRequest("/observability/system-health", {
|
|
5141
4090
|
method: "POST",
|
|
5142
4091
|
body: JSON.stringify({
|
|
5143
|
-
systemPath
|
|
4092
|
+
systemPath,
|
|
5144
4093
|
includeDescendants,
|
|
5145
4094
|
startDate,
|
|
5146
4095
|
endDate,
|
|
@@ -6805,10 +5754,10 @@ function useDeleteCompanies() {
|
|
|
6805
5754
|
const queryClient = useQueryClient();
|
|
6806
5755
|
return useMutation({
|
|
6807
5756
|
mutationFn: async (companyIds) => {
|
|
6808
|
-
const
|
|
6809
|
-
if (
|
|
5757
|
+
const uniqueIds = [...new Set(companyIds)].filter(Boolean);
|
|
5758
|
+
if (uniqueIds.length === 0) return;
|
|
6810
5759
|
await Promise.all(
|
|
6811
|
-
|
|
5760
|
+
uniqueIds.map(
|
|
6812
5761
|
(companyId) => apiRequest(`/acquisition/companies/${companyId}`, {
|
|
6813
5762
|
method: "DELETE"
|
|
6814
5763
|
})
|
|
@@ -6956,10 +5905,10 @@ function useDeleteContacts() {
|
|
|
6956
5905
|
const queryClient = useQueryClient();
|
|
6957
5906
|
return useMutation({
|
|
6958
5907
|
mutationFn: async (contactIds) => {
|
|
6959
|
-
const
|
|
6960
|
-
if (
|
|
5908
|
+
const uniqueIds = [...new Set(contactIds)].filter(Boolean);
|
|
5909
|
+
if (uniqueIds.length === 0) return;
|
|
6961
5910
|
await Promise.all(
|
|
6962
|
-
|
|
5911
|
+
uniqueIds.map(
|
|
6963
5912
|
(contactId) => apiRequest(`/acquisition/contacts/${contactId}`, {
|
|
6964
5913
|
method: "DELETE"
|
|
6965
5914
|
})
|
|
@@ -7666,32 +6615,6 @@ function useUserMemberships(userId, params) {
|
|
|
7666
6615
|
gcTime: GC_TIME_MEDIUM
|
|
7667
6616
|
});
|
|
7668
6617
|
}
|
|
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
6618
|
function useDeactivateMembership() {
|
|
7696
6619
|
const { apiRequest } = useElevasisServices();
|
|
7697
6620
|
const adapter = useNotificationAdapter();
|
|
@@ -8611,18 +7534,18 @@ function NotificationItem({ notification, onClose, onNavigate }) {
|
|
|
8611
7534
|
}
|
|
8612
7535
|
);
|
|
8613
7536
|
}
|
|
8614
|
-
function NotificationList({ notifications:
|
|
7537
|
+
function NotificationList({ notifications: notifications15, isLoading, onClose, onNavigate }) {
|
|
8615
7538
|
if (isLoading) {
|
|
8616
7539
|
return /* @__PURE__ */ jsx(Center, { p: "xl", children: /* @__PURE__ */ jsx(Loader, { size: "sm" }) });
|
|
8617
7540
|
}
|
|
8618
|
-
if (
|
|
7541
|
+
if (notifications15.length === 0) {
|
|
8619
7542
|
return /* @__PURE__ */ jsx(Center, { p: "xl", children: /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "No notifications" }) });
|
|
8620
7543
|
}
|
|
8621
|
-
return /* @__PURE__ */ jsx(Stack, { gap: 0, children:
|
|
7544
|
+
return /* @__PURE__ */ jsx(Stack, { gap: 0, children: notifications15.map((notification) => /* @__PURE__ */ jsx(NotificationItem, { notification, onClose, onNavigate }, notification.id)) });
|
|
8622
7545
|
}
|
|
8623
|
-
function NotificationPanel({ notifications:
|
|
7546
|
+
function NotificationPanel({ notifications: notifications15, isLoading, onClose, onNavigate }) {
|
|
8624
7547
|
const markAllAsRead = useMarkAllAsRead();
|
|
8625
|
-
const hasUnread =
|
|
7548
|
+
const hasUnread = notifications15.some((n) => !n.read);
|
|
8626
7549
|
const handleMarkAllAsRead = async () => {
|
|
8627
7550
|
await markAllAsRead.mutateAsync();
|
|
8628
7551
|
};
|
|
@@ -8635,7 +7558,7 @@ function NotificationPanel({ notifications: notifications17, isLoading, onClose,
|
|
|
8635
7558
|
/* @__PURE__ */ jsx(ScrollArea, { h: 400, type: "auto", children: /* @__PURE__ */ jsx(
|
|
8636
7559
|
NotificationList,
|
|
8637
7560
|
{
|
|
8638
|
-
notifications:
|
|
7561
|
+
notifications: notifications15,
|
|
8639
7562
|
isLoading,
|
|
8640
7563
|
onClose,
|
|
8641
7564
|
onNavigate
|
|
@@ -8656,14 +7579,14 @@ function NotificationBell({ unreadCount, onNavigate }) {
|
|
|
8656
7579
|
staleTime: 3e4
|
|
8657
7580
|
});
|
|
8658
7581
|
const { data, isLoading } = useNotifications({ limit: 20 });
|
|
8659
|
-
const
|
|
7582
|
+
const notifications15 = data?.notifications ?? [];
|
|
8660
7583
|
const count = unreadCount ?? apiCount;
|
|
8661
7584
|
return /* @__PURE__ */ jsxs(Popover, { opened, onChange: toggle, position: "bottom-end", width: 400, children: [
|
|
8662
7585
|
/* @__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
7586
|
/* @__PURE__ */ jsx(Popover.Dropdown, { p: 0, children: /* @__PURE__ */ jsx(
|
|
8664
7587
|
NotificationPanel,
|
|
8665
7588
|
{
|
|
8666
|
-
notifications:
|
|
7589
|
+
notifications: notifications15,
|
|
8667
7590
|
isLoading,
|
|
8668
7591
|
onClose: close,
|
|
8669
7592
|
onNavigate
|
|
@@ -12172,46 +11095,6 @@ function DeploymentSettings() {
|
|
|
12172
11095
|
/* @__PURE__ */ jsx(Paper, { withBorder: true, children: /* @__PURE__ */ jsx(DeploymentList, { deployments, isLoading }) })
|
|
12173
11096
|
] });
|
|
12174
11097
|
}
|
|
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
11098
|
function MembershipStatusBadge({ status, size = "sm", variant = "light" }) {
|
|
12216
11099
|
const getStatusLabel = (status2) => {
|
|
12217
11100
|
switch (status2) {
|
|
@@ -15141,423 +14024,6 @@ function SessionMemory({ memory }) {
|
|
|
15141
14024
|
] })
|
|
15142
14025
|
] });
|
|
15143
14026
|
}
|
|
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
14027
|
function RichTextEditor({ content, onChange, placeholder }) {
|
|
15562
14028
|
const editor = useEditor({
|
|
15563
14029
|
extensions: [
|
|
@@ -15857,13 +14323,123 @@ function DealKanbanCard({ deal, config, onClick, onDragStart, onDragEnd }) {
|
|
|
15857
14323
|
);
|
|
15858
14324
|
}
|
|
15859
14325
|
|
|
14326
|
+
// ../elevasis-core/src/organization-model/entities.ts
|
|
14327
|
+
var ENTITY_ENTRY_INPUTS = [
|
|
14328
|
+
{
|
|
14329
|
+
id: "crm.deal",
|
|
14330
|
+
order: 10,
|
|
14331
|
+
label: "Deal",
|
|
14332
|
+
description: "A CRM opportunity or sales pipeline record.",
|
|
14333
|
+
ownedBySystemId: "sales.crm",
|
|
14334
|
+
table: "crm_deals",
|
|
14335
|
+
stateCatalogId: "crm.pipeline",
|
|
14336
|
+
links: [{ toEntity: "crm.contact", kind: "has-many", via: "deal_contacts", label: "contacts" }]
|
|
14337
|
+
},
|
|
14338
|
+
{
|
|
14339
|
+
id: "crm.contact",
|
|
14340
|
+
order: 20,
|
|
14341
|
+
label: "CRM Contact",
|
|
14342
|
+
description: "A person associated with a CRM relationship or deal.",
|
|
14343
|
+
ownedBySystemId: "sales.crm",
|
|
14344
|
+
table: "crm_contacts"
|
|
14345
|
+
},
|
|
14346
|
+
{
|
|
14347
|
+
id: "leadgen.list",
|
|
14348
|
+
order: 30,
|
|
14349
|
+
label: "Lead List",
|
|
14350
|
+
description: "A prospecting list that groups companies and contacts for acquisition workflows.",
|
|
14351
|
+
ownedBySystemId: "sales.lead-gen",
|
|
14352
|
+
table: "acq_lists",
|
|
14353
|
+
links: [
|
|
14354
|
+
{ toEntity: "leadgen.company", kind: "has-many", via: "acq_list_companies", label: "companies" },
|
|
14355
|
+
{ toEntity: "leadgen.contact", kind: "has-many", via: "acq_list_members", label: "contacts" }
|
|
14356
|
+
]
|
|
14357
|
+
},
|
|
14358
|
+
{
|
|
14359
|
+
id: "leadgen.company",
|
|
14360
|
+
order: 40,
|
|
14361
|
+
label: "Lead Company",
|
|
14362
|
+
description: "A company record sourced, enriched, and qualified during prospecting.",
|
|
14363
|
+
ownedBySystemId: "sales.lead-gen",
|
|
14364
|
+
table: "acq_list_companies",
|
|
14365
|
+
stateCatalogId: "lead-gen.company",
|
|
14366
|
+
links: [
|
|
14367
|
+
{ toEntity: "leadgen.list", kind: "belongs-to", via: "list_id", label: "list" },
|
|
14368
|
+
{ toEntity: "leadgen.contact", kind: "has-many", via: "company_id", label: "contacts" }
|
|
14369
|
+
]
|
|
14370
|
+
},
|
|
14371
|
+
{
|
|
14372
|
+
id: "leadgen.contact",
|
|
14373
|
+
order: 50,
|
|
14374
|
+
label: "Lead Contact",
|
|
14375
|
+
description: "A prospect contact discovered or enriched during lead generation.",
|
|
14376
|
+
ownedBySystemId: "sales.lead-gen",
|
|
14377
|
+
table: "acq_list_members",
|
|
14378
|
+
stateCatalogId: "lead-gen.contact",
|
|
14379
|
+
links: [
|
|
14380
|
+
{ toEntity: "leadgen.list", kind: "belongs-to", via: "list_id", label: "list" },
|
|
14381
|
+
{ toEntity: "leadgen.company", kind: "belongs-to", via: "company_id", label: "company" }
|
|
14382
|
+
]
|
|
14383
|
+
},
|
|
14384
|
+
{
|
|
14385
|
+
id: "delivery.project",
|
|
14386
|
+
order: 60,
|
|
14387
|
+
label: "Project",
|
|
14388
|
+
description: "A client delivery project.",
|
|
14389
|
+
ownedBySystemId: "projects",
|
|
14390
|
+
table: "projects",
|
|
14391
|
+
links: [
|
|
14392
|
+
{ toEntity: "delivery.milestone", kind: "has-many", via: "project_id", label: "milestones" },
|
|
14393
|
+
{ toEntity: "delivery.task", kind: "has-many", via: "project_id", label: "tasks" }
|
|
14394
|
+
]
|
|
14395
|
+
},
|
|
14396
|
+
{
|
|
14397
|
+
id: "delivery.milestone",
|
|
14398
|
+
order: 70,
|
|
14399
|
+
label: "Milestone",
|
|
14400
|
+
description: "A delivery checkpoint within a project.",
|
|
14401
|
+
ownedBySystemId: "projects",
|
|
14402
|
+
table: "project_milestones",
|
|
14403
|
+
links: [
|
|
14404
|
+
{ toEntity: "delivery.project", kind: "belongs-to", via: "project_id", label: "project" },
|
|
14405
|
+
{ toEntity: "delivery.task", kind: "has-many", via: "milestone_id", label: "tasks" }
|
|
14406
|
+
]
|
|
14407
|
+
},
|
|
14408
|
+
{
|
|
14409
|
+
id: "delivery.task",
|
|
14410
|
+
order: 80,
|
|
14411
|
+
label: "Task",
|
|
14412
|
+
description: "A delivery task that can move through the task status catalog.",
|
|
14413
|
+
ownedBySystemId: "projects",
|
|
14414
|
+
table: "project_tasks",
|
|
14415
|
+
stateCatalogId: "delivery.task",
|
|
14416
|
+
links: [
|
|
14417
|
+
{ toEntity: "delivery.project", kind: "belongs-to", via: "project_id", label: "project" },
|
|
14418
|
+
{ toEntity: "delivery.milestone", kind: "belongs-to", via: "milestone_id", label: "milestone" }
|
|
14419
|
+
]
|
|
14420
|
+
}
|
|
14421
|
+
];
|
|
14422
|
+
var ELEVASIS_ORGANIZATION_MODEL_ENTITIES = defineEntities(ENTITY_ENTRY_INPUTS);
|
|
14423
|
+
|
|
15860
14424
|
// ../elevasis-core/src/organization-model/identity.ts
|
|
15861
14425
|
var platformBranding = {
|
|
15862
14426
|
organizationName: "Elevasis",
|
|
15863
14427
|
productName: "Elevasis Command Center",
|
|
15864
|
-
shortName: "Elevasis"
|
|
14428
|
+
shortName: "Elevasis",
|
|
14429
|
+
voice: "Clear, practical, and grounded in the work SMB teams actually need to automate. Elevasis explains complex AI orchestration in plain language, with a bias toward useful outcomes, operational trust, and human control.",
|
|
14430
|
+
tagline: "AI orchestration for SMB teams ready to automate complex work with intelligent agents and workflows.",
|
|
14431
|
+
values: [
|
|
14432
|
+
"Make automation practical for real business work",
|
|
14433
|
+
"Keep humans in control of consequential decisions",
|
|
14434
|
+
"Earn trust through clear systems and observable workflows",
|
|
14435
|
+
"Design agents around outcomes, not novelty",
|
|
14436
|
+
"Respect the constraints of growing SMB teams"
|
|
14437
|
+
]
|
|
15865
14438
|
};
|
|
15866
14439
|
var platformIdentity = {
|
|
14440
|
+
organizationName: "Elevasis",
|
|
14441
|
+
productName: "Elevasis Command Center",
|
|
14442
|
+
shortName: "Elevasis",
|
|
15867
14443
|
mission: "Help SMBs automate complex work using intelligent AI agents and workflows.",
|
|
15868
14444
|
vision: "Become the operating system for the modern AI-driven business.",
|
|
15869
14445
|
legalName: "Elevasis",
|
|
@@ -18316,7 +16892,7 @@ var workflowDisplayMetadataByResourceId = {
|
|
|
18316
16892
|
function titleFromResourceId(resourceId) {
|
|
18317
16893
|
return resourceId.replace(/-workflow$/, "").replace(/[-_]+/g, " ").replace(/\b\w/g, (character) => character.toUpperCase());
|
|
18318
16894
|
}
|
|
18319
|
-
var platformWorkflowResources = platformWorkflowResourceSeeds.map(([id,
|
|
16895
|
+
var platformWorkflowResources = platformWorkflowResourceSeeds.map(([id, systemPath, buildActionKey], index) => {
|
|
18320
16896
|
const codeRefs = platformWorkflowCodeRefs[id];
|
|
18321
16897
|
const ontology = buildActionKey !== void 0 ? workflowOntologyBindingsByBuildActionKey[buildActionKey] : void 0;
|
|
18322
16898
|
const contract = workflowContractsByResourceId[id];
|
|
@@ -18330,10 +16906,10 @@ var platformWorkflowResources = platformWorkflowResourceSeeds.map(([id, systemPa
|
|
|
18330
16906
|
id,
|
|
18331
16907
|
order: (index + 1) * 10,
|
|
18332
16908
|
kind: "workflow",
|
|
18333
|
-
systemPath
|
|
16909
|
+
systemPath,
|
|
18334
16910
|
title,
|
|
18335
16911
|
description: displayMetadata?.description ?? `Workflow resource for ${title}.`,
|
|
18336
|
-
ownerRoleId: getPlatformOwnerRoleId(
|
|
16912
|
+
ownerRoleId: getPlatformOwnerRoleId(systemPath),
|
|
18337
16913
|
status: "active",
|
|
18338
16914
|
...codeRefs ? { codeRefs } : {},
|
|
18339
16915
|
...ontologyWithContract ? { ontology: ontologyWithContract } : {}
|
|
@@ -19821,19 +18397,19 @@ function usesIntegration(key, from, to) {
|
|
|
19821
18397
|
})
|
|
19822
18398
|
];
|
|
19823
18399
|
}
|
|
19824
|
-
function requestsApproval(key, from, checkpointId,
|
|
18400
|
+
function requestsApproval(key, from, checkpointId, systemPath) {
|
|
19825
18401
|
return [
|
|
19826
18402
|
key,
|
|
19827
18403
|
topologyRelationship.requestsApproval(resource(from), checkpointId, {
|
|
19828
|
-
systemPath
|
|
18404
|
+
systemPath
|
|
19829
18405
|
})
|
|
19830
18406
|
];
|
|
19831
18407
|
}
|
|
19832
|
-
function checkpointRoutesTo(key, checkpointId, to,
|
|
18408
|
+
function checkpointRoutesTo(key, checkpointId, to, systemPath) {
|
|
19833
18409
|
return [
|
|
19834
18410
|
key,
|
|
19835
18411
|
topologyRelationship.checkpointRoutesTo(checkpointId, resource(to), {
|
|
19836
|
-
systemPath
|
|
18412
|
+
systemPath
|
|
19837
18413
|
})
|
|
19838
18414
|
];
|
|
19839
18415
|
}
|
|
@@ -19964,35 +18540,39 @@ function assignResponsibleRoles(systems) {
|
|
|
19964
18540
|
}
|
|
19965
18541
|
return applyToMap(systems);
|
|
19966
18542
|
}
|
|
19967
|
-
var canonicalOrganizationModel = resolveOrganizationModel(
|
|
19968
|
-
|
|
19969
|
-
|
|
19970
|
-
|
|
19971
|
-
|
|
19972
|
-
|
|
19973
|
-
|
|
19974
|
-
|
|
19975
|
-
|
|
19976
|
-
|
|
19977
|
-
|
|
19978
|
-
|
|
19979
|
-
|
|
19980
|
-
|
|
19981
|
-
|
|
19982
|
-
|
|
19983
|
-
|
|
19984
|
-
|
|
19985
|
-
|
|
19986
|
-
|
|
19987
|
-
|
|
19988
|
-
|
|
19989
|
-
|
|
19990
|
-
|
|
19991
|
-
|
|
19992
|
-
|
|
19993
|
-
|
|
19994
|
-
|
|
19995
|
-
|
|
18543
|
+
var canonicalOrganizationModel = resolveOrganizationModel(
|
|
18544
|
+
{
|
|
18545
|
+
version: 1,
|
|
18546
|
+
// D7: domainMetadata for all 12 domain keys. Date reflects Wave 2 migration (2026-05-11).
|
|
18547
|
+
domainMetadata: {
|
|
18548
|
+
branding: { version: 1, lastModified: "2026-05-11" },
|
|
18549
|
+
identity: { version: 1, lastModified: "2026-05-11" },
|
|
18550
|
+
customers: { version: 1, lastModified: "2026-05-11" },
|
|
18551
|
+
offerings: { version: 1, lastModified: "2026-05-11" },
|
|
18552
|
+
roles: { version: 1, lastModified: "2026-05-11" },
|
|
18553
|
+
goals: { version: 1, lastModified: "2026-05-11" },
|
|
18554
|
+
systems: { version: 1, lastModified: "2026-05-11" },
|
|
18555
|
+
resources: { version: 1, lastModified: "2026-05-11" },
|
|
18556
|
+
actions: { version: 1, lastModified: "2026-05-11" },
|
|
18557
|
+
entities: { version: 1, lastModified: "2026-05-11" },
|
|
18558
|
+
policies: { version: 1, lastModified: "2026-05-11" },
|
|
18559
|
+
knowledge: { version: 1, lastModified: "2026-05-11" },
|
|
18560
|
+
topology: { version: 1, lastModified: "2026-05-14" }
|
|
18561
|
+
},
|
|
18562
|
+
branding: platformBranding,
|
|
18563
|
+
navigation: platformNavigation,
|
|
18564
|
+
identity: platformIdentity,
|
|
18565
|
+
roles: platformRoles,
|
|
18566
|
+
systems: assignResponsibleRoles(platformSystems),
|
|
18567
|
+
actions: ELEVASIS_DEFAULT_ORGANIZATION_MODEL_ACTIONS,
|
|
18568
|
+
entities: ELEVASIS_ORGANIZATION_MODEL_ENTITIES,
|
|
18569
|
+
resources: platformResourceDescriptors,
|
|
18570
|
+
topology: platformTopology,
|
|
18571
|
+
// D3: knowledge is a flat Record<id, OrgKnowledgeNode> — no wrapper object.
|
|
18572
|
+
knowledge: platformKnowledgeNodes
|
|
18573
|
+
},
|
|
18574
|
+
{ mergeDefaults: false }
|
|
18575
|
+
);
|
|
19996
18576
|
var canonicalSystemPaths = new Set(listAllSystems(canonicalOrganizationModel).map(({ path }) => path));
|
|
19997
18577
|
for (const resource2 of Object.values(canonicalOrganizationModel.resources)) {
|
|
19998
18578
|
if (!canonicalSystemPaths.has(resource2.systemPath)) {
|
|
@@ -22560,10 +21140,10 @@ function useDeleteLists() {
|
|
|
22560
21140
|
const queryClient = useQueryClient();
|
|
22561
21141
|
return useMutation({
|
|
22562
21142
|
mutationFn: async (listIds) => {
|
|
22563
|
-
const
|
|
22564
|
-
if (
|
|
21143
|
+
const uniqueIds = [...new Set(listIds)].filter(Boolean);
|
|
21144
|
+
if (uniqueIds.length === 0) return;
|
|
22565
21145
|
await Promise.all(
|
|
22566
|
-
|
|
21146
|
+
uniqueIds.map(
|
|
22567
21147
|
(listId) => apiRequest(`/acquisition/lists/${listId}`, {
|
|
22568
21148
|
method: "DELETE"
|
|
22569
21149
|
})
|
|
@@ -22580,12 +21160,17 @@ function useDeleteLists() {
|
|
|
22580
21160
|
}
|
|
22581
21161
|
});
|
|
22582
21162
|
}
|
|
22583
|
-
function
|
|
22584
|
-
|
|
21163
|
+
function isLeadGenExportAction(action) {
|
|
21164
|
+
if (!action) return false;
|
|
21165
|
+
const ontologyActionSegment = action.split(":action/")[1];
|
|
21166
|
+
if (ontologyActionSegment) {
|
|
21167
|
+
return ontologyActionSegment === "export" || ontologyActionSegment.startsWith("export.") || ontologyActionSegment.startsWith("export-");
|
|
21168
|
+
}
|
|
21169
|
+
return action === "lead-gen.export.list" || action.includes(".export.");
|
|
22585
21170
|
}
|
|
22586
21171
|
function getLeadGenExportWorkflowId(model) {
|
|
22587
21172
|
return Object.values(model.resources ?? {}).find(
|
|
22588
|
-
(resource2) => resource2.kind === "workflow" && resource2.systemPath === "sales.lead-gen" && (
|
|
21173
|
+
(resource2) => resource2.kind === "workflow" && resource2.systemPath === "sales.lead-gen" && (isLeadGenExportAction(resource2.ontology?.primaryAction) || resource2.ontology?.actions?.some(isLeadGenExportAction) === true)
|
|
22589
21174
|
)?.id;
|
|
22590
21175
|
}
|
|
22591
21176
|
function toBuildStepDefinition(step) {
|
|
@@ -24105,7 +22690,7 @@ function hasRunInput(run2) {
|
|
|
24105
22690
|
return input !== void 0 && input !== null;
|
|
24106
22691
|
}
|
|
24107
22692
|
function sanitizeStepInput(value, actionKey) {
|
|
24108
|
-
if (actionKey
|
|
22693
|
+
if (isLeadGenExportAction(actionKey)) return value;
|
|
24109
22694
|
const next = { ...value };
|
|
24110
22695
|
delete next.mode;
|
|
24111
22696
|
return next;
|
|
@@ -24765,7 +23350,7 @@ function StepRecordsPanel({
|
|
|
24765
23350
|
const rows = recordsQuery.data?.data ?? [];
|
|
24766
23351
|
const total = recordsQuery.data?.total ?? 0;
|
|
24767
23352
|
const totalPages = Math.max(1, Math.ceil(total / RECORDS_PAGE_SIZE));
|
|
24768
|
-
const isReviewExportStep = step.primaryEntity === "company" && (step.actionKey
|
|
23353
|
+
const isReviewExportStep = step.primaryEntity === "company" && (isLeadGenExportAction(step.actionKey) || step.action?.resourceId === exportWorkflowId);
|
|
24769
23354
|
const approvedCompanyIds = Object.entries(approvalByCompanyId).filter(([, status]) => status === "approved").map(([companyId]) => companyId);
|
|
24770
23355
|
const rejectedCompanyIds = Object.entries(approvalByCompanyId).filter(([, status]) => status === "rejected").map(([companyId]) => companyId);
|
|
24771
23356
|
const setApproval = (companyId, status) => {
|
|
@@ -24909,7 +23494,7 @@ function BuildTab({
|
|
|
24909
23494
|
const stepSchema = selectedStep?.action?.schema;
|
|
24910
23495
|
const stepLayout = selectedStep?.action?.layout;
|
|
24911
23496
|
const credentialRequirements = selectedStep?.credentialRequirements ?? [];
|
|
24912
|
-
const selectedStepIsReviewExport = selectedStep?.primaryEntity === "company" && (selectedStep.actionKey
|
|
23497
|
+
const selectedStepIsReviewExport = selectedStep?.primaryEntity === "company" && (isLeadGenExportAction(selectedStep.actionKey) || selectedStep.action?.resourceId === exportWorkflowId);
|
|
24913
23498
|
const selectedExportWorkflowId = selectedStep?.action?.resourceId ?? exportWorkflowId ?? "";
|
|
24914
23499
|
const visibleStepLayout = useMemo(
|
|
24915
23500
|
() => filterCredentialRequirementFields(stepLayout, credentialRequirements),
|
|
@@ -25228,7 +23813,7 @@ function BuildTab({
|
|
|
25228
23813
|
onVerify: handleVerifyCredential
|
|
25229
23814
|
}
|
|
25230
23815
|
),
|
|
25231
|
-
selectedStep.actionKey
|
|
23816
|
+
isLeadGenExportAction(selectedStep.actionKey) || getClickUpRequirement(selectedStep) ? /* @__PURE__ */ jsx(
|
|
25232
23817
|
TextInput,
|
|
25233
23818
|
{
|
|
25234
23819
|
label: "ClickUp List ID",
|
|
@@ -29971,127 +28556,6 @@ function CommandQueueDetailPage({
|
|
|
29971
28556
|
] });
|
|
29972
28557
|
}
|
|
29973
28558
|
|
|
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
28559
|
// src/features/operations/organization-graph/organizationGraphDetail.ts
|
|
30096
28560
|
var RELATIONSHIP_MEANINGS = {
|
|
30097
28561
|
triggers: "Executable handoff: the source resource starts the target resource.",
|
|
@@ -34170,8 +32634,8 @@ function getRelativeLuminance(color) {
|
|
|
34170
32634
|
};
|
|
34171
32635
|
return 0.2126 * channel(parsed.r) + 0.7152 * channel(parsed.g) + 0.0722 * channel(parsed.b);
|
|
34172
32636
|
}
|
|
34173
|
-
function getReadableTextColor(background,
|
|
34174
|
-
return getRelativeLuminance(background) > 0.38 ?
|
|
32637
|
+
function getReadableTextColor(background, tokens) {
|
|
32638
|
+
return getRelativeLuminance(background) > 0.38 ? tokens.background : tokens.text;
|
|
34175
32639
|
}
|
|
34176
32640
|
function readGraphThemeTokens() {
|
|
34177
32641
|
if (typeof window === "undefined") {
|
|
@@ -34195,86 +32659,86 @@ function readGraphThemeTokens() {
|
|
|
34195
32659
|
error: read("--color-error", FALLBACK_GRAPH_THEME.error)
|
|
34196
32660
|
};
|
|
34197
32661
|
}
|
|
34198
|
-
function getNodeThemeByKind(
|
|
32662
|
+
function getNodeThemeByKind(tokens) {
|
|
34199
32663
|
const accentByKind = {
|
|
34200
|
-
organization: mixColors(
|
|
34201
|
-
system: mixColors(
|
|
34202
|
-
role: mixColors(
|
|
34203
|
-
action: mixColors(
|
|
34204
|
-
entity: mixColors(
|
|
34205
|
-
event: mixColors(
|
|
34206
|
-
policy: mixColors(
|
|
34207
|
-
stage: mixColors(
|
|
34208
|
-
resource: mixColors(
|
|
34209
|
-
knowledge: mixColors(
|
|
34210
|
-
"customer-segment": mixColors(
|
|
34211
|
-
offering: mixColors(
|
|
34212
|
-
goal: mixColors(
|
|
34213
|
-
surface: mixColors(
|
|
34214
|
-
"navigation-group": mixColors(
|
|
34215
|
-
ontology: mixColors(
|
|
32664
|
+
organization: mixColors(tokens.primary, tokens.text, 0.35),
|
|
32665
|
+
system: mixColors(tokens.primary, tokens.success, 0.48),
|
|
32666
|
+
role: mixColors(tokens.primary, tokens.error, 0.4),
|
|
32667
|
+
action: mixColors(tokens.primary, tokens.success, 0.72),
|
|
32668
|
+
entity: mixColors(tokens.success, tokens.warning, 0.44),
|
|
32669
|
+
event: mixColors(tokens.warning, tokens.error, 0.48),
|
|
32670
|
+
policy: mixColors(tokens.primary, tokens.error, 0.62),
|
|
32671
|
+
stage: mixColors(tokens.primary, tokens.warning, 0.32),
|
|
32672
|
+
resource: mixColors(tokens.primary, tokens.warning, 0.58),
|
|
32673
|
+
knowledge: mixColors(tokens.primary, tokens.text, 0.6),
|
|
32674
|
+
"customer-segment": mixColors(tokens.success, tokens.text, 0.5),
|
|
32675
|
+
offering: mixColors(tokens.success, tokens.primary, 0.36),
|
|
32676
|
+
goal: mixColors(tokens.primary, tokens.error, 0.5),
|
|
32677
|
+
surface: mixColors(tokens.primary, tokens.success, 0.55),
|
|
32678
|
+
"navigation-group": mixColors(tokens.primary, tokens.text, 0.45),
|
|
32679
|
+
ontology: mixColors(tokens.primary, tokens.warning, 0.44)
|
|
34216
32680
|
};
|
|
34217
32681
|
return Object.fromEntries(
|
|
34218
32682
|
Object.entries(accentByKind).map(([kind, accent]) => {
|
|
34219
|
-
const background = mixColors(accent,
|
|
34220
|
-
const border = mixColors(accent,
|
|
32683
|
+
const background = mixColors(accent, tokens.surface === "transparent" ? tokens.background : tokens.surface, 0.18);
|
|
32684
|
+
const border = mixColors(accent, tokens.border, 0.5);
|
|
34221
32685
|
return [
|
|
34222
32686
|
kind,
|
|
34223
32687
|
{
|
|
34224
32688
|
background,
|
|
34225
32689
|
border,
|
|
34226
|
-
color: getReadableTextColor(background,
|
|
32690
|
+
color: getReadableTextColor(background, tokens)
|
|
34227
32691
|
}
|
|
34228
32692
|
];
|
|
34229
32693
|
})
|
|
34230
32694
|
);
|
|
34231
32695
|
}
|
|
34232
|
-
function getEdgeColor(edge,
|
|
34233
|
-
if (edge.relationshipType === "triggers") return mixColors(
|
|
34234
|
-
if (edge.relationshipType === "uses") return mixColors(
|
|
34235
|
-
if (edge.relationshipType === "approval") return mixColors(
|
|
32696
|
+
function getEdgeColor(edge, tokens) {
|
|
32697
|
+
if (edge.relationshipType === "triggers") return mixColors(tokens.warning, tokens.primary, 0.7);
|
|
32698
|
+
if (edge.relationshipType === "uses") return mixColors(tokens.success, tokens.primary, 0.55);
|
|
32699
|
+
if (edge.relationshipType === "approval") return mixColors(tokens.warning, tokens.text, 0.5);
|
|
34236
32700
|
switch (edge.kind) {
|
|
34237
32701
|
case "contains":
|
|
34238
|
-
return mixColors(
|
|
32702
|
+
return mixColors(tokens.textDimmed, tokens.border, 0.45);
|
|
34239
32703
|
case "governs":
|
|
34240
32704
|
case "applies_to":
|
|
34241
|
-
return mixColors(
|
|
32705
|
+
return mixColors(tokens.primary, tokens.text, 0.45);
|
|
34242
32706
|
case "maps_to":
|
|
34243
32707
|
case "originates_from":
|
|
34244
32708
|
case "actions":
|
|
34245
|
-
return mixColors(
|
|
32709
|
+
return mixColors(tokens.primary, tokens.warning, 0.4);
|
|
34246
32710
|
case "uses":
|
|
34247
32711
|
case "links":
|
|
34248
32712
|
case "reads":
|
|
34249
32713
|
case "writes":
|
|
34250
32714
|
case "uses_catalog":
|
|
34251
|
-
return mixColors(
|
|
32715
|
+
return mixColors(tokens.success, tokens.primary, 0.44);
|
|
34252
32716
|
case "affects":
|
|
34253
32717
|
case "effects":
|
|
34254
|
-
return mixColors(
|
|
32718
|
+
return mixColors(tokens.error, tokens.primary, 0.42);
|
|
34255
32719
|
case "emits":
|
|
34256
32720
|
case "triggers":
|
|
34257
|
-
return mixColors(
|
|
32721
|
+
return mixColors(tokens.warning, tokens.error, 0.5);
|
|
34258
32722
|
case "references":
|
|
34259
32723
|
default:
|
|
34260
|
-
return mixColors(
|
|
32724
|
+
return mixColors(tokens.primary, tokens.success, 0.32);
|
|
34261
32725
|
}
|
|
34262
32726
|
}
|
|
34263
32727
|
function getNodeHaloColor(node, fallback, graph) {
|
|
34264
32728
|
const domain = getCommandViewNodeDomain(node, graph);
|
|
34265
32729
|
return DOMAIN_ZONE_TINT_COLOR[domain] ?? fallback;
|
|
34266
32730
|
}
|
|
34267
|
-
function getExploreEdgeColor(sourceId, targetId, nodeById,
|
|
32731
|
+
function getExploreEdgeColor(sourceId, targetId, nodeById, tokens, graph) {
|
|
34268
32732
|
if (sourceId.startsWith("centroid:")) {
|
|
34269
32733
|
const zone = sourceId.slice("centroid:".length);
|
|
34270
|
-
return mixColors(DOMAIN_ZONE_TINT_COLOR[zone] ??
|
|
32734
|
+
return mixColors(DOMAIN_ZONE_TINT_COLOR[zone] ?? tokens.primary, tokens.textDimmed, 0.46);
|
|
34271
32735
|
}
|
|
34272
32736
|
const sourceNode = nodeById.get(sourceId);
|
|
34273
32737
|
const targetNode = nodeById.get(targetId);
|
|
34274
|
-
const sourceTint = sourceNode ? getNodeHaloColor(sourceNode,
|
|
34275
|
-
const targetTint = targetNode ? getNodeHaloColor(targetNode,
|
|
34276
|
-
const tint = sourceTint ?? targetTint ??
|
|
34277
|
-
return mixColors(tint,
|
|
32738
|
+
const sourceTint = sourceNode ? getNodeHaloColor(sourceNode, tokens.primary, graph) : null;
|
|
32739
|
+
const targetTint = targetNode ? getNodeHaloColor(targetNode, tokens.primary, graph) : null;
|
|
32740
|
+
const tint = sourceTint ?? targetTint ?? tokens.primary;
|
|
32741
|
+
return mixColors(tint, tokens.textDimmed, 0.42);
|
|
34278
32742
|
}
|
|
34279
32743
|
function getNodeSize(kind) {
|
|
34280
32744
|
if (kind === "organization") {
|
|
@@ -34301,17 +32765,17 @@ function getDegreeWeightedSize(kind, degree) {
|
|
|
34301
32765
|
function getNodeScore(node, degreeByNodeId) {
|
|
34302
32766
|
return Math.max(1, degreeByNodeId.get(node.id) ?? 0);
|
|
34303
32767
|
}
|
|
34304
|
-
function getCommandViewRingColor(level,
|
|
32768
|
+
function getCommandViewRingColor(level, tokens) {
|
|
34305
32769
|
switch (level) {
|
|
34306
32770
|
case "healthy":
|
|
34307
|
-
return
|
|
32771
|
+
return tokens.success;
|
|
34308
32772
|
case "warning":
|
|
34309
|
-
return
|
|
32773
|
+
return tokens.warning;
|
|
34310
32774
|
case "critical":
|
|
34311
|
-
return
|
|
32775
|
+
return tokens.error;
|
|
34312
32776
|
case "inactive":
|
|
34313
32777
|
default:
|
|
34314
|
-
return mixColors(
|
|
32778
|
+
return mixColors(tokens.textDimmed, tokens.border, 0.6);
|
|
34315
32779
|
}
|
|
34316
32780
|
}
|
|
34317
32781
|
function getDomainCardPosition(domain) {
|
|
@@ -34339,16 +32803,16 @@ var DOMAIN_DISPLAY_LABELS = {
|
|
|
34339
32803
|
platform: "Platform",
|
|
34340
32804
|
other: "Other"
|
|
34341
32805
|
};
|
|
34342
|
-
function toCytoscapeElementsWithHealth(graph, graphIndex,
|
|
34343
|
-
const nodeThemeByKind = getNodeThemeByKind(
|
|
32806
|
+
function toCytoscapeElementsWithHealth(graph, graphIndex, tokens, commandViewHealthByNodeId, visualizationMode, selectedElement, expandedClusterDomains, parameters, expandedNodeIds) {
|
|
32807
|
+
const nodeThemeByKind = getNodeThemeByKind(tokens);
|
|
34344
32808
|
if (visualizationMode === "explore") {
|
|
34345
32809
|
const { syntheticNodes, backboneEdges, positions } = getExploreProjection(graph, expandedNodeIds);
|
|
34346
32810
|
const elements = [];
|
|
34347
32811
|
for (const sNode of syntheticNodes) {
|
|
34348
32812
|
const isOmRoot = sNode.isOmRoot === true;
|
|
34349
|
-
const fillColor = sNode.zoneTint ? mixColors(withAlpha(sNode.zoneTint, 0.22),
|
|
34350
|
-
const borderColor = sNode.zoneTint ? mixColors(sNode.zoneTint,
|
|
34351
|
-
const haloColor = sNode.zoneTint ??
|
|
32813
|
+
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);
|
|
32814
|
+
const borderColor = sNode.zoneTint ? mixColors(sNode.zoneTint, tokens.border, 0.48) : mixColors(tokens.primary, tokens.border, 0.52);
|
|
32815
|
+
const haloColor = sNode.zoneTint ?? tokens.primary;
|
|
34352
32816
|
elements.push({
|
|
34353
32817
|
data: {
|
|
34354
32818
|
id: sNode.id,
|
|
@@ -34359,7 +32823,7 @@ function toCytoscapeElementsWithHealth(graph, graphIndex, tokens2, commandViewHe
|
|
|
34359
32823
|
zoneTint: sNode.zoneTint ?? void 0,
|
|
34360
32824
|
fillColor,
|
|
34361
32825
|
borderColor,
|
|
34362
|
-
textColor:
|
|
32826
|
+
textColor: tokens.text,
|
|
34363
32827
|
haloColor,
|
|
34364
32828
|
edgeHaloColor: withAlpha(haloColor, 0.1),
|
|
34365
32829
|
hasChildren: isOmRoot ? "false" : "true",
|
|
@@ -34378,8 +32842,8 @@ function toCytoscapeElementsWithHealth(graph, graphIndex, tokens2, commandViewHe
|
|
|
34378
32842
|
const size = getDegreeWeightedSize(node.kind, degree);
|
|
34379
32843
|
const theme = nodeThemeByKind[node.kind];
|
|
34380
32844
|
const health = commandViewHealthByNodeId?.get(node.id) ?? null;
|
|
34381
|
-
const fillColor = health && node.kind === "resource" ? mixColors(
|
|
34382
|
-
const borderColor = health ? getCommandViewRingColor(health.healthLevel,
|
|
32845
|
+
const fillColor = health && node.kind === "resource" ? mixColors(tokens.surfaceHover, tokens.background, 0.76) : theme.background;
|
|
32846
|
+
const borderColor = health ? getCommandViewRingColor(health.healthLevel, tokens) : theme.border;
|
|
34383
32847
|
const label = truncateGraphLabel(node.label, node.kind === "resource" ? 22 : 30);
|
|
34384
32848
|
const displayLabel = health ? `${label}
|
|
34385
32849
|
${health.summaryLabel}` : label;
|
|
@@ -34395,7 +32859,7 @@ ${health.summaryLabel}` : label;
|
|
|
34395
32859
|
label: displayLabel,
|
|
34396
32860
|
fillColor,
|
|
34397
32861
|
borderColor,
|
|
34398
|
-
textColor: health ?
|
|
32862
|
+
textColor: health ? tokens.text : theme.color,
|
|
34399
32863
|
zoneTint: zoneTint ?? void 0,
|
|
34400
32864
|
haloColor,
|
|
34401
32865
|
edgeHaloColor: withAlpha(haloColor, 0.08),
|
|
@@ -34413,8 +32877,8 @@ ${health.summaryLabel}` : label;
|
|
|
34413
32877
|
target: edge.target,
|
|
34414
32878
|
kind: "contains",
|
|
34415
32879
|
label: "",
|
|
34416
|
-
strokeColor: mixColors(
|
|
34417
|
-
edgeHaloColor: withAlpha(
|
|
32880
|
+
strokeColor: mixColors(tokens.border, tokens.textDimmed, 0.45),
|
|
32881
|
+
edgeHaloColor: withAlpha(tokens.primary, 0.05),
|
|
34418
32882
|
isExploreBackbone: "true"
|
|
34419
32883
|
}
|
|
34420
32884
|
});
|
|
@@ -34427,7 +32891,7 @@ ${health.summaryLabel}` : label;
|
|
|
34427
32891
|
const edgeId = `expand:${nodeId}:${childId}`;
|
|
34428
32892
|
if (addedPathNativeExpansionEdgeIds.has(edgeId)) continue;
|
|
34429
32893
|
addedPathNativeExpansionEdgeIds.add(edgeId);
|
|
34430
|
-
const strokeColor = getExploreEdgeColor(nodeId, childId, graphIndex.nodeById,
|
|
32894
|
+
const strokeColor = getExploreEdgeColor(nodeId, childId, graphIndex.nodeById, tokens, graph);
|
|
34431
32895
|
elements.push({
|
|
34432
32896
|
data: {
|
|
34433
32897
|
id: edgeId,
|
|
@@ -34456,7 +32920,7 @@ ${health.summaryLabel}` : label;
|
|
|
34456
32920
|
const edgeId2 = `expand:${nodeId}:${childId}`;
|
|
34457
32921
|
if (!addedExpansionEdgeIds.has(edgeId2)) {
|
|
34458
32922
|
addedExpansionEdgeIds.add(edgeId2);
|
|
34459
|
-
const strokeColor = getExploreEdgeColor(nodeId, childId, graphIndex.nodeById,
|
|
32923
|
+
const strokeColor = getExploreEdgeColor(nodeId, childId, graphIndex.nodeById, tokens, graph);
|
|
34460
32924
|
elements.push({
|
|
34461
32925
|
data: {
|
|
34462
32926
|
id: edgeId2,
|
|
@@ -34480,8 +32944,8 @@ ${health.summaryLabel}` : label;
|
|
|
34480
32944
|
const size = getDegreeWeightedSize(node.kind, degree);
|
|
34481
32945
|
const theme = nodeThemeByKind[node.kind];
|
|
34482
32946
|
const health = commandViewHealthByNodeId?.get(node.id) ?? null;
|
|
34483
|
-
const fillColor = health && node.kind === "resource" ? mixColors(
|
|
34484
|
-
const borderColor = health ? getCommandViewRingColor(health.healthLevel,
|
|
32947
|
+
const fillColor = health && node.kind === "resource" ? mixColors(tokens.surfaceHover, tokens.background, 0.76) : theme.background;
|
|
32948
|
+
const borderColor = health ? getCommandViewRingColor(health.healthLevel, tokens) : theme.border;
|
|
34485
32949
|
const label = truncateGraphLabel(node.label, node.kind === "resource" ? 22 : 30);
|
|
34486
32950
|
const displayLabel = health ? `${label}
|
|
34487
32951
|
${health.summaryLabel}` : label;
|
|
@@ -34497,7 +32961,7 @@ ${health.summaryLabel}` : label;
|
|
|
34497
32961
|
label: displayLabel,
|
|
34498
32962
|
fillColor,
|
|
34499
32963
|
borderColor,
|
|
34500
|
-
textColor: health ?
|
|
32964
|
+
textColor: health ? tokens.text : theme.color,
|
|
34501
32965
|
zoneTint: zoneTint ?? void 0,
|
|
34502
32966
|
haloColor,
|
|
34503
32967
|
edgeHaloColor: withAlpha(haloColor, 0.08),
|
|
@@ -34508,7 +32972,7 @@ ${health.summaryLabel}` : label;
|
|
|
34508
32972
|
const edgeId = `expand:${nodeId}:${childId}`;
|
|
34509
32973
|
if (!addedExpansionEdgeIds.has(edgeId)) {
|
|
34510
32974
|
addedExpansionEdgeIds.add(edgeId);
|
|
34511
|
-
const strokeColor = getExploreEdgeColor(nodeId, childId, graphIndex.nodeById,
|
|
32975
|
+
const strokeColor = getExploreEdgeColor(nodeId, childId, graphIndex.nodeById, tokens, graph);
|
|
34512
32976
|
elements.push({
|
|
34513
32977
|
data: {
|
|
34514
32978
|
id: edgeId,
|
|
@@ -34558,9 +33022,9 @@ ${health.summaryLabel}` : label;
|
|
|
34558
33022
|
}
|
|
34559
33023
|
const domainCardElements = [];
|
|
34560
33024
|
if (isCluster && domainGroups) {
|
|
34561
|
-
const cardBackground = withAlpha(
|
|
34562
|
-
const cardBorder = mixColors(
|
|
34563
|
-
const cardText =
|
|
33025
|
+
const cardBackground = withAlpha(tokens.surface === "transparent" ? tokens.background : tokens.surface, 0.92);
|
|
33026
|
+
const cardBorder = mixColors(tokens.border, tokens.textDimmed, 0.35);
|
|
33027
|
+
const cardText = tokens.textDimmed;
|
|
34564
33028
|
for (const [domain, members] of domainGroups) {
|
|
34565
33029
|
if (!expandedSet.has(domain)) {
|
|
34566
33030
|
const position = getDomainCardPosition(domain);
|
|
@@ -34592,8 +33056,8 @@ ${members.length} node${members.length === 1 ? "" : "s"}`,
|
|
|
34592
33056
|
const size = getDegreeWeightedSize(node.kind, degree);
|
|
34593
33057
|
const theme = nodeThemeByKind[node.kind];
|
|
34594
33058
|
const health = commandViewHealthByNodeId?.get(node.id) ?? null;
|
|
34595
|
-
const fillColor = health && node.kind === "resource" ? mixColors(
|
|
34596
|
-
const borderColor = health ? getCommandViewRingColor(health.healthLevel,
|
|
33059
|
+
const fillColor = health && node.kind === "resource" ? mixColors(tokens.surfaceHover, tokens.background, 0.76) : theme.background;
|
|
33060
|
+
const borderColor = health ? getCommandViewRingColor(health.healthLevel, tokens) : theme.border;
|
|
34597
33061
|
const maxLabelLength = node.kind === "resource" ? 22 : 30;
|
|
34598
33062
|
const label = truncateGraphLabel(node.label, maxLabelLength);
|
|
34599
33063
|
const displayLabel = health ? `${label}
|
|
@@ -34610,7 +33074,7 @@ ${health.summaryLabel}` : label;
|
|
|
34610
33074
|
label: displayLabel,
|
|
34611
33075
|
fillColor,
|
|
34612
33076
|
borderColor,
|
|
34613
|
-
textColor: health ?
|
|
33077
|
+
textColor: health ? tokens.text : theme.color,
|
|
34614
33078
|
zoneTint: zoneTint ?? void 0,
|
|
34615
33079
|
haloColor,
|
|
34616
33080
|
edgeHaloColor: withAlpha(haloColor, 0.08),
|
|
@@ -34620,7 +33084,7 @@ ${health.summaryLabel}` : label;
|
|
|
34620
33084
|
};
|
|
34621
33085
|
});
|
|
34622
33086
|
const edgeElements = graph.edges.filter((edge) => !hiddenBehindCardIds.has(edge.sourceId) && !hiddenBehindCardIds.has(edge.targetId)).map((edge) => {
|
|
34623
|
-
const strokeColor = getEdgeColor(edge,
|
|
33087
|
+
const strokeColor = getEdgeColor(edge, tokens);
|
|
34624
33088
|
return {
|
|
34625
33089
|
data: {
|
|
34626
33090
|
id: edge.id,
|
|
@@ -34679,10 +33143,10 @@ function getLayoutOptions(mode, selectedElement, traceResult) {
|
|
|
34679
33143
|
padding: 48
|
|
34680
33144
|
};
|
|
34681
33145
|
}
|
|
34682
|
-
function createCytoscapeStyle(
|
|
34683
|
-
const selectedBorder = mixColors(
|
|
34684
|
-
const traceBorder = mixColors(
|
|
34685
|
-
const edgeLabelBackground = withAlpha(
|
|
33146
|
+
function createCytoscapeStyle(tokens, visualizationMode) {
|
|
33147
|
+
const selectedBorder = mixColors(tokens.primary, tokens.textDimmed, 0.58);
|
|
33148
|
+
const traceBorder = mixColors(tokens.warning, tokens.border, 0.58);
|
|
33149
|
+
const edgeLabelBackground = withAlpha(tokens.background, 0.86);
|
|
34686
33150
|
const reducedMotion = shouldReduceGraphMotion();
|
|
34687
33151
|
const baseEdgeOpacity = visualizationMode === "cluster" || visualizationMode === "swimlane" ? 0.16 : visualizationMode === "focus" ? 0.42 : 0.28;
|
|
34688
33152
|
return [
|
|
@@ -34708,7 +33172,7 @@ function createCytoscapeStyle(tokens2, visualizationMode) {
|
|
|
34708
33172
|
padding: "10px",
|
|
34709
33173
|
"overlay-opacity": 0,
|
|
34710
33174
|
"text-outline-width": 1,
|
|
34711
|
-
"text-outline-color":
|
|
33175
|
+
"text-outline-color": tokens.background,
|
|
34712
33176
|
"text-outline-opacity": 0.56,
|
|
34713
33177
|
"underlay-color": "data(haloColor)",
|
|
34714
33178
|
"underlay-opacity": 0,
|
|
@@ -34879,7 +33343,7 @@ function createCytoscapeStyle(tokens2, visualizationMode) {
|
|
|
34879
33343
|
style: {
|
|
34880
33344
|
width: 1.05,
|
|
34881
33345
|
label: "",
|
|
34882
|
-
color:
|
|
33346
|
+
color: tokens.text,
|
|
34883
33347
|
"font-size": 10,
|
|
34884
33348
|
"font-weight": 700,
|
|
34885
33349
|
"curve-style": "bezier",
|
|
@@ -35040,7 +33504,7 @@ function createCytoscapeStyle(tokens2, visualizationMode) {
|
|
|
35040
33504
|
selector: "node.is-trace-endpoint",
|
|
35041
33505
|
style: {
|
|
35042
33506
|
opacity: 1,
|
|
35043
|
-
"border-color": mixColors(
|
|
33507
|
+
"border-color": mixColors(tokens.warning, tokens.textDimmed, 0.58),
|
|
35044
33508
|
"border-width": 3
|
|
35045
33509
|
}
|
|
35046
33510
|
},
|
|
@@ -35075,7 +33539,7 @@ function createCytoscapeStyle(tokens2, visualizationMode) {
|
|
|
35075
33539
|
selector: "node.is-expanded-node",
|
|
35076
33540
|
style: {
|
|
35077
33541
|
opacity: 1,
|
|
35078
|
-
"border-color": mixColors(
|
|
33542
|
+
"border-color": mixColors(tokens.primary, tokens.warning, 0.42),
|
|
35079
33543
|
"border-width": 2.2,
|
|
35080
33544
|
"background-opacity": 0.92,
|
|
35081
33545
|
"underlay-opacity": 0.04,
|
|
@@ -38099,8 +36563,8 @@ function countByKind2(resources) {
|
|
|
38099
36563
|
}
|
|
38100
36564
|
return counts;
|
|
38101
36565
|
}
|
|
38102
|
-
function aggregateSystemMetrics(model,
|
|
38103
|
-
if (
|
|
36566
|
+
function aggregateSystemMetrics(model, systemPath) {
|
|
36567
|
+
if (systemPath === "") {
|
|
38104
36568
|
const all = Object.values(model.resources ?? {});
|
|
38105
36569
|
return {
|
|
38106
36570
|
resourceCount: all.length,
|
|
@@ -38114,8 +36578,8 @@ function aggregateSystemMetrics(model, systemPath2) {
|
|
|
38114
36578
|
descendantResources: []
|
|
38115
36579
|
};
|
|
38116
36580
|
}
|
|
38117
|
-
const inclusive = getResourcesForSystem(model,
|
|
38118
|
-
const direct = getResourcesForSystem(model,
|
|
36581
|
+
const inclusive = getResourcesForSystem(model, systemPath, { includeDescendants: true });
|
|
36582
|
+
const direct = getResourcesForSystem(model, systemPath, { includeDescendants: false });
|
|
38119
36583
|
const directIds = new Set(direct.map((resource2) => resource2.id));
|
|
38120
36584
|
const descendant = inclusive.filter((resource2) => !directIds.has(resource2.id));
|
|
38121
36585
|
return {
|
|
@@ -38406,9 +36870,9 @@ function ontologyCounts(model) {
|
|
|
38406
36870
|
diagnostics: compiled.diagnostics.length
|
|
38407
36871
|
};
|
|
38408
36872
|
}
|
|
38409
|
-
function ontologyCountsForSystem(model,
|
|
36873
|
+
function ontologyCountsForSystem(model, systemPath) {
|
|
38410
36874
|
const compiled = compileOrganizationOntology(model);
|
|
38411
|
-
const belongsToSystem = (ownerSystemId) =>
|
|
36875
|
+
const belongsToSystem = (ownerSystemId) => systemPath === "" || ownerSystemId === systemPath || ownerSystemId?.startsWith(`${systemPath}.`);
|
|
38412
36876
|
return {
|
|
38413
36877
|
objects: Object.values(compiled.ontology.objectTypes).filter((record) => belongsToSystem(record.ownerSystemId)).length,
|
|
38414
36878
|
actions: Object.values(compiled.ontology.actionTypes).filter((record) => belongsToSystem(record.ownerSystemId)).length,
|
|
@@ -38417,11 +36881,11 @@ function ontologyCountsForSystem(model, systemPath2) {
|
|
|
38417
36881
|
diagnostics: compiled.diagnostics.length
|
|
38418
36882
|
};
|
|
38419
36883
|
}
|
|
38420
|
-
function buildBreadcrumbs(model,
|
|
36884
|
+
function buildBreadcrumbs(model, systemPath) {
|
|
38421
36885
|
const items = [{ label: "Systems", path: "" }];
|
|
38422
|
-
if (!
|
|
38423
|
-
const ancestors = getSystemAncestors(model,
|
|
38424
|
-
const segments =
|
|
36886
|
+
if (!systemPath) return items;
|
|
36887
|
+
const ancestors = getSystemAncestors(model, systemPath);
|
|
36888
|
+
const segments = systemPath.split(".");
|
|
38425
36889
|
for (let i = 0; i < ancestors.length; i++) {
|
|
38426
36890
|
items.push({
|
|
38427
36891
|
label: ancestors[i].label ?? ancestors[i].id,
|
|
@@ -38430,22 +36894,22 @@ function buildBreadcrumbs(model, systemPath2) {
|
|
|
38430
36894
|
}
|
|
38431
36895
|
return items;
|
|
38432
36896
|
}
|
|
38433
|
-
function kbPathForSystem(
|
|
38434
|
-
if (!
|
|
38435
|
-
return `/knowledge/by-system/${
|
|
36897
|
+
function kbPathForSystem(systemPath) {
|
|
36898
|
+
if (!systemPath) return "/knowledge";
|
|
36899
|
+
return `/knowledge/by-system/${systemPath}`;
|
|
38436
36900
|
}
|
|
38437
|
-
function resourcesPathForSystem(
|
|
38438
|
-
const suffix =
|
|
36901
|
+
function resourcesPathForSystem(systemPath) {
|
|
36902
|
+
const suffix = systemPath ? `?systemPath=${encodeURIComponent(systemPath)}` : "";
|
|
38439
36903
|
return `/operations/resources${suffix}`;
|
|
38440
36904
|
}
|
|
38441
|
-
function commandViewPathForSystem(
|
|
38442
|
-
const suffix =
|
|
36905
|
+
function commandViewPathForSystem(systemPath) {
|
|
36906
|
+
const suffix = systemPath ? `?systemPath=${encodeURIComponent(systemPath)}` : "";
|
|
38443
36907
|
return `/knowledge/command-view${suffix}`;
|
|
38444
36908
|
}
|
|
38445
|
-
function childEntries(
|
|
38446
|
-
const systems =
|
|
36909
|
+
function childEntries(systemPath, system, model) {
|
|
36910
|
+
const systems = systemPath ? childSystemsOf(system) : model.systems;
|
|
38447
36911
|
return Object.entries(systems).map(([localId, child]) => {
|
|
38448
|
-
const path =
|
|
36912
|
+
const path = systemPath ? `${systemPath}.${localId}` : localId;
|
|
38449
36913
|
return {
|
|
38450
36914
|
path,
|
|
38451
36915
|
system: child,
|
|
@@ -38574,15 +37038,15 @@ function SubsystemCard({
|
|
|
38574
37038
|
] })
|
|
38575
37039
|
] }) });
|
|
38576
37040
|
}
|
|
38577
|
-
function RelatedLinks({ systemPath
|
|
37041
|
+
function RelatedLinks({ systemPath }) {
|
|
38578
37042
|
return /* @__PURE__ */ jsxs(Group, { gap: "xs", children: [
|
|
38579
|
-
/* @__PURE__ */ jsx(Button, { component: "a", href: resourcesPathForSystem(
|
|
38580
|
-
/* @__PURE__ */ jsx(Button, { component: "a", href: commandViewPathForSystem(
|
|
37043
|
+
/* @__PURE__ */ jsx(Button, { component: "a", href: resourcesPathForSystem(systemPath), variant: "light", size: "xs", children: "Resources" }),
|
|
37044
|
+
/* @__PURE__ */ jsx(Button, { component: "a", href: commandViewPathForSystem(systemPath), variant: "light", size: "xs", children: "Command View" }),
|
|
38581
37045
|
/* @__PURE__ */ jsx(
|
|
38582
37046
|
Button,
|
|
38583
37047
|
{
|
|
38584
37048
|
component: "a",
|
|
38585
|
-
href: kbPathForSystem(
|
|
37049
|
+
href: kbPathForSystem(systemPath),
|
|
38586
37050
|
target: "_blank",
|
|
38587
37051
|
rel: "noreferrer",
|
|
38588
37052
|
variant: "light",
|
|
@@ -38649,17 +37113,17 @@ function SystemsIndex({ model, onNavigate }) {
|
|
|
38649
37113
|
}
|
|
38650
37114
|
function SystemDetail({
|
|
38651
37115
|
model,
|
|
38652
|
-
systemPath
|
|
37116
|
+
systemPath,
|
|
38653
37117
|
onNavigate
|
|
38654
37118
|
}) {
|
|
38655
|
-
const currentSystem = getSystem(model,
|
|
37119
|
+
const currentSystem = getSystem(model, systemPath);
|
|
38656
37120
|
const { timeRange = "30d" } = useElevasisSystems();
|
|
38657
37121
|
const rollupMode = useSystemsViewState((state) => state.rollupMode);
|
|
38658
37122
|
const resourceKinds = useSystemsViewState((state) => state.resourceKinds);
|
|
38659
|
-
const metrics = aggregateSystemMetrics(model,
|
|
37123
|
+
const metrics = aggregateSystemMetrics(model, systemPath);
|
|
38660
37124
|
const includeDescendants = rollupMode === "descendants";
|
|
38661
37125
|
const systemHealthQuery = useSystemHealth({
|
|
38662
|
-
systemPath
|
|
37126
|
+
systemPath,
|
|
38663
37127
|
timeRange,
|
|
38664
37128
|
includeDescendants,
|
|
38665
37129
|
directResources: metrics.directResources,
|
|
@@ -38670,11 +37134,11 @@ function SystemDetail({
|
|
|
38670
37134
|
const visibleResources = metricResources(metrics, rollupMode).filter(
|
|
38671
37135
|
(resource2) => resourceKinds.length === 0 || resourceKinds.includes(resource2.kind)
|
|
38672
37136
|
);
|
|
38673
|
-
const children = childEntries(
|
|
38674
|
-
const breadcrumbs = buildBreadcrumbs(model,
|
|
38675
|
-
const scopedOntologyCounts = ontologyCountsForSystem(model,
|
|
37137
|
+
const children = childEntries(systemPath, currentSystem, model);
|
|
37138
|
+
const breadcrumbs = buildBreadcrumbs(model, systemPath);
|
|
37139
|
+
const scopedOntologyCounts = ontologyCountsForSystem(model, systemPath);
|
|
38676
37140
|
if (!currentSystem) {
|
|
38677
|
-
return /* @__PURE__ */ jsx(EmptyState, { icon: IconRoute, title: "System not found", description: `No semantic system exists at ${
|
|
37141
|
+
return /* @__PURE__ */ jsx(EmptyState, { icon: IconRoute, title: "System not found", description: `No semantic system exists at ${systemPath}.` });
|
|
38678
37142
|
}
|
|
38679
37143
|
return /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
|
|
38680
37144
|
/* @__PURE__ */ jsx(Breadcrumbs$1, { children: breadcrumbs.map((crumb, idx) => {
|
|
@@ -38688,9 +37152,9 @@ function SystemDetail({
|
|
|
38688
37152
|
/* @__PURE__ */ jsx(Title, { order: 1, size: "h3", children: currentSystem.label ?? currentSystem.id }),
|
|
38689
37153
|
statusBadge(metrics)
|
|
38690
37154
|
] }),
|
|
38691
|
-
/* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: currentSystem.description ??
|
|
37155
|
+
/* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: currentSystem.description ?? systemPath })
|
|
38692
37156
|
] }),
|
|
38693
|
-
/* @__PURE__ */ jsx(RelatedLinks, { systemPath
|
|
37157
|
+
/* @__PURE__ */ jsx(RelatedLinks, { systemPath })
|
|
38694
37158
|
] }),
|
|
38695
37159
|
/* @__PURE__ */ jsxs(SimpleGrid, { cols: { base: 2, md: 4 }, spacing: "xs", children: [
|
|
38696
37160
|
/* @__PURE__ */ jsx(
|
|
@@ -38759,11 +37223,11 @@ function SystemDetail({
|
|
|
38759
37223
|
] }) })
|
|
38760
37224
|
] });
|
|
38761
37225
|
}
|
|
38762
|
-
function SystemOpsView({ model, systemPath
|
|
38763
|
-
if (!
|
|
37226
|
+
function SystemOpsView({ model, systemPath, onNavigate }) {
|
|
37227
|
+
if (!systemPath) {
|
|
38764
37228
|
return /* @__PURE__ */ jsx(SystemsIndex, { model, onNavigate });
|
|
38765
37229
|
}
|
|
38766
|
-
return /* @__PURE__ */ jsx(SystemDetail, { model, systemPath
|
|
37230
|
+
return /* @__PURE__ */ jsx(SystemDetail, { model, systemPath, onNavigate });
|
|
38767
37231
|
}
|
|
38768
37232
|
function ExecutionLogsPage({
|
|
38769
37233
|
timeRange,
|
|
@@ -39242,15 +37706,15 @@ function ActivityFeed({
|
|
|
39242
37706
|
function NotificationCenter({ pageSize = 20 }) {
|
|
39243
37707
|
const { page, setPage, offset, totalPages } = usePaginationState(pageSize);
|
|
39244
37708
|
const { data, isLoading } = useNotifications({ limit: pageSize, offset });
|
|
39245
|
-
const
|
|
37709
|
+
const notifications15 = data?.notifications ?? [];
|
|
39246
37710
|
const markAllAsRead = useMarkAllAsRead();
|
|
39247
|
-
const hasUnread =
|
|
37711
|
+
const hasUnread = notifications15.some((n) => !n.read);
|
|
39248
37712
|
const handleMarkAllAsRead = async () => {
|
|
39249
37713
|
await markAllAsRead.mutateAsync();
|
|
39250
37714
|
};
|
|
39251
37715
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
39252
37716
|
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:
|
|
37717
|
+
/* @__PURE__ */ jsx(Paper, { children: /* @__PURE__ */ jsx(NotificationList, { notifications: notifications15, isLoading }) }),
|
|
39254
37718
|
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
37719
|
] });
|
|
39256
37720
|
}
|
|
@@ -40040,21 +38504,14 @@ function MemberAccessModal({ opened, onClose, orgId, member, defaultTab = "roles
|
|
|
40040
38504
|
] }),
|
|
40041
38505
|
/* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: member.email })
|
|
40042
38506
|
] }),
|
|
40043
|
-
/* @__PURE__ */
|
|
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
|
-
] })
|
|
38507
|
+
activeTab === "roles" && /* @__PURE__ */ jsx(RolesTabPanel, { orgId, member, onSaved: onClose })
|
|
40051
38508
|
] }) });
|
|
40052
38509
|
}
|
|
40053
38510
|
function RolesTabPanel({ orgId, member, onSaved }) {
|
|
40054
38511
|
const { data: rolesData, isLoading: rolesLoading } = useOrgRoles(orgId ?? void 0);
|
|
40055
38512
|
const assignMutation = useAssignRole();
|
|
40056
38513
|
const revokeMutation = useRevokeRole();
|
|
40057
|
-
const canManagePrivileged =
|
|
38514
|
+
const canManagePrivileged = useAccess(AccessKeys.rolesManage).allowed;
|
|
40058
38515
|
const allRoles = rolesData?.roles ?? [];
|
|
40059
38516
|
const currentRoleIds = useMemo(() => {
|
|
40060
38517
|
const matched = allRoles.find((r) => r.slug === member.role);
|
|
@@ -40124,43 +38581,6 @@ function RolesTabPanel({ orgId, member, onSaved }) {
|
|
|
40124
38581
|
] })
|
|
40125
38582
|
] });
|
|
40126
38583
|
}
|
|
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
38584
|
function transformMemberForModal(member) {
|
|
40165
38585
|
const firstName = member.user?.firstName || "";
|
|
40166
38586
|
const lastName = member.user?.lastName || "";
|
|
@@ -40169,8 +38589,7 @@ function transformMemberForModal(member) {
|
|
|
40169
38589
|
id: member.id,
|
|
40170
38590
|
name,
|
|
40171
38591
|
email: member.user?.email || "Unknown",
|
|
40172
|
-
role: member.role.slug
|
|
40173
|
-
config: member.config
|
|
38592
|
+
role: member.role.slug
|
|
40174
38593
|
};
|
|
40175
38594
|
}
|
|
40176
38595
|
function OrgMembersList({ orgId }) {
|
|
@@ -40304,60 +38723,6 @@ function OrganizationSettings({ user, currentMembership, isOrgAdmin }) {
|
|
|
40304
38723
|
] }) })
|
|
40305
38724
|
] });
|
|
40306
38725
|
}
|
|
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
38726
|
var OAUTH_COMPLETION_CHANNEL = "elevasis-oauth";
|
|
40362
38727
|
var OAUTH_COMPLETION_STORAGE_KEY = "elevasis:oauth-complete";
|
|
40363
38728
|
function useOAuthFlow({ apiUrl }) {
|
|
@@ -40934,10 +39299,10 @@ function createUseOrganizations(useStore) {
|
|
|
40934
39299
|
};
|
|
40935
39300
|
};
|
|
40936
39301
|
}
|
|
40937
|
-
function createUseOrgInitialization(useOrganizations,
|
|
39302
|
+
function createUseOrgInitialization(useOrganizations, useApiClient) {
|
|
40938
39303
|
return function useOrgInitialization() {
|
|
40939
39304
|
const { user, organizationId: workosOrgId } = useAuthContext();
|
|
40940
|
-
const { apiRequest } =
|
|
39305
|
+
const { apiRequest } = useApiClient();
|
|
40941
39306
|
const { profile } = useUserProfile();
|
|
40942
39307
|
const {
|
|
40943
39308
|
currentWorkOSOrganizationId,
|
|
@@ -41098,4 +39463,4 @@ function createUseOrgInitialization(useOrganizations, useApiClient2) {
|
|
|
41098
39463
|
};
|
|
41099
39464
|
}
|
|
41100
39465
|
|
|
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 };
|
|
39466
|
+
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 };
|