@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.
- package/dist/{chunk-CKBJVNSA.js → chunk-6FDGVZFL.js} +2 -2
- package/dist/{chunk-3VTACYBT.js → chunk-HRIJZKFL.js} +2 -3
- package/dist/{chunk-S5EXLTGK.js → chunk-IFH4L6CR.js} +181 -7
- package/dist/{chunk-GEJZ6WLM.js → chunk-N6GYYWY3.js} +1 -1
- package/dist/{chunk-ZGV3X3UQ.js → chunk-SBND6P3L.js} +2 -3
- package/dist/{chunk-TNYUWKSJ.js → chunk-SPMKW4VO.js} +56 -91
- package/dist/{chunk-XGUMNEIR.js → chunk-T6R3V4GW.js} +3 -4
- package/dist/{chunk-DRBMVLJE.js → chunk-TENLM2GN.js} +2 -2
- package/dist/{chunk-5RYRL7DP.js → chunk-V6Z2U6ZV.js} +1 -1
- package/dist/{chunk-URFYQRJO.js → chunk-VGBMSGYC.js} +1 -1
- package/dist/{chunk-RBRSRRG4.js → chunk-X4HUZINF.js} +3 -4
- package/dist/{chunk-UXYE5ZBY.js → chunk-Z5RHDI7T.js} +4 -13
- package/dist/components/index.d.ts +4 -9
- package/dist/components/index.js +32 -23
- package/dist/features/auth/index.js +9 -2
- package/dist/features/crm/index.d.ts +1 -1
- package/dist/features/crm/index.js +5 -5
- package/dist/features/dashboard/index.d.ts +2 -62
- package/dist/features/dashboard/index.js +5 -5
- package/dist/features/delivery/index.d.ts +1 -1
- package/dist/features/delivery/index.js +5 -5
- package/dist/features/lead-gen/index.d.ts +1 -1
- package/dist/features/lead-gen/index.js +8 -8
- package/dist/features/monitoring/index.d.ts +1 -1
- package/dist/features/monitoring/index.js +6 -6
- package/dist/features/operations/index.d.ts +79 -79
- package/dist/features/operations/index.js +7 -7
- package/dist/features/seo/index.d.ts +1 -1
- package/dist/features/settings/index.d.ts +3 -2
- package/dist/features/settings/index.js +5 -5
- package/dist/hooks/index.d.ts +2 -1
- package/dist/hooks/index.js +4 -4
- package/dist/hooks/published.d.ts +2 -1
- package/dist/hooks/published.js +3 -3
- package/dist/index.d.ts +187 -43
- package/dist/index.js +4 -4
- package/dist/initialization/index.d.ts +2 -1
- package/dist/organization/index.d.ts +2 -1
- package/dist/provider/index.d.ts +185 -42
- package/dist/provider/index.js +2 -2
- package/dist/provider/published.d.ts +185 -42
- package/dist/provider/published.js +1 -1
- package/dist/types/index.d.ts +2 -1
- 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-
|
|
6
|
-
import { useResources, showErrorNotification } from './chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
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-
|
|
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-
|
|
7
|
-
import { useResolveError, useResolveAllErrors, usePaginationState, useErrorDetails, useMarkAsRead, useExecutionLogs, useExecutionHealth, useErrorAnalysis, useErrorDetail, useResolveErrorsByExecution, useResources, useCostTrends, useCostSummary, useCostByModel, useCostBreakdown, useActivityTrend, useActivities, useNotifications, useMarkAllAsRead, useTestNotification } from './chunk-
|
|
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 =
|
|
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:
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
452
|
+
status: "hidden",
|
|
464
453
|
path: currentPath,
|
|
465
454
|
feature,
|
|
466
|
-
|
|
455
|
+
navItem: createFeatureShellNavItem(feature),
|
|
467
456
|
navLink: matchedLink
|
|
468
457
|
};
|
|
469
458
|
}
|
|
470
459
|
return {
|
|
471
|
-
|
|
460
|
+
status: "matched",
|
|
472
461
|
path: currentPath,
|
|
473
462
|
feature,
|
|
474
|
-
|
|
463
|
+
navItem: createFeatureShellNavItem(feature),
|
|
475
464
|
navLink: matchedLink ?? void 0
|
|
476
465
|
};
|
|
477
466
|
}
|
|
478
467
|
return {
|
|
479
|
-
|
|
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) =>
|
|
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
|
-
|
|
575
|
-
bottomNavItems,
|
|
576
|
-
navItems: [...primaryNavItems, ...bottomNavItems]
|
|
559
|
+
navItems: shellNavItems
|
|
577
560
|
}),
|
|
578
|
-
[
|
|
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
|
|
601
|
-
(path) =>
|
|
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
|
-
|
|
607
|
-
resolveNavRoute: resolveNavRouteByPath
|
|
586
|
+
resolveRoute: resolveRouteByPath
|
|
608
587
|
}),
|
|
609
|
-
[
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
661
|
-
if (
|
|
625
|
+
const routeMatch = shellRuntime.resolveRoute(currentPath);
|
|
626
|
+
if (routeMatch.status === "hidden") {
|
|
662
627
|
return /* @__PURE__ */ jsx(FeatureUnavailableState, { path: currentPath });
|
|
663
628
|
}
|
|
664
|
-
if (
|
|
629
|
+
if (routeMatch.status !== "matched" || !routeMatch.feature?.sidebar) {
|
|
665
630
|
return /* @__PURE__ */ jsx(Fragment, { children });
|
|
666
631
|
}
|
|
667
|
-
const SidebarComponent =
|
|
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-
|
|
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-
|
|
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-
|
|
1
|
+
import { CredentialNameSchema, UuidSchema, useErrorNotification, showApiErrorNotification } from './chunk-V6Z2U6ZV.js';
|
|
2
2
|
import { getTimeRangeDates } from './chunk-LXHZYSMQ.js';
|
|
3
|
-
import { useNotificationAdapter } from './chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
7
|
-
import { useDeleteProject, useTableSort, sortData, usePaginationState, useTableSelection } from './chunk-
|
|
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"]
|