@elevasis/ui 2.36.0 → 2.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/index.js +4 -3
- package/dist/app/index.css +0 -384
- package/dist/app/index.d.ts +20 -0
- package/dist/app/index.js +21 -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-5CTJ7TW2.js +111 -0
- package/dist/chunk-5EYJ2GIN.js +122 -0
- package/dist/{chunk-K4UZU3TU.js → chunk-6NREL3KL.js} +1 -1
- 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-A7IG36LB.js +215 -0
- package/dist/chunk-CLDCYJQT.js +1 -0
- package/dist/{chunk-AKW7KISS.js → chunk-CWYQRM5T.js} +2 -38
- package/dist/{chunk-LUYVRATI.js → chunk-DA6I5VEY.js} +5 -213
- package/dist/chunk-I53EX4VU.js +734 -0
- package/dist/chunk-IIMU5YAJ.js +53 -0
- package/dist/{chunk-VKIZUUPM.js → chunk-JPVZRZ3X.js} +31 -14
- package/dist/chunk-JXVNHVK7.js +79 -0
- package/dist/chunk-JZ2WID2G.js +337 -0
- package/dist/chunk-LCJQ6OWC.js +348 -0
- package/dist/chunk-LNC6PZAE.js +85 -0
- package/dist/{chunk-O2Q4VMRN.js → chunk-NWMPBG4U.js} +1 -1
- package/dist/chunk-NYNOMAAS.js +422 -0
- package/dist/chunk-S3KBYQTI.js +39 -0
- package/dist/chunk-S3XR4II4.js +30 -0
- package/dist/chunk-SHZT7ULK.js +425 -0
- package/dist/{chunk-F6EFC2MJ.js → chunk-T3NI7DOA.js} +291 -2044
- 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 +29 -42
- package/dist/components/index.js +33 -19
- package/dist/components/navigation/index.js +3 -31
- package/dist/features/auth/index.d.ts +52 -99
- package/dist/features/auth/index.js +36 -99
- package/dist/features/clients/index.js +33 -19
- package/dist/features/crm/index.d.ts +20 -0
- package/dist/features/crm/index.js +33 -19
- package/dist/features/dashboard/index.js +33 -19
- package/dist/features/delivery/index.d.ts +20 -0
- package/dist/features/delivery/index.js +33 -19
- package/dist/features/knowledge/index.js +6 -30
- package/dist/features/lead-gen/index.d.ts +1088 -1
- package/dist/features/lead-gen/index.js +33 -19
- package/dist/features/monitoring/index.js +33 -19
- package/dist/features/monitoring/requests/index.js +33 -19
- package/dist/features/notes/index.d.ts +72 -0
- package/dist/features/notes/index.js +621 -0
- package/dist/features/operations/index.js +33 -19
- package/dist/features/right-panel-host/index.d.ts +214 -0
- package/dist/features/right-panel-host/index.js +640 -0
- package/dist/features/seo/index.js +3 -2
- package/dist/features/settings/index.d.ts +23 -35
- package/dist/features/settings/index.js +33 -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 +20 -0
- package/dist/hooks/delivery/index.js +33 -19
- package/dist/hooks/index.d.ts +1599 -1651
- package/dist/hooks/index.js +33 -19
- package/dist/hooks/published.d.ts +1599 -1651
- package/dist/hooks/published.js +33 -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 +239 -275
- package/dist/index.js +34 -20
- package/dist/initialization/index.d.ts +20 -19
- package/dist/knowledge/index.js +10 -7
- package/dist/layout/index.js +5 -3
- package/dist/organization/index.d.ts +0 -19
- package/dist/organization/index.js +33 -19
- package/dist/profile/index.d.ts +20 -0
- package/dist/provider/index.css +0 -384
- package/dist/provider/index.d.ts +20 -0
- package/dist/provider/index.js +15 -21
- package/dist/provider/published.css +0 -523
- package/dist/provider/published.d.ts +20 -0
- package/dist/provider/published.js +11 -21
- package/dist/supabase/index.d.ts +40 -0
- package/dist/test-utils/index.d.ts +2 -21
- package/dist/test-utils/index.js +5 -18
- package/dist/theme/index.js +2 -1
- package/dist/types/index.d.ts +70 -59
- package/dist/utils/index.js +2 -1
- package/package.json +19 -3
- 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-S3KBYQTI.js';
|
|
2
|
+
import { useSupabase } from './chunk-BRXELOHC.js';
|
|
3
|
+
import { useBreadcrumbs } from './chunk-LNC6PZAE.js';
|
|
1
4
|
import { ChatHeader, ChatSidebar } from './chunk-CXY7FMUM.js';
|
|
2
|
-
import { observabilityKeys, useCyberColors,
|
|
5
|
+
import { observabilityKeys, useCyberColors, CyberLegendItem, CyberAreaChart, CyberDonut, HeroStatsRow, CostTrendChart, ActivityTrendChart } from './chunk-7GQFIWP4.js';
|
|
6
|
+
import { DEFAULT_ORGANIZATION_GRAPH_FILTERS, ORGANIZATION_GRAPH_NODE_KIND_ORDER, ORGANIZATION_GRAPH_NODE_KIND_LABELS, ORGANIZATION_GRAPH_EDGE_KIND_LABELS, ORGANIZATION_GRAPH_NODE_KIND_DETAIL_LABELS, ORGANIZATION_GRAPH_NODE_KIND_MEANINGS, ORGANIZATION_GRAPH_EDGE_KIND_MEANINGS } from './chunk-5EYJ2GIN.js';
|
|
7
|
+
import { AppShellLoader, SubshellSidebarLoader, PageContainer, SubshellLoader, AppShellCenteredContainer } from './chunk-DA6I5VEY.js';
|
|
8
|
+
import { SubshellNavItem } from './chunk-X4WBGKJQ.js';
|
|
9
|
+
import { SubshellSidebarSection } from './chunk-IIMU5YAJ.js';
|
|
10
|
+
import { Graph_module_css_default, useDirectedChainHighlighting, useNodeSelection, useFitViewTrigger, useGraphHighlighting, calculateGraphHeight, GRAPH_CONSTANTS } from './chunk-HENXLGVD.js';
|
|
11
|
+
import { STATUS_COLORS, getStatusIcon, formatDuration, getStatusColors, AGENT_CONSTANTS, shouldAnimateEdge, TIMELINE_CONSTANTS, calculateBarPosition, CONTAINER_CONSTANTS, useExecutionPath, useUnifiedWorkflowLayout, WORKFLOW_CONSTANTS, useReactFlowAgent, getResourceStatusColor, useMergedExecution, useTimelineData, useAgentIterationData } from './chunk-7FPLLSHN.js';
|
|
12
|
+
import { glassBase } from './chunk-CWYQRM5T.js';
|
|
13
|
+
import { useNotificationAdapter, useCrmActions, useListActions } from './chunk-JZ2WID2G.js';
|
|
14
|
+
import { EmptyState, CenteredErrorState, StatsCardSkeleton, TrendIndicator, DetailCardSkeleton, GlowDot, JsonViewer, ListSkeleton, PageTitleCaption, StatCard, APIErrorAlert, CollapsibleSection, ActivityTimeline, ContextViewer, StatusBadge, TabCountBadge, ResourceCard } from './chunk-I53EX4VU.js';
|
|
3
15
|
import { StyledMarkdown } from './chunk-3KMDHCAR.js';
|
|
4
|
-
import {
|
|
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-JPVZRZ3X.js';
|
|
24
|
+
import { useAccess, AccessKeys } from './chunk-LCJQ6OWC.js';
|
|
25
|
+
import { useOptionalElevasisSystems, useElevasisSystems } from './chunk-NYNOMAAS.js';
|
|
26
|
+
import { useInitialization } from './chunk-533DUEQY.js';
|
|
27
|
+
import { OrgKnowledgeNodeSchema, defineResources, defineActions, defineTopology, topologyRef, resolveOrganizationModel, listAllSystems, projectOrganizationSurfaces, topologyRelationship, PROJECTS_VIEW_ACTION_ID, resolveSemanticIconComponent, getAllBuildTemplates, getLeadGenStageCatalog, buildOrganizationGraph, getResourcesForSystem, getSystem, SemanticIcon, compileOrganizationOntology, getSystemAncestors } from './chunk-NWMPBG4U.js';
|
|
28
|
+
import { useOrganization } from './chunk-DD3CCMCZ.js';
|
|
29
|
+
import { useUserProfile } from './chunk-2Q2JQSQO.js';
|
|
30
|
+
import { STALE_TIME_MONITORING, STALE_TIME_DEFAULT, STALE_TIME_ADMIN, GC_TIME_MEDIUM, GC_TIME_SHORT } from './chunk-6ROXVZ3L.js';
|
|
31
|
+
import { useElevasisServices } from './chunk-KJ3QUBNU.js';
|
|
23
32
|
import { useAuthContext } from './chunk-BRJ3QZ4E.js';
|
|
24
|
-
import {
|
|
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,
|
|
@@ -3718,269 +2926,6 @@ function useWorkflowExecution({ workflowId, listId }) {
|
|
|
3718
2926
|
reset: mutation.reset
|
|
3719
2927
|
};
|
|
3720
2928
|
}
|
|
3721
|
-
var consoleAdapter = {
|
|
3722
|
-
success(title, message) {
|
|
3723
|
-
console.log(`[Notification][Success] ${title}: ${message}`);
|
|
3724
|
-
},
|
|
3725
|
-
error(title, message) {
|
|
3726
|
-
console.warn(`[Notification][Error] ${title}: ${message}`);
|
|
3727
|
-
},
|
|
3728
|
-
info(title, message) {
|
|
3729
|
-
console.log(`[Notification][Info] ${title}: ${message}`);
|
|
3730
|
-
},
|
|
3731
|
-
warning(title, message) {
|
|
3732
|
-
console.warn(`[Notification][Warning] ${title}: ${message}`);
|
|
3733
|
-
},
|
|
3734
|
-
apiError(error) {
|
|
3735
|
-
const { message, code, requestId, fields, retryAfter } = getErrorInfo(error);
|
|
3736
|
-
const title = getErrorTitle(code);
|
|
3737
|
-
const formatted = formatErrorMessage(message, requestId, fields, retryAfter);
|
|
3738
|
-
console.warn(`[Notification][API Error] ${title}: ${formatted}`);
|
|
3739
|
-
}
|
|
3740
|
-
};
|
|
3741
|
-
var NotificationContext = createContext(consoleAdapter);
|
|
3742
|
-
function NotificationProvider({ adapter, children }) {
|
|
3743
|
-
return /* @__PURE__ */ jsx(NotificationContext.Provider, { value: adapter, children });
|
|
3744
|
-
}
|
|
3745
|
-
function useNotificationAdapter() {
|
|
3746
|
-
return useContext(NotificationContext);
|
|
3747
|
-
}
|
|
3748
|
-
var CrmActionsContext = createContext([]);
|
|
3749
|
-
function CrmActionsProvider({ actions, children }) {
|
|
3750
|
-
return /* @__PURE__ */ jsx(CrmActionsContext.Provider, { value: actions, children });
|
|
3751
|
-
}
|
|
3752
|
-
function useCrmActions() {
|
|
3753
|
-
return useContext(CrmActionsContext);
|
|
3754
|
-
}
|
|
3755
|
-
var EMPTY_LIST_ACTIONS = Object.freeze([]);
|
|
3756
|
-
var ListActionsContext = createContext(EMPTY_LIST_ACTIONS);
|
|
3757
|
-
function ListActionsProvider({
|
|
3758
|
-
registry = EMPTY_LIST_ACTIONS,
|
|
3759
|
-
children
|
|
3760
|
-
}) {
|
|
3761
|
-
return /* @__PURE__ */ jsx(ListActionsContext.Provider, { value: registry, children });
|
|
3762
|
-
}
|
|
3763
|
-
function useListActions() {
|
|
3764
|
-
return useContext(ListActionsContext);
|
|
3765
|
-
}
|
|
3766
|
-
function findListActionByAction(registry, actionKey) {
|
|
3767
|
-
return registry.find((action) => action.actionKey === actionKey);
|
|
3768
|
-
}
|
|
3769
|
-
function getListActionWorkflowId(action) {
|
|
3770
|
-
return action.workflowId ?? action.resourceId;
|
|
3771
|
-
}
|
|
3772
|
-
var LazyCoreAuthKitInner = lazy(() => import('./CoreAuthKitInner-QC62UHTZ.js').then((m) => ({ default: m.CoreAuthKitInner })));
|
|
3773
|
-
var defaultQueryClient = null;
|
|
3774
|
-
function getDefaultQueryClient() {
|
|
3775
|
-
if (!defaultQueryClient) {
|
|
3776
|
-
defaultQueryClient = new QueryClient({
|
|
3777
|
-
defaultOptions: { queries: { retry: 1 } }
|
|
3778
|
-
});
|
|
3779
|
-
}
|
|
3780
|
-
return defaultQueryClient;
|
|
3781
|
-
}
|
|
3782
|
-
var consoleNotificationAdapter = {
|
|
3783
|
-
success(title, message) {
|
|
3784
|
-
console.log(`[Notification][Success] ${title}: ${message}`);
|
|
3785
|
-
},
|
|
3786
|
-
error(title, message) {
|
|
3787
|
-
console.warn(`[Notification][Error] ${title}: ${message}`);
|
|
3788
|
-
},
|
|
3789
|
-
info(title, message) {
|
|
3790
|
-
console.log(`[Notification][Info] ${title}: ${message}`);
|
|
3791
|
-
},
|
|
3792
|
-
warning(title, message) {
|
|
3793
|
-
console.warn(`[Notification][Warning] ${title}: ${message}`);
|
|
3794
|
-
},
|
|
3795
|
-
apiError(error) {
|
|
3796
|
-
console.warn(`[Notification][API Error]`, error);
|
|
3797
|
-
}
|
|
3798
|
-
};
|
|
3799
|
-
function ElevasisCoreProvider({
|
|
3800
|
-
auth,
|
|
3801
|
-
queryClient,
|
|
3802
|
-
apiUrl,
|
|
3803
|
-
onError,
|
|
3804
|
-
notifications: notifications17,
|
|
3805
|
-
crmActions,
|
|
3806
|
-
listActions,
|
|
3807
|
-
children
|
|
3808
|
-
}) {
|
|
3809
|
-
if (auth.mode === "apiKey") {
|
|
3810
|
-
throw new Error(
|
|
3811
|
-
`ElevasisCoreProvider: auth mode 'apiKey' is not yet implemented. Only 'authkit' mode is supported.`
|
|
3812
|
-
);
|
|
3813
|
-
}
|
|
3814
|
-
const resolvedQueryClient = queryClient ?? getDefaultQueryClient();
|
|
3815
|
-
const resolvedCrmActions = crmActions ?? [];
|
|
3816
|
-
const resolvedListActions = listActions ?? EMPTY_LIST_ACTIONS;
|
|
3817
|
-
const content = apiUrl ? /* @__PURE__ */ jsx(ServiceStack, { apiUrl, onError, notifications: notifications17, children }) : children;
|
|
3818
|
-
const AuthInner = /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(LazyCoreAuthKitInner, { auth, children: content }) });
|
|
3819
|
-
return /* @__PURE__ */ jsx(QueryClientProvider, { client: resolvedQueryClient, children: /* @__PURE__ */ jsx(CrmActionsProvider, { actions: resolvedCrmActions, children: /* @__PURE__ */ jsx(ListActionsProvider, { registry: resolvedListActions, children: AuthInner }) }) });
|
|
3820
|
-
}
|
|
3821
|
-
function ServiceStack({
|
|
3822
|
-
apiUrl,
|
|
3823
|
-
onError,
|
|
3824
|
-
notifications: notifications17,
|
|
3825
|
-
children
|
|
3826
|
-
}) {
|
|
3827
|
-
const { getAccessToken } = useAuthContext();
|
|
3828
|
-
const orgIdRef = useRef(null);
|
|
3829
|
-
const getOrganizationId = useRef(() => orgIdRef.current).current;
|
|
3830
|
-
return /* @__PURE__ */ jsx(
|
|
3831
|
-
ApiClientProvider,
|
|
3832
|
-
{
|
|
3833
|
-
getAccessToken,
|
|
3834
|
-
getOrganizationId,
|
|
3835
|
-
isOrganizationReady: false,
|
|
3836
|
-
onError,
|
|
3837
|
-
children: /* @__PURE__ */ jsx(ServiceStackInner, { apiUrl, orgIdRef, notifications: notifications17, children })
|
|
3838
|
-
}
|
|
3839
|
-
);
|
|
3840
|
-
}
|
|
3841
|
-
function ServiceStackInner({
|
|
3842
|
-
apiUrl,
|
|
3843
|
-
orgIdRef,
|
|
3844
|
-
notifications: notifications17,
|
|
3845
|
-
children
|
|
3846
|
-
}) {
|
|
3847
|
-
const { apiRequest } = useApiClient(apiUrl);
|
|
3848
|
-
const resolvedNotifications = notifications17 ?? consoleNotificationAdapter;
|
|
3849
|
-
return /* @__PURE__ */ jsx(ProfileProvider, { apiRequest, children: /* @__PURE__ */ jsx(OrganizationProvider, { apiRequest, children: /* @__PURE__ */ jsx(OrgServiceBridge, { orgIdRef, apiRequest, notifications: resolvedNotifications, children }) }) });
|
|
3850
|
-
}
|
|
3851
|
-
function OrgServiceBridge({
|
|
3852
|
-
orgIdRef,
|
|
3853
|
-
apiRequest,
|
|
3854
|
-
notifications: notifications17,
|
|
3855
|
-
children
|
|
3856
|
-
}) {
|
|
3857
|
-
const { currentWorkOSOrganizationId, isInitializing, isOrgRefreshing } = useOrganization();
|
|
3858
|
-
orgIdRef.current = currentWorkOSOrganizationId;
|
|
3859
|
-
const isReady = !!currentWorkOSOrganizationId && !isInitializing && !isOrgRefreshing;
|
|
3860
|
-
return /* @__PURE__ */ jsx(
|
|
3861
|
-
ElevasisServiceProvider,
|
|
3862
|
-
{
|
|
3863
|
-
apiRequest,
|
|
3864
|
-
workOSOrganizationId: currentWorkOSOrganizationId,
|
|
3865
|
-
isReady,
|
|
3866
|
-
children: /* @__PURE__ */ jsx(NotificationProvider, { adapter: notifications17, children: /* @__PURE__ */ jsx(InitializationProvider, { children }) })
|
|
3867
|
-
}
|
|
3868
|
-
);
|
|
3869
|
-
}
|
|
3870
|
-
var EMPTY_CANONICAL_MODEL = resolveOrganizationModel(void 0, { mergeDefaults: false });
|
|
3871
|
-
function useResolvedOrganizationModel() {
|
|
3872
|
-
const { organizationModel: organizationModel2 } = useElevasisSystems();
|
|
3873
|
-
return useMemo(() => organizationModel2 ?? EMPTY_CANONICAL_MODEL, [organizationModel2]);
|
|
3874
|
-
}
|
|
3875
|
-
var defaultSystemSidebarWidth = 250;
|
|
3876
|
-
function SystemShell({ children }) {
|
|
3877
|
-
const { shellRuntime } = useElevasisSystems();
|
|
3878
|
-
const { currentPath } = useRouterContext();
|
|
3879
|
-
const routeMatch = shellRuntime.resolveRoute(currentPath);
|
|
3880
|
-
if (routeMatch.status === "hidden") {
|
|
3881
|
-
return /* @__PURE__ */ jsx(FeatureUnavailableState, { path: currentPath });
|
|
3882
|
-
}
|
|
3883
|
-
if (routeMatch.status !== "matched" || !routeMatch.system?.sidebar) {
|
|
3884
|
-
return /* @__PURE__ */ jsx(Fragment, { children });
|
|
3885
|
-
}
|
|
3886
|
-
const SidebarComponent = routeMatch.system.sidebar;
|
|
3887
|
-
const sidebarWidth = typeof routeMatch.system.sidebarWidth === "function" ? routeMatch.system.sidebarWidth({ currentPath }) : routeMatch.system.sidebarWidth ?? defaultSystemSidebarWidth;
|
|
3888
|
-
if (sidebarWidth === 0) {
|
|
3889
|
-
return /* @__PURE__ */ jsx(Fragment, { children });
|
|
3890
|
-
}
|
|
3891
|
-
return /* @__PURE__ */ jsxs(SubshellContainer, { children: [
|
|
3892
|
-
/* @__PURE__ */ jsx(SubshellSidebar, { width: sidebarWidth, children: /* @__PURE__ */ jsx(SidebarComponent, {}) }),
|
|
3893
|
-
/* @__PURE__ */ jsx(SubshellRightSideContainer, { children })
|
|
3894
|
-
] });
|
|
3895
|
-
}
|
|
3896
|
-
var mantineAdapter = {
|
|
3897
|
-
success(title, message) {
|
|
3898
|
-
notifications.show({ title, message, autoClose: 5e3, color: "green", position: "top-right" });
|
|
3899
|
-
},
|
|
3900
|
-
error(title, message) {
|
|
3901
|
-
notifications.show({ title, message, autoClose: 5e3, color: "red", position: "top-right" });
|
|
3902
|
-
},
|
|
3903
|
-
info(title, message) {
|
|
3904
|
-
notifications.show({ title, message, autoClose: 5e3, color: "blue", position: "top-right" });
|
|
3905
|
-
},
|
|
3906
|
-
warning(title, message) {
|
|
3907
|
-
notifications.show({ title, message, autoClose: 5e3, color: "orange", position: "top-right" });
|
|
3908
|
-
},
|
|
3909
|
-
apiError(error) {
|
|
3910
|
-
const { message, code, requestId, fields, retryAfter } = getErrorInfo(error);
|
|
3911
|
-
const hasFields = fields && Object.keys(fields).length > 0;
|
|
3912
|
-
notifications.show({
|
|
3913
|
-
title: getErrorTitle(code),
|
|
3914
|
-
message: formatErrorMessage(message, requestId, fields, retryAfter),
|
|
3915
|
-
autoClose: retryAfter ? retryAfter * 1e3 : hasFields ? 8e3 : 5e3,
|
|
3916
|
-
color: "red",
|
|
3917
|
-
position: "top-right"
|
|
3918
|
-
});
|
|
3919
|
-
}
|
|
3920
|
-
};
|
|
3921
|
-
function ElevasisUIProvider({ theme, children, ...coreProps }) {
|
|
3922
|
-
const resolvedColorScheme = theme?.colorScheme ?? "dark";
|
|
3923
|
-
const activePresets = theme?.presets ?? PRESETS;
|
|
3924
|
-
const preset = useMemo(() => getPreset(theme?.preset ?? "default", theme?.presets), [theme?.preset, theme?.presets]);
|
|
3925
|
-
const resolvedAppearance = {
|
|
3926
|
-
background: theme?.background ?? preset.background ?? /* @__PURE__ */ jsx(AppBackground, {}),
|
|
3927
|
-
loader: theme?.loader ?? preset.loader ?? /* @__PURE__ */ jsx(Loader, { size: "xl", loaders: { elevasis: ElevasisLoader }, type: "elevasis" })
|
|
3928
|
-
};
|
|
3929
|
-
useEffect(() => {
|
|
3930
|
-
if (!preset.fontImports?.length) return;
|
|
3931
|
-
const links = [];
|
|
3932
|
-
for (const href of preset.fontImports) {
|
|
3933
|
-
if (document.querySelector(`link[href="${href}"]`)) continue;
|
|
3934
|
-
const link = document.createElement("link");
|
|
3935
|
-
link.rel = "stylesheet";
|
|
3936
|
-
link.href = href;
|
|
3937
|
-
document.head.appendChild(link);
|
|
3938
|
-
links.push(link);
|
|
3939
|
-
}
|
|
3940
|
-
const subtitleFont = preset.subtitleFontFamily ?? preset.framework?.headings?.fontFamily ?? preset.framework?.fontFamily ?? "";
|
|
3941
|
-
document.documentElement.style.setProperty("--elevasis-font-family-subtitle", subtitleFont);
|
|
3942
|
-
return () => {
|
|
3943
|
-
links.forEach((l) => l.remove());
|
|
3944
|
-
document.documentElement.style.removeProperty("--elevasis-font-family-subtitle");
|
|
3945
|
-
};
|
|
3946
|
-
}, [
|
|
3947
|
-
preset.fontImports,
|
|
3948
|
-
preset.subtitleFontFamily,
|
|
3949
|
-
preset.framework?.headings?.fontFamily,
|
|
3950
|
-
preset.framework?.fontFamily
|
|
3951
|
-
]);
|
|
3952
|
-
const resolvedTheme = useMemo(() => {
|
|
3953
|
-
const primaryHex = theme?.tokens?.primary ?? preset.dark.primary;
|
|
3954
|
-
const primaryOverride = {
|
|
3955
|
-
primaryColor: "primary",
|
|
3956
|
-
colors: { primary: generateShades(primaryHex) }
|
|
3957
|
-
};
|
|
3958
|
-
let base = mergeThemeOverrides(mantineThemeOverride, primaryOverride);
|
|
3959
|
-
if (preset.framework) base = mergeThemeOverrides(base, preset.framework);
|
|
3960
|
-
return theme?.mantine ? mergeThemeOverrides(base, theme.mantine) : base;
|
|
3961
|
-
}, [theme?.mantine, preset, theme?.tokens?.primary]);
|
|
3962
|
-
const cssVariablesResolver = useMemo(
|
|
3963
|
-
() => createCssVariablesResolver(theme?.tokens, theme?.preset, theme?.presets),
|
|
3964
|
-
[theme?.tokens, theme?.preset, theme?.presets]
|
|
3965
|
-
);
|
|
3966
|
-
return /* @__PURE__ */ jsx(
|
|
3967
|
-
MantineProvider,
|
|
3968
|
-
{
|
|
3969
|
-
theme: resolvedTheme,
|
|
3970
|
-
defaultColorScheme: resolvedColorScheme,
|
|
3971
|
-
cssVariablesResolver,
|
|
3972
|
-
children: /* @__PURE__ */ jsx(PresetsProvider, { value: activePresets, children: /* @__PURE__ */ jsx(AppearanceProvider, { value: resolvedAppearance, children: /* @__PURE__ */ jsx(ElevasisCoreProvider, { notifications: mantineAdapter, ...coreProps, children }) }) })
|
|
3973
|
-
}
|
|
3974
|
-
);
|
|
3975
|
-
}
|
|
3976
|
-
function createTestSystemsProvider({
|
|
3977
|
-
organizationModel: organizationModel2,
|
|
3978
|
-
systems = []
|
|
3979
|
-
} = {}) {
|
|
3980
|
-
return function TestSystemsProvider({ children }) {
|
|
3981
|
-
return /* @__PURE__ */ jsx(ElevasisSystemsProvider, { systems, organizationModel: organizationModel2, children });
|
|
3982
|
-
};
|
|
3983
|
-
}
|
|
3984
2929
|
function useSSEConnection({
|
|
3985
2930
|
manager,
|
|
3986
2931
|
connectionKey,
|
|
@@ -5109,7 +4054,7 @@ function buildResourceSetKey(directResources, descendantResources) {
|
|
|
5109
4054
|
].sort().join(",");
|
|
5110
4055
|
}
|
|
5111
4056
|
function useSystemHealth({
|
|
5112
|
-
systemPath
|
|
4057
|
+
systemPath,
|
|
5113
4058
|
timeRange,
|
|
5114
4059
|
includeDescendants = true,
|
|
5115
4060
|
directResources,
|
|
@@ -5126,7 +4071,7 @@ function useSystemHealth({
|
|
|
5126
4071
|
return useQuery({
|
|
5127
4072
|
queryKey: observabilityKeys.systemHealth(
|
|
5128
4073
|
workOSOrganizationId,
|
|
5129
|
-
|
|
4074
|
+
systemPath,
|
|
5130
4075
|
timeRange,
|
|
5131
4076
|
includeDescendants,
|
|
5132
4077
|
includeDescendants ? "descendants" : "direct",
|
|
@@ -5140,7 +4085,7 @@ function useSystemHealth({
|
|
|
5140
4085
|
return apiRequest("/observability/system-health", {
|
|
5141
4086
|
method: "POST",
|
|
5142
4087
|
body: JSON.stringify({
|
|
5143
|
-
systemPath
|
|
4088
|
+
systemPath,
|
|
5144
4089
|
includeDescendants,
|
|
5145
4090
|
startDate,
|
|
5146
4091
|
endDate,
|
|
@@ -6805,10 +5750,10 @@ function useDeleteCompanies() {
|
|
|
6805
5750
|
const queryClient = useQueryClient();
|
|
6806
5751
|
return useMutation({
|
|
6807
5752
|
mutationFn: async (companyIds) => {
|
|
6808
|
-
const
|
|
6809
|
-
if (
|
|
5753
|
+
const uniqueIds = [...new Set(companyIds)].filter(Boolean);
|
|
5754
|
+
if (uniqueIds.length === 0) return;
|
|
6810
5755
|
await Promise.all(
|
|
6811
|
-
|
|
5756
|
+
uniqueIds.map(
|
|
6812
5757
|
(companyId) => apiRequest(`/acquisition/companies/${companyId}`, {
|
|
6813
5758
|
method: "DELETE"
|
|
6814
5759
|
})
|
|
@@ -6956,10 +5901,10 @@ function useDeleteContacts() {
|
|
|
6956
5901
|
const queryClient = useQueryClient();
|
|
6957
5902
|
return useMutation({
|
|
6958
5903
|
mutationFn: async (contactIds) => {
|
|
6959
|
-
const
|
|
6960
|
-
if (
|
|
5904
|
+
const uniqueIds = [...new Set(contactIds)].filter(Boolean);
|
|
5905
|
+
if (uniqueIds.length === 0) return;
|
|
6961
5906
|
await Promise.all(
|
|
6962
|
-
|
|
5907
|
+
uniqueIds.map(
|
|
6963
5908
|
(contactId) => apiRequest(`/acquisition/contacts/${contactId}`, {
|
|
6964
5909
|
method: "DELETE"
|
|
6965
5910
|
})
|
|
@@ -7666,32 +6611,6 @@ function useUserMemberships(userId, params) {
|
|
|
7666
6611
|
gcTime: GC_TIME_MEDIUM
|
|
7667
6612
|
});
|
|
7668
6613
|
}
|
|
7669
|
-
function useUpdateMemberConfig() {
|
|
7670
|
-
const { apiRequest } = useElevasisServices();
|
|
7671
|
-
const adapter = useNotificationAdapter();
|
|
7672
|
-
const queryClient = useQueryClient();
|
|
7673
|
-
const { retry: refreshOrganizations } = useOrganization();
|
|
7674
|
-
return useMutation({
|
|
7675
|
-
mutationFn: async ({ membershipId, config }) => {
|
|
7676
|
-
return apiRequest(`/memberships/${membershipId}/config`, {
|
|
7677
|
-
method: "PATCH",
|
|
7678
|
-
body: JSON.stringify({ config })
|
|
7679
|
-
});
|
|
7680
|
-
},
|
|
7681
|
-
onSuccess: async () => {
|
|
7682
|
-
queryClient.invalidateQueries({ queryKey: ["memberships"] });
|
|
7683
|
-
await refreshOrganizations();
|
|
7684
|
-
notifications.show({
|
|
7685
|
-
title: "Success",
|
|
7686
|
-
message: "Member config updated",
|
|
7687
|
-
color: "teal"
|
|
7688
|
-
});
|
|
7689
|
-
},
|
|
7690
|
-
onError: (error) => {
|
|
7691
|
-
adapter.apiError(error);
|
|
7692
|
-
}
|
|
7693
|
-
});
|
|
7694
|
-
}
|
|
7695
6614
|
function useDeactivateMembership() {
|
|
7696
6615
|
const { apiRequest } = useElevasisServices();
|
|
7697
6616
|
const adapter = useNotificationAdapter();
|
|
@@ -8611,18 +7530,18 @@ function NotificationItem({ notification, onClose, onNavigate }) {
|
|
|
8611
7530
|
}
|
|
8612
7531
|
);
|
|
8613
7532
|
}
|
|
8614
|
-
function NotificationList({ notifications:
|
|
7533
|
+
function NotificationList({ notifications: notifications15, isLoading, onClose, onNavigate }) {
|
|
8615
7534
|
if (isLoading) {
|
|
8616
7535
|
return /* @__PURE__ */ jsx(Center, { p: "xl", children: /* @__PURE__ */ jsx(Loader, { size: "sm" }) });
|
|
8617
7536
|
}
|
|
8618
|
-
if (
|
|
7537
|
+
if (notifications15.length === 0) {
|
|
8619
7538
|
return /* @__PURE__ */ jsx(Center, { p: "xl", children: /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "No notifications" }) });
|
|
8620
7539
|
}
|
|
8621
|
-
return /* @__PURE__ */ jsx(Stack, { gap: 0, children:
|
|
7540
|
+
return /* @__PURE__ */ jsx(Stack, { gap: 0, children: notifications15.map((notification) => /* @__PURE__ */ jsx(NotificationItem, { notification, onClose, onNavigate }, notification.id)) });
|
|
8622
7541
|
}
|
|
8623
|
-
function NotificationPanel({ notifications:
|
|
7542
|
+
function NotificationPanel({ notifications: notifications15, isLoading, onClose, onNavigate }) {
|
|
8624
7543
|
const markAllAsRead = useMarkAllAsRead();
|
|
8625
|
-
const hasUnread =
|
|
7544
|
+
const hasUnread = notifications15.some((n) => !n.read);
|
|
8626
7545
|
const handleMarkAllAsRead = async () => {
|
|
8627
7546
|
await markAllAsRead.mutateAsync();
|
|
8628
7547
|
};
|
|
@@ -8635,7 +7554,7 @@ function NotificationPanel({ notifications: notifications17, isLoading, onClose,
|
|
|
8635
7554
|
/* @__PURE__ */ jsx(ScrollArea, { h: 400, type: "auto", children: /* @__PURE__ */ jsx(
|
|
8636
7555
|
NotificationList,
|
|
8637
7556
|
{
|
|
8638
|
-
notifications:
|
|
7557
|
+
notifications: notifications15,
|
|
8639
7558
|
isLoading,
|
|
8640
7559
|
onClose,
|
|
8641
7560
|
onNavigate
|
|
@@ -8656,14 +7575,14 @@ function NotificationBell({ unreadCount, onNavigate }) {
|
|
|
8656
7575
|
staleTime: 3e4
|
|
8657
7576
|
});
|
|
8658
7577
|
const { data, isLoading } = useNotifications({ limit: 20 });
|
|
8659
|
-
const
|
|
7578
|
+
const notifications15 = data?.notifications ?? [];
|
|
8660
7579
|
const count = unreadCount ?? apiCount;
|
|
8661
7580
|
return /* @__PURE__ */ jsxs(Popover, { opened, onChange: toggle, position: "bottom-end", width: 400, children: [
|
|
8662
7581
|
/* @__PURE__ */ jsx(Tooltip, { label: "Notifications", disabled: opened, children: /* @__PURE__ */ jsx(Popover.Target, { children: /* @__PURE__ */ jsx(Indicator, { label: count > 99 ? "99+" : count, disabled: count === 0, size: 16, offset: 4, children: /* @__PURE__ */ jsx(ActionIcon, { variant: "subtle", size: "lg", onClick: toggle, children: /* @__PURE__ */ jsx(IconBell, { size: 20, color: "var(--color-text-subtle)" }) }) }) }) }),
|
|
8663
7582
|
/* @__PURE__ */ jsx(Popover.Dropdown, { p: 0, children: /* @__PURE__ */ jsx(
|
|
8664
7583
|
NotificationPanel,
|
|
8665
7584
|
{
|
|
8666
|
-
notifications:
|
|
7585
|
+
notifications: notifications15,
|
|
8667
7586
|
isLoading,
|
|
8668
7587
|
onClose: close,
|
|
8669
7588
|
onNavigate
|
|
@@ -12172,46 +11091,6 @@ function DeploymentSettings() {
|
|
|
12172
11091
|
/* @__PURE__ */ jsx(Paper, { withBorder: true, children: /* @__PURE__ */ jsx(DeploymentList, { deployments, isLoading }) })
|
|
12173
11092
|
] });
|
|
12174
11093
|
}
|
|
12175
|
-
var FEATURES = [
|
|
12176
|
-
{ key: "crm", label: "CRM" },
|
|
12177
|
-
{ key: "lead-gen", label: "Lead Gen" },
|
|
12178
|
-
{ key: "projects", label: "Projects" },
|
|
12179
|
-
{ key: "seo", label: "SEO" }
|
|
12180
|
-
];
|
|
12181
|
-
function MembershipFeaturePanel({
|
|
12182
|
-
currentConfig,
|
|
12183
|
-
onConfigChange,
|
|
12184
|
-
disabled = false
|
|
12185
|
-
}) {
|
|
12186
|
-
const handleFeatureToggle = (featureKey, enabled) => {
|
|
12187
|
-
const newConfig = {
|
|
12188
|
-
...currentConfig,
|
|
12189
|
-
features: {
|
|
12190
|
-
...currentConfig?.features,
|
|
12191
|
-
[featureKey]: enabled
|
|
12192
|
-
}
|
|
12193
|
-
};
|
|
12194
|
-
onConfigChange(newConfig);
|
|
12195
|
-
};
|
|
12196
|
-
return /* @__PURE__ */ jsx(Card, { withBorder: true, children: /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
|
|
12197
|
-
/* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "Toggle features this member can access." }),
|
|
12198
|
-
FEATURES.map(({ key, label }) => {
|
|
12199
|
-
const isEnabled = currentConfig?.features?.[key] !== false;
|
|
12200
|
-
return /* @__PURE__ */ jsxs(Group, { justify: "space-between", wrap: "nowrap", children: [
|
|
12201
|
-
/* @__PURE__ */ jsx(Text, { size: "sm", children: label }),
|
|
12202
|
-
/* @__PURE__ */ jsx(
|
|
12203
|
-
Switch,
|
|
12204
|
-
{
|
|
12205
|
-
checked: isEnabled,
|
|
12206
|
-
onChange: (e) => handleFeatureToggle(key, e.currentTarget.checked),
|
|
12207
|
-
disabled,
|
|
12208
|
-
size: "md"
|
|
12209
|
-
}
|
|
12210
|
-
)
|
|
12211
|
-
] }, key);
|
|
12212
|
-
})
|
|
12213
|
-
] }) });
|
|
12214
|
-
}
|
|
12215
11094
|
function MembershipStatusBadge({ status, size = "sm", variant = "light" }) {
|
|
12216
11095
|
const getStatusLabel = (status2) => {
|
|
12217
11096
|
switch (status2) {
|
|
@@ -15141,423 +14020,6 @@ function SessionMemory({ memory }) {
|
|
|
15141
14020
|
] })
|
|
15142
14021
|
] });
|
|
15143
14022
|
}
|
|
15144
|
-
var tokens = {
|
|
15145
|
-
cardBg: "rgba(16, 16, 20, 0.92)",
|
|
15146
|
-
cardBorder: "rgba(255, 255, 255, 0.06)",
|
|
15147
|
-
accentRed: "#ff5555",
|
|
15148
|
-
accentRedDim: "rgba(255, 85, 85, 0.15)",
|
|
15149
|
-
textPrimary: "#e8e8e8",
|
|
15150
|
-
textSecondary: "rgba(255, 255, 255, 0.5)",
|
|
15151
|
-
textTertiary: "rgba(255, 255, 255, 0.3)",
|
|
15152
|
-
codeBg: "rgba(0, 0, 0, 0.35)",
|
|
15153
|
-
codeBorder: "rgba(255, 255, 255, 0.05)",
|
|
15154
|
-
fileHighlight: "#7dd3fc",
|
|
15155
|
-
separator: "rgba(255, 255, 255, 0.06)",
|
|
15156
|
-
mono: "'JetBrains Mono', 'Fira Code', 'Cascadia Code', ui-monospace, monospace",
|
|
15157
|
-
sans: "'Inter', -apple-system, system-ui, sans-serif"
|
|
15158
|
-
};
|
|
15159
|
-
function parseStackFrames(stack) {
|
|
15160
|
-
return stack.split("\n").filter((line) => line.trim().startsWith("at ")).map((line) => {
|
|
15161
|
-
const trimmed = line.trim();
|
|
15162
|
-
const parenMatch = trimmed.match(/^at\s+(.+?)\s+\((.+)\)$/);
|
|
15163
|
-
if (parenMatch) {
|
|
15164
|
-
return { fn: parenMatch[1], file: parenMatch[2], raw: trimmed };
|
|
15165
|
-
}
|
|
15166
|
-
const simpleMatch = trimmed.match(/^at\s+(.+)$/);
|
|
15167
|
-
if (simpleMatch) {
|
|
15168
|
-
return { fn: "", file: simpleMatch[1], raw: trimmed };
|
|
15169
|
-
}
|
|
15170
|
-
return { fn: "", file: "", raw: trimmed };
|
|
15171
|
-
});
|
|
15172
|
-
}
|
|
15173
|
-
var COMPONENT_NOISE = /* @__PURE__ */ new Set([
|
|
15174
|
-
"div",
|
|
15175
|
-
"main",
|
|
15176
|
-
"span",
|
|
15177
|
-
"section",
|
|
15178
|
-
"Lazy",
|
|
15179
|
-
"Suspense",
|
|
15180
|
-
"SafeFragment",
|
|
15181
|
-
"MatchImpl",
|
|
15182
|
-
"MatchInnerImpl",
|
|
15183
|
-
"OutletImpl",
|
|
15184
|
-
"CatchBoundaryImpl",
|
|
15185
|
-
"CatchBoundary",
|
|
15186
|
-
"MatchesInner",
|
|
15187
|
-
"Matches",
|
|
15188
|
-
"SplitComponent"
|
|
15189
|
-
]);
|
|
15190
|
-
function isNoiseComponent(name) {
|
|
15191
|
-
if (COMPONENT_NOISE.has(name)) return true;
|
|
15192
|
-
if (name.startsWith("@mantine/") || name.startsWith("@tanstack/")) return true;
|
|
15193
|
-
return false;
|
|
15194
|
-
}
|
|
15195
|
-
function parseComponentStack(stack) {
|
|
15196
|
-
return stack.trim().split("\n").map((line) => line.trim()).filter((line) => line.startsWith("at ")).map((line) => {
|
|
15197
|
-
const match = line.match(/^at\s+(\S+)/);
|
|
15198
|
-
return match ? match[1] : line.replace(/^at\s+/, "");
|
|
15199
|
-
}).filter((name) => !isNoiseComponent(name));
|
|
15200
|
-
}
|
|
15201
|
-
function SectionLabel({ children }) {
|
|
15202
|
-
return /* @__PURE__ */ jsx(
|
|
15203
|
-
"div",
|
|
15204
|
-
{
|
|
15205
|
-
style: {
|
|
15206
|
-
fontSize: 10,
|
|
15207
|
-
fontFamily: tokens.sans,
|
|
15208
|
-
fontWeight: 600,
|
|
15209
|
-
textTransform: "uppercase",
|
|
15210
|
-
letterSpacing: "0.08em",
|
|
15211
|
-
color: tokens.textTertiary,
|
|
15212
|
-
marginBottom: 6
|
|
15213
|
-
},
|
|
15214
|
-
children
|
|
15215
|
-
}
|
|
15216
|
-
);
|
|
15217
|
-
}
|
|
15218
|
-
function CodeBlock({ children, style }) {
|
|
15219
|
-
return /* @__PURE__ */ jsx(
|
|
15220
|
-
"div",
|
|
15221
|
-
{
|
|
15222
|
-
style: {
|
|
15223
|
-
background: tokens.codeBg,
|
|
15224
|
-
border: `1px solid ${tokens.codeBorder}`,
|
|
15225
|
-
borderRadius: 6,
|
|
15226
|
-
padding: "10px 14px",
|
|
15227
|
-
fontFamily: tokens.mono,
|
|
15228
|
-
fontSize: 12,
|
|
15229
|
-
lineHeight: 1.6,
|
|
15230
|
-
color: tokens.textPrimary,
|
|
15231
|
-
overflowX: "auto",
|
|
15232
|
-
...style
|
|
15233
|
-
},
|
|
15234
|
-
children
|
|
15235
|
-
}
|
|
15236
|
-
);
|
|
15237
|
-
}
|
|
15238
|
-
function StackFrameRow({ frame }) {
|
|
15239
|
-
return /* @__PURE__ */ jsxs("div", { style: { display: "flex", gap: 8, alignItems: "baseline" }, children: [
|
|
15240
|
-
frame.fn && /* @__PURE__ */ jsx("span", { style: { color: tokens.textPrimary, flexShrink: 0 }, children: frame.fn }),
|
|
15241
|
-
/* @__PURE__ */ jsx("span", { style: { color: tokens.fileHighlight, opacity: 0.7, fontSize: 11 }, children: frame.file })
|
|
15242
|
-
] });
|
|
15243
|
-
}
|
|
15244
|
-
function Separator() {
|
|
15245
|
-
return /* @__PURE__ */ jsx("div", { style: { height: 1, background: tokens.separator, margin: "4px 0" } });
|
|
15246
|
-
}
|
|
15247
|
-
function ErrorReportCard({
|
|
15248
|
-
errorName,
|
|
15249
|
-
errorMessage,
|
|
15250
|
-
errorStack,
|
|
15251
|
-
componentStack,
|
|
15252
|
-
eventId,
|
|
15253
|
-
url,
|
|
15254
|
-
timestamp,
|
|
15255
|
-
reportText,
|
|
15256
|
-
appVersion
|
|
15257
|
-
}) {
|
|
15258
|
-
const [expanded, setExpanded] = useState(true);
|
|
15259
|
-
const frames = errorStack ? parseStackFrames(errorStack) : [];
|
|
15260
|
-
const components = componentStack ? parseComponentStack(componentStack) : [];
|
|
15261
|
-
return /* @__PURE__ */ jsxs(
|
|
15262
|
-
"div",
|
|
15263
|
-
{
|
|
15264
|
-
style: {
|
|
15265
|
-
background: tokens.cardBg,
|
|
15266
|
-
border: `1px solid ${tokens.cardBorder}`,
|
|
15267
|
-
borderTop: `3px solid ${tokens.accentRed}`,
|
|
15268
|
-
borderRadius: 10,
|
|
15269
|
-
maxWidth: 720,
|
|
15270
|
-
width: "100%",
|
|
15271
|
-
fontFamily: tokens.sans,
|
|
15272
|
-
backdropFilter: "blur(20px)",
|
|
15273
|
-
boxShadow: "0 25px 60px rgba(0, 0, 0, 0.5), 0 0 40px rgba(255, 85, 85, 0.05)"
|
|
15274
|
-
},
|
|
15275
|
-
children: [
|
|
15276
|
-
/* @__PURE__ */ jsxs("div", { style: { padding: "20px 24px 0" }, children: [
|
|
15277
|
-
/* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", marginBottom: 12 }, children: [
|
|
15278
|
-
/* @__PURE__ */ jsx("div", { style: { display: "flex", alignItems: "center", gap: 10 }, children: /* @__PURE__ */ jsx(
|
|
15279
|
-
"span",
|
|
15280
|
-
{
|
|
15281
|
-
style: {
|
|
15282
|
-
background: tokens.accentRedDim,
|
|
15283
|
-
color: tokens.accentRed,
|
|
15284
|
-
fontSize: 12,
|
|
15285
|
-
fontWeight: 600,
|
|
15286
|
-
fontFamily: tokens.mono,
|
|
15287
|
-
padding: "3px 10px",
|
|
15288
|
-
borderRadius: 4,
|
|
15289
|
-
letterSpacing: "0.02em"
|
|
15290
|
-
},
|
|
15291
|
-
children: errorName
|
|
15292
|
-
}
|
|
15293
|
-
) }),
|
|
15294
|
-
/* @__PURE__ */ jsx(CopyButton, { value: reportText, timeout: 2e3, children: ({ copied, copy }) => /* @__PURE__ */ jsx(Tooltip, { label: copied ? "Copied!" : "Copy error report", position: "left", children: /* @__PURE__ */ jsxs(
|
|
15295
|
-
"button",
|
|
15296
|
-
{
|
|
15297
|
-
onClick: copy,
|
|
15298
|
-
style: {
|
|
15299
|
-
background: copied ? "rgba(45, 212, 191, 0.15)" : "rgba(255, 255, 255, 0.06)",
|
|
15300
|
-
border: `1px solid ${copied ? "rgba(45, 212, 191, 0.3)" : "rgba(255, 255, 255, 0.08)"}`,
|
|
15301
|
-
borderRadius: 6,
|
|
15302
|
-
padding: "5px 12px",
|
|
15303
|
-
color: copied ? "#2dd4bf" : tokens.textSecondary,
|
|
15304
|
-
cursor: "pointer",
|
|
15305
|
-
display: "flex",
|
|
15306
|
-
alignItems: "center",
|
|
15307
|
-
gap: 6,
|
|
15308
|
-
fontSize: 12,
|
|
15309
|
-
fontFamily: tokens.sans,
|
|
15310
|
-
transition: "all 0.15s ease"
|
|
15311
|
-
},
|
|
15312
|
-
children: [
|
|
15313
|
-
copied ? /* @__PURE__ */ jsx(IconCheck, { size: 13 }) : /* @__PURE__ */ jsx(IconCopy, { size: 13 }),
|
|
15314
|
-
copied ? "Copied" : "Copy"
|
|
15315
|
-
]
|
|
15316
|
-
}
|
|
15317
|
-
) }) })
|
|
15318
|
-
] }),
|
|
15319
|
-
/* @__PURE__ */ jsx(
|
|
15320
|
-
"div",
|
|
15321
|
-
{
|
|
15322
|
-
style: {
|
|
15323
|
-
fontSize: 16,
|
|
15324
|
-
fontWeight: 500,
|
|
15325
|
-
color: tokens.textPrimary,
|
|
15326
|
-
lineHeight: 1.5,
|
|
15327
|
-
marginBottom: 16
|
|
15328
|
-
},
|
|
15329
|
-
children: errorMessage
|
|
15330
|
-
}
|
|
15331
|
-
),
|
|
15332
|
-
/* @__PURE__ */ jsxs(
|
|
15333
|
-
"div",
|
|
15334
|
-
{
|
|
15335
|
-
style: {
|
|
15336
|
-
background: tokens.codeBg,
|
|
15337
|
-
border: `1px solid ${tokens.codeBorder}`,
|
|
15338
|
-
borderRadius: 6,
|
|
15339
|
-
padding: "8px 12px",
|
|
15340
|
-
fontFamily: tokens.mono,
|
|
15341
|
-
fontSize: 12,
|
|
15342
|
-
color: tokens.fileHighlight,
|
|
15343
|
-
marginBottom: 16,
|
|
15344
|
-
display: "flex",
|
|
15345
|
-
alignItems: "center",
|
|
15346
|
-
gap: 8
|
|
15347
|
-
},
|
|
15348
|
-
children: [
|
|
15349
|
-
/* @__PURE__ */ jsx("span", { style: { color: tokens.textTertiary, fontSize: 10, flexShrink: 0 }, children: "URL" }),
|
|
15350
|
-
/* @__PURE__ */ jsx("span", { style: { opacity: 0.8 }, children: url })
|
|
15351
|
-
]
|
|
15352
|
-
}
|
|
15353
|
-
)
|
|
15354
|
-
] }),
|
|
15355
|
-
/* @__PURE__ */ jsx("div", { style: { padding: "0 24px" }, children: /* @__PURE__ */ jsxs(
|
|
15356
|
-
"button",
|
|
15357
|
-
{
|
|
15358
|
-
onClick: () => setExpanded((v) => !v),
|
|
15359
|
-
style: {
|
|
15360
|
-
background: "none",
|
|
15361
|
-
border: "none",
|
|
15362
|
-
color: tokens.textTertiary,
|
|
15363
|
-
fontSize: 11,
|
|
15364
|
-
fontFamily: tokens.sans,
|
|
15365
|
-
cursor: "pointer",
|
|
15366
|
-
padding: "4px 0",
|
|
15367
|
-
display: "flex",
|
|
15368
|
-
alignItems: "center",
|
|
15369
|
-
gap: 4,
|
|
15370
|
-
letterSpacing: "0.05em",
|
|
15371
|
-
textTransform: "uppercase",
|
|
15372
|
-
fontWeight: 600
|
|
15373
|
-
},
|
|
15374
|
-
children: [
|
|
15375
|
-
expanded ? "- Hide" : "+ Show",
|
|
15376
|
-
" details"
|
|
15377
|
-
]
|
|
15378
|
-
}
|
|
15379
|
-
) }),
|
|
15380
|
-
expanded && /* @__PURE__ */ jsxs("div", { style: { padding: "8px 24px 20px" }, children: [
|
|
15381
|
-
frames.length > 0 && /* @__PURE__ */ jsxs("div", { style: { marginBottom: 16 }, children: [
|
|
15382
|
-
/* @__PURE__ */ jsx(SectionLabel, { children: "Stack Trace" }),
|
|
15383
|
-
/* @__PURE__ */ jsx(CodeBlock, { style: { maxHeight: 220, overflowY: "auto" }, children: frames.map((frame, i) => /* @__PURE__ */ jsx(StackFrameRow, { frame }, i)) })
|
|
15384
|
-
] }),
|
|
15385
|
-
components.length > 0 && /* @__PURE__ */ jsxs("div", { style: { marginBottom: 16 }, children: [
|
|
15386
|
-
/* @__PURE__ */ jsx(SectionLabel, { children: "Component Tree" }),
|
|
15387
|
-
/* @__PURE__ */ jsx(CodeBlock, { style: { maxHeight: 120, overflowY: "auto" }, children: /* @__PURE__ */ jsx("div", { style: { display: "flex", flexWrap: "wrap", gap: "2px 0", alignItems: "center" }, children: components.map((name, i) => /* @__PURE__ */ jsxs("span", { style: { display: "inline-flex", alignItems: "center" }, children: [
|
|
15388
|
-
/* @__PURE__ */ jsx(
|
|
15389
|
-
"span",
|
|
15390
|
-
{
|
|
15391
|
-
style: {
|
|
15392
|
-
color: i === 0 ? tokens.accentRed : tokens.textPrimary,
|
|
15393
|
-
fontWeight: i === 0 ? 600 : 400
|
|
15394
|
-
},
|
|
15395
|
-
children: name
|
|
15396
|
-
}
|
|
15397
|
-
),
|
|
15398
|
-
i < components.length - 1 && /* @__PURE__ */ jsx("span", { style: { color: tokens.textTertiary, margin: "0 6px", fontSize: 10 }, children: "\u203A" })
|
|
15399
|
-
] }, i)) }) })
|
|
15400
|
-
] }),
|
|
15401
|
-
/* @__PURE__ */ jsx(Separator, {}),
|
|
15402
|
-
/* @__PURE__ */ jsxs(
|
|
15403
|
-
"div",
|
|
15404
|
-
{
|
|
15405
|
-
style: {
|
|
15406
|
-
display: "grid",
|
|
15407
|
-
gridTemplateColumns: "auto 1fr",
|
|
15408
|
-
gap: "4px 16px",
|
|
15409
|
-
fontSize: 11,
|
|
15410
|
-
fontFamily: tokens.mono,
|
|
15411
|
-
paddingTop: 12
|
|
15412
|
-
},
|
|
15413
|
-
children: [
|
|
15414
|
-
appVersion && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
15415
|
-
/* @__PURE__ */ jsx("span", { style: { color: tokens.textTertiary }, children: "version" }),
|
|
15416
|
-
/* @__PURE__ */ jsx("span", { style: { color: tokens.textSecondary }, children: appVersion })
|
|
15417
|
-
] }),
|
|
15418
|
-
/* @__PURE__ */ jsx("span", { style: { color: tokens.textTertiary }, children: "timestamp" }),
|
|
15419
|
-
/* @__PURE__ */ jsx("span", { style: { color: tokens.textSecondary }, children: timestamp }),
|
|
15420
|
-
/* @__PURE__ */ jsx("span", { style: { color: tokens.textTertiary }, children: "viewport" }),
|
|
15421
|
-
/* @__PURE__ */ jsxs("span", { style: { color: tokens.textSecondary }, children: [
|
|
15422
|
-
window.innerWidth,
|
|
15423
|
-
"x",
|
|
15424
|
-
window.innerHeight
|
|
15425
|
-
] }),
|
|
15426
|
-
eventId && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
15427
|
-
/* @__PURE__ */ jsx("span", { style: { color: tokens.textTertiary }, children: "sentry" }),
|
|
15428
|
-
/* @__PURE__ */ jsx("span", { style: { color: tokens.textSecondary }, children: eventId })
|
|
15429
|
-
] })
|
|
15430
|
-
]
|
|
15431
|
-
}
|
|
15432
|
-
)
|
|
15433
|
-
] }),
|
|
15434
|
-
/* @__PURE__ */ jsx(
|
|
15435
|
-
"div",
|
|
15436
|
-
{
|
|
15437
|
-
style: {
|
|
15438
|
-
borderTop: `1px solid ${tokens.separator}`,
|
|
15439
|
-
padding: "12px 24px",
|
|
15440
|
-
display: "flex",
|
|
15441
|
-
justifyContent: "center"
|
|
15442
|
-
},
|
|
15443
|
-
children: /* @__PURE__ */ jsx(
|
|
15444
|
-
"button",
|
|
15445
|
-
{
|
|
15446
|
-
onClick: () => window.location.reload(),
|
|
15447
|
-
style: {
|
|
15448
|
-
background: "none",
|
|
15449
|
-
border: "none",
|
|
15450
|
-
color: tokens.textTertiary,
|
|
15451
|
-
fontSize: 12,
|
|
15452
|
-
fontFamily: tokens.sans,
|
|
15453
|
-
cursor: "pointer",
|
|
15454
|
-
padding: "2px 8px",
|
|
15455
|
-
textDecoration: "underline",
|
|
15456
|
-
textUnderlineOffset: 3
|
|
15457
|
-
},
|
|
15458
|
-
children: "Reload page"
|
|
15459
|
-
}
|
|
15460
|
-
)
|
|
15461
|
-
}
|
|
15462
|
-
)
|
|
15463
|
-
]
|
|
15464
|
-
}
|
|
15465
|
-
);
|
|
15466
|
-
}
|
|
15467
|
-
function getErrorName(error) {
|
|
15468
|
-
if (error instanceof Error) {
|
|
15469
|
-
return error.constructor.name === "Error" ? "Error" : error.constructor.name;
|
|
15470
|
-
}
|
|
15471
|
-
return "Error";
|
|
15472
|
-
}
|
|
15473
|
-
function buildErrorReport(opts) {
|
|
15474
|
-
const { error, componentStack, eventId } = opts;
|
|
15475
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
15476
|
-
const errorStack = error instanceof Error ? error.stack : void 0;
|
|
15477
|
-
const url = opts.url ?? window.location.href;
|
|
15478
|
-
const sections = [
|
|
15479
|
-
`## Error Report`,
|
|
15480
|
-
`**Timestamp:** ${(/* @__PURE__ */ new Date()).toISOString()}`,
|
|
15481
|
-
`**URL:** ${url}`,
|
|
15482
|
-
opts.appVersion && `**App Version:** ${opts.appVersion}`,
|
|
15483
|
-
eventId && `**Sentry Event ID:** ${eventId}`,
|
|
15484
|
-
`**User Agent:** ${navigator.userAgent}`,
|
|
15485
|
-
`**Viewport:** ${window.innerWidth}x${window.innerHeight}`,
|
|
15486
|
-
"",
|
|
15487
|
-
`### Error`,
|
|
15488
|
-
"```",
|
|
15489
|
-
`${getErrorName(error)}: ${errorMessage}`,
|
|
15490
|
-
"```",
|
|
15491
|
-
"",
|
|
15492
|
-
errorStack && `### Stack Trace`,
|
|
15493
|
-
errorStack && "```",
|
|
15494
|
-
errorStack,
|
|
15495
|
-
errorStack && "```",
|
|
15496
|
-
errorStack && "",
|
|
15497
|
-
componentStack && `### Component Stack`,
|
|
15498
|
-
componentStack && "```",
|
|
15499
|
-
componentStack?.trim(),
|
|
15500
|
-
componentStack && "```"
|
|
15501
|
-
];
|
|
15502
|
-
return sections.filter(Boolean).join("\n");
|
|
15503
|
-
}
|
|
15504
|
-
function CrashErrorFallback({ error, componentStack, eventId, appVersion }) {
|
|
15505
|
-
const { background } = useAppearance();
|
|
15506
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
15507
|
-
const errorStack = error instanceof Error ? error.stack : void 0;
|
|
15508
|
-
const errorName = getErrorName(error);
|
|
15509
|
-
const reportText = buildErrorReport({ error, componentStack, eventId, appVersion });
|
|
15510
|
-
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
15511
|
-
return /* @__PURE__ */ jsxs(
|
|
15512
|
-
"div",
|
|
15513
|
-
{
|
|
15514
|
-
style: {
|
|
15515
|
-
position: "fixed",
|
|
15516
|
-
inset: 0,
|
|
15517
|
-
overflow: "auto",
|
|
15518
|
-
background: "var(--color-background)",
|
|
15519
|
-
display: "flex",
|
|
15520
|
-
alignItems: "center",
|
|
15521
|
-
justifyContent: "center",
|
|
15522
|
-
padding: 24
|
|
15523
|
-
},
|
|
15524
|
-
children: [
|
|
15525
|
-
background,
|
|
15526
|
-
/* @__PURE__ */ jsx("div", { style: { position: "relative", zIndex: 1, width: "100%", display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ jsx(
|
|
15527
|
-
ErrorReportCard,
|
|
15528
|
-
{
|
|
15529
|
-
errorName,
|
|
15530
|
-
errorMessage,
|
|
15531
|
-
errorStack,
|
|
15532
|
-
componentStack,
|
|
15533
|
-
eventId,
|
|
15534
|
-
url: window.location.href,
|
|
15535
|
-
timestamp,
|
|
15536
|
-
reportText,
|
|
15537
|
-
appVersion
|
|
15538
|
-
}
|
|
15539
|
-
) })
|
|
15540
|
-
]
|
|
15541
|
-
}
|
|
15542
|
-
);
|
|
15543
|
-
}
|
|
15544
|
-
var AppErrorBoundary = class extends Component {
|
|
15545
|
-
state = { error: null, componentStack: "" };
|
|
15546
|
-
static getDerivedStateFromError(error) {
|
|
15547
|
-
return { error };
|
|
15548
|
-
}
|
|
15549
|
-
componentDidCatch(error, errorInfo) {
|
|
15550
|
-
this.setState({ componentStack: errorInfo.componentStack ?? "" });
|
|
15551
|
-
this.props.onError?.(error, errorInfo);
|
|
15552
|
-
}
|
|
15553
|
-
render() {
|
|
15554
|
-
if (this.state.error !== null) {
|
|
15555
|
-
const props = { error: this.state.error, componentStack: this.state.componentStack };
|
|
15556
|
-
return this.props.fallback ? this.props.fallback(props) : /* @__PURE__ */ jsx(CrashErrorFallback, { ...props, appVersion: this.props.appVersion });
|
|
15557
|
-
}
|
|
15558
|
-
return this.props.children;
|
|
15559
|
-
}
|
|
15560
|
-
};
|
|
15561
14023
|
function RichTextEditor({ content, onChange, placeholder }) {
|
|
15562
14024
|
const editor = useEditor({
|
|
15563
14025
|
extensions: [
|
|
@@ -18316,7 +16778,7 @@ var workflowDisplayMetadataByResourceId = {
|
|
|
18316
16778
|
function titleFromResourceId(resourceId) {
|
|
18317
16779
|
return resourceId.replace(/-workflow$/, "").replace(/[-_]+/g, " ").replace(/\b\w/g, (character) => character.toUpperCase());
|
|
18318
16780
|
}
|
|
18319
|
-
var platformWorkflowResources = platformWorkflowResourceSeeds.map(([id,
|
|
16781
|
+
var platformWorkflowResources = platformWorkflowResourceSeeds.map(([id, systemPath, buildActionKey], index) => {
|
|
18320
16782
|
const codeRefs = platformWorkflowCodeRefs[id];
|
|
18321
16783
|
const ontology = buildActionKey !== void 0 ? workflowOntologyBindingsByBuildActionKey[buildActionKey] : void 0;
|
|
18322
16784
|
const contract = workflowContractsByResourceId[id];
|
|
@@ -18330,10 +16792,10 @@ var platformWorkflowResources = platformWorkflowResourceSeeds.map(([id, systemPa
|
|
|
18330
16792
|
id,
|
|
18331
16793
|
order: (index + 1) * 10,
|
|
18332
16794
|
kind: "workflow",
|
|
18333
|
-
systemPath
|
|
16795
|
+
systemPath,
|
|
18334
16796
|
title,
|
|
18335
16797
|
description: displayMetadata?.description ?? `Workflow resource for ${title}.`,
|
|
18336
|
-
ownerRoleId: getPlatformOwnerRoleId(
|
|
16798
|
+
ownerRoleId: getPlatformOwnerRoleId(systemPath),
|
|
18337
16799
|
status: "active",
|
|
18338
16800
|
...codeRefs ? { codeRefs } : {},
|
|
18339
16801
|
...ontologyWithContract ? { ontology: ontologyWithContract } : {}
|
|
@@ -19821,19 +18283,19 @@ function usesIntegration(key, from, to) {
|
|
|
19821
18283
|
})
|
|
19822
18284
|
];
|
|
19823
18285
|
}
|
|
19824
|
-
function requestsApproval(key, from, checkpointId,
|
|
18286
|
+
function requestsApproval(key, from, checkpointId, systemPath) {
|
|
19825
18287
|
return [
|
|
19826
18288
|
key,
|
|
19827
18289
|
topologyRelationship.requestsApproval(resource(from), checkpointId, {
|
|
19828
|
-
systemPath
|
|
18290
|
+
systemPath
|
|
19829
18291
|
})
|
|
19830
18292
|
];
|
|
19831
18293
|
}
|
|
19832
|
-
function checkpointRoutesTo(key, checkpointId, to,
|
|
18294
|
+
function checkpointRoutesTo(key, checkpointId, to, systemPath) {
|
|
19833
18295
|
return [
|
|
19834
18296
|
key,
|
|
19835
18297
|
topologyRelationship.checkpointRoutesTo(checkpointId, resource(to), {
|
|
19836
|
-
systemPath
|
|
18298
|
+
systemPath
|
|
19837
18299
|
})
|
|
19838
18300
|
];
|
|
19839
18301
|
}
|
|
@@ -22560,10 +21022,10 @@ function useDeleteLists() {
|
|
|
22560
21022
|
const queryClient = useQueryClient();
|
|
22561
21023
|
return useMutation({
|
|
22562
21024
|
mutationFn: async (listIds) => {
|
|
22563
|
-
const
|
|
22564
|
-
if (
|
|
21025
|
+
const uniqueIds = [...new Set(listIds)].filter(Boolean);
|
|
21026
|
+
if (uniqueIds.length === 0) return;
|
|
22565
21027
|
await Promise.all(
|
|
22566
|
-
|
|
21028
|
+
uniqueIds.map(
|
|
22567
21029
|
(listId) => apiRequest(`/acquisition/lists/${listId}`, {
|
|
22568
21030
|
method: "DELETE"
|
|
22569
21031
|
})
|
|
@@ -22580,12 +21042,17 @@ function useDeleteLists() {
|
|
|
22580
21042
|
}
|
|
22581
21043
|
});
|
|
22582
21044
|
}
|
|
22583
|
-
function
|
|
22584
|
-
|
|
21045
|
+
function isLeadGenExportAction(action) {
|
|
21046
|
+
if (!action) return false;
|
|
21047
|
+
const ontologyActionSegment = action.split(":action/")[1];
|
|
21048
|
+
if (ontologyActionSegment) {
|
|
21049
|
+
return ontologyActionSegment === "export" || ontologyActionSegment.startsWith("export.") || ontologyActionSegment.startsWith("export-");
|
|
21050
|
+
}
|
|
21051
|
+
return action === "lead-gen.export.list" || action.includes(".export.");
|
|
22585
21052
|
}
|
|
22586
21053
|
function getLeadGenExportWorkflowId(model) {
|
|
22587
21054
|
return Object.values(model.resources ?? {}).find(
|
|
22588
|
-
(resource2) => resource2.kind === "workflow" && resource2.systemPath === "sales.lead-gen" && (
|
|
21055
|
+
(resource2) => resource2.kind === "workflow" && resource2.systemPath === "sales.lead-gen" && (isLeadGenExportAction(resource2.ontology?.primaryAction) || resource2.ontology?.actions?.some(isLeadGenExportAction) === true)
|
|
22589
21056
|
)?.id;
|
|
22590
21057
|
}
|
|
22591
21058
|
function toBuildStepDefinition(step) {
|
|
@@ -24105,7 +22572,7 @@ function hasRunInput(run2) {
|
|
|
24105
22572
|
return input !== void 0 && input !== null;
|
|
24106
22573
|
}
|
|
24107
22574
|
function sanitizeStepInput(value, actionKey) {
|
|
24108
|
-
if (actionKey
|
|
22575
|
+
if (isLeadGenExportAction(actionKey)) return value;
|
|
24109
22576
|
const next = { ...value };
|
|
24110
22577
|
delete next.mode;
|
|
24111
22578
|
return next;
|
|
@@ -24765,7 +23232,7 @@ function StepRecordsPanel({
|
|
|
24765
23232
|
const rows = recordsQuery.data?.data ?? [];
|
|
24766
23233
|
const total = recordsQuery.data?.total ?? 0;
|
|
24767
23234
|
const totalPages = Math.max(1, Math.ceil(total / RECORDS_PAGE_SIZE));
|
|
24768
|
-
const isReviewExportStep = step.primaryEntity === "company" && (step.actionKey
|
|
23235
|
+
const isReviewExportStep = step.primaryEntity === "company" && (isLeadGenExportAction(step.actionKey) || step.action?.resourceId === exportWorkflowId);
|
|
24769
23236
|
const approvedCompanyIds = Object.entries(approvalByCompanyId).filter(([, status]) => status === "approved").map(([companyId]) => companyId);
|
|
24770
23237
|
const rejectedCompanyIds = Object.entries(approvalByCompanyId).filter(([, status]) => status === "rejected").map(([companyId]) => companyId);
|
|
24771
23238
|
const setApproval = (companyId, status) => {
|
|
@@ -24909,7 +23376,7 @@ function BuildTab({
|
|
|
24909
23376
|
const stepSchema = selectedStep?.action?.schema;
|
|
24910
23377
|
const stepLayout = selectedStep?.action?.layout;
|
|
24911
23378
|
const credentialRequirements = selectedStep?.credentialRequirements ?? [];
|
|
24912
|
-
const selectedStepIsReviewExport = selectedStep?.primaryEntity === "company" && (selectedStep.actionKey
|
|
23379
|
+
const selectedStepIsReviewExport = selectedStep?.primaryEntity === "company" && (isLeadGenExportAction(selectedStep.actionKey) || selectedStep.action?.resourceId === exportWorkflowId);
|
|
24913
23380
|
const selectedExportWorkflowId = selectedStep?.action?.resourceId ?? exportWorkflowId ?? "";
|
|
24914
23381
|
const visibleStepLayout = useMemo(
|
|
24915
23382
|
() => filterCredentialRequirementFields(stepLayout, credentialRequirements),
|
|
@@ -25228,7 +23695,7 @@ function BuildTab({
|
|
|
25228
23695
|
onVerify: handleVerifyCredential
|
|
25229
23696
|
}
|
|
25230
23697
|
),
|
|
25231
|
-
selectedStep.actionKey
|
|
23698
|
+
isLeadGenExportAction(selectedStep.actionKey) || getClickUpRequirement(selectedStep) ? /* @__PURE__ */ jsx(
|
|
25232
23699
|
TextInput,
|
|
25233
23700
|
{
|
|
25234
23701
|
label: "ClickUp List ID",
|
|
@@ -29971,127 +28438,6 @@ function CommandQueueDetailPage({
|
|
|
29971
28438
|
] });
|
|
29972
28439
|
}
|
|
29973
28440
|
|
|
29974
|
-
// src/features/operations/organization-graph/types.ts
|
|
29975
|
-
var ORGANIZATION_GRAPH_NODE_KIND_ORDER = [
|
|
29976
|
-
"organization",
|
|
29977
|
-
"system",
|
|
29978
|
-
"role",
|
|
29979
|
-
"action",
|
|
29980
|
-
"entity",
|
|
29981
|
-
"event",
|
|
29982
|
-
"policy",
|
|
29983
|
-
"stage",
|
|
29984
|
-
"resource",
|
|
29985
|
-
"knowledge",
|
|
29986
|
-
"customer-segment",
|
|
29987
|
-
"offering",
|
|
29988
|
-
"goal",
|
|
29989
|
-
"surface",
|
|
29990
|
-
"navigation-group",
|
|
29991
|
-
"ontology"
|
|
29992
|
-
];
|
|
29993
|
-
var ORGANIZATION_GRAPH_NODE_KIND_LABELS = {
|
|
29994
|
-
organization: "Organization",
|
|
29995
|
-
system: "System",
|
|
29996
|
-
role: "Role",
|
|
29997
|
-
action: "Action",
|
|
29998
|
-
entity: "Entity",
|
|
29999
|
-
event: "Event",
|
|
30000
|
-
policy: "Policy",
|
|
30001
|
-
stage: "Stage",
|
|
30002
|
-
resource: "Resource",
|
|
30003
|
-
knowledge: "Knowledge",
|
|
30004
|
-
"customer-segment": "Customer segment",
|
|
30005
|
-
offering: "Offering",
|
|
30006
|
-
goal: "Goal",
|
|
30007
|
-
surface: "Surface",
|
|
30008
|
-
"navigation-group": "Navigation group",
|
|
30009
|
-
ontology: "Ontology"
|
|
30010
|
-
};
|
|
30011
|
-
var ORGANIZATION_GRAPH_NODE_KIND_DETAIL_LABELS = {
|
|
30012
|
-
organization: "Organization root",
|
|
30013
|
-
system: "System",
|
|
30014
|
-
role: "Role",
|
|
30015
|
-
action: "Action",
|
|
30016
|
-
entity: "Entity",
|
|
30017
|
-
event: "Event",
|
|
30018
|
-
policy: "Policy",
|
|
30019
|
-
stage: "Stage",
|
|
30020
|
-
resource: "Resource",
|
|
30021
|
-
knowledge: "Knowledge",
|
|
30022
|
-
"customer-segment": "Customer segment",
|
|
30023
|
-
offering: "Offering",
|
|
30024
|
-
goal: "Goal",
|
|
30025
|
-
surface: "Surface",
|
|
30026
|
-
"navigation-group": "Navigation group",
|
|
30027
|
-
ontology: "Ontology record"
|
|
30028
|
-
};
|
|
30029
|
-
var ORGANIZATION_GRAPH_NODE_KIND_MEANINGS = {
|
|
30030
|
-
organization: "The root of the shared organization model and the parent for every derived node.",
|
|
30031
|
-
system: "A canonical Organization Model system for ownership, routing, and governance.",
|
|
30032
|
-
role: "An Organization Model role that owns responsibilities and may govern systems.",
|
|
30033
|
-
action: "A reusable action that can be attached to a system.",
|
|
30034
|
-
entity: "A modeled business object or stateful data domain owned by the organization model.",
|
|
30035
|
-
event: "A derived domain or runtime event emitted by entities, resources, or actions.",
|
|
30036
|
-
policy: "A governance rule that applies to targets and may trigger effects across the graph.",
|
|
30037
|
-
stage: "A lifecycle stage that records progress for an entity through a build pipeline.",
|
|
30038
|
-
resource: "A concrete command-view or mapped resource that bridges execution topology into the model.",
|
|
30039
|
-
knowledge: "An operational knowledge node that documents a process, strategy, or runbook in the org model.",
|
|
30040
|
-
"customer-segment": "A defined segment of customers or prospects that the organization targets or serves.",
|
|
30041
|
-
offering: "A product, service, or value proposition the organization delivers to customer segments.",
|
|
30042
|
-
goal: "A strategic or operational objective that guides priorities and measures progress.",
|
|
30043
|
-
surface: "A navigation surface (page or view) that is exposed through the platform shell.",
|
|
30044
|
-
"navigation-group": "A logical grouping of navigation surfaces within the platform shell.",
|
|
30045
|
-
ontology: "A compiled ontology record such as an object, action, catalog, value type, surface, or resource binding."
|
|
30046
|
-
};
|
|
30047
|
-
var ORGANIZATION_GRAPH_EDGE_KIND_LABELS = {
|
|
30048
|
-
contains: "Containment",
|
|
30049
|
-
references: "Reference",
|
|
30050
|
-
maps_to: "Mapping",
|
|
30051
|
-
uses: "Uses",
|
|
30052
|
-
governs: "Governs",
|
|
30053
|
-
links: "Links",
|
|
30054
|
-
affects: "Affects",
|
|
30055
|
-
emits: "Emits",
|
|
30056
|
-
originates_from: "Originates from",
|
|
30057
|
-
triggers: "Triggers",
|
|
30058
|
-
approval: "Approval",
|
|
30059
|
-
applies_to: "Applies to",
|
|
30060
|
-
effects: "Effects",
|
|
30061
|
-
actions: "Actions",
|
|
30062
|
-
reads: "Reads",
|
|
30063
|
-
writes: "Writes",
|
|
30064
|
-
uses_catalog: "Uses catalog"
|
|
30065
|
-
};
|
|
30066
|
-
var ORGANIZATION_GRAPH_EDGE_KIND_MEANINGS = {
|
|
30067
|
-
contains: "A hierarchy or ownership link inside the shared graph.",
|
|
30068
|
-
references: "A semantic association or dependency between two graph nodes.",
|
|
30069
|
-
maps_to: "An action is aligned to a concrete resource.",
|
|
30070
|
-
uses: "A graph node depends on another node, resource, entity, or integration.",
|
|
30071
|
-
governs: "A knowledge node, role, or policy provides authoritative guidance for another node.",
|
|
30072
|
-
links: "Two modeled nodes are associated without stronger ownership or execution semantics.",
|
|
30073
|
-
affects: "The source can influence the behavior, state, or outcome of the target.",
|
|
30074
|
-
emits: "The source produces an event that can be inspected or traversed.",
|
|
30075
|
-
originates_from: "The source is derived from or owned by the target origin.",
|
|
30076
|
-
triggers: "The source can start or activate the target.",
|
|
30077
|
-
approval: "The source requests or participates in an approval path.",
|
|
30078
|
-
applies_to: "A policy or rule targets the node it applies to.",
|
|
30079
|
-
effects: "A policy or event produces the target effect.",
|
|
30080
|
-
actions: "The source is bound to the target ontology action contract.",
|
|
30081
|
-
reads: "The source reads data described by the target ontology record.",
|
|
30082
|
-
writes: "The source writes data described by the target ontology record.",
|
|
30083
|
-
uses_catalog: "The source uses the target ontology catalog."
|
|
30084
|
-
};
|
|
30085
|
-
var DEFAULT_ORGANIZATION_GRAPH_FILTERS = {
|
|
30086
|
-
search: "",
|
|
30087
|
-
nodeKinds: [],
|
|
30088
|
-
topologyPresence: "all",
|
|
30089
|
-
environmentStatus: "all",
|
|
30090
|
-
resourceTypes: [],
|
|
30091
|
-
showIntegrations: true,
|
|
30092
|
-
domainFilters: {}
|
|
30093
|
-
};
|
|
30094
|
-
|
|
30095
28441
|
// src/features/operations/organization-graph/organizationGraphDetail.ts
|
|
30096
28442
|
var RELATIONSHIP_MEANINGS = {
|
|
30097
28443
|
triggers: "Executable handoff: the source resource starts the target resource.",
|
|
@@ -34170,8 +32516,8 @@ function getRelativeLuminance(color) {
|
|
|
34170
32516
|
};
|
|
34171
32517
|
return 0.2126 * channel(parsed.r) + 0.7152 * channel(parsed.g) + 0.0722 * channel(parsed.b);
|
|
34172
32518
|
}
|
|
34173
|
-
function getReadableTextColor(background,
|
|
34174
|
-
return getRelativeLuminance(background) > 0.38 ?
|
|
32519
|
+
function getReadableTextColor(background, tokens) {
|
|
32520
|
+
return getRelativeLuminance(background) > 0.38 ? tokens.background : tokens.text;
|
|
34175
32521
|
}
|
|
34176
32522
|
function readGraphThemeTokens() {
|
|
34177
32523
|
if (typeof window === "undefined") {
|
|
@@ -34195,86 +32541,86 @@ function readGraphThemeTokens() {
|
|
|
34195
32541
|
error: read("--color-error", FALLBACK_GRAPH_THEME.error)
|
|
34196
32542
|
};
|
|
34197
32543
|
}
|
|
34198
|
-
function getNodeThemeByKind(
|
|
32544
|
+
function getNodeThemeByKind(tokens) {
|
|
34199
32545
|
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(
|
|
32546
|
+
organization: mixColors(tokens.primary, tokens.text, 0.35),
|
|
32547
|
+
system: mixColors(tokens.primary, tokens.success, 0.48),
|
|
32548
|
+
role: mixColors(tokens.primary, tokens.error, 0.4),
|
|
32549
|
+
action: mixColors(tokens.primary, tokens.success, 0.72),
|
|
32550
|
+
entity: mixColors(tokens.success, tokens.warning, 0.44),
|
|
32551
|
+
event: mixColors(tokens.warning, tokens.error, 0.48),
|
|
32552
|
+
policy: mixColors(tokens.primary, tokens.error, 0.62),
|
|
32553
|
+
stage: mixColors(tokens.primary, tokens.warning, 0.32),
|
|
32554
|
+
resource: mixColors(tokens.primary, tokens.warning, 0.58),
|
|
32555
|
+
knowledge: mixColors(tokens.primary, tokens.text, 0.6),
|
|
32556
|
+
"customer-segment": mixColors(tokens.success, tokens.text, 0.5),
|
|
32557
|
+
offering: mixColors(tokens.success, tokens.primary, 0.36),
|
|
32558
|
+
goal: mixColors(tokens.primary, tokens.error, 0.5),
|
|
32559
|
+
surface: mixColors(tokens.primary, tokens.success, 0.55),
|
|
32560
|
+
"navigation-group": mixColors(tokens.primary, tokens.text, 0.45),
|
|
32561
|
+
ontology: mixColors(tokens.primary, tokens.warning, 0.44)
|
|
34216
32562
|
};
|
|
34217
32563
|
return Object.fromEntries(
|
|
34218
32564
|
Object.entries(accentByKind).map(([kind, accent]) => {
|
|
34219
|
-
const background = mixColors(accent,
|
|
34220
|
-
const border = mixColors(accent,
|
|
32565
|
+
const background = mixColors(accent, tokens.surface === "transparent" ? tokens.background : tokens.surface, 0.18);
|
|
32566
|
+
const border = mixColors(accent, tokens.border, 0.5);
|
|
34221
32567
|
return [
|
|
34222
32568
|
kind,
|
|
34223
32569
|
{
|
|
34224
32570
|
background,
|
|
34225
32571
|
border,
|
|
34226
|
-
color: getReadableTextColor(background,
|
|
32572
|
+
color: getReadableTextColor(background, tokens)
|
|
34227
32573
|
}
|
|
34228
32574
|
];
|
|
34229
32575
|
})
|
|
34230
32576
|
);
|
|
34231
32577
|
}
|
|
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(
|
|
32578
|
+
function getEdgeColor(edge, tokens) {
|
|
32579
|
+
if (edge.relationshipType === "triggers") return mixColors(tokens.warning, tokens.primary, 0.7);
|
|
32580
|
+
if (edge.relationshipType === "uses") return mixColors(tokens.success, tokens.primary, 0.55);
|
|
32581
|
+
if (edge.relationshipType === "approval") return mixColors(tokens.warning, tokens.text, 0.5);
|
|
34236
32582
|
switch (edge.kind) {
|
|
34237
32583
|
case "contains":
|
|
34238
|
-
return mixColors(
|
|
32584
|
+
return mixColors(tokens.textDimmed, tokens.border, 0.45);
|
|
34239
32585
|
case "governs":
|
|
34240
32586
|
case "applies_to":
|
|
34241
|
-
return mixColors(
|
|
32587
|
+
return mixColors(tokens.primary, tokens.text, 0.45);
|
|
34242
32588
|
case "maps_to":
|
|
34243
32589
|
case "originates_from":
|
|
34244
32590
|
case "actions":
|
|
34245
|
-
return mixColors(
|
|
32591
|
+
return mixColors(tokens.primary, tokens.warning, 0.4);
|
|
34246
32592
|
case "uses":
|
|
34247
32593
|
case "links":
|
|
34248
32594
|
case "reads":
|
|
34249
32595
|
case "writes":
|
|
34250
32596
|
case "uses_catalog":
|
|
34251
|
-
return mixColors(
|
|
32597
|
+
return mixColors(tokens.success, tokens.primary, 0.44);
|
|
34252
32598
|
case "affects":
|
|
34253
32599
|
case "effects":
|
|
34254
|
-
return mixColors(
|
|
32600
|
+
return mixColors(tokens.error, tokens.primary, 0.42);
|
|
34255
32601
|
case "emits":
|
|
34256
32602
|
case "triggers":
|
|
34257
|
-
return mixColors(
|
|
32603
|
+
return mixColors(tokens.warning, tokens.error, 0.5);
|
|
34258
32604
|
case "references":
|
|
34259
32605
|
default:
|
|
34260
|
-
return mixColors(
|
|
32606
|
+
return mixColors(tokens.primary, tokens.success, 0.32);
|
|
34261
32607
|
}
|
|
34262
32608
|
}
|
|
34263
32609
|
function getNodeHaloColor(node, fallback, graph) {
|
|
34264
32610
|
const domain = getCommandViewNodeDomain(node, graph);
|
|
34265
32611
|
return DOMAIN_ZONE_TINT_COLOR[domain] ?? fallback;
|
|
34266
32612
|
}
|
|
34267
|
-
function getExploreEdgeColor(sourceId, targetId, nodeById,
|
|
32613
|
+
function getExploreEdgeColor(sourceId, targetId, nodeById, tokens, graph) {
|
|
34268
32614
|
if (sourceId.startsWith("centroid:")) {
|
|
34269
32615
|
const zone = sourceId.slice("centroid:".length);
|
|
34270
|
-
return mixColors(DOMAIN_ZONE_TINT_COLOR[zone] ??
|
|
32616
|
+
return mixColors(DOMAIN_ZONE_TINT_COLOR[zone] ?? tokens.primary, tokens.textDimmed, 0.46);
|
|
34271
32617
|
}
|
|
34272
32618
|
const sourceNode = nodeById.get(sourceId);
|
|
34273
32619
|
const targetNode = nodeById.get(targetId);
|
|
34274
|
-
const sourceTint = sourceNode ? getNodeHaloColor(sourceNode,
|
|
34275
|
-
const targetTint = targetNode ? getNodeHaloColor(targetNode,
|
|
34276
|
-
const tint = sourceTint ?? targetTint ??
|
|
34277
|
-
return mixColors(tint,
|
|
32620
|
+
const sourceTint = sourceNode ? getNodeHaloColor(sourceNode, tokens.primary, graph) : null;
|
|
32621
|
+
const targetTint = targetNode ? getNodeHaloColor(targetNode, tokens.primary, graph) : null;
|
|
32622
|
+
const tint = sourceTint ?? targetTint ?? tokens.primary;
|
|
32623
|
+
return mixColors(tint, tokens.textDimmed, 0.42);
|
|
34278
32624
|
}
|
|
34279
32625
|
function getNodeSize(kind) {
|
|
34280
32626
|
if (kind === "organization") {
|
|
@@ -34301,17 +32647,17 @@ function getDegreeWeightedSize(kind, degree) {
|
|
|
34301
32647
|
function getNodeScore(node, degreeByNodeId) {
|
|
34302
32648
|
return Math.max(1, degreeByNodeId.get(node.id) ?? 0);
|
|
34303
32649
|
}
|
|
34304
|
-
function getCommandViewRingColor(level,
|
|
32650
|
+
function getCommandViewRingColor(level, tokens) {
|
|
34305
32651
|
switch (level) {
|
|
34306
32652
|
case "healthy":
|
|
34307
|
-
return
|
|
32653
|
+
return tokens.success;
|
|
34308
32654
|
case "warning":
|
|
34309
|
-
return
|
|
32655
|
+
return tokens.warning;
|
|
34310
32656
|
case "critical":
|
|
34311
|
-
return
|
|
32657
|
+
return tokens.error;
|
|
34312
32658
|
case "inactive":
|
|
34313
32659
|
default:
|
|
34314
|
-
return mixColors(
|
|
32660
|
+
return mixColors(tokens.textDimmed, tokens.border, 0.6);
|
|
34315
32661
|
}
|
|
34316
32662
|
}
|
|
34317
32663
|
function getDomainCardPosition(domain) {
|
|
@@ -34339,16 +32685,16 @@ var DOMAIN_DISPLAY_LABELS = {
|
|
|
34339
32685
|
platform: "Platform",
|
|
34340
32686
|
other: "Other"
|
|
34341
32687
|
};
|
|
34342
|
-
function toCytoscapeElementsWithHealth(graph, graphIndex,
|
|
34343
|
-
const nodeThemeByKind = getNodeThemeByKind(
|
|
32688
|
+
function toCytoscapeElementsWithHealth(graph, graphIndex, tokens, commandViewHealthByNodeId, visualizationMode, selectedElement, expandedClusterDomains, parameters, expandedNodeIds) {
|
|
32689
|
+
const nodeThemeByKind = getNodeThemeByKind(tokens);
|
|
34344
32690
|
if (visualizationMode === "explore") {
|
|
34345
32691
|
const { syntheticNodes, backboneEdges, positions } = getExploreProjection(graph, expandedNodeIds);
|
|
34346
32692
|
const elements = [];
|
|
34347
32693
|
for (const sNode of syntheticNodes) {
|
|
34348
32694
|
const isOmRoot = sNode.isOmRoot === true;
|
|
34349
|
-
const fillColor = sNode.zoneTint ? mixColors(withAlpha(sNode.zoneTint, 0.22),
|
|
34350
|
-
const borderColor = sNode.zoneTint ? mixColors(sNode.zoneTint,
|
|
34351
|
-
const haloColor = sNode.zoneTint ??
|
|
32695
|
+
const fillColor = sNode.zoneTint ? mixColors(withAlpha(sNode.zoneTint, 0.22), tokens.background, 0.22) : mixColors(tokens.primary, tokens.surface === "transparent" ? tokens.background : tokens.surface, 0.18);
|
|
32696
|
+
const borderColor = sNode.zoneTint ? mixColors(sNode.zoneTint, tokens.border, 0.48) : mixColors(tokens.primary, tokens.border, 0.52);
|
|
32697
|
+
const haloColor = sNode.zoneTint ?? tokens.primary;
|
|
34352
32698
|
elements.push({
|
|
34353
32699
|
data: {
|
|
34354
32700
|
id: sNode.id,
|
|
@@ -34359,7 +32705,7 @@ function toCytoscapeElementsWithHealth(graph, graphIndex, tokens2, commandViewHe
|
|
|
34359
32705
|
zoneTint: sNode.zoneTint ?? void 0,
|
|
34360
32706
|
fillColor,
|
|
34361
32707
|
borderColor,
|
|
34362
|
-
textColor:
|
|
32708
|
+
textColor: tokens.text,
|
|
34363
32709
|
haloColor,
|
|
34364
32710
|
edgeHaloColor: withAlpha(haloColor, 0.1),
|
|
34365
32711
|
hasChildren: isOmRoot ? "false" : "true",
|
|
@@ -34378,8 +32724,8 @@ function toCytoscapeElementsWithHealth(graph, graphIndex, tokens2, commandViewHe
|
|
|
34378
32724
|
const size = getDegreeWeightedSize(node.kind, degree);
|
|
34379
32725
|
const theme = nodeThemeByKind[node.kind];
|
|
34380
32726
|
const health = commandViewHealthByNodeId?.get(node.id) ?? null;
|
|
34381
|
-
const fillColor = health && node.kind === "resource" ? mixColors(
|
|
34382
|
-
const borderColor = health ? getCommandViewRingColor(health.healthLevel,
|
|
32727
|
+
const fillColor = health && node.kind === "resource" ? mixColors(tokens.surfaceHover, tokens.background, 0.76) : theme.background;
|
|
32728
|
+
const borderColor = health ? getCommandViewRingColor(health.healthLevel, tokens) : theme.border;
|
|
34383
32729
|
const label = truncateGraphLabel(node.label, node.kind === "resource" ? 22 : 30);
|
|
34384
32730
|
const displayLabel = health ? `${label}
|
|
34385
32731
|
${health.summaryLabel}` : label;
|
|
@@ -34395,7 +32741,7 @@ ${health.summaryLabel}` : label;
|
|
|
34395
32741
|
label: displayLabel,
|
|
34396
32742
|
fillColor,
|
|
34397
32743
|
borderColor,
|
|
34398
|
-
textColor: health ?
|
|
32744
|
+
textColor: health ? tokens.text : theme.color,
|
|
34399
32745
|
zoneTint: zoneTint ?? void 0,
|
|
34400
32746
|
haloColor,
|
|
34401
32747
|
edgeHaloColor: withAlpha(haloColor, 0.08),
|
|
@@ -34413,8 +32759,8 @@ ${health.summaryLabel}` : label;
|
|
|
34413
32759
|
target: edge.target,
|
|
34414
32760
|
kind: "contains",
|
|
34415
32761
|
label: "",
|
|
34416
|
-
strokeColor: mixColors(
|
|
34417
|
-
edgeHaloColor: withAlpha(
|
|
32762
|
+
strokeColor: mixColors(tokens.border, tokens.textDimmed, 0.45),
|
|
32763
|
+
edgeHaloColor: withAlpha(tokens.primary, 0.05),
|
|
34418
32764
|
isExploreBackbone: "true"
|
|
34419
32765
|
}
|
|
34420
32766
|
});
|
|
@@ -34427,7 +32773,7 @@ ${health.summaryLabel}` : label;
|
|
|
34427
32773
|
const edgeId = `expand:${nodeId}:${childId}`;
|
|
34428
32774
|
if (addedPathNativeExpansionEdgeIds.has(edgeId)) continue;
|
|
34429
32775
|
addedPathNativeExpansionEdgeIds.add(edgeId);
|
|
34430
|
-
const strokeColor = getExploreEdgeColor(nodeId, childId, graphIndex.nodeById,
|
|
32776
|
+
const strokeColor = getExploreEdgeColor(nodeId, childId, graphIndex.nodeById, tokens, graph);
|
|
34431
32777
|
elements.push({
|
|
34432
32778
|
data: {
|
|
34433
32779
|
id: edgeId,
|
|
@@ -34456,7 +32802,7 @@ ${health.summaryLabel}` : label;
|
|
|
34456
32802
|
const edgeId2 = `expand:${nodeId}:${childId}`;
|
|
34457
32803
|
if (!addedExpansionEdgeIds.has(edgeId2)) {
|
|
34458
32804
|
addedExpansionEdgeIds.add(edgeId2);
|
|
34459
|
-
const strokeColor = getExploreEdgeColor(nodeId, childId, graphIndex.nodeById,
|
|
32805
|
+
const strokeColor = getExploreEdgeColor(nodeId, childId, graphIndex.nodeById, tokens, graph);
|
|
34460
32806
|
elements.push({
|
|
34461
32807
|
data: {
|
|
34462
32808
|
id: edgeId2,
|
|
@@ -34480,8 +32826,8 @@ ${health.summaryLabel}` : label;
|
|
|
34480
32826
|
const size = getDegreeWeightedSize(node.kind, degree);
|
|
34481
32827
|
const theme = nodeThemeByKind[node.kind];
|
|
34482
32828
|
const health = commandViewHealthByNodeId?.get(node.id) ?? null;
|
|
34483
|
-
const fillColor = health && node.kind === "resource" ? mixColors(
|
|
34484
|
-
const borderColor = health ? getCommandViewRingColor(health.healthLevel,
|
|
32829
|
+
const fillColor = health && node.kind === "resource" ? mixColors(tokens.surfaceHover, tokens.background, 0.76) : theme.background;
|
|
32830
|
+
const borderColor = health ? getCommandViewRingColor(health.healthLevel, tokens) : theme.border;
|
|
34485
32831
|
const label = truncateGraphLabel(node.label, node.kind === "resource" ? 22 : 30);
|
|
34486
32832
|
const displayLabel = health ? `${label}
|
|
34487
32833
|
${health.summaryLabel}` : label;
|
|
@@ -34497,7 +32843,7 @@ ${health.summaryLabel}` : label;
|
|
|
34497
32843
|
label: displayLabel,
|
|
34498
32844
|
fillColor,
|
|
34499
32845
|
borderColor,
|
|
34500
|
-
textColor: health ?
|
|
32846
|
+
textColor: health ? tokens.text : theme.color,
|
|
34501
32847
|
zoneTint: zoneTint ?? void 0,
|
|
34502
32848
|
haloColor,
|
|
34503
32849
|
edgeHaloColor: withAlpha(haloColor, 0.08),
|
|
@@ -34508,7 +32854,7 @@ ${health.summaryLabel}` : label;
|
|
|
34508
32854
|
const edgeId = `expand:${nodeId}:${childId}`;
|
|
34509
32855
|
if (!addedExpansionEdgeIds.has(edgeId)) {
|
|
34510
32856
|
addedExpansionEdgeIds.add(edgeId);
|
|
34511
|
-
const strokeColor = getExploreEdgeColor(nodeId, childId, graphIndex.nodeById,
|
|
32857
|
+
const strokeColor = getExploreEdgeColor(nodeId, childId, graphIndex.nodeById, tokens, graph);
|
|
34512
32858
|
elements.push({
|
|
34513
32859
|
data: {
|
|
34514
32860
|
id: edgeId,
|
|
@@ -34558,9 +32904,9 @@ ${health.summaryLabel}` : label;
|
|
|
34558
32904
|
}
|
|
34559
32905
|
const domainCardElements = [];
|
|
34560
32906
|
if (isCluster && domainGroups) {
|
|
34561
|
-
const cardBackground = withAlpha(
|
|
34562
|
-
const cardBorder = mixColors(
|
|
34563
|
-
const cardText =
|
|
32907
|
+
const cardBackground = withAlpha(tokens.surface === "transparent" ? tokens.background : tokens.surface, 0.92);
|
|
32908
|
+
const cardBorder = mixColors(tokens.border, tokens.textDimmed, 0.35);
|
|
32909
|
+
const cardText = tokens.textDimmed;
|
|
34564
32910
|
for (const [domain, members] of domainGroups) {
|
|
34565
32911
|
if (!expandedSet.has(domain)) {
|
|
34566
32912
|
const position = getDomainCardPosition(domain);
|
|
@@ -34592,8 +32938,8 @@ ${members.length} node${members.length === 1 ? "" : "s"}`,
|
|
|
34592
32938
|
const size = getDegreeWeightedSize(node.kind, degree);
|
|
34593
32939
|
const theme = nodeThemeByKind[node.kind];
|
|
34594
32940
|
const health = commandViewHealthByNodeId?.get(node.id) ?? null;
|
|
34595
|
-
const fillColor = health && node.kind === "resource" ? mixColors(
|
|
34596
|
-
const borderColor = health ? getCommandViewRingColor(health.healthLevel,
|
|
32941
|
+
const fillColor = health && node.kind === "resource" ? mixColors(tokens.surfaceHover, tokens.background, 0.76) : theme.background;
|
|
32942
|
+
const borderColor = health ? getCommandViewRingColor(health.healthLevel, tokens) : theme.border;
|
|
34597
32943
|
const maxLabelLength = node.kind === "resource" ? 22 : 30;
|
|
34598
32944
|
const label = truncateGraphLabel(node.label, maxLabelLength);
|
|
34599
32945
|
const displayLabel = health ? `${label}
|
|
@@ -34610,7 +32956,7 @@ ${health.summaryLabel}` : label;
|
|
|
34610
32956
|
label: displayLabel,
|
|
34611
32957
|
fillColor,
|
|
34612
32958
|
borderColor,
|
|
34613
|
-
textColor: health ?
|
|
32959
|
+
textColor: health ? tokens.text : theme.color,
|
|
34614
32960
|
zoneTint: zoneTint ?? void 0,
|
|
34615
32961
|
haloColor,
|
|
34616
32962
|
edgeHaloColor: withAlpha(haloColor, 0.08),
|
|
@@ -34620,7 +32966,7 @@ ${health.summaryLabel}` : label;
|
|
|
34620
32966
|
};
|
|
34621
32967
|
});
|
|
34622
32968
|
const edgeElements = graph.edges.filter((edge) => !hiddenBehindCardIds.has(edge.sourceId) && !hiddenBehindCardIds.has(edge.targetId)).map((edge) => {
|
|
34623
|
-
const strokeColor = getEdgeColor(edge,
|
|
32969
|
+
const strokeColor = getEdgeColor(edge, tokens);
|
|
34624
32970
|
return {
|
|
34625
32971
|
data: {
|
|
34626
32972
|
id: edge.id,
|
|
@@ -34679,10 +33025,10 @@ function getLayoutOptions(mode, selectedElement, traceResult) {
|
|
|
34679
33025
|
padding: 48
|
|
34680
33026
|
};
|
|
34681
33027
|
}
|
|
34682
|
-
function createCytoscapeStyle(
|
|
34683
|
-
const selectedBorder = mixColors(
|
|
34684
|
-
const traceBorder = mixColors(
|
|
34685
|
-
const edgeLabelBackground = withAlpha(
|
|
33028
|
+
function createCytoscapeStyle(tokens, visualizationMode) {
|
|
33029
|
+
const selectedBorder = mixColors(tokens.primary, tokens.textDimmed, 0.58);
|
|
33030
|
+
const traceBorder = mixColors(tokens.warning, tokens.border, 0.58);
|
|
33031
|
+
const edgeLabelBackground = withAlpha(tokens.background, 0.86);
|
|
34686
33032
|
const reducedMotion = shouldReduceGraphMotion();
|
|
34687
33033
|
const baseEdgeOpacity = visualizationMode === "cluster" || visualizationMode === "swimlane" ? 0.16 : visualizationMode === "focus" ? 0.42 : 0.28;
|
|
34688
33034
|
return [
|
|
@@ -34708,7 +33054,7 @@ function createCytoscapeStyle(tokens2, visualizationMode) {
|
|
|
34708
33054
|
padding: "10px",
|
|
34709
33055
|
"overlay-opacity": 0,
|
|
34710
33056
|
"text-outline-width": 1,
|
|
34711
|
-
"text-outline-color":
|
|
33057
|
+
"text-outline-color": tokens.background,
|
|
34712
33058
|
"text-outline-opacity": 0.56,
|
|
34713
33059
|
"underlay-color": "data(haloColor)",
|
|
34714
33060
|
"underlay-opacity": 0,
|
|
@@ -34879,7 +33225,7 @@ function createCytoscapeStyle(tokens2, visualizationMode) {
|
|
|
34879
33225
|
style: {
|
|
34880
33226
|
width: 1.05,
|
|
34881
33227
|
label: "",
|
|
34882
|
-
color:
|
|
33228
|
+
color: tokens.text,
|
|
34883
33229
|
"font-size": 10,
|
|
34884
33230
|
"font-weight": 700,
|
|
34885
33231
|
"curve-style": "bezier",
|
|
@@ -35040,7 +33386,7 @@ function createCytoscapeStyle(tokens2, visualizationMode) {
|
|
|
35040
33386
|
selector: "node.is-trace-endpoint",
|
|
35041
33387
|
style: {
|
|
35042
33388
|
opacity: 1,
|
|
35043
|
-
"border-color": mixColors(
|
|
33389
|
+
"border-color": mixColors(tokens.warning, tokens.textDimmed, 0.58),
|
|
35044
33390
|
"border-width": 3
|
|
35045
33391
|
}
|
|
35046
33392
|
},
|
|
@@ -35075,7 +33421,7 @@ function createCytoscapeStyle(tokens2, visualizationMode) {
|
|
|
35075
33421
|
selector: "node.is-expanded-node",
|
|
35076
33422
|
style: {
|
|
35077
33423
|
opacity: 1,
|
|
35078
|
-
"border-color": mixColors(
|
|
33424
|
+
"border-color": mixColors(tokens.primary, tokens.warning, 0.42),
|
|
35079
33425
|
"border-width": 2.2,
|
|
35080
33426
|
"background-opacity": 0.92,
|
|
35081
33427
|
"underlay-opacity": 0.04,
|
|
@@ -38099,8 +36445,8 @@ function countByKind2(resources) {
|
|
|
38099
36445
|
}
|
|
38100
36446
|
return counts;
|
|
38101
36447
|
}
|
|
38102
|
-
function aggregateSystemMetrics(model,
|
|
38103
|
-
if (
|
|
36448
|
+
function aggregateSystemMetrics(model, systemPath) {
|
|
36449
|
+
if (systemPath === "") {
|
|
38104
36450
|
const all = Object.values(model.resources ?? {});
|
|
38105
36451
|
return {
|
|
38106
36452
|
resourceCount: all.length,
|
|
@@ -38114,8 +36460,8 @@ function aggregateSystemMetrics(model, systemPath2) {
|
|
|
38114
36460
|
descendantResources: []
|
|
38115
36461
|
};
|
|
38116
36462
|
}
|
|
38117
|
-
const inclusive = getResourcesForSystem(model,
|
|
38118
|
-
const direct = getResourcesForSystem(model,
|
|
36463
|
+
const inclusive = getResourcesForSystem(model, systemPath, { includeDescendants: true });
|
|
36464
|
+
const direct = getResourcesForSystem(model, systemPath, { includeDescendants: false });
|
|
38119
36465
|
const directIds = new Set(direct.map((resource2) => resource2.id));
|
|
38120
36466
|
const descendant = inclusive.filter((resource2) => !directIds.has(resource2.id));
|
|
38121
36467
|
return {
|
|
@@ -38406,9 +36752,9 @@ function ontologyCounts(model) {
|
|
|
38406
36752
|
diagnostics: compiled.diagnostics.length
|
|
38407
36753
|
};
|
|
38408
36754
|
}
|
|
38409
|
-
function ontologyCountsForSystem(model,
|
|
36755
|
+
function ontologyCountsForSystem(model, systemPath) {
|
|
38410
36756
|
const compiled = compileOrganizationOntology(model);
|
|
38411
|
-
const belongsToSystem = (ownerSystemId) =>
|
|
36757
|
+
const belongsToSystem = (ownerSystemId) => systemPath === "" || ownerSystemId === systemPath || ownerSystemId?.startsWith(`${systemPath}.`);
|
|
38412
36758
|
return {
|
|
38413
36759
|
objects: Object.values(compiled.ontology.objectTypes).filter((record) => belongsToSystem(record.ownerSystemId)).length,
|
|
38414
36760
|
actions: Object.values(compiled.ontology.actionTypes).filter((record) => belongsToSystem(record.ownerSystemId)).length,
|
|
@@ -38417,11 +36763,11 @@ function ontologyCountsForSystem(model, systemPath2) {
|
|
|
38417
36763
|
diagnostics: compiled.diagnostics.length
|
|
38418
36764
|
};
|
|
38419
36765
|
}
|
|
38420
|
-
function buildBreadcrumbs(model,
|
|
36766
|
+
function buildBreadcrumbs(model, systemPath) {
|
|
38421
36767
|
const items = [{ label: "Systems", path: "" }];
|
|
38422
|
-
if (!
|
|
38423
|
-
const ancestors = getSystemAncestors(model,
|
|
38424
|
-
const segments =
|
|
36768
|
+
if (!systemPath) return items;
|
|
36769
|
+
const ancestors = getSystemAncestors(model, systemPath);
|
|
36770
|
+
const segments = systemPath.split(".");
|
|
38425
36771
|
for (let i = 0; i < ancestors.length; i++) {
|
|
38426
36772
|
items.push({
|
|
38427
36773
|
label: ancestors[i].label ?? ancestors[i].id,
|
|
@@ -38430,22 +36776,22 @@ function buildBreadcrumbs(model, systemPath2) {
|
|
|
38430
36776
|
}
|
|
38431
36777
|
return items;
|
|
38432
36778
|
}
|
|
38433
|
-
function kbPathForSystem(
|
|
38434
|
-
if (!
|
|
38435
|
-
return `/knowledge/by-system/${
|
|
36779
|
+
function kbPathForSystem(systemPath) {
|
|
36780
|
+
if (!systemPath) return "/knowledge";
|
|
36781
|
+
return `/knowledge/by-system/${systemPath}`;
|
|
38436
36782
|
}
|
|
38437
|
-
function resourcesPathForSystem(
|
|
38438
|
-
const suffix =
|
|
36783
|
+
function resourcesPathForSystem(systemPath) {
|
|
36784
|
+
const suffix = systemPath ? `?systemPath=${encodeURIComponent(systemPath)}` : "";
|
|
38439
36785
|
return `/operations/resources${suffix}`;
|
|
38440
36786
|
}
|
|
38441
|
-
function commandViewPathForSystem(
|
|
38442
|
-
const suffix =
|
|
36787
|
+
function commandViewPathForSystem(systemPath) {
|
|
36788
|
+
const suffix = systemPath ? `?systemPath=${encodeURIComponent(systemPath)}` : "";
|
|
38443
36789
|
return `/knowledge/command-view${suffix}`;
|
|
38444
36790
|
}
|
|
38445
|
-
function childEntries(
|
|
38446
|
-
const systems =
|
|
36791
|
+
function childEntries(systemPath, system, model) {
|
|
36792
|
+
const systems = systemPath ? childSystemsOf(system) : model.systems;
|
|
38447
36793
|
return Object.entries(systems).map(([localId, child]) => {
|
|
38448
|
-
const path =
|
|
36794
|
+
const path = systemPath ? `${systemPath}.${localId}` : localId;
|
|
38449
36795
|
return {
|
|
38450
36796
|
path,
|
|
38451
36797
|
system: child,
|
|
@@ -38574,15 +36920,15 @@ function SubsystemCard({
|
|
|
38574
36920
|
] })
|
|
38575
36921
|
] }) });
|
|
38576
36922
|
}
|
|
38577
|
-
function RelatedLinks({ systemPath
|
|
36923
|
+
function RelatedLinks({ systemPath }) {
|
|
38578
36924
|
return /* @__PURE__ */ jsxs(Group, { gap: "xs", children: [
|
|
38579
|
-
/* @__PURE__ */ jsx(Button, { component: "a", href: resourcesPathForSystem(
|
|
38580
|
-
/* @__PURE__ */ jsx(Button, { component: "a", href: commandViewPathForSystem(
|
|
36925
|
+
/* @__PURE__ */ jsx(Button, { component: "a", href: resourcesPathForSystem(systemPath), variant: "light", size: "xs", children: "Resources" }),
|
|
36926
|
+
/* @__PURE__ */ jsx(Button, { component: "a", href: commandViewPathForSystem(systemPath), variant: "light", size: "xs", children: "Command View" }),
|
|
38581
36927
|
/* @__PURE__ */ jsx(
|
|
38582
36928
|
Button,
|
|
38583
36929
|
{
|
|
38584
36930
|
component: "a",
|
|
38585
|
-
href: kbPathForSystem(
|
|
36931
|
+
href: kbPathForSystem(systemPath),
|
|
38586
36932
|
target: "_blank",
|
|
38587
36933
|
rel: "noreferrer",
|
|
38588
36934
|
variant: "light",
|
|
@@ -38649,17 +36995,17 @@ function SystemsIndex({ model, onNavigate }) {
|
|
|
38649
36995
|
}
|
|
38650
36996
|
function SystemDetail({
|
|
38651
36997
|
model,
|
|
38652
|
-
systemPath
|
|
36998
|
+
systemPath,
|
|
38653
36999
|
onNavigate
|
|
38654
37000
|
}) {
|
|
38655
|
-
const currentSystem = getSystem(model,
|
|
37001
|
+
const currentSystem = getSystem(model, systemPath);
|
|
38656
37002
|
const { timeRange = "30d" } = useElevasisSystems();
|
|
38657
37003
|
const rollupMode = useSystemsViewState((state) => state.rollupMode);
|
|
38658
37004
|
const resourceKinds = useSystemsViewState((state) => state.resourceKinds);
|
|
38659
|
-
const metrics = aggregateSystemMetrics(model,
|
|
37005
|
+
const metrics = aggregateSystemMetrics(model, systemPath);
|
|
38660
37006
|
const includeDescendants = rollupMode === "descendants";
|
|
38661
37007
|
const systemHealthQuery = useSystemHealth({
|
|
38662
|
-
systemPath
|
|
37008
|
+
systemPath,
|
|
38663
37009
|
timeRange,
|
|
38664
37010
|
includeDescendants,
|
|
38665
37011
|
directResources: metrics.directResources,
|
|
@@ -38670,11 +37016,11 @@ function SystemDetail({
|
|
|
38670
37016
|
const visibleResources = metricResources(metrics, rollupMode).filter(
|
|
38671
37017
|
(resource2) => resourceKinds.length === 0 || resourceKinds.includes(resource2.kind)
|
|
38672
37018
|
);
|
|
38673
|
-
const children = childEntries(
|
|
38674
|
-
const breadcrumbs = buildBreadcrumbs(model,
|
|
38675
|
-
const scopedOntologyCounts = ontologyCountsForSystem(model,
|
|
37019
|
+
const children = childEntries(systemPath, currentSystem, model);
|
|
37020
|
+
const breadcrumbs = buildBreadcrumbs(model, systemPath);
|
|
37021
|
+
const scopedOntologyCounts = ontologyCountsForSystem(model, systemPath);
|
|
38676
37022
|
if (!currentSystem) {
|
|
38677
|
-
return /* @__PURE__ */ jsx(EmptyState, { icon: IconRoute, title: "System not found", description: `No semantic system exists at ${
|
|
37023
|
+
return /* @__PURE__ */ jsx(EmptyState, { icon: IconRoute, title: "System not found", description: `No semantic system exists at ${systemPath}.` });
|
|
38678
37024
|
}
|
|
38679
37025
|
return /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
|
|
38680
37026
|
/* @__PURE__ */ jsx(Breadcrumbs$1, { children: breadcrumbs.map((crumb, idx) => {
|
|
@@ -38688,9 +37034,9 @@ function SystemDetail({
|
|
|
38688
37034
|
/* @__PURE__ */ jsx(Title, { order: 1, size: "h3", children: currentSystem.label ?? currentSystem.id }),
|
|
38689
37035
|
statusBadge(metrics)
|
|
38690
37036
|
] }),
|
|
38691
|
-
/* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: currentSystem.description ??
|
|
37037
|
+
/* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: currentSystem.description ?? systemPath })
|
|
38692
37038
|
] }),
|
|
38693
|
-
/* @__PURE__ */ jsx(RelatedLinks, { systemPath
|
|
37039
|
+
/* @__PURE__ */ jsx(RelatedLinks, { systemPath })
|
|
38694
37040
|
] }),
|
|
38695
37041
|
/* @__PURE__ */ jsxs(SimpleGrid, { cols: { base: 2, md: 4 }, spacing: "xs", children: [
|
|
38696
37042
|
/* @__PURE__ */ jsx(
|
|
@@ -38759,11 +37105,11 @@ function SystemDetail({
|
|
|
38759
37105
|
] }) })
|
|
38760
37106
|
] });
|
|
38761
37107
|
}
|
|
38762
|
-
function SystemOpsView({ model, systemPath
|
|
38763
|
-
if (!
|
|
37108
|
+
function SystemOpsView({ model, systemPath, onNavigate }) {
|
|
37109
|
+
if (!systemPath) {
|
|
38764
37110
|
return /* @__PURE__ */ jsx(SystemsIndex, { model, onNavigate });
|
|
38765
37111
|
}
|
|
38766
|
-
return /* @__PURE__ */ jsx(SystemDetail, { model, systemPath
|
|
37112
|
+
return /* @__PURE__ */ jsx(SystemDetail, { model, systemPath, onNavigate });
|
|
38767
37113
|
}
|
|
38768
37114
|
function ExecutionLogsPage({
|
|
38769
37115
|
timeRange,
|
|
@@ -39242,15 +37588,15 @@ function ActivityFeed({
|
|
|
39242
37588
|
function NotificationCenter({ pageSize = 20 }) {
|
|
39243
37589
|
const { page, setPage, offset, totalPages } = usePaginationState(pageSize);
|
|
39244
37590
|
const { data, isLoading } = useNotifications({ limit: pageSize, offset });
|
|
39245
|
-
const
|
|
37591
|
+
const notifications15 = data?.notifications ?? [];
|
|
39246
37592
|
const markAllAsRead = useMarkAllAsRead();
|
|
39247
|
-
const hasUnread =
|
|
37593
|
+
const hasUnread = notifications15.some((n) => !n.read);
|
|
39248
37594
|
const handleMarkAllAsRead = async () => {
|
|
39249
37595
|
await markAllAsRead.mutateAsync();
|
|
39250
37596
|
};
|
|
39251
37597
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
39252
37598
|
hasUnread && /* @__PURE__ */ jsx(Group, { justify: "flex-end", children: /* @__PURE__ */ jsx(Button, { variant: "light", size: "sm", onClick: handleMarkAllAsRead, loading: markAllAsRead.isPending, children: "Mark all as read" }) }),
|
|
39253
|
-
/* @__PURE__ */ jsx(Paper, { children: /* @__PURE__ */ jsx(NotificationList, { notifications:
|
|
37599
|
+
/* @__PURE__ */ jsx(Paper, { children: /* @__PURE__ */ jsx(NotificationList, { notifications: notifications15, isLoading }) }),
|
|
39254
37600
|
totalPages(data?.total ?? 0) > 1 && /* @__PURE__ */ jsx(Group, { justify: "flex-start", children: /* @__PURE__ */ jsx(Pagination, { value: page, onChange: setPage, total: totalPages(data?.total ?? 0), size: "sm", boundaries: 1 }) })
|
|
39255
37601
|
] });
|
|
39256
37602
|
}
|
|
@@ -40040,21 +38386,14 @@ function MemberAccessModal({ opened, onClose, orgId, member, defaultTab = "roles
|
|
|
40040
38386
|
] }),
|
|
40041
38387
|
/* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: member.email })
|
|
40042
38388
|
] }),
|
|
40043
|
-
/* @__PURE__ */
|
|
40044
|
-
/* @__PURE__ */ jsxs(Tabs.List, { children: [
|
|
40045
|
-
/* @__PURE__ */ jsx(Tabs.Tab, { value: "roles", leftSection: /* @__PURE__ */ jsx(IconShieldLock, { size: 14 }), children: "Roles" }),
|
|
40046
|
-
/* @__PURE__ */ jsx(Tabs.Tab, { value: "features", leftSection: /* @__PURE__ */ jsx(IconAdjustments, { size: 14 }), children: "Feature access" })
|
|
40047
|
-
] }),
|
|
40048
|
-
/* @__PURE__ */ jsx(Tabs.Panel, { value: "roles", pt: "md", children: /* @__PURE__ */ jsx(RolesTabPanel, { orgId, member, onSaved: onClose }) }),
|
|
40049
|
-
/* @__PURE__ */ jsx(Tabs.Panel, { value: "features", pt: "md", children: /* @__PURE__ */ jsx(FeaturesTabPanel, { member, onSaved: onClose }) })
|
|
40050
|
-
] })
|
|
38389
|
+
activeTab === "roles" && /* @__PURE__ */ jsx(RolesTabPanel, { orgId, member, onSaved: onClose })
|
|
40051
38390
|
] }) });
|
|
40052
38391
|
}
|
|
40053
38392
|
function RolesTabPanel({ orgId, member, onSaved }) {
|
|
40054
38393
|
const { data: rolesData, isLoading: rolesLoading } = useOrgRoles(orgId ?? void 0);
|
|
40055
38394
|
const assignMutation = useAssignRole();
|
|
40056
38395
|
const revokeMutation = useRevokeRole();
|
|
40057
|
-
const canManagePrivileged =
|
|
38396
|
+
const canManagePrivileged = useAccess(AccessKeys.rolesManage).allowed;
|
|
40058
38397
|
const allRoles = rolesData?.roles ?? [];
|
|
40059
38398
|
const currentRoleIds = useMemo(() => {
|
|
40060
38399
|
const matched = allRoles.find((r) => r.slug === member.role);
|
|
@@ -40124,43 +38463,6 @@ function RolesTabPanel({ orgId, member, onSaved }) {
|
|
|
40124
38463
|
] })
|
|
40125
38464
|
] });
|
|
40126
38465
|
}
|
|
40127
|
-
function FeaturesTabPanel({ member, onSaved }) {
|
|
40128
|
-
const [localConfig, setLocalConfig] = useState(member.config);
|
|
40129
|
-
const mutation = useUpdateMemberConfig();
|
|
40130
|
-
useEffect(() => {
|
|
40131
|
-
setLocalConfig(member.config);
|
|
40132
|
-
}, [member.config, member.id]);
|
|
40133
|
-
const handleSave = async () => {
|
|
40134
|
-
if (!localConfig) {
|
|
40135
|
-
onSaved();
|
|
40136
|
-
return;
|
|
40137
|
-
}
|
|
40138
|
-
try {
|
|
40139
|
-
await mutation.mutateAsync({
|
|
40140
|
-
membershipId: member.id,
|
|
40141
|
-
config: localConfig
|
|
40142
|
-
});
|
|
40143
|
-
showSuccessNotification("Feature access updated");
|
|
40144
|
-
onSaved();
|
|
40145
|
-
} catch {
|
|
40146
|
-
}
|
|
40147
|
-
};
|
|
40148
|
-
return /* @__PURE__ */ jsxs(Stack, { gap: "sm", children: [
|
|
40149
|
-
/* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "Override which features and surfaces this member can see in the Command Center. Defaults follow the organization's feature configuration." }),
|
|
40150
|
-
/* @__PURE__ */ jsx(
|
|
40151
|
-
MembershipFeaturePanel,
|
|
40152
|
-
{
|
|
40153
|
-
currentConfig: localConfig ?? member.config,
|
|
40154
|
-
onConfigChange: (newConfig) => setLocalConfig(newConfig),
|
|
40155
|
-
disabled: mutation.isPending
|
|
40156
|
-
}
|
|
40157
|
-
),
|
|
40158
|
-
/* @__PURE__ */ jsxs(Group, { justify: "flex-end", mt: "md", children: [
|
|
40159
|
-
/* @__PURE__ */ jsx(Button, { variant: "default", onClick: onSaved, disabled: mutation.isPending, children: "Cancel" }),
|
|
40160
|
-
/* @__PURE__ */ jsx(Button, { leftSection: /* @__PURE__ */ jsx(IconCheck, { size: 14 }), loading: mutation.isPending, onClick: handleSave, children: "Save feature access" })
|
|
40161
|
-
] })
|
|
40162
|
-
] });
|
|
40163
|
-
}
|
|
40164
38466
|
function transformMemberForModal(member) {
|
|
40165
38467
|
const firstName = member.user?.firstName || "";
|
|
40166
38468
|
const lastName = member.user?.lastName || "";
|
|
@@ -40169,8 +38471,7 @@ function transformMemberForModal(member) {
|
|
|
40169
38471
|
id: member.id,
|
|
40170
38472
|
name,
|
|
40171
38473
|
email: member.user?.email || "Unknown",
|
|
40172
|
-
role: member.role.slug
|
|
40173
|
-
config: member.config
|
|
38474
|
+
role: member.role.slug
|
|
40174
38475
|
};
|
|
40175
38476
|
}
|
|
40176
38477
|
function OrgMembersList({ orgId }) {
|
|
@@ -40304,60 +38605,6 @@ function OrganizationSettings({ user, currentMembership, isOrgAdmin }) {
|
|
|
40304
38605
|
] }) })
|
|
40305
38606
|
] });
|
|
40306
38607
|
}
|
|
40307
|
-
function MemberConfigModal({ opened, onClose, member }) {
|
|
40308
|
-
const [localConfig, setLocalConfig] = useState(void 0);
|
|
40309
|
-
const mutation = useUpdateMemberConfig();
|
|
40310
|
-
useEffect(() => {
|
|
40311
|
-
if (member) {
|
|
40312
|
-
setLocalConfig(member.config);
|
|
40313
|
-
}
|
|
40314
|
-
}, [member]);
|
|
40315
|
-
useEffect(() => {
|
|
40316
|
-
if (!opened) {
|
|
40317
|
-
setLocalConfig(void 0);
|
|
40318
|
-
}
|
|
40319
|
-
}, [opened]);
|
|
40320
|
-
if (!member) return null;
|
|
40321
|
-
const handleSave = async () => {
|
|
40322
|
-
if (!localConfig) {
|
|
40323
|
-
onClose();
|
|
40324
|
-
return;
|
|
40325
|
-
}
|
|
40326
|
-
try {
|
|
40327
|
-
await mutation.mutateAsync({
|
|
40328
|
-
membershipId: member.id,
|
|
40329
|
-
config: localConfig
|
|
40330
|
-
});
|
|
40331
|
-
onClose();
|
|
40332
|
-
} catch {
|
|
40333
|
-
}
|
|
40334
|
-
};
|
|
40335
|
-
const handleClose = () => {
|
|
40336
|
-
if (!mutation.isPending) {
|
|
40337
|
-
onClose();
|
|
40338
|
-
}
|
|
40339
|
-
};
|
|
40340
|
-
return /* @__PURE__ */ jsx(CustomModal, { opened, onClose: handleClose, size: "md", loading: mutation.isPending, children: /* @__PURE__ */ jsxs(Stack, { children: [
|
|
40341
|
-
/* @__PURE__ */ jsx(Title, { order: 3, children: "Configure Member Access" }),
|
|
40342
|
-
/* @__PURE__ */ jsxs(Group, { gap: "xs", children: [
|
|
40343
|
-
/* @__PURE__ */ jsx(Text, { fw: 500, children: member.name }),
|
|
40344
|
-
/* @__PURE__ */ jsx(Badge, { variant: "light", size: "sm", children: member.role })
|
|
40345
|
-
] }),
|
|
40346
|
-
/* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: member.email }),
|
|
40347
|
-
/* @__PURE__ */ jsx(
|
|
40348
|
-
MembershipFeaturePanel,
|
|
40349
|
-
{
|
|
40350
|
-
currentConfig: localConfig ?? member.config,
|
|
40351
|
-
onConfigChange: (newConfig) => setLocalConfig(newConfig),
|
|
40352
|
-
disabled: mutation.isPending
|
|
40353
|
-
}
|
|
40354
|
-
),
|
|
40355
|
-
/* @__PURE__ */ jsxs(Group, { justify: "space-between", mt: "md", children: [
|
|
40356
|
-
/* @__PURE__ */ jsx(Button, { variant: "light", onClick: handleClose, disabled: mutation.isPending, children: "Cancel" }),
|
|
40357
|
-
/* @__PURE__ */ jsx(Button, { onClick: handleSave, loading: mutation.isPending, children: "Save Changes" })
|
|
40358
|
-
] })
|
|
40359
|
-
] }) });
|
|
40360
|
-
}
|
|
40361
38608
|
var OAUTH_COMPLETION_CHANNEL = "elevasis-oauth";
|
|
40362
38609
|
var OAUTH_COMPLETION_STORAGE_KEY = "elevasis:oauth-complete";
|
|
40363
38610
|
function useOAuthFlow({ apiUrl }) {
|
|
@@ -40934,10 +39181,10 @@ function createUseOrganizations(useStore) {
|
|
|
40934
39181
|
};
|
|
40935
39182
|
};
|
|
40936
39183
|
}
|
|
40937
|
-
function createUseOrgInitialization(useOrganizations,
|
|
39184
|
+
function createUseOrgInitialization(useOrganizations, useApiClient) {
|
|
40938
39185
|
return function useOrgInitialization() {
|
|
40939
39186
|
const { user, organizationId: workosOrgId } = useAuthContext();
|
|
40940
|
-
const { apiRequest } =
|
|
39187
|
+
const { apiRequest } = useApiClient();
|
|
40941
39188
|
const { profile } = useUserProfile();
|
|
40942
39189
|
const {
|
|
40943
39190
|
currentWorkOSOrganizationId,
|
|
@@ -41098,4 +39345,4 @@ function createUseOrgInitialization(useOrganizations, useApiClient2) {
|
|
|
41098
39345
|
};
|
|
41099
39346
|
}
|
|
41100
39347
|
|
|
41101
|
-
export { AbsoluteScheduleForm, AccountSettings, ActionModal, ActivityCard, ActivityFeed, ActivityFeedWidget, ActivityFilters, ActivityLog, ActivityTable, AgentDefinitionDisplay, AgentExecutionLogs, AgentExecutionPanel, AgentExecutionTimeline, AgentExecutionVisualizer, AgentIterationEdge, AgentIterationNode, AgentSessionGroup, AllTasksPage, ApiKeyDisplayModal, ApiKeyList, ApiKeyService, ApiKeySettings, AppErrorBoundary, AppearanceSettings, BaseEdge, BaseExecutionLogs, BaseExecutionLogsHeader, BaseExecutionLogsStates, BaseNode, Breadcrumbs, BusinessImpactCard, CRM_ITEMS, Can, Checklist, CheckpointGroup, CollapsibleJsonSection, CommandQueueDetailPage, CommandQueuePage, CommandQueueShell, CommandQueueSidebar, CommandQueueSidebarMiddle, CommandQueueSidebarTop, CommandQueueTaskRow, CommandViewPage, CompanyDetailPage, ConfigCard, ConfirmationInputModal, ConfirmationModal, ContactDetailPage, ContentSections, ContextUsageBadge, ContractDisplay, ConversationThread, CostAnalytics, CostBreakdownCard, CostByModelTable, CostMetricsCard, CrashErrorFallback, CreateApiKeyModal, CreateCredentialModal, CreateDeliveryEntityModal, CreateRoleModal, CreateScheduleModal, CreateWebhookEndpointModal, CredentialList, CredentialService, CredentialSettings, CrmActionsProvider, CrmOverview, CrmSettingsPage, CrmSidebar, CrmSidebarMiddle, CrmSidebarTop, CustomModal, DEAL_STAGES, DEAL_STAGE_COLORS, DEAL_STAGE_OPTIONS, DEFAULT_KANBAN_CONFIG, DELIVERY_COMMUNICATION_ITEMS, DELIVERY_PROJECT_ITEMS, DELIVERY_WORK_ITEMS, Dashboard, DashboardOperationsOverview, DealDetailPage, DealKanbanCard, DealsListPage, DeleteScheduleModal, DeploymentDetailModal, DeploymentList, DeploymentService, DeploymentSettings, DeploymentStatusBadge, EMPTY_LIST_ACTIONS, EditApiKeyModal, EditCredentialModal, EditWebhookEndpointModal, ElevasisCoreProvider, ElevasisSystemsProvider, ElevasisUIProvider, EmptyVisualizer, ErrorAnalysisCard, ErrorBreakdownTable, ErrorDetailsModal, ErrorReportCard, ExecuteWorkflowModal, ExecutionBreakdownTable, ExecutionErrorSection, ExecutionHealth, ExecutionHealthCard, ExecutionLogsFilters, ExecutionLogsPage, ExecutionLogsTable, ExecutionPanel, ExecutionStats, ExecutionStatusBadge, FilterBar, GraphBackground, GraphContainer, GraphFitViewButton, GraphFitViewHandler, GraphLegend, HealthStatusCard, KanbanBoard, LEAD_GEN_ITEMS, LEAD_GEN_ROUTE_LINKS, LeadGenCompaniesPage, LeadGenContactsPage, LeadGenListDetailPage, LeadGenListsPage, LeadGenOverviewPage, LeadGenRouteShell, LeadGenSidebar, LeadGenSidebarMiddle, LeadGenSidebarTop, ListActionsProvider, ListBuilderIndexPage, ListBuilderPage, LogEntry, LogGroup, MdxRenderer, MemberAccessModal, MemberConfigModal, MembershipFeaturePanel, MembershipStatusBadge, MetricsStrip, MilestoneTimeline, MyTasksPanel, NewKnowledgeMapEdge, NewKnowledgeMapGraph, NewKnowledgeMapNode, NoAccessState, NotificationBell, NotificationCenter, NotificationItem, NotificationList, NotificationPanel, NotificationProvider, OAuthConnectModal, OAuthIntegrationsCard, ORGANIZATION_GRAPH_NODE_KIND_LABELS, ORPHAN_STAGE_ORDER, OperationsOverview, OperationsService, OperationsSidebar, OperationsSidebarMiddle, OperationsSidebarTop, OrgMembersList, OrganizationGraphPage, OrganizationMembershipService, OrganizationMembershipsList, OrganizationProvider, OrganizationSettings, OrganizationSwitcher, OrganizationSwitcherConnected, PIPELINE_FUNNEL_ORDER, PermissionMatrix, PipelineFunnelWidget, ProjectDetailPage, ProjectsListPage, ProjectsSidebar, ProjectsSidebarMiddle, ProjectsSidebarTop, QuickCreateActions, RecentExecutionsByResource, RecurringScheduleForm, RelativeScheduleForm, ResourceDefinitionSection, ResourceDetailPage, ResourceErrorState, ResourceFilter, ResourceHeader, ResourceHealthChart, ResourceHealthPanel, ResourceNotFoundState, ResourceOverview, ResourcesPage, ResourcesSidebar, RichTextEditor, RoleBadge, RunResourceButton, SAVED_VIEW_PRESETS, SavedViewsPanel, ScheduleCard, ScheduleDetailModal, ScheduleTypeSelector, SessionChatArea, SessionChatInterface, SessionChatPage, SessionDetailsSidebar, SessionExecutionLogs, SessionHeader, SessionListItem, SessionMemory, SessionsPage, SessionsSidebar, SortableHeader, StepConfigForm, SystemOpsView, SystemShell, TabSection, TableSelectionToolbar, TaskCard, TaskScheduler, TimelineAxis, TimelineBar, TimelineContainer, TimelineRow, ToolsListDisplay, UnifiedWorkflowEdge, UnifiedWorkflowGraph, UnifiedWorkflowNode, UnresolvedErrorsTeaser, UpcomingMilestonesPage, VisualizerContainer, WebhookEndpointList, WebhookEndpointService, WebhookEndpointSettings, WebhookUrlDisplayModal, WorkflowDefinitionDisplay, WorkflowExecutionLogs, WorkflowExecutionPanel, WorkflowExecutionTimeline, ZodFormRenderer, acquisitionListKeys, aggregateSystemMetrics, buildErrorReport, calculateProgress, clientsKeys, collectResourceFilterFacets, companyKeys, contactKeys, createFeatureAccessHook, createOrganizationsSlice, createTestSystemsProvider, createUseOrgInitialization, createUseOrganizations, crmManifest, crmPrioritySettingsKeys, dealKeys, dealNoteKeys, dealTaskKeys, deliveryManifest, deriveBusinessProgress, executionsKeys, filterByDomainFilters, findListActionByAction, formatDate3 as formatDate, formatDealStageLabel, formatResourceAttribution, formatStatusLabel, getEnrichmentColor, getEnrichmentStatus, getExecutionStatusConfig, getGraphBackgroundStyles, getHealthColor, getIcon, getListActionWorkflowId, getLogLevelConfig, getResourceFilterFacetIds, getStateKeyColor, getStatusColor4 as getStatusColor, getStepActionLabel, iconMap, isSessionCapable, labelResourceFilterFacet, leadGenArtifactKeys, leadGenListCompanyKeys, leadGenListMemberKeys, leadGenManifest, mdxComponents, milestoneKeys, milestoneStatusColors, monitoringManifest, noteKeys, noteTypeColors, operationsKeys, operationsManifest, projectActivityKeys, projectKeys, projectStatusColors, requestsKeys, resolveBuildPlanSteps, resolveBuildState, scheduleKeys, sessionsKeys, settingsManifest, showApiErrorNotification, showAuthError, showErrorNotification, showInfoNotification, showSuccessNotification, showWarningNotification, sortData, sortStageKeys, taskKeys, taskStatusColors, taskTypeColors, useActivateDeployment, useActivities, useActivitiesRealtime, useActivityFilters, useActivityTrend, useAddCompaniesToList, useAddContactsToList, useArchiveSession, useArchivedLogs, useArtifacts, useAssignRole, useBatchDelete, useBatchTelemetry, useBatchedResourcesHealth, useBreadcrumbs, useBulkDeleteExecutions, useBusinessImpact, useCancelExecution, useCancelSchedule, useCheckpointTasks, useClient, useClientStatus, useClients, useCommandQueue, useCommandQueueTotals, useCommandViewData, useCommandViewDomainFilters, useCommandViewStats, useCommandViewStore, useCompanies, useCompany, useCompanyFacets, useCompleteDealTask, useContact, useContacts, useCostBreakdown, useCostByModel, useCostSummary, useCostTrends, useCreateApiKey, useCreateArtifact, useCreateClient, useCreateCompany, useCreateContact, useCreateCredential, useCreateDealNote, useCreateDealTask, useCreateList, useCreateMilestone, useCreateNote, useCreateOrgRole, useCreateProject, useCreateSchedule, useCreateSession, useCreateTask, useCreateWebhookEndpoint, useCredentials, useCrmActions, useCrmPipelineSummary, useCrmPrioritySettings, useCrmQuickMetrics, useDashboardMetrics, useDeactivateDeployment, useDeactivateMembership, useDealDetail, useDealNotes, useDealTasks, useDealTasksDue, useDeals, useDealsLookup, useDealsSummary, useDeleteApiKey, useDeleteClient, useDeleteCompanies, useDeleteContacts, useDeleteCredential, useDeleteDeal, useDeleteDeployment, useDeleteExecution, useDeleteList, useDeleteLists, useDeleteMilestone, useDeleteOrgRole, useDeleteProject, useDeleteRequest, useDeleteSchedule, useDeleteSession, useDeleteTask, useDeleteTask2, useDeleteWebhookEndpoint, useDeriveActions, useEffectivePermissions, useElevasisSystems, useErrorAnalysis, useErrorDetail, useErrorDetails, useErrorDistribution, useErrorNotification, useExecuteAction, useExecuteAsync, useExecuteResource, useExecution, useExecutionHealth, useExecutionLogSSE, useExecutionLogs, useExecutionLogsFilters, useExecutionPanelState, useExecutionSSE, useExecutions, useGetExecutionHistory, useGetSchedule, useGraphBackgroundStyles, useGraphTheme, useHasPermission, useInFlightExecutions, useLeadGenConfig, useList, useListActions, useListApiKeys, useListDeployments, useListExecutions, useListMember, useListMembers, useListProgress, useListRecords, useListSchedules, useListWebhookEndpoints, useLists, useListsTelemetry, useMarkAllAsRead, useMarkAsRead, useMilestones, useNewKnowledgeMapLayout, useNotificationAdapter, useNotificationCount, useNotifications, useOptionalElevasisSystems, useOrgRoles, useOrganizationMembers, useOrganizationPermissions, usePaginationState, usePatchTask, usePauseSchedule, usePermissionCatalog, useProject, useProjectActivities, useProjectMilestones, useProjectNotes, useProjectRealtime, useProjectTasks, useProjects, useReactivateMembership, useRecentCrmActivity, useRecentExecutionsByResource, useRemoveCompaniesFromList, useRequest, useRequestsList, useResetCrmPrioritySettings, useResolveAllErrors, useResolveError, useResolveErrorsByExecution, useResolvedOrganizationModel, useResourceDefinition, useResourceErrors, useResourceExecutions, useResourceSearch, useResources, useResourcesDomainFilters, useResourcesHealth, useResumeSchedule, useRetryExecution, useRevokeRole, useSSEConnection, useScheduledTasks, useSession, useSessionExecution, useSessionExecutions, useSessionMessages, useSessionWebSocket, useSessions, useSortedData, useStatusFilter, useSubmitAction, useSuccessNotification, useSystemHealth, useTableSelection, useTableSort, useTasks, useTestNotification, useTimeRangeDates, useTopFailingResources, useTransitionItem, useTransitionListCompany, useTransitionListMember, useTransitionState, useUnresolveError, useUnresolvedErrors, useUpdateAnchor, useUpdateApiKey, useUpdateClient, useUpdateCompany, useUpdateContact, useUpdateCredential, useUpdateCrmPrioritySettings, useUpdateList, useUpdateListConfig, useUpdateListStatus, useUpdateMemberConfig, useUpdateMilestone, useUpdateOrgRole, useUpdateProject, useUpdateRequestStatus, useUpdateSchedule, useUpdateTask, useUpdateWebhookEndpoint, useUserMemberships, useVerifyCredential, useVisibleResources, useWarningNotification, useWorkflowExecution };
|
|
39348
|
+
export { AbsoluteScheduleForm, AccountSettings, ActionModal, ActivityCard, ActivityFeed, ActivityFeedWidget, ActivityFilters, ActivityLog, ActivityTable, AgentDefinitionDisplay, AgentExecutionLogs, AgentExecutionPanel, AgentExecutionTimeline, AgentExecutionVisualizer, AgentIterationEdge, AgentIterationNode, AgentSessionGroup, AllTasksPage, ApiKeyDisplayModal, ApiKeyList, ApiKeyService, ApiKeySettings, AppearanceSettings, BaseEdge, BaseExecutionLogs, BaseExecutionLogsHeader, BaseExecutionLogsStates, BaseNode, Breadcrumbs, BusinessImpactCard, CRM_ITEMS, Checklist, CheckpointGroup, CollapsibleJsonSection, CommandQueueDetailPage, CommandQueuePage, CommandQueueShell, CommandQueueSidebar, CommandQueueSidebarMiddle, CommandQueueSidebarTop, CommandQueueTaskRow, CommandViewPage, CompanyDetailPage, ConfigCard, ConfirmationInputModal, ConfirmationModal, ContactDetailPage, ContentSections, ContextUsageBadge, ContractDisplay, ConversationThread, CostAnalytics, CostBreakdownCard, CostByModelTable, CostMetricsCard, CreateApiKeyModal, CreateCredentialModal, CreateDeliveryEntityModal, CreateRoleModal, CreateScheduleModal, CreateWebhookEndpointModal, CredentialList, CredentialService, CredentialSettings, CrmOverview, CrmSettingsPage, CrmSidebar, CrmSidebarMiddle, CrmSidebarTop, CustomModal, DEAL_STAGES, DEAL_STAGE_COLORS, DEAL_STAGE_OPTIONS, DEFAULT_KANBAN_CONFIG, DELIVERY_COMMUNICATION_ITEMS, DELIVERY_PROJECT_ITEMS, DELIVERY_WORK_ITEMS, Dashboard, DashboardOperationsOverview, DealDetailPage, DealKanbanCard, DealsListPage, DeleteScheduleModal, DeploymentDetailModal, DeploymentList, DeploymentService, DeploymentSettings, DeploymentStatusBadge, EditApiKeyModal, EditCredentialModal, EditWebhookEndpointModal, EmptyVisualizer, ErrorAnalysisCard, ErrorBreakdownTable, ErrorDetailsModal, ExecuteWorkflowModal, ExecutionBreakdownTable, ExecutionErrorSection, ExecutionHealth, ExecutionHealthCard, ExecutionLogsFilters, ExecutionLogsPage, ExecutionLogsTable, ExecutionPanel, ExecutionStats, ExecutionStatusBadge, FilterBar, GraphBackground, GraphContainer, GraphFitViewButton, GraphFitViewHandler, GraphLegend, HealthStatusCard, KanbanBoard, LEAD_GEN_ITEMS, LEAD_GEN_ROUTE_LINKS, LeadGenCompaniesPage, LeadGenContactsPage, LeadGenListDetailPage, LeadGenListsPage, LeadGenOverviewPage, LeadGenRouteShell, LeadGenSidebar, LeadGenSidebarMiddle, LeadGenSidebarTop, ListBuilderIndexPage, ListBuilderPage, LogEntry, LogGroup, MdxRenderer, MemberAccessModal, MembershipStatusBadge, MetricsStrip, MilestoneTimeline, MyTasksPanel, NewKnowledgeMapEdge, NewKnowledgeMapGraph, NewKnowledgeMapNode, NoAccessState, NotificationBell, NotificationCenter, NotificationItem, NotificationList, NotificationPanel, OAuthConnectModal, OAuthIntegrationsCard, ORPHAN_STAGE_ORDER, OperationsOverview, OperationsService, OperationsSidebar, OperationsSidebarMiddle, OperationsSidebarTop, OrgMembersList, OrganizationGraphPage, OrganizationMembershipService, OrganizationMembershipsList, OrganizationSettings, OrganizationSwitcher, OrganizationSwitcherConnected, PIPELINE_FUNNEL_ORDER, PermissionMatrix, PipelineFunnelWidget, ProjectDetailPage, ProjectsListPage, ProjectsSidebar, ProjectsSidebarMiddle, ProjectsSidebarTop, QuickCreateActions, RecentExecutionsByResource, RecurringScheduleForm, RelativeScheduleForm, ResourceDefinitionSection, ResourceDetailPage, ResourceErrorState, ResourceFilter, ResourceHeader, ResourceHealthChart, ResourceHealthPanel, ResourceNotFoundState, ResourceOverview, ResourcesPage, ResourcesSidebar, RichTextEditor, RoleBadge, RunResourceButton, SAVED_VIEW_PRESETS, SavedViewsPanel, ScheduleCard, ScheduleDetailModal, ScheduleTypeSelector, SessionChatArea, SessionChatInterface, SessionChatPage, SessionDetailsSidebar, SessionExecutionLogs, SessionHeader, SessionListItem, SessionMemory, SessionsPage, SessionsSidebar, SortableHeader, StepConfigForm, SystemOpsView, TabSection, TableSelectionToolbar, TaskCard, TaskScheduler, TimelineAxis, TimelineBar, TimelineContainer, TimelineRow, ToolsListDisplay, UnifiedWorkflowEdge, UnifiedWorkflowGraph, UnifiedWorkflowNode, UnresolvedErrorsTeaser, UpcomingMilestonesPage, VisualizerContainer, WebhookEndpointList, WebhookEndpointService, WebhookEndpointSettings, WebhookUrlDisplayModal, WorkflowDefinitionDisplay, WorkflowExecutionLogs, WorkflowExecutionPanel, WorkflowExecutionTimeline, ZodFormRenderer, acquisitionListKeys, aggregateSystemMetrics, calculateProgress, clientsKeys, collectResourceFilterFacets, companyKeys, contactKeys, createOrganizationsSlice, createUseOrgInitialization, createUseOrganizations, crmManifest, crmPrioritySettingsKeys, dealKeys, dealNoteKeys, dealTaskKeys, deliveryManifest, deriveBusinessProgress, executionsKeys, filterByDomainFilters, formatDate3 as formatDate, formatDealStageLabel, formatResourceAttribution, formatStatusLabel, getEnrichmentColor, getEnrichmentStatus, getExecutionStatusConfig, getGraphBackgroundStyles, getHealthColor, getIcon, getLeadGenExportWorkflowId, getLogLevelConfig, getResourceFilterFacetIds, getStateKeyColor, getStatusColor4 as getStatusColor, getStepActionLabel, iconMap, isLeadGenExportAction, isSessionCapable, labelResourceFilterFacet, leadGenArtifactKeys, leadGenListCompanyKeys, leadGenListMemberKeys, leadGenManifest, mdxComponents, milestoneKeys, milestoneStatusColors, monitoringManifest, noteKeys, noteTypeColors, operationsKeys, operationsManifest, projectActivityKeys, projectKeys, projectStatusColors, requestsKeys, resolveBuildPlanSteps, resolveBuildState, scheduleKeys, sessionsKeys, settingsManifest, showApiErrorNotification, showAuthError, showErrorNotification, showInfoNotification, showSuccessNotification, showWarningNotification, sortData, sortStageKeys, taskKeys, taskStatusColors, taskTypeColors, useActivateDeployment, useActivities, useActivitiesRealtime, useActivityFilters, useActivityTrend, useAddCompaniesToList, useAddContactsToList, useArchiveSession, useArchivedLogs, useArtifacts, useAssignRole, useBatchDelete, useBatchTelemetry, useBatchedResourcesHealth, useBulkDeleteExecutions, useBusinessImpact, useCancelExecution, useCancelSchedule, useCheckpointTasks, useClient, useClientStatus, useClients, useCommandQueue, useCommandQueueTotals, useCommandViewData, useCommandViewDomainFilters, useCommandViewStats, useCommandViewStore, useCompanies, useCompany, useCompanyFacets, useCompleteDealTask, useContact, useContacts, useCostBreakdown, useCostByModel, useCostSummary, useCostTrends, useCreateApiKey, useCreateArtifact, useCreateClient, useCreateCompany, useCreateContact, useCreateCredential, useCreateDealNote, useCreateDealTask, useCreateList, useCreateMilestone, useCreateNote, useCreateOrgRole, useCreateProject, useCreateSchedule, useCreateSession, useCreateTask, useCreateWebhookEndpoint, useCredentials, useCrmPipelineSummary, useCrmPrioritySettings, useCrmQuickMetrics, useDashboardMetrics, useDeactivateDeployment, useDeactivateMembership, useDealDetail, useDealNotes, useDealTasks, useDealTasksDue, useDeals, useDealsLookup, useDealsSummary, useDeleteApiKey, useDeleteClient, useDeleteCompanies, useDeleteContacts, useDeleteCredential, useDeleteDeal, useDeleteDeployment, useDeleteExecution, useDeleteList, useDeleteLists, useDeleteMilestone, useDeleteOrgRole, useDeleteProject, useDeleteRequest, useDeleteSchedule, useDeleteSession, useDeleteTask, useDeleteTask2, useDeleteWebhookEndpoint, useDeriveActions, useEffectivePermissions, useErrorAnalysis, useErrorDetail, useErrorDetails, useErrorDistribution, useErrorNotification, useExecuteAction, useExecuteAsync, useExecuteResource, useExecution, useExecutionHealth, useExecutionLogSSE, useExecutionLogs, useExecutionLogsFilters, useExecutionPanelState, useExecutionSSE, useExecutions, useGetExecutionHistory, useGetSchedule, useGraphBackgroundStyles, useGraphTheme, useInFlightExecutions, useLeadGenConfig, useList, useListApiKeys, useListDeployments, useListExecutions, useListMember, useListMembers, useListProgress, useListRecords, useListSchedules, useListWebhookEndpoints, useLists, useListsTelemetry, useMarkAllAsRead, useMarkAsRead, useMilestones, useNewKnowledgeMapLayout, useNotificationCount, useNotifications, useOrgRoles, useOrganizationMembers, usePaginationState, usePatchTask, usePauseSchedule, usePermissionCatalog, useProject, useProjectActivities, useProjectMilestones, useProjectNotes, useProjectRealtime, useProjectTasks, useProjects, useReactivateMembership, useRecentCrmActivity, useRecentExecutionsByResource, useRemoveCompaniesFromList, useRequest, useRequestsList, useResetCrmPrioritySettings, useResolveAllErrors, useResolveError, useResolveErrorsByExecution, useResourceDefinition, useResourceErrors, useResourceExecutions, useResourceSearch, useResources, useResourcesDomainFilters, useResourcesHealth, useResumeSchedule, useRetryExecution, useRevokeRole, useSSEConnection, useScheduledTasks, useSession, useSessionExecution, useSessionExecutions, useSessionMessages, useSessionWebSocket, useSessions, useSortedData, useStatusFilter, useSubmitAction, useSuccessNotification, useSystemHealth, useTableSelection, useTableSort, useTasks, useTestNotification, useTimeRangeDates, useTopFailingResources, useTransitionItem, useTransitionListCompany, useTransitionListMember, useTransitionState, useUnresolveError, useUnresolvedErrors, useUpdateAnchor, useUpdateApiKey, useUpdateClient, useUpdateCompany, useUpdateContact, useUpdateCredential, useUpdateCrmPrioritySettings, useUpdateList, useUpdateListConfig, useUpdateListStatus, useUpdateMilestone, useUpdateOrgRole, useUpdateProject, useUpdateRequestStatus, useUpdateSchedule, useUpdateTask, useUpdateWebhookEndpoint, useUserMemberships, useVerifyCredential, useVisibleResources, useWarningNotification, useWorkflowExecution };
|