spine-framework 0.3.145 → 0.4.1
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 +76 -0
- package/.framework/.spine-manifest.json +19 -0
- package/.framework/cli/commands/agents.ts +61 -33
- package/.framework/cli/commands/auth.ts +60 -28
- package/.framework/cli/commands/create-app.ts +212 -80
- package/.framework/cli/commands/dev.ts +184 -68
- package/.framework/cli/commands/doctor.ts +324 -152
- package/.framework/cli/commands/generate.ts +119 -68
- package/.framework/cli/commands/init.ts +141 -242
- package/.framework/cli/commands/install-app.ts +1336 -314
- package/.framework/cli/commands/items.ts +31 -29
- package/.framework/cli/commands/migrate.ts +299 -156
- package/.framework/cli/commands/migrations.ts +62 -30
- package/.framework/cli/commands/pipelines.ts +31 -29
- package/.framework/cli/commands/status.ts +105 -45
- package/.framework/cli/commands/system.ts +47 -42
- package/.framework/cli/commands/test.ts +161 -102
- package/.framework/cli/commands/upgrade.ts +260 -0
- package/.framework/cli/commands/validate-app.ts +517 -161
- package/.framework/cli/context.ts +117 -85
- package/.framework/cli/env-loader.ts +74 -43
- package/.framework/cli/index.ts +70 -46
- package/.framework/cli/lib/project-files.ts +404 -0
- package/.framework/docs/guides/testing-guide.md +1 -1
- package/.framework/docs/runtime-types.md +72 -72
- package/.framework/functions/_shared/access.ts +84 -0
- package/.framework/functions/_shared/agent-runner.ts +5067 -1026
- package/.framework/functions/_shared/app-manifest.ts +214 -94
- package/.framework/functions/_shared/ast.ts +214 -0
- package/.framework/functions/_shared/audit.ts +91 -55
- package/.framework/functions/_shared/cil.ts +368 -127
- package/.framework/functions/_shared/db.ts +337 -68
- package/.framework/functions/_shared/funnel.ts +228 -0
- package/.framework/functions/_shared/geo.ts +105 -0
- package/.framework/functions/_shared/hash-api-key.ts +94 -17
- package/.framework/functions/_shared/index.ts +22 -224
- package/.framework/functions/_shared/kb.ts +832 -58
- package/.framework/functions/_shared/llm.ts +118 -18
- package/.framework/functions/_shared/logging.ts +317 -19
- package/.framework/functions/_shared/middleware.ts +701 -131
- package/.framework/functions/_shared/notify.ts +70 -0
- package/.framework/functions/_shared/outcomes.ts +34 -19
- package/.framework/functions/_shared/permissions.ts +501 -315
- package/.framework/functions/_shared/pipeline-runner.ts +704 -155
- package/.framework/functions/_shared/principal.ts +436 -263
- package/.framework/functions/_shared/rate-limit.ts +233 -0
- package/.framework/functions/_shared/resolve-credentials.ts +86 -19
- package/.framework/functions/_shared/resolve-ids.ts +203 -139
- package/.framework/functions/_shared/retry-deliveries.ts +51 -16
- package/.framework/functions/_shared/schema-utils.ts +602 -521
- package/.framework/functions/_shared/security.ts +345 -0
- package/.framework/functions/_shared/testing.ts +197 -172
- package/.framework/functions/_shared/tracing.ts +351 -21
- package/.framework/functions/_shared/trigger-engine.ts +425 -136
- package/.framework/functions/_shared/webhook-registration.ts +71 -70
- package/.framework/functions/_shared/webhook-registry.ts +126 -83
- package/.framework/functions/account-nodes.ts +30 -30
- package/.framework/functions/adapters/generic-webhook-inbound.ts +49 -16
- package/.framework/functions/adapters/generic-webhook-outbound.ts +17 -17
- package/.framework/functions/adapters/openai-outbound.ts +15 -16
- package/.framework/functions/admin-data.ts +596 -173
- package/.framework/functions/admin-funnel.ts +64 -60
- package/.framework/functions/admin-install-funnel.ts +84 -66
- package/.framework/functions/admin-signals.ts +69 -51
- package/.framework/functions/ai-agents.ts +431 -106
- package/.framework/functions/ai-interactions.ts +186 -112
- package/.framework/functions/api-keys.ts +107 -107
- package/.framework/functions/apps.ts +154 -136
- package/.framework/functions/auth.ts +83 -65
- package/.framework/functions/cil-agent-ingest.ts +189 -232
- package/.framework/functions/cil-agent.ts +433 -177
- package/.framework/functions/cil-callmap.ts +642 -430
- package/.framework/functions/cil-config.ts +139 -135
- package/.framework/functions/cil-context.ts +214 -127
- package/.framework/functions/cil-doc.ts +587 -458
- package/.framework/functions/cil-embeddings.ts +453 -364
- package/.framework/functions/cil-graph.ts +427 -142
- package/.framework/functions/cil-ingest.ts +1418 -1154
- package/.framework/functions/cil-pipeline.ts +276 -21
- package/.framework/functions/cil-project.ts +659 -132
- package/.framework/functions/cil-validate.ts +198 -164
- package/.framework/functions/debug-auth.ts +57 -55
- package/.framework/functions/deliveries.ts +80 -21
- package/.framework/functions/embeddings.ts +1023 -318
- package/.framework/functions/eval-harness.ts +146 -108
- package/.framework/functions/integration-outbound.ts +205 -75
- package/.framework/functions/integration-routes.ts +128 -23
- package/.framework/functions/integrations.ts +125 -100
- package/.framework/functions/invites.ts +1095 -460
- package/.framework/functions/item-progress.ts +158 -102
- package/.framework/functions/kb.ts +34 -10
- package/.framework/functions/logs.ts +133 -133
- package/.framework/functions/observability.ts +152 -122
- package/.framework/functions/pipeline-executions.ts +147 -132
- package/.framework/functions/pipelines.ts +134 -119
- package/.framework/functions/prompt-configs.ts +96 -80
- package/.framework/functions/roles.ts +112 -82
- package/.framework/functions/security.ts +450 -0
- package/.framework/functions/system-cron.ts +117 -80
- package/.framework/functions/system.ts +158 -98
- package/.framework/functions/tests.ts +29 -29
- package/.framework/functions/timers.ts +94 -95
- package/.framework/functions/trigger-scheduler.ts +10 -0
- package/.framework/functions/triggers.ts +179 -149
- package/.framework/functions/types.ts +137 -125
- package/.framework/mcp/index.ts +133 -0
- package/.framework/mcp/load-env.ts +60 -0
- package/.framework/mcp/shared/app-manifest.ts +275 -0
- package/.framework/mcp/shared/db.ts +477 -0
- package/.framework/mcp/shared/kb.ts +118 -0
- package/.framework/mcp/tools/architect.ts +431 -0
- package/.framework/mcp/tools/cil/context.ts +345 -0
- package/.framework/mcp/tools/cil/graph.ts +242 -0
- package/.framework/mcp/tools/cil/ingest.ts +1217 -0
- package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +693 -0
- package/.framework/mcp/tools/cil/pipeline.ts +767 -0
- package/.framework/mcp/tools/cil/project.ts +791 -0
- package/.framework/mcp/tools/cil/retrieval.ts +336 -0
- package/.framework/mcp/tools/cil/search-core.ts +454 -0
- package/.framework/mcp/tools/cil/search.ts +97 -0
- package/.framework/mcp/tools/cil/suggest.ts +186 -0
- package/.framework/mcp/tools/cil/validate.ts +1369 -0
- package/.framework/mcp/tools/kb/delete.ts +139 -0
- package/.framework/mcp/tools/kb/index.ts +52 -0
- package/.framework/mcp/tools/kb/ingest.ts +84 -0
- package/.framework/mcp/tools/kb/list-types.ts +102 -0
- package/.framework/mcp/tools/kb/publish.ts +100 -0
- package/.framework/mcp/tools/kb/reindex.ts +86 -0
- package/.framework/mcp/tools/kb/revoke.ts +85 -0
- package/.framework/mcp/tools/kb/search.ts +101 -0
- package/.framework/mcp/tools/kb/upsert.ts +125 -0
- package/.framework/mcp/tools/observability.ts +510 -0
- package/.framework/migrations/001_core_schema.sql +15 -0
- package/.framework/migrations/002_core_rls_and_functions.sql +15 -0
- package/.framework/migrations/003_core_system_data.sql +16 -1
- package/.framework/migrations/004_core_rpc_and_broker.sql +17 -1
- package/.framework/migrations/005_core_observability.sql +17 -1
- package/.framework/migrations/006_security_hardening_rls.sql +15 -0
- package/.framework/migrations/007_kb_article_list.sql +17 -1
- package/.framework/migrations/008_items_target.sql +15 -0
- package/.framework/migrations/009_roles_slug_unique.sql +15 -0
- package/.framework/migrations/010_auth_user_trigger.sql +15 -0
- package/.framework/migrations/011_spine_system_account.sql +16 -0
- package/.framework/migrations/012_service_role_grants.sql +16 -0
- package/.framework/migrations/013_get_account_apps_role_filter.sql +15 -0
- package/.framework/migrations/014_apps_required_roles.sql +16 -0
- package/.framework/migrations/015_types_kind_slug_unique.sql +15 -0
- package/.framework/migrations/016_cil_types.sql +281 -0
- package/.framework/migrations/017_cil_stable_ids.sql +37 -0
- package/.framework/migrations/018_runtime_tables.sql +129 -0
- package/.framework/migrations/019_agent_prompt_columns.sql +56 -0
- package/.framework/migrations/020_schema_reconciliation.sql +67 -0
- package/.framework/migrations/021_kb_embedding_lifecycle.sql +31 -0
- package/.framework/migrations/032_cil_status_migration.sql +73 -0
- package/.framework/migrations/033_cil_versioning.sql +73 -0
- package/.framework/migrations/034_match_embeddings_knn.sql +115 -0
- package/.framework/migrations/035_rate_limits.sql +55 -0
- package/.framework/migrations/036_demo_record_flags.sql +72 -0
- package/.framework/migrations/037_kb_types_canonical.sql +244 -0
- package/.framework/migrations/038_drop_demo_record_flags.sql +38 -0
- package/.framework/migrations/042_registration_hierarchy.sql +309 -0
- package/.framework/migrations/043_policy_actor_cleanup.sql +39 -0
- package/.framework/migrations/044_match_embeddings_filtered_knn.sql +151 -0
- package/.framework/migrations/045_security_critical_rls.sql +139 -0
- package/.framework/migrations/046_security_missing_rls.sql +79 -0
- package/.framework/migrations/047_people_updated_by.sql +27 -0
- package/.framework/migrations/048_watcher_last_seen_at.sql +24 -0
- package/.framework/migrations/049_security_blocklist.sql +148 -0
- package/.framework/migrations/050_notifications.sql +49 -0
- package/.framework/migrations/051_message_agent_fields.sql +74 -0
- package/.framework/migrations/052_registration_security.sql +421 -0
- package/.framework/migrations/053_builtin_action_seeds.sql +66 -0
- package/.framework/migrations/054_kb_ingest_lease.sql +157 -0
- package/.framework/migrations/055_type_id_drift_reconciliation.sql +33 -0
- package/.framework/migrations/056_slug_column_reconciliation.sql +38 -0
- package/.framework/migrations/057_pipelines_slug_identity.sql +14 -0
- package/.framework/migrations/058_account_data_field_declarations.sql +53 -0
- package/.framework/migrations/059_registration_placement_fixes.sql +269 -0
- package/.framework/migrations/060_account_person_record_permissions.sql +38 -0
- package/.framework/migrations/061_fk_dedup.sql +32 -0
- package/.framework/public/spine-logo.svg +10 -3
- package/.framework/scripts/app-install-cli.ts +190 -93
- package/.framework/scripts/assemble-frontend.sh +127 -44
- package/.framework/scripts/assemble-functions.sh +128 -30
- package/.framework/scripts/boundary-check.sh +6 -2
- package/.framework/scripts/build-manifest.sh +24 -68
- package/.framework/scripts/check-core-integrity.sh +15 -76
- package/.framework/scripts/checksum-manifest.mts +343 -0
- package/.framework/scripts/cil-migrate-markers.ts +403 -0
- package/.framework/scripts/fix-cil-markers.mjs +176 -0
- package/.framework/scripts/verify-integrity.sh +21 -57
- package/.framework/scripts/verify-manifest.mts +305 -0
- package/.framework/seeds/types/funnel_signal_use.json +74 -21
- package/.framework/seeds/types/spine_instance.json +73 -21
- package/.framework/src/App.tsx +118 -72
- package/.framework/src/apps/admin/index.tsx +855 -58
- package/.framework/src/components/AppWrapper.tsx +43 -45
- package/.framework/src/components/CustomAppLoader.tsx +160 -116
- package/.framework/src/components/admin/AdminListPage.tsx +46 -44
- package/.framework/src/components/admin/AdminSidebar.tsx +57 -47
- package/.framework/src/components/admin/AdminStatsCard.tsx +46 -44
- package/.framework/src/components/admin/PageInstructions.tsx +98 -2
- package/.framework/src/components/admin/SortableTableHeader.tsx +44 -45
- package/.framework/src/components/app-shell/GenericAppShell.tsx +64 -65
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +44 -47
- package/.framework/src/components/app-shell/GenericListPage.tsx +45 -49
- package/.framework/src/components/app-sidebar.tsx +42 -45
- package/.framework/src/components/auth/ProtectedRoute.tsx +48 -41
- package/.framework/src/components/auth/TurnstileWidget.tsx +27 -0
- package/.framework/src/components/kb/KBArticleEditor.tsx +231 -22
- package/.framework/src/components/kb/KBArticleList.tsx +251 -10
- package/.framework/src/components/layout/AppShell.tsx +51 -45
- package/.framework/src/components/layout/Header.tsx +42 -43
- package/.framework/src/components/layout/Layout.tsx +46 -46
- package/.framework/src/components/layout/Sidebar.tsx +196 -96
- package/.framework/src/components/runtime/DataDetailHeader.tsx +55 -30
- package/.framework/src/components/runtime/DataDetailPage.tsx +31 -269
- package/.framework/src/components/runtime/DataFilters.tsx +49 -74
- package/.framework/src/components/runtime/DataHeader.tsx +53 -32
- package/.framework/src/components/runtime/DataListPage.tsx +51 -155
- package/.framework/src/components/runtime/DataStats.tsx +66 -44
- package/.framework/src/components/runtime/DataTable.tsx +49 -149
- package/.framework/src/components/runtime/SchemaDetailForm.tsx +45 -75
- package/.framework/src/components/runtime/index.ts +119 -16
- package/.framework/src/components/search-form.tsx +46 -29
- package/.framework/src/components/shared/AgentView.tsx +65 -48
- package/.framework/src/components/shared/FieldRenderer.tsx +144 -50
- package/.framework/src/components/shared/InviteManager.tsx +207 -97
- package/.framework/src/components/shared/MemberList.tsx +97 -0
- package/.framework/src/components/shared/SchemaFields.tsx +107 -86
- package/.framework/src/components/ui/DataTable.tsx +80 -68
- package/.framework/src/components/ui/Form.tsx +157 -146
- package/.framework/src/components/ui/ItemCard.tsx +74 -67
- package/.framework/src/components/ui/ItemListView.tsx +73 -68
- package/.framework/src/components/ui/LoadingSpinner.tsx +43 -48
- package/.framework/src/components/ui/Modal.tsx +78 -68
- package/.framework/src/components/ui/RichTextEditor.tsx +89 -69
- package/.framework/src/components/ui/accordion.tsx +85 -86
- package/.framework/src/components/ui/alert-dialog.tsx +197 -184
- package/.framework/src/components/ui/alert.tsx +105 -94
- package/.framework/src/components/ui/aspect-ratio.tsx +57 -43
- package/.framework/src/components/ui/avatar.tsx +122 -107
- package/.framework/src/components/ui/badge.tsx +60 -55
- package/.framework/src/components/ui/breadcrumb.tsx +127 -128
- package/.framework/src/components/ui/button-group.tsx +86 -72
- package/.framework/src/components/ui/button.tsx +71 -50
- package/.framework/src/components/ui/calendar.tsx +72 -57
- package/.framework/src/components/ui/card.tsx +136 -129
- package/.framework/src/components/ui/carousel.tsx +226 -107
- package/.framework/src/components/ui/chart.tsx +252 -147
- package/.framework/src/components/ui/checkbox.tsx +43 -44
- package/.framework/src/components/ui/collapsible.tsx +86 -71
- package/.framework/src/components/ui/combobox.tsx +282 -249
- package/.framework/src/components/ui/command.tsx +158 -146
- package/.framework/src/components/ui/context-menu.tsx +239 -240
- package/.framework/src/components/ui/dialog.tsx +174 -157
- package/.framework/src/components/ui/direction.tsx +72 -56
- package/.framework/src/components/ui/drawer.tsx +168 -169
- package/.framework/src/components/ui/dropdown-menu.tsx +254 -223
- package/.framework/src/components/ui/empty.tsx +131 -120
- package/.framework/src/components/ui/field.tsx +205 -173
- package/.framework/src/components/ui/hover-card.tsx +71 -72
- package/.framework/src/components/ui/input-group.tsx +148 -133
- package/.framework/src/components/ui/input-otp.tsx +99 -86
- package/.framework/src/components/ui/input.tsx +43 -41
- package/.framework/src/components/ui/item.tsx +207 -185
- package/.framework/src/components/ui/kbd.tsx +57 -56
- package/.framework/src/components/ui/label.tsx +45 -41
- package/.framework/src/components/ui/menubar.tsx +268 -236
- package/.framework/src/components/ui/native-select.tsx +85 -86
- package/.framework/src/components/ui/navigation-menu.tsx +166 -156
- package/.framework/src/components/ui/pagination.tsx +131 -141
- package/.framework/src/components/ui/popover.tsx +125 -128
- package/.framework/src/components/ui/progress.tsx +47 -44
- package/.framework/src/components/ui/radio-group.tsx +60 -55
- package/.framework/src/components/ui/resizable.tsx +85 -72
- package/.framework/src/components/ui/scroll-area.tsx +57 -58
- package/.framework/src/components/ui/select.tsx +182 -169
- package/.framework/src/components/ui/separator.tsx +42 -43
- package/.framework/src/components/ui/sheet.tsx +170 -159
- package/.framework/src/components/ui/sidebar.tsx +395 -398
- package/.framework/src/components/ui/skeleton.tsx +42 -43
- package/.framework/src/components/ui/slider.tsx +61 -44
- package/.framework/src/components/ui/sonner.tsx +44 -44
- package/.framework/src/components/ui/spinner.tsx +47 -42
- package/.framework/src/components/ui/switch.tsx +56 -42
- package/.framework/src/components/ui/table-primitives.tsx +272 -132
- package/.framework/src/components/ui/table.tsx +140 -142
- package/.framework/src/components/ui/tabs.tsx +110 -93
- package/.framework/src/components/ui/textarea.tsx +43 -44
- package/.framework/src/components/ui/toggle-group.tsx +87 -71
- package/.framework/src/components/ui/toggle.tsx +56 -56
- package/.framework/src/components/ui/tooltip.tsx +99 -85
- package/.framework/src/contexts/AppContext.tsx +166 -114
- package/.framework/src/contexts/AuthContext.tsx +232 -137
- package/.framework/src/hooks/use-mobile.ts +43 -44
- package/.framework/src/hooks/useApi.ts +185 -172
- package/.framework/src/hooks/useAppPath.ts +31 -29
- package/.framework/src/hooks/useApps.ts +77 -42
- package/.framework/src/hooks/useEntityList.ts +66 -29
- package/.framework/src/hooks/useEntityRecord.ts +76 -32
- package/.framework/src/hooks/useForm.ts +62 -30
- package/.framework/src/hooks/useListSchema.ts +60 -43
- package/.framework/src/hooks/useSchemaRecord.ts +115 -95
- package/.framework/src/lib/api.ts +258 -134
- package/.framework/src/lib/registration.ts +181 -0
- package/.framework/src/lib/supabase.ts +118 -81
- package/.framework/src/lib/utils.ts +266 -266
- package/.framework/src/main.tsx +43 -44
- package/.framework/src/pages/DashboardPage.tsx +44 -43
- package/.framework/src/pages/NoAppPage.tsx +50 -0
- package/.framework/src/pages/NotFoundPage.tsx +32 -29
- package/.framework/src/pages/SetupPage.tsx +34 -33
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +69 -58
- package/.framework/src/pages/admin/AIAgentsPage.tsx +43 -40
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +63 -55
- package/.framework/src/pages/admin/APIKeysPage.tsx +44 -42
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +117 -94
- package/.framework/src/pages/admin/AppDetailPage.tsx +48 -42
- package/.framework/src/pages/admin/AppsPage.tsx +45 -42
- package/.framework/src/pages/admin/DeliveriesPage.tsx +49 -17
- package/.framework/src/pages/admin/DesignedPage.tsx +31 -30
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +58 -0
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +49 -0
- package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +31 -29
- package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +46 -29
- package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -29
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +68 -55
- package/.framework/src/pages/admin/IntegrationsPage.tsx +45 -42
- package/.framework/src/pages/admin/InvitesPage.tsx +60 -44
- package/.framework/src/pages/admin/LogsPage.tsx +87 -137
- package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +31 -29
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +150 -89
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +77 -104
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +44 -43
- package/.framework/src/pages/admin/PipelinesPage.tsx +59 -145
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +53 -42
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +47 -117
- package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +31 -44
- package/.framework/src/pages/admin/RoleDetailPage.tsx +49 -92
- package/.framework/src/pages/admin/RolesPage.tsx +47 -164
- package/.framework/src/pages/admin/SecurityPage.tsx +310 -0
- package/.framework/src/pages/admin/SelectTestPage.tsx +30 -32
- package/.framework/src/pages/admin/ShadcnTestPage.tsx +37 -44
- package/.framework/src/pages/admin/SimpleDashboard.tsx +32 -44
- package/.framework/src/pages/admin/TestRunDetailPage.tsx +97 -44
- package/.framework/src/pages/admin/TestingDashboard.tsx +126 -71
- package/.framework/src/pages/admin/TimerDetailPage.tsx +67 -55
- package/.framework/src/pages/admin/TimersPage.tsx +44 -42
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +47 -42
- package/.framework/src/pages/admin/TriggersPage.tsx +58 -57
- package/.framework/src/pages/admin/TypeDetailPage.tsx +91 -55
- package/.framework/src/pages/admin/TypesPage.tsx +45 -42
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +258 -128
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +127 -123
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +308 -235
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +159 -110
- package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +432 -0
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +200 -178
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +286 -239
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +211 -90
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +156 -143
- package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +379 -0
- package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +337 -0
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +219 -214
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
- package/.framework/src/pages/auth/AuthConfirmPage.tsx +135 -65
- package/.framework/src/pages/auth/ForgotPasswordPage.tsx +39 -31
- package/.framework/src/pages/auth/LoginPage.tsx +38 -32
- package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -28
- package/.framework/src/pages/auth/RegisterPage.tsx +429 -155
- package/.framework/src/pages/spine-framework/APIPage.tsx +33 -30
- package/.framework/src/pages/spine-framework/CLIPage.tsx +32 -30
- package/.framework/src/types/auth.ts +101 -93
- package/.framework/src/types/types.ts +283 -262
- package/.framework/templates/project.json +87 -0
- package/.framework/templates/spine.config.neutral.json +7 -0
- package/.framework/tests/api/api-surface.test.ts +381 -0
- package/.framework/tests/fixtures/seed.ts +427 -0
- package/.framework/tests/fixtures/teardown.ts +228 -0
- package/.framework/tests/reporter.ts +351 -0
- package/.framework/tests/setup.ts +135 -0
- package/.framework/tests/ui/ui-sweep.ts +278 -0
- package/.framework/tests/unit/admin-data-logger.test.ts +310 -0
- package/.framework/tests/unit/agent-runner.test.ts +2389 -0
- package/.framework/tests/unit/ai-interactions.test.ts +81 -0
- package/.framework/tests/unit/app-manifest.test.ts +359 -0
- package/.framework/tests/unit/assembly-scripts.test.ts +172 -0
- package/.framework/tests/unit/cil-determinism.test.ts +85 -0
- package/.framework/tests/unit/core-isolation.test.ts +153 -0
- package/.framework/tests/unit/funnel-signals.test.ts +135 -0
- package/.framework/tests/unit/install-app.test.ts +1759 -0
- package/.framework/tests/unit/invites-security.test.ts +572 -0
- package/.framework/tests/unit/kb-ingest-lease.test.ts +287 -0
- package/.framework/tests/unit/kb-search.test.ts +119 -0
- package/.framework/tests/unit/migrate.test.ts +509 -0
- package/.framework/tests/unit/notify.test.ts +136 -0
- package/.framework/tests/unit/permissions.test.ts +269 -0
- package/.framework/tests/unit/pipeline-runner.test.ts +755 -0
- package/.framework/tests/unit/principal-cache.test.ts +138 -0
- package/.framework/tests/unit/retrieval-golden.test.ts +520 -0
- package/.framework/tests/unit/runtime-isolation.test.ts +642 -0
- package/.framework/tests/unit/schema-utils.test.ts +225 -0
- package/.framework/tests/unit/trigger-engine.test.ts +513 -0
- package/.framework/tests/unit/validate-app.test.ts +527 -0
- package/README.md +34 -3
- package/bin/spine-framework.cjs +1 -0
- package/config/tailwind.config.cjs +7 -0
- package/config/tsconfig.functions.json +42 -0
- package/config/tsconfig.json +37 -9
- package/config/vite.config.ts +31 -2
- package/netlify.toml +31 -3
- package/package.json +46 -29
- package/scripts/assemble-frontend.sh +127 -44
- package/scripts/assemble-functions.sh +127 -29
- package/scripts/boundary-check.sh +6 -2
- package/scripts/build-manifest.sh +24 -68
- package/scripts/checksum-manifest.mts +345 -0
- package/scripts/dev-clean.sh +86 -0
- package/scripts/dev-netlify.sh +49 -0
- package/scripts/netlify-dev-wrapper.sh +2 -0
- package/scripts/verify-install.ts +358 -0
- package/scripts/verify-integrity.sh +21 -57
- package/scripts/verify-manifest.mts +305 -0
- package/templates/project/gitignore +45 -0
- package/{config → templates/project}/package-lock.json +22335 -9366
- package/vitest.config.ts +46 -0
- package/.framework/public/spine.config.json +0 -91
- package/config/deno.lock +0 -108
- package/config/tsconfig.node.tsbuildinfo +0 -1
- package/config/tsconfig.tsbuildinfo +0 -1
- package/config/vite.config.d.ts +0 -2
- package/custom/.devin/AGENT.md +0 -357
- package/custom/.devin/skills/install-app/SKILL.md +0 -39
- package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +0 -39
- package/custom/.devin/skills/spine-workbench-idea/SKILL.md +0 -36
- package/custom/.devin/skills/spine-workbench-implement/SKILL.md +0 -46
- package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +0 -28
- package/custom/.devin/skills/spine-workbench-plan/SKILL.md +0 -38
- package/custom/.devin/workflows/app-install.yaml +0 -83
- package/custom/README.md +0 -79
- package/docs/README.md +0 -15
- package/scripts/app-install-cli.ts +0 -286
- package/scripts/check-core-integrity.sh +0 -82
- package/scripts/ingest-chunks.cjs +0 -202
- package/scripts/kb-chunk-parser.cjs +0 -312
- package/scripts/kb-chunk-parser.ts +0 -330
- package/scripts/kb-ingest-docs.ts +0 -203
- package/scripts/load-test-app-install.ts +0 -484
- package/scripts/test-login.js +0 -33
- package/spine.config.json +0 -91
|
@@ -1,23 +1,19 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/ui/Modal.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/components/ui/Modal.tsx"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="shadcn/ui Modal component module built on Radix UI Dialog"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Imports dialog primitives and utils, then exports Modal and ModalFooter components"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="components/ui" layer="ui" related_files=".framework/src/components/ui/dialog.tsx,.framework/src/lib/utils.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="Modal and ModalFooter components, plus their prop interfaces" errors="" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports React, the cn utility, and local Dialog primitives; declares the public component exports" notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="frontend"]
|
|
10
|
+
|
|
11
|
+
|
|
1
12
|
|
|
2
13
|
|
|
3
14
|
|
|
4
15
|
|
|
5
16
|
|
|
6
|
-
// CIL[BEGIN chunk_id="Modal_moduleheader_1783907801" type="module_header" identity="imports" parent="none"]
|
|
7
|
-
// CIL[DOC-MACRO purpose="Import React and dialog dependencies"]
|
|
8
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Provide all external dependencies for modal components"]
|
|
9
|
-
// CIL[DOC-CONTEXT module="Modal" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
|
|
10
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="React, cn, Dialog components" errors="none" side_effects="none"]
|
|
11
|
-
// CIL[DOC-MICRO logic_summary="Imports React, utility function, and shadcn dialog primitives" notable_decisions="[]"]
|
|
12
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
13
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
14
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
15
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/functions/_shared/principal.ts, \."]
|
|
16
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
17
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
18
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
19
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
20
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
21
17
|
import React from 'react'
|
|
22
18
|
import { cn } from '../../lib/utils'
|
|
23
19
|
import {
|
|
@@ -27,21 +23,23 @@ import {
|
|
|
27
23
|
DialogTitle,
|
|
28
24
|
DialogDescription,
|
|
29
25
|
} from './dialog'
|
|
30
|
-
// CIL[
|
|
31
|
-
// CIL[
|
|
32
|
-
// CIL[DOC-
|
|
33
|
-
// CIL[DOC-
|
|
34
|
-
// CIL[DOC-CONTEXT module="Modal" layer="frontend-component" related_files="[\".framework/src/components/ui/dialog.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
|
|
35
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="ModalProps interface" errors="none" side_effects="none"]
|
|
36
|
-
// CIL[DOC-MICRO logic_summary="Props for open state, close handler, content, and sizing" notable_decisions="[]"]
|
|
37
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
38
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
39
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, .framework/src/components/ui/table-primitives.tsx, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, \."]
|
|
40
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
41
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
42
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
26
|
+
// CIL[DOC-VECTOR type="context" content="purpose='shadcn/ui Modal component module built on Radix UI Dialog'; No verified external callers; imports: .framework/src/lib/utils.ts,.framework/src/components/ui/dialog.tsx"]
|
|
27
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
28
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
29
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
43
30
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
44
31
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
32
|
+
// CIL[END stable_id="~/.framework/src/components/ui/Modal.tsx:module_header:module_header"]
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/ui/Modal.tsx:ModalProps:interface" type="interface" identity="ModalProps" parent="~/.framework/src/components/ui/Modal.tsx"]
|
|
36
|
+
// CIL[DOC-MACRO purpose="Defines the prop contract for the Modal component"]
|
|
37
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Declares the configuration surface for Modal consumers"]
|
|
38
|
+
// CIL[DOC-CONTEXT module="components/ui" layer="ui" related_files=".framework/src/components/ui/Modal.tsx,.framework/src/components/ui/dialog.tsx,.framework/src/lib/utils.ts"]
|
|
39
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="ModalProps TypeScript interface" errors="" side_effects="none"]
|
|
40
|
+
// CIL[DOC-MICRO logic_summary="Optional title and description, required open state, close callback, children, and a size union" notable_decisions="[]"]
|
|
41
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
42
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
45
43
|
interface ModalProps {
|
|
46
44
|
isOpen: boolean
|
|
47
45
|
onClose: () => void
|
|
@@ -50,21 +48,23 @@ interface ModalProps {
|
|
|
50
48
|
children: React.ReactNode
|
|
51
49
|
size?: 'sm' | 'md' | 'lg' | 'xl'
|
|
52
50
|
}
|
|
53
|
-
// CIL[
|
|
54
|
-
// CIL[
|
|
55
|
-
// CIL[DOC-
|
|
56
|
-
// CIL[DOC-
|
|
57
|
-
// CIL[DOC-CONTEXT module="Modal" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
|
|
58
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Dialog wrapper" errors="none" side_effects="Calls onClose when dialog closed"]
|
|
59
|
-
// CIL[DOC-MICRO logic_summary="Maps size prop to Tailwind max-width classes, conditionally renders header" notable_decisions="[]"]
|
|
60
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
61
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
62
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/table-primitives.tsx, .framework/functions/_shared/principal.ts, \."]
|
|
63
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
64
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
65
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
51
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Defines the prop contract for the Modal component'; No verified external callers; imports: .framework/src/lib/utils.ts,.framework/src/components/ui/dialog.tsx"]
|
|
52
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
53
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
54
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
66
55
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
67
56
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
57
|
+
// CIL[END stable_id="~/.framework/src/components/ui/Modal.tsx:ModalProps:interface"]
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/ui/Modal.tsx:Modal:component" type="component" identity="Modal" parent="~/.framework/src/components/ui/Modal.tsx"]
|
|
61
|
+
// CIL[DOC-MACRO purpose="Renders an accessible modal dialog with configurable size and optional header"]
|
|
62
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Mounts a Dialog, applies size-based width classes, and renders optional title and description"]
|
|
63
|
+
// CIL[DOC-CONTEXT module="components/ui" layer="ui" related_files=".framework/src/components/ui/Modal.tsx,.framework/src/components/ui/dialog.tsx,.framework/src/lib/utils.ts"]
|
|
64
|
+
// CIL[DOC-CONTRACT inputs="isOpen: boolean, onClose: () => void, title?: string, description?: string, children: React.ReactNode, size?: 'sm'|'md'|'lg'|'xl'" outputs="JSX.Element" errors="" side_effects="none"]
|
|
65
|
+
// CIL[DOC-MICRO logic_summary="Maps size prop to Tailwind max-width classes and conditionally renders a DialogHeader" notable_decisions="[]"]
|
|
66
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
67
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
68
68
|
export function Modal({
|
|
69
69
|
isOpen,
|
|
70
70
|
onClose,
|
|
@@ -94,40 +94,44 @@ export function Modal({
|
|
|
94
94
|
</Dialog>
|
|
95
95
|
)
|
|
96
96
|
}
|
|
97
|
-
// CIL[
|
|
98
|
-
// CIL[
|
|
99
|
-
// CIL[DOC-
|
|
100
|
-
// CIL[DOC-
|
|
101
|
-
// CIL[DOC-CONTEXT module="Modal" layer="frontend-component" related_files="[\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
|
|
102
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="ModalFooterProps interface" errors="none" side_effects="none"]
|
|
103
|
-
// CIL[DOC-MICRO logic_summary="Props for children content and optional styling classes" notable_decisions="[]"]
|
|
104
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
105
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
106
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, custom/apps/portal/pages/ContentPage.tsx, \."]
|
|
107
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
108
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
109
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
97
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Renders an accessible modal dialog with configurable size and optional header'; No verified external callers; imports: .framework/src/lib/utils.ts,.framework/src/components/ui/dialog.tsx"]
|
|
98
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
99
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
100
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
110
101
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
111
102
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
103
|
+
// CIL[END stable_id="~/.framework/src/components/ui/Modal.tsx:Modal:component"]
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/ui/Modal.tsx:ModalFooterProps:interface" type="interface" identity="ModalFooterProps" parent="~/.framework/src/components/ui/Modal.tsx"]
|
|
107
|
+
// CIL[DOC-MACRO purpose="Defines the prop contract for the ModalFooter component"]
|
|
108
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Declares the configuration surface for ModalFooter consumers"]
|
|
109
|
+
// CIL[DOC-CONTEXT module="components/ui" layer="ui" related_files=".framework/src/components/ui/Modal.tsx,.framework/src/components/ui/dialog.tsx,.framework/src/lib/utils.ts"]
|
|
110
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="ModalFooterProps TypeScript interface" errors="" side_effects="none"]
|
|
111
|
+
// CIL[DOC-MICRO logic_summary="Optional className and required children for the footer content" notable_decisions="[]"]
|
|
112
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
113
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
112
114
|
interface ModalFooterProps {
|
|
113
115
|
children: React.ReactNode
|
|
114
116
|
className?: string
|
|
115
117
|
}
|
|
116
|
-
// CIL[
|
|
117
|
-
// CIL[
|
|
118
|
-
// CIL[DOC-
|
|
119
|
-
// CIL[DOC-
|
|
120
|
-
// CIL[DOC-CONTEXT module="Modal" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/ui/dialog.tsx\"]"]
|
|
121
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Footer div container" errors="none" side_effects="none"]
|
|
122
|
-
// CIL[DOC-MICRO logic_summary="Uses Tailwind classes for flex layout, border, and spacing" notable_decisions="[]"]
|
|
123
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
124
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
125
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/table-primitives.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/components/ui/dialog.tsx."]
|
|
126
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
127
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
128
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
118
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Defines the prop contract for the ModalFooter component'; No verified external callers; imports: .framework/src/lib/utils.ts,.framework/src/components/ui/dialog.tsx"]
|
|
119
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
120
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
121
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
129
122
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
130
123
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
124
|
+
// CIL[END stable_id="~/.framework/src/components/ui/Modal.tsx:ModalFooterProps:interface"]
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/ui/Modal.tsx:ModalFooter:component" type="component" identity="ModalFooter" parent="~/.framework/src/components/ui/Modal.tsx"]
|
|
128
|
+
// CIL[DOC-MACRO purpose="Renders a right-aligned, bordered footer for modal actions"]
|
|
129
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provides a styled container for modal action buttons"]
|
|
130
|
+
// CIL[DOC-CONTEXT module="components/ui" layer="ui" related_files=".framework/src/components/ui/Modal.tsx,.framework/src/components/ui/dialog.tsx,.framework/src/lib/utils.ts"]
|
|
131
|
+
// CIL[DOC-CONTRACT inputs="children: React.ReactNode, className?: string" outputs="JSX.Element" errors="" side_effects="none"]
|
|
132
|
+
// CIL[DOC-MICRO logic_summary="Composes a flex row with gap and top border, allowing an extra className" notable_decisions="[]"]
|
|
133
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
134
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
131
135
|
export function ModalFooter({ children, className }: ModalFooterProps) {
|
|
132
136
|
return (
|
|
133
137
|
<div className={cn('flex justify-end gap-3 border-t px-6 py-4 mt-6', className)}>
|
|
@@ -135,4 +139,10 @@ export function ModalFooter({ children, className }: ModalFooterProps) {
|
|
|
135
139
|
</div>
|
|
136
140
|
)
|
|
137
141
|
}
|
|
138
|
-
// CIL[
|
|
142
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Renders a right-aligned, bordered footer for modal actions'; No verified external callers; imports: .framework/src/lib/utils.ts,.framework/src/components/ui/dialog.tsx"]
|
|
143
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
144
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
145
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
146
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
147
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
148
|
+
// CIL[END stable_id="~/.framework/src/components/ui/Modal.tsx:ModalFooter:component"]
|
|
@@ -1,23 +1,19 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:module_header:module_header"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Declare dependencies and set up the RichTextEditor module"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Import and expose all required libraries, components, and utilities"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="RichTextEditor" layer="ui" related_files=".framework/src/lib/utils.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="loads module dependencies"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports DOMPurify, marked, TipTap, lowlight, language definitions, React hooks, icons, and the cn utility" notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="developers"]
|
|
10
|
+
|
|
11
|
+
|
|
1
12
|
|
|
2
13
|
|
|
3
14
|
|
|
4
15
|
|
|
5
16
|
|
|
6
|
-
// CIL[BEGIN chunk_id="richtexteditor_module_header_1783883196" type="module_header" identity="module_header" parent="none"]
|
|
7
|
-
// CIL[DOC-MACRO purpose="Import TipTap editor, extensions, syntax highlighting, and UI dependencies"]
|
|
8
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Provide external dependencies for rich text editor system"]
|
|
9
|
-
// CIL[DOC-CONTEXT module="richtexteditor" layer="ui" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
10
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="TipTap, extensions, lowlight, icons, utils" errors="none" side_effects="none"]
|
|
11
|
-
// CIL[DOC-MICRO logic_summary="Imports TipTap editor core, extensions, syntax highlighting libraries, icons, and utilities" notable_decisions="[]"]
|
|
12
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
13
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
14
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
15
|
-
// CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
16
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
17
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
18
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
19
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
20
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
21
17
|
import DOMPurify from 'dompurify'
|
|
22
18
|
import { marked } from 'marked'
|
|
23
19
|
import { useEditor, EditorContent } from '@tiptap/react'
|
|
@@ -43,50 +39,66 @@ import {
|
|
|
43
39
|
Minus,
|
|
44
40
|
} from 'lucide-react'
|
|
45
41
|
import { cn } from '@core/lib/utils'
|
|
46
|
-
// CIL[
|
|
47
|
-
// CIL[
|
|
48
|
-
// CIL[DOC-
|
|
49
|
-
// CIL[DOC-
|
|
50
|
-
// CIL[DOC-CONTEXT module="richtexteditor" layer="ui" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
|
|
51
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="lowlight instance" errors="none" side_effects="global config"]
|
|
52
|
-
// CIL[DOC-MICRO logic_summary="Creates lowlight instance and registers TypeScript, JavaScript, JSON, Bash, SQL languages" notable_decisions="[]"]
|
|
53
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
54
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
55
|
-
// CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, \."]
|
|
56
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
57
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
58
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
42
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Declare dependencies and set up the RichTextEditor module'; No verified external callers; imports: .framework/src/lib/utils.ts"]
|
|
43
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
44
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
45
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
59
46
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
60
47
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
48
|
+
// CIL[END stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:module_header:module_header"]
|
|
49
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:lowlight_setup:setup"]
|
|
50
|
+
// CIL[DOC-MACRO purpose="Create and configure the lowlight syntax highlighter"]
|
|
51
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Register language parsers with lowlight for code block highlighting"]
|
|
52
|
+
// CIL[DOC-CONTEXT module="RichTextEditor" layer="ui" related_files=".framework/src/components/ui/RichTextEditor.tsx,.framework/src/lib/utils.ts"]
|
|
53
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="lowlight: Lowlight" errors="none" side_effects="registers TypeScript, JavaScript, JSON, Bash, and SQL language parsers in the lowlight instance"]
|
|
54
|
+
// CIL[DOC-MICRO logic_summary="Creates a lowlight instance and registers five language parsers for code block syntax highlighting" notable_decisions="[]"]
|
|
55
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
56
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
61
57
|
const lowlight = createLowlight()
|
|
62
58
|
lowlight.register('typescript', typescript)
|
|
63
59
|
lowlight.register('javascript', javascript)
|
|
64
60
|
lowlight.register('json', json)
|
|
65
61
|
lowlight.register('bash', bash)
|
|
66
62
|
lowlight.register('sql', sql)
|
|
63
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Create and configure the lowlight syntax highlighter'; No verified external callers; imports: .framework/src/lib/utils.ts"]
|
|
64
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
65
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
66
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
67
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
68
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
69
|
+
// CIL[END stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:lowlight_setup:setup"]
|
|
67
70
|
|
|
71
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:toHtml:function"]
|
|
72
|
+
// CIL[DOC-MACRO purpose="Convert raw markdown or HTML text to HTML"]
|
|
73
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return a string of HTML, parsing markdown only when input does not already look like HTML"]
|
|
74
|
+
// CIL[DOC-CONTEXT module="RichTextEditor" layer="ui" related_files=".framework/src/components/ui/RichTextEditor.tsx,.framework/src/lib/utils.ts"]
|
|
75
|
+
// CIL[DOC-CONTRACT inputs="raw: string | undefined" outputs="html: string" errors="none" side_effects="none"]
|
|
76
|
+
// CIL[DOC-MICRO logic_summary="Trims the input, tests for HTML-like tags, and either returns the source or parses markdown synchronously" notable_decisions="[]"]
|
|
77
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
78
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
68
79
|
function toHtml(raw: string | undefined): string {
|
|
69
80
|
const source = (raw ?? '').trim()
|
|
70
81
|
if (!source) return ''
|
|
71
82
|
const likelyHtml = /<\/?(?:h[1-6]|p|div|ul|ol|li|pre|code|br|span|strong|em|a|table|tr|td|th|thead|tbody|blockquote)\b/i.test(source)
|
|
72
83
|
return likelyHtml ? source : (marked.parse(source, { async: false }) as string)
|
|
73
84
|
}
|
|
74
|
-
|
|
75
|
-
// CIL[
|
|
76
|
-
// CIL[
|
|
77
|
-
// CIL[DOC-
|
|
78
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Specify component configuration and behavior options"]
|
|
79
|
-
// CIL[DOC-CONTEXT module="richtexteditor" layer="ui" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
|
|
80
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="RichTextEditorProps interface" errors="none" side_effects="type definition"]
|
|
81
|
-
// CIL[DOC-MICRO logic_summary="Defines value, onChange, placeholder, readonly, className, minHeight props" notable_decisions="[]"]
|
|
82
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
83
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
84
|
-
// CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/components/ui/dialog.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
|
|
85
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
86
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
87
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
85
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Convert raw markdown or HTML text to HTML'; No verified external callers; imports: .framework/src/lib/utils.ts"]
|
|
86
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
87
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
88
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
88
89
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
89
90
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
91
|
+
// CIL[END stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:toHtml:function"]
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:RichTextEditorProps:interface"]
|
|
95
|
+
// CIL[DOC-MACRO purpose="Declare props for the RichTextEditor component"]
|
|
96
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Define the typed prop contract for editor configuration"]
|
|
97
|
+
// CIL[DOC-CONTEXT module="RichTextEditor" layer="ui" related_files=".framework/src/components/ui/RichTextEditor.tsx,.framework/src/lib/utils.ts"]
|
|
98
|
+
// CIL[DOC-CONTRACT inputs="value: string, onChange?: (html: string) => void, placeholder?: string, readonly?: boolean, className?: string, minHeight?: string" outputs="N/A" errors="none" side_effects="none"]
|
|
99
|
+
// CIL[DOC-MICRO logic_summary="TypeScript interface describing optional and required props for RichTextEditor" notable_decisions="[]"]
|
|
100
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
101
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
90
102
|
interface RichTextEditorProps {
|
|
91
103
|
value: string
|
|
92
104
|
onChange?: (html: string) => void
|
|
@@ -95,21 +107,22 @@ interface RichTextEditorProps {
|
|
|
95
107
|
className?: string
|
|
96
108
|
minHeight?: string
|
|
97
109
|
}
|
|
98
|
-
// CIL[
|
|
99
|
-
// CIL[
|
|
100
|
-
// CIL[DOC-
|
|
101
|
-
// CIL[DOC-
|
|
102
|
-
// CIL[DOC-CONTEXT module="richtexteditor" layer="ui" related_files="[\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
|
|
103
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="JSX button element" errors="none" side_effects="renders DOM"]
|
|
104
|
-
// CIL[DOC-MICRO logic_summary="Creates button with active styling, hover effects, and click handling" notable_decisions="[]"]
|
|
105
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
106
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
107
|
-
// CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/RolesPage.tsx, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/functions/_shared/schema-utils.ts, \."]
|
|
108
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
109
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
110
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
110
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Declare props for the RichTextEditor component'; No verified external callers; imports: .framework/src/lib/utils.ts"]
|
|
111
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
112
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
113
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
111
114
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
112
115
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
116
|
+
// CIL[END stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:RichTextEditorProps:interface"]
|
|
117
|
+
|
|
118
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:ToolbarButton:component"]
|
|
119
|
+
// CIL[DOC-MACRO purpose="Render a single formatting toolbar button"]
|
|
120
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Display a styled button that invokes a formatting command when clicked"]
|
|
121
|
+
// CIL[DOC-CONTEXT module="RichTextEditor" layer="ui" related_files=".framework/src/components/ui/RichTextEditor.tsx,.framework/src/lib/utils.ts"]
|
|
122
|
+
// CIL[DOC-CONTRACT inputs="onClick: () => void, active?: boolean, title: string, children: React.ReactNode" outputs="JSX.Element" errors="none" side_effects="invokes onClick when clicked"]
|
|
123
|
+
// CIL[DOC-MICRO logic_summary="Renders a styled button with active state and onMouseDown preventDefault for TipTap integration" notable_decisions="[]"]
|
|
124
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
125
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
113
126
|
function ToolbarButton({
|
|
114
127
|
onClick,
|
|
115
128
|
active,
|
|
@@ -137,21 +150,22 @@ function ToolbarButton({
|
|
|
137
150
|
</button>
|
|
138
151
|
)
|
|
139
152
|
}
|
|
140
|
-
// CIL[
|
|
141
|
-
// CIL[
|
|
142
|
-
// CIL[DOC-
|
|
143
|
-
// CIL[DOC-
|
|
144
|
-
// CIL[DOC-CONTEXT module="richtexteditor" layer="ui" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\"]"]
|
|
145
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="JSX editor component" errors="none" side_effects="renders DOM"]
|
|
146
|
-
// CIL[DOC-MICRO logic_summary="Creates TipTap editor with toolbar, readonly mode, content styling, and synchronization" notable_decisions="[]"]
|
|
147
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
148
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
149
|
-
// CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx."]
|
|
150
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
151
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
152
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
153
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Render a single formatting toolbar button'; No verified external callers; imports: .framework/src/lib/utils.ts"]
|
|
154
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
155
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
156
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
153
157
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
154
158
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
159
|
+
// CIL[END stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:ToolbarButton:component"]
|
|
160
|
+
|
|
161
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:RichTextEditor:component"]
|
|
162
|
+
// CIL[DOC-MACRO purpose="Rich text editor component with formatting toolbar and readonly preview"]
|
|
163
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Initialize a TipTap editor, render a formatting toolbar, and display sanitized HTML output"]
|
|
164
|
+
// CIL[DOC-CONTEXT module="RichTextEditor" layer="ui" related_files=".framework/src/components/ui/RichTextEditor.tsx,.framework/src/lib/utils.ts"]
|
|
165
|
+
// CIL[DOC-CONTRACT inputs="props: RichTextEditorProps" outputs="JSX.Element" errors="none" side_effects="calls onChange on edits, syncs content and editable state via effects, renders sanitized HTML in readonly mode"]
|
|
166
|
+
// CIL[DOC-MICRO logic_summary="Sanitizes initial HTML, creates a TipTap editor with StarterKit and lowlight, syncs content and readonly state, and renders a toolbar or read-only preview" notable_decisions="[]"]
|
|
167
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
168
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
155
169
|
export function RichTextEditor({
|
|
156
170
|
value,
|
|
157
171
|
onChange,
|
|
@@ -299,4 +313,10 @@ export function RichTextEditor({
|
|
|
299
313
|
</div>
|
|
300
314
|
)
|
|
301
315
|
}
|
|
302
|
-
// CIL[
|
|
316
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Rich text editor component with formatting toolbar and readonly preview'; No verified external callers; imports: .framework/src/lib/utils.ts"]
|
|
317
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
318
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
319
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
320
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
321
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
322
|
+
// CIL[END stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:RichTextEditor:component"]
|