spine-framework 0.4.4 → 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/hash-api-key.ts +183 -79
- package/.framework/functions/_shared/logging.ts +562 -224
- package/.framework/functions/_shared/middleware.ts +47 -44
- package/.framework/functions/admin-data.ts +39 -28
- package/.framework/functions/ai-agents.ts +10 -6
- 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/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 +240 -127
- package/.framework/functions/tests.ts +7 -6
- package/.framework/functions/timers.ts +310 -107
- package/.framework/functions/triggers.ts +28 -13
- package/.framework/functions/types.ts +13 -10
- 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/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 +88 -79
- package/.framework/src/components/admin/EntitySelect.tsx +181 -0
- package/.framework/src/components/admin/PageInstructions.tsx +86 -127
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +37 -13
- package/.framework/src/components/app-shell/GenericListPage.tsx +28 -32
- package/.framework/src/components/layout/Sidebar.tsx +300 -177
- 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/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/pages/NotFoundPage.tsx +62 -31
- 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/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 +4 -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 +479 -44
- 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/integration-outbound-credentials.test.ts +167 -0
- package/.framework/tests/unit/integrations-audit-redaction.test.ts +130 -0
- package/.framework/tests/unit/logging-app-id.test.ts +75 -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/README.md +125 -166
- package/config/tsconfig.cli.json +2 -2
- 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
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/ErrorBoundary.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/components/ErrorBoundary.tsx"]
|
|
2
|
+
/**
|
|
3
|
+
* @module ErrorBoundary
|
|
4
|
+
* @audience internal
|
|
5
|
+
* @layer app-specific
|
|
6
|
+
* @stability stable
|
|
7
|
+
*
|
|
8
|
+
* This module provides an Error Boundary component that captures JavaScript errors in its child component tree, logs those errors, and displays a fallback UI. It plays a crucial role in enhancing the user experience by preventing the entire application from crashing due to errors in specific components.
|
|
9
|
+
* INVARIANT: The Error Boundary must wrap components that may throw errors to function correctly.
|
|
10
|
+
*
|
|
11
|
+
* @seeAlso ui/button (provides the button UI used in the fallback UI.)
|
|
12
|
+
* @seeAlso ReactNode (used for rendering child components.)
|
|
13
|
+
*
|
|
14
|
+
* @cil-generated
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { Component, ErrorInfo, ReactNode } from 'react'
|
|
18
|
+
import { Button } from './ui/button'
|
|
19
|
+
// CIL[END stable_id="~/.framework/src/components/ErrorBoundary.tsx:module_header:module_header"]
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/ErrorBoundary.tsx:ErrorBoundaryProps:interface" type="interface" identity="ErrorBoundaryProps" parent="~/.framework/src/components/ErrorBoundary.tsx"]
|
|
31
|
+
/**
|
|
32
|
+
* ErrorBoundaryProps defines the properties for the ErrorBoundary component, which is used to handle errors in React component trees. It ensures that child components can be rendered safely even when an error occurs.
|
|
33
|
+
*
|
|
34
|
+
* @sideEffects none
|
|
35
|
+
* @stability stable
|
|
36
|
+
* @cil-generated
|
|
37
|
+
*/
|
|
38
|
+
interface ErrorBoundaryProps {
|
|
39
|
+
children: ReactNode
|
|
40
|
+
}
|
|
41
|
+
// CIL[END stable_id="~/.framework/src/components/ErrorBoundary.tsx:ErrorBoundaryProps:interface"]
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/ErrorBoundary.tsx:ErrorBoundaryState:interface" type="interface" identity="ErrorBoundaryState" parent="~/.framework/src/components/ErrorBoundary.tsx"]
|
|
54
|
+
/**
|
|
55
|
+
* The ErrorBoundaryState interface defines the structure of the state used in an error boundary component to manage errors that occur during rendering. This facilitates organized error handling in React components.
|
|
56
|
+
*
|
|
57
|
+
* @sideEffects none
|
|
58
|
+
* @stability stable
|
|
59
|
+
* @cil-generated
|
|
60
|
+
*/
|
|
61
|
+
interface ErrorBoundaryState {
|
|
62
|
+
error: Error | null
|
|
63
|
+
}
|
|
64
|
+
// CIL[END stable_id="~/.framework/src/components/ErrorBoundary.tsx:ErrorBoundaryState:interface"]
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/ErrorBoundary.tsx:ErrorBoundary:class" type="class" identity="ErrorBoundary" parent="~/.framework/src/components/ErrorBoundary.tsx"]
|
|
78
|
+
/**
|
|
79
|
+
* The ErrorBoundary class catches JavaScript errors in its child component tree, logs those errors, and displays a fallback UI to enhance user experience. This prevents the entire application from crashing due to UI errors.
|
|
80
|
+
*
|
|
81
|
+
* @macro Error handling component that provides a fallback UI for its children upon encountering errors.
|
|
82
|
+
* @micro Utilizes React's error boundary lifecycle methods to manage error state and render fallback content.
|
|
83
|
+
* @inputSpec
|
|
84
|
+
* props: ErrorBoundaryProps (required) — properties passed to the component.
|
|
85
|
+
* @outputSpec JSX.Element — renders either the children or an error fallback UI.
|
|
86
|
+
* @sideEffects logs errors to the console
|
|
87
|
+
* @stability stable
|
|
88
|
+
* @calls console.error
|
|
89
|
+
* @errorHandling none
|
|
90
|
+
* @cil-generated
|
|
91
|
+
*/
|
|
92
|
+
export class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
|
|
93
|
+
constructor(props: ErrorBoundaryProps) {
|
|
94
|
+
super(props)
|
|
95
|
+
this.state = { error: null }
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
static getDerivedStateFromError(error: Error): ErrorBoundaryState {
|
|
99
|
+
return { error }
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
componentDidCatch(error: Error, info: ErrorInfo) {
|
|
103
|
+
console.error('ErrorBoundary caught an error:', error, info.componentStack)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
render() {
|
|
107
|
+
if (!this.state.error) {
|
|
108
|
+
return this.props.children
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return (
|
|
112
|
+
<div className="min-h-[400px] flex items-center justify-center p-8">
|
|
113
|
+
<div className="text-center max-w-lg">
|
|
114
|
+
<h1 className="text-xl font-semibold text-foreground mb-2">Something went wrong</h1>
|
|
115
|
+
<p className="text-sm text-muted-foreground mb-4">
|
|
116
|
+
This page hit an unexpected error. The rest of the app is unaffected.
|
|
117
|
+
</p>
|
|
118
|
+
<pre className="bg-muted rounded-lg p-4 text-left text-xs text-destructive overflow-auto mb-4 max-h-40">
|
|
119
|
+
{this.state.error.message}
|
|
120
|
+
</pre>
|
|
121
|
+
<div className="flex gap-2 justify-center">
|
|
122
|
+
<Button variant="outline" onClick={() => this.setState({ error: null })}>
|
|
123
|
+
Try again
|
|
124
|
+
</Button>
|
|
125
|
+
<Button variant="outline" onClick={() => { window.location.href = '/spine-framework/admin/configs/types' }}>
|
|
126
|
+
Back to admin home
|
|
127
|
+
</Button>
|
|
128
|
+
</div>
|
|
129
|
+
</div>
|
|
130
|
+
</div>
|
|
131
|
+
)
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// CIL[END stable_id="~/.framework/src/components/ErrorBoundary.tsx:ErrorBoundary:class"]
|
|
135
|
+
|
|
136
|
+
|
|
@@ -1,14 +1,29 @@
|
|
|
1
|
-
// CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminListPage.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/admin/AdminListPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/components/admin/AdminListPage.tsx"]
|
|
2
|
+
/**
|
|
3
|
+
* @module AdminListPage
|
|
4
|
+
* @audience internal
|
|
5
|
+
* @layer app-specific
|
|
6
|
+
* @stability stable
|
|
7
|
+
*
|
|
8
|
+
* The AdminListPage module is responsible for rendering the admin interface that displays a list of administrative items and provides functionalities for searching and filtering. It serves as a key component in the admin dashboard, allowing users to navigate through various admin-related tasks. INVARIANT: The user must have admin privileges to access this page.
|
|
9
|
+
*
|
|
10
|
+
* @seeAlso AdminStatsCard (provides statistics relevant to the admin interface).
|
|
11
|
+
* @seeAlso PageInstructions (offers guidance on using the admin features).
|
|
12
|
+
*
|
|
13
|
+
* @cil-generated
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
10
24
|
|
|
11
25
|
import React, { ReactNode } from 'react'
|
|
26
|
+
import { useNavigate } from 'react-router-dom'
|
|
12
27
|
import { Button } from '../ui/button'
|
|
13
28
|
import { Card, CardContent } from '../ui/card'
|
|
14
29
|
import { Input } from '../ui/input'
|
|
@@ -17,28 +32,37 @@ import { Skeleton } from '../ui/skeleton'
|
|
|
17
32
|
import { Search } from 'lucide-react'
|
|
18
33
|
import { LucideIcon } from 'lucide-react'
|
|
19
34
|
import { AdminStatsCard } from './AdminStatsCard'
|
|
20
|
-
|
|
35
|
+
|
|
21
36
|
import { cn } from '../../lib/utils'
|
|
22
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Admin list page component module imports and entry point.'; No verified external callers; imports: .framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx"]
|
|
23
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
24
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
25
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
26
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
27
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
28
37
|
// CIL[END stable_id="~/.framework/src/components/admin/AdminListPage.tsx:module_header:module_header"]
|
|
29
|
-
// CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminListPage.tsx:adminlistpageprops:interface" type="interface" identity="AdminListPageProps" parent="adminlistpage:function"]
|
|
30
|
-
// CIL[DOC-MACRO purpose="Props contract for the AdminListPage component."]
|
|
31
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Define the typed input surface for AdminListPage."]
|
|
32
|
-
// CIL[DOC-CONTEXT module="AdminListPage" layer="components/admin" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/AdminStatsCard.tsx,.framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/utils.ts"]
|
|
33
|
-
// CIL[DOC-CONTRACT inputs="property bag: title, description, statsCards, children, optional search/filter/loading/error/new-button fields" outputs="typed props interface" errors="none" side_effects="none"]
|
|
34
|
-
// CIL[DOC-MICRO logic_summary="Describes the complete prop surface for the admin list page, including stats, search, filters, loading, error, and children." notable_decisions="[]"]
|
|
35
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
36
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
37
38
|
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminListPage.tsx:AdminListPageProps:interface" type="interface" identity="AdminListPageProps" parent="~/.framework/src/components/admin/AdminListPage.tsx"]
|
|
56
|
+
/**
|
|
57
|
+
* AdminListPageProps defines the properties required for rendering the Admin List Page component, facilitating the configuration of various UI elements and behaviors within the admin interface.
|
|
58
|
+
*
|
|
59
|
+
* @sideEffects none
|
|
60
|
+
* @stability stable
|
|
61
|
+
* @cil-generated
|
|
62
|
+
*/
|
|
38
63
|
interface AdminListPageProps {
|
|
39
64
|
title: string
|
|
40
65
|
description: string
|
|
41
|
-
noPageInstructions?: boolean
|
|
42
66
|
newButtonText?: string
|
|
43
67
|
newButtonHref?: string
|
|
44
68
|
onNewClick?: () => void
|
|
@@ -64,28 +88,31 @@ interface AdminListPageProps {
|
|
|
64
88
|
emptyMessage?: string
|
|
65
89
|
emptyIcon?: LucideIcon
|
|
66
90
|
}
|
|
67
|
-
// CIL[
|
|
68
|
-
|
|
69
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
70
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
71
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
72
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
73
|
-
// CIL[END stable_id="~/.framework/src/components/admin/AdminListPage.tsx:adminlistpageprops:interface"]
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
// CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminListPage.tsx:adminlistpage:function" type="function" identity="AdminListPage" parent=""]
|
|
77
|
-
// CIL[DOC-MACRO purpose="Render a reusable admin list page with header, instructions, stats, search, filters, and content."]
|
|
78
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Compose and render the admin list page layout and its interactive controls."]
|
|
79
|
-
// CIL[DOC-CONTEXT module="AdminListPage" layer="components/admin" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/AdminStatsCard.tsx,.framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/utils.ts"]
|
|
80
|
-
// CIL[DOC-CONTRACT inputs="AdminListPageProps" outputs="JSX.Element" errors="Error state rendered inside card" side_effects="Sets window.location.href when new button is clicked and no onNewClick handler provided"]
|
|
81
|
-
// CIL[DOC-MICRO logic_summary="Builds a vertical page layout with title/actions, optional instructional help, stats cards, search/filter bar, and a content card that shows skeleton, error, or children." notable_decisions="[]"]
|
|
82
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
83
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
91
|
+
// CIL[END stable_id="~/.framework/src/components/admin/AdminListPage.tsx:AdminListPageProps:interface"]
|
|
92
|
+
|
|
84
93
|
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminListPage.tsx:AdminListPage:component" type="component" identity="AdminListPage" parent="~/.framework/src/components/admin/AdminListPage.tsx"]
|
|
85
113
|
export function AdminListPage({
|
|
86
114
|
title,
|
|
87
115
|
description,
|
|
88
|
-
noPageInstructions,
|
|
89
116
|
newButtonText,
|
|
90
117
|
newButtonHref = '#',
|
|
91
118
|
onNewClick,
|
|
@@ -99,6 +126,7 @@ export function AdminListPage({
|
|
|
99
126
|
error = null,
|
|
100
127
|
onRetry,
|
|
101
128
|
}: AdminListPageProps) {
|
|
129
|
+
const navigate = useNavigate()
|
|
102
130
|
return (
|
|
103
131
|
<div className="space-y-6">
|
|
104
132
|
<div className="flex justify-between items-center">
|
|
@@ -108,34 +136,12 @@ export function AdminListPage({
|
|
|
108
136
|
</div>
|
|
109
137
|
|
|
110
138
|
{newButtonText && (
|
|
111
|
-
<Button onClick={() => onNewClick ? onNewClick() : (
|
|
139
|
+
<Button onClick={() => onNewClick ? onNewClick() : navigate(newButtonHref)}>
|
|
112
140
|
{newButtonText}
|
|
113
141
|
</Button>
|
|
114
142
|
)}
|
|
115
143
|
</div>
|
|
116
144
|
|
|
117
|
-
{!noPageInstructions && (
|
|
118
|
-
<PageInstructions
|
|
119
|
-
sections={[
|
|
120
|
-
{
|
|
121
|
-
title: 'What this page is for',
|
|
122
|
-
content: `This page is the administrative list for ${title.toLowerCase()}. It shows all records in the system, their current state, and provides tools to search, filter, and create new records.`,
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
title: 'How to find records',
|
|
126
|
-
content: `Use the search field at the top of the list to look for records by name or keyword. Use the filter dropdowns to narrow the list by status, type, or other categories. Click any column header to sort ascending or descending.`,
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
title: 'How to create, view, and edit records',
|
|
130
|
-
content: `${newButtonText ? `Click the ${newButtonText} button in the top-right to create a new record. ` : ''}Click any row in the table to open its detail page. From the detail page you can review all fields, edit the record, and, if allowed, delete it. Deleting a record usually cannot be undone.`,
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
title: 'Understanding the stats',
|
|
134
|
-
content: `The summary cards above the table show the most important counts for this record type. Use them as a quick health check or to spot trends before drilling into the list.`,
|
|
135
|
-
},
|
|
136
|
-
]}
|
|
137
|
-
/>
|
|
138
|
-
)}
|
|
139
145
|
|
|
140
146
|
<div className="grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-4">
|
|
141
147
|
{statsCards.map((stat, index) => (
|
|
@@ -160,6 +166,7 @@ export function AdminListPage({
|
|
|
160
166
|
placeholder={searchPlaceholder}
|
|
161
167
|
value={searchValue}
|
|
162
168
|
onChange={(e) => onSearchChange(e.target.value)}
|
|
169
|
+
|
|
163
170
|
className="pl-9"
|
|
164
171
|
/>
|
|
165
172
|
</div>
|
|
@@ -211,10 +218,11 @@ export function AdminListPage({
|
|
|
211
218
|
</div>
|
|
212
219
|
)
|
|
213
220
|
}
|
|
214
|
-
// CIL[
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
+
// CIL[END stable_id="~/.framework/src/components/admin/AdminListPage.tsx:AdminListPage:component"]
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
|
|
@@ -1,12 +1,28 @@
|
|
|
1
|
-
// CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminSidebar.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/admin/AdminSidebar.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/components/admin/AdminSidebar.tsx"]
|
|
2
|
+
/**
|
|
3
|
+
* @module AdminSidebar
|
|
4
|
+
* @audience both
|
|
5
|
+
* @layer shared-core
|
|
6
|
+
* @stability stable
|
|
7
|
+
*
|
|
8
|
+
* The AdminSidebar module provides a navigational sidebar for the admin interface, allowing users to access various administrative functions and settings. It utilizes React components and icons to create an interactive and visually appealing sidebar layout.
|
|
9
|
+
* INVARIANT: The sidebar must always reflect the current user's permissions and available actions.
|
|
10
|
+
*
|
|
11
|
+
* @seeAlso useBranding (provides branding context for the sidebar).
|
|
12
|
+
* @seeAlso ../ui/sidebar (contains UI components used in the sidebar).
|
|
13
|
+
* @seeAlso ../ui/collapsible (provides collapsible functionality for sidebar groups).
|
|
14
|
+
*
|
|
15
|
+
* @cil-generated
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
10
26
|
|
|
11
27
|
|
|
12
28
|
|
|
@@ -14,13 +30,10 @@
|
|
|
14
30
|
import * as React from "react"
|
|
15
31
|
import { Link, useLocation } from "react-router-dom"
|
|
16
32
|
import {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
Settings,
|
|
33
|
+
// CIL[END stable_id="~/.framework/src/components/admin/AdminSidebar.tsx:module_header:module_header"]
|
|
34
|
+
Settings,
|
|
20
35
|
Type,
|
|
21
|
-
Users,
|
|
22
36
|
Layout,
|
|
23
|
-
FileText,
|
|
24
37
|
BarChart3,
|
|
25
38
|
AlertTriangle,
|
|
26
39
|
Activity,
|
|
@@ -36,7 +49,6 @@ import {
|
|
|
36
49
|
Lightbulb,
|
|
37
50
|
Key,
|
|
38
51
|
Truck,
|
|
39
|
-
TestTube,
|
|
40
52
|
UserPlus,
|
|
41
53
|
BookOpen,
|
|
42
54
|
ChevronRight,
|
|
@@ -58,25 +70,33 @@ import {
|
|
|
58
70
|
SidebarMenuSubItem,
|
|
59
71
|
SidebarRail,
|
|
60
72
|
} from "../ui/sidebar"
|
|
61
|
-
|
|
73
|
+
|
|
62
74
|
import { useBranding } from "../../hooks/useBranding"
|
|
63
75
|
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "../ui/collapsible"
|
|
64
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Provides React, router, icons, and UI component imports for the admin sidebar module'; No verified external callers; imports: .framework/src/components/ui/sidebar.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/collapsible.tsx"]
|
|
65
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
66
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
67
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
68
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
69
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
70
|
-
// CIL[END stable_id="~/.framework/src/components/admin/AdminSidebar.tsx:module_header:module_header"]
|
|
71
|
-
// CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminSidebar.tsx:navigationsections:constant" type="constant" identity="navigationSections" parent="none"]
|
|
72
|
-
// CIL[DOC-MACRO purpose="Defines the static navigation section structure for the admin sidebar"]
|
|
73
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Maintain the ordered list of admin navigation sections, routes, and optional nested children"]
|
|
74
|
-
// CIL[DOC-CONTEXT module="admin" layer="presentation" related_files=".framework/src/components/admin/AdminSidebar.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/collapsible.tsx,.framework/src/components/ui/sidebar.tsx"]
|
|
75
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="navigationSections: NavigationSection[]" errors="none" side_effects="none"]
|
|
76
|
-
// CIL[DOC-MICRO logic_summary="Static array of navigation sections with title, icon, optional children, and route URLs" notable_decisions="[]"]
|
|
77
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
78
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
79
76
|
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminSidebar.tsx:navigationSections:constant" type="constant" identity="navigationSections" parent="~/.framework/src/components/admin/AdminSidebar.tsx"]
|
|
93
|
+
/**
|
|
94
|
+
* The 'navigationSections' constant defines the structure of the sidebar navigation for the admin interface, organizing various sections for configuration, access, security, observability, testing, knowledge base, and CIL functionalities. This organization provides a clear and consistent navigation experience for users managing admin functionalities.
|
|
95
|
+
*
|
|
96
|
+
* @sideEffects none
|
|
97
|
+
* @stability internal
|
|
98
|
+
* @cil-generated
|
|
99
|
+
*/
|
|
80
100
|
const navigationSections = [
|
|
81
101
|
{
|
|
82
102
|
title: "Configs",
|
|
@@ -112,20 +132,6 @@ const navigationSections = [
|
|
|
112
132
|
{ title: "Flagged Actors", url: "/spine-framework/admin/security", icon: Shield },
|
|
113
133
|
]
|
|
114
134
|
},
|
|
115
|
-
{
|
|
116
|
-
title: "Runtime",
|
|
117
|
-
items: [
|
|
118
|
-
{ title: "Items", url: "/spine-framework/admin/runtime/items", icon: Database },
|
|
119
|
-
{ title: "Accounts", url: "/spine-framework/admin/runtime/accounts", icon: Users },
|
|
120
|
-
{ title: "People", url: "/spine-framework/admin/runtime/people", icon: Users },
|
|
121
|
-
{ title: "Threads", url: "/spine-framework/admin/runtime/threads", icon: MessageSquare },
|
|
122
|
-
{ title: "Messages", url: "/spine-framework/admin/runtime/messages", icon: FileText },
|
|
123
|
-
{ title: "Attachments", url: "/spine-framework/admin/runtime/attachments", icon: FileSearch },
|
|
124
|
-
{ title: "Watchers", url: "/spine-framework/admin/runtime/watchers", icon: Activity },
|
|
125
|
-
{ title: "Links", url: "/spine-framework/admin/runtime/links", icon: Puzzle },
|
|
126
|
-
{ title: "Progress", url: "/spine-framework/admin/runtime/item_progress", icon: BarChart3 },
|
|
127
|
-
]
|
|
128
|
-
},
|
|
129
135
|
{
|
|
130
136
|
title: "Observability",
|
|
131
137
|
items: [
|
|
@@ -135,12 +141,6 @@ const navigationSections = [
|
|
|
135
141
|
{ title: "Logs", url: "/spine-framework/admin/observability/logs", icon: FileSearch },
|
|
136
142
|
]
|
|
137
143
|
},
|
|
138
|
-
{
|
|
139
|
-
title: "Testing",
|
|
140
|
-
items: [
|
|
141
|
-
{ title: "Test Runs", url: "/spine-framework/admin/testing", icon: TestTube },
|
|
142
|
-
]
|
|
143
|
-
},
|
|
144
144
|
{
|
|
145
145
|
title: "KB Engine",
|
|
146
146
|
items: [
|
|
@@ -159,22 +159,37 @@ const navigationSections = [
|
|
|
159
159
|
]
|
|
160
160
|
}
|
|
161
161
|
]
|
|
162
|
-
// CIL[
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
// CIL[DOC-MACRO purpose="Renders the admin sidebar with navigation sections and active route highlighting"]
|
|
171
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Render the admin sidebar UI and compute active route state from useLocation"]
|
|
172
|
-
// CIL[DOC-CONTEXT module="admin" layer="presentation" related_files=".framework/src/components/admin/AdminSidebar.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/collapsible.tsx,.framework/src/components/ui/sidebar.tsx"]
|
|
173
|
-
// CIL[DOC-CONTRACT inputs="props: React.ComponentProps<typeof Sidebar>" outputs="JSX.Element" errors="none" side_effects="Reads useLocation and renders react-router Link components"]
|
|
174
|
-
// CIL[DOC-MICRO logic_summary="Uses useLocation to determine active routes; maps navigationSections into collapsible sidebar groups and nested items" notable_decisions="[]"]
|
|
175
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
176
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
162
|
+
// CIL[END stable_id="~/.framework/src/components/admin/AdminSidebar.tsx:navigationSections:constant"]
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
|
|
177
170
|
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminSidebar.tsx:AdminSidebar:component" type="component" identity="AdminSidebar" parent="~/.framework/src/components/admin/AdminSidebar.tsx"]
|
|
180
|
+
/**
|
|
181
|
+
* The AdminSidebar component provides a navigational sidebar for admin functionalities, integrating branding and dynamic navigation sections. It enhances user experience by visually indicating active routes.
|
|
182
|
+
*
|
|
183
|
+
* @macro Sidebar navigation component for admin interface.
|
|
184
|
+
* @micro Utilizes React Router for navigation and manages active states based on the current URL.
|
|
185
|
+
* @inputSpec
|
|
186
|
+
* props: React.ComponentProps<typeof Sidebar> (required) — properties passed to the Sidebar component.
|
|
187
|
+
* @outputSpec JSX.Element — renders the sidebar layout with navigation items.
|
|
188
|
+
* @sideEffects none
|
|
189
|
+
* @stability internal
|
|
190
|
+
* @calls useBranding, useLocation, Link
|
|
191
|
+
* @cil-generated
|
|
192
|
+
*/
|
|
178
193
|
export function AdminSidebar({ ...props }: React.ComponentProps<typeof Sidebar>) {
|
|
179
194
|
const branding = useBranding()
|
|
180
195
|
const location = useLocation()
|
|
@@ -199,12 +214,6 @@ export function AdminSidebar({ ...props }: React.ComponentProps<typeof Sidebar>)
|
|
|
199
214
|
</SidebarMenuItem>
|
|
200
215
|
</SidebarMenu>
|
|
201
216
|
|
|
202
|
-
<SidebarGroup className="py-2">
|
|
203
|
-
<Button className="w-full" size="sm">
|
|
204
|
-
<PlusIcon className="mr-2 h-4 w-4" />
|
|
205
|
-
Quick Create
|
|
206
|
-
</Button>
|
|
207
|
-
</SidebarGroup>
|
|
208
217
|
</SidebarHeader>
|
|
209
218
|
|
|
210
219
|
<SidebarContent>
|
|
@@ -288,10 +297,10 @@ export function AdminSidebar({ ...props }: React.ComponentProps<typeof Sidebar>)
|
|
|
288
297
|
</Sidebar>
|
|
289
298
|
)
|
|
290
299
|
}
|
|
291
|
-
// CIL[
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
300
|
+
// CIL[END stable_id="~/.framework/src/components/admin/AdminSidebar.tsx:AdminSidebar:component"]
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
|