spine-framework 0.4.3 → 0.5.0-rc.4
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/.env.example +13 -3
- package/.framework/cli/commands/bootstrap.ts +392 -0
- package/.framework/cli/commands/dev.ts +91 -218
- package/.framework/cli/commands/doctor.ts +132 -26
- package/.framework/cli/commands/generate.ts +38 -298
- package/.framework/cli/commands/init.ts +20 -1
- package/.framework/cli/commands/migrate.ts +36 -30
- package/.framework/cli/commands/migrations.ts +16 -56
- package/.framework/cli/commands/upgrade.ts +35 -0
- package/.framework/cli/commands/validate-schema.ts +147 -0
- package/.framework/cli/context.ts +223 -110
- package/.framework/cli/index.ts +6 -0
- package/.framework/cli/lib/project-files.ts +241 -1
- package/.framework/functions/_shared/agent-runner.ts +1000 -81
- package/.framework/functions/_shared/cil.ts +2 -1
- package/.framework/functions/_shared/db.ts +3 -6
- package/.framework/functions/_shared/hash-api-key.ts +183 -79
- package/.framework/functions/_shared/kb.ts +61 -7
- package/.framework/functions/_shared/logging.ts +562 -224
- package/.framework/functions/_shared/message-sequence.ts +53 -0
- package/.framework/functions/_shared/middleware.ts +47 -44
- package/.framework/functions/_shared/pipeline-runner.ts +150 -37
- package/.framework/functions/_shared/principal.ts +9 -6
- package/.framework/functions/_shared/trigger-engine.ts +149 -40
- package/.framework/functions/admin-data.ts +48 -31
- package/.framework/functions/ai-agents.ts +103 -33
- package/.framework/functions/api-keys.ts +301 -122
- package/.framework/functions/apps.ts +43 -26
- package/.framework/functions/cil-ingest.ts +48 -15
- package/.framework/functions/debug-auth.ts +14 -8
- package/.framework/functions/deliveries.ts +39 -12
- package/.framework/functions/embeddings.ts +145 -76
- package/.framework/functions/integration-outbound.ts +67 -27
- package/.framework/functions/integrations.ts +254 -127
- package/.framework/functions/logs.ts +273 -133
- package/.framework/functions/observability.ts +277 -147
- package/.framework/functions/pipeline-executions.ts +1 -1
- package/.framework/functions/pipeline-runner-background.ts +120 -0
- package/.framework/functions/pipelines.ts +14 -9
- package/.framework/functions/prompt-configs.ts +7 -4
- package/.framework/functions/roles.ts +8 -5
- package/.framework/functions/security.ts +30 -17
- package/.framework/functions/system-cron.ts +250 -128
- package/.framework/functions/tests.ts +7 -6
- package/.framework/functions/timers.ts +310 -107
- package/.framework/functions/trigger-scheduler.ts +65 -5
- package/.framework/functions/triggers.ts +28 -13
- package/.framework/functions/types.ts +13 -10
- package/.framework/migrations/064_episode_leases.sql +196 -0
- package/.framework/migrations/065_execution_tables_updated_at.sql +20 -0
- package/.framework/migrations/066_episode_steal_thread_merge.sql +148 -0
- package/.framework/migrations/067_episode_lease_stale_steal.sql +93 -0
- package/.framework/migrations/068_cron_schedule_timer_rpcs.sql +251 -0
- package/.framework/migrations/069_log_stats_window.sql +54 -0
- package/.framework/migrations/070_app_type_schema_rpcs.sql +166 -0
- package/.framework/migrations/071_timer_interval_keys.sql +96 -0
- package/.framework/migrations/072_slug_autofill.sql +77 -0
- package/.framework/migrations/073_seed_member_roles.sql +26 -0
- package/.framework/schemas/spine.config.schema.json +62 -0
- package/.framework/src/App.tsx +3 -1
- package/.framework/src/apps/admin/index.tsx +1141 -775
- package/.framework/src/components/ErrorBoundary.tsx +136 -0
- package/.framework/src/components/admin/AdminListPage.tsx +81 -73
- package/.framework/src/components/admin/AdminSidebar.tsx +92 -81
- package/.framework/src/components/admin/EntitySelect.tsx +181 -0
- package/.framework/src/components/admin/PageInstructions.tsx +86 -127
- package/.framework/src/components/app-shell/GenericAppShell.tsx +3 -1
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +37 -13
- package/.framework/src/components/app-shell/GenericListPage.tsx +28 -32
- package/.framework/src/components/auth/TurnstileWidget.tsx +9 -6
- package/.framework/src/components/kb/KBArticleEditor.tsx +49 -6
- package/.framework/src/components/layout/Layout.tsx +4 -2
- package/.framework/src/components/layout/Sidebar.tsx +304 -179
- package/.framework/src/components/runtime/DataDetailPage.tsx +67 -35
- package/.framework/src/components/runtime/DataHeader.tsx +96 -48
- package/.framework/src/components/runtime/DataListPage.tsx +3 -26
- package/.framework/src/components/runtime/DataStats.tsx +10 -10
- package/.framework/src/components/runtime/DataTable.tsx +12 -10
- package/.framework/src/components/ui/sheet.tsx +24 -26
- package/.framework/src/components/ui/textarea.tsx +74 -48
- package/.framework/src/hooks/useBranding.ts +47 -0
- package/.framework/src/hooks/useEntityList.ts +12 -9
- package/.framework/src/hooks/useListSchema.ts +108 -58
- package/.framework/src/instructions/README.md +57 -0
- package/.framework/src/instructions/ai-agents.md +69 -0
- package/.framework/src/instructions/alerts.md +80 -0
- package/.framework/src/instructions/api-keys.md +87 -0
- package/.framework/src/instructions/apps.md +77 -0
- package/.framework/src/instructions/concepts/ai-and-prompts.md +150 -0
- package/.framework/src/instructions/concepts/apps-and-renderers.md +162 -0
- package/.framework/src/instructions/concepts/auth-and-api-keys.md +133 -0
- package/.framework/src/instructions/concepts/automation.md +186 -0
- package/.framework/src/instructions/concepts/concurrency-and-idempotency.md +125 -0
- package/.framework/src/instructions/concepts/core-vs-custom.md +124 -0
- package/.framework/src/instructions/concepts/design-schema.md +152 -0
- package/.framework/src/instructions/concepts/integrations-and-webhooks.md +127 -0
- package/.framework/src/instructions/concepts/observability.md +116 -0
- package/.framework/src/instructions/concepts/permissions.md +150 -0
- package/.framework/src/instructions/concepts/runtime-records.md +111 -0
- package/.framework/src/instructions/concepts/scope-and-accounts.md +112 -0
- package/.framework/src/instructions/concepts/spine-way.md +172 -0
- package/.framework/src/instructions/deliveries.md +59 -0
- package/.framework/src/instructions/guide/00-orientation.md +106 -0
- package/.framework/src/instructions/guide/01-install-and-first-run.md +253 -0
- package/.framework/src/instructions/guide/02-project-map.md +147 -0
- package/.framework/src/instructions/guide/03-domain-model.md +223 -0
- package/.framework/src/instructions/guide/04-first-app.md +227 -0
- package/.framework/src/instructions/guide/05-glossary.md +183 -0
- package/.framework/src/instructions/integrations.md +96 -0
- package/.framework/src/instructions/internal/cil-markers.md +83 -0
- package/.framework/src/instructions/invites.md +60 -0
- package/.framework/src/instructions/kb.md +80 -0
- package/.framework/src/instructions/logs.md +77 -0
- package/.framework/src/instructions/observability.md +61 -0
- package/.framework/src/instructions/operations/deployment.md +115 -0
- package/.framework/src/instructions/operations/migrations.md +125 -0
- package/.framework/src/instructions/operations/security-checklist.md +148 -0
- package/.framework/src/instructions/operations/troubleshooting.md +170 -0
- package/.framework/src/instructions/operations/upgrade.md +116 -0
- package/.framework/src/instructions/pipeline-executions.md +62 -0
- package/.framework/src/instructions/pipelines.md +78 -0
- package/.framework/src/instructions/prompts.md +95 -0
- package/.framework/src/instructions/reference/api/admin-data.md +162 -0
- package/.framework/src/instructions/reference/api/auth.md +113 -0
- package/.framework/src/instructions/reference/api/errors-and-envelopes.md +113 -0
- package/.framework/src/instructions/reference/app-manifest.md +150 -0
- package/.framework/src/instructions/reference/cli.md +124 -0
- package/.framework/src/instructions/reference/database.md +132 -0
- package/.framework/src/instructions/reference/design-schema.md +280 -0
- package/.framework/src/instructions/reference/env-vars.md +133 -0
- package/.framework/src/instructions/reference/functions/account-nodes.md +75 -0
- package/.framework/src/instructions/reference/functions/admin-data.md +195 -0
- package/.framework/src/instructions/reference/functions/admin-funnel.md +90 -0
- package/.framework/src/instructions/reference/functions/admin-install-funnel.md +107 -0
- package/.framework/src/instructions/reference/functions/admin-signals.md +102 -0
- package/.framework/src/instructions/reference/functions/ai-agents.md +148 -0
- package/.framework/src/instructions/reference/functions/ai-interactions.md +156 -0
- package/.framework/src/instructions/reference/functions/api-keys.md +130 -0
- package/.framework/src/instructions/reference/functions/apps.md +140 -0
- package/.framework/src/instructions/reference/functions/auth.md +99 -0
- package/.framework/src/instructions/reference/functions/debug-auth.md +91 -0
- package/.framework/src/instructions/reference/functions/deliveries.md +110 -0
- package/.framework/src/instructions/reference/functions/embeddings.md +166 -0
- package/.framework/src/instructions/reference/functions/eval-harness.md +149 -0
- package/.framework/src/instructions/reference/functions/index.md +103 -0
- package/.framework/src/instructions/reference/functions/integration-outbound.md +200 -0
- package/.framework/src/instructions/reference/functions/integration-routes.md +151 -0
- package/.framework/src/instructions/reference/functions/integrations.md +130 -0
- package/.framework/src/instructions/reference/functions/invites.md +182 -0
- package/.framework/src/instructions/reference/functions/item-progress.md +107 -0
- package/.framework/src/instructions/reference/functions/kb.md +166 -0
- package/.framework/src/instructions/reference/functions/logs.md +141 -0
- package/.framework/src/instructions/reference/functions/observability.md +105 -0
- package/.framework/src/instructions/reference/functions/pipeline-executions.md +132 -0
- package/.framework/src/instructions/reference/functions/pipeline-runner-background.md +121 -0
- package/.framework/src/instructions/reference/functions/pipelines.md +136 -0
- package/.framework/src/instructions/reference/functions/prompt-configs.md +121 -0
- package/.framework/src/instructions/reference/functions/roles.md +121 -0
- package/.framework/src/instructions/reference/functions/security.md +140 -0
- package/.framework/src/instructions/reference/functions/system-cron.md +136 -0
- package/.framework/src/instructions/reference/functions/system.md +106 -0
- package/.framework/src/instructions/reference/functions/tests.md +97 -0
- package/.framework/src/instructions/reference/functions/timers.md +117 -0
- package/.framework/src/instructions/reference/functions/trigger-scheduler.md +102 -0
- package/.framework/src/instructions/reference/functions/triggers.md +140 -0
- package/.framework/src/instructions/reference/functions/types.md +146 -0
- package/.framework/src/instructions/reference/seeds.md +126 -0
- package/.framework/src/instructions/reference/shared-modules.md +127 -0
- package/.framework/src/instructions/reference/spine-config.md +114 -0
- package/.framework/src/instructions/roles.md +80 -0
- package/.framework/src/instructions/runtime-detail.md +70 -0
- package/.framework/src/instructions/runtime-list.md +77 -0
- package/.framework/src/instructions/security.md +67 -0
- package/.framework/src/instructions/tasks/add-a-pipeline.md +110 -0
- package/.framework/src/instructions/tasks/add-a-role.md +96 -0
- package/.framework/src/instructions/tasks/add-a-timer.md +114 -0
- package/.framework/src/instructions/tasks/add-a-trigger.md +106 -0
- package/.framework/src/instructions/tasks/add-a-type.md +151 -0
- package/.framework/src/instructions/tasks/add-a-webhook.md +108 -0
- package/.framework/src/instructions/tasks/add-an-ai-agent.md +108 -0
- package/.framework/src/instructions/tasks/add-an-integration.md +124 -0
- package/.framework/src/instructions/tasks/build-a-custom-page.md +118 -0
- package/.framework/src/instructions/tasks/package-and-install-an-app.md +127 -0
- package/.framework/src/instructions/tasks/test-your-code.md +108 -0
- package/.framework/src/instructions/tasks/write-a-function.md +132 -0
- package/.framework/src/instructions/tasks/write-a-migration.md +110 -0
- package/.framework/src/instructions/testing.md +59 -0
- package/.framework/src/instructions/timers.md +82 -0
- package/.framework/src/instructions/triggers.md +69 -0
- package/.framework/src/instructions/types.md +93 -0
- package/.framework/src/lib/branding.ts +128 -0
- package/.framework/src/pages/NoAppPage.tsx +3 -1
- package/.framework/src/pages/NotFoundPage.tsx +62 -31
- package/.framework/src/pages/SetupPage.tsx +5 -2
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +117 -106
- package/.framework/src/pages/admin/AIAgentsPage.tsx +86 -48
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +153 -152
- package/.framework/src/pages/admin/APIKeysPage.tsx +91 -90
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +29 -18
- package/.framework/src/pages/admin/AppDetailPage.tsx +6 -60
- package/.framework/src/pages/admin/AppsPage.tsx +104 -66
- package/.framework/src/pages/admin/DeliveriesPage.tsx +5 -5
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +5 -23
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +5 -26
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +7 -7
- package/.framework/src/pages/admin/IntegrationsPage.tsx +85 -43
- package/.framework/src/pages/admin/LogsPage.tsx +144 -76
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +223 -140
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +134 -113
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +108 -45
- package/.framework/src/pages/admin/PipelinesPage.tsx +160 -115
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +96 -98
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +101 -59
- package/.framework/src/pages/admin/RoleDetailPage.tsx +90 -79
- package/.framework/src/pages/admin/RolesPage.tsx +86 -43
- package/.framework/src/pages/admin/SecurityPage.tsx +1 -1
- package/.framework/src/pages/admin/TestingDashboard.tsx +16 -28
- package/.framework/src/pages/admin/TimerDetailPage.tsx +117 -100
- package/.framework/src/pages/admin/TimersPage.tsx +90 -62
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +90 -83
- package/.framework/src/pages/admin/TriggersPage.tsx +124 -99
- package/.framework/src/pages/admin/TypeDetailPage.tsx +152 -138
- package/.framework/src/pages/admin/TypesPage.tsx +90 -48
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +17 -25
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +17 -27
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +72 -40
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +321 -129
- package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +18 -29
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +26 -38
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +34 -46
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +189 -103
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +246 -136
- package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +11 -22
- package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +9 -20
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +26 -38
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +7 -26
- package/.framework/src/pages/auth/AuthConfirmPage.tsx +3 -1
- package/.framework/src/pages/auth/ForgotPasswordPage.tsx +3 -1
- package/.framework/src/pages/auth/LoginPage.tsx +4 -2
- package/.framework/src/pages/auth/RegisterPage.tsx +3 -1
- package/.framework/templates/agent/AGENTS.md +150 -0
- package/.framework/templates/agent/skills/spine-add-ai-agent/SKILL.md +58 -0
- package/.framework/templates/agent/skills/spine-add-automation/SKILL.md +62 -0
- package/.framework/templates/agent/skills/spine-add-integration/SKILL.md +63 -0
- package/.framework/templates/agent/skills/spine-architect/SKILL.md +86 -0
- package/.framework/templates/agent/skills/spine-install-app/SKILL.md +72 -0
- package/.framework/templates/agent/skills/spine-migration/SKILL.md +75 -0
- package/.framework/templates/agent/skills/spine-new-app/SKILL.md +67 -0
- package/.framework/templates/agent/skills/spine-new-function/SKILL.md +65 -0
- package/.framework/templates/agent/skills/spine-new-type/SKILL.md +65 -0
- package/.framework/templates/agent/skills/spine-schema/SKILL.md +77 -0
- package/.framework/templates/agent/skills/spine-test/SKILL.md +67 -0
- package/.framework/templates/agent/skills/spine-troubleshoot/SKILL.md +74 -0
- package/.framework/templates/agent/skills/spine-upgrade/SKILL.md +69 -0
- package/.framework/templates/project.json +5 -1
- package/.framework/tests/unit/account-scoping-gates.test.ts +392 -0
- package/.framework/tests/unit/agent-files.test.ts +355 -0
- package/.framework/tests/unit/agent-runner.test.ts +496 -47
- package/.framework/tests/unit/api-keys-create-scope-gate.test.ts +160 -0
- package/.framework/tests/unit/api-keys-omit-secret-fields.test.ts +38 -0
- package/.framework/tests/unit/bootstrap.test.ts +242 -0
- package/.framework/tests/unit/cli-context-api-key.test.ts +114 -0
- package/.framework/tests/unit/debug-auth.test.ts +38 -0
- package/.framework/tests/unit/deliveries-account-scoping.test.ts +185 -0
- package/.framework/tests/unit/episode-lease.test.ts +695 -0
- package/.framework/tests/unit/integration-outbound-credentials.test.ts +167 -0
- package/.framework/tests/unit/integrations-audit-redaction.test.ts +130 -0
- package/.framework/tests/unit/kb-ingest-lease.test.ts +19 -0
- package/.framework/tests/unit/logging-app-id.test.ts +75 -0
- package/.framework/tests/unit/pipeline-runner-background.test.ts +120 -0
- package/.framework/tests/unit/pipeline-runner.test.ts +153 -1
- package/.framework/tests/unit/principal-cache.test.ts +15 -0
- package/.framework/tests/unit/system-context-denial.test.ts +145 -0
- package/.framework/tests/unit/system-cron.test.ts +240 -0
- package/.framework/tests/unit/timers.test.ts +159 -0
- package/.framework/tests/unit/trigger-engine.test.ts +278 -91
- package/.framework/tests/unit/trigger-scheduler.test.ts +78 -0
- package/README.md +125 -166
- package/config/tsconfig.cli.json +2 -2
- package/netlify.toml +5 -0
- package/package.json +15 -4
- package/templates/project/package-lock.json +2 -2
- package/.framework/docs/admin-routes.md +0 -76
- package/.framework/docs/api-docs-progress.md +0 -38
- package/.framework/docs/api-governance.md +0 -146
- package/.framework/docs/api-testing-results.md +0 -212
- package/.framework/docs/assembly-launch-guide.md +0 -138
- package/.framework/docs/audit-results.md +0 -590
- package/.framework/docs/db-api-inventory.md +0 -95
- package/.framework/docs/gap-remediation-backlog.md +0 -103
- package/.framework/docs/ui-adoption-verification.md +0 -111
- package/.framework/docs/ui-api-coverage.md +0 -84
- package/.framework/docs/v2-compatibility-audit.md +0 -228
- package/.framework/mcp/index.ts +0 -133
- package/.framework/mcp/load-env.ts +0 -60
- package/.framework/mcp/shared/app-manifest.ts +0 -275
- package/.framework/mcp/shared/db.ts +0 -477
- package/.framework/mcp/shared/kb.ts +0 -118
- package/.framework/mcp/tools/architect.ts +0 -431
- package/.framework/mcp/tools/cil/context.ts +0 -345
- package/.framework/mcp/tools/cil/graph.ts +0 -242
- package/.framework/mcp/tools/cil/ingest.ts +0 -1217
- package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +0 -693
- package/.framework/mcp/tools/cil/pipeline.ts +0 -767
- package/.framework/mcp/tools/cil/project.ts +0 -791
- package/.framework/mcp/tools/cil/retrieval.ts +0 -336
- package/.framework/mcp/tools/cil/search-core.ts +0 -454
- package/.framework/mcp/tools/cil/search.ts +0 -97
- package/.framework/mcp/tools/cil/suggest.ts +0 -186
- package/.framework/mcp/tools/cil/validate.ts +0 -1369
- package/.framework/mcp/tools/kb/delete.ts +0 -139
- package/.framework/mcp/tools/kb/index.ts +0 -52
- package/.framework/mcp/tools/kb/ingest.ts +0 -84
- package/.framework/mcp/tools/kb/list-types.ts +0 -102
- package/.framework/mcp/tools/kb/publish.ts +0 -100
- package/.framework/mcp/tools/kb/reindex.ts +0 -86
- package/.framework/mcp/tools/kb/revoke.ts +0 -85
- package/.framework/mcp/tools/kb/search.ts +0 -101
- package/.framework/mcp/tools/kb/upsert.ts +0 -125
- package/.framework/mcp/tools/observability.ts +0 -510
|
@@ -1,12 +1,28 @@
|
|
|
1
|
-
// CIL[BEGIN stable_id="~/.framework/src/components/layout/Sidebar.tsx:module_header:module_header" type="module_header" identity="module_header" parent="
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/layout/Sidebar.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/components/layout/Sidebar.tsx"]
|
|
2
|
+
/**
|
|
3
|
+
* @module Sidebar
|
|
4
|
+
* @audience both
|
|
5
|
+
* @layer shared-core
|
|
6
|
+
* @stability stable
|
|
7
|
+
*
|
|
8
|
+
* The Sidebar component provides a navigational interface for users, allowing them to access various sections of the application. It integrates with authentication and branding contexts to dynamically render links based on user permissions and branding settings.
|
|
9
|
+
* INVARIANT: The user must be authenticated to access certain links.
|
|
10
|
+
*
|
|
11
|
+
* @seeAlso AuthContext.tsx (provides authentication context for user access control).
|
|
12
|
+
* @seeAlso useBranding.ts (handles branding logic for the application).
|
|
13
|
+
* @seeAlso Popover.tsx (used for displaying additional options in the sidebar).
|
|
14
|
+
*
|
|
15
|
+
* @cil-generated
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
10
26
|
|
|
11
27
|
|
|
12
28
|
|
|
@@ -18,8 +34,10 @@
|
|
|
18
34
|
import { useState } from 'react'
|
|
19
35
|
import { Link, useLocation } from 'react-router-dom'
|
|
20
36
|
import { useAuth } from '../../contexts/AuthContext'
|
|
37
|
+
import { useBranding } from '../../hooks/useBranding'
|
|
21
38
|
import { Popover, PopoverTrigger, PopoverContent } from '../ui/popover'
|
|
22
39
|
import {
|
|
40
|
+
// CIL[END stable_id="~/.framework/src/components/layout/Sidebar.tsx:module_header:module_header"]
|
|
23
41
|
Home,
|
|
24
42
|
Box,
|
|
25
43
|
Users,
|
|
@@ -46,66 +64,92 @@ import {
|
|
|
46
64
|
Cpu,
|
|
47
65
|
BookOpen
|
|
48
66
|
} from 'lucide-react'
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/layout/Sidebar.tsx:SidebarProps:interface" type="interface" identity="SidebarProps" parent="~/.framework/src/components/layout/Sidebar.tsx"]
|
|
83
|
+
/**
|
|
84
|
+
* SidebarProps defines the properties required for the Sidebar component, managing its open state and close action. This interface ensures that the Sidebar can be controlled effectively by its parent component.
|
|
85
|
+
*
|
|
86
|
+
* @sideEffects none
|
|
87
|
+
* @stability internal
|
|
88
|
+
* @cil-generated
|
|
89
|
+
*/
|
|
64
90
|
interface SidebarProps {
|
|
65
91
|
open: boolean
|
|
66
92
|
onClose: () => void
|
|
67
93
|
}
|
|
68
|
-
// CIL[
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
94
|
+
// CIL[END stable_id="~/.framework/src/components/layout/Sidebar.tsx:SidebarProps:interface"]
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/layout/Sidebar.tsx:navigation:constant" type="constant" identity="navigation" parent="~/.framework/src/components/layout/Sidebar.tsx"]
|
|
114
|
+
/**
|
|
115
|
+
* The 'navigation' constant defines the structure of the sidebar navigation items for the application. It provides a consistent way to manage and render navigation links within the sidebar component.
|
|
116
|
+
*
|
|
117
|
+
* @sideEffects none
|
|
118
|
+
* @stability internal
|
|
119
|
+
* @cil-generated
|
|
120
|
+
*/
|
|
86
121
|
const navigation = [
|
|
87
122
|
{ name: 'Dashboard', href: '/spine-framework/admin/configs/types', icon: Home },
|
|
88
123
|
]
|
|
89
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Primary navigation links for the sidebar'; No verified external callers; imports: .framework/src/contexts/AuthContext.tsx,.framework/src/components/ui/popover.tsx"]
|
|
90
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
91
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
92
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
93
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
94
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
95
124
|
// CIL[END stable_id="~/.framework/src/components/layout/Sidebar.tsx:navigation:constant"]
|
|
96
125
|
|
|
97
126
|
|
|
98
127
|
|
|
99
128
|
|
|
100
129
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/layout/Sidebar.tsx:configsNavigation:constant" type="constant" identity="configsNavigation" parent="~/.framework/src/components/layout/Sidebar.tsx"]
|
|
146
|
+
/**
|
|
147
|
+
* The 'configsNavigation' constant defines a structured navigation menu for the admin configuration section of the application. It organizes various configuration items into a list, including dividers for better visual separation.
|
|
148
|
+
*
|
|
149
|
+
* @sideEffects none
|
|
150
|
+
* @stability internal
|
|
151
|
+
* @cil-generated
|
|
152
|
+
*/
|
|
109
153
|
const configsNavigation = [
|
|
110
154
|
{ name: 'Item Types', href: '/spine-framework/admin/configs/types', icon: Box },
|
|
111
155
|
{ divider: true },
|
|
@@ -123,135 +167,193 @@ const configsNavigation = [
|
|
|
123
167
|
{ name: 'API Keys', href: '/spine-framework/admin/configs/api-keys', icon: Key },
|
|
124
168
|
{ name: 'Deliveries', href: '/spine-framework/admin/configs/deliveries', icon: Truck },
|
|
125
169
|
] as const
|
|
126
|
-
// CIL[
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
170
|
+
// CIL[END stable_id="~/.framework/src/components/layout/Sidebar.tsx:configsNavigation:constant"]
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
|
|
133
179
|
|
|
134
180
|
|
|
135
181
|
|
|
136
182
|
|
|
137
183
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
// CIL[
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/layout/Sidebar.tsx:observabilityNavigation:constant" type="constant" identity="observabilityNavigation" parent="~/.framework/src/components/layout/Sidebar.tsx"]
|
|
192
|
+
/**
|
|
193
|
+
* The 'observabilityNavigation' constant defines a structured array of navigation items for the observability section of the application. It provides links to various observability features such as Dashboard, Alerts, Executions, and Logs.
|
|
194
|
+
*
|
|
195
|
+
* @sideEffects none
|
|
196
|
+
* @stability internal
|
|
197
|
+
* @cil-generated
|
|
198
|
+
*/
|
|
146
199
|
const observabilityNavigation = [
|
|
147
200
|
{ name: 'Dashboard', href: '/spine-framework/admin/observability', icon: BarChart3 },
|
|
148
201
|
{ name: 'Alerts', href: '/spine-framework/admin/observability/alerts', icon: Bell },
|
|
149
202
|
{ name: 'Executions', href: '/spine-framework/admin/observability/executions', icon: FlaskConical },
|
|
150
203
|
{ name: 'Logs', href: '/spine-framework/admin/observability/logs', icon: FileText },
|
|
151
204
|
]
|
|
152
|
-
// CIL[
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
205
|
+
// CIL[END stable_id="~/.framework/src/components/layout/Sidebar.tsx:observabilityNavigation:constant"]
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
|
|
159
221
|
|
|
160
222
|
|
|
161
223
|
|
|
162
224
|
|
|
163
225
|
|
|
164
|
-
// CIL[BEGIN stable_id="~/.framework/src/components/layout/Sidebar.tsx:
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
226
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/layout/Sidebar.tsx:runtimeEntities:constant" type="constant" identity="runtimeEntities" parent="~/.framework/src/components/layout/Sidebar.tsx"]
|
|
227
|
+
/**
|
|
228
|
+
* The constant 'runtimeEntities' defines a list of navigational items for the sidebar in the application. Each item includes a name, a link, and an associated icon for user interface representation.
|
|
229
|
+
*
|
|
230
|
+
* @sideEffects none
|
|
231
|
+
* @stability internal
|
|
232
|
+
* @cil-generated
|
|
233
|
+
*/
|
|
172
234
|
const runtimeEntities = [
|
|
173
235
|
{ name: 'Items', href: '/spine-framework/admin/runtime/items', icon: Box },
|
|
174
236
|
{ name: 'Accounts', href: '/spine-framework/admin/runtime/accounts', icon: Building2 },
|
|
175
237
|
{ name: 'People', href: '/spine-framework/admin/runtime/people', icon: User },
|
|
176
|
-
{ name: 'Person Types', href: '/spine-framework/admin/runtime/person-types', icon: Users },
|
|
177
238
|
]
|
|
178
|
-
// CIL[
|
|
179
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
180
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
181
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
182
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
183
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
184
|
-
// CIL[END stable_id="~/.framework/src/components/layout/Sidebar.tsx:runtimeentities:constant"]
|
|
239
|
+
// CIL[END stable_id="~/.framework/src/components/layout/Sidebar.tsx:runtimeEntities:constant"]
|
|
185
240
|
|
|
186
241
|
|
|
187
242
|
|
|
188
243
|
|
|
189
244
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/layout/Sidebar.tsx:kbEngineNavigation:constant" type="constant" identity="kbEngineNavigation" parent="~/.framework/src/components/layout/Sidebar.tsx"]
|
|
261
|
+
/**
|
|
262
|
+
* The constant 'kbEngineNavigation' defines a navigation structure for the Knowledge Base section of the application. It provides links to key resources within the admin interface.
|
|
263
|
+
*
|
|
264
|
+
* @sideEffects none
|
|
265
|
+
* @stability internal
|
|
266
|
+
* @cil-generated
|
|
267
|
+
*/
|
|
198
268
|
const kbEngineNavigation = [
|
|
199
269
|
{ name: 'Knowledge Base', href: '/spine-framework/admin/kb/kb-spine-public', icon: BookOpen },
|
|
200
270
|
{ name: 'Embeddings', href: '/spine-framework/admin/kb/embeddings', icon: Cpu },
|
|
201
271
|
]
|
|
202
|
-
// CIL[
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
272
|
+
// CIL[END stable_id="~/.framework/src/components/layout/Sidebar.tsx:kbEngineNavigation:constant"]
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/layout/Sidebar.tsx:classNames:function" type="function" identity="classNames" parent="~/.framework/src/components/layout/Sidebar.tsx"]
|
|
292
|
+
/**
|
|
293
|
+
* The classNames function constructs a single string from an array of class names, filtering out any falsy values. This utility is useful for dynamically generating class attribute values in JSX components.
|
|
294
|
+
*
|
|
295
|
+
* @macro Utility function for generating a concatenated class name string.
|
|
296
|
+
* @micro Filters out falsy values from the input array before joining the remaining class names.
|
|
297
|
+
* @inputSpec
|
|
298
|
+
* - classes: (string | false | undefined)[] (required) — an array of class names that may include falsy values.
|
|
299
|
+
* @outputSpec string — a single string of class names separated by spaces.
|
|
300
|
+
* @sideEffects none
|
|
301
|
+
* @stability internal
|
|
302
|
+
* @cil-generated
|
|
303
|
+
*/
|
|
220
304
|
function classNames(...classes: (string | false | undefined)[]) {
|
|
221
305
|
return classes.filter(Boolean).join(' ')
|
|
222
306
|
}
|
|
307
|
+
// CIL[END stable_id="~/.framework/src/components/layout/Sidebar.tsx:classNames:function"]
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
|
|
223
320
|
|
|
224
321
|
|
|
225
322
|
|
|
226
323
|
|
|
227
324
|
|
|
228
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Conditionally combine CSS class strings'; No verified external callers; imports: .framework/src/contexts/AuthContext.tsx,.framework/src/components/ui/popover.tsx"]
|
|
229
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
230
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
231
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
232
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
233
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
234
|
-
// CIL[END stable_id="~/.framework/src/components/layout/Sidebar.tsx:classnames:function"]
|
|
235
325
|
|
|
236
326
|
|
|
237
327
|
|
|
238
328
|
|
|
239
329
|
|
|
240
330
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
// CIL[
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/layout/Sidebar.tsx:Sidebar:component" type="component" identity="Sidebar" parent="~/.framework/src/components/layout/Sidebar.tsx"]
|
|
337
|
+
/**
|
|
338
|
+
* The Sidebar component renders a collapsible sidebar interface that displays branding and navigation options. It provides users with a navigational aid that can be opened and closed as needed.
|
|
339
|
+
*
|
|
340
|
+
* @macro UI component responsible for displaying a sidebar with branding and navigation.
|
|
341
|
+
* @micro Utilizes conditional rendering to display the sidebar based on the 'open' state.
|
|
342
|
+
* @inputSpec
|
|
343
|
+
* - open: boolean (required) — determines if the sidebar is visible.
|
|
344
|
+
* - onClose: function (required) — callback function to close the sidebar.
|
|
345
|
+
* @outputSpec JSX.Element — renders the sidebar UI structure.
|
|
346
|
+
* @sideEffects none
|
|
347
|
+
* @stability internal
|
|
348
|
+
* @calls useBranding, SidebarContent
|
|
349
|
+
* @cil-generated
|
|
350
|
+
*/
|
|
251
351
|
export function Sidebar({ open, onClose }: SidebarProps) {
|
|
352
|
+
const branding = useBranding()
|
|
252
353
|
return (
|
|
253
354
|
<>
|
|
254
355
|
<div className={classNames(open && 'fixed inset-0 z-40 flex')}>
|
|
356
|
+
// CIL[END stable_id="~/.framework/src/components/layout/Sidebar.tsx:Sidebar:component"]
|
|
255
357
|
{open && (
|
|
256
358
|
<div className="fixed inset-0 z-40 flex">
|
|
257
359
|
<div
|
|
@@ -271,8 +373,8 @@ export function Sidebar({ open, onClose }: SidebarProps) {
|
|
|
271
373
|
</div>
|
|
272
374
|
<div className="h-0 flex-1 overflow-y-auto pt-5">
|
|
273
375
|
<div className="flex flex-shrink-0 items-center gap-2 px-4">
|
|
274
|
-
<img src=
|
|
275
|
-
<span className="text-xl font-bold text-sidebar-foreground whitespace-nowrap">
|
|
376
|
+
<img src={branding.logo_url} alt={branding.app_name} className="h-8 w-auto" />
|
|
377
|
+
<span className="text-xl font-bold text-sidebar-foreground whitespace-nowrap">{branding.title}</span>
|
|
276
378
|
</div>
|
|
277
379
|
<SidebarContent onNavClick={onClose} />
|
|
278
380
|
</div>
|
|
@@ -283,42 +385,65 @@ export function Sidebar({ open, onClose }: SidebarProps) {
|
|
|
283
385
|
</>
|
|
284
386
|
)
|
|
285
387
|
}
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
|
|
393
|
+
|
|
394
|
+
|
|
395
|
+
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/layout/Sidebar.tsx:SidebarContentProps:interface" type="interface" identity="SidebarContentProps" parent="~/.framework/src/components/layout/Sidebar.tsx"]
|
|
405
|
+
/**
|
|
406
|
+
* SidebarContentProps defines the properties for the sidebar content component, specifically handling navigation click events. It allows for optional navigation click functionality to be passed in as a prop.
|
|
407
|
+
*
|
|
408
|
+
* @sideEffects none
|
|
409
|
+
* @stability internal
|
|
410
|
+
* @cil-generated
|
|
411
|
+
*/
|
|
302
412
|
interface SidebarContentProps {
|
|
303
413
|
onNavClick?: () => void
|
|
304
414
|
}
|
|
305
|
-
// CIL[
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
415
|
+
// CIL[END stable_id="~/.framework/src/components/layout/Sidebar.tsx:SidebarContentProps:interface"]
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
|
|
425
|
+
|
|
426
|
+
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
|
|
433
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/layout/Sidebar.tsx:SidebarContent:component" type="component" identity="SidebarContent" parent="~/.framework/src/components/layout/Sidebar.tsx"]
|
|
434
|
+
/**
|
|
435
|
+
* SidebarContent renders a navigation sidebar that allows users to navigate through different sections of the application and conditionally displays additional configuration options for system administrators.
|
|
436
|
+
*
|
|
437
|
+
* @macro Navigation component for application sidebar with conditional rendering for admin options.
|
|
438
|
+
* @micro Utilizes React state to manage the open/closed status of various sections based on the current URL path.
|
|
439
|
+
* @inputSpec
|
|
440
|
+
* - onNavClick: function (required) — callback function triggered on navigation item click.
|
|
441
|
+
* @outputSpec JSX.Element — renders the sidebar navigation structure.
|
|
442
|
+
* @sideEffects none
|
|
443
|
+
* @stability internal
|
|
444
|
+
* @calls useLocation, useAuth, classNames, Link
|
|
445
|
+
* @cil-generated
|
|
446
|
+
*/
|
|
322
447
|
export function SidebarContent({ onNavClick }: SidebarContentProps) {
|
|
323
448
|
const location = useLocation()
|
|
324
449
|
const { user, logout } = useAuth()
|
|
@@ -366,6 +491,7 @@ export function SidebarContent({ onNavClick }: SidebarContentProps) {
|
|
|
366
491
|
{item.name}
|
|
367
492
|
</Link>
|
|
368
493
|
))}
|
|
494
|
+
// CIL[END stable_id="~/.framework/src/components/layout/Sidebar.tsx:SidebarContent:component"]
|
|
369
495
|
</div>
|
|
370
496
|
|
|
371
497
|
{isSystemAdmin && (
|
|
@@ -571,10 +697,9 @@ export function SidebarContent({ onNavClick }: SidebarContentProps) {
|
|
|
571
697
|
</nav>
|
|
572
698
|
)
|
|
573
699
|
}
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
// CIL[END stable_id="~/.framework/src/components/layout/Sidebar.tsx:sidebarcontent:function"]
|
|
700
|
+
|
|
701
|
+
|
|
702
|
+
|
|
703
|
+
|
|
704
|
+
|
|
705
|
+
|