spine-framework 0.3.124 → 0.3.126
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/.framework/cli/commands/agents.ts +35 -37
- package/.framework/cli/commands/auth.ts +35 -34
- package/.framework/cli/commands/create-app.ts +104 -40
- package/.framework/cli/commands/dev.ts +104 -69
- package/.framework/cli/commands/doctor.ts +179 -69
- package/.framework/cli/commands/generate.ts +83 -143
- package/.framework/cli/commands/init.ts +72 -34
- package/.framework/cli/commands/install-app.ts +260 -125
- package/.framework/cli/commands/items.ts +33 -44
- package/.framework/cli/commands/migrate.ts +122 -40
- package/.framework/cli/commands/migrations.ts +33 -40
- package/.framework/cli/commands/pipelines.ts +31 -39
- package/.framework/cli/commands/status.ts +47 -23
- package/.framework/cli/commands/system.ts +47 -37
- package/.framework/cli/commands/test.ts +112 -68
- package/.framework/cli/commands/validate-app.ts +215 -121
- package/.framework/cli/context.ts +112 -130
- package/.framework/cli/env-loader.ts +47 -18
- package/.framework/cli/index.ts +81 -42
- package/.framework/docs/runtime-types.md +1024 -0
- package/.framework/functions/_shared/agent-runner.ts +1296 -961
- package/.framework/functions/_shared/app-manifest.ts +82 -68
- package/.framework/functions/_shared/audit.ts +135 -83
- package/.framework/functions/_shared/{cil-state.ts → cil.ts} +158 -56
- package/.framework/functions/_shared/db.ts +80 -126
- package/.framework/functions/_shared/hash-api-key.ts +63 -0
- package/.framework/functions/_shared/index.ts +224 -335
- package/.framework/functions/_shared/kb.ts +319 -0
- package/.framework/functions/_shared/llm.ts +92 -0
- package/.framework/functions/_shared/logging.ts +288 -0
- package/.framework/functions/_shared/middleware.ts +329 -365
- package/.framework/functions/_shared/outcomes.ts +36 -0
- package/.framework/functions/_shared/permissions.ts +359 -643
- package/.framework/functions/_shared/pipeline-runner.ts +243 -316
- package/.framework/functions/_shared/principal.ts +376 -468
- package/.framework/functions/_shared/resolve-credentials.ts +102 -0
- package/.framework/functions/_shared/resolve-ids.ts +188 -16
- package/.framework/functions/_shared/retry-deliveries.ts +104 -0
- package/.framework/functions/_shared/schema-utils.ts +611 -373
- package/.framework/functions/_shared/testing.ts +207 -137
- package/.framework/functions/_shared/tracing.ts +276 -0
- package/.framework/functions/_shared/trigger-engine.ts +159 -211
- package/.framework/functions/_shared/webhook-registration.ts +95 -81
- package/.framework/functions/_shared/webhook-registry.ts +153 -75
- package/.framework/functions/account-nodes.ts +31 -53
- package/.framework/functions/adapters/generic-webhook-inbound.ts +56 -0
- package/.framework/functions/adapters/generic-webhook-outbound.ts +43 -0
- package/.framework/functions/adapters/openai-outbound.ts +40 -0
- package/.framework/functions/admin-data.ts +685 -537
- package/.framework/functions/admin-funnel.ts +31 -20
- package/.framework/functions/admin-install-funnel.ts +47 -28
- package/.framework/functions/admin-signals.ts +47 -29
- package/.framework/functions/ai-agents.ts +122 -147
- package/.framework/functions/ai-interactions.ts +180 -90
- package/.framework/functions/api-keys.ts +250 -192
- package/.framework/functions/apps.ts +203 -197
- package/.framework/functions/auth.ts +98 -91
- package/.framework/functions/cil-agent-ingest.ts +773 -0
- package/.framework/functions/cil-agent.ts +592 -0
- package/.framework/functions/cil-callmap.ts +1227 -0
- package/.framework/functions/cil-config.ts +583 -0
- package/.framework/functions/cil-context.ts +445 -0
- package/.framework/functions/cil-doc.ts +1752 -0
- package/.framework/functions/cil-embeddings.ts +1202 -0
- package/.framework/functions/cil-graph.ts +585 -0
- package/.framework/functions/cil-ingest.ts +2416 -0
- package/.framework/functions/cil-pipeline.ts +318 -0
- package/.framework/functions/cil-project.ts +499 -0
- package/.framework/functions/cil-validate.ts +469 -0
- package/.framework/functions/debug-auth.ts +73 -53
- package/.framework/functions/deliveries.ts +117 -0
- package/.framework/functions/embeddings.ts +528 -516
- package/.framework/functions/eval-harness.ts +158 -106
- package/.framework/functions/integration-outbound.ts +311 -0
- package/.framework/functions/integration-routes.ts +240 -466
- package/.framework/functions/integrations.ts +132 -140
- package/.framework/functions/invites.ts +401 -201
- package/.framework/functions/item-progress.ts +113 -53
- package/.framework/functions/kb.ts +28 -0
- package/.framework/functions/logs.ts +239 -222
- package/.framework/functions/observability.ts +308 -259
- package/.framework/functions/pipeline-executions.ts +179 -235
- package/.framework/functions/pipelines.ts +163 -205
- package/.framework/functions/prompt-configs.ts +109 -156
- package/.framework/functions/roles.ts +97 -147
- package/.framework/functions/system-cron.ts +132 -218
- package/.framework/functions/system.ts +112 -52
- package/.framework/functions/tests.ts +32 -28
- package/.framework/functions/timers.ts +162 -210
- package/.framework/functions/triggers.ts +282 -346
- package/.framework/functions/types.ts +283 -400
- package/.framework/migrations/001_core_schema.sql +630 -0
- package/.framework/migrations/002_core_rls_and_functions.sql +532 -0
- package/.framework/migrations/{003_system_data.sql → 003_core_system_data.sql} +26 -153
- package/.framework/migrations/004_core_rpc_and_broker.sql +421 -0
- package/.framework/migrations/005_core_observability.sql +598 -0
- package/.framework/migrations/006_security_hardening_rls.sql +97 -0
- package/.framework/migrations/007_kb_article_list.sql +237 -0
- package/.framework/migrations/008_items_target.sql +8 -0
- package/.framework/migrations/009_roles_slug_unique.sql +11 -0
- package/.framework/public/spine.config.json +91 -0
- package/.framework/scripts/app-install-cli.ts +112 -98
- package/.framework/src/App.tsx +67 -20
- package/.framework/src/apps/admin/index.tsx +97 -27
- package/.framework/src/components/AppWrapper.tsx +50 -11
- package/.framework/src/components/CustomAppLoader.tsx +131 -22
- package/.framework/src/components/admin/AdminListPage.tsx +75 -8
- package/.framework/src/components/admin/AdminSidebar.tsx +148 -36
- package/.framework/src/components/admin/AdminStatsCard.tsx +48 -29
- package/.framework/src/components/admin/PageInstructions.tsx +49 -0
- package/.framework/src/components/admin/SortableTableHeader.tsx +49 -2
- package/.framework/src/components/app-shell/GenericAppShell.tsx +69 -11
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +55 -10
- package/.framework/src/components/app-shell/GenericListPage.tsx +76 -9
- package/.framework/src/components/app-sidebar.tsx +50 -3
- package/.framework/src/components/auth/ProtectedRoute.tsx +53 -45
- package/.framework/src/components/kb/KBArticleEditor.tsx +409 -0
- package/.framework/src/components/kb/KBArticleList.tsx +557 -0
- package/.framework/src/components/layout/AppShell.tsx +54 -16
- package/.framework/src/components/layout/Header.tsx +50 -38
- package/.framework/src/components/layout/Layout.tsx +48 -32
- package/.framework/src/components/layout/Sidebar.tsx +167 -16
- package/.framework/src/components/runtime/DataDetailHeader.tsx +33 -1
- package/.framework/src/components/runtime/DataDetailPage.tsx +289 -4
- package/.framework/src/components/runtime/DataFilters.tsx +78 -1
- package/.framework/src/components/runtime/DataHeader.tsx +32 -29
- package/.framework/src/components/runtime/DataListPage.tsx +161 -2
- package/.framework/src/components/runtime/DataStats.tsx +48 -1
- package/.framework/src/components/runtime/DataTable.tsx +153 -1
- package/.framework/src/components/runtime/SchemaDetailForm.tsx +77 -46
- package/.framework/src/components/runtime/index.ts +16 -9
- package/.framework/src/components/search-form.tsx +33 -1
- package/.framework/src/components/shared/AgentView.tsx +48 -51
- package/.framework/src/components/shared/FieldRenderer.tsx +84 -67
- package/.framework/src/components/shared/InviteManager.tsx +113 -52
- package/.framework/src/components/shared/MemberList.tsx +182 -0
- package/.framework/src/components/shared/SchemaFields.tsx +96 -78
- package/.framework/src/components/ui/DataTable.tsx +86 -56
- package/.framework/src/components/ui/Form.tsx +188 -109
- package/.framework/src/components/ui/ItemCard.tsx +86 -58
- package/.framework/src/components/ui/ItemListView.tsx +88 -61
- package/.framework/src/components/ui/LoadingSpinner.tsx +52 -27
- package/.framework/src/components/ui/Modal.tsx +81 -4
- package/.framework/src/components/ui/RichTextEditor.tsx +101 -9
- package/.framework/src/components/ui/accordion.tsx +97 -5
- package/.framework/src/components/ui/alert-dialog.tsx +225 -13
- package/.framework/src/components/ui/alert.tsx +113 -6
- package/.framework/src/components/ui/aspect-ratio.tsx +49 -2
- package/.framework/src/components/ui/avatar.tsx +129 -7
- package/.framework/src/components/ui/badge.tsx +65 -3
- package/.framework/src/components/ui/breadcrumb.tsx +145 -8
- package/.framework/src/components/ui/button-group.tsx +81 -4
- package/.framework/src/components/ui/button.tsx +49 -2
- package/.framework/src/components/ui/calendar.tsx +65 -3
- package/.framework/src/components/ui/card.tsx +145 -8
- package/.framework/src/components/ui/carousel.tsx +129 -7
- package/.framework/src/components/ui/chart.tsx +161 -10
- package/.framework/src/components/ui/checkbox.tsx +49 -2
- package/.framework/src/components/ui/collapsible.tsx +81 -5
- package/.framework/src/components/ui/combobox.tsx +305 -20
- package/.framework/src/components/ui/command.tsx +177 -11
- package/.framework/src/components/ui/context-menu.tsx +273 -17
- package/.framework/src/components/ui/dialog.tsx +209 -27
- package/.framework/src/components/ui/direction.tsx +64 -4
- package/.framework/src/components/ui/drawer.tsx +193 -12
- package/.framework/src/components/ui/dropdown-menu.tsx +273 -18
- package/.framework/src/components/ui/empty.tsx +145 -9
- package/.framework/src/components/ui/field.tsx +209 -14
- package/.framework/src/components/ui/hover-card.tsx +81 -4
- package/.framework/src/components/ui/input-group.tsx +162 -10
- package/.framework/src/components/ui/input-otp.tsx +98 -5
- package/.framework/src/components/ui/input.tsx +49 -2
- package/.framework/src/components/ui/item.tsx +225 -13
- package/.framework/src/components/ui/kbd.tsx +65 -3
- package/.framework/src/components/ui/label.tsx +49 -2
- package/.framework/src/components/ui/menubar.tsx +289 -17
- package/.framework/src/components/ui/native-select.tsx +97 -5
- package/.framework/src/components/ui/navigation-menu.tsx +177 -10
- package/.framework/src/components/ui/pagination.tsx +161 -9
- package/.framework/src/components/ui/popover.tsx +145 -8
- package/.framework/src/components/ui/progress.tsx +49 -2
- package/.framework/src/components/ui/radio-group.tsx +65 -3
- package/.framework/src/components/ui/resizable.tsx +82 -4
- package/.framework/src/components/ui/scroll-area.tsx +65 -3
- package/.framework/src/components/ui/select.tsx +193 -11
- package/.framework/src/components/ui/separator.tsx +49 -2
- package/.framework/src/components/ui/sheet.tsx +193 -11
- package/.framework/src/components/ui/sidebar.tsx +481 -38
- package/.framework/src/components/ui/skeleton.tsx +49 -2
- package/.framework/src/components/ui/slider.tsx +49 -2
- package/.framework/src/components/ui/sonner.tsx +49 -2
- package/.framework/src/components/ui/spinner.tsx +49 -2
- package/.framework/src/components/ui/switch.tsx +49 -2
- package/.framework/src/components/ui/table-primitives.tsx +160 -33
- package/.framework/src/components/ui/table.tsx +161 -9
- package/.framework/src/components/ui/tabs.tsx +113 -6
- package/.framework/src/components/ui/textarea.tsx +49 -2
- package/.framework/src/components/ui/toggle-group.tsx +81 -4
- package/.framework/src/components/ui/toggle.tsx +65 -3
- package/.framework/src/components/ui/tooltip.tsx +97 -5
- package/.framework/src/contexts/AppContext.tsx +129 -45
- package/.framework/src/contexts/AuthContext.tsx +187 -144
- package/.framework/src/hooks/use-mobile.ts +48 -2
- package/.framework/src/hooks/useApi.ts +208 -159
- package/.framework/src/hooks/useAppPath.ts +32 -23
- package/.framework/src/hooks/useApps.ts +51 -20
- package/.framework/src/hooks/useEntityList.ts +32 -78
- package/.framework/src/hooks/useEntityRecord.ts +35 -96
- package/.framework/src/hooks/useForm.ts +32 -92
- package/.framework/src/hooks/useListSchema.ts +49 -78
- package/.framework/src/hooks/useSchemaRecord.ts +114 -105
- package/.framework/src/lib/api.ts +195 -116
- package/.framework/src/lib/supabase.ts +98 -64
- package/.framework/src/lib/utils.ts +287 -151
- package/.framework/src/main.tsx +49 -3
- package/.framework/src/pages/DashboardPage.tsx +52 -29
- package/.framework/src/pages/NotFoundPage.tsx +32 -10
- package/.framework/src/pages/SetupPage.tsx +32 -12
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +119 -10
- package/.framework/src/pages/admin/AIAgentsPage.tsx +48 -19
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +187 -17
- package/.framework/src/pages/admin/APIKeysPage.tsx +98 -22
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +113 -26
- package/.framework/src/pages/admin/AppDetailPage.tsx +125 -8
- package/.framework/src/pages/admin/AppsPage.tsx +49 -2
- package/.framework/src/pages/admin/DeliveriesPage.tsx +196 -0
- package/.framework/src/pages/admin/DesignedPage.tsx +32 -18
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +215 -484
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +116 -319
- package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -16
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +183 -26
- package/.framework/src/pages/admin/IntegrationsPage.tsx +48 -19
- package/.framework/src/pages/admin/InvitesPage.tsx +48 -14
- package/.framework/src/pages/admin/LogsPage.tsx +422 -75
- package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +113 -24
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +206 -34
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +50 -17
- package/.framework/src/pages/admin/PipelinesPage.tsx +160 -21
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +378 -88
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +125 -16
- package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +49 -10
- package/.framework/src/pages/admin/RoleDetailPage.tsx +130 -10
- package/.framework/src/pages/admin/RolesPage.tsx +171 -18
- package/.framework/src/pages/admin/SelectTestPage.tsx +34 -9
- package/.framework/src/pages/admin/ShadcnTestPage.tsx +49 -11
- package/.framework/src/pages/admin/SimpleDashboard.tsx +49 -10
- package/.framework/src/pages/admin/TestRunDetailPage.tsx +49 -4
- package/.framework/src/pages/admin/TestingDashboard.tsx +98 -28
- package/.framework/src/pages/admin/TimerDetailPage.tsx +143 -33
- package/.framework/src/pages/admin/TimersPage.tsx +48 -20
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +118 -30
- package/.framework/src/pages/admin/TriggersPage.tsx +64 -19
- package/.framework/src/pages/admin/TypeDetailPage.tsx +138 -15
- package/.framework/src/pages/admin/TypesPage.tsx +48 -20
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +465 -0
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +787 -0
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +699 -0
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +647 -0
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +616 -0
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +1402 -0
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +614 -0
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +571 -0
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +731 -0
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
- package/.framework/src/pages/auth/AuthConfirmPage.tsx +52 -51
- package/.framework/src/pages/auth/ForgotPasswordPage.tsx +31 -22
- package/.framework/src/pages/auth/LoginPage.tsx +50 -23
- package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -15
- package/.framework/src/pages/auth/RegisterPage.tsx +281 -317
- package/.framework/src/pages/spine-framework/APIPage.tsx +33 -0
- package/.framework/src/pages/spine-framework/CLIPage.tsx +33 -0
- package/.framework/src/types/auth.ts +128 -71
- package/.framework/src/types/types.ts +373 -157
- package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +39 -0
- package/custom/.devin/skills/spine-workbench-idea/SKILL.md +36 -0
- package/custom/.devin/skills/spine-workbench-implement/SKILL.md +46 -0
- package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +28 -0
- package/custom/.devin/skills/spine-workbench-plan/SKILL.md +38 -0
- package/docs/README.md +9 -130
- package/netlify.toml +5 -2
- package/package.json +13 -25
- package/scripts/kb-ingest-docs.ts +203 -0
- package/spine.config.json +65 -4
- package/.framework/migrations/001_schema.sql +0 -425
- package/.framework/migrations/002_rls_and_functions.sql +0 -763
- package/.framework/migrations/004_enhancements.sql +0 -43
- package/.framework/migrations/005_auth_user_trigger.sql +0 -105
- package/.framework/migrations/006_fix_current_actor_id.sql +0 -21
- package/.framework/migrations/016_invites.sql +0 -27
- package/.framework/migrations/017_fix_get_account_apps.sql +0 -78
- package/.framework/migrations/018_apps_required_roles.sql +0 -17
- package/.framework/migrations/019_triggers_unique_constraint.sql +0 -13
- package/.framework/migrations/020_get_account_apps_role_filter.sql +0 -117
- package/.framework/migrations/021_app_domains.sql +0 -112
- package/.framework/migrations/022_route_prefix_domain_unique.sql +0 -21
- package/.framework/migrations/023_match_embeddings_rpc.sql +0 -78
- package/.framework/migrations/024_messages_account_id.sql +0 -9
- package/.framework/migrations/025_retype_threads_messages.sql +0 -240
- package/.framework/migrations/026_fix_rls_policies.sql +0 -47
- package/.framework/migrations/027_embedding_lifecycle.sql +0 -176
- package/.framework/migrations/028_fix_message_data_permissions.sql +0 -49
- package/.framework/migrations/029_tighten_support_triage_prompt.sql +0 -41
- package/.framework/migrations/030_messages_updated_by.sql +0 -6
- package/.framework/migrations/031_seed_upsert_constraints.sql +0 -35
- package/docs/APPS.md +0 -232
- package/docs/ARCHITECTURE.md +0 -246
- package/docs/INSTALL.md +0 -155
- package/docs/design-schema-spec.md +0 -1837
- package/docs/dev-guides/01-create-an-app.md +0 -183
- package/docs/dev-guides/02-create-a-function.md +0 -178
- package/docs/dev-guides/03-create-a-component.md +0 -178
- package/docs/dev-guides/04-webhook-handlers.md +0 -129
- package/docs/dev-guides/05-testing.md +0 -168
- package/docs/dev-guides/README.md +0 -40
- package/docs/npm-packages-plan.md +0 -288
- package/docs/spine-core--api-reference.md +0 -822
|
@@ -1,53 +1,61 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module src/components/ui/Form
|
|
3
|
-
* @audience installer
|
|
4
|
-
* @layer frontend-component
|
|
5
|
-
* @stability stable
|
|
6
|
-
*
|
|
7
|
-
* Schema-driven form layout components.
|
|
8
|
-
*
|
|
9
|
-
* **`Form`** — renders a `<form>` element from an ordered `FieldDefinition[]`
|
|
10
|
-
* array via `FieldRenderer`. Manages touched-based error display (errors only
|
|
11
|
-
* shown for fields the user has interacted with). Includes Submit + optional
|
|
12
|
-
* Cancel buttons.
|
|
13
|
-
*
|
|
14
|
-
* **`FormField`** — single field wrapper delegating to `FieldRenderer` with
|
|
15
|
-
* touched-based error display.
|
|
16
|
-
*
|
|
17
|
-
* **`FormSection`** — optional titled group container for logical field
|
|
18
|
-
* groups within a form.
|
|
19
|
-
*
|
|
20
|
-
* **`FormRow`** / **`FormColumn`** — two-column responsive grid layout
|
|
21
|
-
* helpers. `FormColumn` accepts `span=2` to span both columns.
|
|
22
|
-
*
|
|
23
|
-
* @seeAlso src/components/shared/FieldRenderer.tsx
|
|
24
|
-
* @seeAlso src/hooks/useForm.ts (state management companion)
|
|
25
|
-
*/
|
|
26
1
|
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
// CIL[BEGIN chunk_id="Form_moduleheader_1783907801" type="module_header" identity="imports" parent="none"]
|
|
25
|
+
// CIL[DOC-MACRO purpose="Import React and form dependencies"]
|
|
26
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide all external dependencies for form components"]
|
|
27
|
+
// CIL[DOC-CONTEXT module="Form" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
28
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="React, FieldDefinition, FieldRenderer, Button, cn" errors="none" side_effects="none"]
|
|
29
|
+
// CIL[DOC-MICRO logic_summary="Imports React, types, field renderer, button component, and utility function" notable_decisions="[]"]
|
|
30
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
31
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
32
|
+
// CIL[DOC-AUDIENCE audience="developer"]
|
|
33
|
+
// 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/pages/admin/TypeDetailPage.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
34
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
35
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
36
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
37
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
38
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
27
39
|
import React from 'react'
|
|
28
40
|
import { FieldDefinition } from '../../types/types'
|
|
29
41
|
import { FieldRenderer } from '../shared/FieldRenderer'
|
|
30
42
|
import { Button } from './button'
|
|
31
43
|
import { cn } from '../../lib/utils'
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
* @prop showCancel - Shows the cancel button (default: `false`)
|
|
48
|
-
* @prop disabled - Disables all fields and the submit button
|
|
49
|
-
* @prop className - Additional Tailwind classes for the `<form>` element
|
|
50
|
-
*/
|
|
44
|
+
// CIL[END chunk_id="Form_moduleheader_1783907801"]
|
|
45
|
+
// CIL[BEGIN chunk_id="Form_formprops_1783907801" type="interface" identity="FormProps" parent="none"]
|
|
46
|
+
// CIL[DOC-MACRO purpose="Define main form component props interface"]
|
|
47
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Specify all props needed for Form component configuration"]
|
|
48
|
+
// CIL[DOC-CONTEXT module="Form" 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\",\"\\\"]"]
|
|
49
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="FormProps interface" errors="none" side_effects="none"]
|
|
50
|
+
// CIL[DOC-MICRO logic_summary="Comprehensive props for fields, data, validation, and form actions" notable_decisions="[]"]
|
|
51
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
52
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
53
|
+
// 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, \."]
|
|
54
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
55
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
56
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
57
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
58
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
51
59
|
interface FormProps {
|
|
52
60
|
fields: FieldDefinition[]
|
|
53
61
|
data: Record<string, any>
|
|
@@ -64,14 +72,21 @@ interface FormProps {
|
|
|
64
72
|
disabled?: boolean
|
|
65
73
|
className?: string
|
|
66
74
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
+
// CIL[END chunk_id="Form_formprops_1783907801"]
|
|
76
|
+
// CIL[BEGIN chunk_id="Form_form_1783907801" type="function" identity="Form" parent="none"]
|
|
77
|
+
// CIL[DOC-MACRO purpose="Render schema-driven form with validation and actions"]
|
|
78
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle form submission, field rendering, and error display"]
|
|
79
|
+
// CIL[DOC-CONTEXT module="Form" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
|
|
80
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="Form element" errors="none" side_effects="Calls onSubmit, onChange, onBlur callbacks"]
|
|
81
|
+
// CIL[DOC-MICRO logic_summary="Maps fields to FieldRenderer, shows errors only for touched fields" 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: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/table-primitives.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."]
|
|
88
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
89
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
75
90
|
export function Form({
|
|
76
91
|
fields,
|
|
77
92
|
data,
|
|
@@ -142,16 +157,21 @@ export function Form({
|
|
|
142
157
|
</form>
|
|
143
158
|
)
|
|
144
159
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
160
|
+
// CIL[END chunk_id="Form_form_1783907801"]
|
|
161
|
+
// CIL[BEGIN chunk_id="Form_formfieldprops_1783907801" type="interface" identity="FormFieldProps" parent="none"]
|
|
162
|
+
// CIL[DOC-MACRO purpose="Define props for single form field wrapper"]
|
|
163
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Specify props needed for individual field rendering"]
|
|
164
|
+
// CIL[DOC-CONTEXT module="Form" layer="frontend-component" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
|
|
165
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="FormFieldProps interface" errors="none" side_effects="none"]
|
|
166
|
+
// CIL[DOC-MICRO logic_summary="Props for field definition, value, error state, and callbacks" notable_decisions="[]"]
|
|
167
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
168
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
169
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/IntegrationsPage.tsx, custom/apps/portal/pages/ContentPage.tsx, \."]
|
|
170
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
171
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
172
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
173
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
174
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
155
175
|
interface FormFieldProps {
|
|
156
176
|
field: FieldDefinition
|
|
157
177
|
value: any
|
|
@@ -161,14 +181,21 @@ interface FormFieldProps {
|
|
|
161
181
|
onBlur?: () => void
|
|
162
182
|
readonly?: boolean
|
|
163
183
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
184
|
+
// CIL[END chunk_id="Form_formfieldprops_1783907801"]
|
|
185
|
+
// CIL[BEGIN chunk_id="Form_formfield_1783907801" type="function" identity="FormField" parent="none"]
|
|
186
|
+
// CIL[DOC-MACRO purpose="Render single form field with touched-gated error display"]
|
|
187
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Wrap FieldRenderer with conditional error visibility"]
|
|
188
|
+
// CIL[DOC-CONTEXT module="Form" layer="frontend-component" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/db.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
|
|
189
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="FieldRenderer component" errors="none" side_effects="Delegates to onChange/onBlur"]
|
|
190
|
+
// CIL[DOC-MICRO logic_summary="Passes error to FieldRenderer only when field has been touched" notable_decisions="[]"]
|
|
191
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
192
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
193
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/db.ts, custom/apps/portal/pages/ContentPage.tsx, \."]
|
|
194
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
195
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
196
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
197
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
198
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
172
199
|
export function FormField({
|
|
173
200
|
field,
|
|
174
201
|
value,
|
|
@@ -189,27 +216,42 @@ export function FormField({
|
|
|
189
216
|
/>
|
|
190
217
|
)
|
|
191
218
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
219
|
+
// CIL[END chunk_id="Form_formfield_1783907801"]
|
|
220
|
+
// CIL[BEGIN chunk_id="Form_formsectionprops_1783907801" type="interface" identity="FormSectionProps" parent="none"]
|
|
221
|
+
// CIL[DOC-MACRO purpose="Define props for form section container"]
|
|
222
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Specify props for grouping form fields with title/description"]
|
|
223
|
+
// CIL[DOC-CONTEXT module="Form" layer="frontend-component" related_files="[]"]
|
|
224
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="FormSectionProps interface" errors="none" side_effects="none"]
|
|
225
|
+
// CIL[DOC-MICRO logic_summary="Props for optional title, description, children, and styling" notable_decisions="[]"]
|
|
226
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
227
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
228
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
229
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
230
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
231
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
232
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
233
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
199
234
|
interface FormSectionProps {
|
|
200
235
|
title?: string
|
|
201
236
|
description?: string
|
|
202
237
|
children: React.ReactNode
|
|
203
238
|
className?: string
|
|
204
239
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
240
|
+
// CIL[END chunk_id="Form_formsectionprops_1783907801"]
|
|
241
|
+
// CIL[BEGIN chunk_id="Form_formsection_1783907801" type="function" identity="FormSection" parent="none"]
|
|
242
|
+
// CIL[DOC-MACRO purpose="Render titled group container for form fields"]
|
|
243
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Display optional title/description with children content"]
|
|
244
|
+
// CIL[DOC-CONTEXT module="Form" layer="frontend-component" related_files="[]"]
|
|
245
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="Styled div container" errors="none" side_effects="none"]
|
|
246
|
+
// CIL[DOC-MICRO logic_summary="Conditionally renders header section when title or description provided" notable_decisions="[]"]
|
|
247
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
248
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
249
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
250
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
251
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
252
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
253
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
254
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
213
255
|
export function FormSection({ title, description, children, className }: FormSectionProps) {
|
|
214
256
|
return (
|
|
215
257
|
<div className={cn('space-y-4', className)}>
|
|
@@ -227,20 +269,40 @@ export function FormSection({ title, description, children, className }: FormSec
|
|
|
227
269
|
</div>
|
|
228
270
|
)
|
|
229
271
|
}
|
|
230
|
-
|
|
231
|
-
|
|
272
|
+
// CIL[END chunk_id="Form_formsection_1783907801"]
|
|
273
|
+
// CIL[BEGIN chunk_id="Form_formrowprops_1783907801" type="interface" identity="FormRowProps" parent="none"]
|
|
274
|
+
// CIL[DOC-MACRO purpose="Define props for responsive form row container"]
|
|
275
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Specify props for two-column grid layout row"]
|
|
276
|
+
// CIL[DOC-CONTEXT module="Form" layer="frontend-component" related_files="[]"]
|
|
277
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="FormRowProps interface" errors="none" side_effects="none"]
|
|
278
|
+
// CIL[DOC-MICRO logic_summary="Props for children content and optional styling classes" notable_decisions="[]"]
|
|
279
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
280
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
281
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
282
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
283
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
284
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
285
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
286
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
232
287
|
interface FormRowProps {
|
|
233
288
|
children: React.ReactNode
|
|
234
289
|
className?: string
|
|
235
290
|
}
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
291
|
+
// CIL[END chunk_id="Form_formrowprops_1783907801"]
|
|
292
|
+
// CIL[BEGIN chunk_id="Form_formrow_1783907801" type="function" identity="FormRow" parent="none"]
|
|
293
|
+
// CIL[DOC-MACRO purpose="Render two-column responsive grid for form fields"]
|
|
294
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide responsive grid layout container"]
|
|
295
|
+
// CIL[DOC-CONTEXT module="Form" layer="frontend-component" related_files="[]"]
|
|
296
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="Grid div container" errors="none" side_effects="none"]
|
|
297
|
+
// CIL[DOC-MICRO logic_summary="Uses Tailwind grid classes for responsive two-column layout" notable_decisions="[]"]
|
|
298
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
299
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
300
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
301
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
302
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
303
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
304
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
305
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
244
306
|
export function FormRow({ children, className }: FormRowProps) {
|
|
245
307
|
return (
|
|
246
308
|
<div className={cn('grid grid-cols-1 sm:grid-cols-2 gap-4', className)}>
|
|
@@ -248,25 +310,41 @@ export function FormRow({ children, className }: FormRowProps) {
|
|
|
248
310
|
</div>
|
|
249
311
|
)
|
|
250
312
|
}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
313
|
+
// CIL[END chunk_id="Form_formrow_1783907801"]
|
|
314
|
+
// CIL[BEGIN chunk_id="Form_formcolumnprops_1783907801" type="interface" identity="FormColumnProps" parent="none"]
|
|
315
|
+
// CIL[DOC-MACRO purpose="Define props for form column within grid row"]
|
|
316
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Specify props for column span and content"]
|
|
317
|
+
// CIL[DOC-CONTEXT module="Form" layer="frontend-component" related_files="[]"]
|
|
318
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="FormColumnProps interface" errors="none" side_effects="none"]
|
|
319
|
+
// CIL[DOC-MICRO logic_summary="Props for children, column span (1 or 2), and styling" notable_decisions="[]"]
|
|
320
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
321
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
322
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
323
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
324
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
325
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
326
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
327
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
257
328
|
interface FormColumnProps {
|
|
258
329
|
children: React.ReactNode
|
|
259
330
|
span?: 1 | 2
|
|
260
331
|
className?: string
|
|
261
332
|
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
333
|
+
// CIL[END chunk_id="Form_formcolumnprops_1783907801"]
|
|
334
|
+
// CIL[BEGIN chunk_id="Form_formcolumn_1783907801" type="function" identity="FormColumn" parent="none"]
|
|
335
|
+
// CIL[DOC-MACRO purpose="Render column within FormRow grid with span control"]
|
|
336
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide column container with configurable span"]
|
|
337
|
+
// CIL[DOC-CONTEXT module="Form" layer="frontend-component" related_files="[]"]
|
|
338
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="Column div with span classes" errors="none" side_effects="none"]
|
|
339
|
+
// CIL[DOC-MICRO logic_summary="Maps span values to Tailwind col-span classes for grid layout" notable_decisions="[]"]
|
|
340
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
341
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
342
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
343
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
344
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
345
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
346
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
347
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
270
348
|
export function FormColumn({ children, span = 1, className }: FormColumnProps) {
|
|
271
349
|
const spanClasses = {
|
|
272
350
|
1: 'col-span-1',
|
|
@@ -279,3 +357,4 @@ export function FormColumn({ children, span = 1, className }: FormColumnProps) {
|
|
|
279
357
|
</div>
|
|
280
358
|
)
|
|
281
359
|
}
|
|
360
|
+
// CIL[END chunk_id="Form_formcolumn_1783907801"]
|
|
@@ -1,43 +1,50 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module src/components/ui/ItemCard
|
|
3
|
-
* @audience installer
|
|
4
|
-
* @layer frontend-component
|
|
5
|
-
* @stability stable
|
|
6
|
-
*
|
|
7
|
-
* Item display components for grid-based views.
|
|
8
|
-
*
|
|
9
|
-
* **`ItemCard`** — renders a single `Item` in either full (`compact=false`)
|
|
10
|
-
* or compact (`compact=true`) form. Derives its display values from
|
|
11
|
-
* `item.title`, `item.description`, and the first 3 entries of `item.data`.
|
|
12
|
-
* Optional action buttons (`onView`, `onEdit`, `onDelete`) are shown when
|
|
13
|
-
* `showActions=true`.
|
|
14
|
-
*
|
|
15
|
-
* **`ItemGrid`** — renders a responsive grid of `ItemCard` instances.
|
|
16
|
-
* Shows a spinner on `loading=true` and an empty state with a doc icon
|
|
17
|
-
* when `items` is empty.
|
|
18
|
-
*
|
|
19
|
-
* @seeAlso src/components/ui/ItemListView.tsx (combines with DataTable)
|
|
20
|
-
* @seeAlso src/types/types.ts (Item, ItemType)
|
|
21
|
-
* @seeAlso src/lib/utils.ts (formatDateTime, truncateText)
|
|
22
|
-
*/
|
|
23
1
|
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// CIL[BEGIN chunk_id="ItemCard_moduleheader_1783907801" type="module_header" identity="imports" parent="none"]
|
|
13
|
+
// CIL[DOC-MACRO purpose="Import React and item display dependencies"]
|
|
14
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide all external dependencies for item card components"]
|
|
15
|
+
// CIL[DOC-CONTEXT module="ItemCard" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
|
|
16
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="React, Item types, UI components, icons, utils" errors="none" side_effects="none"]
|
|
17
|
+
// CIL[DOC-MICRO logic_summary="Imports React, item types, badge, button, icons, and utility functions" notable_decisions="[]"]
|
|
18
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
19
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
20
|
+
// CIL[DOC-AUDIENCE audience="developer"]
|
|
21
|
+
// 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/pages/admin/RolesPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/components/ui/dialog.tsx, \."]
|
|
22
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
23
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
24
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
25
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
26
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
24
27
|
import React from 'react'
|
|
25
28
|
import { Item, ItemType } from '../../types/types'
|
|
26
29
|
import { Badge } from './badge'
|
|
27
30
|
import { Button } from './button'
|
|
28
31
|
import { Box, FileText, Calendar, User, MoreVertical } from 'lucide-react';
|
|
29
32
|
import { formatDateTime, truncateText } from '../../lib/utils'
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
33
|
+
// CIL[END chunk_id="ItemCard_moduleheader_1783907801"]
|
|
34
|
+
// CIL[BEGIN chunk_id="ItemCard_itemcardprops_1783907801" type="interface" identity="ItemCardProps" parent="none"]
|
|
35
|
+
// CIL[DOC-MACRO purpose="Define props for item card component"]
|
|
36
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Specify all props needed for ItemCard component configuration"]
|
|
37
|
+
// CIL[DOC-CONTEXT module="ItemCard" layer="frontend-component" related_files="[\".framework/src/components/layout/Sidebar.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
|
|
38
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="ItemCardProps interface" errors="none" side_effects="none"]
|
|
39
|
+
// CIL[DOC-MICRO logic_summary="Props for item data, action callbacks, and display options" notable_decisions="[]"]
|
|
40
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
41
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
42
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/layout/Sidebar.tsx, .framework/src/components/ui/dialog.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
|
|
43
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
44
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
45
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
46
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
47
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
41
48
|
interface ItemCardProps {
|
|
42
49
|
item: Item & { item_type?: ItemType | string }
|
|
43
50
|
onEdit?: (item: Item) => void
|
|
@@ -46,14 +53,21 @@ interface ItemCardProps {
|
|
|
46
53
|
showActions?: boolean
|
|
47
54
|
compact?: boolean
|
|
48
55
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
56
|
+
// CIL[END chunk_id="ItemCard_itemcardprops_1783907801"]
|
|
57
|
+
// CIL[BEGIN chunk_id="ItemCard_itemcard_1783907801" type="function" identity="ItemCard" parent="none"]
|
|
58
|
+
// CIL[DOC-MACRO purpose="Render item card with optional actions in full or compact mode"]
|
|
59
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Display item data with type badge, metadata, and action buttons"]
|
|
60
|
+
// CIL[DOC-CONTEXT module="ItemCard" layer="frontend-component" related_files="[\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
61
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="Item card component" errors="none" side_effects="Calls action callbacks"]
|
|
62
|
+
// CIL[DOC-MICRO logic_summary="Renders different layouts based on compact prop, extracts data from item" notable_decisions="[]"]
|
|
63
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
64
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
65
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
66
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
67
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
68
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
69
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
70
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
57
71
|
export function ItemCard({
|
|
58
72
|
item,
|
|
59
73
|
onEdit,
|
|
@@ -224,15 +238,21 @@ export function ItemCard({
|
|
|
224
238
|
</div>
|
|
225
239
|
)
|
|
226
240
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
241
|
+
// CIL[END chunk_id="ItemCard_itemcard_1783907801"]
|
|
242
|
+
// CIL[BEGIN chunk_id="ItemCard_itemgridprops_1783907801" type="interface" identity="ItemGridProps" parent="none"]
|
|
243
|
+
// CIL[DOC-MACRO purpose="Define props for item grid container"]
|
|
244
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Specify all props needed for ItemGrid component configuration"]
|
|
245
|
+
// CIL[DOC-CONTEXT module="ItemCard" layer="frontend-component" related_files="[\".framework/src/components/layout/Sidebar.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"\\\"]"]
|
|
246
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="ItemGridProps interface" errors="none" side_effects="none"]
|
|
247
|
+
// CIL[DOC-MICRO logic_summary="Props for items array, loading state, actions, and display options" notable_decisions="[]"]
|
|
248
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
249
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
250
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/layout/Sidebar.tsx, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/IntegrationsPage.tsx, \."]
|
|
251
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
252
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
253
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
254
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
255
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
236
256
|
interface ItemGridProps {
|
|
237
257
|
items: (Item & { item_type: ItemType })[]
|
|
238
258
|
loading?: boolean
|
|
@@ -242,14 +262,21 @@ interface ItemGridProps {
|
|
|
242
262
|
compact?: boolean
|
|
243
263
|
emptyMessage?: string
|
|
244
264
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
265
|
+
// CIL[END chunk_id="ItemCard_itemgridprops_1783907801"]
|
|
266
|
+
// CIL[BEGIN chunk_id="ItemCard_itemgrid_1783907801" type="function" identity="ItemGrid" parent="none"]
|
|
267
|
+
// CIL[DOC-MACRO purpose="Render responsive grid of item cards with loading and empty states"]
|
|
268
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Display items in grid layout with loading spinner and empty message"]
|
|
269
|
+
// CIL[DOC-CONTEXT module="ItemCard" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
|
|
270
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="Grid container or loading/empty states" errors="none" side_effects="Delegates to ItemCard actions"]
|
|
271
|
+
// CIL[DOC-MICRO logic_summary="Maps items to ItemCard components, handles loading and empty states" notable_decisions="[]"]
|
|
272
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
273
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
274
|
+
// 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/pages/admin/RolesPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, \."]
|
|
275
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
276
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
277
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
278
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
279
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
253
280
|
export function ItemGrid({
|
|
254
281
|
items,
|
|
255
282
|
loading = false,
|
|
@@ -294,3 +321,4 @@ export function ItemGrid({
|
|
|
294
321
|
</div>
|
|
295
322
|
)
|
|
296
323
|
}
|
|
324
|
+
// CIL[END chunk_id="ItemCard_itemgrid_1783907801"]
|