@elevasis/ui 2.5.0 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/{chunk-CKBJVNSA.js → chunk-6FDGVZFL.js} +2 -2
  2. package/dist/{chunk-3VTACYBT.js → chunk-HRIJZKFL.js} +2 -3
  3. package/dist/{chunk-S5EXLTGK.js → chunk-IFH4L6CR.js} +181 -7
  4. package/dist/{chunk-GEJZ6WLM.js → chunk-N6GYYWY3.js} +1 -1
  5. package/dist/{chunk-ZGV3X3UQ.js → chunk-SBND6P3L.js} +2 -3
  6. package/dist/{chunk-TNYUWKSJ.js → chunk-SPMKW4VO.js} +56 -91
  7. package/dist/{chunk-XGUMNEIR.js → chunk-T6R3V4GW.js} +3 -4
  8. package/dist/{chunk-DRBMVLJE.js → chunk-TENLM2GN.js} +2 -2
  9. package/dist/{chunk-5RYRL7DP.js → chunk-V6Z2U6ZV.js} +1 -1
  10. package/dist/{chunk-URFYQRJO.js → chunk-VGBMSGYC.js} +1 -1
  11. package/dist/{chunk-RBRSRRG4.js → chunk-X4HUZINF.js} +3 -4
  12. package/dist/{chunk-UXYE5ZBY.js → chunk-Z5RHDI7T.js} +4 -13
  13. package/dist/components/index.d.ts +4 -9
  14. package/dist/components/index.js +32 -23
  15. package/dist/features/auth/index.js +9 -2
  16. package/dist/features/crm/index.d.ts +1 -1
  17. package/dist/features/crm/index.js +5 -5
  18. package/dist/features/dashboard/index.d.ts +2 -62
  19. package/dist/features/dashboard/index.js +5 -5
  20. package/dist/features/delivery/index.d.ts +1 -1
  21. package/dist/features/delivery/index.js +5 -5
  22. package/dist/features/lead-gen/index.d.ts +1 -1
  23. package/dist/features/lead-gen/index.js +8 -8
  24. package/dist/features/monitoring/index.d.ts +1 -1
  25. package/dist/features/monitoring/index.js +6 -6
  26. package/dist/features/operations/index.d.ts +79 -79
  27. package/dist/features/operations/index.js +7 -7
  28. package/dist/features/seo/index.d.ts +1 -1
  29. package/dist/features/settings/index.d.ts +3 -2
  30. package/dist/features/settings/index.js +5 -5
  31. package/dist/hooks/index.d.ts +2 -1
  32. package/dist/hooks/index.js +4 -4
  33. package/dist/hooks/published.d.ts +2 -1
  34. package/dist/hooks/published.js +3 -3
  35. package/dist/index.d.ts +187 -43
  36. package/dist/index.js +4 -4
  37. package/dist/initialization/index.d.ts +2 -1
  38. package/dist/organization/index.d.ts +2 -1
  39. package/dist/provider/index.d.ts +185 -42
  40. package/dist/provider/index.js +2 -2
  41. package/dist/provider/published.d.ts +185 -42
  42. package/dist/provider/published.js +1 -1
  43. package/dist/types/index.d.ts +2 -1
  44. package/package.json +58 -86
@@ -2,8 +2,8 @@ import { FilterBar } from './chunk-PDHTXPSF.js';
2
2
  import { CustomModal } from './chunk-GBMNCNHX.js';
3
3
  import { AppShellLoader } from './chunk-YEX4MQSY.js';
4
4
  import { useAvailablePresets } from './chunk-VNUOQQNY.js';
5
- import { useDeleteCredential, useCreateCredential, useCredentials, MEMBERSHIP_STATUS_COLORS, transformMembershipToTableRow, useUserMemberships, useUpdateWebhookEndpoint, useDeleteWebhookEndpoint, useCreateWebhookEndpoint, useListWebhookEndpoints, useUpdateMemberConfig, useOrganizationMembers, useUpdateCredential, CredentialSchemas } from './chunk-DRBMVLJE.js';
6
- import { useResources, showErrorNotification } from './chunk-5RYRL7DP.js';
5
+ import { useDeleteCredential, useCreateCredential, useCredentials, MEMBERSHIP_STATUS_COLORS, transformMembershipToTableRow, useUserMemberships, useUpdateWebhookEndpoint, useDeleteWebhookEndpoint, useCreateWebhookEndpoint, useListWebhookEndpoints, useUpdateMemberConfig, useOrganizationMembers, useUpdateCredential, CredentialSchemas } from './chunk-TENLM2GN.js';
6
+ import { useResources, showErrorNotification } from './chunk-V6Z2U6ZV.js';
7
7
  import { ListSkeleton, EmptyState, PageTitleCaption, CardHeader, APIErrorAlert, StatCard } from './chunk-Y3D3WFJG.js';
8
8
  import { formatDateTime, OAUTH_POPUP_CHECK_INTERVAL, OAUTH_FLOW_TIMEOUT } from './chunk-IOKL7BKE.js';
9
9
  import { useInitialization } from './chunk-TUXTSEAF.js';
@@ -3,7 +3,7 @@ import { PageContainer } from './chunk-BZZCNLT6.js';
3
3
  import { SubshellSidebarSection, SubshellNavItem } from './chunk-27COZ5AH.js';
4
4
  import { FilterBar } from './chunk-PDHTXPSF.js';
5
5
  import { CustomModal } from './chunk-GBMNCNHX.js';
6
- import { useDealTasksDue, useDeals, useCreateDealTask, useDeleteDeal, useTableSort, sortData, usePaginationState, useTableSelection, useDealDetail } from './chunk-5RYRL7DP.js';
6
+ import { useDealTasksDue, useDeals, useCreateDealTask, useDeleteDeal, useTableSort, sortData, usePaginationState, useTableSelection, useDealDetail } from './chunk-V6Z2U6ZV.js';
7
7
  import { SubshellContentContainer } from './chunk-RX4UWZZR.js';
8
8
  import { CenteredErrorState, CardHeader, PageTitleCaption, EmptyState, ActivityTimeline } from './chunk-Y3D3WFJG.js';
9
9
  import { PAGE_SIZE_DEFAULT, formatTimeAgo } from './chunk-IOKL7BKE.js';
@@ -702,8 +702,7 @@ var crmManifest = {
702
702
  navEntry: {
703
703
  label: "CRM",
704
704
  icon: IconAddressBook,
705
- link: "/crm",
706
- featureKey: "acquisition"
705
+ link: "/crm"
707
706
  }
708
707
  };
709
708
 
@@ -1,17 +1,17 @@
1
1
  import { ChatHeader, ChatSidebar } from './chunk-ROSMICXG.js';
2
2
  import { SubshellLoader, CollapsibleSidebarGroup } from './chunk-IDACMRGQ.js';
3
- import { ResourceHealthPanel } from './chunk-URFYQRJO.js';
3
+ import { ResourceHealthPanel } from './chunk-VGBMSGYC.js';
4
4
  import { PageContainer } from './chunk-BZZCNLT6.js';
5
5
  import { SubshellSidebarSection, SubshellNavItem } from './chunk-27COZ5AH.js';
6
6
  import { CustomModal, ConfirmationModal } from './chunk-GBMNCNHX.js';
7
- import { BaseNode, useGraphTheme, BaseEdge, ExecutionStats, UnifiedWorkflowGraph, WorkflowExecutionTimeline, AgentExecutionVisualizer, AgentExecutionTimeline, GraphBackground, GraphFitViewButton, GraphFitViewHandler } from './chunk-UXYE5ZBY.js';
7
+ import { BaseNode, useGraphTheme, BaseEdge, ExecutionStats, UnifiedWorkflowGraph, WorkflowExecutionTimeline, AgentExecutionVisualizer, AgentExecutionTimeline, GraphBackground, GraphFitViewButton, GraphFitViewHandler } from './chunk-Z5RHDI7T.js';
8
8
  import { useCyberColors, CyberDonut } from './chunk-KFICYU6S.js';
9
9
  import { AppShellLoader } from './chunk-YEX4MQSY.js';
10
10
  import { getResourceStatusColor, useMergedExecution, useTimelineData, useAgentIterationData, getStatusIcon } from './chunk-XA34RETF.js';
11
- import { useStatusFilter, useResourceSearch, useResourcesDomainFilters, filterByDomainFilters, useCommandViewDomainFilters } from './chunk-DRBMVLJE.js';
12
- import { useErrorDetail, useExecution, useArchivedLogs, useDeleteExecution, useRetryExecution, useCancelExecution, useCommandQueueTotals, usePaginationState, useResources, useRecentExecutionsByResource, useExecuteAsync, useResourceDefinition, isSessionCapable, useDeleteTask, useCommandQueue, useSubmitAction, useCommandViewData, useCommandViewStats, useResourceExecutions, useCheckpointTasks, useCalibrationProjects, useCalibrationProject, useAllCalibrationProjects, useCommandViewStore, useCalibrationSSE, useCalibrationRunFull, useExecuteRun, useGradeRun, useCalibrationRuns, useExecutionPanelState, useDeleteSession, useCreateSession, useSessions, useSessionExecutions, useSession, showApiErrorNotification, showSuccessNotification, calibrationKeys, useDeleteProject, useCreateProject, useBulkDeleteExecutions } from './chunk-5RYRL7DP.js';
11
+ import { useStatusFilter, useResourceSearch, useResourcesDomainFilters, filterByDomainFilters, useCommandViewDomainFilters } from './chunk-TENLM2GN.js';
12
+ import { useErrorDetail, useExecution, useArchivedLogs, useDeleteExecution, useRetryExecution, useCancelExecution, useCommandQueueTotals, usePaginationState, useResources, useRecentExecutionsByResource, useExecuteAsync, useResourceDefinition, isSessionCapable, useDeleteTask, useCommandQueue, useSubmitAction, useCommandViewData, useCommandViewStats, useResourceExecutions, useCheckpointTasks, useCalibrationProjects, useCalibrationProject, useAllCalibrationProjects, useCommandViewStore, useCalibrationSSE, useCalibrationRunFull, useExecuteRun, useGradeRun, useCalibrationRuns, useExecutionPanelState, useDeleteSession, useCreateSession, useSessions, useSessionExecutions, useSession, showApiErrorNotification, showSuccessNotification, calibrationKeys, useDeleteProject, useCreateProject, useBulkDeleteExecutions } from './chunk-V6Z2U6ZV.js';
13
13
  import { useGraphHighlighting, calculateGraphHeight, Graph_module_css_default, GRAPH_CONSTANTS } from './chunk-22UVE3RA.js';
14
- import { useOptionalElevasisFeatures, useElevasisFeatures } from './chunk-TNYUWKSJ.js';
14
+ import { useOptionalElevasisFeatures, useElevasisFeatures } from './chunk-SPMKW4VO.js';
15
15
  import { SubshellContainer, SubshellSidebar, SubshellRightSideContainer, SubshellContentContainer } from './chunk-RX4UWZZR.js';
16
16
  import { JsonViewer, CardHeader, PageTitleCaption, CollapsibleSection, TabCountBadge, ResourceCard, ContextViewer, EmptyState, APIErrorAlert } from './chunk-Y3D3WFJG.js';
17
17
  import { StyledMarkdown } from './chunk-3KMDHCAR.js';
@@ -189,7 +189,7 @@ var OrganizationModelNavigationSchema = z.object({
189
189
  });
190
190
 
191
191
  // ../core/src/organization-model/schema.ts
192
- var OrganizationModelSchema = z.object({
192
+ var OrganizationModelSchemaBase = z.object({
193
193
  version: z.literal(1).default(1),
194
194
  domains: z.array(SemanticDomainSchema).default([]),
195
195
  branding: OrganizationModelBrandingSchema,
@@ -200,6 +200,181 @@ var OrganizationModelSchema = z.object({
200
200
  delivery: OrganizationModelDeliverySchema,
201
201
  resourceMappings: z.array(ResourceMappingSchema).default([])
202
202
  });
203
+ function addIssue(ctx, path, message) {
204
+ ctx.addIssue({
205
+ code: z.ZodIssueCode.custom,
206
+ path,
207
+ message
208
+ });
209
+ }
210
+ function collectIds(items, ctx, collectionPath, label) {
211
+ const itemsById = /* @__PURE__ */ new Map();
212
+ items.forEach((item, index) => {
213
+ if (itemsById.has(item.id)) {
214
+ addIssue(ctx, [...collectionPath, index, "id"], `${label} id "${item.id}" must be unique`);
215
+ return;
216
+ }
217
+ itemsById.set(item.id, item);
218
+ });
219
+ return itemsById;
220
+ }
221
+ var OrganizationModelSchema = OrganizationModelSchemaBase.superRefine((model, ctx) => {
222
+ const domainsById = collectIds(model.domains, ctx, ["domains"], "Domain");
223
+ const surfacesById = collectIds(model.navigation.surfaces, ctx, ["navigation", "surfaces"], "Surface");
224
+ collectIds(model.navigation.groups, ctx, ["navigation", "groups"], "Navigation group");
225
+ collectIds(model.resourceMappings, ctx, ["resourceMappings"], "Resource mapping");
226
+ const resourceMappingsByResourceId = /* @__PURE__ */ new Map();
227
+ model.resourceMappings.forEach((resourceMapping, index) => {
228
+ if (resourceMappingsByResourceId.has(resourceMapping.resourceId)) {
229
+ addIssue(
230
+ ctx,
231
+ ["resourceMappings", index, "resourceId"],
232
+ `Resource mapping resourceId "${resourceMapping.resourceId}" must be unique`
233
+ );
234
+ return;
235
+ }
236
+ resourceMappingsByResourceId.set(resourceMapping.resourceId, resourceMapping);
237
+ });
238
+ if (model.navigation.defaultSurfaceId && !surfacesById.has(model.navigation.defaultSurfaceId)) {
239
+ addIssue(
240
+ ctx,
241
+ ["navigation", "defaultSurfaceId"],
242
+ `Default surface "${model.navigation.defaultSurfaceId}" must reference a declared navigation surface`
243
+ );
244
+ }
245
+ model.navigation.groups.forEach((group, groupIndex) => {
246
+ group.surfaceIds.forEach((surfaceId, surfaceIndex) => {
247
+ if (!surfacesById.has(surfaceId)) {
248
+ addIssue(
249
+ ctx,
250
+ ["navigation", "groups", groupIndex, "surfaceIds", surfaceIndex],
251
+ `Navigation group "${group.id}" references unknown surface "${surfaceId}"`
252
+ );
253
+ }
254
+ });
255
+ });
256
+ model.domains.forEach((domain, domainIndex) => {
257
+ domain.surfaceIds.forEach((surfaceId, surfaceIndex) => {
258
+ const surface = surfacesById.get(surfaceId);
259
+ if (!surface) {
260
+ addIssue(
261
+ ctx,
262
+ ["domains", domainIndex, "surfaceIds", surfaceIndex],
263
+ `Domain "${domain.id}" references unknown surface "${surfaceId}"`
264
+ );
265
+ return;
266
+ }
267
+ if (!surface.domainIds.includes(domain.id)) {
268
+ addIssue(
269
+ ctx,
270
+ ["domains", domainIndex, "surfaceIds", surfaceIndex],
271
+ `Domain "${domain.id}" references surface "${surfaceId}" but that surface does not include domain "${domain.id}"`
272
+ );
273
+ }
274
+ });
275
+ domain.resourceIds.forEach((resourceId, resourceIndex) => {
276
+ const resourceMapping = resourceMappingsByResourceId.get(resourceId);
277
+ if (!resourceMapping) {
278
+ addIssue(
279
+ ctx,
280
+ ["domains", domainIndex, "resourceIds", resourceIndex],
281
+ `Domain "${domain.id}" references unknown resource "${resourceId}"`
282
+ );
283
+ return;
284
+ }
285
+ if (!resourceMapping.domainIds.includes(domain.id)) {
286
+ addIssue(
287
+ ctx,
288
+ ["domains", domainIndex, "resourceIds", resourceIndex],
289
+ `Domain "${domain.id}" references resource "${resourceId}" but that resource mapping does not include domain "${domain.id}"`
290
+ );
291
+ }
292
+ });
293
+ });
294
+ model.navigation.surfaces.forEach((surface, surfaceIndex) => {
295
+ if (surface.parentId && !surfacesById.has(surface.parentId)) {
296
+ addIssue(
297
+ ctx,
298
+ ["navigation", "surfaces", surfaceIndex, "parentId"],
299
+ `Surface "${surface.id}" references unknown parent surface "${surface.parentId}"`
300
+ );
301
+ }
302
+ surface.domainIds.forEach((domainId, domainIndex) => {
303
+ const domain = domainsById.get(domainId);
304
+ if (!domain) {
305
+ addIssue(
306
+ ctx,
307
+ ["navigation", "surfaces", surfaceIndex, "domainIds", domainIndex],
308
+ `Surface "${surface.id}" references unknown domain "${domainId}"`
309
+ );
310
+ return;
311
+ }
312
+ if (!domain.surfaceIds.includes(surface.id)) {
313
+ addIssue(
314
+ ctx,
315
+ ["navigation", "surfaces", surfaceIndex, "domainIds", domainIndex],
316
+ `Surface "${surface.id}" references domain "${domainId}" but that domain does not include surface "${surface.id}"`
317
+ );
318
+ }
319
+ });
320
+ surface.resourceIds.forEach((resourceId, resourceIndex) => {
321
+ const resourceMapping = resourceMappingsByResourceId.get(resourceId);
322
+ if (!resourceMapping) {
323
+ addIssue(
324
+ ctx,
325
+ ["navigation", "surfaces", surfaceIndex, "resourceIds", resourceIndex],
326
+ `Surface "${surface.id}" references unknown resource "${resourceId}"`
327
+ );
328
+ return;
329
+ }
330
+ if (!resourceMapping.surfaceIds.includes(surface.id)) {
331
+ addIssue(
332
+ ctx,
333
+ ["navigation", "surfaces", surfaceIndex, "resourceIds", resourceIndex],
334
+ `Surface "${surface.id}" references resource "${resourceId}" but that resource mapping does not include surface "${surface.id}"`
335
+ );
336
+ }
337
+ });
338
+ });
339
+ model.resourceMappings.forEach((resourceMapping, resourceIndex) => {
340
+ resourceMapping.domainIds.forEach((domainId, domainIndex) => {
341
+ const domain = domainsById.get(domainId);
342
+ if (!domain) {
343
+ addIssue(
344
+ ctx,
345
+ ["resourceMappings", resourceIndex, "domainIds", domainIndex],
346
+ `Resource mapping "${resourceMapping.id}" references unknown domain "${domainId}"`
347
+ );
348
+ return;
349
+ }
350
+ if (!domain.resourceIds.includes(resourceMapping.resourceId)) {
351
+ addIssue(
352
+ ctx,
353
+ ["resourceMappings", resourceIndex, "domainIds", domainIndex],
354
+ `Resource mapping "${resourceMapping.id}" references domain "${domainId}" but that domain does not include resource "${resourceMapping.resourceId}"`
355
+ );
356
+ }
357
+ });
358
+ resourceMapping.surfaceIds.forEach((surfaceId, surfaceIndex) => {
359
+ const surface = surfacesById.get(surfaceId);
360
+ if (!surface) {
361
+ addIssue(
362
+ ctx,
363
+ ["resourceMappings", resourceIndex, "surfaceIds", surfaceIndex],
364
+ `Resource mapping "${resourceMapping.id}" references unknown surface "${surfaceId}"`
365
+ );
366
+ return;
367
+ }
368
+ if (!surface.resourceIds.includes(resourceMapping.resourceId)) {
369
+ addIssue(
370
+ ctx,
371
+ ["resourceMappings", resourceIndex, "surfaceIds", surfaceIndex],
372
+ `Resource mapping "${resourceMapping.id}" references surface "${surfaceId}" but that surface does not include resource "${resourceMapping.resourceId}"`
373
+ );
374
+ }
375
+ });
376
+ });
377
+ });
203
378
  var OrganizationGraphNodeKindSchema = z.enum([
204
379
  "organization",
205
380
  "feature",
@@ -8999,7 +9174,6 @@ var operationsManifest = {
8999
9174
  navEntry: {
9000
9175
  label: "Operations",
9001
9176
  icon: IconCode,
9002
- featureKey: "operations",
9003
9177
  dataOnboardingTourId: "sidebar-operations",
9004
9178
  links: [
9005
9179
  { label: "Overview", link: "/operations" },
@@ -1,6 +1,6 @@
1
1
  import { PRESETS, getPreset, generateShades, mantineThemeOverride, createCssVariablesResolver, PresetsProvider } from './chunk-47YILFON.js';
2
2
  import { AppBackground } from './chunk-CYXZHBP4.js';
3
- import { ElevasisCoreProvider } from './chunk-TNYUWKSJ.js';
3
+ import { ElevasisCoreProvider } from './chunk-SPMKW4VO.js';
4
4
  import { ElevasisLoader } from './chunk-Y3D3WFJG.js';
5
5
  import { AppearanceProvider } from './chunk-QJ2KCHKX.js';
6
6
  import { getErrorInfo, formatErrorMessage, getErrorTitle } from './chunk-IOKL7BKE.js';
@@ -3,8 +3,8 @@ import { CustomModal } from './chunk-GBMNCNHX.js';
3
3
  import { CyberAreaChart, CostTrendChart, ActivityTrendChart } from './chunk-KFICYU6S.js';
4
4
  import { AppShellLoader } from './chunk-YEX4MQSY.js';
5
5
  import { formatDuration } from './chunk-XA34RETF.js';
6
- import { useExecutionLogsFilters, useTimeRangeDates, useActivityFilters } from './chunk-DRBMVLJE.js';
7
- import { useResolveError, useResolveAllErrors, usePaginationState, useErrorDetails, useMarkAsRead, useExecutionLogs, useExecutionHealth, useErrorAnalysis, useErrorDetail, useResolveErrorsByExecution, useResources, useCostTrends, useCostSummary, useCostByModel, useCostBreakdown, useActivityTrend, useActivities, useNotifications, useMarkAllAsRead, useTestNotification } from './chunk-5RYRL7DP.js';
6
+ import { useExecutionLogsFilters, useTimeRangeDates, useActivityFilters } from './chunk-TENLM2GN.js';
7
+ import { useResolveError, useResolveAllErrors, usePaginationState, useErrorDetails, useMarkAsRead, useExecutionLogs, useExecutionHealth, useErrorAnalysis, useErrorDetail, useResolveErrorsByExecution, useResources, useCostTrends, useCostSummary, useCostByModel, useCostBreakdown, useActivityTrend, useActivities, useNotifications, useMarkAllAsRead, useTestNotification } from './chunk-V6Z2U6ZV.js';
8
8
  import { formatBucketTime, getTimeRangeDates } from './chunk-LXHZYSMQ.js';
9
9
  import { CenteredErrorState, CardHeader, StatsCardSkeleton, TrendIndicator, DetailCardSkeleton, EmptyState, PageTitleCaption, JsonViewer } from './chunk-Y3D3WFJG.js';
10
10
  import { PAGE_SIZE_DEFAULT } from './chunk-IOKL7BKE.js';
@@ -1795,7 +1795,6 @@ var monitoringManifest = {
1795
1795
  navEntry: {
1796
1796
  label: "Monitoring",
1797
1797
  icon: IconActivity,
1798
- featureKey: "monitoring",
1799
1798
  dataOnboardingTourId: "sidebar-monitoring",
1800
1799
  links: [
1801
1800
  { label: "Activity Log", link: "/monitoring/activity-log" },
@@ -127,7 +127,8 @@ function OrgServiceBridge({
127
127
  }
128
128
  var FEATURE_KEY_ALIASES = {
129
129
  crm: "acquisition",
130
- "lead-gen": "acquisition"
130
+ "lead-gen": "acquisition",
131
+ projects: "delivery"
131
132
  };
132
133
  function createUseFeatureAccess({
133
134
  useInitialization: useInitialization2,
@@ -195,19 +196,6 @@ function isRouteMatch(currentPath, route) {
195
196
  const normalizedRoute = normalizeRoutePath(route);
196
197
  return normalizedCurrentPath === normalizedRoute || normalizedCurrentPath.startsWith(`${normalizedRoute}/`);
197
198
  }
198
- function getFeatureAccessKey(feature) {
199
- return feature.accessFeatureKey ?? feature.navEntry?.featureKey;
200
- }
201
- function getFeatureAccessKeys(feature) {
202
- return [...new Set([feature.key, feature.accessFeatureKey, feature.navEntry?.featureKey].filter((key) => Boolean(key)))];
203
- }
204
- function isFeatureModuleEnabled(feature, hasFeature) {
205
- const accessKeys = getFeatureAccessKeys(feature);
206
- if (accessKeys.length === 0) {
207
- return true;
208
- }
209
- return accessKeys.some((key) => hasFeature(key));
210
- }
211
199
  function uniqueIds(ids) {
212
200
  return ids ? [...new Set(ids)] : [];
213
201
  }
@@ -342,17 +330,13 @@ function resolveFeatureSemantics(feature, resolvedFeature, organizationModel) {
342
330
  function resolveFeatureModules(features, organizationModel, isFeatureEnabled) {
343
331
  return features.map((feature) => {
344
332
  const resolvedFeature = resolveFeatureModule(feature, organizationModel);
345
- const accessFeatureKey = getFeatureAccessKey(feature);
333
+ const accessFeatureKey = feature.accessFeatureKey;
346
334
  return {
347
335
  ...resolvedFeature,
348
- shellModule: {
349
- key: feature.key,
350
- label: resolvedFeature.label ?? feature.label
351
- },
352
336
  access: {
353
337
  featureKey: accessFeatureKey,
354
338
  label: getOrganizationModelFeatureLabel(organizationModel, accessFeatureKey),
355
- enabled: accessFeatureKey ? isFeatureEnabled(accessFeatureKey) : isFeatureModuleEnabled(feature, isFeatureEnabled)
339
+ enabled: isFeatureEnabled(accessFeatureKey)
356
340
  },
357
341
  semantics: resolveFeatureSemantics(feature, resolvedFeature, organizationModel)
358
342
  };
@@ -375,22 +359,35 @@ function filterNavLinks(links, disabledSubsectionPaths, isFeatureEnabled) {
375
359
  ];
376
360
  });
377
361
  }
362
+ function createShellNavItem(navEntry, placement, source, accessFeatureKey, links = navEntry.links) {
363
+ return {
364
+ ...navEntry,
365
+ links,
366
+ placement,
367
+ source,
368
+ accessFeatureKey
369
+ };
370
+ }
371
+ function createFeatureShellNavItem(feature, links = feature.navEntry?.links) {
372
+ if (!feature.navEntry) {
373
+ return void 0;
374
+ }
375
+ return createShellNavItem(
376
+ feature.navEntry,
377
+ "primary",
378
+ "feature",
379
+ feature.access.featureKey,
380
+ links
381
+ );
382
+ }
378
383
  function getFeatureNavItems(features, disabledSubsectionPaths, isFeatureEnabled) {
379
384
  return features.flatMap((feature) => {
380
385
  if (!feature.navEntry) {
381
386
  return [];
382
387
  }
383
388
  const links = feature.navEntry.links?.length ? filterNavLinks(feature.navEntry.links, disabledSubsectionPaths, isFeatureEnabled) : void 0;
384
- return [
385
- {
386
- ...feature.navEntry,
387
- links,
388
- placement: "primary",
389
- source: "feature",
390
- shellModuleKey: feature.key,
391
- accessFeatureKey: feature.access.featureKey
392
- }
393
- ];
389
+ const navItem = createFeatureShellNavItem(feature, links);
390
+ return navItem ? [navItem] : [];
394
391
  });
395
392
  }
396
393
  function resolveAppShellOverrides(appShellOverrides, organizationModel) {
@@ -418,15 +415,7 @@ function getAppShellNavItems(navItems, placement, disabledSubsectionPaths, isFea
418
415
  if (navItem.links && !links?.length && !navItem.link) {
419
416
  return [];
420
417
  }
421
- return [
422
- {
423
- ...navItem,
424
- links,
425
- placement,
426
- source: "app",
427
- accessFeatureKey: navItem.featureKey
428
- }
429
- ];
418
+ return [createShellNavItem(navItem, placement, "app", navItem.featureKey, links)];
430
419
  });
431
420
  }
432
421
  function findMatchingNavLink(links, currentPath) {
@@ -449,7 +438,7 @@ function isHiddenNavLink(link, disabledSubsectionPaths, isFeatureEnabled) {
449
438
  }
450
439
  return disabledSubsectionPaths.some((disabledPath) => isRouteMatch(link.link, disabledPath));
451
440
  }
452
- function resolveNavRoute(features, currentPath, disabledSubsectionPaths, isFeatureEnabled) {
441
+ function resolveRoute(features, currentPath, disabledSubsectionPaths, isFeatureEnabled) {
453
442
  for (const feature of features) {
454
443
  const navEntry = feature.navEntry;
455
444
  const matchesSubshell = feature.subshellRoutes?.some((route) => isRouteMatch(currentPath, route)) ?? false;
@@ -460,23 +449,23 @@ function resolveNavRoute(features, currentPath, disabledSubsectionPaths, isFeatu
460
449
  }
461
450
  if (matchedLink && isHiddenNavLink(matchedLink, disabledSubsectionPaths, isFeatureEnabled)) {
462
451
  return {
463
- state: "disabled",
452
+ status: "hidden",
464
453
  path: currentPath,
465
454
  feature,
466
- navEntry,
455
+ navItem: createFeatureShellNavItem(feature),
467
456
  navLink: matchedLink
468
457
  };
469
458
  }
470
459
  return {
471
- state: "enabled",
460
+ status: "matched",
472
461
  path: currentPath,
473
462
  feature,
474
- navEntry,
463
+ navItem: createFeatureShellNavItem(feature),
475
464
  navLink: matchedLink ?? void 0
476
465
  };
477
466
  }
478
467
  return {
479
- state: "missing",
468
+ status: "unmatched",
480
469
  path: currentPath
481
470
  };
482
471
  }
@@ -520,15 +509,7 @@ function ElevasisFeaturesProvider({
520
509
  [appShellOverrides, organizationModel]
521
510
  );
522
511
  const enabledResolvedFeatures = useMemo(
523
- () => resolvedFeatures.filter((feature) => isFeatureModuleEnabled(feature, hasResolvedFeature)),
524
- [resolvedFeatures, hasResolvedFeature]
525
- );
526
- const enabledFeatures = useMemo(
527
- () => enabledResolvedFeatures,
528
- [enabledResolvedFeatures]
529
- );
530
- const allFeatures = useMemo(
531
- () => resolvedFeatures,
512
+ () => resolvedFeatures.filter((feature) => feature.access.enabled),
532
513
  [resolvedFeatures]
533
514
  );
534
515
  const featureNavItems = useMemo(
@@ -569,26 +550,20 @@ function ElevasisFeaturesProvider({
569
550
  hasResolvedFeature
570
551
  ]
571
552
  );
553
+ const shellNavItems = useMemo(
554
+ () => [...primaryNavItems, ...bottomNavItems],
555
+ [primaryNavItems, bottomNavItems]
556
+ );
572
557
  const shellModel = useMemo(
573
558
  () => ({
574
- primaryNavItems,
575
- bottomNavItems,
576
- navItems: [...primaryNavItems, ...bottomNavItems]
559
+ navItems: shellNavItems
577
560
  }),
578
- [primaryNavItems, bottomNavItems]
579
- );
580
- const navItems = useMemo(
581
- () => shellModel.navItems,
582
- [shellModel]
561
+ [shellNavItems]
583
562
  );
584
563
  const organizationGraph = useMemo(
585
564
  () => resolveOrganizationGraphSurface(enabledResolvedFeatures, organizationModel),
586
565
  [enabledResolvedFeatures, organizationModel]
587
566
  );
588
- const getFeature = useCallback(
589
- (key) => allFeatures.find((feature) => feature.key === key),
590
- [allFeatures]
591
- );
592
567
  const getResolvedFeature = useCallback(
593
568
  (key) => resolvedFeatures.find((feature) => feature.key === key),
594
569
  [resolvedFeatures]
@@ -597,26 +572,25 @@ function ElevasisFeaturesProvider({
597
572
  (key) => hasResolvedFeature(key),
598
573
  [hasResolvedFeature]
599
574
  );
600
- const resolveNavRouteByPath = useCallback(
601
- (path) => resolveNavRoute(enabledResolvedFeatures, path, normalizedDisabledSubsectionPaths, isFeatureEnabled),
575
+ const resolveRouteByPath = useCallback(
576
+ (path) => resolveRoute(
577
+ enabledResolvedFeatures,
578
+ path,
579
+ normalizedDisabledSubsectionPaths,
580
+ isFeatureEnabled
581
+ ),
602
582
  [enabledResolvedFeatures, normalizedDisabledSubsectionPaths, isFeatureEnabled]
603
583
  );
604
584
  const shellRuntime = useMemo(
605
585
  () => ({
606
- shellModel,
607
- resolveNavRoute: resolveNavRouteByPath
586
+ resolveRoute: resolveRouteByPath
608
587
  }),
609
- [shellModel, resolveNavRouteByPath]
588
+ [resolveRouteByPath]
610
589
  );
611
590
  const value = useMemo(
612
591
  () => ({
613
- navItems,
614
- primaryNavItems,
615
- bottomNavItems,
616
592
  shellModel,
617
593
  shellRuntime,
618
- enabledFeatures,
619
- allFeatures,
620
594
  enabledResolvedFeatures,
621
595
  resolvedFeatures,
622
596
  organizationGraph,
@@ -626,18 +600,11 @@ function ElevasisFeaturesProvider({
626
600
  operationsSSEManager,
627
601
  disabledSubsectionPaths: normalizedDisabledSubsectionPaths,
628
602
  isFeatureEnabled,
629
- getFeature,
630
- getResolvedFeature,
631
- resolveNavRoute: resolveNavRouteByPath
603
+ getResolvedFeature
632
604
  }),
633
605
  [
634
- navItems,
635
- primaryNavItems,
636
- bottomNavItems,
637
606
  shellModel,
638
607
  shellRuntime,
639
- enabledFeatures,
640
- allFeatures,
641
608
  enabledResolvedFeatures,
642
609
  resolvedFeatures,
643
610
  organizationGraph,
@@ -647,9 +614,7 @@ function ElevasisFeaturesProvider({
647
614
  operationsSSEManager,
648
615
  normalizedDisabledSubsectionPaths,
649
616
  isFeatureEnabled,
650
- getFeature,
651
- getResolvedFeature,
652
- resolveNavRouteByPath
617
+ getResolvedFeature
653
618
  ]
654
619
  );
655
620
  return /* @__PURE__ */ jsx(ElevasisFeaturesContext.Provider, { value, children });
@@ -657,14 +622,14 @@ function ElevasisFeaturesProvider({
657
622
  function FeatureShell({ children }) {
658
623
  const { shellRuntime } = useElevasisFeatures();
659
624
  const { currentPath } = useRouterContext();
660
- const routeResolution = shellRuntime.resolveNavRoute(currentPath);
661
- if (routeResolution.state === "disabled") {
625
+ const routeMatch = shellRuntime.resolveRoute(currentPath);
626
+ if (routeMatch.status === "hidden") {
662
627
  return /* @__PURE__ */ jsx(FeatureUnavailableState, { path: currentPath });
663
628
  }
664
- if (routeResolution.state !== "enabled" || !routeResolution.feature?.sidebar) {
629
+ if (routeMatch.status !== "matched" || !routeMatch.feature?.sidebar) {
665
630
  return /* @__PURE__ */ jsx(Fragment, { children });
666
631
  }
667
- const SidebarComponent = routeResolution.feature.sidebar;
632
+ const SidebarComponent = routeMatch.feature.sidebar;
668
633
  return /* @__PURE__ */ jsxs(SubshellContainer, { children: [
669
634
  /* @__PURE__ */ jsx(SubshellSidebar, { width: 250, children: /* @__PURE__ */ jsx(SidebarComponent, {}) }),
670
635
  /* @__PURE__ */ jsx(SubshellRightSideContainer, { children })
@@ -1,10 +1,10 @@
1
- import { ResourceExecuteDialog } from './chunk-S5EXLTGK.js';
1
+ import { ResourceExecuteDialog } from './chunk-IFH4L6CR.js';
2
2
  import { TableSelectionToolbar, SortableHeader } from './chunk-TUMSNGTX.js';
3
3
  import { PageContainer } from './chunk-BZZCNLT6.js';
4
4
  import { SubshellSidebarSection, SubshellNavItem } from './chunk-27COZ5AH.js';
5
5
  import { FilterBar } from './chunk-PDHTXPSF.js';
6
6
  import { CustomModal } from './chunk-GBMNCNHX.js';
7
- import { showApiErrorNotification, acquisitionListKeys, showSuccessNotification, useListsTelemetry, useLists, useCreateList, useTableSort, sortData, usePaginationState, useTableSelection, useList, useListProgress, useListExecutions, useResourceDefinition, useCompanies, useDeleteCompanies, useContacts, useDeleteContacts } from './chunk-5RYRL7DP.js';
7
+ import { showApiErrorNotification, acquisitionListKeys, showSuccessNotification, useListsTelemetry, useLists, useCreateList, useTableSort, sortData, usePaginationState, useTableSelection, useList, useListProgress, useListExecutions, useResourceDefinition, useCompanies, useDeleteCompanies, useContacts, useDeleteContacts } from './chunk-V6Z2U6ZV.js';
8
8
  import { SubshellContentContainer } from './chunk-RX4UWZZR.js';
9
9
  import { PageTitleCaption, CenteredErrorState, StatCard, EmptyState } from './chunk-Y3D3WFJG.js';
10
10
  import { useElevasisServices } from './chunk-QEPXAWE2.js';
@@ -59,8 +59,7 @@ var leadGenManifest = {
59
59
  navEntry: {
60
60
  label: "Lead Gen",
61
61
  icon: IconTarget,
62
- link: "/lead-gen",
63
- featureKey: "acquisition"
62
+ link: "/lead-gen"
64
63
  }
65
64
  };
66
65
  var LEAD_GEN_ROUTE_LINKS = [
@@ -1,6 +1,6 @@
1
- import { CredentialNameSchema, UuidSchema, useErrorNotification, showApiErrorNotification } from './chunk-5RYRL7DP.js';
1
+ import { CredentialNameSchema, UuidSchema, useErrorNotification, showApiErrorNotification } from './chunk-V6Z2U6ZV.js';
2
2
  import { getTimeRangeDates } from './chunk-LXHZYSMQ.js';
3
- import { useNotificationAdapter } from './chunk-TNYUWKSJ.js';
3
+ import { useNotificationAdapter } from './chunk-SPMKW4VO.js';
4
4
  import { GC_TIME_SHORT, STALE_TIME_MONITORING, GC_TIME_MEDIUM, STALE_TIME_DEFAULT } from './chunk-IOKL7BKE.js';
5
5
  import { useElevasisServices } from './chunk-QEPXAWE2.js';
6
6
  import { z } from 'zod';
@@ -1,6 +1,6 @@
1
1
  import { getTimeRangeDates, observabilityKeys } from './chunk-LXHZYSMQ.js';
2
2
  import { GRAPH_CONSTANTS } from './chunk-22UVE3RA.js';
3
- import { useNotificationAdapter } from './chunk-TNYUWKSJ.js';
3
+ import { useNotificationAdapter } from './chunk-SPMKW4VO.js';
4
4
  import { HTTP_HEADERS } from './chunk-NVOCKXUQ.js';
5
5
  import { STALE_TIME_MONITORING, REFETCH_INTERVAL_DASHBOARD, REFETCH_INTERVAL_RUNNING, WS_MAX_RETRIES_BEFORE_ERROR, WS_RECONNECT_BASE_DELAY, WS_RECONNECT_MAX_DELAY, getErrorInfo, formatErrorMessage, getErrorTitle, STALE_TIME_DEFAULT, STALE_TIME_ADMIN, APIClientError } from './chunk-IOKL7BKE.js';
6
6
  import { useStableAccessToken } from './chunk-MTJ43R2E.js';
@@ -1,5 +1,5 @@
1
1
  import { useCyberColors, CyberLegendItem, CyberAreaChart } from './chunk-KFICYU6S.js';
2
- import { useResourcesHealth } from './chunk-5RYRL7DP.js';
2
+ import { useResourcesHealth } from './chunk-V6Z2U6ZV.js';
3
3
  import { getTimeRangeDates, formatBucketTime } from './chunk-LXHZYSMQ.js';
4
4
  import { CardHeader, EmptyState } from './chunk-Y3D3WFJG.js';
5
5
  import { Paper, Center, Loader, Group } from '@mantine/core';
@@ -3,8 +3,8 @@ import { PageContainer } from './chunk-BZZCNLT6.js';
3
3
  import { SubshellSidebarSection, SubshellNavItem } from './chunk-27COZ5AH.js';
4
4
  import { FilterBar } from './chunk-PDHTXPSF.js';
5
5
  import { CustomModal } from './chunk-GBMNCNHX.js';
6
- import { useProjects, useProject, useProjectNotes, useDeleteProject as useDeleteProject$1, useUpdateMilestone, useCreateNote } from './chunk-DRBMVLJE.js';
7
- import { useDeleteProject, useTableSort, sortData, usePaginationState, useTableSelection } from './chunk-5RYRL7DP.js';
6
+ import { useProjects, useProject, useProjectNotes, useDeleteProject as useDeleteProject$1, useUpdateMilestone, useCreateNote } from './chunk-TENLM2GN.js';
7
+ import { useDeleteProject, useTableSort, sortData, usePaginationState, useTableSelection } from './chunk-V6Z2U6ZV.js';
8
8
  import { SubshellContentContainer } from './chunk-RX4UWZZR.js';
9
9
  import { StatusBadge, EmptyState, PageTitleCaption, CenteredErrorState, StatCard } from './chunk-Y3D3WFJG.js';
10
10
  import { PAGE_SIZE_DEFAULT, formatTimeAgo, formatDate } from './chunk-IOKL7BKE.js';
@@ -327,8 +327,7 @@ var deliveryManifest = {
327
327
  navEntry: {
328
328
  label: "Projects",
329
329
  icon: IconBriefcase,
330
- link: "/projects",
331
- featureKey: "delivery"
330
+ link: "/projects"
332
331
  },
333
332
  sidebar: ProjectsSidebar,
334
333
  subshellRoutes: ["/projects"]